ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1idXMtdXNiIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJ1cy11c2IKaW5kZXggZTJiYzcwMC4uODMxZjE1ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJ1cy11c2IKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJ1cy11c2IKQEAgLTMyLDEwICszMiw5IEBACiBLZXJuZWxWZXJzaW9uOgkyLjYuMjUKIENvbnRhY3Q6CVNhcmFoIFNoYXJwIDxzYXJhaC5hLnNoYXJwQGludGVsLmNvbT4KIERlc2NyaXB0aW9uOgotCQlJZiBDT05GSUdfUE1fUlVOVElNRSBpcyBlbmFibGVkIHRoZW4gdGhpcyBmaWxlCi0JCWlzIHByZXNlbnQuICBXaGVuIHJlYWQsIGl0IHJldHVybnMgdGhlIHRvdGFsIHRpbWUgKGluIG1zZWMpCi0JCXRoYXQgdGhlIFVTQiBkZXZpY2UgaGFzIGJlZW4gY29ubmVjdGVkIHRvIHRoZSBtYWNoaW5lLiAgVGhpcwotCQlmaWxlIGlzIHJlYWQtb25seS4KKwkJSWYgQ09ORklHX1BNIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBmaWxlIGlzIHByZXNlbnQuICBXaGVuIHJlYWQsCisJCWl0IHJldHVybnMgdGhlIHRvdGFsIHRpbWUgKGluIG1zZWMpIHRoYXQgdGhlIFVTQiBkZXZpY2UgaGFzIGJlZW4KKwkJY29ubmVjdGVkIHRvIHRoZSBtYWNoaW5lLiAgVGhpcyBmaWxlIGlzIHJlYWQtb25seS4KIFVzZXJzOgogCQlQb3dlclRPUCA8cG93ZXJ0b3BAbGlzdHMuMDEub3JnPgogCQlodHRwczovLzAxLm9yZy9wb3dlcnRvcC8KQEAgLTQ1LDEwICs0NCw5IEBACiBLZXJuZWxWZXJzaW9uOgkyLjYuMjUKIENvbnRhY3Q6CVNhcmFoIFNoYXJwIDxzYXJhaC5hLnNoYXJwQGludGVsLmNvbT4KIERlc2NyaXB0aW9uOgotCQlJZiBDT05GSUdfUE1fUlVOVElNRSBpcyBlbmFibGVkIHRoZW4gdGhpcyBmaWxlCi0JCWlzIHByZXNlbnQuICBXaGVuIHJlYWQsIGl0IHJldHVybnMgdGhlIHRvdGFsIHRpbWUgKGluIG1zZWMpCi0JCXRoYXQgdGhlIFVTQiBkZXZpY2UgaGFzIGJlZW4gYWN0aXZlLCBpLmUuIG5vdCBpbiBhIHN1c3BlbmRlZAotCQlzdGF0ZS4gIFRoaXMgZmlsZSBpcyByZWFkLW9ubHkuCisJCUlmIENPTkZJR19QTSBpcyBlbmFibGVkLCB0aGVuIHRoaXMgZmlsZSBpcyBwcmVzZW50LiAgV2hlbiByZWFkLAorCQlpdCByZXR1cm5zIHRoZSB0b3RhbCB0aW1lIChpbiBtc2VjKSB0aGF0IHRoZSBVU0IgZGV2aWNlIGhhcyBiZWVuCisJCWFjdGl2ZSwgaS5lLiBub3QgaW4gYSBzdXNwZW5kZWQgc3RhdGUuICBUaGlzIGZpbGUgaXMgcmVhZC1vbmx5LgogCiAJCVRvb2xzIGNhbiB1c2UgdGhpcyBmaWxlIGFuZCB0aGUgY29ubmVjdGVkX2R1cmF0aW9uIGZpbGUgdG8KIAkJY29tcHV0ZSB0aGUgcGVyY2VudGFnZSBvZiB0aW1lIHRoYXQgYSBkZXZpY2UgaGFzIGJlZW4gYWN0aXZlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci1pYl9zcnAgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZHJpdmVyLWliX3NycAppbmRleCBiOTY4OGRlLi43MDQ5YTJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZHJpdmVyLWliX3NycAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZHJpdmVyLWliX3NycApAQCAtNTUsMTIgKzU1LDEyIEBACiAJCSAgb25seSBzYWZlIHdpdGggcGFydGlhbCBtZW1vcnkgZGVzY3JpcHRvciBsaXN0IHN1cHBvcnQgZW5hYmxlZAogCQkgIChhbGxvd19leHRfc2c9MSkuCiAJCSogY29tcF92ZWN0b3IsIGEgbnVtYmVyIGluIHRoZSByYW5nZSAwLi5uLTEgc3BlY2lmeWluZyB0aGUKLQkJICBNU0ktWCBjb21wbGV0aW9uIHZlY3Rvci4gU29tZSBIQ0EncyBhbGxvY2F0ZSBtdWx0aXBsZSAobikKLQkJICBNU0ktWCB2ZWN0b3JzIHBlciBIQ0EgcG9ydC4gSWYgdGhlIElSUSBhZmZpbml0eSBtYXNrcyBvZgotCQkgIHRoZXNlIGludGVycnVwdHMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgc3VjaCB0aGF0IGVhY2ggTVNJLVgKLQkJICBpbnRlcnJ1cHQgaXMgaGFuZGxlZCBieSBhIGRpZmZlcmVudCBDUFUgdGhlbiB0aGUgY29tcF92ZWN0b3IKLQkJICBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gc3ByZWFkIHRoZSBTUlAgY29tcGxldGlvbiB3b3JrbG9hZAotCQkgIG92ZXIgbXVsdGlwbGUgQ1BVJ3MuCisJCSAgTVNJLVggY29tcGxldGlvbiB2ZWN0b3Igb2YgdGhlIGZpcnN0IFJETUEgY2hhbm5lbC4gU29tZQorCQkgIEhDQSdzIGFsbG9jYXRlIG11bHRpcGxlIChuKSBNU0ktWCB2ZWN0b3JzIHBlciBIQ0EgcG9ydC4gSWYKKwkJICB0aGUgSVJRIGFmZmluaXR5IG1hc2tzIG9mIHRoZXNlIGludGVycnVwdHMgaGF2ZSBiZWVuCisJCSAgY29uZmlndXJlZCBzdWNoIHRoYXQgZWFjaCBNU0ktWCBpbnRlcnJ1cHQgaXMgaGFuZGxlZCBieSBhCisJCSAgZGlmZmVyZW50IENQVSB0aGVuIHRoZSBjb21wX3ZlY3RvciBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8KKwkJICBzcHJlYWQgdGhlIFNSUCBjb21wbGV0aW9uIHdvcmtsb2FkIG92ZXIgbXVsdGlwbGUgQ1BVJ3MuCiAJCSogdGxfcmV0cnlfY291bnQsIGEgbnVtYmVyIGluIHRoZSByYW5nZSAyLi43IHNwZWNpZnlpbmcgdGhlCiAJCSAgSUIgUkMgcmV0cnkgY291bnQuCiAJCSogcXVldWVfc2l6ZSwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmRzIHRoYXQgdGhlCkBAIC04OCw2ICs4OCwxMyBAQAogCQlkZXNjcmlwdG9yIGxpc3QgaW4gYW4gU1JQX0NNRCB3aGVuIGNvbW11bmljYXRpbmcgd2l0aCBhbiBTUlAKIAkJdGFyZ2V0LgogCitXaGF0OgkJL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdDxuPi9jaF9jb3VudAorRGF0ZToJCUFwcmlsIDEsIDIwMTUKK0tlcm5lbFZlcnNpb246CTMuMTkKK0NvbnRhY3Q6CWxpbnV4LXJkbWFAdmdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoJTnVtYmVyIG9mIFJETUEgY2hhbm5lbHMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBTUlAKKwkJdGFyZ2V0LgorCiBXaGF0OgkJL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdDxuPi9jbWRfc2dfZW50cmllcwogRGF0ZToJCU1heSAxOSwgMjAxMQogS2VybmVsVmVyc2lvbjoJMi42LjM5CkBAIC05NSw2ICsxMDIsMTIgQEAKIERlc2NyaXB0aW9uOglNYXhpbXVtIG51bWJlciBvZiBkYXRhIGJ1ZmZlciBkZXNjcmlwdG9ycyB0aGF0IG1heSBiZSBzZW50IHRvCiAJCXRoZSB0YXJnZXQgaW4gYSBzaW5nbGUgU1JQX0NNRCByZXF1ZXN0LgogCitXaGF0OgkJL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdDxuPi9jb21wX3ZlY3RvcgorRGF0ZToJCVNlcHRlbWJlciAyLCAyMDEzCitLZXJuZWxWZXJzaW9uOgkzLjExCitDb250YWN0OglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CUNvbXBsZXRpb24gdmVjdG9yIHVzZWQgZm9yIHRoZSBmaXJzdCBSRE1BIGNoYW5uZWwuCisKIFdoYXQ6CQkvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0PG4+L2RnaWQKIERhdGU6CQlKdW5lIDE3LCAyMDA2CiBLZXJuZWxWZXJzaW9uOgkyLjYuMTcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaQppbmRleCBlZTZjMDQwLi5iM2JjNTBmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCkBAIC0yODEsMyArMjgxLDE2IEBACiAJCW9wdC1vdXQgb2YgZHJpdmVyIGJpbmRpbmcgdXNpbmcgYSBkcml2ZXJfb3ZlcnJpZGUgbmFtZSBzdWNoIGFzCiAJCSJub25lIi4gIE9ubHkgYSBzaW5nbGUgZHJpdmVyIG1heSBiZSBzcGVjaWZpZWQgaW4gdGhlIG92ZXJyaWRlLAogCQl0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBwYXJzaW5nIGRlbGltaXRlcnMuCisKK1doYXQ6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vbnVtYV9ub2RlCitEYXRlOgkJT2N0IDIwMTQKK0NvbnRhY3Q6CVByYXJpdCBCaGFyZ2F2YSA8cHJhcml0QHJlZGhhdC5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBOVU1BIG5vZGUgdG8gd2hpY2ggdGhlIFBDSSBkZXZpY2UgaXMKKwkJYXR0YWNoZWQsIG9yIC0xIGlmIHRoZSBub2RlIGlzIHVua25vd24uICBUaGUgaW5pdGlhbCB2YWx1ZQorCQljb21lcyBmcm9tIGFuIEFDUEkgX1BYTSBtZXRob2Qgb3IgYSBzaW1pbGFyIGZpcm13YXJlCisJCXNvdXJjZS4gIElmIHRoYXQgaXMgbWlzc2luZyBvciBpbmNvcnJlY3QsIHRoaXMgZmlsZSBjYW4gYmUKKwkJd3JpdHRlbiB0byBvdmVycmlkZSB0aGUgbm9kZS4gIEluIHRoYXQgY2FzZSwgcGxlYXNlIHJlcG9ydAorCQlhIGZpcm13YXJlIGJ1ZyB0byB0aGUgc3lzdGVtIHZlbmRvci4gIFdyaXRpbmcgdG8gdGhpcyBmaWxlCisJCXRhaW50cyB0aGUga2VybmVsIHdpdGggVEFJTlRfRklSTVdBUkVfV09SS0FST1VORCwgd2hpY2gKKwkJcmVkdWNlcyB0aGUgc3VwcG9ydGFiaWxpdHkgb2YgeW91ciBzeXN0ZW0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKaW5kZXggNjE0ZDQ1MS4uZTVjYzc2MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgpAQCAtMTA0LDE2ICsxMDQsMTUgQEAKIERhdGU6CQlTZXB0ZW1iZXIgMjAxMQogQ29udGFjdDoJQW5kaXJ5IFh1IDxhbmRpcnkueHVAYW1kLmNvbT4KIERlc2NyaXB0aW9uOgotCQlJZiBDT05GSUdfUE1fUlVOVElNRSBpcyBzZXQgYW5kIGEgVVNCIDIuMCBscG0tY2FwYWJsZSBkZXZpY2UKLQkJaXMgcGx1Z2dlZCBpbiB0byBhIHhIQ0kgaG9zdCB3aGljaCBzdXBwb3J0IGxpbmsgUE0sIGl0IHdpbGwKLQkJcGVyZm9ybSBhIExQTSB0ZXN0OyBpZiB0aGUgdGVzdCBpcyBwYXNzZWQgYW5kIGhvc3Qgc3VwcG9ydHMKLQkJVVNCMiBoYXJkd2FyZSBMUE0gKHhIQ0kgMS4wIGZlYXR1cmUpLCBVU0IyIGhhcmR3YXJlIExQTSB3aWxsCi0JCWJlIGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UgYW5kIHRoZSBVU0IgZGV2aWNlIGRpcmVjdG9yeSB3aWxsCi0JCWNvbnRhaW4gYSBmaWxlIG5hbWVkIHBvd2VyL3VzYjJfaGFyZHdhcmVfbHBtLiAgVGhlIGZpbGUgaG9sZHMKLQkJYSBzdHJpbmcgdmFsdWUgKGVuYWJsZSBvciBkaXNhYmxlKSBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90Ci0JCVVTQjIgaGFyZHdhcmUgTFBNIGlzIGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UuIERldmVsb3BlciBjYW4KLQkJd3JpdGUgeS9ZLzEgb3Igbi9OLzAgdG8gdGhlIGZpbGUgdG8gZW5hYmxlL2Rpc2FibGUgdGhlCi0JCWZlYXR1cmUuCisJCUlmIENPTkZJR19QTSBpcyBzZXQgYW5kIGEgVVNCIDIuMCBscG0tY2FwYWJsZSBkZXZpY2UgaXMgcGx1Z2dlZAorCQlpbiB0byBhIHhIQ0kgaG9zdCB3aGljaCBzdXBwb3J0IGxpbmsgUE0sIGl0IHdpbGwgcGVyZm9ybSBhIExQTQorCQl0ZXN0OyBpZiB0aGUgdGVzdCBpcyBwYXNzZWQgYW5kIGhvc3Qgc3VwcG9ydHMgVVNCMiBoYXJkd2FyZSBMUE0KKwkJKHhIQ0kgMS4wIGZlYXR1cmUpLCBVU0IyIGhhcmR3YXJlIExQTSB3aWxsIGJlIGVuYWJsZWQgZm9yIHRoZQorCQlkZXZpY2UgYW5kIHRoZSBVU0IgZGV2aWNlIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWxlIG5hbWVkCisJCXBvd2VyL3VzYjJfaGFyZHdhcmVfbHBtLiAgVGhlIGZpbGUgaG9sZHMgYSBzdHJpbmcgdmFsdWUgKGVuYWJsZQorCQlvciBkaXNhYmxlKSBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IFVTQjIgaGFyZHdhcmUgTFBNIGlzCisJCWVuYWJsZWQgZm9yIHRoZSBkZXZpY2UuIERldmVsb3BlciBjYW4gd3JpdGUgeS9ZLzEgb3Igbi9OLzAgdG8KKwkJdGhlIGZpbGUgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGZlYXR1cmUuCiAKIFdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy8uLi4vcmVtb3ZhYmxlCiBEYXRlOgkJRmVicnVhcnkgMjAxMgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9JUlEtZG9tYWluLnR4dCBiL0RvY3VtZW50YXRpb24vSVJRLWRvbWFpbi50eHQKaW5kZXggOGE4YjgyYy4uMzljZmE3MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9JUlEtZG9tYWluLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL0lSUS1kb21haW4udHh0CkBAIC0xNTEsMyArMTUxLDc0IEBACiB0aGF0IHRoZSBkcml2ZXIgdXNpbmcgdGhlIHNpbXBsZSBkb21haW4gY2FsbCBpcnFfY3JlYXRlX21hcHBpbmcoKQogYmVmb3JlIGFueSBpcnFfZmluZF9tYXBwaW5nKCkgc2luY2UgdGhlIGxhdHRlciB3aWxsIGFjdHVhbGx5IHdvcmsKIGZvciB0aGUgc3RhdGljIElSUSBhc3NpZ25tZW50IGNhc2UuCisKKz09PT0gSGllcmFyY2h5IElSUSBkb21haW4gPT09PQorT24gc29tZSBhcmNoaXRlY3R1cmVzLCB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgaW50ZXJydXB0IGNvbnRyb2xsZXJzCitpbnZvbHZlZCBpbiBkZWxpdmVyaW5nIGFuIGludGVycnVwdCBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIHRhcmdldCBDUFUuCitMZXQncyBsb29rIGF0IGEgdHlwaWNhbCBpbnRlcnJ1cHQgZGVsaXZlcmluZyBwYXRoIG9uIHg4NiBwbGF0Zm9ybXM6CisKK0RldmljZSAtLT4gSU9BUElDIC0+IEludGVycnVwdCByZW1hcHBpbmcgQ29udHJvbGxlciAtPiBMb2NhbCBBUElDIC0+IENQVQorCitUaGVyZSBhcmUgdGhyZWUgaW50ZXJydXB0IGNvbnRyb2xsZXJzIGludm9sdmVkOgorMSkgSU9BUElDIGNvbnRyb2xsZXIKKzIpIEludGVycnVwdCByZW1hcHBpbmcgY29udHJvbGxlcgorMykgTG9jYWwgQVBJQyBjb250cm9sbGVyCisKK1RvIHN1cHBvcnQgc3VjaCBhIGhhcmR3YXJlIHRvcG9sb2d5IGFuZCBtYWtlIHNvZnR3YXJlIGFyY2hpdGVjdHVyZSBtYXRjaAoraGFyZHdhcmUgYXJjaGl0ZWN0dXJlLCBhbiBpcnFfZG9tYWluIGRhdGEgc3RydWN0dXJlIGlzIGJ1aWx0IGZvciBlYWNoCitpbnRlcnJ1cHQgY29udHJvbGxlciBhbmQgdGhvc2UgaXJxX2RvbWFpbnMgYXJlIG9yZ2FuaXplZCBpbnRvIGhpZXJhcmNoeS4KK1doZW4gYnVpbGRpbmcgaXJxX2RvbWFpbiBoaWVyYXJjaHksIHRoZSBpcnFfZG9tYWluIG5lYXIgdG8gdGhlIGRldmljZSBpcworY2hpbGQgYW5kIHRoZSBpcnFfZG9tYWluIG5lYXIgdG8gQ1BVIGlzIHBhcmVudC4gU28gYSBoaWVyYXJjaHkgc3RydWN0dXJlCithcyBiZWxvdyB3aWxsIGJlIGJ1aWx0IGZvciB0aGUgZXhhbXBsZSBhYm92ZS4KKwlDUFUgVmVjdG9yIGlycV9kb21haW4gKHJvb3QgaXJxX2RvbWFpbiB0byBtYW5hZ2UgQ1BVIHZlY3RvcnMpCisJCV4KKwkJfAorCUludGVycnVwdCBSZW1hcHBpbmcgaXJxX2RvbWFpbiAobWFuYWdlIGlycV9yZW1hcHBpbmcgZW50cmllcykKKwkJXgorCQl8CisJSU9BUElDIGlycV9kb21haW4gKG1hbmFnZSBJT0FQSUMgZGVsaXZlcnkgZW50cmllcy9waW5zKQorCitUaGVyZSBhcmUgZm91ciBtYWpvciBpbnRlcmZhY2VzIHRvIHVzZSBoaWVyYXJjaHkgaXJxX2RvbWFpbjoKKzEpIGlycV9kb21haW5fYWxsb2NfaXJxcygpOiBhbGxvY2F0ZSBJUlEgZGVzY3JpcHRvcnMgYW5kIGludGVycnVwdAorICAgY29udHJvbGxlciByZWxhdGVkIHJlc291cmNlcyB0byBkZWxpdmVyIHRoZXNlIGludGVycnVwdHMuCisyKSBpcnFfZG9tYWluX2ZyZWVfaXJxcygpOiBmcmVlIElSUSBkZXNjcmlwdG9ycyBhbmQgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAgIHJlbGF0ZWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBpbnRlcnJ1cHRzLgorMykgaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoKTogYWN0aXZhdGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaGFyZHdhcmUgdG8KKyAgIGRlbGl2ZXIgdGhlIGludGVycnVwdC4KKzMpIGlycV9kb21haW5fZGVhY3RpdmF0ZV9pcnEoKTogZGVhY3RpdmF0ZSBpbnRlcnJ1cHQgY29udHJvbGxlciBoYXJkd2FyZQorICAgdG8gc3RvcCBkZWxpdmVyaW5nIHRoZSBpbnRlcnJ1cHQuCisKK0ZvbGxvd2luZyBjaGFuZ2VzIGFyZSBuZWVkZWQgdG8gc3VwcG9ydCBoaWVyYXJjaHkgaXJxX2RvbWFpbi4KKzEpIGEgbmV3IGZpZWxkICdwYXJlbnQnIGlzIGFkZGVkIHRvIHN0cnVjdCBpcnFfZG9tYWluOyBpdCdzIHVzZWQgdG8KKyAgIG1haW50YWluIGlycV9kb21haW4gaGllcmFyY2h5IGluZm9ybWF0aW9uLgorMikgYSBuZXcgZmllbGQgJ3BhcmVudF9kYXRhJyBpcyBhZGRlZCB0byBzdHJ1Y3QgaXJxX2RhdGE7IGl0J3MgdXNlZCB0bworICAgYnVpbGQgaGllcmFyY2h5IGlycV9kYXRhIHRvIG1hdGNoIGhpZXJhcmNoeSBpcnFfZG9tYWlucy4gVGhlIGlycV9kYXRhCisgICBpcyB1c2VkIHRvIHN0b3JlIGlycV9kb21haW4gcG9pbnRlciBhbmQgaGFyZHdhcmUgaXJxIG51bWJlci4KKzMpIG5ldyBjYWxsYmFja3MgYXJlIGFkZGVkIHRvIHN0cnVjdCBpcnFfZG9tYWluX29wcyB0byBzdXBwb3J0IGhpZXJhcmNoeQorICAgaXJxX2RvbWFpbiBvcGVyYXRpb25zLgorCitXaXRoIHN1cHBvcnQgb2YgaGllcmFyY2h5IGlycV9kb21haW4gYW5kIGhpZXJhcmNoeSBpcnFfZGF0YSByZWFkeSwgYW4KK2lycV9kb21haW4gc3RydWN0dXJlIGlzIGJ1aWx0IGZvciBlYWNoIGludGVycnVwdCBjb250cm9sbGVyLCBhbmQgYW4KK2lycV9kYXRhIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgZm9yIGVhY2ggaXJxX2RvbWFpbiBhc3NvY2lhdGVkIHdpdGggYW4KK0lSUS4gTm93IHdlIGNvdWxkIGdvIG9uZSBzdGVwIGZ1cnRoZXIgdG8gc3VwcG9ydCBzdGFja2VkKGhpZXJhcmNoeSkKK2lycV9jaGlwLiBUaGF0IGlzLCBhbiBpcnFfY2hpcCBpcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBpcnFfZGF0YSBhbG9uZwordGhlIGhpZXJhcmNoeS4gQSBjaGlsZCBpcnFfY2hpcCBtYXkgaW1wbGVtZW50IGEgcmVxdWlyZWQgYWN0aW9uIGJ5CitpdHNlbGYgb3IgYnkgY29vcGVyYXRpbmcgd2l0aCBpdHMgcGFyZW50IGlycV9jaGlwLgorCitXaXRoIHN0YWNrZWQgaXJxX2NoaXAsIGludGVycnVwdCBjb250cm9sbGVyIGRyaXZlciBvbmx5IG5lZWRzIHRvIGRlYWwKK3dpdGggdGhlIGhhcmR3YXJlIG1hbmFnZWQgYnkgaXRzZWxmIGFuZCBtYXkgYXNrIGZvciBzZXJ2aWNlcyBmcm9tIGl0cworcGFyZW50IGlycV9jaGlwIHdoZW4gbmVlZGVkLiBTbyB3ZSBjb3VsZCBhY2hpZXZlIGEgbXVjaCBjbGVhbmVyCitzb2Z0d2FyZSBhcmNoaXRlY3R1cmUuCisKK0ZvciBhbiBpbnRlcnJ1cHQgY29udHJvbGxlciBkcml2ZXIgdG8gc3VwcG9ydCBoaWVyYXJjaHkgaXJxX2RvbWFpbiwgaXQKK25lZWRzIHRvOgorMSkgSW1wbGVtZW50IGlycV9kb21haW5fb3BzLmFsbG9jIGFuZCBpcnFfZG9tYWluX29wcy5mcmVlCisyKSBPcHRpb25hbGx5IGltcGxlbWVudCBpcnFfZG9tYWluX29wcy5hY3RpdmF0ZSBhbmQKKyAgIGlycV9kb21haW5fb3BzLmRlYWN0aXZhdGUuCiszKSBPcHRpb25hbGx5IGltcGxlbWVudCBhbiBpcnFfY2hpcCB0byBtYW5hZ2UgdGhlIGludGVycnVwdCBjb250cm9sbGVyCisgICBoYXJkd2FyZS4KKzQpIE5vIG5lZWQgdG8gaW1wbGVtZW50IGlycV9kb21haW5fb3BzLm1hcCBhbmQgaXJxX2RvbWFpbl9vcHMudW5tYXAsCisgICB0aGV5IGFyZSB1bnVzZWQgd2l0aCBoaWVyYXJjaHkgaXJxX2RvbWFpbi4KKworSGllcmFyY2h5IGlycV9kb21haW4gbWF5IGFsc28gYmUgdXNlZCB0byBzdXBwb3J0IG90aGVyIGFyY2hpdGVjdHVyZXMsCitzdWNoIGFzIEFSTSwgQVJNNjQgZXRjLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKaW5kZXggYmY3NzgzMy4uNzQ1ZjQyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CkBAIC0zNiw3ICszNiw3IEBACiAJZXhlY3V0ZWQgaW4gdXNlciBtb2RlLCBvciBleGVjdXRlZCBpbiB0aGUgaWRsZSBsb29wLCB3ZSBjYW4KIAlzYWZlbHkgZnJlZSB1cCB0aGF0IGl0ZW0uCiAKLQlQcmVlbXB0aWJsZSB2YXJpYW50cyBvZiBSQ1UgKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKSBnZXQgdGhlCisJUHJlZW1wdGlibGUgdmFyaWFudHMgb2YgUkNVIChDT05GSUdfUFJFRU1QVF9SQ1UpIGdldCB0aGUKIAlzYW1lIGVmZmVjdCwgYnV0IHJlcXVpcmUgdGhhdCB0aGUgcmVhZGVycyBtYW5pcHVsYXRlIENQVS1sb2NhbAogCWNvdW50ZXJzLiAgVGhlc2UgY291bnRlcnMgYWxsb3cgbGltaXRlZCB0eXBlcyBvZiBibG9ja2luZyB3aXRoaW4KIAlSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiAgU1JDVSBhbHNvIHVzZXMgQ1BVLWxvY2FsCkBAIC04MSw3ICs4MSw3IEBACiBvCUkgaGVhciB0aGF0IFJDVSBuZWVkcyB3b3JrIGluIG9yZGVyIHRvIHN1cHBvcnQgcmVhbHRpbWUga2VybmVscz8KIAogCVRoaXMgd29yayBpcyBsYXJnZWx5IGNvbXBsZXRlZC4gIFJlYWx0aW1lLWZyaWVuZGx5IFJDVSBjYW4gYmUKLQllbmFibGVkIHZpYSB0aGUgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1Uga2VybmVsIGNvbmZpZ3VyYXRpb24KKwllbmFibGVkIHZpYSB0aGUgQ09ORklHX1BSRUVNUFRfUkNVIGtlcm5lbCBjb25maWd1cmF0aW9uCiAJcGFyYW1ldGVyLiAgSG93ZXZlciwgd29yayBpcyBpbiBwcm9ncmVzcyBmb3IgZW5hYmxpbmcgcHJpb3JpdHkKIAlib29zdGluZyBvZiBwcmVlbXB0ZWQgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4JVGhpcyBpcwogCW5lZWRlZCBpZiB5b3UgaGF2ZSBDUFUtYm91bmQgcmVhbHRpbWUgdGhyZWFkcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0CmluZGV4IGVmNWEyZmQuLmVkMTg2YTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dApAQCAtMjYsMTIgKzI2LDYgQEAKIAlTdGFsbC13YXJuaW5nIG1lc3NhZ2VzIG1heSBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZCBjb21wbGV0ZWx5IHZpYQogCS9zeXMvbW9kdWxlL3JjdXBkYXRlL3BhcmFtZXRlcnMvcmN1X2NwdV9zdGFsbF9zdXBwcmVzcy4KIAotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRQotCi0JVGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgY2F1c2VzIHRoZSBzdGFsbCB3YXJuaW5nIHRvCi0JYWxzbyBkdW1wIHRoZSBzdGFja3Mgb2YgYW55IHRhc2tzIHRoYXQgYXJlIGJsb2NraW5nIHRoZSBjdXJyZW50Ci0JUkNVLXByZWVtcHQgZ3JhY2UgcGVyaW9kLgotCiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPCiAKIAlUaGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBjYXVzZXMgdGhlIHN0YWxsIHdhcm5pbmcgdG8KQEAgLTc3LDcgKzcxLDcgQEAKIGFuZCB0aGF0IHRoZSBzdGFsbCB3YXMgYWZmZWN0aW5nIFJDVS1zY2hlZC4gIFRoaXMgbWVzc2FnZSB3aWxsIG5vcm1hbGx5IGJlCiBmb2xsb3dlZCBieSBhIHN0YWNrIGR1bXAgb2YgdGhlIG9mZmVuZGluZyBDUFUuICBPbiBUUkVFX1JDVSBrZXJuZWwgYnVpbGRzLAogUkNVIGFuZCBSQ1Utc2NoZWQgYXJlIGltcGxlbWVudGVkIGJ5IHRoZSBzYW1lIHVuZGVybHlpbmcgbWVjaGFuaXNtLAotd2hpbGUgb24gVFJFRV9QUkVFTVBUX1JDVSBrZXJuZWwgYnVpbGRzLCBSQ1UgaXMgaW5zdGVhZCBpbXBsZW1lbnRlZAord2hpbGUgb24gUFJFRU1QVF9SQ1Uga2VybmVsIGJ1aWxkcywgUkNVIGlzIGluc3RlYWQgaW1wbGVtZW50ZWQKIGJ5IHJjdV9wcmVlbXB0X3N0YXRlLgogCiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIG9mZmVuZGluZyBDUFUgZmFpbHMgdG8gcHJpbnQgb3V0IGEgc3RhbGwtd2FybmluZwpAQCAtODksNyArODMsNyBAQAogVGhpcyBtZXNzYWdlIGluZGljYXRlcyB0aGF0IENQVSAyIGRldGVjdGVkIHRoYXQgQ1BVcyAzIGFuZCA1IHdlcmUgYm90aAogY2F1c2luZyBzdGFsbHMsIGFuZCB0aGF0IHRoZSBzdGFsbCB3YXMgYWZmZWN0aW5nIFJDVS1iaC4gIFRoaXMgbWVzc2FnZQogd2lsbCBub3JtYWxseSBiZSBmb2xsb3dlZCBieSBzdGFjayBkdW1wcyBmb3IgZWFjaCBDUFUuICBQbGVhc2Ugbm90ZSB0aGF0Ci1UUkVFX1BSRUVNUFRfUkNVIGJ1aWxkcyBjYW4gYmUgc3RhbGxlZCBieSB0YXNrcyBhcyB3ZWxsIGFzIGJ5IENQVXMsCitQUkVFTVBUX1JDVSBidWlsZHMgY2FuIGJlIHN0YWxsZWQgYnkgdGFza3MgYXMgd2VsbCBhcyBieSBDUFVzLAogYW5kIHRoYXQgdGhlIHRhc2tzIHdpbGwgYmUgaW5kaWNhdGVkIGJ5IFBJRCwgZm9yIGV4YW1wbGUsICJQMzQyMSIuCiBJdCBpcyBldmVuIHBvc3NpYmxlIGZvciBhIHJjdV9wcmVlbXB0X3N0YXRlIHN0YWxsIHRvIGJlIGNhdXNlZCBieSBib3RoCiBDUFVzIC1hbmQtIHRhc2tzLCBpbiB3aGljaCBjYXNlIHRoZSBvZmZlbmRpbmcgQ1BVcyBhbmQgdGFza3Mgd2lsbCBhbGwKQEAgLTIwNSwxMCArMTk5LDEwIEBACiBvCUEgQ1BVLWJvdW5kIHJlYWwtdGltZSB0YXNrIGluIGEgQ09ORklHX1BSRUVNUFRfUlQga2VybmVsIHRoYXQKIAlpcyBydW5uaW5nIGF0IGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIFJDVSBzb2Z0aXJxIHRocmVhZHMuCiAJVGhpcyB3aWxsIHByZXZlbnQgUkNVIGNhbGxiYWNrcyBmcm9tIGV2ZXIgYmVpbmcgaW52b2tlZCwKLQlhbmQgaW4gYSBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBrZXJuZWwgd2lsbCBmdXJ0aGVyIHByZXZlbnQKKwlhbmQgaW4gYSBDT05GSUdfUFJFRU1QVF9SQ1Uga2VybmVsIHdpbGwgZnVydGhlciBwcmV2ZW50CiAJUkNVIGdyYWNlIHBlcmlvZHMgZnJvbSBldmVyIGNvbXBsZXRpbmcuICBFaXRoZXIgd2F5LCB0aGUKIAlzeXN0ZW0gd2lsbCBldmVudHVhbGx5IHJ1biBvdXQgb2YgbWVtb3J5IGFuZCBoYW5nLiAgSW4gdGhlCi0JQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgY2FzZSwgeW91IG1pZ2h0IHNlZSBzdGFsbC13YXJuaW5nCisJQ09ORklHX1BSRUVNUFRfUkNVIGNhc2UsIHlvdSBtaWdodCBzZWUgc3RhbGwtd2FybmluZwogCW1lc3NhZ2VzLgogCiBvCUEgaGFyZHdhcmUgb3Igc29mdHdhcmUgaXNzdWUgc2h1dHMgb2ZmIHRoZSBzY2hlZHVsZXItY2xvY2sKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dAppbmRleCA5MTA4NzBiLi5iNjNiOWJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS90cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0CkBAIC04LDcgKzgsNyBAQAogZm9yIHJjdXRyZWUgYW5kIG5leHQgZm9yIHJjdXRpbnkuCiAKIAotQ09ORklHX1RSRUVfUkNVIGFuZCBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBkZWJ1Z2ZzIEZpbGVzIGFuZCBGb3JtYXRzCitDT05GSUdfVFJFRV9SQ1UgYW5kIENPTkZJR19QUkVFTVBUX1JDVSBkZWJ1Z2ZzIEZpbGVzIGFuZCBGb3JtYXRzCiAKIFRoZXNlIGltcGxlbWVudGF0aW9ucyBvZiBSQ1UgcHJvdmlkZSBzZXZlcmFsIGRlYnVnZnMgZGlyZWN0b3JpZXMgdW5kZXIgdGhlCiB0b3AtbGV2ZWwgZGlyZWN0b3J5ICJyY3UiOgpAQCAtMTgsNyArMTgsNyBAQAogcmN1L3JjdV9zY2hlZAogCiBFYWNoIGRpcmVjdG9yeSBjb250YWlucyBmaWxlcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZmxhdm9yIG9mIFJDVS4KLU5vdGUgdGhhdCByY3UvcmN1X3ByZWVtcHQgaXMgb25seSBwcmVzZW50IGZvciBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVS4KK05vdGUgdGhhdCByY3UvcmN1X3ByZWVtcHQgaXMgb25seSBwcmVzZW50IGZvciBDT05GSUdfUFJFRU1QVF9SQ1UuCiBGb3IgQ09ORklHX1RSRUVfUkNVLCB0aGUgUkNVIGZsYXZvciBtYXBzIG9udG8gdGhlIFJDVS1zY2hlZCBmbGF2b3IsCiBzbyB0aGF0IGFjdGl2aXR5IGZvciBib3RoIGFwcGVhcnMgaW4gcmN1L3JjdV9zY2hlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKaW5kZXggZTQ4YzU3Zi4uODhkZmNlMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CkBAIC0xMzcsNyArMTM3LDcgQEAKIAlVc2VkIGJ5IGEgcmVhZGVyIHRvIGluZm9ybSB0aGUgcmVjbGFpbWVyIHRoYXQgdGhlIHJlYWRlciBpcwogCWVudGVyaW5nIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIEl0IGlzIGlsbGVnYWwKIAl0byBibG9jayB3aGlsZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIHRob3VnaAotCWtlcm5lbHMgYnVpbHQgd2l0aCBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBjYW4gcHJlZW1wdCBSQ1UKKwlrZXJuZWxzIGJ1aWx0IHdpdGggQ09ORklHX1BSRUVNUFRfUkNVIGNhbiBwcmVlbXB0IFJDVQogCXJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4gIEFueSBSQ1UtcHJvdGVjdGVkIGRhdGEgc3RydWN0dXJlCiAJYWNjZXNzZWQgZHVyaW5nIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBpcyBndWFyYW50ZWVkIHRvCiAJcmVtYWluIHVucmVjbGFpbWVkIGZvciB0aGUgZnVsbCBkdXJhdGlvbiBvZiB0aGF0IGNyaXRpY2FsIHNlY3Rpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FjcGkvZ3Bpby1wcm9wZXJ0aWVzLnR4dCBiL0RvY3VtZW50YXRpb24vYWNwaS9ncGlvLXByb3BlcnRpZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzZmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FjcGkvZ3Bpby1wcm9wZXJ0aWVzLnR4dApAQCAtMCwwICsxLDk2IEBACitfRFNEIERldmljZSBQcm9wZXJ0aWVzIFJlbGF0ZWQgdG8gR1BJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgcmVsZWFzZSBvZiBBQ1BJIDUuMSBhbmQgdGhlIF9EU0QgY29uZmlndXJhdGlvbiBvYmplY3RlIG5hbWVzCitjYW4gZmluYWxseSBiZSBnaXZlbiB0byBHUElPcyAoYW5kIG90aGVyIHRoaW5ncyBhcyB3ZWxsKSByZXR1cm5lZCBieQorX0NSUy4gIFByZXZpb3VzbHksIHdlIHdlcmUgb25seSBhYmxlIHRvIHVzZSBhbiBpbnRlZ2VyIGluZGV4IHRvIGZpbmQKK3RoZSBjb3JyZXNwb25kaW5nIEdQSU8sIHdoaWNoIGlzIHByZXR0eSBlcnJvciBwcm9uZSAoaXQgZGVwZW5kcyBvbgordGhlIF9DUlMgb3V0cHV0IG9yZGVyaW5nLCBmb3IgZXhhbXBsZSkuCisKK1dpdGggX0RTRCB3ZSBjYW4gbm93IHF1ZXJ5IEdQSU9zIHVzaW5nIGEgbmFtZSBpbnN0ZWFkIG9mIGFuIGludGVnZXIKK2luZGV4LCBsaWtlIHRoZSBBU0wgZXhhbXBsZSBiZWxvdyBzaG93czoKKworICAvLyBCbHVldG9vdGggZGV2aWNlIHdpdGggcmVzZXQgYW5kIHNodXRkb3duIEdQSU9zCisgIERldmljZSAoQlRIKQorICB7CisgICAgICBOYW1lIChfSElELCAuLi4pCisKKyAgICAgIE5hbWUgKF9DUlMsIFJlc291cmNlVGVtcGxhdGUgKCkKKyAgICAgIHsKKyAgICAgICAgICBHcGlvSW8gKEV4Y2x1c2l2ZSwgUHVsbFVwLCAwLCAwLCBJb1Jlc3RyaWN0aW9uSW5wdXRPbmx5LAorICAgICAgICAgICAgICAgICAgIlxcX1NCLkdQTzAiLCAwLCBSZXNvdXJjZUNvbnN1bWVyKSB7MTV9CisgICAgICAgICAgR3Bpb0lvIChFeGNsdXNpdmUsIFB1bGxVcCwgMCwgMCwgSW9SZXN0cmljdGlvbklucHV0T25seSwKKyAgICAgICAgICAgICAgICAgICJcXF9TQi5HUE8wIiwgMCwgUmVzb3VyY2VDb25zdW1lcikgezI3LCAzMX0KKyAgICAgIH0pCisKKyAgICAgIE5hbWUgKF9EU0QsIFBhY2thZ2UgKCkKKyAgICAgIHsKKyAgICAgICAgICBUb1VVSUQoImRhZmZkODE0LTZlYmEtNGQ4Yy04YTkxLWJjOWJiZjRhYTMwMSIpLAorICAgICAgICAgIFBhY2thZ2UgKCkKKwkgIHsKKyAgICAgICAgICAgICAgUGFja2FnZSAoKSB7InJlc2V0LWdwaW8iLCBQYWNrYWdlKCkge15CVEgsIDEsIDEsIDAgfX0sCisgICAgICAgICAgICAgIFBhY2thZ2UgKCkgeyJzaHV0ZG93bi1ncGlvIiwgUGFja2FnZSgpIHteQlRILCAwLCAwLCAwIH19LAorICAgICAgICAgIH0KKyAgICAgIH0pCisgIH0KKworVGhlIGZvcm1hdCBvZiB0aGUgc3VwcG9ydGVkIEdQSU8gcHJvcGVydHkgaXM6CisKKyAgUGFja2FnZSAoKSB7ICJuYW1lIiwgUGFja2FnZSAoKSB7IHJlZiwgaW5kZXgsIHBpbiwgYWN0aXZlX2xvdyB9fQorCisgIHJlZiAtIFRoZSBkZXZpY2UgdGhhdCBoYXMgX0NSUyBjb250YWluaW5nIEdwaW9JbygpL0dwaW9JbnQoKSByZXNvdXJjZXMsCisgICAgICAgIHR5cGljYWxseSB0aGlzIGlzIHRoZSBkZXZpY2UgaXRzZWxmIChCVEggaW4gb3VyIGNhc2UpLgorICBpbmRleCAtIEluZGV4IG9mIHRoZSBHcGlvSW8oKS9HcGlvSW50KCkgcmVzb3VyY2UgaW4gX0NSUyBzdGFydGluZyBmcm9tIHplcm8uCisgIHBpbiAtIFBpbiBpbiB0aGUgR3Bpb0lvKCkvR3Bpb0ludCgpIHJlc291cmNlLiBUeXBpY2FsbHkgdGhpcyBpcyB6ZXJvLgorICBhY3RpdmVfbG93IC0gSWYgMSB0aGUgR1BJTyBpcyBtYXJrZWQgYXMgYWN0aXZlX2xvdy4KKworU2luY2UgQUNQSSBHcGlvSW8oKSByZXNvdXJjZSBkb2VzIG5vdCBoYXZlIGEgZmllbGQgc2F5aW5nIHdoZXRoZXIgaXQgaXMKK2FjdGl2ZSBsb3cgb3IgaGlnaCwgdGhlICJhY3RpdmVfbG93IiBhcmd1bWVudCBjYW4gYmUgdXNlZCBoZXJlLiAgU2V0dGluZworaXQgdG8gMSBtYXJrcyB0aGUgR1BJTyBhcyBhY3RpdmUgbG93LgorCitJbiBvdXIgQmx1ZXRvb3RoIGV4YW1wbGUgdGhlICJyZXNldC1ncGlvIiByZWZlcnMgdG8gdGhlIHNlY29uZCBHcGlvSW8oKQorcmVzb3VyY2UsIHNlY29uZCBwaW4gaW4gdGhhdCByZXNvdXJjZSB3aXRoIHRoZSBHUElPIG51bWJlciBvZiAzMS4KKworQUNQSSBHUElPIE1hcHBpbmdzIFByb3ZpZGVkIGJ5IERyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBzeXN0ZW1zIGluIHdoaWNoIHRoZSBBQ1BJIHRhYmxlcyBkbyBub3QgY29udGFpbiBfRFNEIGJ1dCBwcm92aWRlIF9DUlMKK3dpdGggR3Bpb0lvKCkvR3Bpb0ludCgpIHJlc291cmNlcyBhbmQgZGV2aWNlIGRyaXZlcnMgc3RpbGwgbmVlZCB0byB3b3JrIHdpdGgKK3RoZW0uCisKK0luIHRob3NlIGNhc2VzIEFDUEkgZGV2aWNlIGlkZW50aWZpY2F0aW9uIG9iamVjdHMsIF9ISUQsIF9DSUQsIF9DTFMsIF9TVUIsIF9IUlYsCithdmFpbGFibGUgdG8gdGhlIGRyaXZlciBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgZGV2aWNlIGFuZCB0aGF0IGlzIHN1cHBvc2VkCit0byBiZSBzdWZmaWNpZW50IHRvIGRldGVybWluZSB0aGUgbWVhbmluZyBhbmQgcHVycG9zZSBvZiBhbGwgb2YgdGhlIEdQSU8gbGluZXMKK2xpc3RlZCBieSB0aGUgR3Bpb0lvKCkvR3Bpb0ludCgpIHJlc291cmNlcyByZXR1cm5lZCBieSBfQ1JTLiAgSW4gb3RoZXIgd29yZHMsCit0aGUgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIGtub3cgd2hhdCB0byB1c2UgdGhlIEdwaW9JbygpL0dwaW9JbnQoKSByZXNvdXJjZXMgZm9yCitvbmNlIGl0IGhhcyBpZGVudGlmaWVkIHRoZSBkZXZpY2UuICBIYXZpbmcgZG9uZSB0aGF0LCBpdCBjYW4gc2ltcGx5IGFzc2lnbiBuYW1lcwordG8gdGhlIEdQSU8gbGluZXMgaXQgaXMgZ29pbmcgdG8gdXNlIGFuZCBwcm92aWRlIHRoZSBHUElPIHN1YnN5c3RlbSB3aXRoIGEKK21hcHBpbmcgYmV0d2VlbiB0aG9zZSBuYW1lcyBhbmQgdGhlIEFDUEkgR1BJTyByZXNvdXJjZXMgY29ycmVzcG9uZGluZyB0byB0aGVtLgorCitUbyBkbyB0aGF0LCB0aGUgZHJpdmVyIG5lZWRzIHRvIGRlZmluZSBhIG1hcHBpbmcgdGFibGUgYXMgYSBOVUxMLXRlcm1pbmF0ZWQKK2FycmF5IG9mIHN0cnVjdCBhY3BpX2dwaW9fbWFwcGluZyBvYmplY3RzIHRoYXQgZWFjaCBjb250YWluIGEgbmFtZSwgYSBwb2ludGVyCit0byBhbiBhcnJheSBvZiBsaW5lIGRhdGEgKHN0cnVjdCBhY3BpX2dwaW9fcGFyYW1zKSBvYmplY3RzIGFuZCB0aGUgc2l6ZSBvZiB0aGF0CithcnJheS4gIEVhY2ggc3RydWN0IGFjcGlfZ3Bpb19wYXJhbXMgb2JqZWN0IGNvbnNpc3RzIG9mIHRocmVlIGZpZWxkcywKK2Nyc19lbnRyeV9pbmRleCwgbGluZV9pbmRleCwgYWN0aXZlX2xvdywgcmVwcmVzZW50aW5nIHRoZSBpbmRleCBvZiB0aGUgdGFyZ2V0CitHcGlvSW8oKS9HcGlvSW50KCkgcmVzb3VyY2UgaW4gX0NSUyBzdGFydGluZyBmcm9tIHplcm8sIHRoZSBpbmRleCBvZiB0aGUgdGFyZ2V0CitsaW5lIGluIHRoYXQgcmVzb3VyY2Ugc3RhcnRpbmcgZnJvbSB6ZXJvLCBhbmQgdGhlIGFjdGl2ZS1sb3cgZmxhZyBmb3IgdGhhdCBsaW5lLAorcmVzcGVjdGl2ZWx5LCBpbiBhbmFsb2d5IHdpdGggdGhlIF9EU0QgR1BJTyBwcm9wZXJ0eSBmb3JtYXQgc3BlY2lmaWVkIGFib3ZlLgorCitGb3IgdGhlIGV4YW1wbGUgQmx1ZXRvb3RoIGRldmljZSBkaXNjdXNzZWQgcHJldmlvdXNseSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGluCitxdWVzdGlvbiB3b3VsZCBsb29rIGxpa2UgdGhpczoKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2dwaW9fcGFyYW1zIHJlc2V0X2dwaW8gPSB7IDEsIDEsIGZhbHNlIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZ3Bpb19wYXJhbXMgc2h1dGRvd25fZ3BpbyA9IHsgMCwgMCwgZmFsc2UgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2dwaW9fbWFwcGluZyBibHVldG9vdGhfYWNwaV9ncGlvc1tdID0geworICB7ICJyZXNldC1ncGlvIiwgJnJlc2V0X2dwaW8sIDEgfSwKKyAgeyAic2h1dGRvd24tZ3BpbyIsICZzaHV0ZG93bl9ncGlvLCAxIH0sCisgIHsgfSwKK307CisKK05leHQsIHRoZSBtYXBwaW5nIHRhYmxlIG5lZWRzIHRvIGJlIHBhc3NlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvCithY3BpX2Rldl9hZGRfZHJpdmVyX2dwaW9zKCkgdGhhdCB3aWxsIHJlZ2lzdGVyIGl0IHdpdGggdGhlIEFDUEkgZGV2aWNlIG9iamVjdAorcG9pbnRlZCB0byBieSBpdHMgZmlyc3QgYXJndW1lbnQuICBUaGF0IHNob3VsZCBiZSBkb25lIGluIHRoZSBkcml2ZXIncyAucHJvYmUoKQorcm91dGluZS4gIE9uIHJlbW92YWwsIHRoZSBkcml2ZXIgc2hvdWxkIHVucmVnaXN0ZXIgaXRzIEdQSU8gbWFwcGluZyB0YWJsZSBieQorY2FsbGluZyBhY3BpX2Rldl9yZW1vdmVfZHJpdmVyX2dwaW9zKCkgb24gdGhlIEFDUEkgZGV2aWNlIG9iamVjdCB3aGVyZSB0aGF0Cit0YWJsZSB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vZmlybXdhcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vZmlybXdhcmUudHh0CmluZGV4IGMyZTQ2OGYuLmRhNjcxM2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL2Zpcm13YXJlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9maXJtd2FyZS50eHQKQEAgLTcsMzIgKzcsMTQgQEAKIGEgbmVlZCB0byBwcm92aWRlIGFuIGludGVyZmFjZSBmb3Igc3VjaCBwbGF0Zm9ybXMgdG8gc3BlY2lmeSBhdmFpbGFibGUgZmlybXdhcmUKIG9wZXJhdGlvbnMgYW5kIGNhbGwgdGhlbSB3aGVuIG5lZWRlZC4KIAotRmlybXdhcmUgb3BlcmF0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHN0cnVjdCBmaXJtd2FyZV9vcHMKLQotCXN0cnVjdCBmaXJtd2FyZV9vcHMgewotCQkvKgotCQkqIEVudGVycyBDUFUgaWRsZSBtb2RlCi0JCSovCi0JCWludCAoKmRvX2lkbGUpKHZvaWQpOwotCQkvKgotCQkqIFNldHMgYm9vdCBhZGRyZXNzIG9mIHNwZWNpZmllZCBwaHlzaWNhbCBDUFUKLQkJKi8KLQkJaW50ICgqc2V0X2NwdV9ib290X2FkZHIpKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgYm9vdF9hZGRyKTsKLQkJLyoKLQkJKiBCb290cyBzcGVjaWZpZWQgcGh5c2ljYWwgQ1BVCi0JCSovCi0JCWludCAoKmNwdV9ib290KShpbnQgY3B1KTsKLQkJLyoKLQkJKiBJbml0aWFsaXplcyBMMiBjYWNoZQotCQkqLwotCQlpbnQgKCpsMngwX2luaXQpKHZvaWQpOwotCX07Ci0KLWFuZCB0aGVuIHJlZ2lzdGVyZWQgd2l0aCByZWdpc3Rlcl9maXJtd2FyZV9vcHMgZnVuY3Rpb24KK0Zpcm13YXJlIG9wZXJhdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBieSBmaWxsaW5nIGluIGEgc3RydWN0IGZpcm13YXJlX29wcword2l0aCBhcHByb3ByaWF0ZSBjYWxsYmFja3MgYW5kIHRoZW4gcmVnaXN0ZXJpbmcgaXQgd2l0aCByZWdpc3Rlcl9maXJtd2FyZV9vcHMoKQorZnVuY3Rpb24uCiAKIAl2b2lkIHJlZ2lzdGVyX2Zpcm13YXJlX29wcyhjb25zdCBzdHJ1Y3QgZmlybXdhcmVfb3BzICpvcHMpCiAKLXRoZSBvcHMgcG9pbnRlciBtdXN0IGJlIG5vbi1OVUxMLgorVGhlIG9wcyBwb2ludGVyIG11c3QgYmUgbm9uLU5VTEwuIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc3RydWN0IGZpcm13YXJlX29wcworYW5kIGl0cyBtZW1iZXJzIGNhbiBiZSBmb3VuZCBpbiBhcmNoL2FybS9pbmNsdWRlL2FzbS9maXJtd2FyZS5oIGhlYWRlci4KIAogVGhlcmUgaXMgYSBkZWZhdWx0LCBlbXB0eSBzZXQgb2Ygb3BlcmF0aW9ucyBwcm92aWRlZCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0bwogc2V0IGFueXRoaW5nIGlmIHBsYXRmb3JtIGRvZXMgbm90IHJlcXVpcmUgZmlybXdhcmUgb3BlcmF0aW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL3N1bnhpL1JFQURNRSBiL0RvY3VtZW50YXRpb24vYXJtL3N1bnhpL1JFQURNRQppbmRleCA3OTQ1MjM4Li5lNjhkMTYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9zdW54aS9SRUFETUUKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vc3VueGkvUkVBRE1FCkBAIC0zNywxNiArMzcsMjYgQEAKICAgICAgICAgICBodHRwOi8vZGwubGludXgtc3VueGkub3JnL0EyMC9BMjAlMjBVc2VyJTIwTWFudWFsJTIwMjAxMy0wMy0yMi5wZGYKIAogICAgICAgLSBBbGx3aW5uZXIgQTIzCi0gICAgICAgICsgTm90IFN1cHBvcnRlZAorICAgICAgICArIERhdGFzaGVldAorICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTIzL0EyMyUyMERhdGFzaGVldCUyMFYxLjAlMjAyMDEzMDgzMC5wZGYKKyAgICAgICAgKyBVc2VyIE1hbnVhbAorICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTIzL0EyMyUyMFVzZXIlMjBNYW51YWwlMjBWMS4wJTIwMjAxMzA4MzAucGRmCiAKICAgICAqIFF1YWQgQVJNIENvcnRleC1BNyBiYXNlZCBTb0NzCiAgICAgICAtIEFsbHdpbm5lciBBMzEgKHN1bjZpKQogICAgICAgICArIERhdGFzaGVldAotICAgICAgICAgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTMxL0EzMSUyMERhdGFzaGVldCUyMC0lMjB2MS4wMCUyMCgyMDEyLTEyLTI0KS5wZGYKKyAgICAgICAgICBodHRwOi8vZGwubGludXgtc3VueGkub3JnL0EzMS9BM3hfcmVsZWFzZV9kb2N1bWVudC9BMzEvSUMvQTMxJTIwZGF0YXNoZWV0JTIwVjEuMyUyMDIwMTMxMTA2LnBkZgorICAgICAgICArIFVzZXIgTWFudWFsCisgICAgICAgICAgaHR0cDovL2RsLmxpbnV4LXN1bnhpLm9yZy9BMzEvQTN4X3JlbGVhc2VfZG9jdW1lbnQvQTMxL0lDL0EzMSUyMHVzZXIlMjBtYW51YWwlMjBWMS4xJTIwMjAxMzA2MzAucGRmCiAKICAgICAgIC0gQWxsd2lubmVyIEEzMXMgKHN1bjZpKQogICAgICAgICArIE5vdCBTdXBwb3J0ZWQKKyAgICAgICAgKyBEYXRhc2hlZXQKKyAgICAgICAgICBodHRwOi8vZGwubGludXgtc3VueGkub3JnL0EzMS9BM3hfcmVsZWFzZV9kb2N1bWVudC9BMzFzL0lDL0EzMXMlMjBkYXRhc2hlZXQlMjBWMS4zJTIwMjAxMzExMDYucGRmCisgICAgICAgICsgVXNlciBNYW51YWwKKyAgICAgICAgICBodHRwOi8vZGwubGludXgtc3VueGkub3JnL0EzMS9BM3hfcmVsZWFzZV9kb2N1bWVudC9BMzFzL0lDL0EzMXMlMjBVc2VyJTIwTWFudWFsJTIwJTIwVjEuMCUyMDIwMTMwMzIyLnBkZgogCiAgICAgKiBRdWFkIEFSTSBDb3J0ZXgtQTE1LCBRdWFkIEFSTSBDb3J0ZXgtQTcgYmFzZWQgU29DcwogICAgICAgLSBBbGx3aW5uZXIgQTgwCi0gICAgICAgICsgTm90IFN1cHBvcnRlZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAgICAgKyBEYXRhc2hlZXQKKwkgIGh0dHA6Ly9kbC5saW51eC1zdW54aS5vcmcvQTgwL0E4MF9EYXRhc2hlZXRfUmV2aXNpb25fMS4wXzA0MDQucGRmCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybTY0L2xlZ2FjeV9pbnN0cnVjdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm02NC9sZWdhY3lfaW5zdHJ1Y3Rpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2IzZGEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm02NC9sZWdhY3lfaW5zdHJ1Y3Rpb25zLnR4dApAQCAtMCwwICsxLDQ1IEBACitUaGUgYXJtNjQgcG9ydCBvZiB0aGUgTGludXgga2VybmVsIHByb3ZpZGVzIGluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQKK2VtdWxhdGlvbiBvZiBpbnN0cnVjdGlvbnMgd2hpY2ggaGF2ZSBiZWVuIGRlcHJlY2F0ZWQsIG9yIG9ic29sZXRlZCBpbgordGhlIGFyY2hpdGVjdHVyZS4gVGhlIGluZnJhc3RydWN0dXJlIGNvZGUgdXNlcyB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24KK2hvb2tzIHRvIHN1cHBvcnQgZW11bGF0aW9uLiBXaGVyZSBhdmFpbGFibGUgaXQgYWxzbyBhbGxvd3MgdHVybmluZyBvbgordGhlIGluc3RydWN0aW9uIGV4ZWN1dGlvbiBpbiBoYXJkd2FyZS4KKworVGhlIGVtdWxhdGlvbiBtb2RlIGNhbiBiZSBjb250cm9sbGVkIGJ5IHdyaXRpbmcgdG8gc3lzY3RsIG5vZGVzCisoL3Byb2Mvc3lzL2FiaSkuIFRoZSBmb2xsb3dpbmcgZXhwbGFpbnMgdGhlIGRpZmZlcmVudCBleGVjdXRpb24KK2JlaGF2aW91cnMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBvZiB0aGUgc3lzY3RsIG5vZGVzIC0KKworKiBVbmRlZgorICBWYWx1ZTogMAorICBHZW5lcmF0ZXMgdW5kZWZpbmVkIGluc3RydWN0aW9uIGFib3J0LiBEZWZhdWx0IGZvciBpbnN0cnVjdGlvbnMgdGhhdAorICBoYXZlIGJlZW4gb2Jzb2xldGVkIGluIHRoZSBhcmNoaXRlY3R1cmUsIGUuZy4sIFNXUAorCisqIEVtdWxhdGUKKyAgVmFsdWU6IDEKKyAgVXNlcyBzb2Z0d2FyZSBlbXVsYXRpb24uIFRvIGFpZCBtaWdyYXRpb24gb2Ygc29mdHdhcmUsIGluIHRoaXMgbW9kZQorICB1c2FnZSBvZiBlbXVsYXRlZCBpbnN0cnVjdGlvbiBpcyB0cmFjZWQgYXMgd2VsbCBhcyByYXRlIGxpbWl0ZWQKKyAgd2FybmluZ3MgYXJlIGlzc3VlZC4gVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgZGVwcmVjYXRlZAorICBpbnN0cnVjdGlvbnMsIC5lLmcuLCBDUDE1IGJhcnJpZXJzCisKKyogSGFyZHdhcmUgRXhlY3V0aW9uCisgIFZhbHVlOiAyCisgIEFsdGhvdWdoIG1hcmtlZCBhcyBkZXByZWNhdGVkLCBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgc3VwcG9ydCB0aGUKKyAgZW5hYmxpbmcvZGlzYWJsaW5nIG9mIGhhcmR3YXJlIHN1cHBvcnQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlc2UKKyAgaW5zdHJ1Y3Rpb25zLiBVc2luZyBoYXJkd2FyZSBleGVjdXRpb24gZ2VuZXJhbGx5IHByb3ZpZGVzIGJldHRlcgorICBwZXJmb3JtYW5jZSwgYnV0IGF0IHRoZSBsb3NzIG9mIGFiaWxpdHkgdG8gZ2F0aGVyIHJ1bnRpbWUgc3RhdGlzdGljcworICBhYm91dCB0aGUgdXNlIG9mIHRoZSBkZXByZWNhdGVkIGluc3RydWN0aW9ucy4KKworVGhlIGRlZmF1bHQgbW9kZSBkZXBlbmRzIG9uIHRoZSBzdGF0dXMgb2YgdGhlIGluc3RydWN0aW9uIGluIHRoZQorYXJjaGl0ZWN0dXJlLiBEZXByZWNhdGVkIGluc3RydWN0aW9ucyBzaG91bGQgZGVmYXVsdCB0byBlbXVsYXRpb24KK3doaWxlIG9ic29sZXRlIGluc3RydWN0aW9ucyBtdXN0IGJlIHVuZGVmaW5lZCBieSBkZWZhdWx0LgorCitTdXBwb3J0ZWQgbGVnYWN5IGluc3RydWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogU1dQe0J9CitOb2RlOiAvcHJvYy9zeXMvYWJpL3N3cAorU3RhdHVzOiBPYnNvbGV0ZQorRGVmYXVsdDogVW5kZWYgKDApCisKKyogQ1AxNSBCYXJyaWVycworTm9kZTogL3Byb2Mvc3lzL2FiaS9jcDE1X2JhcnJpZXIKK1N0YXR1czogRGVwcmVjYXRlZAorRGVmYXVsdDogRW11bGF0ZSAoMSkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQgYi9Eb2N1bWVudGF0aW9uL2F0b21pY19vcHMudHh0CmluZGV4IDY4NTQyZmUuLjE4M2U0MWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dApAQCAtNywxMiArNywxMyBAQAogbWFpbnRhaW5lcnMgb24gaG93IHRvIGltcGxlbWVudCBhdG9taWMgY291bnRlciwgYml0b3BzLCBhbmQgc3BpbmxvY2sKIGludGVyZmFjZXMgcHJvcGVybHkuCiAKLQlUaGUgYXRvbWljX3QgdHlwZSBzaG91bGQgYmUgZGVmaW5lZCBhcyBhIHNpZ25lZCBpbnRlZ2VyLgotQWxzbywgaXQgc2hvdWxkIGJlIG1hZGUgb3BhcXVlIHN1Y2ggdGhhdCBhbnkga2luZCBvZiBjYXN0IHRvIGEgbm9ybWFsCi1DIGludGVnZXIgdHlwZSB3aWxsIGZhaWwuICBTb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHNob3VsZAotc3VmZmljZToKKwlUaGUgYXRvbWljX3QgdHlwZSBzaG91bGQgYmUgZGVmaW5lZCBhcyBhIHNpZ25lZCBpbnRlZ2VyIGFuZAordGhlIGF0b21pY19sb25nX3QgdHlwZSBhcyBhIHNpZ25lZCBsb25nIGludGVnZXIuICBBbHNvLCB0aGV5IHNob3VsZAorYmUgbWFkZSBvcGFxdWUgc3VjaCB0aGF0IGFueSBraW5kIG9mIGNhc3QgdG8gYSBub3JtYWwgQyBpbnRlZ2VyIHR5cGUKK3dpbGwgZmFpbC4gIFNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgc2hvdWxkIHN1ZmZpY2U6CiAKIAl0eXBlZGVmIHN0cnVjdCB7IGludCBjb3VudGVyOyB9IGF0b21pY190OworCXR5cGVkZWYgc3RydWN0IHsgbG9uZyBjb3VudGVyOyB9IGF0b21pY19sb25nX3Q7CiAKIEhpc3RvcmljYWxseSwgY291bnRlciBoYXMgYmVlbiBkZWNsYXJlZCB2b2xhdGlsZS4gIFRoaXMgaXMgbm93IGRpc2NvdXJhZ2VkLgogU2VlIERvY3VtZW50YXRpb24vdm9sYXRpbGUtY29uc2lkZXJlZC1oYXJtZnVsLnR4dCBmb3IgdGhlIGNvbXBsZXRlIHJhdGlvbmFsZS4KQEAgLTM3LDYgKzM4LDkgQEAKIHByb3BlciBpbXBsaWNpdCBvciBleHBsaWNpdCByZWFkIG1lbW9yeSBiYXJyaWVyIGlzIG5lZWRlZCBiZWZvcmUgcmVhZGluZyB0aGUKIHZhbHVlIHdpdGggYXRvbWljX3JlYWQgZnJvbSBhbm90aGVyIHRocmVhZC4KIAorQXMgd2l0aCBhbGwgb2YgdGhlIGF0b21pY18gaW50ZXJmYWNlcywgcmVwbGFjZSB0aGUgbGVhZGluZyAiYXRvbWljXyIKK3dpdGggImF0b21pY19sb25nXyIgdG8gb3BlcmF0ZSBvbiBhdG9taWNfbG9uZ190LgorCiBUaGUgc2Vjb25kIGludGVyZmFjZSBjYW4gYmUgdXNlZCBhdCBydW50aW1lLCBhcyBpbjoKIAogCXN0cnVjdCBmb28geyBhdG9taWNfdCBjb3VudGVyOyB9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CmluZGV4IDIxMDFlNzEuLjZiOTcyYjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKQEAgLTgyNywxMCArODI3LDYgQEAKIHRoYXQgcmVxdWVzdHMgYXJlIHJlc3RhcnRlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHF1ZXVlLiBUaGlzIG1heSBoYXBwZW4KIGlmIHRoZSBkcml2ZXIgbmVlZHMgdG8gdXNlIGJsa19xdWV1ZV9pbnZhbGlkYXRlX3RhZ3MoKS4KIAotVGFnZ2luZyBhbHNvIGRlZmluZXMgYSBuZXcgcmVxdWVzdCBmbGFnLCBSRVFfUVVFVUVELiBUaGlzIGlzIHNldCB3aGVuZXZlcgotYSByZXF1ZXN0IGlzIGN1cnJlbnRseSB0YWdnZWQuIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGZsYWcgZGlyZWN0bHksCi1ibGtfcnFfdGFnZ2VkKHJxKSBpcyB0aGUgcG9ydGFibGUgd2F5IHRvIGRvIHNvLgotCiAzLjMgSS9PIFN1Ym1pc3Npb24KIAogVGhlIHJvdXRpbmUgc3VibWl0X2JpbygpIGlzIHVzZWQgdG8gc3VibWl0IGEgc2luZ2xlIGlvLiBIaWdoZXIgbGV2ZWwgaS9vCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvaHVnZXRsYi50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvaHVnZXRsYi50eHQKaW5kZXggYTlmYWFjYS4uMTA2MjQ1YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2h1Z2V0bGIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9odWdldGxiLnR4dApAQCAtMjksNyArMjksNyBAQAogCiAgaHVnZXRsYi48aHVnZXBhZ2VzaXplPi5saW1pdF9pbl9ieXRlcyAgICAgIyBzZXQvc2hvdyBsaW1pdCBvZiAiaHVnZXBhZ2VzaXplIiBodWdldGxiIHVzYWdlCiAgaHVnZXRsYi48aHVnZXBhZ2VzaXplPi5tYXhfdXNhZ2VfaW5fYnl0ZXMgIyBzaG93IG1heCAiaHVnZXBhZ2VzaXplIiBodWdldGxiICB1c2FnZSByZWNvcmRlZAotIGh1Z2V0bGIuPGh1Z2VwYWdlc2l6ZT4udXNhZ2VfaW5fYnl0ZXMgICAgICMgc2hvdyBjdXJyZW50IHJlc19jb3VudGVyIHVzYWdlIGZvciAiaHVnZXBhZ2VzaXplIiBodWdldGxiCisgaHVnZXRsYi48aHVnZXBhZ2VzaXplPi51c2FnZV9pbl9ieXRlcyAgICAgIyBzaG93IGN1cnJlbnQgdXNhZ2UgZm9yICJodWdlcGFnZXNpemUiIGh1Z2V0bGIKICBodWdldGxiLjxodWdlcGFnZXNpemU+LmZhaWxjbnQJCSAgICMgc2hvdyB0aGUgbnVtYmVyIG9mIGFsbG9jYXRpb24gZmFpbHVyZSBkdWUgdG8gSHVnZVRMQiBsaW1pdAogCiBGb3IgYSBzeXN0ZW0gc3VwcG9ydGluZyB0d28gaHVnZXBhZ2Ugc2l6ZSAoMTZNIGFuZCAxNkcpIHRoZSBjb250cm9sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CmluZGV4IDAyYWI5OTcuLjQ2YjJiNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CkBAIC0xLDUgKzEsMTAgQEAKIE1lbW9yeSBSZXNvdXJjZSBDb250cm9sbGVyCiAKK05PVEU6IFRoaXMgZG9jdW1lbnQgaXMgaG9wZWxlc3NseSBvdXRkYXRlZCBhbmQgaXQgYXNrcyBmb3IgYSBjb21wbGV0ZQorICAgICAgcmV3cml0ZS4gSXQgc3RpbGwgY29udGFpbnMgYSB1c2VmdWwgaW5mb3JtYXRpb24gc28gd2UgYXJlIGtlZXBpbmcgaXQKKyAgICAgIGhlcmUgYnV0IG1ha2Ugc3VyZSB0byBjaGVjayB0aGUgY3VycmVudCBjb2RlIGlmIHlvdSBuZWVkIGEgZGVlcGVyCisgICAgICB1bmRlcnN0YW5kaW5nLgorCiBOT1RFOiBUaGUgTWVtb3J5IFJlc291cmNlIENvbnRyb2xsZXIgaGFzIGdlbmVyaWNhbGx5IGJlZW4gcmVmZXJyZWQgdG8gYXMgdGhlCiAgICAgICBtZW1vcnkgY29udHJvbGxlciBpbiB0aGlzIGRvY3VtZW50LiBEbyBub3QgY29uZnVzZSBtZW1vcnkgY29udHJvbGxlcgogICAgICAgdXNlZCBoZXJlIHdpdGggdGhlIG1lbW9yeSBjb250cm9sbGVyIHRoYXQgaXMgdXNlZCBpbiBoYXJkd2FyZS4KQEAgLTUyLDkgKzU3LDkgQEAKICB0YXNrcwkJCQkgIyBhdHRhY2ggYSB0YXNrKHRocmVhZCkgYW5kIHNob3cgbGlzdCBvZiB0aHJlYWRzCiAgY2dyb3VwLnByb2NzCQkJICMgc2hvdyBsaXN0IG9mIHByb2Nlc3NlcwogIGNncm91cC5ldmVudF9jb250cm9sCQkgIyBhbiBpbnRlcmZhY2UgZm9yIGV2ZW50X2ZkKCkKLSBtZW1vcnkudXNhZ2VfaW5fYnl0ZXMJCSAjIHNob3cgY3VycmVudCByZXNfY291bnRlciB1c2FnZSBmb3IgbWVtb3J5CisgbWVtb3J5LnVzYWdlX2luX2J5dGVzCQkgIyBzaG93IGN1cnJlbnQgdXNhZ2UgZm9yIG1lbW9yeQogCQkJCSAoU2VlIDUuNSBmb3IgZGV0YWlscykKLSBtZW1vcnkubWVtc3cudXNhZ2VfaW5fYnl0ZXMJICMgc2hvdyBjdXJyZW50IHJlc19jb3VudGVyIHVzYWdlIGZvciBtZW1vcnkrU3dhcAorIG1lbW9yeS5tZW1zdy51c2FnZV9pbl9ieXRlcwkgIyBzaG93IGN1cnJlbnQgdXNhZ2UgZm9yIG1lbW9yeStTd2FwCiAJCQkJIChTZWUgNS41IGZvciBkZXRhaWxzKQogIG1lbW9yeS5saW1pdF9pbl9ieXRlcwkJICMgc2V0L3Nob3cgbGltaXQgb2YgbWVtb3J5IHVzYWdlCiAgbWVtb3J5Lm1lbXN3LmxpbWl0X2luX2J5dGVzCSAjIHNldC9zaG93IGxpbWl0IG9mIG1lbW9yeStTd2FwIHVzYWdlCkBAIC0xMTYsMTYgKzEyMSwxNiBAQAogCiAyLjEuIERlc2lnbgogCi1UaGUgY29yZSBvZiB0aGUgZGVzaWduIGlzIGEgY291bnRlciBjYWxsZWQgdGhlIHJlc19jb3VudGVyLiBUaGUgcmVzX2NvdW50ZXIKLXRyYWNrcyB0aGUgY3VycmVudCBtZW1vcnkgdXNhZ2UgYW5kIGxpbWl0IG9mIHRoZSBncm91cCBvZiBwcm9jZXNzZXMgYXNzb2NpYXRlZAotd2l0aCB0aGUgY29udHJvbGxlci4gRWFjaCBjZ3JvdXAgaGFzIGEgbWVtb3J5IGNvbnRyb2xsZXIgc3BlY2lmaWMgZGF0YQotc3RydWN0dXJlIChtZW1fY2dyb3VwKSBhc3NvY2lhdGVkIHdpdGggaXQuCitUaGUgY29yZSBvZiB0aGUgZGVzaWduIGlzIGEgY291bnRlciBjYWxsZWQgdGhlIHBhZ2VfY291bnRlci4gVGhlCitwYWdlX2NvdW50ZXIgdHJhY2tzIHRoZSBjdXJyZW50IG1lbW9yeSB1c2FnZSBhbmQgbGltaXQgb2YgdGhlIGdyb3VwIG9mCitwcm9jZXNzZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250cm9sbGVyLiBFYWNoIGNncm91cCBoYXMgYSBtZW1vcnkgY29udHJvbGxlcgorc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgKG1lbV9jZ3JvdXApIGFzc29jaWF0ZWQgd2l0aCBpdC4KIAogMi4yLiBBY2NvdW50aW5nCiAKIAkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCQl8ICBtZW1fY2dyb3VwICAgICB8Ci0JCXwgIChyZXNfY291bnRlcikgICAgIHwKKwkJfCAgbWVtX2Nncm91cCAgICAgICAgfAorCQl8ICAocGFnZV9jb3VudGVyKSAgICB8CiAJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAkJIC8gICAgICAgICAgICBeICAgICAgXAogCQkvICAgICAgICAgICAgIHwgICAgICAgXApAQCAtMzUyLDkgKzM1Nyw4IEBACiAwLiBDb25maWd1cmF0aW9uCiAKIGEuIEVuYWJsZSBDT05GSUdfQ0dST1VQUwotYi4gRW5hYmxlIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUwotYy4gRW5hYmxlIENPTkZJR19NRU1DRwotZC4gRW5hYmxlIENPTkZJR19NRU1DR19TV0FQICh0byB1c2Ugc3dhcCBleHRlbnNpb24pCitiLiBFbmFibGUgQ09ORklHX01FTUNHCitjLiBFbmFibGUgQ09ORklHX01FTUNHX1NXQVAgKHRvIHVzZSBzd2FwIGV4dGVuc2lvbikKIGQuIEVuYWJsZSBDT05GSUdfTUVNQ0dfS01FTSAodG8gdXNlIGttZW0gZXh0ZW5zaW9uKQogCiAxLiBQcmVwYXJlIHRoZSBjZ3JvdXBzIChzZWUgY2dyb3Vwcy50eHQsIFdoeSBhcmUgY2dyb3VwcyBuZWVkZWQ/KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL3Jlc291cmNlX2NvdW50ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL3Jlc291cmNlX2NvdW50ZXIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjJjYTU0Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9yZXNvdXJjZV9jb3VudGVyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi0KLQkJVGhlIFJlc291cmNlIENvdW50ZXIKLQotVGhlIHJlc291cmNlIGNvdW50ZXIsIGRlY2xhcmVkIGF0IGluY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaCwKLWlzIHN1cHBvc2VkIHRvIGZhY2lsaXRhdGUgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgYnkgY29udHJvbGxlcnMKLWJ5IHByb3ZpZGluZyBjb21tb24gc3R1ZmYgZm9yIGFjY291bnRpbmcuCi0KLVRoaXMgInN0dWZmIiBpbmNsdWRlcyB0aGUgcmVzX2NvdW50ZXIgc3RydWN0dXJlIGFuZCByb3V0aW5lcwotdG8gd29yayB3aXRoIGl0LgotCi0KLQotMS4gQ3J1Y2lhbCBwYXJ0cyBvZiB0aGUgcmVzX2NvdW50ZXIgc3RydWN0dXJlCi0KLSBhLiB1bnNpZ25lZCBsb25nIGxvbmcgdXNhZ2UKLQotIAlUaGUgdXNhZ2UgdmFsdWUgc2hvd3MgdGhlIGFtb3VudCBvZiBhIHJlc291cmNlIHRoYXQgaXMgY29uc3VtZWQKLQlieSBhIGdyb3VwIGF0IGEgZ2l2ZW4gdGltZS4gVGhlIHVuaXRzIG9mIG1lYXN1cmVtZW50IHNob3VsZCBiZQotCWRldGVybWluZWQgYnkgdGhlIGNvbnRyb2xsZXIgdGhhdCB1c2VzIHRoaXMgY291bnRlci4gRS5nLiBpdCBjYW4KLQliZSBieXRlcywgaXRlbXMgb3IgYW55IG90aGVyIHVuaXQgdGhlIGNvbnRyb2xsZXIgb3BlcmF0ZXMgb24uCi0KLSBiLiB1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3VzYWdlCi0KLSAJVGhlIG1heGltYWwgdmFsdWUgb2YgdGhlIHVzYWdlIG92ZXIgdGltZS4KLQotIAlUaGlzIHZhbHVlIGlzIHVzZWZ1bCB3aGVuIGdhdGhlcmluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiBhYm91dAotCXRoZSBwYXJ0aWN1bGFyIGdyb3VwLCBhcyBpdCBzaG93cyB0aGUgYWN0dWFsIHJlc291cmNlIHJlcXVpcmVtZW50cwotCWZvciBhIHBhcnRpY3VsYXIgZ3JvdXAsIG5vdCBqdXN0IHNvbWUgdXNhZ2Ugc25hcHNob3QuCi0KLSBjLiB1bnNpZ25lZCBsb25nIGxvbmcgbGltaXQKLQotIAlUaGUgbWF4aW1hbCBhbGxvd2VkIGFtb3VudCBvZiByZXNvdXJjZSB0byBjb25zdW1lIGJ5IHRoZSBncm91cC4gSW4KLQljYXNlIHRoZSBncm91cCByZXF1ZXN0cyBmb3IgbW9yZSByZXNvdXJjZXMsIHNvIHRoYXQgdGhlIHVzYWdlIHZhbHVlCi0Jd291bGQgZXhjZWVkIHRoZSBsaW1pdCwgdGhlIHJlc291cmNlIGFsbG9jYXRpb24gaXMgcmVqZWN0ZWQgKHNlZQotCXRoZSBuZXh0IHNlY3Rpb24pLgotCi0gZC4gdW5zaWduZWQgbG9uZyBsb25nIGZhaWxjbnQKLQotIAlUaGUgZmFpbGNudCBzdGFuZHMgZm9yICJmYWlsdXJlcyBjb3VudGVyIi4gVGhpcyBpcyB0aGUgbnVtYmVyIG9mCi0JcmVzb3VyY2UgYWxsb2NhdGlvbiBhdHRlbXB0cyB0aGF0IGZhaWxlZC4KLQotIGMuIHNwaW5sb2NrX3QgbG9jawotCi0gCVByb3RlY3RzIGNoYW5nZXMgb2YgdGhlIGFib3ZlIHZhbHVlcy4KLQotCi0KLTIuIEJhc2ljIGFjY291bnRpbmcgcm91dGluZXMKLQotIGEuIHZvaWQgcmVzX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcmVzX2NvdW50ZXIgKnJjLAotCQkJCXN0cnVjdCByZXNfY291bnRlciAqcmNfcGFyZW50KQotCi0gCUluaXRpYWxpemVzIHRoZSByZXNvdXJjZSBjb3VudGVyLiBBcyB1c3VhbCwgc2hvdWxkIGJlIHRoZSBmaXJzdAotCXJvdXRpbmUgY2FsbGVkIGZvciBhIG5ldyBjb3VudGVyLgotCi0JVGhlIHN0cnVjdCByZXNfY291bnRlciAqcGFyZW50IGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhIGhpZXJhcmNoaWNhbAotCWNoaWxkIC0+IHBhcmVudCByZWxhdGlvbnNoaXAgZGlyZWN0bHkgaW4gdGhlIHJlc19jb3VudGVyIHN0cnVjdHVyZSwKLQlOVUxMIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBubyByZWxhdGlvbnNoaXAuCi0KLSBjLiBpbnQgcmVzX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqcmMsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkJCXN0cnVjdCByZXNfY291bnRlciAqKmxpbWl0X2ZhaWxfYXQpCi0KLQlXaGVuIGEgcmVzb3VyY2UgaXMgYWJvdXQgdG8gYmUgYWxsb2NhdGVkIGl0IGhhcyB0byBiZSBhY2NvdW50ZWQKLQl3aXRoIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSBjb3VudGVyIChjb250cm9sbGVyIHNob3VsZCBkZXRlcm1pbmUKLQl3aGljaCBvbmUgdG8gdXNlIG9uIGl0cyBvd24pLiBUaGlzIG9wZXJhdGlvbiBpcyBjYWxsZWQgImNoYXJnaW5nIi4KLQotCVRoaXMgaXMgbm90IHZlcnkgaW1wb3J0YW50IHdoaWNoIG9wZXJhdGlvbiAtIHJlc291cmNlIGFsbG9jYXRpb24KLQlvciBjaGFyZ2luZyAtIGlzIHBlcmZvcm1lZCBmaXJzdCwgYnV0Ci0JICAqIGlmIHRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCBmaXJzdCwgdGhpcyBtYXkgY3JlYXRlIGEKLQkgICAgdGVtcG9yYXJ5IHJlc291cmNlIG92ZXItdXNhZ2UgYnkgdGhlIHRpbWUgcmVzb3VyY2UgY291bnRlciBpcwotCSAgICBjaGFyZ2VkOwotCSAgKiBpZiB0aGUgY2hhcmdpbmcgaXMgcGVyZm9ybWVkIGZpcnN0LCB0aGVuIGl0IHNob3VsZCBiZSB1bmNoYXJnZWQKLQkgICAgb24gZXJyb3IgcGF0aCAoaWYgdGhlIG9uZSBpcyBjYWxsZWQpLgotCi0JSWYgdGhlIGNoYXJnaW5nIGZhaWxzIGFuZCBhIGhpZXJhcmNoaWNhbCBkZXBlbmRlbmN5IGV4aXN0cywgdGhlCi0JbGltaXRfZmFpbF9hdCBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRoZSBwYXJ0aWN1bGFyIHJlc19jb3VudGVyIGVsZW1lbnQKLQl3aGVyZSB0aGUgY2hhcmdpbmcgZmFpbGVkLgotCi0gZC4gdTY0IHJlc19jb3VudGVyX3VuY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqcmMsIHVuc2lnbmVkIGxvbmcgdmFsKQotCi0JV2hlbiBhIHJlc291cmNlIGlzIHJlbGVhc2VkIChmcmVlZCkgaXQgc2hvdWxkIGJlIGRlLWFjY291bnRlZAotCWZyb20gdGhlIHJlc291cmNlIGNvdW50ZXIgaXQgd2FzIGFjY291bnRlZCB0by4gIFRoaXMgaXMgY2FsbGVkCi0JInVuY2hhcmdpbmciLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gaW5kaWNhdGUgdGhlIGFtb3VudAotCW9mIGNoYXJnZXMgc3RpbGwgcHJlc2VudCBpbiB0aGUgY291bnRlci4KLQotCVRoZSBfbG9ja2VkIHJvdXRpbmVzIGltcGx5IHRoYXQgdGhlIHJlc19jb3VudGVyLT5sb2NrIGlzIHRha2VuLgotCi0gZS4gdTY0IHJlc19jb3VudGVyX3VuY2hhcmdlX3VudGlsCi0JCShzdHJ1Y3QgcmVzX2NvdW50ZXIgKnJjLCBzdHJ1Y3QgcmVzX2NvdW50ZXIgKnRvcCwKLQkJIHVuc2lnbmVkIGxvbmcgdmFsKQotCi0JQWxtb3N0IHNhbWUgYXMgcmVzX2NvdW50ZXJfdW5jaGFyZ2UoKSBidXQgcHJvcGFnYXRpb24gb2YgdW5jaGFyZ2UKLQlzdG9wcyB3aGVuIHJjID09IHRvcC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBraWxsIGEgcmVzX2NvdW50ZXIgaW4KLQljaGlsZCBjZ3JvdXAuCi0KLSAyLjEgT3RoZXIgYWNjb3VudGluZyByb3V0aW5lcwotCi0gICAgVGhlcmUgYXJlIG1vcmUgcm91dGluZXMgdGhhdCBtYXkgaGVscCB5b3Ugd2l0aCBjb21tb24gbmVlZHMsIGxpa2UKLSAgICBjaGVja2luZyB3aGV0aGVyIHRoZSBsaW1pdCBpcyByZWFjaGVkIG9yIHJlc2V0dGluZyB0aGUgbWF4X3VzYWdlCi0gICAgdmFsdWUuIFRoZXkgYXJlIGFsbCBkZWNsYXJlZCBpbiBpbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmguCi0KLQotCi0zLiBBbmFseXppbmcgdGhlIHJlc291cmNlIGNvdW50ZXIgcmVnaXN0cmF0aW9ucwotCi0gYS4gSWYgdGhlIGZhaWxjbnQgdmFsdWUgY29uc3RhbnRseSBncm93cywgdGhpcyBtZWFucyB0aGF0IHRoZSBjb3VudGVyJ3MKLSAgICBsaW1pdCBpcyB0b28gdGlnaHQuIEVpdGhlciB0aGUgZ3JvdXAgaXMgbWlzYmVoYXZpbmcgYW5kIGNvbnN1bWVzIHRvbwotICAgIG1hbnkgcmVzb3VyY2VzLCBvciB0aGUgY29uZmlndXJhdGlvbiBpcyBub3Qgc3VpdGFibGUgZm9yIHRoZSBncm91cAotICAgIGFuZCB0aGUgbGltaXQgc2hvdWxkIGJlIGluY3JlYXNlZC4KLQotIGIuIFRoZSBtYXhfdXNhZ2UgdmFsdWUgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSB0dW5lIHRoZSBncm91cC4gT25lIG1heQotICAgIHNldCB0aGUgbGltaXRzIHRvIG1heGltYWwgdmFsdWVzIGFuZCBlaXRoZXIgbG9hZCB0aGUgY29udGFpbmVyIHdpdGgKLSAgICBhIGNvbW1vbiBwYXR0ZXJuIG9yIGxlYXZlIG9uZSBmb3IgYSB3aGlsZS4gQWZ0ZXIgdGhpcyB0aGUgbWF4X3VzYWdlCi0gICAgdmFsdWUgc2hvd3MgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhlIGNvbnRhaW5lciB3b3VsZCByZXF1aXJlIGR1cmluZwotICAgIGl0cyBjb21tb24gYWN0aXZpdHkuCi0KLSAgICBTZXR0aW5nIHRoZSBsaW1pdCBhIGJpdCBhYm92ZSB0aGlzIHZhbHVlIGdpdmVzIGEgcHJldHR5IGdvb2QKLSAgICBjb25maWd1cmF0aW9uIHRoYXQgd29ya3MgaW4gbW9zdCBvZiB0aGUgY2FzZXMuCi0KLSBjLiBJZiB0aGUgbWF4X3VzYWdlIGlzIG11Y2ggbGVzcyB0aGFuIHRoZSBsaW1pdCwgYnV0IHRoZSBmYWlsY250IHZhbHVlCi0gICAgaXMgZ3Jvd2luZywgdGhlbiB0aGUgZ3JvdXAgdHJpZXMgdG8gYWxsb2NhdGUgYSBiaWcgY2h1bmsgb2YgcmVzb3VyY2UKLSAgICBhdCBvbmNlLgotCi0gZC4gSWYgdGhlIG1heF91c2FnZSBpcyBtdWNoIGxlc3MgdGhhbiB0aGUgbGltaXQsIGJ1dCB0aGUgZmFpbGNudCB2YWx1ZQotICAgIGlzIDAsIHRoZW4gdGhpcyBncm91cCBpcyBnaXZlbiB0b28gaGlnaCBsaW1pdCwgdGhhdCBpdCBkb2VzIG5vdAotICAgIHJlcXVpcmUuIEl0IGlzIGJldHRlciB0byBsb3dlciB0aGUgbGltaXQgYSBiaXQgbGVhdmluZyBtb3JlIHJlc291cmNlCi0gICAgZm9yIG90aGVyIGdyb3Vwcy4KLQotCi0KLTQuIENvbW11bmljYXRpb24gd2l0aCB0aGUgY29udHJvbCBncm91cHMgc3Vic3lzdGVtIChjZ3JvdXBzKQotCi1BbGwgdGhlIHJlc291cmNlIGNvbnRyb2xsZXJzIHRoYXQgYXJlIHVzaW5nIGNncm91cHMgYW5kIHJlc291cmNlIGNvdW50ZXJzCi1zaG91bGQgcHJvdmlkZSBmaWxlcyAoaW4gdGhlIGNncm91cCBmaWxlc3lzdGVtKSB0byB3b3JrIHdpdGggdGhlIHJlc291cmNlCi1jb3VudGVyIGZpZWxkcy4gVGhleSBhcmUgcmVjb21tZW5kZWQgdG8gYWRoZXJlIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6Ci0KLSBhLiBGaWxlIG5hbWVzCi0KLSAJRmllbGQgbmFtZQlGaWxlIG5hbWUKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl1c2FnZQkJdXNhZ2VfaW5fPHVuaXRfb2ZfbWVhc3VyZW1lbnQ+Ci0JbWF4X3VzYWdlCW1heF91c2FnZV9pbl88dW5pdF9vZl9tZWFzdXJlbWVudD4KLQlsaW1pdAkJbGltaXRfaW5fPHVuaXRfb2ZfbWVhc3VyZW1lbnQ+Ci0JZmFpbGNudAkJZmFpbGNudAotCWxvY2sJCW5vIGZpbGUgOikKLQotIGIuIFJlYWRpbmcgZnJvbSBmaWxlIHNob3VsZCBzaG93IHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIHZhbHVlIGluIHRoZQotICAgIGFwcHJvcHJpYXRlIGZvcm1hdC4KLQotIGMuIFdyaXRpbmcgdG8gZmlsZQotCi0gCUZpZWxkCQlFeHBlY3RlZCBiZWhhdmlvcgotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl1c2FnZQkJcHJvaGliaXRlZAotCW1heF91c2FnZQlyZXNldCB0byB1c2FnZQotCWxpbWl0CQlzZXQgdGhlIGxpbWl0Ci0JZmFpbGNudAkJcmVzZXQgdG8gemVybwotCi0KLQotNS4gVXNhZ2UgZXhhbXBsZQotCi0gYS4gRGVjbGFyZSBhIHRhc2sgZ3JvdXAgKHRha2UgYSBsb29rIGF0IGNncm91cHMgc3Vic3lzdGVtIGZvciB0aGlzKSBhbmQKLSAgICBmb2xkIGEgcmVzX2NvdW50ZXIgaW50byBpdAotCi0Jc3RydWN0IG15X2dyb3VwIHsKLQkJc3RydWN0IHJlc19jb3VudGVyIHJlczsKLQotCQk8b3RoZXIgZmllbGRzPgotCX0KLQotIGIuIFB1dCBob29rcyBpbiByZXNvdXJjZSBhbGxvY2F0aW9uL3JlbGVhc2UgcGF0aHMKLQotIAlpbnQgYWxsb2Nfc29tZXRoaW5nKC4uLikKLQl7Ci0JCWlmIChyZXNfY291bnRlcl9jaGFyZ2UocmVzX2NvdW50ZXJfcHRyLCBhbW91bnQpIDwgMCkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCTxhbGxvY2F0ZSB0aGUgcmVzb3VyY2UgYW5kIHJldHVybiB0byB0aGUgY2FsbGVyPgotCX0KLQotCXZvaWQgcmVsZWFzZV9zb21ldGhpbmcoLi4uKQotCXsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UocmVzX2NvdW50ZXJfcHRyLCBhbW91bnQpOwotCi0JCTxyZWxlYXNlIHRoZSByZXNvdXJjZT4KLQl9Ci0KLSAgICBJbiBvcmRlciB0byBrZWVwIHRoZSB1c2FnZSB2YWx1ZSBzZWxmLWNvbnNpc3RlbnQsIGJvdGggdGhlCi0gICAgInJlc19jb3VudGVyX3B0ciIgYW5kIHRoZSAiYW1vdW50IiBpbiByZWxlYXNlX3NvbWV0aGluZygpIHNob3VsZCBiZQotICAgIHRoZSBzYW1lIGFzIHRoZXkgd2VyZSBpbiB0aGUgYWxsb2Nfc29tZXRoaW5nKCkgd2hlbiB0aGUgcmVsZWFzaW5nCi0gICAgcmVzb3VyY2Ugd2FzIGFsbG9jYXRlZC4KLQotIGMuIFByb3ZpZGUgdGhlIHdheSB0byByZWFkIHJlc19jb3VudGVyIHZhbHVlcyBhbmQgc2V0IHRoZW0gKHRoZSBjZ3JvdXBzCi0gICAgc3RpbGwgY2FuIGhlbHAgd2l0aCBpdCkuCi0KLSBjLiBDb21waWxlIGFuZCBydW4gOikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9jYWNoZS1wb2xpY2llcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvY2FjaGUtcG9saWNpZXMudHh0CmluZGV4IDY2YzI3NzQuLjBkMTI0YTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9jYWNoZS1wb2xpY2llcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2NhY2hlLXBvbGljaWVzLnR4dApAQCAtNDcsMjAgKzQ3LDI2IEBACiAJJ2Rpc2NhcmRfcHJvbW90ZV9hZGp1c3RtZW50IDx2YWx1ZT4nCiAKIFRoZSBzZXF1ZW50aWFsIHRocmVzaG9sZCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBjb250aWd1b3VzIEkvT3MKLXJlcXVpcmVkIGJlZm9yZSBhIHN0cmVhbSBpcyB0cmVhdGVkIGFzIHNlcXVlbnRpYWwuICBUaGUgcmFuZG9tIHRocmVzaG9sZAorcmVxdWlyZWQgYmVmb3JlIGEgc3RyZWFtIGlzIHRyZWF0ZWQgYXMgc2VxdWVudGlhbC4gIE9uY2UgYSBzdHJlYW0gaXMKK2NvbnNpZGVyZWQgc2VxdWVudGlhbCBpdCB3aWxsIGJ5cGFzcyB0aGUgY2FjaGUuICBUaGUgcmFuZG9tIHRocmVzaG9sZAogaXMgdGhlIG51bWJlciBvZiBpbnRlcnZlbmluZyBub24tY29udGlndW91cyBJL09zIHRoYXQgbXVzdCBiZSBzZWVuCiBiZWZvcmUgdGhlIHN0cmVhbSBpcyB0cmVhdGVkIGFzIHJhbmRvbSBhZ2Fpbi4KIAogVGhlIHNlcXVlbnRpYWwgYW5kIHJhbmRvbSB0aHJlc2hvbGRzIGRlZmF1bHQgdG8gNTEyIGFuZCA0IHJlc3BlY3RpdmVseS4KIAotTGFyZ2UsIHNlcXVlbnRpYWwgaW9zIGFyZSBwcm9iYWJseSBiZXR0ZXIgbGVmdCBvbiB0aGUgb3JpZ2luIGRldmljZQotc2luY2Ugc3BpbmRsZXMgdGVuZCB0byBoYXZlIGdvb2QgYmFuZHdpZHRoLiBUaGUgaW9fdHJhY2tlciBjb3VudHMKLWNvbnRpZ3VvdXMgSS9PcyB0byB0cnkgdG8gc3BvdCB3aGVuIHRoZSBpbyBpcyBpbiBvbmUgb2YgdGhlc2Ugc2VxdWVudGlhbAotbW9kZXMuCitMYXJnZSwgc2VxdWVudGlhbCBJL09zIGFyZSBwcm9iYWJseSBiZXR0ZXIgbGVmdCBvbiB0aGUgb3JpZ2luIGRldmljZQorc2luY2Ugc3BpbmRsZXMgdGVuZCB0byBoYXZlIGdvb2Qgc2VxdWVudGlhbCBJL08gYmFuZHdpZHRoLiAgVGhlCitpb190cmFja2VyIGNvdW50cyBjb250aWd1b3VzIEkvT3MgdG8gdHJ5IHRvIHNwb3Qgd2hlbiB0aGUgSS9PIGlzIGluIG9uZQorb2YgdGhlc2Ugc2VxdWVudGlhbCBtb2Rlcy4gIEJ1dCB0aGVyZSBhcmUgdXNlLWNhc2VzIGZvciB3YW50aW5nIHRvCitwcm9tb3RlIHNlcXVlbnRpYWwgYmxvY2tzIHRvIHRoZSBjYWNoZSAoZS5nLiBmYXN0IGFwcGxpY2F0aW9uIHN0YXJ0dXApLgorSWYgc2VxdWVudGlhbCB0aHJlc2hvbGQgaXMgc2V0IHRvIDAgdGhlIHNlcXVlbnRpYWwgSS9PIGRldGVjdGlvbiBpcworZGlzYWJsZWQgYW5kIHNlcXVlbnRpYWwgSS9PIHdpbGwgbm8gbG9uZ2VyIGltcGxpY2l0bHkgYnlwYXNzIHRoZSBjYWNoZS4KK1NldHRpbmcgdGhlIHJhbmRvbSB0aHJlc2hvbGQgdG8gMCBkb2VzIF9ub3RfIGRpc2FibGUgdGhlIHJhbmRvbSBJL08KK3N0cmVhbSBkZXRlY3Rpb24uCiAKLUludGVybmFsbHkgdGhlIG1xIHBvbGljeSBtYWludGFpbnMgYSBwcm9tb3Rpb24gdGhyZXNob2xkIHZhcmlhYmxlLiAgSWYKLXRoZSBoaXQgY291bnQgb2YgYSBibG9jayBub3QgaW4gdGhlIGNhY2hlIGdvZXMgYWJvdmUgdGhpcyB0aHJlc2hvbGQgaXQKLWdldHMgcHJvbW90ZWQgdG8gdGhlIGNhY2hlLiAgVGhlIHJlYWQsIHdyaXRlIGFuZCBkaXNjYXJkIHByb21vdGUgYWRqdXN0bWVudAorSW50ZXJuYWxseSB0aGUgbXEgcG9saWN5IGRldGVybWluZXMgYSBwcm9tb3Rpb24gdGhyZXNob2xkLiAgSWYgdGhlIGhpdAorY291bnQgb2YgYSBibG9jayBub3QgaW4gdGhlIGNhY2hlIGdvZXMgYWJvdmUgdGhpcyB0aHJlc2hvbGQgaXQgZ2V0cworcHJvbW90ZWQgdG8gdGhlIGNhY2hlLiAgVGhlIHJlYWQsIHdyaXRlIGFuZCBkaXNjYXJkIHByb21vdGUgYWRqdXN0bWVudAogdHVuYWJsZXMgYWxsb3cgeW91IHRvIHR3ZWFrIHRoZSBwcm9tb3Rpb24gdGhyZXNob2xkIGJ5IGFkZGluZyBhIHNtYWxsCiB2YWx1ZSBiYXNlZCBvbiB0aGUgaW8gdHlwZS4gIFRoZXkgZGVmYXVsdCB0byA0LCA4IGFuZCAxIHJlc3BlY3RpdmVseS4KIElmIHlvdSdyZSB0cnlpbmcgdG8gcXVpY2tseSB3YXJtIGEgbmV3IGNhY2hlIGRldmljZSB5b3UgbWF5IHdpc2ggdG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYW1sb2dpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FtbG9naWMudHh0CmluZGV4IDdlZWNlNzIuLjhmZTgxNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYW1sb2dpYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hbWxvZ2ljLnR4dApAQCAtMiw3ICsyLDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQm9hcmRzIHdpdGggdGhlIEFtbG9naWMgTWVzb242IFNvQyBzaGFsbCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAgUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgorICAgIGNvbXBhdGlibGU6ICJhbWxvZ2ljLG1lc29uNiIKIAotUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgotCi1jb21wYXRpYmxlID0gImFtbG9naWMsbWVzb242IjsKK0JvYXJkcyB3aXRoIHRoZSBBbWxvZ2ljIE1lc29uOCBTb0Mgc2hhbGwgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0eToKKyAgICBjb21wYXRpYmxlOiAiYW1sb2dpYyxtZXNvbjgiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcmNoX3RpbWVyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJjaF90aW1lci50eHQKaW5kZXggMzdiMmNhZi4uMjU2YjRkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcmNoX3RpbWVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FyY2hfdGltZXIudHh0CkBAIC0yMiw2ICsyMiwxNCBAQAogLSBhbHdheXMtb24gOiBhIGJvb2xlYW4gcHJvcGVydHkuIElmIHByZXNlbnQsIHRoZSB0aW1lciBpcyBwb3dlcmVkIHRocm91Z2ggYW4KICAgYWx3YXlzLW9uIHBvd2VyIGRvbWFpbiwgdGhlcmVmb3JlIGl0IG5ldmVyIGxvc2VzIGNvbnRleHQuCiAKKyoqIE9wdGlvbmFsIHByb3BlcnRpZXM6CisKKy0gYXJtLGNwdS1yZWdpc3RlcnMtbm90LWZ3LWNvbmZpZ3VyZWQgOiBGaXJtd2FyZSBkb2VzIG5vdCBpbml0aWFsaXplCisgIGFueSBvZiB0aGUgZ2VuZXJpYyB0aW1lciBDUFUgcmVnaXN0ZXJzLCB3aGljaCBjb250YWluIHRoZWlyCisgIGFyY2hpdGVjdHVyYWxseS1kZWZpbmVkIHJlc2V0IHZhbHVlcy4gT25seSBzdXBwb3J0ZWQgZm9yIDMyLWJpdAorICBzeXN0ZW1zIHdoaWNoIGZvbGxvdyB0aGUgQVJNdjcgYXJjaGl0ZWN0ZWQgcmVzZXQgdmFsdWVzLgorCisKIEV4YW1wbGU6CiAKIAl0aW1lciB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FybS1ib2FyZHMgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2FybS1ib2FyZHMKaW5kZXggYzU1NGVkMy4uNTU2Yzg2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9hcm0tYm9hcmRzCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYXJtLWJvYXJkcwpAQCAtOTIsMyArOTIsNjggQEAKIC0gY29yZS1tb2R1bGU6IHRoZSByb290IG5vZGUgdG8gdGhlIFZlcnNhdGlsZSBwbGF0Zm9ybXMgbXVzdCBoYXZlCiAgIGEgY29yZS1tb2R1bGUgd2l0aCByZWdzIGFuZCB0aGUgY29tcGF0aWJsZSBzdHJpbmdzCiAgICJhcm0sY29yZS1tb2R1bGUtdmVyc2F0aWxlIiwgInN5c2NvbiIKKworQVJNIFJlYWxWaWV3IEJvYXJkcworLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIFJlYWxWaWV3IGJvYXJkcyBjb3ZlciB0YWlsb3JlZCBldmFsdWF0aW9uIGJvYXJkcyB0aGF0IGFyZSB1c2VkIHRvIGV4cGxvcmUKK3RoZSBBUk0xMSBhbmQgQ29ydGV4IEEtOCBhbmQgQ29ydGV4IEEtOSBwcm9jZXNzb3JzLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzIChpbiByb290IG5vZGUpOgorCS8qIFJlYWxWaWV3IEVtdWxhdGlvbiBCYXNlYm9hcmQgKi8KKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1lYiI7CisJIC8qIFJlYWxWaWV3IFBsYXRmb3JtIEJhc2Vib2FyZCBmb3IgQVJNMTE3NkpaRi1TICovCisJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGIxMTc2IjsKKwkvKiBSZWFsVmlldyBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIEFSTTExIE1QQ29yZSAqLworCWNvbXBhdGlibGUgPSAiYXJtLHJlYWx2aWV3LXBiMTFtcCI7CisJLyogUmVhbFZpZXcgUGxhdGZvcm0gQmFzZWJvYXJkIGZvciBDb3J0ZXggQS04ICovCisJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGJhOCI7CisJLyogUmVhbFZpZXcgUGxhdGZvcm0gQmFzZWJvYXJkIEV4cGxvcmUgZm9yIENvcnRleCBBLTkgKi8KKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYngiOworCitSZXF1aXJlZCBub2RlczoKKworLSBzb2M6IHNvbWUgbm9kZSBvZiB0aGUgUmVhbFZpZXcgcGxhdGZvcm1zIG11c3QgYmUgdGhlIFNvQworICBub2RlIHRoYXQgY29udGFpbiB0aGUgU29DLXNwZWNpZmljIGRldmljZXMsIHdpdGhlIHRoZSBjb21wYXRpYmxlCisgIHN0cmluZyBzZXQgdG8gb25lIG9mIHRoZXNlIHR1cGxlczoKKyAgICJhcm0scmVhbHZpZXctZWItc29jIiwgInNpbXBsZS1idXMiCisgICAiYXJtLHJlYWx2aWV3LXBiMTE3Ni1zb2MiLCAic2ltcGxlLWJ1cyIKKyAgICJhcm0scmVhbHZpZXctcGIxMW1wLXNvYyIsICJzaW1wbGUtYnVzIgorICAgImFybSxyZWFsdmlldy1wYmE4LXNvYyIsICJzaW1wbGUtYnVzIgorICAgImFybSxyZWFsdmlldy1wYngtc29jIiwgInNpbXBsZS1idXMiCisKKy0gc3lzY29uOiBzb21lIHN1Ym5vZGUgb2YgdGhlIFJlYWxWaWV3IFNvQyBub2RlIG11c3QgYmUgYQorICBzeXN0ZW0gY29udHJvbGxlciBub2RlIHBvaW50aW5nIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVycywKKyAgd2l0aCB0aGUgY29tcGF0aWJsZSBzdHJpbmcgc2V0IHRvIG9uZSBvZiB0aGVzZSB0dXBsZXM6CisgICAiYXJtLHJlYWx2aWV3LWViLXN5c2NvbiIsICJzeXNjb24iCisgICAiYXJtLHJlYWx2aWV3LXBiMTE3Ni1zeXNjb24iLCAic3lzY29uIgorICAgImFybSxyZWFsdmlldy1wYjExbXAtc3lzY29uIiwgInN5c2NvbiIKKyAgICJhcm0scmVhbHZpZXctcGJhOC1zeXNjb24iLCAic3lzY29uIgorICAgImFybSxyZWFsdmlldy1wYngtc3lzY29uIiwgInN5c2NvbiIKKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciB0aGUgc3lzdGVtIGNvbnRyb2xsZXI6CisgIC0gcmVnczogdGhlIGxvY2F0aW9uIGFuZCBzaXplIG9mIHRoZSBzeXN0ZW0gY29udHJvbGxlciByZWdpc3RlcnMsCisgICAgb25lIHJhbmdlIG9mIDB4MTAwMCBieXRlcy4KKworRXhhbXBsZToKKworL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQVJNIFJlYWxWaWV3IFBCMTE3NiB3aXRoIGRldmljZSB0cmVlIjsKKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYiOworCisJc29jIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYtc29jIiwgInNpbXBsZS1idXMiOworCQlyYW5nZXM7CisKKwkJc3lzY29uOiBzeXNjb25AMTAwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctc3lzY29uIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgxMDAwMDAwMCAweDEwMDA+OworCQl9OworCisJfTsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2JjbS9jeWdudXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9iY20vY3lnbnVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzc3MTY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9iY20vY3lnbnVzLnR4dApAQCAtMCwwICsxLDMxIEBACitCcm9hZGNvbSBDeWdudXMgZGV2aWNlIHRyZWUgYmluZGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0JvYXJkcyB3aXRoIEN5Z251cyBTb0NzIHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorCitSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydHk6CisKK0JDTTExMzAwCitjb21wYXRpYmxlID0gImJyY20sYmNtMTEzMDAiLCAiYnJjbSxjeWdudXMiOworCitCQ00xMTMyMAorY29tcGF0aWJsZSA9ICJicmNtLGJjbTExMzIwIiwgImJyY20sY3lnbnVzIjsKKworQkNNMTEzNTAKK2NvbXBhdGlibGUgPSAiYnJjbSxiY20xMTM1MCIsICJicmNtLGN5Z251cyI7CisKK0JDTTExMzYwCitjb21wYXRpYmxlID0gImJyY20sYmNtMTEzNjAiLCAiYnJjbSxjeWdudXMiOworCitCQ001ODMwMAorY29tcGF0aWJsZSA9ICJicmNtLGJjbTU4MzAwIiwgImJyY20sY3lnbnVzIjsKKworQkNNNTgzMDIKK2NvbXBhdGlibGUgPSAiYnJjbSxiY201ODMwMiIsICJicmNtLGN5Z251cyI7CisKK0JDTTU4MzAzCitjb21wYXRpYmxlID0gImJyY20sYmNtNTgzMDMiLCAiYnJjbSxjeWdudXMiOworCitCQ001ODMwNQorY29tcGF0aWJsZSA9ICJicmNtLGJjbTU4MzA1IiwgImJyY20sY3lnbnVzIjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vY3B1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2NwdXMudHh0CmluZGV4IGZjNDQ2MzQ3Li5iMmFhY2JlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2NwdXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vY3B1cy50eHQKQEAgLTIyNyw2ICsyMjcsMTUgQEAKIAkJCSMgTGlzdCBvZiBwaGFuZGxlcyB0byBpZGxlIHN0YXRlIG5vZGVzIHN1cHBvcnRlZAogCQkJICBieSB0aGlzIGNwdSBbM10uCiAKKwktIHJvY2tjaGlwLHBtdQorCQlVc2FnZTogb3B0aW9uYWwgZm9yIHN5c3RlbXMgdGhhdCBoYXZlIGFuICJlbmFibGUtbWV0aG9kIgorCQkgICAgICAgcHJvcGVydHkgdmFsdWUgb2YgInJvY2tjaGlwLHJrMzA2Ni1zbXAiCisJCSAgICAgICBXaGlsZSBvcHRpb25hbCwgaXQgaXMgdGhlIHByZWZlcnJlZCB3YXkgdG8gZ2V0IGFjY2VzcyB0bworCQkgICAgICAgdGhlIGNwdS1jb3JlIHBvd2VyLWRvbWFpbnMuCisJCVZhbHVlIHR5cGU6IDxwaGFuZGxlPgorCQlEZWZpbml0aW9uOiBTcGVjaWZpZXMgdGhlIHN5c2NvbiBub2RlIGNvbnRyb2xsaW5nIHRoZSBjcHUgY29yZQorCQkJICAgIHBvd2VyIGRvbWFpbnMuCisKIEV4YW1wbGUgMSAoZHVhbC1jbHVzdGVyIGJpZy5MSVRUTEUgc3lzdGVtIDMyLWJpdCk6CiAKIAljcHVzIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZnNsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZnNsLnR4dAppbmRleCBlOTM1ZDdkLi40ZThiN2RmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2ZzbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9mc2wudHh0CkBAIC03NCwzICs3NCw0MSBAQAogaS5NWDZxIGdlbmVyaWMgYm9hcmQKIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0aWVzOgogICAgIC0gY29tcGF0aWJsZSA9ICJmc2wsaW14NnEiOworCisKK0ZyZWVzY2FsZSBMUzEwMjFBIFBsYXRmb3JtIERldmljZSBUcmVlIEJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVxdWlyZWQgcm9vdCBub2RlIGNvbXBhdGlibGUgcHJvcGVydGllczoKKyAgLSBjb21wYXRpYmxlID0gImZzbCxsczEwMjFhIjsKKworRnJlZXNjYWxlIExTMTAyMUEgU29DLXNwZWNpZmljIERldmljZSBUcmVlIEJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZyZWVzY2FsZSBTQ0ZHCisgIFNDRkcgaXMgdGhlIHN1cHBsZW1lbnRhbCBjb25maWd1cmF0aW9uIHVuaXQsIHRoYXQgcHJvdmlkZXMgU29DIHNwZWNpZmljCitjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIGZvciB0aGUgY2hpcC4gU3VjaCBhcyBnZXR0aW5nIFBFWCBwb3J0CitzdGF0dXMuCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisgIC0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJmc2wsbHMxMDIxYS1zY2ZnIgorICAtIHJlZzogc2hvdWxkIGNvbnRhaW4gYmFzZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgU0NGRyBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycworCitFeGFtcGxlOgorCXNjZmc6IHNjZmdAMTU3MDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtc2NmZyI7CisJCXJlZyA9IDwweDAgMHgxNTcwMDAwIDB4MCAweDEwMDAwPjsKKwl9OworCitGcmVlc2NhbGUgRENGRworICBEQ0ZHIGlzIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiB1bml0LCB0aGF0IHByb3ZpZGVzIGdlbmVyYWwgcHVycG9zZQorY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzIGZvciB0aGUgZGV2aWNlLiBTdWNoIGFzIHNldHRpbmcgdGhlIHNlY29uZGFyeQorY29yZSBzdGFydCBhZGRyZXNzIGFuZCByZWxlYXNlIHRoZSBzZWNvbmRhcnkgY29yZSBmcm9tIGhvbGRvZmYgYW5kIHN0YXJ0dXAuCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisgIC0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJmc2wsbHMxMDIxYS1kY2ZnIgorICAtIHJlZyA6IHNob3VsZCBjb250YWluIGJhc2UgYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIERDRkcgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMKKworRXhhbXBsZToKKwlkY2ZnOiBkY2ZnQDFlZTAwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWRjZmciOworCQlyZWcgPSA8MHgwIDB4MWVlMDAwMCAweDAgMHgxMDAwMD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZ2ljLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vZ2ljLnR4dAppbmRleCBjN2QyZmExLi5iMzg2MDhhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2dpYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9naWMudHh0CkBAIC0xNyw2ICsxNyw3IEBACiAJImFybSxjb3J0ZXgtYTctZ2ljIgogCSJhcm0sYXJtMTFtcC1naWMiCiAJImJyY20sYnJhaG1hLWIxNS1naWMiCisJImFybSxhcm0xMTc2anpmLWRldmNoaXAtZ2ljIgogLSBpbnRlcnJ1cHQtY29udHJvbGxlciA6IElkZW50aWZpZXMgdGhlIG5vZGUgYXMgYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIKIC0gI2ludGVycnVwdC1jZWxscyA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNlbGxzIG5lZWRlZCB0byBlbmNvZGUgYW4KICAgaW50ZXJydXB0IHNvdXJjZS4gIFRoZSB0eXBlIHNoYWxsIGJlIGEgPHUzMj4gYW5kIHRoZSB2YWx1ZSBzaGFsbCBiZSAzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9pZGxlLXN0YXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2lkbGUtc3RhdGVzLnR4dAppbmRleCAzNzM3NWM3Li5hODI3NGVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2lkbGUtc3RhdGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2lkbGUtc3RhdGVzLnR4dApAQCAtMzE3LDYgKzMxNywyNiBAQAogCQkJICAgIEluIHN1Y2ggc3lzdGVtcyBlbnRyeS1sYXRlbmN5LXVzICsgZXhpdC1sYXRlbmN5LXVzCiAJCQkgICAgd2lsbCBleGNlZWQgd2FrZXVwLWxhdGVuY3ktdXMgYnkgdGhpcyBkdXJhdGlvbi4KIAorCS0gc3RhdHVzOgorCQlVc2FnZTogT3B0aW9uYWwKKwkJVmFsdWUgdHlwZTogPHN0cmluZz4KKwkJRGVmaW5pdGlvbjogQSBzdGFuZGFyZCBkZXZpY2UgdHJlZSBwcm9wZXJ0eSBbNV0gdGhhdCBpbmRpY2F0ZXMKKwkJCSAgICB0aGUgb3BlcmF0aW9uYWwgc3RhdHVzIG9mIGFuIGlkbGUtc3RhdGUuCisJCQkgICAgSWYgcHJlc2VudCwgaXQgc2hhbGwgYmU6CisJCQkgICAgIm9rYXkiOiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBpZGxlIHN0YXRlIGlzCisJCQkJICAgIG9wZXJhdGlvbmFsLgorCQkJICAgICJkaXNhYmxlZCI6IHRvIGluZGljYXRlIHRoYXQgdGhlIGlkbGUgc3RhdGUgaGFzCisJCQkJCWJlZW4gZGlzYWJsZWQgaW4gZmlybXdhcmUgc28gaXQgaXMgbm90CisJCQkJCW9wZXJhdGlvbmFsLgorCQkJICAgIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCB0aGUgaWRsZS1zdGF0ZSBtdXN0CisJCQkgICAgYmUgY29uc2lkZXJlZCBvcGVyYXRpb25hbC4KKworCS0gaWRsZS1zdGF0ZS1uYW1lOgorCQlVc2FnZTogT3B0aW9uYWwKKwkJVmFsdWUgdHlwZTogPHN0cmluZz4KKwkJRGVmaW5pdGlvbjogQSBzdHJpbmcgdXNlZCBhcyBhIGRlc2NyaXB0aXZlIG5hbWUgZm9yIHRoZSBpZGxlCisJCQkgICAgc3RhdGUuCisKIAlJbiBhZGRpdGlvbiB0byB0aGUgcHJvcGVydGllcyBsaXN0ZWQgYWJvdmUsIGEgc3RhdGUgbm9kZSBtYXkgcmVxdWlyZQogCWFkZGl0aW9uYWwgcHJvcGVydGllcyBzcGVjaWZpY3MgdG8gdGhlIGVudHJ5LW1ldGhvZCBkZWZpbmVkIGluIHRoZQogCWlkbGUtc3RhdGVzIG5vZGUsIHBsZWFzZSByZWZlciB0byB0aGUgZW50cnktbWV0aG9kIGJpbmRpbmdzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21hcnZlbGwsYmVybGluLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWFydmVsbCxiZXJsaW4udHh0CmluZGV4IDkwNGRlNTcuLmE5OWViOWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWFydmVsbCxiZXJsaW4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWFydmVsbCxiZXJsaW4udHh0CkBAIC0xMDYsMTEgKzEwNiwyMSBAQAogLSBncm91cHM6IGEgbGlzdCBvZiBzdHJpbmdzIGRlc2NyaWJpbmcgdGhlIGdyb3VwIG5hbWVzLgogLSBmdW5jdGlvbjogYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZnVuY3Rpb24gdXNlZCB0byBtdXggdGhlIGdyb3Vwcy4KIAorKiBSZXNldCBjb250cm9sbGVyIGJpbmRpbmcKKworQSByZXNldCBjb250cm9sbGVyIGlzIHBhcnQgb2YgdGhlIGNoaXAgY29udHJvbCByZWdpc3RlcnMgc2V0LiBUaGUgY2hpcCBjb250cm9sCitub2RlIGFsc28gcHJvdmlkZXMgdGhlIHJlc2V0LiBUaGUgcmVnaXN0ZXIgc2V0IGlzIG5vdCBhdCB0aGUgc2FtZSBvZmZzZXQgYmV0d2VlbgorQmVybGluIFNvQ3MuCisKK1JlcXVpcmVkIHByb3BlcnR5OgorLSAjcmVzZXQtY2VsbHM6IG11c3QgYmUgc2V0IHRvIDIKKwogRXhhbXBsZToKIAogY2hpcDogY2hpcC1jb250cm9sQGVhMDAwMCB7CiAJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjItY2hpcC1jdHJsIjsKIAkjY2xvY2stY2VsbHMgPSA8MT47CisJI3Jlc2V0LWNlbGxzID0gPDI+OwogCXJlZyA9IDwweGVhMDAwMCAweDQwMD47CiAJY2xvY2tzID0gPCZyZWZjbGs+LCA8JmV4dGVybmFsZGV2IDA+OwogCWNsb2NrLW5hbWVzID0gInJlZmNsayIsICJ2aWRlb19leHQwIjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWVkaWF0ZWsudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9tZWRpYXRlay50eHQKaW5kZXggZmEyNTIyNi4uM2JlNDAxMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9tZWRpYXRlay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9tZWRpYXRlay50eHQKQEAgLTEsMTAgKzEsMTQgQEAKLU1lZGlhdGVrIE1UNjU4OSBQbGF0Zm9ybXMgRGV2aWNlIFRyZWUgQmluZGluZ3MKK01lZGlhVGVrIG10NjV4eCAmIG10ODF4eCBQbGF0Zm9ybXMgRGV2aWNlIFRyZWUgQmluZGluZ3MKIAotQm9hcmRzIHdpdGggYSBTb0Mgb2YgdGhlIE1lZGlhdGVrIE1UNjU4OSBzaGFsbCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHk6CitCb2FyZHMgd2l0aCBhIE1lZGlhVGVrIG10NjV4eC9tdDgxeHggU29DIHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eToKIAogUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgogCi1jb21wYXRpYmxlOiBtdXN0IGNvbnRhaW4gIm1lZGlhdGVrLG10NjU4OSIKK2NvbXBhdGlibGU6IE11c3QgY29udGFpbiBvbmUgb2YKKyAgICJtZWRpYXRlayxtdDY1ODkiCisgICAibWVkaWF0ZWssbXQ2NTkyIgorICAgIm1lZGlhdGVrLG10ODEyNyIKKyAgICJtZWRpYXRlayxtdDgxMzUiCiAKIAogU3VwcG9ydGVkIGJvYXJkczoKQEAgLTEyLDMgKzE2LDEyIEBACiAtIGJxIEFxdWFyaXM1IHNtYXJ0IHBob25lOgogICAgIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0aWVzOgogICAgICAgLSBjb21wYXRpYmxlID0gIm11bmRvcmVhZGVyLGJxLWFxdWFyaXM1IiwgIm1lZGlhdGVrLG10NjU4OSI7CistIEV2YWx1YXRpb24gYm9hcmQgZm9yIE1UNjU5MjoKKyAgICBSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydGllczoKKyAgICAgIC0gY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1OTItZXZiIiwgIm1lZGlhdGVrLG10NjU5MiI7CistIE1USyBtdDgxMjcgdGFibGV0IG1vb3NlIEVWQjoKKyAgICBSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydGllczoKKyAgICAgIC0gY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxMjctbW9vc2UiLCAibWVkaWF0ZWssbXQ4MTI3IjsKKy0gTVRLIG10ODEzNSB0YWJsZXQgRVZCOgorICAgIFJlcXVpcmVkIHJvb3Qgbm9kZSBwcm9wZXJ0aWVzOgorICAgICAgLSBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODEzNS1ldmJwMSIsICJtZWRpYXRlayxtdDgxMzUiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9vbWFwL29tYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9vbWFwL29tYXAudHh0CmluZGV4IGRkZDliY2QuLjRmNmE4MmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vb21hcC9vbWFwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL29tYXAvb21hcC50eHQKQEAgLTEzMiw2ICsxMzIsOSBAQAogLSBBTTMzNVggQm9uZSA6IExvdyBjb3N0IGNvbW11bml0eSBib2FyZAogICBjb21wYXRpYmxlID0gInRpLGFtMzM1eC1ib25lIiwgInRpLGFtMzN4eCIsICJ0aSxvbWFwMyIKIAorLSBBTTMzNVggT3Jpb25MWG0gOiBTdWJzdGF0aW9uIEF1dG9tYXRpb24gUGxhdGZvcm0KKyAgY29tcGF0aWJsZSA9ICJub3ZhdGVjaCxhbTMzNXgtbHhtIiwgInRpLGFtMzN4eCIKKwogLSBPTUFQNSBFVk0gOiBFdmFsdWF0aW9uIE1vZHVsZQogICBjb21wYXRpYmxlID0gInRpLG9tYXA1LWV2bSIsICJ0aSxvbWFwNSIKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9yb2NrY2hpcC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3JvY2tjaGlwLnR4dAppbmRleCA4NTdmMTI2Li5lYWEzZDFhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3JvY2tjaGlwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3JvY2tjaGlwLnR4dApAQCAtMSw2ICsxLDEwIEBACiBSb2NrY2hpcCBwbGF0Zm9ybXMgZGV2aWNlIHRyZWUgYmluZGluZ3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCistIE1hcnNCb2FyZCBSSzMwNjYgYm9hcmQ6CisgICAgUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnRpZXM6CisgICAgICAtIGNvbXBhdGlibGUgPSAiaGFveXUsbWFyc2JvYXJkLXJrMzA2NiIsICJyb2NrY2hpcCxyazMwNjZhIjsKKwogLSBicSBDdXJpZSAyIHRhYmxldDoKICAgICBSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydGllczoKICAgICAgIC0gY29tcGF0aWJsZSA9ICJtdW5kb3JlYWRlcixicS1jdXJpZTIiLCAicm9ja2NoaXAscmszMDY2YSI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3NhbXN1bmctYm9hcmRzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc2Ftc3VuZy1ib2FyZHMudHh0CmluZGV4IDIxNjhlZDMuLjQzNTg5ZDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc2Ftc3VuZy1ib2FyZHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc2Ftc3VuZy1ib2FyZHMudHh0CkBAIC0xLDExICsxLDIwIEBACi0qIFNhbXN1bmcncyBFeHlub3M0MjEwIGJhc2VkIFNNREtWMzEwIGV2YWx1YXRpb24gYm9hcmQKLQotU01ES1YzMTAgZXZhbHVhdGlvbiBib2FyZCBpcyBiYXNlZCBvbiBTYW1zdW5nJ3MgRXh5bm9zNDIxMCBTb0MuCisqIFNhbXN1bmcncyBFeHlub3MgU29DIGJhc2VkIGJvYXJkcwogCiBSZXF1aXJlZCByb290IG5vZGUgcHJvcGVydGllczoKICAgICAtIGNvbXBhdGlibGUgPSBzaG91bGQgYmUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZy4KLSAgICAgICAgKGEpICJzYW1zdW5nLHNtZGt2MzEwIiAtIGZvciBTYW1zdW5nJ3MgU01ES1YzMTAgZXZhbCBib2FyZC4KLSAgICAgICAgKGIpICJzYW1zdW5nLGV4eW5vczQyMTAiICAtIGZvciBib2FyZHMgYmFzZWQgb24gRXh5bm9zNDIxMCBTb0MuCisJLSAic2Ftc3VuZyxtb25rIgktIGZvciBFeHlub3MzMjUwLWJhc2VkIFNhbXN1bmcgU2ltYmFuZCBib2FyZC4KKwktICJzYW1zdW5nLHJpbmF0byIJLSBmb3IgRXh5bm9zMzI1MC1iYXNlZCBTYW1zdW5nIEdlYXIyIGJvYXJkLgorCS0gInNhbXN1bmcsc21ka3YzMTAiCS0gZm9yIEV4eW5vczQyMTAtYmFzZWQgU2Ftc3VuZyBTTURLVjMxMCBldmFsIGJvYXJkLgorCS0gInNhbXN1bmcsdHJhdHMiCS0gZm9yIEV4eW5vczQyMTAtYmFzZWQgVGl6ZW4gUmVmZXJlbmNlIGJvYXJkLgorCS0gInNhbXN1bmcsdW5pdmVyc2FsX2MyMTAiIC0gZm9yIEV4eW5vczQyMTAtYmFzZWQgU2Ftc3VuZyBib2FyZC4KKwktICJzYW1zdW5nLHNtZGs0NDEyIiwJLSBmb3IgRXh5bm9zNDQxMi1iYXNlZCBTYW1zdW5nIFNNREs0NDEyIGV2YWwgYm9hcmQuCisJLSAic2Ftc3VuZyx0cmF0czIiCS0gZm9yIEV4eW5vczQ0MTItYmFzZWQgVGl6ZW4gUmVmZXJlbmNlIGJvYXJkLgorCS0gInNhbXN1bmcsc21kazUyNTAiCS0gZm9yIEV4eW5vczUyNTAtYmFzZWQgU2Ftc3VuZyBTTURLNTI1MCBldmFsIGJvYXJkLgorCS0gInNhbXN1bmcseHlyZWY1MjYwIgktIGZvciBFeHlub3M1MjYwLWJhc2VkIFNhbXN1bmcgYm9hcmQuCisJLSAic2Ftc3VuZyxzbWRrNTQxMCIJLSBmb3IgRXh5bm9zNTQxMC1iYXNlZCBTYW1zdW5nIFNNREs1NDEwIGV2YWwgYm9hcmQuCisJLSAic2Ftc3VuZyxzbWRrNTQyMCIJLSBmb3IgRXh5bm9zNTQyMC1iYXNlZCBTYW1zdW5nIFNNREs1NDIwIGV2YWwgYm9hcmQuCisJLSAic2Ftc3VuZyxzZDV2MSIJLSBmb3IgRXh5bm9zNTQ0MC1iYXNlZCBTYW1zdW5nIGJvYXJkLgorCS0gInNhbXN1bmcsc3NkazU0NDAiCS0gZm9yIEV4eW5vczU0NDAtYmFzZWQgU2Ftc3VuZyBib2FyZC4KIAogT3B0aW9uYWw6CiAgICAgLSBmaXJtd2FyZSBub2RlLCBzcGVjaWZ5aW5nIHByZXNlbmNlIGFuZCB0eXBlIG9mIHNlY3VyZSBmaXJtd2FyZToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vc3RlLW5vbWFkaWsudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9zdGUtbm9tYWRpay50eHQKaW5kZXggNjI1NmVjMy4uMmZkZmY1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9zdGUtbm9tYWRpay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9zdGUtbm9tYWRpay50eHQKQEAgLTEwLDYgKzEwLDEyIEBACiAKIEJvYXJkcyB3aXRoIHRoZSBOb21hZGlrIFNvQyBpbmNsdWRlOgogCitOb21hZGlrIE5ISy0xNSBib2FyZCBtYW51ZmFjdHVyZWQgYnkgU1QgTWljcm9lbGVjdHJvbmljczoKKworUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgorCitjb21wYXRpYmxlPSJzdCxub21hZGlrLW5oay0xNSI7CisKIFM4ODE1ICJNaW5pS2l0IiBtYW51ZmFjdHVyZWQgYnkgQ2FsYW8gU3lzdGVtczoKIAogUmVxdWlyZWQgcm9vdCBub2RlIHByb3BlcnR5OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9zdW54aS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3N1bnhpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjk0MWZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9zdW54aS50eHQKQEAgLTAsMCArMSwxMiBAQAorQWxsd2lubmVyIHN1blhpIFBsYXRmb3JtcyBEZXZpY2UgVHJlZSBCaW5kaW5ncworCitFYWNoIGRldmljZSB0cmVlIG11c3Qgc3BlY2lmeSB3aGljaCBBbGx3aW5uZXIgU29DIGl0IHVzZXMsCit1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb21wYXRpYmxlIHN0cmluZ3M6CisKKyAgYWxsd2lubmVyLHN1bjRpLWExMAorICBhbGx3aW5uZXIsc3VuNWktYTEwcworICBhbGx3aW5uZXIsc3VuNWktYTEzCisgIGFsbHdpbm5lcixzdW42aS1hMzEKKyAgYWxsd2lubmVyLHN1bjdpLWEyMAorICBhbGx3aW5uZXIsc3VuOGktYTIzCisgIGFsbHdpbm5lcixzdW45aS1hODAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vdXg1MDAvcG93ZXJfZG9tYWluLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vdXg1MDAvcG93ZXJfZG9tYWluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njc5ZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS91eDUwMC9wb3dlcl9kb21haW4udHh0CkBAIC0wLDAgKzEsMzUgQEAKKyogU1QtRXJpY3Nzb24gVVg1MDAgUE0gRG9tYWlucworCitVWDUwMCBzdXBwb3J0cyBtdWx0aXBsZSBQTSBkb21haW5zIHdoaWNoIGFyZSB1c2VkIHRvIGdhdGUgcG93ZXIgdG8gb25lIG9yCittb3JlIHBlcmlwaGVyYWxzIG9uIHRoZSBTT0MuCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBvZiBQTSBkb21haW5zIGZvciBVWDUwMCBhcmUgYmFzZWQgdXBvbiB0aGUgZ2VuZXJpYyBQTSBkb21haW4KK2FuZCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgRFQgYmluZGluZ3MuCisKKz09UE0gZG9tYWluIHByb3ZpZGVycz09CisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisgLSBjb21wYXRpYmxlOiBNdXN0IGJlICJzdGVyaWNzc29uLHV4NTAwLXBtLWRvbWFpbnMiLgorIC0gI3Bvd2VyLWRvbWFpbi1jZWxscyA6IE51bWJlciBvZiBjZWxscyBpbiBhIHBvd2VyIGRvbWFpbiBzcGVjaWZpZXIsIG11c3QgYmUgMS4KKworRXhhbXBsZToKKwlwbV9kb21haW5zOiBwbV9kb21haW5zMCB7CisJCWNvbXBhdGlibGUgPSAic3Rlcmljc3Nvbix1eDUwMC1wbS1kb21haW5zIjsKKwkJI3Bvd2VyLWRvbWFpbi1jZWxscyA9IDwxPjsKKwl9OworCis9PVBNIGRvbWFpbiBjb25zdW1lcnM9PQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorIC0gcG93ZXItZG9tYWluczogQSBwaGFuZGxlIGFuZCBQTSBkb21haW4gc3BlY2lmaWVyLiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YKKwkJdmFsaWQgc3BlY2lmaWVyczoKKworCQlJbmRleAlTcGVjaWZpZXIKKwkJLS0tLS0JLS0tLS0tLS0tCisJCTAJRE9NQUlOX1ZBUEUKKworRXhhbXBsZToKKwlzZGkwX3BlcjFAODAxMjYwMDAgeworCQljb21wYXRpYmxlID0gImFybSxwbDE4eCIsICJhcm0scHJpbWVjZWxsIjsKKwkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT4KKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2J1cy9icmNtLGdpc2ItYXJiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvYnJjbSxnaXNiLWFyYi50eHQKaW5kZXggZTJkNTAxZC4uMWVjZWVmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2J1cy9icmNtLGdpc2ItYXJiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL2JyY20sZ2lzYi1hcmIudHh0CkBAIC0yLDcgKzIsMTEgQEAKIAogUmVxdWlyZWQgcHJvcGVydGllczoKIAotLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgImJyY20sZ2lzYi1hcmIiCistIGNvbXBhdGlibGU6CisgICAgImJyY20sZ2lzYi1hcmIiIG9yICJicmNtLGJjbTc0NDUtZ2lzYi1hcmIiIGZvciAyOG5tIGNoaXBzCisgICAgImJyY20sYmNtNzQzNS1naXNiLWFyYiIgZm9yIG5ld2VyIDQwbm0gY2hpcHMKKyAgICAiYnJjbSxiY203NDAwLWdpc2ItYXJiIiBmb3Igb2xkZXIgNDBubSBjaGlwcyBhbmQgYWxsIDY1bm0gY2hpcHMKKyAgICAiYnJjbSxiY203MDM4LWdpc2ItYXJiIiBmb3IgMTMwbm0gY2hpcHMKIC0gcmVnOiBzcGVjaWZpZXMgdGhlIGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgcmVnaXN0ZXJzCiAtIGludGVycnVwdC1wYXJlbnQ6IHNwZWNpZmllcyB0aGUgcGhhbmRsZSB0byB0aGUgcGFyZW50IGludGVycnVwdCBjb250cm9sbGVyCiAgIHRoaXMgYXJiaXRlciBnZXRzIGludGVycnVwdCBsaW5lIGZyb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvbXZlYnUtbWJ1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYnVzL212ZWJ1LW1idXMudHh0CmluZGV4IDVmYTQ0ZjUuLjVlMTZjM2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9idXMvbXZlYnUtbWJ1cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2J1cy9tdmVidS1tYnVzLnR4dApAQCAtNDgsOSArNDgsMTIgQEAKIC0gY29tcGF0aWJsZToJU2hvdWxkIGJlIHNldCB0byAibWFydmVsbCxtYnVzLWNvbnRyb2xsZXIiLgogCiAtIHJlZzogICAgICAgICAgRGV2aWNlJ3MgcmVnaXN0ZXIgc3BhY2UuCi0JCVR3byBlbnRyaWVzIGFyZSBleHBlY3RlZCAoc2VlIHRoZSBleGFtcGxlcyBiZWxvdyk6Ci0JCXRoZSBmaXJzdCBvbmUgY29udHJvbHMgdGhlIGRldmljZXMgZGVjb2Rpbmcgd2luZG93IGFuZAotCQl0aGUgc2Vjb25kIG9uZSBjb250cm9scyB0aGUgU0RSQU0gZGVjb2Rpbmcgd2luZG93LgorCQlUd28gb3IgdGhyZWUgZW50cmllcyBhcmUgZXhwZWN0ZWQgKHNlZSB0aGUgZXhhbXBsZXMgYmVsb3cpOgorCQl0aGUgZmlyc3Qgb25lIGNvbnRyb2xzIHRoZSBkZXZpY2VzIGRlY29kaW5nIHdpbmRvdywKKwkJdGhlIHNlY29uZCBvbmUgY29udHJvbHMgdGhlIFNEUkFNIGRlY29kaW5nIHdpbmRvdyBhbmQKKwkJdGhlIHRoaXJkIGNvbnRyb2xzIHRoZSBNQnVzIGJyaWRnZSAob25seSB3aXRoIHRoZQorCQltYXJ2ZWxsLGFybWFkYTM3MC1tYnVzIGFuZCBtYXJ2ZWxsLGFybWFkYXhwLW1idXMKKwkJY29tcGF0aWJsZSBzdHJpbmdzKQogCiBFeGFtcGxlOgogCkBAIC02Nyw3ICs3MCw3IEBACiAKIAkJCW1idXNjOiBtYnVzLWNvbnRyb2xsZXJAMjAwMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtYnVzLWNvbnRyb2xsZXIiOwotCQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwPiwgPDB4MjAxODAgMHgyMD47CisJCQkJcmVnID0gPDB4MjAwMDAgMHgxMDA+LCA8MHgyMDE4MCAweDIwPiwgPDB4MjAyNTAgMHg4PjsKIAkJCX07CiAKIAkJCS8qIG1vcmUgY2hpbGRyZW4gLi4uKi8KQEAgLTEyNiw3ICsxMjksNyBAQAogCiAJCQltYnVzYzogbWJ1cy1jb250cm9sbGVyQDIwMDAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbWJ1cy1jb250cm9sbGVyIjsKLQkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+OworCQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwPiwgPDB4MjAxODAgMHgyMD4sIDwweDIwMjUwIDB4OD47CiAJCQl9OwogCiAJCQkvKiBtb3JlIGNoaWxkcmVuIC4uLiovCkBAIC0xNzAsNyArMTczLDcgQEAKIAogCQkJbWJ1c2M6IG1idXMtY29udHJvbGxlckAyMDAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG1idXMtY29udHJvbGxlciI7Ci0JCQkJcmVnID0gPDB4MjAwMDAgMHgxMDA+LCA8MHgyMDE4MCAweDIwPjsKKwkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+LCA8MHgyMDI1MCAweDg+OwogCQkJfTsKIAogCQkJLyogb3RoZXIgY2hpbGRyZW4gKi8KQEAgLTI2Niw3ICsyNjksNyBAQAogCQkJcmFuZ2VzID0gPDAgTUJVU19JRCgweGYwLCAweDAxKSAwIDB4MTAwMDAwPjsKIAogCQkJbWJ1c2M6IG1idXMtY29udHJvbGxlckAyMDAwMCB7Ci0JCQkJcmVnID0gPDB4MjAwMDAgMHgxMDA+LCA8MHgyMDE4MCAweDIwPjsKKwkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+LCA8MHgyMDI1MCAweDg+OwogCQkJfTsKIAogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXJAMjAwMDAgewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2JjbS1jeWdudXMtY2xvY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2JjbS1jeWdudXMtY2xvY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZDI2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svYmNtLWN5Z251cy1jbG9jay50eHQKQEAgLTAsMCArMSwzNCBAQAorQnJvYWRjb20gQ3lnbnVzIENsb2NrcworCitUaGlzIGJpbmRpbmcgdXNlcyB0aGUgY29tbW9uIGNsb2NrIGJpbmRpbmc6CitEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svY2xvY2stYmluZGluZ3MudHh0CisKK0N1cnJlbnRseSB2YXJpb3VzICJmaXhlZCIgY2xvY2tzIGFyZSBkZWNsYXJlZCBmb3IgcGVyaXBoZXJhbCBkcml2ZXJzIHRoYXQgdXNlCit0aGUgY29tbW9uIGNsb2NrIGZyYW1ld29yayB0byByZWZlcmVuY2UgdGhlaXIgY29yZSBjbG9ja3MuIFByb3BlciBzdXBwb3J0IG9mCit0aGVzZSBjbG9ja3Mgd2lsbCBiZSBhZGRlZCBsYXRlcgorCitEZXZpY2UgdHJlZSBleGFtcGxlOgorCisJY2xvY2tzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJb3NjOiBvc2NpbGxhdG9yIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKKwkJfTsKKworCQlhcGJfY2xrOiBhcGJfY2xrIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMDA+OworCQl9OworCisJCXBlcmlwaF9jbGs6IHBlcmlwaF9jbGsgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDAwPjsKKwkJfTsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay92ZjYxMC1jbG9jay50eHQKaW5kZXggYzgwODYzZC4uNjNmOWYxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svdmY2MTAtY2xvY2sudHh0CkBAIC01LDYgKzUsMTkgQEAKIC0gcmVnOiBBZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldAogLSAjY2xvY2stY2VsbHM6IFNob3VsZCBiZSA8MT4KIAorT3B0aW9uYWwgcHJvcGVydGllczoKKy0gY2xvY2tzOiBsaXN0IG9mIGNsb2NrIGlkZW50aWZpZXJzIHdoaWNoIGFyZSBleHRlcm5hbCBpbnB1dCBjbG9ja3MgdG8gdGhlCisJZ2l2ZW4gY2xvY2sgY29udHJvbGxlci4gUGxlYXNlIHJlZmVyIHRoZSBuZXh0IHNlY3Rpb24gdG8gZmluZAorCXRoZSBpbnB1dCBjbG9ja3MgZm9yIGEgZ2l2ZW4gY29udHJvbGxlci4KKy0gY2xvY2stbmFtZXM6IGxpc3Qgb2YgbmFtZXMgb2YgY2xvY2tzIHdoaWNoIGFyZSBleHRlcmFsIGlucHV0IGNsb2NrcyB0byB0aGUKKwlnaXZlbiBjbG9jayBjb250cm9sbGVyLgorCitJbnB1dCBjbG9ja3MgZm9yIHRvcCBjbG9jayBjb250cm9sbGVyOgorCS0gc3hvc2MgKGV4dGVybmFsIGNyeXN0YWwgb3NjaWxsYXRvciAzMktIeiwgcmVjb21tZW5kZWQpCisJLSBmeG9zYyAoZXh0ZXJuYWwgY3J5c3RhbCBvc2NpbGxhdG9yIDI0TUh6LCByZWNvbW1lbmRlZCkKKwktIGF1ZGlvX2V4dAorCS0gZW5ldF9leHQKKwogVGhlIGNsb2NrIGNvbnN1bWVyIHNob3VsZCBzcGVjaWZ5IHRoZSBkZXNpcmVkIGNsb2NrIGJ5IGhhdmluZyB0aGUgY2xvY2sKIElEIGluIGl0cyAiY2xvY2tzIiBwaGFuZGxlIGNlbGwuIFNlZSBpbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLmgKIGZvciB0aGUgZnVsbCBsaXN0IG9mIFZGNjEwIGNsb2NrIElEcy4KQEAgLTE1LDYgKzI4LDggQEAKIAljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1jY20iOwogCXJlZyA9IDwweDQwMDZiMDAwIDB4MTAwMD47CiAJI2Nsb2NrLWNlbGxzID0gPDE+OworCWNsb2NrcyA9IDwmc3hvc2M+LCA8JmZ4b3NjPjsKKwljbG9jay1uYW1lcyA9ICJzeG9zYyIsICJmeG9zYyI7CiB9OwogCiB1YXJ0MTogc2VyaWFsQDQwMDI4MDAwIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kbWEveGlsaW54L3hpbGlueF92ZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kbWEveGlsaW54L3hpbGlueF92ZG1hLnR4dAppbmRleCAxNDA1ZWQwLi5lNGM0ZDQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL3hpbGlueC94aWxpbnhfdmRtYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2RtYS94aWxpbngveGlsaW54X3ZkbWEudHh0CkBAIC0yNSw3ICsyNSw3IEBACiAtIGNvbXBhdGlibGU6IEl0IHNob3VsZCBiZSBlaXRoZXIgInhsbngsYXhpLXZkbWEtbW0ycy1jaGFubmVsIiBvcgogCSJ4bG54LGF4aS12ZG1hLXMybW0tY2hhbm5lbCIuCiAtIGludGVycnVwdHM6IFNob3VsZCBjb250YWluIHBlciBjaGFubmVsIFZETUEgaW50ZXJydXB0cy4KLS0geGxueCxkYXRhLXdpZHRoOiBTaG91bGQgY29udGFpbiB0aGUgc3RyZWFtIGRhdGEgd2lkdGgsIHRha2UgdmFsdWVzCistIHhsbngsZGF0YXdpZHRoOiBTaG91bGQgY29udGFpbiB0aGUgc3RyZWFtIGRhdGEgd2lkdGgsIHRha2UgdmFsdWVzCiAJezMyLDY0Li4uMTAyNH0uCiAKIE9wdGlvbmFsIGNoaWxkIG5vZGUgcHJvcGVydGllczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9od21vbi9sdGMyOTc4LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9od21vbi9sdGMyOTc4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDJmMDlkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2h3bW9uL2x0YzI5NzgudHh0CkBAIC0wLDAgKzEsMzkgQEAKK2x0YzI5NzgKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogc2hvdWxkIGNvbnRhaW4gb25lIG9mOgorICAqICJsbHRjLGx0YzI5NzQiCisgICogImxsdGMsbHRjMjk3NyIKKyAgKiAibGx0YyxsdGMyOTc4IgorICAqICJsbHRjLGx0YzM4ODAiCisgICogImxsdGMsbHRjMzg4MyIKKyAgKiAibGx0YyxsdG00Njc2IgorLSByZWc6IEkyQyBzbGF2ZSBhZGRyZXNzCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIHJlZ3VsYXRvcnM6IEEgbm9kZSB0aGF0IGhvdXNlcyBhIHN1Yi1ub2RlIGZvciBlYWNoIHJlZ3VsYXRvciBjb250cm9sbGVkIGJ5CisgIHRoZSBkZXZpY2UuIEVhY2ggc3ViLW5vZGUgaXMgaWRlbnRpZmllZCB1c2luZyB0aGUgbm9kZSdzIG5hbWUsIHdpdGggdmFsaWQKKyAgdmFsdWVzIGxpc3RlZCBiZWxvdy4gVGhlIGNvbnRlbnQgb2YgZWFjaCBzdWItbm9kZSBpcyBkZWZpbmVkIGJ5IHRoZQorICBzdGFuZGFyZCBiaW5kaW5nIGZvciByZWd1bGF0b3JzOyBzZWUgcmVndWxhdG9yLnR4dC4KKworVmFsaWQgbmFtZXMgb2YgcmVndWxhdG9ycyBkZXBlbmQgb24gbnVtYmVyIG9mIHN1cHBsaWVzIHN1cHBvcnRlZCBwZXIgZGV2aWNlOgorICAqIGx0YzI5NzQgOiB2b3V0MCAtIHZvdXQzCisgICogbHRjMjk3NyA6IHZvdXQwIC0gdm91dDcKKyAgKiBsdGMyOTc4IDogdm91dDAgLSB2b3V0NworICAqIGx0YzM4ODAgOiB2b3V0MCAtIHZvdXQxCisgICogbHRjMzg4MyA6IHZvdXQwCisgICogbHRtNDY3NiA6IHZvdXQwIC0gdm91dDEKKworRXhhbXBsZToKK2x0YzI5NzhANWUgeworCWNvbXBhdGlibGUgPSAibGx0YyxsdGMyOTc4IjsKKwlyZWcgPSA8MHg1ZT47CisJcmVndWxhdG9ycyB7CisJCXZvdXQwIHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIkZQR0EtMi41ViI7CisJCX07CisJCXZvdXQyIHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIkZQR0EtMS41ViI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2kyYy1zM2MyNDEwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXMzYzI0MTAudHh0CmluZGV4IDI3OGRlOGUuLjg5YjMyNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXMzYzI0MTAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXMzYzI0MTAudHh0CkBAIC0zMiw2ICszMiw3IEBACiAgICAgc3BlY2lmaWVkLCBkZWZhdWx0IHZhbHVlIGlzIDAuCiAgIC0gc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxOiBEZXNpcmVkIGZyZXF1ZW5jeSBpbiBIeiBvZiB0aGUgYnVzLiBJZiBub3QKICAgICBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGluIEh6IGlzIDEwMDAwMC4KKyAgLSBzYW1zdW5nLHN5c3JlZy1waGFuZGxlIC0gaGFuZGxlIHRvIHN5c2NvbiB1c2VkIHRvIGNvbnRyb2wgdGhlIHN5c3RlbSByZWdpc3RlcnMKIAogRXhhbXBsZToKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0CmluZGV4IGZiZGU0MTUuLjYwNWRjY2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2aWNlcy50eHQKQEAgLTU2LDYgKzU2LDggQEAKIGluZmluZW9uLHNsYjk2MzV0dAlJbmZpbmVvbiBTTEI5NjM1IChTb2Z0LSkgSTJDIFRQTSAob2xkIHByb3RvY29sLCBtYXggMTAwa2h6KQogaW5maW5lb24sc2xiOTY0NXR0CUluZmluZW9uIFNMQjk2NDUgSTJDIFRQTSAobmV3IHByb3RvY29sLCBtYXggNDAwa2h6KQogaXNsLGlzbDEyMDU3CQlJbnRlcnNpbCBJU0wxMjA1NyBJMkMgUlRDIENoaXAKK2lzaWwsaXNsMjkwMjggICAgICAgICAgIChkZXByZWNhdGVkLCB1c2UgaXNsKQoraXNsLGlzbDI5MDI4ICAgICAgICAgICAgSW50ZXJzaWwgSVNMMjkwMjggQW1iaWVudCBMaWdodCBhbmQgUHJveGltaXR5IFNlbnNvcgogbWF4aW0sZHMxMDUwCQk1IEJpdCBQcm9ncmFtbWFibGUsIFB1bHNlLVdpZHRoIE1vZHVsYXRvcgogbWF4aW0sbWF4MTIzNwkJTG93LVBvd2VyLCA0LS8xMi1DaGFubmVsLCAyLVdpcmUgU2VyaWFsLCAxMi1CaXQgQURDcwogbWF4aW0sbWF4NjYyNQkJOS1CaXQvMTItQml0IFRlbXBlcmF0dXJlIFNlbnNvcnMgd2l0aCBJwrJDLUNvbXBhdGlibGUgU2VyaWFsIEludGVyZmFjZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2JyY20sYmNtNzEyMC1sMi1pbnRjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9icmNtLGJjbTcxMjAtbDItaW50Yy50eHQKaW5kZXggZmY4MTJhOC4uYmFlMWYyMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2JyY20sYmNtNzEyMC1sMi1pbnRjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYnJjbSxiY203MTIwLWwyLWludGMudHh0CkBAIC0xMyw3ICsxMywxMiBAQAogICBvciBpZiB0aGV5IHdpbGwgb3V0cHV0IGFuIGludGVycnVwdCBzaWduYWwgYXQgdGhpcyAybmQgbGV2ZWwgaW50ZXJydXB0CiAgIGNvbnRyb2xsZXIsIGluIHBhcnRpY3VsYXIgZm9yIFVBUlRzCiAKLS0gbm90IGFsbCAzMi1iaXRzIHdpdGhpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgYWN0dWFsbHkgbWFwIHRvIGFuIGludGVycnVwdAorLSB0eXBpY2FsbHkgaGFzIG9uZSAzMi1iaXQgZW5hYmxlIHdvcmQgYW5kIG9uZSAzMi1iaXQgc3RhdHVzIHdvcmQsIGJ1dCBvbgorICBzb21lIGhhcmR3YXJlIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgZW5hYmxlL3N0YXR1cyBwYWlyCisKKy0gbm8gYXRvbWljIHNldC9jbGVhciBvcGVyYXRpb25zCisKKy0gbm90IGFsbCBiaXRzIHdpdGhpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgYWN0dWFsbHkgbWFwIHRvIGFuIGludGVycnVwdAogCiBUaGUgdHlwaWNhbCBoYXJkd2FyZSBsYXlvdXQgZm9yIHRoaXMgY29udHJvbGxlciBpcyByZXByZXNlbnRlZCBiZWxvdzoKIApAQCAtNDgsNyArNTMsOSBAQAogUmVxdWlyZWQgcHJvcGVydGllczoKIAogLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgImJyY20sYmNtNzEyMC1sMi1pbnRjIgotLSByZWc6IHNwZWNpZmllcyB0aGUgYmFzZSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSByZWdpc3RlcnMKKy0gcmVnOiBzcGVjaWZpZXMgdGhlIGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgcmVnaXN0ZXJzOworICBtdWx0aXBsZSBwYWlycyBtYXkgYmUgc3BlY2lmaWVkLCB3aXRoIHRoZSBmaXJzdCBwYWlyIGhhbmRsaW5nIElSUSBvZmZzZXRzCisgIDAuLjMxIGFuZCB0aGUgc2Vjb25kIHBhaXIgaGFuZGxpbmcgMzIuLjYzCiAtIGludGVycnVwdC1jb250cm9sbGVyOiBpZGVudGlmaWVzIHRoZSBub2RlIGFzIGFuIGludGVycnVwdCBjb250cm9sbGVyCiAtICNpbnRlcnJ1cHQtY2VsbHM6IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNlbGxzIG5lZWRlZCB0byBlbmNvZGUgYW4gaW50ZXJydXB0CiAgIHNvdXJjZSwgc2hvdWxkIGJlIDEuCkBAIC01OSwxOCArNjYsMjEgQEAKIC0gYnJjbSxpbnQtbWFwLW1hc2s6IDMyLWJpdHMgYml0IG1hc2sgZGVzY3JpYmluZyBob3cgbWFueSBhbmQgd2hpY2ggaW50ZXJydXB0cwogICBhcmUgd2lyZWQgdG8gdGhpcyAybmQgbGV2ZWwgaW50ZXJydXB0IGNvbnRyb2xsZXIsIGFuZCBob3cgdGhleSBtYXRjaCB0aGVpcgogICByZXNwZWN0aXZlIGludGVycnVwdCBwYXJlbnRzLiBTaG91bGQgbWF0Y2ggZXhhY3RseSB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMKLSAgc3BlY2lmaWVkIGluIHRoZSAnaW50ZXJydXB0cycgcHJvcGVydHkuCisgIHNwZWNpZmllZCBpbiB0aGUgJ2ludGVycnVwdHMnIHByb3BlcnR5LCBtdWx0aXBsaWVkIGJ5IHRoZSBudW1iZXIgb2YKKyAgZW5hYmxlL3N0YXR1cyByZWdpc3RlciBwYWlycyBpbXBsZW1lbnRlZCBieSB0aGlzIGNvbnRyb2xsZXIuICBGb3IKKyAgbXVsdGlwbGUgcGFyZW50IElSUXMgd2l0aCBtdWx0aXBsZSBlbmFibGUvc3RhdHVzIHdvcmRzLCB0aGlzIGxvb2tzIGxpa2U6CisgIDxpcnEwX3cwIGlycTBfdzEgaXJxMV93MCBpcnExX3cxIC4uLj4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKIAogLSBicmNtLGlycS1jYW4td2FrZTogaWYgcHJlc2VudCwgdGhpcyBtZWFucyB0aGUgTDIgY29udHJvbGxlciBjYW4gYmUgdXNlZCBhcyBhCiAgIHdha2V1cCBzb3VyY2UgZm9yIHN5c3RlbSBzdXNwZW5kL3Jlc3VtZS4KIAotLSBicmNtLGludC1md2QtbWFzazogaWYgcHJlc2VudCwgYSAzMi1iaXRzIGJpdCBtYXNrIHRvIGNvbmZpZ3VyZSBmb3IgdGhlCi0gIGludGVycnVwdHMgd2hpY2ggaGF2ZSBhIG11eCBnYXRlLCB0eXBpY2FsbHkgVUFSVHMuIFNldHRpbmcgdGhlc2UgYml0cyB3aWxsCi0gIG1ha2UgdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcnJ1cHRzIG91dHB1dHMgYnlwYXNzIHRoaXMgMm5kIGxldmVsIGludGVycnVwdAotICBjb250cm9sbGVyIGNvbXBsZXRlbHksIGl0IGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgotICBwYXJlbnQKKy0gYnJjbSxpbnQtZndkLW1hc2s6IGlmIHByZXNlbnQsIGEgYml0IG1hc2sgdG8gY29uZmlndXJlIHRoZSBpbnRlcnJ1cHRzIHdoaWNoCisgIGhhdmUgYSBtdXggZ2F0ZSwgdHlwaWNhbGx5IFVBUlRzLiBTZXR0aW5nIHRoZXNlIGJpdHMgd2lsbCBtYWtlIHRoZWlyCisgIHJlc3BlY3RpdmUgaW50ZXJydXB0IG91dHB1dHMgYnlwYXNzIHRoaXMgMm5kIGxldmVsIGludGVycnVwdCBjb250cm9sbGVyCisgIGNvbXBsZXRlbHk7IGl0IGlzIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICBwYXJlbnQuIFRoaXMgc2hvdWxkIGhhdmUgb25lIDMyLWJpdCB3b3JkIHBlciBlbmFibGUvc3RhdHVzIHBhaXIuCiAKIEV4YW1wbGU6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZW1vcnktY29udHJvbGxlcnMvbXZlYnUtc2RyYW0tY29udHJvbGxlci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVtb3J5LWNvbnRyb2xsZXJzL212ZWJ1LXNkcmFtLWNvbnRyb2xsZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NjU3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVtb3J5LWNvbnRyb2xsZXJzL212ZWJ1LXNkcmFtLWNvbnRyb2xsZXIudHh0CkBAIC0wLDAgKzEsMjEgQEAKK0RldmljZSBUcmVlIGJpbmRpbmdzIGZvciBNVkVCVSBTRFJBTSBjb250cm9sbGVycworCitUaGUgTWFydmVsbCBFQlUgU29DcyBhbGwgaGF2ZSBhIFNEUkFNIGNvbnRyb2xsZXIuIFRoZSBTRFJBTSBjb250cm9sbGVyCitkaWZmZXJzIGZyb20gb25lIFNvQyB2YXJpYW50IHRvIGFub3RoZXIsIGJ1dCB0aGV5IGFsc28gc2hhcmUgYSBudW1iZXIKK29mIGNvbW1vbmFsaXRpZXMuCisKK0ZvciBub3csIHRoaXMgRGV2aWNlIFRyZWUgYmluZGluZyBkb2N1bWVudGF0aW9uIG9ubHkgZG9jdW1lbnRzIHRoZQorQXJtYWRhIFhQIFNEUkFNIGNvbnRyb2xsZXIuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAtIGNvbXBhdGlibGU6IGZvciBBcm1hZGEgWFAsICJtYXJ2ZWxsLGFybWFkYS14cC1zZHJhbS1jb250cm9sbGVyIgorIC0gcmVnOiBhIHJlc291cmNlIHNwZWNpZmllciBmb3IgdGhlIHJlZ2lzdGVyIHNwYWNlLCB3aGljaCBzaG91bGQKKyAgIGluY2x1ZGUgYWxsIFNEUkFNIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGFzIHBlciB0aGUgZGF0YXNoZWV0LgorCitFeGFtcGxlOgorCitzZHJhbWNAMTQwMCB7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS14cC1zZHJhbS1jb250cm9sbGVyIjsKKwlyZWcgPSA8MHgxNDAwIDB4NTAwPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVtb3J5LWNvbnRyb2xsZXJzL252aWRpYSx0ZWdyYS1tYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVtb3J5LWNvbnRyb2xsZXJzL252aWRpYSx0ZWdyYS1tYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNkYjkzYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZW1vcnktY29udHJvbGxlcnMvbnZpZGlhLHRlZ3JhLW1jLnR4dApAQCAtMCwwICsxLDM2IEBACitOVklESUEgVGVncmEgTWVtb3J5IENvbnRyb2xsZXIgZGV2aWNlIHRyZWUgYmluZGluZ3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgIm52aWRpYSx0ZWdyYTxjaGlwPi1tYyIKKy0gcmVnOiBQaHlzaWNhbCBiYXNlIGFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgY29udHJvbGxlcidzIHJlZ2lzdGVycy4KKy0gY2xvY2tzOiBNdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIGVhY2ggZW50cnkgaW4gY2xvY2stbmFtZXMuCisgIFNlZSAuLi9jbG9ja3MvY2xvY2stYmluZGluZ3MudHh0IGZvciBkZXRhaWxzLgorLSBjbG9jay1uYW1lczogTXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZW50cmllczoKKyAgLSBtYzogdGhlIG1vZHVsZSdzIGNsb2NrIGlucHV0CistIGludGVycnVwdHM6IFRoZSBpbnRlcnJ1cHQgb3V0cHV0cyBmcm9tIHRoZSBjb250cm9sbGVyLgorLSAjaW9tbXUtY2VsbHM6IFNob3VsZCBiZSAxLiBUaGUgc2luZ2xlIGNlbGwgb2YgdGhlIElPTU1VIHNwZWNpZmllciBkZWZpbmVzCisgIHRoZSBTV0dST1VQIG9mIHRoZSBtYXN0ZXIuCisKK1RoaXMgZGV2aWNlIGltcGxlbWVudHMgYW4gSU9NTVUgdGhhdCBjb21wbGllcyB3aXRoIHRoZSBnZW5lcmljIElPTU1VIGJpbmRpbmcuCitTZWUgLi4vaW9tbXUvaW9tbXUudHh0IGZvciBkZXRhaWxzLgorCitFeGFtcGxlOgorLS0tLS0tLS0KKworCW1jOiBtZW1vcnktY29udHJvbGxlckAwLDcwMDE5MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmExMjQtbWMiOworCQlyZWcgPSA8MHgwIDB4NzAwMTkwMDAgMHgwIDB4MTAwMD47CisJCWNsb2NrcyA9IDwmdGVncmFfY2FyIFRFR1JBMTI0X0NMS19NQz47CisJCWNsb2NrLW5hbWVzID0gIm1jIjsKKworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJI2lvbW11LWNlbGxzID0gPDE+OworCX07CisKKwlzZGhjaUAwLDcwMGIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmExMjQtc2RoY2kiOworCQkuLi4KKwkJaW9tbXVzID0gPCZtYyBURUdSQV9TV0dST1VQX1NETU1DMUE+OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL2F0bWVsLWhsY2RjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvYXRtZWwtaGxjZGMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NGRlOTVhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9hdG1lbC1obGNkYy50eHQKQEAgLTAsMCArMSw1MSBAQAorRGV2aWNlLVRyZWUgYmluZGluZ3MgZm9yIEF0bWVsJ3MgSExDREMgKEhpZ2ggTENEIENvbnRyb2xsZXIpIE1GRCBkcml2ZXIKKworUmVxdWlyZWQgcHJvcGVydGllczoKKyAtIGNvbXBhdGlibGU6IHZhbHVlIHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICJhdG1lbCxzYW1hNWQzLWhsY2RjIgorIC0gcmVnOiBiYXNlIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIEhMQ0RDIGRldmljZSByZWdpc3RlcnMuCisgLSBjbG9jay1uYW1lczogdGhlIG5hbWUgb2YgdGhlIDMgY2xvY2tzIHJlcXVlc3RlZCBieSB0aGUgSExDREMgZGV2aWNlLgorICAgU2hvdWxkIGNvbnRhaW4gInBlcmlwaF9jbGsiLCAic3lzX2NsayIgYW5kICJzbG93X2NsayIuCisgLSBjbG9ja3M6IHNob3VsZCBjb250YWluIHRoZSAzIGNsb2NrcyByZXF1ZXN0ZWQgYnkgdGhlIEhMQ0RDIGRldmljZS4KKyAtIGludGVycnVwdHM6IHNob3VsZCBjb250YWluIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgSExDREMgaW50ZXJydXB0IGxpbmUKKworVGhlIEhMQ0RDIElQIGV4cG9zZXMgdHdvIHN1YmRldmljZXM6CisgLSBhIFBXTSBjaGlwOiBzZWUgLi4vcHdtL2F0bWVsLWhsY2RjLXB3bS50eHQKKyAtIGEgRGlzcGxheSBDb250cm9sbGVyOiBzZWUgLi4vZHJtL2F0bWVsLWhsY2RjLWRjLnR4dAorCitFeGFtcGxlOgorCisJaGxjZGM6IGhsY2RjQGYwMDMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hNWQzLWhsY2RjIjsKKwkJcmVnID0gPDB4ZjAwMzAwMDAgMHgyMDAwPjsKKwkJY2xvY2tzID0gPCZsY2RjX2Nsaz4sIDwmbGNkY2s+LCA8JmNsazMyaz47CisJCWNsb2NrLW5hbWVzID0gInBlcmlwaF9jbGsiLCJzeXNfY2xrIiwgInNsb3dfY2xrIjsKKwkJaW50ZXJydXB0cyA9IDwzNiBJUlFfVFlQRV9MRVZFTF9ISUdIIDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCWhsY2RjLWRpc3BsYXktY29udHJvbGxlciB7CisJCQljb21wYXRpYmxlID0gImF0bWVsLGhsY2RjLWRpc3BsYXktY29udHJvbGxlciI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2xjZF9iYXNlICZwaW5jdHJsX2xjZF9yZ2I4ODg+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcG9ydEAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlyZWcgPSA8MD47CisKKwkJCQlobGNkY19wYW5lbF9vdXRwdXQ6IGVuZHBvaW50QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmcGFuZWxfaW5wdXQ+OworCQkJCX07CisJCQl9OworCQl9OworCisJCWhsY2RjX3B3bTogaGxjZGMtcHdtIHsKKwkJCWNvbXBhdGlibGUgPSAiYXRtZWwsaGxjZGMtcHdtIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfbGNkX3B3bT47CisJCQkjcHdtLWNlbGxzID0gPDM+OworCQl9OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3Njg2LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvbWF4Nzc2ODYudHh0CmluZGV4IDY3OGYzY2YuLjc1ZmRmYWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvbWF4Nzc2ODYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvbWF4Nzc2ODYudHh0CkBAIC0zNCw2ICszNCwxMiBAQAogCS1CVUNLbiAJOglmb3IgQlVDS3MsIHdoZXJlIG4gY2FuIGxpZSBpbiByYW5nZSAxIHRvIDkuCiAJCQlleGFtcGxlOiBCVUNLMSwgQlVDSzUsIEJVQ0s5LgogCisgIFJlZ3VsYXRvcnMgd2hpY2ggY2FuIGJlIHR1cm5lZCBvZmYgZHVyaW5nIHN5c3RlbSBzdXNwZW5kOgorCS1MRE9uCToJMiwgNi04LCAxMC0xMiwgMTQtMTYsCisJLUJVQ0tuCToJMS00LgorICBVc2Ugc3RhbmRhcmQgcmVndWxhdG9yIGJpbmRpbmdzIGZvciBpdCAoJ3JlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZCcpLgorCisKIEV4YW1wbGU6CiAKIAltYXg3NzY4NkAwOSB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3NjkzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvbWF4Nzc2OTMudHh0CmluZGV4IDExOTIxY2MuLjAxZTlmMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvbWF4Nzc2OTMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvbWF4Nzc2OTMudHh0CkBAIC0yNyw2ICsyNywyMCBAQAogCiAJWypdIHJlZmVyIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dAogCistIGhhcHRpYyA6IFRoZSBNQVg3NzY5MyBoYXB0aWMgZGV2aWNlIHV0aWxpc2VzIGEgUFdNIGNvbnRyb2xsZWQgbW90b3IgdG8gcHJvdmlkZQorICB1c2VycyB3aXRoIHRhY3RpbGUgZmVlZGJhY2suIFBXTSBwZXJpb2QgYW5kIGR1dHktY3ljbGUgYXJlIHZhcmllZCBpbgorICBvcmRlciB0byBwcm92aWRlIHRoZSBhcHByb3ByaXRlIGxldmVsIG9mIGZlZWRiYWNrLgorCisgUmVxdWlyZWQgcHJvcGVydGllczoKKwktIGNvbXBhdGlibGUgOiBNdXN0IGJlICJtYXhpbSxtYXg3NzY5My1ocGF0aWMiCisJLSBoYXB0aWMtc3VwcGx5IDogcG93ZXIgc3VwcGx5IGZvciB0aGUgaGFwdGljIG1vdG9yCisJWypdIHJlZmVyIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dAorCS0gcHdtcyA6IHBoYW5kbGUgdG8gdGhlIHBoeXNpY2FsIFBXTShQdWxzZSBXaWR0aCBNb2R1bGF0aW9uKSBkZXZpY2UuCisJIFBXTSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBuYW1lZCAicHdtcyIuIEFuZCBudW1iZXIgb2YgY2VsbCBpcyBkaWZmZXJlbnQKKwkgZm9yIGVhY2ggcHdtIGRldmljZS4KKwkgVG8gZ2V0IG1vcmUgaW5mb3JtYXRpb25zLCBwbGVhc2UgcmVmZXIgdG8gZG9jdW1lbnRhaW9uLgorCVsqXSByZWZlciBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcHdtL3B3bS50eHQKKwogRXhhbXBsZToKIAltYXg3NzY5M0A2NiB7CiAJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc2OTMiOwpAQCAtNTIsNCArNjYsMTEgQEAKIAkJCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQl9OwogCQl9OworCisJCWhhcHRpYyB7CisJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3NjkzLWhhcHRpYyI7CisJCQloYXB0aWMtc3VwcGx5ID0gPCZoYXB0aWNfc3VwcGx5PjsKKwkJCXB3bXMgPSA8JnB3bSAwIDQwMDAwIDA+OworCQkJcHdtLW5hbWVzID0gImhhcHRpYyI7CisJCX07CiAJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvczJtcHMxMS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3MybXBzMTEudHh0CmluZGV4IDBlNDAyNmEuLjU3YTA0NTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvczJtcHMxMS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9zMm1wczExLnR4dApAQCAtMSw1ICsxLDUgQEAKIAotKiBTYW1zdW5nIFMyTVBTMTEsIFMyTVBTMTQgYW5kIFMyTVBVMDIgVm9sdGFnZSBhbmQgQ3VycmVudCBSZWd1bGF0b3IKKyogU2Ftc3VuZyBTMk1QUzExLCBTMk1QUzEzLCBTMk1QUzE0IGFuZCBTMk1QVTAyIFZvbHRhZ2UgYW5kIEN1cnJlbnQgUmVndWxhdG9yCiAKIFRoZSBTYW1zdW5nIFMyTVBTMTEgaXMgYSBtdWx0aS1mdW5jdGlvbiBkZXZpY2Ugd2hpY2ggaW5jbHVkZXMgdm9sdGFnZSBhbmQKIGN1cnJlbnQgcmVndWxhdG9ycywgUlRDLCBjaGFyZ2VyIGNvbnRyb2xsZXIgYW5kIG90aGVyIHN1Yi1ibG9ja3MuIEl0IGlzCkBAIC03LDggKzcsOCBAQAogYWRkcmVzc2VkIGJ5IHRoZSBob3N0IHN5c3RlbSB1c2luZyBkaWZmZXJlbnQgSTJDIHNsYXZlIGFkZHJlc3Nlcy4KIAogUmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZTogU2hvdWxkIGJlICJzYW1zdW5nLHMybXBzMTEtcG1pYyIgb3IgInNhbXN1bmcsczJtcHMxNC1wbWljIgotICAgICAgICAgICAgICBvciAic2Ftc3VuZyxzMm1wdTAyLXBtaWMiLgorLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgInNhbXN1bmcsczJtcHMxMS1wbWljIiBvciAic2Ftc3VuZyxzMm1wczEzLXBtaWMiCisJICAgICAgb3IgInNhbXN1bmcsczJtcHMxNC1wbWljIiBvciAic2Ftc3VuZyxzMm1wdTAyLXBtaWMiLgogLSByZWc6IFNwZWNpZmllcyB0aGUgSTJDIHNsYXZlIGFkZHJlc3Mgb2YgdGhlIHBtaWMgYmxvY2suIEl0IHNob3VsZCBiZSAweDY2LgogCiBPcHRpb25hbCBwcm9wZXJ0aWVzOgpAQCAtMTcsOCArMTcsOCBAQAogLSBpbnRlcnJ1cHRzOiBJbnRlcnJ1cHQgc3BlY2lmaWVycyBmb3IgaW50ZXJydXB0IHNvdXJjZXMuCiAKIE9wdGlvbmFsIG5vZGVzOgotLSBjbG9ja3M6IHMybXBzMTEgYW5kIHM1bTg3NjcgcHJvdmlkZSB0aHJlZShBUC9DUC9CVCkgYnVmZmVyZWQgMzIuNzY4IEtIegotICBvdXRwdXRzLCBzbyB0byByZWdpc3RlciB0aGVzZSBhcyBjbG9ja3Mgd2l0aCBjb21tb24gY2xvY2sgZnJhbWV3b3JrCistIGNsb2NrczogczJtcHMxMSwgczJtcHMxMyBhbmQgczVtODc2NyBwcm92aWRlIHRocmVlKEFQL0NQL0JUKSBidWZmZXJlZCAzMi43NjgKKyAgS0h6IG91dHB1dHMsIHNvIHRvIHJlZ2lzdGVyIHRoZXNlIGFzIGNsb2NrcyB3aXRoIGNvbW1vbiBjbG9jayBmcmFtZXdvcmsKICAgaW5zdGFudGlhdGUgYSBzdWItbm9kZSBuYW1lZCAiY2xvY2tzIi4gSXQgdXNlcyB0aGUgY29tbW9uIGNsb2NrIGJpbmRpbmcKICAgZG9jdW1lbnRlZCBpbiA6CiAgIFtEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svY2xvY2stYmluZGluZ3MudHh0XQpAQCAtMzAsMTIgKzMwLDEyIEBACiAgICAgdGhlIGNsb2NrIHdoaWNoIHRoZXkgY29uc3VtZS4KICAgICBDbG9jayAgICAgICAgICAgICAgIElEICAgICAgICAgICBEZXZpY2VzCiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIDMyS2h6QVAJCTAgICAgICAgICAgICBTMk1QUzExLCBTMk1QUzE0LCBTNU04NzY3Ci0gICAgMzJLaHpDUAkJMSAgICAgICAgICAgIFMyTVBTMTEsIFM1TTg3NjcKLSAgICAzMktoekJUCQkyICAgICAgICAgICAgUzJNUFMxMSwgUzJNUFMxNCwgUzVNODc2NworICAgIDMyS2h6QVAJCTAgICAgICAgICAgICBTMk1QUzExLCBTMk1QUzEzLCBTMk1QUzE0LCBTNU04NzY3CisgICAgMzJLaHpDUAkJMSAgICAgICAgICAgIFMyTVBTMTEsIFMyTVBTMTMsIFM1TTg3NjcKKyAgICAzMktoekJUCQkyICAgICAgICAgICAgUzJNUFMxMSwgUzJNUFMxMywgUzJNUFMxNCwgUzVNODc2NwogCi0gIC0gY29tcGF0aWJsZTogU2hvdWxkIGJlIG9uZSBvZjogInNhbXN1bmcsczJtcHMxMS1jbGsiLCAic2Ftc3VuZyxzMm1wczE0LWNsayIsCi0JCSJzYW1zdW5nLHM1bTg3NjctY2xrIgorICAtIGNvbXBhdGlibGU6IFNob3VsZCBiZSBvbmUgb2Y6ICJzYW1zdW5nLHMybXBzMTEtY2xrIiwgInNhbXN1bmcsczJtcHMxMy1jbGsiLAorCQkic2Ftc3VuZyxzMm1wczE0LWNsayIsICJzYW1zdW5nLHM1bTg3NjctY2xrIgogCiAtIHJlZ3VsYXRvcnM6IFRoZSByZWd1bGF0b3JzIG9mIHMybXBzMTEgdGhhdCBoYXZlIHRvIGJlIGluc3RhbnRpYXRlZCBzaG91bGQgYmUKIGluY2x1ZGVkIGluIGEgc3ViLW5vZGUgbmFtZWQgJ3JlZ3VsYXRvcnMnLiBSZWd1bGF0b3Igbm9kZXMgaW5jbHVkZWQgaW4gdGhpcwpAQCAtODEsMTIgKzgxLDE0IEBACiAJLSBMRE9uCiAJCSAgLSB2YWxpZCB2YWx1ZXMgZm9yIG4gYXJlOgogCQkJLSBTMk1QUzExOiAxIHRvIDM4CisJCQktIFMyTVBTMTM6IDEgdG8gNDAKIAkJCS0gUzJNUFMxNDogMSB0byAyNQogCQkJLSBTMk1QVTAyOiAxIHRvIDI4CiAJCSAgLSBFeGFtcGxlOiBMRE8xLCBMRE8yLCBMRE8yOAogCS0gQlVDS24KIAkJICAtIHZhbGlkIHZhbHVlcyBmb3IgbiBhcmU6CiAJCQktIFMyTVBTMTE6IDEgdG8gMTAKKwkJCS0gUzJNUFMxMzogMSB0byAxMAogCQkJLSBTMk1QUzE0OiAxIHRvIDUKIAkJCS0gUzJNUFUwMjogMSB0byA3CiAJCSAgLSBFeGFtcGxlOiBCVUNLMSwgQlVDSzIsIEJVQ0s5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2V4eW5vcy1kdy1tc2hjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvZXh5bm9zLWR3LW1zaGMudHh0CmluZGV4IDZjZDM1MjUuLmVlNGZjMDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvZXh5bm9zLWR3LW1zaGMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvZXh5bm9zLWR3LW1zaGMudHh0CkBAIC0xOCw2ICsxOCwxMCBAQAogCSAgc3BlY2lmaWMgZXh0ZW5zaW9ucy4KIAktICJzYW1zdW5nLGV4eW5vczU0MjAtZHctbXNoYyI6IGZvciBjb250cm9sbGVycyB3aXRoIFNhbXN1bmcgRXh5bm9zNTQyMAogCSAgc3BlY2lmaWMgZXh0ZW5zaW9ucy4KKwktICJzYW1zdW5nLGV4eW5vczctZHctbXNoYyI6IGZvciBjb250cm9sbGVycyB3aXRoIFNhbXN1bmcgRXh5bm9zNworCSAgc3BlY2lmaWMgZXh0ZW5zaW9ucy4KKwktICJzYW1zdW5nLGV4eW5vczctZHctbXNoYy1zbXUiOiBmb3IgY29udHJvbGxlcnMgd2l0aCBTYW1zdW5nIEV4eW5vczcKKwkgIHNwZWNpZmljIGV4dGVuc2lvbnMgaGF2aW5nIGFuIFNNVS4KIAogKiBzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdjogU3BlY2lmaWVzIHRoZSBkaXZpZGVyIHZhbHVlIGZvciB0aGUgY2FyZCBpbnRlcmZhY2UKICAgdW5pdCAoY2l1KSBjbG9jay4gVGhpcyBwcm9wZXJ0eSBpcyBhcHBsaWNhYmxlIG9ubHkgZm9yIEV4eW5vczUgU29DJ3MgYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2ltZy1kdy1tc2hjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvaW1nLWR3LW1zaGMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZGU5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2ltZy1kdy1tc2hjLnR4dApAQCAtMCwwICsxLDI5IEBACisqIEltYWdpbmF0aW9uIHNwZWNpZmljIGV4dGVuc2lvbnMgdG8gdGhlIFN5bm9wc3lzIERlc2lnbndhcmUgTW9iaWxlIFN0b3JhZ2UKKyAgSG9zdCBDb250cm9sbGVyCisKK1RoZSBTeW5vcHN5cyBkZXNpZ253YXJlIG1vYmlsZSBzdG9yYWdlIGhvc3QgY29udHJvbGxlciBpcyB1c2VkIHRvIGludGVyZmFjZQorYSBTb0Mgd2l0aCBzdG9yYWdlIG1lZGl1bSBzdWNoIGFzIGVNTUMgb3IgU0QvTU1DIGNhcmRzLiBUaGlzIGZpbGUgZG9jdW1lbnRzCitkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBjb3JlIFN5bm9wc3lzIGR3IG1zaGMgY29udHJvbGxlciBwcm9wZXJ0aWVzIGRlc2NyaWJlZAorYnkgc3lub3BzeXMtZHctbXNoYy50eHQgYW5kIHRoZSBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIEltYWdpbmF0aW9uIHNwZWNpZmljCitleHRlbnNpb25zIHRvIHRoZSBTeW5vcHN5cyBEZXNpZ253YXJlIE1vYmlsZSBTdG9yYWdlIEhvc3QgQ29udHJvbGxlci4KKworUmVxdWlyZWQgUHJvcGVydGllczoKKworKiBjb21wYXRpYmxlOiBzaG91bGQgYmUKKwktICJpbWcscGlzdGFjaGlvLWR3LW1zaGMiOiBmb3IgUGlzdGFjaGlvIFNvQ3MKKworRXhhbXBsZToKKworCW1tY0AxODE0MjAwMCB7CisJCWNvbXBhdGlibGUgPSAiaW1nLHBpc3RhY2hpby1kdy1tc2hjIjsKKwkJcmVnID0gPDB4MTgxNDIwMDAgMHg0MDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TSEFSRUQgMzkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPiwgPCZzZGhvc3RfY2xrPjsKKwkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7CisKKwkJZmlmby1kZXB0aCA9IDwweDIwPjsKKwkJYnVzLXdpZHRoID0gPDQ+OworCQludW0tc2xvdHMgPSA8MT47CisJCWRpc2FibGUtd3A7CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvc2RoY2ktcHhhLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvc2RoY2ktcHhhLnR4dAppbmRleCA4NjIyM2MzLi40ZGQ2ZGViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL3NkaGNpLXB4YS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9zZGhjaS1weGEudHh0CkBAIC0xMiw2ICsxMiwxMCBAQAogICAqIGZvciAibWFydmVsbCxhcm1hZGEtMzgwLXNkaGNpIiwgdHdvIHJlZ2lzdGVyIGFyZWFzLiBUaGUgZmlyc3Qgb25lCiAgICAgZm9yIHRoZSBTREhDSSByZWdpc3RlcnMgdGhlbXNlbHZlcywgYW5kIHRoZSBzZWNvbmQgb25lIGZvciB0aGUKICAgICBBWEkvTWJ1cyBicmlkZ2UgcmVnaXN0ZXJzIG9mIHRoZSBTREhDSSB1bml0LgorLSBjbG9ja3M6IEFycmF5IG9mIGNsb2NrcyByZXF1aXJlZCBmb3IgU0RIQ0k7IHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBmb3IKKyAgICBJL08gY2xvY2suCistIGNsb2NrLW5hbWVzOiBBcnJheSBvZiBuYW1lcyBjb3JyZXNwb25kaW5nIHRvIGNsb2NrcyBwcm9wZXJ0eTsgc2hhbGwgYmUKKyAgICAiaW8iIGZvciBJL08gY2xvY2sgYW5kICJjb3JlIiBmb3Igb3B0aW9uYWwgY29yZSBjbG9jay4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKIC0gbXJ2bCxjbGstZGVsYXktY3ljbGVzOiBTcGVjaWZ5IGEgbnVtYmVyIG9mIGN5Y2xlcyB0byBkZWxheSBmb3IgdHVuaW5nLgpAQCAtMjMsNiArMjcsOCBAQAogCXJlZyA9IDwweGQ0MjgwODAwIDB4ODAwPjsKIAlidXMtd2lkdGggPSA8OD47CiAJaW50ZXJydXB0cyA9IDwyNz47CisJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NESU8xWElOPiwgPCZjaGlwIENMS0lEX1NESU8xPjsKKwljbG9jay1uYW1lcyA9ICJpbyIsICJjb3JlIjsKIAlub24tcmVtb3ZhYmxlOwogCW1ydmwsY2xrLWRlbGF5LWN5Y2xlcyA9IDwzMT47CiB9OwpAQCAtMzIsNSArMzgsNiBAQAogCXJlZyA9IDwweGQ4MDAwIDB4MTAwMD4sIDwweGRjMDAwIDB4MTAwPjsKIAlpbnRlcnJ1cHRzID0gPDAgMjUgMHg0PjsKIAljbG9ja3MgPSA8JmdhdGVjbGsgMTc+OworCWNsb2NrLW5hbWVzID0gImlvIjsKIAltcnZsLGNsay1kZWxheS1jeWNsZXMgPSA8MHgxRj47CiB9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25pb3MyL25pb3MyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uaW9zMi9uaW9zMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkMGE5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uaW9zMi9uaW9zMi50eHQKQEAgLTAsMCArMSw2MiBAQAorKiBOaW9zIElJIFByb2Nlc3NvciBCaW5kaW5nCisKK1RoaXMgYmluZGluZyBzcGVjaWZpZXMgd2hhdCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBpbiB0aGUgZGV2aWNlIHRyZWUKK3JlcHJlc2VudGF0aW9uIG9mIGEgTmlvcyBJSSBQcm9jZXNzb3IgQ29yZS4KKworVXNlcnMgY2FuIHVzZSBzb3BjMmR0cyB0b29sIGZvciBnZW5lcmF0aW5nIGRldmljZSB0cmVlIHNvdXJjZXMgKGR0cykgZnJvbSBhCitRc3lzIHN5c3RlbS4gU2VlIG1vcmUgZGV0YWlsIGluOiBodHRwOi8vd3d3LmFsdGVyYXdpa2kuY29tL3dpa2kvU29wYzJkdHMKKworUmVxdWlyZWQgcHJvcGVydGllczoKKworLSBjb21wYXRpYmxlOiBDb21wYXRpYmxlIHByb3BlcnR5IHZhbHVlIHNob3VsZCBiZSAiYWx0cixuaW9zMi0xLjAiLgorLSByZWc6IENvbnRhaW5zIENQVSBpbmRleC4KKy0gaW50ZXJydXB0LWNvbnRyb2xsZXI6IFNwZWNpZmllcyB0aGF0IHRoZSBub2RlIGlzIGFuIGludGVycnVwdCBjb250cm9sbGVyCistICNpbnRlcnJ1cHQtY2VsbHM6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNlbGxzIG5lZWRlZCB0byBlbmNvZGUgYW4KKwkJaW50ZXJydXB0IHNvdXJjZSwgc2hvdWxkIGJlIDEuCistIGNsb2NrLWZyZXF1ZW5jeTogQ29udGFpbnMgdGhlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgQ1BVLCBpbiBIei4KKy0gZGNhY2hlLWxpbmUtc2l6ZTogQ29udGFpbnMgZGF0YSBjYWNoZSBsaW5lIHNpemUuCistIGljYWNoZS1saW5lLXNpemU6IENvbnRhaW5zIGluc3RydWN0aW9uIGxpbmUgc2l6ZS4KKy0gZGNhY2hlLXNpemU6IENvbnRhaW5zIGRhdGEgY2FjaGUgc2l6ZS4KKy0gaWNhY2hlLXNpemU6IENvbnRhaW5zIGluc3RydWN0aW9uIGNhY2hlIHNpemUuCistIGFsdHIscGlkLW51bS1iaXRzOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBiaXRzIHRvIHVzZSB0byByZXByZXNlbnQgdGhlIHByb2Nlc3MKKwkJaWRlbnRpZmllciAoUElEKS4KKy0gYWx0cix0bGItbnVtLXdheXM6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNldC1hc3NvY2lhdGl2aXR5IHdheXMgaW4gdGhlIFRMQi4KKy0gYWx0cix0bGItbnVtLWVudHJpZXM6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIFRMQi4KKy0gYWx0cix0bGItcHRyLXN6OiBTcGVjaWZpZXMgc2l6ZSBvZiBUTEIgcG9pbnRlci4KKy0gYWx0cixoYXMtbXVsOiBTcGVjaWZpZXMgQ1BVIGhhcmR3YXJlIG11bHRpcHkgc3VwcG9ydCwgc2hvdWxkIGJlIDEuCistIGFsdHIsaGFzLW1tdTogU3BlY2lmaWVzIENQVSBzdXBwb3J0IE1NVSBzdXBwb3J0LCBzaG91bGQgYmUgMS4KKy0gYWx0cixoYXMtaW5pdGRhOiBTcGVjaWZpZXMgQ1BVIHN1cHBvcnQgaW5pdGRhIGluc3RydWN0aW9uLCBzaG91bGQgYmUgMS4KKy0gYWx0cixyZXNldC1hZGRyOiBTcGVjaWZpZXMgQ1BVIHJlc2V0IGFkZHJlc3MKKy0gYWx0cixmYXN0LXRsYi1taXNzLWFkZHI6IFNwZWNpZmllcyBDUFUgZmFzdCBUTEIgbWlzcyBleGNlcHRpb24gYWRkcmVzcworLSBhbHRyLGV4Y2VwdGlvbi1hZGRyOiBTcGVjaWZpZXMgQ1BVIGV4Y2VwdGlvbiBhZGRyZXNzCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGFsdHIsaGFzLWRpdjogU3BlY2lmaWVzIENQVSBoYXJkd2FyZSBkaXZpZGUgc3VwcG9ydAorLSBhbHRyLGltcGxlbWVudGF0aW9uOiBOaW9zIElJIGNvcmUgaW1wbGVtZW50YXRpb24sIHRoaXMgc2hvdWxkIGJlICJmYXN0IjsKKworRXhhbXBsZToKKworY3B1QDB4MCB7CisJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwljb21wYXRpYmxlID0gImFsdHIsbmlvczItMS4wIjsKKwlyZWcgPSA8MD47CisJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTI1MDAwMDAwPjsKKwlkY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwlpY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwlkY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJaWNhY2hlLXNpemUgPSA8MzI3Njg+OworCWFsdHIsaW1wbGVtZW50YXRpb24gPSAiZmFzdCI7CisJYWx0cixwaWQtbnVtLWJpdHMgPSA8OD47CisJYWx0cix0bGItbnVtLXdheXMgPSA8MTY+OworCWFsdHIsdGxiLW51bS1lbnRyaWVzID0gPDEyOD47CisJYWx0cix0bGItcHRyLXN6ID0gPDc+OworCWFsdHIsaGFzLWRpdiA9IDwxPjsKKwlhbHRyLGhhcy1tdWwgPSA8MT47CisJYWx0cixyZXNldC1hZGRyID0gPDB4YzI4MDAwMDA+OworCWFsdHIsZmFzdC10bGItbWlzcy1hZGRyID0gPDB4YzdmZmY0MDA+OworCWFsdHIsZXhjZXB0aW9uLWFkZHIgPSA8MHhkMDAwMDAyMD47CisJYWx0cixoYXMtaW5pdGRhID0gPDE+OworCWFsdHIsaGFzLW1tdSA9IDwxPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmlvczIvdGltZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25pb3MyL3RpbWVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDRhNTg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25pb3MyL3RpbWVyLnR4dApAQCAtMCwwICsxLDE5IEBACitBbHRlcmEgVGltZXIKKworUmVxdWlyZWQgcHJvcGVydGllczoKKworLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJhbHRyLHRpbWVyLTEuMCIKKy0gcmVnIDogU3BlY2lmaWVzIGJhc2UgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgcmVnaXN0ZXJzLgorLSBpbnRlcnJ1cHQtcGFyZW50OiBwaGFuZGxlIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorLSBpbnRlcnJ1cHRzIDogU2hvdWxkIGNvbnRhaW4gdGhlIHRpbWVyIGludGVycnVwdCBudW1iZXIKKy0gY2xvY2stZnJlcXVlbmN5IDogVGhlIGZyZXF1ZW5jeSBvZiB0aGUgY2xvY2sgdGhhdCBkcml2ZXMgdGhlIGNvdW50ZXIsIGluIEh6LgorCitFeGFtcGxlOgorCit0aW1lciB7CisJY29tcGF0aWJsZSA9ICJhbHRyLHRpbWVyLTEuMCI7CisJcmVnID0gPDB4MDA0MDAwMDAgMHgwMDAwMDAyMD47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmY3B1PjsKKwlpbnRlcnJ1cHRzID0gPDExPjsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTI1MDAwMDAwPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL2xheWVyc2NhcGUtcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvbGF5ZXJzY2FwZS1wY2kudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODZmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL2xheWVyc2NhcGUtcGNpLnR4dApAQCAtMCwwICsxLDQyIEBACitGcmVlc2NhbGUgTGF5ZXJzY2FwZSBQQ0llIGNvbnRyb2xsZXIKKworVGhpcyBQQ0llIGhvc3QgY29udHJvbGxlciBpcyBiYXNlZCBvbiB0aGUgU3lub3BzaXMgRGVzaWdud2FyZSBQQ0llIElQCithbmQgdGh1cyBpbmhlcml0cyBhbGwgdGhlIGNvbW1vbiBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gZGVzaWdud2FyZS1wY2llLnR4dC4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogc2hvdWxkIGNvbnRhaW4gdGhlIHBsYXRmb3JtIGlkZW50aWZpZXIgc3VjaCBhcyAiZnNsLGxzMTAyMWEtcGNpZSIKKy0gcmVnOiBiYXNlIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZiB0aGUgUENJZSBjb250cm9sbGVyCistIGludGVycnVwdHM6IEEgbGlzdCBvZiBpbnRlcnJ1cHQgb3V0cHV0cyBvZiB0aGUgY29udHJvbGxlci4gTXVzdCBjb250YWluIGFuCisgIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIHRoZSBpbnRlcnJ1cHQtbmFtZXMgcHJvcGVydHkuCistIGludGVycnVwdC1uYW1lczogTXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZW50cmllczoKKyAgImludHIiOiBUaGUgaW50ZXJydXB0IHRoYXQgaXMgYXNzZXJ0ZWQgZm9yIGNvbnRyb2xsZXIgaW50ZXJydXB0cworLSBmc2wscGNpZS1zY2ZnOiBNdXN0IGluY2x1ZGUgdHdvIGVudHJpZXMuCisgIFRoZSBmaXJzdCBlbnRyeSBtdXN0IGJlIGEgbGluayB0byB0aGUgU0NGRyBkZXZpY2Ugbm9kZQorICBUaGUgc2Vjb25kIGVudHJ5IG11c3QgYmUgJzAnIG9yICcxJyBiYXNlZCBvbiBwaHlzaWNhbCBQQ0llIGNvbnRyb2xsZXIgaW5kZXguCisgIFRoaXMgaXMgdXNlZCB0byBnZXQgU0NGRyBQRVhOIHJlZ2lzdGVycworCitFeGFtcGxlOgorCisJcGNpZUAzNDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbHMxMDIxYS1wY2llIiwgInNucHMsZHctcGNpZSI7CisJCXJlZyA9IDwweDAwIDB4MDM0MDAwMDAgMHgwIDB4MDAwMTAwMDAgICAvKiBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHg0MCAweDAwMDAwMDAwIDB4MCAweDAwMDAyMDAwPjsgLyogY29uZmlndXJhdGlvbiBzcGFjZSAqLworCQlyZWctbmFtZXMgPSAicmVncyIsICJjb25maWciOworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTc3IElSUV9UWVBFX0xFVkVMX0hJR0g+OyAvKiBjb250cm9sbGVyIGludGVycnVwdCAqLworCQlpbnRlcnJ1cHQtbmFtZXMgPSAiaW50ciI7CisJCWZzbCxwY2llLXNjZmcgPSA8JnNjZmcgMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJbnVtLWxhbmVzID0gPDQ+OworCQlidXMtcmFuZ2UgPSA8MHgwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHg4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweDQwIDB4MDAwMTAwMDAgMHgwIDB4MDAwMTAwMDAgICAvKiBkb3duc3RyZWFtIEkvTyAqLworCQkJICAweGMyMDAwMDAwIDB4MCAweDIwMDAwMDAwIDB4NDAgMHgyMDAwMDAwMCAweDAgMHgyMDAwMDAwMCAgIC8qIHByZWZldGNoYWJsZSBtZW1vcnkgKi8KKwkJCSAgMHg4MjAwMDAwMCAweDAgMHg0MDAwMDAwMCAweDQwIDB4NDAwMDAwMDAgMHgwIDB4NDAwMDAwMDA+OyAvKiBub24tcHJlZmV0Y2hhYmxlIG1lbW9yeSAqLworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MDAwMCAwIDAgMSAmZ2ljIEdJQ19TUEkgOTEgIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwMDAwIDAgMCAyICZnaWMgR0lDX1NQSSAxODggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAwMDAgMCAwIDMgJmdpYyBHSUNfU1BJIDE5MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MDAwMCAwIDAgNCAmZ2ljIEdJQ19TUEkgMTkyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXIvcG93ZXItY29udHJvbGxlci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXIvcG93ZXItY29udHJvbGxlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3YTNiYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlci9wb3dlci1jb250cm9sbGVyLnR4dApAQCAtMCwwICsxLDE4IEBACisqIEdlbmVyaWMgc3lzdGVtIHBvd2VyIGNvbnRyb2wgY2FwYWJpbGl0eQorCitQb3dlci1tYW5hZ2VtZW50IGludGVncmF0ZWQgY2lyY3VpdHMgb3IgbWlzY2VsbGFuZW91cyBoYXJkd2FyZSBjb21wb25lbnRzIGFyZQorc29tZXRpbWVzIGFibGUgdG8gY29udHJvbCB0aGUgc3lzdGVtIHBvd2VyLiBUaGUgZGV2aWNlIGRyaXZlciBhc3NvY2lhdGVkIHdpdGggdGhlc2UKK2NvbXBvbmVudHMgbWlnaHQgbmVlZCB0byBkZWZpbmUgdGhpcyBjYXBhYmlsaXR5LCB3aGljaCB0ZWxscyB0aGUga2VybmVsIHRoYXQKK2l0IGNhbiBiZSB1c2VkIHRvIHN3aXRjaCBvZmYgdGhlIHN5c3RlbS4gVGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIG11c3QgaGF2ZSB0aGUKK3N0YW5kYXJkIHByb3BlcnR5ICJzeXN0ZW0tcG93ZXItY29udHJvbGxlciIgaW4gaXRzIGRldmljZSBub2RlLiBUaGlzIHByb3BlcnR5CittYXJrcyB0aGUgZGV2aWNlIGFzIGFibGUgdG8gY29udHJvbCB0aGUgc3lzdGVtIHBvd2VyLiBJbiBvcmRlciB0byB0ZXN0IGlmIHRoaXMKK3Byb3BlcnR5IGlzIGZvdW5kIHByb2dyYW1tYXRpY2FsbHksIHVzZSB0aGUgaGVscGVyIGZ1bmN0aW9uCisib2ZfZGV2aWNlX2lzX3N5c3RlbV9wb3dlcl9jb250cm9sbGVyIiBmcm9tIG9mLmggLgorCitFeGFtcGxlOgorCithY3Q4ODQ2OiBhY3Q4ODQ2QDUgeworCSBjb21wYXRpYmxlID0gImFjdGl2ZS1zZW1pLGFjdDg4NDYiOworCSBzdGF0dXMgPSAib2theSI7CisJIHN5c3RlbS1wb3dlci1jb250cm9sbGVyOworfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyX3N1cHBseS9pbXgtc252cy1wb3dlcm9mZi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJfc3VwcGx5L2lteC1zbnZzLXBvd2Vyb2ZmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzdjOWJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyX3N1cHBseS9pbXgtc252cy1wb3dlcm9mZi50eHQKQEAgLTAsMCArMSwyMyBAQAoraS5teDYgUG93ZXJvZmYgRHJpdmVyCisKK1NOVlNfTFBDUiBpbiBTTlZTIG1vZHVsZSBjYW4gcG93ZXIgb2ZmIHRoZSB3aG9sZSBzeXN0ZW0gYnkgcHVsbAorUE1JQ19PTl9SRVEgbG93IGlmIFBNSUNfT05fUkVRIGlzIGNvbm5lY3RlZCB3aXRoIGV4dGVybmFsIFBNSUMuCitJZiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgUE1JQ19PTl9SRVEgYXMgcG93ZXIgb24vb2ZmIGNvbnRyb2wsCitwbGVhc2Ugc2V0IHN0YXR1cz0nZGlzYWJsZWQnIHRvIGRpc2FibGUgdGhpcyBkcml2ZXIuCisKK1JlcXVpcmVkIFByb3BlcnRpZXM6CistY29tcGF0aWJsZTogImZzbCxzZWMtdjQuMC1wb3dlcm9mZiIKKy1yZWc6IFNwZWNpZmllcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgU05WU19MUENSIHJlZ2lzdGVyCisKK0V4YW1wbGU6CisJc252c0AwMjBjYzAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLW1vbiIsICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXMgPSA8MCAweDAyMGNjMDAwIDB4NDAwMD47CisJCS4uLi4uCisJCXNudnNfcG93ZXJvZmY6IHNudnMtcG93ZXJvZmZAMzggeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcG93ZXJvZmYiOworCQkJcmVnID0gPDB4MzggMHg0PjsKKwkJfTsKKwl9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL2FjdDg4NjUtcmVndWxhdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IudHh0CmluZGV4IDg2NTYxNGIuLmRhZDYzNTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IudHh0CkBAIC01LDYgKzUsMTAgQEAKIC0gY29tcGF0aWJsZTogImFjdGl2ZS1zZW1pLGFjdDg4NDYiIG9yICJhY3RpdmUtc2VtaSxhY3Q4ODY1IgogLSByZWc6IEkyQyBzbGF2ZSBhZGRyZXNzCiAKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIHN5c3RlbS1wb3dlci1jb250cm9sbGVyOiBUZWxsaW5nIHdoZXRoZXIgb3Igbm90IHRoaXMgcG1pYyBpcyBjb250cm9sbGluZworICB0aGUgc3lzdGVtIHBvd2VyLiBTZWUgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL3Bvd2VyLWNvbnRyb2xsZXIudHh0IC4KKwogQW55IHN0YW5kYXJkIHJlZ3VsYXRvciBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgc2luZ2xlIHJlZ3VsYXRvci4KIAogVGhlIHZhbGlkIG5hbWVzIGZvciByZWd1bGF0b3JzIGFyZToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvbWF4Nzc4MDIudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9tYXg3NzgwMi50eHQKaW5kZXggNWFlYWZmYy4uNzllNTQ3NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9tYXg3NzgwMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9tYXg3NzgwMi50eHQKQEAgLTI1LDYgKzI1LDI5IEBACiAJCQlleGFtcGxlOiBMRE8xLCBMRE8yLCBMRE8zNS4KIAktQlVDS24gCToJZm9yIEJVQ0tzLCB3aGVyZSBuIGNhbiBsaWUgaW4gcmFuZ2UgMSB0byAxMC4KIAkJCWV4YW1wbGU6IEJVQ0sxLCBCVUNLNSwgQlVDSzEwLgorCitUaGUgbWF4Nzc4MDIgcmVndWxhdG9yIHN1cHBvcnRzIHR3byBkaWZmZXJlbnQgb3BlcmF0aW5nIG1vZGVzOiBOb3JtYWwgYW5kIExvdworUG93ZXIgTW9kZS4gU29tZSByZWd1bGF0b3JzIHN1cHBvcnQgdGhlIG1vZGVzIHRvIGJlIGNoYW5nZWQgYXQgc3RhcnR1cCBvciBieQordGhlIGNvbnN1bWVycyBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiB3aGlsZSBvdGhlcnMgb25seSBzdXBwb3J0IHRvIGNoYW5nZSB0aGUKK21vZGUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kLiBUaGUgc3RhbmRhcmQgcmVndWxhdG9yIHN1c3BlbmQgc3RhdGVzIGJpbmRpbmcgY2FuCitiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgcmVndWxhdG9yIG9wZXJhdGluZyBtb2RlLgorCitUaGUgcmVndWxhdG9ycyB0aGF0IHN1cHBvcnQgdGhlIHN0YW5kYXJkICJyZWd1bGF0b3ItaW5pdGlhbC1tb2RlIiBwcm9wZXJ0eSwKK2NoYW5naW5nIHRoZWlyIG1vZGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gYXJlOiBMRE9zIDEsIDMsIDIwIGFuZCAyMS4KKworVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgInJlZ3VsYXRvci1pbml0aWFsLW1vZGUiIGFuZCAicmVndWxhdG9yLW1vZGUiIGFyZToKKwkxOiBOb3JtYWwgcmVndWxhdG9yIHZvbHRhZ2Ugb3V0cHV0IG1vZGUuCisJMzogTG93IFBvd2VyIHdoaWNoIHJlZHVjZXMgdGhlIHF1aWVzY2VudCBjdXJyZW50IGRvd24gdG8gb25seSAxdUEKKworVGhlIGxpc3Qgb2YgdmFsaWQgbW9kZXMgYXJlIGRlZmluZWQgaW4gdGhlIGR0LWJpbmRpbmdzL2Nsb2NrL21heGltLG1heDc3ODAyLmgKK2hlYWRlciBhbmQgY2FuIGJlIGluY2x1ZGVkIGJ5IGRldmljZSB0cmVlIHNvdXJjZSBmaWxlcy4KKworVGhlIHN0YW5kYXJkICJyZWd1bGF0b3ItbW9kZSIgcHJvcGVydHkgY2FuIG9ubHkgYmUgdXNlZCBmb3IgcmVndWxhdG9ycyB0aGF0CitzdXBwb3J0IGNoYW5naW5nIHRoZWlyIG1vZGUgdG8gTG93IFBvd2VyIE1vZGUgZHVyaW5nIHN1c3BlbmQuIFRoZXNlIHJlZ3VsYXRvcnMKK2FyZTogQlVDS3MgMi00IGFuZCBMRE9zIDEtMzUuIEFsc28sIGl0IG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZSByZWd1bGF0b3IgaGFzCitiZWVuIGVuYWJsZWQgZm9yIHRoZSBnaXZlbiBzdXNwZW5kIHN0YXRlIHVzaW5nICJyZWd1bGF0b3Itb24taW4tc3VzcGVuZCIgYW5kCitoYXMgbm90IGJlZW4gZGlzYWJsZWQgZm9yIHRoYXQgc3RhdGUgdXNpbmcgInJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZCIuCisKIEV4YW1wbGU6CiAKIAltYXg3NzgwMkAwOSB7CkBAIC0zNiwxMSArNTksMjMgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAKIAkJcmVndWxhdG9ycyB7CisJCQlsZG8xX3JlZzogTERPMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkXzF2MCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItaW5pdGlhbC1tb2RlID0gPE1BWDc3ODAyX09QTU9ERV9MUD47CisJCQl9OworCiAJCQlsZG8xMV9yZWc6IExETzExIHsKIAkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbGRvMTEiOwogCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE5MDAwMDA+OwogCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE5MDAwMDA+OwogCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vbi1pbi1zdXNwZW5kOworCQkJCQlyZWd1bGF0b3ItbW9kZSA9IDxNQVg3NzgwMl9PUE1PREVfTFA+OworCQkJCX07CiAJCQl9OwogCiAJCQlidWNrMV9yZWc6IEJVQ0sxIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dAppbmRleCA4NjA3NDMzLi5hYmIyNmI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0CkBAIC0xOSw2ICsxOSwyNCBAQAogICBkZXNpZ24gcmVxdWlyZXMuIFRoaXMgcHJvcGVydHkgZGVzY3JpYmVzIHRoZSB0b3RhbCBzeXN0ZW0gcmFtcCB0aW1lCiAgIHJlcXVpcmVkIGR1ZSB0byB0aGUgY29tYmluYXRpb24gb2YgaW50ZXJuYWwgcmFtcGluZyBvZiB0aGUgcmVndWxhdG9yIGl0c2VsZiwKICAgYW5kIGJvYXJkIGRlc2lnbiBpc3N1ZXMgc3VjaCBhcyB0cmFjZSBjYXBhY2l0YW5jZSBhbmQgbG9hZCBvbiB0aGUgc3VwcGx5LgorLSByZWd1bGF0b3Itc3RhdGUtbWVtIHN1Yi1yb290IG5vZGUgZm9yIFN1c3BlbmQtdG8tUkFNIG1vZGUKKyAgOiBzdXNwZW5kIHRvIG1lbW9yeSwgdGhlIGRldmljZSBnb2VzIHRvIHNsZWVwLCBidXQgYWxsIGRhdGEgc3RvcmVkIGluIG1lbW9yeSwKKyAgb25seSBzb21lIGV4dGVybmFsIGludGVycnVwdCBjYW4gd2FrZSB0aGUgZGV2aWNlLgorLSByZWd1bGF0b3Itc3RhdGUtZGlzayBzdWItcm9vdCBub2RlIGZvciBTdXNwZW5kLXRvLURJU0sgbW9kZQorICA6IHN1c3BlbmQgdG8gZGlzaywgdGhpcyBzdGF0ZSBvcGVyYXRlcyBzaW1pbGFybHkgdG8gU3VzcGVuZC10by1SQU0sCisgIGJ1dCBpbmNsdWRlcyBhIGZpbmFsIHN0ZXAgb2Ygd3JpdGluZyBtZW1vcnkgY29udGVudHMgdG8gZGlzay4KKy0gcmVndWxhdG9yLXN0YXRlLVttZW0vZGlza10gbm9kZSBoYXMgZm9sbG93aW5nIGNvbW1vbiBwcm9wZXJ0aWVzOgorCS0gcmVndWxhdG9yLW9uLWluLXN1c3BlbmQ6IHJlZ3VsYXRvciBzaG91bGQgYmUgb24gaW4gc3VzcGVuZCBzdGF0ZS4KKwktIHJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDogcmVndWxhdG9yIHNob3VsZCBiZSBvZmYgaW4gc3VzcGVuZCBzdGF0ZS4KKwktIHJlZ3VsYXRvci1zdXNwZW5kLW1pY3Jvdm9sdDogcmVndWxhdG9yIHNob3VsZCBiZSBzZXQgdG8gdGhpcyB2b2x0YWdlCisJICBpbiBzdXNwZW5kLgorCS0gcmVndWxhdG9yLW1vZGU6IG9wZXJhdGluZyBtb2RlIGluIHRoZSBnaXZlbiBzdXNwZW5kIHN0YXRlLgorCSAgVGhlIHNldCBvZiBwb3NzaWJsZSBvcGVyYXRpbmcgbW9kZXMgZGVwZW5kcyBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mCisJICBldmVyeSBoYXJkd2FyZSBzbyB0aGUgdmFsaWQgbW9kZXMgYXJlIGRvY3VtZW50ZWQgb24gZWFjaCByZWd1bGF0b3IKKwkgIGRldmljZSB0cmVlIGJpbmRpbmcgZG9jdW1lbnQuCistIHJlZ3VsYXRvci1pbml0aWFsLW1vZGU6IGluaXRpYWwgb3BlcmF0aW5nIG1vZGUuIFRoZSBzZXQgb2YgcG9zc2libGUgb3BlcmF0aW5nCisgIG1vZGVzIGRlcGVuZHMgb24gdGhlIGNhcGFiaWxpdGllcyBvZiBldmVyeSBoYXJkd2FyZSBzbyBlYWNoIGRldmljZSBiaW5kaW5nCisgIGRvY3VtZW50YXRpb24gZXhwbGFpbnMgd2hpY2ggdmFsdWVzIHRoZSByZWd1bGF0b3Igc3VwcG9ydHMuCiAKIERlcHJlY2F0ZWQgcHJvcGVydGllczoKIC0gcmVndWxhdG9yLWNvbXBhdGlibGU6IElmIGEgcmVndWxhdG9yIGNoaXAgY29udGFpbnMgbXVsdGlwbGUKQEAgLTM0LDYgKzUyLDEwIEBACiAJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI1MDAwMDA+OwogCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQl2aW4tc3VwcGx5ID0gPCZ2aW4+OworCisJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJcmVndWxhdG9yLW9uLWluLXN1c3BlbmQ7CisJCX07CiAJfTsKIAogUmVndWxhdG9yIENvbnN1bWVyczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3Ivc2t5ODE0NTItcmVndWxhdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3Ivc2t5ODE0NTItcmVndWxhdG9yLnR4dAppbmRleCA4ODI0NTVlLi5mOWFjYmMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3NreTgxNDUyLXJlZ3VsYXRvci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9za3k4MTQ1Mi1yZWd1bGF0b3IudHh0CkBAIC0xLDYgKzEsNyBAQAogU0tZODE0NTIgdm9sdGFnZSByZWd1bGF0b3IKIAogUmVxdWlyZWQgcHJvcGVydGllczoKKy0gcmVndWxhdG9yIG5vZGUgbmFtZWQgbG91dC4KIC0gYW55IHJlcXVpcmVkIGdlbmVyaWMgcHJvcGVydGllcyBkZWZpbmVkIGluIHJlZ3VsYXRvci50eHQKIAogT3B0aW9uYWwgcHJvcGVydGllczoKQEAgLTksOCArMTAsOSBAQAogRXhhbXBsZToKIAogCXJlZ3VsYXRvciB7Ci0JCS8qIGdlbmVyaWMgcmVndWxhdG9yIHByb3BlcnRpZXMgKi8KLQkJcmVndWxhdG9yLW5hbWUgPSAidG91Y2hfZW4iOwotCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw0NTAwMDAwPjsKLQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8ODAwMDAwMD47CisJCWxvdXQgeworCQkJcmVndWxhdG9yLW5hbWUgPSAic2t5ODE0NTItbG91dCI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw0NTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDgwMDAwMDA+OworCQl9OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXQvc3Qsc3RpLXBpY29waHlyZXNldC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXQvc3Qsc3RpLXBpY29waHlyZXNldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhZTlmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZXNldC9zdCxzdGktcGljb3BoeXJlc2V0LnR4dApAQCAtMCwwICsxLDQyIEBACitTVE1pY3JvZWxlY3Ryb25pY3MgU1RpIGZhbWlseSBTeXNjb25maWcgUGljb3BoeSBTb2Z0UmVzZXQgQ29udHJvbGxlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBiaW5kaW5nIGRlc2NyaWJlcyBhIHJlc2V0IGNvbnRyb2xsZXIgZGV2aWNlIHRoYXQgaXMgdXNlZCB0byBlbmFibGUgYW5kCitkaXNhYmxlIG9uLWNoaXAgUGljb1BIWSBVU0IyIHBoeShzKSB1c2luZyAic29mdHJlc2V0IiBjb250cm9sIGJpdHMgZm91bmQgaW4KK3RoZSBTVGkgZmFtaWx5IFNvQyBzeXN0ZW0gY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisKK1RoZSBhY3R1YWwgYWN0aW9uIHRha2VuIHdoZW4gc29mdHJlc2V0IGlzIGFzc2VydGVkIGlzIGhhcmR3YXJlIGRlcGVuZGVudC4KK0hvd2V2ZXIsIHdoZW4gYXNzZXJ0ZWQgaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIGhhcmR3YXJlJ3MKK3JlZ2lzdGVycyBhbmQgYWZ0ZXIgYW4gYXNzZXJ0L2RlYXNzZXJ0IHNlcXVlbmNlIHRoZSBoYXJkd2FyZSdzIHByZXZpb3VzIHN0YXRlCittYXkgbm8gbG9uZ2VyIGJlIHZhbGlkLgorCitQbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2V0L3Jlc2V0LnR4dAorZm9yIGNvbW1vbiByZXNldCBjb250cm9sbGVyIGJpbmRpbmcgdXNhZ2UuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6IFNob3VsZCBiZSAic3Qsc3RpaDQwNy1waWNvcGh5cmVzZXQiCistICNyZXNldC1jZWxsczogMSwgc2VlIGJlbG93CisKK0V4YW1wbGU6CisKKwlwaWNvcGh5cmVzZXQ6IHBpY29waHlyZXNldC1jb250cm9sbGVyIHsKKwkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBpY29waHlyZXNldCI7CisJCSNyZXNldC1jZWxscyA9IDwxPjsKKwl9OworCitTcGVjaWZ5aW5nIHBpY29waHlyZXNldCBjb250cm9sIG9mIGRldmljZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitEZXZpY2Ugbm9kZXMgc2hvdWxkIHNwZWNpZnkgdGhlIHJlc2V0IGNoYW5uZWwgcmVxdWlyZWQgaW4gdGhlaXIgInJlc2V0cyIKK3Byb3BlcnR5LCBjb250YWluaW5nIGEgcGhhbmRsZSB0byB0aGUgcGljb3BoeXJlc2V0IGRldmljZSBub2RlIGFuZCBhbgoraW5kZXggc3BlY2lmeWluZyB3aGljaCBjaGFubmVsIHRvIHVzZSwgYXMgZGVzY3JpYmVkIGluCitEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXQvcmVzZXQudHh0LgorCitFeGFtcGxlOgorCisJdXNiMl9waWNvcGh5MDogdXNicGljb3BoeUAwIHsKKwkJcmVzZXRzID0gPCZwaWNvcGh5cmVzZXQgU1RJSDQwN19QSUNPUEhZMF9SRVNFVD47CisJfTsKKworTWFjcm8gZGVmaW5pdGlvbnMgZm9yIHRoZSBzdXBwb3J0ZWQgcmVzZXQgY2hhbm5lbHMgY2FuIGJlIGZvdW5kIGluOgoraW5jbHVkZS9kdC1iaW5kaW5ncy9yZXNldC1jb250cm9sbGVyL3N0aWg0MDctcmVzZXRzLmgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ydGMvYXRtZWwsYXQ5MXNhbTktcnRjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ydGMvYXRtZWwsYXQ5MXNhbTktcnRjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWU3OWQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3J0Yy9hdG1lbCxhdDkxc2FtOS1ydGMudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0F0bWVsIEFUOTFTQU05MjYwIFJlYWwgVGltZSBUaW1lcgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBzaG91bGQgYmU6ICJhdG1lbCxhdDkxc2FtOTI2MC1ydHQiCistIHJlZzogc2hvdWxkIGVuY29kZSB0aGUgbWVtb3J5IHJlZ2lvbiBvZiB0aGUgUlRUIGNvbnRyb2xsZXIKKy0gaW50ZXJydXB0czogcnR0IGFsYXJtL2V2ZW50IGludGVycnVwdAorLSBjbG9ja3M6IHNob3VsZCBjb250YWluIHRoZSAzMiBLSHogc2xvdyBjbGsgdGhhdCB3aWxsIGRyaXZlIHRoZSBSVFQgYmxvY2suCistIGF0bWVsLHJ0dC1ydGMtdGltZS1yZWc6IHNob3VsZCBlbmNvZGUgdGhlIEdQQlIgcmVnaXN0ZXIgdXNlZCB0byBzdG9yZQorCXRoZSB0aW1lIGJhc2Ugd2hlbiB0aGUgUlRUIGlzIHVzZWQgYXMgYW4gUlRDLgorCVRoZSBmaXJzdCBjZWxsIHNob3VsZCBwb2ludCB0byB0aGUgR1BCUiBub2RlIGFuZCB0aGUgc2Vjb25kIG9uZQorCWVuY29kZSB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgR1BCUiBibG9jayAob3IgaW4gb3RoZXIgd29yZHMsIHRoZQorCUdQQlIgcmVnaXN0ZXIgdXNlZCB0byBzdG9yZSB0aGUgdGltZSBiYXNlKS4KKworCitFeGFtcGxlOgorCitydHRAZmZmZmZkMjAgeworCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjAtcnR0IjsKKwlyZWcgPSA8MHhmZmZmZmQyMCAweDEwPjsKKwlpbnRlcnJ1cHRzID0gPDEgNCA3PjsKKwljbG9ja3MgPSA8JmNsazMyaz47CisJYXRtZWwscnR0LXJ0Yy10aW1lLXJlZyA9IDwmZ3BiciAweDA+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ydGMvcnRjLW9tYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3J0Yy9ydGMtb21hcC50eHQKaW5kZXggNWEwZjAyZC4uNGJhNGRiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3J0Yy9ydGMtb21hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3J0Yy9ydGMtb21hcC50eHQKQEAgLTUsMTEgKzUsMTcgQEAKIAktICJ0aSxkYTgzMC1ydGMiICAtIGZvciBSVEMgSVAgdXNlZCBzaW1pbGFyIHRvIHRoYXQgb24gREE4eHggU29DIGZhbWlseS4KIAktICJ0aSxhbTMzNTItcnRjIiAtIGZvciBSVEMgSVAgdXNlZCBzaW1pbGFyIHRvIHRoYXQgb24gQU0zMzV4IFNvQyBmYW1pbHkuCiAJCQkgICAgVGhpcyBSVEMgSVAgaGFzIHNwZWNpYWwgV0FLRS1FTiBSZWdpc3RlciB0byBlbmFibGUKLQkJCSAgICBXYWtldXAgZ2VuZXJhdGlvbiBmb3IgZXZlbnQgQWxhcm0uCisJCQkgICAgV2FrZXVwIGdlbmVyYXRpb24gZm9yIGV2ZW50IEFsYXJtLiBJdCBjYW4gYWxzbyBiZQorCQkJICAgIHVzZWQgdG8gY29udHJvbCBhbiBleHRlcm5hbCBQTUlDIHZpYSB0aGUKKwkJCSAgICBwbWljX3Bvd2VyX2VuIHBpbi4KIC0gcmVnOiBBZGRyZXNzIHJhbmdlIG9mIHJ0YyByZWdpc3RlciBzZXQKIC0gaW50ZXJydXB0czogcnRjIHRpbWVyLCBhbGFybSBpbnRlcnJ1cHRzIGluIG9yZGVyCiAtIGludGVycnVwdC1wYXJlbnQ6IHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgogCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBzeXN0ZW0tcG93ZXItY29udHJvbGxlcjogd2hldGhlciB0aGUgcnRjIGlzIGNvbnRyb2xsaW5nIHRoZSBzeXN0ZW0gcG93ZXIKKyAgdGhyb3VnaCBwbWljX3Bvd2VyX2VuCisKIEV4YW1wbGU6CiAKIHJ0Y0AxYzIzMDAwIHsKQEAgLTE4LDQgKzI0LDUgQEAKIAlpbnRlcnJ1cHRzID0gPDE5CiAJCSAgICAgIDE5PjsKIAlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjPjsKKwlzeXN0ZW0tcG93ZXItY29udHJvbGxlcjsKIH07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvbWFydmVsbCxhcm1hZGEtMzcwLXhwLXRpbWVyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9tYXJ2ZWxsLGFybWFkYS0zNzAteHAtdGltZXIudHh0CmluZGV4IGY0NTUxODIuLmU5Yzc4Y2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9tYXJ2ZWxsLGFybWFkYS0zNzAteHAtdGltZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9tYXJ2ZWxsLGFybWFkYS0zNzAteHAtdGltZXIudHh0CkBAIC0yLDggKzIsMTAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgZWl0aGVyICJtYXJ2ZWxsLGFybWFkYS0zNzAtdGltZXIiIG9yCi0gICJtYXJ2ZWxsLGFybWFkYS14cC10aW1lciIgYXMgYXBwcm9wcmlhdGUuCistIGNvbXBhdGlibGU6IFNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAibWFydmVsbCxhcm1hZGEtMzcwLXRpbWVyIiwKKwkgICAgICAibWFydmVsbCxhcm1hZGEtMzc1LXRpbWVyIiwKKwkgICAgICAibWFydmVsbCxhcm1hZGEteHAtdGltZXIiLgogLSBpbnRlcnJ1cHRzOiBTaG91bGQgY29udGFpbiB0aGUgbGlzdCBvZiBHbG9iYWwgVGltZXIgaW50ZXJydXB0cyBhbmQKICAgdGhlbiBsb2NhbCB0aW1lciBpbnRlcnJ1cHRzCiAtIHJlZzogU2hvdWxkIGNvbnRhaW4gbG9jYXRpb24gYW5kIGxlbmd0aCBmb3IgdGltZXJzIHJlZ2lzdGVyLiBGaXJzdApAQCAtMTMsNyArMTUsOCBAQAogQ2xvY2tzIHJlcXVpcmVkIGZvciBjb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC10aW1lciI6CiAtIGNsb2NrcyA6IE11c3QgY29udGFpbiBhIHNpbmdsZSBlbnRyeSBkZXNjcmliaW5nIHRoZSBjbG9jayBpbnB1dAogCi1DbG9ja3MgcmVxdWlyZWQgZm9yIGNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEteHAtdGltZXIiOgorQ2xvY2tzIHJlcXVpcmVkIGZvciBjb21wYXRpYmxlcyA9ICJtYXJ2ZWxsLGFybWFkYS14cC10aW1lciIsCisJCQkJICAibWFydmVsbCxhcm1hZGEtMzc1LXRpbWVyIjoKIC0gY2xvY2tzIDogTXVzdCBjb250YWluIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgogLSBjbG9jay1uYW1lcyA6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGVudHJpZXM6CiAgICJuYmNsayIgKEwyL2NvaGVyZW5jeSBmYWJyaWMgY2xvY2spLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3RpbWVyL3JlbmVzYXMsbXR1Mi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyxtdHUyLnR4dAppbmRleCBkOWE4ZDVhLi5iYTBhMzRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyxtdHUyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyxtdHUyLnR4dApAQCAtMSw0ICsxLDQgQEAKLSogUmVuZXNhcyBSLUNhciBNdWx0aS1GdW5jdGlvbiBUaW1lciBQdWxzZSBVbml0IDIgKE1UVTIpCisqIFJlbmVzYXMgTXVsdGktRnVuY3Rpb24gVGltZXIgUHVsc2UgVW5pdCAyIChNVFUyKQogCiBUaGUgTVRVMiBpcyBhIG11bHRpLXB1cnBvc2UsIG11bHRpLWNoYW5uZWwgdGltZXIvY291bnRlciB3aXRoIGNvbmZpZ3VyYWJsZQogY2xvY2sgaW5wdXRzIGFuZCBwcm9ncmFtbWFibGUgY29tcGFyZSBtYXRjaC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9yZW5lc2FzLHRtdS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGltZXIvcmVuZXNhcyx0bXUudHh0CmluZGV4IDdkYjg5ZmIuLmNkNWYyMGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aW1lci9yZW5lc2FzLHRtdS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3RpbWVyL3JlbmVzYXMsdG11LnR4dApAQCAtMSw0ICsxLDQgQEAKLSogUmVuZXNhcyBSLUNhciBUaW1lciBVbml0IChUTVUpCisqIFJlbmVzYXMgUi1Nb2JpbGUvUi1DYXIgVGltZXIgVW5pdCAoVE1VKQogCiBUaGUgVE1VIGlzIGEgMzItYml0IHRpbWVyL2NvdW50ZXIgd2l0aCBjb25maWd1cmFibGUgY2xvY2sgaW5wdXRzIGFuZAogcHJvZ3JhbW1hYmxlIGNvbXBhcmUgbWF0Y2guCkBAIC05LDYgKzksOCBAQAogUmVxdWlyZWQgUHJvcGVydGllczoKIAogICAtIGNvbXBhdGlibGU6IG11c3QgY29udGFpbiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nOgorICAgIC0gInJlbmVzYXMsdG11LXI4YTc3NDAiIGZvciB0aGUgcjhhNzc0MCBUTVUKKyAgICAtICJyZW5lc2FzLHRtdS1yOGE3Nzc4IiBmb3IgdGhlIHI4YTc3NzggVE1VCiAgICAgLSAicmVuZXNhcyx0bXUtcjhhNzc3OSIgZm9yIHRoZSByOGE3Nzc5IFRNVQogICAgIC0gInJlbmVzYXMsdG11IiBmb3IgYW55IFRNVS4KICAgICAgIFRoaXMgaXMgYSBmYWxsYmFjayBmb3IgdGhlIGFib3ZlIHJlbmVzYXMsdG11LSogZW50cmllcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3ZlbmRvci1wcmVmaXhlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dAppbmRleCBhMzQ0ZWMyLi4yNDE3Y2IwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dApAQCAtNDEsNiArNDEsNyBAQAogZGF2aWNvbQlEQVZJQ09NIFNlbWljb25kdWN0b3IsIEluYy4KIGRlbngJRGVueCBTb2Z0d2FyZSBFbmdpbmVlcmluZwogZGlnaQlEaWdpIEludGVybmF0aW9uYWwgSW5jLgorZGlnaWxlbnQJRGlnbGVudCwgSW5jLgogZGxnCURpYWxvZyBTZW1pY29uZHVjdG9yCiBkbGluawlELUxpbmsgQ29ycG9yYXRpb24KIGRtbwlEYXRhIE1vZHVsIEFHCkBAIC03OCw2ICs3OSw3IEBACiBpbnRlbAlJbnRlbCBDb3Jwb3JhdGlvbgogaW50ZXJjb250cm9sCUludGVyIENvbnRyb2wgR3JvdXAKIGlzZWUJSVNFRSAyMDA3IFMuTC4KK2lzaWwgICAgSW50ZXJzaWwgKGRlcHJlY2F0ZWQsIHVzZSBpc2wpCiBpc2wJSW50ZXJzaWwKIGthcm8JS2EtUm8gZWxlY3Ryb25pY3MgR21iSAoga2V5bWlsZQlLZXltaWxlIEdtYkgKQEAgLTkxLDYgKzkzLDcgQEAKIG1hcnZlbGwJTWFydmVsbCBUZWNobm9sb2d5IEdyb3VwIEx0ZC4KIG1heGltCU1heGltIEludGVncmF0ZWQgUHJvZHVjdHMKIG1lZGlhdGVrCU1lZGlhVGVrIEluYy4KK21lcnJpaQlNZXJyaWkgVGVjaG5vbG9neSBDby4sIEx0ZC4KIG1pY3JlbAlNaWNyZWwgSW5jLgogbWljcm9jaGlwCU1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4KIG1pY3JvbglNaWNyb24gVGVjaG5vbG9neSBJbmMuCkBAIC0xMTIsNiArMTE1LDcgQEAKIG9ubm4JT04gU2VtaWNvbmR1Y3RvciBDb3JwLgogb3BlbmNvcmVzCU9wZW5Db3Jlcy5vcmcKIHBhbmFzb25pYwlQYW5hc29uaWMgQ29ycG9yYXRpb24KK3Blcmljb20JUGVyaWNvbSBUZWNobm9sb2d5IEluYy4KIHBoeXRlYwlQSFlURUMgTWVzc3RlY2huaWsgR21iSAogcGljb2NoaXAJUGljb2NoaXAgTHRkCiBwbGF0aG9tZQlQbGF0J0hvbWUgQ28uLCBMdGQuCkBAIC0xNDksNiArMTUzLDcgQEAKIHN0ZQlTVC1Fcmljc3Nvbgogc3Rlcmljc3NvbglTVC1Fcmljc3Nvbgogc3lub2xvZ3kJU3lub2xvZ3ksIEluYy4KK3RicwlUQlMgVGVjaG5vbG9naWVzCiB0aGluZQlUSGluZSBFbGVjdHJvbmljcywgSW5jLgogdGkJVGV4YXMgSW5zdHJ1bWVudHMKIHRsbQlUcnVzdGVkIExvZ2ljIE1vYmlsaXR5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdzEvb21hcC1oZHEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3cxL29tYXAtaGRxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWY3OTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3cxL29tYXAtaGRxLnR4dApAQCAtMCwwICsxLDE3IEBACisqIE9NQVAgSERRIE9uZSB3aXJlIGJ1cyBtYXN0ZXIgY29udHJvbGxlcgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJ0aSxvbWFwMy0xdyIKKy0gcmVnIDogQWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UKKy0gaW50ZXJydXB0cyA6IGludGVycnVwdCBsaW5lLgorLSB0aSxod21vZHMgOiAiaGRxMXciCisKK0V4YW1wbGU6CisKKy0gRnJvbSBvbWFwMy5kdHNpCisgIGhkcXcxdzogMXdANDgwYjIwMDAgeworCWNvbXBhdGlibGUgPSAidGksb21hcDMtMXciOworCXJlZyA9IDwweDQ4MGIyMDAwIDB4MTAwMD47CisJaW50ZXJydXB0cyA9IDw1OD47CisJdGksaHdtb2RzID0gImhkcTF3IjsKKyAgfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy93YXRjaGRvZy9tYXJ2ZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3dhdGNoZG9nL21hcnZlbC50eHQKaW5kZXggOTcyMjNmZC4uODU4ZWQ5MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3dhdGNoZG9nL21hcnZlbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3dhdGNoZG9nL21hcnZlbC50eHQKQEAgLTE3LDYgKzE3LDE4IEBACiAtIHJlZwkJOiBBIHRoaXJkIGVudHJ5IGlzIG1hbmRhdG9yeSBhbmQgc2hvdWxkIGNvbnRhaW4gdGhlCiAgICAgICAgICAgICAgICAgICBzaGFyZWQgbWFzay91bm1hc2sgUlNUT1VUIGFkZHJlc3MuCiAKK0Nsb2NrcyByZXF1aXJlZCBmb3IgY29tcGF0aWJsZXMgPSAibWFydmVsbCxvcmlvbi13ZHQiLAorCQkJCSAgIm1hcnZlbGwsYXJtYWRhLTM3MC13ZHQiOgorLSBjbG9ja3MgOiBNdXN0IGNvbnRhaW4gYSBzaW5nbGUgZW50cnkgZGVzY3JpYmluZyB0aGUgY2xvY2sgaW5wdXQKKworQ2xvY2tzIHJlcXVpcmVkIGZvciBjb21wYXRpYmxlcyA9ICJtYXJ2ZWxsLGFybWFkYS14cC13ZHQiCisJCQkJICAibWFydmVsbCxhcm1hZGEtMzc1LXdkdCIKKwkJCQkgICJtYXJ2ZWxsLGFybWFkYS0zODAtd2R0IjoKKy0gY2xvY2tzIDogTXVzdCBjb250YWluIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgorLSBjbG9jay1uYW1lcyA6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGVudHJpZXM6CisgICJuYmNsayIgKEwyL2NvaGVyZW5jeSBmYWJyaWMgY2xvY2spLAorICAiZml4ZWQiIChSZWZlcmVuY2UgMjUgTUh6IGZpeGVkLWNsb2NrKS4KKwogT3B0aW9uYWwgcHJvcGVydGllczoKIAogLSBpbnRlcnJ1cHRzCTogQ29udGFpbnMgdGhlIElSUSBmb3Igd2F0Y2hkb2cgZXhwaXJhdGlvbgpAQCAtMzAsNCArNDIsNSBAQAogCQlpbnRlcnJ1cHRzID0gPDM+OwogCQl0aW1lb3V0LXNlYyA9IDwxMD47CiAJCXN0YXR1cyA9ICJva2F5IjsKKwkJY2xvY2tzID0gPCZnYXRlX2NsayA3PjsKIAl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZWJ1Z2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGVidWdmcy50eHQKaW5kZXggM2E4NjNmNi4uODhhYjgxYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZWJ1Z2ZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RlYnVnZnMudHh0CkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJCQkgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIAkJCQkgICAgIHN0cnVjdCBkZWJ1Z2ZzX3JlZ3NldDMyICpyZWdzZXQpOwogCi0gICAgaW50IGRlYnVnZnNfcHJpbnRfcmVnczMyKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRlYnVnZnNfcmVnMzIgKnJlZ3MsCisgICAgdm9pZCBkZWJ1Z2ZzX3ByaW50X3JlZ3MzMihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkZWJ1Z2ZzX3JlZzMyICpyZWdzLAogCQkJIGludCBucmVncywgdm9pZCBfX2lvbWVtICpiYXNlLCBjaGFyICpwcmVmaXgpOwogCiBUaGUgImJhc2UiIGFyZ3VtZW50IG1heSBiZSAwLCBidXQgeW91IG1heSB3YW50IHRvIGJ1aWxkIHRoZSByZWczMiBhcnJheQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mMmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZjJmcy50eHQKaW5kZXggMmNjYTVhMi4uZTA5NTBjNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mMmZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2YyZnMudHh0CkBAIC0xMjIsNiArMTIyLDEwIEBACiBpbmxpbmVfeGF0dHIgICAgICAgICAgIEVuYWJsZSB0aGUgaW5saW5lIHhhdHRycyBmZWF0dXJlLgogaW5saW5lX2RhdGEgICAgICAgICAgICBFbmFibGUgdGhlIGlubGluZSBkYXRhIGZlYXR1cmU6IE5ldyBjcmVhdGVkIHNtYWxsKDx+My40aykKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgY2FuIGJlIHdyaXR0ZW4gaW50byBpbm9kZSBibG9jay4KK2lubGluZV9kZW50cnkgICAgICAgICAgRW5hYmxlIHRoZSBpbmxpbmUgZGlyIGZlYXR1cmU6IGRhdGEgaW4gbmV3IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGVudHJpZXMgY2FuIGJlIHdyaXR0ZW4gaW50byBpbm9kZSBibG9jay4gVGhlCisgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlIG9mIGlub2RlIGJsb2NrIHdoaWNoIGlzIHVzZWQgdG8gc3RvcmUgaW5saW5lCisgICAgICAgICAgICAgICAgICAgICAgIGRlbnRyaWVzIGlzIGxpbWl0ZWQgdG8gfjMuNGsuCiBmbHVzaF9tZXJnZQkgICAgICAgTWVyZ2UgY29uY3VycmVudCBjYWNoZV9mbHVzaCBjb21tYW5kcyBhcyBtdWNoIGFzIHBvc3NpYmxlCiAgICAgICAgICAgICAgICAgICAgICAgIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgY29tbWFuZCBpc3N1ZXMuIElmIHRoZSB1bmRlcmx5aW5nCiAJCSAgICAgICBkZXZpY2UgaGFuZGxlcyB0aGUgY2FjaGVfZmx1c2ggY29tbWFuZCByZWxhdGl2ZWx5IHNsb3dseSwKQEAgLTEzMSw2ICsxMzUsOSBAQAogCQkgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBubyBjYWNoZV9mbHVzaCBjb21tYW5kcyBhcmUgaXNzdWVkCiAJCSAgICAgICBidXQgZjJmcyBzdGlsbCBndWFyYW50ZWVzIHRoZSB3cml0ZSBvcmRlcmluZyBvZiBhbGwgdGhlCiAJCSAgICAgICBkYXRhIHdyaXRlcy4KK2Zhc3Rib290ICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgdXNlZCB3aGVuIGEgc3lzdGVtIHdhbnRzIHRvIHJlZHVjZSBtb3VudAorICAgICAgICAgICAgICAgICAgICAgICB0aW1lIGFzIG11Y2ggYXMgcG9zc2libGUsIGV2ZW4gdGhvdWdoIG5vcm1hbCBwZXJmb3JtYW5jZQorCQkgICAgICAgY2FuIGJlIHNhY3JpZmljZWQuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBERUJVR0ZTIEVOVFJJRVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL0V4cG9ydGluZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL0V4cG9ydGluZwppbmRleCBjOGYwMzZhLi41MjBhNGJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9FeHBvcnRpbmcKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvRXhwb3J0aW5nCkBAIC03MiwyNCArNzIsMTEgQEAKICAgICAgICAgRENBQ0hFX0RJU0NPTk5FQ1RFRCkgZGVudHJ5IGlzIGFsbG9jYXRlZCBhbmQgYXR0YWNoZWQuCiAgICAgICBJbiB0aGUgY2FzZSBvZiBhIGRpcmVjdG9yeSwgY2FyZSBpcyB0YWtlbiB0aGF0IG9ubHkgb25lIGRlbnRyeQogICAgICAgY2FuIGV2ZXIgYmUgYXR0YWNoZWQuCi0gICAgZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSkgb3IgZF9tYXRlcmlhbGlzZV91bmlxdWUoZGVudHJ5LCBpbm9kZSkKLSAgICAgIHdpbGwgaW50cm9kdWNlIGEgbmV3IGRlbnRyeSBpbnRvIHRoZSB0cmVlOyBlaXRoZXIgdGhlIHBhc3NlZC1pbgotICAgICAgZGVudHJ5IG9yIGEgcHJlZXhpc3RpbmcgYWxpYXMgZm9yIHRoZSBnaXZlbiBpbm9kZSAoc3VjaCBhcyBhbgotICAgICAgYW5vbnltb3VzIG9uZSBjcmVhdGVkIGJ5IGRfb2J0YWluX2FsaWFzKSwgaWYgYXBwcm9wcmlhdGUuICBUaGUgdHdvCi0gICAgICBmdW5jdGlvbnMgZGlmZmVyIGluIHRoZWlyIGhhbmRsaW5nIG9mIGRpcmVjdG9yaWVzIHdpdGggcHJlZXhpc3RpbmcKLSAgICAgIGFsaWFzZXM6Ci0gICAgICAgIGRfc3BsaWNlX2FsaWFzIHdpbGwgdXNlIGFueSBleGlzdGluZyBJU19ST09UIGRlbnRyeSwgYnV0IGl0IHdpbGwKLQkgIHJldHVybiAtRUlPIHJhdGhlciB0aGFuIHRyeSB0byBtb3ZlIGEgZGVudHJ5IHdpdGggYSBkaWZmZXJlbnQKLQkgIHBhcmVudC4gIFRoaXMgaXMgYXBwcm9wcmlhdGUgZm9yIGxvY2FsIGZpbGVzeXN0ZW1zLCB3aGljaAotCSAgc2hvdWxkIG5ldmVyIHNlZSBzdWNoIGFuIGFsaWFzIHVubGVzcyB0aGUgZmlsZXN5c3RlbSBpcwotCSAgY29ycnVwdGVkIHNvbWVob3cgKGZvciBleGFtcGxlLCBpZiB0d28gb24tZGlzayBkaXJlY3RvcnkKLQkgIGVudHJpZXMgcmVmZXIgdG8gdGhlIHNhbWUgZGlyZWN0b3J5LikKLQlkX21hdGVyaWFsaXNlX3VuaXF1ZSB3aWxsIGF0dGVtcHQgdG8gbW92ZSBhbnkgZGVudHJ5LiAgVGhpcyBpcwotCSAgYXBwcm9wcmlhdGUgZm9yIGRpc3RyaWJ1dGVkIGZpbGVzeXN0ZW1zLCB3aGVyZSBmaW5kaW5nIGEKLQkgIGRpcmVjdG9yeSBvdGhlciB0aGFuIHdoZXJlIHdlIGxhc3QgY2FjaGVkIGl0IG1heSBiZSBhIG5vcm1hbAotCSAgY29uc2VxdWVuY2Ugb2YgY29uY3VycmVudCBvcGVyYXRpb25zIG9uIG90aGVyIGhvc3RzLgotICAgICAgQm90aCBmdW5jdGlvbnMgcmV0dXJuIE5VTEwgd2hlbiB0aGUgcGFzc2VkLWluIGRlbnRyeSBpcyB1c2VkLAotICAgICAgZm9sbG93aW5nIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gb2YgLT5sb29rdXAuCisgICAgZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSkgd2lsbCBpbnRyb2R1Y2UgYSBuZXcgZGVudHJ5IGludG8gdGhlIHRyZWU7CisgICAgICBlaXRoZXIgdGhlIHBhc3NlZC1pbiBkZW50cnkgb3IgYSBwcmVleGlzdGluZyBhbGlhcyBmb3IgdGhlIGdpdmVuIGlub2RlCisgICAgICAoc3VjaCBhcyBhbiBhbm9ueW1vdXMgb25lIGNyZWF0ZWQgYnkgZF9vYnRhaW5fYWxpYXMpLCBpZiBhcHByb3ByaWF0ZS4KKyAgICAgIEl0IHJldHVybnMgTlVMTCB3aGVuIHRoZSBwYXNzZWQtaW4gZGVudHJ5IGlzIHVzZWQsIGZvbGxvd2luZyB0aGUgY2FsbGluZworICAgICAgY29udmVudGlvbiBvZiAtPmxvb2t1cC4KIAogIAogRmlsZXN5c3RlbSBJc3N1ZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZwppbmRleCAwZjNhMTM5Li5mYTJkYjA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nCkBAIC00NjMsMyArNDYzLDExIEBACiAJb2YgdGhlIGluLXRyZWUgaW5zdGFuY2VzIGRpZCkuICBpbm9kZV9oYXNoX2xvY2sgaXMgc3RpbGwgaGVsZCwKIAlvZiBjb3Vyc2UsIHNvIHRoZXkgYXJlIHN0aWxsIHNlcmlhbGl6ZWQgd3J0IHJlbW92YWwgZnJvbSBpbm9kZSBoYXNoLAogCWFzIHdlbGwgYXMgd3J0IHNldCgpIGNhbGxiYWNrIG9mIGlnZXQ1X2xvY2tlZCgpLgorLS0KK1ttYW5kYXRvcnldCisJZF9tYXRlcmlhbGlzZV91bmlxdWUoKSBpcyBnb25lOyBkX3NwbGljZV9hbGlhcygpIGRvZXMgZXZlcnl0aGluZyB5b3UKKwluZWVkIG5vdy4gIFJlbWVtYmVyIHRoYXQgdGhleSBoYXZlIG9wcG9zaXRlIG9yZGVycyBvZiBhcmd1bWVudHMgOy0vCistLQorW21hbmRhdG9yeV0KKwlmX2RlbnRyeSBpcyBnb25lOyB1c2UgZl9wYXRoLmRlbnRyeSwgb3IsIGJldHRlciB5ZXQsIHNlZSBpZiB5b3UgY2FuIGF2b2lkCisJaXQgZW50aXJlbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NlcV9maWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2VxX2ZpbGUudHh0CmluZGV4IDhlYTNlOTAuLmI3OTdlZDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2VxX2ZpbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2VxX2ZpbGUudHh0CkBAIC0xODAsMjMgKzE4MCwxOSBAQAogYmVlbiBkZWZpbmVkIHdoaWNoIG1ha2UgdGhpcyB0YXNrIGVhc3kuCiAKIE1vc3QgY29kZSB3aWxsIHNpbXBseSB1c2Ugc2VxX3ByaW50ZigpLCB3aGljaCB3b3JrcyBwcmV0dHkgbXVjaCBsaWtlCi1wcmludGsoKSwgYnV0IHdoaWNoIHJlcXVpcmVzIHRoZSBzZXFfZmlsZSBwb2ludGVyIGFzIGFuIGFyZ3VtZW50LiBJdCBpcwotY29tbW9uIHRvIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gc2VxX3ByaW50ZigpLCBidXQgYSBmdW5jdGlvbgotcHJvZHVjaW5nIGNvbXBsaWNhdGVkIG91dHB1dCBtYXkgd2FudCB0byBjaGVjayB0aGF0IHZhbHVlIGFuZCBxdWl0IGlmCi1zb21ldGhpbmcgbm9uLXplcm8gaXMgcmV0dXJuZWQ7IGFuIGVycm9yIHJldHVybiBtZWFucyB0aGF0IHRoZSBzZXFfZmlsZQotYnVmZmVyIGhhcyBiZWVuIGZpbGxlZCBhbmQgZnVydGhlciBvdXRwdXQgd2lsbCBiZSBkaXNjYXJkZWQuCitwcmludGsoKSwgYnV0IHdoaWNoIHJlcXVpcmVzIHRoZSBzZXFfZmlsZSBwb2ludGVyIGFzIGFuIGFyZ3VtZW50LgogCiBGb3Igc3RyYWlnaHQgY2hhcmFjdGVyIG91dHB1dCwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbWF5IGJlIHVzZWQ6CiAKLQlpbnQgc2VxX3B1dGMoc3RydWN0IHNlcV9maWxlICptLCBjaGFyIGMpOwotCWludCBzZXFfcHV0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IGNoYXIgKnMpOwotCWludCBzZXFfZXNjYXBlKHN0cnVjdCBzZXFfZmlsZSAqbSwgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZXNjKTsKKwlzZXFfcHV0YyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNoYXIgYyk7CisJc2VxX3B1dHMoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBjaGFyICpzKTsKKwlzZXFfZXNjYXBlKHN0cnVjdCBzZXFfZmlsZSAqbSwgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZXNjKTsKIAogVGhlIGZpcnN0IHR3byBvdXRwdXQgYSBzaW5nbGUgY2hhcmFjdGVyIGFuZCBhIHN0cmluZywganVzdCBsaWtlIG9uZSB3b3VsZAogZXhwZWN0LiBzZXFfZXNjYXBlKCkgaXMgbGlrZSBzZXFfcHV0cygpLCBleGNlcHQgdGhhdCBhbnkgY2hhcmFjdGVyIGluIHMKIHdoaWNoIGlzIGluIHRoZSBzdHJpbmcgZXNjIHdpbGwgYmUgcmVwcmVzZW50ZWQgaW4gb2N0YWwgZm9ybSBpbiB0aGUgb3V0cHV0LgogCi1UaGVyZSBpcyBhbHNvIGEgcGFpciBvZiBmdW5jdGlvbnMgZm9yIHByaW50aW5nIGZpbGVuYW1lczoKK1RoZXJlIGFyZSBhbHNvIGEgcGFpciBvZiBmdW5jdGlvbnMgZm9yIHByaW50aW5nIGZpbGVuYW1lczoKIAogCWludCBzZXFfcGF0aChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICplc2MpOwogCWludCBzZXFfcGF0aF9yb290KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBhdGggKnBhdGgsCkBAIC0yMDksNiArMjA1LDE0IEBACiB0dXJucyBvdXQgdGhhdCBwYXRoIGNhbm5vdCBiZSByZWFjaGVkIGZyb20gcm9vdCwgdGhlIHZhbHVlIG9mIHJvb3Qgd2lsbCBiZQogY2hhbmdlZCBpbiBzZXFfZmlsZV9yb290KCkgdG8gYSByb290IHdoaWNoICpkb2VzKiB3b3JrLgogCitBIGZ1bmN0aW9uIHByb2R1Y2luZyBjb21wbGljYXRlZCBvdXRwdXQgbWF5IHdhbnQgdG8gY2hlY2sKKwlib29sIHNlcV9oYXNfb3ZlcmZsb3dlZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOworYW5kIGF2b2lkIGZ1cnRoZXIgc2VxXzxvdXRwdXQ+IGNhbGxzIGlmIHRydWUgaXMgcmV0dXJuZWQuCisKK0EgdHJ1ZSByZXR1cm4gZnJvbSBzZXFfaGFzX292ZXJmbG93ZWQgbWVhbnMgdGhhdCB0aGUgc2VxX2ZpbGUgYnVmZmVyIHdpbGwKK2JlIGRpc2NhcmRlZCBhbmQgdGhlIHNlcV9zaG93IGZ1bmN0aW9uIHdpbGwgYXR0ZW1wdCB0byBhbGxvY2F0ZSBhIGxhcmdlcgorYnVmZmVyIGFuZCByZXRyeSBwcmludGluZy4KKwogCiBNYWtpbmcgaXQgYWxsIHdvcmsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CmluZGV4IDIwYmYyMDQuLjQzY2UwNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKQEAgLTgzNSw3ICs4MzUsNyBAQAogCXNzaXplX3QgKCpzcGxpY2VfcmVhZCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CiAJaW50ICgqc2V0bGVhc2UpKHN0cnVjdCBmaWxlICosIGxvbmcgYXJnLCBzdHJ1Y3QgZmlsZV9sb2NrICoqLCB2b2lkICoqKTsKIAlsb25nICgqZmFsbG9jYXRlKShzdHJ1Y3QgZmlsZSAqLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbik7Ci0JaW50ICgqc2hvd19mZGluZm8pKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpOworCXZvaWQgKCpzaG93X2ZkaW5mbykoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZik7CiB9OwogCiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3Bpby9jb25zdW1lci50eHQgYi9Eb2N1bWVudGF0aW9uL2dwaW8vY29uc3VtZXIudHh0CmluZGV4IDZjZTU0NDEuLjg1OTkxOGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3Bpby9jb25zdW1lci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ncGlvL2NvbnN1bWVyLnR4dApAQCAtMjE5LDYgKzIxOSwyNCBAQAogY2FwYWJpbGl0aWVzLgogCiAKK0dQSU9zIGFuZCBBQ1BJCis9PT09PT09PT09PT09PQorCitPbiBBQ1BJIHN5c3RlbXMsIEdQSU9zIGFyZSBkZXNjcmliZWQgYnkgR3Bpb0lvKCkvR3Bpb0ludCgpIHJlc291cmNlcyBsaXN0ZWQgYnkKK3RoZSBfQ1JTIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyBvZiBkZXZpY2VzLiAgVGhvc2UgcmVzb3VyY2VzIGRvIG5vdCBwcm92aWRlCitjb25uZWN0aW9uIElEcyAobmFtZXMpIGZvciBHUElPcywgc28gaXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSBhbiBhZGRpdGlvbmFsCittZWNoYW5pc20gZm9yIHRoaXMgcHVycG9zZS4KKworU3lzdGVtcyBjb21wbGlhbnQgd2l0aCBBQ1BJIDUuMSBvciBuZXdlciBtYXkgcHJvdmlkZSBhIF9EU0QgY29uZmlndXJhdGlvbiBvYmplY3QKK3doaWNoLCBhbW9uZyBvdGhlciB0aGluZ3MsIG1heSBiZSB1c2VkIHRvIHByb3ZpZGUgY29ubmVjdGlvbiBJRHMgZm9yIHNwZWNpZmljCitHUElPcyBkZXNjcmliZWQgYnkgdGhlIEdwaW9JbygpL0dwaW9JbnQoKSByZXNvdXJjZXMgaW4gX0NSUy4gIElmIHRoYXQgaXMgdGhlCitjYXNlLCBpdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIEdQSU8gc3Vic3lzdGVtIGF1dG9tYXRpY2FsbHkuICBIb3dldmVyLCBpZiB0aGUKK19EU0QgaXMgbm90IHByZXNlbnQsIHRoZSBtYXBwaW5ncyBiZXR3ZWVuIEdwaW9JbygpL0dwaW9JbnQoKSByZXNvdXJjZXMgYW5kIEdQSU8KK2Nvbm5lY3Rpb24gSURzIG5lZWQgdG8gYmUgcHJvdmlkZWQgYnkgZGV2aWNlIGRyaXZlcnMuCisKK0ZvciBkZXRhaWxzIHJlZmVyIHRvIERvY3VtZW50YXRpb24vYWNwaS9ncGlvLXByb3BlcnRpZXMudHh0CisKKwogSW50ZXJhY3RpbmcgV2l0aCB0aGUgTGVnYWN5IEdQSU8gU3Vic3lzdGVtCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIE1hbnkga2VybmVsIHN1YnN5c3RlbXMgc3RpbGwgaGFuZGxlIEdQSU9zIHVzaW5nIHRoZSBsZWdhY3kgaW50ZWdlci1iYXNlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc1CmluZGV4IGM2YTVmZjEuLjY3NjkxYTBhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtNzUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTc1CkBAIC01Myw2ICs1MywxMSBAQAogICAgICAgICAgICAgICAgaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC90bXA3NQogICAgICAgICAgICAgICAgaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC90bXAxNzUKICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvdG1wMjc1CisgICogTlhQIExNNzVCCisgICAgUHJlZml4OiAnbG03NWInCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IG5vbmUKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTlhQIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubnhwLmNvbS9kb2N1bWVudHMvZGF0YV9zaGVldC9MTTc1Qi5wZGYKIAogQXV0aG9yOiBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05NTIzNCBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05NTIzNAppbmRleCBhMGU5NWRkLi4zMmI3NzdlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTUyMzQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTk1MjM0CkBAIC0yLDYgKzIsMTAgQEAKID09PT09PT09PT09PT09PT09PT09PQogCiBTdXBwb3J0ZWQgY2hpcHM6CisgICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciAvIFRleGFzIEluc3RydW1lbnRzIExNOTUyMzMKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTgsIDB4MmEsIDB4MmIKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC9sbTk1MjMzCiAgICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciAvIFRleGFzIEluc3RydW1lbnRzIExNOTUyMzQKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTgsIDB4NGQsIDB4NGUKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgd2Vic2l0ZQpAQCAtMTMsMTEgKzE3LDEyIEBACiBEZXNjcmlwdGlvbgogLS0tLS0tLS0tLS0KIAotTE05NTIzNCBpcyBhbiAxMS1iaXQgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3Igd2l0aCBhIDItd2lyZSBTeXN0ZW0gTWFuYWdlbWVudAotQnVzIChTTUJ1cykgaW50ZXJmYWNlIGFuZCBUcnVlVGhlcm0gdGVjaG5vbG9neSB0aGF0IGNhbiB2ZXJ5IGFjY3VyYXRlbHkgbW9uaXRvcgotdGhlIHRlbXBlcmF0dXJlIG9mIGZvdXIgcmVtb3RlIGRpb2RlcyBhcyB3ZWxsIGFzIGl0cyBvd24gdGVtcGVyYXR1cmUuCi1UaGUgZm91ciByZW1vdGUgZGlvZGVzIGNhbiBiZSBleHRlcm5hbCBkZXZpY2VzIHN1Y2ggYXMgbWljcm9wcm9jZXNzb3JzLAotZ3JhcGhpY3MgcHJvY2Vzc29ycyBvciBkaW9kZS1jb25uZWN0ZWQgMk4zOTA0cy4gVGhlIExNOTUyMzQncyBUcnVUaGVybQorTE05NTIzMyBhbmQgTE05NTIzNCBhcmUgMTEtYml0IGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29ycyB3aXRoIGEgMi13aXJlCitTeXN0ZW0gTWFuYWdlbWVudCBCdXMgKFNNQnVzKSBpbnRlcmZhY2UgYW5kIFRydWVUaGVybSB0ZWNobm9sb2d5Cit0aGF0IGNhbiB2ZXJ5IGFjY3VyYXRlbHkgbW9uaXRvciB0aGUgdGVtcGVyYXR1cmUgb2YgdHdvIChMTTk1MjMzKQorb3IgZm91ciAoTE05NTIzNCkgcmVtb3RlIGRpb2RlcyBhcyB3ZWxsIGFzIGl0cyBvd24gdGVtcGVyYXR1cmUuCitUaGUgcmVtb3RlIGRpb2RlcyBjYW4gYmUgZXh0ZXJuYWwgZGV2aWNlcyBzdWNoIGFzIG1pY3JvcHJvY2Vzc29ycywKK2dyYXBoaWNzIHByb2Nlc3NvcnMgb3IgZGlvZGUtY29ubmVjdGVkIDJOMzkwNHMuIFRoZSBjaGlwJ3MgVHJ1VGhlcm0KIGJldGEgY29tcGVuc2F0aW9uIHRlY2hub2xvZ3kgYWxsb3dzIHNlbnNpbmcgb2YgOTAgbm0gb3IgNjUgbm0gcHJvY2VzcwogdGhlcm1hbCBkaW9kZXMgYWNjdXJhdGVseS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTk1MjQ1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTk1MjQ1CmluZGV4IDc3ZWFmMjguLmQ3NTU5MDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05NTI0NQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTUyNDUKQEAgLTIsMTAgKzIsMTQgQEAKID09PT09PT09PT09PT09PT09PQogCiBTdXBwb3J0ZWQgY2hpcHM6Ci0gICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk1MjQ1CisgICogVEkgTE05NTIzNQorICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgxOCwgMHgyOSwgMHg0YworICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBUSSB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3LnRpLmNvbS9saXQvZHMvc3ltbGluay9sbTk1MjM1LnBkZgorICAqIFRJIC8gTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk1MjQ1CiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4LCAweDE5LCAweDI5LCAweDRjLCAweDRkCi0gICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3Igd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vbXBmL0xNL0xNOTUyNDUuaHRtbAorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBUSSB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3LnRpLmNvbS9saXQvZHMvc3ltbGluay9sbTk1MjQ1LnBkZgogCiAKIEF1dGhvcjogQWxleGFuZGVyIFN0ZWluIDxhbGV4YW5kZXIuc3RlaW5Ac3lzdGVjLWVsZWN0cm9uaWMuY29tPgpAQCAtMTMsMTAgKzE3LDEwIEBACiBEZXNjcmlwdGlvbgogLS0tLS0tLS0tLS0KIAotVGhlIExNOTUyNDUgaXMgYW4gMTEtYml0IGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29yIHdpdGggYSAyLXdpcmUgU3lzdGVtCitMTTk1MjM1IGFuZCBMTTk1MjQ1IGFyZSAxMS1iaXQgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3JzIHdpdGggYSAyLXdpcmUgU3lzdGVtCiBNYW5hZ2VtZW50IEJ1cyAoU01CdXMpIGludGVyZmFjZSBhbmQgVHJ1VGhlcm0gdGVjaG5vbG9neSB0aGF0IGNhbiBtb25pdG9yCiB0aGUgdGVtcGVyYXR1cmUgb2YgYSByZW1vdGUgZGlvZGUgYXMgd2VsbCBhcyBpdHMgb3duIHRlbXBlcmF0dXJlLgotVGhlIExNOTUyNDUgY2FuIGJlIHVzZWQgdG8gdmVyeSBhY2N1cmF0ZWx5IG1vbml0b3IgdGhlIHRlbXBlcmF0dXJlIG9mCitUaGUgY2hpcHMgY2FuIGJlIHVzZWQgdG8gdmVyeSBhY2N1cmF0ZWx5IG1vbml0b3IgdGhlIHRlbXBlcmF0dXJlIG9mCiBleHRlcm5hbCBkZXZpY2VzIHN1Y2ggYXMgbWljcm9wcm9jZXNzb3JzLgogCiBBbGwgdGVtcGVyYXR1cmUgdmFsdWVzIGFyZSBnaXZlbiBpbiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cy4gTG9jYWwgdGVtcGVyYXR1cmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbmN0Njc3NSBiL0RvY3VtZW50YXRpb24vaHdtb24vbmN0Njc3NQppbmRleCA0ZTllZjYwLi5mMGRkM2QyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDY3NzUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9uY3Q2Nzc1CkBAIC04LDExICs4LDE1IEBACiA9PT09PT09PT09PT09PT09PT09PT0KIAogU3VwcG9ydGVkIGNoaXBzOgorICAqIE51dm90b24gTkNUNjEwMkQvTkNUNjEwNEQvTkNUNjEwNkQKKyAgICBQcmVmaXg6ICduY3Q2MTA2JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSB0aGUgTnV2b3RvbiB3ZWIgc2l0ZQogICAqIE51dm90b24gTkNUNTU3MkQvTkNUNjc3MUYvTkNUNjc3MkYvTkNUNjc3NUYvVzgzNjc3SEctSQogICAgIFByZWZpeDogJ25jdDY3NzUnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IElTQSBhZGRyZXNzIHJldHJpZXZlZCBmcm9tIFN1cGVyIEkvTyByZWdpc3RlcnMKICAgICBEYXRhc2hlZXQ6IEF2YWlsYWJsZSBmcm9tIE51dm90b24gdXBvbiByZXF1ZXN0Ci0gICogTnV2b3RvbiBOQ1Q1NTc3RC9OQ1Q2Nzc2RC9OQ1Q2Nzc2RgorICAqIE51dm90b24gTkNUNTU3M0QvTkNUNTU3N0QvTkNUNjc3NkQvTkNUNjc3NkYKICAgICBQcmVmaXg6ICduY3Q2Nzc2JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCiAgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHVwb24gcmVxdWVzdApAQCAtMjAsNiArMjQsMTQgQEAKICAgICBQcmVmaXg6ICduY3Q2Nzc5JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCiAgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHVwb24gcmVxdWVzdAorICAqIE51dm90b24gTkNUNjc5MUQKKyAgICBQcmVmaXg6ICduY3Q2NzkxJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHVwb24gcmVxdWVzdAorICAqIE51dm90b24gTkNUNjc5MkQKKyAgICBQcmVmaXg6ICduY3Q2NzkyJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHVwb24gcmVxdWVzdAogCiBBdXRob3JzOgogICAgICAgICBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDc4MDIgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDc4MDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwMGY1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbmN0NzgwMgpAQCAtMCwwICsxLDMyIEBACitLZXJuZWwgZHJpdmVyIG5jdDc4MDIKKz09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogTnV2b3RvbiBOQ1Q3ODAyWQorICAgIFByZWZpeDogJ25jdDc4MDInCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDI4Li4weDJmCisgICAgRGF0YXNoZWV0OiBBdmFpbGFibGUgZnJvbSBOdXZvdG9uIHdlYiBzaXRlCisKK0F1dGhvcnM6CisgICAgICAgIEd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIE51dm90b24gTkNUNzgwMlkgaGFyZHdhcmUgbW9uaXRvcmluZworY2hpcC4gTkNUNzgwMlkgc3VwcG9ydHMgNiB0ZW1wZXJhdHVyZSBzZW5zb3JzLCA1IHZvbHRhZ2Ugc2Vuc29ycywgYW5kIDMgZmFuCitzcGVlZCBzZW5zb3JzLgorCitUaGUgY2hpcCBhbHNvIHN1cHBvcnRzIGludGVsbGlnZW50IGZhbiBzcGVlZCBjb250cm9sLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMKK25vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuCisKK1Rlc3RlZCBCb2FyZHMgYW5kIEJJT1MgVmVyc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBoYXMgYmVlbiByZXBvcnRlZCB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBib2FyZHMgYW5kCitCSU9TIHZlcnNpb25zLgorCitCb2FyZAkJCUJJT1MgdmVyc2lvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitLb250cm9uIENPTWUtYlNDMglDSFIyRTkzNC4wMDEuR0dPCitLb250cm9uIENPTWUtYklQMglDQ1IyRTIxMgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi90bXA0MDEgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3RtcDQwMQppbmRleCBmOTFlM2ZhLi44ZWI4OGU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3RtcDQwMQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3RtcDQwMQpAQCAtMTgsNiArMTgsMTAgQEAKICAgICBQcmVmaXg6ICd0bXA0MzInCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjLCAweDRkCiAgICAgRGF0YXNoZWV0OiBodHRwOi8vZm9jdXMudGkuY29tL2RvY3MvcHJvZC9mb2xkZXJzL3ByaW50L3RtcDQzMi5odG1sCisgICogVGV4YXMgSW5zdHJ1bWVudHMgVE1QNDM1CisgICAgUHJlZml4OiAndG1wNDM1JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgzNywgMHg0OCAtIDB4NGYKKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9mb2N1cy50aS5jb20vZG9jcy9wcm9kL2ZvbGRlcnMvcHJpbnQvdG1wNDM1Lmh0bWwKIAogQXV0aG9yczoKICAgICAgICAgIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CkBAIC0yNyw4ICszMSw4IEBACiAtLS0tLS0tLS0tLQogCiBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIFRleGFzIEluc3RydW1lbnRzIFRNUDQwMSwgVE1QNDExLAotVE1QNDMxLCBhbmQgVE1QNDMyIGNoaXBzLiBUaGVzZSBjaGlwcyBpbXBsZW1lbnQgb25lIG9yIHR3byByZW1vdGUgYW5kCi1vbmUgbG9jYWwgdGVtcGVyYXR1cmUgc2Vuc29ycy4gVGVtcGVyYXR1cmUgaXMgbWVhc3VyZWQgaW4gZGVncmVlcworVE1QNDMxLCBUTVA0MzIgYW5kIFRNUDQzNSBjaGlwcy4gVGhlc2UgY2hpcHMgaW1wbGVtZW50IG9uZSBvciB0d28gcmVtb3RlCithbmQgb25lIGxvY2FsIHRlbXBlcmF0dXJlIHNlbnNvcnMuIFRlbXBlcmF0dXJlIGlzIG1lYXN1cmVkIGluIGRlZ3JlZXMKIENlbHNpdXMuIFJlc29sdXRpb24gb2YgdGhlIHJlbW90ZSBzZW5zb3IgaXMgMC4wNjI1IGRlZ3JlZS4gTG9jYWwKIHNlbnNvciByZXNvbHV0aW9uIGNhbiBiZSBzZXQgdG8gMC41LCAwLjI1LCAwLjEyNSBvciAwLjA2MjUgZGVncmVlIChub3QKIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIHNvIGZhciwgc28gdXNpbmcgdGhlIGRlZmF1bHQgcmVzb2x1dGlvbiBvZiAwLjUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0IGIvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKaW5kZXggNmMwYjlmMi4uYmM0YmQ1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKQEAgLTQ3MSw2ICs0NzEsMTMgQEAKIAogICAgaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL35hbmRlcnNvbi8KIAorVHJpZ2dlciBLZHVtcCBvbiBXQVJOKCkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBrZXJuZWwgcGFyYW1ldGVyLCBwYW5pY19vbl93YXJuLCBjYWxscyBwYW5pYygpIGluIGFsbCBXQVJOKCkgcGF0aHMuICBUaGlzCit3aWxsIGNhdXNlIGEga2R1bXAgdG8gb2NjdXIgYXQgdGhlIHBhbmljKCkgY2FsbC4gIEluIGNhc2VzIHdoZXJlIGEgdXNlciB3YW50cwordG8gc3BlY2lmeSB0aGlzIGR1cmluZyBydW50aW1lLCAvcHJvYy9zeXMva2VybmVsL3BhbmljX29uX3dhcm4gY2FuIGJlIHNldCB0byAxCit0byBhY2hpZXZlIHRoZSBzYW1lIGJlaGF2aW91ci4KIAogQ29udGFjdAogPT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBkMDA2YmIyLi4xMGI4Y2MxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMjUyMSw2ICsyNTIxLDkgQEAKIAkJCXRpbWVvdXQgPCAwOiByZWJvb3QgaW1tZWRpYXRlbHkKIAkJCUZvcm1hdDogPHRpbWVvdXQ+CiAKKwlwYW5pY19vbl93YXJuCXBhbmljKCkgaW5zdGVhZCBvZiBXQVJOKCkuICBVc2VmdWwgdG8gY2F1c2Uga2R1bXAKKwkJCW9uIGEgV0FSTigpLgorCiAJY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMKIAkJCVJ1biBrZHVtcCBhZnRlciBydW5uaW5nIHBhbmljLW5vdGlmaWVycyBhbmQgZHVtcGluZwogCQkJa21zZy4gVGhpcyBvbmx5IGZvciB0aGUgdXNlcnMgd2hvIGRvdWJ0IGtkdW1wIGFsd2F5cwpAQCAtMjk1Miw2ICsyOTU1LDEzIEBACiAJCQlxdWllc2NlbnQgc3RhdGVzLiAgVW5pdHMgYXJlIGppZmZpZXMsIG1pbmltdW0KIAkJCXZhbHVlIGlzIG9uZSwgYW5kIG1heGltdW0gdmFsdWUgaXMgSFouCiAKKwlyY3V0cmVlLmt0aHJlYWRfcHJpbz0gCSBbS05MLEJPT1RdCisJCQlTZXQgdGhlIFNDSEVEX0ZJRk8gcHJpb3JpdHkgb2YgdGhlIFJDVQorCQkJcGVyLUNQVSBrdGhyZWFkcyAocmN1Yy9OKS4gVGhpcyB2YWx1ZSBpcyBhbHNvCisJCQl1c2VkIGZvciB0aGUgcHJpb3JpdHkgb2YgdGhlIFJDVSBib29zdCB0aHJlYWRzCisJCQkocmN1Yi9OKS4gVmFsaWQgdmFsdWVzIGFyZSAxLTk5IGFuZCB0aGUgZGVmYXVsdAorCQkJaXMgMSAodGhlIGxlYXN0LWZhdm9yZWQgcHJpb3JpdHkpLgorCiAJcmN1dHJlZS5yY3Vfbm9jYl9sZWFkZXJfc3RyaWRlPSBbS05MXQogCQkJU2V0IHRoZSBudW1iZXIgb2YgTk9DQiBrdGhyZWFkIGdyb3Vwcywgd2hpY2gKIAkJCWRlZmF1bHRzIHRvIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgbnVtYmVyIG9mCkBAIC0zMTAxLDYgKzMxMTEsMTUgQEAKIAkJCW1lc3NhZ2VzLiAgRGlzYWJsZSB3aXRoIGEgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsCiAJCQl0byB6ZXJvLgogCisJcmN1cGRhdGUucmN1X3NlbGZfdGVzdD0gW0tOTF0KKwkJCVJ1biB0aGUgUkNVIGVhcmx5IGJvb3Qgc2VsZiB0ZXN0cworCisJcmN1cGRhdGUucmN1X3NlbGZfdGVzdF9iaD0gW0tOTF0KKwkJCVJ1biB0aGUgUkNVIGJoIGVhcmx5IGJvb3Qgc2VsZiB0ZXN0cworCisJcmN1cGRhdGUucmN1X3NlbGZfdGVzdF9zY2hlZD0gW0tOTF0KKwkJCVJ1biB0aGUgUkNVIHNjaGVkIGVhcmx5IGJvb3Qgc2VsZiB0ZXN0cworCiAJcmRpbml0PQkJW0tOTF0KIAkJCUZvcm1hdDogPGZ1bGxfcGF0aD4KIAkJCVJ1biBzcGVjaWZpZWQgYmluYXJ5IGluc3RlYWQgb2YgL2luaXQgZnJvbSB0aGUgcmFtZGlzaywKQEAgLTM1MTMsNyArMzUzMiw3IEBACiAJCQlhcmUgc2F2ZWQuCiAKIAl0cmFjZV9idWZfc2l6ZT1ubltLTUddCi0JCQlbRlRSQUNFXSB3aWxsIHNldCB0cmFjaW5nIGJ1ZmZlciBzaXplLgorCQkJW0ZUUkFDRV0gd2lsbCBzZXQgdHJhY2luZyBidWZmZXIgc2l6ZSBvbiBlYWNoIGNwdS4KIAogCXRyYWNlX2V2ZW50PVtldmVudC1saXN0XQogCQkJW0ZUUkFDRV0gU2V0IGFuZCBzdGFydCBzcGVjaWZpZWQgdHJhY2UgZXZlbnRzIGluIG9yZGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbGdsb2NrLnR4dCBiL0RvY3VtZW50YXRpb24vbG9ja2luZy9sZ2xvY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTcxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbGdsb2NrLnR4dApAQCAtMCwwICsxLDE2NiBAQAorbGdsb2NrIC0gbG9jYWwvZ2xvYmFsIGxvY2tzIGZvciBtb3N0bHkgbG9jYWwgYWNjZXNzIHBhdHRlcm5zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3JpZ2luOiBOaWNrIFBpZ2dpbidzIFZGUyBzY2FsYWJpbGl0eSBzZXJpZXMgaW50cm9kdWNlZCBkdXJpbmcKKwkyLjYuMzUrKyBbMV0gWzJdCitMb2NhdGlvbjoga2VybmVsL2xvY2tpbmcvbGdsb2NrLmMKKwlpbmNsdWRlL2xpbnV4L2xnbG9jay5oCitVc2VyczogY3VycmVudGx5IG9ubHkgdGhlIFZGUyBhbmQgc3RvcF9tYWNoaW5lIHJlbGF0ZWQgY29kZQorCitEZXNpZ24gR29hbDoKKy0tLS0tLS0tLS0tLQorCitJbXByb3ZlIHNjYWxhYmlsaXR5IG9mIGdsb2JhbGx5IHVzZWQgbGFyZ2UgZGF0YSBzZXRzIHRoYXQgYXJlCitkaXN0cmlidXRlZCBvdmVyIGFsbCBDUFVzIGFzIHBlcl9jcHUgZWxlbWVudHMuCisKK1RvIG1hbmFnZSBnbG9iYWwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHBhcnRpdGlvbmVkIG92ZXIgYWxsIENQVXMKK2FzIHBlcl9jcHUgZWxlbWVudHMgYnV0IGNhbiBiZSBtb3N0bHkgaGFuZGxlZCBieSBDUFUgbG9jYWwgYWN0aW9ucworbGdsb2NrIHdpbGwgYmUgdXNlZCB3aGVyZSB0aGUgbWFqb3JpdHkgb2YgYWNjZXNzZXMgYXJlIGNwdSBsb2NhbAorcmVhZGluZyBhbmQgb2NjYXNpb25hbCBjcHUgbG9jYWwgd3JpdGluZyB3aXRoIHZlcnkgaW5mcmVxdWVudAorZ2xvYmFsIHdyaXRlIGFjY2Vzcy4KKworCisqIGRlYWwgd2l0aCB0aGluZ3MgbG9jYWxseSB3aGVuZXZlciBwb3NzaWJsZQorCS0gdmVyeSBmYXN0IGFjY2VzcyB0byB0aGUgbG9jYWwgcGVyX2NwdSBkYXRhCisJLSByZWFzb25hYmx5IGZhc3QgYWNjZXNzIHRvIHNwZWNpZmljIHBlcl9jcHUgZGF0YSBvbiBhIGRpZmZlcmVudAorCSAgQ1BVCisqIHdoaWxlIG1ha2luZyBnbG9iYWwgYWN0aW9uIHBvc3NpYmxlIHdoZW4gbmVlZGVkCisJLSBieSBleHBlbnNpdmUgYWNjZXNzIHRvIGFsbCBDUFVzIGxvY2tzIC0gZWZmZWN0aXZlbHkKKwkgIHJlc3VsdGluZyBpbiBhIGdsb2JhbGx5IHZpc2libGUgY3JpdGljYWwgc2VjdGlvbi4KKworRGVzaWduOgorLS0tLS0tLQorCitCYXNpY2FsbHkgaXQgaXMgYW4gYXJyYXkgb2YgcGVyX2NwdSBzcGlubG9ja3Mgd2l0aCB0aGUKK2xnX2xvY2FsX2xvY2svdW5sb2NrIGFjY2Vzc2luZyB0aGUgbG9jYWwgQ1BVcyBsb2NrIG9iamVjdCBhbmQgdGhlCitsZ19sb2NhbF9sb2NrX2NwdS91bmxvY2tfY3B1IGFjY2Vzc2luZyBhIHJlbW90ZSBDUFVzIGxvY2sgb2JqZWN0Cit0aGUgbGdfbG9jYWxfbG9jayBoYXMgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGFzIG1pZ3JhdGlvbiBwcm90ZWN0aW9uIHNvCit0aGF0IHRoZSByZWZlcmVuY2UgdG8gdGhlIGxvY2FsIENQVXMgbG9jayBkb2VzIG5vdCBnbyBvdXQgb2Ygc2NvcGUuCitEdWUgdG8gdGhlIGxnX2xvY2FsX2xvY2svdW5sb2NrIG9ubHkgdG91Y2hpbmcgY3B1LWxvY2FsIHJlc291cmNlcyBpdAoraXMgZmFzdC4gVGFraW5nIHRoZSBsb2NhbCBsb2NrIG9uIGEgZGlmZmVyZW50IENQVSB3aWxsIGJlIG1vcmUKK2V4cGVuc2l2ZSBidXQgc3RpbGwgcmVsYXRpdmVseSBjaGVhcC4KKworT25lIGNhbiByZWxheCB0aGUgbWlncmF0aW9uIGNvbnN0cmFpbnRzIGJ5IGFjcXVpcmluZyB0aGUgY3VycmVudAorQ1BVcyBsb2NrIHdpdGggbGdfbG9jYWxfbG9ja19jcHUsIHJlbWVtYmVyIHRoZSBjcHUsIGFuZCByZWxlYXNlIHRoYXQKK2xvY2sgYXQgdGhlIGVuZCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBldmVuIGlmIG1pZ3JhdGVkLiBUaGlzIHNob3VsZAorZ2l2ZSBtb3N0IG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0cyB3aXRob3V0IGluaGliaXRpbmcgbWlncmF0aW9uCit0aG91Z2ggbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9ucyBmb3IgbmVzdGluZyBvZiBsZ2xvY2tzIGFuZAorY29uc2lkZXJhdGlvbiBvZiBkZWFkbG9ja3Mgd2l0aCBsZ19nbG9iYWxfbG9jay4KKworVGhlIGxnX2dsb2JhbF9sb2NrL3VubG9jayBsb2NrcyBhbGwgdW5kZXJseWluZyBzcGlubG9ja3Mgb2YgYWxsCitwb3NzaWJsZSBDUFVzIChpbmNsdWRpbmcgdGhvc2Ugb2ZmLWxpbmUpLiBUaGUgcHJlZW1wdGlvbiBkaXNhYmxlL2VuYWJsZQorYXJlIG5lZWRlZCBpbiB0aGUgbm9uLVJUIGtlcm5lbHMgdG8gcHJldmVudCBkZWFkbG9ja3MgbGlrZToKKworICAgICAgICAgICAgICAgICAgICAgb24gY3B1IDEKKworICAgICAgICAgICAgICB0YXNrIEEgICAgICAgICAgdGFzayBCCisgICAgICAgICBsZ19nbG9iYWxfbG9jaworICAgICAgICAgICBnb3QgY3B1IDAgbG9jaworICAgICAgICAgICAgICAgICA8PDw8IHByZWVtcHQgPDw8PAorICAgICAgICAgICAgICAgICAgICAgICAgIGxnX2xvY2FsX2xvY2tfY3B1IGZvciBjcHUgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpbiBvbiBjcHUgMCBsb2NrCisKK09uIC1SVCB0aGlzIGRlYWRsb2NrIHNjZW5hcmlvIGlzIHJlc29sdmVkIGJ5IHRoZSBhcmNoX3NwaW5fbG9ja3MgaW4gdGhlCitsZ2xvY2tzIGJlaW5nIHJlcGxhY2VkIGJ5IHJ0X211dGV4ZXMgd2hpY2ggcmVzb2x2ZSB0aGUgYWJvdmUgZGVhZGxvY2sKK2J5IGJvb3N0aW5nIHRoZSBsb2NrLWhvbGRlci4KKworCitJbXBsZW1lbnRhdGlvbjoKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW5pdGlhbCBsZ2xvY2sgaW1wbGVtZW50YXRpb24gZnJvbSBOaWNrIFBpZ2dpbiB1c2VkIHNvbWUgY29tcGxleAorbWFjcm9zIHRvIGdlbmVyYXRlIHRoZSBsZ2xvY2svYnJsb2NrIGluIGxnbG9jay5oIC0gdGhleSB3ZXJlIGxhdGVyCit0dXJuZWQgaW50byBhIHNldCBvZiBmdW5jdGlvbnMgYnkgQW5kaSBLbGVlbiBbN10uIFRoZSBjaGFuZ2UgdG8gZnVuY3Rpb25zCit3YXMgbW90aXZhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBtdWx0aXBsZSBsb2NrIHVzZXJzIGFuZCBhbHNvIGJ5IHRoZW0KK2JlaW5nIGVhc2llciB0byBtYWludGFpbiB0aGFuIHRoZSBnZW5lcmF0aW5nIG1hY3Jvcy4gVGhpcyBjaGFuZ2UgdG8KK2Z1bmN0aW9ucyBpcyBhbHNvIHRoZSBiYXNpcyB0byBlbGltaW5hdGVkIHRoZSByZXN0cmljdGlvbiBvZiBub3QKK2JlaW5nIGluaXRpYWxpemVhYmxlIGluIGtlcm5lbCBtb2R1bGVzICh0aGUgcmVtYWluaW5nIHByb2JsZW0gaXMgdGhhdAorbG9ja3MgYXJlIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemVkIC0gc2VlIGxvY2tkZXAtZGVzaWduLnR4dCkKKworRGVjbGFyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICNpbmNsdWRlIDxsaW51eC9sZ2xvY2suaD4KKworICBERUZJTkVfTEdMT0NLKG5hbWUpCisgIG9yOgorICBERUZJTkVfU1RBVElDX0xHTE9DSyhuYW1lKTsKKworICBsZ19sb2NrX2luaXQoJm5hbWUsICJsb2NrZGVwX25hbWVfc3RyaW5nIik7CisKKyAgb24gVVAgdGhpcyBpcyBtYXBwZWQgdG8gREVGSU5FX1NQSU5MT0NLKG5hbWUpIGluIGJvdGggY2FzZXMsIG5vdGUKKyAgYWxzbyB0aGF0IGFzIG9mIDMuMTgtcmM2IGFsbCBkZWNsYXJhdGlvbiBpbiB1c2UgYXJlIG9mIHRoZSBfU1RBVElDXworICB2YXJpYW50IChhbmQgaXQgc2VlbXMgdGhhdCB0aGUgbm9uLXN0YXRpYyB3YXMgbmV2ZXIgaW4gdXNlKS4KKyAgbGdfbG9ja19pbml0IGlzIGluaXRpYWxpemluZyB0aGUgbG9ja2RlcCBtYXAgb25seS4KKworVXNhZ2U6CistLS0tLS0KKworRnJvbSB0aGUgbG9ja2luZyBzZW1hbnRpY3MgaXQgaXMgYSBzcGlubG9jay4gSXQgY291bGQgYmUgY2FsbGVkIGEKK2xvY2FsaXR5IGF3YXJlIHNwaW5sb2NrLiBsZ19sb2NhbF8qIGJlaGF2ZXMgbGlrZSBhIHBlcl9jcHUKK3NwaW5sb2NrIGFuZCBsZ19nbG9iYWxfKiBsaWtlIGEgZ2xvYmFsIHNwaW5sb2NrLgorTm8gc3VycHJpc2VzIGluIHRoZSBBUEkuCisKKyAgbGdfbG9jYWxfbG9jaygqbGdsb2NrKTsKKyAgICAgYWNjZXNzIHRvIHByb3RlY3RlZCBwZXJfY3B1IG9iamVjdCBvbiB0aGlzIENQVQorICBsZ19sb2NhbF91bmxvY2soKmxnbG9jayk7CisKKyAgbGdfbG9jYWxfbG9ja19jcHUoKmxnbG9jaywgY3B1KTsKKyAgICAgYWNjZXNzIHRvIHByb3RlY3RlZCBwZXJfY3B1IG9iamVjdCBvbiBvdGhlciBDUFUgY3B1CisgIGxnX2xvY2FsX3VubG9ja19jcHUoKmxnbG9jaywgY3B1KTsKKworICBsZ19nbG9iYWxfbG9jaygqbGdsb2NrKTsKKyAgICAgYWNjZXNzIGFsbCBwcm90ZWN0ZWQgcGVyX2NwdSBvYmplY3RzIG9uIGFsbCBDUFVzCisgIGxnX2dsb2JhbF91bmxvY2soKmxnbG9jayk7CisKKyAgVGhlcmUgYXJlIG5vIF90cnlsb2NrIHZhcmlhbnRzIG9mIHRoZSBsZ2xvY2tzLgorCitOb3RlIHRoYXQgdGhlIGxnX2dsb2JhbF9sb2NrL3VubG9jayBoYXMgdG8gaXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJsZQorQ1BVcyByYXRoZXIgdGhhbiB0aGUgYWN0dWFsbHkgcHJlc2VudCBDUFVzIG9yIGEgQ1BVIGNvdWxkIGdvIG9mZi1saW5lCit3aXRoIGEgaGVsZCBsb2NrIFs0XSBhbmQgdGhhdCBtYWtlcyBpdCB2ZXJ5IGV4cGVuc2l2ZS4gQSBkaXNjdXNzaW9uIG9uCit0aGVzZSBpc3N1ZXMgY2FuIGJlIGZvdW5kIGF0IFs1XQorCitDb25zdHJhaW50czoKKy0tLS0tLS0tLS0tLQorCisgICogY3VycmVudGx5IHRoZSBkZWNsYXJhdGlvbiBvZiBsZ2xvY2tzIGluIGtlcm5lbCBtb2R1bGVzIGlzIG5vdAorICAgIHBvc3NpYmxlLCB0aG91Z2ggdGhpcyBzaG91bGQgYmUgZG9hYmxlIHdpdGggbGl0dGxlIGNoYW5nZS4KKyAgKiBsZ2xvY2tzIGFyZSBub3QgcmVjdXJzaXZlLgorICAqIHN1aXRhYmxlIGZvciBjb2RlIHRoYXQgY2FuIGRvIG1vc3Qgb3BlcmF0aW9ucyBvbiB0aGUgQ1BVIGxvY2FsCisgICAgZGF0YSBhbmQgd2lsbCB2ZXJ5IHJhcmVseSBuZWVkIHRoZSBnbG9iYWwgbG9jaworICAqIGxnX2dsb2JhbF9sb2NrL3VubG9jayBpcyAqdmVyeSogZXhwZW5zaXZlIGFuZCBkb2VzIG5vdCBzY2FsZQorICAqIG9uIFVQIHN5c3RlbXMgYWxsIGxnXyogcHJpbWl0aXZlcyBhcmUgc2ltcGx5IHNwaW5sb2NrcworICAqIGluIFBSRUVNUFRfUlQgdGhlIHNwaW5sb2NrIGJlY29tZXMgYW4gcnQtbXV0ZXggYW5kIGNhbiBzbGVlcCBidXQKKyAgICBkb2VzIG5vdCBjaGFuZ2UgdGhlIHRhc2tzIHN0YXRlIHdoaWxlIHNsZWVwaW5nIFs2XS4KKyAgKiBpbiBQUkVFTVBUX1JUIHRoZSBwcmVlbXB0X2Rpc2FibGUvZW5hYmxlIGluIGxnX2xvY2FsX2xvY2svdW5sb2NrCisgICAgaXMgZG93bmdyYWRlZCB0byBhIG1pZ3JhdGVfZGlzYWJsZS9lbmFibGUsIHRoZSBvdGhlcgorICAgIHByZWVtcHRfZGlzYWJsZS9lbmFibGUgYXJlIGRvd25ncmFkZWQgdG8gYmFycmllcnMgWzZdLgorICAgIFRoZSBkZWFkbG9jayBub3RlZCBmb3Igbm9uLVJUIGFib3ZlIGlzIHJlc29sdmVkIGR1ZSB0byBydF9tdXRleGVzCisgICAgYm9vc3RpbmcgdGhlIGxvY2staG9sZGVyIGluIHRoaXMgY2FzZSB3aGljaCBhcmNoX3NwaW5fbG9ja3MgZG8KKyAgICBub3QgZG8uCisKK2xnbG9ja3Mgd2VyZSBkZXNpZ25lZCBmb3IgdmVyeSBzcGVjaWZpYyBwcm9ibGVtcyBpbiB0aGUgVkZTIGFuZCBwcm9iYWJseQorb25seSBhcmUgdGhlIHJpZ2h0IGFuc3dlciBpbiB0aGVzZSBjb3JuZXIgY2FzZXMuIEFueSBuZXcgdXNlciB0aGF0IGxvb2tzCithdCBsZ2xvY2tzIHByb2JhYmx5IHdhbnRzIHRvIGxvb2sgYXQgdGhlIHNlcWxvY2sgYW5kIFJDVSBhbHRlcm5hdGl2ZXMgYXMKK2hlciBmaXJzdCBjaG9pY2UuIFRoZXJlIGFyZSBhbHNvIGVmZm9ydHMgdG8gcmVzb2x2ZSB0aGUgUkNVIGlzc3VlcyB0aGF0CitjdXJyZW50bHkgcHJldmVudCB1c2luZyBSQ1UgaW4gcGxhY2Ugb2YgdmlldyByZW1haW5pbmcgbGdsb2Nrcy4KKworTm90ZSBvbiBicmxvY2sgaGlzdG9yeToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnQmlnIFJlYWRlcicgcmVhZC13cml0ZSBzcGlubG9ja3Mgd2VyZSBvcmlnaW5hbGx5IGludHJvZHVjZWQgYnkKK0luZ28gTW9sbmFyIGluIDIwMDAgKDIuNC8yLjUga2VybmVsIHNlcmllcykgYW5kIHJlbW92ZWQgaW4gMjAwMy4gVGhleQorbGF0ZXIgd2VyZSBpbnRyb2R1Y2VkIGJ5IHRoZSBWRlMgc2NhbGFiaWxpdHkgcGF0Y2ggc2V0IGluIDIuNiBzZXJpZXMKK2FnYWluIGFzIHRoZSAiYmlnIHJlYWRlciBsb2NrIiBicmxvY2sgWzJdIHZhcmlhbnQgb2YgbGdsb2NrIHdoaWNoIGhhcworYmVlbiByZXBsYWNlZCBieSBzZXFsb2NrIHByaW1pdGl2ZXMgb3IgYnkgUkNVIGJhc2VkIHByaW1pdGl2ZXMgaW4gdGhlCiszLjEzIGtlcm5lbCBzZXJpZXMgYXMgd2FzIHN1Z2dlc3RlZCBpbiBbM10gaW4gMjAwMy4gVGhlIGJybG9jayB3YXMKK2VudGlyZWx5IHJlbW92ZWQgaW4gdGhlIDMuMTMga2VybmVsIHNlcmllcy4KKworTGluazogMSBodHRwOi8vbGttbC5vcmcvbGttbC8yMDEwLzgvMi84MQorTGluazogMiBodHRwOi8vbHduLm5ldC9BcnRpY2xlcy80MDE3MzgvCitMaW5rOiAzIGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDMvMy85LzIwNQorTGluazogNCBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMS84LzI0LzE4NQorTGluazogNSBodHRwOi8vbGttbC5vcmcvbGttbC8yMDExLzEyLzE4LzE4OQorTGluazogNiBodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcHJvamVjdHMvcnQvCisgICAgICAgIHBhdGNoIHNlcmllcyAtIGxnbG9ja3MtcnQucGF0Y2gucGF0Y2gKK0xpbms6IDcgaHR0cDovL2xrbWwub3JnL2xrbWwvMjAxMi8zLzUvMjYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAppbmRleCAyMmE5NjljLi43ZWUyYWU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CkBAIC0xMjEsMjIgKzEyMSwyMiBAQAogVGhlIHNldCBvZiBhY2Nlc3NlcyBhcyBzZWVuIGJ5IHRoZSBtZW1vcnkgc3lzdGVtIGluIHRoZSBtaWRkbGUgY2FuIGJlIGFycmFuZ2VkCiBpbiAyNCBkaWZmZXJlbnQgY29tYmluYXRpb25zOgogCi0JU1RPUkUgQT0zLAlTVE9SRSBCPTQsCXg9TE9BRCBBLT4zLAl5PUxPQUQgQi0+NAotCVNUT1JFIEE9MywJU1RPUkUgQj00LAl5PUxPQUQgQi0+NCwJeD1MT0FEIEEtPjMKLQlTVE9SRSBBPTMsCXg9TE9BRCBBLT4zLAlTVE9SRSBCPTQsCXk9TE9BRCBCLT40Ci0JU1RPUkUgQT0zLAl4PUxPQUQgQS0+MywJeT1MT0FEIEItPjIsCVNUT1JFIEI9NAotCVNUT1JFIEE9MywJeT1MT0FEIEItPjIsCVNUT1JFIEI9NCwJeD1MT0FEIEEtPjMKLQlTVE9SRSBBPTMsCXk9TE9BRCBCLT4yLAl4PUxPQUQgQS0+MywJU1RPUkUgQj00Ci0JU1RPUkUgQj00LAlTVE9SRSBBPTMsCXg9TE9BRCBBLT4zLAl5PUxPQUQgQi0+NAorCVNUT1JFIEE9MywJU1RPUkUgQj00LAl5PUxPQUQgQS0+MywJeD1MT0FEIEItPjQKKwlTVE9SRSBBPTMsCVNUT1JFIEI9NCwJeD1MT0FEIEItPjQsCXk9TE9BRCBBLT4zCisJU1RPUkUgQT0zLAl5PUxPQUQgQS0+MywJU1RPUkUgQj00LAl4PUxPQUQgQi0+NAorCVNUT1JFIEE9MywJeT1MT0FEIEEtPjMsCXg9TE9BRCBCLT4yLAlTVE9SRSBCPTQKKwlTVE9SRSBBPTMsCXg9TE9BRCBCLT4yLAlTVE9SRSBCPTQsCXk9TE9BRCBBLT4zCisJU1RPUkUgQT0zLAl4PUxPQUQgQi0+MiwJeT1MT0FEIEEtPjMsCVNUT1JFIEI9NAorCVNUT1JFIEI9NCwJU1RPUkUgQT0zLAl5PUxPQUQgQS0+MywJeD1MT0FEIEItPjQKIAlTVE9SRSBCPTQsIC4uLgogCS4uLgogCiBhbmQgY2FuIHRodXMgcmVzdWx0IGluIGZvdXIgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXM6CiAKLQl4ID09IDEsIHkgPT0gMgotCXggPT0gMSwgeSA9PSA0Ci0JeCA9PSAzLCB5ID09IDIKLQl4ID09IDMsIHkgPT0gNAorCXggPT0gMiwgeSA9PSAxCisJeCA9PSAyLCB5ID09IDMKKwl4ID09IDQsIHkgPT0gMQorCXggPT0gNCwgeSA9PSAzCiAKIAogRnVydGhlcm1vcmUsIHRoZSBzdG9yZXMgY29tbWl0dGVkIGJ5IGEgQ1BVIHRvIHRoZSBtZW1vcnkgc3lzdGVtIG1heSBub3QgYmUKQEAgLTY5NCw2ICs2OTQsMjQgQEAKIGlkZW50aWNhbCwgYXMgbm90ZWQgZWFybGllciwgdGhlIGNvbXBpbGVyIGNvdWxkIHB1bGwgdGhpcyBzdG9yZSBvdXRzaWRlCiBvZiB0aGUgJ2lmJyBzdGF0ZW1lbnQuCiAKK1lvdSBtdXN0IGFsc28gYmUgY2FyZWZ1bCBub3QgdG8gcmVseSB0b28gbXVjaCBvbiBib29sZWFuIHNob3J0LWNpcmN1aXQKK2V2YWx1YXRpb24uICBDb25zaWRlciB0aGlzIGV4YW1wbGU6CisKKwlxID0gQUNDRVNTX09OQ0UoYSk7CisJaWYgKGEgfHwgMSA+IDApCisJCUFDQ0VTU19PTkNFKGIpID0gMTsKKworQmVjYXVzZSB0aGUgc2Vjb25kIGNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZSwgdGhlIGNvbXBpbGVyIGNhbiB0cmFuc2Zvcm0KK3RoaXMgZXhhbXBsZSBhcyBmb2xsb3dpbmcsIGRlZmVhdGluZyBjb250cm9sIGRlcGVuZGVuY3k6CisKKwlxID0gQUNDRVNTX09OQ0UoYSk7CisJQUNDRVNTX09OQ0UoYikgPSAxOworCitUaGlzIGV4YW1wbGUgdW5kZXJzY29yZXMgdGhlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGNhbm5vdAorb3V0LWd1ZXNzIHlvdXIgY29kZS4gIE1vcmUgZ2VuZXJhbGx5LCBhbHRob3VnaCBBQ0NFU1NfT05DRSgpIGRvZXMgZm9yY2UKK3RoZSBjb21waWxlciB0byBhY3R1YWxseSBlbWl0IGNvZGUgZm9yIGEgZ2l2ZW4gbG9hZCwgaXQgZG9lcyBub3QgZm9yY2UKK3RoZSBjb21waWxlciB0byB1c2UgdGhlIHJlc3VsdHMuCisKIEZpbmFsbHksIGNvbnRyb2wgZGVwZW5kZW5jaWVzIGRvIC1ub3QtIHByb3ZpZGUgdHJhbnNpdGl2aXR5LiAgVGhpcyBpcwogZGVtb25zdHJhdGVkIGJ5IHR3byByZWxhdGVkIGV4YW1wbGVzLCB3aXRoIHRoZSBpbml0aWFsIHZhbHVlcyBvZgogeCBhbmQgeSBib3RoIGJlaW5nIHplcm86CkBAIC0yNDY1LDEwICsyNDgzLDE1IEBACiAgICAgIFBsZWFzZSByZWZlciB0byB0aGUgUENJIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaW50ZXJhY3Rpb25zCiAgICAgIGJldHdlZW4gUENJIHRyYW5zYWN0aW9ucy4KIAotICgqKSByZWFkWF9yZWxheGVkKCkKKyAoKikgcmVhZFhfcmVsYXhlZCgpLCB3cml0ZVhfcmVsYXhlZCgpCiAKLSAgICAgVGhlc2UgYXJlIHNpbWlsYXIgdG8gcmVhZFgoKSwgYnV0IGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBvcmRlcmVkIGluIGFueQotICAgICB3YXkuIEJlIGF3YXJlIHRoYXQgdGhlcmUgaXMgbm8gSS9PIHJlYWQgYmFycmllciBhdmFpbGFibGUuCisgICAgIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHJlYWRYKCkgYW5kIHdyaXRlWCgpLCBidXQgcHJvdmlkZSB3ZWFrZXIgbWVtb3J5CisgICAgIG9yZGVyaW5nIGd1YXJhbnRlZXMuIFNwZWNpZmljYWxseSwgdGhleSBkbyBub3QgZ3VhcmFudGVlIG9yZGVyaW5nIHdpdGgKKyAgICAgcmVzcGVjdCB0byBub3JtYWwgbWVtb3J5IGFjY2Vzc2VzIChlLmcuIERNQSBidWZmZXJzKSBub3IgZG8gdGhleSBndWFyYW50ZWUKKyAgICAgb3JkZXJpbmcgd2l0aCByZXNwZWN0IHRvIExPQ0sgb3IgVU5MT0NLIG9wZXJhdGlvbnMuIElmIHRoZSBsYXR0ZXIgaXMKKyAgICAgcmVxdWlyZWQsIGFuIG1taW93YigpIGJhcnJpZXIgY2FuIGJlIHVzZWQuIE5vdGUgdGhhdCByZWxheGVkIGFjY2Vzc2VzIHRvCisgICAgIHRoZSBzYW1lIHBlcmlwaGVyYWwgYXJlIGd1YXJhbnRlZWQgdG8gYmUgb3JkZXJlZCB3aXRoIHJlc3BlY3QgdG8gZWFjaAorICAgICBvdGhlci4KIAogICgqKSBpb3JlYWRYKCksIGlvd3JpdGVYKCkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uaW9zMi9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL25pb3MyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTRhNjdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uaW9zMi9SRUFETUUKQEAgLTAsMCArMSwyMyBAQAorTGludXggb24gdGhlIE5pb3MgSUkgYXJjaGl0ZWN0dXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhIHBvcnQgb2YgTGludXggdG8gTmlvcyBJSSAobmlvczIpIHByb2Nlc3Nvci4KKworSW4gb3JkZXIgdG8gY29tcGlsZSBmb3IgTmlvcyBJSSwgeW91IG5lZWQgYSB2ZXJzaW9uIG9mIEdDQyB3aXRoIHN1cHBvcnQgZm9yIHRoZSBnZW5lcmljCitzeXN0ZW0gY2FsbCBBQkkuIFBsZWFzZSBzZWUgdGhpcyBsaW5rIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBjb21waWxpbmcgYW5kIGJvb3RpbmcKK3NvZnR3YXJlIGZvciB0aGUgTmlvcyBJSSBwbGF0Zm9ybToKK2h0dHA6Ly93d3cucm9ja2V0Ym9hcmRzLm9yZy9mb3N3aWtpL0RvY3VtZW50YXRpb24vTmlvc0lJTGludXhVc2VyTWFudWFsCisKK0ZvciByZWZlcmVuY2UsIHBsZWFzZSBzZWUgdGhlIGZvbGxvd2luZyBsaW5rOgoraHR0cDovL3d3dy5hbHRlcmEuY29tL2xpdGVyYXR1cmUvbGl0LW5pbzIuanNwCisKK1doYXQgaXMgTmlvcyBJST8KKz09PT09PT09PT09PT09PT0KK05pb3MgSUkgaXMgYSAzMi1iaXQgZW1iZWRkZWQtcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIHRoZQorQWx0ZXJhIGZhbWlseSBvZiBGUEdBcy4gSW4gb3JkZXIgdG8gc3VwcG9ydCBMaW51eCwgTmlvcyBJSSBuZWVkcyB0byBiZSBjb25maWd1cmVkCit3aXRoIE1NVSBhbmQgaGFyZHdhcmUgbXVsdGlwbGllciBlbmFibGVkLgorCitOaW9zIElJIEFCSQorPT09PT09PT09PT0KK1BsZWFzZSByZWZlciB0byBjaGFwdGVyICJBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIiBpbiBOaW9zIElJIFByb2Nlc3NvciBSZWZlcmVuY2UKK0hhbmRib29rLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2xpYnNhcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbGlic2FzLnR4dAppbmRleCAzY2M5Yzc4Li44Y2FjNjQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvbGlic2FzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbGlic2FzLnR4dApAQCAtMjI2LDkgKzIyNiw2IEBACiAJbXlfaGEtPnNhc19oYS5sbGRkX2Rldl9mb3VuZCA9IG15X2Rldl9mb3VuZDsKIAlteV9oYS0+c2FzX2hhLmxsZGRfZGV2X2dvbmUgPSBteV9kZXZfZ29uZTsKIAotCW15X2hhLT5zYXNfaGEubGxkZF9tYXhfZXhlY3V0ZV9udW0gPSBsbGRkX21heF9leGVjdXRlX251bTsgKDEpCi0KLQlteV9oYS0+c2FzX2hhLmxsZGRfcXVldWVfc2l6ZSA9IGhhX2Nhbl9xdWV1ZTsKIAlteV9oYS0+c2FzX2hhLmxsZGRfZXhlY3V0ZV90YXNrID0gbXlfZXhlY3V0ZV90YXNrOwogCiAJbXlfaGEtPnNhc19oYS5sbGRkX2Fib3J0X3Rhc2sgICAgID0gbXlfYWJvcnRfdGFzazsKQEAgLTI0NywyOCArMjQ0LDYgQEAKIAlyZXR1cm4gc2FzX3JlZ2lzdGVyX2hhKCZteV9oYS0+c2FzX2hhKTsKIH0KIAotKDEpIFRoaXMgaXMgbm9ybWFsbHkgYSBMTEREIHBhcmFtZXRlciwgc29tZXRoaW5nIG9mIHRoZQotbGluZXMgb2YgYSB0YXNrIGNvbGxlY3Rvci4gIFdoYXQgaXQgdGVsbHMgdGhlIFNBUyBMYXllciBpcwotd2hldGhlciB0aGUgU0FTIGxheWVyIHNob3VsZCBydW4gaW4gRGlyZWN0IE1vZGUgKGRlZmF1bHQ6Ci12YWx1ZSAwIG9yIDEpIG9yIFRhc2sgQ29sbGVjdG9yIE1vZGUgKHZhbHVlIGdyZWF0ZXIgdGhhbiAxKS4KLQotSW4gRGlyZWN0IE1vZGUsIHRoZSBTQVMgTGF5ZXIgY2FsbHMgRXhlY3V0ZSBUYXNrIGFzIHNvb24gYXMKLWl0IGhhcyBhIGNvbW1hbmQgdG8gc2VuZCB0byB0aGUgU0RTLCBfYW5kXyB0aGlzIGlzIGEgc2luZ2xlCi1jb21tYW5kLCBpLmUuIG5vdCBsaW5rZWQuCi0KLVNvbWUgaGFyZHdhcmUgKGUuZy4gYWljOTR4eCkgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIERNQSBtb3JlCi10aGFuIG9uZSB0YXNrIGF0IGEgdGltZSAoaW50ZXJydXB0KSBmcm9tIGhvc3QgbWVtb3J5LiAgVGFzawotQ29sbGVjdG9yIE1vZGUgaXMgYW4gb3B0aW9uYWwgZmVhdHVyZSBmb3IgSEFzIHdoaWNoIHN1cHBvcnQKLXRoaXMgaW4gdGhlaXIgaGFyZHdhcmUuICAoQWdhaW4sIGl0IGlzIGNvbXBsZXRlbHkgb3B0aW9uYWwKLWV2ZW4gaWYgeW91ciBoYXJkd2FyZSBzdXBwb3J0cyBpdC4pCi0KLUluIFRhc2sgQ29sbGVjdG9yIE1vZGUsIHRoZSBTQVMgTGF5ZXIgd291bGQgZG8gX25hdHVyYWxfCi1jb2FsZXNjaW5nIG9mIHRhc2tzIGFuZCBhdCB0aGUgYXBwcm9wcmlhdGUgbW9tZW50IGl0IHdvdWxkCi1jYWxsIHlvdXIgZHJpdmVyIHRvIERNQSBtb3JlIHRoYW4gb25lIHRhc2sgaW4gYSBzaW5nbGUgSEEKLWludGVycnVwdC4gRE1CUyBtYXkgd2FudCB0byB1c2UgdGhpcyBieSBpbnNtb2QvbW9kcHJvYmUKLXNldHRpbmcgdGhlIGxsZGRfbWF4X2V4ZWN1dGVfbnVtIHRvIHNvbWV0aGluZyBncmVhdGVyIHRoYW4KLTEuCi0KICgyKSBTQVMgMS4xIGRvZXMgbm90IGRlZmluZSBJX1QgTmV4dXMgUmVzZXQgVE1GLgogCiBFdmVudHMKQEAgLTMyNSw3MSArMzAwLDIyIEBACiAKIFRoZSBFeGVjdXRlIENvbW1hbmQgU0NTSSBSUEM6CiAKLQlpbnQgKCpsbGRkX2V4ZWN1dGVfdGFzaykoc3RydWN0IHNhc190YXNrICosIGludCBudW0sCi0JCQkJIHVuc2lnbmVkIGxvbmcgZ2ZwX2ZsYWdzKTsKKwlpbnQgKCpsbGRkX2V4ZWN1dGVfdGFzaykoc3RydWN0IHNhc190YXNrICosIGdmcF90IGdmcF9mbGFncyk7CiAKLVVzZWQgdG8gcXVldWUgYSB0YXNrIHRvIHRoZSBTQVMgTExERC4gIEB0YXNrIGlzIHRoZSB0YXNrcyB0bwotYmUgZXhlY3V0ZWQuICBAbnVtIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIHRhc2tzIGJlaW5nCi1xdWV1ZWQgYXQgdGhpcyBmdW5jdGlvbiBjYWxsICh0aGV5IGFyZSBsaW5rZWQgbGlzdGVkIHZpYQotdGFzazo6bGlzdCksIEBnZnBfbWFzayBzaG91bGQgYmUgdGhlIGdmcF9tYXNrIGRlZmluaW5nIHRoZQotY29udGV4dCBvZiB0aGUgY2FsbGVyLgorVXNlZCB0byBxdWV1ZSBhIHRhc2sgdG8gdGhlIFNBUyBMTERELiAgQHRhc2sgaXMgdGhlIHRhc2sgdG8gYmUgZXhlY3V0ZWQuCitAZ2ZwX21hc2sgaXMgdGhlIGdmcF9tYXNrIGRlZmluaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsZXIuCiAKIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGltcGxlbWVudCB0aGUgRXhlY3V0ZSBDb21tYW5kIFNDU0kgUlBDLAotb3IgaWYgeW91J3JlIHNlbmRpbmcgYSBTQ1NJIFRhc2sgYXMgbGlua2VkIGNvbW1hbmRzLCB5b3UKLXNob3VsZCBhbHNvIHVzZSB0aGlzIGZ1bmN0aW9uLgogCi1UaGF0IGlzLCB3aGVuIGxsZGRfZXhlY3V0ZV90YXNrKCkgaXMgY2FsbGVkLCB0aGUgY29tbWFuZChzKQorVGhhdCBpcywgd2hlbiBsbGRkX2V4ZWN1dGVfdGFzaygpIGlzIGNhbGxlZCwgdGhlIGNvbW1hbmQKIGdvIG91dCBvbiB0aGUgdHJhbnNwb3J0ICppbW1lZGlhdGVseSouICBUaGVyZSBpcyAqbm8qCiBxdWV1aW5nIG9mIGFueSBzb3J0IGFuZCBhdCBhbnkgbGV2ZWwgaW4gYSBTQVMgTExERC4KIAotVGhlIHVzZSBvZiB0YXNrOjpsaXN0IGlzIHR3by1mb2xkLCBvbmUgZm9yIGxpbmtlZCBjb21tYW5kcywKLXRoZSBvdGhlciBkaXNjdXNzZWQgYmVsb3cuCi0KLUl0IGlzIHBvc3NpYmxlIHRvIHF1ZXVlIHVwIG1vcmUgdGhhbiBvbmUgdGFzayBhdCBhIHRpbWUsIGJ5Ci1pbml0aWFsaXppbmcgdGhlIGxpc3QgZWxlbWVudCBvZiBzdHJ1Y3Qgc2FzX3Rhc2ssIGFuZAotcGFzc2luZyB0aGUgbnVtYmVyIG9mIHRhc2tzIGVubGlzdGVkIGluIHRoaXMgbWFubmVyIGluIG51bS4KLQogUmV0dXJuczogLVNBU19RVUVVRV9GVUxMLCAtRU5PTUVNLCBub3RoaW5nIHdhcyBxdWV1ZWQ7CiAJIDAsIHRoZSB0YXNrKHMpIHdlcmUgcXVldWVkLgogCi1JZiB5b3Ugd2FudCB0byBwYXNzIG51bSA+IDEsIHRoZW4gZWl0aGVyCi1BKSB5b3UncmUgdGhlIG9ubHkgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGtlZXAgdHJhY2sKLSAgIG9mIHdoYXQgeW91J3ZlIHF1ZXVlZCB0byB0aGUgTExERCwgb3IKLUIpIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nIGFuZCBoYXZlIGEgc3RyYXRlZ3kgb2YKLSAgIHJldHJ5aW5nLgotCi1BcyBvcHBvc2VkIHRvIHF1ZXVpbmcgb25lIHRhc2sgYXQgYSB0aW1lIChmdW5jdGlvbiBjYWxsKSwKLWJhdGNoIHF1ZXVpbmcgb2YgdGFza3MsIGJ5IGhhdmluZyBudW0gPiAxLCBncmVhdGx5Ci1zaW1wbGlmaWVzIExMREQgY29kZSwgc2VxdWVuY2VyIGNvZGUsIGFuZCBfaGFyZHdhcmUgZGVzaWduXywKLWFuZCBoYXMgc29tZSBwZXJmb3JtYW5jZSBhZHZhbnRhZ2VzIGluIGNlcnRhaW4gc2l0dWF0aW9ucwotKERCTVMpLgotCi1UaGUgTExERCBhZHZlcnRpc2VzIGlmIGl0IGNhbiB0YWtlIG1vcmUgdGhhbiBvbmUgY29tbWFuZCBhdAotYSB0aW1lIGF0IGxsZGRfZXhlY3V0ZV90YXNrKCksIGJ5IHNldHRpbmcgdGhlCi1sbGRkX21heF9leGVjdXRlX251bSBwYXJhbWV0ZXIgKGNvbnRyb2xsZWQgYnkgImNvbGxlY3RvciIKLW1vZHVsZSBwYXJhbWV0ZXIgaW4gYWljOTR4eCBTQVMgTExERCkuCi0KLVlvdSBzaG91bGQgbGVhdmUgdGhpcyB0byB0aGUgZGVmYXVsdCAxLCB1bmxlc3MgeW91IGtub3cgd2hhdAoteW91J3JlIGRvaW5nLgotCi1UaGlzIGlzIGEgZnVuY3Rpb24gb2YgdGhlIExMREQsIHRvIHdoaWNoIHRoZSBTQVMgbGF5ZXIgY2FuCi1jYXRlciB0by4KLQotaW50IGxsZGRfcXVldWVfc2l6ZQotCVRoZSBob3N0IGFkYXB0ZXIncyBxdWV1ZSBzaXplLiAgVGhpcyBpcyB0aGUgbWF4aW11bQotbnVtYmVyIG9mIGNvbW1hbmRzIHRoZSBsbGRkIGNhbiBoYXZlIHBlbmRpbmcgdG8gZG9tYWluCi1kZXZpY2VzIG9uIGJlaGFsZiBvZiBhbGwgdXBwZXIgbGF5ZXJzIHN1Ym1pdHRpbmcgdGhyb3VnaAotbGxkZF9leGVjdXRlX3Rhc2soKS4KLQotWW91IHJlYWxseSB3YW50IHRvIHNldCB0aGlzIHRvIHNvbWV0aGluZyAobXVjaCkgbGFyZ2VyIHRoYW4KLTEuCi0KLVRoaXMgX3JlYWxseV8gaGFzIGFic29sdXRlbHkgbm90aGluZyB0byBkbyB3aXRoIHF1ZXVpbmcuCi1UaGVyZSBpcyBubyBxdWV1aW5nIGluIFNBUyBMTEREcy4KLQogc3RydWN0IHNhc190YXNrIHsKIAlkZXYgLS0gdGhlIGRldmljZSB0aGlzIHRhc2sgaXMgZGVzdGluZWQgdG8KLQlsaXN0IC0tIG11c3QgYmUgaW5pdGlhbGl6ZWQgKElOSVRfTElTVF9IRUFEKQogCXRhc2tfcHJvdG8gLS0gX29uZV8gb2YgZW51bSBzYXNfcHJvdG8KIAlzY2F0dGVyIC0tIHBvaW50ZXIgdG8gc2NhdHRlciBnYXRoZXIgbGlzdCBhcnJheQogCW51bV9zY2F0dGVyIC0tIG51bWJlciBvZiBlbGVtZW50cyBpbiBzY2F0dGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKaW5kZXggZDZhOWJkZS4uNzMxYmM0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dApAQCAtMTQ5LDcgKzE0OSw3IEBACiBzY3NpX3NjYW5faG9zdCgpICAtLS0tLS0tKwogICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQotICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAtLT4gIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkgLS0+ICBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpCiAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpCkBAIC0xNTksNyArMTU5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJZiB0aGUgTExEIHdhbnRzIHRvIGFkanVzdCB0aGUgZGVmYXVsdCBxdWV1ZSBzZXR0aW5ncywgaXQgY2FuIGludm9rZQotc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKSBpbiBpdHMgc2xhdmVfY29uZmlndXJlKCkgcm91dGluZS4KK3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKCkgaW4gaXRzIHNsYXZlX2NvbmZpZ3VyZSgpIHJvdXRpbmUuCiAKICoqKiBGb3Igc2NzaSBkZXZpY2VzIHRoYXQgdGhlIG1pZCBsZXZlbCB0cmllcyB0byBzY2FuIGJ1dCBkbyBub3QKICAgICByZXNwb25kLCBhIHNsYXZlX2FsbG9jKCksIHNsYXZlX2Rlc3Ryb3koKSBwYWlyIGlzIGNhbGxlZC4KQEAgLTIwMyw3ICsyMDMsNyBAQAogc2NzaV9hZGRfZGV2aWNlKCkgIC0tLS0tLSsKICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKLSAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkgICBbLS0+IHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCldCisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpICAgWy0tPiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpXQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEluIGEgc2ltaWxhciBmYXNoaW9uLCBhbiBMTEQgbWF5IGJlY29tZSBhd2FyZSB0aGF0IGEgU0NTSSBkZXZpY2UgaGFzIGJlZW4KQEAgLTI2MSw3ICsyNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgc2NzaV9yZWdpc3RlcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKLSAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAgLS0+ICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkgIC0tPiAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoKQogICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkgICAqKioKICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkgKioqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtMjcxLDkgKzI3MSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpICoqKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBtaWQgbGV2ZWwgaW52b2tlcyBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpIHdpdGggdGFnZ2VkIHF1ZXVpbmcgb2ZmIGFuZAotImNtZF9wZXJfbHVuIiBmb3IgdGhhdCBob3N0IGFzIHRoZSBxdWV1ZSBsZW5ndGguIFRoZXNlIHNldHRpbmdzIGNhbiBiZQotb3ZlcnJpZGRlbiBieSBhIHNsYXZlX2NvbmZpZ3VyZSgpIHN1cHBsaWVkIGJ5IHRoZSBMTEQuCitUaGUgbWlkIGxldmVsIGludm9rZXMgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoKSB3aXRoICJjbWRfcGVyX2x1biIgZm9yIHRoYXQKK2hvc3QgYXMgdGhlIHF1ZXVlIGxlbmd0aC4gVGhlc2Ugc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYQorc2xhdmVfY29uZmlndXJlKCkgc3VwcGxpZWQgYnkgdGhlIExMRC4KIAogKioqIEZvciBzY3NpIGRldmljZXMgdGhhdCB0aGUgbWlkIGxldmVsIHRyaWVzIHRvIHNjYW4gYnV0IGRvIG5vdAogICAgIHJlc3BvbmQsIGEgc2xhdmVfYWxsb2MoKSwgc2xhdmVfZGVzdHJveSgpIHBhaXIgaXMgY2FsbGVkLgpAQCAtMzY2LDEzICszNjYsMTEgQEAKIG5hbWVzIGFsbCBzdGFydCB3aXRoICJzY3NpXyIuCiAKIFN1bW1hcnk6Ci0gICBzY3NpX2FjdGl2YXRlX3RjcSAtIHR1cm4gb24gdGFnIGNvbW1hbmQgcXVldWVpbmcKICAgIHNjc2lfYWRkX2RldmljZSAtIGNyZWF0ZXMgbmV3IHNjc2kgZGV2aWNlIChsdSkgaW5zdGFuY2UKICAgIHNjc2lfYWRkX2hvc3QgLSBwZXJmb3JtIHN5c2ZzIHJlZ2lzdHJhdGlvbiBhbmQgc2V0IHVwIHRyYW5zcG9ydCBjbGFzcwotICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGggLSBjaGFuZ2UgdGhlIHF1ZXVlIGRlcHRoIG9uIGEgU0NTSSBkZXZpY2UKKyAgIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gY2hhbmdlIHRoZSBxdWV1ZSBkZXB0aCBvbiBhIFNDU0kgZGV2aWNlCiAgICBzY3NpX2Jpb3NfcHRhYmxlIC0gcmV0dXJuIGNvcHkgb2YgYmxvY2sgZGV2aWNlJ3MgcGFydGl0aW9uIHRhYmxlCiAgICBzY3NpX2Jsb2NrX3JlcXVlc3RzIC0gcHJldmVudCBmdXJ0aGVyIGNvbW1hbmRzIGJlaW5nIHF1ZXVlZCB0byBnaXZlbiBob3N0Ci0gICBzY3NpX2RlYWN0aXZhdGVfdGNxIC0gdHVybiBvZmYgdGFnIGNvbW1hbmQgcXVldWVpbmcKICAgIHNjc2lfaG9zdF9hbGxvYyAtIHJldHVybiBhIG5ldyBzY3NpX2hvc3QgaW5zdGFuY2Ugd2hvc2UgcmVmY291bnQ9PTEKICAgIHNjc2lfaG9zdF9nZXQgLSBpbmNyZW1lbnRzIFNjc2lfSG9zdCBpbnN0YW5jZSdzIHJlZmNvdW50CiAgICBzY3NpX2hvc3RfcHV0IC0gZGVjcmVtZW50cyBTY3NpX0hvc3QgaW5zdGFuY2UncyByZWZjb3VudCAoZnJlZSBpZiAwKQpAQCAtMzkwLDI0ICszODgsNiBAQAogRGV0YWlsczoKIAogLyoqCi0gKiBzY3NpX2FjdGl2YXRlX3RjcSAtIHR1cm4gb24gdGFnIGNvbW1hbmQgcXVldWVpbmcgKCJvcmRlcmVkIiB0YXNrIGF0dHJpYnV0ZSkKLSAqIEBzZGV2OiAgICAgICBkZXZpY2UgdG8gdHVybiBvbiBUQ1EgZm9yCi0gKiBAZGVwdGg6ICAgICAgcXVldWUgZGVwdGgKLSAqCi0gKiAgICAgIFJldHVybnMgbm90aGluZwotICoKLSAqICAgICAgTWlnaHQgYmxvY2s6IG5vCi0gKgotICogICAgICBOb3RlczogRXZlbnR1YWxseSwgaXQgaXMgaG9wZWQgZGVwdGggd291bGQgYmUgdGhlIG1heGltdW0gZGVwdGgKLSAqICAgICAgdGhlIGRldmljZSBjb3VsZCBjb3BlIHdpdGggYW5kIHRoZSByZWFsIHF1ZXVlIGRlcHRoCi0gKiAgICAgIHdvdWxkIGJlIGFkanVzdGFibGUgZnJvbSAwIHRvIGRlcHRoLgotICoKLSAqICAgICAgRGVmaW5lZCAoaW5saW5lKSBpbjogaW5jbHVkZS9zY3NpL3Njc2lfdGNxLmgKLSAqKi8KLXZvaWQgc2NzaV9hY3RpdmF0ZV90Y3Eoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCi0KLQotLyoqCiAgKiBzY3NpX2FkZF9kZXZpY2UgLSBjcmVhdGVzIG5ldyBzY3NpIGRldmljZSAobHUpIGluc3RhbmNlCiAgKiBAc2hvc3Q6ICAgcG9pbnRlciB0byBzY3NpIGhvc3QgaW5zdGFuY2UKICAqIEBjaGFubmVsOiBjaGFubmVsIG51bWJlciAocmFyZWx5IG90aGVyIHRoYW4gMCkKQEAgLTQ1NiwxMSArNDM2LDggQEAKIAogCiAvKioKLSAqIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoIC0gYWxsb3cgTExEIHRvIGNoYW5nZSBxdWV1ZSBkZXB0aCBvbiBhIFNDU0kgZGV2aWNlCisgKiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIGFsbG93IExMRCB0byBjaGFuZ2UgcXVldWUgZGVwdGggb24gYSBTQ1NJIGRldmljZQogICogQHNkZXY6ICAgICAgIHBvaW50ZXIgdG8gU0NTSSBkZXZpY2UgdG8gY2hhbmdlIHF1ZXVlIGRlcHRoIG9uCi0gKiBAdGFnZ2VkOiAgICAgMCAtIG5vIHRhZ2dlZCBxdWV1aW5nCi0gKiAgICAgICAgICAgICAgTVNHX1NJTVBMRV9UQUcgLSBzaW1wbGUgdGFnZ2VkIHF1ZXVpbmcKLSAqICAgICAgICAgICAgICBNU0dfT1JERVJFRF9UQUcgLSBvcmRlcmVkIHRhZ2dlZCBxdWV1aW5nCiAgKiBAdGFncyAgICAgICAgTnVtYmVyIG9mIHRhZ3MgYWxsb3dlZCBpZiB0YWdnZWQgcXVldWluZyBlbmFibGVkLAogICogICAgICAgICAgICAgIG9yIG51bWJlciBvZiBjb21tYW5kcyB0aGUgTExEIGNhbiBxdWV1ZSB1cAogICogICAgICAgICAgICAgIGluIG5vbi10YWdnZWQgbW9kZSAoYXMgcGVyIGNtZF9wZXJfbHVuKS4KQEAgLTQ3MSwxNSArNDQ4LDEyIEBACiAgKgogICogICAgICBOb3RlczogQ2FuIGJlIGludm9rZWQgYW55IHRpbWUgb24gYSBTQ1NJIGRldmljZSBjb250cm9sbGVkIGJ5IHRoaXMKICAqICAgICAgTExELiBbU3BlY2lmaWNhbGx5IGR1cmluZyBhbmQgYWZ0ZXIgc2xhdmVfY29uZmlndXJlKCkgYW5kIHByaW9yIHRvCi0gKiAgICAgIHNsYXZlX2Rlc3Ryb3koKS5dIENhbiBzYWZlbHkgYmUgaW52b2tlZCBmcm9tIGludGVycnVwdCBjb2RlLiBBY3R1YWwKLSAqICAgICAgcXVldWUgZGVwdGggY2hhbmdlIG1heSBiZSBkZWxheWVkIHVudGlsIHRoZSBuZXh0IGNvbW1hbmQgaXMgYmVpbmcKLSAqICAgICAgcHJvY2Vzc2VkLiBTZWUgYWxzbyBzY3NpX2FjdGl2YXRlX3RjcSgpIGFuZCBzY3NpX2RlYWN0aXZhdGVfdGNxKCkuCisgKiAgICAgIHNsYXZlX2Rlc3Ryb3koKS5dIENhbiBzYWZlbHkgYmUgaW52b2tlZCBmcm9tIGludGVycnVwdCBjb2RlLgogICoKICAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2kuYyBbc2VlIHNvdXJjZSBjb2RlIGZvciBtb3JlIG5vdGVzXQogICoKICAqKi8KLXZvaWQgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICogc2RldiwgaW50IHRhZ2dlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWdzKQoraW50IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZ3MpCiAKIAogLyoqCkBAIC01MTUsMjAgKzQ4OSw2IEBACiAKIAogLyoqCi0gKiBzY3NpX2RlYWN0aXZhdGVfdGNxIC0gdHVybiBvZmYgdGFnIGNvbW1hbmQgcXVldWVpbmcKLSAqIEBzZGV2OiAgICAgICBkZXZpY2UgdG8gdHVybiBvZmYgVENRIGZvcgotICogQGRlcHRoOiAgICAgIHF1ZXVlIGRlcHRoIChzdG9yZWQgaW4gc2RldikKLSAqCi0gKiAgICAgIFJldHVybnMgbm90aGluZwotICoKLSAqICAgICAgTWlnaHQgYmxvY2s6IG5vCi0gKgotICogICAgICBEZWZpbmVkIChpbmxpbmUpIGluOiBpbmNsdWRlL3Njc2kvc2NzaV90Y3EuaAotICoqLwotdm9pZCBzY3NpX2RlYWN0aXZhdGVfdGNxKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQotCi0KLS8qKgogICogc2NzaV9ob3N0X2FsbG9jIC0gY3JlYXRlIGEgc2NzaSBob3N0IGFkYXB0ZXIgaW5zdGFuY2UgYW5kIHBlcmZvcm0gYmFzaWMKICAqICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLgogICogQHNodDogICAgICAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IHRlbXBsYXRlCkBAIC0xMjU0LDcgKzEyMTQsNyBAQAogICAgICAgICAgICAgICAgICAgIGZvciBkaXNrIGZpcm13YXJlIHVwbG9hZHMuCiAgICAgY21kX3Blcl9sdW4gIC0gbWF4aW11bSBudW1iZXIgb2YgY29tbWFuZHMgdGhhdCBjYW4gYmUgcXVldWVkIG9uIGRldmljZXMKICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVkIGJ5IHRoZSBob3N0LiBPdmVycmlkZGVuIGJ5IExMRCBjYWxscyB0bwotICAgICAgICAgICAgICAgICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkuCisgICAgICAgICAgICAgICAgICAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoKS4KICAgICB1bmNoZWNrZWRfaXNhX2RtYSAtIDE9Pm9ubHkgdXNlIGJvdHRvbSAxNiBNQiBvZiByYW0gKElTQSBETUEgYWRkcmVzc2luZwogICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uKSwgMD0+Y2FuIHVzZSBmdWxsIDMyIGJpdCAob3IgYmV0dGVyKSBETUEKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIHNwYWNlCkBAIC0xMjk0LDcgKzEyNTQsNyBAQAogSW5zdGFuY2VzIG9mIHRoaXMgc3RydWN0dXJlIGNvbnZleSBTQ1NJIGNvbW1hbmRzIHRvIHRoZSBMTEQgYW5kIHJlc3BvbnNlcwogYmFjayB0byB0aGUgbWlkIGxldmVsLiBUaGUgU0NTSSBtaWQgbGV2ZWwgd2lsbCBlbnN1cmUgdGhhdCBubyBtb3JlIFNDU0kKIGNvbW1hbmRzIGJlY29tZSBxdWV1ZWQgYWdhaW5zdCB0aGUgTExEIHRoYW4gYXJlIGluZGljYXRlZCBieQotc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKSAob3Igc3RydWN0IFNjc2lfSG9zdDo6Y21kX3Blcl9sdW4pLiBUaGVyZSB3aWxsCitzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpIChvciBzdHJ1Y3QgU2NzaV9Ib3N0OjpjbWRfcGVyX2x1bikuIFRoZXJlIHdpbGwKIGJlIGF0IGxlYXN0IG9uZSBpbnN0YW5jZSBvZiBzdHJ1Y3Qgc2NzaV9jbW5kIGF2YWlsYWJsZSBmb3IgZWFjaCBTQ1NJIGRldmljZS4KIE1lbWJlcnMgb2YgaW50ZXJlc3Q6CiAgICAgY21uZCAgICAgICAgIC0gYXJyYXkgY29udGFpbmluZyBTQ1NJIGNvbW1hbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zdC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0CmluZGV4IGYzNDZhYmIuLjBkNWJkYjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dApAQCAtNTA2LDkgKzUwNiwxMSBAQAogCiBERUJVR0dJTkcgSElOVFMKIAotVG8gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcywgZWRpdCBzdC5jIGFuZCAjZGVmaW5lIERFQlVHIDEuIEFzIHNlZW4KLWFib3ZlLCBkZWJ1Z2dpbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiB3aXRoIGFuIGlvY3RsIGlmIGRlYnVnZ2luZyBpcwotY29tcGlsZWQgaW50byB0aGUgZHJpdmVyLiBUaGUgZGVidWdnaW5nIG91dHB1dCBpcyBub3Qgdm9sdW1pbm91cy4KK0RlYnVnZ2luZyBjb2RlIGlzIG5vdyBjb21waWxlZCBpbiBieSBkZWZhdWx0IGJ1dCBkZWJ1Z2dpbmcgaXMgdHVybmVkIG9mZgord2l0aCB0aGUga2VybmVsIG1vZHVsZSBwYXJhbWV0ZXIgZGVidWdfZmxhZyBkZWZhdWx0aW5nIHRvIDAuICBEZWJ1Z2dpbmcKK2NhbiBzdGlsbCBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmIHdpdGggYW4gaW9jdGwuICBUbyBlbmFibGUgZGVidWcgYXQKK21vZHVsZSBsb2FkIHRpbWUgYWRkIGRlYnVnX2ZsYWc9MSB0byB0aGUgbW9kdWxlIGxvYWQgb3B0aW9ucywgdGhlCitkZWJ1Z2dpbmcgb3V0cHV0IGlzIG5vdCB2b2x1bWlub3VzLgogCiBJZiB0aGUgdGFwZSBzZWVtcyB0byBoYW5nLCBJIHdvdWxkIGJlIHZlcnkgaW50ZXJlc3RlZCB0byBoZWFyIHdoZXJlCiB0aGUgZHJpdmVyIGlzIHdhaXRpbmcuIFdpdGggdGhlIGNvbW1hbmQgJ3BzIC1sJyB5b3UgY2FuIHNlZSB0aGUgc3RhdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS93ZDcxOXgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3dkNzE5eC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxNmIwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS93ZDcxOXgudHh0CkBAIC0wLDAgKzEsMjEgQEAKK0RyaXZlciBmb3IgV2VzdGVybiBEaWdpdGFsIFdENzE5MywgV0Q3MTk3IGFuZCBXRDcyOTYgU0NTSSBjYXJkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjYXJkIHJlcXVpcmVzIGZpcm13YXJlIHRoYXQgY2FuIGJlIGN1dCBvdXQgb2YgdGhlIFdpbmRvd3MgTlQgZHJpdmVyIHRoYXQKK2NhbiBiZSBkb3dubG9hZGVkIGZyb20gV0QgYXQ6CitodHRwOi8vc3VwcG9ydC53ZGMuY29tL3Byb2R1Y3QvZG93bmxvYWQuYXNwP2dyb3VwaWQ9ODAxJnNpZD0yNyZsYW5nPWVuCisKK1RoZXJlIGlzIG5vIGxpY2Vuc2UgYW55d2hlcmUgaW4gdGhlIGZpbGUgb3Igb24gdGhlIHBhZ2UgLSBzbyB0aGUgZmlybXdhcmUKK3Byb2JhYmx5IGNhbm5vdCBiZSBhZGRlZCB0byBsaW51eC1maXJtd2FyZS4KKworVGhpcyBzY3JpcHQgZG93bmxvYWRzIGFuZCBleHRyYWN0cyB0aGUgZmlybXdhcmUsIGNyZWF0aW5nIHdkNzE5eC1yaXNjLmJpbiBhbmQKK2Q3MTl4LXdjcy5iaW4gZmlsZXMuIFB1dCB0aGVtIGluIC9saWIvZmlybXdhcmUvLgorCisjIS9iaW4vc2gKK3dnZXQgaHR0cDovL3N1cHBvcnQud2RjLmNvbS9kb3dubG9hZC9hcmNoaXZlL3BjaXNjc2kuZXhlCitsaGEgeGkgcGNpc2NzaS5leGUgcGNpLXNjc2kuZXhlCitsaGEgeGkgcGNpLXNjc2kuZXhlIG50L3dkNzI5NmEuc3lzCitybSBwY2ktc2NzaS5leGUKK2RkIGlmPXdkNzI5NmEuc3lzIG9mPXdkNzE5eC1yaXNjLmJpbiBicz0xIHNraXA9NTc2MCBjb3VudD0xNDMzNgorZGQgaWY9d2Q3Mjk2YS5zeXMgb2Y9d2Q3MTl4LXdjcy5iaW4gYnM9MSBza2lwPTIwMDk2IGNvdW50PTUxNAorcm0gd2Q3Mjk2YS5zeXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CmluZGV4IDU3YmFmZjUuLmI1ZDBjODUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApAQCAtNTQsOCArNTQsOSBAQAogLSBvdmVyZmxvd3VpZAogLSBwYW5pYwogLSBwYW5pY19vbl9vb3BzCi0tIHBhbmljX29uX3VucmVjb3ZlcmVkX25taQogLSBwYW5pY19vbl9zdGFja292ZXJmbG93CistIHBhbmljX29uX3VucmVjb3ZlcmVkX25taQorLSBwYW5pY19vbl93YXJuCiAtIHBpZF9tYXgKIC0gcG93ZXJzYXZlLW5hcCAgICAgICAgICAgICAgIFsgUFBDIG9ubHkgXQogLSBwcmludGsKQEAgLTUyNywxOSArNTI4LDYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pOgotCi1UaGUgZGVmYXVsdCBMaW51eCBiZWhhdmlvdXIgb24gYW4gTk1JIG9mIGVpdGhlciBtZW1vcnkgb3IgdW5rbm93biBpcwotdG8gY29udGludWUgb3BlcmF0aW9uLiBGb3IgbWFueSBlbnZpcm9ubWVudHMgc3VjaCBhcyBzY2llbnRpZmljCi1jb21wdXRpbmcgaXQgaXMgcHJlZmVyYWJsZSB0aGF0IHRoZSBib3ggaXMgdGFrZW4gb3V0IGFuZCB0aGUgZXJyb3IKLWRlYWx0IHdpdGggdGhhbiBhbiB1bmNvcnJlY3RlZCBwYXJpdHkvRUNDIGVycm9yIGdldCBwcm9wYWdhdGVkLgotCi1BIHNtYWxsIG51bWJlciBvZiBzeXN0ZW1zIGRvIGdlbmVyYXRlIE5NSSdzIGZvciBiaXphcnJlIHJhbmRvbSByZWFzb25zCi1zdWNoIGFzIHBvd2VyIG1hbmFnZW1lbnQgc28gdGhlIGRlZmF1bHQgaXMgb2ZmLiBUaGF0IHN5c2N0bCB3b3JrcyBsaWtlCi10aGUgZXhpc3RpbmcgcGFuaWMgY29udHJvbHMgYWxyZWFkeSBpbiB0aGF0IGRpcmVjdG9yeS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogcGFuaWNfb25fb29wczoKIAogQ29udHJvbHMgdGhlIGtlcm5lbCdzIGJlaGF2aW91ciB3aGVuIGFuIG9vcHMgb3IgQlVHIGlzIGVuY291bnRlcmVkLgpAQCAtNTYzLDYgKzU1MSwzMCBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCitwYW5pY19vbl91bnJlY292ZXJlZF9ubWk6CisKK1RoZSBkZWZhdWx0IExpbnV4IGJlaGF2aW91ciBvbiBhbiBOTUkgb2YgZWl0aGVyIG1lbW9yeSBvciB1bmtub3duIGlzCit0byBjb250aW51ZSBvcGVyYXRpb24uIEZvciBtYW55IGVudmlyb25tZW50cyBzdWNoIGFzIHNjaWVudGlmaWMKK2NvbXB1dGluZyBpdCBpcyBwcmVmZXJhYmxlIHRoYXQgdGhlIGJveCBpcyB0YWtlbiBvdXQgYW5kIHRoZSBlcnJvcgorZGVhbHQgd2l0aCB0aGFuIGFuIHVuY29ycmVjdGVkIHBhcml0eS9FQ0MgZXJyb3IgZ2V0IHByb3BhZ2F0ZWQuCisKK0Egc21hbGwgbnVtYmVyIG9mIHN5c3RlbXMgZG8gZ2VuZXJhdGUgTk1JJ3MgZm9yIGJpemFycmUgcmFuZG9tIHJlYXNvbnMKK3N1Y2ggYXMgcG93ZXIgbWFuYWdlbWVudCBzbyB0aGUgZGVmYXVsdCBpcyBvZmYuIFRoYXQgc3lzY3RsIHdvcmtzIGxpa2UKK3RoZSBleGlzdGluZyBwYW5pYyBjb250cm9scyBhbHJlYWR5IGluIHRoYXQgZGlyZWN0b3J5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwYW5pY19vbl93YXJuOgorCitDYWxscyBwYW5pYygpIGluIHRoZSBXQVJOKCkgcGF0aCB3aGVuIHNldCB0byAxLiAgVGhpcyBpcyB1c2VmdWwgdG8gYXZvaWQKK2Ega2VybmVsIHJlYnVpbGQgd2hlbiBhdHRlbXB0aW5nIHRvIGtkdW1wIGF0IHRoZSBsb2NhdGlvbiBvZiBhIFdBUk4oKS4KKworMDogb25seSBXQVJOKCksIGRlZmF1bHQgYmVoYXZpb3VyLgorCisxOiBjYWxsIHBhbmljKCkgYWZ0ZXIgcHJpbnRpbmcgb3V0IFdBUk4oKSBsb2NhdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogcGVyZl9jcHVfdGltZV9tYXhfcGVyY2VudDoKIAogSGludHMgdG8gdGhlIGtlcm5lbCBob3cgbXVjaCBDUFUgdGltZSBpdCBzaG91bGQgYmUgYWxsb3dlZCB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CmluZGV4IDRkYTQyNjEuLjg0MDhlMDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKQEAgLTIzNCw2ICsyMzQsMTEgQEAKIAl3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBmdW5jdGlvbiB0aGF0CiAJaXMgcmV0dXJuaW5nIHJlZ2lzdGVycy4KIAorCUlmIHRoZSBjYWxsYmFjayByZWdpc3RlcmVkIHRvIGJlIHRyYWNlZCBieSBhIGZ1bmN0aW9uIHdpdGgKKwl0aGUgImlwIG1vZGlmeSIgYXR0cmlidXRlICh0aHVzIHRoZSByZWdzLT5pcCBjYW4gYmUgY2hhbmdlZCksCisJYW4gJ0knIHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGZ1bmN0aW9uIHRoYXQKKwljYW4gYmUgb3ZlcnJpZGRlbi4KKwogICBmdW5jdGlvbl9wcm9maWxlX2VuYWJsZWQ6CiAKIAlXaGVuIHNldCBpdCB3aWxsIGVuYWJsZSBhbGwgZnVuY3Rpb25zIHdpdGggZWl0aGVyIHRoZSBmdW5jdGlvbgpAQCAtNjgwLDkgKzY4NSwxMSBAQAogCSBuZWVkcyB0byBiZSBmaXhlZCB0byBiZSBvbmx5IHJlbGF0aXZlIHRvIHRoZSBzYW1lIENQVS4KIAkgVGhlIG1hcmtzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcwogCSBjdXJyZW50IHRyYWNlIGFuZCB0aGUgbmV4dCB0cmFjZS4KLQkgICchJyAtIGdyZWF0ZXIgdGhhbiBwcmVlbXB0X21hcmtfdGhyZXNoIChkZWZhdWx0IDEwMCkKLQkgICcrJyAtIGdyZWF0ZXIgdGhhbiAxIG1pY3Jvc2Vjb25kCi0JICAnICcgLSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMSBtaWNyb3NlY29uZC4KKwkgICckJyAtIGdyZWF0ZXIgdGhhbiAxIHNlY29uZAorCSAgJyMnIC0gZ3JlYXRlciB0aGFuIDEwMDAgbWljcm9zZWNvbmQKKwkgICchJyAtIGdyZWF0ZXIgdGhhbiAxMDAgbWljcm9zZWNvbmQKKwkgICcrJyAtIGdyZWF0ZXIgdGhhbiAxMCBtaWNyb3NlY29uZAorCSAgJyAnIC0gbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwIG1pY3Jvc2Vjb25kLgogCiAgIFRoZSByZXN0IGlzIHRoZSBzYW1lIGFzIHRoZSAndHJhY2UnIGZpbGUuCiAKQEAgLTE5NTEsNiArMTk1OCw4IEBACiAKICAgKyBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBleGNlZWRlZCAxMCB1c2Vjcy4KICAgISBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBleGNlZWRlZCAxMDAgdXNlY3MuCisgICMgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gZXhjZWVkZWQgMTAwMCB1c2Vjcy4KKyAgJCBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBleGNlZWRlZCAxIHNlYy4KIAogCiAtIFRoZSB0YXNrL3BpZCBmaWVsZCBkaXNwbGF5cyB0aGUgdGhyZWFkIGNtZGxpbmUgYW5kIHBpZCB3aGljaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAppbmRleCA3YjkwZmUwLi5iNWY4MzkxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dApAQCAtNDcsMTQgKzQ3LDE1IEBACiBjb3ZlcmVkIHRvIHNvbWUgZXh0ZW50IChzZWUgRG9jdW1lbnRhdGlvbi9wb3dlci8qLnR4dCBmb3IgbW9yZQogaW5mb3JtYXRpb24gYWJvdXQgc3lzdGVtIFBNKS4KIAotTm90ZTogRHluYW1pYyBQTSBzdXBwb3J0IGZvciBVU0IgaXMgcHJlc2VudCBvbmx5IGlmIHRoZSBrZXJuZWwgd2FzCi1idWlsdCB3aXRoIENPTkZJR19VU0JfU1VTUEVORCBlbmFibGVkICh3aGljaCBkZXBlbmRzIG9uCi1DT05GSUdfUE1fUlVOVElNRSkuICBTeXN0ZW0gUE0gc3VwcG9ydCBpcyBwcmVzZW50IG9ubHkgaWYgdGhlIGtlcm5lbAotd2FzIGJ1aWx0IHdpdGggQ09ORklHX1NVU1BFTkQgb3IgQ09ORklHX0hJQkVSTkFUSU9OIGVuYWJsZWQuCitTeXN0ZW0gUE0gc3VwcG9ydCBpcyBwcmVzZW50IG9ubHkgaWYgdGhlIGtlcm5lbCB3YXMgYnVpbHQgd2l0aCBDT05GSUdfU1VTUEVORAorb3IgQ09ORklHX0hJQkVSTkFUSU9OIGVuYWJsZWQuICBEeW5hbWljIFBNIHN1cHBvcnQgZm9yIFVTQiBpcyBwcmVzZW50IHdoZW5ldmVyCit0aGUga2VybmVsIHdhcyBidWlsdCB3aXRoIENPTkZJR19QTSBlbmFibGVkLgogCi0oU3RhcnRpbmcgd2l0aCB0aGUgMy4xMCBrZXJuZWwgcmVsZWFzZSwgZHluYW1pYyBQTSBzdXBwb3J0IGZvciBVU0IgaXMKLXByZXNlbnQgd2hlbmV2ZXIgdGhlIGtlcm5lbCB3YXMgYnVpbHQgd2l0aCBDT05GSUdfUE1fUlVOVElNRSBlbmFibGVkLgotVGhlIENPTkZJR19VU0JfU1VTUEVORCBvcHRpb24gaGFzIGJlZW4gZWxpbWluYXRlZC4pCitbSGlzdG9yaWNhbGx5LCBkeW5hbWljIFBNIHN1cHBvcnQgZm9yIFVTQiB3YXMgcHJlc2VudCBvbmx5IGlmIHRoZQora2VybmVsIGhhZCBiZWVuIGJ1aWx0IHdpdGggQ09ORklHX1VTQl9TVVNQRU5EIGVuYWJsZWQgKHdoaWNoIGRlcGVuZGVkIG9uCitDT05GSUdfUE1fUlVOVElNRSkuICBTdGFydGluZyB3aXRoIHRoZSAzLjEwIGtlcm5lbCByZWxlYXNlLCBkeW5hbWljIFBNIHN1cHBvcnQKK2ZvciBVU0Igd2FzIHByZXNlbnQgd2hlbmV2ZXIgdGhlIGtlcm5lbCB3YXMgYnVpbHQgd2l0aCBDT05GSUdfUE1fUlVOVElNRQorZW5hYmxlZC4gIFRoZSBDT05GSUdfVVNCX1NVU1BFTkQgb3B0aW9uIGhhZCBiZWVuIGVsaW1pbmF0ZWQuXQogCiAKIAlXaGF0IGlzIFJlbW90ZSBXYWtldXA/CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Ni9pbnRlbF9tcHgudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYvaW50ZWxfbXB4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDcyZWQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYvaW50ZWxfbXB4LnR4dApAQCAtMCwwICsxLDIzNCBAQAorMS4gSW50ZWwoUikgTVBYIE92ZXJ2aWV3Cis9PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50ZWwoUikgTWVtb3J5IFByb3RlY3Rpb24gRXh0ZW5zaW9ucyAoSW50ZWwoUikgTVBYKSBpcyBhIG5ldyBjYXBhYmlsaXR5CitpbnRyb2R1Y2VkIGludG8gSW50ZWwgQXJjaGl0ZWN0dXJlLiBJbnRlbCBNUFggcHJvdmlkZXMgaGFyZHdhcmUgZmVhdHVyZXMKK3RoYXQgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBjb21waWxlciBjaGFuZ2VzIHRvIGNoZWNrIG1lbW9yeQorcmVmZXJlbmNlcywgZm9yIHRob3NlIHJlZmVyZW5jZXMgd2hvc2UgY29tcGlsZS10aW1lIG5vcm1hbCBpbnRlbnRpb25zIGFyZQordXN1cnBlZCBhdCBydW50aW1lIGR1ZSB0byBidWZmZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIEludGVsKFIpIEFyY2hpdGVjdHVyZSBJbnN0cnVjdGlvbgorU2V0IEV4dGVuc2lvbnMgUHJvZ3JhbW1pbmcgUmVmZXJlbmNlLCBDaGFwdGVyIDk6IEludGVsKFIpIE1lbW9yeSBQcm90ZWN0aW9uCitFeHRlbnNpb25zLgorCitOb3RlOiBDdXJyZW50bHkgbm8gaGFyZHdhcmUgd2l0aCBNUFggSVNBIGlzIGF2YWlsYWJsZSBidXQgaXQgaXMgYWx3YXlzCitwb3NzaWJsZSB0byB1c2UgU0RFIChJbnRlbChSKSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBFbXVsYXRvcikgaW5zdGVhZCwgd2hpY2gKK2NhbiBiZSBkb3dubG9hZGVkIGZyb20KK2h0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vZW4tdXMvYXJ0aWNsZXMvaW50ZWwtc29mdHdhcmUtZGV2ZWxvcG1lbnQtZW11bGF0b3IKKworCisyLiBIb3cgdG8gZ2V0IHRoZSBhZHZhbnRhZ2Ugb2YgTVBYCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciBNUFggdG8gd29yaywgY2hhbmdlcyBhcmUgcmVxdWlyZWQgaW4gdGhlIGtlcm5lbCwgYmludXRpbHMgYW5kIGNvbXBpbGVyLgorTm8gc291cmNlIGNoYW5nZXMgYXJlIHJlcXVpcmVkIGZvciBhcHBsaWNhdGlvbnMsIGp1c3QgYSByZWNvbXBpbGUuCisKK1RoZXJlIGFyZSBhIGxvdCBvZiBtb3ZpbmcgcGFydHMgb2YgdGhpcyB0byBhbGwgd29yayByaWdodC4gVGhlIGZvbGxvd2luZworaXMgaG93IHdlIGV4cGVjdCB0aGUgY29tcGlsZXIsIGFwcGxpY2F0aW9uIGFuZCBrZXJuZWwgdG8gd29yayB0b2dldGhlci4KKworMSkgQXBwbGljYXRpb24gZGV2ZWxvcGVyIGNvbXBpbGVzIHdpdGggLWZtcHguIFRoZSBjb21waWxlciB3aWxsIGFkZCB0aGUKKyAgIGluc3RydW1lbnRhdGlvbiBhcyB3ZWxsIGFzIHNvbWUgc2V0dXAgY29kZSBjYWxsZWQgZWFybHkgYWZ0ZXIgdGhlIGFwcAorICAgc3RhcnRzLiBOZXcgaW5zdHJ1Y3Rpb24gcHJlZml4ZXMgYXJlIG5vb3BzIGZvciBvbGQgQ1BVcy4KKzIpIFRoYXQgc2V0dXAgY29kZSBhbGxvY2F0ZXMgKHZpcnR1YWwpIHNwYWNlIGZvciB0aGUgImJvdW5kcyBkaXJlY3RvcnkiLAorICAgcG9pbnRzIHRoZSAiYm5kY2ZndSIgcmVnaXN0ZXIgdG8gdGhlIGRpcmVjdG9yeSBhbmQgbm90aWZpZXMgdGhlIGtlcm5lbAorICAgKHZpYSB0aGUgbmV3IHByY3RsKFBSX01QWF9FTkFCTEVfTUFOQUdFTUVOVCkpIHRoYXQgdGhlIGFwcCB3aWxsIGJlIHVzaW5nCisgICBNUFguCiszKSBUaGUga2VybmVsIGRldGVjdHMgdGhhdCB0aGUgQ1BVIGhhcyBNUFgsIGFsbG93cyB0aGUgbmV3IHByY3RsKCkgdG8KKyAgIHN1Y2NlZWQsIGFuZCBub3RlcyB0aGUgbG9jYXRpb24gb2YgdGhlIGJvdW5kcyBkaXJlY3RvcnkuIFVzZXJzcGFjZSBpcworICAgZXhwZWN0ZWQgdG8ga2VlcCB0aGUgYm91bmRzIGRpcmVjdG9yeSBhdCB0aGF0IGxvY2F0aW9uV2Ugbm90ZSBpdAorICAgaW5zdGVhZCBvZiByZWFkaW5nIGl0IGVhY2ggdGltZSBiZWNhdXNlIHRoZSAneHNhdmUnIG9wZXJhdGlvbiBuZWVkZWQKKyAgIHRvIGFjY2VzcyB0aGUgYm91bmRzIGRpcmVjdG9yeSByZWdpc3RlciBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLgorNCkgSWYgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHNwaWxsIGJvdW5kcyBvdXQgb2YgdGhlIDQgcmVnaXN0ZXJzLCBpdAorICAgaXNzdWVzIGEgYm5kc3R4IGluc3RydWN0aW9uLiBTaW5jZSB0aGUgYm91bmRzIGRpcmVjdG9yeSBpcyBlbXB0eSBhdAorICAgdGhpcyBwb2ludCwgYSBib3VuZHMgZmF1bHQgKCNCUikgaXMgcmFpc2VkLCB0aGUga2VybmVsIGFsbG9jYXRlcyBhCisgICBib3VuZHMgdGFibGUgKGluIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UpIGFuZCBtYWtlcyB0aGUgcmVsZXZhbnQgZW50cnkKKyAgIGluIHRoZSBib3VuZHMgZGlyZWN0b3J5IHBvaW50IHRvIHRoZSBuZXcgdGFibGUuCis1KSBJZiB0aGUgYXBwbGljYXRpb24gdmlvbGF0ZXMgdGhlIGJvdW5kcyBzcGVjaWZpZWQgaW4gdGhlIGJvdW5kcyByZWdpc3RlcnMsCisgICBhIHNlcGFyYXRlIGtpbmQgb2YgI0JSIGlzIHJhaXNlZCB3aGljaCB3aWxsIGRlbGl2ZXIgYSBzaWduYWwgd2l0aAorICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZpb2xhdGlvbiBpbiB0aGUgJ3N0cnVjdCBzaWdpbmZvJy4KKzYpIFdoZW5ldmVyIG1lbW9yeSBpcyBmcmVlZCwgd2Uga25vdyB0aGF0IGl0IGNhbiBubyBsb25nZXIgY29udGFpbiB2YWxpZAorICAgcG9pbnRlcnMsIGFuZCB3ZSBhdHRlbXB0IHRvIGZyZWUgdGhlIGFzc29jaWF0ZWQgc3BhY2UgaW4gdGhlIGJvdW5kcworICAgdGFibGVzLiBJZiBhbiBlbnRpcmUgdGFibGUgYmVjb21lcyB1bnVzZWQsIHdlIHdpbGwgYXR0ZW1wdCB0byBmcmVlCisgICB0aGUgdGFibGUgYW5kIHJlbW92ZSB0aGUgZW50cnkgaW4gdGhlIGRpcmVjdG9yeS4KKworVG8gc3VtbWFyaXplLCB0aGVyZSBhcmUgZXNzZW50aWFsbHkgdGhyZWUgdGhpbmdzIGludGVyYWN0aW5nIGhlcmU6CisKK0dDQyB3aXRoIC1mbXB4OgorICogZW5hYmxlcyBhbm5vdGF0aW9uIG9mIGNvZGUgd2l0aCBNUFggaW5zdHJ1Y3Rpb25zIGFuZCBwcmVmaXhlcworICogaW5zZXJ0cyBjb2RlIGVhcmx5IGluIHRoZSBhcHBsaWNhdGlvbiB0byBjYWxsIGluIHRvIHRoZSAiZ2NjIHJ1bnRpbWUiCitHQ0MgTVBYIFJ1bnRpbWU6CisgKiBDaGVja3MgZm9yIGhhcmR3YXJlIE1QWCBzdXBwb3J0IGluIGNwdWlkIGxlYWYKKyAqIGFsbG9jYXRlcyB2aXJ0dWFsIHNwYWNlIGZvciB0aGUgYm91bmRzIGRpcmVjdG9yeSAobWFsbG9jKCkgZXNzZW50aWFsbHkpCisgKiBwb2ludHMgdGhlIGhhcmR3YXJlIEJORENGR1UgcmVnaXN0ZXIgYXQgdGhlIGRpcmVjdG9yeQorICogY2FsbHMgYSBuZXcgcHJjdGwoUFJfTVBYX0VOQUJMRV9NQU5BR0VNRU5UKSB0byBub3RpZnkgdGhlIGtlcm5lbCB0bworICAgc3RhcnQgbWFuYWdpbmcgdGhlIGJvdW5kcyBkaXJlY3RvcmllcworS2VybmVsIE1QWCBDb2RlOgorICogQ2hlY2tzIGZvciBoYXJkd2FyZSBNUFggc3VwcG9ydCBpbiBjcHVpZCBsZWFmCisgKiBIYW5kbGVzICNCUiBleGNlcHRpb25zIGFuZCBzZW5kcyBTSUdTRUdWIHRvIHRoZSBhcHAgd2hlbiBpdCB2aW9sYXRlcworICAgYm91bmRzLCBsaWtlIGR1cmluZyBhIGJ1ZmZlciBvdmVyZmxvdy4KKyAqIFdoZW4gYm91bmRzIGFyZSBzcGlsbGVkIGluIHRvIGFuIHVuYWxsb2NhdGVkIGJvdW5kcyB0YWJsZSwgdGhlIGtlcm5lbAorICAgbm90aWNlcyBpbiB0aGUgI0JSIGV4Y2VwdGlvbiwgYWxsb2NhdGVzIHRoZSB2aXJ0dWFsIHNwYWNlLCB0aGVuCisgICB1cGRhdGVzIHRoZSBib3VuZHMgZGlyZWN0b3J5IHRvIHBvaW50IHRvIHRoZSBuZXcgdGFibGUuIEl0IGtlZXBzCisgICBzcGVjaWFsIHRyYWNrIG9mIHRoZSBtZW1vcnkgd2l0aCBhIFZNX01QWCBmbGFnLgorICogRnJlZXMgdW51c2VkIGJvdW5kcyB0YWJsZXMgYXQgdGhlIHRpbWUgdGhhdCB0aGUgbWVtb3J5IHRoZXkgZGVzY3JpYmVkCisgICBpcyB1bm1hcHBlZC4KKworCiszLiBIb3cgZG9lcyBNUFgga2VybmVsIGNvZGUgd29yaworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSGFuZGxpbmcgI0JSIGZhdWx0cyBjYXVzZWQgYnkgTVBYCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBNUFggaXMgZW5hYmxlZCwgdGhlcmUgYXJlIDIgbmV3IHNpdHVhdGlvbnMgdGhhdCBjYW4gZ2VuZXJhdGUKKyNCUiBmYXVsdHMuCisgICogbmV3IGJvdW5kcyB0YWJsZXMgKEJUKSBuZWVkIHRvIGJlIGFsbG9jYXRlZCB0byBzYXZlIGJvdW5kcy4KKyAgKiBib3VuZHMgdmlvbGF0aW9uIGNhdXNlZCBieSBNUFggaW5zdHJ1Y3Rpb25zLgorCitXZSBob29rICNCUiBoYW5kbGVyIHRvIGhhbmRsZSB0aGVzZSB0d28gbmV3IHNpdHVhdGlvbnMuCisKK09uLWRlbWFuZCBrZXJuZWwgYWxsb2NhdGlvbiBvZiBib3VuZHMgdGFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNUFggb25seSBoYXMgNCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHN0b3JpbmcgYm91bmRzIGluZm9ybWF0aW9uLiBJZgorTVBYLWVuYWJsZWQgY29kZSBuZWVkcyBtb3JlIHRoYW4gdGhlc2UgNCByZWdpc3RlcnMsIGl0IG5lZWRzIHRvIHNwaWxsCit0aGVtIHNvbWV3aGVyZS4gSXQgaGFzIHR3byBzcGVjaWFsIGluc3RydWN0aW9ucyBmb3IgdGhpcyB3aGljaCBhbGxvdwordGhlIGJvdW5kcyB0byBiZSBtb3ZlZCBiZXR3ZWVuIHRoZSBib3VuZHMgcmVnaXN0ZXJzIGFuZCBzb21lIG5ldyAiYm91bmRzCit0YWJsZXMiLgorCisjQlIgZXhjZXB0aW9ucyBhcmUgYSBuZXcgY2xhc3Mgb2YgZXhjZXB0aW9ucyBqdXN0IGZvciBNUFguIFRoZXkgYXJlCitzaW1pbGFyIGNvbmNlcHR1YWxseSB0byBhIHBhZ2UgZmF1bHQgYW5kIHdpbGwgYmUgcmFpc2VkIGJ5IHRoZSBNUFgKK2hhcmR3YXJlIGR1cmluZyBib3RoIGJvdW5kcyB2aW9sYXRpb25zIG9yIHdoZW4gdGhlIHRhYmxlcyBhcmUgbm90CitwcmVzZW50LiBUaGUga2VybmVsIGhhbmRsZXMgdGhvc2UgI0JSIGV4Y2VwdGlvbnMgZm9yIG5vdC1wcmVzZW50IHRhYmxlcworYnkgY2FydmluZyB0aGUgc3BhY2Ugb3V0IG9mIHRoZSBub3JtYWwgcHJvY2Vzc2VzIGFkZHJlc3Mgc3BhY2UgYW5kIHRoZW4KK3BvaW50aW5nIHRoZSBib3VuZHMtZGlyZWN0b3J5IG92ZXIgdG8gaXQuCisKK1RoZSB0YWJsZXMgbmVlZCB0byBiZSBhY2Nlc3NlZCBhbmQgY29udHJvbGxlZCBieSB1c2Vyc3BhY2UgYmVjYXVzZQordGhlIGluc3RydWN0aW9ucyBmb3IgbW92aW5nIGJvdW5kcyBpbiBhbmQgb3V0IG9mIHRoZW0gYXJlIGV4dHJlbWVseQorZnJlcXVlbnQuIFRoZXkgcG90ZW50aWFsbHkgaGFwcGVuIGV2ZXJ5IHRpbWUgYSByZWdpc3RlciBwb2ludHMgdG8KK21lbW9yeS4gQW55IGRpcmVjdCBrZXJuZWwgaW52b2x2ZW1lbnQgKGxpa2UgYSBzeXNjYWxsKSB0byBhY2Nlc3MgdGhlCit0YWJsZXMgd291bGQgb2J2aW91c2x5IGRlc3Ryb3kgcGVyZm9ybWFuY2UuCisKK1doeSBub3QgZG8gdGhpcyBpbiB1c2Vyc3BhY2U/IE1QWCBkb2VzIG5vdCBzdHJpY3RseSByZXF1aXJlIGFueXRoaW5nIGluCit0aGUga2VybmVsLiBJdCBjYW4gdGhlb3JldGljYWxseSBiZSBkb25lIGNvbXBsZXRlbHkgZnJvbSB1c2Vyc3BhY2UuIEhlcmUKK2FyZSBhIGZldyB3YXlzIHRoaXMgY291bGQgYmUgZG9uZS4gV2UgZG9uJ3QgdGhpbmsgYW55IG9mIHRoZW0gYXJlIHByYWN0aWNhbAoraW4gdGhlIHJlYWwtd29ybGQsIGJ1dCBoZXJlIHRoZXkgYXJlLgorCitROiBDYW4gdmlydHVhbCBzcGFjZSBzaW1wbHkgYmUgcmVzZXJ2ZWQgZm9yIHRoZSBib3VuZHMgdGFibGVzIHNvIHRoYXQgd2UKKyAgIG5ldmVyIGhhdmUgdG8gYWxsb2NhdGUgdGhlbT8KK0E6IE1QWC1lbmFibGVkIGFwcGxpY2F0aW9uIHdpbGwgcG9zc2libHkgY3JlYXRlIGEgbG90IG9mIGJvdW5kcyB0YWJsZXMgaW4KKyAgIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSB0byBzYXZlIGJvdW5kcyBpbmZvcm1hdGlvbi4gVGhlc2UgdGFibGVzIGNhbiB0YWtlCisgICB1cCBodWdlIHN3YXRocyBvZiBtZW1vcnkgKGFzIG11Y2ggYXMgODAlIG9mIHRoZSBtZW1vcnkgb24gdGhlIHN5c3RlbSkKKyAgIGV2ZW4gaWYgd2UgY2xlYW4gdGhlbSB1cCBhZ2dyZXNzaXZlbHkuIEluIHRoZSB3b3JzdC1jYXNlIHNjZW5hcmlvLCB0aGUKKyAgIHRhYmxlcyBjYW4gYmUgNHggdGhlIHNpemUgb2YgdGhlIGRhdGEgc3RydWN0dXJlIGJlaW5nIHRyYWNrZWQuIElPVywgYQorICAgMS1wYWdlIHN0cnVjdHVyZSBjYW4gcmVxdWlyZSA0IGJvdW5kcy10YWJsZSBwYWdlcy4gQW4gWC1HQiB2aXJ0dWFsCisgICBhcmVhIG5lZWRzIDQqWCBHQiBvZiB2aXJ0dWFsIHNwYWNlLCBwbHVzIDJHQiBmb3IgdGhlIGJvdW5kcyBkaXJlY3RvcnkuCisgICBJZiB3ZSB3ZXJlIHRvIHByZWFsbG9jYXRlIHRoZW0gZm9yIHRoZSAxMjhUQiBvZiB1c2VyIHZpcnR1YWwgYWRkcmVzcworICAgc3BhY2UsIHdlIHdvdWxkIG5lZWQgdG8gcmVzZXJ2ZSA1MTJUQisyR0IsIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZQorICAgZW50aXJlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0b2RheS4gVGhpcyBtZWFucyB0aGV5IGNhbiBub3QgYmUgcmVzZXJ2ZWQKKyAgIGFoZWFkIG9mIHRpbWUuIEFsc28sIGEgc2luZ2xlIHByb2Nlc3MncyBwcmUtcG9wdWFsYXRlZCBib3VuZHMgZGlyZWN0b3J5CisgICBjb25zdW1lcyAyR0Igb2YgdmlydHVhbCAqQU5EKiBwaHlzaWNhbCBtZW1vcnkuIElPVywgaXQncyBjb21wbGV0ZWx5CisgICBpbmZlYXNpYmxlIHRvIHByZXBvcHVsYXRlIGJvdW5kcyBkaXJlY3Rvcmllcy4KKworUTogQ2FuIHdlIHByZWFsbG9jYXRlIGJvdW5kcyB0YWJsZSBzcGFjZSBhdCB0aGUgc2FtZSB0aW1lIG1lbW9yeSBpcworICAgYWxsb2NhdGVkIHdoaWNoIG1pZ2h0IGNvbnRhaW4gcG9pbnRlcnMgdGhhdCBtaWdodCBldmVudHVhbGx5IG5lZWQKKyAgIGJvdW5kcyB0YWJsZXM/CitBOiBUaGlzIHdvdWxkIHdvcmsgaWYgd2UgY291bGQgaG9vayB0aGUgc2l0ZSBvZiBlYWNoIGFuZCBldmVyeSBtZW1vcnkKKyAgIGFsbG9jYXRpb24gc3lzY2FsbC4gVGhpcyBjYW4gYmUgZG9uZSBmb3Igc21hbGwsIGNvbnN0cmFpbmVkIGFwcGxpY2F0aW9ucy4KKyAgIEJ1dCwgaXQgaXNuJ3QgcHJhY3RpY2FsIGF0IGEgbGFyZ2VyIHNjYWxlIHNpbmNlIGEgZ2l2ZW4gYXBwIGhhcyBubworICAgd2F5IG9mIGNvbnRyb2xsaW5nIGhvdyBhbGwgdGhlIHBhcnRzIG9mIHRoZSBhcHAgbWlnaHQgYWxsb2NhdGUgbWVtb3J5CisgICAodGhpbmsgbGlicmFyaWVzKS4gVGhlIGtlcm5lbCBpcyByZWFsbHkgdGhlIG9ubHkgcGxhY2UgdG8gaW50ZXJjZXB0CisgICB0aGVzZSBjYWxscy4KKworUTogQ291bGQgYSBib3VuZHMgZmF1bHQgYmUgaGFuZGVkIHRvIHVzZXJzcGFjZSBhbmQgdGhlIHRhYmxlcyBhbGxvY2F0ZWQKKyAgIHRoZXJlIGluIGEgc2lnbmFsIGhhbmRsZXIgaW50ZWFkIG9mIGluIHRoZSBrZXJuZWw/CitBOiBtbWFwKCkgaXMgbm90IG9uIHRoZSBsaXN0IG9mIHNhZmUgYXN5bmMgaGFuZGxlciBmdW5jdGlvbnMgYW5kIGV2ZW4KKyAgIGlmIG1tYXAoKSB3b3VsZCB3b3JrIGl0IHN0aWxsIHJlcXVpcmVzIGxvY2tpbmcgb3IgbmFzdHkgdHJpY2tzIHRvCisgICBrZWVwIHRyYWNrIG9mIHRoZSBhbGxvY2F0aW9uIHN0YXRlIHRoZXJlLgorCitIYXZpbmcgcnVsZWQgb3V0IGFsbCBvZiB0aGUgdXNlcnNwYWNlLW9ubHkgYXBwcm9hY2hlcyBmb3IgbWFuYWdpbmcKK2JvdW5kcyB0YWJsZXMgdGhhdCB3ZSBjb3VsZCB0aGluayBvZiwgd2UgY3JlYXRlIHRoZW0gb24gZGVtYW5kIGluCit0aGUga2VybmVsLgorCitEZWNvZGluZyBNUFggaW5zdHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGEgI0JSIGlzIGdlbmVyYXRlZCBkdWUgdG8gYSBib3VuZHMgdmlvbGF0aW9uIGNhdXNlZCBieSBNUFguCitXZSBuZWVkIHRvIGRlY29kZSBNUFggaW5zdHJ1Y3Rpb25zIHRvIGdldCB2aW9sYXRpb24gYWRkcmVzcyBhbmQKK3NldCB0aGlzIGFkZHJlc3MgaW50byBleHRlbmRlZCBzdHJ1Y3Qgc2lnaW5mby4KKworVGhlIF9zaWdmYXVsdCBmZWlsZCBvZiBzdHJ1Y3Qgc2lnaW5mbyBpcyBleHRlbmRlZCBhcyBmb2xsb3c6CisKKzg3CQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCis4OAkJc3RydWN0IHsKKzg5CQkJdm9pZCBfX3VzZXIgKl9hZGRyOyAvKiBmYXVsdGluZyBpbnNuL21lbW9yeSByZWYuICovCis5MCAjaWZkZWYgX19BUkNIX1NJX1RSQVBOTworOTEJCQlpbnQgX3RyYXBubzsJLyogVFJBUCAjIHdoaWNoIGNhdXNlZCB0aGUgc2lnbmFsICovCis5MiAjZW5kaWYKKzkzCQkJc2hvcnQgX2FkZHJfbHNiOyAvKiBMU0Igb2YgdGhlIHJlcG9ydGVkIGFkZHJlc3MgKi8KKzk0CQkJc3RydWN0IHsKKzk1CQkJCXZvaWQgX191c2VyICpfbG93ZXI7Cis5NgkJCQl2b2lkIF9fdXNlciAqX3VwcGVyOworOTcJCQl9IF9hZGRyX2JuZDsKKzk4CQl9IF9zaWdmYXVsdDsKKworVGhlICdfYWRkcicgZmllbGQgcmVmZXJzIHRvIHZpb2xhdGlvbiBhZGRyZXNzLCBhbmQgbmV3ICdfYWRkcl9hbmQnCitmaWVsZCByZWZlcnMgdG8gdGhlIHVwcGVyL2xvd2VyIGJvdW5kcyB3aGVuIGEgI0JSIGlzIGNhdXNlZC4KKworR2xpYmMgd2lsbCBiZSBhbHNvIHVwZGF0ZWQgdG8gc3VwcG9ydCB0aGlzIG5ldyBzaWdpbmZvLiBTbyB1c2VyCitjYW4gZ2V0IHZpb2xhdGlvbiBhZGRyZXNzIGFuZCBib3VuZHMgd2hlbiBib3VuZHMgdmlvbGF0aW9ucyBvY2N1ci4KKworQ2xlYW51cCB1bnVzZWQgYm91bmRzIHRhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGEgQk5EU1RYIGluc3RydWN0aW9uIGF0dGVtcHRzIHRvIHNhdmUgYm91bmRzIHRvIGEgYm91bmRzIGRpcmVjdG9yeQorZW50cnkgbWFya2VkIGFzIGludmFsaWQsIGEgI0JSIGlzIGdlbmVyYXRlZC4gVGhpcyBpcyBhbiBpbmRpY2F0aW9uIHRoYXQKK25vIGJvdW5kcyB0YWJsZSBleGlzdHMgZm9yIHRoaXMgZW50cnkuIEluIHRoaXMgY2FzZSB0aGUgZmF1bHQgaGFuZGxlcgord2lsbCBhbGxvY2F0ZSBhIG5ldyBib3VuZHMgdGFibGUgb24gZGVtYW5kLgorCitTaW5jZSB0aGUga2VybmVsIGFsbG9jYXRlZCB0aG9zZSB0YWJsZXMgb24tZGVtYW5kIHdpdGhvdXQgdXNlcnNwYWNlCitrbm93bGVkZ2UsIGl0IGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlbSB3aGVuIHRoZSBhc3NvY2lhdGVkCittYXBwaW5ncyBnbyBhd2F5LgorCitIZXJlLCB0aGUgc29sdXRpb24gZm9yIHRoaXMgaXNzdWUgaXMgdG8gaG9vayBkb19tdW5tYXAoKSB0byBjaGVjaword2hldGhlciBvbmUgcHJvY2VzcyBpcyBNUFggZW5hYmxlZC4gSWYgeWVzLCB0aG9zZSBib3VuZHMgdGFibGVzIGNvdmVyZWQKK2luIHRoZSB2aXJ0dWFsIGFkZHJlc3MgcmVnaW9uIHdoaWNoIGlzIGJlaW5nIHVubWFwcGVkIHdpbGwgYmUgZnJlZWQgYWxzby4KKworQWRkaW5nIG5ldyBwcmN0bCBjb21tYW5kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUd28gbmV3IHByY3RsIGNvbW1hbmRzIGFyZSBhZGRlZCB0byBlbmFibGUgYW5kIGRpc2FibGUgTVBYIGJvdW5kcyB0YWJsZXMKK21hbmFnZW1lbnQgaW4ga2VybmVsLgorCisxNTUJI2RlZmluZSBQUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQJNDMKKzE1NgkjZGVmaW5lIFBSX01QWF9ESVNBQkxFX01BTkFHRU1FTlQJNDQKKworUnVudGltZSBsaWJyYXJ5IGluIHVzZXJzcGFjZSBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGlvbiBvZiBib3VuZHMKK2RpcmVjdG9yeS4gU28ga2VybmVsIGhhdmUgdG8gdXNlIFhTQVZFIGluc3RydWN0aW9uIHRvIGdldCB0aGUgYmFzZQorb2YgYm91bmRzIGRpcmVjdG9yeSBmcm9tIEJORENGRyByZWdpc3Rlci4KKworQnV0IFhTQVZFIGlzIGV4cGVjdGVkIHRvIGJlIHZlcnkgZXhwZW5zaXZlLiBJbiBvcmRlciB0byBkbyBwZXJmb3JtYW5jZQorb3B0aW1pemF0aW9uLCB3ZSBoYXZlIHRvIGdldCB0aGUgYmFzZSBvZiBib3VuZHMgZGlyZWN0b3J5IGFuZCBzYXZlIGl0CitpbnRvIHN0cnVjdCBtbV9zdHJ1Y3QgdG8gYmUgdXNlZCBpbiBmdXR1cmUgZHVyaW5nIFBSX01QWF9FTkFCTEVfTUFOQUdFTUVOVAorY29tbWFuZCBleGVjdXRpb24uCisKKworNC4gU3BlY2lhbCBydWxlcworPT09PT09PT09PT09PT09PQorCisxKSBJZiB1c2Vyc3BhY2UgaXMgcmVxdWVzdGluZyBoZWxwIGZyb20gdGhlIGtlcm5lbCB0byBkbyB0aGUgbWFuYWdlbWVudAorb2YgYm91bmRzIHRhYmxlcywgaXQgbWF5IG5vdCBjcmVhdGUgb3IgbW9kaWZ5IGVudHJpZXMgaW4gdGhlIGJvdW5kcyBkaXJlY3RvcnkuCisKK0NlcnRhaW5seSB1c2VycyBjYW4gYWxsb2NhdGUgYm91bmRzIHRhYmxlcyBhbmQgZm9yY2libHkgcG9pbnQgdGhlIGJvdW5kcworZGlyZWN0b3J5IGF0IHRoZW0gdGhyb3VnaCBYU0FWRSBpbnN0cnVjdGlvbiwgYW5kIHRoZW4gc2V0IHZhbGlkIGJpdAorb2YgYm91bmRzIGVudHJ5IHRvIGhhdmUgdGhpcyBlbnRyeSB2YWxpZC4gIEJ1dCwgdGhlIGtlcm5lbCB3aWxsIGRlY2xpbmUKK3RvIGFzc2lzdCBpbiBtYW5hZ2luZyB0aGVzZSB0YWJsZXMuCisKKzIpIFVzZXJzcGFjZSBtYXkgbm90IHRha2UgbXVsdGlwbGUgYm91bmRzIGRpcmVjdG9yeSBlbnRyaWVzIGFuZCBwb2ludAordGhlbSBhdCB0aGUgc2FtZSBib3VuZHMgdGFibGUuCisKK1RoaXMgaXMgYWxsb3dlZCBhcmNoaXRlY3R1cmFsbHkuICBTZWUgbW9yZSBpbmZvcm1hdGlvbiAiSW50ZWwoUikgQXJjaGl0ZWN0dXJlCitJbnN0cnVjdGlvbiBTZXQgRXh0ZW5zaW9ucyBQcm9ncmFtbWluZyBSZWZlcmVuY2UiICg5LjMuNCkuCisKK0hvd2V2ZXIsIGlmIHVzZXJzIGRpZCB0aGlzLCB0aGUga2VybmVsIG1pZ2h0IGJlIGZvb2xlZCBpbiB0byB1bm1hcGluZyBhbgoraW4tdXNlIGJvdW5kcyB0YWJsZSBzaW5jZSBpdCBkb2VzIG5vdCByZWNvZ25pemUgc2hhcmluZy4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggODg4ZDhiZC4uMWM2M2NmZSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTg2MSw2ICs4NjEsNyBAQAogVzoJaHR0cDovL3d3dy5saW51eDRzYW0ub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWFyY2gvYXJtL21hY2gtYXQ5MS8KK0Y6CWluY2x1ZGUvc29jL2F0OTEvCiBGOglhcmNoL2FybS9ib290L2R0cy9hdDkxKi5kdHMKIEY6CWFyY2gvYXJtL2Jvb3QvZHRzL2F0OTEqLmR0c2kKIEY6CWFyY2gvYXJtL2Jvb3QvZHRzL3NhbWEqLmR0cwpAQCAtMTMwOCwzMCArMTMwOSwyMiBAQAogRjoJZHJpdmVycy8qLyovKnJvY2tjaGlwKgogRjoJc291bmQvc29jL3JvY2tjaGlwLwogCi1BUk0vU0FNU1VORyBBUk0gQVJDSElURUNUVVJFUwotTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTToJS3VramluIEtpbSA8a2dlbmUua2ltQHNhbXN1bmcuY29tPgorQVJNL1NBTVNVTkcgRVhZTk9TIEFSTSBBUkNISVRFQ1RVUkVTCitNOglLdWtqaW4gS2ltIDxrZ2VuZUBrZXJuZWwub3JnPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEw6CWxpbnV4LXNhbXN1bmctc29jQHZnZXIua2VybmVsLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1XOglodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vbGludXgvCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9ib290L2R0cy9zM2MqCiBGOglhcmNoL2FybS9ib290L2R0cy9leHlub3MqCiBGOglhcmNoL2FybS9wbGF0LXNhbXN1bmcvCiBGOglhcmNoL2FybS9tYWNoLXMzYzI0Ki8KIEY6CWFyY2gvYXJtL21hY2gtczNjNjR4eC8KK0Y6CWFyY2gvYXJtL21hY2gtczVwKi8KK0Y6CWFyY2gvYXJtL21hY2gtZXh5bm9zKi8KIEY6CWRyaXZlcnMvKi8qczNjMjQxMCoKIEY6CWRyaXZlcnMvKi8qLypzM2MyNDEwKgogRjoJZHJpdmVycy9zcGkvc3BpLXMzYyoKIEY6CXNvdW5kL3NvYy9zYW1zdW5nLyoKLQotQVJNL1M1UCBFWFlOT1MgQVJNIEFSQ0hJVEVDVFVSRVMKLU06CUt1a2ppbiBLaW0gPGtnZW5lLmtpbUBzYW1zdW5nLmNvbT4KLUw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1MOglsaW51eC1zYW1zdW5nLXNvY0B2Z2VyLmtlcm5lbC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJTWFpbnRhaW5lZAotRjoJYXJjaC9hcm0vbWFjaC1zNXAqLwotRjoJYXJjaC9hcm0vbWFjaC1leHlub3MqLwogTjoJZXh5bm9zCiAKIEFSTS9TQU1TVU5HIE1PQklMRSBNQUNISU5FIFNVUFBPUlQKQEAgLTEzODEsMTIgKzEzNzQsMTIgQEAKIEY6CWFyY2gvYXJtL2NvbmZpZ3MvYXBlNmV2bV9kZWZjb25maWcKIEY6CWFyY2gvYXJtL2NvbmZpZ3MvYXJtYWRpbGxvODAwZXZhX2RlZmNvbmZpZwogRjoJYXJjaC9hcm0vY29uZmlncy9ib2Nrd19kZWZjb25maWcKLUY6CWFyY2gvYXJtL2NvbmZpZ3Mva29lbHNjaF9kZWZjb25maWcKIEY6CWFyY2gvYXJtL2NvbmZpZ3Mva3ptOWdfZGVmY29uZmlnCiBGOglhcmNoL2FybS9jb25maWdzL2xhZ2VyX2RlZmNvbmZpZwogRjoJYXJjaC9hcm0vY29uZmlncy9tYWNrZXJlbF9kZWZjb25maWcKIEY6CWFyY2gvYXJtL2NvbmZpZ3MvbWFyemVuX2RlZmNvbmZpZwogRjoJYXJjaC9hcm0vY29uZmlncy9zaG1vYmlsZV9kZWZjb25maWcKK0Y6CWFyY2gvYXJtL2luY2x1ZGUvZGVidWcvcmVuZXNhcy1zY2lmLlMKIEY6CWFyY2gvYXJtL21hY2gtc2htb2JpbGUvCiBGOglkcml2ZXJzL3NoLwogCkBAIC0xNDMwLDYgKzE0MjMsNyBAQAogRjoJZHJpdmVycy91c2IvZHdjMy9kd2MzLXN0LmMKIEY6CWRyaXZlcnMvdXNiL2hvc3QvZWhjaS1zdC5jCiBGOglkcml2ZXJzL3VzYi9ob3N0L29oY2ktc3QuYworRjoJZHJpdmVycy9hdGEvYWhjaV9zdC5jCiAKIEFSTS9URUNITk9MT0dJQyBTWVNURU1TIFRTNzI1MCBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CkBAIC0xNTAzLDYgKzE0OTcsMTkgQEAKIEY6CWRyaXZlcnMvY2xrL3V4NTAwLwogRjoJaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2Nsay11eDUwMC5oCiAKK0FSTS9WRVJTQVRJTEUgRVhQUkVTUyBQTEFURk9STQorTToJTGl2aXUgRHVkYXUgPGxpdml1LmR1ZGF1QGFybS5jb20+CitNOglTdWRlZXAgSG9sbGEgPHN1ZGVlcC5ob2xsYUBhcm0uY29tPgorTToJTG9yZW56byBQaWVyYWxpc2kgPGxvcmVuem8ucGllcmFsaXNpQGFybS5jb20+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vYm9vdC9kdHMvdmV4cHJlc3MqCitGOglhcmNoL2FybS9tYWNoLXZleHByZXNzLworRjoJKi8qL3ZleHByZXNzKgorRjoJKi8qLyovdmV4cHJlc3MqCitGOglkcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLW9zYy5jCitGOglkcml2ZXJzL2Nsb2Nrc291cmNlL3ZlcnNhdGlsZS5jCisKIEFSTS9WRlAgU1VQUE9SVAogTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKQEAgLTE4MjgsNyArMTgzNSw3IEBACiBGOgluZXQvYXgyNS8KIAogQVo2MDA3IERWQiBEUklWRVIKLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdpdApAQCAtMjA5NywxMCArMjEwNCwxMyBAQAogQlJPQURDT00gQkNNN1hYWCBBUk0gQVJDSElURUNUVVJFCiBNOglNYXJjIENhcmlubyA8bWFyYy5jZWVlZWVAZ21haWwuY29tPgogTToJQnJpYW4gTm9ycmlzIDxjb21wdXRlcnNmb3JwZWFjZUBnbWFpbC5jb20+CitNOglHcmVnb3J5IEZvbmcgPGdyZWdvcnkuMHhmMEBnbWFpbC5jb20+CitNOglGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLWJjbS8qYnJjbXN0YioKIEY6CWFyY2gvYXJtL2Jvb3QvZHRzL2JjbTcqLmR0cyoKK0Y6CWRyaXZlcnMvYnVzL2JyY21zdGJfZ2lzYi5jCiAKIEJST0FEQ09NIFRHMyBHSUdBQklUIEVUSEVSTkVUIERSSVZFUgogTToJUHJhc2hhbnQgU3JlZWRoYXJhbiA8cHJhc2hhbnRAYnJvYWRjb20uY29tPgpAQCAtMjEzMSw2ICsyMTQxLDIwIEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvc2NzaS9ibngyaS8KIAorQlJPQURDT00gQ1lHTlVTL0lQUk9DIEFSTSBBUkNISVRFQ1RVUkUKK006CVJheSBKdWkgPHJqdWlAYnJvYWRjb20uY29tPgorTToJU2NvdHQgQnJhbmRlbiA8c2JyYW5kZW5AYnJvYWRjb20uY29tPgorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CWJjbS1rZXJuZWwtZmVlZGJhY2stbGlzdEBicm9hZGNvbS5jb20KK1Q6CWdpdCBnaXQ6Ly9naXQuZ2l0aHViLmNvbS9icmNtL2xpbnV4LmdpdAorUzoJTWFpbnRhaW5lZAorTjoJaXByb2MKK046CWN5Z251cworTjoJYmNtOTExMyoKK046CWJjbTk1ODMqCitOOgliY201ODMqCitOOgliY20xMTMqCisKIEJST0FEQ09NIEtPTkEgR1BJTyBEUklWRVIKIE06CVJheSBKdWkgPHJqdWlAYnJvYWRjb20uY29tPgogTDoJYmNtLWtlcm5lbC1mZWVkYmFjay1saXN0QGJyb2FkY29tLmNvbQpAQCAtMjE5OCw3ICsyMjIyLDcgQEAKIEY6CWZzL2J0cmZzLwogCiBCVFRWIFZJREVPNExJTlVYIERSSVZFUgotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eHR2Lm9yZwogVDoJZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0CkBAIC0yNTA0LDggKzI1MjgsNyBAQAogTDoJbGludXgtY2lmc0B2Z2VyLmtlcm5lbC5vcmcKIEw6CXNhbWJhLXRlY2huaWNhbEBsaXN0cy5zYW1iYS5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL2xpbnV4LWNpZnMuc2FtYmEub3JnLwotUToJaHR0cDovL3BhdGNod29yay5vemxhYnMub3JnL3Byb2plY3QvbGludXgtY2lmcy1jbGllbnQvbGlzdC8KLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvc2ZyZW5jaC9jaWZzLTIuNi5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQuc2FtYmEub3JnL3NmcmVuY2gvY2lmcy0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2lmcy8KIEY6CWZzL2NpZnMvCkBAIC0yNTgyLDcgKzI2MDUsNyBAQAogTDoJbGludXgtbW1Aa3ZhY2sub3JnCiBTOglNYWludGFpbmVkCiBGOgltbS9tZW1jb250cm9sLmMKLUY6CW1tL3BhZ2VfY2dyb3VwLmMKK0Y6CW1tL3N3YXBfY2dyb3VwLmMKIAogQ09SRVRFTVAgSEFSRFdBUkUgTU9OSVRPUklORyBEUklWRVIKIE06CUZlbmdodWEgWXUgPGZlbmdodWEueXVAaW50ZWwuY29tPgpAQCAtMjYzMiw2ICsyNjU1LDE2IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1iaWdfbGl0dGxlLmMKIAorQ1BVSURMRSBEUklWRVIgLSBBUk0gRVhZTk9TCitNOglCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6IDxiLnpvbG5pZXJraWVAc2Ftc3VuZy5jb20+CitNOglEYW5pZWwgTGV6Y2FubyA8ZGFuaWVsLmxlemNhbm9AbGluYXJvLm9yZz4KK006CUt1a2ppbiBLaW0gPGtnZW5lQGtlcm5lbC5vcmc+CitMOglsaW51eC1wbUB2Z2VyLmtlcm5lbC5vcmcKK0w6CWxpbnV4LXNhbXN1bmctc29jQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1leHlub3MuYworRjoJYXJjaC9hcm0vbWFjaC1leHlub3MvcG0uYworCiBDUFVJRExFIERSSVZFUlMKIE06CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAcmp3eXNvY2tpLm5ldD4KIE06CURhbmllbCBMZXpjYW5vIDxkYW5pZWwubGV6Y2Fub0BsaW5hcm8ub3JnPgpAQCAtMjY5OSw3ICsyNzMyLDcgQEAKIAogQ1gxOCBWSURFTzRMSU5VWCBEUklWRVIKIE06CUFuZHkgV2FsbHMgPGF3YWxsc0BtZC5tZXRyb2Nhc3QubmV0PgotTDoJaXZ0di1kZXZlbEBpdnR2ZHJpdmVyLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitMOglpdnR2LWRldmVsQGl2dHZkcml2ZXIub3JnIChzdWJzY3JpYmVycy1vbmx5KQogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCiBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKIFc6CWh0dHA6Ly9saW51eHR2Lm9yZwpAQCAtMjcxOSw3ICsyNzUyLDcgQEAKIEY6CWluY2x1ZGUvbWVkaWEvY3gyMzQxeCoKIAogQ1g4OCBWSURFTzRMSU5VWCBEUklWRVIKLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdpdApAQCAtMjg2MiwxMSArMjg5NSwxMCBAQAogRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL2RtZmUuYwogCiBEQzM5MC9BTTUzQzk3NCBTQ1NJIGRyaXZlcgotTToJS3VydCBHYXJsb2ZmIDxnYXJsb2ZmQHN1c2UuZGU+Ci1XOglodHRwOi8vd3d3LmdhcmxvZmYuZGUva3VydC9saW51eC9kYzM5MC8KLU06CUd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorTToJSGFubmVzIFJlaW5lY2tlIDxoYXJlQHN1c2UuZGU+CitMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9zY3NpL3Rtc2NzaW0uKgorRjoJZHJpdmVycy9zY3NpL2FtNTNjOTc0LmMKIAogREMzOTV4IFNDU0kgZHJpdmVyCiBNOglPbGl2ZXIgTmV1a3VtIDxvbGl2ZXJAbmV1a3VtLm9yZz4KQEAgLTM0MDIsNyArMzQzNCw3IEBACiBFREFDLUNPUkUKIE06CURvdWcgVGhvbXBzb24gPGRvdWd0aG9tcHNvbkB4bWlzc2lvbi5jb20+CiBNOglCb3Jpc2xhdiBQZXRrb3YgPGJwQGFsaWVuOC5kZT4KLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWJsdWVzbW9rZS5zb3VyY2Vmb3JnZS5uZXQKIFM6CVN1cHBvcnRlZApAQCAtMzQ1MSw3ICszNDgzLDcgQEAKIEY6CWRyaXZlcnMvZWRhYy9lN3h4eF9lZGFjLmMKIAogRURBQy1HSEVTCi1NOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG0uY2hlaGFiQHNhbXN1bmcuY29tPgorTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiBXOglibHVlc21va2Uuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCkBAIC0zNDc5LDIxICszNTExLDIxIEBACiBGOglkcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCiAKIEVEQUMtSTU0MDAKLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWJsdWVzbW9rZS5zb3VyY2Vmb3JnZS5uZXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKIAogRURBQy1JNzMwMAotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwogVzoJYmx1ZXNtb2tlLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9lZGFjL2k3MzAwX2VkYWMuYwogCiBFREFDLUk3Q09SRQotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwogVzoJYmx1ZXNtb2tlLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZApAQCAtMzUzNiw3ICszNTY4LDcgQEAKIEY6CWRyaXZlcnMvZWRhYy9yODI2MDBfZWRhYy5jCiAKIEVEQUMtU0JSSURHRQotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwogVzoJYmx1ZXNtb2tlLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZApAQCAtMzU5Niw3ICszNjI4LDcgQEAKIEY6CWRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9laGVhLwogCiBFTTI4WFggVklERU80TElOVVggRFJJVkVSCi1NOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG0uY2hlaGFiQHNhbXN1bmcuY29tPgorTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2xpbnV4dHYub3JnCiBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKQEAgLTUxOTIsNyArNTIyNCw3IEBACiAKIElWVFYgVklERU80TElOVVggRFJJVkVSCiBNOglBbmR5IFdhbGxzIDxhd2FsbHNAbWQubWV0cm9jYXN0Lm5ldD4KLUw6CWl2dHYtZGV2ZWxAaXZ0dmRyaXZlci5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorTDoJaXZ0di1kZXZlbEBpdnR2ZHJpdmVyLm9yZyAoc3Vic2NyaWJlcnMtb25seSkKIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0CiBXOglodHRwOi8vd3d3Lml2dHZkcml2ZXIub3JnCkBAIC01OTY4LDcgKzYwMDAsNyBAQAogRjoJZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8qCiAKIE1FRElBIElOUFVUIElORlJBU1RSVUNUVVJFIChWNEwvRFZCKQotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBQOglMaW51eFRWLm9yZyBQcm9qZWN0CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eHR2Lm9yZwpAQCAtNTk5NywxMCArNjAyOSwxMyBAQAogUzoJT2RkIEZpeGVzCiBGOglkcml2ZXJzL21lZGlhL3BhcnBvcnQvcG1zKgogCi1NRUdBUkFJRCBTQ1NJIERSSVZFUlMKLU06CU5lZWxhIFN5YW0gS29sbGkgPG1lZ2FyYWlkbGludXhAbHNpLmNvbT4KK01FR0FSQUlEIFNDU0kvU0FTIERSSVZFUlMKK006CUthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KK006CVN1bWl0IFNheGVuYSA8c3VtaXQuc2F4ZW5hQGF2YWdvdGVjaC5jb20+CitNOglVZGF5IExpbmdhbGEgPHVkYXkubGluZ2FsYUBhdmFnb3RlY2guY29tPgorTDoJbWVnYXJhaWRsaW51eC5wZGxAYXZhZ290ZWNoLmNvbQogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly9tZWdhcmFpZC5sc2lsb2dpYy5jb20KK1c6CWh0dHA6Ly93d3cubHNpLmNvbQogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9zY3NpL21lZ2FyYWlkLnR4dAogRjoJZHJpdmVycy9zY3NpL21lZ2FyYWlkLioKQEAgLTYzMTEsNyArNjM0Niw2IEBACiBGOglkcml2ZXJzL3Njc2kvZ19OQ1I1MzgwX21taW8uYwogRjoJZHJpdmVycy9zY3NpL21hY19zY3NpLioKIEY6CWRyaXZlcnMvc2NzaS9wYXMxNi4qCi1GOglkcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKIEY6CWRyaXZlcnMvc2NzaS9zdW4zX3Njc2kuKgogRjoJZHJpdmVycy9zY3NpL3N1bjNfc2NzaV92bWUuYwogRjoJZHJpdmVycy9zY3NpL3QxMjguKgpAQCAtNjU2Nyw2ICs2NjAxLDEzIEBACiBGOglEb2N1bWVudGF0aW9uL3Njc2kvTmluamFTQ1NJLnR4dAogRjoJZHJpdmVycy9zY3NpL25zcDMyKgogCitOSU9TMiBBUkNISVRFQ1RVUkUKK006CUxleSBGb29uIFRhbiA8bGZ0YW5AYWx0ZXJhLmNvbT4KK0w6CW5pb3MyLWRldkBsaXN0cy5yb2NrZXRib2FyZHMub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1Q6CWdpdCBnaXQ6Ly9naXQucm9ja2V0Ym9hcmRzLm9yZy9saW51eC1zb2NmcGdhLmdpdAorUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9uaW9zMi8KKwogTlRCIERSSVZFUgogTToJSm9uIE1hc29uIDxqZG1hc29uQGt1ZHp1LnVzPgogTToJRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+CkBAIC02Njc2LDYgKzY3MTcsMTQgQEAKIFM6CU1haW50YWluZWQKIEY6CXNvdW5kL3NvYy9vbWFwLwogCitPTUFQIEdFTkVSQUwgUFVSUE9TRSBNRU1PUlkgQ09OVFJPTExFUiBTVVBQT1JUCitNOglSb2dlciBRdWFkcm9zIDxyb2dlcnFAdGkuY29tPgorTToJVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KK0w6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL21lbW9yeS9vbWFwLWdwbWMuYworRjoJYXJjaC9hcm0vbWFjaC1vbWFwMi8qZ3BtYyoKKwogT01BUCBGUkFNRUJVRkZFUiBTVVBQT1JUCiBNOglUb21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPgogTDoJbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnCkBAIC03MDUzLDYgKzcxMDIsMTYgQEAKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kveGdlbmUtcGNpLnR4dAogRjoJZHJpdmVycy9wY2kvaG9zdC9wY2kteGdlbmUuYwogCitQQ0kgRFJJVkVSIEZPUiBGUkVFU0NBTEUgTEFZRVJTQ0FQRQorTToJTWluZ2h1YW4gTGlhbiA8bWluZ2h1YW4uTGlhbkBmcmVlc2NhbGUuY29tPgorTToJTWluZ2thaSBIdSA8bWluZ2thaS5odUBmcmVlc2NhbGUuY29tPgorTToJUm95IFphbmcgPHRpZS1mZWkuemFuZ0BmcmVlc2NhbGUuY29tPgorTDoJbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKK0w6CWxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmcKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9wY2kvaG9zdC8qbGF5ZXJzY2FwZSoKKwogUENJIERSSVZFUiBGT1IgSU1YNgogTToJUmljaGFyZCBaaHUgPHI2NTAzN0BmcmVlc2NhbGUuY29tPgogTToJTHVjYXMgU3RhY2ggPGwuc3RhY2hAcGVuZ3V0cm9uaXguZGU+CkBAIC04MDE5LDcgKzgwNzgsNyBAQAogRjoJZHJpdmVycy9tZWRpYS9pMmMvc2FhNjU4OCoKIAogU0FBNzEzNCBWSURFTzRMSU5VWCBEUklWRVIKLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdpdApAQCAtODQ3Nyw3ICs4NTM2LDcgQEAKIEY6CWRyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzL3JhZGlvLXVzYi1zaTQ3MTMuYwogCiBTSUFOTyBEVkIgRFJJVkVSCi1NOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG0uY2hlaGFiQHNhbXN1bmcuY29tPgorTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2xpbnV4dHYub3JnCiBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKQEAgLTg2ODgsNyArODc0Nyw5IEBACiBGOglkcml2ZXJzL2xlZHMvbGVkcy1uZXQ0OHh4LmMKIAogU09GVExPR0lDIDZ4MTAgTVBFRyBDT0RFQwotTToJSXNtYWVsIEx1Y2VubyA8aXNtYWVsLmx1Y2Vub0Bjb3JwLmJsdWVjaGVycnkubmV0PgorTToJQmx1ZWNoZXJyeSBNYWludGFpbmVycyA8bWFpbnRhaW5lcnNAYmx1ZWNoZXJyeWR2ci5jb20+CitNOglBbmRyZXkgVXRraW4gPGFuZHJleS51dGtpbkBjb3JwLmJsdWVjaGVycnkubmV0PgorTToJQW5kcmV5IFV0a2luIDxhbmRyZXkua3JpZWdlci51dGtpbkBnbWFpbC5jb20+CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvCkBAIC05MTYyLDcgKzkyMjMsNyBAQAogRjoJZHJpdmVycy9tZWRpYS9pMmMvdGRhOTg0MCoKIAogVEVBNTc2MSBUVU5FUiBEUklWRVIKLU06CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bS5jaGVoYWJAc2Ftc3VuZy5jb20+CitNOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAb3NnLnNhbXN1bmcuY29tPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdpdApAQCAtOTE3MCw3ICs5MjMxLDcgQEAKIEY6CWRyaXZlcnMvbWVkaWEvdHVuZXJzL3RlYTU3NjEuKgogCiBURUE1NzY3IFRVTkVSIERSSVZFUgotTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtLmNoZWhhYkBzYW1zdW5nLmNvbT4KK006CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBvc2cuc2Ftc3VuZy5jb20+CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eHR2Lm9yZwogVDoJZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0CkBAIC05NDgyLDcgKzk1NDMsNyBAQAogRjoJbW0vc2htZW0uYwogCiBUTTYwMDAgVklERU80TElOVVggRFJJVkVSCi1NOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG0uY2hlaGFiQHNhbXN1bmcuY29tPgorTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2xpbnV4dHYub3JnCiBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKQEAgLTEwMzAzLDcgKzEwMzY0LDcgQEAKIEY6CWFyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrLyoKIAogWEMyMDI4LzMwMjggVFVORVIgRFJJVkVSCi1NOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG0uY2hlaGFiQHNhbXN1bmcuY29tPgorTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2xpbnV4dHYub3JnCiBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggY2U3MDM2MS4uZmQ4MGM2ZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMwogUEFUQ0hMRVZFTCA9IDE4CiBTVUJMRVZFTCA9IDAKLUVYVFJBVkVSU0lPTiA9IC1yYzcKK0VYVFJBVkVSU0lPTiA9CiBOQU1FID0gRGlzZWFzZWQgTmV3dAogCiAjICpET0NVTUVOVEFUSU9OKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCmluZGV4IGY5YzczMmUuLmU1MWY1NzggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKQEAgLTEwNCwxMSArMTA0LDEyIEBACiB9OwogCiBzdGF0aWMgaW50Ci1vc2ZfZmlsbGRpcih2b2lkICpfX2J1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWxlbiwgbG9mZl90IG9mZnNldCwKLQkgICAgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKK29zZl9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtbGVuLAorCSAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQogewogCXN0cnVjdCBvc2ZfZGlyZW50IF9fdXNlciAqZGlyZW50OwotCXN0cnVjdCBvc2ZfZGlyZW50X2NhbGxiYWNrICpidWYgPSAoc3RydWN0IG9zZl9kaXJlbnRfY2FsbGJhY2sgKikgX19idWY7CisJc3RydWN0IG9zZl9kaXJlbnRfY2FsbGJhY2sgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBvc2ZfZGlyZW50X2NhbGxiYWNrLCBjdHgpOwogCXVuc2lnbmVkIGludCByZWNsZW4gPSBBTElHTihOQU1FX09GRlNFVCArIG5hbWxlbiArIDEsIHNpemVvZih1MzIpKTsKIAl1bnNpZ25lZCBpbnQgZF9pbm87CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDMzNGNlNzAuLmNhYmQ1MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vaW8uaApAQCAtMTMsOCArMTMsNiBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCi0jZGVmaW5lIFBDSV9JT0JBU0UgKCh2b2lkIF9faW9tZW0gKikwKQotCiBleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX3Byb3QocGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDg5YzRiNWMuLmM4NDI0YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMzIwLDI0ICszMjAsNiBAQAogCXNlbGVjdCBTUEFSU0VfSVJRCiAJc2VsZWN0IFVTRV9PRgogCi1jb25maWcgQVJDSF9JTlRFR1JBVE9SCi0JYm9vbCAiQVJNIEx0ZC4gSW50ZWdyYXRvciBmYW1pbHkiCi0Jc2VsZWN0IEFSTV9BTUJBCi0Jc2VsZWN0IEFSTV9QQVRDSF9QSFlTX1ZJUlQgaWYgTU1VCi0Jc2VsZWN0IEFVVE9fWlJFTEFERFIKLQlzZWxlY3QgQ09NTU9OX0NMSwotCXNlbGVjdCBDT01NT05fQ0xLX1ZFUlNBVElMRQotCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCi0Jc2VsZWN0IEhBVkVfVENNCi0Jc2VsZWN0IElDU1QKLQlzZWxlY3QgTVVMVElfSVJRX0hBTkRMRVIKLQlzZWxlY3QgUExBVF9WRVJTQVRJTEUKLQlzZWxlY3QgU1BBUlNFX0lSUQotCXNlbGVjdCBVU0VfT0YKLQlzZWxlY3QgVkVSU0FUSUxFX0ZQR0FfSVJRCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgQVJNJ3MgSW50ZWdyYXRvciBwbGF0Zm9ybS4KLQogY29uZmlnIEFSQ0hfUkVBTFZJRVcKIAlib29sICJBUk0gTHRkLiBSZWFsVmlldyBmYW1pbHkiCiAJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCkBAIC0zNTAsNiArMzMyLDcgQEAKIAlzZWxlY3QgSUNTVAogCXNlbGVjdCBORUVEX01BQ0hfTUVNT1JZX0gKIAlzZWxlY3QgUExBVF9WRVJTQVRJTEUKKwlzZWxlY3QgUExBVF9WRVJTQVRJTEVfU0NIRURfQ0xPQ0sKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgQVJNIEx0ZCBSZWFsVmlldyBib2FyZHMuCiAKQEAgLTM2NSw2ICszNDgsNyBAQAogCXNlbGVjdCBJQ1NUCiAJc2VsZWN0IFBMQVRfVkVSU0FUSUxFCiAJc2VsZWN0IFBMQVRfVkVSU0FUSUxFX0NMT0NLCisJc2VsZWN0IFBMQVRfVkVSU0FUSUxFX1NDSEVEX0NMT0NLCiAJc2VsZWN0IFZFUlNBVElMRV9GUEdBX0lSUQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBBUk0gTHRkIFZlcnNhdGlsZSBib2FyZC4KQEAgLTM3NiwxMCArMzYwLDExIEBACiAJc2VsZWN0IElSUV9ET01BSU4KIAlzZWxlY3QgTkVFRF9NQUNIX0lPX0ggaWYgUENDQVJECiAJc2VsZWN0IFBJTkNUUkwKLQlzZWxlY3QgUElOQ1RSTF9BVDkxIGlmIFVTRV9PRgorCXNlbGVjdCBQSU5DVFJMX0FUOTEKKwlzZWxlY3QgVVNFX09GCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gQXRtZWwKLQkgIEFUOTFSTTkyMDAgYW5kIEFUOTFTQU05KiBwcm9jZXNzb3JzLgorCSAgQVQ5MVJNOTIwMCwgQVQ5MVNBTTkgYW5kIFNBTUE1IHByb2Nlc3NvcnMuCiAKIGNvbmZpZyBBUkNIX0NMUFM3MTFYCiAJYm9vbCAiQ2lycnVzIExvZ2ljIENMUFM3MTF4L0VQNzIxeC9FUDczMXgtYmFzZWQiCkBAIC04NTQsNiArODM5LDggQEAKICMKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1tdmVidS9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtYXNtOTI2MC9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtYXh4aWEvS2NvbmZpZyIKQEAgLTEyNTksOSArMTI0Niw2IEBACiAKIG1lbnUgIkJ1cyBzdXBwb3J0IgogCi1jb25maWcgQVJNX0FNQkEKLQlib29sCi0KIGNvbmZpZyBJU0EKIAlib29sCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvYXJtL0tjb25maWcuZGVidWcKaW5kZXggZDhmNmEyZS4uZjkyOTVhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCkBAIC05Myw2ICs5MywyNyBAQAogCXByb21wdCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgcG9ydCIKIAlkZXBlbmRzIG9uIERFQlVHX0xMCiAKKwljb25maWcgREVCVUdfQVNNOTI2MF9VQVJUCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHZpYSBhc205MjYwIFVBUlQiCisJCWRlcGVuZHMgb24gTUFDSF9BU005MjYwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBkZWJ1ZyBwcmludCByb3V0aW5lcyB0byBkaXJlY3QKKwkJICB0aGVpciBvdXRwdXQgdG8gYW4gVUFSVCBvciBVU0FSVCBwb3J0IG9uIGFzbTkyNjAgYmFzZWQKKwkJICBtYWNoaW5lcy4KKworCQkgICAgREVCVUdfVUFSVF9QSFlTIHwgREVCVUdfVUFSVF9WSVJUCisKKwkJICAgIDB4ODAwMDAwMDAgICAgICB8IDB4ZjAwMDAwMDAgICAgIHwgVUFSVDAKKwkJICAgIDB4ODAwMDQwMDAgICAgICB8IDB4ZjAwMDQwMDAgICAgIHwgVUFSVDEKKwkJICAgIDB4ODAwMDgwMDAgICAgICB8IDB4ZjAwMDgwMDAgICAgIHwgVUFSVDIKKwkJICAgIDB4ODAwMGMwMDAgICAgICB8IDB4ZjAwMGMwMDAgICAgIHwgVUFSVDMKKwkJICAgIDB4ODAwMTAwMDAgICAgICB8IDB4ZjAwMTAwMDAgICAgIHwgVUFSVDQKKwkJICAgIDB4ODAwMTQwMDAgICAgICB8IDB4ZjAwMTQwMDAgICAgIHwgVUFSVDUKKwkJICAgIDB4ODAwMTgwMDAgICAgICB8IDB4ZjAwMTgwMDAgICAgIHwgVUFSVDYKKwkJICAgIDB4ODAwMWMwMDAgICAgICB8IDB4ZjAwMWMwMDAgICAgIHwgVUFSVDcKKwkJICAgIDB4ODAwMjAwMDAgICAgICB8IDB4ZjAwMjAwMDAgICAgIHwgVUFSVDgKKwkJICAgIDB4ODAwMjQwMDAgICAgICB8IDB4ZjAwMjQwMDAgICAgIHwgVUFSVDkKKwogCWNvbmZpZyBBVDkxX0RFQlVHX0xMX0RCR1UwCiAJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG9uIHJtOTIwMCwgOTI2MC85ZzIwLCA5MjYxLzlnMTAgYW5kIDlybCIKIAkJZGVwZW5kcyBvbiBIQVZFX0FUOTFfREJHVTAKQEAgLTExMyw3ICsxMzQsNyBAQAogCWNvbmZpZyBERUJVR19CQ01fNTMwMVgKIAkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgb24gQkNNNTMwMVggVUFSVDEiCiAJCWRlcGVuZHMgb24gQVJDSF9CQ01fNTMwMVgKLQkJc2VsZWN0IERFQlVHX1VBUlRfUEwwMVgKKwkJc2VsZWN0IERFQlVHX1VBUlRfODI1MAogCiAJY29uZmlnIERFQlVHX0JDTV9LT05BX1VBUlQKIAkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIEJDTSBLT05BIFVBUlQiCkBAIC0xMzksNiArMTYwLDE3IEBACiAJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CiAJCSAgb24gTWFydmVsbCBCZXJsaW4gU29DIGJhc2VkIHBsYXRmb3Jtcy4KIAorCWNvbmZpZyBERUJVR19CUkNNU1RCX1VBUlQKKwkJYm9vbCAiVXNlIEJSQ01TVEIgVUFSVCBmb3IgbG93LWxldmVsIGRlYnVnIgorCQlkZXBlbmRzIG9uIEFSQ0hfQlJDTVNUQgorCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBkZWJ1ZyBwcmludCByb3V0aW5lcyB0byBkaXJlY3QKKwkJICB0aGVpciBvdXRwdXQgdG8gdGhlIGZpcnN0IHNlcmlhbCBwb3J0IG9uIHRoZXNlIGRldmljZXMuCisKKwkJICBJZiB5b3UgaGF2ZSBhIEJyb2FkY29tIFNUQiBjaGlwIGFuZCB3b3VsZCBsaWtlIGVhcmx5IHByaW50CisJCSAgbWVzc2FnZXMgdG8gYXBwZWFyIG92ZXIgdGhlIFVBUlQsIHNlbGVjdCB0aGlzIG9wdGlvbi4KKwogCWNvbmZpZyBERUJVR19DTFBTNzExWF9VQVJUMQogCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgVUFSVDEiCiAJCWRlcGVuZHMgb24gQVJDSF9DTFBTNzExWApAQCAtNjUzLDYgKzY4NSw2NCBAQAogCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAogCQkgIG9uIFJvY2tjaGlwIFJLMzJ4eCBiYXNlZCBwbGF0Zm9ybXMuCiAKKwljb25maWcgREVCVUdfUjdTNzIxMDBfU0NJRjIKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFNDSUYyIG9uIFI3UzcyMTAwIgorCQlkZXBlbmRzIG9uIEFSQ0hfUjdTNzIxMDAKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIHZpYSBTQ0lGMiBvbiBSZW5lc2FzIFJaL0ExSCAoUjdTNzIxMDApLgorCisJY29uZmlnIERFQlVHX1JDQVJfR0VOMV9TQ0lGMAorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgU0NJRjAgb24gUjhBNzc3OCIKKwkJZGVwZW5kcyBvbiBBUkNIX1I4QTc3NzgKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIHZpYSBTQ0lGMCBvbiBSZW5lc2FzIFItQ2FyIE0xQSAoUjhBNzc3OCkuCisKKwljb25maWcgREVCVUdfUkNBUl9HRU4xX1NDSUYyCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBTQ0lGMiBvbiBSOEE3Nzc5IgorCQlkZXBlbmRzIG9uIEFSQ0hfUjhBNzc3OQorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgdmlhIFNDSUYyIG9uIFJlbmVzYXMgUi1DYXIgSDEgKFI4QTc3NzkpLgorCisJY29uZmlnIERFQlVHX1JDQVJfR0VOMl9TQ0lGMAorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgU0NJRjAgb24gUjhBNzc5MC9SOEE3NzkxL1I4QTc3OTMpIgorCQlkZXBlbmRzIG9uIEFSQ0hfUjhBNzc5MCB8fCBBUkNIX1I4QTc3OTEgfHwgQVJDSF9SOEE3NzkzCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICB2aWEgU0NJRjAgb24gUmVuZXNhcyBSLUNhciBIMiAoUjhBNzc5MCksIE0yLVcgKFI4QTc3OTEpLCBvcgorCQkgIE0yLU4gKFI4QTc3OTMpLgorCisJY29uZmlnIERFQlVHX1JDQVJfR0VOMl9TQ0lGMgorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgU0NJRjIgb24gUjhBNzc5NCIKKwkJZGVwZW5kcyBvbiBBUkNIX1I4QTc3OTQKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIHZpYSBTQ0lGMiBvbiBSZW5lc2FzIFItQ2FyIEUyIChSOEE3Nzk0KS4KKworCWNvbmZpZyBERUJVR19STU9CSUxFX1NDSUZBMAorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgU0NJRkEwIG9uIFI4QTczQTQvU0g3MzcyIgorCQlkZXBlbmRzIG9uIEFSQ0hfUjhBNzNBNCB8fCBBUkNIX1NINzM3MgorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgdmlhIFNDSUZBMCBvbiBSZW5lc2FzIFItTW9iaWxlIEFQRTYgKFI4QTczQTQpIG9yIFNILU1vYmlsZQorCQkgIEFQNCAoU0g3MzcyKS4KKworCWNvbmZpZyBERUJVR19STU9CSUxFX1NDSUZBMQorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgU0NJRkExIG9uIFI4QTc3NDAiCisJCWRlcGVuZHMgb24gQVJDSF9SOEE3NzQwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICB2aWEgU0NJRkExIG9uIFJlbmVzYXMgUi1Nb2JpbGUgQTEgKFI4QTc3NDApLgorCisJY29uZmlnIERFQlVHX1JNT0JJTEVfU0NJRkE0CisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIG1lc3NhZ2VzIHZpYSBTQ0lGQTQgb24gU0g3M0EwIgorCQlkZXBlbmRzIG9uIEFSQ0hfU0g3M0EwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICB2aWEgU0NJRkE0IG9uIFJlbmVzYXMgU0gtTW9iaWxlIEFHNSAoU0g3M0EwKS4KKwogCWNvbmZpZyBERUJVR19TM0NfVUFSVDAKIAkJZGVwZW5kcyBvbiBQTEFUX1NBTVNVTkcKIAkJc2VsZWN0IERFQlVHX0VYWU5PU19VQVJUIGlmIEFSQ0hfRVhZTk9TCkBAIC03MjMsNiArODEzLDE0IEBACiAJCSAgdGhlaXIgb3V0cHV0IHRvIFVBUlQgMi4gVGhlIHBvcnQgbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQKIAkJICBieSB0aGUgYm9vdC1sb2FkZXIgYmVmb3JlIHVzZS4KIAorCWNvbmZpZyBERUJVR19TQTExMDAKKwkJZGVwZW5kcyBvbiBBUkNIX1NBMTEwMAorCQlib29sICJVc2UgU0ExMTAwIFVBUlRzIGZvciBsb3ctbGV2ZWwgZGVidWciCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICBvbiBTQS0xMXgwIFVBUlQgcG9ydHMuIFRoZSBrZXJuZWwgd2lsbCBjaGVjayBmb3IgdGhlIGZpcnN0CisJCSAgZW5hYmxlZCBVQVJUIGluIGEgc2VxdWVuY2UgMy0xLTIuCisKIAljb25maWcgREVCVUdfU09DRlBHQV9VQVJUCiAJCWRlcGVuZHMgb24gQVJDSF9TT0NGUEdBCiAJCWJvb2wgIlVzZSBTT0NGUEdBIFVBUlQgZm9yIGxvdy1sZXZlbCBkZWJ1ZyIKQEAgLTczMSw2ICs4MjksMTQgQEAKIAkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKIAkJICBvbiBTT0NGUEdBIGJhc2VkIHBsYXRmb3Jtcy4KIAorCWNvbmZpZyBERUJVR19TVU45SV9VQVJUMAorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgc3VuOWkgVUFSVDAiCisJCWRlcGVuZHMgb24gTUFDSF9TVU45SQorCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICBvbiBBbGx3aW5uZXIgQTgwIGJhc2VkIHBsYXRmb3JtcyBvbiB0aGUgVUFSVDAuCisKIAljb25maWcgREVCVUdfU1VOWElfVUFSVDAKIAkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIHN1blhpIFVBUlQwIgogCQlkZXBlbmRzIG9uIEFSQ0hfU1VOWEkKQEAgLTg2Niw2ICs5NzIsMjIgQEAKIAkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKIAkJICBmb3IgTWVkaWF0ZWsgbXQ2NTg5IGJhc2VkIHBsYXRmb3JtcyBvbiBVQVJUMC4KIAorCWNvbmZpZyBERUJVR19NVDgxMjdfVUFSVDAKKwkJYm9vbCAiTWVkaWF0ZWsgbXQ4MTI3IFVBUlQwIgorCQlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsKKwkJc2VsZWN0IERFQlVHX1VBUlRfODI1MAorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgZm9yIE1lZGlhdGVrIG10ODEyNyBiYXNlZCBwbGF0Zm9ybXMgb24gVUFSVDAuCisKKwljb25maWcgREVCVUdfTVQ4MTM1X1VBUlQzCisJCWJvb2wgIk1lZGlhdGVrIG10ODEzNSBVQVJUMyIKKwkJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLCisJCXNlbGVjdCBERUJVR19VQVJUXzgyNTAKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIGZvciBNZWRpYXRlayBtdDgxMzUgYmFzZWQgcGxhdGZvcm1zIG9uIFVBUlQzLgorCiAJY29uZmlnIERFQlVHX1ZFWFBSRVNTX1VBUlQwX0RFVEVDVAogCQlib29sICJBdXRvZGV0ZWN0IFVBUlQwIG9uIFZlcnNhdGlsZSBFeHByZXNzIENvcnRleC1BIGNvcmUgdGlsZXMiCiAJCWRlcGVuZHMgb24gQVJDSF9WRVhQUkVTUyAmJiBDUFVfQ1AxNV9NTVUKQEAgLTEwNDEsNyArMTE2Myw5IEBACiAKIGNvbmZpZyBERUJVR19MTF9JTkNMVURFCiAJc3RyaW5nCisJZGVmYXVsdCAiZGVidWcvc2ExMTAwLlMiIGlmIERFQlVHX1NBMTEwMAogCWRlZmF1bHQgImRlYnVnLzgyNTAuUyIgaWYgREVCVUdfTExfVUFSVF84MjUwIHx8IERFQlVHX1VBUlRfODI1MAorCWRlZmF1bHQgImRlYnVnL2FzbTkyNjAuUyIgaWYgREVCVUdfQVNNOTI2MF9VQVJUCiAJZGVmYXVsdCAiZGVidWcvY2xwczcxMXguUyIgaWYgREVCVUdfQ0xQUzcxMVhfVUFSVDEgfHwgREVCVUdfQ0xQUzcxMVhfVUFSVDIKIAlkZWZhdWx0ICJkZWJ1Zy9tZXNvbi5TIiBpZiBERUJVR19NRVNPTl9VQVJUQU8KIAlkZWZhdWx0ICJkZWJ1Zy9wbDAxeC5TIiBpZiBERUJVR19MTF9VQVJUX1BMMDFYIHx8IERFQlVHX1VBUlRfUEwwMVgKQEAgLTEwNjEsNiArMTE4NSwxNCBAQAogCQkJCSBERUJVR19JTVg2U1hfVUFSVAogCWRlZmF1bHQgImRlYnVnL21zbS5TIiBpZiBERUJVR19NU01fVUFSVCB8fCBERUJVR19RQ09NX1VBUlRETQogCWRlZmF1bHQgImRlYnVnL29tYXAycGx1cy5TIiBpZiBERUJVR19PTUFQMlBMVVNfVUFSVAorCWRlZmF1bHQgImRlYnVnL3JlbmVzYXMtc2NpZi5TIiBpZiBERUJVR19SN1M3MjEwMF9TQ0lGMgorCWRlZmF1bHQgImRlYnVnL3JlbmVzYXMtc2NpZi5TIiBpZiBERUJVR19SQ0FSX0dFTjFfU0NJRjAKKwlkZWZhdWx0ICJkZWJ1Zy9yZW5lc2FzLXNjaWYuUyIgaWYgREVCVUdfUkNBUl9HRU4xX1NDSUYyCisJZGVmYXVsdCAiZGVidWcvcmVuZXNhcy1zY2lmLlMiIGlmIERFQlVHX1JDQVJfR0VOMl9TQ0lGMAorCWRlZmF1bHQgImRlYnVnL3JlbmVzYXMtc2NpZi5TIiBpZiBERUJVR19SQ0FSX0dFTjJfU0NJRjIKKwlkZWZhdWx0ICJkZWJ1Zy9yZW5lc2FzLXNjaWYuUyIgaWYgREVCVUdfUk1PQklMRV9TQ0lGQTAKKwlkZWZhdWx0ICJkZWJ1Zy9yZW5lc2FzLXNjaWYuUyIgaWYgREVCVUdfUk1PQklMRV9TQ0lGQTEKKwlkZWZhdWx0ICJkZWJ1Zy9yZW5lc2FzLXNjaWYuUyIgaWYgREVCVUdfUk1PQklMRV9TQ0lGQTQKIAlkZWZhdWx0ICJkZWJ1Zy9zM2MyNHh4LlMiIGlmIERFQlVHX1MzQzI0WFhfVUFSVAogCWRlZmF1bHQgImRlYnVnL3M1cHYyMTAuUyIgaWYgREVCVUdfUzVQVjIxMF9VQVJUCiAJZGVmYXVsdCAiZGVidWcvc2lyZi5TIiBpZiBERUJVR19TSVJGUFJJTUEyX1VBUlQxIHx8IERFQlVHX1NJUkZNQVJDT19VQVJUMQpAQCAtMTEwNiw2ICsxMjM4LDcgQEAKIAlkZWZhdWx0IDB4MDI1MzBjMDAgaWYgREVCVUdfS0VZU1RPTkVfVUFSVDAKIAlkZWZhdWx0IDB4MDI1MzEwMDAgaWYgREVCVUdfS0VZU1RPTkVfVUFSVDEKIAlkZWZhdWx0IDB4MDMwMTBmZTAgaWYgQVJDSF9SUEMKKwlkZWZhdWx0IDB4MDcwMDAwMDAgaWYgREVCVUdfU1VOOUlfVUFSVDAKIAlkZWZhdWx0IDB4MTAwMDkwMDAgaWYgREVCVUdfUkVBTFZJRVdfU1REX1BPUlQgfHwgXAogCQkJCURFQlVHX1ZFWFBSRVNTX1VBUlQwX0NBOQogCWRlZmF1bHQgMHgxMDEwYzAwMCBpZiBERUJVR19SRUFMVklFV19QQjExNzZfUE9SVApAQCAtMTExMyw3ICsxMjQ2LDkgQEAKIAlkZWZhdWx0IDB4MTAxMjYwMDAgaWYgREVCVUdfUkszWF9VQVJUMQogCWRlZmF1bHQgMHgxMDFmMTAwMCBpZiBBUkNIX1ZFUlNBVElMRQogCWRlZmF1bHQgMHgxMDFmYjAwMCBpZiBERUJVR19OT01BRElLX1VBUlQKKwlkZWZhdWx0IDB4MTEwMDIwMDAgaWYgREVCVUdfTVQ4MTI3X1VBUlQwCiAJZGVmYXVsdCAweDExMDA2MDAwIGlmIERFQlVHX01UNjU4OV9VQVJUMAorCWRlZmF1bHQgMHgxMTAwOTAwMCBpZiBERUJVR19NVDgxMzVfVUFSVDMKIAlkZWZhdWx0IDB4MTYwMDAwMDAgaWYgQVJDSF9JTlRFR1JBVE9SCiAJZGVmYXVsdCAweDE4MDAwMzAwIGlmIERFQlVHX0JDTV81MzAxWAogCWRlZmF1bHQgMHgxYzA5MDAwMCBpZiBERUJVR19WRVhQUkVTU19VQVJUMF9SUzEKQEAgLTExMzUsNiArMTI3MCw3IEBACiAJZGVmYXVsdCAweDc4MDAwMDAwIGlmIERFQlVHX0NOUzNYWFgKIAlkZWZhdWx0IDB4N2MwMDAzZjggaWYgRk9PVEJSSURHRQogCWRlZmF1bHQgMHg3ODAwMDAwMCBpZiBERUJVR19DTlMzWFhYCisJZGVmYXVsdCAweDgwMDEwMDAwIGlmIERFQlVHX0FTTTkyNjBfVUFSVAogCWRlZmF1bHQgMHg4MDA3MDAwMCBpZiBERUJVR19JTVgyM19VQVJUCiAJZGVmYXVsdCAweDgwMDc0MDAwIGlmIERFQlVHX0lNWDI4X1VBUlQKIAlkZWZhdWx0IDB4ODAyMzAwMDAgaWYgREVCVUdfUElDT1hDRUxMX1VBUlQKQEAgLTExNTIsNyArMTI4OCwxNCBAQAogCWRlZmF1bHQgMHhkNDAxODAwMCBpZiBERUJVR19NTVBfVUFSVDMKIAlkZWZhdWx0IDB4ZTAwMDAwMDAgaWYgQVJDSF9TUEVBUjEzWFgKIAlkZWZhdWx0IDB4ZTQwMDcwMDAgaWYgREVCVUdfSElQMDRfVUFSVAorCWRlZmF1bHQgMHhlNmM0MDAwMCBpZiBERUJVR19STU9CSUxFX1NDSUZBMAorCWRlZmF1bHQgMHhlNmM1MDAwMCBpZiBERUJVR19STU9CSUxFX1NDSUZBMQorCWRlZmF1bHQgMHhlNmM4MDAwMCBpZiBERUJVR19STU9CSUxFX1NDSUZBNAorCWRlZmF1bHQgMHhlNmU1ODAwMCBpZiBERUJVR19SQ0FSX0dFTjJfU0NJRjIKKwlkZWZhdWx0IDB4ZTZlNjAwMDAgaWYgREVCVUdfUkNBUl9HRU4yX1NDSUYwCisJZGVmYXVsdCAweGU4MDA4MDAwIGlmIERFQlVHX1I3UzcyMTAwX1NDSUYyCiAJZGVmYXVsdCAweGYwMDAwYmUwIGlmIEFSQ0hfRUJTQTExMAorCWRlZmF1bHQgMHhmMDQwYWIwMCBpZiBERUJVR19CUkNNU1RCX1VBUlQKIAlkZWZhdWx0IDB4ZjEwMTIwMDAgaWYgREVCVUdfTVZFQlVfVUFSVF9BTFRFUk5BVEUKIAlkZWZhdWx0IDB4ZjEwMTIwMDAgaWYgQVJDSF9ET1ZFIHx8IEFSQ0hfTVY3OFhYMCB8fCBcCiAJCQkJQVJDSF9PUklPTjVYCkBAIC0xMTY0LDI0ICsxMzA3LDMzIEBACiAJZGVmYXVsdCAweGZmNjkwMDAwIGlmIERFQlVHX1JLMzJfVUFSVDIKIAlkZWZhdWx0IDB4ZmZjMDIwMDAgaWYgREVCVUdfU09DRlBHQV9VQVJUCiAJZGVmYXVsdCAweGZmZDgyMzQwIGlmIEFSQ0hfSU9QMTNYWAorCWRlZmF1bHQgMHhmZmU0MDAwMCBpZiBERUJVR19SQ0FSX0dFTjFfU0NJRjAKKwlkZWZhdWx0IDB4ZmZlNDIwMDAgaWYgREVCVUdfUkNBUl9HRU4xX1NDSUYyCiAJZGVmYXVsdCAweGZmZjM2MDAwIGlmIERFQlVHX0hJR0hCQU5LX1VBUlQKIAlkZWZhdWx0IDB4ZmZmZTg2MDAgaWYgREVCVUdfVUFSVF9CQ002M1hYCiAJZGVmYXVsdCAweGZmZmZmNzAwIGlmIEFSQ0hfSU9QMzNYCiAJZGVwZW5kcyBvbiBERUJVR19MTF9VQVJUXzgyNTAgfHwgREVCVUdfTExfVUFSVF9QTDAxWCB8fCBcCiAJCURFQlVHX0xMX1VBUlRfRUZNMzIgfHwgXAogCQlERUJVR19VQVJUXzgyNTAgfHwgREVCVUdfVUFSVF9QTDAxWCB8fCBERUJVR19NRVNPTl9VQVJUQU8gfHwgXAotCQlERUJVR19NU01fVUFSVCB8fCBERUJVR19RQ09NX1VBUlRETSB8fCBERUJVR19TM0MyNFhYX1VBUlQgfHwgXAotCQlERUJVR19VQVJUX0JDTTYzWFgKKwkJREVCVUdfTVNNX1VBUlQgfHwgREVCVUdfUUNPTV9VQVJURE0gfHwgREVCVUdfUjdTNzIxMDBfU0NJRjIgfHwgXAorCQlERUJVR19SQ0FSX0dFTjFfU0NJRjAgfHwgREVCVUdfUkNBUl9HRU4xX1NDSUYyIHx8IFwKKwkJREVCVUdfUkNBUl9HRU4yX1NDSUYwIHx8IERFQlVHX1JDQVJfR0VOMl9TQ0lGMiB8fCBcCisJCURFQlVHX1JNT0JJTEVfU0NJRkEwIHx8IERFQlVHX1JNT0JJTEVfU0NJRkExIHx8IFwKKwkJREVCVUdfUk1PQklMRV9TQ0lGQTQgfHwgREVCVUdfUzNDMjRYWF9VQVJUIHx8IFwKKwkJREVCVUdfVUFSVF9CQ002M1hYIHx8IERFQlVHX0FTTTkyNjBfVUFSVAogCiBjb25maWcgREVCVUdfVUFSVF9WSVJUCiAJaGV4ICJWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiBkZWJ1ZyBVQVJUIgogCWRlZmF1bHQgMHhlMDAxMGZlMCBpZiBBUkNIX1JQQwogCWRlZmF1bHQgMHhlMTAwMDAwMCBpZiBERUJVR19NU01fVUFSVAogCWRlZmF1bHQgMHhmMDAwMGJlMCBpZiBBUkNIX0VCU0ExMTAKKwlkZWZhdWx0IDB4ZjAwMTAwMDAgaWYgREVCVUdfQVNNOTI2MF9VQVJUCiAJZGVmYXVsdCAweGYwMWZiMDAwIGlmIERFQlVHX05PTUFESUtfVUFSVAogCWRlZmF1bHQgMHhmMDIwMTAwMCBpZiBERUJVR19CQ00yODM1CiAJZGVmYXVsdCAweGYxMDAwMzAwIGlmIERFQlVHX0JDTV81MzAxWAorCWRlZmF1bHQgMHhmMTAwMjAwMCBpZiBERUJVR19NVDgxMjdfVUFSVDAKIAlkZWZhdWx0IDB4ZjEwMDYwMDAgaWYgREVCVUdfTVQ2NTg5X1VBUlQwCisJZGVmYXVsdCAweGYxMDA5MDAwIGlmIERFQlVHX01UODEzNV9VQVJUMwogCWRlZmF1bHQgMHhmMTFmMTAwMCBpZiBBUkNIX1ZFUlNBVElMRQogCWRlZmF1bHQgMHhmMTYwMDAwMCBpZiBBUkNIX0lOVEVHUkFUT1IKIAlkZWZhdWx0IDB4ZjFjMjgwMDAgaWYgREVCVUdfU1VOWElfVUFSVDAKQEAgLTExOTAsNiArMTM0Miw3IEBACiAJZGVmYXVsdCAweGY2MjAwMDAwIGlmIERFQlVHX1BYQV9VQVJUMQogCWRlZmF1bHQgMHhmNDA5MDAwMCBpZiBBUkNIX0xQQzMyWFgKIAlkZWZhdWx0IDB4ZjQyMDAwMDAgaWYgQVJDSF9HRU1JTkkKKwlkZWZhdWx0IDB4ZjcwMDAwMDAgaWYgREVCVUdfU1VOOUlfVUFSVDAKIAlkZWZhdWx0IDB4ZjcwMDAwMDAgaWYgREVCVUdfUzNDMjRYWF9VQVJUICYmIChERUJVR19TM0NfVUFSVDAgfHwgXAogCQkJCURFQlVHX1MzQzI0MTBfVUFSVDApCiAJZGVmYXVsdCAweGY3MDA0MDAwIGlmIERFQlVHX1MzQzI0WFhfVUFSVCAmJiAoREVCVUdfUzNDX1VBUlQxIHx8IFwKQEAgLTEyMDQsNiArMTM1Nyw3IEBACiAJZGVmYXVsdCAweGZiMDAyMDAwIGlmIERFQlVHX0NOUzNYWFgKIAlkZWZhdWx0IDB4ZmIwMDkwMDAgaWYgREVCVUdfUkVBTFZJRVdfU1REX1BPUlQKIAlkZWZhdWx0IDB4ZmIxMGMwMDAgaWYgREVCVUdfUkVBTFZJRVdfUEIxMTc2X1BPUlQKKwlkZWZhdWx0IDB4ZmM0MGFiMDAgaWYgREVCVUdfQlJDTVNUQl9VQVJUCiAJZGVmYXVsdCAweGZjZmU4NjAwIGlmIERFQlVHX1VBUlRfQkNNNjNYWAogCWRlZmF1bHQgMHhmZDAwMDAwMCBpZiBBUkNIX1NQRUFSM1hYIHx8IEFSQ0hfU1BFQVI2WFgKIAlkZWZhdWx0IDB4ZmQwMDAwMDAgaWYgQVJDSF9TUEVBUjEzWFgKQEAgLTEyNDQsMTIgKzEzOTgsMTIgQEAKIAlkZXBlbmRzIG9uIERFQlVHX0xMX1VBUlRfODI1MCB8fCBERUJVR19MTF9VQVJUX1BMMDFYIHx8IFwKIAkJREVCVUdfVUFSVF84MjUwIHx8IERFQlVHX1VBUlRfUEwwMVggfHwgREVCVUdfTUVTT05fVUFSVEFPIHx8IFwKIAkJREVCVUdfTVNNX1VBUlQgfHwgREVCVUdfUUNPTV9VQVJURE0gfHwgREVCVUdfUzNDMjRYWF9VQVJUIHx8IFwKLQkJREVCVUdfVUFSVF9CQ002M1hYCisJCURFQlVHX1VBUlRfQkNNNjNYWCB8fCBERUJVR19BU005MjYwX1VBUlQKIAogY29uZmlnIERFQlVHX1VBUlRfODI1MF9TSElGVAogCWludCAiUmVnaXN0ZXIgb2Zmc2V0IHNoaWZ0IGZvciB0aGUgODI1MCBkZWJ1ZyBVQVJUIgogCWRlcGVuZHMgb24gREVCVUdfTExfVUFSVF84MjUwIHx8IERFQlVHX1VBUlRfODI1MAotCWRlZmF1bHQgMCBpZiBGT09UQlJJREdFIHx8IEFSQ0hfSU9QMzJYCisJZGVmYXVsdCAwIGlmIEZPT1RCUklER0UgfHwgQVJDSF9JT1AzMlggfHwgREVCVUdfQkNNXzUzMDFYCiAJZGVmYXVsdCAyCiAKIGNvbmZpZyBERUJVR19VQVJUXzgyNTBfV09SRApAQCAtMTI2MCw3ICsxNDE0LDggQEAKIAkJQVJDSF9LRVlTVE9ORSB8fCBcCiAJCURFQlVHX0RBVklOQ0lfRE14X1VBUlQwIHx8IERFQlVHX0RBVklOQ0lfREE4WFhfVUFSVDEgfHwgXAogCQlERUJVR19EQVZJTkNJX0RBOFhYX1VBUlQyIHx8IFwKLQkJREVCVUdfQkNNX0tPTkFfVUFSVCB8fCBERUJVR19SSzMyX1VBUlQyCisJCURFQlVHX0JDTV9LT05BX1VBUlQgfHwgREVCVUdfUkszMl9VQVJUMiB8fCBcCisJCURFQlVHX0JSQ01TVEJfVUFSVAogCiBjb25maWcgREVCVUdfVUFSVF84MjUwX0ZMT1dfQ09OVFJPTAogCWJvb2wgIkVuYWJsZSBmbG93IGNvbnRyb2wgZm9yIDgyNTAgVUFSVCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggMDM0YTk0OS4uYzE3ODVlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTMxMiw4ICszMTIsMTIgQEAKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpL2R0cyBNQUNISU5FPSQoTUFDSElORSkgJChib290KS9kdHMvJEAKIAogUEhPTlkgKz0gZHRicyBkdGJzX2luc3RhbGwKLWR0YnMgZHRic19pbnN0YWxsOiBwcmVwYXJlIHNjcmlwdHMKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpL2R0cyBNQUNISU5FPSQoTUFDSElORSkgJEAKKworZHRiczogcHJlcGFyZSBzY3JpcHRzCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KS9kdHMKKworZHRic19pbnN0YWxsOgorCSQoUSkkKE1BS0UpICQoZHRiaW5zdCk9JChib290KS9kdHMKIAogIyBXZSB1c2UgTVJQUk9QRVJfRklMRVMgYW5kIENMRUFOX0ZJTEVTIG5vdwogYXJjaGNsZWFuOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvTWFrZWZpbGUgYi9hcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZQppbmRleCAzOGM4OWNhLi42YTNkOWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZQpAQCAtNTQsOCArNTQsMTcgQEAKIGR0Yi0kKENPTkZJR19BUkNIX0FUTEFTNikgKz0gYXRsYXM2LWV2Yi5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX0FYWElBKSArPSBheG01NTE2LWFtYXJpbGxvLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfQkNNMjgzNSkgKz0gYmNtMjgzNS1ycGktYi5kdGIKLWR0Yi0kKENPTkZJR19BUkNIX0JDTV81MzAxWCkgKz0gYmNtNDcwOC1uZXRnZWFyLXI2MjUwLmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfQkNNMjgzNSkgKz0gYmNtMjgzNS1ycGktYi1wbHVzLmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfQkNNXzUzMDFYKSArPSBcCisJYmNtNDcwOC1idWZmYWxvLXd6ci0xNzUwZGhwLmR0YiBcCisJYmNtNDcwOC1uZXRnZWFyLXI2MjUwLmR0YiBcCisJYmNtNDcwOC1uZXRnZWFyLXI2MzAwLXYyLmR0YiBcCisJYmNtNDcwODEtYXN1cy1ydC1uMTh1LmR0YiBcCisJYmNtNDcwODEtYnVmZmFsby13enItNjAwZGhwMi5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX0JDTV82M1hYKSArPSBiY205NjMxMzhkdnQuZHRiCitkdGItJChDT05GSUdfQVJDSF9CQ01fQ1lHTlVTKSArPSBiY205MTEzNjBfZW50cGhuLmR0YiBcCisJYmNtOTExMzYway5kdGIgXAorCWJjbTk1ODMwMGsuZHRiCiBkdGItJChDT05GSUdfQVJDSF9CQ01fTU9CSUxFKSArPSBiY20yODE1NS1hcC5kdGIgXAogCWJjbTIxNjY0LWdhcm5ldC5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX0JFUkxJTikgKz0gXApAQCAtNjcsNyArNzYsOSBAQAogZHRiLSQoQ09ORklHX0FSQ0hfREFWSU5DSSkgKz0gZGE4NTAtZW5idy1jbWMuZHRiIFwKIAlkYTg1MC1ldm0uZHRiCiBkdGItJChDT05GSUdfQVJDSF9FRk0zMikgKz0gZWZtMzJnZy1kazM3NTAuZHRiCi1kdGItJChDT05GSUdfQVJDSF9FWFlOT1MpICs9IGV4eW5vczQyMTAtb3JpZ2VuLmR0YiBcCitkdGItJChDT05GSUdfQVJDSF9FWFlOT1MpICs9IGV4eW5vczMyNTAtbW9uay5kdGIgXAorCWV4eW5vczMyNTAtcmluYXRvLmR0YiBcCisJZXh5bm9zNDIxMC1vcmlnZW4uZHRiIFwKIAlleHlub3M0MjEwLXNtZGt2MzEwLmR0YiBcCiAJZXh5bm9zNDIxMC10cmF0cy5kdGIgXAogCWV4eW5vczQyMTAtdW5pdmVyc2FsX2MyMTAuZHRiIFwKQEAgLTgxLDYgKzkyLDcgQEAKIAlleHlub3M1MjUwLWFybmRhbGUuZHRiIFwKIAlleHlub3M1MjUwLXNtZGs1MjUwLmR0YiBcCiAJZXh5bm9zNTI1MC1zbm93LmR0YiBcCisJZXh5bm9zNTI1MC1zcHJpbmcuZHRiIFwKIAlleHlub3M1MjYwLXh5cmVmNTI2MC5kdGIgXAogCWV4eW5vczU0MTAtc21kazU0MTAuZHRiIFwKIAlleHlub3M1NDIwLWFybmRhbGUtb2N0YS5kdGIgXApAQCAtMTA0LDYgKzExNiw3IEBACiAJa2lya3dvb2QtZDJuZXQuZHRiIFwKIAlraXJrd29vZC1kYi04OGY2MjgxLmR0YiBcCiAJa2lya3dvb2QtZGItODhmNjI4Mi5kdGIgXAorCWtpcmt3b29kLWRpcjY2NS5kdGIgXAogCWtpcmt3b29kLWRuczMyMC5kdGIgXAogCWtpcmt3b29kLWRuczMyNS5kdGIgXAogCWtpcmt3b29kLWRvY2tzdGFyLmR0YiBcCkBAIC0yNDAsNiArMjUzLDcgQEAKIAlpbXg2cS1zYWJyZWxpdGUuZHRiIFwKIAlpbXg2cS1zYWJyZXNkLmR0YiBcCiAJaW14NnEtc2JjNnguZHRiIFwKKwlpbXg2cS10YnMyOTEwLmR0YiBcCiAJaW14NnEtdWRvby5kdGIgXAogCWlteDZxLXdhbmRib2FyZC5kdGIgXAogCWlteDZxLXdhbmRib2FyZC1yZXZiMS5kdGIgXApAQCAtMjUwLDYgKzI2NCw5IEBACiAJaW14NnEtdHg2cS0xMTEwLmR0YiBcCiAJaW14NnNsLWV2ay5kdGIgXAogCWlteDZzeC1zZGIuZHRiIFwKKwlsczEwMjFhLXFkcy5kdGIgXAorCWxzMTAyMWEtdHdyLmR0YiBcCisJdmY1MDAtY29saWJyaS1ldmFsLXYzLmR0YiBcCiAJdmY2MTAtY29saWJyaS1ldmFsLXYzLmR0YiBcCiAJdmY2MTAtY29zbWljLmR0YiBcCiAJdmY2MTAtdHdyLmR0YgpAQCAtMjc0LDcgKzI5MSw4IEBACiAJaW14MjgtbTI4ZXZrLmR0YiBcCiAJaW14Mjgtc3BzMS5kdGIgXAogCWlteDI4LXR4MjguZHRiCi1kdGItJChDT05GSUdfQVJDSF9OT01BRElLKSArPSBzdGUtbm9tYWRpay1zODgxNS5kdGIKK2R0Yi0kKENPTkZJR19BUkNIX05PTUFESUspICs9IHN0ZS1ub21hZGlrLXM4ODE1LmR0YiBcCisJc3RlLW5vbWFkaWstbmhrMTUuZHRiCiBkdGItJChDT05GSUdfQVJDSF9OU1BJUkUpICs9IG5zcGlyZS1jeC5kdGIgXAogCW5zcGlyZS10cC5kdGIgXAogCW5zcGlyZS1jbHAuZHRiCkBAIC0zMDIsNyArMzIwLDkgQEAKIAlvbWFwMy1oYS5kdGIgXAogCW9tYXAzLWhhLWxjZC5kdGIgXAogCW9tYXAzLWlnZXAwMDIwLmR0YiBcCisJb21hcDMtaWdlcDAwMjAtcmV2LWYuZHRiIFwKIAlvbWFwMy1pZ2VwMDAzMC5kdGIgXAorCW9tYXAzLWlnZXAwMDMwLXJldi1nLmR0YiBcCiAJb21hcDMtbGRwLmR0YiBcCiAJb21hcDMtbGlsbHktZGJiMDU2LmR0YiBcCiAJb21hcDMtbjkwMC5kdGIgXApAQCAtMzMxLDcgKzM1MSw4IEBACiAJYW0zMzV4LWV2bS5kdGIgXAogCWFtMzM1eC1ldm1zay5kdGIgXAogCWFtMzM1eC1uYW5vLmR0YiBcCi0JYW0zMzV4LXBlcHBlci5kdGIKKwlhbTMzNXgtcGVwcGVyLmR0YiBcCisJYW0zMzV4LWx4bS5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX09NQVA0KSArPSBvbWFwNC1kdW92ZXJvLXBhcmxvci5kdGIgXAogCW9tYXA0LXBhbmRhLmR0YiBcCiAJb21hcDQtcGFuZGEtYTQuZHRiIFwKQEAgLTM0Nyw2ICszNjgsNyBAQAogCW9tYXA1LXNiYy10NTQuZHRiIFwKIAlvbWFwNS11ZXZtLmR0YgogZHRiLSQoQ09ORklHX1NPQ19EUkE3WFgpICs9IGRyYTctZXZtLmR0YiBcCisJYW01N3h4LWJlYWdsZS14MTUuZHRiIFwKIAlkcmE3Mi1ldm0uZHRiCiBkdGItJChDT05GSUdfQVJDSF9PUklPTjVYKSArPSBvcmlvbjV4LWxhY2llLWQyLW5ldHdvcmsuZHRiIFwKIAlvcmlvbjV4LWxhY2llLWV0aGVybmV0LWRpc2stbWluaS12Mi5kdGIgXApAQCAtMzYzLDggKzM4NSwxMCBAQAogCXFjb20tbXNtODY2MC1zdXJmLmR0YiBcCiAJcWNvbS1tc204OTYwLWNkcC5kdGIgXAogCXFjb20tbXNtODk3NC1zb255LXhwZXJpYS1ob25hbWkuZHRiCitkdGItJChDT05GSUdfQVJDSF9SRUFMVklFVykgKz0gYXJtLXJlYWx2aWV3LXBiMTE3Ni5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX1JPQ0tDSElQKSArPSBcCiAJcmszMDY2YS1icWN1cmllMi5kdGIgXAorCXJrMzA2NmEtbWFyc2JvYXJkLmR0YiBcCiAJcmszMTg4LXJhZHhhcm9jay5kdGIgXAogCXJrMzI4OC1ldmItYWN0ODg0Ni5kdGIgXAogCXJrMzI4OC1ldmItcms4MDguZHRiCkBAIC0zNzYsMjcgKzQwMCwyNyBAQAogCXM1cHYyMTAtc21ka2MxMTAuZHRiIFwKIAlzNXB2MjEwLXNtZGt2MjEwLmR0YiBcCiAJczVwdjIxMC10b3JicmVjay5kdGIKLWR0Yi0kKENPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWSkgKz0gcjdzNzIxMDAtZ2VubWFpLmR0YiBcCitkdGItJChDT05GSUdfQVJDSF9TSE1PQklMRV9MRUdBQ1kpICs9IFwKKwlyOGE3M2E0LWFwZTZldm0uZHRiIFwKKwlyOGE3M2E0LWFwZTZldm0tcmVmZXJlbmNlLmR0YiBcCiAJcjhhNzc0MC1hcm1hZGlsbG84MDBldmEuZHRiIFwKIAlyOGE3Nzc4LWJvY2t3LmR0YiBcCiAJcjhhNzc3OC1ib2Nrdy1yZWZlcmVuY2UuZHRiIFwKIAlyOGE3Nzc5LW1hcnplbi5kdGIgXAotCXI4YTc3OTEta29lbHNjaC5kdGIgXAogCXI4YTc3OTAtbGFnZXIuZHRiIFwKKwlzaDczNzItbWFja2VyZWwuZHRiIFwKIAlzaDczYTAta3ptOWcuZHRiIFwKLQlzaDczYTAta3ptOWctcmVmZXJlbmNlLmR0YiBcCi0JcjhhNzNhNC1hcGU2ZXZtLmR0YiBcCi0JcjhhNzNhNC1hcGU2ZXZtLXJlZmVyZW5jZS5kdGIgXAotCXNoNzM3Mi1tYWNrZXJlbC5kdGIKKwlzaDczYTAta3ptOWctcmVmZXJlbmNlLmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfU0hNT0JJTEVfTVVMVEkpICs9IGVtZXYyLWt6bTlkLmR0YiBcCiAJcjdzNzIxMDAtZ2VubWFpLmR0YiBcCiAJcjhhNzc0MC1hcm1hZGlsbG84MDBldmEuZHRiIFwKKwlyOGE3Nzc5LW1hcnplbi5kdGIgXAorCXI4YTc3OTAtbGFnZXIuZHRiIFwKIAlyOGE3NzkxLWhlbm5pbmdlci5kdGIgXAogCXI4YTc3OTEta29lbHNjaC5kdGIgXAotCXI4YTc3OTAtbGFnZXIuZHRiIFwKLQlyOGE3Nzc5LW1hcnplbi5kdGIgXAogCXI4YTc3OTQtYWx0LmR0YgogZHRiLSQoQ09ORklHX0FSQ0hfU09DRlBHQSkgKz0gc29jZnBnYV9hcnJpYTVfc29jZGsuZHRiIFwKKwlzb2NmcGdhX2FycmlhMTBfc29jZGsuZHRiIFwKIAlzb2NmcGdhX2N5Y2xvbmU1X3NvY2RrLmR0YiBcCiAJc29jZnBnYV9jeWNsb25lNV9zb2NraXQuZHRiIFwKIAlzb2NmcGdhX2N5Y2xvbmU1X3NvY3JhdGVzLmR0YiBcCkBAIC00MDksNiArNDMzLDcgQEAKIAlzcGVhcjMyMC1obWkuZHRiCiBkdGItJChDT05GSUdfQVJDSF9TUEVBUjZYWCkrPSBzcGVhcjYwMC1ldmIuZHRiCiBkdGItJChDT05GSUdfQVJDSF9TVEkpKz0gc3RpaDQwNy1iMjEyMC5kdGIgXAorCXN0aWg0MTAtYjIxMjAuZHRiIFwKIAlzdGloNDE1LWIyMDAwLmR0YiBcCiAJc3RpaDQxNS1iMjAyMC5kdGIgXAogCXN0aWg0MTYtYjIwMDAuZHRiIFwKQEAgLTQzNSwxNSArNDYwLDIwIEBACiAJc3VuNmktYTMxLWh1bW1pbmdiaXJkLmR0YiBcCiAJc3VuNmktYTMxLW05LmR0YgogZHRiLSQoQ09ORklHX01BQ0hfU1VON0kpICs9IFwKKwlzdW43aS1hMjAtYmFuYW5hcGkuZHRiIFwKIAlzdW43aS1hMjAtY3ViaWVib2FyZDIuZHRiIFwKIAlzdW43aS1hMjAtY3ViaWV0cnVjay5kdGIgXAogCXN1bjdpLWEyMC1odW1taW5nYmlyZC5kdGIgXAogCXN1bjdpLWEyMC1pMTItdHZib3guZHRiIFwKKwlzdW43aS1hMjAtbTMuZHRiIFwKIAlzdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUuZHRiIFwKKwlzdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUyLmR0YiBcCiAJc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdGIgXAogCXN1bjdpLWEyMC1wY2R1aW5vMy5kdGIKIGR0Yi0kKENPTkZJR19NQUNIX1NVTjhJKSArPSBcCiAJc3VuOGktYTIzLWlwcG8tcThoLXY1LmR0YgorZHRiLSQoQ09ORklHX01BQ0hfU1VOOUkpICs9IFwKKwlzdW45aS1hODAtb3B0aW11cy5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX1RFR1JBKSArPSB0ZWdyYTIwLWhhcm1vbnkuZHRiIFwKIAl0ZWdyYTIwLWlyaXMtNTEyLmR0YiBcCiAJdGVncmEyMC1tZWRjb20td2lkZS5kdGIgXApAQCAtNDg5LDEzICs1MTksMTUgQEAKIAl6eW5xLXBhcmFsbGVsbGEuZHRiIFwKIAl6eW5xLXpjNzAyLmR0YiBcCiAJenlucS16YzcwNi5kdGIgXAotCXp5bnEtemVkLmR0YgorCXp5bnEtemVkLmR0YiBcCisJenlucS16eWJvLmR0YgogZHRiLSQoQ09ORklHX01BQ0hfQVJNQURBXzM3MCkgKz0gXAogCWFybWFkYS0zNzAtZGIuZHRiIFwKIAlhcm1hZGEtMzcwLW1pcmFib3guZHRiIFwKIAlhcm1hZGEtMzcwLW5ldGdlYXItcm4xMDIuZHRiIFwKIAlhcm1hZGEtMzcwLW5ldGdlYXItcm4xMDQuZHRiIFwKLQlhcm1hZGEtMzcwLXJkLmR0YgorCWFybWFkYS0zNzAtcmQuZHRiIFwKKwlhcm1hZGEtMzcwLXN5bm9sb2d5LWRzMjEzai5kdGIKIGR0Yi0kKENPTkZJR19NQUNIX0FSTUFEQV8zNzUpICs9IFwKIAlhcm1hZGEtMzc1LWRiLmR0YgogZHRiLSQoQ09ORklHX01BQ0hfQVJNQURBXzM4WCkgKz0gXApAQCAtNTA4LDI0ICs1NDAsMjAgQEAKIAlhcm1hZGEteHAtbGVub3ZvLWl4NC0zMDBkLmR0YiBcCiAJYXJtYWRhLXhwLW1hdHJpeC5kdGIgXAogCWFybWFkYS14cC1uZXRnZWFyLXJuMjEyMC5kdGIgXAotCWFybWFkYS14cC1vcGVuYmxvY2tzLWF4My00LmR0YgorCWFybWFkYS14cC1vcGVuYmxvY2tzLWF4My00LmR0YiBcCisJYXJtYWRhLXhwLXN5bm9sb2d5LWRzNDE0LmR0YgogZHRiLSQoQ09ORklHX01BQ0hfRE9WRSkgKz0gZG92ZS1jbS1hNTEwLmR0YiBcCiAJZG92ZS1jdWJveC5kdGIgXAogCWRvdmUtY3Vib3gtZXMuZHRiIFwKIAlkb3ZlLWQycGx1Zy5kdGIgXAogCWRvdmUtZDNwbHVnLmR0YiBcCiAJZG92ZS1kb3ZlLWRiLmR0YgotZHRiLSQoQ09ORklHX0FSQ0hfTUVESUFURUspICs9IG10NjU4OS1hcXVhcmlzNS5kdGIKK2R0Yi0kKENPTkZJR19BUkNIX01FRElBVEVLKSArPSBtdDY1ODktYXF1YXJpczUuZHRiIFwKKwltdDY1OTItZXZiLmR0YiBcCisJbXQ4MTI3LW1vb3NlLmR0YiBcCisJbXQ4MTM1LWV2YnAxLmR0YgogCi10YXJnZXRzICs9IGR0YnMgZHRic19pbnN0YWxsCi10YXJnZXRzICs9ICQoZHRiLXkpCiBlbmRpZgogCi0jICouZHRiIHVzZWQgdG8gYmUgZ2VuZXJhdGVkIGluIHRoZSBkaXJlY3RvcnkgYWJvdmUuIENsZWFuIG91dCB0aGUKLSMgb2xkIGJ1aWxkIHJlc3VsdHMgc28gcGVvcGxlIGRvbid0IGFjY2lkZW50YWxseSB1c2UgdGhlbS4KLWR0YnM6ICQoYWRkcHJlZml4ICQob2JqKS8sICQoZHRiLXkpKQotCSQoUSlybSAtZiAkKG9iaikvLi4vKi5kdGIKLQotY2xlYW4tZmlsZXMgOj0gKi5kdGIKLQotZHRic19pbnN0YWxsOiAkKGFkZHN1ZmZpeCBfZHRiaW5zdF8sICQoZHRiLXkpKQorYWx3YXlzCQk6PSAkKGR0Yi15KQorY2xlYW4tZmlsZXMJOj0gKi5kdGIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ib25lYmxhY2suZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWJvbmVibGFjay5kdHMKaW5kZXggOTAxNzM5Zi4uNWM0MmQyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWJvbmVibGFjay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWJvbmVibGFjay5kdHMKQEAgLTgwLDMgKzgwLDcgQEAKIAkJc3RhdHVzID0gIm9rYXkiOwogCX07CiB9OworCismcnRjIHsKKwlzeXN0ZW0tcG93ZXItY29udHJvbGxlcjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm0uZHRzCmluZGV4IGM0Yjk2OGYuLjU0ZjExOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm0uZHRzCkBAIC0zMDcsNiArMzA3LDEzIEBACiAJCQkweDE0NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU0KSAvKiBybWlpMV9yZWZfY2xrLm1jYXNwMV9heHIzICovCiAJCT47CiAJfTsKKworCWRjYW4xX3BpbnNfZGVmYXVsdDogZGNhbjFfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MTY4IChQSU5fT1VUUFVUIHwgTVVYX01PREUyKSAvKiB1YXJ0MF9jdHNuLmRfY2FuMV90eCAqLworCQkJMHgxNmMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMikgLyogdWFydDBfcnRzbi5kX2NhbjFfcnggKi8KKwkJPjsKKwl9OwogfTsKIAogJnVhcnQwIHsKQEAgLTQzNyw5ICs0NDQsOSBAQAogCXN0YXR1cyA9ICJva2F5IjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmbmFuZGZsYXNoX3BpbnNfczA+OwotCXJhbmdlcyA9IDwwIDAgMHgwODAwMDAwMCAweDEwMDAwMDAwPjsJLyogQ1MwOiBOQU5EICovCisJcmFuZ2VzID0gPDAgMCAweDA4MDAwMDAwIDB4MTAwMDAwMD47CS8qIENTMDogMTZNQiBmb3IgTkFORCAqLwogCW5hbmRAMCwwIHsKLQkJcmVnID0gPDAgMCAwPjsgLyogQ1MwLCBvZmZzZXQgMCAqLworCQlyZWcgPSA8MCAwIDQ+OyAvKiBDUzAsIG9mZnNldCAwLCBJTyBzaXplIDQgKi8KIAkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOwogCQl0aSxlbG0taWQgPSA8JmVsbT47CiAJCW5hbmQtYnVzLXdpZHRoID0gPDg+OwpAQCAtNjY0LDMgKzY3MSw5IEBACiAmYWVzIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OworCismZGNhbjEgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7CS8qIEVuYWJsZSBvbmx5IGlmIFByb2ZpbGUgMSBpcyBzZWxlY3RlZCAqLworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZkY2FuMV9waW5zX2RlZmF1bHQ+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1pZ2VwMDAzMy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWlnZXAwMDMzLmR0c2kKaW5kZXggYTFhMGNjNS4uYzBlMTEzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWlnZXAwMDMzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWlnZXAwMDMzLmR0c2kKQEAgLTEyNiwxMCArMTI2LDEwIEBACiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8Jm5hbmRmbGFzaF9waW5zPjsKIAotCXJhbmdlcyA9IDwwIDAgMHgwODAwMDAwMCAweDEwMDAwMDAwPjsJLyogQ1MwOiBOQU5EICovCisJcmFuZ2VzID0gPDAgMCAweDA4MDAwMDAwIDB4MTAwMDAwMD47CS8qIENTMDogMTZNQiBmb3IgTkFORCAqLwogCiAJbmFuZEAwLDAgewotCQlyZWcgPSA8MCAwIDA+OyAvKiBDUzAsIG9mZnNldCAwICovCisJCXJlZyA9IDwwIDAgND47IC8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCQluYW5kLWJ1cy13aWR0aCA9IDw4PjsKIAkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOwogCQlncG1jLGRldmljZS13aWR0aCA9IDwxPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1seG0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zMzV4LWx4bS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2NmEwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1seG0uZHRzCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5vdmFUZWNoIExMQyAtIGh0dHA6Ly93d3cubm92YXRlY2h3ZWIuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworL2R0cy12MS87CisKKyNpbmNsdWRlICJhbTMzeHguZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTm92YVRlY2ggT3Jpb25MWG0iOworCWNvbXBhdGlibGUgPSAibm92YXRlY2gsYW0zMzV4LWx4bSIsICJ0aSxhbTMzeHgiOworCisJY3B1cyB7CisJCWNwdUAwIHsKKwkJCWNwdTAtc3VwcGx5ID0gPCZ2ZGQxX3JlZz47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDgwMDAwMDAwIDB4MjAwMDAwMDA+OyAvKiA1MTIgTUIgKi8KKwl9OworCisJLyogUG93ZXIgc3VwcGx5IHByb3ZpZGVzIGEgZml4ZWQgNVYgQDJBICovCisJdmJhdDogZml4ZWRyZWd1bGF0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidmJhdCI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJfTsKKworCS8qIFBvd2VyIHN1cHBseSBwcm92aWRlcyBhIGZpeGVkIDMuM1YgQDNBICovCisJdm1tY3NkX2ZpeGVkOiBmaXhlZHJlZ3VsYXRvckAxIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJ2bW1jc2RfZml4ZWQiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOworCX07Cit9OworCismYW0zM3h4X3Bpbm11eCB7CisJbW1jMV9waW5zOiBwaW5tdXhfbW1jMV9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4ZjAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1tYzBfZGF0MyAqLworCQkJMHhmNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogbW1jMF9kYXQyICovCisJCQkweGY4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBtbWMwX2RhdDEgKi8KKwkJCTB4ZmMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1tYzBfZGF0MCAqLworCQkJMHgxMDAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1tYzBfY2xrICovCisJCQkweDEwNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogbW1jMF9jbWQgKi8KKwkJPjsKKwl9OworCisJaTJjMF9waW5zOiBwaW5tdXhfaTJjMF9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MTg4IChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIGkyYzBfc2RhLmkyYzBfc2RhICovCisJCQkweDE4YyAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBpMmMwX3NjbC5pMmMwX3NjbCAqLworCQk+OworCX07CisKKwljcHN3X2RlZmF1bHQ6IGNwc3dfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBTbGF2ZSAxICovCisJCQkweDY0IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkxX2ludCAqLworCQkJMHgxMGMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMSkJLyogcm1paTFfY3JzX2R2ICovCisJCQkweDExMCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUxKQkvKiBybWlpMV9yeGVyICovCisJCQkweDExNCAoUElOX09VVFBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMSkJLyogcm1paTFfdHhlbiAqLworCQkJMHgxMjQgKFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTEpCS8qIHJtaWkxX3RkMSAqLworCQkJMHgxMjggKFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTEpCS8qIHJtaWkxX3RkMCAqLworCQkJMHgxM2MgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMSkJLyogcm1paTFfcmQxICovCisJCQkweDE0MCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUxKQkvKiBybWlpMV9yZDAgKi8KKwkJCTB4MTQ0IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTApCS8qIHJtaWkxX3JlZmNsayAqLworCisJCQkvKiBTbGF2ZSAyICovCisJCQkweDQwIChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBybWlpMl90eGVuICovCisJCQkweDUwIChQSU5fT1VUUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBybWlpMl90ZDEgKi8KKwkJCTB4NTQgKFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIHJtaWkyX3RkMCAqLworCQkJMHg2OCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBybWlpMl9yZDEgKi8KKwkJCTB4NmMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogcm1paTJfcmQwICovCisJCQkweDcwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIHJtaWkyX2Nyc19kdiAqLworCQkJMHg3NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBybWlpMl9yeGVyICovCisJCQkweDc4IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX2ludCAqLworCQkJMHgxMDggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMSkJLyogcm1paTJfcmVmY2xrICovCisJCT47CisJfTsKKworCWNwc3dfc2xlZXA6IGNwc3dfc2xlZXAgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJLyogU2xhdmUgMSByZXNldCB2YWx1ZSAqLworCQkJMHg2NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMV9pbnQgKi8KKwkJCTB4MTBjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkxX2Nyc19kdiAqLworCQkJMHgxMTAgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfcnhlciAqLworCQkJMHgxMTQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfdHhlbiAqLworCQkJMHgxMjQgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfdGQxICovCisJCQkweDEyOCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMV90ZDAgKi8KKwkJCTB4MTNjIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkxX3JkMSAqLworCQkJMHgxNDAgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTFfcmQwICovCisJCQkweDE0NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMV9yZWZjbGsgKi8KKworCQkJLyogU2xhdmUgMiByZXNldCB2YWx1ZSovCisJCQkweDQwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX3R4ZW4gKi8KKwkJCTB4NTAgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTJfdGQxICovCisJCQkweDU0IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX3RkMCAqLworCQkJMHg2OCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMl9yZDEgKi8KKwkJCTB4NmMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTJfcmQwICovCisJCQkweDcwIChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX2Nyc19kdiAqLworCQkJMHg3NCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQkvKiBybWlpMl9yeGVyICovCisJCQkweDc4IChQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTcpCS8qIHJtaWkyX2ludCAqLworCQkJMHgxMDggKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykJLyogcm1paTJfcmVmY2xrICovCisJCT47CisJfTsKKworCWRhdmluY2lfbWRpb19kZWZhdWx0OiBkYXZpbmNpX21kaW9fZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBNRElPICovCisJCQkweDE0OCAoUElOX0lOUFVUX1BVTExVUCB8IFNMRVdDVFJMX0ZBU1QgfCBNVVhfTU9ERTApCS8qIG1kaW9fZGF0YS5tZGlvX2RhdGEgKi8KKwkJCTB4MTRjIChQSU5fT1VUUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJCQkvKiBtZGlvX2Nsay5tZGlvX2NsayAqLworCQk+OworCX07CisKKwlkYXZpbmNpX21kaW9fc2xlZXA6IGRhdmluY2lfbWRpb19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBNRElPIHJlc2V0IHZhbHVlICovCisJCQkweDE0OCAoUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREU3KQorCQkJMHgxNGMgKFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFNykKKwkJPjsKKwl9OworCisJZW1tY19waW5zOiBwaW5tdXhfZW1tY19waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4ODAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTIpIC8qIGdwbWNfY3NuMS5tbWMxX2NsayAqLworCQkJMHg4NCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMikgLyogZ3BtY19jc24yLm1tYzFfY21kICovCisJCQkweDAwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2FkMC5tbWMxX2RhdDAgKi8KKwkJCTB4MDQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYWQxLm1tYzFfZGF0MSAqLworCQkJMHgwOCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hZDIubW1jMV9kYXQyICovCisJCQkweDBjIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2FkMy5tbWMxX2RhdDMgKi8KKwkJCTB4MTAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYWQ0Lm1tYzFfZGF0NCAqLworCQkJMHgxNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hZDUubW1jMV9kYXQ1ICovCisJCQkweDE4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2FkNi5tbWMxX2RhdDYgKi8KKwkJCTB4MWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYWQ3Lm1tYzFfZGF0NyAqLworCQk+OworCX07CisKKwl1YXJ0MF9waW5zOiBwaW5tdXhfdWFydDBfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDE3MCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogdWFydDBfcnhkLnVhcnQwX3J4ZCAqLworCQkJMHgxNzQgKFBJTl9PVVRQVVRfUFVMTERPV04gfCBNVVhfTU9ERTApCS8qIHVhcnQwX3R4ZC51YXJ0MF90eGQgKi8KKwkJPjsKKwl9OworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmMwX3BpbnM+OworCisJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJc2VyaWFsX2NvbmZpZzE6IHNlcmlhbF9jb25maWcxQDIwIHsKKwkJY29tcGF0aWJsZSA9ICJueHAscGNhOTUzOSI7CisJCXJlZyA9IDwweDIwPjsKKwl9OworCisJc2VyaWFsX2NvbmZpZzI6IHNlcmlhbF9jb25maWcyQDIxIHsKKwkJY29tcGF0aWJsZSA9ICJueHAscGNhOTUzOSI7CisJCXJlZyA9IDwweDIxPjsKKwl9OworCisJdHBzOiB0cHNAMmQgeworCQljb21wYXRpYmxlID0gInRpLHRwczY1OTEwIjsKKwkJcmVnID0gPDB4MmQ+OworCX07Cit9OworCisvaW5jbHVkZS8gInRwczY1OTEwLmR0c2kiCisKKyZ0cHMgeworCXZjYzEtc3VwcGx5ID0gPCZ2YmF0PjsKKwl2Y2MyLXN1cHBseSA9IDwmdmJhdD47CisJdmNjMy1zdXBwbHkgPSA8JnZiYXQ+OworCXZjYzQtc3VwcGx5ID0gPCZ2YmF0PjsKKwl2Y2M1LXN1cHBseSA9IDwmdmJhdD47CisJdmNjNi1zdXBwbHkgPSA8JnZiYXQ+OworCXZjYzctc3VwcGx5ID0gPCZ2YmF0PjsKKwl2Y2Npby1zdXBwbHkgPSA8JnZiYXQ+OworCisJcmVndWxhdG9ycyB7CisJCS8qIHZydGMgLSB1bnVzZWQgKi8KKworCQl2aW9fcmVnOiByZWd1bGF0b3JAMSB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2aW9fMXY1LGRkciI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZkZDFfcmVnOiByZWd1bGF0b3JAMiB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGQxLG1wdSI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw2MDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCX07CisKKwkJdmRkMl9yZWc6IHJlZ3VsYXRvckAzIHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZkZDJfMXYxLGNvcmUiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKworCQkvKiB2ZGQzIC0gdW51c2VkICovCisKKwkJLyogdmRpZzEgLSB1bnVzZWQgKi8KKworCQl2ZGlnMl9yZWc6IHJlZ3VsYXRvckA2IHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZkaWcyXzF2OCx2ZGRzX3BsbCI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCS8qIHZwbGwgLSB1bnVzZWQgKi8KKworCQl2ZGFjX3JlZzogcmVndWxhdG9yQDggeworCQkJcmVndWxhdG9yLW5hbWUgPSAidmRhY18xdjgsdmRkcyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZhdXgxX3JlZzogcmVndWxhdG9yQDkgeworCQkJcmVndWxhdG9yLW5hbWUgPSAidmF1eDFfMXY4LHVzYiI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZhdXgyX3JlZzogcmVndWxhdG9yQDEwIHsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInZhdXgyXzN2MyxpbyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZhdXgzM19yZWc6IHJlZ3VsYXRvckAxMSB7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2YXV4MzNfM3YzLHVzYiI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXZtbWNfcmVnOiByZWd1bGF0b3JAMTIgeworCQkJcmVndWxhdG9yLW5hbWUgPSAidm1tY18zdjMsaW8iOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKwl9OworfTsKKworJnNoYW0geworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZhZXMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQwX3BpbnM+OworCisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYiB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYl9jdHJsX21vZCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYjBfcGh5IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiMV9waHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2IwIHsKKwlzdGF0dXMgPSAib2theSI7CisJZHJfbW9kZSA9ICJob3N0IjsKK307CisKKyZ1c2IxIHsKKwlzdGF0dXMgPSAib2theSI7CisJZHJfbW9kZSA9ICJob3N0IjsKK307CisKKyZjcHBpNDFkbWEgIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismY3Bzd19lbWFjMCB7CisJcGh5X2lkID0gPCZkYXZpbmNpX21kaW8+LCA8NT47CisJcGh5LW1vZGUgPSAicm1paSI7CisJZHVhbF9lbWFjX3Jlc192bGFuID0gPDI+OworfTsKKworJmNwc3dfZW1hYzEgeworCXBoeV9pZCA9IDwmZGF2aW5jaV9tZGlvPiwgPDQ+OworCXBoeS1tb2RlID0gInJtaWkiOworCWR1YWxfZW1hY19yZXNfdmxhbiA9IDwzPjsKK307CisKKyZtYWMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZjcHN3X2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmY3Bzd19zbGVlcD47CisJZHVhbF9lbWFjID0gPDE+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZkYXZpbmNpX21kaW8geworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzbGVlcCI7CisJcGluY3RybC0wID0gPCZkYXZpbmNpX21kaW9fZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZkYXZpbmNpX21kaW9fc2xlZXA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtbWMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbW1jMV9waW5zPjsKKwl2bW1jLXN1cHBseSA9IDwmdm1tY3NkX2ZpeGVkPjsKKwlidXMtd2lkdGggPSA8ND47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZlbW1jX3BpbnM+OworCXZtbWMtc3VwcGx5ID0gPCZ2bW1jc2RfZml4ZWQ+OworCWJ1cy13aWR0aCA9IDw4PjsKKwl0aSxub24tcmVtb3ZhYmxlOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzN4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zM3h4LmR0c2kKaW5kZXggODMxODEwNS4uYWNkMzcwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zM3h4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW0zM3h4LmR0c2kKQEAgLTgzLDYgKzgzLDExIEBACiAJCX07CiAJfTsKIAorCWFtMzN4eF9jb250cm9sX21vZHVsZTogY29udHJvbF9tb2R1bGVANGEwMDIwMDAgeworCQljb21wYXRpYmxlID0gInN5c2NvbiI7CisJCXJlZyA9IDwweDQ0ZTEwMDAwIDB4N2ZjPjsKKwl9OworCiAJYW0zM3h4X3Bpbm11eDogcGlubXV4QDQ0ZTEwODAwIHsKIAkJY29tcGF0aWJsZSA9ICJwaW5jdHJsLXNpbmdsZSI7CiAJCXJlZyA9IDwweDQ0ZTEwODAwIDB4MDIzOD47CkBAIC0yMDQsNiArMjA5LDggQEAKIAkJCXJlZyA9IDwweDQ0ZTA5MDAwIDB4MjAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDcyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZlZG1hIDI2PiwgPCZlZG1hIDI3PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDE6IHNlcmlhbEA0ODAyMjAwMCB7CkBAIC0yMTMsNiArMjIwLDggQEAKIAkJCXJlZyA9IDwweDQ4MDIyMDAwIDB4MjAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDczPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZlZG1hIDI4PiwgPCZlZG1hIDI5PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDI6IHNlcmlhbEA0ODAyNDAwMCB7CkBAIC0yMjIsNiArMjMxLDggQEAKIAkJCXJlZyA9IDwweDQ4MDI0MDAwIDB4MjAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDc0PjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZlZG1hIDMwPiwgPCZlZG1hIDMxPjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDM6IHNlcmlhbEA0ODFhNjAwMCB7CkBAIC0zMzMsMjAgKzM0NCwyNCBAQAogCQkJaW50ZXJydXB0cyA9IDw5MT47CiAJCX07CiAKLQkJZGNhbjA6IGRfY2FuQDQ4MWNjMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiYm9zY2gsZF9jYW4iOworCQlkY2FuMDogY2FuQDQ4MWNjMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksYW0zMzUyLWRfY2FuIjsKIAkJCXRpLGh3bW9kcyA9ICJkX2NhbjAiOwotCQkJcmVnID0gPDB4NDgxY2MwMDAgMHgyMDAwCi0JCQkJMHg0NGUxMDY0NCAweDQ+OworCQkJcmVnID0gPDB4NDgxY2MwMDAgMHgyMDAwPjsKKwkJCWNsb2NrcyA9IDwmZGNhbjBfZmNrPjsKKwkJCWNsb2NrLW5hbWVzID0gImZjayI7CisJCQlzeXNjb24tcmFtaW5pdCA9IDwmYW0zM3h4X2NvbnRyb2xfbW9kdWxlIDB4NjQ0IDA+OwogCQkJaW50ZXJydXB0cyA9IDw1Mj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCi0JCWRjYW4xOiBkX2NhbkA0ODFkMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImJvc2NoLGRfY2FuIjsKKwkJZGNhbjE6IGNhbkA0ODFkMDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGFtMzM1Mi1kX2NhbiI7CiAJCQl0aSxod21vZHMgPSAiZF9jYW4xIjsKLQkJCXJlZyA9IDwweDQ4MWQwMDAwIDB4MjAwMAotCQkJCTB4NDRlMTA2NDQgMHg0PjsKKwkJCXJlZyA9IDwweDQ4MWQwMDAwIDB4MjAwMD47CisJCQljbG9ja3MgPSA8JmRjYW4xX2Zjaz47CisJCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkJc3lzY29uLXJhbWluaXQgPSA8JmFtMzN4eF9jb250cm9sX21vZHVsZSAweDY0NCAxPjsKIAkJCWludGVycnVwdHMgPSA8NTU+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTM1Niw2ICszNzEsNyBAQAogCQkJcmVnID0gPDB4NDgwQzgwMDAgMHgyMDA+OwogCQkJaW50ZXJydXB0cyA9IDw3Nz47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8OD47CiAJCQltYm94X3drdXBtMzogd2t1cF9tMyB7CkBAIC00MTksNyArNDM1LDcgQEAKIAkJfTsKIAogCQlydGM6IHJ0Y0A0NGUzZTAwMCB7Ci0JCQljb21wYXRpYmxlID0gInRpLGRhODMwLXJ0YyI7CisJCQljb21wYXRpYmxlID0gInRpLGFtMzM1Mi1ydGMiLCAidGksZGE4MzAtcnRjIjsKIAkJCXJlZyA9IDwweDQ0ZTNlMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDc1CiAJCQkJICAgICAgNzY+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW00MzcyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzNzIuZHRzaQppbmRleCA0NjY2MGZmLi5kNDJkNzg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTQzNzIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzNzIuZHRzaQpAQCAtNTcsNiArNTcsMTEgQEAKIAkJY2FjaGUtbGV2ZWwgPSA8Mj47CiAJfTsKIAorCWFtNDN4eF9jb250cm9sX21vZHVsZTogY29udHJvbF9tb2R1bGVANGEwMDIwMDAgeworCQljb21wYXRpYmxlID0gInN5c2NvbiI7CisJCXJlZyA9IDwweDQ0ZTEwMDAwIDB4N2Y0PjsKKwl9OworCiAJYW00M3h4X3Bpbm11eDogcGlubXV4QDQ0ZTEwODAwIHsKIAkJY29tcGF0aWJsZSA9ICJ0aSxhbTQzNy1wYWRjb25mIiwgInBpbmN0cmwtc2luZ2xlIjsKIAkJcmVnID0gPDB4NDRlMTA4MDAgMHgzMWM+OwpAQCAtMTY4LDYgKzE3Myw3IEBACiAJCQlyZWcgPSA8MHg0ODBDODAwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzcgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8OD47CiAJCQltYm94X3drdXBtMzogd2t1cF9tMyB7CkBAIC02NjcsNiArNjczLDI2IEBACiAJCQl9OwogCQl9OwogCisJCXRzY2FkYzogdHNjYWRjQDQ0ZTBkMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksYW0zMzU5LXRzY2FkYyI7CisJCQlyZWcgPSA8MHg0NGUwZDAwMCAweDEwMDA+OworCQkJdGksaHdtb2RzID0gImFkY190c2MiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZhZGNfdHNjX2Zjaz47CisJCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJdHNjIHsKKwkJCQljb21wYXRpYmxlID0gInRpLGFtMzM1OS10c2MiOworCQkJfTsKKworCQkJYWRjIHsKKwkJCQkjaW8tY2hhbm5lbC1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInRpLGFtMzM1OS1hZGMiOworCQkJfTsKKworCQl9OworCiAJCXNoYW06IHNoYW1ANTMxMDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNS1zaGFtIjsKIAkJCXRpLGh3bW9kcyA9ICJzaGFtIjsKQEAgLTg5Niw2ICs5MjIsMjggQEAKIAkJCWNvbXBhdGlibGUgPSAibW1pby1zcmFtIjsKIAkJCXJlZyA9IDwweDQwMzAwMDAwIDB4NDAwMDA+OyAvKiAyNTZrICovCiAJCX07CisKKwkJZGNhbjA6IGNhbkA0ODFjYzAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGFtNDM3Mi1kX2NhbiIsICJ0aSxhbTMzNTItZF9jYW4iOworCQkJdGksaHdtb2RzID0gImRfY2FuMCI7CisJCQljbG9ja3MgPSA8JmRjYW4wX2Zjaz47CisJCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkJcmVnID0gPDB4NDgxY2MwMDAgMHgyMDAwPjsKKwkJCXN5c2Nvbi1yYW1pbml0ID0gPCZhbTQzeHhfY29udHJvbF9tb2R1bGUgMHg2NDQgMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWRjYW4xOiBjYW5ANDgxZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTQzNzItZF9jYW4iLCAidGksYW0zMzUyLWRfY2FuIjsKKwkJCXRpLGh3bW9kcyA9ICJkX2NhbjEiOworCQkJY2xvY2tzID0gPCZkY2FuMV9mY2s+OworCQkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJCXJlZyA9IDwweDQ4MWQwMDAwIDB4MjAwMD47CisJCQlzeXNjb24tcmFtaW5pdCA9IDwmYW00M3h4X2NvbnRyb2xfbW9kdWxlIDB4NjQ0IDE+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW00Mzd4LWdwLWV2bS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzN3gtZ3AtZXZtLmR0cwppbmRleCBhNTIxYWMwLi43ZWFhZTRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTQzN3gtZ3AtZXZtLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzN3gtZ3AtZXZtLmR0cwpAQCAtMjU0LDYgKzI1NCwyMCBAQAogCQkJMHgyMzggKFBJTl9PVVRQVVRfUFVMTFVQIHwgTVVYX01PREU3KQogCQk+OwogCX07CisKKwlkY2FuMF9kZWZhdWx0OiBkY2FuMF9kZWZhdWx0X3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgxNzggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTIpCQkvKiB1YXJ0MV9jdHNuLmRfY2FuMF90eCAqLworCQkJMHgxN2MgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTIpCS8qIHVhcnQxX3J0c24uZF9jYW4wX3J4ICovCisJCT47CisJfTsKKworCWRjYW4xX2RlZmF1bHQ6IGRjYW4xX2RlZmF1bHRfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDE4MCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMikJCS8qIHVhcnQxX3J4ZC5kX2NhbjFfdHggKi8KKwkJCTB4MTg0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUyKQkvKiB1YXJ0MV90eGQuZF9jYW4xX3J4ICovCisJCT47CisJfTsKIH07CiAKICZpMmMwIHsKQEAgLTM0Myw2ICszNTcsMTQgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismdHNjYWRjIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlhZGMgeworCQl0aSxhZGMtY2hhbm5lbHMgPSA8MCAxIDIgMyA0IDUgNiA3PjsKKwl9OworfTsKKwogJmVjYXAwIHsKIAlzdGF0dXMgPSAib2theSI7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTUxMSwzICs1MzMsMTUgQEAKIAkJfTsKIAl9OwogfTsKKworJmRjYW4wIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmZGNhbjBfZGVmYXVsdD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmRjYW4xIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmZGNhbjFfZGVmYXVsdD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDN4LWVwb3MtZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDN4LWVwb3MtZXZtLmR0cwppbmRleCBmN2U5YmJhLi42NjIyNjFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTQzeC1lcG9zLWV2bS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00M3gtZXBvcy1ldm0uZHRzCkBAIC00MzgsOSArNDM4LDkgQEAKIAlzdGF0dXMgPSAib2theSI7CS8qIERpc2FibGUgUVNQSSB3aGVuIGVuYWJsaW5nIEdQTUMgKE5BTkQpICovCiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8Jm5hbmRfZmxhc2hfeDg+OwotCXJhbmdlcyA9IDwwIDAgMHgwODAwMDAwMCAweDEwMDAwMDAwPjsJLyogQ1MwOiBOQU5EICovCisJcmFuZ2VzID0gPDAgMCAweDA4MDAwMDAwIDB4MTAwMDAwMD47CS8qIENTMDogMTZNQiBmb3IgTkFORCAqLwogCW5hbmRAMCwwIHsKLQkJcmVnID0gPDAgMCAwPjsgLyogQ1MwLCBvZmZzZXQgMCAqLworCQlyZWcgPSA8MCAwIDQ+OyAvKiBDUzAsIG9mZnNldCAwLCBJTyBzaXplIDQgKi8KIAkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDE2IjsKIAkJdGksZWxtLWlkID0gPCZlbG0+OwogCQluYW5kLWJ1cy13aWR0aCA9IDw4PjsKQEAgLTUxOSw2ICs1MTksMTQgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismdHNjYWRjIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlhZGMgeworCQl0aSxhZGMtY2hhbm5lbHMgPSA8MCAxIDIgMyA0IDUgNiA3PjsKKwl9OworfTsKKwogJmVjYXAwIHsKIAkJc3RhdHVzID0gIm9rYXkiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW01N3h4LWJlYWdsZS14MTUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW01N3h4LWJlYWdsZS14MTUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZWRiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTU3eHgtYmVhZ2xlLXgxNS5kdHMKQEAgLTAsMCArMSw0MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworL2R0cy12MS87CisKKyNpbmNsdWRlICJkcmE3NHguZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbGsvdGktZHJhNy1hdGwuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKworLyB7CisJbW9kZWwgPSAiVEkgQU01NzI4IEJlYWdsZUJvYXJkLVgxNSI7CisJY29tcGF0aWJsZSA9ICJ0aSxhbTU3MngtYmVhZ2xlLXgxNSIsICJ0aSxhbTU3MjgiLCAidGksZHJhNzQyIiwgInRpLGRyYTc0IiwgInRpLGRyYTciOworCisJYWxpYXNlcyB7CisJCXJ0YzAgPSAmbWNwX3J0YzsKKwkJcnRjMSA9ICZ0cHM2NTkwMzhfcnRjOworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDgwMDAwMDAwPjsKKwl9OworCisJdmRkXzN2MzogZml4ZWRyZWd1bGF0b3ItdmRkXzN2MyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidmRkXzN2MyI7CisJCXZpbi1zdXBwbHkgPSA8JnJlZ2VuMT47CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwl9OworCisJdnR0X2ZpeGVkOiBmaXhlZHJlZ3VsYXRvci12dHQgeworCQkvKiBUUFM1MTIwMCAqLworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInZ0dF9maXhlZCI7CisJCXZpbi1zdXBwbHkgPSA8JnNtcHMzX3JlZz47CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJZ3BpbyA9IDwmZ3BpbzcgMTEgR1BJT19BQ1RJVkVfSElHSD47CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmbGVkc19waW5zX2RlZmF1bHQ+OworCisJCWxlZEAwIHsKKwkJCWxhYmVsID0gImJlYWdsZS14MTU6dXNyMCI7CisJCQlncGlvcyA9IDwmZ3BpbzcgOSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOworCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCisJCWxlZEAxIHsKKwkJCWxhYmVsID0gImJlYWdsZS14MTU6dXNyMSI7CisJCQlncGlvcyA9IDwmZ3BpbzcgOCBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHUwIjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJfTsKKworCQlsZWRAMiB7CisJCQlsYWJlbCA9ICJiZWFnbGUteDE1OnVzcjIiOworCQkJZ3Bpb3MgPSA8JmdwaW83IDE0IEdQSU9fQUNUSVZFX0hJR0g+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gIm1tYzAiOworCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCisJCWxlZEAzIHsKKwkJCWxhYmVsID0gImJlYWdsZS14MTU6dXNyMyI7CisJCQlncGlvcyA9IDwmZ3BpbzcgMTUgR1BJT19BQ1RJVkVfSElHSD47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaWRlLWRpc2siOworCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCX07Cit9OworCismZHJhN19wbXhfY29yZSB7CisJbGVkc19waW5zX2RlZmF1bHQ6IGxlZHNfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4M2E4IChQSU5fT1VUUFVUIHwgTVVYX01PREUxNCkJLyogc3BpMV9kMS5ncGlvN184ICovCisJCQkweDNhYyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMTQpCS8qIHNwaTFfZDAuZ3BpbzdfOSAqLworCQkJMHgzYzAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTE0KQkvKiBzcGkyX3NjbGsuZ3BpbzdfMTQgKi8KKwkJCTB4M2M0IChQSU5fT1VUUFVUIHwgTVVYX01PREUxNCkJLyogc3BpMl9kMS5ncGlvN18xNSAqLworCQk+OworCX07CisKKwlpMmMxX3BpbnNfZGVmYXVsdDogaTJjMV9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg0MDAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGkyYzFfc2RhLnNkYSAqLworCQkJMHg0MDQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIGkyYzFfc2NsLnNjbCAqLworCQk+OworCX07CisKKwlpMmMzX3BpbnNfZGVmYXVsdDogaTJjM19waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgyYTQgKFBJTl9JTlBVVHwgTVVYX01PREUxMCkJLyogbWNhc3AxX2FjbGt4LmkyYzNfc2RhICovCisJCQkweDJhOCAoUElOX0lOUFVUfCBNVVhfTU9ERTEwKQkvKiBtY2FzcDFfZnN4LmkyYzNfc2NsICovCisJCT47CisJfTsKKworCXVhcnQzX3BpbnNfZGVmYXVsdDogdWFydDNfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MjQ4IChQSU5fSU5QVVRfU0xFVyB8IE1VWF9NT0RFMCkgLyogdWFydDNfcnhkLnJ4ZCAqLworCQkJMHgyNGMgKFBJTl9JTlBVVF9TTEVXIHwgTVVYX01PREUwKSAvKiB1YXJ0M190eGQudHhkICovCisJCT47CisJfTsKKworCW1tYzFfcGluc19kZWZhdWx0OiBtbWMxX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDM2YyAoUElOX0lOUFVUIHwgTVVYX01PREUxNCkJLyogbW1jMXNkY2QuZ3BpbzIxOSAqLworCQkJMHgzNTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfY2xrLmNsayAqLworCQkJMHgzNTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfY21kLmNtZCAqLworCQkJMHgzNWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfZGF0MC5kYXQwICovCisJCQkweDM2MCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogbW1jMV9kYXQxLmRhdDEgKi8KKwkJCTB4MzY0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2RhdDIuZGF0MiAqLworCQkJMHgzNjggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfZGF0My5kYXQzICovCisJCT47CisJfTsKKworCW1tYzJfcGluc19kZWZhdWx0OiBtbWMyX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDljIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyMy5tbWMyX2NsayAqLworCQkJMHhiMCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19jczEubW1jMl9jbWQgKi8KKwkJCTB4YTAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTI0Lm1tYzJfZGF0MCAqLworCQkJMHhhNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjUubW1jMl9kYXQxICovCisJCQkweGE4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyNi5tbWMyX2RhdDIgKi8KKwkJCTB4YWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTI3Lm1tYzJfZGF0MyAqLworCQkJMHg4YyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMTkubW1jMl9kYXQ0ICovCisJCQkweDkwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyMC5tbWMyX2RhdDUgKi8KKwkJCTB4OTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTIxLm1tYzJfZGF0NiAqLworCQkJMHg5OCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjIubW1jMl9kYXQ3ICovCisJCT47CisJfTsKKworCXRwczY1OTAzOF9waW5zX2RlZmF1bHQ6IHRwczY1OTAzOF9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg0MTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTE0KQkvKiB3YWtldXAwLmdwaW8xXzAgKi8KKwkJPjsKKwl9OworCisJdG1wMTAyX3BpbnNfZGVmYXVsdDogdG1wMTAyX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDNDOCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMTQpCS8qIHNwaTJfZDAuZ3BpbzdfMTYgKi8KKwkJPjsKKwl9OworCisJbWNwNzk0MTBfcGluc19kZWZhdWx0OiBtY3A3OTQxMF9waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg0MjQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpCS8qIHdha2V1cDMuc3lzX25pcnExICovCisJCT47CisJfTsKKworCXVzYjFfcGluczogcGlubXV4X3VzYjFfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDI4MCAoUElOX0lOUFVUX1NMRVcgfCBNVVhfTU9ERTApIC8qIHVzYjFfZHJ2dmJ1cyAqLworCQk+OworCX07CisKK307CisKKyZpMmMxIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyYzFfcGluc19kZWZhdWx0PjsKKwljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCXRwczY1OTAzODogdHBzNjU5MDM4QDU4IHsKKwkJY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTkwMzgiOworCQlyZWcgPSA8MHg1OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8xPjsKKwkJaW50ZXJydXB0cyA9IDwwIElSUV9UWVBFX0xFVkVMX0xPVz47CisKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ0cHM2NTkwMzhfcGluc19kZWZhdWx0PjsKKworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKworCQl0aSxzeXN0ZW0tcG93ZXItY29udHJvbGxlcjsKKworCQl0cHM2NTkwMzhfcG1pYyB7CisJCQljb21wYXRpYmxlID0gInRpLHRwczY1OTAzOC1wbWljIjsKKworCQkJcmVndWxhdG9ycyB7CisJCQkJc21wczEyX3JlZzogc21wczEyIHsKKwkJCQkJLyogVkREX01QVSAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzMTIiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwgODUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTI1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlzbXBzM19yZWc6IHNtcHMzIHsKKwkJCQkJLyogVkREX0REUiAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzMyI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXNtcHM0NV9yZWc6IHNtcHM0NSB7CisJCQkJCS8qIFZERF9EU1BFVkUsIFZERF9JVkEsIFZERF9HUFUgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAic21wczQ1IjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8IDg1MDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQl9OworCisJCQkJc21wczZfcmVnOiBzbXBzNiB7CisJCQkJCS8qIFZERF9DT1JFICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gInNtcHM2IjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAzMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQkvKiBTTVBTNyB1bnVzZWQgKi8KKworCQkJCXNtcHM4X3JlZzogc21wczggeworCQkJCQkvKiBWRERfMVY4ICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gInNtcHM4IjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQl9OworCisJCQkJLyogU01QUzkgdW51c2VkICovCisKKwkJCQlsZG8xX3JlZzogbGRvMSB7CisJCQkJCS8qIFZERF9TRCAgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvMSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCWxkbzJfcmVnOiBsZG8yIHsKKwkJCQkJLyogVkREX1NIVjUgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvMiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCWxkbzNfcmVnOiBsZG8zIHsKKwkJCQkJLyogVkREQV8xVjhfUEhZICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzMiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlsZG85X3JlZzogbGRvOSB7CisJCQkJCS8qIFZERF9SVEMgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvOSI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCWxkb2xuX3JlZzogbGRvbG4geworCQkJCQkvKiBWRERBXzFWOF9QTEwgKi8KKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAibGRvbG4iOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQlsZG91c2JfcmVnOiBsZG91c2IgeworCQkJCQkvKiBWRERBXzNWX1VTQjogVkREQV9VU0JIUzMzICovCisJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkb3VzYiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCXJlZ2VuMTogcmVnZW4xIHsKKwkJCQkJLyogVkREXzNWM19PTiAqLworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJyZWdlbjEiOworCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQl0cHM2NTkwMzhfcnRjOiB0cHM2NTkwMzhfcnRjIHsKKwkJCWNvbXBhdGlibGUgPSAidGkscGFsbWFzLXJ0YyI7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ0cHM2NTkwMzg+OworCQkJaW50ZXJydXB0cyA9IDw4IElSUV9UWVBFX0VER0VfRkFMTElORz47CisJCQl3YWtldXAtc291cmNlOworCQl9OworCisJCXRwczY1OTAzOF9wd3JfYnV0dG9uOiB0cHM2NTkwMzhfcHdyX2J1dHRvbiB7CisJCQljb21wYXRpYmxlID0gInRpLHBhbG1hcy1wd3JidXR0b24iOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmdHBzNjU5MDM4PjsKKwkJCWludGVycnVwdHMgPSA8MSBJUlFfVFlQRV9FREdFX0ZBTExJTkc+OworCQkJd2FrZXVwLXNvdXJjZTsKKwkJCXRpLHBhbG1hcy1sb25nLXByZXNzLXNlY29uZHMgPSA8MTI+OworCQl9OworCX07CisKKwl0bXAxMDI6IHRtcDEwMkA0OCB7CisJCWNvbXBhdGlibGUgPSAidGksdG1wMTAyIjsKKwkJcmVnID0gPDB4NDg+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnRtcDEwMl9waW5zX2RlZmF1bHQ+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvNz47CisJCWludGVycnVwdHMgPSA8MTYgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwl9OworfTsKKworJmkyYzMgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjM19waW5zX2RlZmF1bHQ+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJbWNwX3J0YzogcnRjQDZmIHsKKwkJY29tcGF0aWJsZSA9ICJtaWNyb2NoaXAsbWNwNzk0MXgiOworCQlyZWcgPSA8MHg2Zj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyIElSUV9UWVBFX0xFVkVMX0xPVz47ICAvKiBJUlFfU1lTXzFOICovCisKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZtY3A3OTQxMF9waW5zX2RlZmF1bHQ+OworCisJCXZjYy1zdXBwbHkgPSA8JnZkZF8zdjM+OworCQl3YWtldXAtc291cmNlOworCX07Cit9OworCismZ3BpbzcgeworCXRpLG5vLXJlc2V0LW9uLWluaXQ7CisJdGksbm8taWRsZS1vbi1pbml0OworfTsKKworJmNwdTAgeworCWNwdTAtc3VwcGx5ID0gPCZzbXBzMTJfcmVnPjsKKwl2b2x0YWdlLXRvbGVyYW5jZSA9IDwxPjsKK307CisKKyZ1YXJ0MyB7CisJc3RhdHVzID0gIm9rYXkiOworCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JmdpYyBHSUNfU1BJIDY5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICAgPCZkcmE3X3BteF9jb3JlIDB4MjQ4PjsKKworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0M19waW5zX2RlZmF1bHQ+OworfTsKKworJm1tYzEgeworCXN0YXR1cyA9ICJva2F5IjsKKworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMxX3BpbnNfZGVmYXVsdD47CisKKwl2bW1jLXN1cHBseSA9IDwmbGRvMV9yZWc+OworCXZtbWNfYXV4LXN1cHBseSA9IDwmdmRkXzN2Mz47CisJcGJpYXMtc3VwcGx5ID0gPCZwYmlhc19tbWNfcmVnPjsKKwlidXMtd2lkdGggPSA8ND47CisJY2QtZ3Bpb3MgPSA8JmdwaW82IDI3IDA+OyAvKiBncGlvIDIxOSAqLworfTsKKworJm1tYzIgeworCXN0YXR1cyA9ICJva2F5IjsKKworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMyX3BpbnNfZGVmYXVsdD47CisKKwl2bW1jLXN1cHBseSA9IDwmdmRkXzN2Mz47CisJYnVzLXdpZHRoID0gPDg+OworCXRpLG5vbi1yZW1vdmFibGU7CisJY2FwLW1tYy1kdWFsLWRhdGEtcmF0ZTsKK307CisKKyZzYXRhIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiMl9waHkxIHsKKwlwaHktc3VwcGx5ID0gPCZsZG91c2JfcmVnPjsKK307CisKKyZ1c2IxIHsKKwlkcl9tb2RlID0gImhvc3QiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1c2IxX3BpbnM+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybS1yZWFsdmlldy1wYjExNzYuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtLXJlYWx2aWV3LXBiMTE3Ni5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyNmM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybS1yZWFsdmlldy1wYjExNzYuZHRzCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgTGluYXJvIEx0ZAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlICJza2VsZXRvbi5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJBUk0gUmVhbFZpZXcgUEIxMTc2IjsKKwljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYiOworCisJY2hvc2VuIHsgfTsKKworCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJnBiMTE3Nl9zZXJpYWwwOworCQlzZXJpYWwxID0gJnBiMTE3Nl9zZXJpYWwxOworCQlzZXJpYWwyID0gJnBiMTE3Nl9zZXJpYWwyOworCQlzZXJpYWwzID0gJnBiMTE3Nl9zZXJpYWwzOworCQlzZXJpYWw0ID0gJmZwZ2Ffc2VyaWFsOworCX07CisKKwltZW1vcnkgeworCQkvKiAxMjggTWlCIG1lbW9yeSBAIDB4MCAqLworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA4MDAwMDAwPjsKKwl9OworCisJLyogVGhlIHZvbHRhZ2UgdG8gdGhlIE1NQyBjYXJkIGlzIGhhcmR3aXJlZCBhdCAzLjNWICovCisJdm1tYzogZml4ZWRyZWd1bGF0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidm1tYyI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisgICAgICAgIH07CisKKwl4dGFsMjRtaHo6IHh0YWwyNG1oekAyNE0geworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MjQwMDAwMDA+OworCX07CisKKwl0aW1jbGs6IHRpbWNsa0AxTSB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9jay1kaXYgPSA8MjQ+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9ja3MgPSA8Jnh0YWwyNG1oej47CisJfTsKKworCW1jbGs6IG1jbGtAMjRNIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisJCWNsb2NrLWRpdiA9IDwxPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2tzID0gPCZ4dGFsMjRtaHo+OworCX07CisKKwlrbWljbGs6IGttaWNsa0AyNE0geworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2stZGl2ID0gPDE+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9ja3MgPSA8Jnh0YWwyNG1oej47CisJfTsKKworCXNzcGNsazogc3NwY2xrQDI0TSB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9jay1kaXYgPSA8MT47CisJCWNsb2NrLW11bHQgPSA8MT47CisJCWNsb2NrcyA9IDwmeHRhbDI0bWh6PjsKKwl9OworCisJdWFydGNsazogdWFydGNsa0AyNE0geworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJY2xvY2stZGl2ID0gPDE+OworCQljbG9jay1tdWx0ID0gPDE+OworCQljbG9ja3MgPSA8Jnh0YWwyNG1oej47CisJfTsKKworCS8qIEZJWE1FOiB0aGlzIGFjdHVhbGx5IGhhbmdzIG9mZiB0aGUgUExMIGNsb2NrcyAqLworCXBjbGs6IHBjbGtAMCB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwl9OworCisJc29jIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYtc29jIiwgInNpbXBsZS1idXMiOworCQlyZWdtYXAgPSA8JnN5c2Nvbj47CisJCXJhbmdlczsKKworCQlzeXNjb246IHN5c2NvbkAxMDAwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYjExNzYtc3lzY29uIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgxMDAwMDAwMCAweDEwMDA+OworCisJCQlsZWRAMDguMCB7CisJCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCQlvZmZzZXQgPSA8MHgwOD47CisJCQkJbWFzayA9IDwweDAxPjsKKwkJCQlsYWJlbCA9ICJ2ZXJzYXRpbGU6MCI7CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvbiI7CisJCQl9OworCQkJbGVkQDA4LjEgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHgwMj47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjEiOworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJtbWMwIjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA4LjIgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHgwND47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjIiOworCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHUwIjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA4LjMgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHgwOD47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjMiOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCQlsZWRAMDguNCB7CisJCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCQlvZmZzZXQgPSA8MHgwOD47CisJCQkJbWFzayA9IDwweDEwPjsKKwkJCQlsYWJlbCA9ICJ2ZXJzYXRpbGU6NCI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJCWxlZEAwOC41IHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA4PjsKKwkJCQltYXNrID0gPDB4MjA+OworCQkJCWxhYmVsID0gInZlcnNhdGlsZTo1IjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA4LjYgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDg+OworCQkJCW1hc2sgPSA8MHg0MD47CisJCQkJbGFiZWwgPSAidmVyc2F0aWxlOjYiOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCQlsZWRAMDguNyB7CisJCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCQlvZmZzZXQgPSA8MHgwOD47CisJCQkJbWFzayA9IDwweDgwPjsKKwkJCQlsYWJlbCA9ICJ2ZXJzYXRpbGU6NyI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJfTsKKworCQkvKiBQcmltYXJ5IERldkNoaXAgR0lDIHN5bnRoZXNpemVkIHdpdGggdGhlIENQVSAqLworCQlpbnRjX2RjMTE3NjogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTAxMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sYXJtMTE3Nmp6Zi1kZXZjaGlwLWdpYyIsICJhcm0sYXJtMTFtcC1naWMiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHgxMDEyMTAwMCAweDEwMDA+LAorCQkJICAgICAgPDB4MTAxMjAwMDAgMHgxMDA+OworCQl9OworCisJCUwyOiBsMi1jYWNoZSB7CisJCQljb21wYXRpYmxlID0gImFybSxsMjIwLWNhY2hlIjsKKwkJCXJlZyA9IDwweDEwMTEwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljYWNoZS11bmlmaWVkOworCQkJY2FjaGUtbGV2ZWwgPSA8Mj47CisJCQkvKgorCQkJICogT3ZlcnJpZGUgZGVmYXVsdCBjYWNoZSBzaXplLCBzZXRzIGFuZAorCQkJICogYXNzb2NpYXRpdml0eSBhcyB0aGVzZSBtYXkgYmUgZXJyb25lb3VzbHkgc2V0CisJCQkgKiB1cCBieSBib290IGxvYWRlcihzKS4KKwkJCSAqLworCQkJYXJtLG92ZXJyaWRlLWF1eHJlZzsKKwkJCWNhY2hlLXNpemUgPSA8MTMxMDcyPjsgLy8gMTI4a0IKKwkJCWNhY2hlLXNldHMgPSA8NTEyPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCX07CisKKwkJcG11IHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGFybTExNzYtcG11IjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQl9OworCisJCXRpbWVyMDE6IHRpbWVyQDEwMTA0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHNwODA0IiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMDQwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCA4IElSUV9UWVBFX0xFVkVMX0hJR0g+LCA8MCA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZ0aW1jbGs+LCA8JnRpbWNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJ0aW1lcjEiLCAidGltZXIyIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQl0aW1lcjIzOiB0aW1lckAxMDEwNTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxzcDgwNCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMTA1MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2RjMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlhcm0sc3A4MDQtaGFzLWlycSA9IDwxPjsKKwkJCWNsb2NrcyA9IDwmdGltY2xrPiwgPCZ0aW1jbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAidGltZXIxIiwgInRpbWVyMiIsICJhcGJfcGNsayI7CisJCX07CisKKwkJcGIxMTc2X3J0YzogcnRjQDEwMTA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDMxIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMDgwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAxNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKwkJcGIxMTc2X2dwaW8wOiBncGlvQDEwMTBhMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGEwMDAgMHgxMDAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAxNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJY2xvY2tzID0gPCZwY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJfTsKKworCQlwYjExNzZfc3NwOiBzc3BAMTAxMGIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMjIiLCAiYXJtLHByaW1lY2VsbCI7CisJCQlyZWcgPSA8MHgxMDEwYjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19kYzExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZzc3BjbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAiU1NQQ0xLIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlwYjExNzZfc2VyaWFsMDogc2VyaWFsQDEwMTBjMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGMwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAxOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmdWFydGNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0Y2xrIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlwYjExNzZfc2VyaWFsMTogc2VyaWFsQDEwMTBkMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGQwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAxOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmdWFydGNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0Y2xrIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlwYjExNzZfc2VyaWFsMjogc2VyaWFsQDEwMTBlMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGUwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmdWFydGNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0Y2xrIiwgImFwYl9wY2xrIjsKKwkJfTsKKworCQlwYjExNzZfc2VyaWFsMzogc2VyaWFsQDEwMTBmMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAxMGYwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZGMxMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmdWFydGNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0Y2xrIiwgImFwYl9wY2xrIjsKKwkJfTsKKwl9OworCisJLyogVGhlc2UgcGVyaXBoZXJhbHMgYXJlIGluc2lkZSB0aGUgRlBHQSByYXRoZXIgdGhhbiB0aGUgRGV2Q2hpcCAqLworCWZwZ2EgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJhbmdlczsKKworCQlmcGdhX21jaTogbW1jc2RAMTAwMDUwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwxOHgiLCAiYXJtLHByaW1lY2VsbCI7CisJCQlyZWcgPSA8MHgxMDAwNTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19mcGdhMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJPDAgMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCS8qIER1ZSB0byBmcmVxdWVudCBGSUZPIG92ZXJydW5zLCB1c2UganVzdCA1MDAga0h6ICovCisJCQltYXgtZnJlcXVlbmN5ID0gPDUwMDAwMD47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljYXAtc2QtaGlnaHNwZWVkOworCQkJY2FwLW1tYy1oaWdoc3BlZWQ7CisJCQljbG9ja3MgPSA8Jm1jbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAibWNsayIsICJhcGJfcGNsayI7CisJCQl2bW1jLXN1cHBseSA9IDwmdm1tYz47CisJCQljZC1ncGlvcyA9IDwmZnBnYV9ncGlvMSAwIEdQSU9fQUNUSVZFX0xPVz47CisJCQl3cC1ncGlvcyA9IDwmZnBnYV9ncGlvMSAxIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCWZwZ2Ffa21pMDoga21pQDEwMDA2MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDUwIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAwMDYwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZnBnYTExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmttaWNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJLTUlSRUZDTEsiLCAiYXBiX3BjbGsiOworCQl9OworCisJCWZwZ2Ffa21pMToga21pQDEwMDA3MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDUwIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAwMDcwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZnBnYTExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmttaWNsaz4sIDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJLTUlSRUZDTEsiLCAiYXBiX3BjbGsiOworCQl9OworCisJCWZwZ2FfY2hhcmxjZDogY2hhcmxjZEAxMDAwODAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSx2ZXJzYXRpbGUtbGNkIjsKKwkJCXJlZyA9IDwweDEwMDA4MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2ZwZ2ExMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZwY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJfTsKKworCQlmcGdhX3NlcmlhbDogc2VyaWFsQDEwMDA5MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAwMDkwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZnBnYTExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnVhcnRjbGs+LCA8JnBjbGs+OworCQkJY2xvY2stbmFtZXMgPSAidWFydGNsayIsICJhcGJfcGNsayI7CisJCX07CisKKwkJLyogVGhpcyBHSUMgb24gdGhlIGJvYXJkIGlzIGNhc2NhZGVkIG9mZiB0aGUgRGV2Q2hpcCBHSUMgKi8KKwkJaW50Y19mcGdhMTE3NjogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTAwNDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sYXJtMTE3Nmp6Zi1kZXZjaGlwLWdpYyIsICJhcm0sYXJtMTFtcC1naWMiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHgxMDA0MTAwMCAweDEwMDA+LAorCQkJICAgICAgPDB4MTAwNDAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19kYzExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDMxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQl9OworCisJCWZwZ2FfZ3BpbzA6IGdwaW9AMTAwMTQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQlyZWcgPSA8MHgxMDAxNDAwMCAweDEwMDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Y19mcGdhMTE3Nj47CisJCQlpbnRlcnJ1cHRzID0gPDAgOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJY2xvY2tzID0gPCZwY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJfTsKKworCQlmcGdhX2dwaW8xOiBncGlvQDEwMDE1MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJcmVnID0gPDB4MTAwMTUwMDAgMHgxMDAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGNfZnBnYTExNzY+OworCQkJaW50ZXJydXB0cyA9IDwwIDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCWNsb2NrcyA9IDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKwkJZnBnYV9ydGM6IHJ0Y0AxMDAxNzAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAzMSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwweDEwMDE3MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpbnRjX2ZwZ2ExMTc2PjsKKwkJCWludGVycnVwdHMgPSA8MCAyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGNsaz47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1kYi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLWRiLmR0cwppbmRleCBhNDk1ZTU4Li4xNDY2NTgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLWRiLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLWRiLmR0cwpAQCAtNzUsNiArNzUsNyBAQAogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCQlhdWRpb19jb2RlYzogYXVkaW8tY29kZWNANGEgeworCQkJCQkjc291bmQtZGFpLWNlbGxzID0gPDA+OwogCQkJCQljb21wYXRpYmxlID0gImNpcnJ1cyxjczQybDUxIjsKIAkJCQkJcmVnID0gPDB4NGE+OwogCQkJCX07CkBAIC0xMDIsMzAgKzEwMyw2IEBACiAJCQkJYnJva2VuLWNkOwogCQkJfTsKIAotCQkJcGluY3RybCB7Ci0JCQkJLyoKLQkJCQkgKiBUaGVzZSBwaW5zIG1pZ2h0IGJlIG11eGVkIGFzIEkyUyBieQotCQkJCSAqIHRoZSBib290bG9hZGVyLCBidXQgaXQgY29uZmxpY3RzCi0JCQkJICogd2l0aCB0aGUgcmVhbCBJMlMgcGlucyB0aGF0IGFyZQotCQkJCSAqIG11eGVkIHVzaW5nIGkyc19waW5zLiBXZSBtdXN0IG11eAotCQkJCSAqIHRob3NlIHBpbnMgdG8gYSBmdW5jdGlvbiBvdGhlciB0aGFuCi0JCQkJICogSTJTLgotCQkJCSAqLwotCQkJCXBpbmN0cmwtMCA9IDwmaG9nX3BpbnMxICZob2dfcGluczI+OwotCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0KLQkJCQlob2dfcGluczE6IGhvZy1waW5zMSB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA2IiwgICJtcHA4IiwgIm1wcDEwIiwKLQkJCQkJCSAgICAgICAibXBwMTIiLCAibXBwMTMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlob2dfcGluczI6IGhvZy1waW5zMiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDciLCAibXBwOSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJdXNiQDUwMDAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtMTM1LDYgKzExMiw4IEBACiAJCQl9OwogCiAJCQlzcGkwOiBzcGlAMTA2MDAgeworCQkJCXBpbmN0cmwtMCA9IDwmc3BpMF9waW5zMj47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAKIAkJCQlzcGktZmxhc2hAMCB7CkBAIC0xNjcsMTcgKzE0Niw4NCBAQAogCX07CiAKIAlzb3VuZCB7Ci0JICAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGEzNzBkYi1hdWRpbyI7Ci0JICAgICAgbWFydmVsbCxhdWRpby1jb250cm9sbGVyID0gPCZhdWRpb19jb250cm9sbGVyPjsKLQkgICAgICBtYXJ2ZWxsLGF1ZGlvLWNvZGVjID0gPCZhdWRpb19jb2RlYyAmc3BkaWZfb3V0ICZzcGRpZl9pbj47Ci0JICAgICAgc3RhdHVzID0gIm9rYXkiOworCQljb21wYXRpYmxlID0gInNpbXBsZS1hdWRpby1jYXJkIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsbmFtZSA9ICJBcm1hZGEgMzcwIERCIEF1ZGlvIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsbWNsay1mcyA9IDwyNTY+OworCQlzaW1wbGUtYXVkaW8tY2FyZCx3aWRnZXRzID0KKwkJCSJIZWFkcGhvbmUiLCAiT3V0IEphY2siLAorCQkJIkxpbmUiLCAiSW4gSmFjayI7CisJCXNpbXBsZS1hdWRpby1jYXJkLHJvdXRpbmcgPQorCQkJIk91dCBKYWNrIiwgIkhQTCIsCisJCQkiT3V0IEphY2siLCAiSFBSIiwKKwkJCSJBSU4xTCIsICJJbiBKYWNrIiwKKwkJCSJBSU4xTCIsICJJbiBKYWNrIjsKKwkJc3RhdHVzID0gIm9rYXkiOworCisJCXNpbXBsZS1hdWRpby1jYXJkLGRhaS1saW5rQDAgeworCQkJZm9ybWF0ID0gImkycyI7CisJCQljcHUgeworCQkJCXNvdW5kLWRhaSA9IDwmYXVkaW9fY29udHJvbGxlciAwPjsKKwkJCX07CisKKwkJCWNvZGVjIHsKKwkJCQlzb3VuZC1kYWkgPSA8JmF1ZGlvX2NvZGVjPjsKKwkJCX07CisJCX07CisKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZGFpLWxpbmtAMSB7CisJCQlmb3JtYXQgPSAiaTJzIjsKKwkJCWNwdSB7CisJCQkJc291bmQtZGFpID0gPCZhdWRpb19jb250cm9sbGVyIDE+OworCQkJfTsKKworCQkJY29kZWMgeworCQkJCXNvdW5kLWRhaSA9IDwmc3BkaWZfb3V0PjsKKwkJCX07CisJCX07CisKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZGFpLWxpbmtAMiB7CisJCQlmb3JtYXQgPSAiaTJzIjsKKwkJCWNwdSB7CisJCQkJc291bmQtZGFpID0gPCZhdWRpb19jb250cm9sbGVyIDE+OworCQkJfTsKKworCQkJY29kZWMgeworCQkJCXNvdW5kLWRhaSA9IDwmc3BkaWZfaW4+OworCQkJfTsKKwkJfTsKIAl9OwogCiAJc3BkaWZfb3V0OiBzcGRpZi1vdXQgewotCSAgICAgIGNvbXBhdGlibGUgPSAibGludXgsc3BkaWYtZGl0IjsKKwkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJsaW51eCxzcGRpZi1kaXQiOwogCX07CiAKIAlzcGRpZl9pbjogc3BkaWYtaW4gewotCSAgICAgIGNvbXBhdGlibGUgPSAibGludXgsc3BkaWYtZGlyIjsKKwkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJsaW51eCxzcGRpZi1kaXIiOworCX07Cit9OworCismcGluY3RybCB7CisJLyoKKwkgKiBUaGVzZSBwaW5zIG1pZ2h0IGJlIG11eGVkIGFzIEkyUyBieQorCSAqIHRoZSBib290bG9hZGVyLCBidXQgaXQgY29uZmxpY3RzCisJICogd2l0aCB0aGUgcmVhbCBJMlMgcGlucyB0aGF0IGFyZQorCSAqIG11eGVkIHVzaW5nIGkyc19waW5zLiBXZSBtdXN0IG11eAorCSAqIHRob3NlIHBpbnMgdG8gYSBmdW5jdGlvbiBvdGhlciB0aGFuCisJICogSTJTLgorCSAqLworCXBpbmN0cmwtMCA9IDwmaG9nX3BpbnMxICZob2dfcGluczI+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwlob2dfcGluczE6IGhvZy1waW5zMSB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2IiwgICJtcHA4IiwgIm1wcDEwIiwKKwkJCSAgICAgICAibXBwMTIiLCAibXBwMTMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlob2dfcGluczI6IGhvZy1waW5zMiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDciLCAibXBwOSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbWlyYWJveC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW1pcmFib3guZHRzCmluZGV4IDJiNmQyNGUuLmUxYjBlYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbWlyYWJveC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1taXJhYm94LmR0cwpAQCAtNTQsMTggKzU0LDYgQEAKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCi0JCQlwaW5jdHJsIHsKLQkJCQlwd3JfbGVkX3BpbjogcHdyLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwbyI7Ci0JCQkJfTsKLQotCQkJCXN0YXRfbGVkX3BpbnM6IHN0YXQtbGVkLXBpbnMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjQiLCAibXBwNjUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0JCQl9OwotCiAJCQlncGlvX2xlZHMgewogCQkJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMTY5LDMgKzE1NywxNiBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJcHdyX2xlZF9waW46IHB3ci1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncG8iOworCX07CisKKwlzdGF0X2xlZF9waW5zOiBzdGF0LWxlZC1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDY0IiwgIm1wcDY1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTAyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbmV0Z2Vhci1ybjEwMi5kdHMKaW5kZXggM2FlYmQ5My4uNGUyNDkzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC1uZXRnZWFyLXJuMTAyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDIuZHRzCkBAIC0zNSw3ICszNSw3IEBACiAJCXBjaWUtY29udHJvbGxlciB7CiAJCQlzdGF0dXMgPSAib2theSI7CiAKLQkJCS8qIENvbm5lY3RlZCB0byBNYXJ2ZWxsIFNBVEEgY29udHJvbGxlciAqLworCQkJLyogQ29ubmVjdGVkIHRvIE1hcnZlbGwgODhTRTkxNzAgU0FUQSBjb250cm9sbGVyICovCiAJCQlwY2llQDEsMCB7CiAJCQkJLyogUG9ydCAwLCBMYW5lIDAgKi8KIAkJCQlzdGF0dXMgPSAib2theSI7CkBAIC01Myw1MyArNTMsMTIgQEAKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwogCisJCQkvKiBlU0FUQSBpbnRlcmZhY2UgKi8KIAkJCXNhdGFAYTAwMDAgewotCQkJCW5yLXBvcnRzID0gPDI+OworCQkJCW5yLXBvcnRzID0gPDE+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAKLQkJCXBpbmN0cmwgewotCQkJCXBvd2VyX2xlZF9waW46IHBvd2VyLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTciOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlzYXRhMV9sZWRfcGluOiBzYXRhMS1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDE1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTJfbGVkX3Bpbjogc2F0YTItbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxNCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCWJhY2t1cF9sZWRfcGluOiBiYWNrdXAtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1NiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCWJhY2t1cF9idXR0b25fcGluOiBiYWNrdXAtYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1OCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXBvd2VyX2J1dHRvbl9waW46IHBvd2VyLWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjIiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlyZXNldF9idXR0b25fcGluOiByZXNldC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDYiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlwb3dlcm9mZjogcG93ZXJvZmYgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwOCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQkJCX07Ci0KIAkJCW1kaW8gewogCQkJCXBpbmN0cmwtMCA9IDwmbWRpb19waW5zPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMjA0LDIwICsxNjMsMjAgQEAKIAkJCWRlZmF1bHQtc3RhdGUgPSAia2VlcCI7CiAJCX07CiAKLQkJZ3JlZW4tc2F0YTEtbGVkIHsKLQkJCWxhYmVsID0gInJuMTAyOmdyZWVuOnNhdGExIjsKKwkJYmx1ZS1zYXRhMS1sZWQgeworCQkJbGFiZWwgPSAicm4xMDI6Ymx1ZTpzYXRhMSI7CiAJCQlncGlvcyA9IDwmZ3BpbzAgMTUgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWRlZmF1bHQtc3RhdGUgPSAib24iOwogCQl9OwogCi0JCWdyZWVuLXNhdGEyLWxlZCB7Ci0JCQlsYWJlbCA9ICJybjEwMjpncmVlbjpzYXRhMiI7CisJCWJsdWUtc2F0YTItbGVkIHsKKwkJCWxhYmVsID0gInJuMTAyOmJsdWU6c2F0YTIiOwogCQkJZ3Bpb3MgPSA8JmdwaW8wIDE0IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKIAkJfTsKIAotCQlncmVlbi1iYWNrdXAtbGVkIHsKLQkJCWxhYmVsID0gInJuMTAyOmdyZWVuOmJhY2t1cCI7CisJCWJsdWUtYmFja3VwLWxlZCB7CisJCQlsYWJlbCA9ICJybjEwMjpibHVlOmJhY2t1cCI7CiAJCQlncGlvcyA9IDwmZ3BpbzEgMjQgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWRlZmF1bHQtc3RhdGUgPSAib24iOwogCQl9OwpAQCAtMjU2LDMgKzIxNSw0NSBAQAogCQlncGlvcyA9IDwmZ3BpbzAgOCBHUElPX0FDVElWRV9MT1c+OwogCX07CiB9OworCismcGluY3RybCB7CisJcG93ZXJfbGVkX3BpbjogcG93ZXItbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1NyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGExX2xlZF9waW46IHNhdGExLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMl9sZWRfcGluOiBzYXRhMi1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDE0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJYmFja3VwX2xlZF9waW46IGJhY2t1cC1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDU2IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJYmFja3VwX2J1dHRvbl9waW46IGJhY2t1cC1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDU4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcG93ZXJfYnV0dG9uX3BpbjogcG93ZXItYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2MiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXJlc2V0X2J1dHRvbl9waW46IHJlc2V0LWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXBvd2Vyb2ZmOiBwb3dlcm9mZiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbmV0Z2Vhci1ybjEwNC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDQuZHRzCmluZGV4IGMyZjQxNGIuLjMwNTg2ZTQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLW5ldGdlYXItcm4xMDQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtbmV0Z2Vhci1ybjEwNC5kdHMKQEAgLTUzLDM4ICs1Myw2IEBACiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAotCQkJcGluY3RybCB7Ci0JCQkJcG93ZXJvZmY6IHBvd2Vyb2ZmIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDYwIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJYmFja3VwX2J1dHRvbl9waW46IGJhY2t1cC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDUyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJcG93ZXJfYnV0dG9uX3BpbjogcG93ZXItYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA2MiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCWJhY2t1cF9sZWRfcGluOiBiYWNrdXAtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA2MyI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BvIjsKLQkJCQl9OwotCi0JCQkJcG93ZXJfbGVkX3BpbjogcG93ZXItbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA2NCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXJlc2V0X2J1dHRvbl9waW46IHJlc2V0LWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0JCQl9OwotCiAJCQltZGlvIHsKIAkJCQlwaW5jdHJsLTAgPSA8Jm1kaW9fcGlucz47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTI2OSwzICsyMzcsMzUgQEAKIAkJZ3Bpb3MgPSA8JmdwaW8xIDI4IEdQSU9fQUNUSVZFX0xPVz47CiAJfTsKIH07CisKKyZwaW5jdHJsIHsKKwlwb3dlcm9mZjogcG93ZXJvZmYgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjAiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwliYWNrdXBfYnV0dG9uX3BpbjogYmFja3VwLWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwb3dlcl9idXR0b25fcGluOiBwb3dlci1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJYmFja3VwX2xlZF9waW46IGJhY2t1cC1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncG8iOworCX07CisKKwlwb3dlcl9sZWRfcGluOiBwb3dlci1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDY0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcmVzZXRfYnV0dG9uX3BpbjogcmVzZXQtYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA2NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtcmQuZHRzCmluZGV4IGY1N2E4Zjg0Li4zOTQzMDg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXJkLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXJkLmR0cwpAQCAtNTksMTggKzU5LDYgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKLQkJCXBpbmN0cmwgewotCQkJCWZhbl9waW5zOiBmYW4tcGlucyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA4IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJbGVkX3BpbnM6IGxlZC1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJc2VyaWFsQDEyMDAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtODUsMTAgKzczLDYgQEAKIAkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CiAJCQkJCXJlZyA9IDwwPjsKIAkJCQl9OwotCi0JCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCQlyZWcgPSA8MT47Ci0JCQkJfTsKIAkJCX07CiAKIAkJCWV0aGVybmV0QDcwMDAwIHsKQEAgLTEwMCw4ICs4NCwxMSBAQAogCQkJCXBpbmN0cmwtMCA9IDwmZ2UxX3JnbWlpX3BpbnM+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJCXBoeSA9IDwmcGh5MT47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWktaWQiOworCQkJCWZpeGVkLWxpbmsgeworCQkJCQkgICBzcGVlZCA9IDwxMDAwPjsKKwkJCQkJICAgZnVsbC1kdXBsZXg7CisJCQkJfTsKIAkJCX07CiAKIAkJCW12c2Rpb0BkNDAwMCB7CkBAIC0xNzMsNCArMTYwLDU2IEBACiAJCQl9OwogCQl9OwogCX07CisKKwlkc2FAMCB7CisJCWNvbXBhdGlibGUgPSAibWFydmVsbCxkc2EiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJZHNhLGV0aGVybmV0ID0gPCZldGgxPjsKKwkJZHNhLG1paS1idXMgPSA8Jm1kaW8+OworCisJCXN3aXRjaEAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgxMCAwPjsJLyogTURJTyBhZGRyZXNzIDE2LCBzd2l0Y2ggMCBpbiB0cmVlICovCisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWxhYmVsID0gImxhbjAiOworCQkJfTsKKworCQkJcG9ydEAxIHsKKwkJCSAgICAgICByZWcgPSA8MT47CisJCQkgICAgICAgbGFiZWwgPSAibGFuMSI7CisJCQl9OworCisJCQlwb3J0QDIgeworCQkJICAgICAgIHJlZyA9IDwyPjsKKwkJCSAgICAgICBsYWJlbCA9ICJsYW4yIjsKKwkJCX07CisKKwkJCXBvcnRAMyB7CisJCQkgICAgICAgcmVnID0gPDM+OworCQkJICAgICAgIGxhYmVsID0gImxhbjMiOworCQkJfTsKKworCQkJcG9ydEA1IHsKKwkJCSAgICAgIHJlZyA9IDw1PjsKKwkJCSAgICAgIGxhYmVsID0gImNwdSI7CisJCQl9OworCQl9OworCSB9OwogIH07CisKKyZwaW5jdHJsIHsKKwlmYW5fcGluczogZmFuLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwOCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWxlZF9waW5zOiBsZWQtcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXN5bm9sb2d5LWRzMjEzai5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXN5bm9sb2d5LWRzMjEzai5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmZWNkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAtc3lub2xvZ3ktZHMyMTNqLmR0cwpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIERldmljZSBUcmVlIGZpbGUgZm9yIFN5bm9sb2d5IERTMjEzagorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgQXJuYXVkIEVCQUxBUkQgPGFybm9AbmF0aXNiYWQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTm90ZTogdGhpcyBEZXZpY2UgVHJlZSBhc3N1bWVzIHRoYXQgdGhlIGJvb3Rsb2FkZXIgaGFzIHJlbWFwcGVkIHRoZQorICogaW50ZXJuYWwgcmVnaXN0ZXJzIHRvIDB4ZjEwMDAwMDAgKGluc3RlYWQgb2YgdGhlIG9sZCAweGQwMDAwMDAwKS4KKyAqIFRoZSAweGYxMDAwMDAwIGlzIHRoZSBkZWZhdWx0IHVzZWQgYnkgdGhlIHJlY2VudCwgRFQtY2FwYWJsZSwgVS1Cb290CisgKiBib290bG9hZGVycyBwcm92aWRlZCBieSBNYXJ2ZWxsLiBJdCBpcyB1c2VkIGluIHJlY2VudCB2ZXJzaW9ucyBvZgorICogRFNNIHNvZnR3YXJlIHByb3ZpZGVkIGJ5IFN5bm9sb2d5LiBOb25ldGhlbGVzcywgc29tZSBlYXJsaWVyIGJvYXJkcworICogd2VyZSBkZWxpdmVyZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIHUtYm9vdCB0aGF0IGxlZnQgaW50ZXJuYWwKKyAqIHJlZ2lzdGVycyBtYXBwZWQgYXQgMHhkMDAwMDAwMC4gSWYgeW91IGhhdmUgc3VjaCBhIGRldmljZSB5b3Ugd2lsbAorICogbm90IGJlIGFibGUgdG8gZGlyZWN0bHkgYm9vdCBhIGtlcm5lbCBiYXNlZCBvbiB0aGlzIERldmljZSBUcmVlLiBJbgorICogdGhhdCBjYXNlLCB0aGUgcHJlZmVycmVkIHNvbHV0aW9uIGlzIHRvIHVwZGF0ZSB5b3VyIGJvb3Rsb2FkZXIgKGUuZy4KKyAqIGJ5IHVwZ3JhZGluZyB0byBsYXRlc3QgdmVyc2lvbiBvZiBEU00sIG9yIGJ1aWxkaW5nIGEgbmV3IG9uZSBhbmQKKyAqIGluc3RhbGxpbmcgaXQgZnJvbSB1LWJvb3QgcHJvbXB0KSBvciBhZGp1c3QgdGhlIERldml2ZSBUcmVlCisgKiAocy8weGYxMDAwMDAwLzB4ZDAwMDAwMDAvIGluICdyYW5nZXMnIGJlbG93KS4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSAiYXJtYWRhLTM3MC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJTeW5vbG9neSBEUzIxM2oiOworCWNvbXBhdGlibGUgPSAic3lub2xvZ3ksZHMyMTNqIiwgIm1hcnZlbGwsYXJtYWRhMzcwIiwKKwkJICAgICAibWFydmVsbCxhcm1hZGEtMzcwLXhwIjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIGVhcmx5cHJpbnRrIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MjAwMDAwMDA+OyAvKiA1MTIgTUIgKi8KKwl9OworCisJc29jIHsKKwkJcmFuZ2VzID0gPE1CVVNfSUQoMHhmMCwgMHgwMSkgMCAweGYxMDAwMDAwIDB4MTAwMDAwCisJCQkgIE1CVVNfSUQoMHgwMSwgMHhlMCkgMCAweGZmZjAwMDAwIDB4MTAwMDAwPjsKKworCQlpbnRlcm5hbC1yZWdzIHsKKworCQkJLyogUlRDIHByb3ZpZGVkIGJ5IFNlaWtvIFMtMzUzOTBBIEkyQyBSVEMgY2hpcCBiZWxvdyAqLworCQkJcnRjQDEwMzAwIHsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJc3BpMDogc3BpQDEwNjAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCQlzcGktZmxhc2hAMCB7CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQkJY29tcGF0aWJsZSA9ICJtaWNyb24sbjI1cTA2NCI7CisJCQkJCXJlZyA9IDwwPjsgLyogQ2hpcCBzZWxlY3QgMCAqLworCQkJCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisKKwkJCQkJLyoKKwkJCQkJICogV2FybmluZyEKKwkJCQkJICoKKwkJCQkJICogU3lub2xvZ3kgdS1ib290IHVzZXMgaXRzIGNvbXBpbGVkLWluIGVudmlyb25tZW50CisJCQkJCSAqIGFuZCBpdCBzZWVtcyBTeW5vbG9neSBkaWQgbm90IGNhcmUgdG8gY2hhbmdlIHUtYm9vdAorCQkJCQkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgdG8gYWxsb3cgc2F2aW5nIGEKKwkJCQkJICogbW9kaWZpZWQgZW52aXJvbm1lbnQgYXQgYSBzZW5zaWJsZSBsb2NhdGlvbi4gU28sCisJCQkJCSAqIGlmIHlvdSBkbyBhICdzYXZlZW52JyB1bmRlciB1LWJvb3QsIHlvdXIgbW9kaWZpZWQKKwkJCQkJICogZW52aXJvbm1lbnQgd2lsbCBiZSBzYXZlZCBhdCAxTUIgYWZ0ZXIgdGhlIHN0YXJ0CisJCQkJCSAqIG9mIHRoZSBmbGFzaCwgaS5lLiBpbiB0aGUgbWlkZGxlIG9mIHRoZSB1SW1hZ2UuCisJCQkJCSAqIEZvciB0aGF0IHJlYXNvbiwgaXQgaXMgc3Ryb25nbHkgYWR2aXNlZCBub3QgdG8KKwkJCQkJICogY2hhbmdlIHRoZSBkZWZhdWx0IGVudmlyb25tZW50LCB1bmxlc3MgeW91IGtub3cKKwkJCQkJICogd2hhdCB5b3UgYXJlIGRvaW5nLgorCQkJCQkgKi8KKwkJCQkJcGFydGl0aW9uQDAwMDAwMDAwIHsgLyogdS1ib290ICovCisJCQkJCQlsYWJlbCA9ICJSZWRCb290IjsKKwkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwYzAwMDA+OyAvKiA3NjhLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDBjMDAwMCB7IC8qIHVJbWFnZSAqLworCQkJCQkJbGFiZWwgPSAiekltYWdlIjsKKwkJCQkJCXJlZyA9IDwweDAwMGMwMDAwIDB4MDAyZDAwMDA+OyAvKiAyODgwS0IgKi8KKwkJCQkJfTsKKworCQkJCQlwYXJ0aXRpb25AMDAzOTAwMDAgeyAvKiB1SW5pdHJhbWZzICovCisJCQkJCQlsYWJlbCA9ICJyZC5neiI7CisJCQkJCQlyZWcgPSA8MHgwMDM5MDAwMCAweDAwNDQwMDAwPjsgLyogNDI1MEtCICovCisJCQkJCX07CisKKwkJCQkJcGFydGl0aW9uQDAwN2QwMDAwIHsgLyogTUFDIGFkZHJlc3MgYW5kIHNlcmlhbCBudW1iZXIgKi8KKwkJCQkJCWxhYmVsID0gInZlbmRvciI7CisJCQkJCQlyZWcgPSA8MHgwMDdkMDAwMCAweDAwMDEwMDAwPjsgLyogNjRLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDdlMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJSZWRCb290IGNvbmZpZyI7CisJCQkJCQlyZWcgPSA8MHgwMDdlMDAwMCAweDAwMDEwMDAwPjsgLyogNjRLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDdmMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJGSVMgZGlyZWN0b3J5IjsKKwkJCQkJCXJlZyA9IDwweDAwN2YwMDAwIDB4MDAwMTAwMDA+OyAvKiA2NEtCICovCisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWkyY0AxMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4eHgtaTJjIjsKKwkJCQlwaW5jdHJsLTAgPSA8JmkyYzBfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCQkvKiBNYWluIGRldmljZSBSVEMgY2hpcCAqLworCQkJCXMzNTM5MGE6IHMzNTM5MGFAMzAgeworCQkJCQkgY29tcGF0aWJsZSA9ICJzaWksczM1MzkwYSI7CisJCQkJCSByZWcgPSA8MHgzMD47CisJCQkJfTsKKwkJCX07CisKKwkJCS8qIENvbm5lY3RlZCB0byBhIGhlYWRlciBvbiBkZXZpY2UncyBQQ0IgKi8KKwkJCXNlcmlhbEAxMjAwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJLyogQ29ubmVjdGVkIHRvIGEgVEkgTVNQNDMwRjIxMTEgZm9yIHBvd2VyIGNvbnRyb2wgKi8KKwkJCXNlcmlhbEAxMjEwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJcG93ZXJvZmZAMTIxMDAgeworCQkJCWNvbXBhdGlibGUgPSAic3lub2xvZ3kscG93ZXItb2ZmIjsKKwkJCQlyZWcgPSA8MHgxMjEwMCAweDEwMD47CisJCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+OworCQkJfTsKKworCQkJLyogcmVhciBVU0IgcG9ydCwgbmVhciByZXNldCBidXR0b24gKi8KKwkJCXVzYkA1MDAwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJLyogcmVhciBVU0IgcG9ydCwgbmVhciBSSjQ1IHBvcnQgKi8KKwkJCXVzYkA1MTAwMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKworCQkJbWRpbyB7CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeyAvKiBNYXJ2ZWxsIDg4RTE1MTIgKi8KKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQl9OworCisJCQlldGhlcm5ldEA3MDAwMCB7CisJCQkgICAgICAgc3RhdHVzID0gIm9rYXkiOworCQkJICAgICAgIHBoeSA9IDwmcGh5MT47CisJCQkgICAgICAgcGh5LW1vZGUgPSAic2dtaWkiOworCQkJfTsKKworCQkJc2F0YUBhMDAwMCB7CisJCQkJbnItcG9ydHMgPSA8Mj47CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKwkJfTsKKwl9OworCisJZ3Bpby1mYW4tMzItMzggeworCQlzdGF0dXMgPSAib2theSI7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1mYW4iOworCQlwaW5jdHJsLTAgPSA8JmZhbl9jdHJsX2xvd19waW4gJmZhbl9jdHJsX21pZF9waW4KKwkJCSAgICAgJmZhbl9jdHJsX2hpZ2hfcGluICZmYW5fYWxhcm1fcGluPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJZ3Bpb3MgPSA8JmdwaW8xIDMxIEdQSU9fQUNUSVZFX0hJR0gKKwkJCSAmZ3BpbzIgIDAgR1BJT19BQ1RJVkVfSElHSAorCQkJICZncGlvMiAgMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJYWxhcm0tZ3Bpb3MgPSA8JmdwaW8xIDYgR1BJT19BQ1RJVkVfSElHSD47CisJCWdwaW8tZmFuLHNwZWVkLW1hcCA9IDwgICAgMCAwCisJCQkJICAgICAgIDEwMDAgMQorCQkJCSAgICAgICAxMTUwIDIKKwkJCQkgICAgICAgMTM1MCA0CisJCQkJICAgICAgIDE1MDAgMworCQkJCSAgICAgICAxNjUwIDUKKwkJCQkgICAgICAgMTc1MCA2CisJCQkJICAgICAgIDE5MDAgNyA+OworCX07CisKKwlncGlvLWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtMCA9IDwmZGlzazFfbGVkX3BpbgorCQkJICAgICAmZGlzazJfbGVkX3Bpbj47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJZGlzazEtbGVkLWFtYmVyIHsKKwkJCWxhYmVsID0gInN5bm9sb2d5OmFtYmVyOmRpc2sxIjsKKwkJCWdwaW9zID0gPCZncGlvMCAzMSBHUElPX0FDVElWRV9MT1c+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJfTsKKworCQlkaXNrMi1sZWQtYW1iZXIgeworCQkJbGFiZWwgPSAic3lub2xvZ3k6YW1iZXI6ZGlzazIiOworCQkJZ3Bpb3MgPSA8JmdwaW8xIDAgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAia2VlcCI7CisJCX07CisJfTsKKworCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtMCA9IDwmc2F0YTFfcHdyX3BpbiAmc2F0YTJfcHdyX3Bpbj47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJc2F0YTFfcmVndWxhdG9yOiBzYXRhMS1yZWd1bGF0b3IgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDE+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiU0FUQTEgUG93ZXIiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXN0YXJ0dXAtZGVsYXktdXMgPSA8MjAwMDAwMD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlncGlvID0gPCZncGlvMSA1IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCXNhdGEyX3JlZ3VsYXRvcjogc2F0YTItcmVndWxhdG9yIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwyPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIlNBVEEyIFBvd2VyIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlzdGFydHVwLWRlbGF5LXVzID0gPDQwMDAwMDA+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJZ3BpbyA9IDwmZ3BpbzEgMzAgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJfTsKK307CisKKyZwaW5jdHJsIHsKKwlkaXNrMV9sZWRfcGluOiBkaXNrMS1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMxIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJZGlzazJfbGVkX3BpbjogZGlzazItbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGExX3B3cl9waW46IHNhdGExLXB3ci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzciOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMl9wd3JfcGluOiBzYXRhMi1wd3ItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTFfcHJlc19waW46IHNhdGExLXByZXMtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYwIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTJfcHJlc19waW46IHNhdGEyLXByZXMtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc3lub19pZF9iaXQwX3Bpbjogc3luby1pZC1iaXQwLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXN5bm9faWRfYml0MV9waW46IHN5bm8taWQtYml0MS1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNTYiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzeW5vX2lkX2JpdDJfcGluOiBzeW5vLWlkLWJpdDItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDU3IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc3lub19pZF9iaXQzX3Bpbjogc3luby1pZC1iaXQzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1OCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWZhbl9jdHJsX2xvd19waW46IGZhbi1jdHJsLWxvdy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNjUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlmYW5fY3RybF9taWRfcGluOiBmYW4tY3RybC1taWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDY0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJZmFuX2N0cmxfaGlnaF9waW46IGZhbi1jdHJsLWhpZ2gtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDYzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncG8iOworCX07CisKKwlmYW5fYWxhcm1fcGluOiBmYW4tYWxhcm0tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDM4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAteHAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAteHAuZHRzaQppbmRleCA4MzI4NmVjLi4xYWY0Mjg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLXhwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC14cC5kdHNpCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAotCQkJc2VyaWFsQDEyMDAwIHsKKwkJCXVhcnQwOiBzZXJpYWxAMTIwMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CiAJCQkJcmVnID0gPDB4MTIwMDAgMHgxMDA+OwogCQkJCXJlZy1zaGlmdCA9IDwyPjsKQEAgLTE2MCw3ICsxNjAsOCBAQAogCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKLQkJCXNlcmlhbEAxMjEwMCB7CisKKwkJCXVhcnQxOiBzZXJpYWxAMTIxMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CiAJCQkJcmVnID0gPDB4MTIxMDAgMHgxMDA+OwogCQkJCXJlZy1zaGlmdCA9IDwyPjsKQEAgLTE3MCw2ICsxNzEsMTAgQEAKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAorCQkJcGluY3RybDogcGluLWN0cmxAMTgwMDAgeworCQkJCXJlZyA9IDwweDE4MDAwIDB4Mzg+OworCQkJfTsKKwogCQkJY29yZWRpdmNsazogY29yZWRpdi1jbG9ja0AxODc0MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zNzAtY29yZWRpdi1jbG9jayI7CiAJCQkJcmVnID0gPDB4MTg3NDAgMHhjPjsKQEAgLTE4MCw3ICsxODUsOCBAQAogCiAJCQltYnVzYzogbWJ1cy1jb250cm9sbGVyQDIwMDAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbWJ1cy1jb250cm9sbGVyIjsKLQkJCQlyZWcgPSA8MHgyMDAwMCAweDEwMD4sIDwweDIwMTgwIDB4MjA+OworCQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwPiwgPDB4MjAxODAgMHgyMD4sCisJCQkJICAgICAgPDB4MjAyNTAgMHg4PjsKIAkJCX07CiAKIAkJCW1waWM6IGludGVycnVwdC1jb250cm9sbGVyQDIwMDAwIHsKQEAgLTIzMiw3ICsyMzgsNyBAQAogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCi0JCQltZGlvIHsKKwkJCW1kaW86IG1kaW8gewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1tZGlvIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzAuZHRzaQppbmRleCA2YjNjMjNiLi5mZGIzYzEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzcwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3MC5kdHNpCkBAIC05NSw5ICs5NSwyNCBAQAogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhdXJvcmEtb3V0ZXItY2FjaGUiOwogCQkJCXJlZyA9IDwweDA4MDAwIDB4MTAwMD47CiAJCQkJY2FjaGUtaWQtcGFydCA9IDwweDEwMD47CisJCQkJY2FjaGUtdW5pZmllZDsKIAkJCQl3dC1vdmVycmlkZTsKIAkJCX07CiAKKwkJCS8qCisJCQkgKiBEZWZhdWx0IFNQSSBwaW5jdHJsIHNldHRpbmcsIGNhbiBiZSBvdmVyd3JpdHRlbiBvbgorCQkJICogYm9hcmQgbGV2ZWwgaWYgYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBpcyB1c2VkLgorCQkJICovCisJCQlzcGkwOiBzcGlAMTA2MDAgeworCQkJCXBpbmN0cmwtMCA9IDwmc3BpMF9waW5zMT47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCX07CisKKwkJCXNwaTE6IHNwaUAxMDY4MCB7CisJCQkJcGluY3RybC0wID0gPCZzcGkxX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQl9OworCiAJCQlpMmMwOiBpMmNAMTEwMDAgewogCQkJCXJlZyA9IDwweDExMDAwIDB4MjA+OwogCQkJfTsKQEAgLTEwNiw3MiArMTIxLDYgQEAKIAkJCQlyZWcgPSA8MHgxMTEwMCAweDIwPjsKIAkJCX07CiAKLQkJCXN5c3RlbS1jb250cm9sbGVyQDE4MjAwIHsKLQkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC14cC1zeXN0ZW0tY29udHJvbGxlciI7Ci0JCQkJcmVnID0gPDB4MTgyMDAgMHgxMDA+OwotCQkJfTsKLQotCQkJcGluY3RybCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12ODhmNjcxMC1waW5jdHJsIjsKLQkJCQlyZWcgPSA8MHgxODAwMCAweDM4PjsKLQotCQkJCXNkaW9fcGluczE6IHNkaW8tcGluczEgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwOSIsICAibXBwMTEiLCAibXBwMTIiLAotCQkJCQkJCSJtcHAxMyIsICJtcHAxNCIsICJtcHAxNSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKLQkJCQl9OwotCi0JCQkJc2Rpb19waW5zMjogc2Rpby1waW5zMiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NyIsICJtcHA0OCIsICJtcHA0OSIsCi0JCQkJCQkJIm1wcDUwIiwgIm1wcDUxIiwgIm1wcDUyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzZDAiOwotCQkJCX07Ci0KLQkJCQlzZGlvX3BpbnMzOiBzZGlvLXBpbnMzIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ4IiwgIm1wcDQ5IiwgIm1wcDUwIiwKLQkJCQkJCQkibXBwNTEiLCAibXBwNTIiLCAibXBwNTMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNkMCI7Ci0JCQkJfTsKLQotCQkJCWkyYzBfcGluczogaTJjMC1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDIiLCAibXBwMyI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiaTJjMCI7Ci0JCQkJfTsKLQotCQkJCWkyc19waW5zMTogaTJzLXBpbnMxIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDUiLCAibXBwNiIsICJtcHA3IiwKLQkJCQkJCSAgICAgICAibXBwOCIsICJtcHA5IiwgIm1wcDEwIiwKLQkJCQkJCSAgICAgICAibXBwMTIiLCAibXBwMTMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImF1ZGlvIjsKLQkJCQl9OwotCi0JCQkJaTJzX3BpbnMyOiBpMnMtcGluczIgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDkiLCAibXBwNDciLCAibXBwNTAiLAotCQkJCQkJICAgICAgICJtcHA1OSIsICJtcHA1NyIsICJtcHA2MSIsCi0JCQkJCQkgICAgICAgIm1wcDYyIiwgIm1wcDYwIiwgIm1wcDU4IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJhdWRpbyI7Ci0JCQkJfTsKLQotCQkJCW1kaW9fcGluczogbWRpby1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDE3IiwgIm1wcDE4IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZSI7Ci0JCQkJfTsKLQotCQkJCWdlMF9yZ21paV9waW5zOiBnZTAtcmdtaWktcGlucyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDYiLCAibXBwNyIsICJtcHA4IiwKLQkJCQkJCSAgICAgICAibXBwOSIsICJtcHAxMCIsICJtcHAxMSIsICJtcHAxMiIsCi0JCQkJCQkgICAgICAgIm1wcDEzIiwgIm1wcDE0IiwgIm1wcDE1IiwgIm1wcDE2IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTAiOwotCQkJCX07Ci0KLQkJCQlnZTFfcmdtaWlfcGluczogZ2UxLXJnbWlpLXBpbnMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTkiLCAibXBwMjAiLCAibXBwMjEiLCAibXBwMjIiLAotCQkJCQkJICAgICAgICJtcHAyMyIsICJtcHAyNCIsICJtcHAyNSIsICJtcHAyNiIsCi0JCQkJCQkgICAgICAgIm1wcDI3IiwgIm1wcDI4IiwgIm1wcDI5IiwgIm1wcDMwIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTEiOwotCQkJCX07Ci0JCQl9OwotCiAJCQlncGlvMDogZ3Bpb0AxODEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWdwaW8iOwogCQkJCXJlZyA9IDwweDE4MTAwIDB4NDA+OwpAQCAtMjA1LDYgKzE1NCwyNiBAQAogCQkJCWludGVycnVwdHMgPSA8OTE+OwogCQkJfTsKIAorCQkJLyoKKwkJCSAqIERlZmF1bHQgVUFSVCBwaW5jdHJsIHNldHRpbmcgd2l0aG91dCBSVFMvQ1RTLCBjYW4KKwkJCSAqIGJlIG92ZXJ3cml0dGVuIG9uIGJvYXJkIGxldmVsIGlmIGEgZGlmZmVyZW50CisJCQkgKiBjb25maWd1cmF0aW9uIGlzIHVzZWQuCisJCQkgKi8KKwkJCXVhcnQwOiBzZXJpYWxAMTIwMDAgeworCQkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCX07CisKKwkJCXVhcnQxOiBzZXJpYWxAMTIxMDAgeworCQkJCXBpbmN0cmwtMCA9IDwmdWFydDFfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCX07CisKKwkJCXN5c3RlbS1jb250cm9sbGVyQDE4MjAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLTM3MC14cC1zeXN0ZW0tY29udHJvbGxlciI7CisJCQkJcmVnID0gPDB4MTgyMDAgMHgxMDA+OworCQkJfTsKKwogCQkJZ2F0ZWNsazogY2xvY2stZ2F0aW5nLWNvbnRyb2xAMTgyMjAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwLWdhdGluZy1jbG9jayI7CiAJCQkJcmVnID0gPDB4MTgyMjAgMHg0PjsKQEAgLTI0OSw2ICsyMTgsNyBAQAogCQkJfTsKIAogCQkJYXVkaW9fY29udHJvbGxlcjogYXVkaW8tY29udHJvbGxlckAzMDAwMCB7CisJCQkJI3NvdW5kLWRhaS1jZWxscyA9IDwxPjsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhMzcwLWF1ZGlvIjsKIAkJCQlyZWcgPSA8MHgzMDAwMCAweDQwMDA+OwogCQkJCWludGVycnVwdHMgPSA8OTM+OwpAQCAtMzA1LDMgKzI3NSw5MSBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12ODhmNjcxMC1waW5jdHJsIjsKKworCXNwaTBfcGluczE6IHNwaTAtcGluczEgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzMiLCAibXBwMzQiLAorCQkJICAgICAgICJtcHAzNSIsICJtcHAzNiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic3BpMCI7CisJfTsKKworCXNwaTBfcGluczI6IHNwaTBfcGluczIgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzIiLCAibXBwNjMiLAorCQkJICAgICAgICJtcHA2NCIsICJtcHA2NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic3BpMCI7CisJfTsKKworCXNwaTFfcGluczogc3BpMS1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ5IiwgIm1wcDUwIiwKKwkJCSAgICAgICAibXBwNTEiLCAibXBwNTIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNwaTEiOworCX07CisKKwl1YXJ0MF9waW5zOiB1YXJ0MC1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDAiLCAibXBwMSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDAiOworCX07CisKKwl1YXJ0MV9waW5zOiB1YXJ0MS1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQxIiwgIm1wcDQyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJ1YXJ0MSI7CisJfTsKKworCXNkaW9fcGluczE6IHNkaW8tcGluczEgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwOSIsICAibXBwMTEiLCAibXBwMTIiLAorCQkJCSJtcHAxMyIsICJtcHAxNCIsICJtcHAxNSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKKwl9OworCisJc2Rpb19waW5zMjogc2Rpby1waW5zMiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0NyIsICJtcHA0OCIsICJtcHA0OSIsCisJCQkJIm1wcDUwIiwgIm1wcDUxIiwgIm1wcDUyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJzZDAiOworCX07CisKKwlzZGlvX3BpbnMzOiBzZGlvLXBpbnMzIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ4IiwgIm1wcDQ5IiwgIm1wcDUwIiwKKwkJCQkibXBwNTEiLCAibXBwNTIiLCAibXBwNTMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNkMCI7CisJfTsKKworCWkyYzBfcGluczogaTJjMC1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDIiLCAibXBwMyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiaTJjMCI7CisJfTsKKworCWkyc19waW5zMTogaTJzLXBpbnMxIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDUiLCAibXBwNiIsICJtcHA3IiwKKwkJCSAgICAgICAibXBwOCIsICJtcHA5IiwgIm1wcDEwIiwKKwkJCSAgICAgICAibXBwMTIiLCAibXBwMTMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImF1ZGlvIjsKKwl9OworCisJaTJzX3BpbnMyOiBpMnMtcGluczIgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDkiLCAibXBwNDciLCAibXBwNTAiLAorCQkJICAgICAgICJtcHA1OSIsICJtcHA1NyIsICJtcHA2MSIsCisJCQkgICAgICAgIm1wcDYyIiwgIm1wcDYwIiwgIm1wcDU4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJhdWRpbyI7CisJfTsKKworCW1kaW9fcGluczogbWRpby1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDE3IiwgIm1wcDE4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZSI7CisJfTsKKworCWdlMF9yZ21paV9waW5zOiBnZTAtcmdtaWktcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA1IiwgIm1wcDYiLCAibXBwNyIsICJtcHA4IiwKKwkJCSAgICAgICAibXBwOSIsICJtcHAxMCIsICJtcHAxMSIsICJtcHAxMiIsCisJCQkgICAgICAgIm1wcDEzIiwgIm1wcDE0IiwgIm1wcDE1IiwgIm1wcDE2IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTAiOworCX07CisKKwlnZTFfcmdtaWlfcGluczogZ2UxLXJnbWlpLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTkiLCAibXBwMjAiLCAibXBwMjEiLCAibXBwMjIiLAorCQkJICAgICAgICJtcHAyMyIsICJtcHAyNCIsICJtcHAyNSIsICJtcHAyNiIsCisJCQkgICAgICAgIm1wcDI3IiwgIm1wcDI4IiwgIm1wcDI5IiwgIm1wcDMwIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTEiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3NS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM3NS5kdHNpCmluZGV4IGRlNjU3MTQuLjk3MjFlNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zNzUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzc1LmR0c2kKQEAgLTM2LDYgKzM2LDEyIEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwMD47CiAJCX07CisJCS8qIDI1IE1IeiByZWZlcmVuY2UgY3J5c3RhbCAqLworCQlyZWZjbGs6IG9zY2lsbGF0b3IgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDA+OworCQl9OwogCX07CiAKIAljcHVzIHsKQEAgLTM2NiwxMyArMzcyLDE1IEBACiAJCQkJCQkgICAgICA8JmdpYyAgR0lDX1NQSSAxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKIAkJCQkJCSAgICAgIDwmbXBpYyA1PiwKIAkJCQkJCSAgICAgIDwmbXBpYyA2PjsKLQkJCQljbG9ja3MgPSA8JmNvcmVjbGsgMD47CisJCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+LCA8JnJlZmNsaz47CisJCQkJY2xvY2stbmFtZXMgPSAibmJjbGsiLCAiZml4ZWQiOwogCQkJfTsKIAogCQkJd2F0Y2hkb2dAMjAzMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzc1LXdkdCI7CiAJCQkJcmVnID0gPDB4MjAzMDAgMHgzND4sIDwweDIwNzA0IDB4ND4sIDwweDE4MjU0IDB4ND47Ci0JCQkJY2xvY2tzID0gPCZjb3JlY2xrIDA+OworCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPiwgPCZyZWZjbGs+OworCQkJCWNsb2NrLW5hbWVzID0gIm5iY2xrIiwgImZpeGVkIjsKIAkJCX07CiAKIAkJCWNwdXJzdEAyMDgwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzg1LWRiLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODUtZGIuZHRzCmluZGV4IDFhZjg4NmYuLjJhYWE5ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODUtZGIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zODUtZGIuZHRzCkBAIC0xMTYsMTEgKzExNiwxMSBAQAogCQkJfTsKIAogCQkJc2RoY2lAZDgwMDAgewotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwogCQkJCWJyb2tlbi1jZDsKIAkJCQl3cC1pbnZlcnRlZDsKIAkJCQlidXMtd2lkdGggPSA8OD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJCW5vLTEtOC12OwogCQkJfTsKIAogCQkJdXNiM0BmMDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzh4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzh4LmR0c2kKaW5kZXggMjQyZDBlYy4uNzQzOTFkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zOHguZHRzaQpAQCAtMjUsOSArMjUsOSBAQAogCWFsaWFzZXMgewogCQlncGlvMCA9ICZncGlvMDsKIAkJZ3BpbzEgPSAmZ3BpbzE7Ci0JCWV0aDAgPSAmZXRoMDsKLQkJZXRoMSA9ICZldGgxOwotCQlldGgyID0gJmV0aDI7CisJCWV0aGVybmV0MCA9ICZldGgwOworCQlldGhlcm5ldDEgPSAmZXRoMTsKKwkJZXRoZXJuZXQyID0gJmV0aDI7CiAJfTsKIAogCXNvYyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtYXhwd2lmaWFwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1heHB3aWZpYXAuZHRzCmluZGV4IGE1NWE5N2EuLmNhMDIwMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1heHB3aWZpYXAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1heHB3aWZpYXAuZHRzCkBAIC02MCw0MCArNjAsNiBAQAogCQl9OwogCiAJCWludGVybmFsLXJlZ3MgewotCQkJcGluY3RybCB7Ci0JCQkJcGluY3RybC0wID0gPCZwbXhfcGh5X2ludD47Ci0JCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQotCQkJCXBteF9nZTA6IHBteC1nZTAgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMCIsICJtcHAxIiwgIm1wcDIiLCAibXBwMyIsCi0JCQkJCQkgICAgICAgIm1wcDQiLCAibXBwNSIsICJtcHA2IiwgIm1wcDciLAotCQkJCQkJICAgICAgICJtcHA4IiwgIm1wcDkiLCAibXBwMTAiLCAibXBwMTEiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdlMCI7Ci0JCQkJfTsKLQotCQkJCXBteF9nZTE6IHBteC1nZTEgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMTIiLCAibXBwMTMiLCAibXBwMTQiLCAibXBwMTUiLAotCQkJCQkJICAgICAgICJtcHAxNiIsICJtcHAxNyIsICJtcHAxOCIsICJtcHAxOSIsCi0JCQkJCQkgICAgICAgIm1wcDIwIiwgIm1wcDIxIiwgIm1wcDIyIiwgIm1wcDIzIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJnZTEiOwotCQkJCX07Ci0KLQkJCQlwbXhfa2V5czogcG14LWtleXMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzMiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlwbXhfc3BpOiBwbXgtc3BpIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDM2IiwgIm1wcDM3IiwgIm1wcDM4IiwgIm1wcDM5IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzcGkiOwotCQkJCX07Ci0KLQkJCQlwbXhfcGh5X2ludDogcG14LXBoeS1pbnQgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzIiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0JCQl9OwotCiAJCQlzZXJpYWxAMTIwMDAgewogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CkBAIC0xMTgsMTQgKzg0LDE0IEBACiAJCQl9OwogCiAJCQlldGhlcm5ldEA3MDAwMCB7Ci0JCQkJcGluY3RybC0wID0gPCZwbXhfZ2UwPjsKKwkJCQlwaW5jdHJsLTAgPSA8JmdlMF9yZ21paV9waW5zPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCQlwaHkgPSA8JnBoeTA+OwogCQkJCXBoeS1tb2RlID0gInJnbWlpLWlkIjsKIAkJCX07CiAJCQlldGhlcm5ldEA3NDAwMCB7Ci0JCQkJcGluY3RybC0wID0gPCZwbXhfZ2UxPjsKKwkJCQlwaW5jdHJsLTAgPSA8JmdlMV9yZ21paV9waW5zPjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCQlwaHkgPSA8JnBoeTE+OwpAQCAtMTM0LDggKzEwMCw2IEBACiAKIAkJCXNwaTA6IHNwaUAxMDYwMCB7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwotCQkJCXBpbmN0cmwtMCA9IDwmcG14X3NwaT47Ci0JCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCQkJCXNwaS1mbGFzaEAwIHsKIAkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0xNTIsNyArMTE2LDcgQEAKIAkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCXBpbmN0cmwtMCA9IDwmcG14X2tleXM+OworCQlwaW5jdHJsLTAgPSA8JmtleXNfcGluPjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAogCQlidXR0b25AMSB7CkBAIC0xNjIsMyArMTI2LDE4IEBACiAJCX07CiAJfTsKIH07CisKKyZwaW5jdHJsIHsKKwlwaW5jdHJsLTAgPSA8JnBoeV9pbnRfcGluPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJa2V5c19waW46IGtleXMtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMzIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcGh5X2ludF9waW46IHBoeS1pbnQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1ncC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtZ3AuZHRzCmluZGV4IDA0NzhjNTUuLmVhODY3MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1ncC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWdwLmR0cwpAQCAtMjMsNiArMjMsNyBAQAogICovCiAKIC9kdHMtdjEvOworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgogI2luY2x1ZGUgImFybWFkYS14cC1tdjc4NDYwLmR0c2kiCiAKIC8gewpAQCAtNDgsNiArNDksMTQgQEAKIAkJICAgICAgPDB4MDAwMDAwMDEgMHgwMDAwMDAwMCAweDAwMDAwMDAxIDB4MDAwMDAwMDA+OwogCX07CiAKKwljcHVzIHsKKwkJcG1fcGljIHsKKwkJCWN0cmwtZ3Bpb3MgPSA8JmdwaW8wIDE2IEdQSU9fQUNUSVZFX0xPVz4sCisJCQkJICAgICA8JmdwaW8wIDE3IEdQSU9fQUNUSVZFX0xPVz4sCisJCQkJICAgICA8JmdwaW8wIDE4IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKKwogCXNvYyB7CiAJCXJhbmdlcyA9IDxNQlVTX0lEKDB4ZjAsIDB4MDEpIDAgMCAweGYxMDAwMDAwIDB4MTAwMDAwCiAJCQkgIE1CVVNfSUQoMHgwMSwgMHgxZCkgMCAwIDB4ZmZmMDAwMDAgMHgxMDAwMDAKQEAgLTExNSw3ICsxMjQsMTUgQEAKIAkJCXNlcmlhbEAxMjMwMCB7CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKLQorCQkJcGluY3RybCB7CisJCQkJcGluY3RybC0wID0gPCZwaWNfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQlwaWNfcGluczogcGljLXBpbnMtMCB7CisJCQkJCW1hcnZlbGwscGlucyA9ICJtcHAxNiIsICJtcHAxNyIsCisJCQkJCQkgICAgICAgIm1wcDE4IjsKKwkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCQl9OworCQkJfTsKIAkJCXNhdGFAYTAwMDAgewogCQkJCW5yLXBvcnRzID0gPDI+OwogCQkJCXN0YXR1cyA9ICJva2F5IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1sZW5vdm8taXg0LTMwMGQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWxlbm92by1peDQtMzAwZC5kdHMKaW5kZXggNDY5Y2Y3MS4uYTJlZjkzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWxlbm92by1peDQtMzAwZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLWxlbm92by1peDQtMzAwZC5kdHMKQEAgLTIyLDcgKzIyLDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIGVhcmx5cHJpbnRrIjsKLQkJc3Rkb3V0LXBhdGggPSAiL3NvYy9pbnRlcm5hbC1yZWdzL3NlcmlhbEAxMjAwMCI7CisJCXN0ZG91dC1wYXRoID0gJnVhcnQwOwogCX07CiAKIAltZW1vcnkgewpAQCAtNTEsMzcgKzUxLDYgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKLQkJCXBpbmN0cmwgewotCQkJCXBvd2Vyb2ZmX3BpbjogcG93ZXJvZmYtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI0IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJcG93ZXJfYnV0dG9uX3BpbjogcG93ZXItYnV0dG9uLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NCI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXJlc2V0X2J1dHRvbl9waW46IHJlc2V0LWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0JCQkJc2VsZWN0X2J1dHRvbl9waW46IHNlbGVjdC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQxIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2Nyb2xsX2J1dHRvbl9waW46IHNjcm9sbC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJaGRkX2xlZF9waW46IGhkZC1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI2IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJc2VyaWFsQDEyMDAwIHsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQl9OwpAQCAtOTcsMTIgKzY2LDE2IEBACiAJCQl9OwogCiAJCQlldGhlcm5ldEA3MDAwMCB7CisJCQkJcGluY3RybC0wID0gPCZnZTBfcmdtaWlfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQkJcGh5ID0gPCZwaHkwPjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paS1pZCI7CiAJCQl9OwogCiAJCQlldGhlcm5ldEA3NDAwMCB7CisJCQkJcGluY3RybC0wID0gPCZnZTFfcmdtaWlfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlzdGF0dXMgPSAib2theSI7CiAJCQkJcGh5ID0gPCZwaHkxPjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paS1pZCI7CkBAIC0xMjUsNiArOTgsMTEgQEAKIAkJCQkJcmVnID0gPDB4MmU+OwogCQkJCX07CiAKKwkJCQllZXByb21ANTAgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLDI0YzY0IjsKKwkJCQkJcmVnID0gPDB4NTA+OworCQkJCX07CisKIAkJCQlwY2Y4NTYzQDUxIHsKIAkJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CiAJCQkJCXJlZyA9IDwweDUxPjsKQEAgLTIyNiw3ICsyMDQsNyBAQAogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MD47Ci0JCQlyZWdpc3RlcnMtbnVtYmVyID0gPDI+OworCQkJcmVnaXN0ZXJzLW51bWJlciA9IDwxPjsKIAkJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJCX07CiAJfTsKQEAgLTI4MiwzICsyNjAsMzQgQEAKIAkJZ3Bpb3MgPSA8JmdwaW8wIDI0IEdQSU9fQUNUSVZFX0hJR0g+OwogCX07CiB9OworCismcGluY3RybCB7CisJcG93ZXJvZmZfcGluOiBwb3dlcm9mZi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlwb3dlcl9idXR0b25fcGluOiBwb3dlci1idXR0b24tcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ0IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcmVzZXRfYnV0dG9uX3BpbjogcmVzZXQtYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0NSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKwlzZWxlY3RfYnV0dG9uX3Bpbjogc2VsZWN0LWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDEiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzY3JvbGxfYnV0dG9uX3Bpbjogc2Nyb2xsLWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwloZGRfbGVkX3BpbjogaGRkLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjYiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyMzAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjMwLmR0c2kKaW5kZXggMjU5MmUxYy4uMjgxY2NkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyMzAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODIzMC5kdHNpCkBAIC0xNjcsMTcgKzE2Nyw2IEBACiAJCX07CiAKIAkJaW50ZXJuYWwtcmVncyB7Ci0JCQlwaW5jdHJsIHsKLQkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY3ODIzMC1waW5jdHJsIjsKLQkJCQlyZWcgPSA8MHgxODAwMCAweDM4PjsKLQotCQkJCXNkaW9fcGluczogc2Rpby1waW5zIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMwIiwgIm1wcDMxIiwgIm1wcDMyIiwKLQkJCQkJCSAgICAgICAibXBwMzMiLCAibXBwMzQiLCAibXBwMzUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gInNkMCI7Ci0JCQkJfTsKLQkJCX07Ci0KIAkJCWdwaW8wOiBncGlvQDE4MTAwIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsb3Jpb24tZ3BpbyI7CiAJCQkJcmVnID0gPDB4MTgxMDAgMHg0MD47CkBAIC0yMDIsMyArMTkxLDcgQEAKIAkJfTsKIAl9OwogfTsKKworJnBpbmN0cmwgeworCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjc4MjMwLXBpbmN0cmwiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjYwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODI2MC5kdHNpCmluZGV4IDQ4MGUyMzcuLmQ3YThkMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4MjYwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12NzgyNjAuZHRzaQpAQCAtMjUxLDE3ICsyNTEsNiBAQAogCQl9OwogCiAJCWludGVybmFsLXJlZ3MgewotCQkJcGluY3RybCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NzgyNjAtcGluY3RybCI7Ci0JCQkJcmVnID0gPDB4MTgwMDAgMHgzOD47Ci0KLQkJCQlzZGlvX3BpbnM6IHNkaW8tcGlucyB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzMCIsICJtcHAzMSIsICJtcHAzMiIsCi0JCQkJCQkgICAgICAgIm1wcDMzIiwgIm1wcDM0IiwgIm1wcDM1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJzZDAiOwotCQkJCX07Ci0JCQl9OwotCiAJCQlncGlvMDogZ3Bpb0AxODEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWdwaW8iOwogCQkJCXJlZyA9IDwweDE4MTAwIDB4NDA+OwpAQCAtMzA1LDMgKzI5NCw3IEBACiAJCX07CiAJfTsKIH07CisKKyZwaW5jdHJsIHsKKwljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY3ODI2MC1waW5jdHJsIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODQ2MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW12Nzg0NjAuZHRzaQppbmRleCAyYzdiMWZlLi45YzQwYzEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbXY3ODQ2MC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1tdjc4NDYwLmR0c2kKQEAgLTI4OSwxNyArMjg5LDYgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKLQkJCXBpbmN0cmwgewotCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjc4NDYwLXBpbmN0cmwiOwotCQkJCXJlZyA9IDwweDE4MDAwIDB4Mzg+OwotCi0JCQkJc2Rpb19waW5zOiBzZGlvLXBpbnMgewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzAiLCAibXBwMzEiLCAibXBwMzIiLAotCQkJCQkJICAgICAgICJtcHAzMyIsICJtcHAzNCIsICJtcHAzNSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKLQkJCQl9OwotCQkJfTsKLQogCQkJZ3BpbzA6IGdwaW9AMTgxMDAgewogCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxvcmlvbi1ncGlvIjsKIAkJCQlyZWcgPSA8MHgxODEwMCAweDQwPjsKQEAgLTM0MywzICszMzIsNyBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12Nzg0NjAtcGluY3RybCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW5ldGdlYXItcm4yMTIwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1uZXRnZWFyLXJuMjEyMC5kdHMKaW5kZXggN2Q4ZjMyOC4uZDgxNDMwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW5ldGdlYXItcm4yMTIwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtbmV0Z2Vhci1ybjIxMjAuZHRzCkBAIC01NSw4NiArNTUsMTAgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKLQkJCXBpbmN0cmwgewotCQkJCXBvd2Vyb2ZmOiBwb3dlcm9mZiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0MiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXBvd2VyX2J1dHRvbl9waW46IHBvd2VyLWJ1dHRvbi1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjciOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlyZXNldF9idXR0b25fcGluOiByZXNldC1idXR0b24tcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQxIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTFfbGVkX3Bpbjogc2F0YTEtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAzMSI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGEyX2xlZF9waW46IHNhdGEyLWxlZC1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDAiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlzYXRhM19sZWRfcGluOiBzYXRhMy1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ0IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTRfbGVkX3Bpbjogc2F0YTQtbGVkLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NyI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGExX3Bvd2VyX3Bpbjogc2F0YTEtcG93ZXItcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI0IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTJfcG93ZXJfcGluOiBzYXRhMi1wb3dlci1waW4gewotCQkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjUiOwotCQkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOwotCQkJCX07Ci0KLQkJCQlzYXRhM19wb3dlcl9waW46IHNhdGEzLXBvd2VyLXBpbiB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyNiI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQotCQkJCXNhdGE0X3Bvd2VyX3Bpbjogc2F0YTQtcG93ZXItcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDI4IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTFfcHJlc19waW46IHNhdGExLXByZXMtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMyIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTJfcHJlc19waW46IHNhdGEyLXByZXMtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDMzIjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTNfcHJlc19waW46IHNhdGEzLXByZXMtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDM0IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJc2F0YTRfcHJlc19waW46IHNhdGE0LXByZXMtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDM1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OwotCi0JCQkJZXJyX2xlZF9waW46IGVyci1sZWQtcGluIHsKLQkJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQ1IjsKLQkJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKLQkJCQl9OworCQkJLyogVHdvIHJlYXIgZVNBVEEgcG9ydHMgKi8KKwkJCXNhdGFAYTAwMDAgeworCQkJCW5yLXBvcnRzID0gPDI+OworCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07CiAKIAkJCXNlcmlhbEAxMjAwMCB7CkBAIC0zMjgsMyArMjUyLDg1IEBACiAJCWdwaW9zID0gPCZncGlvMSAxMCBHUElPX0FDVElWRV9MT1c+OwogCX07CiB9OworCismcGluY3RybCB7CisJcG93ZXJvZmY6IHBvd2Vyb2ZmIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQyIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJcG93ZXJfYnV0dG9uX3BpbjogcG93ZXItYnV0dG9uLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAyNyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXJlc2V0X2J1dHRvbl9waW46IHJlc2V0LWJ1dHRvbi1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDEiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMV9sZWRfcGluOiBzYXRhMS1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDMxIjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTJfbGVkX3Bpbjogc2F0YTItbGVkLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEzX2xlZF9waW46IHNhdGEzLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhNF9sZWRfcGluOiBzYXRhNC1sZWQtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ3IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTFfcG93ZXJfcGluOiBzYXRhMS1wb3dlci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMl9wb3dlcl9waW46IHNhdGEyLXBvd2VyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAyNSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEzX3Bvd2VyX3Bpbjogc2F0YTMtcG93ZXItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDI2IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTRfcG93ZXJfcGluOiBzYXRhNC1wb3dlci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjgiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMV9wcmVzX3Bpbjogc2F0YTEtcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzIiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhMl9wcmVzX3Bpbjogc2F0YTItcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhM19wcmVzX3Bpbjogc2F0YTMtcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhNF9wcmVzX3Bpbjogc2F0YTQtcHJlcy1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwllcnJfbGVkX3BpbjogZXJyLWxlZC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDUiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW9wZW5ibG9ja3MtYXgzLTQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLW9wZW5ibG9ja3MtYXgzLTQuZHRzCmluZGV4IDRlNWE1OWUuLjZmNmIwOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1vcGVuYmxvY2tzLWF4My00LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAtb3BlbmJsb2Nrcy1heDMtNC5kdHMKQEAgLTc3LDEyICs3Nyw3IEBACiAJCQlzZXJpYWxAMTIxMDAgewogCQkJCXN0YXR1cyA9ICJva2F5IjsKIAkJCX07Ci0JCQlwaW5jdHJsIHsKLQkJCQlsZWRfcGluczogbGVkLXBpbnMtMCB7Ci0JCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0OSIsICJtcHA1MSIsICJtcHA1MyI7Ci0JCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7Ci0JCQkJfTsKLQkJCX07CisKIAkJCWxlZHMgewogCQkJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMTg3LDMgKzE4MiwxMCBAQAogCQl9OwogCX07CiB9OworCismcGluY3RybCB7CisJbGVkX3BpbnM6IGxlZC1waW5zLTAgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDkiLCAibXBwNTEiLCAibXBwNTMiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLXhwLXN5bm9sb2d5LWRzNDE0LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1zeW5vbG9neS1kczQxNC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5ZmRiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC1zeW5vbG9neS1kczQxNC5kdHMKQEAgLTAsMCArMSwzMzAgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBmaWxlIGZvciBTeW5vbG9neSBEUzQxNAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgQXJuYXVkIEVCQUxBUkQgPGFybm9AbmF0aXNiYWQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTm90ZTogdGhpcyBEZXZpY2UgVHJlZSBhc3N1bWVzIHRoYXQgdGhlIGJvb3Rsb2FkZXIgaGFzIHJlbWFwcGVkIHRoZQorICogaW50ZXJuYWwgcmVnaXN0ZXJzIHRvIDB4ZjEwMDAwMDAgKGluc3RlYWQgb2YgdGhlIG9sZCAweGQwMDAwMDAwKS4KKyAqIFRoZSAweGYxMDAwMDAwIGlzIHRoZSBkZWZhdWx0IHVzZWQgYnkgdGhlIHJlY2VudCwgRFQtY2FwYWJsZSwgVS1Cb290CisgKiBib290bG9hZGVycyBwcm92aWRlZCBieSBNYXJ2ZWxsLiBJdCBpcyB1c2VkIGluIHJlY2VudCB2ZXJzaW9ucyBvZgorICogRFNNIHNvZnR3YXJlIHByb3ZpZGVkIGJ5IFN5bm9sb2d5LiBOb25ldGhlbGVzcywgc29tZSBlYXJsaWVyIGJvYXJkcworICogd2VyZSBkZWxpdmVyZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIHUtYm9vdCB0aGF0IGxlZnQgaW50ZXJuYWwKKyAqIHJlZ2lzdGVycyBtYXBwZWQgYXQgMHhkMDAwMDAwMC4gSWYgeW91IGhhdmUgc3VjaCBhIGRldmljZSB5b3Ugd2lsbAorICogbm90IGJlIGFibGUgdG8gZGlyZWN0bHkgYm9vdCBhIGtlcm5lbCBiYXNlZCBvbiB0aGlzIERldmljZSBUcmVlLiBJbgorICogdGhhdCBjYXNlLCB0aGUgcHJlZmVycmVkIHNvbHV0aW9uIGlzIHRvIHVwZGF0ZSB5b3VyIGJvb3Rsb2FkZXIgKGUuZy4KKyAqIGJ5IHVwZ3JhZGluZyB0byBsYXRlc3QgdmVyc2lvbiBvZiBEU00sIG9yIGJ1aWxkaW5nIGEgbmV3IG9uZSBhbmQKKyAqIGluc3RhbGxpbmcgaXQgZnJvbSB1LWJvb3QgcHJvbXB0KSBvciBhZGp1c3QgdGhlIERldml2ZSBUcmVlCisgKiAocy8weGYxMDAwMDAwLzB4ZDAwMDAwMDAvIGluICdyYW5nZXMnIGJlbG93KS4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSAiYXJtYWRhLXhwLW12NzgyMzAuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiU3lub2xvZ3kgRFM0MTQiOworCWNvbXBhdGlibGUgPSAic3lub2xvZ3ksZHM0MTQiLCAibWFydmVsbCxhcm1hZGF4cC1tdjc4MjMwIiwKKwkJICAgICAibWFydmVsbCxhcm1hZGF4cCIsICJtYXJ2ZWxsLGFybWFkYS0zNzAteHAiOworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDAgZWFybHlwcmludGsiOworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MDsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDAgMHgwMDAwMDAwMCAwIDB4NDAwMDAwMDA+OyAvKiAxR0IgKi8KKwl9OworCisJc29jIHsKKwkJcmFuZ2VzID0gPE1CVVNfSUQoMHhmMCwgMHgwMSkgMCAwIDB4ZjEwMDAwMDAgMHgxMDAwMDAKKwkJCSAgTUJVU19JRCgweDAxLCAweDFkKSAwIDAgMHhmZmYwMDAwMCAweDEwMDAwMD47CisKKwkJcGNpZS1jb250cm9sbGVyIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJLyoKKwkJCSAqIENvbm5lY3RlZCB0byBNYXJ2ZWxsIDg4U1g3MDQyIFNBVEEtSUkgY29udHJvbGxlcgorCQkJICogaGFuZGxpbmcgdGhlIGZvdXIgZGlza3MuCisJCQkgKi8KKwkJCXBjaWVAMSwwIHsKKwkJCQkvKiBQb3J0IDAsIExhbmUgMCAqLworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisKKwkJCS8qCisJCQkgKiBDb25uZWN0ZWQgdG8gRXRyb25UZWNoIEVKMTY4QSBYSENJIGNvbnRyb2xsZXIKKwkJCSAqIHByb3ZpZGluZyB0aGUgdHdvIHJlYXIgVVNCIDMuMCBwb3J0cy4KKwkJCSAqLworCQkJcGNpZUA1LDAgeworCQkJCS8qIFBvcnQgMSwgTGFuZSAwICovCisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKwkJfTsKKworCQlpbnRlcm5hbC1yZWdzIHsKKworCQkJLyogUlRDIGlzIHByb3ZpZGVkIGJ5IFNlaWtvIFMtMzUzOTBBIGJlbG93ICovCisJCQlydGNAMTAzMDAgeworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlzcGkwOiBzcGlAMTA2MDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJCXNwaS1mbGFzaEAwIHsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCQljb21wYXRpYmxlID0gIm1pY3JvbixuMjVxMDY0IjsKKwkJCQkJcmVnID0gPDA+OyAvKiBDaGlwIHNlbGVjdCAwICovCisJCQkJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDIwMDAwMDAwPjsKKworCQkJCQkvKgorCQkJCQkgKiBXYXJuaW5nIQorCQkJCQkgKgorCQkJCQkgKiBTeW5vbG9neSB1LWJvb3QgdXNlcyBpdHMgY29tcGlsZWQtaW4gZW52aXJvbm1lbnQKKwkJCQkJICogYW5kIGl0IHNlZW1zIFN5bm9sb2d5IGRpZCBub3QgY2FyZSB0byBjaGFuZ2UgdS1ib290CisJCQkJCSAqIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiBvcmRlciB0byBhbGxvdyBzYXZpbmcgYQorCQkJCQkgKiBtb2RpZmllZCBlbnZpcm9ubWVudCBhdCBhIHNlbnNpYmxlIGxvY2F0aW9uLiBTbywKKwkJCQkJICogaWYgeW91IGRvIGEgJ3NhdmVlbnYnIHVuZGVyIHUtYm9vdCwgeW91ciBtb2RpZmllZAorCQkJCQkgKiBlbnZpcm9ubWVudCB3aWxsIGJlIHNhdmVkIGF0IDFNQiBhZnRlciB0aGUgc3RhcnQKKwkJCQkJICogb2YgdGhlIGZsYXNoLCBpLmUuIGluIHRoZSBtaWRkbGUgb2YgdGhlIHVJbWFnZS4KKwkJCQkJICogRm9yIHRoYXQgcmVhc29uLCBpdCBpcyBzdHJvbmdseSBhZHZpc2VkIG5vdCB0bworCQkJCQkgKiBjaGFuZ2UgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQsIHVubGVzcyB5b3Uga25vdworCQkJCQkgKiB3aGF0IHlvdSBhcmUgZG9pbmcuCisJCQkJCSAqLworCQkJCQlwYXJ0aXRpb25AMDAwMDAwMDAgeyAvKiB1LWJvb3QgKi8KKwkJCQkJCWxhYmVsID0gIlJlZEJvb3QiOworCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDBkMDAwMD47IC8qIDgzMktCICovCisJCQkJCX07CisKKwkJCQkJcGFydGl0aW9uQDAwMGMwMDAwIHsgLyogdUltYWdlICovCisJCQkJCQlsYWJlbCA9ICJ6SW1hZ2UiOworCQkJCQkJcmVnID0gPDB4MDAwZDAwMDAgMHgwMDJkMDAwMD47IC8qIDI4ODBLQiAqLworCQkJCQl9OworCisJCQkJCXBhcnRpdGlvbkAwMDNhMDAwMCB7IC8qIHVJbml0cmFtZnMgKi8KKwkJCQkJCWxhYmVsID0gInJkLmd6IjsKKwkJCQkJCXJlZyA9IDwweDAwM2EwMDAwIDB4MDA0MzAwMDA+OyAvKiA0MjUwS0IgKi8KKwkJCQkJfTsKKworCQkJCQlwYXJ0aXRpb25AMDA3ZDAwMDAgeyAvKiBNQUMgYWRkcmVzcyBhbmQgc2VyaWFsIG51bWJlciAqLworCQkJCQkJbGFiZWwgPSAidmVuZG9yIjsKKwkJCQkJCXJlZyA9IDwweDAwN2QwMDAwIDB4MDAwMTAwMDA+OyAvKiA2NEtCICovCisJCQkJCX07CisKKwkJCQkJcGFydGl0aW9uQDAwN2UwMDAwIHsKKwkJCQkJCWxhYmVsID0gIlJlZEJvb3QgY29uZmlnIjsKKwkJCQkJCXJlZyA9IDwweDAwN2UwMDAwIDB4MDAwMTAwMDA+OyAvKiA2NEtCICovCisJCQkJCX07CisKKwkJCQkJcGFydGl0aW9uQDAwN2YwMDAwIHsKKwkJCQkJCWxhYmVsID0gIkZJUyBkaXJlY3RvcnkiOworCQkJCQkJcmVnID0gPDB4MDA3ZjAwMDAgMHgwMDAxMDAwMD47IC8qIDY0S0IgKi8KKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJaTJjQDExMDAwIHsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKwkJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCQlzMzUzOTBhOiBzMzUzOTBhQDMwIHsKKwkJCQkJIGNvbXBhdGlibGUgPSAic2lpLHMzNTM5MGEiOworCQkJCQkgcmVnID0gPDB4MzA+OworCQkJCX07CisJCQl9OworCisJCQkvKiBDb25uZWN0ZWQgdG8gYSBoZWFkZXIgb24gZGV2aWNlJ3MgUENCLiBUaGlzCisJCQkgKiBwcm92aWRlcyB0aGUgbWFpbiBjb25zb2xlIGZvciB0aGUgZGV2aWNlLgorCQkJICoKKwkJCSAqIFdhcm5pbmc6IHRoZSBkZXZpY2UgbWF5IG5vdCBib290IHdpdGggYSAzLjNWCisJCQkgKiBVU0Itc2VyaWFsIGNvbnZlcnRlciBjb25uZWN0ZWQgd2hlbiB0aGUgcG93ZXIKKwkJCSAqIGJ1dHRvbiBpcyBwcmVzc2VkLiBUaGUgY29udmVydGVyIG5lZWRzIHRvIGJlCisJCQkgKiBjb25uZWN0ZWQgYSBmZXcgc2Vjb25kcyBhZnRlciBwcmVzc2luZyB0aGUKKwkJCSAqIHBvd2VyIGJ1dHRvbi4gVGhpcyBpcyBwb3NzaWJseSBkdWUgdG8gVUFSVDBfVFhECisJCQkgKiBwaW4gYmVpbmcgc2FtcGxlZCBhdCByZXNldCAoYml0IDAgb2YgU0FSKS4KKwkJCSAqLworCQkJc2VyaWFsQDEyMDAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQkvKiBDb25uZWN0ZWQgdG8gYSBNaWNyb2NoaXAgUElDMTZGODgzIGZvciBwb3dlciBjb250cm9sICovCisJCQlzZXJpYWxAMTIxMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCX07CisKKwkJCXBvd2Vyb2ZmQDEyMTAwIHsKKwkJCQljb21wYXRpYmxlID0gInN5bm9sb2d5LHBvd2VyLW9mZiI7CisJCQkJcmVnID0gPDB4MTIxMDAgMHgxMDA+OworCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKKwkJCX07CisKKwkJCS8qIEZyb250IFVTQiAyLjAgcG9ydCAqLworCQkJdXNiQDUwMDAwIHsKKwkJCQlzdGF0dXMgPSAib2theSI7CisJCQl9OworCisJCQltZGlvIHsKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7IC8qIE1hcnZlbGwgODhFMTUxMiAqLworCQkJCQlyZWcgPSA8MD47CisJCQkJfTsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsgLyogTWFydmVsbCA4OEUxNTEyICovCisJCQkJCXJlZyA9IDwxPjsKKwkJCQl9OworCQkJfTsKKworCQkJZXRoZXJuZXRANzAwMDAgeworCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCQlwaW5jdHJsLTAgPSA8JmdlMF9yZ21paV9waW5zPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJCXBoeSA9IDwmcGh5MT47CisJCQkJcGh5LW1vZGUgPSAicmdtaWktaWQiOworCQkJfTsKKworCQkJZXRoZXJuZXRANzQwMDAgeworCQkJCXBpbmN0cmwtMCA9IDwmZ2UxX3JnbWlpX3BpbnM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJCXBoeSA9IDwmcGh5MD47CisJCQkJcGh5LW1vZGUgPSAicmdtaWktaWQiOworCQkJfTsKKwkJfTsKKwl9OworCisJcmVndWxhdG9ycyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcGluY3RybC0wID0gPCZzYXRhMV9wd3JfcGluICZzYXRhMl9wd3JfcGluCisJCQkgICAgICZzYXRhM19wd3JfcGluICZzYXRhNF9wd3JfcGluPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCQlzYXRhMV9yZWd1bGF0b3I6IHNhdGExLXJlZ3VsYXRvciB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MT47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJTQVRBMSBQb3dlciI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJc3RhcnR1cC1kZWxheS11cyA9IDwyMDAwMDAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCWdwaW8gPSA8JmdwaW8xIDEwIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCXNhdGEyX3JlZ3VsYXRvcjogc2F0YTItcmVndWxhdG9yIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwyPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIlNBVEEyIFBvd2VyIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlzdGFydHVwLWRlbGF5LXVzID0gPDQwMDAwMDA+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJZ3BpbyA9IDwmZ3BpbzEgMTIgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisKKwkJc2F0YTNfcmVndWxhdG9yOiBzYXRhMy1yZWd1bGF0b3IgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDM+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiU0FUQTMgUG93ZXIiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXN0YXJ0dXAtZGVsYXktdXMgPSA8NjAwMDAwMD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQlncGlvID0gPCZncGlvMSAxMyBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlzYXRhNF9yZWd1bGF0b3I6IHNhdGE0LXJlZ3VsYXRvciB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8ND47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJTQVRBNCBQb3dlciI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJc3RhcnR1cC1kZWxheS11cyA9IDw4MDAwMDAwPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCWdwaW8gPSA8JmdwaW8xIDE0IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCX07Cit9OworCismcGluY3RybCB7CisJc2F0YTFfcHdyX3Bpbjogc2F0YTEtcHdyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEyX3B3cl9waW46IHNhdGEyLXB3ci1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDQiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzYXRhM19wd3JfcGluOiBzYXRhMy1wd3ItcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc2F0YTRfcHdyX3Bpbjogc2F0YTQtcHdyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0NiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGExX3ByZXNfcGluOiBzYXRhMS1wcmVzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzNCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEyX3ByZXNfcGluOiBzYXRhMi1wcmVzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzNSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGEzX3ByZXNfcGluOiBzYXRhMy1wcmVzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MCI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXNhdGE0X3ByZXNfcGluOiBzYXRhNC1wcmVzLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCXN5bm9faWRfYml0MF9waW46IHN5bm8taWQtYml0MC1waW4geworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMjYiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCX07CisKKwlzeW5vX2lkX2JpdDFfcGluOiBzeW5vLWlkLWJpdDEtcGluIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDI4IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwl9OworCisJc3lub19pZF9iaXQyX3Bpbjogc3luby1pZC1iaXQyLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAyOSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWZhbjFfYWxhcm1fcGluOiBmYW4xLWFsYXJtLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKKworCWZhbjJfYWxhcm1fcGluOiBmYW4yLWFsYXJtLXBpbiB7CisJCW1hcnZlbGwscGlucyA9ICJtcHAzMiI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEteHAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC5kdHNpCmluZGV4IGJmZjlmNmMuLjYyYzNiYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS14cC5kdHNpCkBAIC0zNSwxMyArMzUsMjQgQEAKIAkJfTsKIAogCQlpbnRlcm5hbC1yZWdzIHsKKwkJCXNkcmFtY0AxNDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXJtYWRhLXhwLXNkcmFtLWNvbnRyb2xsZXIiOworCQkJCXJlZyA9IDwweDE0MDAgMHg1MDA+OworCQkJfTsKKwogCQkJTDI6IGwyLWNhY2hlIHsKIAkJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYXVyb3JhLXN5c3RlbS1jYWNoZSI7CiAJCQkJcmVnID0gPDB4MDgwMDAgMHgxMDAwPjsKIAkJCQljYWNoZS1pZC1wYXJ0ID0gPDB4MTAwPjsKKwkJCQljYWNoZS11bmlmaWVkOwogCQkJCXd0LW92ZXJyaWRlOwogCQkJfTsKIAorCQkJc3BpMDogc3BpQDEwNjAwIHsKKwkJCQlwaW5jdHJsLTAgPSA8JnNwaTBfcGlucz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCX07CisKIAkJCWkyYzA6IGkyY0AxMTAwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NzgyMzAtaTJjIiwgIm1hcnZlbGwsbXY2NHh4eC1pMmMiOwogCQkJCXJlZyA9IDwweDExMDAwIDB4MTAwPjsKQEAgLTUyLDggKzYzLDEwIEBACiAJCQkJcmVnID0gPDB4MTExMDAgMHgxMDA+OwogCQkJfTsKIAotCQkJc2VyaWFsQDEyMjAwIHsKKwkJCXVhcnQyOiBzZXJpYWxAMTIyMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQkJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXJlZyA9IDwweDEyMjAwIDB4MTAwPjsKIAkJCQlyZWctc2hpZnQgPSA8Mj47CiAJCQkJaW50ZXJydXB0cyA9IDw0Mz47CkBAIC02MSw4ICs3NCwxMSBAQAogCQkJCWNsb2NrcyA9IDwmY29yZWNsayAwPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKLQkJCXNlcmlhbEAxMjMwMCB7CisKKwkJCXVhcnQzOiBzZXJpYWxAMTIzMDAgewogCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQkJcGluY3RybC0wID0gPCZ1YXJ0M19waW5zPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXJlZyA9IDwweDEyMzAwIDB4MTAwPjsKIAkJCQlyZWctc2hpZnQgPSA8Mj47CiAJCQkJaW50ZXJydXB0cyA9IDw0ND47CkBAIC0xOTksMyArMjE1LDU0IEBACiAJCX07CiAJfTsKIH07CisKKyZwaW5jdHJsIHsKKwlnZTBfZ21paV9waW5zOiBnZTAtZ21paS1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0KKwkJICAgICAibXBwMCIsICAibXBwMSIsICAibXBwMiIsICAibXBwMyIsCisJCSAgICAgIm1wcDQiLCAgIm1wcDUiLCAgIm1wcDYiLCAgIm1wcDciLAorCQkgICAgICJtcHA4IiwgICJtcHA5IiwgICJtcHAxMCIsICJtcHAxMSIsCisJCSAgICAgIm1wcDEyIiwgIm1wcDEzIiwgIm1wcDE0IiwgIm1wcDE1IiwKKwkJICAgICAibXBwMTYiLCAibXBwMTciLCAibXBwMTgiLCAibXBwMTkiLAorCQkgICAgICJtcHAyMCIsICJtcHAyMSIsICJtcHAyMiIsICJtcHAyMyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UwIjsKKwl9OworCisJZ2UwX3JnbWlpX3BpbnM6IGdlMC1yZ21paS1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0KKwkJICAgICAibXBwMCIsICJtcHAxIiwgIm1wcDIiLCAibXBwMyIsCisJCSAgICAgIm1wcDQiLCAibXBwNSIsICJtcHA2IiwgIm1wcDciLAorCQkgICAgICJtcHA4IiwgIm1wcDkiLCAibXBwMTAiLCAibXBwMTEiOworCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdlMCI7CisJfTsKKworCWdlMV9yZ21paV9waW5zOiBnZTEtcmdtaWktcGlucyB7CisJCW1hcnZlbGwscGlucyA9CisJCSAgICAgIm1wcDEyIiwgIm1wcDEzIiwgIm1wcDE0IiwgIm1wcDE1IiwKKwkJICAgICAibXBwMTYiLCAibXBwMTciLCAibXBwMTgiLCAibXBwMTkiLAorCQkgICAgICJtcHAyMCIsICJtcHAyMSIsICJtcHAyMiIsICJtcHAyMyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ2UxIjsKKwl9OworCisJc2Rpb19waW5zOiBzZGlvLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzAiLCAibXBwMzEiLCAibXBwMzIiLAorCQkJICAgICAgICJtcHAzMyIsICJtcHAzNCIsICJtcHAzNSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic2QwIjsKKwl9OworCisJc3BpMF9waW5zOiBzcGkwLXBpbnMgeworCQltYXJ2ZWxsLHBpbnMgPSAibXBwMzYiLCAibXBwMzciLAorCQkJICAgICAgICJtcHAzOCIsICJtcHAzOSI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAic3BpIjsKKwl9OworCisJdWFydDJfcGluczogdWFydDItcGlucyB7CisJCW1hcnZlbGwscGlucyA9ICJtcHA0MiIsICJtcHA0MyI7CisJCW1hcnZlbGwsZnVuY3Rpb24gPSAidWFydDIiOworCX07CisKKwl1YXJ0M19waW5zOiB1YXJ0My1waW5zIHsKKwkJbWFydmVsbCxwaW5zID0gIm1wcDQ0IiwgIm1wcDQ1IjsKKwkJbWFydmVsbCxmdW5jdGlvbiA9ICJ1YXJ0MyI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOTI2My5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjMuZHRzaQppbmRleCA1MTQxNmM3ZC4uNjUzZTQzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOTI2My5kdHNpCkBAIC02NzcsNiArNjc3LDE0IEBACiAJCQkJCX07CiAJCQkJfTsKIAorCQkJCWNhbiB7CisJCQkJCXBpbmN0cmxfY2FuX3J4X3R4OiBjYW5fcnhfdHggeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQSAxNCBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FCS8qIENBTlJYLCBjb25mbGljdHMgd2l0aCBJUlEwICovCisJCQkJCQkJIEFUOTFfUElPQSAxMyBBVDkxX1BFUklQSF9BIEFUOTFfUElOQ1RSTF9OT05FPjsJLyogQ0FOVFgsIGNvbmZsaWN0cyB3aXRoIFBDSzAgKi8KKwkJCQkJfTsKKwkJCQl9OworCiAJCQkJcGlvQTogZ3Bpb0BmZmZmZjIwMCB7CiAJCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1ncGlvIjsKIAkJCQkJcmVnID0gPDB4ZmZmZmYyMDAgMHgyMDA+OwpAQCAtOTA1LDYgKzkxMywxNyBAQAogCQkJCWNsb2NrLW5hbWVzID0gInB3bV9jbGsiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OworCisJCQljYW46IGNhbkBmZmZhYzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2My1jYW4iOworCQkJCXJlZyA9IDwweGZmZmFjMDAwIDB4MzAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEyIElSUV9UWVBFX0xFVkVMX0hJR0ggMz47CisJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfY2FuX3J4X3R4PjsKKwkJCQljbG9ja3MgPSA8JmNhbl9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gImNhbl9jbGsiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OwogCQl9OwogCiAJCWZiMDogZmJAMHgwMDcwMDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXgyNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4MjUuZHRzaQppbmRleCBjMjU1NDIxLi4zYzVmYTMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXgyNS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDI1LmR0c2kKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJhdDkxc2FtOXg1X3VzYXJ0My5kdHNpIgogI2luY2x1ZGUgImF0OTFzYW05eDVfbWFjYjAuZHRzaSIKICNpbmNsdWRlICJhdDkxc2FtOXg1X21hY2IxLmR0c2kiCisjaW5jbHVkZSAiYXQ5MXNhbTl4NV9jYW4uZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiQXRtZWwgQVQ5MVNBTTlYMjUgU29DIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDM1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXgzNS5kdHNpCmluZGV4IDhlYWM2NmMuLjQ5OWNkYzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDM1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4MzUuZHRzaQpAQCAtOCw2ICs4LDcgQEAKIAogI2luY2x1ZGUgImF0OTFzYW05eDUuZHRzaSIKICNpbmNsdWRlICJhdDkxc2FtOXg1X21hY2IwLmR0c2kiCisjaW5jbHVkZSAiYXQ5MXNhbTl4NV9jYW4uZHRzaSIKIAogLyB7CiAJbW9kZWwgPSAiQXRtZWwgQVQ5MVNBTTlYMzUgU29DIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDUuZHRzaQppbmRleCA3MjYyNzRmLi5iYmIzYmE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NS5kdHNpCkBAIC04NjAsNiArODYwLDkgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfTEVWRUxfSElHSCA3PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9kYmd1PjsKKwkJCQlkbWFzID0gPCZkbWExIDEgQVQ5MV9ETUFfQ0ZHX1BFUl9JRCg4KT4sCisJCQkJICAgICAgIDwmZG1hMSAxIChBVDkxX0RNQV9DRkdfUEVSX0lEKDkpIHwgQVQ5MV9ETUFfQ0ZHX0ZJRk9DRkdfQVNBUCk+OworCQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCQkJY2xvY2tzID0gPCZtY2s+OwogCQkJCWNsb2NrLW5hbWVzID0gInVzYXJ0IjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtODcxLDYgKzg3NCw5IEBACiAJCQkJaW50ZXJydXB0cyA9IDw1IElSUV9UWVBFX0xFVkVMX0hJR0ggNT47CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNhcnQwPjsKKwkJCQlkbWFzID0gPCZkbWEwIDEgQVQ5MV9ETUFfQ0ZHX1BFUl9JRCgzKT4sCisJCQkJICAgICAgIDwmZG1hMCAxIChBVDkxX0RNQV9DRkdfUEVSX0lEKDQpIHwgQVQ5MV9ETUFfQ0ZHX0ZJRk9DRkdfQVNBUCk+OworCQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCQkJY2xvY2tzID0gPCZ1c2FydDBfY2xrPjsKIAkJCQljbG9jay1uYW1lcyA9ICJ1c2FydCI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTg4Miw2ICs4ODgsOSBAQAogCQkJCWludGVycnVwdHMgPSA8NiBJUlFfVFlQRV9MRVZFTF9ISUdIIDU+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYXJ0MT47CisJCQkJZG1hcyA9IDwmZG1hMCAxIEFUOTFfRE1BX0NGR19QRVJfSUQoNSk+LAorCQkJCSAgICAgICA8JmRtYTAgMSAoQVQ5MV9ETUFfQ0ZHX1BFUl9JRCg2KSB8IEFUOTFfRE1BX0NGR19GSUZPQ0ZHX0FTQVApPjsKKwkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQkJCWNsb2NrcyA9IDwmdXNhcnQxX2Nsaz47CiAJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC04OTMsNiArOTAyLDkgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDcgSVJRX1RZUEVfTEVWRUxfSElHSCA1PjsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2FydDI+OworCQkJCWRtYXMgPSA8JmRtYTEgMSBBVDkxX0RNQV9DRkdfUEVSX0lEKDEyKT4sCisJCQkJICAgICAgIDwmZG1hMSAxIChBVDkxX0RNQV9DRkdfUEVSX0lEKDEzKSB8IEFUOTFfRE1BX0NGR19GSUZPQ0ZHX0FTQVApPjsKKwkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQkJCWNsb2NrcyA9IDwmdXNhcnQyX2Nsaz47CiAJCQkJY2xvY2stbmFtZXMgPSAidXNhcnQiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2Nhbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV9jYW4uZHRzaQppbmRleCBmNDRhYjc3Li44ZWIyZjljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXg1X2Nhbi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfY2FuLmR0c2kKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXQ5MXNhbTl4NV9tYWNiMC5kdHNpIC0gRGV2aWNlIFRyZWUgSW5jbHVkZSBmaWxlIGZvciBBVDkxU0FNOXg1IFNvQyB3aXRoIDEKKyAqIGF0OTFzYW05eDVfY2FuLmR0c2kgLSBEZXZpY2UgVHJlZSBJbmNsdWRlIGZpbGUgZm9yIEFUOTFTQU05eDUgU29DIHdpdGggMQogICogRXRoZXJuZXQgaW50ZXJmYWNlLgogICoKICAqIENvcHlyaWdodCAoQykgMjAxMyBCb3JpcyBCUkVaSUxMT04gPGIuYnJlemlsbG9uQG92ZXJraXouY29tPgpAQCAtMjAsMTAgKzIwLDUwIEBACiAJCQkJCQlyZWcgPSA8Mjk+OwogCQkJCQl9OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuMV9jbGs6IGNhbjFfY2xrIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjbG9jay1jZWxscyA9IDwwPjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwzMD47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkJCQkJY2FuMV9jbGs6IGNhbjFfY2xrIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCXJlZyA9IDwzMD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCWNhbjA6IGNhbkBmODAwMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LWNhbiI7CisJCQkJcmVnID0gPDB4ZjgwMDAwMDAgMHgzMDA+OworCQkJCWludGVycnVwdHMgPSA8MjkgSVJRX1RZUEVfTEVWRUxfSElHSCAzPjsKKwkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9jYW4wX3J4X3R4PjsKKwkJCQljbG9ja3MgPSA8JmNhbjBfY2xrPjsKKwkJCQljbG9jay1uYW1lcyA9ICJjYW5fY2xrIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJY2FuMTogY2FuQGY4MDA0MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtY2FuIjsKKwkJCQlyZWcgPSA8MHhmODAwNDAwMCAweDMwMD47CisJCQkJaW50ZXJydXB0cyA9IDwzMCBJUlFfVFlQRV9MRVZFTF9ISUdIIDM+OworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2NhbjFfcnhfdHg+OworCQkJCWNsb2NrcyA9IDwmY2FuMV9jbGs+OworCQkJCWNsb2NrLW5hbWVzID0gImNhbl9jbGsiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlwaW5jdHJsQGZmZmZmNDAwIHsKKwkJCQljYW4wIHsKKwkJCQkJcGluY3RybF9jYW4wX3J4X3R4OiBjYW4wX3J4X3R4IHsKKwkJCQkJCWF0bWVsLHBpbnMgPQorCQkJCQkJCTxBVDkxX1BJT0EgOSBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FCS8qIENBTlJYMCwgY29uZmxpY3RzIHdpdGggRFJYRCAqLworCQkJCQkJCUFUOTFfUElPQSAxMCBBVDkxX1BFUklQSF9CIEFUOTFfUElOQ1RSTF9OT05FPjsJLyogQ0FOVFgwLCBjb25mbGljdHMgd2l0aCBEVFhEICovCisJCQkJCX07CisJCQkJfTsKKworCQkJCWNhbjEgeworCQkJCQlwaW5jdHJsX2NhbjFfcnhfdHg6IGNhbjFfcnhfdHggeworCQkJCQkJYXRtZWwscGlucyA9CisJCQkJCQkJPEFUOTFfUElPQSA2IEFUOTFfUEVSSVBIX0IgQVQ5MV9QSU5DVFJMX05PTkUJLyogQ0FOUlgxLCBjb25mbGljdHMgd2l0aCBSWEQxICovCisJCQkJCQkJQVQ5MV9QSU9BIDUgQVQ5MV9QRVJJUEhfQiBBVDkxX1BJTkNUUkxfTk9ORT47CS8qIENBTlRYMSwgY29uZmxpY3RzIHdpdGggVFhEMSAqLworCQkJCQl9OwogCQkJCX07CiAJCQl9OwogCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV91c2FydDMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfdXNhcnQzLmR0c2kKaW5kZXggMTQwMjE3YTUuLjQzYmI1YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVfdXNhcnQzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NV91c2FydDMuZHRzaQpAQCAtNTcsNiArNTcsOSBAQAogCQkJCWludGVycnVwdHMgPSA8OCBJUlFfVFlQRV9MRVZFTF9ISUdIIDU+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYXJ0Mz47CisJCQkJZG1hcyA9IDwmZG1hMSAxIEFUOTFfRE1BX0NGR19QRVJfSUQoMTQpPiwKKwkJCQkgICAgICAgPCZkbWExIDEgKEFUOTFfRE1BX0NGR19QRVJfSUQoMTUpIHwgQVQ5MV9ETUFfQ0ZHX0ZJRk9DRkdfQVNBUCk+OworCQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCQkJY2xvY2tzID0gPCZ1c2FydDNfY2xrPjsKIAkJCQljbG9jay1uYW1lcyA9ICJ1c2FydCI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0bGFzNi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXRsYXM2LmR0c2kKaW5kZXggYmIyMjg0Mi4uMjk1OTg2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXRsYXM2LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXRsYXM2LmR0c2kKQEAgLTEzMSw2ICsxMzEsNyBAQAogCQkJCXJlZyA9IDwweDkwMDIwMDAwIDB4MTAwMDA+OwogCQkJCWludGVycnVwdHMgPSA8MzE+OwogCQkJCWNsb2NrcyA9IDwmY2xrcyAzNT47CisJCQkJcmVzZXRzID0gPCZyc3RjIDY+OwogCQkJfTsKIAkJfTsKIApAQCAtMzEyLDYgKzMxMyw3IEBACiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJY2xvY2tzID0gPCZjbGtzIDE5PjsKKwkJCQlyZXNldHMgPSA8JnJzdGMgMjY+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC0zMjcsNiArMzI5LDcgQEAKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMjA+OworCQkJCXJlc2V0cyA9IDwmcnN0YyAyNz47CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCX07CiAKQEAgLTUyMiw2ICs1MjUsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAic2RtbWM1IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCQkJCWkyc19tY2xrX3BpbnNfYTogaTJzX21jbGtAMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJzX21jbGsgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixwaW5zID0gImkyc21jbGtncnAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixmdW5jdGlvbiA9ICJpMnNfbWNsayI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkJCQlpMnNfZXh0X2Nsa19pbnB1dF9waW5zX2E6IGkyc19leHRfY2xrX2lucHV0QDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyc19leHRfY2xrX2lucHV0IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYscGlucyA9ICJpMnNfZXh0X2Nsa19pbnB1dGdycCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLGZ1bmN0aW9uID0gImkyc19leHRfY2xrX2lucHV0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMnNfcGluc19hOiBpMnNAMCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYscGlucyA9ICJpMnNncnAiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtLWN5Z251cy1jbG9jay5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtLWN5Z251cy1jbG9jay5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDgzODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY20tY3lnbnVzLWNsb2NrLmR0c2kKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqICBCU0QgTElDRU5TRQorICoKKyAqICBDb3B5cmlnaHQoYykgMjAxNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogIGFyZSBtZXQ6CisgKgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBCcm9hZGNvbSBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2Nsb2NrcyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJcmFuZ2VzOworCisJb3NjOiBvc2NpbGxhdG9yIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDI1MDAwMDAwPjsKKwl9OworCisJYXBiX2NsazogYXBiX2NsayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDAwPjsKKwl9OworCisJcGVyaXBoX2NsazogcGVyaXBoX2NsayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMDA+OworCX07CisKKwlzZGlvX2NsazogbGNwbGxfY2gyIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDIwMDAwMDAwMD47CisJfTsKKworCWF4aTgxX2NsazogYXhpODFfY2xrIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJfTsKKworCWtleXBhZF9jbGs6IGtleXBhZF9jbGsgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzE4MDY+OworCX07CisKKwlhZGNfY2xrOiBhZGNfY2xrIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDE1NjI1MDA+OworCX07CisKKwlwd21fY2xrOiBwd21fY2xrIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDA+OworCX07CisKKwlsY2RfY2xrOiBtaXBpcGxsX2NoMSB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtLWN5Z251cy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtLWN5Z251cy5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMjZmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY20tY3lnbnVzLmR0c2kKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiAgQlNEIExJQ0VOU0UKKyAqCisgKiAgQ29weXJpZ2h0KGMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICoKKyAqICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgICBkaXN0cmlidXRpb24uCisgKiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQnJvYWRjb20gQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorCisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJicmNtLGN5Z251cyI7CisJbW9kZWwgPSAiQnJvYWRjb20gQ3lnbnVzIFNvQyI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCQlyZWcgPSA8MHgwPjsKKwkJfTsKKwl9OworCisJL2luY2x1ZGUvICJiY20tY3lnbnVzLWNsb2NrLmR0c2kiCisKKwlhbWJhIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImFybSxhbWJhLWJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJcmFuZ2VzOworCisJCXdkdEAxODAwOTAwMCB7CisJCQkgY29tcGF0aWJsZSA9ICJhcm0sc3A4MDUiICwgImFybSxwcmltZWNlbGwiOworCQkJIHJlZyA9IDwweDE4MDA5MDAwIDB4MTAwMD47CisJCQkgaW50ZXJydXB0cyA9IDxHSUNfU1BJIDkxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJIGNsb2NrcyA9IDwmYXhpODFfY2xrPjsKKwkJCSBjbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisJfTsKKworCXVhcnQwOiBzZXJpYWxAMTgwMjAwMDAgeworCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQlyZWcgPSA8MHgxODAyMDAwMCAweDEwMD47CisJCXJlZy1zaGlmdCA9IDwyPjsKKwkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmYXhpODFfY2xrPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQxOiBzZXJpYWxAMTgwMjEwMDAgeworCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQlyZWcgPSA8MHgxODAyMTAwMCAweDEwMD47CisJCXJlZy1zaGlmdCA9IDwyPjsKKwkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmYXhpODFfY2xrPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQyOiBzZXJpYWxAMTgwMjIwMDAgeworCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQlyZWcgPSA8MHgxODAyMDAwMCAweDEwMD47CisJCXJlZy1zaGlmdCA9IDwyPjsKKwkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmYXhpODFfY2xrPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQzOiBzZXJpYWxAMTgwMjMwMDAgeworCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQlyZWcgPSA8MHgxODAyMzAwMCAweDEwMD47CisJCXJlZy1zaGlmdCA9IDwyPjsKKwkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmYXhpODFfY2xrPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTkwMjEwMDAgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktZ2ljIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlyZWcgPSA8MHgxOTAyMTAwMCAweDEwMDA+LAorCQkgICAgICA8MHgxOTAyMDEwMCAweDEwMD47CisJfTsKKworCUwyOiBsMi1jYWNoZSB7CisJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzEwLWNhY2hlIjsKKwkJcmVnID0gPDB4MTkwMjIwMDAgMHgxMDAwPjsKKwkJY2FjaGUtdW5pZmllZDsKKwkJY2FjaGUtbGV2ZWwgPSA8Mj47CisJfTsKKworCXRpbWVyQDE5MDIwMjAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdsb2JhbC10aW1lciI7CisJCXJlZyA9IDwweDE5MDIwMjAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDExIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnBlcmlwaF9jbGs+OworCX07CisKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY20yODM1LXJwaS1iLXBsdXMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi1wbHVzLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDc5NTE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi1wbHVzLmR0cwpAQCAtMCwwICsxLDMwIEBACisvZHRzLXYxLzsKKy9pbmNsdWRlLyAiYmNtMjgzNS1ycGkuZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJyYXNwYmVycnlwaSxtb2RlbC1iLXBsdXMiLCAiYnJjbSxiY20yODM1IjsKKwltb2RlbCA9ICJSYXNwYmVycnkgUGkgTW9kZWwgQisiOworCisJbGVkcyB7CisJCWFjdCB7CisJCQlncGlvcyA9IDwmZ3BpbyA0NyAwPjsKKwkJfTsKKworCQlwd3IgeworCQkJbGFiZWwgPSAiUFdSIjsKKwkJCWdwaW9zID0gPCZncGlvIDM1IDA+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKwl9OworfTsKKworJmdwaW8geworCXBpbmN0cmwtMCA9IDwmZ3Bpb291dCAmYWx0MCAmaTJzX2FsdDAgJmFsdDM+OworCisJLyogSTJTIGludGVyZmFjZSAqLworCWkyc19hbHQwOiBpMnNfYWx0MCB7CisJCWJyY20scGlucyA9IDwxOCAxOSAyMCAyMT47CisJCWJyY20sZnVuY3Rpb24gPSA8ND47IC8qIGFsdDAgKi8KKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTI4MzUtcnBpLWIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi5kdHMKaW5kZXggNThhMGQ2MC4uYmFmYTQ2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGktYi5kdHMKQEAgLTEsNjMgKzEsMjMgQEAKIC9kdHMtdjEvOwotL2luY2x1ZGUvICJiY20yODM1LmR0c2kiCisvaW5jbHVkZS8gImJjbTI4MzUtcnBpLmR0c2kiCiAKIC8gewogCWNvbXBhdGlibGUgPSAicmFzcGJlcnJ5cGksbW9kZWwtYiIsICJicmNtLGJjbTI4MzUiOwogCW1vZGVsID0gIlJhc3BiZXJyeSBQaSBNb2RlbCBCIjsKIAotCW1lbW9yeSB7Ci0JCXJlZyA9IDwwIDB4MTAwMDAwMDA+OwotCX07Ci0KIAlsZWRzIHsKLQkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOwotCiAJCWFjdCB7Ci0JCQlsYWJlbCA9ICJBQ1QiOwogCQkJZ3Bpb3MgPSA8JmdwaW8gMTYgMT47Ci0JCQlkZWZhdWx0LXN0YXRlID0gImtlZXAiOwotCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CiAJCX07CiAJfTsKIH07CiAKICZncGlvIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmZ3Bpb291dCAmYWx0MCAmYWx0MiAmYWx0Mz47Ci0KLQlncGlvb3V0OiBncGlvb3V0IHsKLQkJYnJjbSxwaW5zID0gPDY+OwotCQlicmNtLGZ1bmN0aW9uID0gPDE+OyAvKiBHUElPIG91dCAqLwotCX07Ci0KLQlhbHQwOiBhbHQwIHsKLQkJYnJjbSxwaW5zID0gPDAgMSAyIDMgNCA1IDcgOCA5IDEwIDExIDE0IDE1IDQwIDQ1PjsKLQkJYnJjbSxmdW5jdGlvbiA9IDw0PjsgLyogYWx0MCAqLwotCX07Ci0KLQlhbHQzOiBhbHQzIHsKLQkJYnJjbSxwaW5zID0gPDQ4IDQ5IDUwIDUxIDUyIDUzPjsKLQkJYnJjbSxmdW5jdGlvbiA9IDw3PjsgLyogYWx0MyAqLwotCX07CisJcGluY3RybC0wID0gPCZncGlvb3V0ICZhbHQwICZpMnNfYWx0MiAmYWx0Mz47CiAKIAkvKiBJMlMgaW50ZXJmYWNlICovCi0JYWx0MjogYWx0MiB7CisJaTJzX2FsdDI6IGkyc19hbHQyIHsKIAkJYnJjbSxwaW5zID0gPDI4IDI5IDMwIDMxPjsKIAkJYnJjbSxmdW5jdGlvbiA9IDw2PjsgLyogYWx0MiAqLwogCX07CiB9OwotCi0maTJjMCB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwotfTsKLQotJmkyYzEgewotCXN0YXR1cyA9ICJva2F5IjsKLQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLX07Ci0KLSZzZGhjaSB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotCWJ1cy13aWR0aCA9IDw0PjsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY20yODM1LXJwaS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGkuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzA2NDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtMjgzNS1ycGkuZHRzaQpAQCAtMCwwICsxLDUxIEBACisvaW5jbHVkZS8gImJjbTI4MzUuZHRzaSIKKworLyB7CisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHgxMDAwMDAwMD47CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJYWN0IHsKKwkJCWxhYmVsID0gIkFDVCI7CisJCQlkZWZhdWx0LXN0YXRlID0gImtlZXAiOworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CisJCX07CisJfTsKK307CisKKyZncGlvIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJZ3Bpb291dDogZ3Bpb291dCB7CisJCWJyY20scGlucyA9IDw2PjsKKwkJYnJjbSxmdW5jdGlvbiA9IDwxPjsgLyogR1BJTyBvdXQgKi8KKwl9OworCisJYWx0MDogYWx0MCB7CisJCWJyY20scGlucyA9IDwwIDEgMiAzIDQgNSA3IDggOSAxMCAxMSAxNCAxNSA0MCA0NT47CisJCWJyY20sZnVuY3Rpb24gPSA8ND47IC8qIGFsdDAgKi8KKwl9OworCisJYWx0MzogYWx0MyB7CisJCWJyY20scGlucyA9IDw0OCA0OSA1MCA1MSA1MiA1Mz47CisJCWJyY20sZnVuY3Rpb24gPSA8Nz47IC8qIGFsdDMgKi8KKwl9OworfTsKKworJmkyYzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKK307CisKKyZpMmMxIHsKKwlzdGF0dXMgPSAib2theSI7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Cit9OworCismc2RoY2kgeworCXN0YXR1cyA9ICJva2F5IjsKKwlidXMtd2lkdGggPSA8ND47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwOC1idWZmYWxvLXd6ci0xNzUwZGhwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtYnVmZmFsby13enItMTc1MGRocC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjMGZhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtYnVmZmFsby13enItMTc1MGRocC5kdHMKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIEJyb2FkY29tIEJDTTQ3MFggLyBCQ001MzAxWCBBUk0gcGxhdGZvcm0gY29kZS4KKyAqIERUUyBmb3IgQnVmZmFsbyBXWlItMTc1MERIUAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAiYmNtNDcwOC5kdHNpIgorCisvIHsKKwljb21wYXRpYmxlID0gImJ1ZmZhbG8sd3pyLTE3NTBkaHAiLCAiYnJjbSxiY200NzA4IjsKKwltb2RlbCA9ICJCdWZmYWxvIFdaUi0xNzUwREhQIChCQ000NzA4KSI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDgwMDAwMDA+OworCX07CisKKwlncGlvLWtleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcG9sbC1pbnRlcnZhbCA9IDwyMDA+OworCisJCXJlc3RhcnQgeworCQkJbGFiZWwgPSAiUmVzZXQiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxMSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCWFvc3MgeworCQkJbGFiZWwgPSAiQU9TUyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDEyIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJLyogQ29tbWl0IG1vZGUgc2V0IGJ5IHN3aXRjaD8gKi8KKwkJbW9kZSB7CisJCQlsYWJlbCA9ICJNb2RlIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1NFVFVQPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDEzIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJLyogU3dpdGNoOiBBUCBtb2RlICovCisJCXN3X2FwIHsKKwkJCWxhYmVsID0gIkFQIjsKKwkJCWxpbnV4LGNvZGUgPSA8QlROXzA+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMTQgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQllamVjdCB7CisJCQlsYWJlbCA9ICJVU0IgZWplY3QiOworCQkJbGludXgsY29kZSA9IDxLRVlfRUpFQ1RDRD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxNSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwOC1uZXRnZWFyLXI2MjUwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtbmV0Z2Vhci1yNjI1MC5kdHMKaW5kZXggM2I1MjU5ZC4uNGVkN2RlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwOC1uZXRnZWFyLXI2MjUwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4LW5ldGdlYXItcjYyNTAuZHRzCkBAIC0zMiw0ICszMiw2MyBAQAogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OwogCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCWxvZ28geworCQkJbGFiZWwgPSAiYmNtNTN4eDp3aGl0ZTpsb2dvIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDEgR1BJT19BQ1RJVkVfSElHSD47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vbiI7CisJCX07CisKKwkJcG93ZXIwIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Z3JlZW46cG93ZXIiOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMiBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb2ZmIjsKKwkJfTsKKworCQlwb3dlcjEgeworCQkJbGFiZWwgPSAiYmNtNTN4eDphbWJlcjpwb3dlciI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAzIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vbiI7CisJCX07CisKKwkJdXNiIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp1c2IiOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gOCBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb2ZmIjsKKwkJfTsKKworCQl3aXJlbGVzcyB7CisJCQlsYWJlbCA9ICJiY201M3h4OmJsdWU6d2lyZWxlc3MiOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMTEgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9mZiI7CisJCX07CisJfTsKKworCWdwaW8ta2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlwb2xsLWludGVydmFsID0gPDIwMD47CisKKwkJd3BzIHsKKwkJCWxhYmVsID0gIldQUyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDQgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQlyZmtpbGwgeworCQkJbGFiZWwgPSAiV2lGaSI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9SRktJTEw+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gNSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCXJlc3RhcnQgeworCQkJbGFiZWwgPSAiUmVzZXQiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA2IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY200NzA4LW5ldGdlYXItcjYzMDAtdjIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwOC1uZXRnZWFyLXI2MzAwLXYyLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmZjMmEwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgtbmV0Z2Vhci1yNjMwMC12Mi5kdHMKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIEJyb2FkY29tIEJDTTQ3MFggLyBCQ001MzAxWCBBUk0gcGxhdGZvcm0gY29kZS4KKyAqIERUUyBmb3IgTmV0Z2VhciBSNjMwMCBWMgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAiYmNtNDcwOC5kdHNpIgorCisvIHsKKwljb21wYXRpYmxlID0gIm5ldGdlYXIscjYzMDB2MiIsICJicmNtLGJjbTQ3MDgiOworCW1vZGVsID0gIk5ldGdlYXIgUjYzMDAgVjIgKEJDTTQ3MDgpIjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwODAwMDAwMD47CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJbG9nbyB7CisJCQlsYWJlbCA9ICJiY201M3h4OndoaXRlOmxvZ28iOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKworCQlwb3dlcjAgeworCQkJbGFiZWwgPSAiYmNtNTN4eDpncmVlbjpwb3dlciI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAyIEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vZmYiOworCQl9OworCisJCXBvd2VyMSB7CisJCQlsYWJlbCA9ICJiY201M3h4OmFtYmVyOnBvd2VyIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDMgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKworCQl1c2IgeworCQkJbGFiZWwgPSAiYmNtNTN4eDpibHVlOnVzYiI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA4IEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vZmYiOworCQl9OworCisJCXdpcmVsZXNzIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp3aXJlbGVzcyI7CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxMSBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb2ZmIjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBvbGwtaW50ZXJ2YWwgPSA8MjAwPjsKKworCQl3cHMgeworCQkJbGFiZWwgPSAiV1BTIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1dQU19CVVRUT04+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gNCBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCXJma2lsbCB7CisJCQlsYWJlbCA9ICJXaUZpIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1JGS0lMTD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA1IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJcmVzdGFydCB7CisJCQlsYWJlbCA9ICJSZXNldCI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9SRVNUQVJUPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDYgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgxLWFzdXMtcnQtbjE4dS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS1hc3VzLXJ0LW4xOHUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzYzNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS1hc3VzLXJ0LW4xOHUuZHRzCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBCcm9hZGNvbSBCQ000NzBYIC8gQkNNNTMwMVggQVJNIHBsYXRmb3JtIGNvZGUuCisgKiBEVFMgZm9yIEFzdXMgUlQtTjE4VQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAiYmNtNDcwODEuZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJhc3VzLHJ0LW4xOHUiLCAiYnJjbSxiY200NzA4MSIsICJicmNtLGJjbTQ3MDgiOworCW1vZGVsID0gIkFzdXMgUlQtTjE4VSAoQkNNNDcwODEpIjsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwODAwMDAwMD47CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJcG93ZXIgeworCQkJbGFiZWwgPSAiYmNtNTN4eDpibHVlOnBvd2VyIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDAgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKworCQl1c2IyIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp1c2IyIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDMgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9mZiI7CisJCX07CisKKwkJd2FuIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp3YW4iOworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gNiBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImRlZmF1bHQtb24iOworCQl9OworCisJCWxhbiB7CisJCQlsYWJlbCA9ICJiY201M3h4OmJsdWU6bGFuIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDkgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJkZWZhdWx0LW9uIjsKKwkJfTsKKworCQl1c2IzIHsKKwkJCWxhYmVsID0gImJjbTUzeHg6Ymx1ZTp1c2IzIjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDE0IEdQSU9fQUNUSVZFX0xPVz47CisJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiZGVmYXVsdC1vZmYiOworCQl9OworCX07CisKKwlncGlvLWtleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcG9sbC1pbnRlcnZhbCA9IDwyMDA+OworCisJCXJlc3RhcnQgeworCQkJbGFiZWwgPSAiUmVzZXQiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiA3IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJd3BzIHsKKwkJCWxhYmVsID0gIldQUyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDExIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS1idWZmYWxvLXd6ci02MDBkaHAyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTQ3MDgxLWJ1ZmZhbG8td3pyLTYwMGRocDIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYjQxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS1idWZmYWxvLXd6ci02MDBkaHAyLmR0cwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQnJvYWRjb20gQkNNNDcwWCAvIEJDTTUzMDFYIEFSTSBwbGF0Zm9ybSBjb2RlLgorICogRFRTIGZvciBCdWZmYWxvIFdaUi02MDBESFAyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJhZmHFgiBNacWCZWNraSA8emFqZWM1QGdtYWlsLmNvbT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlICJiY200NzA4MS5kdHNpIgorCisvIHsKKwljb21wYXRpYmxlID0gImJ1ZmZhbG8sd3pyLTYwMGRocDIiLCAiYnJjbSxiY200NzA4MSIsICJicmNtLGJjbTQ3MDgiOworCW1vZGVsID0gIkJ1ZmZhbG8gV1pSLTYwMERIUDIgKEJDTTQ3MDgxKSI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDgwMDAwMDA+OworCX07CisKKwlncGlvLWtleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcG9sbC1pbnRlcnZhbCA9IDwyMDA+OworCisJCWFvc3MgeworCQkJbGFiZWwgPSAiQU9TUyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDkgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQlyZXN0YXJ0IHsKKwkJCWxhYmVsID0gIlJlc2V0IjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1JFU1RBUlQ+OworCQkJZ3Bpb3MgPSA8JmNoaXBjb21tb24gMTEgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQkvKiBTd2l0Y2ggZGV2aWNlIG1vZGU/ICovCisJCW1vZGUgeworCQkJbGFiZWwgPSAiTW9kZSI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9TRVRVUD47CisJCQlncGlvcyA9IDwmY2hpcGNvbW1vbiAxNCBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCWVqZWN0IHsKKwkJCWxhYmVsID0gIlVTQiBlamVjdCI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9FSkVDVENEPjsKKwkJCWdwaW9zID0gPCZjaGlwY29tbW9uIDE1IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iY200NzA4MS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwODEuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzIwMDEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNDcwODEuZHRzaQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQnJvYWRjb20gQkNNNDcwWCAvIEJDTTUzMDFYIEFSTSBwbGF0Zm9ybSBjb2RlLgorICogRFRTIGZvciBCQ000NzA4MSBTb0MuCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTQgUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiYmNtNTMwMXguZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJicmNtLGJjbTQ3MDgxIjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCQlyZWcgPSA8MHgwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTUzMDF4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9iY201MzAxeC5kdHNpCmluZGV4IDUzYzYyNGYuLjc4YWVjNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTUzMDF4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtNTMwMXguZHRzaQpAQCAtOCw2ICs4LDggQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CiAjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKQEAgLTkyLDQgKzk0LDUzIEBACiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwMDAwPjsKIAkJfTsKIAl9OworCisJYXhpQDE4MDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJicmNtLGJ1cy1heGkiOworCQlyZWcgPSA8MHgxODAwMDAwMCAweDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMDAwMDAwMCAweDE4MDAwMDAwIDB4MDAxMDAwMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4MDAwZmZmZmYgMHhmZmZmPjsKKwkJaW50ZXJydXB0LW1hcCA9IAorCQkJLyogQ2hpcENvbW1vbiAqLworCQkJPDB4MDAwMDAwMDAgMCAmZ2ljIEdJQ19TUEkgODUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisKKwkJCS8qIFVTQiAyLjAgQ29udHJvbGxlciAqLworCQkJPDB4MDAwMjEwMDAgMCAmZ2ljIEdJQ19TUEkgNzkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisKKwkJCS8qIFVTQiAzLjAgQ29udHJvbGxlciAqLworCQkJPDB4MDAwMjMwMDAgMCAmZ2ljIEdJQ19TUEkgODAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisKKwkJCS8qIEV0aGVybmV0IENvbnRyb2xsZXIgMCAqLworCQkJPDB4MDAwMjQwMDAgMCAmZ2ljIEdJQ19TUEkgMTQ3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCisJCQkvKiBFdGhlcm5ldCBDb250cm9sbGVyIDEgKi8KKwkJCTwweDAwMDI1MDAwIDAgJmdpYyBHSUNfU1BJIDE0OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKworCQkJLyogRXRoZXJuZXQgQ29udHJvbGxlciAyICovCisJCQk8MHgwMDAyNjAwMCAwICZnaWMgR0lDX1NQSSAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisKKwkJCS8qIEV0aGVybmV0IENvbnRyb2xsZXIgMyAqLworCQkJPDB4MDAwMjcwMDAgMCAmZ2ljIEdJQ19TUEkgMTUwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCisJCQkvKiBOQU5EIENvbnRyb2xsZXIgKi8KKwkJCTwweDAwMDI4MDAwIDAgJmdpYyBHSUNfU1BJIDY0IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJPDB4MDAwMjgwMDAgMSAmZ2ljIEdJQ19TUEkgNjUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQk8MHgwMDAyODAwMCAyICZnaWMgR0lDX1NQSSA2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCTwweDAwMDI4MDAwIDMgJmdpYyBHSUNfU1BJIDY3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJPDB4MDAwMjgwMDAgNCAmZ2ljIEdJQ19TUEkgNjggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQk8MHgwMDAyODAwMCA1ICZnaWMgR0lDX1NQSSA2OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCTwweDAwMDI4MDAwIDYgJmdpYyBHSUNfU1BJIDcwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJPDB4MDAwMjgwMDAgNyAmZ2ljIEdJQ19TUEkgNzEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJY2hpcGNvbW1vbjogY2hpcGNvbW1vbkAwIHsKKwkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MTAwMD47CisKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmNtOTExMzYwX2VudHBobi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iY205MTEzNjBfZW50cGhuLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmVlOTUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtOTExMzYwX2VudHBobi5kdHMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBCU0QgTElDRU5TRQorICoKKyAqICBDb3B5cmlnaHQoYykgMjAxNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogIGFyZSBtZXQ6CisgKgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBCcm9hZGNvbSBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSAiYmNtLWN5Z251cy5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJDeWdudXMgRW50ZXJwcmlzZSBQaG9uZSAoQkNNOTExMzYwX0VOVFBITikiOworCWNvbXBhdGlibGUgPSAiYnJjbSxiY20xMTM2MCIsICJicmNtLGN5Z251cyI7CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MzsKKwl9OworCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDM7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworCisJdWFydDM6IHNlcmlhbEAxODAyMzAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTkxMTM2MGsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtOTExMzYway5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1OGQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTkxMTM2MGsuZHRzCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQlNEIExJQ0VOU0UKKyAqCisgKiAgQ29weXJpZ2h0KGMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICoKKyAqICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgICBkaXN0cmlidXRpb24uCisgKiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQnJvYWRjb20gQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImJjbS1jeWdudXMuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQ3lnbnVzIFNWSyAoQkNNOTExMzYwSykiOworCWNvbXBhdGlibGUgPSAiYnJjbSxiY20xMTM2MCIsICJicmNtLGN5Z251cyI7CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MzsKKwl9OworCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDM7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworCisJdWFydDM6IHNlcmlhbEAxODAyMzAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTk1ODMwMGsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmNtOTU4MzAway5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFiYjM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JjbTk1ODMwMGsuZHRzCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQlNEIExJQ0VOU0UKKyAqCisgKiAgQ29weXJpZ2h0KGMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICoKKyAqICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgICBkaXN0cmlidXRpb24uCisgKiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQnJvYWRjb20gQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImJjbS1jeWdudXMuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQ3lnbnVzIFNWSyAoQkNNOTU4MzAwSykiOworCWNvbXBhdGlibGUgPSAiYnJjbSxiY201ODMwMCIsICJicmNtLGN5Z251cyI7CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MzsKKwl9OworCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDM7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworCisJdWFydDM6IHNlcmlhbEAxODAyMzAwMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjItc29ueS1uc3otZ3M3LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjItc29ueS1uc3otZ3M3LmR0cwppbmRleCBjNzJiZmQ0Li44NmQ4NWQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yLXNvbnktbnN6LWdzNy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMi1zb255LW5zei1nczcuZHRzCkBAIC0yNiw0ICsyNiwyMCBAQAogCX07CiB9OwogCismYWhjaSB7IHN0YXR1cyA9ICJva2F5IjsgfTsKKworJmV0aDEgeyBzdGF0dXMgPSAib2theSI7IH07CisKKy8qIFVucG9wdWxhdGVkIFNBVEEgcGx1ZyBvbiBzb2xkZXIgc2lkZSAqLworJnNhdGEwIHsgc3RhdHVzID0gIm9rYXkiOyB9OworCismc2F0YV9waHkgeyBzdGF0dXMgPSAib2theSI7IH07CisKKy8qIFNhbXN1bmcgTThHMkZBIDhHQiBlTU1DICovCismc2RoY2kyIHsKKwlub24tcmVtb3ZhYmxlOworCWJ1cy13aWR0aCA9IDw4PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmdWFydDAgeyBzdGF0dXMgPSAib2theSI7IH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yLmR0c2kKaW5kZXggOWQ3YzgxMC4uMDE1YTA2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjIuZHRzaQpAQCAtNTMsNiArNTMsMzUgQEAKIAogCQlyYW5nZXMgPSA8MCAweGY3MDAwMDAwIDB4MTAwMDAwMD47CiAKKwkJc2RoY2kwOiBzZGhjaUBhYjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtcnZsLHB4YXYzLW1tYyI7CisJCQlyZWcgPSA8MHhhYjAwMDAgMHgyMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NESU8wWElOPiwgPCZjaGlwIENMS0lEX1NESU8wPjsKKwkJCWNsb2NrLW5hbWVzID0gImlvIiwgImNvcmUiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzZGhjaTE6IHNkaGNpQGFiMDgwMCB7CisJCQljb21wYXRpYmxlID0gIm1ydmwscHhhdjMtbW1jIjsKKwkJCXJlZyA9IDwweGFiMDgwMCAweDIwMD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0RJTzFYSU4+LCA8JmNoaXAgQ0xLSURfU0RJTzE+OworCQkJY2xvY2stbmFtZXMgPSAiaW8iLCAiY29yZSI7CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNkaGNpMjogc2RoY2lAYWIxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibXJ2bCxweGF2My1tbWMiOworCQkJcmVnID0gPDB4YWIxMDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9ORkNfRUNDPiwgPCZjaGlwIENMS0lEX05GQz47CisJCQljbG9jay1uYW1lcyA9ICJpbyIsICJjb3JlIjsKKwkJCXBpbmN0cmwtMCA9IDwmZW1tY19wbXV4PjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCWwyOiBsMi1jYWNoZS1jb250cm9sbGVyQGFjMDAwMCB7CiAJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsdGF1cm9zMy1jYWNoZSIsICJhcm0scGwzMTAtY2FjaGUiOwogCQkJcmVnID0gPDB4YWMwMDAwIDB4MTAwMD47CkBAIC03OSwxMSArMTA4LDQ3IEBACiAJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfVFdEPjsKIAkJfTsKIAorCQlldGgxOiBldGhlcm5ldEBiOTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLHB4YTE2OC1ldGgiOworCQkJcmVnID0gPDB4YjkwMDAwIDB4MTAwMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0dFVEgxPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCS8qIHNldCBieSBib290bG9hZGVyICovCisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOworCQkJcGh5LWhhbmRsZSA9IDwmZXRocGh5MT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlldGhwaHkxOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKwogCQljcHUtY3RybEBkZDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbi1jcHUtY3RybCI7CiAJCQlyZWcgPSA8MHhkZDAwMDAgMHgxMDAwMD47CiAJCX07CiAKKwkJZXRoMDogZXRoZXJuZXRAZTUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxweGExNjgtZXRoIjsKKwkJCXJlZyA9IDwweGU1MDAwMCAweDEwMDAwPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9HRVRIMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCS8qIHNldCBieSBib290bG9hZGVyICovCisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOworCQkJcGh5LWhhbmRsZSA9IDwmZXRocGh5MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlldGhwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKwogCQlhcGJAZTgwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTI0NiwxMiArMzExLDU3IEBACiAJCQl9OwogCQl9OwogCisJCWFoY2k6IHNhdGFAZTkwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLWFoY2kiLCAiZ2VuZXJpYy1haGNpIjsKKwkJCXJlZyA9IDwweGU5MDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0FUQT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQlzYXRhMDogc2F0YS1wb3J0QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCQlwaHlzID0gPCZzYXRhX3BoeSAwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJc2F0YTE6IHNhdGEtcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQkJcGh5cyA9IDwmc2F0YV9waHkgMT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCX07CisKKwkJc2F0YV9waHk6IHBoeUBlOTAwYTAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjItc2F0YS1waHkiOworCQkJcmVnID0gPDB4ZTkwMGEwIDB4MjAwPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9TQVRBPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQkJc2F0YS1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKworCQkJc2F0YS1waHlAMSB7CisJCQkJcmVnID0gPDE+OworCQkJfTsKKwkJfTsKKwogCQljaGlwOiBjaGlwLWNvbnRyb2xAZWEwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLWNoaXAtY3RybCI7CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkjcmVzZXQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHhlYTAwMDAgMHg0MDA+OwogCQkJY2xvY2tzID0gPCZyZWZjbGs+OwogCQkJY2xvY2stbmFtZXMgPSAicmVmY2xrIjsKKworCQkJZW1tY19wbXV4OiBlbW1jLXBtdXggeworCQkJCWdyb3VwcyA9ICJHMjYiOworCQkJCWZ1bmN0aW9uID0gImVtbWMiOworCQkJfTsKIAkJfTsKIAogCQlhcGJAZmMwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJjZC1nb29nbGUtY2hyb21lY2FzdC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QtZ29vZ2xlLWNocm9tZWNhc3QuZHRzCmluZGV4IGJjZDgxZmYuLjMwMjcwYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJjZC1nb29nbGUtY2hyb21lY2FzdC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMmNkLWdvb2dsZS1jaHJvbWVjYXN0LmR0cwpAQCAtMTEsNiArMTEsNyBAQAogL2R0cy12MS87CiAKICNpbmNsdWRlICJiZXJsaW4yY2QuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KIAogLyB7CiAJbW9kZWwgPSAiR29vZ2xlIENocm9tZWNhc3QiOwpAQCAtMjQsNiArMjUsMzUgQEAKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKIAkJcmVnID0gPDB4MDAwMDAwMDAgMHgyMDAwMDAwMD47IC8qIDUxMiBNQiAqLwogCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCXdoaXRlIHsKKwkJCWxhYmVsID0gIndoaXRlIjsKKwkJCWdwaW9zID0gPCZwb3J0YyAxIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJfTsKKworCQlyZWQgeworCQkJbGFiZWwgPSAicmVkIjsKKwkJCWdwaW9zID0gPCZwb3J0YyAyIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJfTsKKwl9OworfTsKKworLyoKKyAqIEF6dXJlV2F2ZSBBVy1OSDM4NyAoTWFydmVsbCA4OFc4Nzg3KQorICogODAyLjExYi9nL24gKyBCbHVldG9vdGggMi4xCisgKi8KKyZzZGhjaTAgeworCW5vbi1yZW1vdmFibGU7CisJc3RhdHVzID0gIm9rYXkiOwogfTsKIAogJnVhcnQwIHsgc3RhdHVzID0gIm9rYXkiOyB9OworCismdXNiX3BoeTEgeyBzdGF0dXMgPSAib2theSI7IH07CisKKyZ1c2IxIHsgc3RhdHVzID0gIm9rYXkiOyB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMmNkLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QuZHRzaQppbmRleCBjYzFkZjY1Li4yMzBkZjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4yY2QuZHRzaQpAQCAtNDUsNiArNDUsMTUgQEAKIAogCQlyYW5nZXMgPSA8MCAweGY3MDAwMDAwIDB4MTAwMDAwMD47CiAKKwkJc2RoY2kwOiBzZGhjaUBhYjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtcnZsLHB4YXYzLW1tYyI7CisJCQlyZWcgPSA8MHhhYjAwMDAgMHgyMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1NESU8wWElOPiwgPCZjaGlwIENMS0lEX1NESU8wPjsKKwkJCWNsb2NrLW5hbWVzID0gImlvIiwgImNvcmUiOworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQlsMjogbDItY2FjaGUtY29udHJvbGxlckBhYzAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOwogCQkJcmVnID0gPDB4YWMwMDAwIDB4MTAwMD47CkBAIC02Niw2ICs3NSw1OCBAQAogCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1RXRD47CiAJCX07CiAKKwkJdXNiX3BoeTA6IHVzYi1waHlAYjc0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yY2QtdXNiLXBoeSI7CisJCQlyZWcgPSA8MHhiNzQwMDAgMHgxMjg+OworCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCXJlc2V0cyA9IDwmY2hpcCAweDE3OCAyMz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYl9waHkxOiB1c2ItcGh5QGI3ODAwMCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMmNkLXVzYi1waHkiOworCQkJcmVnID0gPDB4Yjc4MDAwIDB4MTI4PjsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQlyZXNldHMgPSA8JmNoaXAgMHgxNzggMjQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlldGgxOiBldGhlcm5ldEBiOTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLHB4YTE2OC1ldGgiOworCQkJcmVnID0gPDB4YjkwMDAwIDB4MTAwMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0dFVEgxPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCS8qIHNldCBieSBib290bG9hZGVyICovCisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOworCQkJcGh5LWhhbmRsZSA9IDwmZXRocGh5MT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlldGhwaHkxOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlldGgwOiBldGhlcm5ldEBlNTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLHB4YTE2OC1ldGgiOworCQkJcmVnID0gPDB4ZTUwMDAwIDB4MTAwMDA+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX0dFVEgwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJLyogc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwIDAwIDAwIDAwIDAwIDAwXTsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CisJCQlwaHktaGFuZGxlID0gPCZldGhwaHkwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCWV0aHBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCiAJCWFwYkBlODAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMjMxLDYgKzI5Miw3IEBACiAJCWNoaXA6IGNoaXAtY29udHJvbEBlYTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJjZC1jaGlwLWN0cmwiOwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJI3Jlc2V0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4ZWEwMDAwIDB4NDAwPjsKIAkJCWNsb2NrcyA9IDwmcmVmY2xrPjsKIAkJCWNsb2NrLW5hbWVzID0gInJlZmNsayI7CkBAIC0yNDEsNiArMzAzLDI2IEBACiAJCQl9OwogCQl9OwogCisJCXVzYjA6IHVzYkBlZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJjaGlwaWRlYSx1c2IyIjsKKwkJCXJlZyA9IDwweGVkMDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfVVNCMD47CisJCQlwaHlzID0gPCZ1c2JfcGh5MD47CisJCQlwaHktbmFtZXMgPSAidXNiLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYjE6IHVzYkBlZTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJjaGlwaWRlYSx1c2IyIjsKKwkJCXJlZyA9IDwweGVlMDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfVVNCMT47CisJCQlwaHlzID0gPCZ1c2JfcGh5MT47CisJCQlwaHktbmFtZXMgPSAidXNiLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCWFwYkBmYzAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEtbWFydmVsbC1kbXAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEtbWFydmVsbC1kbXAuZHRzCmluZGV4IGVhMWY5OWIuLjI4ZTdlMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLW1hcnZlbGwtZG1wLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS1tYXJ2ZWxsLWRtcC5kdHMKQEAgLTcsNiArNyw4IEBACiAgKi8KIAogL2R0cy12MS87CisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KICNpbmNsdWRlICJiZXJsaW4ycS5kdHNpIgogCiAvIHsKQEAgLTIxLDYgKzIzLDM5IEBACiAJY2hvb3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIGVhcmx5cHJpbnRrIjsKIAl9OworCisJcmVndWxhdG9ycyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlyZWdfdXNiMF92YnVzOiByZWd1bGF0b3JAMCB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ1c2IwX3ZidXMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCWdwaW8gPSA8JnBvcnRiIDggR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCX07CisKKwkJcmVnX3VzYjFfdmJ1czogcmVndWxhdG9yQDEgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVndWxhdG9yLW5hbWUgPSAidXNiMV92YnVzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlncGlvID0gPCZwb3J0YiAxMCBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJfTsKKworCQlyZWdfdXNiMl92YnVzOiByZWd1bGF0b3JAMiB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ1c2IyX3ZidXMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCWdwaW8gPSA8JnBvcnRiIDEyIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQl9OworCX07CiB9OwogCiAmc2RoY2kxIHsKQEAgLTQ2LDYgKzgxLDMyIEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAorJnVzYl9waHkwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiX3BoeTIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2IwIHsKKwl2YnVzLXN1cHBseSA9IDwmcmVnX3VzYjBfdmJ1cz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYjIgeworCXZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmZXRoMCB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJnNhdGEwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2F0YV9waHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEuZHRzaQppbmRleCA4OTFkNTZiLi4zNTI1M2M5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLmR0c2kKQEAgLTExNCw2ICsxMTQsNDAgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CiAJCX07CiAKKwkJdXNiX3BoeTI6IHBoeUBhMmY0MDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjItdXNiLXBoeSI7CisJCQlyZWcgPSA8MHhhMmY0MDAgMHgxMjg+OworCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCXJlc2V0cyA9IDwmY2hpcCAweDEwNCAxND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYjI6IHVzYkBhMzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJjaGlwaWRlYSx1c2IyIjsKKwkJCXJlZyA9IDwweGEzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA1MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9VU0IyPjsKKwkJCXBoeXMgPSA8JnVzYl9waHkyPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2ItcGh5IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdXNiX3BoeTA6IHBoeUBiNzQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjItdXNiLXBoeSI7CisJCQlyZWcgPSA8MHhiNzQwMDAgMHgxMjg+OworCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCXJlc2V0cyA9IDwmY2hpcCAweDEwNCAxMj47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYl9waHkxOiBwaHlAYjc4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLXVzYi1waHkiOworCQkJcmVnID0gPDB4Yjc4MDAwIDB4MTI4PjsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQlyZXNldHMgPSA8JmNoaXAgMHgxMDQgMTM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQlldGgwOiBldGhlcm5ldEBiOTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLHB4YTE2OC1ldGgiOwogCQkJcmVnID0gPDB4YjkwMDAwIDB4MTAwMDA+OwpAQCAtMTIzLDYgKzE1Nyw3IEBACiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJcGh5LWhhbmRsZSA9IDwmZXRocGh5MD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCkBAIC0yNTUsNyArMjkwLDYgQEAKIAkJCQlyZWcgPSA8MHgyYzE0IDB4MTQ+OwogCQkJCWNsb2NrcyA9IDwmY2hpcCBDTEtJRF9DRkc+OwogCQkJCWNsb2NrLW5hbWVzID0gInRpbWVyIjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIAogCQkJdGltZXIyOiB0aW1lckAyYzI4IHsKQEAgLTM0OSw2ICszODMsNyBAQAogCQljaGlwOiBjaGlwLWNvbnRyb2xAZWEwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4ycS1jaGlwLWN0cmwiOwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJI3Jlc2V0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4ZWEwMDAwIDB4NDAwPiwgPDB4ZGQwMTcwIDB4MTA+OwogCQkJY2xvY2tzID0gPCZyZWZjbGs+OwogCQkJY2xvY2stbmFtZXMgPSAicmVmY2xrIjsKQEAgLTM2NCw2ICszOTksNjUgQEAKIAkJCX07CiAJCX07CiAKKwkJYWhjaTogc2F0YUBlOTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJxLWFoY2kiLCAiZ2VuZXJpYy1haGNpIjsKKwkJCXJlZyA9IDwweGU5MDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0FUQT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQlzYXRhMDogc2F0YS1wb3J0QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCQlwaHlzID0gPCZzYXRhX3BoeSAwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJc2F0YTE6IHNhdGEtcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQkJcGh5cyA9IDwmc2F0YV9waHkgMT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCX07CisKKwkJc2F0YV9waHk6IHBoeUBlOTAwYTAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGJlcmxpbjJxLXNhdGEtcGh5IjsKKwkJCXJlZyA9IDwweGU5MDBhMCAweDIwMD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfU0FUQT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJCXNhdGEtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisKKwkJCXNhdGEtcGh5QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisJCX07CisKKwkJdXNiMDogdXNiQGVkMDAwMCB7CisJCQljb21wYXRpYmxlID0gImNoaXBpZGVhLHVzYjIiOworCQkJcmVnID0gPDB4ZWQwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZjaGlwIENMS0lEX1VTQjA+OworCQkJcGh5cyA9IDwmdXNiX3BoeTA+OworCQkJcGh5LW5hbWVzID0gInVzYi1waHkiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2IxOiB1c2JAZWUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2hpcGlkZWEsdXNiMiI7CisJCQlyZWcgPSA8MHhlZTAwMDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JmNoaXAgQ0xLSURfVVNCMT47CisJCQlwaHlzID0gPCZ1c2JfcGh5MT47CisJCQlwaHktbmFtZXMgPSAidXNiLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCWFwYkBmYzAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy1ldm0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy1ldm0uZHRzCmluZGV4IGM2Y2U2MjUuLjczNjA5MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTctZXZtLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3LWV2bS5kdHMKQEAgLTE3MSw2ICsxNzEsMTAxIEBACiAJCQkweGQwCShQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBncG1jX2JlMG5fY2xlICovCiAJCT47CiAJfTsKKworCWNwc3dfZGVmYXVsdDogY3Bzd19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCS8qIFNsYXZlIDEgKi8KKwkJCTB4MjUwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfdHhjLnJnbWlpMF90eGMgKi8KKwkJCTB4MjU0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfdHhjdGwucmdtaWkwX3R4Y3RsICovCisJCQkweDI1OCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3RkMy5yZ21paTBfdHhkMyAqLworCQkJMHgyNWMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIHJnbWlpMF90eGQyLnJnbWlpMF90eGQyICovCisJCQkweDI2MCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3R4ZDEucmdtaWkwX3R4ZDEgKi8KKwkJCTB4MjY0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfdHhkMC5yZ21paTBfdHhkMCAqLworCQkJMHgyNjggKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3J4Yy5yZ21paTBfcnhjICovCisJCQkweDI2YyAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfcnhjdGwucmdtaWkwX3J4Y3RsICovCisJCQkweDI3MCAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfcnhkMy5yZ21paTBfcnhkMyAqLworCQkJMHgyNzQgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogcmdtaWkwX3J4ZDIucmdtaWkwX3J4ZDIgKi8KKwkJCTB4Mjc4IChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHJnbWlpMF9yeGQxLnJnbWlpMF9yeGQxICovCisJCQkweDI3YyAoUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiByZ21paTBfcnhkMC5yZ21paTBfcnhkMCAqLworCisJCQkvKiBTbGF2ZSAyICovCisJCQkweDE5OCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDEyLnJnbWlpMV90eGMgKi8KKwkJCTB4MTljIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTMucmdtaWkxX3RjdGwgKi8KKwkJCTB4MWEwIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTQucmdtaWkxX3RkMyAqLworCQkJMHgxYTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QxNS5yZ21paTFfdGQyICovCisJCQkweDFhOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE2LnJnbWlpMV90ZDEgKi8KKwkJCTB4MWFjIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTcucmdtaWkxX3RkMCAqLworCQkJMHgxYjAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE4LnJnbWlpMV9yY2xrICovCisJCQkweDFiNCAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTkucmdtaWkxX3JjdGwgKi8KKwkJCTB4MWI4IChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QyMC5yZ21paTFfcmQzICovCisJCQkweDFiYyAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMjEucmdtaWkxX3JkMiAqLworCQkJMHgxYzAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDIyLnJnbWlpMV9yZDEgKi8KKwkJCTB4MWM0IChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QyMy5yZ21paTFfcmQwICovCisJCT47CisKKwl9OworCisJY3Bzd19zbGVlcDogY3Bzd19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBTbGF2ZSAxICovCisJCQkweDI1MCAoTVVYX01PREUxNSkKKwkJCTB4MjU0IChNVVhfTU9ERTE1KQorCQkJMHgyNTggKE1VWF9NT0RFMTUpCisJCQkweDI1YyAoTVVYX01PREUxNSkKKwkJCTB4MjYwIChNVVhfTU9ERTE1KQorCQkJMHgyNjQgKE1VWF9NT0RFMTUpCisJCQkweDI2OCAoTVVYX01PREUxNSkKKwkJCTB4MjZjIChNVVhfTU9ERTE1KQorCQkJMHgyNzAgKE1VWF9NT0RFMTUpCisJCQkweDI3NCAoTVVYX01PREUxNSkKKwkJCTB4Mjc4IChNVVhfTU9ERTE1KQorCQkJMHgyN2MgKE1VWF9NT0RFMTUpCisKKwkJCS8qIFNsYXZlIDIgKi8KKwkJCTB4MTk4IChNVVhfTU9ERTE1KQorCQkJMHgxOWMgKE1VWF9NT0RFMTUpCisJCQkweDFhMCAoTVVYX01PREUxNSkKKwkJCTB4MWE0IChNVVhfTU9ERTE1KQorCQkJMHgxYTggKE1VWF9NT0RFMTUpCisJCQkweDFhYyAoTVVYX01PREUxNSkKKwkJCTB4MWIwIChNVVhfTU9ERTE1KQorCQkJMHgxYjQgKE1VWF9NT0RFMTUpCisJCQkweDFiOCAoTVVYX01PREUxNSkKKwkJCTB4MWJjIChNVVhfTU9ERTE1KQorCQkJMHgxYzAgKE1VWF9NT0RFMTUpCisJCQkweDFjNCAoTVVYX01PREUxNSkKKwkJPjsKKwl9OworCisJZGF2aW5jaV9tZGlvX2RlZmF1bHQ6IGRhdmluY2lfbWRpb19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MjNjIChQSU5fT1VUUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogbWRpb19kLm1kaW9fZCAqLworCQkJMHgyNDAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1kaW9fY2xrLm1kaW9fY2xrICovCisJCT47CisJfTsKKworCWRhdmluY2lfbWRpb19zbGVlcDogZGF2aW5jaV9tZGlvX3NsZWVwIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4MjNjIChNVVhfTU9ERTE1KQorCQkJMHgyNDAgKE1VWF9NT0RFMTUpCisJCT47CisJfTsKKworCWRjYW4xX3BpbnNfZGVmYXVsdDogZGNhbjFfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4M2QwICAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApIC8qIGRjYW4xX3R4ICovCisJCQkweDNkNCAgIChNVVhfTU9ERTE1KQkJLyogZGNhbjFfcngub2ZmICovCisJCQkweDQxOCAgIChQVUxMX0RJUyB8IE1VWF9NT0RFMSkgLyogd2FrZXVwMC5kY2FuMV9yeCAqLworCQk+OworCX07CisKKwlkY2FuMV9waW5zX3NsZWVwOiBkY2FuMV9waW5zX3NsZWVwIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4M2QwICAgKE1VWF9NT0RFMTUpCS8qIGRjYW4xX3R4Lm9mZiAqLworCQkJMHgzZDQgICAoTVVYX01PREUxNSkJLyogZGNhbjFfcngub2ZmICovCisJCQkweDQxOCAgIChNVVhfTU9ERTE1KQkvKiB3YWtldXAwLm9mZiAqLworCQk+OworCX07CiB9OwogCiAmaTJjMSB7CkBAIC0yMDEsNiArMjk2LDcgQEAKIAkJCQkJcmVndWxhdG9yLW5hbWUgPSAic21wczQ1IjsKIAkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8IDg1MDAwMD47CiAJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKIAkJCQl9OwogCkBAIC0yMDksNiArMzA1LDcgQEAKIAkJCQkJcmVndWxhdG9yLW5hbWUgPSAic21wczYiOwogCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjUwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCQkJCXJlZ3VsYXRvci1ib290LW9uOwogCQkJCX07CiAKQEAgLTIyNiw2ICszMjMsNyBAQAogCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJzbXBzOCI7CiAJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPCA4NTAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjUwMDAwPjsKKwkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKIAkJCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQkJfTsKIApAQCAtMjUyLDYgKzM1MCw3IEBACiAJCQkJCXJlZ3VsYXRvci1uYW1lID0gImxkbzIiOwogCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKIAkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCQkJCXJlZ3VsYXRvci1ib290LW9uOwogCQkJCX07CiAKQEAgLTI2OSw2ICszNjgsNyBAQAogCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJsZG85IjsKIAkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTA1MDAwMD47CiAJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwNTAwMDA+OworCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKIAkJCQl9OwogCkBAIC01MjgsMyArNjI4LDM2IEBACiAJdGksbm8tcmVzZXQtb24taW5pdDsKIAl0aSxuby1pZGxlLW9uLWluaXQ7CiB9OworCismbWFjIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmNwc3dfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZjcHN3X3NsZWVwPjsKKwlkdWFsX2VtYWM7Cit9OworCismY3Bzd19lbWFjMCB7CisJcGh5X2lkID0gPCZkYXZpbmNpX21kaW8+LCA8Mj47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCWR1YWxfZW1hY19yZXNfdmxhbiA9IDwxPjsKK307CisKKyZjcHN3X2VtYWMxIHsKKwlwaHlfaWQgPSA8JmRhdmluY2lfbWRpbz4sIDwzPjsKKwlwaHktbW9kZSA9ICJyZ21paSI7CisJZHVhbF9lbWFjX3Jlc192bGFuID0gPDI+OworfTsKKworJmRhdmluY2lfbWRpbyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmRhdmluY2lfbWRpb19kZWZhdWx0PjsKKwlwaW5jdHJsLTEgPSA8JmRhdmluY2lfbWRpb19zbGVlcD47Cit9OworCismZGNhbjEgeworCXN0YXR1cyA9ICJvayI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmRjYW4xX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZkY2FuMV9waW5zX3NsZWVwPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kcmE3LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9kcmE3LmR0c2kKaW5kZXggOWNjOTg0My4uNjNiZjk5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcuZHRzaQpAQCAtMzQsNiArMzQsMTQgQEAKIAkJc2VyaWFsMyA9ICZ1YXJ0NDsKIAkJc2VyaWFsNCA9ICZ1YXJ0NTsKIAkJc2VyaWFsNSA9ICZ1YXJ0NjsKKwkJc2VyaWFsNiA9ICZ1YXJ0NzsKKwkJc2VyaWFsNyA9ICZ1YXJ0ODsKKwkJc2VyaWFsOCA9ICZ1YXJ0OTsKKwkJc2VyaWFsOSA9ICZ1YXJ0MTA7CisJCWV0aGVybmV0MCA9ICZjcHN3X2VtYWMwOworCQlldGhlcm5ldDEgPSAmY3Bzd19lbWFjMTsKKwkJZF9jYW4wID0gJmRjYW4xOworCQlkX2NhbjEgPSAmZGNhbjI7CiAJfTsKIAogCXRpbWVyIHsKQEAgLTIwMSw2ICsyMDksMTEgQEAKIAkJCXRpLGh3bW9kcyA9ICJjb3VudGVyXzMyayI7CiAJCX07CiAKKwkJZHJhN19jdHJsX2NvcmU6IGN0cmxfY29yZUA0YTAwMjAwMCB7CisJCQljb21wYXRpYmxlID0gInN5c2NvbiI7CisJCQlyZWcgPSA8MHg0YTAwMjAwMCAweDZkMD47CisJCX07CisKIAkJZHJhN19jdHJsX2dlbmVyYWw6IHRpc3lzY29uQDRhMDAyZTAwIHsKIAkJCWNvbXBhdGlibGUgPSAic3lzY29uIjsKIAkJCXJlZyA9IDwweDRhMDAyZTAwIDB4N2M+OwpAQCAtMzM1LDYgKzM0OCw4IEBACiAJCQl0aSxod21vZHMgPSAidWFydDEiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQ4MDAwMDAwPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZzZG1hIDQ5PiwgPCZzZG1hIDUwPjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDI6IHNlcmlhbEA0ODA2YzAwMCB7CkBAIC0zNDQsNiArMzU5LDggQEAKIAkJCXRpLGh3bW9kcyA9ICJ1YXJ0MiI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWRtYXMgPSA8JnNkbWEgNTE+LCA8JnNkbWEgNTI+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJfTsKIAogCQl1YXJ0Mzogc2VyaWFsQDQ4MDIwMDAwIHsKQEAgLTM1Myw2ICszNzAsOCBAQAogCQkJdGksaHdtb2RzID0gInVhcnQzIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJZG1hcyA9IDwmc2RtYSA1Mz4sIDwmc2RtYSA1ND47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQl9OwogCiAJCXVhcnQ0OiBzZXJpYWxANDgwNmUwMDAgewpAQCAtMzYyLDYgKzM4MSw4IEBACiAJCQl0aSxod21vZHMgPSAidWFydDQiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQ4MDAwMDAwPjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQlkbWFzID0gPCZzZG1hIDU1PiwgPCZzZG1hIDU2PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCX07CiAKIAkJdWFydDU6IHNlcmlhbEA0ODA2NjAwMCB7CkBAIC0zNzEsNiArMzkyLDggQEAKIAkJCXRpLGh3bW9kcyA9ICJ1YXJ0NSI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWRtYXMgPSA8JnNkbWEgNjM+LCA8JnNkbWEgNjQ+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJfTsKIAogCQl1YXJ0Njogc2VyaWFsQDQ4MDY4MDAwIHsKQEAgLTM4MCw2ICs0MDMsOCBAQAogCQkJdGksaHdtb2RzID0gInVhcnQ2IjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJZG1hcyA9IDwmc2RtYSA3OT4sIDwmc2RtYSA4MD47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQl9OwogCiAJCXVhcnQ3OiBzZXJpYWxANDg0MjAwMDAgewpAQCAtNDIxLDcgKzQ0NiwxMSBAQAogCQltYWlsYm94MTogbWFpbGJveEA0YTBmNDAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NGEwZjQwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMTM1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMTM0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gxIjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8Mz47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDw4PjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC00MzAsNyArNDU5LDEyIEBACiAJCW1haWxib3gyOiBtYWlsYm94QDQ4ODNhMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODgzYTAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjM3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjM4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjM5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjQwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gyIjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwxMj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNDM5LDcgKzQ3MywxMiBAQAogCQltYWlsYm94MzogbWFpbGJveEA0ODgzYzAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4M2MwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI0MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI0MiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI0MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI0NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94MyI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTQ0OCw3ICs0ODcsMTIgQEAKIAkJbWFpbGJveDQ6IG1haWxib3hANDg4M2UwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC1tYWlsYm94IjsKIAkJCXJlZyA9IDwweDQ4ODNlMDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNDUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNDYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNDcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNDggSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveDQiOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC00NTcsNyArNTAxLDEyIEBACiAJCW1haWxib3g1OiBtYWlsYm94QDQ4ODQwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg0MDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjUwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjUxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjUyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3g1IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwxMj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNDY2LDcgKzUxNSwxMiBAQAogCQltYWlsYm94NjogbWFpbGJveEA0ODg0MjAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4NDIwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI1MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI1NCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI1NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI1NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94NiI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTQ3NSw3ICs1MjksMTIgQEAKIAkJbWFpbGJveDc6IG1haWxib3hANDg4NDQwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwNC1tYWlsYm94IjsKIAkJCXJlZyA9IDwweDQ4ODQ0MDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNTggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNTkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyNjAgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveDciOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDEyPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC00ODQsNyArNTQzLDEyIEBACiAJCW1haWxib3g4OiBtYWlsYm94QDQ4ODQ2MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg0NjAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjYxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjYyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjYzIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjY0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3g4IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwxMj47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtNDkzLDcgKzU1NywxMiBAQAogCQltYWlsYm94OTogbWFpbGJveEA0ODg1ZTAwMCB7CiAJCQljb21wYXRpYmxlID0gInRpLG9tYXA0LW1haWxib3giOwogCQkJcmVnID0gPDB4NDg4NWUwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDI2OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94OSI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTUwMiw3ICs1NzEsMTIgQEAKIAkJbWFpbGJveDEwOiBtYWlsYm94QDQ4ODYwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg2MDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjY5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjcwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjcxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjcyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gxMCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTUxMSw3ICs1ODUsMTIgQEAKIAkJbWFpbGJveDExOiBtYWlsYm94QDQ4ODYyMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg2MjAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjczIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjc0IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjc1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjc2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gxMSI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTUyMCw3ICs1OTksMTIgQEAKIAkJbWFpbGJveDEyOiBtYWlsYm94QDQ4ODY0MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODg2NDAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjc3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjc4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjc5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMjgwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gxMiI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTUyOSw3ICs2MTMsMTIgQEAKIAkJbWFpbGJveDEzOiBtYWlsYm94QDQ4ODAyMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksb21hcDQtbWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODgwMjAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzc5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMzgwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMzgxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCSAgICAgPEdJQ19TUEkgMzgyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJdGksaHdtb2RzID0gIm1haWxib3gxMyI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8MTI+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTEwNzUsNiArMTE2NCwxNSBAQAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAorCQlydGNANDg4MzgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTMzNTItcnRjIjsKKwkJCXJlZyA9IDwweDQ4ODM4MDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAyMTcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQl0aSxod21vZHMgPSAicnRjc3MiOworCQkJY2xvY2tzID0gPCZzeXNfMzJrX2NrPjsKKwkJfTsKKwogCQlvbWFwX2NvbnRyb2xfdXNiMnBoeTE6IGNvbnRyb2wtcGh5QDRhMDAyMzAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksY29udHJvbC1waHktdXNiMiI7CiAJCQlyZWcgPSA8MHg0YTAwMjMwMCAweDQ+OwpAQCAtMTE0MSw3ICsxMjM5LDcgQEAKIAkJCX07CiAJCX07CiAKLQkJb21hcF9kd2MzXzFANDg4ODAwMDAgeworCQlvbWFwX2R3YzNfMTogb21hcF9kd2MzXzFANDg4ODAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxkd2MzIjsKIAkJCXRpLGh3bW9kcyA9ICJ1c2Jfb3RnX3NzMSI7CiAJCQlyZWcgPSA8MHg0ODg4MDAwMCAweDEwMDAwPjsKQEAgLTExNjIsNyArMTI2MCw3IEBACiAJCQl9OwogCQl9OwogCi0JCW9tYXBfZHdjM18yQDQ4OGMwMDAwIHsKKwkJb21hcF9kd2MzXzI6IG9tYXBfZHdjM18yQDQ4OGMwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidGksZHdjMyI7CiAJCQl0aSxod21vZHMgPSAidXNiX290Z19zczIiOwogCQkJcmVnID0gPDB4NDg4YzAwMDAgMHgxMDAwMD47CkBAIC0xMTg0LDcgKzEyODIsNyBAQAogCQl9OwogCiAJCS8qIElSUSBmb3IgRFdDM18zIGFuZCBEV0MzXzQgbmVlZCBJUlEgY3Jvc3NiYXIgKi8KLQkJb21hcF9kd2MzXzNANDg5MDAwMDAgeworCQlvbWFwX2R3YzNfMzogb21hcF9kd2MzXzNANDg5MDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxkd2MzIjsKIAkJCXRpLGh3bW9kcyA9ICJ1c2Jfb3RnX3NzMyI7CiAJCQlyZWcgPSA8MHg0ODkwMDAwMCAweDEwMDAwPjsKQEAgLTEyMDQsMjYgKzEzMDIsNiBAQAogCQkJfTsKIAkJfTsKIAotCQlvbWFwX2R3YzNfNEA0ODk0MDAwMCB7Ci0JCQljb21wYXRpYmxlID0gInRpLGR3YzMiOwotCQkJdGksaHdtb2RzID0gInVzYl9vdGdfc3M0IjsKLQkJCXJlZyA9IDwweDQ4OTQwMDAwIDB4MTAwMDA+OwotCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM0NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQl1dG1pLW1vZGUgPSA8Mj47Ci0JCQlyYW5nZXM7Ci0JCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJdXNiNDogdXNiQDQ4OTUwMDAwIHsKLQkJCQljb21wYXRpYmxlID0gInNucHMsZHdjMyI7Ci0JCQkJcmVnID0gPDB4NDg5NTAwMDAgMHgxNzAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM0NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQl0eC1maWZvLXJlc2l6ZTsKLQkJCQltYXhpbXVtLXNwZWVkID0gImhpZ2gtc3BlZWQiOwotCQkJCWRyX21vZGUgPSAib3RnIjsKLQkJCX07Ci0JCX07Ci0KIAkJZWxtOiBlbG1ANDgwNzgwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ0aSxhbTMzNTItZWxtIjsKIAkJCXJlZyA9IDwweDQ4MDc4MDAwIDB4ZmMwPjsgICAgICAvKiBkZXZpY2UgSU8gcmVnaXN0ZXJzICovCkBAIC0xMjY1LDYgKzEzNDMsODQgQEAKIAkJCXRpLGlycXMtc2tpcCA9IDwxMCAxMzMgMTM5IDE0MD47CiAJCQl0aSxpcnFzLXNhZmUtbWFwID0gPDA+OwogCQl9OworCisJCW1hYzogZXRoZXJuZXRANGExMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxjcHN3IjsKKwkJCXRpLGh3bW9kcyA9ICJnbWFjIjsKKwkJCWNsb2NrcyA9IDwmZHBsbF9nbWFjX2NrPiwgPCZnbWFjX2dtaWlfcmVmX2Nsa19kaXY+OworCQkJY2xvY2stbmFtZXMgPSAiZmNrIiwgImNwdHMiOworCQkJY3BkbWFfY2hhbm5lbHMgPSA8OD47CisJCQlhbGVfZW50cmllcyA9IDwxMDI0PjsKKwkJCWJkX3JhbV9zaXplID0gPDB4MjAwMD47CisJCQlub19iZF9yYW0gPSA8MD47CisJCQlyeF9kZXNjcyA9IDw2ND47CisJCQltYWNfY29udHJvbCA9IDwweDIwPjsKKwkJCXNsYXZlcyA9IDwyPjsKKwkJCWFjdGl2ZV9zbGF2ZSA9IDwwPjsKKwkJCWNwdHNfY2xvY2tfbXVsdCA9IDwweDgwMDAwMDAwPjsKKwkJCWNwdHNfY2xvY2tfc2hpZnQgPSA8Mjk+OworCQkJcmVnID0gPDB4NDg0ODQwMDAgMHgxMDAwCisJCQkgICAgICAgMHg0ODQ4NTIwMCAweDJFMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCS8qCisJCQkgKiByeF90aHJlc2hfcGVuZAorCQkJICogcnhfcGVuZAorCQkJICogdHhfcGVuZAorCQkJICogbWlzY19wZW5kCisJCQkgKi8KKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzMzQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAzMzUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAzMzYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJICAgICA8R0lDX1NQSSAzMzcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlyYW5nZXM7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlkYXZpbmNpX21kaW86IG1kaW9ANDg0ODUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAidGksZGF2aW5jaV9tZGlvIjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQl0aSxod21vZHMgPSAiZGF2aW5jaV9tZGlvIjsKKwkJCQlidXNfZnJlcSA9IDwxMDAwMDAwPjsKKwkJCQlyZWcgPSA8MHg0ODQ4NTAwMCAweDEwMD47CisJCQl9OworCisJCQljcHN3X2VtYWMwOiBzbGF2ZUA0ODQ4MDIwMCB7CisJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJfTsKKworCQkJY3Bzd19lbWFjMTogc2xhdmVANDg0ODAzMDAgeworCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQltYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCX07CisKKwkJCXBoeV9zZWw6IGNwc3ctcGh5LXNlbEA0YTAwMjU1NCB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxkcmE3eHgtY3Bzdy1waHktc2VsIjsKKwkJCQlyZWc9IDwweDRhMDAyNTU0IDB4ND47CisJCQkJcmVnLW5hbWVzID0gImdtaWktc2VsIjsKKwkJCX07CisJCX07CisKKwkJZGNhbjE6IGNhbkA0ODFjYzAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGRyYTctZF9jYW4iOworCQkJdGksaHdtb2RzID0gImRjYW4xIjsKKwkJCXJlZyA9IDwweDRhZTNjMDAwIDB4MjAwMD47CisJCQlzeXNjb24tcmFtaW5pdCA9IDwmZHJhN19jdHJsX2NvcmUgMHg1NTggMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjIyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZkY2FuMV9zeXNfY2xrX211eD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWRjYW4yOiBjYW5ANDgxZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxkcmE3LWRfY2FuIjsKKwkJCXRpLGh3bW9kcyA9ICJkY2FuMiI7CisJCQlyZWcgPSA8MHg0ODQ4MDAwMCAweDIwMDA+OworCQkJc3lzY29uLXJhbWluaXQgPSA8JmRyYTdfY3RybF9jb3JlIDB4NTU4IDE+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmc3lzX2Nsa2luMT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OwogCX07CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kcmE3Mi1ldm0uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNzItZXZtLmR0cwppbmRleCA0MTA3NDI4Li5hZmM3NGZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9kcmE3Mi1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcyLWV2bS5kdHMKQEAgLTE3LDYgKzE3LDEzIEBACiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CiAJCXJlZyA9IDwweDgwMDAwMDAwIDB4NDAwMDAwMDA+OyAvKiAxMDI0IE1CICovCiAJfTsKKworCWV2bV8zdjM6IGZpeGVkcmVndWxhdG9yLWV2bV8zdjMgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImV2bV8zdjMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJfTsKIH07CiAKICZkcmE3X3BteF9jb3JlIHsKQEAgLTI2LDYgKzMzLDk0IEBACiAJCQkweDQwNCAoUElOX0lOUFVUIHwgTVVYX01PREUwKSAvKiBpMmMxX3NjbC5pMmMxX3NjbCAqLwogCQk+OwogCX07CisKKwluYW5kX2RlZmF1bHQ6IG5hbmRfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDAJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQwICovCisJCQkweDQJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQxICovCisJCQkweDgJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQyICovCisJCQkweGMJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQzICovCisJCQkweDEwCShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkNCAqLworCQkJMHgxNAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDUgKi8KKwkJCTB4MTgJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQ2ICovCisJCQkweDFjCShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkNyAqLworCQkJMHgyMAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDggKi8KKwkJCTB4MjQJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQ5ICovCisJCQkweDI4CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkMTAgKi8KKwkJCTB4MmMJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQxMSAqLworCQkJMHgzMAkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDEyICovCisJCQkweDM0CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX2FkMTMgKi8KKwkJCTB4MzgJKFBJTl9JTlBVVCAgfCBNVVhfTU9ERTApIC8qIGdwbWNfYWQxNCAqLworCQkJMHgzYwkoUElOX0lOUFVUICB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZDE1ICovCisJCQkweGI0CShQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAvKiBncG1jX2NzMCAqLworCQkJMHhjNAkoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgLyogZ3BtY19hZHZuX2FsZSAqLworCQkJMHhjYwkoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgLyogZ3BtY193ZW4gKi8KKwkJCTB4YzgJKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApIC8qIGdwbWNfb2VuX3JlbiAqLworCQkJMHhkMAkoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgLyogZ3BtY19iZW4wICovCisJCQkweGQ4CShQSU5fSU5QVVQgIHwgTVVYX01PREUwKSAvKiBncG1jX3dhaXQwICovCisJCT47CisJfTsKKworCXVzYjFfcGluczogcGlubXV4X3VzYjFfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDI4MCAoUElOX0lOUFVUX1NMRVcgfCBNVVhfTU9ERTApIC8qIHVzYjFfZHJ2dmJ1cyAqLworCQk+OworCX07CisKKwl1c2IyX3BpbnM6IHBpbm11eF91c2IyX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgyODQgKFBJTl9JTlBVVF9TTEVXIHwgTVVYX01PREUwKSAvKiB1c2IyX2RydnZidXMgKi8KKwkJPjsKKwl9OworCisJdHBzNjU5MTdfcGluc19kZWZhdWx0OiB0cHM2NTkxN19waW5zX2RlZmF1bHQgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHg0MjQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIHdha2V1cDMuc3lzX25pcnExICovCisJCT47CisJfTsKKworCW1tYzFfcGluc19kZWZhdWx0OiBtbWMxX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDM2YyAoUElOX0lOUFVUIHwgTVVYX01PREUxNCkJLyogbW1jMXNkY2QuZ3BpbzIxOSAqLworCQkJMHgzNTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfY2xrLmNsayAqLworCQkJMHgzNTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfY21kLmNtZCAqLworCQkJMHgzNWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfZGF0MC5kYXQwICovCisJCQkweDM2MCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkgLyogbW1jMV9kYXQxLmRhdDEgKi8KKwkJCTB4MzY0IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKSAvKiBtbWMxX2RhdDIuZGF0MiAqLworCQkJMHgzNjggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIG1tYzFfZGF0My5kYXQzICovCisJCT47CisJfTsKKworCW1tYzJfcGluc19kZWZhdWx0OiBtbWMyX3BpbnNfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDljIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyMy5tbWMyX2NsayAqLworCQkJMHhiMCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19jczEubW1jMl9jbWQgKi8KKwkJCTB4YTAgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTI0Lm1tYzJfZGF0MCAqLworCQkJMHhhNCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjUubW1jMl9kYXQxICovCisJCQkweGE4IChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyNi5tbWMyX2RhdDIgKi8KKwkJCTB4YWMgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTI3Lm1tYzJfZGF0MyAqLworCQkJMHg4YyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMTkubW1jMl9kYXQ0ICovCisJCQkweDkwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUxKSAvKiBncG1jX2EyMC5tbWMyX2RhdDUgKi8KKwkJCTB4OTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTEpIC8qIGdwbWNfYTIxLm1tYzJfZGF0NiAqLworCQkJMHg5OCAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMSkgLyogZ3BtY19hMjIubW1jMl9kYXQ3ICovCisJCT47CisJfTsKKworCWRjYW4xX3BpbnNfZGVmYXVsdDogZGNhbjFfcGluc19kZWZhdWx0IHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4M2QwICAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApIC8qIGRjYW4xX3R4ICovCisJCQkweDNkNCAgIChNVVhfTU9ERTE1KQkJLyogZGNhbjFfcngub2ZmICovCisJCQkweDQxOCAgIChQVUxMX0RJUyB8IE1VWF9NT0RFMSkgLyogd2FrZXVwMC5kY2FuMV9yeCAqLworCQk+OworCX07CisKKwlkY2FuMV9waW5zX3NsZWVwOiBkY2FuMV9waW5zX3NsZWVwIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCTB4M2QwICAgKE1VWF9NT0RFMTUpCS8qIGRjYW4xX3R4Lm9mZiAqLworCQkJMHgzZDQgICAoTVVYX01PREUxNSkJLyogZGNhbjFfcngub2ZmICovCisJCQkweDQxOCAgIChNVVhfTU9ERTE1KQkvKiB3YWtldXAwLm9mZiAqLworCQk+OworCX07CiB9OwogCiAmaTJjMSB7CkBAIC0zOCw2ICsxMzMsOSBAQAogCQljb21wYXRpYmxlID0gInRpLHRwczY1OTE3IjsKIAkJcmVnID0gPDB4NTg+OwogCisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmdHBzNjU5MTdfcGluc19kZWZhdWx0PjsKKwogCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMiBJUlFfVFlQRV9OT05FPjsgIC8qIElSUV9TWVNfMU4gKi8KIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0xMzYsOSArMjM0LDIzMCBAQAogCQkJCX07CiAJCQl9OwogCQl9OworCisJCXRwczY1OTE3X3Bvd2VyX2J1dHRvbiB7CisJCQljb21wYXRpYmxlID0gInRpLHBhbG1hcy1wd3JidXR0b24iOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmdHBzNjU5MTc+OworCQkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX05PTkU+OworCQkJd2FrZXVwLXNvdXJjZTsKKwkJCXRpLHBhbG1hcy1sb25nLXByZXNzLXNlY29uZHMgPSA8Nj47CisJCX07CiAJfTsKIH07CiAKICZ1YXJ0MSB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJmVsbSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmdwbWMgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbmFuZF9kZWZhdWx0PjsKKwlyYW5nZXMgPSA8MCAwIDAgMHgwMTAwMDAwMD47CS8qIG1pbmltdW0gR1BNQyBwYXJ0aXRpb24gPSAxNk1CICovCisJbmFuZEAwLDAgeworCQkvKiBUbyB1c2UgTkFORCwgRElQIHN3aXRjaCBTVzUgbXVzdCBiZSBzZXQgbGlrZSBzbzoKKwkJICogU1c1LjEgKE5BTkRfU0VMbikgPSBPTiAoTE9XKQorCQkgKiBTVzUuOSAoR1BNQ19XUE4pID0gT0ZGIChISUdIKQorCQkgKi8KKwkJcmVnID0gPDAgMCA0PjsJCS8qIGRldmljZSBJTyByZWdpc3RlcnMgKi8KKwkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOworCQl0aSxlbG0taWQgPSA8JmVsbT47CisJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKKwkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8Mj47CisJCWdwbWMsc3luYy1jbGstcHMgPSA8MD47CisJCWdwbWMsY3Mtb24tbnMgPSA8MD47CisJCWdwbWMsY3MtcmQtb2ZmLW5zID0gPDgwPjsKKwkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8ODA+OworCQlncG1jLGFkdi1vbi1ucyA9IDwwPjsKKwkJZ3BtYyxhZHYtcmQtb2ZmLW5zID0gPDYwPjsKKwkJZ3BtYyxhZHYtd3Itb2ZmLW5zID0gPDYwPjsKKwkJZ3BtYyx3ZS1vbi1ucyA9IDwxMD47CisJCWdwbWMsd2Utb2ZmLW5zID0gPDUwPjsKKwkJZ3BtYyxvZS1vbi1ucyA9IDw0PjsKKwkJZ3BtYyxvZS1vZmYtbnMgPSA8NDA+OworCQlncG1jLGFjY2Vzcy1ucyA9IDw0MD47CisJCWdwbWMsd3ItYWNjZXNzLW5zID0gPDgwPjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDw4MD47CisJCWdwbWMsd3ItY3ljbGUtbnMgPSA8ODA+OworCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDA+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRlbGF5LW5zID0gPDA+OworCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDA+OworCQlncG1jLHdhaXQtbW9uaXRvcmluZy1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1kYXRhLW11eC1idXMtbnMgPSA8MD47CisJCS8qIE1URCBwYXJ0aXRpb24gdGFibGUgKi8KKwkJLyogQWxsIFNQTC0qIHBhcnRpdGlvbnMgYXJlIHNpemVkIHRvIG1pbmltYWwgbGVuZ3RoCisJCSAqIHdoaWNoIGNhbiBiZSBpbmRlcGVuZGVudGx5IHByb2dyYW1tYWJsZS4gRm9yCisJCSAqIE5BTkQgZmxhc2ggdGhpcyBpcyBlcXVhbCB0byBzaXplIG9mIGVyYXNlLWJsb2NrICovCisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcGFydGl0aW9uQDAgeworCQkJbGFiZWwgPSAiTkFORC5TUEwiOworCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMSB7CisJCQlsYWJlbCA9ICJOQU5ELlNQTC5iYWNrdXAxIjsKKwkJCXJlZyA9IDwweDAwMDIwMDAwIDB4MDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMiB7CisJCQlsYWJlbCA9ICJOQU5ELlNQTC5iYWNrdXAyIjsKKwkJCXJlZyA9IDwweDAwMDQwMDAwIDB4MDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMyB7CisJCQlsYWJlbCA9ICJOQU5ELlNQTC5iYWNrdXAzIjsKKwkJCXJlZyA9IDwweDAwMDYwMDAwIDB4MDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANCB7CisJCQlsYWJlbCA9ICJOQU5ELnUtYm9vdC1zcGwtb3MiOworCQkJcmVnID0gPDB4MDAwODAwMDAgMHgwMDA0MDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA1IHsKKwkJCWxhYmVsID0gIk5BTkQudS1ib290IjsKKwkJCXJlZyA9IDwweDAwMGMwMDAwIDB4MDAxMDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANiB7CisJCQlsYWJlbCA9ICJOQU5ELnUtYm9vdC1lbnYiOworCQkJcmVnID0gPDB4MDAxYzAwMDAgMHgwMDAyMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA3IHsKKwkJCWxhYmVsID0gIk5BTkQudS1ib290LWVudi5iYWNrdXAxIjsKKwkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDAwMjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AOCB7CisJCQlsYWJlbCA9ICJOQU5ELmtlcm5lbCI7CisJCQlyZWcgPSA8MHgwMDIwMDAwMCAweDAwODAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDkgeworCQkJbGFiZWwgPSAiTkFORC5maWxlLXN5c3RlbSI7CisJCQlyZWcgPSA8MHgwMGEwMDAwMCAweDBmNjAwMDAwPjsKKwkJfTsKKwl9OworfTsKKworJnVzYjJfcGh5MSB7CisJcGh5LXN1cHBseSA9IDwmbGRvNF9yZWc+OworfTsKKworJnVzYjJfcGh5MiB7CisJcGh5LXN1cHBseSA9IDwmbGRvNF9yZWc+OworfTsKKworJnVzYjEgeworCWRyX21vZGUgPSAicGVyaXBoZXJhbCI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVzYjFfcGlucz47Cit9OworCismdXNiMiB7CisJZHJfbW9kZSA9ICJob3N0IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdXNiMl9waW5zPjsKK307CisKKyZtbWMxIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm1tYzFfcGluc19kZWZhdWx0PjsKKworCXZtbWMtc3VwcGx5ID0gPCZsZG8xX3JlZz47CisJYnVzLXdpZHRoID0gPDQ+OworCS8qCisJICogU0RDRCBzaWduYWwgaXMgbm90IGJlaW5nIHVzZWQgaGVyZSAtIHVzaW5nIHRoZSBmYWN0IHRoYXQgR1BJTyBtb2RlCisJICogaXMgYSB2aWFibGUgYWx0ZXJuYXRpdmUKKwkgKi8KKwljZC1ncGlvcyA9IDwmZ3BpbzYgMjcgMD47Cit9OworCismbW1jMiB7CisJLyogU1c1LTMgaW4gT04gcG9zaXRpb24gKi8KKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm1tYzJfcGluc19kZWZhdWx0PjsKKworCXZtbWMtc3VwcGx5ID0gPCZldm1fM3YzPjsKKwlidXMtd2lkdGggPSA8OD47CisJdGksbm9uLXJlbW92YWJsZTsKK307CisKKyZkcmE3X3BteF9jb3JlIHsKKwljcHN3X2RlZmF1bHQ6IGNwc3dfZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBTbGF2ZSAyICovCisJCQkweDE5OCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDEyLnJnbWlpMV90eGMgKi8KKwkJCTB4MTljIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTMucmdtaWkxX3RjdGwgKi8KKwkJCTB4MWEwIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTQucmdtaWkxX3RkMyAqLworCQkJMHgxYTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QxNS5yZ21paTFfdGQyICovCisJCQkweDFhOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE2LnJnbWlpMV90ZDEgKi8KKwkJCTB4MWFjIChQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTcucmdtaWkxX3RkMCAqLworCQkJMHgxYjAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDE4LnJnbWlpMV9yY2xrICovCisJCQkweDFiNCAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMTkucmdtaWkxX3JjdGwgKi8KKwkJCTB4MWI4IChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QyMC5yZ21paTFfcmQzICovCisJCQkweDFiYyAoUElOX0lOUFVUIHwgTVVYX01PREUzKQkvKiB2aW4yYV9kMjEucmdtaWkxX3JkMiAqLworCQkJMHgxYzAgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMykJLyogdmluMmFfZDIyLnJnbWlpMV9yZDEgKi8KKwkJCTB4MWM0IChQSU5fSU5QVVQgfCBNVVhfTU9ERTMpCS8qIHZpbjJhX2QyMy5yZ21paTFfcmQwICovCisJCT47CisKKwl9OworCisJY3Bzd19zbGVlcDogY3Bzd19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBTbGF2ZSAyICovCisJCQkweDE5OCAoTVVYX01PREUxNSkKKwkJCTB4MTljIChNVVhfTU9ERTE1KQorCQkJMHgxYTAgKE1VWF9NT0RFMTUpCisJCQkweDFhNCAoTVVYX01PREUxNSkKKwkJCTB4MWE4IChNVVhfTU9ERTE1KQorCQkJMHgxYWMgKE1VWF9NT0RFMTUpCisJCQkweDFiMCAoTVVYX01PREUxNSkKKwkJCTB4MWI0IChNVVhfTU9ERTE1KQorCQkJMHgxYjggKE1VWF9NT0RFMTUpCisJCQkweDFiYyAoTVVYX01PREUxNSkKKwkJCTB4MWMwIChNVVhfTU9ERTE1KQorCQkJMHgxYzQgKE1VWF9NT0RFMTUpCisJCT47CisJfTsKKworCWRhdmluY2lfbWRpb19kZWZhdWx0OiBkYXZpbmNpX21kaW9fZGVmYXVsdCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkvKiBNRElPICovCisJCQkweDIzYyAoUElOX09VVFBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIG1kaW9fZC5tZGlvX2QgKi8KKwkJCTB4MjQwIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBtZGlvX2Nsay5tZGlvX2NsayAqLworCQk+OworCX07CisKKwlkYXZpbmNpX21kaW9fc2xlZXA6IGRhdmluY2lfbWRpb19zbGVlcCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQkweDIzYyAoTVVYX01PREUxNSkKKwkJCTB4MjQwIChNVVhfTU9ERTE1KQorCQk+OworCX07Cit9OworCismbWFjIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmNwc3dfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZjcHN3X3NsZWVwPjsKK307CisKKyZjcHN3X2VtYWMxIHsKKwlwaHlfaWQgPSA8JmRhdmluY2lfbWRpbz4sIDwzPjsKKwlwaHktbW9kZSA9ICJyZ21paSI7Cit9OworCismZGF2aW5jaV9tZGlvIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic2xlZXAiOworCXBpbmN0cmwtMCA9IDwmZGF2aW5jaV9tZGlvX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmZGF2aW5jaV9tZGlvX3NsZWVwPjsKKwlhY3RpdmVfc2xhdmUgPSA8MT47Cit9OworCismZGNhbjEgeworCXN0YXR1cyA9ICJvayI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwlwaW5jdHJsLTAgPSA8JmRjYW4xX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZkY2FuMV9waW5zX3NsZWVwPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kcmE3NHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTc0eC5kdHNpCmluZGV4IDNiZTU0NGMuLjEwMTczZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTc0eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTc0eC5kdHNpCkBAIC00NCw0ICs0NCwyNiBAQAogCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgRElSRUNUX0lSUSgxMzEpIElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJICAgICA8R0lDX1NQSSBESVJFQ1RfSVJRKDEzMikgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJfTsKKworCW9jcCB7CisJCW9tYXBfZHdjM180OiBvbWFwX2R3YzNfNEA0ODk0MDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGR3YzMiOworCQkJdGksaHdtb2RzID0gInVzYl9vdGdfc3M0IjsKKwkJCXJlZyA9IDwweDQ4OTQwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM0NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQl1dG1pLW1vZGUgPSA8Mj47CisJCQlyYW5nZXM7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJdXNiNDogdXNiQDQ4OTUwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gInNucHMsZHdjMyI7CisJCQkJcmVnID0gPDB4NDg5NTAwMDAgMHgxNzAwMD47CisJCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM0NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCQl0eC1maWZvLXJlc2l6ZTsKKwkJCQltYXhpbXVtLXNwZWVkID0gImhpZ2gtc3BlZWQiOworCQkJCWRyX21vZGUgPSAib3RnIjsKKwkJCX07CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9lbWV2Mi1rem05ZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9lbWV2Mi1rem05ZC5kdHMKaW5kZXggNTBjY2QxNS4uNjY3ZDMyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZW1ldjIta3ptOWQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2VtZXYyLWt6bTlkLmR0cwpAQCAtMjUsMzcgKzI1LDcgQEAKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzEsMTE1MjAwbjgxIGlnbm9yZV9sb2dsZXZlbCByb290PS9kZXYvbmZzIGlwPWRoY3AiOwotCX07Ci0KLQlyZWdfMXA4djogcmVndWxhdG9yQDAgewotCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7Ci0JCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTEuOFYiOwotCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCXJlZ3VsYXRvci1ib290LW9uOwotCX07Ci0KLQlyZWdfM3AzdjogcmVndWxhdG9yQDEgewotCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7Ci0JCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTMuM1YiOwotCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0JCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCXJlZ3VsYXRvci1ib290LW9uOwotCX07Ci0KLQlsYW45MjIwQDIwMDAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkyMjAiLCAic21zYyxsYW45MTE1IjsKLQkJcmVnID0gPDB4MjAwMDAwMDAgMHgxMDAwMD47Ci0JCXBoeS1tb2RlID0gIm1paSI7Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8wPjsKLQkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0VER0VfUklTSU5HPjsKLQkJcmVnLWlvLXdpZHRoID0gPDQ+OwotCQlzbXNjLGlycS1hY3RpdmUtaGlnaDsKLQkJc21zYyxpcnEtcHVzaC1wdWxsOwotCQl2ZGR2YXJpby1zdXBwbHkgPSA8JnJlZ18xcDh2PjsKLQkJdmRkMzNhLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MTsKIAl9OwogCiAJZ3Bpb19rZXlzIHsKQEAgLTkyLDQgKzYyLDM1IEBACiAJCQlncGlvcyA9IDwmZ3BpbzAgMTcgR1BJT19BQ1RJVkVfSElHSD47CiAJCX07CiAJfTsKKworCXJlZ18xcDh2OiByZWd1bGF0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMS44ViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJfTsKKworCXJlZ18zcDN2OiByZWd1bGF0b3JAMSB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMy4zViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJfTsKKworCWxhbjkyMjBAMjAwMDAwMDAgeworCQljb21wYXRpYmxlID0gInNtc2MsbGFuOTIyMCIsICJzbXNjLGxhbjkxMTUiOworCQlyZWcgPSA8MHgyMDAwMDAwMCAweDEwMDAwPjsKKwkJcGh5LW1vZGUgPSAibWlpIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzA+OworCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfRURHRV9SSVNJTkc+OworCQlyZWctaW8td2lkdGggPSA8ND47CisJCXNtc2MsaXJxLWFjdGl2ZS1oaWdoOworCQlzbXNjLGlycS1wdXNoLXB1bGw7CisJCXZkZHZhcmlvLXN1cHBseSA9IDwmcmVnXzFwOHY+OworCQl2ZGQzM2Etc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9lbWV2Mi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZW1ldjIuZHRzaQppbmRleCAwMGVlZWQzLi5jYzdiZmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9lbWV2Mi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2VtZXYyLmR0c2kKQEAgLTU1LDcgKzU1LDcgQEAKIAkJCSAgICAgPDAgMTIxIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCX07CiAKLQlzbXVAZTAxMTAwMDAgeworCWNsb2Nrc0BlMDExMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxlbWV2Mi1zbXUiOwogCQlyZWcgPSA8MHhlMDExMDAwMCAweDEwMDAwPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CkBAIC0xMjksNyArMTI5LDcgQEAKIAkJfTsKIAl9OwogCi0Jc3RpQGUwMTgwMDAwIHsKKwl0aW1lckBlMDE4MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxlbS1zdGkiOwogCQlyZWcgPSA8MHhlMDE4MDAwMCAweDU0PjsKIAkJaW50ZXJydXB0cyA9IDwwIDEyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQljbG9jay1uYW1lcyA9ICJzY2xrIjsKIAl9OwogCi0JdWFydEBlMTAyMDAwMCB7CisJdWFydDA6IHNlcmlhbEBlMTAyMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxlbS11YXJ0IjsKIAkJcmVnID0gPDB4ZTEwMjAwMDAgMHgzOD47CiAJCWludGVycnVwdHMgPSA8MCA4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCWNsb2NrLW5hbWVzID0gInNjbGsiOwogCX07CiAKLQl1YXJ0QGUxMDMwMDAwIHsKKwl1YXJ0MTogc2VyaWFsQGUxMDMwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGVtLXVhcnQiOwogCQlyZWcgPSA8MHhlMTAzMDAwMCAweDM4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAic2NsayI7CiAJfTsKIAotCXVhcnRAZTEwNDAwMDAgeworCXVhcnQyOiBzZXJpYWxAZTEwNDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsZW0tdWFydCI7CiAJCXJlZyA9IDwweGUxMDQwMDAwIDB4Mzg+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAic2NsayI7CiAJfTsKIAotCXVhcnRAZTEwNTAwMDAgeworCXVhcnQzOiBzZXJpYWxAZTEwNTAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsZW0tdWFydCI7CiAJCXJlZyA9IDwweGUxMDUwMDAwIDB4Mzg+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLW1vbmsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC1tb25rLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDgyMmFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC1tb25rLmR0cwpAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIFNhbXN1bmcncyBFeHlub3MzMjUwIGJhc2VkIE1vbmsgYm9hcmQgZGV2aWNlIHRyZWUgc291cmNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIERldmljZSB0cmVlIHNvdXJjZSBmaWxlIGZvciBTYW1zdW5nJ3MgTW9uayBib2FyZCB3aGljaCBpcyBiYXNlZCBvbgorICogU2Ftc3VuZyBFeHlub3MzMjUwIFNvQy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgImV4eW5vczMyNTAuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgorCisvIHsKKwltb2RlbCA9ICJTYW1zdW5nIE1vbmsgYm9hcmQiOworCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxtb25rIiwgInNhbXN1bmcsZXh5bm9zMzI1MCIsICJzYW1zdW5nLGV4eW5vczMiOworCisJYWxpYXNlcyB7CisJCWkyYzcgPSAmaTJjX21heDc3ODM2OworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSAgPDB4NDAwMDAwMDAgMHgxZmYwMDAwMD47CisJfTsKKworCWZpcm13YXJlQDAyMDVGMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHNlY3VyZS1maXJtd2FyZSI7CisJCXJlZyA9IDwweDAyMDVGMDAwIDB4MTAwMD47CisJfTsKKworCWdwaW9fa2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKworCQlwb3dlcl9rZXkgeworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mj47CisJCQlpbnRlcnJ1cHRzID0gPDcgMD47CisJCQlncGlvcyA9IDwmZ3B4MiA3IDE+OworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OworCQkJbGFiZWwgPSAicG93ZXIga2V5IjsKKwkJCWRlYm91bmNlLWludGVydmFsID0gPDEwPjsKKwkJCWdwaW8ta2V5LHdha2V1cDsKKwkJfTsKKwl9OworCisJdmVtbWNfcmVnOiB2b2x0YWdlLXJlZ3VsYXRvci0wIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0VNTUNfMi44Vi1maXhlZCI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BrMCAyIDA+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJfTsKKworCWkyY19tYXg3NzgzNjogaTJjLWdwaW8tMCB7CisJCWNvbXBhdGlibGUgPSAiaTJjLWdwaW8iOworCQlncGlvcyA9IDwmZ3BkMCAyIDA+LCA8JmdwZDAgMyAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCW1heDc3ODM2OiBzdWJwbWljQDI1IHsKKwkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYiOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4MT47CisJCQlpbnRlcnJ1cHRzID0gPDUgMD47CisJCQlyZWcgPSA8MHgyNT47CisJCQl3YWtldXA7CisKKwkJCW11aWM6IG1heDc3ODM2LW11aWMgeworCQkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtbXVpYyI7CisJCQl9OworCisJCQlyZWd1bGF0b3JzIHsKKwkJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2LXJlZ3VsYXRvciI7CisJCQkJc2FmZW91dF9yZWc6IFNBRkVPVVQgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJTQUZFT1VUIjsKKwkJCQl9OworCisJCQkJY2hhcmdlcl9yZWc6IENIQVJHRVIgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJDSEFSR0VSIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb2FtcCA9IDw0NTAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm9hbXAgPSA8NDc1MDAwPjsKKwkJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJfTsKKworCQkJCW1vdG9yX3JlZzogTERPMSB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIk1PVF8yLjdWIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI3MDAwMDA+OworCQkJCX07CisKKwkJCQlMRE8yIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzIiOworCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4MDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzOTUwMDAwPjsKKwkJCQl9OworCQkJfTsKKworCQkJY2hhcmdlciB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgzNi1jaGFyZ2VyIjsKKworCQkJCW1heGltLGNvbnN0YW50LXV2b2x0ID0gPDQzNTAwMDA+OworCQkJCW1heGltLGZhc3QtY2hhcmdlLXVhbXAgPSA8MjI1MDAwPjsKKwkJCQltYXhpbSxlb2MtdWFtcCA9IDw3NTAwPjsKKwkJCQltYXhpbSxvdnAtdXZvbHQgPSA8NjUwMDAwMD47CisJCQl9OworCQl9OworCX07Cit9OworCismYWRjIHsKKwl2ZGQtc3VwcGx5ID0gPCZsZG8zX3JlZz47CisJc3RhdHVzID0gIm9rYXkiOworCWFzc2lnbmVkLWNsb2NrcyA9IDwmY211IENMS19TQ0xLX1RTQURDPjsKKwlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDw2MDAwMDAwPjsKKworCXRoZXJtaXN0b3ItYXAgeworCQljb21wYXRpYmxlID0gIm50YyxuY3AxNXdiNDczIjsKKwkJcHVsbHVwLXV2ID0gPDE4MDAwMDA+OworCQlwdWxsdXAtb2htID0gPDEwMDAwMD47CisJCXB1bGxkb3duLW9obSA9IDwxMDAwMDA+OworCQlpby1jaGFubmVscyA9IDwmYWRjIDA+OworCX07CisKKwl0aGVybWlzdG9yLWJhdHRlcnkgeworCQljb21wYXRpYmxlID0gIm50YyxuY3AxNXdiNDczIjsKKwkJcHVsbHVwLXV2ID0gPDE4MDAwMDA+OworCQlwdWxsdXAtb2htID0gPDEwMDAwMD47CisJCXB1bGxkb3duLW9obSA9IDwxMDAwMDA+OworCQlpby1jaGFubmVscyA9IDwmYWRjIDE+OworCX07Cit9OworCismaTJjXzAgeworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDA+OworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHgxMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDEwMDAwMD47CisJc3RhdHVzID0gIm9rYXkiOworCisJczJtcHMxNF9wbWljQDY2IHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMybXBzMTQtcG1pYyI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDA+OworCQlpbnRlcnJ1cHRzID0gPDcgMD47CisJCXJlZyA9IDwweDY2PjsKKwkJd2FrZXVwOworCisJCXMybXBzMTRfb3NjOiBjbG9ja3MgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMybXBzMTQtY2xrIjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJzMm1wczE0X2FwIiwgInVudXNlZCIsCisJCQkJInMybXBzMTRfYnQiOworCQl9OworCisJCXJlZ3VsYXRvcnMgeworCQkJbGRvMV9yZWc6IExETzEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9BTElWRV8xLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvMl9yZWc6IExETzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9NMV8xLjJWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvM19yZWc6IExETzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZDQ19BUF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvNF9yZWc6IExETzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9BVkREX1BMTDEiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG81X3JlZzogTERPNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX1BMTF9JU09fMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzZfcmVnOiBMRE82IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfTUlQSV8xLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzdfcmVnOiBMRE83IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfQVZERF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvOF9yZWc6IExETzggeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9VU0JfMy4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzlfcmVnOiBMRE85IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0xQRERSXzEuMlYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG8xMF9yZWc6IExETzEwIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMTAiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJfTsKKworCQkJbGRvMTFfcmVnOiBMRE8xMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVl9FTU1DXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXNhbXN1bmcsZXh0LWNvbnRyb2wtZ3Bpb3MgPSA8JmdwazAgMiAwPjsKKwkJCX07CisKKwkJCWxkbzEyX3JlZzogTERPMTIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZfRU1NQ18yLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlzYW1zdW5nLGV4dC1jb250cm9sLWdwaW9zID0gPCZncGswIDIgMD47CisJCQl9OworCisJCQlsZG8xM19yZWc6IExETzEzIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWU0VOU09SXzIuODVWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvMTRfcmVnOiBMRE8xNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzE0IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzE1X3JlZzogTERPMTUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlRTUF9BVkREXzMuM1YiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJfTsKKworCQkJbGRvMTZfcmVnOiBMRE8xNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiTENEX1ZERF8zLjNWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzE3X3JlZzogTERPMTcgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8xNyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8xOF9yZWc6IExETzE4IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMTgiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJfTsKKworCQkJbGRvMTlfcmVnOiBMRE8xOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVFNQX1ZERF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzIwX3JlZzogTERPMjAgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkxDRF9WRERfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8yMV9yZWc6IExETzIxIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMjEiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJfTsKKworCQkJbGRvMjJfcmVnOiBMRE8yMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzIyIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzIzX3JlZzogTERPMjMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8yMyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWxkbzI0X3JlZzogTERPMjQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8yNCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8yNV9yZWc6IExETzI1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJVTlVTRURfTERPMjUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJfTsKKworCQkJYnVjazFfcmVnOiBCVUNLMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX01JRl8xLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDkwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWJ1Y2syX3JlZzogQlVDSzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9BUk1fMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJYnVjazNfcmVnOiBCVUNLMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX0lOVDNEXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWJ1Y2s0X3JlZzogQlVDSzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZDQ19TVUJfMS45NVYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlidWNrNV9yZWc6IEJVQ0s1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQ0NfU1VCXzEuMzVWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmkyY18xIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4MTA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw0MDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCWZ1ZWxnYXVnZUAzNiB7CisJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtYmF0dGVyeSI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OworCQlpbnRlcnJ1cHRzID0gPDIgOD47CisJCXJlZyA9IDwweDM2PjsKKwl9OworfTsKKworJmkyczIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtc2hjXzAgeworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDA+OworCW51bS1zbG90cyA9IDwxPjsKKwlicm9rZW4tY2Q7CisJbm9uLXJlbW92YWJsZTsKKwljYXAtbW1jLWhpZ2hzcGVlZDsKKwlkZXNjLW51bSA9IDw0PjsKKwltbWMtaHMyMDAtMV84djsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXZtbWMtc3VwcGx5ID0gPCZ2ZW1tY19yZWc+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCWNsb2NrLWZyZXEtbWluLW1heCA9IDw0MDAwMDAgMTAwMDAwMDAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwxPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwwIDE+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9jbWQgJnNkMF9idXMxICZzZDBfYnVzNCAmc2QwX2J1czg+OworCWJ1cy13aWR0aCA9IDw4PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2VyaWFsXzAgeworCWFzc2lnbmVkLWNsb2NrcyA9IDwmY211IENMS19TQ0xLX1VBUlQwPjsKKwlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwxMDAwMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzZXJpYWxfMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnRtdSB7CisJdnRtdS1zdXBwbHkgPSA8JmxkbzdfcmVnPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcnRjIHsKKwljbG9ja3MgPSA8JmNtdSBDTEtfUlRDPiwgPCZzMm1wczE0X29zYyAwPjsKKwljbG9jay1uYW1lcyA9ICJydGMiLCAicnRjX3NyYyI7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnh1c2J4dGkgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47Cit9OworCismcGluY3RybF8wIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAwPjsKKworCXNsZWVwMDogc2xlZXAtc3RhdGUgeworCQlQSU5fU0xQKGdwYTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BhMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS01LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGItMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwYi0yLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGItMywgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGItNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYi02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BiLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYzAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtNCwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BjMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS00LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGQwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQwLTMsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZDEtMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMywgSU5QVVQsIE5PTkUpOworCX07Cit9OworCismcGluY3RybF8xIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAxPjsKKworCXNsZWVwMTogc2xlZXAtc3RhdGUgeworCQlQSU5fU0xQKGdwZTAtMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMC0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGUwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUwLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUwLTQsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwZTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BlMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMS0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGUxLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTcsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZTItMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZTItMSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZTItMiwgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BrMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMC0yLCBPVVQwLCBOT05FKTsKKwkJUElOX1NMUChncGswLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwazEtMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMS0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGsxLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsxLTMsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazEtNCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMS01LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGsxLTYsIFBSRVYsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BrMi0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGwwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGwwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGwwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGwwLTMsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0yLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTQsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTMtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTMtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtNC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtNC03LCBJTlBVVCwgRE9XTik7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXBpbmN0cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtcGluY3RybC5kdHNpCmluZGV4IDQ3YjkyYzEuLjVhYjgxYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtcGluY3RybC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtcGluY3RybC5kdHNpCkBAIC0xMiw2ICsxMiwyMiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqLwogCisjZGVmaW5lIFBJTl9QVUxMX05PTkUJCTAKKyNkZWZpbmUgUElOX1BVTExfRE9XTgkJMQorI2RlZmluZSBQSU5fUFVMTF9VUAkJMworCisjZGVmaW5lIFBJTl9QRE5fT1VUMAkJMAorI2RlZmluZSBQSU5fUEROX09VVDEJCTEKKyNkZWZpbmUgUElOX1BETl9JTlBVVAkJMgorI2RlZmluZSBQSU5fUEROX1BSRVYJCTMKKworI2RlZmluZSBQSU5fU0xQKF9waW4sIF9tb2RlLCBfcHVsbCkJCQkJXAorCV9waW4gewkJCQkJCQlcCisJCXNhbXN1bmcscGlucyA9ICNfcGluOwkJCQlcCisJCXNhbXN1bmcscGluLWNvbi1wZG4gPSA8UElOX1BETl8gIyNfbW9kZT47CVwKKwkJc2Ftc3VuZyxwaW4tcHVkLXBkbiA9IDxQSU5fUFVMTF8gIyNfcHVsbD47CVwKKwl9CisKICZwaW5jdHJsXzAgewogCWdwYTA6IGdwYTAgewogCQlncGlvLWNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXJpbmF0by5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLXJpbmF0by5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhYThiNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAtcmluYXRvLmR0cwpAQCAtMCwwICsxLDY4MiBAQAorLyoKKyAqIFNhbXN1bmcncyBFeHlub3MzMjUwIGJhc2VkIFJpbmF0byBib2FyZCBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogRGV2aWNlIHRyZWUgc291cmNlIGZpbGUgZm9yIFNhbXN1bmcncyBSaW5hdG8gYm9hcmQgd2hpY2ggaXMgYmFzZWQgb24KKyAqIFNhbXN1bmcgRXh5bm9zMzI1MCBTb0MuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJleHlub3MzMjUwLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKworLyB7CisJbW9kZWwgPSAiU2Ftc3VuZyBSaW5hdG8gYm9hcmQiOworCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxyaW5hdG8iLCAic2Ftc3VuZyxleHlub3MzMjUwIiwgInNhbXN1bmcsZXh5bm9zMyI7CisKKwlhbGlhc2VzIHsKKwkJaTJjNyA9ICZpMmNfbWF4Nzc4MzY7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9ICA8MHg0MDAwMDAwMCAweDFmZjAwMDAwPjsKKwl9OworCisJZmlybXdhcmVAMDIwNUYwMDAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsc2VjdXJlLWZpcm13YXJlIjsKKwkJcmVnID0gPDB4MDIwNUYwMDAgMHgxMDAwPjsKKwl9OworCisJZ3Bpb19rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCisJCXBvd2VyX2tleSB7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgyPjsKKwkJCWludGVycnVwdHMgPSA8NyAwPjsKKwkJCWdwaW9zID0gPCZncHgyIDcgMT47CisJCQlsaW51eCxjb2RlID0gPEtFWV9QT1dFUj47CisJCQlsYWJlbCA9ICJwb3dlciBrZXkiOworCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8MTA+OworCQkJZ3Bpby1rZXksd2FrZXVwOworCQl9OworCX07CisKKwlpMmNfbWF4Nzc4MzY6IGkyYy1ncGlvLTAgeworCQljb21wYXRpYmxlID0gImkyYy1ncGlvIjsKKwkJZ3Bpb3MgPSA8JmdwZDAgMiAwPiwgPCZncGQwIDMgMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQltYXg3NzgzNjogc3VicG1pY0AyNSB7CisJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2IjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OworCQkJaW50ZXJydXB0cyA9IDw1IDA+OworCQkJcmVnID0gPDB4MjU+OworCQkJd2FrZXVwOworCisJCQltdWljOiBtYXg3NzgzNi1tdWljIHsKKwkJCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3ODM2LW11aWMiOworCQkJfTsKKworCQkJcmVndWxhdG9ycyB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgzNi1yZWd1bGF0b3IiOworCQkJCXNhZmVvdXRfcmVnOiBTQUZFT1VUIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiU0FGRU9VVCI7CisJCQkJfTsKKworCQkJCWNoYXJnZXJfcmVnOiBDSEFSR0VSIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiQ0hBUkdFUiI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm9hbXAgPSA8NDUwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3JvYW1wID0gPDQ3NTAwMD47CisJCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCX07CisKKwkJCQltb3Rvcl9yZWc6IExETzEgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJNT1RfMi43ViI7CisJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyNzAwMDAwPjsKKwkJCQl9OworCisJCQkJTERPMiB7CisJCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8yIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODAwMDAwPjsKKwkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8Mzk1MDAwMD47CisJCQkJfTsKKwkJCX07CisKKwkJCWNoYXJnZXIgeworCQkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtY2hhcmdlciI7CisKKwkJCQltYXhpbSxjb25zdGFudC11dm9sdCA9IDw0MzUwMDAwPjsKKwkJCQltYXhpbSxmYXN0LWNoYXJnZS11YW1wID0gPDIyNTAwMD47CisJCQkJbWF4aW0sZW9jLXVhbXAgPSA8NzUwMD47CisJCQkJbWF4aW0sb3ZwLXV2b2x0ID0gPDY1MDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmFkYyB7CisJdmRkLXN1cHBseSA9IDwmbGRvM19yZWc+OworCXN0YXR1cyA9ICJva2F5IjsKKwlhc3NpZ25lZC1jbG9ja3MgPSA8JmNtdSBDTEtfU0NMS19UU0FEQz47CisJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8NjAwMDAwMD47CisKKwl0aGVybWlzdG9yLWFwIHsKKwkJY29tcGF0aWJsZSA9ICJudGMsbmNwMTV3YjQ3MyI7CisJCXB1bGx1cC11diA9IDwxODAwMDAwPjsKKwkJcHVsbHVwLW9obSA9IDwxMDAwMDA+OworCQlwdWxsZG93bi1vaG0gPSA8MTAwMDAwPjsKKwkJaW8tY2hhbm5lbHMgPSA8JmFkYyAwPjsKKwl9OworCisJdGhlcm1pc3Rvci1iYXR0ZXJ5IHsKKwkJY29tcGF0aWJsZSA9ICJudGMsbmNwMTV3YjQ3MyI7CisJCXB1bGx1cC11diA9IDwxODAwMDAwPjsKKwkJcHVsbHVwLW9obSA9IDwxMDAwMDA+OworCQlwdWxsZG93bi1vaG0gPSA8MTAwMDAwPjsKKwkJaW8tY2hhbm5lbHMgPSA8JmFkYyAxPjsKKwl9OworfTsKKworJmkyY18wIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4MTA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwxMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXMybXBzMTRfcG1pY0A2NiB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczE0LXBtaWMiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgwPjsKKwkJaW50ZXJydXB0cyA9IDw3IDA+OworCQlyZWcgPSA8MHg2Nj47CisJCXdha2V1cDsKKworCQlzMm1wczE0X29zYzogY2xvY2tzIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczE0LWNsayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiczJtcHMxNF9hcCIsICJ1bnVzZWQiLAorCQkJCSJzMm1wczE0X2J0IjsKKwkJfTsKKworCQlyZWd1bGF0b3JzIHsKKwkJCWxkbzFfcmVnOiBMRE8xIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfQUxJVkVfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb24taW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMl9yZWc6IExETzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9NMV8xLjJWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvM19yZWc6IExETzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZDQ19BUF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvNF9yZWc6IExETzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9BVkREX1BMTDEiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG81X3JlZzogTERPNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX1BMTF9JU09fMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzZfcmVnOiBMRE82IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfVk1JUElfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzdfcmVnOiBMRE83IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfQVZERF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvOF9yZWc6IExETzggeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZBUF9VU0JfMy4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzlfcmVnOiBMRE85IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0xQRERSXzEuMlYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9uLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzEwX3JlZzogTERPMTAgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8xMCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8xMV9yZWc6IExETzExIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWX0VNTUNfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJc2Ftc3VuZyxleHQtY29udHJvbC1ncGlvcyA9IDwmZ3BrMCAyIDA+OworCQkJfTsKKworCQkJbGRvMTJfcmVnOiBMRE8xMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVl9FTU1DXzIuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXNhbXN1bmcsZXh0LWNvbnRyb2wtZ3Bpb3MgPSA8JmdwazAgMiAwPjsKKwkJCX07CisKKwkJCWxkbzEzX3JlZzogTERPMTMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkNBTV9BVkREXzIuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMTRfcmVnOiBMRE8xNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVU5VU0VEX0xETzE0IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyNzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyNzAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzE1X3JlZzogTERPMTUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlRTUF9BVkREXzMuM1YiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMTZfcmVnOiBMRE8xNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiTENEX1ZERF8zLjNWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzE3X3JlZzogTERPMTcgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZfSVJMRURfMy4zViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8xOF9yZWc6IExETzE4IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJDQU1fQUZfMi44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlsZG8xOV9yZWc6IExETzE5IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJUU1BfVkREXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMjBfcmVnOiBMRE8yMCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiTENEX1ZERF8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzIxX3JlZzogTERPMjEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkNBTV9JT18xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzIyX3JlZzogTERPMjIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkNBTV9EVkREXzEuMlYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJbGRvMjNfcmVnOiBMRE8yMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiSFJNX1ZDQ18xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvMjRfcmVnOiBMRE8yNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiSFJNX1ZDQ18zLjNWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb2ZmLWluLXN1c3BlbmQ7CisJCQkJfTsKKwkJCX07CisKKwkJCWxkbzI1X3JlZzogTERPMjUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlVOVVNFRF9MRE8yNSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlidWNrMV9yZWc6IEJVQ0sxIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfTUlGXzEuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8OTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJYnVjazJfcmVnOiBCVUNLMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkFQX0FSTV8xLjBWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExNTAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisKKwkJCQlyZWd1bGF0b3Itc3RhdGUtbWVtIHsKKwkJCQkJcmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kOworCQkJCX07CisJCQl9OworCisJCQlidWNrM19yZWc6IEJVQ0szIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQVBfSU5UM0RfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCisJCQkJcmVndWxhdG9yLXN0YXRlLW1lbSB7CisJCQkJCXJlZ3VsYXRvci1vZmYtaW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJYnVjazRfcmVnOiBCVUNLNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkNDX1NVQl8xLjk1ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTk1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTk1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb24taW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKworCQkJYnVjazVfcmVnOiBCVUNLNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkNDX1NVQl8xLjM1ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKworCQkJCXJlZ3VsYXRvci1zdGF0ZS1tZW0geworCQkJCQlyZWd1bGF0b3Itb24taW4tc3VzcGVuZDsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmkyY18xIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4MTA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw0MDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCWZ1ZWxnYXVnZUAzNiB7CisJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc4MzYtYmF0dGVyeSI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OworCQlpbnRlcnJ1cHRzID0gPDIgOD47CisJCXJlZyA9IDwweDM2PjsKKwl9OworfTsKKworJmkyczIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtZmMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtc2hjXzAgeworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDA+OworCW51bS1zbG90cyA9IDwxPjsKKwlicm9rZW4tY2Q7CisJbm9uLXJlbW92YWJsZTsKKwljYXAtbW1jLWhpZ2hzcGVlZDsKKwlkZXNjLW51bSA9IDw0PjsKKwltbWMtaHMyMDAtMV84djsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXZtbWMtc3VwcGx5ID0gPCZsZG8xMl9yZWc+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OworCWNsb2NrLWZyZXEtbWluLW1heCA9IDw0MDAwMDAgMTAwMDAwMDAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwxPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwwIDE+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9jbWQgJnNkMF9idXMxICZzZDBfYnVzNCAmc2QwX2J1czg+OworCWJ1cy13aWR0aCA9IDw4PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc2VyaWFsXzAgeworCWFzc2lnbmVkLWNsb2NrcyA9IDwmY211IENMS19TQ0xLX1VBUlQwPjsKKwlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwxMDAwMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzZXJpYWxfMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnRtdSB7CisJdnRtdS1zdXBwbHkgPSA8JmxkbzdfcmVnPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcnRjIHsKKwljbG9ja3MgPSA8JmNtdSBDTEtfUlRDPiwgPCZzMm1wczE0X29zYyAwPjsKKwljbG9jay1uYW1lcyA9ICJydGMiLCAicnRjX3NyYyI7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnh1c2J4dGkgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNDAwMDAwMD47Cit9OworCismcGluY3RybF8wIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAwPjsKKworCXNsZWVwMDogc2xlZXAtc3RhdGUgeworCQlQSU5fU0xQKGdwYTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BhMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BhMS01LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGItMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwYi0yLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGItMywgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGItNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYi02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BiLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYzAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYzAtNCwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BjMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BjMS00LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGQwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQwLTMsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZDEtMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMywgSU5QVVQsIE5PTkUpOworCX07Cit9OworCismcGluY3RybF8xIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAxPjsKKworCXNsZWVwMTogc2xlZXAtc3RhdGUgeworCQlQSU5fU0xQKGdwZTAtMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMC0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGUwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUwLTMsIElOUFVULCBVUCk7CisJCVBJTl9TTFAoZ3BlMC00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BlMC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGUxLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGUxLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwZTEtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZTEtNywgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BlMi0wLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMi0xLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BlMi0yLCBJTlBVVCwgTk9ORSk7CisKKwkJUElOX1NMUChncGswLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGswLTIsIE9VVDAsIE5PTkUpOworCQlQSU5fU0xQKGdwazAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BrMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMS02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGsyLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsyLTYsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbDAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbDAtMywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0xLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0xLTYsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTItMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTItMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTItMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTItMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTItNCwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMy0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG00LTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTcsIElOUFVULCBET1dOKTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczMyNTAuZHRzaQppbmRleCA2OTNhMzI3Li4yNDJkZGRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3MzMjUwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zMzI1MC5kdHNpCkBAIC0zMjAsNiArMzIwLDE2IEBACiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCisJCW1mYzogY29kZWNAMTM0MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLG1mYy12NyI7CisJCQlyZWcgPSA8MHgxMzQwMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMDIgMD47CisJCQljbG9jay1uYW1lcyA9ICJtZmMiLCAic2Nsa19tZmMiOworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX01GQz4sIDwmY211IENMS19TQ0xLX01GQz47CisJCQlzYW1zdW5nLHBvd2VyLWRvbWFpbiA9IDwmcGRfbWZjPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAkJc2VyaWFsXzA6IHNlcmlhbEAxMzgwMDAwMCB7CiAJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKIAkJCXJlZyA9IDwweDEzODAwMDAwIDB4MTAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQuZHRzaQppbmRleCBlMDI3OGVjLi5iODE2OGYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNC5kdHNpCkBAIC0zOTIsOCArMzkyLDggQEAKIAkJcmVnID0gPDB4MTM0MDAwMDAgMHgxMDAwMD47CiAJCWludGVycnVwdHMgPSA8MCA5NCAwPjsKIAkJc2Ftc3VuZyxwb3dlci1kb21haW4gPSA8JnBkX21mYz47Ci0JCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01GQz47Ci0JCWNsb2NrLW5hbWVzID0gIm1mYyI7CisJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01GQz4sIDwmY2xvY2sgQ0xLX1NDTEtfTUZDPjsKKwkJY2xvY2stbmFtZXMgPSAibWZjIiwgInNjbGtfbWZjIjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLXRyYXRzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdHJhdHMuZHRzCmluZGV4IGY1MTZkYTkuLjcyMDgzNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdHJhdHMuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdHJhdHMuZHRzCkBAIC00MzEsMTggKzQzMSwzNCBAQAogCiAJCWZpbWNfMDogZmltY0AxMTgwMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMwPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMD47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfU0NMS19NUExMPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTYwMDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzE6IGZpbWNAMTE4MTAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMT4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzE+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX1NDTEtfTVBMTD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE2MDAwMDAwMD47CiAJCX07CiAKIAkJZmltY18yOiBmaW1jQDExODIwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzI+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMyPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19TQ0xLX01QTEw+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNjAwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMzogZmltY0AxMTgzMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMzPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMz47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfU0NMS19NUExMPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTYwMDAwMDAwPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAtdW5pdmVyc2FsX2MyMTAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC11bml2ZXJzYWxfYzIxMC5kdHMKaW5kZXggZDUwZWIzYS4uYWFmMGNhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC11bml2ZXJzYWxfYzIxMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC11bml2ZXJzYWxfYzIxMC5kdHMKQEAgLTQ3MywxOCArNDczLDM0IEBACiAKIAkJZmltY18wOiBmaW1jQDExODAwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzA+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMwPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19TQ0xLX01QTEw+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNjAwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMTogZmltY0AxMTgxMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMxPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMT47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfU0NMS19NUExMPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTYwMDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzI6IGZpbWNAMTE4MjAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMj4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzI+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX1NDTEtfTVBMTD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE2MDAwMDAwMD47CiAJCX07CiAKIAkJZmltY18zOiBmaW1jQDExODMwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzM+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMzPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19TQ0xLX01QTEw+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNjAwMDAwMDA+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC5kdHNpCmluZGV4IDgwN2JiNWIuLmJjYzllNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLmR0c2kKQEAgLTMxLDYgKzMxLDIzIEBACiAJCXBpbmN0cmwyID0gJnBpbmN0cmxfMjsKIAl9OwogCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAOTAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4OTAwPjsKKwkJfTsKKworCQljcHVAOTAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4OTAxPjsKKwkJfTsKKwl9OworCiAJcG11X3N5c3RlbV9jb250cm9sbGVyOiBzeXN0ZW0tY29udHJvbGxlckAxMDAyMDAwMCB7CiAJCWNsb2NrLW5hbWVzID0gImNsa291dDAiLCAiY2xrb3V0MSIsICJjbGtvdXQyIiwgImNsa291dDMiLAogCQkJCSJjbGtvdXQ0IiwgImNsa291dDgiLCAiY2xrb3V0OSI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEyLmR0c2kKaW5kZXggM2MwMGU2ZS4uZGQwYTQzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTIuZHRzaQpAQCAtMjIsNiArMjIsMjMgQEAKIC8gewogCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEyIiwgInNhbXN1bmcsZXh5bm9zNCI7CiAKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUBBMDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQlyZWcgPSA8MHhBMDA+OworCQl9OworCisJCWNwdUBBMDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQlyZWcgPSA8MHhBMDE+OworCQl9OworCX07CisKIAljb21iaW5lcjogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTA0NDAwMDAgewogCQlzYW1zdW5nLGNvbWJpbmVyLW5yID0gPDE4PjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi1vZHJvaWQtY29tbW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9kcm9pZC1jb21tb24uZHRzaQppbmRleCBjNjk3ZmYwLi4zZmJmNTg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9kcm9pZC1jb21tb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9kcm9pZC1jb21tb24uZHRzaQpAQCAtNDUsNiArNDUsMTYgQEAKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLG9kcm9pZHgyLWF1ZGlvIjsKIAkJc2Ftc3VuZyxpMnMtY29udHJvbGxlciA9IDwmaTJzMD47CiAJCXNhbXN1bmcsYXVkaW8tY29kZWMgPSA8Jm1heDk4MDkwPjsKKwkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9ja19hdWRzcyBFWFlOT1NfTU9VVF9BVURTUz4sCisJCQkJPCZjbG9ja19hdWRzcyBFWFlOT1NfTU9VVF9JMlM+LAorCQkJCTwmY2xvY2tfYXVkc3MgRVhZTk9TX0RPVVRfU1JQPiwKKwkJCQk8JmNsb2NrX2F1ZHNzIEVYWU5PU19ET1VUX0FVRF9CVVM+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfRk9VVF9FUExMPiwKKwkJCQk8JmNsb2NrX2F1ZHNzIEVYWU5PU19NT1VUX0FVRFNTPjsKKwkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sCisJCQkJPDA+LAorCQkJCTwxOTIwMDAwMDA+LAorCQkJCTwxOTIwMDAwMD47CiAJfTsKIAogCW1tY0AxMjU1MDAwMCB7CkBAIC04MiwxOCArOTIsMzQgQEAKIAogCQlmaW1jXzA6IGZpbWNAMTE4MDAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMD4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzA+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMTogZmltY0AxMTgxMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMxPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMT47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE3NjAwMDAwMD47CiAJCX07CiAKIAkJZmltY18yOiBmaW1jQDExODIwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzI+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMyPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19NT1VUX01QTExfVVNFUl9UPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTc2MDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzM6IGZpbWNAMTE4MzAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMz4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzM+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItdHJhdHMyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItdHJhdHMyLmR0cwppbmRleCA1ZTA2NmNkLi4yOTIzMWI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLXRyYXRzMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi10cmF0czIuZHRzCkBAIC0xNCw2ICsxNCw3IEBACiAKIC9kdHMtdjEvOwogI2luY2x1ZGUgImV4eW5vczQ0MTIuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KIAogLyB7CiAJbW9kZWwgPSAiU2Ftc3VuZyBUcmF0cyAyIGJhc2VkIG9uIEV4eW5vczQ0MTIiOwpAQCAtMjIsNiArMjMsNyBAQAogCWFsaWFzZXMgewogCQlpMmM5ID0gJmkyY19hazg5NzU7CiAJCWkyYzEwID0gJmkyY19jbTM2NjUxOworCQlpMmMxMSA9ICZpMmNfbWF4Nzc2OTM7CiAJfTsKIAogCW1lbW9yeSB7CkBAIC0zOTksOCArNDAxLDYgQEAKIAkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVk1FTV9WRERfMi44ViI7CiAJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OwogCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLW1lbS1vZmY7CiAJCQkJfTsKIAogCQkJCWxkbzIzX3JlZzogbGRvMjMgewpAQCAtNTAzLDggKzUwMyw2IEBACiAJCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZNRU1fVkRERl8zLjBWIjsKIAkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8Mjg1MDAwMD47CiAJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4NTAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItbWVtLW9mZjsKIAkJCQl9OwogCiAJCQkJYnVjazlfcmVnOiBidWNrOSB7CkBAIC01MTgsNiArNTE2LDQyIEBACiAJCX07CiAJfTsKIAorCWkyY19tYXg3NzY5MzogaTJjLWdwaW8tMSB7CisJCWNvbXBhdGlibGUgPSAiaTJjLWdwaW8iOworCQlncGlvcyA9IDwmZ3BtMiAwIEdQSU9fQUNUSVZFX0hJR0g+LCA8JmdwbTIgMSBHUElPX0FDVElWRV9ISUdIPjsKKwkJaTJjLWdwaW8sZGVsYXktdXMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCisJCW1heDc3NjkzQDY2IHsKKwkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc2OTMiOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4MT47CisJCQlpbnRlcnJ1cHRzID0gPDUgMj47CisJCQlyZWcgPSA8MHg2Nj47CisKKwkJCXJlZ3VsYXRvcnMgeworCQkJCWVzYWZlb3V0MV9yZWc6IEVTQUZFT1VUMUAxIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVNBRkVPVVQxIjsKKwkJCQl9OworCQkJCWVzYWZlb3V0Ml9yZWc6IEVTQUZFT1VUMkAyIHsKKwkJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVNBRkVPVVQyIjsKKwkJCQl9OworCQkJCWNoYXJnZXJfcmVnOiBDSEFSR0VSQDAgeworCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJDSEFSR0VSIjsKKwkJCQkJcmVndWxhdG9yLW1pbi1taWNyb2FtcCA9IDw2MDAwMD47CisJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm9hbXAgPSA8MjU4MDAwMD47CisJCQkJfTsKKwkJCX07CisKKwkJCW1heDc3NjkzX2hhcHRpYyB7CisJCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY5My1oYXB0aWMiOworCQkJCWhhcHRpYy1zdXBwbHkgPSA8JmxkbzI2X3JlZz47CisJCQkJcHdtcyA9IDwmcHdtIDAgMzgwMjIgMD47CisJCQl9OworCQl9OworCX07CisKIAltbWNAMTI1NTAwMDAgewogCQludW0tc2xvdHMgPSA8MT47CiAJCWJyb2tlbi1jZDsKQEAgLTUzNSw2ICs1NjksMTYgQEAKIAkJY2FwLW1tYy1oaWdoc3BlZWQ7CiAJfTsKIAorCXNkaGNpQDEyNTMwMDAwIHsKKwkJYnVzLXdpZHRoID0gPDQ+OworCQljZC1ncGlvcyA9IDwmZ3B4MyA0IDA+OworCQljZC1pbnZlcnRlZDsKKwkJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfYnVzND47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXZtbWMtc3VwcGx5ID0gPCZsZG8yMV9yZWc+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKwogCXNlcmlhbEAxMzgwMDAwMCB7CiAJCXN0YXR1cyA9ICJva2F5IjsKIAl9OwpAQCAtNTUxLDYgKzU5NSwxMSBAQAogCQlzdGF0dXMgPSAib2theSI7CiAJfTsKIAorCXRtdUAxMDBDMDAwMCB7CisJCXZ0bXUtc3VwcGx5ID0gPCZsZG8xMF9yZWc+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKwogCWkyY19hazg5NzU6IGkyYy1ncGlvLTAgewogCQljb21wYXRpYmxlID0gImkyYy1ncGlvIjsKIAkJZ3Bpb3MgPSA8JmdweTIgNCAwPiwgPCZncHkyIDUgMD47CkBAIC01OTgsNiArNjQ3LDEzIEBACiAJCX07CiAJfTsKIAorCXB3bTogcHdtQDEzOUQwMDAwIHsKKwkJcGluY3RybC0wID0gPCZwd20wX291dD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXNhbXN1bmcscHdtLW91dHB1dHMgPSA8MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCiAJZHNpXzA6IGRzaUAxMUM4MDAwMCB7CiAJCXZkZGNvcmUtc3VwcGx5ID0gPCZsZG84X3JlZz47CiAJCXZkZGlvLXN1cHBseSA9IDwmbGRvMTBfcmVnPjsKQEAgLTY2MywyOCArNzE5LDUxIEBACiAJCXBpbmN0cmwtMCA9IDwmY2FtX3BvcnRfYV9jbGtfYWN0aXZlICZjYW1fcG9ydF9iX2Nsa19hY3RpdmU+OwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlzdGF0dXMgPSAib2theSI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfQ0FNMD4sCisJCQkJICA8JmNsb2NrIENMS19NT1VUX0NBTTE+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD4sCisJCQkJCSA8JmNsb2NrIENMS19NT1VUX01QTExfVVNFUl9UPjsKIAogCQlmaW1jXzA6IGZpbWNAMTE4MDAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMD4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzA+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCQl9OwogCiAJCWZpbWNfMTogZmltY0AxMTgxMDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0ZJTUMxPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19GSU1DMT47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE3NjAwMDAwMD47CiAJCX07CiAKIAkJZmltY18yOiBmaW1jQDExODIwMDAwIHsKIAkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xvY2sgQ0xLX01PVVRfRklNQzI+LAorCQkJCQk8JmNsb2NrIENMS19TQ0xLX0ZJTUMyPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmNsb2NrIENMS19NT1VUX01QTExfVVNFUl9UPjsKKwkJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MTc2MDAwMDAwPjsKIAkJfTsKIAogCQlmaW1jXzM6IGZpbWNAMTE4MzAwMDAgewogCQkJc3RhdHVzID0gIm9rYXkiOworCQkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9jayBDTEtfTU9VVF9GSU1DMz4sCisJCQkJCTwmY2xvY2sgQ0xLX1NDTEtfRklNQzM+OworCQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xvY2sgQ0xLX01PVVRfTVBMTF9VU0VSX1Q+OworCQkJYXNzaWduZWQtY2xvY2stcmF0ZXMgPSA8MD4sIDwxNzYwMDAwMDA+OwogCQl9OwogCiAJCWNzaXNfMDogY3Npc0AxMTg4MDAwMCB7CiAJCQlzdGF0dXMgPSAib2theSI7CiAJCQl2ZGRjb3JlLXN1cHBseSA9IDwmbGRvOF9yZWc+OwogCQkJdmRkaW8tc3VwcGx5ID0gPCZsZG8xMF9yZWc+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE3NjAwMDAwMD47CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0NTSVMwPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19DU0lTMD47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE3NjAwMDAwMD47CiAKIAkJCS8qIENhbWVyYSBDICgzKSBNSVBJIENTSS0yIChDU0lTMCkgKi8KIAkJCXBvcnRAMyB7CkBAIC02OTgsMTAgKzc3NywxMyBAQAogCQl9OwogCiAJCWNzaXNfMTogY3Npc0AxMTg5MDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CiAJCQl2ZGRjb3JlLXN1cHBseSA9IDwmbGRvOF9yZWc+OwogCQkJdmRkaW8tc3VwcGx5ID0gPCZsZG8xMF9yZWc+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE2MDAwMDAwMD47Ci0JCQlzdGF0dXMgPSAib2theSI7CisJCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmNsb2NrIENMS19NT1VUX0NTSVMxPiwKKwkJCQkJPCZjbG9jayBDTEtfU0NMS19DU0lTMT47CisJCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZjbG9jayBDTEtfTU9VVF9NUExMX1VTRVJfVD47CisJCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDE3NjAwMDAwMD47CiAKIAkJCS8qIENhbWVyYSBEICg0KSBNSVBJIENTSS0yIChDU0lTMSkgKi8KIAkJCXBvcnRANCB7CkBAIC03ODIsMyArODY0LDMxOSBAQAogCQlpby1jaGFubmVscyA9IDwmYWRjIDI+OyAgLyogQmF0dGVyeSB0ZW1wZXJhdHVyZSAqLwogCX07CiB9OworCismcGluY3RybF8wIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2xlZXAwPjsKKworCXNsZWVwMDogc2xlZXAtc3RhdGVzIHsKKwkJUElOX1NMUChncGEwLTAsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGEwLTEsIE9VVDAsIE5PTkUpOworCQlQSU5fU0xQKGdwYTAtMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwYTAtMywgSU5QVVQsIFVQKTsKKwkJUElOX1NMUChncGEwLTQsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGEwLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGEwLTcsIElOUFVULCBVUCk7CisKKwkJUElOX1NMUChncGExLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGExLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGExLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGExLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGExLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGExLTUsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYi0wLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTEsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGItMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwYi0zLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BiLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGItNSwgSU5QVVQsIFVQKTsKKwkJUElOX1NMUChncGItNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwYi03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGMwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGMwLTQsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwYzEtMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwYzEtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BjMS0yLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BjMS0zLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BjMS00LCBJTlBVVCwgTk9ORSk7CisKKwkJUElOX1NMUChncGQwLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGQwLTIsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGQwLTMsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZDEtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZDEtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwZDEtMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZDEtMywgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BmMC0wLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMC0xLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMC00LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMC01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BmMC02LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGYxLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYxLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYxLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYxLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYxLTQsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGYxLTUsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGYxLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYxLTcsIFBSRVYsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BmMi0wLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGYyLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYyLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYyLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYyLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYyLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGYyLTYsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncGYyLTcsIElOUFVULCBOT05FKTsKKworCQlQSU5fU0xQKGdwZjMtMCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwZjMtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMy0yLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGYzLTMsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwZjMtNCwgT1VUMSwgTk9ORSk7CisJCVBJTl9TTFAoZ3BmMy01LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGowLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwajAtMSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BqMC0yLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGowLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGowLTQsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwajAtNSwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BqMC02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BqMC03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGoxLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGoxLTEsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwajEtMiwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BqMS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BqMS00LCBJTlBVVCwgRE9XTik7CisJfTsKK307CisKKyZwaW5jdHJsXzEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzbGVlcDE+OworCisJc2xlZXAxOiBzbGVlcC1zdGF0ZXMgeworCQlQSU5fU0xQKGdwazAtMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMC0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGswLTIsIE9VVDAsIE5PTkUpOworCQlQSU5fU0xQKGdwazAtMywgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMC00LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGswLTUsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazAtNiwgUFJFViwgTk9ORSk7CisKKwkJUElOX1NMUChncGsxLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsxLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsxLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncGsxLTMsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwazEtNCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BrMS01LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGsxLTYsIFBSRVYsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BrMi0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BrMi02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncGszLTAsIE9VVDAsIE5PTkUpOworCQlQSU5fU0xQKGdwazMtMSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwazMtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwazMtMywgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwazMtNCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwazMtNSwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdwazMtNiwgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BsMC0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMC00LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGwwLTYsIFBSRVYsIE5PTkUpOworCisJCVBJTl9TTFAoZ3BsMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BsMi02LCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncGwyLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwbTAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3BtMS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMS0yLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMS0zLCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMS00LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMS01LCBJTlBVVCwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMS02LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG0yLTAsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncG0yLTEsIElOUFVULCBOT05FKTsKKwkJUElOX1NMUChncG0yLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG0yLTQsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwbTMtMCwgUFJFViwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMy0xLCBQUkVWLCBOT05FKTsKKwkJUElOX1NMUChncG0zLTIsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdwbTMtMywgT1VUMSwgTk9ORSk7CisJCVBJTl9TTFAoZ3BtMy00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3BtMy03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncG00LTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncG00LTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdweTAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTAtNSwgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B5MS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5MS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5MS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5MS0zLCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncHkyLTAsIFBSRVYsIE5PTkUpOworCQlQSU5fU0xQKGdweTItMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTItMiwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdweTItMywgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdweTItNCwgSU5QVVQsIE5PTkUpOworCQlQSU5fU0xQKGdweTItNSwgSU5QVVQsIE5PTkUpOworCisJCVBJTl9TTFAoZ3B5My0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5My03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncHk0LTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHk0LTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdweTUtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdweTUtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B5Ni0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B5Ni03LCBJTlBVVCwgRE9XTik7CisJfTsKK307CisKKyZwaW5jdHJsXzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzbGVlcDI+OworCisJc2xlZXAyOiBzbGVlcC1zdGF0ZXMgeworCQlQSU5fU0xQKGdwei0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B6LTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHotMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwei0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B6LTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHotNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwei02LCBJTlBVVCwgRE9XTik7CisJfTsKK307CisKKyZwaW5jdHJsXzMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzbGVlcDM+OworCisJc2xlZXAzOiBzbGVlcC1zdGF0ZXMgeworCQlQSU5fU0xQKGdwdjAtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjAtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B2MS0wLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS0xLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS0yLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS0zLCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS00LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS01LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS02LCBJTlBVVCwgRE9XTik7CisJCVBJTl9TTFAoZ3B2MS03LCBJTlBVVCwgRE9XTik7CisKKwkJUElOX1NMUChncHYyLTAsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTEsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTIsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTMsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTQsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTUsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTYsIElOUFVULCBET1dOKTsKKwkJUElOX1NMUChncHYyLTcsIElOUFVULCBET1dOKTsKKworCQlQSU5fU0xQKGdwdjMtMCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtMSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtMiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtMywgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtNCwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtNSwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtNiwgSU5QVVQsIERPV04pOworCQlQSU5fU0xQKGdwdjMtNywgSU5QVVQsIERPV04pOworCisJCVBJTl9TTFAoZ3B2NC0wLCBJTlBVVCwgRE9XTik7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLmR0c2kKaW5kZXggZDhiYzA1OWUuLjBmNmVjOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLmR0c2kKQEAgLTIyLDYgKzIyLDM1IEBACiAvIHsKIAljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxMiIsICJzYW1zdW5nLGV4eW5vczQiOwogCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAQTAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4QTAwPjsKKwkJfTsKKworCQljcHVAQTAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4QTAxPjsKKwkJfTsKKworCQljcHVAQTAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4QTAyPjsKKwkJfTsKKworCQljcHVAQTAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4QTAzPjsKKwkJfTsKKwl9OworCiAJY29tYmluZXI6IGludGVycnVwdC1jb250cm9sbGVyQDEwNDQwMDAwIHsKIAkJc2Ftc3VuZyxjb21iaW5lci1uciA9IDwyMD47CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTUtcGluY3RybC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxNS1waW5jdHJsLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhZjljNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTUtcGluY3RybC5kdHNpCkBAIC0wLDAgKzEsNTczIEBACisvKgorICogU2Ftc3VuZydzIEV4eW5vczQ0MTUgU29DcyBwaW4tbXV4IGFuZCBwaW4tY29uZmlnIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIFNhbXN1bmcncyBFeHlub3M0NDE1IFNvQ3MgcGluLW11eCBhbmQgcGluLWNvbmZpZyBvcHRpb3NuIGFyZSBsaXN0ZWQgYXMgZGV2aWNlCisgKiB0cmVlIG5vZGVzIGFyZSBsaXN0ZWQgaW4gdGhpcyBmaWxlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCismcGluY3RybF8wIHsKKwlncGEwOiBncGEwIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BhMTogZ3BhMSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYjogZ3BiIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BjMDogZ3BjMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwYzE6IGdwYzEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGQwOiBncGQwIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BkMTogZ3BkMSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwZjA6IGdwZjAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGYxOiBncGYxIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BmMjogZ3BmMiB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCXVhcnQwX2RhdGE6IHVhcnQwLWRhdGEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMC0wIiwgImdwYTAtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDB4Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl1YXJ0MF9mY3RsOiB1YXJ0MC1mY3RsIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTAtMiIsICJncGEwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVhcnQxX2RhdGE6IHVhcnQxLWRhdGEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMC00IiwgImdwYTAtNSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdWFydDFfZmN0bDogdWFydDEtZmN0bCB7CisJCXNhbXN1bmcscGlucyA9ICJncGEwLTYiLCAiZ3BhMC03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl1YXJ0Ml9kYXRhOiB1YXJ0Mi1kYXRhIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTEtMCIsICJncGExLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVhcnQyX2ZjdGw6IHVhcnQyLWZjdGwgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMS0yIiwgImdwYTEtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJdWFydDNfZGF0YTogdWFydDMtZGF0YSB7CisJCXNhbXN1bmcscGlucyA9ICJncGExLTQiLCAiZ3BhMS01IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmMyX2J1czogaTJjMi1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BhMC02IiwgImdwYTAtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjM19idXM6IGkyYzMtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYTEtMiIsICJncGExLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXNwaTBfYnVzOiBzcGkwLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGItMCIsICJncGItMiIsICJncGItMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjNF9idXM6IGkyYzQtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYi0wIiwgImdwYi0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mz47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlzcGkxX2J1czogc3BpMS1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BiLTQiLCAiZ3BiLTYiLCAiZ3BiLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzVfYnVzOiBpMmM1LWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGItMiIsICJncGItMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJzMV9idXM6IGkyczEtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzAtMCIsICJncGMwLTEiLCAiZ3BjMC0yIiwgImdwYzAtMyIsCisJCQkJImdwYzAtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJzMl9idXM6IGkyczItYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzEtMCIsICJncGMxLTEiLCAiZ3BjMS0yIiwgImdwYzEtMyIsCisJCQkJImdwYzEtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcGNtMl9idXM6IHBjbTItYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzEtMCIsICJncGMxLTEiLCAiZ3BjMS0yIiwgImdwYzEtMyIsCisJCQkJImdwYzEtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjNl9idXM6IGkyYzYtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwYzEtMyIsICJncGMxLTQiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDw0PjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXNwaTJfYnVzOiBzcGkyLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGMxLTEiLCAiZ3BjMS0zIiwgImdwYzEtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDU+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcHdtMF9vdXQ6IHB3bTAtb3V0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcHdtMV9vdXQ6IHB3bTEtb3V0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcHdtMl9vdXQ6IHB3bTItb3V0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcHdtM19vdXQ6IHB3bTMtb3V0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJaTJjN19idXM6IGkyYzctYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDAtMiIsICJncGQwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWkyYzBfYnVzOiBpMmMwLWJ1cyB7CisJCXNhbXN1bmcscGlucyA9ICJncGQxLTAiLCAiZ3BkMS0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlpMmMxX2J1czogaTJjMS1idXMgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BkMS0yIiwgImdwZDEtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKKworJnBpbmN0cmxfMSB7CisJZ3BrMDogZ3BrMCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwazE6IGdwazEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncGsyOiBncGsyIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BrMzogZ3BrMyB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwbDA6IGdwbDAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncG0wOiBncG0wIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BtMTogZ3BtMSB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdwbTI6IGdwbTIgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncG0zOiBncG0zIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZ3BtNDogZ3BtNCB7CisJCWdwaW8tY29udHJvbGxlcjsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdweDA6IGdweDAgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPDAgMzIgMD4sIDwwIDMzIDA+LCA8MCAzNCAwPiwgPDAgMzUgMD4sCisJCQkJPDAgMzYgMD4sIDwwIDM3IDA+LCA8MCAzOCAwPiwgPDAgMzkgMD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdweDE6IGdweDEgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPDAgNDAgMD4sIDwwIDQxIDA+LCA8MCA0MiAwPiwgPDAgNDMgMD4sCisJCQkJPDAgNDQgMD4sIDwwIDQ1IDA+LCA8MCA0NiAwPiwgPDAgNDcgMD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCWdweDI6IGdweDIgeworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCisJCWludGVycnVwdC1jb250cm9sbGVyOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlncHgzOiBncHgzIHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJc2QwX2Nsazogc2QwLWNsayB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTAiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9jbWQ6IHNkMC1jbWQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMC0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDBfY2Q6IHNkMC1jZCB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9yZHFzOiBzZDAtcmRxcyB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9idXMxOiBzZDAtYnVzLXdpZHRoMSB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMF9idXM0OiBzZDAtYnVzLXdpZHRoNCB7CisJCXNhbXN1bmcscGlucyA9ICJncGswLTQiLCAiZ3BrMC01IiwgImdwazAtNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QwX2J1czg6IHNkMC1idXMtd2lkdGg4IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbDAtMCIsICJncGwwLTEiLCAiZ3BsMC0yIiwgImdwbDAtMyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QxX2Nsazogc2QxLWNsayB7CisJCXNhbXN1bmcscGlucyA9ICJncGsxLTAiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9jbWQ6IHNkMS1jbWQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMS0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDM+OworCX07CisKKwlzZDFfY2Q6IHNkMS1jZCB7CisJCXNhbXN1bmcscGlucyA9ICJncGsxLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9idXMxOiBzZDEtYnVzLXdpZHRoMSB7CisJCXNhbXN1bmcscGlucyA9ICJncGsxLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMV9idXM0OiBzZDEtYnVzLXdpZHRoNCB7CisJCXNhbXN1bmcscGlucyA9ICJncGsxLTQiLCAiZ3BrMS01IiwgImdwazEtNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJc2QyX2Nsazogc2QyLWNsayB7CisJCXNhbXN1bmcscGlucyA9ICJncGsyLTAiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8ND47CisJfTsKKworCXNkMl9jbWQ6IHNkMi1jbWQgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3BrMi0xIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8Mj47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDQ+OworCX07CisKKwlzZDJfY2Q6IHNkMi1jZCB7CisJCXNhbXN1bmcscGlucyA9ICJncGsyLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8Mz47CisJfTsKKworCXNkMl9idXMxOiBzZDItYnVzLXdpZHRoMSB7CisJCXNhbXN1bmcscGlucyA9ICJncGsyLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8ND47CisJfTsKKworCXNkMl9idXM0OiBzZDItYnVzLXdpZHRoNCB7CisJCXNhbXN1bmcscGlucyA9ICJncGsyLTQiLCAiZ3BrMi01IiwgImdwazItNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDI+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDw0PjsKKwl9OworCisJY2FtX3BvcnRfYl9pbzogY2FtLXBvcnQtYi1pbyB7CisJCXNhbXN1bmcscGlucyA9ICJncG0wLTAiLCAiZ3BtMC0xIiwgImdwbTAtMiIsICJncG0wLTMiLAorCQkJCSJncG0wLTQiLCAiZ3BtMC01IiwgImdwbTAtNiIsICJncG0wLTciLAorCQkJCSJncG0xLTAiLCAiZ3BtMS0xIiwgImdwbTItMCIsICJncG0yLTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDM+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWNhbV9wb3J0X2JfY2xrX2FjdGl2ZTogY2FtLXBvcnQtYi1jbGstYWN0aXZlIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbTItMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDM+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwzPjsKKwl9OworCisJY2FtX3BvcnRfYl9jbGtfaWRsZTogY2FtLXBvcnQtYi1jbGstaWRsZSB7CisJCXNhbXN1bmcscGlucyA9ICJncG0yLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWZpbWNfaXNfaTJjMDogZmltYy1pcy1pMmMwIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbTQtMCIsICJncG00LTEiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWZpbWNfaXNfaTJjMTogZmltYy1pcy1pMmMxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbTQtMiIsICJncG00LTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWZpbWNfaXNfdWFydDogZmltYy1pcy11YXJ0IHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwbTMtNSIsICJncG0zLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZwaW5jdHJsXzIgeworCWdwejogZ3B6IHsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJaTJzMF9idXM6IGkyczAtYnVzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwei0wIiwgImdwei0xIiwgImdwei0yIiwgImdwei0zIiwKKwkJCQkiZ3B6LTQiLCAiZ3B6LTUiLCAiZ3B6LTYiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwyPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDE1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDE1LmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjOWIzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTUuZHRzaQpAQCAtMCwwICsxLDYwNCBAQAorLyoKKyAqIFNhbXN1bmcncyBFeHlub3M0NDE1IFNvQyBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCisgKiBTYW1zdW5nJ3MgRXh5bm9zNDQxNSBTb0MgZGV2aWNlIG5vZGVzIGFyZSBsaXN0ZWQgaW4gdGhpcyBmaWxlLiBFeHlub3M0NDE1CisgKiBiYXNlZCBib2FyZCBmaWxlcyBjYW4gaW5jbHVkZSB0aGlzIGZpbGUgYW5kIHByb3ZpZGUgdmFsdWVzIGZvciBib2FyZAorICogc3BlY2lmaWMgYmluZGluZ3MuCisgKgorICogTm90ZTogVGhpcyBmaWxlIGRvZXMgbm90IGluY2x1ZGUgZGV2aWNlIG5vZGVzIGZvciBhbGwgdGhlIGNvbnRyb2xsZXJzIGluCisgKiBFeHlub3M0NDE1IFNvQy4gQXMgZGV2aWNlIHRyZWUgY292ZXJhZ2UgZm9yIEV4eW5vczQ0MTUgaW5jcmVhc2VzLCBhZGRpdGlvbmFsCisgKiBub2RlcyBjYW4gYmUgYWRkZWQgdG8gdGhpcyBmaWxlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgInNrZWxldG9uLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svZXh5bm9zNDQxNS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2V4eW5vcy1hdWRzcy1jbGsuaD4KKworLyB7CisJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTUiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisKKwlhbGlhc2VzIHsKKwkJcGluY3RybDAgPSAmcGluY3RybF8wOworCQlwaW5jdHJsMSA9ICZwaW5jdHJsXzE7CisJCXBpbmN0cmwyID0gJnBpbmN0cmxfMjsKKwkJbXNoYzAgPSAmbXNoY18wOworCQltc2hjMSA9ICZtc2hjXzE7CisJCW1zaGMyID0gJm1zaGNfMjsKKwkJc3BpMCA9ICZzcGlfMDsKKwkJc3BpMSA9ICZzcGlfMTsKKwkJc3BpMiA9ICZzcGlfMjsKKwkJaTJjMCA9ICZpMmNfMDsKKwkJaTJjMSA9ICZpMmNfMTsKKwkJaTJjMiA9ICZpMmNfMjsKKwkJaTJjMyA9ICZpMmNfMzsKKwkJaTJjNCA9ICZpMmNfNDsKKwkJaTJjNSA9ICZpMmNfNTsKKwkJaTJjNiA9ICZpMmNfNjsKKwkJaTJjNyA9ICZpMmNfNzsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHUwOiBjcHVAYTAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4YTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMDAwPjsKKwkJfTsKKworCQljcHUxOiBjcHVAYTAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4YTAxPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMDAwPjsKKwkJfTsKKworCQljcHUyOiBjcHVAYTAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4YTAyPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMDAwPjsKKwkJfTsKKworCQljcHUzOiBjcHVAYTAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJcmVnID0gPDB4YTAzPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjAwMDAwMDAwPjsKKwkJfTsKKwl9OworCisJc29jOiBzb2MgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKworCQlzeXNyYW1AMDIwMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iOworCQkJcmVnID0gPDB4MDIwMjAwMDAgMHg1MDAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzID0gPDAgMHgwMjAyMDAwMCAweDUwMDAwPjsKKworCQkJc21wLXN5c3JhbUAwIHsKKwkJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zeXNyYW0iOworCQkJCXJlZyA9IDwweDAgMHgxMDAwPjsKKwkJCX07CisKKwkJCXNtcC1zeXNyYW1ANGYwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXN5c3JhbS1ucyI7CisJCQkJcmVnID0gPDB4NGYwMDAgMHgxMDAwPjsKKwkJCX07CisJCX07CisKKwkJcGluY3RybF8yOiBwaW5jdHJsQDAzODYwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDE1LXBpbmN0cmwiOworCQkJcmVnID0gPDB4MDM4NjAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAyNDIgMD47CisJCX07CisKKwkJY2hpcGlkQDEwMDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWNoaXBpZCI7CisJCQlyZWcgPSA8MHgxMDAwMDAwMCAweDEwMD47CisJCX07CisKKwkJc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyOiBzeXNjb25AMTAwMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQtc3lzcmVnIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgxMDAxMDAwMCAweDQwMD47CisJCX07CisKKwkJcG11X3N5c3RlbV9jb250cm9sbGVyOiBzeXN0ZW0tY29udHJvbGxlckAxMDAyMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxNS1wbXUiLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweDEwMDIwMDAwIDB4NDAwMD47CisJCX07CisKKwkJbWlwaV9waHk6IHZpZGVvLXBoeUAxMDAyMDcxMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVwdjIxMC1taXBpLXZpZGVvLXBoeSI7CisJCQlyZWcgPSA8MHgxMDAyMDcxMCA4PjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCX07CisKKwkJcGRfY2FtOiBjYW0tcG93ZXItZG9tYWluQDEwMDI0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBkIjsKKwkJCXJlZyA9IDwweDEwMDI0MDAwIDB4MjA+OworCQl9OworCisJCXBkX3R2OiB0di1wb3dlci1kb21haW5AMTAwMjQwMjAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcGQiOworCQkJcmVnID0gPDB4MTAwMjQwMjAgMHgyMD47CisJCX07CisKKwkJcGRfbWZjOiBtZmMtcG93ZXItZG9tYWluQDEwMDI0MDQwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBkIjsKKwkJCXJlZyA9IDwweDEwMDI0MDQwIDB4MjA+OworCQl9OworCisJCXBkX2czZDogZzNkLXBvd2VyLWRvbWFpbkAxMDAyNDA2MCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyNDA2MCAweDIwPjsKKwkJfTsKKworCQlwZF9sY2QwOiBsY2QwLXBvd2VyLWRvbWFpbkAxMDAyNDA4MCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyNDA4MCAweDIwPjsKKwkJfTsKKworCQlwZF9pc3AwOiBpc3AwLXBvd2VyLWRvbWFpbkAxMDAyNDBBMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyNDBBMCAweDIwPjsKKwkJfTsKKworCQlwZF9pc3AxOiBpc3AxLXBvd2VyLWRvbWFpbkAxMDAyNDBFMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1wZCI7CisJCQlyZWcgPSA8MHgxMDAyNDBFMCAweDIwPjsKKwkJfTsKKworCQljbXU6IGNsb2NrLWNvbnRyb2xsZXJAMTAwMzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTUtY211IjsKKwkJCXJlZyA9IDwweDEwMDMwMDAwIDB4MTgwMDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQl9OworCisJCXJ0YzogcnRjQDEwMDcwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3MzMjUwLXJ0YyI7CisJCQlyZWcgPSA8MHgxMDA3MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNzMgMD4sIDwwIDc0IDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltY3RAMTAwNTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtbWN0IjsKKwkJCXJlZyA9IDwweDEwMDUwMDAwIDB4ODAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAyMTggMD4sIDwwIDIxOSAwPiwgPDAgMjIwIDA+LCA8MCAyMjEgMD4sCisJCQkJICAgICA8MCAyMjMgMD4sIDwwIDIyNiAwPiwgPDAgMjI3IDA+LCA8MCAyMjggMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfRklOX1BMTD4sIDwmY211IENMS19NQ1Q+OworCQkJY2xvY2stbmFtZXMgPSAiZmluX3BsbCIsICJtY3QiOworCQl9OworCisJCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTA0ODEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHgxMDQ4MTAwMCAweDEwMDA+LAorCQkJICAgICAgPDB4MTA0ODIwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDEwNDg0MDAwIDB4MjAwMD4sCisJCQkgICAgICA8MHgxMDQ4NjAwMCAweDIwMDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMHhmMDQ+OworCQl9OworCisJCWwyYzogbDItY2FjaGUtY29udHJvbGxlckAxMDUwMjAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDMxMC1jYWNoZSI7CisJCQlyZWcgPSA8MHgxMDUwMjAwMCAweDEwMDA+OworCQkJY2FjaGUtdW5pZmllZDsKKwkJCWNhY2hlLWxldmVsID0gPDI+OworCQkJYXJtLHRhZy1sYXRlbmN5ID0gPDIgMiAxPjsKKwkJCWFybSxkYXRhLWxhdGVuY3kgPSA8MyAyIDE+OworCQkJYXJtLGRvdWJsZS1saW5lZmlsbCA9IDwxPjsKKwkJCWFybSxkb3VibGUtbGluZWZpbGwtaW5jciA9IDwwPjsKKwkJCWFybSxkb3VibGUtbGluZWZpbGwtd3JhcCA9IDwxPjsKKwkJCWFybSxwcmVmZXRjaC1kcm9wID0gPDE+OworCQkJYXJtLHByZWZldGNoLW9mZnNldCA9IDw3PjsKKwkJfTsKKworCQljbXVfZG1jOiBjbG9jay1jb250cm9sbGVyQDEwNUMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDE1LWNtdS1kbWMiOworCQkJcmVnID0gPDB4MTA1QzAwMDAgMHgzMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJfTsKKworCQlwaW5jdHJsXzE6IHBpbmN0cmxAMTEwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTUtcGluY3RybCI7CisJCQlyZWcgPSA8MHgxMTAwMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDIyNSAwPjsKKworCQkJd2FrZXVwLWludGVycnVwdC1jb250cm9sbGVyIHsKKwkJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC13YWtldXAtZWludCI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgNDggMD47CisJCQl9OworCQl9OworCisJCXBpbmN0cmxfMDogcGluY3RybEAxMTQwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxNS1waW5jdHJsIjsKKwkJCXJlZyA9IDwweDExNDAwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMjQwIDA+OworCQl9OworCisJCWhzb3RnOiBoc290Z0AxMjQ4MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjNjQwMC1oc290ZyI7CisJCQlyZWcgPSA8MHgxMjQ4MDAwMCAweDIwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNDEgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVVNCREVWSUNFPjsKKwkJCWNsb2NrLW5hbWVzID0gIm90ZyI7CisJCQlwaHlzID0gPCZleHlub3NfdXNicGh5IDA+OworCQkJcGh5LW5hbWVzID0gInVzYjItcGh5IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbXNoY18wOiBtc2hjQDEyNTEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1MjUwLWR3LW1zaGMiOworCQkJcmVnID0gPDB4MTI1MTAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNDIgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfU0RNTUMwPiwgPCZjbXUgQ0xLX1NDTEtfTU1DMD47CisJCQljbG9jay1uYW1lcyA9ICJiaXUiLCAiY2l1IjsKKwkJCWZpZm8tZGVwdGggPSA8MHg4MD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltc2hjXzE6IG1zaGNAMTI1MjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtZHctbXNoYyI7CisJCQlyZWcgPSA8MHgxMjUyMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE0MyAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19TRE1NQzE+LCA8JmNtdSBDTEtfU0NMS19NTUMxPjsKKwkJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOworCQkJZmlmby1kZXB0aCA9IDwweDgwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1zaGNfMjogbXNoY0AxMjUzMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1kdy1tc2hjIjsKKwkJCXJlZyA9IDwweDEyNTMwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTQ0IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1NETU1DMj4sIDwmY211IENMS19TQ0xLX01NQzI+OworCQkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7CisJCQlmaWZvLWRlcHRoID0gPDB4ODA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZWhjaTogZWhjaUAxMjU4MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1laGNpIjsKKwkJCXJlZyA9IDwweDEyNTgwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxNDAgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVVNCSE9TVD47CisJCQljbG9jay1uYW1lcyA9ICJ1c2Job3N0IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJcGh5cyA9IDwmZXh5bm9zX3VzYnBoeSAxPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKwkJCXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCXBoeXMgPSA8JmV4eW5vc191c2JwaHkgMj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCQlwb3J0QDIgeworCQkJCXJlZyA9IDwyPjsKKwkJCQlwaHlzID0gPCZleHlub3NfdXNicGh5IDM+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCQl9OworCisJCW9oY2k6IG9oY2lAMTI1OTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtb2hjaSI7CisJCQlyZWcgPSA8MHgxMjU5MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTQwIDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1VTQkhPU1Q+OworCQkJY2xvY2stbmFtZXMgPSAidXNiaG9zdCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCXBoeXMgPSA8JmV4eW5vc191c2JwaHkgMT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisJCX07CisKKwkJZXh5bm9zX3VzYnBoeTogZXh5bm9zLXVzYnBoeUAxMjVCMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNHgxMi11c2IyLXBoeSI7CisJCQlyZWcgPSA8MHgxMjVCMDAwMCAweDEwMD47CisJCQlzYW1zdW5nLHBtdXJlZy1waGFuZGxlID0gPCZwbXVfc3lzdGVtX2NvbnRyb2xsZXI+OworCQkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19VU0JERVZJQ0U+LCA8Jnh1c2J4dGk+OworCQkJY2xvY2stbmFtZXMgPSAicGh5IiwgInJlZiI7CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlhbWJhIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGFtYmEtYnVzIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkJcmFuZ2VzOworCisJCQlwZG1hMDogcGRtYUAxMjY4MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwzMzAiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4MTI2ODAwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTM4IDA+OworCQkJCWNsb2NrcyA9IDwmY211IENMS19QRE1BMD47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCSNkbWEtY2VsbHMgPSA8MT47CisJCQkJI2RtYS1jaGFubmVscyA9IDw4PjsKKwkJCQkjZG1hLXJlcXVlc3RzID0gPDMyPjsKKwkJCX07CisKKwkJCXBkbWExOiBwZG1hQDEyNjkwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDMzMCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHgxMjY5MDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMzkgMD47CisJCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1BETUExPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJI2RtYS1jZWxscyA9IDwxPjsKKwkJCQkjZG1hLWNoYW5uZWxzID0gPDg+OworCQkJCSNkbWEtcmVxdWVzdHMgPSA8MzI+OworCQkJfTsKKwkJfTsKKworCQlhZGM6IGFkY0AxMjZDMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zMzI1MC1hZGMiLAorCQkJCSAgICAgInNhbXN1bmcsZXh5bm9zLWFkYy12MiI7CisJCQlyZWcgPSA8MHgxMjZDMDAwMCAweDEwMD4sIDwweDEwMDIwNzE4IDB4ND47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTM3IDA+OworCQkJY2xvY2stbmFtZXMgPSAiYWRjIiwgInNjbGsiOworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1RTQURDPiwgPCZjbXUgQ0xLX1NDTEtfVFNBREM+OworCQkJI2lvLWNoYW5uZWwtY2VsbHMgPSA8MT47CisJCQlpby1jaGFubmVsLXJhbmdlczsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2VyaWFsXzA6IHNlcmlhbEAxMzgwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEzODAwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMDkgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVUFSVDA+LCA8JmNtdSBDTEtfU0NMS19VQVJUMD47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2VyaWFsXzE6IHNlcmlhbEAxMzgxMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEzODEwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTAgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVUFSVDE+LCA8JmNtdSBDTEtfU0NMS19VQVJUMT47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2VyaWFsXzI6IHNlcmlhbEAxMzgyMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEzODIwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTEgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVUFSVDI+LCA8JmNtdSBDTEtfU0NMS19VQVJUMj47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2VyaWFsXzM6IHNlcmlhbEAxMzgzMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC11YXJ0IjsKKwkJCXJlZyA9IDwweDEzODMwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTIgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfVUFSVDM+LCA8JmNtdSBDTEtfU0NMS19VQVJUMz47CisJCQljbG9jay1uYW1lcyA9ICJ1YXJ0IiwgImNsa191YXJ0X2JhdWQwIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzA6IGkyY0AxMzg2MDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzODYwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTMgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDMD47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjMF9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfMTogaTJjQDEzODcwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC1pMmMiOworCQkJcmVnID0gPDB4MTM4NzAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExNCAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19JMkMxPjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmMxX2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY18yOiBpMmNAMTM4ODAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLWkyYyI7CisJCQlyZWcgPSA8MHgxMzg4MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE1IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0kyQzI+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzJfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzM6IGkyY0AxMzg5MDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzODkwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTYgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDMz47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjM19idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfNDogaTJjQDEzOEEwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC1pMmMiOworCQkJcmVnID0gPDB4MTM4QTAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExNyAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19JMkM0PjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmM0X2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY181OiBpMmNAMTM4QjAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2MyNDQwLWkyYyI7CisJCQlyZWcgPSA8MHgxMzhCMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE4IDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX0kyQzU+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzVfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjXzY6IGkyY0AxMzhDMDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzI0NDAtaTJjIjsKKwkJCXJlZyA9IDwweDEzOEMwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTkgMD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfSTJDNj47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjNl9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfNzogaTJjQDEzOEQwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczNjMjQ0MC1pMmMiOworCQkJcmVnID0gPDB4MTM4RDAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyMCAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19JMkM3PjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmM3X2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNwaV8wOiBzcGlAMTM5MjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtc3BpIjsKKwkJCXJlZyA9IDwweDEzOTIwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMjEgMD47CisJCQlkbWFzID0gPCZwZG1hMCA3PiwgPCZwZG1hMCA2PjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2xvY2tzID0gPCZjbXUgQ0xLX1NQSTA+LCA8JmNtdSBDTEtfU0NMS19TUEkwPjsKKwkJCWNsb2NrLW5hbWVzID0gInNwaSIsICJzcGlfYnVzY2xrMCI7CisJCQlzYW1zdW5nLHNwaS1zcmMtY2xrID0gPDA+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmc3BpMF9idXM+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzcGlfMTogc3BpQDEzOTMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXNwaSI7CisJCQlyZWcgPSA8MHgxMzkzMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTIyIDA+OworCQkJZG1hcyA9IDwmcGRtYTEgNz4sIDwmcGRtYTEgNj47CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19TUEkxPiwgPCZjbXUgQ0xLX1NDTEtfU1BJMT47CisJCQljbG9jay1uYW1lcyA9ICJzcGkiLCAic3BpX2J1c2NsazAiOworCQkJc2Ftc3VuZyxzcGktc3JjLWNsayA9IDwwPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnNwaTFfYnVzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc3BpXzI6IHNwaUAxMzk0MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1zcGkiOworCQkJcmVnID0gPDB4MTM5NDAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyMyAwPjsKKwkJCWRtYXMgPSA8JnBkbWEwIDk+LCA8JnBkbWEwIDg+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljbG9ja3MgPSA8JmNtdSBDTEtfU1BJMj4sIDwmY211IENMS19TQ0xLX1NQSTI+OworCQkJY2xvY2stbmFtZXMgPSAic3BpIiwgInNwaV9idXNjbGswIjsKKwkJCXNhbXN1bmcsc3BpLXNyYy1jbGsgPSA8MD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZzcGkyX2J1cz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWNsb2NrX2F1ZHNzOiBjbG9jay1jb250cm9sbGVyQDAzODEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWF1ZHNzLWNsb2NrIjsKKwkJCXJlZyA9IDwweDAzODEwMDAwIDB4MEM+OworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQl9OworCisJCWkyczA6IGkyc0AzODMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNXB2MjEwLWkycyI7CisJCQlyZWcgPSA8MHgwMzgzMDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTI0IDA+OworCQkJY2xvY2tzID0gPCZjbG9ja19hdWRzcyBFWFlOT1NfSTJTX0JVUz4sCisJCQkJPCZjbG9ja19hdWRzcyBFWFlOT1NfU0NMS19JMlM+OworCQkJY2xvY2stbmFtZXMgPSAiaWlzIiwgImkyc19vcGNsazAiOworCQkJZG1hcyA9IDwmcGRtYTEgMTA+LCA8JnBkbWExIDk+LCA8JnBkbWExIDg+OworCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IiwgInR4LXNlYyI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMnMwX2J1cz47CisJCQlzYW1zdW5nLGlkbWEtYWRkciA9IDwweDAzMDAwMDAwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJcHdtOiBwd21AMTM5RDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcHdtIjsKKwkJCXJlZyA9IDwweDEzOUQwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTA0IDA+LCA8MCAxMDUgMD4sIDwwIDEwNiAwPiwKKwkJCQkgICAgIDwwIDEwNyAwPiwgPDAgMTA4IDA+OworCQkJI3B3bS1jZWxscyA9IDwzPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJcG11IHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1wbXUiOworCQkJaW50ZXJydXB0cyA9IDwwIDE4IDA+LCA8MCAxOSAwPiwgPDAgMjAgMD4sIDwwIDIxIDA+OworCQl9OworCX07Cit9OworCisjaW5jbHVkZSAiZXh5bm9zNDQxNS1waW5jdHJsLmR0c2kiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLXBpbmN0cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTItcGluY3RybC5kdHNpCmluZGV4IDA4NjVhMmUuLmMxNDE5MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTItcGluY3RybC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTItcGluY3RybC5kdHNpCkBAIC0xMiw2ICsxMiwyMiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqLwogCisjZGVmaW5lIFBJTl9QVUxMX05PTkUJCTAKKyNkZWZpbmUgUElOX1BVTExfRE9XTgkJMQorI2RlZmluZSBQSU5fUFVMTF9VUAkJMworCisjZGVmaW5lIFBJTl9QRE5fT1VUMAkJMAorI2RlZmluZSBQSU5fUEROX09VVDEJCTEKKyNkZWZpbmUgUElOX1BETl9JTlBVVAkJMgorI2RlZmluZSBQSU5fUEROX1BSRVYJCTMKKworI2RlZmluZSBQSU5fU0xQKF9waW4sIF9tb2RlLCBfcHVsbCkJCQkJXAorCV9waW4gewkJCQkJCQlcCisJCXNhbXN1bmcscGlucyA9ICNfcGluOwkJCQlcCisJCXNhbXN1bmcscGluLWNvbi1wZG4gPSA8UElOX1BETl8gIyNfbW9kZT47CVwKKwkJc2Ftc3VuZyxwaW4tcHVkLXBkbiA9IDxQSU5fUFVMTF8gIyNfcHVsbD47CVwKKwl9CisKIC8gewogCXBpbmN0cmxAMTE0MDAwMDAgewogCQlncGEwOiBncGEwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTIuZHRzaQppbmRleCA4NjFiYjkxLi4yZTlmMWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNHgxMi5kdHNpCkBAIC0yNzEsNCArMjcxLDE0IEBACiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0eDEyLXVzYjItcGh5IjsKIAkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzX3JlZz47CiAJfTsKKworCXRtdUAxMDBDMDAwMCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDEyLXRtdSI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmNvbWJpbmVyPjsKKwkJaW50ZXJydXB0cyA9IDwyIDQ+OworCQlyZWcgPSA8MHgxMDBDMDAwMCAweDEwMD47CisJCWNsb2NrcyA9IDwmY2xvY2sgMzgzPjsKKwkJY2xvY2stbmFtZXMgPSAidG11X2FwYmlmIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtYXJuZGFsZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLWFybmRhbGUuZHRzCmluZGV4IDNhY2Q5N2UuLjdlNzI4YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtYXJuZGFsZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1hcm5kYWxlLmR0cwpAQCAtNywxMiArNywxMyBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCisgKi8KIAogL2R0cy12MS87Ci0jaW5jbHVkZSAiZXh5bm9zNTI1MC5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSAiZXh5bm9zNTI1MC5kdHNpIgogCiAvIHsKIAltb2RlbCA9ICJJbnNpZ25hbCBBcm5kYWxlIGV2YWx1YXRpb24gYm9hcmQgYmFzZWQgb24gRVhZTk9TNTI1MCI7CkBAIC0yNiw0NjUgKzI3LDUyIEBACiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0FDMiwxMTUyMDAiOwogCX07CiAKLQlydGNAMTAxRTAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQotCWNvZGVjQDExMDAwMDAwIHsKLQkJc2Ftc3VuZyxtZmMtciA9IDwweDQzMDAwMDAwIDB4ODAwMDAwPjsKLQkJc2Ftc3VuZyxtZmMtbCA9IDwweDUxMDAwMDAwIDB4ODAwMDAwPjsKLQl9OwotCi0JaTJjQDEyQzYwMDAwIHsKLQkJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47Ci0JCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwyMDAwMD47Ci0JCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHg2Nj47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQlzNW04NzY3X3BtaWNANjYgewotCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1bTg3NjctcG1pYyI7Ci0JCQlyZWcgPSA8MHg2Nj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgzPjsKLQkJCWludGVycnVwdHMgPSA8MiBJUlFfVFlQRV9MRVZFTF9MT1c+OwotCi0JCQl2aW5iMS1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmIyLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmluYjMtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQl2aW5iNC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmI1LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmluYjYtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQl2aW5iNy1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmI4LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmluYjktc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0KLQkJCXZpbmwxLXN1cHBseSA9IDwmYnVjazdfcmVnPjsKLQkJCXZpbmwyLXN1cHBseSA9IDwmYnVjazdfcmVnPjsKLQkJCXZpbmwzLXN1cHBseSA9IDwmYnVjazdfcmVnPjsKLQkJCXZpbmw0LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmlubDUtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQl2aW5sNi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCXZpbmw3LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJdmlubDgtc3VwcGx5ID0gPCZidWNrOF9yZWc+OwotCQkJdmlubDktc3VwcGx5ID0gPCZidWNrOF9yZWc+OwotCi0JCQlzNW04NzY3LHBtaWMtYnVjazItZHZzLXZvbHRhZ2UgPSA8MTMwMDAwMD47Ci0JCQlzNW04NzY3LHBtaWMtYnVjazMtZHZzLXZvbHRhZ2UgPSA8MTEwMDAwMD47Ci0JCQlzNW04NzY3LHBtaWMtYnVjazQtZHZzLXZvbHRhZ2UgPSA8MTIwMDAwMD47Ci0JCQlzNW04NzY3LHBtaWMtYnVjay1kdnMtZ3Bpb3MgPSA8JmdwZDEgMCAwPiwKLQkJCQkJCQk8JmdwZDEgMSAwPiwKLQkJCQkJCQk8JmdwZDEgMiAwPjsKLQkJCXM1bTg3NjcscG1pYy1idWNrLWRzLWdwaW9zID0gPCZncHgyIDMgMD4sCi0JCQkJCQkJPCZncHgyIDQgMD4sCi0JCQkJCQkJPCZncHgyIDUgMD47Ci0JCQlyZWd1bGF0b3JzIHsKLQkJCQlsZG8xX3JlZzogTERPMSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9BTElWRV8xLjBWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMl9yZWc6IExETzIgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMjhJT19EUF8xLjM1ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzNfcmVnOiBMRE8zIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0NPTU1PTjFfMS44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzRfcmVnOiBMRE80IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0lPUEVSSV8xLjhWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG81X3JlZzogTERPNSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9FWFRfMS44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzZfcmVnOiBMRE82IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX01QTExfMS4xViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzdfcmVnOiBMRE83IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX1hQTExfMS4xViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzhfcmVnOiBMRE84IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0NPTU1PTjJfMS4wViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzlfcmVnOiBMRE85IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREXzMzT05fMy4wViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMTBfcmVnOiBMRE8xMCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9DT01NT04zXzEuOFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8xMV9yZWc6IExETzExIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0FCQjJfMS44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzEyX3JlZzogTERPMTIgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfVVNCXzMuMFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8xM19yZWc6IExETzEzIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREUV9DMkNfV18xLjhWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMTRfcmVnOiBMRE8xNCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERDE4X0FCQjBfM18xLjhWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMTVfcmVnOiBMRE8xNSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERDEwX0NPTU1PTjRfMS4wViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzE2X3JlZzogTERPMTYgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWREQxOF9IU0lDXzEuOFYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8xN19yZWc6IExETzE3IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREUV9NTUMyXzNfMi44ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzE4X3JlZzogTERPMTggewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMzNPTl8yLjhWIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8yMl9yZWc6IExETzIyIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVhUXzMzX09GRiI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJbGRvMjNfcmVnOiBMRE8yMyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIkVYVF8yOF9PRkYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWxkbzI1X3JlZzogTERPMjUgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQVkREX0xETzI1IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlsZG8yNl9yZWc6IExETzI2IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVhUXzE4X09GRiI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJYnVjazFfcmVnOiBCVUNLMSB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9taWYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5NTAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWJ1Y2syX3JlZzogQlVDSzIgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfYXJtIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTEyNTAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlidWNrM19yZWc6IEJVQ0szIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2ludCI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDkwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJYnVjazRfcmVnOiBCVUNLNCB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9nM2QiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlidWNrNV9yZWc6IEJVQ0s1IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX01FTV8xLjM1ViI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDc1MDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTUwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCi0JCQkJYnVjazdfcmVnOiBCVUNLNyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gIlBWRERfQlVDSzciOwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlvcF9tb2RlID0gPDE+OwotCQkJCX07Ci0KLQkJCQlidWNrOF9yZWc6IEJVQ0s4IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUFZERF9CVUNLOCI7Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCW9wX21vZGUgPSA8MT47Ci0JCQkJfTsKLQotCQkJCWJ1Y2s5X3JlZzogQlVDSzkgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMzNfT0ZGX0VYVDEiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3NTAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKLQkJCQkJb3BfbW9kZSA9IDwxPjsKLQkJCQl9OwotCQkJfTsKLQkJfTsKLQl9OwotCi0JaTJjQDEyQzgwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCi0JCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwotCQlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NjYwMDA+OwotCQlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4NTA+OwotCi0JCWhkbWlkZGNANTAgewotCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtaGRtaWRkYyI7Ci0JCQlyZWcgPSA8MHg1MD47Ci0JCX07Ci0JfTsKLQotCWkyY0AxMkM5MDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQl3bTE4MTFhQDFhIHsKLQotCQkJY29tcGF0aWJsZSA9ICJ3bGYsd20xODExIjsKLQkJCXJlZyA9IDwweDFhPjsKLQotCQkJQVZERDItc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQlDUFZERC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCURCVkREMS1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCURCVkREMi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCURCVkREMy1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQkJCUxETzFWREQtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47Ci0JCQlTUEtWREQxLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OwotCQkJU1BLVkREMi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKLQotCQkJd2xmLGxkbzFlbmEgPSA8JmdwYjAgMCAwPjsKLQkJCXdsZixsZG8yZW5hID0gPCZncGIwIDEgMD47Ci0JCX07Ci0JfTsKLQotCWkyY0AxMkNFMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKLQkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKLQkJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDM4PjsKLQotCQloZG1pcGh5QDM4IHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEyLWhkbWlwaHkiOwotCQkJcmVnID0gPDB4Mzg+OwotCQl9OwotCX07Ci0KLQlpMmNAMTIxRDAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwotCQlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NDAwMDA+OwotCQlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4Mzg+OwotCi0JCXNhdGFfcGh5X2kyYzpzYXRhLXBoeUAzOCB7Ci0JCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjIjsKLQkJCXJlZyA9IDwweDM4PjsKLQkJfTsKLQl9OwotCi0Jc2F0YUAxMjJGMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OwotCi0Jc2F0YS1waHlAMTIxNzAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCXNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjLXBoYW5kbGUgPSA8JnNhdGFfcGh5X2kyYz47Ci0JfTsKLQotCW1tY18wOiBtbWNAMTIyMDAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCW51bS1zbG90cyA9IDwxPjsKLQkJYnJva2VuLWNkOwotCQljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OwotCQlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKLQkJdm1tYy1zdXBwbHkgPSA8Jm1tY19yZWc+OwotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JnNkMF9jbGsgJnNkMF9jbWQgJnNkMF9idXM0ICZzZDBfYnVzOD47Ci0JCWJ1cy13aWR0aCA9IDw4PjsKLQkJY2FwLW1tYy1oaWdoc3BlZWQ7Ci0JfTsKLQotCW1tY18yOiBtbWNAMTIyMjAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCW51bS1zbG90cyA9IDwxPjsKLQkJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47Ci0JCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47Ci0JCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47Ci0JCXZtbWMtc3VwcGx5ID0gPCZtbWNfcmVnPjsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXM0PjsKLQkJYnVzLXdpZHRoID0gPDQ+OwotCQlkaXNhYmxlLXdwOwotCQljYXAtc2QtaGlnaHNwZWVkOwotCX07Ci0KLQlpMnMwOiBpMnNAMDM4MzAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQogCWdwaW9fa2V5cyB7CiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKIAogCQltZW51IHsKIAkJCWxhYmVsID0gIlNXLVRBQ1QyIjsKLQkJCWdwaW9zID0gPCZncHgxIDQgMT47CisJCQlncGlvcyA9IDwmZ3B4MSA0IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPEtFWV9NRU5VPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQlob21lIHsKIAkJCWxhYmVsID0gIlNXLVRBQ1QzIjsKLQkJCWdwaW9zID0gPCZncHgxIDUgMT47CisJCQlncGlvcyA9IDwmZ3B4MSA1IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPEtFWV9IT01FPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAogCQl1cCB7CiAJCQlsYWJlbCA9ICJTVy1UQUNUNCI7Ci0JCQlncGlvcyA9IDwmZ3B4MSA2IDE+OworCQkJZ3Bpb3MgPSA8JmdweDEgNiBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDxLRVlfVVA+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCWRvd24gewogCQkJbGFiZWwgPSAiU1ctVEFDVDUiOwotCQkJZ3Bpb3MgPSA8JmdweDEgNyAxPjsKKwkJCWdwaW9zID0gPCZncHgxIDcgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWxpbnV4LGNvZGUgPSA8S0VZX0RPV04+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCWJhY2sgewogCQkJbGFiZWwgPSAiU1ctVEFDVDYiOwotCQkJZ3Bpb3MgPSA8JmdweDIgMCAxPjsKKwkJCWdwaW9zID0gPCZncHgyIDAgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWxpbnV4LGNvZGUgPSA8S0VZX0JBQ0s+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCXdha2V1cCB7CiAJCQlsYWJlbCA9ICJTVy1UQUNUNyI7Ci0JCQlncGlvcyA9IDwmZ3B4MiAxIDE+OworCQkJZ3Bpb3MgPSA8JmdweDIgMSBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDxLRVlfV0FLRVVQPjsKIAkJCWdwaW8ta2V5LHdha2V1cDsKIAkJfTsKIAl9OwogCi0JaGRtaSB7Ci0JCWhwZC1ncGlvID0gPCZncHgzIDcgMj47Ci0JCXZkZF9vc2Mtc3VwcGx5ID0gPCZsZG8xMF9yZWc+OwotCQl2ZGRfcGxsLXN1cHBseSA9IDwmbGRvOF9yZWc+OwotCQl2ZGQtc3VwcGx5ID0gPCZsZG84X3JlZz47Ci0JfTsKLQogCXJlZ3VsYXRvcnMgewogCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTUwMiw3ICs5MCw3IEBACiAJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMzNPTl8yLjhWIjsKIAkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OwogCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQlncGlvID0gPCZncHgxIDEgMT47CisJCQlncGlvID0gPCZncHgxIDEgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWVuYWJsZS1hY3RpdmUtaGlnaDsKIAkJfTsKIApAQCAtNTIwLDQ2ICsxMDgsNDU1IEBACiAJCX07CiAJfTsKIAotCWRwLWNvbnRyb2xsZXJAMTQ1QjAwMDAgewotCQlzYW1zdW5nLGNvbG9yLXNwYWNlID0gPDA+OwotCQlzYW1zdW5nLGR5bmFtaWMtcmFuZ2UgPSA8MD47Ci0JCXNhbXN1bmcseWNiY3ItY29lZmYgPSA8MD47Ci0JCXNhbXN1bmcsY29sb3ItZGVwdGggPSA8MT47Ci0JCXNhbXN1bmcsbGluay1yYXRlID0gPDB4MGE+OwotCQlzYW1zdW5nLGxhbmUtY291bnQgPSA8ND47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OworCS8vIFNNU0MgVVNCMzUwMyBjb25uZWN0ZWQgaW4gaGFyZHdhcmUgb25seSBtb2RlIGFzIGEgUEhZCisJdXNiX2h1YjogdXNiLWh1YiB7CisJCWNvbXBhdGlibGUgPSAic21zYyx1c2IzNTAzYSI7CiAKLQlmaW1kOiBmaW1kQDE0NDAwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlkaXNwbGF5LXRpbWluZ3MgewotCQkJbmF0aXZlLW1vZGUgPSA8JnRpbWluZzA+OwotCQkJdGltaW5nMDogdGltaW5nQDAgewotCQkJCS8qIDI1NjB4MTYwMCBEUCBwYW5lbCAqLwotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMD47Ci0JCQkJaGFjdGl2ZSA9IDwyNTYwPjsKLQkJCQl2YWN0aXZlID0gPDE2MDA+OwotCQkJCWhmcm9udC1wb3JjaCA9IDw0OD47Ci0JCQkJaGJhY2stcG9yY2ggPSA8ODA+OwotCQkJCWhzeW5jLWxlbiA9IDwzMj47Ci0JCQkJdmJhY2stcG9yY2ggPSA8MTY+OwotCQkJCXZmcm9udC1wb3JjaCA9IDw4PjsKLQkJCQl2c3luYy1sZW4gPSA8Nj47CisJCXJlc2V0LWdwaW9zID0gPCZncHgzIDUgR1BJT19BQ1RJVkVfTE9XPjsKKwkJY29ubmVjdC1ncGlvcyA9IDwmZ3BkMSA3IEdQSU9fQUNUSVZFX0xPVz47CisJfTsKK307CisKKyZkcCB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsY29sb3Itc3BhY2UgPSA8MD47CisJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OworCXNhbXN1bmcseWNiY3ItY29lZmYgPSA8MD47CisJc2Ftc3VuZyxjb2xvci1kZXB0aCA9IDwxPjsKKwlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKKwlzYW1zdW5nLGxhbmUtY291bnQgPSA8ND47Cit9OworCismZmltZCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZGlzcGxheS10aW1pbmdzIHsKKwkJbmF0aXZlLW1vZGUgPSA8JnRpbWluZzA+OworCisJCXRpbWluZzA6IHRpbWluZ0AwIHsKKwkJCS8qIDI1NjB4MTYwMCBEUCBwYW5lbCAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwPjsKKwkJCWhhY3RpdmUgPSA8MjU2MD47CisJCQl2YWN0aXZlID0gPDE2MDA+OworCQkJaGZyb250LXBvcmNoID0gPDQ4PjsKKwkJCWhiYWNrLXBvcmNoID0gPDgwPjsKKwkJCWhzeW5jLWxlbiA9IDwzMj47CisJCQl2YmFjay1wb3JjaCA9IDwxNj47CisJCQl2ZnJvbnQtcG9yY2ggPSA8OD47CisJCQl2c3luYy1sZW4gPSA8Nj47CisJCX07CisJfTsKK307CisKKyZoZG1pIHsKKwlocGQtZ3BpbyA9IDwmZ3B4MyA3IEdQSU9fQUNUSVZFX0xPVz47CisJdmRkX29zYy1zdXBwbHkgPSA8JmxkbzEwX3JlZz47CisJdmRkX3BsbC1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKKwl2ZGQtc3VwcGx5ID0gPCZsZG84X3JlZz47Cit9OworCismaTJjXzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MjAwMDA+OworCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHg2Nj47CisKKwlzNW04NzY3X3BtaWNANjYgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVtODc2Ny1wbWljIjsKKwkJcmVnID0gPDB4NjY+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgzPjsKKwkJaW50ZXJydXB0cyA9IDwyIElSUV9UWVBFX0xFVkVMX0xPVz47CisKKwkJdmluYjEtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmIyLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5iMy1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmluYjQtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmI1LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5iNi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmluYjctc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmI4LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5iOS1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKworCQl2aW5sMS1zdXBwbHkgPSA8JmJ1Y2s3X3JlZz47CisJCXZpbmwyLXN1cHBseSA9IDwmYnVjazdfcmVnPjsKKwkJdmlubDMtc3VwcGx5ID0gPCZidWNrN19yZWc+OworCQl2aW5sNC1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmlubDUtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCXZpbmw2LXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQl2aW5sNy1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJdmlubDgtc3VwcGx5ID0gPCZidWNrOF9yZWc+OworCQl2aW5sOS1zdXBwbHkgPSA8JmJ1Y2s4X3JlZz47CisKKwkJczVtODc2NyxwbWljLWJ1Y2syLWR2cy12b2x0YWdlID0gPDEzMDAwMDA+OworCQlzNW04NzY3LHBtaWMtYnVjazMtZHZzLXZvbHRhZ2UgPSA8MTEwMDAwMD47CisJCXM1bTg3NjcscG1pYy1idWNrNC1kdnMtdm9sdGFnZSA9IDwxMjAwMDAwPjsKKwkJczVtODc2NyxwbWljLWJ1Y2stZHZzLWdwaW9zID0gPCZncGQxIDAgR1BJT19BQ1RJVkVfSElHSD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwmZ3BkMSAxIEdQSU9fQUNUSVZFX0hJR0g+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdwZDEgMiBHUElPX0FDVElWRV9ISUdIPjsKKwkJczVtODc2NyxwbWljLWJ1Y2stZHMtZ3Bpb3MgPSA8JmdweDIgMyBHUElPX0FDVElWRV9ISUdIPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdweDIgNCBHUElPX0FDVElWRV9ISUdIPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdweDIgNSBHUElPX0FDVElWRV9ISUdIPjsKKworCQlyZWd1bGF0b3JzIHsKKwkJCWxkbzFfcmVnOiBMRE8xIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfQUxJVkVfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMl9yZWc6IExETzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF8yOElPX0RQXzEuMzVWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8zX3JlZzogTERPMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0NPTU1PTjFfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvNF9yZWc6IExETzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9JT1BFUklfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvNV9yZWc6IExETzUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9FWFRfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvNl9yZWc6IExETzYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9NUExMXzEuMVYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzdfcmVnOiBMRE83IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfWFBMTF8xLjFWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG84X3JlZzogTERPOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0NPTU1PTjJfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvOV9yZWc6IExETzkgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF8zM09OXzMuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xMF9yZWc6IExETzEwIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfQ09NTU9OM18xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xMV9yZWc6IExETzExIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfQUJCMl8xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xMl9yZWc6IExETzEyIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfVVNCXzMuMFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzEzX3JlZzogTERPMTMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERFFfQzJDX1dfMS44ViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMTRfcmVnOiBMRE8xNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREMThfQUJCMF8zXzEuOFYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzE1X3JlZzogTERPMTUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERDEwX0NPTU1PTjRfMS4wViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMTZfcmVnOiBMRE8xNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREMThfSFNJQ18xLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xN19yZWc6IExETzE3IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERRX01NQzJfM18yLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8xOF9yZWc6IExETzE4IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfMzNPTl8yLjhWIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMjJfcmVnOiBMRE8yMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVhUXzMzX09GRiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWxkbzIzX3JlZzogTERPMjMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIkVYVF8yOF9PRkYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlsZG8yNV9yZWc6IExETzI1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQVkREX0xETzI1IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJbGRvMjZfcmVnOiBMRE8yNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiRVhUXzE4X09GRiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2sxX3JlZzogQlVDSzEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9taWYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDk1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJYnVjazJfcmVnOiBCVUNLMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2FybSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTEyNTAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlidWNrM19yZWc6IEJVQ0szIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfaW50IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEyMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2s0X3JlZzogQlVDSzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9nM2QiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2s1X3JlZzogQlVDSzUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlZERF9NRU1fMS4zNVYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDc1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1NTAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJYnVjazdfcmVnOiBCVUNLNyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUFZERF9CVUNLNyI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJYnVjazhfcmVnOiBCVUNLOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUFZERF9CVUNLOCI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDE+OworCQkJfTsKKworCQkJYnVjazlfcmVnOiBCVUNLOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREXzMzX09GRl9FWFQxIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCW9wX21vZGUgPSA8MT47CiAJCQl9OwogCQl9OwogCX07Cit9OwogCi0JdXNiX2h1Yl9idXMgewotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47CismaTJjXzIgeworCXN0YXR1cyA9ICJva2F5IjsKIAotCQkvLyBTTVNDIFVTQjM1MDMgY29ubmVjdGVkIGluIGhhcmR3YXJlIG9ubHkgbW9kZSBhcyBhIFBIWQotCQl1c2JfaHViOiB1c2JfaHViIHsKLQkJCWNvbXBhdGlibGUgPSAic21zYyx1c2IzNTAzYSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4NTA+OwogCi0JCQlyZXNldC1ncGlvcyA9IDwmZ3B4MyA1IDE+OwotCQkJY29ubmVjdC1ncGlvcyA9IDwmZ3BkMSA3IDE+OwotCQl9OworCWhkbWlkZGNANTAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1oZG1pZGRjIjsKKwkJcmVnID0gPDB4NTA+OwogCX07CiB9OworCismaTJjXzMgeworCXN0YXR1cyA9ICJva2F5IjsKKworCXdtMTgxMWFAMWEgeworCQljb21wYXRpYmxlID0gIndsZix3bTE4MTEiOworCQlyZWcgPSA8MHgxYT47CisKKwkJQVZERDItc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCUNQVkRELXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQlEQlZERDEtc3VwcGx5ID0gPCZtYWluX2RjX3JlZz47CisJCURCVkREMi1zdXBwbHkgPSA8Jm1haW5fZGNfcmVnPjsKKwkJREJWREQzLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQlMRE8xVkRELXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQlTUEtWREQxLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCQlTUEtWREQyLXN1cHBseSA9IDwmbWFpbl9kY19yZWc+OworCisJCXdsZixsZG8xZW5hID0gPCZncGIwIDAgR1BJT19BQ1RJVkVfSElHSD47CisJCXdsZixsZG8yZW5hID0gPCZncGIwIDEgR1BJT19BQ1RJVkVfSElHSD47CisJfTsKK307CisKKyZpMmNfOCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKwlzYW1zdW5nLGkyYy1zbGF2ZS1hZGRyID0gPDB4Mzg+OworCisJaGRtaXBoeUAzOCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEyLWhkbWlwaHkiOworCQlyZWcgPSA8MHgzOD47CisJfTsKK307CisKKyZpMmNfOSB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw0MDAwMD47CisJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDM4PjsKKworCXNhdGFfcGh5X2kyYzpzYXRhLXBoeUAzOCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3Mtc2F0YXBoeS1pMmMiOworCQlyZWcgPSA8MHgzOD47CisJfTsKK307CisKKyZpMnMwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbWZjIHsKKwlzYW1zdW5nLG1mYy1yID0gPDB4NDMwMDAwMDAgMHg4MDAwMDA+OworCXNhbXN1bmcsbWZjLWwgPSA8MHg1MTAwMDAwMCAweDgwMDAwMD47Cit9OworCismbW1jXzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJYnJva2VuLWNkOworCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXZtbWMtc3VwcGx5ID0gPCZtbWNfcmVnPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2QwX2NsayAmc2QwX2NtZCAmc2QwX2J1czQgJnNkMF9idXM4PjsKKwlidXMtd2lkdGggPSA8OD47CisJY2FwLW1tYy1oaWdoc3BlZWQ7Cit9OworCismbW1jXzIgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwyIDM+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisJdm1tYy1zdXBwbHkgPSA8Jm1tY19yZWc+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXM0PjsKKwlidXMtd2lkdGggPSA8ND47CisJZGlzYWJsZS13cDsKKwljYXAtc2QtaGlnaHNwZWVkOworfTsKKworJnJ0YyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNhdGEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzYXRhX3BoeSB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjLXBoYW5kbGUgPSA8JnNhdGFfcGh5X2kyYz47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbWRrNTI1MC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNtZGs1MjUwLmR0cwppbmRleCA2YTBmNGMwLi5iYzI3Y2MyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNtZGs1MjUwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNtZGs1MjUwLmR0cwpAQCAtNyw5ICs3LDExIEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KKyAqLwogCiAvZHRzLXYxLzsKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KICNpbmNsdWRlICJleHlub3M1MjUwLmR0c2kiCiAKIC8gewpAQCAtMjcsMTY1ICsyOSw2IEBACiAJCWJvb3RhcmdzID0gInJvb3Q9L2Rldi9yYW0wIHJ3IHJhbWRpc2s9ODE5MiBpbml0cmQ9MHg0MTAwMDAwMCw4TSBjb25zb2xlPXR0eVNBQzIsMTE1MjAwIGluaXQ9L2xpbnV4cmMiOwogCX07CiAKLQlydGNAMTAxRTAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQotCWkyY0AxMkM2MDAwMCB7Ci0JCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwotCQlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MjAwMDA+OwotCQlzdGF0dXMgPSAib2theSI7Ci0KLQkJZWVwcm9tQDUwIHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNTI0YWQweGQxIjsKLQkJCXJlZyA9IDwweDUwPjsKLQkJfTsKLQotCQltYXg3NzY4NkAwOSB7Ci0JCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3Njg2IjsKLQkJCXJlZyA9IDwweDA5PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDM+OwotCQkJaW50ZXJydXB0cyA9IDwyIDA+OwotCi0JCQl2b2x0YWdlLXJlZ3VsYXRvcnMgewotCQkJCWxkbzFfcmVnOiBMRE8xIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDEiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJfTsKLQotCQkJCWxkbzJfcmVnOiBMRE8yIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMlZfTERPX09VVDIiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJfTsKLQotCQkJCWxkbzNfcmVnOiBMRE8zIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDMiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJfTsKLQotCQkJCWxkbzRfcmVnOiBMRE80IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDIuOFZfTERPX09VVDQiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MjgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzVfcmVnOiBMRE81IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDUiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzZfcmVnOiBMRE82IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMVZfTERPX09VVDYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJfTsKLQotCQkJCWxkbzdfcmVnOiBMRE83IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMVZfTERPX09VVDciOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTEwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJfTsKLQotCQkJCWxkbzhfcmVnOiBMRE84IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDgiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzEwX3JlZzogTERPMTAgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTAiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzExX3JlZzogTERPMTEgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTEiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzEyX3JlZzogTERPMTIgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMy4wVl9MRE9fT1VUMTIiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzEzX3JlZzogTERPMTMgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTMiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzE0X3JlZzogTERPMTQgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTQiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzE1X3JlZzogTERPMTUgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4wVl9MRE9fT1VUMTUiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWxkbzE2X3JlZzogTERPMTYgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUMTYiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJfTsKLQotCQkJCWJ1Y2sxX3JlZzogQlVDSzEgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbWlmIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTUwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCX07Ci0KLQkJCQlidWNrMl9yZWc6IEJVQ0syIHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2FybSI7Ci0JCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQl9OwotCi0JCQkJYnVjazNfcmVnOiBCVUNLMyB7Ci0JCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9pbnQiOwotCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKLQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKLQkJCQkJcmVndWxhdG9yLWJvb3Qtb247Ci0JCQkJfTsKLQotCQkJCWJ1Y2s0X3JlZzogQlVDSzQgewotCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfZzNkIjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODUwMDAwPjsKLQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1hbHdheXMtb247Ci0JCQkJCXJlZ3VsYXRvci1ib290LW9uOwotCQkJCX07Ci0KLQkJCQlidWNrNV9yZWc6IEJVQ0s1IHsKLQkJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfQlVDS19PVVQ1IjsKLQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47Ci0JCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwotCQkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKLQkJCQl9OwotCQkJfTsKLQkJfTsKLQl9OwotCiAJdmRkOiBmaXhlZC1yZWd1bGF0b3JAMCB7CiAJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKIAkJcmVndWxhdG9yLW5hbWUgPSAidmRkLXN1cHBseSI7CkBAIC0yMTAsMTQ2ICs1Myw2IEBACiAJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJfTsKIAotCWkyY0AxMkM3MDAwMCB7Ci0JCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwotCQlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MjAwMDA+OwotCQlzdGF0dXMgPSAib2theSI7Ci0KLQkJZWVwcm9tQDUxIHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNTI0YWQweGQxIjsKLQkJCXJlZyA9IDwweDUxPjsKLQkJfTsKLQotCQl3bTg5OTQ6IHdtODk5NEAxYSB7Ci0JCQljb21wYXRpYmxlID0gIndsZix3bTg5OTQiOwotCQkJcmVnID0gPDB4MWE+OwotCi0JCQlncGlvLWNvbnRyb2xsZXI7Ci0JCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQotCQkJY2xvY2tzID0gPCZjb2RlY19tY2xrPjsKLQkJCWNsb2NrLW5hbWVzID0gIk1DTEsxIjsKLQotCQkJQVZERDItc3VwcGx5ID0gPCZ2ZGQ+OwotCQkJQ1BWREQtc3VwcGx5ID0gPCZ2ZGQ+OwotCQkJREJWREQtc3VwcGx5ID0gPCZkYnZkZD47Ci0JCQlTUEtWREQxLXN1cHBseSA9IDwmc3BrdmRkPjsKLQkJCVNQS1ZERDItc3VwcGx5ID0gPCZzcGt2ZGQ+OwotCQl9OwotCX07Ci0KLQlpMmNAMTIxRDAwMDAgewotCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKLQkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDQwMDAwPjsKLQkJc2Ftc3VuZyxpMmMtc2xhdmUtYWRkciA9IDwweDM4PjsKLQkJc3RhdHVzID0gIm9rYXkiOwotCi0JCXNhdGFfcGh5X2kyYzpzYXRhLXBoeUAzOCB7Ci0JCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjIjsKLQkJCXJlZyA9IDwweDM4PjsKLQkJfTsKLQl9OwotCi0JaTJjQDEyQzgwMDAwIHsKLQkJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47Ci0JCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQloZG1pZGRjQDUwIHsKLQkJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLWhkbWlkZGMiOwotCQkJcmVnID0gPDB4NTA+OwotCQl9OwotCX07Ci0KLQlpMmNAMTJDRTAwMDAgewotCQlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKLQkJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKLQkJc3RhdHVzID0gIm9rYXkiOwotCi0JCWhkbWlwaHlAMzggewotCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItaGRtaXBoeSI7Ci0JCQlyZWcgPSA8MHgzOD47Ci0JCX07Ci0JfTsKLQotCXNhdGFAMTIyRjAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JfTsKLQotCXNhdGEtcGh5QDEyMTcwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlzYW1zdW5nLGV4eW5vcy1zYXRhcGh5LWkyYy1waGFuZGxlID0gPCZzYXRhX3BoeV9pMmM+OwotCX07Ci0KLQltbWNAMTIyMDAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCW51bS1zbG90cyA9IDwxPjsKLQkJYnJva2VuLWNkOwotCQljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OwotCQlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZzZDBfY2xrICZzZDBfY21kICZzZDBfYnVzNCAmc2QwX2J1czg+OwotCQlidXMtd2lkdGggPSA8OD47Ci0JCWNhcC1tbWMtaGlnaHNwZWVkOwotCX07Ci0KLQltbWNAMTIyMjAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCW51bS1zbG90cyA9IDwxPjsKLQkJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKLQkJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47Ci0JCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47Ci0JCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47Ci0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmc2QyX2NsayAmc2QyX2NtZCAmc2QyX2NkICZzZDJfYnVzND47Ci0JCWJ1cy13aWR0aCA9IDw0PjsKLQkJZGlzYWJsZS13cDsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQl9OwotCi0Jc3BpXzE6IHNwaUAxMmQzMDAwMCB7Ci0JCWNzLWdwaW9zID0gPCZncGEyIDUgMD47Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQotCQl3MjVxODBid0AwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljb21wYXRpYmxlID0gIncyNXg4MCI7Ci0JCQlyZWcgPSA8MD47Ci0JCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwxMDAwMDAwPjsKLQotCQkJY29udHJvbGxlci1kYXRhIHsKLQkJCQlzYW1zdW5nLHNwaS1mZWVkYmFjay1kZWxheSA9IDwwPjsKLQkJCX07Ci0KLQkJCXBhcnRpdGlvbkAwIHsKLQkJCQlsYWJlbCA9ICJVLUJvb3QiOwotCQkJCXJlZyA9IDwweDAgMHg0MDAwMD47Ci0JCQkJcmVhZC1vbmx5OwotCQkJfTsKLQotCQkJcGFydGl0aW9uQDQwMDAwIHsKLQkJCQlsYWJlbCA9ICJLZXJuZWwiOwotCQkJCXJlZyA9IDwweDQwMDAwIDB4YzAwMDA+OwotCQkJfTsKLQkJfTsKLQl9OwotCi0JaGRtaSB7Ci0JCWhwZC1ncGlvID0gPCZncHgzIDcgMD47Ci0JfTsKLQotCWNvZGVjQDExMDAwMDAwIHsKLQkJc2Ftc3VuZyxtZmMtciA9IDwweDQzMDAwMDAwIDB4ODAwMDAwPjsKLQkJc2Ftc3VuZyxtZmMtbCA9IDwweDUxMDAwMDAwIDB4ODAwMDAwPjsKLQl9OwotCi0JaTJzMDogaTJzQDAzODMwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07Ci0KIAlzb3VuZCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzbWRrLXdtODk5NCI7CiAKQEAgLTM1Nyw0MiArNjAsNiBAQAogCQlzYW1zdW5nLGF1ZGlvLWNvZGVjID0gPCZ3bTg5OTQ+OwogCX07CiAKLQl1c2JAMTIxMTAwMDAgewotCQlzYW1zdW5nLHZidXMtZ3BpbyA9IDwmZ3B4MiA2IDA+OwotCX07Ci0KLQlkcC1jb250cm9sbGVyQDE0NUIwMDAwIHsKLQkJc2Ftc3VuZyxjb2xvci1zcGFjZSA9IDwwPjsKLQkJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OwotCQlzYW1zdW5nLHljYmNyLWNvZWZmID0gPDA+OwotCQlzYW1zdW5nLGNvbG9yLWRlcHRoID0gPDE+OwotCQlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKLQkJc2Ftc3VuZyxsYW5lLWNvdW50ID0gPDQ+OwotCi0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmZHBfaHBkPjsKLQkJc3RhdHVzID0gIm9rYXkiOwotCX07Ci0KLQlmaW1kQDE0NDAwMDAwIHsKLQkJc3RhdHVzID0gIm9rYXkiOwotCQlkaXNwbGF5LXRpbWluZ3MgewotCQkJbmF0aXZlLW1vZGUgPSA8JnRpbWluZzA+OwotCQkJdGltaW5nMDogdGltaW5nQDAgewotCQkJCS8qIDEyODB4ODAwICovCi0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwPjsKLQkJCQloYWN0aXZlID0gPDEyODA+OwotCQkJCXZhY3RpdmUgPSA8ODAwPjsKLQkJCQloZnJvbnQtcG9yY2ggPSA8ND47Ci0JCQkJaGJhY2stcG9yY2ggPSA8ND47Ci0JCQkJaHN5bmMtbGVuID0gPDQ+OwotCQkJCXZiYWNrLXBvcmNoID0gPDQ+OwotCQkJCXZmcm9udC1wb3JjaCA9IDw0PjsKLQkJCQl2c3luYy1sZW4gPSA8ND47Ci0JCQl9OwotCQl9OwotCX07Ci0KIAlmaXhlZC1yYXRlLWNsb2NrcyB7CiAJCXh4dGkgewogCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGNsb2NrLXh4dGkiOwpAQCAtNDA2LDMgKzczLDM0MCBAQAogCQl9OwogCX07CiB9OworCismZHAgeworCXNhbXN1bmcsY29sb3Itc3BhY2UgPSA8MD47CisJc2Ftc3VuZyxkeW5hbWljLXJhbmdlID0gPDA+OworCXNhbXN1bmcseWNiY3ItY29lZmYgPSA8MD47CisJc2Ftc3VuZyxjb2xvci1kZXB0aCA9IDwxPjsKKwlzYW1zdW5nLGxpbmstcmF0ZSA9IDwweDBhPjsKKwlzYW1zdW5nLGxhbmUtY291bnQgPSA8ND47CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmZHBfaHBkPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZWhjaSB7CisJc2Ftc3VuZyx2YnVzLWdwaW8gPSA8JmdweDIgNiBHUElPX0FDVElWRV9ISUdIPjsKK307CisKKyZmaW1kIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlkaXNwbGF5LXRpbWluZ3MgeworCQluYXRpdmUtbW9kZSA9IDwmdGltaW5nMD47CisKKwkJdGltaW5nMDogdGltaW5nQDAgeworCQkJLyogMTI4MHg4MDAgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMD47CisJCQloYWN0aXZlID0gPDEyODA+OworCQkJdmFjdGl2ZSA9IDw4MDA+OworCQkJaGZyb250LXBvcmNoID0gPDQ+OworCQkJaGJhY2stcG9yY2ggPSA8ND47CisJCQloc3luYy1sZW4gPSA8ND47CisJCQl2YmFjay1wb3JjaCA9IDw0PjsKKwkJCXZmcm9udC1wb3JjaCA9IDw0PjsKKwkJCXZzeW5jLWxlbiA9IDw0PjsKKwkJfTsKKwl9OworfTsKKworJmhkbWkgeworCWhwZC1ncGlvID0gPCZncHgzIDcgR1BJT19BQ1RJVkVfSElHSD47Cit9OworCismaTJjXzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8MjAwMDA+OworCisJZWVwcm9tQDUwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1MjRhZDB4ZDEiOworCQlyZWcgPSA8MHg1MD47CisJfTsKKworCW1heDc3Njg2QDA5IHsKKwkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY4NiI7CisJCXJlZyA9IDwweDA5PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mz47CisJCWludGVycnVwdHMgPSA8MiBJUlFfVFlQRV9OT05FPjsKKworCQl2b2x0YWdlLXJlZ3VsYXRvcnMgeworCQkJbGRvMV9yZWc6IExETzEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjBWX0xET19PVVQxIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvMl9yZWc6IExETzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjJWX0xET19PVVQyIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvM19yZWc6IExETzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQzIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJbGRvNF9yZWc6IExETzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAyLjhWX0xET19PVVQ0IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzVfcmVnOiBMRE81IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9MRE9fT1VUNSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG82X3JlZzogTERPNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMVZfTERPX09VVDYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG83X3JlZzogTERPNyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMVZfTERPX09VVDciOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDExMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQlsZG84X3JlZzogTERPOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDgiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJfTsKKworCQkJbGRvMTBfcmVnOiBMRE8xMCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDEwIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzExX3JlZzogTERPMTEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxMSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8xMl9yZWc6IExETzEyIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMy4wVl9MRE9fT1VUMTIiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJfTsKKworCQkJbGRvMTNfcmVnOiBMRE8xMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDEzIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWxkbzE0X3JlZzogTERPMTQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxNCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQl9OworCisJCQlsZG8xNV9yZWc6IExETzE1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4wVl9MRE9fT1VUMTUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJfTsKKworCQkJbGRvMTZfcmVnOiBMRE8xNiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDE2IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCX07CisKKwkJCWJ1Y2sxX3JlZzogQlVDSzEgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9taWYiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDk1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisKKwkJCWJ1Y2syX3JlZzogQlVDSzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9hcm0iOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisKKwkJCWJ1Y2szX3JlZzogQlVDSzMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9pbnQiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDkwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisKKwkJCWJ1Y2s0X3JlZzogQlVDSzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9nM2QiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTMwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisKKwkJCWJ1Y2s1X3JlZzogQlVDSzUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0JVQ0tfT1VUNSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZpMmNfMSB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwyMDAwMD47CisKKwllZXByb21ANTEgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsczUyNGFkMHhkMSI7CisJCXJlZyA9IDwweDUxPjsKKwl9OworCisJd204OTk0OiB3bTg5OTRAMWEgeworCQljb21wYXRpYmxlID0gIndsZix3bTg5OTQiOworCQlyZWcgPSA8MHgxYT47CisKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKworCQljbG9ja3MgPSA8JmNvZGVjX21jbGs+OworCQljbG9jay1uYW1lcyA9ICJNQ0xLMSI7CisKKwkJQVZERDItc3VwcGx5ID0gPCZ2ZGQ+OworCQlDUFZERC1zdXBwbHkgPSA8JnZkZD47CisJCURCVkRELXN1cHBseSA9IDwmZGJ2ZGQ+OworCQlTUEtWREQxLXN1cHBseSA9IDwmc3BrdmRkPjsKKwkJU1BLVkREMi1zdXBwbHkgPSA8JnNwa3ZkZD47CisJfTsKK307CisKKyZpMmNfMiB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisKKwloZG1pZGRjQDUwIHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtaGRtaWRkYyI7CisJCXJlZyA9IDwweDUwPjsKKwl9OworfTsKKworJmkyY184IHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKworCWhkbWlwaHlAMzggeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1oZG1pcGh5IjsKKwkJcmVnID0gPDB4Mzg+OworCX07Cit9OworCismaTJjXzkgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NDAwMDA+OworCXNhbXN1bmcsaTJjLXNsYXZlLWFkZHIgPSA8MHgzOD47CisKKwlzYXRhX3BoeV9pMmM6IHNhdGEtcGh5QDM4IHsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vcy1zYXRhcGh5LWkyYyI7CisJCXJlZyA9IDwweDM4PjsKKwl9OworfTsKKworJmkyczAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtZmMgeworCXNhbXN1bmcsbWZjLXIgPSA8MHg0MzAwMDAwMCAweDgwMDAwMD47CisJc2Ftc3VuZyxtZmMtbCA9IDwweDUxMDAwMDAwIDB4ODAwMDAwPjsKK307CisKKyZtbWNfMCB7CisJc3RhdHVzID0gIm9rYXkiOworCW51bS1zbG90cyA9IDwxPjsKKwlicm9rZW4tY2Q7CisJY2FyZC1kZXRlY3QtZGVsYXkgPSA8MjAwPjsKKwlzYW1zdW5nLGR3LW1zaGMtY2l1LWRpdiA9IDwzPjsKKwlzYW1zdW5nLGR3LW1zaGMtc2RyLXRpbWluZyA9IDwyIDM+OworCXNhbXN1bmcsZHctbXNoYy1kZHItdGltaW5nID0gPDEgMj47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9jbGsgJnNkMF9jbWQgJnNkMF9idXM0ICZzZDBfYnVzOD47CisJYnVzLXdpZHRoID0gPDg+OworCWNhcC1tbWMtaGlnaHNwZWVkOworfTsKKworJm1tY18yIHsKKwlzdGF0dXMgPSAib2theSI7CisJbnVtLXNsb3RzID0gPDE+OworCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CisJc2Ftc3VuZyxkdy1tc2hjLWNpdS1kaXYgPSA8Mz47CisJc2Ftc3VuZyxkdy1tc2hjLXNkci10aW1pbmcgPSA8MiAzPjsKKwlzYW1zdW5nLGR3LW1zaGMtZGRyLXRpbWluZyA9IDwxIDI+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXM0PjsKKwlidXMtd2lkdGggPSA8ND47CisJZGlzYWJsZS13cDsKKwljYXAtc2QtaGlnaHNwZWVkOworfTsKKworJnJ0YyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNhdGEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzYXRhX3BoeSB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsZXh5bm9zLXNhdGFwaHktaTJjLXBoYW5kbGUgPSA8JnNhdGFfcGh5X2kyYz47Cit9OworCismc3BpXzEgeworCXN0YXR1cyA9ICJva2F5IjsKKwljcy1ncGlvcyA9IDwmZ3BhMiA1IEdQSU9fQUNUSVZFX0hJR0g+OworCisJdzI1cTgwYndAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJ3MjV4ODAiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDA+OworCisJCWNvbnRyb2xsZXItZGF0YSB7CisJCQlzYW1zdW5nLHNwaS1mZWVkYmFjay1kZWxheSA9IDwwPjsKKwkJfTsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJVLUJvb3QiOworCQkJcmVnID0gPDB4MCAweDQwMDAwPjsKKwkJCXJlYWQtb25seTsKKwkJfTsKKworCQlwYXJ0aXRpb25ANDAwMDAgeworCQkJbGFiZWwgPSAiS2VybmVsIjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4YzAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbm93LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAtc25vdy5kdHMKaW5kZXggNjA0MjlhZC4uZWZmYWYyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zbm93LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNub3cuZHRzCkBAIC02LDEwICs2LDEzIEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KKyAqLwogCiAvZHRzLXYxLzsKICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9tYXhpbSxtYXg3NzY4Ni5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAjaW5jbHVkZSAiZXh5bm9zNTI1MC5kdHNpIgogCiAvIHsKQEAgLTI1LDc2ICsyOCw3IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JfTsKLQotCXJ0Y0AxMDFFMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OwotCi0JcGluY3RybEAxMTQwMDAwMCB7Ci0JCWVjX2lycTogZWMtaXJxIHsKLQkJCXNhbXN1bmcscGlucyA9ICJncHgxLTYiOwotCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47Ci0JCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJc2QzX2Nsazogc2QzLWNsayB7Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJc2QzX2NtZDogc2QzLWNtZCB7Ci0JCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJc2QzX2J1czQ6IHNkMy1idXMtd2lkdGg0IHsKLQkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKLQkJfTsKLQotCQltYXg5ODA5NV9lbjogbWF4OTgwOTUtZW4gewotCQkJc2Ftc3VuZyxwaW5zID0gImdweDEtNyI7Ci0JCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKLQkJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKLQkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKLQkJfTsKLQotCQl0cHM2NTA5MF9pcnE6IHRwczY1MDkwLWlycSB7Ci0JCQlzYW1zdW5nLHBpbnMgPSAiZ3B4Mi02IjsKLQkJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OwotCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OwotCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwotCQl9OwotCi0JCXVzYjNfdmJ1c19lbjogdXNiMy12YnVzLWVuIHsKLQkJCXNhbXN1bmcscGlucyA9ICJncHgyLTciOwotCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MT47Ci0JCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJaGRtaV9ocGRfaXJxOiBoZG1pLWhwZC1pcnEgewotCQkJc2Ftc3VuZyxwaW5zID0gImdweDMtNyI7Ci0JCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKLQkJCXNhbXN1bmcscGluLXB1ZCA9IDwxPjsKLQkJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKLQkJfTsKLQl9OwotCi0JcGluY3RybEAxMzQwMDAwMCB7Ci0JCWFyYl90aGVpcl9jbGFpbTogYXJiLXRoZWlyLWNsYWltIHsKLQkJCXNhbXN1bmcscGlucyA9ICJncGUwLTQiOwotCQkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47Ci0JCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47Ci0JCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Ci0JCX07Ci0KLQkJYXJiX291cl9jbGFpbTogYXJiLW91ci1jbGFpbSB7Ci0JCQlzYW1zdW5nLHBpbnMgPSAiZ3BmMC0zIjsKLQkJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDE+OwotCQkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OwotCQkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwotCQl9OworCQlib290YXJncyA9ICJjb25zb2xlPXR0eTEiOwogCX07CiAKIAlncGlvLWtleXMgewpAQCAtMTAyLDE0ICszNiwxNCBAQAogCiAJCXBvd2VyIHsKIAkJCWxhYmVsID0gIlBvd2VyIjsKLQkJCWdwaW9zID0gPCZncHgxIDMgMT47Ci0JCQlsaW51eCxjb2RlID0gPDExNj47IC8qIEtFWV9QT1dFUiAqLworCQkJZ3Bpb3MgPSA8JmdweDEgMyBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OwogCQkJZ3Bpby1rZXksd2FrZXVwOwogCQl9OwogCiAJCWxpZC1zd2l0Y2ggewogCQkJbGFiZWwgPSAiTGlkIjsKLQkJCWdwaW9zID0gPCZncHgzIDUgMT47CisJCQlncGlvcyA9IDwmZ3B4MyA1IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxpbnB1dC10eXBlID0gPDU+OyAvKiBFVl9TVyAqLwogCQkJbGludXgsY29kZSA9IDwwPjsgLyogU1dfTElEICovCiAJCQlkZWJvdW5jZS1pbnRlcnZhbCA9IDwxPjsKQEAgLTEzMCw4ICs2NCw4IEBACiAKIAkJaTJjLXBhcmVudCA9IDwmey9pMmNAMTJDQTAwMDB9PjsKIAotCQlvdXItY2xhaW0tZ3BpbyA9IDwmZ3BmMCAzIDE+OwotCQl0aGVpci1jbGFpbS1ncGlvcyA9IDwmZ3BlMCA0IDE+OworCQlvdXItY2xhaW0tZ3BpbyA9IDwmZ3BmMCAzIEdQSU9fQUNUSVZFX0xPVz47CisJCXRoZWlyLWNsYWltLWdwaW9zID0gPCZncGUwIDQgR1BJT19BQ1RJVkVfTE9XPjsKIAkJc2xldy1kZWxheS11cyA9IDwxMD47CiAJCXdhaXQtcmV0cnktdXMgPSA8MzAwMD47CiAJCXdhaXQtZnJlZS11cyA9IDw1MDAwMD47CkBAIC0xNTQsNyArODgsNyBAQAogCQkJY3Jvc19lYzogZW1iZWRkZWQtY29udHJvbGxlciB7CiAJCQkJY29tcGF0aWJsZSA9ICJnb29nbGUsY3Jvcy1lYy1pMmMiOwogCQkJCXJlZyA9IDwweDFlPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDYgMD47CisJCQkJaW50ZXJydXB0cyA9IDw2IElSUV9UWVBFX05PTkU+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQkJcGluY3RybC0wID0gPCZlY19pcnE+OwpAQCAtMjQxLDEzICsxNzUsNiBAQAogCX07CiAKIAlpMmNAMTJDRDAwMDAgewotCQltYXg5ODA5NTogY29kZWNAMTEgewotCQkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg5ODA5NSI7Ci0JCQlyZWcgPSA8MHgxMT47Ci0JCQlwaW5jdHJsLTAgPSA8Jm1heDk4MDk1X2VuPjsKLQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCX07Ci0KIAkJcHRuMzQ2MDogbHZkcy1icmlkZ2VAMjAgewogCQkJY29tcGF0aWJsZSA9ICJueHAscHRuMzQ2MCI7CiAJCQlyZWcgPSA8MHgyMD47CkBAIC0yNTgsMTAgKzE4NSw2IEBACiAJCX07CiAJfTsKIAotCWkyczA6IGkyc0AwMzgzMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQl9OwotCiAJc291bmQgewogCQljb21wYXRpYmxlID0gImdvb2dsZSxzbm93LWF1ZGlvLW1heDk4MDk1IjsKIApAQCAtMjc1LDIwICsxOTgsMTIgQEAKIAkJcmVndWxhdG9yLW5hbWUgPSAiUDUuMFZfVVNCM0NPTiI7CiAJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OwogCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKLQkJZ3BpbyA9IDwmZ3B4MiA3IDA+OworCQlncGlvID0gPCZncHgyIDcgR1BJT19BQ1RJVkVfSElHSD47CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmdXNiM192YnVzX2VuPjsKIAkJZW5hYmxlLWFjdGl2ZS1oaWdoOwogCX07CiAKLQlwaHlAMTIxMDAwMDAgewotCQl2YnVzLXN1cHBseSA9IDwmdXNiM192YnVzX3JlZz47Ci0JfTsKLQotCXVzYkAxMjExMDAwMCB7Ci0JCXNhbXN1bmcsdmJ1cy1ncGlvID0gPCZncHgxIDEgMD47Ci0JfTsKLQogCWZpeGVkLXJhdGUtY2xvY2tzIHsKIAkJeHh0aSB7CiAJCQljb21wYXRpYmxlID0gInNhbXN1bmcsY2xvY2steHh0aSI7CkBAIC0yOTYsMTggKzIxMSw2IEBACiAJCX07CiAJfTsKIAotCWhkbWkgewotCQlocGQtZ3BpbyA9IDwmZ3B4MyA3IDA+OwotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JmhkbWlfaHBkX2lycT47Ci0JCXBoeSA9IDwmaGRtaXBoeT47Ci0JCWRkYyA9IDwmaTJjXzI+OwotCQloZG1pLWVuLXN1cHBseSA9IDwmdHBzNjUwOTBfZmV0Nz47Ci0JCXZkZC1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKLQkJdmRkX29zYy1zdXBwbHkgPSA8JmxkbzEwX3JlZz47Ci0JCXZkZF9wbGwtc3VwcGx5ID0gPCZsZG84X3JlZz47Ci0JfTsKLQogCWJhY2tsaWdodDogYmFja2xpZ2h0IHsKIAkJY29tcGF0aWJsZSA9ICJwd20tYmFja2xpZ2h0IjsKIAkJcHdtcyA9IDwmcHdtIDAgMTAwMDAwMCAwPjsKQEAgLTMxOSwzMCArMjIyLDQ2IEBACiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJfTsKIAotCWZpbWRAMTQ0MDAwMDAgewotCQlzdGF0dXMgPSAib2theSI7Ci0JCXNhbXN1bmcsaW52ZXJ0LXZjbGs7Ci0JfTsKLQogCXBhbmVsOiBwYW5lbCB7CiAJCWNvbXBhdGlibGUgPSAiYXVvLGIxMTZ4dzAzIjsKIAkJcG93ZXItc3VwcGx5ID0gPCZmZXQ2PjsKIAkJYmFja2xpZ2h0ID0gPCZiYWNrbGlnaHQ+OwogCX07Cit9OwogCi0JZHAtY29udHJvbGxlckAxNDVCMDAwMCB7Ci0JCXN0YXR1cyA9ICJva2F5IjsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZkcF9ocGQ+OwotCQlzYW1zdW5nLGNvbG9yLXNwYWNlID0gPDA+OwotCQlzYW1zdW5nLGR5bmFtaWMtcmFuZ2UgPSA8MD47Ci0JCXNhbXN1bmcseWNiY3ItY29lZmYgPSA8MD47Ci0JCXNhbXN1bmcsY29sb3ItZGVwdGggPSA8MT47Ci0JCXNhbXN1bmcsbGluay1yYXRlID0gPDB4MGE+OwotCQlzYW1zdW5nLGxhbmUtY291bnQgPSA8Mj47Ci0JCXNhbXN1bmcsaHBkLWdwaW8gPSA8JmdweDAgNyAwPjsKLQkJYnJpZGdlID0gPCZwdG4zNDYwPjsKLQl9OworJmRwIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmRwX2hwZD47CisJc2Ftc3VuZyxjb2xvci1zcGFjZSA9IDwwPjsKKwlzYW1zdW5nLGR5bmFtaWMtcmFuZ2UgPSA8MD47CisJc2Ftc3VuZyx5Y2Jjci1jb2VmZiA9IDwwPjsKKwlzYW1zdW5nLGNvbG9yLWRlcHRoID0gPDE+OworCXNhbXN1bmcsbGluay1yYXRlID0gPDB4MGE+OworCXNhbXN1bmcsbGFuZS1jb3VudCA9IDwyPjsKKwlzYW1zdW5nLGhwZC1ncGlvID0gPCZncHgwIDcgR1BJT19BQ1RJVkVfSElHSD47CisJYnJpZGdlID0gPCZwdG4zNDYwPjsKK307CisKKyZlaGNpIHsKKwlzYW1zdW5nLHZidXMtZ3BpbyA9IDwmZ3B4MSAxIEdQSU9fQUNUSVZFX0hJR0g+OworfTsKKworJmZpbWQgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGludmVydC12Y2xrOworfTsKKworJmhkbWkgeworCWhwZC1ncGlvID0gPCZncHgzIDcgR1BJT19BQ1RJVkVfSElHSD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmhkbWlfaHBkX2lycT47CisJcGh5ID0gPCZoZG1pcGh5PjsKKwlkZGMgPSA8JmkyY18yPjsKKwloZG1pLWVuLXN1cHBseSA9IDwmdHBzNjUwOTBfZmV0Nz47CisJdmRkLXN1cHBseSA9IDwmbGRvOF9yZWc+OworCXZkZF9vc2Mtc3VwcGx5ID0gPCZsZG8xMF9yZWc+OworCXZkZF9wbGwtc3VwcGx5ID0gPCZsZG84X3JlZz47CiB9OwogCiAmaTJjXzAgewpAQCAtMzUwLDEwICsyNjksMTAgQEAKIAlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKIAlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8Mzc4MDAwPjsKIAotCW1heDc3Njg2QDA5IHsKKwltYXg3NzY4NjogbWF4Nzc2ODZAMDkgewogCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3Njg2IjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3B4Mz47Ci0JCWludGVycnVwdHMgPSA8MiAwPjsKKwkJaW50ZXJydXB0cyA9IDwyIElSUV9UWVBFX05PTkU+OwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8Jm1heDc3Njg2X2lycT47CiAJCXdha2V1cC1zb3VyY2U7CkBAIC01MDMsNyArNDIyLDcgQEAKIAl0cmFja3BhZCB7CiAJCXJlZyA9IDwweDY3PjsKIAkJY29tcGF0aWJsZSA9ICJjeXByZXNzLGN5YXBhIjsKLQkJaW50ZXJydXB0cyA9IDwyIDA+OworCQlpbnRlcnJ1cHRzID0gPDIgSVJRX1RZUEVfTk9ORT47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OwogCQl3YWtldXAtc291cmNlOwogCX07CkBAIC01NTAsNiArNDY5LDEzIEBACiAJc3RhdHVzID0gIm9rYXkiOwogCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OwogCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDw2NjAwMD47CisKKwltYXg5ODA5NTogY29kZWNAMTEgeworCQljb21wYXRpYmxlID0gIm1heGltLG1heDk4MDk1IjsKKwkJcmVnID0gPDB4MTE+OworCQlwaW5jdHJsLTAgPSA8Jm1heDk4MDk1X2VuPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwl9OwogfTsKIAogJmkyY184IHsKQEAgLTU2Myw2ICs0ODksMTAgQEAKIAl9OwogfTsKIAorJmkyczAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZtbWNfMCB7CiAJc3RhdHVzID0gIm9rYXkiOwogCW51bS1zbG90cyA9IDwxPjsKQEAgLTU4Nyw3ICs1MTcsNyBAQAogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZzZDJfY2xrICZzZDJfY21kICZzZDJfY2QgJnNkMl9idXM0PjsKIAlidXMtd2lkdGggPSA8ND47Ci0Jd3AtZ3Bpb3MgPSA8JmdwYzIgMSAwPjsKKwl3cC1ncGlvcyA9IDwmZ3BjMiAxIEdQSU9fQUNUSVZFX0hJR0g+OwogCWNhcC1zZC1oaWdoc3BlZWQ7CiB9OwogCkBAIC02MTAsMTIgKzU0MCw4MiBAQAogfTsKIAogJnBpbmN0cmxfMCB7CisJZWNfaXJxOiBlYy1pcnEgeworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4MS02IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwltYXg5ODA5NV9lbjogbWF4OTgwOTUtZW4geworCQlzYW1zdW5nLHBpbnMgPSAiZ3B4MS03IjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl0cHM2NTA5MF9pcnE6IHRwczY1MDkwLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgyLTYiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCXVzYjNfdmJ1c19lbjogdXNiMy12YnVzLWVuIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDItNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDE+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCiAJbWF4Nzc2ODZfaXJxOiBtYXg3NzY4Ni1pcnEgewogCQlzYW1zdW5nLHBpbnMgPSAiZ3B4My0yIjsKIAkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CiAJCXNhbXN1bmcscGluLXB1ZCA9IDwwPjsKIAkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OwogCX07CisKKwloZG1pX2hwZF9pcnE6IGhkbWktaHBkLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgzLTciOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDE+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZwaW5jdHJsXzEgeworCWFyYl90aGVpcl9jbGFpbTogYXJiLXRoZWlyLWNsYWltIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZTAtNCI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJYXJiX291cl9jbGFpbTogYXJiLW91ci1jbGFpbSB7CisJCXNhbXN1bmcscGlucyA9ICJncGYwLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwxPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZydGMgeworCXN0YXR1cyA9ICJva2F5IjsKKwljbG9ja3MgPSA8JmNsb2NrIENMS19SVEM+LCA8Jm1heDc3Njg2IE1BWDc3Njg2X0NMS19BUD47CisJY2xvY2stbmFtZXMgPSAicnRjIiwgInJ0Y19zcmMiOworfTsKKworJnNkM19idXM0IHsKKwlzYW1zdW5nLHBpbi1kcnYgPSA8MD47Cit9OworCismc2QzX2NsayB7CisJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworfTsKKworJnNkM19jbWQgeworCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CiB9OwogCiAmc3BpXzEgewpAQCAtNjI4LDQgKzYyOCw4IEBACiAJZHJfbW9kZSA9ICJob3N0IjsKIH07CiAKKyZ1c2JkcmRfcGh5IHsKKwl2YnVzLXN1cHBseSA9IDwmdXNiM192YnVzX3JlZz47Cit9OworCiAjaW5jbHVkZSAiY3Jvcy1lYy1rZXlib2FyZC5kdHNpIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zcHJpbmcuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC1zcHJpbmcuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjc3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLXNwcmluZy5kdHMKQEAgLTAsMCArMSw1NjYgQEAKKy8qCisgKiBHb29nbGUgU3ByaW5nIGJvYXJkIGRldmljZSB0cmVlIHNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBHb29nbGUsIEluYworICogQ29weXJpZ2h0IChjKSAyMDE0IFNVU0UgTElOVVggUHJvZHVjdHMgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKyNpbmNsdWRlICJleHlub3M1MjUwLmR0c2kiCisKKy8geworCW1vZGVsID0gIkdvb2dsZSBTcHJpbmciOworCWNvbXBhdGlibGUgPSAiZ29vZ2xlLHNwcmluZyIsICJzYW1zdW5nLGV4eW5vczUyNTAiLCAic2Ftc3VuZyxleHlub3M1IjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDQwMDAwMDAwIDB4ODAwMDAwMDA+OworCX07CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eTEiOworCX07CisKKwlncGlvLWtleXMgeworCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcG93ZXJfa2V5X2lycT4sIDwmbGlkX2lycT47CisKKwkJcG93ZXIgeworCQkJbGFiZWwgPSAiUG93ZXIiOworCQkJZ3Bpb3MgPSA8JmdweDEgMyBHUElPX0FDVElWRV9MT1c+OworCQkJbGludXgsY29kZSA9IDxLRVlfUE9XRVI+OworCQkJZ3Bpby1rZXksd2FrZXVwOworCQl9OworCisJCWxpZC1zd2l0Y2ggeworCQkJbGFiZWwgPSAiTGlkIjsKKwkJCWdwaW9zID0gPCZncHgzIDUgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGlucHV0LXR5cGUgPSA8NT47IC8qIEVWX1NXICovCisJCQlsaW51eCxjb2RlID0gPDA+OyAvKiBTV19MSUQgKi8KKwkJCWRlYm91bmNlLWludGVydmFsID0gPDE+OworCQkJZ3Bpby1rZXksd2FrZXVwOworCQl9OworCX07CisKKwl1c2ItaHViIHsKKwkJY29tcGF0aWJsZSA9ICJzbXNjLHVzYjM1MDNhIjsKKwkJcmVzZXQtZ3Bpb3MgPSA8JmdwZTEgMCBHUElPX0FDVElWRV9MT1c+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmhzaWNfcmVzZXQ+OworCX07CisKKwlmaXhlZC1yYXRlLWNsb2NrcyB7CisJCXh4dGkgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGNsb2NrLXh4dGkiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKKwkJfTsKKwl9OworfTsKKworJmRwIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmRwX2hwZF9ncGlvPjsKKwlzYW1zdW5nLGNvbG9yLXNwYWNlID0gPDA+OworCXNhbXN1bmcsZHluYW1pYy1yYW5nZSA9IDwwPjsKKwlzYW1zdW5nLHljYmNyLWNvZWZmID0gPDA+OworCXNhbXN1bmcsY29sb3ItZGVwdGggPSA8MT47CisJc2Ftc3VuZyxsaW5rLXJhdGUgPSA8MHgwYT47CisJc2Ftc3VuZyxsYW5lLWNvdW50ID0gPDE+OworCXNhbXN1bmcsaHBkLWdwaW8gPSA8JmdwYzMgMCBHUElPX0FDVElWRV9ISUdIPjsKK307CisKKyZlaGNpIHsKKwlzYW1zdW5nLHZidXMtZ3BpbyA9IDwmZ3B4MSAxIEdQSU9fQUNUSVZFX0hJR0g+OworfTsKKworJmZpbWQgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGludmVydC12Y2xrOworfTsKKworJmhkbWkgeworCWhwZC1ncGlvID0gPCZncHgzIDcgR1BJT19BQ1RJVkVfSElHSD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmhkbWlfaHBkX2lycT47CisJcGh5ID0gPCZoZG1pcGh5PjsKKwlkZGMgPSA8JmkyY18yPjsKKwloZG1pLWVuLXN1cHBseSA9IDwmbGRvOF9yZWc+OworCXZkZC1zdXBwbHkgPSA8JmxkbzhfcmVnPjsKKwl2ZGRfb3NjLXN1cHBseSA9IDwmbGRvMTBfcmVnPjsKKwl2ZGRfcGxsLXN1cHBseSA9IDwmbGRvOF9yZWc+OworfTsKKworJmkyY18wIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDM3ODAwMD47CisKKwlzNW04NzY3LXBtaWNANjYgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVtODc2Ny1wbWljIjsKKwkJcmVnID0gPDB4NjY+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgzPjsKKwkJaW50ZXJydXB0cyA9IDwyIElSUV9UWVBFX05PTkU+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnM1bTg3NjdfaXJxICZzNW04NzY3X2R2cyAmczVtODc2N19kcz47CisJCXdha2V1cC1zb3VyY2U7CisKKwkJczVtODc2NyxwbWljLWJ1Y2stZHZzLWdwaW9zID0gPCZncGQxIDAgR1BJT19BQ1RJVkVfTE9XPiwgLyogRFZTMSAqLworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdwZDEgMSBHUElPX0FDVElWRV9MT1c+LCAvKiBEVlMyICovCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwmZ3BkMSAyIEdQSU9fQUNUSVZFX0xPVz47IC8qIERWUzMgKi8KKworCQlzNW04NzY3LHBtaWMtYnVjay1kcy1ncGlvcyA9IDwmZ3B4MiAzIEdQSU9fQUNUSVZFX0xPVz4sIC8qIFNFVDEgKi8KKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JmdweDIgNCBHUElPX0FDVElWRV9MT1c+LCAvKiBTRVQyICovCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZncHgyIDUgR1BJT19BQ1RJVkVfTE9XPjsgLyogU0VUMyAqLworCisJCS8qCisJCSAqIFRoZSBmb2xsb3dpbmcgYXJyYXlzIG9mIERWUyB2b2x0YWdlcyBhcmUgbm90IHVzZWQsIHNpbmNlIHdlIGFyZQorCQkgKiBub3QgdXNpbmcgR1BJT3MgdG8gY29udHJvbCBQTUlDIGJ1Y2tzLCBidXQgdGhleSBtdXN0IGJlIGRlZmluZWQKKwkJICogdG8gcGxlYXNlIHRoZSBkcml2ZXIuCisJCSAqLworCQlzNW04NzY3LHBtaWMtYnVjazItZHZzLXZvbHRhZ2UgPSA8MTM1MDAwMD4sIDwxMzAwMDAwPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDEyNTAwMDA+LCA8MTIwMDAwMD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxMTUwMDAwPiwgPDExMDAwMDA+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MTAwMDAwMD4sIDw5NTAwMDA+OworCisJCXM1bTg3NjcscG1pYy1idWNrMy1kdnMtdm9sdGFnZSA9IDwxMTAwMDAwPiwgPDExMDAwMDA+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MTEwMDAwMD4sIDwxMTAwMDAwPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDEwMDAwMDA+LCA8MTAwMDAwMD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxMDAwMDAwPiwgPDEwMDAwMDA+OworCisJCXM1bTg3NjcscG1pYy1idWNrNC1kdnMtdm9sdGFnZSA9IDwxMjAwMDAwPiwgPDEyMDAwMDA+LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MTIwMDAwMD4sIDwxMjAwMDAwPiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDEyMDAwMDA+LCA8MTIwMDAwMD4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxMjAwMDAwPiwgPDEyMDAwMDA+OworCisJCWNsb2NrcyB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsczVtODc2Ny1jbGsiOworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImVuMzJraHpfYXAiLAorCQkJICAgICAgICAgICAgICAgICAgICAgImVuMzJraHpfY3AiLAorCQkJICAgICAgICAgICAgICAgICAgICAgImVuMzJraHpfYnQiOworCQl9OworCisJCXJlZ3VsYXRvcnMgeworCQkJbGRvNF9yZWc6IExETzQgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjBWX0xET19PVVQ0IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8MD47CisJCQl9OworCisJCQlsZG81X3JlZzogTERPNSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwwPjsKKwkJCX07CisKKwkJCWxkbzZfcmVnOiBMRE82IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbXlkcCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJbGRvN19yZWc6IExETzcgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjFWX0xET19PVVQ3IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlsZG84X3JlZzogTERPOCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuMFZfTERPX09VVDgiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWxkbzEwX3JlZzogTERPMTAgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxMCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJbGRvMTFfcmVnOiBMRE8xMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDExIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8MD47CisJCQl9OworCisJCQlsZG8xMl9yZWc6IExETzEyIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMy4wVl9MRE9fT1VUMTIiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWxkbzEzX3JlZzogTERPMTMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxMyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDA+OworCQkJfTsKKworCQkJbGRvMTRfcmVnOiBMRE8xNCB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDEuOFZfTERPX09VVDE0IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlsZG8xNV9yZWc6IExETzE1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS4wVl9MRE9fT1VUMTUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWxkbzE2X3JlZzogTERPMTYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjhWX0xET19PVVQxNiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJbGRvMTdfcmVnOiBMRE8xNyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiUDIuOFZfTERPX09VVDE3IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8MD47CisJCQl9OworCisJCQlsZG8yNV9yZWc6IExETzI1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfYnJpZGdlIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCW9wX21vZGUgPSA8MT47CisJCQl9OworCisJCQlidWNrMV9yZWc6IEJVQ0sxIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfbWlmIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw5NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwzPjsKKwkJCX07CisKKwkJCWJ1Y2syX3JlZzogQlVDSzIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9hcm0iOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTM1MDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKworCQkJYnVjazNfcmVnOiBCVUNLMyB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2ludCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8OTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlidWNrNF9yZWc6IEJVQ0s0IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfZzNkIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCW9wX21vZGUgPSA8Mz47CisJCQl9OworCisJCQlidWNrNV9yZWc6IEJVQ0s1IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJQMS44Vl9CVUNLX09VVDUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJb3BfbW9kZSA9IDwxPjsKKwkJCX07CisKKwkJCWJ1Y2s2X3JlZzogQlVDSzYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gIlAxLjJWX0JVQ0tfT1VUNiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDA+OworCQkJfTsKKworCQkJYnVjazlfcmVnOiBCVUNLOSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX3VtbWMiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDk1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlvcF9tb2RlID0gPDM+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmkyY18xIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDM3ODAwMD47CisKKwl0cmFja3BhZEA0YiB7CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsbWF4dG91Y2giOworCQlyZWcgPSA8MHg0Yj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDE+OworCQlpbnRlcnJ1cHRzID0gPDIgSVJRX1RZUEVfRURHRV9GQUxMSU5HPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ0cmFja3BhZF9pcnE+OworCQlsaW51eCxncGlvLWtleW1hcCA9IDxLRVlfUkVTRVJWRUQKKwkJCQkgICAgIEtFWV9SRVNFUlZFRAorCQkJCSAgICAgS0VZX1JFU0VSVkVECisJCQkJICAgICBLRVlfUkVTRVJWRUQKKwkJCQkgICAgIEtFWV9SRVNFUlZFRAorCQkJCSAgICAgQlROX0xFRlQ+OworCQl3YWtldXAtc291cmNlOworCX07Cit9OworCisvKgorICogRGlzYWJsZWQgcHVsbHVwcyBzaW5jZSBleHRlcm5hbCBwYXJ0IGhhcyBpdHMgb3duIHB1bGx1cHMgYW5kCisgKiBkb3VibGUtcHVsbGluZyBnZXRzIHVzIG91dCBvZiBzcGVjIGluIHNvbWUgY2FzZXMuCisgKi8KKyZpMmMyX2J1cyB7CisJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworfTsKKworJmkyY18yIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKworCWhkbWlkZGNANTAgeworCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMC1oZG1pZGRjIjsKKwkJcmVnID0gPDB4NTA+OworCX07Cit9OworCismaTJjXzMgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NjYwMDA+OworfTsKKworJmkyY180IHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKworCWNyb3NfZWM6IGVtYmVkZGVkLWNvbnRyb2xsZXIgeworCQljb21wYXRpYmxlID0gImdvb2dsZSxjcm9zLWVjLWkyYyI7CisJCXJlZyA9IDwweDFlPjsKKwkJaW50ZXJydXB0cyA9IDw2IElSUV9UWVBFX05PTkU+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgxPjsKKwkJd2FrZXVwLXNvdXJjZTsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZlY19pcnE+OworCX07Cit9OworCismaTJjXzUgeworCXN0YXR1cyA9ICJva2F5IjsKKwlzYW1zdW5nLGkyYy1zZGEtZGVsYXkgPSA8MTAwPjsKKwlzYW1zdW5nLGkyYy1tYXgtYnVzLWZyZXEgPSA8NjYwMDA+OworfTsKKworJmkyY183IHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxpMmMtc2RhLWRlbGF5ID0gPDEwMD47CisJc2Ftc3VuZyxpMmMtbWF4LWJ1cy1mcmVxID0gPDY2MDAwPjsKKworCXRlbXBlcmF0dXJlLXNlbnNvckA0YyB7CisJCWNvbXBhdGlibGUgPSAiZ210LGc3ODEiOworCQlyZWcgPSA8MHg0Yz47CisJfTsKK307CisKKyZpMmNfOCB7CisJc3RhdHVzID0gIm9rYXkiOworCXNhbXN1bmcsaTJjLXNkYS1kZWxheSA9IDwxMDA+OworCXNhbXN1bmcsaTJjLW1heC1idXMtZnJlcSA9IDwzNzgwMDA+OworCisJaGRtaXBoeTogaGRtaXBoeUAzOCB7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEyLWhkbWlwaHkiOworCQlyZWcgPSA8MHgzOD47CisJfTsKK307CisKKyZpMnMwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbWZjIHsKKwlzYW1zdW5nLG1mYy1yID0gPDB4NDMwMDAwMDAgMHg4MDAwMDA+OworCXNhbXN1bmcsbWZjLWwgPSA8MHg1MTAwMDAwMCAweDgwMDAwMD47Cit9OworCismbW1jXzAgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJc3VwcG9ydHMtaGlnaHNwZWVkOworCWJyb2tlbi1jZDsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OworCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47CisJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2QwX2NsayAmc2QwX2NtZCAmc2QwX2NkICZzZDBfYnVzNCAmc2QwX2J1czg+OworCisJc2xvdEAwIHsKKwkJcmVnID0gPDA+OworCQlidXMtd2lkdGggPSA8OD47CisJfTsKK307CisKKy8qCisgKiBPbiBTcHJpbmcgd2UndmUgZ290IFNJUCBXaUZpIGFuZCBzbyBjYW4ga2VlcCBkcml2ZSBzdHJlbmd0aHMgbG93IHRvCisgKiByZWR1Y2UgRU1JLgorICovCismbW1jXzEgeworCXN0YXR1cyA9ICJva2F5IjsKKwludW0tc2xvdHMgPSA8MT47CisJc3VwcG9ydHMtaGlnaHNwZWVkOworCWJyb2tlbi1jZDsKKwljYXJkLWRldGVjdC1kZWxheSA9IDwyMDA+OworCXNhbXN1bmcsZHctbXNoYy1jaXUtZGl2ID0gPDM+OworCXNhbXN1bmcsZHctbXNoYy1zZHItdGltaW5nID0gPDIgMz47CisJc2Ftc3VuZyxkdy1tc2hjLWRkci10aW1pbmcgPSA8MSAyPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2QxX2NsayAmc2QxX2NtZCAmc2QxX2NkICZzZDFfYnVzND47CisKKwlzbG90QDAgeworCQlyZWcgPSA8MD47CisJCWJ1cy13aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnBpbmN0cmxfMCB7CisJczVtODc2N19kdnM6IHM1bTg3NjctZHZzIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdwZDEtMCIsICJncGQxLTEiLCAiZ3BkMS0yIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwxPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwlkcF9ocGRfZ3BpbzogZHAtaHBkLWdwaW8geworCQlzYW1zdW5nLHBpbnMgPSAiZ3BjMy0wIjsKKwkJc2Ftc3VuZyxwaW4tZnVuY3Rpb24gPSA8MD47CisJCXNhbXN1bmcscGluLXB1ZCA9IDwzPjsKKwkJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworCX07CisKKwl0cmFja3BhZF9pcnE6IHRyYWNrcGFkLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgxLTIiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwweGY+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJcG93ZXJfa2V5X2lycTogcG93ZXIta2V5LWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgxLTMiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWVjX2lycTogZWMtaXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDEtNiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJczVtODc2N19kczogczVtODc2Ny1kcyB7CisJCXNhbXN1bmcscGlucyA9ICJncHgyLTMiLCAiZ3B4Mi00IiwgImdweDItNSI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJczVtODc2N19pcnE6IHM1bTg3NjctaXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDMtMiI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MD47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworCisJbGlkX2lycTogbGlkLWlycSB7CisJCXNhbXN1bmcscGlucyA9ICJncHgzLTUiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwwPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKKworCWhkbWlfaHBkX2lycTogaGRtaS1ocGQtaXJxIHsKKwkJc2Ftc3VuZyxwaW5zID0gImdweDMtNyI7CisJCXNhbXN1bmcscGluLWZ1bmN0aW9uID0gPDA+OworCQlzYW1zdW5nLHBpbi1wdWQgPSA8MT47CisJCXNhbXN1bmcscGluLWRydiA9IDwwPjsKKwl9OworfTsKKworJnBpbmN0cmxfMSB7CisJaHNpY19yZXNldDogaHNpYy1yZXNldCB7CisJCXNhbXN1bmcscGlucyA9ICJncGUxLTAiOworCQlzYW1zdW5nLHBpbi1mdW5jdGlvbiA9IDwxPjsKKwkJc2Ftc3VuZyxwaW4tcHVkID0gPDA+OworCQlzYW1zdW5nLHBpbi1kcnYgPSA8MD47CisJfTsKK307CisKKyZzZDFfYnVzNCB7CisJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworfTsKKworJnNkMV9jZCB7CisJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworfTsKKworJnNkMV9jbGsgeworCXNhbXN1bmcscGluLWRydiA9IDwwPjsKK307CisKKyZzZDFfY21kIHsKKwlzYW1zdW5nLHBpbi1wdWQgPSA8Mz47CisJc2Ftc3VuZyxwaW4tZHJ2ID0gPDA+OworfTsKKworJnNwaV8xIHsKKwlzdGF0dXMgPSAib2theSI7CisJc2Ftc3VuZyxzcGktc3JjLWNsayA9IDwwPjsKKwludW0tY3MgPSA8MT47Cit9OworCisjaW5jbHVkZSAiY3Jvcy1lYy1rZXlib2FyZC5kdHNpIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTI1MC5kdHNpCmluZGV4IGQ1NWMxYTIuLmQ0NWEwN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczUyNTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1MjUwLmR0c2kKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQljbG9jay1uYW1lcyA9ICJmaW1nMmQiOwogCX07CiAKLQljb2RlY0AxMTAwMDAwMCB7CisJbWZjOiBjb2RlY0AxMTAwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxtZmMtdjYiOwogCQlyZWcgPSA8MHgxMTAwMDAwMCAweDEwMDAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDk2IDA+OwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCWNsb2NrLW5hbWVzID0gIm1mYyI7CiAJfTsKIAotCXJ0Y0AxMDFFMDAwMCB7CisJcnRjOiBydGNAMTAxRTAwMDAgewogCQljbG9ja3MgPSA8JmNsb2NrIENMS19SVEM+OwogCQljbG9jay1uYW1lcyA9ICJydGMiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJCWNsb2NrLW5hbWVzID0gInVhcnQiLCAiY2xrX3VhcnRfYmF1ZDAiOwogCX07CiAKLQlzYXRhQDEyMkYwMDAwIHsKKwlzYXRhOiBzYXRhQDEyMkYwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzbnBzLGR3Yy1haGNpIjsKIAkJc2Ftc3VuZyxzYXRhLWZyZXEgPSA8NjY+OwogCQlyZWcgPSA8MHgxMjJGMDAwMCAweDFmZj47CkBAIC0yOTMsNiArMjkzLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmMwX2J1cz47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzA2LDYgKzMwNyw3IEBACiAJCWNsb2NrLW5hbWVzID0gImkyYyI7CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmaTJjMV9idXM+OworCQlzYW1zdW5nLHN5c3JlZy1waGFuZGxlID0gPCZzeXNyZWdfc3lzdGVtX2NvbnRyb2xsZXI+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTMxOSw2ICszMjEsNyBAQAogCQljbG9jay1uYW1lcyA9ICJpMmMiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JmkyYzJfYnVzPjsKKwkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zMzIsNiArMzM1LDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmMzX2J1cz47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNTczLDcgKzU3Nyw3IEBACiAJCSNwaHktY2VsbHMgPSA8MT47CiAJfTsKIAotCXVzYkAxMjExMDAwMCB7CisJZWhjaTogdXNiQDEyMTEwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtZWhjaSI7CiAJCXJlZyA9IDwweDEyMTEwMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDcxIDA+OwpAQCAtNTg4LDcgKzU5Miw3IEBACiAJCX07CiAJfTsKIAotCXVzYkAxMjEyMDAwMCB7CisJb2hjaTogdXNiQDEyMTIwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtb2hjaSI7CiAJCXJlZyA9IDwweDEyMTIwMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDcxIDA+OwpAQCAtNzEwLDcgKzcxNCw3IEBACiAJCWNsb2NrLW5hbWVzID0gImdzY2wiOwogCX07CiAKLQloZG1pIHsKKwloZG1pOiBoZG1pIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTItaGRtaSI7CiAJCXJlZyA9IDwweDE0NTMwMDAwIDB4NzAwMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgOTUgMD47CkBAIC03MzYsMTQgKzc0MCwxNCBAQAogCQkjcGh5LWNlbGxzID0gPDA+OwogCX07CiAKLQlkcC1jb250cm9sbGVyQDE0NUIwMDAwIHsKKwlkcDogZHAtY29udHJvbGxlckAxNDVCMDAwMCB7CiAJCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX0RQPjsKIAkJY2xvY2stbmFtZXMgPSAiZHAiOwogCQlwaHlzID0gPCZkcF9waHk+OwogCQlwaHktbmFtZXMgPSAiZHAiOwogCX07CiAKLQlmaW1kQDE0NDAwMDAwIHsKKwlmaW1kOiBmaW1kQDE0NDAwMDAwIHsKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfU0NMS19GSU1EMT4sIDwmY2xvY2sgQ0xLX0ZJTUQxPjsKIAkJY2xvY2stbmFtZXMgPSAic2Nsa19maW1kIiwgImZpbWQiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLXBlYWNoLXBpdC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLXBlYWNoLXBpdC5kdHMKaW5kZXggODJjZGI3NC4uOWEwNTBlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC1wZWFjaC1waXQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAtcGVhY2gtcGl0LmR0cwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svbWF4aW0sbWF4Nzc4MDIuaD4KICNpbmNsdWRlICJleHlub3M1NDIwLmR0c2kiCiAKIC8gewpAQCAtMTUxLDcgKzE1Miw3IEBACiAJc3RhdHVzID0gIm9rYXkiOwogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCi0JbWF4Nzc4MDItcG1pY0A5IHsKKwltYXg3NzgwMjogbWF4Nzc4MDItcG1pY0A5IHsKIAkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgwMiI7CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDM+OwogCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfTk9ORT47CkBAIC01NjAsNyArNTYxLDcgQEAKIAlzdGF0dXMgPSAib2theSI7CiAJbnVtLXNsb3RzID0gPDE+OwogCWJyb2tlbi1jZDsKLQljYXBzMi1tbWMtaHMyMDAtMV84djsKKwltbWMtaHMyMDAtMV84djsKIAljYXAtbW1jLWhpZ2hzcGVlZDsKIAlub24tcmVtb3ZhYmxlOwogCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CkBAIC03MjcsNiArNzI4LDggQEAKIAogJnJ0YyB7CiAJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1JUQz4sIDwmbWF4Nzc4MDIgTUFYNzc4MDJfQ0xLXzMyS19BUD47CisJY2xvY2stbmFtZXMgPSAicnRjIiwgInJ0Y19zcmMiOwogfTsKIAogJnNwaV8yIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczU0MjAuZHRzaQppbmRleCA4NjE3YTAzLi45MGJmNDAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1NDIwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTQyMC5kdHNpCkBAIC01NjAsNiArNTYwLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmMwX2J1cz47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNTczLDYgKzU3NCw3IEBACiAJCWNsb2NrLW5hbWVzID0gImkyYyI7CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmaTJjMV9idXM+OworCQlzYW1zdW5nLHN5c3JlZy1waGFuZGxlID0gPCZzeXNyZWdfc3lzdGVtX2NvbnRyb2xsZXI+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTU4Niw2ICs1ODgsNyBAQAogCQljbG9jay1uYW1lcyA9ICJpMmMiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JmkyYzJfYnVzPjsKKwkJc2Ftc3VuZyxzeXNyZWctcGhhbmRsZSA9IDwmc3lzcmVnX3N5c3RlbV9jb250cm9sbGVyPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC01OTksNiArNjAyLDcgQEAKIAkJY2xvY2stbmFtZXMgPSAiaTJjIjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZpMmMzX2J1cz47CisJCXNhbXN1bmcsc3lzcmVnLXBoYW5kbGUgPSA8JnN5c3JlZ19zeXN0ZW1fY29udHJvbGxlcj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNTgwMC1wZWFjaC1waS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLXBlYWNoLXBpLmR0cwppbmRleCA3YmIxYzhkLi5lOGZkZGE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLXBlYWNoLXBpLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M1ODAwLXBlYWNoLXBpLmR0cwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svbWF4aW0sbWF4Nzc4MDIuaD4KICNpbmNsdWRlICJleHlub3M1ODAwLmR0c2kiCiAKIC8gewpAQCAtMTUwLDcgKzE1MSw3IEBACiAJc3RhdHVzID0gIm9rYXkiOwogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCi0JbWF4Nzc4MDItcG1pY0A5IHsKKwltYXg3NzgwMjogbWF4Nzc4MDItcG1pY0A5IHsKIAkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzgwMiI7CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdweDM+OwogCQlpbnRlcnJ1cHRzID0gPDEgSVJRX1RZUEVfTk9ORT47CkBAIC01NDgsNyArNTQ5LDcgQEAKIAlzdGF0dXMgPSAib2theSI7CiAJbnVtLXNsb3RzID0gPDE+OwogCWJyb2tlbi1jZDsKLQljYXBzMi1tbWMtaHMyMDAtMV84djsKKwltbWMtaHMyMDAtMV84djsKIAljYXAtbW1jLWhpZ2hzcGVlZDsKIAlub24tcmVtb3ZhYmxlOwogCWNhcmQtZGV0ZWN0LWRlbGF5ID0gPDIwMD47CkBAIC03MTUsNiArNzE2LDggQEAKIAogJnJ0YyB7CiAJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrcyA9IDwmY2xvY2sgQ0xLX1JUQz4sIDwmbWF4Nzc4MDIgTUFYNzc4MDJfQ0xLXzMyS19BUD47CisJY2xvY2stbmFtZXMgPSAicnRjIiwgInJ0Y19zcmMiOwogfTsKIAogJnNwaV8yIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2hpc2kteDVoZDItZGtiLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2hpc2kteDVoZDItZGtiLmR0cwppbmRleCAwNWI0NGMyLi43MjFiMDkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9oaXNpLXg1aGQyLWRrYi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaGlzaS14NWhkMi1ka2IuZHRzCkBAIC01MSwzICs1MSwzNiBAQAogJnVhcnQwIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OworCismZ21hYzAgeworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDA+OworCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCXBoeS1tb2RlID0gIm1paSI7CisJLyogUGxhY2Vob2xkZXIsIG92ZXJ3cml0dGVuIGJ5IGJvb3Rsb2FkZXIgKi8KKwltYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07CisJc3RhdHVzID0gIm9rYXkiOworCisJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQlyZWcgPSA8Mj47CisJfTsKK307CisKKyZnbWFjMSB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MD47CisJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCS8qIFBsYWNlaG9sZGVyLCBvdmVyd3JpdHRlbiBieSBib290bG9hZGVyICovCisJbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOworCXN0YXR1cyA9ICJva2F5IjsKKworCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJcmVnID0gPDE+OworCX07Cit9OworCismYWhjaSB7CisJcGh5cyA9IDwmc2F0YV9waHk+OworCXBoeS1uYW1lcyA9ICJzYXRhLXBoeSI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaGlzaS14NWhkMi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaGlzaS14NWhkMi5kdHNpCmluZGV4IGY4NWJhMjkuLmM1MjcyMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2hpc2kteDVoZDIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9oaXNpLXg1aGQyLmR0c2kKQEAgLTEzMSw2ICsxMzEsMjQ5IEBACiAJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OworCisJCQlncGlvMDogZ3Bpb0BiMjAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyMDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMDggMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTogZ3Bpb0BiMjEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyMTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMDkgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMjogZ3Bpb0BiMjIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyMjAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTAgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMzogZ3Bpb0BiMjMwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyMzAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTEgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvNDogZ3Bpb0BiMjQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyNDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTIgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvNTogZ3Bpb0AwMDQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweDAwNDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTMgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvNjogZ3Bpb0BiMjYwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyNjAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTQgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvNzogZ3Bpb0BiMjcwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyNzAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTUgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvODogZ3Bpb0BiMjgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyODAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTYgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvOTogZ3Bpb0BiMjkwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyOTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMTcgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTA6IGdwaW9AYjJhMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHhiMmEwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTE4IDB4ND47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9GSVhFRF8xMDBNPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZ3BpbzExOiBncGlvQGIyYjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjJiMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExOSAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW8xMjogZ3Bpb0BiMmMwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyYzAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMjAgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTM6IGdwaW9AYjJkMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHhiMmQwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTIxIDB4ND47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9GSVhFRF8xMDBNPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZ3BpbzE0OiBncGlvQGIyZTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjJlMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEyMiAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWdwaW8xNTogZ3Bpb0BiMmYwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGIyZjAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MCAxMjMgMHg0PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzEwME0+OworCQkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlncGlvMTY6IGdwaW9AYjMwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxwbDA2MSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQlyZWcgPSA8MHhiMzAwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMTI0IDB4ND47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9GSVhFRF8xMDBNPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZ3BpbzE3OiBncGlvQGIzMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJcmVnID0gPDB4YjMxMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDEyNSAweDQ+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfRklYRURfMTAwTT47CisJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXdkdDA6IHdhdGNoZG9nQGEyYzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0sc3A4MDUiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJYXJtLHByaW1lY2VsbC1wZXJpcGhpZCA9IDwweDAwMTQxODA1PjsKKwkJCQlyZWcgPSA8MHhhMmMwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMjkgND47CisJCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX1dERzBfUlNUPjsKKwkJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCQl9OwogCQl9OwogCiAJCWxvY2FsX3RpbWVyQDAwYTAwNjAwIHsKQEAgLTE0OCw5ICszOTEsMTUgQEAKIAkJfTsKIAogCQlzeXNjdHJsOiBzeXN0ZW0tY29udHJvbGxlckAwMDAwMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixzeXNjdHJsIjsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLHN5c2N0cmwiLCAic3lzY29uIjsKIAkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MTAwMD47Ci0JCQlyZWJvb3Qtb2Zmc2V0ID0gPDB4ND47CisJCX07CisKKwkJcmVib290IHsKKwkJCWNvbXBhdGlibGUgPSAic3lzY29uLXJlYm9vdCI7CisJCQlyZWdtYXAgPSA8JnN5c2N0cmw+OworCQkJb2Zmc2V0ID0gPDB4ND47CisJCQltYXNrID0gPDB4ZGVhZGJlZWY+OwogCQl9OwogCiAJCWNwdWN0cmxAMDBhMjIwMDAgewpAQCAtMTY2LDUgKzQxNSwxNDIgQEAKIAkJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQl9OwogCQl9OworCisJCS8qIHVucmVtb3ZhYmxlIGVtbWMgYXMgbW1jYmxrMCAqLworCQltbWM6IG1tY0AxODMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1tc2hjIjsKKwkJCXJlZyA9IDwweDE4MzAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAzNSA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9NTUNfQ0lVX1JTVD4sCisJCQkJIDwmY2xvY2sgSElYNUhEMl9NTUNfQklVX0NMSz47CisJCQljbG9jay1uYW1lcyA9ICJjaXUiLCAiYml1IjsKKwkJfTsKKworCQlzZDogbW1jQDE4MjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LW1zaGMiOworCQkJcmVnID0gPDB4MTgyMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDM0IDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX1NEX0NJVV9SU1Q+LAorCQkJCSA8JmNsb2NrIEhJWDVIRDJfU0RfQklVX0NMSz47CisJCQljbG9jay1uYW1lcyA9ICJjaXUiLCJiaXUiOworCQl9OworCisJCWdtYWMwOiBldGhlcm5ldEAxODQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpeDVoZDItZ21hYyI7CisJCQlyZWcgPSA8MHgxODQwMDAwIDB4MTAwMD4sPDB4MTg0MzAwYyAweDQ+OworCQkJaW50ZXJydXB0cyA9IDwwIDcxIDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX01BQzBfQ0xLPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZ21hYzE6IGV0aGVybmV0QDE4NDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGl4NWhkMi1nbWFjIjsKKwkJCXJlZyA9IDwweDE4NDEwMDAgMHgxMDAwPiw8MHgxODQzMDEwIDB4ND47CisJCQlpbnRlcnJ1cHRzID0gPDAgNzIgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfTUFDMV9DTEs+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2IwOiBlaGNpQDE4OTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJnZW5lcmljLWVoY2kiOworCQkJcmVnID0gPDB4MTg5MDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDY2IDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX1VTQl9DTEs+OworCQl9OworCisJCXVzYjE6IG9oY2lAMTg4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImdlbmVyaWMtb2hjaSI7CisJCQlyZWcgPSA8MHgxODgwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNjcgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfVVNCX0NMSz47CisJCX07CisKKwkJcGVyaXBoZXJhbF9jdHJsOiBzeXNjb25AYTIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3lzY29uIjsKKwkJCXJlZyA9IDwweGEyMDAwMCAweDEwMDA+OworCQl9OworCisJCXNhdGFfcGh5OiBwaHlAMTkwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLXNhdGEtcGh5IjsKKwkJCXJlZyA9IDwweDE5MDAwMDAgMHgxMDAwMD47CisJCQkjcGh5LWNlbGxzID0gPDA+OworCQkJaGlzaWxpY29uLHBlcmlwaGVyYWwtc3lzY29uID0gPCZwZXJpcGhlcmFsX2N0cmw+OworCQkJaGlzaWxpY29uLHBvd2VyLXJlZyA9IDwweDggMTA+OworCQl9OworCisJCWFoY2k6IHNhdGFAMTkwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXNpLWFoY2kiOworCQkJcmVnID0gPDB4MTkwMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA3MCA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9TQVRBX0NMSz47CisJCX07CisKKwkJaXI6IGlyQDAwMTAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLWlyIjsKKwkJCXJlZyA9IDwweDAwMTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDQ3IDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0ZJWEVEXzI0TT47CisJCQloaXNpbGljb24scG93ZXItc3lzY29uID0gPCZzeXNjdHJsPjsKKwkJfTsKKworCQlpMmMwOiBpMmNAYjEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpeDVoZDItaTJjIjsKKwkJCXJlZyA9IDwweGIxMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDM4IDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0kyQzBfUlNUPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzE6IGkyY0BiMTEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGl4NWhkMi1pMmMiOworCQkJcmVnID0gPDB4YjExMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzkgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfSTJDMV9SU1Q+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjMjogaTJjQGIxMjAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLWkyYyI7CisJCQlyZWcgPSA8MHhiMTIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA0MCA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9JMkMyX1JTVD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMzOiBpMmNAYjEzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpeDVoZDItaTJjIjsKKwkJCXJlZyA9IDwweGIxMzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDQxIDQ+OworCQkJY2xvY2tzID0gPCZjbG9jayBISVg1SEQyX0kyQzNfUlNUPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzQ6IGkyY0BiMTYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGl4NWhkMi1pMmMiOworCQkJcmVnID0gPDB4YjE2MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNDMgND47CisJCQljbG9ja3MgPSA8JmNsb2NrIEhJWDVIRDJfSTJDNF9SU1Q+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjNTogaTJjQGIxNzAwMCB7CisJCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXg1aGQyLWkyYyI7CisJCQlyZWcgPSA8MHhiMTcwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA0NCA0PjsKKwkJCWNsb2NrcyA9IDwmY2xvY2sgSElYNUhEMl9JMkM1X1JTVD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1MS5kdHNpCmluZGV4IDkyNjYwZTEuLmMwMTE2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUxLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTEuZHRzaQpAQCAtMjE0LDcgKzIxNCw5IEBACiAJCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDUxLXNzaSIsICJmc2wsaW14MjEtc3NpIjsKIAkJCQkJcmVnID0gPDB4NzAwMTQwMDAgMHg0MDAwPjsKIAkJCQkJaW50ZXJydXB0cyA9IDwzMD47Ci0JCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19TU0kyX0lQR19HQVRFPjsKKwkJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTJfSVBHX0dBVEU+LAorCQkJCQkJIDwmY2xrcyBJTVg1X0NMS19TU0kyX1JPT1RfR0FURT47CisJCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJiYXVkIjsKIAkJCQkJZG1hcyA9IDwmc2RtYSAyNCAxIDA+LAogCQkJCQkgICAgICAgPCZzZG1hIDI1IDEgMD47CiAJCQkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CkBAIC01MDQsNyArNTA2LDkgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXg1MS1zc2kiLCAiZnNsLGlteDIxLXNzaSI7CiAJCQkJcmVnID0gPDB4ODNmY2MwMDAgMHg0MDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDI5PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfU1NJMV9JUEdfR0FURT47CisJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTFfSVBHX0dBVEU+LAorCQkJCQkgPCZjbGtzIElNWDVfQ0xLX1NTSTFfUk9PVF9HQVRFPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYmF1ZCI7CiAJCQkJZG1hcyA9IDwmc2RtYSAyOCAwIDA+LAogCQkJCSAgICAgICA8JnNkbWEgMjkgMCAwPjsKIAkJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOwpAQCAtNTYwLDcgKzU2NCw5IEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14NTEtc3NpIiwgImZzbCxpbXgyMS1zc2kiOwogCQkJCXJlZyA9IDwweDgzZmU4MDAwIDB4NDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw5Nj47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTNfSVBHX0dBVEU+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19TU0kzX0lQR19HQVRFPiwKKwkJCQkJIDwmY2xrcyBJTVg1X0NMS19TU0kzX1JPT1RfR0FURT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImJhdWQiOwogCQkJCWRtYXMgPSA8JnNkbWEgNDYgMCAwPiwKIAkJCQkgICAgICAgPCZzZG1hIDQ3IDAgMD47CiAJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg1My5kdHNpCmluZGV4IGY5MTcyNWIuLmEzMGJkZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDUzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NTMuZHRzaQpAQCAtNDYsMTAgKzQ2LDIxIEBACiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY3B1QDAgeworCQljcHUwOiBjcHVAMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE4IjsKIAkJCXJlZyA9IDwweDA+OworCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX0FSTT47CisJCQljbG9jay1sYXRlbmN5ID0gPDYxMDM2PjsKKwkJCXZvbHRhZ2UtdG9sZXJhbmNlID0gPDU+OworCQkJb3BlcmF0aW5nLXBvaW50cyA9IDwKKwkJCQkvKiBrSHogKi8KKwkJCQkgMTY2NjY2ICA4NTAwMDAKKwkJCQkgNDAwMDAwICA5MDAwMDAKKwkJCQkgODAwMDAwIDEwNTAwMDAKKwkJCQkxMDAwMDAwIDEyMDAwMDAKKwkJCQkxMjAwMDAwIDEzMDAwMDAKKwkJCT47CiAJCX07CiAJfTsKIApAQCAtMjI3LDcgKzIzOCw5IEBACiAJCQkJCQkJImZzbCxpbXgyMS1zc2kiOwogCQkJCQlyZWcgPSA8MHg1MDAxNDAwMCAweDQwMDA+OwogCQkJCQlpbnRlcnJ1cHRzID0gPDMwPjsKLQkJCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTJfSVBHX0dBVEU+OworCQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNV9DTEtfU1NJMl9JUEdfR0FURT4sCisJCQkJCQkgPCZjbGtzIElNWDVfQ0xLX1NTSTJfUk9PVF9HQVRFPjsKKwkJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImJhdWQiOwogCQkJCQlkbWFzID0gPCZzZG1hIDI0IDEgMD4sCiAJCQkJCSAgICAgICA8JnNkbWEgMjUgMSAwPjsKIAkJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKQEAgLTY3NSw3ICs2ODgsOSBAQAogCQkJCQkJImZzbCxpbXgyMS1zc2kiOwogCQkJCXJlZyA9IDwweDYzZmNjMDAwIDB4NDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwyOT47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTFfSVBHX0dBVEU+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19TU0kxX0lQR19HQVRFPiwKKwkJCQkJIDwmY2xrcyBJTVg1X0NMS19TU0kxX1JPT1RfR0FURT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImJhdWQiOwogCQkJCWRtYXMgPSA8JnNkbWEgMjggMCAwPiwKIAkJCQkgICAgICAgPCZzZG1hIDI5IDAgMD47CiAJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKQEAgLTcwMyw3ICs3MTgsOSBAQAogCQkJCQkJImZzbCxpbXgyMS1zc2kiOwogCQkJCXJlZyA9IDwweDYzZmU4MDAwIDB4NDAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw5Nj47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIElNWDVfQ0xLX1NTSTNfSVBHX0dBVEU+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg1X0NMS19TU0kzX0lQR19HQVRFPiwKKwkJCQkJIDwmY2xrcyBJTVg1X0NMS19TU0kzX1JPT1RfR0FURT47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImJhdWQiOwogCQkJCWRtYXMgPSA8JnNkbWEgNDYgMCAwPiwKIAkJCQkgICAgICAgPCZzZG1hIDQ3IDAgMD47CiAJCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZkbC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLmR0c2kKaW5kZXggYjQ1M2UwZS4uMWFjMmZlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NmRsLmR0c2kKQEAgLTEzLDYgKzEzLDEwIEBACiAjaW5jbHVkZSAiaW14NnFkbC5kdHNpIgogCiAvIHsKKwlhbGlhc2VzIHsKKwkJaTJjMyA9ICZpMmM0OworCX07CisKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwpAQCAtMTE0LDMgKzExOCw3IEBACiAJCSAgICAgICJkaTBfc2VsIiwgImRpMV9zZWwiLAogCQkgICAgICAiZGkwIiwgImRpMSI7CiB9OworCismdnB1IHsKKwljb21wYXRpYmxlID0gImZzbCxpbXg2ZGwtdnB1IiwgImNubSxjb2RhOTYwIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cS10YnMyOTEwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLXRiczI5MTAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0M2FiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cS10YnMyOTEwLmR0cwpAQCAtMCwwICsxLDQzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFNvZXJlbiBNb2NoIDxzbW9jaEB3ZWIuZGU+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2R0cy12MS87CisKKyNpbmNsdWRlICJpbXg2cS5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisKKy8geworCW1vZGVsID0gIlRCUzI5MTAgTWF0cml4IEFSTSBtaW5pIFBDIjsKKwljb21wYXRpYmxlID0gInRicyxpbXg2cS10YnMyOTEwIiwgImZzbCxpbXg2cSI7CisKKwljaG9zZW4geworCQlzdGRvdXQtcGF0aCA9ICZ1YXJ0MTsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4MTAwMDAwMDAgMHg4MDAwMDAwMD47CisJfTsKKworCWZhbiB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1mYW4iOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZ3Bpb19mYW4+OworCQlncGlvcyA9IDwmZ3BpbzMgMjggR1BJT19BQ1RJVkVfSElHSD47CisJCWdwaW8tZmFuLHNwZWVkLW1hcCA9IDwwICAgIDAKKwkJCQkgICAgICAzMDAwIDE+OworCX07CisKKwlpcl9yZWN2IHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWlyLXJlY2VpdmVyIjsKKwkJZ3Bpb3MgPSA8JmdwaW8zIDE4IEdQSU9fQUNUSVZFX0xPVz47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pcj47CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9ncGlvX2xlZHM+OworCisJCWJsdWUgeworCQkJbGFiZWwgPSAiYmx1ZV9zdGF0dXNfbGVkIjsKKwkJCWdwaW9zID0gPCZncGlvMSAyIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJrZWVwIjsKKwkJfTsKKwl9OworCisJcmVndWxhdG9ycyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlyZWdfMnA1djogcmVndWxhdG9yQDAgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDA+OworCQkJcmVndWxhdG9yLW5hbWUgPSAiMlA1ViI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwyNTAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI1MDAwMDA+OworCQl9OworCisJCXJlZ18zcDN2OiByZWd1bGF0b3JAMSB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8MT47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICIzUDNWIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCX07CisKKwkJcmVnXzVwMHY6IHJlZ3VsYXRvckAyIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwyPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIjVQMFYiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJfTsKKwl9OworCisJc291bmQtc2d0bDUwMDAgeworCQlhdWRpby1jb2RlYyA9IDwmc2d0bDUwMDA+OworCQlhdWRpby1yb3V0aW5nID0KKwkJCSJNSUNfSU4iLCAiTWljIEphY2siLAorCQkJIk1pYyBKYWNrIiwgIk1pYyBCaWFzIiwKKwkJCSJIZWFkcGhvbmUgSmFjayIsICJIUF9PVVQiOworCQljb21wYXRpYmxlID0gImZzbCxpbXgtYXVkaW8tc2d0bDUwMDAiOworCQltb2RlbCA9ICJPbi1ib2FyZCBDb2RlYyI7CisJCW11eC1leHQtcG9ydCA9IDwzPjsKKwkJbXV4LWludC1wb3J0ID0gPDE+OworCQlzc2ktY29udHJvbGxlciA9IDwmc3NpMT47CisJfTsKKworCXNvdW5kLXNwZGlmIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsaW14LWF1ZGlvLXNwZGlmIjsKKwkJbW9kZWwgPSAiT24tYm9hcmQgU1BESUYiOworCQlzcGRpZi1jb250cm9sbGVyID0gPCZzcGRpZj47CisJCXNwZGlmLW91dDsKKwl9OworfTsKKworJmF1ZG11eCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmZlYyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldD47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCXBoeS1yZXNldC1ncGlvcyA9IDwmZ3BpbzEgMjUgR1BJT19BQ1RJVkVfSElHSD47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmhkbWkgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2hkbWk+OworCWRkYy1pMmMtYnVzID0gPCZpMmMyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMSB7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMT47CisJc3RhdHVzID0gIm9rYXkiOworCisJc2d0bDUwMDA6IHNndGw1MDAwQDBhIHsKKwkJY2xvY2tzID0gPCZjbGtzIDIwMT47CisJCWNvbXBhdGlibGUgPSAiZnNsLHNndGw1MDAwIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZwaW5jdHJsX3NndGw1MDAwPjsKKwkJcmVnID0gPDB4MGE+OworCQlWRERBLXN1cHBseSA9IDwmcmVnXzJwNXY+OworCQlWRERJTy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwl9OworfTsKKworJmkyYzIgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMzIHsKKwljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMzPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlydGM6IGRzMTMwN0A2OCB7CisJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMwNyI7CisJCXJlZyA9IDwweDY4PjsKKwl9OworfTsKKworJnBjaWUgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3BjaWU+OworCXJlc2V0LWdwaW8gPSA8JmdwaW83IDEyIEdQSU9fQUNUSVZFX0hJR0g+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzYXRhIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc252c19wb3dlcm9mZiB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwZGlmIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zcGRpZj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNzaTEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDE+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JoMSB7CisJdmJ1cy1zdXBwbHkgPSA8JnJlZ181cDB2PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNib3RnIHsKKwl2YnVzLXN1cHBseSA9IDwmcmVnXzVwMHY+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYm90Zz47CisJZGlzYWJsZS1vdmVyLWN1cnJlbnQ7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzZGhjMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNkaGMyPjsKKwlidXMtd2lkdGggPSA8ND47CisJY2QtZ3Bpb3MgPSA8JmdwaW8yIDIgR1BJT19BQ1RJVkVfSElHSD47CisJdm1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNkaGMzIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2RoYzM+OworCWJ1cy13aWR0aCA9IDw0PjsKKwljZC1ncGlvcyA9IDwmZ3BpbzIgMCBHUElPX0FDVElWRV9ISUdIPjsKKwl3cC1ncGlvcyA9IDwmZ3BpbzIgMSBHUElPX0FDVElWRV9ISUdIPjsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2RoYzQgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzZGhjND47CisJYnVzLXdpZHRoID0gPDg+OworCW5vbi1yZW1vdmFibGU7CisJbm8tMS04LXY7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmlvbXV4YyB7CisJaW14NnEtdGJzMjkxMCB7CisJCXBpbmN0cmxfZW5ldDogZW5ldGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VORVRfTURJT19fRU5FVF9NRElPICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX0VORVRfTURDX19FTkVUX01EQyAgICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1RYQ19fUkdNSUlfVFhDICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1REMF9fUkdNSUlfVEQwICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1REMV9fUkdNSUlfVEQxICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1REMl9fUkdNSUlfVEQyICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1REM19fUkdNSUlfVEQzICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1RYX0NUTF9fUkdNSUlfVFhfQ1RMIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX0VORVRfUkVGX0NMS19fRU5FVF9UWF9DTEsgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JYQ19fUkdNSUlfUlhDICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JEMF9fUkdNSUlfUkQwICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JEMV9fUkdNSUlfUkQxICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JEMl9fUkdNSUlfUkQyICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JEM19fUkdNSUlfUkQzICAgICAgIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX1JHTUlJX1JYX0NUTF9fUkdNSUlfUlhfQ1RMIDB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX0dQSU9fMTZfX0VORVRfUkVGX0NMSyAgICAgIDB4NDAwMWIwYTgKKwkJCQlNWDZRRExfUEFEX0VORVRfQ1JTX0RWX19HUElPMV9JTzI1ICAgIDB4MWIwNTkKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9oZG1pOiBoZG1pZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfS0VZX1JPVzJfX0hETUlfVFhfQ0VDX0xJTkUgMHgxZjhiMAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2kyYzE6IGkyYzFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9DU0kwX0RBVDlfX0kyQzFfU0NMICAgICAgICAweDQwMDFiOGIxCisJCQkJTVg2UURMX1BBRF9DU0kwX0RBVDhfX0kyQzFfU0RBICAgICAgICAweDQwMDFiOGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfaTJjMjogaTJjMmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0tFWV9DT0wzX19JMkMyX1NDTCAgICAgICAgIDB4NDAwMWI4YjEKKwkJCQlNWDZRRExfUEFEX0tFWV9ST1czX19JMkMyX1NEQSAgICAgICAgIDB4NDAwMWI4YjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9pMmMzOiBpMmMzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfR1BJT18zX19JMkMzX1NDTCAgICAgICAgICAgMHg0MDAxYjhiMQorCQkJCU1YNlFETF9QQURfR1BJT182X19JMkMzX1NEQSAgICAgICAgICAgMHg0MDAxYjhiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2lyOiBpcmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0VJTV9EMThfX0dQSU8zX0lPMTggICAgICAgIDB4MTcwNTkKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9wY2llOiBwY2llZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfR1BJT18xN19fR1BJTzdfSU8xMiAgICAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3NndGw1MDAwOiBzZ3RsNTAwMGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUN19fQVVEM19SWEQgICAgICAgIDB4MTMwYjAKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUNF9fQVVEM19UWEMgICAgICAgIDB4MTMwYjAKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUNV9fQVVEM19UWEQgICAgICAgIDB4MTEwYjAKKwkJCQlNWDZRRExfUEFEX0NTSTBfREFUNl9fQVVEM19UWEZTICAgICAgIDB4MTMwYjAKKwkJCQlNWDZRRExfUEFEX0dQSU9fMF9fQ0NNX0NMS08xICAgICAgICAgIDB4MTMwYjAKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9zcGRpZjogc3BkaWZncnAgeworCQkJZnNsLHBpbnMgPSA8TVg2UURMX1BBRF9HUElPXzE5X19TUERJRl9PVVQgICAgIDB4MTMwOTEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MTogdWFydDFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9DU0kwX0RBVDEwX19VQVJUMV9UWF9EQVRBICAweDFiMGIxCisJCQkJTVg2UURMX1BBRF9DU0kwX0RBVDExX19VQVJUMV9SWF9EQVRBICAweDFiMGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdWFydDI6IHVhcnQyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRUlNX0QyNl9fVUFSVDJfVFhfREFUQSAgICAgMHgxYjBiMQorCQkJCU1YNlFETF9QQURfRUlNX0QyN19fVUFSVDJfUlhfREFUQSAgICAgMHgxYjBiMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzYm90ZzogdXNib3RnZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRU5FVF9SWF9FUl9fVVNCX09UR19JRCAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjMjogdXNkaGMyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0QyX0NNRF9fU0QyX0NNRCAgICAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0NMS19fU0QyX0NMSyAgICAgICAgICAgMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDBfX1NEMl9EQVRBMCAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDFfX1NEMl9EQVRBMSAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDJfX1NEMl9EQVRBMiAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QyX0RBVDNfX1NEMl9EQVRBMyAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfTkFOREZfRDJfX0dQSU8yX0lPMDIgICAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjMzogdXNkaGMzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0QzX0NNRF9fU0QzX0NNRCAgICAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0NMS19fU0QzX0NMSyAgICAgICAgICAgMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDBfX1NEM19EQVRBMCAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDFfX1NEM19EQVRBMSAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDJfX1NEM19EQVRBMiAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0QzX0RBVDNfX1NEM19EQVRBMyAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfTkFOREZfRDBfX0dQSU8yX0lPMDAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfTkFOREZfRDFfX0dQSU8yX0lPMDEgICAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VzZGhjNDogdXNkaGM0Z3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfU0Q0X0NNRF9fU0Q0X0NNRCAgICAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0NMS19fU0Q0X0NMSyAgICAgICAgICAgMHgxMDA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDBfX1NENF9EQVRBMCAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDFfX1NENF9EQVRBMSAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDJfX1NENF9EQVRBMiAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDNfX1NENF9EQVRBMyAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDRfX1NENF9EQVRBNCAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDVfX1NENF9EQVRBNSAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDZfX1NENF9EQVRBNiAgICAgICAgMHgxNzA1OQorCQkJCU1YNlFETF9QQURfU0Q0X0RBVDdfX1NENF9EQVRBNyAgICAgICAgMHgxNzA1OQorCQkJPjsKKwkJfTsKKwl9OworCisJZ3Bpb19mYW4geworCQlwaW5jdHJsX2dwaW9fZmFuOiBncGlvZmFuZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRUlNX0QyOF9fR1BJTzNfSU8yOCAgICAgICAgMHgxMzBiMQorCQkJPjsKKwkJfTsKKwl9OworCisJZ3Bpb19sZWRzIHsKKwkJcGluY3RybF9ncGlvX2xlZHM6IGdwaW9sZWRzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfR1BJT18yX19HUElPMV9JTzAyICAgICAgICAgMHgxMzBiMQorCQkJPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cS5kdHNpCmluZGV4IGU5ZjM2NDYuLjg1ZjcyZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEuZHRzaQpAQCAtMzA4LDMgKzMwOCw3IEBACiAJCX07CiAJfTsKIH07CisKKyZ2cHUgeworCWNvbXBhdGlibGUgPSAiZnNsLGlteDZxLXZwdSIsICJjbm0sY29kYTk2MCI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUyeHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1Mnh4LmR0c2kKaW5kZXggZDNjMGJmNS4uYjU3NTZjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUyeHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTJ4eC5kdHNpCkBAIC0yODIsNyArMjgyLDYgQEAKIH07CiAKICZzc2kxIHsKLQlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1M3h4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTN4eC5kdHNpCmluZGV4IGNhZGUxYmQuLjg2ZjAzYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1M3h4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUzeHguZHRzaQpAQCAtMjg3LDcgKzI4Nyw2IEBACiB9OwogCiAmc3NpMSB7Ci0JZnNsLG1vZGUgPSAiaTJzLXNsYXZlIjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTR4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzU0eHguZHRzaQppbmRleCBjZjEzMjM5Li40YThkOTdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTR4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1NHh4LmR0c2kKQEAgLTM3NiwxMiArMzc2LDEwIEBACiB9OwogCiAmc3NpMSB7Ci0JZnNsLG1vZGUgPSAiaTJzLXNsYXZlIjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCiAmc3NpMiB7Ci0JZnNsLG1vZGUgPSAiaTJzLXNsYXZlIjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXBoeXRlYy1wYmFiMDEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBiYWIwMS5kdHNpCmluZGV4IDU4NDcyMTIuLjU4NWI0ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBiYWIwMS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBiYWIwMS5kdHNpCkBAIC05LDE3ICs5LDEwMyBAQAogICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCiAgKi8KIAorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3NvdW5kL2ZzbC1pbXgtYXVkbXV4Lmg+CisKIC8gewogCWNob3NlbiB7CiAJCWxpbnV4LHN0ZG91dC1wYXRoID0gJnVhcnQ0OwogCX07CisKKwlyZWd1bGF0b3JzIHsKKwkJc291bmRfMXY4OiByZWd1bGF0b3JAMiB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Mj47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJpMnMtYXVkaW8tMXY4IjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCX07CisKKwkJc291bmRfM3YzOiByZWd1bGF0b3JAMyB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8Mz47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJpMnMtYXVkaW8tM3YzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCX07CisJfTsKKworCXRsdjMyMF9tY2xrOiBvc2NpbGxhdG9yIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDE5MjAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gInRsdjMyMC1tY2xrIjsKKwl9OworCisJc291bmQgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1hdWRpby1jYXJkIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsbmFtZSA9ICJPbmJvYXJkVExWMzIwQUlDMzAwNyI7CisJCXNpbXBsZS1hdWRpby1jYXJkLGZvcm1hdCA9ICJpMnMiOworCQlzaW1wbGUtYXVkaW8tY2FyZCxiaXRjbG9jay1tYXN0ZXIgPSA8JmRhaWxpbmtfbWFzdGVyPjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZnJhbWUtbWFzdGVyID0gPCZkYWlsaW5rX21hc3Rlcj47CisJCXNpbXBsZS1hdWRpby1jYXJkLHdpZGdldHMgPQorCQkJIk1pY3JvcGhvbmUiLCAiTWljIEphY2siLAorCQkJIkxpbmUiLCAiTGluZSBJbiIsCisJCQkiTGluZSIsICJMaW5lIE91dCIsCisJCQkiU3BlYWtlciIsICJTcGVha2VyIiwKKwkJCSJIZWFkcGhvbmUiLCAiSGVhZHBob25lIEphY2siOworCQlzaW1wbGUtYXVkaW8tY2FyZCxyb3V0aW5nID0KKwkJCSJMaW5lIE91dCIsICJMTE9VVCIsCisJCQkiTGluZSBPdXQiLCAiUkxPVVQiLAorCQkJIlNwZWFrZXIiLCAiU1BPUCIsCisJCQkiU3BlYWtlciIsICJTUE9NIiwKKwkJCSJIZWFkcGhvbmUgSmFjayIsICJIUExPVVQiLAorCQkJIkhlYWRwaG9uZSBKYWNrIiwgIkhQUk9VVCIsCisJCQkiTUlDM0wiLCAiTWljIEphY2siLAorCQkJIk1JQzNSIiwgIk1pYyBKYWNrIiwKKwkJCSJNaWMgSmFjayIsICJNaWMgQmlhcyIsCisJCQkiTElORTFMIiwgIkxpbmUgSW4iLAorCQkJIkxJTkUxUiIsICJMaW5lIEluIjsKKworCQlzaW1wbGUtYXVkaW8tY2FyZCxjcHUgeworCQkJc291bmQtZGFpID0gPCZzc2kyPjsKKwkJfTsKKworCQlkYWlsaW5rX21hc3Rlcjogc2ltcGxlLWF1ZGlvLWNhcmQsY29kZWMgeworCQkJc291bmQtZGFpID0gPCZjb2RlYz47CisJCQljbG9ja3MgPSA8JnRsdjMyMF9tY2xrPjsKKwkJfTsKKwl9OworCiB9OwogCi0mZmVjIHsKKyZhdWRtdXggeworCXN0YXR1cyA9ICJva2F5IjsKKworCXNzaTIgeworCQlmc2wsYXVkbXV4LXBvcnQgPSA8MT47CisJCWZzbCxwb3J0LWNvbmZpZyA9IDwKKwkJCShJTVhfQVVETVVYX1YyX1BUQ1JfVEZTRElSIHwKKwkJCUlNWF9BVURNVVhfVjJfUFRDUl9URlNFTCg0KSB8CisJCQlJTVhfQVVETVVYX1YyX1BUQ1JfVENMS0RJUiB8CisJCQlJTVhfQVVETVVYX1YyX1BUQ1JfVENTRUwoNCkpCisJCQlJTVhfQVVETVVYX1YyX1BEQ1JfUlhEU0VMKDQpCisJCT47CisJfTsKKworCXBpbnM1IHsKKwkJZnNsLGF1ZG11eC1wb3J0ID0gPDQ+OworCQlmc2wscG9ydC1jb25maWcgPSA8CisJCQkweDAwMDAwMDAwCisJCQlJTVhfQVVETVVYX1YyX1BEQ1JfUlhEU0VMKDEpCisJCT47CisJfTsKK307CisKKyZjYW4xIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCi0mZ3BtaSB7CismZmVjIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCkBAIC0yOCwxNCArMTE0LDE4IEBACiB9OwogCiAmaTJjMiB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaTJjMj47Ci0JY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CiAJc3RhdHVzID0gIm9rYXkiOwogCi0JdGx2MzIwQDE4IHsKLQkJY29tcGF0aWJsZSA9ICJ0aSx0bHYzMjBhaWMzeCI7CisJY29kZWM6IHRsdjMyMEAxOCB7CisJCWNvbXBhdGlibGUgPSAidGksdGx2MzIwYWljMzAwNyI7CisJCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CiAJCXJlZyA9IDwweDE4PjsKKwkJYWkzeC1taWNiaWFzLXZnID0gPDI+OworCisJCUFWREQtc3VwcGx5ID0gPCZzb3VuZF8zdjM+OworCQlJT1ZERC1zdXBwbHkgPSA8JnNvdW5kXzN2Mz47CisJCURSVkRELXN1cHBseSA9IDwmc291bmRfM3YzPjsKKwkJRFZERC1zdXBwbHkgPSA8JnNvdW5kXzF2OD47CiAJfTsKIAogCXN0bXBlQDQxIHsKQEAgLTU1LDkgKzE0NSwxNCBAQAogfTsKIAogJmkyYzMgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzM+OwotCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3NpMiB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIApAQCAtODQsMTkgKzE3OSwzIEBACiAmdXNkaGMzIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwotCi0maW9tdXhjIHsKLQlwaW5jdHJsX2kyYzI6IGkyYzJncnAgewotCQlmc2wscGlucyA9IDwKLQkJCU1YNlFETF9QQURfRUlNX0VCMl9fSTJDMl9TQ0wJCTB4NDAwMWI4YjEKLQkJCU1YNlFETF9QQURfRUlNX0QxNl9fSTJDMl9TREEJCTB4NDAwMWI4YjEKLQkJPjsKLQl9OwotCi0JcGluY3RybF9pMmMzOiBpMmMzZ3JwIHsKLQkJZnNsLHBpbnMgPSA8Ci0JCQlNWDZRRExfUEFEX0VJTV9EMTdfX0kyQzNfU0NMCQkweDQwMDFiOGIxCi0JCQlNWDZRRExfUEFEX0VJTV9EMThfX0kyQzNfU0RBCQkweDQwMDFiOGIxCi0JCT47Ci0JfTsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXBoeXRlYy1wZmxhMDIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBmbGEwMi5kdHNpCmluZGV4IDBlNTBiYjAuLjE5Y2MyNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBmbGEwMi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcGh5dGVjLXBmbGEwMi5kdHNpCkBAIC01OCw2ICs1OCwxOCBAQAogCX07CiB9OwogCismYXVkbXV4IHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9hdWRtdXg+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismY2FuMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZmxleGNhbjE+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCiAmZWNzcGkzIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lY3NwaTM+OwpAQCAtNzIsNiArODQsMjIgQEAKIAl9OwogfTsKIAorJmZlYyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldD47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCXBoeS1yZXNldC1ncGlvcyA9IDwmZ3BpbzMgMjMgR1BJT19BQ1RJVkVfTE9XPjsKKwlwaHktc3VwcGx5ID0gPCZ2ZGRfZXRoX2lvX3JlZz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZncG1pIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9ncG1pX25hbmQ+OworCW5hbmQtb24tZmxhc2gtYmJ0OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZpMmMxIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9pMmMxPjsKQEAgLTg1LDggKzExMyw4IEBACiAJcG1pY0A1OCB7CiAJCWNvbXBhdGlibGUgPSAiZGxnLGRhOTA2MyI7CiAJCXJlZyA9IDwweDU4PjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzQ+OwotCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47IC8qIGFjdGl2ZS1sb3cgR1BJTzRfMTcgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzI+OworCQlpbnRlcnJ1cHRzID0gPDkgMHg4PjsgLyogYWN0aXZlLWxvdyBHUElPMl85ICovCiAKIAkJcmVndWxhdG9ycyB7CiAJCQl2ZGRjb3JlX3JlZzogYmNvcmUxIHsKQEAgLTE2Miw2ICsxOTAsMTggQEAKIAl9OwogfTsKIAorJmkyYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzI+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworfTsKKworJmkyYzMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzM+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworfTsKKwogJmlvbXV4YyB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfaG9nPjsKQEAgLTE3MSw3ICsyMTEsNyBAQAogCQkJZnNsLHBpbnMgPSA8CiAJCQkJTVg2UURMX1BBRF9FSU1fRDIzX19HUElPM19JTzIzIDB4ODAwMDAwMDAKIAkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDNfX0dQSU80X0lPMjQgMHg4MDAwMDAwMCAvKiBTUEkgTk9SIGNoaXBzZWxlY3QgKi8KLQkJCQlNWDZRRExfUEFEX0RJMF9QSU4xNV9fR1BJTzRfSU8xNyAgMHg4MDAwMDAwMCAvKiBQTUlDIGludGVycnVwdCAqLworCQkJCU1YNlFETF9QQURfU0Q0X0RBVDFfX0dQSU8yX0lPMDkgIDB4ODAwMDAwMDAgLyogUE1JQyBpbnRlcnJ1cHQgKi8KIAkJCQlNWDZRRExfUEFEX0VORVRfVFhEMF9fR1BJTzFfSU8zMCAweDgwMDAwMDAwIC8qIEdyZWVuIExFRCAqLwogCQkJCU1YNlFETF9QQURfRUlNX0VCM19fR1BJTzJfSU8zMSAweDgwMDAwMDAwIC8qIFJlZCBMRUQgKi8KIAkJCT47CkBAIC0yMDYsNiArMjQ2LDEzIEBACiAJCQk+OwogCQl9OwogCisJCXBpbmN0cmxfZmxleGNhbjE6IGZsZXhjYW4xZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfS0VZX1JPVzJfX0ZMRVhDQU4xX1JYCTB4MWIwYjAKKwkJCQlNWDZRRExfUEFEX0tFWV9DT0wyX19GTEVYQ0FOMV9UWAkweDFiMGIwCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfZ3BtaV9uYW5kOiBncG1pbmFuZGdycCB7CiAJCQlmc2wscGlucyA9IDwKIAkJCQlNWDZRRExfUEFEX05BTkRGX0NMRV9fTkFORF9DTEUJCTB4YjBiMQpAQCAtMjM1LDYgKzI4MiwyNCBAQAogCQkJPjsKIAkJfTsKIAorCQlwaW5jdHJsX2kyYzI6IGkyYzJncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJTVg2UURMX1BBRF9FSU1fRUIyX19JMkMyX1NDTAkJMHg0MDAxYjhiMQorCQkJCU1YNlFETF9QQURfRUlNX0QxNl9fSTJDMl9TREEJCTB4NDAwMWI4YjEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9pMmMzOiBpMmMzZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRUlNX0QxN19fSTJDM19TQ0wJCTB4NDAwMWI4YjEKKwkJCQlNWDZRRExfUEFEX0VJTV9EMThfX0kyQzNfU0RBCQkweDQwMDFiOGIxCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfcGNpZTogcGNpZWdycCB7CisJCQlmc2wscGlucyA9IDxNWDZRRExfUEFEX0RJMF9QSU4xNV9fR1BJTzRfSU8xNyAgMHg4MDAwMDAwMD47CisJCX07CisKIAkJcGluY3RybF91YXJ0MzogdWFydDNncnAgewogCQkJZnNsLHBpbnMgPSA8CiAJCQkJTVg2UURMX1BBRF9FSU1fRDI0X19VQVJUM19UWF9EQVRBCTB4MWIwYjEKQEAgLTI5MywyMiArMzU4LDIyIEBACiAJCQkJTVg2UURMX1BBRF9FTkVUX1RYRDFfX0dQSU8xX0lPMjkgMHg4MDAwMDAwMAogCQkJPjsKIAkJfTsKKworCQlwaW5jdHJsX2F1ZG11eDogYXVkbXV4Z3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlFETF9QQURfRElTUDBfREFUMTZfX0FVRDVfVFhDCTB4MTMwYjAKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDE3X19BVUQ1X1RYRAkweDExMGIwCisJCQkJTVg2UURMX1BBRF9ESVNQMF9EQVQxOF9fQVVENV9UWEZTCTB4MTMwYjAKKwkJCQlNWDZRRExfUEFEX0RJU1AwX0RBVDE5X19BVUQ1X1JYRAkweDEzMGIwCisJCQk+OworCQl9OwogCX07CiB9OwogCi0mZmVjIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0PjsKLQlwaHktbW9kZSA9ICJyZ21paSI7Ci0JcGh5LXJlc2V0LWdwaW9zID0gPCZncGlvMyAyMyBHUElPX0FDVElWRV9MT1c+OwotCXBoeS1zdXBwbHkgPSA8JnZkZF9ldGhfaW9fcmVnPjsKLQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotfTsKLQotJmdwbWkgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX2dwbWlfbmFuZD47Ci0JbmFuZC1vbi1mbGFzaC1iYnQ7CismcGNpZSB7CisJcGluY3RybC1uYW1lID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9wY2llPjsKKwlyZXNldC1ncGlvID0gPCZncGlvNCAxNyAwPjsKIAlzdGF0dXMgPSAiZGlzYWJsZWQiOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1yZXguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtcmV4LmR0c2kKaW5kZXggZGY3YmNmOC4uNDg4YTY0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1yZXguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXJleC5kdHNpCkBAIC0zMDgsNyArMzA4LDYgQEAKIH07CiAKICZzc2kxIHsKLQlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVzZC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZXNkLmR0c2kKaW5kZXggYmFmMmYwMC4uZjFjZDIxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZXNkLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZXNkLmR0c2kKQEAgLTEwNywxMCArMTA3LDggQEAKIAkJCSJIZWFkcGhvbmUgSmFjayIsICJIUE9VVFIiLAogCQkJIkV4dCBTcGsiLCAiU1BLT1VUTCIsCiAJCQkiRXh0IFNwayIsICJTUEtPVVRSIiwKLQkJCSJNSUNCSUFTIiwgIkFNSUMiLAotCQkJIklOM1IiLCAiTUlDQklBUyIsCi0JCQkiRE1JQyIsICJNSUNCSUFTIiwKLQkJCSJETUlDREFUIiwgIkRNSUMiOworCQkJIkFNSUMiLCAiTUlDQklBUyIsCisJCQkiSU4zUiIsICJBTUlDIjsKIAkJbXV4LWludC1wb3J0ID0gPDI+OwogCQltdXgtZXh0LXBvcnQgPSA8Mz47CiAJfTsKQEAgLTE3OSw3ICsxNzcsNyBAQAogCWNvZGVjOiB3bTg5NjJAMWEgewogCQljb21wYXRpYmxlID0gIndsZix3bTg5NjIiOwogCQlyZWcgPSA8MHgxYT47Ci0JCWNsb2NrcyA9IDwmY2xrcyAyMDE+OworCQljbG9ja3MgPSA8JmNsa3MgSU1YNlFETF9DTEtfQ0tPPjsKIAkJRENWREQtc3VwcGx5ID0gPCZyZWdfYXVkaW8+OwogCQlEQlZERC1zdXBwbHkgPSA8JnJlZ19hdWRpbz47CiAJCUFWREQtc3VwcGx5ID0gPCZyZWdfYXVkaW8+OwpAQCAtNTMxLDYgKzUyOSwxMCBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZzbnZzX3Bvd2Vyb2ZmIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmc3NpMiB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwuZHRzaQppbmRleCA5NTk2ZWQ1Li40ZmMwM2I3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC5kdHNpCkBAIC0zMzMsOSArMzMzLDE3IEBACiAJCQl9OwogCiAJCQl2cHU6IHZwdUAwMjA0MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJjbm0sY29kYTk2MCI7CiAJCQkJcmVnID0gPDB4MDIwNDAwMDAgMHgzYzAwMD47CiAJCQkJaW50ZXJydXB0cyA9IDwwIDMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCiAJCQkJICAgICAgICAgICAgIDwwIDEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCWludGVycnVwdC1uYW1lcyA9ICJiaXQiLCAianBlZyI7CisJCQkJY2xvY2tzID0gPCZjbGtzIElNWDZRRExfQ0xLX1ZQVV9BWEk+LAorCQkJCQkgPCZjbGtzIElNWDZRRExfQ0xLX01NRENfQ0gwX0FYST4sCisJCQkJCSA8JmNsa3MgSU1YNlFETF9DTEtfT0NSQU0+OworCQkJCWNsb2NrLW5hbWVzID0gInBlciIsICJhaGIiLCAib2NyYW0iOworCQkJCXJlc2V0cyA9IDwmc3JjIDE+OworCQkJCWlyYW0gPSA8Jm9jcmFtPjsKIAkJCX07CiAKIAkJCWFpcHN0ekAwMjA3YzAwMCB7IC8qIEFJUFNUWjEgKi8KQEAgLTY1Nyw2ICs2NjUsMTIgQEAKIAkJCQkJaW50ZXJydXB0cyA9IDwwIDE5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJCQkJICAgICA8MCAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCQl9OworCisJCQkJc252c19wb3dlcm9mZjogc252cy1wb3dlcm9mZkAzOCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXBvd2Vyb2ZmIjsKKwkJCQkJcmVnID0gPDB4MzggMHg0PjsKKwkJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCQl9OwogCQkJfTsKIAogCQkJZXBpdDE6IGVwaXRAMDIwZDAwMDAgeyAvKiBFUElUMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLWV2ay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wtZXZrLmR0cwppbmRleCA4OThkMTRmLi5mZGE0OTMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wtZXZrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c2wtZXZrLmR0cwpAQCAtNTgwLDYgKzU4MCwxMCBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZzbnZzX3Bvd2Vyb2ZmIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmc3NpMiB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzbC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLmR0c2kKaW5kZXggZGZkODNlNi4uMzZhYjhlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnNsLmR0c2kKQEAgLTU3NCw2ICs1NzQsMTIgQEAKIAkJCQkJaW50ZXJydXB0cyA9IDwwIDE5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJCQkJICAgICA8MCAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCQl9OworCisJCQkJc252c19wb3dlcm9mZjogc252cy1wb3dlcm9mZkAzOCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXBvd2Vyb2ZmIjsKKwkJCQkJcmVnID0gPDB4MzggMHg0PjsKKwkJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCQl9OwogCQkJfTsKIAogCQkJZXBpdDE6IGVwaXRAMDIwZDAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LXNkYi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cwppbmRleCA4MmQ2YjM0Li4xZTZlNWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cwpAQCAtMTA1LDYgKzEwNSwzMCBAQAogCQkJZ3BpbyA9IDwmZ3BpbzMgMjcgMD47CiAJCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJCX07CisKKwkJcmVnX3BlcmlfM3YzOiByZWd1bGF0b3JANSB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlyZWcgPSA8NT47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3BlcmlfM3YzPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gInBlcmlfM3YzIjsKKwkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQlncGlvcyA9IDwmZ3BpbzQgMTYgR1BJT19BQ1RJVkVfSElHSD47CisJCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQl9OworCisJCXJlZ19lbmV0XzN2MzogcmVndWxhdG9yQDYgeworCQkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQkJcmVnID0gPDY+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0XzN2Mz47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJlbmV0XzN2MyI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJZ3Bpb3MgPSA8JmdwaW8yIDYgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKIAl9OwogCiAJc291bmQgewpAQCAtMTMzLDYgKzE1NywxNCBAQAogJmZlYzEgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2VuZXQxPjsKKwlwaHktc3VwcGx5ID0gPCZyZWdfZW5ldF8zdjM+OworCXBoeS1tb2RlID0gInJnbWlpIjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZmVjMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldDI+OwogCXBoeS1tb2RlID0gInJnbWlpIjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwpAQCAtMzA0LDYgKzMzNiwxMCBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZzbnZzX3Bvd2Vyb2ZmIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmc3NpMiB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKQEAgLTM5NCw2ICs0MzAsMzAgQEAKIAkJCQlNWDZTWF9QQURfUkdNSUkxX1JEMl9fRU5FVDFfUlhfREFUQV8yCTB4MzA4MQogCQkJCU1YNlNYX1BBRF9SR01JSTFfUkQzX19FTkVUMV9SWF9EQVRBXzMJMHgzMDgxCiAJCQkJTVg2U1hfUEFEX1JHTUlJMV9SWF9DVExfX0VORVQxX1JYX0VOCTB4MzA4MQorCQkJCU1YNlNYX1BBRF9FTkVUMl9SWF9DTEtfX0VORVQyX1JFRl9DTEtfMjVNCTB4OTEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9lbmV0XzN2MzogZW5ldDN2M2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZTWF9QQURfRU5FVDJfQ09MX19HUElPMl9JT182CQkweDgwMDAwMDAwCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfZW5ldDI6IGVuZXQyZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCU1YNlNYX1BBRF9SR01JSTJfVFhDX19FTkVUMl9SR01JSV9UWEMJMHhhMGI5CisJCQkJTVg2U1hfUEFEX1JHTUlJMl9URDBfX0VORVQyX1RYX0RBVEFfMAkweGEwYjEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1REMV9fRU5FVDJfVFhfREFUQV8xCTB4YTBiMQorCQkJCU1YNlNYX1BBRF9SR01JSTJfVEQyX19FTkVUMl9UWF9EQVRBXzIJMHhhMGIxCisJCQkJTVg2U1hfUEFEX1JHTUlJMl9URDNfX0VORVQyX1RYX0RBVEFfMwkweGEwYjEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1RYX0NUTF9fRU5FVDJfVFhfRU4JMHhhMGIxCisJCQkJTVg2U1hfUEFEX1JHTUlJMl9SWENfX0VORVQyX1JYX0NMSwkweDMwODEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1JEMF9fRU5FVDJfUlhfREFUQV8wCTB4MzA4MQorCQkJCU1YNlNYX1BBRF9SR01JSTJfUkQxX19FTkVUMl9SWF9EQVRBXzEJMHgzMDgxCisJCQkJTVg2U1hfUEFEX1JHTUlJMl9SRDJfX0VORVQyX1JYX0RBVEFfMgkweDMwODEKKwkJCQlNWDZTWF9QQURfUkdNSUkyX1JEM19fRU5FVDJfUlhfREFUQV8zCTB4MzA4MQorCQkJCU1YNlNYX1BBRF9SR01JSTJfUlhfQ1RMX19FTkVUMl9SWF9FTgkweDMwODEKIAkJCT47CiAJCX07CiAKQEAgLTQ1Miw2ICs1MTIsMTIgQEAKIAkJCT47CiAJCX07CiAKKwkJcGluY3RybF9wZXJpXzN2MzogcGVyaTN2M2dycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlNWDZTWF9QQURfUVNQSTFBX0RBVEEwX19HUElPNF9JT18xNgkweDgwMDAwMDAwCisJCQk+OworCQl9OworCiAJCXBpbmN0cmxfcHdtMzogcHdtM2dycC0xIHsKIAkJCWZzbCxwaW5zID0gPAogCQkJCU1YNlNYX1BBRF9TRDFfREFUQTJfX1BXTTNfT1VUIDB4MTEwYjAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LmR0c2kKaW5kZXggZjNlODhjMC4uN2EyNGZlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LmR0c2kKQEAgLTY3MSw2ICs2NzEsMTIgQEAKIAkJCQkJcmVnID0gPDB4MzQgMHg1OD47CiAJCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxOSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwgPEdJQ19TUEkgMjAgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQkJfTsKKworCQkJCXNudnNfcG93ZXJvZmY6IHNudnMtcG93ZXJvZmZAMzggeworCQkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1wb3dlcm9mZiI7CisJCQkJCXJlZyA9IDwweDM4IDB4ND47CisJCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQkJfTsKIAkJCX07CiAKIAkJCWVwaXQxOiBlcGl0QDAyMGQwMDAwIHsKQEAgLTg3Nyw3ICs4ODMsNyBAQAogCQkJfTsKIAogCQkJZmVjMjogZXRoZXJuZXRAMDIxYjQwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZzeC1mZWMiOworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZzeC1mZWMiLCAiZnNsLGlteDZxLWZlYyI7CiAJCQkJcmVnID0gPDB4MDIxYjQwMDAgMHg0MDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTAyIElSUV9UWVBFX0xFVkVMX0hJR0g+LAogCQkJCQkgICAgIDxHSUNfU1BJIDEwMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2ludGVncmF0b3IuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2ludGVncmF0b3IuZHRzaQppbmRleCA4OGUzZDQ3Ny4uMjhlMzhmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW50ZWdyYXRvci5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2ludGVncmF0b3IuZHRzaQpAQCAtNiw4ICs2LDE4IEBACiAKIC8gewogCWNvcmUtbW9kdWxlQDEwMDAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJhcm0sY29yZS1tb2R1bGUtaW50ZWdyYXRvciI7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcmUtbW9kdWxlLWludGVncmF0b3IiLCAic3lzY29uIjsKIAkJcmVnID0gPDB4MTAwMDAwMDAgMHgyMDA+OworCisJCS8qIFVzZSBjb3JlIG1vZHVsZSBMRUQgdG8gaW5kaWNhdGUgQ1BVIGxvYWQgKi8KKwkJbGVkQDBjLjAgeworCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCW9mZnNldCA9IDwweDBjPjsKKwkJCW1hc2sgPSA8MHgwMT47CisJCQlsYWJlbCA9ICJpbnRlZ3JhdG9yOmNvcmVfbW9kdWxlIjsKKwkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJjcHUwIjsKKwkJCWRlZmF1bHQtc3RhdGUgPSAib24iOworCQl9OwogCX07CiAKIAllYmlAMTIwMDAwMDAgewpAQCAtODIsNSArOTIsNDEgQEAKIAkJCXJlZyA9IDwweDE5MDAwMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ+OwogCQl9OworCisJCXN5c2NvbiB7CisJCQkvKiBEZWJ1ZyByZWdpc3RlcnMgbWFwcGVkIGFzIHN5c2NvbiAqLworCQkJY29tcGF0aWJsZSA9ICJzeXNjb24iOworCQkJcmVnID0gPDB4MWEwMDAwMDAgMHgxMD47CisKKwkJCWxlZEAwNC4wIHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA0PjsKKwkJCQltYXNrID0gPDB4MDE+OworCQkJCWxhYmVsID0gImludGVncmF0b3I6Z3JlZW4wIjsKKwkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKKwkJCX07CisJCQlsZWRAMDQuMSB7CisJCQkJY29tcGF0aWJsZSA9ICJyZWdpc3Rlci1iaXQtbGVkIjsKKwkJCQlvZmZzZXQgPSA8MHgwND47CisJCQkJbWFzayA9IDwweDAyPjsKKwkJCQlsYWJlbCA9ICJpbnRlZ3JhdG9yOnllbGxvdyI7CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJCWxlZEAwNC4yIHsKKwkJCQljb21wYXRpYmxlID0gInJlZ2lzdGVyLWJpdC1sZWQiOworCQkJCW9mZnNldCA9IDwweDA0PjsKKwkJCQltYXNrID0gPDB4MDQ+OworCQkJCWxhYmVsID0gImludGVncmF0b3I6cmVkIjsKKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCQl9OworCQkJbGVkQDA0LjMgeworCQkJCWNvbXBhdGlibGUgPSAicmVnaXN0ZXItYml0LWxlZCI7CisJCQkJb2Zmc2V0ID0gPDB4MDQ+OworCQkJCW1hc2sgPSA8MHgwOD47CisJCQkJbGFiZWwgPSAiaW50ZWdyYXRvcjpncmVlbjEiOworCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJCX07CisJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9rMmUtZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS1ldm0uZHRzCmluZGV4IGM1NjhmMDYuLjU2MGQ2MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS1ldm0uZHRzCkBAIC0xMzksMyArMTM5LDE1IEBACiAJCX07CiAJfTsKIH07CisKKyZtZGlvIHsKKwlldGhwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCWNvbXBhdGlibGUgPSAibWFydmVsbCw4OEUxNTE0IiwgIm1hcnZlbGwsODhFMTUxMCIsICJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMiI7CisJCXJlZyA9IDwwPjsKKwl9OworCisJZXRocGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQljb21wYXRpYmxlID0gIm1hcnZlbGwsODhFMTUxNCIsICJtYXJ2ZWxsLDg4RTE1MTAiLCAiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjIiOworCQlyZWcgPSA8MT47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9rMmUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2syZS5kdHNpCmluZGV4IGMzNThiNGIuLjVmYzE0NjgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9rMmUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9rMmUuZHRzaQpAQCAtODUsNiArODUsNTEgQEAKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQkJZ3BpbyxzeXNjb24tZGV2ID0gPCZkZXZjdHJsIDB4MjQwPjsKIAkJfTsKKworCQlwY2llQDIxMDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksa2V5c3RvbmUtcGNpZSIsInNucHMsZHctcGNpZSI7CisJCQljbG9ja3MgPSA8JmNsa3BjaWUxPjsKKwkJCWNsb2NrLW5hbWVzID0gInBjaWUiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCXJlZyA9ICA8MHgyMTAyMTAwMCAweDIwMDA+LCA8MHgyMTAyMDAwMCAweDEwMDA+LCA8MHgwMjYyMDEyOCA0PjsKKwkJCXJhbmdlcyA9IDwweDgxMDAwMDAwIDAgMCAweDIzMjYwMDAwIDB4NDAwMCAweDQwMDAKKwkJCQkweDgyMDAwMDAwIDAgMHg2MDAwMDAwMCAweDYwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQludW0tbGFuZXMgPSA8Mj47CisKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJnBjaWVfaW50YzEgMD4sIC8qIElOVCBBICovCisJCQkJCTwwIDAgMCAyICZwY2llX2ludGMxIDE+LCAvKiBJTlQgQiAqLworCQkJCQk8MCAwIDAgMyAmcGNpZV9pbnRjMSAyPiwgLyogSU5UIEMgKi8KKwkJCQkJPDAgMCAwIDQgJnBjaWVfaW50YzEgMz47IC8qIElOVCBEICovCisKKwkJCXBjaWVfbXNpX2ludGMxOiBtc2ktaW50ZXJydXB0LWNvbnRyb2xsZXIgeworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzc3IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzc4IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzc5IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzgwIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzgxIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzgyIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzgzIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzg0IElSUV9UWVBFX0VER0VfUklTSU5HPjsKKwkJCX07CisKKwkJCXBjaWVfaW50YzE6IGxlZ2FjeS1pbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzNzMgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNzQgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNzUgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNzYgSVJRX1RZUEVfRURHRV9SSVNJTkc+OworCQkJfTsKKwkJfTsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvazJsLWV2bS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9rMmwtZXZtLmR0cwppbmRleCBmZWM0MzEyLi44NWNjN2YyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9rMmwtZXZtLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9rMmwtZXZtLmR0cwpAQCAtMTE2LDMgKzExNiwxNSBAQAogCQl9OwogCX07CiB9OworCismbWRpbyB7CisJZXRocGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQljb21wYXRpYmxlID0gIm1hcnZlbGwsODhFMTUxNCIsICJtYXJ2ZWxsLDg4RTE1MTAiLCAiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjIiOworCQlyZWcgPSA8MD47CisJfTsKKworCWV0aHBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLDg4RTE1MTQiLCAibWFydmVsbCw4OEUxNTEwIiwgImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyIjsKKwkJcmVnID0gPDE+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2V5c3RvbmUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tleXN0b25lLmR0c2kKaW5kZXggNWQzZTgzZi4uYzA2NTQyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2V5c3RvbmUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9rZXlzdG9uZS5kdHNpCkBAIC0yODUsNSArMjg1LDUwIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkJdGksc3lzY29uLWRldiA9IDwmZGV2Y3RybCAweDJhMD47CiAJCX07CisKKwkJcGNpZUAyMTgwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInRpLGtleXN0b25lLXBjaWUiLCAic25wcyxkdy1wY2llIjsKKwkJCWNsb2NrcyA9IDwmY2xrcGNpZT47CisJCQljbG9jay1uYW1lcyA9ICJwY2llIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSAgPDB4MjE4MDEwMDAgMHgyMDAwPiwgPDB4MjE4MDAwMDAgMHgxMDAwPiwgPDB4MDI2MjAxMjggND47CisJCQlyYW5nZXMgPSA8MHg4MTAwMDAwMCAwIDAgMHgyMzI1MDAwMCAwIDB4NDAwMAorCQkJCTB4ODIwMDAwMDAgMCAweDUwMDAwMDAwIDB4NTAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCW51bS1sYW5lcyA9IDwyPjsKKworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDwwIDAgMCA3PjsKKwkJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmcGNpZV9pbnRjMCAwPiwgLyogSU5UIEEgKi8KKwkJCQkJPDAgMCAwIDIgJnBjaWVfaW50YzAgMT4sIC8qIElOVCBCICovCisJCQkJCTwwIDAgMCAzICZwY2llX2ludGMwIDI+LCAvKiBJTlQgQyAqLworCQkJCQk8MCAwIDAgNCAmcGNpZV9pbnRjMCAzPjsgLyogSU5UIEQgKi8KKworCQkJcGNpZV9tc2lfaW50YzA6IG1zaS1pbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzMCBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDMxIElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzIgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzMyBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDM0IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMzUgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAzNiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDM3IElSUV9UWVBFX0VER0VfUklTSU5HPjsKKwkJCX07CisKKwkJCXBjaWVfaW50YzA6IGxlZ2FjeS1pbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkJCTxHSUNfU1BJIDI3IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCQkJPEdJQ19TUEkgMjggSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJCQk8R0lDX1NQSSAyOSBJUlFfVFlQRV9FREdFX1JJU0lORz47CisJCQl9OworCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtZGlyNjY1LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRpcjY2NS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2OTU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLWRpcjY2NS5kdHMKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQ2xhdWRpbyBMZWl0ZSA8bGVpdGVjQHN0YXRpY2t5LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvZHRzLXYxLzsKKworI2luY2x1ZGUgImtpcmt3b29kLmR0c2kiCisjaW5jbHVkZSAia2lya3dvb2QtNjI4MS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJELUxpbmsgRElSLTY2NSI7CisJY29tcGF0aWJsZSA9ICJkbGluayxkaXItNjY1IiwgIm1hcnZlbGwsa2lya3dvb2QtODhmNjI4MSIsICJtYXJ2ZWxsLGtpcmt3b29kIjsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4ODAwMDAwMD47IC8qIDEyOCBNQiAqLworCX07CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG44IGVhcmx5cHJpbnRrIjsKKwkJc3Rkb3V0LXBhdGggPSAmdWFydDA7CisJfTsKKworCW1idXMgeworCQlwY2llLWNvbnRyb2xsZXIgeworCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQlwY2llQDEsMCB7CisJCQkJc3RhdHVzID0gIm9rYXkiOworCQkJfTsKKwkJfTsKKwl9OworCisJb2NwQGYxMDAwMDAwIHsKKwkJcGluY3RybDogcGluLWNvbnRyb2xsZXJAMTAwMDAgeworCQkJcGluY3RybC0wID08ICZwbXhfbGVkX3VzYgorCQkJCSAgICAgJnBteF9sZWRfaW50ZXJuZXRfYmx1ZQorCQkJCSAgICAgJnBteF9sZWRfaW50ZXJuZXRfYW1iZXIKKwkJCQkgICAgICZwbXhfbGVkXzVnICZwbXhfbGVkX3N0YXR1c19ibHVlCisJCQkJICAgICAmcG14X2xlZF93cHMgJnBteF9sZWRfc3RhdHVzX2FtYmVyCisJCQkJICAgICAmcG14X2xlZF8yNGcKKwkJCQkgICAgICZwbXhfYnRuX3Jlc3RhcnQgJnBteF9idG5fd3BzPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkJCXBteF9sZWRfdXNiOiBwbXgtbGVkLXVzYiB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDEyIjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKwkJCXBteF9sZWRfaW50ZXJuZXRfYmx1ZTogcG14LWxlZC1pbnRlcm5ldC1ibHVlIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDIiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2xlZF9pbnRlcm5ldF9hbWJlcjogcG14LWxlZC1pbnRlcm5ldC1hbWJlciB7CisJCQkJbWFydmVsbCxwaW5zID0gIm1wcDQzIjsKKwkJCQltYXJ2ZWxsLGZ1bmN0aW9uID0gImdwaW8iOworCQkJfTsKKwkJCXBteF9sZWRfNWc6IHBteC1sZWQtNWcgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NCI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCQlwbXhfbGVkX3N0YXR1c19ibHVlOiBwbXgtbGVkLXN0YXR1cy1ibHVlIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDUiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2xlZF93cHM6IHBteC1sZWQtd3BzIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDciOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2xlZF9zdGF0dXNfYW1iZXI6IHBteC1sZWQtc3RhdHVzLWFtYmVyIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDgiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2xlZF8yNGc6IHBteC1sZWQtMjRnIHsKKwkJCQltYXJ2ZWxsLHBpbnMgPSAibXBwNDkiOworCQkJCW1hcnZlbGwsZnVuY3Rpb24gPSAiZ3BpbyI7CisJCQl9OworCQkJcG14X2J0bl9yZXN0YXJ0OiBwbXgtYnRuLXJlc3RhcnQgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHAyOCI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCQlwbXhfYnRuX3dwczogcG14LWJ0bi13cHMgeworCQkJCW1hcnZlbGwscGlucyA9ICJtcHA0NiI7CisJCQkJbWFydmVsbCxmdW5jdGlvbiA9ICJncGlvIjsKKwkJCX07CisJCX07CisKKwkJc3BpQDEwNjAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCW0yNXA4MEAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gIm14aWN5LG14MjVsMTI4MDVkIjsKKwkJCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47CisJCQkJcmVnID0gPDA+OworCisJCQkJcGFydGl0aW9uQDAgeworCQkJCQlsYWJlbCA9ICJ1Ym9vdCI7CisJCQkJCXJlZyA9IDwweDAgMHgzMDAwMD47CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDMwMDAwIHsKKwkJCQkJbGFiZWwgPSAibnZyYW0iOworCQkJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCQkJcmVhZC1vbmx5OworCQkJCX07CisKKwkJCQlwYXJ0aXRpb25ANDAwMDAgeworCQkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCQlyZWcgPSA8MHg0MDAwMCAweDE4MDAwMD47CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkAxYzAwMDAgeworCQkJCQlsYWJlbCA9ICJyb290ZnMiOworCQkJCQlyZWcgPSA8MHgxYzAwMDAgMHhlMDAwMDA+OworCQkJCX07CisKKwkJCQljYWxfZGF0YTogcGFydGl0aW9uQGZjMDAwMCB7CisJCQkJCWxhYmVsID0gImNhbF9kYXRhIjsKKwkJCQkJcmVnID0gPDB4ZmMwMDAwIDB4MTAwMDA+OworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkBmZDAwMDAgeworCQkJCQlsYWJlbCA9ICJsYW5nX3BhY2siOworCQkJCQlyZWcgPSA8MHhmZDAwMDAgMHgzMDAwMD47CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlzZXJpYWxAMTIwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyY0AxMTAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJZWhjaUA1MDAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKKworCWdwaW8tbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKworCQlibHVlLXVzYiB7CisJCQlsYWJlbCA9ICJkaXI2NjU6Ymx1ZTp1c2IiOworCQkJZ3Bpb3MgPSA8JmdwaW8wIDEyIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCQlibHVlLWludGVybmV0IHsKKwkJCS8qIENhbiBvbmx5IGJlIHR1cm5lZCBvbiBpZiB0aGUgSW50ZXJuZXQKKwkJCSAqIEV0aGVybmV0IHBvcnQgaGFzIExpbmsKKwkJCSAqLworCQkJbGFiZWwgPSAiZGlyNjY1OmJsdWU6aW50ZXJuZXQiOworCQkJZ3Bpb3MgPSA8JmdwaW8xIDEwIEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJCWFtYmVyLWludGVybmV0IHsKKwkJCWxhYmVsID0gImRpcjY2NTphbWJlcjppbnRlcm5ldCI7CisJCQlncGlvcyA9IDwmZ3BpbzEgMTEgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJCWJsdWUtd2lmaTVnIHsKKwkJCWxhYmVsID0gImRpcjY2NTpibHVlOjVnIjsKKwkJCWdwaW9zID0gPCZncGlvMSAxMiBHUElPX0FDVElWRV9MT1c+OworCQl9OworCQlibHVlLXN0YXR1cyB7CisJCQlsYWJlbCA9ICJkaXI2NjU6Ymx1ZTpzdGF0dXMiOworCQkJZ3Bpb3MgPSA8JmdwaW8xIDEzIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCQlibHVlLXdwcyB7CisJCQlsYWJlbCA9ICJkaXI2NjU6Ymx1ZTp3cHMiOworCQkJZ3Bpb3MgPSA8JmdwaW8xIDE1IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCQlhbWJlci1zdGF0dXMgeworCQkJbGFiZWwgPSAiZGlyNjY1OmFtYmVyOnN0YXR1cyI7CisJCQlncGlvcyA9IDwmZ3BpbzEgMTYgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJCWJsdWUtMjRnIHsKKwkJCWxhYmVsID0gImRpcjY2NTpibHVlOjI0ZyI7CisJCQlncGlvcyA9IDwmZ3BpbzEgMTcgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcmVzZXQgeworCQkJbGFiZWwgPSAicmVzZXQiOworCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisJCQlncGlvcyA9IDwmZ3BpbzAgMjggR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwkJd3BzIHsKKwkJCWxhYmVsID0gIndwcyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZncGlvMSAxNCBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07CisKKwlkc2FAMCB7CisJCWNvbXBhdGlibGUgPSAibWFydmVsbCxkc2EiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJZHNhLGV0aGVybmV0ID0gPCZldGgwcG9ydD47CisJCWRzYSxtaWktYnVzID0gPCZtZGlvPjsKKworCQlzd2l0Y2hAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDAgMD47CS8qIE1ESU8gYWRkcmVzcyAwLCBzd2l0Y2ggMCBpbiB0cmVlICovCisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWxhYmVsID0gImxhbjQiOworCQkJfTsKKworCQkJcG9ydEAxIHsKKwkJCSAgICAgICByZWcgPSA8MT47CisJCQkgICAgICAgbGFiZWwgPSAibGFuMyI7CisJCQl9OworCisJCQlwb3J0QDIgeworCQkJICAgICAgIHJlZyA9IDwyPjsKKwkJCSAgICAgICBsYWJlbCA9ICJsYW4yIjsKKwkJCX07CisKKwkJCXBvcnRAMyB7CisJCQkgICAgICAgcmVnID0gPDM+OworCQkJICAgICAgIGxhYmVsID0gImxhbjEiOworCQkJfTsKKworCQkJcG9ydEA0IHsKKwkJCQlyZWcgPSA8ND47CisJCQkJbGFiZWwgPSAid2FuIjsKKwkJCX07CisKKwkJCXBvcnRANiB7CisJCQkgICAgICAgcmVnID0gPDY+OworCQkJICAgICAgIGxhYmVsID0gImNwdSI7CisJCQl9OworCQl9OworCX07Cit9OworCismbWRpbyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogZXRoMCBpcyBjb25uZWN0ZWQgdG8gYSBNYXJ2ZWxsIDg4RTYxNzEgc3dpdGNoLCB3aXRob3V0IGEgUEhZLiBTbyBzZXQKKyAqIGZpeGVkIHNwZWVkIGFuZCBkdXBsZXguICovCismZXRoMCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZXRoZXJuZXQwLXBvcnRAMCB7CisJCXNwZWVkID0gPDEwMDA+OworCQlkdXBsZXggPSA8MT47CisJfTsKK307CisKKy8qIGV0aDEgaXMgY29ubmVjdGVkIHRvIHRoZSBzd2l0Y2ggYXMgd2VsbC4gSG93ZXZlciBEU0Egb25seSBzdXBwb3J0cyBhCisgKiBzaW5nbGUgQ1BVIHBvcnQuIFNvIGxlYXZlIHRoaXMgcG9ydCBkaXNhYmxlZCB0byBhdm9pZCBjb25mdXNpb24uICovCisKKyZldGgxIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworLyogVGhlcmUgaXMgbm8gYmF0dGVyeSBvbiB0aGUgYm9hcmRzLCBzbyB0aGUgUlRDIGRvZXMgbm90IGtlZXAgdGltZQorICogd2hlbiB0aGVyZSBpcyBubyBwb3dlciwgbWFraW5nIGl0IHVzZWxlc3MuICovCismcnRjIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXN5bm9sb2d5LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC1zeW5vbG9neS5kdHNpCmluZGV4IDgxMWUwOTcuLjhiZTViMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXN5bm9sb2d5LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2Qtc3lub2xvZ3kuZHRzaQpAQCAtMjY2LDcgKzI2Niw3IEBACiAKIAkJCXMzNTM5MGE6IHMzNTM5MGFAMzAgewogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQkJY29tcGF0aWJsZSA9ICJzc2ksczM1MzkwYSI7CisJCQkJY29tcGF0aWJsZSA9ICJzaWksczM1MzkwYSI7CiAJCQkJcmVnID0gPDB4MzA+OwogCQkJfTsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEtcWRzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEtcWRzLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzVlMTZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbHMxMDIxYS1xZHMuZHRzCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KKyAqCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgImxzMTAyMWEuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTFMxMDIxQSBRRFMgQm9hcmQiOworCisJYWxpYXNlcyB7CisJCWVuZXQwX3JnbWlpX3BoeSA9ICZyZ21paV9waHkxOworCQllbmV0MV9yZ21paV9waHkgPSAmcmdtaWlfcGh5MjsKKwkJZW5ldDJfcmdtaWlfcGh5ID0gJnJnbWlpX3BoeTM7CisJCWVuZXQwX3NnbWlpX3BoeSA9ICZzZ21paV9waHkxYzsKKwkJZW5ldDFfc2dtaWlfcGh5ID0gJnNnbWlpX3BoeTFkOworCX07Cit9OworCismZHNwaTAgeworCWJ1cy1udW0gPSA8MD47CisJc3RhdHVzID0gIm9rYXkiOworCisJZHNwaWZsYXNoOiBhdDQ1ZGIwMjFkQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQ0NWRiMDIxZCIsICJhdG1lbCxhdDQ1IiwgImF0bWVsLGRhdGFmbGFzaCI7CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDE2MDAwMDAwPjsKKwkJc3BpLWNwb2w7CisJCXNwaS1jcGhhOworCQlyZWcgPSA8MD47CisJfTsKK307CisKKyZpMmMwIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwY2E5NTQ3OiBtdXhANzcgeworCQlyZWcgPSA8MHg3Nz47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlpMmNAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4MD47CisKKwkJCWRzMzIzMjogcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczMyMzIiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJfTsKKwkJfTsKKworCQlpMmNAMiB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4Mj47CisKKwkJCWluYTIyMEA0MCB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxpbmEyMjAiOworCQkJCXJlZyA9IDwweDQwPjsKKwkJCQlzaHVudC1yZXNpc3RvciA9IDwxMDAwPjsKKwkJCX07CisKKwkJCWluYTIyMEA0MSB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxpbmEyMjAiOworCQkJCXJlZyA9IDwweDQxPjsKKwkJCQlzaHVudC1yZXNpc3RvciA9IDwxMDAwPjsKKwkJCX07CisJCX07CisKKwkJaTJjQDMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDM+OworCisJCQllZXByb21ANTYgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjNTEyIjsKKwkJCQlyZWcgPSA8MHg1Nj47CisJCQl9OworCisJCQllZXByb21ANTcgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjNTEyIjsKKwkJCQlyZWcgPSA8MHg1Nz47CisJCQl9OworCisJCQlhZHQ3NDYxYUA0YyB7CisJCQkJY29tcGF0aWJsZSA9ICJhZGksYWR0NzQ2MWEiOworCQkJCXJlZyA9IDwweDRjPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZpZmMgeworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDE+OworCS8qIE5PUiwgTkFORCBGbGFzaGVzIGFuZCBGUEdBIG9uIGJvYXJkICovCisJcmFuZ2VzID0gPDB4MCAweDAgMHgwIDB4NjAwMDAwMDAgMHgwODAwMDAwMAorCQkgIDB4MiAweDAgMHgwIDB4N2U4MDAwMDAgMHgwMDAxMDAwMAorCQkgIDB4MyAweDAgMHgwIDB4N2ZiMDAwMDAgMHgwMDAwMDEwMD47CisJc3RhdHVzID0gIm9rYXkiOworCisJbm9yQDAsMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQlyZWcgPSA8MHgwIDB4MCAweDgwMDAwMDA+OworCQliYW5rLXdpZHRoID0gPDI+OworCQlkZXZpY2Utd2lkdGggPSA8MT47CisJfTsKKworCWZwZ2E6IGJvYXJkLWNvbnRyb2xAMywwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHgzIDB4MCAweDAwMDAxMDA+OworCQliYW5rLXdpZHRoID0gPDE+OworCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCXJhbmdlcyA9IDwwIDMgMCAweDEwMD47CisKKwkJbWRpby1tdXgtZW1pMSB7CisJCQljb21wYXRpYmxlID0gIm1kaW8tbXV4LW1taW9yZWciOworCQkJbWRpby1wYXJlbnQtYnVzID0gPCZtZGlvMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4NTQgMT47IC8qIEJSRENGRzQgKi8KKwkJCW11eC1tYXNrID0gPDB4ZTA+OyAvKiBFTUkxWzI6MF0gKi8KKworCQkJLyogT25ib2FyZCBQSFlzICovCisJCQlsczEwMjFhbWRpbzA6IG1kaW9AMCB7CisJCQkJcmVnID0gPDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXJnbWlpX3BoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJfTsKKwkJCX07CisKKwkJCWxzMTAyMWFtZGlvMTogbWRpb0AyMCB7CisJCQkJcmVnID0gPDB4MjA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXJnbWlpX3BoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJfTsKKwkJCX07CisKKwkJCWxzMTAyMWFtZGlvMjogbWRpb0A0MCB7CisJCQkJcmVnID0gPDB4NDA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXJnbWlpX3BoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJfTsKKwkJCX07CisKKwkJCWxzMTAyMWFtZGlvMzogbWRpb0A2MCB7CisJCQkJcmVnID0gPDB4NjA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXNnbWlpX3BoeTFjOiBldGhlcm5ldC1waHlAMWMgeworCQkJCQlyZWcgPSA8MHgxYz47CisJCQkJfTsKKwkJCX07CisKKwkJCWxzMTAyMWFtZGlvNDogbWRpb0A4MCB7CisJCQkJcmVnID0gPDB4ODA+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXNnbWlpX3BoeTFkOiBldGhlcm5ldC1waHlAMWQgeworCQkJCQlyZWcgPSA8MHgxZD47CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZscHVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbWRpbzAgeworCXRiaTA6IHRiaS1waHlAOCB7CisJCXJlZyA9IDwweDg+OworCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLXR3ci5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLXR3ci5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjNTkxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEtdHdyLmR0cwpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJsczEwMjFhLmR0c2kiCisKKy8geworCW1vZGVsID0gIkxTMTAyMUEgVFdSIEJvYXJkIjsKKworCWFsaWFzZXMgeworCQllbmV0Ml9yZ21paV9waHkgPSAmcmdtaWlfcGh5MTsKKwkJZW5ldDBfc2dtaWlfcGh5ID0gJnNnbWlpX3BoeTI7CisJCWVuZXQxX3NnbWlpX3BoeSA9ICZzZ21paV9waHkwOworCX07Cit9OworCismZHNwaTEgeworCWJ1cy1udW0gPSA8MD47CisJc3RhdHVzID0gIm9rYXkiOworCisJZHNwaWZsYXNoOiBzMjVmbDA2NGtAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGFuc2lvbixzMjVmbDA2NGsiOworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwxNjAwMDAwMD47CisJCXNwaS1jcG9sOworCQlzcGktY3BoYTsKKwkJcmVnID0gPDA+OworCX07Cit9OworCismaTJjMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmkyYzEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpZmMgeworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDE+OworCS8qIE5PUiBGbGFzaCBvbiBib2FyZCAqLworCXJhbmdlcyA9IDwweDAgMHgwIDB4MCAweDYwMDAwMDAwIDB4MDgwMDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCW5vckAwLDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJcmVnID0gPDB4MCAweDAgMHg4MDAwMDAwPjsKKwkJYmFuay13aWR0aCA9IDwyPjsKKwkJZGV2aWNlLXdpZHRoID0gPDE+OworCX07Cit9OworCismbHB1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1kaW8wIHsKKwlzZ21paV9waHkwOiBldGhlcm5ldC1waHlAMCB7CisJCXJlZyA9IDwweDA+OworCX07CisJcmdtaWlfcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQlyZWcgPSA8MHgxPjsKKwl9OworCXNnbWlpX3BoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJcmVnID0gPDB4Mj47CisJfTsKKwl0YmkxOiB0YmktcGh5QDFmIHsKKwkJcmVnID0gPDB4MWY+OworCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9sczEwMjFhLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3ZGExNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2xzMTAyMWEuZHRzaQpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAic2tlbGV0b242NC5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKworLyB7CisJY29tcGF0aWJsZSA9ICJmc2wsbHMxMDIxYSI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKworCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJmxwdWFydDA7CisJCXNlcmlhbDEgPSAmbHB1YXJ0MTsKKwkJc2VyaWFsMiA9ICZscHVhcnQyOworCQlzZXJpYWwzID0gJmxwdWFydDM7CisJCXNlcmlhbDQgPSAmbHB1YXJ0NDsKKwkJc2VyaWFsNSA9ICZscHVhcnQ1OworCQlzeXNjbGsgPSAmc3lzY2xrOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUBmMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHhmMDA+OworCQkJY2xvY2tzID0gPCZjbHVzdGVyMV9jbGs+OworCQl9OworCisJCWNwdUBmMDEgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHhmMDE+OworCQkJY2xvY2tzID0gPCZjbHVzdGVyMV9jbGs+OworCQl9OworCX07CisKKwl0aW1lciB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY3LXRpbWVyIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDEzIChHSUNfQ1BVX01BU0tfU0lNUExFKDIpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCisJCQkgICAgIDxHSUNfUFBJIDE0IChHSUNfQ1BVX01BU0tfU0lNUExFKDIpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCisJCQkgICAgIDxHSUNfUFBJIDExIChHSUNfQ1BVX01BU0tfU0lNUExFKDIpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCisJCQkgICAgIDxHSUNfUFBJIDEwIChHSUNfQ1BVX01BU0tfU0lNUExFKDIpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT47CisJfTsKKworCXBtdSB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNy1wbXUiOworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMzkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKworCXNvYyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJcmFuZ2VzOworCisJCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTQwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTctZ2ljIjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCXJlZyA9IDwweDAgMHgxNDAxMDAwIDB4MCAweDEwMDA+LAorCQkJICAgICAgPDB4MCAweDE0MDIwMDAgMHgwIDB4MTAwMD4sCisJCQkgICAgICA8MHgwIDB4MTQwNDAwMCAweDAgMHgyMDAwPiwKKwkJCSAgICAgIDwweDAgMHgxNDA2MDAwIDB4MCAweDIwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDkgKEdJQ19DUFVfTUFTS19TSU1QTEUoMikgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKT47CisKKwkJfTsKKworCQlpZmM6IGlmY0AxNTMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGlmYyIsICJzaW1wbGUtYnVzIjsKKwkJCXJlZyA9IDwweDAgMHgxNTMwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJfTsKKworCQlkY2ZnOiBkY2ZnQDFlZTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbHMxMDIxYS1kY2ZnIiwgInN5c2NvbiI7CisJCQlyZWcgPSA8MHgwIDB4MWVlMDAwMCAweDAgMHgxMDAwMD47CisJCQliaWctZW5kaWFuOworCQl9OworCisJCWVzZGhjOiBlc2RoY0AxNTYwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVzZGhjIjsKKwkJCXJlZyA9IDwweDAgMHgxNTYwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA5NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCXZvbHRhZ2UtcmFuZ2VzID0gPDE4MDAgMTgwMCAzMzAwIDMzMDA+OworCQkJc2RoY2ksYXV0by1jbWQxMjsKKwkJCWJpZy1lbmRpYW47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNjZmc6IHNjZmdAMTU3MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLXNjZmciLCAic3lzY29uIjsKKwkJCXJlZyA9IDwweDAgMHgxNTcwMDAwIDB4MCAweDEwMDAwPjsKKwkJfTsKKworCQljbG9ja2dlbjogY2xvY2tpbmdAMWVlMTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzID0gPDB4MCAweDAgMHgxZWUxMDAwIDB4MTAwMDA+OworCisJCQlzeXNjbGs6IHN5c2NsayB7CisJCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJzeXNjbGsiOworCQkJfTsKKworCQkJY2dhX3BsbDE6IHBsbEA4MDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHFvcmlxLWNvcmUtcGxsLTIuMCI7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweDgwMCAweDEwPjsKKwkJCQljbG9ja3MgPSA8JnN5c2Nsaz47CisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNnYS1wbGwxIiwgImNnYS1wbGwxLWRpdjIiLAorCQkJCQkJICAgICAiY2dhLXBsbDEtZGl2NCI7CisJCQl9OworCisJCQlwbGF0Zm9ybV9jbGs6IHBsbEBjMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHFvcmlxLWNvcmUtcGxsLTIuMCI7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweGMwMCAweDEwPjsKKwkJCQljbG9ja3MgPSA8JnN5c2Nsaz47CisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInBsYXRmb3JtLWNsayIsICJwbGF0Zm9ybS1jbGstZGl2MiI7CisJCQl9OworCisJCQljbHVzdGVyMV9jbGs6IGNsazBjMEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxxb3JpcS1jb3JlLW11eC0yLjAiOworCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQlyZWcgPSA8MHgwIDB4MTA+OworCQkJCWNsb2NrLW5hbWVzID0gInBsbDFjZ2EiLCAicGxsMWNnYS1kaXYyIiwgInBsbDFjZ2EtZGl2NCI7CisJCQkJY2xvY2tzID0gPCZjZ2FfcGxsMSAwPiwgPCZjZ2FfcGxsMSAxPiwgPCZjZ2FfcGxsMSAyPjsKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2x1c3RlcjEtY2xrIjsKKwkJCX07CisJCX07CisKKwkJZHNwaTA6IGRzcGlAMjEwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1kc3BpIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgwIDB4MjEwMDAwMCAweDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1uYW1lcyA9ICJkc3BpIjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJc3BpLW51bS1jaGlwc2VsZWN0cyA9IDw1PjsKKwkJCWJpZy1lbmRpYW47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWRzcGkxOiBkc3BpQDIxMTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZHNwaSI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4MCAweDIxMTAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDk3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2stbmFtZXMgPSAiZHNwaSI7CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCXNwaS1udW0tY2hpcHNlbGVjdHMgPSA8NT47CisJCQliaWctZW5kaWFuOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMwOiBpMmNAMjE4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1pMmMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDAgMHgyMTgwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrLW5hbWVzID0gImkyYyI7CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjMTogaTJjQDIxOTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtaTJjIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgwIDB4MjE5MDAwMCAweDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1uYW1lcyA9ICJpMmMiOworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyYzI6IGkyY0AyMWEwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWkyYyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4MCAweDIxYTAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDkwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2stbmFtZXMgPSAiaTJjIjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0MDogc2VyaWFsQDIxYzA1MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsMTY1NTAtRklGTzY0IiwgIm5zMTY1NTBhIjsKKwkJCXJlZyA9IDwweDAgMHgyMWMwNTAwIDB4MCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlmaWZvLXNpemUgPSA8MTU+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0MTogc2VyaWFsQDIxYzA2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsMTY1NTAtRklGTzY0IiwgIm5zMTY1NTBhIjsKKwkJCXJlZyA9IDwweDAgMHgyMWMwNjAwIDB4MCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlmaWZvLXNpemUgPSA8MTU+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0Mjogc2VyaWFsQDIxZDA1MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsMTY1NTAtRklGTzY0IiwgIm5zMTY1NTBhIjsKKwkJCXJlZyA9IDwweDAgMHgyMWQwNTAwIDB4MCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlmaWZvLXNpemUgPSA8MTU+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0Mzogc2VyaWFsQDIxZDA2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsMTY1NTAtRklGTzY0IiwgIm5zMTY1NTBhIjsKKwkJCXJlZyA9IDwweDAgMHgyMWQwNjAwIDB4MCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlmaWZvLXNpemUgPSA8MTU+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlscHVhcnQwOiBzZXJpYWxAMjk1MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWxwdWFydCI7CisJCQlyZWcgPSA8MHgwIDB4Mjk1MDAwMCAweDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmc3lzY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWxwdWFydDE6IHNlcmlhbEAyOTYwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtbHB1YXJ0IjsKKwkJCXJlZyA9IDwweDAgMHgyOTYwMDAwIDB4MCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDgxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlscHVhcnQyOiBzZXJpYWxAMjk3MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWxwdWFydCI7CisJCQlyZWcgPSA8MHgwIDB4Mjk3MDAwMCAweDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbHB1YXJ0Mzogc2VyaWFsQDI5ODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbHMxMDIxYS1scHVhcnQiOworCQkJcmVnID0gPDB4MCAweDI5ODAwMDAgMHgwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWxwdWFydDQ6IHNlcmlhbEAyOTkwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtbHB1YXJ0IjsKKwkJCXJlZyA9IDwweDAgMHgyOTkwMDAwIDB4MCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZwbGF0Zm9ybV9jbGsgMT47CisJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlscHVhcnQ1OiBzZXJpYWxAMjlhMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxsczEwMjFhLWxwdWFydCI7CisJCQlyZWcgPSA8MHgwIDB4MjlhMDAwMCAweDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJd2RvZzA6IHdhdGNoZG9nQDJhZDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjEtd2R0IjsKKwkJCXJlZyA9IDwweDAgMHgyYWQwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCWNsb2NrLW5hbWVzID0gIndkb2ctZW4iOworCQkJYmlnLWVuZGlhbjsKKwkJfTsKKworCQlzYWkxOiBzYWlAMmI1MDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1zYWkiOworCQkJcmVnID0gPDB4MCAweDJiNTAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEzMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+OworCQkJY2xvY2stbmFtZXMgPSAic2FpIjsKKwkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCQlkbWFzID0gPCZlZG1hMCAxIDQ3PiwKKwkJCSAgICAgICA8JmVkbWEwIDEgNDY+OworCQkJYmlnLWVuZGlhbjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2FpMjogc2FpQDJiNjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtc2FpIjsKKwkJCXJlZyA9IDwweDAgMHgyYjYwMDAwIDB4MCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljbG9ja3MgPSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJCWNsb2NrLW5hbWVzID0gInNhaSI7CisJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOworCQkJZG1hcyA9IDwmZWRtYTAgMSA0NT4sCisJCQkgICAgICAgPCZlZG1hMCAxIDQ0PjsKKwkJCWJpZy1lbmRpYW47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWVkbWEwOiBlZG1hQDJjMDAwMDAgeworCQkJI2RtYS1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWVkbWEiOworCQkJcmVnID0gPDB4MCAweDJjMDAwMDAgMHgwIDB4MTAwMDA+LAorCQkJICAgICAgPDB4MCAweDJjMTAwMDAgMHgwIDB4MTAwMDA+LAorCQkJICAgICAgPDB4MCAweDJjMjAwMDAgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEzNSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkgICAgIDxHSUNfU1BJIDEzNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWludGVycnVwdC1uYW1lcyA9ICJlZG1hLXR4IiwgImVkbWEtZXJyIjsKKwkJCWRtYS1jaGFubmVscyA9IDwzMj47CisJCQliaWctZW5kaWFuOworCQkJY2xvY2stbmFtZXMgPSAiZG1hbXV4MCIsICJkbWFtdXgxIjsKKwkJCWNsb2NrcyA9IDwmcGxhdGZvcm1fY2xrIDE+LAorCQkJCSA8JnBsYXRmb3JtX2NsayAxPjsKKwkJfTsKKworCQltZGlvMDogbWRpb0AyZDI0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgwIDB4MmQyNDAwMCAweDAgMHg0MDAwPjsKKwkJfTsKKworCQl1c2JAODYwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyLXYyLjUiLCAiZnNsLXVzYjItZHIiOworCQkJcmVnID0gPDB4MCAweDg2MDAwMDAgMHgwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTcxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJZHJfbW9kZSA9ICJob3N0IjsKKwkJCXBoeV90eXBlID0gInVscGkiOworCQl9OworCisJCXVzYjNAMzEwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHdjMyI7CisJCQlyZWcgPSA8MHgwIDB4MzEwMDAwMCAweDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlkcl9tb2RlID0gImhvc3QiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uLmR0c2kKaW5kZXggZTY1MzllYS4uMDNiY2ZmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbi5kdHNpCkBAIC01MCw2ICs1MCwxMyBAQAogLyB7CiAJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAorCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQGM0MjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOworCQlyZWcgPSA8MHhjNDIwMDAwMCAweDEwMDA+OworCQljYWNoZS11bmlmaWVkOworCQljYWNoZS1sZXZlbCA9IDwyPjsKKwl9OworCiAJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBjNDMwMTAwMCB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiOwogCQlyZWcgPSA8MHhjNDMwMTAwMCAweDEwMDA+LApAQCAtMTA2LDUgKzExMywzNSBAQAogCQkJY2xvY2tzID0gPCZjbGs4MT47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OworCisJCWkyY19BTzogaTJjQGM4MTAwNTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjYtaTJjIjsKKwkJCXJlZyA9IDwweGM4MTAwNTAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwwIDkyIDE+OworCQkJY2xvY2tzID0gPCZjbGs4MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfQTogaTJjQGMxMTA4NTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjYtaTJjIjsKKwkJCXJlZyA9IDwweGMxMTA4NTAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwwIDIxIDE+OworCQkJY2xvY2tzID0gPCZjbGs4MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNfQjogaTJjQGMxMTA4N2MwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjYtaTJjIjsKKwkJCXJlZyA9IDwweGMxMTA4N2MwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEyOCAxPjsKKwkJCWNsb2NrcyA9IDwmY2xrODE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CiAJfTsKIH07IC8qIGVuZCBvZiAvICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYtYXR2MTIwMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYtYXR2MTIwMC5kdHMKaW5kZXggZGMyNTQxZi4uZDdkMzUxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb242LWF0djEyMDAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uNi1hdHYxMjAwLmR0cwpAQCAtNTAsNyArNTAsNyBAQAogCiAvIHsKIAltb2RlbCA9ICJHZW5pYXRlY2ggQVRWMTIwMCI7Ci0JY29tcGF0aWJsZSA9ICJnZW5pYXRlY2gsYXR2MTIwMCI7CisJY29tcGF0aWJsZSA9ICJnZW5pYXRlY2gsYXR2MTIwMCIsICJhbWxvZ2ljLG1lc29uNiI7CiAKIAlhbGlhc2VzIHsKIAkJc2VyaWFsMCA9ICZ1YXJ0X0FPOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbWVzb242LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYuZHRzaQppbmRleCA0YmE0OTEyLi44YjMzYmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbjYuZHRzaQpAQCAtNjAsMTIgKzYwLDE0IEBACiAJCWNwdUAyMDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CiAJCQlyZWcgPSA8MHgyMDA+OwogCQl9OwogCiAJCWNwdUAyMDEgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CiAJCQlyZWcgPSA8MHgyMDE+OwogCQl9OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tZXNvbjguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL21lc29uOC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDQyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9tZXNvbjguZHRzaQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgQ2FybG8gQ2Fpb25lIDxjYXJsb0BjYWlvbmUub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KKyAqCisgKiAgYSkgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvaW5jbHVkZS8gIm1lc29uLmR0c2kiCisKKy8geworCW1vZGVsID0gIkFtbG9naWMgTWVzb244IFNvQyI7CisJY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uOCI7CisKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMjAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcmVnID0gPDB4MjAwPjsKKwkJfTsKKworCQljcHVAMjAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcmVnID0gPDB4MjAxPjsKKwkJfTsKKworCQljcHVAMjAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcmVnID0gPDB4MjAyPjsKKwkJfTsKKworCQljcHVAMjAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTkiOworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQkJcmVnID0gPDB4MjAzPjsKKwkJfTsKKwl9OworCisJY2xrODE6IGNsa0AwIHsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDE0MTY2NjY2Nj47CisJfTsKK307IC8qIGVuZCBvZiAvICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tdDY1OTItZXZiLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210NjU5Mi1ldmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzIzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9tdDY1OTItZXZiLmR0cwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSG93YXJkIENoZW4gPGliYW5lemNoZW5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDY1OTIuZHRzaSIKKworLyB7CisJbW9kZWwgPSAibXQ2NTkyIGV2YiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1OTItZXZiIiwgIm1lZGlhdGVrLG10NjU5MiI7CisKKwltZW1vcnkgeworCQlyZWcgPSA8MHg4MDAwMDAwMCAweDQwMDAwMDAwPjsKKwl9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ2NTkyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9tdDY1OTIuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWU1YTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ2NTkyLmR0c2kKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEhvd2FyZCBDaGVuIDxpYmFuZXpjaGVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKyNpbmNsdWRlICJza2VsZXRvbi5kdHNpIgorCisvIHsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NjU5MiI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgwPjsKKwkJfTsKKwkJY3B1QDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgxPjsKKwkJfTsKKwkJY3B1QDIgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgyPjsKKwkJfTsKKwkJY3B1QDMgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgzPjsKKwkJfTsKKwkJY3B1QDQgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHg0PjsKKwkJfTsKKwkJY3B1QDUgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHg1PjsKKwkJfTsKKwkJY3B1QDYgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHg2PjsKKwkJfTsKKwkJY3B1QDcgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHg3PjsKKwkJfTsKKwl9OworCisJc3lzdGVtX2NsazogZHVtbXkxM20geworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMDAwMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07CisKKwlydGNfY2xrOiBkdW1teTMyayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MzIwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCXRpbWVyOiB0aW1lckAxMDAwODAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2NTc3LXRpbWVyIjsKKwkJcmVnID0gPDB4MTAwMDgwMDAgMHg4MD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNDQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sIDwmcnRjX2Nsaz47CisJCWNsb2NrLW5hbWVzID0gInN5c3RlbS1jbGsiLCAicnRjLWNsayI7CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTAyMTEwMDAgeworCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTctZ2ljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweDEwMjExMDAwIDB4MTAwMD4sCisJCSAgICAgIDwweDEwMjEyMDAwIDB4MTAwMD47CisJfTsKKworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTI3LW1vb3NlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEyNy1tb29zZS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjYmEwZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEyNy1tb29zZS5kdHMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpvZS5DIDx5aW5nam9lLmNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDgxMjcuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ4MTI3IE1vb3NlIEJvYXJkIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODEyNy1tb29zZSIsICJtZWRpYXRlayxtdDgxMjciOworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg4MDAwMDAwMCAwIDB4NDAwMDAwMDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTI3LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9tdDgxMjcuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjRjMGEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTI3LmR0c2kKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpvZS5DIDx5aW5nam9lLmNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgInNrZWxldG9uNjQuZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxMjciOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4MD47CisJCX07CisJCWNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4MT47CisJCX07CisJCWNwdUAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4Mj47CisJCX07CisJCWNwdUAzIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJcmVnID0gPDB4Mz47CisJCX07CisKKwl9OworCisJY2xvY2tzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXM7CisKKwkJc3lzdGVtX2NsazogZHVtbXkxM20geworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMwMDAwMDA+OworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQl9OworCisJCXJ0Y19jbGs6IGR1bW15MzJrIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJfTsKKwl9OworCisJc29jIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXM7CisKKwkJdGltZXI6IHRpbWVyQDEwMDA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTI3LXRpbWVyIiwKKwkJCQkJIm1lZGlhdGVrLG10NjU3Ny10aW1lciI7CisJCQlyZWcgPSA8MCAweDEwMDA4MDAwIDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPiwgPCZydGNfY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInN5c3RlbS1jbGsiLCAicnRjLWNsayI7CisJCX07CisKKwkJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxMDIxMTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTctZ2ljIjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCXJlZyA9IDwwIDB4MTAyMTEwMDAgMCAweDEwMDA+LAorCQkJICAgICAgPDAgMHgxMDIxMjAwMCAwIDB4MTAwMD4sCisJCQkgICAgICA8MCAweDEwMjE0MDAwIDAgMHgyMDAwPiwKKwkJCSAgICAgIDwwIDB4MTAyMTYwMDAgMCAweDIwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ4MTM1LWV2YnAxLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEzNS1ldmJwMS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhZGY5NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEzNS1ldmJwMS5kdHMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpvZS5DIDx5aW5nam9lLmNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDgxMzUuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ4MTM1IGV2YWx1YXRpb24gYm9hcmQiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTM1LWV2YnAxIiwgIm1lZGlhdGVrLG10ODEzNSI7CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDgwMDAwMDAwIDAgMHg0MDAwMDAwMD47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9tdDgxMzUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL210ODEzNS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNTZhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9tdDgxMzUuZHRzaQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpvZS5DIDx5aW5nam9lLmNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgInNrZWxldG9uNjQuZHRzaSIKKworLyB7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxMzUiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisKKwljcHUtbWFwIHsKKwkJY2x1c3RlcjAgeworCQkJY29yZTAgeworCQkJCWNwdSA9IDwmY3B1MD47CisJCQl9OworCQkJY29yZTEgeworCQkJCWNwdSA9IDwmY3B1MT47CisJCQl9OworCQl9OworCisJCWNsdXN0ZXIxIHsKKwkJCWNvcmUwIHsKKwkJCQljcHUgPSA8JmNwdTI+OworCQkJfTsKKwkJCWNvcmUxIHsKKwkJCQljcHUgPSA8JmNwdTM+OworCQkJfTsKKwkJfTsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHUwOiBjcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCXJlZyA9IDwweDAwMD47CisJCX07CisKKwkJY3B1MTogY3B1QDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlyZWcgPSA8MHgwMDE+OworCQl9OworCisJCWNwdTI6IGNwdUAxMDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJcmVnID0gPDB4MTAwPjsKKwkJfTsKKworCQljcHUzOiBjcHVAMTAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCXJlZyA9IDwweDEwMT47CisJCX07CisJfTsKKworCWNsb2NrcyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzOworCisJCXN5c3RlbV9jbGs6IGR1bW15MTNtIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMDAwMDAwPjsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlydGNfY2xrOiBkdW1teTMyayB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjAwMD47CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCX07CisJfTsKKworCXNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzOworCisJCXRpbWVyOiB0aW1lckAxMDAwODAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODEzNS10aW1lciIsCisJCQkJCSJtZWRpYXRlayxtdDY1NzctdGltZXIiOworCQkJcmVnID0gPDAgMHgxMDAwODAwMCAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sIDwmcnRjX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJzeXN0ZW0tY2xrIiwgInJ0Yy1jbGsiOworCQl9OworCisJCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTAyMTEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNS1naWMiOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJcmVnID0gPDAgMHgxMDIxMTAwMCAwIDB4MTAwMD4sCisJCQkgICAgICA8MCAweDEwMjEyMDAwIDAgMHgxMDAwPiwKKwkJCSAgICAgIDwwIDB4MTAyMTQwMDAgMCAweDIwMDA+LAorCQkJICAgICAgPDAgMHgxMDIxNjAwMCAwIDB4MjAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwLWdwbWMtc21zYzkxMXguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtZ3BtYy1zbXNjOTExeC5kdHNpCmluZGV4IDUyMWM1ODcuLjQ0NWZhZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtZ3BtYy1zbXNjOTExeC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtZ3BtYy1zbXNjOTExeC5kdHNpCkBAIC0yMywyNCArMjMsMjkgQEAKIAlldGhlcm5ldEBncG1jIHsKIAkJY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkyMjEiLCAic21zYyxsYW45MTE1IjsKIAkJYmFuay13aWR0aCA9IDwyPjsKLQkJZ3BtYyxtdXgtYWRkLWRhdGE7Ci0JCWdwbWMsY3Mtb24tbnMgPSA8MT47Ci0JCWdwbWMsY3MtcmQtb2ZmLW5zID0gPDE4MD47Ci0JCWdwbWMsY3Mtd3Itb2ZmLW5zID0gPDE4MD47Ci0JCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDwxOD47Ci0JCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw0OD47Ci0JCWdwbWMsb2Utb24tbnMgPSA8NTQ+OwotCQlncG1jLG9lLW9mZi1ucyA9IDwxNjg+OwotCQlncG1jLHdlLW9uLW5zID0gPDU0PjsKLQkJZ3BtYyx3ZS1vZmYtbnMgPSA8MTY4PjsKLQkJZ3BtYyxyZC1jeWNsZS1ucyA9IDwxODY+OwotCQlncG1jLHdyLWN5Y2xlLW5zID0gPDE4Nj47Ci0JCWdwbWMsYWNjZXNzLW5zID0gPDE0ND47Ci0JCWdwbWMscGFnZS1idXJzdC1hY2Nlc3MtbnMgPSA8MjQ+OwotCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDkwPjsKLQkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDw5MD47Ci0JCWdwbWMsY3ljbGUyY3ljbGUtc2FtZWNzZW47Ci0JCWdwbWMsY3ljbGUyY3ljbGUtZGlmZmNzZW47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLXNhbWVjc2VuID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRpZmZjc2VuID0gPDE+OworCQlncG1jLGNzLW9uLW5zID0gPDU+OworCQlncG1jLGNzLXJkLW9mZi1ucyA9IDwxNTA+OworCQlncG1jLGNzLXdyLW9mZi1ucyA9IDwxNTA+OworCQlncG1jLGFkdi1vbi1ucyA9IDwwPjsKKwkJZ3BtYyxhZHYtcmQtb2ZmLW5zID0gPDE1PjsKKwkJZ3BtYyxhZHYtd3Itb2ZmLW5zID0gPDQwPjsKKwkJZ3BtYyxvZS1vbi1ucyA9IDw0NT47CisJCWdwbWMsb2Utb2ZmLW5zID0gPDE0MD47CisJCWdwbWMsd2Utb24tbnMgPSA8NDU+OworCQlncG1jLHdlLW9mZi1ucyA9IDwxNDA+OworCQlncG1jLHJkLWN5Y2xlLW5zID0gPDE1NT47CisJCWdwbWMsd3ItY3ljbGUtbnMgPSA8MTU1PjsKKwkJZ3BtYyxhY2Nlc3MtbnMgPSA8MTIwPjsKKwkJZ3BtYyxwYWdlLWJ1cnN0LWFjY2Vzcy1ucyA9IDwyMD47CisJCWdwbWMsYnVzLXR1cm5hcm91bmQtbnMgPSA8NzU+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRlbGF5LW5zID0gPDc1PjsKKwkJZ3BtYyx3YWl0LW1vbml0b3JpbmctbnMgPSA8MD47CisJCWdwbWMsY2xrLWFjdGl2YXRpb24tbnMgPSA8MD47CisJCWdwbWMsd3ItZGF0YS1tdXgtYnVzLW5zID0gPDA+OworCQlncG1jLHdyLWFjY2Vzcy1ucyA9IDwwPjsKIAkJdmRkdmFyaW8tc3VwcGx5ID0gPCZ2ZGR2YXJpbz47CiAJCXZkZDMzYS1zdXBwbHkgPSA8JnZkZDMzYT47CiAJCXJlZy1pby13aWR0aCA9IDw0PjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtem9vbS1jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAtem9vbS1jb21tb24uZHRzaQppbmRleCA2ODIyMWZhLi40NmVmM2U0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwLXpvb20tY29tbW9uLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcC16b29tLWNvbW1vbi5kdHNpCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgIm9tYXAtZ3BtYy1zbXNjOTExeC5kdHNpIgogCiAmZ3BtYyB7Ci0JcmFuZ2VzID0gPDMgMCAweDEwMDAwMDAwIDB4MDAwMDA0MDA+LAorCXJhbmdlcyA9IDwzIDAgMHgxMDAwMDAwMCAweDEwMDAwMDA+LAkvKiBDUzM6IDE2TUIgZm9yIFVBUlQgKi8KIAkJIDw3IDAgMHgyYzAwMDAwMCAweDAxMDAwMDAwPjsKIAogCS8qCkBAIC0xNSw3ICsxNSw2NSBAQAogCSAqLwogCXVhcnRAMywwIHsKIAkJY29tcGF0aWJsZSA9ICJuczE2NTUwYSI7Ci0JCXJlZyA9IDwzIDAgMHgxMDA+OworCQlyZWcgPSA8MyAwIDg+OwkvKiBDUzMsIG9mZnNldCAwLCBJTyBzaXplIDggKi8KKwkJYmFuay13aWR0aCA9IDwyPjsKKwkJcmVnLXNoaWZ0ID0gPDE+OworCQlyZWctaW8td2lkdGggPSA8MT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW80PjsKKwkJaW50ZXJydXB0cyA9IDw2IElSUV9UWVBFX0VER0VfUklTSU5HPjsJLyogZ3BpbzEwMiAqLworCQljbG9jay1mcmVxdWVuY3kgPSA8MTg0MzIwMD47CisJCWN1cnJlbnQtc3BlZWQgPSA8MTE1MjAwPjsKKwkJZ3BtYyxtdXgtYWRkLWRhdGEgPSA8MD47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDE+OworCQlncG1jLHdhaXQtcGluID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLXNhbWVjc2VuID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRpZmZjc2VuID0gPDE+OworCQlncG1jLGNzLW9uLW5zID0gPDU+OworCQlncG1jLGNzLXJkLW9mZi1ucyA9IDwxNTU+OworCQlncG1jLGNzLXdyLW9mZi1ucyA9IDwxNTU+OworCQlncG1jLGFkdi1vbi1ucyA9IDwxNT47CisJCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDw0MD47CisJCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw0MD47CisJCWdwbWMsb2Utb24tbnMgPSA8NDU+OworCQlncG1jLG9lLW9mZi1ucyA9IDwxNDU+OworCQlncG1jLHdlLW9uLW5zID0gPDQ1PjsKKwkJZ3BtYyx3ZS1vZmYtbnMgPSA8MTQ1PjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDwxNTU+OworCQlncG1jLHdyLWN5Y2xlLW5zID0gPDE1NT47CisJCWdwbWMsYWNjZXNzLW5zID0gPDE0NT47CisJCWdwbWMscGFnZS1idXJzdC1hY2Nlc3MtbnMgPSA8MjA+OworCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDIwPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDwyMD47CisJCWdwbWMsd2FpdC1tb25pdG9yaW5nLW5zID0gPDA+OworCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDA+OworCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDw0NT47CisJCWdwbWMsd3ItYWNjZXNzLW5zID0gPDE0NT47CisJfTsKKwl1YXJ0QDMsMSB7CisJCWNvbXBhdGlibGUgPSAibnMxNjU1MGEiOworCQlyZWcgPSA8MyAweDEwMCA4PjsJLyogQ1MzLCBvZmZzZXQgMHgxMDAsIElPIHNpemUgOCAqLworCQliYW5rLXdpZHRoID0gPDI+OworCQlyZWctc2hpZnQgPSA8MT47CisJCXJlZy1pby13aWR0aCA9IDwxPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzQ+OworCQlpbnRlcnJ1cHRzID0gPDYgSVJRX1RZUEVfRURHRV9SSVNJTkc+OwkvKiBncGlvMTAyICovCisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxODQzMjAwPjsKKwkJY3VycmVudC1zcGVlZCA9IDwxMTUyMDA+OworCX07CisJdWFydEAzLDIgeworCQljb21wYXRpYmxlID0gIm5zMTY1NTBhIjsKKwkJcmVnID0gPDMgMHgyMDAgOD47CS8qIENTMywgb2Zmc2V0IDB4MjAwLCBJTyBzaXplIDggKi8KKwkJYmFuay13aWR0aCA9IDwyPjsKKwkJcmVnLXNoaWZ0ID0gPDE+OworCQlyZWctaW8td2lkdGggPSA8MT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW80PjsKKwkJaW50ZXJydXB0cyA9IDw2IElSUV9UWVBFX0VER0VfUklTSU5HPjsJLyogZ3BpbzEwMiAqLworCQljbG9jay1mcmVxdWVuY3kgPSA8MTg0MzIwMD47CisJCWN1cnJlbnQtc3BlZWQgPSA8MTE1MjAwPjsKKwl9OworCXVhcnRAMywzIHsKKwkJY29tcGF0aWJsZSA9ICJuczE2NTUwYSI7CisJCXJlZyA9IDwzIDB4MzAwIDg+OwkvKiBDUzMsIG9mZnNldCAweDMwMCwgSU8gc2l6ZSA4ICovCiAJCWJhbmstd2lkdGggPSA8Mj47CiAJCXJlZy1zaGlmdCA9IDwxPjsKIAkJcmVnLWlvLXdpZHRoID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAtbjh4MC1jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDIwLW44eDAtY29tbW9uLmR0c2kKaW5kZXggMjRjNTBkYi4uYzlmMWU5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAtbjh4MC1jb21tb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQyMC1uOHgwLWNvbW1vbi5kdHNpCkBAIC00MCwxNCArNDAsMTQgQEAKIH07CiAKICZncG1jIHsKLQlyYW5nZXMgPSA8MCAwIDB4MDQwMDAwMDAgMHgxMDAwMDAwMD47CisJcmFuZ2VzID0gPDAgMCAweDA0MDAwMDAwIDB4MTAwMDAwMD47CS8qIENTMDogMTZNQiBmb3IgT25lTkFORCAqLwogCiAJLyogZ3Bpby1pcnEgZm9yIGRtYTogMjYgKi8KIAogCW9uZW5hbmRAMCwwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwotCQlyZWcgPSA8MCAwIDB4MTAwMDAwMDA+OworCQlyZWcgPSA8MCAwIDB4MjAwMDA+OwkvKiBDUzAsIG9mZnNldCAwLCBJTyBzaXplIDEyOEsgKi8KIAogCQlncG1jLHN5bmMtcmVhZDsKIAkJZ3BtYyxidXJzdC1sZW5ndGggPSA8MTY+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDIwLmR0c2kKaW5kZXggYWU4OWFhZC4uZTJiMmU5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MjAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQyMC5kdHNpCkBAIC0xNTcsNiArMTU3LDcgQEAKIAkJCWludGVycnVwdHMgPSA8MjY+LCA8MzQ+OwogCQkJaW50ZXJydXB0LW5hbWVzID0gImRzcCIsICJpdmEiOwogCQkJdGksaHdtb2RzID0gIm1haWxib3giOworCQkJI21ib3gtY2VsbHMgPSA8MT47CiAJCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKIAkJCXRpLG1ib3gtbnVtLWZpZm9zID0gPDY+OwogCQkJbWJveF9kc3A6IGRzcCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC1zZHAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDI0MzAtc2RwLmR0cwppbmRleCAyYzkwZDI5Li4wNWVjYTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC1zZHAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDMwLXNkcC5kdHMKQEAgLTQzLDcgKzQzLDMxIEBACiAJCWludGVycnVwdHMgPSA8MjEgSVJRX1RZUEVfTEVWRUxfTE9XPjsJLyogZ3BpbzE0OSAqLwogCQlyZWcgPSA8NSAweDMwMCAweGY+OwogCQliYW5rLXdpZHRoID0gPDI+OwotCQlncG1jLG11eC1hZGQtZGF0YTsKLSAgICAgICAgfTsKKwkJZ3BtYyxzeW5jLWNsay1wcyA9IDwwPjsKKwkJZ3BtYyxtdXgtYWRkLWRhdGEgPSA8Mj47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLXNhbWVjc2VuID0gPDE+OworCQlncG1jLGN5Y2xlMmN5Y2xlLWRpZmZjc2VuID0gPDE+OworCQlncG1jLGNzLW9uLW5zID0gPDc+OworCQlncG1jLGNzLXJkLW9mZi1ucyA9IDwyMzM+OworCQlncG1jLGNzLXdyLW9mZi1ucyA9IDwyMzM+OworCQlncG1jLGFkdi1vbi1ucyA9IDwyMj47CisJCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDw2MD47CisJCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw2MD47CisJCWdwbWMsb2Utb24tbnMgPSA8Njc+OworCQlncG1jLG9lLW9mZi1ucyA9IDwyMTA+OworCQlncG1jLHdlLW9uLW5zID0gPDY3PjsKKwkJZ3BtYyx3ZS1vZmYtbnMgPSA8MjEwPjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDwyMzM+OworCQlncG1jLHdyLWN5Y2xlLW5zID0gPDIzMz47CisJCWdwbWMsYWNjZXNzLW5zID0gPDIzMz47CisJCWdwbWMscGFnZS1idXJzdC1hY2Nlc3MtbnMgPSA8MzA+OworCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDMwPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDwzMD47CisJCWdwbWMsd2FpdC1tb25pdG9yaW5nLW5zID0gPDA+OworCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDA+OworCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1hY2Nlc3MtbnMgPSA8MD47CisJfTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDMwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC5kdHNpCmluZGV4IGI1NmQ3MTYxLi4wZGM4ZGUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMjQzMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAyNDMwLmR0c2kKQEAgLTI0Nyw2ICsyNDcsNyBAQAogCQkJcmVnID0gPDB4NDgwOTQwMDAgMHgyMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyNj47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDQ+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8Nj47CiAJCQltYm94X2RzcDogZHNwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNTE3LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNTE3LmR0cwppbmRleCBkMDA1MDJmLi4wYWI3NDhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzUxNy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDM1MTcuZHRzCkBAIC0xMzQsMyArMTM0LDE0IEBACiAJYnVzLXdpZHRoID0gPDQ+OwogCWNhcC1wb3dlci1vZmYtY2FyZDsKIH07CisKKyZkc3MgeworCXN0YXR1cyA9ICJvayI7CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwKKwkJJmRzc19kcGlfcGluc19jb21tb24KKwkJJmRzc19kcGlfcGluc19jbV90MzV4CisJPjsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNTMwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNTMwLmR0cwppbmRleCBkMTQ1ODQ5Li44ZGQxNGZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzUzMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDM1MzAuZHRzCkBAIC00NiwzICs0NiwxNCBAQAogCWJ1cy13aWR0aCA9IDw0PjsKIAljYXAtcG93ZXItb2ZmLWNhcmQ7CiB9OworCismZHNzIHsKKwlzdGF0dXMgPSAib2siOworCisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8CisJCSZkc3NfZHBpX3BpbnNfY29tbW9uCisJCSZkc3NfZHBpX3BpbnNfY21fdDM1eAorCT47Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzczMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10MzczMC5kdHMKaW5kZXggYjNmOWE1MC4uNDZlYWRiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDM3MzAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzNzMwLmR0cwpAQCAtMzEsNiArMzEsMTkgQEAKIAl9OwogfTsKIAorJm9tYXAzX3BteF93a3VwIHsKKwlkc3NfZHBpX3BpbnNfY21fdDM3MzA6IHBpbm11eF9kc3NfZHBpX3BpbnNfY21fdDM3MzAgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfV0tVUF9JT1BBRCgweDJhMDgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpICAgLyogc3lzX2Jvb3QwLmRzc19kYXRhMTggKi8KKwkJCU9NQVAzX1dLVVBfSU9QQUQoMHgyYTBjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKSAgIC8qIHN5c19ib290MS5kc3NfZGF0YTE5ICovCisJCQlPTUFQM19XS1VQX0lPUEFEKDB4MmExMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykgICAvKiBzeXNfYm9vdDMuZHNzX2RhdGEyMCAqLworCQkJT01BUDNfV0tVUF9JT1BBRCgweDJhMTIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpICAgLyogc3lzX2Jvb3Q0LmRzc19kYXRhMjEgKi8KKwkJCU9NQVAzX1dLVVBfSU9QQUQoMHgyYTE0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKSAgIC8qIHN5c19ib290NS5kc3NfZGF0YTIyICovCisJCQlPTUFQM19XS1VQX0lPUEFEKDB4MmExNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykgICAvKiBzeXNfYm9vdDYuZHNzX2RhdGEyMyAqLworCQk+OworCX07Cit9OworCiAmb21hcDNfcG14X2NvcmUgewogCiAJbW1jMl9waW5zOiBwaW5tdXhfbW1jMl9waW5zIHsKQEAgLTYxLDMgKzc0LDE0IEBACiAJYnVzLXdpZHRoID0gPDQ+OwogCWNhcC1wb3dlci1vZmYtY2FyZDsKIH07CisKKyZkc3MgeworCXN0YXR1cyA9ICJvayI7CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwKKwkJJmRzc19kcGlfcGluc19jb21tb24KKwkJJmRzc19kcGlfcGluc19jbV90MzczMAorCT47Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10M3guZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzeC5kdHNpCmluZGV4IGM2NzFhMjIuLjZlYTZkNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzeC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzeC5kdHNpCkBAIC00OSw2ICs0OSwyNCBAQAogCQljb21wYXRpYmxlID0gInVzYi1ub3AteGNlaXYiOwogCQl2Y2Mtc3VwcGx5ID0gPCZoc3VzYjJfcG93ZXI+OwogCX07CisKKwlhZHM3ODQ2cmVnOiBhZHM3ODQ2LXJlZyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiYWRzNzg0Ni1yZWciOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJfTsKKworCXR2MDogY29ubmVjdG9yQDEgeworCQljb21wYXRpYmxlID0gInN2aWRlby1jb25uZWN0b3IiOworCQlsYWJlbCA9ICJ0diI7CisKKwkJcG9ydCB7CisJCQl0dl9jb25uZWN0b3JfaW46IGVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnZlbmNfb3V0PjsKKwkJCX07CisJCX07CisJfTsKIH07CiAKICZvbWFwM19wbXhfY29yZSB7CkBAIC03Niw2ICs5NCw3NiBAQAogCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWUyLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzeXNfY2xrb3V0Mi5ncGlvXzE4NiAqLwogCQk+OwogCX07CisKKwlkc3NfZHBpX3BpbnNfY29tbW9uOiBwaW5tdXhfZHNzX2RwaV9waW5zX2NvbW1vbiB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZDQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19wY2xrLmRzc19wY2xrICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZDYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19oc3luYy5kc3NfaHN5bmMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX3ZzeW5jLmRzc192c3luYyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGRhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfYWNiaWFzLmRzc19hY2JpYXMgKi8KKworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGU4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTYuZHNzX2RhdGE2ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZWEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhNy5kc3NfZGF0YTcgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlYywgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGE4LmRzc19kYXRhOCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGVlLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTkuZHNzX2RhdGE5ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZjAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTAuZHNzX2RhdGExMCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGYyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTExLmRzc19kYXRhMTEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExMi5kc3NfZGF0YTEyICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZjYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTMuZHNzX2RhdGExMyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGY4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTE0LmRzc19kYXRhMTQgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBmYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExNS5kc3NfZGF0YTE1ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZmMsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTYuZHNzX2RhdGExNiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGZlLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTE3LmRzc19kYXRhMTcgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExOC5kc3NfZGF0YTE4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxMDIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMTkuZHNzX2RhdGExOSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTA0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTIwLmRzc19kYXRhMjAgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEwNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGEyMS5kc3NfZGF0YTIxICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxMDgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMjIuZHNzX2RhdGEyMiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTBhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTIzLmRzc19kYXRhMjMgKi8KKwkJPjsKKwl9OworCisJZHNzX2RwaV9waW5zX2NtX3QzNXg6IHBpbm11eF9kc3NfZHBpX3BpbnNfY21fdDM1eCB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZGMsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMC5kc3NfZGF0YTAgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGExLmRzc19kYXRhMSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGUwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTIuZHNzX2RhdGEyICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZTIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCS8qIGRzc19kYXRhMy5kc3NfZGF0YTMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogZHNzX2RhdGE0LmRzc19kYXRhNCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGU2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiBkc3NfZGF0YTUuZHNzX2RhdGE1ICovCisJCT47CisJfTsKKworCWFkczc4NDZfcGluczogcGlubXV4X2Fkczc4NDZfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwYmEsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTQpCS8qIGdwbWNfbmNzNi5ncGlvXzU3ICovCisJCT47CisJfTsKKworCW1jc3BpMV9waW5zOiBwaW5tdXhfbWNzcGkxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWM4LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIG1jc3BpMV9jbGsgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjFjYSwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBtY3NwaTFfc2ltbyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWNjLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIG1jc3BpMV9zb21pICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxY2UsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMCkgLyogbWNzcGkxX2NzMCAqLworCQk+OworCX07CisKKwlpMmMxX3BpbnM6IHBpbm11eF9pMmMxX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWJhLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMxX3NjbCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWJjLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBpMmMxX3NkYSAqLworCQk+OworCX07CisKKwltY2JzcDJfcGluczogcGlubXV4X21jYnNwMl9waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjEzYywgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBtY2JzcDJfZnN4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxM2UsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJLyogbWNic3AyX2Nsa3ggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE0MCwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkvKiBtY2JzcDJfZHIgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE0MiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogbWNic3AyX2R4ICovCisJCT47CisJfTsKIH07CiAKICZ1YXJ0MyB7CkBAIC05NCwxMiArMTgyLDIyIEBACiB9OwogCiAmaTJjMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyYzFfcGlucz47CisKIAljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCWF0MjRANTAgeworCQljb21wYXRpYmxlID0gImF0MjQsMjRjMDIiOworCQlwYWdlc2l6ZSA9IDwxNj47CisJCXJlZyA9IDwweDUwPjsKKwl9OwogfTsKIAogJmkyYzMgewogCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogfTsKKwogJnVzYmhzaG9zdCB7CiAJcG9ydDEtbW9kZSA9ICJlaGNpLXBoeSI7CiAJcG9ydDItbW9kZSA9ICJlaGNpLXBoeSI7CkBAIC0xMDgsMyArMjA2LDU2IEBACiAmdXNiaHNlaGNpIHsKIAlwaHlzID0gPCZoc3VzYjFfcGh5ICZoc3VzYjJfcGh5PjsKIH07CisKKyZtY3NwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtY3NwaTFfcGlucz47CisKKwkvKiB0b3VjaCBjb250cm9sbGVyICovCisJYWRzNzg0NkAwIHsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZhZHM3ODQ2X3BpbnM+OworCisJCWNvbXBhdGlibGUgPSAidGksYWRzNzg0NiI7CisJCXZjYy1zdXBwbHkgPSA8JmFkczc4NDZyZWc+OworCisJCXJlZyA9IDwwPjsJCQkvKiBDUzAgKi8KKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTUwMDAwMD47CisKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzI+OworCQlpbnRlcnJ1cHRzID0gPDI1IDA+OwkJLyogZ3Bpb181NyAqLworCQlwZW5kb3duLWdwaW8gPSA8JmdwaW8yIDI1IDA+OworCisJCXRpLHgtbWluID0gL2JpdHMvIDE2IDwweDA+OworCQl0aSx4LW1heCA9IC9iaXRzLyAxNiA8MHgwZmZmPjsKKwkJdGkseS1taW4gPSAvYml0cy8gMTYgPDB4MD47CisJCXRpLHktbWF4ID0gL2JpdHMvIDE2IDwweDBmZmY+OworCisJCXRpLHgtcGxhdGUtb2htcyA9IC9iaXRzLyAxNiA8MTgwPjsKKwkJdGkscHJlc3N1cmUtbWF4ID0gL2JpdHMvIDE2IDwyNTU+OworCisJCXRpLGRlYm91bmNlLW1heCA9IC9iaXRzLyAxNiA8MzA+OworCQl0aSxkZWJvdW5jZS10b2wgPSAvYml0cy8gMTYgPDEwPjsKKwkJdGksZGVib3VuY2UtcmVwID0gL2JpdHMvIDE2IDwxPjsKKworCQlsaW51eCx3YWtldXA7CisJfTsKK307CisKKyZ2ZW5jIHsKKwlzdGF0dXMgPSAib2siOworCisJcG9ydCB7CisJCXZlbmNfb3V0OiBlbmRwb2ludCB7CisJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnR2X2Nvbm5lY3Rvcl9pbj47CisJCQl0aSxjaGFubmVscyA9IDwyPjsKKwkJfTsKKwl9OworfTsKKworJm1jYnNwMiB7CisJc3RhdHVzID0gIm9rIjsKKworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtY2JzcDJfcGlucz47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDN4MzAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWNtLXQzeDMwLmR0c2kKaW5kZXggMjViYTA4My4uOWE0YTNhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtY20tdDN4MzAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1jbS10M3gzMC5kdHNpCkBAIC0xMCw2ICsxMCwxNCBAQAogCQkJY3B1MC1zdXBwbHkgPSA8JnZjYz47CiAJCX07CiAJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwLXR3bDQwMzAiOworCQl0aSxtb2RlbCA9ICJjbS10MzUiOworCisJCXRpLG1jYnNwID0gPCZtY2JzcDI+OworCQl0aSxjb2RlYyA9IDwmdHdsX2F1ZGlvPjsKKwl9OwogfTsKIAogJm9tYXAzX3BteF9jb3JlIHsKQEAgLTU5LDExICs2NywyMiBAQAogCQlyZWcgPSA8MHg0OD47CiAJCWludGVycnVwdHMgPSA8Nz47IC8qIFNZU19OSVJRIGNhc2NhZGVkIHRvIGludGMgKi8KIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Yz47CisKKwkJdHdsX2F1ZGlvOiBhdWRpbyB7CisJCQljb21wYXRpYmxlID0gInRpLHR3bDQwMzAtYXVkaW8iOworCQkJY29kZWMgeworCQkJfTsKKwkJfTsKIAl9OwogfTsKIAogI2luY2x1ZGUgInR3bDQwMzAuZHRzaSIKICNpbmNsdWRlICJ0d2w0MDMwX29tYXAzLmR0c2kiCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKworJnZlbmMgeworCXZkZGEtc3VwcGx5ID0gPCZ2ZGFjPjsKK307CiAKICZtbWMxIHsKIAl2bW1jLXN1cHBseSA9IDwmdm1tYzE+OwpAQCAtNzUsNiArOTQsMjIgQEAKIAl0aSxwdWxsdXBzID0gPDB4MDAwMDAxPjsKIH07CiAKKyZ0d2xfa2V5cGFkIHsKKwlsaW51eCxrZXltYXAgPSA8CisJCQkJTUFUUklYX0tFWSgweDAwLCAweDAxLCBLRVlfQSkKKwkJCQlNQVRSSVhfS0VZKDB4MDAsIDB4MDIsIEtFWV9CKQorCQkJCU1BVFJJWF9LRVkoMHgwMCwgMHgwMywgS0VZX0xFRlQpCisKKwkJCQlNQVRSSVhfS0VZKDB4MDEsIDB4MDEsIEtFWV9VUCkKKwkJCQlNQVRSSVhfS0VZKDB4MDEsIDB4MDIsIEtFWV9FTlRFUikKKwkJCQlNQVRSSVhfS0VZKDB4MDEsIDB4MDMsIEtFWV9ET1dOKQorCisJCQkJTUFUUklYX0tFWSgweDAyLCAweDAxLCBLRVlfUklHSFQpCisJCQkJTUFUUklYX0tFWSgweDAyLCAweDAyLCBLRVlfQykKKwkJCQlNQVRSSVhfS0VZKDB4MDIsIDB4MDMsIEtFWV9EKQorCQkJPjsKK307CisKICZoc3VzYjFfcGh5IHsKIAlyZXNldC1ncGlvcyA9IDwmdHdsX2dwaW8gNiBHUElPX0FDVElWRV9MT1c+OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWRldmtpdDgwMDAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZGV2a2l0ODAwMC5kdHMKaW5kZXggZGE0MDJmMC4uMTY5MDM3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZGV2a2l0ODAwMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZGV2a2l0ODAwMC5kdHMKQEAgLTEwNiwxMCArMTA2LDEwIEBACiB9OwogCiAmZ3BtYyB7Ci0JcmFuZ2VzID0gPDAgMCAweDMwMDAwMDAwIDB4MDQ+OyAgICAgICAvKiBDUzA6IE5BTkQgKi8KKwlyYW5nZXMgPSA8MCAwIDB4MzAwMDAwMDAgMHgxMDAwMDAwPjsgICAgICAgLyogQ1MwOiAxNk1CIGZvciBOQU5EICovCiAKIAluYW5kQDAsMCB7Ci0JCXJlZyA9IDwwIDAgMD47IC8qIENTMCwgb2Zmc2V0IDAgKi8KKwkJcmVnID0gPDAgMCA0PjsgLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKIAogCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLTM3eHguZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLTM3eHguZHRzCmluZGV4IGE4YmQ0MzQuLjE2ZThjZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWV2bS0zN3h4LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1ldm0tMzd4eC5kdHMKQEAgLTE1NCwxMyArMTU0LDE0IEBACiB9OwogCiAmZ3BtYyB7Ci0JcmFuZ2VzID0gPDAgMCAweDAwMDAwMDAwIDB4MjAwMDAwMDA+LAorCXJhbmdlcyA9IDwwIDAgMHgwMDAwMDAwMCAweDEwMDAwMDA+LAkvKiBDUzA6IDE2TUIgZm9yIE5BTkQgKi8KIAkJIDw1IDAgMHgyYzAwMDAwMCAweDAxMDAwMDAwPjsKIAogCW5hbmRAMCwwIHsKIAkJbGludXgsbXRkLW5hbWU9ICJoeW5peCxoOGtkczB1bjBtZXItNGVtIjsKLQkJcmVnID0gPDAgMCAwPjsKKwkJcmVnID0gPDAgMCA0PjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKKwkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8Mj47CiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKIAogCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLWNvbW1vbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZXZtLWNvbW1vbi5kdHNpCmluZGV4IGM4NzQ3YzcuLjEyN2YzZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWV2bS1jb21tb24uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1ldm0tY29tbW9uLmR0c2kKQEAgLTIsNiArMiw3IEBACiAgKiBDb21tb24gc3VwcG9ydCBmb3Igb21hcDMgRVZNIGJvYXJkcwogICovCiAKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgogI2luY2x1ZGUgIm9tYXAtZ3BtYy1zbXNjOTExeC5kdHNpIgogCiAvIHsKQEAgLTExMSw2ICsxMTIsMjYgQEAKIAl0aSx1c2UtbGVkczsKIH07CiAKKyZ0d2xfa2V5cGFkIHsKKwlsaW51eCxrZXltYXAgPSA8CisJCQlNQVRSSVhfS0VZKDIsIDIsIEtFWV8xKQorCQkJTUFUUklYX0tFWSgxLCAxLCBLRVlfMikKKwkJCU1BVFJJWF9LRVkoMCwgMCwgS0VZXzMpCisJCQlNQVRSSVhfS0VZKDMsIDIsIEtFWV80KQorCQkJTUFUUklYX0tFWSgyLCAxLCBLRVlfNSkKKwkJCU1BVFJJWF9LRVkoMSwgMCwgS0VZXzYpCisJCQlNQVRSSVhfS0VZKDEsIDMsIEtFWV83KQorCQkJTUFUUklYX0tFWSgzLCAxLCBLRVlfOCkKKwkJCU1BVFJJWF9LRVkoMiwgMCwgS0VZXzkpCisJCQlNQVRSSVhfS0VZKDIsIDMsIEtFWV9LUEFTVEVSSVNLKQorCQkJTUFUUklYX0tFWSgwLCAyLCBLRVlfMCkKKwkJCU1BVFJJWF9LRVkoMywgMCwgS0VZX0tQRE9UKQorCQkJLyogczQgbm90IHdpcmVkICovCisJCQlNQVRSSVhfS0VZKDEsIDIsIEtFWV9CQUNLU1BBQ0UpCisJCQlNQVRSSVhfS0VZKDAsIDEsIEtFWV9FTlRFUikKKwkJCT47Cit9OworCiAmdXNiX290Z19ocyB7CiAJaW50ZXJmYWNlLXR5cGUgPSA8MD47CiAJdXNiLXBoeSA9IDwmdXNiMl9waHk+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZ3RhMDQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWd0YTA0LmR0c2kKaW5kZXggZmQzNGY5MS4uNjU1ZDZlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtZ3RhMDQuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1ndGEwNC5kdHNpCkBAIC0xMDQsNjcgKzEwNCw2NyBAQAogCiAJdWFydDFfcGluczogcGlubXV4X3VhcnQxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxNTIgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQxX3J4LnVhcnQxX3J4ICovCi0JCQkweDE0YyAoUElOX09VVFBVVCB8TVVYX01PREUwKQkJLyogdWFydDFfdHgudWFydDFfdHggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE4MiwgUElOX0lOUFVUIHwgTVVYX01PREUwKQkJLyogdWFydDFfcngudWFydDFfcnggKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3YywgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQxX3R4LnVhcnQxX3R4ICovCiAJCT47CiAJfTsKIAogCXVhcnQyX3BpbnM6IHBpbm11eF91YXJ0Ml9waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCTB4MTRhIChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0Ml9yeC51YXJ0Ml9yeCAqLwotCQkJMHgxNDggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0Ml90eC51YXJ0Ml90eCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTdhLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0Ml9yeC51YXJ0Ml9yeCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTc4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkJLyogdWFydDJfdHgudWFydDJfdHggKi8KIAkJPjsKIAl9OwogCiAJdWFydDNfcGluczogcGlubXV4X3VhcnQzX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxNmUgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQzX3J4LnVhcnQzX3J4ICovCi0JCQkweDE3MCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQzX3R4LnVhcnQzX3R4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxOWUsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQzX3J4LnVhcnQzX3J4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxYTAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0M190eC51YXJ0M190eCAqLwogCQk+OwogCX07CiAKIAltbWMxX3BpbnM6IHBpbm11eF9tbWMxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxMTQgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9jbGsuc2RtbWMxX2NsayAqLwotCQkJMHgxMTYgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9jbWQuc2RtbWMxX2NtZCAqLwotCQkJMHgxMTggKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIAkvKiBzZG1tYzFfZGF0MC5zZG1tYzFfZGF0MCAqLwotCQkJMHgxMWEgKFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCS8qIHNkbW1jMV9kYXQxLnNkbW1jMV9kYXQxICovCi0JCQkweDExYyAoUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJLyogc2RtbWMxX2RhdDIuc2RtbWMxX2RhdDIgKi8KLQkJCTB4MTFlIChQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkvKiBzZG1tYzFfZGF0My5zZG1tYzFfZGF0MyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTQ0LCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkJLyogc2RtbWMxX2Nsay5zZG1tYzFfY2xrICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNDYsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCQkvKiBzZG1tYzFfY21kLnNkbW1jMV9jbWQgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE0OCwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJCS8qIHNkbW1jMV9kYXQwLnNkbW1jMV9kYXQwICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNGEsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApCQkvKiBzZG1tYzFfZGF0MS5zZG1tYzFfZGF0MSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTRjLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREUwKQkJLyogc2RtbWMxX2RhdDIuc2RtbWMxX2RhdDIgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE0ZSwgUElOX0lOUFVUX1BVTExVUCB8IE1VWF9NT0RFMCkJCS8qIHNkbW1jMV9kYXQzLnNkbW1jMV9kYXQzICovCiAJCT47CiAJfTsKIAogCWRzc19kcGlfcGluczogcGlubXV4X2Rzc19kcGlfcGlucyB7CiAgICAgICAgICAgICAgICBwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotICAgICAgICAgICAgICAgICAgICAgICAweDBhNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfcGNsay5kc3NfcGNsayAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBhNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfaHN5bmMuZHNzX2hzeW5jICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGE4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc192c3luYy5kc3NfdnN5bmMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYWEgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2FjYmlhcy5kc3NfYWNiaWFzICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGFjIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMC5kc3NfZGF0YTAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYWUgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExLmRzc19kYXRhMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBiMCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIuZHNzX2RhdGEyICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGIyIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMy5kc3NfZGF0YTMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYjQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE0LmRzc19kYXRhNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBiNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTUuZHNzX2RhdGE1ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGI4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNi5kc3NfZGF0YTYgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYmEgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE3LmRzc19kYXRhNyAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBiYyAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTguZHNzX2RhdGE4ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGJlIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhOS5kc3NfZGF0YTkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYzAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMC5kc3NfZGF0YTEwICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGMyIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTEuZHNzX2RhdGExMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBjNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTEyLmRzc19kYXRhMTIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwYzYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMy5kc3NfZGF0YTEzICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGM4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTQuZHNzX2RhdGExNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBjYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE1LmRzc19kYXRhMTUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwY2MgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNi5kc3NfZGF0YTE2ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGNlIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTcuZHNzX2RhdGExNyAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBkMCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE4LmRzc19kYXRhMTggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwZDIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExOS5kc3NfZGF0YTE5ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGQ0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjAuZHNzX2RhdGEyMCAqLwotICAgICAgICAgICAgICAgICAgICAgICAweDBkNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIxLmRzc19kYXRhMjEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgMHgwZDggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMi5kc3NfZGF0YTIyICovCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MGRhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjMuZHNzX2RhdGEyMyAqLwotICAgICAgICAgICAgICAgPjsKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkNCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfcGNsay5kc3NfcGNsayAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGQ2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19oc3luYy5kc3NfaHN5bmMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBkOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfdnN5bmMuZHNzX3ZzeW5jICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZGEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2FjYmlhcy5kc3NfYWNiaWFzICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZGMsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEwLmRzc19kYXRhMCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGRlLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMS5kc3NfZGF0YTEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIuZHNzX2RhdGEyICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZTIsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEzLmRzc19kYXRhMyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGU0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNC5kc3NfZGF0YTQgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTUuZHNzX2RhdGE1ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZTgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE2LmRzc19kYXRhNiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGVhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhNy5kc3NfZGF0YTcgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBlYywgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTguZHNzX2RhdGE4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwZWUsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE5LmRzc19kYXRhOSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGYwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTAuZHNzX2RhdGExMCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGYyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTEuZHNzX2RhdGExMSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGY0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTIuZHNzX2RhdGExMiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGY2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTMuZHNzX2RhdGExMyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGY4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTQuZHNzX2RhdGExNCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGZhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTUuZHNzX2RhdGExNSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGZjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTYuZHNzX2RhdGExNiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGZlLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTcuZHNzX2RhdGExNyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTAwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTguZHNzX2RhdGExOCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTAyLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTkuZHNzX2RhdGExOSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTA0LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjAuZHNzX2RhdGEyMCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTA2LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjEuZHNzX2RhdGEyMSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTA4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjIuZHNzX2RhdGEyMiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTBhLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjMuZHNzX2RhdGEyMyAqLworCQk+OwogICAgICAgIH07CiB9OwogCkBAIC0zOTcsMTAgKzM5NywxMCBAQAogfTsKIAogJmdwbWMgewotCXJhbmdlcyA9IDwwIDAgMHgzMDAwMDAwMCAweDA0PjsgLyogQ1MwOiBOQU5EICovCisJcmFuZ2VzID0gPDAgMCAweDMwMDAwMDAwIDB4MTAwMDAwMD47IC8qIENTMDogMTZNQiBmb3IgTkFORCAqLwogCiAJbmFuZEAwLDAgewotCQlyZWcgPSA8MCAwIDA+OyAvKiBDUzAsIG9mZnNldCAwICovCisJCXJlZyA9IDwwIDAgND47IC8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47CiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcC5kdHNpCmluZGV4IGUyZDE2M2IuLjhhNjNhZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwLmR0c2kKQEAgLTMxLDE4ICszMSw2IEBACiAJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJfTsKIAotCWxiZWUxdXNqeWNfdm1tYzogbGJlZTF1c2p5Y192bW1jIHsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZsYmVlMXVzanljX3BpbnM+OwotCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7Ci0JCXJlZ3VsYXRvci1uYW1lID0gInJlZ3VsYXRvci1sYmVlMXVzanljIjsKLQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0JCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OwotCQlncGlvID0gPCZncGlvNSAxMCBHUElPX0FDVElWRV9ISUdIPjsJLyogZ3Bpb18xMzggV0lGSV9QRE4gKi8KLQkJc3RhcnR1cC1kZWxheS11cyA9IDwxMDAwMD47Ci0JCWVuYWJsZS1hY3RpdmUtaGlnaDsKLQkJdmluLXN1cHBseSA9IDwmdmRkMzM+OwotCX07CiB9OwogCiAmb21hcDNfcG14X2NvcmUgewpAQCAtNTMsMTMgKzQxLDYgQEAKIAkJPjsKIAl9OwogCi0JdWFydDJfcGluczogcGlubXV4X3VhcnQyX3BpbnMgewotCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxNGEgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQyX3J4LnVhcnQyX3J4ICovCi0JCQkweDE0OCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJCS8qIHVhcnQyX3R4LnVhcnQyX3R4ICovCi0JCT47Ci0JfTsKLQogCXVhcnQzX3BpbnM6IHBpbm11eF91YXJ0M19waW5zIHsKIAkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKIAkJCTB4MTZlIChQSU5fSU5QVVQgfCBNVVhfTU9ERTApCQkvKiB1YXJ0M19yeC51YXJ0M19yeCAqLwpAQCAtNjcsMTUgKzQ4LDYgQEAKIAkJPjsKIAl9OwogCi0JLyogV2lGaS9CVCBjb21ibyAqLwotCWxiZWUxdXNqeWNfcGluczogcGlubXV4X2xiZWUxdXNqeWNfcGlucyB7Ci0JCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQkweDEzNiAoUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDUuZ3Bpb18xMzcgKi8KLQkJCTB4MTM4IChQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0Ni5ncGlvXzEzOCAqLwotCQkJMHgxM2EgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ3LmdwaW9fMTM5ICovCi0JCT47Ci0JfTsKLQogCW1jYnNwMl9waW5zOiBwaW5tdXhfbWNic3AyX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAogCQkJMHgxMGMgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIG1jYnNwMl9mc3gubWNic3AyX2ZzeCAqLwpAQCAtMTIwLDEzICs5Miw2IEBACiAJCT47CiAJfTsKIAotCWkyYzJfcGluczogcGlubXV4X2kyYzJfcGlucyB7Ci0JCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQkweDE4ZSAoUElOX0lOUFVUIHwgTVVYX01PREUwKSAgIC8qIGkyYzJfc2NsLmkyYzJfc2NsICovCi0JCQkweDE5MCAoUElOX0lOUFVUIHwgTVVYX01PREUwKSAgIC8qIGkyYzJfc2RhLmkyYzJfc2RhICovCi0JCT47Ci0JfTsKLQogCWkyYzNfcGluczogcGlubXV4X2kyYzNfcGlucyB7CiAJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CiAJCQkweDE5MiAoUElOX0lOUFVUIHwgTVVYX01PREUwKSAgIC8qIGkyYzNfc2NsLmkyYzNfc2NsICovCkBAIC0xMzUsNiArMTAwLDU1IEBACiAJfTsKIH07CiAKKyZncG1jIHsKKwluYW5kQDAsMCB7CisJCWxpbnV4LG10ZC1uYW1lPSAibWljcm9uLG10MjljNGc5Nm1heiI7CisJCXJlZyA9IDwwIDAgND47CS8qIENTMCwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLworCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47CisJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDI+OworCQl0aSxuYW5kLWVjYy1vcHQgPSAiYmNoOCI7CisKKwkJZ3BtYyxzeW5jLWNsay1wcyA9IDwwPjsKKwkJZ3BtYyxjcy1vbi1ucyA9IDwwPjsKKwkJZ3BtYyxjcy1yZC1vZmYtbnMgPSA8NDQ+OworCQlncG1jLGNzLXdyLW9mZi1ucyA9IDw0ND47CisJCWdwbWMsYWR2LW9uLW5zID0gPDY+OworCQlncG1jLGFkdi1yZC1vZmYtbnMgPSA8MzQ+OworCQlncG1jLGFkdi13ci1vZmYtbnMgPSA8NDQ+OworCQlncG1jLHdlLW9mZi1ucyA9IDw0MD47CisJCWdwbWMsb2Utb2ZmLW5zID0gPDU0PjsKKwkJZ3BtYyxhY2Nlc3MtbnMgPSA8NjQ+OworCQlncG1jLHJkLWN5Y2xlLW5zID0gPDgyPjsKKwkJZ3BtYyx3ci1jeWNsZS1ucyA9IDw4Mj47CisJCWdwbWMsd3ItYWNjZXNzLW5zID0gPDQwPjsKKwkJZ3BtYyx3ci1kYXRhLW11eC1idXMtbnMgPSA8MD47CisKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXBhcnRpdGlvbkAwIHsKKwkJCWxhYmVsID0gIlNQTCI7CisJCQlyZWcgPSA8MCAweDEwMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA4MDAwMCB7CisJCQlsYWJlbCA9ICJVLUJvb3QiOworCQkJcmVnID0gPDB4MTAwMDAwIDB4MTgwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDFjMDAwMCB7CisJCQlsYWJlbCA9ICJFbnZpcm9ubWVudCI7CisJCQlyZWcgPSA8MHgyODAwMDAgMHgxMDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMjgwMDAwIHsKKwkJCWxhYmVsID0gIktlcm5lbCI7CisJCQlyZWcgPSA8MHgzODAwMDAgMHgzMDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANzgwMDAwIHsKKwkJCWxhYmVsID0gIkZpbGVzeXN0ZW0iOworCQkJcmVnID0gPDB4NjgwMDAwIDB4MWY5ODAwMDA+OworCQl9OworCX07Cit9OworCiAmaTJjMSB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JmkyYzFfcGlucz47CkBAIC0xNTYsMTIgKzE3MCw2IEBACiAjaW5jbHVkZSAidHdsNDAzMC5kdHNpIgogI2luY2x1ZGUgInR3bDQwMzBfb21hcDMuZHRzaSIKIAotJmkyYzIgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZpMmMyX3BpbnM+OwotCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwotfTsKLQogJmkyYzMgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZpMmMzX3BpbnM+OwpAQCAtMTgxLDE0ICsxODksNiBAQAogICAgICAgYnVzLXdpZHRoID0gPDQ+OwogfTsKIAotJm1tYzIgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZtbWMyX3BpbnM+OwotCXZtbWMtc3VwcGx5ID0gPCZsYmVlMXVzanljX3ZtbWM+OwotCWJ1cy13aWR0aCA9IDw0PjsKLQlub24tcmVtb3ZhYmxlOwotfTsKLQogJm1tYzMgewogCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiB9OwpAQCAtMTk4LDExICsxOTgsNiBAQAogICAgICAgIHBpbmN0cmwtMCA9IDwmdWFydDFfcGlucz47CiB9OwogCi0mdWFydDIgewotICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0gICAgICAgcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKLX07Ci0KICZ1YXJ0MyB7CiAgICAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKICAgICAgICBwaW5jdHJsLTAgPSA8JnVhcnQzX3BpbnM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAtY29tbW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAyMC1jb21tb24uZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU4YzIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAtY29tbW9uLmR0c2kKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb21tb24gRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQdjIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDE0IEVucmljIEJhbGxldGJvIGkgU2VycmEgPGViYWxsZXRib0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib21hcDMtaWdlcC5kdHNpIgorI2luY2x1ZGUgIm9tYXAtZ3BtYy1zbXNjOTIyMS5kdHNpIgorCisvIHsKKworCWxlZHMgeworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmxlZHNfcGlucz47CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKworCQlib290IHsKKwkJCSBsYWJlbCA9ICJvbWFwMzpncmVlbjpib290IjsKKwkJCSBncGlvcyA9IDwmZ3BpbzEgMjYgR1BJT19BQ1RJVkVfSElHSD47CisJCQkgZGVmYXVsdC1zdGF0ZSA9ICJvbiI7CisJCX07CisKKwkJdXNlcjAgeworCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMCI7CisJCQkgZ3Bpb3MgPSA8JmdwaW8xIDI3IEdQSU9fQUNUSVZFX0hJR0g+OworCQkJIGRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJfTsKKworCQl1c2VyMSB7CisJCQkgbGFiZWwgPSAib21hcDM6cmVkOnVzZXIxIjsKKwkJCSBncGlvcyA9IDwmZ3BpbzEgMjggR1BJT19BQ1RJVkVfSElHSD47CisJCQkgZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQl9OworCisJCXVzZXIyIHsKKwkJCWxhYmVsID0gIm9tYXAzOmdyZWVuOnVzZXIxIjsKKwkJCWdwaW9zID0gPCZ0d2xfZ3BpbyAxOSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07CisKKwkvKiBIUyBVU0IgUG9ydCAxIFBvd2VyICovCisJaHN1c2IxX3Bvd2VyOiBoc3VzYjFfcG93ZXJfcmVnIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJoc3VzYjFfdmJ1cyI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJZ3BpbyA9IDwmdHdsX2dwaW8gMTggR1BJT19BQ1RJVkVfTE9XPjsJLyogR1BJTyBMRURBICovCisJCXN0YXJ0dXAtZGVsYXktdXMgPSA8NzAwMDA+OworCX07CisKKwkvKiBIUyBVU0IgSG9zdCBQSFkgb24gUE9SVCAxICovCisJaHN1c2IxX3BoeTogaHN1c2IxX3BoeSB7CisJCWNvbXBhdGlibGUgPSAidXNiLW5vcC14Y2VpdiI7CisJCXJlc2V0LWdwaW9zID0gPCZncGlvMSAyNCBHUElPX0FDVElWRV9MT1c+OyAvKiBncGlvXzI0ICovCisJCXZjYy1zdXBwbHkgPSA8JmhzdXNiMV9wb3dlcj47CisJfTsKKworCXRmcDQxMDogZW5jb2RlckAwIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSx0ZnA0MTAiOworCQlwb3dlcmRvd24tZ3Bpb3MgPSA8JmdwaW82IDEwIEdQSU9fQUNUSVZFX0xPVz47IC8qIGdwaW9fMTcwICovCisKKwkJcG9ydHMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisKKwkJCQl0ZnA0MTBfaW46IGVuZHBvaW50QDAgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmRwaV9vdXQ+OworCQkJCX07CisJCQl9OworCisJCQlwb3J0QDEgeworCQkJCXJlZyA9IDwxPjsKKworCQkJCXRmcDQxMF9vdXQ6IGVuZHBvaW50QDAgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmR2aV9jb25uZWN0b3JfaW4+OworCQkJCX07CisJCQl9OworCQl9OworCX07CisKKwlkdmkwOiBjb25uZWN0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAiZHZpLWNvbm5lY3RvciI7CisJCWxhYmVsID0gImR2aSI7CisKKwkJZGlnaXRhbDsKKworCQlkZGMtaTJjLWJ1cyA9IDwmaTJjMz47CisKKwkJcG9ydCB7CisJCQlkdmlfY29ubmVjdG9yX2luOiBlbmRwb2ludCB7CisJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfb3V0PjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZvbWFwM19wbXhfY29yZSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8CisJCSZ0ZnA0MTBfcGlucworCQkmZHNzX2RwaV9waW5zCisJPjsKKworCXRmcDQxMF9waW5zOiBwaW5tdXhfdGZwNDEwX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgxOTYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpICAgLyogaGRxX3Npby5ncGlvXzE3MCAqLworCQk+OworCX07CisKKwlkc3NfZHBpX3BpbnM6IHBpbm11eF9kc3NfZHBpX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJMHgwYTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX3BjbGsuZHNzX3BjbGsgKi8KKwkJCTB4MGE2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19oc3luYy5kc3NfaHN5bmMgKi8KKwkJCTB4MGE4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc192c3luYy5kc3NfdnN5bmMgKi8KKwkJCTB4MGFhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19hY2JpYXMuZHNzX2FjYmlhcyAqLworCQkJMHgwYWMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEwLmRzc19kYXRhMCAqLworCQkJMHgwYWUgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExLmRzc19kYXRhMSAqLworCQkJMHgwYjAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyLmRzc19kYXRhMiAqLworCQkJMHgwYjIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEzLmRzc19kYXRhMyAqLworCQkJMHgwYjQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE0LmRzc19kYXRhNCAqLworCQkJMHgwYjYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE1LmRzc19kYXRhNSAqLworCQkJMHgwYjggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE2LmRzc19kYXRhNiAqLworCQkJMHgwYmEgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE3LmRzc19kYXRhNyAqLworCQkJMHgwYmMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE4LmRzc19kYXRhOCAqLworCQkJMHgwYmUgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE5LmRzc19kYXRhOSAqLworCQkJMHgwYzAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMC5kc3NfZGF0YTEwICovCisJCQkweDBjMiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTExLmRzc19kYXRhMTEgKi8KKwkJCTB4MGM0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTIuZHNzX2RhdGExMiAqLworCQkJMHgwYzYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMy5kc3NfZGF0YTEzICovCisJCQkweDBjOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE0LmRzc19kYXRhMTQgKi8KKwkJCTB4MGNhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTUuZHNzX2RhdGExNSAqLworCQkJMHgwY2MgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNi5kc3NfZGF0YTE2ICovCisJCQkweDBjZSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE3LmRzc19kYXRhMTcgKi8KKwkJCTB4MGQwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTguZHNzX2RhdGExOCAqLworCQkJMHgwZDIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExOS5kc3NfZGF0YTE5ICovCisJCQkweDBkNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIwLmRzc19kYXRhMjAgKi8KKwkJCTB4MGQ2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjEuZHNzX2RhdGEyMSAqLworCQkJMHgwZDggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMi5kc3NfZGF0YTIyICovCisJCQkweDBkYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIzLmRzc19kYXRhMjMgKi8KKwkJPjsKKwl9OworCisJdWFydDJfcGluczogcGlubXV4X3VhcnQyX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTc0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHVhcnQyX2N0cy51YXJ0Ml9jdHMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogdWFydDJfcnRzIC51YXJ0Ml9ydHMqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTc4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiB1YXJ0Ml90eC51YXJ0Ml90eCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTdhLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHVhcnQyX3J4LnVhcnQyX3J4ICovCisJCT47CisJfTsKK307CisKKyZvbWFwM19wbXhfY29yZTIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPAorCQkmaHN1c2JiMV9waW5zCisJPjsKKworCWhzdXNiYjFfcGluczogcGlubXV4X2hzdXNiYjFfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZGEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTMpCQkvKiBldGtfY3RsLmhzdXNiMV9jbGsgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVkOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGV0a19jbGsuaHN1c2IxX3N0cCAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWVjLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kOC5oc3VzYjFfZGlyICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZWUsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q5LmhzdXNiMV9ueHQgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVkYywgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDAuaHN1c2IxX2RhdGEwICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZGUsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2QxLmhzdXNiMV9kYXRhMSAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWUwLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kMi5oc3VzYjFfZGF0YTIgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlMiwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDMuaHN1c2IxX2RhdGE3ICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTQsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q0LmhzdXNiMV9kYXRhNCAqLworCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWU2LCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kNS5oc3VzYjFfZGF0YTUgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlOCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDYuaHN1c2IxX2RhdGE2ICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZWEsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q3LmhzdXNiMV9kYXRhMyAqLworCQk+OworCX07CisKKwlsZWRzX3BpbnM6IHBpbm11eF9sZWRzX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWY0LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KSAvKiBldGtfZDEyLmdwaW9fMjYgKi8KKwkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVmNiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkgLyogZXRrX2QxMy5ncGlvXzI3ICovCisJCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZjgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpIC8qIGV0a19kMTQuZ3Bpb18yOCAqLworCQk+OworCX07Cit9OworCismaTJjMyB7CisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisKKwkvKgorCSAqIERpc3BsYXkgbW9uaXRvciBmZWF0dXJlcyBhcmUgYnVybnQgaW4gdGhlIEVFUFJPTQorCSAqIGFzIEVESUQgZGF0YS4KKwkgKi8KKwllZXByb21ANTAgeworCQljb21wYXRpYmxlID0gInRpLGVlcHJvbSI7CisJCXJlZyA9IDwweDUwPjsKKwl9OworfTsKKworJmdwbWMgeworCXJhbmdlcyA9IDwwIDAgMHgwMDAwMDAwMCAweDIwMDAwMDAwPiwKKwkJIDw1IDAgMHgyYzAwMDAwMCAweDAxMDAwMDAwPjsKKworCWV0aGVybmV0QGdwbWMgeworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnNtc2M5MjIxX3BpbnM+OworCQlyZWcgPSA8NSAwIDB4ZmY+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvNj47CisJCWludGVycnVwdHMgPSA8MTYgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwl9OworfTsKKworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47Cit9OworCismdXNiaHNob3N0IHsKKwlwb3J0MS1tb2RlID0gImVoY2ktcGh5IjsKK307CisKKyZ1c2Joc2VoY2kgeworCXBoeXMgPSA8JmhzdXNiMV9waHk+OworfTsKKworJnZwbGwyIHsKKwkvKiBOZWVkZWQgZm9yIERTUyAqLworCXJlZ3VsYXRvci1uYW1lID0gInZkZHNfZHNpIjsKK307CisKKyZkc3MgeworCXN0YXR1cyA9ICJvayI7CisKKwlwb3J0IHsKKwkJZHBpX291dDogZW5kcG9pbnQgeworCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfaW4+OworCQkJZGF0YS1saW5lcyA9IDwyND47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAyMC1yZXYtZi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAyMC1yZXYtZi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4YmQwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDIwLXJldi1mLmR0cwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQdjIgUmV2LiBGIChUSSBPTUFQIEFNL0RNMzd4KQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBKYXZpZXIgTWFydGluZXogQ2FuaWxsYXMgPGphdmllckBjb2xsYWJvcmEuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRW5yaWMgQmFsbGV0Ym8gaSBTZXJyYSA8ZWJhbGxldGJvQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJvbWFwMy1pZ2VwMDAyMC1jb21tb24uZHRzaSIKKworLyB7CisJbW9kZWwgPSAiSUdFUHYyIFJldi4gRiAoVEkgT01BUCBBTS9ETTM3eCkiOworCWNvbXBhdGlibGUgPSAiaXNlZSxvbWFwMy1pZ2VwMDAyMC1yZXYtZiIsICJ0aSxvbWFwMzZ4eCIsICJ0aSxvbWFwMyI7CisKKwkvKiBSZWd1bGF0b3IgdG8gdHJpZ2dlciB0aGUgV0xfRU4gc2lnbmFsIG9mIHRoZSBXaWZpIG1vZHVsZSAqLworCWxiZXA1Y2x3bWNfd2xlbjogcmVndWxhdG9yLWxiZXA1Y2x3bWMtd2xlbiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAicmVndWxhdG9yLWxiZXA1Y2x3bWMtd2xlbiI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BpbzUgMTEgR1BJT19BQ1RJVkVfSElHSD47CQkvKiBncGlvXzEzOSAtIFdMX0VOICovCisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwl9OworfTsKKworJm9tYXAzX3BteF9jb3JlIHsKKwlsYmVwNWNsd21jX3BpbnM6IHBpbm11eF9sYmVwNWNsd21jX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMWQ0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTQpCS8qIG1jc3BpMV9jczMuZ3Bpb18xNzcgLSBXX0lSUSAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTY2LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0NS5ncGlvXzEzNyAtIEJUX0VOICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNmEsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ3LmdwaW9fMTM5IC0gV0xfRU4gKi8KKwkJPjsKKwl9OworfTsKKworJm1tYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMyX3BpbnMgJmxiZXA1Y2x3bWNfcGlucz47CisJdm1tYy1zdXBwbHkgPSA8JmxiZXA1Y2x3bWNfd2xlbj47CisJYnVzLXdpZHRoID0gPDQ+OworCW5vbi1yZW1vdmFibGU7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMjAuZHRzCmluZGV4IGIyMmNhYWEuLmZlYTdmN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDIwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAyMC5kdHMKQEAgLTEsNSArMSw1IEBACiAvKgotICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQdjIgUmV2LiAoVEkgT01BUCBBTS9ETTM3eCkKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgSUdFUHYyIFJldi4gQyAoVEkgT01BUCBBTS9ETTM3eCkKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAY29sbGFib3JhLmNvLnVrPgogICogQ29weXJpZ2h0IChDKSAyMDEyIEVucmljIEJhbGxldGJvIGkgU2VycmEgPGViYWxsZXRib0BnbWFpbC5jb20+CkBAIC05LDI3MiArOSw1OSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgIm9tYXAzLWlnZXAuZHRzaSIKLSNpbmNsdWRlICJvbWFwLWdwbWMtc21zYzkyMjEuZHRzaSIKKyNpbmNsdWRlICJvbWFwMy1pZ2VwMDAyMC1jb21tb24uZHRzaSIKIAogLyB7Ci0JbW9kZWwgPSAiSUdFUHYyIChUSSBPTUFQIEFNL0RNMzd4KSI7CisJbW9kZWwgPSAiSUdFUHYyIFJldi4gQyAoVEkgT01BUCBBTS9ETTM3eCkiOwogCWNvbXBhdGlibGUgPSAiaXNlZSxvbWFwMy1pZ2VwMDAyMCIsICJ0aSxvbWFwMzZ4eCIsICJ0aSxvbWFwMyI7CiAKLQlsZWRzIHsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZsZWRzX3BpbnM+OwotCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7Ci0KLQkJYm9vdCB7Ci0JCQkgbGFiZWwgPSAib21hcDM6Z3JlZW46Ym9vdCI7Ci0JCQkgZ3Bpb3MgPSA8JmdwaW8xIDI2IEdQSU9fQUNUSVZFX0hJR0g+OwotCQkJIGRlZmF1bHQtc3RhdGUgPSAib24iOwotCQl9OwotCi0JCXVzZXIwIHsKLQkJCSBsYWJlbCA9ICJvbWFwMzpyZWQ6dXNlcjAiOwotCQkJIGdwaW9zID0gPCZncGlvMSAyNyBHUElPX0FDVElWRV9ISUdIPjsKLQkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7Ci0JCX07Ci0KLQkJdXNlcjEgewotCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMSI7Ci0JCQkgZ3Bpb3MgPSA8JmdwaW8xIDI4IEdQSU9fQUNUSVZFX0hJR0g+OwotCQkJIGRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKLQkJfTsKLQotCQl1c2VyMiB7Ci0JCQlsYWJlbCA9ICJvbWFwMzpncmVlbjp1c2VyMSI7Ci0JCQlncGlvcyA9IDwmdHdsX2dwaW8gMTkgR1BJT19BQ1RJVkVfTE9XPjsKLQkJfTsKKwkvKiBSZWd1bGF0b3IgdG8gdHJpZ2dlciB0aGUgV0lGSV9QRE4gc2lnbmFsIG9mIHRoZSBXaWZpIG1vZHVsZSAqLworCWxiZWUxdXNqeWNfcGRuOiBsYmVlMXVzanljX3BkbiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAicmVndWxhdG9yLWxiZWUxdXNqeWMtcGRuIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlncGlvID0gPCZncGlvNSAxMCBHUElPX0FDVElWRV9ISUdIPjsJLyogZ3Bpb18xMzggLSBXSUZJX1BETiAqLworCQlzdGFydHVwLWRlbGF5LXVzID0gPDEwMDAwPjsKKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOwogCX07CiAKLSAgICAgICAvKiBIUyBVU0IgUG9ydCAxIFBvd2VyICovCi0gICAgICAgaHN1c2IxX3Bvd2VyOiBoc3VzYjFfcG93ZXJfcmVnIHsKLSAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKLSAgICAgICAgICAgICAgIHJlZ3VsYXRvci1uYW1lID0gImhzdXNiMV92YnVzIjsKLSAgICAgICAgICAgICAgIHJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OwotICAgICAgICAgICAgICAgcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47Ci0gICAgICAgICAgICAgICBncGlvID0gPCZ0d2xfZ3BpbyAxOCBHUElPX0FDVElWRV9MT1c+OwkvKiBHUElPIExFREEgKi8KLSAgICAgICAgICAgICAgIHN0YXJ0dXAtZGVsYXktdXMgPSA8NzAwMDA+OwotICAgICAgIH07Ci0KLQkvKiBIUyBVU0IgSG9zdCBQSFkgb24gUE9SVCAxICovCi0JaHN1c2IxX3BoeTogaHN1c2IxX3BoeSB7Ci0JCWNvbXBhdGlibGUgPSAidXNiLW5vcC14Y2VpdiI7Ci0JCXJlc2V0LWdwaW9zID0gPCZncGlvMSAyNCBHUElPX0FDVElWRV9MT1c+OyAvKiBncGlvXzI0ICovCi0JCXZjYy1zdXBwbHkgPSA8JmhzdXNiMV9wb3dlcj47Ci0JfTsKLQotCXRmcDQxMDogZW5jb2RlckAwIHsKLQkJY29tcGF0aWJsZSA9ICJ0aSx0ZnA0MTAiOwotCQlwb3dlcmRvd24tZ3Bpb3MgPSA8JmdwaW82IDEwIEdQSU9fQUNUSVZFX0xPVz47IC8qIGdwaW9fMTcwICovCi0KLQkJcG9ydHMgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQkJcG9ydEAwIHsKLQkJCQlyZWcgPSA8MD47Ci0KLQkJCQl0ZnA0MTBfaW46IGVuZHBvaW50QDAgewotCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmRwaV9vdXQ+OwotCQkJCX07Ci0JCQl9OwotCi0JCQlwb3J0QDEgewotCQkJCXJlZyA9IDwxPjsKLQotCQkJCXRmcDQxMF9vdXQ6IGVuZHBvaW50QDAgewotCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmR2aV9jb25uZWN0b3JfaW4+OwotCQkJCX07Ci0JCQl9OwotCQl9OwotCX07Ci0KLQlkdmkwOiBjb25uZWN0b3JAMCB7Ci0JCWNvbXBhdGlibGUgPSAiZHZpLWNvbm5lY3RvciI7Ci0JCWxhYmVsID0gImR2aSI7Ci0KLQkJZGlnaXRhbDsKLQotCQlkZGMtaTJjLWJ1cyA9IDwmaTJjMz47Ci0KLQkJcG9ydCB7Ci0JCQlkdmlfY29ubmVjdG9yX2luOiBlbmRwb2ludCB7Ci0JCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfb3V0PjsKLQkJCX07Ci0JCX07CisJLyogUmVndWxhdG9yIHRvIHRyaWdnZXIgdGhlIFJFU0VUX05fVyBzaWduYWwgb2YgdGhlIFdpZmkgbW9kdWxlICovCisJbGJlZTF1c2p5Y19yZXNldF9uX3c6IGxiZWUxdXNqeWNfcmVzZXRfbl93IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJyZWd1bGF0b3ItbGJlZTF1c2p5Yy1yZXNldC1uLXciOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCWdwaW8gPSA8JmdwaW81IDExIEdQSU9fQUNUSVZFX0hJR0g+OwkvKiBncGlvXzEzOSAtIFJFU0VUX05fVyAqLworCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJfTsKIH07CiAKICZvbWFwM19wbXhfY29yZSB7CisJbGJlZTF1c2p5Y19waW5zOiBwaW5tdXhfbGJlZTF1c2p5Y19waW5zIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDUuZ3Bpb18xMzcgLSBSRVNFVF9OX1cgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2OCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDYuZ3Bpb18xMzggLSBXSUZJX1BETiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTZhLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0Ny5ncGlvXzEzOSAtIFJTVF9OX0IgKi8KKwkJPjsKKwl9OworCisJdWFydDJfcGluczogcGlubXV4X3VhcnQyX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTc0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHVhcnQyX2N0cy51YXJ0Ml9jdHMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE3NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkJLyogdWFydDJfcnRzIC51YXJ0Ml9ydHMqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTc4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKQkvKiB1YXJ0Ml90eC51YXJ0Ml90eCAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTdhLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApCS8qIHVhcnQyX3J4LnVhcnQyX3J4ICovCisJCT47CisJfTsKK307CisKKy8qIE9uIGJvYXJkIFdpZmkgbW9kdWxlICovCismbW1jMiB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8Ci0JCSZ0ZnA0MTBfcGlucwotCQkmZHNzX2RwaV9waW5zCi0JPjsKLQotCXRmcDQxMF9waW5zOiBwaW5tdXhfdGZwNDEwX3BpbnMgewotCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgxOTYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpICAgLyogaGRxX3Npby5ncGlvXzE3MCAqLwotCQk+OwotCX07Ci0KLQlkc3NfZHBpX3BpbnM6IHBpbm11eF9kc3NfZHBpX3BpbnMgewotCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAotCQkJMHgwYTQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX3BjbGsuZHNzX3BjbGsgKi8KLQkJCTB4MGE2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19oc3luYy5kc3NfaHN5bmMgKi8KLQkJCTB4MGE4IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc192c3luYy5kc3NfdnN5bmMgKi8KLQkJCTB4MGFhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19hY2JpYXMuZHNzX2FjYmlhcyAqLwotCQkJMHgwYWMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEwLmRzc19kYXRhMCAqLwotCQkJMHgwYWUgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExLmRzc19kYXRhMSAqLwotCQkJMHgwYjAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyLmRzc19kYXRhMiAqLwotCQkJMHgwYjIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEzLmRzc19kYXRhMyAqLwotCQkJMHgwYjQgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE0LmRzc19kYXRhNCAqLwotCQkJMHgwYjYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE1LmRzc19kYXRhNSAqLwotCQkJMHgwYjggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE2LmRzc19kYXRhNiAqLwotCQkJMHgwYmEgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE3LmRzc19kYXRhNyAqLwotCQkJMHgwYmMgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE4LmRzc19kYXRhOCAqLwotCQkJMHgwYmUgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGE5LmRzc19kYXRhOSAqLwotCQkJMHgwYzAgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMC5kc3NfZGF0YTEwICovCi0JCQkweDBjMiAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTExLmRzc19kYXRhMTEgKi8KLQkJCTB4MGM0IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTIuZHNzX2RhdGExMiAqLwotCQkJMHgwYzYgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExMy5kc3NfZGF0YTEzICovCi0JCQkweDBjOCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE0LmRzc19kYXRhMTQgKi8KLQkJCTB4MGNhIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTUuZHNzX2RhdGExNSAqLwotCQkJMHgwY2MgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExNi5kc3NfZGF0YTE2ICovCi0JCQkweDBjZSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTE3LmRzc19kYXRhMTcgKi8KLQkJCTB4MGQwIChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMTguZHNzX2RhdGExOCAqLwotCQkJMHgwZDIgKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGExOS5kc3NfZGF0YTE5ICovCi0JCQkweDBkNCAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIwLmRzc19kYXRhMjAgKi8KLQkJCTB4MGQ2IChQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgIC8qIGRzc19kYXRhMjEuZHNzX2RhdGEyMSAqLwotCQkJMHgwZDggKFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgLyogZHNzX2RhdGEyMi5kc3NfZGF0YTIyICovCi0JCQkweDBkYSAoUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAvKiBkc3NfZGF0YTIzLmRzc19kYXRhMjMgKi8KLQkJPjsKLQl9OwotfTsKLQotJm9tYXAzX3BteF9jb3JlMiB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8Ci0JCSZoc3VzYmIxX3BpbnMKLQk+OwotCi0JaHN1c2JiMV9waW5zOiBwaW5tdXhfaHN1c2JiMV9waW5zIHsKLQkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVkYSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJCS8qIGV0a19jdGwuaHN1c2IxX2NsayAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWQ4LCBQSU5fT1VUUFVUIHwgTVVYX01PREUzKQkJLyogZXRrX2Nsay5oc3VzYjFfc3RwICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZWMsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q4LmhzdXNiMV9kaXIgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlZSwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDkuaHN1c2IxX254dCAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWRjLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kMC5oc3VzYjFfZGF0YTAgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVkZSwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDEuaHN1c2IxX2RhdGExICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTAsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2QyLmhzdXNiMV9kYXRhMiAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWUyLCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kMy5oc3VzYjFfZGF0YTcgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlNCwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDQuaHN1c2IxX2RhdGE0ICovCi0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTYsIFBJTl9JTlBVVF9QVUxMRE9XTiB8IE1VWF9NT0RFMykJLyogZXRrX2Q1LmhzdXNiMV9kYXRhNSAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWU4LCBQSU5fSU5QVVRfUFVMTERPV04gfCBNVVhfTU9ERTMpCS8qIGV0a19kNi5oc3VzYjFfZGF0YTYgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVlYSwgUElOX0lOUFVUX1BVTExET1dOIHwgTVVYX01PREUzKQkvKiBldGtfZDcuaHN1c2IxX2RhdGEzICovCi0JCT47Ci0JfTsKLQotCWxlZHNfcGluczogcGlubXV4X2xlZHNfcGlucyB7Ci0JCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZjQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpIC8qIGV0a19kMTIuZ3Bpb18yNiAqLwotCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWY2LCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KSAvKiBldGtfZDEzLmdwaW9fMjcgKi8KLQkJCU9NQVAzNjMwX0NPUkUyX0lPUEFEKDB4MjVmOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkgLyogZXRrX2QxNC5ncGlvXzI4ICovCi0JCT47Ci0JfTsKLX07Ci0KLSZpMmMzIHsKLQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLQotCS8qCi0JICogRGlzcGxheSBtb25pdG9yIGZlYXR1cmVzIGFyZSBidXJudCBpbiB0aGUgRUVQUk9NCi0JICogYXMgRURJRCBkYXRhLgotCSAqLwotCWVlcHJvbUA1MCB7Ci0JCWNvbXBhdGlibGUgPSAidGksZWVwcm9tIjsKLQkJcmVnID0gPDB4NTA+OwotCX07Ci19OwotCi0mZ3BtYyB7Ci0JcmFuZ2VzID0gPDAgMCAweDAwMDAwMDAwIDB4MjAwMDAwMDA+LAotCQkgPDUgMCAweDJjMDAwMDAwIDB4MDEwMDAwMDA+OwotCi0JbmFuZEAwLDAgewotCQlsaW51eCxtdGQtbmFtZT0gIm1pY3JvbixtdDI5YzRnOTZtYXoiOwotCQlyZWcgPSA8MCAwIDA+OwotCQluYW5kLWJ1cy13aWR0aCA9IDwxNj47Ci0JCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKLQotCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OwotCQlncG1jLGNzLW9uLW5zID0gPDA+OwotCQlncG1jLGNzLXJkLW9mZi1ucyA9IDw0ND47Ci0JCWdwbWMsY3Mtd3Itb2ZmLW5zID0gPDQ0PjsKLQkJZ3BtYyxhZHYtb24tbnMgPSA8Nj47Ci0JCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDwzND47Ci0JCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw0ND47Ci0JCWdwbWMsd2Utb2ZmLW5zID0gPDQwPjsKLQkJZ3BtYyxvZS1vZmYtbnMgPSA8NTQ+OwotCQlncG1jLGFjY2Vzcy1ucyA9IDw2ND47Ci0JCWdwbWMscmQtY3ljbGUtbnMgPSA8ODI+OwotCQlncG1jLHdyLWN5Y2xlLW5zID0gPDgyPjsKLQkJZ3BtYyx3ci1hY2Nlc3MtbnMgPSA8NDA+OwotCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDwwPjsKLQotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0KLQkJcGFydGl0aW9uQDAgewotCQkJbGFiZWwgPSAiU1BMIjsKLQkJCXJlZyA9IDwwIDB4MTAwMDAwPjsKLQkJfTsKLQkJcGFydGl0aW9uQDgwMDAwIHsKLQkJCWxhYmVsID0gIlUtQm9vdCI7Ci0JCQlyZWcgPSA8MHgxMDAwMDAgMHgxODAwMDA+OwotCQl9OwotCQlwYXJ0aXRpb25AMWMwMDAwIHsKLQkJCWxhYmVsID0gIkVudmlyb25tZW50IjsKLQkJCXJlZyA9IDwweDI4MDAwMCAweDEwMDAwMD47Ci0JCX07Ci0JCXBhcnRpdGlvbkAyODAwMDAgewotCQkJbGFiZWwgPSAiS2VybmVsIjsKLQkJCXJlZyA9IDwweDM4MDAwMCAweDMwMDAwMD47Ci0JCX07Ci0JCXBhcnRpdGlvbkA3ODAwMDAgewotCQkJbGFiZWwgPSAiRmlsZXN5c3RlbSI7Ci0JCQlyZWcgPSA8MHg2ODAwMDAgMHgxZjk4MDAwMD47Ci0JCX07Ci0JfTsKLQotCWV0aGVybmV0QGdwbWMgewotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JnNtc2M5MjIxX3BpbnM+OwotCQlyZWcgPSA8NSAwIDB4ZmY+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvNj47Ci0JCWludGVycnVwdHMgPSA8MTYgSVJRX1RZUEVfTEVWRUxfTE9XPjsKLQl9OwotfTsKLQotJnVzYmhzaG9zdCB7Ci0JcG9ydDEtbW9kZSA9ICJlaGNpLXBoeSI7Ci19OwotCi0mdXNiaHNlaGNpIHsKLQlwaHlzID0gPCZoc3VzYjFfcGh5PjsKLX07Ci0KLSZ2cGxsMiB7Ci0gICAgICAgIC8qIE5lZWRlZCBmb3IgRFNTICovCi0gICAgICAgIHJlZ3VsYXRvci1uYW1lID0gInZkZHNfZHNpIjsKLX07Ci0KLSZkc3MgewotCXN0YXR1cyA9ICJvayI7Ci0KLQlwb3J0IHsKLQkJZHBpX291dDogZW5kcG9pbnQgewotCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfaW4+OwotCQkJZGF0YS1saW5lcyA9IDwyND47Ci0JCX07Ci0JfTsKKwlwaW5jdHJsLTAgPSA8Jm1tYzJfcGlucyAmbGJlZTF1c2p5Y19waW5zPjsKKwl2bW1jLXN1cHBseSA9IDwmbGJlZTF1c2p5Y19wZG4+OworCXZtbWNfYXV4LXN1cHBseSA9IDwmbGJlZTF1c2p5Y19yZXNldF9uX3c+OworCWJ1cy13aWR0aCA9IDw0PjsKKwlub24tcmVtb3ZhYmxlOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDMwLWNvbW1vbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMzAtY29tbW9uLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNiMTUyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDMwLWNvbW1vbi5kdHNpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb21tb24gRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQIENPTSBNT0RVTEUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDE0IEVucmljIEJhbGxldGJvIGkgU2VycmEgPGViYWxsZXRib0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib21hcDMtaWdlcC5kdHNpIgorCisvIHsKKwlsZWRzOiBncGlvX2xlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJdXNlcjAgeworCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMCI7CisJCQkgZ3Bpb3MgPSA8JnR3bF9ncGlvIDE4IEdQSU9fQUNUSVZFX0xPVz47CS8qIExFREEgKi8KKwkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCX07CisKKwkJdXNlcjEgeworCQkJIGxhYmVsID0gIm9tYXAzOmdyZWVuOnVzZXIxIjsKKwkJCSBncGlvcyA9IDwmdHdsX2dwaW8gMTkgR1BJT19BQ1RJVkVfTE9XPjsJLyogTEVEQiAqLworCQkJIGRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKKwkJfTsKKworCQl1c2VyMiB7CisJCQkgbGFiZWwgPSAib21hcDM6cmVkOnVzZXIxIjsKKwkJCSBncGlvcyA9IDwmZ3BpbzEgMTYgR1BJT19BQ1RJVkVfTE9XPjsJCS8qIGdwaW9fMTYgKi8KKwkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7CisJCX07CisJfTsKK307CisKKyZvbWFwM19wbXhfY29yZSB7CisJdWFydDJfcGluczogcGlubXV4X3VhcnQyX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTZjLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTEpCS8qIG1jYnNwM19keC51YXJ0Ml9jdHMgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2ZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMSkJLyogbWNic3AzX2RyLnVhcnQyX3J0cyAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTcwLCBQSU5fT1VUUFVUIHwgTVVYX01PREUxKQkvKiBtY2JzcDNfY2xrLnVhcnQyX3R4ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNzIsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMSkJLyogbWNic3AzX2ZzeC51YXJ0Ml9yeCAqLworCQk+OworCX07Cit9OworCismb21hcDNfcG14X2NvcmUyIHsKKwlsZWRzX2NvcmUyX3BpbnM6IHBpbm11eF9sZWRzX2NvcmUyX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDM2MzBfQ09SRTJfSU9QQUQoMHgyNWUwLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBldGtfZDIuZ3Bpb18xNiAqLworCQk+OworCX07Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC1yZXYtZy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC1yZXYtZy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyNmIyOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDMwLXJldi1nLmR0cwpAQCAtMCwwICsxLDY3IEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBJR0VQIENPTSBNT0RVTEUgUmV2LiBHIChUSSBPTUFQIEFNL0RNMzd4KQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBKYXZpZXIgTWFydGluZXogQ2FuaWxsYXMgPGphdmllckBjb2xsYWJvcmEuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgRW5yaWMgQmFsbGV0Ym8gaSBTZXJyYSA8ZWJhbGxldGJvQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJvbWFwMy1pZ2VwMDAzMC1jb21tb24uZHRzaSIKKworLyB7CisJbW9kZWwgPSAiSUdFUCBDT00gTU9EVUxFIFJldi4gRyAoVEkgT01BUCBBTS9ETTM3eCkiOworCWNvbXBhdGlibGUgPSAiaXNlZSxvbWFwMy1pZ2VwMDAzMC1yZXYtZyIsICJ0aSxvbWFwMzZ4eCIsICJ0aSxvbWFwMyI7CisKKwkvKiBSZWd1bGF0b3IgdG8gdHJpZ2dlciB0aGUgV0xfRU4gc2lnbmFsIG9mIHRoZSBXaWZpIG1vZHVsZSAqLworCWxiZXA1Y2x3bWNfd2xlbjogcmVndWxhdG9yLWxiZXA1Y2x3bWMtd2xlbiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAicmVndWxhdG9yLWxiZXA1Y2x3bWMtd2xlbiI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJZ3BpbyA9IDwmZ3BpbzUgMTEgR1BJT19BQ1RJVkVfSElHSD47CQkvKiBncGlvXzEzOSAtIFdMX0VOICovCisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwl9OworfTsKKworJm9tYXAzX3BteF9jb3JlIHsKKwlsYmVwNWNsd21jX3BpbnM6IHBpbm11eF9sYmVwNWNsd21jX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTY0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ0LmdwaW9fMTM2IC0gV19JUlEgKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2NiwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDUuZ3Bpb18xMzcgLSBCVF9FTiAqLworCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMTZhLCBQSU5fT1VUUFVUIHwgTVVYX01PREU0KQkvKiBzZG1tYzJfZGF0Ny5ncGlvXzEzOSAtIFdMX0VOICovCisJCT47CisJfTsKKworCWxlZHNfcGluczogcGlubXV4X2xlZHNfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxYmUsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIGkyYzJfc2NsLmdwaW9fMTY4ICovCisJCT47CisJfTsKKworfTsKKworJmkyYzIgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismbGVkcyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmxlZHNfcGlucyAmbGVkc19jb3JlMl9waW5zPjsKKworCWJvb3QgeworCQlsYWJlbCA9ICJvbWFwMzpncmVlbjpib290IjsKKwkJZ3Bpb3MgPSA8JmdwaW82IDggR1BJT19BQ1RJVkVfSElHSD47CisJCWRlZmF1bHQtc3RhdGUgPSAib24iOworCX07Cit9OworCismbW1jMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8Jm1tYzJfcGlucyAmbGJlcDVjbHdtY19waW5zPjsKKwl2bW1jLXN1cHBseSA9IDwmbGJlcDVjbHdtY193bGVuPjsKKwlidXMtd2lkdGggPSA8ND47CisJbm9uLXJlbW92YWJsZTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1pZ2VwMDAzMC5kdHMKaW5kZXggMjc5Mzc0OS4uODE1MGY0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtaWdlcDAwMzAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWlnZXAwMDMwLmR0cwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIElHRVAgQ09NIE1PRFVMRSAoVEkgT01BUCBBTS9ETTM3eCkKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgSUdFUCBDT00gTU9EVUxFIFJldi4gRSAoVEkgT01BUCBBTS9ETTM3eCkKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJAY29sbGFib3JhLmNvLnVrPgogICogQ29weXJpZ2h0IChDKSAyMDEyIEVucmljIEJhbGxldGJvIGkgU2VycmEgPGViYWxsZXRib0BnbWFpbC5jb20+CkBAIC05LDk3ICs5LDYyIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSAib21hcDMtaWdlcC5kdHNpIgorI2luY2x1ZGUgIm9tYXAzLWlnZXAwMDMwLWNvbW1vbi5kdHNpIgogCiAvIHsKLQltb2RlbCA9ICJJR0VQIENPTSBNT0RVTEUgKFRJIE9NQVAgQU0vRE0zN3gpIjsKKwltb2RlbCA9ICJJR0VQIENPTSBNT0RVTEUgUmV2LiBFIChUSSBPTUFQIEFNL0RNMzd4KSI7CiAJY29tcGF0aWJsZSA9ICJpc2VlLG9tYXAzLWlnZXAwMDMwIiwgInRpLG9tYXAzNnh4IiwgInRpLG9tYXAzIjsKIAotCWxlZHMgewotCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCQlwaW5jdHJsLTAgPSA8JmxlZHNfcGlucz47Ci0JCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkvKiBSZWd1bGF0b3IgdG8gdHJpZ2dlciB0aGUgV0lGSV9QRE4gc2lnbmFsIG9mIHRoZSBXaWZpIG1vZHVsZSAqLworCWxiZWUxdXNqeWNfcGRuOiBsYmVlMXVzanljX3BkbiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAicmVndWxhdG9yLWxiZWUxdXNqeWMtcGRuIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlncGlvID0gPCZncGlvNSAxMCBHUElPX0FDVElWRV9ISUdIPjsJLyogZ3Bpb18xMzggLSBXSUZJX1BETiAqLworCQlzdGFydHVwLWRlbGF5LXVzID0gPDEwMDAwPjsKKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCX07CiAKLQkJYm9vdCB7Ci0JCQkgbGFiZWwgPSAib21hcDM6Z3JlZW46Ym9vdCI7Ci0JCQkgZ3Bpb3MgPSA8JnR3bF9ncGlvIDEzIEdQSU9fQUNUSVZFX0xPVz47Ci0JCQkgZGVmYXVsdC1zdGF0ZSA9ICJvbiI7Ci0JCX07Ci0KLQkJdXNlcjAgewotCQkJIGxhYmVsID0gIm9tYXAzOnJlZDp1c2VyMCI7Ci0JCQkgZ3Bpb3MgPSA8JnR3bF9ncGlvIDE4IEdQSU9fQUNUSVZFX0xPVz47IC8qIExFREEgKi8KLQkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7Ci0JCX07Ci0KLQkJdXNlcjEgewotCQkJIGxhYmVsID0gIm9tYXAzOmdyZWVuOnVzZXIxIjsKLQkJCSBncGlvcyA9IDwmdHdsX2dwaW8gMTkgR1BJT19BQ1RJVkVfTE9XPjsgLyogTEVEQiAqLwotCQkJIGRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKLQkJfTsKLQotCQl1c2VyMiB7Ci0JCQkgbGFiZWwgPSAib21hcDM6cmVkOnVzZXIxIjsKLQkJCSBncGlvcyA9IDwmZ3BpbzEgMTYgR1BJT19BQ1RJVkVfTE9XPjsKLQkJCSBkZWZhdWx0LXN0YXRlID0gIm9mZiI7Ci0JCX07CisJLyogUmVndWxhdG9yIHRvIHRyaWdnZXIgdGhlIFJFU0VUX05fVyBzaWduYWwgb2YgdGhlIFdpZmkgbW9kdWxlICovCisJbGJlZTF1c2p5Y19yZXNldF9uX3c6IGxiZWUxdXNqeWNfcmVzZXRfbl93IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJyZWd1bGF0b3ItbGJlZTF1c2p5Yy1yZXNldC1uLXciOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCWdwaW8gPSA8JmdwaW81IDExIEdQSU9fQUNUSVZFX0hJR0g+OwkvKiBncGlvXzEzOSAtIFJFU0VUX05fVyAqLworCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJfTsKIH07CiAKLSZvbWFwM19wbXhfY29yZTIgewotCWxlZHNfcGluczogcGlubXV4X2xlZHNfcGlucyB7Cismb21hcDNfcG14X2NvcmUgeworCWxiZWUxdXNqeWNfcGluczogcGlubXV4X2xiZWUxdXNqeWNfcGlucyB7CiAJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQlPTUFQMzYzMF9DT1JFMl9JT1BBRCgweDI1ZTAsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpIC8qIGV0a19kMi5ncGlvXzE2ICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNjYsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ1LmdwaW9fMTM3IC0gUkVTRVRfTl9XICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxNjgsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIHNkbW1jMl9kYXQ2LmdwaW9fMTM4IC0gV0lGSV9QRE4gKi8KKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjE2YSwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkJLyogc2RtbWMyX2RhdDcuZ3Bpb18xMzkgLSBSU1RfTl9CICovCiAJCT47CiAJfTsKIH07CiAKLSZncG1jIHsKLQlyYW5nZXMgPSA8MCAwIDB4MDAwMDAwMDAgMHgyMDAwMDAwMD47CismbGVkcyB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmxlZHNfY29yZTJfcGlucz47CiAKLQluYW5kQDAsMCB7Ci0JCWxpbnV4LG10ZC1uYW1lPSAibWljcm9uLG10MjljNGc5Nm1heiI7Ci0JCXJlZyA9IDwwIDAgMD47Ci0JCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKLQkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOwotCi0JCWdwbWMsc3luYy1jbGstcHMgPSA8MD47Ci0JCWdwbWMsY3Mtb24tbnMgPSA8MD47Ci0JCWdwbWMsY3MtcmQtb2ZmLW5zID0gPDQ0PjsKLQkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8NDQ+OwotCQlncG1jLGFkdi1vbi1ucyA9IDw2PjsKLQkJZ3BtYyxhZHYtcmQtb2ZmLW5zID0gPDM0PjsKLQkJZ3BtYyxhZHYtd3Itb2ZmLW5zID0gPDQ0PjsKLQkJZ3BtYyx3ZS1vZmYtbnMgPSA8NDA+OwotCQlncG1jLG9lLW9mZi1ucyA9IDw1ND47Ci0JCWdwbWMsYWNjZXNzLW5zID0gPDY0PjsKLQkJZ3BtYyxyZC1jeWNsZS1ucyA9IDw4Mj47Ci0JCWdwbWMsd3ItY3ljbGUtbnMgPSA8ODI+OwotCQlncG1jLHdyLWFjY2Vzcy1ucyA9IDw0MD47Ci0JCWdwbWMsd3ItZGF0YS1tdXgtYnVzLW5zID0gPDA+OwotCi0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQotCQlwYXJ0aXRpb25AMCB7Ci0JCQlsYWJlbCA9ICJTUEwiOwotCQkJcmVnID0gPDAgMHgxMDAwMDA+OwotCQl9OwotCQlwYXJ0aXRpb25AODAwMDAgewotCQkJbGFiZWwgPSAiVS1Cb290IjsKLQkJCXJlZyA9IDwweDEwMDAwMCAweDE4MDAwMD47Ci0JCX07Ci0JCXBhcnRpdGlvbkAxYzAwMDAgewotCQkJbGFiZWwgPSAiRW52aXJvbm1lbnQiOwotCQkJcmVnID0gPDB4MjgwMDAwIDB4MTAwMDAwPjsKLQkJfTsKLQkJcGFydGl0aW9uQDI4MDAwMCB7Ci0JCQlsYWJlbCA9ICJLZXJuZWwiOwotCQkJcmVnID0gPDB4MzgwMDAwIDB4MzAwMDAwPjsKLQkJfTsKLQkJcGFydGl0aW9uQDc4MDAwMCB7Ci0JCQlsYWJlbCA9ICJGaWxlc3lzdGVtIjsKLQkJCXJlZyA9IDwweDY4MDAwMCAweDFmOTgwMDAwPjsKLQkJfTsKKwlib290IHsKKwkJbGFiZWwgPSAib21hcDM6Z3JlZW46Ym9vdCI7CisJCWdwaW9zID0gPCZ0d2xfZ3BpbyAxMyBHUElPX0FDVElWRV9MT1c+OwkvKiBMRURTWU5DICovCisJCWRlZmF1bHQtc3RhdGUgPSAib24iOwogCX07CiB9OworCisvKiBPbiBib2FyZCBXaWZpIG1vZHVsZSAqLworJm1tYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZtbWMyX3BpbnMgJmxiZWUxdXNqeWNfcGlucz47CisJdm1tYy1zdXBwbHkgPSA8JmxiZWUxdXNqeWNfcGRuPjsKKwl2bW1jX2F1eC1zdXBwbHkgPSA8JmxiZWUxdXNqeWNfcmVzZXRfbl93PjsKKwlidXMtd2lkdGggPSA8ND47CisJbm9uLXJlbW92YWJsZTsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxkcC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1sZHAuZHRzCmluZGV4IDcyZGNhMGIuLmI2OTliYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxkcC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGRwLmR0cwpAQCAtNyw2ICs3LDcgQEAKICAqLwogL2R0cy12MS87CiAKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnB1dC9pbnB1dC5oPgogI2luY2x1ZGUgIm9tYXAzNHh4LmR0c2kiCiAjaW5jbHVkZSAib21hcC1ncG1jLXNtc2M5MTF4LmR0c2kiCiAKQEAgLTEwMSw4ICsxMDIsOSBAQAogCiAJbmFuZEAwLDAgewogCQlsaW51eCxtdGQtbmFtZT0gIm1pY3JvbixuYW5kIjsKLQkJcmVnID0gPDAgMCAwPjsKKwkJcmVnID0gPDAgMCA0PjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKKwkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8Mj47CiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJiY2g4IjsKIAogCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OwpAQCAtMTQxLDcgKzE0Myw3IEBACiAJCX07CiAJCXBhcnRpdGlvbkAyMDAwMDAwIHsKIAkJCWxhYmVsID0gIkZpbGVzeXN0ZW0iOwotCQkJcmVnID0gPDB4MjAwMDAwMCAweGUwMDAwMDA+OworCQkJcmVnID0gPDB4MjAwMDAwMCAweDYwMDAwMDA+OwogCQl9OwogCX07CiAKQEAgLTI2Myw2ICsyNjUsMjYgQEAKIAl9OwogfTsKIAorJnR3bF9rZXlwYWQgeworCWxpbnV4LGtleW1hcCA9IDxNQVRSSVhfS0VZKDAsIDAsIEtFWV8xKQorCQkJTUFUUklYX0tFWSgwLCAxLCBLRVlfMikKKwkJCU1BVFJJWF9LRVkoMCwgMiwgS0VZXzMpCisJCQlNQVRSSVhfS0VZKDEsIDAsIEtFWV80KQorCQkJTUFUUklYX0tFWSgxLCAxLCBLRVlfNSkKKwkJCU1BVFJJWF9LRVkoMSwgMiwgS0VZXzYpCisJCQlNQVRSSVhfS0VZKDEsIDMsIEtFWV9GNSkKKwkJCU1BVFJJWF9LRVkoMiwgMCwgS0VZXzcpCisJCQlNQVRSSVhfS0VZKDIsIDEsIEtFWV84KQorCQkJTUFUUklYX0tFWSgyLCAyLCBLRVlfOSkKKwkJCU1BVFJJWF9LRVkoMiwgMywgS0VZX0Y2KQorCQkJTUFUUklYX0tFWSgzLCAwLCBLRVlfRjcpCisJCQlNQVRSSVhfS0VZKDMsIDEsIEtFWV8wKQorCQkJTUFUUklYX0tFWSgzLCAyLCBLRVlfRjgpCisJCQlNQVRSSVhfS0VZKDUsIDQsIEtFWV9SRVNFUlZFRCkKKwkJCU1BVFJJWF9LRVkoNCwgNCwgS0VZX1ZPTFVNRVVQKQorCQkJTUFUUklYX0tFWSg1LCA1LCBLRVlfVk9MVU1FRE9XTik+OworfTsKKwogJnVhcnQzIHsKIAlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZpbnRjIDc0ICZvbWFwM19wbXhfY29yZSBPTUFQM19VQVJUM19SWD47CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGlsbHktYTgzeC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbGlsbHktYTgzeC5kdHNpCmluZGV4IGQ5NzMwODguLmU4MWZiNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLWxpbGx5LWE4M3guZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1saWxseS1hODN4LmR0c2kKQEAgLTM2Myw3ICszNjMsNyBAQAogCQk8NyAwIDB4MTUwMDAwMDAgMHgwMTAwMDAwMD47CiAKIAluYW5kQDAsMCB7Ci0JCXJlZyA9IDwwIDAgMHgxMDAwMDAwPjsKKwkJcmVnID0gPDAgMCA0PjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKIAkJdGksbmFuZC1lY2Mtb3B0ID0gImJjaDgiOwogCQkvKiBubyBlbG0gb24gb21hcDMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45MDAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjkwMC5kdHMKaW5kZXggYmM4MmExMi4uNTNmM2NhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjkwMC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjkwMC5kdHMKQEAgLTExNSw2ICsxMTUsMTIgQEAKIAkJZWNpLXN3aXRjaC1ncGlvcyA9IDwmZ3BpbzYgMjIgR1BJT19BQ1RJVkVfSElHSD47IC8qIDE4MiAqLwogCQlzcGVha2VyLWFtcGxpZmllci1ncGlvcyA9IDwmdHdsX2dwaW8gNyBHUElPX0FDVElWRV9ISUdIPjsKIAl9OworCisJYmF0dGVyeTogbjkwMC1iYXR0ZXJ5IHsKKwkJY29tcGF0aWJsZSA9ICJub2tpYSxuOTAwLWJhdHRlcnkiOworCQlpby1jaGFubmVscyA9IDwmdHdsX21hZGMgMD4sIDwmdHdsX21hZGMgND4sIDwmdHdsX21hZGMgMTI+OworCQlpby1jaGFubmVsLW5hbWVzID0gInRlbXAiLCAiYnNpIiwgInZiYXQiOworCX07CiB9OwogCiAmb21hcDNfcG14X2NvcmUgewpAQCAtMTQyLDYgKzE0OCwzMyBAQAogCQk+OwogCX07CiAKKwlncG1jX3BpbnM6IHBpbm11eF9ncG1jX3BpbnMgeworCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAorCisJCQkvKiBhZGRyZXNzIGxpbmVzICovCisgICAgICAgICAgICAgICAgICAgICAgICBPTUFQM19DT1JFMV9JT1BBRCgweDIwN2EsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTApICAgICAgIC8qIGdwbWNfYTEuZ3BtY19hMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMDdjLCBQSU5fT1VUUFVUIHwgTVVYX01PREUwKSAgICAgICAvKiBncG1jX2EyLmdwbWNfYTIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjA3ZSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAgICAgLyogZ3BtY19hMy5ncG1jX2EzICovCisKKwkJCS8qIGRhdGEgbGluZXMsIGdwbWNfZDAuLmQ3IG5vdCBtdXhhYmxlIGFjY29yZGluZyB0byBUUk0gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjA5ZSwgUElOX0lOUFVUIHwgTVVYX01PREUwKSAgICAgICAgLyogZ3BtY19kOC5ncG1jX2Q4ICovCisgICAgICAgICAgICAgICAgICAgICAgICBPTUFQM19DT1JFMV9JT1BBRCgweDIwYTAsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkgICAgICAgIC8qIGdwbWNfZDkuZ3BtY19kOSAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGEyLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxMC5ncG1jX2QxMCAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGE0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxMS5ncG1jX2QxMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGE2LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxMi5ncG1jX2QxMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGE4LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxMy5ncG1jX2QxMyAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGFhLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxNC5ncG1jX2QxNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGFjLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2QxNS5ncG1jX2QxNSAqLworCisJCQkvKgorCQkJICogZ3BtY19uY3MwLCBncG1jX25hZHZfYWxlLCBncG1jX25vZSwgZ3BtY19ud2UsIGdwbWNfd2FpdDAgbm90IG11eGFibGUKKwkJCSAqIGFjY29yZGluZyB0byBUUk0uIE9uZU5BTkQgc2VlbXMgdG8gcmVxdWlyZSBQSU5fSU5QVVQgb24gY2xvY2suCisJCQkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9NQVAzX0NPUkUxX0lPUEFEKDB4MjBiMCwgUElOX09VVFBVVCB8IE1VWF9NT0RFMCkgICAgICAgLyogZ3BtY19uY3MxLmdwbWNfbmNzMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgT01BUDNfQ09SRTFfSU9QQUQoMHgyMGJlLCBQSU5fSU5QVVQgfCBNVVhfTU9ERTApICAgICAgICAvKiBncG1jX2Nsay5ncG1jX2NsayAqLworCQk+OworCX07CisKIAlpMmMxX3BpbnM6IHBpbm11eF9pMmMxX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPAogCQkJMHgxOGEgKFBJTl9JTlBVVCB8IE1VWF9NT0RFMCkJCS8qIGkyYzFfc2NsICovCkBAIC01NDAsNiArNTczLDE2IEBACiAJCXBvd2VyLWdwaW8gPSA8JmdwaW80IDIgR1BJT19BQ1RJVkVfSElHSD47IC8qIDk4ICovCiAJfTsKIAorCXNpNDcxMzogc2k0NzEzQDYzIHsKKwkJY29tcGF0aWJsZSA9ICJzaWxhYnMsc2k0NzEzIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MHg2Mz47CisKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZncGlvMiAyMSBJUlFfVFlQRV9FREdFX0ZBTExJTkc+OyAvKiA1MyAqLworICAgICAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gPCZncGlvNiAzIEdQSU9fQUNUSVZFX0hJR0g+OyAvKiAxNjMgKi8KKyAgICAgICAgICAgICAgICB2aW8tc3VwcGx5ID0gPCZ2aW8+OworICAgICAgICAgICAgICAgIHZkZC1zdXBwbHkgPSA8JnZhdXgxPjsKKwl9OworCiAJYnEyNDE1MGE6IGJxMjQxNTBhQDZiIHsKIAkJY29tcGF0aWJsZSA9ICJ0aSxicTI0MTUwYSI7CiAJCXJlZyA9IDwweDZiPjsKQEAgLTU4NSwxNiArNjI4LDE2IEBACiB9OwogCiAmZ3BtYyB7Ci0JcmFuZ2VzID0gPDAgMCAweDA0MDAwMDAwIDB4MTAwMDAwMDA+OyAvKiAyNTZNQiAqLwogCXJhbmdlcyA9IDwwIDAgMHgwMTAwMDAwMCAweDAxMDAwMDAwPiwJLyogMTYgTUIgZm9yIE9uZU5BTkQgKi8KIAkJIDwxIDAgMHgwMjAwMDAwMCAweDAxMDAwMDAwPjsJLyogMTYgTUIgZm9yIHNtYzkxYzk2ICovCisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmdwbWNfcGlucz47CiAKLQkvKiBncGlvLWlycSBmb3IgZG1hOiA2NSAqLwotCisJLyogc3lzX25kbWFyZXExIGNvdWxkIGJlIHVzZWQgYnkgdGhlIGRyaXZlciwgbm90IGFzIGdwaW82NSB0aG91Z2ggKi8KIAlvbmVuYW5kQDAsMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPDAgMCAweDEwMDAwMDAwPjsKKwkJcmVnID0gPDAgMCAweDIwMDAwPjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSAxMjhLICovCiAKIAkJZ3BtYyxzeW5jLXJlYWQ7CiAJCWdwbWMsc3luYy13cml0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45NTAtbjkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLW45NTAtbjkuZHRzaQppbmRleCA3MGFkZGNiLi4xZTQ5ZGZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1uOTUwLW45LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtbjk1MC1uOS5kdHNpCkBAIC0xMTUsMTIgKzExNSwxMiBAQAogfTsKIAogJmdwbWMgewotCXJhbmdlcyA9IDwwIDAgMHgwNDAwMDAwMCAweDIwMDAwMDAwPjsKKwlyYW5nZXMgPSA8MCAwIDB4MDQwMDAwMDAgMHgxMDAwMDAwPjsJLyogQ1MwOiAxNk1CIGZvciBPbmVOQU5EICovCiAKIAlvbmVuYW5kQDAsMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPDAgMCAweDIwMDAwMDAwPjsKKwkJcmVnID0gPDAgMCAweDIwMDAwPjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSAxMjhLICovCiAKIAkJZ3BtYyxzeW5jLXJlYWQ7CiAJCWdwbWMsc3luYy13cml0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiLXQzNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2ItdDM1LmR0c2kKaW5kZXggZDU5ZTNkZS4uODI3ZjYxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2ItdDM1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2ItdDM1LmR0c2kKQEAgLTIsNiArMiw1OSBAQAogICogQ29tbW9uIHN1cHBvcnQgZm9yIENvbXB1TGFiIFNCLVQzNSB1c2VkIG9uIFNCQy1UMzUzMCwgU0JDLVQzNTE3IGFuZCBTQkMtVDM3MzAKICAqLwogCisvIHsKKwl0ZnA0MTA6IGVuY29kZXJAMCB7CisJCWNvbXBhdGlibGUgPSAidGksdGZwNDEwIjsKKworCQlwb3dlcmRvd24tZ3Bpb3MgPSA8JmdwaW8yIDIyIEdQSU9fQUNUSVZFX0xPVz47ICAvKiBncGlvXzU0ICovCisKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ0ZnA0MTBfcGlucz47CisKKwkJcG9ydHMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisKKwkJCQl0ZnA0MTBfaW46IGVuZHBvaW50QDAgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmRwaV9vdXQ+OworCQkJCX07CisJCQl9OworCisJCQlwb3J0QDEgeworCQkJCXJlZyA9IDwxPjsKKworCQkJCXRmcDQxMF9vdXQ6IGVuZHBvaW50QDAgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmR2aV9jb25uZWN0b3JfaW4+OworCQkJCX07CisJCQl9OworCQl9OworCX07CisKKwlkdmkwOiBjb25uZWN0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAiZHZpLWNvbm5lY3RvciI7CisJCWxhYmVsID0gImR2aSI7CisKKwkJcG9ydCB7CisJCQlkdmlfY29ubmVjdG9yX2luOiBlbmRwb2ludCB7CisJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfb3V0PjsKKwkJCX07CisJCX07CisJfTsKKworCWF1ZGlvX2FtcDogYXVkaW9fYW1wIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJhdWRpb19hbXAiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnNiX3QzNV9hdWRpb19hbXA+OworCQlncGlvID0gPCZncGlvMiAyOSBHUElPX0FDVElWRV9MT1c+OyAgIC8qIGdwaW9fNjEgKi8KKwkJZW5hYmxlLWFjdGl2ZS1sb3c7CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKK307CisKICZvbWFwM19wbXhfY29yZSB7CiAJc21zYzJfcGluczogcGlubXV4X3Ntc2MyX3BpbnMgewogCQlwaW5jdHJsLXNpbmdsZSxwaW5zID0gPApAQCAtOSw2ICs2MiwzOCBAQAogCQkJT01BUDNfQ09SRTFfSU9QQUQoMHgyMGQyLCBQSU5fSU5QVVRfUFVMTFVQIHwgTVVYX01PREU0KQkvKiBncG1jX3dhaXQzLmdwaW9fNjUgKi8KIAkJPjsKIAl9OworCisJdGZwNDEwX3BpbnM6IHBpbm11eF90ZnA0MTBfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIwYjQsIFBJTl9PVVRQVVQgfCBNVVhfTU9ERTQpCS8qIGdwbWNfbmNzMy5ncGlvXzU0ICovCisJCT47CisJfTsKKworCWkyYzNfcGluczogcGlubXV4X2kyYzNfcGlucyB7CisJCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8CisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxYzIsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIGkyYzNfc2NsICovCisJCQlPTUFQM19DT1JFMV9JT1BBRCgweDIxYzQsIFBJTl9JTlBVVF9QVUxMVVAgfCBNVVhfTU9ERTApIC8qIGkyYzNfc2RhICovCisJCT47CisJfTsKKworCXNiX3QzNV9hdWRpb19hbXA6IHBpbm11eF9zYl90MzVfYXVkaW9fYW1wIHsKKwkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKKwkJCU9NQVAzX0NPUkUxX0lPUEFEKDB4MjBjOCwgUElOX09VVFBVVCB8IE1VWF9NT0RFNCkgLyogZ3BtY19uYmUxLmdwaW9fNjEgKi8KKwkJPjsKKwl9OworfTsKKworJmkyYzMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmMzX3BpbnM+OworCisJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisKKwlhdDI0QDUwIHsKKwkJY29tcGF0aWJsZSA9ICJhdDI0LDI0YzAyIjsKKwkJcGFnZXNpemUgPSA8MTY+OworCQlyZWcgPSA8MHg1MD47CisJfTsKIH07CiAKICZncG1jIHsKQEAgLTIyLDI0ICsxMDcsMjkgQEAKIAkJaW50ZXJydXB0cyA9IDwxIElSUV9UWVBFX0xFVkVMX0xPVz47CiAJCXJlZyA9IDw0IDAgMHhmZj47CiAJCWJhbmstd2lkdGggPSA8Mj47Ci0JCWdwbWMsbXV4LWFkZC1kYXRhOwotCQlncG1jLGNzLW9uLW5zID0gPDE+OwotCQlncG1jLGNzLXJkLW9mZi1ucyA9IDwxODA+OwotCQlncG1jLGNzLXdyLW9mZi1ucyA9IDwxODA+OwotCQlncG1jLGFkdi1yZC1vZmYtbnMgPSA8MTg+OwotCQlncG1jLGFkdi13ci1vZmYtbnMgPSA8NDg+OwotCQlncG1jLG9lLW9uLW5zID0gPDU0PjsKLQkJZ3BtYyxvZS1vZmYtbnMgPSA8MTY4PjsKLQkJZ3BtYyx3ZS1vbi1ucyA9IDw1ND47Ci0JCWdwbWMsd2Utb2ZmLW5zID0gPDE2OD47Ci0JCWdwbWMscmQtY3ljbGUtbnMgPSA8MTg2PjsKLQkJZ3BtYyx3ci1jeWNsZS1ucyA9IDwxODY+OwotCQlncG1jLGFjY2Vzcy1ucyA9IDwxNDQ+OwotCQlncG1jLHBhZ2UtYnVyc3QtYWNjZXNzLW5zID0gPDI0PjsKLQkJZ3BtYyxidXMtdHVybmFyb3VuZC1ucyA9IDw5MD47Ci0JCWdwbWMsY3ljbGUyY3ljbGUtZGVsYXktbnMgPSA8OTA+OwotCQlncG1jLGN5Y2xlMmN5Y2xlLXNhbWVjc2VuOwotCQlncG1jLGN5Y2xlMmN5Y2xlLWRpZmZjc2VuOworCQlncG1jLGRldmljZS13aWR0aCA9IDwxPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1zYW1lY3NlbiA9IDwxPjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kaWZmY3NlbiA9IDwxPjsKKwkJZ3BtYyxjcy1vbi1ucyA9IDw1PjsKKwkJZ3BtYyxjcy1yZC1vZmYtbnMgPSA8MTUwPjsKKwkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8MTUwPjsKKwkJZ3BtYyxhZHYtb24tbnMgPSA8MD47CisJCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDwxNT47CisJCWdwbWMsYWR2LXdyLW9mZi1ucyA9IDw0MD47CisJCWdwbWMsb2Utb24tbnMgPSA8NDU+OworCQlncG1jLG9lLW9mZi1ucyA9IDwxNDA+OworCQlncG1jLHdlLW9uLW5zID0gPDQ1PjsKKwkJZ3BtYyx3ZS1vZmYtbnMgPSA8MTQwPjsKKwkJZ3BtYyxyZC1jeWNsZS1ucyA9IDwxNTU+OworCQlncG1jLHdyLWN5Y2xlLW5zID0gPDE1NT47CisJCWdwbWMsYWNjZXNzLW5zID0gPDEyMD47CisJCWdwbWMscGFnZS1idXJzdC1hY2Nlc3MtbnMgPSA8MjA+OworCQlncG1jLGJ1cy10dXJuYXJvdW5kLW5zID0gPDc1PjsKKwkJZ3BtYyxjeWNsZTJjeWNsZS1kZWxheS1ucyA9IDw3NT47CisJCWdwbWMsd2FpdC1tb25pdG9yaW5nLW5zID0gPDA+OworCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDA+OworCQlncG1jLHdyLWRhdGEtbXV4LWJ1cy1ucyA9IDwwPjsKKwkJZ3BtYyx3ci1hY2Nlc3MtbnMgPSA8MD47CiAJCXZkZHZhcmlvLXN1cHBseSA9IDwmdmRkdmFyaW8+OwogCQl2ZGQzM2Etc3VwcGx5ID0gPCZ2ZGQzM2E+OwogCQlyZWctaW8td2lkdGggPSA8ND47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM1MTcuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNTE3LmR0cwppbmRleCA0MjE4OWI2Li4xNzk4NjUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM1MTcuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiYy10MzUxNy5kdHMKQEAgLTksNiArOSwxMSBAQAogCW1vZGVsID0gIkNvbXB1TGFiIFNCQy1UMzUxNyB3aXRoIENNLVQzNTE3IjsKIAljb21wYXRpYmxlID0gImNvbXB1bGFiLG9tYXAzLXNiYy10MzUxNyIsICJjb21wdWxhYixvbWFwMy1jbS10MzUxNyIsICJ0aSxhbTM1MTciLCAidGksb21hcDMiOwogCisJYWxpYXNlcyB7CisJCWRpc3BsYXkwID0gJmR2aTA7CisJCWRpc3BsYXkxID0gJnR2MDsKKwl9OworCiAJLyogT25seSBvbmUgR1BNQyBzbXNjOTIyMCBvbiBTQkMtVDM1MTcsIENNLVQzNTE3IHVzZXMgYW0zNXggRXRoZXJuZXQgKi8KIAl2ZGR2YXJpbzogcmVndWxhdG9yLXZkZHZhcmlvLXNiLXQzNSB7CiAJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKQEAgLTU0LDMgKzU5LDEzIEBACiAJd3AtZ3Bpb3MgPSAgPCZncGlvMiAyNyBHUElPX0FDVElWRV9ISUdIPjsgLyogZ3Bpb181OSAgKi8KIAljZC1ncGlvcyA9ICA8JmdwaW81IDE2IEdQSU9fQUNUSVZFX0hJR0g+OyAvKiBncGlvXzE0NCAqLwogfTsKKworJmRzcyB7CisJcG9ydCB7CisJCWRwaV9vdXQ6IGVuZHBvaW50IHsKKwkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdGZwNDEwX2luPjsKKwkJCWRhdGEtbGluZXMgPSA8MjQ+OworCQl9OworCX07Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM1MzAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNTMwLmR0cwppbmRleCBiYmJlZWE2Li5jOTk0ZjBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM1MzAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiYy10MzUzMC5kdHMKQEAgLTgsNiArOCwxMSBAQAogLyB7CiAJbW9kZWwgPSAiQ29tcHVMYWIgU0JDLVQzNTMwIHdpdGggQ00tVDM1MzAiOwogCWNvbXBhdGlibGUgPSAiY29tcHVsYWIsb21hcDMtc2JjLXQzNTMwIiwgImNvbXB1bGFiLG9tYXAzLWNtLXQzNTMwIiwgInRpLG9tYXAzNHh4IiwgInRpLG9tYXAzIjsKKworCWFsaWFzZXMgeworCQlkaXNwbGF5MCA9ICZkdmkwOworCQlkaXNwbGF5MSA9ICZ0djA7CisJfTsKIH07CiAKICZvbWFwM19wbXhfY29yZSB7CkBAIC0zNCwzICszOSwxMyBAQAogJm1tYzEgewogCWNkLWdwaW9zID0gIDwmdHdsX2dwaW8gMCBHUElPX0FDVElWRV9ISUdIPjsKIH07CisKKyZkc3MgeworCXBvcnQgeworCQlkcGlfb3V0OiBlbmRwb2ludCB7CisJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnRmcDQxMF9pbj47CisJCQlkYXRhLWxpbmVzID0gPDI0PjsKKwkJfTsKKwl9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNzMwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXNiYy10MzczMC5kdHMKaW5kZXggMDhlNGE3MC4uNWJkZGRmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtc2JjLXQzNzMwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy1zYmMtdDM3MzAuZHRzCkBAIC04LDYgKzgsMTEgQEAKIC8gewogCW1vZGVsID0gIkNvbXB1TGFiIFNCQy1UMzczMCB3aXRoIENNLVQzNzMwIjsKIAljb21wYXRpYmxlID0gImNvbXB1bGFiLG9tYXAzLXNiYy10MzczMCIsICJjb21wdWxhYixvbWFwMy1jbS10MzczMCIsICJ0aSxvbWFwMzZ4eCIsICJ0aSxvbWFwMyI7CisKKwlhbGlhc2VzIHsKKwkJZGlzcGxheTAgPSAmZHZpMDsKKwkJZGlzcGxheTEgPSAmdHYwOworCX07CiB9OwogCiAmb21hcDNfcG14X2NvcmUgewpAQCAtMjUsMyArMzAsMTMgQEAKIAlyYW5nZXMgPSA8NSAwIDB4MmMwMDAwMDAgMHgwMTAwMDAwMD4sCiAJCSA8NCAwIDB4MmQwMDAwMDAgMHgwMTAwMDAwMD47CiB9OworCismZHNzIHsKKwlwb3J0IHsKKwkJZHBpX291dDogZW5kcG9pbnQgeworCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZ0ZnA0MTBfaW4+OworCQkJZGF0YS1saW5lcyA9IDwyND47CisJCX07CisJfTsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXRhbzM1MzAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLXRhbzM1MzAuZHRzaQppbmRleCBiMzBmMzg3Li5lODk4MjBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwMy10YW8zNTMwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMtdGFvMzUzMC5kdHNpCkBAIC0yNzAsNyArMjcwLDcgQEAKIAlyYW5nZXMgPSA8MCAwIDB4MDAwMDAwMDAgMHgwMTAwMDAwMD47CiAKIAluYW5kQDAsMCB7Ci0JCXJlZyA9IDwwIDAgMD47IC8qIENTMCwgb2Zmc2V0IDAgKi8KKwkJcmVnID0gPDAgMCA0PjsgLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCW5hbmQtYnVzLXdpZHRoID0gPDE2PjsKIAkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8Mj47CS8qIEdQTUNfREVWV0lEVEhfMTZCSVQgKi8KIAkJdGksbmFuZC1lY2Mtb3B0ID0gInN3IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMy5kdHNpCmluZGV4IGQwZTg4NGQuLjAxYjcxMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDMuZHRzaQpAQCAtNzksNyArNzksNyBAQAogCSAqIGhpZXJhcmNoeS4KIAkgKi8KIAlvY3AgewotCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWwzLXNteCIsICJzaW1wbGUtYnVzIjsKIAkJcmVnID0gPDB4NjgwMDAwMDAgMHgxMDAwMD47CiAJCWludGVycnVwdHMgPSA8OSAxMD47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMzMyLDYgKzMzMiw3IEBACiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CiAJCQlyZWcgPSA8MHg0ODA5NDAwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDI2PjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8Mj47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwyPjsKIAkJCW1ib3hfZHNwOiBkc3AgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDM0MzAtc2RwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXAzNDMwLXNkcC5kdHMKaW5kZXggOWJhZDk0ZS4uMTZiMGNkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDM0MzAtc2RwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwMzQzMC1zZHAuZHRzCkBAIC01MSw4ICs1MSw4IEBACiAKICZncG1jIHsKIAlyYW5nZXMgPSA8MCAwIDB4MTAwMDAwMDAgMHgwODAwMDAwMD4sCi0JCSA8MSAwIDB4MjgwMDAwMDAgMHgwODAwMDAwMD4sCi0JCSA8MiAwIDB4MjAwMDAwMDAgMHgxMDAwMDAwMD47CisJCSA8MSAwIDB4MjgwMDAwMDAgMHgxMDAwMDAwPiwJLyogQ1MxOiAxNk1CIGZvciBOQU5EICovCisJCSA8MiAwIDB4MjAwMDAwMDAgMHgxMDAwMDAwPjsJLyogQ1MyOiAxNk1CIGZvciBPbmVOQU5EICovCiAKIAlub3JAMCwwIHsKIAkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJCWxpbnV4LG10ZC1uYW1lPSAibWljcm9uLG10MjlmMWcwOGFiYiI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPDEgMCAweDA4MDAwMDAwPjsKKwkJcmVnID0gPDEgMCA0PjsJLyogQ1MxLCBvZmZzZXQgMCwgSU8gc2l6ZSA0ICovCiAJCXRpLG5hbmQtZWNjLW9wdCA9ICJzdyI7CiAJCW5hbmQtYnVzLXdpZHRoID0gPDg+OwogCQlncG1jLGNzLW9uLW5zID0gPDA+OwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCWxpbnV4LG10ZC1uYW1lPSAic2Ftc3VuZyxrZm0yZzE2cTJtLWRlYjgiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJlZyA9IDwyIDAgMHgxMDAwMDAwMD47CisJCXJlZyA9IDwyIDAgMHgyMDAwMD47CS8qIENTMiwgb2Zmc2V0IDAsIElPIHNpemUgNCAqLwogCiAJCWdwbWMsZGV2aWNlLXdpZHRoID0gPDI+OwogCQlncG1jLG11eC1hZGQtZGF0YSA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LWR1b3Zlcm8tcGFybG9yLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LWR1b3Zlcm8tcGFybG9yLmR0cwppbmRleCA2ZGM4NGQ5Li4xYTc4ZjAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1kdW92ZXJvLXBhcmxvci5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtZHVvdmVyby1wYXJsb3IuZHRzCkBAIC0xNzcsNiArMTc3LDcgQEAKIAogJmhkbWkgewogCXN0YXR1cyA9ICJvayI7CisJdmRkYS1zdXBwbHkgPSA8JnZkYWM+OwogCiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JmRzc19oZG1pX3BpbnM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LmR0c2kKaW5kZXggODc4Yzk3OS4uMDc0MTQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNC5kdHNpCkBAIC02NjEsNiArNjYxLDcgQEAKIAkJCXJlZyA9IDwweDRhMGY0MDAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8Mz47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDw4PjsKIAkJCW1ib3hfaXB1OiBtYm94X2lwdSB7CkBAIC04OTUsNyArODk2LDcgQEAKIAkJCQlyZWcgPSA8MHg1ODAwMjAwMCAweDEwMDA+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQkJdGksaHdtb2RzID0gImRzc19yZmJpIjsKLQkJCQljbG9ja3MgPSA8JmRzc19kc3NfY2xrPiwgPCZkc3NfZmNrPjsKKwkJCQljbG9ja3MgPSA8JmRzc19kc3NfY2xrPiwgPCZsM19kaXZfY2s+OwogCQkJCWNsb2NrLW5hbWVzID0gImZjayIsICJpY2siOwogCQkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQ0eHgtY2xvY2tzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNDR4eC1jbG9ja3MuZHRzaQppbmRleCBjODIxZmY1Li5mMmM0OGYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNDR4eC1jbG9ja3MuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNDR4eC1jbG9ja3MuZHRzaQpAQCAtMTAxOCwxNCArMTAxOCw2IEBACiAJCXJlZyA9IDwweDExMjA+OwogCX07CiAKLQlkc3NfZmNrOiBkc3NfZmNrIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmwzX2Rpdl9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxPjsKLQkJcmVnID0gPDB4MTEyMD47Ci0JfTsKLQogCWZkaWZfZmNrOiBmZGlmX2ZjayB7CiAJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9vbWFwNS5kdHNpCmluZGV4IDI1NmI3ZjYuLmIzMjFmZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDUuZHRzaQpAQCAtNjUxLDYgKzY1MSw3IEBACiAJCQlyZWcgPSA8MHg0YTBmNDAwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQl0aSxod21vZHMgPSAibWFpbGJveCI7CisJCQkjbWJveC1jZWxscyA9IDwxPjsKIAkJCXRpLG1ib3gtbnVtLXVzZXJzID0gPDM+OwogCQkJdGksbWJveC1udW0tZmlmb3MgPSA8OD47CiAJCQltYm94X2lwdTogbWJveF9pcHUgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcHJpbWEyLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9wcmltYTIuZHRzaQppbmRleCA5NjNiN2U1Li4xY2ExYTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9wcmltYTIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9wcmltYTIuZHRzaQpAQCAtNDEsNiArNDEsMTEgQEAKIAkJfTsKIAl9OwogCisJYXJtLXBtdSB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1wbXUiOworCQlpbnRlcnJ1cHRzID0gPDI5PjsKKwl9OworCiAJYXhpIHsKIAkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0xMzIsNiArMTM3LDcgQEAKIAkJCQlyZWcgPSA8MHg5MDAyMDAwMCAweDEwMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDMxPjsKIAkJCQljbG9ja3MgPSA8JmNsa3MgMzU+OworCQkJCXJlc2V0cyA9IDwmcnN0YyA2PjsKIAkJCX07CiAJCX07CiAKQEAgLTE3Myw2ICsxNzksNyBAQAogCQkJCWNvbXBhdGlibGUgPSAic2lyZixwcmltYTItZHNwaWYiOwogCQkJCXJlZyA9IDwweGE4MDAwMDAwIDB4MTAwMDA+OwogCQkJCWludGVycnVwdHMgPSA8OT47CisJCQkJcmVzZXRzID0gPCZyc3RjIDE+OwogCQkJfTsKIAogCQkJZ3BzQGE4MDEwMDAwIHsKQEAgLTE4MCw2ICsxODcsNyBAQAogCQkJCXJlZyA9IDwweGE4MDEwMDAwIDB4MTAwMDA+OwogCQkJCWludGVycnVwdHMgPSA8Nz47CiAJCQkJY2xvY2tzID0gPCZjbGtzIDk+OworCQkJCXJlc2V0cyA9IDwmcnN0YyAyPjsKIAkJCX07CiAKIAkJCWRzcEBhOTAwMDAwMCB7CkBAIC0xODcsNiArMTk1LDcgQEAKIAkJCQlyZWcgPSA8MHhhOTAwMDAwMCAweDEwMDAwMDA+OwogCQkJCWludGVycnVwdHMgPSA8OD47CiAJCQkJY2xvY2tzID0gPCZjbGtzIDg+OworCQkJCXJlc2V0cyA9IDwmcnN0YyAwPjsKIAkJCX07CiAJCX07CiAKQEAgLTUyNCwxMiArNTMzLDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLGZ1bmN0aW9uID0gInNkbW1jNSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkJCQlpMnNfbWNsa19waW5zX2E6IGkyc19tY2xrQDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyc19tY2xrIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYscGlucyA9ICJpMnNtY2xrZ3JwIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAiaTJzX21jbGsiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisJCQkJaTJzX2V4dF9jbGtfaW5wdXRfcGluc19hOiBpMnNfZXh0X2Nsa19pbnB1dEAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMnNfZXh0X2Nsa19pbnB1dCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLHBpbnMgPSAiaTJzX2V4dF9jbGtfaW5wdXRncnAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixmdW5jdGlvbiA9ICJpMnNfZXh0X2Nsa19pbnB1dCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJzX3BpbnNfYTogaTJzQDAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkycyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJmLHBpbnMgPSAiaTJzZ3JwIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAiaTJzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCQkJCWkyc19ub19kaW5fcGluc19hOiBpMnNfbm9fZGluQDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyc19ub19kaW4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixwaW5zID0gImkyc19ub19kaW5ncnAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixmdW5jdGlvbiA9ICJpMnNfbm9fZGluIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCQkJCWkyc182Y2huX3BpbnNfYTogaTJzXzZjaG5AMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJzXzZjaG4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixwaW5zID0gImkyc182Y2huZ3JwIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmYsZnVuY3Rpb24gPSAiaTJzXzZjaG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjOTdfcGluc19hOiBhYzk3QDAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjOTcgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lyZixwaW5zID0gImFjOTdncnAiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAtZ2VubWFpLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLWdlbm1haS5kdHMKaW5kZXggYTNlZDIzYy4uMTUxOGM1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAtZ2VubWFpLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yN3M3MjEwMC1nZW5tYWkuZHRzCkBAIC0yMSw3ICsyMSw4IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0MyLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgcncgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKKwkJYm9vdGFyZ3MgPSAiaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWYyOwogCX07CiAKIAltZW1vcnkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I3czcyMTAwLmR0c2kKaW5kZXggODAxYTU1Ni4uMjc3ZTczYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjdzNzIxMDAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yN3M3MjEwMC5kdHNpCkBAIC01MiwxNiArNTIsNiBAQAogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInVzYl94MSI7CiAJCX07CiAKLQkJLyogU3BlY2lhbCBDUEcgY2xvY2tzICovCi0JCWNwZ19jbG9ja3M6IGNwZ19jbG9ja3NAZmNmZTAwMDAgewotCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwotCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI3czcyMTAwLWNwZy1jbG9ja3MiLAotCQkJCSAgICAgInJlbmVzYXMscnotY3BnLWNsb2NrcyI7Ci0JCQlyZWcgPSA8MHhmY2ZlMDAwMCAweDE4PjsKLQkJCWNsb2NrcyA9IDwmZXh0YWxfY2xrPiwgPCZ1c2JfeDFfY2xrPjsKLQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwbGwiLCAiaSIsICJnIjsKLQkJfTsKLQogCQkvKiBGaXhlZCBmYWN0b3IgY2xvY2tzICovCiAJCWJfY2xrOiBiX2NsayB7CiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CkBAIC04OCw2ICs3OCwxNiBAQAogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInAwIjsKIAkJfTsKIAorCQkvKiBTcGVjaWFsIENQRyBjbG9ja3MgKi8KKwkJY3BnX2Nsb2NrczogY3BnX2Nsb2Nrc0BmY2ZlMDAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjdzNzIxMDAtY3BnLWNsb2NrcyIsCisJCQkJICAgICAicmVuZXNhcyxyei1jcGctY2xvY2tzIjsKKwkJCXJlZyA9IDwweGZjZmUwMDAwIDB4MTg+OworCQkJY2xvY2tzID0gPCZleHRhbF9jbGs+LCA8JnVzYl94MV9jbGs+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInBsbCIsICJpIiwgImciOworCQl9OworCiAJCS8qIE1TVFAgY2xvY2tzICovCiAJCW1zdHAzX2Nsa3M6IG1zdHAzX2Nsa3NAZmNmZTA0MjAgewogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwpAQCAtMTQ4LDk3ICsxNDgsNiBAQAogCQl9OwogCX07CiAKLQlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQGU4MjAxMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7Ci0JCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDA+OwotCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJcmVnID0gPDB4ZTgyMDEwMDAgMHgxMDAwPiwKLQkJCTwweGU4MjAyMDAwIDB4MTAwMD47Ci0JfTsKLQotCWkyYzA6IGkyY0BmY2ZlZTAwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJpaWMtcjdzNzIxMDAiLCAicmVuZXNhcyxyaWljLXJ6IjsKLQkJcmVnID0gPDB4ZmNmZWUwMDAgMHg0ND47Ci0JCWludGVycnVwdHMgPSA8MCAxNTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE1OCBJUlFfVFlQRV9FREdFX1JJU0lORz4sCi0JCQkgICAgIDwwIDE1OSBJUlFfVFlQRV9FREdFX1JJU0lORz4sCi0JCQkgICAgIDwwIDE2MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTYxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNjIgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE2MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTY0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQl9OwotCi0JaTJjMTogaTJjQGZjZmVlNDAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscmlpYy1yN3M3MjEwMCIsICJyZW5lc2FzLHJpaWMtcnoiOwotCQlyZWcgPSA8MHhmY2ZlZTQwMCAweDQ0PjsKLQkJaW50ZXJydXB0cyA9IDwwIDE2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTY2IElSUV9UWVBFX0VER0VfUklTSU5HPiwKLQkJCSAgICAgPDAgMTY3IElSUV9UWVBFX0VER0VfUklTSU5HPiwKLQkJCSAgICAgPDAgMTY4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTcxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNzIgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSN1M3MjEwMF9DTEtfSTJDMT47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OwotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCX07Ci0KLQlpMmMyOiBpMmNAZmNmZWU4MDAgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyaWljLXI3czcyMTAwIiwgInJlbmVzYXMscmlpYy1yeiI7Ci0JCXJlZyA9IDwweGZjZmVlODAwIDB4NDQ+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTczIElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNzQgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAotCQkJICAgICA8MCAxNzUgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAotCQkJICAgICA8MCAxNzYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE3NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTc4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxNzkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE4MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI3UzcyMTAwX0NMS19JMkMyPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQotCWkyYzM6IGkyY0BmY2ZlZWMwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJpaWMtcjdzNzIxMDAiLCAicmVuZXNhcyxyaWljLXJ6IjsKLQkJcmVnID0gPDB4ZmNmZWVjMDAgMHg0ND47Ci0JCWludGVycnVwdHMgPSA8MCAxODEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE4MiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCi0JCQkgICAgIDwwIDE4MyBJUlFfVFlQRV9FREdFX1JJU0lORz4sCi0JCQkgICAgIDwwIDE4NCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTg1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJICAgICA8MCAxODYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCi0JCQkgICAgIDwwIDE4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCSAgICAgPDAgMTg4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzM+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKLQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQl9OwotCi0JbXR1MjogdGltZXJAZmNmZjAwMDAgewotCQljb21wYXRpYmxlID0gInJlbmVzYXMsbXR1Mi1yN3M3MjEwMCIsICJyZW5lc2FzLG10dTIiOwotCQlyZWcgPSA8MHhmY2ZmMDAwMCAweDQwMD47Ci0JCWludGVycnVwdHMgPSA8MCAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCWludGVycnVwdC1uYW1lcyA9ICJ0Z2kwYSI7Ci0JCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSN1M3MjEwMF9DTEtfTVRVMj47Ci0JCWNsb2NrLW5hbWVzID0gImZjayI7Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQogCXNjaWYwOiBzZXJpYWxAZTgwMDcwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2NpZi1yN3M3MjEwMCIsICJyZW5lc2FzLHNjaWYiOwogCQlyZWcgPSA8MHhlODAwNzAwMCA2ND47CkBAIC00MDQsNCArMzEzLDk1IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CisKKwlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQGU4MjAxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJcmVnID0gPDB4ZTgyMDEwMDAgMHgxMDAwPiwKKwkJCTwweGU4MjAyMDAwIDB4MTAwMD47CisJfTsKKworCWkyYzA6IGkyY0BmY2ZlZTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJpaWMtcjdzNzIxMDAiLCAicmVuZXNhcyxyaWljLXJ6IjsKKwkJcmVnID0gPDB4ZmNmZWUwMDAgMHg0ND47CisJCWludGVycnVwdHMgPSA8MCAxNTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE1OCBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkgICAgIDwwIDE1OSBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkgICAgIDwwIDE2MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTYxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNjIgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE2MyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTY0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJaTJjMTogaTJjQGZjZmVlNDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInJlbmVzYXMscmlpYy1yN3M3MjEwMCIsICJyZW5lc2FzLHJpaWMtcnoiOworCQlyZWcgPSA8MHhmY2ZlZTQwMCAweDQ0PjsKKwkJaW50ZXJydXB0cyA9IDwwIDE2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTY2IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCSAgICAgPDAgMTY3IElSUV9UWVBFX0VER0VfUklTSU5HPiwKKwkJCSAgICAgPDAgMTY4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE3MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTcxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNzIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDlfY2xrcyBSN1M3MjEwMF9DTEtfSTJDMT47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlpMmMyOiBpMmNAZmNmZWU4MDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyaWljLXI3czcyMTAwIiwgInJlbmVzYXMscmlpYy1yeiI7CisJCXJlZyA9IDwweGZjZmVlODAwIDB4NDQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMTczIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNzQgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJICAgICA8MCAxNzUgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAorCQkJICAgICA8MCAxNzYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE3NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTc4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxNzkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE4MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI3UzcyMTAwX0NMS19JMkMyPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWkyYzM6IGkyY0BmY2ZlZWMwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJpaWMtcjdzNzIxMDAiLCAicmVuZXNhcyxyaWljLXJ6IjsKKwkJcmVnID0gPDB4ZmNmZWVjMDAgMHg0ND47CisJCWludGVycnVwdHMgPSA8MCAxODEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE4MiBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkgICAgIDwwIDE4MyBJUlFfVFlQRV9FREdFX1JJU0lORz4sCisJCQkgICAgIDwwIDE4NCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTg1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxODYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE4NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTg4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjdTNzIxMDBfQ0xLX0kyQzM+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbXR1MjogdGltZXJAZmNmZjAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsbXR1Mi1yN3M3MjEwMCIsICJyZW5lc2FzLG10dTIiOworCQlyZWcgPSA8MHhmY2ZmMDAwMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8MCAxMDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWludGVycnVwdC1uYW1lcyA9ICJ0Z2kwYSI7CisJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSN1M3MjEwMF9DTEtfTVRVMj47CisJCWNsb2NrLW5hbWVzID0gImZjayI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3M2E0LWFwZTZldm0tcmVmZXJlbmNlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQtYXBlNmV2bS1yZWZlcmVuY2UuZHRzCmluZGV4IGE4NjBmMzIuLjg0ZTA1ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQtYXBlNmV2bS1yZWZlcmVuY2UuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQtYXBlNmV2bS1yZWZlcmVuY2UuZHRzCkBAIC0yMSw3ICsyMSw4IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0MwLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgcnciOworCQlib290YXJncyA9ICJpZ25vcmVfbG9nbGV2ZWwgcnciOworCQlzdGRvdXQtcGF0aCA9ICZzY2lmYTA7CiAJfTsKIAogCW1lbW9yeUA0MDAwMDAwMCB7CkBAIC05Myw2ICs5NCwxMCBAQAogCXZvbHRhZ2UtdG9sZXJhbmNlID0gPDE+OyAvKiAxJSAqLwogfTsKIAorJmNtdDEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZwZmMgewogCXNjaWZhMF9waW5zOiBzZXJpYWwwIHsKIAkJcmVuZXNhcyxncm91cHMgPSAic2NpZmEwX2RhdGEiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzNhNC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzNhNC5kdHNpCmluZGV4IGVmMTUyZTMuLjVhYzU3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTczYTQuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3M2E0LmR0c2kKQEAgLTMwLDE4ICszMCw2IEBACiAJCX07CiAJfTsKIAotCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAZjEwMDEwMDAgewotCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1LWdpYyI7Ci0JCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDA+OwotCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJcmVnID0gPDAgMHhmMTAwMTAwMCAwIDB4MTAwMD4sCi0JCQk8MCAweGYxMDAyMDAwIDAgMHgxMDAwPiwKLQkJCTwwIDB4ZjEwMDQwMDAgMCAweDIwMDA+LAotCQkJPDAgMHhmMTAwNjAwMCAwIDB4MjAwMD47Ci0JCWludGVycnVwdHMgPSA8MSA5IChHSUNfQ1BVX01BU0tfU0lNUExFKDQpIHwgSVJRX1RZUEVfTEVWRUxfSElHSCk+OwotCX07Ci0KIAl0aW1lciB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY3LXRpbWVyIjsKIAkJaW50ZXJydXB0cyA9IDwxIDEzIChHSUNfQ1BVX01BU0tfU0lNUExFKDQpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCkBAIC01MCw2ICszOCw5MSBAQAogCQkJICAgICA8MSAxMCAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0xPVyk+OwogCX07CiAKKwlkbWFjOiBkbWEtbXVsdGlwbGV4ZXIgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2hkbWEtbXV4IjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKwkJZG1hLWNoYW5uZWxzID0gPDIwPjsKKwkJZG1hLXJlcXVlc3RzID0gPDI1Nj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCisJCWRtYTA6IGRtYS1jb250cm9sbGVyQGU2NzAwMDIwIHsKKwkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzaGRtYS1yOGE3M2E0IjsKKwkJCXJlZyA9IDwwIDB4ZTY3MDAwMjAgMCAweDg5ZTA+OworCQkJaW50ZXJydXB0cyA9IDwwIDIyMCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjAwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMDEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIwMiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjAzIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMDQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIwNSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjA2IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMDcgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIwOCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjA5IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTAgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIxMSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjEyIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTMgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIxNCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjE1IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTYgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCQkwIDIxNyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJCTAgMjE4IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkJMCAyMTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlpbnRlcnJ1cHQtbmFtZXMgPSAiZXJyb3IiLAorCQkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKKwkJCQkJImNoNCIsICJjaDUiLCAiY2g2IiwgImNoNyIsCisJCQkJCSJjaDgiLCAiY2g5IiwgImNoMTAiLCAiY2gxMSIsCisJCQkJCSJjaDEyIiwgImNoMTMiLCAiY2gxNCIsICJjaDE1IiwKKwkJCQkJImNoMTYiLCAiY2gxNyIsICJjaDE4IiwgImNoMTkiOworCQl9OworCX07CisKKwlwZmM6IHBmY0BlNjA1MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxwZmMtcjhhNzNhNCI7CisJCXJlZyA9IDwwIDB4ZTYwNTAwMDAgMCAweDkwMDA+OworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0KKwkJCTwmaXJxYzAgIDAgMD4sIDwmaXJxYzAgIDEgMD4sIDwmaXJxYzAgIDIgMD4sIDwmaXJxYzAgIDMgMD4sCisJCQk8JmlycWMwICA0IDA+LCA8JmlycWMwICA1IDA+LCA8JmlycWMwICA2IDA+LCA8JmlycWMwICA3IDA+LAorCQkJPCZpcnFjMCAgOCAwPiwgPCZpcnFjMCAgOSAwPiwgPCZpcnFjMCAxMCAwPiwgPCZpcnFjMCAxMSAwPiwKKwkJCTwmaXJxYzAgMTIgMD4sIDwmaXJxYzAgMTMgMD4sIDwmaXJxYzAgMTQgMD4sIDwmaXJxYzAgMTUgMD4sCisJCQk8JmlycWMwIDE2IDA+LCA8JmlycWMwIDE3IDA+LCA8JmlycWMwIDE4IDA+LCA8JmlycWMwIDE5IDA+LAorCQkJPCZpcnFjMCAyMCAwPiwgPCZpcnFjMCAyMSAwPiwgPCZpcnFjMCAyMiAwPiwgPCZpcnFjMCAyMyAwPiwKKwkJCTwmaXJxYzAgMjQgMD4sIDwmaXJxYzAgMjUgMD4sIDwmaXJxYzAgMjYgMD4sIDwmaXJxYzAgMjcgMD4sCisJCQk8JmlycWMwIDI4IDA+LCA8JmlycWMwIDI5IDA+LCA8JmlycWMwIDMwIDA+LCA8JmlycWMwIDMxIDA+LAorCQkJPCZpcnFjMSAgMCAwPiwgPCZpcnFjMSAgMSAwPiwgPCZpcnFjMSAgMiAwPiwgPCZpcnFjMSAgMyAwPiwKKwkJCTwmaXJxYzEgIDQgMD4sIDwmaXJxYzEgIDUgMD4sIDwmaXJxYzEgIDYgMD4sIDwmaXJxYzEgIDcgMD4sCisJCQk8JmlycWMxICA4IDA+LCA8JmlycWMxICA5IDA+LCA8JmlycWMxIDEwIDA+LCA8JmlycWMxIDExIDA+LAorCQkJPCZpcnFjMSAxMiAwPiwgPCZpcnFjMSAxMyAwPiwgPCZpcnFjMSAxNCAwPiwgPCZpcnFjMSAxNSAwPiwKKwkJCTwmaXJxYzEgMTYgMD4sIDwmaXJxYzEgMTcgMD4sIDwmaXJxYzEgMTggMD4sIDwmaXJxYzEgMTkgMD4sCisJCQk8JmlycWMxIDIwIDA+LCA8JmlycWMxIDIxIDA+LCA8JmlycWMxIDIyIDA+LCA8JmlycWMxIDIzIDA+LAorCQkJPCZpcnFjMSAyNCAwPiwgPCZpcnFjMSAyNSAwPjsKKwl9OworCisJaTJjNTogaTJjQGU2MGIwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCXJlZyA9IDwwIDB4ZTYwYjAwMDAgMCAweDQyOD47CisJCWludGVycnVwdHMgPSA8MCAxNzkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJY210MTogdGltZXJAZTYxMzAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsY210LTQ4LXI4YTczYTQiLCAicmVuZXNhcyxjbXQtNDgtZ2VuMiI7CisJCXJlZyA9IDwwIDB4ZTYxMzAwMDAgMCAweDEwMDQ+OworCQlpbnRlcnJ1cHRzID0gPDAgMTIwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCXJlbmVzYXMsY2hhbm5lbHMtbWFzayA9IDwweGZmPjsKKworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAlpcnFjMDogaW50ZXJydXB0LWNvbnRyb2xsZXJAZTYxYzAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsaXJxYy1yOGE3M2E0IiwgInJlbmVzYXMsaXJxYyI7CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CkBAIC0xMjIsNDggKzE5NSw2IEBACiAJCQkgICAgIDwwIDU3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCX07CiAKLQlkbWFjOiBkbWEtbXVsdGlwbGV4ZXJAMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzaGRtYS1tdXgiOwotCQkjZG1hLWNlbGxzID0gPDE+OwotCQlkbWEtY2hhbm5lbHMgPSA8MjA+OwotCQlkbWEtcmVxdWVzdHMgPSA8MjU2PjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JCSNzaXplLWNlbGxzID0gPDI+OwotCQlyYW5nZXM7Ci0KLQkJZG1hMDogZG1hLWNvbnRyb2xsZXJAZTY3MDAwMjAgewotCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNoZG1hLXI4YTczYTQiOwotCQkJcmVnID0gPDAgMHhlNjcwMDAyMCAwIDB4ODllMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDAgMjIwIElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDAgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIwMSBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjAyIElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDMgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIwNCBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjA1IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDYgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIwNyBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjA4IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMDkgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxMCBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjExIElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMTIgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxMyBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjE0IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMTUgSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxNiBJUlFfVFlQRV9MRVZFTF9ISUdICi0JCQkJCTAgMjE3IElSUV9UWVBFX0xFVkVMX0hJR0gKLQkJCQkJMCAyMTggSVJRX1RZUEVfTEVWRUxfSElHSAotCQkJCQkwIDIxOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCWludGVycnVwdC1uYW1lcyA9ICJlcnJvciIsCi0JCQkJCSJjaDAiLCAiY2gxIiwgImNoMiIsICJjaDMiLAotCQkJCQkiY2g0IiwgImNoNSIsICJjaDYiLCAiY2g3IiwKLQkJCQkJImNoOCIsICJjaDkiLCAiY2gxMCIsICJjaDExIiwKLQkJCQkJImNoMTIiLCAiY2gxMyIsICJjaDE0IiwgImNoMTUiLAotCQkJCQkiY2gxNiIsICJjaDE3IiwgImNoMTgiLCAiY2gxOSI7Ci0JCX07Ci0JfTsKLQogCXRoZXJtYWxAZTYxZjAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsdGhlcm1hbC1yOGE3M2E0IiwgInJlbmVzYXMscmNhci10aGVybWFsIjsKIAkJcmVnID0gPDAgMHhlNjFmMDAwMCAwIDB4MTQ+LCA8MCAweGU2MWYwMTAwIDAgMHgzOD4sCkBAIC0xNzQsNyArMjA1LDcgQEAKIAlpMmMwOiBpMmNAZTY1MDAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzNhNCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDAgMHhlNjUwMDAwMCAwIDB4NDI4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTE4Myw3ICsyMTQsNyBAQAogCWkyYzE6IGkyY0BlNjUxMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1yOGE3M2E0IiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MCAweGU2NTEwMDAwIDAgMHg0Mjg+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTc1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtMTkyLDcgKzIyMyw3IEBACiAJaTJjMjogaTJjQGU2NTIwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1MjAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxNzYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0yMDEsNyArMjMyLDcgQEAKIAlpMmMzOiBpMmNAZTY1MzAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzNhNCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDAgMHhlNjUzMDAwMCAwIDB4NDI4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTIxMCwyNSArMjQxLDE2IEBACiAJaTJjNDogaTJjQGU2NTQwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1NDAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxNzggSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCWkyYzU6IGkyY0BlNjBiMDAwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKLQkJcmVnID0gPDAgMHhlNjBiMDAwMCAwIDB4NDI4PjsKLQkJaW50ZXJydXB0cyA9IDwwIDE3OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQl9OwotCiAJaTJjNjogaTJjQGU2NTUwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1NTAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxODQgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CkBAIC0yMzcsNyArMjU5LDcgQEAKIAlpMmM3OiBpMmNAZTY1NjAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtcjhhNzNhNCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDAgMHhlNjU2MDAwMCAwIDB4NDI4PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE4NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTI0NiwxMiArMjY4LDI2IEBACiAJaTJjODogaTJjQGU2NTcwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXI4YTczYTQiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwwIDB4ZTY1NzAwMDAgMCAweDQyOD47CiAJCWludGVycnVwdHMgPSA8MCAxNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXNjaWZiMDogc2VyaWFsQGU2YzIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZiLXI4YTczYTQiLCAicmVuZXNhcyxzY2lmYiI7CisJCXJlZyA9IDwwIDB4ZTZjMjAwMDAgMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8MCAxNDggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNjaWZiMTogc2VyaWFsQGU2YzMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZiLXI4YTczYTQiLCAicmVuZXNhcyxzY2lmYiI7CisJCXJlZyA9IDwwIDB4ZTZjMzAwMDAgMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8MCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXNjaWZhMDogc2VyaWFsQGU2YzQwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZhLXI4YTczYTQiLCAicmVuZXNhcyxzY2lmYSI7CiAJCXJlZyA9IDwwIDB4ZTZjNDAwMDAgMCAweDEwMD47CkBAIC0yNjYsNzMgKzMwMiwyMCBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKLQlzY2lmYjI6IHNlcmlhbEBlNmMyMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmYi1yOGE3M2E0IiwgInJlbmVzYXMsc2NpZmIiOwotCQlyZWcgPSA8MCAweGU2YzIwMDAwIDAgMHgxMDA+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTQ4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCX07Ci0KLQlzY2lmYjM6IHNlcmlhbEBlNmMzMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzY2lmYi1yOGE3M2E0IiwgInJlbmVzYXMsc2NpZmIiOwotCQlyZWcgPSA8MCAweGU2YzMwMDAwIDAgMHgxMDA+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTQ5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCX07Ci0KLQlzY2lmYjQ6IHNlcmlhbEBlNmNlMDAwMCB7CisJc2NpZmIyOiBzZXJpYWxAZTZjZTAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2NpZmItcjhhNzNhNCIsICJyZW5lc2FzLHNjaWZiIjsKIAkJcmVnID0gPDAgMHhlNmNlMDAwMCAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDE1MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCi0Jc2NpZmI1OiBzZXJpYWxAZTZjZjAwMDAgeworCXNjaWZiMzogc2VyaWFsQGU2Y2YwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZiLXI4YTczYTQiLCAicmVuZXNhcyxzY2lmYiI7CiAJCXJlZyA9IDwwIDB4ZTZjZjAwMDAgMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAotCW1tY2lmMDogbW1jQGVlMjAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNoLW1tY2lmIjsKLQkJcmVnID0gPDAgMHhlZTIwMDAwMCAwIDB4ODA+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQlyZWctaW8td2lkdGggPSA8ND47Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQotCW1tY2lmMTogbW1jQGVlMjIwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNoLW1tY2lmIjsKLQkJcmVnID0gPDAgMHhlZTIyMDAwMCAwIDB4ODA+OwotCQlpbnRlcnJ1cHRzID0gPDAgMTcwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQlyZWctaW8td2lkdGggPSA8ND47Ci0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JfTsKLQotCXBmYzogcGZjQGU2MDUwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHBmYy1yOGE3M2E0IjsKLQkJcmVnID0gPDAgMHhlNjA1MDAwMCAwIDB4OTAwMD47Ci0JCWdwaW8tY29udHJvbGxlcjsKLQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCWludGVycnVwdHMtZXh0ZW5kZWQgPQotCQkJPCZpcnFjMCAgMCAwPiwgPCZpcnFjMCAgMSAwPiwgPCZpcnFjMCAgMiAwPiwgPCZpcnFjMCAgMyAwPiwKLQkJCTwmaXJxYzAgIDQgMD4sIDwmaXJxYzAgIDUgMD4sIDwmaXJxYzAgIDYgMD4sIDwmaXJxYzAgIDcgMD4sCi0JCQk8JmlycWMwICA4IDA+LCA8JmlycWMwICA5IDA+LCA8JmlycWMwIDEwIDA+LCA8JmlycWMwIDExIDA+LAotCQkJPCZpcnFjMCAxMiAwPiwgPCZpcnFjMCAxMyAwPiwgPCZpcnFjMCAxNCAwPiwgPCZpcnFjMCAxNSAwPiwKLQkJCTwmaXJxYzAgMTYgMD4sIDwmaXJxYzAgMTcgMD4sIDwmaXJxYzAgMTggMD4sIDwmaXJxYzAgMTkgMD4sCi0JCQk8JmlycWMwIDIwIDA+LCA8JmlycWMwIDIxIDA+LCA8JmlycWMwIDIyIDA+LCA8JmlycWMwIDIzIDA+LAotCQkJPCZpcnFjMCAyNCAwPiwgPCZpcnFjMCAyNSAwPiwgPCZpcnFjMCAyNiAwPiwgPCZpcnFjMCAyNyAwPiwKLQkJCTwmaXJxYzAgMjggMD4sIDwmaXJxYzAgMjkgMD4sIDwmaXJxYzAgMzAgMD4sIDwmaXJxYzAgMzEgMD4sCi0JCQk8JmlycWMxICAwIDA+LCA8JmlycWMxICAxIDA+LCA8JmlycWMxICAyIDA+LCA8JmlycWMxICAzIDA+LAotCQkJPCZpcnFjMSAgNCAwPiwgPCZpcnFjMSAgNSAwPiwgPCZpcnFjMSAgNiAwPiwgPCZpcnFjMSAgNyAwPiwKLQkJCTwmaXJxYzEgIDggMD4sIDwmaXJxYzEgIDkgMD4sIDwmaXJxYzEgMTAgMD4sIDwmaXJxYzEgMTEgMD4sCi0JCQk8JmlycWMxIDEyIDA+LCA8JmlycWMxIDEzIDA+LCA8JmlycWMxIDE0IDA+LCA8JmlycWMxIDE1IDA+LAotCQkJPCZpcnFjMSAxNiAwPiwgPCZpcnFjMSAxNyAwPiwgPCZpcnFjMSAxOCAwPiwgPCZpcnFjMSAxOSAwPiwKLQkJCTwmaXJxYzEgMjAgMD4sIDwmaXJxYzEgMjEgMD4sIDwmaXJxYzEgMjIgMD4sIDwmaXJxYzEgMjMgMD4sCi0JCQk8JmlycWMxIDI0IDA+LCA8JmlycWMxIDI1IDA+OwotCX07Ci0KIAlzZGhpMDogc2RAZWUxMDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2RoaS1yOGE3M2E0IjsKIAkJcmVnID0gPDAgMHhlZTEwMDAwMCAwIDB4MTAwPjsKQEAgLTM1Niw0ICszMzksMzIgQEAKIAkJY2FwLXNkLWhpZ2hzcGVlZDsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OworCisJbW1jaWYwOiBtbWNAZWUyMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2gtbW1jaWYiOworCQlyZWcgPSA8MCAweGVlMjAwMDAwIDAgMHg4MD47CisJCWludGVycnVwdHMgPSA8MCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbW1jaWYxOiBtbWNAZWUyMjAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2gtbW1jaWYiOworCQlyZWcgPSA8MCAweGVlMjIwMDAwIDAgMHg4MD47CisJCWludGVycnVwdHMgPSA8MCAxNzAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBmMTAwMTAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUtZ2ljIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlyZWcgPSA8MCAweGYxMDAxMDAwIDAgMHgxMDAwPiwKKwkJCTwwIDB4ZjEwMDIwMDAgMCAweDEwMDA+LAorCQkJPDAgMHhmMTAwNDAwMCAwIDB4MjAwMD4sCisJCQk8MCAweGYxMDA2MDAwIDAgMHgyMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxIDkgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKT47CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLWFybWFkaWxsbzgwMGV2YS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLWFybWFkaWxsbzgwMGV2YS5kdHMKaW5kZXggZWZmYjdiNC4uZDRhZjRkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc0MC1hcm1hZGlsbG84MDBldmEuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NDAtYXJtYWRpbGxvODAwZXZhLmR0cwpAQCAtMjUsNiArMjUsNyBAQAogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MxLDExNTIwMCBlYXJseXByaW50az1zaC1zY2kuMSwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCBydyI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWZhMTsKIAl9OwogCiAJbWVtb3J5IHsKQEAgLTc3LDcgKzc4LDcgQEAKIAkJcmVndWxhdG9yLWJvb3Qtb247CiAJfTsKIAotCWdwaW8ta2V5cyB7CisJa2V5Ym9hcmQgewogCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CiAKIAkJcG93ZXIta2V5IHsKQEAgLTI5OCwzICsyOTksNyBAQAogCiAJc3RhdHVzID0gIm9rYXkiOwogfTsKKworJnRtdTAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzQwLmR0c2kKaW5kZXggZWVkNjk3YS4uYThhNjc0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc0MC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NDAuZHRzaQpAQCAtNzEsNiArNzEsNyBAQAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19JTlRDQT47CiAJfTsKIAogCS8qIGlycXBpbjE6IElSUTggLSBJUlExNSAqLwpAQCAtOTEsNiArOTIsNyBAQAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19JTlRDQT47CiAJfTsKIAogCS8qIGlycXBpbjI6IElSUTE2IC0gSVJRMjMgKi8KQEAgLTExMSw2ICsxMTMsNyBAQAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19JTlRDQT47CiAJfTsKIAogCS8qIGlycXBpbjM6IElSUTI0IC0gSVJRMzEgKi8KQEAgLTEzMSw2ICsxMzQsNyBAQAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19JTlRDQT47CiAJfTsKIAogCWV0aGVyOiBldGhlcm5ldEBlOWEwMDAwMCB7CkBAIC0xOTMsNyArMTk3LDcgQEAKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNjaWZhLXI4YTc3NDAiLCAicmVuZXNhcyxzY2lmYSI7CiAJCXJlZyA9IDwweGU2YzYwMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJY2xvY2tzID0gPCZtc3RwMl9jbGtzIFI4QTc3NDBfQ0xLX1NDSUZBMD47CisJCWNsb2NrcyA9IDwmbXN0cDJfY2xrcyBSOEE3NzQwX0NMS19TQ0lGQTI+OwogCQljbG9jay1uYW1lcyA9ICJzY2lfaWNrIjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtMzMxLDYgKzMzNSwzNCBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwl0bXUwOiB0aW1lckBmZmY4MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx0bXUtcjhhNzc0MCIsICJyZW5lc2FzLHRtdSI7CisJCXJlZyA9IDwweGZmZjgwMDAwIDB4MmM+OworCQlpbnRlcnJ1cHRzID0gPDAgMTk4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAxOTkgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDIwMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3NDBfQ0xLX1RNVTA+OworCQljbG9jay1uYW1lcyA9ICJmY2siOworCisJCSNyZW5lc2FzLGNoYW5uZWxzID0gPDM+OworCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXRtdTE6IHRpbWVyQGZmZjkwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHRtdS1yOGE3NzQwIiwgInJlbmVzYXMsdG11IjsKKwkJcmVnID0gPDB4ZmZmOTAwMDAgMHgyYz47CisJCWludGVycnVwdHMgPSA8MCAxNzAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDE3MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMTcyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAxX2Nsa3MgUjhBNzc0MF9DTEtfVE1VMT47CisJCWNsb2NrLW5hbWVzID0gImZjayI7CisKKwkJI3JlbmVzYXMsY2hhbm5lbHMgPSA8Mz47CisKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJY2xvY2tzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwpAQCAtNDQ4LDggKzQ4MCw4IEBACiAJCW1zdHAyX2Nsa3M6IG1zdHAyX2Nsa3NAZTYxNTAxMzggewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3NDAtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwogCQkJcmVnID0gPDB4ZTYxNTAxMzggND4sIDwweGU2MTUwMDQwIDQ+OwotCQkJY2xvY2tzID0gPCZzdWJfY2xrPiwgPCZzdWJfY2xrPiwKLQkJCQkgPCZjcGdfY2xvY2tzIFI4QTc3NDBfQ0xLX0hQPiwKKwkJCWNsb2NrcyA9IDwmc3ViX2Nsaz4sIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCisJCQkJIDwmc3ViX2Nsaz4sIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCiAJCQkJIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCiAJCQkJIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCiAJCQkJIDwmY3BnX2Nsb2NrcyBSOEE3NzQwX0NMS19IUD4sCkBAIC00NTgsNyArNDkwLDggQEAKIAkJCQkgPCZzdWJfY2xrPjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDwKLQkJCQlSOEE3NzQwX0NMS19TQ0lGQTYgUjhBNzc0MF9DTEtfU0NJRkE3CisJCQkJUjhBNzc0MF9DTEtfU0NJRkE2IFI4QTc3NDBfQ0xLX0lOVENBCisJCQkJUjhBNzc0MF9DTEtfU0NJRkE3CiAJCQkJUjhBNzc0MF9DTEtfRE1BQzEgUjhBNzc0MF9DTEtfRE1BQzIKIAkJCQlSOEE3NzQwX0NMS19ETUFDMyBSOEE3NzQwX0NMS19VU0JETUFDCiAJCQkJUjhBNzc0MF9DTEtfU0NJRkE1IFI4QTc3NDBfQ0xLX1NDSUZCCkBAIC00NjcsNyArNTAwLDggQEAKIAkJCQlSOEE3NzQwX0NMS19TQ0lGQTQKIAkJCT47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPQotCQkJCSJzY2lmYTYiLCAic2NpZmE3IiwgImRtYWMxIiwgImRtYWMyIiwgImRtYWMzIiwKKwkJCQkic2NpZmE2IiwgImludGNhIiwKKwkJCQkic2NpZmE3IiwgImRtYWMxIiwgImRtYWMyIiwgImRtYWMzIiwKIAkJCQkidXNiZG1hYyIsICJzY2lmYTUiLCAic2NpZmIiLCAic2NpZmEwIiwgInNjaWZhMSIsCiAJCQkJInNjaWZhMiIsICJzY2lmYTMiLCAic2NpZmE0IjsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzgtYm9ja3ctcmVmZXJlbmNlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzgtYm9ja3ctcmVmZXJlbmNlLmR0cwppbmRleCAzMzQyYzc0Li4wNGMwYzM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LWJvY2t3LXJlZmVyZW5jZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OC1ib2Nrdy1yZWZlcmVuY2UuZHRzCkBAIC0yOCw3ICsyOCw4IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0MwLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgcm9vdD0vZGV2L25mcyBpcD1kaGNwIHJ3IjsKKwkJYm9vdGFyZ3MgPSAiaWdub3JlX2xvZ2xldmVsIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCBydyI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWYwOwogCX07CiAKIAltZW1vcnkgewpAQCAtNzMsNiArNzQsMTAgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismdG11MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnBmYyB7CiAJc2NpZjBfcGluczogc2VyaWFsMCB7CiAJCXJlbmVzYXMsZ3JvdXBzID0gInNjaWYwX2RhdGFfYSIsICJzY2lmMF9jdHJsIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzguZHRzaQppbmRleCAzMTVlYzYyLi5lZjg1MzM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OC5kdHNpCkBAIC0xNjIsNiArMTYyLDQyIEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXRtdTA6IHRpbWVyQGZmZDgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHRtdS1yOGE3Nzc4IiwgInJlbmVzYXMsdG11IjsKKwkJcmVnID0gPDB4ZmZkODAwMDAgMHgzMD47CisJCWludGVycnVwdHMgPSA8MCAzMiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMzMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDM0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCSNyZW5lc2FzLGNoYW5uZWxzID0gPDM+OworCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXRtdTE6IHRpbWVyQGZmZDgxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHRtdS1yOGE3Nzc4IiwgInJlbmVzYXMsdG11IjsKKwkJcmVnID0gPDB4ZmZkODEwMDAgMHgzMD47CisJCWludGVycnVwdHMgPSA8MCAzNiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMzcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDM4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCSNyZW5lc2FzLGNoYW5uZWxzID0gPDM+OworCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXRtdTI6IHRpbWVyQGZmZDgyMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHRtdS1yOGE3Nzc4IiwgInJlbmVzYXMsdG11IjsKKwkJcmVnID0gPDB4ZmZkODIwMDAgMHgzMD47CisJCWludGVycnVwdHMgPSA8MCA0MCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgNDEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDQyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCSNyZW5lc2FzLGNoYW5uZWxzID0gPDM+OworCisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXNjaWYwOiBzZXJpYWxAZmZlNDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2NpZi1yOGE3Nzc4IiwgInJlbmVzYXMsc2NpZiI7CiAJCXJlZyA9IDwweGZmZTQwMDAwIDB4MTAwPjsKQEAgLTIxNSw4ICsyNTEsNiBAQAogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2RoaS1yOGE3Nzc4IjsKIAkJcmVnID0gPDB4ZmZlNGMwMDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgODcgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7Ci0JCWNhcC1zZGlvLWlycTsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0yMjQsOCArMjU4LDYgQEAKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHNkaGktcjhhNzc3OCI7CiAJCXJlZyA9IDwweGZmZTRkMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDg4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQljYXAtc2QtaGlnaHNwZWVkOwotCQljYXAtc2Rpby1pcnE7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMjMzLDggKzI2NSw2IEBACiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxzZGhpLXI4YTc3NzgiOwogCQlyZWcgPSA8MHhmZmU0ZjAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCA4NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQkJY2FwLXNkaW8taXJxOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzktbWFyemVuLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzktbWFyemVuLmR0cwppbmRleCBjMTYwNDA0Li5lODNkNDBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LW1hcnplbi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OS1tYXJ6ZW4uZHRzCkBAIC0yNSw2ICsyNSw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDMiwxMTUyMDAgaWdub3JlX2xvZ2xldmVsIHJvb3Q9L2Rldi9uZnMgaXA9b24iOworCQlzdGRvdXQtcGF0aCA9ICZzY2lmMjsKIAl9OwogCiAJbWVtb3J5IHsKQEAgLTY4LDYgKzY5LDc4IEBACiAJCQlncGlvcyA9IDwmZ3BpbzQgMzEgR1BJT19BQ1RJVkVfSElHSD47CiAJCX07CiAJfTsKKworCXZnYS1lbmNvZGVyIHsKKwkJY29tcGF0aWJsZSA9ICJhZGksYWR2NzEyMyI7CisKKwkJcG9ydHMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJdmdhX2VuY19pbjogZW5kcG9pbnQgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmR1X291dF9yZ2IwPjsKKwkJCQl9OworCQkJfTsKKwkJCXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCXZnYV9lbmNfb3V0OiBlbmRwb2ludCB7CisJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdmdhX2luPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCisJdmdhIHsKKwkJY29tcGF0aWJsZSA9ICJ2Z2EtY29ubmVjdG9yIjsKKworCQlwb3J0IHsKKwkJCXZnYV9pbjogZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdmdhX2VuY19vdXQ+OworCQkJfTsKKwkJfTsKKwl9OworCisJbHZkcy1lbmNvZGVyIHsKKwkJY29tcGF0aWJsZSA9ICJ0aGluZSx0aGM2M2x2ZG04M2QiOworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWx2ZHNfZW5jX2luOiBlbmRwb2ludCB7CisJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmZHVfb3V0X3JnYjE+OworCQkJCX07CisJCQl9OworCQkJcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQkJbHZkc19jb25uZWN0b3I6IGVuZHBvaW50IHsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmR1IHsKKwlwaW5jdHJsLTAgPSA8JmR1X3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJc3RhdHVzID0gIm9rYXkiOworCisJcG9ydHMgeworCQlwb3J0QDAgeworCQkJZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdmdhX2VuY19pbj47CisJCQl9OworCQl9OworCQlwb3J0QDEgeworCQkJZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmbHZkc19lbmNfaW4+OworCQkJfTsKKwkJfTsKKwl9OwogfTsKIAogJmlycXBpbjAgewpAQCAtODMsNiArMTU2LDE3IEBACiB9OwogCiAmcGZjIHsKKwlkdV9waW5zOiBkdSB7CisJCWR1MCB7CisJCQlyZW5lc2FzLGdyb3VwcyA9ICJkdTBfcmdiODg4IiwgImR1MF9zeW5jXzEiLCAiZHUwX2Nsa19vdXRfMCI7CisJCQlyZW5lc2FzLGZ1bmN0aW9uID0gImR1MCI7CisJCX07CisJCWR1MSB7CisJCQlyZW5lc2FzLGdyb3VwcyA9ICJkdTFfcmdiNjY2IiwgImR1MV9zeW5jXzEiLCAiZHUxX2Nsa19vdXQiOworCQkJcmVuZXNhcyxmdW5jdGlvbiA9ICJkdTEiOworCQl9OworCX07CisKIAlsYW4wX3BpbnM6IGxhbjAgewogCQlpbnRjIHsKIAkJCXJlbmVzYXMsZ3JvdXBzID0gImludGNfaXJxMV9iIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3NzkuZHRzaQppbmRleCA3Y2ZiYTlhLi5lZGU5YTI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzc5LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc3OS5kdHNpCkBAIC0zMDMsNyArMzAzLDcgQEAKIAl9OwogCiAJc2F0YTogc2F0YUBmYzYwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLXNhdGEiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2F0YS1yOGE3Nzc5IiwgInJlbmVzYXMscmNhci1zYXRhIjsKIAkJcmVnID0gPDB4ZmM2MDAwMDAgMHgyMDAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3NzlfQ0xLX1NBVEE+OwpAQCAtMzE0LDggKzMxNCw2IEBACiAJCXJlZyA9IDwweGZmZTRjMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3NzlfQ0xLX1NESEkwPjsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQkJY2FwLXNkaW8taXJxOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTMyNCw4ICszMjIsNiBAQAogCQlyZWcgPSA8MHhmZmU0ZDAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxMDUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3Nzc5X0NMS19TREhJMT47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7Ci0JCWNhcC1zZGlvLWlycTsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zMzQsOCArMzMwLDYgQEAKIAkJcmVnID0gPDB4ZmZlNGUwMDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc3OV9DTEtfU0RISTI+OwotCQljYXAtc2QtaGlnaHNwZWVkOwotCQljYXAtc2Rpby1pcnE7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzQ0LDggKzMzOCw2IEBACiAJCXJlZyA9IDwweGZmZTRmMDAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDwwIDEwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3NzlfQ0xLX1NESEkzPjsKLQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQkJY2FwLXNkaW8taXJxOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTM3OSw2ICszNzEsMzAgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJZHU6IGRpc3BsYXlAZmZmODAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsZHUtcjhhNzc3OSI7CisJCXJlZyA9IDwwIDB4ZmZmODAwMDAgMCAweDQwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDMxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAxX2Nsa3MgUjhBNzc3OV9DTEtfRFU+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWR1X291dF9yZ2IwOiBlbmRwb2ludCB7CisJCQkJfTsKKwkJCX07CisJCQlwb3J0QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCQlkdV9vdXRfcmdiMTogZW5kcG9pbnQgeworCQkJCX07CisJCQl9OworCQl9OworCX07CisKIAljbG9ja3MgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkwLWxhZ2VyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAtbGFnZXIuZHRzCmluZGV4IDY5MDk4YjkuLjYzNmQ1M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAtbGFnZXIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAtbGFnZXIuZHRzCkBAIC05LDYgKzksMzQgQEAKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKKy8qCisgKiBTU0ktQUs0NjQzCisgKgorICogU1cxOiAxOiBBSzQ2NDMKKyAqICAgICAgMjogQ04yMgorICogICAgICAzOiBBRFY3NTExCisgKgorICogVGhpcyBjb21tYW5kIGlzIHJlcXVpcmVkIHdoZW4gUGxheWJhY2svQ2FwdHVyZQorICoKKyAqCWFtaXhlciBzZXQgIkxJTkVPVVQgTWl4ZXIgREFDTCIgb24KKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQiIDEwMCUKKyAqCWFtaXhlciBzZXQgIkRWQyBJbiIgMTAwJQorICoKKyAqIFlvdSBjYW4gdXNlIE11dGUKKyAqCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IE11dGUiIG9uCisgKglhbWl4ZXIgc2V0ICJEVkMgSW4gTXV0ZSIgb24KKyAqCisgKiBZb3UgY2FuIHVzZSBWb2x1bWUgUmFtcAorICoKKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQgUmFtcCBVcCBSYXRlIiAgICIwLjEyNSBkQi82NCBzdGVwcyIKKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQgUmFtcCBEb3duIFJhdGUiICIwLjEyNSBkQi81MTIgc3RlcHMiCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IFJhbXAiIG9uCisgKglhcGxheSB4eHgud2F2ICYKKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQiICA4MCUgIC8vIFZvbHVtZSBEb3duCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IiAxMDAlICAvLyBWb2x1bWUgVXAKKyAqLworCiAvZHRzLXYxLzsKICNpbmNsdWRlICJyOGE3NzkwLmR0c2kiCiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CkBAIC0xOSwxMiArNDcsMTMgQEAKIAljb21wYXRpYmxlID0gInJlbmVzYXMsbGFnZXIiLCAicmVuZXNhcyxyOGE3NzkwIjsKIAogCWFsaWFzZXMgewotCQlzZXJpYWw2ID0gJnNjaWYwOwotCQlzZXJpYWw3ID0gJnNjaWYxOworCQlzZXJpYWw2ID0gJnNjaWZhMDsKKwkJc2VyaWFsNyA9ICZzY2lmYTE7CiAJfTsKIAogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0M2LDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgcncgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKKwkJc3Rkb3V0LXBhdGggPSAmc2NpZmEwOwogCX07CiAKIAltZW1vcnlANDAwMDAwMDAgewpAQCAtNDIsNyArNzEsNyBAQAogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAl9OwogCi0JZ3Bpb19rZXlzIHsKKwlrZXlib2FyZCB7CiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKIAogCQlidXR0b25AMSB7CkBAIC0xNDQsNiArMTczLDczIEBACiAJCXN0YXRlcyA9IDwzMzAwMDAwIDEKIAkJCSAgMTgwMDAwMCAwPjsKIAl9OworCisJc291bmQgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1hdWRpby1jYXJkIjsKKworCQlzaW1wbGUtYXVkaW8tY2FyZCxmb3JtYXQgPSAibGVmdF9qIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsYml0Y2xvY2stbWFzdGVyID0gPCZzbmRjb2RlYz47CisJCXNpbXBsZS1hdWRpby1jYXJkLGZyYW1lLW1hc3RlciA9IDwmc25kY29kZWM+OworCisJCXNuZGNwdTogc2ltcGxlLWF1ZGlvLWNhcmQsY3B1IHsKKwkJCXNvdW5kLWRhaSA9IDwmcmNhcl9zb3VuZD47CisJCX07CisKKwkJc25kY29kZWM6IHNpbXBsZS1hdWRpby1jYXJkLGNvZGVjIHsKKwkJCXNvdW5kLWRhaSA9IDwmYWs0NjQzPjsKKwkJCXN5c3RlbS1jbG9jay1mcmVxdWVuY3kgPSA8MTEyODk2MDA+OworCQl9OworCX07CisKKwl2Z2EtZW5jb2RlciB7CisJCWNvbXBhdGlibGUgPSAiYWRpLGFkdjcxMjMiOworCisJCXBvcnRzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXBvcnRAMCB7CisJCQkJcmVnID0gPDA+OworCQkJCWFkdjcxMjNfaW46IGVuZHBvaW50IHsKKwkJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZkdV9vdXRfcmdiPjsKKwkJCQl9OworCQkJfTsKKwkJCXBvcnRAMSB7CisJCQkJcmVnID0gPDE+OworCQkJCWFkdjcxMjNfb3V0OiBlbmRwb2ludCB7CisJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdmdhX2luPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCisJdmdhIHsKKwkJY29tcGF0aWJsZSA9ICJ2Z2EtY29ubmVjdG9yIjsKKworCQlwb3J0IHsKKwkJCXZnYV9pbjogZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmYWR2NzEyM19vdXQ+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmR1IHsKKwlwaW5jdHJsLTAgPSA8JmR1X3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJc3RhdHVzID0gIm9rYXkiOworCisJcG9ydHMgeworCQlwb3J0QDAgeworCQkJZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmYWR2NzEyM19pbj47CisJCQl9OworCQl9OworCQlwb3J0QDIgeworCQkJbHZkc19jb25uZWN0b3I6IGVuZHBvaW50IHsKKwkJCX07CisJCX07CisJfTsKIH07CiAKICZleHRhbF9jbGsgewpAQCAtMTUxLDE3ICsyNDcsMTQgQEAKIH07CiAKICZwZmMgewotCXBpbmN0cmwtMCA9IDwmZHVfcGlucz47Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQogCWR1X3BpbnM6IGR1IHsKIAkJcmVuZXNhcyxncm91cHMgPSAiZHVfcmdiNjY2IiwgImR1X3N5bmNfMSIsICJkdV9jbGtfb3V0XzAiOwogCQlyZW5lc2FzLGZ1bmN0aW9uID0gImR1IjsKIAl9OwogCi0Jc2NpZjBfcGluczogc2VyaWFsMCB7Ci0JCXJlbmVzYXMsZ3JvdXBzID0gInNjaWYwX2RhdGEiOwotCQlyZW5lc2FzLGZ1bmN0aW9uID0gInNjaWYwIjsKKwlzY2lmYTBfcGluczogc2VyaWFsMCB7CisJCXJlbmVzYXMsZ3JvdXBzID0gInNjaWZhMF9kYXRhIjsKKwkJcmVuZXNhcyxmdW5jdGlvbiA9ICJzY2lmYTAiOwogCX07CiAKIAlldGhlcl9waW5zOiBldGhlciB7CkBAIC0xNzQsOSArMjY3LDkgQEAKIAkJcmVuZXNhcyxmdW5jdGlvbiA9ICJpbnRjIjsKIAl9OwogCi0Jc2NpZjFfcGluczogc2VyaWFsMSB7Ci0JCXJlbmVzYXMsZ3JvdXBzID0gInNjaWYxX2RhdGEiOwotCQlyZW5lc2FzLGZ1bmN0aW9uID0gInNjaWYxIjsKKwlzY2lmYTFfcGluczogc2VyaWFsMSB7CisJCXJlbmVzYXMsZ3JvdXBzID0gInNjaWZhMV9kYXRhIjsKKwkJcmVuZXNhcyxmdW5jdGlvbiA9ICJzY2lmYTEiOwogCX07CiAKIAlzZGhpMF9waW5zOiBzZDAgewpAQCAtMjIwLDYgKzMxMywxMSBAQAogCQlyZW5lc2FzLGZ1bmN0aW9uID0gImlpYzMiOwogCX07CiAKKwloc3VzYl9waW5zOiBoc3VzYiB7CisJCXJlbmVzYXMsZ3JvdXBzID0gInVzYjBfb3ZjX3ZidXMiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gInVzYjAiOworCX07CisKIAl1c2IwX3BpbnM6IHVzYjAgewogCQlyZW5lc2FzLGdyb3VwcyA9ICJ1c2IwIjsKIAkJcmVuZXNhcyxmdW5jdGlvbiA9ICJ1c2IwIjsKQEAgLTIzOSw2ICszMzcsMTYgQEAKIAkJcmVuZXNhcyxncm91cHMgPSAidmluMV9kYXRhOCIsICJ2aW4xX2NsayI7CiAJCXJlbmVzYXMsZnVuY3Rpb24gPSAidmluMSI7CiAJfTsKKworCXNvdW5kX3BpbnM6IHNvdW5kIHsKKwkJcmVuZXNhcyxncm91cHMgPSAic3NpMDEyOV9jdHJsIiwgInNzaTBfZGF0YSIsICJzc2kxX2RhdGEiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gInNzaSI7CisJfTsKKworCXNvdW5kX2Nsa19waW5zOiBzb3VuZF9jbGsgeworCQlyZW5lc2FzLGdyb3VwcyA9ICJhdWRpb19jbGtfYSI7CisJCXJlbmVzYXMsZnVuY3Rpb24gPSAiYXVkaW9fY2xrIjsKKwl9OwogfTsKIAogJmV0aGVyIHsKQEAgLTMwOCwxNSArNDE2LDE1IEBACiAJfTsKIH07CiAKLSZzY2lmMCB7Ci0JcGluY3RybC0wID0gPCZzY2lmMF9waW5zPjsKKyZzY2lmYTAgeworCXBpbmN0cmwtMCA9IDwmc2NpZmEwX3BpbnM+OwogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCi0mc2NpZjEgewotCXBpbmN0cmwtMCA9IDwmc2NpZjFfcGlucz47Cismc2NpZmExIHsKKwlwaW5jdHJsLTAgPSA8JnNjaWZhMV9waW5zPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJc3RhdHVzID0gIm9rYXkiOwpAQCAtMzc2LDYgKzQ4NCwxNCBAQAogCXBpbmN0cmwtMCA9IDwmaWljMl9waW5zPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCisJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47CisKKwlhazQ2NDM6IHNvdW5kLWNvZGVjQDEyIHsKKwkJY29tcGF0aWJsZSA9ICJhc2FoaS1rYXNlaSxhazQ2NDMiOworCQkjc291bmQtZGFpLWNlbGxzID0gPDA+OworCQlyZWcgPSA8MHgxMj47CisJfTsKKwogCWNvbXBvc2l0ZS1pbkAyMCB7CiAJCWNvbXBhdGlibGUgPSAiYWRpLGFkdjcxODAiOwogCQlyZWcgPSA8MHgyMD47CkBAIC00MTgsMTIgKzUzNCwyOSBAQAogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiB9OwogCismeGhjaSB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtMCA9IDwmdXNiMl9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworfTsKKwogJnBjaTIgewogCXN0YXR1cyA9ICJva2F5IjsKIAlwaW5jdHJsLTAgPSA8JnVzYjJfcGlucz47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIH07CiAKKyZoc3VzYiB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtMCA9IDwmaHN1c2JfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlyZW5lc2FzLGVuYWJsZS1ncGlvID0gPCZncGlvNSAxOCBHUElPX0FDVElWRV9ISUdIPjsKK307CisKKyZ1c2JwaHkgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKIC8qIGNvbXBvc2l0ZSB2aWRlbyBpbnB1dCAqLwogJnZpbjEgewogCXBpbmN0cmwtMCA9IDwmdmluMV9waW5zPjsKQEAgLTQ0MSwzICs1NzQsMjMgQEAKIAkJfTsKIAl9OwogfTsKKworJnJjYXJfc291bmQgeworCXBpbmN0cmwtMCA9IDwmc291bmRfcGlucyAmc291bmRfY2xrX3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisKKwkjc291bmQtZGFpLWNlbGxzID0gPDA+OworCisJc3RhdHVzID0gIm9rYXkiOworCisJcmNhcl9zb3VuZCxkYWkgeworCQlkYWkwIHsKKwkJCXBsYXliYWNrID0gPCZzc2kwICZzcmMyICZkdmMwPjsKKwkJCWNhcHR1cmUgID0gPCZzc2kxICZzcmMzICZkdmMxPjsKKwkJfTsKKwl9OworfTsKKworJnNzaTEgeworCXNoYXJlZC1waW47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MC5kdHNpCmluZGV4IGUyMGFmZmUuLmFmN2UyNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkwLmR0c2kKQEAgLTMxMiw2ICszMTIsNzAgQEAKIAkJI2RtYS1jZWxscyA9IDwxPjsKIAkJZG1hLWNoYW5uZWxzID0gPDE1PjsKIAl9OworCisJYXVkbWEwOiBkbWEtY29udHJvbGxlckBlYzcwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLWRtYWMiOworCQlyZWcgPSA8MCAweGVjNzAwMDAwIDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPQk8MCAzNDYgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyMCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzIxIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjIgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyMyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI0IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjUgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyNiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI3IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjggSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyOSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzMwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gImVycm9yIiwKKwkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKKwkJCQkiY2g0IiwgImNoNSIsICJjaDYiLCAiY2g3IiwKKwkJCQkiY2g4IiwgImNoOSIsICJjaDEwIiwgImNoMTEiLAorCQkJCSJjaDEyIjsKKwkJY2xvY2tzID0gPCZtc3RwNV9jbGtzIFI4QTc3OTBfQ0xLX0FVRElPX0RNQUMwPjsKKwkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKwkJZG1hLWNoYW5uZWxzID0gPDEzPjsKKwl9OworCisJYXVkbWExOiBkbWEtY29udHJvbGxlckBlYzcyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLWRtYWMiOworCQlyZWcgPSA8MCAweGVjNzIwMDAwIDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPQk8MCAzNDcgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzMyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM0IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzUgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzNiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM3IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzggSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzOSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0MiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQzIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gImVycm9yIiwKKwkJCQkiY2gwIiwgImNoMSIsICJjaDIiLCAiY2gzIiwKKwkJCQkiY2g0IiwgImNoNSIsICJjaDYiLCAiY2g3IiwKKwkJCQkiY2g4IiwgImNoOSIsICJjaDEwIiwgImNoMTEiLAorCQkJCSJjaDEyIjsKKwkJY2xvY2tzID0gPCZtc3RwNV9jbGtzIFI4QTc3OTBfQ0xLX0FVRElPX0RNQUMxPjsKKwkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKwkJZG1hLWNoYW5uZWxzID0gPDEzPjsKKwl9OworCisJYXVkbWFwcDogZG1hLWNvbnRyb2xsZXJAZWM3NDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMscmNhci1hdWRtYXBwIjsKKwkJI2RtYS1jZWxscyA9IDwxPjsKKworCQlyZWcgPSA8MCAweGVjNzQwMDAwIDAgMHgyMDA+OworCX07CisKIAlpMmMwOiBpMmNAZTY1MDgwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0zNTksNiArNDIzLDggQEAKIAkJcmVnID0gPDAgMHhlNjUwMDAwMCAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX0lJQzA+OworCQlkbWFzID0gPCZkbWFjMCAweDYxPiwgPCZkbWFjMCAweDYyPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zNjksNiArNDM1LDggQEAKIAkJcmVnID0gPDAgMHhlNjUxMDAwMCAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX0lJQzE+OworCQlkbWFzID0gPCZkbWFjMCAweDY1PiwgPCZkbWFjMCAweDY2PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zNzksNiArNDQ3LDggQEAKIAkJcmVnID0gPDAgMHhlNjUyMDAwMCAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTBfQ0xLX0lJQzI+OworCQlkbWFzID0gPCZkbWFjMCAweDY5PiwgPCZkbWFjMCAweDZhPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zODksMTQgKzQ1OSwxOCBAQAogCQlyZWcgPSA8MCAweGU2MGIwMDAwIDAgMHg0MjU+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTczIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHA5X2Nsa3MgUjhBNzc5MF9DTEtfSUlDRFZGUz47CisJCWRtYXMgPSA8JmRtYWMwIDB4Nzc+LCA8JmRtYWMwIDB4Nzg+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKLQltbWNpZjA6IG1tY2lmQGVlMjAwMDAwIHsKKwltbWNpZjA6IG1tY0BlZTIwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxtbWNpZi1yOGE3NzkwIiwgInJlbmVzYXMsc2gtbW1jaWYiOwogCQlyZWcgPSA8MCAweGVlMjAwMDAwIDAgMHg4MD47CiAJCWludGVycnVwdHMgPSA8MCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19NTUNJRjA+OworCQlkbWFzID0gPCZkbWFjMCAweGQxPiwgPCZkbWFjMCAweGQyPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJcmVnLWlvLXdpZHRoID0gPDQ+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CkBAIC00MDYsNiArNDgwLDggQEAKIAkJcmVnID0gPDAgMHhlZTIyMDAwMCAwIDB4ODA+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTcwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MF9DTEtfTU1DSUYxPjsKKwkJZG1hcyA9IDwmZG1hYzAgMHhlMT4sIDwmZG1hYzAgMHhlMj47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXJlZy1pby13aWR0aCA9IDw0PjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwpAQCAtNDIwLDcgKzQ5Niw2IEBACiAJCXJlZyA9IDwwIDB4ZWUxMDAwMDAgMCAweDIwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19TREhJMD47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNDI5LDcgKzUwNCw2IEBACiAJCXJlZyA9IDwwIDB4ZWUxMjAwMDAgMCAweDIwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNjYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19TREhJMT47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNDM4LDcgKzUxMiw2IEBACiAJCXJlZyA9IDwwIDB4ZWUxNDAwMDAgMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNjcgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19TREhJMj47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNDQ3LDcgKzUyMCw2IEBACiAJCXJlZyA9IDwwIDB4ZWUxNjAwMDAgMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8MCAxNjggSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkwX0NMS19TREhJMz47Ci0JCWNhcC1zZC1oaWdoc3BlZWQ7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtNTY4LDYgKzY0MCwzNiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwloc3VzYjogdXNiQGU2NTkwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHVzYmhzLXI4YTc3OTAiOworCQlyZWcgPSA8MCAweGU2NTkwMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHA3X2Nsa3MgUjhBNzc5MF9DTEtfSFNVU0I+OworCQlyZW5lc2FzLGJ1c3dhaXQgPSA8ND47CisJCXBoeXMgPSA8JnVzYjAgMT47CisJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1c2JwaHk6IHVzYi1waHlAZTY1OTAxMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdXNiLXBoeS1yOGE3NzkwIjsKKwkJcmVnID0gPDAgMHhlNjU5MDEwMCAwIDB4MTAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljbG9ja3MgPSA8Jm1zdHA3X2Nsa3MgUjhBNzc5MF9DTEtfSFNVU0I+OworCQljbG9jay1uYW1lcyA9ICJ1c2JocyI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJdXNiMDogdXNiLWNoYW5uZWxAMCB7CisJCQlyZWcgPSA8MD47CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQl9OworCQl1c2IyOiB1c2ItY2hhbm5lbEAyIHsKKwkJCXJlZyA9IDwyPjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCX07CisJfTsKKwogCXZpbjA6IHZpZGVvQGU2ZWYwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHZpbi1yOGE3NzkwIjsKIAkJY2xvY2tzID0gPCZtc3RwOF9jbGtzIFI4QTc3OTBfQ0xLX1ZJTjA+OwpAQCAtNjAwLDYgKzcwMiw5NiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwl2c3AxQGZlOTIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHZzcDEiOworCQlyZWcgPSA8MCAweGZlOTIwMDAwIDAgMHg4MDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDI2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3OTBfQ0xLX1ZTUDFfUj47CisKKwkJcmVuZXNhcyxoYXMtc3J1OworCQlyZW5lc2FzLCNycGYgPSA8NT47CisJCXJlbmVzYXMsI3VkcyA9IDwxPjsKKwkJcmVuZXNhcywjd3BmID0gPDQ+OworCX07CisKKwl2c3AxQGZlOTI4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHZzcDEiOworCQlyZWcgPSA8MCAweGZlOTI4MDAwIDAgMHg4MDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDI2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3OTBfQ0xLX1ZTUDFfUz47CisKKwkJcmVuZXNhcyxoYXMtbHV0OworCQlyZW5lc2FzLGhhcy1zcnU7CisJCXJlbmVzYXMsI3JwZiA9IDw1PjsKKwkJcmVuZXNhcywjdWRzID0gPDM+OworCQlyZW5lc2FzLCN3cGYgPSA8ND47CisJfTsKKworCXZzcDFAZmU5MzAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsdnNwMSI7CisJCXJlZyA9IDwwIDB4ZmU5MzAwMDAgMCAweDgwMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMjQ2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAxX2Nsa3MgUjhBNzc5MF9DTEtfVlNQMV9EVTA+OworCisJCXJlbmVzYXMsaGFzLWxpZjsKKwkJcmVuZXNhcyxoYXMtbHV0OworCQlyZW5lc2FzLCNycGYgPSA8ND47CisJCXJlbmVzYXMsI3VkcyA9IDwxPjsKKwkJcmVuZXNhcywjd3BmID0gPDQ+OworCX07CisKKwl2c3AxQGZlOTM4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHZzcDEiOworCQlyZWcgPSA8MCAweGZlOTM4MDAwIDAgMHg4MDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDI0NyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3OTBfQ0xLX1ZTUDFfRFUxPjsKKworCQlyZW5lc2FzLGhhcy1saWY7CisJCXJlbmVzYXMsaGFzLWx1dDsKKwkJcmVuZXNhcywjcnBmID0gPDQ+OworCQlyZW5lc2FzLCN1ZHMgPSA8MT47CisJCXJlbmVzYXMsI3dwZiA9IDw0PjsKKwl9OworCisJZHU6IGRpc3BsYXlAZmViMDAwMDAgeworCQljb21wYXRpYmxlID0gInJlbmVzYXMsZHUtcjhhNzc5MCI7CisJCXJlZyA9IDwwIDB4ZmViMDAwMDAgMCAweDcwMDAwPiwKKwkJICAgICAgPDAgMHhmZWI5MDAwMCAwIDB4MWM+LAorCQkgICAgICA8MCAweGZlYjk0MDAwIDAgMHgxYz47CisJCXJlZy1uYW1lcyA9ICJkdSIsICJsdmRzLjAiLCAibHZkcy4xIjsKKwkJaW50ZXJydXB0cyA9IDwwIDI1NiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPDAgMjY4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8MCAyNjkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDdfY2xrcyBSOEE3NzkwX0NMS19EVTA+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkwX0NMS19EVTE+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkwX0NMS19EVTI+LAorCQkJIDwmbXN0cDdfY2xrcyBSOEE3NzkwX0NMS19MVkRTMD4sCisJCQkgPCZtc3RwN19jbGtzIFI4QTc3OTBfQ0xLX0xWRFMxPjsKKwkJY2xvY2stbmFtZXMgPSAiZHUuMCIsICJkdS4xIiwgImR1LjIiLCAibHZkcy4wIiwgImx2ZHMuMSI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJcG9ydHMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJZHVfb3V0X3JnYjogZW5kcG9pbnQgeworCQkJCX07CisJCQl9OworCQkJcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQkJZHVfb3V0X2x2ZHMwOiBlbmRwb2ludCB7CisJCQkJfTsKKwkJCX07CisJCQlwb3J0QDIgeworCQkJCXJlZyA9IDwyPjsKKwkJCQlkdV9vdXRfbHZkczE6IGVuZHBvaW50IHsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworCiAJY2xvY2tzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDI+OwpAQCAtODY4LDE4ICsxMDYwLDI1IEBACiAJCW1zdHAxX2Nsa3M6IG1zdHAxX2Nsa3NAZTYxNTAxMzQgewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTAtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwogCQkJcmVnID0gPDAgMHhlNjE1MDEzNCAwIDQ+LCA8MCAweGU2MTUwMDM4IDAgND47Ci0JCQljbG9ja3MgPSA8Jm0yX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZwX2Nsaz4sIDwmcmNsa19jbGs+LAotCQkJCSA8JmNwX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sCi0JCQkJIDwmenNfY2xrPjsKKwkJCWNsb2NrcyA9IDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZtMl9jbGs+LAorCQkJCSA8JnpzX2Nsaz4sIDwmcF9jbGs+LCA8JnpnX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+LAorCQkJCSA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JnJjbGtfY2xrPiwKKwkJCQkgPCZjcF9jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8JnpzX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8Ci0JCQkJUjhBNzc5MF9DTEtfSlBVIFI4QTc3OTBfQ0xLX1RNVTEgUjhBNzc5MF9DTEtfVE1VMyBSOEE3NzkwX0NMS19UTVUyCi0JCQkJUjhBNzc5MF9DTEtfQ01UMCBSOEE3NzkwX0NMS19UTVUwIFI4QTc3OTBfQ0xLX1ZTUDFfRFUxCi0JCQkJUjhBNzc5MF9DTEtfVlNQMV9EVTAgUjhBNzc5MF9DTEtfVlNQMV9SIFI4QTc3OTBfQ0xLX1ZTUDFfUworCQkJCVI4QTc3OTBfQ0xLX1ZDUDEgUjhBNzc5MF9DTEtfVkNQMCBSOEE3NzkwX0NMS19WUEMxCisJCQkJUjhBNzc5MF9DTEtfVlBDMCBSOEE3NzkwX0NMS19KUFUgUjhBNzc5MF9DTEtfU1NQMQorCQkJCVI4QTc3OTBfQ0xLX1RNVTEgUjhBNzc5MF9DTEtfM0RHIFI4QTc3OTBfQ0xLXzJERE1BQworCQkJCVI4QTc3OTBfQ0xLX0ZEUDFfMiBSOEE3NzkwX0NMS19GRFAxXzEgUjhBNzc5MF9DTEtfRkRQMV8wCisJCQkJUjhBNzc5MF9DTEtfVE1VMyBSOEE3NzkwX0NMS19UTVUyIFI4QTc3OTBfQ0xLX0NNVDAKKwkJCQlSOEE3NzkwX0NMS19UTVUwIFI4QTc3OTBfQ0xLX1ZTUDFfRFUxIFI4QTc3OTBfQ0xLX1ZTUDFfRFUwCisJCQkJUjhBNzc5MF9DTEtfVlNQMV9SIFI4QTc3OTBfQ0xLX1ZTUDFfUwogCQkJPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9Ci0JCQkJImpwdSIsICJ0bXUxIiwgInRtdTMiLCAidG11MiIsICJjbXQwIiwgInRtdTAiLCAidnNwMS1kdTEiLAotCQkJCSJ2c3AxLWR1MCIsICJ2c3AxLXJ0IiwgInZzcDEtc3kiOworCQkJCSJ2Y3AxIiwgInZjcDAiLCAidnBjMSIsICJ2cGMwIiwgImpwdSIsICJzc3AxIiwKKwkJCQkidG11MSIsICIzZGciLCAiMmRkbWFjIiwgImZkcDEtMiIsICJmZHAxLTEiLAorCQkJCSJmZHAxLTAiLCAidG11MyIsICJ0bXUyIiwgImNtdDAiLCAidG11MCIsCisJCQkJInZzcDEtZHUxIiwgInZzcDEtZHUwIiwgInZzcDEtcnQiLCAidnNwMS1zeSI7CiAJCX07CiAJCW1zdHAyX2Nsa3M6IG1zdHAyX2Nsa3NAZTYxNTAxMzggewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTAtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwpAQCAtOTA0LDI1ICsxMTAzLDI5IEBACiAJCQlyZWcgPSA8MCAweGU2MTUwMTNjIDAgND4sIDwwIDB4ZTYxNTAwNDggMCA0PjsKIAkJCWNsb2NrcyA9IDwmaHBfY2xrPiwgPCZjcF9jbGs+LCA8Jm1tYzFfY2xrPiwgPCZzZDNfY2xrPiwKIAkJCQkgPCZzZDJfY2xrPiwgPCZjcGdfY2xvY2tzIFI4QTc3OTBfQ0xLX1NEMT4sIDwmY3BnX2Nsb2NrcyBSOEE3NzkwX0NMS19TRDA+LCA8Jm1tYzBfY2xrPiwKLQkJCQkgPCZocF9jbGs+LCA8Jm1wX2Nsaz4sIDwmaHBfY2xrPiwgPCZtcF9jbGs+LCA8JnJjbGtfY2xrPjsKKwkJCQkgPCZocF9jbGs+LCA8Jm1wX2Nsaz4sIDwmaHBfY2xrPiwgPCZtcF9jbGs+LCA8JnJjbGtfY2xrPiwKKwkJCQkgPCZocF9jbGs+LCA8JmhwX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8CiAJCQkJUjhBNzc5MF9DTEtfSUlDMiBSOEE3NzkwX0NMS19UUFUwIFI4QTc3OTBfQ0xLX01NQ0lGMSBSOEE3NzkwX0NMS19TREhJMwogCQkJCVI4QTc3OTBfQ0xLX1NESEkyIFI4QTc3OTBfQ0xLX1NESEkxIFI4QTc3OTBfQ0xLX1NESEkwIFI4QTc3OTBfQ0xLX01NQ0lGMAogCQkJCVI4QTc3OTBfQ0xLX0lJQzAgUjhBNzc5MF9DTEtfUENJRUMgUjhBNzc5MF9DTEtfSUlDMSBSOEE3NzkwX0NMS19TU1VTQiBSOEE3NzkwX0NMS19DTVQxCisJCQkJUjhBNzc5MF9DTEtfVVNCRE1BQzAgUjhBNzc5MF9DTEtfVVNCRE1BQzEKIAkJCT47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPQogCQkJCSJpaWMyIiwgInRwdTAiLCAibW1jaWYxIiwgInNkaGkzIiwKIAkJCQkic2RoaTIiLCAic2RoaTEiLCAic2RoaTAiLCAibW1jaWYwIiwKLQkJCQkiaWljMCIsICJwY2llYyIsICJpaWMxIiwgInNzdXNiIiwgImNtdDEiOworCQkJCSJpaWMwIiwgInBjaWVjIiwgImlpYzEiLCAic3N1c2IiLCAiY210MSIsCisJCQkJInVzYmRtYWMwIiwgInVzYmRtYWMxIjsKIAkJfTsKIAkJbXN0cDVfY2xrczogbXN0cDVfY2xrc0BlNjE1MDE0NCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5MC1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CiAJCQlyZWcgPSA8MCAweGU2MTUwMTQ0IDAgND4sIDwwIDB4ZTYxNTAwM2MgMCA0PjsKLQkJCWNsb2NrcyA9IDwmZXh0YWxfY2xrPiwgPCZwX2Nsaz47CisJCQljbG9ja3MgPSA8JmhwX2Nsaz4sIDwmaHBfY2xrPiwgPCZleHRhbF9jbGs+LCA8JnBfY2xrPjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKLQkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDxSOEE3NzkwX0NMS19USEVSTUFMIFI4QTc3OTBfQ0xLX1BXTT47Ci0JCQljbG9jay1vdXRwdXQtbmFtZXMgPSAidGhlcm1hbCIsICJwd20iOworCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPFI4QTc3OTBfQ0xLX0FVRElPX0RNQUMwIFI4QTc3OTBfQ0xLX0FVRElPX0RNQUMxCisJCQkJCQkgUjhBNzc5MF9DTEtfVEhFUk1BTCBSOEE3NzkwX0NMS19QV00+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImF1ZG1hYzAiLCAiYXVkbWFjMSIsICJ0aGVybWFsIiwgInB3bSI7CiAJCX07CiAJCW1zdHA3X2Nsa3M6IG1zdHA3X2Nsa3NAZTYxNTAxNGMgewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTAtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwpAQCAtMTA3MCw2ICsxMjczLDE2IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXhoY2k6IHVzYkBlZTAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx4aGNpLXI4YTc3OTAiOworCQlyZWcgPSA8MCAweGVlMDAwMDAwIDAgMHhjMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTAxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MF9DTEtfU1NVU0I+OworCQlwaHlzID0gPCZ1c2IyIDE+OworCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJcGNpMDogcGNpQGVlMDkwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHBjaS1yOGE3NzkwIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKQEAgLTEwODgsNiArMTMwMSwyMCBAQAogCQlpbnRlcnJ1cHQtbWFwID0gPDB4MDAwMCAwIDAgMSAmZ2ljIDAgMTA4IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgwODAwIDAgMCAxICZnaWMgMCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJCSAweDEwMDAgMCAwIDIgJmdpYyAwIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKworCQl1c2JAMCwxIHsKKwkJCXJlZyA9IDwweDgwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IwIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CisKKwkJdXNiQDAsMiB7CisJCQlyZWcgPSA8MHgxMDAwIDAgMCAwIDA+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXBoeXMgPSA8JnVzYjAgMD47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJfTsKIAl9OwogCiAJcGNpMTogcGNpQGVlMGIwMDAwIHsKQEAgLTExMjgsNiArMTM1NSwyMCBAQAogCQlpbnRlcnJ1cHQtbWFwID0gPDB4MDAwMCAwIDAgMSAmZ2ljIDAgMTEzIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgwODAwIDAgMCAxICZnaWMgMCAxMTMgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJCSAweDEwMDAgMCAwIDIgJmdpYyAwIDExMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKworCQl1c2JAMCwxIHsKKwkJCXJlZyA9IDwweDgwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IyIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CisKKwkJdXNiQDAsMiB7CisJCQlyZWcgPSA8MHgxMDAwIDAgMCAwIDA+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXBoeXMgPSA8JnVzYjIgMD47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJfTsKIAl9OwogCiAJcGNpZWM6IHBjaWVAZmUwMDAwMDAgewpAQCAtMTE1NSw3ICsxMzk2LDcgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCi0JcmNhcl9zb3VuZDogcmNhcl9zb3VuZEAweGVjNTAwMDAwIHsKKwlyY2FyX3NvdW5kOiByY2FyX3NvdW5kQGVjNTAwMDAwIHsKIAkJI3NvdW5kLWRhaS1jZWxscyA9IDwxPjsKIAkJY29tcGF0aWJsZSA9ICAicmVuZXNhcyxyY2FyX3NvdW5kLXI4YTc3OTAiLCAicmVuZXNhcyxyY2FyX3NvdW5kLWdlbjIiLCAicmVuZXNhcyxyY2FyX3NvdW5kIjsKIAkJcmVnID0JPDAgMHhlYzUwMDAwMCAwIDB4MTAwMD4sIC8qIFNDVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS1oZW5uaW5nZXIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS1oZW5uaW5nZXIuZHRzCmluZGV4IGYxYjU2ZGUxLi43NDBlMzg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLWhlbm5pbmdlci5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS1oZW5uaW5nZXIuZHRzCkBAIC0yMyw2ICsyMyw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eVNDMCwzODQwMCBpZ25vcmVfbG9nbGV2ZWwgcncgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKKwkJc3Rkb3V0LXBhdGggPSAmc2NpZjA7CiAJfTsKIAogCW1lbW9yeUA0MDAwMDAwMCB7CkBAIC0yNzEsNiArMjcyLDE3IEBACiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIH07CiAKKyZoc3VzYiB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtMCA9IDwmdXNiMF9waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXJlbmVzYXMsZW5hYmxlLWdwaW8gPSA8JmdwaW81IDMxIEdQSU9fQUNUSVZFX0hJR0g+OworfTsKKworJnVzYnBoeSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKwogJnBjaWVfYnVzX2NsayB7CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEta29lbHNjaC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLWtvZWxzY2guZHRzCmluZGV4IDA3NTUwZTcuLjk5MGFmMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEta29lbHNjaC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS1rb2Vsc2NoLmR0cwpAQCAtMTAsNiArMTAsMzQgQEAKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKKy8qCisgKiBTU0ktQUs0NjQzCisgKgorICogU1cxOiAxOiBBSzQ2NDMKKyAqICAgICAgMjogQ04yMgorICogICAgICAzOiBBRFY3NTExCisgKgorICogVGhpcyBjb21tYW5kIGlzIHJlcXVpcmVkIHdoZW4gUGxheWJhY2svQ2FwdHVyZQorICoKKyAqCWFtaXhlciBzZXQgIkxJTkVPVVQgTWl4ZXIgREFDTCIgb24KKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQiIDEwMCUKKyAqCWFtaXhlciBzZXQgIkRWQyBJbiIgMTAwJQorICoKKyAqIFlvdSBjYW4gdXNlIE11dGUKKyAqCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IE11dGUiIG9uCisgKglhbWl4ZXIgc2V0ICJEVkMgSW4gTXV0ZSIgb24KKyAqCisgKiBZb3UgY2FuIHVzZSBWb2x1bWUgUmFtcAorICoKKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQgUmFtcCBVcCBSYXRlIiAgICIwLjEyNSBkQi82NCBzdGVwcyIKKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQgUmFtcCBEb3duIFJhdGUiICIwLjEyNSBkQi81MTIgc3RlcHMiCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IFJhbXAiIG9uCisgKglhcGxheSB4eHgud2F2ICYKKyAqCWFtaXhlciBzZXQgIkRWQyBPdXQiICA4MCUgIC8vIFZvbHVtZSBEb3duCisgKglhbWl4ZXIgc2V0ICJEVkMgT3V0IiAxMDAlICAvLyBWb2x1bWUgVXAKKyAqLworCiAvZHRzLXYxLzsKICNpbmNsdWRlICJyOGE3NzkxLmR0c2kiCiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CkBAIC0yNSw3ICs1Myw4IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0M2LDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgcncgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKKwkJYm9vdGFyZ3MgPSAiaWdub3JlX2xvZ2xldmVsIHJ3IHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCI7CisJCXN0ZG91dC1wYXRoID0gJnNjaWYwOwogCX07CiAKIAltZW1vcnlANDAwMDAwMDAgewpAQCAtNDMsNyArNzIsNyBAQAogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAl9OwogCi0JZ3Bpby1rZXlzIHsKKwlrZXlib2FyZCB7CiAJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKIAogCQlrZXktMSB7CkBAIC0xMjksMTIgKzE1OCwxNSBAQAogCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CiAJCWxlZDYgewogCQkJZ3Bpb3MgPSA8JmdwaW8yIDE5IEdQSU9fQUNUSVZFX0hJR0g+OworCQkJbGFiZWwgPSAiTEVENiI7CiAJCX07CiAJCWxlZDcgewogCQkJZ3Bpb3MgPSA8JmdwaW8yIDIwIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJbGFiZWwgPSAiTEVENyI7CiAJCX07CiAJCWxlZDggewogCQkJZ3Bpb3MgPSA8JmdwaW8yIDIxIEdQSU9fQUNUSVZFX0hJR0g+OworCQkJbGFiZWwgPSAiTEVEOCI7CiAJCX07CiAJfTsKIApAQCAtMjA5LDYgKzI0MSwzNiBAQAogCQlzdGF0ZXMgPSA8MzMwMDAwMCAxCiAJCQkgIDE4MDAwMDAgMD47CiAJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYXVkaW8tY2FyZCI7CisKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZm9ybWF0ID0gImxlZnRfaiI7CisJCXNpbXBsZS1hdWRpby1jYXJkLGJpdGNsb2NrLW1hc3RlciA9IDwmc25kY29kZWM+OworCQlzaW1wbGUtYXVkaW8tY2FyZCxmcmFtZS1tYXN0ZXIgPSA8JnNuZGNvZGVjPjsKKworCQlzbmRjcHU6IHNpbXBsZS1hdWRpby1jYXJkLGNwdSB7CisJCQlzb3VuZC1kYWkgPSA8JnJjYXJfc291bmQ+OworCQl9OworCisJCXNuZGNvZGVjOiBzaW1wbGUtYXVkaW8tY2FyZCxjb2RlYyB7CisJCQlzb3VuZC1kYWkgPSA8JmFrNDY0Mz47CisJCQlzeXN0ZW0tY2xvY2stZnJlcXVlbmN5ID0gPDExMjg5NjAwPjsKKwkJfTsKKwl9OworfTsKKworJmR1IHsKKwlwaW5jdHJsLTAgPSA8JmR1X3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJc3RhdHVzID0gIm9rYXkiOworCisJcG9ydHMgeworCQlwb3J0QDEgeworCQkJbHZkc19jb25uZWN0b3I6IGVuZHBvaW50IHsKKwkJCX07CisJCX07CisJfTsKIH07CiAKICZleHRhbF9jbGsgewpAQCAtMjE2LDkgKzI3OCw2IEBACiB9OwogCiAmcGZjIHsKLQlwaW5jdHJsLTAgPSA8JmR1X3BpbnM+OwotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0KIAlpMmMyX3BpbnM6IGkyYzIgewogCQlyZW5lc2FzLGdyb3VwcyA9ICJpMmMyIjsKIAkJcmVuZXNhcyxmdW5jdGlvbiA9ICJpMmMyIjsKQEAgLTI4OSw2ICszNDgsMTYgQEAKIAkJcmVuZXNhcyxncm91cHMgPSAidmluMV9kYXRhOCIsICJ2aW4xX2NsayI7CiAJCXJlbmVzYXMsZnVuY3Rpb24gPSAidmluMSI7CiAJfTsKKworCXNvdW5kX3BpbnM6IHNvdW5kIHsKKwkJcmVuZXNhcyxncm91cHMgPSAic3NpMDEyOV9jdHJsIiwgInNzaTBfZGF0YSIsICJzc2kxX2RhdGEiOworCQlyZW5lc2FzLGZ1bmN0aW9uID0gInNzaSI7CisJfTsKKworCXNvdW5kX2Nsa19waW5zOiBzb3VuZF9jbGsgeworCQlyZW5lc2FzLGdyb3VwcyA9ICJhdWRpb19jbGtfYSI7CisJCXJlbmVzYXMsZnVuY3Rpb24gPSAiYXVkaW9fY2xrIjsKKwl9OwogfTsKIAogJmV0aGVyIHsKQEAgLTQxNCw3ICs0ODMsMTMgQEAKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCiAJc3RhdHVzID0gIm9rYXkiOwotCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCisJYWs0NjQzOiBzb3VuZC1jb2RlY0AxMiB7CisJCWNvbXBhdGlibGUgPSAiYXNhaGkta2FzZWksYWs0NjQzIjsKKwkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKKwkJcmVnID0gPDB4MTI+OworCX07CiAKIAljb21wb3NpdGUtaW5AMjAgewogCQljb21wYXRpYmxlID0gImFkaSxhZHY3MTgwIjsKQEAgLTQ2Myw2ICs1MzgsMTcgQEAKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogfTsKIAorJmhzdXNiIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC0wID0gPCZ1c2IwX3BpbnM+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcmVuZXNhcyxlbmFibGUtZ3BpbyA9IDwmZ3BpbzUgMzEgR1BJT19BQ1RJVkVfSElHSD47Cit9OworCismdXNicGh5IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmcGNpZV9idXNfY2xrIHsKIAlzdGF0dXMgPSAib2theSI7CiB9OwpAQCAtNDkxLDMgKzU3NywyMyBAQAogCQl9OwogCX07CiB9OworCismcmNhcl9zb3VuZCB7CisJcGluY3RybC0wID0gPCZzb3VuZF9waW5zICZzb3VuZF9jbGtfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CisKKwlzdGF0dXMgPSAib2theSI7CisKKwlyY2FyX3NvdW5kLGRhaSB7CisJCWRhaTAgeworCQkJcGxheWJhY2sgPSA8JnNzaTAgJnNyYzIgJmR2YzA+OworCQkJY2FwdHVyZSAgPSA8JnNzaTEgJnNyYzMgJmR2YzE+OworCQl9OworCX07Cit9OworCismc3NpMSB7CisJc2hhcmVkLXBpbjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3NzkxLmR0c2kKaW5kZXggZTA2YzExZi4uNzdjMGJlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5MS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTEuZHRzaQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIHRoZSByOGE3NzkxIFNvQwogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBSZW5lc2FzIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBSZW5lc2FzIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgogICogQ29weXJpZ2h0IChDKSAyMDE0IENvZ2VudCBFbWJlZGRlZCBJbmMuCiAgKgpAQCAtMzAxLDYgKzMwMSw2OSBAQAogCQlkbWEtY2hhbm5lbHMgPSA8MTU+OwogCX07CiAKKwlhdWRtYTA6IGRtYS1jb250cm9sbGVyQGVjNzAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJjYXItZG1hYyI7CisJCXJlZyA9IDwwIDB4ZWM3MDAwMDAgMCAweDEwMDAwPjsKKwkJaW50ZXJydXB0cyA9CTwwIDM0NiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzIwIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjEgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyMiBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzIzIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyNSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI2IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMjcgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMyOCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzI5IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzAgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzMSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzMyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlpbnRlcnJ1cHQtbmFtZXMgPSAiZXJyb3IiLAorCQkJCSJjaDAiLCAiY2gxIiwgImNoMiIsICJjaDMiLAorCQkJCSJjaDQiLCAiY2g1IiwgImNoNiIsICJjaDciLAorCQkJCSJjaDgiLCAiY2g5IiwgImNoMTAiLCAiY2gxMSIsCisJCQkJImNoMTIiOworCQljbG9ja3MgPSA8Jm1zdHA1X2Nsa3MgUjhBNzc5MV9DTEtfQVVESU9fRE1BQzA+OworCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkjZG1hLWNlbGxzID0gPDE+OworCQlkbWEtY2hhbm5lbHMgPSA8MTM+OworCX07CisKKwlhdWRtYTE6IGRtYS1jb250cm9sbGVyQGVjNzIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJjYXItZG1hYyI7CisJCXJlZyA9IDwwIDB4ZWM3MjAwMDAgMCAweDEwMDAwPjsKKwkJaW50ZXJydXB0cyA9CTwwIDM0NyBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzMzIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzQgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzNSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM2IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzMzcgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDMzOCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzM5IElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDAgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0MSBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQyIElSUV9UWVBFX0xFVkVMX0hJR0gKKwkJCQkgMCAzNDMgSVJRX1RZUEVfTEVWRUxfSElHSAorCQkJCSAwIDM0NCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkJIDAgMzQ1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlpbnRlcnJ1cHQtbmFtZXMgPSAiZXJyb3IiLAorCQkJCSJjaDAiLCAiY2gxIiwgImNoMiIsICJjaDMiLAorCQkJCSJjaDQiLCAiY2g1IiwgImNoNiIsICJjaDciLAorCQkJCSJjaDgiLCAiY2g5IiwgImNoMTAiLCAiY2gxMSIsCisJCQkJImNoMTIiOworCQljbG9ja3MgPSA8Jm1zdHA1X2Nsa3MgUjhBNzc5MV9DTEtfQVVESU9fRE1BQzE+OworCQljbG9jay1uYW1lcyA9ICJmY2siOworCQkjZG1hLWNlbGxzID0gPDE+OworCQlkbWEtY2hhbm5lbHMgPSA8MTM+OworCX07CisKKwlhdWRtYXBwOiBkbWEtY29udHJvbGxlckBlYzc0MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyLWF1ZG1hcHAiOworCQkjZG1hLWNlbGxzID0gPDE+OworCisJCXJlZyA9IDwwIDB4ZWM3NDAwMDAgMCAweDIwMD47CisJfTsKKwogCS8qIFRoZSBtZW1vcnkgbWFwIGluIHRoZSBVc2VyJ3MgTWFudWFsIG1hcHMgdGhlIGNvcmVzIHRvIGJ1cyBudW1iZXJzICovCiAJaTJjMDogaTJjQGU2NTA4MDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0zNzEsNiArNDM0LDggQEAKIAkJcmVnID0gPDAgMHhlNjBiMDAwMCAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwOV9jbGtzIFI4QTc3OTFfQ0xLX0lJQ0RWRlM+OworCQlkbWFzID0gPCZkbWFjMCAweDc3PiwgPCZkbWFjMCAweDc4PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zODEsNiArNDQ2LDggQEAKIAkJcmVnID0gPDAgMHhlNjUwMDAwMCAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTFfQ0xLX0lJQzA+OworCQlkbWFzID0gPCZkbWFjMCAweDYxPiwgPCZkbWFjMCAweDYyPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zOTEsNiArNDU4LDggQEAKIAkJcmVnID0gPDAgMHhlNjUxMDAwMCAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE3NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJY2xvY2tzID0gPCZtc3RwM19jbGtzIFI4QTc3OTFfQ0xLX0lJQzE+OworCQlkbWFzID0gPCZkbWFjMCAweDY1PiwgPCZkbWFjMCAweDY2PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC00MDAsNiArNDY5LDE3IEBACiAJCSNncGlvLXJhbmdlLWNlbGxzID0gPDM+OwogCX07CiAKKwltbWNpZjA6IG1tY0BlZTIwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxtbWNpZi1yOGE3NzkxIiwgInJlbmVzYXMsc2gtbW1jaWYiOworCQlyZWcgPSA8MCAweGVlMjAwMDAwIDAgMHg4MD47CisJCWludGVycnVwdHMgPSA8MCAxNjkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDNfY2xrcyBSOEE3NzkxX0NMS19NTUNJRjA+OworCQlkbWFzID0gPCZkbWFjMCAweGQxPiwgPCZkbWFjMCAweGQyPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAlzZGhpMDogc2RAZWUxMDAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsc2RoaS1yOGE3NzkxIjsKIAkJcmVnID0gPDAgMHhlZTEwMDAwMCAwIDB4MjAwPjsKQEAgLTYxMyw2ICs2OTMsMzYgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJaHN1c2I6IHVzYkBlNjU5MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx1c2Jocy1yOGE3NzkxIjsKKwkJcmVnID0gPDAgMHhlNjU5MDAwMCAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDEwNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwN19jbGtzIFI4QTc3OTFfQ0xLX0hTVVNCPjsKKwkJcmVuZXNhcyxidXN3YWl0ID0gPDQ+OworCQlwaHlzID0gPCZ1c2IwIDE+OworCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJdXNicGh5OiB1c2ItcGh5QGU2NTkwMTAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHVzYi1waHktcjhhNzc5MSI7CisJCXJlZyA9IDwwIDB4ZTY1OTAxMDAgMCAweDEwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY2xvY2tzID0gPCZtc3RwN19jbGtzIFI4QTc3OTFfQ0xLX0hTVVNCPjsKKwkJY2xvY2stbmFtZXMgPSAidXNiaHMiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCXVzYjA6IHVzYi1jaGFubmVsQDAgeworCQkJcmVnID0gPDA+OworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJfTsKKwkJdXNiMjogdXNiLWNoYW5uZWxAMiB7CisJCQlyZWcgPSA8Mj47CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQl9OworCX07CisKIAl2aW4wOiB2aWRlb0BlNmVmMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx2aW4tcjhhNzc5MSI7CiAJCWNsb2NrcyA9IDwmbXN0cDhfY2xrcyBSOEE3NzkxX0NMS19WSU4wPjsKQEAgLTYzNyw2ICs3NDcsNzUgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJdnNwMUBmZTkyODAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx2c3AxIjsKKwkJcmVnID0gPDAgMHhmZTkyODAwMCAwIDB4ODAwMD47CisJCWludGVycnVwdHMgPSA8MCAyNjcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDFfY2xrcyBSOEE3NzkxX0NMS19WU1AxX1M+OworCisJCXJlbmVzYXMsaGFzLWx1dDsKKwkJcmVuZXNhcyxoYXMtc3J1OworCQlyZW5lc2FzLCNycGYgPSA8NT47CisJCXJlbmVzYXMsI3VkcyA9IDwzPjsKKwkJcmVuZXNhcywjd3BmID0gPDQ+OworCX07CisKKwl2c3AxQGZlOTMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHZzcDEiOworCQlyZWcgPSA8MCAweGZlOTMwMDAwIDAgMHg4MDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDI0NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwMV9jbGtzIFI4QTc3OTFfQ0xLX1ZTUDFfRFUwPjsKKworCQlyZW5lc2FzLGhhcy1saWY7CisJCXJlbmVzYXMsaGFzLWx1dDsKKwkJcmVuZXNhcywjcnBmID0gPDQ+OworCQlyZW5lc2FzLCN1ZHMgPSA8MT47CisJCXJlbmVzYXMsI3dwZiA9IDw0PjsKKwl9OworCisJdnNwMUBmZTkzODAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx2c3AxIjsKKwkJcmVnID0gPDAgMHhmZTkzODAwMCAwIDB4ODAwMD47CisJCWludGVycnVwdHMgPSA8MCAyNDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmbXN0cDFfY2xrcyBSOEE3NzkxX0NMS19WU1AxX0RVMT47CisKKwkJcmVuZXNhcyxoYXMtbGlmOworCQlyZW5lc2FzLGhhcy1sdXQ7CisJCXJlbmVzYXMsI3JwZiA9IDw0PjsKKwkJcmVuZXNhcywjdWRzID0gPDE+OworCQlyZW5lc2FzLCN3cGYgPSA8ND47CisJfTsKKworCWR1OiBkaXNwbGF5QGZlYjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGR1LXI4YTc3OTEiOworCQlyZWcgPSA8MCAweGZlYjAwMDAwIDAgMHg0MDAwMD4sCisJCSAgICAgIDwwIDB4ZmViOTAwMDAgMCAweDFjPjsKKwkJcmVnLW5hbWVzID0gImR1IiwgImx2ZHMuMCI7CisJCWludGVycnVwdHMgPSA8MCAyNTYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDwwIDI2OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZtc3RwN19jbGtzIFI4QTc3OTFfQ0xLX0RVMD4sCisJCQkgPCZtc3RwN19jbGtzIFI4QTc3OTFfQ0xLX0RVMT4sCisJCQkgPCZtc3RwN19jbGtzIFI4QTc3OTFfQ0xLX0xWRFMwPjsKKwkJY2xvY2stbmFtZXMgPSAiZHUuMCIsICJkdS4xIiwgImx2ZHMuMCI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJcG9ydHMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJcG9ydEAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQkJZHVfb3V0X3JnYjogZW5kcG9pbnQgeworCQkJCX07CisJCQl9OworCQkJcG9ydEAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQkJZHVfb3V0X2x2ZHMwOiBlbmRwb2ludCB7CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKKwogCWNsb2NrcyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTg4OSwxNyArMTA2OCwyMyBAQAogCQltc3RwMV9jbGtzOiBtc3RwMV9jbGtzQGU2MTUwMTM0IHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkxLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTAxMzQgMCA0PiwgPDAgMHhlNjE1MDAzOCAwIDQ+OwotCQkJY2xvY2tzID0gPCZtMl9jbGs+LCA8JnBfY2xrPiwgPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JnJjbGtfY2xrPiwKLQkJCQkgPCZjcF9jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+OworCQkJY2xvY2tzID0gPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmbTJfY2xrPiwgPCZ6c19jbGs+LCA8JnBfY2xrPiwKKwkJCQkgPCZ6Z19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8JnBfY2xrPiwKKwkJCQkgPCZwX2Nsaz4sIDwmcmNsa19jbGs+LCA8JmNwX2Nsaz4sIDwmenNfY2xrPiwgPCZ6c19jbGs+LAorCQkJCSA8JnpzX2Nsaz47CiAJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQlyZW5lc2FzLGNsb2NrLWluZGljZXMgPSA8Ci0JCQkJUjhBNzc5MV9DTEtfSlBVIFI4QTc3OTFfQ0xLX1RNVTEgUjhBNzc5MV9DTEtfVE1VMyBSOEE3NzkxX0NMS19UTVUyCi0JCQkJUjhBNzc5MV9DTEtfQ01UMCBSOEE3NzkxX0NMS19UTVUwIFI4QTc3OTFfQ0xLX1ZTUDFfRFUxCi0JCQkJUjhBNzc5MV9DTEtfVlNQMV9EVTAgUjhBNzc5MV9DTEtfVlNQMV9TCisJCQkJUjhBNzc5MV9DTEtfVkNQMCBSOEE3NzkxX0NMS19WUEMwIFI4QTc3OTFfQ0xLX0pQVQorCQkJCVI4QTc3OTFfQ0xLX1NTUDEgUjhBNzc5MV9DTEtfVE1VMSBSOEE3NzkxX0NMS18zREcKKwkJCQlSOEE3NzkxX0NMS18yRERNQUMgUjhBNzc5MV9DTEtfRkRQMV8xIFI4QTc3OTFfQ0xLX0ZEUDFfMAorCQkJCVI4QTc3OTFfQ0xLX1RNVTMgUjhBNzc5MV9DTEtfVE1VMiBSOEE3NzkxX0NMS19DTVQwCisJCQkJUjhBNzc5MV9DTEtfVE1VMCBSOEE3NzkxX0NMS19WU1AxX0RVMSBSOEE3NzkxX0NMS19WU1AxX0RVMAorCQkJCVI4QTc3OTFfQ0xLX1ZTUDFfUwogCQkJPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9Ci0JCQkJImpwdSIsICJ0bXUxIiwgInRtdTMiLCAidG11MiIsICJjbXQwIiwgInRtdTAiLCAidnNwMS1kdTEiLAotCQkJCSJ2c3AxLWR1MCIsICJ2c3AxLXN5IjsKKwkJCQkidmNwMCIsICJ2cGMwIiwgImpwdSIsICJzc3AxIiwgInRtdTEiLCAiM2RnIiwKKwkJCQkiMmRkbWFjIiwgImZkcDEtMSIsICJmZHAxLTAiLCAidG11MyIsICJ0bXUyIiwgImNtdDAiLAorCQkJCSJ0bXUwIiwgInZzcDEtZHUxIiwgInZzcDEtZHUwIiwgInZzcDEtc3kiOwogCQl9OwogCQltc3RwMl9jbGtzOiBtc3RwMl9jbGtzQGU2MTUwMTM4IHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3NzkxLW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKQEAgLTkyMywyNCArMTEwOCwyOCBAQAogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTEtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwogCQkJcmVnID0gPDAgMHhlNjE1MDEzYyAwIDQ+LCA8MCAweGU2MTUwMDQ4IDAgND47CiAJCQljbG9ja3MgPSA8JmNwX2Nsaz4sIDwmc2QyX2Nsaz4sIDwmc2QxX2Nsaz4sIDwmY3BnX2Nsb2NrcyBSOEE3NzkxX0NMS19TRDA+LAotCQkJCSA8Jm1tYzBfY2xrPiwgPCZocF9jbGs+LCA8Jm1wX2Nsaz4sIDwmaHBfY2xrPiwgPCZtcF9jbGs+LCA8JnJjbGtfY2xrPjsKKwkJCQkgPCZtbWMwX2Nsaz4sIDwmaHBfY2xrPiwgPCZtcF9jbGs+LCA8JmhwX2Nsaz4sIDwmbXBfY2xrPiwgPCZyY2xrX2Nsaz4sCisJCQkJIDwmaHBfY2xrPiwgPCZocF9jbGs+OwogCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPAogCQkJCVI4QTc3OTFfQ0xLX1RQVTAgUjhBNzc5MV9DTEtfU0RISTIgUjhBNzc5MV9DTEtfU0RISTEgUjhBNzc5MV9DTEtfU0RISTAKIAkJCQlSOEE3NzkxX0NMS19NTUNJRjAgUjhBNzc5MV9DTEtfSUlDMCBSOEE3NzkxX0NMS19QQ0lFQyBSOEE3NzkxX0NMS19JSUMxCiAJCQkJUjhBNzc5MV9DTEtfU1NVU0IgUjhBNzc5MV9DTEtfQ01UMQorCQkJCVI4QTc3OTFfQ0xLX1VTQkRNQUMwIFI4QTc3OTFfQ0xLX1VTQkRNQUMxCiAJCQk+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0KIAkJCQkidHB1MCIsICJzZGhpMiIsICJzZGhpMSIsICJzZGhpMCIsCi0JCQkJIm1tY2lmMCIsICJpMmM3IiwgInBjaWVjIiwgImkyYzgiLCAic3N1c2IiLCAiY210MSI7CisJCQkJIm1tY2lmMCIsICJpMmM3IiwgInBjaWVjIiwgImkyYzgiLCAic3N1c2IiLCAiY210MSIsCisJCQkJInVzYmRtYWMwIiwgInVzYmRtYWMxIjsKIAkJfTsKIAkJbXN0cDVfY2xrczogbXN0cDVfY2xrc0BlNjE1MDE0NCB7CiAJCQljb21wYXRpYmxlID0gInJlbmVzYXMscjhhNzc5MS1tc3RwLWNsb2NrcyIsICJyZW5lc2FzLGNwZy1tc3RwLWNsb2NrcyI7CiAJCQlyZWcgPSA8MCAweGU2MTUwMTQ0IDAgND4sIDwwIDB4ZTYxNTAwM2MgMCA0PjsKLQkJCWNsb2NrcyA9IDwmZXh0YWxfY2xrPiwgPCZwX2Nsaz47CisJCQljbG9ja3MgPSA8JmhwX2Nsaz4sIDwmaHBfY2xrPiwgPCZleHRhbF9jbGs+LCA8JnBfY2xrPjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKLQkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDxSOEE3NzkxX0NMS19USEVSTUFMIFI4QTc3OTFfQ0xLX1BXTT47Ci0JCQljbG9jay1vdXRwdXQtbmFtZXMgPSAidGhlcm1hbCIsICJwd20iOworCQkJcmVuZXNhcyxjbG9jay1pbmRpY2VzID0gPFI4QTc3OTFfQ0xLX0FVRElPX0RNQUMwIFI4QTc3OTFfQ0xLX0FVRElPX0RNQUMxCisJCQkJCQkgUjhBNzc5MV9DTEtfVEhFUk1BTCBSOEE3NzkxX0NMS19QV00+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImF1ZG1hYzAiLCAiYXVkbWFjMSIsICJ0aGVybWFsIiwgInB3bSI7CiAJCX07CiAJCW1zdHA3X2Nsa3M6IG1zdHA3X2Nsa3NAZTYxNTAxNGMgewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTEtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwpAQCAtMTA4OCw2ICsxMjc3LDE2IEBACiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXhoY2k6IHVzYkBlZTAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyx4aGNpLXI4YTc3OTEiOworCQlyZWcgPSA8MCAweGVlMDAwMDAwIDAgMHhjMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMTAxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8Jm1zdHAzX2Nsa3MgUjhBNzc5MV9DTEtfU1NVU0I+OworCQlwaHlzID0gPCZ1c2IyIDE+OworCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJcGNpMDogcGNpQGVlMDkwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHBjaS1yOGE3NzkxIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKQEAgLTExMDYsNiArMTMwNSwyMCBAQAogCQlpbnRlcnJ1cHQtbWFwID0gPDB4MDAwMCAwIDAgMSAmZ2ljIDAgMTA4IElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgwODAwIDAgMCAxICZnaWMgMCAxMDggSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJCSAweDEwMDAgMCAwIDIgJmdpYyAwIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKworCQl1c2JAMCwxIHsKKwkJCXJlZyA9IDwweDgwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IwIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CisKKwkJdXNiQDAsMiB7CisJCQlyZWcgPSA8MHgxMDAwIDAgMCAwIDA+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXBoeXMgPSA8JnVzYjAgMD47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJfTsKIAl9OwogCiAJcGNpMTogcGNpQGVlMGQwMDAwIHsKQEAgLTExMjYsNiArMTMzOSwyMCBAQAogCQlpbnRlcnJ1cHQtbWFwID0gPDB4MDAwMCAwIDAgMSAmZ2ljIDAgMTEzIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCQkgMHgwODAwIDAgMCAxICZnaWMgMCAxMTMgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJCSAweDEwMDAgMCAwIDIgJmdpYyAwIDExMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKworCQl1c2JAMCwxIHsKKwkJCXJlZyA9IDwweDgwMCAwIDAgMCAwPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlwaHlzID0gPCZ1c2IyIDA+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCX07CisKKwkJdXNiQDAsMiB7CisJCQlyZWcgPSA8MHgxMDAwIDAgMCAwIDA+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXBoeXMgPSA8JnVzYjIgMD47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJfTsKIAl9OwogCiAJcGNpZWM6IHBjaWVAZmUwMDAwMDAgewpAQCAtMTE1Myw3ICsxMzgwLDcgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCi0JcmNhcl9zb3VuZDogcmNhcl9zb3VuZEAweGVjNTAwMDAwIHsKKwlyY2FyX3NvdW5kOiByY2FyX3NvdW5kQGVjNTAwMDAwIHsKIAkJI3NvdW5kLWRhaS1jZWxscyA9IDwxPjsKIAkJY29tcGF0aWJsZSA9ICAicmVuZXNhcyxyY2FyX3NvdW5kLXI4YTc3OTEiLCAicmVuZXNhcyxyY2FyX3NvdW5kLWdlbjIiLCAicmVuZXNhcyxyY2FyX3NvdW5kIjsKIAkJcmVnID0JPDAgMHhlYzUwMDAwMCAwIDB4MTAwMD4sIC8qIFNDVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5NC1hbHQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5NC1hbHQuZHRzCmluZGV4IDc5ZDA2ZWYwLi5mMmNmNzU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzk0LWFsdC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5NC1hbHQuZHRzCkBAIC0yMCw3ICsyMCw4IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5U0MwLDM4NDAwIGlnbm9yZV9sb2dsZXZlbCBydyByb290PS9kZXYvbmZzIGlwPWRoY3AiOworCQlib290YXJncyA9ICJpZ25vcmVfbG9nbGV2ZWwgcncgcm9vdD0vZGV2L25mcyBpcD1kaGNwIjsKKwkJc3Rkb3V0LXBhdGggPSAmc2NpZjI7CiAJfTsKIAogCW1lbW9yeUA0MDAwMDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzk0LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3Nzk0LmR0c2kKaW5kZXggZDRlOGJjZS4uMTljOWRlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcjhhNzc5NC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3OTQuZHRzaQpAQCAtODIsNiArODIsMTQgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJdGltZXIgeworCQljb21wYXRpYmxlID0gImFybSxhcm12Ny10aW1lciI7CisJCWludGVycnVwdHMgPSA8MSAxMyAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0xPVyk+LAorCQkJICAgICA8MSAxNCAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0xPVyk+LAorCQkJICAgICA8MSAxMSAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0xPVyk+LAorCQkJICAgICA8MSAxMCAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0xPVyk+OworCX07CisKIAlpcnFjMDogaW50ZXJydXB0LWNvbnRyb2xsZXJAZTYxYzAwMDAgewogCQljb21wYXRpYmxlID0gInJlbmVzYXMsaXJxYy1yOGE3Nzk0IiwgInJlbmVzYXMsaXJxYyI7CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CkBAIC00NTMsMTYgKzQ2MSwxOSBAQAogCQltc3RwMV9jbGtzOiBtc3RwMV9jbGtzQGU2MTUwMTM0IHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3Nzk0LW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKIAkJCXJlZyA9IDwwIDB4ZTYxNTAxMzQgMCA0PiwgPDAgMHhlNjE1MDAzOCAwIDQ+OwotCQkJY2xvY2tzID0gPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JnBfY2xrPiwgPCZyY2xrX2Nsaz4sCi0JCQkJIDwmY3BfY2xrPiwKLQkJCQkgPCZ6c19jbGs+LCA8JnpzX2Nsaz4sIDwmenNfY2xrPjsKKwkJCWNsb2NrcyA9IDwmenNfY2xrPiwgPCZ6c19jbGs+LCA8JnBfY2xrPiwgPCZ6Z19jbGs+LCA8JnpzX2Nsaz4sCisJCQkJIDwmenNfY2xrPiwgPCZwX2Nsaz4sIDwmcF9jbGs+LCA8JnJjbGtfY2xrPiwgPCZjcF9jbGs+LAorCQkJCSA8JnpzX2Nsaz4sIDwmenNfY2xrPjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDwKLQkJCQlSOEE3Nzk0X0NMS19UTVUxIFI4QTc3OTRfQ0xLX1RNVTMgUjhBNzc5NF9DTEtfVE1VMgotCQkJCVI4QTc3OTRfQ0xLX0NNVDAgUjhBNzc5NF9DTEtfVE1VMAorCQkJCVI4QTc3OTRfQ0xLX1ZDUDAgUjhBNzc5NF9DTEtfVlBDMCBSOEE3Nzk0X0NMS19UTVUxCisJCQkJUjhBNzc5NF9DTEtfM0RHIFI4QTc3OTRfQ0xLXzJERE1BQyBSOEE3Nzk0X0NMS19GRFAxXzAKKwkJCQlSOEE3Nzk0X0NMS19UTVUzIFI4QTc3OTRfQ0xLX1RNVTIgUjhBNzc5NF9DTEtfQ01UMAorCQkJCVI4QTc3OTRfQ0xLX1RNVTAgUjhBNzc5NF9DTEtfVlNQMV9EVTAgUjhBNzc5NF9DTEtfVlNQMV9TCiAJCQk+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0KLQkJCQkidG11MSIsICJ0bXUzIiwgInRtdTIiLCAiY210MCIsICJ0bXUwIjsKKwkJCQkidmNwMCIsICJ2cGMwIiwgInRtdTEiLCAiM2RnIiwgIjJkZG1hYyIsICJmZHAxLTAiLAorCQkJCSJ0bXUzIiwgInRtdTIiLCAiY210MCIsICJ0bXUwIiwgInZzcDEtZHUwIiwgInZzcHMiOwogCQl9OwogCQltc3RwMl9jbGtzOiBtc3RwMl9jbGtzQGU2MTUwMTM4IHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3Nzk0LW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKQEAgLTUwOSwxMyArNTIwLDEzIEBACiAJCW1zdHA4X2Nsa3M6IG1zdHA4X2Nsa3NAZTYxNTA5OTAgewogCQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHI4YTc3OTQtbXN0cC1jbG9ja3MiLCAicmVuZXNhcyxjcGctbXN0cC1jbG9ja3MiOwogCQkJcmVnID0gPDAgMHhlNjE1MDk5MCAwIDQ+LCA8MCAweGU2MTUwOWEwIDAgND47Ci0JCQljbG9ja3MgPSA8JnBfY2xrPjsKKwkJCWNsb2NrcyA9IDwmemdfY2xrPiwgPCZ6Z19jbGs+LCA8JnBfY2xrPjsKIAkJCSNjbG9jay1jZWxscyA9IDwxPjsKIAkJCXJlbmVzYXMsY2xvY2staW5kaWNlcyA9IDwKLQkJCQlSOEE3Nzk0X0NMS19FVEhFUgorCQkJCVI4QTc3OTRfQ0xLX1ZJTjEgUjhBNzc5NF9DTEtfVklOMCBSOEE3Nzk0X0NMS19FVEhFUgogCQkJPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9Ci0JCQkJImV0aGVyIjsKKwkJCQkidmluMSIsICJ2aW4wIiwgImV0aGVyIjsKIAkJfTsKIAkJbXN0cDExX2Nsa3M6IG1zdHAxMV9jbGtzQGU2MTUwOTljIHsKIAkJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxyOGE3Nzk0LW1zdHAtY2xvY2tzIiwgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3I4YTc3eHgtYWExMDR4ZDEyLXBhbmVsLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3N3h4LWFhMTA0eGQxMi1wYW5lbC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1Y2I1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9yOGE3N3h4LWFhMTA0eGQxMi1wYW5lbC5kdHNpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb21tb24gZmlsZSBmb3IgdGhlIEFBMTA0WEQxMiBwYW5lbCBjb25uZWN0ZWQgdG8gUmVuZXNhcyBSLUNhciBib2FyZHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3JwLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy8geworCXBhbmVsIHsKKwkJY29tcGF0aWJsZSA9ICJtaXRzdWJpc2hpLGFhMTA0eGQxMiIsICJwYW5lbC1kcGkiOworCisJCXdpZHRoLW1tID0gPDIxMD47CisJCWhlaWdodC1tbSA9IDwxNTg+OworCisJCXBhbmVsLXRpbWluZyB7CisJCQkvKiAxMDI0eDc2OCBANjVIeiAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDY1MDAwMDAwPjsKKwkJCWhhY3RpdmUgPSA8MTAyND47CisJCQl2YWN0aXZlID0gPDc2OD47CisJCQloc3luYy1sZW4gPSA8MTM2PjsKKwkJCWhmcm9udC1wb3JjaCA9IDwyMD47CisJCQloYmFjay1wb3JjaCA9IDwxNjA+OworCQkJdmZyb250LXBvcmNoID0gPDM+OworCQkJdmJhY2stcG9yY2ggPSA8Mjk+OworCQkJdnN5bmMtbGVuID0gPDY+OworCQl9OworCisJCXBvcnQgeworCQkJcGFuZWxfaW46IGVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8Jmx2ZHNfY29ubmVjdG9yPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZsdmRzX2Nvbm5lY3RvciB7CisJcmVtb3RlLWVuZHBvaW50ID0gPCZwYW5lbF9pbj47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS1icWN1cmllMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLWJxY3VyaWUyLmR0cwppbmRleCBkNTM0NDUxLi5iYWYyMWFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLWJxY3VyaWUyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLWJxY3VyaWUyLmR0cwpAQCAtNjAsNiArNjAsMTAgQEAKIAl9OwogfTsKIAorJmNwdTAgeworCWNwdTAtc3VwcGx5ID0gPCZ2ZGRfYXJtPjsKK307CisKICZpMmMxIHsKIAlzdGF0dXMgPSAib2theSI7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLW1hcnNib2FyZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLW1hcnNib2FyZC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE3MzA0YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzA2NmEtbWFyc2JvYXJkLmR0cwpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBSb21haW4gUGVyaWVyIDxyb21haW4ucGVyaWVyQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgInJrMzA2NmEuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTWFyc0JvYXJkIFJLMzA2NiI7CisJY29tcGF0aWJsZSA9ICJoYW95dSxtYXJzYm9hcmQtcmszMDY2IiwgInJvY2tjaGlwLHJrMzA2NmEiOworCisJbWVtb3J5IHsKKwkJcmVnID0gPDB4NjAwMDAwMDAgMHg0MDAwMDAwMD47CisJfTsKKworCXZjY19zZDA6IHNkbW1jLXJlZ3VsYXRvciB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAic2RtbWMtc3VwcGx5IjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OworCQlncGlvID0gPCZncGlvMyA3IEdQSU9fQUNUSVZFX0xPVz47CisJCXN0YXJ0dXAtZGVsYXktdXMgPSA8MTAwMDAwPjsKKwkJdmluLXN1cHBseSA9IDwmdmNjX2lvPjsKKwl9OworCisJdnN5czogdnN5cy1yZWd1bGF0b3IgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gInZzeXMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOworCX07Cit9OworCismaTJjMSB7CisJc3RhdHVzID0gIm9rYXkiOworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJdHBzOiB0cHNAMmQgeworCQlyZWcgPSA8MHgyZD47CisKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzY+OworCQlpbnRlcnJ1cHRzID0gPDQgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKworCQl2Y2MxLXN1cHBseSA9IDwmdnN5cz47CisJCXZjYzItc3VwcGx5ID0gPCZ2c3lzPjsKKwkJdmNjMy1zdXBwbHkgPSA8JnZzeXM+OworCQl2Y2M0LXN1cHBseSA9IDwmdnN5cz47CisJCXZjYzUtc3VwcGx5ID0gPCZ2Y2NfaW8+OworCQl2Y2M2LXN1cHBseSA9IDwmdmNjX2lvPjsKKwkJdmNjNy1zdXBwbHkgPSA8JnZzeXM+OworCQl2Y2Npby1zdXBwbHkgPSA8JnZzeXM+OworCisJCXJlZ3VsYXRvcnMgeworCQkJdmNjX3J0YzogcmVndWxhdG9yQDAgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZjY19ydGMiOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Y2NfaW86IHJlZ3VsYXRvckAxIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2NfaW8iOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2ZGRfYXJtOiByZWd1bGF0b3JAMiB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmRkX2FybSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NjAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmNjX2RkcjogcmVndWxhdG9yQDMgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZjY19kZHIiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDYwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTUwMDAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZjYzE4X2NpZjogcmVndWxhdG9yQDUgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZjYzE4X2NpZiI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZkZF8xMTogcmVndWxhdG9yQDYgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF8xMSI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZjY18yNTogcmVndWxhdG9yQDcgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZjY18yNSI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZjY18xODogcmVndWxhdG9yQDggeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZjY18xOCI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXZjYzI1X2hkbWk6IHJlZ3VsYXRvckA5IHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2MyNV9oZG1pIjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmNjYV8zMzogcmVndWxhdG9yQDEwIHsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2NhXzMzIjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmNjX3JtaWk6IHJlZ3VsYXRvckAxMSB7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmNjX3JtaWkiOworCQkJfTsKKworCQkJdmNjMjhfY2lmOiByZWd1bGF0b3JAMTIgeworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZjYzI4X2NpZiI7CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisJCX07CisJfTsKK307CisKKy8qIG11c3QgYmUgaW5jbHVkZWQgYWZ0ZXIgJnRwcyBnZXRzIGRlZmluZWQgKi8KKyNpbmNsdWRlICJ0cHM2NTkxMC5kdHNpIgorCismZW1hYyB7CisJc3RhdHVzID0gIm9rYXkiOworCisJcGh5ID0gPCZwaHkwPjsKKwlwaHktc3VwcGx5ID0gPCZ2Y2Nfcm1paT47CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmZW1hY194ZmVyPiwgPCZlbWFjX21kaW8+LCA8JnBoeV9pbnQ+OworCisJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQlyZWcgPSA8MD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8xPjsKKwkJaW50ZXJydXB0cyA9IDwyNiBJUlFfVFlQRV9MRVZFTF9MT1c+OworCX07Cit9OworCismcGluY3RybCB7CisJbGFuODcyMGEgeworCQlwaHlfaW50OiBwaHktaW50IHsKKwkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzEgMjYgUktfRlVOQ19HUElPICZwY2ZnX3B1bGxfbm9uZT47CisJCX07CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQxIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndkdCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzA2NmEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzA2NmEuZHRzaQppbmRleCBhZDljMmRiLi40MWZmZDQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMwNjZhLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMDY2YS5kdHNpCkBAIC0yNiwxMSArMjYsMjEgQEAKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAJCWVuYWJsZS1tZXRob2QgPSAicm9ja2NoaXAscmszMDY2LXNtcCI7CiAKLQkJY3B1QDAgeworCQljcHUwOiBjcHVAMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKIAkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKIAkJCXJlZyA9IDwweDA+OworCQkJb3BlcmF0aW5nLXBvaW50cyA9IDwKKwkJCQkvKiBrSHogICAgdVYgKi8KKwkJCQkxMDA4MDAwIDEwNzUwMDAKKwkJCQkgODE2MDAwIDEwMjUwMDAKKwkJCQkgNjAwMDAwIDEwMjUwMDAKKwkJCQkgNTA0MDAwIDEwMDAwMDAKKwkJCQkgMzEyMDAwICA5NzUwMDAKKwkJCT47CisJCQljbG9jay1sYXRlbmN5ID0gPDQwMDAwPjsKKwkJCWNsb2NrcyA9IDwmY3J1IEFSTUNMSz47CiAJCX07CiAJCWNwdUAxIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CkBAIC01Myw2ICs2Myw1MSBAQAogCQl9OwogCX07CiAKKwlpMnMwOiBpMnNAMTAxMTgwMDAgeworCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzA2Ni1pMnMiOworCQlyZWcgPSA8MHgxMDExODAwMCAweDIwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZpMnMwX2J1cz47CisJCWRtYXMgPSA8JmRtYWMxX3MgND4sIDwmZG1hYzFfcyA1PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJY2xvY2stbmFtZXMgPSAiaTJzX2hjbGsiLCAiaTJzX2NsayI7CisJCWNsb2NrcyA9IDwmY3J1IEhDTEtfSTJTMD4sIDwmY3J1IFNDTEtfSTJTMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCWkyczE6IGkyc0AxMDExYTAwMCB7CisJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMDY2LWkycyI7CisJCXJlZyA9IDwweDEwMTFhMDAwIDB4MjAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAzMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmkyczFfYnVzPjsKKwkJZG1hcyA9IDwmZG1hYzFfcyA2PiwgPCZkbWFjMV9zIDc+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOworCQljbG9jay1uYW1lcyA9ICJpMnNfaGNsayIsICJpMnNfY2xrIjsKKwkJY2xvY2tzID0gPCZjcnUgSENMS19JMlMxPiwgPCZjcnUgU0NMS19JMlMxPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJaTJzMjogaTJzQDEwMTFjMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMwNjYtaTJzIjsKKwkJcmVnID0gPDB4MTAxMWMwMDAgMHgyMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmaTJzMl9idXM+OworCQlkbWFzID0gPCZkbWFjMV9zIDk+LCA8JmRtYWMxX3MgMTA+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOworCQljbG9jay1uYW1lcyA9ICJpMnNfaGNsayIsICJpMnNfY2xrIjsKKwkJY2xvY2tzID0gPCZjcnUgSENMS19JMlMyPiwgPCZjcnUgU0NMS19JMlMyPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJY3J1OiBjbG9jay1jb250cm9sbGVyQDIwMDAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMwNjZhLWNydSI7CiAJCXJlZyA9IDwweDIwMDAwMDAwIDB4MTAwMD47CkBAIC0xNzksNiArMjM0LDI0IEBACiAJCQliaWFzLWRpc2FibGU7CiAJCX07CiAKKwkJZW1hYyB7CisJCQllbWFjX3hmZXI6IGVtYWMteGZlciB7CisJCQkJcm9ja2NoaXAscGlucyA9IDxSS19HUElPMSAxNiBSS19GVU5DXzIgJnBjZmdfcHVsbF9ub25lPiwgLyogbWFjX2NsayAqLworCQkJCQkJPFJLX0dQSU8xIDE3IFJLX0ZVTkNfMiAmcGNmZ19wdWxsX25vbmU+LCAvKiB0eF9lbiAqLworCQkJCQkJPFJLX0dQSU8xIDE4IFJLX0ZVTkNfMiAmcGNmZ19wdWxsX25vbmU+LCAvKiB0eGQxICovCisJCQkJCQk8UktfR1BJTzEgMTkgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT4sIC8qIHR4ZDAgKi8KKwkJCQkJCTxSS19HUElPMSAyMCBSS19GVU5DXzIgJnBjZmdfcHVsbF9ub25lPiwgLyogcnhfZXJyICovCisJCQkJCQk8UktfR1BJTzEgMjEgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT4sIC8qIGNyc19kdmFsaWQgKi8KKwkJCQkJCTxSS19HUElPMSAyMiBSS19GVU5DXzIgJnBjZmdfcHVsbF9ub25lPiwgLyogcnhkMSAqLworCQkJCQkJPFJLX0dQSU8xIDIzIFJLX0ZVTkNfMiAmcGNmZ19wdWxsX25vbmU+OyAvKiByeGQwICovCisJCQl9OworCisJCQllbWFjX21kaW86IGVtYWMtbWRpbyB7CisJCQkJcm9ja2NoaXAscGlucyA9IDxSS19HUElPMSAyNCBSS19GVU5DXzIgJnBjZmdfcHVsbF9ub25lPiwgLyogbWFjX21kICovCisJCQkJCQk8UktfR1BJTzEgMjUgUktfRlVOQ18yICZwY2ZnX3B1bGxfbm9uZT47IC8qIG1hY19tZGNsayAqLworCQkJfTsKKwkJfTsKKwogCQllbW1jIHsKIAkJCWVtbWNfY2xrOiBlbW1jLWNsayB7CiAJCQkJcm9ja2NoaXAscGlucyA9IDxSS19HUElPMyAzMSBSS19GVU5DXzIgJnBjZmdfcHVsbF9kZWZhdWx0PjsKQEAgLTQwNSw2ICs0NzgsNDIgQEAKIAkJCQkJCTxSS19HUElPMyAyMCBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PjsKIAkJCX07CiAJCX07CisKKwkJaTJzMCB7CisJCQlpMnMwX2J1czogaTJzMC1idXMgeworCQkJCXJvY2tjaGlwLHBpbnMgPSA8UktfR1BJTzAgNyBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCA4IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDkgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMTAgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMTEgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMTIgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMTMgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMTQgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD4sCisJCQkJCQk8UktfR1BJTzAgMTUgUktfRlVOQ18xICZwY2ZnX3B1bGxfZGVmYXVsdD47CisJCQl9OworCQl9OworCisJCWkyczEgeworCQkJaTJzMV9idXM6IGkyczEtYnVzIHsKKwkJCQlyb2NrY2hpcCxwaW5zID0gPFJLX0dQSU8wIDE2IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDE3IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDE4IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDE5IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDIwIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+LAorCQkJCQkJPFJLX0dQSU8wIDIxIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX2RlZmF1bHQ+OworCQkJfTsKKwkJfTsKKworCQlpMnMyIHsKKwkJCWkyczJfYnVzOiBpMnMyLWJ1cyB7CisJCQkJcm9ja2NoaXAscGlucyA9IDxSS19HUElPMCAyNCBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAyNSBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAyNiBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAyNyBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAyOCBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PiwKKwkJCQkJCTxSS19HUElPMCAyOSBSS19GVU5DXzEgJnBjZmdfcHVsbF9kZWZhdWx0PjsKKwkJCX07CisJCX07CiAJfTsKIH07CiAKQEAgLTQ5NiwzICs2MDUsNyBAQAogJndkdCB7CiAJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMwNjYtd2R0IiwgInNucHMsZHctd2R0IjsKIH07CisKKyZlbWFjIHsKKwljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzA2Ni1lbWFjIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMxODgtcmFkeGFyb2NrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzE4OC1yYWR4YXJvY2suZHRzCmluZGV4IDE1OTEwYzkuLjlhMDk1NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzE4OC1yYWR4YXJvY2suZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzE4OC1yYWR4YXJvY2suZHRzCkBAIC00MywxNiArNDMsMTkgQEAKIAkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOwogCiAJCWdyZWVuIHsKKwkJCWxhYmVsID0gInJvY2s6Z3JlZW46dXNlcjEiOwogCQkJZ3Bpb3MgPSA8JmdwaW8wIDEyIEdQSU9fQUNUSVZFX0xPVz47CiAJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CiAJCX07CiAKLQkJeWVsbG93IHsKKwkJYmx1ZSB7CisJCQlsYWJlbCA9ICJyb2NrOmJsdWU6dXNlcjIiOwogCQkJZ3Bpb3MgPSA8JmdwaW8wIDE0IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7CiAJCX07CiAKIAkJc2xlZXAgeworCQkJbGFiZWwgPSAicm9jazpyZWQ6cG93ZXIiOwogCQkJZ3Bpb3MgPSA8JmdwaW8wIDE1IDA+OwogCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOwogCQl9OwpAQCAtMTE4LDYgKzEyMSwxMCBAQAogCX07CiB9OwogCismY3B1MCB7CisJY3B1MC1zdXBwbHkgPSA8JnZkZF9hcm0+OworfTsKKwogJmkyYzEgewogCXN0YXR1cyA9ICJva2F5IjsKIAljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKQEAgLTE1OSw3ICsxNjYsNyBAQAogCQkJdmRkX2FybTogUkVHMyB7CiAJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkREX0FSTSI7CiAJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODc1MDAwPjsKLQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKIAkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQkJfTsKIApAQCAtMjM5LDYgKzI0NiwxOCBAQAogCWRpc2FibGUtd3A7CiB9OwogCismcHdtMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnB3bTIgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwd20zIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmcGluY3RybCB7CiAJcGNmZ19vdXRwdXRfbG93OiBwY2ZnLW91dHB1dC1sb3cgewogCQlvdXRwdXQtbG93OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMTg4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9yazMxODguZHRzaQppbmRleCBkZGFhZGE3Li4xZDRkNzljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMxODguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMxODguZHRzaQpAQCAtMjYsMTEgKzI2LDI0IEBACiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQllbmFibGUtbWV0aG9kID0gInJvY2tjaGlwLHJrMzA2Ni1zbXAiOwogCi0JCWNwdUAwIHsKKwkJY3B1MDogY3B1QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CiAJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CiAJCQlyZWcgPSA8MHgwPjsKKwkJCW9wZXJhdGluZy1wb2ludHMgPSA8CisJCQkJLyoga0h6ICAgIHVWICovCisJCQkJMTYwODAwMCAxMzUwMDAwCisJCQkJMTQxNjAwMCAxMjUwMDAwCisJCQkJMTIwMDAwMCAxMTUwMDAwCisJCQkJMTAwODAwMCAxMDc1MDAwCisJCQkJIDgxNjAwMCAgOTc1MDAwCisJCQkJIDYwMDAwMCAgOTUwMDAwCisJCQkJIDUwNDAwMCAgOTI1MDAwCisJCQkJIDMxMjAwMCAgODc1MDAwCisJCQk+OworCQkJY2xvY2stbGF0ZW5jeSA9IDw0MDAwMD47CisJCQljbG9ja3MgPSA8JmNydSBBUk1DTEs+OwogCQl9OwogCQljcHVAMSB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwpAQCAtNjUsNiArNzgsMjEgQEAKIAkJfTsKIAl9OwogCisJaTJzMDogaTJzQDEwMTFhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMxODgtaTJzIiwgInJvY2tjaGlwLHJrMzA2Ni1pMnMiOworCQlyZWcgPSA8MHgxMDExYTAwMCAweDIwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZpMnMwX2J1cz47CisJCWRtYXMgPSA8JmRtYWMxX3MgNj4sIDwmZG1hYzFfcyA3PjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKwkJY2xvY2stbmFtZXMgPSAiaTJzX2hjbGsiLCAiaTJzX2NsayI7CisJCWNsb2NrcyA9IDwmY3J1IEhDTEtfSTJTMD4sIDwmY3J1IFNDTEtfSTJTMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCWNydTogY2xvY2stY29udHJvbGxlckAyMDAwMDAwMCB7CiAJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMTg4LWNydSI7CiAJCXJlZyA9IDwweDIwMDAwMDAwIDB4MTAwMD47CkBAIC04Myw3ICsxMTEsNyBAQAogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzOwogCi0JCWdwaW8wOiBncGlvMEAweDIwMDBhMDAwIHsKKwkJZ3BpbzA6IGdwaW8wQDIwMDBhMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMTg4LWdwaW8tYmFuazAiOwogCQkJcmVnID0gPDB4MjAwMGEwMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDU0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwpAQCAtOTYsNyArMTI0LDcgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3BpbzE6IGdwaW8xQDB4MjAwM2MwMDAgeworCQlncGlvMTogZ3BpbzFAMjAwM2MwMDAgewogCQkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxncGlvLWJhbmsiOwogCQkJcmVnID0gPDB4MjAwM2MwMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDU1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwpAQCAtMzk1LDYgKzQyMywxNyBAQAogCQkJCQkJPFJLX0dQSU8zIDIwIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX25vbmU+OwogCQkJfTsKIAkJfTsKKworCQlpMnMwIHsKKwkJCWkyczBfYnVzOiBpMnMwLWJ1cyB7CisJCQkJcm9ja2NoaXAscGlucyA9IDxSS19HUElPMSAxNiBSS19GVU5DXzEgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTxSS19HUElPMSAxNyBSS19GVU5DXzEgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTxSS19HUElPMSAxOCBSS19GVU5DXzEgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTxSS19HUElPMSAxOSBSS19GVU5DXzEgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTxSS19HUElPMSAyMCBSS19GVU5DXzEgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTxSS19HUElPMSAyMSBSS19GVU5DXzEgJnBjZmdfcHVsbF9ub25lPjsKKwkJCX07CisJCX07CiAJfTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmItcms4MDguZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi1yazgwOC5kdHMKaW5kZXggZmY1MjJmOC4uZDhjNzc1ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmItcms4MDguZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmItcms4MDguZHRzCkBAIC0xNyw2ICsxNywxMCBAQAogCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4LWV2Yi1yazgwOCIsICJyb2NrY2hpcCxyazMyODgiOwogfTsKIAorJmNwdTAgeworCWNwdTAtc3VwcGx5ID0gPCZ2ZGRfY3B1PjsKK307CisKICZpMmMwIHsKIAljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAlzdGF0dXMgPSAib2theSI7CkBAIC00NCw3ICs0OCw3IEBACiAJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKIAkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKIAkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3NTAwMDA+OwotCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OwogCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkZF9hcm0iOwogCQkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi5kdHNpCmluZGV4IGNiODNjZWEuLjNlMDY3ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC1ldmIuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLmR0c2kKQEAgLTE0OCw2ICsxNDgsMTIgQEAKIAlzdGF0dXMgPSAib2theSI7CiB9OwogCismdHNhZGMgeworCXJvY2tjaGlwLGh3LXRzaHV0LW1vZGUgPSA8MD47IC8qIHRzaHV0IG1vZGUgMDpDUlUgMTpHUElPICovCisJcm9ja2NoaXAsaHctdHNodXQtcG9sYXJpdHkgPSA8MD47IC8qIHRzaHV0IHBvbGFyaXR5IDA6TE9XIDE6SElHSCAqLworCXN0YXR1cyA9ICJva2F5IjsKK307CisKICZwaW5jdHJsIHsKIAliYWNrbGlnaHQgewogCQlibF9lbjogYmwtZW4gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LXRoZXJtYWwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC10aGVybWFsLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY5NTIwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC10aGVybWFsLmR0c2kKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgUkszMjg4IFNvQyB0aGVybWFsCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvdGhlcm1hbC90aGVybWFsLmg+CisKK3Jlc2VydmVfdGhlcm1hbDogcmVzZXJ2ZV90aGVybWFsIHsKKwlwb2xsaW5nLWRlbGF5LXBhc3NpdmUgPSA8MTAwMD47IC8qIG1pbGxpc2Vjb25kcyAqLworCXBvbGxpbmctZGVsYXkgPSA8NTAwMD47IC8qIG1pbGxpc2Vjb25kcyAqLworCisJdGhlcm1hbC1zZW5zb3JzID0gPCZ0c2FkYyAwPjsKK307CisKK2NwdV90aGVybWFsOiBjcHVfdGhlcm1hbCB7CisJcG9sbGluZy1kZWxheS1wYXNzaXZlID0gPDEwMDA+OyAvKiBtaWxsaXNlY29uZHMgKi8KKwlwb2xsaW5nLWRlbGF5ID0gPDUwMDA+OyAvKiBtaWxsaXNlY29uZHMgKi8KKworCXRoZXJtYWwtc2Vuc29ycyA9IDwmdHNhZGMgMT47CisKKwl0cmlwcyB7CisJCWNwdV9hbGVydDA6IGNwdV9hbGVydDAgeworCQkJdGVtcGVyYXR1cmUgPSA8NzAwMDA+OyAvKiBtaWxsaWNlbHNpdXMgKi8KKwkJCWh5c3RlcmVzaXMgPSA8MjAwMD47IC8qIG1pbGxpY2Vsc2l1cyAqLworCQkJdHlwZSA9ICJwYXNzaXZlIjsKKwkJfTsKKwkJY3B1X2NyaXQ6IGNwdV9jcml0IHsKKwkJCXRlbXBlcmF0dXJlID0gPDkwMDAwPjsgLyogbWlsbGljZWxzaXVzICovCisJCQloeXN0ZXJlc2lzID0gPDIwMDA+OyAvKiBtaWxsaWNlbHNpdXMgKi8KKwkJCXR5cGUgPSAiY3JpdGljYWwiOworCQl9OworCX07CisKKwljb29saW5nLW1hcHMgeworCQltYXAwIHsKKwkJCXRyaXAgPSA8JmNwdV9hbGVydDA+OworCQkJY29vbGluZy1kZXZpY2UgPQorCQkJCTwmY3B1MCBUSEVSTUFMX05PX0xJTUlUIFRIRVJNQUxfTk9fTElNSVQ+OworCQl9OworCX07Cit9OworCitncHVfdGhlcm1hbDogZ3B1X3RoZXJtYWwgeworCXBvbGxpbmctZGVsYXktcGFzc2l2ZSA9IDwxMDAwPjsgLyogbWlsbGlzZWNvbmRzICovCisJcG9sbGluZy1kZWxheSA9IDw1MDAwPjsgLyogbWlsbGlzZWNvbmRzICovCisKKwl0aGVybWFsLXNlbnNvcnMgPSA8JnRzYWRjIDI+OworCisJdHJpcHMgeworCQlncHVfYWxlcnQwOiBncHVfYWxlcnQwIHsKKwkJCXRlbXBlcmF0dXJlID0gPDcwMDAwPjsgLyogbWlsbGljZWxzaXVzICovCisJCQloeXN0ZXJlc2lzID0gPDIwMDA+OyAvKiBtaWxsaWNlbHNpdXMgKi8KKwkJCXR5cGUgPSAicGFzc2l2ZSI7CisJCX07CisJCWdwdV9jcml0OiBncHVfY3JpdCB7CisJCQl0ZW1wZXJhdHVyZSA9IDw5MDAwMD47IC8qIG1pbGxpY2Vsc2l1cyAqLworCQkJaHlzdGVyZXNpcyA9IDwyMDAwPjsgLyogbWlsbGljZWxzaXVzICovCisJCQl0eXBlID0gImNyaXRpY2FsIjsKKwkJfTsKKwl9OworCisJY29vbGluZy1tYXBzIHsKKwkJbWFwMCB7CisJCQl0cmlwID0gPCZncHVfYWxlcnQwPjsKKwkJCWNvb2xpbmctZGV2aWNlID0KKwkJCQk8JmNwdTAgVEhFUk1BTF9OT19MSU1JVCBUSEVSTUFMX05PX0xJTUlUPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LmR0c2kKaW5kZXggODc0ZTY2ZC4uZmQxOWYwMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC5kdHNpCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BpbmN0cmwvcm9ja2NoaXAuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9yazMyODgtY3J1Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvdGhlcm1hbC90aGVybWFsLmg+CiAjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKIAogLyB7CkBAIC00NiwyNiArNDcsNTAgQEAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OworCQllbmFibGUtbWV0aG9kID0gInJvY2tjaGlwLHJrMzA2Ni1zbXAiOworCQlyb2NrY2hpcCxwbXUgPSA8JnBtdT47CiAKLQkJY3B1QDUwMCB7CisJCWNwdTA6IGNwdUA1MDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTIiOwogCQkJcmVnID0gPDB4NTAwPjsKKwkJCXJlc2V0cyA9IDwmY3J1IFNSU1RfQ09SRTA+OworCQkJb3BlcmF0aW5nLXBvaW50cyA9IDwKKwkJCQkvKiBLSHogICAgdVYgKi8KKwkJCQkxNjA4MDAwIDEzNTAwMDAKKwkJCQkxNTEyMDAwIDEzMDAwMDAKKwkJCQkxNDE2MDAwIDEyMDAwMDAKKwkJCQkxMjAwMDAwIDExMDAwMDAKKwkJCQkxMDA4MDAwIDEwNTAwMDAKKwkJCQkgODE2MDAwIDEwMDAwMDAKKwkJCQkgNjk2MDAwICA5NTAwMDAKKwkJCQkgNjAwMDAwICA5MDAwMDAKKwkJCQkgNDA4MDAwICA5MDAwMDAKKwkJCQkgMzEyMDAwICA5MDAwMDAKKwkJCQkgMjE2MDAwICA5MDAwMDAKKwkJCQkgMTI2MDAwICA5MDAwMDAKKwkJCT47CisJCQkjY29vbGluZy1jZWxscyA9IDwyPjsgLyogbWluIGZvbGxvd2VkIGJ5IG1heCAqLworCQkJY2xvY2stbGF0ZW5jeSA9IDw0MDAwMD47CisJCQljbG9ja3MgPSA8JmNydSBBUk1DTEs+OwogCQl9OwogCQljcHVANTAxIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTEyIjsKIAkJCXJlZyA9IDwweDUwMT47CisJCQlyZXNldHMgPSA8JmNydSBTUlNUX0NPUkUxPjsKIAkJfTsKIAkJY3B1QDUwMiB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExMiI7CiAJCQlyZWcgPSA8MHg1MDI+OworCQkJcmVzZXRzID0gPCZjcnUgU1JTVF9DT1JFMj47CiAJCX07CiAJCWNwdUA1MDMgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTIiOwogCQkJcmVnID0gPDB4NTAzPjsKKwkJCXJlc2V0cyA9IDwmY3J1IFNSU1RfQ09SRTM+OwogCQl9OwogCX07CiAKQEAgLTExNiw2ICsxNDEsNyBAQAogCiAJdGltZXIgewogCQljb21wYXRpYmxlID0gImFybSxhcm12Ny10aW1lciI7CisJCWFybSxjcHUtcmVnaXN0ZXJzLW5vdC1mdy1jb25maWd1cmVkOwogCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTMgKEdJQ19DUFVfTUFTS19TSU1QTEUoNCkgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKT4sCiAJCQkgICAgIDxHSUNfUFBJIDE0IChHSUNfQ1BVX01BU0tfU0lNUExFKDQpIHwgSVJRX1RZUEVfTEVWRUxfSElHSCk+LAogCQkJICAgICA8R0lDX1BQSSAxMSAoR0lDX0NQVV9NQVNLX1NJTVBMRSg0KSB8IElSUV9UWVBFX0xFVkVMX0hJR0gpPiwKQEAgLTE3Nyw2ICsyMDMsOCBAQAogCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1zcGkiLCAicm9ja2NoaXAscmszMDY2LXNwaSI7CiAJCWNsb2NrcyA9IDwmY3J1IFNDTEtfU1BJMD4sIDwmY3J1IFBDTEtfU1BJMD47CiAJCWNsb2NrLW5hbWVzID0gInNwaWNsayIsICJhcGJfcGNsayI7CisJCWRtYXMgPSA8JmRtYWNfcGVyaSAxMT4sIDwmZG1hY19wZXJpIDEyPjsKKwkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKIAkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDQ0IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JnNwaTBfY2xrICZzcGkwX3R4ICZzcGkwX3J4ICZzcGkwX2NzMD47CkBAIC0xOTAsNiArMjE4LDggQEAKIAkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtc3BpIiwgInJvY2tjaGlwLHJrMzA2Ni1zcGkiOwogCQljbG9ja3MgPSA8JmNydSBTQ0xLX1NQSTE+LCA8JmNydSBQQ0xLX1NQSTE+OwogCQljbG9jay1uYW1lcyA9ICJzcGljbGsiLCAiYXBiX3BjbGsiOworCQlkbWFzID0gPCZkbWFjX3BlcmkgMTM+LCA8JmRtYWNfcGVyaSAxND47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCWludGVycnVwdHMgPSA8R0lDX1NQSSA0NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJcGluY3RybC0wID0gPCZzcGkxX2NsayAmc3BpMV90eCAmc3BpMV9yeCAmc3BpMV9jczA+OwpAQCAtMjAzLDYgKzIzMyw4IEBACiAJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4LXNwaSIsICJyb2NrY2hpcCxyazMwNjYtc3BpIjsKIAkJY2xvY2tzID0gPCZjcnUgU0NMS19TUEkyPiwgPCZjcnUgUENMS19TUEkyPjsKIAkJY2xvY2stbmFtZXMgPSAic3BpY2xrIiwgImFwYl9wY2xrIjsKKwkJZG1hcyA9IDwmZG1hY19wZXJpIDE1PiwgPCZkbWFjX3BlcmkgMTY+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCXBpbmN0cmwtMCA9IDwmc3BpMl9jbGsgJnNwaTJfdHggJnNwaTJfcnggJnNwaTJfY3MwPjsKQEAgLTMyOSw2ICszNjEsMjUgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJdGhlcm1hbC16b25lcyB7CisJCSNpbmNsdWRlICJyazMyODgtdGhlcm1hbC5kdHNpIgorCX07CisKKwl0c2FkYzogdHNhZGNAZmYyODAwMDAgeworCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC10c2FkYyI7CisJCXJlZyA9IDwweGZmMjgwMDAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDM3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmNydSBTQ0xLX1RTQURDPiwgPCZjcnUgUENMS19UU0FEQz47CisJCWNsb2NrLW5hbWVzID0gInRzYWRjIiwgImFwYl9wY2xrIjsKKwkJcmVzZXRzID0gPCZjcnUgU1JTVF9UU0FEQz47CisJCXJlc2V0LW5hbWVzID0gInRzYWRjLWFwYiI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmb3RwX291dD47CisJCSN0aGVybWFsLXNlbnNvci1jZWxscyA9IDwxPjsKKwkJcm9ja2NoaXAsaHctdHNodXQtdGVtcCA9IDw5NTAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXVzYl9ob3N0MF9laGNpOiB1c2JAZmY1MDAwMDAgewogCQljb21wYXRpYmxlID0gImdlbmVyaWMtZWhjaSI7CiAJCXJlZyA9IDwweGZmNTAwMDAwIDB4MTAwPjsKQEAgLTQzOSw2ICs0OTAsMTggQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJYnVzX2ludG1lbUBmZjcwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibW1pby1zcmFtIjsKKwkJcmVnID0gPDB4ZmY3MDAwMDAgMHgxODAwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMHhmZjcwMDAwMCAweDE4MDAwPjsKKwkJc21wLXNyYW1AMCB7CisJCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzA2Ni1zbXAtc3JhbSI7CisJCQlyZWcgPSA8MHgwMCAweDEwPjsKKwkJfTsKKwl9OworCiAJcG11OiBwb3dlci1tYW5hZ2VtZW50QGZmNzMwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtcG11IiwgInN5c2NvbiI7CiAJCXJlZyA9IDwweGZmNzMwMDAwIDB4MTAwPjsKQEAgLTQ1NSw2ICs1MTgsMTYgQEAKIAkJcm9ja2NoaXAsZ3JmID0gPCZncmY+OwogCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJYXNzaWduZWQtY2xvY2tzID0gPCZjcnUgUExMX0dQTEw+LCA8JmNydSBQTExfQ1BMTD4sCisJCQkJICA8JmNydSBQTExfTlBMTD4sIDwmY3J1IEFDTEtfQ1BVPiwKKwkJCQkgIDwmY3J1IEhDTEtfQ1BVPiwgPCZjcnUgUENMS19DUFU+LAorCQkJCSAgPCZjcnUgQUNMS19QRVJJPiwgPCZjcnUgSENMS19QRVJJPiwKKwkJCQkgIDwmY3J1IFBDTEtfUEVSST47CisJCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDU5NDAwMDAwMD4sIDw0MDAwMDAwMDA+LAorCQkJCSAgICAgICA8NTAwMDAwMDAwPiwgPDMwMDAwMDAwMD4sCisJCQkJICAgICAgIDwxNTAwMDAwMDA+LCA8NzUwMDAwMDA+LAorCQkJCSAgICAgICA8MzAwMDAwMDAwPiwgPDE1MDAwMDAwMD4sCisJCQkJICAgICAgIDw3NTAwMDAwMD47CiAJfTsKIAogCWdyZjogc3lzY29uQGZmNzcwMDAwIHsKQEAgLTQ4NCw2ICs1NTcsMjQgQEAKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCisJdm9wYl9tbXU6IGlvbW11QGZmOTMwMzAwIHsKKwkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxpb21tdSI7CisJCXJlZyA9IDwweGZmOTMwMzAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlpbnRlcnJ1cHQtbmFtZXMgPSAidm9wYl9tbXUiOworCQkjaW9tbXUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXZvcGxfbW11OiBpb21tdUBmZjk0MDMwMCB7CisJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAsaW9tbXUiOworCQlyZWcgPSA8MHhmZjk0MDMwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gInZvcGxfbW11IjsKKwkJI2lvbW11LWNlbGxzID0gPDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQGZmYzAxMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJhcm0sZ2ljLTQwMCI7CiAJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtOTQ4LDYgKzEwMzksMTIgQEAKIAkJCX07CiAJCX07CiAKKwkJdHNhZGMgeworCQkJb3RwX291dDogb3RwLW91dCB7CisJCQkJcm9ja2NoaXAscGlucyA9IDwwIDEwIFJLX0ZVTkNfMSAmcGNmZ19wdWxsX25vbmU+OworCQkJfTsKKwkJfTsKKwogCQlwd20wIHsKIAkJCXB3bTBfcGluOiBwd20wLXBpbiB7CiAJCQkJcm9ja2NoaXAscGlucyA9IDw3IDAgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazN4eHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrM3h4eC5kdHNpCmluZGV4IDQ5OTQ2OGQuLmM1NGE5NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrM3h4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrM3h4eC5kdHNpCkBAIC0yOSw2ICsyOSwxMCBAQAogCQltc2hjMCA9ICZlbW1jOwogCQltc2hjMSA9ICZtbWMwOwogCQltc2hjMiA9ICZtbWMxOworCQlzZXJpYWwwID0gJnVhcnQwOworCQlzZXJpYWwxID0gJnVhcnQxOworCQlzZXJpYWwyID0gJnVhcnQyOworCQlzZXJpYWwzID0gJnVhcnQzOwogCQlzcGkwID0gJnNwaTA7CiAJCXNwaTEgPSAmc3BpMTsKIAl9OwpAQCAtMTczLDEwICsxNzcsOSBAQAogCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMjkyOC1kdy1tc2hjIjsKIAkJcmVnID0gPDB4MTAyMTQwMDAgMHgxMDAwPjsKIAkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCiAJCWNsb2NrcyA9IDwmY3J1IEhDTEtfU0RNTUM+LCA8JmNydSBTQ0xLX1NETU1DPjsKIAkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7Ci0KKwkJZmlmby1kZXB0aCA9IDwyNTY+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTE4NCwxMCArMTg3LDkgQEAKIAkJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazI5MjgtZHctbXNoYyI7CiAJCXJlZyA9IDwweDEwMjE4MDAwIDB4MTAwMD47CiAJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQogCQljbG9ja3MgPSA8JmNydSBIQ0xLX1NESU8+LCA8JmNydSBTQ0xLX1NESU8+OwogCQljbG9jay1uYW1lcyA9ICJiaXUiLCAiY2l1IjsKLQorCQlmaWZvLWRlcHRoID0gPDI1Nj47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMTk1LDEwICsxOTcsOSBAQAogCQljb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMjkyOC1kdy1tc2hjIjsKIAkJcmVnID0gPDB4MTAyMWMwMDAgMHgxMDAwPjsKIAkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI1IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCiAJCWNsb2NrcyA9IDwmY3J1IEhDTEtfRU1NQz4sIDwmY3J1IFNDTEtfRU1NQz47CiAJCWNsb2NrLW5hbWVzID0gImJpdSIsICJjaXUiOwotCisJCWZpZm8tZGVwdGggPSA8MjU2PjsKIAkJc3RhdHVzID0gImRpc2FibGVkIjsKIAl9OwogCkBAIC0zNjcsNiArMzY4LDggQEAKIAkJcmVnID0gPDB4MjAwNzAwMDAgMHgxMDAwPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OworCQlkbWFzID0gPCZkbWFjMiAxMD4sIDwmZG1hYzIgMTE+OworCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKQEAgLTM3OCw2ICszODEsOCBAQAogCQlyZWcgPSA8MHgyMDA3NDAwMCAweDEwMDA+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CisJCWRtYXMgPSA8JmRtYWMyIDEyPiwgPCZkbWFjMiAxMz47CisJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zM2M2NDEwLW1pbmk2NDEwLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3MzYzY0MTAtbWluaTY0MTAuZHRzCmluZGV4IDU3ZTAwZjkuLmEyNWRlYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3MzYzY0MTAtbWluaTY0MTAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3MzYzY0MTAtbWluaTY0MTAuZHRzCkBAIC0xOTgsMTAgKzE5OCw2IEBACiAJc3RhdHVzID0gIm9rYXkiOwogfTsKIAotJnB3bSB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQogJnBpbmN0cmwwIHsKIAlncGlvX2xlZHM6IGdwaW8tbGVkcyB7CiAJCXNhbXN1bmcscGlucyA9ICJncGstNCIsICJncGstNSIsICJncGstNiIsICJncGstNyI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zM2M2NHh4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zM2M2NHh4LmR0c2kKaW5kZXggZmY1YmRhYS4uMGNjYjQxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvczNjNjR4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3MzYzY0eHguZHRzaQpAQCAtMTcyLDcgKzE3Miw2IEBACiAJCQljbG9ja3MgPSA8JmNsb2NrcyBQQ0xLX1BXTT47CiAJCQlzYW1zdW5nLHB3bS1vdXRwdXRzID0gPDA+LCA8MT47CiAJCQkjcHdtLWNlbGxzID0gPDM+OwotCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAogCQlwaW5jdHJsMDogcGluY3RybEA3ZjAwODAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zaDczYTAta3ptOWctcmVmZXJlbmNlLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NoNzNhMC1rem05Zy1yZWZlcmVuY2UuZHRzCmluZGV4IDMwZWY5N2UuLjkzOWJlMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NoNzNhMC1rem05Zy1yZWZlcmVuY2UuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NoNzNhMC1rem05Zy1yZWZlcmVuY2UuZHRzCkBAIC00MCw2ICs0MCw3IEBACiAKIAljaG9zZW4gewogCQlib290YXJncyA9ICJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzQsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCBpZ25vcmVfbG9nbGV2ZWwgcnciOworCQlzdGRvdXQtcGF0aCA9ICZzY2lmYTQ7CiAJfTsKIAogCW1lbW9yeSB7CkBAIC0xMDAsMTkgKzEwMSwyMyBAQAogCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CiAJCWxlZDEgewogCQkJZ3Bpb3MgPSA8JnBmYyAyMCBHUElPX0FDVElWRV9MT1c+OworCQkJbGFiZWwgPSAiTEVEMSI7CiAJCX07CiAJCWxlZDIgewogCQkJZ3Bpb3MgPSA8JnBmYyAyMSBHUElPX0FDVElWRV9MT1c+OworCQkJbGFiZWwgPSAiTEVEMiI7CiAJCX07CiAJCWxlZDMgewogCQkJZ3Bpb3MgPSA8JnBmYyAyMiBHUElPX0FDVElWRV9MT1c+OworCQkJbGFiZWwgPSAiTEVEMyI7CiAJCX07CiAJCWxlZDQgewogCQkJZ3Bpb3MgPSA8JnBmYyAyMyBHUElPX0FDVElWRV9MT1c+OworCQkJbGFiZWwgPSAiTEVENCI7CiAJCX07CiAJfTsKIAotCWdwaW8ta2V5cyB7CisJa2V5Ym9hcmQgewogCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CiAKIAkJYmFjay1rZXkgewpAQCAtMjUwLDcgKzI1NSw3IEBACiAJCX07CiAJfTsKIAotCWFrNDY0ODogYWs0NjQ4QDB4MTIgeworCWFrNDY0ODogYWs0NjQ4QDEyIHsKIAkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJhc2FoaS1rYXNlaSxhazQ2NDgiOwogCQlyZWcgPSA8MHgxMj47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zaDczYTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NoNzNhMC5kdHNpCmluZGV4IDAzMGE1OTIuLmQ4ZGVmNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NoNzNhMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NoNzNhMC5kdHNpCkBAIC0xMzgsNyArMTM4LDcgQEAKIAlpMmMwOiBpMmNAZTY4MjAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtc2g3M2EwIiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MHhlNjgyMDAwMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNjcgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNjggSVJRX1RZUEVfTEVWRUxfSElHSApAQCAtMTUwLDcgKzE1MCw3IEBACiAJaTJjMTogaTJjQGU2ODIyMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXNoNzNhMCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDB4ZTY4MjIwMDAgMHg0MjU+OwogCQlpbnRlcnJ1cHRzID0gPDAgNTEgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCA1MiBJUlFfVFlQRV9MRVZFTF9ISUdICkBAIC0xNjIsNyArMTYyLDcgQEAKIAlpMmMyOiBpMmNAZTY4MjQwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAicmVuZXNhcyxybW9iaWxlLWlpYyI7CisJCWNvbXBhdGlibGUgPSAicmVuZXNhcyxpaWMtc2g3M2EwIiwgInJlbmVzYXMscm1vYmlsZS1paWMiOwogCQlyZWcgPSA8MHhlNjgyNDAwMCAweDQyNT47CiAJCWludGVycnVwdHMgPSA8MCAxNzEgSVJRX1RZUEVfTEVWRUxfSElHSAogCQkJICAgICAgMCAxNzIgSVJRX1RZUEVfTEVWRUxfSElHSApAQCAtMTc0LDcgKzE3NCw3IEBACiAJaTJjMzogaTJjQGU2ODI2MDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInJlbmVzYXMscm1vYmlsZS1paWMiOworCQljb21wYXRpYmxlID0gInJlbmVzYXMsaWljLXNoNzNhMCIsICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKIAkJcmVnID0gPDB4ZTY4MjYwMDAgMHg0MjU+OwogCQlpbnRlcnJ1cHRzID0gPDAgMTgzIElSUV9UWVBFX0xFVkVMX0hJR0gKIAkJCSAgICAgIDAgMTg0IElSUV9UWVBFX0xFVkVMX0hJR0gKQEAgLTE4Niw3ICsxODYsNyBAQAogCWkyYzQ6IGkyY0BlNjgyODAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJtb2JpbGUtaWljIjsKKwkJY29tcGF0aWJsZSA9ICJyZW5lc2FzLGlpYy1zaDczYTAiLCAicmVuZXNhcyxybW9iaWxlLWlpYyI7CiAJCXJlZyA9IDwweGU2ODI4MDAwIDB4NDI1PjsKIAkJaW50ZXJydXB0cyA9IDwwIDE4NyBJUlFfVFlQRV9MRVZFTF9ISUdICiAJCQkgICAgICAwIDE4OCBJUlFfVFlQRV9MRVZFTF9ISUdICmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhLmR0c2kKaW5kZXggNDQ3MmZkOS4uMjUyYzNkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2EuZHRzaQpAQCAtNjM5LDYgKzYzOSwzMyBAQAogCQkJY2xvY2stbmFtZXMgPSAiYml1IiwgImNpdSI7CiAJCX07CiAKKwkJb2NyYW06IHNyYW1AZmZmZjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iOworCQkJcmVnID0gPDB4ZmZmZjAwMDAgMHgxMDAwMD47CisJCX07CisKKwkJc3BpMDogc3BpQGZmZjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItc3NpIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHhmZmYwMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE1NCA0PjsKKwkJCW51bS1jcyA9IDw0PjsKKwkJCWNsb2NrcyA9IDwmc3BpX21fY2xrPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc3BpMTogc3BpQGZmZjAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItc3NpIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHhmZmYwMTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE1NiA0PjsKKwkJCW51bS1jcyA9IDw0PjsKKwkJCWNsb2NrcyA9IDwmc3BpX21fY2xrPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAkJLyogTG9jYWwgdGltZXIgKi8KIAkJdGltZXJAZmZmZWM2MDAgewogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LXR3ZC10aW1lciI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2FycmlhMTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfYXJyaWExMC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMDVjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2FycmlhMTAuZHRzaQpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIENvcHlyaWdodCBBbHRlcmEgQ29ycG9yYXRpb24gKEMpIDIwMTQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisKKy8geworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZnbWFjMDsKKwkJZXRoZXJuZXQxID0gJmdtYWMxOworCQlldGhlcm5ldDIgPSAmZ21hYzI7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDE7CisJCXRpbWVyMCA9ICZ0aW1lcjA7CisJCXRpbWVyMSA9ICZ0aW1lcjE7CisJCXRpbWVyMiA9ICZ0aW1lcjI7CisJCXRpbWVyMyA9ICZ0aW1lcjM7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisJCWNwdUAxIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDE+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCX07CisKKwlpbnRjOiBpbnRjQGZmZmZkMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LWdpYyI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlyZWcgPSA8MHhmZmZmZDAwMCAweDEwMDA+LAorCQkgICAgICA8MHhmZmZmYzEwMCAweDEwMD47CisJfTsKKworCXNvYyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaW50Yz47CisJCXJhbmdlczsKKworCQlhbWJhIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGFtYmEtYnVzIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXM7CisKKwkJCXBkbWE6IHBkbWFAZmZkYTEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzMwIiwgImFybSxwcmltZWNlbGwiOworCQkJCXJlZyA9IDwweGZmZGExMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDgzIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDwwIDg0IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDwwIDg1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDwwIDg2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDwwIDg3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDwwIDg4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDwwIDg5IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgICAgIDwwIDkwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJCSNkbWEtY2VsbHMgPSA8MT47CisJCQkJI2RtYS1jaGFubmVscyA9IDw4PjsKKwkJCQkjZG1hLXJlcXVlc3RzID0gPDMyPjsKKwkJCX07CisJCX07CisKKwkJY2xrbWdyQGZmZDA0MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImFsdHIsY2xrLW1nciI7CisJCQkJcmVnID0gPDB4ZmZkMDQwMDAgMHgxMDAwPjsKKworCQkJCWNsb2NrcyB7CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCQlvc2MxOiBvc2MxIHsKKwkJCQkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJCQl9OworCisJCQkJCW1haW5fcGxsOiBtYWluX3BsbCB7CisJCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJY29tcGF0aWJsZSA9ICJhbHRyLHNvY2ZwZ2EtcGxsLWNsb2NrIjsKKwkJCQkJCWNsb2NrcyA9IDwmb3NjMT47CisJCQkJCX07CisKKwkJCQkJcGVyaXBoX3BsbDogcGVyaXBoX3BsbCB7CisJCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJCQkJY29tcGF0aWJsZSA9ICJhbHRyLHNvY2ZwZ2EtcGxsLWNsb2NrIjsKKwkJCQkJCWNsb2NrcyA9IDwmb3NjMT47CisJCQkJCX07CisJCQkJfTsKKwkJfTsKKworCQlnbWFjMDogZXRoZXJuZXRAZmY4MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbHRyLHNvY2ZwZ2Etc3RtbWFjIiwgInNucHMsZHdtYWMtMy43MmEiLCAic25wcyxkd21hYyI7CisJCQlyZWcgPSA8MHhmZjgwMDAwMCAweDIwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDkyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJaW50ZXJydXB0LW5hbWVzID0gIm1hY2lycSI7CisJCQkvKiBGaWxsZWQgaW4gYnkgYm9vdGxvYWRlciAqLworCQkJbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlnbWFjMTogZXRoZXJuZXRAZmY4MDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbHRyLHNvY2ZwZ2Etc3RtbWFjIiwgInNucHMsZHdtYWMtMy43MmEiLCAic25wcyxkd21hYyI7CisJCSAgICAgICAgcmVnID0gPDB4ZmY4MDIwMDAgMHgyMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA5MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWludGVycnVwdC1uYW1lcyA9ICJtYWNpcnEiOworCQkJLyogRmlsbGVkIGluIGJ5IGJvb3Rsb2FkZXIgKi8KKwkJCW1hYy1hZGRyZXNzID0gWzAwIDAwIDAwIDAwIDAwIDAwXTsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZ21hYzI6IGV0aGVybmV0QGZmODA0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLXN0bW1hYyIsICJzbnBzLGR3bWFjLTMuNzJhIiwgInNucHMsZHdtYWMiOworCQkJcmVnID0gPDB4ZmY4MDQwMDAgMHgyMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA5NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWludGVycnVwdC1uYW1lcyA9ICJtYWNpcnEiOworCQkJLyogRmlsbGVkIGluIGJ5IGJvb3Rsb2FkZXIgKi8KKwkJCW1hYy1hZGRyZXNzID0gWzAwIDAwIDAwIDAwIDAwIDAwXTsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZ3BpbzA6IGdwaW9AZmZjMDI5MDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3BpbyI7CisJCQlyZWcgPSA8MHhmZmMwMjkwMCAweDEwMD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlwb3J0YTogZ3Bpby1jb250cm9sbGVyQDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJc25wcyxuci1ncGlvcyA9IDwyOT47CisJCQkJcmVnID0gPDA+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCX07CisJCX07CisKKwkJZ3BpbzE6IGdwaW9AZmZjMDJhMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3BpbyI7CisJCQlyZWcgPSA8MHhmZmMwMmEwMCAweDEwMD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlwb3J0YjogZ3Bpby1jb250cm9sbGVyQDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJc25wcyxuci1ncGlvcyA9IDwyOT47CisJCQkJcmVnID0gPDA+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCX07CisJCX07CisKKwkJZ3BpbzI6IGdwaW9AZmZjMDJiMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3BpbyI7CisJCQlyZWcgPSA8MHhmZmMwMmIwMCAweDEwMD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCQlwb3J0YzogZ3Bpby1jb250cm9sbGVyQDAgeworCQkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItZ3Bpby1wb3J0IjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJc25wcyxuci1ncGlvcyA9IDwyNz47CisJCQkJcmVnID0gPDA+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0cyA9IDwwIDExNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCX07CisJCX07CisKKwkJaTJjMDogaTJjQGZmYzAyMjAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZGVzaWdud2FyZS1pMmMiOworCQkJcmVnID0gPDB4ZmZjMDIyMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEwNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjMTogaTJjQGZmYzAyMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZGVzaWdud2FyZS1pMmMiOworCQkJcmVnID0gPDB4ZmZjMDIzMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjMjogaTJjQGZmYzAyNDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZGVzaWdud2FyZS1pMmMiOworCQkJcmVnID0gPDB4ZmZjMDI0MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEwNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjMzogaTJjQGZmYzAyNTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZGVzaWdud2FyZS1pMmMiOworCQkJcmVnID0gPDB4ZmZjMDI1MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjNDogaTJjQGZmYzAyNjAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInNucHMsZGVzaWdud2FyZS1pMmMiOworCQkJcmVnID0gPDB4ZmZjMDI2MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEwOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJTDI6IGwyLWNhY2hlQGZmZmZmMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzEwLWNhY2hlIjsKKwkJCXJlZyA9IDwweGZmZmZmMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQljYWNoZS11bmlmaWVkOworCQkJY2FjaGUtbGV2ZWwgPSA8Mj47CisJCX07CisKKwkJbW1jOiBkd21tYzBAZmY4MDgwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLWR3LW1zaGMiOworCQkJcmVnID0gPDB4ZmY4MDgwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA5OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCWZpZm8tZGVwdGggPSA8MHg0MDA+OworCQl9OworCisJCW9jcmFtOiBzcmFtQGZmZTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibW1pby1zcmFtIjsKKwkJCXJlZyA9IDwweGZmZTAwMDAwIDB4NDAwMDA+OworCQl9OworCisJCXJzdDogcnN0bWdyQGZmZDA1MDAwIHsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiYWx0cixyc3QtbWdyIjsKKwkJCXJlZyA9IDwweGZmZDA1MDAwIDB4MTAwPjsKKwkJfTsKKworCQlzeXNtZ3I6IHN5c21nckBmZmQwNjAwMCB7CisJCQljb21wYXRpYmxlID0gImFsdHIsc3lzLW1nciIsICJzeXNjb24iOworCQkJcmVnID0gPDB4ZmZkMDYwMDAgMHgzMDA+OworCQl9OworCisJCS8qIExvY2FsIHRpbWVyICovCisJCXRpbWVyQGZmZmZjNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS10d2QtdGltZXIiOworCQkJcmVnID0gPDB4ZmZmZmM2MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEzIDB4ZjA0PjsKKwkJfTsKKworCQl0aW1lcjA6IHRpbWVyMEBmZmMwMjcwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXRpbWVyIjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlyZWcgPSA8MHhmZmMwMjcwMCAweDEwMD47CisJCX07CisKKwkJdGltZXIxOiB0aW1lcjFAZmZjMDI4MDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi10aW1lciI7CisJCQlpbnRlcnJ1cHRzID0gPDAgMTE2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJcmVnID0gPDB4ZmZjMDI4MDAgMHgxMDA+OworCQl9OworCisJCXRpbWVyMjogdGltZXIyQGZmZDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdGltZXIiOworCQkJaW50ZXJydXB0cyA9IDwwIDExNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXJlZyA9IDwweGZmZDAwMDAwIDB4MTAwPjsKKwkJfTsKKworCQl0aW1lcjM6IHRpbWVyM0BmZmQwMDEwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXRpbWVyIjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlyZWcgPSA8MHhmZmQwMTAwMCAweDEwMD47CisJCX07CisKKwkJdWFydDA6IHNlcmlhbDBAZmZjMDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCXJlZyA9IDwweGZmYzAyMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlyZWctc2hpZnQgPSA8Mj47CisJCQlyZWctaW8td2lkdGggPSA8ND47CisJCX07CisKKwkJdWFydDE6IHNlcmlhbDFAZmZjMDIxMDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCXJlZyA9IDwweGZmYzAyMTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlyZWctc2hpZnQgPSA8Mj47CisJCQlyZWctaW8td2lkdGggPSA8ND47CisJCX07CisKKwkJdXNicGh5MDogdXNicGh5QDAgeworCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAidXNiLW5vcC14Y2VpdiI7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdXNiMDogdXNiQGZmYjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkd2MyIjsKKwkJCXJlZyA9IDwweGZmYjAwMDAwIDB4ZmZmZj47CisJCQlpbnRlcnJ1cHRzID0gPDAgOTUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlwaHlzID0gPCZ1c2JwaHkwPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IyLXBoeSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVzYjE6IHVzYkBmZmI0MDAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHdjMiI7CisJCQlyZWcgPSA8MHhmZmI0MDAwMCAweGZmZmY+OworCQkJaW50ZXJydXB0cyA9IDwwIDk2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkJcGh5cyA9IDwmdXNicGh5MD47CisJCQlwaHktbmFtZXMgPSAidXNiMi1waHkiOworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl3YXRjaGRvZzA6IHdhdGNoZG9nQGZmZDAwMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy13ZHQiOworCQkJcmVnID0gPDB4ZmZkMDAyMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDExOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJd2F0Y2hkb2cxOiB3YXRjaGRvZ0BmZmQwMDMwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctd2R0IjsKKwkJCXJlZyA9IDwweGZmZDAwMzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxMjAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9hcnJpYTEwX3NvY2RrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfYXJyaWExMF9zb2Nkay5kdHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzAxNWNlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfYXJyaWExMF9zb2Nkay5kdHMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBbHRlcmEgQ29ycG9yYXRpb24gPHd3dy5hbHRlcmEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSAic29jZnBnYV9hcnJpYTEwLmR0c2kiCisKKy8geworCW1vZGVsID0gIkFsdGVyYSBTT0NGUEdBIEFycmlhIDEwIjsKKwljb21wYXRpYmxlID0gImFsdHIsc29jZnBnYS1hcnJpYTEwIiwgImFsdHIsc29jZnBnYSI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMCByb290d2FpdCI7CisJfTsKKworCW1lbW9yeSB7CisJCW5hbWUgPSAibWVtb3J5IjsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MCAweDQwMDAwMDAwPjsgLyogMUdCICovCisJfTsKKworCXNvYyB7CisJCWNsa21nckBmZmQwNDAwMCB7CisJCQljbG9ja3MgeworCQkJCW9zYzEgeworCQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDA+OworCQkJCX07CisJCQl9OworCQl9OworCisJCXNlcmlhbDBAZmZjMDIwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9jeWNsb25lNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc29jZnBnYV9jeWNsb25lNS5kdHNpCmluZGV4IDI4YzA1ZTcuLjA2ZGI5NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3NvY2ZwZ2FfY3ljbG9uZTUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zb2NmcGdhX2N5Y2xvbmU1LmR0c2kKQEAgLTQ5LDMgKzQ5LDcgQEAKIAkJfTsKIAl9OwogfTsKKworJndhdGNoZG9nMCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1kYng1eDAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1kYng1eDAuZHRzaQppbmRleCA5ZDIzMjMwLi5iZmQzZjFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGUtZGJ4NXgwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLWRieDV4MC5kdHNpCkBAIC0xMSw2ICsxMSw3IEBACiAKICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9tZmQvZGJ4NTAwLXByY211Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvYXJtL3V4NTAwX3BtX2RvbWFpbnMuaD4KICNpbmNsdWRlICJza2VsZXRvbi5kdHNpIgogCiAvIHsKQEAgLTQzLDYgKzQ0LDEwIEBACiAJCQlpbnRlcnJ1cHRzID0gPDAgNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJfTsKIAorCQlwbV9kb21haW5zOiBwbV9kb21haW5zMCB7CisJCQljb21wYXRpYmxlID0gInN0ZXJpY3Nzb24sdXg1MDAtcG0tZG9tYWlucyI7CisJCQkjcG93ZXItZG9tYWluLWNlbGxzID0gPDE+OworCQl9OwogCiAJCWNsb2NrcyB7CiAJCQljb21wYXRpYmxlID0gInN0ZXJpY3Nzb24sdTg1MDAtY2xrcyI7CkBAIC02MzYsNiArNjQxLDcgQEAKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMyAzPiwgPCZwcmNjX3BjbGsgMyAzPjsKIAkJCWNsb2NrLW5hbWVzID0gImkyY2NsayIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQlpMmNAODAxMjIwMDAgewpAQCAtNjUxLDYgKzY1Nyw3IEBACiAKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDEgMj4sIDwmcHJjY19wY2xrIDEgMj47CiAJCQljbG9jay1uYW1lcyA9ICJpMmNjbGsiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJaTJjQDgwMTI4MDAwIHsKQEAgLTY2Niw2ICs2NzMsNyBAQAogCiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAxIDY+LCA8JnByY2NfcGNsayAxIDY+OwogCQkJY2xvY2stbmFtZXMgPSAiaTJjY2xrIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCWkyY0A4MDExMDAwMCB7CkBAIC02ODEsNiArNjg5LDcgQEAKIAogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMiAwPiwgPCZwcmNjX3BjbGsgMiAwPjsKIAkJCWNsb2NrLW5hbWVzID0gImkyY2NsayIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQlpMmNAODAxMmEwMDAgewpAQCAtNjk2LDYgKzcwNSw3IEBACiAKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDEgOT4sIDwmcHJjY19wY2xrIDEgMTA+OwogCQkJY2xvY2stbmFtZXMgPSAiaTJjY2xrIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCXNzcEA4MDAwMjAwMCB7CkBAIC03MDksNiArNzE5LDcgQEAKIAkJCWRtYXMgPSA8JmRtYSA4IDAgMHgyPiwgLyogTG9naWNhbCAtIERldlRvTWVtICovCiAJCQkgICAgICAgPCZkbWEgOCAwIDB4MD47IC8qIExvZ2ljYWwgLSBNZW1Ub0RldiAqLwogCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCXNzcEA4MDAwMzAwMCB7CkBAIC03MjIsNiArNzMzLDcgQEAKIAkJCWRtYXMgPSA8JmRtYSA5IDAgMHgyPiwgLyogTG9naWNhbCAtIERldlRvTWVtICovCiAJCQkgICAgICAgPCZkbWEgOSAwIDB4MD47IC8qIExvZ2ljYWwgLSBNZW1Ub0RldiAqLwogCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCXNwaUA4MDExYTAwMCB7CkBAIC03MzYsNiArNzQ4LDcgQEAKIAkJCWRtYXMgPSA8JmRtYSAwIDAgMHgyPiwgLyogTG9naWNhbCAtIERldlRvTWVtICovCiAJCQkgICAgICAgPCZkbWEgMCAwIDB4MD47IC8qIExvZ2ljYWwgLSBNZW1Ub0RldiAqLwogCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCXNwaUA4MDExMjAwMCB7CkBAIC03NTAsNiArNzYzLDcgQEAKIAkJCWRtYXMgPSA8JmRtYSAzNSAwIDB4Mj4sIC8qIExvZ2ljYWwgLSBEZXZUb01lbSAqLwogCQkJICAgICAgIDwmZG1hIDM1IDAgMHgwPjsgLyogTG9naWNhbCAtIE1lbVRvRGV2ICovCiAJCQlkbWEtbmFtZXMgPSAicngiLCAidHgiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAJCX07CiAKIAkJc3BpQDgwMTExMDAwIHsKQEAgLTc2NCw2ICs3NzgsNyBAQAogCQkJZG1hcyA9IDwmZG1hIDMzIDAgMHgyPiwgLyogTG9naWNhbCAtIERldlRvTWVtICovCiAJCQkgICAgICAgPCZkbWEgMzMgMCAweDA+OyAvKiBMb2dpY2FsIC0gTWVtVG9EZXYgKi8KIAkJCWRtYS1uYW1lcyA9ICJyeCIsICJ0eCI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAkJfTsKIAogCQlzcGlAODAxMjkwMDAgewpAQCAtNzc4LDYgKzc5Myw3IEBACiAJCQlkbWFzID0gPCZkbWEgNDAgMCAweDI+LCAvKiBMb2dpY2FsIC0gRGV2VG9NZW0gKi8KIAkJCSAgICAgICA8JmRtYSA0MCAwIDB4MD47IC8qIExvZ2ljYWwgLSBNZW1Ub0RldiAqLwogCQkJZG1hLW5hbWVzID0gInJ4IiwgInR4IjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCQl9OwogCiAJCXVhcnRAODAxMjAwMDAgewpAQCAtODM2LDYgKzg1Miw3IEBACiAKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDEgNT4sIDwmcHJjY19wY2xrIDEgNT47CiAJCQljbG9jay1uYW1lcyA9ICJzZGkiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC04NTEsNiArODY4LDcgQEAKIAogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMiA0PiwgPCZwcmNjX3BjbGsgMiA2PjsKIAkJCWNsb2NrLW5hbWVzID0gInNkaSIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTg2Niw2ICs4ODQsNyBAQAogCiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAzIDQ+LCA8JnByY2NfcGNsayAzIDQ+OwogCQkJY2xvY2stbmFtZXMgPSAic2RpIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpAQCAtODgxLDYgKzkwMCw3IEBACiAKIAkJCWNsb2NrcyA9IDwmcHJjY19rY2xrIDIgNT4sIDwmcHJjY19wY2xrIDIgNz47CiAJCQljbG9jay1uYW1lcyA9ICJzZGkiLCAiYXBiX3BjbGsiOworCQkJcG93ZXItZG9tYWlucyA9IDwmcG1fZG9tYWlucyBET01BSU5fVkFQRT47CiAKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC04OTYsNiArOTE2LDcgQEAKIAogCQkJY2xvY2tzID0gPCZwcmNjX2tjbGsgMiAyPiwgPCZwcmNjX3BjbGsgMiA0PjsKIAkJCWNsb2NrLW5hbWVzID0gInNkaSIsICJhcGJfcGNsayI7CisJCQlwb3dlci1kb21haW5zID0gPCZwbV9kb21haW5zIERPTUFJTl9WQVBFPjsKIAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTkxMSw2ICs5MzIsNyBAQAogCiAJCQljbG9ja3MgPSA8JnByY2Nfa2NsayAzIDc+LCA8JnByY2NfcGNsayAzIDc+OwogCQkJY2xvY2stbmFtZXMgPSAic2RpIiwgImFwYl9wY2xrIjsKKwkJCXBvd2VyLWRvbWFpbnMgPSA8JnBtX2RvbWFpbnMgRE9NQUlOX1ZBUEU+OwogCiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstbmhrMTUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstbmhrMTUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YzAwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1uaGsxNS5kdHMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBmb3IgdGhlIFNULUVyaWNzc29uIE5vbWFkaWsgUzg4MTUgYm9hcmQKKyAqIFByb2R1Y2VkIGJ5IENhbGFvIFN5c3RlbXMKKyAqLworCisvZHRzLXYxLzsKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKyNpbmNsdWRlICJzdGUtbm9tYWRpay1zdG44ODE1LmR0c2kiCisKKy8geworCW1vZGVsID0gIk5vbWFkaWsgU1ROODgxNU5ISyI7CisJY29tcGF0aWJsZSA9ICJzdCxub21hZGlrLW5oay0xNSI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eUFNQTEsMTE1MjAwbjggZWFybHlwcmludGsiOworCX07CisKKwlhbGlhc2VzIHsKKwkJc3RtcGUtaTJjMCA9ICZzdG1wZTA7CisJCXN0bXBlLWkyYzEgPSAmc3RtcGUxOworCX07CisKKwlwaW5jdHJsIHsKKwkJc3RtcGUyNDAxXzEgeworCQkJc3RtcGUyNDAxXzFfbmhrX21vZGU6IHN0bXBlMjQwMV8xX25oayB7CisJCQkJbmhrX2NmZzEgeworCQkJCQlzdGUscGlucyA9ICJHUElPNzZfQjIwIjsgLy8gSVJRIGxpbmUKKwkJCQkJc3RlLGlucHV0ID0gPDA+OworCQkJCX07CisJCQkJbmhrX2NmZzIgeworCQkJCQlzdGUscGlucyA9ICJHUElPNzdfQjgiOyAvLyByZXNldCBsaW5lCisJCQkJCXN0ZSxvdXRwdXQgPSA8MT47CisJCQkJfTsKKwkJCX07CisJCX07CisJCXN0bXBlMjQwMV8yIHsKKwkJCXN0bXBlMjQwMV8yX25oa19tb2RlOiBzdG1wZTI0MDFfMl9uaGsgeworCQkJCW5oa19jZmcxIHsKKwkJCQkJc3RlLHBpbnMgPSAiR1BJTzc4X0E4IjsgLy8gSVJRIGxpbmUKKwkJCQkJc3RlLGlucHV0ID0gPDA+OworCQkJCX07CisJCQkJbmhrX2NmZzIgeworCQkJCQlzdGUscGlucyA9ICJHUElPNzlfQzkiOyAvLyByZXNldCBsaW5lCisJCQkJCXN0ZSxvdXRwdXQgPSA8MT47CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKKworCXNyY0AxMDFlMDAwMCB7CisJCS8qIFRoZXNlIGNocnlzdGFsIG91dHB1dHMgYXJlIG5vdCB1c2VkIG9uIHRoaXMgYm9hcmQgKi8KKwkJZGlzYWJsZS1zeHRhbG87CisJCWRpc2FibGUtbXh0YWxvOworCX07CisKKwkvKiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcnJ1cHQgaXMgcm91dGVkIG9uIHRoZSBOSEstMTUgZGVidWcgYm9hcmQgKi8KKwlleHRlcm5hbC1idXNAMzQwMDAwMDAgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHgzNDAwMDAwMCAweDEwMDAwMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlcyA9IDwwIDB4MzQwMDAwMDAgMHgxMDAwMDAwPjsKKwkJZXRoZXJuZXRAMzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic21zYyxsYW45MWMxMTEiOworCQkJcmVnID0gPDB4MzAwIDB4MGZkMDA+OworCQkJcmVnLWlvLXdpZHRoID0gPDI+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnN0bXBlX2dwaW80NCAxMCBHUElPX0FDVElWRV9ISUdIPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JnN0bXBlX2dwaW80ND47CisJCQlpbnRlcnJ1cHRzID0gPDExIElSUV9UWVBFX0VER0VfUklTSU5HPjsKKwkJfTsKKwl9OworCisJaTJjMCB7CisJCXN0bXBlMDogc3RtcGUyNDAxQDQzIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RtcGUyNDAxIjsKKwkJCXJlZyA9IDwweDQzPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZncGlvMiAxMyBHUElPX0FDVElWRV9MT1c+OyAvLyBHUElPNzcKKwkJCWludGVycnVwdHMgPSA8MTIgSVJRX1RZUEVfRURHRV9GQUxMSU5HPjsgLy8gR1BJTzc2CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMj47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCXdha2V1cC1zb3VyY2U7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZzdG1wZTI0MDFfMV9uaGtfbW9kZT47CisJCQlzdG1wZV9ncGlvNDM6IHN0bXBlX2dwaW8geworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RtcGUtZ3BpbyI7CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJLyogU29tZSBwaW5zIGluIGFsdGVybmF0ZSBmdW5jdGlvbnMgKi8KKwkJCQlzdCxub3JlcXVlc3QtbWFzayA9IDwweGYwZjAwMj47CisJCQl9OworCQkJc3RtcGVfa2V5cGFkIHsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0bXBlLWtleXBhZCI7CisJCQkJZGVib3VuY2UtaW50ZXJ2YWwgPSA8NjQ+OworCQkJCXN0LHNjYW4tY291bnQgPSA8OD47CisJCQkJc3Qsbm8tYXV0b3JlcGVhdDsKKwkJCQlrZXlwYWQsbnVtLXJvd3MgPSA8OD47CisJCQkJa2V5cGFkLG51bS1jb2x1bW5zID0gPDg+OworCQkJCWxpbnV4LGtleW1hcCA9IDwweDAwMDIwMDcyIC8vIFZvbCBkb3duCisJCQkJCQkweDAwMDMwMDczIC8vIFZvbCB1cAorCQkJCQkJMHgwMTAwMDA5ZSAvLyBCYWNrCisJCQkJCQkweDAxMDEwMGUzIC8vIFRWIG91dAorCQkJCQkJMHgwMTAyMDA5OCAvLyBMb2NrCisJCQkJCQkweDAxMDMwMTNiIC8vIFN0YXJ0CisJCQkJCQkweDAyMDAwMGEzIC8vIE5leHQKKwkJCQkJCTB4MDIwMTAwYTQgLy8gUGxheQorCQkJCQkJMHgwMjAyMDBhNSAvLyBQcmV2CisJCQkJCQkweDAyMDMwMTYwIC8vIE9LCisJCQkJCQkweDAzMDAwMDY5IC8vIExlZnQKKwkJCQkJCTB4MDMwMTAwNmEgLy8gUmlnaHQKKwkJCQkJCTB4MDMwMjAwNjcgLy8gVXAKKwkJCQkJCTB4MDMwMzAwNmM+OyAvLyBEb3duCisJCQl9OworCQl9OworCQlzdG1wZTE6IHN0bXBlMjQwMUA0NCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0bXBlMjQwMSI7CisJCQlyZWcgPSA8MHg0ND47CisJCQlyZXNldC1ncGlvcyA9IDwmZ3BpbzIgMTUgR1BJT19BQ1RJVkVfTE9XPjsgLy8gR1BJTzc5CisJCQlpbnRlcnJ1cHRzID0gPDE0IElSUV9UWVBFX0VER0VfRkFMTElORz47IC8vIEdQSU83OAorCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BpbzI+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQl3YWtldXAtc291cmNlOworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmc3RtcGUyNDAxXzJfbmhrX21vZGU+OworCQkJc3RtcGVfZ3BpbzQ0OiBzdG1wZV9ncGlvIHsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0bXBlLWdwaW8iOworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJfTsKKwkJfTsKKwl9OworCisJYW1iYSB7CisJCW1tY3NkOiBzZGlAMTAxZjYwMDAgeworCQkJY2QtZ3Bpb3MgPSA8JnN0bXBlX2dwaW80NCA3IEdQSU9fQUNUSVZFX0xPVz47CisJCQl3cC1ncGlvcyA9IDwmc3RtcGVfZ3BpbzQ0IDE4IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCX07CisKKwkvKiBDdXN0b20gYm9hcmQgbm9kZSB3aXRoIEdQSU8gcGlucyB0byBhY3RpdmUgZXRjICovCisJdXNiLXM4ODE1IHsKKwkJLyogVGhpcyB3aWxsIHR1cm4gb2ZmIFNBVEEgc28gdGhhdCBNTUMvU0QgY2FuIHRocml2ZSAqLworCQltbWNzZC1ncGlvIHsKKwkJCWdwaW9zID0gPCZzdG1wZV9ncGlvNDQgMiAweDE+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstczg4MTUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstczg4MTUuZHRzCmluZGV4IDkwZDhiNmMuLmU0MTFmZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLXM4ODE1LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1zODgxNS5kdHMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CiAjaW5jbHVkZSAic3RlLW5vbWFkaWstc3RuODgxNS5kdHNpIgogCiAvIHsKQEAgLTE0LDE0ICsxNSw2IEBACiAJCWJvb3RhcmdzID0gInJvb3Q9L2Rldi9yYW0wIGNvbnNvbGU9dHR5QU1BMSwxMTUyMDBuOCBlYXJseXByaW50ayI7CiAJfTsKIAotCS8qIFRoaXMgaXMgd2hlcmUgdGhlIGludGVycnVwdCBpcyByb3V0ZWQgb24gdGhlIFM4ODE1IGJvYXJkICovCi0JZXh0ZXJuYWwtYnVzQDM0MDAwMDAwIHsKLQkJZXRoZXJuZXRAMzAwIHsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8zPjsKLQkJCWludGVycnVwdHMgPSA8OCAweDE+OwotCQl9OwotCX07Ci0KIAlzcmNAMTAxZTAwMDAgewogCQkvKiBUaGVzZSBjaHJ5c3RhbCBkcml2ZXJzIGFyZSBub3QgdXNlZCBvbiB0aGlzIGJvYXJkICovCiAJCWRpc2FibGUtc3h0YWxvOwpAQCAtNDcsNiArNDAsMTQgQEAKIAkJCQl9OwogCQkJfTsKIAkJfTsKKwkJZ3Bpb2kyYyB7CisJCQlncGlvaTJjX2RlZmF1bHRfbW9kZTogZ3Bpb2kyY19kZWZhdWx0IHsKKwkJCQlncGlvaTJjX2RlZmF1bHRfY2ZnIHsKKwkJCQkJc3RlLHBpbnMgPSAiR1BJTzczX0MyMSIsICJHUElPNzRfQzIwIjsKKwkJCQkJc3RlLGlucHV0ID0gPDA+OworCQkJCX07CisJCQl9OworCQl9OwogCQl1c2VyLWxlZCB7CiAJCQl1c2VyX2xlZF9kZWZhdWx0X21vZGU6IHVzZXJfbGVkX2RlZmF1bHQgewogCQkJCXVzZXJfbGVkX2RlZmF1bHRfY2ZnIHsKQEAgLTY1LDYgKzY2LDQ1IEBACiAJCX07CiAJfTsKIAorCS8qIEV0aGVybmV0ICovCisJZXh0ZXJuYWwtYnVzQDM0MDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDB4MzQwMDAwMDAgMHgxMDAwMDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXMgPSA8MCAweDM0MDAwMDAwIDB4MTAwMDAwMD47CisJCWV0aGVybmV0QDMwMCB7CisJCQljb21wYXRpYmxlID0gInNtc2MsbGFuOTFjMTExIjsKKwkJCXJlZyA9IDwweDMwMCAweDBmZDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8zPjsKKwkJCWludGVycnVwdHMgPSA8OCBJUlFfVFlQRV9FREdFX1JJU0lORz47CisJCX07CisJfTsKKworCS8qIEdQSU8gSTJDIGNvbm5lY3RlZCB0byB0aGUgVVNCIHBvcnRpb25zIG9mIHRoZSBTVHc0ODExIG9ubHkgKi8KKwlncGlvLWkyYyB7CisJCWNvbXBhdGlibGUgPSAiaTJjLWdwaW8iOworCQlncGlvcyA9IDwmZ3BpbzIgMTAgMD4sIC8qIHNkYSAqLworCQkJPCZncGlvMiA5IDA+OyAvKiBzY2wgKi8KKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmdwaW9pMmNfZGVmYXVsdF9tb2RlPjsKKworCQlzdHc0ODExQDJkIHsKKwkJCSAgIGNvbXBhdGlibGUgPSAic3Qsc3R3NDgxMS11c2IiOworCQkJICAgcmVnID0gPDB4MmQ+OworCQl9OworCX07CisKKworCS8qIENvbmZpZ3VyZSBjYXJkIGRldGVjdCBmb3IgdGhlIHVTRCBzbG90ICovCisJYW1iYSB7CisJCW1tY3NkOiBzZGlAMTAxZjYwMDAgeworCQkJY2QtZ3Bpb3MgPSA8JmdwaW8zIDE1IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisJfTsKKwogCS8qIEN1c3RvbSBib2FyZCBub2RlIHdpdGggR1BJTyBwaW5zIHRvIGFjdGl2ZSBldGMgKi8KIAl1c2Itczg4MTUgewogCQkvKiBUaGlzIHdpbGwgYmlhcyB0aGUgTU1DL1NEIGNhcmQgZGV0ZWN0IGxpbmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLXN0bjg4MTUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0ZS1ub21hZGlrLXN0bjg4MTUuZHRzaQppbmRleCBkYmNmNTIxLi5mNDM1ZmYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGUtbm9tYWRpay1zdG44ODE1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RlLW5vbWFkaWstc3RuODgxNS5kdHNpCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJCW1tY3NkX2RlZmF1bHRfbXV4OiBtbWNzZF9tdXggewogCQkJCW1tY3NkX2RlZmF1bHRfbXV4IHsKIAkJCQkJc3RlLGZ1bmN0aW9uID0gIm1tY3NkIjsKLQkJCQkJc3RlLHBpbnMgPSAibW1jc2RfYV8xIjsKKwkJCQkJc3RlLHBpbnMgPSAibW1jc2RfYV8xIiwgIm1tY3NkX2JfMSI7CiAJCQkJfTsKIAkJCX07CiAJCQltbWNzZF9kZWZhdWx0X21vZGU6IG1tY3NkX2RlZmF1bHQgewpAQCAtMTI3LDkgKzEyNyw5IEBACiAJCQkJCXN0ZSxvdXRwdXQgPSA8MD47CiAJCQkJfTsKIAkJCQltbWNzZF9kZWZhdWx0X2NmZzIgewotCQkJCQkvKiBNQ0NNRERJUiwgTUNEQVQwRElSLCBNQ0RBVDMxRElSICovCisJCQkJCS8qIE1DQ01ERElSLCBNQ0RBVDBESVIsIE1DREFUMzFESVIsIE1DREFURElSMiAqLwogCQkJCQlzdGUscGlucyA9ICJHUElPMTBfQzExIiwgIkdQSU8xNV9BMTIiLAotCQkJCQkiR1BJTzE2X0MxMyI7CisJCQkJCSJHUElPMTZfQzEzIiwgIkdQSU8yM19EMTUiOwogCQkJCQlzdGUsb3V0cHV0ID0gPDE+OwogCQkJCX07CiAJCQkJbW1jc2RfZGVmYXVsdF9jZmczIHsKQEAgLTE2OSwyMSArMTY5LDExIEBACiAJCQkJfTsKIAkJCX07CiAJCX07Ci0JCWkyYzIgewotCQkJaTJjMl9kZWZhdWx0X21vZGU6IGkyYzJfZGVmYXVsdCB7Ci0JCQkJaTJjMl9kZWZhdWx0X2NmZyB7Ci0JCQkJCXN0ZSxwaW5zID0gIkdQSU83M19DMjEiLCAiR1BJTzc0X0MyMCI7Ci0JCQkJCXN0ZSxpbnB1dCA9IDwwPjsKLQkJCQl9OwotCQkJfTsKLQkJfTsKIAl9OwogCiAJc3JjOiBzcmNAMTAxZTAwMDAgewogCQljb21wYXRpYmxlID0gInN0ZXJpY3Nzb24sbm9tYWRpay1zcmMiOwogCQlyZWcgPSA8MHgxMDFlMDAwMCAweDEwMDA+OwotCQlkaXNhYmxlLXN4dGFsbzsKLQkJZGlzYWJsZS1teHRhbG87CiAKIAkJLyoKIAkJICogTVhUQUwgIk1haW4gQ2hyeXN0YWwiIGlzIGEgY2hyeXN0YWwgb3NjaWxsYXRvciBAMTkuMiBNSHoKQEAgLTY4MywxOCArNjczLDYgQEAKIAkJfTsKIAl9OwogCi0JZXh0ZXJuYWwtYnVzQDM0MDAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKLQkJcmVnID0gPDB4MzQwMDAwMDAgMHgxMDAwMDAwPjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlyYW5nZXMgPSA8MCAweDM0MDAwMDAwIDB4MTAwMDAwMD47Ci0JCWV0aGVybmV0QDMwMCB7Ci0JCQljb21wYXRpYmxlID0gInNtc2MsbGFuOTFjMTExIjsKLQkJCXJlZyA9IDwweDMwMCAweDBmZDAwPjsKLQkJfTsKLQl9OwotCiAJLyogSTJDMCBjb25uZWN0ZWQgdG8gdGhlIFNUdzQ4MTEgcG93ZXIgbWFuYWdlbWVudCBjaGlwICovCiAJaTJjMCB7CiAJCWNvbXBhdGlibGUgPSAic3Qsbm9tYWRpay1pMmMiLCAiYXJtLHByaW1lY2VsbCI7CkBAIC03NDksMjIgKzcyNyw2IEBACiAJCX07CiAJfTsKIAotCS8qIEkyQzIgY29ubmVjdGVkIHRvIHRoZSBVU0IgcG9ydGlvbnMgb2YgdGhlIFNUdzQ4MTEgb25seSAqLwotCWkyYzIgewotCQljb21wYXRpYmxlID0gImkyYy1ncGlvIjsKLQkJZ3Bpb3MgPSA8JmdwaW8yIDEwIDA+LCAvKiBzZGEgKi8KLQkJCTwmZ3BpbzIgOSAwPjsgLyogc2NsICovCi0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3RybC0wID0gPCZpMmMyX2RlZmF1bHRfbW9kZT47Ci0KLQkJc3R3NDgxMUAyZCB7Ci0JCQkgICBjb21wYXRpYmxlID0gInN0LHN0dzQ4MTEtdXNiIjsKLQkJCSAgIHJlZyA9IDwweDJkPjsKLQkJfTsKLQl9OwotCiAJYW1iYSB7CiAJCWNvbXBhdGlibGUgPSAiYXJtLGFtYmEtYnVzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC04NDQsNyArODA2LDYgQEAKIAkJCWJ1cy13aWR0aCA9IDw0PjsKIAkJCWNhcC1tbWMtaGlnaHNwZWVkOwogCQkJY2FwLXNkLWhpZ2hzcGVlZDsKLQkJCWNkLWdwaW9zID0gPCZncGlvMyAxNSBHUElPX0FDVElWRV9MT1c+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCXBpbmN0cmwtMCA9IDwmbW1jc2RfZGVmYXVsdF9tdXg+LCA8Jm1tY3NkX2RlZmF1bHRfbW9kZT47CiAJCQl2bW1jLXN1cHBseSA9IDwmdm1tY19yZWd1bGF0b3I+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1iMjEyMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWIyMTIwLmR0cwppbmRleCBmZTY5ZjkyLi4yNjFkNWUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWIyMTIwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWIyMTIwLmR0cwpAQCAtNywxMyArNywxNSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIC9kdHMtdjEvOwotI2luY2x1ZGUgInN0aWg0MDcuZHRzaSIKKyNpbmNsdWRlICJzdGloNDA3LWNsb2NrLmR0c2kiCisjaW5jbHVkZSAic3RpaDQwNy1mYW1pbHkuZHRzaSIKKyNpbmNsdWRlICJzdGloeHh4LWIyMTIwLmR0c2kiCiAvIHsKIAltb2RlbCA9ICJTVGlINDA3IEIyMTIwIjsKIAljb21wYXRpYmxlID0gInN0LHN0aWg0MDctYjIxMjAiLCAic3Qsc3RpaDQwNyI7CiAKIAljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eUFTMCwxMTUyMDAiOworCQlib290YXJncyA9ICJjb25zb2xlPXR0eUFTMCwxMTUyMDAgY2xrX2lnbm9yZV91bnVzZWQiOwogCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZzYmNfc2VyaWFsMDsKIAl9OwogCkBAIC0yNiw1MyArMjgsNCBAQAogCQl0dHlBUzAgPSAmc2JjX3NlcmlhbDA7CiAJfTsKIAotCXNvYyB7Ci0JCXNiY19zZXJpYWwwOiBzZXJpYWxAOTUzMDAwMCB7Ci0JCQlzdGF0dXMgPSAib2theSI7Ci0JCX07Ci0KLQkJbGVkcyB7Ci0JCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7Ci0JCQlyZWQgewotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWxhYmVsID0gIkZyb250IFBhbmVsIExFRCI7Ci0JCQkJZ3Bpb3MgPSA8JnBpbzQgMSAwPjsKLQkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsKLQkJCX07Ci0JCQlncmVlbiB7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJZ3Bpb3MgPSA8JnBpbzEgMyAwPjsKLQkJCQlkZWZhdWx0LXN0YXRlID0gIm9mZiI7Ci0JCQl9OwotCQl9OwotCi0JCWkyY0A5ODQyMDAwIHsKLQkJCXN0YXR1cyA9ICJva2F5IjsKLQkJfTsKLQotCQlpMmNAOTg0MzAwMCB7Ci0JCQlzdGF0dXMgPSAib2theSI7Ci0JCX07Ci0KLQkJaTJjQDk4NDQwMDAgewotCQkJc3RhdHVzID0gIm9rYXkiOwotCQl9OwotCi0JCWkyY0A5ODQ1MDAwIHsKLQkJCXN0YXR1cyA9ICJva2F5IjsKLQkJfTsKLQotCQlpMmNAOTU0MDAwMCB7Ci0JCQlzdGF0dXMgPSAib2theSI7Ci0JCX07Ci0KLQkJLyogU1NDMTEgdG8gSERNSSAqLwotCQlpMmNAOTU0MTAwMCB7Ci0JCQlzdGF0dXMgPSAib2theSI7Ci0JCQkvKiBIRE1JIFYxLjNhIHN1cHBvcnRzIFN0YW5kYXJkIG1vZGUgb25seSAqLwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMD47Ci0JCQlzdCxpMmMtbWluLXNjbC1wdWxzZS13aWR0aC11cyA9IDwwPjsKLQkJCXN0LGkyYy1taW4tc2RhLXB1bHNlLXdpZHRoLXVzID0gPDU+OwotCQl9OwotCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1jbG9jay5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1jbG9jay5kdHNpCmluZGV4IDgwMGY0NmYuLmU2NTc0NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctY2xvY2suZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWNsb2NrLmR0c2kKQEAgLTUsOCArNSwxMyBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svc3RpaDQwNy1jbGtzLmg+CiAvIHsKIAljbG9ja3MgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKwogCQkvKgogCQkgKiBGaXhlZCAzME1IeiBvc2NpbGxhdG9yIGlucHV0cyB0byBTb0MKIAkJICovCkBAIC0xOSwxMCArMjQsNTkgQEAKIAkJLyoKIAkJICogQVJNIFBlcmlwaGVyYWwgY2xvY2sgZm9yIHRpbWVycwogCQkgKi8KLQkJYXJtX3BlcmlwaF9jbGs6IGFybS1wZXJpcGgtY2xrIHsKKwkJYXJtX3BlcmlwaF9jbGs6IGNsay1tLWE5LXBlcmlwaHMgewogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8NjAwMDAwMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKworCQkJY2xvY2tzID0gPCZjbGtfbV9hOT47CisJCQljbG9jay1kaXYgPSA8Mj47CisJCQljbG9jay1tdWx0ID0gPDE+OworCQl9OworCisJCS8qCisJCSAqIEE5IFBMTC4KKwkJICovCisJCWNsb2NrZ2VuLWE5QDkyYjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkyYjAwMDAgMHhmZmZmPjsKKworCQkJY2xvY2tnZW5fYTlfcGxsOiBjbG9ja2dlbi1hOS1wbGwgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcGxscy1jMzItYTkiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbG9ja2dlbi1hOS1wbGwtb2RmIjsKKwkJCX07CisJCX07CisKKwkJLyoKKwkJICogQVJNIENQVSByZWxhdGVkIGNsb2Nrcy4KKwkJICovCisJCWNsa19tX2E5OiBjbGstbS1hOUA5MmIwMDAwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1jbGtnZW4tYTktbXV4IiwgInN0LGNsa2dlbi1tdXgiOworCQkJcmVnID0gPDB4OTJiMDAwMCAweDEwMDAwPjsKKworCQkJY2xvY2tzID0gPCZjbG9ja2dlbl9hOV9wbGwgMD4sCisJCQkJIDwmY2xvY2tnZW5fYTlfcGxsIDA+LAorCQkJCSA8JmNsa19zX2MwX2ZsZXhnZW4gMTM+LAorCQkJCSA8JmNsa19tX2E5X2V4dDJmX2RpdjI+OworCQl9OworCisJCS8qCisJCSAqIEFSTSBQZXJpcGhlcmFsIGNsb2NrIGZvciB0aW1lcnMKKwkJICovCisJCWNsa19tX2E5X2V4dDJmX2RpdjI6IGNsay1tLWE5LWV4dDJmLWRpdjJzIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIDEzPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1tLWE5LWV4dDJmLWRpdjIiOworCisJCQljbG9jay1kaXYgPSA8Mj47CisJCQljbG9jay1tdWx0ID0gPDE+OwogCQl9OwogCiAJCS8qCkBAIC0zNSw1ICs4OSwyMzggQEAKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWljbi1yZWctMCI7CiAJCX07CisKKwkJY2xvY2tnZW4tYUAwOTBmZjAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTBmZjAwMCAweDEwMDA+OworCisJCQljbGtfc19hMF9wbGw6IGNsay1zLWEwLXBsbCB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1wbGxzLWMzMi1hMCIsICJzdCxjbGtnZW4tcGxscy1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWEwLXBsbC1vZmQtMCI7CisJCQl9OworCisJCQljbGtfc19hMF9mbGV4Z2VuOiBjbGstcy1hMC1mbGV4Z2VuIHsKKwkJCQljb21wYXRpYmxlID0gInN0LGZsZXhnZW4iOworCisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCisJCQkJY2xvY2tzID0gPCZjbGtfc19hMF9wbGwgMD4sCisJCQkJCSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLWljLWxtaTAiOworCQkJfTsKKwkJfTsKKworCQljbGtfc19jMF9xdWFkZnM6IGNsay1zLWMwLXF1YWRmc0A5MTAzMDAwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1xdWFkZnM2NjAtQyIsICJzdCxxdWFkZnMiOworCQkJcmVnID0gPDB4OTEwMzAwMCAweDEwMDA+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1jMC1mczAtY2gwIiwKKwkJCQkJICAgICAiY2xrLXMtYzAtZnMwLWNoMSIsCisJCQkJCSAgICAgImNsay1zLWMwLWZzMC1jaDIiLAorCQkJCQkgICAgICJjbGstcy1jMC1mczAtY2gzIjsKKwkJfTsKKworCQljbGtfc19jMDogY2xvY2tnZW4tY0AwOTEwMzAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTEwMzAwMCAweDEwMDA+OworCisJCQljbGtfc19jMF9wbGwwOiBjbGstcy1jMC1wbGwwIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBsbHMtYzMyLWMwXzAiLCAic3QsY2xrZ2VuLXBsbHMtYzMyIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1jMC1wbGwwLW9kZi0wIjsKKwkJCX07CisKKwkJCWNsa19zX2MwX3BsbDE6IGNsay1zLWMwLXBsbDEgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcGxscy1jMzItYzBfMSIsICJzdCxjbGtnZW4tcGxscy1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWMwLXBsbDEtb2RmLTAiOworCQkJfTsKKworCQkJY2xrX3NfYzBfZmxleGdlbjogY2xrLXMtYzAtZmxleGdlbiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsZmxleGdlbiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2MwX3BsbDAgMD4sCisJCQkJCSA8JmNsa19zX2MwX3BsbDEgMD4sCisJCQkJCSA8JmNsa19zX2MwX3F1YWRmcyAwPiwKKwkJCQkJIDwmY2xrX3NfYzBfcXVhZGZzIDE+LAorCQkJCQkgPCZjbGtfc19jMF9xdWFkZnMgMj4sCisJCQkJCSA8JmNsa19zX2MwX3F1YWRmcyAzPiwKKwkJCQkJIDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstaWNuLWdwdSIsCisJCQkJCQkgICAgICJjbGstZmRtYSIsCisJCQkJCQkgICAgICJjbGstbmFuZCIsCisJCQkJCQkgICAgICJjbGstaHZhIiwKKwkJCQkJCSAgICAgImNsay1wcm9jLXN0ZmUiLAorCQkJCQkJICAgICAiY2xrLXByb2MtdHAiLAorCQkJCQkJICAgICAiY2xrLXJ4LWljbi1kbXUiLAorCQkJCQkJICAgICAiY2xrLXJ4LWljbi1odmEiLAorCQkJCQkJICAgICAiY2xrLWljbi1jcHUiLAorCQkJCQkJICAgICAiY2xrLXR4LWljbi1kbXUiLAorCQkJCQkJICAgICAiY2xrLW1tYy0wIiwKKwkJCQkJCSAgICAgImNsay1tbWMtMSIsCisJCQkJCQkgICAgICJjbGstanBlZ2RlYyIsCisJCQkJCQkgICAgICJjbGstZXh0MmZhOSIsCisJCQkJCQkgICAgICJjbGstaWMtYmRpc3AtMCIsCisJCQkJCQkgICAgICJjbGstaWMtYmRpc3AtMSIsCisJCQkJCQkgICAgICJjbGstcHAtZG11IiwKKwkJCQkJCSAgICAgImNsay12aWQtZG11IiwKKwkJCQkJCSAgICAgImNsay1kc3MtbHBjIiwKKwkJCQkJCSAgICAgImNsay1zdDIzMS1hdWQtMCIsCisJCQkJCQkgICAgICJjbGstc3QyMzEtZ3AtMSIsCisJCQkJCQkgICAgICJjbGstc3QyMzEtZG11IiwKKwkJCQkJCSAgICAgImNsay1pY24tbG1pIiwKKwkJCQkJCSAgICAgImNsay10eC1pY24tZGlzcC0xIiwKKwkJCQkJCSAgICAgImNsay1pY24tc2JjIiwKKwkJCQkJCSAgICAgImNsay1zdGZlLWZyYzIiLAorCQkJCQkJICAgICAiY2xrLWV0aC1waHkiLAorCQkJCQkJICAgICAiY2xrLWV0aC1yZWYtcGh5Y2xrIiwKKwkJCQkJCSAgICAgImNsay1mbGFzaC1wcm9taXAiLAorCQkJCQkJICAgICAiY2xrLW1haW4tZGlzcCIsCisJCQkJCQkgICAgICJjbGstYXV4LWRpc3AiLAorCQkJCQkJICAgICAiY2xrLWNvbXBvLWR2cCI7CisJCQl9OworCQl9OworCisJCWNsa19zX2QwX3F1YWRmczogY2xrLXMtZDAtcXVhZGZzQDkxMDQwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXF1YWRmczY2MC1EIiwgInN0LHF1YWRmcyI7CisJCQlyZWcgPSA8MHg5MTA0MDAwIDB4MTAwMD47CisKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWQwLWZzMC1jaDAiLAorCQkJCQkgICAgICJjbGstcy1kMC1mczAtY2gxIiwKKwkJCQkJICAgICAiY2xrLXMtZDAtZnMwLWNoMiIsCisJCQkJCSAgICAgImNsay1zLWQwLWZzMC1jaDMiOworCQl9OworCisJCWNsb2NrZ2VuLWQwQDA5MTA0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MTA0MDAwIDB4MTAwMD47CisKKwkJCWNsa19zX2QwX2ZsZXhnZW46IGNsay1zLWQwLWZsZXhnZW4geworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGZsZXhnZW4iOworCisJCQkJY2xvY2tzID0gPCZjbGtfc19kMF9xdWFkZnMgMD4sCisJCQkJCSA8JmNsa19zX2QwX3F1YWRmcyAxPiwKKwkJCQkJIDwmY2xrX3NfZDBfcXVhZGZzIDI+LAorCQkJCQkgPCZjbGtfc19kMF9xdWFkZnMgMz4sCisJCQkJCSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXBjbS0wIiwKKwkJCQkJCSAgICAgImNsay1wY20tMSIsCisJCQkJCQkgICAgICJjbGstcGNtLTIiLAorCQkJCQkJICAgICAiY2xrLXNwZGlmZiI7CisJCQl9OworCQl9OworCisJCWNsa19zX2QyX3F1YWRmczogY2xrLXMtZDItcXVhZGZzQDkxMDYwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXF1YWRmczY2MC1EIiwgInN0LHF1YWRmcyI7CisJCQlyZWcgPSA8MHg5MTA2MDAwIDB4MTAwMD47CisKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWQyLWZzMC1jaDAiLAorCQkJCQkgICAgICJjbGstcy1kMi1mczAtY2gxIiwKKwkJCQkJICAgICAiY2xrLXMtZDItZnMwLWNoMiIsCisJCQkJCSAgICAgImNsay1zLWQyLWZzMC1jaDMiOworCQl9OworCisJCWNsa190bWRzb3V0X2hkbWk6IGNsay10bWRzb3V0LWhkbWkgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCX07CisKKwkJY2xvY2tnZW4tZDJAeDkxMDYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxjbGtnZW4tYzMyIjsKKwkJCXJlZyA9IDwweDkxMDYwMDAgMHgxMDAwPjsKKworCQkJY2xrX3NfZDJfZmxleGdlbjogY2xrLXMtZDItZmxleGdlbiB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3QsZmxleGdlbiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2QyX3F1YWRmcyAwPiwKKwkJCQkJIDwmY2xrX3NfZDJfcXVhZGZzIDE+LAorCQkJCQkgPCZjbGtfc19kMl9xdWFkZnMgMj4sCisJCQkJCSA8JmNsa19zX2QyX3F1YWRmcyAzPiwKKwkJCQkJIDwmY2xrX3N5c2luPiwKKwkJCQkJIDwmY2xrX3N5c2luPiwKKwkJCQkJIDwmY2xrX3RtZHNvdXRfaGRtaT47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXBpeC1tYWluLWRpc3AiLAorCQkJCQkJICAgICAiY2xrLXBpeC1waXAiLAorCQkJCQkJICAgICAiY2xrLXBpeC1nZHAxIiwKKwkJCQkJCSAgICAgImNsay1waXgtZ2RwMiIsCisJCQkJCQkgICAgICJjbGstcGl4LWdkcDMiLAorCQkJCQkJICAgICAiY2xrLXBpeC1nZHA0IiwKKwkJCQkJCSAgICAgImNsay1waXgtYXV4LWRpc3AiLAorCQkJCQkJICAgICAiY2xrLWRlbmMiLAorCQkJCQkJICAgICAiY2xrLXBpeC1oZGRhYyIsCisJCQkJCQkgICAgICJjbGstaGRkYWMiLAorCQkJCQkJICAgICAiY2xrLXNkZGFjIiwKKwkJCQkJCSAgICAgImNsay1waXgtZHZvIiwKKwkJCQkJCSAgICAgImNsay1kdm8iLAorCQkJCQkJICAgICAiY2xrLXBpeC1oZG1pIiwKKwkJCQkJCSAgICAgImNsay10bWRzLWhkbWkiLAorCQkJCQkJICAgICAiY2xrLXJlZi1oZG1pcGh5IjsKKwkJCQkJCSAgICAgfTsKKwkJfTsKKworCQljbGtfc19kM19xdWFkZnM6IGNsay1zLWQzLXF1YWRmc0A5MTA3MDAwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1xdWFkZnM2NjAtRCIsICJzdCxxdWFkZnMiOworCQkJcmVnID0gPDB4OTEwNzAwMCAweDEwMDA+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1kMy1mczAtY2gwIiwKKwkJCQkJICAgICAiY2xrLXMtZDMtZnMwLWNoMSIsCisJCQkJCSAgICAgImNsay1zLWQzLWZzMC1jaDIiLAorCQkJCQkgICAgICJjbGstcy1kMy1mczAtY2gzIjsKKwkJfTsKKworCQljbG9ja2dlbi1kM0A5MTA3MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MTA3MDAwIDB4MTAwMD47CisKKwkJCWNsa19zX2QzX2ZsZXhnZW46IGNsay1zLWQzLWZsZXhnZW4geworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGZsZXhnZW4iOworCisJCQkJY2xvY2tzID0gPCZjbGtfc19kM19xdWFkZnMgMD4sCisJCQkJCSA8JmNsa19zX2QzX3F1YWRmcyAxPiwKKwkJCQkJIDwmY2xrX3NfZDNfcXVhZGZzIDI+LAorCQkJCQkgPCZjbGtfc19kM19xdWFkZnMgMz4sCisJCQkJCSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXN0ZmUtZnJjMSIsCisJCQkJCQkgICAgICJjbGstdHNvdXQtMCIsCisJCQkJCQkgICAgICJjbGstdHNvdXQtMSIsCisJCQkJCQkgICAgICJjbGstbWNoaSIsCisJCQkJCQkgICAgICJjbGstdnNlbnMtY29tcG8iLAorCQkJCQkJICAgICAiY2xrLWZyYzEtcmVtb3RlIiwKKwkJCQkJCSAgICAgImNsay1scGMtMCIsCisJCQkJCQkgICAgICJjbGstbHBjLTEiOworCQkJfTsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDcuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctZmFtaWx5LmR0c2kKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy5kdHNpCnJlbmFtZSB0byBhcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWZhbWlseS5kdHNpCmluZGV4IDRmOTAyNGYuLjNlMzFkMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDcuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWZhbWlseS5kdHNpCkBAIC02LDggKzYsOCBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgInN0aWg0MDctY2xvY2suZHRzaSIKICNpbmNsdWRlICJzdGloNDA3LXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZXNldC1jb250cm9sbGVyL3N0aWg0MDctcmVzZXRzLmg+CiAvIHsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKQEAgLTYzLDYgKzYzLDIxIEBACiAJCXJhbmdlczsKIAkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAorCQlwb3dlcmRvd246IHBvd2VyZG93bi1jb250cm9sbGVyIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1wb3dlcmRvd24iOworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQl9OworCisJCXNvZnRyZXNldDogc29mdHJlc2V0LWNvbnRyb2xsZXIgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXNvZnRyZXNldCI7CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCX07CisKKwkJcGljb3BoeXJlc2V0OiBwaWNvcGh5cmVzZXQtY29udHJvbGxlciB7CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcGljb3BoeXJlc2V0IjsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJfTsKKwogCQlzeXNjZmdfc2JjOiBzYmMtc3lzY2ZnQDk2MjAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXNiYy1zeXNjZmciLCAic3lzY29uIjsKIAkJCXJlZyA9IDwweDk2MjAwMDAgMHgxMDAwPjsKQEAgLTEwNCw3ICsxMTksNyBAQAogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMiBJUlFfVFlQRV9OT05FPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc2VyaWFsMD47Ci0JCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gQ0xLX0VYVDJGX0E5PjsKIAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTExNSw3ICsxMzAsNyBAQAogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMyBJUlFfVFlQRV9OT05FPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc2VyaWFsMT47Ci0JCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gQ0xLX0VYVDJGX0E5PjsKIAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTEyNiw3ICsxNDEsNyBAQAogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyNCBJUlFfVFlQRV9OT05FPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfc2VyaWFsMj47Ci0JCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gQ0xLX0VYVDJGX0E5PjsKIAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKQEAgLTE1OCw3ICsxNzMsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJcmVnID0gPDB4OTg0MDAwMCAweDExMD47Ci0JCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gQ0xLX0VYVDJGX0E5PjsKIAkJCWNsb2NrLW5hbWVzID0gInNzYyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC0xNzEsNyArMTg2LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAic3QsY29tbXMtc3NjNC1pMmMiOwogCQkJcmVnID0gPDB4OTg0MTAwMCAweDExMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzID0gPCZjbGtfZXh0MmZfYTk+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19FWFQyRl9BOT47CiAJCQljbG9jay1uYW1lcyA9ICJzc2MiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMTg0LDcgKzE5OSw3IEBACiAJCQljb21wYXRpYmxlID0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCXJlZyA9IDwweDk4NDIwMDAgMHgxMTA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCWNsb2NrcyA9IDwmY2xrX2V4dDJmX2E5PjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfRVhUMkZfQTk+OwogCQkJY2xvY2stbmFtZXMgPSAic3NjIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKQEAgLTE5Nyw3ICsyMTIsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LWkyYyI7CiAJCQlyZWcgPSA8MHg5ODQzMDAwIDB4MTEwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTUgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQljbG9ja3MgPSA8JmNsa19leHQyZl9hOT47CisJCQljbG9ja3MgPSA8JmNsa19zX2MwX2ZsZXhnZW4gQ0xLX0VYVDJGX0E5PjsKIAkJCWNsb2NrLW5hbWVzID0gInNzYyI7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC0yMTAsNyArMjI1LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAic3QsY29tbXMtc3NjNC1pMmMiOwogCQkJcmVnID0gPDB4OTg0NDAwMCAweDExMD47CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTE2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJY2xvY2tzID0gPCZjbGtfZXh0MmZfYTk+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19FWFQyRl9BOT47CiAJCQljbG9jay1uYW1lcyA9ICJzc2MiOwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMjIzLDcgKzIzOCw3IEBACiAJCQljb21wYXRpYmxlID0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAkJCXJlZyA9IDwweDk4NDUwMDAgMHgxMTA+OwogCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCWNsb2NrcyA9IDwmY2xrX2V4dDJmX2E5PjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfRVhUMkZfQTk+OwogCQkJY2xvY2stbmFtZXMgPSAic3NjIjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAtYjIxMjAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC1iMjEyMC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2MWE5OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAtYjIxMjAuZHRzCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU1RNaWNyb2VsZWN0cm9uaWNzIChSJkQpIExpbWl0ZWQuCisgKiBBdXRob3I6IFBldGVyIEdyaWZmaW4gPHBldGVyLmdyaWZmaW5AbGluYXJvLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisvZHRzLXYxLzsKKyNpbmNsdWRlICJzdGloNDEwLmR0c2kiCisjaW5jbHVkZSAic3RpaHh4eC1iMjEyMC5kdHNpIgorLyB7CisJbW9kZWwgPSAiU1RpSDQxMCBCMjEyMCI7CisJY29tcGF0aWJsZSA9ICJzdCxzdGloNDEwLWIyMTIwIiwgInN0LHN0aWg0MTAiOworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlBUzAsMTE1MjAwIGNsa19pZ25vcmVfdW51c2VkIjsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAmc2JjX3NlcmlhbDA7CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDQwMDAwMDAwIDB4ODAwMDAwMDA+OworCX07CisKKwlhbGlhc2VzIHsKKwkJdHR5QVMwID0gJnNiY19zZXJpYWwwOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC1jbG9jay5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC1jbG9jay5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNTgwM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLWNsb2NrLmR0c2kKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU1RNaWNyb2VsZWN0cm9uaWNzIFImRCBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3N0aWg0MTAtY2xrcy5oPgorLyB7CisJY2xvY2tzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDEwLWNsayIsICJzaW1wbGUtYnVzIjsKKworCQkvKgorCQkgKiBGaXhlZCAzME1IeiBvc2NpbGxhdG9yIGlucHV0cyB0byBTb0MKKwkJICovCisJCWNsa19zeXNpbjogY2xrLXN5c2luIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMwMDAwMDAwPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJDTEtfU1lTSU4iOworCQl9OworCisJCS8qCisJCSAqIEFSTSBQZXJpcGhlcmFsIGNsb2NrIGZvciB0aW1lcnMKKwkJICovCisJCWFybV9wZXJpcGhfY2xrOiBjbGstbS1hOS1wZXJpcGhzIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKKwkJCWNsb2NrcyA9IDwmY2xrX21fYTk+OworCQkJY2xvY2stZGl2ID0gPDI+OworCQkJY2xvY2stbXVsdCA9IDwxPjsKKwkJfTsKKworCQkvKgorCQkgKiBBOSBQTEwuCisJCSAqLworCQljbG9ja2dlbi1hOUA5MmIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MmIwMDAwIDB4ZmZmZj47CisKKwkJCWNsb2NrZ2VuX2E5X3BsbDogY2xvY2tnZW4tYTktcGxsIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBsbHMtYzMyLWE5IiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xvY2tnZW4tYTktcGxsLW9kZiI7CisJCQl9OworCQl9OworCisJCS8qCisJCSAqIEFSTSBDUFUgcmVsYXRlZCBjbG9ja3MuCisJCSAqLworCQljbGtfbV9hOTogY2xrLW0tYTlAOTJiMDAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctY2xrZ2VuLWE5LW11eCIsICJzdCxjbGtnZW4tbXV4IjsKKwkJCXJlZyA9IDwweDkyYjAwMDAgMHgxMDAwMD47CisKKwkJCWNsb2NrcyA9IDwmY2xvY2tnZW5fYTlfcGxsIDA+LAorCQkJCSA8JmNsb2NrZ2VuX2E5X3BsbCAwPiwKKwkJCQkgPCZjbGtfc19jMF9mbGV4Z2VuIDEzPiwKKwkJCQkgPCZjbGtfbV9hOV9leHQyZl9kaXYyPjsKKwkJfTsKKworCQkvKgorCQkgKiBBUk0gUGVyaXBoZXJhbCBjbG9jayBmb3IgdGltZXJzCisJCSAqLworCQljbGtfbV9hOV9leHQyZl9kaXYyOiBjbGstbS1hOS1leHQyZi1kaXYycyB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7CisKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiAxMz47CisKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstbS1hOS1leHQyZi1kaXYyIjsKKworCQkJY2xvY2stZGl2ID0gPDI+OworCQkJY2xvY2stbXVsdCA9IDwxPjsKKwkJfTsKKworCQkvKgorCQkgKiBCb290bG9hZGVyIGluaXRpYWxpemVkIHN5c3RlbSBpbmZyYXN0cnVjdHVyZSBjbG9jayBmb3IKKwkJICogc2VyaWFsIGRldmljZXMuCisJCSAqLworCQljbGtfZXh0MmZfYTk6IGNsb2NrZ2VuLWMwQDEzIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDIwMDAwMDAwMD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtaWNuLXJlZy0wIjsKKwkJfTsKKworCQljbG9ja2dlbi1hQDA5MGZmMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MGZmMDAwIDB4MTAwMD47CisKKwkJCWNsa19zX2EwX3BsbDogY2xrLXMtYTAtcGxsIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBsbHMtYzMyLWEwIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYTAtcGxsLW9mZC0wIjsKKwkJCX07CisKKwkJCWNsa19zX2EwX2ZsZXhnZW46IGNsay1zLWEwLWZsZXhnZW4geworCQkJCWNvbXBhdGlibGUgPSAic3QsZmxleGdlbiI7CisKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisKKwkJCQljbG9ja3MgPSA8JmNsa19zX2EwX3BsbCAwPiwKKwkJCQkJIDwmY2xrX3N5c2luPjsKKworCQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstaWMtbG1pMCIsCisJCQkJCQkgICAgICJjbGstaWMtbG1pMSI7CisJCQl9OworCQl9OworCisJCWNsa19zX2MwX3F1YWRmczogY2xrLXMtYzAtcXVhZGZzQDkxMDMwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXF1YWRmczY2MC1DIiwgInN0LHF1YWRmcyI7CisJCQlyZWcgPSA8MHg5MTAzMDAwIDB4MTAwMD47CisKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWMwLWZzMC1jaDAiLAorCQkJCQkgICAgICJjbGstcy1jMC1mczAtY2gxIiwKKwkJCQkJICAgICAiY2xrLXMtYzAtZnMwLWNoMiIsCisJCQkJCSAgICAgImNsay1zLWMwLWZzMC1jaDMiOworCQl9OworCisJCWNsa19zX2MwOiBjbG9ja2dlbi1jQDA5MTAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MTAzMDAwIDB4MTAwMD47CisKKwkJCWNsa19zX2MwX3BsbDA6IGNsay1zLWMwLXBsbDAgeworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcGxscy1jMzItYzBfMCIsICJzdCxjbGtnZW4tcGxscy1jMzIiOworCisJCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWMwLXBsbDAtb2RmLTAiOworCQkJfTsKKworCQkJY2xrX3NfYzBfcGxsMTogY2xrLXMtYzAtcGxsMSB7CisJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1wbGxzLWMzMi1jMF8xIiwgInN0LGNsa2dlbi1wbGxzLWMzMiI7CisKKwkJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtYzAtcGxsMS1vZGYtMCI7CisJCQl9OworCisJCQljbGtfc19jMF9mbGV4Z2VuOiBjbGstcy1jMC1mbGV4Z2VuIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxmbGV4Z2VuIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfcGxsMCAwPiwKKwkJCQkJIDwmY2xrX3NfYzBfcGxsMSAwPiwKKwkJCQkJIDwmY2xrX3NfYzBfcXVhZGZzIDA+LAorCQkJCQkgPCZjbGtfc19jMF9xdWFkZnMgMT4sCisJCQkJCSA8JmNsa19zX2MwX3F1YWRmcyAyPiwKKwkJCQkJIDwmY2xrX3NfYzBfcXVhZGZzIDM+LAorCQkJCQkgPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1pY24tZ3B1IiwKKwkJCQkJCSAgICAgImNsay1mZG1hIiwKKwkJCQkJCSAgICAgImNsay1uYW5kIiwKKwkJCQkJCSAgICAgImNsay1odmEiLAorCQkJCQkJICAgICAiY2xrLXByb2Mtc3RmZSIsCisJCQkJCQkgICAgICJjbGstcHJvYy10cCIsCisJCQkJCQkgICAgICJjbGstcngtaWNuLWRtdSIsCisJCQkJCQkgICAgICJjbGstcngtaWNuLWh2YSIsCisJCQkJCQkgICAgICJjbGstaWNuLWNwdSIsCisJCQkJCQkgICAgICJjbGstdHgtaWNuLWRtdSIsCisJCQkJCQkgICAgICJjbGstbW1jLTAiLAorCQkJCQkJICAgICAiY2xrLW1tYy0xIiwKKwkJCQkJCSAgICAgImNsay1qcGVnZGVjIiwKKwkJCQkJCSAgICAgImNsay1leHQyZmE5IiwKKwkJCQkJCSAgICAgImNsay1pYy1iZGlzcC0wIiwKKwkJCQkJCSAgICAgImNsay1pYy1iZGlzcC0xIiwKKwkJCQkJCSAgICAgImNsay1wcC1kbXUiLAorCQkJCQkJICAgICAiY2xrLXZpZC1kbXUiLAorCQkJCQkJICAgICAiY2xrLWRzcy1scGMiLAorCQkJCQkJICAgICAiY2xrLXN0MjMxLWF1ZC0wIiwKKwkJCQkJCSAgICAgImNsay1zdDIzMS1ncC0xIiwKKwkJCQkJCSAgICAgImNsay1zdDIzMS1kbXUiLAorCQkJCQkJICAgICAiY2xrLWljbi1sbWkiLAorCQkJCQkJICAgICAiY2xrLXR4LWljbi1kaXNwLTEiLAorCQkJCQkJICAgICAiY2xrLWljbi1zYmMiLAorCQkJCQkJICAgICAiY2xrLXN0ZmUtZnJjMiIsCisJCQkJCQkgICAgICJjbGstZXRoLXBoeSIsCisJCQkJCQkgICAgICJjbGstZXRoLXJlZi1waHljbGsiLAorCQkJCQkJICAgICAiY2xrLWZsYXNoLXByb21pcCIsCisJCQkJCQkgICAgICJjbGstbWFpbi1kaXNwIiwKKwkJCQkJCSAgICAgImNsay1hdXgtZGlzcCIsCisJCQkJCQkgICAgICJjbGstY29tcG8tZHZwIiwKKwkJCQkJCSAgICAgImNsay10eC1pY24taGFkZXMiLAorCQkJCQkJICAgICAiY2xrLXJ4LWljbi1oYWRlcyIsCisJCQkJCQkgICAgICJjbGstaWNuLXJlZy0xNiIsCisJCQkJCQkgICAgICJjbGstcHAtaGFkZXMiLAorCQkJCQkJICAgICAiY2xrLWNsdXN0LWhhZGVzIiwKKwkJCQkJCSAgICAgImNsay1od3BlLWhhZGVzIiwKKwkJCQkJCSAgICAgImNsay1mYy1oYWRlcyI7CisJCQl9OworCQl9OworCisJCWNsa19zX2QwX3F1YWRmczogY2xrLXMtZDAtcXVhZGZzQDkxMDQwMDAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXF1YWRmczY2MC1EIiwgInN0LHF1YWRmcyI7CisJCQlyZWcgPSA8MHg5MTA0MDAwIDB4MTAwMD47CisKKwkJCWNsb2NrcyA9IDwmY2xrX3N5c2luPjsKKworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zLWQwLWZzMC1jaDAiLAorCQkJCQkgICAgICJjbGstcy1kMC1mczAtY2gxIiwKKwkJCQkJICAgICAiY2xrLXMtZDAtZnMwLWNoMiIsCisJCQkJCSAgICAgImNsay1zLWQwLWZzMC1jaDMiOworCQl9OworCisJCWNsb2NrZ2VuLWQwQDA5MTA0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MTA0MDAwIDB4MTAwMD47CisKKwkJCWNsa19zX2QwX2ZsZXhnZW46IGNsay1zLWQwLWZsZXhnZW4geworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGZsZXhnZW4iOworCisJCQkJY2xvY2tzID0gPCZjbGtfc19kMF9xdWFkZnMgMD4sCisJCQkJCSA8JmNsa19zX2QwX3F1YWRmcyAxPiwKKwkJCQkJIDwmY2xrX3NfZDBfcXVhZGZzIDI+LAorCQkJCQkgPCZjbGtfc19kMF9xdWFkZnMgMz4sCisJCQkJCSA8JmNsa19zeXNpbj47CisKKwkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXBjbS0wIiwKKwkJCQkJCSAgICAgImNsay1wY20tMSIsCisJCQkJCQkgICAgICJjbGstcGNtLTIiLAorCQkJCQkJICAgICAiY2xrLXNwZGlmZiIsCisJCQkJCQkgICAgICJjbGstcGNtcjEwLW1hc3RlciIsCisJCQkJCQkgICAgICJjbGstdXNiMi1waHkiOworCQkJfTsKKwkJfTsKKworCQljbGtfc19kMl9xdWFkZnM6IGNsay1zLWQyLXF1YWRmc0A5MTA2MDAwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1xdWFkZnM2NjAtRCIsICJzdCxxdWFkZnMiOworCQkJcmVnID0gPDB4OTEwNjAwMCAweDEwMDA+OworCisJCQljbG9ja3MgPSA8JmNsa19zeXNpbj47CisKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGstcy1kMi1mczAtY2gwIiwKKwkJCQkJICAgICAiY2xrLXMtZDItZnMwLWNoMSIsCisJCQkJCSAgICAgImNsay1zLWQyLWZzMC1jaDIiLAorCQkJCQkgICAgICJjbGstcy1kMi1mczAtY2gzIjsKKwkJfTsKKworCQljbGtfdG1kc291dF9oZG1pOiBjbGstdG1kc291dC1oZG1pIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQl9OworCisJCWNsb2NrZ2VuLWQyQHg5MTA2MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3QsY2xrZ2VuLWMzMiI7CisJCQlyZWcgPSA8MHg5MTA2MDAwIDB4MTAwMD47CisKKwkJCWNsa19zX2QyX2ZsZXhnZW46IGNsay1zLWQyLWZsZXhnZW4geworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gInN0LGZsZXhnZW4iOworCisJCQkJY2xvY2tzID0gPCZjbGtfc19kMl9xdWFkZnMgMD4sCisJCQkJCSA8JmNsa19zX2QyX3F1YWRmcyAxPiwKKwkJCQkJIDwmY2xrX3NfZDJfcXVhZGZzIDI+LAorCQkJCQkgPCZjbGtfc19kMl9xdWFkZnMgMz4sCisJCQkJCSA8JmNsa19zeXNpbj4sCisJCQkJCSA8JmNsa19zeXNpbj4sCisJCQkJCSA8JmNsa190bWRzb3V0X2hkbWk+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1waXgtbWFpbi1kaXNwIiwKKwkJCQkJCSAgICAgImNsay1waXgtcGlwIiwKKwkJCQkJCSAgICAgImNsay1waXgtZ2RwMSIsCisJCQkJCQkgICAgICJjbGstcGl4LWdkcDIiLAorCQkJCQkJICAgICAiY2xrLXBpeC1nZHAzIiwKKwkJCQkJCSAgICAgImNsay1waXgtZ2RwNCIsCisJCQkJCQkgICAgICJjbGstcGl4LWF1eC1kaXNwIiwKKwkJCQkJCSAgICAgImNsay1kZW5jIiwKKwkJCQkJCSAgICAgImNsay1waXgtaGRkYWMiLAorCQkJCQkJICAgICAiY2xrLWhkZGFjIiwKKwkJCQkJCSAgICAgImNsay1zZGRhYyIsCisJCQkJCQkgICAgICJjbGstcGl4LWR2byIsCisJCQkJCQkgICAgICJjbGstZHZvIiwKKwkJCQkJCSAgICAgImNsay1waXgtaGRtaSIsCisJCQkJCQkgICAgICJjbGstdG1kcy1oZG1pIiwKKwkJCQkJCSAgICAgImNsay1yZWYtaGRtaXBoeSI7CisJCQkJCQkgICAgIH07CisJCX07CisKKwkJY2xrX3NfZDNfcXVhZGZzOiBjbGstcy1kMy1xdWFkZnNAOTEwNzAwMCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInN0LHN0aWg0MDctcXVhZGZzNjYwLUQiLCAic3QscXVhZGZzIjsKKwkJCXJlZyA9IDwweDkxMDcwMDAgMHgxMDAwPjsKKworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrLXMtZDMtZnMwLWNoMCIsCisJCQkJCSAgICAgImNsay1zLWQzLWZzMC1jaDEiLAorCQkJCQkgICAgICJjbGstcy1kMy1mczAtY2gyIiwKKwkJCQkJICAgICAiY2xrLXMtZDMtZnMwLWNoMyI7CisJCX07CisKKwkJY2xvY2tnZW4tZDNAOTEwNzAwMCB7CisJCQljb21wYXRpYmxlID0gInN0LGNsa2dlbi1jMzIiOworCQkJcmVnID0gPDB4OTEwNzAwMCAweDEwMDA+OworCisJCQljbGtfc19kM19mbGV4Z2VuOiBjbGstcy1kMy1mbGV4Z2VuIHsKKwkJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJzdCxmbGV4Z2VuIjsKKworCQkJCWNsb2NrcyA9IDwmY2xrX3NfZDNfcXVhZGZzIDA+LAorCQkJCQkgPCZjbGtfc19kM19xdWFkZnMgMT4sCisJCQkJCSA8JmNsa19zX2QzX3F1YWRmcyAyPiwKKwkJCQkJIDwmY2xrX3NfZDNfcXVhZGZzIDM+LAorCQkJCQkgPCZjbGtfc3lzaW4+OworCisJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsay1zdGZlLWZyYzEiLAorCQkJCQkJICAgICAiY2xrLXRzb3V0LTAiLAorCQkJCQkJICAgICAiY2xrLXRzb3V0LTEiLAorCQkJCQkJICAgICAiY2xrLW1jaGkiLAorCQkJCQkJICAgICAiY2xrLXZzZW5zLWNvbXBvIiwKKwkJCQkJCSAgICAgImNsay1mcmMxLXJlbW90ZSIsCisJCQkJCQkgICAgICJjbGstbHBjLTAiLAorCQkJCQkJICAgICAiY2xrLWxwYy0xIjsKKwkJCX07CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLXBpbmN0cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAtcGluY3RybC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTlkZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLXBpbmN0cmwuZHRzaQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNUTWljcm9lbGVjdHJvbmljcyBMaW1pdGVkLgorICogQXV0aG9yOiBQZXRlciBHcmlmZmluIDxwZXRlci5ncmlmZmluQGxpbmFyby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlICJzdC1waW5jZmcuaCIKKy8geworCisJc29jIHsKKwkJcGluLWNvbnRyb2xsZXItcmVhciB7CisKKwkJCXVzYjAgeworCQkJCXBpbmN0cmxfdXNiMDogdXNiMi0wIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQl1c2Itb2MtZGV0ZWN0ID0gPCZwaW8zNSAwIEFMVDEgSU4+OworCQkJCQkJdXNiLXB3ci1lbmFibGUgPSA8JnBpbzM1IDEgQUxUMSBPVVQ+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQl1c2IxIHsKKwkJCQlwaW5jdHJsX3VzYjE6IHVzYjItMSB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJdXNiLW9jLWRldGVjdCA9IDwmcGlvMzUgMiBBTFQxIElOPjsKKwkJCQkJCXVzYi1wd3ItZW5hYmxlID0gPCZwaW8zNSAzIEFMVDEgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDU2MjdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC5kdHNpCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU1RNaWNyb2VsZWN0cm9uaWNzIExpbWl0ZWQuCisgKiBBdXRob3I6IFBldGVyIEdyaWZmaW4gPHBldGVyLmdyaWZmaW5AbGluYXJvLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgInN0aWg0MTAtY2xvY2suZHRzaSIKKyNpbmNsdWRlICJzdGloNDA3LWZhbWlseS5kdHNpIgorI2luY2x1ZGUgInN0aWg0MTAtcGluY3RybC5kdHNpIgorLyB7CisKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LXBpbmN0cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUtcGluY3RybC5kdHNpCmluZGV4IDg1MDlhMDMuLjM3OTFhZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUtcGluY3RybC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUtcGluY3RybC5kdHNpCkBAIC0xMSwzMyArMTEsMzMgQEAKIC8gewogCiAJYWxpYXNlcyB7Ci0JCWdwaW8wCT0gJlBJTzA7Ci0JCWdwaW8xCT0gJlBJTzE7Ci0JCWdwaW8yCT0gJlBJTzI7Ci0JCWdwaW8zCT0gJlBJTzM7Ci0JCWdwaW80CT0gJlBJTzQ7Ci0JCWdwaW81CT0gJlBJTzU7Ci0JCWdwaW82CT0gJlBJTzY7Ci0JCWdwaW83CT0gJlBJTzc7Ci0JCWdwaW84CT0gJlBJTzg7Ci0JCWdwaW85CT0gJlBJTzk7Ci0JCWdwaW8xMAk9ICZQSU8xMDsKLQkJZ3BpbzExCT0gJlBJTzExOwotCQlncGlvMTIJPSAmUElPMTI7Ci0JCWdwaW8xMwk9ICZQSU8xMzsKLQkJZ3BpbzE0CT0gJlBJTzE0OwotCQlncGlvMTUJPSAmUElPMTU7Ci0JCWdwaW8xNgk9ICZQSU8xNjsKLQkJZ3BpbzE3CT0gJlBJTzE3OwotCQlncGlvMTgJPSAmUElPMTg7Ci0JCWdwaW8xOQk9ICZQSU8xMDA7Ci0JCWdwaW8yMAk9ICZQSU8xMDE7Ci0JCWdwaW8yMQk9ICZQSU8xMDI7Ci0JCWdwaW8yMgk9ICZQSU8xMDM7Ci0JCWdwaW8yMwk9ICZQSU8xMDQ7Ci0JCWdwaW8yNAk9ICZQSU8xMDU7Ci0JCWdwaW8yNQk9ICZQSU8xMDY7Ci0JCWdwaW8yNgk9ICZQSU8xMDc7CisJCWdwaW8wCT0gJnBpbzA7CisJCWdwaW8xCT0gJnBpbzE7CisJCWdwaW8yCT0gJnBpbzI7CisJCWdwaW8zCT0gJnBpbzM7CisJCWdwaW80CT0gJnBpbzQ7CisJCWdwaW81CT0gJnBpbzU7CisJCWdwaW82CT0gJnBpbzY7CisJCWdwaW83CT0gJnBpbzc7CisJCWdwaW84CT0gJnBpbzg7CisJCWdwaW85CT0gJnBpbzk7CisJCWdwaW8xMAk9ICZwaW8xMDsKKwkJZ3BpbzExCT0gJnBpbzExOworCQlncGlvMTIJPSAmcGlvMTI7CisJCWdwaW8xMwk9ICZwaW8xMzsKKwkJZ3BpbzE0CT0gJnBpbzE0OworCQlncGlvMTUJPSAmcGlvMTU7CisJCWdwaW8xNgk9ICZwaW8xNjsKKwkJZ3BpbzE3CT0gJnBpbzE3OworCQlncGlvMTgJPSAmcGlvMTg7CisJCWdwaW8xOQk9ICZwaW8xMDA7CisJCWdwaW8yMAk9ICZwaW8xMDE7CisJCWdwaW8yMQk9ICZwaW8xMDI7CisJCWdwaW8yMgk9ICZwaW8xMDM7CisJCWdwaW8yMwk9ICZwaW8xMDQ7CisJCWdwaW8yNAk9ICZwaW8xMDU7CisJCWdwaW8yNQk9ICZwaW8xMDY7CisJCWdwaW8yNgk9ICZwaW8xMDc7CiAJfTsKIAogCXNvYyB7CkBAIC01Miw3ICs1Miw3IEBACiAJCQlpbnRlcnJ1cHQtbmFtZXMJPSAiaXJxbXV4IjsKIAkJCXJhbmdlcyAJCT0gPDAgMHhmZTYxMDAwMCAweDUwMDA+OwogCi0JCQlQSU8wOiBncGlvQGZlNjEwMDAwIHsKKwkJCXBpbzA6IGdwaW9AZmU2MTAwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTYwLDcgKzYwLDcgQEAKIAkJCQlyZWcJCT0gPDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8wIjsKIAkJCX07Ci0JCQlQSU8xOiBncGlvQGZlNjExMDAwIHsKKwkJCXBpbzE6IGdwaW9AZmU2MTEwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTY4LDcgKzY4LDcgQEAKIAkJCQlyZWcJCT0gPDB4MTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEiOwogCQkJfTsKLQkJCVBJTzI6IGdwaW9AZmU2MTIwMDAgeworCQkJcGlvMjogZ3Bpb0BmZTYxMjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNzYsNyArNzYsNyBAQAogCQkJCXJlZwkJPSA8MHgyMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMiI7CiAJCQl9OwotCQkJUElPMzogZ3Bpb0BmZTYxMzAwMCB7CisJCQlwaW8zOiBncGlvQGZlNjEzMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC04NCw3ICs4NCw3IEBACiAJCQkJcmVnCQk9IDwweDMwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8zIjsKIAkJCX07Ci0JCQlQSU80OiBncGlvQGZlNjE0MDAwIHsKKwkJCXBpbzQ6IGdwaW9AZmU2MTQwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTk2LDggKzk2LDggQEAKIAkJCXNiY19zZXJpYWwxIHsKIAkJCQlwaW5jdHJsX3NiY19zZXJpYWwxOnNiY19zZXJpYWwxIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQl0eAk9IDwmUElPMiA2IEFMVDMgT1VUPjsKLQkJCQkJCXJ4CT0gPCZQSU8yIDcgQUxUMyBJTj47CisJCQkJCQl0eAk9IDwmcGlvMiA2IEFMVDMgT1VUPjsKKwkJCQkJCXJ4CT0gPCZwaW8yIDcgQUxUMyBJTj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0xMDUsMTUgKzEwNSwxNSBAQAogCQkJa2V5c2NhbiB7CiAJCQkJcGluY3RybF9rZXlzY2FuOiBrZXlzY2FuIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlrZXlpbjAgPSA8JlBJTzAgMiBBTFQyIElOPjsKLQkJCQkJCWtleWluMSA9IDwmUElPMCAzIEFMVDIgSU4+OwotCQkJCQkJa2V5aW4yID0gPCZQSU8wIDQgQUxUMiBJTj47Ci0JCQkJCQlrZXlpbjMgPSA8JlBJTzIgNiBBTFQyIElOPjsKKwkJCQkJCWtleWluMCA9IDwmcGlvMCAyIEFMVDIgSU4+OworCQkJCQkJa2V5aW4xID0gPCZwaW8wIDMgQUxUMiBJTj47CisJCQkJCQlrZXlpbjIgPSA8JnBpbzAgNCBBTFQyIElOPjsKKwkJCQkJCWtleWluMyA9IDwmcGlvMiA2IEFMVDIgSU4+OwogCi0JCQkJCQlrZXlvdXQwID0gPCZQSU8xIDYgQUxUMiBPVVQ+OwotCQkJCQkJa2V5b3V0MSA9IDwmUElPMSA3IEFMVDIgT1VUPjsKLQkJCQkJCWtleW91dDIgPSA8JlBJTzAgNiBBTFQyIE9VVD47Ci0JCQkJCQlrZXlvdXQzID0gPCZQSU8yIDcgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MCA9IDwmcGlvMSA2IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDEgPSA8JnBpbzEgNyBBTFQyIE9VVD47CisJCQkJCQlrZXlvdXQyID0gPCZwaW8wIDYgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MyA9IDwmcGlvMiA3IEFMVDIgT1VUPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTEyMSw4ICsxMjEsOCBAQAogCQkJc2JjX2kyYzAgewogCQkJCXBpbmN0cmxfc2JjX2kyYzBfZGVmYXVsdDogc2JjX2kyYzAtZGVmYXVsdCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJc2RhID0gPCZQSU80IDYgQUxUMSBCSURJUj47Ci0JCQkJCQlzY2wgPSA8JlBJTzQgNSBBTFQxIEJJRElSPjsKKwkJCQkJCXNkYSA9IDwmcGlvNCA2IEFMVDEgQklESVI+OworCQkJCQkJc2NsID0gPCZwaW80IDUgQUxUMSBCSURJUj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0xMzAsOCArMTMwLDggQEAKIAkJCXNiY19pMmMxIHsKIAkJCQlwaW5jdHJsX3NiY19pMmMxX2RlZmF1bHQ6IHNiY19pMmMxLWRlZmF1bHQgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXNkYSA9IDwmUElPMyAyIEFMVDIgQklESVI+OwotCQkJCQkJc2NsID0gPCZQSU8zIDEgQUxUMiBCSURJUj47CisJCQkJCQlzZGEgPSA8JnBpbzMgMiBBTFQyIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvMyAxIEFMVDIgQklESVI+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJCQlyY3sKIAkJCQlwaW5jdHJsX2lyOiBpcjAgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCWlyID0gPCZQSU80IDAgQUxUMiBJTj47CisJCQkJCQlpciA9IDwmcGlvNCAwIEFMVDIgSU4+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMTQ3LDQ5ICsxNDcsNDkgQEAKIAkJCWdtYWMxIHsKIAkJCQlwaW5jdHJsX21paTE6IG1paTEgewogCQkJCQkJc3QscGlucyB7Ci0JCQkJCQkgdHhkMCAgID0gPCZQSU8wIDAgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHR4ZDEgICA9IDwmUElPMCAxIEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSB0eGQyICAgPSA8JlBJTzAgMiBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgdHhkMyAgID0gPCZQSU8wIDMgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHR4ZXIgICA9IDwmUElPMCA0IEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSB0eGVuICAgPSA8JlBJTzAgNSBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgdHhjbGsgID0gPCZQSU8wIDYgQUxUMSBJTiAgIE5JQ0xLCTAJQ0xLX0E+OwotCQkJCQkJIGNvbCAgICA9IDwmUElPMCA3IEFMVDEgSU4gICBCWVBBU1MJMTAwMD47Ci0JCQkJCQkgbWRpbyAgID0gPCZQSU8xIDAgQUxUMSBPVVQgIEJZUEFTUwkwPjsKLQkJCQkJCSBtZGMgICAgPSA8JlBJTzEgMSBBTFQxIE9VVCAgTklDTEsJMAlDTEtfQT47Ci0JCQkJCQkgY3JzICAgID0gPCZQSU8xIDIgQUxUMSBJTiAgIEJZUEFTUwkxMDAwPjsKLQkJCQkJCSBtZGludCAgPSA8JlBJTzEgMyBBTFQxIElOICAgQllQQVNTCTA+OwotCQkJCQkJIHJ4ZDAgICA9IDwmUElPMSA0IEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSByeGQxICAgPSA8JlBJTzEgNSBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgcnhkMiAgID0gPCZQSU8xIDYgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHJ4ZDMgICA9IDwmUElPMSA3IEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJCSByeGR2ICAgPSA8JlBJTzIgMCBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCQkgcnhfZXIgID0gPCZQSU8yIDEgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHJ4Y2xrICA9IDwmUElPMiAyIEFMVDEgSU4gICBOSUNMSwkwCUNMS19BPjsKLQkJCQkJCSBwaHljbGsgPSA8JlBJTzIgMyBBTFQxIElOICAgTklDTEsJMTAwMAlDTEtfQT47CisJCQkJCQkgdHhkMCAgID0gPCZwaW8wIDAgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHR4ZDEgICA9IDwmcGlvMCAxIEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSB0eGQyICAgPSA8JnBpbzAgMiBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgdHhkMyAgID0gPCZwaW8wIDMgQUxUMSBPVVQgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHR4ZXIgICA9IDwmcGlvMCA0IEFMVDEgT1VUICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSB0eGVuICAgPSA8JnBpbzAgNSBBTFQxIE9VVCAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgdHhjbGsgID0gPCZwaW8wIDYgQUxUMSBJTiAgIE5JQ0xLCTAJQ0xLX0E+OworCQkJCQkJIGNvbCAgICA9IDwmcGlvMCA3IEFMVDEgSU4gICBCWVBBU1MJMTAwMD47CisJCQkJCQkgbWRpbyAgID0gPCZwaW8xIDAgQUxUMSBPVVQgIEJZUEFTUwkwPjsKKwkJCQkJCSBtZGMgICAgPSA8JnBpbzEgMSBBTFQxIE9VVCAgTklDTEsJMAlDTEtfQT47CisJCQkJCQkgY3JzICAgID0gPCZwaW8xIDIgQUxUMSBJTiAgIEJZUEFTUwkxMDAwPjsKKwkJCQkJCSBtZGludCAgPSA8JnBpbzEgMyBBTFQxIElOICAgQllQQVNTCTA+OworCQkJCQkJIHJ4ZDAgICA9IDwmcGlvMSA0IEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSByeGQxICAgPSA8JnBpbzEgNSBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgcnhkMiAgID0gPCZwaW8xIDYgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHJ4ZDMgICA9IDwmcGlvMSA3IEFMVDEgSU4gICBTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJCSByeGR2ICAgPSA8JnBpbzIgMCBBTFQxIElOICAgU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCQkgcnhfZXIgID0gPCZwaW8yIDEgQUxUMSBJTiAgIFNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkJIHJ4Y2xrICA9IDwmcGlvMiAyIEFMVDEgSU4gICBOSUNMSwkwCUNMS19BPjsKKwkJCQkJCSBwaHljbGsgPSA8JnBpbzIgMyBBTFQxIElOICAgTklDTEsJMTAwMAlDTEtfQT47CiAJCQkJCX07CiAJCQkJfTsKIAogCQkJCXBpbmN0cmxfcmdtaWkxOiByZ21paTEtMCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJIHR4ZDAgPQkgPCZQSU8wIDAgQUxUMSBPVVQgREVfSU8JMTAwMAlDTEtfQT47Ci0JCQkJCQkgdHhkMSA9CSA8JlBJTzAgMSBBTFQxIE9VVCBERV9JTwkxMDAwCUNMS19BPjsKLQkJCQkJCSB0eGQyID0JIDwmUElPMCAyIEFMVDEgT1VUIERFX0lPCTEwMDAJQ0xLX0E+OwotCQkJCQkJIHR4ZDMgPQkgPCZQSU8wIDMgQUxUMSBPVVQgREVfSU8JMTAwMAlDTEtfQT47Ci0JCQkJCQkgdHhlbiA9CSA8JlBJTzAgNSBBTFQxIE9VVCBERV9JTwkwCUNMS19BPjsKLQkJCQkJCSB0eGNsayA9IDwmUElPMCA2IEFMVDEgSU4JTklDTEsJMAlDTEtfQT47Ci0JCQkJCQkgbWRpbyA9CSA8JlBJTzEgMCBBTFQxIE9VVAlCWVBBU1MJMD47Ci0JCQkJCQkgbWRjID0JIDwmUElPMSAxIEFMVDEgT1VUCU5JQ0xLCTAJQ0xLX0E+OwotCQkJCQkJIHJ4ZDAgPQkgPCZQSU8xIDQgQUxUMSBJTiBERV9JTwkwCUNMS19BPjsKLQkJCQkJCSByeGQxID0JIDwmUElPMSA1IEFMVDEgSU4gREVfSU8JMAlDTEtfQT47Ci0JCQkJCQkgcnhkMiA9CSA8JlBJTzEgNiBBTFQxIElOIERFX0lPCTAJQ0xLX0E+OwotCQkJCQkJIHJ4ZDMgPQkgPCZQSU8xIDcgQUxUMSBJTiBERV9JTwkwCUNMS19BPjsKKwkJCQkJCSB0eGQwID0JIDwmcGlvMCAwIEFMVDEgT1VUIERFX0lPCTEwMDAJQ0xLX0E+OworCQkJCQkJIHR4ZDEgPQkgPCZwaW8wIDEgQUxUMSBPVVQgREVfSU8JMTAwMAlDTEtfQT47CisJCQkJCQkgdHhkMiA9CSA8JnBpbzAgMiBBTFQxIE9VVCBERV9JTwkxMDAwCUNMS19BPjsKKwkJCQkJCSB0eGQzID0JIDwmcGlvMCAzIEFMVDEgT1VUIERFX0lPCTEwMDAJQ0xLX0E+OworCQkJCQkJIHR4ZW4gPQkgPCZwaW8wIDUgQUxUMSBPVVQgREVfSU8JMAlDTEtfQT47CisJCQkJCQkgdHhjbGsgPSA8JnBpbzAgNiBBTFQxIElOCU5JQ0xLCTAJQ0xLX0E+OworCQkJCQkJIG1kaW8gPQkgPCZwaW8xIDAgQUxUMSBPVVQJQllQQVNTCTA+OworCQkJCQkJIG1kYyA9CSA8JnBpbzEgMSBBTFQxIE9VVAlOSUNMSwkwCUNMS19BPjsKKwkJCQkJCSByeGQwID0JIDwmcGlvMSA0IEFMVDEgSU4gREVfSU8JMAlDTEtfQT47CisJCQkJCQkgcnhkMSA9CSA8JnBpbzEgNSBBTFQxIElOIERFX0lPCTAJQ0xLX0E+OworCQkJCQkJIHJ4ZDIgPQkgPCZwaW8xIDYgQUxUMSBJTiBERV9JTwkwCUNMS19BPjsKKwkJCQkJCSByeGQzID0JIDwmcGlvMSA3IEFMVDEgSU4gREVfSU8JMAlDTEtfQT47CiAKLQkJCQkJCSByeGR2ID0JICA8JlBJTzIgMCBBTFQxIElOIERFX0lPCTUwMAlDTEtfQT47Ci0JCQkJCQkgcnhjbGsgPSAgPCZQSU8yIDIgQUxUMSBJTglOSUNMSwkwCUNMS19BPjsKLQkJCQkJCSBwaHljbGsgPSA8JlBJTzIgMyBBTFQ0IE9VVAlOSUNMSwkwCUNMS19CPjsKKwkJCQkJCSByeGR2ID0JICA8JnBpbzIgMCBBTFQxIElOIERFX0lPCTUwMAlDTEtfQT47CisJCQkJCQkgcnhjbGsgPSAgPCZwaW8yIDIgQUxUMSBJTglOSUNMSwkwCUNMS19BPjsKKwkJCQkJCSBwaHljbGsgPSA8JnBpbzIgMyBBTFQ0IE9VVAlOSUNMSwkwCUNMS19CPjsKIAotCQkJCQkJIGNsazEyNT0gPCZQSU8zIDcgQUxUNCBJTiAJTklDTEsJMAlDTEtfQT47CisJCQkJCQkgY2xrMTI1PSA8JnBpbzMgNyBBTFQ0IElOIAlOSUNMSwkwCUNMS19BPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQkJaW50ZXJydXB0LW5hbWVzCT0gImlycW11eCI7CiAJCQlyYW5nZXMJCT0gPDAgMHhmZWUwMDAwMCAweDgwMDA+OwogCi0JCQlQSU81OiBncGlvQGZlZTAwMDAwIHsKKwkJCXBpbzU6IGdwaW9AZmVlMDAwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTIxNCw3ICsyMTQsNyBAQAogCQkJCXJlZwkJPSA8MCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzUiOwogCQkJfTsKLQkJCVBJTzY6IGdwaW9AZmVlMDEwMDAgeworCQkJcGlvNjogZ3Bpb0BmZWUwMTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJCQkJcmVnCQk9IDwweDEwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU82IjsKIAkJCX07Ci0JCQlQSU83OiBncGlvQGZlZTAyMDAwIHsKKwkJCXBpbzc6IGdwaW9AZmVlMDIwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTIzMCw3ICsyMzAsNyBAQAogCQkJCXJlZwkJPSA8MHgyMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPNyI7CiAJCQl9OwotCQkJUElPODogZ3Bpb0BmZWUwMzAwMCB7CisJCQlwaW84OiBncGlvQGZlZTAzMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yMzgsNyArMjM4LDcgQEAKIAkJCQlyZWcJCT0gPDB4MzAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzgiOwogCQkJfTsKLQkJCVBJTzk6IGdwaW9AZmVlMDQwMDAgeworCQkJcGlvOTogZ3Bpb0BmZWUwNDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCQkJcmVnCQk9IDwweDQwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU85IjsKIAkJCX07Ci0JCQlQSU8xMDogZ3Bpb0BmZWUwNTAwMCB7CisJCQlwaW8xMDogZ3Bpb0BmZWUwNTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJCQkJcmVnCQk9IDwweDUwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMCI7CiAJCQl9OwotCQkJUElPMTE6IGdwaW9AZmVlMDYwMDAgeworCQkJcGlvMTE6IGdwaW9AZmVlMDYwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI2Miw3ICsyNjIsNyBAQAogCQkJCXJlZwkJPSA8MHg2MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTEiOwogCQkJfTsKLQkJCVBJTzEyOiBncGlvQGZlZTA3MDAwIHsKKwkJCXBpbzEyOiBncGlvQGZlZTA3MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yNzQsOCArMjc0LDggQEAKIAkJCWkyYzAgewogCQkJCXBpbmN0cmxfaTJjMF9kZWZhdWx0OiBpMmMwLWRlZmF1bHQgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXNkYSA9IDwmUElPOSAzIEFMVDEgQklESVI+OwotCQkJCQkJc2NsID0gPCZQSU85IDIgQUxUMSBCSURJUj47CisJCQkJCQlzZGEgPSA8JnBpbzkgMyBBTFQxIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvOSAyIEFMVDEgQklESVI+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMjgzLDggKzI4Myw4IEBACiAJCQlpMmMxIHsKIAkJCQlwaW5jdHJsX2kyYzFfZGVmYXVsdDogaTJjMS1kZWZhdWx0IHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlzZGEgPSA8JlBJTzEyIDEgQUxUMSBCSURJUj47Ci0JCQkJCQlzY2wgPSA8JlBJTzEyIDAgQUxUMSBCSURJUj47CisJCQkJCQlzZGEgPSA8JnBpbzEyIDEgQUxUMSBCSURJUj47CisJCQkJCQlzY2wgPSA8JnBpbzEyIDAgQUxUMSBCSURJUj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0zMDEsNyArMzAxLDcgQEAKIAkJCWludGVycnVwdC1uYW1lcwk9ICJpcnFtdXgiOwogCQkJcmFuZ2VzCQk9IDwwIDB4ZmU4MjAwMDAgMHg4MDAwPjsKIAotCQkJUElPMTM6IGdwaW9AZmU4MjAwMDAgeworCQkJcGlvMTM6IGdwaW9AZmU4MjAwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTMwOSw3ICszMDksNyBAQAogCQkJCXJlZwkJPSA8MCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEzIjsKIAkJCX07Ci0JCQlQSU8xNDogZ3Bpb0BmZTgyMTAwMCB7CisJCQlwaW8xNDogZ3Bpb0BmZTgyMTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJCQkJcmVnCQk9IDwweDEwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xNCI7CiAJCQl9OwotCQkJUElPMTU6IGdwaW9AZmU4MjIwMDAgeworCQkJcGlvMTU6IGdwaW9AZmU4MjIwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTMyNSw3ICszMjUsNyBAQAogCQkJCXJlZwkJPSA8MHgyMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTUiOwogCQkJfTsKLQkJCVBJTzE2OiBncGlvQGZlODIzMDAwIHsKKwkJCXBpbzE2OiBncGlvQGZlODIzMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJCQlyZWcJCT0gPDB4MzAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzE2IjsKIAkJCX07Ci0JCQlQSU8xNzogZ3Bpb0BmZTgyNDAwMCB7CisJCQlwaW8xNzogZ3Bpb0BmZTgyNDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzQxLDcgKzM0MSw3IEBACiAJCQkJcmVnCQk9IDwweDQwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xNyI7CiAJCQl9OwotCQkJUElPMTg6IGdwaW9AZmU4MjUwMDAgeworCQkJcGlvMTg6IGdwaW9AZmU4MjUwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTM1Myw4ICszNTMsOCBAQAogCQkJc2VyaWFsMiB7CiAJCQkJcGluY3RybF9zZXJpYWwyOiBzZXJpYWwyLTAgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXR4CT0gPCZQSU8xNyA0IEFMVDIgT1VUPjsKLQkJCQkJCXJ4CT0gPCZQSU8xNyA1IEFMVDIgSU4+OworCQkJCQkJdHgJPSA8JnBpbzE3IDQgQUxUMiBPVVQ+OworCQkJCQkJcngJPSA8JnBpbzE3IDUgQUxUMiBJTj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0zNjIsNzMgKzM2Miw5NCBAQAogCQkJZ21hYzB7CiAJCQkJcGluY3RybF9taWkwOiBtaWkwIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCSBtZGludCA9CTwmUElPMTMgNiBBTFQyCUlOCUJZUEFTUwkJMD47Ci0JCQkJCSB0eGVuID0JCTwmUElPMTMgNyBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJIG1kaW50ID0JPCZwaW8xMyA2IEFMVDIJSU4JQllQQVNTCQkwPjsKKwkJCQkJIHR4ZW4gPQkJPCZwaW8xMyA3IEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OwogCi0JCQkJCSB0eGQwID0JCTwmUElPMTQgMCBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJIHR4ZDEgPQkJPCZQSU8xNCAxIEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkgdHhkMiA9CQk8JlBJTzE0IDIgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQj47Ci0JCQkJCSB0eGQzID0JCTwmUElPMTQgMyBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19CPjsKKwkJCQkJIHR4ZDAgPQkJPCZwaW8xNCAwIEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkgdHhkMSA9CQk8JnBpbzE0IDEgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCSB0eGQyID0JCTwmcGlvMTQgMiBBTFQyCU9VVAlTRV9OSUNMS19JTwkwCUNMS19CPjsKKwkJCQkJIHR4ZDMgPQkJPCZwaW8xNCAzIEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0I+OwogCi0JCQkJCSB0eGNsayA9CTwmUElPMTUgMCBBTFQyCUlOCU5JQ0xLCQkwCUNMS19BPjsKLQkJCQkJIHR4ZXIgPQkJPCZQSU8xNSAxIEFMVDIJT1VUCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkgY3JzID0JCTwmUElPMTUgMiBBTFQyCUlOCUJZUEFTUwkJMTAwMD47Ci0JCQkJCSBjb2wgPQkJPCZQSU8xNSAzIEFMVDIJSU4JQllQQVNTCQkxMDAwPjsKLQkJCQkJIG1kaW8gID0gICAgICAgIDwmUElPMTUgNCBBTFQyCU9VVAlCWVBBU1MgCTMwMDA+OwotCQkJCQkgbWRjICAgPSAgICAgICAgPCZQSU8xNSA1IEFMVDIJT1VUICAgICBOSUNMSyAgCTAgICAgCUNMS19CPjsKKwkJCQkJIHR4Y2xrID0JPCZwaW8xNSAwIEFMVDIJSU4JTklDTEsJCTAJQ0xLX0E+OworCQkJCQkgdHhlciA9CQk8JnBpbzE1IDEgQUxUMglPVVQJU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCSBjcnMgPQkJPCZwaW8xNSAyIEFMVDIJSU4JQllQQVNTCQkxMDAwPjsKKwkJCQkJIGNvbCA9CQk8JnBpbzE1IDMgQUxUMglJTglCWVBBU1MJCTEwMDA+OworCQkJCQkgbWRpbyAgPSAgICAgICAgPCZwaW8xNSA0IEFMVDIJT1VUCUJZUEFTUyAJMzAwMD47CisJCQkJCSBtZGMgICA9ICAgICAgICA8JnBpbzE1IDUgQUxUMglPVVQgICAgIE5JQ0xLICAJMCAgICAJQ0xLX0I+OwogCi0JCQkJCSByeGQwID0JCTwmUElPMTYgMCBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkgcnhkMSA9CQk8JlBJTzE2IDEgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJIHJ4ZDIgPQkJPCZQSU8xNiAyIEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCSByeGQzID0JCTwmUElPMTYgMyBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OwotCQkJCQkgcnhkdiA9CQk8JlBJTzE1IDYgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKLQkJCQkJIHJ4X2VyID0JPCZQSU8xNSA3IEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47Ci0JCQkJCSByeGNsayA9CTwmUElPMTcgMCBBTFQyCUlOCU5JQ0xLCQkwCUNMS19BPjsKLQkJCQkJIHBoeWNsayA9CTwmUElPMTMgNSBBTFQyCU9VVAlOSUNMSwkxMDAwCUNMS19BPjsKKwkJCQkJIHJ4ZDAgPQkJPCZwaW8xNiAwIEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCSByeGQxID0JCTwmcGlvMTYgMSBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkgcnhkMiA9CQk8JnBpbzE2IDIgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJIHJ4ZDMgPQkJPCZwaW8xNiAzIEFMVDIJSU4JU0VfTklDTEtfSU8JMAlDTEtfQT47CisJCQkJCSByeGR2ID0JCTwmcGlvMTUgNiBBTFQyCUlOCVNFX05JQ0xLX0lPCTAJQ0xLX0E+OworCQkJCQkgcnhfZXIgPQk8JnBpbzE1IDcgQUxUMglJTglTRV9OSUNMS19JTwkwCUNMS19BPjsKKwkJCQkJIHJ4Y2xrID0JPCZwaW8xNyAwIEFMVDIJSU4JTklDTEsJCTAJQ0xLX0E+OworCQkJCQkgcGh5Y2xrID0JPCZwaW8xMyA1IEFMVDIJT1VUCU5JQ0xLCTEwMDAJQ0xLX0E+OwogCiAJCQkJCX07CiAJCQkJfTsKIAogCQkJcGluY3RybF9nbWlpMDogZ21paTAgewogCQkJCXN0LHBpbnMgewotCQkJCQkgbWRpbnQgPQk8JlBJTzEzIDYJQUxUMiBJTgkJQllQQVNTCTA+OwotCQkJCQkgbWRpbyAgPSAgICAgICAgPCZQSU8xNSA0IAlBTFQyIE9VVAlCWVBBU1MgCTMwMDA+OwotCQkJCQkgbWRjICAgPSAgICAgICAgPCZQSU8xNSA1IAlBTFQyIE9VVCAgICAJTklDTEsgIAkwICAgIAlDTEtfQj47Ci0JCQkJCSB0eGVuID0JCTwmUElPMTMgNwlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19BPjsKKwkJCQkJIG1kaW50ID0JPCZwaW8xMyA2CUFMVDIgSU4JCUJZUEFTUwkwPjsKKwkJCQkJIG1kaW8gID0gICAgICAgIDwmcGlvMTUgNCAJQUxUMiBPVVQJQllQQVNTIAkzMDAwPjsKKwkJCQkJIG1kYyAgID0gICAgICAgIDwmcGlvMTUgNSAJQUxUMiBPVVQgICAgCU5JQ0xLICAJMCAgICAJQ0xLX0I+OworCQkJCQkgdHhlbiA9CQk8JnBpbzEzIDcJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQT47CiAKLQkJCQkJIHR4ZDAgPQkJPCZQSU8xNCAwCUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0E+OwotCQkJCQkgdHhkMSA9CQk8JlBJTzE0IDEJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQT47Ci0JCQkJCSB0eGQyID0JCTwmUElPMTQgMglBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKLQkJCQkJIHR4ZDMgPQkJPCZQSU8xNCAzCUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OwotCQkJCQkgdHhkNCA9CQk8JlBJTzE0IDQJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47Ci0JCQkJCSB0eGQ1ID0JCTwmUElPMTQgNQlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKLQkJCQkJIHR4ZDYgPQkJPCZQSU8xNCA2CUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OwotCQkJCQkgdHhkNyA9CQk8JlBJTzE0IDcJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47CisJCQkJCSB0eGQwID0JCTwmcGlvMTQgMAlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19BPjsKKwkJCQkJIHR4ZDEgPQkJPCZwaW8xNCAxCUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0E+OworCQkJCQkgdHhkMiA9CQk8JnBpbzE0IDIJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47CisJCQkJCSB0eGQzID0JCTwmcGlvMTQgMwlBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKKwkJCQkJIHR4ZDQgPQkJPCZwaW8xNCA0CUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OworCQkJCQkgdHhkNSA9CQk8JnBpbzE0IDUJQUxUMiBPVVQJU0VfTklDTEtfSU8JMzAwMAlDTEtfQj47CisJCQkJCSB0eGQ2ID0JCTwmcGlvMTQgNglBTFQyIE9VVAlTRV9OSUNMS19JTwkzMDAwCUNMS19CPjsKKwkJCQkJIHR4ZDcgPQkJPCZwaW8xNCA3CUFMVDIgT1VUCVNFX05JQ0xLX0lPCTMwMDAJQ0xLX0I+OwogCi0JCQkJCSB0eGNsayA9CTwmUElPMTUgMAlBTFQyIElOCQlOSUNMSwkwCUNMS19BPjsKLQkJCQkJIHR4ZXIgPQkJPCZQSU8xNSAxCUFMVDIgT1VUIAlTRV9OSUNMS19JTwkzMDAwCUNMS19BPjsKLQkJCQkJIGNycyA9CQk8JlBJTzE1IDIJQUxUMiBJTgkJQllQQVNTCTEwMDA+OwotCQkJCQkgY29sID0JCTwmUElPMTUgMwlBTFQyIElOCQlCWVBBU1MJMTAwMD47Ci0JCQkJCSByeGR2ID0JCTwmUElPMTUgNglBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKLQkJCQkJIHJ4X2VyID0JPCZQSU8xNSA3CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OworCQkJCQkgdHhjbGsgPQk8JnBpbzE1IDAJQUxUMiBJTgkJTklDTEsJMAlDTEtfQT47CisJCQkJCSB0eGVyID0JCTwmcGlvMTUgMQlBTFQyIE9VVCAJU0VfTklDTEtfSU8JMzAwMAlDTEtfQT47CisJCQkJCSBjcnMgPQkJPCZwaW8xNSAyCUFMVDIgSU4JCUJZUEFTUwkxMDAwPjsKKwkJCQkJIGNvbCA9CQk8JnBpbzE1IDMJQUxUMiBJTgkJQllQQVNTCTEwMDA+OworCQkJCQkgcnhkdiA9CQk8JnBpbzE1IDYJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CisJCQkJCSByeF9lciA9CTwmcGlvMTUgNwlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKIAotCQkJCQkgcnhkMCA9CQk8JlBJTzE2IDAJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47Ci0JCQkJCSByeGQxID0JCTwmUElPMTYgMQlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKLQkJCQkJIHJ4ZDIgPQkJPCZQSU8xNiAyCUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OwotCQkJCQkgcnhkMyA9CQk8JlBJTzE2IDMJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47Ci0JCQkJCSByeGQ0ID0JCTwmUElPMTYgNAlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKLQkJCQkJIHJ4ZDUgPQkJPCZQSU8xNiA1CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OwotCQkJCQkgcnhkNiA9CQk8JlBJTzE2IDYJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47Ci0JCQkJCSByeGQ3ID0JCTwmUElPMTYgNwlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKKwkJCQkJIHJ4ZDAgPQkJPCZwaW8xNiAwCUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OworCQkJCQkgcnhkMSA9CQk8JnBpbzE2IDEJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CisJCQkJCSByeGQyID0JCTwmcGlvMTYgMglBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKKwkJCQkJIHJ4ZDMgPQkJPCZwaW8xNiAzCUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OworCQkJCQkgcnhkNCA9CQk8JnBpbzE2IDQJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CisJCQkJCSByeGQ1ID0JCTwmcGlvMTYgNQlBTFQyIElOCQlTRV9OSUNMS19JTwkxNTAwCUNMS19BPjsKKwkJCQkJIHJ4ZDYgPQkJPCZwaW8xNiA2CUFMVDIgSU4JCVNFX05JQ0xLX0lPCTE1MDAJQ0xLX0E+OworCQkJCQkgcnhkNyA9CQk8JnBpbzE2IDcJQUxUMiBJTgkJU0VfTklDTEtfSU8JMTUwMAlDTEtfQT47CiAKLQkJCQkJIHJ4Y2xrID0JPCZQSU8xNyAwCUFMVDIgSU4JTklDTEsJMAlDTEtfQT47Ci0JCQkJCSBjbGsxMjUgPQk8JlBJTzE3IDYJQUxUMSBJTglOSUNMSwkwCUNMS19BPjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5Y2xrID0gICAgICAgPCZQSU8xMyA1ICAgICAgIEFMVDQgT1VUIE5JQ0xLICAgMCAgICAgICBDTEtfQj47CisJCQkJCSByeGNsayA9CTwmcGlvMTcgMAlBTFQyIElOCU5JQ0xLCTAJQ0xLX0E+OworCQkJCQkgY2xrMTI1ID0JPCZwaW8xNyA2CUFMVDEgSU4JTklDTEsJMAlDTEtfQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeWNsayA9ICAgICAgIDwmcGlvMTMgNSAgICAgICBBTFQ0IE9VVCBOSUNMSyAgIDAgICAgICAgQ0xLX0I+OwogCiAKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKKworCQkJbW1jMCB7CisJCQkJcGluY3RybF9tbWMwOiBtbWMwIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQltbWNjbGsgPSA8JnBpbzEzIDQgQUxUNCBCSURJUl9QVSBOSUNMSyAwIENMS19CPjsKKwkJCQkJCWRhdGEwICA9IDwmcGlvMTQgNCBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGExICA9IDwmcGlvMTQgNSBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGEyICA9IDwmcGlvMTQgNiBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGEzICA9IDwmcGlvMTQgNyBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWNtZCAgICA9IDwmcGlvMTUgMSBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCXdwICAgICA9IDwmcGlvMTUgMyBBTFQ0IElOPjsKKwkJCQkJCWRhdGE0ICA9IDwmcGlvMTYgNCBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGE1ICA9IDwmcGlvMTYgNSBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGE2ICA9IDwmcGlvMTYgNiBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGE3ICA9IDwmcGlvMTYgNyBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCXB3ciAgICA9IDwmcGlvMTcgMSBBTFQ0IE9VVD47CisJCQkJCQljZCAgICAgPSA8JnBpbzE3IDIgQUxUNCBJTj47CisJCQkJCQlsZWQgICAgPSA8JnBpbzE3IDMgQUxUNCBPVVQ+OworCQkJCQl9OworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXBpbi1jb250cm9sbGVyLWxlZnQgewpAQCAtNDQyLDcgKzQ2Myw3IEBACiAJCQlpbnRlcnJ1cHQtbmFtZXMJPSAiaXJxbXV4IjsKIAkJCXJhbmdlcwkJPSA8MCAweGZkNmIwMDAwIDB4MzAwMD47CiAKLQkJCVBJTzEwMDogZ3Bpb0BmZDZiMDAwMCB7CisJCQlwaW8xMDA6IGdwaW9AZmQ2YjAwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTQ1MCw3ICs0NzEsNyBAQAogCQkJCXJlZwkJPSA8MCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwMCI7CiAJCQl9OwotCQkJUElPMTAxOiBncGlvQGZkNmIxMDAwIHsKKwkJCXBpbzEwMTogZ3Bpb0BmZDZiMTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNDU4LDcgKzQ3OSw3IEBACiAJCQkJcmVnCQk9IDwweDEwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDEiOwogCQkJfTsKLQkJCVBJTzEwMjogZ3Bpb0BmZDZiMjAwMCB7CisJCQlwaW8xMDI6IGdwaW9AZmQ2YjIwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTQ3OSw3ICs1MDAsNyBAQAogCQkJaW50ZXJydXB0LW5hbWVzCT0gImlycW11eCI7CiAJCQlyYW5nZXMJCT0gPDAgMHhmZDMzMDAwMCAweDUwMDA+OwogCi0JCQlQSU8xMDM6IGdwaW9AZmQzMzAwMDAgeworCQkJcGlvMTAzOiBncGlvQGZkMzMwMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC00ODcsNyArNTA4LDcgQEAKIAkJCQlyZWcJCT0gPDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDMiOwogCQkJfTsKLQkJCVBJTzEwNDogZ3Bpb0BmZDMzMTAwMCB7CisJCQlwaW8xMDQ6IGdwaW9AZmQzMzEwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTQ5NSw3ICs1MTYsNyBAQAogCQkJCXJlZwkJPSA8MHgxMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTA0IjsKIAkJCX07Ci0JCQlQSU8xMDU6IGdwaW9AZmQzMzIwMDAgeworCQkJcGlvMTA1OiBncGlvQGZkMzMyMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC01MDMsNyArNTI0LDcgQEAKIAkJCQlyZWcJCT0gPDB4MjAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwNSI7CiAJCQl9OwotCQkJUElPMTA2OiBncGlvQGZkMzMzMDAwIHsKKwkJCXBpbzEwNjogZ3Bpb0BmZDMzMzAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNTExLDcgKzUzMiw3IEBACiAJCQkJcmVnCQk9IDwweDMwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDYiOwogCQkJfTsKLQkJCVBJTzEwNzogZ3Bpb0BmZDMzNDAwMCB7CisJCQlwaW8xMDc6IGdwaW9AZmQzMzQwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUuZHRzaQppbmRleCBhMGY2Zjc1Li45MTk4YzEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS5kdHNpCkBAIC0yMTgsNSArMjE4LDE3IEBACiAJCQlyZXNldHMJPSA8JnBvd2VyZG93biBTVElINDE1X0tFWVNDQU5fUE9XRVJET1dOPiwKIAkJCQkgIDwmc29mdHJlc2V0IFNUSUg0MTVfS0VZU0NBTl9TT0ZUUkVTRVQ+OwogCQl9OworCisJCW1tYzA6IHNkaGNpQGZlODFlMDAwIHsKKwkJCWNvbXBhdGlibGUgICAgICA9ICJzdCxzZGhjaSI7CisJCQlzdGF0dXMgICAgICAgICAgPSAiZGlzYWJsZWQiOworCQkJcmVnICAgICAgICAgICAgID0gPDB4ZmU4MWUwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgICAgICA9IDxHSUNfU1BJIDE0NSBJUlFfVFlQRV9OT05FPjsKKwkJCWludGVycnVwdC1uYW1lcyA9ICJtbWNpcnEiOworCQkJcGluY3RybC1uYW1lcyAgID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wICAgICAgID0gPCZwaW5jdHJsX21tYzA+OworCQkJY2xvY2stbmFtZXMgICAgID0gIm1tYyI7CisJCQljbG9ja3MgICAgICAgICAgPSA8JmNsa19zX2ExX2xzIDE+OworCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1iMjAyMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDIwLmR0cwppbmRleCA0ZTJkZjY2Li4yMDBhODE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDIwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDIwLmR0cwpAQCAtMTIsNCArMTIsMjYgQEAKIC8gewogCW1vZGVsID0gIlNUaUg0MTYgQjIwMjAiOwogCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1iMjAyMCIsICJzdCxzdGloNDE2IjsKKworCXNvYyB7CisJCW1tYzE6IHNkaGNpQGZlODFmMDAwIHsKKwkJCXN0YXR1cyAgICAgICA9ICJva2F5IjsKKwkJCWJ1cy13aWR0aCAgICA9IDw4PjsKKwkJCW5vbi1yZW1vdmFibGU7CisJCX07CisKKwkJbWlwaHkzNjV4X3BoeTogcGh5QGZlMzgyMDAwIHsKKwkJCXBoeV9wb3J0MDogcG9ydEBmZTM4MjAwMCB7CisJCQkJc3Qsc2F0YS1nZW4gPSA8Mz47CisJCQl9OworCisJCQlwaHlfcG9ydDE6IHBvcnRAZmUzOGEwMDAgeworCQkJCXN0LHBjaWUtdHgtcG9sLWludjsKKwkJCX07CisJCX07CisKKwkJc2F0YTA6IHNhdGFAZmUzODAwMDB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDIwZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LWIyMDIwZS5kdHMKaW5kZXggYmEwZmEyYy4uOTYxNzk5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi1iMjAyMGUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtYjIwMjBlLmR0cwpAQCAtMTksMTcgKzE5LDM3IEBACiAJCQlyZWQgewogCQkJCSNncGlvLWNlbGxzCQk9IDwxPjsKIAkJCQlsYWJlbAkJCT0gIkZyb250IFBhbmVsIExFRCI7Ci0JCQkJZ3Bpb3MJCQk9IDwmUElPNCAxPjsKKwkJCQlncGlvcwkJCT0gPCZwaW80IDE+OwogCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlcgk9ICJoZWFydGJlYXQiOwogCQkJfTsKIAkJCWdyZWVuIHsKLQkJCQlncGlvcwkJCT0gPCZQSU8xIDM+OworCQkJCWdwaW9zCQkJPSA8JnBpbzEgMz47CiAJCQkJZGVmYXVsdC1zdGF0ZSAJCT0gIm9mZiI7CiAJCQl9OwogCQl9OwogCiAJCWV0aGVybmV0MTogZHdtYWNAZmVmMDgwMDAgewotCQkJc25wcyxyZXNldC1ncGlvID0gPCZQSU8wIDc+OworCQkJc25wcyxyZXNldC1ncGlvID0gPCZwaW8wIDc+OworCQl9OworCisJCW1tYzE6IHNkaGNpQGZlODFmMDAwIHsKKwkJCXN0YXR1cyAgICAgICA9ICJva2F5IjsKKwkJCWJ1cy13aWR0aCAgICA9IDw4PjsKKwkJCW5vbi1yZW1vdmFibGU7CisJCX07CisKKwkJbWlwaHkzNjV4X3BoeTogcGh5QGZlMzgyMDAwIHsKKwkJCXBoeV9wb3J0MDogcG9ydEBmZTM4MjAwMCB7CisJCQkJc3Qsc2F0YS1nZW4gPSA8Mz47CisJCQl9OworCisJCQlwaHlfcG9ydDE6IHBvcnRAZmUzOGEwMDAgeworCQkJCXN0LHBjaWUtdHgtcG9sLWludjsKKwkJCX07CisJCX07CisKKwkJc2F0YTA6IHNhdGFAZmUzODAwMDB7CisJCQlzdGF0dXMgPSAib2theSI7CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LXBpbmN0cmwuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtcGluY3RybC5kdHNpCmluZGV4IGVlNmMxMTkuLjljY2NmMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtcGluY3RybC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYtcGluY3RybC5kdHNpCkBAIC0xMiwzNiArMTIsMzYgQEAKIC8gewogCiAJYWxpYXNlcyB7Ci0JCWdwaW8wCT0gJlBJTzA7Ci0JCWdwaW8xCT0gJlBJTzE7Ci0JCWdwaW8yCT0gJlBJTzI7Ci0JCWdwaW8zCT0gJlBJTzM7Ci0JCWdwaW80CT0gJlBJTzQ7Ci0JCWdwaW81CT0gJlBJTzQwOwotCQlncGlvNgk9ICZQSU81OwotCQlncGlvNwk9ICZQSU82OwotCQlncGlvOAk9ICZQSU83OwotCQlncGlvOQk9ICZQSU84OwotCQlncGlvMTAJPSAmUElPOTsKLQkJZ3BpbzExCT0gJlBJTzEwOwotCQlncGlvMTIJPSAmUElPMTE7Ci0JCWdwaW8xMwk9ICZQSU8xMjsKLQkJZ3BpbzE0CT0gJlBJTzMwOwotCQlncGlvMTUJPSAmUElPMzE7Ci0JCWdwaW8xNgk9ICZQSU8xMzsKLQkJZ3BpbzE3CT0gJlBJTzE0OwotCQlncGlvMTgJPSAmUElPMTU7Ci0JCWdwaW8xOQk9ICZQSU8xNjsKLQkJZ3BpbzIwCT0gJlBJTzE3OwotCQlncGlvMjEJPSAmUElPMTg7Ci0JCWdwaW8yMgk9ICZQSU8xMDA7Ci0JCWdwaW8yMwk9ICZQSU8xMDE7Ci0JCWdwaW8yNAk9ICZQSU8xMDI7Ci0JCWdwaW8yNQk9ICZQSU8xMDM7Ci0JCWdwaW8yNgk9ICZQSU8xMDQ7Ci0JCWdwaW8yNwk9ICZQSU8xMDU7Ci0JCWdwaW8yOAk9ICZQSU8xMDY7Ci0JCWdwaW8yOQk9ICZQSU8xMDc7CisJCWdwaW8wCT0gJnBpbzA7CisJCWdwaW8xCT0gJnBpbzE7CisJCWdwaW8yCT0gJnBpbzI7CisJCWdwaW8zCT0gJnBpbzM7CisJCWdwaW80CT0gJnBpbzQ7CisJCWdwaW81CT0gJnBpbzQwOworCQlncGlvNgk9ICZwaW81OworCQlncGlvNwk9ICZwaW82OworCQlncGlvOAk9ICZwaW83OworCQlncGlvOQk9ICZwaW84OworCQlncGlvMTAJPSAmcGlvOTsKKwkJZ3BpbzExCT0gJnBpbzEwOworCQlncGlvMTIJPSAmcGlvMTE7CisJCWdwaW8xMwk9ICZwaW8xMjsKKwkJZ3BpbzE0CT0gJnBpbzMwOworCQlncGlvMTUJPSAmcGlvMzE7CisJCWdwaW8xNgk9ICZwaW8xMzsKKwkJZ3BpbzE3CT0gJnBpbzE0OworCQlncGlvMTgJPSAmcGlvMTU7CisJCWdwaW8xOQk9ICZwaW8xNjsKKwkJZ3BpbzIwCT0gJnBpbzE3OworCQlncGlvMjEJPSAmcGlvMTg7CisJCWdwaW8yMgk9ICZwaW8xMDA7CisJCWdwaW8yMwk9ICZwaW8xMDE7CisJCWdwaW8yNAk9ICZwaW8xMDI7CisJCWdwaW8yNQk9ICZwaW8xMDM7CisJCWdwaW8yNgk9ICZwaW8xMDQ7CisJCWdwaW8yNwk9ICZwaW8xMDU7CisJCWdwaW8yOAk9ICZwaW8xMDY7CisJCWdwaW8yOQk9ICZwaW8xMDc7CiAJfTsKIAogCXNvYyB7CkBAIC01Niw3ICs1Niw3IEBACiAJCQlpbnRlcnJ1cHQtbmFtZXMJPSAiaXJxbXV4IjsKIAkJCXJhbmdlcwkJPSA8MCAweGZlNjEwMDAwIDB4NjAwMD47CiAKLQkJCVBJTzA6IGdwaW9AZmU2MTAwMDAgeworCQkJcGlvMDogZ3Bpb0BmZTYxMDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzID0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNjQsNyArNjQsNyBAQAogCQkJCXJlZwkJPSA8MCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzAiOwogCQkJfTsKLQkJCVBJTzE6IGdwaW9AZmU2MTEwMDAgeworCQkJcGlvMTogZ3Bpb0BmZTYxMTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNzIsNyArNzIsNyBAQAogCQkJCXJlZwkJPSA8MHgxMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMSI7CiAJCQl9OwotCQkJUElPMjogZ3Bpb0BmZTYxMjAwMCB7CisJCQlwaW8yOiBncGlvQGZlNjEyMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC04MCw3ICs4MCw3IEBACiAJCQkJcmVnCQk9IDwweDIwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8yIjsKIAkJCX07Ci0JCQlQSU8zOiBncGlvQGZlNjEzMDAwIHsKKwkJCXBpbzM6IGdwaW9AZmU2MTMwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTg4LDcgKzg4LDcgQEAKIAkJCQlyZWcJCT0gPDB4MzAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzMiOwogCQkJfTsKLQkJCVBJTzQ6IGdwaW9AZmU2MTQwMDAgeworCQkJcGlvNDogZ3Bpb0BmZTYxNDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtOTYsNyArOTYsNyBAQAogCQkJCXJlZwkJPSA8MHg0MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPNCI7CiAJCQl9OwotCQkJUElPNDA6IGdwaW9AZmU2MTUwMDAgeworCQkJcGlvNDA6IGdwaW9AZmU2MTUwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTEwOSwxNSArMTA5LDE1IEBACiAJCQlyY3sKIAkJCQlwaW5jdHJsX2lyOiBpcjAgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCWlyID0gPCZQSU80IDAgQUxUMiBJTj47CisJCQkJCQlpciA9IDwmcGlvNCAwIEFMVDIgSU4+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwogCQkJc2JjX3NlcmlhbDEgewogCQkJCXBpbmN0cmxfc2JjX3NlcmlhbDE6IHNiY19zZXJpYWwxIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQl0eAk9IDwmUElPMiA2IEFMVDMgT1VUPjsKLQkJCQkJCXJ4CT0gPCZQSU8yIDcgQUxUMyBJTj47CisJCQkJCQl0eAk9IDwmcGlvMiA2IEFMVDMgT1VUPjsKKwkJCQkJCXJ4CT0gPCZwaW8yIDcgQUxUMyBJTj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0xMjUsMTUgKzEyNSwxNSBAQAogCQkJa2V5c2NhbiB7CiAJCQkJcGluY3RybF9rZXlzY2FuOiBrZXlzY2FuIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlrZXlpbjAgPSA8JlBJTzAgMiBBTFQyIElOPjsKLQkJCQkJCWtleWluMSA9IDwmUElPMCAzIEFMVDIgSU4+OwotCQkJCQkJa2V5aW4yID0gPCZQSU8wIDQgQUxUMiBJTj47Ci0JCQkJCQlrZXlpbjMgPSA8JlBJTzIgNiBBTFQyIElOPjsKKwkJCQkJCWtleWluMCA9IDwmcGlvMCAyIEFMVDIgSU4+OworCQkJCQkJa2V5aW4xID0gPCZwaW8wIDMgQUxUMiBJTj47CisJCQkJCQlrZXlpbjIgPSA8JnBpbzAgNCBBTFQyIElOPjsKKwkJCQkJCWtleWluMyA9IDwmcGlvMiA2IEFMVDIgSU4+OwogCi0JCQkJCQlrZXlvdXQwID0gPCZQSU8xIDYgQUxUMiBPVVQ+OwotCQkJCQkJa2V5b3V0MSA9IDwmUElPMSA3IEFMVDIgT1VUPjsKLQkJCQkJCWtleW91dDIgPSA8JlBJTzAgNiBBTFQyIE9VVD47Ci0JCQkJCQlrZXlvdXQzID0gPCZQSU8yIDcgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MCA9IDwmcGlvMSA2IEFMVDIgT1VUPjsKKwkJCQkJCWtleW91dDEgPSA8JnBpbzEgNyBBTFQyIE9VVD47CisJCQkJCQlrZXlvdXQyID0gPCZwaW8wIDYgQUxUMiBPVVQ+OworCQkJCQkJa2V5b3V0MyA9IDwmcGlvMiA3IEFMVDIgT1VUPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTE0MSw4ICsxNDEsMTcgQEAKIAkJCXNiY19pMmMwIHsKIAkJCQlwaW5jdHJsX3NiY19pMmMwX2RlZmF1bHQ6IHNiY19pMmMwLWRlZmF1bHQgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXNkYSA9IDwmUElPNCA2IEFMVDEgQklESVI+OwotCQkJCQkJc2NsID0gPCZQSU80IDUgQUxUMSBCSURJUj47CisJCQkJCQlzZGEgPSA8JnBpbzQgNiBBTFQxIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvNCA1IEFMVDEgQklESVI+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQl1c2IgeworCQkJCXBpbmN0cmxfdXNiMzogdXNiMyB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJb2MtZGV0ZWN0ID0gPCZwaW80MCAwIEFMVDEgSU4+OworCQkJCQkJcHdyLWVuYWJsZSA9IDwmcGlvNDAgMSBBTFQxIE9VVD47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0xNTAsOCArMTU5LDggQEAKIAkJCXNiY19pMmMxIHsKIAkJCQlwaW5jdHJsX3NiY19pMmMxX2RlZmF1bHQ6IHNiY19pMmMxLWRlZmF1bHQgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXNkYSA9IDwmUElPMyAyIEFMVDIgQklESVI+OwotCQkJCQkJc2NsID0gPCZQSU8zIDEgQUxUMiBCSURJUj47CisJCQkJCQlzZGEgPSA8JnBpbzMgMiBBTFQyIEJJRElSPjsKKwkJCQkJCXNjbCA9IDwmcGlvMyAxIEFMVDIgQklESVI+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMTU5LDUxICsxNjgsNTEgQEAKIAkJCWdtYWMxIHsKIAkJCQlwaW5jdHJsX21paTE6IG1paTEgewogCQkJCQlzdCxwaW5zIHsKLQkJCQkJCXR4ZDAgPSA8JlBJTzAgMCBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXR4ZDEgPSA8JlBJTzAgMSBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXR4ZDIgPSA8JlBJTzAgMiBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXR4ZDMgPSA8JlBJTzAgMyBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXR4ZXIgPSA8JlBJTzAgNCBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXR4ZW4gPSA8JlBJTzAgNSBBTFQxIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXR4Y2xrID0gPCZQSU8wIDYgQUxUMSBJTiBOSUNMSyAwIENMS19BPjsKLQkJCQkJCWNvbCA9ICAgPCZQSU8wIDcgQUxUMSBJTiBCWVBBU1MgMTAwMD47CisJCQkJCQl0eGQwID0gPCZwaW8wIDAgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGQxID0gPCZwaW8wIDEgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGQyID0gPCZwaW8wIDIgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGQzID0gPCZwaW8wIDMgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGVyID0gPCZwaW8wIDQgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGVuID0gPCZwaW8wIDUgQUxUMSBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGNsayA9IDwmcGlvMCA2IEFMVDEgSU4gTklDTEsgMCBDTEtfQT47CisJCQkJCQljb2wgPSAgIDwmcGlvMCA3IEFMVDEgSU4gQllQQVNTIDEwMDA+OwogCi0JCQkJCQltZGlvID0gIDwmUElPMSAwIEFMVDEgT1VUIEJZUEFTUyAxNTAwPjsKLQkJCQkJCW1kYyA9ICAgPCZQSU8xIDEgQUxUMSBPVVQgTklDTEsgMCBDTEtfQT47Ci0JCQkJCQljcnMgPSAgIDwmUElPMSAyIEFMVDEgSU4gQllQQVNTIDEwMDA+OwotCQkJCQkJbWRpbnQgPSA8JlBJTzEgMyBBTFQxIElOIEJZUEFTUyAwPjsKLQkJCQkJCXJ4ZDAgPSAgPCZQSU8xIDQgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4ZDEgPSAgPCZQSU8xIDUgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4ZDIgPSAgPCZQSU8xIDYgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4ZDMgPSAgPCZQSU8xIDcgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCW1kaW8gPSAgPCZwaW8xIDAgQUxUMSBPVVQgQllQQVNTIDE1MDA+OworCQkJCQkJbWRjID0gICA8JnBpbzEgMSBBTFQxIE9VVCBOSUNMSyAwIENMS19BPjsKKwkJCQkJCWNycyA9ICAgPCZwaW8xIDIgQUxUMSBJTiBCWVBBU1MgMTAwMD47CisJCQkJCQltZGludCA9IDwmcGlvMSAzIEFMVDEgSU4gQllQQVNTIDA+OworCQkJCQkJcnhkMCA9ICA8JnBpbzEgNCBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhkMSA9ICA8JnBpbzEgNSBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhkMiA9ICA8JnBpbzEgNiBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhkMyA9ICA8JnBpbzEgNyBBTFQxIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwogCi0JCQkJCQlyeGR2ID0gIDwmUElPMiAwIEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeF9lciA9IDwmUElPMiAxIEFMVDEgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeGNsayA9IDwmUElPMiAyIEFMVDEgSU4gTklDTEsgMCBDTEtfQT47Ci0JCQkJCQlwaHljbGsgPSA8JlBJTzIgMyBBTFQxIE9VVCBOSUNMSyAwIENMS19BPjsKKwkJCQkJCXJ4ZHYgPSAgPCZwaW8yIDAgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4X2VyID0gPCZwaW8yIDEgQUxUMSBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4Y2xrID0gPCZwaW8yIDIgQUxUMSBJTiBOSUNMSyAwIENMS19BPjsKKwkJCQkJCXBoeWNsayA9IDwmcGlvMiAzIEFMVDEgT1VUIE5JQ0xLIDAgQ0xLX0E+OwogCQkJCQl9OwogCQkJCX07CiAJCQkJcGluY3RybF9yZ21paTE6IHJnbWlpMS0wIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQl0eGQwID0gIDwmUElPMCAwIEFMVDEgT1VUIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQl0eGQxID0gIDwmUElPMCAxIEFMVDEgT1VUIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQl0eGQyID0gIDwmUElPMCAyIEFMVDEgT1VUIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQl0eGQzID0gIDwmUElPMCAzIEFMVDEgT1VUIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQl0eGVuID0gIDwmUElPMCA1IEFMVDEgT1VUIERFX0lPIDAgICBDTEtfQT47Ci0JCQkJCQl0eGNsayA9IDwmUElPMCA2IEFMVDEgSU4gIE5JQ0xLIDAgICBDTEtfQT47CisJCQkJCQl0eGQwID0gIDwmcGlvMCAwIEFMVDEgT1VUIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQl0eGQxID0gIDwmcGlvMCAxIEFMVDEgT1VUIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQl0eGQyID0gIDwmcGlvMCAyIEFMVDEgT1VUIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQl0eGQzID0gIDwmcGlvMCAzIEFMVDEgT1VUIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQl0eGVuID0gIDwmcGlvMCA1IEFMVDEgT1VUIERFX0lPIDAgICBDTEtfQT47CisJCQkJCQl0eGNsayA9IDwmcGlvMCA2IEFMVDEgSU4gIE5JQ0xLIDAgICBDTEtfQT47CiAKLQkJCQkJCW1kaW8gPSA8JlBJTzEgMCBBTFQxIE9VVCBCWVBBU1MgMD47Ci0JCQkJCQltZGMgID0gPCZQSU8xIDEgQUxUMSBPVVQgTklDTEsgIDAgQ0xLX0E+OwotCQkJCQkJcnhkMCA9IDwmUElPMSA0IEFMVDEgSU4gREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCXJ4ZDEgPSA8JlBJTzEgNSBBTFQxIElOIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQlyeGQyID0gPCZQSU8xIDYgQUxUMSBJTiBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJcnhkMyA9IDwmUElPMSA3IEFMVDEgSU4gREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCW1kaW8gPSA8JnBpbzEgMCBBTFQxIE9VVCBCWVBBU1MgMD47CisJCQkJCQltZGMgID0gPCZwaW8xIDEgQUxUMSBPVVQgTklDTEsgIDAgQ0xLX0E+OworCQkJCQkJcnhkMCA9IDwmcGlvMSA0IEFMVDEgSU4gREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCXJ4ZDEgPSA8JnBpbzEgNSBBTFQxIElOIERFX0lPIDUwMCBDTEtfQT47CisJCQkJCQlyeGQyID0gPCZwaW8xIDYgQUxUMSBJTiBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJcnhkMyA9IDwmcGlvMSA3IEFMVDEgSU4gREVfSU8gNTAwIENMS19BPjsKIAotCQkJCQkJcnhkdiAgID0gPCZQSU8yIDAgQUxUMSBJTiAgREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCXJ4Y2xrICA9IDwmUElPMiAyIEFMVDEgSU4gIE5JQ0xLIDAgICBDTEtfQT47Ci0JCQkJCQlwaHljbGsgPSA8JlBJTzIgMyBBTFQ0IE9VVCBOSUNMSyAwICAgQ0xLX0I+OworCQkJCQkJcnhkdiAgID0gPCZwaW8yIDAgQUxUMSBJTiAgREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCXJ4Y2xrICA9IDwmcGlvMiAyIEFMVDEgSU4gIE5JQ0xLIDAgICBDTEtfQT47CisJCQkJCQlwaHljbGsgPSA8JnBpbzIgMyBBTFQ0IE9VVCBOSUNMSyAwICAgQ0xLX0I+OwogCi0JCQkJCQljbGsxMjU9IDwmUElPMyA3IEFMVDQgSU4gTklDTEsgMCBDTEtfQT47CisJCQkJCQljbGsxMjU9IDwmcGlvMyA3IEFMVDQgSU4gTklDTEsgMCBDTEtfQT47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0yMjAsNyArMjI5LDcgQEAKIAkJCWludGVycnVwdC1uYW1lcwk9ICJpcnFtdXgiOwogCQkJcmFuZ2VzCQk9IDwwIDB4ZmVlMDAwMDAgMHgxMDAwMD47CiAKLQkJCVBJTzU6IGdwaW9AZmVlMDAwMDAgeworCQkJcGlvNTogZ3Bpb0BmZWUwMDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjI4LDcgKzIzNyw3IEBACiAJCQkJcmVnCQk9IDwwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPNSI7CiAJCQl9OwotCQkJUElPNjogZ3Bpb0BmZWUwMTAwMCB7CisJCQlwaW82OiBncGlvQGZlZTAxMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yMzYsNyArMjQ1LDcgQEAKIAkJCQlyZWcJCT0gPDB4MTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzYiOwogCQkJfTsKLQkJCVBJTzc6IGdwaW9AZmVlMDIwMDAgeworCQkJcGlvNzogZ3Bpb0BmZWUwMjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjQ0LDcgKzI1Myw3IEBACiAJCQkJcmVnCQk9IDwweDIwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU83IjsKIAkJCX07Ci0JCQlQSU84OiBncGlvQGZlZTAzMDAwIHsKKwkJCXBpbzg6IGdwaW9AZmVlMDMwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI1Miw3ICsyNjEsNyBAQAogCQkJCXJlZwkJPSA8MHgzMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPOCI7CiAJCQl9OwotCQkJUElPOTogZ3Bpb0BmZWUwNDAwMCB7CisJCQlwaW85OiBncGlvQGZlZTA0MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yNjAsNyArMjY5LDcgQEAKIAkJCQlyZWcJCT0gPDB4NDAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzkiOwogCQkJfTsKLQkJCVBJTzEwOiBncGlvQGZlZTA1MDAwIHsKKwkJCXBpbzEwOiBncGlvQGZlZTA1MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yNjgsNyArMjc3LDcgQEAKIAkJCQlyZWcJCT0gPDB4NTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwIjsKIAkJCX07Ci0JCQlQSU8xMTogZ3Bpb0BmZWUwNjAwMCB7CisJCQlwaW8xMTogZ3Bpb0BmZWUwNjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMjc2LDcgKzI4NSw3IEBACiAJCQkJcmVnCQk9IDwweDYwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMSI7CiAJCQl9OwotCQkJUElPMTI6IGdwaW9AZmVlMDcwMDAgeworCQkJcGlvMTI6IGdwaW9AZmVlMDcwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTI4NCw3ICsyOTMsNyBAQAogCQkJCXJlZwkJPSA8MHg3MDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTIiOwogCQkJfTsKLQkJCVBJTzMwOiBncGlvQGZlZTA4MDAwIHsKKwkJCXBpbzMwOiBncGlvQGZlZTA4MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0yOTIsNyArMzAxLDcgQEAKIAkJCQlyZWcJCT0gPDB4ODAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzMwIjsKIAkJCX07Ci0JCQlQSU8zMTogZ3Bpb0BmZWUwOTAwMCB7CisJCQlwaW8zMTogZ3Bpb0BmZWUwOTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzA0LDcgKzMxMyw3IEBACiAJCQlzZXJpYWwyLW9lIHsKIAkJCQlwaW5jdHJsX3NlcmlhbDJfb2U6IHNlcmlhbDItMSB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJb3V0cHV0LWVuYWJsZQk9IDwmUElPMTEgMyBBTFQyIE9VVD47CisJCQkJCQlvdXRwdXQtZW5hYmxlCT0gPCZwaW8xMSAzIEFMVDIgT1VUPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTMxMiwxNyArMzIxLDI3IEBACiAJCQlpMmMwIHsKIAkJCQlwaW5jdHJsX2kyYzBfZGVmYXVsdDogaTJjMC1kZWZhdWx0IHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlzZGEgPSA8JlBJTzkgMyBBTFQxIEJJRElSPjsKLQkJCQkJCXNjbCA9IDwmUElPOSAyIEFMVDEgQklESVI+OworCQkJCQkJc2RhID0gPCZwaW85IDMgQUxUMSBCSURJUj47CisJCQkJCQlzY2wgPSA8JnBpbzkgMiBBTFQxIEJJRElSPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKIAorCQkJdXNiIHsKKwkJCQlwaW5jdHJsX3VzYjA6IHVzYjAgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCW9jLWRldGVjdCA9IDwmcGlvOSA0IEFMVDEgSU4+OworCQkJCQkJcHdyLWVuYWJsZSA9IDwmcGlvOSA1IEFMVDEgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCiAJCQlpMmMxIHsKIAkJCQlwaW5jdHJsX2kyYzFfZGVmYXVsdDogaTJjMS1kZWZhdWx0IHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlzZGEgPSA8JlBJTzEyIDEgQUxUMSBCSURJUj47Ci0JCQkJCQlzY2wgPSA8JlBJTzEyIDAgQUxUMSBCSURJUj47CisJCQkJCQlzZGEgPSA8JnBpbzEyIDEgQUxUMSBCSURJUj47CisJCQkJCQlzY2wgPSA8JnBpbzEyIDAgQUxUMSBCSURJUj47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CkBAIC0zMzAsMTIgKzM0OSwxMiBAQAogCQkJZnNtIHsKIAkJCQlwaW5jdHJsX2ZzbTogZnNtIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQlzcGktZnNtLWNsayAgPSA8JlBJTzEyIDIgQUxUMSBPVVQ+OwotCQkJCQkJc3BpLWZzbS1jcyAgID0gPCZQSU8xMiAzIEFMVDEgT1VUPjsKLQkJCQkJCXNwaS1mc20tbW9zaSA9IDwmUElPMTIgNCBBTFQxIE9VVD47Ci0JCQkJCQlzcGktZnNtLW1pc28gPSA8JlBJTzEyIDUgQUxUMSBJTj47Ci0JCQkJCQlzcGktZnNtLWhvbCAgPSA8JlBJTzEyIDYgQUxUMSBPVVQ+OwotCQkJCQkJc3BpLWZzbS13cCAgID0gPCZQSU8xMiA3IEFMVDEgT1VUPjsKKwkJCQkJCXNwaS1mc20tY2xrICA9IDwmcGlvMTIgMiBBTFQxIE9VVD47CisJCQkJCQlzcGktZnNtLWNzICAgPSA8JnBpbzEyIDMgQUxUMSBPVVQ+OworCQkJCQkJc3BpLWZzbS1tb3NpID0gPCZwaW8xMiA0IEFMVDEgT1VUPjsKKwkJCQkJCXNwaS1mc20tbWlzbyA9IDwmcGlvMTIgNSBBTFQxIElOPjsKKwkJCQkJCXNwaS1mc20taG9sICA9IDwmcGlvMTIgNiBBTFQxIE9VVD47CisJCQkJCQlzcGktZnNtLXdwICAgPSA8JnBpbzEyIDcgQUxUMSBPVVQ+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtMzUyLDcgKzM3MSw3IEBACiAJCQlpbnRlcnJ1cHQtbmFtZXMJPSAiaXJxbXV4IjsKIAkJCXJhbmdlcyAJCT0gPDAgMHhmZTgyMDAwMCAweDYwMDA+OwogCi0JCQlQSU8xMzogZ3Bpb0BmZTgyMDAwMCB7CisJCQlwaW8xMzogZ3Bpb0BmZTgyMDAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzYwLDcgKzM3OSw3IEBACiAJCQkJcmVnCQk9IDwwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTMiOwogCQkJfTsKLQkJCVBJTzE0OiBncGlvQGZlODIxMDAwIHsKKwkJCXBpbzE0OiBncGlvQGZlODIxMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zNjgsNyArMzg3LDcgQEAKIAkJCQlyZWcJCT0gPDB4MTAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzE0IjsKIAkJCX07Ci0JCQlQSU8xNTogZ3Bpb0BmZTgyMjAwMCB7CisJCQlwaW8xNTogZ3Bpb0BmZTgyMjAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtMzc2LDcgKzM5NSw3IEBACiAJCQkJcmVnCQk9IDwweDIwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xNSI7CiAJCQl9OwotCQkJUElPMTY6IGdwaW9AZmU4MjMwMDAgeworCQkJcGlvMTY6IGdwaW9AZmU4MjMwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTM4NCw3ICs0MDMsNyBAQAogCQkJCXJlZwkJPSA8MHgzMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTYiOwogCQkJfTsKLQkJCVBJTzE3OiBncGlvQGZlODI0MDAwIHsKKwkJCXBpbzE3OiBncGlvQGZlODI0MDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC0zOTIsNyArNDExLDcgQEAKIAkJCQlyZWcJCT0gPDB4NDAwMCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzE3IjsKIAkJCX07Ci0JCQlQSU8xODogZ3Bpb0BmZTgyNTAwMCB7CisJCQlwaW8xODogZ3Bpb0BmZTgyNTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNDA1LDggKzQyNCw4IEBACiAJCQlzZXJpYWwyIHsKIAkJCQlwaW5jdHJsX3NlcmlhbDI6IHNlcmlhbDItMCB7CiAJCQkJCXN0LHBpbnMgewotCQkJCQkJdHgJPSA8JlBJTzE3IDQgQUxUMiBPVVQ+OwotCQkJCQkJcngJPSA8JlBJTzE3IDUgQUxUMiBJTj47CisJCQkJCQl0eAk9IDwmcGlvMTcgNCBBTFQyIE9VVD47CisJCQkJCQlyeAk9IDwmcGlvMTcgNSBBTFQyIElOPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTQxNCwyOCArNDMzLDI4IEBACiAJCQlnbWFjMCB7CiAJCQkJcGluY3RybF9taWkwOiBtaWkwIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQltZGludCA9IDwmUElPMTMgNiBBTFQyIElOICBCWVBBU1MgICAgICAwPjsKLQkJCQkJCXR4ZW4gPSAgPCZQSU8xMyA3IEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJdHhkMCA9ICA8JlBJTzE0IDAgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQl0eGQxID0gIDwmUElPMTQgMSBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXR4ZDIgPSAgPCZQSU8xNCAyIEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0I+OwotCQkJCQkJdHhkMyA9ICA8JlBJTzE0IDMgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQj47CisJCQkJCQltZGludCA9IDwmcGlvMTMgNiBBTFQyIElOICBCWVBBU1MgICAgICAwPjsKKwkJCQkJCXR4ZW4gPSAgPCZwaW8xMyA3IEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJdHhkMCA9ICA8JnBpbzE0IDAgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQl0eGQxID0gIDwmcGlvMTQgMSBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXR4ZDIgPSAgPCZwaW8xNCAyIEFMVDIgT1VUIFNFX05JQ0xLX0lPIDAgQ0xLX0I+OworCQkJCQkJdHhkMyA9ICA8JnBpbzE0IDMgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQj47CiAKLQkJCQkJCXR4Y2xrID0gPCZQSU8xNSAwIEFMVDIgSU4gIE5JQ0xLICAgICAgIDAgQ0xLX0E+OwotCQkJCQkJdHhlciA9ICA8JlBJTzE1IDEgQUxUMiBPVVQgU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQljcnMgPSA8JlBJTzE1IDIgQUxUMiBJTiAgQllQQVNTIDEwMDA+OwotCQkJCQkJY29sID0gPCZQSU8xNSAzIEFMVDIgSU4gIEJZUEFTUyAxMDAwPjsKLQkJCQkJCW1kaW89IDwmUElPMTUgNCBBTFQyIE9VVCBCWVBBU1MgMTUwMD47Ci0JCQkJCQltZGMgPSA8JlBJTzE1IDUgQUxUMiBPVVQgTklDTEsgIDAgICAgQ0xLX0I+OworCQkJCQkJdHhjbGsgPSA8JnBpbzE1IDAgQUxUMiBJTiAgTklDTEsgICAgICAgMCBDTEtfQT47CisJCQkJCQl0eGVyID0gIDwmcGlvMTUgMSBBTFQyIE9VVCBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCWNycyA9IDwmcGlvMTUgMiBBTFQyIElOICBCWVBBU1MgMTAwMD47CisJCQkJCQljb2wgPSA8JnBpbzE1IDMgQUxUMiBJTiAgQllQQVNTIDEwMDA+OworCQkJCQkJbWRpbz0gPCZwaW8xNSA0IEFMVDIgT1VUIEJZUEFTUyAxNTAwPjsKKwkJCQkJCW1kYyA9IDwmcGlvMTUgNSBBTFQyIE9VVCBOSUNMSyAgMCAgICBDTEtfQj47CiAKLQkJCQkJCXJ4ZDAgPSAgPCZQSU8xNiAwIEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeGQxID0gIDwmUElPMTYgMSBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhkMiA9ICA8JlBJTzE2IDIgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4ZDMgPSAgPCZQSU8xNiAzIEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47Ci0JCQkJCQlyeGR2ID0gIDwmUElPMTUgNiBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OwotCQkJCQkJcnhfZXIgPSA8JlBJTzE1IDcgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKLQkJCQkJCXJ4Y2xrID0gPCZQSU8xNyAwIEFMVDIgSU4gTklDTEsgMCBDTEtfQT47Ci0JCQkJCQlwaHljbGsgPSA8JlBJTzEzIDUgQUxUMiBPVVQgTklDTEsgMCBDTEtfQj47CisJCQkJCQlyeGQwID0gIDwmcGlvMTYgMCBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhkMSA9ICA8JnBpbzE2IDEgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4ZDIgPSAgPCZwaW8xNiAyIEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeGQzID0gIDwmcGlvMTYgMyBBTFQyIElOIFNFX05JQ0xLX0lPIDAgQ0xLX0E+OworCQkJCQkJcnhkdiA9ICA8JnBpbzE1IDYgQUxUMiBJTiBTRV9OSUNMS19JTyAwIENMS19BPjsKKwkJCQkJCXJ4X2VyID0gPCZwaW8xNSA3IEFMVDIgSU4gU0VfTklDTEtfSU8gMCBDTEtfQT47CisJCQkJCQlyeGNsayA9IDwmcGlvMTcgMCBBTFQyIElOIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQkJcGh5Y2xrID0gPCZwaW8xMyA1IEFMVDIgT1VUIE5JQ0xLIDAgQ0xLX0I+OwogCQkJCQl9OwogCQkJCX07CiAKQEAgLTQ0NSwyNSArNDY0LDc5IEBACiAJCQkJfTsKIAkJCQlwaW5jdHJsX3JnbWlpMDogcmdtaWkwIHsKIAkJCQkJc3QscGlucyB7Ci0JCQkJCQkgcGh5Y2xrID0gPCZQSU8xMyAgNSBBTFQ0IE9VVCBOSUNMSyAwIENMS19CPjsKLQkJCQkJCSB0eGVuID0gPCZQSU8xMyA3IEFMVDIgT1VUIERFX0lPIDAgQ0xLX0E+OwotCQkJCQkJIHR4ZDAgID0gPCZQSU8xNCAwIEFMVDIgT1VUIERFX0lPIDUwMCBDTEtfQT47Ci0JCQkJCQkgdHhkMSAgPSA8JlBJTzE0IDEgQUxUMiBPVVQgREVfSU8gNTAwIENMS19BPjsKLQkJCQkJCSB0eGQyICA9IDwmUElPMTQgMiBBTFQyIE9VVCBERV9JTyA1MDAgQ0xLX0I+OwotCQkJCQkJIHR4ZDMgID0gPCZQSU8xNCAzIEFMVDIgT1VUIERFX0lPIDUwMCBDTEtfQj47Ci0JCQkJCQkgdHhjbGsgPSA8JlBJTzE1IDAgQUxUMiBJTiBOSUNMSyAwIENMS19BPjsKKwkJCQkJCSBwaHljbGsgPSA8JnBpbzEzICA1IEFMVDQgT1VUIE5JQ0xLIDAgQ0xLX0I+OworCQkJCQkJIHR4ZW4gPSA8JnBpbzEzIDcgQUxUMiBPVVQgREVfSU8gMCBDTEtfQT47CisJCQkJCQkgdHhkMCAgPSA8JnBpbzE0IDAgQUxUMiBPVVQgREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCSB0eGQxICA9IDwmcGlvMTQgMSBBTFQyIE9VVCBERV9JTyA1MDAgQ0xLX0E+OworCQkJCQkJIHR4ZDIgID0gPCZwaW8xNCAyIEFMVDIgT1VUIERFX0lPIDUwMCBDTEtfQj47CisJCQkJCQkgdHhkMyAgPSA8JnBpbzE0IDMgQUxUMiBPVVQgREVfSU8gNTAwIENMS19CPjsKKwkJCQkJCSB0eGNsayA9IDwmcGlvMTUgMCBBTFQyIElOIE5JQ0xLIDAgQ0xLX0E+OwogCi0JCQkJCQkgbWRpbyA9IDwmUElPMTUgNCBBTFQyIE9VVCBCWVBBU1MgMD47Ci0JCQkJCQkgbWRjID0gPCZQSU8xNSA1IEFMVDIgT1VUIE5JQ0xLIDAgQ0xLX0I+OworCQkJCQkJIG1kaW8gPSA8JnBpbzE1IDQgQUxUMiBPVVQgQllQQVNTIDA+OworCQkJCQkJIG1kYyA9IDwmcGlvMTUgNSBBTFQyIE9VVCBOSUNMSyAwIENMS19CPjsKIAotCQkJCQkJIHJ4ZHYgPSA8JlBJTzE1IDYgQUxUMiBJTiBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJIHJ4ZDAgPTwmUElPMTYgMCBBTFQyIElOIERFX0lPCTUwMCBDTEtfQT47Ci0JCQkJCQkgcnhkMSA9PCZQSU8xNiAxIEFMVDIgSU4gREVfSU8JNTAwIENMS19BPjsKLQkJCQkJCSByeGQyID08JlBJTzE2IDIgQUxUMiBJTiBERV9JTwk1MDAgQ0xLX0E+OwotCQkJCQkJIHJ4ZDMgID08JlBJTzE2IDMgQUxUMiBJTiBERV9JTyA1MDAgQ0xLX0E+OwotCQkJCQkJIHJ4Y2xrID08JlBJTzE3IDAgQUxUMiBJTiBOSUNMSyAwIENMS19BPjsKKwkJCQkJCSByeGR2ID0gPCZwaW8xNSA2IEFMVDIgSU4gREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCSByeGQwID08JnBpbzE2IDAgQUxUMiBJTiBERV9JTwk1MDAgQ0xLX0E+OworCQkJCQkJIHJ4ZDEgPTwmcGlvMTYgMSBBTFQyIElOIERFX0lPCTUwMCBDTEtfQT47CisJCQkJCQkgcnhkMiA9PCZwaW8xNiAyIEFMVDIgSU4gREVfSU8JNTAwIENMS19BPjsKKwkJCQkJCSByeGQzICA9PCZwaW8xNiAzIEFMVDIgSU4gREVfSU8gNTAwIENMS19BPjsKKwkJCQkJCSByeGNsayA9PCZwaW8xNyAwIEFMVDIgSU4gTklDTEsgMCBDTEtfQT47CiAKLQkJCQkJCSBjbGsxMjU9PCZQSU8xNyA2IEFMVDEgSU4gTklDTEsgMCBDTEtfQT47CisJCQkJCQkgY2xrMTI1PTwmcGlvMTcgNiBBTFQxIElOIE5JQ0xLIDAgQ0xLX0E+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQltbWMwIHsKKwkJCQlwaW5jdHJsX21tYzA6IG1tYzAgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCW1tY2NsayAgPSA8JnBpbzEzIDQgQUxUNCBCSURJUl9QVSBOSUNMSyAwIENMS19CPjsKKwkJCQkJCWRhdGEwICAgPSA8JnBpbzE0IDQgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhMSAgID0gPCZwaW8xNCA1IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTIgICA9IDwmcGlvMTQgNiBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGEzICAgPSA8JnBpbzE0IDcgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQljbWQgICAgID0gPCZwaW8xNSAxIEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJd3AgICAgICA9IDwmcGlvMTUgMyBBTFQ0IElOPjsKKwkJCQkJCWRhdGE0ICAgPSA8JnBpbzE2IDQgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhNSAgID0gPCZwaW8xNiA1IEFMVDQgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTYgICA9IDwmcGlvMTYgNiBBTFQ0IEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGE3ICAgPSA8JnBpbzE2IDcgQUxUNCBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlwd3IgICAgID0gPCZwaW8xNyAxIEFMVDQgT1VUPjsKKwkJCQkJCWNkICAgICAgPSA8JnBpbzE3IDIgQUxUNCBJTj47CisJCQkJCQlsZWQgICAgID0gPCZwaW8xNyAzIEFMVDQgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJCW1tYzEgeworCQkJCXBpbmN0cmxfbW1jMTogbW1jMSB7CisJCQkJCXN0LHBpbnMgeworCQkJCQkJbW1jY2xrICA9IDwmcGlvMTUgMCBBTFQzIEJJRElSX1BVIE5JQ0xLIDAgQ0xLX0I+OworCQkJCQkJZGF0YTAgICA9IDwmcGlvMTMgNyBBTFQzIEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGExICAgPSA8JnBpbzE0IDEgQUxUMyBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhMiAgID0gPCZwaW8xNCAyIEFMVDMgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTMgICA9IDwmcGlvMTQgMyBBTFQzIEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWNtZCAgICAgPSA8JnBpbzE1IDQgQUxUMyBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhNCAgID0gPCZwaW8xNSA2IEFMVDMgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJZGF0YTUgICA9IDwmcGlvMTUgNyBBTFQzIEJJRElSX1BVIEJZUEFTUyAwPjsKKwkJCQkJCWRhdGE2ICAgPSA8JnBpbzE2IDAgQUxUMyBCSURJUl9QVSBCWVBBU1MgMD47CisJCQkJCQlkYXRhNyAgID0gPCZwaW8xNiAxIEFMVDMgQklESVJfUFUgQllQQVNTIDA+OworCQkJCQkJcHdyICAgICA9IDwmcGlvMTYgMiBBTFQzIE9VVD47CisJCQkJCQlucmVzZXQgID0gPCZwaW8xMyA2IEFMVDMgT1VUPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJdXNiIHsKKwkJCQlwaW5jdHJsX3VzYjE6IHVzYjEgeworCQkJCQlzdCxwaW5zIHsKKwkJCQkJCW9jLWRldGVjdCA9IDwmcGlvMTggMCBBTFQxIElOPjsKKwkJCQkJCXB3ci1lbmFibGUgPSA8JnBpbzE4IDEgQUxUMSBPVVQ+OworCQkJCQl9OworCQkJCX07CisJCQkJcGluY3RybF91c2IyOiB1c2IyIHsKKwkJCQkJc3QscGlucyB7CisJCQkJCQlvYy1kZXRlY3QgPSA8JnBpbzE4IDIgQUxUMSBJTj47CisJCQkJCQlwd3ItZW5hYmxlID0gPCZwaW8xOCAzIEFMVDEgT1VUPjsKIAkJCQkJfTsKIAkJCQl9OwogCQkJfTsKQEAgLTQ4MCw3ICs1NTMsNyBAQAogCQkJaW50ZXJydXB0LW5hbWVzCT0gImlycW11eCI7CiAJCQlyYW5nZXMJCT0gPDAgMHhmZDZiMDAwMCAweDMwMDA+OwogCi0JCQlQSU8xMDA6IGdwaW9AZmQ2YjAwMDAgeworCQkJcGlvMTAwOiBncGlvQGZkNmIwMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC00ODgsNyArNTYxLDcgQEAKIAkJCQlyZWcJCT0gPDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDAiOwogCQkJfTsKLQkJCVBJTzEwMTogZ3Bpb0BmZDZiMTAwMCB7CisJCQlwaW8xMDE6IGdwaW9AZmQ2YjEwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTQ5Niw3ICs1NjksNyBAQAogCQkJCXJlZwkJPSA8MHgxMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTAxIjsKIAkJCX07Ci0JCQlQSU8xMDI6IGdwaW9AZmQ2YjIwMDAgeworCQkJcGlvMTAyOiBncGlvQGZkNmIyMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC01MTcsNyArNTkwLDcgQEAKIAkJCWludGVycnVwdC1uYW1lcwk9ICJpcnFtdXgiOwogCQkJcmFuZ2VzCQkJPSA8MCAweGZkMzMwMDAwIDB4NTAwMD47CiAKLQkJCVBJTzEwMzogZ3Bpb0BmZDMzMDAwMCB7CisJCQlwaW8xMDM6IGdwaW9AZmQzMzAwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTUyNSw3ICs1OTgsNyBAQAogCQkJCXJlZwkJPSA8MCAweDEwMD47CiAJCQkJc3QsYmFuay1uYW1lCT0gIlBJTzEwMyI7CiAJCQl9OwotCQkJUElPMTA0OiBncGlvQGZkMzMxMDAwIHsKKwkJCXBpbzEwNDogZ3Bpb0BmZDMzMTAwMCB7CiAJCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJCSNncGlvLWNlbGxzCT0gPDE+OwogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwpAQCAtNTMzLDcgKzYwNiw3IEBACiAJCQkJcmVnCQk9IDwweDEwMDAgMHgxMDA+OwogCQkJCXN0LGJhbmstbmFtZQk9ICJQSU8xMDQiOwogCQkJfTsKLQkJCVBJTzEwNTogZ3Bpb0BmZDMzMjAwMCB7CisJCQlwaW8xMDU6IGdwaW9AZmQzMzIwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKQEAgLTU0MSw3ICs2MTQsNyBAQAogCQkJCXJlZwkJPSA8MHgyMDAwIDB4MTAwPjsKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTA1IjsKIAkJCX07Ci0JCQlQSU8xMDY6IGdwaW9AZmQzMzMwMDAgeworCQkJcGlvMTA2OiBncGlvQGZkMzMzMDAwIHsKIAkJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkJI2dwaW8tY2VsbHMJPSA8MT47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CkBAIC01NTAsNyArNjIzLDcgQEAKIAkJCQlzdCxiYW5rLW5hbWUJPSAiUElPMTA2IjsKIAkJCX07CiAKLQkJCVBJTzEwNzogZ3Bpb0BmZDMzNDAwMCB7CisJCQlwaW8xMDc6IGdwaW9AZmQzMzQwMDAgewogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCQkjZ3Bpby1jZWxscwk9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYuZHRzaQppbmRleCA4NDc1OGQ3Li5mYWQ5MDczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi5kdHNpCkBAIC05LDYgKzksOCBAQAogI2luY2x1ZGUgInN0aWg0MXguZHRzaSIKICNpbmNsdWRlICJzdGloNDE2LWNsb2NrLmR0c2kiCiAjaW5jbHVkZSAic3RpaDQxNi1waW5jdHJsLmR0c2kiCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waHkvcGh5LW1pcGh5MzY1eC5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZXNldC1jb250cm9sbGVyL3N0aWg0MTYtcmVzZXRzLmg+CiAvIHsKQEAgLTIzNiw1ICsyMzgsMjEyIEBACiAJCQlyZXNldHMJPSA8JnBvd2VyZG93biBTVElINDE2X0tFWVNDQU5fUE9XRVJET1dOPiwKIAkJCQkgIDwmc29mdHJlc2V0IFNUSUg0MTZfS0VZU0NBTl9TT0ZUUkVTRVQ+OwogCQl9OworCisJCXRlbXAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNi1zYXMtdGhlcm1hbCI7CisJCQljbG9jay1uYW1lcyA9ICJ0aGVybWFsIjsKKwkJCWNsb2NrcyA9IDwmY2xvY2tnZW5fY192Y2MgMTQ+OworCisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdGVtcDFAZmRmZTgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2LW1wZS10aGVybWFsIjsKKwkJCXJlZyA9IDwweGZkZmU4MDAwIDB4MTA+OworCQkJY2xvY2tzID0gPCZjbG9ja2dlbl9lIDM+OworCQkJY2xvY2stbmFtZXMgPSAidGhlcm1hbCI7CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjMgSVJRX1RZUEVfRURHRV9SSVNJTkc+OworCisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJbW1jMDogc2RoY2lAZmU4MWUwMDAgeworCQkJY29tcGF0aWJsZQk9ICJzdCxzZGhjaSI7CisJCQlzdGF0dXMJCT0gImRpc2FibGVkIjsKKwkJCXJlZwkJPSA8MHhmZTgxZTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cwk9IDxHSUNfU1BJIDEyNyBJUlFfVFlQRV9OT05FPjsKKwkJCWludGVycnVwdC1uYW1lcwk9ICJtbWNpcnEiOworCQkJcGluY3RybC1uYW1lcwk9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMAk9IDwmcGluY3RybF9tbWMwPjsKKwkJCWNsb2NrLW5hbWVzCT0gIm1tYyI7CisJCQljbG9ja3MJCT0gPCZjbGtfc19hMV9scyAxPjsKKwkJfTsKKworCQltbWMxOiBzZGhjaUBmZTgxZjAwMCB7CisJCQljb21wYXRpYmxlCT0gInN0LHNkaGNpIjsKKwkJCXN0YXR1cwkJPSAiZGlzYWJsZWQiOworCQkJcmVnCQk9IDwweGZlODFmMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzCT0gPEdJQ19TUEkgMTI4IElSUV9UWVBFX05PTkU+OworCQkJaW50ZXJydXB0LW5hbWVzCT0gIm1tY2lycSI7CisJCQlwaW5jdHJsLW5hbWVzCT0gImRlZmF1bHQiOworCQkJcGluY3RybC0wCT0gPCZwaW5jdHJsX21tYzE+OworCQkJY2xvY2stbmFtZXMJPSAibW1jIjsKKwkJCWNsb2NrcwkJPSA8JmNsa19zX2ExX2xzIDg+OworCQl9OworCisJCW1pcGh5MzY1eF9waHk6IHBoeUBmZTM4MjAwMCB7CisJCQljb21wYXRpYmxlICAgICAgPSAic3QsbWlwaHkzNjV4LXBoeSI7CisJCQlzdCxzeXNjZmcgIAk9IDwmc3lzY2ZnX3JlYXI+OworCQkJI2FkZHJlc3MtY2VsbHMJPSA8MT47CisJCQkjc2l6ZS1jZWxscwk9IDwxPjsKKwkJCXJhbmdlczsKKworCQkJcGh5X3BvcnQwOiBwb3J0QGZlMzgyMDAwIHsKKwkJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweGZlMzgyMDAwIDB4MTAwPiwgPDB4ZmUzOTQwMDAgMHgxMDA+LCA8MHg4MjQgMHg0PjsKKwkJCQlyZWctbmFtZXMgPSAic2F0YSIsICJwY2llIiwgInN5c2NmZyI7CisJCQl9OworCisJCQlwaHlfcG9ydDE6IHBvcnRAZmUzOGEwMDAgeworCQkJCSNwaHktY2VsbHMgPSA8MT47CisJCQkJcmVnID0gPDB4ZmUzOGEwMDAgMHgxMDA+LCA8MHhmZTgwNDAwMCAweDEwMD4sIDwweDgyOCAweDQ+OworCQkJCXJlZy1uYW1lcyA9ICJzYXRhIiwgInBjaWUiLCAic3lzY2ZnIjsKKwkJCX07CisJCX07CisKKwkJc2F0YTA6IHNhdGFAZmUzODAwMDAgeworCQkJY29tcGF0aWJsZSAgICAgID0gInN0LHN0aS1haGNpIjsKKwkJCXJlZyAgICAgICAgICAgICA9IDwweGZlMzgwMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzICAgICAgPSA8R0lDX1NQSSAxNTcgSVJRX1RZUEVfTk9ORT47CisJCQlpbnRlcnJ1cHQtbmFtZXMgPSAiaG9zdGMiOworCQkJcGh5cwkgICAgICAgID0gPCZwaHlfcG9ydDAgTUlQSFlfVFlQRV9TQVRBPjsKKwkJCXBoeS1uYW1lcyAgICAgICA9ICJzYXRhLXBoeSI7CisJCQlyZXNldHMJICAgICAgICA9IDwmcG93ZXJkb3duIFNUSUg0MTZfU0FUQTBfUE9XRVJET1dOPiwKKwkJCQkJICA8JnNvZnRyZXNldCBTVElINDE2X1NBVEEwX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyAgICAgPSAicHdyLWR3biIsICJzdy1yc3QiOworCQkJY2xvY2stbmFtZXMgICAgID0gImFoY2lfY2xrIjsKKwkJCWNsb2NrcwkgICAgICAgID0gPCZjbGtfc19hMF9scyBDTEtfSUNOX1JFRz47CisKKwkJCXN0YXR1cwkgICAgICAgID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2IyX3BoeTogcGh5QDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2LXVzYi1waHkiOworCQkJI3BoeS1jZWxscyA9IDwwPjsKKwkJCXN0LHN5c2NmZyA9IDwmc3lzY2ZnX3JlYXI+OworCQkJY2xvY2tzID0gPCZjbGtfc3lzaW4+OworCQkJY2xvY2stbmFtZXMgPSAib3NjX3BoeSI7CisJCX07CisKKwkJZWhjaTA6IHVzYkBmZTFmZmUwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0LWVoY2ktMzAweCI7CisJCQlyZWcgPSA8MHhmZTFmZmUwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQ4IElSUV9UWVBFX05PTkU+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2IwPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYTFfbHMgMD4sCisJCQkJIDwmY2xvY2tnZW5fYjAgMD47CisJCQljbG9jay1uYW1lcyA9ICJpYyIsICJjbGs0OCI7CisJCQlwaHlzID0gPCZ1c2IyX3BoeT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJCXJlc2V0cyA9IDwmcG93ZXJkb3duIFNUSUg0MTZfVVNCMF9QT1dFUkRPV04+LAorCQkJCSA8JnNvZnRyZXNldCBTVElINDE2X1VTQjBfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInBvd2VyIiwgInNvZnRyZXNldCI7CisJCX07CisKKwkJb2hjaTA6IHVzYkBmZTFmZmMwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0LW9oY2ktMzAweCI7CisJCQlyZWcgPSA8MHhmZTFmZmMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQ5IElSUV9UWVBFX05PTkU+OworCQkJY2xvY2tzID0gPCZjbGtfc19hMV9scyAwPiwKKwkJCQkgPCZjbG9ja2dlbl9iMCAwPjsKKwkJCWNsb2NrLW5hbWVzID0gImljIiwgImNsazQ4IjsKKwkJCXBoeXMgPSA8JnVzYjJfcGh5PjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQkJc3RhdHVzID0gIm9rYXkiOworCQkJcmVzZXRzID0gPCZwb3dlcmRvd24gU1RJSDQxNl9VU0IwX1BPV0VSRE9XTj4sCisJCQkJIDwmc29mdHJlc2V0IFNUSUg0MTZfVVNCMF9TT0ZUUkVTRVQ+OworCQkJcmVzZXQtbmFtZXMgPSAicG93ZXIiLCAic29mdHJlc2V0IjsKKwkJfTsKKworCQllaGNpMTogdXNiQGZlMjAzZTAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3QtZWhjaS0zMDB4IjsKKwkJCXJlZyA9IDwweGZlMjAzZTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNTAgSVJRX1RZUEVfTk9ORT47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYjE+OworCQkJY2xvY2tzID0gPCZjbGtfc19hMV9scyAwPiwKKwkJCQkgPCZjbG9ja2dlbl9iMCAwPjsKKwkJCWNsb2NrLW5hbWVzID0gImljIiwgImNsazQ4IjsKKwkJCXBoeXMgPSA8JnVzYjJfcGh5PjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQkJcmVzZXRzID0gPCZwb3dlcmRvd24gU1RJSDQxNl9VU0IxX1BPV0VSRE9XTj4sCisJCQkJIDwmc29mdHJlc2V0IFNUSUg0MTZfVVNCMV9TT0ZUUkVTRVQ+OworCQkJcmVzZXQtbmFtZXMgPSAicG93ZXIiLCAic29mdHJlc2V0IjsKKwkJfTsKKworCQlvaGNpMTogdXNiQGZlMjAzYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3Qtb2hjaS0zMDB4IjsKKwkJCXJlZyA9IDwweGZlMjAzYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNTEgSVJRX1RZUEVfTk9ORT47CisJCQljbG9ja3MgPSA8JmNsa19zX2ExX2xzIDA+LAorCQkJCSA8JmNsb2NrZ2VuX2IwIDA+OworCQkJY2xvY2stbmFtZXMgPSAiaWMiLCAiY2xrNDgiOworCQkJcGh5cyA9IDwmdXNiMl9waHk+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCQlyZXNldHMgPSA8JnBvd2VyZG93biBTVElINDE2X1VTQjFfUE9XRVJET1dOPiwKKwkJCQkgPCZzb2Z0cmVzZXQgU1RJSDQxNl9VU0IxX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJwb3dlciIsICJzb2Z0cmVzZXQiOworCQl9OworCisJCWVoY2kyOiB1c2JAZmUzMDNlMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdC1laGNpLTMwMHgiOworCQkJcmVnID0gPDB4ZmUzMDNlMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE1MiBJUlFfVFlQRV9OT05FPjsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdXNiMj47CisJCQljbG9ja3MgPSA8JmNsa19zX2ExX2xzIDA+LAorCQkJCSA8JmNsb2NrZ2VuX2IwIDA+OworCQkJY2xvY2stbmFtZXMgPSAiaWMiLCAiY2xrNDgiOworCQkJcGh5cyA9IDwmdXNiMl9waHk+OworCQkJcGh5LW5hbWVzID0gInVzYiI7CisJCQlyZXNldHMgPSA8JnBvd2VyZG93biBTVElINDE2X1VTQjJfUE9XRVJET1dOPiwKKwkJCQkgPCZzb2Z0cmVzZXQgU1RJSDQxNl9VU0IyX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJwb3dlciIsICJzb2Z0cmVzZXQiOworCQl9OworCisJCW9oY2kyOiB1c2JAZmUzMDNjMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdC1vaGNpLTMwMHgiOworCQkJcmVnID0gPDB4ZmUzMDNjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE1MyBJUlFfVFlQRV9OT05FPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYTFfbHMgMD4sCisJCQkJIDwmY2xvY2tnZW5fYjAgMD47CisJCQljbG9jay1uYW1lcyA9ICJpYyIsICJjbGs0OCI7CisJCQlwaHlzID0gPCZ1c2IyX3BoeT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJCXJlc2V0cyA9IDwmcG93ZXJkb3duIFNUSUg0MTZfVVNCMl9QT1dFUkRPV04+LAorCQkJCSA8JnNvZnRyZXNldCBTVElINDE2X1VTQjJfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInBvd2VyIiwgInNvZnRyZXNldCI7CisJCX07CisKKwkJZWhjaTM6IHVzYkBmZTM0M2UwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0LWVoY2ktMzAweCI7CisJCQlyZWcgPSA8MHhmZTM0M2UwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTU0IElSUV9UWVBFX05PTkU+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2IzPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYTFfbHMgMD4sCisJCQkJIDwmY2xvY2tnZW5fYjAgMD47CisJCQljbG9jay1uYW1lcyA9ICJpYyIsICJjbGs0OCI7CisJCQlwaHlzID0gPCZ1c2IyX3BoeT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJCXJlc2V0cyA9IDwmcG93ZXJkb3duIFNUSUg0MTZfVVNCM19QT1dFUkRPV04+LAorCQkJCSA8JnNvZnRyZXNldCBTVElINDE2X1VTQjNfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInBvd2VyIiwgInNvZnRyZXNldCI7CisJCX07CisKKwkJb2hjaTM6IHVzYkBmZTM0M2MwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0LW9oY2ktMzAweCI7CisJCQlyZWcgPSA8MHhmZTM0M2MwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTU1IElSUV9UWVBFX05PTkU+OworCQkJY2xvY2tzID0gPCZjbGtfc19hMV9scyAwPiwKKwkJCQkgPCZjbG9ja2dlbl9iMCAwPjsKKwkJCWNsb2NrLW5hbWVzID0gImljIiwgImNsazQ4IjsKKwkJCXBoeXMgPSA8JnVzYjJfcGh5PjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQkJcmVzZXRzID0gPCZwb3dlcmRvd24gU1RJSDQxNl9VU0IzX1BPV0VSRE9XTj4sCisJCQkJIDwmc29mdHJlc2V0IFNUSUg0MTZfVVNCM19TT0ZUUkVTRVQ+OworCQkJcmVzZXQtbmFtZXMgPSAicG93ZXIiLCAic29mdHJlc2V0IjsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMDAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMDAuZHRzaQppbmRleCBiM2RkNmNhLi41ZjkxZjQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDAwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAwMC5kdHNpCkBAIC0zNSw3ICszNSw3IEBACiAJCQlmcF9sZWQgewogCQkJCSNncGlvLWNlbGxzID0gPDE+OwogCQkJCWxhYmVsCT0gIkZyb250IFBhbmVsIExFRCI7Ci0JCQkJZ3Bpb3MJPSA8JlBJTzEwNSA3PjsKKwkJCQlncGlvcwk9IDwmcGlvMTA1IDc+OwogCQkJCWxpbnV4LGRlZmF1bHQtdHJpZ2dlcgk9ICJoZWFydGJlYXQiOwogCQkJfTsKIAkJfTsKQEAgLTU1LDcgKzU1LDcgQEAKIAkJCXBoeS1tb2RlCQk9ICJtaWkiOwogCQkJcGluY3RybC0wCQk9IDwmcGluY3RybF9taWkwPjsKIAotCQkJc25wcyxyZXNldC1ncGlvIAk9IDwmUElPMTA2IDI+OworCQkJc25wcyxyZXNldC1ncGlvIAk9IDwmcGlvMTA2IDI+OwogCQkJc25wcyxyZXNldC1hY3RpdmUtbG93OwogCQkJc25wcyxyZXNldC1kZWxheXMtdXMgCT0gPDAgMTAwMDAgMTAwMDA+OwogCQl9OwpAQCAtNjUsNyArNjUsNyBAQAogCQkJcGh5LW1vZGUJCT0gIm1paSI7CiAJCQlzdCx0eC1yZXRpbWUtc3JjCT0gInR4Y2xrIjsKIAotCQkJc25wcyxyZXNldC1ncGlvIAk9IDwmUElPNCA3PjsKKwkJCXNucHMscmVzZXQtZ3BpbyAJPSA8JnBpbzQgNz47CiAJCQlzbnBzLHJlc2V0LWFjdGl2ZS1sb3c7CiAJCQlzbnBzLHJlc2V0LWRlbGF5cy11cyAJPSA8MCAxMDAwMCAxMDAwMD47CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDIwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDIwLmR0c2kKaW5kZXggZDhhODQyOS4uNDg3ZDdkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAyMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMjAuZHRzaQpAQCAtMzIsMTEgKzMyLDExIEBACiAJCQlyZWQgewogCQkJCSNncGlvLWNlbGxzID0gPDE+OwogCQkJCWxhYmVsCT0gIkZyb250IFBhbmVsIExFRCI7Ci0JCQkJZ3Bpb3MJPSA8JlBJTzQgMT47CisJCQkJZ3Bpb3MJPSA8JnBpbzQgMT47CiAJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyCT0gImhlYXJ0YmVhdCI7CiAJCQl9OwogCQkJZ3JlZW4gewotCQkJCWdwaW9zCT0gPCZQSU80IDc+OworCQkJCWdwaW9zCT0gPCZwaW80IDc+OwogCQkJCWRlZmF1bHQtc3RhdGUgPSAib2ZmIjsKIAkJCX07CiAJCX07CkBAIC02OCwxMSArNjgsMTUgQEAKIAkJCXBoeS1tb2RlCQk9ICJyZ21paS1pZCI7CiAJCQltYXgtc3BlZWQJCT0gPDEwMDA+OwogCQkJc3QsdHgtcmV0aW1lLXNyYwk9ICJjbGtfMTI1IjsKLQkJCXNucHMscmVzZXQtZ3BpbyAJPSA8JlBJTzMgMD47CisJCQlzbnBzLHJlc2V0LWdwaW8gCT0gPCZwaW8zIDA+OwogCQkJc25wcyxyZXNldC1hY3RpdmUtbG93OwogCQkJc25wcyxyZXNldC1kZWxheXMtdXMgCT0gPDAgMTAwMDAgMTAwMDA+OwogCiAJCQlwaW5jdHJsLTAJPSA8JnBpbmN0cmxfcmdtaWkxPjsKIAkJfTsKKworCQltbWMwOiBzZGhjaUBmZTgxZTAwMCB7CisJCQlidXMtd2lkdGggPSA8OD47CisJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDIweC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxeC1iMjAyMHguZHRzaQppbmRleCBkZjAxYzEyLi5mNzk3YTA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDF4LWIyMDIweC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MXgtYjIwMjB4LmR0c2kKQEAgLTgsNiArOCwxMCBAQAogICovCiAvIHsKIAlzb2MgeworCQltbWMwOiBzZGhjaUBmZTgxZTAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKIAkJc3BpZnNtOiBzcGlmc21AZmU5MDIwMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyAgICA9IDwxPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWh4eHgtYjIxMjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWh4eHgtYjIxMjAuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDc0YmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaHh4eC1iMjEyMC5kdHNpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU1RNaWNyb2VsZWN0cm9uaWNzIChSJkQpIExpbWl0ZWQuCisgKiBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisvIHsKKwlzb2MgeworCQlzYmNfc2VyaWFsMDogc2VyaWFsQDk1MzAwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWxlZHMgeworCQkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCQkJcmVkIHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlsYWJlbCA9ICJGcm9udCBQYW5lbCBMRUQiOworCQkJCWdwaW9zID0gPCZwaW80IDEgMD47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CisJCQl9OworCQkJZ3JlZW4geworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWdwaW9zID0gPCZwaW8xIDMgMD47CisJCQkJZGVmYXVsdC1zdGF0ZSA9ICJvZmYiOworCQkJfTsKKwkJfTsKKworCQlpMmNAOTg0MjAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJaTJjQDk4NDMwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyY0A5ODQ0MDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlpMmNAOTg0NTAwMCB7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJaTJjQDk1NDAwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCS8qIFNTQzExIHRvIEhETUkgKi8KKwkJaTJjQDk1NDEwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQkJLyogSERNSSBWMS4zYSBzdXBwb3J0cyBTdGFuZGFyZCBtb2RlIG9ubHkgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCQkJc3QsaTJjLW1pbi1zY2wtcHVsc2Utd2lkdGgtdXMgPSA8MD47CisJCQlzdCxpMmMtbWluLXNkYS1wdWxzZS13aWR0aC11cyA9IDw1PjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1hMTAwMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtYTEwMDAuZHRzCmluZGV4IDllOTlhZGUuLjNiY2ZkODE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtYTEwMDAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1hMTAwMC5kdHMKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBFbWlsaW8gTMOzcGV6IDxlbWlsaW9AZWxvcGV6LmNvbS5hcj4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1iYTEwLXR2Ym94LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1iYTEwLXR2Ym94LmR0cwppbmRleCAxNzYzY2M3Li5mM2YyOTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtYmExMC10dmJveC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWJhMTAtdHZib3guZHRzCkBAIC0xLDEyICsxLDQ4IEBACiAvKgogICogQ29weXJpZ2h0IDIwMTQgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1jdWJpZWJvYXJkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1jdWJpZWJvYXJkLmR0cwppbmRleCAzY2U1NmJmYi4uNmEzMTBkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLWN1YmllYm9hcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1jdWJpZWJvYXJkLmR0cwpAQCAtMiwxMiArMiw0OCBAQAogICogQ29weXJpZ2h0IDIwMTIgU3RlZmFuIFJvZXNlCiAgKiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaGFja2JlcnJ5LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1oYWNrYmVycnkuZHRzCmluZGV4IDg5MWVhNDQuLmVmYzExNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1oYWNrYmVycnkuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1oYWNrYmVycnkuZHRzCkBAIC0zLDEyICszLDQ4IEBACiAgKgogICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtaW5ldDk3ZnYyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1pbmV0OTdmdjIuZHRzCmluZGV4IDZiMGMzNzguLjNlMjVlZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1pbmV0OTdmdjIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1pbmV0OTdmdjIuZHRzCkBAIC0zLDEyICszLDQ4IEBACiAgKgogICogRGF2aWQgTGFuemVuZPZyZmVyIDxkYXZpZC5sYW56ZW5kb2VyZmVyQG8ycy5jaD4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1taW5pLXhwbHVzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1taW5pLXhwbHVzLmR0cwppbmRleCBiOWVjY2U2Li44YjNmOTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtbWluaS14cGx1cy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLW1pbmkteHBsdXMuZHRzCkBAIC0zLDEyICszLDQ4IEBACiAgKgogICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtb2xpbnV4aW5vLWxpbWUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLW9saW51eGluby1saW1lLmR0cwppbmRleCBkMDQ2ZDU2Li44OGNmMWE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtb2xpbnV4aW5vLWxpbWUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1vbGludXhpbm8tbGltZS5kdHMKQEAgLTEsMTIgKzEsNDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAxNCAtIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtcGNkdWluby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAtcGNkdWluby5kdHMKaW5kZXggNjY3NWJjZC4uY2U1OTk0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLXBjZHVpbm8uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjRpLWExMC1wY2R1aW5vLmR0cwpAQCAtMiwxMiArMiw0OCBAQAogICogQ29weXJpZ2h0IDIwMTQgWm9sdGFuIEhFUlBBSQogICogWm9sdGFuIEhFUlBBSSA8d2lneW9yaUB1aWQwLmh1PgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQppbmRleCAzODBmOTE0Li5lM2FiOTQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQpAQCAtMjcsNiArMjcsMjAgQEAKIAkJc2VyaWFsNyA9ICZ1YXJ0NzsKIAl9OwogCisJY2hvc2VuIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJZnJhbWVidWZmZXJAMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzaW1wbGUtZnJhbWVidWZmZXIiLCAic2ltcGxlLWZyYW1lYnVmZmVyIjsKKwkJCWFsbHdpbm5lcixwaXBlbGluZSA9ICJkZV9iZTAtbGNkMC1oZG1pIjsKKwkJCWNsb2NrcyA9IDwmcGxsNSAxPiwgPCZhaGJfZ2F0ZXMgMzY+LCA8JmFoYl9nYXRlcyA0Mz4sCisJCQkJIDwmYWhiX2dhdGVzIDQ0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKKwogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLW9saW51eGluby1taWNyby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLW9saW51eGluby1taWNyby5kdHMKaW5kZXggZWE5NTE5ZC4uZmUzYzU1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1vbGludXhpbm8tbWljcm8uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1yNy10di1kb25nbGUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1yNy10di1kb25nbGUuZHRzCmluZGV4IDQzYTkzNzYuLjFmYTI5MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtcjctdHYtZG9uZ2xlLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLXI3LXR2LWRvbmdsZS5kdHMKQEAgLTEsMTIgKzEsNDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAxNCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy5kdHNpCmluZGV4IDUzMTI3MmMuLjgxYWQ0YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kKQEAgLTI0LDYgKzI0LDIwIEBACiAJCXNlcmlhbDMgPSAmdWFydDM7CiAJfTsKIAorCWNob3NlbiB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCisJCWZyYW1lYnVmZmVyQDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc2ltcGxlLWZyYW1lYnVmZmVyIiwgInNpbXBsZS1mcmFtZWJ1ZmZlciI7CisJCQlhbGx3aW5uZXIscGlwZWxpbmUgPSAiZGVfYmUwLWxjZDAtaGRtaSI7CisJCQljbG9ja3MgPSA8JnBsbDUgMT4sIDwmYWhiX2dhdGVzIDM2PiwgPCZhaGJfZ2F0ZXMgNDM+LAorCQkJCSA8JmFoYl9nYXRlcyA0ND47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCX07CisKIAljcHVzIHsKIAkJY3B1QDAgewogCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE4IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1oc2ctaDcwMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtaHNnLWg3MDIuZHRzCmluZGV4IDhiM2NkMDkwLi5lZWVkMWYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtaHNnLWg3MDIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1oc2ctaDcwMi5kdHMKQEAgLTYsMTggKzYsMTggQEAKICAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCiAgKiB3aG9sZS4KICAqCi0gKiAgYSkgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQogICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCiAgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCiAgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLW1pY3JvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8tbWljcm8uZHRzCmluZGV4IGZhNDRiMDIuLjkxNmVlOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8tbWljcm8uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8tbWljcm8uZHRzCkBAIC0xLDE1ICsxLDQ5IEBACiAvKgotICogQ29weXJpZ2h0IDIwMTIgTWF4aW1lIFJpcGFyZAorICogQ29weXJpZ2h0IDIwMTIgTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CiAgKiBDb3B5cmlnaHQgMjAxMyBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgogICoKLSAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCmluZGV4IDQyOTk5NGUuLmUzMWQyOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCkBAIC0zLDEyICszLDQ4IEBACiAgKgogICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtYXBwNC1ldmIxLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1hcHA0LWV2YjEuZHRzCmluZGV4IDJiYmY4ODYuLmM3NGE2M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1hcHA0LWV2YjEuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1hcHA0LWV2YjEuZHRzCkBAIC0zLDEyICszLDQ4IEBACiAgKgogICogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPgogICoKLSAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgogICoKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAotICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCisgKgorICogT3IsIGFsdGVybmF0aXZlbHksCisgKgorICogIGIpIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiAgICAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqICAgICBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiAgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCisgKiAgICAgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiAgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqICAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnM6CisgKgorICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiAgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogICAgIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiAgICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAqICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqICAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiAgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKIC9kdHMtdjEvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWNvbG9tYnVzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1jb2xvbWJ1cy5kdHMKaW5kZXggNTQ2Y2Y2ZS4uYzM2YjRkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWNvbG9tYnVzLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtY29sb21idXMuZHRzCkBAIC0zLDEyICszLDQ4IEBACiAgKgogICogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtaHVtbWluZ2JpcmQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLWh1bW1pbmdiaXJkLmR0cwppbmRleCBmMTQyMDY1Li42ZTkyNGQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtaHVtbWluZ2JpcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1odW1taW5nYmlyZC5kdHMKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1tOS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEtbTkuZHRzCmluZGV4IGJjNjExNWQuLjNhYjU0NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS1tOS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLW05LmR0cwpAQCAtMSwxMiArMSw0OCBAQAogLyoKICAqIENvcHlyaWdodCAyMDE0IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CkBAIC0zMiwxMyArNjgsNDAgQEAKIAkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKIAorCQl1c2JwaHk6IHBoeUAwMWMxOTQwMCB7CisJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMDogdXNiQDAxYzFhMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMTogdXNiQDAxYzFiMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwogCQlwaW86IHBpbmN0cmxAMDFjMjA4MDAgeworCQkJbGVkX3BpbnNfbTk6IGxlZF9waW5zQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMTMiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwogCQkJbW1jMF9jZF9waW5fbTk6IG1tYzBfY2RfcGluQDAgewogCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMjIiOwogCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX2luIjsKIAkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CiAJCQkJYWxsd2lubmVyLHB1bGwgPSA8MT47CiAJCQl9OworCisJCQl1c2IxX3ZidXNfcGluX205OiB1c2IxX3ZidXNfcGluQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBDMjciOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKIAkJfTsKIAogCQl1YXJ0MDogc2VyaWFsQDAxYzI4MDAwIHsKQEAgLTQ2LDUgKzEwOSwzNSBAQAogCQkJcGluY3RybC0wID0gPCZ1YXJ0MF9waW5zX2E+OwogCQkJc3RhdHVzID0gIm9rYXkiOwogCQl9OworCisJCWdtYWM6IGV0aGVybmV0QDAxYzMwMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmdtYWNfcGluc19taWlfYT47CisJCQlwaHkgPSA8JnBoeTE+OworCQkJcGh5LW1vZGUgPSAibWlpIjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisJCX07CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmbGVkX3BpbnNfbTk+OworCisJCWJsdWUgeworCQkJbGFiZWwgPSAibTk6Ymx1ZTp1c3IiOworCQkJZ3Bpb3MgPSA8JnBpbyA3IDEzIDA+OworCQl9OworCX07CisKKwlyZWdfdXNiMV92YnVzOiB1c2IxLXZidXMgeworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JnVzYjFfdmJ1c19waW5fbTk+OworCQlncGlvID0gPCZwaW8gMiAyNyAwPjsKKwkJc3RhdHVzID0gIm9rYXkiOwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEuZHRzaQppbmRleCAyZTY1MmUyLi5hNDAwMTcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEuZHRzaQpAQCAtOCwxOCArOCwxOCBAQAogICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKICAqIHdob2xlLgogICoKLSAqICBhKSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgYSkgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCiAgKiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKICAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKICAqICAgICBNQSAwMjExMC0xMzAxIFVTQQogICoKQEAgLTYyLDYgKzYyLDE4IEBACiAJCWV0aGVybmV0MCA9ICZnbWFjOwogCX07CiAKKwljaG9zZW4geworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKworCQlmcmFtZWJ1ZmZlckAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHNpbXBsZS1mcmFtZWJ1ZmZlciIsICJzaW1wbGUtZnJhbWVidWZmZXIiOworCQkJYWxsd2lubmVyLHBpcGVsaW5lID0gImRlX2JlMC1sY2QwLWhkbWkiOworCQkJY2xvY2tzID0gPCZwbGw2IDA+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwl9OwogCiAJY3B1cyB7CiAJCWVuYWJsZS1tZXRob2QgPSAiYWxsd2lubmVyLHN1bjZpLWEzMSI7CkBAIC0xMzIsMTEgKzE0NCwxMSBAQAogCQl9OwogCiAJCXBsbDY6IGNsa0AwMWMyMDAyOCB7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtcGxsNi1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwMjggMHg0PjsKIAkJCWNsb2NrcyA9IDwmb3NjMjRNPjsKLQkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwbGw2IjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwbGw2IiwgInBsbDZ4MiI7CiAJCX07CiAKIAkJY3B1OiBjcHVAMDFjMjAwNTAgewpAQCAtMTY2LDcgKzE3OCw3IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtYWhiMS1tdXgtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMDU0IDB4ND47Ci0JCQljbG9ja3MgPSA8Jm9zYzMyaz4sIDwmb3NjMjRNPiwgPCZheGk+LCA8JnBsbDY+OworCQkJY2xvY2tzID0gPCZvc2MzMms+LCA8Jm9zYzI0TT4sIDwmYXhpPiwgPCZwbGw2IDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFoYjFfbXV4IjsKIAkJfTsKIApAQCAtMjIxLDcgKzIzMyw3IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtYXBiMS1tdXgtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMDU4IDB4ND47Ci0JCQljbG9ja3MgPSA8Jm9zYzMyaz4sIDwmb3NjMjRNPiwgPCZwbGw2PiwgPCZwbGw2PjsKKwkJCWNsb2NrcyA9IDwmb3NjMzJrPiwgPCZvc2MyNE0+LCA8JnBsbDYgMD4sIDwmcGxsNiAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhcGIyX211eCI7CiAJCX07CiAKQEAgLTI0OCw3ICsyNjAsNyBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLW1vZDAtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMDg4IDB4ND47Ci0JCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNj47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNiAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJtbWMwIjsKIAkJfTsKIApAQCAtMjU2LDcgKzI2OCw3IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW9kMC1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwOGMgMHg0PjsKLQkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2IDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gIm1tYzEiOwogCQl9OwogCkBAIC0yNjQsNyArMjc2LDcgQEAKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tb2QwLWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDA5MCAweDQ+OwotCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDY+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDYgMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAibW1jMiI7CiAJCX07CiAKQEAgLTI3Miw3ICsyODQsNyBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLW1vZDAtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMDk0IDB4ND47Ci0JCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNj47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNiAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJtbWMzIjsKIAkJfTsKIApAQCAtMjgwLDcgKzI5Miw3IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW9kMC1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwYTAgMHg0PjsKLQkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2IDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInNwaTAiOwogCQl9OwogCkBAIC0yODgsNyArMzAwLDcgQEAKIAkJCSNjbG9jay1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1tb2QwLWNsayI7CiAJCQlyZWcgPSA8MHgwMWMyMDBhNCAweDQ+OwotCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDY+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDYgMD47CiAJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic3BpMSI7CiAJCX07CiAKQEAgLTI5Niw3ICszMDgsNyBAQAogCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLW1vZDAtY2xrIjsKIAkJCXJlZyA9IDwweDAxYzIwMGE4IDB4ND47Ci0JCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNj47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsNiAwPjsKIAkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJzcGkyIjsKIAkJfTsKIApAQCAtMzA0LDcgKzMxNiw3IEBACiAJCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtbW9kMC1jbGsiOwogCQkJcmVnID0gPDB4MDFjMjAwYWMgMHg0PjsKLQkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw2IDA+OwogCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gInNwaTMiOwogCQl9OwogCkBAIC0zNjQsNyArMzc2LDcgQEAKIAogCQkJLyogRE1BIGNvbnRyb2xsZXIgcmVxdWlyZXMgQUhCMSBjbG9ja2VkIGZyb20gUExMNiAqLwogCQkJYXNzaWduZWQtY2xvY2tzID0gPCZhaGIxX211eD47Ci0JCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZwbGw2PjsKKwkJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnBsbDYgMD47CiAJCX07CiAKIAkJbW1jMDogbW1jQDAxYzBmMDAwIHsKQEAgLTg0NCw3ICs4NTYsNyBAQAogCQkJYXIxMDA6IGFyMTAwX2NsayB7CiAJCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWFyMTAwLWNsayI7CiAJCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJCWNsb2NrcyA9IDwmb3NjMzJrPiwgPCZvc2MyNE0+LCA8JnBsbDY+LCA8JnBsbDY+OworCQkJCWNsb2NrcyA9IDwmb3NjMzJrPiwgPCZvc2MyNE0+LCA8JnBsbDYgMD4sIDwmcGxsNiAwPjsKIAkJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYXIxMDAiOwogCQkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWJhbmFuYXBpLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1iYW5hbmFwaS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmMTIxNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1iYW5hbmFwaS5kdHMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorICoKKyAqIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2R0cy12MS87CisvaW5jbHVkZS8gInN1bjdpLWEyMC5kdHNpIgorL2luY2x1ZGUvICJzdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJMZU1ha2VyIEJhbmFuYSBQaSI7CisJY29tcGF0aWJsZSA9ICJsZW1ha2VyLGJhbmFuYXBpIiwgImFsbHdpbm5lcixzdW43aS1hMjAiOworCisJc29jQDAxYzAwMDAwIHsKKwkJc3BpMDogc3BpQDAxYzA1MDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnNwaTBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQltbWMwOiBtbWNAMDFjMGYwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2E+LCA8Jm1tYzBfY2RfcGluX2JhbmFuYXBpPjsKKwkJCXZtbWMtc3VwcGx5ID0gPCZyZWdfdmNjM3YzPjsKKwkJCWJ1cy13aWR0aCA9IDw0PjsKKwkJCWNkLWdwaW9zID0gPCZwaW8gNyAxMCAwPjsgLyogUEgxMCAqLworCQkJY2QtaW52ZXJ0ZWQ7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdXNicGh5OiBwaHlAMDFjMTM0MDAgeworCQkJdXNiMV92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjFfdmJ1cz47CisJCQl1c2IyX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMl92YnVzPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMDogdXNiQDAxYzE0MDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMDogdXNiQDAxYzE0NDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlhaGNpOiBzYXRhQDAxYzE4MDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQllaGNpMTogdXNiQDAxYzFjMDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlvaGNpMTogdXNiQDAxYzFjNDAwIHsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlwaW5jdHJsQDAxYzIwODAwIHsKKwkJCW1tYzBfY2RfcGluX2JhbmFuYXBpOiBtbWMwX2NkX3BpbkAwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDEwIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19pbiI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OworCQkJfTsKKworCQkJZ21hY19wb3dlcl9waW5fYmFuYW5hcGk6IGdtYWNfcG93ZXJfcGluQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMjMiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKworCQkJbGVkX3BpbnNfYmFuYW5hcGk6IGxlZF9waW5zQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMjQiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlpcjA6IGlyQDAxYzIxODAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmlyMF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXVhcnQwOiBzZXJpYWxAMDFjMjgwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1YXJ0Mzogc2VyaWFsQDAxYzI4YzAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnVhcnQzX3BpbnNfYj47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdWFydDc6IHNlcmlhbEAwMWMyOWMwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZ1YXJ0N19waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyYzA6IGkyY0AwMWMyYWMwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmMwX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCWF4cDIwOTogcG1pY0AzNCB7CisJCQkJY29tcGF0aWJsZSA9ICJ4LXBvd2VycyxheHAyMDkiOworCQkJCXJlZyA9IDwweDM0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZubWlfaW50Yz47CisJCQkJaW50ZXJydXB0cyA9IDwwIDg+OworCisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCX07CisJCX07CisKKwkJaTJjMjogaTJjQDAxYzJiNDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzJfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlnbWFjOiBldGhlcm5ldEAwMWM1MDAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZnbWFjX3BpbnNfcmdtaWlfYT47CisJCQlwaHkgPSA8JnBoeTE+OworCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJcGh5LXN1cHBseSA9IDwmcmVnX2dtYWNfM3YzPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisJCX07CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmbGVkX3BpbnNfYmFuYW5hcGk+OworCisJCWdyZWVuIHsKKwkJCWxhYmVsID0gImJhbmFuYXBpOmdyZWVuOnVzciI7CisJCQlncGlvcyA9IDwmcGlvIDcgMjQgMD47CisJCX07CisJfTsKKworCXJlZ191c2IxX3ZidXM6IHVzYjEtdmJ1cyB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJcmVnX3VzYjJfdmJ1czogdXNiMi12YnVzIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlyZWdfZ21hY18zdjM6IGdtYWMtM3YzIHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmdtYWNfcG93ZXJfcGluX2JhbmFuYXBpPjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZ21hYy0zdjMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXN0YXJ0dXAtZGVsYXktdXMgPSA8MTAwMDAwPjsKKwkJZW5hYmxlLWFjdGl2ZS1oaWdoOworCQlncGlvID0gPCZwaW8gNyAyMyAwPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1jdWJpZXRydWNrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1jdWJpZXRydWNrLmR0cwppbmRleCBhNmMxYTNjLi5hMjgxZDI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtY3ViaWV0cnVjay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWN1YmlldHJ1Y2suZHRzCkBAIC00MCw2ICs0MCw3IEBACiAJCX07CiAKIAkJdXNicGh5OiBwaHlAMDFjMTM0MDAgeworCQkJdXNiMF92YnVzLXN1cHBseSA9IDwmcmVnX3VzYjBfdmJ1cz47CiAJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKIAkJCXVzYjJfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IyX3ZidXM+OwogCQkJc3RhdHVzID0gIm9rYXkiOwpAQCAtOTIsNiArOTMsMTMgQEAKIAkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CiAJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CiAJCQl9OworCisJCQl1c2IwX3ZidXNfcGluX2E6IHVzYjBfdmJ1c19waW5AMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgxNyI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OwogCQl9OwogCiAJCXB3bTogcHdtQDAxYzIwZTAwIHsKQEAgLTE4NSw2ICsxOTMsMTIgQEAKIAkJc3RhdHVzID0gIm9rYXkiOwogCX07CiAKKwlyZWdfdXNiMF92YnVzOiB1c2IwLXZidXMgeworCQlwaW5jdHJsLTAgPSA8JnVzYjBfdmJ1c19waW5fYT47CisJCWdwaW8gPSA8JnBpbyA3IDE3IDA+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKwogCXJlZ191c2IxX3ZidXM6IHVzYjEtdmJ1cyB7CiAJCXN0YXR1cyA9ICJva2F5IjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWkxMi10dmJveC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaTEyLXR2Ym94LmR0cwppbmRleCA2YTY3NzEyLi5mMzhiYjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaTEyLXR2Ym94LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaTEyLXR2Ym94LmR0cwpAQCAtMSwxMiArMSw0OCBAQAogLyoKICAqIENvcHlyaWdodCAyMDE0IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtbTMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW0zLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU1NjhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW0zLmR0cwpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKgorICogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKy9pbmNsdWRlLyAic3VuN2ktYTIwLmR0c2kiCisvaW5jbHVkZS8gInN1bnhpLWNvbW1vbi1yZWd1bGF0b3JzLmR0c2kiCisKKy8geworCW1vZGVsID0gIk1lbGUgTTMiOworCWNvbXBhdGlibGUgPSAibWVsZSxtMyIsICJhbGx3aW5uZXIsc3VuN2ktYTIwIjsKKworCXNvY0AwMWMwMDAwMCB7CisJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfYT4sIDwmbW1jMF9jZF9waW5fcmVmZXJlbmNlX2Rlc2lnbj47CisJCQl2bW1jLXN1cHBseSA9IDwmcmVnX3ZjYzN2Mz47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljZC1ncGlvcyA9IDwmcGlvIDcgMSAwPjsgLyogUEgxICovCisJCQljZC1pbnZlcnRlZDsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQltbWMyOiBtbWNAMDFjMTEwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmbW1jMl9waW5zX2E+OworCQkJdm1tYy1zdXBwbHkgPSA8JnJlZ192Y2MzdjM+OworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJbm9uLXJlbW92YWJsZTsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CisJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKKwkJCXVzYjJfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IyX3ZidXM+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kwOiB1c2JAMDFjMTQwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCW9oY2kwOiB1c2JAMDFjMTQ0MDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kxOiB1c2JAMDFjMWMwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCW9oY2kxOiB1c2JAMDFjMWM0MDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXBpbmN0cmxAMDFjMjA4MDAgeworCQkJbGVkX3BpbnNfbTM6IGxlZF9waW5zQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMjAiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlpcjA6IGlyQDAxYzIxODAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmlyMF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXVhcnQwOiBzZXJpYWxAMDFjMjgwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQlpMmMwOiBpMmNAMDFjMmFjMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjMF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCisJCQlheHAyMDk6IHBtaWNAMzQgeworCQkJCWNvbXBhdGlibGUgPSAieC1wb3dlcnMsYXhwMjA5IjsKKwkJCQlyZWcgPSA8MHgzND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbm1pX2ludGM+OworCQkJCWludGVycnVwdHMgPSA8MCA4PjsKKworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQl9OworCQl9OworCisJCWdtYWM6IGV0aGVybmV0QDAxYzUwMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmdtYWNfcGluc19taWlfYT47CisJCQlwaHkgPSA8JnBoeTE+OworCQkJcGh5LW1vZGUgPSAibWlpIjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisJCX07CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmbGVkX3BpbnNfbTM+OworCisJCWJsdWUgeworCQkJbGFiZWwgPSAibTM6Ymx1ZTp1c3IiOworCQkJZ3Bpb3MgPSA8JnBpbyA3IDIwIDA+OworCQl9OworCX07CisKKwlyZWdfdXNiMV92YnVzOiB1c2IxLXZidXMgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXJlZ191c2IyX3ZidXM6IHVzYjItdmJ1cyB7CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1vbGludXhpbm8tbGltZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUuZHRzCmluZGV4IDFlYjgxNzUuLjNmM2ZmOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1vbGludXhpbm8tbGltZS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1saW1lLmR0cwpAQCAtNCwxMiArNCw0OCBAQAogICogQ29weXJpZ2h0IDIwMTQgLSBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgogICogQ29weXJpZ2h0IChjKSAyMDE0IEZVS0FVTUkgTmFva2kgPG5hb2JzZEBnbWFpbC5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1vbGludXhpbm8tbGltZTIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMzY0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLWxpbWUyLmR0cwpAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IC0gSWFpbiBQYXRvbiA8aXBhdG9uMEBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2R0cy12MS87CisvaW5jbHVkZS8gInN1bjdpLWEyMC5kdHNpIgorL2luY2x1ZGUvICJzdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJPbGltZXggQTIwLU9MaW51WGluby1MSU1FMiI7CisJY29tcGF0aWJsZSA9ICJvbGltZXgsYTIwLW9saW51eGluby1saW1lMiIsICJhbGx3aW5uZXIsc3VuN2ktYTIwIjsKKworCXNvY0AwMWMwMDAwMCB7CisJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfYT4sIDwmbW1jMF9jZF9waW5fcmVmZXJlbmNlX2Rlc2lnbj47CisJCQl2bW1jLXN1cHBseSA9IDwmcmVnX3ZjYzN2Mz47CisJCQlidXMtd2lkdGggPSA8ND47CisJCQljZC1ncGlvcyA9IDwmcGlvIDcgMSAwPjsgLyogUEgxICovCisJCQljZC1pbnZlcnRlZDsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1c2JwaHk6IHBoeUAwMWMxMzQwMCB7CisJCQl1c2IxX3ZidXMtc3VwcGx5ID0gPCZyZWdfdXNiMV92YnVzPjsKKwkJCXVzYjJfdmJ1cy1zdXBwbHkgPSA8JnJlZ191c2IyX3ZidXM+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kwOiB1c2JAMDFjMTQwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCW9oY2kwOiB1c2JAMDFjMTQ0MDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWFoY2k6IHNhdGFAMDFjMTgwMDAgeworCQkJdGFyZ2V0LXN1cHBseSA9IDwmcmVnX2FoY2lfNXY+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWVoY2kxOiB1c2JAMDFjMWMwMDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCW9oY2kxOiB1c2JAMDFjMWM0MDAgeworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXBpbmN0cmxAMDFjMjA4MDAgeworCQkJYWhjaV9wd3JfcGluX29saW51eGlub2xpbWU6IGFoY2lfcHdyX3BpbkAxIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQQzMiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJncGlvX291dCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKworCQkJbGVkX3BpbnNfb2xpbnV4aW5vbGltZTogbGVkX3BpbnNAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgyIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwxPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJdWFydDA6IHNlcmlhbEAwMWMyODAwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZ1YXJ0MF9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWkyYzA6IGkyY0AwMWMyYWMwMCB7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZpMmMwX3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCWF4cDIwOTogcG1pY0AzNCB7CisJCQkJY29tcGF0aWJsZSA9ICJ4LXBvd2VycyxheHAyMDkiOworCQkJCXJlZyA9IDwweDM0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZubWlfaW50Yz47CisJCQkJaW50ZXJydXB0cyA9IDwwIDg+OworCisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKworCQkJCWFjaW4tc3VwcGx5ID0gPCZyZWdfYXhwX2lwc291dD47CisJCQkJdmluMi1zdXBwbHkgPSA8JnJlZ19heHBfaXBzb3V0PjsKKwkJCQl2aW4zLXN1cHBseSA9IDwmcmVnX2F4cF9pcHNvdXQ+OworCQkJCWxkbzI0aW4tc3VwcGx5ID0gPCZyZWdfYXhwX2lwc291dD47CisJCQkJbGRvM2luLXN1cHBseSA9IDwmcmVnX2F4cF9pcHNvdXQ+OworCisJCQkJcmVndWxhdG9ycyB7CisJCQkJCXZkZF9ydGM6IGxkbzEgeworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTMwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCX07CisKKwkJCQkJYXZjYzogbGRvMiB7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJfTsKKworCQkJCQl2Y2NfY3NpMDogbGRvMyB7CisJCQkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw3MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzUwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQl9OworCisJCQkJCXZjY19jc2kxOiBsZG80IHsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEyNTAwMDA+OworCQkJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJCQl9OworCisJCQkJCXZkZF9jcHU6IGRjZGMyIHsKKwkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDcwMDAwMD47CisJCQkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyMjc1MDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQkJCX07CisKKwkJCQkJdmRkX2ludDogZGNkYzMgeworCQkJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NzAwMDAwPjsKKwkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDM1MDAwMDA+OworCQkJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlpMmMxOiBpMmNAMDFjMmIwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmaTJjMV9waW5zX2E+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCWdtYWM6IGV0aGVybmV0QDAxYzUwMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmdtYWNfcGluc19yZ21paV9hPjsKKwkJCXBoeSA9IDwmcGh5MT47CisJCQlwaHktbW9kZSA9ICJyZ21paSI7CisJCQlzdGF0dXMgPSAib2theSI7CisKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlyZWcgPSA8MT47CisJCQl9OworCQl9OworCX07CisKKwlsZWRzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQlwaW5jdHJsLTAgPSA8JmxlZF9waW5zX29saW51eGlub2xpbWU+OworCisJCWdyZWVuIHsKKwkJCWxhYmVsID0gImEyMC1vbGludXhpbm8tbGltZTI6Z3JlZW46dXNyIjsKKwkJCWdwaW9zID0gPCZwaW8gNyAyIDA+OworCQkJZGVmYXVsdC1zdGF0ZSA9ICJvbiI7CisJCX07CisJfTsKKworCXJlZ19haGNpXzV2OiBhaGNpLTV2IHsKKwkJcGluY3RybC0wID0gPCZhaGNpX3B3cl9waW5fb2xpbnV4aW5vbGltZT47CisJCWdwaW8gPSA8JnBpbyAyIDMgMD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJcmVnX3VzYjFfdmJ1czogdXNiMS12YnVzIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlyZWdfdXNiMl92YnVzOiB1c2IyLXZidXMgeworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXJlZ19heHBfaXBzb3V0OiBheHBfaXBzb3V0IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJheHAtaXBzb3V0IjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLXBjZHVpbm8zLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1wY2R1aW5vMy5kdHMKaW5kZXggMDQ2ZGZjMC4uOGRjYTQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLXBjZHVpbm8zLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtcGNkdWlubzMuZHRzCkBAIC0yLDEyICsyLDQ4IEBACiAgKiBDb3B5cmlnaHQgMjAxNCBab2x0YW4gSEVSUEFJCiAgKiBab2x0YW4gSEVSUEFJIDx3aWd5b3JpQHVpZDAuaHU+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogL2R0cy12MS87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCmluZGV4IDgyMDk3YzkuLjgyYTUyNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCkBAIC04LDE4ICs4LDE4IEBACiAgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQogICogd2hvbGUuCiAgKgotICogIGEpIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKICAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQogICogICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAogICogICAgIE1BIDAyMTEwLTEzMDEgVVNBCiAgKgpAQCAtNjQsNiArNjQsMjAgQEAKIAkJc2VyaWFsNyA9ICZ1YXJ0NzsKIAl9OwogCisJY2hvc2VuIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisKKwkJZnJhbWVidWZmZXJAMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzaW1wbGUtZnJhbWVidWZmZXIiLCAic2ltcGxlLWZyYW1lYnVmZmVyIjsKKwkJCWFsbHdpbm5lcixwaXBlbGluZSA9ICJkZV9iZTAtbGNkMC1oZG1pIjsKKwkJCWNsb2NrcyA9IDwmcGxsNSAxPiwgPCZhaGJfZ2F0ZXMgMzY+LCA8JmFoYl9nYXRlcyA0Mz4sCisJCQkJIDwmYWhiX2dhdGVzIDQ0PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKKwogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC01NTIsOCArNTY2LDggQEAKIAkJCXJlZy1uYW1lcyA9ICJwaHlfY3RybCIsICJwbXUxIiwgInBtdTIiOwogCQkJY2xvY2tzID0gPCZ1c2JfY2xrIDg+OwogCQkJY2xvY2stbmFtZXMgPSAidXNiX3BoeSI7Ci0JCQlyZXNldHMgPSA8JnVzYl9jbGsgMT4sIDwmdXNiX2NsayAyPjsKLQkJCXJlc2V0LW5hbWVzID0gInVzYjFfcmVzZXQiLCAidXNiMl9yZXNldCI7CisJCQlyZXNldHMgPSA8JnVzYl9jbGsgMD4sIDwmdXNiX2NsayAxPiwgPCZ1c2JfY2xrIDI+OworCQkJcmVzZXQtbmFtZXMgPSAidXNiMF9yZXNldCIsICJ1c2IxX3Jlc2V0IiwgInVzYjJfcmVzZXQiOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIApAQCAtNjc3LDYgKzY5MSwxMyBAQAogCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OwogCQkJfTsKIAorCQkJdWFydDNfcGluc19iOiB1YXJ0M0AxIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQSDAiLCAiUEgxIjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAidWFydDMiOworCQkJCWFsbHdpbm5lcixkcml2ZSA9IDwwPjsKKwkJCQlhbGx3aW5uZXIscHVsbCA9IDwwPjsKKwkJCX07CisKIAkJCXVhcnQ0X3BpbnNfYTogdWFydDRAMCB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEcxMCIsICJQRzExIjsKIAkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAidWFydDQiOwpAQCAtNzg0LDYgKzgwNSwxMyBAQAogCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OwogCQkJfTsKIAorCQkJc3BpMF9waW5zX2E6IHNwaTBAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEkxMCIsICJQSTExIiwgIlBJMTIiLCAiUEkxMyIsICJQSTE0IjsKKwkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAic3BpMCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwogCQkJc3BpMV9waW5zX2E6IHNwaTFAMCB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEkxNiIsICJQSTE3IiwgIlBJMTgiLCAiUEkxOSI7CiAJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gInNwaTEiOwpAQCAtODE5LDYgKzg0NywxMyBAQAogCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OwogCQkJfTsKIAorCQkJbW1jMl9waW5zX2E6IG1tYzJAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEM2IiwiUEM3IiwiUEM4IiwiUEM5IiwiUEMxMCIsIlBDMTEiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJtbWMyIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8Mj47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MT47CisJCQl9OworCiAJCQltbWMzX3BpbnNfYTogbW1jM0AwIHsKIAkJCQlhbGx3aW5uZXIscGlucyA9ICJQSTQiLCJQSTUiLCJQSTYiLCJQSTciLCJQSTgiLCJQSTkiOwogCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJtbWMzIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy1pcHBvLXE4aC12NS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMtaXBwby1xOGgtdjUuZHRzCmluZGV4IGU5YjhjY2EuLjdmMjExN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy1pcHBvLXE4aC12NS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLWlwcG8tcThoLXY1LmR0cwpAQCAtMywxMiArMyw0OCBAQAogICoKICAqIENoZW4tWXUgVHNhaSA8d2Vuc0Bjc2llLm9yZz4KICAqCi0gKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqIFRoaXMgZmlsZSBpcyBkdWFsLWxpY2Vuc2VkOiB5b3UgY2FuIHVzZSBpdCBlaXRoZXIgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiB0aGUgR1BMIG9yIHRoZSBYMTEgbGljZW5zZSwgYXQgeW91ciBvcHRpb24uIE5vdGUgdGhhdCB0aGlzIGR1YWwKKyAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCisgKiB3aG9sZS4KICAqCi0gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAvZHRzLXYxLzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLmR0c2kKaW5kZXggNjE0NmVmMS4uNjA4NmFkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLmR0c2kKQEAgLTgsMTggKzgsMTggQEAKICAqIGxpY2Vuc2luZyBvbmx5IGFwcGxpZXMgdG8gdGhpcyBmaWxlLCBhbmQgbm90IHRoaXMgcHJvamVjdCBhcyBhCiAgKiB3aG9sZS4KICAqCi0gKiAgYSkgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQogICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCiAgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCiAgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAtb3B0aW11cy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAtb3B0aW11cy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2OTQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC1vcHRpbXVzLmR0cwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IENoZW4tWXUgVHNhaQorICoKKyAqIENoZW4tWXUgVHNhaSA8d2Vuc0Bjc2llLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCisgKgorICogIGEpIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqICAgICBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIE9yLCBhbHRlcm5hdGl2ZWx5LAorICoKKyAqICBiKSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiAgICAgZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogICAgIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorICogICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogICAgIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiAgICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zOgorICoKKyAqICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogICAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqICAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKKyAqICAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiAgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgKiAgICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiAgICAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogICAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvZHRzLXYxLzsKKy9pbmNsdWRlLyAic3VuOWktYTgwLmR0c2kiCisKKy8geworCW1vZGVsID0gIk1lcnJpaSBBODAgT3B0aW11cyBCb2FyZCI7CisJY29tcGF0aWJsZSA9ICJtZXJyaWksYTgwLW9wdGltdXMiLCAiYWxsd2lubmVyLHN1bjlpLWE4MCI7CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJlYXJseXByaW50ayBjb25zb2xlPXR0eVMwLDExNTIwMCI7CisJfTsKKworCXNvYyB7CisJCXBpbzogcGluY3RybEAwNjAwMDgwMCB7CisJCQlpMmMzX3BpbnNfYTogaTJjM0AwIHsKKwkJCQkvKiBFbmFibGUgaW50ZXJuYWwgcHVsbC11cCAqLworCQkJCWFsbHdpbm5lcixwdWxsID0gPDE+OworCQkJfTsKKworCQkJbGVkX3BpbnNfb3B0aW11czogbGVkLXBpbnNAMCB7CisJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEgwIiwgIlBIMSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCisJCQl1YXJ0NF9waW5zX2E6IHVhcnQ0QDAgeworCQkJCS8qIEVuYWJsZSBpbnRlcm5hbCBwdWxsLXVwICovCisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MT47CisJCQl9OworCQl9OworCisJCXVhcnQwOiBzZXJpYWxAMDcwMDAwMDAgeworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmdWFydDBfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1YXJ0NDogc2VyaWFsQDA3MDAxMDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JnVhcnQ0X3BpbnNfYT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJaTJjMzogaTJjQDA3MDAzNDAwIHsKKwkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQlwaW5jdHJsLTAgPSA8JmkyYzNfcGluc19hPjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKwl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZsZWRfcGluc19vcHRpbXVzPjsKKworCQkvKiBUaGUgTEVEIG5hbWVzIG1hdGNoIHRob3NlIGZvdW5kIG9uIHRoZSBib2FyZCAqLworCisJCWxlZDIgeworCQkJbGFiZWwgPSAib3B0aW11czpsZWQyOnVzciI7CisJCQlncGlvcyA9IDwmcGlvIDcgMSAwPjsKKwkJfTsKKworCQkvKiBsZWQzIGlzIG9uIFBNMTUsIGluIFJfUElPICovCisKKwkJbGVkNCB7CisJCQlsYWJlbCA9ICJvcHRpbXVzOmxlZDQ6dXNyIjsKKwkJCWdwaW9zID0gPCZwaW8gNyAwIDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOWktYTgwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQ3MTRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOWktYTgwLmR0c2kKQEAgLTAsMCArMSw1MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBDaGVuLVl1IFRzYWkKKyAqCisgKiBDaGVuLVl1IFRzYWkgPHdlbnNAY3NpZS5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQ6IHlvdSBjYW4gdXNlIGl0IGVpdGhlciB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHUEwgb3IgdGhlIFgxMSBsaWNlbnNlLCBhdCB5b3VyIG9wdGlvbi4gTm90ZSB0aGF0IHRoaXMgZHVhbAorICogbGljZW5zaW5nIG9ubHkgYXBwbGllcyB0byB0aGlzIGZpbGUsIGFuZCBub3QgdGhpcyBwcm9qZWN0IGFzIGEKKyAqIHdob2xlLgorICoKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworL2luY2x1ZGUvICJza2VsZXRvbjY0LmR0c2kiCisKKy8geworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0MTsKKwkJc2VyaWFsMiA9ICZ1YXJ0MjsKKwkJc2VyaWFsMyA9ICZ1YXJ0MzsKKwkJc2VyaWFsNCA9ICZ1YXJ0NDsKKwkJc2VyaWFsNSA9ICZ1YXJ0NTsKKwkJc2VyaWFsNiA9ICZyX3VhcnQ7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1MDogY3B1QDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgwPjsKKwkJfTsKKworCQljcHUxOiBjcHVAMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTciOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDE+OworCQl9OworCisJCWNwdTI6IGNwdUAyIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNyI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4Mj47CisJCX07CisKKwkJY3B1MzogY3B1QDMgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE3IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgzPjsKKwkJfTsKKworCQljcHU0OiBjcHVAMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDEwMD47CisJCX07CisKKwkJY3B1NTogY3B1QDEwMSB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTE1IjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgxMDE+OworCQl9OworCisJCWNwdTY6IGNwdUAxMDIgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWExNSI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MTAyPjsKKwkJfTsKKworCQljcHU3OiBjcHVAMTAzIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hMTUiOworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDEwMz47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCS8qIDhHQiBtYXguIHdpdGggTFBBRSAqLworCQlyZWcgPSA8MCAweDIwMDAwMDAwIDB4MDIgMD47CisJfTsKKworCWNsb2NrcyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJLyoKKwkJICogbWFwIDY0IGJpdCBhZGRyZXNzIHJhbmdlIGRvd24gdG8gMzIgYml0cywKKwkJICogYXMgdGhlIHBlcmlwaGVyYWxzIGFyZSBhbGwgdW5kZXIgNTEyTUIuCisJCSAqLworCQlyYW5nZXMgPSA8MCAwIDAgMHgyMDAwMDAwMD47CisKKwkJb3NjMjRNOiBvc2MyNE1fY2xrIHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJvc2MyNE0iOworCQl9OworCisJCW9zYzMyazogb3NjMzJrX2NsayB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAib3NjMzJrIjsKKwkJfTsKKworCQlwbGw0OiBjbGtAMDYwMDAwMGMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLXBsbDQtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwMDBjIDB4ND47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAicGxsNCI7CisJCX07CisKKwkJcGxsMTI6IGNsa0AwNjAwMDAyYyB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtcGxsNC1jbGsiOworCQkJcmVnID0gPDB4MDYwMDAwMmMgMHg0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwbGwxMiI7CisJCX07CisKKwkJZ3RfY2xrOiBjbGtAMDYwMDAwNWMgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWd0LWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDA1YyAweDQ+OworCQkJY2xvY2tzID0gPCZvc2MyNE0+LCA8JnBsbDQ+LCA8JnBsbDEyPiwgPCZwbGwxMj47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiZ3QiOworCQl9OworCisJCWFoYjA6IGNsa0AwNjAwMDA2MCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtYWhiLWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDA2MCAweDQ+OworCQkJY2xvY2tzID0gPCZndF9jbGs+LCA8JnBsbDQ+LCA8JnBsbDEyPiwgPCZwbGwxMj47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYWhiMCI7CisJCX07CisKKwkJYWhiMTogY2xrQDA2MDAwMDY0IHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1haGItY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwMDY0IDB4ND47CisJCQljbG9ja3MgPSA8Jmd0X2Nsaz4sIDwmcGxsND4sIDwmcGxsMTI+LCA8JnBsbDEyPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhaGIxIjsKKwkJfTsKKworCQlhaGIyOiBjbGtAMDYwMDAwNjggeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFoYi1jbGsiOworCQkJcmVnID0gPDB4MDYwMDAwNjggMHg0PjsKKwkJCWNsb2NrcyA9IDwmZ3RfY2xrPiwgPCZwbGw0PiwgPCZwbGwxMj4sIDwmcGxsMTI+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFoYjIiOworCQl9OworCisJCWFwYjA6IGNsa0AwNjAwMDA3MCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtYXBiMC1jbGsiOworCQkJcmVnID0gPDB4MDYwMDAwNzAgMHg0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw0PjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhcGIwIjsKKwkJfTsKKworCQlhcGIxOiBjbGtAMDYwMDAwNzQgeworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFwYjEtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwMDc0IDB4ND47CisJCQljbG9ja3MgPSA8Jm9zYzI0TT4sIDwmcGxsND47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYXBiMSI7CisJCX07CisKKwkJY2NpNDAwX2NsazogY2xrQDA2MDAwMDc4IHsKKwkJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1ndC1jbGsiOworCQkJcmVnID0gPDB4MDYwMDAwNzggMHg0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPiwgPCZwbGw0PiwgPCZwbGwxMj4sIDwmcGxsMTI+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNjaTQwMCI7CisJCX07CisKKwkJYWhiMF9nYXRlczogY2xrQDA2MDAwNTgwIHsKKwkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjlpLWE4MC1haGIwLWdhdGVzLWNsayI7CisJCQlyZWcgPSA8MHgwNjAwMDU4MCAweDQ+OworCQkJY2xvY2tzID0gPCZhaGIwPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJhaGIwX2ZkIiwgImFoYjBfdmUiLCAiYWhiMF9ncHUiLAorCQkJCQkiYWhiMF9zcyIsICJhaGIwX3NkIiwgImFoYjBfbmFuZDEiLAorCQkJCQkiYWhiMF9uYW5kMCIsICJhaGIwX3NkcmFtIiwKKwkJCQkJImFoYjBfbWlwaV9oc2kiLCAiYWhiMF9zYXRhIiwgImFoYjBfdHMiLAorCQkJCQkiYWhiMF9zcGkwIiwiYWhiMF9zcGkxIiwgImFoYjBfc3BpMiIsCisJCQkJCSJhaGIwX3NwaTMiOworCQl9OworCisJCWFoYjFfZ2F0ZXM6IGNsa0AwNjAwMDU4NCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtYWhiMS1nYXRlcy1jbGsiOworCQkJcmVnID0gPDB4MDYwMDA1ODQgMHg0PjsKKwkJCWNsb2NrcyA9IDwmYWhiMT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYWhiMV91c2JvdGciLCAiYWhiMV91c2JoY2kiLAorCQkJCQkiYWhiMV9nbWFjIiwgImFoYjFfbXNnYm94IiwKKwkJCQkJImFoYjFfc3BpbmxvY2siLCAiYWhiMV9oc3RpbWVyIiwKKwkJCQkJImFoYjFfZG1hIjsKKwkJfTsKKworCQlhaGIyX2dhdGVzOiBjbGtAMDYwMDA1ODggeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFoYjItZ2F0ZXMtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwNTg4IDB4ND47CisJCQljbG9ja3MgPSA8JmFoYjI+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFoYjJfbGNkMCIsICJhaGIyX2xjZDEiLAorCQkJCQkiYWhiMl9lZHAiLCAiYWhiMl9jc2kiLCAiYWhiMl9oZG1pIiwKKwkJCQkJImFoYjJfZGUiLCAiYWhiMl9tcCIsICJhaGIyX21pcGlfZHNpIjsKKwkJfTsKKworCQlhcGIwX2dhdGVzOiBjbGtAMDYwMDA1OTAgeworCQkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLWFwYjAtZ2F0ZXMtY2xrIjsKKwkJCXJlZyA9IDwweDA2MDAwNTkwIDB4ND47CisJCQljbG9ja3MgPSA8JmFwYjA+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFwYjBfc3BkaWYiLCAiYXBiMF9waW8iLAorCQkJCQkiYXBiMF9hYzk3IiwgImFwYjBfaTJzMCIsICJhcGIwX2kyczEiLAorCQkJCQkiYXBiMF9scmFkYyIsICJhcGIwX2dwYWRjIiwgImFwYjBfdHdkIiwKKwkJCQkJImFwYjBfY2lydHgiOworCQl9OworCisJCWFwYjFfZ2F0ZXM6IGNsa0AwNjAwMDU5NCB7CisJCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtYXBiMS1nYXRlcy1jbGsiOworCQkJcmVnID0gPDB4MDYwMDA1OTQgMHg0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMT47CisJCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiYXBiMV9pMmMwIiwgImFwYjFfaTJjMSIsCisJCQkJCSJhcGIxX2kyYzIiLCAiYXBiMV9pMmMzIiwgImFwYjFfaTJjNCIsCisJCQkJCSJhcGIxX3VhcnQwIiwgImFwYjFfdWFydDEiLAorCQkJCQkiYXBiMV91YXJ0MiIsICJhcGIxX3VhcnQzIiwKKwkJCQkJImFwYjFfdWFydDQiLCAiYXBiMV91YXJ0NSI7CisJCX07CisJfTsKKworCXNvYyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJLyoKKwkJICogbWFwIDY0IGJpdCBhZGRyZXNzIHJhbmdlIGRvd24gdG8gMzIgYml0cywKKwkJICogYXMgdGhlIHBlcmlwaGVyYWxzIGFyZSBhbGwgdW5kZXIgNTEyTUIuCisJCSAqLworCQlyYW5nZXMgPSA8MCAwIDAgMHgyMDAwMDAwMD47CisKKwkJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckAwMWM0MTAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTctZ2ljIiwgImFybSxjb3J0ZXgtYTE1LWdpYyI7CisJCQlyZWcgPSA8MHgwMWM0MTAwMCAweDEwMDA+LAorCQkJICAgICAgPDB4MDFjNDIwMDAgMHgxMDAwPiwKKwkJCSAgICAgIDwweDAxYzQ0MDAwIDB4MjAwMD4sCisJCQkgICAgICA8MHgwMWM0NjAwMCAweDIwMDA+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMHhmMDQ+OworCQl9OworCisJCWFoYjBfcmVzZXRzOiByZXNldEAwNjAwMDVhMCB7CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtY2xvY2stcmVzZXQiOworCQkJcmVnID0gPDB4MDYwMDA1YTAgMHg0PjsKKwkJfTsKKworCQlhaGIxX3Jlc2V0czogcmVzZXRAMDYwMDA1YTQgeworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWNsb2NrLXJlc2V0IjsKKwkJCXJlZyA9IDwweDA2MDAwNWE0IDB4ND47CisJCX07CisKKwkJYWhiMl9yZXNldHM6IHJlc2V0QDA2MDAwNWE4IHsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1jbG9jay1yZXNldCI7CisJCQlyZWcgPSA8MHgwNjAwMDVhOCAweDQ+OworCQl9OworCisJCWFwYjBfcmVzZXRzOiByZXNldEAwNjAwMDViMCB7CisJCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtY2xvY2stcmVzZXQiOworCQkJcmVnID0gPDB4MDYwMDA1YjAgMHg0PjsKKwkJfTsKKworCQlhcGIxX3Jlc2V0czogcmVzZXRAMDYwMDA1YjQgeworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWNsb2NrLXJlc2V0IjsKKwkJCXJlZyA9IDwweDA2MDAwNWI0IDB4ND47CisJCX07CisKKwkJdGltZXJAMDYwMDBjMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLXRpbWVyIjsKKwkJCXJlZyA9IDwweDA2MDAwYzAwIDB4YTA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE4IDQ+LAorCQkJCSAgICAgPDAgMTkgND4sCisJCQkJICAgICA8MCAyMCA0PiwKKwkJCQkgICAgIDwwIDIxIDQ+LAorCQkJCSAgICAgPDAgMjIgND4sCisJCQkJICAgICA8MCAyMyA0PjsKKworCQkJY2xvY2tzID0gPCZvc2MyNE0+OworCQl9OworCisJCXBpbzogcGluY3RybEAwNjAwMDgwMCB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW45aS1hODAtcGluY3RybCI7CisJCQlyZWcgPSA8MHgwNjAwMDgwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTEgND4sCisJCQkJICAgICA8MCAxNSA0PiwKKwkJCQkgICAgIDwwIDE2IDQ+LAorCQkJCSAgICAgPDAgMTcgND4sCisJCQkJICAgICA8MCAxMjAgND47CisJCQljbG9ja3MgPSA8JmFwYjBfZ2F0ZXMgNT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCSNncGlvLWNlbGxzID0gPDM+OworCisJCQlpMmMzX3BpbnNfYTogaTJjM0AwIHsKKwkJCQlhbGx3aW5uZXIscGlucyA9ICJQRzEwIiwgIlBHMTEiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJpMmMzIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCisJCQl1YXJ0MF9waW5zX2E6IHVhcnQwQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBIMTIiLCAiUEgxMyI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gInVhcnQwIjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCisJCQl1YXJ0NF9waW5zX2E6IHVhcnQ0QDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBHMTIiLCAiUEcxMyIsICJQRzE0IiwgIlBHMTUiOworCQkJCWFsbHdpbm5lcixmdW5jdGlvbiA9ICJ1YXJ0NCI7CisJCQkJYWxsd2lubmVyLGRyaXZlID0gPDA+OworCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OworCQkJfTsKKwkJfTsKKworCQl1YXJ0MDogc2VyaWFsQDA3MDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQlyZWcgPSA8MHgwNzAwMDAwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMCA0PjsKKwkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAxNj47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDE2PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdWFydDE6IHNlcmlhbEAwNzAwMDQwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQkJcmVnID0gPDB4MDcwMDA0MDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEgND47CisJCQlyZWctc2hpZnQgPSA8Mj47CisJCQlyZWctaW8td2lkdGggPSA8ND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMTc+OworCQkJcmVzZXRzID0gPCZhcGIxX3Jlc2V0cyAxNz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQyOiBzZXJpYWxAMDcwMDA4MDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCXJlZyA9IDwweDA3MDAwODAwIDB4NDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAyIDQ+OworCQkJcmVnLXNoaWZ0ID0gPDI+OworCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDE4PjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMTg+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1YXJ0Mzogc2VyaWFsQDA3MDAwYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkdy1hcGItdWFydCI7CisJCQlyZWcgPSA8MHgwNzAwMGMwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMyA0PjsKKwkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAxOT47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDE5PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdWFydDQ6IHNlcmlhbEAwNzAwMTAwMCB7CisJCQljb21wYXRpYmxlID0gInNucHMsZHctYXBiLXVhcnQiOworCQkJcmVnID0gPDB4MDcwMDEwMDAgMHg0MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDQgND47CisJCQlyZWctc2hpZnQgPSA8Mj47CisJCQlyZWctaW8td2lkdGggPSA8ND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgMjA+OworCQkJcmVzZXRzID0gPCZhcGIxX3Jlc2V0cyAyMD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXVhcnQ1OiBzZXJpYWxAMDcwMDE0MDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCXJlZyA9IDwweDA3MDAxNDAwIDB4NDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCA1IDQ+OworCQkJcmVnLXNoaWZ0ID0gPDI+OworCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQkJY2xvY2tzID0gPCZhcGIxX2dhdGVzIDIxPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMjE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmMwOiBpMmNAMDcwMDI4MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWkyYyI7CisJCQlyZWcgPSA8MHgwNzAwMjgwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNiA0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAwPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlpMmMxOiBpMmNAMDcwMDJjMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWkyYyI7CisJCQlyZWcgPSA8MHgwNzAwMmMwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgNyA0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAxPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlpMmMyOiBpMmNAMDcwMDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWkyYyI7CisJCQlyZWcgPSA8MHgwNzAwMzAwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgOCA0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAyPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMj47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlpMmMzOiBpMmNAMDcwMDM0MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWkyYyI7CisJCQlyZWcgPSA8MHgwNzAwMzQwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgOSA0PjsKKwkJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyAzPjsKKwkJCXJlc2V0cyA9IDwmYXBiMV9yZXNldHMgMz47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJfTsKKworCQlpMmM0OiBpMmNAMDcwMDM4MDAgeworCQkJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLWkyYyI7CisJCQlyZWcgPSA8MHgwNzAwMzgwMCAweDQwMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMTAgND47CisJCQljbG9ja3MgPSA8JmFwYjFfZ2F0ZXMgND47CisJCQlyZXNldHMgPSA8JmFwYjFfcmVzZXRzIDQ+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCX07CisKKwkJcl93ZHQ6IHdhdGNoZG9nQDA4MDAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS13ZHQiOworCQkJcmVnID0gPDB4MDgwMDEwMDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDAgMzYgND47CisJCX07CisKKwkJcl91YXJ0OiBzZXJpYWxAMDgwMDI4MDAgeworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGR3LWFwYi11YXJ0IjsKKwkJCXJlZyA9IDwweDA4MDAyODAwIDB4NDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAzOCA0PjsKKwkJCXJlZy1zaGlmdCA9IDwyPjsKKwkJCXJlZy1pby13aWR0aCA9IDw0PjsKKwkJCWNsb2NrcyA9IDwmb3NjMjRNPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VueGktY29tbW9uLXJlZ3VsYXRvcnMuZHRzaQppbmRleCBjOWM1YjEwLi5kODg3NjYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW54aS1jb21tb24tcmVndWxhdG9ycy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bnhpLWNvbW1vbi1yZWd1bGF0b3JzLmR0c2kKQEAgLTMsMTIgKzMsNDggQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAxNCAtIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKiBUaGlzIGZpbGUgaXMgZHVhbC1saWNlbnNlZDogeW91IGNhbiB1c2UgaXQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdQTCBvciB0aGUgWDExIGxpY2Vuc2UsIGF0IHlvdXIgb3B0aW9uLiBOb3RlIHRoYXQgdGhpcyBkdWFsCisgKiBsaWNlbnNpbmcgb25seSBhcHBsaWVzIHRvIHRoaXMgZmlsZSwgYW5kIG5vdCB0aGlzIHByb2plY3QgYXMgYQorICogd2hvbGUuCiAgKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICBhKSBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqICAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiAgICAgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBPciwgYWx0ZXJuYXRpdmVseSwKKyAqCisgKiAgYikgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqICAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqICAgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqICAgICBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqICAgICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogICAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9uczoKKyAqCisgKiAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqICAgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiAgICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiAgICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqICAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICogICAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogICAgIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqICAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogLyB7CkBAIC0yMSw2ICs1NywxMyBAQAogCQkJCWFsbHdpbm5lcixwdWxsID0gPDA+OwogCQkJfTsKIAorCQkJdXNiMF92YnVzX3Bpbl9hOiB1c2IwX3ZidXNfcGluQDAgeworCQkJCWFsbHdpbm5lcixwaW5zID0gIlBCOSI7CisJCQkJYWxsd2lubmVyLGZ1bmN0aW9uID0gImdwaW9fb3V0IjsKKwkJCQlhbGx3aW5uZXIsZHJpdmUgPSA8MD47CisJCQkJYWxsd2lubmVyLHB1bGwgPSA8MD47CisJCQl9OworCiAJCQl1c2IxX3ZidXNfcGluX2E6IHVzYjFfdmJ1c19waW5AMCB7CiAJCQkJYWxsd2lubmVyLHBpbnMgPSAiUEg2IjsKIAkJCQlhbGx3aW5uZXIsZnVuY3Rpb24gPSAiZ3Bpb19vdXQiOwpAQCAtNDQsMTEgKzg3LDI0IEBACiAJCXJlZ3VsYXRvci1uYW1lID0gImFoY2ktNXYiOwogCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKIAkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOwogCQllbmFibGUtYWN0aXZlLWhpZ2g7CiAJCWdwaW8gPSA8JnBpbyAxIDggMD47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAorCXJlZ191c2IwX3ZidXM6IHVzYjAtdmJ1cyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZ1c2IwX3ZidXNfcGluX2E+OworCQlyZWd1bGF0b3ItbmFtZSA9ICJ1c2IwLXZidXMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJZ3BpbyA9IDwmcGlvIDEgOSAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJcmVnX3VzYjFfdmJ1czogdXNiMS12YnVzIHsKIAkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOwogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1jYXJkaHUuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMzAtY2FyZGh1LmR0c2kKaW5kZXggYTFiNjgyZS4uY2JmNWExYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmEzMC1jYXJkaHUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTMwLWNhcmRodS5kdHNpCkBAIC0xODksNyArMTg5LDcgQEAKIAogCQkvKiBBTFMgYW5kIFByb3hpbWl0eSBzZW5zb3IgKi8KIAkJaXNsMjkwMjhANDQgewotCQkJY29tcGF0aWJsZSA9ICJpc2lsLGlzbDI5MDI4IjsKKwkJCWNvbXBhdGlibGUgPSAiaXNsLGlzbDI5MDI4IjsKIAkJCXJlZyA9IDwweDQ0PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8+OwogCQkJaW50ZXJydXB0cyA9IDxURUdSQV9HUElPKEwsIDApIElSUV9UWVBFX0xFVkVMX0hJR0g+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmYtY29saWJyaS1ldmFsLXYzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy92Zi1jb2xpYnJpLWV2YWwtdjMuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmE0NTJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmYtY29saWJyaS1ldmFsLXYzLmR0c2kKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFRvcmFkZXggQUcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8geworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5TFAwLDExNTIwMCI7CisJfTsKKworCXJlZ3VsYXRvcnMgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJc3lzXzV2MF9yZWc6IHJlZ3VsYXRvckAwIHsKKwkJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJCXJlZyA9IDwwPjsKKwkJCXJlZ3VsYXRvci1uYW1lID0gIjV2MCI7CisJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJfTsKKworCQkvKiBVU0JIX1BFTiAqLworCQl1c2JoX3ZidXNfcmVnOiByZWd1bGF0b3JAMSB7CisJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYmgxX3JlZz47CisJCQlyZWcgPSA8MT47CisJCQlyZWd1bGF0b3ItbmFtZSA9ICJ1c2JoX3ZidXMiOworCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJCWdwaW8gPSA8JmdwaW8zIDE5IEdQSU9fQUNUSVZFX0xPVz47CisJCQl2aW4tc3VwcGx5ID0gPCZzeXNfNXYwX3JlZz47CisJCX07CisJfTsKK307CisKKyZibCB7CisJYnJpZ2h0bmVzcy1sZXZlbHMgPSA8MCA0IDggMTYgMzIgNjQgMTI4IDI1NT47CisJZGVmYXVsdC1icmlnaHRuZXNzLWxldmVsID0gPDY+OworCXN0YXR1cyAgPSAib2theSI7Cit9OworCismZXNkaGMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lc2RoYzE+OworCWJ1cy13aWR0aCA9IDw0PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZmVjMSB7CisJcGh5LW1vZGUgPSAicm1paSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZmVjMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmkyYzAgeworCXN0YXR1cyA9ICJva2F5IjsKKworCS8qIE00MVQwTTYgcmVhbCB0aW1lIGNsb2NrIG9uIGNhcnJpZXIgYm9hcmQgKi8KKwlydGM6IG00MXQwbTZANjggeworCQljb21wYXRpYmxlID0gInN0LG00MXQwMCI7CisJCXJlZyA9IDwweDY4PjsKKwl9OworfTsKKworJnB3bTAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwd20xIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQyIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNiaDEgeworCXZidXMtc3VwcGx5ID0gPCZ1c2JoX3ZidXNfcmVnPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92Zi1jb2xpYnJpLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy92Zi1jb2xpYnJpLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJmNTcyOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmLWNvbGlicmkuZHRzaQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFRvcmFkZXggQUcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8geworCWJsOiBiYWNrbGlnaHQgeworCQljb21wYXRpYmxlID0gInB3bS1iYWNrbGlnaHQiOworCQlwd21zID0gPCZwd20wIDAgNTAwMDAwMCAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworfTsKKworJmFkYzAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZhZGMxIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZWRtYTAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZlc2RoYzEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2VzZGhjMT47CisJYnVzLXdpZHRoID0gPDQ+OworCWNkLWdwaW9zID0gPCZncGlvMiAxMCBHUElPX0FDVElWRV9MT1c+OworfTsKKworJmZlYzEgeworCXBoeS1tb2RlID0gInJtaWkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZlYzE+OworfTsKKworJmkyYzAgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX2kyYzA+OworfTsKKworJnB3bTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3B3bTA+OworfTsKKworJnB3bTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3B3bTE+OworfTsKKworJnVhcnQwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MD47Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQxPjsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDI+OworfTsKKworJnVzYmRldjAgeworCWRpc2FibGUtb3Zlci1jdXJyZW50OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JoMSB7CisJZGlzYWJsZS1vdmVyLWN1cnJlbnQ7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYm1pc2MwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNibWlzYzEgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JwaHkwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdXNicGh5MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmlvbXV4YyB7CisJdmY2MTAtY29saWJyaSB7CisJCXBpbmN0cmxfZ3Bpb19leHQ6IGdwaW9fZXh0IHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEQxMF9fR1BJT184OQkweDIyZWQgLyogRVhUX0lPXzAgKi8KKwkJCQlWRjYxMF9QQURfUFREOV9fR1BJT184OAkJMHgyMmVkIC8qIEVYVF9JT18xICovCisJCQkJVkY2MTBfUEFEX1BURDI2X19HUElPXzY4CTB4MjJlZCAvKiBFWFRfSU9fMiAqLworCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2VzZGhjMTogZXNkaGMxZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEEyNF9fRVNESEMxX0NMSwkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRBMjVfX0VTREhDMV9DTUQJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQTI2X19FU0RIQzFfREFUMAkweDMxZWYKKwkJCQlWRjYxMF9QQURfUFRBMjdfX0VTREhDMV9EQVQxCTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEEyOF9fRVNESEMxX0RBVEEyCTB4MzFlZgorCQkJCVZGNjEwX1BBRF9QVEEyOV9fRVNESEMxX0RBVDMJMHgzMWVmCisJCQkJVkY2MTBfUEFEX1BUQjIwX19HUElPXzQyCTB4MjE5ZAorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX2ZlYzE6IGZlYzFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BUQzlfX0VORVRfUk1JSTFfTURDCQkweDMwZDIKKwkJCQlWRjYxMF9QQURfUFRDMTBfX0VORVRfUk1JSTFfTURJTwkweDMwZDMKKwkJCQlWRjYxMF9QQURfUFRDMTFfX0VORVRfUk1JSTFfQ1JTCQkweDMwZDEKKwkJCQlWRjYxMF9QQURfUFRDMTJfX0VORVRfUk1JSV9SWEQxCQkweDMwZDEKKwkJCQlWRjYxMF9QQURfUFRDMTNfX0VORVRfUk1JSTFfUlhEMAkweDMwZDEKKwkJCQlWRjYxMF9QQURfUFRDMTRfX0VORVRfUk1JSTFfUlhFUgkweDMwZDEKKwkJCQlWRjYxMF9QQURfUFRDMTVfX0VORVRfUk1JSTFfVFhEMQkweDMwZDIKKwkJCQlWRjYxMF9QQURfUFRDMTZfX0VORVRfUk1JSTFfVFhEMAkweDMwZDIKKwkJCQlWRjYxMF9QQURfUFRDMTdfX0VORVRfUk1JSTFfVFhFTgkweDMwZDIKKwkJCT47CisJCX07CisKKwkJcGluY3RybF9pMmMwOiBpMmMwZ3JwIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEIxNF9fSTJDMF9TQ0wJCTB4MzdmZgorCQkJCVZGNjEwX1BBRF9QVEIxNV9fSTJDMF9TREEJCTB4MzdmZgorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3B3bTA6IHB3bTBncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BUQjBfX0ZUTTBfQ0gwCQkweDExODIKKwkJCQlWRjYxMF9QQURfUFRCMV9fRlRNMF9DSDEJCTB4MTE4MgorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3B3bTE6IHB3bTFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BUQjhfX0ZUTTFfQ0gwCQkweDExODIKKwkJCQlWRjYxMF9QQURfUFRCOV9fRlRNMV9DSDEJCTB4MTE4MgorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VhcnQwOiB1YXJ0MGdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFRCMTBfX1VBUlQwX1RYCQkweDIxYTIKKwkJCQlWRjYxMF9QQURfUFRCMTFfX1VBUlQwX1JYCQkweDIxYTEKKwkJCT47CisJCX07CisKKwkJcGluY3RybF91YXJ0MTogdWFydDFncnAgeworCQkJZnNsLHBpbnMgPSA8CisJCQkJVkY2MTBfUEFEX1BUQjRfX1VBUlQxX1RYCQkweDIxYTIKKwkJCQlWRjYxMF9QQURfUFRCNV9fVUFSVDFfUlgJCTB4MjFhMQorCQkJPjsKKwkJfTsKKworCQlwaW5jdHJsX3VhcnQyOiB1YXJ0MmdycCB7CisJCQlmc2wscGlucyA9IDwKKwkJCQlWRjYxMF9QQURfUFREMF9fVUFSVDJfVFgJCTB4MjFhMgorCQkJCVZGNjEwX1BBRF9QVEQxX19VQVJUMl9SWAkJMHgyMWExCisJCQkJVkY2MTBfUEFEX1BURDJfX1VBUlQyX1JUUwkJMHgyMWEyCisJCQkJVkY2MTBfUEFEX1BURDNfX1VBUlQyX0NUUwkJMHgyMWExCisJCQk+OworCQl9OworCisJCXBpbmN0cmxfdXNiaDFfcmVnOiBncGlvX3VzYl92YnVzIHsKKwkJCWZzbCxwaW5zID0gPAorCQkJCVZGNjEwX1BBRF9QVEQ0X19HUElPXzgzCQkJMHgyMmVkCisJCQk+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY1MDAtY29saWJyaS1ldmFsLXYzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNTAwLWNvbGlicmktZXZhbC12My5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjNzgyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNTAwLWNvbGlicmktZXZhbC12My5kdHMKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFRvcmFkZXggQUcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgInZmNTAwLWNvbGlicmkuZHRzaSIKKyNpbmNsdWRlICJ2Zi1jb2xpYnJpLWV2YWwtdjMuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiVG9yYWRleCBDb2xpYnJpIFZGNTAgb24gQ29saWJyaSBFdmFsdWF0aW9uIEJvYXJkIjsKKwljb21wYXRpYmxlID0gInRvcmFkZXgsdmY1MDAtY29saWJyaV92ZjUwLW9uLWV2YWwiLCAidG9yYWRleCx2ZjUwMC1jb2xpYnJpX3ZmNTAiLCAiZnNsLHZmNTAwIjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92ZjUwMC1jb2xpYnJpLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy92ZjUwMC1jb2xpYnJpLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlMzRhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNTAwLWNvbGlicmkuZHRzaQpAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgVG9yYWRleCBBRworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgInZmNTAwLmR0c2kiCisjaW5jbHVkZSAidmYtY29saWJyaS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJUb3JhZGV4IENvbGlicmkgVkY1MCBDT00iOworCWNvbXBhdGlibGUgPSAidG9yYWRleCx2ZjYxMC1jb2xpYnJpX3ZmNTAiLCAiZnNsLHZmNTAwIjsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwweDgwMDAwMDAwIDB4ODAwMDAwMD47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92ZjUwMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY1MDAuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTY3MDA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY1MDAuZHRzaQpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKKyNpbmNsdWRlICJ2Znh4eC5kdHNpIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KKworLyB7CisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlhNV9jcHU6IGNwdUAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNSI7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MD47CisJCX07CisJfTsKKworCXNvYyB7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OworCisJCWFpcHMtYnVzQDQwMDAwMDAwIHsKKworCQkJaW50YzogaW50ZXJydXB0LWNvbnRyb2xsZXJANDAwMDIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOS1naWMiOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJcmVnID0gPDB4NDAwMDMwMDAgMHgxMDAwPiwKKwkJCQkgICAgICA8MHg0MDAwMjEwMCAweDEwMD47CisJCQl9OworCisJCQlnbG9iYWxfdGltZXI6IHRpbWVyQDQwMDAyMjAwIHsKKwkJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktZ2xvYmFsLXRpbWVyIjsKKwkJCQlyZWcgPSA8MHg0MDAwMjIwMCAweDIwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19QTEFURk9STV9CVVM+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmFkYzAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA1MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZhZGMxIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTQgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismY2FuMCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDU4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJmNhbjEgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA1OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZkc3BpMCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDY3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJmVkbWEwIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCTxHSUNfU1BJIDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJaW50ZXJydXB0LW5hbWVzID0gImVkbWEtdHgiLCAiZWRtYS1lcnIiOworfTsKKworJmVkbWExIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQk8R0lDX1NQSSAxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwlpbnRlcnJ1cHQtbmFtZXMgPSAiZWRtYS10eCIsICJlZG1hLWVyciI7Cit9OworCismZXNkaGMxIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjggSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismZmVjMCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJmZlYzEgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA3OSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZmdG0geworCWludGVycnVwdHMgPSA8R0lDX1NQSSA0NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZncGlvMSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEwNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZncGlvMiB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZncGlvMyB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEwOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZncGlvNCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZncGlvNSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZpMmMwIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzEgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismcGl0IHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMzkgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismcXNwaTAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSAyNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZzYWkyIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODYgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismdWFydDAgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA2MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZ1YXJ0MSB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDYyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVhcnQyIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNjMgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismdWFydDMgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA2NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CisKKyZ1YXJ0NCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDY1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVhcnQ1IHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNjYgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismdXNiZGV2MCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDc1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVzYmgxIHsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNzYgSVJRX1RZUEVfTEVWRUxfSElHSD47Cit9OworCismdXNicGh5MCB7CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDUwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworfTsKKworJnVzYnBoeTEgeworCWludGVycnVwdHMgPSA8R0lDX1NQSSA1MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb2xpYnJpLWV2YWwtdjMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS1ldmFsLXYzLmR0cwppbmRleCA3ZmIzMDY2Li4xMGViZTk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb2xpYnJpLWV2YWwtdjMuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvbGlicmktZXZhbC12My5kdHMKQEAgLTksMzggKzksOSBAQAogCiAvZHRzLXYxLzsKICNpbmNsdWRlICJ2ZjYxMC1jb2xpYnJpLmR0c2kiCisjaW5jbHVkZSAidmYtY29saWJyaS1ldmFsLXYzLmR0c2kiCiAKIC8gewogCW1vZGVsID0gIlRvcmFkZXggQ29saWJyaSBWRjYxIG9uIENvbGlicmkgRXZhbHVhdGlvbiBCb2FyZCI7CiAJY29tcGF0aWJsZSA9ICJ0b3JhZGV4LHZmNjEwLWNvbGlicmlfdmY2MS1vbi1ldmFsIiwgInRvcmFkZXgsdmY2MTAtY29saWJyaV92ZjYxIiwgImZzbCx2ZjYxMCI7Ci0KLQljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eUxQMCwxMTUyMDAiOwotCX07Ci19OwotCi0mZXNkaGMxIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lc2RoYzE+OwotCWJ1cy13aWR0aCA9IDw0PjsKLQlzdGF0dXMgPSAib2theSI7Ci19OwotCi0mZmVjMSB7Ci0JcGh5LW1vZGUgPSAicm1paSI7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZmVjMT47Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKLQotJnVhcnQwIHsKLQlzdGF0dXMgPSAib2theSI7Ci19OwotCi0mdWFydDEgewotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KLSZ1YXJ0MiB7Ci0Jc3RhdHVzID0gIm9rYXkiOwotfTsKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS5kdHNpCmluZGV4IDBjZDgzNDMuLjE5ZmUwNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvbGlicmkuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb2xpYnJpLmR0c2kKQEAgLTgsNiArOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgInZmNjEwLmR0c2kiCisjaW5jbHVkZSAidmYtY29saWJyaS5kdHNpIgogCiAvIHsKIAltb2RlbCA9ICJUb3JhZGV4IENvbGlicmkgVkY2MSBDT00iOwpAQCAtMTYsMTA4ICsxNyw5IEBACiAJbWVtb3J5IHsKIAkJcmVnID0gPDB4ODAwMDAwMDAgMHgxMDAwMDAwMD47CiAJfTsKLQotCWNsb2NrcyB7Ci0JCWVuZXRfZXh0IHsKLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKLQkJfTsKLQl9OwotCi19OwotCi0mZXNkaGMxIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lc2RoYzE+OwotCWJ1cy13aWR0aCA9IDw0PjsKLX07Ci0KLSZmZWMxIHsKLQlwaHktbW9kZSA9ICJybWlpIjsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF9mZWMxPjsKIH07CiAKICZMMiB7CiAJYXJtLGRhdGEtbGF0ZW5jeSA9IDwyIDEgMj47CiAJYXJtLHRhZy1sYXRlbmN5ID0gPDMgMiAzPjsKIH07Ci0KLSZ1YXJ0MCB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDA+OwotfTsKLQotJnVhcnQxIHsKLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwotCXBpbmN0cmwtMCA9IDwmcGluY3RybF91YXJ0MT47Ci19OwotCi0mdWFydDIgewotCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JcGluY3RybC0wID0gPCZwaW5jdHJsX3VhcnQyPjsKLX07Ci0KLSZ1c2JkZXYwIHsKLQlkaXNhYmxlLW92ZXItY3VycmVudDsKLQlzdGF0dXMgPSAib2theSI7Ci19OwotCi0mdXNiaDEgewotCWRpc2FibGUtb3Zlci1jdXJyZW50OwotCXN0YXR1cyA9ICJva2F5IjsKLX07Ci0KLSZpb211eGMgewotCXZmNjEwLWNvbGlicmkgewotCQlwaW5jdHJsX2VzZGhjMTogZXNkaGMxZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCVZGNjEwX1BBRF9QVEEyNF9fRVNESEMxX0NMSwkweDMxZWYKLQkJCQlWRjYxMF9QQURfUFRBMjVfX0VTREhDMV9DTUQJMHgzMWVmCi0JCQkJVkY2MTBfUEFEX1BUQTI2X19FU0RIQzFfREFUMAkweDMxZWYKLQkJCQlWRjYxMF9QQURfUFRBMjdfX0VTREhDMV9EQVQxCTB4MzFlZgotCQkJCVZGNjEwX1BBRF9QVEEyOF9fRVNESEMxX0RBVEEyCTB4MzFlZgotCQkJCVZGNjEwX1BBRF9QVEEyOV9fRVNESEMxX0RBVDMJMHgzMWVmCi0JCQkJVkY2MTBfUEFEX1BUQjIwX19HUElPXzQyCTB4MjE5ZAotCQkJPjsKLQkJfTsKLQotCQlwaW5jdHJsX2ZlYzE6IGZlYzFncnAgewotCQkJZnNsLHBpbnMgPSA8Ci0JCQkJVkY2MTBfUEFEX1BUQzlfX0VORVRfUk1JSTFfTURDCQkweDMwZDIKLQkJCQlWRjYxMF9QQURfUFRDMTBfX0VORVRfUk1JSTFfTURJTwkweDMwZDMKLQkJCQlWRjYxMF9QQURfUFRDMTFfX0VORVRfUk1JSTFfQ1JTCQkweDMwZDEKLQkJCQlWRjYxMF9QQURfUFRDMTJfX0VORVRfUk1JSV9SWEQxCQkweDMwZDEKLQkJCQlWRjYxMF9QQURfUFRDMTNfX0VORVRfUk1JSTFfUlhEMAkweDMwZDEKLQkJCQlWRjYxMF9QQURfUFRDMTRfX0VORVRfUk1JSTFfUlhFUgkweDMwZDEKLQkJCQlWRjYxMF9QQURfUFRDMTVfX0VORVRfUk1JSTFfVFhEMQkweDMwZDIKLQkJCQlWRjYxMF9QQURfUFRDMTZfX0VORVRfUk1JSTFfVFhEMAkweDMwZDIKLQkJCQlWRjYxMF9QQURfUFRDMTdfX0VORVRfUk1JSTFfVFhFTgkweDMwZDIKLQkJCT47Ci0JCX07Ci0KLQkJcGluY3RybF91YXJ0MDogdWFydDBncnAgewotCQkJZnNsLHBpbnMgPSA8Ci0JCQkJVkY2MTBfUEFEX1BUQjEwX19VQVJUMF9UWAkJMHgyMWEyCi0JCQkJVkY2MTBfUEFEX1BUQjExX19VQVJUMF9SWAkJMHgyMWExCi0JCQk+OwotCQl9OwotCi0JCXBpbmN0cmxfdWFydDE6IHVhcnQxZ3JwIHsKLQkJCWZzbCxwaW5zID0gPAotCQkJCVZGNjEwX1BBRF9QVEI0X19VQVJUMV9UWAkJMHgyMWEyCi0JCQkJVkY2MTBfUEFEX1BUQjVfX1VBUlQxX1JYCQkweDIxYTEKLQkJCT47Ci0JCX07Ci0KLQkJcGluY3RybF91YXJ0MjogdWFydDJncnAgewotCQkJZnNsLHBpbnMgPSA8Ci0JCQkJVkY2MTBfUEFEX1BURDBfX1VBUlQyX1RYCQkweDIxYTIKLQkJCQlWRjYxMF9QQURfUFREMV9fVUFSVDJfUlgJCTB4MjFhMQotCQkJCVZGNjEwX1BBRF9QVEQyX19VQVJUMl9SVFMJCTB4MjFhMgotCQkJCVZGNjEwX1BBRF9QVEQzX19VQVJUMl9DVFMJCTB4MjFhMQotCQkJPjsKLQkJfTsKLQl9OwotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvc21pYy5kdHMgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb3NtaWMuZHRzCmluZGV4IGRlMWI0NTMuLmZkODc1OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvc21pYy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29zbWljLmR0cwpAQCAtMjMsMTQgKzIzLDE2IEBACiAJCXJlZyA9IDwweDgwMDAwMDAwIDB4MTAwMDAwMDA+OwogCX07CiAKLQljbG9ja3MgewotCQllbmV0X2V4dCB7Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47Ci0JCX07CisJZW5ldF9leHQ6IGVuZXRfZXh0IHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKIAl9OworfTsKIAorJmNsa3MgeworCWNsb2NrcyA9IDwmc3hvc2M+LCA8JmZ4b3NjPiwgPCZlbmV0X2V4dD47CisJY2xvY2stbmFtZXMgPSAic3hvc2MiLCAiZnhvc2MiLCAiZW5ldF9leHQiOwogfTsKIAogJmVzZGhjMSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC10d3IuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtdHdyLmR0cwppbmRleCAxODliNjk3Li5hMGY3NjIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC10d3IuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLXR3ci5kdHMKQEAgLTIyLDE4ICsyMiwxNiBAQAogCQlyZWcgPSA8MHg4MDAwMDAwMCAweDgwMDAwMDA+OwogCX07CiAKLQljbG9ja3MgewotCQlhdWRpb19leHQgewotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MjQ1NzYwMDA+OwotCQl9OworCWF1ZGlvX2V4dDogbWNsa19vc2MgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MjQ1NzYwMDA+OworCX07CiAKLQkJZW5ldF9leHQgewotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OwotCQl9OworCWVuZXRfZXh0OiBldGhfb3NjIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKIAl9OwogCiAJcmVndWxhdG9ycyB7CkBAIC05NSw2ICs5MywxMSBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZjbGtzIHsKKwljbG9ja3MgPSA8JnN4b3NjPiwgPCZmeG9zYz4sIDwmZW5ldF9leHQ+LCA8JmF1ZGlvX2V4dD47CisJY2xvY2stbmFtZXMgPSAic3hvc2MiLCAiZnhvc2MiLCAiZW5ldF9leHQiLCAiYXVkaW9fZXh0IjsKK307CisKICZkc3BpMCB7CiAJYnVzLW51bSA9IDwwPjsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMTEyLDEwICsxMTUsMTUgQEAKIAl9OwogfTsKIAorJmVkbWEwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCiAmZXNkaGMxIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lc2RoYzE+OwogCWJ1cy13aWR0aCA9IDw0PjsKKwljZC1ncGlvcyA9IDwmZ3BpbzUgNiBHUElPX0FDVElWRV9MT1c+OwogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKQEAgLTI4NSwzICsyOTMsMTkgQEAKIAlkaXNhYmxlLW92ZXItY3VycmVudDsKIAlzdGF0dXMgPSAib2theSI7CiB9OworCismdXNibWlzYzAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JtaXNjMSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVzYnBoeTAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1c2JwaHkxIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLmR0c2kKaW5kZXggNGQyZWMzMi4uNWY4ZWIxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC5kdHNpCkBAIC03LDQ4MSArNywxOSBAQAogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSAic2tlbGV0b24uZHRzaSIKLSNpbmNsdWRlICJ2ZjYxMC1waW5mdW5jLmgiCi0jaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svdmY2MTAtY2xvY2suaD4KLSNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlICJ2ZjUwMC5kdHNpIgogCi0vIHsKLQlhbGlhc2VzIHsKLQkJY2FuMCA9ICZjYW4wOwotCQljYW4xID0gJmNhbjE7Ci0JCXNlcmlhbDAgPSAmdWFydDA7Ci0JCXNlcmlhbDEgPSAmdWFydDE7Ci0JCXNlcmlhbDIgPSAmdWFydDI7Ci0JCXNlcmlhbDMgPSAmdWFydDM7Ci0JCXNlcmlhbDQgPSAmdWFydDQ7Ci0JCXNlcmlhbDUgPSAmdWFydDU7Ci0JCWdwaW8wID0gJmdwaW8xOwotCQlncGlvMSA9ICZncGlvMjsKLQkJZ3BpbzIgPSAmZ3BpbzM7Ci0JCWdwaW8zID0gJmdwaW80OwotCQlncGlvNCA9ICZncGlvNTsKLQkJdXNicGh5MCA9ICZ1c2JwaHkwOwotCQl1c2JwaHkxID0gJnVzYnBoeTE7Ci0JfTsKKyZhNV9jcHUgeworCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKK307CiAKLQljcHVzIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCi0JCWNwdUAwIHsKLQkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNSI7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDB4MD47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47Ci0JCX07Ci0JfTsKLQotCWNsb2NrcyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQlzeG9zYyB7Ci0JCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47Ci0JCX07Ci0KLQkJZnhvc2MgewotCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MjQwMDAwMDA+OwotCQl9OwotCX07Ci0KLQlzb2MgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OwotCQlyYW5nZXM7Ci0KLQkJYWlwczA6IGFpcHMtYnVzQDQwMDAwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGFpcHMtYnVzIiwgInNpbXBsZS1idXMiOwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OwotCQkJcmVnID0gPDB4NDAwMDAwMDAgMHg3MDAwMD47Ci0JCQlyYW5nZXM7Ci0KLQkJCWludGM6IGludGVycnVwdC1jb250cm9sbGVyQDQwMDAyMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTktZ2ljIjsKLQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwotCQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJCXJlZyA9IDwweDQwMDAzMDAwIDB4MTAwMD4sCi0JCQkJICAgICAgPDB4NDAwMDIxMDAgMHgxMDA+OwotCQkJfTsKLQotCQkJTDI6IGwyLWNhY2hlQDQwMDA2MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImFybSxwbDMxMC1jYWNoZSI7Ci0JCQkJcmVnID0gPDB4NDAwMDYwMDAgMHgxMDAwPjsKLQkJCQljYWNoZS11bmlmaWVkOwotCQkJCWNhY2hlLWxldmVsID0gPDI+OwotCQkJCWFybSxkYXRhLWxhdGVuY3kgPSA8MSAxIDE+OwotCQkJCWFybSx0YWctbGF0ZW5jeSA9IDwyIDIgMj47Ci0JCQl9OwotCi0JCQllZG1hMDogZG1hLWNvbnRyb2xsZXJANDAwMTgwMDAgewotCQkJCSNkbWEtY2VsbHMgPSA8Mj47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZWRtYSI7Ci0JCQkJcmVnID0gPDB4NDAwMTgwMDAgMHgyMDAwPiwKLQkJCQkJPDB4NDAwMjQwMDAgMHgxMDAwPiwKLQkJCQkJPDB4NDAwMjUwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgOCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKLQkJCQkJCTwwIDkgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJaW50ZXJydXB0LW5hbWVzID0gImVkbWEtdHgiLCAiZWRtYS1lcnIiOwotCQkJCWRtYS1jaGFubmVscyA9IDwzMj47Ci0JCQkJY2xvY2stbmFtZXMgPSAiZG1hbXV4MCIsICJkbWFtdXgxIjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0RNQU1VWDA+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0RNQU1VWDE+OwotCQkJfTsKLQotCQkJY2FuMDogZmxleGNhbkA0MDAyMDAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZmxleGNhbiI7Ci0JCQkJcmVnID0gPDB4NDAwMjAwMDAgMHg0MDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNTggSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19GTEVYQ0FOMD4sCi0JCQkJCSA8JmNsa3MgVkY2MTBfQ0xLX0ZMRVhDQU4wPjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAicGVyIjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJdWFydDA6IHNlcmlhbEA0MDAyNzAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKLQkJCQlyZWcgPSA8MHg0MDAyNzAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA2MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQwPjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciOwotCQkJCWRtYXMgPSA8JmVkbWEwIDAgMj4sCi0JCQkJCTwmZWRtYTAgMCAzPjsKLQkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCXVhcnQxOiBzZXJpYWxANDAwMjgwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7Ci0JCQkJcmVnID0gPDB4NDAwMjgwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNjIgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VQVJUMT47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKLQkJCQlkbWFzID0gPCZlZG1hMCAwIDQ+LAotCQkJCQk8JmVkbWEwIDAgNT47Ci0JCQkJZG1hLW5hbWVzID0gInJ4IiwidHgiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQl1YXJ0Mjogc2VyaWFsQDQwMDI5MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1scHVhcnQiOwotCQkJCXJlZyA9IDwweDQwMDI5MDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDYzIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVUFSVDI+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7Ci0JCQkJZG1hcyA9IDwmZWRtYTAgMCA2PiwKLQkJCQkJPCZlZG1hMCAwIDc+OwotCQkJCWRtYS1uYW1lcyA9ICJyeCIsInR4IjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJdWFydDM6IHNlcmlhbEA0MDAyYTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKLQkJCQlyZWcgPSA8MHg0MDAyYTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA2NCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQzPjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciOwotCQkJCWRtYXMgPSA8JmVkbWEwIDAgOD4sCi0JCQkJCTwmZWRtYTAgMCA5PjsKLQkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCWRzcGkwOiBkc3BpMEA0MDAyYzAwMCB7Ci0JCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZHNwaSI7Ci0JCQkJcmVnID0gPDB4NDAwMmMwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNjcgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19EU1BJMD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiZHNwaSI7Ci0JCQkJc3BpLW51bS1jaGlwc2VsZWN0cyA9IDw1PjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJc2FpMjogc2FpQDQwMDMxMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1zYWkiOwotCQkJCXJlZyA9IDwweDQwMDMxMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDg2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfU0FJMj47Ci0JCQkJY2xvY2stbmFtZXMgPSAic2FpIjsKLQkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwotCQkJCWRtYXMgPSA8JmVkbWEwIDAgMjE+LAotCQkJCQk8JmVkbWEwIDAgMjA+OwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQlwaXQ6IHBpdEA0MDAzNzAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtcGl0IjsKLQkJCQlyZWcgPSA8MHg0MDAzNzAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAzOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1BJVD47Ci0JCQkJY2xvY2stbmFtZXMgPSAicGl0IjsKLQkJCX07Ci0KLQkJCXB3bTA6IHB3bUA0MDAzODAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZnRtLXB3bSI7Ci0JCQkJI3B3bS1jZWxscyA9IDwzPjsKLQkJCQlyZWcgPSA8MHg0MDAzODAwMCAweDEwMDA+OwotCQkJCWNsb2NrLW5hbWVzID0gImZ0bV9zeXMiLCAiZnRtX2V4dCIsCi0JCQkJCSAgICAgICJmdG1fZml4IiwgImZ0bV9jbnRfY2xrX2VuIjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0ZUTTA+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTBfRVhUX1NFTD4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMF9GSVhfU0VMPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0wX0VYVF9GSVhfRU4+OwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQlhZGMwOiBhZGNANDAwM2IwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWFkYyI7Ci0JCQkJcmVnID0gPDB4NDAwM2IwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNTMgMHgwND47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19BREMwPjsKLQkJCQljbG9jay1uYW1lcyA9ICJhZGMiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQl3ZG9nQDQwMDNlMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC13ZHQiLCAiZnNsLGlteDIxLXdkdCI7Ci0JCQkJcmVnID0gPDB4NDAwM2UwMDAgMHgxMDAwPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1dEVD47Ci0JCQkJY2xvY2stbmFtZXMgPSAid2RvZyI7Ci0JCQl9OwotCi0JCQlxc3BpMDogcXVhZHNwaUA0MDA0NDAwMCB7Ci0JCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtcXNwaSI7Ci0JCQkJcmVnID0gPDB4NDAwNDQwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgMjQgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19RU1BJMF9FTj4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfUVNQSTA+OwotCQkJCWNsb2NrLW5hbWVzID0gInFzcGlfZW4iLCAicXNwaSI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCWlvbXV4YzogaW9tdXhjQDQwMDQ4MDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1pb211eGMiOwotCQkJCXJlZyA9IDwweDQwMDQ4MDAwIDB4MTAwMD47Ci0JCQkJI2dwaW8tcmFuZ2UtY2VsbHMgPSA8Mz47Ci0JCQl9OwotCi0JCQlncGlvMTogZ3Bpb0A0MDA0OTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZ3BpbyI7Ci0JCQkJcmVnID0gPDB4NDAwNDkwMDAgMHgxMDAwIDB4NDAwZmYwMDAgMHg0MD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDEwNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQlncGlvLWNvbnRyb2xsZXI7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCQlncGlvLXJhbmdlcyA9IDwmaW9tdXhjIDAgMCAzMj47Ci0JCQl9OwotCi0JCQlncGlvMjogZ3Bpb0A0MDA0YTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZ3BpbyI7Ci0JCQkJcmVnID0gPDB4NDAwNGEwMDAgMHgxMDAwIDB4NDAwZmYwNDAgMHg0MD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDEwOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQlncGlvLWNvbnRyb2xsZXI7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCQlncGlvLXJhbmdlcyA9IDwmaW9tdXhjIDAgMzIgMzI+OwotCQkJfTsKLQotCQkJZ3BpbzM6IGdwaW9ANDAwNGIwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOwotCQkJCXJlZyA9IDwweDQwMDRiMDAwIDB4MTAwMCAweDQwMGZmMDgwIDB4NDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAxMDkgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDY0IDMyPjsKLQkJCX07Ci0KLQkJCWdwaW80OiBncGlvQDQwMDRjMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1ncGlvIjsKLQkJCQlyZWcgPSA8MHg0MDA0YzAwMCAweDEwMDAgMHg0MDBmZjBjMCAweDQwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgMTEwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWdwaW8tY29udHJvbGxlcjsKLQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJCWdwaW8tcmFuZ2VzID0gPCZpb211eGMgMCA5NiAzMj47Ci0JCQl9OwotCi0JCQlncGlvNTogZ3Bpb0A0MDA0ZDAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZ3BpbyI7Ci0JCQkJcmVnID0gPDB4NDAwNGQwMDAgMHgxMDAwIDB4NDAwZmYxMDAgMHg0MD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDExMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQlncGlvLWNvbnRyb2xsZXI7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCQlncGlvLXJhbmdlcyA9IDwmaW9tdXhjIDAgMTI4IDc+OwotCQkJfTsKLQotCQkJYW5hdG9wOiBhbmF0b3BANDAwNTAwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWFuYXRvcCIsICJzeXNjb24iOwotCQkJCXJlZyA9IDwweDQwMDUwMDAwIDB4NDAwPjsKLQkJCX07Ci0KLQkJCXVzYnBoeTA6IHVzYnBoeUA0MDA1MDgwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNicGh5IjsKLQkJCQlyZWcgPSA8MHg0MDA1MDgwMCAweDQwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDUwIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVVNCUEhZMD47Ci0JCQkJZnNsLGFuYXRvcCA9IDwmYW5hdG9wPjsKLQkJCX07Ci0KLQkJCXVzYnBoeTE6IHVzYnBoeUA0MDA1MGMwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNicGh5IjsKLQkJCQlyZWcgPSA8MHg0MDA1MGMwMCAweDQwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDUxIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVVNCUEhZMT47Ci0JCQkJZnNsLGFuYXRvcCA9IDwmYW5hdG9wPjsKLQkJCX07Ci0KLQkJCWkyYzA6IGkyY0A0MDA2NjAwMCB7Ci0JCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtaTJjIjsKLQkJCQlyZWcgPSA8MHg0MDA2NjAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPTwwIDcxIElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfSTJDMD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIjsKLQkJCQlkbWFzID0gPCZlZG1hMCAwIDUwPiwKLQkJCQkJPCZlZG1hMCAwIDUxPjsKLQkJCQlkbWEtbmFtZXMgPSAicngiLCJ0eCI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCWNsa3M6IGNjbUA0MDA2YjAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtY2NtIjsKLQkJCQlyZWcgPSA8MHg0MDA2YjAwMCAweDEwMDA+OwotCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKLQkJCX07Ci0KLQkJCXVzYmRldjA6IHVzYkA0MDAzNDAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNiIiwgImZzbCxpbXgyNy11c2IiOwotCQkJCXJlZyA9IDwweDQwMDM0MDAwIDB4ODAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNzUgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JDMD47Ci0JCQkJZnNsLHVzYnBoeSA9IDwmdXNicGh5MD47Ci0JCQkJZnNsLHVzYm1pc2MgPSA8JnVzYm1pc2MwIDA+OwotCQkJCWRyX21vZGUgPSAicGVyaXBoZXJhbCI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCXVzYm1pc2MwOiB1c2JANDAwMzQ4MDAgewotCQkJCSNpbmRleC1jZWxscyA9IDwxPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC11c2JtaXNjIjsKLQkJCQlyZWcgPSA8MHg0MDAzNDgwMCAweDIwMD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JDMD47Ci0JCQl9OwotCQl9OwotCi0JCWFpcHMxOiBhaXBzLWJ1c0A0MDA4MDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxhaXBzLWJ1cyIsICJzaW1wbGUtYnVzIjsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQlyZWcgPSA8MHg0MDA4MDAwMCAweDgwMDAwPjsKLQkJCXJhbmdlczsKLQotCQkJZWRtYTE6IGRtYS1jb250cm9sbGVyQDQwMDk4MDAwIHsKLQkJCQkjZG1hLWNlbGxzID0gPDI+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWVkbWEiOwotCQkJCXJlZyA9IDwweDQwMDk4MDAwIDB4MjAwMD4sCi0JCQkJCTwweDQwMGExMDAwIDB4MTAwMD4sCi0JCQkJCTwweDQwMGEyMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDEwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAotCQkJCQkJPDAgMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJaW50ZXJydXB0LW5hbWVzID0gImVkbWEtdHgiLCAiZWRtYS1lcnIiOwotCQkJCWRtYS1jaGFubmVscyA9IDwzMj47Ci0JCQkJY2xvY2stbmFtZXMgPSAiZG1hbXV4MCIsICJkbWFtdXgxIjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0RNQU1VWDI+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0RNQU1VWDM+OwotCQkJfTsKLQotCQkJdWFydDQ6IHNlcmlhbEA0MDBhOTAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKLQkJCQlyZWcgPSA8MHg0MDBhOTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA2NSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQ0PjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQl1YXJ0NTogc2VyaWFsQDQwMGFhMDAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1scHVhcnQiOwotCQkJCXJlZyA9IDwweDQwMGFhMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDY2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVUFSVDU+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCWFkYzE6IGFkY0A0MDBiYjAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtYWRjIjsKLQkJCQlyZWcgPSA8MHg0MDBiYjAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCA1NCAweDA0PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0FEQzE+OwotCQkJCWNsb2NrLW5hbWVzID0gImFkYyI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCWVzZGhjMTogZXNkaGNANDAwYjIwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDUzLWVzZGhjIjsKLQkJCQlyZWcgPSA8MHg0MDBiMjAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MCAyOCAweDA0PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0lQR19CVVM+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX1BMQVRGT1JNX0JVUz4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRVNESEMxPjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYWhiIiwgInBlciI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCXVzYmgxOiB1c2JANDAwYjQwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYiIsICJmc2wsaW14MjctdXNiIjsKLQkJCQlyZWcgPSA8MHg0MDBiNDAwMCAweDgwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDc2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVVNCQzE+OwotCQkJCWZzbCx1c2JwaHkgPSA8JnVzYnBoeTE+OwotCQkJCWZzbCx1c2JtaXNjID0gPCZ1c2JtaXNjMSAwPjsKLQkJCQlkcl9tb2RlID0gImhvc3QiOwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQl1c2JtaXNjMTogdXNiQDQwMGI0ODAwIHsKLQkJCQkjaW5kZXgtY2VsbHMgPSA8MT47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNibWlzYyI7Ci0JCQkJcmVnID0gPDB4NDAwYjQ4MDAgMHgyMDA+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVVNCQzE+OwotCQkJfTsKLQotCQkJZnRtOiBmdG1ANDAwYjgwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGZ0bS10aW1lciI7Ci0JCQkJcmVnID0gPDB4NDAwYjgwMDAgMHgxMDAwIDB4NDAwYjkwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNDQgSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2stbmFtZXMgPSAiZnRtLWV2dCIsICJmdG0tc3JjIiwKLQkJCQkJImZ0bS1ldnQtY291bnRlci1lbiIsICJmdG0tc3JjLWNvdW50ZXItZW4iOwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRlRNMj4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMz4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMl9FWFRfRklYX0VOPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0zX0VYVF9GSVhfRU4+OwotCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQl9OwotCi0JCQlmZWMwOiBldGhlcm5ldEA0MDBkMDAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsbXZmNjAwLWZlYyI7Ci0JCQkJcmVnID0gPDB4NDAwZDAwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDAgNzggSVJRX1RZUEVfTEVWRUxfSElHSD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19FTkVUMD4sCi0JCQkJCTwmY2xrcyBWRjYxMF9DTEtfRU5FVDA+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0VORVQ+OwotCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJhaGIiLCAicHRwIjsKLQkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQkJfTsKLQotCQkJZmVjMTogZXRoZXJuZXRANDAwZDEwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLG12ZjYwMC1mZWMiOwotCQkJCXJlZyA9IDwweDQwMGQxMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDc5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRU5FVDE+LAotCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0VORVQxPiwKLQkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUPjsKLQkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYWhiIiwgInB0cCI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJCWNhbjE6IGZsZXhjYW5ANDAwZDQwMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWZsZXhjYW4iOwotCQkJCXJlZyA9IDwweDQwMGQ0MDAwIDB4NDAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwwIDU5IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRkxFWENBTjE+LAotCQkJCQkgPCZjbGtzIFZGNjEwX0NMS19GTEVYQ0FOMT47Ci0JCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgInBlciI7Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCX07Ci0KLQkJfTsKKyZhaXBzMCB7CisJTDI6IGwyLWNhY2hlQDQwMDA2MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOworCQlyZWcgPSA8MHg0MDAwNjAwMCAweDEwMDA+OworCQljYWNoZS11bmlmaWVkOworCQljYWNoZS1sZXZlbCA9IDwyPjsKKwkJYXJtLGRhdGEtbGF0ZW5jeSA9IDwxIDEgMT47CisJCWFybSx0YWctbGF0ZW5jeSA9IDwyIDIgMj47CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92Znh4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmZ4eHguZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDU5NjlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmZ4eHguZHRzaQpAQCAtMCwwICsxLDQzNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSAidmY2MTAtcGluZnVuYy5oIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3ZmNjEwLWNsb2NrLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisKKy8geworCWFsaWFzZXMgeworCQljYW4wID0gJmNhbjA7CisJCWNhbjEgPSAmY2FuMTsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0MTsKKwkJc2VyaWFsMiA9ICZ1YXJ0MjsKKwkJc2VyaWFsMyA9ICZ1YXJ0MzsKKwkJc2VyaWFsNCA9ICZ1YXJ0NDsKKwkJc2VyaWFsNSA9ICZ1YXJ0NTsKKwkJZ3BpbzAgPSAmZ3BpbzE7CisJCWdwaW8xID0gJmdwaW8yOworCQlncGlvMiA9ICZncGlvMzsKKwkJZ3BpbzMgPSAmZ3BpbzQ7CisJCWdwaW80ID0gJmdwaW81OworCQl1c2JwaHkwID0gJnVzYnBoeTA7CisJCXVzYnBoeTEgPSAmdXNicGh5MTsKKwl9OworCisJZnhvc2M6IGZ4b3NjIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKKwl9OworCisJc3hvc2M6IHN4b3NjIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKKwl9OworCisJc29jIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXM7CisKKwkJYWlwczA6IGFpcHMtYnVzQDQwMDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGFpcHMtYnVzIiwgInNpbXBsZS1idXMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlczsKKworCQkJZWRtYTA6IGRtYS1jb250cm9sbGVyQDQwMDE4MDAwIHsKKwkJCQkjZG1hLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWVkbWEiOworCQkJCXJlZyA9IDwweDQwMDE4MDAwIDB4MjAwMD4sCisJCQkJCTwweDQwMDI0MDAwIDB4MTAwMD4sCisJCQkJCTwweDQwMDI1MDAwIDB4MTAwMD47CisJCQkJZG1hLWNoYW5uZWxzID0gPDMyPjsKKwkJCQljbG9jay1uYW1lcyA9ICJkbWFtdXgwIiwgImRtYW11eDEiOworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRE1BTVVYMD4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRE1BTVVYMT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWNhbjA6IGZsZXhjYW5ANDAwMjAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWZsZXhjYW4iOworCQkJCXJlZyA9IDwweDQwMDIwMDAwIDB4NDAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19GTEVYQ0FOMD4sCisJCQkJCSA8JmNsa3MgVkY2MTBfQ0xLX0ZMRVhDQU4wPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAicGVyIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJdWFydDA6IHNlcmlhbEA0MDAyNzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKKwkJCQlyZWcgPSA8MHg0MDAyNzAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVUFSVDA+OworCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQkJZG1hcyA9IDwmZWRtYTAgMCAyPiwKKwkJCQkJPCZlZG1hMCAwIDM+OworCQkJCWRtYS1uYW1lcyA9ICJyeCIsInR4IjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJdWFydDE6IHNlcmlhbEA0MDAyODAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKKwkJCQlyZWcgPSA8MHg0MDAyODAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVUFSVDE+OworCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQkJZG1hcyA9IDwmZWRtYTAgMCA0PiwKKwkJCQkJPCZlZG1hMCAwIDU+OworCQkJCWRtYS1uYW1lcyA9ICJyeCIsInR4IjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJdWFydDI6IHNlcmlhbEA0MDAyOTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKKwkJCQlyZWcgPSA8MHg0MDAyOTAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVUFSVDI+OworCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQkJZG1hcyA9IDwmZWRtYTAgMCA2PiwKKwkJCQkJPCZlZG1hMCAwIDc+OworCQkJCWRtYS1uYW1lcyA9ICJyeCIsInR4IjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJdWFydDM6IHNlcmlhbEA0MDAyYTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKKwkJCQlyZWcgPSA8MHg0MDAyYTAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVUFSVDM+OworCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQkJZG1hcyA9IDwmZWRtYTAgMCA4PiwKKwkJCQkJPCZlZG1hMCAwIDk+OworCQkJCWRtYS1uYW1lcyA9ICJyeCIsInR4IjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZHNwaTA6IGRzcGkwQDQwMDJjMDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1kc3BpIjsKKwkJCQlyZWcgPSA8MHg0MDAyYzAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRFNQSTA+OworCQkJCWNsb2NrLW5hbWVzID0gImRzcGkiOworCQkJCXNwaS1udW0tY2hpcHNlbGVjdHMgPSA8NT47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXNhaTI6IHNhaUA0MDAzMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtc2FpIjsKKwkJCQlyZWcgPSA8MHg0MDAzMTAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfU0FJMj47CisJCQkJY2xvY2stbmFtZXMgPSAic2FpIjsKKwkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOworCQkJCWRtYXMgPSA8JmVkbWEwIDAgMjE+LAorCQkJCQk8JmVkbWEwIDAgMjA+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlwaXQ6IHBpdEA0MDAzNzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtcGl0IjsKKwkJCQlyZWcgPSA8MHg0MDAzNzAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfUElUPjsKKwkJCQljbG9jay1uYW1lcyA9ICJwaXQiOworCQkJfTsKKworCQkJcHdtMDogcHdtQDQwMDM4MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1mdG0tcHdtIjsKKwkJCQkjcHdtLWNlbGxzID0gPDM+OworCQkJCXJlZyA9IDwweDQwMDM4MDAwIDB4MTAwMD47CisJCQkJY2xvY2stbmFtZXMgPSAiZnRtX3N5cyIsICJmdG1fZXh0IiwKKwkJCQkJICAgICAgImZ0bV9maXgiLCAiZnRtX2NudF9jbGtfZW4iOworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRlRNMD4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMF9FWFRfU0VMPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0wX0ZJWF9TRUw+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTBfRVhUX0ZJWF9FTj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXB3bTE6IHB3bUA0MDAzOTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZnRtLXB3bSI7CisJCQkJI3B3bS1jZWxscyA9IDwzPjsKKwkJCQlyZWcgPSA8MHg0MDAzOTAwMCAweDEwMDA+OworCQkJCWNsb2NrLW5hbWVzID0gImZ0bV9zeXMiLCAiZnRtX2V4dCIsCisJCQkJCSAgICAgICJmdG1fZml4IiwgImZ0bV9jbnRfY2xrX2VuIjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0ZUTTE+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTFfRVhUX1NFTD4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfRlRNMV9GSVhfU0VMPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0xX0VYVF9GSVhfRU4+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlhZGMwOiBhZGNANDAwM2IwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWFkYyI7CisJCQkJcmVnID0gPDB4NDAwM2IwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0FEQzA+OworCQkJCWNsb2NrLW5hbWVzID0gImFkYyI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXdkb2dANDAwM2UwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXdkdCIsICJmc2wsaW14MjEtd2R0IjsKKwkJCQlyZWcgPSA8MHg0MDAzZTAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfV0RUPjsKKwkJCQljbG9jay1uYW1lcyA9ICJ3ZG9nIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJcXNwaTA6IHF1YWRzcGlANDAwNDQwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXFzcGkiOworCQkJCXJlZyA9IDwweDQwMDQ0MDAwIDB4MTAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19RU1BJMF9FTj4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfUVNQSTA+OworCQkJCWNsb2NrLW5hbWVzID0gInFzcGlfZW4iLCAicXNwaSI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWlvbXV4YzogaW9tdXhjQDQwMDQ4MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1pb211eGMiOworCQkJCXJlZyA9IDwweDQwMDQ4MDAwIDB4MTAwMD47CisJCQkJI2dwaW8tcmFuZ2UtY2VsbHMgPSA8Mz47CisJCQl9OworCisJCQlncGlvMTogZ3Bpb0A0MDA0OTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZ3BpbyI7CisJCQkJcmVnID0gPDB4NDAwNDkwMDAgMHgxMDAwIDB4NDAwZmYwMDAgMHg0MD47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDAgMzI+OworCQkJfTsKKworCQkJZ3BpbzI6IGdwaW9ANDAwNGEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOworCQkJCXJlZyA9IDwweDQwMDRhMDAwIDB4MTAwMCAweDQwMGZmMDQwIDB4NDA+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWdwaW8tcmFuZ2VzID0gPCZpb211eGMgMCAzMiAzMj47CisJCQl9OworCisJCQlncGlvMzogZ3Bpb0A0MDA0YjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZ3BpbyI7CisJCQkJcmVnID0gPDB4NDAwNGIwMDAgMHgxMDAwIDB4NDAwZmYwODAgMHg0MD47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJZ3Bpby1yYW5nZXMgPSA8JmlvbXV4YyAwIDY0IDMyPjsKKwkJCX07CisKKwkJCWdwaW80OiBncGlvQDQwMDRjMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC1ncGlvIjsKKwkJCQlyZWcgPSA8MHg0MDA0YzAwMCAweDEwMDAgMHg0MDBmZjBjMCAweDQwPjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlncGlvLXJhbmdlcyA9IDwmaW9tdXhjIDAgOTYgMzI+OworCQkJfTsKKworCQkJZ3BpbzU6IGdwaW9ANDAwNGQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWdwaW8iOworCQkJCXJlZyA9IDwweDQwMDRkMDAwIDB4MTAwMCAweDQwMGZmMTAwIDB4NDA+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWdwaW8tcmFuZ2VzID0gPCZpb211eGMgMCAxMjggNz47CisJCQl9OworCisJCQlhbmF0b3A6IGFuYXRvcEA0MDA1MDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtYW5hdG9wIiwgInN5c2NvbiI7CisJCQkJcmVnID0gPDB4NDAwNTAwMDAgMHg0MDA+OworCQkJfTsKKworCQkJdXNicGh5MDogdXNicGh5QDQwMDUwODAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCx2ZjYxMC11c2JwaHkiOworCQkJCXJlZyA9IDwweDQwMDUwODAwIDB4NDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQlBIWTA+OworCQkJCWZzbCxhbmF0b3AgPSA8JmFuYXRvcD47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVzYnBoeTE6IHVzYnBoeUA0MDA1MGMwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNicGh5IjsKKwkJCQlyZWcgPSA8MHg0MDA1MGMwMCAweDQwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19VU0JQSFkxPjsKKwkJCQlmc2wsYW5hdG9wID0gPCZhbmF0b3A+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlpMmMwOiBpMmNANDAwNjYwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWkyYyI7CisJCQkJcmVnID0gPDB4NDAwNjYwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0kyQzA+OworCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQkJZG1hcyA9IDwmZWRtYTAgMCA1MD4sCisJCQkJCTwmZWRtYTAgMCA1MT47CisJCQkJZG1hLW5hbWVzID0gInJ4IiwidHgiOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQljbGtzOiBjY21ANDAwNmIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWNjbSI7CisJCQkJcmVnID0gPDB4NDAwNmIwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JnN4b3NjPiwgPCZmeG9zYz47CisJCQkJY2xvY2stbmFtZXMgPSAic3hvc2MiLCAiZnhvc2MiOworCQkJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJCX07CisKKwkJCXVzYmRldjA6IHVzYkA0MDAzNDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNiIiwgImZzbCxpbXgyNy11c2IiOworCQkJCXJlZyA9IDwweDQwMDM0MDAwIDB4ODAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQkMwPjsKKwkJCQlmc2wsdXNicGh5ID0gPCZ1c2JwaHkwPjsKKwkJCQlmc2wsdXNibWlzYyA9IDwmdXNibWlzYzAgMD47CisJCQkJZHJfbW9kZSA9ICJwZXJpcGhlcmFsIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJdXNibWlzYzA6IHVzYkA0MDAzNDgwMCB7CisJCQkJI2luZGV4LWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYm1pc2MiOworCQkJCXJlZyA9IDwweDQwMDM0ODAwIDB4MjAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQkMwPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKwkJfTsKKworCQlhaXBzMTogYWlwcy1idXNANDAwODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsYWlwcy1idXMiLCAic2ltcGxlLWJ1cyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzOworCisJCQllZG1hMTogZG1hLWNvbnRyb2xsZXJANDAwOTgwMDAgeworCQkJCSNkbWEtY2VsbHMgPSA8Mj47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtZWRtYSI7CisJCQkJcmVnID0gPDB4NDAwOTgwMDAgMHgyMDAwPiwKKwkJCQkJPDB4NDAwYTEwMDAgMHgxMDAwPiwKKwkJCQkJPDB4NDAwYTIwMDAgMHgxMDAwPjsKKwkJCQlkbWEtY2hhbm5lbHMgPSA8MzI+OworCQkJCWNsb2NrLW5hbWVzID0gImRtYW11eDAiLCAiZG1hbXV4MSI7CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19ETUFNVVgyPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19ETUFNVVgzPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJdWFydDQ6IHNlcmlhbEA0MDBhOTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtbHB1YXJ0IjsKKwkJCQlyZWcgPSA8MHg0MDBhOTAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfVUFSVDQ+OworCQkJCWNsb2NrLW5hbWVzID0gImlwZyI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCXVhcnQ1OiBzZXJpYWxANDAwYWEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWxwdWFydCI7CisJCQkJcmVnID0gPDB4NDAwYWEwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VBUlQ1PjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciOworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlhZGMxOiBhZGNANDAwYmIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWFkYyI7CisJCQkJcmVnID0gPDB4NDAwYmIwMDAgMHgxMDAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX0FEQzE+OworCQkJCWNsb2NrLW5hbWVzID0gImFkYyI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWVzZGhjMTogZXNkaGNANDAwYjIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDUzLWVzZGhjIjsKKwkJCQlyZWcgPSA8MHg0MDBiMjAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfSVBHX0JVUz4sCisJCQkJCTwmY2xrcyBWRjYxMF9DTEtfUExBVEZPUk1fQlVTPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19FU0RIQzE+OworCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJhaGIiLCAicGVyIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJdXNiaDE6IHVzYkA0MDBiNDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsdmY2MTAtdXNiIiwgImZzbCxpbXgyNy11c2IiOworCQkJCXJlZyA9IDwweDQwMGI0MDAwIDB4ODAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQkMxPjsKKwkJCQlmc2wsdXNicGh5ID0gPCZ1c2JwaHkxPjsKKwkJCQlmc2wsdXNibWlzYyA9IDwmdXNibWlzYzEgMD47CisJCQkJZHJfbW9kZSA9ICJob3N0IjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJdXNibWlzYzE6IHVzYkA0MDBiNDgwMCB7CisJCQkJI2luZGV4LWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYm1pc2MiOworCQkJCXJlZyA9IDwweDQwMGI0ODAwIDB4MjAwPjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1VTQkMxPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQkJZnRtOiBmdG1ANDAwYjgwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGZ0bS10aW1lciI7CisJCQkJcmVnID0gPDB4NDAwYjgwMDAgMHgxMDAwIDB4NDAwYjkwMDAgMHgxMDAwPjsKKwkJCQljbG9jay1uYW1lcyA9ICJmdG0tZXZ0IiwgImZ0bS1zcmMiLAorCQkJCQkiZnRtLWV2dC1jb3VudGVyLWVuIiwgImZ0bS1zcmMtY291bnRlci1lbiI7CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19GVE0yPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0zPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19GVE0yX0VYVF9GSVhfRU4+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0ZUTTNfRVhUX0ZJWF9FTj47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWZlYzA6IGV0aGVybmV0QDQwMGQwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtdmY2MDAtZmVjIjsKKwkJCQlyZWcgPSA8MHg0MDBkMDAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRU5FVDA+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0VORVQwPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYWhiIiwgInB0cCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWZlYzE6IGV0aGVybmV0QDQwMGQxMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtdmY2MDAtZmVjIjsKKwkJCQlyZWcgPSA8MHg0MDBkMTAwMCAweDEwMDA+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRU5FVDE+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0VORVQxPiwKKwkJCQkJPCZjbGtzIFZGNjEwX0NMS19FTkVUPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAiYWhiIiwgInB0cCI7CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCWNhbjE6IGZsZXhjYW5ANDAwZDQwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLWZsZXhjYW4iOworCQkJCXJlZyA9IDwweDQwMGQ0MDAwIDB4NDAwMD47CisJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19GTEVYQ0FOMT4sCisJCQkJCSA8JmNsa3MgVkY2MTBfQ0xLX0ZMRVhDQU4xPjsKKwkJCQljbG9jay1uYW1lcyA9ICJpcGciLCAicGVyIjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJfTsKKworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS03MDAwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLTcwMDAuZHRzaQppbmRleCBjZTJlZjViLi5lZTNlNWQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy96eW5xLTcwMDAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLTcwMDAuZHRzaQpAQCAtMjQzLDcgKzI0Myw2IEBACiAJCQljbGtjOiBjbGtjQDEwMCB7CiAJCQkJI2Nsb2NrLWNlbGxzID0gPDE+OwogCQkJCWNvbXBhdGlibGUgPSAieGxueCxwczctY2xrYyI7Ci0JCQkJcHMtY2xrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CiAJCQkJZmNsay1lbmFibGUgPSA8MD47CiAJCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFybXBsbCIsICJkZHJwbGwiLCAiaW9wbGwiLCAiY3B1XzZvcjR4IiwKIAkJCQkJCSJjcHVfM29yMngiLCAiY3B1XzJ4IiwgImNwdV8xeCIsICJkZHIyeCIsICJkZHIzeCIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy96eW5xLXBhcmFsbGVsbGEuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS1wYXJhbGxlbGxhLmR0cwppbmRleCAwNDI5YmJkLi5hYjFkYzBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy96eW5xLXBhcmFsbGVsbGEuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtcGFyYWxsZWxsYS5kdHMKQEAgLTM2LDYgKzM2LDcgQEAKIAogJmNsa2MgewogCWZjbGstZW5hYmxlID0gPDB4Zj47CisJcHMtY2xrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CiB9OwogCiAmZ2VtMCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy96eW5xLXpjNzAyLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtemM3MDIuZHRzCmluZGV4IDk0ZTJjZGEuLjI4MGYwMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtemM3MDIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtemM3MDIuZHRzCkBAIC00Miw2ICs0MiwxMCBAQAogCXN0YXR1cyA9ICJva2F5IjsKIH07CiAKKyZjbGtjIHsKKwlwcy1jbGstZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKK307CisKICZnZW0wIHsKIAlzdGF0dXMgPSAib2theSI7CiAJcGh5LW1vZGUgPSAicmdtaWktaWQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16YzcwNi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXpjNzA2LmR0cwppbmRleCBhOGJiZGZiLi4zNGY3ODEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy96eW5xLXpjNzA2LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXpjNzA2LmR0cwpAQCAtMjksNiArMjksMTAgQEAKIAogfTsKIAorJmNsa2MgeworCXBzLWNsay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworfTsKKwogJmdlbTAgewogCXN0YXR1cyA9ICJva2F5IjsKIAlwaHktbW9kZSA9ICJyZ21paS1pZCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy96eW5xLXplZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy96eW5xLXplZC5kdHMKaW5kZXggNjk3Nzc5YS4uMWM3Y2M5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16ZWQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3p5bnEtemVkLmR0cwpAQCAtMjksNiArMjksMTAgQEAKIAogfTsKIAorJmNsa2MgeworCXBzLWNsay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworfTsKKwogJmdlbTAgewogCXN0YXR1cyA9ICJva2F5IjsKIAlwaHktbW9kZSA9ICJyZ21paS1pZCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy96eW5xLXp5Ym8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16eWJvLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWExMmNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvenlucS16eWJvLmR0cwpAQCAtMCwwICsxLDUyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMSAtIDIwMTQgWGlsaW54CisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIE5hdGlvbmFsIEluc3RydW1lbnRzIENvcnAuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworL2R0cy12MS87CisvaW5jbHVkZS8gInp5bnEtNzAwMC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJaeW5xIFpZQk8gRGV2ZWxvcG1lbnQgQm9hcmQiOworCWNvbXBhdGlibGUgPSAiZGlnaWxlbnQsenlucS16eWJvIiwgInhsbngsenlucS03MDAwIjsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAgMHgyMDAwMDAwMD47CisJfTsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UFMwLDExNTIwMCBlYXJseXByaW50ayI7CisJfTsKKworfTsKKworJmNsa2MgeworCXBzLWNsay1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworfTsKKworJmdlbTAgeworCXN0YXR1cyA9ICJva2F5IjsKKwlwaHktbW9kZSA9ICJyZ21paS1pZCI7CisJcGh5LWhhbmRsZSA9IDwmZXRoZXJuZXRfcGh5PjsKKworCWV0aGVybmV0X3BoeTogZXRoZXJuZXQtcGh5QDAgeworCQlyZWcgPSA8MD47CisJfTsKK307CisKKyZzZGhjaTAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9lZG1hLmMgYi9hcmNoL2FybS9jb21tb24vZWRtYS5jCmluZGV4IDcyMDQxZjAuLjU2NjJhODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9lZG1hLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2VkbWEuYwpAQCAtMjQ1LDYgKzI0NSw4IEBACiAJLyogbGlzdCBvZiBjaGFubmVscyB3aXRoIG5vIGV2ZW4gdHJpZ2dlcjsgdGVybWluYXRlZCBieSAiLTEiICovCiAJY29uc3QgczgJKm5vZXZlbnQ7CiAKKwlzdHJ1Y3QgZWRtYV9zb2NfaW5mbyAqaW5mbzsKKwogCS8qIFRoZSBlZG1hX2ludXNlIGJpdCBmb3IgZWFjaCBQYVJBTSBzbG90IGlzIGNsZWFyIHVubGVzcyB0aGUKIAkgKiBjaGFubmVsIGlzIGluIHVzZSAuLi4gYnkgQVJNIG9yIERTUCwgZm9yIFFETUEsIG9yIHdoYXRldmVyLgogCSAqLwpAQCAtMjk2LDcgKzI5OCw3IEBACiAJCQl+KDB4NyA8PCBiaXQpLCBxdWV1ZV9ubyA8PCBiaXQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXNzaWduX3ByaW9yaXR5X3RvX3F1ZXVlKHVuc2lnbmVkIGN0bHIsIGludCBxdWV1ZV9ubywKK3N0YXRpYyB2b2lkIGFzc2lnbl9wcmlvcml0eV90b19xdWV1ZSh1bnNpZ25lZCBjdGxyLCBpbnQgcXVldWVfbm8sCiAJCWludCBwcmlvcml0eSkKIHsKIAlpbnQgYml0ID0gcXVldWVfbm8gKiA0OwpAQCAtMzE1LDcgKzMxNyw3IEBACiAgKiBpbmNsdWRlZCBpbiB0aGF0IHBhcnRpY3VsYXIgRURNQSB2YXJpYW50IChFZyA6IGRtNjQ2eCkKICAqCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBtYXBfZG1hY2hfcGFyYW0odW5zaWduZWQgY3RscikKK3N0YXRpYyB2b2lkIG1hcF9kbWFjaF9wYXJhbSh1bnNpZ25lZCBjdGxyKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBFRE1BX01BWF9ETUFDSDsgaSsrKQpAQCAtMTc5OCw2ICsxODAwLDcgQEAKIAkJCWVkbWFfd3JpdGVfYXJyYXkyKGosIEVETUFfRFJBRSwgaSwgMSwgMHgwKTsKIAkJCWVkbWFfd3JpdGVfYXJyYXkoaiwgRURNQV9RUkFFLCBpLCAweDApOwogCQl9CisJCWVkbWFfY2Nbal0tPmluZm8gPSBpbmZvW2pdOwogCQlhcmNoX251bV9jYysrOwogCiAJCWVkbWFfZGV2X2luZm8uaWQgPSBqOwpAQCAtMTgwNyw5ICsxODEwLDU2IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgZWRtYV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBpLCBqOworCisJZm9yIChqID0gMDsgaiA8IGFyY2hfbnVtX2NjOyBqKyspIHsKKwkJc3RydWN0IGVkbWEgKmNjID0gZWRtYV9jY1tqXTsKKworCQlzOCAoKnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcpWzJdOworCisJCXF1ZXVlX3ByaW9yaXR5X21hcHBpbmcgPSBjYy0+aW5mby0+cXVldWVfcHJpb3JpdHlfbWFwcGluZzsKKworCQkvKiBFdmVudCBxdWV1ZSBwcmlvcml0eSBtYXBwaW5nICovCisJCWZvciAoaSA9IDA7IHF1ZXVlX3ByaW9yaXR5X21hcHBpbmdbaV1bMF0gIT0gLTE7IGkrKykKKwkJCWFzc2lnbl9wcmlvcml0eV90b19xdWV1ZShqLAorCQkJCQkJIHF1ZXVlX3ByaW9yaXR5X21hcHBpbmdbaV1bMF0sCisJCQkJCQkgcXVldWVfcHJpb3JpdHlfbWFwcGluZ1tpXVsxXSk7CisKKwkJLyoKKwkJICogTWFwIHRoZSBjaGFubmVsIHRvIHBhcmFtIGVudHJ5IGlmIGNoYW5uZWwgbWFwcGluZyBsb2dpYworCQkgKiBleGlzdAorCQkgKi8KKwkJaWYgKGVkbWFfcmVhZChqLCBFRE1BX0NDQ0ZHKSAmIENITUFQX0VYSVNUKQorCQkJbWFwX2RtYWNoX3BhcmFtKGopOworCisJCWZvciAoaSA9IDA7IGkgPCBjYy0+bnVtX2NoYW5uZWxzOyBpKyspIHsKKwkJCWlmICh0ZXN0X2JpdChpLCBjYy0+ZWRtYV9pbnVzZSkpIHsKKwkJCQkvKiBlbnN1cmUgYWNjZXNzIHRocm91Z2ggc2hhZG93IHJlZ2lvbiAwICovCisJCQkJZWRtYV9vcl9hcnJheTIoaiwgRURNQV9EUkFFLCAwLCBpID4+IDUsCisJCQkJCSAgICAgICBCSVQoaSAmIDB4MWYpKTsKKworCQkJCXNldHVwX2RtYV9pbnRlcnJ1cHQoaSwKKwkJCQkJCSAgICBjYy0+aW50cl9kYXRhW2ldLmNhbGxiYWNrLAorCQkJCQkJICAgIGNjLT5pbnRyX2RhdGFbaV0uZGF0YSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZWRtYV9wbV9vcHMgPSB7CisJU0VUX0xBVEVfU1lTVEVNX1NMRUVQX1BNX09QUyhOVUxMLCBlZG1hX3BtX3Jlc3VtZSkKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVkbWFfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImVkbWEiLAorCQkucG0JPSAmZWRtYV9wbV9vcHMsCiAJCS5vZl9tYXRjaF90YWJsZSA9IGVkbWFfb2ZfaWRzLAogCX0sCiAJLnByb2JlID0gZWRtYV9wcm9iZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXBlNmV2bV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FwZTZldm1fZGVmY29uZmlnCmluZGV4IGI1NGIyOGYuLmRiODFkOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXBlNmV2bV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hcGU2ZXZtX2RlZmNvbmZpZwpAQCAtMzMsNiArMzMsNyBAQAogQ09ORklHX1ZGUD15CiBDT05GSUdfTkVPTj15CiBDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MV9kdF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnCmluZGV4IDNiNTE1YzEuLmE2NzM3NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MV9kdF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxX2R0X2RlZmNvbmZpZwpAQCAtODAsNiArODAsNyBAQAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX01BQ0I9eQogIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0CitDT05GSUdfRE05MDAwPXkKICMgQ09ORklHX05FVF9WRU5ET1JfRkFSQURBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0CkBAIC0xMTMsNiArMTE0LDcgQEAKIENPTkZJR19JTlBVVF9KT1lERVY9eQogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9RVDEwNzA9eQogQ09ORklHX0tFWUJPQVJEX0dQSU89eQogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKQEAgLTE4Niw2ICsxODgsNyBAQAogQ09ORklHX0FUOTFfQURDPXkKIENPTkZJR19QV009eQogQ09ORklHX1BXTV9BVE1FTD15CitDT05GSUdfUFdNX0FUTUVMX1RDQj15CiBDT05GSUdfRVhUNF9GUz15CiBDT05GSUdfRkFOT1RJRlk9eQogQ09ORklHX1ZGQVRfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMDU3NzEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0jIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1VTRVJfTlM9eQotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRD15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQotQ09ORklHX01BQ0hfT05FQVJNPXkKLUNPTkZJR19NQUNIX0FUOTFSTTkyMDBFSz15Ci1DT05GSUdfTUFDSF9DU0IzMzc9eQotQ09ORklHX01BQ0hfQ1NCNjM3PXkKLUNPTkZJR19NQUNIX0NBUk1FVkE9eQotQ09ORklHX01BQ0hfQVRFQjkyMDA9eQotQ09ORklHX01BQ0hfS0I5MjAwPXkKLUNPTkZJR19NQUNIX1BJQ09UVVgyWFg9eQotQ09ORklHX01BQ0hfS0FGQT15Ci1DT05GSUdfTUFDSF9FQ0JBVDkxPXkKLUNPTkZJR19NQUNIX1lMOTIwMD15Ci1DT05GSUdfTUFDSF9DUFVBVDkxPXkKLUNPTkZJR19NQUNIX0VDTzkyMD15Ci1DT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQ9eQotQ09ORklHX0FUOTFfVElNRVJfSFo9MTAwCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX1BDQ0FSRD15Ci1DT05GSUdfQVQ5MV9DRj15Ci1DT05GSUdfQUVBQkk9eQotIyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgxMDAwMDAwMAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgyMDA0MDAwMAotQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVVRPX1pSRUxBRERSPXkKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj15Ci1DT05GSUdfSVBWNl9QUklWQUNZPXkKLUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKLUNPTkZJR19JUFY2X1JPVVRFX0lORk89eQotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19ERVZUTVBGUz15Ci1DT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLUNPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BMQVRSQU09eQotQ09ORklHX01URF9EQVRBRkxBU0g9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX05BTkRfUExBVEZPUk09eQotQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfR0xVRUJJPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19NSUk9eQotQ09ORklHX0FSTV9BVDkxX0VUSEVSPXkKLUNPTkZJR19EQVZJQ09NX1BIWT15Ci1DT05GSUdfU01TQ19QSFk9eQotQ09ORklHX01JQ1JFTF9QSFk9eQotIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotQ09ORklHX0tFWUJPQVJEX0dQSU89eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQVRNRUw9eQotQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19HUElPPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9BVE1FTD15Ci1DT05GSUdfR1BJT19TWVNGUz15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLUNPTkZJR19GQl9USUxFQkxJVFRJTkc9eQotQ09ORklHX0ZCX1MxRDEzWFhYPXkKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZPTlRTPXkKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19VU0I9eQotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0FUOTE9eQotQ09ORklHX1VTQl9HX1NFUklBTD15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfQVRNRUxNQ0k9eQotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLUNPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15Ci1DT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPXkKLUNPTkZJR19FWFQ0X0ZTPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19OTFNfVVRGOD15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19ERUJVR19MTD15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19DUllQVE9fUENCQz15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQotQ09ORklHX1haX0RFQ19BUk1USFVNQj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwXzlnMjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MF85ZzIwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FkYTA1ZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwXzlnMjBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXQVAgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFTQU05MjYwPXkKLUNPTkZJR19NQUNIX0FUOTFTQU05MjYwRUs9eQotQ09ORklHX01BQ0hfQ0FNNjA9eQotQ09ORklHX01BQ0hfU0FNOV9MOTI2MD15Ci1DT05GSUdfTUFDSF9BRkVCOTI2MD15Ci1DT05GSUdfTUFDSF9DUFU5MjYwPXkKLUNPTkZJR19NQUNIX0ZMRVhJQklUWT15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOUcyMEVLPXkKLUNPTkZJR19NQUNIX0FUOTFTQU05RzIwRUtfMk1NQz15Ci1DT05GSUdfTUFDSF9DUFU5RzIwPXkKLUNPTkZJR19NQUNIX0FDTUVORVRVU0ZPWEcyMD15Ci1DT05GSUdfTUFDSF9QT1JUVVhHMjA9eQotQ09ORklHX01BQ0hfU1RBTVA5RzIwPXkKLUNPTkZJR19NQUNIX1BDT05UUk9MX0cyMD15Ci1DT05GSUdfTUFDSF9HU0lBMThTPXkKLUNPTkZJR19NQUNIX1NOQVBQRVJfOTI2MD15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOV9EVD15Ci1DT05GSUdfQVQ5MV9TTE9XX0NMT0NLPXkKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci1DT05GSUdfQUVBQkk9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQVJNX0FQUEVOREVEX0RUQj15Ci1DT05GSUdfQVJNX0FUQUdfRFRCX0NPTVBBVD15Ci1DT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMwLDExNTIwMCBpbml0cmQ9MHgyMTEwMDAwMCwzMTQ1NzI4IHJvb3Q9L2Rldi9yYW0wIHJ3IgotQ09ORklHX0FVVE9fWlJFTEFERFI9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19ERVZUTVBGUz15Ci1DT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX0RBVEFGTEFTSD15Ci1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX0FUTUVMPXkKLUNPTkZJR19NVERfVUJJPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19FRVBST01fQVQyNT15Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19NQUNCPXkKLSMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9GQVJBREFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfTUlDUk9DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1NFRVEgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0Ci1DT05GSUdfU01TQ19QSFk9eQotIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0dQSU89eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9BVE1FTD15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0dQSU89eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX0FUTUVMPXkKLUNPTkZJR19TUElfU1BJREVWPXkKLUNPTkZJR19HUElPX1NZU0ZTPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotQ09ORklHX1BPV0VSX1JFU0VUPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRz15Ci1DT05GSUdfU09VTkQ9eQotQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1NFUVVFTkNFUj15Ci1DT05GSUdfU05EX01JWEVSX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9TVE9SQUdFPXkKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfQVQ5MT15Ci1DT05GSUdfVVNCX0dfU0VSSUFMPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19BVE1FTE1DST15Ci1DT05GSUdfTU1DX1NQST15Ci1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfUlYzMDI5QzI9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQotQ09ORklHX0lJTz15Ci1DT05GSUdfQVQ5MV9BREM9eQotQ09ORklHX0VYVDRfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19VQklGU19GUz15Ci1DT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFI9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX05MU19JU084ODU5XzE1PXkKLUNPTkZJR19OTFNfVVRGOD15Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTEw9eQotQ09ORklHX0VBUkxZX1BSSU5USz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxXzlnMTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MV85ZzEwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM1MDVkOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxXzlnMTBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLSMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19LRVJORUxfTFpNQT15Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX05BTUVTUEFDRVM9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxU0FNOTI2MT15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOTI2MUVLPXkKLUNPTkZJR19NQUNIX0FUOTFTQU05RzEwRUs9eQotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDIxMTAwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCi1DT05GSUdfQVVUT19aUkVMQUREUj15Ci1DT05GSUdfVkZQPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTE9eQotQ09ORklHX01BQzgwMjExPXkKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfREVWVE1QRlM9eQotQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX1VCST15Ci1DT05GSUdfTVREX1VCSV9HTFVFQkk9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19BVE1FTF9UQ0xJQj15Ci1DT05GSUdfQVRNRUxfU1NDPXkKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ETTkwMDA9eQotQ09ORklHX1VTQl9aRDEyMDE9bQotQ09ORklHX1JUTDgxODc9bQotQ09ORklHX0xJQkVSVEFTPW0KLUNPTkZJR19MSUJFUlRBU19VU0I9bQotQ09ORklHX0xJQkVSVEFTX1NESU89bQotQ09ORklHX0xJQkVSVEFTX1NQST1tCi1DT05GSUdfUlQyWDAwPW0KLUNPTkZJR19SVDI1MDBVU0I9bQotQ09ORklHX1JUNzNVU0I9bQotQ09ORklHX1pEMTIxMVJXPW0KLUNPTkZJR19JTlBVVF9QT0xMREVWPW0KLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0yNDAKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0zMjAKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVM9eQotQ09ORklHX1NFUklBTF9BVE1FTD15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0dQSU89eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX0FUTUVMPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotQ09ORklHX1BPV0VSX1JFU0VUPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRz15Ci1DT05GSUdfRkI9eQotQ09ORklHX0ZCX0FUTUVMPXkKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0FUTUVMX0xDREM9eQotIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQotQ09ORklHX0xPR089eQotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9TRVFVRU5DRVI9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLSMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAotQ09ORklHX1NORF9BVDczQzIxMz15Ci1DT05GSUdfU05EX1VTQl9BVURJTz1tCi0jIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0I9eQotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9BVDkxPXkKLUNPTkZJR19VU0JfR19TRVJJQUw9eQotQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX0FUTUVMTUNJPW0KLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci1DT05GSUdfTEVEU19HUElPPXkKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19TUVVBU0hGUz15Ci1DT05GSUdfU1FVQVNIRlNfTFpPPXkKLUNPTkZJR19TUVVBU0hGU19YWj15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMTU9eQotQ09ORklHX05MU19VVEY4PXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2NzFjOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0jIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX05BTUVTUEFDRVM9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxU0FNOTI2Mz15Ci1DT05GSUdfTUFDSF9BVDkxU0FNOTI2M0VLPXkKLUNPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRD15Ci0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKLUNPTkZJR19BVVRPX1pSRUxBRERSPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotQ09ORklHX05FVF9JUElQPXkKLUNPTkZJR19JUF9NUk9VVEU9eQotQ09ORklHX0lQX1BJTVNNX1YxPXkKLUNPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PXkKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfREVWVE1QRlM9eQotQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX05GVEw9eQotQ09ORklHX05GVExfUlc9eQotQ09ORklHX01URF9EQVRBRkxBU0g9eQotQ09ORklHX01URF9CTE9DSzJNVEQ9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX1VCST15Ci1DT05GSUdfTVREX1VCSV9HTFVFQkk9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0FUTUVMX1RDTElCPXkKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19NQUNCPXkKLUNPTkZJR19TTVNDX1BIWT15Ci0jIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9QT0xMREVWPW0KLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9BVE1FTD15Ci1DT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0dQSU89eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX0FUTUVMPXkKLUNPTkZJR19HUElPX1NZU0ZTPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotQ09ORklHX1BPV0VSX1JFU0VUPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRz15Ci1DT05GSUdfRkI9eQotQ09ORklHX0ZCX0FUTUVMPXkKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQotQ09ORklHX0xPR089eQotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9TRVFVRU5DRVI9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLSMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAotQ09ORklHX1NORF9BVE1FTF9BQzk3Qz15Ci0jIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVVNCX0FVRElPPW0KLUNPTkZJR19VU0I9eQotQ09ORklHX1VTQl9NT049eQotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9BVE1FTF9VU0JBPXkKLUNPTkZJR19VU0JfR19TRVJJQUw9eQotQ09ORklHX01NQz15Ci1DT05GSUdfU0RJT19VQVJUPW0KLUNPTkZJR19NTUNfQVRNRUxNQ0k9bQotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLUNPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfUFdNPXkKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQotQ09ORklHX1BXTT15Ci1DT05GSUdfUFdNX0FUTUVMPXkKLUNPTkZJR19FWFQ0X0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WM19BQ0w9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX05MU19VVEY4PXkKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19YWl9ERUM9eQotQ09ORklHX0ZPTlRTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlnNDVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWc0NV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NmQxYTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWc0NV9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFTQU05RzQ1PXkKLUNPTkZJR19NQUNIX0FUOTFTQU05TTEwRzQ1RUs9eQotQ09ORklHX01BQ0hfQVQ5MVNBTTlfRFQ9eQotQ09ORklHX0FUOTFfU0xPV19DTE9DSz15Ci1DT05GSUdfQUVBQkk9eQotQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFk9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTEyOE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4NzExMDAwMDAsMjUxNjU4MjQgcm9vdD0vZGV2L3JhbTAgcnciCi1DT05GSUdfQVVUT19aUkVMQUREUj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVF82UkQ9eQotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19ERVZUTVBGUz15Ci1DT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9EQVRBRkxBU0g9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9BVE1FTD15Ci1DT05GSUdfTVREX1VCST15Ci1DT05GSUdfTVREX1VCSV9HTFVFQkk9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTQKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19BVE1FTF9UQ0xJQj15Ci1DT05GSUdfQVRNRUxfU1NDPXkKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX01BQ0I9eQotQ09ORklHX0RBVklDT01fUEhZPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9KT1lERVY9eQotQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9RVDEwNzA9eQotQ09ORklHX0tFWUJPQVJEX1FUMjE2MD15Ci1DT05GSUdfS0VZQk9BUkRfR1BJTz15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX01YVD1tCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0FUTUVMPXkKLUNPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfR1BJTz15Ci1DT05GSUdfU1BJPXkKLUNPTkZJR19TUElfQVRNRUw9eQotQ09ORklHX1BPV0VSX1NVUFBMWT15Ci1DT05GSUdfUE9XRVJfUkVTRVQ9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci1DT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfQVRNRUw9eQotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15Ci1DT05GSUdfTENEX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0FUTUVMX0xDREM9eQotIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAotQ09ORklHX0JBQ0tMSUdIVF9QV009eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQotQ09ORklHX0xPR089eQotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9TRVFVRU5DRVI9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLSMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAotQ09ORklHX1NORF9BVE1FTF9BQzk3Qz15Ci0jIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotQ09ORklHX1VTQl9FSENJX0hDRD15Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfQUNNPXkKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0FUTUVMX1VTQkE9eQotQ09ORklHX1VTQl9HX01VTFRJPXkKLUNPTkZJR19VU0JfR19NVUxUSV9DREM9eQotQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQVRNRUxNQ0k9eQotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLUNPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfUFdNPXkKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMD15Ci1DT05GSUdfRE1BREVWSUNFUz15Ci1DT05GSUdfQVRfSERNQUM9eQotQ09ORklHX0RNQVRFU1Q9bQotIyBDT05GSUdfSU9NTVVfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUlPPXkKLUNPTkZJR19BVDkxX0FEQz15Ci1DT05GSUdfUFdNPXkKLUNPTkZJR19QV01fQVRNRUw9eQotQ09ORklHX0VYVDRfRlM9eQotQ09ORklHX0ZBTk9USUZZPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19TVFJJUF9BU01fU1lNUz15Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19ERUJVR19MTD15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19DUllQVE9fRUNCPXkKLSMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fVVNFUl9BUElfSEFTSD1tCi1DT05GSUdfQ1JZUFRPX1VTRVJfQVBJX1NLQ0lQSEVSPW0KLSMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVFM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMjZkMzQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLSMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXQVAgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFTQU05Ukw9eQotQ09ORklHX01BQ0hfQVQ5MVNBTTlSTEVLPXkKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci1DT05GSUdfQUVBQkk9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMwLDExNTIwMCBpbml0cmQ9MHgyMTEwMDAwMCwxNzEwNTM2MyByb290PS9kZXYvcmFtMCBydyIKLUNPTkZJR19BVVRPX1pSRUxBRERSPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19ERVZUTVBGUz15Ci1DT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX0RBVEFGTEFTSD15Ci1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX0FUTUVMPXkKLUNPTkZJR19NVERfVUJJPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD00Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0yNDU3NgotQ09ORklHX1NDU0k9eQotQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTMyMAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTI0MAotQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0FUTUVMPXkKLUNPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19HUElPPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9BVE1FTD15Ci1DT05GSUdfUE9XRVJfU1VQUExZPXkKLUNPTkZJR19QT1dFUl9SRVNFVD15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0c9eQotQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9BVE1FTD15Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0FUTUVMX1VTQkE9eQotQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX0FUTUVMTUNJPW0KLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci1DT05GSUdfTEVEU19HUElPPXkKLUNPTkZJR19MRURTX1BXTT15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfRFJWX0FUOTFTQU05PXkKLUNPTkZJR19JSU89eQotQ09ORklHX0FUOTFfQURDPXkKLUNPTkZJR19QV009eQotQ09ORklHX1BXTV9BVE1FTD15Ci1DT05GSUdfRVhUNF9GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1VCSUZTX0ZTPXkKLUNPTkZJR19DUkFNRlM9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX05MU19JU084ODU5XzE1PXkKLUNPTkZJR19OTFNfVVRGOD15Ci1DT05GSUdfREVCVUdfSU5GTz15Ci1DT05GSUdfREVCVUdfVVNFUj15Ci1DT05GSUdfREVCVUdfTEw9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxeDQwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXg0MF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWU5MjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxeDQwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19FTUJFRERFRD15Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSRkQgaXMgbm90IHNldAotIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQj15Ci0jIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NVSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9BVDkxPXkKLUNPTkZJR19BUkNIX0FUOTFYNDA9eQotQ09ORklHX01BQ0hfQVQ5MUVCMDE9eQotQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQwPXkKLUNPTkZJR19DUFVfQVJNN1RETUk9eQotQ09ORklHX1NFVF9NRU1fUEFSQU09eQotQ09ORklHX0RSQU1fQkFTRT0weDAxMDAwMDAwCi1DT05GSUdfRFJBTV9TSVpFPTB4MDA0MDAwMDAKLUNPTkZJR19GTEFTSF9NRU1fQkFTRT0weDAxNDAwMDAwCi1DT05GSUdfUFJPQ0VTU09SX0lEPTB4MTQwMDAwNDAKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0JJTkZNVF9GTEFUPXkKLSMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfUkFNPXkKLUNPTkZJR19NVERfUk9NPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci0jIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19GUz15Ci0jIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2JjbV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JjbV9kZWZjb25maWcKaW5kZXggYmM2MTRmNC4uODNhODdlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9iY21fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmNtX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsOCBAQAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiBDT05GSUdfQVJDSF9CQ009eQotQ09ORklHX0FSQ0hfQkNNX01PQklMRT15CitDT05GSUdfQVJDSF9CQ01fMjE2NjQ9eQorQ09ORklHX0FSQ0hfQkNNXzI4MVhYPXkKIENPTkZJR19BUk1fVEhVTUJFRT15CiBDT05GSUdfU01QPXkKIENPTkZJR19QUkVFTVBUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZwppbmRleCBlMjFlZjgzLi5jNDE5OTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnCkBAIC0xMzQsNiArMTM0LDcgQEAKIENPTkZJR19VU0JfRFdDMz15CiBDT05GSUdfVVNCX0hTSUNfVVNCMzUwMz15CiBDT05GSUdfTU1DPXkKK0NPTkZJR19NTUNfQkxPQ0tfTUlOT1JTPTE2CiBDT05GSUdfTU1DX1NESENJPXkKIENPTkZJR19NTUNfU0RIQ0lfUzNDPXkKIENPTkZJR19NTUNfU0RIQ0lfUzNDX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2hpc2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oaXNpX2RlZmNvbmZpZwppbmRleCAxNzcyNTA1Li4xZmUzNjIxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oaXNpX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2hpc2lfZGVmY29uZmlnCkBAIC01LDYgKzUsOCBAQAogQ09ORklHX1JEX0xaTUE9eQogQ09ORklHX0FSQ0hfSElTST15CiBDT05GSUdfQVJDSF9ISTN4eHg9eQorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfQ01ETElORV9QQVJUSVRJT049eQogQ09ORklHX0FSQ0hfSElYNUhEMj15CiBDT05GSUdfQVJDSF9ISVAwND15CiBDT05GSUdfU01QPXkKQEAgLTE0LDggKzE2LDExIEBACiBDT05GSUdfSElHSE1FTT15CiBDT05GSUdfQVJNX0FQUEVOREVEX0RUQj15CiBDT05GSUdfQVJNX0FUQUdfRFRCX0NPTVBBVD15CitDT05GSUdfTkVPTj15CiBDT05GSUdfQVJNX0FUQUdfRFRCX0NPTVBBVF9DTURMSU5FX0ZST01fQk9PVExPQURFUj15CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKK0NPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX1BOUD15CkBAIC0yNiw2ICszMSw3IEBACiBDT05GSUdfQVRBPXkKIENPTkZJR19TQVRBX0FIQ0lfUExBVEZPUk09eQogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0hJWDVIRDJfR01BQz15CiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0RFUFJFQ0FURURfT1BUSU9OUz15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CkBAIC0zOSw4ICs0NSwxMyBAQAogQ09ORklHX1NQST15CiBDT05GSUdfU1BJX1BMMDIyPXkKIENPTkZJR19QSU5DVFJMX1NJTkdMRT15CitDT05GSUdfREVCVUdfR1BJTz15CitDT05GSUdfR1BJT19TWVNGUz15CitDT05GSUdfR1BJT0xJQj15CiBDT05GSUdfR1BJT19HRU5FUklDX1BMQVRGT1JNPXkKIENPTkZJR19SRUdVTEFUT1JfR1BJTz15CitDT05GSUdfTUZEX1NZU0NPTj15CitDT05GSUdfUE9XRVJfUkVTRVRfU1lTQ09OPXkKIENPTkZJR19EUk09eQogQ09ORklHX0ZCX1NJTVBMRT15CiBDT05GSUdfVVNCPXkKQEAgLTQ4LDE1ICs1OSwyMSBAQAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfTVhDPXkKIENPTkZJR19VU0JfRUhDSV9IQ0RfUExBVEZPUk09eQorQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX09IQ0lfSENEX1BMQVRGT1JNPXkKIENPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfTk9QX1VTQl9YQ0VJVj15CiBDT05GSUdfTU1DPXkKIENPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX01NQ19EVz15CitDT05GSUdfTU1DX0RXX0lETUFDPXkKK0NPTkZJR19NTUNfRFdfUExURk09eQogQ09ORklHX1JUQ19EUlZfUEwwMzE9eQogQ09ORklHX0RNQURFVklDRVM9eQogQ09ORklHX0RXX0RNQUM9eQogQ09ORklHX1BMMzMwX0RNQT15CiBDT05GSUdfUFdNPXkKK0NPTkZJR19QSFlfSElYNUhEMl9TQVRBPXkKIENPTkZJR19FWFQ0X0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKQEAgLTY1LDYgKzgyLDggQEAKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfUFJJTlRLX1RJTUU9eQogQ09ORklHX0RFQlVHX0ZTPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUj15CiBDT05GSUdfVkZQPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW14X3Y2X3Y3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW14X3Y2X3Y3X2RlZmNvbmZpZwppbmRleCA2NzkwZjFiLi5mNzA3Y2QyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lteF92Nl92N19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pbXhfdjZfdjdfZGVmY29uZmlnCkBAIC0xNjMsNyArMTYzLDEzIEBACiBDT05GSUdfR1BJT19TWVNGUz15CiBDT05GSUdfR1BJT19NQzlTMDhEWjYwPXkKIENPTkZJR19HUElPX1NUTVBFPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0dQSU9fRkFOPXkKK0NPTkZJR19USEVSTUFMPXkKK0NPTkZJR19DUFVfVEhFUk1BTD15CitDT05GSUdfSU1YX1RIRVJNQUw9eQorQ09ORklHX1BPV0VSX1NVUFBMWT15CitDT05GSUdfUE9XRVJfUkVTRVQ9eQorQ09ORklHX1BPV0VSX1JFU0VUX0lNWD15CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX0lNWDJfV0RUPXkKIENPTkZJR19NRkRfREE5MDUyX0kyQz15CkBAIC0yMTEsNiArMjE3LDcgQEAKIENPTkZJR19TTkRfU09DX0lNWF9TR1RMNTAwMD15CiBDT05GSUdfU05EX1NPQ19JTVhfU1BESUY9eQogQ09ORklHX1NORF9TT0NfSU1YX01DMTM3ODM9eQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDM1g9eQogQ09ORklHX1NORF9TSU1QTEVfQ0FSRD15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQpAQCAtMjM5LDYgKzI0Niw3IEBACiBDT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMPXkKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CiBDT05GSUdfUlRDX0RSVl9JU0wxMjA4PXkKIENPTkZJR19SVENfRFJWX1BDRjg1NjM9eQogQ09ORklHX1JUQ19EUlZfTUMxM1hYWD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZwppbmRleCBjMWY1YWRjLi43MWYxNDY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKQEAgLTgsNiArOCw5IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19BUkNIX01VTFRJX1Y0VD15CitDT05GSUdfQVJDSF9NVUxUSV9WNT15CisjIENPTkZJR19BUkNIX01VTFRJX1Y3IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lOVEVHUkFUT1I9eQogQ09ORklHX0FSQ0hfSU5URUdSQVRPUl9BUD15CiBDT05GSUdfQVJDSF9JTlRFR1JBVE9SX0NQPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWcKaW5kZXggOTMyYWU0MC4uMjBhM2ZmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWcKQEAgLTIwLDYgKzIwLDkgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfQVJDSF9LRVlTVE9ORT15CiBDT05GSUdfQVJNX0xQQUU9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX01TST15CitDT05GSUdfUENJX0tFWVNUT05FPXkKIENPTkZJR19TTVA9eQogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0FFQUJJPXkKQEAgLTE5NCwzICsxOTcsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPXkKK0NPTkZJR19LRVlTVE9ORV9JUlE9eQorQ09ORklHX0dQSU9fU1lTQ09OPXkKK0NPTkZJR19USV9EQVZJTkNJX01ESU89eQorQ09ORklHX01BUlZFTExfUEhZPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva29lbHNjaF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tvZWxzY2hfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzNkMTliLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva29lbHNjaF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1BFUkZfRVZFTlRTPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWT15Ci1DT05GSUdfQVJDSF9SOEE3NzkxPXkKLUNPTkZJR19NQUNIX0tPRUxTQ0g9eQotIyBDT05GSUdfU1dQX0VNVUxBVEUgaXMgbm90IHNldAotQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFPXkKLUNPTkZJR19QTDMxMF9FUlJBVEFfNTg4MzY5PXkKLUNPTkZJR19BUk1fRVJSQVRBXzc1NDMyMj15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfUkNBUl9HRU4yPXkKLUNPTkZJR19QQ0lfUkNBUl9HRU4yX1BDSUU9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfU0NIRURfTUM9eQotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0FSTV9BUFBFTkRFRF9EVEI9eQotQ09ORklHX0tFWEVDPXkKLUNPTkZJR19BVVRPX1pSRUxBRERSPXkKLUNPTkZJR19WRlA9eQotQ09ORklHX05FT049eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotQ09ORklHX1BNX1JVTlRJTUU9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19ERVZUTVBGUz15Ci1DT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19BVEE9eQotQ09ORklHX1NBVEFfUkNBUj15Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfTTI1UDgwPXkKLUNPTkZJR19NVERfU1BJX05PUj15Ci1DT05GSUdfRUVQUk9NX0FUMjQ9eQotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUX1ZFTkRPUl9BUkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NBREVOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX0ZBUkFEQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNSRUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9OQVRTRU1JIGlzIG5vdCBzZXQKLUNPTkZJR19TSF9FVEg9eQotIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU01TQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0dQSU89eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9TSF9TQ0k9eQotQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MjAKLUNPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX01VWD15Ci1DT05GSUdfSTJDX1NIX01PQklMRT15Ci1DT05GSUdfSTJDX1JDQVI9eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX1JTUEk9eQotQ09ORklHX1NQSV9TSF9NU0lPRj15Ci1DT05GSUdfR1BJT0xJQj15Ci1DT05GSUdfR1BJT19SQ0FSPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19USEVSTUFMPXkKLUNPTkZJR19SQ0FSX1RIRVJNQUw9eQotQ09ORklHX1JFR1VMQVRPUj15Ci1DT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0U9eQotQ09ORklHX1JFR1VMQVRPUl9EQTkyMTA9eQotQ09ORklHX1JFR1VMQVRPUl9HUElPPXkKLUNPTkZJR19NRURJQV9TVVBQT1JUPXkKLUNPTkZJR19NRURJQV9DQU1FUkFfU1VQUE9SVD15Ci1DT05GSUdfVjRMX1BMQVRGT1JNX0RSSVZFUlM9eQotQ09ORklHX1NPQ19DQU1FUkE9eQotQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk09eQotQ09ORklHX1ZJREVPX1JDQVJfVklOPXkKLSMgQ09ORklHX01FRElBX1NVQkRSVl9BVVRPU0VMRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19BRFY3MTgwPXkKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfU0RIST15Ci1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci0jIENPTkZJR19JT01NVV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19DT05GSUdGU19GUz15Ci0jIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQVJNX1VOV0lORCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnCmluZGV4IDAxOGJlZjkuLjlkNTY3ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnCkBAIC02Nyw5ICs2NywxMSBAQAogQ09ORklHX1NBVEFfTVY9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX05FVF9EU0FfTVY4OEU2MTIzXzYxXzY1PXkKK0NPTkZJR19ORVRfRFNBX01WODhFNjE3MT15CiBDT05GSUdfTVY2NDNYWF9FVEg9eQogQ09ORklHX1I4MTY5PXkKIENPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfTVdMOEs9bQogQ09ORklHX0xJQkVSVEFTPXkKIENPTkZJR19MSUJFUlRBU19TRElPPXkKIENPTkZJR19JTlBVVF9FVkRFVj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCmluZGV4IDlkN2EzMmYuLmQ3ODk2NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCkBAIC0zLDEyICszLDE0IEBACiBDT05GSUdfSVJRX0RPTUFJTl9ERUJVRz15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfQ0dST1VQUz15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19QRVJGX0VWRU5UUz15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19DTURMSU5FX1BBUlRJVElPTj15CiBDT05GSUdfQVJDSF9WSVJUPXkKIENPTkZJR19BUkNIX01WRUJVPXkKIENPTkZJR19NQUNIX0FSTUFEQV8zNzA9eQpAQCAtMTcsNyArMTksOSBAQAogQ09ORklHX01BQ0hfQVJNQURBX1hQPXkKIENPTkZJR19NQUNIX0RPVkU9eQogQ09ORklHX0FSQ0hfQkNNPXkKLUNPTkZJR19BUkNIX0JDTV9NT0JJTEU9eQorQ09ORklHX0FSQ0hfQkNNX0NZR05VUz15CitDT05GSUdfQVJDSF9CQ01fMjE2NjQ9eQorQ09ORklHX0FSQ0hfQkNNXzI4MVhYPXkKIENPTkZJR19BUkNIX0JDTV81MzAxWD15CiBDT05GSUdfQVJDSF9CUkNNU1RCPXkKIENPTkZJR19BUkNIX0JFUkxJTj15CkBAIC0xMjQsOCArMTI4LDEyIEBACiBDT05GSUdfQ01BX1NJWkVfTUJZVEVTPTY0CiBDT05GSUdfT01BUF9PQ1AyU0NQPXkKIENPTkZJR19NVEQ9eQorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9NMjVQODA9eQorQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfU1BJX05PUj15CitDT05GSUdfTVREX1VCST15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19BRDUyNVhfRFBPVD15CiBDT05GSUdfQUQ1MjVYX0RQT1RfSTJDPXkKQEAgLTE0Niw2ICsxNTQsNyBAQAogQ09ORklHX1NBVEFfSElHSEJBTks9eQogQ09ORklHX1NBVEFfTVY9eQogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0hJWDVIRDJfR01BQz15CiBDT05GSUdfU1VONElfRU1BQz15CiBDT05GSUdfTUFDQj15CiBDT05GSUdfTkVUX0NBTFhFREFfWEdNQUM9eQpAQCAtMTYwLDYgKzE2OSw3IEBACiBDT05GSUdfWElMSU5YX0VNQUNMSVRFPXkKIENPTkZJR19BVDgwM1hfUEhZPXkKIENPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKIENPTkZJR19JQ1BMVVNfUEhZPXkKIENPTkZJR19VU0JfUEVHQVNVUz15CiBDT05GSUdfVVNCX1VTQk5FVD15CkBAIC0yMzQsNiArMjQ0LDcgQEAKIENPTkZJR19TUElfVEVHUkEyMF9TRkxBU0g9eQogQ09ORklHX1NQSV9URUdSQTIwX1NMSU5LPXkKIENPTkZJR19TUElfWElMSU5YPXkKK0NPTkZJR19TUElfU1BJREVWPXkKIENPTkZJR19QSU5DVFJMX0FTMzcyMj15CiBDT05GSUdfUElOQ1RSTF9QQUxNQVM9eQogQ09ORklHX1BJTkNUUkxfQVBRODA4ND15CkBAIC0yNjEsNiArMjcyLDcgQEAKIENPTkZJR19TVF9USEVSTUFMX01FTU1BUD15CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1hJTElOWF9XQVRDSERPRz15CitDT05GSUdfQVJNX1NQODA1X1dBVENIRE9HPXkKIENPTkZJR19PUklPTl9XQVRDSERPRz15CiBDT05GSUdfU1VOWElfV0FUQ0hET0c9eQogQ09ORklHX01FU09OX1dBVENIRE9HPXkKQEAgLTI2OCw2ICsyODAsNyBAQAogQ09ORklHX01GRF9CQ001OTBYWD15CiBDT05GSUdfTUZEX0NST1NfRUM9eQogQ09ORklHX01GRF9DUk9TX0VDX1NQST15CitDT05GSUdfTUZEX01BWDc3Njg2PXkKIENPTkZJR19NRkRfTUFYODkwNz15CiBDT05GSUdfTUZEX1NFQ19DT1JFPXkKIENPTkZJR19NRkRfU1RNUEU9eQpAQCAtMjc5LDcgKzI5MiwxMCBAQAogQ09ORklHX1JFR1VMQVRPUl9BUzM3MjI9eQogQ09ORklHX1JFR1VMQVRPUl9CQ001OTBYWD15CiBDT05GSUdfUkVHVUxBVE9SX0dQSU89eQorQ09ORklHX01GRF9TWVNDT049eQorQ09ORklHX1BPV0VSX1JFU0VUX1NZU0NPTj15CiBDT05GSUdfUkVHVUxBVE9SX01BWDg5MDc9eQorQ09ORklHX1JFR1VMQVRPUl9NQVg3NzY4Nj15CiBDT05GSUdfUkVHVUxBVE9SX1BBTE1BUz15CiBDT05GSUdfUkVHVUxBVE9SX1MyTVBTMTE9eQogQ09ORklHX1JFR1VMQVRPUl9TNU04NzY3PXkKQEAgLTMwOCw2ICszMjQsOCBAQAogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TTkQ9eQorQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUz15CitDT05GSUdfU05EX1VTQl9BVURJTz15CiBDT05GSUdfU05EX1NPQz15CiBDT05GSUdfU05EX1NPQ19URUdSQT15CiBDT05GSUdfU05EX1NPQ19URUdSQV9SVDU2NDA9eQpAQCAtMzIxLDkgKzMzOSwxMSBAQAogQ09ORklHX1VTQl9YSENJX01WRUJVPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1RFR1JBPXkKK0NPTkZJR19VU0JfRUhDSV9IQ0RfU1RJPXkKIENPTkZJR19VU0JfRUhDSV9IQ0RfUExBVEZPUk09eQogQ09ORklHX1VTQl9JU1AxNzYwX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfU1RJPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUExBVEZPUk09eQogQ09ORklHX1VTQl9TVE9SQUdFPXkKIENPTkZJR19VU0JfQ0hJUElERUE9eQpAQCAtMzU1LDYgKzM3NSw4IEBACiBDT05GSUdfTU1DX01WU0RJTz15CiBDT05GSUdfTU1DX1NVTlhJPXkKIENPTkZJR19NTUNfRFc9eQorQ09ORklHX01NQ19EV19JRE1BQz15CitDT05GSUdfTU1DX0RXX1BMVEZNPXkKIENPTkZJR19NTUNfRFdfRVhZTk9TPXkKIENPTkZJR19NTUNfRFdfUk9DS0NISVA9eQogQ09ORklHX05FV19MRURTPXkKQEAgLTM3OSw2ICs0MDEsNyBAQAogQ09ORklHX1JUQ19EUlZfQVMzNzIyPXkKIENPTkZJR19SVENfRFJWX0RTMTMwNz15CiBDT05GSUdfUlRDX0RSVl9NQVg4OTA3PXkKK0NPTkZJR19SVENfRFJWX01BWDc3Njg2PXkKIENPTkZJR19SVENfRFJWX1BBTE1BUz15CiBDT05GSUdfUlRDX0RSVl9UV0w0MDMwPXkKIENPTkZJR19SVENfRFJWX1RQUzY1ODZYPXkKQEAgLTQxMyw2ICs0MzYsNyBAQAogQ09ORklHX05WRUNfUEFaMDA9eQogQ09ORklHX1FDT01fR1NCST15CiBDT05GSUdfQ09NTU9OX0NMS19RQ09NPXkKK0NPTkZJR19DT01NT05fQ0xLX01BWDc3Njg2PXkKIENPTkZJR19BUFFfTU1DQ184MDg0PXkKIENPTkZJR19NU01fR0NDXzg2NjA9eQogQ09ORklHX01TTV9NTUNDXzg5NjA9eQpAQCAtNDI2LDEyICs0NTAsMTkgQEAKIENPTkZJR19QV009eQogQ09ORklHX1BXTV9URUdSQT15CiBDT05GSUdfUFdNX1ZUODUwMD15CitDT05GSUdfUEhZX0hJWDVIRDJfU0FUQT15CiBDT05GSUdfT01BUF9VU0IyPXkKIENPTkZJR19USV9QSVBFMz15CiBDT05GSUdfUEhZX01JUEhZMzY1WD15CitDT05GSUdfUEhZX1NUSUg0MVhfVVNCPXkKIENPTkZJR19QSFlfU1VONElfVVNCPXkKIENPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19BVVRPRlM0X0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15CitDT05GSUdfTlRGU19GUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19VQklGU19GUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1NRVUFTSEZTPXkKIENPTkZJR19TUVVBU0hGU19MWk89eQpAQCAtNDQwLDYgKzQ3MSw5IEBACiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ST09UX05GUz15CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX1VURjg9eQogQ09ORklHX1BSSU5US19USU1FPXkKIENPTkZJR19ERUJVR19GUz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tdmVidV92NV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y1X2RlZmNvbmZpZwppbmRleCAyMjA1OGUxLi44MjRkZTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y1X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y1X2RlZmNvbmZpZwpAQCAtNjcsOSArNjcsMTEgQEAKIENPTkZJR19TQVRBX01WPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19ORVRfRFNBX01WODhFNjEyM182MV82NT15CitDT05GSUdfTkVUX0RTQV9NVjg4RTYxNzE9eQogQ09ORklHX01WNjQzWFhfRVRIPXkKIENPTkZJR19SODE2OT15CiBDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX01XTDhLPW0KIENPTkZJR19MSUJFUlRBUz15CiBDT05GSUdfTElCRVJUQVNfU0RJTz15CiBDT05GSUdfSU5QVVRfRVZERVY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tdmVidV92N19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZwppbmRleCBlZDBhMGQxLi42MjdhY2NlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZwpAQCAtNDUsNiArNDUsNyBAQAogQ09ORklHX0RFVlRNUEZTPXkKIENPTkZJR19ERVZUTVBGU19NT1VOVD15CiBDT05GSUdfTVREPXkKK0NPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKQEAgLTU5LDEwICs2MCwxMiBAQAogQ09ORklHX0FIQ0lfTVZFQlU9eQogQ09ORklHX1NBVEFfTVY9eQogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX05FVF9EU0FfTVY4OEU2MTcxPXkKIENPTkZJR19NVjY0M1hYX0VUSD15CiBDT05GSUdfTVZORVRBPXkKIENPTkZJR19NVlBQMj15CiBDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0ZJWEVEX1BIWT15CiBDT05GSUdfTVdJRklFWD15CiBDT05GSUdfTVdJRklFWF9TRElPPXkKIENPTkZJR19JTlBVVF9FVkRFVj15CkBAIC03Miw2ICs3NSw3IEBACiBDT05GSUdfU0VSSUFMXzgyNTBfRFc9eQogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiBDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX01WNjRYWFg9eQogQ09ORklHX1NQST15CiBDT05GSUdfU1BJX09SSU9OPXkKQEAgLTg1LDcgKzg5LDkgQEAKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9TT0M9eQogQ09ORklHX1NORF9LSVJLV09PRF9TT0M9eQotQ09ORklHX1NORF9LSVJLV09PRF9TT0NfQVJNQURBMzcwX0RCPXkKK0NPTkZJR19TTkRfU09DX0NTNDJMNTFfSTJDPXkKK0NPTkZJR19TTkRfU09DX1NQRElGPXkKK0NPTkZJR19TTkRfU0lNUExFX0NBUkQ9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX1hIQ0lfSENEPXkKIENPTkZJR19VU0JfWEhDSV9NVkVCVT15CkBAIC05Niw2ICsxMDIsNyBAQAogQ09ORklHX01NQ19TREhDST15CiBDT05GSUdfTU1DX1NESENJX1BMVEZNPXkKIENPTkZJR19NTUNfU0RIQ0lfRE9WRT15CitDT05GSUdfTU1DX1NESENJX1BYQVYzPXkKIENPTkZJR19NTUNfTVZTRElPPXkKIENPTkZJR19MRURTX0dQSU89eQogQ09ORklHX0xFRFNfQ0xBU1M9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKaW5kZXggMjYzYWUzOC4uN2QyYWQzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnCkBAIC0yMCw3ICsyMCw2IEBACiBDT05GSUdfQUVBQkk9eQogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfRlBFX05XRlBFPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CkBAIC01NywxNCArNTYsMTIgQEAKIENPTkZJR19NVERfT05FTkFORD15CiBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFPXkKIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfU0NTST15CiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQogQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CkBAIC04MywyMSArODAsMjEgQEAKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfR1BJTz15CitDT05GSUdfS0VZQk9BUkRfU1RNUEU9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CiBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTFfQ09OU09MRT15CiBDT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19IV19SQU5ET01fTk9NQURJSz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19HUElPPXkKLUNPTkZJR19JMkNfTk9NQURJSz15CiBDT05GSUdfREVCVUdfR1BJTz15CitDT05GSUdfR1BJT19TVE1QRT15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfTUZEX1NUTVBFPXkKIENPTkZJR19SRUdVTEFUT1I9eQogQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQogIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX0FSTU1NQ0k9eQogQ09ORklHX05FV19MRURTPXkKQEAgLTEyNSwxMiArMTIyLDEyIEBACiBDT05GSUdfTkxTX0FTQ0lJPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19OTFNfSVNPODg1OV8xNT15CitDT05GSUdfREVCVUdfSU5GTz15CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT15CiBDT05GSUdfQ1JZUFRPX0RFUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWcKaW5kZXggYjNmODY2Ny4uM2UwOTI4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZwpAQCAtMTI5LDExICsxMjksMjcgQEAKIENPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogQ09ORklHX01EPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVF9WRU5ET1JfQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DQURFTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9GQVJBREFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfSElTSUxJQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKIENPTkZJR19LUzg4NTE9eQogQ09ORklHX0tTODg1MV9NTEw9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNST0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUVVBTENPTU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKIENPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldAogQ09ORklHX1RJX0NQU1c9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQgaXMgbm90IHNldAogQ09ORklHX0FUODAzWF9QSFk9eQogQ09ORklHX1NNU0NfUEhZPXkKIENPTkZJR19VU0JfVVNCTkVUPXkKQEAgLTE2MSw2ICsxNzcsNyBAQAogQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PW0KK0NPTkZJR19UT1VDSFNDUkVFTl9FRFRfRlQ1WDA2PW0KIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA1PW0KIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3PW0KIENPTkZJR19JTlBVVF9NSVNDPXkKQEAgLTI2NCw2ICsyODEsOCBAQAogQ09ORklHX1NORF9ERUJVRz15CiBDT05GSUdfU05EX1VTQl9BVURJTz1tCiBDT05GSUdfU05EX1NPQz1tCitDT05GSUdfU05EX0VETUFfU09DPW0KK0NPTkZJR19TTkRfQU0zM1hYX1NPQ19FVk09bQogQ09ORklHX1NORF9PTUFQX1NPQz1tCiBDT05GSUdfU05EX09NQVBfU09DX09NQVBfVFdMNDAzMD1tCiBDT05GSUdfU05EX09NQVBfU09DX09NQVBfQUJFX1RXTDYwNDA9bQpAQCAtMjcxLDYgKzI5MCw3IEBACiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQogQ09ORklHX1VTQl9NT049eQorQ09ORklHX1VTQl9YSENJX0hDRD1tCiBDT05GSUdfVVNCX1dETT15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9EV0MzPW0KQEAgLTMwNiw2ICszMjYsOCBAQAogQ09ORklHX0VYVENPTj15CiBDT05GSUdfRVhUQ09OX1BBTE1BUz15CiBDT05GSUdfUFdNPXkKK0NPTkZJR19QV01fVElFQ0FQPXkKK0NPTkZJR19QV01fVElFSFJQV009eQogQ09ORklHX1BXTV9UV0w9eQogQ09ORklHX1BXTV9UV0xfTEVEPXkKIENPTkZJR19PTUFQX1VTQjI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZwppbmRleCBjOTA4OWM5Li5iNThmYjMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZwpAQCAtMTIsNyArMTIsNyBAQAogQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKQEAgLTIwLDcgKzIwLDYgQEAKIENPTkZJR19TT0NfU0FNX1Y3PXkKIENPTkZJR19TT0NfU0FNQTVEMz15CiBDT05GSUdfU09DX1NBTUE1RDQ9eQotQ09ORklHX01BQ0hfU0FNQTVfRFQ9eQogQ09ORklHX0FFQUJJPXkKIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKQEAgLTMwLDYgKzI5LDggQEAKIENPTkZJR19LRVhFQz15CiBDT05GSUdfQVVUT19aUkVMQUREUj15CiBDT05GSUdfVkZQPXkKK0NPTkZJR19ORU9OPXkKK0NPTkZJR19LRVJORUxfTU9ERV9ORU9OPXkKICMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKIENPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19QTV9ERUJVRz15CkBAIC0xNzYsMTEgKzE3NywxMyBAQAogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKK0NPTkZJR19BVF9YRE1BQz15CiAjIENPTkZJR19JT01NVV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19JSU89eQogQ09ORklHX0FUOTFfQURDPXkKIENPTkZJR19QV009eQogQ09ORklHX1BXTV9BVE1FTD15CitDT05GSUdfUFdNX0FUTUVMX1RDQj15CiBDT05GSUdfRVhUNF9GUz15CiBDT05GSUdfRkFOT1RJRlk9eQogQ09ORklHX1ZGQVRfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zaG1vYmlsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NobW9iaWxlX2RlZmNvbmZpZwppbmRleCBkNzM0NmFkLi42M2ZiNTMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NobW9iaWxlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NobW9iaWxlX2RlZmNvbmZpZwpAQCAtMTcsNyArMTcsNiBAQAogQ09ORklHX0FSQ0hfUjhBNzc5MD15CiBDT05GSUdfQVJDSF9SOEE3NzkxPXkKIENPTkZJR19BUkNIX1I4QTc3OTQ9eQotQ09ORklHX01BQ0hfS09FTFNDSD15CiBDT05GSUdfTUFDSF9MQUdFUj15CiBDT05GSUdfTUFDSF9NQVJaRU49eQogIyBDT05GSUdfU1dQX0VNVUxBVEUgaXMgbm90IHNldApAQCAtMTI2LDYgKzEyNSw3IEBACiBDT05GSUdfU05EX1NPQz15CiBDT05GSUdfU05EX1NPQ19TSDRfRlNJPXkKIENPTkZJR19TTkRfU09DX1JDQVI9eQorQ09ORklHX1NORF9TT0NfQUs0NjQyPXkKIENPTkZJR19TTkRfU09DX1dNODk3OD15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQpAQCAtMTQ2LDYgKzE0Niw4IEBACiBDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKIENPTkZJR19TSF9ETUFFPXkKK0NPTkZJR19SQ0FSX0FVRE1BQ19QUD15CitDT05GSUdfUkNBUl9ETUFDPXkKICMgQ09ORklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1BXTT15CiBDT05GSUdfUFdNX1JFTkVTQVNfVFBVPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdGVncmFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy90ZWdyYV9kZWZjb25maWcKaW5kZXggODg4ZmMxNS4uNDA3NTBmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy90ZWdyYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy90ZWdyYV9kZWZjb25maWcKQEAgLTk3LDEwICs5Nyw4IEBACiBDT05GSUdfQVBEUzk4MDJBTFM9eQogQ09ORklHX0lTTDI5MDAzPXkKIENPTkZJR19FRVBST01fQVQyND15Ci1DT05GSUdfU0NTST15CiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQkxLX0RFVl9TUj15Ci1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKIENPTkZJR19TQVRBX0FIQ0k9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaF90aW1lci5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaF90aW1lci5oCmluZGV4IDkyNzkzYmEuLmQ0ZWJmNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoX3RpbWVyLmgKQEAgLTc4LDYgKzc4LDE1IEBACiAJcmV0dXJuIHZhbDsKIH0KIAorc3RhdGljIGlubGluZSB1NjQgYXJjaF9jb3VudGVyX2dldF9jbnRwY3Qodm9pZCkKK3sKKwl1NjQgY3ZhbDsKKworCWlzYigpOworCWFzbSB2b2xhdGlsZSgibXJyYyBwMTUsIDAsICVRMCwgJVIwLCBjMTQiIDogIj1yIiAoY3ZhbCkpOworCXJldHVybiBjdmFsOworfQorCiBzdGF0aWMgaW5saW5lIHU2NCBhcmNoX2NvdW50ZXJfZ2V0X2NudHZjdCh2b2lkKQogewogCXU2NCBjdmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1aWRsZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1aWRsZS5oCmluZGV4IDJmY2E2MGEuLmFmMzE5YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdWlkbGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHVpZGxlLmgKQEAgLTE1LDcgKzE1LDYgQEAKIAkuZXhpdF9sYXRlbmN5ICAgICAgICAgICA9IDEsXAogCS50YXJnZXRfcmVzaWRlbmN5ICAgICAgID0gMSxcCiAJLnBvd2VyX3VzYWdlCQk9IHAsXAotCS5mbGFncyAgICAgICAgICAgICAgICAgID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsXAogCS5uYW1lICAgICAgICAgICAgICAgICAgID0gIldGSSIsXAogCS5kZXNjICAgICAgICAgICAgICAgICAgID0gIkFSTSBXRkkiLFwKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCmluZGV4IDJjOWYxMGQuLjg5YWVmZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZmlybXdhcmUuaApAQCAtMjgsNyArMjgsNyBAQAogCS8qCiAJICogRW50ZXJzIENQVSBpZGxlIG1vZGUKIAkgKi8KLQlpbnQgKCpkb19pZGxlKSh2b2lkKTsKKwlpbnQgKCpkb19pZGxlKSh1bnNpZ25lZCBsb25nIG1vZGUpOwogCS8qCiAJICogU2V0cyBib290IGFkZHJlc3Mgb2Ygc3BlY2lmaWVkIHBoeXNpY2FsIENQVQogCSAqLwpAQCAtNDEsNiArNDEsMTQgQEAKIAkgKiBJbml0aWFsaXplcyBMMiBjYWNoZQogCSAqLwogCWludCAoKmwyeDBfaW5pdCkodm9pZCk7CisJLyoKKwkgKiBFbnRlciBzeXN0ZW0td2lkZSBzdXNwZW5kLgorCSAqLworCWludCAoKnN1c3BlbmQpKHZvaWQpOworCS8qCisJICogUmVzdG9yZSBzdGF0ZSBvZiBwcml2aWxlZ2VkIGhhcmR3YXJlIGFmdGVyIHN5c3RlbS13aWRlIHN1c3BlbmQuCisJICovCisJaW50ICgqcmVzdW1lKSh2b2lkKTsKIH07CiAKIC8qIEdsb2JhbCBwb2ludGVyIGZvciBjdXJyZW50IGZpcm13YXJlX29wcyBzdHJ1Y3R1cmUsIGNhbid0IGJlIE5VTEwuICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAppbmRleCAxODA1Njc0Li5kYjU4ZGViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTQ3LDEzICs0NywxMyBAQAogICogR2VuZXJpYyBJTyByZWFkL3dyaXRlLiAgVGhlc2UgcGVyZm9ybSBuYXRpdmUtZW5kaWFuIGFjY2Vzc2VzLiAgTm90ZQogICogdGhhdCBzb21lIGFyY2hpdGVjdHVyZXMgd2lsbCB3YW50IHRvIHJlLWRlZmluZSBfX3Jhd197cmVhZCx3cml0ZX13LgogICovCi1leHRlcm4gdm9pZCBfX3Jhd193cml0ZXNiKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGJ5dGVsZW4pOwotZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzdyh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCB3b3JkbGVuKTsKLWV4dGVybiB2b2lkIF9fcmF3X3dyaXRlc2wodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Cit2b2lkIF9fcmF3X3dyaXRlc2Iodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgYnl0ZWxlbik7Cit2b2lkIF9fcmF3X3dyaXRlc3codm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7Cit2b2lkIF9fcmF3X3dyaXRlc2wodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CiAKLWV4dGVybiB2b2lkIF9fcmF3X3JlYWRzYihjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBieXRlbGVuKTsKLWV4dGVybiB2b2lkIF9fcmF3X3JlYWRzdyhjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCB3b3JkbGVuKTsKLWV4dGVybiB2b2lkIF9fcmF3X3JlYWRzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKK3ZvaWQgX19yYXdfcmVhZHNiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGJ5dGVsZW4pOwordm9pZCBfX3Jhd19yZWFkc3coY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7Cit2b2lkIF9fcmF3X3JlYWRzbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKIAogI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKIC8qCkBAIC02OSw2ICs2OSw3IEBACiAgKiB3cml0ZWJhY2sgYWRkcmVzc2luZyBtb2RlcyBhcyB0aGVzZSBpbmN1ciBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlCiAgKiBvdmVyaGVhZCAodGhlIGFkZHJlc3MgZ2VuZXJhdGlvbiBtdXN0IGJlIGVtdWxhdGVkIGluIHNvZnR3YXJlKS4KICAqLworI2RlZmluZSBfX3Jhd193cml0ZXcgX19yYXdfd3JpdGV3CiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGV3KHUxNiB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlhc20gdm9sYXRpbGUoInN0cmggJTEsICUwIgpAQCAtNzYsNiArNzcsNyBAQAogCQkgICAgIDogInIiICh2YWwpKTsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkdyBfX3Jhd19yZWFkdwogc3RhdGljIGlubGluZSB1MTYgX19yYXdfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXUxNiB2YWw7CkBAIC04Niw2ICs4OCw3IEBACiB9CiAjZW5kaWYKIAorI2RlZmluZSBfX3Jhd193cml0ZWIgX19yYXdfd3JpdGViCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGViKHU4IHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCWFzbSB2b2xhdGlsZSgic3RyYiAlMSwgJTAiCkBAIC05Myw2ICs5Niw3IEBACiAJCSAgICAgOiAiciIgKHZhbCkpOwogfQogCisjZGVmaW5lIF9fcmF3X3dyaXRlbCBfX3Jhd193cml0ZWwKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWwodTMyIHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCWFzbSB2b2xhdGlsZSgic3RyICUxLCAlMCIKQEAgLTEwMCw2ICsxMDQsNyBAQAogCQkgICAgIDogInIiICh2YWwpKTsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkYiBfX3Jhd19yZWFkYgogc3RhdGljIGlubGluZSB1OCBfX3Jhd19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdTggdmFsOwpAQCAtMTA5LDYgKzExNCw3IEBACiAJcmV0dXJuIHZhbDsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkbCBfX3Jhd19yZWFkbAogc3RhdGljIGlubGluZSB1MzIgX19yYXdfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXUzMiB2YWw7CkBAIC0yNjcsMjAgKzI3Myw2IEBACiAjZGVmaW5lIGluc2wocCxkLGwpCQlfX3Jhd19yZWFkc2woX19pbyhwKSxkLGwpCiAjZW5kaWYKIAotI2RlZmluZSBvdXRiX3AodmFsLHBvcnQpCW91dGIoKHZhbCksKHBvcnQpKQotI2RlZmluZSBvdXR3X3AodmFsLHBvcnQpCW91dHcoKHZhbCksKHBvcnQpKQotI2RlZmluZSBvdXRsX3AodmFsLHBvcnQpCW91dGwoKHZhbCksKHBvcnQpKQotI2RlZmluZSBpbmJfcChwb3J0KQkJaW5iKChwb3J0KSkKLSNkZWZpbmUgaW53X3AocG9ydCkJCWludygocG9ydCkpCi0jZGVmaW5lIGlubF9wKHBvcnQpCQlpbmwoKHBvcnQpKQotCi0jZGVmaW5lIG91dHNiX3AocG9ydCxmcm9tLGxlbikJb3V0c2IocG9ydCxmcm9tLGxlbikKLSNkZWZpbmUgb3V0c3dfcChwb3J0LGZyb20sbGVuKQlvdXRzdyhwb3J0LGZyb20sbGVuKQotI2RlZmluZSBvdXRzbF9wKHBvcnQsZnJvbSxsZW4pCW91dHNsKHBvcnQsZnJvbSxsZW4pCi0jZGVmaW5lIGluc2JfcChwb3J0LHRvLGxlbikJaW5zYihwb3J0LHRvLGxlbikKLSNkZWZpbmUgaW5zd19wKHBvcnQsdG8sbGVuKQlpbnN3KHBvcnQsdG8sbGVuKQotI2RlZmluZSBpbnNsX3AocG9ydCx0byxsZW4pCWluc2wocG9ydCx0byxsZW4pCi0KIC8qCiAgKiBTdHJpbmcgdmVyc2lvbiBvZiBJTyBtZW1vcnkgYWNjZXNzIG9wczoKICAqLwpAQCAtMzQ3LDQwICszMzksNDIgQEAKICNkZWZpbmUgaW91bm1hcAkJCQlfX2FybV9pb3VubWFwCiAKIC8qCi0gKiBpb3tyZWFkLHdyaXRlfXs4LDE2LDMyfSBtYWNyb3MKKyAqIGlve3JlYWQsd3JpdGV9ezE2LDMyfWJlKCkgbWFjcm9zCiAgKi8KLSNpZm5kZWYgaW9yZWFkOAotI2RlZmluZSBpb3JlYWQ4KHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBfX3Jhd19yZWFkYihwKTsgX19pb3JtYigpOyBfX3Y7IH0pCi0jZGVmaW5lIGlvcmVhZDE2KHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBsZTE2X3RvX2NwdSgoX19mb3JjZSBfX2xlMTYpX19yYXdfcmVhZHcocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKLSNkZWZpbmUgaW9yZWFkMzIocCkJKHsgdW5zaWduZWQgaW50IF9fdiA9IGxlMzJfdG9fY3B1KChfX2ZvcmNlIF9fbGUzMilfX3Jhd19yZWFkbChwKSk7IF9faW9ybWIoKTsgX192OyB9KQorI2RlZmluZSBpb3JlYWQxNmJlKHApCQkoeyBfX3UxNiBfX3YgPSBiZTE2X3RvX2NwdSgoX19mb3JjZSBfX2JlMTYpX19yYXdfcmVhZHcocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKKyNkZWZpbmUgaW9yZWFkMzJiZShwKQkJKHsgX191MzIgX192ID0gYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKV9fcmF3X3JlYWRsKHApKTsgX19pb3JtYigpOyBfX3Y7IH0pCiAKLSNkZWZpbmUgaW9yZWFkMTZiZShwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gYmUxNl90b19jcHUoKF9fZm9yY2UgX19iZTE2KV9fcmF3X3JlYWR3KHApKTsgX19pb3JtYigpOyBfX3Y7IH0pCi0jZGVmaW5lIGlvcmVhZDMyYmUocCkJKHsgdW5zaWduZWQgaW50IF9fdiA9IGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMilfX3Jhd19yZWFkbChwKSk7IF9faW9ybWIoKTsgX192OyB9KQorI2RlZmluZSBpb3dyaXRlMTZiZSh2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGV3KChfX2ZvcmNlIF9fdTE2KWNwdV90b19iZTE2KHYpLCBwKTsgfSkKKyNkZWZpbmUgaW93cml0ZTMyYmUodixwKQkoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRlbCgoX19mb3JjZSBfX3UzMiljcHVfdG9fYmUzMih2KSwgcCk7IH0pCiAKLSNkZWZpbmUgaW93cml0ZTgodixwKQkoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRlYih2LCBwKTsgfSkKLSNkZWZpbmUgaW93cml0ZTE2KHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZXcoKF9fZm9yY2UgX191MTYpY3B1X3RvX2xlMTYodiksIHApOyB9KQotI2RlZmluZSBpb3dyaXRlMzIodixwKQkoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRlbCgoX19mb3JjZSBfX3UzMiljcHVfdG9fbGUzMih2KSwgcCk7IH0pCi0KLSNkZWZpbmUgaW93cml0ZTE2YmUodixwKSAoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNiljcHVfdG9fYmUxNih2KSwgcCk7IH0pCi0jZGVmaW5lIGlvd3JpdGUzMmJlKHYscCkgKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpY3B1X3RvX2JlMzIodiksIHApOyB9KQotCi0jZGVmaW5lIGlvcmVhZDhfcmVwKHAsZCxjKQlfX3Jhd19yZWFkc2IocCxkLGMpCi0jZGVmaW5lIGlvcmVhZDE2X3JlcChwLGQsYykJX19yYXdfcmVhZHN3KHAsZCxjKQotI2RlZmluZSBpb3JlYWQzMl9yZXAocCxkLGMpCV9fcmF3X3JlYWRzbChwLGQsYykKLQotI2RlZmluZSBpb3dyaXRlOF9yZXAocCxzLGMpCV9fcmF3X3dyaXRlc2IocCxzLGMpCi0jZGVmaW5lIGlvd3JpdGUxNl9yZXAocCxzLGMpCV9fcmF3X3dyaXRlc3cocCxzLGMpCi0jZGVmaW5lIGlvd3JpdGUzMl9yZXAocCxzLGMpCV9fcmF3X3dyaXRlc2wocCxzLGMpCi0KKyNpZm5kZWYgaW9wb3J0X21hcAorI2RlZmluZSBpb3BvcnRfbWFwIGlvcG9ydF9tYXAKIGV4dGVybiB2b2lkIF9faW9tZW0gKmlvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgbnIpOworI2VuZGlmCisjaWZuZGVmIGlvcG9ydF91bm1hcAorI2RlZmluZSBpb3BvcnRfdW5tYXAgaW9wb3J0X3VubWFwCiBleHRlcm4gdm9pZCBpb3BvcnRfdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKICNlbmRpZgogCiBzdHJ1Y3QgcGNpX2RldjsKIAorI2RlZmluZSBwY2lfaW91bm1hcCBwY2lfaW91bm1hcAogZXh0ZXJuIHZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyKTsKIAogLyoKKyAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KKyAqIGFjY2VzcworICovCisjZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyKHApCV9fdmEocCkKKworLyoKKyAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW8uaD4KKworLyoKICAqIGNhbiB0aGUgaGFyZHdhcmUgbWFwIHRoaXMgaW50byBvbmUgc2VnbWVudCBvciBub3QsIGdpdmVuIG5vIG90aGVyCiAgKiBjb25zdHJhaW50cy4KICAqLwpAQCAtNDAyLDE3ICszOTYsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCi0gKiBhY2Nlc3MKLSAqLwotI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCi0KLS8qCi0gKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCi0gKi8KLSNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKLQotLyoKICAqIFJlZ2lzdGVyIElTQSBtZW1vcnkgYW5kIHBvcnQgbG9jYXRpb25zIGZvciBnbGliYyBpb3BsL2luYi9vdXRiCiAgKiBlbXVsYXRpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvcGNpLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3BjaS5oCmluZGV4IDdmYzQyNzguLjgyOTJiNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvcGNpLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9wY2kuaApAQCAtMjIsNiArMjIsOSBAQAogI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOUwogCWludAkJZG9tYWluOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKm1zaV9jdHJsOworI2VuZGlmCiAJc3RydWN0IHBjaV9vcHMJKm9wczsKIAlpbnQJCW5yX2NvbnRyb2xsZXJzOwogCXZvaWQJCSoqcHJpdmF0ZV9kYXRhOwpAQCAtMzYsOCArMzksNiBAQAogCQkJCQkgIHJlc291cmNlX3NpemVfdCBzdGFydCwKIAkJCQkJICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKIAkJCQkJICByZXNvdXJjZV9zaXplX3QgYWxpZ24pOwotCXZvaWQJCSgqYWRkX2J1cykoc3RydWN0IHBjaV9idXMgKmJ1cyk7Ci0Jdm9pZAkJKCpyZW1vdmVfYnVzKShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIH07CiAKIC8qCkBAIC00Nyw2ICs0OCw5IEBACiAjaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TCiAJaW50CQlkb21haW47CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCXN0cnVjdCBtc2lfY29udHJvbGxlciAqbXNpX2N0cmw7CisjZW5kaWYKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJaW50CQlidXNucjsJCS8qIHByaW1hcnkgYnVzIG51bWJlcgkJCSovCiAJdTY0CQltZW1fb2Zmc2V0OwkvKiBidXMtPmNwdSBtZW1vcnkgbWFwcGluZyBvZmZzZXQJKi8KQEAgLTY1LDggKzY5LDYgQEAKIAkJCQkJICByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCiAJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCiAJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKTsKLQl2b2lkCQkoKmFkZF9idXMpKHN0cnVjdCBwY2lfYnVzICpidXMpOwotCXZvaWQJCSgqcmVtb3ZlX2J1cykoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiAJdm9pZAkJKnByaXZhdGVfZGF0YTsJLyogcGxhdGZvcm0gY29udHJvbGxlciBwcml2YXRlIGRhdGEJKi8KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKaW5kZXggZTczMTAxOC4uMTg0ZGVmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKQEAgLTI3NCwxMSArMjc0LDEzIEBACiAgKiB0cmFuc2xhdGlvbiBmb3IgdHJhbnNsYXRpbmcgRE1BIGFkZHJlc3Nlcy4gIFVzZSB0aGUgZHJpdmVyCiAgKiBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oLgogICovCisjZGVmaW5lIHZpcnRfdG9fcGh5cyB2aXJ0X3RvX3BoeXMKIHN0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgdmlydF90b19waHlzKGNvbnN0IHZvbGF0aWxlIHZvaWQgKngpCiB7CiAJcmV0dXJuIF9fdmlydF90b19waHlzKCh1bnNpZ25lZCBsb25nKSh4KSk7CiB9CiAKKyNkZWZpbmUgcGh5c190b192aXJ0IHBoeXNfdG9fdmlydAogc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQocGh5c19hZGRyX3QgeCkKIHsKIAlyZXR1cm4gKHZvaWQgKilfX3BoeXNfdG9fdmlydCh4KTsKQEAgLTMyMiwxMSArMzI0LDEzIEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19WSVJUX1RPX0JVUworI2RlZmluZSB2aXJ0X3RvX2J1cyB2aXJ0X3RvX2J1cwogc3RhdGljIGlubGluZSBfX2RlcHJlY2F0ZWQgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2J1cyh2b2lkICp4KQogewogCXJldHVybiBfX3ZpcnRfdG9fYnVzKCh1bnNpZ25lZCBsb25nKXgpOwogfQogCisjZGVmaW5lIGJ1c190b192aXJ0IGJ1c190b192aXJ0CiBzdGF0aWMgaW5saW5lIF9fZGVwcmVjYXRlZCB2b2lkICpidXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIHgpCiB7CiAJcmV0dXJuICh2b2lkICopX19idXNfdG9fdmlydCh4KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAppbmRleCBjM2E4MzY5Li5kOWNmMTM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0xMiw3ICsxMiw3IEBACiAjaWZuZGVmIF9fQVJNX1BFUkZfRVZFTlRfSF9fCiAjZGVmaW5lIF9fQVJNX1BFUkZfRVZFTlRfSF9fCiAKLSNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFMKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIHN0cnVjdCBwdF9yZWdzOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBlcmZfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oCmluZGV4IDBiNjQ4YzUuLmIxNTk2YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCisjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKwogLyoKICAqIHN0cnVjdCBhcm1fcG11X3BsYXRkYXRhIC0gQVJNIFBNVSBwbGF0Zm9ybSBkYXRhCiAgKgpAQCAtNjYsMTkgKzY4LDI1IEBACiAJLyoKIAkgKiBUaGUgZXZlbnRzIHRoYXQgYXJlIGFjdGl2ZSBvbiB0aGUgUE1VIGZvciB0aGUgZ2l2ZW4gaW5kZXguCiAJICovCi0Jc3RydWN0IHBlcmZfZXZlbnQJKipldmVudHM7CisJc3RydWN0IHBlcmZfZXZlbnQJKmV2ZW50c1tBUk1QTVVfTUFYX0hXRVZFTlRTXTsKIAogCS8qCiAJICogQSAxIGJpdCBmb3IgYW4gaW5kZXggaW5kaWNhdGVzIHRoYXQgdGhlIGNvdW50ZXIgaXMgYmVpbmcgdXNlZCBmb3IKIAkgKiBhbiBldmVudC4gQSAwIG1lYW5zIHRoYXQgdGhlIGNvdW50ZXIgY2FuIGJlIHVzZWQuCiAJICovCi0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgKnVzZWRfbWFzazsKKwlERUNMQVJFX0JJVE1BUCh1c2VkX21hc2ssIEFSTVBNVV9NQVhfSFdFVkVOVFMpOwogCiAJLyoKIAkgKiBIYXJkd2FyZSBsb2NrIHRvIHNlcmlhbGl6ZSBhY2Nlc3NlcyB0byBQTVUgcmVnaXN0ZXJzLiBOZWVkZWQgZm9yIHRoZQogCSAqIHJlYWQvbW9kaWZ5L3dyaXRlIHNlcXVlbmNlcy4KIAkgKi8KIAlyYXdfc3BpbmxvY2tfdAkJcG11X2xvY2s7CisKKwkvKgorCSAqIFdoZW4gdXNpbmcgcGVyY3B1IElSUXMsIHdlIG5lZWQgYSBwZXJjcHUgZGV2X2lkLiBQbGFjZSBpdCBoZXJlIGFzIHdlCisJICogYWxyZWFkeSBoYXZlIHRvIGFsbG9jYXRlIHRoaXMgc3RydWN0IHBlciBjcHUuCisJICovCisJc3RydWN0IGFybV9wbXUJCSpwZXJjcHVfcG11OwogfTsKIAogc3RydWN0IGFybV9wbXUgewpAQCAtMTA3LDcgKzExNSw4IEBACiAJc3RydWN0IG11dGV4CXJlc2VydmVfbXV0ZXg7CiAJdTY0CQltYXhfcGVyaW9kOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBsYXRfZGV2aWNlOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzCSooKmdldF9od19ldmVudHMpKHZvaWQpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzCV9fcGVyY3B1ICpod19ldmVudHM7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCWhvdHBsdWdfbmI7CiB9OwogCiAjZGVmaW5lIHRvX2FybV9wbXUocCkgKGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgYXJtX3BtdSwgcG11KSkKQEAgLTEyNyw2ICsxMzYsMjcgQEAKIAkJCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdLAogCQkgICAgIHUzMiByYXdfZXZlbnRfbWFzayk7CiAKK3N0cnVjdCBwbXVfcHJvYmVfaW5mbyB7CisJdW5zaWduZWQgaW50IGNwdWlkOworCXVuc2lnbmVkIGludCBtYXNrOworCWludCAoKmluaXQpKHN0cnVjdCBhcm1fcG11ICopOworfTsKKworI2RlZmluZSBQTVVfUFJPQkUoX2NwdWlkLCBfbWFzaywgX2ZuKQlcCit7CQkJCQlcCisJLmNwdWlkID0gKF9jcHVpZCksCQlcCisJLm1hc2sgPSAoX21hc2spLAkJXAorCS5pbml0ID0gKF9mbiksCQkJXAorfQorCisjZGVmaW5lIEFSTV9QTVVfUFJPQkUoX2NwdWlkLCBfZm4pIFwKKwlQTVVfUFJPQkUoX2NwdWlkLCBBUk1fQ1BVX1BBUlRfTUFTSywgX2ZuKQorCisjZGVmaW5lIEFSTV9QTVVfWFNDQUxFX01BU0sJKCgweGZmIDw8IDI0KSB8IEFSTV9DUFVfWFNDQUxFX0FSQ0hfTUFTSykKKworI2RlZmluZSBYU0NBTEVfUE1VX1BST0JFKF92ZXJzaW9uLCBfZm4pIFwKKwlQTVVfUFJPQkUoQVJNX0NQVV9JTVBfSU5URUwgPDwgMjQgfCBfdmVyc2lvbiwgQVJNX1BNVV9YU0NBTEVfTUFTSywgX2ZuKQorCiAjZW5kaWYgLyogQ09ORklHX0hXX1BFUkZfRVZFTlRTICovCiAKICNlbmRpZiAvKiBfX0FSTV9QTVVfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL2FzbTkyNjAuUyBiL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvYXNtOTI2MC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MmY4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL2FzbTkyNjAuUwpAQCAtMCwwICsxLDI5IEBACisvKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqICBNb2RpZmllZCBmb3IgQVNNOTI2MCBieSBPbGVrc2lqIFJlbWVwbCA8bGludXhAcmVtcGVsLXByaXZhdC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisJCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2LCB0bXAKKwkJbGRyCVxycCwgPSBDT05GSUdfREVCVUdfVUFSVF9QSFlTCisJCWxkcglccnYsID0gQ09ORklHX0RFQlVHX1VBUlRfVklSVAorCQkuZW5kbQorCisJCS5tYWNybwl3YWl0dWFydCxyZCxyeAorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHIJXHJkLCBbXHJ4LCAjMHg1MF0JQCBUWERBVEEKKwkJLmVuZG0KKworCQkubWFjcm8JYnVzeXVhcnQscmQscngKKzEwMDI6CQlsZHIJXHJkLCBbXHJ4LCAjMHg2MF0JQCBTVEFUCisJCXRzdAlccmQsICMxIDw8IDI3CQlAIFRYRU1QVFkKKwkJYmVxCTEwMDJiCQkJQCB3YWl0IHVudGlsIHRyYW5zbWl0IGRvbmUKKwkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvcmVuZXNhcy1zY2lmLlMgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL3JlbmVzYXMtc2NpZi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODIwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL3JlbmVzYXMtc2NpZi5TCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBSZW5lc2FzIFNDSUYoQSkgZGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogQmFzZWQgb24gcjhhNzc5MC5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjZGVmaW5lIFNDSUZfUEhZUwlDT05GSUdfREVCVUdfVUFSVF9QSFlTCisjZGVmaW5lIFNDSUZfVklSVAkoKFNDSUZfUEhZUyAmIDB4MDBmZmZmZmYpIHwgMHhmZDAwMDAwMCkKKworI2lmIENPTkZJR19ERUJVR19VQVJUX1BIWVMgPCAweGU2ZTAwMDAwCisvKiBTQ0lGQSAqLworI2RlZmluZSBGVERSCQkweDIwCisjZGVmaW5lIEZTUgkJMHgxNAorI2Vsc2UKKy8qIFNDSUYgKi8KKyNkZWZpbmUgRlREUgkJMHgwYworI2RlZmluZSBGU1IJCTB4MTAKKyNlbmRpZgorCisjZGVmaW5lIFRERkUJKDEgPDwgNSkKKyNkZWZpbmUgVEVORAkoMSA8PCA2KQorCisJLm1hY3JvCWFkZHJ1YXJ0LCBycCwgcnYsIHRtcAorCWxkcglccnAsID1TQ0lGX1BIWVMKKwlsZHIJXHJ2LCA9U0NJRl9WSVJUCisJLmVuZG0KKworCS5tYWNybwl3YWl0dWFydCwgcmQsIHJ4CisxMDAxOglsZHJoCVxyZCwgW1xyeCwgI0ZTUl0KKwl0c3QJXHJkLCAjVERGRQorCWJlcQkxMDAxYgorCS5lbmRtCisKKwkubWFjcm8Jc2VuZHVhcnQsIHJkLCByeAorCXN0cmIJXHJkLCBbXHJ4LCAjRlREUl0KKwlsZHJoCVxyZCwgW1xyeCwgI0ZTUl0KKwliaWMJXHJkLCBccmQsICNURU5ECisJc3RyaAlccmQsIFtccngsICNGU1JdCisJLmVuZG0KKworCS5tYWNybwlidXN5dWFydCwgcmQsIHJ4CisxMDAxOglsZHJoCVxyZCwgW1xyeCwgI0ZTUl0KKwl0c3QJXHJkLCAjVEVORAorCWJlcQkxMDAxYgorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvc2ExMTAwLlMKc2ltaWxhcml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKcmVuYW1lIHRvIGFyY2gvYXJtL2luY2x1ZGUvZGVidWcvc2ExMTAwLlMKaW5kZXggNTMwNzcyZC4uYTBhZTRmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9zYTExMDAuUwpAQCAtMSw0ICsxLDQgQEAKLS8qIGFyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisvKiBhcmNoL2FybS9pbmNsdWRlL2RlYnVnL3NhMTEwMC5TCiAgKgogICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCiAgKgpAQCAtMTAsNyArMTAsMTMgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICovCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIFVUQ1IzCQkweDBjCisjZGVmaW5lIFVURFIJCTB4MTQKKyNkZWZpbmUgVVRTUjEJCTB4MjAKKyNkZWZpbmUgVVRDUjNfVFhFCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgRW5hYmxlICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVVFNSMV9UQlkJMHgwMDAwMDAwMQkvKiBUcmFuc21pdHRlciBCdXNZIChyZWFkKSAgICAgICAgICovCisjZGVmaW5lIFVUU1IxX1RORgkweDAwMDAwMDA0CS8qIFRyYW5zbWl0IEZJRk8gTm90IEZ1bGwgKHJlYWQpICAgKi8KIAogCQkubWFjcm8JYWRkcnVhcnQsIHJwLCBydiwgdG1wCiAJCW1yYwlwMTUsIDAsIFxycCwgYzEsIGMwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMzhkZGQ5Zi4uOGRjYmVkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtODIsNyArODIsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9QSjQpCQkrPSBwajQtY3AwLm8KIG9iai0kKENPTkZJR19DUFVfUEo0QikJCSs9IHBqNC1jcDAubwogb2JqLSQoQ09ORklHX0lXTU1YVCkJCSs9IGl3bW14dC5vCi1vYmotJChDT05GSUdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfcmVncy5vCitvYmotJChDT05GSUdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfcmVncy5vIHBlcmZfY2FsbGNoYWluLm8KIG9iai0kKENPTkZJR19IV19QRVJGX0VWRU5UUykJKz0gcGVyZl9ldmVudC5vIHBlcmZfZXZlbnRfY3B1Lm8KIEFGTEFHU19pd21teHQubwkJCTo9IC1XYSwtbWNwdT1pd21teHQKIG9iai0kKENPTkZJR19BUk1fQ1BVX1RPUE9MT0dZKSAgKz0gdG9wb2xvZ3kubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCmluZGV4IDE3YTI2YzEuLmRhYWZmNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKQEAgLTE4LDYgKzE4LDE1IEBACiAKIHN0YXRpYyBpbnQgZGVidWdfcGNpOwogCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKK3N0cnVjdCBtc2lfY29udHJvbGxlciAqcGNpYmlvc19tc2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5c2RhdGEgPSBkZXYtPmJ1cy0+c3lzZGF0YTsKKworCXJldHVybiBzeXNkYXRhLT5tc2lfY3RybDsKK30KKyNlbmRpZgorCiAvKgogICogV2UgY2FuJ3QgdXNlIHBjaV9nZXRfZGV2aWNlKCkgaGVyZSBzaW5jZSB3ZSBhcmUKICAqIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgpAQCAtMzYwLDIwICszNjksNiBAQAogfQogRVhQT1JUX1NZTUJPTChwY2liaW9zX2ZpeHVwX2J1cyk7CiAKLXZvaWQgcGNpYmlvc19hZGRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzID0gYnVzLT5zeXNkYXRhOwotCWlmIChzeXMtPmFkZF9idXMpCi0JCXN5cy0+YWRkX2J1cyhidXMpOwotfQotCi12b2lkIHBjaWJpb3NfcmVtb3ZlX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyA9IGJ1cy0+c3lzZGF0YTsKLQlpZiAoc3lzLT5yZW1vdmVfYnVzKQotCQlzeXMtPnJlbW92ZV9idXMoYnVzKTsKLX0KLQogLyoKICAqIFN3aXp6bGUgdGhlIGRldmljZSBwaW4gZWFjaCB0aW1lIHdlIGNyb3NzIGEgYnJpZGdlLiAgSWYgYSBwbGF0Zm9ybSBkb2VzCiAgKiBub3QgcHJvdmlkZSBhIHN3aXp6bGUgZnVuY3Rpb24sIHdlIHBlcmZvcm0gdGhlIHN0YW5kYXJkIFBDSSBzd2l6emxpbmcuCkBAIC00NzEsMTIgKzQ2NiwxMyBAQAogI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOUwogCQlzeXMtPmRvbWFpbiAgPSBody0+ZG9tYWluOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwkJc3lzLT5tc2lfY3RybCA9IGh3LT5tc2lfY3RybDsKKyNlbmRpZgogCQlzeXMtPmJ1c25yICAgPSBidXNucjsKIAkJc3lzLT5zd2l6emxlID0gaHctPnN3aXp6bGU7CiAJCXN5cy0+bWFwX2lycSA9IGh3LT5tYXBfaXJxOwogCQlzeXMtPmFsaWduX3Jlc291cmNlID0gaHctPmFsaWduX3Jlc291cmNlOwotCQlzeXMtPmFkZF9idXMgPSBody0+YWRkX2J1czsKLQkJc3lzLT5yZW1vdmVfYnVzID0gaHctPnJlbW92ZV9idXM7CiAJCUlOSVRfTElTVF9IRUFEKCZzeXMtPnJlc291cmNlcyk7CiAKIAkJaWYgKGh3LT5wcml2YXRlX2RhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMDJhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIEFSTSBjYWxsY2hhaW4gc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBwaWNvQ2hpcCBEZXNpZ25zLCBMdGQuLCBKYW1pZSBJbGVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQVJNIEx0ZC4sIFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiB0aGUgQVJNIE9Qcm9maWxlIGJhY2t0cmFjZSBjb2RlLgorICovCisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CisKKy8qCisgKiBUaGUgcmVnaXN0ZXJzIHdlJ3JlIGludGVyZXN0ZWQgaW4gYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlCisgKiBsZW5ndGggc2F2ZWQgcmVnaXN0ZXIgc3RydWN0dXJlLiBUaGUgZnAgcG9pbnRzIGF0IHRoZSBlbmQgb2YgdGhpcworICogc3RydWN0dXJlIHNvIHRoZSBhZGRyZXNzIG9mIHRoaXMgc3RydWN0IGlzOgorICogKHN0cnVjdCBmcmFtZV90YWlsICopKHh4eC0+ZnApLTEKKyAqCisgKiBUaGlzIGNvZGUgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIHRoZSBBUk0gT1Byb2ZpbGUgc3VwcG9ydC4KKyAqLworc3RydWN0IGZyYW1lX3RhaWwgeworCXN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqZnA7CisJdW5zaWduZWQgbG9uZyBzcDsKKwl1bnNpZ25lZCBsb25nIGxyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIEdldCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIGEgc2luZ2xlIHN0YWNrZnJhbWUgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlCisgKiBuZXh0IGZyYW1lIHRhaWwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKgordXNlcl9iYWNrdHJhY2Uoc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICp0YWlsLAorCSAgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBmcmFtZV90YWlsIGJ1ZnRhaWw7CisJdW5zaWduZWQgbG9uZyBlcnI7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdGFpbCwgc2l6ZW9mKGJ1ZnRhaWwpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCWVyciA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoJmJ1ZnRhaWwsIHRhaWwsIHNpemVvZihidWZ0YWlsKSk7CisJcGFnZWZhdWx0X2VuYWJsZSgpOworCisJaWYgKGVycikKKwkJcmV0dXJuIE5VTEw7CisKKwlwZXJmX2NhbGxjaGFpbl9zdG9yZShlbnRyeSwgYnVmdGFpbC5scik7CisKKwkvKgorCSAqIEZyYW1lIHBvaW50ZXJzIHNob3VsZCBzdHJpY3RseSBwcm9ncmVzcyBiYWNrIHVwIHRoZSBzdGFjaworCSAqICh0b3dhcmRzIGhpZ2hlciBhZGRyZXNzZXMpLgorCSAqLworCWlmICh0YWlsICsgMSA+PSBidWZ0YWlsLmZwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBidWZ0YWlsLmZwIC0gMTsKK30KKwordm9pZAorcGVyZl9jYWxsY2hhaW5fdXNlcihzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKnRhaWw7CisKKwlpZiAocGVyZl9ndWVzdF9jYnMgJiYgcGVyZl9ndWVzdF9jYnMtPmlzX2luX2d1ZXN0KCkpIHsKKwkJLyogV2UgZG9uJ3Qgc3VwcG9ydCBndWVzdCBvcyBjYWxsY2hhaW4gbm93ICovCisJCXJldHVybjsKKwl9CisKKwlwZXJmX2NhbGxjaGFpbl9zdG9yZShlbnRyeSwgcmVncy0+QVJNX3BjKTsKKworCWlmICghY3VycmVudC0+bW0pCisJCXJldHVybjsKKworCXRhaWwgPSAoc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICopcmVncy0+QVJNX2ZwIC0gMTsKKworCXdoaWxlICgoZW50cnktPm5yIDwgUEVSRl9NQVhfU1RBQ0tfREVQVEgpICYmCisJICAgICAgIHRhaWwgJiYgISgodW5zaWduZWQgbG9uZyl0YWlsICYgMHgzKSkKKwkJdGFpbCA9IHVzZXJfYmFja3RyYWNlKHRhaWwsIGVudHJ5KTsKK30KKworLyoKKyAqIEdldHMgY2FsbGVkIGJ5IHdhbGtfc3RhY2tmcmFtZSgpIGZvciBldmVyeSBzdGFja2ZyYW1lLiBUaGlzIHdpbGwgYmUgY2FsbGVkCisgKiB3aGlzdCB1bndpbmRpbmcgdGhlIHN0YWNrZnJhbWUgYW5kIGlzIGxpa2UgYSBzdWJyb3V0aW5lIHJldHVybiBzbyB3ZSB1c2UKKyAqIHRoZSBQQy4KKyAqLworc3RhdGljIGludAorY2FsbGNoYWluX3RyYWNlKHN0cnVjdCBzdGFja2ZyYW1lICpmciwKKwkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5ID0gZGF0YTsKKwlwZXJmX2NhbGxjaGFpbl9zdG9yZShlbnRyeSwgZnItPnBjKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZAorcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzdGFja2ZyYW1lIGZyOworCisJaWYgKHBlcmZfZ3Vlc3RfY2JzICYmIHBlcmZfZ3Vlc3RfY2JzLT5pc19pbl9ndWVzdCgpKSB7CisJCS8qIFdlIGRvbid0IHN1cHBvcnQgZ3Vlc3Qgb3MgY2FsbGNoYWluIG5vdyAqLworCQlyZXR1cm47CisJfQorCisJYXJtX2dldF9jdXJyZW50X3N0YWNrZnJhbWUocmVncywgJmZyKTsKKwl3YWxrX3N0YWNrZnJhbWUoJmZyLCBjYWxsY2hhaW5fdHJhY2UsIGVudHJ5KTsKK30KKwordW5zaWduZWQgbG9uZyBwZXJmX2luc3RydWN0aW9uX3BvaW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHBlcmZfZ3Vlc3RfY2JzICYmIHBlcmZfZ3Vlc3RfY2JzLT5pc19pbl9ndWVzdCgpKQorCQlyZXR1cm4gcGVyZl9ndWVzdF9jYnMtPmdldF9ndWVzdF9pcCgpOworCisJcmV0dXJuIGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgcGVyZl9taXNjX2ZsYWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBtaXNjID0gMDsKKworCWlmIChwZXJmX2d1ZXN0X2NicyAmJiBwZXJmX2d1ZXN0X2Nicy0+aXNfaW5fZ3Vlc3QoKSkgeworCQlpZiAocGVyZl9ndWVzdF9jYnMtPmlzX3VzZXJfbW9kZSgpKQorCQkJbWlzYyB8PSBQRVJGX1JFQ09SRF9NSVNDX0dVRVNUX1VTRVI7CisJCWVsc2UKKwkJCW1pc2MgfD0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUw7CisJfSBlbHNlIHsKKwkJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJCW1pc2MgfD0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOworCQllbHNlCisJCQltaXNjIHw9IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCX0KKworCXJldHVybiBtaXNjOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMjY2Y2JhNC4uZjdjNjVhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC03LDIxICs3LDE4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQVJNIEx0ZC4sIFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiB0aGUgc3BhcmM2NCBwZXJmIGV2ZW50IGNvZGUsIHdoaWNoIGlzIGluIHR1cm4gYmFzZWQKLSAqIG9uIHRoZSB4ODYgY29kZS4gQ2FsbGNoYWluIGNvZGUgaXMgYmFzZWQgb24gdGhlIEFSTSBPUHJvZmlsZSBiYWNrdHJhY2UKLSAqIGNvZGUuCisgKiBvbiB0aGUgeDg2IGNvZGUuCiAgKi8KICNkZWZpbmUgcHJfZm10KGZtdCkgImh3IHBlcmZldmVudHM6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWRlc2MuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGFzbS9wbXUuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCiBzdGF0aWMgaW50CiBhcm1wbXVfbWFwX2NhY2hlX2V2ZW50KGNvbnN0IHVuc2lnbmVkICgqY2FjaGVfbWFwKQpAQCAtODAsOCArNzcsMTIgQEAKIAkJIHUzMiByYXdfZXZlbnRfbWFzaykKIHsKIAl1NjQgY29uZmlnID0gZXZlbnQtPmF0dHIuY29uZmlnOworCWludCB0eXBlID0gZXZlbnQtPmF0dHIudHlwZTsKIAotCXN3aXRjaCAoZXZlbnQtPmF0dHIudHlwZSkgeworCWlmICh0eXBlID09IGV2ZW50LT5wbXUtPnR5cGUpCisJCXJldHVybiBhcm1wbXVfbWFwX3Jhd19ldmVudChyYXdfZXZlbnRfbWFzaywgY29uZmlnKTsKKworCXN3aXRjaCAodHlwZSkgewogCWNhc2UgUEVSRl9UWVBFX0hBUkRXQVJFOgogCQlyZXR1cm4gYXJtcG11X21hcF9od19ldmVudChldmVudF9tYXAsIGNvbmZpZyk7CiAJY2FzZSBQRVJGX1RZUEVfSFdfQ0FDSEU6CkBAIC0yMDAsNyArMjAxLDcgQEAKIGFybXBtdV9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGFybV9wbXUgKmFybXBtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmh3X2V2ZW50cyA9IGFybXBtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSB0aGlzX2NwdV9wdHIoYXJtcG11LT5od19ldmVudHMpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCWludCBpZHggPSBod2MtPmlkeDsKIApAQCAtMjE3LDcgKzIxOCw3IEBACiBhcm1wbXVfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBhcm1fcG11ICphcm1wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSBhcm1wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzID0gdGhpc19jcHVfcHRyKGFybXBtdS0+aHdfZXZlbnRzKTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlpbnQgaWR4OwogCWludCBlcnIgPSAwOwpAQCAtMjc0LDE0ICsyNzUsMTIgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqc2libGluZywgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7CiAJc3RydWN0IHBtdV9od19ldmVudHMgZmFrZV9wbXU7Ci0JREVDTEFSRV9CSVRNQVAoZmFrZV91c2VkX21hc2ssIEFSTVBNVV9NQVhfSFdFVkVOVFMpOwogCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBmYWtlIFBNVS4gV2Ugb25seSBuZWVkIHRvIHBvcHVsYXRlIHRoZQogCSAqIHVzZWRfbWFzayBmb3IgdGhlIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24uCiAJICovCi0JbWVtc2V0KGZha2VfdXNlZF9tYXNrLCAwLCBzaXplb2YoZmFrZV91c2VkX21hc2spKTsKLQlmYWtlX3BtdS51c2VkX21hc2sgPSBmYWtlX3VzZWRfbWFzazsKKwltZW1zZXQoJmZha2VfcG11LnVzZWRfbWFzaywgMCwgc2l6ZW9mKGZha2VfcG11LnVzZWRfbWFzaykpOwogCiAJaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGxlYWRlcikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzA1LDE3ICszMDQsMjEgQEAKIAlpbnQgcmV0OwogCXU2NCBzdGFydF9jbG9jaywgZmluaXNoX2Nsb2NrOwogCi0JaWYgKGlycV9pc19wZXJjcHUoaXJxKSkKLQkJZGV2ID0gKih2b2lkICoqKWRldjsKLQlhcm1wbXUgPSBkZXY7CisJLyoKKwkgKiB3ZSByZXF1ZXN0IHRoZSBJUlEgd2l0aCBhIChwb3NzaWJseSBwZXJjcHUpIHN0cnVjdCBhcm1fcG11KiosIGJ1dAorCSAqIHRoZSBoYW5kbGVycyBleHBlY3QgYSBzdHJ1Y3QgYXJtX3BtdSouIFRoZSBwZXJjcHVfaXJxIGZyYW1ld29yayB3aWxsCisJICogZG8gYW55IG5lY2Vzc2FyeSBzaGlmdGluZywgd2UganVzdCBuZWVkIHRvIHBlcmZvcm0gdGhlIGZpcnN0CisJICogZGVyZWZlcmVuY2UuCisJICovCisJYXJtcG11ID0gKih2b2lkICoqKWRldjsKIAlwbGF0X2RldmljZSA9IGFybXBtdS0+cGxhdF9kZXZpY2U7CiAJcGxhdCA9IGRldl9nZXRfcGxhdGRhdGEoJnBsYXRfZGV2aWNlLT5kZXYpOwogCiAJc3RhcnRfY2xvY2sgPSBzY2hlZF9jbG9jaygpOwogCWlmIChwbGF0ICYmIHBsYXQtPmhhbmRsZV9pcnEpCi0JCXJldCA9IHBsYXQtPmhhbmRsZV9pcnEoaXJxLCBkZXYsIGFybXBtdS0+aGFuZGxlX2lycSk7CisJCXJldCA9IHBsYXQtPmhhbmRsZV9pcnEoaXJxLCBhcm1wbXUsIGFybXBtdS0+aGFuZGxlX2lycSk7CiAJZWxzZQotCQlyZXQgPSBhcm1wbXUtPmhhbmRsZV9pcnEoaXJxLCBkZXYpOworCQlyZXQgPSBhcm1wbXUtPmhhbmRsZV9pcnEoaXJxLCBhcm1wbXUpOwogCWZpbmlzaF9jbG9jayA9IHNjaGVkX2Nsb2NrKCk7CiAKIAlwZXJmX3NhbXBsZV9ldmVudF90b29rKGZpbmlzaF9jbG9jayAtIHN0YXJ0X2Nsb2NrKTsKQEAgLTQ2OCw3ICs0NzEsNyBAQAogc3RhdGljIHZvaWQgYXJtcG11X2VuYWJsZShzdHJ1Y3QgcG11ICpwbXUpCiB7CiAJc3RydWN0IGFybV9wbXUgKmFybXBtdSA9IHRvX2FybV9wbXUocG11KTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzID0gYXJtcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmh3X2V2ZW50cyA9IHRoaXNfY3B1X3B0cihhcm1wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGVuYWJsZWQgPSBiaXRtYXBfd2VpZ2h0KGh3X2V2ZW50cy0+dXNlZF9tYXNrLCBhcm1wbXUtPm51bV9ldmVudHMpOwogCiAJaWYgKGVuYWJsZWQpCkBAIC00ODEsNyArNDg0LDcgQEAKIAlhcm1wbXUtPnN0b3AoYXJtcG11KTsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGFybXBtdV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFybV9wbXVfcGxhdGRhdGEgKnBsYXQgPSBkZXZfZ2V0X3BsYXRkYXRhKGRldik7CkBAIC01MzMsMTMwICs1MzYsMyBAQAogCXJldHVybiBwZXJmX3BtdV9yZWdpc3RlcigmYXJtcG11LT5wbXUsIGFybXBtdS0+bmFtZSwgdHlwZSk7CiB9CiAKLS8qCi0gKiBDYWxsY2hhaW4gaGFuZGxpbmcgY29kZS4KLSAqLwotCi0vKgotICogVGhlIHJlZ2lzdGVycyB3ZSdyZSBpbnRlcmVzdGVkIGluIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSB2YXJpYWJsZQotICogbGVuZ3RoIHNhdmVkIHJlZ2lzdGVyIHN0cnVjdHVyZS4gVGhlIGZwIHBvaW50cyBhdCB0aGUgZW5kIG9mIHRoaXMKLSAqIHN0cnVjdHVyZSBzbyB0aGUgYWRkcmVzcyBvZiB0aGlzIHN0cnVjdCBpczoKLSAqIChzdHJ1Y3QgZnJhbWVfdGFpbCAqKSh4eHgtPmZwKS0xCi0gKgotICogVGhpcyBjb2RlIGhhcyBiZWVuIGFkYXB0ZWQgZnJvbSB0aGUgQVJNIE9Qcm9maWxlIHN1cHBvcnQuCi0gKi8KLXN0cnVjdCBmcmFtZV90YWlsIHsKLQlzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKmZwOwotCXVuc2lnbmVkIGxvbmcgc3A7Ci0JdW5zaWduZWQgbG9uZyBscjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLS8qCi0gKiBHZXQgdGhlIHJldHVybiBhZGRyZXNzIGZvciBhIHNpbmdsZSBzdGFja2ZyYW1lIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZQotICogbmV4dCBmcmFtZSB0YWlsLgotICovCi1zdGF0aWMgc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICoKLXVzZXJfYmFja3RyYWNlKHN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqdGFpbCwKLQkgICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKLXsKLQlzdHJ1Y3QgZnJhbWVfdGFpbCBidWZ0YWlsOwotCXVuc2lnbmVkIGxvbmcgZXJyOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHRhaWwsIHNpemVvZihidWZ0YWlsKSkpCi0JCXJldHVybiBOVUxMOwotCi0JcGFnZWZhdWx0X2Rpc2FibGUoKTsKLQllcnIgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKCZidWZ0YWlsLCB0YWlsLCBzaXplb2YoYnVmdGFpbCkpOwotCXBhZ2VmYXVsdF9lbmFibGUoKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBOVUxMOwotCi0JcGVyZl9jYWxsY2hhaW5fc3RvcmUoZW50cnksIGJ1ZnRhaWwubHIpOwotCi0JLyoKLQkgKiBGcmFtZSBwb2ludGVycyBzaG91bGQgc3RyaWN0bHkgcHJvZ3Jlc3MgYmFjayB1cCB0aGUgc3RhY2sKLQkgKiAodG93YXJkcyBoaWdoZXIgYWRkcmVzc2VzKS4KLQkgKi8KLQlpZiAodGFpbCArIDEgPj0gYnVmdGFpbC5mcCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gYnVmdGFpbC5mcCAtIDE7Ci19Ci0KLXZvaWQKLXBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICp0YWlsOwotCi0JaWYgKHBlcmZfZ3Vlc3RfY2JzICYmIHBlcmZfZ3Vlc3RfY2JzLT5pc19pbl9ndWVzdCgpKSB7Ci0JCS8qIFdlIGRvbid0IHN1cHBvcnQgZ3Vlc3Qgb3MgY2FsbGNoYWluIG5vdyAqLwotCQlyZXR1cm47Ci0JfQotCi0JcGVyZl9jYWxsY2hhaW5fc3RvcmUoZW50cnksIHJlZ3MtPkFSTV9wYyk7Ci0KLQlpZiAoIWN1cnJlbnQtPm1tKQotCQlyZXR1cm47Ci0KLQl0YWlsID0gKHN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqKXJlZ3MtPkFSTV9mcCAtIDE7Ci0KLQl3aGlsZSAoKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKSAmJgotCSAgICAgICB0YWlsICYmICEoKHVuc2lnbmVkIGxvbmcpdGFpbCAmIDB4MykpCi0JCXRhaWwgPSB1c2VyX2JhY2t0cmFjZSh0YWlsLCBlbnRyeSk7Ci19Ci0KLS8qCi0gKiBHZXRzIGNhbGxlZCBieSB3YWxrX3N0YWNrZnJhbWUoKSBmb3IgZXZlcnkgc3RhY2tmcmFtZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAotICogd2hpc3QgdW53aW5kaW5nIHRoZSBzdGFja2ZyYW1lIGFuZCBpcyBsaWtlIGEgc3Vicm91dGluZSByZXR1cm4gc28gd2UgdXNlCi0gKiB0aGUgUEMuCi0gKi8KLXN0YXRpYyBpbnQKLWNhbGxjaGFpbl90cmFjZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnIsCi0JCXZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSA9IGRhdGE7Ci0JcGVyZl9jYWxsY2hhaW5fc3RvcmUoZW50cnksIGZyLT5wYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLXBlcmZfY2FsbGNoYWluX2tlcm5lbChzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3Qgc3RhY2tmcmFtZSBmcjsKLQotCWlmIChwZXJmX2d1ZXN0X2NicyAmJiBwZXJmX2d1ZXN0X2Nicy0+aXNfaW5fZ3Vlc3QoKSkgewotCQkvKiBXZSBkb24ndCBzdXBwb3J0IGd1ZXN0IG9zIGNhbGxjaGFpbiBub3cgKi8KLQkJcmV0dXJuOwotCX0KLQotCWFybV9nZXRfY3VycmVudF9zdGFja2ZyYW1lKHJlZ3MsICZmcik7Ci0Jd2Fsa19zdGFja2ZyYW1lKCZmciwgY2FsbGNoYWluX3RyYWNlLCBlbnRyeSk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWlmIChwZXJmX2d1ZXN0X2NicyAmJiBwZXJmX2d1ZXN0X2Nicy0+aXNfaW5fZ3Vlc3QoKSkKLQkJcmV0dXJuIHBlcmZfZ3Vlc3RfY2JzLT5nZXRfZ3Vlc3RfaXAoKTsKLQotCXJldHVybiBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOwotfQotCi11bnNpZ25lZCBsb25nIHBlcmZfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnQgbWlzYyA9IDA7Ci0KLQlpZiAocGVyZl9ndWVzdF9jYnMgJiYgcGVyZl9ndWVzdF9jYnMtPmlzX2luX2d1ZXN0KCkpIHsKLQkJaWYgKHBlcmZfZ3Vlc3RfY2JzLT5pc191c2VyX21vZGUoKSkKLQkJCW1pc2MgfD0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9VU0VSOwotCQllbHNlCi0JCQltaXNjIHw9IFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfS0VSTkVMOwotCX0gZWxzZSB7Ci0JCWlmICh1c2VyX21vZGUocmVncykpCi0JCQltaXNjIHw9IFBFUkZfUkVDT1JEX01JU0NfVVNFUjsKLQkJZWxzZQotCQkJbWlzYyB8PSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKLQl9Ci0KLQlyZXR1cm4gbWlzYzsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X2NwdS5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfY3B1LmMKaW5kZXggZWIyYzRkNS4uZGQ5YWNjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfY3B1LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfY3B1LmMKQEAgLTM1LDExICszNSw2IEBACiAvKiBTZXQgYXQgcnVudGltZSB3aGVuIHdlIGtub3cgd2hhdCBDUFUgdHlwZSB3ZSBhcmUuICovCiBzdGF0aWMgc3RydWN0IGFybV9wbXUgKmNwdV9wbXU7CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYXJtX3BtdSAqLCBwZXJjcHVfcG11KTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9ldmVudCAqIFtBUk1QTVVfTUFYX0hXRVZFTlRTXSwgaHdfZXZlbnRzKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nIFtCSVRTX1RPX0xPTkdTKEFSTVBNVV9NQVhfSFdFVkVOVFMpXSwgdXNlZF9tYXNrKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcG11X2h3X2V2ZW50cywgY3B1X2h3X2V2ZW50cyk7Ci0KIC8qCiAgKiBEZXNwaXRlIHRoZSBuYW1lcywgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgQ1BVLXNwZWNpZmljIGFuZCBhcmUgdXNlZAogICogYnkgdGhlIE9Qcm9maWxlL3BlcmYgY29kZS4KQEAgLTY5LDExICs2NCw2IEBACiAjaW5jbHVkZSAicGVyZl9ldmVudF92Ni5jIgogI2luY2x1ZGUgInBlcmZfZXZlbnRfdjcuYyIKIAotc3RhdGljIHN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVfcG11X2dldF9jcHVfZXZlbnRzKHZvaWQpCi17Ci0JcmV0dXJuIHRoaXNfY3B1X3B0cigmY3B1X2h3X2V2ZW50cyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGNwdV9wbXVfZW5hYmxlX3BlcmNwdV9pcnEodm9pZCAqZGF0YSkKIHsKIAlpbnQgaXJxID0gKihpbnQgKilkYXRhOwpAQCAtOTIsMjAgKzgyLDIxIEBACiB7CiAJaW50IGksIGlycSwgaXJxczsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbXVfZGV2aWNlID0gY3B1X3BtdS0+cGxhdF9kZXZpY2U7CisJc3RydWN0IHBtdV9od19ldmVudHMgX19wZXJjcHUgKmh3X2V2ZW50cyA9IGNwdV9wbXUtPmh3X2V2ZW50czsKIAogCWlycXMgPSBtaW4ocG11X2RldmljZS0+bnVtX3Jlc291cmNlcywgbnVtX3Bvc3NpYmxlX2NwdXMoKSk7CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBtdV9kZXZpY2UsIDApOwogCWlmIChpcnEgPj0gMCAmJiBpcnFfaXNfcGVyY3B1KGlycSkpIHsKIAkJb25fZWFjaF9jcHUoY3B1X3BtdV9kaXNhYmxlX3BlcmNwdV9pcnEsICZpcnEsIDEpOwotCQlmcmVlX3BlcmNwdV9pcnEoaXJxLCAmcGVyY3B1X3BtdSk7CisJCWZyZWVfcGVyY3B1X2lycShpcnEsICZod19ldmVudHMtPnBlcmNwdV9wbXUpOwogCX0gZWxzZSB7CiAJCWZvciAoaSA9IDA7IGkgPCBpcnFzOyArK2kpIHsKIAkJCWlmICghY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoaSwgJmNwdV9wbXUtPmFjdGl2ZV9pcnFzKSkKIAkJCQljb250aW51ZTsKIAkJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocG11X2RldmljZSwgaSk7CiAJCQlpZiAoaXJxID49IDApCi0JCQkJZnJlZV9pcnEoaXJxLCBjcHVfcG11KTsKKwkJCQlmcmVlX2lycShpcnEsIHBlcl9jcHVfcHRyKCZod19ldmVudHMtPnBlcmNwdV9wbXUsIGkpKTsKIAkJfQogCX0KIH0KQEAgLTExNCwxOSArMTA1LDIxIEBACiB7CiAJaW50IGksIGVyciwgaXJxLCBpcnFzOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBtdV9kZXZpY2UgPSBjcHVfcG11LT5wbGF0X2RldmljZTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyBfX3BlcmNwdSAqaHdfZXZlbnRzID0gY3B1X3BtdS0+aHdfZXZlbnRzOwogCiAJaWYgKCFwbXVfZGV2aWNlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlycXMgPSBtaW4ocG11X2RldmljZS0+bnVtX3Jlc291cmNlcywgbnVtX3Bvc3NpYmxlX2NwdXMoKSk7CiAJaWYgKGlycXMgPCAxKSB7Ci0JCXByaW50a19vbmNlKCJwZXJmL0FSTTogTm8gaXJxcyBmb3IgUE1VIGRlZmluZWQsIHNhbXBsaW5nIGV2ZW50cyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJfd2Fybl9vbmNlKCJwZXJmL0FSTTogTm8gaXJxcyBmb3IgUE1VIGRlZmluZWQsIHNhbXBsaW5nIGV2ZW50cyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwbXVfZGV2aWNlLCAwKTsKIAlpZiAoaXJxID49IDAgJiYgaXJxX2lzX3BlcmNwdShpcnEpKSB7Ci0JCWVyciA9IHJlcXVlc3RfcGVyY3B1X2lycShpcnEsIGhhbmRsZXIsICJhcm0tcG11IiwgJnBlcmNwdV9wbXUpOworCQllcnIgPSByZXF1ZXN0X3BlcmNwdV9pcnEoaXJxLCBoYW5kbGVyLCAiYXJtLXBtdSIsCisJCQkJCSAmaHdfZXZlbnRzLT5wZXJjcHVfcG11KTsKIAkJaWYgKGVycikgewogCQkJcHJfZXJyKCJ1bmFibGUgdG8gcmVxdWVzdCBJUlElZCBmb3IgQVJNIFBNVSBjb3VudGVyc1xuIiwKIAkJCQlpcnEpOwpAQCAtMTUzLDcgKzE0Niw3IEBACiAKIAkJCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgaGFuZGxlciwKIAkJCQkJICBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9OT19USFJFQUQsICJhcm0tcG11IiwKLQkJCQkJICBjcHVfcG11KTsKKwkJCQkJICBwZXJfY3B1X3B0cigmaHdfZXZlbnRzLT5wZXJjcHVfcG11LCBpKSk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJcHJfZXJyKCJ1bmFibGUgdG8gcmVxdWVzdCBJUlElZCBmb3IgQVJNIFBNVSBjb3VudGVyc1xuIiwKIAkJCQkJaXJxKTsKQEAgLTE2NywxOCArMTYwLDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNwdV9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKKy8qCisgKiBQTVUgaGFyZHdhcmUgbG9zZXMgYWxsIGNvbnRleHQgd2hlbiBhIENQVSBnb2VzIG9mZmxpbmUuCisgKiBXaGVuIGEgQ1BVIGlzIGhvdHBsdWdnZWQgYmFjayBpbiwgc2luY2Ugc29tZSBoYXJkd2FyZSByZWdpc3RlcnMgYXJlCisgKiBVTktOT1dOIGF0IHJlc2V0LCB0aGUgUE1VIG11c3QgYmUgZXhwbGljaXRseSByZXNldCB0byBhdm9pZCByZWFkaW5nCisgKiBqdW5rIHZhbHVlcyBvdXQgb2YgdGhlbS4KKyAqLworc3RhdGljIGludCBjcHVfcG11X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJICB2b2lkICpoY3B1KQogeworCXN0cnVjdCBhcm1fcG11ICpwbXUgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IGFybV9wbXUsIGhvdHBsdWdfbmIpOworCisJaWYgKChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgIT0gQ1BVX1NUQVJUSU5HKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlpZiAocG11LT5yZXNldCkKKwkJcG11LT5yZXNldChwbXUpOworCWVsc2UKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIGludCBjcHVfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCit7CisJaW50IGVycjsKIAlpbnQgY3B1OworCXN0cnVjdCBwbXVfaHdfZXZlbnRzIF9fcGVyY3B1ICpjcHVfaHdfZXZlbnRzOworCisJY3B1X2h3X2V2ZW50cyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgcG11X2h3X2V2ZW50cyk7CisJaWYgKCFjcHVfaHdfZXZlbnRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNwdV9wbXUtPmhvdHBsdWdfbmIubm90aWZpZXJfY2FsbCA9IGNwdV9wbXVfbm90aWZ5OworCWVyciA9IHJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X3BtdS0+aG90cGx1Z19uYik7CisJaWYgKGVycikKKwkJZ290byBvdXRfaHdfZXZlbnRzOworCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gJnBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KTsKLQkJZXZlbnRzLT5ldmVudHMgPSBwZXJfY3B1KGh3X2V2ZW50cywgY3B1KTsKLQkJZXZlbnRzLT51c2VkX21hc2sgPSBwZXJfY3B1KHVzZWRfbWFzaywgY3B1KTsKKwkJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHBlcl9jcHVfcHRyKGNwdV9od19ldmVudHMsIGNwdSk7CiAJCXJhd19zcGluX2xvY2tfaW5pdCgmZXZlbnRzLT5wbXVfbG9jayk7Ci0JCXBlcl9jcHUocGVyY3B1X3BtdSwgY3B1KSA9IGNwdV9wbXU7CisJCWV2ZW50cy0+cGVyY3B1X3BtdSA9IGNwdV9wbXU7CiAJfQogCi0JY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cwk9IGNwdV9wbXVfZ2V0X2NwdV9ldmVudHM7CisJY3B1X3BtdS0+aHdfZXZlbnRzCT0gY3B1X2h3X2V2ZW50czsKIAljcHVfcG11LT5yZXF1ZXN0X2lycQk9IGNwdV9wbXVfcmVxdWVzdF9pcnE7CiAJY3B1X3BtdS0+ZnJlZV9pcnEJPSBjcHVfcG11X2ZyZWVfaXJxOwogCkBAIC0xODksMzIgKzIxNCwyMCBAQAogCS8qIElmIG5vIGludGVycnVwdHMgYXZhaWxhYmxlLCBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgY2FwYWJpbGl0eSBmbGFnICovCiAJaWYgKCFwbGF0Zm9ybV9nZXRfaXJxKGNwdV9wbXUtPnBsYXRfZGV2aWNlLCAwKSkKIAkJY3B1X3BtdS0+cG11LmNhcGFiaWxpdGllcyB8PSBQRVJGX1BNVV9DQVBfTk9fSU5URVJSVVBUOworCisJcmV0dXJuIDA7CisKK291dF9od19ldmVudHM6CisJZnJlZV9wZXJjcHUoY3B1X2h3X2V2ZW50cyk7CisJcmV0dXJuIGVycjsKIH0KIAotLyoKLSAqIFBNVSBoYXJkd2FyZSBsb3NlcyBhbGwgY29udGV4dCB3aGVuIGEgQ1BVIGdvZXMgb2ZmbGluZS4KLSAqIFdoZW4gYSBDUFUgaXMgaG90cGx1Z2dlZCBiYWNrIGluLCBzaW5jZSBzb21lIGhhcmR3YXJlIHJlZ2lzdGVycyBhcmUKLSAqIFVOS05PV04gYXQgcmVzZXQsIHRoZSBQTVUgbXVzdCBiZSBleHBsaWNpdGx5IHJlc2V0IHRvIGF2b2lkIHJlYWRpbmcKLSAqIGp1bmsgdmFsdWVzIG91dCBvZiB0aGVtLgotICovCi1zdGF0aWMgaW50IGNwdV9wbXVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCi0JCQkgIHZvaWQgKmhjcHUpCitzdGF0aWMgdm9pZCBjcHVfcG11X2Rlc3Ryb3koc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCiB7Ci0JaWYgKChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgIT0gQ1BVX1NUQVJUSU5HKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KLQlpZiAoY3B1X3BtdSAmJiBjcHVfcG11LT5yZXNldCkKLQkJY3B1X3BtdS0+cmVzZXQoY3B1X3BtdSk7Ci0JZWxzZQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KLQlyZXR1cm4gTk9USUZZX09LOworCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfcG11LT5ob3RwbHVnX25iKTsKKwlmcmVlX3BlcmNwdShjcHVfcG11LT5od19ldmVudHMpOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNwdV9wbXVfaG90cGx1Z19ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGNwdV9wbXVfbm90aWZ5LAotfTsKLQogLyoKICAqIFBNVSBwbGF0Zm9ybSBkcml2ZXIgYW5kIGRldmljZXRyZWUgYmluZGluZ3MuCiAgKi8KQEAgLTI0MSw0OCArMjU0LDM0IEBACiAJe30sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9wcm9iZV9pbmZvIHBtdV9wcm9iZV90YWJsZVtdID0geworCUFSTV9QTVVfUFJPQkUoQVJNX0NQVV9QQVJUX0FSTTExMzYsIGFybXY2XzExMzZfcG11X2luaXQpLAorCUFSTV9QTVVfUFJPQkUoQVJNX0NQVV9QQVJUX0FSTTExNTYsIGFybXY2XzExNTZfcG11X2luaXQpLAorCUFSTV9QTVVfUFJPQkUoQVJNX0NQVV9QQVJUX0FSTTExNzYsIGFybXY2XzExNzZfcG11X2luaXQpLAorCUFSTV9QTVVfUFJPQkUoQVJNX0NQVV9QQVJUX0FSTTExTVBDT1JFLCBhcm12Nm1wY29yZV9wbXVfaW5pdCksCisJQVJNX1BNVV9QUk9CRShBUk1fQ1BVX1BBUlRfQ09SVEVYX0E4LCBhcm12N19hOF9wbXVfaW5pdCksCisJQVJNX1BNVV9QUk9CRShBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5LCBhcm12N19hOV9wbXVfaW5pdCksCisJWFNDQUxFX1BNVV9QUk9CRShBUk1fQ1BVX1hTQ0FMRV9BUkNIX1YxLCB4c2NhbGUxcG11X2luaXQpLAorCVhTQ0FMRV9QTVVfUFJPQkUoQVJNX0NQVV9YU0NBTEVfQVJDSF9WMiwgeHNjYWxlMnBtdV9pbml0KSwKKwl7IC8qIHNlbnRpbmVsIHZhbHVlICovIH0KK307CisKIC8qCiAgKiBDUFUgUE1VIGlkZW50aWZpY2F0aW9uIGFuZCBwcm9iaW5nLgogICovCiBzdGF0aWMgaW50IHByb2JlX2N1cnJlbnRfcG11KHN0cnVjdCBhcm1fcG11ICpwbXUpCiB7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKKwl1bnNpZ25lZCBpbnQgY3B1aWQgPSByZWFkX2NwdWlkX2lkKCk7CiAJaW50IHJldCA9IC1FTk9ERVY7CisJY29uc3Qgc3RydWN0IHBtdV9wcm9iZV9pbmZvICppbmZvOwogCiAJcHJfaW5mbygicHJvYmluZyBQTVUgb24gQ1BVICVkXG4iLCBjcHUpOwogCi0Jc3dpdGNoIChyZWFkX2NwdWlkX3BhcnQoKSkgewotCS8qIEFSTSBMdGQgQ1BVcy4gKi8KLQljYXNlIEFSTV9DUFVfUEFSVF9BUk0xMTM2OgotCQlyZXQgPSBhcm12Nl8xMTM2X3BtdV9pbml0KHBtdSk7Ci0JCWJyZWFrOwotCWNhc2UgQVJNX0NQVV9QQVJUX0FSTTExNTY6Ci0JCXJldCA9IGFybXY2XzExNTZfcG11X2luaXQocG11KTsKLQkJYnJlYWs7Ci0JY2FzZSBBUk1fQ1BVX1BBUlRfQVJNMTE3NjoKLQkJcmV0ID0gYXJtdjZfMTE3Nl9wbXVfaW5pdChwbXUpOwotCQlicmVhazsKLQljYXNlIEFSTV9DUFVfUEFSVF9BUk0xMU1QQ09SRToKLQkJcmV0ID0gYXJtdjZtcGNvcmVfcG11X2luaXQocG11KTsKLQkJYnJlYWs7Ci0JY2FzZSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E4OgotCQlyZXQgPSBhcm12N19hOF9wbXVfaW5pdChwbXUpOwotCQlicmVhazsKLQljYXNlIEFSTV9DUFVfUEFSVF9DT1JURVhfQTk6Ci0JCXJldCA9IGFybXY3X2E5X3BtdV9pbml0KHBtdSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJaWYgKHJlYWRfY3B1aWRfaW1wbGVtZW50b3IoKSA9PSBBUk1fQ1BVX0lNUF9JTlRFTCkgewotCQkJc3dpdGNoICh4c2NhbGVfY3B1X2FyY2hfdmVyc2lvbigpKSB7Ci0JCQljYXNlIEFSTV9DUFVfWFNDQUxFX0FSQ0hfVjE6Ci0JCQkJcmV0ID0geHNjYWxlMXBtdV9pbml0KHBtdSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFSTV9DUFVfWFNDQUxFX0FSQ0hfVjI6Ci0JCQkJcmV0ID0geHNjYWxlMnBtdV9pbml0KHBtdSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KKwlmb3IgKGluZm8gPSBwbXVfcHJvYmVfdGFibGU7IGluZm8tPmluaXQgIT0gTlVMTDsgaW5mbysrKSB7CisJCWlmICgoY3B1aWQgJiBpbmZvLT5tYXNrKSAhPSBpbmZvLT5jcHVpZCkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBpbmZvLT5pbml0KHBtdSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjk5LDEzICsyOTgsMTMgQEAKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIAogCWlmIChjcHVfcG11KSB7Ci0JCXByX2luZm8oImF0dGVtcHQgdG8gcmVnaXN0ZXIgbXVsdGlwbGUgUE1VIGRldmljZXMhIik7CisJCXByX2luZm8oImF0dGVtcHQgdG8gcmVnaXN0ZXIgbXVsdGlwbGUgUE1VIGRldmljZXMhXG4iKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCiAJcG11ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFybV9wbXUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBtdSkgewotCQlwcl9pbmZvKCJmYWlsZWQgdG8gYWxsb2NhdGUgUE1VIGRldmljZSEiKTsKKwkJcHJfaW5mbygiZmFpbGVkIHRvIGFsbG9jYXRlIFBNVSBkZXZpY2UhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0zMjAsMTggKzMxOSwyNCBAQAogCX0KIAogCWlmIChyZXQpIHsKLQkJcHJfaW5mbygiZmFpbGVkIHRvIHByb2JlIFBNVSEiKTsKKwkJcHJfaW5mbygiZmFpbGVkIHRvIHByb2JlIFBNVSFcbiIpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCWNwdV9wbXVfaW5pdChjcHVfcG11KTsKLQlyZXQgPSBhcm1wbXVfcmVnaXN0ZXIoY3B1X3BtdSwgUEVSRl9UWVBFX1JBVyk7CisJcmV0ID0gY3B1X3BtdV9pbml0KGNwdV9wbXUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CiAKLQlpZiAoIXJldCkKLQkJcmV0dXJuIDA7CisJcmV0ID0gYXJtcG11X3JlZ2lzdGVyKGNwdV9wbXUsIC0xKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9kZXN0cm95OwogCisJcmV0dXJuIDA7CisKK291dF9kZXN0cm95OgorCWNwdV9wbXVfZGVzdHJveShjcHVfcG11KTsKIG91dF9mcmVlOgotCXByX2luZm8oImZhaWxlZCB0byByZWdpc3RlciBQTVUgZGV2aWNlcyEiKTsKKwlwcl9pbmZvKCJmYWlsZWQgdG8gcmVnaXN0ZXIgUE1VIGRldmljZXMhXG4iKTsKIAlrZnJlZShwbXUpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zNDgsMTYgKzM1Myw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVyX3BtdV9kcml2ZXIodm9pZCkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfcG11X2hvdHBsdWdfbm90aWZpZXIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNwdV9wbXVfZHJpdmVyKTsKLQlpZiAoZXJyKQotCQl1bnJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X3BtdV9ob3RwbHVnX25vdGlmaWVyKTsKLQotCXJldHVybiBlcnI7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY3B1X3BtdV9kcml2ZXIpOwogfQogZGV2aWNlX2luaXRjYWxsKHJlZ2lzdGVyX3BtdV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjYuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y2LmMKaW5kZXggYWJmZWIwNC4uZjJmZmQ1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjYuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF92Ni5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZXZ0LCBmbGFnczsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gaWR4KSB7CkBAIC0zMDAsNyArMzAwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHBtY3IgPSBhcm12Nl9wbWNyX3JlYWQoKTsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gKHN0cnVjdCBhcm1fcG11ICopZGV2OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CiAJaW50IGlkeDsKIApAQCAtMzU2LDcgKzM1Niw3IEBACiBzdGF0aWMgdm9pZCBhcm12NnBtdV9zdGFydChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAl2YWwgPSBhcm12Nl9wbWNyX3JlYWQoKTsKQEAgLTM2OCw3ICszNjgsNyBAQAogc3RhdGljIHZvaWQgYXJtdjZwbXVfc3RvcChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAl2YWwgPSBhcm12Nl9wbWNyX3JlYWQoKTsKQEAgLTQwOSw3ICs0MDksNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBldnQsIGZsYWdzOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAlpZiAoQVJNVjZfQ1lDTEVfQ09VTlRFUiA9PSBpZHgpIHsKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBmbGFncywgZXZ0ID0gMDsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gaWR4KSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF92Ny5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjcuYwppbmRleCAxMTY3NThiLi44OTkzNzcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF92Ny5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y3LmMKQEAgLTU2NCwxMyArNTY0LDExIEBACiAJcmV0dXJuIHBtbmMgJiBCSVQoQVJNVjdfSURYX1RPX0NPVU5URVIoaWR4KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaW50IGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGludCBpZHgpCiB7CiAJdTMyIGNvdW50ZXIgPSBBUk1WN19JRFhfVE9fQ09VTlRFUihpZHgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDUiIDogOiAiciIgKGNvdW50ZXIpKTsKIAlpc2IoKTsKLQotCXJldHVybiBpZHg7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGFybXY3cG11X3JlYWRfY291bnRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCkBAIC01ODAsMTMgKzU3OCwxNSBAQAogCWludCBpZHggPSBod2MtPmlkeDsKIAl1MzIgdmFsdWUgPSAwOwogCi0JaWYgKCFhcm12N19wbW5jX2NvdW50ZXJfdmFsaWQoY3B1X3BtdSwgaWR4KSkKKwlpZiAoIWFybXY3X3BtbmNfY291bnRlcl92YWxpZChjcHVfcG11LCBpZHgpKSB7CiAJCXByX2VycigiQ1BVJXUgcmVhZGluZyB3cm9uZyBjb3VudGVyICVkXG4iLAogCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOwotCWVsc2UgaWYgKGlkeCA9PSBBUk1WN19JRFhfQ1lDTEVfQ09VTlRFUikKKwl9IGVsc2UgaWYgKGlkeCA9PSBBUk1WN19JRFhfQ1lDTEVfQ09VTlRFUikgewogCQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6ICI9ciIgKHZhbHVlKSk7Ci0JZWxzZSBpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkKKwl9IGVsc2UgeworCQlhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGlkeCk7CiAJCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiIDogIj1yIiAodmFsdWUpKTsKKwl9CiAKIAlyZXR1cm4gdmFsdWU7CiB9CkBAIC01OTcsNDUgKzU5Nyw0MyBAQAogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCWludCBpZHggPSBod2MtPmlkeDsKIAotCWlmICghYXJtdjdfcG1uY19jb3VudGVyX3ZhbGlkKGNwdV9wbXUsIGlkeCkpCisJaWYgKCFhcm12N19wbW5jX2NvdW50ZXJfdmFsaWQoY3B1X3BtdSwgaWR4KSkgewogCQlwcl9lcnIoIkNQVSV1IHdyaXRpbmcgd3JvbmcgY291bnRlciAlZFxuIiwKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKLQllbHNlIGlmIChpZHggPT0gQVJNVjdfSURYX0NZQ0xFX0NPVU5URVIpCisJfSBlbHNlIGlmIChpZHggPT0gQVJNVjdfSURYX0NZQ0xFX0NPVU5URVIpIHsKIAkJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMywgMCIgOiA6ICJyIiAodmFsdWUpKTsKLQllbHNlIGlmIChhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGlkeCkgPT0gaWR4KQorCX0gZWxzZSB7CisJCWFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaWR4KTsKIAkJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMywgMiIgOiA6ICJyIiAodmFsdWUpKTsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcm12N19wbW5jX3dyaXRlX2V2dHNlbChpbnQgaWR4LCB1MzIgdmFsKQogewotCWlmIChhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGlkeCkgPT0gaWR4KSB7Ci0JCXZhbCAmPSBBUk1WN19FVlRZUEVfTUFTSzsKLQkJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMywgMSIgOiA6ICJyIiAodmFsKSk7Ci0JfQorCWFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaWR4KTsKKwl2YWwgJj0gQVJNVjdfRVZUWVBFX01BU0s7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMywgMSIgOiA6ICJyIiAodmFsKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFybXY3X3BtbmNfZW5hYmxlX2NvdW50ZXIoaW50IGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm12N19wbW5jX2VuYWJsZV9jb3VudGVyKGludCBpZHgpCiB7CiAJdTMyIGNvdW50ZXIgPSBBUk1WN19JRFhfVE9fQ09VTlRFUihpZHgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDEiIDogOiAiciIgKEJJVChjb3VudGVyKSkpOwotCXJldHVybiBpZHg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdfcG1uY19kaXNhYmxlX2NvdW50ZXIoaW50IGlkeCkKIHsKIAl1MzIgY291bnRlciA9IEFSTVY3X0lEWF9UT19DT1VOVEVSKGlkeCk7CiAJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgMiIgOiA6ICJyIiAoQklUKGNvdW50ZXIpKSk7Ci0JcmV0dXJuIGlkeDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19lbmFibGVfaW50ZW5zKGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdfcG1uY19lbmFibGVfaW50ZW5zKGludCBpZHgpCiB7CiAJdTMyIGNvdW50ZXIgPSBBUk1WN19JRFhfVE9fQ09VTlRFUihpZHgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDEiIDogOiAiciIgKEJJVChjb3VudGVyKSkpOwotCXJldHVybiBpZHg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFybXY3X3BtbmNfZGlzYWJsZV9pbnRlbnMoaW50IGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm12N19wbW5jX2Rpc2FibGVfaW50ZW5zKGludCBpZHgpCiB7CiAJdTMyIGNvdW50ZXIgPSBBUk1WN19JRFhfVE9fQ09VTlRFUihpZHgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDIiIDogOiAiciIgKEJJVChjb3VudGVyKSkpOwpAQCAtNjQzLDggKzY0MSw2IEBACiAJLyogQ2xlYXIgdGhlIG92ZXJmbG93IGZsYWcgaW4gY2FzZSBhbiBpbnRlcnJ1cHQgaXMgcGVuZGluZy4gKi8KIAlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6IDogInIiIChCSVQoY291bnRlcikpKTsKIAlpc2IoKTsKLQotCXJldHVybiBpZHg7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGFybXY3X3BtbmNfZ2V0cmVzZXRfZmxhZ3Modm9pZCkKQEAgLTY2NywzNCArNjYzLDM0IEBACiAJdTMyIHZhbDsKIAl1bnNpZ25lZCBpbnQgY250OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUE1OQyByZWdpc3RlcnMgZHVtcDpcbiIpOworCXByX2luZm8oIlBNTkMgcmVnaXN0ZXJzIGR1bXA6XG4iKTsKIAogCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDAiIDogIj1yIiAodmFsKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiUE1OQyAgPTB4JTA4eFxuIiwgdmFsKTsKKwlwcl9pbmZvKCJQTU5DICA9MHglMDh4XG4iLCB2YWwpOwogCiAJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgMSIgOiAiPXIiICh2YWwpKTsKLQlwcmludGsoS0VSTl9JTkZPICJDTlRFTlM9MHglMDh4XG4iLCB2YWwpOworCXByX2luZm8oIkNOVEVOUz0weCUwOHhcbiIsIHZhbCk7CiAKIAlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzE0LCAxIiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIklOVEVOUz0weCUwOHhcbiIsIHZhbCk7CisJcHJfaW5mbygiSU5URU5TPTB4JTA4eFxuIiwgdmFsKTsKIAogCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDMiIDogIj1yIiAodmFsKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiRkxBR1MgPTB4JTA4eFxuIiwgdmFsKTsKKwlwcl9pbmZvKCJGTEFHUyA9MHglMDh4XG4iLCB2YWwpOwogCiAJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgNSIgOiAiPXIiICh2YWwpKTsKLQlwcmludGsoS0VSTl9JTkZPICJTRUxFQ1Q9MHglMDh4XG4iLCB2YWwpOworCXByX2luZm8oIlNFTEVDVD0weCUwOHhcbiIsIHZhbCk7CiAKIAlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIkNDTlQgID0weCUwOHhcbiIsIHZhbCk7CisJcHJfaW5mbygiQ0NOVCAgPTB4JTA4eFxuIiwgdmFsKTsKIAogCWZvciAoY250ID0gQVJNVjdfSURYX0NPVU5URVIwOwogCQkJY250IDw9IEFSTVY3X0lEWF9DT1VOVEVSX0xBU1QoY3B1X3BtdSk7IGNudCsrKSB7CiAJCWFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoY250KTsKIAkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMiIgOiAiPXIiICh2YWwpKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ05UWyVkXSBjb3VudCA9MHglMDh4XG4iLAorCQlwcl9pbmZvKCJDTlRbJWRdIGNvdW50ID0weCUwOHhcbiIsCiAJCQlBUk1WN19JRFhfVE9fQ09VTlRFUihjbnQpLCB2YWwpOwogCQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6ICI9ciIgKHZhbCkpOwotCQlwcmludGsoS0VSTl9JTkZPICJDTlRbJWRdIGV2dHNlbD0weCUwOHhcbiIsCisJCXByX2luZm8oIkNOVFslZF0gZXZ0c2VsPTB4JTA4eFxuIiwKIAkJCUFSTVY3X0lEWF9UT19DT1VOVEVSKGNudCksIHZhbCk7CiAJfQogfQpAQCAtNzA1LDcgKzcwMSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJaWYgKCFhcm12N19wbW5jX2NvdW50ZXJfdmFsaWQoY3B1X3BtdSwgaWR4KSkgewpAQCAtNzUxLDcgKzc0Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJaWYgKCFhcm12N19wbW5jX2NvdW50ZXJfdmFsaWQoY3B1X3BtdSwgaWR4KSkgewpAQCAtNzgzLDcgKzc3OSw3IEBACiAJdTMyIHBtbmM7CiAJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IChzdHJ1Y3QgYXJtX3BtdSAqKWRldjsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqY3B1YyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqY3B1YyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzOwogCWludCBpZHg7CiAKQEAgLTg0Myw3ICs4MzksNyBAQAogc3RhdGljIHZvaWQgYXJtdjdwbXVfc3RhcnQoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCS8qIEVuYWJsZSBhbGwgY291bnRlcnMgKi8KQEAgLTg1NCw3ICs4NTAsNyBAQAogc3RhdGljIHZvaWQgYXJtdjdwbXVfc3RvcChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAJLyogRGlzYWJsZSBhbGwgY291bnRlcnMgKi8KQEAgLTEyODcsNyArMTI4Myw3IEBACiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAogCS8qIERpc2FibGUgY291bnRlciBhbmQgaW50ZXJydXB0ICovCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CkBAIC0xMzEzLDcgKzEzMDksNyBAQAogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCWludCBpZHggPSBod2MtPmlkeDsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAKIAkvKgogCSAqIEVuYWJsZSBjb3VudGVyIGFuZCBpbnRlcnJ1cHQsIGFuZCBzZXQgdGhlIGNvdW50ZXIgdG8gY291bnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3hzY2FsZS5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfeHNjYWxlLmMKaW5kZXggMDhkYTBhZi4uOGFmOWYxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfeHNjYWxlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfeHNjYWxlLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcG1uYzsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gKHN0cnVjdCBhcm1fcG11ICopZGV2OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpjcHVjID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CiAJaW50IGlkeDsKIApAQCAtMTk4LDcgKzE5OCw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWwsIG1hc2ssIGV2dCwgZmxhZ3M7CiAJc3RydWN0IGFybV9wbXUgKmNwdV9wbXUgPSB0b19hcm1fcG11KGV2ZW50LT5wbXUpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCWludCBpZHggPSBod2MtPmlkeDsKIAogCXN3aXRjaCAoaWR4KSB7CkBAIC0yMzQsNyArMjM0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZXZ0LCBmbGFnczsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJc3dpdGNoIChpZHgpIHsKQEAgLTI4Nyw3ICsyODcsNyBAQAogc3RhdGljIHZvaWQgeHNjYWxlMXBtdV9zdGFydChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gdGhpc19jcHVfcHRyKGNwdV9wbXUtPmh3X2V2ZW50cyk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAl2YWwgPSB4c2NhbGUxcG11X3JlYWRfcG1uYygpOwpAQCAtMjk5LDcgKzI5OSw3IEBACiBzdGF0aWMgdm9pZCB4c2NhbGUxcG11X3N0b3Aoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOwotCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSBjcHVfcG11LT5nZXRfaHdfZXZlbnRzKCk7CisJc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAJdmFsID0geHNjYWxlMXBtdV9yZWFkX3BtbmMoKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCXVuc2lnbmVkIGxvbmcgcG1uYywgb2ZfZmxhZ3M7CiAJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKIAlzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSA9IChzdHJ1Y3QgYXJtX3BtdSAqKWRldjsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqY3B1YyA9IGNwdV9wbXUtPmdldF9od19ldmVudHMoKTsKKwlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqY3B1YyA9IHRoaXNfY3B1X3B0cihjcHVfcG11LT5od19ldmVudHMpOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzOwogCWludCBpZHg7CiAKQEAgLTUzOSw3ICs1MzksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGllbiwgZXZ0c2VsOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAlpZW4gPSB4c2NhbGUycG11X3JlYWRfaW50X2VuYWJsZSgpOwpAQCAtNTg1LDcgKzU4NSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncywgaWVuLCBldnRzZWwsIG9mX2ZsYWdzOwogCXN0cnVjdCBhcm1fcG11ICpjcHVfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAlpZW4gPSB4c2NhbGUycG11X3JlYWRfaW50X2VuYWJsZSgpOwpAQCAtNjUxLDcgKzY1MSw3IEBACiBzdGF0aWMgdm9pZCB4c2NhbGUycG11X3N0YXJ0KHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCXZhbCA9IHhzY2FsZTJwbXVfcmVhZF9wbW5jKCkgJiB+WFNDQUxFX1BNVV9DTlQ2NDsKQEAgLTY2Myw3ICs2NjMsNyBAQAogc3RhdGljIHZvaWQgeHNjYWxlMnBtdV9zdG9wKHN0cnVjdCBhcm1fcG11ICpjcHVfcG11KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY3B1X3BtdS0+Z2V0X2h3X2V2ZW50cygpOworCXN0cnVjdCBwbXVfaHdfZXZlbnRzICpldmVudHMgPSB0aGlzX2NwdV9wdHIoY3B1X3BtdS0+aHdfZXZlbnRzKTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCXZhbCA9IHhzY2FsZTJwbXVfcmVhZF9wbW5jKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWFzbTkyNjAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXNtOTI2MC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MjNiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWFzbTkyNjAvS2NvbmZpZwpAQCAtMCwwICsxLDYgQEAKK2NvbmZpZyBNQUNIX0FTTTkyNjAKKwlib29sICJBbHBoYXNjYWxlIEFTTTkyNjAiCisJZGVwZW5kcyBvbiBBUkNIX01VTFRJX1Y1CisJc2VsZWN0IENQVV9BUk05MjZUCisJaGVscAorCSAgU3VwcG9ydCBmb3IgQWxwaGFzY2FsZSBBU005MjYwIGJhc2VkIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwppbmRleCAwZTZkNTQ4Li4yMzk1YzY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwpAQCAtMTUsMjcgKzE1LDEwIEBACiBjb25maWcgSEFWRV9BVDkxX0RCR1UyCiAJYm9vbAogCi1jb25maWcgQVQ5MV9VU0VfT0xEX0NMSwotCWJvb2wKLQotY29uZmlnIEFUOTFfUE1DX1VOSVQKLQlib29sCi0JZGVmYXVsdCAhQVJDSF9BVDkxWDQwCi0KIGNvbmZpZyBDT01NT05fQ0xLX0FUOTEKIAlib29sCi0JZGVmYXVsdCBBVDkxX1BNQ19VTklUICYmIFVTRV9PRiAmJiAhQVQ5MV9VU0VfT0xEX0NMSwogCXNlbGVjdCBDT01NT05fQ0xLCiAKLWNvbmZpZyBPTERfQ0xLX0FUOTEKLQlib29sCi0JZGVmYXVsdCBBVDkxX1BNQ19VTklUICYmIEFUOTFfVVNFX09MRF9DTEsKLQotY29uZmlnIE9MRF9JUlFfQVQ5MQotCWJvb2wKLQlzZWxlY3QgTVVMVElfSVJRX0hBTkRMRVIKLQlzZWxlY3QgU1BBUlNFX0lSUQotCiBjb25maWcgSEFWRV9BVDkxX1NNRAogCWJvb2wKIApAQCAtNDQsMjAgKzI3LDIyIEBACiAKIGNvbmZpZyBTT0NfQVQ5MVNBTTkKIAlib29sCi0Jc2VsZWN0IEFUTUVMX0FJQ19JUlEgaWYgIU9MRF9JUlFfQVQ5MQorCXNlbGVjdCBBVE1FTF9BSUNfSVJRCisJc2VsZWN0IENPTU1PTl9DTEtfQVQ5MQogCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCi0Jc2VsZWN0IE1FTU9SWSBpZiBVU0VfT0YKLQlzZWxlY3QgQVRNRUxfU0RSQU1DIGlmIFVTRV9PRgorCXNlbGVjdCBNRU1PUlkKKwlzZWxlY3QgQVRNRUxfU0RSQU1DCiAKIGNvbmZpZyBTT0NfU0FNQTUKIAlib29sCiAJc2VsZWN0IEFUTUVMX0FJQzVfSVJRCisJc2VsZWN0IENPTU1PTl9DTEtfQVQ5MQogCXNlbGVjdCBDUFVfVjcKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwotCXNlbGVjdCBVU0VfT0YKIAlzZWxlY3QgTUVNT1JZCiAJc2VsZWN0IEFUTUVMX1NEUkFNQworCXNlbGVjdCBQSFlMSUIgaWYgTkVUREVWSUNFUwogCiBtZW51ICJBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwIgogCkBAIC02NSwxNiArNTAsNiBAQAogCiAJcHJvbXB0ICJDb3JlIHR5cGUiCiAKLWNvbmZpZyBBUkNIX0FUOTFYNDAKLQlib29sICJBUk03IEFUOTFYNDAiCi0JZGVwZW5kcyBvbiAhTU1VCi0Jc2VsZWN0IENQVV9BUk03VERNSQotCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAotCXNlbGVjdCBPTERfSVJRX0FUOTEKLQotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgb25lIG9mIEF0bWVsJ3MgQVQ5MVg0MCBTb0MuCi0KIGNvbmZpZyBTT0NfU0FNX1Y0X1Y1CiAJYm9vbCAiQVJNOSBBVDkxU0FNOS9BVDkxUk05MjAwIgogCWhlbHAKQEAgLTEyMiw3ICs5Nyw4IEBACiBpZiBTT0NfU0FNX1Y0X1Y1CiBjb25maWcgU09DX0FUOTFSTTkyMDAKIAlib29sICJBVDkxUk05MjAwIgotCXNlbGVjdCBBVE1FTF9BSUNfSVJRIGlmICFPTERfSVJRX0FUOTEKKwlzZWxlY3QgQVRNRUxfQUlDX0lSUQorCXNlbGVjdCBDT01NT05fQ0xLX0FUOTEKIAlzZWxlY3QgQ1BVX0FSTTkyMFQKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBIQVZFX0FUOTFfREJHVTAKQEAgLTE5OCwzNyArMTc0LDExIEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGVuZGlmICMgU09DX1NBTV9WNF9WNQogCi0KLWlmIFNPQ19TQU1fVjRfVjUgfHwgQVJDSF9BVDkxWDQwCi1zb3VyY2UgYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcubm9uX2R0Ci1lbmRpZgotCi1jb21tZW50ICJHZW5lcmljIEJvYXJkIFR5cGUiCi0KIGNvbmZpZyBNQUNIX0FUOTFSTTkyMDBfRFQKLQlib29sICJBdG1lbCBBVDkxUk05MjAwIEV2YWx1YXRpb24gS2l0cyB3aXRoIGRldmljZS10cmVlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT0NfQVQ5MVJNOTIwMAotCXNlbGVjdCBVU0VfT0YKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byBleHBlcmltZW50IGRldmljZS10cmVlIHdpdGgKLQkgIGFuIEF0bWVsIFJNOTIwMCBFdmFsdWF0aW9uIEtpdC4KKwlkZWZfYm9vbCBTT0NfQVQ5MVJNOTIwMAogCiBjb25maWcgTUFDSF9BVDkxU0FNOV9EVAotCWJvb2wgIkF0bWVsIEFUOTFTQU0gRXZhbHVhdGlvbiBLaXRzIHdpdGggZGV2aWNlLXRyZWUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19BVDkxU0FNOQotCXNlbGVjdCBVU0VfT0YKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byBleHBlcmltZW50IGRldmljZS10cmVlIHdpdGgKLQkgIGFuIEF0bWVsIEV2YWx1YXRpb24gS2l0LgotCi1jb25maWcgTUFDSF9TQU1BNV9EVAotCWJvb2wgIkF0bWVsIFNBTUE1IEV2YWx1YXRpb24gS2l0cyB3aXRoIGRldmljZS10cmVlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT0NfU0FNQTUKLQlzZWxlY3QgVVNFX09GCi0Jc2VsZWN0IFBIWUxJQiBpZiBORVRERVZJQ0VTCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IHdhbnQgdG8gZXhwZXJpbWVudCBkZXZpY2UtdHJlZSB3aXRoCi0JICBhbiBBdG1lbCBFdmFsdWF0aW9uIEtpdC4KKwlkZWZfYm9vbCBTT0NfQVQ5MVNBTTkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI1MSw3ICsyMDEsNyBAQAogICAgICAgIGludCAiS2VybmVsIEhaIChqaWZmaWVzIHBlciBzZWNvbmQpIgogICAgICAgIHJhbmdlIDMyIDEwMjQKICAgICAgICBkZXBlbmRzIG9uIEFSQ0hfQVQ5MQotICAgICAgIGRlZmF1bHQgIjEyOCIgaWYgQVJDSF9BVDkxUk05MjAwCisgICAgICAgZGVmYXVsdCAiMTI4IiBpZiBTT0NfQVQ5MVJNOTIwMAogICAgICAgIGRlZmF1bHQgIjEwMCIKICAgICAgICBoZWxwCiAJICBPbiBBVDkxcm05MjAwIGNoaXBzIHdoZXJlIHlvdSdyZSB1c2luZyBhIHN5c3RlbSBjbG9jayBkZXJpdmVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZy5ub25fZHQgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZy5ub25fZHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZTg4MjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcubm9uX2R0CisrKyAvZGV2L251bGwKQEAgLTEsMzQ0ICswLDAgQEAKLW1lbnUgIkF0bWVsIE5vbi1EVCB3b3JsZCIKLQotY29uZmlnIEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWJvb2wKLQotY2hvaWNlCi0JcHJvbXB0ICJBdG1lbCBBVDkxIFByb2Nlc3NvciBEZXZpY2VzIGZvciBub24gRFQgYm9hcmRzIgotCWRlcGVuZHMgb24gIUFSQ0hfQVQ5MVg0MAotCi1jb25maWcgQVJDSF9BVDkxX05PTkUKLQlib29sICJOb25lIgotCi1jb25maWcgQVJDSF9BVDkxUk05MjAwCi0JYm9vbCAiQVQ5MVJNOTIwMCIKLQlzZWxlY3QgU09DX0FUOTFSTTkyMDAKLQlzZWxlY3QgQVQ5MV9VU0VfT0xEX0NMSwotCXNlbGVjdCBPTERfSVJRX0FUOTEKLQotY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjAKLQlib29sICJBVDkxU0FNOTI2MCBvciBBVDkxU0FNOVhFIG9yIEFUOTFTQU05RzIwIgotCXNlbGVjdCBTT0NfQVQ5MVNBTTkyNjAKLQlzZWxlY3QgQVQ5MV9VU0VfT0xEX0NMSwotCXNlbGVjdCBPTERfSVJRX0FUOTEKLQotY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjEKLQlib29sICJBVDkxU0FNOTI2MSBvciBBVDkxU0FNOUcxMCIKLQlzZWxlY3QgU09DX0FUOTFTQU05MjYxCi0Jc2VsZWN0IEFUOTFfVVNFX09MRF9DTEsKLQlzZWxlY3QgT0xEX0lSUV9BVDkxCi0KLWNvbmZpZyBBUkNIX0FUOTFTQU05MjYzCi0JYm9vbCAiQVQ5MVNBTTkyNjMiCi0Jc2VsZWN0IFNPQ19BVDkxU0FNOTI2MwotCXNlbGVjdCBBVDkxX1VTRV9PTERfQ0xLCi0Jc2VsZWN0IE9MRF9JUlFfQVQ5MQotCi1jb25maWcgQVJDSF9BVDkxU0FNOVJMCi0JYm9vbCAiQVQ5MVNBTTlSTCIKLQlzZWxlY3QgU09DX0FUOTFTQU05UkwKLQlzZWxlY3QgQVQ5MV9VU0VfT0xEX0NMSwotCXNlbGVjdCBPTERfSVJRX0FUOTEKLQotY29uZmlnIEFSQ0hfQVQ5MVNBTTlHNDUKLQlib29sICJBVDkxU0FNOUc0NSIKLQlzZWxlY3QgU09DX0FUOTFTQU05RzQ1Ci0Jc2VsZWN0IEFUOTFfVVNFX09MRF9DTEsKLQlzZWxlY3QgT0xEX0lSUV9BVDkxCi0KLWVuZGNob2ljZQotCi1jb25maWcgQVJDSF9BVDkxU0FNOUcyMAotCWJvb2wKLQlzZWxlY3QgQVJDSF9BVDkxU0FNOTI2MAotCi1jb25maWcgQVJDSF9BVDkxU0FNOUcxMAotCWJvb2wKLQlzZWxlY3QgQVJDSF9BVDkxU0FNOTI2MQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaWYgQVJDSF9BVDkxUk05MjAwCi0KLWNvbW1lbnQgIkFUOTFSTTkyMDAgQm9hcmQgVHlwZSIKLQotY29uZmlnIE1BQ0hfT05FQVJNCi0JYm9vbCAiQWplY28gMUFSTSBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBamVjbydzIDFBUk0gU2luZ2xlIEJvYXJkIENvbXB1dGVyLgotCSAgPGh0dHA6Ly93d3cuYWplY28uZmkvPgotCi1jb25maWcgTUFDSF9BVDkxUk05MjAwRUsKLQlib29sICJBdG1lbCBBVDkxUk05MjAwLUVLIEV2YWx1YXRpb24gS2l0IgotCXNlbGVjdCBIQVZFX0FUOTFfREFUQUZMQVNIX0NBUkQKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVJNOTIwMC1FSyBFdmFsdWF0aW9uIEtpdC4KLQkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS9keW4vcHJvZHVjdHMvdG9vbHNfY2FyZC5hc3A/dG9vbF9pZD0zNTA3PgotCi1jb25maWcgTUFDSF9DU0IzMzcKLQlib29sICJDb2dlbnQgQ1NCMzM3IgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQ29nZW50J3MgQ1NCMzM3IGJvYXJkLgotCSAgPGh0dHA6Ly93d3cuY29nY29tcC5jb20vY3NiX2NzYjMzNy5odG0+Ci0KLWNvbmZpZyBNQUNIX0NTQjYzNwotCWJvb2wgIkNvZ2VudCBDU0I2MzciCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBDb2dlbnQncyBDU0I2MzcgYm9hcmQuCi0JICA8aHR0cDovL3d3dy5jb2djb21wLmNvbS9jc2JfY3NiNjM3Lmh0bT4KLQotY29uZmlnIE1BQ0hfQ0FSTUVWQQotCWJvb2wgIkNvbml0ZWMgQVJNJkVWQSIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIENvbml0ZWMncyBBVDkxUk05MjAwLU1DVS1Nb2R1bGUuCi0JICA8aHR0cDovL3d3dy5jb25pdGVjLm5ldC9lbmdsaXNoL2xpbnV4Ym9hcmQucGhwPgotCi1jb25maWcgTUFDSF9BVEVCOTIwMAotCWJvb2wgIkVtYmVzdCBBVEVCOTIwMCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEVtYmVzdCdzIEFURUI5MjAwIGJvYXJkLgotCSAgPGh0dHA6Ly93d3cuZW1iZWRpbmZvLmNvbS9lbmdsaXNoL3Byb2R1Y3QvQVRFQjkyMDAuYXNwPgotCi1jb25maWcgTUFDSF9LQjkyMDAKLQlib29sICJLd2lrQnl0ZSBLQjkyMHgiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBLd2lrQnl0ZSdzIEtCOTIweCBib2FyZC4KLQkgIDxodHRwOi8vd3d3Lmt3aWtieXRlLmNvbS9LQjkyMDIuaHRtbD4KLQotY29uZmlnIE1BQ0hfUElDT1RVWDJYWAotCWJvb2wgInBpY290dXggMjAwIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYSBwaWNvdHV4IDIwMC4KLQkgIDxodHRwOi8vd3d3LnBpY290dXguY29tLz4KLQotY29uZmlnIE1BQ0hfS0FGQQotCWJvb2wgIlNwZXJyeS1TdW4gS0FGQSBib2FyZCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIFNwZXJyeS1TdW4ncyBLQUZBIGJvYXJkLgotCi1jb25maWcgTUFDSF9FQ0JBVDkxCi0JYm9vbCAiZW1RYml0IEVDQl9BVDkxIFNCQyIKLQlzZWxlY3QgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBlbVFiaXQncyBFQ0JfQVQ5MSBib2FyZC4KLQkgIDxodHRwOi8vd2lraS5lbXFiaXQuY29tL2ZyZWUtZWNiLWF0OTE+Ci0KLWNvbmZpZyBNQUNIX1lMOTIwMAotCWJvb2wgInVjRHJhZ29uIFlMLTkyMDAiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgdWNEcmFnb24gWUwtOTIwMCBib2FyZC4KLQotY29uZmlnIE1BQ0hfQ1BVQVQ5MQotCWJvb2wgIkV1a3JlYSBDUFVBVDkxIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEV1a3JlYSBFbGVjdHJvbWF0aXF1ZSdzCi0JICBDUFVBVDkxIGJvYXJkIDxodHRwOi8vd3d3LmV1a3JlYS5jb20vPi4KLQotY29uZmlnIE1BQ0hfRUNPOTIwCi0JYm9vbCAiZWNvOTIwIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGVjbzkyMCBib2FyZAotZW5kaWYKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWlmIEFSQ0hfQVQ5MVNBTTkyNjAKLQotY29tbWVudCAiQVQ5MVNBTTkyNjAgVmFyaWFudHMiCi0KLWNvbW1lbnQgIkFUOTFTQU05MjYwIC8gQVQ5MVNBTTlYRSBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxU0FNOTI2MEVLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTkyNjAtRUsgLyBBVDkxU0FNOVhFIEV2YWx1YXRpb24gS2l0IgotCXNlbGVjdCBIQVZFX0FUOTFfREFUQUZMQVNIX0NBUkQKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVNBTTkyNjAtRUsgb3IgQVQ5MVNBTTlYRSBFdmFsdWF0aW9uIEtpdAotCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL2R5bi9wcm9kdWN0cy90b29sc19jYXJkLmFzcD90b29sX2lkPTM5MzM+Ci0KLWNvbmZpZyBNQUNIX0NBTTYwCi0JYm9vbCAiS3dpa0J5dGUgS0I5MjYwIChDQU02MCkgYm9hcmQiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBLd2lrQnl0ZSdzIEtCOTI2MCAoQ0FNNjApIGJvYXJkIGJhc2VkIG9uIHRoZSBBdG1lbCBBVDkxU0FNOTI2MC4KLQkgIDxodHRwOi8vd3d3Lmt3aWtieXRlLmNvbS9LQjkyNjAuaHRtbD4KLQotY29uZmlnIE1BQ0hfU0FNOV9MOTI2MAotCWJvb2wgIk9saW1leCBTQU05LUw5MjYwIGJvYXJkIgotCXNlbGVjdCBIQVZFX0FUOTFfREFUQUZMQVNIX0NBUkQKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIE9saW1leCdzIFNBTTktTDkyNjAgYm9hcmQgYmFzZWQgb24gdGhlIEF0bWVsIEFUOTFTQU05MjYwLgotCSAgPGh0dHA6Ly93d3cub2xpbWV4LmNvbS9kZXYvc2FtOS1MOTI2MC5odG1sPgotCi1jb25maWcgTUFDSF9BRkVCOTI2MAotCWJvb2wgIkN1c3RvbSBhZmViOTI2MCBib2FyZCB2MSIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGN1c3RvbSBhZmViOTI2MCBib2FyZCBiYXNlZCBvbgotCSAgb3BlbiBoYXJkd2FyZSBkZXNpZ24uIFNlbGVjdCB0aGlzIGZvciByZXZpc2lvbiAxIG9mIHRoZSBib2FyZC4KLQkgIDxzdm46Ly8xOTQuODUuMjM4LjIyL2hvbWUvdXNlcnMvZ2VvcmdlL3N2bi9hcm05ZWI+Ci0JICA8aHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FybTlmcGdhLWV2b2x1dGlvbi1ib2FyZD4KLQotY29uZmlnIE1BQ0hfQ1BVOTI2MAotCWJvb2wgIkV1a3JlYSBDUFU5MjYwIGJvYXJkIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYSBFdWtyZWEgRWxlY3Ryb21hdGlxdWUncwotCSAgQ1BVOTI2MCBCb2FyZCA8aHR0cDovL3d3dy5ldWtyZWEuY29tLz4KLQotY29uZmlnIE1BQ0hfRkxFWElCSVRZCi0JYm9vbCAiRmxleGliaXR5IENvbm5lY3QgYm9hcmQiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBGbGV4aWJpdHkgQ29ubmVjdCBib2FyZAotCSAgPGh0dHA6Ly93d3cuZmxleGliaXR5LmNvbT4KLQotY29tbWVudCAiQVQ5MVNBTTlHMjAgQm9hcmQgVHlwZSIKLQotY29uZmlnIE1BQ0hfQVQ5MVNBTTlHMjBFSwotCWJvb2wgIkF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0IgotCXNlbGVjdCBIQVZFX0FUOTFfREFUQUZMQVNIX0NBUkQKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVNBTTlHMjAtRUsgRXZhbHVhdGlvbiBLaXQKLQkgIHRoYXQgZW1iZWRzIG9ubHkgb25lIFNEL01NQyBzbG90LgotCi1jb25maWcgTUFDSF9BVDkxU0FNOUcyMEVLXzJNTUMKLQlkZXBlbmRzIG9uIE1BQ0hfQVQ5MVNBTTlHMjBFSwotCWJvb2wgIkF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0IHdpdGggMiBTRC9NTUMgU2xvdHMiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAotCSAgd2l0aCAyIFNEL01NQyBTbG90cy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgQVQ5MVNBTTlHMjAtRUsgcmV2LiBDIGFuZAotCSAgb253YXJkcy4KLQkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS90b29scy9TQU05RzIwLUVLLmFzcHg+Ci0KLWNvbmZpZyBNQUNIX0NQVTlHMjAKLQlib29sICJFdWtyZWEgQ1BVOUcyMCBib2FyZCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGEgRXVrcmVhIEVsZWN0cm9tYXRpcXVlJ3MKLQkgIENQVTlHMjAgQm9hcmQgPGh0dHA6Ly93d3cuZXVrcmVhLmNvbS8+Ci0KLWNvbmZpZyBNQUNIX1BPUlRVWEcyMAotCWJvb2wgInRhc2tpdCBQb3J0dXhHMjAiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0YXNraXQncyBQb3J0dXhHMjAuCi0JICA8aHR0cDovL3d3dy50YXNraXQuZGUvZW4vPgotCi1jb25maWcgTUFDSF9TVEFNUDlHMjAKLQlib29sICJ0YXNraXQgU3RhbXA5RzIwIENQVSBtb2R1bGUiCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0YXNraXQncyBTdGFtcDlHMjAgQ1BVIG1vZHVsZSBvbiBpdHMKLQkgIGV2YWx1YXRpb24gYm9hcmQuCi0JICA8aHR0cDovL3d3dy50YXNraXQuZGUvZW4vPgotCi1jb25maWcgTUFDSF9QQ09OVFJPTF9HMjAKLQlib29sICJQQ29udHJvbCBHMjAgQ1BVIG1vZHVsZSIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRhc2tpdCdzIFN0YW1wOUcyMCBDUFUgbW9kdWxlIG9uIHRoaXMKLQkgIGNhcnJpZXIgYm9hcmQsIGJlaW5nIHRoZSBkZWNlbnRyYWxpemVkIHVuaXQgb2YgYSBidWlsZGluZyBhdXRvbWF0aW9uCi0JICBzeXN0ZW07IGZlYXR1cmluZyBudnJhbSwgZXRoLXN3aXRjaCwgaXNvLXJzNDg1LCBkaXNwbGF5LCBpbwotCi1jb25maWcgTUFDSF9HU0lBMThTCi0JYm9vbCAiR1NfSUExOF9TIGJvYXJkIgotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgR1NfSUExOF9TIGJvYXJkCi0JICBwcm9kdWNlZCBieSBHZW9TSUcgTHRkIGNvbXBhbnkuIFRoaXMgaXMgYW4gaW50ZXJuZXQgYWNjZWxlcm9ncmFwaC4KLQkgIDxodHRwOi8vd3d3Lmdlb3NpZy5jb20+Ci0KLWNvbmZpZyBNQUNIX1NOQVBQRVJfOTI2MAotCWJvb2wgIkJsdWV3YXRlciBTeXN0ZW1zIFNuYXBwZXIgOTI2MC85RzIwIG1vZHVsZSIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRoZSBCbHVld2F0ZXIgU3lzdGVtcyBTbmFwcGVyIDkyNjAgb3IKLQkgIFNuYXBwZXIgOUcyMCBtb2R1bGVzLgotCSAgPGh0dHA6Ly93d3cuYmx1ZXdhdGVyc3lzLmNvbS8+Ci1lbmRpZgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaWYgQVJDSF9BVDkxU0FNOTI2MQotCi1jb21tZW50ICJBVDkxU0FNOTI2MSBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxU0FNOTI2MUVLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTkyNjEtRUsgRXZhbHVhdGlvbiBLaXQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOTI2MS1FSyBFdmFsdWF0aW9uIEtpdC4KLQkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS9keW4vcHJvZHVjdHMvdG9vbHNfY2FyZC5hc3A/dG9vbF9pZD0zODIwPgotCi1jb21tZW50ICJBVDkxU0FNOUcxMCBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxU0FNOUcxMEVLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTlHMTAtRUsgRXZhbHVhdGlvbiBLaXQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcxMC1FSyBFdmFsdWF0aW9uIEtpdC4KLQkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS9keW4vcHJvZHVjdHMvdG9vbHNfY2FyZC5hc3A/dG9vbF9pZD00NTg4PgotCi1lbmRpZgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaWYgQVJDSF9BVDkxU0FNOTI2MwotCi1jb21tZW50ICJBVDkxU0FNOTI2MyBCb2FyZCBUeXBlIgotCi1jb25maWcgTUFDSF9BVDkxU0FNOTI2M0VLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTkyNjMtRUsgRXZhbHVhdGlvbiBLaXQiCi0Jc2VsZWN0IEhBVkVfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOTI2My1FSyBFdmFsdWF0aW9uIEtpdC4KLQkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS9keW4vcHJvZHVjdHMvdG9vbHNfY2FyZC5hc3A/dG9vbF9pZD00MDU3PgotCi1lbmRpZgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaWYgQVJDSF9BVDkxU0FNOVJMCi0KLWNvbW1lbnQgIkFUOTFTQU05UkwgQm9hcmQgVHlwZSIKLQotY29uZmlnIE1BQ0hfQVQ5MVNBTTlSTEVLCi0JYm9vbCAiQXRtZWwgQVQ5MVNBTTlSTC1FSyBFdmFsdWF0aW9uIEtpdCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVNBTTlSTC1FSyBFdmFsdWF0aW9uIEtpdC4KLQotZW5kaWYKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWlmIEFSQ0hfQVQ5MVNBTTlHNDUKLQotY29tbWVudCAiQVQ5MVNBTTlHNDUgQm9hcmQgVHlwZSIKLQotY29uZmlnIE1BQ0hfQVQ5MVNBTTlNMTBHNDVFSwotCWJvb2wgIkF0bWVsIEFUOTFTQU05TTEwRzQ1LUVLIEV2YWx1YXRpb24gS2l0cyIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVNBTTlNMTBHNDUtRUsgRXZhbHVhdGlvbiBLaXQuCi0JICBUaG9zZSBib2FyZHMgY2FuIGJlIHBvcHVsYXRlZCB3aXRoIGFueSBTb0Mgb2YgQVQ5MVNBTTlHNDUgb3IgQVQ5MVNBTTlNMTAKLQkgIGZhbWlsaWVzOiBBVDkxU0FNOUc0NSwgQVQ5MVNBTTlHNDYsIEFUOTFTQU05TTEwIGFuZCBBVDkxU0FNOU0xMS4KLQkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS90b29scy9TQU05TTEwLUc0NS1FSy5hc3B4PgotCi1lbmRpZgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaWYgQVJDSF9BVDkxWDQwCi0KLWNvbW1lbnQgIkFUOTFYNDAgQm9hcmQgVHlwZSIKLQotY29uZmlnIE1BQ0hfQVQ5MUVCMDEKLQlib29sICJBdG1lbCBBVDkxRUIwMSBFdmFsdWF0aW9uIEtpdCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MUVCMDEgRXZhbHVhdGlvbiBLaXQuCi0JICBJdCBpcyBhbHNvIGEgcG9wdWxhciB0YXJnZXQgZm9yIHNpbXVsYXRvcnMgc3VjaCBhcyBHREIncwotCSAgQVJNIHNpbXVsYXRvciAoY29tbW9ubHkga25vd24gYXMgdGhlIEFSTXVsYXRvcikgYW5kIHRoZQotCSAgU2t5ZXllIHNpbXVsYXRvci4KLQotZW5kaWYKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNvbW1lbnQgIkFUOTEgQm9hcmQgT3B0aW9ucyIKLQotY29uZmlnIE1URF9BVDkxX0RBVEFGTEFTSF9DQVJECi0JYm9vbCAiRW5hYmxlIERhdGFGbGFzaCBDYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBIQVZFX0FUOTFfREFUQUZMQVNIX0NBUkQKLQloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIERhdGFGbGFzaCBjYXJkLgotCi1lbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKaW5kZXggMWI5YWUwMi4uN2I2NDI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQpAQCAtMiwxMCArMiw4IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwogCi1vYmoteQkJOj0gZ3Bpby5vIHNldHVwLm8gc3lzaXJxX21hc2subworb2JqLXkJCTo9IHNldHVwLm8gc3lzaXJxX21hc2subwogCi1vYmotJChDT05GSUdfT0xEX0lSUV9BVDkxKQkrPSBpcnEubwotb2JqLSQoQ09ORklHX09MRF9DTEtfQVQ5MSkJKz0gY2xvY2subwogb2JqLSQoQ09ORklHX1NPQ19BVDkxU0FNOSkJKz0gc2FtOV9zbWMubwogCiAjIENQVS1zcGVjaWZpYyBzdXBwb3J0CkBAIC0yMCw3MyArMTgsMTIgQEAKIG9iai0kKENPTkZJR19TT0NfU0FNQTVEMykJKz0gc2FtYTVkMy5vCiBvYmotJChDT05GSUdfU09DX1NBTUE1RDQpCSs9IHNhbWE1ZDQubwogCi1vYmotJChDT05GSUdfQVJDSF9BVDkxUk05MjAwKQkrPSBhdDkxcm05MjAwX2RldmljZXMubwotb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjApCSs9IGF0OTFzYW05MjYwX2RldmljZXMubwotb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEpCSs9IGF0OTFzYW05MjYxX2RldmljZXMubwotb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMpCSs9IGF0OTFzYW05MjYzX2RldmljZXMubwotb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCkJKz0gYXQ5MXNhbTlybF9kZXZpY2VzLm8KLW9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KQkrPSBhdDkxc2FtOWc0NV9kZXZpY2VzLm8KLW9iai0kKENPTkZJR19BUkNIX0FUOTFYNDApCSs9IGF0OTF4NDAubyBhdDkxeDQwX3RpbWUubwotCi0jIEFUOTFSTTkyMDAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAotb2JqLSQoQ09ORklHX01BQ0hfT05FQVJNKQkrPSBib2FyZC0xYXJtLm8KLW9iai0kKENPTkZJR19NQUNIX0FUOTFSTTkyMDBFSykJKz0gYm9hcmQtcm05MjAwZWsubwotb2JqLSQoQ09ORklHX01BQ0hfQ1NCMzM3KQkrPSBib2FyZC1jc2IzMzcubwotb2JqLSQoQ09ORklHX01BQ0hfQ1NCNjM3KQkrPSBib2FyZC1jc2I2Mzcubwotb2JqLSQoQ09ORklHX01BQ0hfQ0FSTUVWQSkJKz0gYm9hcmQtY2FybWV2YS5vCi1vYmotJChDT05GSUdfTUFDSF9LQjkyMDApCSs9IGJvYXJkLWtiOTIwMi5vCi1vYmotJChDT05GSUdfTUFDSF9BVEVCOTIwMCkJKz0gYm9hcmQtZWI5MjAwLm8KLW9iai0kKENPTkZJR19NQUNIX0tBRkEpCQkrPSBib2FyZC1rYWZhLm8KLW9iai0kKENPTkZJR19NQUNIX1BJQ09UVVgyWFgpCSs9IGJvYXJkLXBpY290dXgyMDAubwotb2JqLSQoQ09ORklHX01BQ0hfRUNCQVQ5MSkJKz0gYm9hcmQtZWNiYXQ5MS5vCi1vYmotJChDT05GSUdfTUFDSF9ZTDkyMDApCSs9IGJvYXJkLXlsLTkyMDAubwotb2JqLSQoQ09ORklHX01BQ0hfQ1BVQVQ5MSkJKz0gYm9hcmQtY3B1YXQ5MS5vCi1vYmotJChDT05GSUdfTUFDSF9FQ085MjApCSs9IGJvYXJkLWVjbzkyMC5vCi0KLSMgQVQ5MVNBTTkyNjAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjBFSykgKz0gYm9hcmQtc2FtOTI2MGVrLm8KLW9iai0kKENPTkZJR19NQUNIX0NBTTYwKQkrPSBib2FyZC1jYW02MC5vCi1vYmotJChDT05GSUdfTUFDSF9TQU05X0w5MjYwKQkrPSBib2FyZC1zYW05LWw5MjYwLm8KLW9iai0kKENPTkZJR19NQUNIX0FGRUI5MjYwKQkrPSBib2FyZC1hZmViLTkyNjB2MS5vCi1vYmotJChDT05GSUdfTUFDSF9DUFU5MjYwKQkrPSBib2FyZC1jcHU5a3JlYS5vCi1vYmotJChDT05GSUdfTUFDSF9GTEVYSUJJVFkpCSs9IGJvYXJkLWZsZXhpYml0eS5vCi0KLSMgQVQ5MVNBTTkyNjEgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjFFSykgKz0gYm9hcmQtc2FtOTI2MWVrLm8KLW9iai0kKENPTkZJR19NQUNIX0FUOTFTQU05RzEwRUspICs9IGJvYXJkLXNhbTkyNjFlay5vCi0KLSMgQVQ5MVNBTTkyNjMgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjNFSykgKz0gYm9hcmQtc2FtOTI2M2VrLm8KLQotIyBBVDkxU0FNOVJMIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKLW9iai0kKENPTkZJR19NQUNIX0FUOTFTQU05UkxFSykJKz0gYm9hcmQtc2FtOXJsZWsubwotCi0jIEFUOTFTQU05RzIwIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKLW9iai0kKENPTkZJR19NQUNIX0FUOTFTQU05RzIwRUspICs9IGJvYXJkLXNhbTlnMjBlay5vCi1vYmotJChDT05GSUdfTUFDSF9DUFU5RzIwKQkrPSBib2FyZC1jcHU5a3JlYS5vCi1vYmotJChDT05GSUdfTUFDSF9TVEFNUDlHMjApCSs9IGJvYXJkLXN0YW1wOWcyMC5vCi1vYmotJChDT05GSUdfTUFDSF9QT1JUVVhHMjApCSs9IGJvYXJkLXN0YW1wOWcyMC5vCi1vYmotJChDT05GSUdfTUFDSF9QQ09OVFJPTF9HMjApCSs9IGJvYXJkLXBjb250cm9sLWcyMC5vIGJvYXJkLXN0YW1wOWcyMC5vCi1vYmotJChDT05GSUdfTUFDSF9HU0lBMThTKQkrPSBib2FyZC1nc2lhMThzLm8gYm9hcmQtc3RhbXA5ZzIwLm8KLQotIyBBVDkxU0FNOTI2MC9BVDkxU0FNOUcyMCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9TTkFQUEVSXzkyNjApCSs9IGJvYXJkLXNuYXBwZXI5MjYwLm8KLQotIyBBVDkxU0FNOUc0NSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0Ci1vYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOU0xMEc0NUVLKSArPSBib2FyZC1zYW05bTEwZzQ1ZWsubwotCiAjIEFUOTFTQU0gYm9hcmQgd2l0aCBkZXZpY2UtdHJlZQogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVJNOTIwMF9EVCkgKz0gYm9hcmQtZHQtcm05MjAwLm8KIG9iai0kKENPTkZJR19NQUNIX0FUOTFTQU05X0RUKSArPSBib2FyZC1kdC1zYW05Lm8KIAogIyBTQU1BNSBib2FyZCB3aXRoIGRldmljZS10cmVlCi1vYmotJChDT05GSUdfTUFDSF9TQU1BNV9EVCkgKz0gYm9hcmQtZHQtc2FtYTUubwotCi0jIEFUOTFYNDAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAotb2JqLSQoQ09ORklHX01BQ0hfQVQ5MUVCMDEpCSs9IGJvYXJkLWViMDEubwotCi0jIERyaXZlcnMKLW9iai15CQkJCSs9IGxlZHMubworb2JqLSQoQ09ORklHX1NPQ19TQU1BNSkJCSs9IGJvYXJkLWR0LXNhbWE1Lm8KIAogIyBQb3dlciBNYW5hZ2VtZW50CiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZS5ib290CmluZGV4IDUzMDlmOWIuLjI5ZWQwZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZS5ib290CisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZS5ib290CkBAIC0zLDEyICszLDYgQEAKICMgICBQQVJBTVNfUEhZUyBtdXN0IGJlIHdpdGhpbiA0TUIgb2YgWlJFTEFERFIKICMgICBJTklUUkRfUEhZUyBtdXN0IGJlIGluIFJBTQogCi1pZmVxICgkKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KSx5KQotICAgenJlbGFkZHIteQkrPSAweDcwMDA4MDAwCi1wYXJhbXNfcGh5cy15CTo9IDB4NzAwMDAxMDAKLWluaXRyZF9waHlzLXkJOj0gMHg3MDQxMDAwMAotZWxzZQogICAgenJlbGFkZHIteQkrPSAweDIwMDA4MDAwCiBwYXJhbXNfcGh5cy15CTo9IDB4MjAwMDAxMDAKIGluaXRyZF9waHlzLXkJOj0gMHgyMDQxMDAwMAotZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxX2FpYy5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFfYWljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZWE2NjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFfYWljLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX2FpYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQotICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCi0gKgotICogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFJQykgLSBTeXN0ZW0gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzLgotICogQmFzZWQgb24gQVQ5MVJNOTIwMCBkYXRhc2hlZXQgcmV2aXNpb24gRS4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgQVQ5MV9BSUNfSAotI2RlZmluZSBBVDkxX0FJQ19ICi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdm9pZCBfX2lvbWVtICphdDkxX2FpY19iYXNlOwotCi0jZGVmaW5lIGF0OTFfYWljX3JlYWQoZmllbGQpIFwKLQlfX3Jhd19yZWFkbChhdDkxX2FpY19iYXNlICsgZmllbGQpCi0KLSNkZWZpbmUgYXQ5MV9haWNfd3JpdGUoZmllbGQsIHZhbHVlKSBcCi0JX19yYXdfd3JpdGVsKHZhbHVlLCBhdDkxX2FpY19iYXNlICsgZmllbGQpCi0jZWxzZQotLmV4dGVybiBhdDkxX2FpY19iYXNlCi0jZW5kaWYKLQotLyogTnVtYmVyIG9mIGlycSBsaW5lcyBtYW5hZ2VkIGJ5IEFJQyAqLwotI2RlZmluZSBOUl9BSUNfSVJRUwkzMgotI2RlZmluZSBOUl9BSUM1X0lSUVMJMTI4Ci0KLSNkZWZpbmUgQVQ5MV9BSUM1X1NTUgkJMHgwCQkJLyogU291cmNlIFNlbGVjdCBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgCUFUOTFfQUlDNV9JTlRTRUxfTVNLCSgweDdmIDw8IDApCQkvKiBJbnRlcnJ1cHQgTGluZSBTZWxlY3Rpb24gTWFzayAqLwotCi0jZGVmaW5lIEFUOTFfQUlDX0lSUV9NSU5fUFJJT1JJVFkJMAotI2RlZmluZSBBVDkxX0FJQ19JUlFfTUFYX1BSSU9SSVRZCTcKLQotI2RlZmluZSBBVDkxX0FJQ19TTVIobikJCSgobikgKiA0KQkJLyogU291cmNlIE1vZGUgUmVnaXN0ZXJzIDAtMzEgKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X1NNUgkJMHg0CQkJLyogU291cmNlIE1vZGUgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lCQlBVDkxX0FJQ19QUklPUgkJKDcgPDwgMCkJCS8qIFByaW9yaXR5IExldmVsICovCi0jZGVmaW5lCQlBVDkxX0FJQ19TUkNUWVBFCSgzIDw8IDUpCQkvKiBJbnRlcnJ1cHQgU291cmNlIFR5cGUgKi8KLSNkZWZpbmUJCQlBVDkxX0FJQ19TUkNUWVBFX0xPVwkJKDAgPDwgNSkKLSNkZWZpbmUJCQlBVDkxX0FJQ19TUkNUWVBFX0ZBTExJTkcJKDEgPDwgNSkKLSNkZWZpbmUJCQlBVDkxX0FJQ19TUkNUWVBFX0hJR0gJCSgyIDw8IDUpCi0jZGVmaW5lCQkJQVQ5MV9BSUNfU1JDVFlQRV9SSVNJTkcJCSgzIDw8IDUpCi0KLSNkZWZpbmUgQVQ5MV9BSUNfU1ZSKG4pCQkoMHg4MCArICgobikgKiA0KSkJLyogU291cmNlIFZlY3RvciBSZWdpc3RlcnMgMC0zMSAqLwotI2RlZmluZSBBVDkxX0FJQzVfU1ZSCQkweDgJCQkvKiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19JVlIJCTB4MTAwCQkJLyogSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FJQzVfSVZSCQkweDEwCQkJLyogSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfRlZSCQkweDEwNAkJCS8qIEZhc3QgSW50ZXJydXB0IFZlY3RvciBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FJQzVfRlZSCQkweDE0CQkJLyogRmFzdCBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19JU1IJCTB4MTA4CQkJLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FJQzVfSVNSCQkweDE4CQkJLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUJCUFUOTFfQUlDX0lSUUlECQkoMHgxZiA8PCAwKQkJLyogQ3VycmVudCBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLwotCi0jZGVmaW5lIEFUOTFfQUlDX0lQUgkJMHgxMGMJCQkvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FJQzVfSVBSMAkJMHgyMAkJCS8qIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIDAgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JUFIxCQkweDI0CQkJLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgMSBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0lQUjIJCTB4MjgJCQkvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQzVfSVBSMwkJMHgyYwkJCS8qIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIDMgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDX0lNUgkJMHgxMTAJCQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FJQzVfSU1SCQkweDMwCQkJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDX0NJU1IJCTB4MTE0CQkJLyogQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9DSVNSCQkweDM0CQkJLyogQ29yZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZQkJQVQ5MV9BSUNfTkZJUQkJKDEgPDwgMCkJCS8qIG5GSVEgU3RhdHVzICovCi0jZGVmaW5lCQlBVDkxX0FJQ19OSVJRCQkoMSA8PCAxKQkJLyogbklSUSBTdGF0dXMgKi8KLQotI2RlZmluZSBBVDkxX0FJQ19JRUNSCQkweDEyMAkJCS8qIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FJQzVfSUVDUgkJMHg0MAkJCS8qIEludGVycnVwdCBFbmFibGUgQ29tbWFuZCBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfSURDUgkJMHgxMjQJCQkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBDb21tYW5kIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9JRENSCQkweDQ0CQkJLyogSW50ZXJydXB0IERpc2FibGUgQ29tbWFuZCBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfSUNDUgkJMHgxMjgJCQkvKiBJbnRlcnJ1cHQgQ2xlYXIgQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FJQzVfSUNDUgkJMHg0OAkJCS8qIEludGVycnVwdCBDbGVhciBDb21tYW5kIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZSBBVDkxX0FJQ19JU0NSCQkweDEyYwkJCS8qIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX0FJQzVfSVNDUgkJMHg0YwkJCS8qIEludGVycnVwdCBTZXQgQ29tbWFuZCBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfRU9JQ1IJCTB4MTMwCQkJLyogRW5kIG9mIEludGVycnVwdCBDb21tYW5kIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9FT0lDUgkJMHgzOAkJCS8qIEVuZCBvZiBJbnRlcnJ1cHQgQ29tbWFuZCBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfU1BVCQkweDEzNAkJCS8qIFNwdXJpb3VzIEludGVycnVwdCBWZWN0b3IgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X1NQVQkJMHgzYwkJCS8qIFNwdXJpb3VzIEludGVycnVwdCBWZWN0b3IgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDX0RDUgkJMHgxMzgJCQkvKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfQUlDNV9EQ1IJCTB4NmMJCQkvKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIFtBSUM1XSAqLwotI2RlZmluZQkJQVQ5MV9BSUNfRENSX1BST1QJKDEgPDwgMCkJCS8qIFByb3RlY3Rpb24gTW9kZSAqLwotI2RlZmluZQkJQVQ5MV9BSUNfRENSX0dNU0sJKDEgPDwgMSkJCS8qIEdlbmVyYWwgTWFzayAqLwotCi0jZGVmaW5lIEFUOTFfQUlDX0ZGRVIJCTB4MTQwCQkJLyogRmFzdCBGb3JjaW5nIEVuYWJsZSBSZWdpc3RlciBbU0FNOSBvbmx5XSAqLwotI2RlZmluZSBBVDkxX0FJQzVfRkZFUgkJMHg1MAkJCS8qIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXIgW0FJQzVdICovCi0jZGVmaW5lIEFUOTFfQUlDX0ZGRFIJCTB4MTQ0CQkJLyogRmFzdCBGb3JjaW5nIERpc2FibGUgUmVnaXN0ZXIgW1NBTTkgb25seV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUM1X0ZGRFIJCTB4NTQJCQkvKiBGYXN0IEZvcmNpbmcgRGlzYWJsZSBSZWdpc3RlciBbQUlDNV0gKi8KLSNkZWZpbmUgQVQ5MV9BSUNfRkZTUgkJMHgxNDgJCQkvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyIFtTQU05IG9ubHldICovCi0jZGVmaW5lIEFUOTFfQUlDNV9GRlNSCQkweDU4CQkJLyogRmFzdCBGb3JjaW5nIFN0YXR1cyBSZWdpc3RlciBbQUlDNV0gKi8KLQotdm9pZCBhdDkxX2FpY19oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLXZvaWQgYXQ5MV9haWM1X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxX3RjLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MV90Yy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmEzMTdmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxX3RjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV90Yy5oCi0gKgotICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCi0gKgotICogVGltZXIvQ291bnRlciBVbml0IChUQykgcmVnaXN0ZXJzLgotICogQmFzZWQgb24gQVQ5MVJNOTIwMCBkYXRhc2hlZXQgcmV2aXNpb24gRS4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgQVQ5MV9UQ19ICi0jZGVmaW5lIEFUOTFfVENfSAotCi0jZGVmaW5lIEFUOTFfVENfQkNSCQkweGMwCQkvKiBUQyBCbG9jayBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX1RDX1NZTkMJCSgxIDw8IDApCS8qIFN5bmNocm8gQ29tbWFuZCAqLwotCi0jZGVmaW5lIEFUOTFfVENfQk1SCQkweGM0CQkvKiBUQyBCbG9jayBNb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX1RDX1RDMFhDMFMJCSgzIDw8IDApCS8qIEV4dGVybmFsIENsb2NrIFNpZ25hbCAwIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfVENfVEMwWEMwU19UQ0xLMAkJKDAgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX1RDX1RDMFhDMFNfTk9ORQkJKDEgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX1RDX1RDMFhDMFNfVElPQTEJCSgyIDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzBYQzBTX1RJT0EyCQkoMyA8PCAwKQotI2RlZmluZQkJQVQ5MV9UQ19UQzFYQzFTCQkoMyA8PCAyKQkvKiBFeHRlcm5hbCBDbG9jayBTaWduYWwgMSBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCQlBVDkxX1RDX1RDMVhDMVNfVENMSzEJCSgwIDw8IDIpCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzFYQzFTX05PTkUJCSgxIDw8IDIpCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzFYQzFTX1RJT0EwCQkoMiA8PCAyKQotI2RlZmluZQkJCUFUOTFfVENfVEMxWEMxU19USU9BMgkJKDMgPDwgMikKLSNkZWZpbmUJCUFUOTFfVENfVEMyWEMyUwkJKDMgPDwgNCkJLyogRXh0ZXJuYWwgQ2xvY2sgU2lnbmFsIDIgU2VsZWN0aW9uICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19UQzJYQzJTX1RDTEsyCQkoMCA8PCA0KQotI2RlZmluZQkJCUFUOTFfVENfVEMyWEMyU19OT05FCQkoMSA8PCA0KQotI2RlZmluZQkJCUFUOTFfVENfVEMyWEMyU19USU9BMAkJKDIgPDwgNCkKLSNkZWZpbmUJCQlBVDkxX1RDX1RDMlhDMlNfVElPQTEJCSgzIDw8IDQpCi0KLQotI2RlZmluZSBBVDkxX1RDX0NDUgkJMHgwMAkJLyogQ2hhbm5lbCBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX1RDX0NMS0VOCQkoMSA8PCAwKQkvKiBDb3VudGVyIENsb2NrIEVuYWJsZSBDb21tYW5kICovCi0jZGVmaW5lCQlBVDkxX1RDX0NMS0RJUwkJKDEgPDwgMSkJLyogQ291bnRlciBDTG9jayBEaXNhYmxlIENvbW1hbmQgKi8KLSNkZWZpbmUJCUFUOTFfVENfU1dUUkcJCSgxIDw8IDIpCS8qIFNvZnR3YXJlIFRyaWdnZXIgQ29tbWFuZCAqLwotCi0jZGVmaW5lIEFUOTFfVENfQ01SCQkweDA0CQkvKiBDaGFubmVsIE1vZGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfVENfVENDTEtTCQkoNyA8PCAwKQkvKiBDYXB0dXJlL1dhdmVmb3JtIE1vZGU6IENsb2NrIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfVENfVElNRVJfQ0xPQ0sxCQkoMCA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfVElNRVJfQ0xPQ0syCQkoMSA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfVElNRVJfQ0xPQ0szCQkoMiA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfVElNRVJfQ0xPQ0s0CQkoMyA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfVElNRVJfQ0xPQ0s1CQkoNCA8PCAwKQotI2RlZmluZQkJCUFUOTFfVENfWEMwCQkJKDUgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX1RDX1hDMQkJCSg2IDw8IDApCi0jZGVmaW5lCQkJQVQ5MV9UQ19YQzIJCQkoNyA8PCAwKQotI2RlZmluZQkJQVQ5MV9UQ19DTEtJCQkoMSA8PCAzKQkvKiBDYXB0dXJlL1dhdmVmb3JtIE1vZGU6IENsb2NrIEludmVydCAqLwotI2RlZmluZQkJQVQ5MV9UQ19CVVJTVAkJKDMgPDwgNCkJLyogQ2FwdHVyZS9XYXZlZm9ybSBNb2RlOiBCdXJzdCBTaWduYWwgU2VsZWN0aW9uICovCi0jZGVmaW5lCQlBVDkxX1RDX0xEQlNUT1AJCSgxIDw8IDYpCS8qIENhcHR1cmUgTW9kZTogQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggVEIgTG9hZGluZyAqLwotI2RlZmluZQkJQVQ5MV9UQ19MREJESVMJCSgxIDw8IDcpCS8qIENhcHR1cmUgTW9kZTogQ291bnRlciBDbG9jayBEaXNhYmxlIHdpdGggUkIgTG9hZGluZyAqLwotI2RlZmluZQkJQVQ5MV9UQ19FVFJHRURHCQkoMyA8PCA4KQkvKiBDYXB0dXJlIE1vZGU6IEV4dGVybmFsIFRyaWdnZXIgRWRnZSBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCUFUOTFfVENfQUJFVFJHCQkoMSA8PCAxMCkJLyogQ2FwdHVyZSBNb2RlOiBUSU9BIG9yIFRJT0IgRXh0ZXJuYWwgVHJpZ2dlciBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCUFUOTFfVENfQ1BDVFJHCQkoMSA8PCAxNCkJLyogQ2FwdHVyZSBNb2RlOiBSQyBDb21wYXJlIFRyaWdnZXIgRW5hYmxlICovCi0jZGVmaW5lCQlBVDkxX1RDX1dBVkUJCSgxIDw8IDE1KQkvKiBDYXB0dXJlL1dhdmVmb3JtIG1vZGUgKi8KLSNkZWZpbmUJCUFUOTFfVENfTERSQQkJKDMgPDwgMTYpCS8qIENhcHR1cmUgTW9kZTogUkEgTG9hZGluZyBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCUFUOTFfVENfTERSQgkJKDMgPDwgMTgpCS8qIENhcHR1cmUgTW9kZTogUkIgTG9hZGluZyBTZWxlY3Rpb24gKi8KLQotI2RlZmluZQkJQVQ5MV9UQ19DUENTVE9QCQkoMSA8PCAgNikJLyogV2F2ZWZvcm0gTW9kZTogQ291bnRlciBDbG9jayBTdG9wcGVkIHdpdGggUkMgQ29tcGFyZSAqLwotI2RlZmluZQkJQVQ5MV9UQ19DUENESVMJCSgxIDw8ICA3KQkvKiBXYXZlZm9ybSBNb2RlOiBDb3VudGVyIENsb2NrIERpc2FibGUgd2l0aCBSQyBDb21wYXJlICovCi0jZGVmaW5lCQlBVDkxX1RDX0VFVlRFREcJCSgzIDw8ICA4KQkvKiBXYXZlZm9ybSBNb2RlOiBFeHRlcm5hbCBFdmVudCBFZGdlIFNlbGVjdGlvbiAqLwotI2RlZmluZQkJCUFUOTFfVENfRUVWVEVER19OT05FCQkoMCA8PCA4KQotI2RlZmluZQkJCUFUOTFfVENfRUVWVEVER19SSVNJTkcJCSgxIDw8IDgpCi0jZGVmaW5lCQkJQVQ5MV9UQ19FRVZURURHX0ZBTExJTkcJCSgyIDw8IDgpCi0jZGVmaW5lCQkJQVQ5MV9UQ19FRVZURURHX0JPVEgJCSgzIDw8IDgpCi0jZGVmaW5lCQlBVDkxX1RDX0VFVlQJCSgzIDw8IDEwKQkvKiBXYXZlZm9ybSBNb2RlOiBFeHRlcm5hbCBFdmVudCBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCQlBVDkxX1RDX0VFVlRfVElPQgkJKDAgPDwgMTApCi0jZGVmaW5lCQkJQVQ5MV9UQ19FRVZUX1hDMAkJKDEgPDwgMTApCi0jZGVmaW5lCQkJQVQ5MV9UQ19FRVZUX1hDMQkJKDIgPDwgMTApCi0jZGVmaW5lCQkJQVQ5MV9UQ19FRVZUX1hDMgkJKDMgPDwgMTApCi0jZGVmaW5lCQlBVDkxX1RDX0VORVRSRwkJKDEgPDwgMTIpCS8qIFdhdmVmb3JtIE1vZGU6IEV4dGVybmFsIEV2ZW50IFRyaWdnZXIgRW5hYmxlICovCi0jZGVmaW5lCQlBVDkxX1RDX1dBVkVTRUwJCSgzIDw8IDEzKQkvKiBXYXZlZm9ybSBNb2RlOiBXYXZlZm9ybSBTZWxlY3Rpb24gKi8KLSNkZWZpbmUJCQlBVDkxX1RDX1dBVkVTRUxfVVAJCSgwIDw8IDEzKQotI2RlZmluZQkJCUFUOTFfVENfV0FWRVNFTF9VUF9BVVRPCQkoMiA8PCAxMykKLSNkZWZpbmUJCQlBVDkxX1RDX1dBVkVTRUxfVVBET1dOCQkoMSA8PCAxMykKLSNkZWZpbmUJCQlBVDkxX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8JKDMgPDwgMTMpCi0jZGVmaW5lCQlBVDkxX1RDX0FDUEEJCSgzIDw8IDE2KQkvKiBXYXZlZm9ybSBNb2RlOiBSQSBDb21wYXJlIEVmZmVjdCBvbiBUSU9BICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19BQ1BBX05PTkUJCSgwIDw8IDE2KQotI2RlZmluZQkJCUFUOTFfVENfQUNQQV9TRVQJCSgxIDw8IDE2KQotI2RlZmluZQkJCUFUOTFfVENfQUNQQV9DTEVBUgkJKDIgPDwgMTYpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BQ1BBX1RPR0dMRQkJKDMgPDwgMTYpCi0jZGVmaW5lCQlBVDkxX1RDX0FDUEMJCSgzIDw8IDE4KQkvKiBXYXZlZm9ybSBNb2RlOiBSQyBDb21wcmUgRWZmZWN0IG9uIFRJT0EgKi8KLSNkZWZpbmUJCQlBVDkxX1RDX0FDUENfTk9ORQkJKDAgPDwgMTgpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BQ1BDX1NFVAkJKDEgPDwgMTgpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BQ1BDX0NMRUFSCQkoMiA8PCAxOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0FDUENfVE9HR0xFCQkoMyA8PCAxOCkKLSNkZWZpbmUJCUFUOTFfVENfQUVFVlQJCSgzIDw8IDIwKQkvKiBXYXZlZm9ybSBNb2RlOiBFeHRlcm5hbCBFdmVudCBFZmZlY3Qgb24gVElPQSAqLwotI2RlZmluZQkJCUFUOTFfVENfQUVFVlRfTk9ORQkJKDAgPDwgMjApCi0jZGVmaW5lCQkJQVQ5MV9UQ19BRUVWVF9TRVQJCSgxIDw8IDIwKQotI2RlZmluZQkJCUFUOTFfVENfQUVFVlRfQ0xFQVIJCSgyIDw8IDIwKQotI2RlZmluZQkJCUFUOTFfVENfQUVFVlRfVE9HR0xFCQkoMyA8PCAyMCkKLSNkZWZpbmUJCUFUOTFfVENfQVNXVFJHCQkoMyA8PCAyMikJLyogV2F2ZWZvcm0gTW9kZTogU29mdHdhcmUgVHJpZ2dlciBFZmZlY3Qgb24gVElPQSAqLwotI2RlZmluZQkJCUFUOTFfVENfQVNXVFJHX05PTkUJCSgwIDw8IDIyKQotI2RlZmluZQkJCUFUOTFfVENfQVNXVFJHX1NFVAkJKDEgPDwgMjIpCi0jZGVmaW5lCQkJQVQ5MV9UQ19BU1dUUkdfQ0xFQVIJCSgyIDw8IDIyKQotI2RlZmluZQkJCUFUOTFfVENfQVNXVFJHX1RPR0dMRQkJKDMgPDwgMjIpCi0jZGVmaW5lCQlBVDkxX1RDX0JDUEIJCSgzIDw8IDI0KQkvKiBXYXZlZm9ybSBNb2RlOiBSQiBDb21wYXJlIEVmZmVjdCBvbiBUSU9CICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BCX05PTkUJCSgwIDw8IDI0KQotI2RlZmluZQkJCUFUOTFfVENfQkNQQl9TRVQJCSgxIDw8IDI0KQotI2RlZmluZQkJCUFUOTFfVENfQkNQQl9DTEVBUgkJKDIgPDwgMjQpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BCX1RPR0dMRQkJKDMgPDwgMjQpCi0jZGVmaW5lCQlBVDkxX1RDX0JDUEMJCSgzIDw8IDI2KQkvKiBXYXZlZm9ybSBNb2RlOiBSQyBDb21wYXJlIEVmZmVjdCBvbiBUSU9CICovCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BDX05PTkUJCSgwIDw8IDI2KQotI2RlZmluZQkJCUFUOTFfVENfQkNQQ19TRVQJCSgxIDw8IDI2KQotI2RlZmluZQkJCUFUOTFfVENfQkNQQ19DTEVBUgkJKDIgPDwgMjYpCi0jZGVmaW5lCQkJQVQ5MV9UQ19CQ1BDX1RPR0dMRQkJKDMgPDwgMjYpCi0jZGVmaW5lCQlBVDkxX1RDX0JFRVZUCQkoMyA8PCAyOCkJLyogV2F2ZWZvcm0gTW9kZTogRXh0ZXJuYWwgRXZlbnQgRWZmZWN0IG9uIFRJT0IgKi8KLSNkZWZpbmUJCQlBVDkxX1RDX0JFRVZUX05PTkUJCSgwIDw8IDI4KQotI2RlZmluZQkJCUFUOTFfVENfQkVFVlRfU0VUCQkoMSA8PCAyOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0JFRVZUX0NMRUFSCQkoMiA8PCAyOCkKLSNkZWZpbmUJCQlBVDkxX1RDX0JFRVZUX1RPR0dMRQkJKDMgPDwgMjgpCi0jZGVmaW5lCQlBVDkxX1RDX0JTV1RSRwkJKDMgPDwgMzApCS8qIFdhdmVmb3JtIE1vZGU6IFNvZnR3YXJlIFRyaWdnZXIgRWZmZWN0IG9uIFRJT0IgKi8KLSNkZWZpbmUJCQlBVDkxX1RDX0JTV1RSR19OT05FCQkoMCA8PCAzMCkKLSNkZWZpbmUJCQlBVDkxX1RDX0JTV1RSR19TRVQJCSgxIDw8IDMwKQotI2RlZmluZQkJCUFUOTFfVENfQlNXVFJHX0NMRUFSCQkoMiA8PCAzMCkKLSNkZWZpbmUJCQlBVDkxX1RDX0JTV1RSR19UT0dHTEUJCSgzIDw8IDMwKQotCi0jZGVmaW5lIEFUOTFfVENfQ1YJCTB4MTAJCS8qIENvdW50ZXIgVmFsdWUgKi8KLSNkZWZpbmUgQVQ5MV9UQ19SQQkJMHgxNAkJLyogUmVnaXN0ZXIgQSAqLwotI2RlZmluZSBBVDkxX1RDX1JCCQkweDE4CQkvKiBSZWdpc3RlciBCICovCi0jZGVmaW5lIEFUOTFfVENfUkMJCTB4MWMJCS8qIFJlZ2lzdGVyIEMgKi8KLQotI2RlZmluZSBBVDkxX1RDX1NSCQkweDIwCQkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfVENfQ09WRlMJCSgxIDw8ICAwKQkvKiBDb3VudGVyIE92ZXJmbG93IFN0YXR1cyAqLwotI2RlZmluZQkJQVQ5MV9UQ19MT1ZSUwkJKDEgPDwgIDEpCS8qIExvYWQgT3ZlcnJ1biBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfVENfQ1BBUwkJKDEgPDwgIDIpCS8qIFJBIENvbXBhcmUgU3RhdHVzICovCi0jZGVmaW5lCQlBVDkxX1RDX0NQQlMJCSgxIDw8ICAzKQkvKiBSQiBDb21wYXJlIFN0YXR1cyAqLwotI2RlZmluZQkJQVQ5MV9UQ19DUENTCQkoMSA8PCAgNCkJLyogUkMgQ29tcGFyZSBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfVENfTERSQVMJCSgxIDw8ICA1KQkvKiBSQSBMb2FkaW5nIFN0YXR1cyAqLwotI2RlZmluZQkJQVQ5MV9UQ19MRFJCUwkJKDEgPDwgIDYpCS8qIFJCIExvYWRpbmcgU3RhdHVzICovCi0jZGVmaW5lCQlBVDkxX1RDX0VUUkdTCQkoMSA8PCAgNykJLyogRXh0ZXJuYWwgVHJpZ2dlciBTdGF0dXMgKi8KLSNkZWZpbmUJCUFUOTFfVENfQ0xLU1RBCQkoMSA8PCAxNikJLyogQ2xvY2sgRW5hYmxpbmcgU3RhdHVzICovCi0jZGVmaW5lCQlBVDkxX1RDX01USU9BCQkoMSA8PCAxNykJLyogVElPQSBNaXJyb3IgKi8KLSNkZWZpbmUJCUFUOTFfVENfTVRJT0IJCSgxIDw8IDE4KQkvKiBUSU9CIE1pcnJvciAqLwotCi0jZGVmaW5lIEFUOTFfVENfSUVSCQkweDI0CQkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfVENfSURSCQkweDI4CQkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX1RDX0lNUgkJMHgyYwkJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDAuYwppbmRleCAwMzg3MDJlLi5iNTI5MTY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwLmMKQEAgLTExLDI5NiArMTEsMTUgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrL2F0OTFfcG1jLmg+CiAKLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMC5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9zdC5oPgotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJwbS5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfT0xEX0NMS19BVDkxKQotI2luY2x1ZGUgImNsb2NrLmgiCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENsb2NrcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBwZXJpcGhlcmFsIGNsb2Nrcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKLQkubmFtZQkJPSAidWRjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1VEUCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0gewotCS5uYW1lCQk9ICJvaGNpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1VIUCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGV0aGVyX2NsayA9IHsKLQkubmFtZQkJPSAiZXRoZXJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfRU1BQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9NQ0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2lfY2xrID0gewotCS5uYW1lCQk9ICJ0d2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVFdJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQwX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1VTMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9VUzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVVMyLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQzX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1VTMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9TUEksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9QSU9BLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfUElPQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0NfY2xrID0gewotCS5uYW1lCQk9ICJwaW9DX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1BJT0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9EX2NsayA9IHsKLQkubmFtZQkJPSAicGlvRF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9QSU9ELAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfU1NDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzFfY2xrID0gewotCS5uYW1lCQk9ICJzc2MxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1NTQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MyX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMl9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9TU0MyLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMwX2NsayA9IHsKLQkubmFtZQkJPSAidGMwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1RDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9UQzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0gewotCS5uYW1lCQk9ICJ0YzJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVEMyLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMzX2NsayA9IHsKLQkubmFtZQkJPSAidGMzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1RDMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjNF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjNF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9UQzQsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzVfY2xrID0gewotCS5uYW1lCQk9ICJ0YzVfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVEM1LAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FfY2xrLAotCSZwaW9CX2NsaywKLQkmcGlvQ19jbGssCi0JJnBpb0RfY2xrLAotCSZ1c2FydDBfY2xrLAotCSZ1c2FydDFfY2xrLAotCSZ1c2FydDJfY2xrLAotCSZ1c2FydDNfY2xrLAotCSZtbWNfY2xrLAotCSZ1ZGNfY2xrLAotCSZ0d2lfY2xrLAotCSZzcGlfY2xrLAotCSZzc2MwX2NsaywKLQkmc3NjMV9jbGssCi0JJnNzYzJfY2xrLAotCSZ0YzBfY2xrLAotCSZ0YzFfY2xrLAotCSZ0YzJfY2xrLAotCSZ0YzNfY2xrLAotCSZ0YzRfY2xrLAotCSZ0YzVfY2xrLAotCSZvaGNpX2NsaywKLQkmZXRoZXJfY2xrLAotCS8vIGlycTAgLi4gaXJxNgotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHBlcmlwaF9jbG9ja3NfbG9va3Vwc1tdID0gewotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQxX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDJfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiYXRtZWxfdGNiLjEiLCAmdGMzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQxX2NsayIsICJhdG1lbF90Y2IuMSIsICZ0YzRfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDJfY2xrIiwgImF0bWVsX3RjYi4xIiwgJnRjNV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjAiLCAmc3NjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjEiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjIiLCAmc3NjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmQwMDAwLnNzYyIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmZDQwMDAuc3NjIiwgJnNzYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmZkODAwMC5zc2MiLCAmc3NjMl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJpMmMtYXQ5MXJtOTIwMC4wIiwgJnR3aV9jbGspLAotCS8qIGZha2UgaGNsayBjbG9jayAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0OTFfb2hjaSIsICZvaGNpX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQSIsICZwaW9BX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQiIsICZwaW9CX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQyIsICZwaW9DX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvRCIsICZwaW9EX2NsayksCi0JLyogdXNhcnQgbG9va3VwIHRhYmxlIGZvciBEVCBlbnRyaWVzICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmZmMjAwLnNlcmlhbCIsICZtY2spLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZjMDAwMC5zZXJpYWwiLCAmdXNhcnQwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmM0MDAwLnNlcmlhbCIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmYzgwMDAuc2VyaWFsIiwgJnVzYXJ0Ml9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZjYzAwMC5zZXJpYWwiLCAmdXNhcnQzX2NsayksCi0JLyogdGMgbG9va3VwIHRhYmxlIGZvciBEVCBlbnRyaWVzICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmZmZhNDAwMC50aW1lciIsICZ0YzNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImZmZmE0MDAwLnRpbWVyIiwgJnRjNF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiZmZmYTQwMDAudGltZXIiLCAmdGM1X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZmZmYjQwMDAubW1jIiwgJm1tY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJlbWFjX2NsayIsICJmZmZiYzAwMC5ldGhlcm5ldCIsICZldGhlcl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZiODAwMC5pMmMiLCAmdHdpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiMzAwMDAwLm9oY2kiLCAmb2hjaV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjQwMC5ncGlvIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY2MDAuZ3BpbyIsICZwaW9CX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmODAwLmdwaW8iLCAmcGlvQ19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZmEwMC5ncGlvIiwgJnBpb0RfY2xrKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCB1c2FydF9jbG9ja3NfbG9va3Vwc1tdID0gewotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4wIiwgJm1jayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjEiLCAmdXNhcnQwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjIiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjMiLCAmdXNhcnQyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjQiLCAmdXNhcnQzX2NsayksCi19OwotCi0vKgotICogVGhlIGZvdXIgcHJvZ3JhbW1hYmxlIGNsb2Nrcy4KLSAqIFlvdSBtdXN0IGNvbmZpZ3VyZSBwaW4gbXVsdGlwbGV4aW5nIHRvIGJyaW5nIHRoZXNlIHNpZ25hbHMgb3V0LgotICovCi1zdGF0aWMgc3RydWN0IGNsayBwY2swID0gewotCS5uYW1lCQk9ICJwY2swIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0swLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwY2sxID0gewotCS5uYW1lCQk9ICJwY2sxIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0sxLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMSwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwY2syID0gewotCS5uYW1lCQk9ICJwY2syIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0syLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMiwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwY2szID0gewotCS5uYW1lCQk9ICJwY2szIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0szLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMywKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxcm05MjAwX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrcyk7IGkrKykKLQkJY2xrX3JlZ2lzdGVyKHBlcmlwaF9jbG9ja3NbaV0pOwotCi0JY2xrZGV2X2FkZF90YWJsZShwZXJpcGhfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzX2xvb2t1cHMpKTsKLQljbGtkZXZfYWRkX3RhYmxlKHVzYXJ0X2Nsb2Nrc19sb29rdXBzLAotCQkJIEFSUkFZX1NJWkUodXNhcnRfY2xvY2tzX2xvb2t1cHMpKTsKLQotCWNsa19yZWdpc3RlcigmcGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZwY2sxKTsKLQljbGtfcmVnaXN0ZXIoJnBjazIpOwotCWNsa19yZWdpc3RlcigmcGNrMyk7Ci19Ci0jZWxzZQotI2RlZmluZSBhdDkxcm05MjAwX3JlZ2lzdGVyX2Nsb2NrcyBOVUxMCi0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBHUElPCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19iYW5rIGF0OTFybTkyMDBfZ3Bpb1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkuaWQJCT0gQVQ5MVJNOTIwMF9JRF9QSU9BLAotCQkucmVnYmFzZQk9IEFUOTFSTTkyMDBfQkFTRV9QSU9BLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFSTTkyMDBfSURfUElPQiwKLQkJLnJlZ2Jhc2UJPSBBVDkxUk05MjAwX0JBU0VfUElPQiwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxUk05MjAwX0lEX1BJT0MsCi0JCS5yZWdiYXNlCT0gQVQ5MVJNOTIwMF9CQVNFX1BJT0MsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVJNOTIwMF9JRF9QSU9ELAotCQkucmVnYmFzZQk9IEFUOTFSTTkyMDBfQkFTRV9QSU9ELAotCX0KLX07CiAKIHN0YXRpYyB2b2lkIGF0OTFybTkyMDBfaWRsZSh2b2lkKQogewpAQCAtMzI5LDc0ICs0OCwxNCBAQAogCWF0OTFfaW5pdF9zcmFtKDAsIEFUOTFSTTkyMDBfU1JBTV9CQVNFLCBBVDkxUk05MjAwX1NSQU1fU0laRSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxcm05MjAwX2lvcmVtYXBfcmVnaXN0ZXJzKHZvaWQpCi17Ci0JYXQ5MXJtOTIwMF9pb3JlbWFwX3N0KEFUOTFSTTkyMDBfQkFTRV9TVCk7Ci0JYXQ5MV9pb3JlbWFwX3JhbWMoMCwgQVQ5MVJNOTIwMF9CQVNFX01DLCAyNTYpOwotCWF0OTFfcG1fc2V0X3N0YW5kYnkoYXQ5MXJtOTIwMF9zdGFuZGJ5KTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGF0OTFybTkyMDBfaW5pdGlhbGl6ZSh2b2lkKQogewogCWFybV9wbV9pZGxlID0gYXQ5MXJtOTIwMF9pZGxlOwogCWFybV9wbV9yZXN0YXJ0ID0gYXQ5MXJtOTIwMF9yZXN0YXJ0OwotCi0JLyogSW5pdGlhbGl6ZSBHUElPIHN1YnN5c3RlbSAqLwotCWF0OTFfZ3Bpb19pbml0KGF0OTFybTkyMDBfZ3BpbywKLQkJY3B1X2lzX2F0OTFybTkyMDBfYmdhKCkgPyBBVDkxUk05MjAwX0JHQSA6IEFUOTFSTTkyMDBfUFFGUCk7CiB9CiAKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MXJtOTIwMF9kZWZhdWx0X2lycV9wcmlvcml0eVtOUl9BSUNfSVJRU10gX19pbml0ZGF0YSA9IHsKLQk3LAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKSAqLwotCTcsCS8qIFN5c3RlbSBQZXJpcGhlcmFscyAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgRCAqLwotCTUsCS8qIFVTQVJUIDAgKi8KLQk1LAkvKiBVU0FSVCAxICovCi0JNSwJLyogVVNBUlQgMiAqLwotCTUsCS8qIFVTQVJUIDMgKi8KLQkwLAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCi0JMiwJLyogVVNCIERldmljZSBQb3J0ICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMCAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDEgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAyICovCi0JMCwJLyogVGltZXIgQ291bnRlciAwICovCi0JMCwJLyogVGltZXIgQ291bnRlciAxICovCi0JMCwJLyogVGltZXIgQ291bnRlciAyICovCi0JMCwJLyogVGltZXIgQ291bnRlciAzICovCi0JMCwJLyogVGltZXIgQ291bnRlciA0ICovCi0JMCwJLyogVGltZXIgQ291bnRlciA1ICovCi0JMiwJLyogVVNCIEhvc3QgcG9ydCAqLwotCTMsCS8qIEV0aGVybmV0IE1BQyAqLwotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKSAqLwotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKSAqLwotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEyKSAqLwotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEzKSAqLwotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlE0KSAqLwotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlE1KSAqLwotCTAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTYpICovCi19OwotCiBBVDkxX1NPQ19TVEFSVChhdDkxcm05MjAwKQogCS5tYXBfaW8gPSBhdDkxcm05MjAwX21hcF9pbywKLQkuZGVmYXVsdF9pcnFfcHJpb3JpdHkgPSBhdDkxcm05MjAwX2RlZmF1bHRfaXJxX3ByaW9yaXR5LAotCS5leHRlcm5faXJxID0gKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlEwKSB8ICgxIDw8IEFUOTFSTTkyMDBfSURfSVJRMSkKLQkJICAgIHwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlEyKSB8ICgxIDw8IEFUOTFSTTkyMDBfSURfSVJRMykKLQkJICAgIHwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlE0KSB8ICgxIDw8IEFUOTFSTTkyMDBfSURfSVJRNSkKLQkJICAgIHwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlE2KSwKLQkuaW9yZW1hcF9yZWdpc3RlcnMgPSBhdDkxcm05MjAwX2lvcmVtYXBfcmVnaXN0ZXJzLAotCS5yZWdpc3Rlcl9jbG9ja3MgPSBhdDkxcm05MjAwX3JlZ2lzdGVyX2Nsb2NrcywKIAkuaW5pdCA9IGF0OTFybTkyMDBfaW5pdGlhbGl6ZSwKIEFUOTFfU09DX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfZGV2aWNlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGYxZWFmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX2RldmljZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMTIgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX2RldmljZXMuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgVGhpYmF1dCBWQVJFTkUgPHZhcmVuZXRAcGFyaXNjLWxpbnV4Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgRGF2aWQgQnJvd25lbGwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8vbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFybTkyMDAuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFybTkyMDBfbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFfcmFtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBIb3N0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfVUhQX0JBU0UsCi0JCS5lbmQJPSBBVDkxUk05MjAwX1VIUF9CQVNFICsgU1pfMU0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VIUCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VSFAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VzYmhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX29oY2kiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm9oY2lfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1c2JoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1c2JoX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXNiaF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKQotewotCWludCBpOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQkvKiBFbmFibGUgb3ZlcmN1cnJlbnQgbm90aWZpY2F0aW9uICovCi0JZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRzOyBpKyspIHsKLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+b3ZlcmN1cnJlbnRfcGluW2ldKSkKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+b3ZlcmN1cnJlbnRfcGluW2ldLCAxKTsKLQl9Ci0KLQl1c2JoX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfdXNiaF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIERldmljZSAoR2FkZ2V0KQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfQVQ5MV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgdWRjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWRjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1VEUCwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9VRFAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VEUCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VRFAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3VkY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfdWRjIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVkY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWRjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWRjX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+dmJ1c19waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT52YnVzX3BpbiwgMSk7Ci0JfQotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnB1bGx1cF9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5wdWxsdXBfcGluLCAwKTsKLQotCXVkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3VkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEV0aGVybmV0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJNX0FUOTFfRVRIRVIpIHx8IGRlZmluZWQoQ09ORklHX0FSTV9BVDkxX0VUSEVSX01PRFVMRSkKLXN0YXRpYyB1NjQgZXRoX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgZXRoX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXRoX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX0VNQUMsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfRU1BQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfRU1BQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9FTUFDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9ldGhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX2V0aGVyIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cGh5X2lycV9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cGh5X2lycV9waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5waHlfaXJxX3BpbiwgMSk7Ci0JfQotCi0JLyogUGlucyB1c2VkIGZvciBNSUkgYW5kIFJNSUkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE2LCAwKTsJLyogRU1ESU8gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE1LCAwKTsJLyogRU1EQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBFUlhFUiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDApOwkvKiBFUlgxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7CS8qIEVSWDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTExLCAwKTsJLyogRUNSU19FQ1JTRFYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAwKTsJLyogRVRYMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBOSwgMCk7CS8qIEVUWDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTgsIDApOwkvKiBFVFhFTiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNywgMCk7CS8qIEVUWENLX0VSRUZDSyAqLwotCi0JaWYgKCFkYXRhLT5pc19ybWlpKSB7Ci0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTksIDApOwkvKiBFUlhDSyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE4LCAwKTsJLyogRUNPTCAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE3LCAwKTsJLyogRVJYRFYgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxNiwgMCk7CS8qIEVSWDMgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMCk7CS8qIEVSWDIgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxNCwgMCk7CS8qIEVUWEVSICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTMsIDApOwkvKiBFVFgzICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTIsIDApOwkvKiBFVFgyICovCi0JfQotCi0JZXRoX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfZXRoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDb21wYWN0IEZsYXNoIC8gUENNQ0lBCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MV9DRikgfHwgZGVmaW5lZChDT05GSUdfQVQ5MV9DRl9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBjZl9kYXRhOwotCi0jZGVmaW5lIENGX0JBU0UJCUFUOTFfQ0hJUFNFTEVDVF80Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2ZfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBDRl9CQVNFLAotCQkvKiB0aWVzIHVwIENTNCwgQ1M1IGFuZCBDUzYgKi8KLQkJLmVuZAk9IENGX0JBU0UgKyAoMHgzMDAwMDAwMCAtIDEpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzhBTkQxNkJJVCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9jZl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfY2YiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmY2ZfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGNmX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2ZfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGludCBjc2E7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWRhdGEtPmNoaXBzZWxlY3QgPSA0OwkJLyogY2FuIG9ubHkgdXNlIEVCSSBDaGlwU2VsZWN0IDQgKi8KLQotCS8qIENGIHRha2VzIG92ZXIgQ1M0LCBDUzUsIENTNiAqLwotCWNzYSA9IGF0OTFfcmFtY19yZWFkKDAsIEFUOTFfRUJJX0NTQSk7Ci0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfRUJJX0NTQSwgY3NhIHwgQVQ5MV9FQklfQ1M0QV9TTUNfQ09NUEFDVEZMQVNIKTsKLQotCS8qCi0JICogU3RhdGljIG1lbW9yeSBjb250cm9sbGVyIHRpbWluZyBhZGp1c3RtZW50cy4KLQkgKiBSRVZJU0lUOiAgdGhlc2UgdGltaW5ncyBhcmUgaW4gdGVybXMgb2YgTUNLIGN5Y2xlcywgc28KLQkgKiB3aGVuIE1DSyBjaGFuZ2VzIChjcHVmcmVxIGV0Yykgc28gbXVzdCB0aGVzZSB2YWx1ZXMuLi4KLQkgKi8KLQlhdDkxX3JhbWNfd3JpdGUoMCwgQVQ5MV9TTUNfQ1NSKDQpLAotCQkJCSAgQVQ5MV9TTUNfQUNTU19TVEQKLQkJCQl8IEFUOTFfU01DX0RCV18xNgotCQkJCXwgQVQ5MV9TTUNfQkFUCi0JCQkJfCBBVDkxX1NNQ19XU0VOCi0JCQkJfCBBVDkxX1NNQ19OV1NfKDMyKQkvKiB3YWl0IHN0YXRlcyAqLwotCQkJCXwgQVQ5MV9TTUNfUldTRVRVUF8oNikJLyogc2V0dXAgdGltZSAqLwotCQkJCXwgQVQ5MV9TTUNfUldIT0xEXyg0KQkvKiBob2xkIHRpbWUgKi8KLQkpOwotCi0JLyogaW5wdXQvaXJxICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+aXJxX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5pcnFfcGluLCAxKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+aXJxX3BpbiwgMSk7Ci0JfQotCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7Ci0JYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+ZGV0X3BpbiwgMSk7Ci0KLQkvKiBvdXRwdXRzLCBpbml0aWFsbHkgb2ZmICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+dmNjX3BpbikpCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnZjY19waW4sIDApOwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnJzdF9waW4sIDApOwotCi0JLyogZm9yY2UgcG93ZXJvbiBkZWZhdWx0cyBmb3IgdGhlc2UgcGlucyAuLi4gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzksIDApOwkvKiBBMjUvQ0ZSTlcgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEwLCAwKTsJLyogTkNTNC9DRkNTICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMSwgMCk7CS8qIE5DUzUvQ0ZDRTEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEyLCAwKTsJLyogTkNTNi9DRkNFMiAqLwotCi0JLyogbldBSVQgaXMgX25vdF8gYSBkZWZhdWx0IHNldHRpbmcgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzYsIDEpOwkvKiBuV0FJVCAqLwotCi0JY2ZfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF9jZl9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBNTUMgLyBTRAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX01NQ19BVE1FTE1DSSkKLXN0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBtbWNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfTUNJLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX01DSSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfTUNJLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX01DSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfbW1jX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbWNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZtbWNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtbWNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG1tY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgc2xvdF9jb3VudCA9IDA7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBBVE1DSV9NQVhfTlJfU0xPVFM7IGkrKykgewotCi0JCWlmICghZGF0YS0+c2xvdFtpXS5idXNfd2lkdGgpCi0JCQljb250aW51ZTsKLQotCQkvKiBpbnB1dC9pcnEgKi8KLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+c2xvdFtpXS5kZXRlY3RfcGluKSkgewotCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4sIDEpOwotCQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+c2xvdFtpXS5kZXRlY3RfcGluLCAxKTsKLQkJfQotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90W2ldLndwX3BpbikpCi0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbaV0ud3BfcGluLCAxKTsKLQotCQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSAwOgkJCQkJLyogc2xvdCBBICovCi0JCQkvKiBDTUQgKi8KLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjgsIDEpOwotCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOSwgMSk7Ci0JCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgewotCQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMywgMSk7Ci0JCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAxKTsKLQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjUsIDEpOwotCQkJfQotCQkJc2xvdF9jb3VudCsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToJCQkJCS8qIHNsb3QgQiAqLwotCQkJLyogQ01EICovCi0JCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTgsIDEpOwotCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLwotCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAxKTsKLQkJCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMSk7Ci0JCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMSk7Ci0JCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMSk7Ci0JCQl9Ci0JCQlzbG90X2NvdW50Kys7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJBVDkxOiBTRC9NTUMgc2xvdCAlZCBub3QgYXZhaWxhYmxlXG4iLCBpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzbG90X2NvdW50KSB7Ci0JCQkvKiBDTEsgKi8KLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjcsIDApOwotCi0JCQltbWNfZGF0YSA9ICpkYXRhOwotCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX21tY19kZXZpY2UpOwotCQl9Ci0JfQotCi19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTkFORCAvIFNtYXJ0TWVkaWEKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgbmFuZF9kYXRhOwotCi0jZGVmaW5lIE5BTkRfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBOQU5EX0JBU0UsCi0JCS5lbmQJPSBOQU5EX0JBU0UgKyBTWl8yNTZNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9uYW5kX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbmFuZCIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG5hbmRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuYW5kX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGludCBjc2E7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCS8qIGVuYWJsZSB0aGUgYWRkcmVzcyByYW5nZSBvZiBDUzMgKi8KLQljc2EgPSBhdDkxX3JhbWNfcmVhZCgwLCBBVDkxX0VCSV9DU0EpOwotCWF0OTFfcmFtY193cml0ZSgwLCBBVDkxX0VCSV9DU0EsIGNzYSB8IEFUOTFfRUJJX0NTM0FfU01DX1NNQVJUTUVESUEpOwotCi0JLyogc2V0IHRoZSBidXMgaW50ZXJmYWNlIGNoYXJhY3RlcmlzdGljcyAqLwotCWF0OTFfcmFtY193cml0ZSgwLCBBVDkxX1NNQ19DU1IoMyksIEFUOTFfU01DX0FDU1NfU1REIHwgQVQ5MV9TTUNfREJXXzggfCBBVDkxX1NNQ19XU0VOCi0JCXwgQVQ5MV9TTUNfTldTXyg1KQotCQl8IEFUOTFfU01DX1RERl8oMSkKLQkJfCBBVDkxX1NNQ19SV1NFVFVQXygwKQkvKiB0RFMgRGF0YSBTZXQgdXAgVGltZSAzMCAtIG5zICovCi0JCXwgQVQ5MV9TTUNfUldIT0xEXygxKQkvKiB0REggRGF0YSBIb2xkIFRpbWUgMjAgLSBucyAqLwotCSk7Ci0KLQkvKiBlbmFibGUgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZW5hYmxlX3BpbikpCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPmVuYWJsZV9waW4sIDEpOwotCi0JLyogcmVhZHkvYnVzeSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZHlfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5yZHlfcGluLCAxKTsKLQotCS8qIGNhcmQgZGV0ZWN0IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmRldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJCS8qIFNNT0UgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMsIDApOwkJLyogU01XRSAqLwotCi0JbmFuZF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX25hbmRfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUV0kgKGkyYykKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBQcmVmZXIgdGhlIEdQSU8gY29kZSBzaW5jZSB0aGUgVFdJIGNvbnRyb2xsZXIgaXNuJ3Qgcm9idXN0Ci0gKiAoZ2V0cyBvdmVycnVucyBhbmQgdW5kZXJydW5zIHVuZGVyIGxvYWQpIGFuZCBjYW4gb25seSBpc3N1ZQotICogcmVwZWF0ZWQgU1RBUlRzIGluIG9uZSBzY2VuYXJpbyAodGhlIGRyaXZlciBkb2Vzbid0IHlldCBoYW5kbGUgdGhlbSkuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGEgPSB7Ci0JLnNkYV9waW4JCT0gQVQ5MV9QSU5fUEEyNSwKLQkuc2RhX2lzX29wZW5fZHJhaW4JPSAxLAotCS5zY2xfcGluCQk9IEFUOTFfUElOX1BBMjYsCi0JLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKLQkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfdHdpX2RldmljZSA9IHsKLQkubmFtZQkJCT0gImkyYy1ncGlvIiwKLQkuaWQJCQk9IDAsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBMjUsIDEpOwkJLyogVFdEIChTREEpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyNSwgMSk7Ci0KLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTI2LCAxKTsJCS8qIFRXQ0sgKFNDTCkgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI2LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF90d2lfZGV2aWNlKTsKLX0KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfSTJDX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19BVDkxX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2lfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfVFdJLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1RXSSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVFdJLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RXSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfdHdpX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaTJjLWF0OTFybTkyMDAiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHR3aV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHR3aV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDApOwkJLyogVFdEICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyNSwgMSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI2LCAwKTsJCS8qIFRXQ0sgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI2LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF90d2lfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNQSQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLXN0YXRpYyB1NjQgc3BpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9TUEksCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfU1BJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9TUEksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfU1BJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF9zcGlfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaV9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEEzLCBBVDkxX1BJTl9QQTQsIEFUOTFfUElOX1BBNSwgQVQ5MV9QSU5fUEE2IH07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGNzX3BpbjsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMCwgMCk7CS8qIE1JU08gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDApOwkvKiBNT1NJICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAwKTsJLyogU1BDSyAqLwotCi0JLyogRW5hYmxlIFNQSSBjaGlwLXNlbGVjdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfZGV2aWNlczsgaSsrKSB7Ci0JCWlmIChkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSkKLQkJCWNzX3BpbiA9ICh1bnNpZ25lZCBsb25nKSBkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YTsKLQkJZWxzZQotCQkJY3NfcGluID0gc3BpX3N0YW5kYXJkX2NzW2RldmljZXNbaV0uY2hpcF9zZWxlY3RdOwotCi0JCWlmIChkZXZpY2VzW2ldLmNoaXBfc2VsZWN0ID09IDApCS8qIGZvciBDUzAgZXJyYXRhICovCi0JCQlhdDkxX3NldF9BX3BlcmlwaChjc19waW4sIDApOwotCQllbHNlCi0JCQlhdDkxX3NldF9ncGlvX291dHB1dChjc19waW4sIDEpOwotCi0KLQkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCi0JCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOwotCX0KLQotCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF9zcGlfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRpbWVyL0NvdW50ZXIgYmxvY2tzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9UQ0IwLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1RDQjAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEMxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEMyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF90Y2IwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdGNiIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0Y2IwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2IxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1RDQjEsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVENCMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEMzLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzQsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVEM0LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1RDNSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9UQzUsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3RjYjFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAotCS5pZAkJPSAxLAotCS5yZXNvdXJjZQk9IHRjYjFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2IxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3RjYjBfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfdGNiMV9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkgeyB9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFJUQwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMCkgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1JUQywKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9SVEMgKyBTWl8yNTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3J0Y19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfcnRjIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gcnRjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocnRjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0Yyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF9ydGNfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0Yyh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBXYXRjaGRvZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFSTTkyMDBfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFSTTkyMDBfV0FUQ0hET0dfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF93ZHRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3dkdCIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfd2R0X2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV93YXRjaGRvZyh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTU0MgLS0gU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVE1FTF9TU0MpIHx8IGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQ19NT0RVTEUpCi1zdGF0aWMgdTY0IHNzYzBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9TU0MwLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1NTQzAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1NTQzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfU1NDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfc3NjMF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MwX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19USykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIzLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SSykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI1LCAxKTsKLX0KLQotc3RhdGljIHU2NCBzc2MxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfU1NDMSwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9TU0MxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9TU0MxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1NTQzEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3NzYzFfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFybTkyMDBfc3NjIiwKLQkuaWQJPSAxLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNiwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTAsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjExLCAxKTsKLX0KLQotc3RhdGljIHU2NCBzc2MyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYzJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfU1NDMiwKLQkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9TU0MyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9TU0MyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1NTQzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3NzYzJfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFybTkyMDBfc3NjIiwKLQkuaWQJPSAyLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMl9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMl9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTIsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEzLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTUsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE2LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNywgMSk7Ci19Ci0KLS8qCi0gKiBTU0MgY29udHJvbGxlcnMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggbGlicmFyeSBjb2RlLCBpbnN0ZWFkIG9mIGFueQotICoga2luZCBvZiBhbGwtc2luZ2luZy9hbGwtZGFuY2luZyBkcml2ZXIuICBGb3IgZXhhbXBsZSBvbmUgY291bGQgYmUKLSAqIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIEkyUyBhdWRpbyBjb2RlYydzIGRyaXZlciwgd2hpbGUgYW5vdGhlciBvbmUKLSAqIG9uIHRoZSBzYW1lIHN5c3RlbSBtaWdodCBiZSB1c2VkIGJ5IGEgY3VzdG9tIGRhdGEgY2FwdHVyZSBkcml2ZXIuCi0gKi8KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCS8qCi0JICogTk9URTogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIG1hdGNoaW5nCi0JICogInBpbnMiIHRvIHdoYXRldmVyIHdpbGwgYmUgdXNpbmcgZWFjaCBwYXJ0aWN1bGFyIGNvbnRyb2xsZXIuCi0JICovCi0Jc3dpdGNoIChpZCkgewotCWNhc2UgQVQ5MVJNOTIwMF9JRF9TU0MwOgotCQlwZGV2ID0gJmF0OTFybTkyMDBfc3NjMF9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MwX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWNhc2UgQVQ5MVJNOTIwMF9JRF9TU0MxOgotCQlwZGV2ID0gJmF0OTFybTkyMDBfc3NjMV9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MxX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWNhc2UgQVQ5MVJNOTIwMF9JRF9TU0MyOgotCQlwZGV2ID0gJmF0OTFybTkyMDBfc3NjMl9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MyX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVQVJUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYmd1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX0RCR1UsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfREJHVSArIFNaXzUxMiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIGRiZ3VfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDAsCi0JLnVzZV9kbWFfcngJPSAwLAkJLyogREJHVSBub3QgY2FwYWJsZSBvZiByZWNlaXZlIERNQSAqLwotfTsKLQotc3RhdGljIHU2NCBkYmd1X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX2RiZ3VfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZkYmd1X2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZGJndV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gZGJndV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiZ3VfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfZGJndV9waW5zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzMCwgMCk7CQkvKiBEUlhEICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzMSwgMSk7CQkvKiBEVFhEICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfVVMwLAotCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1VTMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVVMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxUk05MjAwX0lEX1VTMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQwX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb2RfbG9va3VwX3RhYmxlIHVhcnQwX2dwaW9zX3RhYmxlID0gewotCS5kZXZfaWQgPSAiYXRtZWxfdXNhcnQiLAotCS50YWJsZSA9IHsKLQkJR1BJT19MT09LVVAoInBpb0EiLCAyMSwgInJ0cyIsIEdQSU9fQUNUSVZFX0xPVyksCi0JCXsgfSwKLQl9LAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF91YXJ0MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQwX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAxKTsJCS8qIFRYRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJCS8qIFJYRDAgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjAsIDApOwkvKiBDVFMwICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKSB7Ci0JCS8qCi0JCSAqIEFUOTFSTTkyMDAgRXJyYXRhICMzOSAtIFJUUzAgaXMgbm90IGludGVybmFsbHkgY29ubmVjdGVkIHRvIFBBMjEuCi0JCSAqIFdlIG5lZWQgdG8gZHJpdmUgdGhlIHBpbiBtYW51YWxseS4gVGhlIHNlcmlhbCBkcml2ZXIgd2lsbCBkcml2ZXIKLQkJICogdGhpcyB0byBoaWdoIHdoZW4gaW5pdGlhbGl6aW5nLgotCQkgKi8KLQkJZ3Bpb2RfYWRkX2xvb2t1cF90YWJsZSgmdWFydDBfZ3Bpb3NfdGFibGUpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9VUzEsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVVMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF91YXJ0MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMiwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQxX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIwLCAxKTsJCS8qIFRYRDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIxLCAwKTsJCS8qIFJYRDEgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SSSkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxOCwgMCk7CS8qIFJJMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9EVFIpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTksIDApOwkvKiBEVFIxICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RDRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMywgMCk7CS8qIERDRDEgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI0LCAwKTsJLyogQ1RTMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9EU1IpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjUsIDApOwkvKiBEU1IxICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNiwgMCk7CS8qIFJUUzEgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9VUzIsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVVMyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDJfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0Ml9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF91YXJ0Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMywKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAwKTsJCS8qIFJYRDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAxKTsJCS8qIFRYRDIgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMzAsIDApOwkvKiBDVFMyICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEzMSwgMCk7CS8qIFJUUzIgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9VUzMsCi0JCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVVMzICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVJNOTIwMF9JRF9VUzMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFSTTkyMDBfSURfVVMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDNfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0M19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXJtOTIwMF91YXJ0M19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gNCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQzX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQzX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQzX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTUsIDEpOwkJLyogVFhEMyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNiwgMCk7CQkvKiBSWEQzICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOwkvKiBDVFMzICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIwLCAwKTsJLyogUlRTMyAqLwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwotCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgKnBkYXRhOwotCi0Jc3dpdGNoIChpZCkgewotCQljYXNlIDA6CQkvKiBEQkdVICovCi0JCQlwZGV2ID0gJmF0OTFybTkyMDBfZGJndV9kZXZpY2U7Ci0JCQljb25maWd1cmVfZGJndV9waW5zKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxUk05MjAwX0lEX1VTMDoKLQkJCXBkZXYgPSAmYXQ5MXJtOTIwMF91YXJ0MF9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxUk05MjAwX0lEX1VTMToKLQkJCXBkZXYgPSAmYXQ5MXJtOTIwMF91YXJ0MV9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQxX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxUk05MjAwX0lEX1VTMjoKLQkJCXBkZXYgPSAmYXQ5MXJtOTIwMF91YXJ0Ml9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQyX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxUk05MjAwX0lEX1VTMzoKLQkJCXBkZXYgPSAmYXQ5MXJtOTIwMF91YXJ0M19kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQzX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQl9Ci0JcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlwZGF0YS0+bnVtID0gcG9ydG5yOwkJLyogdXBkYXRlIHRvIG1hcHBlZCBJRCAqLwotCi0JaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQotCQlhdDkxX3VhcnRzW3BvcnRucl0gPSBwZGV2OwotfQotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUFYX1VBUlQ7IGkrKykgewotCQlpZiAoYXQ5MV91YXJ0c1tpXSkKLQkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpIHt9Ci12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlc2UgZGV2aWNlcyBhcmUgYWx3YXlzIHByZXNlbnQgYW5kIGRvbid0IG5lZWQgYW55IGJvYXJkLXNwZWNpZmljCi0gKiBzZXR1cC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCWF0OTFfYWRkX2RldmljZV9ydGMoKTsKLQlhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2coKTsKLQlhdDkxX2FkZF9kZXZpY2VfdGMoKTsKLQlyZXR1cm4gMDsKLX0KLQotYXJjaF9pbml0Y2FsbChhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYwppbmRleCA3ZmQxM2FlLi41MTc2MWY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jCkBAIC0xODMsNyArMTgzLDYgQEAKIHZvaWQgX19pb21lbSAqYXQ5MV9zdF9iYXNlOwogRVhQT1JUX1NZTUJPTF9HUEwoYXQ5MV9zdF9iYXNlKTsKIAotI2lmZGVmIENPTkZJR19PRgogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgYXQ5MXJtOTIwMF9zdF90aW1lcl9pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtc3QiIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CkBAIC0yMTksMjggKzIxOCw2IEBACiBlcnI6CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci0jZWxzZQotc3RhdGljIGludCBfX2luaXQgb2ZfYXQ5MXJtOTIwMF9zdF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0jZW5kaWYKLQotdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9pb3JlbWFwX3N0KHUzMiBhZGRyKQotewotI2lmZGVmIENPTkZJR19PRgotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBhdDkxcm05MjAwX3N0X3RpbWVyX2lkcyk7Ci0JaWYgKG5wKSB7Ci0JCW9mX25vZGVfcHV0KG5wKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCWF0OTFfc3RfYmFzZSA9IGlvcmVtYXAoYWRkciwgMjU2KTsKLQlpZiAoIWF0OTFfc3RfYmFzZSkKLQkJcGFuaWMoIkltcG9zc2libGUgdG8gaW9yZW1hcCBTVFxuIik7Ci19CiAKIC8qCiAgKiBTVCAoc3lzdGVtIHRpbWVyKSBtb2R1bGUgc3VwcG9ydHMgYm90aCBjbG9ja2V2ZW50cyBhbmQgY2xvY2tzb3VyY2UuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MC5jCmluZGV4IGFhYjFmOTYuLjc4MTM3YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MC5jCkBAIC0xMCwzMDUgKzEwLDEzIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KLQotI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfZGJndS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjAuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgInBtLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19PTERfQ0xLX0FUOTEpCi0jaW5jbHVkZSAiY2xvY2suaCIKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ2xvY2tzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfUElPQSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0JfY2xrID0gewotCS5uYW1lCQk9ICJwaW9CX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9QSU9CLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0NfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1BJT0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBhZGNfY2xrID0gewotCS5uYW1lCQk9ICJhZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX0FEQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWRjX29wX2NsayA9IHsKLQkubmFtZQkJPSAiYWRjX29wX2NsayIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLQkucmF0ZV9oegk9IDUwMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1VTMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVVMxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQyX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VUzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtbWNfY2xrID0gewotCS5uYW1lCQk9ICJtY2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX01DSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVkY19jbGsgPSB7Ci0JLm5hbWUJCT0gInVkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVURQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHdpX2NsayA9IHsKLQkubmFtZQkJPSAidHdpX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9UV0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzcGkwX2NsayA9IHsKLQkubmFtZQkJPSAic3BpMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfU1BJMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaTFfY2xrID0gewotCS5uYW1lCQk9ICJzcGkxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9TUEkxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjX2NsayA9IHsKLQkubmFtZQkJPSAic3NjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9TU0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzBfY2xrID0gewotCS5uYW1lCQk9ICJ0YzBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1RDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVEMxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NsayA9IHsKLQkubmFtZQkJPSAidGMyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9UQzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBvaGNpX2NsayA9IHsKLQkubmFtZQkJPSAib2hjaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVUhQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbWFjYl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBjbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfRU1BQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGlzaV9jbGsgPSB7Ci0JLm5hbWUJCT0gImlzaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfSVNJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQzX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VUzMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDRfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDRfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1VTNCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0NV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0NV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVVM1LAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMzX2NsayA9IHsKLQkubmFtZQkJPSAidGMzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9UQzMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzRfY2xrID0gewotCS5uYW1lCQk9ICJ0YzRfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1RDNCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjNV9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjNV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVEM1LAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FfY2xrLAotCSZwaW9CX2NsaywKLQkmcGlvQ19jbGssCi0JJmFkY19jbGssCi0JJmFkY19vcF9jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJm1tY19jbGssCi0JJnVkY19jbGssCi0JJnR3aV9jbGssCi0JJnNwaTBfY2xrLAotCSZzcGkxX2NsaywKLQkmc3NjX2NsaywKLQkmdGMwX2NsaywKLQkmdGMxX2NsaywKLQkmdGMyX2NsaywKLQkmb2hjaV9jbGssCi0JJm1hY2JfY2xrLAotCSZpc2lfY2xrLAotCSZ1c2FydDNfY2xrLAotCSZ1c2FydDRfY2xrLAotCSZ1c2FydDVfY2xrLAotCSZ0YzNfY2xrLAotCSZ0YzRfY2xrLAotCSZ0YzVfY2xrLAotCS8vIGlycTAgLi4gaXJxMgotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHBlcmlwaF9jbG9ja3NfbG9va3Vwc1tdID0gewotCS8qIE9uZSBhZGRpdGlvbmFsIGZha2UgY2xvY2sgZm9yIG1hY2JfaGNsayAqLwotCUNMS0RFVl9DT05fSUQoImhjbGsiLCAmbWFjYl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImF0bWVsX3NwaS4wIiwgJnNwaTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJhdG1lbF9zcGkuMSIsICZzcGkxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJhdG1lbF90Y2IuMSIsICZ0YzNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImF0bWVsX3RjYi4xIiwgJnRjNF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiYXRtZWxfdGNiLjEiLCAmdGM1X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMCIsICZzc2NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmZiYzAwMC5zc2MiLCAmc3NjX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOTI2MC4wIiwgJnR3aV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJpMmMtYXQ5MXNhbTlnMjAuMCIsICZ0d2lfY2xrKSwKLQkvKiBtb3JlIHVzYXJ0IGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZjIwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmYjAwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZiNDAwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmI4MDAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZDAwMDAuc2VyaWFsIiwgJnVzYXJ0M19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZkNDAwMC5zZXJpYWwiLCAmdXNhcnQ0X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmQ4MDAwLnNlcmlhbCIsICZ1c2FydDVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYWMwMDAuaTJjIiwgJnR3aV9jbGspLAotCS8qIG1vcmUgdGMgbG9va3VwIHRhYmxlIGZvciBEVCBlbnRyaWVzICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJmZmZkYzAwMC50aW1lciIsICZ0YzNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImZmZmRjMDAwLnRpbWVyIiwgJnRjNF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiZmZmZGMwMDAudGltZXIiLCAmdGM1X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiNTAwMDAwLm9oY2kiLCAmb2hjaV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImZmZmE4MDAwLm1tYyIsICZtbWNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmZmZjODAwMC5zcGkiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImZmZmNjMDAwLnNwaSIsICZzcGkxX2NsayksCi0JLyogZmFrZSBoY2xrIGNsb2NrICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MV9vaGNpIiwgJm9oY2lfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9BIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9CIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9DIiwgJnBpb0NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY0MDAuZ3BpbyIsICZwaW9BX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNjAwLmdwaW8iLCAmcGlvQl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjgwMC5ncGlvIiwgJnBpb0NfY2xrKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCB1c2FydF9jbG9ja3NfbG9va3Vwc1tdID0gewotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4wIiwgJm1jayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjEiLCAmdXNhcnQwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjIiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjMiLCAmdXNhcnQyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjQiLCAmdXNhcnQzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjUiLCAmdXNhcnQ0X2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjYiLCAmdXNhcnQ1X2NsayksCi19OwotCi0vKgotICogVGhlIHR3byBwcm9ncmFtbWFibGUgY2xvY2tzLgotICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7Ci0JLm5hbWUJCT0gInBjazAiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7Ci0JLm5hbWUJCT0gInBjazEiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAxLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYwX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrcyk7IGkrKykKLQkJY2xrX3JlZ2lzdGVyKHBlcmlwaF9jbG9ja3NbaV0pOwotCi0JY2xrZGV2X2FkZF90YWJsZShwZXJpcGhfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzX2xvb2t1cHMpKTsKLQljbGtkZXZfYWRkX3RhYmxlKHVzYXJ0X2Nsb2Nrc19sb29rdXBzLAotCQkJIEFSUkFZX1NJWkUodXNhcnRfY2xvY2tzX2xvb2t1cHMpKTsKLQotCWNsa19yZWdpc3RlcigmcGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZwY2sxKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGF0OTFzYW05MjYwX3JlZ2lzdGVyX2Nsb2NrcyBOVUxMCi0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBHUElPCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19iYW5rIGF0OTFzYW05MjYwX2dwaW9bXSBfX2luaXRkYXRhID0gewotCXsKLQkJLmlkCQk9IEFUOTFTQU05MjYwX0lEX1BJT0EsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTkyNjBfQkFTRV9QSU9BLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05MjYwX0lEX1BJT0IsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTkyNjBfQkFTRV9QSU9CLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05MjYwX0lEX1BJT0MsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTkyNjBfQkFTRV9QSU9DLAotCX0KLX07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTkyNjAgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCkBAIC0zNDAsMTE5ICs0OCwxNCBAQAogCQlhdDkxX2luaXRfc3JhbSgwLCBBVDkxU0FNOTI2MF9TUkFNX0JBU0UsIEFUOTFTQU05MjYwX1NSQU1fU0laRSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MF9pb3JlbWFwX3JlZ2lzdGVycyh2b2lkKQotewotCWF0OTFfaW9yZW1hcF9yYW1jKDAsIEFUOTFTQU05MjYwX0JBU0VfU0RSQU1DLCA1MTIpOwotCWF0OTFzYW05MjZ4X2lvcmVtYXBfcGl0KEFUOTFTQU05MjYwX0JBU0VfUElUKTsKLQlhdDkxc2FtOV9pb3JlbWFwX3NtYygwLCBBVDkxU0FNOTI2MF9CQVNFX1NNQyk7Ci0JYXQ5MV9pb3JlbWFwX21hdHJpeChBVDkxU0FNOTI2MF9CQVNFX01BVFJJWCk7Ci0JYXQ5MV9wbV9zZXRfc3RhbmRieShhdDkxc2FtOV9zZHJhbV9zdGFuZGJ5KTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYwX2luaXRpYWxpemUodm9pZCkKIHsKIAlhcm1fcG1faWRsZSA9IGF0OTFzYW05X2lkbGU7CiAKIAlhdDkxX3N5c2lycV9tYXNrX3J0dChBVDkxU0FNOTI2MF9CQVNFX1JUVCk7Ci0KLQkvKiBSZWdpc3RlciBHUElPIHN1YnN5c3RlbSAqLwotCWF0OTFfZ3Bpb19pbml0KGF0OTFzYW05MjYwX2dwaW8sIDMpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJzdGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTkyNjBfQkFTRV9SU1RDLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjBfQkFTRV9SU1RDICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2MF9CQVNFX1NEUkFNQywKLQkJLmVuZCAgICA9IEFUOTFTQU05MjYwX0JBU0VfU0RSQU1DICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByc3RjX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiYXQ5MS1zYW05MjYwLXJlc2V0IiwKLQkucmVzb3VyY2UgICAgICAgPSByc3RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHJzdGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hkd2NfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTkyNjBfQkFTRV9TSERXQywKLQkJLmVuZCAgICA9IEFUOTFTQU05MjYwX0JBU0VfU0hEV0MgKyBTWl8xNiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hkd2NfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXBvd2Vyb2ZmIiwKLQkucmVzb3VyY2UgICAgICAgPSBzaGR3Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzaGR3Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYwX3JlZ2lzdGVyX2RldmljZXModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJzdGNfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNoZHdjX2RldmljZSk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgSW50ZXJydXB0IGluaXRpYWxpemF0aW9uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAoMCA9IGxvd2VzdCwgNyA9IGhpZ2hlc3QpLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0OTFzYW05MjYwX2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0gewotCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCi0JNywJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBDICovCi0JMCwJLyogQW5hbG9nLXRvLURpZ2l0YWwgQ29udmVydGVyICovCi0JNSwJLyogVVNBUlQgMCAqLwotCTUsCS8qIFVTQVJUIDEgKi8KLQk1LAkvKiBVU0FSVCAyICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAqLwotCTIsCS8qIFVTQiBEZXZpY2UgUG9ydCAqLwotCTYsCS8qIFR3by1XaXJlIEludGVyZmFjZSAqLwotCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KLQk1LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAqLwotCTAsCi0JMCwKLQkwLAkvKiBUaW1lciBDb3VudGVyIDAgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDEgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDIgKi8KLQkyLAkvKiBVU0IgSG9zdCBwb3J0ICovCi0JMywJLyogRXRoZXJuZXQgKi8KLQkwLAkvKiBJbWFnZSBTZW5zb3IgSW50ZXJmYWNlICovCi0JNSwJLyogVVNBUlQgMyAqLwotCTUsCS8qIFVTQVJUIDQgKi8KLQk1LAkvKiBVU0FSVCA1ICovCi0JMCwJLyogVGltZXIgQ291bnRlciAzICovCi0JMCwJLyogVGltZXIgQ291bnRlciA0ICovCi0JMCwJLyogVGltZXIgQ291bnRlciA1ICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjBfaW5pdF90aW1lKHZvaWQpCi17Ci0JYXQ5MXNhbTkyNnhfcGl0X2luaXQoTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUyk7CiB9CiAKIEFUOTFfU09DX1NUQVJUKGF0OTFzYW05MjYwKQogCS5tYXBfaW8gPSBhdDkxc2FtOTI2MF9tYXBfaW8sCi0JLmRlZmF1bHRfaXJxX3ByaW9yaXR5ID0gYXQ5MXNhbTkyNjBfZGVmYXVsdF9pcnFfcHJpb3JpdHksCi0JLmV4dGVybl9pcnEgPSAoMSA8PCBBVDkxU0FNOTI2MF9JRF9JUlEwKSB8ICgxIDw8IEFUOTFTQU05MjYwX0lEX0lSUTEpCi0JCSAgICB8ICgxIDw8IEFUOTFTQU05MjYwX0lEX0lSUTIpLAotCS5pb3JlbWFwX3JlZ2lzdGVycyA9IGF0OTFzYW05MjYwX2lvcmVtYXBfcmVnaXN0ZXJzLAotCS5yZWdpc3Rlcl9jbG9ja3MgPSBhdDkxc2FtOTI2MF9yZWdpc3Rlcl9jbG9ja3MsCi0JLnJlZ2lzdGVyX2RldmljZXMgPSBhdDkxc2FtOTI2MF9yZWdpc3Rlcl9kZXZpY2VzLAogCS5pbml0ID0gYXQ5MXNhbTkyNjBfaW5pdGlhbGl6ZSwKLQkuaW5pdF90aW1lID0gYXQ5MXNhbTkyNjBfaW5pdF90aW1lLAogQVQ5MV9TT0NfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4OGUwZi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM2NCArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0OTFfYWRjLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjAuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYwX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgSG9zdAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKLXN0YXRpYyB1NjQgb2hjaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgdXNiaF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYmhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9VSFBfQkFTRSwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX1VIUF9CQVNFICsgU1pfMU0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VSFAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VIUCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfdXNiaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfb2hjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmb2hjaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYmhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVzYmhfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JoX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCS8qIEVuYWJsZSBvdmVyY3VycmVudCBub3RpZmljYXRpb24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydHM7IGkrKykgewotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5vdmVyY3VycmVudF9waW5baV0pKQotCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5vdmVyY3VycmVudF9waW5baV0sIDEpOwotCX0KLQotCXVzYmhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgRGV2aWNlIChHYWRnZXQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9BVDkxX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB1ZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1ZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1VEUCwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVURQICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVURQLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VRFAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3VkY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfdWRjIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVkY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWRjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWRjX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+dmJ1c19waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT52YnVzX3BpbiwgMSk7Ci0JfQotCi0JLyogUHVsbHVwIHBpbiBpcyBoYW5kbGVkIGludGVybmFsbHkgYnkgVVNCIGRldmljZSBwZXJpcGhlcmFsICovCi0KLQl1ZGNfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91ZGNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBFdGhlcm5ldAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01BQ0IpIHx8IGRlZmluZWQoQ09ORklHX01BQ0JfTU9EVUxFKQotc3RhdGljIHU2NCBldGhfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBldGhfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldGhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX0VNQUMsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX0VNQUMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9FTUFDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9FTUFDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfZXRoX2RldmljZSA9IHsKLQkubmFtZQkJPSAibWFjYiIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmZXRoX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZXRoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBldGhfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShldGhfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnBoeV9pcnFfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnBoeV9pcnFfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+cGh5X2lycV9waW4sIDEpOwotCX0KLQotCS8qIFBpbnMgdXNlZCBmb3IgTUlJIGFuZCBSTUlJICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExOSwgMCk7CS8qIEVUWENLX0VSRUZDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTcsIDApOwkvKiBFUlhEViAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBFUlgwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMCk7CS8qIEVSWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogRVJYRVIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE2LCAwKTsJLyogRVRYRU4gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAwKTsJLyogRVRYMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDApOwkvKiBFVFgxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMSwgMCk7CS8qIEVNRElPICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMCk7CS8qIEVNREMgKi8KLQotCWlmICghZGF0YS0+aXNfcm1paSkgewotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI4LCAwKTsJLyogRUNSUyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAwKTsJLyogRUNPTCAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI1LCAwKTsJLyogRVJYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI2LCAwKTsJLyogRVJYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsJLyogRVJYQ0sgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CS8qIEVUWDIgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyNCwgMCk7CS8qIEVUWDMgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMiwgMCk7CS8qIEVUWEVSICovCi0JfQotCi0JZXRoX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX2V0aF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTU1DIC8gU0QgU2xvdCBmb3IgQXRtZWwgTUNJIERyaXZlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX01NQ19BVE1FTE1DSSkKLXN0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBtbWNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX01DSSwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfTUNJLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9NQ0ksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF9tbWNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbW1jX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBzbG90X2NvdW50ID0gMDsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUNJX01BWF9OUl9TTE9UUzsgaSsrKSB7Ci0JCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCkgewotCQkJLyogaW5wdXQvaXJxICovCi0JCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4pKSB7Ci0JCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4sIDEpOwotCQkJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnNsb3RbaV0uZGV0ZWN0X3BpbiwgMSk7Ci0JCQl9Ci0JCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90W2ldLndwX3BpbikpCi0JCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90W2ldLndwX3BpbiwgMSk7Ci0KLQkJCXN3aXRjaCAoaSkgewotCQkJY2FzZSAwOgotCQkJCS8qIENNRCAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNywgMSk7Ci0JCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNiwgMSk7Ci0JCQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoID09IDQpIHsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMSk7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDEpOwotCQkJCX0KLQkJCQlzbG90X2NvdW50Kys7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJLyogQ01EICovCi0JCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExLCAxKTsKLQkJCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAxKTsKLQkJCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgewotCQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTUsIDEpOwotCQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTQsIDEpOwotCQkJCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTMsIDEpOwotCQkJCX0KLQkJCQlzbG90X2NvdW50Kys7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkiQVQ5MTogU0QvTU1DIHNsb3QgJWQgbm90IGF2YWlsYWJsZVxuIiwgaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoc2xvdF9jb3VudCkgewotCQkvKiBDTEsgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAwKTsKLQotCQltbWNfZGF0YSA9ICpkYXRhOwotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX21tY19kZXZpY2UpOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBOQU5EIC8gU21hcnRNZWRpYQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7Ci0KLSNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IE5BTkRfQkFTRSwKLQkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9FQ0MsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX0VDQyArIFNaXzUxMiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX25hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9uYW5kIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbmFuZF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBjc2E7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWNzYSA9IGF0OTFfbWF0cml4X3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKLQlhdDkxX21hdHJpeF93cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSB8IEFUOTFfTUFUUklYX0NTM0FfU01DX1NNQVJUTUVESUEpOwotCi0JLyogZW5hYmxlIHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmVuYWJsZV9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5lbmFibGVfcGluLCAxKTsKLQotCS8qIHJlYWR5L2J1c3kgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmR5X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cmR5X3BpbiwgMSk7Ci0KLQkvKiBjYXJkIGRldGVjdCBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5kZXRfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKLQotCW5hbmRfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfbmFuZF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRXSSAoaTJjKQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFByZWZlciB0aGUgR1BJTyBjb2RlIHNpbmNlIHRoZSBUV0kgY29udHJvbGxlciBpc24ndCByb2J1c3QKLSAqIChnZXRzIG92ZXJydW5zIGFuZCB1bmRlcnJ1bnMgdW5kZXIgbG9hZCkgYW5kIGNhbiBvbmx5IGlzc3VlCi0gKiByZXBlYXRlZCBTVEFSVHMgaW4gb25lIHNjZW5hcmlvICh0aGUgZHJpdmVyIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGVtKS4KLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIHBkYXRhID0gewotCS5zZGFfcGluCQk9IEFUOTFfUElOX1BBMjMsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKLQkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQTI0LAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnVkZWxheQkJCT0gMiwJCS8qIH4xMDAga0h6ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF90d2lfZGV2aWNlID0gewotCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAotCS5pZAkJCT0gMCwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmcGRhdGEsCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMSk7CQkvKiBUV0QgKFNEQSkgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTIzLCAxKTsKLQotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBMjQsIDEpOwkJLyogVFdDSyAoU0NMKSAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjQsIDEpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF90d2lfZGV2aWNlKTsKLX0KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfSTJDX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19BVDkxX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2lfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1RXSSwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVFdJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVFdJLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UV0ksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF90d2lfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHR3aV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHR3aV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCS8qIElQIHZlcnNpb24gaXMgbm90IHRoZSBzYW1lIG9uIDkyNjAgYW5kIGcyMCAqLwotCWlmIChjcHVfaXNfYXQ5MXNhbTlnMjAoKSkgewotCQlhdDkxc2FtOTI2MF90d2lfZGV2aWNlLm5hbWUgPSAiaTJjLWF0OTFzYW05ZzIwIjsKLQl9IGVsc2UgewotCQlhdDkxc2FtOTI2MF90d2lfZGV2aWNlLm5hbWUgPSAiaTJjLWF0OTFzYW05MjYwIjsKLQl9Ci0KLQkvKiBwaW5zIHVzZWQgZm9yIFRXSSBpbnRlcmZhY2UgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAwKTsJCS8qIFRXRCAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjMsIDEpOwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNCwgMCk7CQkvKiBUV0NLICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyNCwgMSk7Ci0KLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3R3aV9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1BJCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfU1BJMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfU1BJMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1NQSTAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1NQSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF9zcGkwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfc3BpIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzcGkwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTBfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BBMywgQVQ5MV9QSU5fUEMxMSwgQVQ5MV9QSU5fUEMxNiwgQVQ5MV9QSU5fUEMxNyB9OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1NQSTEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1NQSTEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9TUEkxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9TUEkxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfc3BpMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaTFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGkxX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQjMsIEFUOTFfUElOX1BDNSwgQVQ5MV9QSU5fUEM0LCBBVDkxX1BJTl9QQzMgfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgY3NfcGluOwotCXNob3J0IGVuYWJsZV9zcGkwID0gMDsKLQlzaG9ydCBlbmFibGVfc3BpMSA9IDA7Ci0KLQkvKiBDaG9vc2UgU1BJIGNoaXAtc2VsZWN0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9kZXZpY2VzOyBpKyspIHsKLQkJaWYgKGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhKQotCQkJY3NfcGluID0gKHVuc2lnbmVkIGxvbmcpIGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhOwotCQllbHNlIGlmIChkZXZpY2VzW2ldLmJ1c19udW0gPT0gMCkKLQkJCWNzX3BpbiA9IHNwaTBfc3RhbmRhcmRfY3NbZGV2aWNlc1tpXS5jaGlwX3NlbGVjdF07Ci0JCWVsc2UKLQkJCWNzX3BpbiA9IHNwaTFfc3RhbmRhcmRfY3NbZGV2aWNlc1tpXS5jaGlwX3NlbGVjdF07Ci0KLQkJaWYgKCFncGlvX2lzX3ZhbGlkKGNzX3BpbikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCi0JCQllbmFibGVfc3BpMCA9IDE7Ci0JCWVsc2UKLQkJCWVuYWJsZV9zcGkxID0gMTsKLQotCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7Ci0KLQkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCi0JCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOwotCX0KLQotCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOwotCi0JLyogQ29uZmlndXJlIFNQSSBidXMoZXMpICovCi0JaWYgKGVuYWJsZV9zcGkwKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMCwgMCk7CS8qIFNQSTBfTUlTTyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDApOwkvKiBTUEkwX01PU0kgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAwKTsJLyogU1BJMV9TUENLICovCi0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF9zcGkwX2RldmljZSk7Ci0JfQotCWlmIChlbmFibGVfc3BpMSkgewotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDApOwkvKiBTUEkxX01JU08gKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxLCAwKTsJLyogU1BJMV9NT1NJICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMiwgMCk7CS8qIFNQSTFfU1BDSyAqLwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfc3BpMV9kZXZpY2UpOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRpbWVyL0NvdW50ZXIgYmxvY2tzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVENCMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVENCMCArIFNaXzI1NiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEMwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEMyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF90Y2IwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdGNiIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSB0Y2IwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2IxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9UQ0IxLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9UQ0IxICsgU1pfMjU2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEMzLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDNCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVEM0LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9UQzUsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1RDNSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3RjYjFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAotCS5pZAkJPSAxLAotCS5yZXNvdXJjZQk9IHRjYjFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2IxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF90Y2IwX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF90Y2IxX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKSB7IH0KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUlRUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0dF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfUlRULAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9SVFQgKyBTWl8xNiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3J0dF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfcnR0IiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSBydHRfcmVzb3VyY2VzLAotfTsKLQotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUlRDX0RSVl9BVDkxU0FNOSkKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCWF0OTFzYW05MjYwX3J0dF9kZXZpY2UubmFtZSA9ICJydGMtYXQ5MXNhbTkiOwotCS8qCi0JICogVGhlIHNlY29uZCByZXNvdXJjZSBpcyBuZWVkZWQ6Ci0JICogR1BCUiB3aWxsIHNlcnZlIGFzIHRoZSBzdG9yYWdlIGZvciBSVEMgdGltZSBvZmZzZXQKLQkgKi8KLQlhdDkxc2FtOTI2MF9ydHRfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAzOwotCXJ0dF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBBVDkxU0FNOTI2MF9CQVNFX0dQQlIgKwotCQkJCSA0ICogQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTlfR1BCUjsKLQlydHRfcmVzb3VyY2VzWzFdLmVuZCA9IHJ0dF9yZXNvdXJjZXNbMV0uc3RhcnQgKyAzOwotCXJ0dF9yZXNvdXJjZXNbMl0uc3RhcnQgPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTOwotCXJ0dF9yZXNvdXJjZXNbMl0uZW5kID0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUzsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGModm9pZCkKLXsKLQkvKiBPbmx5IG9uZSByZXNvdXJjZSBpcyBuZWVkZWQ6IFJUVCBub3QgdXNlZCBhcyBSVEMgKi8KLQlhdDkxc2FtOTI2MF9ydHRfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0KHZvaWQpCi17Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGMoKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3J0dF9kZXZpY2UpOwotfQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgV2F0Y2hkb2cKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPR19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHdkdF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfV0RULAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9XRFQgKyBTWl8xNiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3dkdF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfd2R0IiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF93ZHRfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNTQyAtLSBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQykgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDX01PRFVMRSkKLXN0YXRpYyB1NjQgc3NjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfU1NDLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9TU0MgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9TU0MsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1NTQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3NzY19kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2NfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNzY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzY19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2NfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE3LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19USykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNiwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTgsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JEKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE5LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SSykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjEsIDEpOwotfQotCi0vKgotICogU1NDIGNvbnRyb2xsZXJzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIGxpYnJhcnkgY29kZSwgaW5zdGVhZCBvZiBhbnkKLSAqIGtpbmQgb2YgYWxsLXNpbmdpbmcvYWxsLWRhbmNpbmcgZHJpdmVyLiAgRm9yIGV4YW1wbGUgb25lIGNvdWxkIGJlCi0gKiB1c2VkIGJ5IGEgcGFydGljdWxhciBJMlMgYXVkaW8gY29kZWMncyBkcml2ZXIsIHdoaWxlIGFub3RoZXIgb25lCi0gKiBvbiB0aGUgc2FtZSBzeXN0ZW0gbWlnaHQgYmUgdXNlZCBieSBhIGN1c3RvbSBkYXRhIGNhcHR1cmUgZHJpdmVyLgotICovCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0KLQkvKgotCSAqIE5PVEU6IGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcGFzc2luZyBpbmZvcm1hdGlvbiBtYXRjaGluZwotCSAqICJwaW5zIiB0byB3aGF0ZXZlciB3aWxsIGJlIHVzaW5nIGVhY2ggcGFydGljdWxhciBjb250cm9sbGVyLgotCSAqLwotCXN3aXRjaCAoaWQpIHsKLQljYXNlIEFUOTFTQU05MjYwX0lEX1NTQzoKLQkJcGRldiA9ICZhdDkxc2FtOTI2MF9zc2NfZGV2aWNlOwotCQljb25maWd1cmVfc3NjX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVQVJUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9BVE1FTCkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGJndV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfREJHVSwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfREJHVSArIFNaXzUxMiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIGRiZ3VfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDAsCi0JLnVzZV9kbWFfcngJPSAwLAkJLyogREJHVSBub3QgY2FwYWJsZSBvZiByZWNlaXZlIERNQSAqLwotfTsKLQotc3RhdGljIHU2NCBkYmd1X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF9kYmd1X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmZGJndV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmRiZ3VfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGRiZ3VfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYmd1X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX2RiZ3VfcGlucyh2b2lkKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTQsIDApOwkJLyogRFJYRCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTUsIDEpOwkJLyogRFRYRCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzAsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdWFydDBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MF9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQwX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MF9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAxKTsJCS8qIFRYRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjUsIDApOwkJLyogUlhEMCAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNiwgMCk7CS8qIFJUUzAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI3LCAwKTsJLyogQ1RTMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9EVFIpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjQsIDApOwkvKiBEVFIwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RTUikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMiwgMCk7CS8qIERTUjAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfRENEKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIzLCAwKTsJLyogRENEMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SSSkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNSwgMCk7CS8qIFJJMCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdWFydDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDIsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQxX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI2LCAxKTsJCS8qIFRYRDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjcsIDApOwkJLyogUlhEMSAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyOCwgMCk7CS8qIFJUUzEgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI5LCAwKTsJLyogQ1RTMSAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzIsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMiArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTMiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVMyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDJfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0Ml9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdWFydDJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDMsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0Ml9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQyX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0Ml9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQyX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0Ml9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAxKTsJCS8qIFRYRDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkJLyogUlhEMiAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE0LCAwKTsJLyogUlRTMiAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNSwgMCk7CS8qIENUUzIgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVVMzLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQzX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3VhcnQzX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSA0LAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0M19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0M19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDNfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTAsIDEpOwkJLyogVFhEMyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTEsIDApOwkJLyogUlhEMyAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEM4LCAwKTsJLyogUlRTMyAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTAsIDApOwkvKiBDVFMzICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTNCwKLQkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVVM0ICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfVVM0LAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0NF9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQ0X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF91YXJ0NF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gNSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQ0X2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDRfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQ0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDRfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQ0X3BpbnModm9pZCkKLXsKLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTMxLCAxKTsJCS8qIFRYRDQgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTMwLCAwKTsJCS8qIFJYRDQgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0NV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVVM1LAotCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzUgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MF9JRF9VUzUsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX1VTNSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQ1X2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDVfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3VhcnQ1X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSA2LAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDVfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0NV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDVfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0NV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDVfcGlucyh2b2lkKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTIsIDEpOwkJLyogVFhENSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTMsIDApOwkJLyogUlhENSAqLwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwotCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgKnBkYXRhOwotCi0Jc3dpdGNoIChpZCkgewotCQljYXNlIDA6CQkvKiBEQkdVICovCi0JCQlwZGV2ID0gJmF0OTFzYW05MjYwX2RiZ3VfZGV2aWNlOwotCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjBfSURfVVMwOgotCQkJcGRldiA9ICZhdDkxc2FtOTI2MF91YXJ0MF9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MF9JRF9VUzE6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYwX3VhcnQxX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYwX0lEX1VTMjoKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjBfdWFydDJfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjBfSURfVVMzOgotCQkJcGRldiA9ICZhdDkxc2FtOTI2MF91YXJ0M19kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQzX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MF9JRF9VUzQ6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYwX3VhcnQ0X2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDRfcGlucygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjBfSURfVVM1OgotCQkJcGRldiA9ICZhdDkxc2FtOTI2MF91YXJ0NV9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQ1X3BpbnMoKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuOwotCX0KLQlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXBkYXRhLT5udW0gPSBwb3J0bnI7CQkvKiB1cGRhdGUgdG8gbWFwcGVkIElEICovCi0KLQlpZiAocG9ydG5yIDwgQVRNRUxfTUFYX1VBUlQpCi0JCWF0OTFfdWFydHNbcG9ydG5yXSA9IHBkZXY7Ci19Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBVE1FTF9NQVhfVUFSVDsgaSsrKSB7Ci0JCWlmIChhdDkxX3VhcnRzW2ldKQotCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKGF0OTFfdWFydHNbaV0pOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykge30KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENGL0lERQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfUEFUQV9BVDkxX01PRFVMRSkgfHwgXAotCWRlZmluZWQoQ09ORklHX0FUOTFfQ0YpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFfQ0ZfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBjZjBfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZjBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxX0NISVBTRUxFQ1RfNCwKLQkJLmVuZAk9IEFUOTFfQ0hJUFNFTEVDVF80ICsgU1pfMjU2TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNmMF9kZXZpY2UgPSB7Ci0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmY2YwX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBjZjBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjZjBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIGNmMV9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNmMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF81LAotCQkuZW5kCT0gQVQ5MV9DSElQU0VMRUNUXzUgKyBTWl8yNTZNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2YxX2RldmljZSA9IHsKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZjZjFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGNmMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNmMV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKmRhdGEpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQl1bnNpZ25lZCBsb25nIGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JY3NhID0gYXQ5MV9tYXRyaXhfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOwotCi0Jc3dpdGNoIChkYXRhLT5jaGlwc2VsZWN0KSB7Ci0JY2FzZSA0OgotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQzgsIDApOwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzgsIDApOwotCQljc2EgfD0gQVQ5MV9NQVRSSVhfQ1M0QV9TTUNfQ0YxOwotCQljZjBfZGF0YSA9ICpkYXRhOwotCQlwZGV2ID0gJmNmMF9kZXZpY2U7Ci0JCWJyZWFrOwotCWNhc2UgNToKLQkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEM5LCAwKTsKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM5LCAwKTsKLQkJY3NhIHw9IEFUOTFfTUFUUklYX0NTNUFfU01DX0NGMjsKLQkJY2YxX2RhdGEgPSAqZGF0YTsKLQkJcGRldiA9ICZjZjFfZGV2aWNlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIkFUOTEgQ0Y6IGJhZCBjaGlwLXNlbGVjdCByZXF1ZXN0ZWQgKCV1KVxuIiwKLQkJICAgICAgIGRhdGEtPmNoaXBzZWxlY3QpOwotCQlyZXR1cm47Ci0JfQotCi0JYXQ5MV9tYXRyaXhfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EpOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cnN0X3BpbikpIHsKLQkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoZGF0YS0+cnN0X3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnJzdF9waW4sIDEpOwotCX0KLQotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmlycV9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+aXJxX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPmlycV9waW4sIDEpOwotCX0KLQotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmRldF9waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPmRldF9waW4sIDEpOwotCX0KLQotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDNiwgMCk7ICAgICAvKiBDRkNFMSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDNywgMCk7ICAgICAvKiBDRkNFMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTAsIDApOyAgICAvKiBDRlJOVyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTUsIDEpOyAgICAvKiBOV0FJVCAqLwotCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1BBVEFfQVQ5MSkgJiYgKGRhdGEtPmZsYWdzICYgQVQ5MV9DRl9UUlVFX0lERSkpCi0JCXBkZXYtPm5hbWUgPSAicGF0YV9hdDkxIjsKLQllbHNlCi0JCXBkZXYtPm5hbWUgPSAiYXQ5MV9jZiI7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqIGRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBBRENzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQVQ5MV9BREMpCi1zdGF0aWMgc3RydWN0IGF0OTFfYWRjX2RhdGEgYWRjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWRjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9BREMsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX0FEQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYwX0lEX0FEQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjBfSURfQURDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9hZGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxc2FtOTI2MC1hZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmYWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBhZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfdHJpZ2dlciBhdDkxX2FkY190cmlnZ2Vyc1tdID0gewotCVswXSA9IHsKLQkJLm5hbWUgPSAidGltZXItY291bnRlci0wIiwKLQkJLnZhbHVlID0gMHgxLAotCX0sCi0JWzFdID0gewotCQkubmFtZSA9ICJ0aW1lci1jb3VudGVyLTEiLAotCQkudmFsdWUgPSAweDMsCi0JfSwKLQlbMl0gPSB7Ci0JCS5uYW1lID0gInRpbWVyLWNvdW50ZXItMiIsCi0JCS52YWx1ZSA9IDB4NSwKLQl9LAotCVszXSA9IHsKLQkJLm5hbWUgPSAiZXh0ZXJuYWwiLAotCQkudmFsdWUgPSAweGQsCi0JCS5pc19leHRlcm5hbCA9IHRydWUsCi0JfSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZGMoc3RydWN0IGF0OTFfYWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAodGVzdF9iaXQoMCwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzAsIDApOwotCWlmICh0ZXN0X2JpdCgxLCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMSwgMCk7Ci0JaWYgKHRlc3RfYml0KDIsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyLCAwKTsKLQlpZiAodGVzdF9iaXQoMywgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMsIDApOwotCi0JaWYgKGRhdGEtPnVzZV9leHRlcm5hbF90cmlnZ2VycykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMiwgMCk7Ci0KLQlkYXRhLT5zdGFydHVwX3RpbWUgPSAxMDsKLQlkYXRhLT50cmlnZ2VyX251bWJlciA9IDQ7Ci0JZGF0YS0+dHJpZ2dlcl9saXN0ID0gYXQ5MV9hZGNfdHJpZ2dlcnM7Ci0KLQlhZGNfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9hZGNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWRjKHN0cnVjdCBhdDkxX2FkY19kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgotICogVGhlc2UgZGV2aWNlcyBhcmUgYWx3YXlzIHByZXNlbnQgYW5kIGRvbid0IG5lZWQgYW55IGJvYXJkLXNwZWNpZmljCi0gKiBzZXR1cC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQotCQlyZXR1cm4gMDsKLQotCWF0OTFfYWRkX2RldmljZV9ydHQoKTsKLQlhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2coKTsKLQlhdDkxX2FkZF9kZXZpY2VfdGMoKTsKLQlyZXR1cm4gMDsKLX0KLQotYXJjaF9pbml0Y2FsbChhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxLmMKaW5kZXggYThiZDM1OS4uZDI5OTUzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxLmMKQEAgLTEwLDI4MiArMTAsMTIgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay9hdDkxX3BtYy5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KICNpbmNsdWRlIDxtYWNoL2NwdS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgInBtLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19PTERfQ0xLX0FUOTEpCi0jaW5jbHVkZSAiY2xvY2suaCIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9QSU9BLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1BJT0IsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQ19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfUElPQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfVVMwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9VUzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1VTMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfTUNJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKLQkubmFtZQkJPSAidWRjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9VRFAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2lfY2xrID0gewotCS5uYW1lCQk9ICJ0d2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1RXSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2xrID0gewotCS5uYW1lCQk9ICJzcGkwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9TUEkwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1NQSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MwX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfU1NDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzFfY2xrID0gewotCS5uYW1lCQk9ICJzc2MxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9TU0MxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMl9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1NTQzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzBfY2xrID0gewotCS5uYW1lCQk9ICJ0YzBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1RDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfVEMxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NsayA9IHsKLQkubmFtZQkJPSAidGMyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9UQzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBvaGNpX2NsayA9IHsKLQkubmFtZQkJPSAib2hjaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfVUhQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbGNkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImxjZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX0xDREMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0KLS8qIEhDbG9ja3MgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGhjazAgPSB7Ci0JLm5hbWUJCT0gImhjazAiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX0hDSzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfU1lTVEVNLAotCS5pZAkJPSAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGhjazEgPSB7Ci0JLm5hbWUJCT0gImhjazEiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX0hDSzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfU1lTVEVNLAotCS5pZAkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKnBlcmlwaF9jbG9ja3NbXSBfX2luaXRkYXRhID0gewotCSZwaW9BX2NsaywKLQkmcGlvQl9jbGssCi0JJnBpb0NfY2xrLAotCSZ1c2FydDBfY2xrLAotCSZ1c2FydDFfY2xrLAotCSZ1c2FydDJfY2xrLAotCSZtbWNfY2xrLAotCSZ1ZGNfY2xrLAotCSZ0d2lfY2xrLAotCSZzcGkwX2NsaywKLQkmc3BpMV9jbGssCi0JJnNzYzBfY2xrLAotCSZzc2MxX2NsaywKLQkmc3NjMl9jbGssCi0JJnRjMF9jbGssCi0JJnRjMV9jbGssCi0JJnRjMl9jbGssCi0JJm9oY2lfY2xrLAotCSZsY2RjX2NsaywKLQkvLyBpcnEwIC4uIGlycTIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBwZXJpcGhfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxc2FtOTI2MS1sY2RmYi4wIiwgJmhjazEpLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0OTFzYW05ZzEwLWxjZGZiLjAiLCAmaGNrMSksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjAiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImF0bWVsX3NwaS4xIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxcm05MjAwX3NzYy4wIiwgJnNzYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxcm05MjAwX3NzYy4xIiwgJnNzYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdDkxcm05MjAwX3NzYy4yIiwgJnNzYzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmZiYzAwMC5zc2MiLCAmc3NjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmMwMDAwLnNzYyIsICZzc2MxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmYzQwMDAuc3NjIiwgJnNzYzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxX29oY2kiLCAmaGNrMCksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOTI2MS4wIiwgJnR3aV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJpMmMtYXQ5MXNhbTlnMTAuMCIsICZ0d2lfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9BIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9CIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9DIiwgJnBpb0NfY2xrKSwKLQkvKiBtb3JlIGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmZjIwMC5zZXJpYWwiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmYjAwMDAuc2VyaWFsIiwgJnVzYXJ0MF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmYjQwMC5zZXJpYWwiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZjk0MDAwLnNlcmlhbCIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICI1MDAwMDAub2hjaSIsICZoY2swKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICI2MDAwMDAuZmIiLCAmaGNrMSksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZmZmYzgwMDAuc3BpIiwgJnNwaTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmZmZjYzAwMC5zcGkiLCAmc3BpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImZmZmE4MDAwLm1tYyIsICZtbWNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYWMwMDAuaTJjIiwgJnR3aV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjQwMC5ncGlvIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY2MDAuZ3BpbyIsICZwaW9CX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmODAwLmdwaW8iLCAmcGlvQ19jbGspLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHVzYXJ0X2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjAiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMSIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMiIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMyIsICZ1c2FydDJfY2xrKSwKLX07Ci0KLS8qCi0gKiBUaGUgZm91ciBwcm9ncmFtbWFibGUgY2xvY2tzLgotICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7Ci0JLm5hbWUJCT0gInBjazAiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7Ci0JLm5hbWUJCT0gInBjazEiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAxLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazIgPSB7Ci0JLm5hbWUJCT0gInBjazIiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAyLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazMgPSB7Ci0JLm5hbWUJCT0gInBjazMiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAzLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYxX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrcyk7IGkrKykKLQkJY2xrX3JlZ2lzdGVyKHBlcmlwaF9jbG9ja3NbaV0pOwotCi0JY2xrZGV2X2FkZF90YWJsZShwZXJpcGhfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzX2xvb2t1cHMpKTsKLQljbGtkZXZfYWRkX3RhYmxlKHVzYXJ0X2Nsb2Nrc19sb29rdXBzLAotCQkJIEFSUkFZX1NJWkUodXNhcnRfY2xvY2tzX2xvb2t1cHMpKTsKLQotCWNsa19yZWdpc3RlcigmcGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZwY2sxKTsKLQljbGtfcmVnaXN0ZXIoJnBjazIpOwotCWNsa19yZWdpc3RlcigmcGNrMyk7Ci0KLQljbGtfcmVnaXN0ZXIoJmhjazApOwotCWNsa19yZWdpc3RlcigmaGNrMSk7Ci19Ci0jZWxzZQotI2RlZmluZSBhdDkxc2FtOTI2MV9yZWdpc3Rlcl9jbG9ja3MgTlVMTAotI2VuZGlmCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEdQSU8KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXNhbTkyNjFfZ3Bpb1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkuaWQJCT0gQVQ5MVNBTTkyNjFfSURfUElPQSwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2MV9CQVNFX1BJT0EsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTkyNjFfSURfUElPQiwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2MV9CQVNFX1BJT0IsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTkyNjFfSURfUElPQywKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2MV9CQVNFX1BJT0MsCi0JfQotfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBBVDkxU0FNOTI2MSBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KQEAgLTI5OSwxMTkgKzI5LDE0IEBACiAJCWF0OTFfaW5pdF9zcmFtKDAsIEFUOTFTQU05MjYxX1NSQU1fQkFTRSwgQVQ5MVNBTTkyNjFfU1JBTV9TSVpFKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYxX2lvcmVtYXBfcmVnaXN0ZXJzKHZvaWQpCi17Ci0JYXQ5MV9pb3JlbWFwX3JhbWMoMCwgQVQ5MVNBTTkyNjFfQkFTRV9TRFJBTUMsIDUxMik7Ci0JYXQ5MXNhbTkyNnhfaW9yZW1hcF9waXQoQVQ5MVNBTTkyNjFfQkFTRV9QSVQpOwotCWF0OTFzYW05X2lvcmVtYXBfc21jKDAsIEFUOTFTQU05MjYxX0JBU0VfU01DKTsKLQlhdDkxX2lvcmVtYXBfbWF0cml4KEFUOTFTQU05MjYxX0JBU0VfTUFUUklYKTsKLQlhdDkxX3BtX3NldF9zdGFuZGJ5KGF0OTFzYW05X3NkcmFtX3N0YW5kYnkpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjFfaW5pdGlhbGl6ZSh2b2lkKQogewogCWFybV9wbV9pZGxlID0gYXQ5MXNhbTlfaWRsZTsKIAogCWF0OTFfc3lzaXJxX21hc2tfcnR0KEFUOTFTQU05MjYxX0JBU0VfUlRUKTsKLQotCS8qIFJlZ2lzdGVyIEdQSU8gc3Vic3lzdGVtICovCi0JYXQ5MV9ncGlvX2luaXQoYXQ5MXNhbTkyNjFfZ3BpbywgMyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnN0Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2MV9CQVNFX1JTVEMsCi0JCS5lbmQgICAgPSBBVDkxU0FNOTI2MV9CQVNFX1JTVEMgKyBTWl8xNiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05MjYxX0JBU0VfU0RSQU1DLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjFfQkFTRV9TRFJBTUMgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJzdGNfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXNhbTkyNjAtcmVzZXQiLAotCS5yZXNvdXJjZSAgICAgICA9IHJzdGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUocnN0Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGR3Y19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOTI2MV9CQVNFX1NIRFdDLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjFfQkFTRV9TSERXQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGR3Y19kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImF0OTEtcG93ZXJvZmYiLAotCS5yZXNvdXJjZSAgICAgICA9IHNoZHdjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNoZHdjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjFfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnN0Y19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2hkd2NfZGV2aWNlKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MXNhbTkyNjFfZGVmYXVsdF9pcnFfcHJpb3JpdHlbTlJfQUlDX0lSUVNdIF9faW5pdGRhdGEgPSB7Ci0JNywJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLQk3LAkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KLQkwLAotCTUsCS8qIFVTQVJUIDAgKi8KLQk1LAkvKiBVU0FSVCAxICovCi0JNSwJLyogVVNBUlQgMiAqLwotCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgKi8KLQkyLAkvKiBVU0IgRGV2aWNlIFBvcnQgKi8KLQk2LAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgKi8KLQk1LAkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMCAqLwotCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAxICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMCAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDEgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAyICovCi0JMCwJLyogVGltZXIgQ291bnRlciAwICovCi0JMCwJLyogVGltZXIgQ291bnRlciAxICovCi0JMCwJLyogVGltZXIgQ291bnRlciAyICovCi0JMiwJLyogVVNCIEhvc3QgcG9ydCAqLwotCTMsCS8qIExDRCBDb250cm9sbGVyICovCi0JMCwKLQkwLAotCTAsCi0JMCwKLQkwLAotCTAsCi0JMCwKLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MV9pbml0X3RpbWUodm9pZCkKLXsKLQlhdDkxc2FtOTI2eF9waXRfaW5pdChOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTKTsKIH0KIAogQVQ5MV9TT0NfU1RBUlQoYXQ5MXNhbTkyNjEpCiAJLm1hcF9pbyA9IGF0OTFzYW05MjYxX21hcF9pbywKLQkuZGVmYXVsdF9pcnFfcHJpb3JpdHkgPSBhdDkxc2FtOTI2MV9kZWZhdWx0X2lycV9wcmlvcml0eSwKLQkuZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05MjYxX0lEX0lSUTApIHwgKDEgPDwgQVQ5MVNBTTkyNjFfSURfSVJRMSkKLQkJICAgIHwgKDEgPDwgQVQ5MVNBTTkyNjFfSURfSVJRMiksCi0JLmlvcmVtYXBfcmVnaXN0ZXJzID0gYXQ5MXNhbTkyNjFfaW9yZW1hcF9yZWdpc3RlcnMsCi0JLnJlZ2lzdGVyX2Nsb2NrcyA9IGF0OTFzYW05MjYxX3JlZ2lzdGVyX2Nsb2NrcywKLQkucmVnaXN0ZXJfZGV2aWNlcyA9IGF0OTFzYW05MjYxX3JlZ2lzdGVyX2RldmljZXMsCiAJLmluaXQgPSBhdDkxc2FtOTI2MV9pbml0aWFsaXplLAotCS5pbml0X3RpbWUgPSBhdDkxc2FtOTI2MV9pbml0X3RpbWUsCiBBVDkxX1NPQ19FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWJhYWNiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDk4ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBUaGliYXV0IFZBUkVORSA8dmFyZW5ldEBwYXJpc2MtbGludXgub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjFfbWF0cml4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBIb3N0Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX1VIUF9CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1VIUCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVUhQLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfdXNiaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfb2hjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmb2hjaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYmhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVzYmhfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JoX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCS8qIEVuYWJsZSBvdmVyY3VycmVudCBub3RpZmljYXRpb24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydHM7IGkrKykgewotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5vdmVyY3VycmVudF9waW5baV0pKQotCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5vdmVyY3VycmVudF9waW5baV0sIDEpOwotCX0KLQotCXVzYmhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfdXNiaF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIERldmljZSAoR2FkZ2V0KQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfQVQ5MV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgdWRjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWRjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9VRFAsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1VEUCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1VEUCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVURQLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV91ZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWRjX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKLQl9Ci0KLQkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBieSBVU0IgZGV2aWNlIHBlcmlwaGVyYWwgKi8KLQotCXVkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV91ZGNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTU1DIC8gU0QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19NTUNfQVRNRUxNQ0kpCi1zdGF0aWMgdTY0IG1tY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgbW1jX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9NQ0ksCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX01DSSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX01DSSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfTUNJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfbW1jX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbWNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZtbWNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtbWNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG1tY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmIChkYXRhLT5zbG90WzBdLmJ1c193aWR0aCkgewotCQkvKiBpbnB1dC9pcnEgKi8KLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+c2xvdFswXS5kZXRlY3RfcGluKSkgewotCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90WzBdLmRldGVjdF9waW4sIDEpOwotCQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+c2xvdFswXS5kZXRlY3RfcGluLCAxKTsKLQkJfQotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90WzBdLndwX3BpbikpCi0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbMF0ud3BfcGluLCAxKTsKLQotCQkvKiBDTEsgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAwKTsKLQotCQkvKiBDTUQgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExLCAxKTsKLQotCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMCwgMSk7Ci0JCWlmIChkYXRhLT5zbG90WzBdLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTQsIDEpOwotCQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE1LCAxKTsKLQkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNiwgMSk7Ci0JCX0KLQotCQltbWNfZGF0YSA9ICpkYXRhOwotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYxX21tY19kZXZpY2UpOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBOQU5EIC8gU21hcnRNZWRpYQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7Ci0KLSNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IE5BTkRfQkFTRSwKLQkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdG1lbF9uYW5kX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbmFuZCIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG5hbmRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuYW5kX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgY3NhOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQljc2EgPSBhdDkxX21hdHJpeF9yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7Ci0JYXQ5MV9tYXRyaXhfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBKTsKLQotCS8qIGVuYWJsZSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5lbmFibGVfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7Ci0KLQkvKiByZWFkeS9idXN5IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnJkeV9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOwotCi0JLyogY2FyZCBkZXRlY3QgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZGV0X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzAsIDApOwkJLyogTkFORE9FICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJCS8qIE5BTkRXRSAqLwotCi0JbmFuZF9kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdG1lbF9uYW5kX2RldmljZSk7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUV0kgKGkyYykKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBQcmVmZXIgdGhlIEdQSU8gY29kZSBzaW5jZSB0aGUgVFdJIGNvbnRyb2xsZXIgaXNuJ3Qgcm9idXN0Ci0gKiAoZ2V0cyBvdmVycnVucyBhbmQgdW5kZXJydW5zIHVuZGVyIGxvYWQpIGFuZCBjYW4gb25seSBpc3N1ZQotICogcmVwZWF0ZWQgU1RBUlRzIGluIG9uZSBzY2VuYXJpbyAodGhlIGRyaXZlciBkb2Vzbid0IHlldCBoYW5kbGUgdGhlbSkuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGEgPSB7Ci0JLnNkYV9waW4JCT0gQVQ5MV9QSU5fUEE3LAotCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnNjbF9waW4JCT0gQVQ5MV9QSU5fUEE4LAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnVkZWxheQkJCT0gMiwJCS8qIH4xMDAga0h6ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV90d2lfZGV2aWNlID0gewotCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAotCS5pZAkJCT0gMCwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmcGRhdGEsCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEE3LCAxKTsJCS8qIFRXRCAoU0RBKSAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBNywgMSk7Ci0KLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTgsIDEpOwkJLyogVFdDSyAoU0NMKSAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBOCwgMSk7Ci0KLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYxX3R3aV9kZXZpY2UpOwotfQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0FUOTFfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHR3aV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX0JBU0VfVFdJLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9UV0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9UV0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1RXSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3R3aV9kZXZpY2UgPSB7Ci0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdHdpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JLyogSVAgdmVyc2lvbiBpcyBub3QgdGhlIHNhbWUgb24gOTI2MSBhbmQgZzEwICovCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7Ci0JCWF0OTFzYW05MjYxX3R3aV9kZXZpY2UubmFtZSA9ICJpMmMtYXQ5MXNhbTlnMTAiOwotCQkvKiBJMkMgUElPIG11c3Qgbm90IGJlIGNvbmZpZ3VyZWQgYXMgb3Blbi1kcmFpbiBvbiB0aGlzIGNoaXAgKi8KLQl9IGVsc2UgewotCQlhdDkxc2FtOTI2MV90d2lfZGV2aWNlLm5hbWUgPSAiaTJjLWF0OTFzYW05MjYxIjsKLQkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEE3LCAxKTsKLQkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEE4LCAxKTsKLQl9Ci0KLQkvKiBwaW5zIHVzZWQgZm9yIFRXSSBpbnRlcmZhY2UgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTcsIDApOwkJLyogVFdEICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAwKTsJCS8qIFRXQ0sgKi8KLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfdHdpX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTUEkKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTF9NT0RVTEUpCi1zdGF0aWMgdTY0IHNwaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9TUEkwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9TUEkwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1BJMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1BJMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3NwaTBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaTBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMF9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEEzLCBBVDkxX1BJTl9QQTQsIEFUOTFfUElOX1BBNSwgQVQ5MV9QSU5fUEE2IH07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX0JBU0VfU1BJMSwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX0JBU0VfU1BJMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1NQSTEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1NQSTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV9zcGkxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfc3BpIiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzcGkxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTFfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BCMjgsIEFUOTFfUElOX1BBMjQsIEFUOTFfUElOX1BBMjUsIEFUOTFfUElOX1BBMjYgfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgY3NfcGluOwotCXNob3J0IGVuYWJsZV9zcGkwID0gMDsKLQlzaG9ydCBlbmFibGVfc3BpMSA9IDA7Ci0KLQkvKiBDaG9vc2UgU1BJIGNoaXAtc2VsZWN0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9kZXZpY2VzOyBpKyspIHsKLQkJaWYgKGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhKQotCQkJY3NfcGluID0gKHVuc2lnbmVkIGxvbmcpIGRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhOwotCQllbHNlIGlmIChkZXZpY2VzW2ldLmJ1c19udW0gPT0gMCkKLQkJCWNzX3BpbiA9IHNwaTBfc3RhbmRhcmRfY3NbZGV2aWNlc1tpXS5jaGlwX3NlbGVjdF07Ci0JCWVsc2UKLQkJCWNzX3BpbiA9IHNwaTFfc3RhbmRhcmRfY3NbZGV2aWNlc1tpXS5jaGlwX3NlbGVjdF07Ci0KLQkJaWYgKCFncGlvX2lzX3ZhbGlkKGNzX3BpbikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCi0JCQllbmFibGVfc3BpMCA9IDE7Ci0JCWVsc2UKLQkJCWVuYWJsZV9zcGkxID0gMTsKLQotCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7Ci0KLQkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCi0JCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOwotCX0KLQotCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOwotCi0JLyogQ29uZmlndXJlIFNQSSBidXMoZXMpICovCi0JaWYgKGVuYWJsZV9zcGkwKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMCwgMCk7CS8qIFNQSTBfTUlTTyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDApOwkvKiBTUEkwX01PU0kgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAwKTsJLyogU1BJMF9TUENLICovCi0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV9zcGkwX2RldmljZSk7Ci0JfQotCWlmIChlbmFibGVfc3BpMSkgewotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMwLCAwKTsJLyogU1BJMV9NSVNPICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMzEsIDApOwkvKiBTUEkxX01PU0kgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyOSwgMCk7CS8qIFNQSTFfU1BDSyAqLwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfc3BpMV9kZXZpY2UpOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIExDRCBDb250cm9sbGVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKLXN0YXRpYyB1NjQgbGNkY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgbGNkY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGxjZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9MQ0RDX0JBU0UsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9MQ0RDX0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX0xDREMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX0xDREMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfSU5UU1JBTSkKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX1NSQU1fQkFTRSwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX1NSQU1fQkFTRSArIEFUOTFTQU05MjYxX1NSQU1fU0laRSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfbGNkY19kZXZpY2UgPSB7Ci0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZsY2RjX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbGNkY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbGNkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxjZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpIHsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChjcHVfaXNfYXQ5MXNhbTlnMTAoKSkKLQkJYXQ5MV9sY2RjX2RldmljZS5uYW1lID0gImF0OTFzYW05ZzEwLWxjZGZiIjsKLQllbHNlCi0JCWF0OTFfbGNkY19kZXZpY2UubmFtZSA9ICJhdDkxc2FtOTI2MS1sY2RmYiI7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTF9TVE4pCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIwLCAwKTsgICAgIC8qIExDRFZTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxLCAwKTsgICAgIC8qIExDREhTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyLCAwKTsgICAgIC8qIExDRERPVENLICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIzLCAwKTsgICAgIC8qIExDRERFTiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNCwgMCk7ICAgICAvKiBMQ0RDQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNSwgMCk7ICAgICAvKiBMQ0REMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNiwgMCk7ICAgICAvKiBMQ0REMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMCk7ICAgICAvKiBMQ0REMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOCwgMCk7ICAgICAvKiBMQ0REMyAqLwotI2Vsc2UKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOwkvKiBMQ0RIU1lOQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMiwgMCk7CS8qIExDRERPVENLICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIzLCAwKTsJLyogTENEREVOICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAwKTsJLyogTENEQ0MgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjcsIDApOwkvKiBMQ0REMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOCwgMCk7CS8qIExDREQzICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI5LCAwKTsJLyogTENERDQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEwLCAwKTsJLyogTENERDUgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjExLCAwKTsJLyogTENERDYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEyLCAwKTsJLyogTENERDcgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE1LCAwKTsJLyogTENERDEwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNiwgMCk7CS8qIExDREQxMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTcsIDApOwkvKiBMQ0REMTIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE4LCAwKTsJLyogTENERDEzICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxOSwgMCk7CS8qIExDREQxNCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjAsIDApOwkvKiBMQ0REMTUgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjIzLCAwKTsJLyogTENERDE4ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIyNCwgMCk7CS8qIExDREQxOSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMjUsIDApOwkvKiBMQ0REMjAgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjI2LCAwKTsJLyogTENERDIxICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIyNywgMCk7CS8qIExDREQyMiAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMjgsIDApOwkvKiBMQ0REMjMgKi8KLSNlbmRpZgotCi0JaWYgKEFSUkFZX1NJWkUobGNkY19yZXNvdXJjZXMpID4gMikgewotCQl2b2lkIF9faW9tZW0gKmZiOwotCQlzdHJ1Y3QgcmVzb3VyY2UgKmZiX3JlcyA9ICZsY2RjX3Jlc291cmNlc1syXTsKLQkJc2l6ZV90IGZiX2xlbiA9IHJlc291cmNlX3NpemUoZmJfcmVzKTsKLQotCQlmYiA9IGlvcmVtYXAoZmJfcmVzLT5zdGFydCwgZmJfbGVuKTsKLQkJaWYgKGZiKSB7Ci0JCQltZW1zZXQoZmIsIDAsIGZiX2xlbik7Ci0JCQlpb3VubWFwKGZiKTsKLQkJfQotCX0KLQlsY2RjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFfbGNkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGltZXIvQ291bnRlciBibG9jawotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIENPTkZJR19BVE1FTF9UQ0xJQgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRjYl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX0JBU0VfVENCMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYxX0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1RDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVEMwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9UQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1RDMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVEMyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9UQzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV90Y2JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHRjYl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYl9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfdGNiX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKSB7IH0KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUlRUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0dF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX0JBU0VfUlRULAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9SVFQgKyBTWl8xNiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfcnR0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9ydHQiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHJ0dF9yZXNvdXJjZXMsCi19OwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUlRDX0RSVl9BVDkxU0FNOSkKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCWF0OTFzYW05MjYxX3J0dF9kZXZpY2UubmFtZSA9ICJydGMtYXQ5MXNhbTkiOwotCS8qCi0JICogVGhlIHNlY29uZCByZXNvdXJjZSBpcyBuZWVkZWQ6Ci0JICogR1BCUiB3aWxsIHNlcnZlIGFzIHRoZSBzdG9yYWdlIGZvciBSVEMgdGltZSBvZmZzZXQKLQkgKi8KLQlhdDkxc2FtOTI2MV9ydHRfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAzOwotCXJ0dF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBBVDkxU0FNOTI2MV9CQVNFX0dQQlIgKwotCQkJCSA0ICogQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTlfR1BCUjsKLQlydHRfcmVzb3VyY2VzWzFdLmVuZCA9IHJ0dF9yZXNvdXJjZXNbMV0uc3RhcnQgKyAzOwotCXJ0dF9yZXNvdXJjZXNbMl0uc3RhcnQgPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTOwotCXJ0dF9yZXNvdXJjZXNbMl0uZW5kID0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUzsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGModm9pZCkKLXsKLQkvKiBPbmx5IG9uZSByZXNvdXJjZSBpcyBuZWVkZWQ6IFJUVCBub3QgdXNlZCBhcyBSVEMgKi8KLQlhdDkxc2FtOTI2MV9ydHRfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0KHZvaWQpCi17Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGMoKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYxX3J0dF9kZXZpY2UpOwotfQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgV2F0Y2hkb2cKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPR19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHdkdF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX0JBU0VfV0RULAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9XRFQgKyBTWl8xNiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3dkdF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfd2R0IiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV93ZHRfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNTQyAtLSBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQykgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDX01PRFVMRSkKLXN0YXRpYyB1NjQgc3NjMF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9TU0MwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9TU0MwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1NDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1NDMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3NzYzBfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFybTkyMDBfc3NjIiwKLQkuaWQJPSAwLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMF9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMF9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjEsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIyLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMywgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjQsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI1LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNiwgMSk7Ci19Ci0KLXN0YXRpYyB1NjQgc3NjMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9TU0MxLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9TU0MxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1NDMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1NDMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3NzYzFfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFybTkyMDBfc3NjIiwKLQkuaWQJPSAxLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTcsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExOSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjAsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMiwgMSk7Ci19Ci0KLXN0YXRpYyB1NjQgc3NjMl9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MyX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9TU0MyLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9TU0MyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1NDMiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfU1NDMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3NzYzJfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFybTkyMDBfc3NjIiwKLQkuaWQJPSAyLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMl9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMl9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjUsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI2LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNywgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjgsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI5LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMzMCwgMSk7Ci19Ci0KLS8qCi0gKiBTU0MgY29udHJvbGxlcnMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggbGlicmFyeSBjb2RlLCBpbnN0ZWFkIG9mIGFueQotICoga2luZCBvZiBhbGwtc2luZ2luZy9hbGwtZGFuY2luZyBkcml2ZXIuICBGb3IgZXhhbXBsZSBvbmUgY291bGQgYmUKLSAqIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIEkyUyBhdWRpbyBjb2RlYydzIGRyaXZlciwgd2hpbGUgYW5vdGhlciBvbmUKLSAqIG9uIHRoZSBzYW1lIHN5c3RlbSBtaWdodCBiZSB1c2VkIGJ5IGEgY3VzdG9tIGRhdGEgY2FwdHVyZSBkcml2ZXIuCi0gKi8KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCS8qCi0JICogTk9URTogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIG1hdGNoaW5nCi0JICogInBpbnMiIHRvIHdoYXRldmVyIHdpbGwgYmUgdXNpbmcgZWFjaCBwYXJ0aWN1bGFyIGNvbnRyb2xsZXIuCi0JICovCi0Jc3dpdGNoIChpZCkgewotCWNhc2UgQVQ5MVNBTTkyNjFfSURfU1NDMDoKLQkJcGRldiA9ICZhdDkxc2FtOTI2MV9zc2MwX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzBfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVDkxU0FNOTI2MV9JRF9TU0MxOgotCQlwZGV2ID0gJmF0OTFzYW05MjYxX3NzYzFfZGV2aWNlOwotCQljb25maWd1cmVfc3NjMV9waW5zKHBpbnMpOwotCQlicmVhazsKLQljYXNlIEFUOTFTQU05MjYxX0lEX1NTQzI6Ci0JCXBkZXYgPSAmYXQ5MXNhbTkyNjFfc3NjMl9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MyX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVQVJUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYmd1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9EQkdVLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9EQkdVICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMCwKLQkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCi19OwotCi1zdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX2RiZ3VfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZkYmd1X2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZGJndV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gZGJndV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiZ3VfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfZGJndV9waW5zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAwKTsJCS8qIERSWEQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAxKTsJCS8qIERUWEQgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX0JBU0VfVVMwLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9VUzAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9VUzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1VTMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQwX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3VhcnQwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDBfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDBfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOCwgMSk7CQkvKiBUWEQwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM5LCAwKTsJCS8qIFJYRDAgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTAsIDApOwkvKiBSVFMwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMSwgMCk7CS8qIENUUzAgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYxX0JBU0VfVVMxLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjFfQkFTRV9VUzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2MV9JRF9VUzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1VTMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQxX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX3VhcnQxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAyLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDFfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTIsIDEpOwkJLyogVFhEMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTMsIDApOwkJLyogUlhEMSAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7CS8qIFJUUzEgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAwKTsJLyogQ1RTMSAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfQkFTRV9VUzIsCi0JCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1VTMiArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX1VTMiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjFfSURfVVMyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDJfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0Ml9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfdWFydDJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDMsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0Ml9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQyX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0Ml9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQyX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0Ml9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNSwgMCk7CQkvKiBSWEQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNCwgMSk7CQkvKiBUWEQyICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE1LCAwKTsJLyogUlRTMiovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExNiwgMCk7CS8qIENUUzIgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdGRhdGEgYXQ5MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8KLQotdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhICpwZGF0YTsKLQotCXN3aXRjaCAoaWQpIHsKLQkJY2FzZSAwOgkJLyogREJHVSAqLwotCQkJcGRldiA9ICZhdDkxc2FtOTI2MV9kYmd1X2RldmljZTsKLQkJCWNvbmZpZ3VyZV9kYmd1X3BpbnMoKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYxX0lEX1VTMDoKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjFfdWFydDBfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0MF9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjFfSURfVVMxOgotCQkJcGRldiA9ICZhdDkxc2FtOTI2MV91YXJ0MV9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQxX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2MV9JRF9VUzI6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYxX3VhcnQyX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDJfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuOwotCX0KLQlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXBkYXRhLT5udW0gPSBwb3J0bnI7CQkvKiB1cGRhdGUgdG8gbWFwcGVkIElEICovCi0KLQlpZiAocG9ydG5yIDwgQVRNRUxfTUFYX1VBUlQpCi0JCWF0OTFfdWFydHNbcG9ydG5yXSA9IHBkZXY7Ci19Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBVE1FTF9NQVhfVUFSVDsgaSsrKSB7Ci0JCWlmIChhdDkxX3VhcnRzW2ldKQotCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKGF0OTFfdWFydHNbaV0pOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykge30KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGVzZSBkZXZpY2VzIGFyZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKLSAqIHNldHVwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCi17Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwotCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwotCWF0OTFfYWRkX2RldmljZV90YygpOwotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjMuYwppbmRleCBmYmZmMjI4Li5lN2FkMTQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjMuYwpAQCAtMTAsMzA0ICsxMCwxMSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrL2F0OTFfcG1jLmg+Ci0KLSNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgInBtLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19PTERfQ0xLX0FUOTEpCi0jaW5jbHVkZSAiY2xvY2suaCIKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ2xvY2tzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfUElPQSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0JfY2xrID0gewotCS5uYW1lCQk9ICJwaW9CX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9QSU9CLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQ0RFX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQ0RFX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9QSU9DREUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1VTMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfVVMxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQyX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9VUzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtbWMwX2NsayA9IHsKLQkubmFtZQkJPSAibWNpMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfTUNJMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2xrID0gewotCS5uYW1lCQk9ICJtY2kxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9NQ0kxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgY2FuX2NsayA9IHsKLQkubmFtZQkJPSAiY2FuX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9DQU4sCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2lfY2xrID0gewotCS5uYW1lCQk9ICJ0d2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1RXSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2xrID0gewotCS5uYW1lCQk9ICJzcGkwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9TUEkwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1NQSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MwX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfU1NDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzFfY2xrID0gewotCS5uYW1lCQk9ICJzc2MxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9TU0MxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgYWM5N19jbGsgPSB7Ci0JLm5hbWUJCT0gImFjOTdfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX0FDOTdDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGNiX2NsayA9IHsKLQkubmFtZQkJPSAidGNiX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9UQ0IsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwd21fY2xrID0gewotCS5uYW1lCQk9ICJwd21fY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1BXTUMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtYWNiX2NsayA9IHsKLQkubmFtZQkJPSAicGNsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9FTUFDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NsayA9IHsKLQkubmFtZQkJPSAiZG1hX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9ETUEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d29kZ2VfY2xrID0gewotCS5uYW1lCQk9ICIyZGdlX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF8yREdFLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKLQkubmFtZQkJPSAidWRjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9VRFAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBpc2lfY2xrID0gewotCS5uYW1lCQk9ICJpc2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX0lTSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGxjZGNfY2xrID0gewotCS5uYW1lCQk9ICJsY2RjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9MQ0RDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgb2hjaV9jbGsgPSB7Ci0JLm5hbWUJCT0gIm9oY2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1VIUCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKnBlcmlwaF9jbG9ja3NbXSBfX2luaXRkYXRhID0gewotCSZwaW9BX2NsaywKLQkmcGlvQl9jbGssCi0JJnBpb0NERV9jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJm1tYzBfY2xrLAotCSZtbWMxX2NsaywKLQkmY2FuX2NsaywKLQkmdHdpX2NsaywKLQkmc3BpMF9jbGssCi0JJnNwaTFfY2xrLAotCSZzc2MwX2NsaywKLQkmc3NjMV9jbGssCi0JJmFjOTdfY2xrLAotCSZ0Y2JfY2xrLAotCSZwd21fY2xrLAotCSZtYWNiX2NsaywKLQkmdHdvZGdlX2NsaywKLQkmdWRjX2NsaywKLQkmaXNpX2NsaywKLQkmbGNkY19jbGssCi0JJmRtYV9jbGssCi0JJm9oY2lfY2xrLAotCS8vIGlycTAgLi4gaXJxMQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHBlcmlwaF9jbG9ja3NfbG9va3Vwc1tdID0gewotCS8qIE9uZSBhZGRpdGlvbmFsIGZha2UgY2xvY2sgZm9yIG1hY2JfaGNsayAqLwotCUNMS0RFVl9DT05fSUQoImhjbGsiLCAmbWFjYl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjAiLCAmc3NjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFybTkyMDBfc3NjLjEiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZjk4MDAwLnNzYyIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmOWMwMDAuc3NjIiwgJnNzYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICJhdDkxc2FtOTI2My1sY2RmYi4wIiwgJmxjZGNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJhdG1lbF9tY2kuMCIsICZtbWMwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiYXRtZWxfbWNpLjEiLCAmbW1jMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImF0bWVsX3NwaS4wIiwgJnNwaTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJhdG1lbF9zcGkuMSIsICZzcGkxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0Y2JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiaTJjLWF0OTFzYW05MjYwLjAiLCAmdHdpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImF0OTFzYW05cmwtcHdtIiwgJnB3bV9jbGspLAotCS8qIGZha2UgaGNsayBjbG9jayAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0OTFfb2hjaSIsICZvaGNpX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQSIsICZwaW9BX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQiIsICZwaW9CX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQyIsICZwaW9DREVfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwaW9EIiwgJnBpb0NERV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0UiLCAmcGlvQ0RFX2NsayksCi0JLyogbW9yZSB1c2FydCBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZmVlMDAuc2VyaWFsIiwgJm1jayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZjhjMDAwLnNlcmlhbCIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmOTAwMDAuc2VyaWFsIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmY5NDAwMC5zZXJpYWwiLCAmdXNhcnQyX2NsayksCi0JLyogbW9yZSB0YyBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZjdjMDAwLnRpbWVyIiwgJnRjYl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImEwMDAwMC5vaGNpIiwgJm9oY2lfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmZmZhNDAwMC5zcGkiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImZmZmE4MDAwLnNwaSIsICZzcGkxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZmZmODAwMDAubW1jIiwgJm1tYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmZmY4NDAwMC5tbWMiLCAmbW1jMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmY4ODAwMC5pMmMiLCAmdHdpX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmMjAwLmdwaW8iLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjQwMC5ncGlvIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY2MDAuZ3BpbyIsICZwaW9DREVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9DREVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmZhMDAuZ3BpbyIsICZwaW9DREVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmYjgwMDAucHdtIiwgJnB3bV9jbGspLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHVzYXJ0X2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjAiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMSIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMiIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMyIsICZ1c2FydDJfY2xrKSwKLX07Ci0KLS8qCi0gKiBUaGUgZm91ciBwcm9ncmFtbWFibGUgY2xvY2tzLgotICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7Ci0JLm5hbWUJCT0gInBjazAiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7Ci0JLm5hbWUJCT0gInBjazEiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAxLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazIgPSB7Ci0JLm5hbWUJCT0gInBjazIiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAyLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazMgPSB7Ci0JLm5hbWUJCT0gInBjazMiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAzLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYzX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrcyk7IGkrKykKLQkJY2xrX3JlZ2lzdGVyKHBlcmlwaF9jbG9ja3NbaV0pOwotCi0JY2xrZGV2X2FkZF90YWJsZShwZXJpcGhfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzX2xvb2t1cHMpKTsKLQljbGtkZXZfYWRkX3RhYmxlKHVzYXJ0X2Nsb2Nrc19sb29rdXBzLAotCQkJIEFSUkFZX1NJWkUodXNhcnRfY2xvY2tzX2xvb2t1cHMpKTsKLQotCWNsa19yZWdpc3RlcigmcGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZwY2sxKTsKLQljbGtfcmVnaXN0ZXIoJnBjazIpOwotCWNsa19yZWdpc3RlcigmcGNrMyk7Ci19Ci0jZWxzZQotI2RlZmluZSBhdDkxc2FtOTI2M19yZWdpc3Rlcl9jbG9ja3MgTlVMTAotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgR1BJTwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fYmFuayBhdDkxc2FtOTI2M19ncGlvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2M19JRF9QSU9BLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYzX0JBU0VfUElPQSwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2M19JRF9QSU9CLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYzX0JBU0VfUElPQiwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOTI2M19JRF9QSU9DREUsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTkyNjNfQkFTRV9QSU9DLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05MjYzX0lEX1BJT0NERSwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOTI2M19CQVNFX1BJT0QsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTkyNjNfSURfUElPQ0RFLAotCQkucmVnYmFzZQk9IEFUOTFTQU05MjYzX0JBU0VfUElPRSwKLQl9Ci19OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIEFUOTFTQU05MjYzIHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgpAQCAtMzE5LDEyMSArMjYsMTUgQEAKIAlhdDkxX2luaXRfc3JhbSgxLCBBVDkxU0FNOTI2M19TUkFNMV9CQVNFLCBBVDkxU0FNOTI2M19TUkFNMV9TSVpFKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYzX2lvcmVtYXBfcmVnaXN0ZXJzKHZvaWQpCi17Ci0JYXQ5MV9pb3JlbWFwX3JhbWMoMCwgQVQ5MVNBTTkyNjNfQkFTRV9TRFJBTUMwLCA1MTIpOwotCWF0OTFfaW9yZW1hcF9yYW1jKDEsIEFUOTFTQU05MjYzX0JBU0VfU0RSQU1DMSwgNTEyKTsKLQlhdDkxc2FtOTI2eF9pb3JlbWFwX3BpdChBVDkxU0FNOTI2M19CQVNFX1BJVCk7Ci0JYXQ5MXNhbTlfaW9yZW1hcF9zbWMoMCwgQVQ5MVNBTTkyNjNfQkFTRV9TTUMwKTsKLQlhdDkxc2FtOV9pb3JlbWFwX3NtYygxLCBBVDkxU0FNOTI2M19CQVNFX1NNQzEpOwotCWF0OTFfaW9yZW1hcF9tYXRyaXgoQVQ5MVNBTTkyNjNfQkFTRV9NQVRSSVgpOwotCWF0OTFfcG1fc2V0X3N0YW5kYnkoYXQ5MXNhbTlfc2RyYW1fc3RhbmRieSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2M19pbml0aWFsaXplKHZvaWQpCiB7CiAJYXJtX3BtX2lkbGUgPSBhdDkxc2FtOV9pZGxlOwogCiAJYXQ5MV9zeXNpcnFfbWFza19ydHQoQVQ5MVNBTTkyNjNfQkFTRV9SVFQwKTsKIAlhdDkxX3N5c2lycV9tYXNrX3J0dChBVDkxU0FNOTI2M19CQVNFX1JUVDEpOwotCi0JLyogUmVnaXN0ZXIgR1BJTyBzdWJzeXN0ZW0gKi8KLQlhdDkxX2dwaW9faW5pdChhdDkxc2FtOTI2M19ncGlvLCA1KTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSByc3RjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05MjYzX0JBU0VfUlNUQywKLQkJLmVuZCAgICA9IEFUOTFTQU05MjYzX0JBU0VfUlNUQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTkyNjNfQkFTRV9TRFJBTUMwLAotCQkuZW5kICAgID0gQVQ5MVNBTTkyNjNfQkFTRV9TRFJBTUMwICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByc3RjX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiYXQ5MS1zYW05MjYwLXJlc2V0IiwKLQkucmVzb3VyY2UgICAgICAgPSByc3RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHJzdGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hkd2NfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTkyNjNfQkFTRV9TSERXQywKLQkJLmVuZCAgICA9IEFUOTFTQU05MjYzX0JBU0VfU0hEV0MgKyBTWl8xNiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hkd2NfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJhdDkxLXBvd2Vyb2ZmIiwKLQkucmVzb3VyY2UgICAgICAgPSBzaGR3Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzaGR3Y19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05MjYzX3JlZ2lzdGVyX2RldmljZXModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJzdGNfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNoZHdjX2RldmljZSk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgSW50ZXJydXB0IGluaXRpYWxpemF0aW9uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAoMCA9IGxvd2VzdCwgNyA9IGhpZ2hlc3QpLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0OTFzYW05MjYzX2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0gewotCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCi0JNywJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCi0JMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBDLCBEIGFuZCBFICovCi0JMCwKLQkwLAotCTUsCS8qIFVTQVJUIDAgKi8KLQk1LAkvKiBVU0FSVCAxICovCi0JNSwJLyogVVNBUlQgMiAqLwotCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgMCAqLwotCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgMSAqLwotCTMsCS8qIENBTiAqLwotCTYsCS8qIFR3by1XaXJlIEludGVyZmFjZSAqLwotCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCi0JNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLwotCTUsCS8qIEFDOTcgQ29udHJvbGxlciAqLwotCTAsCS8qIFRpbWVyIENvdW50ZXIgMCwgMSBhbmQgMiAqLwotCTAsCS8qIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciAqLwotCTMsCS8qIEV0aGVybmV0ICovCi0JMCwKLQkwLAkvKiAyRCBHcmFwaGljIEVuZ2luZSAqLwotCTIsCS8qIFVTQiBEZXZpY2UgUG9ydCAqLwotCTAsCS8qIEltYWdlIFNlbnNvciBJbnRlcmZhY2UgKi8KLQkzLAkvKiBMREMgQ29udHJvbGxlciAqLwotCTAsCS8qIERNQSBDb250cm9sbGVyICovCi0JMCwKLQkyLAkvKiBVU0IgSG9zdCBwb3J0ICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfaW5pdF90aW1lKHZvaWQpCi17Ci0JYXQ5MXNhbTkyNnhfcGl0X2luaXQoTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUyk7CiB9CiAKIEFUOTFfU09DX1NUQVJUKGF0OTFzYW05MjYzKQogCS5tYXBfaW8gPSBhdDkxc2FtOTI2M19tYXBfaW8sCi0JLmRlZmF1bHRfaXJxX3ByaW9yaXR5ID0gYXQ5MXNhbTkyNjNfZGVmYXVsdF9pcnFfcHJpb3JpdHksCi0JLmV4dGVybl9pcnEgPSAoMSA8PCBBVDkxU0FNOTI2M19JRF9JUlEwKSB8ICgxIDw8IEFUOTFTQU05MjYzX0lEX0lSUTEpLAotCS5pb3JlbWFwX3JlZ2lzdGVycyA9IGF0OTFzYW05MjYzX2lvcmVtYXBfcmVnaXN0ZXJzLAotCS5yZWdpc3Rlcl9jbG9ja3MgPSBhdDkxc2FtOTI2M19yZWdpc3Rlcl9jbG9ja3MsCi0JLnJlZ2lzdGVyX2RldmljZXMgPSBhdDkxc2FtOTI2M19yZWdpc3Rlcl9kZXZpY2VzLAogCS5pbml0ID0gYXQ5MXNhbTkyNjNfaW5pdGlhbGl6ZSwKLQkuaW5pdF90aW1lID0gYXQ5MXNhbTkyNjNfaW5pdF90aW1lLAogQVQ5MV9TT0NfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmMGUyZi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUzOCArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgotCi0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYzLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2M19tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFfbWF0cml4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgSG9zdAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKLXN0YXRpYyB1NjQgb2hjaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgdXNiaF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYmhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19VSFBfQkFTRSwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX1VIUF9CQVNFICsgU1pfMU0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VSFAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VIUCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfdXNiaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfb2hjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmb2hjaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYmhfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVzYmhfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JoX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCS8qIEVuYWJsZSBWQnVzIGNvbnRyb2wgZm9yIFVIUCBwb3J0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnZidXNfcGluW2ldKSkKLQkJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnZidXNfcGluW2ldLAotCQkJCQkgICAgIGRhdGEtPnZidXNfcGluX2FjdGl2ZV9sb3dbaV0pOwotCX0KLQotCS8qIEVuYWJsZSBvdmVyY3VycmVudCBub3RpZmljYXRpb24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydHM7IGkrKykgewotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5vdmVyY3VycmVudF9waW5baV0pKQotCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5vdmVyY3VycmVudF9waW5baV0sIDEpOwotCX0KLQotCXVzYmhfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JoX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgRGV2aWNlIChHYWRnZXQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9BVDkxX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB1ZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1ZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1VEUCwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfVURQICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVURQLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VRFAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3VkY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfdWRjIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVkY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWRjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWRjX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+dmJ1c19waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT52YnVzX3BpbiwgMSk7Ci0JfQotCi0JLyogUHVsbHVwIHBpbiBpcyBoYW5kbGVkIGludGVybmFsbHkgYnkgVVNCIGRldmljZSBwZXJpcGhlcmFsICovCi0KLQl1ZGNfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91ZGNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBFdGhlcm5ldAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01BQ0IpIHx8IGRlZmluZWQoQ09ORklHX01BQ0JfTU9EVUxFKQotc3RhdGljIHU2NCBldGhfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBldGhfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldGhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX0VNQUMsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX0VNQUMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9FTUFDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9FTUFDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfZXRoX2RldmljZSA9IHsKLQkubmFtZQkJPSAibWFjYiIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmZXRoX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZXRoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBldGhfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShldGhfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnBoeV9pcnFfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnBoeV9pcnFfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+cGh5X2lycV9waW4sIDEpOwotCX0KLQotCS8qIFBpbnMgdXNlZCBmb3IgTUlJIGFuZCBSTUlJICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyMSwgMCk7CS8qIEVUWENLX0VSRUZDSyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjUsIDApOwkvKiBFUlhEViAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjUsIDApOwkvKiBFUlgwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNiwgMCk7CS8qIEVSWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI3LCAwKTsJLyogRVJYRVIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI4LCAwKTsJLyogRVRYRU4gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIzLCAwKTsJLyogRVRYMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjQsIDApOwkvKiBFVFgxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUzMCwgMCk7CS8qIEVNRElPICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyOSwgMCk7CS8qIEVNREMgKi8KLQotCWlmICghZGF0YS0+aXNfcm1paSkgewotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIyLCAwKTsJLyogRUNSUyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI2LCAwKTsJLyogRUNPTCAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIyLCAwKTsJLyogRVJYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIzLCAwKTsJLyogRVJYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI3LCAwKTsJLyogRVJYQ0sgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyMCwgMCk7CS8qIEVUWDIgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyMSwgMCk7CS8qIEVUWDMgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNCwgMCk7CS8qIEVUWEVSICovCi0JfQotCi0JZXRoX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX2V0aF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTU1DIC8gU0QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19NTUNfQVRNRUxNQ0kpCi1zdGF0aWMgdTY0IG1tY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgbW1jMF9kYXRhLCBtbWMxX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfTUNJMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfTUNJMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX01DSTAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX01DSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19tbWMwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbWNpIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tYzBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG1tYzBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tYzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX01DSTEsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX01DSTEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9NQ0kxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9NQ0kxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfbW1jMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX21jaSIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZtbWNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtbWMxX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBtbWMxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jMV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgc2xvdF9jb3VudCA9IDA7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBBVE1DSV9NQVhfTlJfU0xPVFM7IGkrKykgewotCi0JCWlmICghZGF0YS0+c2xvdFtpXS5idXNfd2lkdGgpCi0JCQljb250aW51ZTsKLQotCQkvKiBpbnB1dC9pcnEgKi8KLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+c2xvdFtpXS5kZXRlY3RfcGluKSkgewotCQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90W2ldLmRldGVjdF9waW4sCi0JCQkJCTEpOwotCQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+c2xvdFtpXS5kZXRlY3RfcGluLAotCQkJCQkxKTsKLQkJfQotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90W2ldLndwX3BpbikpCi0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbaV0ud3BfcGluLCAxKTsKLQotCQlpZiAobW1jX2lkID09IDApIHsJCQkJLyogTUNJMCAqLwotCQkJc3dpdGNoIChpKSB7Ci0JCQljYXNlIDA6CQkJCQkvKiBzbG90IEEgKi8KLQkJCQkvKiBDTUQgKi8KLQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDEpOwotCQkJCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KLQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTAsIDEpOwotCQkJCWlmIChkYXRhLT5zbG90W2ldLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMywgMSk7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNCwgMSk7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNSwgMSk7Ci0JCQkJfQotCQkJCXNsb3RfY291bnQrKzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToJCQkJCS8qIHNsb3QgQiAqLwotCQkJCS8qIENNRCAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDEpOwotCQkJCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KLQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAxKTsKLQkJCQlpZiAoZGF0YS0+c2xvdFtpXS5idXNfd2lkdGggPT0gNCkgewotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExOSwgMSk7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjAsIDEpOwotCQkJCX0KLQkJCQlzbG90X2NvdW50Kys7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiQVQ5MTogU0QvTU1DIHNsb3QgJWQgbm90IGF2YWlsYWJsZVxuIiwgaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoc2xvdF9jb3VudCkgewotCQkJCS8qIENMSyAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTIsIDApOwotCi0JCQkJbW1jMF9kYXRhID0gKmRhdGE7Ci0JCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M19tbWMwX2RldmljZSk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAobW1jX2lkID09IDEpIHsJCQkvKiBNQ0kxICovCi0JCQlzd2l0Y2ggKGkpIHsKLQkJCWNhc2UgMDoJCQkJCS8qIHNsb3QgQSAqLwotCQkJCS8qIENNRCAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNywgMSk7Ci0JCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBOCwgMSk7Ci0JCQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoID09IDQpIHsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAxKTsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMSk7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDEpOwotCQkJCX0KLQkJCQlzbG90X2NvdW50Kys7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6CQkJCQkvKiBzbG90IEIgKi8KLQkJCQkvKiBDTUQgKi8KLQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAxKTsKLQkJCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCi0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMiwgMSk7Ci0JCQkJaWYgKGRhdGEtPnNsb3RbaV0uYnVzX3dpZHRoID09IDQpIHsKLQkJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMSk7Ci0JCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjQsIDEpOwotCQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI1LCAxKTsKLQkJCQl9Ci0JCQkJc2xvdF9jb3VudCsrOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIkFUOTE6IFNEL01NQyBzbG90ICVkIG5vdCBhdmFpbGFibGVcbiIsIGkpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKHNsb3RfY291bnQpIHsKLQkJCQkvKiBDTEsgKi8KLQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTYsIDApOwotCi0JCQkJbW1jMV9kYXRhID0gKmRhdGE7Ci0JCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M19tbWMxX2RldmljZSk7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIENvbXBhY3QgRmxhc2ggKFBDTUNJQSBvciBJREUpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUEFUQV9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19QQVRBX0FUOTFfTU9EVUxFKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfQVQ5MV9DRikgfHwgZGVmaW5lZChDT05GSUdfQVQ5MV9DRl9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIGNmMF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNmMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF80LAotCQkuZW5kCT0gQVQ5MV9DSElQU0VMRUNUXzQgKyBTWl8yNTZNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV84QU5EMTZCSVQsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2YwX2RldmljZSA9IHsKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZjZjBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGNmMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNmMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgY2YxX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2YxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzUsCi0JCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfNSArIFNaXzI1Nk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzhBTkQxNkJJVCwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjZjFfZGV2aWNlID0gewotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJmNmMV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gY2YxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2YxX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGViaTBfY3NhOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCS8qCi0JICogYXNzaWduIENTNCBvciBDUzUgdG8gU01DIHdpdGggQ29tcGFjdCBGbGFzaCBsb2dpYyBzdXBwb3J0LAotCSAqIHdlIGFzc3VtZSBTTUMgdGltaW5ncyBhcmUgY29uZmlndXJlZCBieSBib2FyZCBjb2RlLAotCSAqIGV4Y2VwdCBUcnVlIElERSB3aGVyZSB0aW1pbmdzIGFyZSBjb250cm9sbGVkIGJ5IGRyaXZlcgotCSAqLwotCWViaTBfY3NhID0gYXQ5MV9tYXRyaXhfcmVhZChBVDkxX01BVFJJWF9FQkkwQ1NBKTsKLQlzd2l0Y2ggKGRhdGEtPmNoaXBzZWxlY3QpIHsKLQljYXNlIDQ6Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENiwgMCk7ICAvKiBFQkkwX05DUzQvQ0ZDUzAgKi8KLQkJZWJpMF9jc2EgfD0gQVQ5MV9NQVRSSVhfRUJJMF9DUzRBX1NNQ19DRjE7Ci0JCWNmMF9kYXRhID0gKmRhdGE7Ci0JCXBkZXYgPSAmY2YwX2RldmljZTsKLQkJYnJlYWs7Ci0JY2FzZSA1OgotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDcsIDApOyAgLyogRUJJMF9OQ1M1L0NGQ1MxICovCi0JCWViaTBfY3NhIHw9IEFUOTFfTUFUUklYX0VCSTBfQ1M1QV9TTUNfQ0YyOwotCQljZjFfZGF0YSA9ICpkYXRhOwotCQlwZGV2ID0gJmNmMV9kZXZpY2U7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiQVQ5MSBDRjogYmFkIGNoaXAtc2VsZWN0IHJlcXVlc3RlZCAoJXUpXG4iLAotCQkgICAgICAgZGF0YS0+Y2hpcHNlbGVjdCk7Ci0JCXJldHVybjsKLQl9Ci0JYXQ5MV9tYXRyaXhfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJMENTQSwgZWJpMF9jc2EpOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZGV0X3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+ZGV0X3BpbiwgMSk7Ci0JfQotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+aXJxX3BpbikpIHsKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5pcnFfcGluLCAxKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+aXJxX3BpbiwgMSk7Ci0JfQotCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+dmNjX3BpbikpCi0JCS8qIGluaXRpYWxseSBvZmYgKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+dmNjX3BpbiwgMCk7Ci0KLQkvKiBlbmFibGUgRUJJIGNvbnRyb2xsZWQgcGlucyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENSwgMSk7ICAvKiBOV0FJVCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEOCwgMCk7ICAvKiBDRkNFMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEOSwgMCk7ICAvKiBDRkNFMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTQsIDApOyAvKiBDRk5SVyAqLwotCi0JcGRldi0+bmFtZSA9IChkYXRhLT5mbGFncyAmIEFUOTFfQ0ZfVFJVRV9JREUpID8gInBhdGFfYXQ5MSIgOiAiYXQ5MV9jZiI7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTkFORCAvIFNtYXJ0TWVkaWEKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgbmFuZF9kYXRhOwotCi0jZGVmaW5lIE5BTkRfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBOQU5EX0JBU0UsCi0JCS5lbmQJPSBOQU5EX0JBU0UgKyBTWl8yNTZNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfRUNDMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfRUNDMCArIFNaXzUxMiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX25hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9uYW5kIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbmFuZF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBjc2E7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWNzYSA9IGF0OTFfbWF0cml4X3JlYWQoQVQ5MV9NQVRSSVhfRUJJMENTQSk7Ci0JYXQ5MV9tYXRyaXhfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJMENTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfRUJJMF9DUzNBX1NNQ19TTUFSVE1FRElBKTsKLQotCS8qIGVuYWJsZSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5lbmFibGVfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7Ci0KLQkvKiByZWFkeS9idXN5IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnJkeV9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOwotCi0JLyogY2FyZCBkZXRlY3QgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZGV0X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7Ci0KLQluYW5kX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX25hbmRfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUV0kgKGkyYykKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBQcmVmZXIgdGhlIEdQSU8gY29kZSBzaW5jZSB0aGUgVFdJIGNvbnRyb2xsZXIgaXNuJ3Qgcm9idXN0Ci0gKiAoZ2V0cyBvdmVycnVucyBhbmQgdW5kZXJydW5zIHVuZGVyIGxvYWQpIGFuZCBjYW4gb25seSBpc3N1ZQotICogcmVwZWF0ZWQgU1RBUlRzIGluIG9uZSBzY2VuYXJpbyAodGhlIGRyaXZlciBkb2Vzbid0IHlldCBoYW5kbGUgdGhlbSkuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGEgPSB7Ci0JLnNkYV9waW4JCT0gQVQ5MV9QSU5fUEI0LAotCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnNjbF9waW4JCT0gQVQ5MV9QSU5fUEI1LAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnVkZWxheQkJCT0gMiwJCS8qIH4xMDAga0h6ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M190d2lfZGV2aWNlID0gewotCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAotCS5pZAkJCT0gMCwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmcGRhdGEsCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEI0LCAxKTsJCS8qIFRXRCAoU0RBKSAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCNCwgMSk7Ci0KLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQjUsIDEpOwkJLyogVFdDSyAoU0NMKSAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCNSwgMSk7Ci0KLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3R3aV9kZXZpY2UpOwotfQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0FUOTFfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHR3aV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVFdJLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9UV0kgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9UV0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1RXSSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3R3aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImkyYy1hdDkxc2FtOTI2MCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdHdpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JLyogcGlucyB1c2VkIGZvciBUV0kgaW50ZXJmYWNlICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAwKTsJCS8qIFRXRCAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCNCwgMSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjUsIDApOwkJLyogVFdDSyAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCNSwgMSk7Ci0KLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3R3aV9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1BJCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfU1BJMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfU1BJMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1NQSTAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1NQSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19zcGkwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfc3BpIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzcGkwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTBfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BBNSwgQVQ5MV9QSU5fUEEzLCBBVDkxX1BJTl9QQTQsIEFUOTFfUElOX1BCMTEgfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9TUEkxLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9TUEkxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1BJMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfU1BJMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3NwaTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaTFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMV9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEIxNSwgQVQ5MV9QSU5fUEIxNiwgQVQ5MV9QSU5fUEIxNywgQVQ5MV9QSU5fUEIxOCB9OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBjc19waW47Ci0Jc2hvcnQgZW5hYmxlX3NwaTAgPSAwOwotCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKLQotCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgewotCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCi0JCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7Ci0JCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQotCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQkJZWxzZQotCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQotCQlpZiAoIWdwaW9faXNfdmFsaWQoY3NfcGluKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChkZXZpY2VzW2ldLmJ1c19udW0gPT0gMCkKLQkJCWVuYWJsZV9zcGkwID0gMTsKLQkJZWxzZQotCQkJZW5hYmxlX3NwaTEgPSAxOwotCi0JCS8qIGVuYWJsZSBjaGlwLXNlbGVjdCBwaW4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoY3NfcGluLCAxKTsKLQotCQkvKiBwYXNzIGNoaXAtc2VsZWN0IHBpbiB0byBkcml2ZXIgKi8KLQkJZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBjc19waW47Ci0JfQotCi0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0KLQkvKiBDb25maWd1cmUgU1BJIGJ1cyhlcykgKi8KLQlpZiAoZW5hYmxlX3NwaTApIHsKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAwKTsJLyogU1BJMF9NSVNPICovCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMSwgMCk7CS8qIFNQSTBfTU9TSSAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOwkvKiBTUEkwX1NQQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3NwaTBfZGV2aWNlKTsKLQl9Ci0JaWYgKGVuYWJsZV9zcGkxKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTIsIDApOwkvKiBTUEkxX01JU08gKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMywgMCk7CS8qIFNQSTFfTU9TSSAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE0LCAwKTsJLyogU1BJMV9TUENLICovCi0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M19zcGkxX2RldmljZSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQUM5NwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3QykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDX01PRFVMRSkKLXN0YXRpYyB1NjQgYWM5N19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBhYzk3X2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWM5N19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfQUM5N0MsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX0FDOTdDICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfQUM5N0MsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0FDOTdDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfYWM5N19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX2FjOTdjIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmFjOTdfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhYzk3X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBhYzk3X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYWM5N19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDApOwkvKiBBQzk3RlMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOwkvKiBBQzk3Q0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIsIDApOwkvKiBBQzk3VFggKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMsIDApOwkvKiBBQzk3UlggKi8KLQotCS8qIHJlc2V0ICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmVzZXRfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cmVzZXRfcGluLCAwKTsKLQotCWFjOTdfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfYWM5N19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ0FOIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DQU5fQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfQ0FOX0FUOTFfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjYW5fcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX0NBTiwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfQ0FOICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfQ0FOLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9DQU4sCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19jYW5fZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX2NhbiIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IGNhbl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNhbl9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NhbihzdHJ1Y3QgYXQ5MV9jYW5fZGF0YSAqZGF0YSkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAwKTsJLyogQ0FOVFggKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE0LCAwKTsJLyogQ0FOUlggKi8KLQlhdDkxc2FtOTI2M19jYW5fZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gZGF0YTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfY2FuX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NhbihzdHJ1Y3QgYXQ5MV9jYW5fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIExDRCBDb250cm9sbGVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKLXN0YXRpYyB1NjQgbGNkY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgbGNkY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGxjZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19MQ0RDX0JBU0UsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19MQ0RDX0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0xDREMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0xDREMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX2xjZGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxc2FtOTI2My1sY2RmYiIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZsY2RjX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbGNkY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbGNkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxjZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMSwgMCk7CS8qIExDREhTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyLCAwKTsJLyogTENERE9UQ0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMsIDApOwkvKiBMQ0RERU4gKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkvKiBMQ0RDQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNiwgMCk7CS8qIExDREQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM3LCAwKTsJLyogTENERDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzgsIDApOwkvKiBMQ0RENCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CS8qIExDREQ1ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMCwgMCk7CS8qIExDREQ2ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMSwgMCk7CS8qIExDREQ3ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNCwgMCk7CS8qIExDREQxMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTUsIDApOwkvKiBMQ0REMTEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE2LCAwKTsJLyogTENERDEyICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMiwgMCk7CS8qIExDREQxMyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTgsIDApOwkvKiBMQ0REMTQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE5LCAwKTsJLyogTENERDE1ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyMiwgMCk7CS8qIExDREQxOCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMjMsIDApOwkvKiBMQ0REMTkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzI0LCAwKTsJLyogTENERDIwICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxNywgMCk7CS8qIExDREQyMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMjYsIDApOwkvKiBMQ0REMjIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzI3LCAwKTsJLyogTENERDIzICovCi0KLQlsY2RjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFfbGNkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgSW1hZ2UgU2Vuc29yIEludGVyZmFjZQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0FUOTFfSVNJKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19BVDkxX0lTSV9NT0RVTEUpCi0KLXN0cnVjdCByZXNvdXJjZSBpc2lfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX0lTSSwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfSVNJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfSVNJLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9JU0ksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19pc2lfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX2lzaSIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IGlzaV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlzaV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2lzaShzdHJ1Y3QgaXNpX3BsYXRmb3JtX2RhdGEgKmRhdGEsCi0JCWJvb2wgdXNlX3Bja19hc19tY2spCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUwLCAwKTsJLyogSVNJX0QwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxLCAwKTsJLyogSVNJX0QxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyLCAwKTsJLyogSVNJX0QyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUzLCAwKTsJLyogSVNJX0QzICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU0LCAwKTsJLyogSVNJX0Q0ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU1LCAwKTsJLyogSVNJX0Q1ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU2LCAwKTsJLyogSVNJX0Q2ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU3LCAwKTsJLyogSVNJX0Q3ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU4LCAwKTsJLyogSVNJX1BDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFOSwgMCk7CS8qIElTSV9IU1lOQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTAsIDApOwkvKiBJU0lfVlNZTkMgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRTEyLCAwKTsJLyogSVNJX1BEOCAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BFMTMsIDApOwkvKiBJU0lfUEQ5ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEUxNCwgMCk7CS8qIElTSV9QRDEwICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEUxNSwgMCk7CS8qIElTSV9QRDExICovCi0KLQlpZiAodXNlX3Bja19hc19tY2spIHsKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEUxMSwgMCk7CS8qIElTSV9NQ0sgKFBDSzMpICovCi0KLQkJLyogVE9ETzogcmVnaXN0ZXIgdGhlIFBDSyBmb3IgSVNJX01DSyBhbmQgc2V0IGl0cyBwYXJlbnQgKi8KLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2lzaShzdHJ1Y3QgaXNpX3BsYXRmb3JtX2RhdGEgKmRhdGEsCi0JCWJvb2wgdXNlX3Bja19hc19tY2spIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRpbWVyL0NvdW50ZXIgYmxvY2sKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2JfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1RDQjAsCi0JCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1RDQjAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9UQ0IsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1RDQiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3RjYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdGNiX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiX3Jlc291cmNlcyksCi19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfT0YpCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB0Y2JfaWRzW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLXRjYiIgfSwKLQl7IC8qc2VudGluZWwqLyB9Ci19OwotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19PRikKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgdGNiX2lkcyk7Ci0JaWYgKG5wKSB7Ci0JCW9mX25vZGVfcHV0KG5wKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M190Y2JfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBSVFQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnR0MF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfUlRUMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfUlRUMCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19ydHQwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9ydHQiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHJ0dDBfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydHQxX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9SVFQxLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9SVFQxICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3J0dDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3J0dCIsCi0JLmlkCQk9IDEsCi0JLnJlc291cmNlCT0gcnR0MV9yZXNvdXJjZXMsCi19OwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUlRDX0RSVl9BVDkxU0FNOSkKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IHJlc291cmNlICpyOwotCi0Jc3dpdGNoIChDT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9SVFQpIHsKLQljYXNlIDA6Ci0JCS8qCi0JCSAqIFRoZSBzZWNvbmQgcmVzb3VyY2UgaXMgbmVlZGVkIG9ubHkgZm9yIHRoZSBjaG9zZW4gUlRUOgotCQkgKiBHUEJSIHdpbGwgc2VydmUgYXMgdGhlIHN0b3JhZ2UgZm9yIFJUQyB0aW1lIG9mZnNldAotCQkgKi8KLQkJYXQ5MXNhbTkyNjNfcnR0MF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDM7Ci0JCWF0OTFzYW05MjYzX3J0dDFfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwotCQlwZGV2ID0gJmF0OTFzYW05MjYzX3J0dDBfZGV2aWNlOwotCQlyID0gcnR0MF9yZXNvdXJjZXM7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJYXQ5MXNhbTkyNjNfcnR0MF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci0JCWF0OTFzYW05MjYzX3J0dDFfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAzOwotCQlwZGV2ID0gJmF0OTFzYW05MjYzX3J0dDFfZGV2aWNlOwotCQlyID0gcnR0MV9yZXNvdXJjZXM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByX2VycigiYXQ5MXNhbTkyNjM6IG9ubHkgc3VwcG9ydHMgMiBSVFQgKCVkKVxuIiwKLQkJICAgICAgIENPTkZJR19SVENfRFJWX0FUOTFTQU05X1JUVCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwZGV2LT5uYW1lID0gInJ0Yy1hdDkxc2FtOSI7Ci0JclsxXS5zdGFydCA9IEFUOTFTQU05MjYzX0JBU0VfR1BCUiArIDQgKiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9HUEJSOwotCXJbMV0uZW5kID0gclsxXS5zdGFydCArIDM7Ci0JclsyXS5zdGFydCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci0JclsyXS5lbmQgPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCS8qIE9ubHkgb25lIHJlc291cmNlIGlzIG5lZWRlZDogUlRUIG5vdCB1c2VkIGFzIFJUQyAqLwotCWF0OTFzYW05MjYzX3J0dDBfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwotCWF0OTFzYW05MjYzX3J0dDFfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0KHZvaWQpCi17Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGMoKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3J0dDBfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3J0dDFfZGV2aWNlKTsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFdhdGNoZG9nCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0dfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3ZHRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1dEVCwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfV0RUICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M193ZHRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3dkdCIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHdkdF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHdkdF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV93YXRjaGRvZyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfd2R0X2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV93YXRjaGRvZyh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBQV00KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX1BXTV9BVE1FTCkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHdtX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9QV01DLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9QV01DICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfUFdNQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfUFdNQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3B3bTBfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFzYW05cmwtcHdtIiwKLQkuaWQJPSAtMSwKLQkucmVzb3VyY2UJPSBwd21fcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShwd21fcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9wd20odTMyIG1hc2spCi17Ci0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTApKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjcsIDEpOwkvKiBlbmFibGUgUFdNMCAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTEpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjgsIDEpOwkvKiBlbmFibGUgUFdNMSAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTIpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI5LCAxKTsJLyogZW5hYmxlIFBXTTIgKi8KLQotCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00zKSkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIyOSwgMSk7CS8qIGVuYWJsZSBQV00zICovCi0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3B3bTBfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcHdtKHUzMiBtYXNrKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTU0MgLS0gU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVE1FTF9TU0MpIHx8IGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQ19NT0RVTEUpCi1zdGF0aWMgdTY0IHNzYzBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfU1NDMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfU1NDMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1NTQzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1NTQzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19zc2MwX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxcm05MjAwX3NzYyIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkuZG1hX21hc2sJCT0gJnNzYzBfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNzYzBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzc2MwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3NzYzBfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RGKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjAsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjEsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjIsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JEKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjMsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjQsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JGKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjUsIDEpOwotfQotCi1zdGF0aWMgdTY0IHNzYzFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfU1NDMSwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfU1NDMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1NTQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1NTQzEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19zc2MxX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxcm05MjAwX3NzYyIsCi0JLmlkCT0gMSwKLQkuZGV2CT0gewotCQkuZG1hX21hc2sJCT0gJnNzYzFfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNzYzFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzc2MxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3NzYzFfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RGKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjYsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjcsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjgsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JEKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjksIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMSwgMSk7Ci19Ci0KLS8qCi0gKiBTU0MgY29udHJvbGxlcnMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggbGlicmFyeSBjb2RlLCBpbnN0ZWFkIG9mIGFueQotICoga2luZCBvZiBhbGwtc2luZ2luZy9hbGwtZGFuY2luZyBkcml2ZXIuICBGb3IgZXhhbXBsZSBvbmUgY291bGQgYmUKLSAqIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIEkyUyBhdWRpbyBjb2RlYydzIGRyaXZlciwgd2hpbGUgYW5vdGhlciBvbmUKLSAqIG9uIHRoZSBzYW1lIHN5c3RlbSBtaWdodCBiZSB1c2VkIGJ5IGEgY3VzdG9tIGRhdGEgY2FwdHVyZSBkcml2ZXIuCi0gKi8KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCS8qCi0JICogTk9URTogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIG1hdGNoaW5nCi0JICogInBpbnMiIHRvIHdoYXRldmVyIHdpbGwgYmUgdXNpbmcgZWFjaCBwYXJ0aWN1bGFyIGNvbnRyb2xsZXIuCi0JICovCi0Jc3dpdGNoIChpZCkgewotCWNhc2UgQVQ5MVNBTTkyNjNfSURfU1NDMDoKLQkJcGRldiA9ICZhdDkxc2FtOTI2M19zc2MwX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzBfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVDkxU0FNOTI2M19JRF9TU0MxOgotCQlwZGV2ID0gJmF0OTFzYW05MjYzX3NzYzFfZGV2aWNlOwotCQljb25maWd1cmVfc3NjMV9waW5zKHBpbnMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOwotfQotCi0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVUFSVAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9BVE1FTCkKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYmd1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9EQkdVLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9EQkdVICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMCwKLQkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCi19OwotCi1zdGF0aWMgdTY0IGRiZ3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX2RiZ3VfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZkYmd1X2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZGJndV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gZGJndV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiZ3VfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfZGJndV9waW5zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMzMCwgMCk7CQkvKiBEUlhEICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMzMSwgMSk7CQkvKiBEVFhEICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1VTMCwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfVVMwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVVMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VUzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MF9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M191YXJ0MF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQwX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI2LCAxKTsJCS8qIFRYRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsJCS8qIFJYRDAgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjgsIDApOwkvKiBSVFMwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyOSwgMCk7CS8qIENUUzAgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVVMxLAotCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9VUzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VUzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX1VTMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQxX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3VhcnQxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAyLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDFfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMCwgMSk7CQkvKiBUWEQxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxLCAwKTsJCS8qIFJYRDEgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BENywgMCk7CS8qIFJUUzEgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDgsIDApOwkvKiBDVFMxICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1VTMiwKLQkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTkyNjNfSURfVVMyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOTI2M19JRF9VUzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M191YXJ0Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMywKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDIsIDEpOwkJLyogVFhEMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMywgMCk7CQkvKiBSWEQyICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDUsIDApOwkvKiBSVFMyICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQ2LCAwKTsJLyogQ1RTMiAqLwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwotCi12b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgKnBkYXRhOwotCi0Jc3dpdGNoIChpZCkgewotCQljYXNlIDA6CQkvKiBEQkdVICovCi0JCQlwZGV2ID0gJmF0OTFzYW05MjYzX2RiZ3VfZGV2aWNlOwotCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTkyNjNfSURfVVMwOgotCQkJcGRldiA9ICZhdDkxc2FtOTI2M191YXJ0MF9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOTI2M19JRF9VUzE6Ci0JCQlwZGV2ID0gJmF0OTFzYW05MjYzX3VhcnQxX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05MjYzX0lEX1VTMjoKLQkJCXBkZXYgPSAmYXQ5MXNhbTkyNjNfdWFydDJfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JfQotCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JcGRhdGEtPm51bSA9IHBvcnRucjsJCS8qIHVwZGF0ZSB0byBtYXBwZWQgSUQgKi8KLQotCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKLQkJYXQ5MV91YXJ0c1twb3J0bnJdID0gcGRldjsKLX0KLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKLQkJaWYgKGF0OTFfdWFydHNbaV0pCi0JCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBUaGVzZSBkZXZpY2VzIGFyZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKLSAqIHNldHVwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCi17Ci0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCXJldHVybiAwOwotCi0JYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwotCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwotCWF0OTFfYWRkX2RldmljZV90YygpOwotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDUuYwppbmRleCA0MDU0MjdlLi5iNjExN2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDUuYwpAQCAtMTAsMzU2ICsxMCwxMiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NS5oPgotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAicG0uaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0gewotCS5uYW1lCQk9ICJwaW9BX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9QSU9BLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1BJT0IsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQ19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfUElPQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0RFX2NsayA9IHsKLQkubmFtZQkJPSAicGlvREVfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1BJT0RFLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHJuZ19jbGsgPSB7Ci0JLm5hbWUJCT0gInRybmdfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1RSTkcsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1VTMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVVMxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQyX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9VUzIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDNfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1VTMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzBfY2xrID0gewotCS5uYW1lCQk9ICJtY2kwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9NQ0kwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHdpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1RXSTAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVFdJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2xrID0gewotCS5uYW1lCQk9ICJzcGkwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9TUEkwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1NQSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MwX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfU1NDMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzYzFfY2xrID0gewotCS5uYW1lCQk9ICJzc2MxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9TU0MxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGNiMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjYjBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1RDQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGsgPSB7Ci0JLm5hbWUJCT0gInB3bV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfUFdNQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRzY19jbGsgPSB7Ci0JLm5hbWUJCT0gInRzY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVFNDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NsayA9IHsKLQkubmFtZQkJPSAiZG1hX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9ETUEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1aHBoc19jbGsgPSB7Ci0JLm5hbWUJCT0gInVocGhzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9VSFBIUywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGxjZGNfY2xrID0gewotCS5uYW1lCQk9ICJsY2RjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9MQ0RDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgYWM5N19jbGsgPSB7Ci0JLm5hbWUJCT0gImFjOTdfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0FDOTdDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbWFjYl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBjbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfRU1BQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGlzaV9jbGsgPSB7Ci0JLm5hbWUJCT0gImlzaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfSVNJLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWRwaHNfY2xrID0gewotCS5uYW1lCQk9ICJ1ZHBoc19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVURQSFMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtbWMxX2NsayA9IHsKLQkubmFtZQkJPSAibWNpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfTUNJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLQotLyogVmlkZW8gZGVjb2RlciBjbG9jayAtIE9ubHkgZm9yIHNhbTltMTAvc2FtOW0xMSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdmRlY19jbGsgPSB7Ci0JLm5hbWUJCT0gInZkZWNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1ZERUMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFkY19vcF9jbGsgPSB7Ci0JLm5hbWUJCT0gImFkY19vcF9jbGsiLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi0JLnJhdGVfaHoJPSAzMDAwMDAsCi19OwotCi0vKiBBRVMvVERFUy9TSEEgY2xvY2sgLSBPbmx5IGZvciBzYW05bTExL3NhbTlnNTYgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFlc3RkZXNzaGFfY2xrID0gewotCS5uYW1lCQk9ICJhZXN0ZGVzc2hhX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9BRVNUREVTU0hBLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FfY2xrLAotCSZwaW9CX2NsaywKLQkmcGlvQ19jbGssCi0JJnBpb0RFX2NsaywKLQkmdHJuZ19jbGssCi0JJnVzYXJ0MF9jbGssCi0JJnVzYXJ0MV9jbGssCi0JJnVzYXJ0Ml9jbGssCi0JJnVzYXJ0M19jbGssCi0JJm1tYzBfY2xrLAotCSZ0d2kwX2NsaywKLQkmdHdpMV9jbGssCi0JJnNwaTBfY2xrLAotCSZzcGkxX2NsaywKLQkmc3NjMF9jbGssCi0JJnNzYzFfY2xrLAotCSZ0Y2IwX2NsaywKLQkmcHdtX2NsaywKLQkmdHNjX2NsaywKLQkmZG1hX2NsaywKLQkmdWhwaHNfY2xrLAotCSZsY2RjX2NsaywKLQkmYWM5N19jbGssCi0JJm1hY2JfY2xrLAotCSZpc2lfY2xrLAotCSZ1ZHBoc19jbGssCi0JJm1tYzFfY2xrLAotCSZhZGNfb3BfY2xrLAotCSZhZXN0ZGVzc2hhX2NsaywKLQkvLyBpcnEwCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcGVyaXBoX2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JLyogT25lIGFkZGl0aW9uYWwgZmFrZSBjbG9jayBmb3IgbWFjYl9oY2xrICovCi0JQ0xLREVWX0NPTl9JRCgiaGNsayIsICZtYWNiX2NsayksCi0JLyogT25lIGFkZGl0aW9uYWwgZmFrZSBjbG9jayBmb3Igb2hjaSAqLwotCUNMS0RFVl9DT05fSUQoIm9oY2lfY2xrIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MXNhbTlnNDUtbGNkZmIuMCIsICZsY2RjX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MXNhbTlnNDVlcy1sY2RmYi4wIiwgJmxjZGNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiZWhjaV9jbGsiLCAiYXRtZWwtZWhjaSIsICZ1aHBoc19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0bWVsX3VzYmFfdWRjIiwgJnV0bWlfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJhdG1lbF91c2JhX3VkYyIsICZ1ZHBoc19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImF0bWVsX21jaS4wIiwgJm1tYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJhdG1lbF9tY2kuMSIsICZtbWMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjAiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImF0bWVsX3NwaS4xIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjYjBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImF0bWVsX3RjYi4xIiwgJnRjYjBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiaTJjLWF0OTFzYW05ZzEwLjAiLCAmdHdpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJpMmMtYXQ5MXNhbTlnMTAuMSIsICZ0d2kxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXNhbTlnNDVfc3NjLjAiLCAmc3NjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0OTFzYW05ZzQ1X3NzYy4xIiwgJnNzYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmY5YzAwMC5zc2MiLCAmc3NjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImZmZmEwMDAwLnNzYyIsICZzc2MxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImF0bWVsLXRybmciLCAmdHJuZ19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJhdG1lbF9zaGEiLCAmYWVzdGRlc3NoYV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJhdG1lbF90ZGVzIiwgJmFlc3RkZXNzaGFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiYXRtZWxfYWVzIiwgJmFlc3RkZXNzaGFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiYXQ5MXNhbTlybC1wd20iLCAmcHdtX2NsayksCi0JLyogbW9yZSB1c2FydCBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZmVlMDAuc2VyaWFsIiwgJm1jayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZjhjMDAwLnNlcmlhbCIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmOTAwMDAuc2VyaWFsIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmY5NDAwMC5zZXJpYWwiLCAmdXNhcnQyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZjk4MDAwLnNlcmlhbCIsICZ1c2FydDNfY2xrKSwKLQkvKiBtb3JlIHRjIGxvb2t1cCB0YWJsZSBmb3IgRFQgZW50cmllcyAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZmZmN2MwMDAudGltZXIiLCAmdGNiMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZmZmZDQwMDAudGltZXIiLCAmdGNiMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjcwMDAwMC5vaGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImVoY2lfY2xrIiwgIjgwMDAwMC5laGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZmZmODAwMDAubW1jIiwgJm1tYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmZmZkMDAwMC5tbWMiLCAmbW1jMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmY4NDAwMC5pMmMiLCAmdHdpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmY4ODAwMC5pMmMiLCAmdHdpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImZmZmE0MDAwLnNwaSIsICZzcGkwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZmZmYTgwMDAuc3BpIiwgJnNwaTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICI2MDAwMDAuZ2FkZ2V0IiwgJnV0bWlfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICI2MDAwMDAuZ2FkZ2V0IiwgJnVkcGhzX2NsayksCi0JLyogZmFrZSBoY2xrIGNsb2NrICovCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXQ5MV9vaGNpIiwgJnVocGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmMjAwLmdwaW8iLCAmcGlvQV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjQwMC5ncGlvIiwgJnBpb0JfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY2MDAuZ3BpbyIsICZwaW9DX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmODAwLmdwaW8iLCAmcGlvREVfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmZhMDAuZ3BpbyIsICZwaW9ERV9jbGspLAotCi0JQ0xLREVWX0NPTl9JRCgicGlvQSIsICZwaW9BX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQiIsICZwaW9CX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQyIsICZwaW9DX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvRCIsICZwaW9ERV9jbGspLAotCUNMS0RFVl9DT05fSUQoInBpb0UiLCAmcGlvREVfY2xrKSwKLQkvKiBGYWtlIGFkYyBjbG9jayAqLwotCUNMS0RFVl9DT05fSUQoImFkY19jbGsiLCAmdHNjX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmI4MDAwLnB3bSIsICZwd21fY2xrKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCB1c2FydF9jbG9ja3NfbG9va3Vwc1tdID0gewotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJhdG1lbF91c2FydC4wIiwgJm1jayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjEiLCAmdXNhcnQwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjIiLCAmdXNhcnQxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjMiLCAmdXNhcnQyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjQiLCAmdXNhcnQzX2NsayksCi19OwotCi0vKgotICogVGhlIHR3byBwcm9ncmFtbWFibGUgY2xvY2tzLgotICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7Ci0JLm5hbWUJCT0gInBjazAiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7Ci0JLm5hbWUJCT0gInBjazEiLAotCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAotCS5pZAkJPSAxLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05ZzQ1X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrcyk7IGkrKykKLQkJY2xrX3JlZ2lzdGVyKHBlcmlwaF9jbG9ja3NbaV0pOwotCi0JY2xrZGV2X2FkZF90YWJsZShwZXJpcGhfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzX2xvb2t1cHMpKTsKLQljbGtkZXZfYWRkX3RhYmxlKHVzYXJ0X2Nsb2Nrc19sb29rdXBzLAotCQkJIEFSUkFZX1NJWkUodXNhcnRfY2xvY2tzX2xvb2t1cHMpKTsKLQotCWlmIChjcHVfaXNfYXQ5MXNhbTltMTAoKSB8fCBjcHVfaXNfYXQ5MXNhbTltMTEoKSkKLQkJY2xrX3JlZ2lzdGVyKCZ2ZGVjX2Nsayk7Ci0KLQljbGtfcmVnaXN0ZXIoJnBjazApOwotCWNsa19yZWdpc3RlcigmcGNrMSk7Ci19Ci0jZWxzZQotI2RlZmluZSBhdDkxc2FtOWc0NV9yZWdpc3Rlcl9jbG9ja3MgTlVMTAotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgR1BJTwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fYmFuayBhdDkxc2FtOWc0NV9ncGlvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5pZAkJPSBBVDkxU0FNOUc0NV9JRF9QSU9BLAotCQkucmVnYmFzZQk9IEFUOTFTQU05RzQ1X0JBU0VfUElPQSwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOUc0NV9JRF9QSU9CLAotCQkucmVnYmFzZQk9IEFUOTFTQU05RzQ1X0JBU0VfUElPQiwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOUc0NV9JRF9QSU9DLAotCQkucmVnYmFzZQk9IEFUOTFTQU05RzQ1X0JBU0VfUElPQywKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOUc0NV9JRF9QSU9ERSwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOUc0NV9CQVNFX1BJT0QsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTlHNDVfSURfUElPREUsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlHNDVfQkFTRV9QSU9FLAotCX0KLX07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTlHNDUgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCkBAIC0zNzAsMTI1ICsyNiwxNSBAQAogCWF0OTFfaW5pdF9zcmFtKDAsIEFUOTFTQU05RzQ1X1NSQU1fQkFTRSwgQVQ5MVNBTTlHNDVfU1JBTV9TSVpFKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05ZzQ1X2lvcmVtYXBfcmVnaXN0ZXJzKHZvaWQpCi17Ci0JYXQ5MV9pb3JlbWFwX3JhbWMoMCwgQVQ5MVNBTTlHNDVfQkFTRV9ERFJTRFJDMSwgNTEyKTsKLQlhdDkxX2lvcmVtYXBfcmFtYygxLCBBVDkxU0FNOUc0NV9CQVNFX0REUlNEUkMwLCA1MTIpOwotCWF0OTFzYW05MjZ4X2lvcmVtYXBfcGl0KEFUOTFTQU05RzQ1X0JBU0VfUElUKTsKLQlhdDkxc2FtOV9pb3JlbWFwX3NtYygwLCBBVDkxU0FNOUc0NV9CQVNFX1NNQyk7Ci0JYXQ5MV9pb3JlbWFwX21hdHJpeChBVDkxU0FNOUc0NV9CQVNFX01BVFJJWCk7Ci0JYXQ5MV9wbV9zZXRfc3RhbmRieShhdDkxX2Rkcl9zdGFuZGJ5KTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05ZzQ1X2luaXRpYWxpemUodm9pZCkKIHsKIAlhcm1fcG1faWRsZSA9IGF0OTFzYW05X2lkbGU7CiAKIAlhdDkxX3N5c2lycV9tYXNrX3J0YyhBVDkxU0FNOUc0NV9CQVNFX1JUQyk7CiAJYXQ5MV9zeXNpcnFfbWFza19ydHQoQVQ5MVNBTTlHNDVfQkFTRV9SVFQpOwotCi0JLyogUmVnaXN0ZXIgR1BJTyBzdWJzeXN0ZW0gKi8KLQlhdDkxX2dwaW9faW5pdChhdDkxc2FtOWc0NV9ncGlvLCA1KTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSByc3RjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05RzQ1X0JBU0VfUlNUQywKLQkJLmVuZCAgICA9IEFUOTFTQU05RzQ1X0JBU0VfUlNUQyArIFNaXzE2IC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTlHNDVfQkFTRV9ERFJTRFJDMSwKLQkJLmVuZCAgICA9IEFUOTFTQU05RzQ1X0JBU0VfRERSU0RSQzEgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydCAgPSBBVDkxU0FNOUc0NV9CQVNFX0REUlNEUkMwLAotCQkuZW5kICAgID0gQVQ5MVNBTTlHNDVfQkFTRV9ERFJTRFJDMCArIFNaXzUxMiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnN0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImF0OTEtc2FtOWc0NS1yZXNldCIsCi0JLnJlc291cmNlICAgICAgID0gcnN0Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShyc3RjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoZHdjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05RzQ1X0JBU0VfU0hEV0MsCi0JCS5lbmQgICAgPSBBVDkxU0FNOUc0NV9CQVNFX1NIRFdDICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoZHdjX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiYXQ5MS1wb3dlcm9mZiIsCi0JLnJlc291cmNlICAgICAgID0gc2hkd2NfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc2hkd2NfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOWc0NV9yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyc3RjX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzaGR3Y19kZXZpY2UpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIEludGVycnVwdCBpbml0aWFsaXphdGlvbgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZSBkZWZhdWx0IGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMgKDAgPSBsb3dlc3QsIDcgPSBoaWdoZXN0KS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdDkxc2FtOWc0NV9kZWZhdWx0X2lycV9wcmlvcml0eVtOUl9BSUNfSVJRU10gX19pbml0ZGF0YSA9IHsKLQk3LAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKSAqLwotCTcsCS8qIFN5c3RlbSBQZXJpcGhlcmFscyAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLwotCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgRCBhbmQgRSAqLwotCTAsCi0JNSwJLyogVVNBUlQgMCAqLwotCTUsCS8qIFVTQVJUIDEgKi8KLQk1LAkvKiBVU0FSVCAyICovCi0JNSwJLyogVVNBUlQgMyAqLwotCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgMCAqLwotCTYsCS8qIFR3by1XaXJlIEludGVyZmFjZSAwICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDEgKi8KLQk1LAkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMCAqLwotCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAxICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMCAqLwotCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDEgKi8KLQkwLAkvKiBUaW1lciBDb3VudGVyIDAsIDEsIDIsIDMsIDQgYW5kIDUgKi8KLQkwLAkvKiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIENvbnRyb2xsZXIgKi8KLQkwLAkvKiBUb3VjaCBTY3JlZW4gQ29udHJvbGxlciAqLwotCTAsCS8qIERNQSBDb250cm9sbGVyICovCi0JMiwJLyogVVNCIEhvc3QgSGlnaCBTcGVlZCBwb3J0ICovCi0JMywJLyogTERDIENvbnRyb2xsZXIgKi8KLQk1LAkvKiBBQzk3IENvbnRyb2xsZXIgKi8KLQkzLAkvKiBFdGhlcm5ldCAqLwotCTAsCS8qIEltYWdlIFNlbnNvciBJbnRlcmZhY2UgKi8KLQkyLAkvKiBVU0IgRGV2aWNlIEhpZ2ggc3BlZWQgcG9ydCAqLwotCTAsCS8qIEFFU1RERVNTSEEgQ3J5cHRvIEhXIEFjY2VsZXJhdG9ycyAqLwotCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgMSAqLwotCTAsCi0JMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdF90aW1lKHZvaWQpCi17Ci0JYXQ5MXNhbTkyNnhfcGl0X2luaXQoTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUyk7CiB9CiAKIEFUOTFfU09DX1NUQVJUKGF0OTFzYW05ZzQ1KQogCS5tYXBfaW8gPSBhdDkxc2FtOWc0NV9tYXBfaW8sCi0JLmRlZmF1bHRfaXJxX3ByaW9yaXR5ID0gYXQ5MXNhbTlnNDVfZGVmYXVsdF9pcnFfcHJpb3JpdHksCi0JLmV4dGVybl9pcnEgPSAoMSA8PCBBVDkxU0FNOUc0NV9JRF9JUlEwKSwKLQkuaW9yZW1hcF9yZWdpc3RlcnMgPSBhdDkxc2FtOWc0NV9pb3JlbWFwX3JlZ2lzdGVycywKLQkucmVnaXN0ZXJfY2xvY2tzID0gYXQ5MXNhbTlnNDVfcmVnaXN0ZXJfY2xvY2tzLAotCS5yZWdpc3Rlcl9kZXZpY2VzID0gYXQ5MXNhbTlnNDVfcmVnaXN0ZXJfZGV2aWNlcywKIAkuaW5pdCA9IGF0OTFzYW05ZzQ1X2luaXRpYWxpemUsCi0JLmluaXRfdGltZSA9IGF0OTFzYW05ZzQ1X2luaXRfdGltZSwKIEFUOTFfU09DX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYWI3ODIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MTUgKzAsMCBAQAotLyoKLSAqICBPbi1DaGlwIGRldmljZXMgc2V0dXAgY29kZSBmb3IgdGhlIEFUOTFTQU05RzQ1IGZhbWlseQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQXRtZWwgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2F0bWVsLW1jaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvY3J5cHRvLWF0bWVsLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0OTFfYWRjLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlnNDUuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05ZzQ1X21hdHJpeC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLWF0bWVsLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdG1lbC1tY2kuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlIDxtZWRpYS9hdG1lbC1pc2kuaD4KLQotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgSERNQUMgLSBBSEIgRE1BIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVF9IRE1BQykgfHwgZGVmaW5lZChDT05GSUdfQVRfSERNQUNfTU9EVUxFKQotc3RhdGljIHU2NCBoZG1hY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZG1hY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfRE1BLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9ETUEgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9ETUEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0RNQSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0X2hkbWFjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MXNhbTlnNDVfZG1hIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZoZG1hY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBoZG1hY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhkbWFjX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0X2hkbWFjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBIb3N0IChPSENJKQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKLXN0YXRpYyB1NjQgb2hjaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgdXNiaF9vaGNpX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9vaGNpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfT0hDSV9CQVNFLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfT0hDSV9CQVNFICsgU1pfMU0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VSFBIUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVUhQSFMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3VzYmhfb2hjaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfb2hjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmb2hjaV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYmhfb2hjaV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdXNiaF9vaGNpX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXNiaF9vaGNpX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKLXsKLQlpbnQgaTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyogRW5hYmxlIFZCdXMgY29udHJvbCBmb3IgVUhQIHBvcnRzICovCi0JZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRzOyBpKyspIHsKLQkJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW5baV0pKQotCQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+dmJ1c19waW5baV0sCi0JCQkJCSAgICAgZGF0YS0+dmJ1c19waW5fYWN0aXZlX2xvd1tpXSk7Ci0JfQotCi0JLyogRW5hYmxlIG92ZXJjdXJyZW50IG5vdGlmaWNhdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSkpCi0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSwgMSk7Ci0JfQotCi0JdXNiaF9vaGNpX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFfdXNiaF9vaGNpX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmhfb2hjaShzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFVTQiBIb3N0IEhTIChFSENJKQotICogIE5lZWRzIGFuIE9IQ0kgaG9zdCBmb3IgbG93IGFuZCBmdWxsIHNwZWVkIG1hbmFnZW1lbnQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfRUhDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FSENJX0hDRF9NT0RVTEUpCi1zdGF0aWMgdTY0IGVoY2lfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIHVzYmhfZWhjaV9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYmhfZWhjaV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0VIQ0lfQkFTRSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0VIQ0lfQkFTRSArIFNaXzFNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVUhQSFMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VIUEhTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91c2JoX2VoY2lfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbC1laGNpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZlaGNpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9laGNpX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1c2JoX2VoY2lfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JoX2VoY2lfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoX2VoY2koc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKQotewotCWludCBpOwotCi0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQkvKiBFbmFibGUgVkJ1cyBjb250cm9sIGZvciBVSFAgcG9ydHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydHM7IGkrKykgewotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT52YnVzX3BpbltpXSkpCi0JCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT52YnVzX3BpbltpXSwKLQkJCQkJICAgICBkYXRhLT52YnVzX3Bpbl9hY3RpdmVfbG93W2ldKTsKLQl9Ci0KLQl1c2JoX2VoY2lfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JoX2VoY2lfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9laGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVVNCIEhTIERldmljZSAoR2FkZ2V0KQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9BVE1FTF9VU0JBKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfQVRNRUxfVVNCQV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYmFfdWRjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfVURQSFNfRklGTywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X1VEUEhTX0ZJRk8gKyBTWl81MTJLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVURQSFMsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1VEUEhTICsgU1pfMUsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VRFBIUywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVURQSFMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi0jZGVmaW5lIEVQKG5hbSwgaWR4LCBtYXhwa3QsIG1heGJrLCBkbWEsIGlzb2MpCQkJXAotCVtpZHhdID0gewkJCQkJCVwKLQkJLm5hbWUJCT0gbmFtLAkJCQlcCi0JCS5pbmRleAkJPSBpZHgsCQkJCVwKLQkJLmZpZm9fc2l6ZQk9IG1heHBrdCwJCQlcCi0JCS5ucl9iYW5rcwk9IG1heGJrLAkJCVwKLQkJLmNhbl9kbWEJPSBkbWEsCQkJCVwKLQkJLmNhbl9pc29jCT0gaXNvYywJCQkJXAotCX0KLQotc3RhdGljIHN0cnVjdCB1c2JhX2VwX2RhdGEgdXNiYV91ZGNfZXBbXSBfX2luaXRkYXRhID0gewotCUVQKCJlcDAiLCAwLCA2NCwgMSwgMCwgMCksCi0JRVAoImVwMSIsIDEsIDEwMjQsIDIsIDEsIDEpLAotCUVQKCJlcDIiLCAyLCAxMDI0LCAyLCAxLCAxKSwKLQlFUCgiZXAzIiwgMywgMTAyNCwgMywgMSwgMCksCi0JRVAoImVwNCIsIDQsIDEwMjQsIDMsIDEsIDApLAotCUVQKCJlcDUiLCA1LCAxMDI0LCAzLCAxLCAxKSwKLQlFUCgiZXA2IiwgNiwgMTAyNCwgMywgMSwgMSksCi19OwotCi0jdW5kZWYgRVAKLQotLyoKLSAqIHBkYXRhIGRvZXNuJ3QgaGF2ZSByb29tIGZvciBhbnkgZW5kcG9pbnRzLCBzbyB3ZSBuZWVkIHRvCi0gKiBhcHBlbmQgcm9vbSBmb3IgdGhlIG9uZXMgd2UgbmVlZCByaWdodCBhZnRlciBpdC4KLSAqLwotc3RhdGljIHN0cnVjdCB7Ci0Jc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSBwZGF0YTsKLQlzdHJ1Y3QgdXNiYV9lcF9kYXRhIGVwWzddOwotfSB1c2JhX3VkY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3VzYmFfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNiYV91ZGMiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZ1c2JhX3VkY19kYXRhLnBkYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdXNiYV91ZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JhX3VkY19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmEoc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQl1c2JhX3VkY19kYXRhLnBkYXRhLnZidXNfcGluID0gLUVJTlZBTDsKLQl1c2JhX3VkY19kYXRhLnBkYXRhLm51bV9lcCA9IEFSUkFZX1NJWkUodXNiYV91ZGNfZXApOwotCW1lbWNweSh1c2JhX3VkY19kYXRhLmVwLCB1c2JhX3VkY19lcCwgc2l6ZW9mKHVzYmFfdWRjX2VwKSk7Ci0KLQlpZiAoZGF0YSAmJiBncGlvX2lzX3ZhbGlkKGRhdGEtPnZidXNfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnZidXNfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+dmJ1c19waW4sIDEpOwotCQl1c2JhX3VkY19kYXRhLnBkYXRhLnZidXNfcGluID0gZGF0YS0+dmJ1c19waW47Ci0JfQotCi0JLyogUHVsbHVwIHBpbiBpcyBoYW5kbGVkIGludGVybmFsbHkgYnkgVVNCIGRldmljZSBwZXJpcGhlcmFsICovCi0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFfdXNiYV91ZGNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiYShzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBFdGhlcm5ldAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01BQ0IpIHx8IGRlZmluZWQoQ09ORklHX01BQ0JfTU9EVUxFKQotc3RhdGljIHU2NCBldGhfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBldGhfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldGhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX0VNQUMsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX0VNQUMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9FTUFDLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9FTUFDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfZXRoX2RldmljZSA9IHsKLQkubmFtZQkJPSAibWFjYiIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmZXRoX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZXRoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBldGhfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShldGhfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnBoeV9pcnFfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnBoeV9pcnFfcGluLCAwKTsKLQkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+cGh5X2lycV9waW4sIDEpOwotCX0KLQotCS8qIFBpbnMgdXNlZCBmb3IgTUlJIGFuZCBSTUlJICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNywgMCk7CS8qIEVUWENLX0VSRUZDSyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTUsIDApOwkvKiBFUlhEViAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTIsIDApOwkvKiBFUlgwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMywgMCk7CS8qIEVSWDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE2LCAwKTsJLyogRVJYRVIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE0LCAwKTsJLyogRVRYRU4gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAwKTsJLyogRVRYMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDApOwkvKiBFVFgxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExOSwgMCk7CS8qIEVNRElPICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExOCwgMCk7CS8qIEVNREMgKi8KLQotCWlmICghZGF0YS0+aXNfcm1paSkgewotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAwKTsJLyogRUNSUyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTMwLCAwKTsJLyogRUNPTCAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTgsICAwKTsJLyogRVJYMiAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTksICAwKTsJLyogRVJYMyAqLwotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI4LCAwKTsJLyogRVJYQ0sgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAgMCk7CS8qIEVUWDIgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEE3LCAgMCk7CS8qIEVUWDMgKi8KLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyNywgMCk7CS8qIEVUWEVSICovCi0JfQotCi0JZXRoX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X2V0aF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTU1DIC8gU0QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0kpIHx8IGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSV9NT0RVTEUpCi1zdGF0aWMgdTY0IG1tY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgbW1jMF9kYXRhLCBtbWMxX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfTUNJMCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfTUNJMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX01DSTAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX01DSTAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9tbWMwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfbWNpIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tYzBfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG1tYzBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tYzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX01DSTEsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX01DSTEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9NQ0kxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9NQ0kxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfbW1jMV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX21jaSIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZtbWNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtbWMxX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBtbWMxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jMV9yZXNvdXJjZXMpLAotfTsKLQotLyogQ29uc2lkZXIgb25seSBvbmUgc2xvdCA6IHNsb3QgMCAqLwotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JLyogTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSB1c2FibGUgc2xvdCAqLwotCWlmICghZGF0YS0+c2xvdFswXS5idXNfd2lkdGgpCi0JCXJldHVybjsKLQotI2lmIGRlZmluZWQoQ09ORklHX0FUX0hETUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVF9IRE1BQ19NT0RVTEUpCi0JewotCXN0cnVjdCBhdF9kbWFfc2xhdmUJKmF0c2xhdmU7Ci0Jc3RydWN0IG1jaV9kbWFfZGF0YQkqYWx0X2F0c2xhdmU7Ci0KLQlhbHRfYXRzbGF2ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtY2lfZG1hX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlhdHNsYXZlID0gJmFsdF9hdHNsYXZlLT5zZGF0YTsKLQotCS8qIERNQSBzbGF2ZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KLQlhdHNsYXZlLT5kbWFfZGV2ID0gJmF0X2hkbWFjX2RldmljZS5kZXY7Ci0JYXRzbGF2ZS0+Y2ZnID0gQVRDX0ZJRk9DRkdfSEFMRkZJRk8KLQkJCXwgQVRDX1NSQ19IMlNFTF9IVyB8IEFUQ19EU1RfSDJTRUxfSFc7Ci0JaWYgKG1tY19pZCA9PSAwKQkvKiBNQ0kwICovCi0JCWF0c2xhdmUtPmNmZyB8PSBBVENfU1JDX1BFUihBVF9ETUFfSURfTUNJMCkKLQkJCSAgICAgIHwgQVRDX0RTVF9QRVIoQVRfRE1BX0lEX01DSTApOwotCi0JZWxzZQkJCS8qIE1DSTEgKi8KLQkJYXRzbGF2ZS0+Y2ZnIHw9IEFUQ19TUkNfUEVSKEFUX0RNQV9JRF9NQ0kxKQotCQkJICAgICAgfCBBVENfRFNUX1BFUihBVF9ETUFfSURfTUNJMSk7Ci0KLQlkYXRhLT5kbWFfc2xhdmUgPSBhbHRfYXRzbGF2ZTsKLQl9Ci0jZW5kaWYKLQotCi0JLyogaW5wdXQvaXJxICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+c2xvdFswXS5kZXRlY3RfcGluKSkgewotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbMF0uZGV0ZWN0X3BpbiwgMSk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnNsb3RbMF0uZGV0ZWN0X3BpbiwgMSk7Ci0JfQotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbMF0ud3BfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5zbG90WzBdLndwX3BpbiwgMSk7Ci0KLQlpZiAobW1jX2lkID09IDApIHsJCS8qIE1DSTAgKi8KLQotCQkvKiBDTEsgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAwKTsKLQotCQkvKiBDTUQgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExLCAxKTsKLQotCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzIGFuZCBtYXliZSBEQVQ0Li5EQVQ3ICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMiwgMSk7Ci0JCWlmIChkYXRhLT5zbG90WzBdLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTMsIDEpOwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE0LCAxKTsKLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNSwgMSk7Ci0JCQlpZiAoZGF0YS0+c2xvdFswXS5idXNfd2lkdGggPT0gOCkgewotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNiwgMSk7Ci0JCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE3LCAxKTsKLQkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTgsIDEpOwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBOSwgMSk7Ci0JCQl9Ci0JCX0KLQotCQltbWMwX2RhdGEgPSAqZGF0YTsKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9tbWMwX2RldmljZSk7Ci0KLQl9IGVsc2UgewkJCS8qIE1DSTEgKi8KLQotCQkvKiBDTEsgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEzMSwgMCk7Ci0KLQkJLyogQ01EICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjIsIDEpOwotCi0JCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgYW5kIG1heWJlIERBVDQuLkRBVDcgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMSk7Ci0JCWlmIChkYXRhLT5zbG90WzBdLmJ1c193aWR0aCA9PSA0KSB7Ci0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAxKTsKLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDEpOwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNiwgMSk7Ci0JCQlpZiAoZGF0YS0+c2xvdFswXS5idXNfd2lkdGggPT0gOCkgewotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjcsIDEpOwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjgsIDEpOwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjksIDEpOwotCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMzAsIDEpOwotCQkJfQotCQl9Ci0KLQkJbW1jMV9kYXRhID0gKmRhdGE7Ci0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfbW1jMV9kZXZpY2UpOwotCi0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tY2koc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIE5BTkQgLyBTbWFydE1lZGlhCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIG5hbmRfZGF0YTsKLQotI2RlZmluZSBOQU5EX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzMKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuYW5kX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gTkFORF9CQVNFLAotCQkuZW5kCT0gTkFORF9CQVNFICsgU1pfMjU2TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX0VDQywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfRUNDICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfbmFuZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX25hbmQiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZuYW5kX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBuYW5kX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobmFuZF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JY3NhID0gYXQ5MV9tYXRyaXhfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOwotCWF0OTFfbWF0cml4X3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfRUJJX0NTM0FfU01DX1NNQVJUTUVESUEpOwotCi0JLyogZW5hYmxlIHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmVuYWJsZV9waW4pKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5lbmFibGVfcGluLCAxKTsKLQotCS8qIHJlYWR5L2J1c3kgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmR5X3BpbikpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cmR5X3BpbiwgMSk7Ci0KLQkvKiBjYXJkIGRldGVjdCBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5kZXRfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKLQotCW5hbmRfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfbmFuZF9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRXSSAoaTJjKQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFByZWZlciB0aGUgR1BJTyBjb2RlIHNpbmNlIHRoZSBUV0kgY29udHJvbGxlciBpc24ndCByb2J1c3QKLSAqIChnZXRzIG92ZXJydW5zIGFuZCB1bmRlcnJ1bnMgdW5kZXIgbG9hZCkgYW5kIGNhbiBvbmx5IGlzc3VlCi0gKiByZXBlYXRlZCBTVEFSVHMgaW4gb25lIHNjZW5hcmlvICh0aGUgZHJpdmVyIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGVtKS4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGFfaTJjMCA9IHsKLQkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQTIwLAotCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnNjbF9waW4JCT0gQVQ5MV9QSU5fUEEyMSwKLQkuc2NsX2lzX29wZW5fZHJhaW4JPSAxLAotCS51ZGVsYXkJCQk9IDUsCQkvKiB+MTAwIGtIeiAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdHdpMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCi0JLmlkCQkJPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZwZGF0YV9pMmMwLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIHBkYXRhX2kyYzEgPSB7Ci0JLnNkYV9waW4JCT0gQVQ5MV9QSU5fUEIxMCwKLQkuc2RhX2lzX29wZW5fZHJhaW4JPSAxLAotCS5zY2xfcGluCQk9IEFUOTFfUElOX1BCMTEsCi0JLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKLQkudWRlbGF5CQkJPSA1LAkJLyogfjEwMCBrSHogKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3R3aTFfZGV2aWNlID0gewotCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAotCS5pZAkJCT0gMSwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmcGRhdGFfaTJjMSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc2hvcnQgaTJjX2lkLCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKGkyY19pZCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0KLQlpZiAoaTJjX2lkID09IDApIHsKLQkJYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMSk7CQkvKiBUV0QgKFNEQSkgKi8KLQkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMCwgMSk7Ci0KLQkJYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEEyMSwgMSk7CQkvKiBUV0NLIChTQ0wpICovCi0JCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjEsIDEpOwotCi0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfdHdpMF9kZXZpY2UpOwotCX0gZWxzZSB7Ci0JCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BCMTAsIDEpOwkJLyogVFdEIChTREEpICovCi0JCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCMTAsIDEpOwotCi0JCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BCMTEsIDEpOwkJLyogVFdDSyAoU0NMKSAqLwotCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQjExLCAxKTsKLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3R3aTFfZGV2aWNlKTsKLQl9Ci19Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0kyQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHR3aTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1RXSTAsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1RXSTAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9UV0kwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9UV0kwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdHdpMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImkyYy1hdDkxc2FtOWcxMCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdHdpMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHR3aTBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHdpMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVFdJMSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVFdJMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RXSTEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RXSTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90d2kxX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaTJjLWF0OTFzYW05ZzEwIiwKLQkuaWQJCT0gMSwKLQkucmVzb3VyY2UJPSB0d2kxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzaG9ydCBpMmNfaWQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oaTJjX2lkLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQotCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLwotCWlmIChpMmNfaWQgPT0gMCkgewotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAwKTsJCS8qIFRXRCAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAwKTsJCS8qIFRXQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3R3aTBfZGV2aWNlKTsKLQl9IGVsc2UgewotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEwLCAwKTsJCS8qIFRXRCAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjExLCAwKTsJCS8qIFRXQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3R3aTFfZGV2aWNlKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzaG9ydCBpMmNfaWQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNQSQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLXN0YXRpYyB1NjQgc3BpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1NQSTAsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1NQSTAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9TUEkwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9TUEkwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfc3BpMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3NwaSIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3BpMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaTBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGkwX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQjMsIEFUOTFfUElOX1BCMTgsIEFUOTFfUElOX1BCMTksIEFUOTFfUElOX1BEMjcgfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9TUEkxLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9TUEkxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfU1BJMSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfU1BJMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3NwaTFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAxLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaTFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMV9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEIxNywgQVQ5MV9QSU5fUEQyOCwgQVQ5MV9QSU5fUEQxOCwgQVQ5MV9QSU5fUEQxOSB9OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBjc19waW47Ci0Jc2hvcnQgZW5hYmxlX3NwaTAgPSAwOwotCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKLQotCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgewotCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCi0JCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7Ci0JCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQotCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQkJZWxzZQotCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKLQotCQlpZiAoIWdwaW9faXNfdmFsaWQoY3NfcGluKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChkZXZpY2VzW2ldLmJ1c19udW0gPT0gMCkKLQkJCWVuYWJsZV9zcGkwID0gMTsKLQkJZWxzZQotCQkJZW5hYmxlX3NwaTEgPSAxOwotCi0JCS8qIGVuYWJsZSBjaGlwLXNlbGVjdCBwaW4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoY3NfcGluLCAxKTsKLQotCQkvKiBwYXNzIGNoaXAtc2VsZWN0IHBpbiB0byBkcml2ZXIgKi8KLQkJZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBjc19waW47Ci0JfQotCi0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGV2aWNlcywgbnJfZGV2aWNlcyk7Ci0KLQkvKiBDb25maWd1cmUgU1BJIGJ1cyhlcykgKi8KLQlpZiAoZW5hYmxlX3NwaTApIHsKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIwLCAwKTsJLyogU1BJMF9NSVNPICovCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CS8qIFNQSTBfTU9TSSAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIsIDApOwkvKiBTUEkwX1NQQ0sgKi8KLQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3NwaTBfZGV2aWNlKTsKLQl9Ci0JaWYgKGVuYWJsZV9zcGkxKSB7Ci0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTQsIDApOwkvKiBTUEkxX01JU08gKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMCk7CS8qIFNQSTFfTU9TSSAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE2LCAwKTsJLyogU1BJMV9TUENLICovCi0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9zcGkxX2RldmljZSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQUM5NwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3QykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDX01PRFVMRSkKLXN0YXRpYyB1NjQgYWM5N19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBhYzk3X2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWM5N19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfQUM5N0MsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX0FDOTdDICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUM5N0MsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0FDOTdDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfYWM5N19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX2FjOTdjIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmFjOTdfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhYzk3X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBhYzk3X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYWM5N19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDgsIDApOwkvKiBBQzk3RlMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDksIDApOwkvKiBBQzk3Q0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDcsIDApOwkvKiBBQzk3VFggKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDYsIDApOwkvKiBBQzk3UlggKi8KLQotCS8qIHJlc2V0ICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmVzZXRfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cmVzZXRfcGluLCAwKTsKLQotCWFjOTdfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfYWM5N19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgSW1hZ2UgU2Vuc29yIEludGVyZmFjZQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19WSURFT19BVE1FTF9JU0kpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0FUTUVMX0lTSV9NT0RVTEUpCi1zdGF0aWMgdTY0IGlzaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgaXNpX3BsYXRmb3JtX2RhdGEgaXNpX2RhdGE7Ci0KLXN0cnVjdCByZXNvdXJjZSBpc2lfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX0lTSSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfSVNJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfSVNJLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9JU0ksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9pc2lfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9pc2kiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJLmRtYV9tYXNrCQk9ICZpc2lfZG1hbWFzaywKLQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkucGxhdGZvcm1fZGF0YQkJPSAmaXNpX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBpc2lfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpc2lfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBpc2lfbWNrX2xvb2t1cHNbXSA9IHsKLQlDTEtERVZfQ09OX0RFVl9JRCgiaXNpX21jayIsICJhdG1lbF9pc2kuMCIsIE5VTEwpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2lzaShzdHJ1Y3QgaXNpX3BsYXRmb3JtX2RhdGEgKmRhdGEsCi0JCWJvb2wgdXNlX3Bja19hc19tY2spCi17Ci0Jc3RydWN0IGNsayAqcGNrOwotCXN0cnVjdCBjbGsgKnBhcmVudDsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCWlzaV9kYXRhID0gKmRhdGE7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIwLCAwKTsJLyogSVNJX0QwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyMSwgMCk7CS8qIElTSV9EMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjIsIDApOwkvKiBJU0lfRDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIzLCAwKTsJLyogSVNJX0QzICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNCwgMCk7CS8qIElTSV9ENCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjUsIDApOwkvKiBJU0lfRDUgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI2LCAwKTsJLyogSVNJX0Q2ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNywgMCk7CS8qIElTSV9ENyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjgsIDApOwkvKiBJU0lfUENLICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIzMCwgMCk7CS8qIElTSV9IU1lOQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjksIDApOwkvKiBJU0lfVlNZTkMgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjgsIDApOwkvKiBJU0lfUEQ4ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEI5LCAwKTsJLyogSVNJX1BEOSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTAsIDApOwkvKiBJU0lfUEQxMCAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTEsIDApOwkvKiBJU0lfUEQxMSAqLwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9pc2lfZGV2aWNlKTsKLQotCWlmICh1c2VfcGNrX2FzX21jaykgewotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjMxLCAwKTsJLyogSVNJX01DSyAoUENLMSkgKi8KLQotCQlwY2sgPSBjbGtfZ2V0KE5VTEwsICJwY2sxIik7Ci0JCXBhcmVudCA9IGNsa19nZXQoTlVMTCwgInBsbGEiKTsKLQotCQlCVUdfT04oSVNfRVJSKHBjaykgfHwgSVNfRVJSKHBhcmVudCkpOwotCi0JCWlmIChjbGtfc2V0X3BhcmVudChwY2ssIHBhcmVudCkpIHsKLQkJCXByX2VycigiRmFpbGVkIHRvIHNldCBQQ0sncyBwYXJlbnRcbiIpOwotCQl9IGVsc2UgewotCQkJLyogUmVnaXN0ZXIgUENLIGFzIElTSV9NQ0sgKi8KLQkJCWlzaV9tY2tfbG9va3Vwc1swXS5jbGsgPSBwY2s7Ci0JCQljbGtkZXZfYWRkX3RhYmxlKGlzaV9tY2tfbG9va3VwcywKLQkJCQkJQVJSQVlfU0laRShpc2lfbWNrX2xvb2t1cHMpKTsKLQkJfQotCi0JCWNsa19wdXQocGNrKTsKLQkJY2xrX3B1dChwYXJlbnQpOwotCX0KLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaXNpKHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJYm9vbCB1c2VfcGNrX2FzX21jaykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTENEIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHU2NCBsY2RjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSBsY2RjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0xDRENfQkFTRSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0xDRENfQkFTRSArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfTENEQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfTENEQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfbGNkY19kZXZpY2UgPSB7Ci0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZsY2RjX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbGNkY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbGNkY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxjZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqZGF0YSkKLXsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWlmIChjcHVfaXNfYXQ5MXNhbTlnNDVlcygpKQotCQlhdDkxX2xjZGNfZGV2aWNlLm5hbWUgPSAiYXQ5MXNhbTlnNDVlcy1sY2RmYiI7Ci0JZWxzZQotCQlhdDkxX2xjZGNfZGV2aWNlLm5hbWUgPSAiYXQ5MXNhbTlnNDUtbGNkZmIiOwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUwLCAwKTsJLyogTENERFBXUiAqLwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyLCAwKTsJLyogTENEQ0MgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTMsIDApOwkvKiBMQ0RWU1lOQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFNCwgMCk7CS8qIExDREhTWU5DICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU1LCAwKTsJLyogTENERE9UQ0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTYsIDApOwkvKiBMQ0RERU4gKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTcsIDApOwkvKiBMQ0REMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFOCwgMCk7CS8qIExDREQxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU5LCAwKTsJLyogTENERDIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTEwLCAwKTsJLyogTENERDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTExLCAwKTsJLyogTENERDQgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTEyLCAwKTsJLyogTENERDUgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTEzLCAwKTsJLyogTENERDYgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTE0LCAwKTsJLyogTENERDcgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTE1LCAwKTsJLyogTENERDggKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTE2LCAwKTsJLyogTENERDkgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTE3LCAwKTsJLyogTENERDEwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxOCwgMCk7CS8qIExDREQxMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTksIDApOwkvKiBMQ0REMTIgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIwLCAwKTsJLyogTENERDEzICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyMSwgMCk7CS8qIExDREQxNCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjIsIDApOwkvKiBMQ0REMTUgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIzLCAwKTsJLyogTENERDE2ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNCwgMCk7CS8qIExDREQxNyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjUsIDApOwkvKiBMQ0REMTggKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI2LCAwKTsJLyogTENERDE5ICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNywgMCk7CS8qIExDREQyMCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjgsIDApOwkvKiBMQ0REMjEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI5LCAwKTsJLyogTENERDIyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUzMCwgMCk7CS8qIExDREQyMyAqLwotCi0JbGNkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX2xjZGNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbGNkYyhzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRpbWVyL0NvdW50ZXIgYmxvY2sKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMCArIFNaXzI1NiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RDQiwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVENCLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdGNiMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3RjYiIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gdGNiMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYjBfcmVzb3VyY2VzKSwKLX07Ci0KLS8qIFRDQjEgYmVnaW5zIHdpdGggVEMzICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRjYjFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1RDQjEsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1RDQjEgKyBTWl8yNTYgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9UQ0IsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RDQiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3RjYjFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAotCS5pZAkJPSAxLAotCS5yZXNvdXJjZQk9IHRjYjFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2IxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90Y2IwX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90Y2IxX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKSB7IH0KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUlRDCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDBfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1JUQywKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfUlRDICsgU1pfMjU2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfcnRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV9ydGMiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSBydGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9ydGNfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0Yyh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBBREMgYW5kIHRvdWNoc2NyZWVuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQVQ5MV9BREMpCi1zdGF0aWMgc3RydWN0IGF0OTFfYWRjX2RhdGEgYWRjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWRjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UU0MsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1RTQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1RTQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVFNDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX2FkY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFzYW05ZzQ1LWFkYyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJmFkY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gYWRjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYWRjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfYWRjX3RyaWdnZXIgYXQ5MV9hZGNfdHJpZ2dlcnNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lID0gImV4dGVybmFsLXJpc2luZyIsCi0JCS52YWx1ZSA9IDEsCi0JCS5pc19leHRlcm5hbCA9IHRydWUsCi0JfSwKLQlbMV0gPSB7Ci0JCS5uYW1lID0gImV4dGVybmFsLWZhbGxpbmciLAotCQkudmFsdWUgPSAyLAotCQkuaXNfZXh0ZXJuYWwgPSB0cnVlLAotCX0sCi0JWzJdID0gewotCQkubmFtZSA9ICJleHRlcm5hbC1hbnkiLAotCQkudmFsdWUgPSAzLAotCQkuaXNfZXh0ZXJuYWwgPSB0cnVlLAotCX0sCi0JWzNdID0gewotCQkubmFtZSA9ICJjb250aW51b3VzIiwKLQkJLnZhbHVlID0gNiwKLQkJLmlzX2V4dGVybmFsID0gZmFsc2UsCi0JfSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZGMoc3RydWN0IGF0OTFfYWRjX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlpZiAodGVzdF9iaXQoMCwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjAsIDApOwotCWlmICh0ZXN0X2JpdCgxLCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEQyMSwgMCk7Ci0JaWYgKHRlc3RfYml0KDIsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QRDIyLCAwKTsKLQlpZiAodGVzdF9iaXQoMywgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjMsIDApOwotCWlmICh0ZXN0X2JpdCg0LCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEQyNCwgMCk7Ci0JaWYgKHRlc3RfYml0KDUsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QRDI1LCAwKTsKLQlpZiAodGVzdF9iaXQoNiwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BEMjYsIDApOwotCWlmICh0ZXN0X2JpdCg3LCAmZGF0YS0+Y2hhbm5lbHNfdXNlZCkpCi0JCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEQyNywgMCk7Ci0KLQlpZiAoZGF0YS0+dXNlX2V4dGVybmFsX3RyaWdnZXJzKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDI4LCAwKTsKLQotCWRhdGEtPnN0YXJ0dXBfdGltZSA9IDQwOwotCWRhdGEtPnRyaWdnZXJfbnVtYmVyID0gNDsKLQlkYXRhLT50cmlnZ2VyX2xpc3QgPSBhdDkxX2FkY190cmlnZ2VyczsKLQotCWFkY19kYXRhID0gKmRhdGE7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX2FkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZGMoc3RydWN0IGF0OTFfYWRjX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBSVFQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnR0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9SVFQsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1JUVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9ydHRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3J0dCIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gcnR0X3Jlc291cmNlcywKLX07Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19SVENfRFJWX0FUOTFTQU05KQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0JYXQ5MXNhbTlnNDVfcnR0X2RldmljZS5uYW1lID0gInJ0Yy1hdDkxc2FtOSI7Ci0JLyoKLQkgKiBUaGUgc2Vjb25kIHJlc291cmNlIGlzIG5lZWRlZDoKLQkgKiBHUEJSIHdpbGwgc2VydmUgYXMgdGhlIHN0b3JhZ2UgZm9yIFJUQyB0aW1lIG9mZnNldAotCSAqLwotCWF0OTFzYW05ZzQ1X3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDM7Ci0JcnR0X3Jlc291cmNlc1sxXS5zdGFydCA9IEFUOTFTQU05RzQ1X0JBU0VfR1BCUiArCi0JCQkJIDQgKiBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOV9HUEJSOwotCXJ0dF9yZXNvdXJjZXNbMV0uZW5kID0gcnR0X3Jlc291cmNlc1sxXS5zdGFydCArIDM7Ci0JcnR0X3Jlc291cmNlc1syXS5zdGFydCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci0JcnR0X3Jlc291cmNlc1syXS5lbmQgPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0X3J0Yyh2b2lkKQotewotCS8qIE9ubHkgb25lIHJlc291cmNlIGlzIG5lZWRlZDogUlRUIG5vdCB1c2VkIGFzIFJUQyAqLwotCWF0OTFzYW05ZzQ1X3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHQodm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfcnR0X3J0YygpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfcnR0X2RldmljZSk7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBUUk5HCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfSFdfUkFORE9NX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19IV19SQU5ET01fQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0cm5nX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UUk5HLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9UUk5HICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3RybmdfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbC10cm5nIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gdHJuZ19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRybmdfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdHJuZyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfdHJuZ19kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdHJuZyh2b2lkKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgV2F0Y2hkb2cKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPR19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHdkdF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfV0RULAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9XRFQgKyBTWl8xNiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3dkdF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfd2R0IiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV93ZHRfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFBXTQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFdNX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwd21fcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1BXTUMsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1BXTUMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9QV01DLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9QV01DLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfcHdtMF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXNhbTlybC1wd20iLAotCS5pZAk9IC0xLAotCS5yZXNvdXJjZQk9IHB3bV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB3bV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3B3bSh1MzIgbWFzaykKLXsKLQlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMCkpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BEMjQsIDEpOwkvKiBlbmFibGUgUFdNMCAqLwotCi0JaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTEpKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDMxLCAxKTsJLyogZW5hYmxlIFBXTTEgKi8KLQotCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00yKSkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQyNiwgMSk7CS8qIGVuYWJsZSBQV00yICovCi0KLQlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMykpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BEMCwgMSk7CS8qIGVuYWJsZSBQV00zICovCi0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3B3bTBfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcHdtKHUzMiBtYXNrKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBTU0MgLS0gU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BVE1FTF9TU0MpIHx8IGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQ19NT0RVTEUpCi1zdGF0aWMgdTY0IHNzYzBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU1NDMCwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfU1NDMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1NTQzAsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1NTQzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9zc2MwX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxc2FtOWc0NV9zc2MiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MwX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MwX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19USykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQwLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQyLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQzLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SSykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ0LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ1LCAxKTsKLX0KLQotc3RhdGljIHU2NCBzc2MxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1NTQzEsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1NTQzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9TU0MxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9TU0MxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfc3NjMV9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXNhbTlnNDVfc3NjIiwKLQkuaWQJPSAxLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTQsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEyLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTEsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEzLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNSwgMSk7Ci19Ci0KLS8qCi0gKiBTU0MgY29udHJvbGxlcnMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggbGlicmFyeSBjb2RlLCBpbnN0ZWFkIG9mIGFueQotICoga2luZCBvZiBhbGwtc2luZ2luZy9hbGwtZGFuY2luZyBkcml2ZXIuICBGb3IgZXhhbXBsZSBvbmUgY291bGQgYmUKLSAqIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIEkyUyBhdWRpbyBjb2RlYydzIGRyaXZlciwgd2hpbGUgYW5vdGhlciBvbmUKLSAqIG9uIHRoZSBzYW1lIHN5c3RlbSBtaWdodCBiZSB1c2VkIGJ5IGEgY3VzdG9tIGRhdGEgY2FwdHVyZSBkcml2ZXIuCi0gKi8KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCS8qCi0JICogTk9URTogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIG1hdGNoaW5nCi0JICogInBpbnMiIHRvIHdoYXRldmVyIHdpbGwgYmUgdXNpbmcgZWFjaCBwYXJ0aWN1bGFyIGNvbnRyb2xsZXIuCi0JICovCi0Jc3dpdGNoIChpZCkgewotCWNhc2UgQVQ5MVNBTTlHNDVfSURfU1NDMDoKLQkJcGRldiA9ICZhdDkxc2FtOWc0NV9zc2MwX2RldmljZTsKLQkJY29uZmlndXJlX3NzYzBfcGlucyhwaW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVDkxU0FNOUc0NV9JRF9TU0MxOgotCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X3NzYzFfZGV2aWNlOwotCQljb25maWd1cmVfc3NjMV9waW5zKHBpbnMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOwotfQotCi0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVUFSVAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9BVE1FTCkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGJndV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfREJHVSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfREJHVSArIFNaXzUxMiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIGRiZ3VfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDAsCi0JLnVzZV9kbWFfcngJPSAwLAotfTsKLQotc3RhdGljIHU2NCBkYmd1X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9kYmd1X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmZGJndV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmRiZ3VfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGRiZ3VfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYmd1X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX2RiZ3VfcGlucyh2b2lkKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTIsIDApOwkJLyogRFJYRCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTMsIDEpOwkJLyogRFRYRCAqLwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzAsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VTMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVVMwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDEsCi0JLnVzZV9kbWFfcngJPSAxLAotfTsKLQotc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdWFydDBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MF9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQwX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MF9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxOSwgMSk7CQkvKiBUWEQwICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxOCwgMCk7CQkvKiBSWEQwICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjE3LCAwKTsJLyogUlRTMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTUsIDApOwkvKiBDVFMwICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVVMxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VUzEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MV9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQxX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV91YXJ0MV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMiwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQxX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDFfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjQsIDEpOwkJLyogVFhEMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNSwgMCk7CQkvKiBSWEQxICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDE2LCAwKTsJLyogUlRTMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTcsIDApOwkvKiBDVFMxICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMiwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfVVMyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VUzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0gewotCS51c2VfZG1hX3R4CT0gMSwKLQkudXNlX2RtYV9yeAk9IDEsCi19OwotCi1zdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV91YXJ0Ml9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKLQkuaWQJCT0gMywKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjYsIDEpOwkJLyogVFhEMiAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMCk7CQkvKiBSWEQyICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzksIDApOwkvKiBSVFMyICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMSwgMCk7CS8qIENUUzIgKi8KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMzLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzMgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOUc0NV9JRF9VUzMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX1VTMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQzX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3VhcnQzX2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAotCS5pZAkJPSA0LAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmdWFydDNfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0M19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gdWFydDNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0M19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDNfcGlucyh1bnNpZ25lZCBwaW5zKQotewotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOCwgMSk7CQkvKiBUWEQzICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI5LCAwKTsJCS8qIFJYRDMgKi8KLQotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjMsIDApOwkvKiBSVFMzICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyNCwgMCk7CS8qIENUUzMgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdGRhdGEgYXQ5MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8KLQotdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhICpwZGF0YTsKLQotCXN3aXRjaCAoaWQpIHsKLQkJY2FzZSAwOgkJLyogREJHVSAqLwotCQkJcGRldiA9ICZhdDkxc2FtOWc0NV9kYmd1X2RldmljZTsKLQkJCWNvbmZpZ3VyZV9kYmd1X3BpbnMoKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05RzQ1X0lEX1VTMDoKLQkJCXBkZXYgPSAmYXQ5MXNhbTlnNDVfdWFydDBfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0MF9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMxOgotCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0MV9kZXZpY2U7Ci0JCQljb25maWd1cmVfdXNhcnQxX3BpbnMocGlucyk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVDkxU0FNOUc0NV9JRF9VUzI6Ci0JCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X3VhcnQyX2RldmljZTsKLQkJCWNvbmZpZ3VyZV91c2FydDJfcGlucyhwaW5zKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUOTFTQU05RzQ1X0lEX1VTMzoKLQkJCXBkZXYgPSAmYXQ5MXNhbTlnNDVfdWFydDNfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0M19waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JfQotCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JcGRhdGEtPm51bSA9IHBvcnRucjsJCS8qIHVwZGF0ZSB0byBtYXBwZWQgSUQgKi8KLQotCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKLQkJYXQ5MV91YXJ0c1twb3J0bnJdID0gcGRldjsKLX0KLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKLQkJaWYgKGF0OTFfdWFydHNbaV0pCi0JCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU0hBMS9TSEEyNTYKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUllQVE9fREVWX0FUTUVMX1NIQSkgfHwgZGVmaW5lZChDT05GSUdfQ1JZUFRPX0RFVl9BVE1FTF9TSEFfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX1NIQSwKLQkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfU0hBICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUVTVERFU1NIQSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUVTVERFU1NIQSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3NoYV9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXRtZWxfc2hhIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gc2hhX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2hhX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NoYSh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfc2hhX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zaGEodm9pZCkge30KLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIERFUy9UREVTCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1JZUFRPX0RFVl9BVE1FTF9UREVTKSB8fCBkZWZpbmVkKENPTkZJR19DUllQVE9fREVWX0FUTUVMX1RERVNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0ZGVzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UREVTLAotCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9UREVTICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUVTVERFU1NIQSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlHNDVfSURfQUVTVERFU1NIQSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3RkZXNfZGV2aWNlID0gewotCS5uYW1lCT0gImF0bWVsX3RkZXMiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB0ZGVzX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGRlc19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90ZGVzKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90ZGVzX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90ZGVzKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBBRVMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUllQVE9fREVWX0FUTUVMX0FFUykgfHwgZGVmaW5lZChDT05GSUdfQ1JZUFRPX0RFVl9BVE1FTF9BRVNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBjcnlwdG9fcGxhdGZvcm1fZGF0YSBhZXNfZGF0YTsKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2RtYV9kYXRhIGFsdF9hdHNsYXZlOwotc3RhdGljIHU2NCBhZXNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWVzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9BRVMsCi0JCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX0FFUyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0FFU1RERVNTSEEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05RzQ1X0lEX0FFU1RERVNTSEEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9hZXNfZGV2aWNlID0gewotCS5uYW1lCT0gImF0bWVsX2FlcyIsCi0JLmlkCQk9IC0xLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmYWVzX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCS5wbGF0Zm9ybV9kYXRhCQk9ICZhZXNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGFlc19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFlc19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hZXModm9pZCkKLXsKLQlzdHJ1Y3QgYXRfZG1hX3NsYXZlCSphdHNsYXZlOwotCi0JLyogRE1BIFRYIHNsYXZlIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLwotCWF0c2xhdmUgPSAmYWx0X2F0c2xhdmUudHhkYXRhOwotCWF0c2xhdmUtPmRtYV9kZXYgPSAmYXRfaGRtYWNfZGV2aWNlLmRldjsKLQlhdHNsYXZlLT5jZmcgPSBBVENfRklGT0NGR19FTk9VR0hTUEFDRQl8IEFUQ19TUkNfSDJTRUxfSFcgfAotCQkJCQkJQVRDX1NSQ19QRVIoQVRfRE1BX0lEX0FFU19SWCk7Ci0KLQkvKiBETUEgUlggc2xhdmUgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCi0JYXRzbGF2ZSA9ICZhbHRfYXRzbGF2ZS5yeGRhdGE7Ci0JYXRzbGF2ZS0+ZG1hX2RldiA9ICZhdF9oZG1hY19kZXZpY2UuZGV2OwotCWF0c2xhdmUtPmNmZyA9IEFUQ19GSUZPQ0ZHX0VOT1VHSFNQQUNFCXwgQVRDX0RTVF9IMlNFTF9IVyB8Ci0JCQkJCQlBVENfRFNUX1BFUihBVF9ETUFfSURfQUVTX1RYKTsKLQotCWFlc19kYXRhLmRtYV9zbGF2ZSA9ICZhbHRfYXRzbGF2ZTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X2Flc19kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWVzKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBUaGVzZSBkZXZpY2VzIGFyZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKLSAqIHNldHVwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCi17Ci0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCXJldHVybiAwOwotCi0JYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0YygpOwotCWF0OTFfYWRkX2RldmljZV9ydHQoKTsKLQlhdDkxX2FkZF9kZXZpY2VfdHJuZygpOwotCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwotCWF0OTFfYWRkX2RldmljZV90YygpOwotCWF0OTFfYWRkX2RldmljZV9zaGEoKTsKLQlhdDkxX2FkZF9kZXZpY2VfdGRlcygpOwotCWF0OTFfYWRkX2RldmljZV9hZXMoKTsKLQlyZXR1cm4gMDsKLX0KLQotYXJjaF9pbml0Y2FsbChhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOW4xMi5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05bjEyLmMKaW5kZXggYzg5ODhmZS4uZGVlNTY5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05bjEyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05bjEyLmMKQEAgLTYsMjE5ICs2LDExIEBACiAgKiBMaWNlbnNlZCB1bmRlciBHUEx2MiBvciBsYXRlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTluMTIuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLQotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBDbG9ja3MKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FCX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQUJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1BJT0FCLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQ0RfY2xrID0gewotCS5uYW1lCQk9ICJwaW9DRF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfUElPQ0QsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1VTQVJUMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVVNBUlQxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQyX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9VU0FSVDIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDNfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1VTQVJUMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aTBfY2xrID0gewotCS5uYW1lCQk9ICJ0d2kwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9UV0kwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHdpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1RXSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtbWNfY2xrID0gewotCS5uYW1lCQk9ICJtY2lfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX01DSSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2xrID0gewotCS5uYW1lCQk9ICJzcGkwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9TUEkwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1NQSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVhcnQwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9VQVJUMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidWFydDFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1VBUlQxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGNiX2NsayA9IHsKLQkubmFtZQkJPSAidGNiX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOU4xMl9JRF9UQ0IsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwd21fY2xrID0gewotCS5uYW1lCQk9ICJwd21fY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1BXTSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImFkY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfQURDLAotCS50eXBlCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lCQk9ICJkbWFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX0RNQSwKLQkudHlwZQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWhwX2NsayA9IHsKLQkubmFtZQkJPSAidWhwIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1VIUCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVkcF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVkcF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlOMTJfSURfVURQLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbGNkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImxjZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX0xDREMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2NfY2xrID0gewotCS5uYW1lCQk9ICJzc2NfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05TjEyX0lEX1NTQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKnBlcmlwaF9jbG9ja3NbXSBfX2luaXRkYXRhID0gewotCSZwaW9BQl9jbGssCi0JJnBpb0NEX2NsaywKLQkmdXNhcnQwX2NsaywKLQkmdXNhcnQxX2NsaywKLQkmdXNhcnQyX2NsaywKLQkmdXNhcnQzX2NsaywKLQkmdHdpMF9jbGssCi0JJnR3aTFfY2xrLAotCSZtbWNfY2xrLAotCSZzcGkwX2NsaywKLQkmc3BpMV9jbGssCi0JJmxjZGNfY2xrLAotCSZ1YXJ0MF9jbGssCi0JJnVhcnQxX2NsaywKLQkmdGNiX2NsaywKLQkmcHdtX2NsaywKLQkmYWRjX2NsaywKLQkmZG1hX2NsaywKLQkmdWhwX2NsaywKLQkmdWRwX2NsaywKLQkmc3NjX2NsaywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBwZXJpcGhfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQkvKiBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZmYyMDAuc2VyaWFsIiwgJm1jayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImY4MDFjMDAwLnNlcmlhbCIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwMjAwMDAuc2VyaWFsIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmODAyNDAwMC5zZXJpYWwiLCAmdXNhcnQyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImY4MDI4MDAwLnNlcmlhbCIsICZ1c2FydDNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImY4MDA4MDAwLnRpbWVyIiwgJnRjYl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZjgwMGMwMDAudGltZXIiLCAmdGNiX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZjAwMDgwMDAubW1jIiwgJm1tY19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmMDAxMDAwMC5zc2MiLCAmc3NjX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImRtYV9jbGsiLCAiZmZmZmVjMDAuZG1hLWNvbnRyb2xsZXIiLCAmZG1hX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImY4MDEwMDAwLmkyYyIsICZ0d2kwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImY4MDE0MDAwLmkyYyIsICZ0d2kxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiZjAwMDAwMDAuc3BpIiwgJnNwaTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmMDAwNDAwMC5zcGkiLCAmc3BpMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjQwMC5ncGlvIiwgJnBpb0FCX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNjAwLmdwaW8iLCAmcGlvQUJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY4MDAuZ3BpbyIsICZwaW9DRF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZmEwMC5ncGlvIiwgJnBpb0NEX2NsayksCi0JLyogYWRkaXRpb25hbCBmYWtlIGNsb2NrIGZvciBtYWNiX2hjbGsgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICI1MDAwMDAub2hjaSIsICZ1aHBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgib2hjaV9jbGsiLCAiNTAwMDAwLm9oY2kiLCAmdWhwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImY4MDM0MDAwLnB3bSIsICZwd21fY2xrKSwKLX07Ci0KLS8qCi0gKiBUaGUgdHdvIHByb2dyYW1tYWJsZSBjbG9ja3MuCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTluMTJfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQotCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7Ci0JY2xrX3JlZ2lzdGVyKCZwY2swKTsKLQljbGtfcmVnaXN0ZXIoJnBjazEpOwotCi0JY2xrZGV2X2FkZF90YWJsZShwZXJpcGhfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzX2xvb2t1cHMpKTsKLQotfQotI2Vsc2UKLSNkZWZpbmUgYXQ5MXNhbTluMTJfcmVnaXN0ZXJfY2xvY2tzIE5VTEwKLSNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIEFUOTFTQU05TjEyIHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgpAQCAtMjM2LDYgKzI4LDUgQEAKIAogQVQ5MV9TT0NfU1RBUlQoYXQ5MXNhbTluMTIpCiAJLm1hcF9pbyA9IGF0OTFzYW05bjEyX21hcF9pbywKLQkucmVnaXN0ZXJfY2xvY2tzID0gYXQ5MXNhbTluMTJfcmVnaXN0ZXJfY2xvY2tzLAogCS5pbml0ID0gYXQ5MXNhbTluMTJfaW5pdGlhbGl6ZSwKIEFUOTFfU09DX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmwuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsLmMKaW5kZXggZjU1M2U0ZS4uZjI1YjlhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmwuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybC5jCkBAIC05LDI4NCArOSwxNCBAQAogICogbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KLQotI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX2RiZ3UuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05cmwuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgInBtLmgiCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ2xvY2tzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX09MRF9DTEtfQVQ5MSkKLSNpbmNsdWRlICJjbG9jay5oIgotCi0vKgotICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9QSU9BLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0JfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfUElPQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0NfY2xrID0gewotCS5uYW1lCQk9ICJwaW9DX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1BJT0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9EX2NsayA9IHsKLQkubmFtZQkJPSAicGlvRF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9QSU9ELAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQwX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1VTMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9VUzEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVVMyLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQzX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1VTMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9NQ0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kwX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9UV0kwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHdpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVFdJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9TUEksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBzc2MwX2NsayA9IHsKLQkubmFtZQkJPSAic3NjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9TU0MwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNzYzFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfU1NDMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInRjMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9UQzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0YzFfY2xrID0gewotCS5uYW1lCQk9ICJ0YzFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVEMxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NsayA9IHsKLQkubmFtZQkJPSAidGMyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1RDMiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGsgPSB7Ci0JLm5hbWUJCT0gInB3bV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9QV01DLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHNjX2NsayA9IHsKLQkubmFtZQkJPSAidHNjX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1RTQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jbGsgPSB7Ci0JLm5hbWUJCT0gImRtYV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9ETUEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1ZHBoc19jbGsgPSB7Ci0JLm5hbWUJCT0gInVkcGhzX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1VEUEhTLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgbGNkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImxjZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfTENEQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFjOTdfY2xrID0gewotCS5uYW1lCQk9ICJhYzk3X2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX0FDOTdDLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgYWRjX29wX2NsayA9IHsKLQkubmFtZQkJPSAiYWRjX29wX2NsayIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLQkucmF0ZV9oegk9IDEwMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FfY2xrLAotCSZwaW9CX2NsaywKLQkmcGlvQ19jbGssCi0JJnBpb0RfY2xrLAotCSZ1c2FydDBfY2xrLAotCSZ1c2FydDFfY2xrLAotCSZ1c2FydDJfY2xrLAotCSZ1c2FydDNfY2xrLAotCSZtbWNfY2xrLAotCSZ0d2kwX2NsaywKLQkmdHdpMV9jbGssCi0JJnNwaV9jbGssCi0JJnNzYzBfY2xrLAotCSZzc2MxX2NsaywKLQkmdGMwX2NsaywKLQkmdGMxX2NsaywKLQkmdGMyX2NsaywKLQkmcHdtX2NsaywKLQkmdHNjX2NsaywKLQkmZG1hX2NsaywKLQkmdWRwaHNfY2xrLAotCSZsY2RjX2NsaywKLQkmYWM5N19jbGssCi0JJmFkY19vcF9jbGssCi0JLy8gaXJxMAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHBlcmlwaF9jbG9ja3NfbG9va3Vwc1tdID0gewotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImF0OTFzYW05cmwtbGNkZmIuMCIsICZsY2RjX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiYXRtZWxfdXNiYV91ZGMiLCAmdXRtaV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImF0bWVsX3VzYmFfdWRjIiwgJnVkcGhzX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQwX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDFfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMCIsICZzc2MwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiYXQ5MXJtOTIwMF9zc2MuMSIsICZzc2MxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAiZmZmYzAwMDAuc3NjIiwgJnNzYzBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJmZmZjNDAwMC5zc2MiLCAmc3NjMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJpMmMtYXQ5MXNhbTlnMjAuMCIsICZ0d2kwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImkyYy1hdDkxc2FtOWcyMC4xIiwgJnR3aTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiYXQ5MXNhbTlybC1wd20iLCAmcHdtX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQSIsICZwaW9BX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQiIsICZwaW9CX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvQyIsICZwaW9DX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGlvRCIsICZwaW9EX2NsayksCi0JLyogbW9yZSBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZmYyMDAuc2VyaWFsIiwgJm1jayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmIwMDAwLnNlcmlhbCIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZmI0MDAuc2VyaWFsIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmZmZmYjgwMC5zZXJpYWwiLCAmdXNhcnQyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImZmZmZiYzAwLnNlcmlhbCIsICZ1c2FydDNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDBfY2xrIiwgImZmZmEwMDAwLnRpbWVyIiwgJnRjMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MV9jbGsiLCAiZmZmYTAwMDAudGltZXIiLCAmdGMxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInQyX2NsayIsICJmZmZhMDAwMC50aW1lciIsICZ0YzJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgibWNpX2NsayIsICJmZmZhNDAwMC5tbWMiLCAmbW1jX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmE4MDAwLmkyYyIsICZ0d2kwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmFjMDAwLmkyYyIsICZ0d2kxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmM4MDAwLnB3bSIsICZwd21fY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmM4MDAucHdtIiwgJnB3bV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjQwMC5ncGlvIiwgJnBpb0FfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY2MDAuZ3BpbyIsICZwaW9CX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmODAwLmdwaW8iLCAmcGlvQ19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZmEwMC5ncGlvIiwgJnBpb0RfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJhZGNfY2xrIiwgJnRzY19jbGspLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHVzYXJ0X2Nsb2Nrc19sb29rdXBzW10gPSB7Ci0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImF0bWVsX3VzYXJ0LjAiLCAmbWNrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMSIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMiIsICZ1c2FydDFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuMyIsICZ1c2FydDJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiYXRtZWxfdXNhcnQuNCIsICZ1c2FydDNfY2xrKSwKLX07Ci0KLS8qCi0gKiBUaGUgdHdvIHByb2dyYW1tYWJsZSBjbG9ja3MuCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCi0JLmlkCQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlybF9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3MpOyBpKyspCi0JCWNsa19yZWdpc3RlcihwZXJpcGhfY2xvY2tzW2ldKTsKLQotCWNsa2Rldl9hZGRfdGFibGUocGVyaXBoX2Nsb2Nrc19sb29rdXBzLAotCQkJIEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrc19sb29rdXBzKSk7Ci0JY2xrZGV2X2FkZF90YWJsZSh1c2FydF9jbG9ja3NfbG9va3VwcywKLQkJCSBBUlJBWV9TSVpFKHVzYXJ0X2Nsb2Nrc19sb29rdXBzKSk7Ci0KLQljbGtfcmVnaXN0ZXIoJnBjazApOwotCWNsa19yZWdpc3RlcigmcGNrMSk7Ci19Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBHUElPCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19iYW5rIGF0OTFzYW05cmxfZ3Bpb1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkuaWQJCT0gQVQ5MVNBTTlSTF9JRF9QSU9BLAotCQkucmVnYmFzZQk9IEFUOTFTQU05UkxfQkFTRV9QSU9BLAotCX0sIHsKLQkJLmlkCQk9IEFUOTFTQU05UkxfSURfUElPQiwKLQkJLnJlZ2Jhc2UJPSBBVDkxU0FNOVJMX0JBU0VfUElPQiwKLQl9LCB7Ci0JCS5pZAkJPSBBVDkxU0FNOVJMX0lEX1BJT0MsCi0JCS5yZWdiYXNlCT0gQVQ5MVNBTTlSTF9CQVNFX1BJT0MsCi0JfSwgewotCQkuaWQJCT0gQVQ5MVNBTTlSTF9JRF9QSU9ELAotCQkucmVnYmFzZQk9IEFUOTFTQU05UkxfQkFTRV9QSU9ELAotCX0KLX07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTlSTCBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KQEAgLTMwOSwxMjEgKzM5LDE1IEBACiAJYXQ5MV9pbml0X3NyYW0oMCwgQVQ5MVNBTTlSTF9TUkFNX0JBU0UsIHNyYW1fc2l6ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOXJsX2lvcmVtYXBfcmVnaXN0ZXJzKHZvaWQpCi17Ci0JYXQ5MV9pb3JlbWFwX3JhbWMoMCwgQVQ5MVNBTTlSTF9CQVNFX1NEUkFNQywgNTEyKTsKLQlhdDkxc2FtOTI2eF9pb3JlbWFwX3BpdChBVDkxU0FNOVJMX0JBU0VfUElUKTsKLQlhdDkxc2FtOV9pb3JlbWFwX3NtYygwLCBBVDkxU0FNOVJMX0JBU0VfU01DKTsKLQlhdDkxX2lvcmVtYXBfbWF0cml4KEFUOTFTQU05UkxfQkFTRV9NQVRSSVgpOwotCWF0OTFfcG1fc2V0X3N0YW5kYnkoYXQ5MXNhbTlfc2RyYW1fc3RhbmRieSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOXJsX2luaXRpYWxpemUodm9pZCkKIHsKIAlhcm1fcG1faWRsZSA9IGF0OTFzYW05X2lkbGU7CiAKIAlhdDkxX3N5c2lycV9tYXNrX3J0YyhBVDkxU0FNOVJMX0JBU0VfUlRDKTsKIAlhdDkxX3N5c2lycV9tYXNrX3J0dChBVDkxU0FNOVJMX0JBU0VfUlRUKTsKLQotCS8qIFJlZ2lzdGVyIEdQSU8gc3Vic3lzdGVtICovCi0JYXQ5MV9ncGlvX2luaXQoYXQ5MXNhbTlybF9ncGlvLCA0KTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSByc3RjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05UkxfQkFTRV9SU1RDLAotCQkuZW5kICAgID0gQVQ5MVNBTTlSTF9CQVNFX1JTVEMgKyBTWl8xNiAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IEFUOTFTQU05UkxfQkFTRV9TRFJBTUMsCi0JCS5lbmQgICAgPSBBVDkxU0FNOVJMX0JBU0VfU0RSQU1DICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByc3RjX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiYXQ5MS1zYW05MjYwLXJlc2V0IiwKLQkucmVzb3VyY2UgICAgICAgPSByc3RjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHJzdGNfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hkd2NfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gQVQ5MVNBTTlSTF9CQVNFX1NIRFdDLAotCQkuZW5kICAgID0gQVQ5MVNBTTlSTF9CQVNFX1NIRFdDICsgU1pfMTYgLSAxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoZHdjX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiYXQ5MS1wb3dlcm9mZiIsCi0JLnJlc291cmNlICAgICAgID0gc2hkd2NfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc2hkd2NfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOXJsX3JlZ2lzdGVyX2RldmljZXModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJzdGNfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNoZHdjX2RldmljZSk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgSW50ZXJydXB0IGluaXRpYWxpemF0aW9uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAoMCA9IGxvd2VzdCwgNyA9IGhpZ2hlc3QpLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0OTFzYW05cmxfZGVmYXVsdF9pcnFfcHJpb3JpdHlbTlJfQUlDX0lSUVNdIF9faW5pdGRhdGEgPSB7Ci0JNywJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLQk3LAkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KLQkxLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEQgKi8KLQk1LAkvKiBVU0FSVCAwICovCi0JNSwJLyogVVNBUlQgMSAqLwotCTUsCS8qIFVTQVJUIDIgKi8KLQk1LAkvKiBVU0FSVCAzICovCi0JMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAqLwotCTYsCS8qIFR3by1XaXJlIEludGVyZmFjZSAwICovCi0JNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDEgKi8KLQk1LAkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKi8KLQk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCi0JNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLwotCTAsCS8qIFRpbWVyIENvdW50ZXIgMCAqLwotCTAsCS8qIFRpbWVyIENvdW50ZXIgMSAqLwotCTAsCS8qIFRpbWVyIENvdW50ZXIgMiAqLwotCTAsCi0JMCwJLyogVG91Y2ggU2NyZWVuIENvbnRyb2xsZXIgKi8KLQkwLAkvKiBETUEgQ29udHJvbGxlciAqLwotCTIsCS8qIFVTQiBEZXZpY2UgSGlnaCBzcGVlZCBwb3J0ICovCi0JMiwJLyogTENEIENvbnRyb2xsZXIgKi8KLQk2LAkvKiBBQzk3IENvbnRyb2xsZXIgKi8KLQkwLAotCTAsCi0JMCwKLQkwLAotCTAsCi0JMCwKLQkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05cmxfaW5pdF90aW1lKHZvaWQpCi17Ci0JYXQ5MXNhbTkyNnhfcGl0X2luaXQoTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUyk7CiB9CiAKIEFUOTFfU09DX1NUQVJUKGF0OTFzYW05cmwpCiAJLm1hcF9pbyA9IGF0OTFzYW05cmxfbWFwX2lvLAotCS5kZWZhdWx0X2lycV9wcmlvcml0eSA9IGF0OTFzYW05cmxfZGVmYXVsdF9pcnFfcHJpb3JpdHksCi0JLmV4dGVybl9pcnEgPSAoMSA8PCBBVDkxU0FNOVJMX0lEX0lSUTApLAotCS5pb3JlbWFwX3JlZ2lzdGVycyA9IGF0OTFzYW05cmxfaW9yZW1hcF9yZWdpc3RlcnMsCi0jaWYgZGVmaW5lZChDT05GSUdfT0xEX0NMS19BVDkxKQotCS5yZWdpc3Rlcl9jbG9ja3MgPSBhdDkxc2FtOXJsX3JlZ2lzdGVyX2Nsb2NrcywKLSNlbmRpZgotCS5yZWdpc3Rlcl9kZXZpY2VzID0gYXQ5MXNhbTlybF9yZWdpc3Rlcl9kZXZpY2VzLAogCS5pbml0ID0gYXQ5MXNhbTlybF9pbml0aWFsaXplLAotCS5pbml0X3RpbWUgPSBhdDkxc2FtOXJsX2luaXRfdGltZSwKIEFUOTFfU09DX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2QxYzllLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNjAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlybC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlybF9tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFfbWF0cml4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtYXRtZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0OTFfYWRjLmg+Ci0KLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBIRE1BQyAtIEFIQiBETUEgQ29udHJvbGxlcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUX0hETUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVF9IRE1BQ19NT0RVTEUpCi1zdGF0aWMgdTY0IGhkbWFjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhkbWFjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX0RNQSwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9ETUEgKyBTWl81MTIgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX0RNQSwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9ETUEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdF9oZG1hY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFzYW05cmxfZG1hIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZoZG1hY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBoZG1hY19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhkbWFjX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0X2hkbWFjX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVU0IgSFMgRGV2aWNlIChHYWRnZXQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0FUTUVMX1VTQkEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9BVE1FTF9VU0JBX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JhX3VkY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfVURQSFNfRklGTywKLQkJLmVuZAk9IEFUOTFTQU05UkxfVURQSFNfRklGTyArIFNaXzUxMksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1VEUEhTLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1VEUEhTICsgU1pfMUsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1VEUEhTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1VEUEhTLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotI2RlZmluZSBFUChuYW0sIGlkeCwgbWF4cGt0LCBtYXhiaywgZG1hLCBpc29jKQkJCVwKLQlbaWR4XSA9IHsJCQkJCQlcCi0JCS5uYW1lCQk9IG5hbSwJCQkJXAotCQkuaW5kZXgJCT0gaWR4LAkJCQlcCi0JCS5maWZvX3NpemUJPSBtYXhwa3QsCQkJXAotCQkubnJfYmFua3MJPSBtYXhiaywJCQlcCi0JCS5jYW5fZG1hCT0gZG1hLAkJCQlcCi0JCS5jYW5faXNvYwk9IGlzb2MsCQkJCVwKLQl9Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiYV9lcF9kYXRhIHVzYmFfdWRjX2VwW10gX19pbml0ZGF0YSA9IHsKLQlFUCgiZXAwIiwgMCwgNjQsIDEsIDAsIDApLAotCUVQKCJlcDEiLCAxLCAxMDI0LCAyLCAxLCAxKSwKLQlFUCgiZXAyIiwgMiwgMTAyNCwgMiwgMSwgMSksCi0JRVAoImVwMyIsIDMsIDEwMjQsIDMsIDEsIDApLAotCUVQKCJlcDQiLCA0LCAxMDI0LCAzLCAxLCAwKSwKLQlFUCgiZXA1IiwgNSwgMTAyNCwgMywgMSwgMSksCi0JRVAoImVwNiIsIDYsIDEwMjQsIDMsIDEsIDEpLAotfTsKLQotI3VuZGVmIEVQCi0KLS8qCi0gKiBwZGF0YSBkb2Vzbid0IGhhdmUgcm9vbSBmb3IgYW55IGVuZHBvaW50cywgc28gd2UgbmVlZCB0bwotICogYXBwZW5kIHJvb20gZm9yIHRoZSBvbmVzIHdlIG5lZWQgcmlnaHQgYWZ0ZXIgaXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgewotCXN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgcGRhdGE7Ci0Jc3RydWN0IHVzYmFfZXBfZGF0YSBlcFs3XTsKLX0gdXNiYV91ZGNfZGF0YTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91c2JhX3VkY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX3VzYmFfdWRjIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmdXNiYV91ZGNfZGF0YS5wZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IHVzYmFfdWRjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXNiYV91ZGNfcmVzb3VyY2VzKSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JhKHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JLyoKLQkgKiBJbnZhbGlkIHBpbnMgYXJlIDAgb24gQVQ5MSwgYnV0IHRoZSB1c2JhIGRyaXZlciBpcyBzaGFyZWQKLQkgKiB3aXRoIEFWUjMyLCB3aGljaCB1c2UgbmVnYXRpdmUgdmFsdWVzIGluc3RlYWQuIE9uY2UvaWYKLQkgKiBncGlvX2lzX3ZhbGlkKCkgaXMgcG9ydGVkIHRvIEFUOTEsIHJldmlzaXQgdGhpcyBjb2RlLgotCSAqLwotCXVzYmFfdWRjX2RhdGEucGRhdGEudmJ1c19waW4gPSAtRUlOVkFMOwotCXVzYmFfdWRjX2RhdGEucGRhdGEubnVtX2VwID0gQVJSQVlfU0laRSh1c2JhX3VkY19lcCk7Ci0JbWVtY3B5KHVzYmFfdWRjX2RhdGEuZXAsIHVzYmFfdWRjX2VwLCBzaXplb2YodXNiYV91ZGNfZXApKTsKLQotCWlmIChkYXRhICYmIGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW4pKSB7Ci0JCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+dmJ1c19waW4sIDApOwotCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT52YnVzX3BpbiwgMSk7Ci0JCXVzYmFfdWRjX2RhdGEucGRhdGEudmJ1c19waW4gPSBkYXRhLT52YnVzX3BpbjsKLQl9Ci0KLQkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBieSBVU0IgZGV2aWNlIHBlcmlwaGVyYWwgKi8KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JhX3VkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JhKHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIE1NQyAvIFNECi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTU1DX0FUTUVMTUNJKQotc3RhdGljIHU2NCBtbWNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIG1tY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tY19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9NQ0ksCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9NQ0ksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfTUNJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9tbWNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9tY2kiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tY19kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gbW1jX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbWNpKHNob3J0IG1tY19pZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGRhdGEtPnNsb3RbMF0uYnVzX3dpZHRoKSB7Ci0JCS8qIGlucHV0L2lycSAqLwotCQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5zbG90WzBdLmRldGVjdF9waW4pKSB7Ci0JCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnNsb3RbMF0uZGV0ZWN0X3BpbiwgMSk7Ci0JCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5zbG90WzBdLmRldGVjdF9waW4sIDEpOwotCQl9Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnNsb3RbMF0ud3BfcGluKSkKLQkJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+c2xvdFswXS53cF9waW4sIDEpOwotCi0JCS8qIENMSyAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOwotCi0JCS8qIENNRCAqLwotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDEpOwotCi0JCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAxKTsKLQkJaWYgKGRhdGEtPnNsb3RbMF0uYnVzX3dpZHRoID09IDQpIHsKLQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMywgMSk7Ci0JCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTQsIDEpOwotCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE1LCAxKTsKLQkJfQotCi0JCW1tY19kYXRhID0gKmRhdGE7Ci0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF9tbWNfZGV2aWNlKTsKLQl9Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgTkFORCAvIFNtYXJ0TWVkaWEKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgbmFuZF9kYXRhOwotCi0jZGVmaW5lIE5BTkRfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBOQU5EX0JBU0UsCi0JCS5lbmQJPSBOQU5EX0JBU0UgKyBTWl8yNTZNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9FQ0MsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfRUNDICsgU1pfNTEyIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXRtZWxfbmFuZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX25hbmQiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YQk9ICZuYW5kX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBuYW5kX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobmFuZF9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGNzYTsKLQotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JY3NhID0gYXQ5MV9tYXRyaXhfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOwotCWF0OTFfbWF0cml4X3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfQ1MzQV9TTUNfU01BUlRNRURJQSk7Ci0KLQkvKiBlbmFibGUgcGluICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+ZW5hYmxlX3BpbikpCi0JCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPmVuYWJsZV9waW4sIDEpOwotCi0JLyogcmVhZHkvYnVzeSBwaW4gKi8KLQlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5yZHlfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5yZHlfcGluLCAxKTsKLQotCS8qIGNhcmQgZGV0ZWN0IHBpbiAqLwotCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmRldF9waW4pKQotCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOwotCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAwKTsJCS8qIE5BTkRPRSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNSwgMCk7CQkvKiBOQU5EV0UgKi8KLQotCW5hbmRfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXRtZWxfbmFuZF9kZXZpY2UpOwotfQotCi0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVFdJIChpMmMpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogUHJlZmVyIHRoZSBHUElPIGNvZGUgc2luY2UgdGhlIFRXSSBjb250cm9sbGVyIGlzbid0IHJvYnVzdAotICogKGdldHMgb3ZlcnJ1bnMgYW5kIHVuZGVycnVucyB1bmRlciBsb2FkKSBhbmQgY2FuIG9ubHkgaXNzdWUKLSAqIHJlcGVhdGVkIFNUQVJUcyBpbiBvbmUgc2NlbmFyaW8gKHRoZSBkcml2ZXIgZG9lc24ndCB5ZXQgaGFuZGxlIHRoZW0pLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIHBkYXRhID0gewotCS5zZGFfcGluCQk9IEFUOTFfUElOX1BBMjMsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKLQkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQTI0LAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCi0JLnVkZWxheQkJCT0gMiwJCS8qIH4xMDAga0h6ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3R3aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCi0JLmlkCQkJPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZwZGF0YSwKLX07Ci0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQTIzLCAxKTsJCS8qIFRXRCAoU0RBKSAqLwotCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjMsIDEpOwotCi0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEEyNCwgMSk7CQkvKiBUV0NLIChTQ0wpICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyNCwgMSk7Ci0KLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05cmxfdHdpX2RldmljZSk7Ci19Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0kyQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MV9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHdpX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1RXSTAsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVFdJMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVFdJMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9UV0kwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF90d2lfZGV2aWNlID0gewotCS5uYW1lCQk9ICJpMmMtYXQ5MXNhbTlnMjAiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHR3aV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHR3aV9yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQotewotCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjMsIDApOwkJLyogVFdEICovCi0JYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMywgMSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsJCS8qIFRXQ0sgKi8KLQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI0LCAxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG5yX2RldmljZXMpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF90d2lfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFNQSQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLXN0YXRpYyB1NjQgc3BpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9TUEksCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfU1BJICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9TUEksCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfU1BJLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9zcGlfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9LAotCS5yZXNvdXJjZQk9IHNwaV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaV9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEEyOCwgQVQ5MV9QSU5fUEI3LCBBVDkxX1BJTl9QRDgsIEFUOTFfUElOX1BEOSB9OwotCi0KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGNzX3BpbjsKLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDApOwkvKiBNSVNPICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNiwgMCk7CS8qIE1PU0kgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsJLyogU1BDSyAqLwotCi0JLyogRW5hYmxlIFNQSSBjaGlwLXNlbGVjdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfZGV2aWNlczsgaSsrKSB7Ci0JCWlmIChkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSkKLQkJCWNzX3BpbiA9ICh1bnNpZ25lZCBsb25nKSBkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YTsKLQkJZWxzZQotCQkJY3NfcGluID0gc3BpX3N0YW5kYXJkX2NzW2RldmljZXNbaV0uY2hpcF9zZWxlY3RdOwotCi0JCWlmICghZ3Bpb19pc192YWxpZChjc19waW4pKQotCQkJY29udGludWU7Ci0KLQkJLyogZW5hYmxlIGNoaXAtc2VsZWN0IHBpbiAqLwotCQlhdDkxX3NldF9ncGlvX291dHB1dChjc19waW4sIDEpOwotCi0JCS8qIHBhc3MgY2hpcC1zZWxlY3QgcGluIHRvIGRyaXZlciAqLwotCQlkZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YSA9ICh2b2lkICopIGNzX3BpbjsKLQl9Ci0KLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhkZXZpY2VzLCBucl9kZXZpY2VzKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05cmxfc3BpX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NwaShzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBBQzk3Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQotc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX0FDOTdDLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX0FDOTdDICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9BQzk3QywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9BQzk3QywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfYWM5N19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0bWVsX2FjOTdjIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkuZG1hX21hc2sJCT0gJmFjOTdfZG1hbWFzaywKLQkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhYzk3X2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSBhYzk3X3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYWM5N19yZXNvdXJjZXMpLAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm47Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEsIDApOwkvKiBBQzk3RlMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDIsIDApOwkvKiBBQzk3Q0sgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDMsIDApOwkvKiBBQzk3VFggKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDQsIDApOwkvKiBBQzk3UlggKi8KLQotCS8qIHJlc2V0ICovCi0JaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmVzZXRfcGluKSkKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cmVzZXRfcGluLCAwKTsKLQotCWFjOTdfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF9hYzk3X2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIExDRCBDb250cm9sbGVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKLXN0YXRpYyB1NjQgbGNkY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgbGNkY19kYXRhOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGxjZGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0xDRENfQkFTRSwKLQkJLmVuZAk9IEFUOTFTQU05UkxfTENEQ19CQVNFICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX0xDREMsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfTENEQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfbGNkY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFzYW05cmwtbGNkZmIiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkJCS5kbWFfbWFzawkJPSAmbGNkY19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmxjZGNfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IGxjZGNfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsY2RjX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbGNkYyhzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgKmRhdGEpCi17Ci0JaWYgKCFkYXRhKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzEsIDApOwkvKiBMQ0RQV1IgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzUsIDApOwkvKiBMQ0RIU1lOQyAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNiwgMCk7CS8qIExDRERPVENLICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM3LCAwKTsJLyogTENEREVOICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMzLCAwKTsJLyogTENEQ0MgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzksIDApOwkvKiBMQ0REMyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTAsIDApOwkvKiBMQ0RENCAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTEsIDApOwkvKiBMQ0RENSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTIsIDApOwkvKiBMQ0RENiAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTMsIDApOwkvKiBMQ0RENyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTUsIDApOwkvKiBMQ0REMTEgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzE2LCAwKTsJLyogTENERDEyICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxNywgMCk7CS8qIExDREQxMyAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTgsIDApOwkvKiBMQ0REMTQgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzE5LCAwKTsJLyogTENERDE1ICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyMCwgMCk7CS8qIExDREQxOCAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjEsIDApOwkvKiBMQ0REMTkgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIyLCAwKTsJLyogTENERDIwICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyMywgMCk7CS8qIExDREQyMSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjQsIDApOwkvKiBMQ0REMjIgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI1LCAwKTsJLyogTENERDIzICovCi0KLQlsY2RjX2RhdGEgPSAqZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFfbGNkY19kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqZGF0YSkge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgVGltZXIvQ291bnRlciBibG9jawotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIENPTkZJR19BVE1FTF9UQ0xJQgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRjYl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9UQ0IwLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1RDQjAgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RDMCwKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9UQzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVEMxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RDMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9UQzIsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVEMyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF90Y2JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHRjYl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYl9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF90Y2JfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBBREMgYW5kIFRvdWNoc2NyZWVuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQVQ5MV9BREMpCi1zdGF0aWMgc3RydWN0IGF0OTFfYWRjX2RhdGEgYWRjX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWRjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1RTQywKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9UU0MgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1RTQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9UU0MsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfYWRjX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiYXQ5MXNhbTlybC1hZGMiLAotCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgICAgICAgICAgICA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgID0gJmFkY19kYXRhLAotCX0sCi0JLnJlc291cmNlICAgICAgID0gYWRjX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGFkY19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX2FkY190cmlnZ2VyIGF0OTFfYWRjX3RyaWdnZXJzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZSA9ICJleHRlcm5hbC1yaXNpbmciLAotCQkudmFsdWUgPSAxLAotCQkuaXNfZXh0ZXJuYWwgPSB0cnVlLAotCX0sCi0JWzFdID0gewotCQkubmFtZSA9ICJleHRlcm5hbC1mYWxsaW5nIiwKLQkJLnZhbHVlID0gMiwKLQkJLmlzX2V4dGVybmFsID0gdHJ1ZSwKLQl9LAotCVsyXSA9IHsKLQkJLm5hbWUgPSAiZXh0ZXJuYWwtYW55IiwKLQkJLnZhbHVlID0gMywKLQkJLmlzX2V4dGVybmFsID0gdHJ1ZSwKLQl9LAotCVszXSA9IHsKLQkJLm5hbWUgPSAiY29udGludW91cyIsCi0JCS52YWx1ZSA9IDYsCi0JCS5pc19leHRlcm5hbCA9IGZhbHNlLAotCX0sCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWRjKHN0cnVjdCBhdDkxX2FkY19kYXRhICpkYXRhKQotewotCWlmICghZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKHRlc3RfYml0KDAsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNywgMCk7Ci0JaWYgKHRlc3RfYml0KDEsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExOCwgMCk7Ci0JaWYgKHRlc3RfYml0KDIsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExOSwgMCk7Ci0JaWYgKHRlc3RfYml0KDMsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMCk7Ci0JaWYgKHRlc3RfYml0KDQsICZkYXRhLT5jaGFubmVsc191c2VkKSkKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ2LCAwKTsKLQlpZiAodGVzdF9iaXQoNSwgJmRhdGEtPmNoYW5uZWxzX3VzZWQpKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDcsIDApOwotCi0JaWYgKGRhdGEtPnVzZV9leHRlcm5hbF90cmlnZ2VycykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMCk7Ci0KLQlkYXRhLT5zdGFydHVwX3RpbWUgPSA0MDsKLQlkYXRhLT50cmlnZ2VyX251bWJlciA9IDQ7Ci0JZGF0YS0+dHJpZ2dlcl9saXN0ID0gYXQ5MV9hZGNfdHJpZ2dlcnM7Ci0KLQlhZGNfZGF0YSA9ICpkYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9hZGNfZGV2aWNlKTsKLX0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWRjKHN0cnVjdCBhdDkxX2FkY19kYXRhICpkYXRhKSB7fQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgUlRDCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDBfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9ydGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdDkxX3J0YyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX3J0Y19kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIFJUVAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydHRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfUlRULAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1JUVCArIFNaXzE2IC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3J0dF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImF0OTFfcnR0IiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSBydHRfcmVzb3VyY2VzLAotfTsKLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTkpCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGModm9pZCkKLXsKLQlhdDkxc2FtOXJsX3J0dF9kZXZpY2UubmFtZSA9ICJydGMtYXQ5MXNhbTkiOwotCS8qCi0JICogVGhlIHNlY29uZCByZXNvdXJjZSBpcyBuZWVkZWQ6Ci0JICogR1BCUiB3aWxsIHNlcnZlIGFzIHRoZSBzdG9yYWdlIGZvciBSVEMgdGltZSBvZmZzZXQKLQkgKi8KLQlhdDkxc2FtOXJsX3J0dF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDM7Ci0JcnR0X3Jlc291cmNlc1sxXS5zdGFydCA9IEFUOTFTQU05UkxfQkFTRV9HUEJSICsKLQkJCQkgNCAqIENPTkZJR19SVENfRFJWX0FUOTFTQU05X0dQQlI7Ci0JcnR0X3Jlc291cmNlc1sxXS5lbmQgPSBydHRfcmVzb3VyY2VzWzFdLnN0YXJ0ICsgMzsKLQlydHRfcmVzb3VyY2VzWzJdLnN0YXJ0ID0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUzsKLQlydHRfcmVzb3VyY2VzWzJdLmVuZCA9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MV9JRF9TWVM7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHRfcnRjKHZvaWQpCi17Ci0JLyogT25seSBvbmUgcmVzb3VyY2UgaXMgbmVlZGVkOiBSVFQgbm90IHVzZWQgYXMgUlRDICovCi0JYXQ5MXNhbTlybF9ydHRfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0KHZvaWQpCi17Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0dF9ydGMoKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05cmxfcnR0X2RldmljZSk7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBXYXRjaGRvZwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1dEVCwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9XRFQgKyBTWl8xNiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfd2R0X2RldmljZSA9IHsKLQkubmFtZQkJPSAiYXQ5MV93ZHQiLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05cmxfd2R0X2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV93YXRjaGRvZyh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBQV00KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX1BXTV9BVE1FTCkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHdtX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1BXTUMsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfUFdNQyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfUFdNQywKLQkJLmVuZAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9QV01DLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9wd20wX2RldmljZSA9IHsKLQkubmFtZQk9ICJhdDkxc2FtOXJsLXB3bSIsCi0JLmlkCT0gLTEsCi0JLnJlc291cmNlCT0gcHdtX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHdtX3Jlc291cmNlcyksCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcHdtKHUzMiBtYXNrKQotewotCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00wKSkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAxKTsJLyogZW5hYmxlIFBXTTAgKi8KLQotCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00xKSkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEI5LCAxKTsJLyogZW5hYmxlIFBXTTEgKi8KLQotCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00yKSkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQ1LCAxKTsJLyogZW5hYmxlIFBXTTIgKi8KLQotCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00zKSkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQ4LCAxKTsJLyogZW5hYmxlIFBXTTMgKi8KLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF9wd20wX2RldmljZSk7Ci19Ci0jZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3B3bSh1MzIgbWFzaykge30KLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU1NDIC0tIFN5bmNocm9ub3VzIFNlcmlhbCBDb250cm9sbGVyCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDKSB8fCBkZWZpbmVkKENPTkZJR19BVE1FTF9TU0NfTU9EVUxFKQotc3RhdGljIHU2NCBzc2MwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYzBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfU1NDMCwKLQkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9TU0MwICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IE5SX0lSUVNfTEVHQUNZICsgQVQ5MVNBTTlSTF9JRF9TU0MwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1NTQzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3NzYzBfZGV2aWNlID0gewotCS5uYW1lCT0gImF0OTFybTkyMDBfc3NjIiwKLQkuaWQJPSAwLAotCS5kZXYJPSB7Ci0JCS5kbWFfbWFzawkJPSAmc3NjMF9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gc3NjMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMF9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTUsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1JEKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE2LCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SSykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkYpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjIsIDEpOwotfQotCi1zdGF0aWMgdTY0IHNzYzFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9TU0MxLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1NTQzEgKyBTWl8xNksgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0CT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1NTQzEsCi0JCS5lbmQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfU1NDMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfc3NjMV9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiYXQ5MXJtOTIwMF9zc2MiLAotCS5pZAk9IDEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzc2MxX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBzc2MxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3NjMV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9zc2MxX3BpbnModW5zaWduZWQgcGlucykKLXsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19URikKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyOSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMzAsIDEpOwotCWlmIChwaW5zICYgQVRNRUxfU1NDX1REKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAxKTsKLQlpZiAocGlucyAmIEFUTUVMX1NTQ19SRCkKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExNCwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOSwgMSk7Ci0JaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkYpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOCwgMSk7Ci19Ci0KLS8qCi0gKiBTU0MgY29udHJvbGxlcnMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggbGlicmFyeSBjb2RlLCBpbnN0ZWFkIG9mIGFueQotICoga2luZCBvZiBhbGwtc2luZ2luZy9hbGwtZGFuY2luZyBkcml2ZXIuICBGb3IgZXhhbXBsZSBvbmUgY291bGQgYmUKLSAqIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIEkyUyBhdWRpbyBjb2RlYydzIGRyaXZlciwgd2hpbGUgYW5vdGhlciBvbmUKLSAqIG9uIHRoZSBzYW1lIHN5c3RlbSBtaWdodCBiZSB1c2VkIGJ5IGEgY3VzdG9tIGRhdGEgY2FwdHVyZSBkcml2ZXIuCi0gKi8KLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCS8qCi0JICogTk9URTogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIG1hdGNoaW5nCi0JICogInBpbnMiIHRvIHdoYXRldmVyIHdpbGwgYmUgdXNpbmcgZWFjaCBwYXJ0aWN1bGFyIGNvbnRyb2xsZXIuCi0JICovCi0Jc3dpdGNoIChpZCkgewotCWNhc2UgQVQ5MVNBTTlSTF9JRF9TU0MwOgotCQlwZGV2ID0gJmF0OTFzYW05cmxfc3NjMF9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MwX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWNhc2UgQVQ5MVNBTTlSTF9JRF9TU0MxOgotCQlwZGV2ID0gJmF0OTFzYW05cmxfc3NjMV9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV9zc2MxX3BpbnMocGlucyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Ci19Ci0KLSNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBVQVJUCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYmd1X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX0RCR1UsCi0JCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfREJHVSArIFNaXzUxMiAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFfSURfU1lTLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxX0lEX1NZUywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIGRiZ3VfZGF0YSA9IHsKLQkudXNlX2RtYV90eAk9IDAsCi0JLnVzZV9kbWFfcngJPSAwLAkJLyogREJHVSBub3QgY2FwYWJsZSBvZiByZWNlaXZlIERNQSAqLwotfTsKLQotc3RhdGljIHU2NCBkYmd1X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX2RiZ3VfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZkYmd1X2RtYW1hc2ssCi0JCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJCQkucGxhdGZvcm1fZGF0YQkJPSAmZGJndV9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gZGJndV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiZ3VfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfZGJndV9waW5zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMSwgMCk7CQkvKiBEUlhEICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMiwgMSk7CQkvKiBEVFhEICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVVMwLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1VTMCArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMwLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1VTMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQwX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfdWFydDBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MF9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQwX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MF9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAxKTsJCS8qIFRYRDAgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTcsIDApOwkJLyogUlhEMCAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAwKTsJLyogUlRTMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDApOwkvKiBDVFMwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0RTUikKLQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNCwgMCk7CS8qIERTUjAgKi8KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfRFRSKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDE1LCAwKTsJLyogRFRSMCAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9EQ0QpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTYsIDApOwkvKiBEQ0QwICovCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JJKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDE3LCAwKTsJLyogUkkwICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVVMxLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1VTMSArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMxLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1VTMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQxX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfdWFydDFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDIsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MV9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQxX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0MV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQxX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMSk7CQkvKiBUWEQxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7CQkvKiBSWEQxICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogUlRTMSAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTksIDApOwkvKiBDVFMxICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVVMyLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1VTMiArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMyLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1VTMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQyX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfdWFydDJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDMsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0Ml9kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQyX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0Ml9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQyX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0Ml9waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMywgMSk7CQkvKiBUWEQyICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNCwgMCk7CQkvKiBSWEQyICovCi0KLQlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQotCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAwKTsJLyogUlRTMiAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMzAsIDApOwkvKiBDVFMyICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVVMzLAotCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1VTMyArIFNaXzE2SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05UkxfSURfVVMzLAotCQkuZW5kCT0gTlJfSVJRU19MRUdBQ1kgKyBBVDkxU0FNOVJMX0lEX1VTMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQzX2RhdGEgPSB7Ci0JLnVzZV9kbWFfdHgJPSAxLAotCS51c2VfZG1hX3J4CT0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgdWFydDNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfdWFydDNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCi0JLmlkCQk9IDQsCi0JLmRldgkJPSB7Ci0JCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0M19kbWFtYXNrLAotCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQzX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UJPSB1YXJ0M19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQzX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0M19waW5zKHVuc2lnbmVkIHBpbnMpCi17Ci0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIwLCAxKTsJCS8qIFRYRDMgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOwkJLyogUlhEMyAqLwotCi0JaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKLQkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQ0LCAwKTsJLyogUlRTMyAqLwotCWlmIChwaW5zICYgQVRNRUxfVUFSVF9DVFMpCi0JCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BEMywgMCk7CS8qIENUUzMgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdGRhdGEgYXQ5MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8KLQotdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhICpwZGF0YTsKLQotCXN3aXRjaCAoaWQpIHsKLQkJY2FzZSAwOgkJLyogREJHVSAqLwotCQkJcGRldiA9ICZhdDkxc2FtOXJsX2RiZ3VfZGV2aWNlOwotCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTlSTF9JRF9VUzA6Ci0JCQlwZGV2ID0gJmF0OTFzYW05cmxfdWFydDBfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0MF9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTlSTF9JRF9VUzE6Ci0JCQlwZGV2ID0gJmF0OTFzYW05cmxfdWFydDFfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0MV9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTlSTF9JRF9VUzI6Ci0JCQlwZGV2ID0gJmF0OTFzYW05cmxfdWFydDJfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVQ5MVNBTTlSTF9JRF9VUzM6Ci0JCQlwZGV2ID0gJmF0OTFzYW05cmxfdWFydDNfZGV2aWNlOwotCQkJY29uZmlndXJlX3VzYXJ0M19waW5zKHBpbnMpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JfQotCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JcGRhdGEtPm51bSA9IHBvcnRucjsJCS8qIHVwZGF0ZSB0byBtYXBwZWQgSUQgKi8KLQotCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKLQkJYXQ5MV91YXJ0c1twb3J0bnJdID0gcGRldjsKLX0KLQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKLQkJaWYgKGF0OTFfdWFydHNbaV0pCi0JCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7Ci0JfQotfQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYwotICogc2V0dXAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlhdDkxX2FkZF9kZXZpY2VfaGRtYWMoKTsKLQlhdDkxX2FkZF9kZXZpY2VfcnRjKCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwotCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwotCWF0OTFfYWRkX2RldmljZV90YygpOwotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05eDUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXg1LmMKaW5kZXggMDI4MjY4ZmYuLmYwZDVhNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXg1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05eDUuYwpAQCAtNiwzMTcgKzYsMTEgQEAKICAqIExpY2Vuc2VkIHVuZGVyIEdQTHYyIG9yIGxhdGVyLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay9hdDkxX3BtYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXg1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KLQotI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19PTERfQ0xLX0FUOTEpCi0jaW5jbHVkZSAiY2xvY2suaCIKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgQ2xvY2tzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBwaW9BQl9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0FCX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1BJT0FCLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQ0RfY2xrID0gewotCS5uYW1lCQk9ICJwaW9DRF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9QSU9DRCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNtZF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNtZF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9TTUQsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVVNBUlQwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VTQVJUMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0Ml9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0Ml9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9VU0FSVDIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0vKiBVU0FSVDMgY2xvY2sgLSBPbmx5IGZvciBzYW05ZzI1L3NhbTl4MjUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0M19jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0M19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9VU0FSVDMsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2kwX2NsayA9IHsKLQkubmFtZQkJPSAidHdpMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9UV0kwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdHdpMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInR3aTFfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfVFdJMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHR3aTJfY2xrID0gewotCS5uYW1lCQk9ICJ0d2kyX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1RXSTIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtbWMwX2NsayA9IHsKLQkubmFtZQkJPSAibWNpMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9NQ0kwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfU1BJMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaTFfY2xrID0gewotCS5uYW1lCQk9ICJzcGkxX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1NQSTEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MF9jbGsgPSB7Ci0JLm5hbWUJCT0gInVhcnQwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VBUlQwLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfY2xrID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9VQVJUMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjYjBfY2xrID0gewotCS5uYW1lCQk9ICJ0Y2IwX2NsayIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1RDQiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGsgPSB7Ci0JLm5hbWUJCT0gInB3bV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9QV00sCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBhZGNfY2xrID0gewotCS5uYW1lCQk9ICJhZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfQURDLAotCS50eXBlCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBhZGNfb3BfY2xrID0gewotCS5uYW1lCQk9ICJhZGNfb3BfY2xrIiwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotCS5yYXRlX2h6CT0gNTAwMDAwMCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBkbWEwX2NsayA9IHsKLQkubmFtZQkJPSAiZG1hMF9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9ETUEwLAotCS50eXBlCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBkbWExX2NsayA9IHsKLQkubmFtZQkJPSAiZG1hMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9ETUExLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWhwaHNfY2xrID0gewotCS5uYW1lCQk9ICJ1aHBocyIsCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVg1X0lEX1VIUEhTLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdWRwaHNfY2xrID0gewotCS5uYW1lCQk9ICJ1ZHBoc19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9VRFBIUywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLS8qIGVtYWMwIGNsb2NrIC0gT25seSBmb3Igc2FtOWcyNS9zYW05eDI1L3NhbTlnMzUvc2FtOXgzNSAqLwotc3RhdGljIHN0cnVjdCBjbGsgbWFjYjBfY2xrID0gewotCS5uYW1lCQk9ICJwY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfRU1BQzAsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0vKiBsY2QgY2xvY2sgLSBPbmx5IGZvciBzYW05ZzE1L3NhbTlnMzUvc2FtOXgzNSAqLwotc3RhdGljIHN0cnVjdCBjbGsgbGNkY19jbGsgPSB7Ci0JLm5hbWUJCT0gImxjZGNfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfTENEQywKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLS8qIGlzaSBjbG9jayAtIE9ubHkgZm9yIHNhbTlnMjUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGlzaV9jbGsgPSB7Ci0JLm5hbWUJCT0gImlzaV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9JU0ksCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBtbWMxX2NsayA9IHsKLQkubmFtZQkJPSAibWNpMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9NQ0kxLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotLyogZW1hYzEgY2xvY2sgLSBPbmx5IGZvciBzYW05eDI1ICovCi1zdGF0aWMgc3RydWN0IGNsayBtYWNiMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInBjbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9FTUFDMSwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzY19jbGsgPSB7Ci0JLm5hbWUJCT0gInNzY19jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9TU0MsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKLX07Ci0vKiBjYW4wIGNsb2NrIC0gT25seSBmb3Igc2FtOXgzNSAqLwotc3RhdGljIHN0cnVjdCBjbGsgY2FuMF9jbGsgPSB7Ci0JLm5hbWUJCT0gImNhbjBfY2xrIiwKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05WDVfSURfQ0FOMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAotfTsKLS8qIGNhbjEgY2xvY2sgLSBPbmx5IGZvciBzYW05eDM1ICovCi1zdGF0aWMgc3RydWN0IGNsayBjYW4xX2NsayA9IHsKLQkubmFtZQkJPSAiY2FuMV9jbGsiLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlYNV9JRF9DQU4xLAotCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBpb0FCX2NsaywKLQkmcGlvQ0RfY2xrLAotCSZzbWRfY2xrLAotCSZ1c2FydDBfY2xrLAotCSZ1c2FydDFfY2xrLAotCSZ1c2FydDJfY2xrLAotCSZ0d2kwX2NsaywKLQkmdHdpMV9jbGssCi0JJnR3aTJfY2xrLAotCSZtbWMwX2NsaywKLQkmc3BpMF9jbGssCi0JJnNwaTFfY2xrLAotCSZ1YXJ0MF9jbGssCi0JJnVhcnQxX2NsaywKLQkmdGNiMF9jbGssCi0JJnB3bV9jbGssCi0JJmFkY19jbGssCi0JJmFkY19vcF9jbGssCi0JJmRtYTBfY2xrLAotCSZkbWExX2NsaywKLQkmdWhwaHNfY2xrLAotCSZ1ZHBoc19jbGssCi0JJm1tYzFfY2xrLAotCSZzc2NfY2xrLAotCS8vIGlycTAKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBwZXJpcGhfY2xvY2tzX2xvb2t1cHNbXSA9IHsKLQkvKiBsb29rdXAgdGFibGUgZm9yIERUIGVudHJpZXMgKi8KLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZmZmZmYyMDAuc2VyaWFsIiwgJm1jayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImY4MDFjMDAwLnNlcmlhbCIsICZ1c2FydDBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwMjAwMDAuc2VyaWFsIiwgJnVzYXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ1c2FydCIsICJmODAyNDAwMC5zZXJpYWwiLCAmdXNhcnQyX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImY4MDI4MDAwLnNlcmlhbCIsICZ1c2FydDNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidXNhcnQiLCAiZjgwNDAwMDAuc2VyaWFsIiwgJnVhcnQwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoInVzYXJ0IiwgImY4MDQ0MDAwLnNlcmlhbCIsICZ1YXJ0MV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZjgwMDgwMDAudGltZXIiLCAmdGNiMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiZjgwMGMwMDAudGltZXIiLCAmdGNiMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJtY2lfY2xrIiwgImYwMDA4MDAwLm1tYyIsICZtbWMwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoIm1jaV9jbGsiLCAiZjAwMGMwMDAubW1jIiwgJm1tYzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiZG1hX2NsayIsICJmZmZmZWMwMC5kbWEtY29udHJvbGxlciIsICZkbWEwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImRtYV9jbGsiLCAiZmZmZmVlMDAuZG1hLWNvbnRyb2xsZXIiLCAmZG1hMV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgImYwMDEwMDAwLnNzYyIsICZzc2NfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZjgwMTAwMDAuaTJjIiwgJnR3aTBfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZjgwMTQwMDAuaTJjIiwgJnR3aTFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZjgwMTgwMDAuaTJjIiwgJnR3aTJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgic3BpX2NsayIsICJmMDAwMDAwMC5zcGkiLCAmc3BpMF9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJzcGlfY2xrIiwgImYwMDA0MDAwLnNwaSIsICZzcGkxX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmNDAwLmdwaW8iLCAmcGlvQUJfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZmZmZmY2MDAuZ3BpbyIsICZwaW9BQl9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKE5VTEwsICJmZmZmZjgwMC5ncGlvIiwgJnBpb0NEX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoTlVMTCwgImZmZmZmYTAwLmdwaW8iLCAmcGlvQ0RfY2xrKSwKLQkvKiBhZGRpdGlvbmFsIGZha2UgY2xvY2sgZm9yIG1hY2JfaGNsayAqLwotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgImY4MDJjMDAwLmV0aGVybmV0IiwgJm1hY2IwX2NsayksCi0JQ0xLREVWX0NPTl9ERVZfSUQoImhjbGsiLCAiZjgwMzAwMDAuZXRoZXJuZXQiLCAmbWFjYjFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgiaGNsayIsICI2MDAwMDAub2hjaSIsICZ1aHBoc19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJvaGNpX2NsayIsICI2MDAwMDAub2hjaSIsICZ1aHBoc19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJlaGNpX2NsayIsICI3MDAwMDAuZWhjaSIsICZ1aHBoc19jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJoY2xrIiwgIjUwMDAwMC5nYWRnZXQiLCAmdXRtaV9jbGspLAotCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgIjUwMDAwMC5nYWRnZXQiLCAmdWRwaHNfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRChOVUxMLCAiZjgwMzQwMDAucHdtIiwgJnB3bV9jbGspLAotfTsKLQotLyoKLSAqIFRoZSB0d28gcHJvZ3JhbW1hYmxlIGNsb2Nrcy4KLSAqIFlvdSBtdXN0IGNvbmZpZ3VyZSBwaW4gbXVsdGlwbGV4aW5nIHRvIGJyaW5nIHRoZXNlIHNpZ25hbHMgb3V0LgotICovCi1zdGF0aWMgc3RydWN0IGNsayBwY2swID0gewotCS5uYW1lCQk9ICJwY2swIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0swLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMCwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwY2sxID0gewotCS5uYW1lCQk9ICJwY2sxIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0sxLAotCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKLQkuaWQJCT0gMSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOXg1X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrcyk7IGkrKykKLQkJY2xrX3JlZ2lzdGVyKHBlcmlwaF9jbG9ja3NbaV0pOwotCi0JY2xrZGV2X2FkZF90YWJsZShwZXJpcGhfY2xvY2tzX2xvb2t1cHMsCi0JCQkgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzX2xvb2t1cHMpKTsKLQotCWlmIChjcHVfaXNfYXQ5MXNhbTlnMjUoKQotCXx8IGNwdV9pc19hdDkxc2FtOXgyNSgpKQotCQljbGtfcmVnaXN0ZXIoJnVzYXJ0M19jbGspOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcyNSgpCi0JfHwgY3B1X2lzX2F0OTFzYW05eDI1KCkKLQl8fCBjcHVfaXNfYXQ5MXNhbTlnMzUoKQotCXx8IGNwdV9pc19hdDkxc2FtOXgzNSgpKQotCQljbGtfcmVnaXN0ZXIoJm1hY2IwX2Nsayk7Ci0KLQlpZiAoY3B1X2lzX2F0OTFzYW05ZzE1KCkKLQl8fCBjcHVfaXNfYXQ5MXNhbTlnMzUoKQotCXx8IGNwdV9pc19hdDkxc2FtOXgzNSgpKQotCQljbGtfcmVnaXN0ZXIoJmxjZGNfY2xrKTsKLQotCWlmIChjcHVfaXNfYXQ5MXNhbTlnMjUoKSkKLQkJY2xrX3JlZ2lzdGVyKCZpc2lfY2xrKTsKLQotCWlmIChjcHVfaXNfYXQ5MXNhbTl4MjUoKSkKLQkJY2xrX3JlZ2lzdGVyKCZtYWNiMV9jbGspOwotCi0JaWYgKGNwdV9pc19hdDkxc2FtOXgyNSgpCi0JfHwgY3B1X2lzX2F0OTFzYW05eDM1KCkpIHsKLQkJY2xrX3JlZ2lzdGVyKCZjYW4wX2Nsayk7Ci0JCWNsa19yZWdpc3RlcigmY2FuMV9jbGspOwotCX0KLQotCWNsa19yZWdpc3RlcigmcGNrMCk7Ci0JY2xrX3JlZ2lzdGVyKCZwY2sxKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGF0OTFzYW05eDVfcmVnaXN0ZXJfY2xvY2tzCU5VTEwKLSNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIEFUOTFTQU05eDUgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCkBAIC0zMzgsNiArMzIsNSBAQAogCiBBVDkxX1NPQ19TVEFSVChhdDkxc2FtOXg1KQogCS5tYXBfaW8gPSBhdDkxc2FtOXg1X21hcF9pbywKLQkucmVnaXN0ZXJfY2xvY2tzID0gYXQ5MXNhbTl4NV9yZWdpc3Rlcl9jbG9ja3MsCiAJLmluaXQgPSBhdDkxc2FtOXg1X2luaXRpYWxpemUsCiBBVDkxX1NPQ19FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxeDQwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXg0MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTIzZjFjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxeDQwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTF4NDAuYwotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNywgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXg0MC5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9zdC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotCi0vKgotICogRXhwb3J0IHRoZSBjbG9jayBmdW5jdGlvbnMgZm9yIHRoZSBBVDkxWDQwLiBTb21lIGV4dGVybmFsIGNvZGUgY29tbW9uCi0gKiB0byBhbGwgQVQ5MSBmYW1pbHkgcGFydHMgcmVseXMgb24gdGhpcywgbGlrZSB0aGUgZ3BpbyBhbmQgc2VyaWFsIHN1cHBvcnQuCi0gKi8KLWludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci19Ci0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gQVQ5MVg0MF9NQVNURVJfQ0xPQ0s7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTF4NDBfaWRsZSh2b2lkKQotewotCS8qCi0JICogRGlzYWJsZSB0aGUgcHJvY2Vzc29yIGNsb2NrLiAgVGhlIHByb2Nlc3NvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKLQkgKiByZS1lbmFibGVkIGJ5IGFuIGludGVycnVwdCBvciBieSBhIHJlc2V0LgotCSAqLwotCV9fcmF3X3dyaXRlbChBVDkxX1BTX0NSX0NQVSwgQVQ5MV9JT19QMlYoQVQ5MV9QU19DUikpOwotCWNwdV9kb19pZGxlKCk7Ci19Ci0KLXZvaWQgX19pbml0IGF0OTF4NDBfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCi17Ci0JYXJtX3BtX2lkbGUgPSBhdDkxeDQwX2lkbGU7Ci19Ci0KLS8qCi0gKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MXg0MF9kZWZhdWx0X2lycV9wcmlvcml0eVtOUl9BSUNfSVJRU10gX19pbml0ZGF0YSA9IHsKLQk3LAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKSAqLwotCTAsCS8qIFN5c3RlbSBQZXJpcGhlcmFscyAqLwotCTAsCS8qIFVTQVJUIDAgKi8KLQkwLAkvKiBVU0FSVCAxICovCi0JMiwJLyogVGltZXIgQ291bnRlciAwICovCi0JMiwJLyogVGltZXIgQ291bnRlciAxICovCi0JMiwJLyogVGltZXIgQ291bnRlciAyICovCi0JMCwJLyogV2F0Y2hkb2cgdGltZXIgKi8KLQkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLQkwLAkvKiBSZXNlcnZlZCAqLwotCTAsCS8qIFJlc2VydmVkICovCi0JMCwJLyogUmVzZXJ2ZWQgKi8KLQkwLAkvKiBSZXNlcnZlZCAqLwotCTAsCS8qIFJlc2VydmVkICovCi0JMCwJLyogUmVzZXJ2ZWQgKi8KLQkwLAkvKiBSZXNlcnZlZCAqLwotCTAsCS8qIEV4dGVybmFsIElSUTAgKi8KLQkwLAkvKiBFeHRlcm5hbCBJUlExICovCi0JMCwJLyogRXh0ZXJuYWwgSVJRMiAqLwotfTsKLQotdm9pZCBfX2luaXQgYXQ5MXg0MF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W05SX0FJQ19JUlFTXSkKLXsKLQl1MzIgIGV4dGVybl9pcnEgPSAoMSA8PCBBVDkxWDQwX0lEX0lSUTApIHwgKDEgPDwgQVQ5MVg0MF9JRF9JUlExKQotCQkJfCAoMSA8PCBBVDkxWDQwX0lEX0lSUTIpOwotCWlmICghcHJpb3JpdHkpCi0JCXByaW9yaXR5ID0gYXQ5MXg0MF9kZWZhdWx0X2lycV9wcmlvcml0eTsKLQotCWF0OTFfYWljX2luaXQocHJpb3JpdHksIGV4dGVybl9pcnEpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTF4NDBfdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTF4NDBfdGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2QwYmYyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxeDQwX3RpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXg0MF90aW1lLmMKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDcsIEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXg0MC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLQotI2luY2x1ZGUgImF0OTFfdGMuaCIKLQotI2RlZmluZSBhdDkxX3RjX3JlYWQoZmllbGQpIFwKLQlfX3Jhd19yZWFkbChBVDkxX0lPX1AyVihBVDkxX1RDKSArIGZpZWxkKQotCi0jZGVmaW5lIGF0OTFfdGNfd3JpdGUoZmllbGQsIHZhbHVlKSBcCi0JX19yYXdfd3JpdGVsKHZhbHVlLCBBVDkxX0lPX1AyVihBVDkxX1RDKSArIGZpZWxkKQotCi0vKgotICoJMyBjb3VudGVyL3RpbWVyIHVuaXRzIHByZXNlbnQuCi0gKi8KLSNkZWZpbmUJQVQ5MV9UQ19DTEswQkFTRQkwCi0jZGVmaW5lCUFUOTFfVENfQ0xLMUJBU0UJMHg0MAotI2RlZmluZQlBVDkxX1RDX0NMSzJCQVNFCTB4ODAKLQotc3RhdGljIHUzMiBhdDkxeDQwX2dldHRpbWVvZmZzZXQodm9pZCkKLXsKLQlyZXR1cm4gKGF0OTFfdGNfcmVhZChBVDkxX1RDX0NMSzFCQVNFICsgQVQ5MV9UQ19DVikgKiAxMDAwMDAwIC8KLQkJKEFUOTFYNDBfTUFTVEVSX0NMT0NLIC8gMTI4KSkgKiAxMDAwOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgYXQ5MXg0MF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWF0OTFfdGNfcmVhZChBVDkxX1RDX0NMSzFCQVNFICsgQVQ5MV9UQ19TUik7Ci0JdGltZXJfdGljaygpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gYXQ5MXg0MF90aW1lcl9pcnEgPSB7Ci0JLm5hbWUJCT0gImF0OTFfdGljayIsCi0JLmZsYWdzCQk9IElSUUZfVElNRVIsCi0JLmhhbmRsZXIJPSBhdDkxeDQwX3RpbWVyX2ludGVycnVwdAotfTsKLQotdm9pZCBfX2luaXQgYXQ5MXg0MF90aW1lcl9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQlhcmNoX2dldHRpbWVvZmZzZXQgPSBhdDkxeDQwX2dldHRpbWVvZmZzZXQ7Ci0KLQlhdDkxX3RjX3dyaXRlKEFUOTFfVENfQkNSLCAwKTsKLQl2ID0gYXQ5MV90Y19yZWFkKEFUOTFfVENfQk1SKTsKLQl2ID0gKHYgJiB+QVQ5MV9UQ19UQzFYQzFTKSB8IEFUOTFfVENfVEMxWEMxU19OT05FOwotCWF0OTFfdGNfd3JpdGUoQVQ5MV9UQ19CTVIsIHYpOwotCi0JYXQ5MV90Y193cml0ZShBVDkxX1RDX0NMSzFCQVNFICsgQVQ5MV9UQ19DQ1IsIEFUOTFfVENfQ0xLRElTKTsKLQlhdDkxX3RjX3dyaXRlKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX0NNUiwgKEFUOTFfVENfVElNRVJfQ0xPQ0s0IHwgQVQ5MV9UQ19DUENUUkcpKTsKLQlhdDkxX3RjX3dyaXRlKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX0lEUiwgMHhmZmZmZmZmZik7Ci0JYXQ5MV90Y193cml0ZShBVDkxX1RDX0NMSzFCQVNFICsgQVQ5MV9UQ19SQywgKEFUOTFYNDBfTUFTVEVSX0NMT0NLIC8gMTI4KSAvIEhaIC0gMSk7Ci0JYXQ5MV90Y193cml0ZShBVDkxX1RDX0NMSzFCQVNFICsgQVQ5MV9UQ19JRVIsICgxPDw0KSk7Ci0KLQlzZXR1cF9pcnEoQVQ5MVg0MF9JRF9UQzEsICZhdDkxeDQwX3RpbWVyX2lycSk7Ci0KLQlhdDkxX3RjX3dyaXRlKEFUOTFfVENfQ0xLMUJBU0UgKyBBVDkxX1RDX0NDUiwgKEFUOTFfVENfU1dUUkcgfCBBVDkxX1RDX0NMS0VOKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtMWFybS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLTFhcm0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y2ZGJjYy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtMWFybS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC0xYXJtLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi1zdGF0aWMgdm9pZCBfX2luaXQgb25lYXJtX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBTZXQgY3B1IHR5cGU6IFBRRlAgKi8KLQlhdDkxcm05MjAwX3NldF90eXBlKEFSQ0hfUkVWSVNPTl85MjAwX1BRRlApOwotCi0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgb25lYXJtX2V0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDNCwKLQkuaXNfcm1paQk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgb25lYXJtX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMSwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgb25lYXJtX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDMiwKLQkucHVsbHVwX3Bpbgk9IEFUOTFfUElOX1BDMywKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBvbmVhcm1fYm9hcmRfaW5pdCh2b2lkKQotewotCS8qIFNlcmlhbCAqLwotCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCi0JLyogVVNBUlQwIG9uIHR0eVMxIChSeCwgVHgsIENUUywgUlRTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzIgKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMSwgMiwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJICAgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCSAgIHwgQVRNRUxfVUFSVF9SSSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmb25lYXJtX2V0aF9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZvbmVhcm1fdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmb25lYXJtX3VkY19kYXRhKTsKLX0KLQotTUFDSElORV9TVEFSVChPTkVBUk0sICJBamVjbyAxQVJNIHNpbmdsZSBib2FyZCBjb21wdXRlciIpCi0JLyogTWFpbnRhaW5lcjogTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+ICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IG9uZWFybV9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gb25lYXJtX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWFmZWItOTI2MHYxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc2ZTM1Yy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYWZlYi05MjYwdjEuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWFmZWItOTI2MHYxLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggU2VyZ2V5IExhcGluCi0gKgotICogQSBjdXN0b20gYm9hcmQgZGVzaWduZWQgYXMgb3BlbiBoYXJkd2FyZTsgUENCcyBhbmQgdmFyaW91cyBpbmZvcm1hdGlvbgotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9hcm05ZnBnYS1ldm9sdXRpb24tYm9hcmQvCi0gKiBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnk6IHN2bjovLzE5NC44NS4yMzguMjIvaG9tZS91c2Vycy9nZW9yZ2Uvc3ZuL2FybTllYgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgYWZlYjkyNjBfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi0vKgotICogVVNCIEhvc3QgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgYWZlYjkyNjBfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAxLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi0vKgotICogVVNCIERldmljZSBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGFmZWI5MjYwX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDNSwKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLQotCi0vKgotICogU1BJIGRldmljZXMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gYWZlYjkyNjBfc3BpX2RldmljZXNbXSA9IHsKLQl7CS8qIERhdGFGbGFzaCBjaGlwICovCi0JCS5tb2RhbGlhcwk9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDE1ICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LAotfTsKLQotCi0vKgotICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBhZmViOTI2MF9tYWNiX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEE5LAotCS5pc19ybWlpCT0gMCwKLX07Ci0KLQotLyoKLSAqIE5BTkQgZmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgYWZlYjkyNjBfbmFuZF9wYXJ0aXRpb25bXSA9IHsKLQl7Ci0JCS5uYW1lCT0gImJvb3Rsb2FkZXIiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSAoNjQwICogU1pfMUspLAotCX0sCi0JewotCQkubmFtZQk9ICJrZXJuZWwiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IFNaXzJNLAotCX0sCi0JewotCQkubmFtZQk9ICJyb290ZnMiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgYWZlYjkyNjBfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTMsCi0JLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAotCS5idXNfd2lkdGhfMTYJPSAwLAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi0JLnBhcnRzCQk9IGFmZWI5MjYwX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGFmZWI5MjYwX25hbmRfcGFydGl0aW9uKSwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi19OwotCi0KLS8qCi0gKiBNQ0kgKFNEL01NQykKLSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGFmZWI5MjYwX21jaTBfZGF0YSA9IHsKLQkuc2xvdFsxXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEM5LAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BDNCwKLQl9LAotfTsKLQotCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBhZmViOTI2MF9pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oInRsdjMyMGFpYzIzIiwgMHgxYSksCi0JfSwgewotCQlJMkNfQk9BUkRfSU5GTygiZm0zMTMwIiwgMHg2OCksCi0JfSwgewotCQlJMkNfQk9BUkRfSU5GTygiMjRjNjQiLCAweDUwKSwKLQl9LAotfTsKLQotLyoKLSAqIElERSAoQ0YgVHJ1ZSBJREUgbW9kZSkKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgYWZlYjkyNjBfY2ZfZGF0YSA9IHsKLQkuY2hpcHNlbGVjdCA9IDQsCi0JLmlycV9waW4gICAgPSBBVDkxX1BJTl9QQTYsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS52Y2NfcGluCT0gLUVJTlZBTCwKLQkucnN0X3BpbiAgICA9IEFUOTFfUElOX1BBNywKLQkuZmxhZ3MgICAgICA9IEFUOTFfQ0ZfVFJVRV9JREUsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYWZlYjkyNjBfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLAotCQkJICAgICBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCi0JCQkgICB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IKLQkJCSAgIHwgQVRNRUxfVUFSVF9EQ0QgfCBBVE1FTF9VQVJUX1JJKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgUlRTLCBDVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMSwgMiwKLQkJCUFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZhZmViOTI2MF91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZhZmViOTI2MF91ZGNfZGF0YSk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShhZmViOTI2MF9zcGlfZGV2aWNlcywKLQkJCUFSUkFZX1NJWkUoYWZlYjkyNjBfc3BpX2RldmljZXMpKTsKLQkvKiBOQU5EICovCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmFmZWI5MjYwX25hbmRfZGF0YSk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZhZmViOTI2MF9tYWNiX2RhdGEpOwotCi0JLyogU3RhbmRhcmQgZnVuY3Rpb24ncyBwaW4gYXNzaWdubWVudHMgYXJlIG5vdAotCSAqIGFwcHJvcHJpYXRlIGZvciB1cyBhbmQgZ2VuZXJpYyBjb2RlIHByb3ZpZGUKLQkgKiBubyBBUEkgdG8gY29uZmlndXJlIHRoZXNlIHBpbnMgYW55IG90aGVyIHdheSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDApOwkvKiBFVFgyICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMCk7CS8qIEVUWDMgKi8KLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZhZmViOTI2MF9tY2kwX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoYWZlYjkyNjBfaTJjX2RldmljZXMsCi0JCQlBUlJBWV9TSVpFKGFmZWI5MjYwX2kyY19kZXZpY2VzKSk7Ci0JLyogQXVkaW8gKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3NjKEFUOTFTQU05MjYwX0lEX1NTQywgQVRNRUxfU1NDX1RYKTsKLQkvKiBJREUgKi8KLQlhdDkxX2FkZF9kZXZpY2VfY2YoJmFmZWI5MjYwX2NmX2RhdGEpOwotfQotCi1NQUNISU5FX1NUQVJUKEFGRUI5MjYwLCAiQ3VzdG9tIGFmZWI5MjYwIGJvYXJkIikKLQkvKiBNYWludGFpbmVyOiBTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4gKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBhZmViOTI2MF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gYWZlYjkyNjBfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYW02MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlODI3ZGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIEt3aWtCeXRlIENBTTYwIChLQjkyNjApCi0gKgotICogYmFzZWQgb24gYm9hcmQtc2FtOTI2MGVrLmMKLSAqICAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICAgQ29weXJpZ2h0IChDKSAyMDA2IEF0bWVsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2FtNjBfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxMCBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxMDAwMDAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSG9zdAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgY2FtNjBfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAxLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY2FtNjBfc3BpX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lCT0gIkJPT1QxIiwKLQkJLm9mZnNldAk9IDAsCi0JCS5zaXplCT0gNCAqIDEwNTYsCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIkJPT1QyIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSAyNTYgKiAxMDU2LAotCX0sCi0JewotCQkubmFtZQk9ICJrZXJuZWwiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IDIyMjIgKiAxMDU2LAotCX0sCi0JewotCQkubmFtZQk9ICJmaWxlIHN5c3RlbSIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGNhbTYwX3NwaV9mbGFzaF9wbGF0Zm9ybV9kYXRhID0gewotCS5uYW1lCQk9ICJzcGlfZmxhc2giLAotCS5wYXJ0cwkJPSBjYW02MF9zcGlfcGFydGl0aW9ucywKLQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGNhbTYwX3NwaV9wYXJ0aXRpb25zKQotfTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGNhbTYwX3NwaV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfREFUQUZMQVNIKQotCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCQkucGxhdGZvcm1fZGF0YQk9ICZjYW02MF9zcGlfZmxhc2hfcGxhdGZvcm1fZGF0YQotCX0sCi0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIGNhbTYwX21hY2JfZGF0YSBfX2luaXRkYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BCNSwKLQkuaXNfcm1paQk9IDAsCi19OwotCi0KLS8qCi0gKiBOQU5EIEZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGNhbTYwX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJuYW5kX2ZzIiwKLQkJLm9mZnNldAk9IDAsCi0JCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBjYW02MF9uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5kZXRfcGluCT0gLUVJTlZBTCwKLQkucmR5X3Bpbgk9IEFUOTFfUElOX1BBOSwKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotCS5wYXJ0cwkJPSBjYW02MF9uYW5kX3BhcnRpdGlvbiwKLQkubnVtX3BhcnRzCT0gQVJSQVlfU0laRShjYW02MF9uYW5kX3BhcnRpdGlvbiksCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGNhbTYwX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDMsCi0JLm5yZF9wdWxzZQkJPSAzLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAotCS5ud2VfcHVsc2UJCT0gMywKLQotCS5yZWFkX2N5Y2xlCQk9IDUsCi0JLndyaXRlX2N5Y2xlCQk9IDUsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCi0JLnRkZl9jeWNsZXMJCT0gMiwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjYW02MF9hZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJmNhbTYwX25hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmY2FtNjBfbmFuZF9kYXRhKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2FtNjBfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoY2FtNjBfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoY2FtNjBfc3BpX2RldmljZXMpKTsKLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmNhbTYwX21hY2JfZGF0YSk7Ci0JLyogVVNCIEhvc3QgKi8KLQkvKiBlbmFibGUgVVNCIHBvd2VyIHN1cHBseSBjaXJjdWl0ICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIxOCwgMSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNhbTYwX3VzYmhfZGF0YSk7Ci0JLyogTkFORCAqLwotCWNhbTYwX2FkZF9kZXZpY2VfbmFuZCgpOwotfQotCi1NQUNISU5FX1NUQVJUKENBTTYwLCAiS3dpa0J5dGUgQ0FNNjAiKQotCS8qIE1haW50YWluZXI6IEt3aWtCeXRlICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gY2FtNjBfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGNhbTYwX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXJtZXZhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MzEzZDMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYwotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUgUGVlciBHZW9yZ2kKLSAqICAJCSAgICAgICBDb25pdGVjIERhdGFzeXN0ZW1zCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IGNhcm1ldmFfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAyMC4wMDAgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMjAwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGNhcm1ldmFfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBjYXJtZXZhX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgY2FybWV2YV91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QRDEyLAotCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEQ5LAotfTsKLQotLyogRklYTUU6IHVzZXIgZGVwZW5kZW50ICovCi0vLyBzdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBfX2luaXRkYXRhIGNhcm1ldmFfY2ZfZGF0YSA9IHsKLS8vCS5kZXRfcGluCT0gQVQ5MV9QSU5fUEIwLAotLy8JLnJzdF9waW4JPSBBVDkxX1BJTl9QQzUsCi0JLy8gLmlycV9waW4JPSAtRUlOVkFMLAotCS8vIC52Y2NfcGluCT0gLUVJTlZBTCwKLS8vIH07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBjYXJtZXZhX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEIxMCwKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QQzE0LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGNhcm1ldmFfc3BpX2RldmljZXNbXSA9IHsKLQl7IC8qIERhdGFGbGFzaCBjaGlwICovCi0JCS5tb2RhbGlhcyA9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0ICA9IDAsCi0JCS5tYXhfc3BlZWRfaHogPSAxMCAqIDEwMDAgKiAxMDAwLAotCX0sCi0JeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpIC0gY3MxICgyNTBLSHopICovCi0JCS5tb2RhbGlhcyA9ICJzcGktY3MxIiwKLQkJLmNoaXBfc2VsZWN0ICA9IDEsCi0JCS5tYXhfc3BlZWRfaHogPSAyNTAgKiAgMTAwMCwKLQl9LAotCXsgLyogVXNlciBhY2Nlc3NpYmxlIHNwaSAtIGNzMiAoMU1IeikgKi8KLQkJLm1vZGFsaWFzID0gInNwaS1jczIiLAotCQkuY2hpcF9zZWxlY3QgID0gMiwKLQkJLm1heF9zcGVlZF9oeiA9IDEgKiAxMDAwICogIDEwMDAsCi0JfSwKLQl7IC8qIFVzZXIgYWNjZXNzaWJsZSBzcGkgLSBjczMgKDEwTUh6KSAqLwotCQkubW9kYWxpYXMgPSAic3BpLWNzMyIsCi0JCS5jaGlwX3NlbGVjdCAgPSAzLAotCQkubWF4X3NwZWVkX2h6ID0gMTAgKiAxMDAwICogIDEwMDAsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgY2FybWV2YV9sZWRzW10gPSB7Ci0JeyAvKiAidXNlciBsZWQgMSIsIExFRDkgKi8KLQkJLm5hbWUJCQk9ICJsZWQ5IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMjEsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9LAotCXsgLyogInVzZXIgbGVkIDIiLCBMRUQxMCAqLwotCQkubmFtZQkJCT0gImxlZDEwIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMjUsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JfSwKLQl7IC8qICJ1c2VyIGxlZCAzIiwgTEVEMTEgKi8KLQkJLm5hbWUJCQk9ICJsZWQxMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTI2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCX0sCi0JeyAvKiAidXNlciBsZWQgNCIsIExFRDEyICovCi0JCS5uYW1lCQkJPSAibGVkMTIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEExOCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2FybWV2YV9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzEsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8IEFUTUVMX1VBUlRfRENECi0JCQkgICB8IEFUTUVMX1VBUlRfUkkpOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmNhcm1ldmFfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNhcm1ldmFfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmY2FybWV2YV91ZGNfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGNhcm1ldmFfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoY2FybWV2YV9zcGlfZGV2aWNlcykpOwotCS8qIENvbXBhY3QgRmxhc2ggKi8KLS8vCWF0OTFfYWRkX2RldmljZV9jZigmY2FybWV2YV9jZl9kYXRhKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZjYXJtZXZhX21jaTBfZGF0YSk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGNhcm1ldmFfbGVkcywgQVJSQVlfU0laRShjYXJtZXZhX2xlZHMpKTsKLX0KLQotTUFDSElORV9TVEFSVChDQVJNRVZBLCAiQ2FybWV2YSIpCi0JLyogTWFpbnRhaW5lcjogQ29uaXRlYyBEYXRhc3lzdGVtcyAqLwotCS5pbml0X3RpbWUJPSBhdDkxcm05MjAwX3RpbWVyX2luaXQsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBjYXJtZXZhX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBjYXJtZXZhX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNwdTlrcmVhLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxYzgzMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYworKysgL2Rldi9udWxsCkBAIC0xLDM4NiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNwdTlrcmVhLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpYyBCZW5hcmQgLSBlcmljQGV1a3JlYS5jb20KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MF9tYXRyaXguaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFfbWF0cml4Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi0vKgotICogVVNCIEhvc3QgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgY3B1OWtyZWFfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi0vKgotICogVVNCIERldmljZSBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGNwdTlrcmVhX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDOCwKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLS8qCi0gKiBNQUNCIEV0aGVybmV0IGRldmljZQotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGNwdTlrcmVhX21hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSAtRUlOVkFMLAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgY3B1OWtyZWFfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTMsCi0JLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAotCS5idXNfd2lkdGhfMTYJPSAwLAotCS5kZXRfcGluCT0gLUVJTlZBTCwKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotfTsKLQotI2lmZGVmIENPTkZJR19NQUNIX0NQVTkyNjAKLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgY3B1OWtyZWFfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMSwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDEsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gMywKLQkubnJkX3B1bHNlCQk9IDMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDMsCi0JLm53ZV9wdWxzZQkJPSAzLAotCi0JLnJlYWRfY3ljbGUJCT0gNSwKLQkud3JpdGVfY3ljbGUJCT0gNSwKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERQotCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKLQkudGRmX2N5Y2xlcwkJPSAyLAotfTsKLSNlbHNlCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGNwdTlrcmVhX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDIsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAyLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDQsCi0JLm5yZF9wdWxzZQkJPSA0LAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA0LAotCS5ud2VfcHVsc2UJCT0gNCwKLQotCS5yZWFkX2N5Y2xlCQk9IDcsCi0JLndyaXRlX2N5Y2xlCQk9IDcsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUKLQkJfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCi0JLnRkZl9jeWNsZXMJCT0gMywKLX07Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IGNwdTlrcmVhX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCAzLCAmY3B1OWtyZWFfbmFuZF9zbWNfY29uZmlnKTsKLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmY3B1OWtyZWFfbmFuZF9kYXRhKTsKLX0KLQotLyoKLSAqIE5PUiBmbGFzaAotICovCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBjcHVhdDkyNjBfbm9yX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDIsCi19OwotCi0jZGVmaW5lIE5PUl9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8wCi0jZGVmaW5lIE5PUl9TSVpFCVNaXzY0TQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IE5PUl9CQVNFLAotCQkuZW5kCT0gTk9SX0JBU0UgKyBOT1JfU0laRSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNwdTlrcmVhX25vcl9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmNwdWF0OTI2MF9ub3JfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9IG5vcl9mbGFzaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5vcl9mbGFzaF9yZXNvdXJjZXMpLAotfTsKLQotI2lmZGVmIENPTkZJR19NQUNIX0NQVTkyNjAKLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgY3B1OWtyZWFfbm9yX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAxLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMSwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSAxMCwKLQkubnJkX3B1bHNlCQk9IDEwLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA2LAotCS5ud2VfcHVsc2UJCT0gNiwKLQotCS5yZWFkX2N5Y2xlCQk9IDEyLAotCS53cml0ZV9jeWNsZQkJPSA4LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfV1JJVEUKLQkJCXwgQVQ5MV9TTUNfREJXXzE2LAotCS50ZGZfY3ljbGVzCQk9IDIsCi19OwotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgY3B1OWtyZWFfbm9yX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAxLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMSwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSAxMywKLQkubnJkX3B1bHNlCQk9IDEzLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA4LAotCS5ud2VfcHVsc2UJCT0gOCwKLQotCS5yZWFkX2N5Y2xlCQk9IDE1LAotCS53cml0ZV9jeWNsZQkJPSAxMCwKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERQotCQkJfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfQkFUX1dSSVRFCi0JCQl8IEFUOTFfU01DX0RCV18xNiwKLQkudGRmX2N5Y2xlcwkJPSAyLAotfTsKLSNlbmRpZgotCi1zdGF0aWMgX19pbml0IHZvaWQgY3B1OWtyZWFfYWRkX2RldmljZV9ub3Iodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGNzYTsKLQotCWNzYSA9IGF0OTFfbWF0cml4X3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKLQlhdDkxX21hdHJpeF93cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSB8IEFUOTFfTUFUUklYX1ZERElPTVNFTF8zXzNWKTsKLQotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAwIChOT1IpICovCi0Jc2FtOV9zbWNfY29uZmlndXJlKDAsIDAsICZjcHU5a3JlYV9ub3Jfc21jX2NvbmZpZyk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNwdTlrcmVhX25vcl9mbGFzaCk7Ci19Ci0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgY3B1OWtyZWFfbGVkc1tdID0gewotCXsJLyogTEVEMSAqLwotCQkubmFtZQkJCT0gIkxFRDEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxMSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJ0aW1lciIsCi0JfSwKLQl7CS8qIExFRDIgKi8KLQkJLm5hbWUJCQk9ICJMRUQyIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BDMTIsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9LAotCXsJLyogTEVEMyAqLwotCQkubmFtZQkJCT0gIkxFRDMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEM3LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCX0sCi0JewkvKiBMRUQ0ICovCi0JCS5uYW1lCQkJPSAiTEVENCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzksCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGNwdTlrcmVhX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygiZHMxMzM5IiwgMHg2OCksCi0JfSwKLX07Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGNwdTlrcmVhX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BDMywKLQkJLmNvZGUJCT0gQlROXzAsCi0JCS5kZXNjCQk9ICJCUDEiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIyMCwKLQkJLmNvZGUJCT0gQlROXzEsCi0JCS5kZXNjCQk9ICJCUDIiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGNwdTlrcmVhX2J1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gY3B1OWtyZWFfYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGNwdTlrcmVhX2J1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3B1OWtyZWFfYnV0dG9uX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZjcHU5a3JlYV9idXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQzMsIDEpOwkvKiBCUDEgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQzMsIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIyMCwgMSk7CS8qIEJQMiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMjAsIDEpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcHU5a3JlYV9idXR0b25fZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCi17Ci19Ci0jZW5kaWYKLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY3B1OWtyZWFfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQTI5LAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjcHU5a3JlYV9ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBOT1IgKi8KLQljcHU5a3JlYV9hZGRfZGV2aWNlX25vcigpOwotCS8qIFNlcmlhbCAqLwotCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCi0JLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfAotCQlBVE1FTF9VQVJUX1JUUyB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfAotCQlBVE1FTF9VQVJUX0RDRCB8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8Ci0JCUFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMiBvbiB0dHlTMy4gKFJ4LCBUeCwgUlRTLCBDVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMiwgMywgQVRNRUxfVUFSVF9DVFMgfAotCQlBVE1FTF9VQVJUX1JUUyk7Ci0KLQkvKiBVU0FSVDMgb24gdHR5UzQuIChSeCwgVHgpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMywgNCwgMCk7Ci0KLQkvKiBVU0FSVDQgb24gdHR5UzUuIChSeCwgVHgpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTNCwgNSwgMCk7Ci0KLQkvKiBVU0FSVDUgb24gdHR5UzYuIChSeCwgVHgpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTNSwgNiwgMCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNwdTlrcmVhX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmNwdTlrcmVhX3VkY19kYXRhKTsKLQkvKiBOQU5EICovCi0JY3B1OWtyZWFfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZjcHU5a3JlYV9tYWNiX2RhdGEpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmNwdTlrcmVhX21jaTBfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhjcHU5a3JlYV9pMmNfZGV2aWNlcywKLQkJQVJSQVlfU0laRShjcHU5a3JlYV9pMmNfZGV2aWNlcykpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhjcHU5a3JlYV9sZWRzLCBBUlJBWV9TSVpFKGNwdTlrcmVhX2xlZHMpKTsKLQkvKiBQdXNoIEJ1dHRvbnMgKi8KLQljcHU5a3JlYV9hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLX0KLQotI2lmZGVmIENPTkZJR19NQUNIX0NQVTkyNjAKLU1BQ0hJTkVfU1RBUlQoQ1BVQVQ5MjYwLCAiRXVrcmVhIENQVTkyNjAiKQotI2Vsc2UKLU1BQ0hJTkVfU1RBUlQoQ1BVQVQ5RzIwLCAiRXVrcmVhIENQVTlHMjAiKQotI2VuZGlmCi0JLyogTWFpbnRhaW5lcjogRXJpYyBCZW5hcmQgLSBFVUtSRUEgRWxlY3Ryb21hdGlxdWUgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBjcHU5a3JlYV9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gY3B1OWtyZWFfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1YXQ5MS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNwdWF0OTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA5NDM1MC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1YXQ5MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1YXQ5MS5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwOSBFcmljIEJlbmFyZCAtIGVyaWNAZXVrcmVhLmNvbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9tYy5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9yYW1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgY3B1YXQ5MV9sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJCT0gImxlZDEiLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzAsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjcHVhdDkxX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBTZXQgY3B1IHR5cGU6IFBRRlAgKi8KLQlhdDkxcm05MjAwX3NldF90eXBlKEFSQ0hfUkVWSVNPTl85MjAwX1BRRlApOwotCi0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY3B1YXQ5MV9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSAtRUlOVkFMLAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBjcHVhdDkxX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMSwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgY3B1YXQ5MV91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQzE1LAotCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEMxNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBjcHVhdDkxX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEMyLAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGNwdWF0OTFfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3B1YXQ5MV9mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJCT0gQVQ5MV9DSElQU0VMRUNUXzAsCi0JLmVuZAkJPSBBVDkxX0NISVBTRUxFQ1RfMCArIFNaXzE2TSAtIDEsCi0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3B1YXQ5MV9ub3JmbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY3B1YXQ5MV9mbGFzaF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gJmNwdWF0OTFfZmxhc2hfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotfTsKLQotI2lmZGVmIENPTkZJR19NVERfUExBVFJBTQotc3RydWN0IHBsYXRkYXRhX210ZF9yYW0gYXQ5MV9zcmFtX3BkYXRhID0gewotCS5tYXBuYW1lCT0gIlNSQU0iLAotCS5iYW5rd2lkdGgJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdDkxX3NyYW1fcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IEFUOTFSTTkyMDBfU1JBTV9CQVNFLAotCQkuZW5kICAgPSBBVDkxUk05MjAwX1NSQU1fQkFTRSArIEFUOTFSTTkyMDBfU1JBTV9TSVpFIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfc3JhbSA9IHsKLQkubmFtZQkJPSAibXRkLXJhbSIsCi0JLmlkCQk9IDAsCi0JLnJlc291cmNlCT0gYXQ5MV9zcmFtX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDkxX3NyYW1fcmVzb3VyY2UpLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmF0OTFfc3JhbV9wZGF0YSwKLQl9LAotfTsKLSNlbmRpZiAvKiBNVERfUExBVFJBTSAqLwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmNwdWF0OTFfbm9yZmxhc2gsCi0jaWZkZWYgQ09ORklHX01URF9QTEFUUkFNCi0JJmF0OTFfc3JhbSwKLSNlbmRpZiAvKiBDT05GSUdfTVREX1BMQVRSQU0gKi8KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjcHVhdDkxX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8Ci0JCUFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMSwgMiwgQVRNRUxfVUFSVF9DVFMgfAotCQlBVE1FTF9VQVJUX1JUUyB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfAotCQlBVE1FTF9VQVJUX0RDRCB8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQyIG9uIHR0eVMzIChSeCwgVHgpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMyLCAzLCAwKTsKLQotCS8qIFVTQVJUMyBvbiB0dHlTNCAoUngsIFR4LCBDVFMsIFJUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzMsIDQsIEFUTUVMX1VBUlRfQ1RTIHwKLQkJQVRNRUxfVUFSVF9SVFMpOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBMRURzLiAqLwotCWF0OTFfZ3Bpb19sZWRzKGNwdWF0OTFfbGVkcywgQVJSQVlfU0laRShjcHVhdDkxX2xlZHMpKTsKLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmNwdWF0OTFfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNwdWF0OTFfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmY3B1YXQ5MV91ZGNfZGF0YSk7Ci0JLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmY3B1YXQ5MV9tY2kwX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogUGxhdGZvcm0gZGV2aWNlcyAqLwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOwotfQotCi1NQUNISU5FX1NUQVJUKENQVUFUOTEsICJFdWtyZWEiKQotCS8qIE1haW50YWluZXI6IEVyaWMgQmVuYXJkIC0gRVVLUkVBIEVsZWN0cm9tYXRpcXVlICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGNwdWF0OTFfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGNwdWF0OTFfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMzVhNDUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNzYjMzNy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3NiMzM3X2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMy42ODY0IE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDM2ODY0MDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGNzYjMzN19ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzIsCi0JLmlzX3JtaWkJPSAwLAotCS8qIFRoZSBDU0IzMzcgYm9vdGxvYWRlciBzdG9yZXMgdGhlIE1BQyB0aGUgd3Jvbmctd2F5IGFyb3VuZCAqLwotCS5yZXZfZXRoX2FkZHIJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGNzYjMzN191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGNzYjMzN191ZGNfZGF0YSA9IHsKLQkucHVsbHVwX3Bpbgk9IEFUOTFfUElOX1BBMjQsCi0JLnZidXNfcGluCT0gLUVJTlZBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBjc2IzMzdfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJkczEzMDciLCAweDY4KSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgX19pbml0ZGF0YSBjc2IzMzdfY2ZfZGF0YSA9IHsKLQkvKgotCSAqIGNvbm5lY3RvciBQNCBvbiB0aGUgQ1NCIDMzNyBtYXRlcyB0bwotCSAqIGNvbm5lY3RvciBQOCBvbiB0aGUgQ1NCIDMwMENGCi0JICovCi0KLQkvKiBDU0IzMzcgc3BlY2lmaWMgKi8KLQkuZGV0X3Bpbgk9IEFUOTFfUElOX1BDMywKLQotCS8qIENTQjMwMENGIHNwZWNpZmljICovCi0JLmlycV9waW4JPSBBVDkxX1BJTl9QQTE5LAotCS52Y2NfcGluCT0gQVQ5MV9QSU5fUEQwLAotCS5yc3RfcGluCT0gQVQ5MV9QSU5fUEQyLAotfTsKLQotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGNzYjMzN19tY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BENSwKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QRDYsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY3NiMzM3X3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBDQU4gY29udHJvbGxlciAqLwotCQkubW9kYWxpYXMJPSAic2FrODJjOTAwIiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDYgKiAxMDAwICogMTAwMCwKLQl9LAotfTsKLQotI2RlZmluZSBDU0JfRkxBU0hfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMAotI2RlZmluZSBDU0JfRkxBU0hfU0laRQlTWl84TQotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY3NiX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJ1TU9OIGZsYXNoIiwKLQkJLm9mZnNldAkJPSAwLAotCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIHJlYWQgb25seSAqLwotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGNzYl9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAyLAotCS5wYXJ0cwkJPSBjc2JfZmxhc2hfcGFydGl0aW9ucywKLQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGNzYl9mbGFzaF9wYXJ0aXRpb25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3NiX2ZsYXNoX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQ1NCX0ZMQVNIX0JBU0UsCi0JCS5lbmQJPSBDU0JfRkxBU0hfQkFTRSArIENTQl9GTEFTSF9TSVpFIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3NiX2ZsYXNoID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YSA9ICZjc2JfZmxhc2hfZGF0YSwKLQkJCX0sCi0JLnJlc291cmNlCT0gY3NiX2ZsYXNoX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3NiX2ZsYXNoX3Jlc291cmNlcyksCi19OwotCi0vKgotICogR1BJTyBCdXR0b25zIChvbiBDU0IzMDApCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBjc2IzMDBfYnV0dG9uc1tdID0gewotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIyOSwKLQkJLmNvZGUJCT0gQlROXzAsCi0JCS5kZXNjCQk9ICJzdzAiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIyOCwKLQkJLmNvZGUJCT0gQlROXzEsCi0JCS5kZXNjCQk9ICJzdzEiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEEyMSwKLQkJLmNvZGUJCT0gQlROXzIsCi0JCS5kZXNjCQk9ICJzdzIiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGNzYjMwMF9idXR0b25fZGF0YSA9IHsKLQkuYnV0dG9ucwk9IGNzYjMwMF9idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoY3NiMzAwX2J1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3NiMzAwX2J1dHRvbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImdwaW8ta2V5cyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY3NiMzAwX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjc2IzMDBfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCi17Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjI5LCAxKTsJLyogc3cwICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEIyOSwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjI4LCAxKTsJLyogc3cxICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEIyOCwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTIxLCAxKTsJLyogc3cyICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEEyMSwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNzYjMwMF9idXR0b25fZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgY3NiMzAwX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKSB7fQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgY3NiX2xlZHNbXSA9IHsKLQl7CS8qICJsZWQwIiwgeWVsbG93ICovCi0JCS5uYW1lCQkJPSAibGVkMCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjIsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9LAotCXsJLyogImxlZDEiLCBncmVlbiAqLwotCQkubmFtZQkJCT0gImxlZDEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1tYzAiLAotCX0sCi0JewkvKiAibGVkMiIsIHllbGxvdyAqLwotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIwLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImlkZS1kaXNrIiwKLQl9Ci19OwotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBjc2IzMzdfYm9hcmRfaW5pdCh2b2lkKQotewotCS8qIFNlcmlhbCAqLwotCS8qIERCR1Ugb24gdHR5UzAgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY3NiMzM3X2V0aF9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZjc2IzMzdfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmY3NiMzM3X3VkY19kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGNzYjMzN19pMmNfZGV2aWNlcywgQVJSQVlfU0laRShjc2IzMzdfaTJjX2RldmljZXMpKTsKLQkvKiBDb21wYWN0IEZsYXNoICovCi0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjIyLCAxKTsJCS8qIElPSVMxNiAqLwotCWF0OTFfYWRkX2RldmljZV9jZigmY3NiMzM3X2NmX2RhdGEpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoY3NiMzM3X3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGNzYjMzN19zcGlfZGV2aWNlcykpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmNzYjMzN19tY2kwX2RhdGEpOwotCS8qIE5PUiBmbGFzaCAqLwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3NiX2ZsYXNoKTsKLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoY3NiX2xlZHMsIEFSUkFZX1NJWkUoY3NiX2xlZHMpKTsKLQkvKiBTd2l0Y2hlcyBvbiBDU0IzMDAgKi8KLQljc2IzMDBfYWRkX2RldmljZV9idXR0b25zKCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQ1NCMzM3LCAiQ29nZW50IENTQjMzNyIpCi0JLyogTWFpbnRhaW5lcjogQmlsbCBHYXRsaWZmICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGNzYjMzN19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gY3NiMzM3X2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNzYjYzNy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNzYjYzNy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGQwMjdmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2I2MzcuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNzYjYzNy5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3NiNjM3X2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMy42ODY0IE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDM2ODY0MDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGNzYjYzN19ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzAsCi0JLmlzX3JtaWkJPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGNzYjYzN191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGNzYjYzN191ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4gICAgID0gQVQ5MV9QSU5fUEIyOCwKLQkucHVsbHVwX3BpbiAgID0gQVQ5MV9QSU5fUEIxLAotfTsKLQotI2RlZmluZSBDU0JfRkxBU0hfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMAotI2RlZmluZSBDU0JfRkxBU0hfU0laRQlTWl8xNk0KLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNzYl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZQkJPSAidU1PTiBmbGFzaCIsCi0JCS5vZmZzZXQJCT0gMCwKLQkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiByZWFkIG9ubHkgKi8KLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBjc2JfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gMiwKLQkucGFydHMJCT0gY3NiX2ZsYXNoX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRShjc2JfZmxhc2hfcGFydGl0aW9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNzYl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IENTQl9GTEFTSF9CQVNFLAotCQkuZW5kCT0gQ1NCX0ZMQVNIX0JBU0UgKyBDU0JfRkxBU0hfU0laRSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNzYl9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEgPSAmY3NiX2ZsYXNoX2RhdGEsCi0JCQl9LAotCS5yZXNvdXJjZQk9IGNzYl9mbGFzaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNzYl9mbGFzaF9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjc2JfbGVkc1tdID0gewotCXsJLyogImQxIiwgcmVkICovCi0JCS5uYW1lCQkJPSAiZDEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIyLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjc2I2MzdfYm9hcmRfaW5pdCh2b2lkKQotewotCS8qIExFRChzKSAqLwotCWF0OTFfZ3Bpb19sZWRzKGNzYl9sZWRzLCBBUlJBWV9TSVpFKGNzYl9sZWRzKSk7Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY3NiNjM3X2V0aF9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZjc2I2MzdfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmY3NiNjM3X3VkY19kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoTlVMTCwgMCk7Ci0JLyogTk9SIGZsYXNoICovCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjc2JfZmxhc2gpOwotfQotCi1NQUNISU5FX1NUQVJUKENTQjYzNywgIkNvZ2VudCBDU0I2MzciKQotCS8qIE1haW50YWluZXI6IEJpbGwgR2F0bGlmZiAqLwotCS5pbml0X3RpbWUJPSBhdDkxcm05MjAwX3RpbWVyX2luaXQsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBjc2I2MzdfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGNzYjYzN19ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1ybTkyMDAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1ybTkyMDAuYwppbmRleCAyMjY1NjNmLi43NmRmZThmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtcm05MjAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXJtOTIwMC5jCkBAIC0yMiwxNCArMjIsMTEgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiBzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9kdF90aW1lcl9pbml0KHZvaWQpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ09NTU9OX0NMSykKIAlvZl9jbGtfaW5pdChOVUxMKTsKLSNlbmRpZgogCWF0OTFybTkyMDBfdGltZXJfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtc2FtOS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWR0LXNhbTkuYwppbmRleCBkMzA0OGNjLi5mOTkyNDZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtc2FtOS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW05LmMKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICphdDkxX2R0X2JvYXJkX2NvbXBhdFtdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZHQtc2FtYTUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW1hNS5jCmluZGV4IDEyOWUyOTEuLjhmYjllZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW1hNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kdC1zYW1hNS5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogc3RhdGljIHZvaWQgX19pbml0IHNhbWE1X2R0X2RldmljZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWIwMS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWViMDEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVjZjBhNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWIwMS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDcsIEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLQotc3RhdGljIHZvaWQgX19pbml0IGF0OTFlYjAxX2luaXRfaXJxKHZvaWQpCi17Ci0JYXQ5MXg0MF9pbml0X2ludGVycnVwdHMoTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxZWIwMV9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JYXQ5MXg0MF9pbml0aWFsaXplKDQwMDAwMDAwKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxRUIwMSwgIkF0bWVsIEFUOTEgRUIwMSIpCi0JLyogTWFpbnRhaW5lcjogR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4gKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXg0MF90aW1lcl9pbml0LAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGF0OTFlYjAxX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MWViMDFfaW5pdF9pcnEsCi1NQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWI5MjAwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWI5MjAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNDU3YTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWViOTIwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWI5MjAwLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUsIGFkYXB0ZWQgZm9yIEFURUI5MjAwIGZyb20gRW1iZXN0Ci0gKiAgYnkgQW5kcmV3IFBhdHJpa2FsYWtpcwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWI5MjAwX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBlYjkyMDBfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBlYjkyMDBfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBlYjkyMDBfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEQ0LAotCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEQ1LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgX19pbml0ZGF0YSBlYjkyMDBfY2ZfZGF0YSA9IHsKLQkuaXJxX3Bpbgk9IC1FSU5WQUwsCi0JLmRldF9waW4JPSBBVDkxX1BJTl9QQjAsCi0JLnZjY19waW4JPSAtRUlOVkFMLAotCS5yc3RfcGluCT0gQVQ5MV9QSU5fUEM1LAotfTsKLQotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGViOTIwMF9tY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IC1FSU5WQUwsCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGViOTIwMF9pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oIjI0YzUxMiIsIDB4NTApLAotCX0sCi19OwotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBlYjkyMDBfYm9hcmRfaW5pdCh2b2lkKQotewotCS8qIFNlcmlhbCAqLwotCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCi0JLyogVVNBUlQxIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMxLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCi0JCQl8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfCBBVE1FTF9VQVJUX0RDRAotCQkJfCBBVE1FTF9VQVJUX1JJKTsKLQotCS8qIFVTQVJUMiBvbiB0dHlTMi4gKFJ4LCBUeCkgLSBJUkRBICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMyLCAyLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZlYjkyMDBfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmViOTIwMF91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZlYjkyMDBfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoZWI5MjAwX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGViOTIwMF9pMmNfZGV2aWNlcykpOwotCS8qIENvbXBhY3QgRmxhc2ggKi8KLQlhdDkxX2FkZF9kZXZpY2VfY2YoJmViOTIwMF9jZl9kYXRhKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKE5VTEwsIDApOwotCS8qIE1NQyAqLwotCS8qIG9ubHkgc3VwcG9ydHMgMSBvciA0IGJpdCBpbnRlcmZhY2UsIG5vdCB3aXJlZCB0aHJvdWdoIHRvIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmViOTIwMF9tY2kwX2RhdGEpOwotfQotCi1NQUNISU5FX1NUQVJUKEFURUI5MjAwLCAiRW1iZXN0IEFURUI5MjAwIikKLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWI5MjAwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBlYjkyMDBfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNiYXQ5MS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWVjYmF0OTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRlMTM3My4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNiYXQ5MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWNiYXQ5MS5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgZW1RYml0LmNvbS4KLSAqCi0gKiBXZSBzdGFydGVkIGZyb20gYm9hcmQtZGsuYywgd2hpY2ggaXMgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IGVjYl9hdDkxaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBlY2JfYXQ5MWV0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDNCwKLQkuaXNfcm1paQk9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZWNiX2F0OTF1c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBlY2JhdDkxX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gLUVJTlZBTCwKLQkJLndwX3BpbgkJPSAtRUlOVkFMLAotCX0sCi19OwotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NVERfREFUQUZMQVNIKQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgbXlfZmxhc2gwX3BhcnRpdGlvbnNbXSA9Ci17Ci0JewkvKiAweDg0MDAgKi8KLQkJLm5hbWUJPSAiRGFycmVsbC1sb2FkZXIiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSAxMiAqIDEwNTYsCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIlUtYm9vdCIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gMTEwICogMTA1NiwKLQl9LAotCXsJLyogMTMzNiAoMTY3IGJsb2NrcykgcGFnZXMgKiAxMDU2IGJ5dGVzID0gMHgxNTg3MDAgYnl0ZXMgKi8KLQkJLm5hbWUJPSAiVUJvb3QtZW52IiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSA4ICogMTA1NiwKLQl9LAotCXsJLyogMTMzNiAoMTY3IGJsb2NrcykgcGFnZXMgKiAxMDU2IGJ5dGVzID0gMHgxNTg3MDAgYnl0ZXMgKi8KLQkJLm5hbWUJPSAiS2VybmVsIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSAxNTM0ICogMTA1NiwKLQl9LAotCXsJLyogMTkwMjAwIC0gamZmczIgcm9vdCBmaWxlc3lzdGVtICovCi0JCS5uYW1lCT0gIkZpbGVzeXN0ZW0iLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCS8qIDI2IHNlY3RvcnMgKi8KLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBteV9mbGFzaDBfcGxhdGZvcm0gPSB7Ci0JLm5hbWUJCT0gIlJlbW92YWJsZSBmbGFzaCBjYXJkIiwKLQkucGFydHMJCT0gbXlfZmxhc2gwX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRShteV9mbGFzaDBfcGFydGl0aW9ucykKLX07Ci0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWNiX2F0OTFzcGlfZGV2aWNlc1tdID0gewotCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTAgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpCi0JCS5wbGF0Zm9ybV9kYXRhCT0gJm15X2ZsYXNoMF9wbGF0Zm9ybSwKLSNlbmRpZgotCX0sCi0JewkvKiBVc2VyIGFjY2Vzc2libGUgc3BpIC0gY3MxICgyNTBLSHopICovCi0JCS5tb2RhbGlhcwk9ICJzcGktY3MxIiwKLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDI1MCAqIDEwMDAsCi0JfSwKLQl7CS8qIFVzZXIgYWNjZXNzaWJsZSBzcGkgLSBjczIgKDFNSHopICovCi0JCS5tb2RhbGlhcwk9ICJzcGktY3MyIiwKLQkJLmNoaXBfc2VsZWN0CT0gMiwKLQkJLm1heF9zcGVlZF9oegk9IDEgKiAxMDAwICogMTAwMCwKLQl9LAotCXsJLyogVXNlciBhY2Nlc3NpYmxlIHNwaSAtIGNzMyAoMTBNSHopICovCi0JCS5tb2RhbGlhcwk9ICJzcGktY3MzIiwKLQkJLmNoaXBfc2VsZWN0CT0gMywKLQkJLm1heF9zcGVlZF9oegk9IDEwICogMTAwMCAqIDEwMDAsCi0JfSwKLX07Ci0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWNiX2xlZHNbXSA9IHsKLQl7CS8qIEQxICovCi0JCS5uYW1lCQkJPSAibGVkMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzcsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWNiX2F0OTFib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMwLCAxLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0KLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmVjYl9hdDkxZXRoX2RhdGEpOwotCi0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWNiX2F0OTF1c2JoX2RhdGEpOwotCi0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVjYmF0OTFfbWNpMF9kYXRhKTsKLQotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWNiX2F0OTFzcGlfZGV2aWNlcywgQVJSQVlfU0laRShlY2JfYXQ5MXNwaV9kZXZpY2VzKSk7Ci0KLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoZWNiX2xlZHMsIEFSUkFZX1NJWkUoZWNiX2xlZHMpKTsKLX0KLQotTUFDSElORV9TVEFSVChFQ0JBVDkxLCAiZW1RYml0J3MgRUNCX0FUOTEiKQotCS8qIE1haW50YWluZXI6IGVtUWJpdC5jb20gKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWNiX2F0OTFpbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWNiX2F0OTFib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY285MjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY285MjAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU3NTMyMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWNvOTIwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9tYy5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9yYW1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9jcHUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBlY285MjBfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVjbzkyMF9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzIsCi0JLmlzX3JtaWkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVjbzkyMF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGVjbzkyMF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQjEyLAotCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEIxMywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBlY285MjBfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gMSwKLQkJLmRldGVjdF9waW4JPSAtRUlOVkFMLAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVjbzkyMF9mbGFzaF9kYXRhID0gewotCS53aWR0aCAgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlY285MjBfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0ICAgICAgICAgID0gMHgxMTAwMDAwMCwKLQkuZW5kICAgICAgICAgICAgPSAweDExZmZmZmZmLAotCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWNvOTIwX2ZsYXNoID0gewotCS5uYW1lICAgICAgICAgICA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQgICAgICAgICAgICAgPSAwLAotCS5kZXYgICAgICAgICAgICA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgID0gJmVjbzkyMF9mbGFzaF9kYXRhLAotCX0sCi0JLnJlc291cmNlICAgICAgID0gJmVjbzkyMF9mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcyAgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBlY285MjBfc3BpX2RldmljZXNbXSA9IHsKLQl7CS8qIENBTiBjb250cm9sbGVyICovCi0JCS5tb2RhbGlhcwk9ICJ0bHY1NjM4IiwKLQkJLmNoaXBfc2VsZWN0CT0gMywKLQkJLm1heF9zcGVlZF9oegk9IDIwICogMTAwMCAqIDEwMDAsCi0JCS5tb2RlCQk9IFNQSV9DUEhBLAotCX0sCi19OwotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVjbzkyMF9sZWRzW10gPSB7Ci0JeyAgICAgICAvKiBEMSAqLwotCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJsZWQxIiwKLQkJLmdwaW8gICAgICAgICAgICAgICAgICAgPSBBVDkxX1BJTl9QQjAsCi0JCS5hY3RpdmVfbG93ICAgICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlciAgICAgICAgPSAiaGVhcnRiZWF0IiwKLQl9LAotCXsgICAgICAgLyogRDIgKi8KLQkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAibGVkMiIsCi0JCS5ncGlvICAgICAgICAgICAgICAgICAgID0gQVQ5MV9QSU5fUEIxLAotCQkuYWN0aXZlX2xvdyAgICAgICAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIgICAgICAgID0gInRpbWVyIiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWNvOTIwX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5ICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZlY285MjBfZXRoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZlY285MjBfdXNiaF9kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZlY285MjBfdWRjX2RhdGEpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWNvOTIwX21jaTBfZGF0YSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlY285MjBfZmxhc2gpOwotCi0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfU01DX0NTUig3KSwJQVQ5MV9TTUNfUldIT0xEXygxKQotCQkJCXwgQVQ5MV9TTUNfUldTRVRVUF8oMSkKLQkJCQl8IEFUOTFfU01DX0RCV184Ci0JCQkJfCBBVDkxX1NNQ19XU0VOCi0JCQkJfCBBVDkxX1NNQ19OV1NfKDE1KSk7Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzYsIDEpOwotCi0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTIzLCAwKTsKLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTIzLCAxKTsKLQotLyogSW5pdGlhbGl6YXRpb24gb2YgdGhlIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciBmb3IgQ2hpcCBTZWxlY3QgMyAqLwotCWF0OTFfcmFtY193cml0ZSgwLCBBVDkxX1NNQ19DU1IoMyksCi0JCUFUOTFfU01DX0RCV18xNiAgfAkvKiAxNiBiaXQgKi8KLQkJQVQ5MV9TTUNfV1NFTiAgICB8Ci0JCUFUOTFfU01DX05XU18oNSkgfAkvKiB3YWl0IHN0YXRlcyAqLwotCQlBVDkxX1NNQ19UREZfKDEpCS8qIGZsb2F0IHRpbWUgKi8KLQkpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShlY285MjBfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWNvOTIwX3NwaV9kZXZpY2VzKSk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVjbzkyMF9sZWRzLCBBUlJBWV9TSVpFKGVjbzkyMF9sZWRzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoRUNPOTIwLCAiZWNvOTIwIikKLQkvKiBNYWludGFpbmVyOiBTYXNjaGEgSGF1ZXIgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWNvOTIwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBlY285MjBfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZmxleGliaXR5LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZmxleGliaXR5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YWE0YTIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWZsZXhpYml0eS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZmxleGliaXR5LmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRmxleGliaXR5Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBmbGV4aWJpdHlfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi0vKiBVU0IgSG9zdCBwb3J0ICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZmxleGliaXR5X3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotLyogVVNCIERldmljZSBwb3J0ICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBmbGV4aWJpdHlfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM1LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotLyogSTJDIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBmbGV4aWJpdHlfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJkczEzMDciLCAweDY4KSwKLQl9LAotfTsKLQotLyogU1BJIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZmxleGliaXR5X3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDEsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLX07Ci0KLS8qIE1DSSAoU0QvTU1DKSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGZsZXhpYml0eV9tY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BDOSwKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QQzQsCi0JfSwKLX07Ci0KLS8qIExFRHMgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmxleGliaXR5X2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMTpncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTEyLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjE6cmVkIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMTMsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMjpncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjI2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjI6cmVkIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMjcsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMzpncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzgsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAidXNiMzpyZWQiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEM2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjQ6Z3JlZW4iLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI0LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JewotCQkubmFtZQkJCT0gInVzYjQ6cmVkIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCNSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZmxleGliaXR5X2JvYXJkX2luaXQodm9pZCkKLXsKLQlhdDkxX3JlZ2lzdGVyX2RldmljZXMoKTsKLQotCS8qIFNlcmlhbCAqLwotCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZmbGV4aWJpdHlfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmZmxleGliaXR5X3VkY19kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGZsZXhpYml0eV9pMmNfZGV2aWNlcywKLQkJQVJSQVlfU0laRShmbGV4aWJpdHlfaTJjX2RldmljZXMpKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGZsZXhpYml0eV9zcGlfZGV2aWNlcywKLQkJQVJSQVlfU0laRShmbGV4aWJpdHlfc3BpX2RldmljZXMpKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZmbGV4aWJpdHlfbWNpMF9kYXRhKTsKLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoZmxleGliaXR5X2xlZHMsIEFSUkFZX1NJWkUoZmxleGliaXR5X2xlZHMpKTsKLX0KLQotTUFDSElORV9TVEFSVChGTEVYSUJJVFksICJGbGV4aWJpdHkgQ29ubmVjdCIpCi0JLyogTWFpbnRhaW5lcjogTWF4aW0gT3NpcG92ICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZmxleGliaXR5X2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBmbGV4aWJpdHlfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZ3NpYTE4cy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWdzaWExOHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY1Y2M1NWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWdzaWExOHMuYworKysgL2Rldi9udWxsCkBAIC0xLDU4NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAxMCBDaHJpc3RpYW4gR2xpbmRrYW1wIDxjaHJpc3RpYW4uZ2xpbmRrYW1wQHRhc2tpdC5kZT4KLSAqICAgICAgICAgICAgICAgICAgICAgdGFza2l0IEdtYkgKLSAqICAgICAgICAgICAgICAgIDIwMTAgSWdvciBQbHlhdG92IDxwbHlhdG92QGdtYWlsLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgR2VvU0lHIEx0ZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3cxLWdwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvcGNmODU3eC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdzaWExOHMuaCIKLSNpbmNsdWRlICJzdGFtcDlnMjAuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX2luaXRfZWFybHkodm9pZCkKLXsKLQlzdGFtcDlnMjBfaW5pdF9lYXJseSgpOwotfQotCi0vKgotICogVHdvIFVTQiBIb3N0IHBvcnRzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSB1c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEEyMiwKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLS8qCi0gKiBNQUNCIEV0aGVybmV0IGRldmljZQotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQTI4LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLS8qCi0gKiBMRURzIGFuZCBHUE9zCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJCT0gImdwbzpzcGkxcmVzZXQiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxLAotCQkuYWN0aXZlX2xvdwkJPSAwLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JewotCQkubmFtZQkJCT0gImdwbzp0cmlnX25ldF9vdXQiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIyMCwKLQkJLmFjdGl2ZV9sb3cJCT0gMCwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsKLQkJLm5hbWUJCQk9ICJncG86dHJpZ19uZXRfZGlyIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTksCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7Ci0JCS5uYW1lCQkJPSAiZ3BvOmNoYXJnZV9kaXMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMyLAotCQkuYWN0aXZlX2xvdwkJPSAwLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JewotCQkubmFtZQkJCT0gImxlZDpldmVudCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE3LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JewotCQkubmFtZQkJCT0gImxlZDpsYW4iLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxOCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsKLQkJLm5hbWUJCQk9ICJsZWQ6ZXJyb3IiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxNiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09OLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBncGlvX2xlZF9pbmZvID0gewotCS5sZWRzCQk9IGdwaW9fbGVkcywKLQkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKGdwaW9fbGVkcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsZWRzID0gewotCS5uYW1lCT0gImxlZHMtZ3BpbyIsCi0JLmlkCT0gMCwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZncGlvX2xlZF9pbmZvLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX2xlZHNfaW5pdCh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbGVkcyk7Ci19Ci0KLS8qIFBDRjg1NzQgMHgyMCBHUElPIC0gVTEgb24gdGhlIEdTX0lBMTgtQ0JfVjMgYm9hcmQgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcGNmX2dwaW9fbGVkczFbXSA9IHsKLQl7IC8qIGJpdCAwICovCi0JCS5uYW1lCQkJPSAiZ3BvOmhkY19wb3dlciIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19IRENfUE9XRVIsCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCAxICovCi0JCS5uYW1lCQkJPSAiZ3BvOndpZmlfc2V0dXAiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fV0lGSV9TRVRVUCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsgLyogYml0IDIgKi8KLQkJLm5hbWUJCQk9ICJncG86d2lmaV9lbmFibGUiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fV0lGSV9FTkFCTEUsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCAzCSovCi0JCS5uYW1lCQkJPSAiZ3BvOndpZmlfcmVzZXQiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fV0lGSV9SRVNFVCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09OLAotCX0sCi0JLyogYml0IDQgdXNlZCBhcyBHUEkJKi8KLQl7IC8qIGJpdCA1ICovCi0JCS5uYW1lCQkJPSAiZ3BvOmdwc19zZXR1cCIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19HUFNfU0VUVVAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCA2ICovCi0JCS5uYW1lCQkJPSAiZ3BvOmdwc19zdGFuZGJ5IiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX0dQU19TVEFOREJZLAotCQkuYWN0aXZlX2xvdwkJPSAwLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfSwKLQl7IC8qIGJpdCA3ICovCi0JCS5uYW1lCQkJPSAiZ3BvOmdwc19wb3dlciIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19HUFNfUE9XRVIsCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHBjZl9ncGlvX2xlZF9pbmZvMSA9IHsKLQkubGVkcwkJPSBwY2ZfZ3Bpb19sZWRzMSwKLQkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHBjZl9ncGlvX2xlZHMxKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjZl9sZWRzMSA9IHsKLQkubmFtZQk9ICJsZWRzLWdwaW8iLCAvKiBHU19JQTE4LUNCX2JvYXJkICovCi0JLmlkCT0gMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZwY2ZfZ3Bpb19sZWRfaW5mbzEsCi0JfQotfTsKLQotLyogUENGODU3NCAweDIyIEdQSU8gLSBVMSBvbiB0aGUgR1NfMkdfT1BUMS1BX1YwIGJvYXJkIChBbGFybSkgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcGNmX2dwaW9fbGVkczJbXSA9IHsKLQl7IC8qIGJpdCAwICovCi0JCS5uYW1lCQkJPSAiZ3BvOmFsYXJtXzEiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fQUxBUk0xLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JeyAvKiBiaXQgMSAqLwotCQkubmFtZQkJCT0gImdwbzphbGFybV8yIiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX0FMQVJNMiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCXsgLyogYml0IDIgKi8KLQkJLm5hbWUJCQk9ICJncG86YWxhcm1fMyIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19BTEFSTTMsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLQl7IC8qIGJpdCAzICovCi0JCS5uYW1lCQkJPSAiZ3BvOmFsYXJtXzQiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fQUxBUk00LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGLAotCX0sCi0JLyogYml0cyA0LCA1LCA2IG5vdCB1c2VkICovCi0JeyAvKiBiaXQgNyAqLwotCQkubmFtZQkJCT0gImdwbzphbGFybV92X3JlbGF5X29uIiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX0FMQVJNX1ZfUkVMQVlfT04sCi0JCS5hY3RpdmVfbG93CQk9IDAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JCS5kZWZhdWx0X3N0YXRlCQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBwY2ZfZ3Bpb19sZWRfaW5mbzIgPSB7Ci0JLmxlZHMJCT0gcGNmX2dwaW9fbGVkczIsCi0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShwY2ZfZ3Bpb19sZWRzMiksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY2ZfbGVkczIgPSB7Ci0JLm5hbWUJPSAibGVkcy1ncGlvIiwKLQkuaWQJPSAyLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnBjZl9ncGlvX2xlZF9pbmZvMiwKLQl9Ci19OwotCi0vKiBQQ0Y4NTc0IDB4MjQgR1BJTyBVMSBvbiB0aGUgR1NfMkctT1BUMjMtQV9WMCBib2FyZCAoTW9kZW0pICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHBjZl9ncGlvX2xlZHMzW10gPSB7Ci0JeyAvKiBiaXQgMCAqLwotCQkubmFtZQkJCT0gImdwbzptb2RlbV9wb3dlciIsCi0JCS5ncGlvCQkJPSBQQ0ZfR1BJT19NT0RFTV9QT1dFUiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQkJLmRlZmF1bHRfc3RhdGUJCT0gTEVEU19HUElPX0RFRlNUQVRFX09GRiwKLQl9LAotCQkvKiBiaXRzIDEgYW5kIDIgbm90IHVzZWQgKi8KLQl7IC8qIGJpdCAzICovCi0JCS5uYW1lCQkJPSAiZ3BvOm1vZGVtX3Jlc2V0IiwKLQkJLmdwaW8JCQk9IFBDRl9HUElPX01PREVNX1JFU0VULAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfSwKLQkJLyogYml0cyA0LCA1IGFuZCA2IG5vdCB1c2VkICovCi0JeyAvKiBiaXQgNyAqLwotCQkubmFtZQkJCT0gImdwbzp0cnhfcmVzZXQiLAotCQkuZ3BpbwkJCT0gUENGX0dQSU9fVFJYX1JFU0VULAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCQkuZGVmYXVsdF9zdGF0ZQkJPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHBjZl9ncGlvX2xlZF9pbmZvMyA9IHsKLQkubGVkcwkJPSBwY2ZfZ3Bpb19sZWRzMywKLQkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHBjZl9ncGlvX2xlZHMzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjZl9sZWRzMyA9IHsKLQkubmFtZQk9ICJsZWRzLWdwaW8iLAotCS5pZAk9IDMsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmcGNmX2dwaW9fbGVkX2luZm8zLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX3BjZl9sZWRzX2luaXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjZl9sZWRzMSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY2ZfbGVkczIpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNmX2xlZHMzKTsKLX0KLQotLyoKLSAqIFNQSSBidXNzZXMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZ3NpYTE4c19zcGlfZGV2aWNlc1tdID0gewotCXsgLyogVXNlciBhY2Nlc3NpYmxlIHNwaTAsIGNzMCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggTVNQIFJUQyAqLwotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmJ1c19udW0JPSAwLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gNTgwMDAwLAotCQkubW9kZQkJPSBTUElfTU9ERV8xLAotCX0sCi0JeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpMSwgY3MwIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBpbnQuIERTUCAqLwotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmJ1c19udW0JPSAxLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gNTYwMDAwMCwKLQkJLm1vZGUJCT0gU1BJX01PREVfMCwKLQl9LAotCXsgLyogVXNlciBhY2Nlc3NpYmxlIHNwaTEsIGNzMSB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggZXh0LiBEU1AgKi8KLQkJLm1vZGFsaWFzCT0gInNwaWRldiIsCi0JCS5idXNfbnVtCT0gMSwKLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDU2MDAwMDAsCi0JCS5tb2RlCQk9IFNQSV9NT0RFXzAsCi0JfSwKLQl7IC8qIFVzZXIgYWNjZXNzaWJsZSBzcGkxLCBjczIgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGV4dC4gRFNQICovCi0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAotCQkuYnVzX251bQk9IDEsCi0JCS5jaGlwX3NlbGVjdAk9IDIsCi0JCS5tYXhfc3BlZWRfaHoJPSA1NjAwMDAwLAotCQkubW9kZQkJPSBTUElfTU9ERV8wLAotCX0sCi0JeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpMSwgY3MzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBleHQuIERTUCAqLwotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmJ1c19udW0JPSAxLAotCQkuY2hpcF9zZWxlY3QJPSAzLAotCQkubWF4X3NwZWVkX2h6CT0gNTYwMDAwMCwKLQkJLm1vZGUJCT0gU1BJX01PREVfMCwKLQl9Ci19OwotCi0vKgotICogR1BJIEJ1dHRvbnMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGJ1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEdQSU9fVFJJR19ORVRfSU4sCi0JCS5jb2RlCQk9IEJUTl8xLAotCQkuZGVzYwkJPSAiVFJJR19ORVRfSU4iLAotCQkudHlwZQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CT0gMCwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JeyAvKiBTVzgwIG9uIHRoZSBHU19JQTE4X1MtTU4gYm9hcmQqLwotCQkuZ3BpbwkJPSBHUElPX0NBUkRfVU5NT1VOVF8wLAotCQkuY29kZQkJPSBCVE5fMiwKLQkJLmRlc2MJCT0gIkNhcmQgdW1vdW50IDAiLAotCQkudHlwZQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JeyAvKiBTVzc5IG9uIHRoZSBHU19JQTE4X1MtTU4gYm9hcmQqLwotCQkuZ3BpbwkJPSBHUElPX0NBUkRfVU5NT1VOVF8xLAotCQkuY29kZQkJPSBCVE5fMywKLQkJLmRlc2MJCT0gIkNhcmQgdW1vdW50IDEiLAotCQkudHlwZQkJPSBFVl9LRVksCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JeyAvKiBTVzI4MCBvbiB0aGUgR1NfSUExOC1DQiBib2FyZCovCi0JCS5ncGlvCQk9IEdQSU9fS0VZX1BPV0VSLAotCQkuY29kZQkJPSBLRVlfUE9XRVIsCi0JCS5kZXNjCQk9ICJQb3dlciBPZmYgQnV0dG9uIiwKLQkJLnR5cGUJCT0gRVZfS0VZLAotCQkuYWN0aXZlX2xvdwk9IDAsCi0JCS53YWtldXAJCT0gMSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGJ1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGJ1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYnV0dG9uX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZidXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZ3NpYTE4c19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEdQSU9fVFJJR19ORVRfSU4sIDEpOwotCWF0OTFfc2V0X2RlZ2xpdGNoKEdQSU9fVFJJR19ORVRfSU4sIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoR1BJT19DQVJEX1VOTU9VTlRfMCwgMSk7Ci0JYXQ5MV9zZXRfZGVnbGl0Y2goR1BJT19DQVJEX1VOTU9VTlRfMCwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChHUElPX0NBUkRfVU5NT1VOVF8xLCAxKTsKLQlhdDkxX3NldF9kZWdsaXRjaChHUElPX0NBUkRfVU5NT1VOVF8xLCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEdQSU9fS0VZX1BPV0VSLCAwKTsKLQlhdDkxX3NldF9kZWdsaXRjaChHUElPX0tFWV9QT1dFUiwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJ1dHRvbl9kZXZpY2UpOwotfQotCi0vKgotICogSTJDCi0gKi8KLXN0YXRpYyBpbnQgcGNmODU3NHhfMHgyMF9zZXR1cChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZ3BpbywKLQkJCQl1bnNpZ25lZCBpbnQgbmdwaW8sIHZvaWQgKmNvbnRleHQpCi17Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChncGlvICsgUENGX0dQSU9fRVRIX0RFVEVDVCwgImV0aF9kZXQiKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcl9lcnIoImVycm9yOiBjYW4ndCByZXF1ZXN0IEdQSU8lZFxuIiwKLQkJCWdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNUKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0Jc3RhdHVzID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3BpbyArIFBDRl9HUElPX0VUSF9ERVRFQ1QpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCXByX2VycigiZXJyb3I6IGNhbid0IHNldHVwIEdQSU8lZCBhcyBpbnB1dFxuIiwKLQkJCWdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNUKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0Jc3RhdHVzID0gZ3Bpb19leHBvcnQoZ3BpbyArIFBDRl9HUElPX0VUSF9ERVRFQ1QsIGZhbHNlKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcl9lcnIoImVycm9yOiBjYW4ndCBleHBvcnQgR1BJTyVkXG4iLAotCQkJZ3BpbyArIFBDRl9HUElPX0VUSF9ERVRFQ1QpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlzdGF0dXMgPSBncGlvX3N5c2ZzX3NldF9hY3RpdmVfbG93KGdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNULCAxKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcl9lcnIoImVycm9yOiBncGlvX3N5c2ZzX3NldCBhY3RpdmVfbG93KEdQSU8lZCwgMSlcbiIsCi0JCQlncGlvICsgUENGX0dQSU9fRVRIX0RFVEVDVCk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNmODU3NHhfMHgyMF90ZWFyZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZ3BpbywKLQkJCQkJdW5zaWduZWQgbmdwaW8sIHZvaWQgKmNvbnRleHQpCi17Ci0JZ3Bpb19mcmVlKGdwaW8gKyBQQ0ZfR1BJT19FVEhfREVURUNUKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmMjBfcGRhdGEgPSB7Ci0JLmdwaW9fYmFzZQk9IEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCwKLQkubl9sYXRjaAk9ICgxIDw8IDQpLAotCS5zZXR1cAkJPSBwY2Y4NTc0eF8weDIwX3NldHVwLAotCS50ZWFyZG93bgk9IHBjZjg1NzR4XzB4MjBfdGVhcmRvd24sCi19OwotCi1zdGF0aWMgc3RydWN0IHBjZjg1N3hfcGxhdGZvcm1fZGF0YSBwY2YyMl9wZGF0YSA9IHsKLQkuZ3Bpb19iYXNlCT0gR1NfSUExOF9TX1BDRl9HUElPX0JBU0UxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmMjRfcGRhdGEgPSB7Ci0JLmdwaW9fYmFzZQk9IEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBnc2lhMThzX2kyY19kZXZpY2VzW10gPSB7Ci0JeyAvKiBVMSBvbiB0aGUgR1NfSUExOC1DQl9WMyBib2FyZCAqLwotCQlJMkNfQk9BUkRfSU5GTygicGNmODU3NCIsIDB4MjApLAotCQkucGxhdGZvcm1fZGF0YSA9ICZwY2YyMF9wZGF0YSwKLQl9LAotCXsgLyogVTEgb24gdGhlIEdTXzJHX09QVDEtQV9WMCBib2FyZCAoQWxhcm0pICovCi0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc0IiwgMHgyMiksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjIyX3BkYXRhLAotCX0sCi0JeyAvKiBVMSBvbiB0aGUgR1NfMkctT1BUMjMtQV9WMCBib2FyZCAoTW9kZW0pICovCi0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc0IiwgMHgyNCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjI0X3BkYXRhLAotCX0sCi0JeyAvKiBVMTYxIG9uIHRoZSBHU19JQTE4X1MtTU4gYm9hcmQgKi8KLQkJSTJDX0JPQVJEX0lORk8oIjI0YzEwMjQiLCAweDUwKSwKLQl9LAotCXsgLyogVTE2MiBvbiB0aGUgR1NfSUExOF9TLU1OIGJvYXJkICovCi0JCUkyQ19CT0FSRF9JTkZPKCIyNGMwMSIsIDB4NTMpLAotCX0sCi19OwotCi0vKgotICogQ29tcGFjdCBGbGFzaAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBfX2luaXRkYXRhIGdzaWExOHNfY2YxX2RhdGEgPSB7Ci0JLmlycV9waW4JPSBBVDkxX1BJTl9QQTI3LAotCS5kZXRfcGluCT0gQVQ5MV9QSU5fUEIzMCwKLQkudmNjX3Bpbgk9IC1FSU5WQUwsCi0JLnJzdF9waW4JPSBBVDkxX1BJTl9QQjMxLAotCS5jaGlwc2VsZWN0CT0gNSwKLQkuZmxhZ3MJCT0gQVQ5MV9DRl9UUlVFX0lERSwKLX07Ci0KLS8qIFBvd2VyIE9mZiBieSBSVEMgKi8KLXN0YXRpYyB2b2lkIGdzaWExOHNfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JcHJfbm90aWNlKCJQb3dlciBzdXBwbHkgd2lsbCBiZSBzd2l0Y2hlZCBvZmYgYXV0b21hdGljYWxseSBub3cgb3IgYWZ0ZXIgNjAgc2Vjb25kcyB3aXRob3V0IEFybURBUy5cbiIpOwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BBMjUsIDEpOwotCS8qIFNwaW4gdG8gZGVhdGguLi4gKi8KLQl3aGlsZSAoMSkKLQkJOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBnc2lhMThzX3Bvd2VyX29mZl9pbml0KHZvaWQpCi17Ci0JcG1fcG93ZXJfb2ZmID0gZ3NpYTE4c19wb3dlcl9vZmY7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBnc2lhMThzX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKgotCSAqIFVTQVJUMCBvbiB0dHlTMSAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpLgotCSAqIFVzZWQgZm9yIEludGVybmFsIEFuYWxvZyBNb2RlbS4KLQkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLAotCQkJCUFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMgfAotCQkJCUFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfAotCQkJCUFUTUVMX1VBUlRfRENEIHwgQVRNRUxfVUFSVF9SSSk7Ci0JLyoKLQkgKiBVU0FSVDEgb24gdHR5UzIgKFJ4LCBUeCwgQ1RTLCBSVFMpLgotCSAqIFVzZWQgZm9yIEdQUyBvciBXaUZpIG9yIERhdGEgc3RyZWFtLgotCSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsCi0JCQkJQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JLyoKLQkgKiBVU0FSVDIgb24gdHR5UzMgKFJ4LCBUeCwgQ1RTLCBSVFMpLgotCSAqIFVzZWQgZm9yIEV4dGVybmFsIE1vZGVtLgotCSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzIsIDMsCi0JCQkJQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JLyoKLQkgKiBVU0FSVDMgb24gdHR5UzQgKFJ4LCBUeCwgUlRTKS4KLQkgKiBVc2VkIGZvciBSUy00ODUuCi0JICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMywgNCwgQVRNRUxfVUFSVF9SVFMpOwotCi0JLyoKLQkgKiBVU0FSVDQgb24gdHR5UzUgKFJ4LCBUeCkuCi0JICogVXNlZCBmb3IgVFJYNDMzIFJhZGlvIE1vZHVsZS4KLQkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVM0LCA1LCAwKTsKLQlzdGFtcDlnMjBfYm9hcmRfaW5pdCgpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZ1c2JoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnVkY19kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZtYWNiX2RhdGEpOwotCWdzaWExOHNfbGVkc19pbml0KCk7Ci0JZ3NpYTE4c19wY2ZfbGVkc19pbml0KCk7Ci0JZ3NpYTE4c19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGdzaWExOHNfaTJjX2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShnc2lhMThzX2kyY19kZXZpY2VzKSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX2NmKCZnc2lhMThzX2NmMV9kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGdzaWExOHNfc3BpX2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShnc2lhMThzX3NwaV9kZXZpY2VzKSk7Ci0JZ3NpYTE4c19wb3dlcl9vZmZfaW5pdCgpOwotfQotCi1NQUNISU5FX1NUQVJUKEdTSUExOFMsICJHU19JQTE4X1MiKQotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGdzaWExOHNfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGdzaWExOHNfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWthZmEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNiMWRmNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNiBTcGVycnktU3VuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQga2FmYV9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogU2V0IGNwdSB0eXBlOiBQUUZQICovCi0JYXQ5MXJtOTIwMF9zZXRfdHlwZShBUkNIX1JFVklTT05fOTIwMF9QUUZQKTsKLQotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGthZmFfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAotCS5pc19ybWlpCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBrYWZhX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMSwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEga2FmYV91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQjYsCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QQjcsCi19OwotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGthZmFfbGVkc1tdID0gewotCXsJLyogRDEgKi8KLQkJLm5hbWUJCQk9ICJsZWQxIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCNCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQga2FmYV9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEgKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZrYWZhX2V0aF9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZrYWZhX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmthZmFfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShOVUxMLCAwKTsKLQkvKiBMRURzICovCi0JYXQ5MV9ncGlvX2xlZHMoa2FmYV9sZWRzLCBBUlJBWV9TSVpFKGthZmFfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKEtBRkEsICJTcGVycnktU3VuIEtBRkEiKQotCS8qIE1haW50YWluZXI6IFNlcmdlaSBTaGFyb25vdiAqLwotCS5pbml0X3RpbWUJPSBhdDkxcm05MjAwX3RpbWVyX2luaXQsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBrYWZhX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBrYWZhX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNThkMzYyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1rYjkyMDIuYworKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwNSBrYl9hZG1pbgotICogIAkJICAgICAgIEt3aWtCeXRlLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBrYjkyMDJfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIFNldCBjcHUgdHlwZTogUFFGUCAqLwotCWF0OTFybTkyMDBfc2V0X3R5cGUoQVJDSF9SRVZJU09OXzkyMDBfUFFGUCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTAgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTAwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGtiOTIwMl9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQjI5LAotCS5pc19ybWlpCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBrYjkyMDJfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAxLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBrYjkyMDJfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEIyNCwKLQkucHVsbHVwX3Bpbgk9IEFUOTFfUElOX1BCMjIsCi19OwotCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEga2I5MjAyX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEIyLAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGtiOTIwMl9uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAibmFuZF9mcyIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEga2I5MjAyX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIyLAotCS5jbGUJCT0gMjEsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMyOSwKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMjgsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkucGFydHMJCT0ga2I5MjAyX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGtiOTIwMl9uYW5kX3BhcnRpdGlvbiksCi19OwotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGtiOTIwMl9sZWRzW10gPSB7Ci0JewkvKiBEMSAqLwotCQkubmFtZQkJCT0gImxlZDEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiBEMiAqLwotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxOCwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJ0aW1lciIsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGtiOTIwMl9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEgKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzAsIDEsIDApOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyIChSeCAmIFR4IG9ubHkpIC0gSVJEQSAob3B0aW9uYWwpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMxLCAyLCAwKTsKLQotCS8qIFVTQVJUMyBvbiB0dHlTMyAoUngsIFR4LCBDVFMsIFJUUykgLSBSUzQ4NSAob3B0aW9uYWwpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMzLCAzLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZrYjkyMDJfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmtiOTIwMl91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZrYjkyMDJfdWRjX2RhdGEpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmtiOTIwMl9tY2kwX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShOVUxMLCAwKTsKLQkvKiBOQU5EICovCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmtiOTIwMl9uYW5kX2RhdGEpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhrYjkyMDJfbGVkcywgQVJSQVlfU0laRShrYjkyMDJfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKEtCOTIwMCwgIktCOTIweCIpCi0JLyogTWFpbnRhaW5lcjogS3dpa0J5dGUsIEluYy4gKi8KLQkuaW5pdF90aW1lCT0gYXQ5MXJtOTIwMF90aW1lcl9pbml0LAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0ga2I5MjAyX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBrYjkyMDJfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGNvbnRyb2wtZzIwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGNvbnRyb2wtZzIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMjZiOTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXBjb250cm9sLWcyMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzdGlhbiBHbGluZGthbXAgPGNocmlzdGlhbi5nbGluZGthbXBAdGFza2l0LmRlPgotICogICAgICAgICAgICAgICAgICAgICB0YXNraXQgR21iSAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotLyoKLSAqIGNvcGllZCBhbmQgYWRqdXN0ZWQgZnJvbSBib2FyZC1zdGFtcDlnMjAuYwotICogYnkgUGV0ZXIgR3NlbGxtYW5uIDxwZ3NlbGxtYW5uQHBvcnRuZXItZWxla3Ryb25pay5hdD4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdzEtZ3Bpby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzdGFtcDlnMjAuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjb250cm9sX2cyMF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0Jc3RhbXA5ZzIwX2luaXRfZWFybHkoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBwY29udHJvbF9zbWNfY29uZmlnWzJdID0geyB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDE2LAotCS5ucmRfc2V0dXAJCT0gMTgsCi0JLm5jc193cml0ZV9zZXR1cAk9IDE2LAotCS5ud2Vfc2V0dXAJCT0gMTgsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gNjMsCi0JLm5yZF9wdWxzZQkJPSA1NSwKLQkubmNzX3dyaXRlX3B1bHNlCT0gNjMsCi0JLm53ZV9wdWxzZQkJPSA1NSwKLQotCS5yZWFkX2N5Y2xlCQk9IDEyNywKLQkud3JpdGVfY3ljbGUJCT0gMTI3LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfU0VMRUNUCi0JCQl8IEFUOTFfU01DX0RCV184IHwgQVQ5MV9TTUNfUFNfNAotCQkJfCBBVDkxX1NNQ19UREZNT0RFLAotCS50ZGZfY3ljbGVzCQk9IDMsCi19LCB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAwLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMSwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSA4LAotCS5ucmRfcHVsc2UJCT0gOCwKLQkubmNzX3dyaXRlX3B1bHNlCT0gNSwKLQkubndlX3B1bHNlCQk9IDQsCi0KLQkucmVhZF9jeWNsZQkJPSA4LAotCS53cml0ZV9jeWNsZQkJPSA3LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfU0VMRUNUCi0JCQl8IEFUOTFfU01DX0RCV18xNiB8IEFUOTFfU01DX1BTXzgKLQkJCXwgQVQ5MV9TTUNfVERGTU9ERSwKLQkudGRmX2N5Y2xlcwkJPSAxLAotfSB9OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYWRkX2RldmljZV9wY29udHJvbCh2b2lkKQotewotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCA0IChJTyBjb21wYXRpYmxlIHRvIDgwNTEgIFg0ICkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgNCwgJnBjb250cm9sX3NtY19jb25maWdbMF0pOwotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCA3IChGZXJyb1JBTSAyNTZLaUJ4MTZiaXQgTVIyQTE2QSAgRDQgKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCA3LCAmcGNvbnRyb2xfc21jX2NvbmZpZ1sxXSk7Ci19Ci0KLQotLyoKLSAqIFVTQiBIb3N0IHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIHVzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotCi0vKgotICogVVNCIERldmljZSBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIHBjb250cm9sX2cyMF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQTIyLAkvKiBEZXRlY3QgKzVWIGJ1cyB2b2x0YWdlICovCi0JLnB1bGx1cF9waW4JPSBBVDkxX1BJTl9QQTQsCQkvKiBLLXN0YXRlLCBhY3RpdmUgbG93ICovCi19OwotCi0KLS8qCi0gKiBNQUNCIEV0aGVybmV0IGRldmljZQotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQTI4LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLQotLyoKLSAqIEkyQyBkZXZpY2VzOiBlZXByb20gYW5kIHBoeS9zd2l0Y2gKLSAqLwotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHBjb250cm9sX2cyMF9pMmNfZGV2aWNlc1tdID0gewotewkJLyogRDcgIGFkZHJlc3Mgd2lkdGg9MiwgOEtpQiAqLwotCUkyQ19CT0FSRF9JTkZPKCIyNGM2NCIsIDB4NTApCi19LCB7CQkvKiBEOCAgYWRkcmVzcyB3aWR0aD0xLCAxIGJ5dGUgaGFzIDMyIGJpdHMhICovCi0JSTJDX0JPQVJEX0lORk8oImxhbjkzMDMiLCAweDBhKQotfSwgfTsKLQotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHBjb250cm9sX2cyMF9sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJCT0gIkxFRDEiLAkvKiByZWQgIEg1ICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE4LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAkvKiBzdXBlcnZpc29yICovCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDIiLAkvKiB5ZWxsb3cgIEg3ICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE5LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1tYzAiLAkvKiBTRC1jYXJkIGFjdGl2aXR5ICovCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDMiLAkvKiBncmVlbiAgSDIgKi8KLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMjAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwJLyogYmxpbmt5ICovCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDQiLAkvKiByZWQgIEgzICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzYsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCS8qIGNvbm5lY3Rpb24gbG9zdCAqLwotCX0sIHsKLQkJLm5hbWUJCQk9ICJMRUQ1IiwJLyogeWVsbG93ICBINiAqLwotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEM3LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAkvKiB1bnNlbnQgZGF0YSAqLwotCX0sIHsKLQkJLm5hbWUJCQk9ICJMRUQ2IiwJLyogZ3JlZW4gIEgxICovCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzksCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCS8qIHNuYWZ1ICovCi0JfQotfTsKLQotCi0vKgotICogU1BJIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY29udHJvbF9nMjBfc3BpX2RldmljZXNbXSA9IHsKLQl7Ci0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAkvKiBITUkgcG9ydCAgWDQgKi8KLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDUwICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LCB7Ci0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAkvKiBwaWdneWJhY2sgIEEyICovCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSA1MCAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDEsCi0JfSwKLX07Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjb250cm9sX2cyMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUykgcGlnZ3liYWNrICBBMiAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTCi0JCQkJCQl8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgQ1RTLCBSVFMpIGlzb2xhdGVkIFJTNDg1ICBYNSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTCi0JCQkJCQl8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUMiBvbiB0dHlTMy4gKFJ4LCBUeCkgIDliaXQtQnVzICBNdWx0aWRyb3AtbW9kZSAgWDQgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVM0LCAzLCAwKTsKLQlzdGFtcDlnMjBfYm9hcmRfaW5pdCgpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZ1c2JoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV9ldGgoJm1hY2JfZGF0YSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhwY29udHJvbF9nMjBfaTJjX2RldmljZXMsCi0JCUFSUkFZX1NJWkUocGNvbnRyb2xfZzIwX2kyY19kZXZpY2VzKSk7Ci0JYWRkX2RldmljZV9wY29udHJvbCgpOwotCWF0OTFfYWRkX2RldmljZV9zcGkocGNvbnRyb2xfZzIwX3NwaV9kZXZpY2VzLAotCQlBUlJBWV9TSVpFKHBjb250cm9sX2cyMF9zcGlfZGV2aWNlcykpOwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnBjb250cm9sX2cyMF91ZGNfZGF0YSk7Ci0JYXQ5MV9ncGlvX2xlZHMocGNvbnRyb2xfZzIwX2xlZHMsCi0JCUFSUkFZX1NJWkUocGNvbnRyb2xfZzIwX2xlZHMpKTsKLQkvKiBwaWdneWJhY2sgIEEyICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIzMSwgMSk7Ci19Ci0KLQotTUFDSElORV9TVEFSVChQQ09OVFJPTF9HMjAsICJQQ29udHJvbCBHMjAiKQotCS8qIE1haW50YWluZXI6IHBnc2VsbG1hbm5AcG9ydG5lci1lbGVrdHJvbmlrLmF0ICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gcGNvbnRyb2xfZzIwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBwY29udHJvbF9nMjBfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGljb3R1eDIwMC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXBpY290dXgyMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwZjJkNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGljb3R1eDIwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcGljb3R1eDIwMC5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEtsZWluaGVueiBFbGVrdHJvbmlrIEdtYkgKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBwaWNvdHV4MjAwX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBwaWNvdHV4MjAwX2V0aF9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDNCwKLQkuaXNfcm1paQk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgcGljb3R1eDIwMF91c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDEsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBwaWNvdHV4MjAwX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEIyNywKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QQTE3LAotCX0sCi19OwotCi0jZGVmaW5lIFBJQ09UVVgyMDBfRkxBU0hfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMAotI2RlZmluZSBQSUNPVFVYMjAwX0ZMQVNIX1NJWkUJU1pfNE0KLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGljb3R1eDIwMF9mbGFzaF9kYXRhID0gewotCS53aWR0aAk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBpY290dXgyMDBfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CQk9IFBJQ09UVVgyMDBfRkxBU0hfQkFTRSwKLQkuZW5kCQk9IFBJQ09UVVgyMDBfRkxBU0hfQkFTRSArIFBJQ09UVVgyMDBfRkxBU0hfU0laRSAtIDEsCi0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGljb3R1eDIwMF9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmcGljb3R1eDIwMF9mbGFzaF9kYXRhLAotCQkJfSwKLQkucmVzb3VyY2UJPSAmcGljb3R1eDIwMF9mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGljb3R1eDIwMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzEsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCSAgfCBBVE1FTF9VQVJUX1JJKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZwaWNvdHV4MjAwX2V0aF9kYXRhKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZwaWNvdHV4MjAwX3VzYmhfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQkvKiBNTUMgKi8KLQlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QQjIyLCAxKTsJLyogdGhpcyBNTUMgY2FyZCBzbG90IGNhbiBvcHRpb25hbGx5IHVzZSBTUEkgc2lnbmFsaW5nIChDUzMpLiAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJnBpY290dXgyMDBfbWNpMF9kYXRhKTsKLQkvKiBOT1IgRmxhc2ggKi8KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBpY290dXgyMDBfZmxhc2gpOwotfQotCi1NQUNISU5FX1NUQVJUKFBJQ09UVVgyWFgsICJwaWNvdHV4IDIwMCIpCi0JLyogTWFpbnRhaW5lcjogS2xlaW5oZW56IEVsZWt0cm9uaWsgR21iSCAqLwotCS5pbml0X3RpbWUJPSBhdDkxcm05MjAwX3RpbWVyX2luaXQsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBwaWNvdHV4MjAwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBwaWNvdHV4MjAwX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJtOTIwMGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcm05MjAwZWsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUzY2VhNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcm05MjAwZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXJtOTIwMGVrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqCi0gKiAgRXBzb24gUzFEIGZyYW1lYnVmZmVyIGdsdWUgY29kZSBpczoKLSAqICAgICBDb3B5cmlnaHQgKEMpIDIwMDUgVGhpYmF1dCBWQVJFTkUgPHZhcmVuZXRAcGFyaXNjLWxpbnV4Lm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGVrX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BENCwKLQkucHVsbHVwX3Bpbgk9IEFUOTFfUElOX1BENSwKLX07Ci0KLSNpZm5kZWYgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJECi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQjI3LAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BBMTcsCi0JfQotfTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCX0sCi0jaWZkZWYgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJECi0JewkvKiBEYXRhRmxhc2ggY2FyZCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDMsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCX0sCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBla19pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oImljczE1MjMiLCAweDI2KSwKLQl9LAotCXsKLQkJSTJDX0JPQVJEX0lORk8oImRhYzM1NTAiLCAweDRkKSwKLQl9Ci19OwotCi0jZGVmaW5lIEVLX0ZMQVNIX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKLSNkZWZpbmUgRUtfRkxBU0hfU0laRQlTWl84TQotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBla19mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBla19mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJCT0gRUtfRkxBU0hfQkFTRSwKLQkuZW5kCQk9IEVLX0ZMQVNIX0JBU0UgKyBFS19GTEFTSF9TSVpFIC0gMSwKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfZmxhc2hfZGF0YSwKLQkJCX0sCi0JLnJlc291cmNlCT0gJmVrX2ZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogInVzZXIgbGVkIDEiLCBEUzIgKi8KLQkJLm5hbWUJCQk9ICJncmVlbiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjAsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibW1jMCIsCi0JfSwKLQl7CS8qICJ1c2VyIGxlZCAyIiwgRFM0ICovCi0JCS5uYW1lCQkJPSAieWVsbG93IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiAidXNlciBsZWQgMyIsIERTNiAqLwotCQkubmFtZQkJCT0gInJlZCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjIsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMSwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJICAgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCSAgIHwgQVRNRUxfVUFSVF9SSSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmVrX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmVrX3VkY19kYXRhKTsKLQlhdDkxX3NldF9tdWx0aV9kcml2ZShla191ZGNfZGF0YS5wdWxsdXBfcGluLCAxKTsJLyogcHVsbHVwX3BpbiBpcyBjb25uZWN0ZWQgdG8gcmVzZXQgKi8KLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKGVrX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX2kyY19kZXZpY2VzKSk7Ci0JLyogU1BJICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NwaShla19zcGlfZGV2aWNlcywgQVJSQVlfU0laRShla19zcGlfZGV2aWNlcykpOwotI2lmZGVmIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRAotCS8qIERhdGFGbGFzaCBjYXJkICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIyMiwgMCk7Ci0jZWxzZQotCS8qIE1NQyAqLwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BCMjIsIDEpOwkvKiB0aGlzIE1NQyBjYXJkIHNsb3QgY2FuIG9wdGlvbmFsbHkgdXNlIFNQSSBzaWduYWxpbmcgKENTMykuICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWtfbWNpMF9kYXRhKTsKLSNlbmRpZgotCS8qIE5PUiBGbGFzaCAqLwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfZmxhc2gpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLQkvKiBWR0EgKi8KLS8vCWVrX2FkZF9kZXZpY2VfdmlkZW8oKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxUk05MjAwRUssICJBdG1lbCBBVDkxUk05MjAwLUVLIikKLQkvKiBNYWludGFpbmVyOiBTQU4gUGVvcGxlL0F0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGVrX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOS1sOTI2MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjE2NmUzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgT2xpbWV4IEx0ZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotLyoKLSAqIFVTQiBIb3N0IHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVrX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotLyoKLSAqIFVTQiBEZXZpY2UgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBla191ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQzUsCi0JLnB1bGx1cF9waW4JPSAtRUlOVkFMLAkJLyogcHVsbC11cCBkcml2ZW4gYnkgVURDICovCi19OwotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotI2lmICFJU19FTkFCTEVEKENPTkZJR19NTUNfQVRNRUxNQ0kpCi0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDEsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRCkKLQl7CS8qIERhdGFGbGFzaCBjYXJkICovCi0JCS5tb2RhbGlhcwk9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDE1ICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LAotI2VuZGlmCi0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuaXNfcm1paQk9IDAsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJCb290bG9hZGVyIEFyZWEiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSAxMCAqIFNaXzFNLAotCX0sCi0JewotCQkubmFtZQk9ICJVc2VyIEFyZWEiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QQzEzLAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEMxNCwKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotCS5wYXJ0cwkJPSBla19uYW5kX3BhcnRpdGlvbiwKLQkubnVtX3BhcnRzCT0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbiksCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDMsCi0JLm5yZF9wdWxzZQkJPSAzLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAotCS5ud2VfcHVsc2UJCT0gMywKLQotCS5yZWFkX2N5Y2xlCQk9IDUsCi0JLndyaXRlX2N5Y2xlCQk9IDUsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCi0JLnRkZl9jeWNsZXMJCT0gMiwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJmVrX25hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla19tY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMV0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BDOCwKLQkJLndwX3BpbgkJPSBBVDkxX1BJTl9QQzQsCi0JfSwKLX07Ci0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogRDEgKi8KLQkJLm5hbWUJCQk9ICJsZWQxIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCi0JewkvKiBEMiAqLwotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEE2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gInRpbWVyIiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCi0JCQkgICB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfCBBVE1FTF9VQVJUX0RDRAotCQkJICAgfCBBVE1FTF9VQVJUX1JJKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMSwgMiwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmVrX3VzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJmVrX3VkY19kYXRhKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7Ci0JLyogTkFORCAqLwotCWVrX2FkZF9kZXZpY2VfbmFuZCgpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZla19tY2kwX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwotfQotCi1NQUNISU5FX1NUQVJUKFNBTTlfTDkyNjAsICJPbGltZXggU0FNOS1MOTI2MCIpCi0JLyogTWFpbnRhaW5lcjogT2xpbWV4ICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjhhOTQ2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYwZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDM1NCArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2IEF0bWVsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2F0NzNjMjEzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDI0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9zeXN0ZW1fcmV2Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSG9zdCBwb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgZWtfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEM1LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0vKgotICogQXVkaW8KLSAqLwotc3RhdGljIHN0cnVjdCBhdDczYzIxM19ib2FyZF9pbmZvIGF0NzNjMjEzX2RhdGEgPSB7Ci0JLnNzY19pZAkJPSAwLAotCS5zaG9ydG5hbWUJPSAiQVQ5MVNBTTkyNjAtRUsgZXh0ZXJuYWwgREFDIiwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVQ3M0MyMTMpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxM19NT0RVTEUpCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ3M2MyMTNfc2V0X2NsayhzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgY2xrICpwY2swOwotCXN0cnVjdCBjbGsgKnBsbGE7Ci0KLQlwY2swID0gY2xrX2dldChOVUxMLCAicGNrMCIpOwotCXBsbGEgPSBjbGtfZ2V0KE5VTEwsICJwbGxhIik7Ci0KLQkvKiBBVDczQzIxMyBNQ0sgQ2xvY2sgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzEsIDApOwkvKiBQQ0swICovCi0KLQljbGtfc2V0X3BhcmVudChwY2swLCBwbGxhKTsKLQljbGtfcHV0KHBsbGEpOwotCi0JaW5mby0+ZGFjX2NsayA9IHBjazA7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGF0NzNjMjEzX3NldF9jbGsoc3RydWN0IGF0NzNjMjEzX2JvYXJkX2luZm8gKmluZm8pIHt9Ci0jZW5kaWYKLQotLyoKLSAqIFNQSSBkZXZpY2VzLgotICovCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0jaWYgIUlTX0VOQUJMRUQoQ09ORklHX01NQ19BVE1FTE1DSSkKLQl7CS8qIERhdGFGbGFzaCBjaGlwICovCi0JCS5tb2RhbGlhcwk9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0CT0gMSwKLQkJLm1heF9zcGVlZF9oegk9IDE1ICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LAotI2lmIGRlZmluZWQoQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEKQotCXsJLyogRGF0YUZsYXNoIGNhcmQgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxMykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUNzNDMjEzX01PRFVMRSkKLQl7CS8qIEFUNzNDMjEzIERBQyAqLwotCQkubW9kYWxpYXMJPSAiYXQ3M2MyMTMiLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTAgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAxLAotCQkubW9kZQkJPSBTUElfTU9ERV8xLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhdDczYzIxM19kYXRhLAotCX0sCi0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzI1NkssCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIlBhcnRpdGlvbiAyIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIGVrX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIxLAotCS5jbGUJCT0gMjIsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkub25fZmxhc2hfYmJ0CT0gMSwKLQkucGFydHMJCT0gZWtfbmFuZF9wYXJ0aXRpb24sCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoZWtfbmFuZF9wYXJ0aXRpb24pLAotfTsKLQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBla19uYW5kX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAxLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMSwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAotCS5ucmRfcHVsc2UJCT0gMywKLQkubmNzX3dyaXRlX3B1bHNlCT0gMywKLQkubndlX3B1bHNlCQk9IDMsCi0KLQkucmVhZF9jeWNsZQkJPSA1LAotCS53cml0ZV9jeWNsZQkJPSA1LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKLQkudGRmX2N5Y2xlcwkJPSAyLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCWVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYgPSBib2FyZF9oYXZlX25hbmRfMTZiaXQoKTsKLQkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCi0JaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKLQllbHNlCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OwotCi0JLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCi0Jc2FtOV9zbWNfY29uZmlndXJlKDAsIDMsICZla19uYW5kX3NtY19jb25maWcpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Ci19Ci0KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWNpMF9kYXRhID0gewotCS5zbG90WzFdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSAtRUlOVkFMLAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLQotLyoKLSAqIExFRHMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7Ci0JewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMSB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHM1IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBNiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQl9LAotCXsJLyogInBvd2VyIiBsZWQsIHllbGxvdyAqLwotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTksCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi0vKgotICogSTJDIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYXQyNGM1MTIgPSB7Ci0JLmJ5dGVfbGVuCT0gU1pfNTEySyAvIDgsCi0JLnBhZ2Vfc2l6ZQk9IDEyOCwKLQkuZmxhZ3MJCT0gQVQyNF9GTEFHX0FERFIxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBla19pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oIjI0YzUxMiIsIDB4NTApLAotCQkucGxhdGZvcm1fZGF0YSA9ICZhdDI0YzUxMiwKLQl9LAotCS8qIG1vcmUgZGV2aWNlcyBjYW4gYmUgYWRkZWQgdXNpbmcgZXhwYW5zaW9uIGNvbm5lY3RvcnMgKi8KLX07Ci0KLQotLyoKLSAqIEdQSU8gQnV0dG9ucwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZWtfYnV0dG9uc1tdID0gewotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEEzMCwKLQkJLmNvZGUJCT0gQlROXzMsCi0JCS5kZXNjCQk9ICJCdXR0b24gMyIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTMxLAotCQkuY29kZQkJPSBCVE5fNCwKLQkJLmRlc2MJCT0gIkJ1dHRvbiA0IiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBla19idXR0b25fZGF0YSA9IHsKLQkuYnV0dG9ucwk9IGVrX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShla19idXR0b25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVrX2J1dHRvbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImdwaW8ta2V5cyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfYnV0dG9uX2RhdGEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQotewotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEzMCwgMSk7CS8qIGJ0bjMgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTMwLCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMzEsIDEpOwkvKiBidG40ICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEEzMSwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkge30KLSNlbmRpZgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8IEFUTUVMX1VBUlRfRENECi0JCQkgICB8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWtfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWtfdWRjX2RhdGEpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVrX21jaTBfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhla19pMmNfZGV2aWNlcywgQVJSQVlfU0laRShla19pMmNfZGV2aWNlcykpOwotCS8qIFNTQyAodG8gQVQ3M0MyMTMpICovCi0JYXQ3M2MyMTNfc2V0X2NsaygmYXQ3M2MyMTNfZGF0YSk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwotCS8qIFB1c2ggQnV0dG9ucyAqLwotCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotfQotCi1NQUNISU5FX1NUQVJUKEFUOTFTQU05MjYwRUssICJBdG1lbCBBVDkxU0FNOTI2MC1FSyIpCi0JLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBla19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NWFkYTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9hdDczYzIxMy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLQotI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9zeXN0ZW1fcmV2Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7Ci19Ci0KLS8qCi0gKiBETTkwMDAgZXRoZXJuZXQgZGV2aWNlCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19ETTkwMDApCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRtOTAwMF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzIsCi0JCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfMiArIDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF8yICsgMHg0NCwKLQkJLmVuZAk9IEFUOTFfQ0hJUFNFTEVDVF8yICsgMHhGRiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LAotCVsyXSA9IHsKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKLQkJCXwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZG05MDAwX3BsYXRfZGF0YSBkbTkwMDBfcGxhdGRhdGEgPSB7Ci0JLmZsYWdzCQk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFkgfCBETTkwMDBfUExBVEZfTk9fRUVQUk9NLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG05MDAwX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZG05MDAwIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZG05MDAwX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJPSBkbTkwMDBfcmVzb3VyY2UsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmRtOTAwMF9wbGF0ZGF0YSwKLQl9Ci19OwotCi0vKgotICogU01DIHRpbWluZ3MgZm9yIHRoZSBETTkwMDAuCi0gKiBOb3RlOiBUaGVzZSB0aW1pbmdzIHdlcmUgY2FsY3VsYXRlZCBmb3IgTUFTVEVSX0NMT0NLID0gMTAwMDAwMDAwIGFjY29yZGluZyB0byB0aGUgRE05MDAwIHRpbWluZ3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZG05MDAwX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAyLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMiwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSA4LAotCS5ucmRfcHVsc2UJCT0gNCwKLQkubmNzX3dyaXRlX3B1bHNlCT0gOCwKLQkubndlX3B1bHNlCQk9IDQsCi0KLQkucmVhZF9jeWNsZQkJPSAxNiwKLQkud3JpdGVfY3ljbGUJCT0gMTYsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfQkFUX1dSSVRFIHwgQVQ5MV9TTUNfREJXXzE2LAotCS50ZGZfY3ljbGVzCQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9kbTkwMDAodm9pZCkKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZG05MDAwX3Jlc291cmNlWzJdOwotCi0JLyogQ29uZmlndXJlIGNoaXAtc2VsZWN0IDIgKERNOTAwMCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMiwgJmRtOTAwMF9zbWNfY29uZmlnKTsKLQotCS8qIENvbmZpZ3VyZSBSZXNldCBzaWduYWwgYXMgb3V0cHV0ICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEMxMCwgMCk7Ci0KLQkvKiBDb25maWd1cmUgSW50ZXJydXB0IHBpbiBhcyBpbnB1dCwgbm8gcHVsbC11cCAqLwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEMxMSwgMCk7Ci0KLQlyLT5zdGFydCA9IHItPmVuZCA9IGdwaW9fdG9faXJxKEFUOTFfUElOX1BDMTEpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG05MDAwX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfZG05MDAwKHZvaWQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0RNOTAwMCAqLwotCi0KLS8qCi0gKiBVU0IgSG9zdCBQb3J0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLQotLyoKLSAqIFVTQiBEZXZpY2UgUG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBla191ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQjI5LAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0vKgotICogTkFORCBmbGFzaAotICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBla19uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDEiLAotCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSBTWl8yNTZLLAotCX0sCi0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMiIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBla19uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMiwKLQkuY2xlCQk9IDIxLAotCS5kZXRfcGluCT0gLUVJTlZBTCwKLQkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTUsCi0JLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi0JLm9uX2ZsYXNoX2JidAk9IDEsCi0JLnBhcnRzCQk9IGVrX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGVrX25hbmRfcGFydGl0aW9uKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMSwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDEsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gMywKLQkubnJkX3B1bHNlCQk9IDMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDMsCi0JLm53ZV9wdWxzZQkJPSAzLAotCi0JLnJlYWRfY3ljbGUJCT0gNSwKLQkud3JpdGVfY3ljbGUJCT0gNSwKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUsCi0JLnRkZl9jeWNsZXMJCT0gMiwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQlla19uYW5kX2RhdGEuYnVzX3dpZHRoXzE2ID0gYm9hcmRfaGF2ZV9uYW5kXzE2Yml0KCk7Ci0JLyogc2V0dXAgYnVzLXdpZHRoICg4IG9yIDE2KSAqLwotCWlmIChla19uYW5kX2RhdGEuYnVzX3dpZHRoXzE2KQotCQlla19uYW5kX3NtY19jb25maWcubW9kZSB8PSBBVDkxX1NNQ19EQldfMTY7Ci0JZWxzZQotCQlla19uYW5kX3NtY19jb25maWcubW9kZSB8PSBBVDkxX1NNQ19EQldfODsKLQotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCAzLCAmZWtfbmFuZF9zbWNfY29uZmlnKTsKLQotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOwotfQotCi0vKgotICogU1BJIHJlbGF0ZWQgZGV2aWNlcwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQotCi0vKgotICogQURTNzg0NiBUb3VjaHNjcmVlbgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nl9NT0RVTEUpCi0KLXN0YXRpYyBpbnQgYWRzNzg0M19wZW5kb3duX3N0YXRlKHZvaWQpCi17Ci0JcmV0dXJuICFhdDkxX2dldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BDMik7CS8qIFRvdWNoc2NyZWVuIFBFTklSUSAqLwotfQotCi1zdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHNfaW5mbyA9IHsKLQkubW9kZWwJCQk9IDc4NDMsCi0JLnhfbWluCQkJPSAxNTAsCi0JLnhfbWF4CQkJPSAzODMwLAotCS55X21pbgkJCT0gMTkwLAotCS55X21heAkJCT0gMzgzMCwKLQkudnJlZl9kZWxheV91c2Vjcwk9IDEwMCwKLQkueF9wbGF0ZV9vaG1zCQk9IDQ1MCwKLQkueV9wbGF0ZV9vaG1zCQk9IDI1MCwKLQkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLAotCS5kZWJvdW5jZV9tYXgJCT0gMSwKLQkuZGVib3VuY2VfcmVwCQk9IDAsCi0JLmRlYm91bmNlX3RvbAkJPSAofjApLAotCS5nZXRfcGVuZG93bl9zdGF0ZQk9IGFkczc4NDNfcGVuZG93bl9zdGF0ZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX3RzKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyLCAxKTsJLyogRXh0ZXJuYWwgSVJRMCwgd2l0aCBwdWxsdXAgKi8KLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMTEsIDEpOwkvKiBUb3VjaHNjcmVlbiBCVVNZIHNpZ25hbCAqLwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX3RzKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyoKLSAqIEF1ZGlvCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyBhdDczYzIxM19kYXRhID0gewotCS5zc2NfaWQJCT0gMSwKLQkuc2hvcnRuYW1lCT0gIkFUOTFTQU05MjYxLzlHMTAtRUsgZXh0ZXJuYWwgREFDIiwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVQ3M0MyMTMpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxM19NT0RVTEUpCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ3M2MyMTNfc2V0X2NsayhzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgY2xrICpwY2syOwotCXN0cnVjdCBjbGsgKnBsbGE7Ci0KLQlwY2syID0gY2xrX2dldChOVUxMLCAicGNrMiIpOwotCXBsbGEgPSBjbGtfZ2V0KE5VTEwsICJwbGxhIik7Ci0KLQkvKiBBVDczQzIxMyBNQ0sgQ2xvY2sgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjMxLCAwKTsJLyogUENLMiAqLwotCi0JY2xrX3NldF9wYXJlbnQocGNrMiwgcGxsYSk7Ci0JY2xrX3B1dChwbGxhKTsKLQotCWluZm8tPmRhY19jbGsgPSBwY2syOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBhdDczYzIxM19zZXRfY2xrKHN0cnVjdCBhdDczYzIxM19ib2FyZF9pbmZvICppbmZvKSB7fQotI2VuZGlmCi0KLS8qCi0gKiBTUEkgZGV2aWNlcwotICovCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLQl7Ci0JCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMiwKLQkJLm1heF9zcGVlZF9oegk9IDEyNTAwMCAqIDI2LAkvKiAobWF4IHNhbXBsZSByYXRlIEAgM1YpICogKGNtZCArIGRhdGEgKyBvdmVyaGVhZCkgKi8KLQkJLmJ1c19udW0JPSAwLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhZHNfaW5mbywKLQkJLmlycQkJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYxX0lEX0lSUTAsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBBVDkxX1BJTl9QQTI4LAkvKiBDUyBwaW4gKi8KLQl9LAotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCi0JewkvKiBEYXRhRmxhc2ggY2FyZCAtIGp1bXBlciAoSjEyKSBjb25maWd1cmFibGUgdG8gQ1MzIG9yIENTMCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDMsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxMykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUNzNDMjEzX01PRFVMRSkKLQl7CS8qIEFUNzNDMjEzIERBQyAqLwotCQkubW9kYWxpYXMJPSAiYXQ3M2MyMTMiLAotCQkuY2hpcF9zZWxlY3QJPSAzLAotCQkubWF4X3NwZWVkX2h6CT0gMTAgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCQkubW9kZQkJPSBTUElfTU9ERV8xLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhdDczYzIxM19kYXRhLAotCQkuY29udHJvbGxlcl9kYXRhID0gKHZvaWQqKSBBVDkxX1BJTl9QQTI5LAkvKiBkZWZhdWx0IGZvciBDUzMgaXMgUEE2LCBidXQgaXQgbXVzdCBiZSBQQTI5ICovCi0JfSwKLSNlbmRpZgotfTsKLQotI2Vsc2UgLyogQ09ORklHX1NQSV9BVE1FTF8qICovCi0vKiBzcGkwIGFuZCBtbWMvc2Qgc2hhcmUgdGhlIHNhbWUgUElPIHBpbnM6IGNhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgKi8KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICogZGV0X3Bpbiwgd3BfcGluIGFuZCB2Y2NfcGluIGFyZSBub3QgY29ubmVjdGVkCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtY2kwX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IC1FSU5WQUwsCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotfTsKLQotI2VuZGlmIC8qIENPTkZJR19TUElfQVRNRUxfKiAqLwotCi0KLS8qCi0gKiBMQ0QgQ29udHJvbGxlcgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKLQotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX1NUTikKLQotLyogU1ROICovCi1zdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBhdDkxX3N0bl9tb2Rlc1tdID0gewotICAgICAgICB7Ci0JCS5uYW1lICAgICAgICAgICA9ICJTUDA2UTAwMiBAIDc1IiwKLQkJLnJlZnJlc2ggICAgICAgID0gNzUsCi0JCS54cmVzICAgICAgICAgICA9IDMyMCwgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gMjQwLAotCQkucGl4Y2xvY2sgICAgICAgPSBLSFoyUElDT1MoMTQ0MCksCi0KLQkJLmxlZnRfbWFyZ2luICAgID0gMSwgICAgICAgICAgICAucmlnaHRfbWFyZ2luICAgPSAxLAotCQkudXBwZXJfbWFyZ2luICAgPSAwLCAgICAgICAgICAgIC5sb3dlcl9tYXJnaW4gICA9IDAsCi0JCS5oc3luY19sZW4gICAgICA9IDEsICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMSwKLQotCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLQkJLnZtb2RlICAgICAgICAgID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLSAgICAgICAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfc3RuX21vbnNwZWNzID0gewotICAgICAgICAubWFudWZhY3R1cmVyICAgPSAiSElUIiwKLSAgICAgICAgLm1vbml0b3IgICAgICAgID0gIlNQMDZRMDAyIiwKLQotICAgICAgICAubW9kZWRiICAgICAgICAgPSBhdDkxX3N0bl9tb2RlcywKLSAgICAgICAgLm1vZGVkYl9sZW4gICAgID0gQVJSQVlfU0laRShhdDkxX3N0bl9tb2RlcyksCi0gICAgICAgIC5oZm1pbiAgICAgICAgICA9IDE1MDAwLAotICAgICAgICAuaGZtYXggICAgICAgICAgPSA2NDAwMCwKLSAgICAgICAgLnZmbWluICAgICAgICAgID0gNTAsCi0gICAgICAgIC52Zm1heCAgICAgICAgICA9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTkyNjFfREVGQVVMVF9TVE5fTENEQ09OMgkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9TVE5NT05PIFwKLQkJCQkJfCBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkUgXAotCQkJCQl8IEFUTUVMX0xDRENfSUZXSURUSF80IFwKLQkJCQkJfCBBVE1FTF9MQ0RDX1NDQU5NT0RfU0lOR0xFKQotCi1zdGF0aWMgdm9pZCBhdDkxX2xjZGNfc3RuX3Bvd2VyX2NvbnRyb2woc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpwZGF0YSwgaW50IG9uKQotewotCS8qIGJhY2tsaWdodCAqLwotCWlmIChvbikgewkvKiBwb3dlciB1cCAqLwotCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BDMTQsIDApOwotCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BDMTUsIDApOwotCX0gZWxzZSB7CS8qIHBvd2VyIGRvd24gKi8KLQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZShBVDkxX1BJTl9QQzE0LCAxKTsKLQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZShBVDkxX1BJTl9QQzE1LCAxKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmRlZmF1bHRfYnBwCQkJPSAxLAotCS5kZWZhdWx0X2RtYWNvbgkJCT0gQVRNRUxfTENEQ19ETUFFTiwKLQkuZGVmYXVsdF9sY2Rjb24yCQk9IEFUOTFTQU05MjYxX0RFRkFVTFRfU1ROX0xDRENPTjIsCi0JLmRlZmF1bHRfbW9uc3BlY3MJCT0gJmF0OTFmYl9kZWZhdWx0X3N0bl9tb25zcGVjcywKLQkuYXRtZWxfbGNkZmJfcG93ZXJfY29udHJvbAk9IGF0OTFfbGNkY19zdG5fcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLX07Ci0KLSNlbHNlCi0KLS8qIFRGVCAqLwotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7Ci0JewotCSAgICAgICAgLm5hbWUgICAgICAgICAgID0gIlRYMDlENTBWTTFDQ0EgQCA2MCIsCi0JCS5yZWZyZXNoCT0gNjAsCi0JCS54cmVzCQk9IDI0MCwJCS55cmVzCQk9IDMyMCwKLQkJLnBpeGNsb2NrCT0gS0haMlBJQ09TKDQ5NjUpLAotCi0JCS5sZWZ0X21hcmdpbgk9IDEsCQkucmlnaHRfbWFyZ2luCT0gMzMsCi0JCS51cHBlcl9tYXJnaW4JPSAxLAkJLmxvd2VyX21hcmdpbgk9IDAsCi0JCS5oc3luY19sZW4JPSA1LAkJLnZzeW5jX2xlbgk9IDEsCi0KLQkJLnN5bmMJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCi0JCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGZiX21vbnNwZWNzIGF0OTFmYl9kZWZhdWx0X3RmdF9tb25zcGVjcyA9IHsKLQkubWFudWZhY3R1cmVyCT0gIkhJVCIsCi0JLm1vbml0b3IgICAgICAgID0gIlRYMDlENTBWTTFDQ0EiLAotCi0JLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCi0JLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCi0JLmhmbWluCQk9IDE1MDAwLAotCS5oZm1heAkJPSA2NDAwMCwKLQkudmZtaW4JCT0gNTAsCi0JLnZmbWF4CQk9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTkyNjFfREVGQVVMVF9URlRfTENEQ09OMgkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9URlQgICAgXAotCQkJCQl8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRSkKLQotc3RhdGljIHZvaWQgYXQ5MV9sY2RjX3RmdF9wb3dlcl9jb250cm9sKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqcGRhdGEsIGludCBvbikKLXsKLQlpZiAob24pCi0JCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEExMiwgMCk7CS8qIHBvd2VyIHVwICovCi0JZWxzZQotCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BBMTIsIDEpOwkvKiBwb3dlciBkb3duICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmxjZGNvbl9pc19iYWNrbGlnaHQJCT0gdHJ1ZSwKLQkuZGVmYXVsdF9icHAJCQk9IDE2LAotCS5kZWZhdWx0X2RtYWNvbgkJCT0gQVRNRUxfTENEQ19ETUFFTiwKLQkuZGVmYXVsdF9sY2Rjb24yCQk9IEFUOTFTQU05MjYxX0RFRkFVTFRfVEZUX0xDRENPTjIsCi0JLmRlZmF1bHRfbW9uc3BlY3MJCT0gJmF0OTFmYl9kZWZhdWx0X3RmdF9tb25zcGVjcywKLQkuYXRtZWxfbGNkZmJfcG93ZXJfY29udHJvbAk9IGF0OTFfbGNkY190ZnRfcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLX07Ci0jZW5kaWYKLQotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGE7Ci0jZW5kaWYKLQotCi0vKgotICogR1BJTyBCdXR0b25zCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBla19idXR0b25zW10gPSB7Ci0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTI3LAotCQkuY29kZQkJPSBCVE5fMCwKLQkJLmRlc2MJCT0gIkJ1dHRvbiAwIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BBMjYsCi0JCS5jb2RlCQk9IEJUTl8xLAotCQkuZGVzYwkJPSAiQnV0dG9uIDEiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEEyNSwKLQkJLmNvZGUJCT0gQlROXzIsCi0JCS5kZXNjCQk9ICJCdXR0b24gMiIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTI0LAotCQkuY29kZQkJPSBCVE5fMywKLQkJLmRlc2MJCT0gIkJ1dHRvbiAzIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBla19idXR0b25fZGF0YSA9IHsKLQkuYnV0dG9ucwk9IGVrX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShla19idXR0b25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVrX2J1dHRvbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImdwaW8ta2V5cyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfYnV0dG9uX2RhdGEsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQotewotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEyNywgMSk7CS8qIGJ0bjAgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTI3LCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMjYsIDEpOwkvKiBidG4xICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEEyNiwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTI1LCAxKTsJLyogYnRuMiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BBMjUsIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEyNCwgMSk7CS8qIGJ0bjMgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQTI0LCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfYnV0dG9uX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKSB7fQotI2VuZGlmCi0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDEgdG8gYmUgZGVmaW5lZCAqLwotCQkubmFtZQkJCT0gImRzNyIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTE0LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCX0sCi0JewkvKiAidG9wIiBsZWQsIGdyZWVuLCB1c2VybGVkMiB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHM4IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMTMsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwKLQl7CS8qICJwb3dlciIgbGVkLCB5ZWxsb3cgKi8KLQkJLm5hbWUJCQk9ICJkczEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEEyMywKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0KLQlpZiAoY3B1X2lzX2F0OTFzYW05ZzEwKCkpCi0JCWVrX2xjZGNfZGF0YS5sY2Rfd2lyaW5nX21vZGUgPSBBVE1FTF9MQ0RDX1dJUklOR19SR0I7Ci0KLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZla191c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZla191ZGNfZGF0YSk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogRE05MDAwIGV0aGVybmV0ICovCi0JZWtfYWRkX2RldmljZV9kbTkwMDAoKTsKLQotCS8qIHNwaTAgYW5kIG1tYy9zZCBzaGFyZSB0aGUgc2FtZSBQSU8gcGlucyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7Ci0JLyogVG91Y2hzY3JlZW4gKi8KLQlla19hZGRfZGV2aWNlX3RzKCk7Ci0JLyogU1NDICh0byBBVDczQzIxMykgKi8KLQlhdDczYzIxM19zZXRfY2xrKCZhdDczYzIxM19kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc3NjKEFUOTFTQU05MjYxX0lEX1NTQzEsIEFUTUVMX1NTQ19UWCk7Ci0jZWxzZQotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJm1jaTBfZGF0YSk7Ci0jZW5kaWYKLQkvKiBMQ0QgQ29udHJvbGxlciAqLwotCWF0OTFfYWRkX2RldmljZV9sY2RjKCZla19sY2RjX2RhdGEpOwotCS8qIFB1c2ggQnV0dG9ucyAqLwotCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxU0FNOTI2MUVLLCAiQXRtZWwgQVQ5MVNBTTkyNjEtRUsiKQotCS8qIE1haW50YWluZXI6IEF0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORAotCi1NQUNISU5FX1NUQVJUKEFUOTFTQU05RzEwRUssICJBdG1lbCBBVDkxU0FNOUcxMC1FSyIpCi0JLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBla19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NjY4MGYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0MjQuaD4KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotI2luY2x1ZGUgPGxpbnV4L3B3bS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHNfcHdtLmg+Ci0KLSNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvc3lzdGVtX3Jldi5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgInNhbTlfc21jLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfaW5pdF9lYXJseSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxNi4zNjcgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTYzNjc2NjApOwotfQotCi0vKgotICogVVNCIEhvc3QgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZWtfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHsgQVQ5MV9QSU5fUEEyNCwgQVQ5MV9QSU5fUEEyMSB9LAotCS52YnVzX3Bpbl9hY3RpdmVfbG93ID0gezEsIDF9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgZWtfdWRjX2RhdGEgPSB7Ci0JLnZidXNfcGluCT0gQVQ5MV9QSU5fUEEyNSwKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLQotLyoKLSAqIEFEUzc4NDYgVG91Y2hzY3JlZW4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDZfTU9EVUxFKQotc3RhdGljIGludCBhZHM3ODQzX3BlbmRvd25fc3RhdGUodm9pZCkKLXsKLQlyZXR1cm4gIWF0OTFfZ2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEExNSk7CS8qIFRvdWNoc2NyZWVuIFBFTklSUSAqLwotfQotCi1zdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHNfaW5mbyA9IHsKLQkubW9kZWwJCQk9IDc4NDMsCi0JLnhfbWluCQkJPSAxNTAsCi0JLnhfbWF4CQkJPSAzODMwLAotCS55X21pbgkJCT0gMTkwLAotCS55X21heAkJCT0gMzgzMCwKLQkudnJlZl9kZWxheV91c2Vjcwk9IDEwMCwKLQkueF9wbGF0ZV9vaG1zCQk9IDQ1MCwKLQkueV9wbGF0ZV9vaG1zCQk9IDI1MCwKLQkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLAotCS5kZWJvdW5jZV9tYXgJCT0gMSwKLQkuZGVib3VuY2VfcmVwCQk9IDAsCi0JLmRlYm91bmNlX3RvbAkJPSAofjApLAotCS5nZXRfcGVuZG93bl9zdGF0ZQk9IGFkczc4NDNfcGVuZG93bl9zdGF0ZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX3RzKHZvaWQpCi17Ci0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMSk7CS8qIEV4dGVybmFsIElSUTEsIHdpdGggcHVsbHVwICovCi0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTMxLCAxKTsJLyogVG91Y2hzY3JlZW4gQlVTWSBzaWduYWwgKi8KLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV90cyh2b2lkKSB7fQotI2VuZGlmCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotI2lmIGRlZmluZWQoQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEKQotCXsJLyogRGF0YUZsYXNoIGNhcmQgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLQl7Ci0JCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMywKLQkJLm1heF9zcGVlZF9oegk9IDEyNTAwMCAqIDI2LAkvKiAobWF4IHNhbXBsZSByYXRlIEAgM1YpICogKGNtZCArIGRhdGEgKyBvdmVyaGVhZCkgKi8KLQkJLmJ1c19udW0JPSAwLAotCQkucGxhdGZvcm1fZGF0YQk9ICZhZHNfaW5mbywKLQkJLmlycQkJPSBOUl9JUlFTX0xFR0FDWSArIEFUOTFTQU05MjYzX0lEX0lSUTEsCi0JfSwKLSNlbmRpZgotfTsKLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtY2kxX2RhdGEgPSB7Ci0JLnNsb3RbMF0gPSB7Ci0JCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BFMTgsCi0JCS53cF9waW4JCT0gQVQ5MV9QSU5fUEUxOSwKLQl9LAotfTsKLQotCi0vKgotICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEUzMSwKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzY0TSwKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QQTIyLAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEQxNSwKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotCS5vbl9mbGFzaF9iYnQJPSAxLAotCS5wYXJ0cwkJPSBla19uYW5kX3BhcnRpdGlvbiwKLQkubnVtX3BhcnRzCT0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbiksCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDEsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAxLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDMsCi0JLm5yZF9wdWxzZQkJPSAzLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAotCS5ud2VfcHVsc2UJCT0gMywKLQotCS5yZWFkX2N5Y2xlCQk9IDUsCi0JLndyaXRlX2N5Y2xlCQk9IDUsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFLAotCS50ZGZfY3ljbGVzCQk9IDIsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9uYW5kKHZvaWQpCi17Ci0JZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNiA9IGJvYXJkX2hhdmVfbmFuZF8xNmJpdCgpOwotCS8qIHNldHVwIGJ1cy13aWR0aCAoOCBvciAxNikgKi8KLQlpZiAoZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNikKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzE2OwotCWVsc2UKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzg7Ci0KLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJmVrX25hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogSTJDIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYXQyNGM1MTIgPSB7Ci0JLmJ5dGVfbGVuCT0gU1pfNTEySyAvIDgsCi0JLnBhZ2Vfc2l6ZQk9IDEyOCwKLQkuZmxhZ3MJCT0gQVQyNF9GTEFHX0FERFIxNiwKLX07Ci0KLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVrX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygiMjRjNTEyIiwgMHg1MCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmF0MjRjNTEyLAotCX0sCi0JLyogbW9yZSBkZXZpY2VzIGNhbiBiZSBhZGRlZCB1c2luZyBleHBhbnNpb24gY29ubmVjdG9ycyAqLwotfTsKLQotLyoKLSAqIExDRCBDb250cm9sbGVyCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7Ci0JewotCQkubmFtZQkJPSAiVFgwOUQ1MFZNMUNDQSBAIDYwIiwKLQkJLnJlZnJlc2gJPSA2MCwKLQkJLnhyZXMJCT0gMjQwLAkJLnlyZXMJCT0gMzIwLAotCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoNDk2NSksCi0KLQkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAzMywKLQkJLnVwcGVyX21hcmdpbgk9IDEsCQkubG93ZXJfbWFyZ2luCT0gMCwKLQkJLmhzeW5jX2xlbgk9IDUsCQkudnN5bmNfbGVuCT0gMSwKLQotCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7Ci0JLm1hbnVmYWN0dXJlcgk9ICJISVQiLAotCS5tb25pdG9yCT0gIlRYMDlENzBWTTFDQ0EiLAotCi0JLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCi0JLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCi0JLmhmbWluCQk9IDE1MDAwLAotCS5oZm1heAkJPSA2NDAwMCwKLQkudmZtaW4JCT0gNTAsCi0JLnZmbWF4CQk9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTkyNjNfREVGQVVMVF9MQ0RDT04yIAkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9URlQgXAotCQkJCQl8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRSkKLQotc3RhdGljIHZvaWQgYXQ5MV9sY2RjX3Bvd2VyX2NvbnRyb2woc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpwZGF0YSwgaW50IG9uKQotewotCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEEzMCwgb24pOwotfQotCi0vKiBEcml2ZXIgZGF0YXMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmxjZGNvbl9pc19iYWNrbGlnaHQJCT0gdHJ1ZSwKLQkuZGVmYXVsdF9icHAJCQk9IDE2LAotCS5kZWZhdWx0X2RtYWNvbgkJCT0gQVRNRUxfTENEQ19ETUFFTiwKLQkuZGVmYXVsdF9sY2Rjb24yCQk9IEFUOTFTQU05MjYzX0RFRkFVTFRfTENEQ09OMiwKLQkuZGVmYXVsdF9tb25zcGVjcwkJPSAmYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MsCi0JLmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wJPSBhdDkxX2xjZGNfcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLX07Ci0KLSNlbHNlCi1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhOwotI2VuZGlmCi0KLQotLyoKLSAqIEdQSU8gQnV0dG9ucwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZWtfYnV0dG9uc1tdID0gewotCXsJLyogQlAxLCAibGVmdGNsaWMiICovCi0JCS5jb2RlCQk9IEJUTl9MRUZULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQzUsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLmRlc2MJCT0gImxlZnRfY2xpY2siLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLQl7CS8qIEJQMiwgInJpZ2h0Y2xpYyIgKi8KLQkJLmNvZGUJCT0gQlROX1JJR0hULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQzQsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLmRlc2MJCT0gInJpZ2h0X2NsaWNrIiwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBla19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQzUsIDEpOwkvKiBsZWZ0IGJ1dHRvbiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BDNSwgMSk7Ci0JYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEM0LCAxKTsJLyogcmlnaHQgYnV0dG9uICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEM0LCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfYnV0dG9uX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKSB7fQotI2VuZGlmCi0KLQotLyoKLSAqIEFDOTcKLSAqIHJlc2V0X3BpbiBpcyBub3QgY29ubmVjdGVkOiBOUlNUCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBla19hYzk3X2RhdGEgPSB7Ci0JLnJlc2V0X3Bpbgk9IC1FSU5WQUwsCi19OwotCi0KLS8qCi0gKiBMRURzIC4uLiB0aGVzZSBjb3VsZCBhbGwgYmUgUFdNLWRyaXZlbiwgZm9yIHZhcmlhYmxlIGJyaWdodG5lc3MKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7Ci0JewkvKiAicmlnaHQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQyIChjb3VsZCBiZSBkcml2ZW4gYnkgcHdtMikgKi8KLQkJLm5hbWUJCQk9ICJkczIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMyOSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJuYW5kLWRpc2siLAotCX0sCi0JewkvKiAicG93ZXIiIGxlZCwgeWVsbG93IChjb3VsZCBiZSBkcml2ZW4gYnkgcHdtMCkgKi8KLQkJLm5hbWUJCQk9ICJkczMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI3LAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JfSwKLSNpZiAhSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JewotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjgsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfQotI2VuZGlmCi19OwotCi0vKgotICogUFdNIExlZHMKLSAqLwotc3RhdGljIHN0cnVjdCBwd21fbG9va3VwIHB3bV9sb29rdXBbXSA9IHsKLQlQV01fTE9PS1VQKCJhdDkxc2FtOXJsLXB3bSIsIDEsICJsZWRzX3B3bSIsICJkczEiLAotCQkgICA1MDAwLCBQV01fUE9MQVJJVFlfSU5WRVJTRUQpLAotfTsKLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX0xFRFNfUFdNKQotc3RhdGljIHN0cnVjdCBsZWRfcHdtIHB3bV9sZWRzW10gPSB7Ci0JewotCQkubmFtZSA9ICJkczEiLAotCQkubWF4X2JyaWdodG5lc3MgPSAyNTUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbGVkX3B3bV9wbGF0Zm9ybV9kYXRhIHB3bV9kYXRhID0gewotCS5udW1fbGVkcyAgICAgICA9IEFSUkFZX1NJWkUocHdtX2xlZHMpLAotCS5sZWRzICAgICAgICAgICA9IHB3bV9sZWRzLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19wd20gPSB7Ci0JLm5hbWUgICA9ICJsZWRzX3B3bSIsCi0JLmlkICAgICA9IC0xLAotCS5kZXYgICAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnB3bV9kYXRhLAotCX0sCi19OwotI2VuZGlmCi0KLQotLyoKLSAqIENBTgotICovCi1zdGF0aWMgdm9pZCBzYW05MjYzZWtfdHJhbnNjZWl2ZXJfc3dpdGNoKGludCBvbikKLXsKLQlpZiAob24pIHsKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOCwgMSk7IC8qIENBTlJYRU4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOSwgMCk7IC8qIENBTlJTICovCi0JfSBlbHNlIHsKLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOCwgMCk7IC8qIENBTlJYRU4gKi8KLQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEExOSwgMSk7IC8qIENBTlJTICovCi0JfQotfQotCi1zdGF0aWMgc3RydWN0IGF0OTFfY2FuX2RhdGEgZWtfY2FuX2RhdGEgPSB7Ci0JLnRyYW5zY2VpdmVyX3N3aXRjaCA9IHNhbTkyNjNla190cmFuc2NlaXZlcl9zd2l0Y2gsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JJmxlZHNfcHdtLAotI2VuZGlmCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIFJUUywgQ1RTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2M19JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOwotCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZla191c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZla191ZGNfZGF0YSk7Ci0JLyogU1BJICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEUyMCwgMSk7CQkvKiBzZWxlY3Qgc3BpMCBjbG9jayAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBUb3VjaHNjcmVlbiAqLwotCWVrX2FkZF9kZXZpY2VfdHMoKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDEsICZtY2kxX2RhdGEpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYyhla19pMmNfZGV2aWNlcywgQVJSQVlfU0laRShla19pMmNfZGV2aWNlcykpOwotCS8qIExDRCBDb250cm9sbGVyICovCi0JYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7Ci0JLyogUHVzaCBCdXR0b25zICovCi0JZWtfYWRkX2RldmljZV9idXR0b25zKCk7Ci0JLyogQUM5NyAqLwotCWF0OTFfYWRkX2RldmljZV9hYzk3KCZla19hYzk3X2RhdGEpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLQlwd21fYWRkX3RhYmxlKHB3bV9sb29rdXAsIEFSUkFZX1NJWkUocHdtX2xvb2t1cCkpOwotI2lmIElTX0VOQUJMRUQoQ09ORklHX0xFRFNfUFdNKQotCWF0OTFfYWRkX2RldmljZV9wd20oMSA8PCBBVDkxX1BXTTEpOwotI2VuZGlmCi0JLyogQ0FOICovCi0JYXQ5MV9hZGRfZGV2aWNlX2NhbigmZWtfY2FuX2RhdGEpOwotCS8qIE90aGVyIHBsYXRmb3JtIGRldmljZXMgKi8KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxU0FNOTI2M0VLLCAiQXRtZWwgQVQ5MVNBTTkyNjMtRUsiKQotCS8qIE1haW50YWluZXI6IEF0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWYwNzUyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDQyOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2F0NzNjMjEzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDkxX2FkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLSNpbmNsdWRlIDxtYWNoL3N5c3RlbV9yZXYuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLS8qCi0gKiBib2FyZCByZXZpc2lvbiBlbmNvZGluZwotICogYml0IDA6Ci0gKiAJMCA9PiAxIHNkL21tYyBzbG90Ci0gKiAJMSA9PiAyIHNkL21tYyBzbG90cyBjb25uZWN0b3JzIChib2FyZCBmcm9tIHJldmlzaW9uIEMpCi0gKi8KLSNkZWZpbmUgSEFWRV8yTU1DCSgxIDw8IDApCi1zdGF0aWMgaW50IGlubGluZSBla19oYXZlXzJtbWModm9pZCkKLXsKLQlyZXR1cm4gbWFjaGluZV9pc19hdDkxc2FtOWcyMGVrXzJtbWMoKSB8fCAoc3lzdGVtX3JldiAmIEhBVkVfMk1NQyk7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotLyoKLSAqIFVTQiBIb3N0IHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGVrX3VzYmhfZGF0YSA9IHsKLQkucG9ydHMJCT0gMiwKLQkudmJ1c19waW4JPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi0JLm92ZXJjdXJyZW50X3Bpbj0gey1FSU5WQUwsIC1FSU5WQUx9LAotfTsKLQotLyoKLSAqIFVTQiBEZXZpY2UgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBla191ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQzUsCi0JLnB1bGx1cF9waW4JPSAtRUlOVkFMLAkJLyogcHVsbC11cCBkcml2ZW4gYnkgVURDICovCi19OwotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotI2lmICFJU19FTkFCTEVEKENPTkZJR19NTUNfQVRNRUxNQ0kpCi0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDEsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRCkKLQl7CS8qIERhdGFGbGFzaCBjYXJkICovCi0JCS5tb2RhbGlhcwk9ICJtdGRfZGF0YWZsYXNoIiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDE1ICogMTAwMCAqIDEwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQl9LAotI2VuZGlmCi0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuaXNfcm1paQk9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9tYWNiKHZvaWQpCi17Ci0JaWYgKGVrX2hhdmVfMm1tYygpKQotCQlla19tYWNiX2RhdGEucGh5X2lycV9waW4gPSBBVDkxX1BJTl9QQjA7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOwotfQotCi0vKgotICogTkFORCBmbGFzaAotICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBla19uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUgICA9ICJCb290c3RyYXAiLAotCQkub2Zmc2V0ID0gMCwKLQkJLnNpemUgICA9IDQgKiBTWl8xTSwKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDEiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IDYwICogU1pfMU0sCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIlBhcnRpdGlvbiAyIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi0vKiBkZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTMsCi0JLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAotCS5kZXRfcGluCT0gLUVJTlZBTCwKLQkuZWNjX21vZGUJPSBOQU5EX0VDQ19TT0ZULAotCS5vbl9mbGFzaF9iYnQJPSAxLAotCS5wYXJ0cwkJPSBla19uYW5kX3BhcnRpdGlvbiwKLQkubnVtX3BhcnRzCT0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbiksCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDIsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAyLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDQsCi0JLm5yZF9wdWxzZQkJPSA0LAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA0LAotCS5ud2VfcHVsc2UJCT0gNCwKLQotCS5yZWFkX2N5Y2xlCQk9IDcsCi0JLndyaXRlX2N5Y2xlCQk9IDcsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFLAotCS50ZGZfY3ljbGVzCQk9IDMsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9uYW5kKHZvaWQpCi17Ci0JZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNiA9IGJvYXJkX2hhdmVfbmFuZF8xNmJpdCgpOwotCS8qIHNldHVwIGJ1cy13aWR0aCAoOCBvciAxNikgKi8KLQlpZiAoZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNikKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzE2OwotCWVsc2UKLQkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzg7Ci0KLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJmVrX25hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKiB3cF9waW4gYW5kIHZjY19waW4gYXJlIG5vdCBjb25uZWN0ZWQKLSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0gewotCS5zbG90WzFdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQzksCi0JCS53cF9waW4JCT0gLUVJTlZBTCwKLQl9LAotCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9tbWModm9pZCkKLXsKLQlpZiAoZWtfaGF2ZV8ybW1jKCkpIHsKLQkJZWtfbW1jX2RhdGEuc2xvdFswXS5idXNfd2lkdGggPSA0OwotCQlla19tbWNfZGF0YS5zbG90WzBdLmRldGVjdF9waW4gPSBBVDkxX1BJTl9QQzI7Ci0JCWVrX21tY19kYXRhLnNsb3RbMF0ud3BfcGluID0gLTE7Ci0JfQotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJmVrX21tY19kYXRhKTsKLX0KLQotLyoKLSAqIExFRHMKLSAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7Ci0JewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMSB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHM1IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BBNiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKLQl9LAotCXsJLyogInBvd2VyIiBsZWQsIHllbGxvdyAqLwotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTksCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9ncGlvX2xlZHModm9pZCkKLXsKLQlpZiAoZWtfaGF2ZV8ybW1jKCkpIHsKLQkJZWtfbGVkc1swXS5ncGlvID0gQVQ5MV9QSU5fUEI4OwotCQlla19sZWRzWzFdLmdwaW8gPSBBVDkxX1BJTl9QQjk7Ci0JfQotCi0JYXQ5MV9ncGlvX2xlZHMoZWtfbGVkcywgQVJSQVlfU0laRShla19sZWRzKSk7Ci19Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BBMzAsCi0JCS5jb2RlCQk9IEJUTl8zLAotCQkuZGVzYwkJPSAiQnV0dG9uIDMiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEEzMSwKLQkJLmNvZGUJCT0gQlROXzQsCi0JCS5kZXNjCQk9ICJCdXR0b24gNCIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBla19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMzAsIDEpOwkvKiBidG4zICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEEzMCwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQTMxLCAxKTsJLyogYnRuNCAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BBMzEsIDEpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZla19idXR0b25fZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyoKLSAqIEFEQ3MKLSAqLwotCi1zdGF0aWMgc3RydWN0IGF0OTFfYWRjX2RhdGEgZWtfYWRjX2RhdGEgPSB7Ci0JLmNoYW5uZWxzX3VzZWQgPSBCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMikgfCBCSVQoMyksCi0JLnVzZV9leHRlcm5hbF90cmlnZ2VycyA9IHRydWUsCi0JLnZyZWYgPSAzMzAwLAotfTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFKSB8fCBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZWtfYXVkaW9fY29uc3VtZXJfc3VwcGxpZXNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJBVkREIiwgIjAtMDAxYiIpLAotCVJFR1VMQVRPUl9TVVBQTFkoIkhQVkREIiwgIjAtMDAxYiIpLAotCVJFR1VMQVRPUl9TVVBQTFkoIkRCVkREIiwgIjAtMDAxYiIpLAotCVJFR1VMQVRPUl9TVVBQTFkoIkRDVkREIiwgIjAtMDAxYiIpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGVrX2F2ZGRfcmVnX2luaXRfZGF0YSA9IHsKLQkuY29uc3RyYWludHMJPSB7Ci0JCS5uYW1lCT0gIjNWMyIsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi0JLmNvbnN1bWVyX3N1cHBsaWVzID0gZWtfYXVkaW9fY29uc3VtZXJfc3VwcGxpZXMsCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoZWtfYXVkaW9fY29uc3VtZXJfc3VwcGxpZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyBla192ZGRfcGRhdGEgPSB7Ci0JLnN1cHBseV9uYW1lCT0gImJvYXJkLTNWMyIsCi0JLm1pY3Jvdm9sdHMJPSAzMzAwMDAwLAotCS5ncGlvCQk9IC1FSU5WQUwsCi0JLmVuYWJsZWRfYXRfYm9vdCA9IDAsCi0JLmluaXRfZGF0YQk9ICZla19hdmRkX3JlZ19pbml0X2RhdGEsCi19Owotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWtfdm9sdGFnZV9yZWd1bGF0b3IgPSB7Ci0JLm5hbWUJCT0gInJlZy1maXhlZC12b2x0YWdlIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZla192ZGRfcGRhdGEsCi0JfSwKLX07Ci1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX3JlZ3VsYXRvcnModm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX3ZvbHRhZ2VfcmVndWxhdG9yKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX3JlZ3VsYXRvcnModm9pZCkge30KLSNlbmRpZgotCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBla19pMmNfZGV2aWNlc1tdID0gewotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSTJDX0JPQVJEX0lORk8oIjI0YzUxMiIsIDB4NTApCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBJMkNfQk9BUkRfSU5GTygid204NzMxIiwgMHgxYikKLSAgICAgICAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNhbTlnMjBla19hdWRpb19kZXZpY2UgPSB7Ci0JLm5hbWUgICA9ICJhdDkxc2FtOWcyMGVrLWF1ZGlvIiwKLQkuaWQgICAgID0gLTEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9hdWRpbyh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2FtOWcyMGVrX2F1ZGlvX2RldmljZSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMKLQkJCSAgIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RTUiB8IEFUTUVMX1VBUlRfRENECi0JCQkgICB8IEFUTUVMX1VBUlRfUkkpOwotCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWtfdXNiaF9kYXRhKTsKLQkvKiBVU0IgRGV2aWNlICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWtfdWRjX2RhdGEpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlla19hZGRfZGV2aWNlX21hY2IoKTsKLQkvKiBSZWd1bGF0b3JzICovCi0JZWtfYWRkX3JlZ3VsYXRvcnMoKTsKLQkvKiBNTUMgKi8KLQlla19hZGRfZGV2aWNlX21tYygpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoZWtfaTJjX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfaTJjX2RldmljZXMpKTsKLQkvKiBMRURzICovCi0JZWtfYWRkX2RldmljZV9ncGlvX2xlZHMoKTsKLQkvKiBQdXNoIEJ1dHRvbnMgKi8KLQlla19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLQkvKiBBRENzICovCi0JYXQ5MV9hZGRfZGV2aWNlX2FkYygmZWtfYWRjX2RhdGEpOwotCS8qIFBDSzAgcHJvdmlkZXMgTUNMSyB0byB0aGUgV004NzMxICovCi0JYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsKLQkvKiBTU0MgKGZvciBXTTg3MzEpICovCi0JYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7Ci0JZWtfYWRkX2RldmljZV9hdWRpbygpOwotfQotCi1NQUNISU5FX1NUQVJUKEFUOTFTQU05RzIwRUssICJBdG1lbCBBVDkxU0FNOUcyMC1FSyIpCi0JLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBla19pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKLU1BQ0hJTkVfRU5ECi0KLU1BQ0hJTkVfU1RBUlQoQVQ5MVNBTTlHMjBFS18yTU1DLCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgMiBNTUMgU2xvdCBNb2QiKQotCS8qIE1haW50YWluZXI6IEF0bWVsICovCi0JLmluaXRfdGltZQk9IGF0OTFfaW5pdF90aW1lLAotCS5tYXBfaW8JCT0gYXQ5MV9tYXBfaW8sCi0JLmhhbmRsZV9pcnEJPSBhdDkxX2FpY19oYW5kbGVfaXJxLAotCS5pbml0X2Vhcmx5CT0gZWtfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTE3YzdmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYworKysgL2Rldi9udWxsCkBAIC0xLDUyNyArMCwwIEBACi0vKgotICogIEJvYXJkLXNwZWNpZmljIHNldHVwIGNvZGUgZm9yIHRoZSBBVDkxU0FNOU0xMEc0NSBFdmFsdWF0aW9uIEtpdCBmYW1pbHkKLSAqCi0gKiAgQ292ZXJzOiAqIEFUOTFTQU05RzQ1LUVLRVMgIGJvYXJkCi0gKiAgICAgICAgICAqIEFUOTFTQU05TTEwRzQ1LUVLIGJvYXJkCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvYXRtZWwtbWNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9wd20uaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzX3B3bS5oPgotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hdDkxX2FkYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KLSNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXRtZWwtaXNpLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9zeXN0ZW1fcmV2Lmg+Ci0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSFMgSG9zdCBwb3J0IChjb21tb24gdG8gT0hDSSAmIEVIQ0kpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2hzX2RhdGEgPSB7Ci0JLnBvcnRzCQk9IDIsCi0JLnZidXNfcGluCT0ge0FUOTFfUElOX1BEMSwgQVQ5MV9QSU5fUEQzfSwKLQkudmJ1c19waW5fYWN0aXZlX2xvdyA9IHsxLCAxfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi0KLS8qCi0gKiBVU0IgSFMgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla191c2JhX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BCMTksCi19OwotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcy4KLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewotCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCi19OwotCi0KLS8qCi0gKiBNQ0kgKFNEL01NQykKLSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEQxMCwKLQkJLndwX3BpbgkJPSAtRUlOVkFMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbWNpMV9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QRDExLAotCQkud3BfcGluCQk9IEFUOTFfUElOX1BEMjksCi0JfSwKLX07Ci0KLQotLyoKLSAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BENSwKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBOQU5EIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGVrX25hbmRfcGFydGl0aW9uW10gPSB7Ci0JewotCQkubmFtZQk9ICJQYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzY0TSwKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLS8qIGRldF9waW4gaXMgbm90IGNvbm5lY3RlZCAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBla19uYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEM4LAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEMxNCwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkub25fZmxhc2hfYmJ0CT0gMSwKLQkucGFydHMJCT0gZWtfbmFuZF9wYXJ0aXRpb24sCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoZWtfbmFuZF9wYXJ0aXRpb24pLAotfTsKLQotc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBla19uYW5kX3NtY19jb25maWcgPSB7Ci0JLm5jc19yZWFkX3NldHVwCQk9IDAsCi0JLm5yZF9zZXR1cAkJPSAyLAotCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAotCS5ud2Vfc2V0dXAJCT0gMiwKLQotCS5uY3NfcmVhZF9wdWxzZQkJPSA0LAotCS5ucmRfcHVsc2UJCT0gNCwKLQkubmNzX3dyaXRlX3B1bHNlCT0gNCwKLQkubndlX3B1bHNlCQk9IDQsCi0KLQkucmVhZF9jeWNsZQkJPSA3LAotCS53cml0ZV9jeWNsZQkJPSA3LAotCi0JLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKLQkudGRmX2N5Y2xlcwkJPSAzLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCWVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYgPSBib2FyZF9oYXZlX25hbmRfMTZiaXQoKTsKLQkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCi0JaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKLQllbHNlCi0JCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OwotCi0JLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCi0Jc2FtOV9zbWNfY29uZmlndXJlKDAsIDMsICZla19uYW5kX3NtY19jb25maWcpOwotCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Ci19Ci0KLQotLyoKLSAqICBJU0kKLSAqLwotc3RhdGljIHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGlzaV9kYXRhID0gewotCS5mcmF0ZQkJCT0gSVNJX0NGRzFfRlJBVEVfQ0FQVFVSRV9BTEwsCi0JLyogdG8gdXNlIGNvZGVjIGFuZCBwcmV2aWV3IHBhdGggc2ltdWx0YW5lb3VzbHkgKi8KLQkuZnVsbF9tb2RlCQk9IDEsCi0JLmRhdGFfd2lkdGhfZmxhZ3MJPSBJU0lfREFUQVdJRFRIXzggfCBJU0lfREFUQVdJRFRIXzEwLAotCS8qIElTSV9NQ0sgaXMgcHJvdmlkZWQgYnkgcHJvZ3JhbW1hYmxlIGNsb2NrIG9yIGV4dGVybmFsIGNsb2NrICovCi0JLm1ja19oegkJCT0gMjUwMDAwMDAsCi19OwotCi0KLS8qCi0gKiBzb2MtY2FtZXJhIE9WMjY0MAotICovCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0NBTUVSQV9PVjI2NDApIHx8IFwKLQlkZWZpbmVkKENPTkZJR19TT0NfQ0FNRVJBX09WMjY0MF9NT0RVTEUpCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc2lfY2FtZXJhX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICpsaW5rKQotewotCS8qIElTSSBib2FyZCBmb3IgZWsgdXNpbmcgZGVmYXVsdCA4LWJpdHMgY29ubmVjdGlvbiAqLwotCXJldHVybiBTT0NBTV9EQVRBV0lEVEhfODsKLX0KLQotc3RhdGljIGludCBpMmNfY2FtZXJhX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG9uKQotewotCS8qIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBjYW1lcmEgKi8KLQlwcl9kZWJ1ZygiJXM6ICVzIHRoZSBjYW1lcmFcbiIsIF9fZnVuY19fLCBvbiA/ICJFTkFCTEUiIDogIkRJU0FCTEUiKTsKLQlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QRDEzLCAhb24pOwotCi0JaWYgKCFvbikKLQkJZ290byBvdXQ7Ci0KLQkvKiBJZiBlbmFibGVkLCBnaXZlIGEgcmVzZXQgaW1wdWxzZSAqLwotCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BEMTIsIDApOwotCW1zbGVlcCgyMCk7Ci0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEQxMiwgMSk7Ci0JbXNsZWVwKDEwMCk7Ci0KLW91dDoKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfY2FtZXJhID0gewotCUkyQ19CT0FSRF9JTkZPKCJvdjI2NDAiLCAweDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua19vdjI2NDAgPSB7Ci0JLmJ1c19pZAkJCT0gMCwKLQkuYm9hcmRfaW5mbwkJPSAmaTJjX2NhbWVyYSwKLQkuaTJjX2FkYXB0ZXJfaWQJCT0gMCwKLQkucG93ZXIJCQk9IGkyY19jYW1lcmFfcG93ZXIsCi0JLnF1ZXJ5X2J1c19wYXJhbQk9IGlzaV9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXNpX292MjY0MCA9IHsKLQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rX292MjY0MCwKLQl9LAotfTsKLSNlbmRpZgotCi0KLS8qCi0gKiBMQ0QgQ29udHJvbGxlcgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGF0OTFfdGZ0X3ZnYV9tb2Rlc1tdID0gewotCXsKLQkJLm5hbWUgICAgICAgICAgID0gIkxHIiwKLQkJLnJlZnJlc2gJPSA2MCwKLQkJLnhyZXMJCT0gNDgwLAkJLnlyZXMJCT0gMjcyLAotCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoOTAwMCksCi0KLQkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAxLAotCQkudXBwZXJfbWFyZ2luCT0gNDAsCQkubG93ZXJfbWFyZ2luCT0gMSwKLQkJLmhzeW5jX2xlbgk9IDQ1LAkJLnZzeW5jX2xlbgk9IDEsCi0KLQkJLnN5bmMJCT0gMCwKLQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7Ci0JLm1hbnVmYWN0dXJlcgk9ICJMRyIsCi0JLm1vbml0b3IgICAgICAgID0gIkxCMDQzV1ExIiwKLQotCS5tb2RlZGIJCT0gYXQ5MV90ZnRfdmdhX21vZGVzLAotCS5tb2RlZGJfbGVuCT0gQVJSQVlfU0laRShhdDkxX3RmdF92Z2FfbW9kZXMpLAotCS5oZm1pbgkJPSAxNTAwMCwKLQkuaGZtYXgJCT0gMTc2NDAsCi0JLnZmbWluCQk9IDU3LAotCS52Zm1heAkJPSA2NywKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTlHNDVfREVGQVVMVF9MQ0RDT04yIAkoQVRNRUxfTENEQ19NRU1PUl9MSVRUTEUgXAotCQkJCQl8IEFUTUVMX0xDRENfRElTVFlQRV9URlQgXAotCQkJCQl8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRSkKLQotLyogRHJpdmVyIGRhdGFzICovCi1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhID0gewotCS5sY2Rjb25faXNfYmFja2xpZ2h0CQk9IHRydWUsCi0JLmRlZmF1bHRfYnBwCQkJPSAzMiwKLQkuZGVmYXVsdF9kbWFjb24JCQk9IEFUTUVMX0xDRENfRE1BRU4sCi0JLmRlZmF1bHRfbGNkY29uMgkJPSBBVDkxU0FNOUc0NV9ERUZBVUxUX0xDRENPTjIsCi0JLmRlZmF1bHRfbW9uc3BlY3MJCT0gJmF0OTFmYl9kZWZhdWx0X21vbnNwZWNzLAotCS5ndWFyZF90aW1lCQkJPSA5LAotCS5sY2Rfd2lyaW5nX21vZGUJCT0gQVRNRUxfTENEQ19XSVJJTkdfUkdCLAotfTsKLQotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGE7Ci0jZW5kaWYKLQotCi0vKgotICogQURDcyBhbmQgdG91Y2hzY3JlZW4KLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX2FkY19kYXRhIGVrX2FkY19kYXRhID0gewotCS5jaGFubmVsc191c2VkID0gQklUKDApIHwgQklUKDEpIHwgQklUKDIpIHwgQklUKDMpIHwgQklUKDQpIHwgQklUKDUpIHwgQklUKDYpIHwgQklUKDcpLAotCS51c2VfZXh0ZXJuYWxfdHJpZ2dlcnMgPSB0cnVlLAotCS52cmVmID0gMzMwMCwKLQkudG91Y2hzY3JlZW5fdHlwZSA9IEFUTUVMX0FEQ19UT1VDSFNDUkVFTl80V0lSRSwKLX07Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKLQl7CS8qIEJQMSwgImxlZnRjbGljIiAqLwotCQkuY29kZQkJPSBCVE5fTEVGVCwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEI2LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJsZWZ0X2NsaWNrIiwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewkvKiBCUDIsICJyaWdodGNsaWMiICovCi0JCS5jb2RlCQk9IEJUTl9SSUdIVCwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEI3LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJyaWdodF9jbGljayIsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCQkvKiBCUDMsICJqb3lzdGljayIgKi8KLQl7Ci0JCS5jb2RlCQk9IEtFWV9MRUZULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjE0LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJKb3lzdGljayBMZWZ0IiwKLQl9LAotCXsKLQkJLmNvZGUJCT0gS0VZX1JJR0hULAotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjE1LAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS5kZXNjCQk9ICJKb3lzdGljayBSaWdodCIsCi0JfSwKLQl7Ci0JCS5jb2RlCQk9IEtFWV9VUCwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxNiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkuZGVzYwkJPSAiSm95c3RpY2sgVXAiLAotCX0sCi0JewotCQkuY29kZQkJPSBLRVlfRE9XTiwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxNywKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkuZGVzYwkJPSAiSm95c3RpY2sgRG93biIsCi0JfSwKLQl7Ci0JCS5jb2RlCQk9IEtFWV9FTlRFUiwKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxOCwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkuZGVzYwkJPSAiSm95c3RpY2sgUHJlc3MiLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGVrX2J1dHRvbl9kYXRhID0gewotCS5idXR0b25zCT0gZWtfYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGVrX2J1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWtfYnV0dG9uX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZla19idXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShla19idXR0b25zKTsgaSsrKSB7Ci0JCWF0OTFfc2V0X0dQSU9fcGVyaXBoKGVrX2J1dHRvbnNbaV0uZ3BpbywgMSk7Ci0JCWF0OTFfc2V0X2RlZ2xpdGNoKGVrX2J1dHRvbnNbaV0uZ3BpbywgMSk7Ci0JfQotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZla19idXR0b25fZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi0vKgotICogQUM5NwotICogcmVzZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQ6IE5SU1QKLSAqLwotc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGVrX2FjOTdfZGF0YSA9IHsKLQkucmVzZXRfcGluCT0gLUVJTlZBTCwKLX07Ci0KLQotLyoKLSAqIExFRHMgLi4uIHRoZXNlIGNvdWxkIGFsbCBiZSBQV00tZHJpdmVuLCBmb3IgdmFyaWFibGUgYnJpZ2h0bmVzcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKLQl7CS8qICJ0b3AiIGxlZCwgcmVkLCBwb3dlcmxlZCAqLwotCQkubmFtZQkJCT0gImQ4IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMzAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9LAotCXsJLyogImxlZnQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQyLCBwd20zICovCi0JCS5uYW1lCQkJPSAiZDYiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQwLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCi0JfSwKLSNpZiAhSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JewkvKiAicmlnaHQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQxLCBwd20xICovCi0JCS5uYW1lCQkJPSAiZDciLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQzMSwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJtbWMwIiwKLQl9LAotI2VuZGlmCi19OwotCi0KLS8qCi0gKiBQV00gTGVkcwotICovCi1zdGF0aWMgc3RydWN0IHB3bV9sb29rdXAgcHdtX2xvb2t1cFtdID0gewotCVBXTV9MT09LVVAoImF0OTFzYW05cmwtcHdtIiwgMSwgImxlZHNfcHdtIiwgImQ3IiwKLQkJICAgNTAwMCwgUFdNX1BPTEFSSVRZX0lOVkVSU0VEKSwKLX07Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19MRURTX1BXTSkKLXN0YXRpYyBzdHJ1Y3QgbGVkX3B3bSBwd21fbGVkc1tdID0gewotCXsJLyogInJpZ2h0IiBsZWQsIGdyZWVuLCB1c2VybGVkMSwgcHdtMSAqLwotCQkubmFtZSA9ICJkNyIsCi0JCS5tYXhfYnJpZ2h0bmVzcwk9IDI1NSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBsZWRfcHdtX3BsYXRmb3JtX2RhdGEgcHdtX2RhdGEgPSB7Ci0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShwd21fbGVkcyksCi0JLmxlZHMJCT0gcHdtX2xlZHMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsZWRzX3B3bSA9IHsKLQkubmFtZQk9ICJsZWRzX3B3bSIsCi0JLmlkCT0gLTEsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcHdtX2RhdGEsCi0JfSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19DQU1FUkFfT1YyNjQwKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfU09DX0NBTUVSQV9PVjI2NDBfTU9EVUxFKQotCSZpc2lfb3YyNjQwLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JJmxlZHNfcHdtLAotI2VuZGlmCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfYm9hcmRfaW5pdCh2b2lkKQotewotCWF0OTFfcmVnaXN0ZXJfZGV2aWNlcygpOwotCi0JLyogU2VyaWFsICovCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0KLQkvKiBVU0FSVDAgbm90IGNvbm5lY3RlZCBvbiB0aGUgLUVLIGJvYXJkICovCi0JLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTlHNDVfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhTIEhvc3QgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKCZla191c2JoX2hzX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91c2JoX2VoY2koJmVrX3VzYmhfaHNfZGF0YSk7Ci0JLyogVVNCIEhTIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91c2JhKCZla191c2JhX3VkY19kYXRhKTsKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7Ci0JLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmbWNpMF9kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDEsICZtY2kxX2RhdGEpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKLQkvKiBOQU5EICovCi0JZWtfYWRkX2RldmljZV9uYW5kKCk7Ci0JLyogSTJDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2kyYygwLCBOVUxMLCAwKTsKLQkvKiBJU0ksIHVzaW5nIHByb2dyYW1tYWJsZSBjbG9jayBhcyBJU0lfTUNLICovCi0JYXQ5MV9hZGRfZGV2aWNlX2lzaSgmaXNpX2RhdGEsIHRydWUpOwotCS8qIExDRCBDb250cm9sbGVyICovCi0JYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7Ci0JLyogQURDIGFuZCB0b3VjaHNjcmVlbiAqLwotCWF0OTFfYWRkX2RldmljZV9hZGMoJmVrX2FkY19kYXRhKTsKLQkvKiBQdXNoIEJ1dHRvbnMgKi8KLQlla19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLQkvKiBBQzk3ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2FjOTcoJmVrX2FjOTdfZGF0YSk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwotCXB3bV9hZGRfdGFibGUocHdtX2xvb2t1cCwgQVJSQVlfU0laRShwd21fbG9va3VwKSk7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfTEVEU19QV00pCi0JYXQ5MV9hZGRfZGV2aWNlX3B3bSgxIDw8IEFUOTFfUFdNMSk7Ci0jZW5kaWYKLQkvKiBPdGhlciBwbGF0Zm9ybSBkZXZpY2VzICovCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoQVQ5MVNBTTlNMTBHNDVFSywgIkF0bWVsIEFUOTFTQU05TTEwRzQ1LUVLIikKLQkvKiBNYWludGFpbmVyOiBBdG1lbCAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGVrX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiY2EzMjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQotICogIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0OTFfYWRjLmg+Ci0KLSNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotCi0KLSNpbmNsdWRlICJhdDkxX2FpYy5oIgotI2luY2x1ZGUgImJvYXJkLmgiCi0jaW5jbHVkZSAic2FtOV9zbWMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZ3Bpby5oIgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLwotCWF0OTFfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7Ci19Ci0KLS8qCi0gKiBVU0IgSFMgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla191c2JhX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BBOCwKLX07Ci0KLQotLyoKLSAqIE1DSSAoU0QvTU1DKQotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbWNpMF9kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQTE1LAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLQotLyoKLSAqIE5BTkQgZmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgZWtfbmFuZF9wYXJ0aXRpb25bXSA9IHsKLQl7Ci0JCS5uYW1lCT0gIlBhcnRpdGlvbiAxIiwKLQkJLm9mZnNldAk9IDAsCi0JCS5zaXplCT0gU1pfMjU2SywKLQl9LAotCXsKLQkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gMjEsCi0JLmNsZQkJPSAyMiwKLQkuZGV0X3Bpbgk9IC1FSU5WQUwsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QRDE3LAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEI2LAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi0JLm9uX2ZsYXNoX2JidAk9IDEsCi0JLnBhcnRzCQk9IGVrX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKGVrX25hbmRfcGFydGl0aW9uKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0gewotCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAotCS5ucmRfc2V0dXAJCT0gMSwKLQkubmNzX3dyaXRlX3NldHVwCT0gMCwKLQkubndlX3NldHVwCQk9IDEsCi0KLQkubmNzX3JlYWRfcHVsc2UJCT0gMywKLQkubnJkX3B1bHNlCQk9IDMsCi0JLm5jc193cml0ZV9wdWxzZQk9IDMsCi0JLm53ZV9wdWxzZQkJPSAzLAotCi0JLnJlYWRfY3ljbGUJCT0gNSwKLQkud3JpdGVfY3ljbGUJCT0gNSwKLQotCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKLQkudGRmX2N5Y2xlcwkJPSAyLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQotewotCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLwotCXNhbTlfc21jX2NvbmZpZ3VyZSgwLCAzLCAmZWtfbmFuZF9zbWNfY29uZmlnKTsKLQotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOwotfQotCi0KLS8qCi0gKiBTUEkgZGV2aWNlcwotICovCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0JewkvKiBEYXRhRmxhc2ggY2hpcCAqLwotCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwKLX07Ci0KLQotLyoKLSAqIExDRCBDb250cm9sbGVyCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7Ci0JewotCQkubmFtZQkJPSAiVFgwOUQ1MFZNMUNDQSBAIDYwIiwKLQkJLnJlZnJlc2gJPSA2MCwKLQkJLnhyZXMJCT0gMjQwLAkJLnlyZXMJCT0gMzIwLAotCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoNDk2NSksCi0KLQkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAzMywKLQkJLnVwcGVyX21hcmdpbgk9IDEsCQkubG93ZXJfbWFyZ2luCT0gMCwKLQkJLmhzeW5jX2xlbgk9IDUsCQkudnN5bmNfbGVuCT0gMSwKLQotCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7Ci0JLm1hbnVmYWN0dXJlcgk9ICJISVQiLAotCS5tb25pdG9yCT0gIlRYMDlENTBWTTFDQ0EiLAotCi0JLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCi0JLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCi0JLmhmbWluCQk9IDE1MDAwLAotCS5oZm1heAkJPSA2NDAwMCwKLQkudmZtaW4JCT0gNTAsCi0JLnZmbWF4CQk9IDE1MCwKLX07Ci0KLSNkZWZpbmUgQVQ5MVNBTTlSTF9ERUZBVUxUX0xDRENPTjIJKEFUTUVMX0xDRENfTUVNT1JfTElUVExFIFwKLQkJCQkJfCBBVE1FTF9MQ0RDX0RJU1RZUEVfVEZUIFwKLQkJCQkJfCBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkUpCi0KLXN0YXRpYyB2b2lkIGF0OTFfbGNkY19wb3dlcl9jb250cm9sKHN0cnVjdCBhdG1lbF9sY2RmYl9wZGF0YSAqcGRhdGEsIGludCBvbikKLXsKLQlpZiAob24pCi0JCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEMxLCAwKTsJLyogcG93ZXIgdXAgKi8KLQllbHNlCi0JCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEMxLCAxKTsJLyogcG93ZXIgZG93biAqLwotfQotCi0vKiBEcml2ZXIgZGF0YXMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGEgX19pbml0ZGF0YSBla19sY2RjX2RhdGEgPSB7Ci0JLmxjZGNvbl9pc19iYWNrbGlnaHQgICAgICAgICAgICA9IHRydWUsCi0JLmRlZmF1bHRfYnBwCQkJPSAxNiwKLQkuZGVmYXVsdF9kbWFjb24JCQk9IEFUTUVMX0xDRENfRE1BRU4sCi0JLmRlZmF1bHRfbGNkY29uMgkJPSBBVDkxU0FNOVJMX0RFRkFVTFRfTENEQ09OMiwKLQkuZGVmYXVsdF9tb25zcGVjcwkJPSAmYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MsCi0JLmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wJPSBhdDkxX2xjZGNfcG93ZXJfY29udHJvbCwKLQkuZ3VhcmRfdGltZQkJCT0gMSwKLQkubGNkX3dpcmluZ19tb2RlCQk9IEFUTUVMX0xDRENfV0lSSU5HX1JHQiwKLX07Ci0KLSNlbHNlCi1zdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhOwotI2VuZGlmCi0KLQotLyoKLSAqIEFDOTcKLSAqIHJlc2V0X3BpbiBpcyBub3QgY29ubmVjdGVkOiBOUlNUCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBla19hYzk3X2RhdGEgPSB7Ci0JLnJlc2V0X3Bpbgk9IC1FSU5WQUwsCi19OwotCi0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewotCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDEgdG8gYmUgZGVmaW5lZCAqLwotCQkubmFtZQkJCT0gImRzMSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QRDE1LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCX0sCi0JewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMiB0byBiZSBkZWZpbmVkICovCi0JCS5uYW1lCQkJPSAiZHMyIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMTYsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwKLQl7CS8qICJwb3dlciIgbGVkLCB5ZWxsb3cgKi8KLQkJLm5hbWUJCQk9ICJkczMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQxNCwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0KLX07Ci0KLQotLyoKLSAqIEFEQyArIFRvdWNoc2NyZWVuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9hZGNfZGF0YSBla19hZGNfZGF0YSA9IHsKLQkuY2hhbm5lbHNfdXNlZCA9IEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg1KSwKLQkudXNlX2V4dGVybmFsX3RyaWdnZXJzID0gdHJ1ZSwKLQkudnJlZiA9IDMzMDAsCi0JLnRvdWNoc2NyZWVuX3R5cGUgPSBBVE1FTF9BRENfVE9VQ0hTQ1JFRU5fNFdJUkUsCi19OwotCi0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BCMCwKLQkJLmNvZGUJCT0gQlROXzIsCi0JCS5kZXNjCQk9ICJSaWdodCBDbGljayIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjEsCi0JCS5jb2RlCQk9IEJUTl8xLAotCQkuZGVzYwkJPSAiTGVmdCBDbGljayIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBla19idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMSwgMSk7CS8qIGJ0bjEgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjEsIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIwLCAxKTsJLyogYnRuMiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMCwgMSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkge30KLSNlbmRpZgotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05UkxfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogVVNCIEhTICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmEoJmVrX3VzYmFfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogTkFORCAqLwotCWVrX2FkZF9kZXZpY2VfbmFuZCgpOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZtY2kwX2RhdGEpOwotCS8qIExDRCBDb250cm9sbGVyICovCi0JYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7Ci0JLyogQUM5NyAqLwotCWF0OTFfYWRkX2RldmljZV9hYzk3KCZla19hYzk3X2RhdGEpOwotCS8qIFRvdWNoIFNjcmVlbiBDb250cm9sbGVyICsgQURDICovCi0JYXQ5MV9hZGRfZGV2aWNlX2FkYygmZWtfYWRjX2RhdGEpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKLQkvKiBQdXNoIEJ1dHRvbnMgKi8KLQlla19hZGRfZGV2aWNlX2J1dHRvbnMoKTsKLX0KLQotTUFDSElORV9TVEFSVChBVDkxU0FNOVJMRUssICJBdG1lbCBBVDkxU0FNOVJMLUVLIikKLQkvKiBNYWludGFpbmVyOiBBdG1lbCAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IGVrX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YWZmODQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAxMCBCbHVld2F0ZXIgU3lzdGVtIEx0ZAotICoKLSAqIEF1dGhvcjogQW5kcmUgUmVuYXVkIDxhbmRyZUBibHVld2F0ZXJzeXMuY29tPgotICogQXV0aG9yOiBSeWFuIE1hbGxvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvcGNhOTUzeC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLSNkZWZpbmUgU05BUFBFUjkyNjBfSU9fRVhQX0dQSU8oeCkJKE5SX0JVSUxUSU5fR1BJTyArICh4KSkKLQotc3RhdGljIHZvaWQgX19pbml0IHNuYXBwZXI5MjYwX2luaXRfZWFybHkodm9pZCkKLXsKLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgc25hcHBlcjkyNjBfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBzbmFwcGVyOTI2MF91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JCT0gU05BUFBFUjkyNjBfSU9fRVhQX0dQSU8oNSksCi0JLnZidXNfYWN0aXZlX2xvdwk9IDEsCi0JLnZidXNfcG9sbGVkCQk9IDEsCi0JLnB1bGx1cF9waW4JCT0gLUVJTlZBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHNuYXBwZXI5MjYwX21hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSAtRUlOVkFMLAotCS5pc19ybWlpCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX25hbmRfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJPSAiUHJlYm9vdCIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IFNaXzEyOEssCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIkJvb3Rsb2FkZXIiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQk9IFNaXzI1NkssCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIkVudmlyb25tZW50IiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJPSBTWl8xMjhLLAotCX0sCi0JewotCQkubmFtZQk9ICJLZXJuZWwiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQk9IFNaXzRNLAotCX0sCi0JewotCQkubmFtZQk9ICJGaWxlc3lzdGVtIiwKLQkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX25hbmRfZGF0YSA9IHsKLQkuYWxlCQk9IDIxLAotCS5jbGUJCT0gMjIsCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QQzEzLAotCS5wYXJ0cwkJPSBzbmFwcGVyOTI2MF9uYW5kX3BhcnRpdGlvbnMsCi0JLm51bV9wYXJ0cwk9IEFSUkFZX1NJWkUoc25hcHBlcjkyNjBfbmFuZF9wYXJ0aXRpb25zKSwKLQkuYnVzX3dpZHRoXzE2CT0gMCwKLQkuZW5hYmxlX3Bpbgk9IC1FSU5WQUwsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX25hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDAsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAwLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDUsCi0JLm5yZF9wdWxzZQkJPSAyLAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA1LAotCS5ud2VfcHVsc2UJCT0gMiwKLQotCS5yZWFkX2N5Y2xlCQk9IDcsCi0JLndyaXRlX2N5Y2xlCQk9IDcsCi0KLQkubW9kZQkJCT0gKEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwKLQkJCQkgICBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFKSwKLQkudGRmX2N5Y2xlcwkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgc25hcHBlcjkyNjBfaW9fZXhwYW5kZXJfZGF0YSA9IHsKLQkuZ3Bpb19iYXNlCQk9IFNOQVBQRVI5MjYwX0lPX0VYUF9HUElPKDApLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQkvKiBJTyBleHBhbmRlciAqLwotCQlJMkNfQk9BUkRfSU5GTygibWF4NzMxMiIsIDB4MjgpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZzbmFwcGVyOTI2MF9pb19leHBhbmRlcl9kYXRhLAotCX0sCi0JewotCQkvKiBBdWRpbyBjb2RlYyAqLwotCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMjMiLCAweDFhKSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNuYXBwZXI5MjYwX2kyY19pc2wxMjA4ID0gewotCQkvKiBSVEMgKi8KLQkJSTJDX0JPQVJEX0lORk8oImlzbDEyMDgiLCAweDZmKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzbmFwcGVyOTI2MF9hZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE0LCAwKTsKLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJnNuYXBwZXI5MjYwX25hbmRfc21jX2NvbmZpZyk7Ci0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJnNuYXBwZXI5MjYwX25hbmRfZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzbmFwcGVyOTI2MF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JYXQ5MV9yZWdpc3Rlcl9kZXZpY2VzKCk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKHNuYXBwZXI5MjYwX2kyY19kZXZpY2VzLAotCQkJICAgIEFSUkFZX1NJWkUoc25hcHBlcjkyNjBfaTJjX2RldmljZXMpKTsKLQotCXNuYXBwZXI5MjYwX2kyY19pc2wxMjA4LmlycSA9IGdwaW9fdG9faXJxKEFUOTFfUElOX1BBMzEpOwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZzbmFwcGVyOTI2MF9pMmNfaXNsMTIwOCwgMSk7Ci0KLQkvKiBEZWJ1ZyBvbiB0dHlTMCAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzAsIDEsCi0JCQkgICBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLAotCQkJICAgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMiwgMywgMCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZzbmFwcGVyOTI2MF91c2JoX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnNuYXBwZXI5MjYwX3VkY19kYXRhKTsKLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZzbmFwcGVyOTI2MF9tYWNiX2RhdGEpOwotCWF0OTFfYWRkX2RldmljZV9zc2MoQVQ5MVNBTTkyNjBfSURfU1NDLCAoQVRNRUxfU1NDX1RGIHwgQVRNRUxfU1NDX1RLIHwKLQkJCQkJCSBBVE1FTF9TU0NfVEQgfCBBVE1FTF9TU0NfUkQpKTsKLQlzbmFwcGVyOTI2MF9hZGRfZGV2aWNlX25hbmQoKTsKLX0KLQotTUFDSElORV9TVEFSVChTTkFQUEVSXzkyNjAsICJCbHVld2F0ZXIgU3lzdGVtcyBTbmFwcGVyIDkyNjAvOUcyMCBtb2R1bGUiKQotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IHNuYXBwZXI5MjYwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gYXQ5MV9pbml0X2lycV9kZWZhdWx0LAotCS5pbml0X21hY2hpbmUJPSBzbmFwcGVyOTI2MF9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc3RhbXA5ZzIwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc3RhbXA5ZzIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MjU2NDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXN0YW1wOWcyMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzdGlhbiBHbGluZGthbXAgPGNocmlzdGlhbi5nbGluZGthbXBAdGFza2l0LmRlPgotICogICAgICAgICAgICAgICAgICAgICB0YXNraXQgR21iSAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdzEtZ3Bpby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImF0OTFfYWljLmgiCi0jaW5jbHVkZSAiYm9hcmQuaCIKLSNpbmNsdWRlICJzYW05X3NtYy5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotdm9pZCBfX2luaXQgc3RhbXA5ZzIwX2luaXRfZWFybHkodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9pbml0aWFsaXplKDE4NDMyMDAwKTsKLX0KLQotLyoKLSAqIE5BTkQgZmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBuYW5kX2RhdGEgPSB7Ci0JLmFsZQkJPSAyMSwKLQkuY2xlCQk9IDIyLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCi0JLmJ1c193aWR0aF8xNgk9IDAsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5lY2NfbW9kZQk9IE5BTkRfRUNDX1NPRlQsCi19OwotCi1zdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIG5hbmRfc21jX2NvbmZpZyA9IHsKLQkubmNzX3JlYWRfc2V0dXAJCT0gMCwKLQkubnJkX3NldHVwCQk9IDIsCi0JLm5jc193cml0ZV9zZXR1cAk9IDAsCi0JLm53ZV9zZXR1cAkJPSAyLAotCi0JLm5jc19yZWFkX3B1bHNlCQk9IDQsCi0JLm5yZF9wdWxzZQkJPSA0LAotCS5uY3Nfd3JpdGVfcHVsc2UJPSA0LAotCS5ud2VfcHVsc2UJCT0gNCwKLQotCS5yZWFkX2N5Y2xlCQk9IDcsCi0JLndyaXRlX2N5Y2xlCQk9IDcsCi0KLQkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCi0JLnRkZl9jeWNsZXMJCT0gMywKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhZGRfZGV2aWNlX25hbmQodm9pZCkKLXsKLQkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KLQlzYW05X3NtY19jb25maWd1cmUoMCwgMywgJm5hbmRfc21jX2NvbmZpZyk7Ci0KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmbmFuZF9kYXRhKTsKLX0KLQotCi0vKgotICogTUNJIChTRC9NTUMpCi0gKiBkZXRfcGluLCB3cF9waW4gYW5kIHZjY19waW4gYXJlIG5vdCBjb25uZWN0ZWQKLSAqLwotc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1tY19kYXRhID0gewotCS5zbG90WzBdID0gewotCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSAtMSwKLQkJLndwX3BpbgkJPSAtMSwKLQl9LAotfTsKLQotCi0vKgotICogVVNCIEhvc3QgcG9ydAotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgdXNiaF9kYXRhID0gewotCS5wb3J0cwkJPSAyLAotCS52YnVzX3Bpbgk9IHstRUlOVkFMLCAtRUlOVkFMfSwKLQkub3ZlcmN1cnJlbnRfcGluPSB7LUVJTlZBTCwgLUVJTlZBTH0sCi19OwotCi0KLS8qCi0gKiBVU0IgRGV2aWNlIHBvcnQKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgcG9ydHV4ZzIwX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDNywKLQkucHVsbHVwX3Bpbgk9IC1FSU5WQUwsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIHN0YW1wOWcyMGV2Yl91ZGNfZGF0YSA9IHsKLQkudmJ1c19waW4JPSBBVDkxX1BJTl9QQTIyLAotCS5wdWxsdXBfcGluCT0gLUVJTlZBTCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwotfTsKLQotCi0vKgotICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtYWNiX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEEyOCwKLQkuaXNfcm1paQk9IDEsCi19OwotCi0KLS8qCi0gKiBMRURzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgcG9ydHV4ZzIwX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQkJPSAiTEVEMiIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzUsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwgewotCQkubmFtZQkJCT0gIkxFRDMiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEM0LAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAotCX0sIHsKLQkJLm5hbWUJCQk9ICJMRUQ0IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BDMTAsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHN0YW1wOWcyMGV2Yl9sZWRzW10gPSB7Ci0JewotCQkubmFtZQkJCT0gIkQ4IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTgsCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwgewotCQkubmFtZQkJCT0gIkQ5IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTksCi0JCS5hY3RpdmVfbG93CQk9IDEsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCi0JfSwgewotCQkubmFtZQkJCT0gIkQxMCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjIwLAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JfQotfTsKLQotCi0vKgotICogU1BJIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwb3J0dXhnMjBfc3BpX2RldmljZXNbXSA9IHsKLQl7Ci0JCS5tb2RhbGlhcwk9ICJzcGlkZXYiLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkubWF4X3NwZWVkX2h6CT0gMSAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDAsCi0JfSwgewotCQkubW9kYWxpYXMJPSAic3BpZGV2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDEgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAxLAotCX0sCi19OwotCi0KLS8qCi0gKiBEYWxsYXMgMS1XaXJlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgdzFfZ3Bpb19wbGF0Zm9ybV9kYXRhIHcxX2dwaW9fcGRhdGEgPSB7Ci0JLnBpbgkJPSBBVDkxX1BJTl9QQTI5LAotCS5pc19vcGVuX2RyYWluCT0gMSwKLQkuZXh0X3B1bGx1cF9lbmFibGVfcGluCT0gLUVJTlZBTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHcxX2RldmljZSA9IHsKLQkubmFtZQkJCT0gIncxLWdwaW8iLAotCS5pZAkJCT0gLTEsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJncxX2dwaW9fcGRhdGEsCi19OwotCi12b2lkIGFkZF93MSh2b2lkKQotewotCWF0OTFfc2V0X0dQSU9fcGVyaXBoKHcxX2dwaW9fcGRhdGEucGluLCAxKTsKLQlhdDkxX3NldF9tdWx0aV9kcml2ZSh3MV9ncGlvX3BkYXRhLnBpbiwgMSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3MV9kZXZpY2UpOwotfQotCi0KLXZvaWQgX19pbml0IHN0YW1wOWcyMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogU2VyaWFsICovCi0JLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7Ci0JYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwotCS8qIE5BTkQgKi8KLQlhZGRfZGV2aWNlX25hbmQoKTsKLQkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZtbWNfZGF0YSk7Ci0JLyogVzEgKi8KLQlhZGRfdzEoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBvcnR1eGcyMF9ib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJCQkJfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSCi0JCQkJCQl8IEFUTUVMX1VBUlRfRENEIHwgQVRNRUxfVUFSVF9SSSk7Ci0KLQkvKiBVU0FSVDEgb24gdHR5UzIuIChSeCwgVHgsIENUUywgUlRTKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOwotCi0JLyogVVNBUlQyIG9uIHR0eVMzLiAoUngsIFR4LCBDVFMsIFJUUykgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMyLCAzLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQotCS8qIFVTQVJUNCBvbiB0dHlTNS4gKFJ4LCBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzQsIDUsIDApOwotCi0JLyogVVNBUlQ1IG9uIHR0eVM2LiAoUngsIFR4IG9ubHkpICovCi0JYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTNSwgNiwgMCk7Ci0Jc3RhbXA5ZzIwX2JvYXJkX2luaXQoKTsKLQkvKiBVU0IgSG9zdCAqLwotCWF0OTFfYWRkX2RldmljZV91c2JoKCZ1c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZwb3J0dXhnMjBfdWRjX2RhdGEpOwotCS8qIEV0aGVybmV0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX2V0aCgmbWFjYl9kYXRhKTsKLQkvKiBJMkMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOwotCS8qIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9zcGkocG9ydHV4ZzIwX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBvcnR1eGcyMF9zcGlfZGV2aWNlcykpOwotCS8qIExFRHMgKi8KLQlhdDkxX2dwaW9fbGVkcyhwb3J0dXhnMjBfbGVkcywgQVJSQVlfU0laRShwb3J0dXhnMjBfbGVkcykpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc3RhbXA5ZzIwZXZiX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCi0JCQkJCQl8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IKLQkJCQkJCXwgQVRNRUxfVUFSVF9EQ0QgfCBBVE1FTF9VQVJUX1JJKTsKLQlzdGFtcDlnMjBfYm9hcmRfaW5pdCgpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJnVzYmhfZGF0YSk7Ci0JLyogVVNCIERldmljZSAqLwotCWF0OTFfYWRkX2RldmljZV91ZGMoJnN0YW1wOWcyMGV2Yl91ZGNfZGF0YSk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZtYWNiX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7Ci0JLyogTEVEcyAqLwotCWF0OTFfZ3Bpb19sZWRzKHN0YW1wOWcyMGV2Yl9sZWRzLCBBUlJBWV9TSVpFKHN0YW1wOWcyMGV2Yl9sZWRzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoUE9SVFVYRzIwLCAidGFza2l0IFBvcnR1eEcyMCIpCi0JLyogTWFpbnRhaW5lcjogdGFza2l0IEdtYkggKi8KLQkuaW5pdF90aW1lCT0gYXQ5MV9pbml0X3RpbWUsCi0JLm1hcF9pbwkJPSBhdDkxX21hcF9pbywKLQkuaGFuZGxlX2lycQk9IGF0OTFfYWljX2hhbmRsZV9pcnEsCi0JLmluaXRfZWFybHkJPSBzdGFtcDlnMjBfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBhdDkxX2luaXRfaXJxX2RlZmF1bHQsCi0JLmluaXRfbWFjaGluZQk9IHBvcnR1eGcyMF9ib2FyZF9pbml0LAotTUFDSElORV9FTkQKLQotTUFDSElORV9TVEFSVChTVEFNUDlHMjAsICJ0YXNraXQgU3RhbXA5RzIwIikKLQkvKiBNYWludGFpbmVyOiB0YXNraXQgR21iSCAqLwotCS5pbml0X3RpbWUJPSBhdDkxX2luaXRfdGltZSwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IHN0YW1wOWcyMF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0gc3RhbXA5ZzIwZXZiX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC15bC05MjAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZmRiMGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYworKysgL2Rldi9udWxsCkBAIC0xLDU5NyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYwotICoKLSAqIEFkYXB0ZWQgZnJvbSB2YXJpb3VzIGJvYXJkIGZpbGVzIGluIGFyY2gvYXJtL21hY2gtYXQ5MQotICoKLSAqIE1vZGlmaWNhdGlvbnMgZm9yIFlMLTkyMDAgcGxhdGZvcm06Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IFMuIEJpcnRsZXMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxcm05MjAwX21jLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLQotc3RhdGljIHZvaWQgX19pbml0IHlsOTIwMF9pbml0X2Vhcmx5KHZvaWQpCi17Ci0JLyogU2V0IGNwdSB0eXBlOiBQUUZQICovCi0JYXQ5MXJtOTIwMF9zZXRfdHlwZShBUkNIX1JFVklTT05fOTIwMF9QUUZQKTsKLQotCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2luaXRpYWxpemUoMTg0MzIwMDApOwotfQotCi0vKgotICogTEVEcwotICovCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIHlsOTIwMF9sZWRzW10gPSB7Ci0JewkvKiBEMiAqLwotCQkubmFtZQkJCT0gImxlZDIiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxNywKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJ0aW1lciIsCi0JfSwKLQl7CS8qIEQzICovCi0JCS5uYW1lCQkJPSAibGVkMyIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE2LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JfSwKLQl7CS8qIEQ0ICovCi0JCS5uYW1lCQkJPSAibGVkNCIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjE1LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCX0sCi0JewkvKiBENSAqLwotCQkubmFtZQkJCT0gImxlZDUiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI4LAotCQkuYWN0aXZlX2xvdwkJPSAxLAotCX0KLX07Ci0KLS8qCi0gKiBFdGhlcm5ldAotICovCi1zdGF0aWMgc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIHlsOTIwMF9ldGhfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JCT0gQVQ5MV9QSU5fUEIyOCwKLQkuaXNfcm1paQkJPSAxLAotfTsKLQotLyoKLSAqIFVTQiBIb3N0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSB5bDkyMDBfdXNiaF9kYXRhID0gewotCS5wb3J0cwkJCT0gMSwJLyogUFFGUCB2ZXJzaW9uIG9mIEFUOTFSTTkyMDAgKi8KLQkudmJ1c19waW4JCT0gey1FSU5WQUwsIC1FSU5WQUx9LAotCS5vdmVyY3VycmVudF9waW49IHstRUlOVkFMLCAtRUlOVkFMfSwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIHlsOTIwMF91ZGNfZGF0YSA9IHsKLQkucHVsbHVwX3BpbgkJPSBBVDkxX1BJTl9QQzQsCi0JLnZidXNfcGluCQk9IEFUOTFfUElOX1BDNSwKLQkucHVsbHVwX2FjdGl2ZV9sb3cJPSAxLAkvKiBBY3RpdmUgTG93IGR1ZSB0byBQTlAgdHJhbnNpc3RvciAocGcgNykgKi8KLQotfTsKLQotLyoKLSAqIE1NQwotICovCi1zdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgeWw5MjAwX21jaTBfZGF0YSA9IHsKLQkuc2xvdFswXSA9IHsKLQkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEI5LAotCQkud3BfcGluCQk9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLS8qCi0gKiBOQU5EIEZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIHlsOTIwMF9uYW5kX3BhcnRpdGlvbltdID0gewotCXsKLQkJLm5hbWUJPSAiQVQ5MSBOQU5EIHBhcnRpdGlvbiAxLCBib290IiwKLQkJLm9mZnNldAk9IDAsCi0JCS5zaXplCT0gU1pfMjU2SwotCX0sCi0JewotCQkubmFtZQk9ICJBVDkxIE5BTkQgcGFydGl0aW9uIDIsIGtlcm5lbCIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gKDIgKiBTWl8xTSkgLSBTWl8yNTZLCi0JfSwKLQl7Ci0JCS5uYW1lCT0gIkFUOTEgTkFORCBwYXJ0aXRpb24gMywgZmlsZXN5c3RlbSIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gMTQgKiBTWl8xTQotCX0sCi0JewotCQkubmFtZQk9ICJBVDkxIE5BTkQgcGFydGl0aW9uIDQsIHN0b3JhZ2UiLAotCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAotCQkuc2l6ZQk9IFNaXzE2TQotCX0sCi0JewotCQkubmFtZQk9ICJBVDkxIE5BTkQgcGFydGl0aW9uIDUsIGV4dC1mcyIsCi0JCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCT0gU1pfMzJNCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSB5bDkyMDBfbmFuZF9kYXRhID0gewotCS5hbGUJCT0gNiwKLQkuY2xlCQk9IDcsCi0JLmRldF9waW4JPSAtRUlOVkFMLAotCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxNCwJLyogUi8hQiAoU2hlZXQxMCkgKi8KLQkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTUsCS8qICFDRSAgKFNoZWV0MTApICovCi0JLmVjY19tb2RlCT0gTkFORF9FQ0NfU09GVCwKLQkucGFydHMJCT0geWw5MjAwX25hbmRfcGFydGl0aW9uLAotCS5udW1fcGFydHMJPSBBUlJBWV9TSVpFKHlsOTIwMF9uYW5kX3BhcnRpdGlvbiksCi19OwotCi0vKgotICogTk9SIEZsYXNoCi0gKi8KLSNkZWZpbmUgWUw5MjAwX0ZMQVNIX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKLSNkZWZpbmUgWUw5MjAwX0ZMQVNIX1NJWkUJU1pfMTZNCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB5bDkyMDBfZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJCT0gIkJvb3Rsb2FkZXIiLAotCQkub2Zmc2V0CQk9IDAsCi0JCS5zaXplCQk9IFNaXzI1NkssCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJLZXJuZWwiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUJCT0gKDIgKiBTWl8xTSkgLSBTWl8yNTZLCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJGaWxlc3lzdGVtIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSB5bDkyMDBfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gMiwKLQkucGFydHMJCT0geWw5MjAwX2ZsYXNoX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRSh5bDkyMDBfZmxhc2hfcGFydGl0aW9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHlsOTIwMF9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IFlMOTIwMF9GTEFTSF9CQVNFLAotCQkuZW5kCT0gWUw5MjAwX0ZMQVNIX0JBU0UgKyBZTDkyMDBfRkxBU0hfU0laRSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHlsOTIwMF9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEJPSAmeWw5MjAwX2ZsYXNoX2RhdGEsCi0JCQl9LAotCS5yZXNvdXJjZQk9IHlsOTIwMF9mbGFzaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHlsOTIwMF9mbGFzaF9yZXNvdXJjZXMpLAotfTsKLQotLyoKLSAqIEkyQyAoVFdJKQotICovCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgeWw5MjAwX2kyY19kZXZpY2VzW10gPSB7Ci0JewkvKiBFRVBST00gKi8KLQkJSTJDX0JPQVJEX0lORk8oIjI0YzEyOCIsIDB4NTApLAotCX0KLX07Ci0KLS8qCi0gKiBHUElPIEJ1dHRvbnMKLSovCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24geWw5MjAwX2J1dHRvbnNbXSA9IHsKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BBMjQsCi0JCS5jb2RlCQk9IEJUTl8yLAotCQkuZGVzYwkJPSAiU1cyIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLQl7Ci0JCS5ncGlvCQk9IEFUOTFfUElOX1BCMSwKLQkJLmNvZGUJCT0gQlROXzMsCi0JCS5kZXNjCQk9ICJTVzMiLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JCS53YWtldXAJCT0gMSwKLQl9LAotCXsKLQkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIyLAotCQkuY29kZQkJPSBCVE5fNCwKLQkJLmRlc2MJCT0gIlNXNCIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLndha2V1cAkJPSAxLAotCX0sCi0JewotCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjYsCi0JCS5jb2RlCQk9IEJUTl81LAotCQkuZGVzYwkJPSAiU1c1IiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSB5bDkyMDBfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSB5bDkyMDBfYnV0dG9ucywKLQkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHlsOTIwMF9idXR0b25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHlsOTIwMF9idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnlsOTIwMF9idXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQotewotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEEyNCwgMSk7CS8qIFNXMiAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BBMjQsIDEpOwotCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIxLCAxKTsJLyogU1czICovCi0JYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEIxLCAxKTsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMiwgMSk7CS8qIFNXNCAqLwotCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMiwgMSk7Ci0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjYsIDEpOwkvKiBTVzUgKi8KLQlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjYsIDEpOwotCi0JLyogRW5hYmxlIGJ1dHRvbnMgKFNoZWV0IDUpICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEI3LCAxKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmeWw5MjAwX2J1dHRvbl9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCB5bDkyMDBfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9Ci0jZW5kaWYKLQotLyoKLSAqIFRvdWNoc2NyZWVuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLXN0YXRpYyBpbnQgYWRzNzg0M19wZW5kb3duX3N0YXRlKHZvaWQpCi17Ci0JcmV0dXJuICFhdDkxX2dldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BCMTEpOwkvKiBUb3VjaHNjcmVlbiBQRU5JUlEgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgYWRzX2luZm8gPSB7Ci0JLm1vZGVsCQkJPSA3ODQzLAotCS54X21pbgkJCT0gMTUwLAotCS54X21heAkJCT0gMzgzMCwKLQkueV9taW4JCQk9IDE5MCwKLQkueV9tYXgJCQk9IDM4MzAsCi0JLnZyZWZfZGVsYXlfdXNlY3MJPSAxMDAsCi0KLQkvKiBGb3IgYSA4IiB0b3VjaC1zY3JlZW4gKi8KLQkvLyAueF9wbGF0ZV9vaG1zCQk9IDYwMywKLQkvLyAueV9wbGF0ZV9vaG1zCQk9IDMzMiwKLQotCS8qIEZvciBhIDEwLjQiIHRvdWNoLXNjcmVlbiAqLwotCS8vIC54X3BsYXRlX29obXMJCT0gNjExLAotCS8vIC55X3BsYXRlX29obXMJCT0gMzI1LAotCi0JLnhfcGxhdGVfb2htcwkJPSA1NzYsCi0JLnlfcGxhdGVfb2htcwkJPSAzNjYsCi0KLQkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLCAvKiBnZW5lcmFsbHkgbm9uc2Vuc2Ugb24gdGhlIDc4NDMgKi8KLQkuZGVib3VuY2VfbWF4CQk9IDEsCi0JLmRlYm91bmNlX3JlcAkJPSAwLAotCS5kZWJvdW5jZV90b2wJCT0gKH4wKSwKLQkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQzX3BlbmRvd25fc3RhdGUsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfdHModm9pZCkKLXsKLQlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMTEsIDEpOwkvKiBUb3VjaHNjcmVlbiBpbnRlcnJ1cHQgcGluICovCi0JYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQjEwLCAxKTsJLyogVG91Y2hzY3JlZW4gQlVTWSBzaWduYWwgLSBub3QgdXNlZCEgKi8KLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfdHModm9pZCkge30KLSNlbmRpZgotCi0vKgotICogU1BJIGRldmljZXMKLSAqLwotc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyB5bDkyMDBfc3BpX2RldmljZXNbXSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLQl7CS8qIFRvdWNoc2NyZWVuICovCi0JCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQkJLm1heF9zcGVlZF9oegk9IDUwMDAgKiAyNiwKLQkJLnBsYXRmb3JtX2RhdGEJPSAmYWRzX2luZm8sCi0JCS5pcnEJCT0gQVQ5MV9QSU5fUEIxMSwKLQl9LAotI2VuZGlmCi0JewkvKiBDQU4gKi8KLQkJLm1vZGFsaWFzCT0gIm1jcDI1MTAiLAotCQkuY2hpcF9zZWxlY3QJPSAxLAotCQkubWF4X3NwZWVkX2h6CT0gMjUwMDAgKiAyNiwKLQkJLmlycQkJPSBBVDkxX1BJTl9QQzAsCi0JfQotfTsKLQotLyoKLSAqIExDRCAvIFZHQQotICoKLSAqIEVQU09OIFMxRDEzODA2IEZCIChkaXNjb250aW51ZWQgY2hpcCkKLSAqIEVQU09OIFMxRDEzNTA2IEZCCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19GQl9TMUQxM1hYWCkgfHwgZGVmaW5lZChDT05GSUdfRkJfUzFEMTNYWFhfTU9EVUxFKQotI2luY2x1ZGUgPHZpZGVvL3MxZDEzeHh4ZmIuaD4KLQotCi1zdGF0aWMgdm9pZCB5bDkyMDBfaW5pdF92aWRlbyh2b2lkKQotewotCS8qIE5XQUlUIFNpZ25hbCAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNiwgMCk7Ci0KLQkvKiBJbml0aWFsaXphdGlvbiBvZiB0aGUgU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIGZvciBDaGlwIFNlbGVjdCAyICovCi0JYXQ5MV9yYW1jX3dyaXRlKDAsIEFUOTFfU01DX0NTUigyKSwgQVQ5MV9TTUNfREJXXzE2CQkvKiAxNiBiaXQgKi8KLQkJCXwgQVQ5MV9TTUNfV1NFTiB8IEFUOTFfU01DX05XU18oMHg0KQkvKiB3YWl0IHN0YXRlcyAqLwotCQkJfCBBVDkxX1NNQ19UREZfKDB4MTAwKQkJCS8qIGZsb2F0IHRpbWUgKi8KLQkpOwotfQotCi1zdGF0aWMgc3RydWN0IHMxZDEzeHh4ZmJfcmVndmFsIHlsOTIwMF9zMWRmYl9pbml0cmVnc1tdID0KLXsKLQl7UzFEUkVHX01JU0MsCQkJMHgwMH0sCS8qIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ09NX0RJU1BfTU9ERSwJCTB4MDF9LAkvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIsIExDRCBvbmx5Ki8KLQl7UzFEUkVHX0dQSU9fQ05GMCwJCTB4MDB9LAkvKiBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19HUElPX0NUTDAsCQkweDAwfSwJLyogR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ0xLX0NORiwJCTB4MTF9LAkvKiBNZW1vcnkgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfQ0xLX0NORiwJCTB4MTB9LAkvKiBMQ0QgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfQ0xLX0NORiwJCTB4MTJ9LAkvKiBDUlQvVFYgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19NUExVR19DTEtfQ05GLAkJMHgwMX0sCS8qIE1lZGlhUGx1ZyBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NQVTJNRU1fV1NUX1NFTCwJMHgwMn0sCS8qIENQVSBUbyBNZW1vcnkgV2FpdCBTdGF0ZSBTZWxlY3QgUmVnaXN0ZXIqLwotCXtTMURSRUdfTUVNX0NORiwJCTB4MDB9LAkvKiBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19TRFJBTV9SRUZfUkFURSwJCTB4MDR9LAkvKiBEUkFNIFJlZnJlc2ggUmF0ZSBSZWdpc3RlciwgTUNMSyBzb3VyY2UqLwotCXtTMURSRUdfU0RSQU1fVEMwLAkJMHgxMn0sCS8qIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfU0RSQU1fVEMxLAkJMHgwMn0sCS8qIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfUEFORUxfVFlQRSwJCTB4MjV9LAkvKiBQYW5lbCBUeXBlIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX01PRF9SQVRFLAkJMHgwMH0sCS8qIE1PRCBSYXRlIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9ESVNQX0hXSURUSCwJMHg0Rn0sCS8qIExDRCBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX05ESVNQX0hQRVIsCQkweDEzfSwJLyogTENEIEhvcml6b250YWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX1RGVF9GUExJTkVfU1RBUlQsCTB4MDF9LAkvKiBURlQgRlBMSU5FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX1RGVF9GUExJTkVfUFdJRFRILAkweDBjfSwJLyogVEZUIEZQTElORSBQdWxzZSBXaWR0aCBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfRElTUF9WSEVJR0hUMCwJMHhERn0sCS8qIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0xDRF9ESVNQX1ZIRUlHSFQxLAkweDAxfSwJLyogTENEIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfTENEX05ESVNQX1ZQRVIsCQkweDJjfSwJLyogTENEIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciovCi0Je1MxRFJFR19URlRfRlBGUkFNRV9TVEFSVCwJMHgwYX0sCS8qIFRGVCBGUEZSQU1FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX1RGVF9GUEZSQU1FX1BXSURUSCwJMHgwMn0sCS8qIFRGVCBGUEZSQU1FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9ESVNQX01PREUsCQkweDA1fSwJLyogTENEIERpc3BsYXkgTW9kZSBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfTUlTQywJCTB4MDF9LAkvKiBMQ0QgTWlzY2VsbGFuZW91cyBSZWdpc3RlciovCi0Je1MxRFJFR19MQ0RfRElTUF9TVEFSVDAsCTB4MDB9LAkvKiBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfTENEX0RJU1BfU1RBUlQxLAkweDAwfSwJLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0xDRF9ESVNQX1NUQVJUMiwJMHgwMH0sCS8qIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiovCi0Je1MxRFJFR19MQ0RfTUVNX09GRjAsCQkweDgwfSwJLyogTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0xDRF9NRU1fT0ZGMSwJCTB4MDJ9LAkvKiBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfTENEX1BJWF9QQU4sCQkweDAzfSwJLyogTENEIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0RJU1BfRklGT19IVEMsCTB4MDB9LAkvKiBMQ0QgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0RJU1BfRklGT19MVEMsCTB4MDB9LAkvKiBMQ0QgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9IV0lEVEgsCTB4NEZ9LAkvKiBDUlQvVFYgSG9yaXpvbnRhbCBEaXNwbGF5IFdpZHRoIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9ORElTUF9IUEVSLAkJMHgxM30sCS8qIENSVC9UViBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfSFJUQ19TVEFSVCwJCTB4MDF9LAkvKiBDUlQvVFYgSFJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfSFJUQ19QV0lEVEgsCTB4MEJ9LAkvKiBDUlQvVFYgSFJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9WSEVJR0hUMCwJMHhERn0sCS8qIENSVC9UViBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0NSVF9ESVNQX1ZIRUlHSFQxLAkweDAxfSwJLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfQ1JUX05ESVNQX1ZQRVIsCQkweDJCfSwJLyogQ1JUL1RWIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfVlJUQ19TVEFSVCwJCTB4MDl9LAkvKiBDUlQvVFYgVlJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfVlJUQ19QV0lEVEgsCTB4MDF9LAkvKiBDUlQvVFYgVlJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciovCi0Je1MxRFJFR19UVl9PVVRfQ1RMLAkJMHgxOH0sCS8qIFRWIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyICovCi0Je1MxRFJFR19DUlRfRElTUF9NT0RFLAkJMHgwNX0sCS8qIENSVC9UViBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIsIDE2QlBQKi8KLQl7UzFEUkVHX0NSVF9ESVNQX1NUQVJUMCwJMHgwMH0sCS8qIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCovCi0Je1MxRFJFR19DUlRfRElTUF9TVEFSVDEsCTB4MDB9LAkvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfQ1JUX0RJU1BfU1RBUlQyLAkweDAwfSwJLyogQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KLQl7UzFEUkVHX0NSVF9NRU1fT0ZGMCwJCTB4ODB9LAkvKiBDUlQvVFYgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQ1JUX01FTV9PRkYxLAkJMHgwMn0sCS8qIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19DUlRfUElYX1BBTiwJCTB4MDB9LAkvKiBDUlQvVFYgUGl4ZWwgUGFubmluZyBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9GSUZPX0hUQywJMHgwMH0sCS8qIENSVC9UViBEaXNwbGF5IEZJRk8gSGlnaCBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciovCi0Je1MxRFJFR19DUlRfRElTUF9GSUZPX0xUQywJMHgwMH0sCS8qIENSVC9UViBEaXNwbGF5IEZJRk8gTG93IFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfQ1RMLAkJMHgwMH0sCS8qIExDRCBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9TVEFSVCwJCTB4MDF9LAkvKiBMQ0QgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfWFBPUzAsCQkweDAwfSwJLyogTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfTENEX0NVUl9YUE9TMSwJCTB4MDB9LAkvKiBMQ0QgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19MQ0RfQ1VSX1lQT1MwLAkJMHgwMH0sCS8qIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0xDRF9DVVJfWVBPUzEsCQkweDAwfSwJLyogTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfTENEX0NVUl9CQ1RMMCwJCTB4MDB9LAkvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9HQ1RMMCwJCTB4MDB9LAkvKiBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfUkNUTDAsCQkweDAwfSwJLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9CQ1RMMSwJCTB4MUZ9LAkvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9HQ1RMMSwJCTB4M0Z9LAkvKiBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xDRF9DVVJfUkNUTDEsCQkweDFGfSwJLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfTENEX0NVUl9GSUZPX0hUQywJMHgwMH0sCS8qIExDRCBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfQ1RMLAkJMHgwMH0sCS8qIENSVC9UViBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9TVEFSVCwJCTB4MDF9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfWFBPUzAsCQkweDAwfSwJLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQ1JUX0NVUl9YUE9TMSwJCTB4MDB9LAkvKiBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19DUlRfQ1VSX1lQT1MwLAkJMHgwMH0sCS8qIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0NSVF9DVVJfWVBPUzEsCQkweDAwfSwJLyogQ1JUL1RWIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEqLwotCXtTMURSRUdfQ1JUX0NVUl9CQ1RMMCwJCTB4MDB9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9HQ1RMMCwJCTB4MDB9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfUkNUTDAsCQkweDAwfSwJLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9CQ1RMMSwJCTB4MUZ9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9HQ1RMMSwJCTB4M0Z9LAkvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NSVF9DVVJfUkNUTDEsCQkweDFGfSwJLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ1JUX0NVUl9GSUZPX0hUQywJMHgwMH0sCS8qIENSVC9UViBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0JCTFRfQ1RMMCwJCTB4MDB9LAkvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfQ1RMMSwJCTB4MDF9LAkvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfQ0NfRVhQLAkJMHgwMH0sCS8qIEJpdEJsdCBST1AgQ29kZS9Db2xvciBFeHBhbnNpb24gUmVnaXN0ZXIqLwotCXtTMURSRUdfQkJMVF9PUCwJCTB4MDB9LAkvKiBCaXRCbHQgT3BlcmF0aW9uIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0JCTFRfU1JDX1NUQVJUMCwJMHgwMH0sCS8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfU1JDX1NUQVJUMSwJMHgwMH0sCS8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfU1JDX1NUQVJUMiwJMHgwMH0sCS8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KLQl7UzFEUkVHX0JCTFRfRFNUX1NUQVJUMCwJMHgwMH0sCS8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQkJMVF9EU1RfU1RBUlQxLAkweDAwfSwJLyogQml0Qmx0IERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19CQkxUX0RTVF9TVEFSVDIsCTB4MDB9LAkvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KLQl7UzFEUkVHX0JCTFRfTUVNX09GRjAsCQkweDAwfSwJLyogQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfTUVNX09GRjEsCQkweDAwfSwJLyogQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfV0lEVEgwLAkJMHgwMH0sCS8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAwKi8KLQl7UzFEUkVHX0JCTFRfV0lEVEgxLAkJMHgwMH0sCS8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAxKi8KLQl7UzFEUkVHX0JCTFRfSEVJR0hUMCwJCTB4MDB9LAkvKiBCaXRCbHQgSGVpZ2h0IFJlZ2lzdGVyIDAqLwotCXtTMURSRUdfQkJMVF9IRUlHSFQxLAkJMHgwMH0sCS8qIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19CQkxUX0JHQzAsCQkweDAwfSwJLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCovCi0Je1MxRFJFR19CQkxUX0JHQzEsCQkweDAwfSwJLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19CQkxUX0ZHQzAsCQkweDAwfSwJLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCovCi0Je1MxRFJFR19CQkxUX0ZHQzEsCQkweDAwfSwJLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSovCi0Je1MxRFJFR19MS1VQX01PREUsCQkweDAwfSwJLyogTG9vay1VcCBUYWJsZSBNb2RlIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0xLVVBfQUREUiwJCTB4MDB9LAkvKiBMb29rLVVwIFRhYmxlIEFkZHJlc3MgUmVnaXN0ZXIqLwotCXtTMURSRUdfUFNfQ05GLAkJCTB4MDB9LAkvKiBQb3dlciBTYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqLwotCXtTMURSRUdfUFNfU1RBVFVTLAkJMHgwMH0sCS8qIFBvd2VyIFNhdmUgU3RhdHVzIFJlZ2lzdGVyKi8KLQl7UzFEUkVHX0NQVTJNRU1fV0RPR1QsCQkweDAwfSwJLyogQ1BVLXRvLU1lbW9yeSBBY2Nlc3MgV2F0Y2hkb2cgVGltZXIgUmVnaXN0ZXIqLwotCXtTMURSRUdfQ09NX0RJU1BfTU9ERSwJCTB4MDF9LAkvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIsIExDRCBvbmx5Ki8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSB5bDkyMDBfczFkZmJfcGRhdGEgPSB7Ci0JLmluaXRyZWdzCQk9IHlsOTIwMF9zMWRmYl9pbml0cmVncywKLQkuaW5pdHJlZ3NzaXplCQk9IEFSUkFZX1NJWkUoeWw5MjAwX3MxZGZiX2luaXRyZWdzKSwKLQkucGxhdGZvcm1faW5pdF92aWRlbwk9IHlsOTIwMF9pbml0X3ZpZGVvLAotfTsKLQotI2RlZmluZSBZTDkyMDBfRkJfUkVHX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzcKLSNkZWZpbmUgWUw5MjAwX0ZCX1ZNRU1fQkFTRQlZTDkyMDBfRkJfUkVHX0JBU0UgKyBTWl8yTQotI2RlZmluZSBZTDkyMDBfRkJfVk1FTV9TSVpFCVNaXzJNCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgeWw5MjAwX3MxZGZiX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewkvKiB2aWRlbyBtZW0gKi8KLQkJLm5hbWUJPSAiczFkMTN4eHhmYiBtZW1vcnkiLAotCQkuc3RhcnQJPSBZTDkyMDBfRkJfVk1FTV9CQVNFLAotCQkuZW5kCT0gWUw5MjAwX0ZCX1ZNRU1fQkFTRSArIFlMOTIwMF9GQl9WTUVNX1NJWkUgLTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewkvKiB2aWRlbyByZWdpc3RlcnMgKi8KLQkJLm5hbWUJPSAiczFkMTN4eHhmYiByZWdpc3RlcnMiLAotCQkuc3RhcnQJPSBZTDkyMDBfRkJfUkVHX0JBU0UsCi0JCS5lbmQJPSBZTDkyMDBfRkJfUkVHX0JBU0UgKyBTWl81MTIgLTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgdTY0IHMxZGZiX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB5bDkyMDBfczFkZmJfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzMWQxMzgwNmZiIiwKLQkuaWQJCT0gLTEsCi0JLmRldgk9IHsKLQkJLmRtYV9tYXNrCQk9ICZzMWRmYl9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotCQkucGxhdGZvcm1fZGF0YQkJPSAmeWw5MjAwX3MxZGZiX3BkYXRhLAotCX0sCi0JLnJlc291cmNlCT0geWw5MjAwX3MxZGZiX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh5bDkyMDBfczFkZmJfcmVzb3VyY2UpLAotfTsKLQotdm9pZCBfX2luaXQgeWw5MjAwX2FkZF9kZXZpY2VfdmlkZW8odm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnlsOTIwMF9zMWRmYl9kZXZpY2UpOwotfQotI2Vsc2UKLXZvaWQgX19pbml0IHlsOTIwMF9hZGRfZGV2aWNlX3ZpZGVvKHZvaWQpIHt9Ci0jZW5kaWYKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgeWw5MjAwX2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiBTZXJpYWwgKi8KLQkvKiBEQkdVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKLQotCS8qIFVTQVJUMSBvbiB0dHlTMS4gKFJ4LCBUeCwgQ1RTLCBSVFMsIERUUiwgRFNSLCBEQ0QsIFJJKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMSwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUwotCQkJfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKLQkJCXwgQVRNRUxfVUFSVF9SSSk7Ci0KLQkvKiBVU0FSVDAgb24gdHR5UzIuIChSeCAmIFR4IG9ubHkgdG8gSlAzKSAqLwotCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMCwgMiwgMCk7Ci0KLQkvKiBVU0FSVDMgb24gdHR5UzMuIChSeCwgVHgsIFJUUyAtIFJTNDg1IGludGVyZmFjZSkgKi8KLQlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzMsIDMsIEFUTUVMX1VBUlRfUlRTKTsKLQlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7Ci0JLyogRXRoZXJuZXQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfZXRoKCZ5bDkyMDBfZXRoX2RhdGEpOwotCS8qIFVTQiBIb3N0ICovCi0JYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJnlsOTIwMF91c2JoX2RhdGEpOwotCS8qIFVTQiBEZXZpY2UgKi8KLQlhdDkxX2FkZF9kZXZpY2VfdWRjKCZ5bDkyMDBfdWRjX2RhdGEpOwotCS8qIEkyQyAqLwotCWF0OTFfYWRkX2RldmljZV9pMmMoeWw5MjAwX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKHlsOTIwMF9pMmNfZGV2aWNlcykpOwotCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tY2koMCwgJnlsOTIwMF9tY2kwX2RhdGEpOwotCS8qIE5BTkQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmeWw5MjAwX25hbmRfZGF0YSk7Ci0JLyogTk9SIEZsYXNoICovCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ5bDkyMDBfZmxhc2gpOwotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKLQkvKiBTUEkgKi8KLQlhdDkxX2FkZF9kZXZpY2Vfc3BpKHlsOTIwMF9zcGlfZGV2aWNlcywgQVJSQVlfU0laRSh5bDkyMDBfc3BpX2RldmljZXMpKTsKLQkvKiBUb3VjaHNjcmVlbiAqLwotCXlsOTIwMF9hZGRfZGV2aWNlX3RzKCk7Ci0jZW5kaWYKLQkvKiBMRURzLiAqLwotCWF0OTFfZ3Bpb19sZWRzKHlsOTIwMF9sZWRzLCBBUlJBWV9TSVpFKHlsOTIwMF9sZWRzKSk7Ci0JLyogUHVzaCBCdXR0b25zICovCi0JeWw5MjAwX2FkZF9kZXZpY2VfYnV0dG9ucygpOwotCS8qIFZHQSAqLwotCXlsOTIwMF9hZGRfZGV2aWNlX3ZpZGVvKCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoWUw5MjAwLCAidUNkcmFnb24gWUwtOTIwMCIpCi0JLyogTWFpbnRhaW5lcjogUy5CaXJ0bGVzICovCi0JLmluaXRfdGltZQk9IGF0OTFybTkyMDBfdGltZXJfaW5pdCwKLQkubWFwX2lvCQk9IGF0OTFfbWFwX2lvLAotCS5oYW5kbGVfaXJxCT0gYXQ5MV9haWNfaGFuZGxlX2lycSwKLQkuaW5pdF9lYXJseQk9IHlsOTIwMF9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCwKLQkuaW5pdF9tYWNoaW5lCT0geWw5MjAwX2JvYXJkX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM2ZTlhNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBIUCBMYWJzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgZGF0YSBzdHJ1Y3R1cmVzIGZvdW5kIGluIHBsYXRmb3JtX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSwKLSAqIGFuZCBkZXNjcmliaW5nIGJvYXJkLXNwZWNpZmljIGRhdGEgbmVlZGVkIGJ5IGRyaXZlcnMuICBGb3IgZXhhbXBsZSwKLSAqIHdoaWNoIHBpbiBpcyB1c2VkIGZvciBhIGdpdmVuIEdQSU8gcm9sZS4KLSAqCi0gKiBJbiAyLjYsIGRyaXZlcnMgc2hvdWxkIHN0cm9uZ2x5IGF2b2lkIGJvYXJkLXNwZWNpZmljIGtub3dsZWRnZSBzbwotICogdGhhdCBzdXBwb3J0aW5nIG5ldyBib2FyZHMgbm9ybWFsbHkgd29uJ3QgcmVxdWlyZSBkcml2ZXIgcGF0Y2hlcy4KLSAqIE1vc3QgYm9hcmQtc3BlY2lmaWMga25vd2xlZGdlIHNob3VsZCBiZSBpbiBhcmNoLy4uLi9ib2FyZC0qLmMgZmlsZXMuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0JPQVJEX0gKLSNkZWZpbmUgX19BU01fQVJDSF9CT0FSRF9ICi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0bWVsLmg+Ci0KLSAvKiBVU0IgRGV2aWNlICovCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VkYyhzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSAqZGF0YSk7Ci0KLSAvKiBVU0IgSGlnaCBTcGVlZCBEZXZpY2UgKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiYShzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhICpkYXRhKTsKLQotIC8qIENvbXBhY3QgRmxhc2ggKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfY2Yoc3RydWN0IGF0OTFfY2ZfZGF0YSAqZGF0YSk7Ci0KLSAvKiBNTUMgLyBTRCAqLwotICAvKiBhdG1lbC1tY2kgcGxhdGZvcm0gY29uZmlnICovCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21jaShzaG9ydCBtbWNfaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSk7Ci0KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgKmRhdGEpOwotCi0gLyogVVNCIEhvc3QgKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpOwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoX29oY2koc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9laGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSk7Ci0KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKTsKLQotIC8qIEkyQyovCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUc0NSkKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcyk7Ci0jZWxzZQotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcyk7Ci0jZW5kaWYKLQotIC8qIFNQSSAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcyk7Ci0KLSAvKiBTZXJpYWwgKi8KLSNkZWZpbmUgQVRNRUxfVUFSVF9DVFMJMHgwMQotI2RlZmluZSBBVE1FTF9VQVJUX1JUUwkweDAyCi0jZGVmaW5lIEFUTUVMX1VBUlRfRFNSCTB4MDQKLSNkZWZpbmUgQVRNRUxfVUFSVF9EVFIJMHgwOAotI2RlZmluZSBBVE1FTF9VQVJUX0RDRAkweDEwCi0jZGVmaW5lIEFUTUVMX1VBUlRfUkkJMHgyMAotCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpOwotCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZTsKLQotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCk7Ci0KLS8qCi0gKiBQV00KLSAqLwotI2RlZmluZSBBVDkxX1BXTTAJMAotI2RlZmluZSBBVDkxX1BXTTEJMQotI2RlZmluZSBBVDkxX1BXTTIJMgotI2RlZmluZSBBVDkxX1BXTTMJMwotCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3B3bSh1MzIgbWFzayk7Ci0KLS8qCi0gKiBTU0MgLS0gYWNjZXNzZWQgdGhyb3VnaCBzc2NfcmVxdWVzdChpZCkuICBEcml2ZXJzIGRvbid0IGJpbmQgdG8gU1NDCi0gKiBwbGF0Zm9ybSBkZXZpY2VzLiAgVGhlaXIgU1NDIElEIGlzIHBhcnQgb2YgdGhlaXIgY29uZmlndXJhdGlvbiBkYXRhLAotICogYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBTU0Mgc2lnbmFscyB0aGV5IHNob3VsZCB1c2UuCi0gKi8KLSNkZWZpbmUgQVRNRUxfU1NDX1RLCTB4MDEKLSNkZWZpbmUgQVRNRUxfU1NDX1RGCTB4MDIKLSNkZWZpbmUgQVRNRUxfU1NDX1RECTB4MDQKLSNkZWZpbmUgQVRNRUxfU1NDX1RYCShBVE1FTF9TU0NfVEsgfCBBVE1FTF9TU0NfVEYgfCBBVE1FTF9TU0NfVEQpCi0KLSNkZWZpbmUgQVRNRUxfU1NDX1JLCTB4MTAKLSNkZWZpbmUgQVRNRUxfU1NDX1JGCTB4MjAKLSNkZWZpbmUgQVRNRUxfU1NDX1JECTB4NDAKLSNkZWZpbmUgQVRNRUxfU1NDX1JYCShBVE1FTF9TU0NfUksgfCBBVE1FTF9TU0NfUkYgfCBBVE1FTF9TU0NfUkQpCi0KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwaW5zKTsKLQotIC8qIExDRCBDb250cm9sbGVyICovCi1zdHJ1Y3QgYXRtZWxfbGNkZmJfcGRhdGE7Ci1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX3BkYXRhICpkYXRhKTsKLQotIC8qIEFDOTcgKi8KLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSk7Ci0KLSAvKiBJU0kgKi8KLXN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaXNpKHN0cnVjdCBpc2lfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJYm9vbCB1c2VfcGNrX2FzX21jayk7Ci0KLS8qIENBTiAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jYW4oc3RydWN0IGF0OTFfY2FuX2RhdGEgKmRhdGEpOwotCi0gLyogTEVEcyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfZ3Bpb19sZWRzKHN0cnVjdCBncGlvX2xlZCAqbGVkcywgaW50IG5yKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjZmMTAyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsOTc3ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAotICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsvYXQ5MV9wbWMuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0KLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImdlbmVyaWMuaCIKLQotdm9pZCBfX2lvbWVtICphdDkxX3BtY19iYXNlOwotRVhQT1JUX1NZTUJPTF9HUEwoYXQ5MV9wbWNfYmFzZSk7Ci0KLS8qCi0gKiBUaGVyZSdzIGEgbG90IG1vcmUgd2hpY2ggY2FuIGJlIGRvbmUgd2l0aCBjbG9ja3MsIGluY2x1ZGluZyBjcHVmcmVxCi0gKiBpbnRlZ3JhdGlvbiwgc2xvdyBjbG9jayBtb2RlIHN1cHBvcnQgKGZvciBzeXN0ZW0gc3VzcGVuZCksIGxldHRpbmcKLSAqIFBMTEIgYmUgdXNlZCBhdCBvdGhlciByYXRlcyAob24gYm9hcmRzIHRoYXQgZG9uJ3QgbmVlZCBVU0IpLCBldGMuCi0gKi8KLQotI2RlZmluZSBjbGtfaXNfcHJpbWFyeSh4KQkoKHgpLT50eXBlICYgQ0xLX1RZUEVfUFJJTUFSWSkKLSNkZWZpbmUgY2xrX2lzX3Byb2dyYW1tYWJsZSh4KQkoKHgpLT50eXBlICYgQ0xLX1RZUEVfUFJPR1JBTU1BQkxFKQotI2RlZmluZSBjbGtfaXNfcGVyaXBoZXJhbCh4KQkoKHgpLT50eXBlICYgQ0xLX1RZUEVfUEVSSVBIRVJBTCkKLSNkZWZpbmUgY2xrX2lzX3N5cyh4KQkJKCh4KS0+dHlwZSAmIENMS19UWVBFX1NZU1RFTSkKLQotCi0vKgotICogQ2hpcHMgaGF2ZSBzb21lIGtpbmQgb2YgY2xvY2tzIDogZ3JvdXAgdGhlbSBieSBmdW5jdGlvbmFsaXR5Ci0gKi8KLSNkZWZpbmUgY3B1X2hhc191dG1pKCkJCSggIGNwdV9pc19hdDkxc2FtOXJsKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKQotCi0jZGVmaW5lIGNwdV9oYXNfMTA1Nk1fcGxsYSgpCShjcHVfaXNfc2FtYTVkMygpKQotCi0jZGVmaW5lIGNwdV9oYXNfODAwTV9wbGxhKCkJKCAgY3B1X2lzX2F0OTFzYW05ZzIwKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTluMTIoKSkKLQotI2RlZmluZSBjcHVfaGFzXzMwME1fcGxsYSgpCShjcHVfaXNfYXQ5MXNhbTlnMTAoKSkKLQotI2RlZmluZSBjcHVfaGFzXzI0ME1fcGxsYSgpCShjcHVfaXNfYXQ5MXNhbTkyNjEoKSBcCi0JCQkJfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXJsKCkpCi0KLSNkZWZpbmUgY3B1X2hhc18yMTBNX3BsbGEoKQkoY3B1X2lzX2F0OTFzYW05MjYwKCkpCi0KLSNkZWZpbmUgY3B1X2hhc19wbGxiKCkJCSghKGNwdV9pc19hdDkxc2FtOXJsKCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKSkKLQotI2RlZmluZSBjcHVfaGFzX3VwbGwoKQkJKGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKQotCi0vKiBVU0IgaG9zdCBIUyAmIEZTICovCi0jZGVmaW5lIGNwdV9oYXNfdWhwKCkJCSghY3B1X2lzX2F0OTFzYW05cmwoKSkKLQotLyogVVNCIGRldmljZSBGUyBvbmx5ICovCi0jZGVmaW5lIGNwdV9oYXNfdWRwZnMoKQkJKCEoY3B1X2lzX2F0OTFzYW05cmwoKSBcCi0JCQkJfHwgY3B1X2lzX2F0OTFzYW05ZzQ1KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXg1KCkgXAotCQkJCXx8IGNwdV9pc19zYW1hNWQzKCkpKQotCi0jZGVmaW5lIGNwdV9oYXNfcGxsYWRpdjIoKQkoY3B1X2lzX2F0OTFzYW05ZzQ1KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXg1KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOW4xMigpIFwKLQkJCQl8fCBjcHVfaXNfc2FtYTVkMygpKQotCi0jZGVmaW5lIGNwdV9oYXNfbWRpdjMoKQkJKGNwdV9pc19hdDkxc2FtOWc0NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTl4NSgpIFwKLQkJCQl8fCBjcHVfaXNfYXQ5MXNhbTluMTIoKSBcCi0JCQkJfHwgY3B1X2lzX3NhbWE1ZDMoKSkKLQotI2RlZmluZSBjcHVfaGFzX2FsdF9wcmVzY2FsZXIoKQkoY3B1X2lzX2F0OTFzYW05eDUoKSBcCi0JCQkJfHwgY3B1X2lzX2F0OTFzYW05bjEyKCkgXAotCQkJCXx8IGNwdV9pc19zYW1hNWQzKCkpCi0KLXN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xrX2xvY2spOwotCi1zdGF0aWMgdTMyIGF0OTFfcGxsYl91c2JfaW5pdDsKLQotLyoKLSAqIEZvdXIgcHJpbWFyeSBjbG9jayBzb3VyY2VzOiAgdHdvIGNyeXN0YWwgb3NjaWxsYXRvcnMgKDMySywgbWFpbiksIGFuZAotICogdHdvIFBMTHMuICBQTExBIHVzdWFsbHkgcnVucyB0aGUgbWFzdGVyIGNsb2NrOyBhbmQgUExMQiBtdXN0IHJ1biBhdAotICogNDggTUh6ICh1bmxlc3Mgbm8gVVNCIGZ1bmN0aW9uIGNsb2NrcyBhcmUgbmVlZGVkKS4gIFRoZSBtYWluIGNsb2NrIGFuZAotICogYm90aCBQTExzIGFyZSB0dXJuZWQgb2ZmIHRvIHJ1biBpbiAic2xvdyBjbG9jayBtb2RlIiAoc3lzdGVtIHN1c3BlbmQpLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBjbGszMmsgPSB7Ci0JLm5hbWUJCT0gImNsazMyayIsCi0JLnJhdGVfaHoJPSBBVDkxX1NMT1dfQ0xPQ0ssCi0JLnVzZXJzCQk9IDEsCQkvKiBhbHdheXMgb24gKi8KLQkuaWQJCT0gMCwKLQkudHlwZQkJPSBDTEtfVFlQRV9QUklNQVJZLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1haW5fY2xrID0gewotCS5uYW1lCQk9ICJtYWluIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19NT1NDUywJLyogaW4gUE1DX1NSICovCi0JLmlkCQk9IDEsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJJTUFSWSwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwbGxhID0gewotCS5uYW1lCQk9ICJwbGxhIiwKLQkucGFyZW50CQk9ICZtYWluX2NsaywKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19MT0NLQSwJLyogaW4gUE1DX1NSICovCi0JLmlkCQk9IDIsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUFJJTUFSWSB8IENMS19UWVBFX1BMTCwKLX07Ci0KLXN0YXRpYyB2b2lkIHBsbGJfbW9kZShzdHJ1Y3QgY2xrICpjbGssIGludCBpc19vbikKLXsKLQl1MzIJdmFsdWU7Ci0KLQlpZiAoaXNfb24pIHsKLQkJaXNfb24gPSBBVDkxX1BNQ19MT0NLQjsKLQkJdmFsdWUgPSBhdDkxX3BsbGJfdXNiX2luaXQ7Ci0JfSBlbHNlCi0JCXZhbHVlID0gMDsKLQotCS8vIFJFVklTSVQ6IEFkZCB3b3JrLWFyb3VuZCBmb3IgQVQ5MVJNOTIwMCBFcnJhdGEgIzI2ID8KLQlhdDkxX3BtY193cml0ZShBVDkxX0NLR1JfUExMQlIsIHZhbHVlKTsKLQotCWRvIHsKLQkJY3B1X3JlbGF4KCk7Ci0JfSB3aGlsZSAoKGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfU1IpICYgQVQ5MV9QTUNfTE9DS0IpICE9IGlzX29uKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgcGxsYiA9IHsKLQkubmFtZQkJPSAicGxsYiIsCi0JLnBhcmVudAkJPSAmbWFpbl9jbGssCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfTE9DS0IsCS8qIGluIFBNQ19TUiAqLwotCS5tb2RlCQk9IHBsbGJfbW9kZSwKLQkuaWQJCT0gMywKLQkudHlwZQkJPSBDTEtfVFlQRV9QUklNQVJZIHwgQ0xLX1RZUEVfUExMLAotfTsKLQotc3RhdGljIHZvaWQgcG1jX3N5c19tb2RlKHN0cnVjdCBjbGsgKmNsaywgaW50IGlzX29uKQotewotCWlmIChpc19vbikKLQkJYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgY2xrLT5wbWNfbWFzayk7Ci0JZWxzZQotCQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19TQ0RSLCBjbGstPnBtY19tYXNrKTsKLX0KLQotc3RhdGljIHZvaWQgcG1jX3Vja3JfbW9kZShzdHJ1Y3QgY2xrICpjbGssIGludCBpc19vbikKLXsKLQl1bnNpZ25lZCBpbnQgdWNrciA9IGF0OTFfcG1jX3JlYWQoQVQ5MV9DS0dSX1VDS1IpOwotCi0JaWYgKGlzX29uKSB7Ci0JCWlzX29uID0gQVQ5MV9QTUNfTE9DS1U7Ci0JCWF0OTFfcG1jX3dyaXRlKEFUOTFfQ0tHUl9VQ0tSLCB1Y2tyIHwgY2xrLT5wbWNfbWFzayk7Ci0JfSBlbHNlCi0JCWF0OTFfcG1jX3dyaXRlKEFUOTFfQ0tHUl9VQ0tSLCB1Y2tyICYgfihjbGstPnBtY19tYXNrKSk7Ci0KLQlkbyB7Ci0JCWNwdV9yZWxheCgpOwotCX0gd2hpbGUgKChhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1NSKSAmIEFUOTFfUE1DX0xPQ0tVKSAhPSBpc19vbik7Ci19Ci0KLS8qIFVTQiBmdW5jdGlvbiBjbG9ja3MgKFBMTEIgbXVzdCBiZSA0OCBNSHopICovCi1zdGF0aWMgc3RydWN0IGNsayB1ZHBjayA9IHsKLQkubmFtZQkJPSAidWRwY2siLAotCS5wYXJlbnQJCT0gJnBsbGIsCi0JLm1vZGUJCT0gcG1jX3N5c19tb2RlLAotfTsKLXN0cnVjdCBjbGsgdXRtaV9jbGsgPSB7Ci0JLm5hbWUJCT0gInV0bWlfY2xrIiwKLQkucGFyZW50CQk9ICZtYWluX2NsaywKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19VUExMRU4sCS8qIGluIENLR1JfVUNLUiAqLwotCS5tb2RlCQk9IHBtY191Y2tyX21vZGUsCi0JLnR5cGUJCT0gQ0xLX1RZUEVfUExMLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVocGNrID0gewotCS5uYW1lCQk9ICJ1aHBjayIsCi0JLyoucGFyZW50CQk9IC4uLiB3ZSBjaG9vc2UgcGFyZW50IGF0IHJ1bnRpbWUgKi8KLQkubW9kZQkJPSBwbWNfc3lzX21vZGUsCi19OwotCi0KLS8qCi0gKiBUaGUgbWFzdGVyIGNsb2NrIGlzIGRpdmlkZWQgZnJvbSB0aGUgQ1BVIGNsb2NrIChieSAxLTQpLiAgSXQncyB1c2VkIGZvcgotICogbWVtb3J5LCBpbnRlcmZhY2VzIHRvIG9uLWNoaXAgcGVyaXBoZXJhbHMsIHRoZSBBSUMsIGFuZCBzb21ldGltZXMgbW9yZQotICogKGUuZyBiYXVkIHJhdGUgZ2VuZXJhdGlvbikuICBJdCdzIHNvdXJjZWQgZnJvbSBvbmUgb2YgdGhlIHByaW1hcnkgY2xvY2tzLgotICovCi1zdHJ1Y3QgY2xrIG1jayA9IHsKLQkubmFtZQkJPSAibWNrIiwKLQkucG1jX21hc2sJPSBBVDkxX1BNQ19NQ0tSRFksCS8qIGluIFBNQ19TUiAqLwotfTsKLQotc3RhdGljIHZvaWQgcG1jX3BlcmlwaF9tb2RlKHN0cnVjdCBjbGsgKmNsaywgaW50IGlzX29uKQotewotCXUzMiByZWd2YWwgPSAwOwotCi0JLyoKLQkgKiBXaXRoIHNhbWE1ZDMgZGV2aWNlcywgd2UgYXJlIG1hbmFnaW5nIGNsb2NrIGRpdmlzaW9uIHNvIHdlIGhhdmUgdG8KLQkgKiB1c2UgdGhlIFBlcmlwaGVyYWwgQ29udHJvbCBSZWdpc3RlciBpbnRyb2R1Y2VkIGZyb20gYXQ5MXNhbTl4NQotCSAqIGRldmljZXMuCi0JICovCi0JaWYgKGNwdV9pc19zYW1hNWQzKCkpIHsKLQkJcmVndmFsIHw9IEFUOTFfUE1DX1BDUl9DTUQ7IC8qIHdyaXRlIGNvbW1hbmQgKi8KLQkJcmVndmFsIHw9IGNsay0+cGlkICYgQVQ5MV9QTUNfUENSX1BJRDsgLyogcGVyaXBoZXJhbCBzZWxlY3Rpb24gKi8KLQkJcmVndmFsIHw9IEFUOTFfUE1DX1BDUl9ESVYoY2xrLT5kaXYpOwotCQlpZiAoaXNfb24pCi0JCQlyZWd2YWwgfD0gQVQ5MV9QTUNfUENSX0VOOyAvKiBlbmFibGUgY2xvY2sgKi8KLQkJYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfUENSLCByZWd2YWwpOwotCX0gZWxzZSB7Ci0JCWlmIChpc19vbikKLQkJCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1BDRVIsIGNsay0+cG1jX21hc2spOwotCQllbHNlCi0JCQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19QQ0RSLCBjbGstPnBtY19tYXNrKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIF9faW5pdCAqYXQ5MV9jc3NfdG9fY2xrKHVuc2lnbmVkIGxvbmcgY3NzKQotewotCXN3aXRjaCAoY3NzKSB7Ci0JCWNhc2UgQVQ5MV9QTUNfQ1NTX1NMT1c6Ci0JCQlyZXR1cm4gJmNsazMyazsKLQkJY2FzZSBBVDkxX1BNQ19DU1NfTUFJTjoKLQkJCXJldHVybiAmbWFpbl9jbGs7Ci0JCWNhc2UgQVQ5MV9QTUNfQ1NTX1BMTEE6Ci0JCQlyZXR1cm4gJnBsbGE7Ci0JCWNhc2UgQVQ5MV9QTUNfQ1NTX1BMTEI6Ci0JCQlpZiAoY3B1X2hhc191cGxsKCkpCi0JCQkJLyogQ1NTX1BMTEIgPT0gQ1NTX1VQTEwgKi8KLQkJCQlyZXR1cm4gJnV0bWlfY2xrOwotCQkJZWxzZSBpZiAoY3B1X2hhc19wbGxiKCkpCi0JCQkJcmV0dXJuICZwbGxiOwotCQkJYnJlYWs7Ci0JCS8qIGFsdGVybmF0ZSBQTUM6IGNhbiB1c2UgbWFzdGVyIGNsb2NrICovCi0JCWNhc2UgQVQ5MV9QTUNfQ1NTX01BU1RFUjoKLQkJCXJldHVybiAmbWNrOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IHBtY19wcmVzY2FsZXJfZGl2aWRlcih1MzIgcmVnKQotewotCWlmIChjcHVfaGFzX2FsdF9wcmVzY2FsZXIoKSkgewotCQlyZXR1cm4gMSA8PCAoKHJlZyAmIEFUOTFfUE1DX0FMVF9QUkVTKSA+PiBQTUNfQUxUX1BSRVNfT0ZGU0VUKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gMSA8PCAoKHJlZyAmIEFUOTFfUE1DX1BSRVMpID4+IFBNQ19QUkVTX09GRlNFVCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGstPnBhcmVudCkKLQkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKLQlpZiAoY2xrLT51c2VycysrID09IDAgJiYgY2xrLT5tb2RlKQotCQljbGstPm1vZGUoY2xrLCAxKTsKLX0KLQotaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKLQlfX2Nsa19lbmFibGUoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKLQotc3RhdGljIHZvaWQgX19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JQlVHX09OKGNsay0+dXNlcnMgPT0gMCk7Ci0JaWYgKC0tY2xrLT51c2VycyA9PSAwICYmIGNsay0+bW9kZSkKLQkJY2xrLT5tb2RlKGNsaywgMCk7Ci0JaWYgKGNsay0+cGFyZW50KQotCQlfX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLX0KLQotdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOwotCV9fY2xrX2Rpc2FibGUoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7Ci0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCXVuc2lnbmVkIGxvbmcJcmF0ZTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOwotCWZvciAoOzspIHsKLQkJcmF0ZSA9IGNsay0+cmF0ZV9oejsKLQkJaWYgKHJhdGUgfHwgIWNsay0+cGFyZW50KQotCQkJYnJlYWs7Ci0JCWNsayA9IGNsay0+cGFyZW50OwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotCXJldHVybiByYXRlOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qCi0gKiBGb3Igbm93LCBvbmx5IHRoZSBwcm9ncmFtbWFibGUgY2xvY2tzIHN1cHBvcnQgcmVwYXJlbnRpbmcgKE1DSyBjb3VsZAotICogZG8gdGhpcyB0b28sIHdpdGggY2FyZSkgb3IgcmF0ZSBjaGFuZ2luZyAodGhlIFBMTHMgY291bGQgZG8gdGhpcyB0b28sCi0gKiBkaXR0byBNQ0sgYnV0IHRoYXQncyBtb3JlIGZvciBjcHVmcmVxKS4gIERyaXZlcnMgbWF5IHJlcGFyZW50IHRvIGdldAotICogYSBiZXR0ZXIgcmF0ZSBtYXRjaDsgd2UgZG9uJ3QuCi0gKi8KLQotbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCXVuc2lnbmVkCXByZXNjYWxlOwotCXVuc2lnbmVkIGxvbmcJYWN0dWFsOwotCXVuc2lnbmVkIGxvbmcJcHJldiA9IFVMT05HX01BWDsKLQotCWlmICghY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKLQotCWFjdHVhbCA9IGNsay0+cGFyZW50LT5yYXRlX2h6OwotCWZvciAocHJlc2NhbGUgPSAwOyBwcmVzY2FsZSA8IDc7IHByZXNjYWxlKyspIHsKLQkJaWYgKGFjdHVhbCA+IHJhdGUpCi0JCQlwcmV2ID0gYWN0dWFsOwotCi0JCWlmIChhY3R1YWwgJiYgYWN0dWFsIDw9IHJhdGUpIHsKLQkJCWlmICgocHJldiAtIHJhdGUpIDwgKHJhdGUgLSBhY3R1YWwpKSB7Ci0JCQkJYWN0dWFsID0gcHJldjsKLQkJCQlwcmVzY2FsZS0tOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJYWN0dWFsID4+PSAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIChwcmVzY2FsZSA8IDcpID8gYWN0dWFsIDogLUVOT0VOVDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOwotCi1pbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0JdW5zaWduZWQJcHJlc2NhbGU7Ci0JdW5zaWduZWQgbG9uZwlwcmVzY2FsZV9vZmZzZXQsIGNzc19tYXNrOwotCXVuc2lnbmVkIGxvbmcJYWN0dWFsOwotCi0JaWYgKCFjbGtfaXNfcHJvZ3JhbW1hYmxlKGNsaykpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChjbGstPnVzZXJzKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKGNwdV9oYXNfYWx0X3ByZXNjYWxlcigpKSB7Ci0JCXByZXNjYWxlX29mZnNldCA9IFBNQ19BTFRfUFJFU19PRkZTRVQ7Ci0JCWNzc19tYXNrID0gQVQ5MV9QTUNfQUxUX1BDS1JfQ1NTOwotCX0gZWxzZSB7Ci0JCXByZXNjYWxlX29mZnNldCA9IFBNQ19QUkVTX09GRlNFVDsKLQkJY3NzX21hc2sgPSBBVDkxX1BNQ19DU1M7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7Ci0KLQlhY3R1YWwgPSBjbGstPnBhcmVudC0+cmF0ZV9oejsKLQlmb3IgKHByZXNjYWxlID0gMDsgcHJlc2NhbGUgPCA3OyBwcmVzY2FsZSsrKSB7Ci0JCWlmIChhY3R1YWwgJiYgYWN0dWFsIDw9IHJhdGUpIHsKLQkJCXUzMglwY2tyOwotCi0JCQlwY2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19QQ0tSKGNsay0+aWQpKTsKLQkJCXBja3IgJj0gY3NzX21hc2s7CS8qIGtlZXAgY2xvY2sgc2VsZWN0aW9uICovCi0JCQlwY2tyIHw9IHByZXNjYWxlIDw8IHByZXNjYWxlX29mZnNldDsKLQkJCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1BDS1IoY2xrLT5pZCksIHBja3IpOwotCQkJY2xrLT5yYXRlX2h6ID0gYWN0dWFsOwotCQkJYnJlYWs7Ci0JCX0KLQkJYWN0dWFsID4+PSAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIChwcmVzY2FsZSA8IDcpID8gYWN0dWFsIDogLUVOT0VOVDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKLQotc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGstPnBhcmVudDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOwotCi1pbnQgY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotCWlmIChjbGstPnVzZXJzKQotCQlyZXR1cm4gLUVCVVNZOwotCWlmICghY2xrX2lzX3ByaW1hcnkocGFyZW50KSB8fCAhY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjcHVfaXNfYXQ5MXNhbTlybCgpICYmIHBhcmVudC0+aWQgPT0gQVQ5MV9QTUNfQ1NTX1BMTEIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7Ci0KLQljbGstPnJhdGVfaHogPSBwYXJlbnQtPnJhdGVfaHo7Ci0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0JYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfUENLUihjbGstPmlkKSwgcGFyZW50LT5pZCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7Ci0KLS8qIGVzdGFibGlzaCBQQ0swLi5QQ0tOIHBhcmVudGFnZSBhbmQgcmF0ZSAqLwotc3RhdGljIHZvaWQgX19pbml0IGluaXRfcHJvZ3JhbW1hYmxlX2Nsb2NrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlzdHJ1Y3QgY2xrCSpwYXJlbnQ7Ci0JdTMyCQlwY2tyOwotCXVuc2lnbmVkIGludAljc3NfbWFzazsKLQotCWlmIChjcHVfaGFzX2FsdF9wcmVzY2FsZXIoKSkKLQkJY3NzX21hc2sgPSBBVDkxX1BNQ19BTFRfUENLUl9DU1M7Ci0JZWxzZQotCQljc3NfbWFzayA9IEFUOTFfUE1DX0NTUzsKLQotCXBja3IgPSBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1BDS1IoY2xrLT5pZCkpOwotCXBhcmVudCA9IGF0OTFfY3NzX3RvX2NsayhwY2tyICYgY3NzX21hc2spOwotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCWNsay0+cmF0ZV9oeiA9IHBhcmVudC0+cmF0ZV9oeiAvIHBtY19wcmVzY2FsZXJfZGl2aWRlcihwY2tyKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0KLXN0YXRpYyBpbnQgYXQ5MV9jbGtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKLXsKLQl1MzIJCXNjc3IsIHBjc3IsIHBjc3IxID0gMCwgdWNrciA9IDAsIHNyOwotCXN0cnVjdCBjbGsJKmNsazsKLQotCXNjc3IgPSBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1NDU1IpOwotCXBjc3IgPSBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX1BDU1IpOwotCWlmIChjcHVfaXNfc2FtYTVkMygpKQotCQlwY3NyMSA9IGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfUENTUjEpOwotCXNyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19TUik7Ci0Jc2VxX3ByaW50ZihzLCAiU0NTUiA9ICU4eFxuIiwgc2Nzcik7Ci0Jc2VxX3ByaW50ZihzLCAiUENTUiA9ICU4eFxuIiwgcGNzcik7Ci0JaWYgKGNwdV9pc19zYW1hNWQzKCkpCi0JCXNlcV9wcmludGYocywgIlBDU1IxID0gJTh4XG4iLCBwY3NyMSk7Ci0Jc2VxX3ByaW50ZihzLCAiTU9SICA9ICU4eFxuIiwgYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfTU9SKSk7Ci0Jc2VxX3ByaW50ZihzLCAiTUNGUiA9ICU4eFxuIiwgYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfTUNGUikpOwotCXNlcV9wcmludGYocywgIlBMTEEgPSAlOHhcbiIsIGF0OTFfcG1jX3JlYWQoQVQ5MV9DS0dSX1BMTEFSKSk7Ci0JaWYgKGNwdV9oYXNfcGxsYigpKQotCQlzZXFfcHJpbnRmKHMsICJQTExCID0gJTh4XG4iLCBhdDkxX3BtY19yZWFkKEFUOTFfQ0tHUl9QTExCUikpOwotCWlmIChjcHVfaGFzX3V0bWkoKSkgewotCQl1Y2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfVUNLUik7Ci0JCXNlcV9wcmludGYocywgIlVDS1IgPSAlOHhcbiIsIHVja3IpOwotCX0KLQlzZXFfcHJpbnRmKHMsICJNQ0tSID0gJTh4XG4iLCBhdDkxX3BtY19yZWFkKEFUOTFfUE1DX01DS1IpKTsKLQlpZiAoY3B1X2hhc191cGxsKCkgfHwgY3B1X2lzX2F0OTFzYW05bjEyKCkpCi0JCXNlcV9wcmludGYocywgIlVTQiAgPSAlOHhcbiIsIGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfVVNCKSk7Ci0Jc2VxX3ByaW50ZihzLCAiU1IgICA9ICU4eFxuIiwgc3IpOwotCi0Jc2VxX3ByaW50ZihzLCAiXG4iKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWNoYXIJKnN0YXRlOwotCi0JCWlmIChjbGstPm1vZGUgPT0gcG1jX3N5c19tb2RlKSB7Ci0JCQlzdGF0ZSA9IChzY3NyICYgY2xrLT5wbWNfbWFzaykgPyAib24iIDogIm9mZiI7Ci0JCX0gZWxzZSBpZiAoY2xrLT5tb2RlID09IHBtY19wZXJpcGhfbW9kZSkgewotCQkJaWYgKGNwdV9pc19zYW1hNWQzKCkpIHsKLQkJCQl1MzIgcG1jX21hc2sgPSAxIDw8IChjbGstPnBpZCAlIDMyKTsKLQotCQkJCWlmIChjbGstPnBpZCA+IDMxKQotCQkJCQlzdGF0ZSA9IChwY3NyMSAmIHBtY19tYXNrKSA/ICJvbiIgOiAib2ZmIjsKLQkJCQllbHNlCi0JCQkJCXN0YXRlID0gKHBjc3IgJiBwbWNfbWFzaykgPyAib24iIDogIm9mZiI7Ci0JCQl9IGVsc2UgewotCQkJCXN0YXRlID0gKHBjc3IgJiBjbGstPnBtY19tYXNrKSA/ICJvbiIgOiAib2ZmIjsKLQkJCX0KLQkJfSBlbHNlIGlmIChjbGstPm1vZGUgPT0gcG1jX3Vja3JfbW9kZSkgewotCQkJc3RhdGUgPSAodWNrciAmIGNsay0+cG1jX21hc2spID8gIm9uIiA6ICJvZmYiOwotCQl9IGVsc2UgaWYgKGNsay0+cG1jX21hc2spIHsKLQkJCXN0YXRlID0gKHNyICYgY2xrLT5wbWNfbWFzaykgPyAib24iIDogIm9mZiI7Ci0JCX0gZWxzZSBpZiAoY2xrID09ICZjbGszMmsgfHwgY2xrID09ICZtYWluX2NsaykgewotCQkJc3RhdGUgPSAib24iOwotCQl9IGVsc2UgewotCQkJc3RhdGUgPSAiIjsKLQkJfQotCi0JCXNlcV9wcmludGYocywgIiUtMTBzIHVzZXJzPSUyZCAlLTNzICU5bHUgSHogJXNcbiIsCi0JCQljbGstPm5hbWUsIGNsay0+dXNlcnMsIHN0YXRlLCBjbGtfZ2V0X3JhdGUoY2xrKSwKLQkJCWNsay0+cGFyZW50ID8gY2xrLT5wYXJlbnQtPm5hbWUgOiAiIik7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfY2xrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGF0OTFfY2xrX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdDkxX2Nsa19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IGF0OTFfY2xrX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfY2xrX2RlYnVnZnNfaW5pdCh2b2lkKQotewotCS8qIC9zeXMva2VybmVsL2RlYnVnL2F0OTFfY2xrICovCi0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF0OTFfY2xrIiwgU19JRlJFRyB8IFNfSVJVR08sIE5VTEwsIE5VTEwsICZhdDkxX2Nsa19vcGVyYXRpb25zKTsKLQotCXJldHVybiAwOwotfQotcG9zdGNvcmVfaW5pdGNhbGwoYXQ5MV9jbGtfZGVidWdmc19pbml0KTsKLQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogUmVnaXN0ZXIgYSBuZXcgY2xvY2sgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2Nsa19hZGQoc3RydWN0IGNsayAqY2xrKQotewotCWxpc3RfYWRkX3RhaWwoJmNsay0+bm9kZSwgJmNsb2Nrcyk7Ci0KLQljbGstPmNsLmNvbl9pZCA9IGNsay0+bmFtZTsKLQljbGstPmNsLmNsayA9IGNsazsKLQljbGtkZXZfYWRkKCZjbGstPmNsKTsKLX0KLQotaW50IF9faW5pdCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGtfaXNfcGVyaXBoZXJhbChjbGspKSB7Ci0JCWlmICghY2xrLT5wYXJlbnQpCi0JCQljbGstPnBhcmVudCA9ICZtY2s7Ci0JCWlmIChjcHVfaXNfc2FtYTVkMygpKQotCQkJY2xrLT5yYXRlX2h6ID0gRElWX1JPVU5EX1VQKGNsay0+cGFyZW50LT5yYXRlX2h6LAotCQkJCQkJICAgIDEgPDwgY2xrLT5kaXYpOwotCQljbGstPm1vZGUgPSBwbWNfcGVyaXBoX21vZGU7Ci0JfQotCWVsc2UgaWYgKGNsa19pc19zeXMoY2xrKSkgewotCQljbGstPnBhcmVudCA9ICZtY2s7Ci0JCWNsay0+bW9kZSA9IHBtY19zeXNfbW9kZTsKLQl9Ci0JZWxzZSBpZiAoY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKSB7Ci0JCWNsay0+bW9kZSA9IHBtY19zeXNfbW9kZTsKLQkJaW5pdF9wcm9ncmFtbWFibGVfY2xvY2soY2xrKTsKLQl9Ci0KLQlhdDkxX2Nsa19hZGQoY2xrKTsKLQotCXJldHVybiAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB1MzIgX19pbml0IGF0OTFfcGxsX3JhdGUoc3RydWN0IGNsayAqcGxsLCB1MzIgZnJlcSwgdTMyIHJlZykKLXsKLQl1bnNpZ25lZCBtdWwsIGRpdjsKLQotCWRpdiA9IHJlZyAmIDB4ZmY7Ci0JaWYgKGNwdV9pc19zYW1hNWQzKCkpCi0JCW11bCA9IEFUOTFfUE1DM19NVUxfR0VUKHJlZyk7Ci0JZWxzZQotCQltdWwgPSBBVDkxX1BNQ19NVUxfR0VUKHJlZyk7Ci0KLQlpZiAoZGl2ICYmIG11bCkgewotCQlmcmVxIC89IGRpdjsKLQkJZnJlcSAqPSBtdWwgKyAxOwotCX0gZWxzZQotCQlmcmVxID0gMDsKLQotCXJldHVybiBmcmVxOwotfQotCi1zdGF0aWMgdTMyIF9faW5pdCBhdDkxX3VzYl9yYXRlKHN0cnVjdCBjbGsgKnBsbCwgdTMyIGZyZXEsIHUzMiByZWcpCi17Ci0JaWYgKHBsbCA9PSAmcGxsYiAmJiAocmVnICYgQVQ5MV9QTUNfVVNCOTZNKSkKLQkJcmV0dXJuIGZyZXEgLyAyOwotCWVsc2UgaWYgKHBsbCA9PSAmdXRtaV9jbGsgfHwgY3B1X2lzX2F0OTFzYW05bjEyKCkpCi0JCXJldHVybiBmcmVxIC8gKDEgKyAoKHJlZyAmIEFUOTFfUE1DX09IQ0lVU0JESVYpID4+IDgpKTsKLQllbHNlCi0JCXJldHVybiBmcmVxOwotfQotCi1zdGF0aWMgdW5zaWduZWQgX19pbml0IGF0OTFfcGxsX2NhbGModW5zaWduZWQgbWFpbl9mcmVxLCB1bnNpZ25lZCBvdXRfZnJlcSkKLXsKLQl1bnNpZ25lZCBpLCBkaXYgPSAwLCBtdWwgPSAwLCBkaWZmID0gMSA8PCAzMDsKLQl1bnNpZ25lZCByZXQgPSAob3V0X2ZyZXEgPiAxNTUwMDAwMDApID8gMHhiZTAwIDogMHgzZTAwOwotCi0JLyogUExMIG91dHB1dCBtYXggMjQwIE1IeiAob3IgMTgwIE1IeiBwZXIgZXJyYXRhKSAqLwotCWlmIChvdXRfZnJlcSA+IDI0MDAwMDAwMCkKLQkJZ290byBmYWlsOwotCi0JZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKSB7Ci0JCWludCBkaWZmMTsKLQkJdW5zaWduZWQgaW5wdXQsIG11bDE7Ci0KLQkJLyoKLQkJICogUExMIGlucHV0IGJldHdlZW4gMU1IeiBhbmQgMzJNSHogcGVyIHNwZWMsIGJ1dCBsb3dlcgotCQkgKiBmcmVxdWVuY2VzIHNlZW0gbmVjZXNzYXJ5IGluIHNvbWUgY2FzZXMgc28gYWxsb3cgMTAwSy4KLQkJICogV2FybmluZzogc29tZSBuZXdlciBwcm9kdWN0cyBuZWVkIDJNSHogbWluLgotCQkgKi8KLQkJaW5wdXQgPSBtYWluX2ZyZXEgLyBpOwotCQlpZiAoY3B1X2lzX2F0OTFzYW05ZzIwKCkgJiYgaW5wdXQgPCAyMDAwMDAwKQotCQkJY29udGludWU7Ci0JCWlmIChpbnB1dCA8IDEwMDAwMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoaW5wdXQgPiAzMjAwMDAwMCkKLQkJCWNvbnRpbnVlOwotCi0JCW11bDEgPSBvdXRfZnJlcSAvIGlucHV0OwotCQlpZiAoY3B1X2lzX2F0OTFzYW05ZzIwKCkgJiYgbXVsID4gNjMpCi0JCQljb250aW51ZTsKLQkJaWYgKG11bDEgPiAyMDQ4KQotCQkJY29udGludWU7Ci0JCWlmIChtdWwxIDwgMikKLQkJCWdvdG8gZmFpbDsKLQotCQlkaWZmMSA9IG91dF9mcmVxIC0gaW5wdXQgKiBtdWwxOwotCQlpZiAoZGlmZjEgPCAwKQotCQkJZGlmZjEgPSAtZGlmZjE7Ci0JCWlmIChkaWZmID4gZGlmZjEpIHsKLQkJCWRpZmYgPSBkaWZmMTsKLQkJCWRpdiA9IGk7Ci0JCQltdWwgPSBtdWwxOwotCQkJaWYgKGRpZmYgPT0gMCkKLQkJCQlicmVhazsKLQkJfQotCX0KLQlpZiAoaSA9PSAyNTYgJiYgZGlmZiA+IChvdXRfZnJlcSA+PiA1KSkKLQkJZ290byBmYWlsOwotCXJldHVybiByZXQgfCAoKG11bCAtIDEpIDw8IDE2KSB8IGRpdjsKLWZhaWw6Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjb25zdCBzdGFuZGFyZF9wbWNfY2xvY2tzW10gX19pbml0Y29uc3QgPSB7Ci0JLyogZm91ciBwcmltYXJ5IGNsb2NrcyAqLwotCSZjbGszMmssCi0JJm1haW5fY2xrLAotCSZwbGxhLAotCi0JLyogTUNLICovCi0JJm1jawotfTsKLQotLyogUExMQiBnZW5lcmF0ZWQgVVNCIGZ1bGwgc3BlZWQgY2xvY2sgaW5pdCAqLwotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfcGxsYl91c2Jmc19jbG9ja19pbml0KHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JLyoKLQkgKiBVU0IgY2xvY2sgaW5pdDogIGNob29zZSA0OCBNSHogUExMQiB2YWx1ZSwKLQkgKiBkaXNhYmxlIDQ4TUh6IGNsb2NrIGR1cmluZyB1c2IgcGVyaXBoZXJhbCBzdXNwZW5kLgotCSAqCi0JICogUkVWSVNJVDogIGFzc3VtZXMgTUNLIGRvZXNuJ3QgZGVyaXZlIGZyb20gUExMQiEKLQkgKi8KLQl1aHBjay5wYXJlbnQgPSAmcGxsYjsKLQotCXJlZyA9IGF0OTFfcGxsYl91c2JfaW5pdCA9IGF0OTFfcGxsX2NhbGMobWFpbl9jbG9jaywgNDgwMDAwMDAgKiAyKTsKLQlwbGxiLnJhdGVfaHogPSBhdDkxX3BsbF9yYXRlKCZwbGxiLCBtYWluX2Nsb2NrLCBhdDkxX3BsbGJfdXNiX2luaXQpOwotCWlmIChjcHVfaXNfYXQ5MXJtOTIwMCgpKSB7Ci0JCXJlZyA9IGF0OTFfcGxsYl91c2JfaW5pdCB8PSBBVDkxX1BNQ19VU0I5Nk07Ci0JCXVocGNrLnBtY19tYXNrID0gQVQ5MVJNOTIwMF9QTUNfVUhQOwotCQl1ZHBjay5wbWNfbWFzayA9IEFUOTFSTTkyMDBfUE1DX1VEUDsKLQkJYXQ5MV9wbWNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgQVQ5MVJNOTIwMF9QTUNfTUNLVURQKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8Ci0JCSAgIGNwdV9pc19hdDkxc2FtOTI2MygpIHx8IGNwdV9pc19hdDkxc2FtOWcyMCgpIHx8Ci0JCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7Ci0JCXJlZyA9IGF0OTFfcGxsYl91c2JfaW5pdCB8PSBBVDkxX1BNQ19VU0I5Nk07Ci0JCXVocGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VIUDsKLQkJdWRwY2sucG1jX21hc2sgPSBBVDkxU0FNOTI2eF9QTUNfVURQOwotCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05bjEyKCkpIHsKLQkJLyogRGl2aWRlciBmb3IgVVNCIGNsb2NrIGlzIGluIFVTQiBjbG9jayByZWdpc3RlciBmb3IgOW4xMiAqLwotCQlyZWcgPSBBVDkxX1BNQ19VU0JTX1BMTEI7Ci0KLQkJLyogRm9yIFBMTEIgb3V0cHV0IDk2TSwgc2V0IHVzYiBkaXZpZGVyIDIgKFVTQkRJViArIDEpICovCi0JCXJlZyB8PSBBVDkxX1BNQ19PSENJVVNCRElWXzI7Ci0JCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1VTQiwgcmVnKTsKLQotCQkvKiBTdGlsbCBzZXR1cCBtYXNrcyAqLwotCQl1aHBjay5wbWNfbWFzayA9IEFUOTFTQU05MjZ4X1BNQ19VSFA7Ci0JCXVkcGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VEUDsKLQl9Ci0JYXQ5MV9wbWNfd3JpdGUoQVQ5MV9DS0dSX1BMTEJSLCAwKTsKLQotCXVkcGNrLnJhdGVfaHogPSBhdDkxX3VzYl9yYXRlKCZwbGxiLCBwbGxiLnJhdGVfaHosIHJlZyk7Ci0JdWhwY2sucmF0ZV9oeiA9IGF0OTFfdXNiX3JhdGUoJnBsbGIsIHBsbGIucmF0ZV9oeiwgcmVnKTsKLX0KLQotLyogVVBMTCBnZW5lcmF0ZWQgVVNCIGZ1bGwgc3BlZWQgY2xvY2sgaW5pdCAqLwotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfdXBsbF91c2Jmc19jbG9ja19pbml0KHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKLXsKLQkvKgotCSAqIFVTQiBjbG9jayBpbml0OiBjaG9vc2UgNDgwIE1IeiBmcm9tIFVQTEwsCi0JICovCi0JdW5zaWduZWQgaW50IHVzYnIgPSBBVDkxX1BNQ19VU0JTX1VQTEw7Ci0KLQkvKiBTZXR1cCBkaXZpZGVyIGJ5IDEwIHRvIHJlYWNoIDQ4IE1IeiAqLwotCXVzYnIgfD0gKCgxMCAtIDEpIDw8IDgpICYgQVQ5MV9QTUNfT0hDSVVTQkRJVjsKLQotCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1VTQiwgdXNicik7Ci0KLQkvKiBOb3cgc2V0IHVocGNrIHZhbHVlcyAqLwotCXVocGNrLnBhcmVudCA9ICZ1dG1pX2NsazsKLQl1aHBjay5wbWNfbWFzayA9IEFUOTFTQU05MjZ4X1BNQ19VSFA7Ci0JdWhwY2sucmF0ZV9oeiA9IGF0OTFfdXNiX3JhdGUoJnV0bWlfY2xrLCB1dG1pX2Nsay5yYXRlX2h6LCB1c2JyKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYXQ5MV9wbWNfaW5pdCh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCi17Ci0JdW5zaWduZWQgdG1wLCBmcmVxLCBtY2tyOwotCWludCBpOwotCWludCBwbGxfb3ZlcmNsb2NrID0gZmFsc2U7Ci0KLQkvKgotCSAqIFdoZW4gdGhlIGJvb3Rsb2FkZXIgaW5pdGlhbGl6ZWQgdGhlIG1haW4gb3NjaWxsYXRvciBjb3JyZWN0bHksCi0JICogdGhlcmUncyBubyBwcm9ibGVtIHVzaW5nIHRoZSBjeWNsZSBjb3VudGVyLiAgQnV0IGlmIGl0IGRpZG4ndCwKLQkgKiBvciB3aGVuIHVzaW5nIG9zY2lsbGF0b3IgYnlwYXNzIG1vZGUsIHdlIG11c3QgYmUgdG9sZCB0aGUgc3BlZWQKLQkgKiBvZiB0aGUgbWFpbiBjbG9jay4KLQkgKi8KLQlpZiAoIW1haW5fY2xvY2spIHsKLQkJZG8gewotCQkJdG1wID0gYXQ5MV9wbWNfcmVhZChBVDkxX0NLR1JfTUNGUik7Ci0JCX0gd2hpbGUgKCEodG1wICYgQVQ5MV9QTUNfTUFJTlJEWSkpOwotCQltYWluX2Nsb2NrID0gKHRtcCAmIEFUOTFfUE1DX01BSU5GKSAqIChBVDkxX1NMT1dfQ0xPQ0sgLyAxNik7Ci0JfQotCW1haW5fY2xrLnJhdGVfaHogPSBtYWluX2Nsb2NrOwotCi0JLyogcmVwb3J0IGlmIFBMTEEgaXMgbW9yZSB0aGFuIG1pbGRseSBvdmVyY2xvY2tlZCAqLwotCXBsbGEucmF0ZV9oeiA9IGF0OTFfcGxsX3JhdGUoJnBsbGEsIG1haW5fY2xvY2ssIGF0OTFfcG1jX3JlYWQoQVQ5MV9DS0dSX1BMTEFSKSk7Ci0JaWYgKGNwdV9oYXNfMTA1Nk1fcGxsYSgpKSB7Ci0JCWlmIChwbGxhLnJhdGVfaHogPiAxMDU2MDAwMDAwKQotCQkJcGxsX292ZXJjbG9jayA9IHRydWU7Ci0JfSBlbHNlIGlmIChjcHVfaGFzXzgwME1fcGxsYSgpKSB7Ci0JCWlmIChwbGxhLnJhdGVfaHogPiA4MDAwMDAwMDApCi0JCQlwbGxfb3ZlcmNsb2NrID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKGNwdV9oYXNfMzAwTV9wbGxhKCkpIHsKLQkJaWYgKHBsbGEucmF0ZV9oeiA+IDMwMDAwMDAwMCkKLQkJCXBsbF9vdmVyY2xvY2sgPSB0cnVlOwotCX0gZWxzZSBpZiAoY3B1X2hhc18yNDBNX3BsbGEoKSkgewotCQlpZiAocGxsYS5yYXRlX2h6ID4gMjQwMDAwMDAwKQotCQkJcGxsX292ZXJjbG9jayA9IHRydWU7Ci0JfSBlbHNlIGlmIChjcHVfaGFzXzIxME1fcGxsYSgpKSB7Ci0JCWlmIChwbGxhLnJhdGVfaHogPiAyMTAwMDAwMDApCi0JCQlwbGxfb3ZlcmNsb2NrID0gdHJ1ZTsKLQl9IGVsc2UgewotCQlpZiAocGxsYS5yYXRlX2h6ID4gMjA5MDAwMDAwKQotCQkJcGxsX292ZXJjbG9jayA9IHRydWU7Ci0JfQotCWlmIChwbGxfb3ZlcmNsb2NrKQotCQlwcl9pbmZvKCJDbG9ja3M6IFBMTEEgb3ZlcmNsb2NrZWQsICVsZCBNSHpcbiIsIHBsbGEucmF0ZV9oeiAvIDEwMDAwMDApOwotCi0JaWYgKGNwdV9oYXNfcGxsYWRpdjIoKSkgewotCQltY2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19NQ0tSKTsKLQkJcGxsYS5yYXRlX2h6IC89ICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX1BMTEFESVYyKSA+PiAxMikpOwkvKiBwbGxhIGRpdmlzb3IgYnkgMiAqLwotCX0KLQotCWlmICghY3B1X2hhc19wbGxiKCkgJiYgY3B1X2hhc191cGxsKCkpIHsKLQkJLyogc2V0dXAgVVRNSSBjbG9jayBhcyB0aGUgZm91cnRoIHByaW1hcnkgY2xvY2sKLQkJICogKGluc3RlYWQgb2YgcGxsYikgKi8KLQkJdXRtaV9jbGsudHlwZSB8PSBDTEtfVFlQRV9QUklNQVJZOwotCQl1dG1pX2Nsay5pZCA9IDM7Ci0JfQotCi0KLQkvKgotCSAqIFVTQiBIUyBjbG9jayBpbml0Ci0JICovCi0JaWYgKGNwdV9oYXNfdXRtaSgpKSB7Ci0JCS8qCi0JCSAqIG11bHRpcGxpZXIgaXMgaGFyZC13aXJlZCB0byA0MAotCQkgKiAob2J0YWluIHRoZSBVU0IgSGlnaCBTcGVlZCA0ODAgTUh6IHdoZW4gaW5wdXQgaXMgMTIgTUh6KQotCQkgKi8KLQkJdXRtaV9jbGsucmF0ZV9oeiA9IDQwICogdXRtaV9jbGsucGFyZW50LT5yYXRlX2h6OwotCi0JCS8qIFVUTUkgYmlhcyBhbmQgUExMIGFyZSBtYW5hZ2VkIGF0IHRoZSBzYW1lIHRpbWUgKi8KLQkJaWYgKGNwdV9oYXNfdXBsbCgpKQotCQkJdXRtaV9jbGsucG1jX21hc2sgfD0gQVQ5MV9QTUNfQklBU0VOOwotCX0KLQotCS8qCi0JICogVVNCIEZTIGNsb2NrIGluaXQKLQkgKi8KLQlpZiAoY3B1X2hhc19wbGxiKCkpCi0JCWF0OTFfcGxsYl91c2Jmc19jbG9ja19pbml0KG1haW5fY2xvY2spOwotCWlmIChjcHVfaGFzX3VwbGwoKSkKLQkJLyogYXNzdW1lcyB0aGF0IHdlIGNob29zZSBVUExMIGZvciBVU0IgYW5kIG5vdCBQTExBICovCi0JCWF0OTFfdXBsbF91c2Jmc19jbG9ja19pbml0KG1haW5fY2xvY2spOwotCi0JLyoKLQkgKiBNQ0sgYW5kIENQVSBkZXJpdmUgZnJvbSBvbmUgb2YgdGhvc2UgcHJpbWFyeSBjbG9ja3MuCi0JICogRm9yIG5vdywgYXNzdW1lIHRoaXMgcGFyZW50YWdlIHdvbid0IGNoYW5nZS4KLQkgKi8KLQltY2tyID0gYXQ5MV9wbWNfcmVhZChBVDkxX1BNQ19NQ0tSKTsKLQltY2sucGFyZW50ID0gYXQ5MV9jc3NfdG9fY2xrKG1ja3IgJiBBVDkxX1BNQ19DU1MpOwotCWZyZXEgPSBtY2sucGFyZW50LT5yYXRlX2h6OwotCWZyZXEgLz0gcG1jX3ByZXNjYWxlcl9kaXZpZGVyKG1ja3IpOwkJCQkJLyogcHJlc2NhbGUgKi8KLQlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkgewotCQltY2sucmF0ZV9oeiA9IGZyZXEgLyAoMSArICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJLyogbWRpdiAqLwotCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05ZzIwKCkpIHsKLQkJbWNrLnJhdGVfaHogPSAobWNrciAmIEFUOTFfUE1DX01ESVYpID8KLQkJCWZyZXEgLyAoKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA+PiA3KSA6IGZyZXE7CS8qIG1kaXYgOyAoeCA+PiA3KSA9ICgoeCA+PiA4KSAqIDIpICovCi0JCWlmIChtY2tyICYgQVQ5MV9QTUNfUERJVikKLQkJCWZyZXEgLz0gMjsJCS8qIHByb2Nlc3NvciBjbG9jayBkaXZpc2lvbiAqLwotCX0gZWxzZSBpZiAoY3B1X2hhc19tZGl2MygpKSB7Ci0JCW1jay5yYXRlX2h6ID0gKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA9PSBBVDkxU0FNOV9QTUNfTURJVl8zID8KLQkJCWZyZXEgLyAzIDogZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJLyogbWRpdiAqLwotCX0gZWxzZSB7Ci0JCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJCS8qIG1kaXYgKi8KLQl9Ci0KLQlpZiAoY3B1X2hhc19hbHRfcHJlc2NhbGVyKCkpIHsKLQkJLyogUHJvZ3JhbW1hYmxlIGNsb2NrcyBjYW4gdXNlIE1DSyAqLwotCQltY2sudHlwZSB8PSBDTEtfVFlQRV9QUklNQVJZOwotCQltY2suaWQgPSA0OwotCX0KLQotCS8qIFJlZ2lzdGVyIHRoZSBQTUMncyBzdGFuZGFyZCBjbG9ja3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGFuZGFyZF9wbWNfY2xvY2tzKTsgaSsrKQotCQlhdDkxX2Nsa19hZGQoc3RhbmRhcmRfcG1jX2Nsb2Nrc1tpXSk7Ci0KLQlpZiAoY3B1X2hhc19wbGxiKCkpCi0JCWF0OTFfY2xrX2FkZCgmcGxsYik7Ci0KLQlpZiAoY3B1X2hhc191aHAoKSkKLQkJYXQ5MV9jbGtfYWRkKCZ1aHBjayk7Ci0KLQlpZiAoY3B1X2hhc191ZHBmcygpKQotCQlhdDkxX2Nsa19hZGQoJnVkcGNrKTsKLQotCWlmIChjcHVfaGFzX3V0bWkoKSkKLQkJYXQ5MV9jbGtfYWRkKCZ1dG1pX2Nsayk7Ci0KLQkvKiBNQ0sgYW5kIENQVSBjbG9jayBhcmUgImFsd2F5cyBvbiIgKi8KLQljbGtfZW5hYmxlKCZtY2spOwotCi0JcHJpbnRrKCJDbG9ja3M6IENQVSAldSBNSHosIG1hc3RlciAldSBNSHosIG1haW4gJXUuJTAzdSBNSHpcbiIsCi0JCWZyZXEgLyAxMDAwMDAwLCAodW5zaWduZWQpIG1jay5yYXRlX2h6IC8gMTAwMDAwMCwKLQkJKHVuc2lnbmVkKSBtYWluX2Nsb2NrIC8gMTAwMDAwMCwKLQkJKCh1bnNpZ25lZCkgbWFpbl9jbG9jayAlIDEwMDAwMDApIC8gMTAwMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX09GKQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcG1jX2lkc1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOWc0NS1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOW4xMi1wbWMiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1LXBtYyIgfSwKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDMtcG1jIiB9LAotCXsgLypzZW50aW5lbCovIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9zY19pZHNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLG9zYyIgfSwKLQl7IC8qc2VudGluZWwqLyB9Ci19OwotCi1pbnQgX19pbml0IGF0OTFfZHRfY2xvY2tfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdTMyIG1haW5fY2xvY2sgPSAwOwotCi0JbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgcG1jX2lkcyk7Ci0JaWYgKCFucCkKLQkJcGFuaWMoInVuYWJsZSB0byBmaW5kIGNvbXBhdGlibGUgcG1jIG5vZGUgaW4gZHRiXG4iKTsKLQotCWF0OTFfcG1jX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7Ci0JaWYgKCFhdDkxX3BtY19iYXNlKQotCQlwYW5pYygidW5hYmxlIHRvIG1hcCBwbWMgY3B1IHJlZ2lzdGVyc1xuIik7Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci0KLQkvKiByZXRyaWV2ZSB0aGUgZnJlcWVuY3kgb2YgZml4ZWQgY2xvY2tzIGZyb20gZGV2aWNlIHRyZWUgKi8KLQlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBvc2NfaWRzKTsKLQlpZiAobnApIHsKLQkJdTMyIHJhdGU7Ci0JCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjbG9jay1mcmVxdWVuY3kiLCAmcmF0ZSkpCi0JCQltYWluX2Nsb2NrID0gcmF0ZTsKLQl9Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci0KLQlyZXR1cm4gYXQ5MV9wbWNfaW5pdChtYWluX2Nsb2NrKTsKLX0KLSNlbmRpZgotCi1pbnQgX19pbml0IGF0OTFfY2xvY2tfaW5pdCh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCi17Ci0JYXQ5MV9wbWNfYmFzZSA9IGlvcmVtYXAoQVQ5MV9QTUMsIDI1Nik7Ci0JaWYgKCFhdDkxX3BtY19iYXNlKQotCQlwYW5pYygiSW1wb3NzaWJsZSB0byBpb3JlbWFwIEFUOTFfUE1DIDB4JXhcbiIsIEFUOTFfUE1DKTsKLQotCXJldHVybiBhdDkxX3BtY19pbml0KG1haW5fY2xvY2spOwotfQotCi0vKgotICogU2V2ZXJhbCB1bnVzZWQgY2xvY2tzIG1heSBiZSBhY3RpdmUuICBUdXJuIHRoZW0gb2ZmLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2Nsb2NrX3Jlc2V0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBwY2RyID0gMDsKLQl1bnNpZ25lZCBsb25nIHBjZHIxID0gMDsKLQl1bnNpZ25lZCBsb25nIHNjZHIgPSAwOwotCXN0cnVjdCBjbGsgKmNsazsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChjbGstPnVzZXJzID4gMCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjbGstPm1vZGUgPT0gcG1jX3BlcmlwaF9tb2RlKSB7Ci0JCQlpZiAoY3B1X2lzX3NhbWE1ZDMoKSkgewotCQkJCXUzMiBwbWNfbWFzayA9IDEgPDwgKGNsay0+cGlkICUgMzIpOwotCi0JCQkJaWYgKGNsay0+cGlkID4gMzEpCi0JCQkJCXBjZHIxIHw9IHBtY19tYXNrOwotCQkJCWVsc2UKLQkJCQkJcGNkciB8PSBwbWNfbWFzazsKLQkJCX0gZWxzZQotCQkJCXBjZHIgfD0gY2xrLT5wbWNfbWFzazsKLQkJfQotCi0JCWlmIChjbGstPm1vZGUgPT0gcG1jX3N5c19tb2RlKQotCQkJc2NkciB8PSBjbGstPnBtY19tYXNrOwotCi0JCXByX2RlYnVnKCJDbG9ja3M6IGRpc2FibGUgdW51c2VkICVzXG4iLCBjbGstPm5hbWUpOwotCX0KLQotCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1NDRFIsIHNjZHIpOwotCWF0OTFfcG1jX3dyaXRlKEFUOTFfUE1DX1BDRFIsIHBjZHIpOwotCWlmIChjcHVfaXNfc2FtYTVkMygpKQotCQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19QQ0RSMSwgcGNkcjEpOwotCi0JcmV0dXJuIDA7Ci19Ci1sYXRlX2luaXRjYWxsKGF0OTFfY2xvY2tfcmVzZXQpOwotCi12b2lkIGF0OTFzYW05X2lkbGUodm9pZCkKLXsKLQlhdDkxX3BtY193cml0ZShBVDkxX1BNQ19TQ0RSLCBBVDkxX1BNQ19QQ0spOwotCWNwdV9kb19pZGxlKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOThhMzliLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+Ci0KLSNkZWZpbmUgQ0xLX1RZUEVfUFJJTUFSWQkweDEKLSNkZWZpbmUgQ0xLX1RZUEVfUExMCQkweDIKLSNkZWZpbmUgQ0xLX1RZUEVfUFJPR1JBTU1BQkxFCTB4NAotI2RlZmluZSBDTEtfVFlQRV9QRVJJUEhFUkFMCTB4OAotI2RlZmluZSBDTEtfVFlQRV9TWVNURU0JCTB4MTAKLQotCi1zdHJ1Y3QgY2xrIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JY29uc3QgY2hhcgkqbmFtZTsJCS8qIHVuaXF1ZSBjbG9jayBuYW1lICovCi0Jc3RydWN0IGNsa19sb29rdXAgY2w7Ci0JdW5zaWduZWQgbG9uZwlyYXRlX2h6OwotCXVuc2lnbmVkCWRpdjsJCS8qIHBhcmVudCBjbG9jayBkaXZpZGVyICovCi0Jc3RydWN0IGNsawkqcGFyZW50OwotCXVuc2lnbmVkCXBpZDsJCS8qIHBlcmlwaGVyYWwgSUQgKi8KLQl1MzIJCXBtY19tYXNrOwotCXZvaWQJCSgqbW9kZSkoc3RydWN0IGNsayAqLCBpbnQpOwotCXVuc2lnbmVkCWlkOjM7CQkvKiBQQ0swLi40LCBvciAzMmsvbWFpbi9hL2IgKi8KLQl1bnNpZ25lZAl0eXBlOwkJLyogY2xvY2sgdHlwZSAqLwotCXUxNgkJdXNlcnM7Ci19OwotCi0KLWV4dGVybiBpbnQgX19pbml0IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwotZXh0ZXJuIHN0cnVjdCBjbGsgbWNrOwotZXh0ZXJuIHN0cnVjdCBjbGsgdXRtaV9jbGs7Ci0KLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspCQkJXAotCXsJCQkJCQlcCi0JCS5jb25faWQgPSBfaWQsCQkJCVwKLQkJLmNsayA9IF9jbGssCQkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0xLREVWX0NPTl9ERVZfSUQoX2Nvbl9pZCwgX2Rldl9pZCwgX2NsaykJXAotCXsJCQkJCQlcCi0JCS5jb25faWQgPSBfY29uX2lkLAkJCVwKLQkJLmRldl9pZCA9IF9kZXZfaWQsCQkJXAotCQkuY2xrID0gX2NsaywJCQkJXAotCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCmluZGV4IDgxOTU5Y2YuLmQ1MzMyNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVQ5MV9HRU5FUklDX0gKICNkZWZpbmUgX0FUOTFfR0VORVJJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCkBAIC0yMyw3MSArMjIsMTkgQEAKIAogIC8qIFByb2Nlc3NvcnMgKi8KIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxcm05MjAwX3NldF90eXBlKGludCB0eXBlKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxeDQwX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxcm05MjAwX2R0X2luaXRpYWxpemUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9kdF9pbml0aWFsaXplKHZvaWQpOwogCiAgLyogSW50ZXJydXB0cyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7Ci1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MXg0MF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWljX2luaXQodW5zaWduZWQgaW50IHByaW9yaXR5W10sCi0JCQkJIHVuc2lnbmVkIGludCBleHRfaXJxX21hc2spOwotZXh0ZXJuIGludCAgX19pbml0IGF0OTFfYWljX29mX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCk7Ci1leHRlcm4gaW50ICBfX2luaXQgYXQ5MV9haWM1X29mX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9zeXNpcnFfbWFza19ydGModTMyIHJ0Y19iYXNlKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX3N5c2lycV9tYXNrX3J0dCh1MzIgcnR0X2Jhc2UpOwogCi0gLyogRGV2aWNlcyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKTsKLQogIC8qIFRpbWVyICovCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9pbml0X3RpbWUodm9pZCk7Ci1leHRlcm4gdm9pZCBhdDkxcm05MjAwX2lvcmVtYXBfc3QodTMyIGFkZHIpOwogZXh0ZXJuIHZvaWQgYXQ5MXJtOTIwMF90aW1lcl9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgYXQ5MXNhbTkyNnhfaW9yZW1hcF9waXQodTMyIGFkZHIpOwotZXh0ZXJuIHZvaWQgYXQ5MXNhbTkyNnhfcGl0X2luaXQoaW50IGlycSk7Ci1leHRlcm4gdm9pZCBhdDkxeDQwX3RpbWVyX2luaXQodm9pZCk7Ci0KLSAvKiBDbG9ja3MgKi8KLSNpZmRlZiBDT05GSUdfT0xEX0NMS19BVDkxCi1leHRlcm4gaW50IF9faW5pdCBhdDkxX2Nsb2NrX2luaXQodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKLWV4dGVybiBpbnQgX19pbml0IGF0OTFfZHRfY2xvY2tfaW5pdCh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW50IGlubGluZSBhdDkxX2Nsb2NrX2luaXQodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW50IGlubGluZSBhdDkxX2R0X2Nsb2NrX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi1zdHJ1Y3QgZGV2aWNlOwotCi0gLyogUG93ZXIgTWFuYWdlbWVudCAqLwotZXh0ZXJuIHZvaWQgYXQ5MV9pcnFfc3VzcGVuZCh2b2lkKTsKLWV4dGVybiB2b2lkIGF0OTFfaXJxX3Jlc3VtZSh2b2lkKTsKIAogLyogaWRsZSAqLwogZXh0ZXJuIHZvaWQgYXQ5MXNhbTlfaWRsZSh2b2lkKTsKIAogLyogTWF0cml4ICovCiBleHRlcm4gdm9pZCBhdDkxX2lvcmVtYXBfbWF0cml4KHUzMiBiYXNlX2FkZHIpOwotCi0vKiBSYW0gQ29udHJvbGVyICovCi1leHRlcm4gdm9pZCBhdDkxX2lvcmVtYXBfcmFtYyhpbnQgaWQsIHUzMiBhZGRyLCB1MzIgc2l6ZSk7Ci0KLSAvKiBHUElPICovCi0jZGVmaW5lIEFUOTFSTTkyMDBfUFFGUAkJMwkvKiBBVDkxUk05MjAwIFBRRlAgcGFja2FnZSBoYXMgMyBiYW5rcyAqLwotI2RlZmluZSBBVDkxUk05MjAwX0JHQQkJNAkvKiBBVDkxUk05MjAwIEJHQSBwYWNrYWdlIGhhcyA0IGJhbmtzICovCi0KLXN0cnVjdCBhdDkxX2dwaW9fYmFuayB7Ci0JdW5zaWduZWQgc2hvcnQgaWQ7CQkvKiBwZXJpcGhlcmFsIElEICovCi0JdW5zaWduZWQgbG9uZyByZWdiYXNlOwkJLyogb2Zmc2V0IGZyb20gc3lzdGVtIHBlcmlwaGVyYWwgYmFzZSAqLwotfTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2dwaW9faW5pdChzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgKiwgaW50IG5yX2JhbmtzKTsKLWV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2dwaW9faXJxX3NldHVwKHZvaWQpOwotZXh0ZXJuIGludCAgX19pbml0IGF0OTFfZ3Bpb19vZl9pcnFfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCQkgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50KTsKLQotZXh0ZXJuIHUzMiBhdDkxX2dldF9leHRlcm5faXJxKHZvaWQpOwotCiAjZW5kaWYgLyogX0FUOTFfR0VORVJJQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmMDVhYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsOTgyICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEhQIExhYnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MV9waW8uaD4KLQotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJncGlvLmgiCi0KLSNkZWZpbmUgTUFYX05CX0dQSU9fUEVSX0JBTksJMzIKLQotc3RydWN0IGF0OTFfZ3Bpb19jaGlwIHsKLQlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwCSpuZXh0OwkJLyogQmFuayBzaGFyaW5nIHNhbWUgY2xvY2sgKi8KLQlpbnQJCQlwaW9jX2h3aXJxOwkvKiBQSU8gYmFuayBpbnRlcnJ1cHQgaWRlbnRpZmllciBvbiBBSUMgKi8KLQlpbnQJCQlwaW9jX3ZpcnE7CS8qIFBJTyBiYW5rIExpbnV4IHZpcnR1YWwgaW50ZXJydXB0ICovCi0JaW50CQkJcGlvY19pZHg7CS8qIFBJTyBiYW5rIGluZGV4ICovCi0Jdm9pZCBfX2lvbWVtCQkqcmVnYmFzZTsJLyogUElPIGJhbmsgdmlydHVhbCBhZGRyZXNzICovCi0Jc3RydWN0IGNsawkJKmNsb2NrOwkJLyogYXNzb2NpYXRlZCBjbG9jayAqLwotCXN0cnVjdCBpcnFfZG9tYWluCSpkb21haW47CS8qIGFzc29jaWF0ZWQgaXJxIGRvbWFpbiAqLwotfTsKLQotI2RlZmluZSB0b19hdDkxX2dwaW9fY2hpcChjKSBjb250YWluZXJfb2YoYywgc3RydWN0IGF0OTFfZ3Bpb19jaGlwLCBjaGlwKQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7Ci1zdGF0aWMgdm9pZCBhdDkxX2dwaW9saWJfZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKTsKLXN0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKLXN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOwotc3RhdGljIGludCBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOwotc3RhdGljIGludCBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQkgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKLXN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQl1bnNpZ25lZCBvZmZzZXQpOwotc3RhdGljIGludCBhdDkxX2dwaW9saWJfdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7Ci0KLSNkZWZpbmUgQVQ5MV9HUElPX0NISVAobmFtZSkJCQkJCQlcCi0JewkJCQkJCQkJXAotCQkuY2hpcCA9IHsJCQkJCQlcCi0JCQkubGFiZWwJCSAgPSBuYW1lLAkJCVwKLQkJCS5yZXF1ZXN0CSAgPSBhdDkxX2dwaW9saWJfcmVxdWVzdCwJXAotCQkJLmdldF9kaXJlY3Rpb24gICAgPSBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbiwgXAotCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX2lucHV0LCBcCi0JCQkuZGlyZWN0aW9uX291dHB1dCA9IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0LCBcCi0JCQkuZ2V0CQkgID0gYXQ5MV9ncGlvbGliX2dldCwJCVwKLQkJCS5zZXQJCSAgPSBhdDkxX2dwaW9saWJfc2V0LAkJXAotCQkJLmRiZ19zaG93CSAgPSBhdDkxX2dwaW9saWJfZGJnX3Nob3csCVwKLQkJCS50b19pcnEJCSAgPSBhdDkxX2dwaW9saWJfdG9faXJxLAlcCi0JCQkubmdwaW8JCSAgPSBNQVhfTkJfR1BJT19QRVJfQkFOSywJXAotCQl9LAkJCQkJCQlcCi0JfQotCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19jaGlwIGdwaW9fY2hpcFtdID0gewotCUFUOTFfR1BJT19DSElQKCJwaW9BIiksCi0JQVQ5MV9HUElPX0NISVAoInBpb0IiKSwKLQlBVDkxX0dQSU9fQ0hJUCgicGlvQyIpLAotCUFUOTFfR1BJT19DSElQKCJwaW9EIiksCi0JQVQ5MV9HUElPX0NISVAoInBpb0UiKSwKLX07Ci0KLXN0YXRpYyBpbnQgZ3Bpb19iYW5rczsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGF0OTFfZ3Bpb19jYXBzOwotCi0vKiBBbGwgUElPIGNvbnRyb2xsZXJzIHN1cHBvcnQgUElPMyBmZWF0dXJlcyAqLwotI2RlZmluZSBBVDkxX0dQSU9fQ0FQX1BJTzMJKDEgPDwgIDApCi0KLSNkZWZpbmUgaGFzX3BpbzMoKQkoYXQ5MV9ncGlvX2NhcHMgJiBBVDkxX0dQSU9fQ0FQX1BJTzMpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcGluX3RvX2NvbnRyb2xsZXIodW5zaWduZWQgcGluKQotewotCXBpbiAvPSBNQVhfTkJfR1BJT19QRVJfQkFOSzsKLQlpZiAobGlrZWx5KHBpbiA8IGdwaW9fYmFua3MpKQotCQlyZXR1cm4gZ3Bpb19jaGlwW3Bpbl0ucmVnYmFzZTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBpbl90b19tYXNrKHVuc2lnbmVkIHBpbikKLXsKLQlyZXR1cm4gMSA8PCAocGluICUgTUFYX05CX0dQSU9fUEVSX0JBTkspOwotfQotCi0KLXN0YXRpYyBjaGFyIHBlcmlwaGVyYWxfZnVuY3Rpb24odm9pZCBfX2lvbWVtICpwaW8sIHVuc2lnbmVkIG1hc2spCi17Ci0JY2hhcglyZXQgPSAnWCc7Ci0JdTgJc2VsZWN0OwotCi0JaWYgKHBpbykgewotCQlpZiAoaGFzX3BpbzMoKSkgewotCQkJc2VsZWN0ID0gISEoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjEpICYgbWFzayk7Ci0JCQlzZWxlY3QgfD0gKCEhKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IyKSAmIG1hc2spIDw8IDEpOwotCQkJcmV0ID0gJ0EnICsgc2VsZWN0OwotCQl9IGVsc2UgewotCQkJcmV0ID0gX19yYXdfcmVhZGwocGlvICsgUElPX0FCU1IpICYgbWFzayA/Ci0JCQkJCQkJJ0InIDogJ0EnOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIE5vdCBhbGwgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGFyZSBleHBvc2VkIHRocm91Z2ggdGhlc2UgY2FsbHM7IHRoZXkKLSAqIG9ubHkgZW5jYXBzdWxhdGUgdGhlIG1vc3QgY29tbW9uIGZlYXR1cmVzIGFuZCBtb2Rlcy4gIChTbyBpZiB5b3UKLSAqIHdhbnQgdG8gY2hhbmdlIHNpZ25hbHMgaW4gZ3JvdXBzLCBkbyBpdCBkaXJlY3RseS4pCi0gKgotICogQm9vdGxvYWRlcnMgd2lsbCB1c3VhbGx5IGhhbmRsZSBzb21lIG9mIHRoZSBwaW4gbXVsdGlwbGV4aW5nIHNldHVwLgotICogVGhlIGludGVudCBpcyBjZXJ0YWlubHkgdGhhdCBieSB0aGUgdGltZSBMaW51eCBpcyBmdWxseSBib290ZWQsIGFsbAotICogcGlucyBzaG91bGQgaGF2ZSBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlc2Ugc2V0dXAgY2FsbHMgc2hvdWxkCi0gKiBvbmx5IGJlIHVzZWQgYnkgYm9hcmQgc2V0dXAgcm91dGluZXMsIG9yIHBvc3NpYmx5IGluIGRyaXZlciBwcm9iZSgpLgotICoKLSAqIEZvciBib290bG9hZGVycyBkb2luZyBhbGwgdGhhdCBzZXR1cCwgdGhlc2UgY2FsbHMgY291bGQgYmUgaW5saW5lZAotICogYXMgTk9QcyBzbyBMaW51eCB3b24ndCBkdXBsaWNhdGUgYW55IHNldHVwIGNvZGUKLSAqLwotCi0KLS8qCi0gKiBtdXggdGhlIHBpbiB0byB0aGUgIkdQSU8iIHBlcmlwaGVyYWwgcm9sZS4KLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfR1BJT19wZXJpcGgodW5zaWduZWQgcGluLCBpbnQgdXNlX3B1bGx1cCkKLXsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7Ci0JdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7Ci0KLQlpZiAoIXBpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodXNlX3B1bGx1cCA/IFBJT19QVUVSIDogUElPX1BVRFIpKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BFUik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGF0OTFfc2V0X0dQSU9fcGVyaXBoKTsKLQotCi0vKgotICogbXV4IHRoZSBwaW4gdG8gdGhlICJBIiBpbnRlcm5hbCBwZXJpcGhlcmFsIHJvbGUuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X0FfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodXNlX3B1bGx1cCA/IFBJT19QVUVSIDogUElPX1BVRFIpKTsKLQlpZiAoaGFzX3BpbzMoKSkgewotCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjEpICYgfm1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjEpOwotCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjIpICYgfm1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjIpOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fQVNSKTsKLQl9Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRFIpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9BX3BlcmlwaCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSAiQiIgaW50ZXJuYWwgcGVyaXBoZXJhbCByb2xlLgotICovCi1pbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9CX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7Ci0JaWYgKGhhc19waW8zKCkpIHsKLQkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IxKSB8IG1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjEpOwotCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjIpICYgfm1hc2ssCi0JCQkJCQkJcGlvICsgUElPX0FCQ0RTUjIpOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fQlNSKTsKLQl9Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRFIpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9CX3BlcmlwaCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSAiQyIgaW50ZXJuYWwgcGVyaXBoZXJhbCByb2xlLgotICovCi1pbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9DX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvIHx8ICFoYXNfcGlvMygpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IxKSAmIH5tYXNrLCBwaW8gKyBQSU9fQUJDRFNSMSk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNEU1IyKSB8IG1hc2ssIHBpbyArIFBJT19BQkNEU1IyKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BEUik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGF0OTFfc2V0X0NfcGVyaXBoKTsKLQotCi0vKgotICogbXV4IHRoZSBwaW4gdG8gdGhlICJEIiBpbnRlcm5hbCBwZXJpcGhlcmFsIHJvbGUuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X0RfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8gfHwgIWhhc19waW8zKCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19JRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodXNlX3B1bGx1cCA/IFBJT19QVUVSIDogUElPX1BVRFIpKTsKLQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RTUjEpIHwgbWFzaywgcGlvICsgUElPX0FCQ0RTUjEpOwotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChwaW8gKyBQSU9fQUJDRFNSMikgfCBtYXNrLCBwaW8gKyBQSU9fQUJDRFNSMik7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19QRFIpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9EX3BlcmlwaCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSBncGlvIGNvbnRyb2xsZXIgKGluc3RlYWQgb2YgIkEiLCAiQiIsICJDIgotICogb3IgIkQiIHBlcmlwaGVyYWwpLCBhbmQgY29uZmlndXJlIGl0IGZvciBhbiBpbnB1dC4KLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZ3Bpb19pbnB1dCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHVzZV9wdWxsdXAgPyBQSU9fUFVFUiA6IFBJT19QVURSKSk7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZ3Bpb19pbnB1dCk7Ci0KLQotLyoKLSAqIG11eCB0aGUgcGluIHRvIHRoZSBncGlvIGNvbnRyb2xsZXIgKGluc3RlYWQgb2YgIkEiLCAiQiIsICJDIgotICogb3IgIkQiIHBlcmlwaGVyYWwpLCBhbmQgY29uZmlndXJlIGl0IGZvciBhbiBvdXRwdXQuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2dwaW9fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSURSKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BVRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodmFsdWUgPyBQSU9fU09EUiA6IFBJT19DT0RSKSk7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRVIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZ3Bpb19vdXRwdXQpOwotCi0KLS8qCi0gKiBlbmFibGUvZGlzYWJsZSB0aGUgZ2xpdGNoIGZpbHRlcjsgbW9zdGx5IHVzZWQgd2l0aCBJUlEgaGFuZGxpbmcuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2RlZ2xpdGNoKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChoYXNfcGlvMygpICYmIGlzX29uKQotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lGU0NEUik7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIChpc19vbiA/IFBJT19JRkVSIDogUElPX0lGRFIpKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfZGVnbGl0Y2gpOwotCi0vKgotICogZW5hYmxlL2Rpc2FibGUgdGhlIGRlYm91bmNlIGZpbHRlcjsKLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZGVib3VuY2UodW5zaWduZWQgcGluLCBpbnQgaXNfb24sIGludCBkaXYpCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8gfHwgIWhhc19waW8zKCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGlzX29uKSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSUZTQ0VSKTsKLQkJX19yYXdfd3JpdGVsKGRpdiAmIFBJT19TQ0RSX0RJViwgcGlvICsgUElPX1NDRFIpOwotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lGRVIpOwotCX0gZWxzZSB7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSUZEUik7Ci0JfQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9kZWJvdW5jZSk7Ci0KLS8qCi0gKiBlbmFibGUvZGlzYWJsZSB0aGUgbXVsdGktZHJpdmVyOyBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIG91dHB1dCBhbmQKLSAqIGFsbG93cyB0aGUgb3V0cHV0IHBpbiB0byBydW4gYXMgYW4gb3BlbiBjb2xsZWN0b3Igb3V0cHV0LgotICovCi1pbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9tdWx0aV9kcml2ZSh1bnNpZ25lZCBwaW4sIGludCBpc19vbikKLXsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7Ci0JdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7Ci0KLQlpZiAoIXBpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKGlzX29uID8gUElPX01ERVIgOiBQSU9fTUREUikpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9tdWx0aV9kcml2ZSk7Ci0KLS8qCi0gKiBlbmFibGUvZGlzYWJsZSB0aGUgcHVsbC1kb3duLgotICogSWYgcHVsbC11cCBhbHJlYWR5IGVuYWJsZWQgd2hpbGUgY2FsbGluZyB0aGUgZnVuY3Rpb24sIHdlIGRpc2FibGUgaXQuCi0gKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X3B1bGxkb3duKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvIHx8ICFoYXNfcGlvMygpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIERpc2FibGUgcHVsbC11cCBhbnl3YXkgKi8KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1BVRFIpOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAoaXNfb24gPyBQSU9fUFBERVIgOiBQSU9fUFBERFIpKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9zZXRfcHVsbGRvd24pOwotCi0vKgotICogZGlzYWJsZSBTY2htaXR0IHRyaWdnZXIKLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9kaXNhYmxlX3NjaG1pdHRfdHJpZyh1bnNpZ25lZCBwaW4pCi17Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JaWYgKCFwaW8gfHwgIWhhc19waW8zKCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHBpbyArIFBJT19TQ0hNSVRUKSB8IG1hc2ssIHBpbyArIFBJT19TQ0hNSVRUKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYXQ5MV9kaXNhYmxlX3NjaG1pdHRfdHJpZyk7Ci0KLS8qCi0gKiBhc3N1bWluZyB0aGUgcGluIGlzIG11eGVkIGFzIGEgZ3BpbyBvdXRwdXQsIHNldCBpdHMgdmFsdWUuCi0gKi8KLWludCBhdDkxX3NldF9ncGlvX3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHZhbHVlID8gUElPX1NPRFIgOiBQSU9fQ09EUikpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX3NldF9ncGlvX3ZhbHVlKTsKLQotCi0vKgotICogcmVhZCB0aGUgcGluJ3MgdmFsdWUgKHdvcmtzIGV2ZW4gaWYgaXQncyBub3QgbXV4ZWQgYXMgYSBncGlvKS4KLSAqLwotaW50IGF0OTFfZ2V0X2dwaW9fdmFsdWUodW5zaWduZWQgcGluKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQl1MzIJCXBkc3I7Ci0KLQlpZiAoIXBpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcGRzciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19QRFNSKTsKLQlyZXR1cm4gKHBkc3IgJiBtYXNrKSAhPSAwOwotfQotRVhQT1JUX1NZTUJPTChhdDkxX2dldF9ncGlvX3ZhbHVlKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHUzMiB3YWtldXBzW01BWF9HUElPX0JBTktTXTsKLXN0YXRpYyB1MzIgYmFja3Vwc1tNQVhfR1BJT19CQU5LU107Ci0KLXN0YXRpYyBpbnQgZ3Bpb19pcnFfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXVuc2lnbmVkCW1hc2sgPSAxIDw8IGQtPmh3aXJxOwotCXVuc2lnbmVkCWJhbmsgPSBhdDkxX2dwaW8tPnBpb2NfaWR4OwotCi0JaWYgKHVubGlrZWx5KGJhbmsgPj0gTUFYX0dQSU9fQkFOS1MpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzdGF0ZSkKLQkJd2FrZXVwc1tiYW5rXSB8PSBtYXNrOwotCWVsc2UKLQkJd2FrZXVwc1tiYW5rXSAmPSB+bWFzazsKLQotCWlycV9zZXRfaXJxX3dha2UoYXQ5MV9ncGlvLT5waW9jX3ZpcnEsIHN0YXRlKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGF0OTFfZ3Bpb19zdXNwZW5kKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7Ci0JCXZvaWQgX19pb21lbQkqcGlvID0gZ3Bpb19jaGlwW2ldLnJlZ2Jhc2U7Ci0KLQkJYmFja3Vwc1tpXSA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19JTVIpOwotCQlfX3Jhd193cml0ZWwoYmFja3Vwc1tpXSwgcGlvICsgUElPX0lEUik7Ci0JCV9fcmF3X3dyaXRlbCh3YWtldXBzW2ldLCBwaW8gKyBQSU9fSUVSKTsKLQotCQlpZiAoIXdha2V1cHNbaV0pIHsKLQkJCWNsa191bnByZXBhcmUoZ3Bpb19jaGlwW2ldLmNsb2NrKTsKLQkJCWNsa19kaXNhYmxlKGdwaW9fY2hpcFtpXS5jbG9jayk7Ci0JCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1BNX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiR1BJTy0lYyBtYXkgd2FrZSBmb3IgJTA4eFxuIiwgJ0EnK2ksIHdha2V1cHNbaV0pOwotI2VuZGlmCi0JCX0KLQl9Ci19Ci0KLXZvaWQgYXQ5MV9ncGlvX3Jlc3VtZSh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua3M7IGkrKykgewotCQl2b2lkIF9faW9tZW0JKnBpbyA9IGdwaW9fY2hpcFtpXS5yZWdiYXNlOwotCi0JCWlmICghd2FrZXVwc1tpXSkgewotCQkJaWYgKGNsa19wcmVwYXJlKGdwaW9fY2hpcFtpXS5jbG9jaykgPT0gMCkKLQkJCQljbGtfZW5hYmxlKGdwaW9fY2hpcFtpXS5jbG9jayk7Ci0JCX0KLQotCQlfX3Jhd193cml0ZWwod2FrZXVwc1tpXSwgcGlvICsgUElPX0lEUik7Ci0JCV9fcmF3X3dyaXRlbChiYWNrdXBzW2ldLCBwaW8gKyBQSU9fSUVSKTsKLQl9Ci19Ci0KLSNlbHNlCi0jZGVmaW5lIGdwaW9faXJxX3NldF93YWtlCU5VTEwKLSNlbmRpZgotCi0KLS8qIFNldmVyYWwgQUlDIGNvbnRyb2xsZXIgaXJxcyBhcmUgZGlzcGF0Y2hlZCB0aHJvdWdoIHRoaXMgR1BJTyBoYW5kbGVyLgotICogVG8gdXNlIGFueSBBVDkxX1BJTl8qIGFzIGFuIGV4dGVybmFsbHkgdHJpZ2dlcmVkIElSUSwgZmlyc3QgY2FsbAotICogYXQ5MV9zZXRfZ3Bpb19pbnB1dCgpIHRoZW4gbWF5YmUgZW5hYmxlIGl0cyBnbGl0Y2ggZmlsdGVyLgotICogVGhlbiBqdXN0IHJlcXVlc3RfaXJxKCkgd2l0aCB0aGUgcGluIElEOyBpdCB3b3JrcyBsaWtlIGFueSBBUk0gSVJRCi0gKiBoYW5kbGVyLgotICogRmlyc3QgaW1wbGVtZW50YXRpb24gYWx3YXlzIHRyaWdnZXJzIG9uIHJpc2luZyBhbmQgZmFsbGluZyBlZGdlcwotICogd2hlcmVhcyB0aGUgbmV3ZXIgUElPMyBjYW4gYmUgYWRkaXRpb25hbGx5IGNvbmZpZ3VyZWQgdG8gdHJpZ2dlciBvbgotICogbGV2ZWwsIGVkZ2Ugd2l0aCBhbnkgcG9sYXJpdHkuCi0gKgotICogQWx0ZXJuYXRpdmVseSwgY2VydGFpbiBwaW5zIG1heSBiZSB1c2VkIGRpcmVjdGx5IGFzIElSUTAuLklSUTYgYWZ0ZXIKLSAqIGNvbmZpZ3VyaW5nIHRoZW0gd2l0aCBhdDkxX3NldF9hX3BlcmlwaCgpIG9yIGF0OTFfc2V0X2JfcGVyaXBoKCkuCi0gKiBJUlEwLi5JUlE2IHNob3VsZCBiZSBjb25maWd1cmFibGUsIGUuZy4gbGV2ZWwgdnMgZWRnZSB0cmlnZ2VyaW5nLgotICovCi0KLXN0YXRpYyB2b2lkIGdwaW9faXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQJbWFzayA9IDEgPDwgZC0+aHdpcnE7Ci0KLQlpZiAocGlvKQotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0lEUik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdwaW9faXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZAltYXNrID0gMSA8PCBkLT5od2lycTsKLQotCWlmIChwaW8pCi0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fSUVSKTsKLX0KLQotc3RhdGljIGludCBncGlvX2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdHlwZSkKLXsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX05PTkU6Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotLyogQWx0ZXJuYXRlIGlycSB0eXBlIGZvciBQSU8zIHN1cHBvcnQgKi8KLXN0YXRpYyBpbnQgYWx0X2dwaW9faXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCB0eXBlKQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0Jdm9pZCBfX2lvbWVtCSpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQJbWFzayA9IDEgPDwgZC0+aHdpcnE7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0VTUik7Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUkVITFNSKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fRVNSKTsKLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19GRUxMU1IpOwotCQlicmVhazsKLQljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19MU1IpOwotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0ZFTExTUik7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19MU1IpOwotCQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX1JFSExTUik7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgotCQkvKgotCQkgKiBkaXNhYmxlIGFkZGl0aW9uYWwgaW50ZXJydXB0IG1vZGVzOgotCQkgKiBmYWxsIGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvcgotCQkgKi8KLQkJX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19BSU1EUik7Ci0JCXJldHVybiAwOwotCWNhc2UgSVJRX1RZUEVfTk9ORToKLQlkZWZhdWx0OgotCQlwcl93YXJuKCJBVDkxOiBObyB0eXBlIGZvciBpcnEgJWRcbiIsIGdwaW9fdG9faXJxKGQtPmlycSkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBlbmFibGUgYWRkaXRpb25hbCBpbnRlcnJ1cHQgbW9kZXMgKi8KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX0FJTUVSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGdwaW9faXJxY2hpcCA9IHsKLQkubmFtZQkJPSAiR1BJTyIsCi0JLmlycV9kaXNhYmxlCT0gZ3Bpb19pcnFfbWFzaywKLQkuaXJxX21hc2sJPSBncGlvX2lycV9tYXNrLAotCS5pcnFfdW5tYXNrCT0gZ3Bpb19pcnFfdW5tYXNrLAotCS8qIC5pcnFfc2V0X3R5cGUgaXMgc2V0IGR5bmFtaWNhbGx5ICovCi0JLmlycV9zZXRfd2FrZQk9IGdwaW9faXJxX3NldF93YWtlLAotfTsKLQotc3RhdGljIHZvaWQgZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKLQlzdHJ1Y3QgaXJxX2RhdGEgKmlkYXRhID0gaXJxX2Rlc2NfZ2V0X2lycV9kYXRhKGRlc2MpOwotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoaWRhdGEpOwotCXZvaWQgX19pb21lbQkqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOwotCXVuc2lnbmVkIGxvbmcJaXNyOwotCWludAkJbjsKLQotCWNoYWluZWRfaXJxX2VudGVyKGNoaXAsIGRlc2MpOwotCWZvciAoOzspIHsKLQkJLyogUmVhZGluZyBJU1IgYWNrcyBwZW5kaW5nIChlZGdlIHRyaWdnZXJlZCkgR1BJTyBpbnRlcnJ1cHRzLgotCQkgKiBXaGVuIHRoZXJlIG5vbmUgYXJlIHBlbmRpbmcsIHdlJ3JlIGZpbmlzaGVkIHVubGVzcyB3ZSBuZWVkCi0JCSAqIHRvIHByb2Nlc3MgbXVsdGlwbGUgYmFua3MgKGxpa2UgSURfUElPQ0RFIG9uIHNhbTkyNjMpLgotCQkgKi8KLQkJaXNyID0gX19yYXdfcmVhZGwocGlvICsgUElPX0lTUikgJiBfX3Jhd19yZWFkbChwaW8gKyBQSU9fSU1SKTsKLQkJaWYgKCFpc3IpIHsKLQkJCWlmICghYXQ5MV9ncGlvLT5uZXh0KQotCQkJCWJyZWFrOwotCQkJYXQ5MV9ncGlvID0gYXQ5MV9ncGlvLT5uZXh0OwotCQkJcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOwotCQkJY29udGludWU7Ci0JCX0KLQotCQluID0gZmluZF9maXJzdF9iaXQoJmlzciwgQklUU19QRVJfTE9ORyk7Ci0JCXdoaWxlIChuIDwgQklUU19QRVJfTE9ORykgewotCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYXQ5MV9ncGlvLT5kb21haW4sIG4pKTsKLQkJCW4gPSBmaW5kX25leHRfYml0KCZpc3IsIEJJVFNfUEVSX0xPTkcsIG4gKyAxKTsKLQkJfQotCX0KLQljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwotCS8qIG5vdyBpdCBtYXkgcmUtdHJpZ2dlciAqLwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmZGVmIENPTkZJR19ERUJVR19GUwotCi1zdGF0aWMgdm9pZCBncGlvX3ByaW50ZihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgX19pb21lbSAqcGlvLCB1bnNpZ25lZCBtYXNrKQotewotCWNoYXIJKnRyaWdnZXIgPSBOVUxMOwotCWNoYXIJKnBvbGFyaXR5ID0gTlVMTDsKLQotCWlmIChfX3Jhd19yZWFkbChwaW8gKyBQSU9fSU1SKSAmIG1hc2spIHsKLQkJaWYgKCFoYXNfcGlvMygpIHx8ICEoX19yYXdfcmVhZGwocGlvICsgUElPX0FJTU1SKSAmIG1hc2sgKSkgewotCQkJdHJpZ2dlciA9ICJlZGdlIjsKLQkJCXBvbGFyaXR5ID0gImJvdGgiOwotCQl9IGVsc2UgewotCQkJaWYgKF9fcmF3X3JlYWRsKHBpbyArIFBJT19FTFNSKSAmIG1hc2spIHsKLQkJCQl0cmlnZ2VyID0gImxldmVsIjsKLQkJCQlwb2xhcml0eSA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19GUkxIU1IpICYgbWFzayA/Ci0JCQkJCSJoaWdoIiA6ICJsb3ciOwotCQkJfSBlbHNlIHsKLQkJCQl0cmlnZ2VyID0gImVkZ2UiOwotCQkJCXBvbGFyaXR5ID0gX19yYXdfcmVhZGwocGlvICsgUElPX0ZSTEhTUikgJiBtYXNrID8KLQkJCQkJCSJyaXNpbmciIDogImZhbGxpbmciOwotCQkJfQotCQl9Ci0JCXNlcV9wcmludGYocywgIklSUTolcy0lc1x0IiwgdHJpZ2dlciwgcG9sYXJpdHkpOwotCX0gZWxzZSB7Ci0JCXNlcV9wcmludGYocywgIkdQSU86JXNcdFx0IiwKLQkJCQlfX3Jhd19yZWFkbChwaW8gKyBQSU9fUERTUikgJiBtYXNrID8gIjEiIDogIjAiKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYXQ5MV9ncGlvX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCi17Ci0JaW50IGJhbmssIGo7Ci0KLQkvKiBwcmludCBoZWFkaW5nICovCi0Jc2VxX3ByaW50ZihzLCAiUGluXHQiKTsKLQlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgZ3Bpb19iYW5rczsgYmFuaysrKSB7Ci0JCXNlcV9wcmludGYocywgIlBJTyVjXHRcdCIsICdBJyArIGJhbmspOwotCX07Ci0Jc2VxX3ByaW50ZihzLCAiXG5cbiIpOwotCi0JLyogcHJpbnQgcGluIHN0YXR1cyAqLwotCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCXNlcV9wcmludGYocywgIiVpOlx0Iiwgaik7Ci0KLQkJZm9yIChiYW5rID0gMDsgYmFuayA8IGdwaW9fYmFua3M7IGJhbmsrKykgewotCQkJdW5zaWduZWQJcGluICA9ICgzMiAqIGJhbmspICsgajsKLQkJCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQkJCXVuc2lnbmVkCW1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOwotCi0JCQlpZiAoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKQotCQkJCWdwaW9fcHJpbnRmKHMsIHBpbywgbWFzayk7Ci0JCQllbHNlCi0JCQkJc2VxX3ByaW50ZihzLCAiJWNcdFx0IiwKLQkJCQkJCXBlcmlwaGVyYWxfZnVuY3Rpb24ocGlvLCBtYXNrKSk7Ci0JCX0KLQotCQlzZXFfcHJpbnRmKHMsICJcbiIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhdDkxX2dwaW9fc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF0OTFfZ3Bpb19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IGF0OTFfZ3Bpb19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2dwaW9fZGVidWdmc19pbml0KHZvaWQpCi17Ci0JLyogL3N5cy9rZXJuZWwvZGVidWcvYXQ5MV9ncGlvICovCi0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF0OTFfZ3BpbyIsIFNfSUZSRUcgfCBTX0lSVUdPLCBOVUxMLCBOVUxMLCAmYXQ5MV9ncGlvX29wZXJhdGlvbnMpOwotCXJldHVybiAwOwotfQotcG9zdGNvcmVfaW5pdGNhbGwoYXQ5MV9ncGlvX2RlYnVnZnNfaW5pdCk7Ci0KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqIFRoaXMgbG9jayBjbGFzcyB0ZWxscyBsb2NrZGVwIHRoYXQgR1BJTyBpcnFzIGFyZSBpbiBhIGRpZmZlcmVudAotICogY2F0ZWdvcnkgdGhhbiB0aGVpciBwYXJlbnRzLCBzbyBpdCB3b24ndCByZXBvcnQgZmFsc2UgcmVjdXJzaW9uLgotICovCi1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGdwaW9fbG9ja19jbGFzczsKLQotLyoKLSAqIGlycWRvbWFpbiBpbml0aWFsaXphdGlvbjogcGlsZSB1cCBpcnFkb21haW5zIG9uIHRvcCBvZiBBSUMgcmFuZ2UKLSAqLwotc3RhdGljIHZvaWQgX19pbml0IGF0OTFfZ3Bpb19pcnFkb21haW4oc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8pCi17Ci0JaW50IGlycV9iYXNlOwotCi0JaXJxX2Jhc2UgPSBpcnFfYWxsb2NfZGVzY3MoLTEsIDAsIGF0OTFfZ3Bpby0+Y2hpcC5uZ3BpbywgMCk7Ci0JaWYgKGlycV9iYXNlIDwgMCkKLQkJcGFuaWMoImF0OTFfZ3Bpby4lZDogZXJyb3IgJWQ6IGNvdWxkbid0IGFsbG9jYXRlIElSUSBudW1iZXJzLlxuIiwKLQkJCWF0OTFfZ3Bpby0+cGlvY19pZHgsIGlycV9iYXNlKTsKLQlhdDkxX2dwaW8tPmRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xlZ2FjeShOVUxMLCBhdDkxX2dwaW8tPmNoaXAubmdwaW8sCi0JCQkJCQkgIGlycV9iYXNlLCAwLAotCQkJCQkJICAmaXJxX2RvbWFpbl9zaW1wbGVfb3BzLCBOVUxMKTsKLQlpZiAoIWF0OTFfZ3Bpby0+ZG9tYWluKQotCQlwYW5pYygiYXQ5MV9ncGlvLiVkOiBjb3VsZG4ndCBhbGxvY2F0ZSBpcnEgZG9tYWluLlxuIiwKLQkJCWF0OTFfZ3Bpby0+cGlvY19pZHgpOwotfQotCi0vKgotICogQ2FsbGVkIGZyb20gdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBpbml0IHRvIGVuYWJsZSBHUElPIGludGVycnVwdCBzdXBwb3J0LgotICovCi12b2lkIF9faW5pdCBhdDkxX2dwaW9faXJxX3NldHVwKHZvaWQpCi17Ci0JdW5zaWduZWQJCXBpb2M7Ci0JaW50CQkJZ3Bpb19pcnFuYnIgPSAwOwotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcAkqdGhpcywgKnByZXY7Ci0KLQkvKiBTZXR1cCBwcm9wZXIgLmlycV9zZXRfdHlwZSBmdW5jdGlvbiAqLwotCWlmIChoYXNfcGlvMygpKQotCQlncGlvX2lycWNoaXAuaXJxX3NldF90eXBlID0gYWx0X2dwaW9faXJxX3R5cGU7Ci0JZWxzZQotCQlncGlvX2lycWNoaXAuaXJxX3NldF90eXBlID0gZ3Bpb19pcnFfdHlwZTsKLQotCWZvciAocGlvYyA9IDAsIHRoaXMgPSBncGlvX2NoaXAsIHByZXYgPSBOVUxMOwotCQkJcGlvYysrIDwgZ3Bpb19iYW5rczsKLQkJCXByZXYgPSB0aGlzLCB0aGlzKyspIHsKLQkJaW50IG9mZnNldDsKLQotCQlfX3Jhd193cml0ZWwofjAsIHRoaXMtPnJlZ2Jhc2UgKyBQSU9fSURSKTsKLQotCQkvKiBzZXR1cCBpcnEgZG9tYWluIGZvciB0aGlzIEdQSU8gY29udHJvbGxlciAqLwotCQlhdDkxX2dwaW9faXJxZG9tYWluKHRoaXMpOwotCi0JCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgdGhpcy0+Y2hpcC5uZ3Bpbzsgb2Zmc2V0KyspIHsKLQkJCXVuc2lnbmVkIGludCB2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyh0aGlzLT5kb21haW4sIG9mZnNldCk7Ci0JCQlpcnFfc2V0X2xvY2tkZXBfY2xhc3ModmlycSwgJmdwaW9fbG9ja19jbGFzcyk7Ci0KLQkJCS8qCi0JCQkgKiBDYW4gdXNlIHRoZSAic2ltcGxlIiBhbmQgbm90ICJlZGdlIiBoYW5kbGVyIHNpbmNlIGl0J3MKLQkJCSAqIHNob3J0ZXIsIGFuZCB0aGUgQUlDIGhhbmRsZXMgaW50ZXJydXB0cyBzYW5lbHkuCi0JCQkgKi8KLQkJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmZ3Bpb19pcnFjaGlwLAotCQkJCQkJIGhhbmRsZV9zaW1wbGVfaXJxKTsKLQkJCXNldF9pcnFfZmxhZ3ModmlycSwgSVJRRl9WQUxJRCk7Ci0JCQlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCB0aGlzKTsKLQotCQkJZ3Bpb19pcnFuYnIrKzsKLQkJfQotCi0JCS8qIFRoZSB0b3BsZXZlbCBoYW5kbGVyIGhhbmRsZXMgb25lIGJhbmsgb2YgR1BJT3MsIGV4Y2VwdAotCQkgKiBvbiBzb21lIFNvQyBpdCBjYW4gaGFuZGxlcyB1cCB0byB0aHJlZS4uLgotCQkgKiBXZSBvbmx5IHNldCB1cCB0aGUgaGFuZGxlciBmb3IgdGhlIGZpcnN0IG9mIHRoZSBsaXN0LgotCQkgKi8KLQkJaWYgKHByZXYgJiYgcHJldi0+bmV4dCA9PSB0aGlzKQotCQkJY29udGludWU7Ci0KLQkJdGhpcy0+cGlvY192aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKE5VTEwsIHRoaXMtPnBpb2NfaHdpcnEpOwotCQlpcnFfc2V0X2NoaXBfZGF0YSh0aGlzLT5waW9jX3ZpcnEsIHRoaXMpOwotCQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcih0aGlzLT5waW9jX3ZpcnEsIGdwaW9faXJxX2hhbmRsZXIpOwotCX0KLQlwcl9pbmZvKCJBVDkxOiAlZCBncGlvIGlycXMgaW4gJWQgYmFua3NcbiIsIGdwaW9faXJxbmJyLCBncGlvX2JhbmtzKTsKLX0KLQotLyogZ3Bpb2xpYiBzdXBwb3J0ICovCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOwotCXZvaWQgX19pb21lbSAqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOwotCXVuc2lnbmVkIG1hc2sgPSAxIDw8IG9mZnNldDsKLQotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fUEVSKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdDkxX2dwaW9saWJfZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0JdTMyIG9zcjsKLQotCW9zciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19PU1IpOwotCXJldHVybiAhKG9zciAmIG1hc2spOwotfQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCQkJdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gdG9fYXQ5MV9ncGlvX2NoaXAoY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0OwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArIFBJT19PRFIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCi0JCQkJCSB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0KLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHZhbCA/IFBJT19TT0RSIDogUElPX0NPRFIpKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX09FUik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKLQl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0JdTMyIHBkc3I7Ci0KLQlwZHNyID0gX19yYXdfcmVhZGwocGlvICsgUElPX1BEU1IpOwotCXJldHVybiAocGRzciAmIG1hc2spICE9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQotewotCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvID0gdG9fYXQ5MV9ncGlvX2NoaXAoY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7Ci0JdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0OwotCi0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArICh2YWwgPyBQSU9fU09EUiA6IFBJT19DT0RSKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9kYmdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bmdwaW87IGkrKykgewotCQl1bnNpZ25lZCBwaW4gPSBjaGlwLT5iYXNlICsgaTsKLQkJdm9pZCBfX2lvbWVtICpwaW8gPSBwaW5fdG9fY29udHJvbGxlcihwaW4pOwotCQl1bnNpZ25lZCBtYXNrID0gcGluX3RvX21hc2socGluKTsKLQkJY29uc3QgY2hhciAqZ3Bpb19sYWJlbDsKLQotCQlncGlvX2xhYmVsID0gZ3Bpb2NoaXBfaXNfcmVxdWVzdGVkKGNoaXAsIGkpOwotCQlpZiAoZ3Bpb19sYWJlbCkgewotCQkJc2VxX3ByaW50ZihzLCAiWyVzXSBHUElPJXMlZDogIiwKLQkJCQkgICBncGlvX2xhYmVsLCBjaGlwLT5sYWJlbCwgaSk7Ci0JCQlpZiAoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKQotCQkJCXNlcV9wcmludGYocywgIltncGlvXSAlc1xuIiwKLQkJCQkJICAgYXQ5MV9nZXRfZ3Bpb192YWx1ZShwaW4pID8KLQkJCQkJICAgInNldCIgOiAiY2xlYXIiKTsKLQkJCWVsc2UKLQkJCQlzZXFfcHJpbnRmKHMsICJbcGVyaXBoICVjXVxuIiwKLQkJCQkJICAgcGVyaXBoZXJhbF9mdW5jdGlvbihwaW8sIG1hc2spKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBhdDkxX2dwaW9saWJfdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOwotCWludCB2aXJxOwotCi0JaWYgKG9mZnNldCA8IGNoaXAtPm5ncGlvKQotCQl2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKGF0OTFfZ3Bpby0+ZG9tYWluLCBvZmZzZXQpOwotCWVsc2UKLQkJdmlycSA9IC1FTlhJTzsKLQotCWRldl9kYmcoY2hpcC0+ZGV2LCAiJXM6IHJlcXVlc3QgSVJRIGZvciBHUElPICVkLCByZXR1cm4gJWRcbiIsCi0JCQkJY2hpcC0+bGFiZWwsIG9mZnNldCArIGNoaXAtPmJhc2UsIHZpcnEpOwotCXJldHVybiB2aXJxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2dwaW9fc2V0dXBfY2xrKGludCBpZHgpCi17Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSAmZ3Bpb19jaGlwW2lkeF07Ci0KLQkvKiByZXRyZWl2ZSBQSU8gY29udHJvbGxlcidzIGNsb2NrICovCi0JYXQ5MV9ncGlvLT5jbG9jayA9IGNsa19nZXRfc3lzKE5VTEwsIGF0OTFfZ3Bpby0+Y2hpcC5sYWJlbCk7Ci0JaWYgKElTX0VSUihhdDkxX2dwaW8tPmNsb2NrKSkgewotCQlwcl9lcnIoImF0OTFfZ3Bpby4lZCwgZmFpbGVkIHRvIGdldCBjbG9jaywgaWdub3JpbmcuXG4iLCBpZHgpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoY2xrX3ByZXBhcmUoYXQ5MV9ncGlvLT5jbG9jaykpCi0JCWdvdG8gY2xrX3ByZXBfZXJyOwotCi0JLyogZW5hYmxlIFBJTyBjb250cm9sbGVyJ3MgY2xvY2sgKi8KLQlpZiAoY2xrX2VuYWJsZShhdDkxX2dwaW8tPmNsb2NrKSkgewotCQlwcl9lcnIoImF0OTFfZ3Bpby4lZCwgZmFpbGVkIHRvIGVuYWJsZSBjbG9jaywgaWdub3JpbmcuXG4iLCBpZHgpOwotCQlnb3RvIGNsa19lcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWNsa19lcnI6Ci0JY2xrX3VucHJlcGFyZShhdDkxX2dwaW8tPmNsb2NrKTsKLWNsa19wcmVwX2VycjoKLQljbGtfcHV0KGF0OTFfZ3Bpby0+Y2xvY2spOwotZXJyOgotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9ncGlvX2luaXRfb25lKGludCBpZHgsIHUzMiByZWdiYXNlLCBpbnQgcGlvY19od2lycSkKLXsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9ICZncGlvX2NoaXBbaWR4XTsKLQotCWF0OTFfZ3Bpby0+Y2hpcC5iYXNlID0gaWR4ICogTUFYX05CX0dQSU9fUEVSX0JBTks7Ci0JYXQ5MV9ncGlvLT5waW9jX2h3aXJxID0gcGlvY19od2lycTsKLQlhdDkxX2dwaW8tPnBpb2NfaWR4ID0gaWR4OwotCi0JYXQ5MV9ncGlvLT5yZWdiYXNlID0gaW9yZW1hcChyZWdiYXNlLCA1MTIpOwotCWlmICghYXQ5MV9ncGlvLT5yZWdiYXNlKSB7Ci0JCXByX2VycigiYXQ5MV9ncGlvLiVkLCBmYWlsZWQgdG8gbWFwIHJlZ2lzdGVycywgaWdub3JpbmcuXG4iLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGF0OTFfZ3Bpb19zZXR1cF9jbGsoaWR4KSkKLQkJZ290byBpb3JlbWFwX2VycjsKLQotCWdwaW9fYmFua3MgPSBtYXgoZ3Bpb19iYW5rcywgaWR4ICsgMSk7Ci0JcmV0dXJuOwotCi1pb3JlbWFwX2VycjoKLQlpb3VubWFwKGF0OTFfZ3Bpby0+cmVnYmFzZSk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgZnJvbSB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGluaXQgdG8gZW5hYmxlIEdQSU8gcGluIHN1cHBvcnQuCi0gKi8KLXZvaWQgX19pbml0IGF0OTFfZ3Bpb19pbml0KHN0cnVjdCBhdDkxX2dwaW9fYmFuayAqZGF0YSwgaW50IG5yX2JhbmtzKQotewotCXVuc2lnbmVkIGk7Ci0Jc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8sICpsYXN0ID0gTlVMTDsKLQotCUJVR19PTihucl9iYW5rcyA+IE1BWF9HUElPX0JBTktTKTsKLQotCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfYmFua3M7IGkrKykKLQkJYXQ5MV9ncGlvX2luaXRfb25lKGksIGRhdGFbaV0ucmVnYmFzZSwgZGF0YVtpXS5pZCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7Ci0JCWF0OTFfZ3BpbyA9ICZncGlvX2NoaXBbaV07Ci0KLQkJLyoKLQkJICogR1BJTyBjb250cm9sbGVyIGFyZSBncm91cGVkIG9uIHNvbWUgU29DOgotCQkgKiBQSU9DLCBQSU9EIGFuZCBQSU9FIGNhbiBzaGFyZSB0aGUgc2FtZSBJUlEgbGluZQotCQkgKi8KLQkJaWYgKGxhc3QgJiYgbGFzdC0+cGlvY19od2lycSA9PSBhdDkxX2dwaW8tPnBpb2NfaHdpcnEpCi0JCQlsYXN0LT5uZXh0ID0gYXQ5MV9ncGlvOwotCQlsYXN0ID0gYXQ5MV9ncGlvOwotCi0JCWdwaW9jaGlwX2FkZCgmYXQ5MV9ncGlvLT5jaGlwKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVkNDY1YS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgSFAgTGFicwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9BVDkxUk05MjAwX0dQSU9fSAotI2RlZmluZSBfX0FTTV9BUkNIX0FUOTFSTTkyMDBfR1BJT19ICi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNkZWZpbmUgTUFYX0dQSU9fQkFOS1MJCTUKLSNkZWZpbmUgTlJfQlVJTFRJTl9HUElPCQkoTUFYX0dQSU9fQkFOS1MgKiAzMikKLQotLyogdGhlc2UgcGluIG51bWJlcnMgZG91YmxlIGFzIElSUSBudW1iZXJzLCBsaWtlIEFUOTF4eHhfSURfKiB2YWx1ZXMgKi8KLQotI2RlZmluZQlBVDkxX1BJTl9QQTAJKDB4MDAgKyAwKQotI2RlZmluZQlBVDkxX1BJTl9QQTEJKDB4MDAgKyAxKQotI2RlZmluZQlBVDkxX1BJTl9QQTIJKDB4MDAgKyAyKQotI2RlZmluZQlBVDkxX1BJTl9QQTMJKDB4MDAgKyAzKQotI2RlZmluZQlBVDkxX1BJTl9QQTQJKDB4MDAgKyA0KQotI2RlZmluZQlBVDkxX1BJTl9QQTUJKDB4MDAgKyA1KQotI2RlZmluZQlBVDkxX1BJTl9QQTYJKDB4MDAgKyA2KQotI2RlZmluZQlBVDkxX1BJTl9QQTcJKDB4MDAgKyA3KQotI2RlZmluZQlBVDkxX1BJTl9QQTgJKDB4MDAgKyA4KQotI2RlZmluZQlBVDkxX1BJTl9QQTkJKDB4MDAgKyA5KQotI2RlZmluZQlBVDkxX1BJTl9QQTEwCSgweDAwICsgMTApCi0jZGVmaW5lCUFUOTFfUElOX1BBMTEJKDB4MDAgKyAxMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEExMgkoMHgwMCArIDEyKQotI2RlZmluZQlBVDkxX1BJTl9QQTEzCSgweDAwICsgMTMpCi0jZGVmaW5lCUFUOTFfUElOX1BBMTQJKDB4MDAgKyAxNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEExNQkoMHgwMCArIDE1KQotI2RlZmluZQlBVDkxX1BJTl9QQTE2CSgweDAwICsgMTYpCi0jZGVmaW5lCUFUOTFfUElOX1BBMTcJKDB4MDAgKyAxNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEExOAkoMHgwMCArIDE4KQotI2RlZmluZQlBVDkxX1BJTl9QQTE5CSgweDAwICsgMTkpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjAJKDB4MDAgKyAyMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEEyMQkoMHgwMCArIDIxKQotI2RlZmluZQlBVDkxX1BJTl9QQTIyCSgweDAwICsgMjIpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjMJKDB4MDAgKyAyMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEEyNAkoMHgwMCArIDI0KQotI2RlZmluZQlBVDkxX1BJTl9QQTI1CSgweDAwICsgMjUpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjYJKDB4MDAgKyAyNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEEyNwkoMHgwMCArIDI3KQotI2RlZmluZQlBVDkxX1BJTl9QQTI4CSgweDAwICsgMjgpCi0jZGVmaW5lCUFUOTFfUElOX1BBMjkJKDB4MDAgKyAyOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEEzMAkoMHgwMCArIDMwKQotI2RlZmluZQlBVDkxX1BJTl9QQTMxCSgweDAwICsgMzEpCi0KLSNkZWZpbmUJQVQ5MV9QSU5fUEIwCSgweDIwICsgMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxCSgweDIwICsgMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyCSgweDIwICsgMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEIzCSgweDIwICsgMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEI0CSgweDIwICsgNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEI1CSgweDIwICsgNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEI2CSgweDIwICsgNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEI3CSgweDIwICsgNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEI4CSgweDIwICsgOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEI5CSgweDIwICsgOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxMAkoMHgyMCArIDEwKQotI2RlZmluZQlBVDkxX1BJTl9QQjExCSgweDIwICsgMTEpCi0jZGVmaW5lCUFUOTFfUElOX1BCMTIJKDB4MjAgKyAxMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxMwkoMHgyMCArIDEzKQotI2RlZmluZQlBVDkxX1BJTl9QQjE0CSgweDIwICsgMTQpCi0jZGVmaW5lCUFUOTFfUElOX1BCMTUJKDB4MjAgKyAxNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxNgkoMHgyMCArIDE2KQotI2RlZmluZQlBVDkxX1BJTl9QQjE3CSgweDIwICsgMTcpCi0jZGVmaW5lCUFUOTFfUElOX1BCMTgJKDB4MjAgKyAxOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIxOQkoMHgyMCArIDE5KQotI2RlZmluZQlBVDkxX1BJTl9QQjIwCSgweDIwICsgMjApCi0jZGVmaW5lCUFUOTFfUElOX1BCMjEJKDB4MjAgKyAyMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyMgkoMHgyMCArIDIyKQotI2RlZmluZQlBVDkxX1BJTl9QQjIzCSgweDIwICsgMjMpCi0jZGVmaW5lCUFUOTFfUElOX1BCMjQJKDB4MjAgKyAyNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyNQkoMHgyMCArIDI1KQotI2RlZmluZQlBVDkxX1BJTl9QQjI2CSgweDIwICsgMjYpCi0jZGVmaW5lCUFUOTFfUElOX1BCMjcJKDB4MjAgKyAyNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEIyOAkoMHgyMCArIDI4KQotI2RlZmluZQlBVDkxX1BJTl9QQjI5CSgweDIwICsgMjkpCi0jZGVmaW5lCUFUOTFfUElOX1BCMzAJKDB4MjAgKyAzMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEIzMQkoMHgyMCArIDMxKQotCi0jZGVmaW5lCUFUOTFfUElOX1BDMAkoMHg0MCArIDApCi0jZGVmaW5lCUFUOTFfUElOX1BDMQkoMHg0MCArIDEpCi0jZGVmaW5lCUFUOTFfUElOX1BDMgkoMHg0MCArIDIpCi0jZGVmaW5lCUFUOTFfUElOX1BDMwkoMHg0MCArIDMpCi0jZGVmaW5lCUFUOTFfUElOX1BDNAkoMHg0MCArIDQpCi0jZGVmaW5lCUFUOTFfUElOX1BDNQkoMHg0MCArIDUpCi0jZGVmaW5lCUFUOTFfUElOX1BDNgkoMHg0MCArIDYpCi0jZGVmaW5lCUFUOTFfUElOX1BDNwkoMHg0MCArIDcpCi0jZGVmaW5lCUFUOTFfUElOX1BDOAkoMHg0MCArIDgpCi0jZGVmaW5lCUFUOTFfUElOX1BDOQkoMHg0MCArIDkpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTAJKDB4NDAgKyAxMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMxMQkoMHg0MCArIDExKQotI2RlZmluZQlBVDkxX1BJTl9QQzEyCSgweDQwICsgMTIpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTMJKDB4NDAgKyAxMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEMxNAkoMHg0MCArIDE0KQotI2RlZmluZQlBVDkxX1BJTl9QQzE1CSgweDQwICsgMTUpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTYJKDB4NDAgKyAxNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEMxNwkoMHg0MCArIDE3KQotI2RlZmluZQlBVDkxX1BJTl9QQzE4CSgweDQwICsgMTgpCi0jZGVmaW5lCUFUOTFfUElOX1BDMTkJKDB4NDAgKyAxOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyMAkoMHg0MCArIDIwKQotI2RlZmluZQlBVDkxX1BJTl9QQzIxCSgweDQwICsgMjEpCi0jZGVmaW5lCUFUOTFfUElOX1BDMjIJKDB4NDAgKyAyMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyMwkoMHg0MCArIDIzKQotI2RlZmluZQlBVDkxX1BJTl9QQzI0CSgweDQwICsgMjQpCi0jZGVmaW5lCUFUOTFfUElOX1BDMjUJKDB4NDAgKyAyNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyNgkoMHg0MCArIDI2KQotI2RlZmluZQlBVDkxX1BJTl9QQzI3CSgweDQwICsgMjcpCi0jZGVmaW5lCUFUOTFfUElOX1BDMjgJKDB4NDAgKyAyOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEMyOQkoMHg0MCArIDI5KQotI2RlZmluZQlBVDkxX1BJTl9QQzMwCSgweDQwICsgMzApCi0jZGVmaW5lCUFUOTFfUElOX1BDMzEJKDB4NDAgKyAzMSkKLQotI2RlZmluZQlBVDkxX1BJTl9QRDAJKDB4NjAgKyAwKQotI2RlZmluZQlBVDkxX1BJTl9QRDEJKDB4NjAgKyAxKQotI2RlZmluZQlBVDkxX1BJTl9QRDIJKDB4NjAgKyAyKQotI2RlZmluZQlBVDkxX1BJTl9QRDMJKDB4NjAgKyAzKQotI2RlZmluZQlBVDkxX1BJTl9QRDQJKDB4NjAgKyA0KQotI2RlZmluZQlBVDkxX1BJTl9QRDUJKDB4NjAgKyA1KQotI2RlZmluZQlBVDkxX1BJTl9QRDYJKDB4NjAgKyA2KQotI2RlZmluZQlBVDkxX1BJTl9QRDcJKDB4NjAgKyA3KQotI2RlZmluZQlBVDkxX1BJTl9QRDgJKDB4NjAgKyA4KQotI2RlZmluZQlBVDkxX1BJTl9QRDkJKDB4NjAgKyA5KQotI2RlZmluZQlBVDkxX1BJTl9QRDEwCSgweDYwICsgMTApCi0jZGVmaW5lCUFUOTFfUElOX1BEMTEJKDB4NjAgKyAxMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQxMgkoMHg2MCArIDEyKQotI2RlZmluZQlBVDkxX1BJTl9QRDEzCSgweDYwICsgMTMpCi0jZGVmaW5lCUFUOTFfUElOX1BEMTQJKDB4NjAgKyAxNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQxNQkoMHg2MCArIDE1KQotI2RlZmluZQlBVDkxX1BJTl9QRDE2CSgweDYwICsgMTYpCi0jZGVmaW5lCUFUOTFfUElOX1BEMTcJKDB4NjAgKyAxNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEQxOAkoMHg2MCArIDE4KQotI2RlZmluZQlBVDkxX1BJTl9QRDE5CSgweDYwICsgMTkpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjAJKDB4NjAgKyAyMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQyMQkoMHg2MCArIDIxKQotI2RlZmluZQlBVDkxX1BJTl9QRDIyCSgweDYwICsgMjIpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjMJKDB4NjAgKyAyMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEQyNAkoMHg2MCArIDI0KQotI2RlZmluZQlBVDkxX1BJTl9QRDI1CSgweDYwICsgMjUpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjYJKDB4NjAgKyAyNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEQyNwkoMHg2MCArIDI3KQotI2RlZmluZQlBVDkxX1BJTl9QRDI4CSgweDYwICsgMjgpCi0jZGVmaW5lCUFUOTFfUElOX1BEMjkJKDB4NjAgKyAyOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEQzMAkoMHg2MCArIDMwKQotI2RlZmluZQlBVDkxX1BJTl9QRDMxCSgweDYwICsgMzEpCi0KLSNkZWZpbmUJQVQ5MV9QSU5fUEUwCSgweDgwICsgMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxCSgweDgwICsgMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyCSgweDgwICsgMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEUzCSgweDgwICsgMykKLSNkZWZpbmUJQVQ5MV9QSU5fUEU0CSgweDgwICsgNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEU1CSgweDgwICsgNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEU2CSgweDgwICsgNikKLSNkZWZpbmUJQVQ5MV9QSU5fUEU3CSgweDgwICsgNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEU4CSgweDgwICsgOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEU5CSgweDgwICsgOSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxMAkoMHg4MCArIDEwKQotI2RlZmluZQlBVDkxX1BJTl9QRTExCSgweDgwICsgMTEpCi0jZGVmaW5lCUFUOTFfUElOX1BFMTIJKDB4ODAgKyAxMikKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxMwkoMHg4MCArIDEzKQotI2RlZmluZQlBVDkxX1BJTl9QRTE0CSgweDgwICsgMTQpCi0jZGVmaW5lCUFUOTFfUElOX1BFMTUJKDB4ODAgKyAxNSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxNgkoMHg4MCArIDE2KQotI2RlZmluZQlBVDkxX1BJTl9QRTE3CSgweDgwICsgMTcpCi0jZGVmaW5lCUFUOTFfUElOX1BFMTgJKDB4ODAgKyAxOCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUxOQkoMHg4MCArIDE5KQotI2RlZmluZQlBVDkxX1BJTl9QRTIwCSgweDgwICsgMjApCi0jZGVmaW5lCUFUOTFfUElOX1BFMjEJKDB4ODAgKyAyMSkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyMgkoMHg4MCArIDIyKQotI2RlZmluZQlBVDkxX1BJTl9QRTIzCSgweDgwICsgMjMpCi0jZGVmaW5lCUFUOTFfUElOX1BFMjQJKDB4ODAgKyAyNCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyNQkoMHg4MCArIDI1KQotI2RlZmluZQlBVDkxX1BJTl9QRTI2CSgweDgwICsgMjYpCi0jZGVmaW5lCUFUOTFfUElOX1BFMjcJKDB4ODAgKyAyNykKLSNkZWZpbmUJQVQ5MV9QSU5fUEUyOAkoMHg4MCArIDI4KQotI2RlZmluZQlBVDkxX1BJTl9QRTI5CSgweDgwICsgMjkpCi0jZGVmaW5lCUFUOTFfUElOX1BFMzAJKDB4ODAgKyAzMCkKLSNkZWZpbmUJQVQ5MV9QSU5fUEUzMQkoMHg4MCArIDMxKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotLyogc2V0dXAgc2V0dXAgcm91dGluZXMsIGNhbGxlZCBmcm9tIGJvYXJkIGluaXQgb3IgZHJpdmVyIHByb2JlKCkgKi8KLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9HUElPX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9BX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9CX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9DX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9EX3BlcmlwaCh1bnNpZ25lZCBwaW4sIGludCB1c2VfcHVsbHVwKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9ncGlvX2lucHV0KHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOwotZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2dwaW9fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9kZWdsaXRjaCh1bnNpZ25lZCBwaW4sIGludCBpc19vbik7Ci1leHRlcm4gaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZGVib3VuY2UodW5zaWduZWQgcGluLCBpbnQgaXNfb24sIGludCBkaXYpOwotZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X211bHRpX2RyaXZlKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKTsKLWV4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9wdWxsZG93bih1bnNpZ25lZCBwaW4sIGludCBpc19vbik7Ci1leHRlcm4gaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9kaXNhYmxlX3NjaG1pdHRfdHJpZyh1bnNpZ25lZCBwaW4pOwotCi0vKiBjYWxsYWJsZSBhdCBhbnkgdGltZSAqLwotZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKTsKLWV4dGVybiBpbnQgYXQ5MV9nZXRfZ3Bpb192YWx1ZSh1bnNpZ25lZCBwaW4pOwotCi0vKiBjYWxsYWJsZSBvbmx5IGZyb20gY29yZSBwb3dlci1tYW5hZ2VtZW50IGNvZGUgKi8KLWV4dGVybiB2b2lkIGF0OTFfZ3Bpb19zdXNwZW5kKHZvaWQpOwotZXh0ZXJuIHZvaWQgYXQ5MV9ncGlvX3Jlc3VtZSh2b2lkKTsKLQotI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nc2lhMThzLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3NpYTE4cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDdjMTk0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nc2lhMThzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKiBCdXR0b25zICovCi0jZGVmaW5lIEdQSU9fVFJJR19ORVRfSU4JCUFUOTFfUElOX1BCMjEKLSNkZWZpbmUgR1BJT19DQVJEX1VOTU9VTlRfMAkJQVQ5MV9QSU5fUEIxMwotI2RlZmluZSBHUElPX0NBUkRfVU5NT1VOVF8xCQlBVDkxX1BJTl9QQjEyCi0jZGVmaW5lIEdQSU9fS0VZX1BPV0VSCQkJQVQ5MV9QSU5fUEEyNQotCi0vKiBQQ0Y4NTc0IDB4MjAgR1BJTyAtIFUxIG9uIHRoZSBHU19JQTE4LUNCX1YzIGJvYXJkICovCi0jZGVmaW5lIEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMAlOUl9CVUlMVElOX0dQSU8KLSNkZWZpbmUgUENGX0dQSU9fSERDX1BPV0VSCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UwICsgMCkKLSNkZWZpbmUgUENGX0dQSU9fV0lGSV9TRVRVUAkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDEpCi0jZGVmaW5lIFBDRl9HUElPX1dJRklfRU5BQkxFCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UwICsgMikKLSNkZWZpbmUgUENGX0dQSU9fV0lGSV9SRVNFVAkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDMpCi0jZGVmaW5lIFBDRl9HUElPX0VUSF9ERVRFQ1QJCTQgLyogdGhpcyBpcyBhIEdQSSAqLwotI2RlZmluZSBQQ0ZfR1BJT19HUFNfU0VUVVAJCShHU19JQTE4X1NfUENGX0dQSU9fQkFTRTAgKyA1KQotI2RlZmluZSBQQ0ZfR1BJT19HUFNfU1RBTkRCWQkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDYpCi0jZGVmaW5lIFBDRl9HUElPX0dQU19QT1dFUgkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMCArIDcpCi0KLS8qIFBDRjg1NzQgMHgyMiBHUElPIC0gVTEgb24gdGhlIEdTXzJHX09QVDEtQV9WMCBib2FyZCAoQWxhcm0pICovCi0jZGVmaW5lIEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UwICsgOCkKLSNkZWZpbmUgUENGX0dQSU9fQUxBUk0xCQkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMSArIDApCi0jZGVmaW5lIFBDRl9HUElPX0FMQVJNMgkJCShHU19JQTE4X1NfUENGX0dQSU9fQkFTRTEgKyAxKQotI2RlZmluZSBQQ0ZfR1BJT19BTEFSTTMJCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UxICsgMikKLSNkZWZpbmUgUENGX0dQSU9fQUxBUk00CQkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMSArIDMpCi0vKiBiaXRzIDQsIDUsIDYgbm90IHVzZWQgKi8KLSNkZWZpbmUgUENGX0dQSU9fQUxBUk1fVl9SRUxBWV9PTgkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UxICsgNykKLQotLyogUENGODU3NCAweDI0IEdQSU8gVTEgb24gdGhlIEdTXzJHLU9QVDIzLUFfVjAgYm9hcmQgKE1vZGVtKSAqLwotI2RlZmluZSBHU19JQTE4X1NfUENGX0dQSU9fQkFTRTIJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMSArIDgpCi0jZGVmaW5lIFBDRl9HUElPX01PREVNX1BPV0VSCQkoR1NfSUExOF9TX1BDRl9HUElPX0JBU0UyICsgMCkKLSNkZWZpbmUgUENGX0dQSU9fTU9ERU1fUkVTRVQJCShHU19JQTE4X1NfUENGX0dQSU9fQkFTRTIgKyAzKQotLyogYml0cyAxLCAyLCA0LCA1IG5vdCB1c2VkICovCi0jZGVmaW5lIFBDRl9HUElPX1RSWF9SRVNFVAkJKEdTX0lBMThfU19QQ0ZfR1BJT19CQVNFMiArIDYpCi0vKiBiaXQgNyBub3QgdXNlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX2RiZ3UuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9kYmd1LmgKaW5kZXggM2I1OTQ4NS4uNDI5MjVlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX2RiZ3UuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfZGJndS5oCkBAIC0xNiw3ICsxNiw2IEBACiAjaWZuZGVmIEFUOTFfREJHVV9ICiAjZGVmaW5lIEFUOTFfREJHVV9ICiAKLSNpZiAhZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQogI2RlZmluZSBBVDkxX0RCR1VfQ1IJCSgweDAwKQkvKiBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIEFUOTFfREJHVV9NUgkJKDB4MDQpCS8qIE1vZGUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQVQ5MV9EQkdVX0lFUgkJKDB4MDgpCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KQEAgLTM0LDggKzMzLDYgQEAKICNkZWZpbmUgQVQ5MV9EQkdVX0ZOUgkJKDB4NDgpCS8qIEZvcmNlIE5UUlNUIFJlZ2lzdGVyIFtTQU05IG9ubHldICovCiAjZGVmaW5lCQlBVDkxX0RCR1VfRk5UUlNUCSgxIDw8IDApCQkvKiBGb3JjZSBOVFJTVCAqLwogCi0jZW5kaWYgLyogQVQ5MV9EQkdVICovCi0KIC8qCiAgKiBTb21lIEFUOTEgcGFydHMgdGhhdCBkb24ndCBoYXZlIGZ1bGwgREVCVUcgdW5pdHMgc3RpbGwgc3VwcG9ydCB0aGUgSUQKICAqIGFuZCBleHRlbnNpb25zIHJlZ2lzdGVyLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3JhbWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9yYW1jLmgKaW5kZXggZDhhZWIyNy4uZTQ0OTJiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3JhbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfcmFtYy5oCkBAIC0yNSw4ICsyNSw4IEBACiAjZGVmaW5lIEFUOTFfTUVNQ1RSTF9TRFJBTUMJMQogI2RlZmluZSBBVDkxX01FTUNUUkxfRERSU0RSCTIKIAotI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9zZHJhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X2RkcnNkci5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc2RyYW1jLmg+CisjaW5jbHVkZSA8c29jL2F0OTEvYXQ5MXJtOTIwMF9zZHJhbWMuaD4KKyNpbmNsdWRlIDxzb2MvYXQ5MS9hdDkxc2FtOV9kZHJzZHIuaD4KKyNpbmNsdWRlIDxzb2MvYXQ5MS9hdDkxc2FtOV9zZHJhbWMuaD4KIAogI2VuZGlmIC8qIF9fQVQ5MV9SQU1DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxeDQwLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTF4NDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkY2EyYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTF4NDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTF4NDAuaAotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNywgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgQVQ5MVg0MF9ICi0jZGVmaW5lIEFUOTFYNDBfSAotCi0vKgotICoJSVJRIGxpc3QuCi0gKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9VU0FSVDAJMgkvKiBVU0FSVCBwb3J0IDAgKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9VU0FSVDEJMwkvKiBVU0FSVCBwb3J0IDEgKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9UQzAJCTQJLyogVGltZXIvQ291bnRlciAwICovCi0jZGVmaW5lIEFUOTFYNDBfSURfVEMxCQk1CS8qIFRpbWVyL0NvdW50ZXIgMSovCi0jZGVmaW5lIEFUOTFYNDBfSURfVEMyCQk2CS8qIFRpbWVyL0NvdW50ZXIgMiovCi0jZGVmaW5lIEFUOTFYNDBfSURfV0QJCTcJLyogV2F0Y2hkb2c/ICovCi0jZGVmaW5lIEFUOTFYNDBfSURfUElPQQkJOAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLQotI2RlZmluZSBBVDkxWDQwX0lEX0lSUTAJCTE2CS8qIEV4dGVybmFsIElSUSAwICovCi0jZGVmaW5lIEFUOTFYNDBfSURfSVJRMQkJMTcJLyogRXh0ZXJuYWwgSVJRIDEgKi8KLSNkZWZpbmUgQVQ5MVg0MF9JRF9JUlEyCQkxOAkvKiBFeHRlcm5hbCBJUlEgMiAqLwotCi0vKgotICogU3lzdGVtIFBlcmlwaGVyYWxzCi0gKi8KLSNkZWZpbmUgQVQ5MV9CQVNFX1NZUwkweGZmYzAwMDAwCi0KLSNkZWZpbmUgQVQ5MV9FQkkJMHhmZmUwMDAwMAkvKiBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlICovCi0jZGVmaW5lIEFUOTFfU0YJCTB4ZmZmMDAwMDAJLyogU3BlY2lhbCBGdW5jdGlvbiAqLwotI2RlZmluZSBBVDkxX1VTQVJUMQkweGZmZmNjMDAwCS8qIFVTQVJUIDEgKi8KLSNkZWZpbmUgQVQ5MV9VU0FSVDAJMHhmZmZkMDAwMAkvKiBVU0FSVCAwICovCi0jZGVmaW5lIEFUOTFfVEMJCTB4ZmZmZTAwMDAJLyogVGltZXIgQ291bnRlciAqLwotI2RlZmluZSBBVDkxX1BJT0EJMHhmZmZmMDAwMAkvKiBQSU8gQ29udHJvbGxlciBBICovCi0jZGVmaW5lIEFUOTFfUFMJCTB4ZmZmZjQwMDAJLyogUG93ZXIgU2F2ZSAqLwotI2RlZmluZSBBVDkxX1dECQkweGZmZmY4MDAwCS8qIFdhdGNoZG9nIFRpbWVyICovCi0KLS8qCi0gKiBUaGUgQVQ5MXg0MCBzZXJpZXMgZG9lc24ndCBoYXZlIGEgZGVidWcgdW5pdCBsaWtlIHRoZSBvdGhlciBBVDkxIHBhcnRzLgotICogQnV0IGl0IGRvZXMgaGF2ZSBhIGNoaXAgaWRlbnRpZnkgcmVnaXN0ZXIgYW5kIGV4dGVuc2lvbiBJRCwgc28gZGVmaW5lIGF0Ci0gKiBsZWFzdCB0aGVzZSBoZXJlLgotICovCi0jZGVmaW5lIEFUOTFfREJHVV9DSURSCShBVDkxX1NGICsgMCkJLyogQ0lEUiBpbiBQUyBzZWdtZW50ICovCi0jZGVmaW5lIEFUOTFfREJHVV9FWElECShBVDkxX1NGICsgNCkJLyogRVhJRCBpbiBQUyBzZWdtZW50ICovCi0KLS8qCi0gKiBTdXBwb3J0IGRlZmluZXMgZm9yIHRoZSBzaW1wbGUgUG93ZXIgQ29udHJvbGxlciBtb2R1bGUuCi0gKi8KLSNkZWZpbmUJQVQ5MV9QU19DUgkoQVQ5MV9QUyArIDApCS8qIFBTIENvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJQVQ5MV9QU19DUl9DUFUJKDEgPDwgMCkJLyogQ1BVIGNsb2NrIGRpc2FibGUgYml0ICovCi0KLSNkZWZpbmUgQVQ5MVg0MF9NQVNURVJfQ0xPQ0sJNDAwMDAwMDAKLQotI2VuZGlmIC8qIEFUOTFYNDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXRtZWwtbWNpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNjllNDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgX19NQUNIX0FUTUVMX01DSV9ICi0jZGVmaW5lIF9fTUFDSF9BVE1FTF9NQ0lfSAotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtYXRtZWwuaD4KLQotLyoqCi0gKiBzdHJ1Y3QgbWNpX2RtYV9kYXRhIC0gRE1BIGRhdGEgZm9yIE1DSSBpbnRlcmZhY2UKLSAqLwotc3RydWN0IG1jaV9kbWFfZGF0YSB7Ci0Jc3RydWN0IGF0X2RtYV9zbGF2ZQlzZGF0YTsKLX07Ci0KLS8qIGFjY2Vzc29yIG1hY3JvcyAqLwotI2RlZmluZQlzbGF2ZV9kYXRhX3B0cihzKQkoJihzKS0+c2RhdGEpCi0jZGVmaW5lIGZpbmRfc2xhdmVfZGV2KHMpCSgocyktPnNkYXRhLmRtYV9kZXYpCi0KLSNlbmRpZiAvKiBfX01BQ0hfQVRNRUxfTUNJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IGIyN2U5Y2EuLjYxOTE0ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtNjIsNyArNjIsNiBAQAogI2RlZmluZSBBUkNIX0VYSURfU0FNQTVENDMJMHgwMDAwMDAwMwogI2RlZmluZSBBUkNIX0VYSURfU0FNQTVENDQJMHgwMDAwMDAwNAogCi0jZGVmaW5lIEFSQ0hfRkFNSUxZX0FUOTFYOTIJMHgwOTIwMDAwMAogI2RlZmluZSBBUkNIX0ZBTUlMWV9BVDkxU0FNOQkweDAxOTAwMDAwCiAjZGVmaW5lIEFSQ0hfRkFNSUxZX0FUOTFTQU05WEUJMHgwMjkwMDAwMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggYzEzNzk3My4uY2FjYmFhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMjQsOSArMjQsNiBAQAogLyogc2FtYTVkNCAqLwogI2RlZmluZSBBVDkxX0JBU0VfREJHVTIJMHhmYzA2OTAwMAogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQotI2luY2x1ZGUgPG1hY2gvYXQ5MXg0MC5oPgotI2Vsc2UKICNpbmNsdWRlIDxtYWNoL2F0OTFybTkyMDAuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYwLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOTI2MS5oPgpAQCAtNTEsOCArNDgsNiBAQAogICovCiAjZGVmaW5lIEFUOTFfQkFTRV9TWVMJMHhmZmZmYzAwMAogCi0jZW5kaWYKLQogLyoKICAqIE9uIHNhbWE1ZDQgdGhlcmUgaXMgbm8gc3lzdGVtIGNvbnRyb2xsZXIsIHdlIG1hcCBzb21lIG5lZWRlZCBwZXJpcGhlcmFscwogICovCkBAIC0xMzIsMTMgKzEyNyw4IEBACiAgKiBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZ2VuZXJpYyBzdXNwZW5kL3Jlc3VtZSBwYXRoLgogICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2lmZGVmIENPTkZJR19QSU5DVFJMX0FUOTEKIGV4dGVybiB2b2lkIGF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQodm9pZCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUodm9pZCkge30KLSNlbmRpZgogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBhY2IyZDg5MC4uNGViYjYwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTMxLDcgKzMxLDYgQEAKIAogdm9pZCBfX2lvbWVtICphdDkxX3VhcnQ7CiAKLSNpZiAhZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQogc3RhdGljIGNvbnN0IHUzMiB1YXJ0c19ybTkyMDBbXSA9IHsKIAlBVDkxX0JBU0VfREJHVTAsCiAJQVQ5MVJNOTIwMF9CQVNFX1VTMCwKQEAgLTE4OCwxMiArMTg3LDYgQEAKIAogCWF0OTFfdWFydCA9IE5VTEw7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCi17Ci0JYXQ5MV91YXJ0ID0gTlVMTDsKLX0KLSNlbmRpZgogCiAvKgogICogVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhlIHNlcmlhbCBwb3J0IGhhcyBhbHJlYWR5IGJlZW4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RiM2VjOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9pcnEuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgU0FOIFBlb3BsZQotICogIENvcHlyaWdodCAoQykgMjAwNCBBVE1FTAotICogIENvcHlyaWdodCAoQykgUmljayBCcm9uc29uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0KLSNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSAiYXQ5MV9haWMuaCIKLQotdm9pZCBfX2lvbWVtICphdDkxX2FpY19iYXNlOwotc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluICphdDkxX2FpY19kb21haW47Ci1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICphdDkxX2FpY19ucDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbl9pcnFzID0gTlJfQUlDX0lSUVM7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgKndha2V1cHM7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyAqYmFja3VwczsKLQotI2RlZmluZSBzZXRfYmFja3VwKGJpdCkgc2V0X2JpdChiaXQsIGJhY2t1cHMpCi0jZGVmaW5lIGNsZWFyX2JhY2t1cChiaXQpIGNsZWFyX2JpdChiaXQsIGJhY2t1cHMpCi0KLXN0YXRpYyBpbnQgYXQ5MV9haWNfcG1faW5pdCh2b2lkKQotewotCWJhY2t1cHMgPSBremFsbG9jKEJJVFNfVE9fTE9OR1Mobl9pcnFzKSAqIHNpemVvZigqYmFja3VwcyksIEdGUF9LRVJORUwpOwotCWlmICghYmFja3VwcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl3YWtldXBzID0ga3phbGxvYyhCSVRTX1RPX0xPTkdTKG5faXJxcykgKiBzaXplb2YoKmJhY2t1cHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdha2V1cHMpIHsKLQkJa2ZyZWUoYmFja3Vwcyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0OTFfYWljX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdmFsdWUpCi17Ci0JaWYgKHVubGlrZWx5KGQtPmh3aXJxID49IG5faXJxcykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHZhbHVlKQotCQlzZXRfYml0KGQtPmh3aXJxLCB3YWtldXBzKTsKLQllbHNlCi0JCWNsZWFyX2JpdChkLT5od2lycSwgd2FrZXVwcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBhdDkxX2lycV9zdXNwZW5kKHZvaWQpCi17Ci0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfSURDUiwgKmJhY2t1cHMpOwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX0lFQ1IsICp3YWtldXBzKTsKLX0KLQotdm9pZCBhdDkxX2lycV9yZXN1bWUodm9pZCkKLXsKLQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19JRENSLCAqd2FrZXVwcyk7Ci0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfSUVDUiwgKmJhY2t1cHMpOwotfQotCi0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgYXQ5MV9haWNfcG1faW5pdCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIHNldF9iYWNrdXAoYml0KQotI2RlZmluZSBjbGVhcl9iYWNrdXAoYml0KQotI2RlZmluZSBhdDkxX2FpY19zZXRfd2FrZQlOVUxMCi0KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uX2lycV9lbnRyeQotYXQ5MV9haWNfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1MzIgaXJxbnI7Ci0JdTMyIGlycXN0YXQ7Ci0KLQlpcnFuciA9IGF0OTFfYWljX3JlYWQoQVQ5MV9BSUNfSVZSKTsKLQlpcnFzdGF0ID0gYXQ5MV9haWNfcmVhZChBVDkxX0FJQ19JU1IpOwotCi0JLyoKLQkgKiBJU1IgdmFsdWUgaXMgMCB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW50ZXJydXB0IG9yIHdoZW4gdGhlcmUgaXMKLQkgKiBhIHNwdXJpb3VzIGludGVycnVwdAotCSAqLwotCWlmICghaXJxc3RhdCkKLQkJYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRU9JQ1IsIDApOwotCWVsc2UKLQkJaGFuZGxlX0lSUShpcnFuciwgcmVncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfYWljX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQkvKiBEaXNhYmxlIGludGVycnVwdCBvbiBBSUMgKi8KLQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19JRENSLCAxIDw8IGQtPmh3aXJxKTsKLQkvKiBVcGRhdGUgSVNSIGNhY2hlICovCi0JY2xlYXJfYmFja3VwKGQtPmh3aXJxKTsKLX0KLQotc3RhdGljIHZvaWQgYXQ5MV9haWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JLyogRW5hYmxlIGludGVycnVwdCBvbiBBSUMgKi8KLQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19JRUNSLCAxIDw8IGQtPmh3aXJxKTsKLQkvKiBVcGRhdGUgSVNSIGNhY2hlICovCi0Jc2V0X2JhY2t1cChkLT5od2lycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFfYWljX2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JLyoKLQkgKiBNYXJrIGVuZC1vZi1pbnRlcnJ1cHQgb24gQUlDLCB0aGUgY29udHJvbGxlciBkb2Vzbid0IGNhcmUgYWJvdXQKLQkgKiB0aGUgdmFsdWUgd3JpdHRlbi4gTW9yZW92ZXIgaXQncyBhIHdyaXRlLW9ubHkgcmVnaXN0ZXIuCi0JICovCi0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRU9JQ1IsIDApOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAqYXQ5MV9leHRlcm5faXJxOwotCi11MzIgYXQ5MV9nZXRfZXh0ZXJuX2lycSh2b2lkKQotewotCWlmICghYXQ5MV9leHRlcm5faXJxKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gKmF0OTFfZXh0ZXJuX2lycTsKLX0KLQotI2RlZmluZSBpc19leHRlcm5faXJxKGh3aXJxKSB0ZXN0X2JpdChod2lycSwgYXQ5MV9leHRlcm5faXJxKQotCi1zdGF0aWMgaW50IGF0OTFfYWljX2NvbXB1dGVfc3JjdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIHR5cGUpCi17Ci0JaW50IHNyY3R5cGU7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6Ci0JCXNyY3R5cGUgPSBBVDkxX0FJQ19TUkNUWVBFX0hJR0g7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6Ci0JCXNyY3R5cGUgPSBBVDkxX0FJQ19TUkNUWVBFX1JJU0lORzsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6Ci0JCWlmICgoZC0+aHdpcnEgPT0gQVQ5MV9JRF9GSVEpIHx8IGlzX2V4dGVybl9pcnEoZC0+aHdpcnEpKQkJLyogb25seSBzdXBwb3J0ZWQgb24gZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwotCQkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfTE9XOwotCQllbHNlCi0JCQlzcmN0eXBlID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JCWlmICgoZC0+aHdpcnEgPT0gQVQ5MV9JRF9GSVEpIHx8IGlzX2V4dGVybl9pcnEoZC0+aHdpcnEpKQkJLyogb25seSBzdXBwb3J0ZWQgb24gZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwotCQkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfRkFMTElORzsKLQkJZWxzZQotCQkJc3JjdHlwZSA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNyY3R5cGUgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiBzcmN0eXBlOwotfQotCi1zdGF0aWMgaW50IGF0OTFfYWljX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgdHlwZSkKLXsKLQl1bnNpZ25lZCBpbnQgc21yOwotCWludCBzcmN0eXBlOwotCi0Jc3JjdHlwZSA9IGF0OTFfYWljX2NvbXB1dGVfc3JjdHlwZShkLCB0eXBlKTsKLQlpZiAoc3JjdHlwZSA8IDApCi0JCXJldHVybiBzcmN0eXBlOwotCi0Jc21yID0gYXQ5MV9haWNfcmVhZChBVDkxX0FJQ19TTVIoZC0+aHdpcnEpKSAmIH5BVDkxX0FJQ19TUkNUWVBFOwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX1NNUihkLT5od2lycSksIHNtciB8IHNyY3R5cGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYXQ5MV9haWNfY2hpcCA9IHsKLQkubmFtZQkJPSAiQUlDIiwKLQkuaXJxX21hc2sJPSBhdDkxX2FpY19tYXNrX2lycSwKLQkuaXJxX3VubWFzawk9IGF0OTFfYWljX3VubWFza19pcnEsCi0JLmlycV9zZXRfdHlwZQk9IGF0OTFfYWljX3NldF90eXBlLAotCS5pcnFfc2V0X3dha2UJPSBhdDkxX2FpY19zZXRfd2FrZSwKLQkuaXJxX2VvaQk9IGF0OTFfYWljX2VvaSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FpY19od19pbml0KHVuc2lnbmVkIGludCBzcHVfdmVjdG9yKQotewotCWludCBpOwotCi0JLyoKLQkgKiBQZXJmb3JtIDggRW5kIE9mIEludGVycnVwdCBDb21tYW5kIHRvIG1ha2Ugc3VyZSBBSUMKLQkgKiB3aWxsIG5vdCBMb2NrIG91dCBuSVJRCi0JICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRU9JQ1IsIDApOwotCi0JLyoKLQkgKiBTcHVyaW91cyBJbnRlcnJ1cHQgSUQgaW4gU3B1cmlvdXMgVmVjdG9yIFJlZ2lzdGVyLgotCSAqIFdoZW4gdGhlcmUgaXMgbm8gY3VycmVudCBpbnRlcnJ1cHQsIHRoZSBJUlEgVmVjdG9yIFJlZ2lzdGVyCi0JICogcmVhZHMgdGhlIHZhbHVlIHN0b3JlZCBpbiBBSUNfU1BVCi0JICovCi0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfU1BVLCBzcHVfdmVjdG9yKTsKLQotCS8qIE5vIGRlYnVnZ2luZyBpbiBBSUM6IERlYnVnIChQcm90ZWN0KSBDb250cm9sIFJlZ2lzdGVyICovCi0JYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfRENSLCAwKTsKLQotCS8qIERpc2FibGUgYW5kIGNsZWFyIGFsbCBpbnRlcnJ1cHRzIGluaXRpYWxseSAqLwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX0lEQ1IsIDB4RkZGRkZGRkYpOwotCWF0OTFfYWljX3dyaXRlKEFUOTFfQUlDX0lDQ1IsIDB4RkZGRkZGRkYpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgQUlDIGludGVycnVwdCBjb250cm9sbGVyLgotICovCi12b2lkIF9faW5pdCBhdDkxX2FpY19pbml0KHVuc2lnbmVkIGludCAqcHJpb3JpdHksIHVuc2lnbmVkIGludCBleHRfaXJxX21hc2spCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IGlycV9iYXNlOwotCi0JYXQ5MV9leHRlcm5faXJxID0ga3phbGxvYyhCSVRTX1RPX0xPTkdTKG5faXJxcykKLQkJCQkgICogc2l6ZW9mKCphdDkxX2V4dGVybl9pcnEpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChhdDkxX2FpY19wbV9pbml0KCkgfHwgYXQ5MV9leHRlcm5faXJxID09IE5VTEwpCi0JCXBhbmljKCJVbmFibGUgdG8gYWxsb2NhdGUgYml0IG1hcHNcbiIpOwotCi0JKmF0OTFfZXh0ZXJuX2lycSA9IGV4dF9pcnFfbWFzazsKLQotCWF0OTFfYWljX2Jhc2UgPSBpb3JlbWFwKEFUOTFfQUlDLCA1MTIpOwotCWlmICghYXQ5MV9haWNfYmFzZSkKLQkJcGFuaWMoIlVuYWJsZSB0byBpb3JlbWFwIEFJQyByZWdpc3RlcnNcbiIpOwotCi0JLyogQWRkIGlycSBkb21haW4gZm9yIEFJQyAqLwotCWlycV9iYXNlID0gaXJxX2FsbG9jX2Rlc2NzKC0xLCAwLCBuX2lycXMsIDApOwotCWlmIChpcnFfYmFzZSA8IDApIHsKLQkJV0FSTigxLCAiQ2Fubm90IGFsbG9jYXRlIGlycV9kZXNjcywgYXNzdW1pbmcgcHJlLWFsbG9jYXRlZFxuIik7Ci0JCWlycV9iYXNlID0gMDsKLQl9Ci0JYXQ5MV9haWNfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGVnYWN5KGF0OTFfYWljX25wLCBuX2lycXMsCi0JCQkJCQlpcnFfYmFzZSwgMCwKLQkJCQkJCSZpcnFfZG9tYWluX3NpbXBsZV9vcHMsIE5VTEwpOwotCi0JaWYgKCFhdDkxX2FpY19kb21haW4pCi0JCXBhbmljKCJVbmFibGUgdG8gYWRkIEFJQyBpcnEgZG9tYWluXG4iKTsKLQotCWlycV9zZXRfZGVmYXVsdF9ob3N0KGF0OTFfYWljX2RvbWFpbik7Ci0KLQkvKgotCSAqIFRoZSBJVlIgaXMgdXNlZCBieSBtYWNybyBnZXRfaXJxbnJfYW5kX2Jhc2UgdG8gcmVhZCBhbmQgdmVyaWZ5LgotCSAqIFRoZSBpcnEgbnVtYmVyIGlzIE5SX0FJQ19JUlFTIHdoZW4gYSBzcHVyaW91cyBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBuX2lycXM7IGkrKykgewotCQkvKiBQdXQgaGFyZHdhcmUgaXJxIG51bWJlciBpbiBTb3VyY2UgVmVjdG9yIFJlZ2lzdGVyOiAqLwotCQlhdDkxX2FpY193cml0ZShBVDkxX0FJQ19TVlIoaSksIE5SX0lSUVNfTEVHQUNZICsgaSk7Ci0JCS8qIEFjdGl2ZSBMb3cgaW50ZXJydXB0LCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJpb3JpdHkgKi8KLQkJYXQ5MV9haWNfd3JpdGUoQVQ5MV9BSUNfU01SKGkpLCBBVDkxX0FJQ19TUkNUWVBFX0xPVyB8IHByaW9yaXR5W2ldKTsKLQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKE5SX0lSUVNfTEVHQUNZICsgaSwgJmF0OTFfYWljX2NoaXAsIGhhbmRsZV9mYXN0ZW9pX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwotCX0KLQotCWF0OTFfYWljX2h3X2luaXQobl9pcnFzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvbGVkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjIyZTMzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9sZWRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogTEVEIGRyaXZlciBmb3IgQXRtZWwgQVQ5MS1iYXNlZCBib2FyZHMuCi0gKgotICogIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZSAoUHR5KSBMdGQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlICJib2FyZC5oIgotI2luY2x1ZGUgImdwaW8uaCIKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19ORVdfTEVEUykKLQotLyoKLSAqIE5ldyBjcm9zcy1wbGF0Zm9ybSBMRUQgc3VwcG9ydC4KLSAqLwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbGVkX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfZ3Bpb19sZWRzX2RldmljZSA9IHsKLQkubmFtZQkJCT0gImxlZHMtZ3BpbyIsCi0JLmlkCQkJPSAtMSwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmbGVkX2RhdGEsCi19OwotCi12b2lkIF9faW5pdCBhdDkxX2dwaW9fbGVkcyhzdHJ1Y3QgZ3Bpb19sZWQgKmxlZHMsIGludCBucikKLXsKLQlpbnQgaTsKLQotCWlmICghbnIpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQotCQlhdDkxX3NldF9ncGlvX291dHB1dChsZWRzW2ldLmdwaW8sIGxlZHNbaV0uYWN0aXZlX2xvdyk7Ci0KLQlsZWRfZGF0YS5sZWRzID0gbGVkczsKLQlsZWRfZGF0YS5udW1fbGVkcyA9IG5yOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9ncGlvX2xlZHNfZGV2aWNlKTsKLX0KLQotI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfZ3Bpb19sZWRzKHN0cnVjdCBncGlvX2xlZCAqbGVkcywgaW50IG5yKSB7fQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKaW5kZXggNDA3M2FiNy4uOWIxNTE2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKQEAgLTI5LDEwICsyOSw4IEBACiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJhdDkxX2FpYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJwbS5oIgotI2luY2x1ZGUgImdwaW8uaCIKIAogc3RhdGljIHZvaWQgKCphdDkxX3BtX3N0YW5kYnkpKHZvaWQpOwogCkBAIC0xMzEsMjMgKzEyOSw3IEBACiAKIHN0YXRpYyBpbnQgYXQ5MV9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7Ci0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCWF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQoKTsKLQllbHNlCi0JCWF0OTFfZ3Bpb19zdXNwZW5kKCk7Ci0KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0xEX0lSUV9BVDkxKSAmJiBhdDkxX2FpY19iYXNlKSB7Ci0JCWF0OTFfaXJxX3N1c3BlbmQoKTsKLQotCQlwcl9kZWJ1ZygiQVQ5MTogUE0gLSB3YWtlIG1hc2sgJTA4eCwgcG0gc3RhdGUgJWRcbiIsCi0JCQkJLyogcmVtZW1iZXIgYWxsIHRoZSBhbHdheXMtd2FrZSBpcnFzICovCi0JCQkJKGF0OTFfcG1jX3JlYWQoQVQ5MV9QTUNfUENTUikKLQkJCQkJCXwgKDEgPDwgQVQ5MV9JRF9GSVEpCi0JCQkJCQl8ICgxIDw8IEFUOTFfSURfU1lTKQotCQkJCQkJfCAoYXQ5MV9nZXRfZXh0ZXJuX2lycSgpKSkKLQkJCQkJJiBhdDkxX2FpY19yZWFkKEFUOTFfQUlDX0lNUiksCi0JCQkJc3RhdGUpOwotCX0KKwlhdDkxX3BpbmN0cmxfZ3Bpb19zdXNwZW5kKCk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJCS8qCkBAIC0yMTIsMjEgKzE5NCwxMCBAQAogCQkJZ290byBlcnJvcjsKIAl9CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0xEX0lSUV9BVDkxKSAmJiBhdDkxX2FpY19iYXNlKQotCQlwcl9kZWJ1ZygiQVQ5MTogUE0gLSB3YWtldXAgJTA4eFxuIiwKLQkJCSBhdDkxX2FpY19yZWFkKEFUOTFfQUlDX0lQUikgJgotCQkJIGF0OTFfYWljX3JlYWQoQVQ5MV9BSUNfSU1SKSk7Ci0KIGVycm9yOgogCXRhcmdldF9zdGF0ZSA9IFBNX1NVU1BFTkRfT047CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0xEX0lSUV9BVDkxKSAmJiBhdDkxX2FpY19iYXNlKQotCQlhdDkxX2lycV9yZXN1bWUoKTsKLQotCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQotCQlhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUoKTsKLQllbHNlCi0JCWF0OTFfZ3Bpb19yZXN1bWUoKTsKKwlhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uaAppbmRleCBjNTEwMWRjLi5kMmM4OTk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uaApAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogCiAjaW5jbHVkZSA8bWFjaC9hdDkxX3JhbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2F0OTFybTkyMDBfc2RyYW1jLmg+CiAKICNpZmRlZiBDT05GSUdfUE0KIGV4dGVybiB2b2lkIGF0OTFfcG1fc2V0X3N0YW5kYnkodm9pZCAoKmF0OTFfc3RhbmRieSkodm9pZCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3NldHVwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvc2V0dXAuYwppbmRleCA5NjEwNzkyLi5jZTI1ZTg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvc2V0dXAuYwpAQCAtNDIsMzUgKzQyLDkgQEAKIAkJYXQ5MV9nZXRfc29jX3N1YnR5cGUoJmF0OTFfc29jX2luaXRkYXRhKSk7CiB9CiAKLXZvaWQgX19pbml0IGF0OTFfaW5pdF9pcnFfZGVmYXVsdCh2b2lkKQotewotCWF0OTFfaW5pdF9pbnRlcnJ1cHRzKGF0OTFfYm9vdF9zb2MuZGVmYXVsdF9pcnFfcHJpb3JpdHkpOwotfQotCi12b2lkIF9faW5pdCBhdDkxX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgKnByaW9yaXR5KQotewotCS8qIEluaXRpYWxpemUgdGhlIEFJQyBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR19PTERfSVJRX0FUOTEpKQotCQlhdDkxX2FpY19pbml0KHByaW9yaXR5LCBhdDkxX2Jvb3Rfc29jLmV4dGVybl9pcnEpOwotCi0JLyogRW5hYmxlIEdQSU8gaW50ZXJydXB0cyAqLwotCWF0OTFfZ3Bpb19pcnFfc2V0dXAoKTsKLX0KLQogdm9pZCBfX2lvbWVtICphdDkxX3JhbWNfYmFzZVsyXTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0OTFfcmFtY19iYXNlKTsKIAotdm9pZCBfX2luaXQgYXQ5MV9pb3JlbWFwX3JhbWMoaW50IGlkLCB1MzIgYWRkciwgdTMyIHNpemUpCi17Ci0JaWYgKGlkIDwgMCB8fCBpZCA+IDEpIHsKLQkJcHJfZW1lcmcoIldyb25nIFJBTSBjb250cm9sbGVyIGlkICglZCksIGNhbm5vdCBjb250aW51ZVxuIiwgaWQpOwotCQlCVUcoKTsKLQl9Ci0JYXQ5MV9yYW1jX2Jhc2VbaWRdID0gaW9yZW1hcChhZGRyLCBzaXplKTsKLQlpZiAoIWF0OTFfcmFtY19iYXNlW2lkXSkKLQkJcGFuaWMocHJfZm10KCJJbXBvc3NpYmxlIHRvIGlvcmVtYXAgcmFtYy4lZCAweCV4XG4iKSwgaWQsIGFkZHIpOwotfQotCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNyYW1fZGVzY1syXSBfX2luaXRkYXRhOwogCiB2b2lkIF9faW5pdCBhdDkxX2luaXRfc3JhbShpbnQgYmFuaywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQpAQCAtNDE4LDcgKzM5Miw2IEBACiAJCXBhbmljKHByX2ZtdCgiSW1wb3NzaWJsZSB0byBpb3JlbWFwIGF0OTFfbWF0cml4X2Jhc2VcbiIpKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX09GKSAmJiAhZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxWDQwKQogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcmFtY19pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFybTkyMDAtc2RyYW1jIiwgLmRhdGEgPSBhdDkxcm05MjAwX3N0YW5kYnkgfSwKIAl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLXNkcmFtYyIsIC5kYXRhID0gYXQ5MXNhbTlfc2RyYW1fc3RhbmRieSB9LApAQCAtNDYwLDEzICs0MzMsNiBAQAogewogCWF0OTFfZHRfcmFtYygpOwogCi0JLyogSW5pdCBjbG9jayBzdWJzeXN0ZW0gKi8KLQlhdDkxX2R0X2Nsb2NrX2luaXQoKTsKLQotCS8qIFJlZ2lzdGVyIHRoZSBwcm9jZXNzb3Itc3BlY2lmaWMgY2xvY2tzICovCi0JaWYgKGF0OTFfYm9vdF9zb2MucmVnaXN0ZXJfY2xvY2tzKQotCQlhdDkxX2Jvb3Rfc29jLnJlZ2lzdGVyX2Nsb2NrcygpOwotCiAJYXQ5MV9ib290X3NvYy5pbml0KCk7CiB9CiAKQEAgLTQ3NCwzOSArNDQwLDYgQEAKIHsKIAlhdDkxX2R0X3JhbWMoKTsKIAotCS8qIEluaXQgY2xvY2sgc3Vic3lzdGVtICovCi0JYXQ5MV9kdF9jbG9ja19pbml0KCk7Ci0KLQkvKiBSZWdpc3RlciB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGNsb2NrcyAqLwotCWlmIChhdDkxX2Jvb3Rfc29jLnJlZ2lzdGVyX2Nsb2NrcykKLQkJYXQ5MV9ib290X3NvYy5yZWdpc3Rlcl9jbG9ja3MoKTsKLQogCWlmIChhdDkxX2Jvb3Rfc29jLmluaXQpCiAJCWF0OTFfYm9vdF9zb2MuaW5pdCgpOwogfQotI2VuZGlmCi0KLXZvaWQgX19pbml0IGF0OTFfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCi17Ci0JYXQ5MV9ib290X3NvYy5pb3JlbWFwX3JlZ2lzdGVycygpOwotCi0JLyogSW5pdCBjbG9jayBzdWJzeXN0ZW0gKi8KLQlhdDkxX2Nsb2NrX2luaXQobWFpbl9jbG9jayk7Ci0KLQkvKiBSZWdpc3RlciB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGNsb2NrcyAqLwotCWF0OTFfYm9vdF9zb2MucmVnaXN0ZXJfY2xvY2tzKCk7Ci0KLQlhdDkxX2Jvb3Rfc29jLmluaXQoKTsKLQotCXBpbmN0cmxfcHJvdmlkZV9kdW1taWVzKCk7Ci19Ci0KLXZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQotewotCWF0OTFfYm9vdF9zb2MucmVnaXN0ZXJfZGV2aWNlcygpOwotfQotCi12b2lkIF9faW5pdCBhdDkxX2luaXRfdGltZSh2b2lkKQotewotCWF0OTFfYm9vdF9zb2MuaW5pdF90aW1lKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvc29jLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvc29jLmgKaW5kZXggOWE4ZmQ5Ny4uYWU2YzBiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL3NvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9zb2MuaApAQCAtNiwxNCArNiw4IEBACiAKIHN0cnVjdCBhdDkxX2luaXRfc29jIHsKIAlpbnQgYnVpbHRpbjsKLQl1MzIgZXh0ZXJuX2lycTsKLQl1bnNpZ25lZCBpbnQgKmRlZmF1bHRfaXJxX3ByaW9yaXR5OwogCXZvaWQgKCptYXBfaW8pKHZvaWQpOwotCXZvaWQgKCppb3JlbWFwX3JlZ2lzdGVycykodm9pZCk7Ci0Jdm9pZCAoKnJlZ2lzdGVyX2Nsb2Nrcykodm9pZCk7Ci0Jdm9pZCAoKnJlZ2lzdGVyX2RldmljZXMpKHZvaWQpOwogCXZvaWQgKCppbml0KSh2b2lkKTsKLQl2b2lkICgqaW5pdF90aW1lKSh2b2lkKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgYXQ5MV9pbml0X3NvYyBhdDkxX2Jvb3Rfc29jOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3N0YW1wOWcyMC5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3N0YW1wOWcyMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjJjMGFiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9zdGFtcDlnMjAuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfX01BQ0hfU1RBTVA5RzIwX0gKLSNkZWZpbmUgX19NQUNIX1NUQU1QOUcyMF9ICi0KLXZvaWQgc3RhbXA5ZzIwX2luaXRfZWFybHkodm9pZCk7Ci12b2lkIHN0YW1wOWcyMF9ib2FyZF9pbml0KHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWJjbS9LY29uZmlnCmluZGV4IDJhYmFkNzQuLmFhZWVjNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vS2NvbmZpZwpAQCAtNSw4ICs1LDU2IEBACiAKIGlmIEFSQ0hfQkNNCiAKK2NvbW1lbnQgIklQUk9DIGFyY2hpdGVjdGVkIFNvQ3MiCisKK2NvbmZpZyBBUkNIX0JDTV9JUFJPQworCWJvb2wKKwlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBDQUNIRV9MMlgwCisJc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBTTVAKKwlzZWxlY3QgSEFWRV9BUk1fVFdEIGlmIFNNUAorCXNlbGVjdCBBUk1fR0xPQkFMX1RJTUVSCisKKwlzZWxlY3QgQ0xLU1JDX01NSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgQVJNX0FNQkEKKwlzZWxlY3QgUElOQ1RSTAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIEJyb2FkY29tIElQUk9DIGFyY2hpdGVjdGVkIFNvQ3MuCisJICBUaGUgSVBST0MgY29tcGxleCBjb250YWlucyBvbmUgb3IgbW9yZSBBUk0gQ1BVcyBhbG9uZyB3aXRoIGNvbW1vbgorCSAgY29yZSBwZXJpcGVyYWxzLiBBcHBsaWNhdGlvbiBzcGVjaWZpYyBTb0NzIGFyZSBjcmVhdGVkIGJ5IGFkZGluZyBhCisJICB1QXJjaGl0ZWN0dXJlIGNvbnRhaW5pbmcgcGVyaXBoZXJhbHMgb3V0c2lkZSBvZiB0aGUgSVBST0MgY29tcGxleC4KKwkgIEN1cnJlbnRseSBzdXBwb3J0ZWQgU29DcyBhcmUgQ3lnbnVzLgorCitjb25maWcgQVJDSF9CQ01fQ1lHTlVTCisJYm9vbCAiQnJvYWRjb20gQ3lnbnVzIFN1cHBvcnQiIGlmIEFSQ0hfTVVMVElfVjcKKwlzZWxlY3QgQVJDSF9CQ01fSVBST0MKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEN5Z251cyBmYW1pbHksCisJICB3aGljaCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHZhcmlhbnRzOgorCSAgQkNNMTEzMDAsIEJDTTExMzIwLCBCQ00xMTM1MCwgQkNNMTEzNjAsCisJICBCQ001ODMwMCwgQkNNNTgzMDIsIEJDTTU4MzAzLCBCQ001ODMwNS4KKworY29uZmlnIEFSQ0hfQkNNXzUzMDFYCisJYm9vbCAiQnJvYWRjb20gQkNNNDcwWCAvIEJDTTUzMDFYIEFSTSBTb0MiIGlmIEFSQ0hfTVVMVElfVjcKKwlzZWxlY3QgQVJDSF9CQ01fSVBST0MKKwloZWxwCisJICBTdXBwb3J0IGZvciBCcm9hZGNvbSBCQ000NzBYIGFuZCBCQ001MzAxWCBTb0NzIHdpdGggQVJNIENQVSBjb3Jlcy4KKworCSAgVGhpcyBpcyBhIG5ldHdvcmsgU29DIGxpbmUgbW9zdGx5IHVzZWQgaW4gaG9tZSByb3V0ZXJzIGFuZAorCSAgd2lmaSBhY2Nlc3MgcG9pbnRzLCBpdCdzIGludGVybmFsIG5hbWUgaXMgTm9ydGhzdGFyLgorCSAgVGhpcyBpbmNsdXNlZCB0aGUgZm9sbG93aW5nIFNvQzogQkNNNTMwMTAsIEJDTTUzMDExLCBCQ001MzAxMiwKKwkgIEJDTTUzMDE0LCBCQ001MzAxNSwgQkNNNTMwMTYsIEJDTTUzMDE3LCBCQ001MzAxOCwgQkNNNDcwNywKKwkgIEJDTTQ3MDggYW5kIEJDTTQ3MDkuCisKKwkgIERvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgQkNNNDc2MCB3aGljaCBpcyBhIHRvdGFsbHkKKwkgIGRpZmZlcmVudCBTb0Mgb3Igd2l0aCB0aGUgb2xkZXIgQkNNNDdYWCBhbmQgQkNNNTNYWCBiYXNlZAorCSAgbmV0d29yayBTb0MgdXNpbmcgYSBNSVBTIENQVSwgdGhleSBhcmUgc3VwcG9ydGVkIGJ5IGFyY2gvbWlwcy9iY200N3h4CisKK2NvbW1lbnQgIktPTkEgYXJjaGl0ZWN0ZWQgU29DcyIKKwogY29uZmlnIEFSQ0hfQkNNX01PQklMRQotCWJvb2wgIkJyb2FkY29tIE1vYmlsZSBTb0MgU3VwcG9ydCIgaWYgQVJDSF9NVUxUSV9WNworCWJvb2wKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgQVJNX0VSUkFUQV83NTQzMjIKIAlzZWxlY3QgQVJNX0VSUkFUQV83NzU0MjAKQEAgLTE1LDE2ICs2MywxMyBAQAogCXNlbGVjdCBUSUNLX09ORVNIT1QKIAlzZWxlY3QgSEFWRV9BUk1fQVJDSF9USU1FUgogCXNlbGVjdCBQSU5DVFJMCisJc2VsZWN0IEFSQ0hfQkNNX01PQklMRV9TTVAgaWYgU01QCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gQnJvYWRjb20gbW9iaWxlIFNvQ3MuCiAKLWlmIEFSQ0hfQkNNX01PQklMRQotCi1tZW51ICJCcm9hZGNvbSBNb2JpbGUgU29DIFNlbGVjdGlvbiIKLQogY29uZmlnIEFSQ0hfQkNNXzI4MVhYCiAJYm9vbCAiQnJvYWRjb20gQkNNMjgxWFggU29DIGZhbWlseSIKLQlkZWZhdWx0IHkKKwlzZWxlY3QgQVJDSF9CQ01fTU9CSUxFCiAJc2VsZWN0IEhBVkVfU01QCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBCQ00yODFYWCBmYW1pbHksIHdoaWNoIGluY2x1ZGVzCkBAIC0zMyw3ICs3OCw3IEBACiAKIGNvbmZpZyBBUkNIX0JDTV8yMTY2NAogCWJvb2wgIkJyb2FkY29tIEJDTTIxNjY0IFNvQyBmYW1pbHkiCi0JZGVmYXVsdCB5CisJc2VsZWN0IEFSQ0hfQkNNX01PQklMRQogCXNlbGVjdCBIQVZFX1NNUAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQkNNMjE2NjQgZmFtaWx5LCB3aGljaCBpbmNsdWRlcwpAQCAtNDEsMTkgKzg2LDE4IEBACiAKIGNvbmZpZyBBUkNIX0JDTV9NT0JJTEVfTDJfQ0FDSEUKIAlib29sICJCcm9hZGNvbSBtb2JpbGUgU29DIGxldmVsIDIgY2FjaGUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChBUkNIX0JDTV8yODFYWCB8fCBBUkNIX0JDTV8yMTY2NCkKKwlkZXBlbmRzIG9uIEFSQ0hfQkNNX01PQklMRQogCWRlZmF1bHQgeQogCXNlbGVjdCBDQUNIRV9MMlgwCiAJc2VsZWN0IEFSQ0hfQkNNX01PQklMRV9TTUMKIAogY29uZmlnIEFSQ0hfQkNNX01PQklMRV9TTUMKIAlib29sCi0JZGVwZW5kcyBvbiBBUkNIX0JDTV8yODFYWCB8fCBBUkNIX0JDTV8yMTY2NAorCWRlcGVuZHMgb24gQVJDSF9CQ01fTU9CSUxFCiAKIGNvbmZpZyBBUkNIX0JDTV9NT0JJTEVfU01QCi0JYm9vbCAiQnJvYWRjb20gbW9iaWxlIFNvQyBTTVAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChBUkNIX0JDTV8yODFYWCB8fCBBUkNIX0JDTV8yMTY2NCkgJiYgU01QCi0JZGVmYXVsdCB5CisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9CQ01fTU9CSUxFCiAJc2VsZWN0IEhBVkVfQVJNX1NDVQogCXNlbGVjdCBBUk1fRVJSQVRBXzc2NDM2OQogCWhlbHAKQEAgLTYxLDkgKzEwNSw3IEBACiAJICBQcm92aWRlZCBhcyBhbiBvcHRpb24gc28gU01QIHN1cHBvcnQgZm9yIFNvQ3Mgb2YgdGhpcyB0eXBlCiAJICBjYW4gYmUgZGlzYWJsZWQgZm9yIGFuIFNNUC1lbmFibGVkIGtlcm5lbC4KIAotZW5kbWVudQotCi1lbmRpZgorY29tbWVudCAiT3RoZXIgQXJjaGl0ZWN0dXJlcyIKIAogY29uZmlnIEFSQ0hfQkNNMjgzNQogCWJvb2wgIkJyb2FkY29tIEJDTTI4MzUgZmFtaWx5IiBpZiBBUkNIX01VTFRJX1Y2CkBAIC03OCwyNyArMTIwLDYgQEAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQnJvYWRjb20gQkNNMjgzNSBTb0MuIFRoaXMgU29DIGlzCiAJICB1c2VkIGluIHRoZSBSYXNwYmVycnkgUGkgYW5kIFJva3UgMiBkZXZpY2VzLgogCi1jb25maWcgQVJDSF9CQ01fNTMwMVgKLQlib29sICJCcm9hZGNvbSBCQ000NzBYIC8gQkNNNTMwMVggQVJNIFNvQyIgaWYgQVJDSF9NVUxUSV9WNwotCXNlbGVjdCBBUk1fR0lDCi0Jc2VsZWN0IENBQ0hFX0wyWDAKLQlzZWxlY3QgSEFWRV9BUk1fU0NVIGlmIFNNUAotCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgU01QCi0Jc2VsZWN0IEFSTV9HTE9CQUxfVElNRVIKLQlzZWxlY3QgQ0xLU1JDX0FSTV9HTE9CQUxfVElNRVJfU0NIRURfQ0xPQ0sKLQloZWxwCi0JICBTdXBwb3J0IGZvciBCcm9hZGNvbSBCQ000NzBYIGFuZCBCQ001MzAxWCBTb0NzIHdpdGggQVJNIENQVSBjb3Jlcy4KLQotCSAgVGhpcyBpcyBhIG5ldHdvcmsgU29DIGxpbmUgbW9zdGx5IHVzZWQgaW4gaG9tZSByb3V0ZXJzIGFuZAotCSAgd2lmaSBhY2Nlc3MgcG9pbnRzLCBpdCdzIGludGVybmFsIG5hbWUgaXMgTm9ydGhzdGFyLgotCSAgVGhpcyBpbmNsdXNlZCB0aGUgZm9sbG93aW5nIFNvQzogQkNNNTMwMTAsIEJDTTUzMDExLCBCQ001MzAxMiwKLQkgIEJDTTUzMDE0LCBCQ001MzAxNSwgQkNNNTMwMTYsIEJDTTUzMDE3LCBCQ001MzAxOCwgQkNNNDcwNywKLQkgIEJDTTQ3MDggYW5kIEJDTTQ3MDkuCi0KLQkgIERvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgQkNNNDc2MCB3aGljaCBpcyBhIHRvdGFsbHkKLQkgIGRpZmZlcmVudCBTb0Mgb3Igd2l0aCB0aGUgb2xkZXIgQkNNNDdYWCBhbmQgQkNNNTNYWCBiYXNlZAotCSAgbmV0d29yayBTb0MgdXNpbmcgYSBNSVBTIENQVSwgdGhleSBhcmUgc3VwcG9ydGVkIGJ5IGFyY2gvbWlwcy9iY200N3h4Ci0KIGNvbmZpZyBBUkNIX0JDTV82M1hYCiAJYm9vbCAiQnJvYWRjb20gQkNNNjN4eCBEU0wgU29DIiBpZiBBUkNIX01VTFRJX1Y3CiAJZGVwZW5kcyBvbiBNTVUKQEAgLTExOCwxMyArMTM5LDExIEBACiAKIGNvbmZpZyBBUkNIX0JSQ01TVEIKIAlib29sICJCcm9hZGNvbSBCQ003WFhYIGJhc2VkIGJvYXJkcyIgaWYgQVJDSF9NVUxUSV9WNwotCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IEFSTV9HSUMKLQlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKLQlzZWxlY3QgSEFWRV9TTVAKIAlzZWxlY3QgSEFWRV9BUk1fQVJDSF9USU1FUgogCXNlbGVjdCBCUkNNU1RCX0dJU0JfQVJCCiAJc2VsZWN0IEJSQ01TVEJfTDJfSVJRCisJc2VsZWN0IEJDTTcxMjBfTDJfSVJRCiAJaGVscAogCSAgU2F5IFkgaWYgeW91IGludGVuZCB0byBydW4gdGhlIGtlcm5lbCBvbiBhIEJyb2FkY29tIEFSTS1iYXNlZCBTVEIKIAkgIGNoaXBzZXQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYmNtL01ha2VmaWxlCmluZGV4IDMwMGFlNGIuLjRjMzg2NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw5IEBACiAjIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAorIyBDeWdudXMKK29iai0kKENPTkZJR19BUkNIX0JDTV9DWUdOVVMpICs9ICBiY21fY3lnbnVzLm8KKwogIyBCQ00yODFYWAogb2JqLSQoQ09ORklHX0FSQ0hfQkNNXzI4MVhYKQkrPSBib2FyZF9iY20yODF4eC5vCiAKQEAgLTM4LDUgKzQxLDcgQEAKIG9iai0kKENPTkZJR19BUkNIX0JDTV82M1hYKQk6PSBiY202M3h4Lm8KIAogaWZlcSAoJChDT05GSUdfQVJDSF9CUkNNU1RCKSx5KQorQ0ZMQUdTX3BsYXRzbXAtYnJjbXN0Yi5vCSs9IC1tYXJjaD1hcm12Ny1hCiBvYmoteQkJCQkrPSBicmNtc3RiLm8KK29iai0kKENPTkZJR19TTVApCQkrPSBoZWFkc21wLWJyY21zdGIubyBwbGF0c21wLWJyY21zdGIubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtL2JjbV9jeWdudXMuYyBiL2FyY2gvYXJtL21hY2gtYmNtL2JjbV9jeWdudXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGRjNThiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vYmNtX2N5Z251cy5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCitzdGF0aWMgY29uc3QgY2hhciBjb25zdCAqYmNtX2N5Z251c19kdF9jb21wYXRbXSA9IHsKKwkiYnJjbSxjeWdudXMiLAorCU5VTEwsCit9OworCitEVF9NQUNISU5FX1NUQVJUKEJDTV9DWUdOVVNfRFQsICJCcm9hZGNvbSBDeWdudXMgU29DIikKKwkubDJjX2F1eF92YWwJPSAwLAorCS5sMmNfYXV4X21hc2sJPSB+MCwKKwkuZHRfY29tcGF0ID0gYmNtX2N5Z251c19kdF9jb21wYXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vYnJjbXN0Yi5oIGIvYXJjaC9hcm0vbWFjaC1iY20vYnJjbXN0Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMGMzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbS9icmNtc3RiLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JSQ01TVEJfSF9fCisjZGVmaW5lIF9fQlJDTVNUQl9IX18KKwordm9pZCBicmNtc3RiX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOworCisjZW5kaWYgLyogX19CUkNNU1RCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vaGVhZHNtcC1icmNtc3RiLlMgYi9hcmNoL2FybS9tYWNoLWJjbS9oZWFkc21wLWJyY21zdGIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTljMWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vaGVhZHNtcC1icmNtc3RiLlMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIFNNUCBib290IGNvZGUgZm9yIHNlY29uZGFyeSBDUFVzCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXRlZ3JhL2hlYWRzbXAuUworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOVklESUEsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisgICAgICAgIC5zZWN0aW9uICIudGV4dC5oZWFkIiwgImF4IgorCitFTlRSWShicmNtc3RiX3NlY29uZGFyeV9zdGFydHVwKQorICAgICAgICAvKgorICAgICAgICAgKiBFbnN1cmUgQ1BVIGlzIGluIGEgc2FuZSBzdGF0ZSBieSBkaXNhYmxpbmcgYWxsIElSUXMgYW5kIHN3aXRjaGluZworICAgICAgICAgKiBpbnRvIFNWQyBtb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0bW9kZQlQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERSwgcjAKKworICAgICAgICBibCAgICAgIHY3X2ludmFsaWRhdGVfbDEKKyAgICAgICAgYiAgICAgICBzZWNvbmRhcnlfc3RhcnR1cAorRU5EUFJPQyhicmNtc3RiX3NlY29uZGFyeV9zdGFydHVwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY20vcGxhdHNtcC1icmNtc3RiLmMgYi9hcmNoL2FybS9tYWNoLWJjbS9wbGF0c21wLWJyY21zdGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWM4N2EyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY20vcGxhdHNtcC1icmNtc3RiLmMKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisgKiBCcm9hZGNvbSBTVEIgQ1BVIFNNUCBhbmQgaG90cGx1ZyBzdXBwb3J0IGZvciBBUk0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY3AxNS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CisKKyNpbmNsdWRlICJicmNtc3RiLmgiCisKK2VudW0geworCVpPTkVfTUFOX0NMS0VOX01BU0sJCT0gQklUKDApLAorCVpPTkVfTUFOX1JFU0VUX0NOVExfTUFTSwk9IEJJVCgxKSwKKwlaT05FX01BTl9NRU1fUFdSX01BU0sJCT0gQklUKDQpLAorCVpPTkVfUkVTRVJWRURfMV9NQVNLCQk9IEJJVCg1KSwKKwlaT05FX01BTl9JU09fQ05UTF9NQVNLCQk9IEJJVCg2KSwKKwlaT05FX01BTlVBTF9DT05UUk9MX01BU0sJPSBCSVQoNyksCisJWk9ORV9QV1JfRE5fUkVRX01BU0sJCT0gQklUKDkpLAorCVpPTkVfUFdSX1VQX1JFUV9NQVNLCQk9IEJJVCgxMCksCisJWk9ORV9CTEtfUlNUX0FTU0VSVF9NQVNLCT0gQklUKDEyKSwKKwlaT05FX1BXUl9PRkZfU1RBVEVfTUFTSwkJPSBCSVQoMjUpLAorCVpPTkVfUFdSX09OX1NUQVRFX01BU0sJCT0gQklUKDI2KSwKKwlaT05FX0RQR19QV1JfU1RBVEVfTUFTSwkJPSBCSVQoMjgpLAorCVpPTkVfTUVNX1BXUl9TVEFURV9NQVNLCQk9IEJJVCgyOSksCisJWk9ORV9SRVNFVF9TVEFURV9NQVNLCQk9IEJJVCgzMSksCisJQ1BVMF9QV1JfWk9ORV9DVFJMX1JFRwkJPSAxLAorCUNQVV9SRVNFVF9DT05GSUdfUkVHCQk9IDIsCit9OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpjcHViaXVjdHJsX2Jsb2NrOworc3RhdGljIHZvaWQgX19pb21lbSAqaGlmX2NvbnRfYmxvY2s7CitzdGF0aWMgdTMyIGNwdTBfcHdyX3pvbmVfY3RybF9yZWc7CitzdGF0aWMgdTMyIGNwdV9yc3RfY2ZnX3JlZzsKK3N0YXRpYyB1MzIgaGlmX2NvbnRfcmVnOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisvKgorICogV2UgbXVzdCBxdWllc2NlIGEgZHlpbmcgQ1BVIGJlZm9yZSBpdCBjYW4gYmUga2lsbGVkIGJ5IHRoZSBib290IENQVS4gQmVjYXVzZQorICogb25lIG9yIG1vcmUgY2FjaGUgbWF5IGJlIGRpc2FibGVkLCB3ZSBtdXN0IGZsdXNoIHRvIGVuc3VyZSBjb2hlcmVuY3kuIFdlCisgKiBjYW5ub3QgdXNlIHRyYWRpdGlvbmwgY29tcGxldGlvbiBzdHJ1Y3R1cmVzIG9yIHNwaW5sb2NrcyBhcyB0aGV5IHJlbHkgb24KKyAqIGNvaGVyZW5jeS4KKyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoaW50LCBwZXJfY3B1X3N3X3N0YXRlKTsKKworc3RhdGljIGludCBwZXJfY3B1X3N3X3N0YXRlX3JkKHUzMiBjcHUpCit7CisJc3luY19jYWNoZV9yKFNISUZUX1BFUkNQVV9QVFIoJnBlcl9jcHVfc3dfc3RhdGUsIHBlcl9jcHVfb2Zmc2V0KGNwdSkpKTsKKwlyZXR1cm4gcGVyX2NwdShwZXJfY3B1X3N3X3N0YXRlLCBjcHUpOworfQorCitzdGF0aWMgdm9pZCBwZXJfY3B1X3N3X3N0YXRlX3dyKHUzMiBjcHUsIGludCB2YWwpCit7CisJZG1iKCk7CisJcGVyX2NwdShwZXJfY3B1X3N3X3N0YXRlLCBjcHUpID0gdmFsOworCXN5bmNfY2FjaGVfdyhTSElGVF9QRVJDUFVfUFRSKCZwZXJfY3B1X3N3X3N0YXRlLCBwZXJfY3B1X29mZnNldChjcHUpKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBlcl9jcHVfc3dfc3RhdGVfd3IodTMyIGNwdSwgaW50IHZhbCkgeyB9CisjZW5kaWYKKworc3RhdGljIHZvaWQgX19pb21lbSAqcHdyX2N0cmxfZ2V0X2Jhc2UodTMyIGNwdSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBjcHViaXVjdHJsX2Jsb2NrICsgY3B1MF9wd3Jfem9uZV9jdHJsX3JlZzsKKwliYXNlICs9IChjcHVfbG9naWNhbF9tYXAoY3B1KSAqIDQpOworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgdTMyIHB3cl9jdHJsX3JkKHUzMiBjcHUpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcHdyX2N0cmxfZ2V0X2Jhc2UoY3B1KTsKKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChiYXNlKTsKK30KKworc3RhdGljIHZvaWQgcHdyX2N0cmxfd3IodTMyIGNwdSwgdTMyIHZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwd3JfY3RybF9nZXRfYmFzZShjcHUpOworCXdyaXRlbCh2YWwsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBjcHVfcnN0X2NmZ19zZXQodTMyIGNwdSwgaW50IHNldCkKK3sKKwl1MzIgdmFsOworCXZhbCA9IHJlYWRsX3JlbGF4ZWQoY3B1Yml1Y3RybF9ibG9jayArIGNwdV9yc3RfY2ZnX3JlZyk7CisJaWYgKHNldCkKKwkJdmFsIHw9IEJJVChjcHVfbG9naWNhbF9tYXAoY3B1KSk7CisJZWxzZQorCQl2YWwgJj0gfkJJVChjcHVfbG9naWNhbF9tYXAoY3B1KSk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBjcHViaXVjdHJsX2Jsb2NrICsgY3B1X3JzdF9jZmdfcmVnKTsKK30KKworc3RhdGljIHZvaWQgY3B1X3NldF9ib290X2FkZHIodTMyIGNwdSwgdW5zaWduZWQgbG9uZyBib290X2FkZHIpCit7CisJY29uc3QgaW50IHJlZ19vZnMgPSBjcHVfbG9naWNhbF9tYXAoY3B1KSAqIDg7CisJd3JpdGVsX3JlbGF4ZWQoMCwgaGlmX2NvbnRfYmxvY2sgKyBoaWZfY29udF9yZWcgKyByZWdfb2ZzKTsKKwl3cml0ZWxfcmVsYXhlZChib290X2FkZHIsIGhpZl9jb250X2Jsb2NrICsgaGlmX2NvbnRfcmVnICsgNCArIHJlZ19vZnMpOworfQorCitzdGF0aWMgdm9pZCBicmNtc3RiX2NwdV9ib290KHUzMiBjcHUpCit7CisJLyogTWFyayB0aGlzIENQVSBhcyAidXAiICovCisJcGVyX2NwdV9zd19zdGF0ZV93cihjcHUsIDEpOworCisJLyoKKwkgKiBTZXQgdGhlIHJlc2V0IHZlY3RvciB0byBwb2ludCB0byB0aGUgc2Vjb25kYXJ5X3N0YXJ0dXAKKwkgKiByb3V0aW5lCisJICovCisJY3B1X3NldF9ib290X2FkZHIoY3B1LCB2aXJ0X3RvX3BoeXMoYnJjbXN0Yl9zZWNvbmRhcnlfc3RhcnR1cCkpOworCisJLyogVW5oYWx0IHRoZSBjcHUgKi8KKwljcHVfcnN0X2NmZ19zZXQoY3B1LCAwKTsKK30KKworc3RhdGljIHZvaWQgYnJjbXN0Yl9jcHVfcG93ZXJfb24odTMyIGNwdSkKK3sKKwkvKgorCSAqIFRoZSBzZWNvbmRhcnkgY29yZXMgcG93ZXIgd2FzIGN1dCwgc28gd2UgbXVzdCBnbyB0aHJvdWdoCisJICogcG93ZXItb24gaW5pdGlhbGl6YXRpb24uCisJICovCisJdTMyIHRtcDsKKworCS8qIFJlcXVlc3Qgem9uZSBwb3dlciB1cCAqLworCXB3cl9jdHJsX3dyKGNwdSwgWk9ORV9QV1JfVVBfUkVRX01BU0spOworCisJLyogV2FpdCBmb3IgdGhlIHBvd2VyIHVwIEZTTSB0byBjb21wbGV0ZSAqLworCWRvIHsKKwkJdG1wID0gcHdyX2N0cmxfcmQoY3B1KTsKKwl9IHdoaWxlICghKHRtcCAmIFpPTkVfUFdSX09OX1NUQVRFX01BU0spKTsKK30KKworc3RhdGljIGludCBicmNtc3RiX2NwdV9nZXRfcG93ZXJfc3RhdGUodTMyIGNwdSkKK3sKKwlpbnQgdG1wID0gcHdyX2N0cmxfcmQoY3B1KTsKKwlyZXR1cm4gKHRtcCAmIFpPTkVfUkVTRVRfU1RBVEVfTUFTSykgPyAwIDogMTsKK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCitzdGF0aWMgdm9pZCBicmNtc3RiX2NwdV9kaWUodTMyIGNwdSkKK3sKKwl2N19leGl0X2NvaGVyZW5jeV9mbHVzaChhbGwpOworCisJcGVyX2NwdV9zd19zdGF0ZV93cihjcHUsIDApOworCisJLyogU2l0IGFuZCB3YWl0IHRvIGRpZSAqLworCXdmaSgpOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLi4uICovCisJd2hpbGUgKDEpCisJCTsKK30KKworc3RhdGljIGludCBicmNtc3RiX2NwdV9raWxsKHUzMiBjcHUpCit7CisJdTMyIHRtcDsKKworCXdoaWxlIChwZXJfY3B1X3N3X3N0YXRlX3JkKGNwdSkpCisJCTsKKworCS8qIFByb2dyYW0gem9uZSByZXNldCAqLworCXB3cl9jdHJsX3dyKGNwdSwgWk9ORV9SRVNFVF9TVEFURV9NQVNLIHwgWk9ORV9CTEtfUlNUX0FTU0VSVF9NQVNLIHwKKwkJCSAgICAgIFpPTkVfUFdSX0ROX1JFUV9NQVNLKTsKKworCS8qIFZlcmlmeSB6b25lIHJlc2V0ICovCisJdG1wID0gcHdyX2N0cmxfcmQoY3B1KTsKKwlpZiAoISh0bXAgJiBaT05FX1JFU0VUX1NUQVRFX01BU0spKQorCQlwcl9lcnIoIiVzOiBab25lIHJlc2V0IGJpdCBmb3IgQ1BVICVkIG5vdCBhc3NlcnRlZCFcbiIsCisJCQlfX2Z1bmNfXywgY3B1KTsKKworCS8qIFdhaXQgZm9yIHBvd2VyIGRvd24gKi8KKwlkbyB7CisJCXRtcCA9IHB3cl9jdHJsX3JkKGNwdSk7CisJfSB3aGlsZSAoISh0bXAgJiBaT05FX1BXUl9PRkZfU1RBVEVfTUFTSykpOworCisJLyogRmx1c2ggcGlwZWxpbmUgYmVmb3JlIHJlc2V0dGluZyBDUFUgKi8KKwltYigpOworCisJLyogQXNzZXJ0IHJlc2V0IG9uIHRoZSBDUFUgKi8KKwljcHVfcnN0X2NmZ19zZXQoY3B1LCAxKTsKKworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2hpZmNwdWJpdWN0cmxfcmVncyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWludCByYyA9IDA7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN5c2Nvbl9ucCA9IE5VTEw7CisKKwluYW1lID0gInN5c2Nvbi1jcHUiOworCisJc3lzY29uX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgbmFtZSwgMCk7CisJaWYgKCFzeXNjb25fbnApIHsKKwkJcHJfZXJyKCJjYW4ndCBmaW5kIHBoYW5kbGUgJXNcbiIsIG5hbWUpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwljcHViaXVjdHJsX2Jsb2NrID0gb2ZfaW9tYXAoc3lzY29uX25wLCAwKTsKKwlpZiAoIWNwdWJpdWN0cmxfYmxvY2spIHsKKwkJcHJfZXJyKCJpb21hcCBmYWlsZWQgZm9yIGNwdWJpdWN0cmxfYmxvY2tcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCBuYW1lLCBDUFUwX1BXUl9aT05FX0NUUkxfUkVHLAorCQkJCQkmY3B1MF9wd3Jfem9uZV9jdHJsX3JlZyk7CisJaWYgKHJjKSB7CisJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgMXN0IGVudHJ5IGZyb20gJXMgcHJvcGVydHkgKCVkKVxuIiwgbmFtZSwKKwkJCXJjKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgbmFtZSwgQ1BVX1JFU0VUX0NPTkZJR19SRUcsCisJCQkJCSZjcHVfcnN0X2NmZ19yZWcpOworCWlmIChyYykgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIDJuZCBlbnRyeSBmcm9tICVzIHByb3BlcnR5ICglZClcbiIsIG5hbWUsCisJCQlyYyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBjbGVhbnVwOworCX0KKworY2xlYW51cDoKKwlvZl9ub2RlX3B1dChzeXNjb25fbnApOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfaGlmY29udF9yZWdzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IHJjID0gMDsKKwljaGFyICpuYW1lOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3lzY29uX25wID0gTlVMTDsKKworCW5hbWUgPSAic3lzY29uLWNvbnQiOworCisJc3lzY29uX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgbmFtZSwgMCk7CisJaWYgKCFzeXNjb25fbnApIHsKKwkJcHJfZXJyKCJjYW4ndCBmaW5kIHBoYW5kbGUgJXNcbiIsIG5hbWUpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwloaWZfY29udF9ibG9jayA9IG9mX2lvbWFwKHN5c2Nvbl9ucCwgMCk7CisJaWYgKCFoaWZfY29udF9ibG9jaykgeworCQlwcl9lcnIoImlvbWFwIGZhaWxlZCBmb3IgaGlmX2NvbnRfYmxvY2tcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBPZmZzZXQgaXMgYXQgdG9wIG9mIGhpZl9jb250X2Jsb2NrICovCisJaGlmX2NvbnRfcmVnID0gMDsKKworY2xlYW51cDoKKwlvZl9ub2RlX3B1dChzeXNjb25fbnApOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGJyY21zdGJfY3B1X2N0cmxfc2V0dXAodW5zaWduZWQgaW50IG1heF9jcHVzKQoreworCWludCByYzsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWNoYXIgKm5hbWU7CisKKwluYW1lID0gImJyY20sYnJjbXN0Yi1zbXBib290IjsKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsIG5hbWUpOworCWlmICghbnApIHsKKwkJcHJfZXJyKCJjYW4ndCBmaW5kIGNvbXBhdGlibGUgbm9kZSAlc1xuIiwgbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlyYyA9IHNldHVwX2hpZmNwdWJpdWN0cmxfcmVncyhucCk7CisJaWYgKHJjKQorCQlyZXR1cm47CisKKwlyYyA9IHNldHVwX2hpZmNvbnRfcmVncyhucCk7CisJaWYgKHJjKQorCQlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgYnJjbXN0Yl9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCit7CisJLyogTWlzc2luZyB0aGUgYnJjbSxicmNtc3RiLXNtcGJvb3QgRFQgbm9kZT8gKi8KKwlpZiAoIWNwdWJpdWN0cmxfYmxvY2sgfHwgIWhpZl9jb250X2Jsb2NrKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEJyaW5nIHVwIHBvd2VyIHRvIHRoZSBjb3JlIGlmIG5lY2Vzc2FyeSAqLworCWlmIChicmNtc3RiX2NwdV9nZXRfcG93ZXJfc3RhdGUoY3B1KSA9PSAwKQorCQlicmNtc3RiX2NwdV9wb3dlcl9vbihjcHUpOworCisJYnJjbXN0Yl9jcHVfYm9vdChjcHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgYnJjbXN0Yl9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CisJLnNtcF9wcmVwYXJlX2NwdXMJPSBicmNtc3RiX2NwdV9jdHJsX3NldHVwLAorCS5zbXBfYm9vdF9zZWNvbmRhcnkJPSBicmNtc3RiX2Jvb3Rfc2Vjb25kYXJ5LAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCS5jcHVfa2lsbAkJPSBicmNtc3RiX2NwdV9raWxsLAorCS5jcHVfZGllCQk9IGJyY21zdGJfY3B1X2RpZSwKKyNlbmRpZgorfTsKKworQ1BVX01FVEhPRF9PRl9ERUNMQVJFKGJyY21zdGJfc21wLCAiYnJjbSxicmFobWEtYjE1IiwgJmJyY21zdGJfc21wX29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJlcmxpbi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1iZXJsaW4vS2NvbmZpZwppbmRleCAyNGY4NWJlLi4zZTQwYTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJlcmxpbi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYmVybGluL0tjb25maWcKQEAgLTEsMTAgKzEsMTEgQEAKIG1lbnVjb25maWcgQVJDSF9CRVJMSU4KIAlib29sICJNYXJ2ZWxsIEJlcmxpbiBTb0NzIiBpZiBBUkNIX01VTFRJX1Y3CisJc2VsZWN0IEFSQ0hfSEFTX1JFU0VUX0NPTlRST0xMRVIKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgQVJNX0dJQwotCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IERXX0FQQl9JQ1RMCiAJc2VsZWN0IERXX0FQQl9USU1FUl9PRgorCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IFBJTkNUUkwKIAogaWYgQVJDSF9CRVJMSU4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYwppbmRleCA1NjIzMTMxLi5mOGY2MmZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4MzAtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODMwLWV2bS5jCkBAIC04MCw4ICs4MCw4IEBACiAJCQkJICAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCQkgICAgIk9IQ0kgb3Zlci1jdXJyZW50IGluZGljYXRvciIsIE5VTEwpOwogCQlpZiAoZXJyb3IpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgcmVxdWVzdCBJUlEgdG8gd2F0Y2ggIgotCQkJICAgICAgICJvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZXNcbiIsIF9fZnVuY19fKTsKKwkJCXByX2VycigiJXM6IGNvdWxkIG5vdCByZXF1ZXN0IElSUSB0byB3YXRjaCBvdmVyLWN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZXNcbiIsCisJCQkgICAgICAgX19mdW5jX18pOwogCX0gZWxzZQogCQlmcmVlX2lycShpcnEsIE5VTEwpOwogCkBAIC0xNDUsOCArMTQ1LDcgQEAKIAkvKiBVU0JfUkVGQ0xLSU4gaXMgbm90IHVzZWQuICovCiAJcmV0ID0gZGF2aW5jaV9jZmdfcmVnKERBODMwX1VTQjBfRFJWVkJVUyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiJXM6IFVTQiAyLjAgUGluTXV4IHNldHVwIGZhaWxlZDogJWRcbiIsCi0JCQkgICBfX2Z1bmNfXywgcmV0KTsKKwkJcHJfd2FybigiJXM6IFVTQiAyLjAgUGluTXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCWVsc2UgewogCQkvKgogCQkgKiBUUFMyMDY1IHN3aXRjaCBAIDVWIHN1cHBsaWVzIDEgQSAoc3VzdGFpbnMgMS41IEEpLApAQCAtMTU0LDM3ICsxNTMsMzUgQEAKIAkJICovCiAJCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3VzYjIwKDEwMDAsIDMpOwogCQlpZiAocmV0KQotCQkJcHJfd2FybmluZygiJXM6IFVTQiAyLjAgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQkJICAgX19mdW5jX18sIHJldCk7CisJCQlwcl93YXJuKCIlczogVVNCIDIuMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKIAl9CiAKIAlyZXQgPSBkYXZpbmNpX2NmZ19yZWdfbGlzdChkYTgzMF9ldm1fdXNiMTFfcGlucyk7CiAJaWYgKHJldCkgewotCQlwcl93YXJuaW5nKCIlczogVVNCIDEuMSBQaW5NdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwKLQkJCSAgIF9fZnVuY19fLCByZXQpOworCQlwcl93YXJuKCIlczogVVNCIDEuMSBQaW5NdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAJCXJldHVybjsKIAl9CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoT05fQkRfVVNCX0RSViwgIk9OX0JEX1VTQl9EUlYiKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIFVTQiAxLjEgcG9ydCAiCi0JCSAgICAgICAicG93ZXIgY29udHJvbDogJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBHUElPIGZvciBVU0IgMS4xIHBvcnQgcG93ZXIgY29udHJvbDogJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcmV0KTsKIAkJcmV0dXJuOwogCX0KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT05fQkRfVVNCX0RSViwgMCk7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoT05fQkRfVVNCX09WQywgIk9OX0JEX1VTQl9PVkMiKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIFVTQiAxLjEgcG9ydCAiCi0JCSAgICAgICAib3Zlci1jdXJyZW50IGluZGljYXRvcjogJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBHUElPIGZvciBVU0IgMS4xIHBvcnQgb3Zlci1jdXJyZW50IGluZGljYXRvcjogJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcmV0KTsKIAkJcmV0dXJuOwogCX0KIAlncGlvX2RpcmVjdGlvbl9pbnB1dChPTl9CRF9VU0JfT1ZDKTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3VzYjExKCZkYTgzMF9ldm1fdXNiMTFfcGRhdGEpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoIiVzOiBVU0IgMS4xIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJICAgX19mdW5jX18sIHJldCk7CisJCXByX3dhcm4oIiVzOiBVU0IgMS4xIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIH0KIAogc3RhdGljIGNvbnN0IHNob3J0IGRhODMwX2V2bV9tY2FzcDFfcGluc1tdID0gewpAQCAtMjUyLDMxICsyNDksMjkgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2V2bV9tbWNfc2RfcGlucyk7CiAJaWYgKHJldCkgewotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogbW1jL3NkIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBtbWMvc2QgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCQlyZXR1cm47CiAJfQogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KERBODMwX01NQ1NEX1dQX1BJTiwgIk1NQyBXUCIpOwogCWlmIChyZXQpIHsKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAotCQkJICAgREE4MzBfTU1DU0RfV1BfUElOKTsKKwkJcHJfd2FybigiJXM6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAorCQkJX19mdW5jX18sIERBODMwX01NQ1NEX1dQX1BJTik7CiAJCXJldHVybjsKIAl9CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoREE4MzBfTU1DU0RfV1BfUElOKTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdChEQTgzMF9NTUNTRF9DRF9QSU4sICJNTUMgQ0RcbiIpOwogCWlmIChyZXQpIHsKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAotCQkJICAgREE4MzBfTU1DU0RfQ0RfUElOKTsKKwkJcHJfd2FybigiJXM6IGNhbiBub3Qgb3BlbiBHUElPICVkXG4iLAorCQkJX19mdW5jX18sIERBODMwX01NQ1NEX0NEX1BJTik7CiAJCXJldHVybjsKIAl9CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoREE4MzBfTU1DU0RfQ0RfUElOKTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX21tY3NkMCgmZGE4MzBfZXZtX21tY19jb25maWcpOwogCWlmIChyZXQpIHsKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IG1tYy9zZCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogbW1jL3NkIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAkJZ3Bpb19mcmVlKERBODMwX01NQ1NEX1dQX1BJTik7CiAJfQogfQpAQCAtNDA0LDIzICszOTksMjEgQEAKIAlpbnQgcmV0OwogCiAJaWYgKEhBU19NTUMpIHsKLQkJcHJfd2FybmluZygiV0FSTklORzogYm90aCBNTUMvU0QgYW5kIE5BTkQgYXJlICIKLQkJCQkiZW5hYmxlZCwgYnV0IHRoZXkgc2hhcmUgQUVNSUYgcGlucy5cbiIKLQkJCQkiXHREaXNhYmxlIE1NQy9TRCBmb3IgTkFORCBzdXBwb3J0LlxuIik7CisJCXByX3dhcm4oIldBUk5JTkc6IGJvdGggTU1DL1NEIGFuZCBOQU5EIGFyZSBlbmFibGVkLCBidXQgdGhleSBzaGFyZSBBRU1JRiBwaW5zXG4iCisJCQkiXHREaXNhYmxlIE1NQy9TRCBmb3IgTkFORCBzdXBwb3J0XG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2V2bV9lbWlmMjVfcGlucyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGVtaWYyNSBtdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogZW1pZjI1IG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGE4MzBfZXZtX25hbmRfZGV2aWNlKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogTkFORCBkZXZpY2Ugbm90IHJlZ2lzdGVyZWQuXG4iKTsKKwkJcHJfd2FybigiJXM6IE5BTkQgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZGF2aW5jaV9hZW1pZl9zZXR1cCgmZGE4MzBfZXZtX25hbmRfZGV2aWNlKSkKLQkJcHJfd2FybigiJXM6IENhbm5vdCBjb25maWd1cmUgQUVNSUYuXG4iLCBfX2Z1bmNfXyk7CisJCXByX3dhcm4oIiVzOiBDYW5ub3QgY29uZmlndXJlIEFFTUlGXG4iLCBfX2Z1bmNfXyk7CiAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQobXV4X21vZGUsIDEpOwogfQpAQCAtNDM1LDEyICs0MjgsMTEgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2xjZGNudGxfcGlucyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IGxjZGNudGwgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsCi0JCQkJcmV0KTsKKwkJcHJfd2FybigiJXM6IGxjZGNudGwgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfbGNkYygmc2hhcnBfbGNkMDM1cTNkZzAxX3BkYXRhKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogbGNkIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oIiVzOiBsY2Qgc2V0dXAgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQobXV4X21vZGUsIDApOwogfQpAQCAtNTk4LDIyICs1OTAsMTkgQEAKIAogCXJldCA9IGRhODMwX3JlZ2lzdGVyX2dwaW8oKTsKIAlpZiAocmV0KQotCQlwcl93YXJuKCJkYTgzMF9ldm1faW5pdDogR1BJTyBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oIiVzOiBHUElPIGluaXQgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlyZXQgPSBkYTgzMF9yZWdpc3Rlcl9lZG1hKGRhODMwX2VkbWFfcnN2KTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlyZXQgPSBkYXZpbmNpX2NmZ19yZWdfbGlzdChkYTgzMF9pMmMwX3BpbnMpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODMwX2V2bV9pbml0OiBpMmMwIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBpMmMwIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX2kyYygwLCAmZGE4MzBfZXZtX2kyY18wX3BkYXRhKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogaTJjMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogaTJjMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAKIAlkYTgzMF9ldm1fdXNiX2luaXQoKTsKIApAQCAtNjIyLDE4ICs2MTEsMTYgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2NwZ21hY19waW5zKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogY3BnbWFjIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBjcGdtYWMgbXV4IHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfZW1hYygpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODMwX2V2bV9pbml0OiBlbWFjIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiBlbWFjIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3dhdGNoZG9nKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IHdhdGNoZG9nIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIiVzOiB3YXRjaGRvZyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCiAJZGF2aW5jaV9zZXJpYWxfaW5pdChkYTh4eF9zZXJpYWxfZGV2aWNlKTsKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBkYTgzMF9ldm1faTJjX2RldmljZXMsCkBAIC02NDEsOCArNjI4LDcgQEAKIAogCXJldCA9IGRhdmluY2lfY2ZnX3JlZ19saXN0KGRhODMwX2V2bV9tY2FzcDFfcGlucyk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IG1jYXNwMSBtdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwKLQkJCQlyZXQpOworCQlwcl93YXJuKCIlczogbWNhc3AxIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCWRhOHh4X3JlZ2lzdGVyX21jYXNwKDEsICZkYTgzMF9ldm1fc25kX2RhdGEpOwogCkBAIC02NTAsMTggKzYzNiwxNyBAQAogCiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfcnRjKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZGE4MzBfZXZtX2luaXQ6IHJ0YyBzZXR1cCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlwcl93YXJuKCIlczogcnRjIHNldHVwIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCiAJcmV0ID0gc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGE4MzBldm1fc3BpX2luZm8sCiAJCQkJICAgICAgQVJSQVlfU0laRShkYTgzMGV2bV9zcGlfaW5mbykpOwogCWlmIChyZXQpCi0JCXByX3dhcm4oIiVzOiBzcGkgaW5mbyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sCi0JCQlyZXQpOworCQlwcl93YXJuKCIlczogc3BpIGluZm8gcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3NwaV9idXMoMCwgQVJSQVlfU0laRShkYTgzMGV2bV9zcGlfaW5mbykpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODMwX2V2bV9pbml0OiBzcGkgMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCSAgIHJldCk7CisJCXByX3dhcm4oIiVzOiBzcGkgMCByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jCmluZGV4IGZhMTE0MTUuLjZiNWE5N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMKQEAgLTQ1Miw4ICs0NTIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBEQTg1MF9OX1VJX1BCOyBpKyspIHsKIAkJYnV0dG9uID0gJmRhODUwX2V2bV91aV9rZXlzW2ldOwogCQlidXR0b24tPmNvZGUgPSBLRVlfRjggLSBpOwotCQlidXR0b24tPmRlc2MgPSAoY2hhciAqKQotCQkJCWRhODUwX2V2bV91aV9leHBbREE4NTBfRVZNX1VJX0VYUF9QQjggKyBpXTsKKwkJYnV0dG9uLT5kZXNjID0gZGE4NTBfZXZtX3VpX2V4cFtEQTg1MF9FVk1fVUlfRVhQX1BCOCArIGldOwogCQlidXR0b24tPmdwaW8gPSBncGlvICsgREE4NTBfRVZNX1VJX0VYUF9QQjggKyBpOwogCX0KIH0KQEAgLTYyOCwxNSArNjI3LDEzIEBACiAJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbjsKIAogCWJ1dHRvbiA9ICZkYTg1MF9ldm1fYmJfa2V5c1swXTsKLQlidXR0b24tPmRlc2MgPSAoY2hhciAqKQotCQlkYTg1MF9ldm1fYmJfZXhwW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9QQjFdOworCWJ1dHRvbi0+ZGVzYyA9IGRhODUwX2V2bV9iYl9leHBbREE4NTBfRVZNX0JCX0VYUF9VU0VSX1BCMV07CiAJYnV0dG9uLT5ncGlvID0gZ3BpbyArIERBODUwX0VWTV9CQl9FWFBfVVNFUl9QQjE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgREE4NTBfTl9CQl9VU0VSX1NXOyBpKyspIHsKIAkJYnV0dG9uID0gJmRhODUwX2V2bV9iYl9rZXlzW2kgKyAxXTsKIAkJYnV0dG9uLT5jb2RlID0gU1dfTElEICsgaTsKLQkJYnV0dG9uLT5kZXNjID0gKGNoYXIgKikKLQkJCQlkYTg1MF9ldm1fYmJfZXhwW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzEgKyBpXTsKKwkJYnV0dG9uLT5kZXNjID0gZGE4NTBfZXZtX2JiX2V4cFtEQTg1MF9FVk1fQkJfRVhQX1VTRVJfU1cxICsgaV07CiAJCWJ1dHRvbi0+Z3BpbyA9IGdwaW8gKyBEQTg1MF9FVk1fQkJfRVhQX1VTRVJfU1cxICsgaTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ0eC1ldm0uYwppbmRleCBlNTgzZTU4Li4xYTA4OThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NHgtZXZtLmMKQEAgLTc2Nyw5ICs3NjcsOCBAQAogCiAJaWYgKEhBU19BVEEpIHsKIAkJaWYgKEhBU19OQU5EIHx8IEhBU19OT1IpCi0JCQlwcl93YXJuaW5nKCJXQVJOSU5HOiBib3RoIElERSBhbmQgRmxhc2ggYXJlICIKLQkJCQkiZW5hYmxlZCwgYnV0IHRoZXkgc2hhcmUgQUVNSUYgcGlucy5cbiIKLQkJCQkiXHREaXNhYmxlIElERSBmb3IgTkFORC9OT1Igc3VwcG9ydC5cbiIpOworCQkJcHJfd2FybigiV0FSTklORzogYm90aCBJREUgYW5kIEZsYXNoIGFyZSBlbmFibGVkLCBidXQgdGhleSBzaGFyZSBBRU1JRiBwaW5zXG4iCisJCQkJIlx0RGlzYWJsZSBJREUgZm9yIE5BTkQvTk9SIHN1cHBvcnRcbiIpOwogCQlkYXZpbmNpX2luaXRfaWRlKCk7CiAJfSBlbHNlIGlmIChIQVNfTkFORCB8fCBIQVNfTk9SKSB7CiAJCWRhdmluY2lfY2ZnX3JlZyhETTY0NFhfSFBJRU5fRElTQUJMRSk7CkBAIC03ODAsMTMgKzc3OSwxMiBAQAogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYXZpbmNpX2V2bV9uYW5kZmxhc2hfZGV2aWNlKTsKIAogCQkJaWYgKGRhdmluY2lfYWVtaWZfc2V0dXAoJmRhdmluY2lfZXZtX25hbmRmbGFzaF9kZXZpY2UpKQotCQkJCXByX3dhcm4oIiVzOiBDYW5ub3QgY29uZmlndXJlIEFFTUlGLlxuIiwKKwkJCQlwcl93YXJuKCIlczogQ2Fubm90IGNvbmZpZ3VyZSBBRU1JRlxuIiwKIAkJCQkJX19mdW5jX18pOwogCiAJCQlldm1fbGVkc1s3XS5kZWZhdWx0X3RyaWdnZXIgPSAibmFuZC1kaXNrIjsKIAkJCWlmIChIQVNfTk9SKQotCQkJCXByX3dhcm5pbmcoIldBUk5JTkc6IGJvdGggTkFORCBhbmQgTk9SIGZsYXNoICIKLQkJCQkJImFyZSBlbmFibGVkOyBkaXNhYmxlIG9uZSBvZiB0aGVtLlxuIik7CisJCQkJcHJfd2FybigiV0FSTklORzogYm90aCBOQU5EIGFuZCBOT1IgZmxhc2ggYXJlIGVuYWJsZWQ7IGRpc2FibGUgb25lIG9mIHRoZW0uXG4iKTsKIAkJfSBlbHNlIGlmIChIQVNfTk9SKQogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYXZpbmNpX2V2bV9ub3JmbGFzaF9kZXZpY2UpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYwppbmRleCA5NmZjMDBhLi44Y2ZiZmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbWl0eW9tYXBsMTM4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jCkBAIC04LDYgKzgsOCBAQAogICogYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgIk1pdHlPTUFQTDEzODogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CkBAIC0xMDcsNyArMTA5LDcgQEAKIAogCXJldCA9IGRhODUwX3JlZ2lzdGVyX2NwdWZyZXEoInBsbDBfc3lzY2xrMyIpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImNwdWZyZXEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oImNwdWZyZXEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiB9CiAjZWxzZQogc3RhdGljIHZvaWQgbWl0eW9tYXBsMTM4X2NwdWZyZXFfaW5pdChjb25zdCBjaGFyICpwYXJ0bnVtKSB7IH0KQEAgLTEyMSwzMyArMTIzLDMxIEBACiAKIAlyZXQgPSBhLT5yZWFkKGEsIChjaGFyICopJmZhY3RvcnlfY29uZmlnLCAwLCBzaXplb2YoZmFjdG9yeV9jb25maWcpKTsKIAlpZiAocmV0ICE9IHNpemVvZihzdHJ1Y3QgZmFjdG9yeV9jb25maWcpKSB7Ci0JCXByX3dhcm5pbmcoIk1pdHlPTUFQTDEzODogUmVhZCBGYWN0b3J5IENvbmZpZyBGYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oIlJlYWQgRmFjdG9yeSBDb25maWcgRmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBiYWRfY29uZmlnOwogCX0KIAogCWlmIChmYWN0b3J5X2NvbmZpZy5tYWdpYyAhPSBGQUNUT1JZX0NPTkZJR19NQUdJQykgewotCQlwcl93YXJuaW5nKCJNaXR5T01BUEwxMzg6IEZhY3RvcnkgQ29uZmlnIE1hZ2ljIFdyb25nICglWClcbiIsCi0JCQkJZmFjdG9yeV9jb25maWcubWFnaWMpOworCQlwcl93YXJuKCJGYWN0b3J5IENvbmZpZyBNYWdpYyBXcm9uZyAoJVgpXG4iLAorCQkJZmFjdG9yeV9jb25maWcubWFnaWMpOwogCQlnb3RvIGJhZF9jb25maWc7CiAJfQogCiAJaWYgKGZhY3RvcnlfY29uZmlnLnZlcnNpb24gIT0gRkFDVE9SWV9DT05GSUdfVkVSU0lPTikgewotCQlwcl93YXJuaW5nKCJNaXR5T01BUEwxMzg6IEZhY3RvcnkgQ29uZmlnIFZlcnNpb24gV3JvbmcgKCVYKVxuIiwKLQkJCQlmYWN0b3J5X2NvbmZpZy52ZXJzaW9uKTsKKwkJcHJfd2FybigiRmFjdG9yeSBDb25maWcgVmVyc2lvbiBXcm9uZyAoJVgpXG4iLAorCQkJZmFjdG9yeV9jb25maWcudmVyc2lvbik7CiAJCWdvdG8gYmFkX2NvbmZpZzsKIAl9CiAKLQlwcl9pbmZvKCJNaXR5T01BUEwxMzg6IEZvdW5kIE1BQyA9ICVwTVxuIiwgZmFjdG9yeV9jb25maWcubWFjKTsKKwlwcl9pbmZvKCJGb3VuZCBNQUMgPSAlcE1cbiIsIGZhY3RvcnlfY29uZmlnLm1hYyk7CiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZmFjdG9yeV9jb25maWcubWFjKSkKIAkJbWVtY3B5KHNvY19pbmZvLT5lbWFjX3BkYXRhLT5tYWNfYWRkciwKIAkJCWZhY3RvcnlfY29uZmlnLm1hYywgRVRIX0FMRU4pOwogCWVsc2UKLQkJcHJfd2FybmluZygiTWl0eU9NQVBMMTM4OiBJbnZhbGlkIE1BQyBmb3VuZCAiCi0JCQkJImluIGZhY3RvcnkgY29uZmlnIGJsb2NrXG4iKTsKKwkJcHJfd2FybigiSW52YWxpZCBNQUMgZm91bmQgaW4gZmFjdG9yeSBjb25maWcgYmxvY2tcbiIpOwogCiAJcGFydG51bSA9IGZhY3RvcnlfY29uZmlnLnBhcnRudW07Ci0JcHJfaW5mbygiTWl0eU9NQVBMMTM4OiBQYXJ0IE51bWJlciA9ICVzXG4iLCBwYXJ0bnVtKTsKKwlwcl9pbmZvKCJQYXJ0IE51bWJlciA9ICVzXG4iLCBwYXJ0bnVtKTsKIAogYmFkX2NvbmZpZzoKIAkvKiBkZWZhdWx0IG1heGltdW0gc3BlZWQgaXMgdmFsaWQgZm9yIGFsbCBwbGF0Zm9ybXMgKi8KQEAgLTQzNSw3ICs0MzUsNyBAQAogCQkJCSBBUlJBWV9TSVpFKG1pdHlvbWFwbDEzOF9kZXZpY2VzKSk7CiAKIAlpZiAoZGF2aW5jaV9hZW1pZl9zZXR1cCgmbWl0eW9tYXBsMTM4X25hbmRmbGFzaF9kZXZpY2UpKQotCQlwcl93YXJuKCIlczogQ2Fubm90IGNvbmZpZ3VyZSBBRU1JRi5cbiIsIF9fZnVuY19fKTsKKwkJcHJfd2FybigiJXM6IENhbm5vdCBjb25maWd1cmUgQUVNSUZcbiIsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIGNvbnN0IHNob3J0IG1pdHlvbWFwX21paV9waW5zW10gPSB7CkBAIC00NzgsNyArNDc4LDcgQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCXByX3dhcm5pbmcoIm1paS9ybWlpIG11eCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlwcl93YXJuKCJtaWkvcm1paSBtdXggc2V0dXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDg5LDcgKzQ4OSw3IEBACiAKIAlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9lbWFjKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZW1hYyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiZW1hYyByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBkYXZpbmNpX3BtX2NvbmZpZyBkYTg1MF9wbV9wZGF0YSA9IHsKQEAgLTUxMSwyMSArNTExLDIxIEBACiAJLyogZm9yIG5vdywgbm8gc3BlY2lhbCBFRE1BIGNoYW5uZWxzIGFyZSByZXNlcnZlZCAqLwogCXJldCA9IGRhODUwX3JlZ2lzdGVyX2VkbWEoTlVMTCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3dhdGNoZG9nKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygid2F0Y2hkb2cgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oIndhdGNoZG9nIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCiAJZGF2aW5jaV9zZXJpYWxfaW5pdChkYTh4eF9zZXJpYWxfZGV2aWNlKTsKIAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX2kyYygwLCAmbWl0eW9tYXBfaTJjXzBfcGRhdGEpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImkyYzAgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oImkyYzAgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiAKIAlyZXQgPSBwbWljX3RwczY1MDIzX2luaXQoKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJUUFM2NTAyMyBQTUlDIGluaXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiVFBTNjUwMjMgUE1JQyBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CiAKIAltaXR5b21hcGwxMzhfc2V0dXBfbmFuZCgpOwogCkBAIC01MzcsMjIgKzUzNywyMSBAQAogCXJldCA9IGRhOHh4X3JlZ2lzdGVyX3NwaV9idXMoMSwKIAkJCQkgICAgIEFSUkFZX1NJWkUobWl0eW9tYXBsMTM4X3NwaV9mbGFzaF9pbmZvKSk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygic3BpIDEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXByX3dhcm4oInNwaSAxIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCiAJbWl0eW9tYXBsMTM4X2NvbmZpZ19lbWFjKCk7CiAKIAlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9ydGMoKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJydGMgc2V0dXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigicnRjIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7CiAKIAlyZXQgPSBkYTh4eF9yZWdpc3Rlcl9jcHVpZGxlKCk7CiAJaWYgKHJldCkKLQkJcHJfd2FybmluZygiY3B1aWRsZSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcHJfd2FybigiY3B1aWRsZSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAogCXJldCA9IGRhODUwX3JlZ2lzdGVyX3BtKCZkYTg1MF9wbV9kZXZpY2UpOwogCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImRhODUwX2V2bV9pbml0OiBzdXNwZW5kIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7CisJCXByX3dhcm4oInN1c3BlbmQgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW5ldXJvcy1vc2QyLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYwppbmRleCBiYjY4MGFmLi44ZmNkY2Y4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYwpAQCAtMTgzLDkgKzE4Myw4IEBACiAKIAlpZiAoSEFTX0FUQSkgewogCQlpZiAoSEFTX05BTkQpCi0JCQlwcl93YXJuaW5nKCJXQVJOSU5HOiBib3RoIElERSBhbmQgRmxhc2ggYXJlICIKLQkJCQkiZW5hYmxlZCwgYnV0IHRoZXkgc2hhcmUgQUVNSUYgcGlucy5cbiIKLQkJCQkiXHREaXNhYmxlIElERSBmb3IgTkFORC9OT1Igc3VwcG9ydC5cbiIpOworCQkJcHJfd2FybigiV0FSTklORzogYm90aCBJREUgYW5kIEZsYXNoIGFyZSBlbmFibGVkLCBidXQgdGhleSBzaGFyZSBBRU1JRiBwaW5zXG4iCisJCQkJIlx0RGlzYWJsZSBJREUgZm9yIE5BTkQvTk9SIHN1cHBvcnRcbiIpOwogCQlkYXZpbmNpX2luaXRfaWRlKCk7CiAJfSBlbHNlIGlmIChIQVNfTkFORCkgewogCQlkYXZpbmNpX2NmZ19yZWcoRE02NDRYX0hQSUVOX0RJU0FCTEUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYwppbmRleCA5ODVlNWZkLi5jNzBiYjBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suYwpAQCAtNTY0LDcgKzU2NCw3IEBACiAKIAlyZWZjbGsgPSBjbGtfZ2V0KE5VTEwsICJyZWYiKTsKIAlpZiAoSVNfRVJSKHJlZmNsaykpIHsKLQkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGdldCByZWZlcmVuY2UgY2xvY2suXG4iLCBfX2Z1bmNfXyk7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBnZXQgcmVmZXJlbmNlIGNsb2NrXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBQVFJfRVJSKHJlZmNsayk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1aWRsZS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwdWlkbGUuYwppbmRleCBmMWFjMWM5Li5iNDY3NWZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1aWRsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVpZGxlLmMKQEAgLTY2LDcgKzY2LDYgQEAKIAkJLmVudGVyCQkJPSBkYXZpbmNpX2VudGVyX2lkbGUsCiAJCS5leGl0X2xhdGVuY3kJCT0gMTAsCiAJCS50YXJnZXRfcmVzaWRlbmN5CT0gMTAwMDAsCi0JCS5mbGFncwkJCT0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCiAJCS5uYW1lCQkJPSAiRERSIFNSIiwKIAkJLmRlc2MJCQk9ICJXRkkgYW5kIEREUiBTZWxmIFJlZnJlc2giLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvbXV4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvbXV4LmMKaW5kZXggZjM0YThkYy4uYThlYjkwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9tdXguYwpAQCAtMTUsNiArMTUsOSBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cy4KICAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC00Niw3ICs0OSw3IEBACiAJfQogCiAJaWYgKGluZGV4ID49IHNvY19pbmZvLT5waW5tdXhfcGluc19udW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIHBpbiBtdXggaW5kZXg6ICVsdSAoJWx1KVxuIiwKKwkJcHJfZXJyKCJJbnZhbGlkIHBpbiBtdXggaW5kZXg6ICVsdSAoJWx1KVxuIiwKIAkJICAgICAgIGluZGV4LCBzb2NfaW5mby0+cGlubXV4X3BpbnNfbnVtKTsKIAkJZHVtcF9zdGFjaygpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU1LDcgKzU4LDcgQEAKIAljZmcgPSAmc29jX2luZm8tPnBpbm11eF9waW5zW2luZGV4XTsKIAogCWlmIChjZmctPm5hbWUgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIk5vIGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIGluZGV4XG4iKTsKKwkJcHJfZXJyKCJObyBlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBpbmRleFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODIsMTUgKzg1LDE1IEBACiAKIAlpZiAod2FybikgewogI2lmZGVmIENPTkZJR19EQVZJTkNJX01VWF9XQVJOSU5HUwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJNVVg6IGluaXRpYWxpemVkICVzXG4iLCBjZmctPm5hbWUpOworCQlwcl93YXJuKCJpbml0aWFsaXplZCAlc1xuIiwgY2ZnLT5uYW1lKTsKICNlbmRpZgogCX0KIAogI2lmZGVmIENPTkZJR19EQVZJTkNJX01VWF9ERUJVRwogCWlmIChjZmctPmRlYnVnIHx8IHdhcm4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTVVYOiBTZXR0aW5nIHJlZ2lzdGVyICVzXG4iLCBjZmctPm5hbWUpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIJICAgJXMgKDB4JTA4eCkgPSAweCUwOHggLT4gMHglMDh4XG4iLAotCQkgICAgICAgY2ZnLT5tdXhfcmVnX25hbWUsIGNmZy0+bXV4X3JlZywgcmVnX29yaWcsIHJlZyk7CisJCXByX3dhcm4oIlNldHRpbmcgcmVnaXN0ZXIgJXNcbiIsIGNmZy0+bmFtZSk7CisJCXByX3dhcm4oIiAgICVzICgweCUwOHgpID0gMHglMDh4IC0+IDB4JTA4eFxuIiwKKwkJCWNmZy0+bXV4X3JlZ19uYW1lLCBjZmctPm11eF9yZWcsIHJlZ19vcmlnLCByZWcpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvcG1fZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvcG1fZG9tYWluLmMKaW5kZXggNmI5ODQxMy4uNjQxZWRjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3BtX2RvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wbV9kb21haW4uYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX2Nsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBkYXZpbmNpX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvdGltZS5jCmluZGV4IDI0YWQzMGYuLjE2MGM5NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RpbWUuYwpAQCAtMzQyLDggKzM0Miw2IEBACiAJc3RydWN0IGRhdmluY2lfc29jX2luZm8gKnNvY19pbmZvID0gJmRhdmluY2lfc29jX2luZm87CiAJdW5zaWduZWQgaW50IGNsb2NrZXZlbnRfaWQ7CiAJdW5zaWduZWQgaW50IGNsb2Nrc291cmNlX2lkOwotCXN0YXRpYyBjaGFyIGVycltdIF9faW5pdGRhdGEgPSBLRVJOX0VSUgotCQkiJXM6IGNhbid0IHJlZ2lzdGVyIGNsb2Nrc291cmNlIVxuIjsKIAlpbnQgaTsKIAogCWNsb2NrZXZlbnRfaWQgPSBzb2NfaW5mby0+dGltZXJfaW5mby0+Y2xvY2tldmVudF9pZDsKQEAgLTM2NCwxMiArMzYyLDEyIEBACiAKIAkJLyogT25seSBib3R0b20gdGltZXJzIGNhbiB1c2UgY29tcGFyZSByZWdzICovCiAJCWlmIChJU19USU1FUl9UT1AoY2xvY2tldmVudF9pZCkpCi0JCQlwcl93YXJuaW5nKCJkYXZpbmNpX3RpbWVyX2luaXQ6IEludmFsaWQgdXNlIgotCQkJCSIgb2Ygc3lzdGVtIHRpbWVycy4gIFJlc3VsdHMgdW5wcmVkaWN0YWJsZS5cbiIpOworCQkJcHJfd2FybigiJXM6IEludmFsaWQgdXNlIG9mIHN5c3RlbSB0aW1lcnMuICBSZXN1bHRzIHVucHJlZGljdGFibGUuXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJZWxzZSBpZiAoKGR0aXBbZXZlbnRfdGltZXJdLmNtcF9vZmYgPT0gMCkKIAkJCQl8fCAoZHRpcFtldmVudF90aW1lcl0uY21wX2lycSA9PSAwKSkKLQkJCXByX3dhcm5pbmcoImRhdmluY2lfdGltZXJfaW5pdDogIEludmFsaWQgdGltZXIgaW5zdGFuY2UiCi0JCQkJIiBzZXR1cC4gIFJlc3VsdHMgdW5wcmVkaWN0YWJsZS5cbiIpOworCQkJcHJfd2FybigiJXM6IEludmFsaWQgdGltZXIgaW5zdGFuY2Ugc2V0dXAuICBSZXN1bHRzIHVucHJlZGljdGFibGUuXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJZWxzZSB7CiAJCQl0aW1lcnNbVElEX0NMT0NLRVZFTlRdLm9wdHMgfD0gVElNRVJfT1BUU19VU0VfQ09NUEFSRTsKIAkJCWNsb2NrZXZlbnRfZGF2aW5jaS5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX09ORVNIT1Q7CkBAIC0zODksNyArMzg3LDggQEAKIAljbG9ja3NvdXJjZV9kYXZpbmNpLm5hbWUgPSBpZF90b19uYW1lW2Nsb2Nrc291cmNlX2lkXTsKIAlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2RhdmluY2ksCiAJCQkJICAgIGRhdmluY2lfY2xvY2tfdGlja19yYXRlKSkKLQkJcHJpbnRrKGVyciwgY2xvY2tzb3VyY2VfZGF2aW5jaS5uYW1lKTsKKwkJcHJfZXJyKCIlczogY2FuJ3QgcmVnaXN0ZXIgY2xvY2tzb3VyY2UhXG4iLAorCQkgICAgICAgY2xvY2tzb3VyY2VfZGF2aW5jaS5uYW1lKTsKIAogCXNjaGVkX2Nsb2NrX3JlZ2lzdGVyKGRhdmluY2lfcmVhZF9zY2hlZF9jbG9jaywgMzIsCiAJCQkgIGRhdmluY2lfY2xvY2tfdGlja19yYXRlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCAxMWJiMDc5Li42OTk3NTc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0yOSw5ICsyOSw5IEBACiB1MTYgX19yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwogdTMyIF9fcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIAotdm9pZCBfX3dyaXRlYih1OCAgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpOwotdm9pZCBfX3dyaXRldyh1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpOwotdm9pZCBfX3dyaXRlbCh1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpOwordm9pZCBfX3dyaXRlYih1OCAgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwordm9pZCBfX3dyaXRldyh1MTYgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwordm9pZCBfX3dyaXRlbCh1MzIgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwogCiAvKgogICogQXJnaCwgc29tZW9uZSBmb3Jnb3QgdGhlIElPQ1MxNiBsaW5lLiAgV2UgdGhlcmVmb3JlIGhhdmUgdG8gaGFuZGxlCkBAIC02MiwyMCArNjIsMzEgQEAKICNkZWZpbmUgd3JpdGV3KHYsYikJCV9fd3JpdGV3KHYsYikKICNkZWZpbmUgd3JpdGVsKHYsYikJCV9fd3JpdGVsKHYsYikKIAorI2RlZmluZSBpbnNiIGluc2IKIGV4dGVybiB2b2lkIGluc2IodW5zaWduZWQgaW50IHBvcnQsIHZvaWQgKmJ1ZiwgaW50IHN6KTsKKyNkZWZpbmUgaW5zdyBpbnN3CiBleHRlcm4gdm9pZCBpbnN3KHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpidWYsIGludCBzeik7CisjZGVmaW5lIGluc2wgaW5zbAogZXh0ZXJuIHZvaWQgaW5zbCh1bnNpZ25lZCBpbnQgcG9ydCwgdm9pZCAqYnVmLCBpbnQgc3opOwogCisjZGVmaW5lIG91dHNiIG91dHNiCiBleHRlcm4gdm9pZCBvdXRzYih1bnNpZ25lZCBpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgc3opOworI2RlZmluZSBvdXRzdyBvdXRzdwogZXh0ZXJuIHZvaWQgb3V0c3codW5zaWduZWQgaW50IHBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHN6KTsKKyNkZWZpbmUgb3V0c2wgb3V0c2wKIGV4dGVybiB2b2lkIG91dHNsKHVuc2lnbmVkIGludCBwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBzeik7CiAKIC8qIGNhbid0IHN1cHBvcnQgd3JpdGVzYiBhdG0gKi8KLWV4dGVybiB2b2lkIHdyaXRlc3codm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7Ci1leHRlcm4gdm9pZCB3cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOworI2RlZmluZSB3cml0ZXN3IHdyaXRlc3cKK2V4dGVybiB2b2lkIHdyaXRlc3codm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7CisjZGVmaW5lIHdyaXRlc2wgd3JpdGVzbAorZXh0ZXJuIHZvaWQgd3JpdGVzbCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKIAogLyogY2FuJ3Qgc3VwcG9ydCByZWFkc2IgYXRtICovCi1leHRlcm4gdm9pZCByZWFkc3coY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7Ci1leHRlcm4gdm9pZCByZWFkc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CisjZGVmaW5lIHJlYWRzdyByZWFkc3cKK2V4dGVybiB2b2lkIHJlYWRzdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCB3b3JkbGVuKTsKKworI2RlZmluZSByZWFkc2wgcmVhZHNsCitleHRlcm4gdm9pZCByZWFkc2woY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lvLmMgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW8uYwppbmRleCA3NTZjYzM3Li5iNTc5ODBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW8uYwpAQCAtMTAyLDcgKzEwMiw3IEBACiBFWFBPUlRfU1lNQk9MKF9fcmVhZHcpOwogRVhQT1JUX1NZTUJPTChfX3JlYWRsKTsKIAotdm9pZCByZWFkc3coY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbGVuKQordm9pZCByZWFkc3coY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbGVuKQogewogCXZvaWQgX19pb21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKIApAQCAtMTEyLDcgKzExMiw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHJlYWRzdyk7CiAKLXZvaWQgcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3ZvaWQgcmVhZHNsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogfQogRVhQT1JUX1NZTUJPTChyZWFkc2wpOwogCi12b2lkIF9fd3JpdGViKHU4IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQordm9pZCBfX3dyaXRlYih1OCB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CiAKQEAgLTEzMiw3ICsxMzIsNyBAQAogCQlfX3Jhd193cml0ZWIodmFsLCBhKTsKIH0KIAotdm9pZCBfX3dyaXRldyh1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit2b2lkIF9fd3JpdGV3KHUxNiB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CiAKQEAgLTE0Miw3ICsxNDIsNyBAQAogCV9fcmF3X3dyaXRldyh2YWwsIGEpOwogfQogCi12b2lkIF9fd3JpdGVsKHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3ZvaWQgX193cml0ZWwodTMyIHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXZvaWQgX19pb21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKIApAQCAtMTU3LDcgKzE1Nyw3IEBACiBFWFBPUlRfU1lNQk9MKF9fd3JpdGV3KTsKIEVYUE9SVF9TWU1CT0woX193cml0ZWwpOwogCi12b2lkIHdyaXRlc3codm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQordm9pZCB3cml0ZXN3KHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQAogfQogRVhQT1JUX1NZTUJPTCh3cml0ZXN3KTsKIAotdm9pZCB3cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKK3ZvaWQgd3JpdGVzbCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS5jCmluZGV4IGQ4YmZkMDIuLjg4YTRjOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS5jCkBAIC02NiwxMSArNjYsMTUgQEAKIAkubnVtX2NoYW5uZWxzCQk9IEFSUkFZX1NJWkUoZXA5M3h4X2RtYV9tMnBfY2hhbm5lbHMpLAogfTsKIAorc3RhdGljIHU2NCBlcDkzeHhfZG1hX20ycF9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2RtYV9tMnBfZGV2aWNlID0gewogCS5uYW1lCQkJPSAiZXA5M3h4LWRtYS1tMnAiLAogCS5pZAkJCT0gLTEsCiAJLmRldgkJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZlcDkzeHhfZG1hX20ycF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZXA5M3h4X2RtYV9tMnBfZGF0YSwKKwkJLmRtYV9tYXNrCQk9ICZlcDkzeHhfZG1hX20ycF9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAogCX0sCiB9OwogCkBAIC05MywxMSArOTcsMTUgQEAKIAkubnVtX2NoYW5uZWxzCQk9IEFSUkFZX1NJWkUoZXA5M3h4X2RtYV9tMm1fY2hhbm5lbHMpLAogfTsKIAorc3RhdGljIHU2NCBlcDkzeHhfZG1hX20ybV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2RtYV9tMm1fZGV2aWNlID0gewogCS5uYW1lCQkJPSAiZXA5M3h4LWRtYS1tMm0iLAogCS5pZAkJCT0gLTEsCiAJLmRldgkJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZlcDkzeHhfZG1hX20ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZXA5M3h4X2RtYV9tMm1fZGF0YSwKKwkJLmRtYV9tYXNrCQk9ICZlcDkzeHhfZG1hX20ybV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvS2NvbmZpZwppbmRleCAyZDAyNDBmLi5iYjljNTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL0tjb25maWcKQEAgLTIxLDkgKzIxLDEwIEBACiAJc2VsZWN0IEhBVkVfUzNDX1JUQyBpZiBSVENfQ0xBU1MKIAlzZWxlY3QgUElOQ1RSTAogCXNlbGVjdCBQSU5DVFJMX0VYWU5PUwotCXNlbGVjdCBQTV9HRU5FUklDX0RPTUFJTlMgaWYgUE1fUlVOVElNRQorCXNlbGVjdCBQTV9HRU5FUklDX0RPTUFJTlMgaWYgUE0KIAlzZWxlY3QgUzVQX0RFVl9NRkMKIAlzZWxlY3QgU1JBTQorCXNlbGVjdCBNRkRfU1lTQ09OCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgU0FNU1VORyBFWFlOT1MgU29DcyAoRVhZTk9TNC81KQogCkBAIC03NSw2ICs3NiwxMSBAQAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gQVJDSF9FWFlOT1M0CiAKK2NvbmZpZyBTT0NfRVhZTk9TNDQxNQorCWJvb2wgIlNBTVNVTkcgRVhZTk9TNDQxNSIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFSQ0hfRVhZTk9TNAorCiBjb25maWcgU09DX0VYWU5PUzUyNTAKIAlib29sICJTQU1TVU5HIEVYWU5PUzUyNTAiCiAJZGVmYXVsdCB5CkBAIC0xMjMsNCArMTI5LDkgQEAKIAkgIFRoaXMgaXMgbmVlZGVkIHRvIHByb3ZpZGUgQ1BVIGFuZCBjbHVzdGVyIHBvd2VyIG1hbmFnZW1lbnQKIAkgIG9uIEV4eW5vczU0MjAgaW1wbGVtZW50aW5nIGJpZy5MSVRUTEUuCiAKK2NvbmZpZyBFWFlOT1NfQ1BVX1NVU1BFTkQKKwlib29sCisJc2VsZWN0IEFSTV9DUFVfU1VTUEVORAorCWRlZmF1bHQgUE1fU0xFRVAgfHwgQVJNX0VYWU5PU19DUFVJRExFCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL01ha2VmaWxlCmluZGV4IDI3YWU2MTQuLmJjZWZiNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL01ha2VmaWxlCkBAIC0xMSwxNiArMTEsMTUgQEAKIAogb2JqLSQoQ09ORklHX0FSQ0hfRVhZTk9TKQkrPSBleHlub3MubyBwbXUubyBleHlub3Mtc21jLm8gZmlybXdhcmUubwogCi1vYmotJChDT05GSUdfUE1fU0xFRVApCQkrPSBwbS5vIHNsZWVwLm8KK29iai0kKENPTkZJR19FWFlOT1NfQ1BVX1NVU1BFTkQpICs9IHBtLm8gc2xlZXAubworb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkJKz0gc3VzcGVuZC5vCiBvYmotJChDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TKSArPSBwbV9kb21haW5zLm8KIAogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHBsYXRzbXAubyBoZWFkc21wLm8KIAotb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBob3RwbHVnLm8KLUNGTEFHU19ob3RwbHVnLm8JCSs9IC1tYXJjaD1hcm12Ny1hCi0KIHBsdXNfc2VjIDo9ICQoY2FsbCBhcy1pbnN0ciwuYXJjaF9leHRlbnNpb24gc2VjLCtzZWMpCiBBRkxBR1NfZXh5bm9zLXNtYy5vCQk6PS1XYSwtbWFyY2g9YXJtdjctYSQocGx1c19zZWMpCitBRkxBR1Nfc2xlZXAubwkJCTo9LVdhLC1tYXJjaD1hcm12Ny1hJChwbHVzX3NlYykKIAogb2JqLSQoQ09ORklHX0VYWU5PUzU0MjBfTUNQTSkJKz0gbWNwbS1leHlub3MubwogQ0ZMQUdTX21jcG0tZXh5bm9zLm8JCSs9IC1tYXJjaD1hcm12Ny1hCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2NvbW1vbi5oCmluZGV4IDQ3YjkwNGIuLjg2NWY4NzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2NvbW1vbi5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9FWFlOT1NfQ09NTU9OX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX0VYWU5PU19DT01NT05fSAogCi0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KIAogI2RlZmluZSBFWFlOT1MzMjUwX1NPQ19JRAkweEUzNDcyMDAwCkBAIC0xMTEsMTEgKzExMCwxOSBAQAogI2RlZmluZSBzb2NfaXNfZXh5bm9zNSgpIChzb2NfaXNfZXh5bm9zNTI1MCgpIHx8IHNvY19pc19leHlub3M1NDEwKCkgfHwgXAogCQkJICBzb2NfaXNfZXh5bm9zNTQyMCgpIHx8IHNvY19pc19leHlub3M1ODAwKCkpCiAKK2V4dGVybiB1MzIgY3AxNV9zYXZlX2RpYWc7CitleHRlcm4gdTMyIGNwMTVfc2F2ZV9wb3dlcjsKKwogZXh0ZXJuIHZvaWQgX19pb21lbSAqc3lzcmFtX25zX2Jhc2VfYWRkcjsKIGV4dGVybiB2b2lkIF9faW9tZW0gKnN5c3JhbV9iYXNlX2FkZHI7CiBleHRlcm4gdm9pZCBfX2lvbWVtICpwbXVfYmFzZV9hZGRyOwogdm9pZCBleHlub3Nfc3lzcmFtX2luaXQodm9pZCk7CiAKK2VudW0geworCUZXX0RPX0lETEVfU0xFRVAsCisJRldfRE9fSURMRV9BRlRSLAorfTsKKwogdm9pZCBleHlub3NfZmlybXdhcmVfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIHUzMiBleHlub3NfZ2V0X2VpbnRfd2FrZV9tYXNrKHZvaWQpOwpAQCAtMTI3LDM0ICsxMzQsMjAgQEAKICNlbmRpZgogCiBleHRlcm4gdm9pZCBleHlub3NfY3B1X3Jlc3VtZSh2b2lkKTsKK2V4dGVybiB2b2lkIGV4eW5vc19jcHVfcmVzdW1lX25zKHZvaWQpOwogCiBleHRlcm4gc3RydWN0IHNtcF9vcGVyYXRpb25zIGV4eW5vc19zbXBfb3BzOwogCi1leHRlcm4gdm9pZCBleHlub3NfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKLQotLyogUE1VKFBvd2VyIE1hbmFnZW1lbnQgVW5pdCkgc3VwcG9ydCAqLwotCi0jZGVmaW5lIFBNVV9UQUJMRV9FTkQJKC0xVSkKLQotZW51bSBzeXNfcG93ZXJkb3duIHsKLQlTWVNfQUZUUiwKLQlTWVNfTFBBLAotCVNZU19TTEVFUCwKLQlOVU1fU1lTX1BPV0VSRE9XTiwKLX07Ci0KLXN0cnVjdCBleHlub3NfcG11X2NvbmYgewotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JdW5zaWduZWQgaW50IHZhbFtOVU1fU1lTX1BPV0VSRE9XTl07Ci19OwotCi1leHRlcm4gdm9pZCBleHlub3Nfc3lzX3Bvd2VyZG93bl9jb25mKGVudW0gc3lzX3Bvd2VyZG93biBtb2RlKTsKIGV4dGVybiB2b2lkIGV4eW5vc19jcHVfcG93ZXJfZG93bihpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGV4eW5vc19jcHVfcG93ZXJfdXAoaW50IGNwdSk7CiBleHRlcm4gaW50ICBleHlub3NfY3B1X3Bvd2VyX3N0YXRlKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgZXh5bm9zX2NsdXN0ZXJfcG93ZXJfZG93bihpbnQgY2x1c3Rlcik7CiBleHRlcm4gdm9pZCBleHlub3NfY2x1c3Rlcl9wb3dlcl91cChpbnQgY2x1c3Rlcik7CiBleHRlcm4gaW50ICBleHlub3NfY2x1c3Rlcl9wb3dlcl9zdGF0ZShpbnQgY2x1c3Rlcik7CitleHRlcm4gdm9pZCBleHlub3NfY3B1X3NhdmVfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCBleHlub3NfY3B1X3Jlc3RvcmVfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCBleHlub3NfcG1fY2VudHJhbF9zdXNwZW5kKHZvaWQpOworZXh0ZXJuIGludCBleHlub3NfcG1fY2VudHJhbF9yZXN1bWUodm9pZCk7CiBleHRlcm4gdm9pZCBleHlub3NfZW50ZXJfYWZ0cih2b2lkKTsKIAogZXh0ZXJuIHZvaWQgczVwX2luaXRfY3B1KHZvaWQgX19pb21lbSAqY3B1aWRfYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9leHlub3MtcG11LmggYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9leHlub3MtcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhYjBkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2V4eW5vcy1wbXUuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIEhlYWRlciBmb3IgRVhZTk9TIFBNVSBEcml2ZXIgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0VYWU5PU19QTVVfSAorI2RlZmluZSBfX0VYWU5PU19QTVVfSAorCitlbnVtIHN5c19wb3dlcmRvd24geworCVNZU19BRlRSLAorCVNZU19MUEEsCisJU1lTX1NMRUVQLAorCU5VTV9TWVNfUE9XRVJET1dOLAorfTsKKworZXh0ZXJuIHZvaWQgZXh5bm9zX3N5c19wb3dlcmRvd25fY29uZihlbnVtIHN5c19wb3dlcmRvd24gbW9kZSk7CisKKyNlbmRpZiAvKiBfX0VYWU5PU19QTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvZXh5bm9zLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9leHlub3MuYwppbmRleCA2YjI4M2ViLi5jMTNkMDgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9leHlub3MuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9leHlub3MuYwpAQCAtNDEsNDEgKzQxLDExIEBACiAJCS5sZW5ndGgJCT0gU1pfNjRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9USU1FUiwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfVElNRVIpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfV0FUQ0hET0csCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX1dBVENIRE9HKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfU1JPTUMsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX1NST01DKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfU1lTVElNRVIsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX1NZU1RJTUVSKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfQ09NQklORVJfQkFTRSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfQ09NQklORVIpLAotCQkubGVuZ3RoCQk9IFNaXzRLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9HSUNfQ1BVLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9HSUNfQ1BVKSwKLQkJLmxlbmd0aAkJPSBTWl82NEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX0dJQ19ESVNULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9HSUNfRElTVCksCi0JCS5sZW5ndGgJCT0gU1pfNjRLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewogCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9DTVUsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0NNVSksCiAJCS5sZW5ndGgJCT0gU1pfMTI4SywKQEAgLTg2LDExICs1Niw2IEBACiAJCS5sZW5ndGgJCT0gU1pfOEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX0wyQ0MsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0wyQ0MpLAotCQkubGVuZ3RoCQk9IFNaXzRLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewogCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9ETUMwLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9ETUMwKSwKIAkJLmxlbmd0aAkJPSBTWl82NEssCkBAIC0xMDAsMTEgKzY1LDYgQEAKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzRfUEFfRE1DMSksCiAJCS5sZW5ndGgJCT0gU1pfNjRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9VU0JfSFNQSFksCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0hTUEhZKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sCiB9OwogCkBAIC0xMTUsMTYgKzc1LDYgQEAKIAkJLmxlbmd0aAkJPSBTWl82NEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX1RJTUVSLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNV9QQV9USU1FUiksCi0JCS5sZW5ndGgJCT0gU1pfMTZLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9XQVRDSERPRywKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzVfUEFfV0FUQ0hET0cpLAotCQkubGVuZ3RoCQk9IFNaXzRLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewogCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9TUk9NQywKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVYWU5PUzVfUEFfU1JPTUMpLAogCQkubGVuZ3RoCQk9IFNaXzRLLApAQCAtMTM3LDI4ICs4Nyw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdTMyIHZhbCA9IDB4MTsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBwbXVfYmFzZV9hZGRyICsgRVhZTk9TX1NXUkVTRVQ7Ci0KLQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczU0NDAiKSkgewotCQl1MzIgc3RhdHVzOwotCQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJzYW1zdW5nLGV4eW5vczU0NDAtY2xvY2siKTsKLQotCQlhZGRyID0gb2ZfaW9tYXAobnAsIDApICsgMHhiYzsKLQkJc3RhdHVzID0gX19yYXdfcmVhZGwoYWRkcik7Ci0KLQkJYWRkciA9IG9mX2lvbWFwKG5wLCAwKSArIDB4Y2M7Ci0JCXZhbCA9IF9fcmF3X3JlYWRsKGFkZHIpOwotCi0JCXZhbCA9ICh2YWwgJiAweGZmZmYwMDAwKSB8IChzdGF0dXMgJiAweGZmZmYpOwotCX0KLQotCV9fcmF3X3dyaXRlbCh2YWwsIGFkZHIpOwotfQotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBleHlub3NfY3B1aWRsZSA9IHsKIAkubmFtZSAgICAgICAgICAgICAgPSAiZXh5bm9zX2NwdWlkbGUiLAogI2lmZGVmIENPTkZJR19BUk1fRVhZTk9TX0NQVUlETEUKQEAgLTI1Miw2ICsxODAsNyBAQAogCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEwLXBtdSIgfSwKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1wbXUiIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQ0MTItcG11IiB9LAorCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDE1LXBtdSIgfSwKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTI1MC1wbXUiIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNjAtcG11IiB9LAogCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDEwLXBtdSIgfSwKQEAgLTMxOCw3ICsyNDcsMTAgQEAKIAkJZXh5bm9zX3N5c3JhbV9pbml0KCk7CiAKIAlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczQyMTAiKSB8fAotCQkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczUyNTAiKSkKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczQyMTIiKSB8fAorCSAgICAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczQ0MTIiKSAmJgorCSAgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLHRyYXRzMiIpKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInNhbXN1bmcsZXh5bm9zNTI1MCIpKQogCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmV4eW5vc19jcHVpZGxlKTsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImV4eW5vcy1jcHVmcmVxIiwgLTEsIE5VTEwsIDApOwpAQCAtMzMzLDYgKzI2NSw3IEBACiAJInNhbXN1bmcsZXh5bm9zNDIxMCIsCiAJInNhbXN1bmcsZXh5bm9zNDIxMiIsCiAJInNhbXN1bmcsZXh5bm9zNDQxMiIsCisJInNhbXN1bmcsZXh5bm9zNDQxNSIsCiAJInNhbXN1bmcsZXh5bm9zNSIsCiAJInNhbXN1bmcsZXh5bm9zNTI1MCIsCiAJInNhbXN1bmcsZXh5bm9zNTI2MCIsCkBAIC0zNzgsNyArMzExLDYgQEAKIAkuaW5pdF9tYWNoaW5lCT0gZXh5bm9zX2R0X21hY2hpbmVfaW5pdCwKIAkuaW5pdF9sYXRlCT0gZXh5bm9zX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gZXh5bm9zX2R0X2NvbXBhdCwKLQkucmVzdGFydAk9IGV4eW5vc19yZXN0YXJ0LAogCS5yZXNlcnZlCT0gZXh5bm9zX3Jlc2VydmUsCiAJLmR0X2ZpeHVwCT0gZXh5bm9zX2R0X2ZpeHVwLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2Zpcm13YXJlLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9maXJtd2FyZS5jCmluZGV4IGU4Nzk3YmIuLjc2NmY1N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvZmlybXdhcmUuYwpAQCAtMTQsMTYgKzE0LDQ0IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJzbWMuaCIKIAotc3RhdGljIGludCBleHlub3NfZG9faWRsZSh2b2lkKQorI2RlZmluZSBFWFlOT1NfU0xFRVBfTUFHSUMJMHgwMDAwMGJhZAorI2RlZmluZSBFWFlOT1NfQUZUUl9NQUdJQwkweGZjYmEwZDEwCisjZGVmaW5lIEVYWU5PU19CT09UX0FERFIJMHg4CisjZGVmaW5lIEVYWU5PU19CT09UX0ZMQUcJMHhjCisKK3N0YXRpYyB2b2lkIGV4eW5vc19zYXZlX2NwMTUodm9pZCkKIHsKLQlleHlub3Nfc21jKFNNQ19DTURfU0xFRVAsIDAsIDAsIDApOworCS8qIFNhdmUgUG93ZXIgY29udHJvbCBhbmQgRGlhZ25vc3RpYyByZWdpc3RlcnMgKi8KKwlhc20gKCJtcmMgcDE1LCAwLCAlMCwgYzE1LCBjMCwgMFxuIgorCSAgICAgIm1yYyBwMTUsIDAsICUxLCBjMTUsIGMwLCAxXG4iCisJICAgICA6ICI9ciIgKGNwMTVfc2F2ZV9wb3dlciksICI9ciIgKGNwMTVfc2F2ZV9kaWFnKQorCSAgICAgOiA6ICJjYyIpOworfQorCitzdGF0aWMgaW50IGV4eW5vc19kb19pZGxlKHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIEZXX0RPX0lETEVfQUZUUjoKKwkJaWYgKHJlYWRfY3B1aWRfcGFydCgpID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpCisJCQlleHlub3Nfc2F2ZV9jcDE1KCk7CisJCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoZXh5bm9zX2NwdV9yZXN1bWVfbnMpLAorCQkJICAgICBzeXNyYW1fbnNfYmFzZV9hZGRyICsgMHgyNCk7CisJCV9fcmF3X3dyaXRlbChFWFlOT1NfQUZUUl9NQUdJQywgc3lzcmFtX25zX2Jhc2VfYWRkciArIDB4MjApOworCQlleHlub3Nfc21jKFNNQ19DTURfQ1BVMEFGVFIsIDAsIDAsIDApOworCQlicmVhazsKKwljYXNlIEZXX0RPX0lETEVfU0xFRVA6CisJCWV4eW5vc19zbWMoU01DX0NNRF9TTEVFUCwgMCwgMCwgMCk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC02OSwxMCArOTcsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBleHlub3NfY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJZmx1c2hfY2FjaGVfYWxsKCk7CisJb3V0ZXJfZmx1c2hfYWxsKCk7CisKKwlleHlub3Nfc21jKFNNQ19DTURfU0xFRVAsIDAsIDAsIDApOworCisJcHJfaW5mbygiRmFpbGVkIHRvIHN1c3BlbmQgdGhlIHN5c3RlbVxuIik7CisJd3JpdGVsKDAsIHN5c3JhbV9uc19iYXNlX2FkZHIgKyBFWFlOT1NfQk9PVF9GTEFHKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBleHlub3Nfc3VzcGVuZCh2b2lkKQoreworCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQorCQlleHlub3Nfc2F2ZV9jcDE1KCk7CisKKwl3cml0ZWwoRVhZTk9TX1NMRUVQX01BR0lDLCBzeXNyYW1fbnNfYmFzZV9hZGRyICsgRVhZTk9TX0JPT1RfRkxBRyk7CisJd3JpdGVsKHZpcnRfdG9fcGh5cyhleHlub3NfY3B1X3Jlc3VtZV9ucyksCisJCXN5c3JhbV9uc19iYXNlX2FkZHIgKyBFWFlOT1NfQk9PVF9BRERSKTsKKworCXJldHVybiBjcHVfc3VzcGVuZCgwLCBleHlub3NfY3B1X3N1c3BlbmQpOworfQorCitzdGF0aWMgaW50IGV4eW5vc19yZXN1bWUodm9pZCkKK3sKKwl3cml0ZWwoMCwgc3lzcmFtX25zX2Jhc2VfYWRkciArIEVYWU5PU19CT09UX0ZMQUcpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmVfb3BzIGV4eW5vc19maXJtd2FyZV9vcHMgPSB7Ci0JLmRvX2lkbGUJCT0gZXh5bm9zX2RvX2lkbGUsCisJLmRvX2lkbGUJCT0gSVNfRU5BQkxFRChDT05GSUdfRVhZTk9TX0NQVV9TVVNQRU5EKSA/IGV4eW5vc19kb19pZGxlIDogTlVMTCwKIAkuc2V0X2NwdV9ib290X2FkZHIJPSBleHlub3Nfc2V0X2NwdV9ib290X2FkZHIsCiAJLmNwdV9ib290CQk9IGV4eW5vc19jcHVfYm9vdCwKKwkuc3VzcGVuZAkJPSBJU19FTkFCTEVEKENPTkZJR19QTV9TTEVFUCkgPyBleHlub3Nfc3VzcGVuZCA6IE5VTEwsCisJLnJlc3VtZQkJCT0gSVNfRU5BQkxFRChDT05GSUdfRVhZTk9TX0NQVV9TVVNQRU5EKSA/IGV4eW5vc19yZXN1bWUgOiBOVUxMLAogfTsKIAogdm9pZCBfX2luaXQgZXh5bm9zX2Zpcm13YXJlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL2hvdHBsdWcuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2hvdHBsdWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4Njk2MS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9ob3RwbHVnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogIENsb25lZCBmcm9tIGxpbnV4L2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaG90cGx1Zy5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMiBBUk0gTHRkLgotICogIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2NwMTUuaD4KLSNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgInJlZ3MtcG11LmgiCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfbGVhdmVfbG93cG93ZXIodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQotCWFzbSB2b2xhdGlsZSgKLQkibXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgotCSIJb3JyCSUwLCAlMCwgJTFcbiIKLQkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKLQkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKLQkiCW9ycgklMCwgJTAsICUyXG4iCi0JIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCi0JICA6ICI9JnIiICh2KQotCSAgOiAiSXIiIChDUl9DKSwgIklyIiAoMHg0MCkKLQkgIDogImNjIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybV9kb19sb3dwb3dlcih1bnNpZ25lZCBpbnQgY3B1LCBpbnQgKnNwdXJpb3VzKQotewotCXUzMiBtcGlkciA9IGNwdV9sb2dpY2FsX21hcChjcHUpOwotCXUzMiBjb3JlX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDApOwotCi0JZm9yICg7OykgewotCi0JCS8qIFR1cm4gdGhlIENQVSBvZmYgb24gbmV4dCBXRkkgaW5zdHJ1Y3Rpb24uICovCi0JCWV4eW5vc19jcHVfcG93ZXJfZG93bihjb3JlX2lkKTsKLQotCQl3ZmkoKTsKLQotCQlpZiAocGVuX3JlbGVhc2UgPT0gY29yZV9pZCkgewotCQkJLyoKLQkJCSAqIE9LLCBwcm9wZXIgd2FrZXVwLCB3ZSdyZSBkb25lCi0JCQkgKi8KLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyoKLQkJICogR2V0dGluZyBoZXJlLCBtZWFucyB0aGF0IHdlIGhhdmUgY29tZSBvdXQgb2YgV0ZJIHdpdGhvdXQKLQkJICogaGF2aW5nIGJlZW4gd29rZW4gdXAgLSB0aGlzIHNob3VsZG4ndCBoYXBwZW4KLQkJICoKLQkJICogSnVzdCBub3RlIGl0IGhhcHBlbmluZyAtIHdoZW4gd2UncmUgd29rZW4sIHdlIGNhbiByZXBvcnQKLQkJICogaXRzIG9jY3VycmVuY2UuCi0JCSAqLwotCQkoKnNwdXJpb3VzKSsrOwotCX0KLX0KLQotLyoKLSAqIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgdG8gc2h1dGRvd24gYSBDUFUKLSAqCi0gKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCi0gKi8KLXZvaWQgX19yZWYgZXh5bm9zX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKLXsKLQlpbnQgc3B1cmlvdXMgPSAwOwotCi0JdjdfZXhpdF9jb2hlcmVuY3lfZmx1c2gobG91aXMpOwotCi0JcGxhdGZvcm1fZG9fbG93cG93ZXIoY3B1LCAmc3B1cmlvdXMpOwotCi0JLyoKLQkgKiBicmluZyB0aGlzIENQVSBiYWNrIGludG8gdGhlIHdvcmxkIG9mIGNhY2hlCi0JICogY29oZXJlbmN5LCBhbmQgdGhlbiByZXN0b3JlIGludGVycnVwdHMKLQkgKi8KLQljcHVfbGVhdmVfbG93cG93ZXIoKTsKLQotCWlmIChzcHVyaW91cykKLQkJcHJfd2FybigiQ1BVJXU6ICV1IHNwdXJpb3VzIHdha2V1cCBjYWxsc1xuIiwgY3B1LCBzcHVyaW91cyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggZjBiN2U5Mi4uMWFkM2Y0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMzAsNDAgKzMwLDE3IEBACiAjZGVmaW5lIEVYWU5PUzRfUEFfQ01VCQkJMHgxMDAzMDAwMAogI2RlZmluZSBFWFlOT1M1X1BBX0NNVQkJCTB4MTAwMTAwMDAKIAotI2RlZmluZSBFWFlOT1M0X1BBX1NZU1RJTUVSCQkweDEwMDUwMDAwCi0KLSNkZWZpbmUgRVhZTk9TNF9QQV9XQVRDSERPRwkJMHgxMDA2MDAwMAotI2RlZmluZSBFWFlOT1M1X1BBX1dBVENIRE9HCQkweDEwMUQwMDAwCi0KICNkZWZpbmUgRVhZTk9TNF9QQV9ETUMwCQkJMHgxMDQwMDAwMAogI2RlZmluZSBFWFlOT1M0X1BBX0RNQzEJCQkweDEwNDEwMDAwCiAKLSNkZWZpbmUgRVhZTk9TNF9QQV9DT01CSU5FUgkJMHgxMDQ0MDAwMAotI2RlZmluZSBFWFlOT1M1X1BBX0NPTUJJTkVSCQkweDEwNDQwMDAwCi0KLSNkZWZpbmUgRVhZTk9TNF9QQV9HSUNfQ1BVCQkweDEwNDgwMDAwCi0jZGVmaW5lIEVYWU5PUzRfUEFfR0lDX0RJU1QJCTB4MTA0OTAwMDAKLSNkZWZpbmUgRVhZTk9TNV9QQV9HSUNfQ1BVCQkweDEwNDgyMDAwCi0jZGVmaW5lIEVYWU5PUzVfUEFfR0lDX0RJU1QJCTB4MTA0ODEwMDAKLQogI2RlZmluZSBFWFlOT1M0X1BBX0NPUkVQRVJJCQkweDEwNTAwMDAwCiAjZGVmaW5lIEVYWU5PUzRfUEFfTDJDQwkJCTB4MTA1MDIwMDAKIAogI2RlZmluZSBFWFlOT1M0X1BBX1NST01DCQkweDEyNTcwMDAwCiAjZGVmaW5lIEVYWU5PUzVfUEFfU1JPTUMJCTB4MTIyNTAwMDAKIAotI2RlZmluZSBFWFlOT1M0X1BBX0hTUEhZCQkweDEyNUIwMDAwCi0KLSNkZWZpbmUgRVhZTk9TNF9QQV9VQVJUCQkJMHgxMzgwMDAwMAotI2RlZmluZSBFWFlOT1M1X1BBX1VBUlQJCQkweDEyQzAwMDAwCi0KLSNkZWZpbmUgRVhZTk9TNF9QQV9USU1FUgkJMHgxMzlEMDAwMAotI2RlZmluZSBFWFlOT1M1X1BBX1RJTUVSCQkweDEyREQwMDAwCi0KIC8qIENvbXBhdGliaWxpdHkgVUFSVCAqLwogCiAjZGVmaW5lIEVYWU5PUzU0NDBfUEFfVUFSVDAJCTB4MDAwQjAwMDAKIAotI2RlZmluZSBTM0NfVkFfVUFSVHgoeCkJCQkoUzNDX1ZBX1VBUlQgKyAoKHgpICogUzNDX1VBUlRfT0ZGU0VUKSkKLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL21jcG0tZXh5bm9zLmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9tY3BtLWV4eW5vcy5jCmluZGV4IGRjOWE3NjQuLmIwZDNjMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL21jcG0tZXh5bm9zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvbWNwbS1leHlub3MuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL2NwMTUuaD4KQEAgLTMwLDYgKzMxLDggQEAKICNkZWZpbmUgRVhZTk9TNTQyMF9VU0VfQVJNX0NPUkVfRE9XTl9TVEFURQlCSVQoMjkpCiAjZGVmaW5lIEVYWU5PUzU0MjBfVVNFX0wyX0NPTU1PTl9VUF9TVEFURQlCSVQoMzApCiAKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm5zX3NyYW1fYmFzZV9hZGRyOworCiAvKgogICogVGhlIGNvbW1vbiB2N19leGl0X2NvaGVyZW5jeV9mbHVzaCBBUEkgY291bGQgbm90IGJlIHVzZWQgYmVjYXVzZSBvZiB0aGUKICAqIEVycmF0dW0gNzk5MjcwIHdvcmthcm91bmQuIFRoaXMgbWFjcm8gaXMgdGhlIHNhbWUgYXMgdGhlIGNvbW1vbiBvbmUgKGluCkBAIC0zMTgsMTAgKzMyMSwyNiBAQAogCXt9LAogfTsKIAorc3RhdGljIHZvaWQgZXh5bm9zX21jcG1fc2V0dXBfZW50cnlfcG9pbnQodm9pZCkKK3sKKwkvKgorCSAqIFUtQm9vdCBTUEwgaXMgaGFyZGNvZGVkIHRvIGp1bXAgdG8gdGhlIHN0YXJ0IG9mIG5zX3NyYW1fYmFzZV9hZGRyCisJICogYXMgcGFydCBvZiBzZWNvbmRhcnlfY3B1X3N0YXJ0KCkuICBMZXQncyByZWRpcmVjdCBpdCB0byB0aGUKKwkgKiBtY3BtX2VudHJ5X3BvaW50KCkuIFRoaXMgaXMgZG9uZSBkdXJpbmcgYm90aCBzZWNvbmRhcnkgYm9vdC11cCBhcworCSAqIHdlbGwgYXMgc3lzdGVtIHJlc3VtZS4KKwkgKi8KKwlfX3Jhd193cml0ZWwoMHhlNTlmMDAwMCwgbnNfc3JhbV9iYXNlX2FkZHIpOyAgICAgLyogbGRyIHIwLCBbcGMsICMwXSAqLworCV9fcmF3X3dyaXRlbCgweGUxMmZmZjEwLCBuc19zcmFtX2Jhc2VfYWRkciArIDQpOyAvKiBieCAgcjAgKi8KKwlfX3Jhd193cml0ZWwodmlydF90b19waHlzKG1jcG1fZW50cnlfcG9pbnQpLCBuc19zcmFtX2Jhc2VfYWRkciArIDgpOworfQorCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGV4eW5vc19tY3BtX3N5c2NvcmVfb3BzID0geworCS5yZXN1bWUJPSBleHlub3NfbWNwbV9zZXR1cF9lbnRyeV9wb2ludCwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGV4eW5vc19tY3BtX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Ci0Jdm9pZCBfX2lvbWVtICpuc19zcmFtX2Jhc2VfYWRkcjsKIAl1bnNpZ25lZCBpbnQgdmFsdWUsIGk7CiAJaW50IHJldDsKIApAQCAtMzg3LDE2ICs0MDYsOSBAQAogCQlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TX0NPTU1PTl9PUFRJT04oaSkpOwogCX0KIAotCS8qCi0JICogVS1Cb290IFNQTCBpcyBoYXJkY29kZWQgdG8ganVtcCB0byB0aGUgc3RhcnQgb2YgbnNfc3JhbV9iYXNlX2FkZHIKLQkgKiBhcyBwYXJ0IG9mIHNlY29uZGFyeV9jcHVfc3RhcnQoKS4gIExldCdzIHJlZGlyZWN0IGl0IHRvIHRoZQotCSAqIG1jcG1fZW50cnlfcG9pbnQoKS4KLQkgKi8KLQlfX3Jhd193cml0ZWwoMHhlNTlmMDAwMCwgbnNfc3JhbV9iYXNlX2FkZHIpOyAgICAgLyogbGRyIHIwLCBbcGMsICMwXSAqLwotCV9fcmF3X3dyaXRlbCgweGUxMmZmZjEwLCBuc19zcmFtX2Jhc2VfYWRkciArIDQpOyAvKiBieCAgcjAgKi8KLQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKG1jcG1fZW50cnlfcG9pbnQpLCBuc19zcmFtX2Jhc2VfYWRkciArIDgpOworCWV4eW5vc19tY3BtX3NldHVwX2VudHJ5X3BvaW50KCk7CiAKLQlpb3VubWFwKG5zX3NyYW1fYmFzZV9hZGRyKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmZXh5bm9zX21jcG1fc3lzY29yZV9vcHMpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BsYXRzbXAuYwppbmRleCA0MWFlMjhkLi43YTFlYmZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcGxhdHNtcC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY3AxNS5oPgogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS9zbXBfc2N1Lmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CkBAIC0zMyw2ICszNCw4OCBAQAogCiBleHRlcm4gdm9pZCBleHlub3M0X3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogCisvKgorICogU2V0IG9yIGNsZWFyIHRoZSBVU0VfREVMQVlFRF9SRVNFVF9BU1NFUlRJT04gb3B0aW9uLCBzZXQgb24gRXh5bm9zNCBTb0NzCisgKiBkdXJpbmcgaG90LSh1bilwbHVnZ2luZyBDUFV4LgorICoKKyAqIFRoZSBmZWF0dXJlIGNhbiBiZSBjbGVhcmVkIHNhZmVseSBkdXJpbmcgZmlyc3QgYm9vdCBvZiBzZWNvbmRhcnkgQ1BVLgorICoKKyAqIEV4eW5vczQgU29DcyByZXF1aXJlIHNldHRpbmcgVVNFX0RFTEFZRURfUkVTRVRfQVNTRVJUSU9OIGR1cmluZyBwb3dlcmluZworICogZG93biBhIENQVSBzbyB0aGUgQ1BVIGlkbGUgY2xvY2sgZG93biBmZWF0dXJlIGNvdWxkIHByb3Blcmx5IGRldGVjdCBnbG9iYWwKKyAqIGlkbGUgc3RhdGUgd2hlbiBDUFV4IGlzIG9mZi4KKyAqLworc3RhdGljIHZvaWQgZXh5bm9zX3NldF9kZWxheWVkX3Jlc2V0X2Fzc2VydGlvbih1MzIgY29yZV9pZCwgYm9vbCBlbmFibGUpCit7CisJaWYgKHNvY19pc19leHlub3M0KCkpIHsKKwkJdW5zaWduZWQgaW50IHRtcDsKKworCQl0bXAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PU19BUk1fQ09SRV9PUFRJT04oY29yZV9pZCkpOworCQlpZiAoZW5hYmxlKQorCQkJdG1wIHw9IFM1UF9VU0VfREVMQVlFRF9SRVNFVF9BU1NFUlRJT047CisJCWVsc2UKKwkJCXRtcCAmPSB+KFM1UF9VU0VfREVMQVlFRF9SRVNFVF9BU1NFUlRJT04pOworCQlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PU19BUk1fQ09SRV9PUFRJT04oY29yZV9pZCkpOworCX0KK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIGlubGluZSB2b2lkIGNwdV9sZWF2ZV9sb3dwb3dlcih1MzIgY29yZV9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKworCWFzbSB2b2xhdGlsZSgKKwkibXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgorCSIJb3JyCSUwLCAlMCwgJTFcbiIKKwkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKKwkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKKwkiCW9ycgklMCwgJTAsICUyXG4iCisJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCisJICA6ICI9JnIiICh2KQorCSAgOiAiSXIiIChDUl9DKSwgIklyIiAoMHg0MCkKKwkgIDogImNjIik7CisKKwkgZXh5bm9zX3NldF9kZWxheWVkX3Jlc2V0X2Fzc2VydGlvbihjb3JlX2lkLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybV9kb19sb3dwb3dlcih1bnNpZ25lZCBpbnQgY3B1LCBpbnQgKnNwdXJpb3VzKQoreworCXUzMiBtcGlkciA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCXUzMiBjb3JlX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDApOworCisJZm9yICg7OykgeworCisJCS8qIFR1cm4gdGhlIENQVSBvZmYgb24gbmV4dCBXRkkgaW5zdHJ1Y3Rpb24uICovCisJCWV4eW5vc19jcHVfcG93ZXJfZG93bihjb3JlX2lkKTsKKworCQkvKgorCQkgKiBFeHlub3M0IFNvQ3MgcmVxdWlyZSBzZXR0aW5nCisJCSAqIFVTRV9ERUxBWUVEX1JFU0VUX0FTU0VSVElPTiBzbyB0aGUgQ1BVIGlkbGUKKwkJICogY2xvY2sgZG93biBmZWF0dXJlIGNvdWxkIHByb3Blcmx5IGRldGVjdAorCQkgKiBnbG9iYWwgaWRsZSBzdGF0ZSB3aGVuIENQVXggaXMgb2ZmLgorCQkgKi8KKwkJZXh5bm9zX3NldF9kZWxheWVkX3Jlc2V0X2Fzc2VydGlvbihjb3JlX2lkLCB0cnVlKTsKKworCQl3ZmkoKTsKKworCQlpZiAocGVuX3JlbGVhc2UgPT0gY29yZV9pZCkgeworCQkJLyoKKwkJCSAqIE9LLCBwcm9wZXIgd2FrZXVwLCB3ZSdyZSBkb25lCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogR2V0dGluZyBoZXJlLCBtZWFucyB0aGF0IHdlIGhhdmUgY29tZSBvdXQgb2YgV0ZJIHdpdGhvdXQKKwkJICogaGF2aW5nIGJlZW4gd29rZW4gdXAgLSB0aGlzIHNob3VsZG4ndCBoYXBwZW4KKwkJICoKKwkJICogSnVzdCBub3RlIGl0IGhhcHBlbmluZyAtIHdoZW4gd2UncmUgd29rZW4sIHdlIGNhbiByZXBvcnQKKwkJICogaXRzIG9jY3VycmVuY2UuCisJCSAqLworCQkoKnNwdXJpb3VzKSsrOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KKwogLyoqCiAgKiBleHlub3NfY29yZV9wb3dlcl9kb3duIDogcG93ZXIgZG93biB0aGUgc3BlY2lmaWVkIGNwdQogICogQGNwdSA6IHRoZSBjcHUgdG8gcG93ZXIgZG93bgpAQCAtNDMsNiArMTI2LDE4IEBACiAgKi8KIHZvaWQgZXh5bm9zX2NwdV9wb3dlcl9kb3duKGludCBjcHUpCiB7CisJaWYgKGNwdSA9PSAwICYmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInNhbXN1bmcsZXh5bm9zNTQyMCIpIHx8CisJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgic2Ftc3VuZyxleHlub3M1ODAwIikpKSB7CisJCS8qCisJCSAqIEJ5cGFzcyBwb3dlciBkb3duIGZvciBDUFUwIGR1cmluZyBzdXNwZW5kLiBDaGVjayBmb3IKKwkJICogdGhlIFNZU19QV1JfUkVHIHZhbHVlIHRvIGRlY2lkZSBpZiB3ZSBhcmUgc3VzcGVuZGluZworCQkgKiB0aGUgc3lzdGVtLgorCQkgKi8KKwkJaW50IHZhbCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNV9BUk1fQ09SRTBfU1lTX1BXUl9SRUcpOworCisJCWlmICghKHZhbCAmIFM1UF9DT1JFX0xPQ0FMX1BXUl9FTikpCisJCQlyZXR1cm47CisJfQogCXBtdV9yYXdfd3JpdGVsKDAsIEVYWU5PU19BUk1fQ09SRV9DT05GSUdVUkFUSU9OKGNwdSkpOwogfQogCkBAIC0xMjEsNiArMjE2LDI2IEBACiB9CiAKIC8qCisgKiBTZXQgd2FrZSB1cCBieSBsb2NhbCBwb3dlciBtb2RlIGFuZCBleGVjdXRlIHNvZnR3YXJlIHJlc2V0IGZvciBnaXZlbiBjb3JlLgorICoKKyAqIEN1cnJlbnRseSB0aGlzIGlzIG5lZWRlZCBvbmx5IHdoZW4gYm9vdGluZyBzZWNvbmRhcnkgQ1BVIG9uIEV4eW5vczMyNTAuCisgKi8KK3N0YXRpYyB2b2lkIGV4eW5vc19jb3JlX3Jlc3RhcnQodTMyIGNvcmVfaWQpCit7CisJdTMyIHZhbDsKKworCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJzYW1zdW5nLGV4eW5vczMyNTAiKSkKKwkJcmV0dXJuOworCisJdmFsID0gcG11X3Jhd19yZWFkbChFWFlOT1NfQVJNX0NPUkVfU1RBVFVTKGNvcmVfaWQpKTsKKwl2YWwgfD0gUzVQX0NPUkVfV0FLRVVQX0ZST01fTE9DQUxfQ0ZHOworCXBtdV9yYXdfd3JpdGVsKHZhbCwgRVhZTk9TX0FSTV9DT1JFX1NUQVRVUyhjb3JlX2lkKSk7CisKKwlwcl9pbmZvKCJDUFUldTogU29mdHdhcmUgcmVzZXRcbiIsIGNvcmVfaWQpOworCXBtdV9yYXdfd3JpdGVsKEVYWU5PU19DT1JFX1BPX1JFU0VUKGNvcmVfaWQpLCBFWFlOT1NfU1dSRVNFVCk7Cit9CisKKy8qCiAgKiBXcml0ZSBwZW5fcmVsZWFzZSBpbiBhIHdheSB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdmlzaWJsZSB0byBhbGwKICAqIG9ic2VydmVycywgaXJyZXNwZWN0aXZlIG9mIHdoZXRoZXIgdGhleSdyZSB0YWtpbmcgcGFydCBpbiBjb2hlcmVuY3kKICAqIG9yIG5vdC4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgaG90cGx1ZyBjb2RlIHRvIHdvcmsgcmVsaWFibHkuCkBAIC0xOTYsNiArMzExLDkgQEAKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAJfQorCisJZXh5bm9zX2NvcmVfcmVzdGFydChjb3JlX2lkKTsKKwogCS8qCiAJICogU2VuZCB0aGUgc2Vjb25kYXJ5IENQVSBhIHNvZnQgaW50ZXJydXB0LCB0aGVyZWJ5IGNhdXNpbmcKIAkgKiB0aGUgYm9vdCBtb25pdG9yIHRvIHJlYWQgdGhlIHN5c3RlbSB3aWRlIGZsYWdzIHJlZ2lzdGVyLApAQCAtMjM3LDYgKzM1NSw5IEBACiAJCXVkZWxheSgxMCk7CiAJfQogCisJLyogTm8gaGFybSBpZiB0aGlzIGlzIGNhbGxlZCBkdXJpbmcgZmlyc3QgYm9vdCBvZiBzZWNvbmRhcnkgQ1BVICovCisJZXh5bm9zX3NldF9kZWxheWVkX3Jlc2V0X2Fzc2VydGlvbihjb3JlX2lkLCBmYWxzZSk7CisKIAkvKgogCSAqIG5vdyB0aGUgc2Vjb25kYXJ5IGNvcmUgaXMgc3RhcnRpbmcgdXAgbGV0IGl0IHJ1biBpdHMKIAkgKiBjYWxpYnJhdGlvbnMsIHRoZW4gd2FpdCBmb3IgaXQgdG8gZmluaXNoCkBAIC0zMTgsNiArNDM5LDMzIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisvKgorICogcGxhdGZvcm0tc3BlY2lmaWMgY29kZSB0byBzaHV0ZG93biBhIENQVQorICoKKyAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKKyAqLworc3RhdGljIHZvaWQgZXh5bm9zX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgc3B1cmlvdXMgPSAwOworCXUzMiBtcGlkciA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCXUzMiBjb3JlX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDApOworCisJdjdfZXhpdF9jb2hlcmVuY3lfZmx1c2gobG91aXMpOworCisJcGxhdGZvcm1fZG9fbG93cG93ZXIoY3B1LCAmc3B1cmlvdXMpOworCisJLyoKKwkgKiBicmluZyB0aGlzIENQVSBiYWNrIGludG8gdGhlIHdvcmxkIG9mIGNhY2hlCisJICogY29oZXJlbmN5LCBhbmQgdGhlbiByZXN0b3JlIGludGVycnVwdHMKKwkgKi8KKwljcHVfbGVhdmVfbG93cG93ZXIoY29yZV9pZCk7CisKKwlpZiAoc3B1cmlvdXMpCisJCXByX3dhcm4oIkNQVSV1OiAldSBzcHVyaW91cyB3YWtldXAgY2FsbHNcbiIsIGNwdSwgc3B1cmlvdXMpOworfQorI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLworCiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgZXh5bm9zX3NtcF9vcHMgX19pbml0ZGF0YSA9IHsKIAkuc21wX2luaXRfY3B1cwkJPSBleHlub3Nfc21wX2luaXRfY3B1cywKIAkuc21wX3ByZXBhcmVfY3B1cwk9IGV4eW5vc19zbXBfcHJlcGFyZV9jcHVzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvcG0uYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtLmMKaW5kZXggYWJlZmFjYi4uODZmM2VjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3MvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgogICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KICAqCiAgKiBFWFlOT1MgLSBQb3dlciBNYW5hZ2VtZW50IHN1cHBvcnQKQEAgLTE1LDEwOSArMTUsNDUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVfcG0uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCi0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9zbXBfc2N1Lmg+CiAjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPHBsYXQvcG0tY29tbW9uLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLXNyb20uaD4KLQotI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAKICNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJleHlub3MtcG11LmgiCiAjaW5jbHVkZSAicmVncy1wbXUuaCIKICNpbmNsdWRlICJyZWdzLXN5cy5oIgogCi0vKioKLSAqIHN0cnVjdCBleHlub3Nfd2t1cF9pcnEgLSBFeHlub3MgR0lDIHRvIFBNVSBJUlEgbWFwcGluZwotICogQGh3aXJxOiBIYXJkd2FyZSBJUlEgc2lnbmFsIG9mIHRoZSBHSUMKLSAqIEBtYXNrOiBNYXNrIGluIFBNVSB3YWtlLXVwIG1hc2sgcmVnaXN0ZXIKLSAqLwotc3RydWN0IGV4eW5vc193a3VwX2lycSB7Ci0JdW5zaWduZWQgaW50IGh3aXJxOwotCXUzMiBtYXNrOwotfTsKLQotc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGV4eW5vczVfc3lzX3NhdmVbXSA9IHsKLQlTQVZFX0lURU0oRVhZTk9TNV9TWVNfSTJDX0NGRyksCi19OwotCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgZXh5bm9zX2NvcmVfc2F2ZVtdID0gewotCS8qIFNST00gc2lkZSAqLwotCVNBVkVfSVRFTShTNVBfU1JPTV9CVyksCi0JU0FWRV9JVEVNKFM1UF9TUk9NX0JDMCksCi0JU0FWRV9JVEVNKFM1UF9TUk9NX0JDMSksCi0JU0FWRV9JVEVNKFM1UF9TUk9NX0JDMiksCi0JU0FWRV9JVEVNKFM1UF9TUk9NX0JDMyksCi19OwotCi0vKgotICogR0lDIHdha2UtdXAgc3VwcG9ydAotICovCi0KLXN0YXRpYyB1MzIgZXh5bm9zX2lycXdha2VfaW50bWFzayA9IDB4ZmZmZmZmZmY7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxIGV4eW5vczRfd2t1cF9pcnFbXSA9IHsKLQl7IDc2LCBCSVQoMSkgfSwgLyogUlRDIGFsYXJtICovCi0JeyA3NywgQklUKDIpIH0sIC8qIFJUQyB0aWNrICovCi0JeyAvKiBzZW50aW5lbCAqLyB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3Nfd2t1cF9pcnEgZXh5bm9zNTI1MF93a3VwX2lycVtdID0gewotCXsgNzUsIEJJVCgxKSB9LCAvKiBSVEMgYWxhcm0gKi8KLQl7IDc2LCBCSVQoMikgfSwgLyogUlRDIHRpY2sgKi8KLQl7IC8qIHNlbnRpbmVsICovIH0sCi19OwotCi1zdGF0aWMgaW50IGV4eW5vc19pcnFfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgc3RhdGUpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqZXh5bm9zX2Jvb3RfdmVjdG9yX2FkZHIodm9pZCkKIHsKLQljb25zdCBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxICp3a3VwX2lycTsKLQotCWlmIChzb2NfaXNfZXh5bm9zNTI1MCgpKQotCQl3a3VwX2lycSA9IGV4eW5vczUyNTBfd2t1cF9pcnE7Ci0JZWxzZQotCQl3a3VwX2lycSA9IGV4eW5vczRfd2t1cF9pcnE7Ci0KLQl3aGlsZSAod2t1cF9pcnEtPm1hc2spIHsKLQkJaWYgKHdrdXBfaXJxLT5od2lycSA9PSBkYXRhLT5od2lycSkgewotCQkJaWYgKCFzdGF0ZSkKLQkJCQlleHlub3NfaXJxd2FrZV9pbnRtYXNrIHw9IHdrdXBfaXJxLT5tYXNrOwotCQkJZWxzZQotCQkJCWV4eW5vc19pcnF3YWtlX2ludG1hc2sgJj0gfndrdXBfaXJxLT5tYXNrOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJKyt3a3VwX2lycTsKLQl9Ci0KLQlyZXR1cm4gLUVOT0VOVDsKKwlpZiAoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzEpCisJCXJldHVybiBwbXVfYmFzZV9hZGRyICsgUzVQX0lORk9STTc7CisJZWxzZSBpZiAoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzApCisJCXJldHVybiBzeXNyYW1fYmFzZV9hZGRyICsgMHgyNDsKKwlyZXR1cm4gcG11X2Jhc2VfYWRkciArIFM1UF9JTkZPUk0wOwogfQogCi0jZGVmaW5lIEVYWU5PU19CT09UX1ZFQ1RPUl9BRERSCShzYW1zdW5nX3JldigpID09IEVYWU5PUzQyMTBfUkVWXzFfMSA/IFwKLQkJCXBtdV9iYXNlX2FkZHIgKyBTNVBfSU5GT1JNNyA6IFwKLQkJCShzYW1zdW5nX3JldigpID09IEVYWU5PUzQyMTBfUkVWXzFfMCA/IFwKLQkJCShzeXNyYW1fYmFzZV9hZGRyICsgMHgyNCkgOiBcCi0JCQlwbXVfYmFzZV9hZGRyICsgUzVQX0lORk9STTApKQotI2RlZmluZSBFWFlOT1NfQk9PVF9WRUNUT1JfRkxBRwkoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzEgPyBcCi0JCQlwbXVfYmFzZV9hZGRyICsgUzVQX0lORk9STTYgOiBcCi0JCQkoc2Ftc3VuZ19yZXYoKSA9PSBFWFlOT1M0MjEwX1JFVl8xXzAgPyBcCi0JCQkoc3lzcmFtX2Jhc2VfYWRkciArIDB4MjApIDogXAotCQkJcG11X2Jhc2VfYWRkciArIFM1UF9JTkZPUk0xKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpleHlub3NfYm9vdF92ZWN0b3JfZmxhZyh2b2lkKQoreworCWlmIChzYW1zdW5nX3JldigpID09IEVYWU5PUzQyMTBfUkVWXzFfMSkKKwkJcmV0dXJuIHBtdV9iYXNlX2FkZHIgKyBTNVBfSU5GT1JNNjsKKwllbHNlIGlmIChzYW1zdW5nX3JldigpID09IEVYWU5PUzQyMTBfUkVWXzFfMCkKKwkJcmV0dXJuIHN5c3JhbV9iYXNlX2FkZHIgKyAweDIwOworCXJldHVybiBwbXVfYmFzZV9hZGRyICsgUzVQX0lORk9STTE7Cit9CiAKICNkZWZpbmUgUzVQX0NIRUNLX0FGVFIgIDB4RkNCQTBEMTAKLSNkZWZpbmUgUzVQX0NIRUNLX1NMRUVQIDB4MDAwMDBCQUQKIAogLyogRm9yIENvcnRleC1BOSBEaWFnbm9zdGljIGFuZCBQb3dlciBjb250cm9sIHJlZ2lzdGVyICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHNhdmVfYXJtX3JlZ2lzdGVyWzJdOwogCi1zdGF0aWMgdm9pZCBleHlub3NfY3B1X3NhdmVfcmVnaXN0ZXIodm9pZCkKK3ZvaWQgZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTEzNCw3ICs3MCw3IEBACiAJc2F2ZV9hcm1fcmVnaXN0ZXJbMV0gPSB0bXA7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19jcHVfcmVzdG9yZV9yZWdpc3Rlcih2b2lkKQordm9pZCBleHlub3NfY3B1X3Jlc3RvcmVfcmVnaXN0ZXIodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIApAQCAtMTUzLDcgKzg5LDcgQEAKIAkJICAgICAgOiAiY2MiKTsKIH0KIAotc3RhdGljIHZvaWQgZXh5bm9zX3BtX2NlbnRyYWxfc3VzcGVuZCh2b2lkKQordm9pZCBleHlub3NfcG1fY2VudHJhbF9zdXNwZW5kKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTE2MSw5ICs5NywxMyBAQAogCXRtcCA9IHBtdV9yYXdfcmVhZGwoUzVQX0NFTlRSQUxfU0VRX0NPTkZJR1VSQVRJT04pOwogCXRtcCAmPSB+UzVQX0NFTlRSQUxfTE9XUFdSX0NGRzsKIAlwbXVfcmF3X3dyaXRlbCh0bXAsIFM1UF9DRU5UUkFMX1NFUV9DT05GSUdVUkFUSU9OKTsKKworCS8qIFNldHRpbmcgU0VRX09QVElPTiByZWdpc3RlciAqLworCXBtdV9yYXdfd3JpdGVsKFM1UF9VU0VfU1RBTkRCWV9XRkkwIHwgUzVQX1VTRV9TVEFOREJZX1dGRTAsCisJCSAgICAgICBTNVBfQ0VOVFJBTF9TRVFfT1BUSU9OKTsKIH0KIAotc3RhdGljIGludCBleHlub3NfcG1fY2VudHJhbF9yZXN1bWUodm9pZCkKK2ludCBleHlub3NfcG1fY2VudHJhbF9yZXN1bWUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIApAQCAtMTk0LDE3ICsxMzQsMjYgQEAKIAogc3RhdGljIHZvaWQgZXh5bm9zX2NwdV9zZXRfYm9vdF92ZWN0b3IobG9uZyBmbGFncykKIHsKLQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKGV4eW5vc19jcHVfcmVzdW1lKSwgRVhZTk9TX0JPT1RfVkVDVE9SX0FERFIpOwotCV9fcmF3X3dyaXRlbChmbGFncywgRVhZTk9TX0JPT1RfVkVDVE9SX0ZMQUcpOworCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoZXh5bm9zX2NwdV9yZXN1bWUpLAorCQkgICAgIGV4eW5vc19ib290X3ZlY3Rvcl9hZGRyKCkpOworCV9fcmF3X3dyaXRlbChmbGFncywgZXh5bm9zX2Jvb3RfdmVjdG9yX2ZsYWcoKSk7CiB9CiAKIHN0YXRpYyBpbnQgZXh5bm9zX2FmdHJfZmluaXNoZXIodW5zaWduZWQgbG9uZyBmbGFncykKIHsKKwlpbnQgcmV0OworCiAJZXh5bm9zX3NldF93YWtldXBtYXNrKDB4MDAwMGZmM2UpOwotCWV4eW5vc19jcHVfc2V0X2Jvb3RfdmVjdG9yKFM1UF9DSEVDS19BRlRSKTsKIAkvKiBTZXQgdmFsdWUgb2YgcG93ZXIgZG93biByZWdpc3RlciBmb3IgYWZ0ciBtb2RlICovCiAJZXh5bm9zX3N5c19wb3dlcmRvd25fY29uZihTWVNfQUZUUik7Ci0JY3B1X2RvX2lkbGUoKTsKKworCXJldCA9IGNhbGxfZmlybXdhcmVfb3AoZG9faWRsZSwgRldfRE9fSURMRV9BRlRSKTsKKwlpZiAocmV0ID09IC1FTk9TWVMpIHsKKwkJaWYgKHJlYWRfY3B1aWRfcGFydCgpID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpCisJCQlleHlub3NfY3B1X3NhdmVfcmVnaXN0ZXIoKTsKKwkJZXh5bm9zX2NwdV9zZXRfYm9vdF92ZWN0b3IoUzVQX0NIRUNLX0FGVFIpOworCQljcHVfZG9faWRsZSgpOworCX0KIAogCXJldHVybiAxOwogfQpAQCAtMjE0LDE5NiArMTYzLDE2IEBACiAJY3B1X3BtX2VudGVyKCk7CiAKIAlleHlub3NfcG1fY2VudHJhbF9zdXNwZW5kKCk7Ci0JaWYgKHJlYWRfY3B1aWRfcGFydCgpID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpCi0JCWV4eW5vc19jcHVfc2F2ZV9yZWdpc3RlcigpOwogCiAJY3B1X3N1c3BlbmQoMCwgZXh5bm9zX2FmdHJfZmluaXNoZXIpOwogCiAJaWYgKHJlYWRfY3B1aWRfcGFydCgpID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpIHsKIAkJc2N1X2VuYWJsZShTNVBfVkFfU0NVKTsKLQkJZXh5bm9zX2NwdV9yZXN0b3JlX3JlZ2lzdGVyKCk7CisJCWlmIChjYWxsX2Zpcm13YXJlX29wKHJlc3VtZSkgPT0gLUVOT1NZUykKKwkJCWV4eW5vc19jcHVfcmVzdG9yZV9yZWdpc3RlcigpOwogCX0KIAogCWV4eW5vc19wbV9jZW50cmFsX3Jlc3VtZSgpOwogCiAJY3B1X3BtX2V4aXQoKTsKIH0KLQotc3RhdGljIGludCBleHlub3NfY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBhcmcpCi17Ci0jaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKLQlvdXRlcl9mbHVzaF9hbGwoKTsKLSNlbmRpZgotCi0JaWYgKHNvY19pc19leHlub3M1MjUwKCkpCi0JCWZsdXNoX2NhY2hlX2FsbCgpOwotCi0JLyogaXNzdWUgdGhlIHN0YW5kYnkgc2lnbmFsIGludG8gdGhlIHBtIHVuaXQuICovCi0JY3B1X2RvX2lkbGUoKTsKLQotCXByX2luZm8oIkZhaWxlZCB0byBzdXNwZW5kIHRoZSBzeXN0ZW1cbiIpOwotCXJldHVybiAxOyAvKiBBYm9ydGluZyBzdXNwZW5kICovCi19Ci0KLXN0YXRpYyB2b2lkIGV4eW5vc19wbV9wcmVwYXJlKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHRtcDsKLQotCS8qIFNldCB3YWtlLXVwIG1hc2sgcmVnaXN0ZXJzICovCi0JcG11X3Jhd193cml0ZWwoZXh5bm9zX2dldF9laW50X3dha2VfbWFzaygpLCBTNVBfRUlOVF9XQUtFVVBfTUFTSyk7Ci0JcG11X3Jhd193cml0ZWwoZXh5bm9zX2lycXdha2VfaW50bWFzayAmIH4oMSA8PCAzMSksIFM1UF9XQUtFVVBfTUFTSyk7Ci0KLQlzM2NfcG1fZG9fc2F2ZShleHlub3NfY29yZV9zYXZlLCBBUlJBWV9TSVpFKGV4eW5vc19jb3JlX3NhdmUpKTsKLQotCWlmIChzb2NfaXNfZXh5bm9zNTI1MCgpKSB7Ci0JCXMzY19wbV9kb19zYXZlKGV4eW5vczVfc3lzX3NhdmUsIEFSUkFZX1NJWkUoZXh5bm9zNV9zeXNfc2F2ZSkpOwotCQkvKiBEaXNhYmxlIFVTRV9SRVRFTlRJT04gb2YgSlBFR19NRU1fT1BUSU9OICovCi0JCXRtcCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNV9KUEVHX01FTV9PUFRJT04pOwotCQl0bXAgJj0gfkVYWU5PUzVfT1BUSU9OX1VTRV9SRVRFTlRJT047Ci0JCXBtdV9yYXdfd3JpdGVsKHRtcCwgRVhZTk9TNV9KUEVHX01FTV9PUFRJT04pOwotCX0KLQotCS8qIFNldCB2YWx1ZSBvZiBwb3dlciBkb3duIHJlZ2lzdGVyIGZvciBzbGVlcCBtb2RlICovCi0KLQlleHlub3Nfc3lzX3Bvd2VyZG93bl9jb25mKFNZU19TTEVFUCk7Ci0JcG11X3Jhd193cml0ZWwoUzVQX0NIRUNLX1NMRUVQLCBTNVBfSU5GT1JNMSk7Ci0KLQkvKiBlbnN1cmUgYXQgbGVhc3QgSU5GT1JNMCBoYXMgdGhlIHJlc3VtZSBhZGRyZXNzICovCi0KLQlwbXVfcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoZXh5bm9zX2NwdV9yZXN1bWUpLCBTNVBfSU5GT1JNMCk7Ci19Ci0KLXN0YXRpYyBpbnQgZXh5bm9zX3BtX3N1c3BlbmQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWV4eW5vc19wbV9jZW50cmFsX3N1c3BlbmQoKTsKLQotCS8qIFNldHRpbmcgU0VRX09QVElPTiByZWdpc3RlciAqLwotCi0JdG1wID0gKFM1UF9VU0VfU1RBTkRCWV9XRkkwIHwgUzVQX1VTRV9TVEFOREJZX1dGRTApOwotCXBtdV9yYXdfd3JpdGVsKHRtcCwgUzVQX0NFTlRSQUxfU0VRX09QVElPTik7Ci0KLQlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKLQkJZXh5bm9zX2NwdV9zYXZlX3JlZ2lzdGVyKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZXh5bm9zX3BtX3Jlc3VtZSh2b2lkKQotewotCWlmIChleHlub3NfcG1fY2VudHJhbF9yZXN1bWUoKSkKLQkJZ290byBlYXJseV93YWtldXA7Ci0KLQlpZiAocmVhZF9jcHVpZF9wYXJ0KCkgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKLQkJZXh5bm9zX2NwdV9yZXN0b3JlX3JlZ2lzdGVyKCk7Ci0KLQkvKiBGb3IgcmVsZWFzZSByZXRlbnRpb24gKi8KLQotCXBtdV9yYXdfd3JpdGVsKCgxIDw8IDI4KSwgUzVQX1BBRF9SRVRfTUFVRElPX09QVElPTik7Ci0JcG11X3Jhd193cml0ZWwoKDEgPDwgMjgpLCBTNVBfUEFEX1JFVF9HUElPX09QVElPTik7Ci0JcG11X3Jhd193cml0ZWwoKDEgPDwgMjgpLCBTNVBfUEFEX1JFVF9VQVJUX09QVElPTik7Ci0JcG11X3Jhd193cml0ZWwoKDEgPDwgMjgpLCBTNVBfUEFEX1JFVF9NTUNBX09QVElPTik7Ci0JcG11X3Jhd193cml0ZWwoKDEgPDwgMjgpLCBTNVBfUEFEX1JFVF9NTUNCX09QVElPTik7Ci0JcG11X3Jhd193cml0ZWwoKDEgPDwgMjgpLCBTNVBfUEFEX1JFVF9FQklBX09QVElPTik7Ci0JcG11X3Jhd193cml0ZWwoKDEgPDwgMjgpLCBTNVBfUEFEX1JFVF9FQklCX09QVElPTik7Ci0KLQlpZiAoc29jX2lzX2V4eW5vczUyNTAoKSkKLQkJczNjX3BtX2RvX3Jlc3RvcmUoZXh5bm9zNV9zeXNfc2F2ZSwKLQkJCUFSUkFZX1NJWkUoZXh5bm9zNV9zeXNfc2F2ZSkpOwotCi0JczNjX3BtX2RvX3Jlc3RvcmVfY29yZShleHlub3NfY29yZV9zYXZlLCBBUlJBWV9TSVpFKGV4eW5vc19jb3JlX3NhdmUpKTsKLQotCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQotCQlzY3VfZW5hYmxlKFM1UF9WQV9TQ1UpOwotCi1lYXJseV93YWtldXA6Ci0KLQkvKiBDbGVhciBTTEVFUCBtb2RlIHNldCBpbiBJTkZPUk0xICovCi0JcG11X3Jhd193cml0ZWwoMHgwLCBTNVBfSU5GT1JNMSk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgZXh5bm9zX3BtX3N5c2NvcmVfb3BzID0gewotCS5zdXNwZW5kCT0gZXh5bm9zX3BtX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBleHlub3NfcG1fcmVzdW1lLAotfTsKLQotLyoKLSAqIFN1c3BlbmQgT3BzCi0gKi8KLQotc3RhdGljIGludCBleHlub3Nfc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCi17Ci0JaW50IHJldDsKLQotCXMzY19wbV9kZWJ1Z19pbml0KCk7Ci0KLQlTM0NfUE1EQkcoIiVzOiBzdXNwZW5kaW5nIHRoZSBzeXN0ZW0uLi5cbiIsIF9fZnVuY19fKTsKLQotCVMzQ19QTURCRygiJXM6IHdha2V1cCBtYXNrczogJTA4eCwlMDh4XG4iLCBfX2Z1bmNfXywKLQkJCWV4eW5vc19pcnF3YWtlX2ludG1hc2ssIGV4eW5vc19nZXRfZWludF93YWtlX21hc2soKSk7Ci0KLQlpZiAoZXh5bm9zX2lycXdha2VfaW50bWFzayA9PSAtMVUKLQkgICAgJiYgZXh5bm9zX2dldF9laW50X3dha2VfbWFzaygpID09IC0xVSkgewotCQlwcl9lcnIoIiVzOiBObyB3YWtlLXVwIHNvdXJjZXMhXG4iLCBfX2Z1bmNfXyk7Ci0JCXByX2VycigiJXM6IEFib3J0aW5nIHNsZWVwXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXMzY19wbV9zYXZlX3VhcnRzKCk7Ci0JZXh5bm9zX3BtX3ByZXBhcmUoKTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQlzM2NfcG1fY2hlY2tfc3RvcmUoKTsKLQotCXJldCA9IGNwdV9zdXNwZW5kKDAsIGV4eW5vc19jcHVfc3VzcGVuZCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXMzY19wbV9yZXN0b3JlX3VhcnRzKCk7Ci0KLQlTM0NfUE1EQkcoIiVzOiB3YWtldXAgc3RhdDogJTA4eFxuIiwgX19mdW5jX18sCi0JCQlwbXVfcmF3X3JlYWRsKFM1UF9XQUtFVVBfU1RBVCkpOwotCi0JczNjX3BtX2NoZWNrX3Jlc3RvcmUoKTsKLQotCVMzQ19QTURCRygiJXM6IHJlc3VtaW5nIHRoZSBzeXN0ZW0uLi5cbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGV4eW5vc19zdXNwZW5kX3ByZXBhcmUodm9pZCkKLXsKLQlzM2NfcG1fY2hlY2tfcHJlcGFyZSgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4eW5vc19zdXNwZW5kX2ZpbmlzaCh2b2lkKQotewotCXMzY19wbV9jaGVja19jbGVhbnVwKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgZXh5bm9zX3N1c3BlbmRfb3BzID0gewotCS5lbnRlcgkJPSBleHlub3Nfc3VzcGVuZF9lbnRlciwKLQkucHJlcGFyZQk9IGV4eW5vc19zdXNwZW5kX3ByZXBhcmUsCi0JLmZpbmlzaAkJPSBleHlub3Nfc3VzcGVuZF9maW5pc2gsCi0JLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCi19OwotCi12b2lkIF9faW5pdCBleHlub3NfcG1faW5pdCh2b2lkKQotewotCXUzMiB0bXA7Ci0KLQkvKiBQbGF0Zm9ybS1zcGVjaWZpYyBHSUMgY2FsbGJhY2sgKi8KLQlnaWNfYXJjaF9leHRuLmlycV9zZXRfd2FrZSA9IGV4eW5vc19pcnFfc2V0X3dha2U7Ci0KLQkvKiBBbGwgd2FrZXVwIGRpc2FibGUgKi8KLQl0bXAgPSBwbXVfcmF3X3JlYWRsKFM1UF9XQUtFVVBfTUFTSyk7Ci0JdG1wIHw9ICgoMHhGRiA8PCA4KSB8ICgweDFGIDw8IDEpKTsKLQlwbXVfcmF3X3dyaXRlbCh0bXAsIFM1UF9XQUtFVVBfTUFTSyk7Ci0KLQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmZXh5bm9zX3BtX3N5c2NvcmVfb3BzKTsKLQlzdXNwZW5kX3NldF9vcHMoJmV4eW5vc19zdXNwZW5kX29wcyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbXUuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtdS5jCmluZGV4IGZmOWQyM2YuLmMxNTc2MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3BtdS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgogICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCiAgKgogICogRVhZTk9TIC0gQ1BVIFBNVShQb3dlciBNYW5hZ2VtZW50IFVuaXQpIHN1cHBvcnQKQEAgLTEwLDEyICsxMCwxMzYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAKLSNpbmNsdWRlICJjb21tb24uaCIKKworI2luY2x1ZGUgImV4eW5vcy1wbXUuaCIKICNpbmNsdWRlICJyZWdzLXBtdS5oIgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfY29uZiAqZXh5bm9zX3BtdV9jb25maWc7CisjZGVmaW5lIFBNVV9UQUJMRV9FTkQJKC0xVSkKKworc3RydWN0IGV4eW5vc19wbXVfY29uZiB7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1OCB2YWxbTlVNX1NZU19QT1dFUkRPV05dOworfTsKKworc3RydWN0IGV4eW5vc19wbXVfZGF0YSB7CisJY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfY29uZiAqcG11X2NvbmZpZzsKKwljb25zdCBzdHJ1Y3QgZXh5bm9zX3BtdV9jb25mICpwbXVfY29uZmlnX2V4dHJhOworCisJdm9pZCAoKnBtdV9pbml0KSh2b2lkKTsKKwl2b2lkICgqcG93ZXJkb3duX2NvbmYpKGVudW0gc3lzX3Bvd2VyZG93bik7CisJdm9pZCAoKnBvd2VyZG93bl9jb25mX2V4dHJhKShlbnVtIHN5c19wb3dlcmRvd24pOworfTsKKworc3RydWN0IGV4eW5vc19wbXVfY29udGV4dCB7CisJc3RydWN0IGRldmljZSAqZGV2OworCWNvbnN0IHN0cnVjdCBleHlub3NfcG11X2RhdGEgKnBtdV9kYXRhOworfTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqcG11X2Jhc2VfYWRkcjsKK3N0YXRpYyBzdHJ1Y3QgZXh5bm9zX3BtdV9jb250ZXh0ICpwbXVfY29udGV4dDsKKworc3RhdGljIGlubGluZSB2b2lkIHBtdV9yYXdfd3JpdGVsKHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwbXVfYmFzZV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcG11X3Jhd19yZWFkbCh1MzIgb2Zmc2V0KQoreworCXJldHVybiByZWFkbF9yZWxheGVkKHBtdV9iYXNlX2FkZHIgKyBvZmZzZXQpOworfQorCitzdGF0aWMgc3RydWN0IGV4eW5vc19wbXVfY29uZiBleHlub3MzMjUwX3BtdV9jb25maWdbXSA9IHsKKwkvKiB7IC5vZmZzZXQgPSBvZmZzZXQsIC52YWwgPSB7IEFGVFIsIFctQUZUUiwgU0xFRVAgfSAqLworCXsgRVhZTk9TM19BUk1fQ09SRTBfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDJ9IH0sCisJeyBFWFlOT1MzX0RJU19JUlFfQVJNX0NPUkUwX0xPQ0FMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0RJU19JUlFfQVJNX0NPUkUwX0NFTlRSQUxfU1lTX1BXUl9SRUcsIHsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQVJNX0NPUkUxX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgyfSB9LAorCXsgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMV9MT0NBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMV9DRU5UUkFMX1NZU19QV1JfUkVHLCB7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0lTUF9BUk1fU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19ESVNfSVJRX0lTUF9BUk1fTE9DQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfRElTX0lSUV9JU1BfQVJNX0NFTlRSQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQVJNX0NPTU1PTl9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4Mn0gfSwKKwl7IEVYWU5PUzNfQVJNX0wyX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4M30gfSwKKwl7IEVYWU5PUzNfQ01VX0FDTEtTVE9QX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfU0NMS1NUT1BfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX0NNVV9SRVNFVF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfRFJBTV9GUkVRX0RPV05fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDF9IH0sCisJeyBFWFlOT1MzX0REUlBIWV9ETExPRkZfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDF9IH0sCisJeyBFWFlOT1MzX0xQRERSX1BIWV9ETExfTE9DS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgxfSB9LAorCXsgRVhZTk9TM19DTVVfQUNMS1NUT1BfQ09SRUJMS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfU0NMS1NUT1BfQ09SRUJMS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfUkVTRVRfQ09SRUJMS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19BUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfTVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0JQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19WUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfRVBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX1VQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgxfSB9LAorCXsgRVhZTk9TM19FUExMVVNFUl9TWVNDTEtfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX01QTExVU0VSX1NZU0NMS19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQlBMTFVTRVJfU1lTQ0xLX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfQ0xLU1RPUF9DQU1fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0NNVV9DTEtTVE9QX01GQ19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX0NMS1NUT1BfRzNEX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfQ0xLU1RPUF9MQ0QwX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfQ0xLU1RPUF9JU1BfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0NNVV9DTEtTVE9QX01BVURJT19TWVNfUFdSX1JFRywJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfUkVTRVRfQ0FNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfUkVTRVRfTUZDX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfUkVTRVRfRzNEX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfUkVTRVRfTENEMF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX0lTUF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfQ01VX1JFU0VUX01BVURJT19TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzNfVE9QX0JVU19TWVNfUFdSX1JFRywJCQl7IDB4MywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX1RPUF9SRVRFTlRJT05fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDF9IH0sCisJeyBFWFlOT1MzX1RPUF9QV1JfU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MywgMHgzfSB9LAorCXsgRVhZTk9TM19UT1BfQlVTX0NPUkVCTEtfU1lTX1BXUl9SRUcsCQl7IDB4MywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX1RPUF9SRVRFTlRJT05fQ09SRUJMS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgxfSB9LAorCXsgRVhZTk9TM19UT1BfUFdSX0NPUkVCTEtfU1lTX1BXUl9SRUcsCQl7IDB4MywgMHgzLCAweDN9IH0sCisJeyBFWFlOT1MzX0xPR0lDX1JFU0VUX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19PU0NDTEtfR0FURV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDEsIDB4MX0gfSwKKwl7IEVYWU5PUzNfTE9HSUNfUkVTRVRfQ09SRUJMS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19PU0NDTEtfR0FURV9DT1JFQkxLX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgwLCAweDF9IH0sCisJeyBFWFlOT1MzX1BBRF9SRVRFTlRJT05fRFJBTV9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX01BVURJT19TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX0dQSU9fU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9VQVJUX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9SRVRFTlRJT05fTU1DMF9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX01NQzFfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9NTUMyX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9SRVRFTlRJT05fU1BJX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9SRVRFTlRJT05fRUJJQV9TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19QQURfUkVURU5USU9OX0VCSUJfU1lTX1BXUl9SRUcsCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfUEFEX1JFVEVOVElPTl9KVEFHX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9JU09MQVRJT05fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1BBRF9BTFZfU0VMX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19YVVNCWFRJX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzNfWFhUSV9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX0VYVF9SRUdVTEFUT1JfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX0VYVF9SRUdVTEFUT1JfQ09SRUJMS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19HUElPX01PREVfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX0dQSU9fTU9ERV9NQVVESU9fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1RPUF9BU0JfUkVTRVRfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1RPUF9BU0JfSVNPTEFUSU9OX1NZU19QV1JfUkVHLAl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX1RPUF9BU0JfUkVTRVRfQ09SRUJMS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TM19UT1BfQVNCX0lTT0xBVElPTl9DT1JFQkxLX1NZU19QV1JfUkVHLCB7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1MzX0NBTV9TWVNfUFdSX1JFRywJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX01GQ19TWVNfUFdSX1JFRywJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0czRF9TWVNfUFdSX1JFRywJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1MzX0xDRDBfU1lTX1BXUl9SRUcsCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19JU1BfU1lTX1BXUl9SRUcsCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19NQVVESU9fU1lTX1BXUl9SRUcsCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TM19DTVVfU1lTQ0xLX0lTUF9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IFBNVV9UQUJMRV9FTkQsfSwKK307CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3BtdV9jb25mIGV4eW5vczQyMTBfcG11X2NvbmZpZ1tdID0gewogCS8qIHsgLm9mZnNldCA9IG9mZnNldCwgLnZhbCA9IHsgQUZUUiwgTFBBLCBTTEVFUCB9ICovCkBAIC0yNjQsNiArMzg4LDcgQEAKIAl7IEVYWU5PUzVfSU5UUkFNX01FTV9TWVNfUFdSX1JFRywJCXsgMHgzLCAweDAsIDB4MH0gfSwKIAl7IEVYWU5PUzVfSU5UUk9NX01FTV9TWVNfUFdSX1JFRywJCXsgMHgzLCAweDAsIDB4MH0gfSwKIAl7IEVYWU5PUzVfSlBFR19NRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9KUEVHX01FTV9PUFRJT04sCQkJeyAweDEwLCAweDEwLCAweDB9IH0sCiAJeyBFWFlOT1M1X0hTSV9NRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgwfSB9LAogCXsgRVhZTk9TNV9NQ1VJT1BfTUVNX1NZU19QV1JfUkVHLAkJeyAweDMsIDB4MCwgMHgwfSB9LAogCXsgRVhZTk9TNV9TQVRBX01FTV9TWVNfUFdSX1JFRywJCQl7IDB4MywgMHgwLCAweDB9IH0sCkBAIC0zMTUsNiArNDQwLDE4OSBAQAogCXsgUE1VX1RBQkxFX0VORCx9LAogfTsKIAorc3RhdGljIHN0cnVjdCBleHlub3NfcG11X2NvbmYgZXh5bm9zNTQyMF9wbXVfY29uZmlnW10gPSB7CisJLyogeyAub2Zmc2V0ID0gb2Zmc2V0LCAudmFsID0geyBBRlRSLCBMUEEsIFNMRUVQIH0gKi8KKwl7IEVYWU5PUzVfQVJNX0NPUkUwX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfRElTX0lSUV9BUk1fQ09SRTBfTE9DQUxfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0RJU19JUlFfQVJNX0NPUkUwX0NFTlRSQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQVJNX0NPUkUxX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfRElTX0lSUV9BUk1fQ09SRTFfTE9DQUxfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0RJU19JUlFfQVJNX0NPUkUxX0NFTlRSQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQVJNX0NPUkUyX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9BUk1fQ09SRTJfTE9DQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9BUk1fQ09SRTJfQ0VOVFJBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9BUk1fQ09SRTNfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0FSTV9DT1JFM19MT0NBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0FSTV9DT1JFM19DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0tGQ19DT1JFMF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUwX0xPQ0FMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUwX0NFTlRSQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfS0ZDX0NPUkUxX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTFfTE9DQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRElTX0lSUV9LRkNfQ09SRTFfQ0VOVFJBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9LRkNfQ09SRTJfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMl9MT0NBTF9TWVNfUFdSX1JFRywJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMl9DRU5UUkFMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0tGQ19DT1JFM19TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUzX0xPQ0FMX1NZU19QV1JfUkVHLAl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUzX0NFTlRSQUxfU1lTX1BXUl9SRUcsCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfSVNQX0FSTV9TWVNfUFdSX1JFRywJCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9ESVNfSVJRX0lTUF9BUk1fTE9DQUxfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0RJU19JUlFfSVNQX0FSTV9DRU5UUkFMX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9BUk1fQ09NTU9OX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfS0ZDX0NPTU1PTl9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0FSTV9MMl9TWVNfUFdSX1JFRywJCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9LRkNfTDJfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfQUNMS1NUT1BfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfU0NMS1NUT1BfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgxfSB9LAorCXsgRVhZTk9TNV9DTVVfUkVTRVRfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfQUNMS1NUT1BfU1lTTUVNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfU0NMS1NUT1BfU1lTTUVNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgxfSB9LAorCXsgRVhZTk9TNV9DTVVfUkVTRVRfU1lTTUVNX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfRFJBTV9GUkVRX0RPV05fU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgxfSB9LAorCXsgRVhZTk9TNV9ERFJQSFlfRExMT0ZGX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MX0gfSwKKwl7IEVYWU5PUzVfRERSUEhZX0RMTExPQ0tfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgxfSB9LAorCXsgRVhZTk9TNV9BUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X01QTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfVlBMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9FUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X0JQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ1BMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9EUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0lQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfS1BMTF9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9NUExMVVNFUl9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9CUExMVVNFUl9TWVNDTEtfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9SUExMX1NZU0NMS19TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1NQTExfU1lTQ0xLX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfVE9QX0JVU19TWVNfUFdSX1JFRywJCQkJeyAweDMsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9UT1BfUkVURU5USU9OX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MX0gfSwKKwl7IEVYWU5PUzVfVE9QX1BXUl9TWVNfUFdSX1JFRywJCQkJeyAweDMsIDB4MywgMHgwfSB9LAorCXsgRVhZTk9TNV9UT1BfQlVTX1NZU01FTV9TWVNfUFdSX1JFRywJCQl7IDB4MywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X1RPUF9SRVRFTlRJT05fU1lTTUVNX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgxfSB9LAorCXsgRVhZTk9TNV9UT1BfUFdSX1NZU01FTV9TWVNfUFdSX1JFRywJCQl7IDB4MywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0xPR0lDX1JFU0VUX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfT1NDQ0xLX0dBVEVfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgxfSB9LAorCXsgRVhZTk9TNV9MT0dJQ19SRVNFVF9TWVNNRU1fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X09TQ0NMS19HQVRFX1NZU01FTV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfSU5UUkFNX01FTV9TWVNfUFdSX1JFRywJCQl7IDB4MywgMHgwLCAweDN9IH0sCisJeyBFWFlOT1M1NDIwX0lOVFJPTV9NRU1fU1lTX1BXUl9SRUcsCQkJeyAweDMsIDB4MCwgMHgzfSB9LAorCXsgRVhZTk9TNV9QQURfUkVURU5USU9OX0RSQU1fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X1BBRF9SRVRFTlRJT05fTUFVX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0pUQUdfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fRFJBTV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9VQVJUX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX01NQzBfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fTU1DMV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9NTUMyX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0hTSV9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9FQklBX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0VCSUJfU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fU1BJX1NZU19QV1JfUkVHLAkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0RSQU1fQ09SRUJMS19TWVNfUFdSX1JFRywJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9QQURfSVNPTEFUSU9OX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfUEFEX0lTT0xBVElPTl9TWVNNRU1fU1lTX1BXUl9SRUcsCQl7IDB4MSwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X1BBRF9BTFZfU0VMX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfWFVTQlhUSV9TWVNfUFdSX1JFRywJCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNV9YWFRJX1NZU19QV1JfUkVHLAkJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X0VYVF9SRUdVTEFUT1JfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNV9HUElPX01PREVfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9HUElPX01PREVfU1lTTUVNX1NZU19QV1JfUkVHLAkJCXsgMHgxLCAweDEsIDB4MH0gfSwKKwl7IEVYWU5PUzVfR1BJT19NT0RFX01BVV9TWVNfUFdSX1JFRywJCQl7IDB4MSwgMHgxLCAweDB9IH0sCisJeyBFWFlOT1M1X1RPUF9BU0JfUkVTRVRfU1lTX1BXUl9SRUcsCQkJeyAweDEsIDB4MSwgMHgwfSB9LAorCXsgRVhZTk9TNV9UT1BfQVNCX0lTT0xBVElPTl9TWVNfUFdSX1JFRywJCXsgMHgxLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfR1NDTF9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9JU1BfU1lTX1BXUl9SRUcsCQkJCXsgMHg3LCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfTUZDX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0czRF9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9ESVNQMV9TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9NQVVfU1lTX1BXUl9SRUcsCQkJCXsgMHg3LCAweDcsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfRzJEX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX01TQ19TWVNfUFdSX1JFRywJCQkJeyAweDcsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9GU1lTX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0ZTWVMyX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BTR0VOX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1BFUklDX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX1dDT1JFX1NZU19QV1JfUkVHLAkJCQl7IDB4NywgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NNVV9DTEtTVE9QX0dTQ0xfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfQ0xLU1RPUF9JU1BfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfQ0xLU1RPUF9NRkNfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfQ0xLU1RPUF9HM0RfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9ESVNQMV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfTUFVX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9HMkRfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX01TQ19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfRlNZU19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfUFNHRU5fU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX1BFUklDX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9XQ09SRV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1NZU0NMS19HU0NMX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1NZU0NMS19JU1BfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfU1lTQ0xLX01GQ19TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NNVV9TWVNDTEtfRzNEX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19ESVNQMV9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19NQVVfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRzJEX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX01TQ19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1NZU0NMS19GU1lTX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0ZTWVMyX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX1BTR0VOX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX1BFUklDX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX1dDT1JFX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfUkVTRVRfRlNZUzJfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9SRVNFVF9QU0dFTl9TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX1BFUklDX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfUkVTRVRfV0NPUkVfU1lTX1BXUl9SRUcsCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NNVV9SRVNFVF9HU0NMX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzVfQ01VX1JFU0VUX0lTUF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1X0NNVV9SRVNFVF9NRkNfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNV9DTVVfUkVTRVRfRzNEX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX0RJU1AxX1NZU19QV1JfUkVHLAkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfUkVTRVRfTUFVX1NZU19QV1JfUkVHLAkJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IEVYWU5PUzU0MjBfQ01VX1JFU0VUX0cyRF9TWVNfUFdSX1JFRywJCQl7IDB4MCwgMHgwLCAweDB9IH0sCisJeyBFWFlOT1M1NDIwX0NNVV9SRVNFVF9NU0NfU1lTX1BXUl9SRUcsCQkJeyAweDAsIDB4MCwgMHgwfSB9LAorCXsgRVhZTk9TNTQyMF9DTVVfUkVTRVRfRlNZU19TWVNfUFdSX1JFRywJCXsgMHgwLCAweDAsIDB4MH0gfSwKKwl7IFBNVV9UQUJMRV9FTkQsfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29uc3QgZXh5bm9zMzI1MF9saXN0X2ZlZWRbXSA9IHsKKwlFWFlOT1MzX0FSTV9DT1JFX09QVElPTigwKSwKKwlFWFlOT1MzX0FSTV9DT1JFX09QVElPTigxKSwKKwlFWFlOT1MzX0FSTV9DT1JFX09QVElPTigyKSwKKwlFWFlOT1MzX0FSTV9DT1JFX09QVElPTigzKSwKKwlFWFlOT1MzX0FSTV9DT01NT05fT1BUSU9OLAorCUVYWU5PUzNfVE9QX1BXUl9PUFRJT04sCisJRVhZTk9TM19DT1JFX1RPUF9QV1JfT1BUSU9OLAorCVM1UF9DQU1fT1BUSU9OLAorCVM1UF9NRkNfT1BUSU9OLAorCVM1UF9HM0RfT1BUSU9OLAorCVM1UF9MQ0QwX09QVElPTiwKKwlTNVBfSVNQX09QVElPTiwKK307CisKK3N0YXRpYyB2b2lkIGV4eW5vczMyNTBfcG93ZXJkb3duX2NvbmZfZXh0cmEoZW51bSBzeXNfcG93ZXJkb3duIG1vZGUpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIEVuYWJsZSBvbmx5IFNDX0ZFRURCQUNLICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh5bm9zMzI1MF9saXN0X2ZlZWQpOyBpKyspIHsKKwkJdG1wID0gcG11X3Jhd19yZWFkbChleHlub3MzMjUwX2xpc3RfZmVlZFtpXSk7CisJCXRtcCAmPSB+KEVYWU5PUzNfT1BUSU9OX1VTRV9TQ19DT1VOVEVSKTsKKwkJdG1wIHw9IEVYWU5PUzNfT1BUSU9OX1VTRV9TQ19GRUVEQkFDSzsKKwkJcG11X3Jhd193cml0ZWwodG1wLCBleHlub3MzMjUwX2xpc3RfZmVlZFtpXSk7CisJfQorCisJaWYgKG1vZGUgIT0gU1lTX1NMRUVQKQorCQlyZXR1cm47CisKKwlwbXVfcmF3X3dyaXRlbChYVVNCWFRJX0RVUkFUSU9OLCBFWFlOT1MzX1hVU0JYVElfRFVSQVRJT04pOworCXBtdV9yYXdfd3JpdGVsKFhYVElfRFVSQVRJT04sIEVYWU5PUzNfWFhUSV9EVVJBVElPTik7CisJcG11X3Jhd193cml0ZWwoRVhUX1JFR1VMQVRPUl9EVVJBVElPTiwgRVhZTk9TM19FWFRfUkVHVUxBVE9SX0RVUkFUSU9OKTsKKwlwbXVfcmF3X3dyaXRlbChFWFRfUkVHVUxBVE9SX0NPUkVCTEtfRFVSQVRJT04sCisJCSAgICAgICBFWFlOT1MzX0VYVF9SRUdVTEFUT1JfQ09SRUJMS19EVVJBVElPTik7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29uc3QgZXh5bm9zNV9saXN0X2JvdGhfY250X2ZlZWRbXSA9IHsKIAlFWFlOT1M1X0FSTV9DT1JFMF9PUFRJT04sCiAJRVhZTk9TNV9BUk1fQ09SRTFfT1BUSU9OLApAQCAtMzI5LDEzICs2MzcsODIgQEAKIAlFWFlOT1M1X1RPUF9QV1JfU1lTTUVNX09QVElPTiwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY29uc3QgZXh5bm9zNV9saXN0X2RpYWJsZV93Zmlfd2ZlW10gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGV4eW5vczVfbGlzdF9kaXNhYmxlX3dmaV93ZmVbXSA9IHsKIAlFWFlOT1M1X0FSTV9DT1JFMV9PUFRJT04sCiAJRVhZTk9TNV9GU1lTX0FSTV9PUFRJT04sCiAJRVhZTk9TNV9JU1BfQVJNX09QVElPTiwKIH07CiAKLXN0YXRpYyB2b2lkIGV4eW5vczVfaW5pdF9wbXUodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29uc3QgZXh5bm9zNTQyMF9saXN0X2Rpc2FibGVfcG11X3JlZ1tdID0geworCUVYWU5PUzVfQ01VX0NMS1NUT1BfR1NDTF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1X0NNVV9DTEtTVE9QX0lTUF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1X0NNVV9DTEtTVE9QX0czRF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0RJU1AxX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfTUFVX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfRzJEX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfTVNDX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfRlNZU19TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX1BTR0VOX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfUEVSSUNfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9XQ09SRV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1X0NNVV9TWVNDTEtfR1NDTF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1X0NNVV9TWVNDTEtfSVNQX1NZU19QV1JfUkVHLAorCUVYWU5PUzVfQ01VX1NZU0NMS19HM0RfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0RJU1AxX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1NZU0NMS19NQVVfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0cyRF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9TWVNDTEtfTVNDX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1NZU0NMS19GU1lTX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1NZU0NMS19GU1lTMl9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9TWVNDTEtfUFNHRU5fU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX1BFUklDX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1NZU0NMS19XQ09SRV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9SRVNFVF9GU1lTMl9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9SRVNFVF9QU0dFTl9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9SRVNFVF9QRVJJQ19TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9SRVNFVF9XQ09SRV9TWVNfUFdSX1JFRywKKwlFWFlOT1M1X0NNVV9SRVNFVF9HU0NMX1NZU19QV1JfUkVHLAorCUVYWU5PUzVfQ01VX1JFU0VUX0lTUF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1X0NNVV9SRVNFVF9HM0RfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfRElTUDFfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfTUFVX1NZU19QV1JfUkVHLAorCUVYWU5PUzU0MjBfQ01VX1JFU0VUX0cyRF9TWVNfUFdSX1JFRywKKwlFWFlOT1M1NDIwX0NNVV9SRVNFVF9NU0NfU1lTX1BXUl9SRUcsCisJRVhZTk9TNTQyMF9DTVVfUkVTRVRfRlNZU19TWVNfUFdSX1JFRywKK307CisKK3N0YXRpYyB2b2lkIGV4eW5vczVfcG93ZXJfb2ZmKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXByX2luZm8oIlBvd2VyIGRvd24uXG4iKTsKKwl0bXAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PU19QU19IT0xEX0NPTlRST0wpOworCXRtcCBePSAoMSA8PCA4KTsKKwlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PU19QU19IT0xEX0NPTlRST0wpOworCisJLyogV2FpdCBhIGxpdHRsZSBzbyB3ZSBkb24ndCBnaXZlIGEgZmFsc2Ugd2FybmluZyBiZWxvdyAqLworCW1kZWxheSgxMDApOworCisJcHJfZXJyKCJQb3dlciBkb3duIGZhaWxlZCwgcGxlYXNlIHBvd2VyIG9mZiBzeXN0ZW0gbWFudWFsbHkuXG4iKTsKKwl3aGlsZSAoMSkKKwkJOworfQorCit2b2lkIGV4eW5vczU0MjBfcG93ZXJkb3duX2NvbmYoZW51bSBzeXNfcG93ZXJkb3duIG1vZGUpCit7CisJdTMyIHRoaXNfY2x1c3RlcjsKKworCXRoaXNfY2x1c3RlciA9IE1QSURSX0FGRklOSVRZX0xFVkVMKHJlYWRfY3B1aWRfbXBpZHIoKSwgMSk7CisKKwkvKgorCSAqIHNldCB0aGUgY2x1c3RlciBpZCB0byBJUk9NIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGF0IHdlIHdha2UKKwkgKiB1cCB3aXRoIHRoZSBjdXJyZW50IGNsdXN0ZXIuCisJICovCisJcG11X3Jhd193cml0ZWwodGhpc19jbHVzdGVyLCBFWFlOT1NfSVJPTV9EQVRBMik7Cit9CisKKworc3RhdGljIHZvaWQgZXh5bm9zNV9wb3dlcmRvd25fY29uZihlbnVtIHN5c19wb3dlcmRvd24gbW9kZSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgdG1wOwpAQCAtMzQzLDcgKzcyMCw3IEBACiAJLyoKIAkgKiBFbmFibGUgYm90aCBTQ19GRUVEQkFDSyBhbmQgU0NfQ09VTlRFUgogCSAqLwotCWZvciAoaSA9IDAgOyBpIDwgQVJSQVlfU0laRShleHlub3M1X2xpc3RfYm90aF9jbnRfZmVlZCkgOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShleHlub3M1X2xpc3RfYm90aF9jbnRfZmVlZCk7IGkrKykgewogCQl0bXAgPSBwbXVfcmF3X3JlYWRsKGV4eW5vczVfbGlzdF9ib3RoX2NudF9mZWVkW2ldKTsKIAkJdG1wIHw9IChFWFlOT1M1X1VTRV9TQ19GRUVEQkFDSyB8CiAJCQlFWFlOT1M1X1VTRV9TQ19DT1VOVEVSKTsKQEAgLTM2MCwxMSArNzM3LDExIEBACiAJLyoKIAkgKiBEaXNhYmxlIFdGSS9XRkUgb24gWFhYX09QVElPTgogCSAqLwotCWZvciAoaSA9IDAgOyBpIDwgQVJSQVlfU0laRShleHlub3M1X2xpc3RfZGlhYmxlX3dmaV93ZmUpIDsgaSsrKSB7Ci0JCXRtcCA9IHBtdV9yYXdfcmVhZGwoZXh5bm9zNV9saXN0X2RpYWJsZV93Zmlfd2ZlW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShleHlub3M1X2xpc3RfZGlzYWJsZV93Zmlfd2ZlKTsgaSsrKSB7CisJCXRtcCA9IHBtdV9yYXdfcmVhZGwoZXh5bm9zNV9saXN0X2Rpc2FibGVfd2ZpX3dmZVtpXSk7CiAJCXRtcCAmPSB+KEVYWU5PUzVfT1BUSU9OX1VTRV9TVEFOREJZV0ZFIHwKIAkJCSBFWFlOT1M1X09QVElPTl9VU0VfU1RBTkRCWVdGSSk7Ci0JCXBtdV9yYXdfd3JpdGVsKHRtcCwgZXh5bm9zNV9saXN0X2RpYWJsZV93Zmlfd2ZlW2ldKTsKKwkJcG11X3Jhd193cml0ZWwodG1wLCBleHlub3M1X2xpc3RfZGlzYWJsZV93Zmlfd2ZlW2ldKTsKIAl9CiB9CiAKQEAgLTM3Miw1MSArNzQ5LDI1NyBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKHNvY19pc19leHlub3M1MjUwKCkpCi0JCWV4eW5vczVfaW5pdF9wbXUoKTsKKwljb25zdCBzdHJ1Y3QgZXh5bm9zX3BtdV9kYXRhICpwbXVfZGF0YSA9IHBtdV9jb250ZXh0LT5wbXVfZGF0YTsKIAotCWZvciAoaSA9IDA7IChleHlub3NfcG11X2NvbmZpZ1tpXS5vZmZzZXQgIT0gUE1VX1RBQkxFX0VORCkgOyBpKyspCi0JCXBtdV9yYXdfd3JpdGVsKGV4eW5vc19wbXVfY29uZmlnW2ldLnZhbFttb2RlXSwKLQkJCQlleHlub3NfcG11X2NvbmZpZ1tpXS5vZmZzZXQpOworCWlmIChwbXVfZGF0YS0+cG93ZXJkb3duX2NvbmYpCisJCXBtdV9kYXRhLT5wb3dlcmRvd25fY29uZihtb2RlKTsKIAotCWlmIChzb2NfaXNfZXh5bm9zNDQxMigpKSB7Ci0JCWZvciAoaSA9IDA7IGV4eW5vczQ0MTJfcG11X2NvbmZpZ1tpXS5vZmZzZXQgIT0gUE1VX1RBQkxFX0VORCA7IGkrKykKLQkJCXBtdV9yYXdfd3JpdGVsKGV4eW5vczQ0MTJfcG11X2NvbmZpZ1tpXS52YWxbbW9kZV0sCi0JCQkJCWV4eW5vczQ0MTJfcG11X2NvbmZpZ1tpXS5vZmZzZXQpOworCWlmIChwbXVfZGF0YS0+cG11X2NvbmZpZykgeworCQlmb3IgKGkgPSAwOyAocG11X2RhdGEtPnBtdV9jb25maWdbaV0ub2Zmc2V0ICE9IFBNVV9UQUJMRV9FTkQpOyBpKyspCisJCQlwbXVfcmF3X3dyaXRlbChwbXVfZGF0YS0+cG11X2NvbmZpZ1tpXS52YWxbbW9kZV0sCisJCQkJCXBtdV9kYXRhLT5wbXVfY29uZmlnW2ldLm9mZnNldCk7CisJfQorCisJaWYgKHBtdV9kYXRhLT5wb3dlcmRvd25fY29uZl9leHRyYSkKKwkJcG11X2RhdGEtPnBvd2VyZG93bl9jb25mX2V4dHJhKG1vZGUpOworCisJaWYgKHBtdV9kYXRhLT5wbXVfY29uZmlnX2V4dHJhKSB7CisJCWZvciAoaSA9IDA7IHBtdV9kYXRhLT5wbXVfY29uZmlnX2V4dHJhW2ldLm9mZnNldCAhPSBQTVVfVEFCTEVfRU5EOyBpKyspCisJCQlwbXVfcmF3X3dyaXRlbChwbXVfZGF0YS0+cG11X2NvbmZpZ19leHRyYVtpXS52YWxbbW9kZV0sCisJCQkJCXBtdV9kYXRhLT5wbXVfY29uZmlnX2V4dHJhW2ldLm9mZnNldCk7CiAJfQogfQogCi1zdGF0aWMgaW50IF9faW5pdCBleHlub3NfcG11X2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIGV4eW5vczMyNTBfcG11X2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CiAKLQlleHlub3NfcG11X2NvbmZpZyA9IGV4eW5vczQyMTBfcG11X2NvbmZpZzsKKwkvKgorCSAqIFRvIHByZXZlbnQgZnJvbSBpc3N1aW5nIG5ldyBidXMgcmVxdWVzdCBmb3JtIEwyIG1lbW9yeSBzeXN0ZW0KKwkgKiBJZiBjb3JlIHN0YXR1cyBpcyBwb3dlciBkb3duLCBzaG91bGQgYmUgc2V0ICcxJyB0byBMMiBwb3dlciBkb3duCisJICovCisJdmFsdWUgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzNfQVJNX0NPTU1PTl9PUFRJT04pOworCXZhbHVlIHw9IEVYWU5PUzNfT1BUSU9OX1NLSVBfREVBQ1RJVkFURV9BQ0VBQ1BfSU5fUFdETjsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TM19BUk1fQ09NTU9OX09QVElPTik7CiAKLQlpZiAoc29jX2lzX2V4eW5vczQyMTAoKSkgewotCQlleHlub3NfcG11X2NvbmZpZyA9IGV4eW5vczQyMTBfcG11X2NvbmZpZzsKLQkJcHJfaW5mbygiRVhZTk9TNDIxMCBQTVUgSW5pdGlhbGl6ZVxuIik7Ci0JfSBlbHNlIGlmIChzb2NfaXNfZXh5bm9zNDIxMigpIHx8IHNvY19pc19leHlub3M0NDEyKCkpIHsKLQkJZXh5bm9zX3BtdV9jb25maWcgPSBleHlub3M0eDEyX3BtdV9jb25maWc7Ci0JCXByX2luZm8oIkVYWU5PUzR4MTIgUE1VIEluaXRpYWxpemVcbiIpOwotCX0gZWxzZSBpZiAoc29jX2lzX2V4eW5vczUyNTAoKSkgewotCQkvKgotCQkgKiBXaGVuIFNZU19XRFRSRVNFVCBpcyBzZXQsIHdhdGNoZG9nIHRpbWVyIHJlc2V0IHJlcXVlc3QKLQkJICogaXMgaWdub3JlZCBieSBwb3dlciBtYW5hZ2VtZW50IHVuaXQuCi0JCSAqLwotCQl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNV9BVVRPX1dEVFJFU0VUX0RJU0FCTEUpOwotCQl2YWx1ZSAmPSB+RVhZTk9TNV9TWVNfV0RUUkVTRVQ7Ci0JCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBFWFlOT1M1X0FVVE9fV0RUUkVTRVRfRElTQUJMRSk7CisJLyogRW5hYmxlIFVTRV9TVEFOREJZX1dGSSBmb3IgYWxsIENPUkUgKi8KKwlwbXVfcmF3X3dyaXRlbChTNVBfVVNFX1NUQU5EQllfV0ZJX0FMTCwgUzVQX0NFTlRSQUxfU0VRX09QVElPTik7CiAKLQkJdmFsdWUgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzVfTUFTS19XRFRSRVNFVF9SRVFVRVNUKTsKLQkJdmFsdWUgJj0gfkVYWU5PUzVfU1lTX1dEVFJFU0VUOwotCQlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TNV9NQVNLX1dEVFJFU0VUX1JFUVVFU1QpOworCS8qCisJICogU2V0IFBTSE9MRCBwb3J0IGZvciBvdXRwdXQgaGlnaAorCSAqLworCXZhbHVlID0gcG11X3Jhd19yZWFkbChTNVBfUFNfSE9MRF9DT05UUk9MKTsKKwl2YWx1ZSB8PSBTNVBfUFNfSE9MRF9PVVRQVVRfSElHSDsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgUzVQX1BTX0hPTERfQ09OVFJPTCk7CiAKLQkJZXh5bm9zX3BtdV9jb25maWcgPSBleHlub3M1MjUwX3BtdV9jb25maWc7Ci0JCXByX2luZm8oIkVYWU5PUzUyNTAgUE1VIEluaXRpYWxpemVcbiIpOwotCX0gZWxzZSB7Ci0JCXByX2luZm8oIkVYWU5PUzogUE1VIG5vdCBzdXBwb3J0ZWRcbiIpOworCS8qCisJICogRW5hYmxlIHNpZ25hbCBmb3IgUFNIT0xEIHBvcnQKKwkgKi8KKwl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoUzVQX1BTX0hPTERfQ09OVFJPTCk7CisJdmFsdWUgfD0gUzVQX1BTX0hPTERfRU47CisJcG11X3Jhd193cml0ZWwodmFsdWUsIFM1UF9QU19IT0xEX0NPTlRST0wpOworfQorCitzdGF0aWMgdm9pZCBleHlub3M1MjUwX3BtdV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCS8qCisJICogV2hlbiBTWVNfV0RUUkVTRVQgaXMgc2V0LCB3YXRjaGRvZyB0aW1lciByZXNldCByZXF1ZXN0CisJICogaXMgaWdub3JlZCBieSBwb3dlciBtYW5hZ2VtZW50IHVuaXQuCisJICovCisJdmFsdWUgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzVfQVVUT19XRFRSRVNFVF9ESVNBQkxFKTsKKwl2YWx1ZSAmPSB+RVhZTk9TNV9TWVNfV0RUUkVTRVQ7CisJcG11X3Jhd193cml0ZWwodmFsdWUsIEVYWU5PUzVfQVVUT19XRFRSRVNFVF9ESVNBQkxFKTsKKworCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1M1X01BU0tfV0RUUkVTRVRfUkVRVUVTVCk7CisJdmFsdWUgJj0gfkVYWU5PUzVfU1lTX1dEVFJFU0VUOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBFWFlOT1M1X01BU0tfV0RUUkVTRVRfUkVRVUVTVCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vczU0MjBfcG11X2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJaW50IGk7CisKKwkvKgorCSAqIFNldCB0aGUgQ01VX1JFU0VULCBDTVVfU1lTQ0xLIGFuZCBDTVVfQ0xLU1RPUCByZWdpc3RlcnMKKwkgKiBmb3IgbG9jYWwgcG93ZXIgYmxvY2tzIHRvIExvdyBpbml0aWFsbHkgYXMgcGVyIFRhYmxlIDgtNDoKKwkgKiAiU3lzdGVtLUxldmVsIFBvd2VyLURvd24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMiLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV4eW5vczU0MjBfbGlzdF9kaXNhYmxlX3BtdV9yZWcpOyBpKyspCisJCXBtdV9yYXdfd3JpdGVsKDAsIGV4eW5vczU0MjBfbGlzdF9kaXNhYmxlX3BtdV9yZWdbaV0pOworCisJLyogRW5hYmxlIFVTRV9TVEFOREJZX1dGSSBmb3IgYWxsIENPUkUgKi8KKwlwbXVfcmF3X3dyaXRlbChFWFlOT1M1NDIwX1VTRV9TVEFOREJZX1dGSV9BTEwsIFM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOworCisJdmFsdWUgID0gcG11X3Jhd19yZWFkbChFWFlOT1NfTDJfT1BUSU9OKDApKTsKKwl2YWx1ZSAmPSB+RVhZTk9TNV9VU0VfUkVURU5USU9OOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBFWFlOT1NfTDJfT1BUSU9OKDApKTsKKworCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1NfTDJfT1BUSU9OKDEpKTsKKwl2YWx1ZSAmPSB+RVhZTk9TNV9VU0VfUkVURU5USU9OOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBFWFlOT1NfTDJfT1BUSU9OKDEpKTsKKworCS8qCisJICogSWYgTDJfQ09NTU9OIGlzIHR1cm5lZCBvZmYsIGNsb2NrcyByZWxhdGVkIHRvIEFUQiBhc3luYworCSAqIGJyaWRnZSBhcmUgZ2F0ZWQuIFRodXMsIHdoZW4gSVNQIHBvd2VyIGlzIGdhdGVkLCBMUEkKKwkgKiBtYXkgZ2V0IHN0dWNrLgorCSAqLworCXZhbHVlID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX0xQSV9NQVNLKTsKKwl2YWx1ZSB8PSBFWFlOT1M1NDIwX0FUQl9JU1BfQVJNOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBFWFlOT1M1NDIwX0xQSV9NQVNLKTsKKworCXZhbHVlICA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNTQyMF9MUElfTUFTSzEpOworCXZhbHVlIHw9IEVYWU5PUzU0MjBfQVRCX0tGQzsKKwlwbXVfcmF3X3dyaXRlbCh2YWx1ZSwgRVhZTk9TNTQyMF9MUElfTUFTSzEpOworCisJLyogUHJldmVudCBpc3N1ZSBvZiBuZXcgYnVzIHJlcXVlc3QgZnJvbSBMMiBtZW1vcnkgKi8KKwl2YWx1ZSA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNTQyMF9BUk1fQ09NTU9OX09QVElPTik7CisJdmFsdWUgfD0gRVhZTk9TNV9TS0lQX0RFQUNUSVZBVEVfQUNFQUNQX0lOX1BXRE47CisJcG11X3Jhd193cml0ZWwodmFsdWUsIEVYWU5PUzU0MjBfQVJNX0NPTU1PTl9PUFRJT04pOworCisJdmFsdWUgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzU0MjBfS0ZDX0NPTU1PTl9PUFRJT04pOworCXZhbHVlIHw9IEVYWU5PUzVfU0tJUF9ERUFDVElWQVRFX0FDRUFDUF9JTl9QV0ROOworCXBtdV9yYXdfd3JpdGVsKHZhbHVlLCBFWFlOT1M1NDIwX0tGQ19DT01NT05fT1BUSU9OKTsKKworCS8qIFRoaXMgc2V0dGluZyBpcyB0byByZWR1Y2Ugc3VzcGVuZC9yZXN1bWUgdGltZSAqLworCXBtdV9yYXdfd3JpdGVsKERVUl9XQUlUX1JFU0VULCBFWFlOT1M1NDIwX0xPR0lDX1JFU0VUX0RVUkFUSU9OMyk7CisKKwkvKiBTZXJpYWxpemVkIENQVSB3YWtldXAgb2YgRWFnbGUgKi8KKwlwbXVfcmF3X3dyaXRlbChTUFJFQURfRU5BQkxFLCBFWFlOT1M1NDIwX0FSTV9JTlRSX1NQUkVBRF9FTkFCTEUpOworCisJcG11X3Jhd193cml0ZWwoU1BSRUFEX1VTRV9TVEFORFdGSSwKKwkJCUVYWU5PUzU0MjBfQVJNX0lOVFJfU1BSRUFEX1VTRV9TVEFOREJZV0ZJKTsKKworCXBtdV9yYXdfd3JpdGVsKDB4MSwgRVhZTk9TNTQyMF9VUF9TQ0hFRFVMRVIpOworCisJcG1fcG93ZXJfb2ZmID0gZXh5bm9zNV9wb3dlcl9vZmY7CisJcHJfaW5mbygiRVhZTk9TNTQyMCBQTVUgaW5pdGlhbGl6ZWRcbiIpOworfQorCitzdGF0aWMgaW50IHBtdV9yZXN0YXJ0X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCXVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQoreworCXBtdV9yYXdfd3JpdGVsKDB4MSwgRVhZTk9TX1NXUkVTRVQpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfZGF0YSBleHlub3MzMjUwX3BtdV9kYXRhID0geworCS5wbXVfY29uZmlnCT0gZXh5bm9zMzI1MF9wbXVfY29uZmlnLAorCS5wbXVfaW5pdAk9IGV4eW5vczMyNTBfcG11X2luaXQsCisJLnBvd2VyZG93bl9jb25mX2V4dHJhCT0gZXh5bm9zMzI1MF9wb3dlcmRvd25fY29uZl9leHRyYSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3BtdV9kYXRhIGV4eW5vczQyMTBfcG11X2RhdGEgPSB7CisJLnBtdV9jb25maWcJPSBleHlub3M0MjEwX3BtdV9jb25maWcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfZGF0YSBleHlub3M0MjEyX3BtdV9kYXRhID0geworCS5wbXVfY29uZmlnCT0gZXh5bm9zNHgxMl9wbXVfY29uZmlnLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfcG11X2RhdGEgZXh5bm9zNDQxMl9wbXVfZGF0YSA9IHsKKwkucG11X2NvbmZpZwkJPSBleHlub3M0eDEyX3BtdV9jb25maWcsCisJLnBtdV9jb25maWdfZXh0cmEJPSBleHlub3M0NDEyX3BtdV9jb25maWcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfZGF0YSBleHlub3M1MjUwX3BtdV9kYXRhID0geworCS5wbXVfY29uZmlnCT0gZXh5bm9zNTI1MF9wbXVfY29uZmlnLAorCS5wbXVfaW5pdAk9IGV4eW5vczUyNTBfcG11X2luaXQsCisJLnBvd2VyZG93bl9jb25mCT0gZXh5bm9zNV9wb3dlcmRvd25fY29uZiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXh5bm9zX3BtdV9kYXRhIGV4eW5vczU0MjBfcG11X2RhdGEgPSB7CisJLnBtdV9jb25maWcJPSBleHlub3M1NDIwX3BtdV9jb25maWcsCisJLnBtdV9pbml0CT0gZXh5bm9zNTQyMF9wbXVfaW5pdCwKKwkucG93ZXJkb3duX2NvbmYJPSBleHlub3M1NDIwX3Bvd2VyZG93bl9jb25mLAorfTsKKworLyoKKyAqIFBNVSBwbGF0Zm9ybSBkcml2ZXIgYW5kIGRldmljZXRyZWUgYmluZGluZ3MuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGV4eW5vc19wbXVfb2ZfZGV2aWNlX2lkc1tdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3MzMjUwLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczMyNTBfcG11X2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcG11IiwKKwkJLmRhdGEgPSAmZXh5bm9zNDIxMF9wbXVfZGF0YSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1wbXUiLAorCQkuZGF0YSA9ICZleHlub3M0MjEyX3BtdV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0NDEyLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczQ0MTJfcG11X2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtcG11IiwKKwkJLmRhdGEgPSAmZXh5bm9zNTI1MF9wbXVfZGF0YSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTQyMC1wbXUiLAorCQkuZGF0YSA9ICZleHlub3M1NDIwX3BtdV9kYXRhLAorCX0sCisJeyAvKnNlbnRpbmVsKi8gfSwKK307CisKKy8qCisgKiBFeHlub3MgUE1VIHJlc3RhcnQgbm90aWZpZXIsIGhhbmRsZXMgcmVzdGFydCBmdW5jdGlvbmFsaXR5CisgKi8KK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcG11X3Jlc3RhcnRfaGFuZGxlciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHBtdV9yZXN0YXJ0X25vdGlmeSwKKwkucHJpb3JpdHkgPSAxMjgsCit9OworCitzdGF0aWMgaW50IGV4eW5vc19wbXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXBtdV9iYXNlX2FkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIocG11X2Jhc2VfYWRkcikpCisJCXJldHVybiBQVFJfRVJSKHBtdV9iYXNlX2FkZHIpOworCisJcG11X2NvbnRleHQgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKKwkJCXNpemVvZihzdHJ1Y3QgZXh5bm9zX3BtdV9jb250ZXh0KSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghcG11X2NvbnRleHQpIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5LlxuIik7CisJCXJldHVybiAtRU5PTUVNOwogCX0KKwlwbXVfY29udGV4dC0+ZGV2ID0gZGV2OwogCisJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKGV4eW5vc19wbXVfb2ZfZGV2aWNlX2lkcywgZGV2LT5vZl9ub2RlKTsKKworCXBtdV9jb250ZXh0LT5wbXVfZGF0YSA9IG1hdGNoLT5kYXRhOworCisJaWYgKHBtdV9jb250ZXh0LT5wbXVfZGF0YS0+cG11X2luaXQpCisJCXBtdV9jb250ZXh0LT5wbXVfZGF0YS0+cG11X2luaXQoKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBtdV9jb250ZXh0KTsKKworCXJldCA9IHJlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcigmcG11X3Jlc3RhcnRfaGFuZGxlcik7CisJaWYgKHJldCkKKwkJZGV2X3dhcm4oZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgcmVzdGFydCBoYW5kbGVyIGVycj0lZFxuIiwgcmV0KTsKKworCWRldl9kYmcoZGV2LCAiRXh5bm9zIFBNVSBEcml2ZXIgcHJvYmUgZG9uZVxuIik7CiAJcmV0dXJuIDA7CiB9Ci1hcmNoX2luaXRjYWxsKGV4eW5vc19wbXVfaW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGV4eW5vc19wbXVfZHJpdmVyID0geworCS5kcml2ZXIgID0geworCQkubmFtZSAgID0gImV4eW5vcy1wbXUiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gZXh5bm9zX3BtdV9vZl9kZXZpY2VfaWRzLAorCX0sCisJLnByb2JlID0gZXh5bm9zX3BtdV9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGV4eW5vc19wbXVfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmV4eW5vc19wbXVfZHJpdmVyKTsKKworfQorcG9zdGNvcmVfaW5pdGNhbGwoZXh5bm9zX3BtdV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3JlZ3MtcG11LmggYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9yZWdzLXBtdS5oCmluZGV4IDk2YTE1NjkuLmI1ZjQ0MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3JlZ3MtcG11LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvcmVncy1wbXUuaApAQCAtMTksOCArMTksMjQgQEAKICNkZWZpbmUgUzVQX0NFTlRSQUxfU0VRX09QVElPTgkJCTB4MDIwOAogCiAjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkkwCQkJKDEgPDwgMTYpCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkkxCQkJKDEgPDwgMTcpCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkkyCQkJKDEgPDwgMTkpCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkkzCQkJKDEgPDwgMjApCiAjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkUwCQkJKDEgPDwgMjQpCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkUxCQkJKDEgPDwgMjUpCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkUyCQkJKDEgPDwgMjcpCisjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkUzCQkJKDEgPDwgMjgpCiAKKyNkZWZpbmUgUzVQX1VTRV9TVEFOREJZX1dGSV9BTEwgXAorCShTNVBfVVNFX1NUQU5EQllfV0ZJMCB8IFM1UF9VU0VfU1RBTkRCWV9XRkkxIHwgXAorCSBTNVBfVVNFX1NUQU5EQllfV0ZJMiB8IFM1UF9VU0VfU1RBTkRCWV9XRkkzIHwgXAorCSBTNVBfVVNFX1NUQU5EQllfV0ZFMCB8IFM1UF9VU0VfU1RBTkRCWV9XRkUxIHwgXAorCSBTNVBfVVNFX1NUQU5EQllfV0ZFMiB8IFM1UF9VU0VfU1RBTkRCWV9XRkUzKQorCisjZGVmaW5lIFM1UF9VU0VfREVMQVlFRF9SRVNFVF9BU1NFUlRJT04JCUJJVCgxMikKKworI2RlZmluZSBFWFlOT1NfQ09SRV9QT19SRVNFVChuKQkJCSgoMSA8PCA0KSA8PCBuKQorI2RlZmluZSBFWFlOT1NfV0FLRVVQX0ZST01fTE9XUFdSCQkoMSA8PCAyOCkKICNkZWZpbmUgRVhZTk9TX1NXUkVTRVQJCQkJMHgwNDAwCiAjZGVmaW5lIEVYWU5PUzU0NDBfU1dSRVNFVAkJCTB4MDBDNAogCkBAIC0zNSw2ICs1MSw3IEBACiAjZGVmaW5lIFM1UF9JTkZPUk03CQkJCTB4MDgxQwogI2RlZmluZSBTNVBfUE1VX1NQQVJFMwkJCQkweDA5MEMKIAorI2RlZmluZSBFWFlOT1NfSVJPTV9EQVRBMgkJCTB4MDk4OAogI2RlZmluZSBTNVBfQVJNX0NPUkUwX0xPV1BXUgkJCTB4MTAwMAogI2RlZmluZSBTNVBfRElTX0lSUV9DT1JFMAkJCTB4MTAwNAogI2RlZmluZSBTNVBfRElTX0lSUV9DRU5UUkFMMAkJCTB4MTAwOApAQCAtMTA2LDYgKzEyMyw4IEBACiAJCQkoRVhZTk9TX0FSTV9DT1JFMF9DT05GSUdVUkFUSU9OICsgKDB4ODAgKiAoX25yKSkpCiAjZGVmaW5lIEVYWU5PU19BUk1fQ09SRV9TVEFUVVMoX25yKQkJXAogCQkJKEVYWU5PU19BUk1fQ09SRV9DT05GSUdVUkFUSU9OKF9ucikgKyAweDQpCisjZGVmaW5lIEVYWU5PU19BUk1fQ09SRV9PUFRJT04oX25yKQkJXAorCQkJKEVYWU5PU19BUk1fQ09SRV9DT05GSUdVUkFUSU9OKF9ucikgKyAweDgpCiAKICNkZWZpbmUgRVhZTk9TX0FSTV9DT01NT05fQ09ORklHVVJBVElPTgkJMHgyNTAwCiAjZGVmaW5lIEVYWU5PU19DT01NT05fQ09ORklHVVJBVElPTihfbnIpCVwKQEAgLTExNSw2ICsxMzQsMzEgQEAKICNkZWZpbmUgRVhZTk9TX0NPTU1PTl9PUFRJT04oX25yKQkJXAogCQkJKEVYWU5PU19DT01NT05fQ09ORklHVVJBVElPTihfbnIpICsgMHg4KQogCisjZGVmaW5lIEVYWU5PU19DT1JFX0xPQ0FMX1BXUl9FTgkJMHgzCisKKyNkZWZpbmUgRVhZTk9TX0FSTV9DT01NT05fU1RBVFVTCQkweDI1MDQKKyNkZWZpbmUgRVhZTk9TX0NPTU1PTl9PUFRJT04oX25yKQkJXAorCQkJKEVYWU5PU19DT01NT05fQ09ORklHVVJBVElPTihfbnIpICsgMHg4KQorCisjZGVmaW5lIEVYWU5PU19BUk1fTDJfQ09ORklHVVJBVElPTgkJMHgyNjAwCisjZGVmaW5lIEVYWU5PU19MMl9DT05GSUdVUkFUSU9OKF9ucikJCVwKKwkJCShFWFlOT1NfQVJNX0wyX0NPTkZJR1VSQVRJT04gKyAoKF9ucikgKiAweDgwKSkKKyNkZWZpbmUgRVhZTk9TX0wyX1NUQVRVUyhfbnIpCQkJXAorCQkJKEVYWU5PU19MMl9DT05GSUdVUkFUSU9OKF9ucikgKyAweDQpCisjZGVmaW5lIEVYWU5PU19MMl9PUFRJT04oX25yKQkJCVwKKwkJCShFWFlOT1NfTDJfQ09ORklHVVJBVElPTihfbnIpICsgMHg4KQorI2RlZmluZSBFWFlOT1NfTDJfQ09NTU9OX1BXUl9FTgkJCTB4MworCisjZGVmaW5lIEVYWU5PU19BUk1fQ09SRV9YX1NUQVRVU19PRkZTRVQJCTB4NAorCisjZGVmaW5lIEVYWU5PUzVfQVBMTF9TWVNDTEtfQ09ORklHVVJBVElPTgkweDJBMDAKKyNkZWZpbmUgRVhZTk9TNV9BUExMX1NZU0NMS19TVEFUVVMJCTB4MkEwNAorCisjZGVmaW5lIEVYWU5PUzVfQVJNX0wyX09QVElPTgkJCTB4MjYwOAorI2RlZmluZSBFWFlOT1M1X1VTRV9SRVRFTlRJT04JCQlCSVQoNCkKKworI2RlZmluZSBFWFlOT1M1X0wyUlNURElTQUJMRV9WQUxVRQkJQklUKDMpCisKICNkZWZpbmUgUzVQX1BBRF9SRVRfTUFVRElPX09QVElPTgkJMHgzMDI4CiAjZGVmaW5lIFM1UF9QQURfUkVUX0dQSU9fT1BUSU9OCQkJMHgzMTA4CiAjZGVmaW5lIFM1UF9QQURfUkVUX1VBUlRfT1BUSU9OCQkJMHgzMTI4CkBAIC0xMjMsNyArMTY3LDE5IEBACiAjZGVmaW5lIFM1UF9QQURfUkVUX0VCSUFfT1BUSU9OCQkJMHgzMTg4CiAjZGVmaW5lIFM1UF9QQURfUkVUX0VCSUJfT1BUSU9OCQkJMHgzMUE4CiAKKyNkZWZpbmUgUzVQX1BTX0hPTERfQ09OVFJPTAkJCTB4MzMwQworI2RlZmluZSBTNVBfUFNfSE9MRF9FTgkJCQkoMSA8PCAzMSkKKyNkZWZpbmUgUzVQX1BTX0hPTERfT1VUUFVUX0hJR0gJCQkoMyA8PCA4KQorCisjZGVmaW5lIFM1UF9DQU1fT1BUSU9OCQkJCTB4M0MwOAorI2RlZmluZSBTNVBfTUZDX09QVElPTgkJCQkweDNDNDgKKyNkZWZpbmUgUzVQX0czRF9PUFRJT04JCQkJMHgzQzY4CisjZGVmaW5lIFM1UF9MQ0QwX09QVElPTgkJCQkweDNDODgKKyNkZWZpbmUgUzVQX0xDRDFfT1BUSU9OCQkJCTB4M0NBOAorI2RlZmluZSBTNVBfSVNQX09QVElPTgkJCQlTNVBfTENEMV9PUFRJT04KKwogI2RlZmluZSBTNVBfQ09SRV9MT0NBTF9QV1JfRU4JCQkweDMKKyNkZWZpbmUgUzVQX0NPUkVfV0FLRVVQX0ZST01fTE9DQUxfQ0ZHCQkoMHgzIDw8IDgpCiAKIC8qIE9ubHkgZm9yIEVYWU5PUzQyMTAgKi8KICNkZWZpbmUgUzVQX0NNVV9DTEtTVE9QX0xDRDFfTE9XUFdSCTB4MTE1NApAQCAtMTgyLDExICsyMzgsMTE2IEBACiAjZGVmaW5lIFM1UF9ESVNfSVJRX0NPUkUzCQkJMHgxMDM0CiAjZGVmaW5lIFM1UF9ESVNfSVJRX0NFTlRSQUwzCQkJMHgxMDM4CiAKKy8qIE9ubHkgZm9yIEVYWU5PUzNYWFggKi8KKyNkZWZpbmUgRVhZTk9TM19BUk1fQ09SRTBfU1lTX1BXUl9SRUcJCQkweDEwMDAKKyNkZWZpbmUgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMF9MT0NBTF9TWVNfUFdSX1JFRwkweDEwMDQKKyNkZWZpbmUgRVhZTk9TM19ESVNfSVJRX0FSTV9DT1JFMF9DRU5UUkFMX1NZU19QV1JfUkVHCTB4MTAwOAorI2RlZmluZSBFWFlOT1MzX0FSTV9DT1JFMV9TWVNfUFdSX1JFRwkJCTB4MTAxMAorI2RlZmluZSBFWFlOT1MzX0RJU19JUlFfQVJNX0NPUkUxX0xPQ0FMX1NZU19QV1JfUkVHCTB4MTAxNAorI2RlZmluZSBFWFlOT1MzX0RJU19JUlFfQVJNX0NPUkUxX0NFTlRSQUxfU1lTX1BXUl9SRUcJMHgxMDE4CisjZGVmaW5lIEVYWU5PUzNfSVNQX0FSTV9TWVNfUFdSX1JFRwkJCTB4MTA1MAorI2RlZmluZSBFWFlOT1MzX0RJU19JUlFfSVNQX0FSTV9MT0NBTF9TWVNfUFdSX1JFRwkweDEwNTQKKyNkZWZpbmUgRVhZTk9TM19ESVNfSVJRX0lTUF9BUk1fQ0VOVFJBTF9TWVNfUFdSX1JFRwkweDEwNTgKKyNkZWZpbmUgRVhZTk9TM19BUk1fQ09NTU9OX1NZU19QV1JfUkVHCQkJMHgxMDgwCisjZGVmaW5lIEVYWU5PUzNfQVJNX0wyX1NZU19QV1JfUkVHCQkJMHgxMEMwCisjZGVmaW5lIEVYWU5PUzNfQ01VX0FDTEtTVE9QX1NZU19QV1JfUkVHCQkweDExMDAKKyNkZWZpbmUgRVhZTk9TM19DTVVfU0NMS1NUT1BfU1lTX1BXUl9SRUcJCTB4MTEwNAorI2RlZmluZSBFWFlOT1MzX0NNVV9SRVNFVF9TWVNfUFdSX1JFRwkJCTB4MTEwQworI2RlZmluZSBFWFlOT1MzX0NNVV9BQ0xLU1RPUF9DT1JFQkxLX1NZU19QV1JfUkVHCTB4MTExMAorI2RlZmluZSBFWFlOT1MzX0NNVV9TQ0xLU1RPUF9DT1JFQkxLX1NZU19QV1JfUkVHCTB4MTExNAorI2RlZmluZSBFWFlOT1MzX0NNVV9SRVNFVF9DT1JFQkxLX1NZU19QV1JfUkVHCQkweDExMUMKKyNkZWZpbmUgRVhZTk9TM19BUExMX1NZU0NMS19TWVNfUFdSX1JFRwkJCTB4MTEyMAorI2RlZmluZSBFWFlOT1MzX01QTExfU1lTQ0xLX1NZU19QV1JfUkVHCQkJMHgxMTI0CisjZGVmaW5lIEVYWU5PUzNfVlBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDExMjgKKyNkZWZpbmUgRVhZTk9TM19FUExMX1NZU0NMS19TWVNfUFdSX1JFRwkJCTB4MTEyQworI2RlZmluZSBFWFlOT1MzX01QTExVU0VSX1NZU0NMS19TWVNfUFdSX1JFRwkJMHgxMTMwCisjZGVmaW5lIEVYWU5PUzNfQlBMTFVTRVJfU1lTQ0xLX1NZU19QV1JfUkVHCQkweDExMzQKKyNkZWZpbmUgRVhZTk9TM19FUExMVVNFUl9TWVNDTEtfU1lTX1BXUl9SRUcJCTB4MTEzOAorI2RlZmluZSBFWFlOT1MzX0NNVV9DTEtTVE9QX0NBTV9TWVNfUFdSX1JFRwkJMHgxMTQwCisjZGVmaW5lIEVYWU5PUzNfQ01VX0NMS1NUT1BfTUZDX1NZU19QV1JfUkVHCQkweDExNDgKKyNkZWZpbmUgRVhZTk9TM19DTVVfQ0xLU1RPUF9HM0RfU1lTX1BXUl9SRUcJCTB4MTE0QworI2RlZmluZSBFWFlOT1MzX0NNVV9DTEtTVE9QX0xDRDBfU1lTX1BXUl9SRUcJCTB4MTE1MAorI2RlZmluZSBFWFlOT1MzX0NNVV9DTEtTVE9QX0lTUF9TWVNfUFdSX1JFRwkJMHgxMTU0CisjZGVmaW5lIEVYWU5PUzNfQ01VX0NMS1NUT1BfTUFVRElPX1NZU19QV1JfUkVHCQkweDExNTgKKyNkZWZpbmUgRVhZTk9TM19DTVVfUkVTRVRfQ0FNX1NZU19QV1JfUkVHCQkweDExNjAKKyNkZWZpbmUgRVhZTk9TM19DTVVfUkVTRVRfTUZDX1NZU19QV1JfUkVHCQkweDExNjgKKyNkZWZpbmUgRVhZTk9TM19DTVVfUkVTRVRfRzNEX1NZU19QV1JfUkVHCQkweDExNkMKKyNkZWZpbmUgRVhZTk9TM19DTVVfUkVTRVRfTENEMF9TWVNfUFdSX1JFRwkJMHgxMTcwCisjZGVmaW5lIEVYWU5PUzNfQ01VX1JFU0VUX0lTUF9TWVNfUFdSX1JFRwkJMHgxMTc0CisjZGVmaW5lIEVYWU5PUzNfQ01VX1JFU0VUX01BVURJT19TWVNfUFdSX1JFRwkJMHgxMTc4CisjZGVmaW5lIEVYWU5PUzNfVE9QX0JVU19TWVNfUFdSX1JFRwkJCTB4MTE4MAorI2RlZmluZSBFWFlOT1MzX1RPUF9SRVRFTlRJT05fU1lTX1BXUl9SRUcJCTB4MTE4NAorI2RlZmluZSBFWFlOT1MzX1RPUF9QV1JfU1lTX1BXUl9SRUcJCQkweDExODgKKyNkZWZpbmUgRVhZTk9TM19UT1BfQlVTX0NPUkVCTEtfU1lTX1BXUl9SRUcJCTB4MTE5MAorI2RlZmluZSBFWFlOT1MzX1RPUF9SRVRFTlRJT05fQ09SRUJMS19TWVNfUFdSX1JFRwkweDExOTQKKyNkZWZpbmUgRVhZTk9TM19UT1BfUFdSX0NPUkVCTEtfU1lTX1BXUl9SRUcJCTB4MTE5OAorI2RlZmluZSBFWFlOT1MzX0xPR0lDX1JFU0VUX1NZU19QV1JfUkVHCQkJMHgxMUEwCisjZGVmaW5lIEVYWU5PUzNfT1NDQ0xLX0dBVEVfU1lTX1BXUl9SRUcJCQkweDExQTQKKyNkZWZpbmUgRVhZTk9TM19MT0dJQ19SRVNFVF9DT1JFQkxLX1NZU19QV1JfUkVHCQkweDExQjAKKyNkZWZpbmUgRVhZTk9TM19PU0NDTEtfR0FURV9DT1JFQkxLX1NZU19QV1JfUkVHCQkweDExQjQKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX0RSQU1fU1lTX1BXUl9SRUcJCTB4MTIwMAorI2RlZmluZSBFWFlOT1MzX1BBRF9SRVRFTlRJT05fTUFVRElPX1NZU19QV1JfUkVHCTB4MTIwNAorI2RlZmluZSBFWFlOT1MzX1BBRF9SRVRFTlRJT05fU1BJX1NZU19QV1JfUkVHCQkweDEyMDgKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX01NQzJfU1lTX1BXUl9SRUcJCTB4MTIxOAorI2RlZmluZSBFWFlOT1MzX1BBRF9SRVRFTlRJT05fR1BJT19TWVNfUFdSX1JFRwkJMHgxMjIwCisjZGVmaW5lIEVYWU5PUzNfUEFEX1JFVEVOVElPTl9VQVJUX1NZU19QV1JfUkVHCQkweDEyMjQKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX01NQzBfU1lTX1BXUl9SRUcJCTB4MTIyOAorI2RlZmluZSBFWFlOT1MzX1BBRF9SRVRFTlRJT05fTU1DMV9TWVNfUFdSX1JFRwkJMHgxMjJDCisjZGVmaW5lIEVYWU5PUzNfUEFEX1JFVEVOVElPTl9FQklBX1NZU19QV1JfUkVHCQkweDEyMzAKKyNkZWZpbmUgRVhZTk9TM19QQURfUkVURU5USU9OX0VCSUJfU1lTX1BXUl9SRUcJCTB4MTIzNAorI2RlZmluZSBFWFlOT1MzX1BBRF9SRVRFTlRJT05fSlRBR19TWVNfUFdSX1JFRwkJMHgxMjM4CisjZGVmaW5lIEVYWU5PUzNfUEFEX0lTT0xBVElPTl9TWVNfUFdSX1JFRwkJMHgxMjQwCisjZGVmaW5lIEVYWU5PUzNfUEFEX0FMVl9TRUxfU1lTX1BXUl9SRUcJCQkweDEyNjAKKyNkZWZpbmUgRVhZTk9TM19YVVNCWFRJX1NZU19QV1JfUkVHCQkJMHgxMjgwCisjZGVmaW5lIEVYWU5PUzNfWFhUSV9TWVNfUFdSX1JFRwkJCTB4MTI4NAorI2RlZmluZSBFWFlOT1MzX0VYVF9SRUdVTEFUT1JfU1lTX1BXUl9SRUcJCTB4MTJDMAorI2RlZmluZSBFWFlOT1MzX0VYVF9SRUdVTEFUT1JfQ09SRUJMS19TWVNfUFdSX1JFRwkweDEyQzQKKyNkZWZpbmUgRVhZTk9TM19HUElPX01PREVfU1lTX1BXUl9SRUcJCQkweDEzMDAKKyNkZWZpbmUgRVhZTk9TM19HUElPX01PREVfTUFVRElPX1NZU19QV1JfUkVHCQkweDEzNDAKKyNkZWZpbmUgRVhZTk9TM19UT1BfQVNCX1JFU0VUX1NZU19QV1JfUkVHCQkweDEzNDQKKyNkZWZpbmUgRVhZTk9TM19UT1BfQVNCX0lTT0xBVElPTl9TWVNfUFdSX1JFRwkJMHgxMzQ4CisjZGVmaW5lIEVYWU5PUzNfVE9QX0FTQl9SRVNFVF9DT1JFQkxLX1NZU19QV1JfUkVHCTB4MTM1MAorI2RlZmluZSBFWFlOT1MzX1RPUF9BU0JfSVNPTEFUSU9OX0NPUkVCTEtfU1lTX1BXUl9SRUcJMHgxMzU0CisjZGVmaW5lIEVYWU5PUzNfQ0FNX1NZU19QV1JfUkVHCQkJCTB4MTM4MAorI2RlZmluZSBFWFlOT1MzX01GQ19TWVNfUFdSX1JFRwkJCQkweDEzODgKKyNkZWZpbmUgRVhZTk9TM19HM0RfU1lTX1BXUl9SRUcJCQkJMHgxMzhDCisjZGVmaW5lIEVYWU5PUzNfTENEMF9TWVNfUFdSX1JFRwkJCTB4MTM5MAorI2RlZmluZSBFWFlOT1MzX0lTUF9TWVNfUFdSX1JFRwkJCQkweDEzOTQKKyNkZWZpbmUgRVhZTk9TM19NQVVESU9fU1lTX1BXUl9SRUcJCQkweDEzOTgKKyNkZWZpbmUgRVhZTk9TM19EUkFNX0ZSRVFfRE9XTl9TWVNfUFdSX1JFRwkJMHgxM0IwCisjZGVmaW5lIEVYWU5PUzNfRERSUEhZX0RMTE9GRl9TWVNfUFdSX1JFRwkJMHgxM0I0CisjZGVmaW5lIEVYWU5PUzNfQ01VX1NZU0NMS19JU1BfU1lTX1BXUl9SRUcJCTB4MTNCOAorI2RlZmluZSBFWFlOT1MzX0xQRERSX1BIWV9ETExfTE9DS19TWVNfUFdSX1JFRwkJMHgxM0MwCisjZGVmaW5lIEVYWU5PUzNfQlBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDEzQzQKKyNkZWZpbmUgRVhZTk9TM19VUExMX1NZU0NMS19TWVNfUFdSX1JFRwkJCTB4MTNDOAorCisjZGVmaW5lIEVYWU5PUzNfQVJNX0NPUkUwX09QVElPTgkJCTB4MjAwOAorI2RlZmluZSBFWFlOT1MzX0FSTV9DT1JFX09QVElPTihfbnIpCVwKKwkJCShFWFlOT1MzX0FSTV9DT1JFMF9PUFRJT04gKyAoKF9ucikgKiAweDgwKSkKKworI2RlZmluZSBFWFlOT1MzX0FSTV9DT01NT05fT1BUSU9OCQkJMHgyNDA4CisjZGVmaW5lIEVYWU5PUzNfVE9QX1BXUl9PUFRJT04JCQkJMHgyQzQ4CisjZGVmaW5lIEVYWU5PUzNfQ09SRV9UT1BfUFdSX09QVElPTgkJCTB4MkNBOAorI2RlZmluZSBFWFlOT1MzX1hVU0JYVElfRFVSQVRJT04JCQkweDM0MUMKKyNkZWZpbmUgRVhZTk9TM19YWFRJX0RVUkFUSU9OCQkJCTB4MzQzQworI2RlZmluZSBFWFlOT1MzX0VYVF9SRUdVTEFUT1JfRFVSQVRJT04JCQkweDM2MUMKKyNkZWZpbmUgRVhZTk9TM19FWFRfUkVHVUxBVE9SX0NPUkVCTEtfRFVSQVRJT04JCTB4MzYzQworI2RlZmluZSBYVVNCWFRJX0RVUkFUSU9OCQkJCTB4MDAwMDBCQjgKKyNkZWZpbmUgWFhUSV9EVVJBVElPTgkJCQkJWFVTQlhUSV9EVVJBVElPTgorI2RlZmluZSBFWFRfUkVHVUxBVE9SX0RVUkFUSU9OCQkJCTB4MDAwMDFENEMKKyNkZWZpbmUgRVhUX1JFR1VMQVRPUl9DT1JFQkxLX0RVUkFUSU9OCQkJRVhUX1JFR1VMQVRPUl9EVVJBVElPTgorCisvKiBmb3IgWFhYX09QVElPTiAqLworI2RlZmluZSBFWFlOT1MzX09QVElPTl9VU0VfU0NfQ09VTlRFUgkJCSgxIDw8IDApCisjZGVmaW5lIEVYWU5PUzNfT1BUSU9OX1VTRV9TQ19GRUVEQkFDSwkJCSgxIDw8IDEpCisjZGVmaW5lIEVYWU5PUzNfT1BUSU9OX1NLSVBfREVBQ1RJVkFURV9BQ0VBQ1BfSU5fUFdETgkoMSA8PCA3KQorCiAvKiBGb3IgRVhZTk9TNSAqLwogCiAjZGVmaW5lIEVYWU5PUzVfQVVUT19XRFRSRVNFVF9ESVNBQkxFCQkJCTB4MDQwOAogI2RlZmluZSBFWFlOT1M1X01BU0tfV0RUUkVTRVRfUkVRVUVTVAkJCQkweDA0MEMKIAorI2RlZmluZSBFWFlOT1M1X1VTRV9SRVRFTlRJT04JCQlCSVQoNCkKICNkZWZpbmUgRVhZTk9TNV9TWVNfV0RUUkVTRVQJCQkJCSgxIDw8IDIwKQogCiAjZGVmaW5lIEVYWU5PUzVfQVJNX0NPUkUwX1NZU19QV1JfUkVHCQkJCTB4MTAwMApAQCAtMzI2LDQgKzQ4NywyMDQgQEAKIAkJICsgTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDApKTsKIH0KIAorLyogT25seSBmb3IgRVhZTk9TNTQyMCAqLworI2RlZmluZSBFWFlOT1M1NDIwX0lTUF9BUk1fT1BUSU9OCQkJCTB4MjQ4OAorI2RlZmluZSBFWFlOT1M1NDIwX0wyUlNURElTQUJMRV9WQUxVRQkJCQlCSVQoMykKKworI2RlZmluZSBFWFlOT1M1NDIwX0xQSV9NQVNLCQkJCQkweDAwMDQKKyNkZWZpbmUgRVhZTk9TNTQyMF9MUElfTUFTSzEJCQkJCTB4MDAwOAorI2RlZmluZSBFWFlOT1M1NDIwX1VGUwkJCQkJCUJJVCg4KQorI2RlZmluZSBFWFlOT1M1NDIwX0FUQl9LRkMJCQkJCUJJVCgxMykKKyNkZWZpbmUgRVhZTk9TNTQyMF9BVEJfSVNQX0FSTQkJCQkJQklUKDE5KQorI2RlZmluZSBFWFlOT1M1NDIwX0VNVUxBVElPTgkJCQkJQklUKDMxKQorI2RlZmluZSBBVEJfSVNQX0FSTQkJCQkJCUJJVCgxMikKKyNkZWZpbmUgQVRCX0tGQwkJCQkJCQlCSVQoMTMpCisjZGVmaW5lIEFUQl9OT0MJCQkJCQkJQklUKDE0KQorCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX0lOVFJfU1BSRUFEX0VOQUJMRQkJCTB4MDEwMAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9JTlRSX1NQUkVBRF9VU0VfU1RBTkRCWVdGSQkJMHgwMTA0CisjZGVmaW5lIEVYWU5PUzU0MjBfVVBfU0NIRURVTEVSCQkJCQkweDAxMjAKKyNkZWZpbmUgU1BSRUFEX0VOQUJMRQkJCQkJCTB4RgorI2RlZmluZSBTUFJFQURfVVNFX1NUQU5EV0ZJCQkJCQkweEYKKworI2RlZmluZSBFWFlOT1M1NDIwX0JCX0NPTjEJCQkJCTB4MDc4NAorI2RlZmluZSBFWFlOT1M1NDIwX0JCX1NFTF9FTgkJCQkJQklUKDMxKQorI2RlZmluZSBFWFlOT1M1NDIwX0JCX1BNT1NfRU4JCQkJCUJJVCg3KQorI2RlZmluZSBFWFlOT1M1NDIwX0JCXzEzMDBYCQkJCQkwWEYKKworI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT1JFMl9TWVNfUFdSX1JFRwkJCTB4MTAyMAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU19JUlFfQVJNX0NPUkUyX0xPQ0FMX1NZU19QV1JfUkVHCQkweDEwMjQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0FSTV9DT1JFMl9DRU5UUkFMX1NZU19QV1JfUkVHCTB4MTAyOAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT1JFM19TWVNfUFdSX1JFRwkJCTB4MTAzMAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU19JUlFfQVJNX0NPUkUzX0xPQ0FMX1NZU19QV1JfUkVHCQkweDEwMzQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0FSTV9DT1JFM19DRU5UUkFMX1NZU19QV1JfUkVHCTB4MTAzOAorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19DT1JFMF9TWVNfUFdSX1JFRwkJCTB4MTA0MAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUwX0xPQ0FMX1NZU19QV1JfUkVHCQkweDEwNDQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMF9DRU5UUkFMX1NZU19QV1JfUkVHCTB4MTA0OAorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19DT1JFMV9TWVNfUFdSX1JFRwkJCTB4MTA1MAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUxX0xPQ0FMX1NZU19QV1JfUkVHCQkweDEwNTQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMV9DRU5UUkFMX1NZU19QV1JfUkVHCTB4MTA1OAorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19DT1JFMl9TWVNfUFdSX1JFRwkJCTB4MTA2MAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUyX0xPQ0FMX1NZU19QV1JfUkVHCQkweDEwNjQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFMl9DRU5UUkFMX1NZU19QV1JfUkVHCTB4MTA2OAorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19DT1JFM19TWVNfUFdSX1JFRwkJCTB4MTA3MAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU19JUlFfS0ZDX0NPUkUzX0xPQ0FMX1NZU19QV1JfUkVHCQkweDEwNzQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0tGQ19DT1JFM19DRU5UUkFMX1NZU19QV1JfUkVHCTB4MTA3OAorI2RlZmluZSBFWFlOT1M1NDIwX0lTUF9BUk1fU1lTX1BXUl9SRUcJCQkJMHgxMDkwCisjZGVmaW5lIEVYWU5PUzU0MjBfRElTX0lSUV9JU1BfQVJNX0xPQ0FMX1NZU19QV1JfUkVHCQkweDEwOTQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNfSVJRX0lTUF9BUk1fQ0VOVFJBTF9TWVNfUFdSX1JFRwkJMHgxMDk4CisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX0NPTU1PTl9TWVNfUFdSX1JFRwkJCTB4MTBBMAorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19DT01NT05fU1lTX1BXUl9SRUcJCQkweDEwQjAKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfTDJfU1lTX1BXUl9SRUcJCQkJMHgxMEQwCisjZGVmaW5lIEVYWU5PUzU0MjBfRFBMTF9TWVNDTEtfU1lTX1BXUl9SRUcJCQkweDExNTgKKyNkZWZpbmUgRVhZTk9TNTQyMF9JUExMX1NZU0NMS19TWVNfUFdSX1JFRwkJCTB4MTE1QworI2RlZmluZSBFWFlOT1M1NDIwX0tQTExfU1lTQ0xLX1NZU19QV1JfUkVHCQkJMHgxMTYwCisjZGVmaW5lIEVYWU5PUzU0MjBfUlBMTF9TWVNDTEtfU1lTX1BXUl9SRUcgICAgICAgICAgICAgICAgICAgICAgMHgxMTc0CisjZGVmaW5lIEVYWU5PUzU0MjBfU1BMTF9TWVNDTEtfU1lTX1BXUl9SRUcgICAgICAgICAgICAgICAgICAgICAgMHgxMTc4CisjZGVmaW5lIEVYWU5PUzU0MjBfSU5UUkFNX01FTV9TWVNfUFdSX1JFRyAgICAgICAgICAgICAgICAgICAgICAgMHgxMUI4CisjZGVmaW5lIEVYWU5PUzU0MjBfSU5UUk9NX01FTV9TWVNfUFdSX1JFRyAgICAgICAgICAgICAgICAgICAgICAgMHgxMUJDCisjZGVmaW5lIEVYWU5PUzU0MjBfT05FTkFORFhMX01FTV9TWVNfUFdSCQkJMHgxMUMwCisjZGVmaW5lIEVYWU5PUzU0MjBfVVNCREVWX01FTV9TWVNfUFdSCQkJCTB4MTFDQworI2RlZmluZSBFWFlOT1M1NDIwX1VTQkRFVjFfTUVNX1NZU19QV1IJCQkJMHgxMUQwCisjZGVmaW5lIEVYWU5PUzU0MjBfU0RNTUNfTUVNX1NZU19QV1IJCQkJMHgxMUQ0CisjZGVmaW5lIEVYWU5PUzU0MjBfQ1NTWVNfTUVNX1NZU19QV1IJCQkJMHgxMUQ4CisjZGVmaW5lIEVYWU5PUzU0MjBfU0VDU1NfTUVNX1NZU19QV1IJCQkJMHgxMURDCisjZGVmaW5lIEVYWU5PUzU0MjBfUk9UQVRPUl9NRU1fU1lTX1BXUgkJCQkweDExRTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9JTlRSQU1fTUVNX1NZU19QV1IJCQkJMHgxMUU0CisjZGVmaW5lIEVYWU5PUzU0MjBfSU5UUk9NX01FTV9TWVNfUFdSCQkJCTB4MTFFOAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fSlRBR19TWVNfUFdSX1JFRwkJMHgxMjA4CisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9EUkFNX1NZU19QV1JfUkVHCQkweDEyMTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX1VBUlRfU1lTX1BXUl9SRUcJCTB4MTIxNAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fTU1DMF9TWVNfUFdSX1JFRwkJMHgxMjE4CisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9NTUMxX1NZU19QV1JfUkVHCQkweDEyMUMKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX01NQzJfU1lTX1BXUl9SRUcJCTB4MTIyMAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fSFNJX1NZU19QV1JfUkVHCQkweDEyMjQKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVURU5USU9OX0VCSUFfU1lTX1BXUl9SRUcJCTB4MTIyOAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fRUJJQl9TWVNfUFdSX1JFRwkJMHgxMjJDCisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVEVOVElPTl9TUElfU1lTX1BXUl9SRUcJCTB4MTIzMAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRFTlRJT05fRFJBTV9DT1JFQkxLX1NZU19QV1JfUkVHCTB4MTIzNAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU1AxX1NZU19QV1JfUkVHCQkJCTB4MTQxMAorI2RlZmluZSBFWFlOT1M1NDIwX01BVV9TWVNfUFdSX1JFRwkJCQkweDE0MTQKKyNkZWZpbmUgRVhZTk9TNTQyMF9HMkRfU1lTX1BXUl9SRUcJCQkJMHgxNDE4CisjZGVmaW5lIEVYWU5PUzU0MjBfTVNDX1NZU19QV1JfUkVHCQkJCTB4MTQxQworI2RlZmluZSBFWFlOT1M1NDIwX0ZTWVNfU1lTX1BXUl9SRUcJCQkJMHgxNDIwCisjZGVmaW5lIEVYWU5PUzU0MjBfRlNZUzJfU1lTX1BXUl9SRUcJCQkJMHgxNDI0CisjZGVmaW5lIEVYWU5PUzU0MjBfUFNHRU5fU1lTX1BXUl9SRUcJCQkJMHgxNDI4CisjZGVmaW5lIEVYWU5PUzU0MjBfUEVSSUNfU1lTX1BXUl9SRUcJCQkJMHgxNDJDCisjZGVmaW5lIEVYWU5PUzU0MjBfV0NPUkVfU1lTX1BXUl9SRUcJCQkJMHgxNDMwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfRElTUDFfU1lTX1BXUl9SRUcJCTB4MTQ5MAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX01BVV9TWVNfUFdSX1JFRwkJCTB4MTQ5NAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0cyRF9TWVNfUFdSX1JFRwkJCTB4MTQ5OAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX01TQ19TWVNfUFdSX1JFRwkJCTB4MTQ5QworI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX0ZTWVNfU1lTX1BXUl9SRUcJCQkweDE0QTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9GU1lTMl9TWVNfUFdSX1JFRwkJMHgxNEE0CisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX0NMS1NUT1BfUFNHRU5fU1lTX1BXUl9SRUcJCTB4MTRBOAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9DTEtTVE9QX1BFUklDX1NZU19QV1JfUkVHCQkweDE0QUMKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfQ0xLU1RPUF9XQ09SRV9TWVNfUFdSX1JFRwkJMHgxNEIwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19UT1BQV1JfU1lTX1BXUl9SRUcJCTB4MTRCQworI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRElTUDFfU1lTX1BXUl9SRUcJCQkweDE0RDAKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX01BVV9TWVNfUFdSX1JFRwkJCTB4MTRENAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfRzJEX1NZU19QV1JfUkVHCQkJMHgxNEQ4CisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19NU0NfU1lTX1BXUl9SRUcJCQkweDE0REMKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0ZTWVNfU1lTX1BXUl9SRUcJCQkweDE0RTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX0ZTWVMyX1NZU19QV1JfUkVHCQkJMHgxNEU0CisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19QU0dFTl9TWVNfUFdSX1JFRwkJCTB4MTRFOAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9TWVNDTEtfUEVSSUNfU1lTX1BXUl9SRUcJCQkweDE0RUMKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfU1lTQ0xLX1dDT1JFX1NZU19QV1JfUkVHCQkJMHgxNEYwCisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1NZU0NMS19TWVNNRU1fVE9QUFdSX1NZU19QV1JfUkVHCQkweDE0RjQKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfUkVTRVRfRlNZUzJfU1lTX1BXUl9SRUcJCQkweDE1NzAKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfUkVTRVRfUFNHRU5fU1lTX1BXUl9SRUcJCQkweDE1NzQKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfUkVTRVRfUEVSSUNfU1lTX1BXUl9SRUcJCQkweDE1NzgKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfUkVTRVRfV0NPUkVfU1lTX1BXUl9SRUcJCQkweDE1N0MKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfUkVTRVRfRElTUDFfU1lTX1BXUl9SRUcJCQkweDE1OTAKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfUkVTRVRfTUFVX1NZU19QV1JfUkVHCQkJMHgxNTk0CisjZGVmaW5lIEVYWU5PUzU0MjBfQ01VX1JFU0VUX0cyRF9TWVNfUFdSX1JFRwkJCTB4MTU5OAorI2RlZmluZSBFWFlOT1M1NDIwX0NNVV9SRVNFVF9NU0NfU1lTX1BXUl9SRUcJCQkweDE1OUMKKyNkZWZpbmUgRVhZTk9TNTQyMF9DTVVfUkVTRVRfRlNZU19TWVNfUFdSX1JFRwkJCTB4MTVBMAorI2RlZmluZSBFWFlOT1M1NDIwX1NGUl9BWElfQ0dESVMxCQkJCTB4MTVFNAorI2RlZmluZSBFWFlOT1NfQVJNX0NPUkUyX0NPTkZJR1VSQVRJT04JCQkJMHgyMTAwCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX0NPUkUyX09QVElPTgkJCQkweDIxMDgKKyNkZWZpbmUgRVhZTk9TX0FSTV9DT1JFM19DT05GSUdVUkFUSU9OCQkJCTB4MjE4MAorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9DT1JFM19PUFRJT04JCQkJMHgyMTg4CisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX0NPTU1PTl9TVEFUVVMJCQkJMHgyNTA0CisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX0NPTU1PTl9PUFRJT04JCQkJMHgyNTA4CisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX0NPTU1PTl9TVEFUVVMJCQkJMHgyNTg0CisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX0NPTU1PTl9PUFRJT04JCQkJMHgyNTg4CisjZGVmaW5lIEVYWU5PUzU0MjBfTE9HSUNfUkVTRVRfRFVSQVRJT04zCQkJMHgyRDFDCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVUX0dQSU9fT1BUSU9OCQkJCTB4MzBDOAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRfVUFSVF9PUFRJT04JCQkJMHgzMEU4CisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVF9NTUNBX09QVElPTgkJCQkweDMxMDgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVUX01NQ0JfT1BUSU9OCQkJCTB4MzEyOAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRfTU1DQ19PUFRJT04JCQkJMHgzMTQ4CisjZGVmaW5lIEVYWU5PUzU0MjBfUEFEX1JFVF9IU0lfT1BUSU9OCQkJCTB4MzE2OAorI2RlZmluZSBFWFlOT1M1NDIwX1BBRF9SRVRfU1BJX09QVElPTgkJCQkweDMxQzgKKyNkZWZpbmUgRVhZTk9TNTQyMF9QQURfUkVUX0RSQU1fQ09SRUJMS19PUFRJT04JCQkweDMxRTgKKyNkZWZpbmUgRVhZTk9TX1BBRF9SRVRfRFJBTV9PUFRJT04JCQkJMHgzMDA4CisjZGVmaW5lIEVYWU5PU19QQURfUkVUX01BVURJT19PUFRJT04JCQkJMHgzMDI4CisjZGVmaW5lIEVYWU5PU19QQURfUkVUX0pUQUdfT1BUSU9OCQkJCTB4MzA0OAorI2RlZmluZSBFWFlOT1NfUEFEX1JFVF9HUElPX09QVElPTgkJCQkweDMxMDgKKyNkZWZpbmUgRVhZTk9TX1BBRF9SRVRfVUFSVF9PUFRJT04JCQkJMHgzMTI4CisjZGVmaW5lIEVYWU5PU19QQURfUkVUX01NQ0FfT1BUSU9OCQkJCTB4MzE0OAorI2RlZmluZSBFWFlOT1NfUEFEX1JFVF9NTUNCX09QVElPTgkJCQkweDMxNjgKKyNkZWZpbmUgRVhZTk9TX1BBRF9SRVRfRUJJQV9PUFRJT04JCQkJMHgzMTg4CisjZGVmaW5lIEVYWU5PU19QQURfUkVUX0VCSUJfT1BUSU9OCQkJCTB4MzFBOAorCisjZGVmaW5lIEVYWU5PU19QU19IT0xEX0NPTlRST0wJCQkJCTB4MzMwQworCisvKiBGb3IgU1lTX1BXUl9SRUcgKi8KKyNkZWZpbmUgRVhZTk9TX1NZU19QV1JfQ0ZHCQkJCQlCSVQoMCkKKworI2RlZmluZSBFWFlOT1M1NDIwX01GQ19DT05GSUdVUkFUSU9OCQkJCTB4NDA2MAorI2RlZmluZSBFWFlOT1M1NDIwX01GQ19TVEFUVVMJCQkJCTB4NDA2NAorI2RlZmluZSBFWFlOT1M1NDIwX01GQ19PUFRJT04JCQkJCTB4NDA2OAorI2RlZmluZSBFWFlOT1M1NDIwX0czRF9DT05GSUdVUkFUSU9OCQkJCTB4NDA4MAorI2RlZmluZSBFWFlOT1M1NDIwX0czRF9TVEFUVVMJCQkJCTB4NDA4NAorI2RlZmluZSBFWFlOT1M1NDIwX0czRF9PUFRJT04JCQkJCTB4NDA4OAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU1AwX0NPTkZJR1VSQVRJT04JCQkJMHg0MEEwCisjZGVmaW5lIEVYWU5PUzU0MjBfRElTUDBfU1RBVFVTCQkJCQkweDQwQTQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNQMF9PUFRJT04JCQkJCTB4NDBBOAorI2RlZmluZSBFWFlOT1M1NDIwX0RJU1AxX0NPTkZJR1VSQVRJT04JCQkJMHg0MEMwCisjZGVmaW5lIEVYWU5PUzU0MjBfRElTUDFfU1RBVFVTCQkJCQkweDQwQzQKKyNkZWZpbmUgRVhZTk9TNTQyMF9ESVNQMV9PUFRJT04JCQkJCTB4NDBDOAorI2RlZmluZSBFWFlOT1M1NDIwX01BVV9DT05GSUdVUkFUSU9OCQkJCTB4NDBFMAorI2RlZmluZSBFWFlOT1M1NDIwX01BVV9TVEFUVVMJCQkJCTB4NDBFNAorI2RlZmluZSBFWFlOT1M1NDIwX01BVV9PUFRJT04JCQkJCTB4NDBFOAorI2RlZmluZSBFWFlOT1M1NDIwX0ZTWVMyX09QVElPTgkJCQkJMHg0MTY4CisjZGVmaW5lIEVYWU5PUzU0MjBfUFNHRU5fT1BUSU9OCQkJCQkweDQxODgKKworLyogRm9yIEVYWU5PU19DRU5UUkFMX1NFUV9PUFRJT04gKi8KKyNkZWZpbmUgRVhZTk9TNV9VU0VfU1RBTkRCWVdGSV9BUk1fQ09SRTAJCQlCSVQoMTYpCisjZGVmaW5lIEVYWU5PUzVfVVNFX1NUQU5EQllXRklfQVJNX0NPUkUxCQkJQlVUKDE3KQorI2RlZmluZSBFWFlOT1M1X1VTRV9TVEFOREJZV0ZFX0FSTV9DT1JFMAkJCUJJVCgyNCkKKyNkZWZpbmUgRVhZTk9TNV9VU0VfU1RBTkRCWVdGRV9BUk1fQ09SRTEJCQlCSVQoMjUpCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZJMAkJCQlCSVQoNCkKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZJMQkJCQlCSVQoNSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZJMgkJCQlCSVQoNikKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZJMwkJCQlCSVQoNykKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZJMAkJCQlCSVQoOCkKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZJMQkJCQlCSVQoOSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZJMgkJCQlCSVQoMTApCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTMJCQkJQklUKDExKQorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9VU0VfU1RBTkRCWV9XRkUwCQkJCUJJVCgxNikKKyNkZWZpbmUgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZFMQkJCQlCSVQoMTcpCisjZGVmaW5lIEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGRTIJCQkJQklUKDE4KQorI2RlZmluZSBFWFlOT1M1NDIwX0FSTV9VU0VfU1RBTkRCWV9XRkUzCQkJCUJJVCgxOSkKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZFMAkJCQlCSVQoMjApCisjZGVmaW5lIEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGRTEJCQkJQklUKDIxKQorI2RlZmluZSBFWFlOT1M1NDIwX0tGQ19VU0VfU1RBTkRCWV9XRkUyCQkJCUJJVCgyMikKKyNkZWZpbmUgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZFMwkJCQlCSVQoMjMpCisKKyNkZWZpbmUgRFVSX1dBSVRfUkVTRVQJCQkJMHhGCisKKyNkZWZpbmUgRVhZTk9TNTQyMF9VU0VfU1RBTkRCWV9XRklfQUxMCShFWFlOT1M1NDIwX0FSTV9VU0VfU1RBTkRCWV9XRkkwICAgIFwKKwkJCQkJIHwgRVhZTk9TNTQyMF9BUk1fVVNFX1NUQU5EQllfV0ZJMSAgXAorCQkJCQkgfCBFWFlOT1M1NDIwX0FSTV9VU0VfU1RBTkRCWV9XRkkyICBcCisJCQkJCSB8IEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTMgIFwKKwkJCQkJIHwgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZJMCAgXAorCQkJCQkgfCBFWFlOT1M1NDIwX0tGQ19VU0VfU1RBTkRCWV9XRkkxICBcCisJCQkJCSB8IEVYWU5PUzU0MjBfS0ZDX1VTRV9TVEFOREJZX1dGSTIgIFwKKwkJCQkJIHwgRVhZTk9TNTQyMF9LRkNfVVNFX1NUQU5EQllfV0ZJMykKKwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19QTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3Mvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NsZWVwLlMKaW5kZXggMTA4YTQ1Zi4uZTNjMzczMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3Mvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9zbGVlcC5TCkBAIC0xNiw2ICsxNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlICJzbWMuaCIKIAogI2RlZmluZSBDUFVfTUFTSwkweGZmMGZmZmYwCiAjZGVmaW5lIENQVV9DT1JURVhfQTkJMHg0MTBmYzA5MApAQCAtNTUsMyArNTYsMzAgQEAKICNlbmRpZgogCWIJY3B1X3Jlc3VtZQogRU5EUFJPQyhleHlub3NfY3B1X3Jlc3VtZSkKKworCS5hbGlnbgorCitFTlRSWShleHlub3NfY3B1X3Jlc3VtZV9ucykKKwltcmMJcDE1LCAwLCByMCwgYzAsIGMwLCAwCisJbGRyCXIxLCA9Q1BVX01BU0sKKwlhbmQJcjAsIHIwLCByMQorCWxkcglyMSwgPUNQVV9DT1JURVhfQTkKKwljbXAJcjAsIHIxCisJYm5lCXNraXBfY3AxNQorCisJYWRyCXIwLCBjcDE1X3NhdmVfcG93ZXIKKwlsZHIJcjEsIFtyMF0KKwlhZHIJcjAsIGNwMTVfc2F2ZV9kaWFnCisJbGRyCXIyLCBbcjBdCisJbW92CXIwLCAjU01DX0NNRF9DMTVSRVNVTUUKKwlkc2IKKwlzbWMJIzAKK3NraXBfY3AxNToKKwliCWNwdV9yZXN1bWUKK0VORFBST0MoZXh5bm9zX2NwdV9yZXN1bWVfbnMpCisJLmdsb2JsIGNwMTVfc2F2ZV9kaWFnCitjcDE1X3NhdmVfZGlhZzoKKwkubG9uZwkwCUAgY3AxNSBkaWFnbm9zdGljCisJLmdsb2JsIGNwMTVfc2F2ZV9wb3dlcgorY3AxNV9zYXZlX3Bvd2VyOgorCS5sb25nCTAJQCBjcDE1IHBvd2VyIGNvbnRyb2wKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NtYy5oIGIvYXJjaC9hcm0vbWFjaC1leHlub3Mvc21jLmgKaW5kZXggMTNhMWRjOC4uZjdiODJmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3Mvc21jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3Mvc21jLmgKQEAgLTI2LDYgKzI2LDEwIEBACiAjZGVmaW5lIFNNQ19DTURfTDJYMElOVkFMTAkoLTI0KQogI2RlZmluZSBTTUNfQ01EX0wyWDBERUJVRwkoLTI1KQogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCiBleHRlcm4gdm9pZCBleHlub3Nfc21jKHUzMiBjbWQsIHUzMiBhcmcxLCB1MzIgYXJnMiwgdTMyIGFyZzMpOwogCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3Mvc3VzcGVuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZTdkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9zdXNwZW5kLmMKQEAgLTAsMCArMSw1NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBFWFlOT1MgLSBTdXNwZW5kIHN1cHBvcnQKKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYworICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVfcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL21jcG0uaD4KKyNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisKKyNpbmNsdWRlIDxwbGF0L3BtLWNvbW1vbi5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zcm9tLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJyZWdzLXBtdS5oIgorI2luY2x1ZGUgInJlZ3Mtc3lzLmgiCisjaW5jbHVkZSAiZXh5bm9zLXBtdS5oIgorCisjZGVmaW5lIFM1UF9DSEVDS19TTEVFUCAweDAwMDAwQkFECisKKyNkZWZpbmUgUkVHX1RBQkxFX0VORCAoLTFVKQorCisjZGVmaW5lIEVYWU5PUzU0MjBfQ1BVX1NUQVRFCTB4MjgKKworLyoqCisgKiBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxIC0gRXh5bm9zIEdJQyB0byBQTVUgSVJRIG1hcHBpbmcKKyAqIEBod2lycTogSGFyZHdhcmUgSVJRIHNpZ25hbCBvZiB0aGUgR0lDCisgKiBAbWFzazogTWFzayBpbiBQTVUgd2FrZS11cCBtYXNrIHJlZ2lzdGVyCisgKi8KK3N0cnVjdCBleHlub3Nfd2t1cF9pcnEgeworCXVuc2lnbmVkIGludCBod2lycTsKKwl1MzIgbWFzazsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBleHlub3M1X3N5c19zYXZlW10gPSB7CisJU0FWRV9JVEVNKEVYWU5PUzVfU1lTX0kyQ19DRkcpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGV4eW5vc19jb3JlX3NhdmVbXSA9IHsKKwkvKiBTUk9NIHNpZGUgKi8KKwlTQVZFX0lURU0oUzVQX1NST01fQlcpLAorCVNBVkVfSVRFTShTNVBfU1JPTV9CQzApLAorCVNBVkVfSVRFTShTNVBfU1JPTV9CQzEpLAorCVNBVkVfSVRFTShTNVBfU1JPTV9CQzIpLAorCVNBVkVfSVRFTShTNVBfU1JPTV9CQzMpLAorfTsKKworc3RydWN0IGV4eW5vc19wbV9kYXRhIHsKKwljb25zdCBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxICp3a3VwX2lycTsKKwlzdHJ1Y3Qgc2xlZXBfc2F2ZSAqZXh0cmFfc2F2ZTsKKwlpbnQgbnVtX2V4dHJhX3NhdmU7CisJdW5zaWduZWQgaW50IHdha2VfZGlzYWJsZV9tYXNrOworCXVuc2lnbmVkIGludCAqcmVsZWFzZV9yZXRfcmVnczsKKworCXZvaWQgKCpwbV9wcmVwYXJlKSh2b2lkKTsKKwl2b2lkICgqcG1fcmVzdW1lX3ByZXBhcmUpKHZvaWQpOworCXZvaWQgKCpwbV9yZXN1bWUpKHZvaWQpOworCWludCAoKnBtX3N1c3BlbmQpKHZvaWQpOworCWludCAoKmNwdV9zdXNwZW5kKSh1bnNpZ25lZCBsb25nKTsKK307CisKK3N0cnVjdCBleHlub3NfcG1fZGF0YSAqcG1fZGF0YTsKKworc3RhdGljIGludCBleHlub3M1NDIwX2NwdV9zdGF0ZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXh5bm9zX3BtdV9zcGFyZTM7CisKKy8qCisgKiBHSUMgd2FrZS11cCBzdXBwb3J0CisgKi8KKworc3RhdGljIHUzMiBleHlub3NfaXJxd2FrZV9pbnRtYXNrID0gMHhmZmZmZmZmZjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3Nfd2t1cF9pcnEgZXh5bm9zNF93a3VwX2lycVtdID0geworCXsgNzYsIEJJVCgxKSB9LCAvKiBSVEMgYWxhcm0gKi8KKwl7IDc3LCBCSVQoMikgfSwgLyogUlRDIHRpY2sgKi8KKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc193a3VwX2lycSBleHlub3M1MjUwX3drdXBfaXJxW10gPSB7CisJeyA3NSwgQklUKDEpIH0sIC8qIFJUQyBhbGFybSAqLworCXsgNzYsIEJJVCgyKSB9LCAvKiBSVEMgdGljayAqLworCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3Vuc2lnbmVkIGludCBleHlub3NfcmVsZWFzZV9yZXRfcmVnc1tdID0geworCVM1UF9QQURfUkVUX01BVURJT19PUFRJT04sCisJUzVQX1BBRF9SRVRfR1BJT19PUFRJT04sCisJUzVQX1BBRF9SRVRfVUFSVF9PUFRJT04sCisJUzVQX1BBRF9SRVRfTU1DQV9PUFRJT04sCisJUzVQX1BBRF9SRVRfTU1DQl9PUFRJT04sCisJUzVQX1BBRF9SRVRfRUJJQV9PUFRJT04sCisJUzVQX1BBRF9SRVRfRUJJQl9PUFRJT04sCisJUkVHX1RBQkxFX0VORCwKK307CisKK3Vuc2lnbmVkIGludCBleHlub3M1NDIwX3JlbGVhc2VfcmV0X3JlZ3NbXSA9IHsKKwlFWFlOT1NfUEFEX1JFVF9EUkFNX09QVElPTiwKKwlFWFlOT1NfUEFEX1JFVF9NQVVESU9fT1BUSU9OLAorCUVYWU5PU19QQURfUkVUX0pUQUdfT1BUSU9OLAorCUVYWU5PUzU0MjBfUEFEX1JFVF9HUElPX09QVElPTiwKKwlFWFlOT1M1NDIwX1BBRF9SRVRfVUFSVF9PUFRJT04sCisJRVhZTk9TNTQyMF9QQURfUkVUX01NQ0FfT1BUSU9OLAorCUVYWU5PUzU0MjBfUEFEX1JFVF9NTUNCX09QVElPTiwKKwlFWFlOT1M1NDIwX1BBRF9SRVRfTU1DQ19PUFRJT04sCisJRVhZTk9TNTQyMF9QQURfUkVUX0hTSV9PUFRJT04sCisJRVhZTk9TX1BBRF9SRVRfRUJJQV9PUFRJT04sCisJRVhZTk9TX1BBRF9SRVRfRUJJQl9PUFRJT04sCisJRVhZTk9TNTQyMF9QQURfUkVUX1NQSV9PUFRJT04sCisJRVhZTk9TNTQyMF9QQURfUkVUX0RSQU1fQ09SRUJMS19PUFRJT04sCisJUkVHX1RBQkxFX0VORCwKK307CisKK3N0YXRpYyBpbnQgZXh5bm9zX2lycV9zZXRfd2FrZShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZXh5bm9zX3drdXBfaXJxICp3a3VwX2lycTsKKworCWlmICghcG1fZGF0YS0+d2t1cF9pcnEpCisJCXJldHVybiAtRU5PRU5UOworCXdrdXBfaXJxID0gcG1fZGF0YS0+d2t1cF9pcnE7CisKKwl3aGlsZSAod2t1cF9pcnEtPm1hc2spIHsKKwkJaWYgKHdrdXBfaXJxLT5od2lycSA9PSBkYXRhLT5od2lycSkgeworCQkJaWYgKCFzdGF0ZSkKKwkJCQlleHlub3NfaXJxd2FrZV9pbnRtYXNrIHw9IHdrdXBfaXJxLT5tYXNrOworCQkJZWxzZQorCQkJCWV4eW5vc19pcnF3YWtlX2ludG1hc2sgJj0gfndrdXBfaXJxLT5tYXNrOworCQkJcmV0dXJuIDA7CisJCX0KKwkJKyt3a3VwX2lycTsKKwl9CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCBleHlub3NfY3B1X2RvX2lkbGUodm9pZCkKK3sKKwkvKiBpc3N1ZSB0aGUgc3RhbmRieSBzaWduYWwgaW50byB0aGUgcG0gdW5pdC4gKi8KKwljcHVfZG9faWRsZSgpOworCisJcHJfaW5mbygiRmFpbGVkIHRvIHN1c3BlbmQgdGhlIHN5c3RlbVxuIik7CisJcmV0dXJuIDE7IC8qIEFib3J0aW5nIHN1c3BlbmQgKi8KK30KK3N0YXRpYyB2b2lkIGV4eW5vc19mbHVzaF9jYWNoZV9hbGwodm9pZCkKK3sKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlvdXRlcl9mbHVzaF9hbGwoKTsKK30KKworc3RhdGljIGludCBleHlub3NfY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJZXh5bm9zX2ZsdXNoX2NhY2hlX2FsbCgpOworCXJldHVybiBleHlub3NfY3B1X2RvX2lkbGUoKTsKK30KKworc3RhdGljIGludCBleHlub3M1NDIwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCS8qIE1DUE0gd29ya3Mgd2l0aCBIVyBDUFUgaWRlbnRpZmllcnMgKi8KKwl1bnNpZ25lZCBpbnQgbXBpZHIgPSByZWFkX2NwdWlkX21waWRyKCk7CisJdW5zaWduZWQgaW50IGNsdXN0ZXIgPSBNUElEUl9BRkZJTklUWV9MRVZFTChtcGlkciwgMSk7CisJdW5zaWduZWQgaW50IGNwdSA9IE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAwKTsKKworCV9fcmF3X3dyaXRlbCgweDAsIHN5c3JhbV9iYXNlX2FkZHIgKyBFWFlOT1M1NDIwX0NQVV9TVEFURSk7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfRVhZTk9TNTQyMF9NQ1BNKSkgeworCQltY3BtX3NldF9lbnRyeV92ZWN0b3IoY3B1LCBjbHVzdGVyLCBleHlub3NfY3B1X3Jlc3VtZSk7CisKKwkJLyoKKwkJICogUmVzaWRlbmN5IHZhbHVlIHBhc3NlZCB0byBtY3BtX2NwdV9zdXNwZW5kIGJhY2stZW5kCisJCSAqIGhhcyB0byBiZSBnaXZlbiBjbGVhciBzZW1hbnRpY3MuIFNldCB0byAwIGFzIGEKKwkJICogdGVtcG9yYXJ5IHZhbHVlLgorCQkgKi8KKwkJbWNwbV9jcHVfc3VzcGVuZCgwKTsKKwl9CisKKwlwcl9pbmZvKCJGYWlsZWQgdG8gc3VzcGVuZCB0aGUgc3lzdGVtXG4iKTsKKworCS8qIHJldHVybiB2YWx1ZSAhPSAwIG1lYW5zIGZhaWx1cmUgKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3BtX3NldF93YWtldXBfbWFzayh2b2lkKQoreworCS8qIFNldCB3YWtlLXVwIG1hc2sgcmVnaXN0ZXJzICovCisJcG11X3Jhd193cml0ZWwoZXh5bm9zX2dldF9laW50X3dha2VfbWFzaygpLCBTNVBfRUlOVF9XQUtFVVBfTUFTSyk7CisJcG11X3Jhd193cml0ZWwoZXh5bm9zX2lycXdha2VfaW50bWFzayAmIH4oMSA8PCAzMSksIFM1UF9XQUtFVVBfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vc19wbV9lbnRlcl9zbGVlcF9tb2RlKHZvaWQpCit7CisJLyogU2V0IHZhbHVlIG9mIHBvd2VyIGRvd24gcmVnaXN0ZXIgZm9yIHNsZWVwIG1vZGUgKi8KKwlleHlub3Nfc3lzX3Bvd2VyZG93bl9jb25mKFNZU19TTEVFUCk7CisJcG11X3Jhd193cml0ZWwoUzVQX0NIRUNLX1NMRUVQLCBTNVBfSU5GT1JNMSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vc19wbV9wcmVwYXJlKHZvaWQpCit7CisJLyogU2V0IHdha2UtdXAgbWFzayByZWdpc3RlcnMgKi8KKwlleHlub3NfcG1fc2V0X3dha2V1cF9tYXNrKCk7CisKKwlzM2NfcG1fZG9fc2F2ZShleHlub3NfY29yZV9zYXZlLCBBUlJBWV9TSVpFKGV4eW5vc19jb3JlX3NhdmUpKTsKKworCSBpZiAocG1fZGF0YS0+ZXh0cmFfc2F2ZSkKKwkJczNjX3BtX2RvX3NhdmUocG1fZGF0YS0+ZXh0cmFfc2F2ZSwKKwkJCQlwbV9kYXRhLT5udW1fZXh0cmFfc2F2ZSk7CisKKwlleHlub3NfcG1fZW50ZXJfc2xlZXBfbW9kZSgpOworCisJLyogZW5zdXJlIGF0IGxlYXN0IElORk9STTAgaGFzIHRoZSByZXN1bWUgYWRkcmVzcyAqLworCXBtdV9yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhleHlub3NfY3B1X3Jlc3VtZSksIFM1UF9JTkZPUk0wKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zNTQyMF9wbV9wcmVwYXJlKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIFNldCB3YWtlLXVwIG1hc2sgcmVnaXN0ZXJzICovCisJZXh5bm9zX3BtX3NldF93YWtldXBfbWFzaygpOworCisJczNjX3BtX2RvX3NhdmUoZXh5bm9zX2NvcmVfc2F2ZSwgQVJSQVlfU0laRShleHlub3NfY29yZV9zYXZlKSk7CisKKwlleHlub3NfcG11X3NwYXJlMyA9IHBtdV9yYXdfcmVhZGwoUzVQX1BNVV9TUEFSRTMpOworCS8qCisJICogVGhlIGNwdSBzdGF0ZSBuZWVkcyB0byBiZSBzYXZlZCBhbmQgcmVzdG9yZWQgc28gdGhhdCB0aGUKKwkgKiBzZWNvbmRhcnkgQ1BVcyB3aWxsIGVudGVyIGxvdyBwb3dlciBzdGFydC4gVGhvdWdoIHRoZSBVLUJvb3QKKwkgKiBpcyBzZXR0aW5nIHRoZSBjcHUgc3RhdGUgd2l0aCBsb3cgcG93ZXIgZmxhZywgdGhlIGtlcm5lbAorCSAqIG5lZWRzIHRvIHJlc3RvcmUgaXQgYmFjayBpbiBjYXNlLCB0aGUgcHJpbWFyeSBjcHUgZmFpbHMgdG8KKwkgKiBzdXNwZW5kIGZvciBhbnkgcmVhc29uLgorCSAqLworCWV4eW5vczU0MjBfY3B1X3N0YXRlID0gX19yYXdfcmVhZGwoc3lzcmFtX2Jhc2VfYWRkciArCisJCQkJCQlFWFlOT1M1NDIwX0NQVV9TVEFURSk7CisKKwlleHlub3NfcG1fZW50ZXJfc2xlZXBfbW9kZSgpOworCisJLyogZW5zdXJlIGF0IGxlYXN0IElORk9STTAgaGFzIHRoZSByZXN1bWUgYWRkcmVzcyAqLworCWlmIChJU19FTkFCTEVEKENPTkZJR19FWFlOT1M1NDIwX01DUE0pKQorCQlwbXVfcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMobWNwbV9lbnRyeV9wb2ludCksIFM1UF9JTkZPUk0wKTsKKworCXRtcCA9IHBtdV9yYXdfcmVhZGwoRVhZTk9TNV9BUk1fTDJfT1BUSU9OKTsKKwl0bXAgJj0gfkVYWU5PUzVfVVNFX1JFVEVOVElPTjsKKwlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzVfQVJNX0wyX09QVElPTik7CisKKwl0bXAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzU0MjBfU0ZSX0FYSV9DR0RJUzEpOworCXRtcCB8PSBFWFlOT1M1NDIwX1VGUzsKKwlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzU0MjBfU0ZSX0FYSV9DR0RJUzEpOworCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX0FSTV9DT01NT05fT1BUSU9OKTsKKwl0bXAgJj0gfkVYWU5PUzU0MjBfTDJSU1RESVNBQkxFX1ZBTFVFOworCXBtdV9yYXdfd3JpdGVsKHRtcCwgRVhZTk9TNTQyMF9BUk1fQ09NTU9OX09QVElPTik7CisKKwl0bXAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzU0MjBfRlNZUzJfT1BUSU9OKTsKKwl0bXAgfD0gRVhZTk9TNTQyMF9FTVVMQVRJT047CisJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1M1NDIwX0ZTWVMyX09QVElPTik7CisKKwl0bXAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzU0MjBfUFNHRU5fT1BUSU9OKTsKKwl0bXAgfD0gRVhZTk9TNTQyMF9FTVVMQVRJT047CisJcG11X3Jhd193cml0ZWwodG1wLCBFWFlOT1M1NDIwX1BTR0VOX09QVElPTik7Cit9CisKKworc3RhdGljIGludCBleHlub3NfcG1fc3VzcGVuZCh2b2lkKQoreworCWV4eW5vc19wbV9jZW50cmFsX3N1c3BlbmQoKTsKKworCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQorCQlleHlub3NfY3B1X3NhdmVfcmVnaXN0ZXIoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4eW5vczU0MjBfcG1fc3VzcGVuZCh2b2lkKQoreworCXUzMiB0aGlzX2NsdXN0ZXI7CisKKwlleHlub3NfcG1fY2VudHJhbF9zdXNwZW5kKCk7CisKKwkvKiBTZXR0aW5nIFNFUV9PUFRJT04gcmVnaXN0ZXIgKi8KKworCXRoaXNfY2x1c3RlciA9IE1QSURSX0FGRklOSVRZX0xFVkVMKHJlYWRfY3B1aWRfbXBpZHIoKSwgMSk7CisJaWYgKCF0aGlzX2NsdXN0ZXIpCisJCXBtdV9yYXdfd3JpdGVsKEVYWU5PUzU0MjBfQVJNX1VTRV9TVEFOREJZX1dGSTAsCisJCQkJUzVQX0NFTlRSQUxfU0VRX09QVElPTik7CisJZWxzZQorCQlwbXVfcmF3X3dyaXRlbChFWFlOT1M1NDIwX0tGQ19VU0VfU1RBTkRCWV9XRkkwLAorCQkJCVM1UF9DRU5UUkFMX1NFUV9PUFRJT04pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfcG1fcmVsZWFzZV9yZXRlbnRpb24odm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IChwbV9kYXRhLT5yZWxlYXNlX3JldF9yZWdzW2ldICE9IFJFR19UQUJMRV9FTkQpOyBpKyspCisJCXBtdV9yYXdfd3JpdGVsKEVYWU5PU19XQUtFVVBfRlJPTV9MT1dQV1IsCisJCQkJcG1fZGF0YS0+cmVsZWFzZV9yZXRfcmVnc1tpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vc19wbV9yZXN1bWUodm9pZCkKK3sKKwl1MzIgY3B1aWQgPSByZWFkX2NwdWlkX3BhcnQoKTsKKworCWlmIChleHlub3NfcG1fY2VudHJhbF9yZXN1bWUoKSkKKwkJZ290byBlYXJseV93YWtldXA7CisKKwkvKiBGb3IgcmVsZWFzZSByZXRlbnRpb24gKi8KKwlleHlub3NfcG1fcmVsZWFzZV9yZXRlbnRpb24oKTsKKworCWlmIChwbV9kYXRhLT5leHRyYV9zYXZlKQorCQlzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKHBtX2RhdGEtPmV4dHJhX3NhdmUsCisJCQkJCXBtX2RhdGEtPm51bV9leHRyYV9zYXZlKTsKKworCXMzY19wbV9kb19yZXN0b3JlX2NvcmUoZXh5bm9zX2NvcmVfc2F2ZSwgQVJSQVlfU0laRShleHlub3NfY29yZV9zYXZlKSk7CisKKwlpZiAoY3B1aWQgPT0gQVJNX0NQVV9QQVJUX0NPUlRFWF9BOSkKKwkJc2N1X2VuYWJsZShTNVBfVkFfU0NVKTsKKworCWlmIChjYWxsX2Zpcm13YXJlX29wKHJlc3VtZSkgPT0gLUVOT1NZUworCSAgICAmJiBjcHVpZCA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KQorCQlleHlub3NfY3B1X3Jlc3RvcmVfcmVnaXN0ZXIoKTsKKworZWFybHlfd2FrZXVwOgorCisJLyogQ2xlYXIgU0xFRVAgbW9kZSBzZXQgaW4gSU5GT1JNMSAqLworCXBtdV9yYXdfd3JpdGVsKDB4MCwgUzVQX0lORk9STTEpOworfQorCitzdGF0aWMgdm9pZCBleHlub3M1NDIwX3ByZXBhcmVfcG1fcmVzdW1lKHZvaWQpCit7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0VYWU5PUzU0MjBfTUNQTSkpCisJCVdBUk5fT04obWNwbV9jcHVfcG93ZXJlZF91cCgpKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zNTQyMF9wbV9yZXN1bWUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCS8qIFJlc3RvcmUgdGhlIENQVTAgbG93IHBvd2VyIHN0YXRlIHJlZ2lzdGVyICovCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1X0FSTV9DT1JFMF9TWVNfUFdSX1JFRyk7CisJcG11X3Jhd193cml0ZWwodG1wIHwgUzVQX0NPUkVfTE9DQUxfUFdSX0VOLAorCQlFWFlOT1M1X0FSTV9DT1JFMF9TWVNfUFdSX1JFRyk7CisKKwkvKiBSZXN0b3JlIHRoZSBzeXNyYW0gY3B1IHN0YXRlIHJlZ2lzdGVyICovCisJX19yYXdfd3JpdGVsKGV4eW5vczU0MjBfY3B1X3N0YXRlLAorCQlzeXNyYW1fYmFzZV9hZGRyICsgRVhZTk9TNTQyMF9DUFVfU1RBVEUpOworCisJcG11X3Jhd193cml0ZWwoRVhZTk9TNTQyMF9VU0VfU1RBTkRCWV9XRklfQUxMLAorCQkJUzVQX0NFTlRSQUxfU0VRX09QVElPTik7CisKKwlpZiAoZXh5bm9zX3BtX2NlbnRyYWxfcmVzdW1lKCkpCisJCWdvdG8gZWFybHlfd2FrZXVwOworCisJLyogRm9yIHJlbGVhc2UgcmV0ZW50aW9uICovCisJZXh5bm9zX3BtX3JlbGVhc2VfcmV0ZW50aW9uKCk7CisKKwlwbXVfcmF3X3dyaXRlbChleHlub3NfcG11X3NwYXJlMywgUzVQX1BNVV9TUEFSRTMpOworCisJczNjX3BtX2RvX3Jlc3RvcmVfY29yZShleHlub3NfY29yZV9zYXZlLCBBUlJBWV9TSVpFKGV4eW5vc19jb3JlX3NhdmUpKTsKKworZWFybHlfd2FrZXVwOgorCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX1NGUl9BWElfQ0dESVMxKTsKKwl0bXAgJj0gfkVYWU5PUzU0MjBfVUZTOworCXBtdV9yYXdfd3JpdGVsKHRtcCwgRVhZTk9TNTQyMF9TRlJfQVhJX0NHRElTMSk7CisKKwl0bXAgPSBwbXVfcmF3X3JlYWRsKEVYWU5PUzU0MjBfRlNZUzJfT1BUSU9OKTsKKwl0bXAgJj0gfkVYWU5PUzU0MjBfRU1VTEFUSU9OOworCXBtdV9yYXdfd3JpdGVsKHRtcCwgRVhZTk9TNTQyMF9GU1lTMl9PUFRJT04pOworCisJdG1wID0gcG11X3Jhd19yZWFkbChFWFlOT1M1NDIwX1BTR0VOX09QVElPTik7CisJdG1wICY9IH5FWFlOT1M1NDIwX0VNVUxBVElPTjsKKwlwbXVfcmF3X3dyaXRlbCh0bXAsIEVYWU5PUzU0MjBfUFNHRU5fT1BUSU9OKTsKKworCS8qIENsZWFyIFNMRUVQIG1vZGUgc2V0IGluIElORk9STTEgKi8KKwlwbXVfcmF3X3dyaXRlbCgweDAsIFM1UF9JTkZPUk0xKTsKK30KKworLyoKKyAqIFN1c3BlbmQgT3BzCisgKi8KKworc3RhdGljIGludCBleHlub3Nfc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJaW50IHJldDsKKworCXMzY19wbV9kZWJ1Z19pbml0KCk7CisKKwlTM0NfUE1EQkcoIiVzOiBzdXNwZW5kaW5nIHRoZSBzeXN0ZW0uLi5cbiIsIF9fZnVuY19fKTsKKworCVMzQ19QTURCRygiJXM6IHdha2V1cCBtYXNrczogJTA4eCwlMDh4XG4iLCBfX2Z1bmNfXywKKwkJCWV4eW5vc19pcnF3YWtlX2ludG1hc2ssIGV4eW5vc19nZXRfZWludF93YWtlX21hc2soKSk7CisKKwlpZiAoZXh5bm9zX2lycXdha2VfaW50bWFzayA9PSAtMVUKKwkgICAgJiYgZXh5bm9zX2dldF9laW50X3dha2VfbWFzaygpID09IC0xVSkgeworCQlwcl9lcnIoIiVzOiBObyB3YWtlLXVwIHNvdXJjZXMhXG4iLCBfX2Z1bmNfXyk7CisJCXByX2VycigiJXM6IEFib3J0aW5nIHNsZWVwXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXMzY19wbV9zYXZlX3VhcnRzKCk7CisJaWYgKHBtX2RhdGEtPnBtX3ByZXBhcmUpCisJCXBtX2RhdGEtPnBtX3ByZXBhcmUoKTsKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlzM2NfcG1fY2hlY2tfc3RvcmUoKTsKKworCXJldCA9IGNhbGxfZmlybXdhcmVfb3Aoc3VzcGVuZCk7CisJaWYgKHJldCA9PSAtRU5PU1lTKQorCQlyZXQgPSBjcHVfc3VzcGVuZCgwLCBwbV9kYXRhLT5jcHVfc3VzcGVuZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwbV9kYXRhLT5wbV9yZXN1bWVfcHJlcGFyZSkKKwkJcG1fZGF0YS0+cG1fcmVzdW1lX3ByZXBhcmUoKTsKKwlzM2NfcG1fcmVzdG9yZV91YXJ0cygpOworCisJUzNDX1BNREJHKCIlczogd2FrZXVwIHN0YXQ6ICUwOHhcbiIsIF9fZnVuY19fLAorCQkJcG11X3Jhd19yZWFkbChTNVBfV0FLRVVQX1NUQVQpKTsKKworCXMzY19wbV9jaGVja19yZXN0b3JlKCk7CisKKwlTM0NfUE1EQkcoIiVzOiByZXN1bWluZyB0aGUgc3lzdGVtLi4uXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleHlub3Nfc3VzcGVuZF9wcmVwYXJlKHZvaWQpCit7CisJaW50IHJldDsKKworCS8qCisJICogUkVWSVNJVDogSXQgd291bGQgYmUgYmV0dGVyIGlmIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcworCSAqIC5wcmVwYXJlIGhhbmRsZXIgZ2V0IHRoZSBzdXNwZW5kX3N0YXRlX3QgYXMgYSBwYXJhbWV0ZXIgdG8KKwkgKiBhdm9pZCBoYXJkLWNvZGluZyB0aGUgc3VzcGVuZCB0byBtZW0gc3RhdGUuIEl0J3Mgc2FmZSB0byBkbworCSAqIGl0IG5vdyBvbmx5IGJlY2F1c2UgdGhlIHN1c3BlbmRfdmFsaWRfb25seV9tZW0gZnVuY3Rpb24gaXMKKwkgKiB1c2VkIGFzIHRoZSAudmFsaWQgY2FsbGJhY2sgdXNlZCB0byBjaGVjayBpZiBhIGdpdmVuIHN0YXRlCisJICogaXMgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybSBhbnl3YXlzLgorCSAqLworCXJldCA9IHJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmUoUE1fU1VTUEVORF9NRU0pOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcHJlcGFyZSByZWd1bGF0b3JzIGZvciBzdXNwZW5kICglZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJczNjX3BtX2NoZWNrX3ByZXBhcmUoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBleHlub3Nfc3VzcGVuZF9maW5pc2godm9pZCkKK3sKKwlpbnQgcmV0OworCisJczNjX3BtX2NoZWNrX2NsZWFudXAoKTsKKworCXJldCA9IHJlZ3VsYXRvcl9zdXNwZW5kX2ZpbmlzaCgpOworCWlmIChyZXQpCisJCXByX3dhcm4oIkZhaWxlZCB0byByZXN1bWUgcmVndWxhdG9ycyBmcm9tIHN1c3BlbmQgKCVkKVxuIiwgcmV0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBleHlub3Nfc3VzcGVuZF9vcHMgPSB7CisJLmVudGVyCQk9IGV4eW5vc19zdXNwZW5kX2VudGVyLAorCS5wcmVwYXJlCT0gZXh5bm9zX3N1c3BlbmRfcHJlcGFyZSwKKwkuZmluaXNoCQk9IGV4eW5vc19zdXNwZW5kX2ZpbmlzaCwKKwkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3BtX2RhdGEgZXh5bm9zNF9wbV9kYXRhID0geworCS53a3VwX2lycQk9IGV4eW5vczRfd2t1cF9pcnEsCisJLndha2VfZGlzYWJsZV9tYXNrID0gKCgweEZGIDw8IDgpIHwgKDB4MUYgPDwgMSkpLAorCS5yZWxlYXNlX3JldF9yZWdzID0gZXh5bm9zX3JlbGVhc2VfcmV0X3JlZ3MsCisJLnBtX3N1c3BlbmQJPSBleHlub3NfcG1fc3VzcGVuZCwKKwkucG1fcmVzdW1lCT0gZXh5bm9zX3BtX3Jlc3VtZSwKKwkucG1fcHJlcGFyZQk9IGV4eW5vc19wbV9wcmVwYXJlLAorCS5jcHVfc3VzcGVuZAk9IGV4eW5vc19jcHVfc3VzcGVuZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9zX3BtX2RhdGEgZXh5bm9zNTI1MF9wbV9kYXRhID0geworCS53a3VwX2lycQk9IGV4eW5vczUyNTBfd2t1cF9pcnEsCisJLndha2VfZGlzYWJsZV9tYXNrID0gKCgweEZGIDw8IDgpIHwgKDB4MUYgPDwgMSkpLAorCS5yZWxlYXNlX3JldF9yZWdzID0gZXh5bm9zX3JlbGVhc2VfcmV0X3JlZ3MsCisJLmV4dHJhX3NhdmUJPSBleHlub3M1X3N5c19zYXZlLAorCS5udW1fZXh0cmFfc2F2ZQk9IEFSUkFZX1NJWkUoZXh5bm9zNV9zeXNfc2F2ZSksCisJLnBtX3N1c3BlbmQJPSBleHlub3NfcG1fc3VzcGVuZCwKKwkucG1fcmVzdW1lCT0gZXh5bm9zX3BtX3Jlc3VtZSwKKwkucG1fcHJlcGFyZQk9IGV4eW5vc19wbV9wcmVwYXJlLAorCS5jcHVfc3VzcGVuZAk9IGV4eW5vc19jcHVfc3VzcGVuZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXh5bm9zX3BtX2RhdGEgZXh5bm9zNTQyMF9wbV9kYXRhID0geworCS53a3VwX2lycQk9IGV4eW5vczUyNTBfd2t1cF9pcnEsCisJLndha2VfZGlzYWJsZV9tYXNrID0gKDB4N0YgPDwgNykgfCAoMHgxRiA8PCAxKSwKKwkucmVsZWFzZV9yZXRfcmVncyA9IGV4eW5vczU0MjBfcmVsZWFzZV9yZXRfcmVncywKKwkucG1fcmVzdW1lX3ByZXBhcmUgPSBleHlub3M1NDIwX3ByZXBhcmVfcG1fcmVzdW1lLAorCS5wbV9yZXN1bWUJPSBleHlub3M1NDIwX3BtX3Jlc3VtZSwKKwkucG1fc3VzcGVuZAk9IGV4eW5vczU0MjBfcG1fc3VzcGVuZCwKKwkucG1fcHJlcGFyZQk9IGV4eW5vczU0MjBfcG1fcHJlcGFyZSwKKwkuY3B1X3N1c3BlbmQJPSBleHlub3M1NDIwX2NwdV9zdXNwZW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZXh5bm9zX3BtdV9vZl9kZXZpY2VfaWRzW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczQyMTAtcG11IiwKKwkJLmRhdGEgPSAmZXh5bm9zNF9wbV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M0MjEyLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczRfcG1fZGF0YSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxMi1wbXUiLAorCQkuZGF0YSA9ICZleHlub3M0X3BtX2RhdGEsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczUyNTAtcG11IiwKKwkJLmRhdGEgPSAmZXh5bm9zNTI1MF9wbV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDIwLXBtdSIsCisJCS5kYXRhID0gJmV4eW5vczU0MjBfcG1fZGF0YSwKKwl9LAorCXsgLypzZW50aW5lbCovIH0sCit9OworCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGV4eW5vc19wbV9zeXNjb3JlX29wczsKKwordm9pZCBfX2luaXQgZXh5bm9zX3BtX2luaXQodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwl1MzIgdG1wOworCisJb2ZfZmluZF9tYXRjaGluZ19ub2RlX2FuZF9tYXRjaChOVUxMLCBleHlub3NfcG11X29mX2RldmljZV9pZHMsICZtYXRjaCk7CisJaWYgKCFtYXRjaCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byBmaW5kIFBNVSBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwbV9kYXRhID0gKHN0cnVjdCBleHlub3NfcG1fZGF0YSAqKSBtYXRjaC0+ZGF0YTsKKworCS8qIFBsYXRmb3JtLXNwZWNpZmljIEdJQyBjYWxsYmFjayAqLworCWdpY19hcmNoX2V4dG4uaXJxX3NldF93YWtlID0gZXh5bm9zX2lycV9zZXRfd2FrZTsKKworCS8qIEFsbCB3YWtldXAgZGlzYWJsZSAqLworCXRtcCA9IHBtdV9yYXdfcmVhZGwoUzVQX1dBS0VVUF9NQVNLKTsKKwl0bXAgfD0gcG1fZGF0YS0+d2FrZV9kaXNhYmxlX21hc2s7CisJcG11X3Jhd193cml0ZWwodG1wLCBTNVBfV0FLRVVQX01BU0spOworCisJZXh5bm9zX3BtX3N5c2NvcmVfb3BzLnN1c3BlbmQJPSBwbV9kYXRhLT5wbV9zdXNwZW5kOworCWV4eW5vc19wbV9zeXNjb3JlX29wcy5yZXN1bWUJPSBwbV9kYXRhLT5wbV9yZXN1bWU7CisKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmZXh5bm9zX3BtX3N5c2NvcmVfb3BzKTsKKwlzdXNwZW5kX3NldF9vcHMoJmV4eW5vc19zdXNwZW5kX29wcyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZwppbmRleCAxMWIyOTU3Li5lODYyN2UwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcKQEAgLTYzMywxMiArNjMzLDQxIEBACiAJYm9vbCAiVnlicmlkIEZhbWlseSBWRjYxMCBzdXBwb3J0IgogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IFBJTkNUUkxfVkY2MTAKLQlzZWxlY3QgVkZfUElUX1RJTUVSCiAJc2VsZWN0IFBMMzEwX0VSUkFUQV83Njk0MTkgaWYgQ0FDSEVfTDJYMAogCiAJaGVscAogCSAgVGhpcyBlbmFibGUgc3VwcG9ydCBmb3IgRnJlZXNjYWxlIFZ5YnJpZCBWRjYxMCBwcm9jZXNzb3IuCiAKK2Nob2ljZQorCXByb21wdCAiQ2xvY2tzb3VyY2UgZm9yIHNjaGVkdWxlciBjbG9jayIKKwlkZXBlbmRzIG9uIFNPQ19WRjYxMAorCWRlZmF1bHQgVkZfVVNFX0FSTV9HTE9CQUxfVElNRVIKKworCWNvbmZpZyBWRl9VU0VfQVJNX0dMT0JBTF9USU1FUgorCQlib29sICJVc2UgQVJNIEdsb2JhbCBUaW1lciIKKwkJc2VsZWN0IEFSTV9HTE9CQUxfVElNRVIKKwkJc2VsZWN0IENMS1NSQ19BUk1fR0xPQkFMX1RJTUVSX1NDSEVEX0NMT0NLCisJCWhlbHAKKwkJICBVc2UgdGhlIEFSTSBHbG9iYWwgVGltZXIgYXMgY2xvY2tzb3VyY2UKKworCWNvbmZpZyBWRl9VU0VfUElUX1RJTUVSCisJCWJvb2wgIlVzZSBQSVQgdGltZXIiCisJCXNlbGVjdCBWRl9QSVRfVElNRVIKKwkJaGVscAorCQkgIFVzZSBTb0MgUGVyaW9kaWMgSW50ZXJydXB0IFRpbWVyIChQSVQpIGFzIGNsb2Nrc291cmNlCisKK2VuZGNob2ljZQorCitjb25maWcgU09DX0xTMTAyMUEKKwlib29sICJGcmVlc2NhbGUgTFMxMDIxQSBzdXBwb3J0IgorCXNlbGVjdCBBUk1fR0lDCisJc2VsZWN0IEhBVkVfQVJNX0FSQ0hfVElNRVIKKwlzZWxlY3QgUENJX0RPTUFJTlMgaWYgUENJCisJc2VsZWN0IFpPTkVfRE1BIGlmIEFSTV9MUEFFCisKKwloZWxwCisJICBUaGlzIGVuYWJsZSBzdXBwb3J0IGZvciBGcmVlc2NhbGUgTFMxMDIxQSBwcm9jZXNzb3IuCisKIGVuZGlmCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZQppbmRleCA2ZTRmY2Q4Li5mNWFjNjg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogb2JqLSQoQ09ORklHX1NPQ19JTVgzNSkgKz0gbW0taW14My5vIGNwdS1pbXgzNS5vIGNsay1pbXgzNS5vIGVoY2ktaW14MzUubyBwbS1pbXgzLm8KIAogaW14NS1wbS0kKENPTkZJR19QTSkgKz0gcG0taW14NS5vCi1vYmotJChDT05GSUdfU09DX0lNWDUpICs9IGNwdS1pbXg1Lm8gY2xrLWlteDUxLWlteDUzLm8gJChpbXg1LXBtLXkpCitvYmotJChDT05GSUdfU09DX0lNWDUpICs9IGNwdS1pbXg1Lm8gY2xrLWlteDUxLWlteDUzLm8gY2xrLWNwdS5vICQoaW14NS1wbS15KQogCiBvYmotJChDT05GSUdfQ09NTU9OX0NMSykgKz0gY2xrLXBsbHYxLm8gY2xrLXBsbHYyLm8gY2xrLXBsbHYzLm8gY2xrLWdhdGUyLm8gXAogCQkJICAgIGNsay1wZmQubyBjbGstYnVzeS5vIGNsay5vIFwKQEAgLTg5LDcgKzg5LDcgQEAKIG9iai0kKENPTkZJR19IQVZFX0lNWF9HUEMpICs9IGdwYy5vCiBvYmotJChDT05GSUdfSEFWRV9JTVhfTU1EQykgKz0gbW1kYy5vCiBvYmotJChDT05GSUdfSEFWRV9JTVhfU1JDKSArPSBzcmMubwotaWZkZWYgQ09ORklHX1NPQ19JTVg2CitpZm5lcSAoJChDT05GSUdfU09DX0lNWDYpJChDT05GSUdfU09DX0xTMTAyMUEpLCkKIEFGTEFHU19oZWFkc21wLm8gOj0tV2EsLW1hcmNoPWFybXY3LWEKIG9iai0kKENPTkZJR19TTVApICs9IGhlYWRzbXAubyBwbGF0c21wLm8KIG9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkgKz0gaG90cGx1Zy5vCkBAIC0xMTAsNCArMTEwLDYgQEAKIAogb2JqLSQoQ09ORklHX1NPQ19WRjYxMCkgKz0gY2xrLXZmNjEwLm8gbWFjaC12ZjYxMC5vCiAKK29iai0kKENPTkZJR19TT0NfTFMxMDIxQSkgKz0gbWFjaC1sczEwMjFhLm8KKwogb2JqLXkgKz0gZGV2aWNlcy8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2FuYXRvcC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvYW5hdG9wLmMKaW5kZXggODI1OWE2Mi4uN2YyNjJmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvYW5hdG9wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvYW5hdG9wLmMKQEAgLTMwLDggKzMwLDExIEBACiAjZGVmaW5lIEFOQURJR19ESUdQUk9HX0lNWDZTTAkweDI4MAogCiAjZGVmaW5lIEJNX0FOQURJR19SRUdfMlA1X0VOQUJMRV9XRUFLX0xJTlJFRwkweDQwMDAwCisjZGVmaW5lIEJNX0FOQURJR19SRUdfMlA1X0VOQUJMRV9QVUxMRE9XTgkweDgKICNkZWZpbmUgQk1fQU5BRElHX1JFR19DT1JFX0ZFVF9PRFJJVkUJCTB4MjAwMDAwMDAKICNkZWZpbmUgQk1fQU5BRElHX0FOQV9NSVNDMF9TVE9QX01PREVfQ09ORklHCTB4MTAwMAorLyogQmVsb3cgTUlTQzBfRElTQ09OX0hJR0hfU05WUyBpcyBvbmx5IGZvciBpLk1YNlNMICovCisjZGVmaW5lIEJNX0FOQURJR19BTkFfTUlTQzBfRElTQ09OX0hJR0hfU05WUwkweDIwMDAKICNkZWZpbmUgQk1fQU5BRElHX1VTQl9DSFJHX0RFVEVDVF9DSEtfQ0hSR19CCTB4ODAwMDAKICNkZWZpbmUgQk1fQU5BRElHX1VTQl9DSFJHX0RFVEVDVF9FTl9CCQkweDEwMDAwMAogCkBAIC01NiwxNiArNTksNDMgQEAKIAkJQk1fQU5BRElHX1JFR19DT1JFX0ZFVF9PRFJJVkUpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaW14X2FuYXRvcF9lbmFibGVfMnA1X3B1bGxkb3duKGJvb2wgZW5hYmxlKQoreworCXJlZ21hcF93cml0ZShhbmF0b3AsIEFOQURJR19SRUdfMlA1ICsgKGVuYWJsZSA/IFJFR19TRVQgOiBSRUdfQ0xSKSwKKwkJQk1fQU5BRElHX1JFR18yUDVfRU5BQkxFX1BVTExET1dOKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlteF9hbmF0b3BfZGlzY29ubmVjdF9oaWdoX3NudnMoYm9vbCBlbmFibGUpCit7CisJcmVnbWFwX3dyaXRlKGFuYXRvcCwgQU5BRElHX0FOQV9NSVNDMCArIChlbmFibGUgPyBSRUdfU0VUIDogUkVHX0NMUiksCisJCUJNX0FOQURJR19BTkFfTUlTQzBfRElTQ09OX0hJR0hfU05WUyk7Cit9CisKIHZvaWQgaW14X2FuYXRvcF9wcmVfc3VzcGVuZCh2b2lkKQogewotCWlteF9hbmF0b3BfZW5hYmxlX3dlYWsycDUodHJ1ZSk7CisJaWYgKGlteF9tbWRjX2dldF9kZHJfdHlwZSgpID09IElNWF9ERFJfVFlQRV9MUEREUjIpCisJCWlteF9hbmF0b3BfZW5hYmxlXzJwNV9wdWxsZG93bih0cnVlKTsKKwllbHNlCisJCWlteF9hbmF0b3BfZW5hYmxlX3dlYWsycDUodHJ1ZSk7CisKIAlpbXhfYW5hdG9wX2VuYWJsZV9mZXRfb2RyaXZlKHRydWUpOworCisJaWYgKGNwdV9pc19pbXg2c2woKSkKKwkJaW14X2FuYXRvcF9kaXNjb25uZWN0X2hpZ2hfc252cyh0cnVlKTsKIH0KIAogdm9pZCBpbXhfYW5hdG9wX3Bvc3RfcmVzdW1lKHZvaWQpCiB7CisJaWYgKGlteF9tbWRjX2dldF9kZHJfdHlwZSgpID09IElNWF9ERFJfVFlQRV9MUEREUjIpCisJCWlteF9hbmF0b3BfZW5hYmxlXzJwNV9wdWxsZG93bihmYWxzZSk7CisJZWxzZQorCQlpbXhfYW5hdG9wX2VuYWJsZV93ZWFrMnA1KGZhbHNlKTsKKwogCWlteF9hbmF0b3BfZW5hYmxlX2ZldF9vZHJpdmUoZmFsc2UpOwotCWlteF9hbmF0b3BfZW5hYmxlX3dlYWsycDUoZmFsc2UpOworCisJaWYgKGNwdV9pc19pbXg2c2woKSkKKwkJaW14X2FuYXRvcF9kaXNjb25uZWN0X2hpZ2hfc252cyhmYWxzZSk7CisKIH0KIAogc3RhdGljIHZvaWQgaW14X2FuYXRvcF91c2JfY2hyZ19kZXRlY3RfZGlzYWJsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWNwdS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWNwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMWMzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstY3B1LmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTHVjYXMgU3RhY2ggPGwuc3RhY2hAcGVuZ3V0cm9uaXguZGU+LCBQZW5ndXRyb25peAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCitzdHJ1Y3QgY2xrX2NwdSB7CisJc3RydWN0IGNsa19odwlodzsKKwlzdHJ1Y3QgY2xrCSpkaXY7CisJc3RydWN0IGNsawkqbXV4OworCXN0cnVjdCBjbGsJKnBsbDsKKwlzdHJ1Y3QgY2xrCSpzdGVwOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrX2NwdSAqdG9fY2xrX2NwdShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgY2xrX2NwdSwgaHcpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfY3B1X3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xrX2NwdSAqY3B1ID0gdG9fY2xrX2NwdShodyk7CisKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNwdS0+ZGl2KTsKK30KKworc3RhdGljIGxvbmcgY2xrX2NwdV9yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqcHJhdGUpCit7CisJc3RydWN0IGNsa19jcHUgKmNwdSA9IHRvX2Nsa19jcHUoaHcpOworCisJcmV0dXJuIGNsa19yb3VuZF9yYXRlKGNwdS0+cGxsLCByYXRlKTsKK30KKworc3RhdGljIGludCBjbGtfY3B1X3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xrX2NwdSAqY3B1ID0gdG9fY2xrX2NwdShodyk7CisJaW50IHJldDsKKworCS8qIHN3aXRjaCB0byBQTEwgYnlwYXNzIGNsb2NrICovCisJcmV0ID0gY2xrX3NldF9wYXJlbnQoY3B1LT5tdXgsIGNwdS0+c3RlcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHJlcHJvZ3JhbSBQTEwgKi8KKwlyZXQgPSBjbGtfc2V0X3JhdGUoY3B1LT5wbGwsIHJhdGUpOworCWlmIChyZXQpIHsKKwkJY2xrX3NldF9wYXJlbnQoY3B1LT5tdXgsIGNwdS0+cGxsKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLyogc3dpdGNoIGJhY2sgdG8gUExMIGNsb2NrICovCisJY2xrX3NldF9wYXJlbnQoY3B1LT5tdXgsIGNwdS0+cGxsKTsKKworCS8qIEVuc3VyZSB0aGUgZGl2aWRlciBpcyB3aGF0IHdlIGV4cGVjdCAqLworCWNsa19zZXRfcmF0ZShjcHUtPmRpdiwgcmF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGNsa19jcHVfb3BzID0geworCS5yZWNhbGNfcmF0ZQk9IGNsa19jcHVfcmVjYWxjX3JhdGUsCisJLnJvdW5kX3JhdGUJPSBjbGtfY3B1X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gY2xrX2NwdV9zZXRfcmF0ZSwKK307CisKK3N0cnVjdCBjbGsgKmlteF9jbGtfY3B1KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAorCQlzdHJ1Y3QgY2xrICpkaXYsIHN0cnVjdCBjbGsgKm11eCwgc3RydWN0IGNsayAqcGxsLAorCQlzdHJ1Y3QgY2xrICpzdGVwKQoreworCXN0cnVjdCBjbGtfY3B1ICpjcHU7CisJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7CisKKwljcHUgPSBremFsbG9jKHNpemVvZigqY3B1KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcHUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJY3B1LT5kaXYgPSBkaXY7CisJY3B1LT5tdXggPSBtdXg7CisJY3B1LT5wbGwgPSBwbGw7CisJY3B1LT5zdGVwID0gc3RlcDsKKworCWluaXQubmFtZSA9IG5hbWU7CisJaW5pdC5vcHMgPSAmY2xrX2NwdV9vcHM7CisJaW5pdC5mbGFncyA9IDA7CisJaW5pdC5wYXJlbnRfbmFtZXMgPSAmcGFyZW50X25hbWU7CisJaW5pdC5udW1fcGFyZW50cyA9IDE7CisKKwljcHUtPmh3LmluaXQgPSAmaW5pdDsKKworCWNsayA9IGNsa19yZWdpc3RlcihOVUxMLCAmY3B1LT5odyk7CisJaWYgKElTX0VSUihjbGspKQorCQlrZnJlZShjcHUpOworCisJcmV0dXJuIGNsazsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg1MS1pbXg1My5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDUxLWlteDUzLmMKaW5kZXggNzJkNjUyMS4uMGY3ZTUzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDUxLWlteDUzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDUxLWlteDUzLmMKQEAgLTEyNSw2ICsxMjUsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKnNwZGlmX3NlbFtdID0geyAicGxsMV9zdyIsICJwbGwyX3N3IiwgInBsbDNfc3ciLCAic3BkaWZfeHRhbF9zZWwiLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnNwZGlmMF9jb21fc2VsW10gPSB7ICJzcGRpZjBfcG9kZiIsICJzc2kxX3Jvb3RfZ2F0ZSIsIH07CiBzdGF0aWMgY29uc3QgY2hhciAqbXg1MV9zcGRpZjFfY29tX3NlbFtdID0geyAic3BkaWYxX3BvZGYiLCAic3NpMl9yb290X2dhdGUiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnN0ZXBfc2Vsc1tdID0geyAibHBfYXBtIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVfcG9kZl9zZWxzW10gPSB7ICJwbGwxX3N3IiwgInN0ZXBfc2VsIiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrW0lNWDVfQ0xLX0VORF07CiBzdGF0aWMgc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgY2xrX2RhdGE7CkBAIC0xOTMsNyArMTk1LDkgQEAKIAljbGtbSU1YNV9DTEtfVVNCX1BIWV9QT0RGXQk9IGlteF9jbGtfZGl2aWRlcigidXNiX3BoeV9wb2RmIiwgInVzYl9waHlfcHJlZCIsIE1YQ19DQ01fQ0RDRFIsIDAsIDMpOwogCWNsa1tJTVg1X0NMS19VU0JfUEhZX1NFTF0JPSBpbXhfY2xrX211eCgidXNiX3BoeV9zZWwiLCBNWENfQ0NNX0NTQ01SMSwgMjYsIDEsCiAJCQkJCQl1c2JfcGh5X3NlbF9zdHIsIEFSUkFZX1NJWkUodXNiX3BoeV9zZWxfc3RyKSk7Ci0JY2xrW0lNWDVfQ0xLX0NQVV9QT0RGXQkJPSBpbXhfY2xrX2RpdmlkZXIoImNwdV9wb2RmIiwgInBsbDFfc3ciLCBNWENfQ0NNX0NBQ1JSLCAwLCAzKTsKKwljbGtbSU1YNV9DTEtfU1RFUF9TRUxdCQk9IGlteF9jbGtfbXV4KCJzdGVwX3NlbCIsIE1YQ19DQ01fQ0NTUiwgNywgMiwgc3RlcF9zZWxzLCBBUlJBWV9TSVpFKHN0ZXBfc2VscykpOworCWNsa1tJTVg1X0NMS19DUFVfUE9ERl9TRUxdCT0gaW14X2Nsa19tdXgoImNwdV9wb2RmX3NlbCIsIE1YQ19DQ01fQ0NTUiwgMiwgMSwgY3B1X3BvZGZfc2VscywgQVJSQVlfU0laRShjcHVfcG9kZl9zZWxzKSk7CisJY2xrW0lNWDVfQ0xLX0NQVV9QT0RGXQkJPSBpbXhfY2xrX2RpdmlkZXIoImNwdV9wb2RmIiwgImNwdV9wb2RmX3NlbCIsIE1YQ19DQ01fQ0FDUlIsIDAsIDMpOwogCWNsa1tJTVg1X0NMS19ESV9QUkVEXQkJPSBpbXhfY2xrX2RpdmlkZXIoImRpX3ByZWQiLCAicGxsM19zdyIsIE1YQ19DQ01fQ0RDRFIsIDYsIDMpOwogCWNsa1tJTVg1X0NMS19JSU1fR0FURV0JCT0gaW14X2Nsa19nYXRlMigiaWltX2dhdGUiLCAiaXBnIiwgTVhDX0NDTV9DQ0dSMCwgMzApOwogCWNsa1tJTVg1X0NMS19VQVJUMV9JUEdfR0FURV0JPSBpbXhfY2xrX2dhdGUyKCJ1YXJ0MV9pcGdfZ2F0ZSIsICJpcGciLCBNWENfQ0NNX0NDR1IxLCA2KTsKQEAgLTUzNyw2ICs1NDEsMTEgQEAKIAljbGtbSU1YNV9DTEtfQ0tPMl0JCT0gaW14X2Nsa19nYXRlMigiY2tvMiIsICJja28yX3BvZGYiLCBNWENfQ0NNX0NDT1NSLCAyNCk7CiAJY2xrW0lNWDVfQ0xLX1NQRElGX1hUQUxfU0VMXQk9IGlteF9jbGtfbXV4KCJzcGRpZl94dGFsX3NlbCIsIE1YQ19DQ01fQ1NDTVIxLCAyLCAyLAogCQkJCQkJbXg1M19zcGRpZl94dGFsX3NlbCwgQVJSQVlfU0laRShteDUzX3NwZGlmX3h0YWxfc2VsKSk7CisJY2xrW0lNWDVfQ0xLX0FSTV0JCT0gaW14X2Nsa19jcHUoImFybSIsICJjcHVfcG9kZiIsCisJCQkJCQljbGtbSU1YNV9DTEtfQ1BVX1BPREZdLAorCQkJCQkJY2xrW0lNWDVfQ0xLX0NQVV9QT0RGX1NFTF0sCisJCQkJCQljbGtbSU1YNV9DTEtfUExMMV9TV10sCisJCQkJCQljbGtbSU1YNV9DTEtfU1RFUF9TRUxdKTsKIAogCWlteF9jaGVja19jbG9ja3MoY2xrLCBBUlJBWV9TSVpFKGNsaykpOwogCkBAIC01NTEsNiArNTYwLDkgQEAKIAkvKiBtb3ZlIGNhbiBidXMgY2xrIHRvIDI0TUh6ICovCiAJY2xrX3NldF9wYXJlbnQoY2xrW0lNWDVfQ0xLX0NBTl9TRUxdLCBjbGtbSU1YNV9DTEtfTFBfQVBNXSk7CiAKKwkvKiBtYWtlIHN1cmUgc3RlcCBjbG9jayBpcyBydW5uaW5nIGZyb20gMjRNSHogKi8KKwljbGtfc2V0X3BhcmVudChjbGtbSU1YNV9DTEtfU1RFUF9TRUxdLCBjbGtbSU1YNV9DTEtfTFBfQVBNXSk7CisKIAljbGtfcHJlcGFyZV9lbmFibGUoY2xrW0lNWDVfQ0xLX0lJTV9HQVRFXSk7CiAJaW14X3ByaW50X3NpbGljb25fcmV2KCJpLk1YNTMiLCBteDUzX3JldmlzaW9uKCkpOwogCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGtbSU1YNV9DTEtfSUlNX0dBVEVdKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsay1pbXg2cS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZxLmMKaW5kZXggNGU3OWRhNy4uNTk1MTY2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLWlteDZxLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQlwb3N0X2Rpdl90YWJsZVsyXS5kaXYgPSAxOwogCQl2aWRlb19kaXZfdGFibGVbMV0uZGl2ID0gMTsKIAkJdmlkZW9fZGl2X3RhYmxlWzJdLmRpdiA9IDE7Ci0JfTsKKwl9CiAKIAljbGtbSU1YNlFETF9QTEwxX0JZUEFTU19TUkNdID0gaW14X2Nsa19tdXgoInBsbDFfYnlwYXNzX3NyYyIsIGJhc2UgKyAweDAwLCAxNCwgMiwgcGxsX2J5cGFzc19zcmNfc2VscywgQVJSQVlfU0laRShwbGxfYnlwYXNzX3NyY19zZWxzKSk7CiAJY2xrW0lNWDZRRExfUExMMl9CWVBBU1NfU1JDXSA9IGlteF9jbGtfbXV4KCJwbGwyX2J5cGFzc19zcmMiLCBiYXNlICsgMHgzMCwgMTQsIDIsIHBsbF9ieXBhc3Nfc3JjX3NlbHMsIEFSUkFZX1NJWkUocGxsX2J5cGFzc19zcmNfc2VscykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXBsbHYzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstcGxsdjMuYwppbmRleCA1N2RlNzRkLi4wYWQ2ZTU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGstcGxsdjMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstcGxsdjMuYwpAQCAtNjksNyArNjksNiBAQAogewogCXN0cnVjdCBjbGtfcGxsdjMgKnBsbCA9IHRvX2Nsa19wbGx2Myhodyk7CiAJdTMyIHZhbDsKLQlpbnQgcmV0OwogCiAJdmFsID0gcmVhZGxfcmVsYXhlZChwbGwtPmJhc2UpOwogCWlmIChwbGwtPnBvd2VydXBfc2V0KQpAQCAtNzgsMTEgKzc3LDcgQEAKIAkJdmFsICY9IH5CTV9QTExfUE9XRVI7CiAJd3JpdGVsX3JlbGF4ZWQodmFsLCBwbGwtPmJhc2UpOwogCi0JcmV0ID0gY2xrX3BsbHYzX3dhaXRfbG9jayhwbGwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2xrX3BsbHYzX3dhaXRfbG9jayhwbGwpOwogfQogCiBzdGF0aWMgdm9pZCBjbGtfcGxsdjNfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLXZmNjEwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstdmY2MTAuYwppbmRleCA0MDk2MzcyLi41OTM3ZGRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGstdmY2MTAuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGstdmY2MTAuYwpAQCAtMTIwLDYgKzEyMCwxNyBAQAogCVZGNjEwX0NMS19ERFJfU0VMLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgKiBfX2luaXQgdmY2MTBfZ2V0X2ZpeGVkX2Nsb2NrKAorCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNsayAqY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKGNjbV9ub2RlLCBuYW1lKTsKKworCS8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaWYgZGV2aWNlIHRyZWUgaXMgbWlzc2luZyBjbGtzIGFzc2lnbm1lbnRzICovCisJaWYgKElTX0VSUihjbGspKQorCQljbGsgPSBpbXhfb2J0YWluX2ZpeGVkX2Nsb2NrKG5hbWUsIDApOworCXJldHVybiBjbGs7Cit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgdmY2MTBfY2xvY2tzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjY21fbm9kZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpAQCAtMTMwLDEzICsxNDEsMTMgQEAKIAljbGtbVkY2MTBfQ0xLX1NJUkNfMzJLXSA9IGlteF9jbGtfZml4ZWQoInNpcmNfMzJrIiwgMzIwMDApOwogCWNsa1tWRjYxMF9DTEtfRklSQ10gPSBpbXhfY2xrX2ZpeGVkKCJmaXJjIiwgMjQwMDAwMDApOwogCi0JY2xrW1ZGNjEwX0NMS19TWE9TQ10gPSBpbXhfb2J0YWluX2ZpeGVkX2Nsb2NrKCJzeG9zYyIsIDApOwotCWNsa1tWRjYxMF9DTEtfRlhPU0NdID0gaW14X29idGFpbl9maXhlZF9jbG9jaygiZnhvc2MiLCAwKTsKLQljbGtbVkY2MTBfQ0xLX0FVRElPX0VYVF0gPSBpbXhfb2J0YWluX2ZpeGVkX2Nsb2NrKCJhdWRpb19leHQiLCAwKTsKLQljbGtbVkY2MTBfQ0xLX0VORVRfRVhUXSA9IGlteF9vYnRhaW5fZml4ZWRfY2xvY2soImVuZXRfZXh0IiwgMCk7CisJY2xrW1ZGNjEwX0NMS19TWE9TQ10gPSB2ZjYxMF9nZXRfZml4ZWRfY2xvY2soY2NtX25vZGUsICJzeG9zYyIpOworCWNsa1tWRjYxMF9DTEtfRlhPU0NdID0gdmY2MTBfZ2V0X2ZpeGVkX2Nsb2NrKGNjbV9ub2RlLCAiZnhvc2MiKTsKKwljbGtbVkY2MTBfQ0xLX0FVRElPX0VYVF0gPSB2ZjYxMF9nZXRfZml4ZWRfY2xvY2soY2NtX25vZGUsICJhdWRpb19leHQiKTsKKwljbGtbVkY2MTBfQ0xLX0VORVRfRVhUXSA9IHZmNjEwX2dldF9maXhlZF9jbG9jayhjY21fbm9kZSwgImVuZXRfZXh0Iik7CiAKIAkvKiBDbG9jayBzb3VyY2UgZnJvbSBleHRlcm5hbCBjbG9jayB2aWEgTFZEcyBQQUQgKi8KLQljbGtbVkY2MTBfQ0xLX0FOQUNMSzFdID0gaW14X29idGFpbl9maXhlZF9jbG9jaygiYW5hY2xrMSIsIDApOworCWNsa1tWRjYxMF9DTEtfQU5BQ0xLMV0gPSB2ZjYxMF9nZXRfZml4ZWRfY2xvY2soY2NtX25vZGUsICJhbmFjbGsxIik7CiAKIAljbGtbVkY2MTBfQ0xLX0ZYT1NDX0hBTEZdID0gaW14X2Nsa19maXhlZF9mYWN0b3IoImZ4b3NjX2hhbGYiLCAiZnhvc2MiLCAxLCAyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY2xrLmggYi9hcmNoL2FybS9tYWNoLWlteC9jbGsuaAppbmRleCA0Y2RmOGI2Li41ZWY4MmUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbGsuaAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbGsuaApAQCAtMTMxLDQgKzEzMSw4IEBACiAJCQlDTEtfU0VUX1JBVEVfUEFSRU5ULCBtdWx0LCBkaXYpOwogfQogCitzdHJ1Y3QgY2xrICppbXhfY2xrX2NwdShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKKwkJc3RydWN0IGNsayAqZGl2LCBzdHJ1Y3QgY2xrICptdXgsIHN0cnVjdCBjbGsgKnBsbCwKKwkJc3RydWN0IGNsayAqc3RlcCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWlteC9jb21tb24uaAppbmRleCAxZGFiZjQzLi5jZmNkYjYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9jb21tb24uaApAQCAtNjEsNyArNjEsNiBAQAogdm9pZCBteGNfc2V0X2NwdV90eXBlKHVuc2lnbmVkIGludCB0eXBlKTsKIHZvaWQgbXhjX3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSwgY29uc3QgY2hhciAqKTsKIHZvaWQgbXhjX2FyY2hfcmVzZXRfaW5pdCh2b2lkIF9faW9tZW0gKik7Ci12b2lkIG14Y19hcmNoX3Jlc2V0X2luaXRfZHQodm9pZCk7CiBpbnQgbXg1MV9yZXZpc2lvbih2b2lkKTsKIGludCBteDUzX3JldmlzaW9uKHZvaWQpOwogdm9pZCBpbXhfc2V0X2FpcHModm9pZCBfX2lvbWVtICopOwpAQCAtMTA4LDE0ICsxMDcsMTUgQEAKIHZvaWQgaW14X2dwY19wb3N0X3Jlc3VtZSh2b2lkKTsKIHZvaWQgaW14X2dwY19tYXNrX2FsbCh2b2lkKTsKIHZvaWQgaW14X2dwY19yZXN0b3JlX2FsbCh2b2lkKTsKLXZvaWQgaW14X2dwY19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpOwotdm9pZCBpbXhfZ3BjX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKTsKK3ZvaWQgaW14X2dwY19od2lycV9tYXNrKHVuc2lnbmVkIGludCBod2lycSk7Cit2b2lkIGlteF9ncGNfaHdpcnFfdW5tYXNrKHVuc2lnbmVkIGludCBod2lycSk7CiB2b2lkIGlteF9hbmF0b3BfaW5pdCh2b2lkKTsKIHZvaWQgaW14X2FuYXRvcF9wcmVfc3VzcGVuZCh2b2lkKTsKIHZvaWQgaW14X2FuYXRvcF9wb3N0X3Jlc3VtZSh2b2lkKTsKIGludCBpbXg2cV9zZXRfbHBtKGVudW0gbXhjX2NwdV9wd3JfbW9kZSBtb2RlKTsKIHZvaWQgaW14NnFfc2V0X2ludF9tZW1fY2xrX2xwbShib29sIGVuYWJsZSk7CiB2b2lkIGlteDZzbF9zZXRfd2FpdF9jbGsoYm9vbCBlbnRlcik7CitpbnQgaW14X21tZGNfZ2V0X2Rkcl90eXBlKHZvaWQpOwogCiB2b2lkIGlteF9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwogaW50IGlteF9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KTsKQEAgLTE1Nyw1ICsxNTcsNiBAQAogI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgaW14X3NtcF9vcHM7CitleHRlcm4gc3RydWN0IHNtcF9vcGVyYXRpb25zIGxzMTAyMWFfc21wX29wczsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jcHVpZGxlLWlteDUuYyBiL2FyY2gvYXJtL21hY2gtaW14L2NwdWlkbGUtaW14NS5jCmluZGV4IDVhNDdlM2MuLjNmZWNhNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2NwdWlkbGUtaW14NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2NwdWlkbGUtaW14NS5jCkBAIC0yNCw3ICsyNCw2IEBACiAJCS5lbnRlciAgICAgICAgICAgID0gaW14NV9jcHVpZGxlX2VudGVyLAogCQkuZXhpdF9sYXRlbmN5ICAgICA9IDIsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMSwKLQkJLmZsYWdzICAgICAgICAgICAgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKIAkJLm5hbWUgICAgICAgICAgICAgPSAiSU1YNSBTUlBHIiwKIAkJLmRlc2MgICAgICAgICAgICAgPSAiQ1BVIHN0YXRlIHJldGFpbmVkLHBvd2VyZWQgb2ZmIiwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY3B1aWRsZS1pbXg2cS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY3B1aWRsZS1pbXg2cS5jCmluZGV4IGFhOTM1NzguLmQ3NmQwODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2NwdWlkbGUtaW14NnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jcHVpZGxlLWlteDZxLmMKQEAgLTUzLDggKzUzLDcgQEAKIAkJewogCQkJLmV4aXRfbGF0ZW5jeSA9IDUwLAogCQkJLnRhcmdldF9yZXNpZGVuY3kgPSA3NSwKLQkJCS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwKLQkJCSAgICAgICAgIENQVUlETEVfRkxBR19USU1FUl9TVE9QLAorCQkJLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVSX1NUT1AsCiAJCQkuZW50ZXIgPSBpbXg2cV9lbnRlcl93YWl0LAogCQkJLm5hbWUgPSAiV0FJVCIsCiAJCQkuZGVzYyA9ICJDbG9jayBvZmYiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY3B1aWRsZS1pbXg2c2wuYyBiL2FyY2gvYXJtL21hY2gtaW14L2NwdWlkbGUtaW14NnNsLmMKaW5kZXggZDRiNmI4MS4uN2Q5MmU2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvY3B1aWRsZS1pbXg2c2wuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jcHVpZGxlLWlteDZzbC5jCkBAIC00MCw4ICs0MCw3IEBACiAJCXsKIAkJCS5leGl0X2xhdGVuY3kgPSA1MCwKIAkJCS50YXJnZXRfcmVzaWRlbmN5ID0gNzUsCi0JCQkuZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8Ci0JCQkJQ1BVSURMRV9GTEFHX1RJTUVSX1NUT1AsCisJCQkuZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRVJfU1RPUCwKIAkJCS5lbnRlciA9IGlteDZzbF9lbnRlcl93YWl0LAogCQkJLm5hbWUgPSAiV0FJVCIsCiAJCQkuZGVzYyA9ICJDbG9jayBvZmYiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZ3BjLmMgYi9hcmNoL2FybS9tYWNoLWlteC9ncGMuYwppbmRleCA4MmVhNzRlLi41ZjM2MDJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9ncGMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9ncGMuYwpAQCAtNTYsMTQgKzU2LDE0IEBACiAKIHN0YXRpYyBpbnQgaW14X2dwY19pcnFfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgb24pCiB7Ci0JdW5zaWduZWQgaW50IGlkeCA9IGQtPmlycSAvIDMyIC0gMTsKKwl1bnNpZ25lZCBpbnQgaWR4ID0gZC0+aHdpcnEgLyAzMiAtIDE7CiAJdTMyIG1hc2s7CiAKIAkvKiBTYW5pdHkgY2hlY2sgZm9yIFNQSSBpcnEgKi8KLQlpZiAoZC0+aXJxIDwgMzIpCisJaWYgKGQtPmh3aXJxIDwgMzIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWFzayA9IDEgPDwgZC0+aXJxICUgMzI7CisJbWFzayA9IDEgPDwgZC0+aHdpcnEgJSAzMjsKIAlncGNfd2FrZV9pcnFzW2lkeF0gPSBvbiA/IGdwY193YWtlX2lycXNbaWR4XSB8IG1hc2sgOgogCQkJCSAgZ3BjX3dha2VfaXJxc1tpZHhdICYgfm1hc2s7CiAKQEAgLTkxLDM0ICs5MSw0NCBAQAogCQl3cml0ZWxfcmVsYXhlZChncGNfc2F2ZWRfaW1yc1tpXSwgcmVnX2ltcjEgKyBpICogNCk7CiB9CiAKLXZvaWQgaW14X2dwY19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3ZvaWQgaW14X2dwY19od2lycV91bm1hc2sodW5zaWduZWQgaW50IGh3aXJxKQogewogCXZvaWQgX19pb21lbSAqcmVnOwogCXUzMiB2YWw7CiAKLQkvKiBTYW5pdHkgY2hlY2sgZm9yIFNQSSBpcnEgKi8KLQlpZiAoZC0+aXJxIDwgMzIpCi0JCXJldHVybjsKLQotCXJlZyA9IGdwY19iYXNlICsgR1BDX0lNUjEgKyAoZC0+aXJxIC8gMzIgLSAxKSAqIDQ7CisJcmVnID0gZ3BjX2Jhc2UgKyBHUENfSU1SMSArIChod2lycSAvIDMyIC0gMSkgKiA0OwogCXZhbCA9IHJlYWRsX3JlbGF4ZWQocmVnKTsKLQl2YWwgJj0gfigxIDw8IGQtPmlycSAlIDMyKTsKKwl2YWwgJj0gfigxIDw8IGh3aXJxICUgMzIpOwogCXdyaXRlbF9yZWxheGVkKHZhbCwgcmVnKTsKIH0KIAotdm9pZCBpbXhfZ3BjX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3ZvaWQgaW14X2dwY19od2lycV9tYXNrKHVuc2lnbmVkIGludCBod2lycSkKIHsKIAl2b2lkIF9faW9tZW0gKnJlZzsKIAl1MzIgdmFsOwogCisJcmVnID0gZ3BjX2Jhc2UgKyBHUENfSU1SMSArIChod2lycSAvIDMyIC0gMSkgKiA0OworCXZhbCA9IHJlYWRsX3JlbGF4ZWQocmVnKTsKKwl2YWwgfD0gMSA8PCAoaHdpcnEgJSAzMik7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBpbXhfZ3BjX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQorewogCS8qIFNhbml0eSBjaGVjayBmb3IgU1BJIGlycSAqLwotCWlmIChkLT5pcnEgPCAzMikKKwlpZiAoZC0+aHdpcnEgPCAzMikKIAkJcmV0dXJuOwogCi0JcmVnID0gZ3BjX2Jhc2UgKyBHUENfSU1SMSArIChkLT5pcnEgLyAzMiAtIDEpICogNDsKLQl2YWwgPSByZWFkbF9yZWxheGVkKHJlZyk7Ci0JdmFsIHw9IDEgPDwgKGQtPmlycSAlIDMyKTsKLQl3cml0ZWxfcmVsYXhlZCh2YWwsIHJlZyk7CisJaW14X2dwY19od2lycV91bm1hc2soZC0+aHdpcnEpOworfQorCitzdGF0aWMgdm9pZCBpbXhfZ3BjX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwkvKiBTYW5pdHkgY2hlY2sgZm9yIFNQSSBpcnEgKi8KKwlpZiAoZC0+aHdpcnEgPCAzMikKKwkJcmV0dXJuOworCisJaW14X2dwY19od2lycV9tYXNrKGQtPmh3aXJxKTsKIH0KIAogdm9pZCBfX2luaXQgaW14X2dwY19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pbXgyNS1kdC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjUtZHQuYwppbmRleCBjZjgwMzJiLi4yNWRlZmJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9pbXgyNS1kdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDI1LWR0LmMKQEAgLTE3LDEzICsxNyw2IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAibXgyNS5oIgogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW14MjVfZHRfaW5pdCh2b2lkKQotewotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKLQotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbXgyNV9kdF9ib2FyZF9jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKIAkiZnNsLGlteDI1IiwKIAlOVUxMCkBAIC0zMyw3ICsyNiw1IEBACiAJLm1hcF9pbwkJPSBteDI1X21hcF9pbywKIAkuaW5pdF9lYXJseQk9IGlteDI1X2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gbXgyNV9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lCT0gaW14MjVfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gaW14MjVfZHRfYm9hcmRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjctZHQuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDI3LWR0LmMKaW5kZXggZGM4ZjFhNi4uYmQ0MmQxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MjctZHQuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgyNy1kdC5jCkBAIC0yMiw4ICsyMiw2IEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGRldmluZm8gPSB7IC5uYW1lID0gImNwdWZyZXEtZHQiLCB9OwogCi0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwotCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJmRldmluZm8pOwpAQCAtNDAsNSArMzgsNCBAQAogCS5pbml0X2lycQk9IG14MjdfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGlteDI3X2R0X2luaXQsCiAJLmR0X2NvbXBhdAk9IGlteDI3X2R0X2JvYXJkX2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lteDMxLWR0LmMgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgzMS1kdC5jCmluZGV4IDQxOGRiYzguLjMyMTAwMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2lteDMxLWR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzEtZHQuYwpAQCAtMTgsMTMgKzE4LDYgQEAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJteDMxLmgiCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpbXgzMV9kdF9pbml0KHZvaWQpCi17Ci0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwotCi0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlteDMxX2R0X2JvYXJkX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewogCSJmc2wsaW14MzEiLAogCU5VTEwKQEAgLTQwLDcgKzMzLDUgQEAKIAkuaW5pdF9lYXJseQk9IGlteDMxX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gbXgzMV9pbml0X2lycSwKIAkuaW5pdF90aW1lCT0gaW14MzFfZHRfdGltZXJfaW5pdCwKLQkuaW5pdF9tYWNoaW5lCT0gaW14MzFfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gaW14MzFfZHRfYm9hcmRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzUtZHQuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lteDM1LWR0LmMKaW5kZXggNTg0ZmJlMS4uZTkzOTYwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW14MzUtZHQuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pbXgzNS1kdC5jCkBAIC0yMCwxNCArMjAsNiBAQAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgIm14MzUuaCIKIAotc3RhdGljIHZvaWQgX19pbml0IGlteDM1X2R0X2luaXQodm9pZCkKLXsKLQlteGNfYXJjaF9yZXNldF9pbml0X2R0KCk7Ci0KLQlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwKLQkJCSAgICAgTlVMTCwgTlVMTCk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBpbXgzNV9pcnFfaW5pdCh2b2lkKQogewogCWlteF9pbml0X2wyY2FjaGUoKTsKQEAgLTQzLDcgKzM1LDUgQEAKIAkubWFwX2lvCQk9IG14MzVfbWFwX2lvLAogCS5pbml0X2Vhcmx5CT0gaW14MzVfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBpbXgzNV9pcnFfaW5pdCwKLQkuaW5pdF9tYWNoaW5lCT0gaW14MzVfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gaW14MzVfZHRfYm9hcmRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtaW14MzEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lvbXV4LWlteDMxLmMKaW5kZXggMTY1N2ZlNi4uZDZhMzA3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtaW14MzEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pb211eC1pbXgzMS5jCkBAIC00NCw5ICs0NCwxMSBAQAogLyoKICAqIHNldCB0aGUgbW9kZSBmb3IgYSBJT01VWCBwaW4uCiAgKi8KLWludCBteGNfaW9tdXhfbW9kZSh1bnNpZ25lZCBpbnQgcGluX21vZGUpCit2b2lkIG14Y19pb211eF9tb2RlKHVuc2lnbmVkIGludCBwaW5fbW9kZSkKIHsKLQl1MzIgZmllbGQsIGwsIG1vZGUsIHJldCA9IDA7CisJdTMyIGZpZWxkOworCXUzMiBsOworCXUzMiBtb2RlOwogCXZvaWQgX19pb21lbSAqcmVnOwogCiAJcmVnID0gSU9NVVhTV19NVVhfQ1RMICsgKHBpbl9tb2RlICYgSU9NVVhfUkVHX01BU0spOwpAQCAtNjEsOCArNjMsNiBAQAogCV9fcmF3X3dyaXRlbChsLCByZWcpOwogCiAJc3Bpbl91bmxvY2soJmdwaW9fbXV4X2xvY2spOwotCi0JcmV0dXJuIHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2lvbXV4LW14My5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtbXgzLmgKaW5kZXggZjc5Zjc4YS4uMGE1YWRiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtbXgzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW9tdXgtbXgzLmgKQEAgLTE0NCw3ICsxNDQsNyBAQAogICogSXQgaXMgY2FsbGVkIGJ5IHRoZSBzZXR1cCBmdW5jdGlvbnMgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGFueW1vcmUuCiAgKiBJdCBpcyBoZXJlIHZpc2libGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAqLwotaW50IG14Y19pb211eF9tb2RlKHVuc2lnbmVkIGludCBwaW5fbW9kZSk7Cit2b2lkIG14Y19pb211eF9tb2RlKHVuc2lnbmVkIGludCBwaW5fbW9kZSk7CiAKICNkZWZpbmUgSU9NVVhfUEFETlVNX01BU0sJMHgxZmYKICNkZWZpbmUgSU9NVVhfR1BJT05VTV9TSElGVAk5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUwLmMKaW5kZXggYjFlNTZhOS4uZWNmNThiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTAuYwpAQCAtMTYsMTMgKzE2LDYgQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW14NTBfZHRfaW5pdCh2b2lkKQotewotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKLQotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbXg1MF9kdF9ib2FyZF9jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKIAkiZnNsLGlteDUwIiwKIAlOVUxMCkBAIC0zMCw3ICsyMyw1IEBACiAKIERUX01BQ0hJTkVfU1RBUlQoSU1YNTBfRFQsICJGcmVlc2NhbGUgaS5NWDUwIChEZXZpY2UgVHJlZSBTdXBwb3J0KSIpCiAJLmluaXRfaXJxCT0gdHppY19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lCT0gaW14NTBfZHRfaW5pdCwKIAkuZHRfY29tcGF0CT0gaW14NTBfZHRfYm9hcmRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1MS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1MS5jCmluZGV4IDJjNWZjYWYuLmIwMTUxMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUxLmMKQEAgLTUzLDcgKzUzLDYgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gZGV2aW5mbyA9IHsgLm5hbWUgPSAiY3B1ZnJlcS1kdCIsIH07CiAKLQlteGNfYXJjaF9yZXNldF9pbml0X2R0KCk7CiAJaW14NTFfaXB1X21pcGlfc2V0dXAoKTsKIAlpbXhfc3JjX2luaXQoKTsKIApAQCAtNzgsNSArNzcsNCBAQAogCS5pbml0X21hY2hpbmUJPSBpbXg1MV9kdF9pbml0LAogCS5pbml0X2xhdGUJPSBpbXg1MV9pbml0X2xhdGUsCiAJLmR0X2NvbXBhdAk9IGlteDUxX2R0X2JvYXJkX2NvbXBhdCwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NTMuYwppbmRleCAwM2RkNmVhLi44NjMxNmE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDUzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg1My5jCkBAIC0zMCw3ICszMCw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbXg1M19kdF9pbml0KHZvaWQpCiB7Ci0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwogCWlteF9zcmNfaW5pdCgpOwogCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwpAQCAtNDEsNiArNDAsOCBAQAogc3RhdGljIHZvaWQgX19pbml0IGlteDUzX2luaXRfbGF0ZSh2b2lkKQogewogCWlteDUzX3BtX2luaXQoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImNwdWZyZXEtZHQiLCAtMSwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW14NTNfZHRfYm9hcmRfY29tcGF0W10gX19pbml0Y29uc3QgPSB7CkBAIC01NCw1ICs1NSw0IEBACiAJLmluaXRfbWFjaGluZQk9IGlteDUzX2R0X2luaXQsCiAJLmluaXRfbGF0ZQk9IGlteDUzX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gaW14NTNfZHRfYm9hcmRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2cS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2cS5jCmluZGV4IGQ1MWM2ZTkuLjUwNTdkNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDZxLmMKQEAgLTI2OCw4ICsyNjgsNiBAQAogCWlteF9wcmludF9zaWxpY29uX3JldihjcHVfaXNfaW14NmRsKCkgPyAiaS5NWDZETCIgOiAiaS5NWDZRIiwKIAkJCSAgICAgIGlteF9nZXRfc29jX3JldmlzaW9uKCkpOwogCi0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwotCiAJcGFyZW50ID0gaW14X3NvY19kZXZpY2VfaW5pdCgpOwogCWlmIChwYXJlbnQgPT0gTlVMTCkKIAkJcHJfd2FybigiZmFpbGVkIHRvIGluaXRpYWxpemUgc29jIGRldmljZVxuIik7CkBAIC00MDksNSArNDA3LDQgQEAKIAkuaW5pdF9tYWNoaW5lCT0gaW14NnFfaW5pdF9tYWNoaW5lLAogCS5pbml0X2xhdGUgICAgICA9IGlteDZxX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gaW14NnFfZHRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c2wuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnNsLmMKaW5kZXggZWQyNjNhMi4uMjRiZmFhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c2wuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDZzbC5jCkBAIC00OCw4ICs0OCw2IEBACiB7CiAJc3RydWN0IGRldmljZSAqcGFyZW50OwogCi0JbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCgpOwotCiAJcGFyZW50ID0gaW14X3NvY19kZXZpY2VfaW5pdCgpOwogCWlmIChwYXJlbnQgPT0gTlVMTCkKIAkJcHJfd2FybigiZmFpbGVkIHRvIGluaXRpYWxpemUgc29jIGRldmljZVxuIik7CkBAIC03NiwxMCArNzQsOCBAQAogfTsKIAogRFRfTUFDSElORV9TVEFSVChJTVg2U0wsICJGcmVlc2NhbGUgaS5NWDYgU29sb0xpdGUgKERldmljZSBUcmVlKSIpCi0JLm1hcF9pbwkJPSBkZWJ1Z19sbF9pb19pbml0LAogCS5pbml0X2lycQk9IGlteDZzbF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gaW14NnNsX2luaXRfbWFjaGluZSwKIAkuaW5pdF9sYXRlICAgICAgPSBpbXg2c2xfaW5pdF9sYXRlLAogCS5kdF9jb21wYXQJPSBpbXg2c2xfZHRfY29tcGF0LAotCS5yZXN0YXJ0CT0gbXhjX3Jlc3RhcnQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c3guYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnN4LmMKaW5kZXggM2RlM2I3My4uN2E5NmM2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c3guYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDZzeC5jCkBAIC04LDI0ICs4LDczIEBACiAKICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi9pbXg2cS1pb211eGMtZ3ByLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiY3B1aWRsZS5oIgogCitzdGF0aWMgaW50IGFyODAzMV9waHlfZml4dXAoc3RydWN0IHBoeV9kZXZpY2UgKmRldikKK3sKKwl1MTYgdmFsOworCisJLyogU2V0IFJHTUlJIElPIHZvbHRhZ2UgdG8gMS44ViAqLworCXBoeV93cml0ZShkZXYsIDB4MWQsIDB4MWYpOworCXBoeV93cml0ZShkZXYsIDB4MWUsIDB4OCk7CisKKwkvKiBpbnRyb2R1Y2UgdHggY2xvY2sgZGVsYXkgKi8KKwlwaHlfd3JpdGUoZGV2LCAweDFkLCAweDUpOworCXZhbCA9IHBoeV9yZWFkKGRldiwgMHgxZSk7CisJdmFsIHw9IDB4MDEwMDsKKwlwaHlfd3JpdGUoZGV2LCAweDFlLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgUEhZX0lEX0FSODAzMSAgIDB4MDA0ZGQwNzQKK3N0YXRpYyB2b2lkIF9faW5pdCBpbXg2c3hfZW5ldF9waHlfaW5pdCh2b2lkKQoreworCWlmIChJU19CVUlMVElOKENPTkZJR19QSFlMSUIpKQorCQlwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX3VpZChQSFlfSURfQVI4MDMxLCAweGZmZmZmZmZmLAorCQkJCQkgICBhcjgwMzFfcGh5X2ZpeHVwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGlteDZzeF9lbmV0X2Nsa19zZWwodm9pZCkKK3sKKwlzdHJ1Y3QgcmVnbWFwICpncHI7CisKKwlncHIgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9jb21wYXRpYmxlKCJmc2wsaW14NnN4LWlvbXV4Yy1ncHIiKTsKKwlpZiAoIUlTX0VSUihncHIpKSB7CisJCXJlZ21hcF91cGRhdGVfYml0cyhncHIsIElPTVVYQ19HUFIxLAorCQkJCSAgIElNWDZTWF9HUFIxX0ZFQ19DTE9DS19NVVhfU0VMX01BU0ssIDApOworCQlyZWdtYXBfdXBkYXRlX2JpdHMoZ3ByLCBJT01VWENfR1BSMSwKKwkJCQkgICBJTVg2U1hfR1BSMV9GRUNfQ0xPQ0tfUEFEX0RJUl9NQVNLLCAwKTsKKwl9IGVsc2UgeworCQlwcl9lcnIoImZhaWxlZCB0byBmaW5kIGZzbCxpbXg2c3gtaW9tdXgtZ3ByIHJlZ21hcFxuIik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW14NnN4X2VuZXRfaW5pdCh2b2lkKQoreworCWlteDZzeF9lbmV0X3BoeV9pbml0KCk7CisJaW14NnN4X2VuZXRfY2xrX3NlbCgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgaW14NnN4X2luaXRfbWFjaGluZSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKIAotCW14Y19hcmNoX3Jlc2V0X2luaXRfZHQoKTsKLQogCXBhcmVudCA9IGlteF9zb2NfZGV2aWNlX2luaXQoKTsKIAlpZiAocGFyZW50ID09IE5VTEwpCiAJCXByX3dhcm4oImZhaWxlZCB0byBpbml0aWFsaXplIHNvYyBkZXZpY2VcbiIpOwogCiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIHBhcmVudCk7CiAKKwlpbXg2c3hfZW5ldF9pbml0KCk7CiAJaW14X2FuYXRvcF9pbml0KCk7CiAJaW14NnN4X3BtX2luaXQoKTsKIH0KQEAgLTUzLDEwICsxMDIsOCBAQAogfTsKIAogRFRfTUFDSElORV9TVEFSVChJTVg2U1gsICJGcmVlc2NhbGUgaS5NWDYgU29sb1ggKERldmljZSBUcmVlKSIpCi0JLm1hcF9pbwkJPSBkZWJ1Z19sbF9pb19pbml0LAogCS5pbml0X2lycQk9IGlteDZzeF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gaW14NnN4X2luaXRfbWFjaGluZSwKIAkuZHRfY29tcGF0CT0gaW14NnN4X2R0X2NvbXBhdCwKIAkuaW5pdF9sYXRlCT0gaW14NnN4X2luaXRfbGF0ZSwKLQkucmVzdGFydAk9IG14Y19yZXN0YXJ0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbHMxMDIxYS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1sczEwMjFhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5Yzg1OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbHMxMDIxYS5jCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbHMxMDIxYV9kdF9jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKKwkiZnNsLGxzMTAyMWEiLAorCU5VTEwsCit9OworCitEVF9NQUNISU5FX1NUQVJUKExTMTAyMUEsICJGcmVlc2NhbGUgTFMxMDIxQSIpCisJLnNtcAkJPSBzbXBfb3BzKGxzMTAyMWFfc21wX29wcyksCisJLmR0X2NvbXBhdAk9IGxzMTAyMWFfZHRfY29tcGF0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtdmY2MTAuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtdmY2MTAuYwppbmRleCBlZTdlNTdiLi5jMTFhYjZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXZmNjEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC12ZjYxMC5jCkBAIC0xMiwxNCArMTIsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgogCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0KLXN0YXRpYyB2b2lkIF9faW5pdCB2ZjYxMF9pbml0X21hY2hpbmUodm9pZCkKLXsKLQlteGNfYXJjaF9yZXNldF9pbml0X2R0KCk7Ci0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZmNjEwX2R0X2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewogCSJmc2wsdmY2MTAiLAogCU5VTEwsCkBAIC0yOCw3ICsyMCw1IEBACiBEVF9NQUNISU5FX1NUQVJUKFZZQlJJRF9WRjYxMCwgIkZyZWVzY2FsZSBWeWJyaWQgVkY2MTAgKERldmljZSBUcmVlKSIpCiAJLmwyY19hdXhfdmFsCT0gMCwKIAkubDJjX2F1eF9tYXNrCT0gfjAsCi0JLmluaXRfbWFjaGluZSAgID0gdmY2MTBfaW5pdF9tYWNoaW5lLAogCS5kdF9jb21wYXQJPSB2ZjYxMF9kdF9jb21wYXQsCi0JLnJlc3RhcnQJPSBteGNfcmVzdGFydCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMKaW5kZXggN2E5Njg2YS4uMzcyOWQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21tZGMuYwpAQCAtMjEsNiArMjEsMTIgQEAKICNkZWZpbmUgQlBfTU1EQ19NQVBTUl9QU0QJMAogI2RlZmluZSBCUF9NTURDX01BUFNSX1BTUwk0CiAKKyNkZWZpbmUgTU1EQ19NRE1JU0MJCTB4MTgKKyNkZWZpbmUgQk1fTU1EQ19NRE1JU0NfRERSX1RZUEUJMHgxOAorI2RlZmluZSBCUF9NTURDX01ETUlTQ19ERFJfVFlQRQkweDMKKworc3RhdGljIGludCBkZHJfdHlwZTsKKwogc3RhdGljIGludCBpbXhfbW1kY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKQEAgLTMxLDYgKzM3LDEyIEBACiAJbW1kY19iYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCVdBUk5fT04oIW1tZGNfYmFzZSk7CiAKKwlyZWcgPSBtbWRjX2Jhc2UgKyBNTURDX01ETUlTQzsKKwkvKiBHZXQgZGRyIHR5cGUgKi8KKwl2YWwgPSByZWFkbF9yZWxheGVkKHJlZyk7CisJZGRyX3R5cGUgPSAodmFsICYgQk1fTU1EQ19NRE1JU0NfRERSX1RZUEUpID4+CisJCSBCUF9NTURDX01ETUlTQ19ERFJfVFlQRTsKKwogCXJlZyA9IG1tZGNfYmFzZSArIE1NRENfTUFQU1I7CiAKIAkvKiBFbmFibGUgYXV0b21hdGljIHBvd2VyIHNhdmluZyAqLwpAQCAtNTEsNiArNjMsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGlteF9tbWRjX2dldF9kZHJfdHlwZSh2b2lkKQoreworCXJldHVybiBkZHJfdHlwZTsKK30KKwogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgaW14X21tZGNfZHRfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14NnEtbW1kYyIsIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9teGMuaCBiL2FyY2gvYXJtL21hY2gtaW14L214Yy5oCmluZGV4IDE3YTQxY2EuLjRjMTM0M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L214Yy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L214Yy5oCkBAIC01NSw2ICs1NSw4IEBACiAjZGVmaW5lIElNWF9DSElQX1JFVklTSU9OXzNfMwkJMHgzMwogI2RlZmluZSBJTVhfQ0hJUF9SRVZJU0lPTl9VTktOT1dOCTB4ZmYKIAorI2RlZmluZSBJTVhfRERSX1RZUEVfTFBERFIyCQkxCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiBleHRlcm4gdW5zaWduZWQgaW50IF9fbXhjX2NwdV90eXBlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLWlteC9wbGF0c21wLmMKaW5kZXggNzcxYmQyNS4uN2YyNzAwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L3BsYXRzbXAuYwpAQCAtMTEsNyArMTEsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9zbXBfc2N1Lmg+CkBAIC05NCwzICs5NywzMyBAQAogCS5jcHVfa2lsbAkJPSBpbXhfY3B1X2tpbGwsCiAjZW5kaWYKIH07CisKKyNkZWZpbmUgRENGR19DQ1NSX1NDUkFUQ0hSVzEJMHgyMDAKKworc3RhdGljIGludCBsczEwMjFhX2Jvb3Rfc2Vjb25kYXJ5KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKK3sKKwlhcmNoX3NlbmRfd2FrZXVwX2lwaV9tYXNrKGNwdW1hc2tfb2YoY3B1KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGxzMTAyMWFfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl2b2lkIF9faW9tZW0gKmRjZmdfYmFzZTsKKwl1bnNpZ25lZCBsb25nIHBhZGRyOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLGxzMTAyMWEtZGNmZyIpOworCWRjZmdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlCVUdfT04oIWRjZmdfYmFzZSk7CisKKwlwYWRkciA9IHZpcnRfdG9fcGh5cyhzZWNvbmRhcnlfc3RhcnR1cCk7CisJd3JpdGVsX3JlbGF4ZWQoY3B1X3RvX2JlMzIocGFkZHIpLCBkY2ZnX2Jhc2UgKyBEQ0ZHX0NDU1JfU0NSQVRDSFJXMSk7CisKKwlpb3VubWFwKGRjZmdfYmFzZSk7Cit9CisKK3N0cnVjdCBzbXBfb3BlcmF0aW9ucyAgbHMxMDIxYV9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CisJLnNtcF9wcmVwYXJlX2NwdXMJPSBsczEwMjFhX3NtcF9wcmVwYXJlX2NwdXMsCisJLnNtcF9ib290X3NlY29uZGFyeQk9IGxzMTAyMWFfYm9vdF9zZWNvbmRhcnksCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvcG0taW14Ni5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvcG0taW14Ni5jCmluZGV4IDVjM2FmOGYuLjVkMmMxYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L3BtLWlteDYuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9wbS1pbXg2LmMKQEAgLTg4LDcgKzg4LDcgQEAKIH07CiAKIHN0cnVjdCBpbXg2X3BtX3NvY2RhdGEgewotCXUzMiBjcHVfdHlwZTsKKwl1MzIgZGRyX3R5cGU7CiAJY29uc3QgY2hhciAqbW1kY19jb21wYXQ7CiAJY29uc3QgY2hhciAqc3JjX2NvbXBhdDsKIAljb25zdCBjaGFyICppb211eGNfY29tcGF0OwpAQCAtMTM4LDcgKzEzOCw2IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteDZfcG1fc29jZGF0YSBpbXg2cV9wbV9kYXRhIF9faW5pdGNvbnN0ID0gewotCS5jcHVfdHlwZSA9IE1YQ19DUFVfSU1YNlEsCiAJLm1tZGNfY29tcGF0ID0gImZzbCxpbXg2cS1tbWRjIiwKIAkuc3JjX2NvbXBhdCA9ICJmc2wsaW14NnEtc3JjIiwKIAkuaW9tdXhjX2NvbXBhdCA9ICJmc2wsaW14NnEtaW9tdXhjIiwKQEAgLTE0OCw3ICsxNDcsNiBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbXg2X3BtX3NvY2RhdGEgaW14NmRsX3BtX2RhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmNwdV90eXBlID0gTVhDX0NQVV9JTVg2REwsCiAJLm1tZGNfY29tcGF0ID0gImZzbCxpbXg2cS1tbWRjIiwKIAkuc3JjX2NvbXBhdCA9ICJmc2wsaW14NnEtc3JjIiwKIAkuaW9tdXhjX2NvbXBhdCA9ICJmc2wsaW14NmRsLWlvbXV4YyIsCkBAIC0xNTgsNyArMTU2LDYgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14Nl9wbV9zb2NkYXRhIGlteDZzbF9wbV9kYXRhIF9faW5pdGNvbnN0ID0gewotCS5jcHVfdHlwZSA9IE1YQ19DUFVfSU1YNlNMLAogCS5tbWRjX2NvbXBhdCA9ICJmc2wsaW14NnNsLW1tZGMiLAogCS5zcmNfY29tcGF0ID0gImZzbCxpbXg2c2wtc3JjIiwKIAkuaW9tdXhjX2NvbXBhdCA9ICJmc2wsaW14NnNsLWlvbXV4YyIsCkBAIC0xNjgsNyArMTY1LDYgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14Nl9wbV9zb2NkYXRhIGlteDZzeF9wbV9kYXRhIF9faW5pdGNvbnN0ID0gewotCS5jcHVfdHlwZSA9IE1YQ19DUFVfSU1YNlNYLAogCS5tbWRjX2NvbXBhdCA9ICJmc2wsaW14NnN4LW1tZGMiLAogCS5zcmNfY29tcGF0ID0gImZzbCxpbXg2c3gtc3JjIiwKIAkuaW9tdXhjX2NvbXBhdCA9ICJmc2wsaW14NnN4LWlvbXV4YyIsCkBAIC0xODcsNyArMTgzLDcgQEAKIHN0cnVjdCBpbXg2X2NwdV9wbV9pbmZvIHsKIAlwaHlzX2FkZHJfdCBwYmFzZTsgLyogVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgcG1faW5mby4gKi8KIAlwaHlzX2FkZHJfdCByZXN1bWVfYWRkcjsgLyogVGhlIHBoeXNpY2FsIHJlc3VtZSBhZGRyZXNzIGZvciBhc20gY29kZSAqLwotCXUzMiBjcHVfdHlwZTsKKwl1MzIgZGRyX3R5cGU7CiAJdTMyIHBtX2luZm9fc2l6ZTsgLyogU2l6ZSBvZiBwbV9pbmZvLiAqLwogCXN0cnVjdCBpbXg2X3BtX2Jhc2UgbW1kY19iYXNlOwogCXN0cnVjdCBpbXg2X3BtX2Jhc2Ugc3JjX2Jhc2U7CkBAIC0yNjEsNyArMjU3LDYgQEAKIAogaW50IGlteDZxX3NldF9scG0oZW51bSBteGNfY3B1X3B3cl9tb2RlIG1vZGUpCiB7Ci0Jc3RydWN0IGlycV9kYXRhICppb211eGNfaXJxX2RhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKDMyKTsKIAl1MzIgdmFsID0gcmVhZGxfcmVsYXhlZChjY21fYmFzZSArIENMUENSKTsKIAogCXZhbCAmPSB+Qk1fQ0xQQ1JfTFBNOwpAQCAtMzE2LDkgKzMxMSw5IEBACiAJICogMykgU29mdHdhcmUgc2hvdWxkIG1hc2sgSVJRICMzMiByaWdodCBhZnRlciBDQ00gTG93LVBvd2VyIG1vZGUKIAkgKiAgICBpcyBzZXQgKHNldCBiaXRzIDAtMSBvZiBDQ01fQ0xQQ1IpLgogCSAqLwotCWlteF9ncGNfaXJxX3VubWFzayhpb211eGNfaXJxX2RhdGEpOworCWlteF9ncGNfaHdpcnFfdW5tYXNrKDMyKTsKIAl3cml0ZWxfcmVsYXhlZCh2YWwsIGNjbV9iYXNlICsgQ0xQQ1IpOwotCWlteF9ncGNfaXJxX21hc2soaW9tdXhjX2lycV9kYXRhKTsKKwlpbXhfZ3BjX2h3aXJxX21hc2soMzIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjIsNyArNTE3LDcgQEAKIAkJZ290byBwbDMxMF9jYWNoZV9tYXBfZmFpbGVkOwogCX0KIAotCXBtX2luZm8tPmNwdV90eXBlID0gc29jZGF0YS0+Y3B1X3R5cGU7CisJcG1faW5mby0+ZGRyX3R5cGUgPSBpbXhfbW1kY19nZXRfZGRyX3R5cGUoKTsKIAlwbV9pbmZvLT5tbWRjX2lvX251bSA9IHNvY2RhdGEtPm1tZGNfaW9fbnVtOwogCW1tZGNfb2Zmc2V0X2FycmF5ID0gc29jZGF0YS0+bW1kY19pb19vZmZzZXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L3N1c3BlbmQtaW14Ni5TIGIvYXJjaC9hcm0vbWFjaC1pbXgvc3VzcGVuZC1pbXg2LlMKaW5kZXggY2E0ZWEyZC4uYjk5OTg3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvc3VzcGVuZC1pbXg2LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvc3VzcGVuZC1pbXg2LlMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqLwogI2RlZmluZSBQTV9JTkZPX1BCQVNFX09GRlNFVAkJCTB4MAogI2RlZmluZSBQTV9JTkZPX1JFU1VNRV9BRERSX09GRlNFVAkJMHg0Ci0jZGVmaW5lIFBNX0lORk9fQ1BVX1RZUEVfT0ZGU0VUCQkJMHg4CisjZGVmaW5lIFBNX0lORk9fRERSX1RZUEVfT0ZGU0VUCQkJMHg4CiAjZGVmaW5lIFBNX0lORk9fUE1fSU5GT19TSVpFX09GRlNFVAkJMHhDCiAjZGVmaW5lIFBNX0lORk9fTVg2UV9NTURDX1BfT0ZGU0VUCQkweDEwCiAjZGVmaW5lIFBNX0lORk9fTVg2UV9NTURDX1ZfT0ZGU0VUCQkweDE0CkBAIC0xMTAsNyArMTEwLDcgQEAKIAlsZHJlcQlyMTEsIFtyMCwgI1BNX0lORk9fTVg2UV9NTURDX1ZfT0ZGU0VUXQogCWxkcm5lCXIxMSwgW3IwLCAjUE1fSU5GT19NWDZRX01NRENfUF9PRkZTRVRdCiAKLQljbXAgCXIzLCAjTVhDX0NQVV9JTVg2U0wKKwljbXAJcjMsICNJTVhfRERSX1RZUEVfTFBERFIyCiAJYm5lCTRmCiAKIAkvKiByZXNldCByZWFkIEZJRk8sIFJTVF9SRF9GSUZPICovCkBAIC0xNTEsNyArMTUxLDcgQEAKIEVOVFJZKGlteDZfc3VzcGVuZCkKIAlsZHIJcjEsIFtyMCwgI1BNX0lORk9fUEJBU0VfT0ZGU0VUXQogCWxkcglyMiwgW3IwLCAjUE1fSU5GT19SRVNVTUVfQUREUl9PRkZTRVRdCi0JbGRyCXIzLCBbcjAsICNQTV9JTkZPX0NQVV9UWVBFX09GRlNFVF0KKwlsZHIJcjMsIFtyMCwgI1BNX0lORk9fRERSX1RZUEVfT0ZGU0VUXQogCWxkcglyNCwgW3IwLCAjUE1fSU5GT19QTV9JTkZPX1NJWkVfT0ZGU0VUXQogCiAJLyoKQEAgLTIwOSw4ICsyMDksOCBAQAogCWxkcglyNywgW3IwLCAjUE1fSU5GT19NTURDX0lPX05VTV9PRkZTRVRdCiAJbGRyCXI4LCA9UE1fSU5GT19NTURDX0lPX1ZBTF9PRkZTRVQKIAlhZGQJcjgsIHI4LCByMAotCS8qIGkuTVg2U0wncyBsYXN0IDMgSU9zIG5lZWQgc3BlY2lhbCBzZXR0aW5nICovCi0JY21wCXIzLCAjTVhDX0NQVV9JTVg2U0wKKwkvKiBMUEREUjIncyBsYXN0IDMgSU9zIG5lZWQgc3BlY2lhbCBzZXR0aW5nICovCisJY21wCXIzLCAjSU1YX0REUl9UWVBFX0xQRERSMgogCXN1YmVxCXI3LCByNywgIzB4Mwogc2V0X21tZGNfaW9fbHBtOgogCWxkcglyOSwgW3I4XSwgIzB4OApAQCAtMjE4LDcgKzIxOCw3IEBACiAJc3VicwlyNywgcjcsICMweDEKIAlibmUJc2V0X21tZGNfaW9fbHBtCiAKLQljbXAgCXIzLCAjTVhDX0NQVV9JTVg2U0wKKwljbXAgCXIzLCAjSU1YX0REUl9UWVBFX0xQRERSMgogCWJuZQlzZXRfbW1kY19pb19scG1fZG9uZQogCWxkcglyNiwgPTB4MTAwMAogCWxkcglyOSwgW3I4XSwgIzB4OApAQCAtMzI0LDcgKzMyNCw3IEBACiAJc3RyCXI3LCBbcjExLCAjTVg2UV9TUkNfR1BSMV0KIAlzdHIJcjcsIFtyMTEsICNNWDZRX1NSQ19HUFIyXQogCi0JbGRyCXIzLCBbcjAsICNQTV9JTkZPX0NQVV9UWVBFX09GRlNFVF0KKwlsZHIJcjMsIFtyMCwgI1BNX0lORk9fRERSX1RZUEVfT0ZGU0VUXQogCW1vdglyNSwgIzB4MQogCXJlc3VtZV9tbWRjCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L3N5c3RlbS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvc3lzdGVtLmMKaW5kZXggZDE0YzMzZi4uNTFjMzUwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvc3lzdGVtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvc3lzdGVtLmMKQEAgLTg5LDIxICs4OSw2IEBACiAJCWNsa19wcmVwYXJlKHdkb2dfY2xrKTsKIH0KIAotdm9pZCBfX2luaXQgbXhjX2FyY2hfcmVzZXRfaW5pdF9kdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsaW14MjEtd2R0Iik7Ci0Jd2RvZ19iYXNlID0gb2ZfaW9tYXAobnAsIDApOwotCVdBUk5fT04oIXdkb2dfYmFzZSk7Ci0KLQl3ZG9nX2NsayA9IG9mX2Nsa19nZXQobnAsIDApOwotCWlmIChJU19FUlIod2RvZ19jbGspKQotCQlwcl93YXJuKCIlczogZmFpbGVkIHRvIGdldCB3ZG9nIGNsb2NrXG4iLCBfX2Z1bmNfXyk7Ci0JZWxzZQotCQljbGtfcHJlcGFyZSh3ZG9nX2Nsayk7Ci19Ci0KICNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAogdm9pZCBfX2luaXQgaW14X2luaXRfbDJjYWNoZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvS2NvbmZpZwppbmRleCBjNDU1ZTk3Li4wMmQwODM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvS2NvbmZpZwpAQCAtMSwzICsxLDI2IEBACitjb25maWcgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiQVJNIEx0ZC4gSW50ZWdyYXRvciBmYW1pbHkiIGlmIChBUkNIX01VTFRJX1Y0VCB8fCBBUkNIX01VTFRJX1Y1IHx8IEFSQ0hfTVVMVElfVjYpCisJc2VsZWN0IEFSTV9BTUJBCisJc2VsZWN0IEFSTV9QQVRDSF9QSFlTX1ZJUlQgaWYgTU1VCisJc2VsZWN0IEFVVE9fWlJFTEFERFIKKwlzZWxlY3QgQ09NTU9OX0NMSworCXNlbGVjdCBDT01NT05fQ0xLX1ZFUlNBVElMRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEhBVkVfVENNCisJc2VsZWN0IElDU1QKKwlzZWxlY3QgTUZEX1NZU0NPTgorCXNlbGVjdCBNVUxUSV9JUlFfSEFORExFUgorCXNlbGVjdCBQTEFUX1ZFUlNBVElMRQorCXNlbGVjdCBQT1dFUl9SRVNFVAorCXNlbGVjdCBQT1dFUl9SRVNFVF9WRVJTQVRJTEUKKwlzZWxlY3QgUE9XRVJfU1VQUExZCisJc2VsZWN0IFNPQ19JTlRFR1JBVE9SX0NNCisJc2VsZWN0IFNQQVJTRV9JUlEKKwlzZWxlY3QgVVNFX09GCisJc2VsZWN0IFZFUlNBVElMRV9GUEdBX0lSUQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIEFSTSdzIEludGVncmF0b3IgcGxhdGZvcm0uCisKIGlmIEFSQ0hfSU5URUdSQVRPUgogCiBtZW51ICJJbnRlZ3JhdG9yIE9wdGlvbnMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvTWFrZWZpbGUKaW5kZXggZWM3NTlkZS4uMWViZTQ1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogIyBPYmplY3QgZmlsZSBsaXN0cy4KIAotb2JqLXkJCQkJCTo9IGNvcmUubyBsbS5vIGxlZHMubworb2JqLXkJCQkJCTo9IGNvcmUubyBsbS5vCiBvYmotJChDT05GSUdfQVJDSF9JTlRFR1JBVE9SX0FQKQkrPSBpbnRlZ3JhdG9yX2FwLm8KIG9iai0kKENPTkZJR19BUkNIX0lOVEVHUkFUT1JfQ1ApCSs9IGludGVncmF0b3JfY3AubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY20uaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbS5oCmluZGV4IDRlY2ZmN2IuLjViOGJhODI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY20uaAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY20uaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZSBDTV9DVFJMX0xFRAkJCSgxIDw8IDApCiAjZGVmaW5lIENNX0NUUkxfbk1CREVUCQkJKDEgPDwgMSkKICNkZWZpbmUgQ01fQ1RSTF9SRU1BUAkJCSgxIDw8IDIpCi0jZGVmaW5lIENNX0NUUkxfUkVTRVQJCQkoMSA8PCAzKQogCiAvKgogICogSW50ZWdyYXRvci9BUCxQUDIgc3BlY2lmaWMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb21tb24uaAppbmRleCBhZDBhYzU1NC4uOTZjOWRjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb21tb24uaApAQCAtNCw1ICs0LDMgQEAKIHZvaWQgaW50ZWdyYXRvcl9pbml0X2Vhcmx5KHZvaWQpOwogaW50IGludGVncmF0b3JfaW5pdChib29sIGlzX2NwKTsKIHZvaWQgaW50ZWdyYXRvcl9yZXNlcnZlKHZvaWQpOwotdm9pZCBpbnRlZ3JhdG9yX3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSwgY29uc3QgY2hhciAqKTsKLXZvaWQgaW50ZWdyYXRvcl9pbml0X3N5c2ZzKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgdTMyIGlkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCmluZGV4IGUzZjNhY2EuLjk0ODg3MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYwpAQCAtNjAsNDAgKzYwLDYgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqaW50ZWdyYXRvcl9hcmNoX3N0cih1MzIgaWQpCi17Ci0Jc3dpdGNoICgoaWQgPj4gMTYpICYgMHhmZikgewotCWNhc2UgMHgwMDoKLQkJcmV0dXJuICJBU0IgbGl0dGxlLWVuZGlhbiI7Ci0JY2FzZSAweDAxOgotCQlyZXR1cm4gIkFIQiBsaXR0bGUtZW5kaWFuIjsKLQljYXNlIDB4MDM6Ci0JCXJldHVybiAiQUhCLUxpdGUgc3lzdGVtIGJ1cywgYmktZW5kaWFuIjsKLQljYXNlIDB4MDQ6Ci0JCXJldHVybiAiQUhCIjsKLQljYXNlIDB4MDg6Ci0JCXJldHVybiAiQUhCIHN5c3RlbSBidXMsIEFTQiBwcm9jZXNzb3IgYnVzIjsKLQlkZWZhdWx0OgotCQlyZXR1cm4gIlVua25vd24iOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKmludGVncmF0b3JfZnBnYV9zdHIodTMyIGlkKQotewotCXN3aXRjaCAoKGlkID4+IDEyKSAmIDB4ZikgewotCWNhc2UgMHgwMToKLQkJcmV0dXJuICJYQzQwNjIiOwotCWNhc2UgMHgwMjoKLQkJcmV0dXJuICJYQzQwODUiOwotCWNhc2UgMHgwMzoKLQkJcmV0dXJuICJYVkM2MDAiOwotCWNhc2UgMHgwNDoKLQkJcmV0dXJuICJFUE03MjU2QUUgKEFsdGVyYSBQTEQpIjsKLQlkZWZhdWx0OgotCQlyZXR1cm4gIlVua25vd24iOwotCX0KLX0KLQogdm9pZCBjbV9jbGVhcl9pcnFzKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBjb3JlIG1vZHVsZSBJUlFzICovCkBAIC0xMDksNyArNzUsNiBAQAogdm9pZCBjbV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpjbSA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBjbV9tYXRjaCk7Ci0JdTMyIHZhbDsKIAogCWlmICghY20pIHsKIAkJcHJfY3JpdCgibm8gY29yZSBtb2R1bGUgbm9kZSBmb3VuZCBpbiBkZXZpY2UgdHJlZVxuIik7CkBAIC0xMjEsMTMgKzg2LDYgQEAKIAkJcmV0dXJuOwogCX0KIAljbV9jbGVhcl9pcnFzKCk7Ci0JdmFsID0gcmVhZGwoY21fYmFzZSArIElOVEVHUkFUT1JfSERSX0lEX09GRlNFVCk7Ci0JcHJfaW5mbygiRGV0ZWN0ZWQgQVJNIGNvcmUgbW9kdWxlOlxuIik7Ci0JcHJfaW5mbygiICAgIE1hbnVmYWN0dXJlcjogJTAyeFxuIiwgKHZhbCA+PiAyNCkpOwotCXByX2luZm8oIiAgICBBcmNoaXRlY3R1cmU6ICVzXG4iLCBpbnRlZ3JhdG9yX2FyY2hfc3RyKHZhbCkpOwotCXByX2luZm8oIiAgICBGUEdBOiAlc1xuIiwgaW50ZWdyYXRvcl9mcGdhX3N0cih2YWwpKTsKLQlwcl9pbmZvKCIgICAgQnVpbGQ6ICUwMnhcbiIsICh2YWwgPj4gNCkgJiAweEZGKTsKLQlwcl9pbmZvKCIgICAgUmV2OiAlY1xuIiwgKCdBJyArICh2YWwgJiAweDAzKSkpOwogfQogCiAvKgpAQCAtMTM5LDY0ICs5NywzIEBACiB7CiAJbWVtYmxvY2tfcmVzZXJ2ZShQSFlTX09GRlNFVCwgX19wYShzd2FwcGVyX3BnX2RpcikgLSBQSFlTX09GRlNFVCk7CiB9Ci0KLS8qCi0gKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlciBpbiB0aGUgc3lzdGVtIEZQR0EKLSAqLwotdm9pZCBpbnRlZ3JhdG9yX3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpCi17Ci0JY21fY29udHJvbChDTV9DVFJMX1JFU0VULCBDTV9DVFJMX1JFU0VUKTsKLX0KLQotc3RhdGljIHUzMiBpbnRlZ3JhdG9yX2lkOwotCi1zdGF0aWMgc3NpemVfdCBpbnRjcF9nZXRfbWFuZihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlMDJ4XG4iLCBpbnRlZ3JhdG9yX2lkID4+IDI0KTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGludGNwX21hbmZfYXR0ciA9Ci0JX19BVFRSKG1hbnVmYWN0dXJlciwgIFNfSVJVR08sIGludGNwX2dldF9tYW5mLCAgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90IGludGNwX2dldF9hcmNoKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpbnRlZ3JhdG9yX2FyY2hfc3RyKGludGVncmF0b3JfaWQpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGludGNwX2FyY2hfYXR0ciA9Ci0JX19BVFRSKGFyY2hpdGVjdHVyZSwgIFNfSVJVR08sIGludGNwX2dldF9hcmNoLCAgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90IGludGNwX2dldF9mcGdhKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpbnRlZ3JhdG9yX2ZwZ2Ffc3RyKGludGVncmF0b3JfaWQpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGludGNwX2ZwZ2FfYXR0ciA9Ci0JX19BVFRSKGZwZ2EsICBTX0lSVUdPLCBpbnRjcF9nZXRfZnBnYSwgIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdCBpbnRjcF9nZXRfYnVpbGQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlMDJ4XG4iLCAoaW50ZWdyYXRvcl9pZCA+PiA0KSAmIDB4RkYpOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaW50Y3BfYnVpbGRfYXR0ciA9Ci0JX19BVFRSKGJ1aWxkLCAgU19JUlVHTywgaW50Y3BfZ2V0X2J1aWxkLCAgTlVMTCk7Ci0KLQotCi12b2lkIGludGVncmF0b3JfaW5pdF9zeXNmcyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHUzMiBpZCkKLXsKLQlpbnRlZ3JhdG9yX2lkID0gaWQ7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKHBhcmVudCwgJmludGNwX21hbmZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKHBhcmVudCwgJmludGNwX2FyY2hfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKHBhcmVudCwgJmludGNwX2ZwZ2FfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKHBhcmVudCwgJmludGNwX2J1aWxkX2F0dHIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzY2M5OS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNkZWZpbmUgQU1CQV9VQVJUX0RSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDE2MDAwMDAwKQotI2RlZmluZSBBTUJBX1VBUlRfTENSSAkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHgxNjAwMDAwOCkKLSNkZWZpbmUgQU1CQV9VQVJUX0xDUk0JKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4MTYwMDAwMGMpCi0jZGVmaW5lIEFNQkFfVUFSVF9MQ1JMCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweDE2MDAwMDEwKQotI2RlZmluZSBBTUJBX1VBUlRfQ1IJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4MTYwMDAwMTQpCi0jZGVmaW5lIEFNQkFfVUFSVF9GUgkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHgxNjAwMDAxOCkKLQotLyoKLSAqIFRoaXMgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZQotICovCi1zdGF0aWMgdm9pZCBwdXRjKGludCBjKQotewotCXdoaWxlIChBTUJBX1VBUlRfRlIgJiAoMSA8PCA1KSkKLQkJYmFycmllcigpOwotCi0JQU1CQV9VQVJUX0RSID0gYzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCi17Ci0Jd2hpbGUgKEFNQkFfVUFSVF9GUiAmICgxIDw8IDMpKQotCQliYXJyaWVyKCk7Ci19Ci0KLS8qCi0gKiBub3RoaW5nIHRvIGRvCi0gKi8KLSNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMKaW5kZXggOGNhMjkwYi4uMzAwMDNiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCkBAIC0yNywyMiArMjcsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9rbWkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvY2xrLWludGVncmF0b3IuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzX3NvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZF9jbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtODksMTEgKzgyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhcF9pb19kZXNjW10gX19pbml0ZGF0YSBfX21heWJlX3VudXNlZCA9IHsKIAl7Ci0JCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhJTlRFR1JBVE9SX0NUX0JBU0UpLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oSU5URUdSQVRPUl9DVF9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwgewogCQkudmlydHVhbAk9IElPX0FERFJFU1MoSU5URUdSQVRPUl9JQ19CQVNFKSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKElOVEVHUkFUT1JfSUNfQkFTRSksCiAJCS5sZW5ndGgJCT0gU1pfNEssCkBAIC0yNTcsMTg4ICsyNDUsMTAgQEAKIAkuc2V0X21jdHJsID0gaW50ZWdyYXRvcl91YXJ0X3NldF9tY3RybCwKIH07CiAKLS8qCi0gKiBXaGVyZSBpcyB0aGUgdGltZXIgKFZBKT8KLSAqLwotI2RlZmluZSBUSU1FUjBfVkFfQkFTRSBfX2lvX2FkZHJlc3MoSU5URUdSQVRPUl9USU1FUjBfQkFTRSkKLSNkZWZpbmUgVElNRVIxX1ZBX0JBU0UgX19pb19hZGRyZXNzKElOVEVHUkFUT1JfVElNRVIxX0JBU0UpCi0jZGVmaW5lIFRJTUVSMl9WQV9CQVNFIF9faW9fYWRkcmVzcyhJTlRFR1JBVE9SX1RJTUVSMl9CQVNFKQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9yZWxvYWQ7Ci0KLXN0YXRpYyB1NjQgbm90cmFjZSBpbnRlZ3JhdG9yX3JlYWRfc2NoZWRfY2xvY2sodm9pZCkKLXsKLQlyZXR1cm4gLXJlYWRsKCh2b2lkIF9faW9tZW0gKikgVElNRVIyX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVncmF0b3JfY2xvY2tzb3VyY2VfaW5pdCh1bnNpZ25lZCBsb25nIGlucmF0ZSwKLQkJCQkJdm9pZCBfX2lvbWVtICpiYXNlKQotewotCXUzMiBjdHJsID0gVElNRVJfQ1RSTF9FTkFCTEUgfCBUSU1FUl9DVFJMX1BFUklPRElDOwotCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGlucmF0ZTsKLQotCWlmIChyYXRlID49IDE1MDAwMDApIHsKLQkJcmF0ZSAvPSAxNjsKLQkJY3RybCB8PSBUSU1FUl9DVFJMX0RJVjE2OwotCX0KLQotCXdyaXRlbCgweGZmZmYsIGJhc2UgKyBUSU1FUl9MT0FEKTsKLQl3cml0ZWwoY3RybCwgYmFzZSArIFRJTUVSX0NUUkwpOwotCi0JY2xvY2tzb3VyY2VfbW1pb19pbml0KGJhc2UgKyBUSU1FUl9WQUxVRSwgInRpbWVyMiIsCi0JCQlyYXRlLCAyMDAsIDE2LCBjbG9ja3NvdXJjZV9tbWlvX3JlYWRsX2Rvd24pOwotCXNjaGVkX2Nsb2NrX3JlZ2lzdGVyKGludGVncmF0b3JfcmVhZF9zY2hlZF9jbG9jaywgMTYsIHJhdGUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICogY2xrZXZ0X2Jhc2U7Ci0KLS8qCi0gKiBJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBpbnRlZ3JhdG9yX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gZGV2X2lkOwotCi0JLyogY2xlYXIgdGhlIGludGVycnVwdCAqLwotCXdyaXRlbCgxLCBjbGtldnRfYmFzZSArIFRJTUVSX0lOVENMUik7Ci0KLQlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgY2xrZXZ0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCi17Ci0JdTMyIGN0cmwgPSByZWFkbChjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpICYgflRJTUVSX0NUUkxfRU5BQkxFOwotCi0JLyogRGlzYWJsZSB0aW1lciAqLwotCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKLQkJLyogRW5hYmxlIHRoZSB0aW1lciBhbmQgc3RhcnQgdGhlIHBlcmlvZGljIHRpY2sgKi8KLQkJd3JpdGVsKHRpbWVyX3JlbG9hZCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9MT0FEKTsKLQkJY3RybCB8PSBUSU1FUl9DVFJMX1BFUklPRElDIHwgVElNRVJfQ1RSTF9FTkFCTEU7Ci0JCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCS8qIExlYXZlIHRoZSB0aW1lciBkaXNhYmxlZCwgLnNldF9uZXh0X2V2ZW50IHdpbGwgZW5hYmxlIGl0ICovCi0JCWN0cmwgJj0gflRJTUVSX0NUUkxfUEVSSU9ESUM7Ci0JCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgotCWRlZmF1bHQ6Ci0JCS8qIEp1c3QgbGVhdmUgaW4gZGlzYWJsZWQgc3RhdGUgKi8KLQkJYnJlYWs7Ci0JfQotCi19Ci0KLXN0YXRpYyBpbnQgY2xrZXZ0X3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQotewotCXVuc2lnbmVkIGxvbmcgY3RybCA9IHJlYWRsKGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7Ci0KLQl3cml0ZWwoY3RybCAmIH5USU1FUl9DVFJMX0VOQUJMRSwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKLQl3cml0ZWwobmV4dCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9MT0FEKTsKLQl3cml0ZWwoY3RybCB8IFRJTUVSX0NUUkxfRU5BQkxFLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGludGVncmF0b3JfY2xvY2tldmVudCA9IHsKLQkubmFtZQkJPSAidGltZXIxIiwKLQkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCi0JLnNldF9tb2RlCT0gY2xrZXZ0X3NldF9tb2RlLAotCS5zZXRfbmV4dF9ldmVudAk9IGNsa2V2dF9zZXRfbmV4dF9ldmVudCwKLQkucmF0aW5nCQk9IDMwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGludGVncmF0b3JfdGltZXJfaXJxID0gewotCS5uYW1lCQk9ICJ0aW1lciIsCi0JLmZsYWdzCQk9IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLmhhbmRsZXIJPSBpbnRlZ3JhdG9yX3RpbWVyX2ludGVycnVwdCwKLQkuZGV2X2lkCQk9ICZpbnRlZ3JhdG9yX2Nsb2NrZXZlbnQsCi19OwotCi1zdGF0aWMgdm9pZCBpbnRlZ3JhdG9yX2Nsb2NrZXZlbnRfaW5pdCh1bnNpZ25lZCBsb25nIGlucmF0ZSwKLQkJCQl2b2lkIF9faW9tZW0gKmJhc2UsIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyByYXRlID0gaW5yYXRlOwotCXVuc2lnbmVkIGludCBjdHJsID0gMDsKLQotCWNsa2V2dF9iYXNlID0gYmFzZTsKLQkvKiBDYWxjdWxhdGUgYW5kIHByb2dyYW0gYSBkaXZpc29yICovCi0JaWYgKHJhdGUgPiAweDEwMDAwMCAqIEhaKSB7Ci0JCXJhdGUgLz0gMjU2OwotCQljdHJsIHw9IFRJTUVSX0NUUkxfRElWMjU2OwotCX0gZWxzZSBpZiAocmF0ZSA+IDB4MTAwMDAgKiBIWikgewotCQlyYXRlIC89IDE2OwotCQljdHJsIHw9IFRJTUVSX0NUUkxfRElWMTY7Ci0JfQotCXRpbWVyX3JlbG9hZCA9IHJhdGUgLyBIWjsKLQl3cml0ZWwoY3RybCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKLQotCXNldHVwX2lycShpcnEsICZpbnRlZ3JhdG9yX3RpbWVyX2lycSk7Ci0JY2xvY2tldmVudHNfY29uZmlnX2FuZF9yZWdpc3RlcigmaW50ZWdyYXRvcl9jbG9ja2V2ZW50LAotCQkJCQlyYXRlLAotCQkJCQkxLAotCQkJCQkweGZmZmZVKTsKLX0KLQogdm9pZCBfX2luaXQgYXBfaW5pdF9lYXJseSh2b2lkKQogewogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXBfb2ZfdGltZXJfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQljb25zdCBjaGFyICpwYXRoOwotCXZvaWQgX19pb21lbSAqYmFzZTsKLQlpbnQgZXJyOwotCWludCBpcnE7Ci0Jc3RydWN0IGNsayAqY2xrOwotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKLQotCW9mX2Nsa19pbml0KE5VTEwpOwotCi0JZXJyID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcob2ZfYWxpYXNlcywKLQkJCQkiYXJtLHRpbWVyLXByaW1hcnkiLCAmcGF0aCk7Ci0JaWYgKFdBUk5fT04oZXJyKSkKLQkJcmV0dXJuOwotCW5vZGUgPSBvZl9maW5kX25vZGVfYnlfcGF0aChwYXRoKTsKLQliYXNlID0gb2ZfaW9tYXAobm9kZSwgMCk7Ci0JaWYgKFdBUk5fT04oIWJhc2UpKQotCQlyZXR1cm47Ci0KLQljbGsgPSBvZl9jbGtfZ2V0KG5vZGUsIDApOwotCUJVR19PTihJU19FUlIoY2xrKSk7Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7Ci0JcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOwotCi0Jd3JpdGVsKDAsIGJhc2UgKyBUSU1FUl9DVFJMKTsKLQlpbnRlZ3JhdG9yX2Nsb2Nrc291cmNlX2luaXQocmF0ZSwgYmFzZSk7Ci0KLQllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhvZl9hbGlhc2VzLAotCQkJCSJhcm0sdGltZXItc2Vjb25kYXJ5IiwgJnBhdGgpOwotCWlmIChXQVJOX09OKGVycikpCi0JCXJldHVybjsKLQlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgocGF0aCk7Ci0JYmFzZSA9IG9mX2lvbWFwKG5vZGUsIDApOwotCWlmIChXQVJOX09OKCFiYXNlKSkKLQkJcmV0dXJuOwotCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDApOwotCi0JY2xrID0gb2ZfY2xrX2dldChub2RlLCAwKTsKLQlCVUdfT04oSVNfRVJSKGNsaykpOwotCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOwotCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKLQotCXdyaXRlbCgwLCBiYXNlICsgVElNRVJfQ1RSTCk7Ci0JaW50ZWdyYXRvcl9jbG9ja2V2ZW50X2luaXQocmF0ZSwgYmFzZSwgaXJxKTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGFwX2luaXRfaXJxX29mKHZvaWQpCiB7CiAJY21faW5pdCgpOwpAQCAtNDc3LDEwICsyODcsNiBAQAogCXVuc2lnbmVkIGxvbmcgc2NfZGVjOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3lzY29uOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZWJpOwotCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKLQlzdHJ1Y3Qgc29jX2RldmljZSAqc29jX2RldjsKLQlzdHJ1Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgKnNvY19kZXZfYXR0cjsKLQl1MzIgYXBfc2NfaWQ7CiAJaW50IGk7CiAKIAlzeXNjb24gPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgYXBfc3lzY29uX21hdGNoKTsKQEAgLTUwMCwyOCArMzA2LDYgQEAKIAlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwKIAkJCWFwX2F1eGRhdGFfbG9va3VwLCBOVUxMKTsKIAotCWFwX3NjX2lkID0gcmVhZGwoYXBfc3lzY29uX2Jhc2UpOwotCi0Jc29jX2Rldl9hdHRyID0ga3phbGxvYyhzaXplb2YoKnNvY19kZXZfYXR0ciksIEdGUF9LRVJORUwpOwotCWlmICghc29jX2Rldl9hdHRyKQotCQlyZXR1cm47Ci0KLQlzb2NfZGV2X2F0dHItPnNvY19pZCA9ICJYVkMiOwotCXNvY19kZXZfYXR0ci0+bWFjaGluZSA9ICJJbnRlZ3JhdG9yL0FQIjsKLQlzb2NfZGV2X2F0dHItPmZhbWlseSA9ICJJbnRlZ3JhdG9yIjsKLQlzb2NfZGV2X2F0dHItPnJldmlzaW9uID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlYyIsCi0JCQkJCSAgICdBJyArIChhcF9zY19pZCAmIDB4MGYpKTsKLQotCXNvY19kZXYgPSBzb2NfZGV2aWNlX3JlZ2lzdGVyKHNvY19kZXZfYXR0cik7Ci0JaWYgKElTX0VSUihzb2NfZGV2KSkgewotCQlrZnJlZShzb2NfZGV2X2F0dHItPnJldmlzaW9uKTsKLQkJa2ZyZWUoc29jX2Rldl9hdHRyKTsKLQkJcmV0dXJuOwotCX0KLQotCXBhcmVudCA9IHNvY19kZXZpY2VfdG9fZGV2aWNlKHNvY19kZXYpOwotCWludGVncmF0b3JfaW5pdF9zeXNmcyhwYXJlbnQsIGFwX3NjX2lkKTsKLQogCXNjX2RlYyA9IHJlYWRsKGFwX3N5c2Nvbl9iYXNlICsgSU5URUdSQVRPUl9TQ19ERUNfT0ZGU0VUKTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXN0cnVjdCBsbV9kZXZpY2UgKmxtZGV2OwpAQCAtNTUzLDggKzMzNyw2IEBACiAJLm1hcF9pbwkJPSBhcF9tYXBfaW8sCiAJLmluaXRfZWFybHkJPSBhcF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IGFwX2luaXRfaXJxX29mLAotCS5pbml0X3RpbWUJPSBhcF9vZl90aW1lcl9pbml0LAogCS5pbml0X21hY2hpbmUJPSBhcF9pbml0X29mLAotCS5yZXN0YXJ0CT0gaW50ZWdyYXRvcl9yZXN0YXJ0LAogCS5kdF9jb21wYXQgICAgICA9IGFwX2R0X2JvYXJkX2NvbXBhdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwppbmRleCBjY2EwMmViLi5iNWZiNzFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNfc29jLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWRfY2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMjc0LDEwICsyNzMsNiBAQAogc3RhdGljIHZvaWQgX19pbml0IGludGNwX2luaXRfb2Yodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwY29uOwotCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKLQlzdHJ1Y3Qgc29jX2RldmljZSAqc29jX2RldjsKLQlzdHJ1Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgKnNvY19kZXZfYXR0cjsKLQl1MzIgaW50Y3Bfc2NfaWQ7CiAKIAljcGNvbiA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBpbnRjcF9zeXNjb25fbWF0Y2gpOwogCWlmICghY3Bjb24pCkBAIC0yODksMjggKzI4NCw2IEBACiAKIAlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwKIAkJCSAgICAgaW50Y3BfYXV4ZGF0YV9sb29rdXAsIE5VTEwpOwotCi0JaW50Y3Bfc2NfaWQgPSByZWFkbChpbnRjcF9jb25fYmFzZSk7Ci0KLQlzb2NfZGV2X2F0dHIgPSBremFsbG9jKHNpemVvZigqc29jX2Rldl9hdHRyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzb2NfZGV2X2F0dHIpCi0JCXJldHVybjsKLQotCXNvY19kZXZfYXR0ci0+c29jX2lkID0gIlhDViI7Ci0Jc29jX2Rldl9hdHRyLT5tYWNoaW5lID0gIkludGVncmF0b3IvQ1AiOwotCXNvY19kZXZfYXR0ci0+ZmFtaWx5ID0gIkludGVncmF0b3IiOwotCXNvY19kZXZfYXR0ci0+cmV2aXNpb24gPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVjIiwKLQkJCQkJICAgJ0EnICsgKGludGNwX3NjX2lkICYgMHgwZikpOwotCi0Jc29jX2RldiA9IHNvY19kZXZpY2VfcmVnaXN0ZXIoc29jX2Rldl9hdHRyKTsKLQlpZiAoSVNfRVJSKHNvY19kZXYpKSB7Ci0JCWtmcmVlKHNvY19kZXZfYXR0ci0+cmV2aXNpb24pOwotCQlrZnJlZShzb2NfZGV2X2F0dHIpOwotCQlyZXR1cm47Ci0JfQotCi0JcGFyZW50ID0gc29jX2RldmljZV90b19kZXZpY2Uoc29jX2Rldik7Ci0JaW50ZWdyYXRvcl9pbml0X3N5c2ZzKHBhcmVudCwgaW50Y3Bfc2NfaWQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGludGNwX2R0X2JvYXJkX2NvbXBhdFtdID0gewpAQCAtMzI0LDYgKzI5Nyw1IEBACiAJLmluaXRfZWFybHkJPSBpbnRjcF9pbml0X2Vhcmx5LAogCS5pbml0X2lycQk9IGludGNwX2luaXRfaXJxX29mLAogCS5pbml0X21hY2hpbmUJPSBpbnRjcF9pbml0X29mLAotCS5yZXN0YXJ0CT0gaW50ZWdyYXRvcl9yZXN0YXJ0LAogCS5kdF9jb21wYXQgICAgICA9IGludGNwX2R0X2JvYXJkX2NvbXBhdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbGVkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2xlZHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFkY2I1Ny4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbGVkcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiBEcml2ZXIgZm9yIHRoZSA0IHVzZXIgTEVEcyBmb3VuZCBvbiB0aGUgSW50ZWdyYXRvciBBUC9DUCBiYXNlYm9hcmQKLSAqIEJhc2VkIG9uIFZlcnNhdGlsZSBhbmQgUmVhbFZpZXcgbWFjaGluZSBMRUQgY29kZQotICoKLSAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgotICogQXV0aG9yOiBCcnlhbiBXdSA8YnJ5YW4ud3VAY2Fub25pY2FsLmNvbT4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0KLSNpbmNsdWRlICJoYXJkd2FyZS5oIgotI2luY2x1ZGUgImNtLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19ORVdfTEVEUykgJiYgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTUykKLQotI2RlZmluZSBBTFBIQV9SRUcgX19pb19hZGRyZXNzKElOVEVHUkFUT1JfREJHX0JBU0UpCi0jZGVmaW5lIExFRFJFRwkoX19pb19hZGRyZXNzKElOVEVHUkFUT1JfREJHX0JBU0UpICsgSU5URUdSQVRPUl9EQkdfTEVEU19PRkZTRVQpCi0KLXN0cnVjdCBpbnRlZ3JhdG9yX2xlZCB7Ci0Jc3RydWN0IGxlZF9jbGFzc2RldgljZGV2OwotCXU4CQkJbWFzazsKLX07Ci0KLS8qCi0gKiBUaGUgdHJpZ2dlcnMgbGluZXMgdXAgYmVsb3cgd2lsbCBvbmx5IGJlIHVzZWQgaWYgdGhlCi0gKiBMRUQgdHJpZ2dlcnMgYXJlIGNvbXBpbGVkIGluLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQljb25zdCBjaGFyICpuYW1lOwotCWNvbnN0IGNoYXIgKnRyaWdnZXI7Ci19IGludGVncmF0b3JfbGVkc1tdID0gewotCXsgImludGVncmF0b3I6Z3JlZW4wIiwgImhlYXJ0YmVhdCIsIH0sCi0JeyAiaW50ZWdyYXRvcjp5ZWxsb3ciLCB9LAotCXsgImludGVncmF0b3I6cmVkIiwgfSwKLQl7ICJpbnRlZ3JhdG9yOmdyZWVuMSIsIH0sCi0JeyAiaW50ZWdyYXRvcjpjb3JlX21vZHVsZSIsICJjcHUwIiwgfSwKLX07Ci0KLXN0YXRpYyB2b2lkIGludGVncmF0b3JfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2LAotCQkJICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBiKQotewotCXN0cnVjdCBpbnRlZ3JhdG9yX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGNkZXYsCi0JCQkJCQkgc3RydWN0IGludGVncmF0b3JfbGVkLCBjZGV2KTsKLQl1MzIgcmVnID0gX19yYXdfcmVhZGwoTEVEUkVHKTsKLQotCWlmIChiICE9IExFRF9PRkYpCi0JCXJlZyB8PSBsZWQtPm1hc2s7Ci0JZWxzZQotCQlyZWcgJj0gfmxlZC0+bWFzazsKLQotCXdoaWxlIChfX3Jhd19yZWFkbChBTFBIQV9SRUcpICYgMSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQlfX3Jhd193cml0ZWwocmVnLCBMRURSRUcpOwotfQotCi1zdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpbnRlZ3JhdG9yX2xlZF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldikKLXsKLQlzdHJ1Y3QgaW50ZWdyYXRvcl9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihjZGV2LAotCQkJCQkJIHN0cnVjdCBpbnRlZ3JhdG9yX2xlZCwgY2Rldik7Ci0JdTMyIHJlZyA9IF9fcmF3X3JlYWRsKExFRFJFRyk7Ci0KLQlyZXR1cm4gKHJlZyAmIGxlZC0+bWFzaykgPyBMRURfRlVMTCA6IExFRF9PRkY7Ci19Ci0KLXN0YXRpYyB2b2lkIGNtX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldiwKLQkJCSAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYikKLXsKLQlpZiAoYiAhPSBMRURfT0ZGKQotCQljbV9jb250cm9sKENNX0NUUkxfTEVELCBDTV9DVFJMX0xFRCk7Ci0JZWxzZQotCQljbV9jb250cm9sKENNX0NUUkxfTEVELCAwKTsKLX0KLQotc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgY21fbGVkX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KQotewotCXUzMiByZWcgPSBjbV9nZXQoKTsKLQotCXJldHVybiAocmVnICYgQ01fQ1RSTF9MRUQpID8gTEVEX0ZVTEwgOiBMRURfT0ZGOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbnRlZ3JhdG9yX2xlZHNfaW5pdCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW50ZWdyYXRvcl9sZWRzKTsgaSsrKSB7Ci0JCXN0cnVjdCBpbnRlZ3JhdG9yX2xlZCAqbGVkOwotCi0JCWxlZCA9IGt6YWxsb2Moc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFsZWQpCi0JCQlicmVhazsKLQotCi0JCWxlZC0+Y2Rldi5uYW1lID0gaW50ZWdyYXRvcl9sZWRzW2ldLm5hbWU7Ci0KLQkJaWYgKGkgPT0gNCkgeyAvKiBTZXR0aW5nIGZvciBMRUQgaW4gY29yZSBtb2R1bGUgKi8KLQkJCWxlZC0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IGNtX2xlZF9zZXQ7Ci0JCQlsZWQtPmNkZXYuYnJpZ2h0bmVzc19nZXQgPSBjbV9sZWRfZ2V0OwotCQl9IGVsc2UgewotCQkJbGVkLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gaW50ZWdyYXRvcl9sZWRfc2V0OwotCQkJbGVkLT5jZGV2LmJyaWdodG5lc3NfZ2V0ID0gaW50ZWdyYXRvcl9sZWRfZ2V0OwotCQl9Ci0KLQkJbGVkLT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IGludGVncmF0b3JfbGVkc1tpXS50cmlnZ2VyOwotCQlsZWQtPm1hc2sgPSBCSVQoaSk7Ci0KLQkJaWYgKGxlZF9jbGFzc2Rldl9yZWdpc3RlcihOVUxMLCAmbGVkLT5jZGV2KSA8IDApIHsKLQkJCWtmcmVlKGxlZCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogU2luY2Ugd2UgbWF5IGhhdmUgdHJpZ2dlcnMgb24gYW55IHN1YnN5c3RlbSwgZGVmZXIgcmVnaXN0cmF0aW9uCi0gKiB1bnRpbCBhZnRlciBzdWJzeXN0ZW1faW5pdC4KLSAqLwotZnNfaW5pdGNhbGwoaW50ZWdyYXRvcl9sZWRzX2luaXQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvbXNpLmMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvbXNpLmMKaW5kZXggZTc3MzBjZi4uOWY4OWU3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L21zaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9tc2kuYwpAQCAtMTI2LDEwICsxMjYsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9wMTN4eF9tc2lfY2hpcCA9IHsKIAkubmFtZSA9ICJQQ0ktTVNJIiwKIAkuaXJxX2FjayA9IGlvcDEzeHhfbXNpX25vcCwKLQkuaXJxX2VuYWJsZSA9IHVubWFza19tc2lfaXJxLAotCS5pcnFfZGlzYWJsZSA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX21hc2sgPSBtYXNrX21zaV9pcnEsCi0JLmlycV91bm1hc2sgPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX2VuYWJsZSA9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2Rpc2FibGUgPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfbWFzayA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBwY2lfbXNpX3VubWFza19pcnEsCiB9OwogCiBpbnQgYXJjaF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCkBAIC0xNTMsNyArMTUzLDcgQEAKIAlpZCA9IGlvcDEzeHhfY3B1X2lkKCk7CiAJbXNnLmRhdGEgPSAoaWQgPDwgSU9QMTNYWF9NVV9NSU1SX0NPUkVfU0VMRUNUKSB8IChpcnEgJiAweDdmKTsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZpb3AxM3h4X21zaV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKaW5kZXggZmM0YjdiMi4uODUzN2Q0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKQEAgLTY1Miw3ICs2NTIsNyBAQAogCXJldHVybiAodm9pZCBfX2lvbWVtICopYWRkcjsKIH0KIAotc3RhdGljIHZvaWQgaXhwNHh4X2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKQorc3RhdGljIHZvaWQgaXhwNHh4X2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCWlmICghaXNfcGNpX21lbW9yeSgoX19mb3JjZSB1MzIpYWRkcikpCiAJCV9faW91bm1hcChhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggN2QxMTk3OS4uNmE3MjI4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTU4LDYgKzU4LDEwIEBACiAjZGVmaW5lIHdyaXRldyh2LCBwKQkJCV9faW5kaXJlY3Rfd3JpdGV3KHYsIHApCiAjZGVmaW5lIHdyaXRlbCh2LCBwKQkJCV9faW5kaXJlY3Rfd3JpdGVsKHYsIHApCiAKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQodiwgcCkJCV9faW5kaXJlY3Rfd3JpdGViKHYsIHApCisjZGVmaW5lIHdyaXRld19yZWxheGVkKHYsIHApCQlfX2luZGlyZWN0X3dyaXRldyh2LCBwKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZCh2LCBwKQkJX19pbmRpcmVjdF93cml0ZWwodiwgcCkKKwogI2RlZmluZSB3cml0ZXNiKHAsIHYsIGwpCQlfX2luZGlyZWN0X3dyaXRlc2IocCwgdiwgbCkKICNkZWZpbmUgd3JpdGVzdyhwLCB2LCBsKQkJX19pbmRpcmVjdF93cml0ZXN3KHAsIHYsIGwpCiAjZGVmaW5lIHdyaXRlc2wocCwgdiwgbCkJCV9faW5kaXJlY3Rfd3JpdGVzbChwLCB2LCBsKQpAQCAtNjYsNiArNzAsMTAgQEAKICNkZWZpbmUgcmVhZHcocCkJCQlfX2luZGlyZWN0X3JlYWR3KHApCiAjZGVmaW5lIHJlYWRsKHApCQkJX19pbmRpcmVjdF9yZWFkbChwKQogCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQocCkJCV9faW5kaXJlY3RfcmVhZGIocCkKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChwKQkJX19pbmRpcmVjdF9yZWFkdyhwKQorI2RlZmluZSByZWFkbF9yZWxheGVkKHApCQlfX2luZGlyZWN0X3JlYWRsKHApCisKICNkZWZpbmUgcmVhZHNiKHAsIHYsIGwpCQkJX19pbmRpcmVjdF9yZWFkc2IocCwgdiwgbCkKICNkZWZpbmUgcmVhZHN3KHAsIHYsIGwpCQkJX19pbmRpcmVjdF9yZWFkc3cocCwgdiwgbCkKICNkZWZpbmUgcmVhZHNsKHAsIHYsIGwpCQkJX19pbmRpcmVjdF9yZWFkc2wocCwgdiwgbCkKQEAgLTk5LDcgKzEwNyw3IEBACiAJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKIAogCWlmICghaXNfcGNpX21lbW9yeShhZGRyKSkgewotCQlfX3Jhd193cml0ZXcodmFsdWUsIGFkZHIpOworCQlfX3Jhd193cml0ZXcodmFsdWUsIHApOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNjQsNyArMTcyLDcgQEAKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwogCiAJaWYgKCFpc19wY2lfbWVtb3J5KGFkZHIpKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoYWRkcik7CisJCXJldHVybiBfX3Jhd19yZWFkdyhwKTsKIAogCW4gPSBhZGRyICUgNDsKIAlieXRlX2VuYWJsZXMgPSAoMHhmICYgfihCSVQobikgfCBCSVQobisxKSkpIDw8IElYUDRYWF9QQ0lfTlBfQ0JFX0JFU0w7CkBAIC0yMjYsNiArMjM0LDcgQEAKICAqIEkvTyBmdW5jdGlvbnMuCiAgKi8KIAorI2RlZmluZSBvdXRiIG91dGIKIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXRiKHU4IHZhbHVlLCB1MzIgYWRkcikKIHsKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwpAQCAtMjM1LDEyICsyNDQsMTQgQEAKIAlpeHA0eHhfcGNpX3dyaXRlKGFkZHIsIGJ5dGVfZW5hYmxlcyB8IE5QX0NNRF9JT1dSSVRFLCBkYXRhKTsKIH0KIAorI2RlZmluZSBvdXRzYiBvdXRzYgogc3RhdGljIGlubGluZSB2b2lkIG91dHNiKHUzMiBpb19hZGRyLCBjb25zdCB1OCAqdmFkZHIsIHUzMiBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKIAkJb3V0YigqdmFkZHIrKywgaW9fYWRkcik7CiB9CiAKKyNkZWZpbmUgb3V0dyBvdXR3CiBzdGF0aWMgaW5saW5lIHZvaWQgb3V0dyh1MTYgdmFsdWUsIHUzMiBhZGRyKQogewogCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CkBAIC0yNTAsMjMgKzI2MSwyNyBAQAogCWl4cDR4eF9wY2lfd3JpdGUoYWRkciwgYnl0ZV9lbmFibGVzIHwgTlBfQ01EX0lPV1JJVEUsIGRhdGEpOwogfQogCisjZGVmaW5lIG91dHN3IG91dHN3CiBzdGF0aWMgaW5saW5lIHZvaWQgb3V0c3codTMyIGlvX2FkZHIsIGNvbnN0IHUxNiAqdmFkZHIsIHUzMiBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKIAkJb3V0dyhjcHVfdG9fbGUxNigqdmFkZHIrKyksIGlvX2FkZHIpOwogfQogCisjZGVmaW5lIG91dGwgb3V0bAogc3RhdGljIGlubGluZSB2b2lkIG91dGwodTMyIHZhbHVlLCB1MzIgYWRkcikKIHsKIAlpeHA0eHhfcGNpX3dyaXRlKGFkZHIsIE5QX0NNRF9JT1dSSVRFLCB2YWx1ZSk7CiB9CiAKKyNkZWZpbmUgb3V0c2wgb3V0c2wKIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzbCh1MzIgaW9fYWRkciwgY29uc3QgdTMyICp2YWRkciwgdTMyIGNvdW50KQogewogCXdoaWxlIChjb3VudC0tKQogCQlvdXRsKGNwdV90b19sZTMyKCp2YWRkcisrKSwgaW9fYWRkcik7CiB9CiAKKyNkZWZpbmUgaW5iIGluYgogc3RhdGljIGlubGluZSB1OCBpbmIodTMyIGFkZHIpCiB7CiAJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKQEAgLTI3OCwxMiArMjkzLDE0IEBACiAJcmV0dXJuIGRhdGEgPj4gKDgqbik7CiB9CiAKKyNkZWZpbmUgaW5zYiBpbnNiCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5zYih1MzIgaW9fYWRkciwgdTggKnZhZGRyLCB1MzIgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCiAJCSp2YWRkcisrID0gaW5iKGlvX2FkZHIpOwogfQogCisjZGVmaW5lIGludyBpbncKIHN0YXRpYyBpbmxpbmUgdTE2IGludyh1MzIgYWRkcikKIHsKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwpAQCAtMjk1LDEyICszMTIsMTQgQEAKIAlyZXR1cm4gZGF0YT4+KDgqbik7CiB9CiAKKyNkZWZpbmUgaW5zdyBpbnN3CiBzdGF0aWMgaW5saW5lIHZvaWQgaW5zdyh1MzIgaW9fYWRkciwgdTE2ICp2YWRkciwgdTMyIGNvdW50KQogewogCXdoaWxlIChjb3VudC0tKQogCQkqdmFkZHIrKyA9IGxlMTZfdG9fY3B1KGludyhpb19hZGRyKSk7CiB9CiAKKyNkZWZpbmUgaW5sIGlubAogc3RhdGljIGlubGluZSB1MzIgaW5sKHUzMiBhZGRyKQogewogCXUzMiBkYXRhOwpAQCAtMzEwLDYgKzMyOSw3IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKKyNkZWZpbmUgaW5zbCBpbnNsCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5zbCh1MzIgaW9fYWRkciwgdTMyICp2YWRkciwgdTMyIGNvdW50KQogewogCXdoaWxlIChjb3VudC0tKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rZXlzdG9uZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1rZXlzdG9uZS9LY29uZmlnCmluZGV4IDk4YTE1NmEuLmVhOTU1ZjZkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rZXlzdG9uZS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gta2V5c3RvbmUvS2NvbmZpZwpAQCAtOSw2ICs5LDggQEAKIAlzZWxlY3QgQ09NTU9OX0NMS19LRVlTVE9ORQogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0JJR19FTkRJQU4KIAlzZWxlY3QgWk9ORV9ETUEgaWYgQVJNX0xQQUUKKwlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKKwlzZWxlY3QgUENJX0RPTUFJTlMgaWYgUENJCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgYm9hcmRzIGJhc2VkIG9uIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBLZXlzdG9uZSBmYW1pbHkgb2YKIAkgIFNvQ3MuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtleXN0b25lL3BtX2RvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1rZXlzdG9uZS9wbV9kb21haW4uYwppbmRleCBjYTc5ZGRhLi5lZjYwNDFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtleXN0b25lL3BtX2RvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gta2V5c3RvbmUvcG1fZG9tYWluLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQga2V5c3RvbmVfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tZWRpYXRlay9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1tZWRpYXRlay9LY29uZmlnCmluZGV4IDJjMDQzYTIuLmY3M2Y1ODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbWVkaWF0ZWsvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW1lZGlhdGVrL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgQVJDSF9NRURJQVRFSwotCWJvb2wgIk1lZGlhdGVrIE1UNjU4OSBTb0MiIGlmIEFSQ0hfTVVMVElfVjcKKwlib29sICJNZWRpYXRlayBNVDY1eHggJiBNVDgxeHggU29DIiBpZiBBUkNIX01VTFRJX1Y3CiAJc2VsZWN0IEFSTV9HSUMKIAlzZWxlY3QgTVRLX1RJTUVSCiAJaGVscAotCSAgU3VwcG9ydCBmb3IgTWVkaWF0ZWsgQ29ydGV4LUE3IFF1YWQtQ29yZS1Tb0MgTVQ2NTg5LgorCSAgU3VwcG9ydCBmb3IgTWVkaWF0ZWsgTVQ2NXh4ICYgTVQ4MXh4IFNvQ3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbWVkaWF0ZWsvbWVkaWF0ZWsuYyBiL2FyY2gvYXJtL21hY2gtbWVkaWF0ZWsvbWVkaWF0ZWsuYwppbmRleCBmMmFjZjA3Li5hOTU0OTAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1lZGlhdGVrL21lZGlhdGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tZWRpYXRlay9tZWRpYXRlay5jCkBAIC0xOSw2ICsxOSw5IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWVkaWF0ZWtfYm9hcmRfZHRfY29tcGF0W10gPSB7CiAJIm1lZGlhdGVrLG10NjU4OSIsCisJIm1lZGlhdGVrLG10NjU5MiIsCisJIm1lZGlhdGVrLG10ODEyNyIsCisJIm1lZGlhdGVrLG10ODEzNSIsCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbWVzb24vS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbWVzb24vS2NvbmZpZwppbmRleCAyYzExNTRlLi4xODMwMWRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1lc29uL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1tZXNvbi9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCWJvb2wgIkFtbG9naWMgTWVzb24gU29DcyIgaWYgQVJDSF9NVUxUSV9WNwogCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgQ0FDSEVfTDJYMAogCiBpZiBBUkNIX01FU09OCiAKQEAgLTEwLDQgKzExLDkgQEAKIAlkZWZhdWx0IEFSQ0hfTUVTT04KIAlzZWxlY3QgTUVTT042X1RJTUVSCiAKK2NvbmZpZyBNQUNIX01FU09OOAorCWJvb2wgIkFtbG9naWMgTWVzb244IFNvQ3Mgc3VwcG9ydCIKKwlkZWZhdWx0IEFSQ0hfTUVTT04KKwlzZWxlY3QgTUVTT042X1RJTUVSCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1lc29uL21lc29uLmMgYi9hcmNoL2FybS9tYWNoLW1lc29uL21lc29uLmMKaW5kZXggNWVlMDY0Zi4uNWQ2YWZmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tZXNvbi9tZXNvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbWVzb24vbWVzb24uYwpAQCAtMTYsMTIgKzE2LDE0IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbTZfY29tbW9uX2JvYXJkX2NvbXBhdFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtZXNvbl9jb21tb25fYm9hcmRfY29tcGF0W10gPSB7CiAJImFtbG9naWMsbWVzb242IiwKKwkiYW1sb2dpYyxtZXNvbjgiLAogCU5VTEwsCiB9OwogCi1EVF9NQUNISU5FX1NUQVJUKEFNTDg3MjZfTVgsICJBbWxvZ2ljIE1lc29uNiBwbGF0Zm9ybSIpCi0JLmR0X2NvbXBhdAk9IG02X2NvbW1vbl9ib2FyZF9jb21wYXQsCitEVF9NQUNISU5FX1NUQVJUKE1FU09OLCAiQW1sb2dpYyBNZXNvbiBwbGF0Zm9ybSIpCisJLmR0X2NvbXBhdAk9IG1lc29uX2NvbW1vbl9ib2FyZF9jb21wYXQsCisJLmwyY19hdXhfdmFsCT0gMCwKKwkubDJjX2F1eF9tYXNrCT0gfjAsCiBNQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9NYWtlZmlsZQppbmRleCBlMjQxMzZiLi5iNGYwMTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiBvYmotJChDT05GSUdfTUFDSF9NVkVCVV9BTlkpCSArPSBzeXN0ZW0tY29udHJvbGxlci5vIG12ZWJ1LXNvYy1pZC5vCiAKIGlmZXEgKCQoQ09ORklHX01BQ0hfTVZFQlVfVjcpLHkpCi1vYmoteQkJCQkgKz0gY3B1LXJlc2V0Lm8gYm9hcmQtdjcubyBjb2hlcmVuY3kubyBjb2hlcmVuY3lfbGwubyBwbXN1Lm8gcG1zdV9sbC5vCitvYmoteQkJCQkgKz0gY3B1LXJlc2V0Lm8gYm9hcmQtdjcubyBjb2hlcmVuY3kubyBjb2hlcmVuY3lfbGwubyBwbXN1Lm8gcG1zdV9sbC5vIHBtLm8gcG0tYm9hcmQubwogb2JqLSQoQ09ORklHX1NNUCkJCSArPSBwbGF0c21wLm8gaGVhZHNtcC5vIHBsYXRzbXAtYTkubyBoZWFkc21wLWE5Lm8KIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvYXJtYWRhLTM3MC14cC5oIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9hcm1hZGEtMzcwLXhwLmgKaW5kZXggODRjZDkwZC4uYzU1YmJmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9hcm1hZGEtMzcwLXhwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9hcm1hZGEtMzcwLXhwLmgKQEAgLTE2LDE0ICsxNiw4IEBACiAjZGVmaW5lIF9fTUFDSF9BUk1BREFfMzcwX1hQX0gKIAogI2lmZGVmIENPTkZJR19TTVAKLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0KLSNkZWZpbmUgQVJNQURBX1hQX01BWF9DUFVTIDQKLQogdm9pZCBhcm1hZGFfeHBfc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7CiBleHRlcm4gc3RydWN0IHNtcF9vcGVyYXRpb25zIGFybWFkYV94cF9zbXBfb3BzOwogI2VuZGlmCiAKLWludCBhcm1hZGFfMzcwX3hwX3Btc3VfaWRsZV9lbnRlcih1bnNpZ25lZCBsb25nIGRlZXBpZGxlKTsKLQogI2VuZGlmIC8qIF9fTUFDSF9BUk1BREFfMzcwX1hQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYwppbmRleCBkMGQzOWYxLi44OWExMzllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jCkBAIC0xNiwxMCArMTYsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNTcsNiArNTksNTQgQEAKIH0KIAogLyoKKyAqIFdoZW4gcmV0dXJuaW5nIGZyb20gc3VzcGVuZCwgdGhlIHBsYXRmb3JtIGdvZXMgdGhyb3VnaCB0aGUKKyAqIGJvb3Rsb2FkZXIsIHdoaWNoIGV4ZWN1dGVzIGl0cyBERFIzIHRyYWluaW5nIGNvZGUuIFRoaXMgY29kZSBoYXMKKyAqIHRoZSB1bmZvcnR1bmF0ZSBpZGVhIG9mIHVzaW5nIHRoZSBmaXJzdCAxMCBLQiBvZiBlYWNoIERSQU0gYmFuayB0bworICogZXhlcmNpc2UgdGhlIFJBTSBhbmQgY2FsY3VsYXRlIHRoZSBvcHRpbWFsIHRpbWluZ3MuIFRoZXJlZm9yZSwgdGhpcworICogYXJlYSBvZiBSQU0gaXMgb3ZlcndyaXR0ZW4sIGFuZCBzaG91bGRuJ3QgYmUgdXNlZCBieSB0aGUga2VybmVsIGlmCisgKiBzdXNwZW5kL3Jlc3VtZSBpcyBzdXBwb3J0ZWQuCisgKi8KKworI2lmZGVmIENPTkZJR19TVVNQRU5ECisjZGVmaW5lIE1WRUJVX0REUl9UUkFJTklOR19BUkVBX1NaICgxMCAqIFNaXzFLKQorc3RhdGljIGludCBfX2luaXQgbXZlYnVfc2Nhbl9tZW0odW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSwKKwkJCQkgaW50IGRlcHRoLCB2b2lkICpkYXRhKQoreworCWNvbnN0IGNoYXIgKnR5cGUgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJkZXZpY2VfdHlwZSIsIE5VTEwpOworCWNvbnN0IF9fYmUzMiAqcmVnLCAqZW5kcDsKKwlpbnQgbDsKKworCWlmICh0eXBlID09IE5VTEwgfHwgc3RyY21wKHR5cGUsICJtZW1vcnkiKSkKKwkJcmV0dXJuIDA7CisKKwlyZWcgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx1c2FibGUtbWVtb3J5IiwgJmwpOworCWlmIChyZWcgPT0gTlVMTCkKKwkJcmVnID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicmVnIiwgJmwpOworCWlmIChyZWcgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwllbmRwID0gcmVnICsgKGwgLyBzaXplb2YoX19iZTMyKSk7CisJd2hpbGUgKChlbmRwIC0gcmVnKSA+PSAoZHRfcm9vdF9hZGRyX2NlbGxzICsgZHRfcm9vdF9zaXplX2NlbGxzKSkgeworCQl1NjQgYmFzZSwgc2l6ZTsKKworCQliYXNlID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X2FkZHJfY2VsbHMsICZyZWcpOworCQlzaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZyZWcpOworCisJCW1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgTVZFQlVfRERSX1RSQUlOSU5HX0FSRUFfU1opOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXZlYnVfbWVtYmxvY2tfcmVzZXJ2ZSh2b2lkKQoreworCW9mX3NjYW5fZmxhdF9kdChtdmVidV9zY2FuX21lbSwgTlVMTCk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IG12ZWJ1X21lbWJsb2NrX3Jlc2VydmUodm9pZCkge30KKyNlbmRpZgorCisvKgogICogRWFybHkgdmVyc2lvbnMgb2YgQXJtYWRhIDM3NSBTb0MgaGF2ZSBhIGJ1ZyB3aGVyZSB0aGUgQm9vdFJPTQogICogbGVhdmVzIGFuIGV4dGVybmFsIGRhdGEgYWJvcnQgcGVuZGluZy4gVGhlIGtlcm5lbCBpcyBoaXQgYnkgdGhpcwogICogZGF0YSBhYm9ydCBhcyBzb29uIGFzIGl0IGVudGVycyB1c2Vyc3BhY2UsIGJlY2F1c2UgaXQgdW5tYXNrcyB0aGUKQEAgLTEyNCw3NiArMTc0LDEyIEBACiAJcmV0dXJuOwogfQogCi0jZGVmaW5lIEEzNzVfWjFfVEhFUk1BTF9GSVhVUF9PRkZTRVQgMHhjCi0KLXN0YXRpYyB2b2lkIF9faW5pdCB0aGVybWFsX3F1aXJrKHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQl1MzIgZGV2LCByZXY7Ci0JaW50IHJlczsKLQotCS8qCi0JICogVGhlIGVhcmx5IFNvQyBaMSByZXZpc2lvbiBuZWVkcyBhIHF1aXJrIHRvIGJlIGFwcGxpZWQgaW4gb3JkZXIKLQkgKiBmb3IgdGhlIHRoZXJtYWwgY29udHJvbGxlciB0byB3b3JrIHByb3Blcmx5LiBUaGlzIHF1aXJrIGJyZWFrcwotCSAqIHRoZSB0aGVybWFsIHN1cHBvcnQgaWYgYXBwbGllZCBvbiBhIFNvQyB0aGF0IGRvZXNuJ3QgbmVlZCBpdCwKLQkgKiBzbyB3ZSBlbmZvcmNlIHRoZSBTb0MgcmV2aXNpb24gdG8gYmUga25vd24uCi0JICovCi0JcmVzID0gbXZlYnVfZ2V0X3NvY19pZCgmZGV2LCAmcmV2KTsKLQlpZiAocmVzIDwgMCB8fCAocmVzID09IDAgJiYgcmV2ID4gQVJNQURBXzM3NV9aMV9SRVYpKQotCQlyZXR1cm47Ci0KLQlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJtYXJ2ZWxsLGFybWFkYTM3NS10aGVybWFsIikgewotCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0JCV9fYmUzMiBuZXd2YWwsICpuZXdwcm9wLCAqb2xkcHJvcDsKLQkJaW50IGxlbjsKLQotCQkvKgotCQkgKiBUaGUgcmVnaXN0ZXIgb2Zmc2V0IGlzIGF0IGEgd3JvbmcgbG9jYXRpb24uIFRoaXMgcXVpcmsKLQkJICogY3JlYXRlcyBhIG5ldyByZWcgcHJvcGVydHkgYXMgYSBjbG9uZSBvZiB0aGUgcHJldmlvdXMKLQkJICogb25lIGFuZCBjb3JyZWN0cyB0aGUgb2Zmc2V0LgotCQkgKi8KLQkJb2xkcHJvcCA9IChfX2JlMzIgKilvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCAmbGVuKTsKLQkJaWYgKCFvbGRwcm9wKQotCQkJY29udGludWU7Ci0KLQkJLyogQ3JlYXRlIGEgZHVwbGljYXRlIG9mIHRoZSAncmVnJyBwcm9wZXJ0eSAqLwotCQlwcm9wID0ga3phbGxvYyhzaXplb2YoKnByb3ApLCBHRlBfS0VSTkVMKTsKLQkJcHJvcC0+bGVuZ3RoID0gbGVuOwotCQlwcm9wLT5uYW1lID0ga3N0cmR1cCgicmVnIiwgR0ZQX0tFUk5FTCk7Ci0JCXByb3AtPnZhbHVlID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCQltZW1jcHkocHJvcC0+dmFsdWUsIG9sZHByb3AsIGxlbik7Ci0KLQkJLyogRml4dXAgdGhlIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGUgc2Vjb25kIGVudHJ5ICovCi0JCW9sZHByb3AgKz0gMjsKLQkJbmV3cHJvcCA9IChfX2JlMzIgKilwcm9wLT52YWx1ZSArIDI7Ci0JCW5ld3ZhbCA9IGNwdV90b19iZTMyKGJlMzJfdG9fY3B1KCpvbGRwcm9wKSAtCi0JCQkJICAgICBBMzc1X1oxX1RIRVJNQUxfRklYVVBfT0ZGU0VUKTsKLQkJKm5ld3Byb3AgPSBuZXd2YWw7Ci0JCW9mX3VwZGF0ZV9wcm9wZXJ0eShucCwgcHJvcCk7Ci0KLQkJLyoKLQkJICogVGhlIHRoZXJtYWwgY29udHJvbGxlciBuZWVkcyBzb21lIHF1aXJrIHRvbywgc28gbGV0J3MgY2hhbmdlCi0JCSAqIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byByZWZsZWN0IHRoaXMgYW5kIGFsbG93IHRoZSBkcml2ZXIKLQkJICogdGhlIHRha2UgdGhlIG5lY2Vzc2FyeSBhY3Rpb24uCi0JCSAqLwotCQlwcm9wID0ga3phbGxvYyhzaXplb2YoKnByb3ApLCBHRlBfS0VSTkVMKTsKLQkJcHJvcC0+bmFtZSA9IGtzdHJkdXAoImNvbXBhdGlibGUiLCBHRlBfS0VSTkVMKTsKLQkJcHJvcC0+bGVuZ3RoID0gc2l6ZW9mKCJtYXJ2ZWxsLGFybWFkYTM3NS16MS10aGVybWFsIik7Ci0JCXByb3AtPnZhbHVlID0ga3N0cmR1cCgibWFydmVsbCxhcm1hZGEzNzUtejEtdGhlcm1hbCIsCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQkJb2ZfdXBkYXRlX3Byb3BlcnR5KG5wLCBwcm9wKTsKLQl9Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXZlYnVfZHRfaW5pdCh2b2lkKQogewogCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIm1hcnZlbGwsYXJtYWRheHAiKSkKIAkJaTJjX3F1aXJrKCk7Ci0JaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgibWFydmVsbCxhMzc1LWRiIikpIHsKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJtYXJ2ZWxsLGEzNzUtZGIiKSkKIAkJZXh0ZXJuYWxfYWJvcnRfcXVpcmsoKTsKLQkJdGhlcm1hbF9xdWlyaygpOwotCX0KIAogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKIH0KQEAgLTIwNiwxMCArMTkyLDE2IEBACiBEVF9NQUNISU5FX1NUQVJUKEFSTUFEQV8zNzBfWFBfRFQsICJNYXJ2ZWxsIEFybWFkYSAzNzAvWFAgKERldmljZSBUcmVlKSIpCiAJLmwyY19hdXhfdmFsCT0gMCwKIAkubDJjX2F1eF9tYXNrCT0gfjAsCisvKgorICogVGhlIGZvbGxvd2luZyBmaWVsZCAoLnNtcCkgaXMgc3RpbGwgbmVlZGVkIHRvIGVuc3VyZSBiYWNrd2FyZAorICogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBEZXZpY2UgVHJlZXMgdGhhdCB3ZXJlIG5vdCBzcGVjaWZ5aW5nIHRoZQorICogY3B1cyBlbmFibGUtbWV0aG9kIHByb3BlcnR5LgorICovCiAJLnNtcAkJPSBzbXBfb3BzKGFybWFkYV94cF9zbXBfb3BzKSwKIAkuaW5pdF9tYWNoaW5lCT0gbXZlYnVfZHRfaW5pdCwKIAkuaW5pdF9pcnEgICAgICAgPSBtdmVidV9pbml0X2lycSwKIAkucmVzdGFydAk9IG12ZWJ1X3Jlc3RhcnQsCisJLnJlc2VydmUgICAgICAgID0gbXZlYnVfbWVtYmxvY2tfcmVzZXJ2ZSwKIAkuZHRfY29tcGF0CT0gYXJtYWRhXzM3MF94cF9kdF9jb21wYXQsCiBNQUNISU5FX0VORAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYwppbmRleCAwNDRiNTExLi4zNTg1Y2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMKQEAgLTEsNSArMSw2IEBACiAvKgotICogQ29oZXJlbmN5IGZhYnJpYyAoQXVyb3JhKSBzdXBwb3J0IGZvciBBcm1hZGEgMzcwIGFuZCBYUCBwbGF0Zm9ybXMuCisgKiBDb2hlcmVuY3kgZmFicmljIChBdXJvcmEpIHN1cHBvcnQgZm9yIEFybWFkYSAzNzAsIDM3NSwgMzh4IGFuZCBYUAorICogcGxhdGZvcm1zLgogICoKICAqIENvcHlyaWdodCAoQykgMjAxMiBNYXJ2ZWxsCiAgKgpAQCAtMTEsNyArMTIsNyBAQAogICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQogICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICoKLSAqIFRoZSBBcm1hZGEgMzcwIGFuZCBBcm1hZGEgWFAgU09DcyBoYXZlIGEgY29oZXJlbmN5IGZhYnJpYyB3aGljaCBpcworICogVGhlIEFybWFkYSAzNzAsIDM3NSwgMzh4IGFuZCBYUCBTT0NzIGhhdmUgYSBjb2hlcmVuY3kgZmFicmljIHdoaWNoIGlzCiAgKiByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgaGFyZHdhcmUgY29oZXJlbmN5IGJldHdlZW4gYWxsIENQVXMgYW5kIGJldHdlZW4KICAqIENQVXMgYW5kIEkvTyBtYXN0ZXJzLiBUaGlzIGZpbGUgaW5pdGlhbGl6ZXMgdGhlIGNvaGVyZW5jeSBmYWJyaWMgYW5kCiAgKiBzdXBwbGllcyBiYXNpYyByb3V0aW5lcyBmb3IgY29uZmlndXJpbmcgYW5kIGNvbnRyb2xsaW5nIGhhcmR3YXJlIGNvaGVyZW5jeQpAQCAtMjgsMTIgKzI5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgImFybWFkYS0zNzAteHAuaCIKICNpbmNsdWRlICJjb2hlcmVuY3kuaCIKICNpbmNsdWRlICJtdmVidS1zb2MtaWQuaCIKIApAQCAtNDIsOCArNDEsNiBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqY29oZXJlbmN5X2NwdV9iYXNlOwogCiAvKiBDb2hlcmVuY3kgZmFicmljIHJlZ2lzdGVycyAqLwotI2RlZmluZSBDT0hFUkVOQ1lfRkFCUklDX0NGR19PRkZTRVQJCSAgIDB4NAotCiAjZGVmaW5lIElPX1NZTkNfQkFSUklFUl9DVExfT0ZGU0VUCQkgICAweDAKIAogZW51bSB7CkBAIC03OSwxNTcgKzc2LDggQEAKIAlyZXR1cm4gbGxfZW5hYmxlX2NvaGVyZW5jeSgpOwogfQogCi0vKgotICogVGhlIGJlbG93IGNvZGUgaW1wbGVtZW50cyB0aGUgSS9PIGNvaGVyZW5jeSB3b3JrYXJvdW5kIG9uIEFybWFkYQotICogMzc1LiBUaGlzIHdvcmthcm91bmQgY29uc2lzdHMgaW4gdXNpbmcgdGhlIHR3byBjaGFubmVscyBvZiB0aGUKLSAqIGZpcnN0IFhPUiBlbmdpbmUgdG8gdHJpZ2dlciBhIFhPUiB0cmFuc2FjdGlvbiB0aGF0IHNlcnZlcyBhcyB0aGUKLSAqIEkvTyBjb2hlcmVuY3kgYmFycmllci4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICp4b3JfYmFzZSwgKnhvcl9oaWdoX2Jhc2U7Ci1zdGF0aWMgZG1hX2FkZHJfdCBjb2hlcmVuY3lfd2FfYnVmX3BoeXNbQ09ORklHX05SX0NQVVNdOwotc3RhdGljIHZvaWQgKmNvaGVyZW5jeV93YV9idWZbQ09ORklHX05SX0NQVVNdOwotc3RhdGljIGJvb2wgY29oZXJlbmN5X3dhX2VuYWJsZWQ7Ci0KLSNkZWZpbmUgWE9SX0NPTkZJRyhjaGFuKSAgICAgICAgICAgICgweDEwICsgKGNoYW4gKiA0KSkKLSNkZWZpbmUgWE9SX0FDVElWQVRJT04oY2hhbikgICAgICAgICgweDIwICsgKGNoYW4gKiA0KSkKLSNkZWZpbmUgV0lORE9XX0JBUl9FTkFCTEUoY2hhbikgICAgICgweDI0MCArICgoY2hhbikgPDwgMikpCi0jZGVmaW5lIFdJTkRPV19CQVNFKHcpICAgICAgICAgICAgICAoMHgyNTAgKyAoKHcpIDw8IDIpKQotI2RlZmluZSBXSU5ET1dfU0laRSh3KSAgICAgICAgICAgICAgKDB4MjcwICsgKCh3KSA8PCAyKSkKLSNkZWZpbmUgV0lORE9XX1JFTUFQX0hJR0godykgICAgICAgICgweDI5MCArICgodykgPDwgMikpCi0jZGVmaW5lIFdJTkRPV19PVkVSUklERV9DVFJMKGNoYW4pICAoMHgyQTAgKyAoKGNoYW4pIDw8IDIpKQotI2RlZmluZSBYT1JfREVTVF9QT0lOVEVSKGNoYW4pICAgICAgKDB4MkIwICsgKGNoYW4gKiA0KSkKLSNkZWZpbmUgWE9SX0JMT0NLX1NJWkUoY2hhbikgICAgICAgICgweDJDMCArIChjaGFuICogNCkpCi0jZGVmaW5lIFhPUl9JTklUX1ZBTFVFX0xPVyAgICAgICAgICAgMHgyRTAKLSNkZWZpbmUgWE9SX0lOSVRfVkFMVUVfSElHSCAgICAgICAgICAweDJFNAotCi1zdGF0aWMgaW5saW5lIHZvaWQgbXZlYnVfaHdjY19hcm1hZGEzNzVfc3luY19pb19iYXJyaWVyX3dhKHZvaWQpCi17Ci0JaW50IGlkeCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCS8qIFdyaXRlICcxJyB0byB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgYnVmZmVyICovCi0Jd3JpdGVsKDB4MSwgY29oZXJlbmN5X3dhX2J1ZltpZHhdKTsKLQotCS8qIFdhaXQgdW50aWwgdGhlIGVuZ2luZSBpcyBpZGxlICovCi0Jd2hpbGUgKChyZWFkbCh4b3JfYmFzZSArIFhPUl9BQ1RJVkFUSU9OKGlkeCkpID4+IDQpICYgMHgzKQotCQk7Ci0KLQlkbWIoKTsKLQotCS8qIFRyaWdnZXIgY2hhbm5lbCAqLwotCXdyaXRlbCgweDEsIHhvcl9iYXNlICsgWE9SX0FDVElWQVRJT04oaWR4KSk7Ci0KLQkvKiBQb2xsIHRoZSBkYXRhIHVudGlsIGl0IGlzIGNsZWFyZWQgYnkgdGhlIFhPUiB0cmFuc2FjdGlvbiAqLwotCXdoaWxlIChyZWFkbChjb2hlcmVuY3lfd2FfYnVmW2lkeF0pKQotCQk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzc1X2NvaGVyZW5jeV9pbml0X3dhKHZvaWQpCi17Ci0JY29uc3Qgc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyAqZHJhbTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnhvcl9ub2RlOwotCXN0cnVjdCBwcm9wZXJ0eSAqeG9yX3N0YXR1czsKLQlzdHJ1Y3QgY2xrICp4b3JfY2xrOwotCXUzMiB3aW5fZW5hYmxlID0gMDsKLQlpbnQgaTsKLQotCXByX3dhcm4oImVuYWJsaW5nIGNvaGVyZW5jeSB3b3JrYXJvdW5kIGZvciBBcm1hZGEgMzc1IFoxLCBvbmUgWE9SIGVuZ2luZSBkaXNhYmxlZFxuIik7Ci0KLQkvKgotCSAqIFNpbmNlIHRoZSB3b3JrYXJvdW5kIHVzZXMgb25lIFhPUiBlbmdpbmUsIHdlIGdyYWIgYQotCSAqIHJlZmVyZW5jZSB0byBpdHMgRGV2aWNlIFRyZWUgbm9kZSBmaXJzdC4KLQkgKi8KLQl4b3Jfbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJtYXJ2ZWxsLG9yaW9uLXhvciIpOwotCUJVR19PTigheG9yX25vZGUpOwotCi0JLyoKLQkgKiBUaGVuIHdlIG1hcmsgaXQgYXMgZGlzYWJsZWQgc28gdGhhdCB0aGUgcmVhbCBYT1IgZHJpdmVyCi0JICogd2lsbCBub3QgdXNlIGl0LgotCSAqLwotCXhvcl9zdGF0dXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpLCBHRlBfS0VSTkVMKTsKLQlCVUdfT04oIXhvcl9zdGF0dXMpOwotCi0JeG9yX3N0YXR1cy0+dmFsdWUgPSBrc3RyZHVwKCJkaXNhYmxlZCIsIEdGUF9LRVJORUwpOwotCUJVR19PTigheG9yX3N0YXR1cy0+dmFsdWUpOwotCi0JeG9yX3N0YXR1cy0+bGVuZ3RoID0gODsKLQl4b3Jfc3RhdHVzLT5uYW1lID0ga3N0cmR1cCgic3RhdHVzIiwgR0ZQX0tFUk5FTCk7Ci0JQlVHX09OKCF4b3Jfc3RhdHVzLT5uYW1lKTsKLQotCW9mX3VwZGF0ZV9wcm9wZXJ0eSh4b3Jfbm9kZSwgeG9yX3N0YXR1cyk7Ci0KLQkvKgotCSAqIEFuZCB3ZSByZW1hcCB0aGUgcmVnaXN0ZXJzLCBnZXQgdGhlIGNsb2NrLCBhbmQgZG8gdGhlCi0JICogaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIHRoZSBYT1IgZW5naW5lLgotCSAqLwotCXhvcl9iYXNlID0gb2ZfaW9tYXAoeG9yX25vZGUsIDApOwotCXhvcl9oaWdoX2Jhc2UgPSBvZl9pb21hcCh4b3Jfbm9kZSwgMSk7Ci0KLQl4b3JfY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKHhvcl9ub2RlLCBOVUxMKTsKLQlCVUdfT04oIXhvcl9jbGspOwotCi0JY2xrX3ByZXBhcmVfZW5hYmxlKHhvcl9jbGspOwotCi0JZHJhbSA9IG12X21idXNfZHJhbV9pbmZvKCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXdyaXRlbCgwLCB4b3JfYmFzZSArIFdJTkRPV19CQVNFKGkpKTsKLQkJd3JpdGVsKDAsIHhvcl9iYXNlICsgV0lORE9XX1NJWkUoaSkpOwotCQlpZiAoaSA8IDQpCi0JCQl3cml0ZWwoMCwgeG9yX2Jhc2UgKyBXSU5ET1dfUkVNQVBfSElHSChpKSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRyYW0tPm51bV9jczsgaSsrKSB7Ci0JCWNvbnN0IHN0cnVjdCBtYnVzX2RyYW1fd2luZG93ICpjcyA9IGRyYW0tPmNzICsgaTsKLQkJd3JpdGVsKChjcy0+YmFzZSAmIDB4ZmZmZjAwMDApIHwKLQkJICAgICAgIChjcy0+bWJ1c19hdHRyIDw8IDgpIHwKLQkJICAgICAgIGRyYW0tPm1idXNfZHJhbV90YXJnZXRfaWQsIHhvcl9iYXNlICsgV0lORE9XX0JBU0UoaSkpOwotCQl3cml0ZWwoKGNzLT5zaXplIC0gMSkgJiAweGZmZmYwMDAwLCB4b3JfYmFzZSArIFdJTkRPV19TSVpFKGkpKTsKLQotCQl3aW5fZW5hYmxlIHw9ICgxIDw8IGkpOwotCQl3aW5fZW5hYmxlIHw9IDMgPDwgKDE2ICsgKDIgKiBpKSk7Ci0JfQotCi0Jd3JpdGVsKHdpbl9lbmFibGUsIHhvcl9iYXNlICsgV0lORE9XX0JBUl9FTkFCTEUoMCkpOwotCXdyaXRlbCh3aW5fZW5hYmxlLCB4b3JfYmFzZSArIFdJTkRPV19CQVJfRU5BQkxFKDEpKTsKLQl3cml0ZWwoMCwgeG9yX2Jhc2UgKyBXSU5ET1dfT1ZFUlJJREVfQ1RSTCgwKSk7Ci0Jd3JpdGVsKDAsIHhvcl9iYXNlICsgV0lORE9XX09WRVJSSURFX0NUUkwoMSkpOwotCi0JZm9yIChpID0gMDsgaSA8IENPTkZJR19OUl9DUFVTOyBpKyspIHsKLQkJY29oZXJlbmN5X3dhX2J1ZltpXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQkJQlVHX09OKCFjb2hlcmVuY3lfd2FfYnVmW2ldKTsKLQotCQkvKgotCQkgKiBXZSBjYW4ndCB1c2UgdGhlIERNQSBtYXBwaW5nIEFQSSwgc2luY2Ugd2UgZG9uJ3QKLQkJICogaGF2ZSBhIHZhbGlkICdzdHJ1Y3QgZGV2aWNlJyBwb2ludGVyCi0JCSAqLwotCQljb2hlcmVuY3lfd2FfYnVmX3BoeXNbaV0gPQotCQkJdmlydF90b19waHlzKGNvaGVyZW5jeV93YV9idWZbaV0pOwotCQlCVUdfT04oIWNvaGVyZW5jeV93YV9idWZfcGh5c1tpXSk7Ci0KLQkJLyoKLQkJICogQ29uZmlndXJlIHRoZSBYT1IgZW5naW5lIGZvciBtZW1zZXQgb3BlcmF0aW9uLCB3aXRoCi0JCSAqIGEgMTI4IGJ5dGVzIGJsb2NrIHNpemUKLQkJICovCi0JCXdyaXRlbCgweDQ0NCwgeG9yX2Jhc2UgKyBYT1JfQ09ORklHKGkpKTsKLQkJd3JpdGVsKDEyOCwgeG9yX2Jhc2UgKyBYT1JfQkxPQ0tfU0laRShpKSk7Ci0JCXdyaXRlbChjb2hlcmVuY3lfd2FfYnVmX3BoeXNbaV0sCi0JCSAgICAgICB4b3JfYmFzZSArIFhPUl9ERVNUX1BPSU5URVIoaSkpOwotCX0KLQotCXdyaXRlbCgweDAsIHhvcl9iYXNlICsgWE9SX0lOSVRfVkFMVUVfTE9XKTsKLQl3cml0ZWwoMHgwLCB4b3JfYmFzZSArIFhPUl9JTklUX1ZBTFVFX0hJR0gpOwotCi0JY29oZXJlbmN5X3dhX2VuYWJsZWQgPSB0cnVlOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbXZlYnVfaHdjY19zeW5jX2lvX2JhcnJpZXIodm9pZCkKIHsKLQlpZiAoY29oZXJlbmN5X3dhX2VuYWJsZWQpIHsKLQkJbXZlYnVfaHdjY19hcm1hZGEzNzVfc3luY19pb19iYXJyaWVyX3dhKCk7Ci0JCXJldHVybjsKLQl9Ci0KIAl3cml0ZWwoMHgxLCBjb2hlcmVuY3lfY3B1X2Jhc2UgKyBJT19TWU5DX0JBUlJJRVJfQ1RMX09GRlNFVCk7CiAJd2hpbGUgKHJlYWRsKGNvaGVyZW5jeV9jcHVfYmFzZSArIElPX1NZTkNfQkFSUklFUl9DVExfT0ZGU0VUKSAmIDB4MSk7CiB9CkBAIC0zNjEsMjUgKzIwOSw0MSBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJaW50IHR5cGU7CisKKwkvKgorCSAqIFRoZSBjb2hlcmVuY3kgZmFicmljIGlzIG5lZWRlZDoKKwkgKiAtIEZvciBjb2hlcmVuY3kgYmV0d2VlbiBwcm9jZXNzb3JzIG9uIEFybWFkYSBYUCwgc28gb25seQorCSAqICAgd2hlbiBTTVAgaXMgZW5hYmxlZC4KKwkgKiAtIEZvciBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgcHJvY2Vzc29yIGFuZCBJL08gZGV2aWNlcywgYnV0CisJICogICB0aGlzIGNvaGVyZW5jeSByZXF1aXJlcyBtYW55IHByZS1yZXF1aXNpdGVzICh3cml0ZQorCSAqICAgYWxsb2NhdGUgY2FjaGUgcG9saWN5LCBzaGFyZWFibGUgcGFnZXMsIFNNUCBiaXQgc2V0KSB0aGF0CisJICogICBhcmUgb25seSBtZWFudCBpbiBTTVAgc2l0dWF0aW9ucy4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoYXQgb24gQXJtYWRhIDM3MCwgdGhlcmUgaXMgY3VycmVudGx5CisJICogbm8gd2F5IHRvIHVzZSBoYXJkd2FyZSBJL08gY29oZXJlbmN5LCBiZWNhdXNlIGV2ZW4gd2hlbgorCSAqIENPTkZJR19TTVAgaXMgZW5hYmxlZCwgaXNfc21wKCkgcmV0dXJucyBmYWxzZSBkdWUgdG8gdGhlCisJICogQXJtYWRhIDM3MCBiZWluZyBhIHNpbmdsZS1jb3JlIHByb2Nlc3Nvci4gVG8gbGlmdCB0aGlzCisJICogbGltaXRhdGlvbiwgd2Ugd291bGQgaGF2ZSB0byBmaW5kIGEgd2F5IHRvIG1ha2UgdGhlIGNhY2hlCisJICogcG9saWN5IHNldCB0byB3cml0ZS1hbGxvY2F0ZSAob24gYWxsIEFybWFkYSBTb0NzKSwgYW5kIHRvCisJICogc2V0IHRoZSBzaGFyZWFibGUgYXR0cmlidXRlIGluIHBhZ2UgdGFibGVzIChvbiBhbGwgQXJtYWRhCisJICogU29DcyBleGNlcHQgdGhlIEFybWFkYSAzNzApLiBVbmZvcnR1bmF0ZWx5LCBzdWNoIGRlY2lzaW9ucworCSAqIGFyZSB0YWtlbiB2ZXJ5IGVhcmx5IGluIHRoZSBrZXJuZWwgYm9vdCBwcm9jZXNzLCBhdCBhIHBvaW50CisJICogd2hlcmUgd2UgZG9uJ3Qga25vdyB5ZXQgb24gd2hpY2ggU29DIHdlIGFyZSBydW5uaW5nLgorCisJICovCisJaWYgKCFpc19zbXAoKSkKKwkJcmV0dXJuIENPSEVSRU5DWV9GQUJSSUNfVFlQRV9OT05FOwogCiAJbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGVfYW5kX21hdGNoKE5VTEwsIG9mX2NvaGVyZW5jeV90YWJsZSwgJm1hdGNoKTsKLQlpZiAobnApIHsKLQkJaW50IHR5cGUgPSAoaW50KSBtYXRjaC0+ZGF0YTsKKwlpZiAoIW5wKQorCQlyZXR1cm4gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX05PTkU7CiAKLQkJLyogQXJtYWRhIDM3MC9YUCBjb2hlcmVuY3kgd29ya3MgaW4gYm90aCBVUCBhbmQgU01QICovCi0JCWlmICh0eXBlID09IENPSEVSRU5DWV9GQUJSSUNfVFlQRV9BUk1BREFfMzcwX1hQKQotCQkJcmV0dXJuIHR5cGU7CisJdHlwZSA9IChpbnQpIG1hdGNoLT5kYXRhOwogCi0JCS8qIEFybWFkYSAzNzUgY29oZXJlbmN5IHdvcmtzIG9ubHkgb24gU01QICovCi0JCWVsc2UgaWYgKHR5cGUgPT0gQ09IRVJFTkNZX0ZBQlJJQ19UWVBFX0FSTUFEQV8zNzUgJiYgaXNfc21wKCkpCi0JCQlyZXR1cm4gdHlwZTsKKwlvZl9ub2RlX3B1dChucCk7CiAKLQkJLyogQXJtYWRhIDM4MCBjb2hlcmVuY3kgd29ya3Mgb25seSBvbiBTTVAgKi8KLQkJZWxzZSBpZiAodHlwZSA9PSBDT0hFUkVOQ1lfRkFCUklDX1RZUEVfQVJNQURBXzM4MCAmJiBpc19zbXAoKSkKLQkJCXJldHVybiB0eXBlOwotCX0KLQotCXJldHVybiBDT0hFUkVOQ1lfRkFCUklDX1RZUEVfTk9ORTsKKwlyZXR1cm4gdHlwZTsKIH0KIAogaW50IGNvaGVyZW5jeV9hdmFpbGFibGUodm9pZCkKQEAgLTQwNywyMiArMjcxLDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgY29oZXJlbmN5X2xhdGVfaW5pdCh2b2lkKQogewotCWludCB0eXBlID0gY29oZXJlbmN5X3R5cGUoKTsKLQotCWlmICh0eXBlID09IENPSEVSRU5DWV9GQUJSSUNfVFlQRV9OT05FKQotCQlyZXR1cm4gMDsKLQotCWlmICh0eXBlID09IENPSEVSRU5DWV9GQUJSSUNfVFlQRV9BUk1BREFfMzc1KSB7Ci0JCXUzMiBkZXYsIHJldjsKLQotCQlpZiAobXZlYnVfZ2V0X3NvY19pZCgmZGV2LCAmcmV2KSA9PSAwICYmCi0JCSAgICByZXYgPT0gQVJNQURBXzM3NV9aMV9SRVYpCi0JCQlhcm1hZGFfMzc1X2NvaGVyZW5jeV9pbml0X3dhKCk7Ci0JfQotCi0JYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwbGF0Zm9ybV9idXNfdHlwZSwKLQkJCSAgICAgICZtdmVidV9od2NjX25iKTsKLQorCWlmIChjb2hlcmVuY3lfYXZhaWxhYmxlKCkpCisJCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsCisJCQkJICAgICAgJm12ZWJ1X2h3Y2NfbmIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeV9sbC5TIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3lfbGwuUwppbmRleCBmNWQ4ODFiLi44YjJmYmM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeV9sbC5TCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5X2xsLlMKQEAgLTI0LDcgKzI0LDEwIEBACiAjaW5jbHVkZSA8YXNtL2NwMTUuaD4KIAogCS50ZXh0Ci0vKiBSZXR1cm5zIHRoZSBjb2hlcmVuY3kgYmFzZSBhZGRyZXNzIGluIHIxIChyMCBpcyB1bnRvdWNoZWQpICovCisvKgorICogUmV0dXJucyB0aGUgY29oZXJlbmN5IGJhc2UgYWRkcmVzcyBpbiByMSAocjAgaXMgdW50b3VjaGVkKSwgb3IgMCBpZgorICogdGhlIGNvaGVyZW5jeSBmYWJyaWMgaXMgbm90IGVuYWJsZWQuCisgKi8KIEVOVFJZKGxsX2dldF9jb2hlcmVuY3lfYmFzZSkKIAltcmMJcDE1LCAwLCByMSwgYzEsIGMwLCAwCiAJdHN0CXIxLCAjQ1JfTSBAIENoZWNrIE1NVSBiaXQgZW5hYmxlZApAQCAtMzIsOCArMzUsMTMgQEAKIAogCS8qCiAJICogTU1VIGlzIGRpc2FibGVkLCB1c2UgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGNvaGVyZW5jeQotCSAqIGJhc2UgYWRkcmVzcy4KKwkgKiBiYXNlIGFkZHJlc3MuIEhvd2V2ZXIsIGlmIHRoZSBjb2hlcmVuY3kgZmFicmljIGlzbid0IG1hcHBlZAorCSAqIChpLmUgaXRzIHZpcnR1YWwgYWRkcmVzcyBpcyB6ZXJvKSwgaXQgbWVhbnMgY29oZXJlbmN5IGlzCisJICogbm90IGVuYWJsZWQsIHNvIHdlIHJldHVybiAwLgogCSAqLworCWxkcglyMSwgPWNvaGVyZW5jeV9iYXNlCisJY21wCXIxLCAjMAorCWJlcQkyZgogCWFkcglyMSwgM2YKIAlsZHIJcjMsIFtyMV0KIAlsZHIJcjEsIFtyMSwgcjNdCkBAIC04NSw2ICs5Myw5IEBACiAJICovCiAJbW92IAlyMCwgbHIKIAlibAlsbF9nZXRfY29oZXJlbmN5X2Jhc2UKKwkvKiBCYWlsIG91dCBpZiB0aGUgY29oZXJlbmN5IGlzIG5vdCBlbmFibGVkICovCisJY21wCXIxLCAjMAorCXJldGVxCXIwCiAJYmwJbGxfZ2V0X2NvaGVyZW5jeV9jcHVtYXNrCiAJbW92IAlsciwgcjAKIAlhZGQJcjAsIHIxLCAjQVJNQURBX1hQX0NGQl9DRkdfUkVHX09GRlNFVApAQCAtMTA3LDYgKzExOCw5IEBACiAJICovCiAJbW92IHIwLCBscgogCWJsCWxsX2dldF9jb2hlcmVuY3lfYmFzZQorCS8qIEJhaWwgb3V0IGlmIHRoZSBjb2hlcmVuY3kgaXMgbm90IGVuYWJsZWQgKi8KKwljbXAJcjEsICMwCisJcmV0ZXEJcjAKIAlibAlsbF9nZXRfY29oZXJlbmN5X2NwdW1hc2sKIAltb3YgbHIsIHIwCiAJYWRkCXIwLCByMSwgI0FSTUFEQV9YUF9DRkJfQ1RMX1JFR19PRkZTRVQKQEAgLTEzMSw2ICsxNDUsOSBAQAogCSAqLwogCW1vdiAJcjAsIGxyCiAJYmwJbGxfZ2V0X2NvaGVyZW5jeV9iYXNlCisJLyogQmFpbCBvdXQgaWYgdGhlIGNvaGVyZW5jeSBpcyBub3QgZW5hYmxlZCAqLworCWNtcAlyMSwgIzAKKwlyZXRlcQlyMAogCWJsCWxsX2dldF9jb2hlcmVuY3lfY3B1bWFzawogCW1vdiAJbHIsIHIwCiAJYWRkCXIwLCByMSwgI0FSTUFEQV9YUF9DRkJfQ1RMX1JFR19PRkZTRVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvbW1vbi5oCmluZGV4IDNjY2I0MGMuLjNlMGFjYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb21tb24uaApAQCAtMjUsNCArMjUsNiBAQAogCiB2b2lkIF9faW9tZW0gKm12ZWJ1X2dldF9zY3VfYmFzZSh2b2lkKTsKIAoraW50IG12ZWJ1X3BtX2luaXQodm9pZCAoKmJvYXJkX3BtX2VudGVyKSh2b2lkIF9faW9tZW0gKnNkcmFtX3JlZywgdTMyIHNyY21kKSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jcHUtcmVzZXQuYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvY3B1LXJlc2V0LmMKaW5kZXggNjBmYjUzNy4uNGEyY2FkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9jcHUtcmVzZXQuYworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NwdS1yZXNldC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KLSNpbmNsdWRlICJhcm1hZGEtMzcwLXhwLmgiCiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmNwdV9yZXNldF9iYXNlOwogc3RhdGljIHNpemVfdCBjcHVfcmVzZXRfc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvaGVhZHNtcC1hOS5TIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9oZWFkc21wLWE5LlMKaW5kZXggYmU1MWM5OS4uMDhkNWVkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9oZWFkc21wLWE5LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9oZWFkc21wLWE5LlMKQEAgLTIyLDUgKzIyLDYgQEAKIEVOVFJZKG12ZWJ1X2NvcnRleF9hOV9zZWNvbmRhcnlfc3RhcnR1cCkKIEFSTV9CRTgoc2V0ZW5kCWJlKQogCWJsICAgICAgdjdfaW52YWxpZGF0ZV9sMQorCWJsCWFybWFkYV8zOHhfc2N1X3Bvd2VyX3VwCiAJYglzZWNvbmRhcnlfc3RhcnR1cAogRU5EUFJPQyhtdmVidV9jb3J0ZXhfYTlfc2Vjb25kYXJ5X3N0YXJ0dXApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3BsYXRzbXAtYTkuYyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcGxhdHNtcC1hOS5jCmluZGV4IDQ3YTcxYTkuLjJlYzFhNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcGxhdHNtcC1hOS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcGxhdHNtcC1hOS5jCkBAIC00MywyMSArNDMsNzAgQEAKIAllbHNlCiAJCW12ZWJ1X3Btc3Vfc2V0X2NwdV9ib290X2FkZHIoaHdfY3B1LCBtdmVidV9jb3J0ZXhfYTlfc2Vjb25kYXJ5X3N0YXJ0dXApOwogCXNtcF93bWIoKTsKKworCS8qCisJICogRG9pbmcgdGhpcyBiZWZvcmUgZGVhc3NlcnRpbmcgdGhlIENQVXMgaXMgbmVlZGVkIHRvIHdha2UgdXAgQ1BVcworCSAqIGluIHRoZSBvZmZsaW5lIHN0YXRlIGFmdGVyIHVzaW5nIENQVSBob3RwbHVnLgorCSAqLworCWFyY2hfc2VuZF93YWtldXBfaXBpX21hc2soY3B1bWFza19vZihjcHUpKTsKKwogCXJldCA9IG12ZWJ1X2NwdV9yZXNldF9kZWFzc2VydChod19jcHUpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJDb3VsZCBub3Qgc3RhcnQgdGhlIHNlY29uZGFyeSBDUFU6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlhcmNoX3NlbmRfd2FrZXVwX2lwaV9tYXNrKGNwdW1hc2tfb2YoY3B1KSk7CiAKIAlyZXR1cm4gMDsKIH0KKy8qCisgKiBXaGVuIGEgQ1BVIGlzIGJyb3VnaHQgYmFjayBvbmxpbmUsIGVpdGhlciB0aHJvdWdoIENQVSBob3RwbHVnLCBvcgorICogYmVjYXVzZSBvZiB0aGUgYm9vdCBvZiBhIGtleGVjJ2VkIGtlcm5lbCwgdGhlIFBNU1UgY29uZmlndXJhdGlvbgorICogZm9yIHRoaXMgQ1BVIG1pZ2h0IGJlIGluIHRoZSBkZWVwIGlkbGUgc3RhdGUsIHByZXZlbnRpbmcgdGhpcyBDUFUKKyAqIGZyb20gcmVjZWl2aW5nIGludGVycnVwdHMuIEhlcmUsIHdlIHRoZXJlZm9yZSB0YWtlIG91dCB0aGUgY3VycmVudAorICogQ1BVIGZyb20gdGhpcyBzdGF0ZSwgd2hpY2ggd2FzIGVudGVyZWQgYnkgYXJtYWRhXzM4eF9jcHVfZGllKCkKKyAqIGJlbG93LgorICovCitzdGF0aWMgdm9pZCBhcm1hZGFfMzh4X3NlY29uZGFyeV9pbml0KHVuc2lnbmVkIGludCBjcHUpCit7CisJbXZlYnVfdjdfcG1zdV9pZGxlX2V4aXQoKTsKK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIHZvaWQgYXJtYWRhXzM4eF9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit7CisJLyoKKwkgKiBDUFUgaG90cGx1ZyBpcyBpbXBsZW1lbnRlZCBieSBwdXR0aW5nIG9mZmxpbmUgQ1BVcyBpbnRvIHRoZQorCSAqIGRlZXAgaWRsZSBzbGVlcCBzdGF0ZS4KKwkgKi8KKwlhcm1hZGFfMzh4X2RvX2NwdV9zdXNwZW5kKHRydWUpOworfQorCisvKgorICogV2UgbmVlZCBhIGR1bW15IGZ1bmN0aW9uLCBzbyB0aGF0IHBsYXRmb3JtX2Nhbl9jcHVfaG90cGx1ZygpIGtub3dzCisgKiB3ZSBzdXBwb3J0IENQVSBob3RwbHVnLiBIb3dldmVyLCB0aGUgZnVuY3Rpb24gZG9lcyBub3QgbmVlZCB0byBkbworICogYW55dGhpbmcsIGJlY2F1c2UgQ1BVcyBnb2luZyBvZmZsaW5lIGNhbiBlbnRlciB0aGUgZGVlcCBpZGxlIHN0YXRlCisgKiBieSB0aGVtc2VsdmVzLCB3aXRob3V0IGFueSBoZWxwIGZyb20gYSBzdGlsbCBhbGl2ZSBDUFUuCisgKi8KK3N0YXRpYyBpbnQgYXJtYWRhXzM4eF9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiAxOworfQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgbXZlYnVfY29ydGV4X2E5X3NtcF9vcHMgX19pbml0ZGF0YSA9IHsKIAkuc21wX2Jvb3Rfc2Vjb25kYXJ5CT0gbXZlYnVfY29ydGV4X2E5X2Jvb3Rfc2Vjb25kYXJ5LAogfTsKIAorc3RhdGljIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyBhcm1hZGFfMzh4X3NtcF9vcHMgX19pbml0ZGF0YSA9IHsKKwkuc21wX2Jvb3Rfc2Vjb25kYXJ5CT0gbXZlYnVfY29ydGV4X2E5X2Jvb3Rfc2Vjb25kYXJ5LAorCS5zbXBfc2Vjb25kYXJ5X2luaXQgICAgID0gYXJtYWRhXzM4eF9zZWNvbmRhcnlfaW5pdCwKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwkuY3B1X2RpZQkJPSBhcm1hZGFfMzh4X2NwdV9kaWUsCisJLmNwdV9raWxsICAgICAgICAgICAgICAgPSBhcm1hZGFfMzh4X2NwdV9raWxsLAorI2VuZGlmCit9OworCiBDUFVfTUVUSE9EX09GX0RFQ0xBUkUobXZlYnVfYXJtYWRhXzM3NV9zbXAsICJtYXJ2ZWxsLGFybWFkYS0zNzUtc21wIiwKIAkJICAgICAgJm12ZWJ1X2NvcnRleF9hOV9zbXBfb3BzKTsKIENQVV9NRVRIT0RfT0ZfREVDTEFSRShtdmVidV9hcm1hZGFfMzgwX3NtcCwgIm1hcnZlbGwsYXJtYWRhLTM4MC1zbXAiLAotCQkgICAgICAmbXZlYnVfY29ydGV4X2E5X3NtcF9vcHMpOworCQkgICAgICAmYXJtYWRhXzM4eF9zbXBfb3BzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbGF0c21wLmMKaW5kZXggODk1ZGMzNy4uNThjYzhjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbGF0c21wLmMKQEAgLTMwLDEwICszMCwxMiBAQAogI2luY2x1ZGUgInBtc3UuaCIKICNpbmNsdWRlICJjb2hlcmVuY3kuaCIKIAorI2RlZmluZSBBUk1BREFfWFBfTUFYX0NQVVMgNAorCiAjZGVmaW5lIEFYUF9CT09UUk9NX0JBU0UgMHhmZmYwMDAwMAogI2RlZmluZSBBWFBfQk9PVFJPTV9TSVpFIDB4MTAwMDAwCiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpfX2luaXQgZ2V0X2NwdV9jbGsoaW50IGNwdSkKK3N0YXRpYyBzdHJ1Y3QgY2xrICpnZXRfY3B1X2NsayhpbnQgY3B1KQogewogCXN0cnVjdCBjbGsgKmNwdV9jbGs7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mX2dldF9jcHVfbm9kZShjcHUsIE5VTEwpOwpAQCAtNDYsMjkgKzQ4LDI4IEBACiAJcmV0dXJuIGNwdV9jbGs7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfc2Vjb25kYXJ5X2NwdXNfY2xvY2sodm9pZCkKK3N0YXRpYyB2b2lkIHNldF9zZWNvbmRhcnlfY3B1X2Nsb2NrKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JaW50IHRoaXNjcHUsIGNwdTsKKwlpbnQgdGhpc2NwdTsKIAl1bnNpZ25lZCBsb25nIHJhdGU7CiAJc3RydWN0IGNsayAqY3B1X2NsazsKIAotCXRoaXNjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdGhpc2NwdSA9IGdldF9jcHUoKTsKKwogCWNwdV9jbGsgPSBnZXRfY3B1X2Nsayh0aGlzY3B1KTsKIAlpZiAoIWNwdV9jbGspCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJY2xrX3ByZXBhcmVfZW5hYmxlKGNwdV9jbGspOwogCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY3B1X2Nsayk7CiAKLQkvKiBzZXQgYWxsIHRoZSBvdGhlciBDUFUgY2xrIHRvIHRoZSBzYW1lIHJhdGUgdGhhbiB0aGUgYm9vdCBDUFUgKi8KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCWlmIChjcHUgPT0gdGhpc2NwdSkKLQkJCWNvbnRpbnVlOwotCQljcHVfY2xrID0gZ2V0X2NwdV9jbGsoY3B1KTsKLQkJaWYgKCFjcHVfY2xrKQotCQkJcmV0dXJuOwotCQljbGtfc2V0X3JhdGUoY3B1X2NsaywgcmF0ZSk7Ci0JCWNsa19wcmVwYXJlX2VuYWJsZShjcHVfY2xrKTsKLQl9CisJY3B1X2NsayA9IGdldF9jcHVfY2xrKGNwdSk7CisJaWYgKCFjcHVfY2xrKQorCQlnb3RvIG91dDsKKwljbGtfc2V0X3JhdGUoY3B1X2NsaywgcmF0ZSk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGNwdV9jbGspOworCitvdXQ6CisJcHV0X2NwdSgpOwogfQogCiBzdGF0aWMgaW50IGFybWFkYV94cF9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCkBAIC03OCw2ICs3OSw3IEBACiAJcHJfaW5mbygiQm9vdGluZyBDUFUgJWRcbiIsIGNwdSk7CiAKIAlod19jcHUgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKwlzZXRfc2Vjb25kYXJ5X2NwdV9jbG9jayhod19jcHUpOwogCW12ZWJ1X3Btc3Vfc2V0X2NwdV9ib290X2FkZHIoaHdfY3B1LCBhcm1hZGFfeHBfc2Vjb25kYXJ5X3N0YXJ0dXApOwogCiAJLyoKQEAgLTEyNiw3ICsxMjgsNiBAQAogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJaW50IGVycjsKIAotCXNldF9zZWNvbmRhcnlfY3B1c19jbG9jaygpOwogCWZsdXNoX2NhY2hlX2FsbCgpOwogCXNldF9jcHVfY29oZXJlbnQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbS1ib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9wbS1ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmQ0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3BtLWJvYXJkLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBCb2FyZC1sZXZlbCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXJ2ZWxsCisgKgorICogVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKKyNkZWZpbmUgQVJNQURBX1hQX0dQX1BJQ19OUl9HUElPUyAzCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmdwaW9fY3RybDsKK3N0YXRpYyBpbnQgcGljX2dwaW9zW0FSTUFEQV9YUF9HUF9QSUNfTlJfR1BJT1NdOworc3RhdGljIGludCBwaWNfcmF3X2dwaW9zW0FSTUFEQV9YUF9HUF9QSUNfTlJfR1BJT1NdOworCitzdGF0aWMgdm9pZCBtdmVidV9hcm1hZGFfeHBfZ3BfcG1fZW50ZXIodm9pZCBfX2lvbWVtICpzZHJhbV9yZWcsIHUzMiBzcmNtZCkKK3sKKwl1MzIgcmVnLCBhY2tjbWQ7CisJaW50IGk7CisKKwkvKiBQdXQgMDAxIGFzIHZhbHVlIG9uIHRoZSBHUElPcyAqLworCXJlZyA9IHJlYWRsKGdwaW9fY3RybCk7CisJZm9yIChpID0gMDsgaSA8IEFSTUFEQV9YUF9HUF9QSUNfTlJfR1BJT1M7IGkrKykKKwkJcmVnICY9IH5CSVQocGljX3Jhd19ncGlvc1tpXSk7CisJcmVnIHw9IEJJVChwaWNfcmF3X2dwaW9zWzBdKTsKKwl3cml0ZWwocmVnLCBncGlvX2N0cmwpOworCisJLyogUHJlcGFyZSB3cml0aW5nIDExMSB0byB0aGUgR1BJT3MgKi8KKwlhY2tjbWQgPSByZWFkbChncGlvX2N0cmwpOworCWZvciAoaSA9IDA7IGkgPCBBUk1BREFfWFBfR1BfUElDX05SX0dQSU9TOyBpKyspCisJCWFja2NtZCB8PSBCSVQocGljX3Jhd19ncGlvc1tpXSk7CisKKwkvKgorCSAqIFdhaXQgYSB3aGlsZSwgdGhlIFBJQyBuZWVkcyBxdWl0ZSBhIGJpdCBvZiB0aW1lIGJldHdlZW4gdGhlCisJICogdHdvIEdQSU8gY29tbWFuZHMuCisJICovCisJbWRlbGF5KDMwMDApOworCisJYXNtIHZvbGF0aWxlICgKKwkJLyogQWxpZ24gdG8gYSBjYWNoZSBsaW5lICovCisJCSIuYmFsaWduIDMyXG5cdCIKKworCQkvKiBFbnRlciBzZWxmIHJlZnJlc2ggKi8KKwkJInN0ciAlW3NyY21kXSwgWyVbc2RyYW1fcmVnXV1cblx0IgorCisJCS8qCisJCSAqIFdhaXQgMTAwIGN5Y2xlcyBmb3IgRERSIHRvIGVudGVyIHNlbGYgcmVmcmVzaCwgYnkKKwkJICogZG9pbmcgNTAgdGltZXMgdHdvIGluc3RydWN0aW9ucy4KKwkJICovCisJCSJtb3YgcjEsICM1MFxuXHQiCisJCSIxOiBzdWJzIHIxLCByMSwgIzFcblx0IgorCQkiYm5lIDFiXG5cdCIKKworCQkvKiBJc3N1ZSB0aGUgY29tbWFuZCBBQ0sgKi8KKwkJInN0ciAlW2Fja2NtZF0sIFslW2dwaW9fY3RybF1dXG5cdCIKKworCQkvKiBUcmFwIHRoZSBwcm9jZXNzb3IgKi8KKwkJImIgLlxuXHQiCisJCTogOiBbc3JjbWRdICJyIiAoc3JjbWQpLCBbc2RyYW1fcmVnXSAiciIgKHNkcmFtX3JlZyksCisJCSAgW2Fja2NtZF0gInIiIChhY2tjbWQpLCBbZ3Bpb19jdHJsXSAiciIgKGdwaW9fY3RybCkgOiAicjEiKTsKK30KKworc3RhdGljIGludCBtdmVidV9hcm1hZGFfeHBfZ3BfcG1faW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IGRldmljZV9ub2RlICpncGlvX2N0cmxfbnA7CisJaW50IHJldCA9IDAsIGk7CisKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgibWFydmVsbCxheHAtZ3AiKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJwbV9waWMiKTsKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7IGkgPCBBUk1BREFfWFBfR1BfUElDX05SX0dQSU9TOyBpKyspIHsKKwkJY2hhciAqbmFtZTsKKwkJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmdzOworCisJCXBpY19ncGlvc1tpXSA9IG9mX2dldF9uYW1lZF9ncGlvKG5wLCAiY3RybC1ncGlvcyIsIGkpOworCQlpZiAocGljX2dwaW9zW2ldIDwgMCkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAicGljLXBpbiVkIiwgaSk7CisJCWlmICghbmFtZSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBpY19ncGlvc1tpXSwgbmFtZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlrZnJlZShuYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBpY19ncGlvc1tpXSwgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlncGlvX2ZyZWUocGljX2dwaW9zW2ldKTsKKwkJCWtmcmVlKG5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBvZl9wYXJzZV9waGFuZGxlX3dpdGhfZml4ZWRfYXJncyhucCwgImN0cmwtZ3Bpb3MiLCAyLAorCQkJCQkJICAgICAgIGksICZhcmdzKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWdwaW9fZnJlZShwaWNfZ3Bpb3NbaV0pOworCQkJa2ZyZWUobmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWdwaW9fY3RybF9ucCA9IGFyZ3MubnA7CisJCXBpY19yYXdfZ3Bpb3NbaV0gPSBhcmdzLmFyZ3NbMF07CisJfQorCisJZ3Bpb19jdHJsID0gb2ZfaW9tYXAoZ3Bpb19jdHJsX25wLCAwKTsKKwlpZiAoIWdwaW9fY3RybCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdmVidV9wbV9pbml0KG12ZWJ1X2FybWFkYV94cF9ncF9wbV9lbnRlcik7CisKK291dDoKKwlvZl9ub2RlX3B1dChucCk7CisJcmV0dXJuIHJldDsKK30KKworbGF0ZV9pbml0Y2FsbChtdmVidV9hcm1hZGFfeHBfZ3BfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3BtLmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3M2E4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG0uYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQuIEN1cnJlbnRseSBzdXBwb3J0aW5nIEFybWFkYSBYUCBvbmx5LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBNYXJ2ZWxsCisgKgorICogVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NwdV9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vb3V0ZXJjYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisKKyNpbmNsdWRlICJjb2hlcmVuY3kuaCIKKyNpbmNsdWRlICJwbXN1LmgiCisKKyNkZWZpbmUgU0RSQU1fQ09ORklHX09GRlMgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgIFNEUkFNX0NPTkZJR19TUl9NT0RFX0JJVCAgICAgICAgICBCSVQoMjQpCisjZGVmaW5lIFNEUkFNX09QRVJBVElPTl9PRkZTICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSAgU0RSQU1fT1BFUkFUSU9OX1NFTEZfUkVGUkVTSCAgICAgIDB4NworI2RlZmluZSBTRFJBTV9ETEJfRVZJQ1RJT05fT0ZGUyAgICAgICAgICAgIDB4MzBjCisjZGVmaW5lICBTRFJBTV9ETEJfRVZJQ1RJT05fVEhSRVNIT0xEX01BU0sgMHhmZgorCitzdGF0aWMgdm9pZCAoKm12ZWJ1X2JvYXJkX3BtX2VudGVyKSh2b2lkIF9faW9tZW0gKnNkcmFtX3JlZywgdTMyIHNyY21kKTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnNkcmFtX2N0cmw7CisKK3N0YXRpYyBpbnQgbXZlYnVfcG1fcG93ZXJkb3duKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwl1MzIgcmVnLCBzcmNtZDsKKworCWZsdXNoX2NhY2hlX2FsbCgpOworCW91dGVyX2ZsdXNoX2FsbCgpOworCisJLyoKKwkgKiBJc3N1ZSBhIERhdGEgU3luY2hyb25pemF0aW9uIEJhcnJpZXIgaW5zdHJ1Y3Rpb24gdG8gZW5zdXJlCisJICogdGhhdCBhbGwgc3RhdGUgc2F2aW5nIGhhcyBiZWVuIGNvbXBsZXRlZC4KKwkgKi8KKwlkc2IoKTsKKworCS8qIEZsdXNoIHRoZSBETEIgYW5kIHdhaXQgfjcgdXNlYyAqLworCXJlZyA9IHJlYWRsKHNkcmFtX2N0cmwgKyBTRFJBTV9ETEJfRVZJQ1RJT05fT0ZGUyk7CisJcmVnICY9IH5TRFJBTV9ETEJfRVZJQ1RJT05fVEhSRVNIT0xEX01BU0s7CisJd3JpdGVsKHJlZywgc2RyYW1fY3RybCArIFNEUkFNX0RMQl9FVklDVElPTl9PRkZTKTsKKworCXVkZWxheSg3KTsKKworCS8qIFNldCBEUkFNIGluIGJhdHRlcnkgYmFja3VwIG1vZGUgKi8KKwlyZWcgPSByZWFkbChzZHJhbV9jdHJsICsgU0RSQU1fQ09ORklHX09GRlMpOworCXJlZyAmPSB+U0RSQU1fQ09ORklHX1NSX01PREVfQklUOworCXdyaXRlbChyZWcsIHNkcmFtX2N0cmwgKyBTRFJBTV9DT05GSUdfT0ZGUyk7CisKKwkvKiBQcmVwYXJlIHRvIGdvIHRvIHNlbGYtcmVmcmVzaCAqLworCisJc3JjbWQgPSByZWFkbChzZHJhbV9jdHJsICsgU0RSQU1fT1BFUkFUSU9OX09GRlMpOworCXNyY21kICY9IH4weDFGOworCXNyY21kIHw9IFNEUkFNX09QRVJBVElPTl9TRUxGX1JFRlJFU0g7CisKKwltdmVidV9ib2FyZF9wbV9lbnRlcihzZHJhbV9jdHJsICsgU0RSQU1fT1BFUkFUSU9OX09GRlMsIHNyY21kKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIEJPT1RfSU5GT19BRERSICAgICAgMHgzMDAwCisjZGVmaW5lIEJPT1RfTUFHSUNfV09SRAkgICAgMHhkZWFkYjAwMgorI2RlZmluZSBCT09UX01BR0lDX0xJU1RfRU5EIDB4ZmZmZmZmZmYKKworLyoKKyAqIFRob3NlIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgYmVmb3JlIHN3aXRjaGluZyB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIKKyAqIGJhc2UsIHdoaWNoIGlzIHdoeSB3ZSBoYXJkY29kZSB0aGUgMHhkMDAwMDAwMCBiYXNlIGFkZHJlc3MsIHRoZSBvbmUKKyAqIHVzZWQgYnkgdGhlIFNvQyBvdXQgb2YgcmVzZXQuCisgKi8KKyNkZWZpbmUgTUJVU19XSU5ET1dfMTJfQ1RSTCAgICAgICAweGQwMDIwMGIwCisjZGVmaW5lIE1CVVNfSU5URVJOQUxfUkVHX0FERFJFU1MgMHhkMDAyMDA4MAorCisjZGVmaW5lIFNEUkFNX1dJTl9CQVNFX1JFRyh4KQkoMHgyMDE4MCArICgweDgqeCkpCisjZGVmaW5lIFNEUkFNX1dJTl9DVFJMX1JFRyh4KQkoMHgyMDE4NCArICgweDgqeCkpCisKK3N0YXRpYyBwaHlzX2FkZHJfdCBtdmVidV9pbnRlcm5hbF9yZWdfYmFzZSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJX19iZTMyIGluX2FkZHJbMl07CisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJpbnRlcm5hbC1yZWdzIik7CisJQlVHX09OKCFucCk7CisKKwkvKgorCSAqIEFzayB0aGUgRFQgd2hhdCBpcyB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIgYWRkcmVzcyBvbiB0aGlzCisJICogcGxhdGZvcm0uIEluIHRoZSBtdmVidS1tYnVzIERUIGJpbmRpbmcsIDB4ZjAwMTAwMDAKKwkgKiBjb3JyZXNwb25kcyB0byB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIgd2luZG93LgorCSAqLworCWluX2FkZHJbMF0gPSBjcHVfdG9fYmUzMigweGYwMDEwMDAwKTsKKwlpbl9hZGRyWzFdID0gMHgwOworCisJcmV0dXJuIG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCBpbl9hZGRyKTsKK30KKworc3RhdGljIHZvaWQgbXZlYnVfcG1fc3RvcmVfYm9vdGluZm8odm9pZCkKK3sKKwl1MzIgKnN0b3JlX2FkZHI7CisJcGh5c19hZGRyX3QgcmVzdW1lX3BjOworCisJc3RvcmVfYWRkciA9IHBoeXNfdG9fdmlydChCT09UX0lORk9fQUREUik7CisJcmVzdW1lX3BjID0gdmlydF90b19waHlzKGFybWFkYV8zNzBfeHBfY3B1X3Jlc3VtZSk7CisKKwkvKgorCSAqIFRoZSBib290bG9hZGVyIGV4cGVjdHMgdGhlIGZpcnN0IHR3byB3b3JkcyB0byBiZSBhIG1hZ2ljCisJICogdmFsdWUgKEJPT1RfTUFHSUNfV09SRCksIGZvbGxvd2VkIGJ5IHRoZSBhZGRyZXNzIG9mIHRoZQorCSAqIHJlc3VtZSBjb2RlIHRvIGp1bXAgdG8uIFRoZW4sIGl0IGV4cGVjdHMgYSBzZXF1ZW5jZSBvZgorCSAqIChhZGRyZXNzLCB2YWx1ZSkgcGFpcnMsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlc3RvcmUgdGhlCisJICogdmFsdWUgb2YgY2VydGFpbiByZWdpc3RlcnMuIFRoaXMgc2VxdWVuY2UgbXVzdCBlbmQgd2l0aCB0aGUKKwkgKiBCT09UX01BR0lDX0xJU1RfRU5EIG1hZ2ljIHZhbHVlLgorCSAqLworCisJd3JpdGVsKEJPT1RfTUFHSUNfV09SRCwgc3RvcmVfYWRkcisrKTsKKwl3cml0ZWwocmVzdW1lX3BjLCBzdG9yZV9hZGRyKyspOworCisJLyoKKwkgKiBTb21lIHBsYXRmb3JtcyByZW1hcCB0aGVpciBpbnRlcm5hbCByZWdpc3RlciBiYXNlIGFkZHJlc3MKKwkgKiB0byAweGYxMDAwMDAwLiBIb3dldmVyLCBvdXQgb2YgcmVzZXQsIHdpbmRvdyAxMiBzdGFydHMgYXQKKwkgKiAweGYwMDAwMDAwIGFuZCBlbmRzIGF0IDB4ZjdmZmZmZmYsIHdoaWNoIHdvdWxkIG92ZXJsYXAgd2l0aAorCSAqIHRoZSBpbnRlcm5hbCByZWdpc3RlcnMuIFRoZXJlZm9yZSwgZGlzYWJsZSB3aW5kb3cgMTIuCisJICovCisJd3JpdGVsKE1CVVNfV0lORE9XXzEyX0NUUkwsIHN0b3JlX2FkZHIrKyk7CisJd3JpdGVsKDB4MCwgc3RvcmVfYWRkcisrKTsKKworCS8qCisJICogU2V0IHRoZSBpbnRlcm5hbCByZWdpc3RlciBiYXNlIGFkZHJlc3MgdG8gdGhlIHZhbHVlCisJICogZXhwZWN0ZWQgYnkgTGludXgsIGFzIHJlYWQgZnJvbSB0aGUgRGV2aWNlIFRyZWUuCisJICovCisJd3JpdGVsKE1CVVNfSU5URVJOQUxfUkVHX0FERFJFU1MsIHN0b3JlX2FkZHIrKyk7CisJd3JpdGVsKG12ZWJ1X2ludGVybmFsX3JlZ19iYXNlKCksIHN0b3JlX2FkZHIrKyk7CisKKwkvKgorCSAqIEFzayB0aGUgbXZlYnUtbWJ1cyBkcml2ZXIgdG8gc3RvcmUgdGhlIFNEUkFNIHdpbmRvdworCSAqIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGhhcyB0byBiZSByZXN0b3JlZCBieSB0aGUgYm9vdGxvYWRlcgorCSAqIGJlZm9yZSByZS1lbnRlcmluZyB0aGUga2VybmVsIG9uIHJlc3VtZS4KKwkgKi8KKwlzdG9yZV9hZGRyICs9IG12ZWJ1X21idXNfc2F2ZV9jcHVfdGFyZ2V0KHN0b3JlX2FkZHIpOworCisJd3JpdGVsKEJPT1RfTUFHSUNfTElTVF9FTkQsIHN0b3JlX2FkZHIpOworfQorCitzdGF0aWMgaW50IG12ZWJ1X3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9NRU0pCisJCXJldHVybiAtRUlOVkFMOworCisJY3B1X3BtX2VudGVyKCk7CisKKwltdmVidV9wbV9zdG9yZV9ib290aW5mbygpOworCWNwdV9zdXNwZW5kKDAsIG12ZWJ1X3BtX3Bvd2VyZG93bik7CisKKwlvdXRlcl9yZXN1bWUoKTsKKworCW12ZWJ1X3Y3X3Btc3VfaWRsZV9leGl0KCk7CisKKwlzZXRfY3B1X2NvaGVyZW50KCk7CisKKwljcHVfcG1fZXhpdCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgbXZlYnVfcG1fb3BzID0geworCS5lbnRlciA9IG12ZWJ1X3BtX2VudGVyLAorCS52YWxpZCA9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCit9OworCitpbnQgbXZlYnVfcG1faW5pdCh2b2lkICgqYm9hcmRfcG1fZW50ZXIpKHZvaWQgX19pb21lbSAqc2RyYW1fcmVnLCB1MzIgc3JjbWQpKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IHJlc291cmNlIHJlczsKKworCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJtYXJ2ZWxsLGFybWFkYXhwIikpCisJCXJldHVybiAtRU5PREVWOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJCSAgICAgIm1hcnZlbGwsYXJtYWRhLXhwLXNkcmFtLWNvbnRyb2xsZXIiKTsKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKSkgeworCQlvZl9ub2RlX3B1dChucCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcmVzKSwKKwkJCQlucC0+ZnVsbF9uYW1lKSkgeworCQlvZl9ub2RlX3B1dChucCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc2RyYW1fY3RybCA9IGlvcmVtYXAocmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXMpKTsKKwlpZiAoIXNkcmFtX2N0cmwpIHsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcmVzKSk7CisJCW9mX25vZGVfcHV0KG5wKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJb2Zfbm9kZV9wdXQobnApOworCisJbXZlYnVfYm9hcmRfcG1fZW50ZXIgPSBib2FyZF9wbV9lbnRlcjsKKworCXN1c3BlbmRfc2V0X29wcygmbXZlYnVfcG1fb3BzKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1LmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3UuYwppbmRleCBiYmQ4NjY0Li5kOGFiNjA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3UuYworKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3UuYwpAQCAtMjAsNiArMjAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1X3BtLmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS1kdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0zOSw3ICs0MCw2IEBACiAjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJhcm1hZGEtMzcwLXhwLmgiCiAKIAogI2RlZmluZSBQTVNVX0JBU0VfT0ZGU0VUICAgIDB4MTAwCkBAIC0zMTIsNyArMzEyLDcgQEAKIAlyZXR1cm4gY3B1X3N1c3BlbmQoZGVlcGlkbGUsIGFybWFkYV8zNzBfeHBfcG1zdV9pZGxlX2VudGVyKTsKIH0KIAotc3RhdGljIGludCBhcm1hZGFfMzh4X2RvX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgZGVlcGlkbGUpCitpbnQgYXJtYWRhXzM4eF9kb19jcHVfc3VzcGVuZCh1bnNpZ25lZCBsb25nIGRlZXBpZGxlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCkBAIC01NzIsNiArNTcyLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCBjcHVmcmVxX2R0X3BsYXRmb3JtX2RhdGEgY3B1ZnJlcV9kdF9wZCA9IHsKKwkuaW5kZXBlbmRlbnRfY2xvY2tzID0gdHJ1ZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGFybWFkYV94cF9wbXN1X2NwdWZyZXFfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CkBAIC02NDQsNyArNjQ4LDggQEAKIAkJfQogCX0KIAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImNwdWZyZXEtZHQiLCAtMSwgTlVMTCwgMCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoTlVMTCwgImNwdWZyZXEtZHQiLCAtMSwKKwkJCQkgICAgICAmY3B1ZnJlcV9kdF9wZCwgc2l6ZW9mKGNwdWZyZXFfZHRfcGQpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdmVidS9wbXN1LmggYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3UuaAppbmRleCA2YjU4YzFmLi5lYTc5MjY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3UuaAorKysgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3UuaApAQCAtMTcsNSArMTcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzX2FkZHJfdCByZXN1bWVfYWRkcl9yZWcpOwogCiB2b2lkIG12ZWJ1X3Y3X3Btc3VfaWRsZV9leGl0KHZvaWQpOwordm9pZCBhcm1hZGFfMzcwX3hwX2NwdV9yZXN1bWUodm9pZCk7CiAKK2ludCBhcm1hZGFfMzcwX3hwX3Btc3VfaWRsZV9lbnRlcih1bnNpZ25lZCBsb25nIGRlZXBpZGxlKTsKK2ludCBhcm1hZGFfMzh4X2RvX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgZGVlcGlkbGUpOwogI2VuZGlmCS8qIF9fTUFDSF8zNzBfWFBfUE1TVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12ZWJ1L3Btc3VfbGwuUyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdV9sbC5TCmluZGV4IGE5NDU3NTYuLjg4NjUxMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdV9sbC5TCisrKyBiL2FyY2gvYXJtL21hY2gtbXZlYnUvcG1zdV9sbC5TCkBAIC0xMiwxMiArMTIsMzIgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogCisKK0VOVFJZKGFybWFkYV8zOHhfc2N1X3Bvd2VyX3VwKQorCW1yYyAgICAgcDE1LCA0LCByMSwgYzE1LCBjMAlAIGdldCBTQ1UgYmFzZSBhZGRyZXNzCisJb3JyCXIxLCByMSwgIzB4OAkJQCBTQ1UgQ1BVIFBvd2VyIFN0YXR1cyBSZWdpc3RlcgorCW1yYwkxNSwgMCwgcjAsIGNyMCwgY3IwLCA1CUAgZ2V0IHRoZSBDUFUgSUQKKwlhbmQJcjAsIHIwLCAjMTUKKwlhZGQJcjEsIHIxLCByMAorCW1vdglyMCwgIzB4MAorCXN0cmIJcjAsIFtyMV0JCUAgc3dpdGNoIFNDVSBwb3dlciBzdGF0ZSB0byBOb3JtYWwgbW9kZQorCXJldAlscgorRU5EUFJPQyhhcm1hZGFfMzh4X3NjdV9wb3dlcl91cCkKKwogLyoKICAqIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRocm91Z2ggd2hpY2ggQ1BVcyBleGl0aW5nIGNwdWlkbGUgZGVlcAogICogaWRsZSBzdGF0ZSBhcmUgZ29pbmcuCiAgKi8KIEVOVFJZKGFybWFkYV8zNzBfeHBfY3B1X3Jlc3VtZSkKIEFSTV9CRTgoc2V0ZW5kCWJlICkJCQlAIGdvIEJFOCBpZiBlbnRlcmVkIExFCisJLyoKKwkgKiBEaXNhYmxlIHRoZSBNTVUgdGhhdCBtaWdodCBoYXZlIGJlZW4gZW5hYmxlZCBpbiBCb290Uk9NIGlmCisJICogdGhpcyBjb2RlIGlzIHVzZWQgaW4gdGhlIHJlc3VtZSBwYXRoIG9mIGEgc3VzcGVuZC9yZXN1bWUKKwkgKiBjeWNsZS4KKwkgKi8KKwltcmMJcDE1LCAwLCByMSwgYzEsIGMwLCAwCisJYmljCXIxLCAjMQorCW1jcglwMTUsIDAsIHIxLCBjMSwgYzAsIDAKIAlibAlsbF9hZGRfY3B1X3RvX3NtcF9ncm91cAogCWJsCWxsX2VuYWJsZV9jb2hlcmVuY3kKIAliCWNwdV9yZXN1bWUKQEAgLTI3LDEzICs0Nyw3IEBACiAJLyogZG8gd2UgbmVlZCBpdCBmb3IgQXJtYWRhIDM4eCovCiBBUk1fQkU4KHNldGVuZAliZSApCQkJQCBnbyBCRTggaWYgZW50ZXJlZCBMRQogCWJsCXY3X2ludmFsaWRhdGVfbDEKLQltcmMgICAgIHAxNSwgNCwgcjEsIGMxNSwgYzAJQCBnZXQgU0NVIGJhc2UgYWRkcmVzcwotCW9ycglyMSwgcjEsICMweDgJCUAgU0NVIENQVSBQb3dlciBTdGF0dXMgUmVnaXN0ZXIKLQltcmMJMTUsIDAsIHIwLCBjcjAsIGNyMCwgNQlAIGdldCB0aGUgQ1BVIElECi0JYW5kCXIwLCByMCwgIzE1Ci0JYWRkCXIxLCByMSwgcjAKLQltb3YJcjAsICMweDAKLQlzdHJiCXIwLCBbcjFdCQlAIHN3aXRjaCBTQ1UgcG93ZXIgc3RhdGUgdG8gTm9ybWFsIG1vZGUKKwlibAlhcm1hZGFfMzh4X3NjdV9wb3dlcl91cAogCWIJY3B1X3Jlc3VtZQogRU5EUFJPQyhhcm1hZGFfMzh4X2NwdV9yZXN1bWUpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jcHUtODgxNS5jIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKaW5kZXggOTExNmNhNC4uOWJkYTQ2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKQEAgLTE0NCw2ICsxNDQsNyBAQAogZGV2aWNlX2luaXRjYWxsKGNwdTg4MTVfbW1jc2RfaW5pdCk7CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY3B1ODgxNV9ib2FyZF9jb21wYXRbXSA9IHsKKwkic3Qsbm9tYWRpay1uaGstMTUiLAogCSJjYWxhb3N5c3RlbXMsdXNiLXM4ODE1IiwKIAlOVUxMLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvcG1fYnVzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtX2J1cy5jCmluZGV4IDNmMmQzOTYuLmM0MGUyMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvcG1fYnVzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbV9idXMuYwpAQCAtMjEsNyArMjEsNyBAQAogCiAjaW5jbHVkZSAic29jLmgiCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBvbWFwMV9wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQ7CkBAIC01OSw3ICs1OSw3IEBACiAjZGVmaW5lIE9NQVAxX1BNX0RPTUFJTiAoJmRlZmF1bHRfcG1fZG9tYWluKQogI2Vsc2UKICNkZWZpbmUgT01BUDFfUE1fRE9NQUlOIE5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiBzdGF0aWMgc3RydWN0IHBtX2Nsa19ub3RpZmllcl9ibG9jayBwbGF0Zm9ybV9idXNfbm90aWZpZXIgPSB7CiAJLnBtX2RvbWFpbiA9IE9NQVAxX1BNX0RPTUFJTiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwppbmRleCBmNGQwNmFlLi42ZTI0OTMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCkBAIC03OSw3ICs3OSw5IEBACiAJc2VsZWN0IENMS1NSQ19NTUlPCiAJc2VsZWN0IEdFTkVSSUNfSVJRX0NISVAKIAlzZWxlY3QgTUFDSF9PTUFQX0dFTkVSSUMKKwlzZWxlY3QgTUVNT1JZCiAJc2VsZWN0IE9NQVBfRE1fVElNRVIKKwlzZWxlY3QgT01BUF9HUE1DCiAJc2VsZWN0IFBJTkNUUkwKIAlzZWxlY3QgU09DX0JVUwogCXNlbGVjdCBUSV9QUklWX0VETUEKQEAgLTIzNSwxMiArMjM3LDYgQEAKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCi1jb25maWcgTUFDSF9PTUFQXzM0MzBTRFAKLQlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMwotCWRlZmF1bHQgeQotCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCi0KIGNvbmZpZyBNQUNIX05PS0lBX044MTAKICAgICAgICBib29sCiAKQEAgLTI4MiwxNiArMjc4LDYgQEAKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NVUwogCi1jb25maWcgTUFDSF9USTgxNjhFVk0KLQlib29sICJUSTgxNjggRXZhbHVhdGlvbiBNb2R1bGUiCi0JZGVwZW5kcyBvbiBTT0NfVEk4MVhYCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBNQUNIX1RJODE0OEVWTQotCWJvb2wgIlRJODE0OCBFdmFsdWF0aW9uIE1vZHVsZSIKLQlkZXBlbmRzIG9uIFNPQ19USTgxWFgKLQlkZWZhdWx0IHkKLQogY29uZmlnIE9NQVAzX0VNVQogCWJvb2wgIk9NQVAzIGRlYnVnZ2luZyBwZXJpcGhlcmFscyIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IGQ5ZTk0MTIuLjA4Y2M5NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAktSSQoc3JjdHJlZSkvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUKIAogIyBDb21tb24gc3VwcG9ydAotb2JqLXkgOj0gaWQubyBpby5vIGNvbnRyb2wubyBtdXgubyBkZXZpY2VzLm8gZmIubyBzZXJpYWwubyBncG1jLm8gdGltZXIubyBwbS5vIFwKK29iai15IDo9IGlkLm8gaW8ubyBjb250cm9sLm8gbXV4Lm8gZGV2aWNlcy5vIGZiLm8gc2VyaWFsLm8gdGltZXIubyBwbS5vIFwKIAkgY29tbW9uLm8gZ3Bpby5vIGRtYS5vIHdkX3RpbWVyLm8gZGlzcGxheS5vIGkyYy5vIGhkcTF3Lm8gb21hcF9od21vZC5vIFwKIAkgb21hcF9kZXZpY2UubyBzcmFtLm8gZHJtLm8KIApAQCAtMTEzLDcgKzExMyw3IEBACiBvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHBybTJ4eHhfM3h4eC5vIHBybTJ4eHgubyBjbTJ4eHgubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBwcm0yeHh4XzN4eHgubyBwcm0zeHh4Lm8gY20zeHh4Lm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gdmMzeHh4X2RhdGEubyB2cDN4eHhfZGF0YS5vCi1vbWFwLXByY20tNC01LWNvbW1vbgkJCT0gIGNtaW5zdDQ0eHgubyBjbTQ0eHgubyBwcm00NHh4Lm8gXAorb21hcC1wcmNtLTQtNS1jb21tb24JCQk9ICBjbWluc3Q0NHh4Lm8gcHJtNDR4eC5vIFwKIAkJCQkJICAgcHJjbV9tcHU0NHh4Lm8gcHJtaW5zdDQ0eHgubyBcCiAJCQkJCSAgIHZjNDR4eF9kYXRhLm8gdnA0NHh4X2RhdGEubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSAkKG9tYXAtcHJjbS00LTUtY29tbW9uKQpAQCAtMjQ2LDcgKzI0Niw2IEBACiBvYmotJChDT05GSUdfTUFDSF9PTUFQM19UT1JQRURPKSAgICAgICAgKz0gYm9hcmQtb21hcDNsb2dpYy5vCiBvYmotJChDT05GSUdfTUFDSF9PVkVSTykJCSs9IGJvYXJkLW92ZXJvLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVAzX1BBTkRPUkEpCSs9IGJvYXJkLW9tYXAzcGFuZG9yYS5vCi1vYmotJChDT05GSUdfTUFDSF9PTUFQXzM0MzBTRFApCQkrPSBib2FyZC0zNDMwc2RwLm8KIG9iai0kKENPTkZJR19NQUNIX05PS0lBX044WDApCQkrPSBib2FyZC1uOHgwLm8KIG9iai0kKENPTkZJR19NQUNIX05PS0lBX1JYNTEpCQkrPSBib2FyZC1yeDUxLm8gc2RyYW0tbm9raWEubwogb2JqLSQoQ09ORklHX01BQ0hfTk9LSUFfUlg1MSkJCSs9IGJvYXJkLXJ4NTEtcGVyaXBoZXJhbHMubwpAQCAtMjYwLDggKzI1OSw2IEBACiBvYmotJChDT05GSUdfTUFDSF9DUkFORUJPQVJEKQkJKz0gYm9hcmQtYW0zNTE3Y3JhbmUubwogCiBvYmotJChDT05GSUdfTUFDSF9TQkMzNTMwKQkJKz0gYm9hcmQtb21hcDNzdGFsa2VyLm8KLW9iai0kKENPTkZJR19NQUNIX1RJODE2OEVWTSkJCSs9IGJvYXJkLXRpODE2OGV2bS5vCi1vYmotJChDT05GSUdfTUFDSF9USTgxNDhFVk0pCQkrPSBib2FyZC10aTgxNjhldm0ubwogCiAjIFBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0IGNvZGUKIApAQCAtMjg0LDkgKzI4MSw2IEBACiBuYW5kLSQoQ09ORklHX01URF9OQU5EX09NQVAyKQkJOj0gZ3BtYy1uYW5kLm8KIG9iai15CQkJCQkrPSAkKG5hbmQtbSkgJChuYW5kLXkpCiAKLXNtYzkxeC0kKENPTkZJR19TTUM5MVgpCQkJOj0gZ3BtYy1zbWM5MXgubwotb2JqLXkJCQkJCSs9ICQoc21jOTF4LW0pICQoc21jOTF4LXkpCi0KIHNtc2M5MTF4LSQoQ09ORklHX1NNU0M5MTFYKQkJOj0gZ3BtYy1zbXNjOTExeC5vCiBvYmoteQkJCQkJKz0gJChzbXNjOTExeC1tKSAkKHNtc2M5MTF4LXkpCiBpZm5lcSAoJChDT05GSUdfSFdTUElOTE9DS19PTUFQKSwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2FtMzN4eC1yZXN0YXJ0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2FtMzN4eC1yZXN0YXJ0LmMKaW5kZXggYzg4ZDhkZjcuLjViYWNlNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYW0zM3h4LXJlc3RhcnQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2FtMzN4eC1yZXN0YXJ0LmMKQEAgLTksOCArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAKICNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0zM3h4LmgiCi0jaW5jbHVkZSAicHJtMzN4eC5oIgorI2luY2x1ZGUgInBybS5oIgogCiAvKioKICAqIGFtM3h4X3Jlc3RhcnQgLSB0cmlnZ2VyIGEgc29mdHdhcmUgcmVzdGFydCBvZiB0aGUgU29DCkBAIC0yNCwxMiArMjMsNSBAQAogewogCS8qIFRPRE86IEhhbmRsZSBtb2RlIGFuZCBjbWQgaWYgbmVjZXNzYXJ5ICovCiAKLQlhbTMzeHhfcHJtX3Jtd19yZWdfYml0cyhBTTMzWFhfUlNUX0dMT0JBTF9XQVJNX1NXX01BU0ssCi0JCQkJQU0zM1hYX1JTVF9HTE9CQUxfV0FSTV9TV19NQVNLLAotCQkJCUFNMzNYWF9QUk1fREVWSUNFX01PRCwKLQkJCQlBTTMzWFhfUFJNX1JTVENUUkxfT0ZGU0VUKTsKLQotCS8qIE9DUCBiYXJyaWVyICovCi0JKHZvaWQpYW0zM3h4X3BybV9yZWFkX3JlZyhBTTMzWFhfUFJNX0RFVklDRV9NT0QsCi0JCQkJICBBTTMzWFhfUFJNX1JTVENUUkxfT0ZGU0VUKTsKKwlvbWFwX3BybV9yZXNldF9zeXN0ZW0oKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMWEzMDQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MzIgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzCi0gKgotICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwotICoKLSAqIEluaXRpYWwgY29kZTogU3llZCBNb2hhbW1lZCBLaGFzaW0KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1vbWFwMi1tY3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvb21hcC10d2w0MDMwLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL3BoeS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlIDxsaW51eC9vbWFwLWRtYS5oPgotI2luY2x1ZGUgPHZpZGVvL29tYXBkc3MuaD4KLSNpbmNsdWRlIDx2aWRlby9vbWFwLXBhbmVsLWRhdGEuaD4KLQotI2luY2x1ZGUgImdwbWMuaCIKLSNpbmNsdWRlICJncG1jLXNtYzkxeC5oIgotCi0jaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiYm9hcmQtZmxhc2guaCIKLSNpbmNsdWRlICJtdXguaCIKLSNpbmNsdWRlICJzZHJhbS1xaW1vbmRhLWh5YjE4bTUxMjE2MGFmLTYuaCIKLSNpbmNsdWRlICJoc21tYy5oIgotI2luY2x1ZGUgInBtLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgotI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCi0KLSNkZWZpbmUgQ09ORklHX0RJU0FCTEVfSEZDTEsgMQotCi0jZGVmaW5lIFNEUDM0MzBfVFNfR1BJT19JUlFfU0RQVjEJMwotI2RlZmluZSBTRFAzNDMwX1RTX0dQSU9fSVJRX1NEUFYyCTIKLQotI2RlZmluZSBFTkFCTEVfVkFVWDNfREVESUNBVEVECTB4MDMKLSNkZWZpbmUgRU5BQkxFX1ZBVVgzX0RFVl9HUlAJMHgyMAotCi0jZGVmaW5lIFRXTDQwMzBfTVNFQ1VSRV9HUElPIDIyCi0KLXN0YXRpYyB1aW50MzJfdCBib2FyZF9rZXltYXBbXSA9IHsKLQlLRVkoMCwgMCwgS0VZX0xFRlQpLAotCUtFWSgwLCAxLCBLRVlfUklHSFQpLAotCUtFWSgwLCAyLCBLRVlfQSksCi0JS0VZKDAsIDMsIEtFWV9CKSwKLQlLRVkoMCwgNCwgS0VZX0MpLAotCUtFWSgxLCAwLCBLRVlfRE9XTiksCi0JS0VZKDEsIDEsIEtFWV9VUCksCi0JS0VZKDEsIDIsIEtFWV9FKSwKLQlLRVkoMSwgMywgS0VZX0YpLAotCUtFWSgxLCA0LCBLRVlfRyksCi0JS0VZKDIsIDAsIEtFWV9FTlRFUiksCi0JS0VZKDIsIDEsIEtFWV9JKSwKLQlLRVkoMiwgMiwgS0VZX0opLAotCUtFWSgyLCAzLCBLRVlfSyksCi0JS0VZKDIsIDQsIEtFWV8zKSwKLQlLRVkoMywgMCwgS0VZX00pLAotCUtFWSgzLCAxLCBLRVlfTiksCi0JS0VZKDMsIDIsIEtFWV9PKSwKLQlLRVkoMywgMywgS0VZX1ApLAotCUtFWSgzLCA0LCBLRVlfUSksCi0JS0VZKDQsIDAsIEtFWV9SKSwKLQlLRVkoNCwgMSwgS0VZXzQpLAotCUtFWSg0LCAyLCBLRVlfVCksCi0JS0VZKDQsIDMsIEtFWV9VKSwKLQlLRVkoNCwgNCwgS0VZX0QpLAotCUtFWSg1LCAwLCBLRVlfViksCi0JS0VZKDUsIDEsIEtFWV9XKSwKLQlLRVkoNSwgMiwgS0VZX0wpLAotCUtFWSg1LCAzLCBLRVlfUyksCi0JS0VZKDUsIDQsIEtFWV9IKSwKLQkwCi19OwotCi1zdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKLQkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCi0JLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBzZHAzNDMwX2twX2RhdGEgPSB7Ci0JLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAotCS5yb3dzCQk9IDUsCi0JLmNvbHMJCT0gNiwKLQkucmVwCQk9IDEsCi19OwotCi0jZGVmaW5lIFNEUDM0MzBfTENEX1BBTkVMX0JBQ0tMSUdIVF9HUElPCTgKLSNkZWZpbmUgU0RQMzQzMF9MQ0RfUEFORUxfRU5BQkxFX0dQSU8JCTUKLQotc3RhdGljIHZvaWQgX19pbml0IHNkcDM0MzBfZGlzcGxheV9pbml0KHZvaWQpCi17Ci0JaW50IHI7Ci0KLQkvKgotCSAqIHRoZSBiYWNrbGlnaHQgR1BJTyBkb2Vzbid0IGRpcmVjdGx5IGdvIHRvIHRoZSBwYW5lbCwgaXQgZW5hYmxlcwotCSAqIGFuIGludGVybmFsIGNpcmN1aXQgb24gMzQzMHNkcCB0byBjcmVhdGUgdGhlIHNpZ25hbCBWX0JLTF8yOFYsCi0JICogdGhpcyBpcyBjb25uZWN0ZWQgdG8gTEVEKyBwaW4gb2YgdGhlIHNoYXJwIHBhbmVsLiBUaGlzIEdQSU8KLQkgKiBpcyBsZWZ0IGVuYWJsZWQgaW4gdGhlIGJvYXJkIGZpbGUsIGFuZCBub3QgcGFzc2VkIHRvIHRoZSBwYW5lbAotCSAqIGFzIHBsYXRmb3JtX2RhdGEuCi0JICovCi0JciA9IGdwaW9fcmVxdWVzdF9vbmUoU0RQMzQzMF9MQ0RfUEFORUxfQkFDS0xJR0hUX0dQSU8sCi0JCQkJR1BJT0ZfT1VUX0lOSVRfSElHSCwgIkxDRCBCYWNrbGlnaHQiKTsKLQlpZiAocikKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IExDRCBCYWNrbGlnaHQgR1BJT1xuIik7Ci0KLX0KLQotc3RhdGljIHN0cnVjdCBwYW5lbF9zaGFycF9sczAzN3Y3ZHcwMV9wbGF0Zm9ybV9kYXRhIHNkcDM0MzBfbGNkX3BkYXRhID0gewotCS5uYW1lICAgICAgICAgICAgICAgICAgID0gImxjZCIsCi0JLnNvdXJjZSAgICAgICAgICAgICAgICAgPSAiZHBpLjAiLAotCi0JLmRhdGFfbGluZXMJCT0gMTYsCi0KLQkucmVzYl9ncGlvCQk9IFNEUDM0MzBfTENEX1BBTkVMX0VOQUJMRV9HUElPLAotCS5pbmlfZ3BpbwkJPSAtMSwKLQkubW9fZ3BpbwkJPSAtMSwKLQkubHJfZ3BpbwkJPSAtMSwKLQkudWRfZ3BpbwkJPSAtMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNkcDM0MzBfbGNkX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJwYW5lbC1zaGFycC1sczAzN3Y3ZHcwMSIsCi0JLmlkICAgICAgICAgICAgICAgICAgICAgPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YSAgICAgID0gJnNkcDM0MzBfbGNkX3BkYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBjb25uZWN0b3JfZHZpX3BsYXRmb3JtX2RhdGEgc2RwMzQzMF9kdmlfY29ubmVjdG9yX3BkYXRhID0gewotCS5uYW1lICAgICAgICAgICAgICAgICAgID0gImR2aSIsCi0JLnNvdXJjZSAgICAgICAgICAgICAgICAgPSAidGZwNDEwLjAiLAotCS5pMmNfYnVzX251bSAgICAgICAgICAgID0gLTEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHAzNDMwX2R2aV9jb25uZWN0b3JfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICAgICAgICAgID0gImNvbm5lY3Rvci1kdmkiLAotCS5pZCAgICAgICAgICAgICAgICAgICAgID0gMCwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgICAgICA9ICZzZHAzNDMwX2R2aV9jb25uZWN0b3JfcGRhdGEsCi19OwotCi1zdGF0aWMgc3RydWN0IGVuY29kZXJfdGZwNDEwX3BsYXRmb3JtX2RhdGEgc2RwMzQzMF90ZnA0MTBfcGRhdGEgPSB7Ci0JLm5hbWUgICAgICAgICAgICAgICAgICAgPSAidGZwNDEwLjAiLAotCS5zb3VyY2UgICAgICAgICAgICAgICAgID0gImRwaS4wIiwKLQkuZGF0YV9saW5lcyAgICAgICAgICAgICA9IDI0LAotCS5wb3dlcl9kb3duX2dwaW8gICAgICAgID0gLTEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHAzNDMwX3RmcDQxMF9kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgICAgICAgICAgPSAidGZwNDEwIiwKLQkuaWQgICAgICAgICAgICAgICAgICAgICA9IDAsCi0JLmRldi5wbGF0Zm9ybV9kYXRhICAgICAgPSAmc2RwMzQzMF90ZnA0MTBfcGRhdGEsCi19OwotCi1zdGF0aWMgc3RydWN0IGNvbm5lY3Rvcl9hdHZfcGxhdGZvcm1fZGF0YSBzZHAzNDMwX3R2X3BkYXRhID0gewotCS5uYW1lID0gInR2IiwKLQkuc291cmNlID0gInZlbmMuMCIsCi0JLmNvbm5lY3Rvcl90eXBlID0gT01BUF9EU1NfVkVOQ19UWVBFX1NWSURFTywKLQkuaW52ZXJ0X3BvbGFyaXR5ID0gZmFsc2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHAzNDMwX3R2X2Nvbm5lY3Rvcl9kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgICAgICAgICAgPSAiY29ubmVjdG9yLWFuYWxvZy10diIsCi0JLmlkICAgICAgICAgICAgICAgICAgICAgPSAwLAotCS5kZXYucGxhdGZvcm1fZGF0YSAgICAgID0gJnNkcDM0MzBfdHZfcGRhdGEsCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfZHNzX2JvYXJkX2luZm8gc2RwMzQzMF9kc3NfZGF0YSA9IHsKLQkuZGVmYXVsdF9kaXNwbGF5X25hbWUgPSAibGNkIiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSA9IHsKLQl7Ci0JCS5tbWMJCT0gMSwKLQkJLyogOCBiaXRzIChkZWZhdWx0KSByZXF1aXJlcyBTNi4zID09IE9OLAotCQkgKiBzbyB0aGUgU0lNIGNhcmQgaXNuJ3QgdXNlZDsgZWxzZSA0IGJpdHMuCi0JCSAqLwotCQkuY2FwcwkJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEsCi0JCS5ncGlvX3dwCT0gNCwKLQkJLmRlZmVycmVkCT0gdHJ1ZSwKLQl9LAotCXsKLQkJLm1tYwkJPSAyLAotCQkuY2FwcwkJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEsCi0JCS5ncGlvX3dwCT0gNywKLQkJLmRlZmVycmVkCT0gdHJ1ZSwKLQl9LAotCXt9CS8qIFRlcm1pbmF0b3IgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF90dzQwMzBfcGRhdGEgb21hcF90d2w0MDMwX2F1ZGlvX2RhdGEgPSB7Ci0JLnZvaWNlX2Nvbm5lY3RlZCA9IHRydWUsCi0JLmN1c3RvbV9yb3V0aW5nCT0gdHJ1ZSwKLQotCS5oYXNfaHMJCT0gT01BUF9UV0w0MDMwX0xFRlQgfCBPTUFQX1RXTDQwMzBfUklHSFQsCi0JLmhhc19oZgkJPSBPTUFQX1RXTDQwMzBfTEVGVCB8IE9NQVBfVFdMNDAzMF9SSUdIVCwKLQotCS5oYXNfbWFpbm1pYwk9IHRydWUsCi0JLmhhc19zdWJtaWMJPSB0cnVlLAotCS5oYXNfaHNtaWMJPSB0cnVlLAotCS5oYXNfbGluZWluCT0gT01BUF9UV0w0MDMwX0xFRlQgfCBPTUFQX1RXTDQwMzBfUklHSFQsCi19OwotCi1zdGF0aWMgaW50IHNkcDM0MzBfdHdsX2dwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAotCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3BpbykKLXsKLQkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSksCi0JICogZ3BpbyArIDEgaXMgIm1tYzFfY2QiIChpbnB1dC9JUlEpCi0JICovCi0JbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKLQltbWNbMV0uZ3Bpb19jZCA9IGdwaW8gKyAxOwotCW9tYXBfaHNtbWNfbGF0ZV9pbml0KG1tYyk7Ci0KLQkvKiBncGlvICsgNyBpcyAic3ViX2xjZF9lbl9ia2wiIChvdXRwdXQvUFdNMSkgKi8KLQlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyA3LCBHUElPRl9PVVRfSU5JVF9MT1csICJzdWJfbGNkX2VuX2JrbCIpOwotCi0JLyogZ3BpbyArIDE1IGlzICJzdWJfbGNkX25SU1QiIChvdXRwdXQpICovCi0JZ3Bpb19yZXF1ZXN0X29uZShncGlvICsgMTUsIEdQSU9GX09VVF9JTklUX0xPVywgInN1Yl9sY2RfblJTVCIpOwotCi0Jb21hcF90d2w0MDMwX2F1ZGlvX2RhdGEuamFja19kZXRlY3QgPSBncGlvICsgMjsKLQlvbWFwX3R3bDQwMzBfYXVkaW9faW5pdCgiU0RQMzQzMCIsICZvbWFwX3R3bDQwMzBfYXVkaW9fZGF0YSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSBzZHAzNDMwX2dwaW9fZGF0YSA9IHsKLQkucHVsbGRvd25zCT0gQklUKDIpIHwgQklUKDYpIHwgQklUKDgpIHwgQklUKDEzKQotCQkJCXwgQklUKDE2KSB8IEJJVCgxNyksCi0JLnNldHVwCQk9IHNkcDM0MzBfdHdsX2dwaW9fc2V0dXAsCi19OwotCi0vKiByZWd1bGF0b3IgY29uc3VtZXIgbWFwcGluZ3MgKi8KLQotLyogYWRzNzg0NiBvbiBTUEkgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZhdXgzX3N1cHBsaWVzW10gPSB7Ci0JUkVHVUxBVE9SX1NVUFBMWSgidmNjIiwgInNwaTEuMCIpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdm1tYzFfc3VwcGxpZXNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm9tYXBfaHNtbWMuMCIpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdnNpbV9zdXBwbGllc1tdID0gewotCVJFR1VMQVRPUl9TVVBQTFkoInZtbWNfYXV4IiwgIm9tYXBfaHNtbWMuMCIpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdm1tYzJfc3VwcGxpZXNbXSA9IHsKLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm9tYXBfaHNtbWMuMSIpLAotfTsKLQotLyoKLSAqIEFwcGx5IGFsbCB0aGUgZml4ZWQgdm9sdGFnZXMgc2luY2UgbW9zdCB2ZXJzaW9ucyBvZiBVLUJvb3QKLSAqIGRvbid0IGJvdGhlciB3aXRoIHRoYXQgaW5pdGlhbGl6YXRpb24uCi0gKi8KLQotLyogVkFVWDEgZm9yIG1haW5ib2FyZCAoaXJkYSBhbmQgc3ViLWxjZCkgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZhdXgxID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm1pbl91VgkJCT0gMjgwMDAwMCwKLQkJLm1heF91VgkJCT0gMjgwMDAwMCwKLQkJLmFwcGx5X3VWCQk9IHRydWUsCi0JCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCi0JCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKLQkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQotCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi19OwotCi0vKiBWQVVYMiBmb3IgY2FtZXJhIG1vZHVsZSAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdmF1eDIgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubWluX3VWCQkJPSAyODAwMDAwLAotCQkubWF4X3VWCQkJPSAyODAwMDAwLAotCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKLQkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKLQkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAotCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JfSwKLX07Ci0KLS8qIFZBVVgzIGZvciBMQ0QgYm9hcmQgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZhdXgzID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm1pbl91VgkJCT0gMjgwMDAwMCwKLQkJLm1heF91VgkJCT0gMjgwMDAwMCwKLQkJLmFwcGx5X3VWCQk9IHRydWUsCi0JCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCi0JCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKLQkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQotCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcwkJPSBBUlJBWV9TSVpFKHNkcDM0MzBfdmF1eDNfc3VwcGxpZXMpLAotCS5jb25zdW1lcl9zdXBwbGllcwkJPSBzZHAzNDMwX3ZhdXgzX3N1cHBsaWVzLAotfTsKLQotLyogVkFVWDQgZm9yIE9NQVAgVkREX0NTSTIgKGNhbWVyYSkgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZhdXg0ID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm1pbl91VgkJCT0gMTgwMDAwMCwKLQkJLm1heF91VgkJCT0gMTgwMDAwMCwKLQkJLmFwcGx5X3VWCQk9IHRydWUsCi0JCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCi0JCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKLQkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQotCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi19OwotCi0vKiBWTU1DMSBmb3IgT01BUCBWRERfTU1DMSAoaS9vKSBhbmQgTU1DMSBjYXJkICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92bW1jMSA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5taW5fdVYJCQk9IDE4NTAwMDAsCi0JCS5tYXhfdVYJCQk9IDMxNTAwMDAsCi0JCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCi0JCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKLQkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQotCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQotCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUoc2RwMzQzMF92bW1jMV9zdXBwbGllcyksCi0JLmNvbnN1bWVyX3N1cHBsaWVzCT0gc2RwMzQzMF92bW1jMV9zdXBwbGllcywKLX07Ci0KLS8qIFZNTUMyIGZvciBNTUMyIGNhcmQgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZtbWMyID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm1pbl91VgkJCT0gMTg1MDAwMCwKLQkJLm1heF91VgkJCT0gMTg1MDAwMCwKLQkJLmFwcGx5X3VWCQk9IHRydWUsCi0JCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCi0JCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKLQkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQotCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUoc2RwMzQzMF92bW1jMl9zdXBwbGllcyksCi0JLmNvbnN1bWVyX3N1cHBsaWVzCT0gc2RwMzQzMF92bW1jMl9zdXBwbGllcywKLX07Ci0KLS8qIFZTSU0gZm9yIE9NQVAgVkREX01NQzFBIChpL28gZm9yIERBVDQuLkRBVDcpICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92c2ltID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm1pbl91VgkJCT0gMTgwMDAwMCwKLQkJLm1heF91VgkJCT0gMzAwMDAwMCwKLQkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKLQkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAotCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShzZHAzNDMwX3ZzaW1fc3VwcGxpZXMpLAotCS5jb25zdW1lcl9zdXBwbGllcwk9IHNkcDM0MzBfdnNpbV9zdXBwbGllcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHNkcDM0MzBfdHdsZGF0YSA9IHsKLQkvKiBwbGF0Zm9ybV9kYXRhIGZvciBjaGlsZHJlbiBnb2VzIGhlcmUgKi8KLQkuZ3BpbwkJPSAmc2RwMzQzMF9ncGlvX2RhdGEsCi0JLmtleXBhZAkJPSAmc2RwMzQzMF9rcF9kYXRhLAotCi0JLnZhdXgxCQk9ICZzZHAzNDMwX3ZhdXgxLAotCS52YXV4MgkJPSAmc2RwMzQzMF92YXV4MiwKLQkudmF1eDMJCT0gJnNkcDM0MzBfdmF1eDMsCi0JLnZhdXg0CQk9ICZzZHAzNDMwX3ZhdXg0LAotCS52bW1jMQkJPSAmc2RwMzQzMF92bW1jMSwKLQkudm1tYzIJCT0gJnNkcDM0MzBfdm1tYzIsCi0JLnZzaW0JCT0gJnNkcDM0MzBfdnNpbSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IG9tYXAzNDMwX2kyY19pbml0KHZvaWQpCi17Ci0JLyogaTJjMSBmb3IgUE1JQyBvbmx5ICovCi0Jb21hcDNfcG1pY19nZXRfY29uZmlnKCZzZHAzNDMwX3R3bGRhdGEsCi0JCQlUV0xfQ09NTU9OX1BEQVRBX1VTQiB8IFRXTF9DT01NT05fUERBVEFfQkNJIHwKLQkJCVRXTF9DT01NT05fUERBVEFfTUFEQyB8IFRXTF9DT01NT05fUERBVEFfQVVESU8sCi0JCQlUV0xfQ09NTU9OX1JFR1VMQVRPUl9WREFDIHwgVFdMX0NPTU1PTl9SRUdVTEFUT1JfVlBMTDIpOwotCXNkcDM0MzBfdHdsZGF0YS52ZGFjLT5jb25zdHJhaW50cy5hcHBseV91ViA9IHRydWU7Ci0Jc2RwMzQzMF90d2xkYXRhLnZwbGwyLT5jb25zdHJhaW50cy5hcHBseV91ViA9IHRydWU7Ci0Jc2RwMzQzMF90d2xkYXRhLnZwbGwyLT5jb25zdHJhaW50cy5uYW1lID0gIlZEVkkiOwotCi0Jc2RwMzQzMF90d2xkYXRhLmF1ZGlvLT5jb2RlYy0+aHNfZXh0bXV0ZSA9IDE7Ci0Jc2RwMzQzMF90d2xkYXRhLmF1ZGlvLT5jb2RlYy0+aHNfZXh0bXV0ZV9ncGlvID0gLUVJTlZBTDsKLQotCW9tYXAzX3BtaWNfaW5pdCgidHdsNDAzMCIsICZzZHAzNDMwX3R3bGRhdGEpOwotCi0JLyogaTJjMiBvbiBjYW1lcmEgY29ubmVjdG9yIChmb3Igc2Vuc29yIGNvbnRyb2wpIGFuZCBvcHRpb25hbCBpc3AxMzAxICovCi0Jb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDQwMCwgTlVMTCwgMCk7Ci0JLyogaTJjMyBvbiBkaXNwbGF5IGNvbm5lY3RvciAoZm9yIERWSSwgdGZwNDEwKSAqLwotCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIE5VTEwsIDApOwotCXJldHVybiAwOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTUM5MVhfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IG9tYXBfc21jOTF4X3BsYXRmb3JtX2RhdGEgYm9hcmRfc21jOTF4X2RhdGEgPSB7Ci0JLmNzCQk9IDMsCi0JLmZsYWdzCQk9IEdQTUNfTVVYX0FERF9EQVRBIHwgR1BNQ19USU1JTkdTX1NNQzkxQzk2IHwKLQkJCQlJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBib2FyZF9zbWM5MXhfaW5pdCh2b2lkKQotewotCWlmIChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTMV8wKQotCQlib2FyZF9zbWM5MXhfZGF0YS5ncGlvX2lycSA9IDY7Ci0JZWxzZQotCQlib2FyZF9zbWM5MXhfZGF0YS5ncGlvX2lycSA9IDI5OwotCi0JZ3BtY19zbWM5MXhfaW5pdCgmYm9hcmRfc21jOTF4X2RhdGEpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm9hcmRfc21jOTF4X2luaXQodm9pZCkKLXsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGVuYWJsZV9ib2FyZF93YWtldXBfc291cmNlKHZvaWQpCi17Ci0JLyogVDIgaW50ZXJydXB0IGxpbmUgKGtleXBhZCkgKi8KLQlvbWFwX211eF9pbml0X3NpZ25hbCgic3lzX25pcnEiLAotCQlPTUFQX1dBS0VVUF9FTiB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiaHNfcGh5X2RhdGEgcGh5X2RhdGFbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnBvcnQgPSAxLAotCQkucmVzZXRfZ3BpbyA9IDU3LAotCQkudmNjX2dwaW8gPSAtRUlOVkFMLAotCX0sCi0JewotCQkucG9ydCA9IDIsCi0JCS5yZXNldF9ncGlvID0gNjEsCi0JCS52Y2NfZ3BpbyA9IC1FSU5WQUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiaHNfb21hcF9wbGF0Zm9ybV9kYXRhIHVzYmhzX2JkYXRhIF9faW5pdGRhdGEgPSB7Ci0KLQkucG9ydF9tb2RlWzBdID0gT01BUF9FSENJX1BPUlRfTU9ERV9QSFksCi0JLnBvcnRfbW9kZVsxXSA9IE9NQVBfRUhDSV9QT1JUX01PREVfUEhZLAotfTsKLQotI2lmZGVmIENPTkZJR19PTUFQX01VWAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewotCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCi19OwotI2Vsc2UKLSNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKLSNlbmRpZgotCi0vKgotICogU0RQMzQzMCBWMiBCb2FyZCBDUyBvcmdhbml6YXRpb24KLSAqIERpZmZlcmVudCBmcm9tIFNEUDM0MzAgVjEuIE5vdyA0IHN3aXRjaGVzIHVzZWQgdG8gc3BlY2lmeSBDUwotICoKLSAqIFNlZSBhbHNvIHRoZSBTd2l0Y2ggUzggc2V0dGluZ3MgaW4gdGhlIGNvbW1lbnRzLgotICovCi1zdGF0aWMgY2hhciBjaGlwX3NlbF8zNDMwW11bR1BNQ19DU19OVU1dID0gewotCXtQRENfTk9SLCBQRENfTkFORCwgUERDX09ORU5BTkQsIERCR19NUERCLCAwLCAwLCAwLCAwfSwgLyogUzg6MTExMSAqLwotCXtQRENfT05FTkFORCwgUERDX05BTkQsIFBEQ19OT1IsIERCR19NUERCLCAwLCAwLCAwLCAwfSwgLyogUzg6MTExMCAqLwotCXtQRENfTkFORCwgUERDX09ORU5BTkQsIFBEQ19OT1IsIERCR19NUERCLCAwLCAwLCAwLCAwfSwgLyogUzg6MTEwMSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNkcF9ub3JfcGFydGl0aW9uc1tdID0gewotCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KLQl7Ci0JCS5uYW1lCQk9ICJCb290bG9hZGVyLU5PUiIsCi0JCS5vZmZzZXQJCT0gMCwKLQkJLnNpemUJCT0gU1pfMjU2SywKLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LAotCS8qIGJvb3Rsb2FkZXIgcGFyYW1zIGluIHRoZSBuZXh0IHNlY3RvciAqLwotCXsKLQkJLm5hbWUJCT0gIlBhcmFtcy1OT1IiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJCT0gU1pfMjU2SywKLQkJLm1hc2tfZmxhZ3MJPSAwLAotCX0sCi0JLyoga2VybmVsICovCi0JewotCQkubmFtZQkJPSAiS2VybmVsLU5PUiIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSBTWl8yTSwKLQkJLm1hc2tfZmxhZ3MJPSAwCi0JfSwKLQkvKiBmaWxlIHN5c3RlbSAqLwotCXsKLQkJLm5hbWUJCT0gIkZpbGVzeXN0ZW0tTk9SIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JCS5tYXNrX2ZsYWdzCT0gMAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzZHBfb25lbmFuZF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZQkJPSAiWC1Mb2FkZXItT25lTkFORCIsCi0JCS5vZmZzZXQJCT0gMCwKLQkJLnNpemUJCT0gNCAqICg2NCAqIDIwNDgpLAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUgIC8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0sCi0JewotCQkubmFtZQkJPSAiVS1Cb290LU9uZU5BTkQiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJCT0gMiAqICg2NCAqIDIwNDgpLAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUgIC8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0sCi0JewotCQkubmFtZQkJPSAiVS1Cb290IEVudmlyb25tZW50LU9uZU5BTkQiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJCT0gMSAqICg2NCAqIDIwNDgpLAotCX0sCi0JewotCQkubmFtZQkJPSAiS2VybmVsLU9uZU5BTkQiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJCT0gMTYgKiAoNjQgKiAyMDQ4KSwKLQl9LAotCXsKLQkJLm5hbWUJCT0gIkZpbGUgU3lzdGVtLU9uZU5BTkQiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNkcF9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKLQkvKiBBbGwgdGhlIHBhcnRpdGlvbiBzaXplcyBhcmUgbGlzdGVkIGluIHRlcm1zIG9mIE5BTkQgYmxvY2sgc2l6ZSAqLwotCXsKLQkJLm5hbWUJCT0gIlgtTG9hZGVyLU5BTkQiLAotCQkub2Zmc2V0CQk9IDAsCi0JCS5zaXplCQk9IDQgKiAoNjQgKiAyMDQ4KSwKLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LAotCXsKLQkJLm5hbWUJCT0gIlUtQm9vdC1OQU5EIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4ODAwMDAgKi8KLQkJLnNpemUJCT0gMTAgKiAoNjQgKiAyMDQ4KSwKLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LAotCXsKLQkJLm5hbWUJCT0gIkJvb3QgRW52LU5BTkQiLAotCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDFjMDAwMCAqLwotCQkuc2l6ZQkJPSA2ICogKDY0ICogMjA0OCksCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJLZXJuZWwtTkFORCIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDI4MDAwMCAqLwotCQkuc2l6ZQkJPSA0MCAqICg2NCAqIDIwNDgpLAotCX0sCi0JewotCQkubmFtZQkJPSAiRmlsZSBTeXN0ZW0gLSBOQU5EIiwKLQkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4NzgwMDAwICovCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLnBhcnRzID0gc2RwX25vcl9wYXJ0aXRpb25zLAotCQkubnJfcGFydHMgPSBBUlJBWV9TSVpFKHNkcF9ub3JfcGFydGl0aW9ucyksCi0JfSwKLQl7Ci0JCS5wYXJ0cyA9IHNkcF9vbmVuYW5kX3BhcnRpdGlvbnMsCi0JCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoc2RwX29uZW5hbmRfcGFydGl0aW9ucyksCi0JfSwKLQl7Ci0JCS5wYXJ0cyA9IHNkcF9uYW5kX3BhcnRpdGlvbnMsCi0JCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoc2RwX25hbmRfcGFydGl0aW9ucyksCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzM0MzBzZHBfaW5pdCh2b2lkKQotewotCWludCBncGlvX3BlbmRvd247Ci0KLQlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwotCW9tYXBfaHNtbWNfaW5pdChtbWMpOwotCW9tYXAzNDMwX2kyY19pbml0KCk7Ci0Jb21hcF9kaXNwbGF5X2luaXQoJnNkcDM0MzBfZHNzX2RhdGEpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2RwMzQzMF9sY2RfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNkcDM0MzBfdGZwNDEwX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZHAzNDMwX2R2aV9jb25uZWN0b3JfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNkcDM0MzBfdHZfY29ubmVjdG9yX2RldmljZSk7Ci0KLQlpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkKLQkJZ3Bpb19wZW5kb3duID0gU0RQMzQzMF9UU19HUElPX0lSUV9TRFBWMjsKLQllbHNlCi0JCWdwaW9fcGVuZG93biA9IFNEUDM0MzBfVFNfR1BJT19JUlFfU0RQVjE7Ci0Jb21hcF9hZHM3ODQ2X2luaXQoMSwgZ3Bpb19wZW5kb3duLCAzMTAsIE5VTEwpOwotCW9tYXBfc2VyaWFsX2luaXQoKTsKLQlvbWFwX3NkcmNfaW5pdChoeWIxOG01MTIxNjBhZjZfc2RyY19wYXJhbXMsIE5VTEwpOwotCXVzYl9iaW5kX3BoeSgibXVzYi1oZHJjLjAuYXV0byIsIDAsICJ0d2w0MDMwX3VzYiIpOwotCXVzYl9tdXNiX2luaXQoTlVMTCk7Ci0JYm9hcmRfc21jOTF4X2luaXQoKTsKLQlib2FyZF9mbGFzaF9pbml0KHNkcF9mbGFzaF9wYXJ0aXRpb25zLCBjaGlwX3NlbF8zNDMwLCAwKTsKLQlzZHAzNDMwX2Rpc3BsYXlfaW5pdCgpOwotCWVuYWJsZV9ib2FyZF93YWtldXBfc291cmNlKCk7Ci0KLQl1c2Joc19pbml0X3BoeXMocGh5X2RhdGEsIEFSUkFZX1NJWkUocGh5X2RhdGEpKTsKLQl1c2Joc19pbml0KCZ1c2Joc19iZGF0YSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoT01BUF8zNDMwU0RQLCAiT01BUDM0MzAgMzQzMFNEUCBib2FyZCIpCi0JLyogTWFpbnRhaW5lcjogU3llZCBLaGFzaW0gLSBUZXhhcyBJbnN0cnVtZW50cyBJbmMgKi8KLQkuYXRhZ19vZmZzZXQJPSAweDEwMCwKLQkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKLQkuaW5pdF9lYXJseQk9IG9tYXAzNDMwX2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gb21hcDNfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZQk9IG9tYXBfMzQzMHNkcF9pbml0LAotCS5pbml0X2xhdGUJPSBvbWFwMzQzMF9pbml0X2xhdGUsCi0JLmluaXRfdGltZQk9IG9tYXAzX3N5bmMzMmtfdGltZXJfaW5pdCwKLQkucmVzdGFydAk9IG9tYXAzeHh4X3Jlc3RhcnQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdjcmFuZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdjcmFuZS5jCmluZGV4IDIxMmMzMTYuLjgxNjhkZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3Y3JhbmUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2NyYW5lLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L29tYXAtZ3BtYy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYwppbmRleCBjNmRmOGVlYy4uOTE3MzhhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L29tYXAtZ3BtYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1vbWFwLmg+CiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0MjQuaD4KQEAgLTUxLDggKzUyLDYgQEAKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKICNpbmNsdWRlICJoc21tYy5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCi0jaW5jbHVkZSAiZ3BtYy5oIgotI2luY2x1ZGUgImdwbWMtbmFuZC5oIgogCiAjZGVmaW5lIENNX1QzNV9HUElPX1BFTkRPV04JCTU3CiAjZGVmaW5lIFNCX1QzNV9VU0JfSFVCX1JFU0VUX0dQSU8JMTY3CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKaW5kZXggOGEyYzE2Ny4uNzk0NzU2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMtdjMwMjAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KQEAgLTQxLDcgKzQyLDYgQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbXRkLW5hbmQtb21hcDIuaD4KLSNpbmNsdWRlICJncG1jLmgiCiAKICNpbmNsdWRlICJhbTM1eHguaCIKIApAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgImhzbW1jLmgiCiAjaW5jbHVkZSAiY29tbW9uLWJvYXJkLWRldmljZXMuaCIKICNpbmNsdWRlICJhbTM1eHgtZW1hYy5oIgotI2luY2x1ZGUgImdwbWMtbmFuZC5oIgogCiAjaWYgZGVmaW5lZChDT05GSUdfTEVEU19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0dQSU9fTU9EVUxFKQogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjbV90MzUxN19sZWRzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmMKaW5kZXggMmQyNDVjMi4uNzBiMjFjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guYwpAQCAtMTMsNiArMTMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0yMyw4ICsyNCw2IEBACiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiYm9hcmQtZmxhc2guaCIKLSNpbmNsdWRlICJncG1jLW9uZW5hbmQuaCIKLSNpbmNsdWRlICJncG1jLW5hbmQuaCIKIAogI2RlZmluZSBSRUdfRlBHQV9SRVYJCQkweDEwCiAjZGVmaW5lIFJFR19GUEdBX0RJUF9TV0lUQ0hfSU5QVVQyCTB4NjAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guaAppbmRleCAyZmI1ZDQxLi5lYTlhYWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1mbGFzaC5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlICJncG1jLmgiCiAKICNkZWZpbmUgUERDX05PUgkJMQogI2RlZmluZSBQRENfTkFORAkyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW44eDAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jCmluZGV4IDk3NzY3YTIuLmI2NDQzYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jCkBAIC0yMSw4ICsyMSw5IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9tdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1vbWFwMi1tY3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbXRkLW9uZW5hbmQtb21hcDIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL21lbmVsYXVzLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2MzIwYWljM3guaD4KIApAQCAtMzIsNyArMzMsNiBAQAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgIm1tYy5oIgogI2luY2x1ZGUgInNvYy5oIgotI2luY2x1ZGUgImdwbWMtb25lbmFuZC5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKICNkZWZpbmUgVFVTQjYwMTBfQVNZTkNfQ1MJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKaW5kZXggZjMyMjAxNi4uN2YxNzA4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgorI2luY2x1ZGUgPGxpbnV4L29tYXAtZ3BtYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dsMTJ4eC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KQEAgLTUxLDcgKzUyLDYgQEAKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKICNpbmNsdWRlICJoc21tYy5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCi0jaW5jbHVkZSAiZ3BtYy1uYW5kLmgiCiAKICNkZWZpbmUgUEFORE9SQV9XSUZJX0lSUV9HUElPCQkyMQogI2RlZmluZSBQQU5ET1JBX1dJRklfTlJFU0VUX0dQSU8JMjMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKaW5kZXggZGRmYzhkZi4uMDM1MDJhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyL2lzcDE3MDRfY2hhcmdlci5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc3BpLW9tYXAyLW1jc3BpLmg+CkBAIC0zMiw3ICszMyw2IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlIDxsaW51eC9vbWFwLWRtYS5oPgotI2luY2x1ZGUgImdwbWMtc21jOTF4LmgiCiAKICNpbmNsdWRlICJib2FyZC1yeDUxLmgiCiAKQEAgLTU1LDggKzU1LDYgQEAKICNpbmNsdWRlICJvbWFwLXBtLmgiCiAjaW5jbHVkZSAiaHNtbWMuaCIKICNpbmNsdWRlICJjb21tb24tYm9hcmQtZGV2aWNlcy5oIgotI2luY2x1ZGUgImdwbWMuaCIKLSNpbmNsdWRlICJncG1jLW9uZW5hbmQuaCIKICNpbmNsdWRlICJzb2MuaCIKICNpbmNsdWRlICJvbWFwLXNlY3VyZS5oIgogCkBAIC00ODQsNyArNDgyLDcgQEAKICAqIEN1cnJlbnQgZmxvd3MgdG8gZU1NQyB3aGVuIGVNTUMgaXMgb2ZmIGFuZCB0aGUgZGF0YSBsaW5lcyBhcmUgcHVsbGVkIHVwLAogICogc28gcHVsbCB0aGVtIGRvd24uIE4uQi4gd2UgcHVsbCA4IGxpbmVzIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIDggbGluZXMuCiAgKi8KLXN0YXRpYyB2b2lkIHJ4NTFfbW1jMl9yZW11eChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24pCitzdGF0aWMgdm9pZCByeDUxX21tYzJfcmVtdXgoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcG93ZXJfb24pCiB7CiAJaWYgKHBvd2VyX29uKQogCQlvbWFwX211eF93cml0ZV9hcnJheShwYXJ0aXRpb24sIHJ4NTFfbW1jMl9vbl9tdXgpOwpAQCAtNTAwLDcgKzQ5OCw2IEBACiAJCS5jb3Zlcl9vbmx5CT0gdHJ1ZSwKIAkJLmdwaW9fY2QJPSAxNjAsCiAJCS5ncGlvX3dwCT0gLUVJTlZBTCwKLQkJLnBvd2VyX3NhdmluZwk9IHRydWUsCiAJfSwKIAl7CiAJCS5uYW1lCQk9ICJpbnRlcm5hbCIsCkBAIC01MTAsNyArNTA3LDYgQEAKIAkJLmdwaW9fY2QJPSAtRUlOVkFMLAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCiAJCS5ub25yZW1vdmFibGUJPSB0cnVlLAotCQkucG93ZXJfc2F2aW5nCT0gdHJ1ZSwKIAkJLnJlbXV4CQk9IHJ4NTFfbW1jMl9yZW11eCwKIAl9LAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KQEAgLTExNDYsMzMgKzExNDIsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTUM5MVhfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IG9tYXBfc21jOTF4X3BsYXRmb3JtX2RhdGEgYm9hcmRfc21jOTF4X2RhdGEgPSB7Ci0JLmNzCQk9IDEsCi0JLmdwaW9faXJxCT0gNTQsCi0JLmdwaW9fcHdyZHduCT0gODYsCi0JLmdwaW9fcmVzZXQJPSAxNjQsCi0JLmZsYWdzCQk9IEdQTUNfVElNSU5HU19TTUM5MUM5NiB8IElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBib2FyZF9zbWM5MXhfaW5pdCh2b2lkKQotewotCW9tYXBfbXV4X2luaXRfZ3Bpbyg1NCwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOwotCW9tYXBfbXV4X2luaXRfZ3Bpbyg4NiwgT01BUF9QSU5fT1VUUFVUKTsKLQlvbWFwX211eF9pbml0X2dwaW8oMTY0LCBPTUFQX1BJTl9PVVRQVVQpOwotCi0JZ3BtY19zbWM5MXhfaW5pdCgmYm9hcmRfc21jOTF4X2RhdGEpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm9hcmRfc21jOTF4X2luaXQodm9pZCkKLXsKLX0KLQotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3QgZ3BpbyByeDUxX3dsMTI1MV9ncGlvc1tdIF9faW5pdGRhdGEgPSB7CiAJeyBSWDUxX1dMMTI1MV9JUlFfR1BJTywJICBHUElPRl9JTiwJCSJ3bDEyNTEgaXJxIgl9LAogfTsKQEAgLTEzMDMsNyArMTI3Miw2IEBACiAJcng1MV9pMmNfaW5pdCgpOwogCXJlZ3VsYXRvcl9oYXNfZnVsbF9jb25zdHJhaW50cygpOwogCWdwbWNfb25lbmFuZF9pbml0KGJvYXJkX29uZW5hbmRfZGF0YSk7Ci0JYm9hcmRfc21jOTF4X2luaXQoKTsKIAlyeDUxX2FkZF9ncGlvX2tleXMoKTsKIAlyeDUxX2luaXRfd2wxMjUxKCk7CiAJcng1MV9pbml0X3RzYzIwMDUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtdGk4MTY4ZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXRpODE2OGV2bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjczYzI4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtdGk4MTY4ZXZtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29kZSBmb3IgVEk4MTY4L1RJODE0OCBFVk0uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuIC0gaHR0cDovL3d3dy50aS5jb20vCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKLSAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKLSAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL211c2IuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0gewotCS5zZXRfcGh5X3Bvd2VyCT0gdGk4MXh4X211c2JfcGh5X3Bvd2VyLAotCS5pbnRlcmZhY2VfdHlwZQk9IE1VU0JfSU5URVJGQUNFX1VMUEksCi0JLm1vZGUgICAgICAgICAgID0gTVVTQl9PVEcsCi0JLnBvd2VyCQk9IDUwMCwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB0aTgxeHhfZXZtX2luaXQodm9pZCkKLXsKLQlvbWFwX3NlcmlhbF9pbml0KCk7Ci0Jb21hcF9zZHJjX2luaXQoTlVMTCwgTlVMTCk7Ci0JdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKLX0KLQotTUFDSElORV9TVEFSVChUSTgxNjhFVk0sICJ0aTgxNjhldm0iKQotCS8qIE1haW50YWluZXI6IFRleGFzIEluc3RydW1lbnRzICovCi0JLmF0YWdfb2Zmc2V0CT0gMHgxMDAsCi0JLm1hcF9pbwkJPSB0aTgxeHhfbWFwX2lvLAotCS5pbml0X2Vhcmx5CT0gdGk4MXh4X2luaXRfZWFybHksCi0JLmluaXRfaXJxCT0gdGk4MXh4X2luaXRfaXJxLAotCS5pbml0X3RpbWUJPSBvbWFwM19zeW5jMzJrX3RpbWVyX2luaXQsCi0JLmluaXRfbWFjaGluZQk9IHRpODF4eF9ldm1faW5pdCwKLQkuaW5pdF9sYXRlCT0gdGk4MXh4X2luaXRfbGF0ZSwKLQkucmVzdGFydAk9IG9tYXA0NHh4X3Jlc3RhcnQsCi1NQUNISU5FX0VORAotCi1NQUNISU5FX1NUQVJUKFRJODE0OEVWTSwgInRpODE0OGV2bSIpCi0JLyogTWFpbnRhaW5lcjogVGV4YXMgSW5zdHJ1bWVudHMgKi8KLQkuYXRhZ19vZmZzZXQJPSAweDEwMCwKLQkubWFwX2lvCQk9IHRpODF4eF9tYXBfaW8sCi0JLmluaXRfZWFybHkJPSB0aTgxeHhfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSB0aTgxeHhfaW5pdF9pcnEsCi0JLmluaXRfdGltZQk9IG9tYXAzX3N5bmMzMmtfdGltZXJfaW5pdCwKLQkuaW5pdF9tYWNoaW5lCT0gdGk4MXh4X2V2bV9pbml0LAotCS5pbml0X2xhdGUJPSB0aTgxeHhfaW5pdF9sYXRlLAotCS5yZXN0YXJ0CT0gb21hcDQ0eHhfcmVzdGFydCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NjbG9jazN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jY2xvY2szeHh4X2RhdGEuYwppbmRleCBlYjhjNzVlLi41YzVlYmI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NjbG9jazN4eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2Nsb2NrM3h4eF9kYXRhLmMKQEAgLTI1Nyw2ICsyNTcsOSBAQAogCS5nZXRfcGFyZW50CT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCiAJLnJlY2FsY19yYXRlCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQsCisJLnNldF9yYXRlX2FuZF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlX2FuZF9wYXJlbnQsCisJLmRldGVybWluZV9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kZXRlcm1pbmVfcmF0ZSwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCiB9OwogCkBAIC0zNjcsNiArMzcwLDkgQEAKIAkuZ2V0X3BhcmVudAk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAogCS5yZWNhbGNfcmF0ZQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIAkuc2V0X3JhdGUJPSAmb21hcDNfZHBsbDRfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQsCisJLnNldF9yYXRlX2FuZF9wYXJlbnQJPSAmb21hcDNfZHBsbDRfc2V0X3JhdGVfYW5kX3BhcmVudCwKKwkuZGV0ZXJtaW5lX3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2RldGVybWluZV9yYXRlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwppbmRleCA1MDA1MzBkLi42YWQ1YjRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCkBAIC0xNzEsNyArMTcxLDggQEAKIAkJX3dhaXRfaWRsZXN0X2dlbmVyaWMoY2xrLCBpZGxlc3RfcmVnLCAoMSA8PCBpZGxlc3RfYml0KSwKIAkJCQkgICAgIGlkbGVzdF92YWwsIF9fY2xrX2dldF9uYW1lKGNsay0+aHcuY2xrKSk7CiAJfSBlbHNlIHsKLQkJY21fd2FpdF9tb2R1bGVfcmVhZHkocHJjbV9tb2QsIGlkbGVzdF9yZWdfaWQsIGlkbGVzdF9iaXQpOworCQlvbWFwX2NtX3dhaXRfbW9kdWxlX3JlYWR5KDAsIHByY21fbW9kLCBpZGxlc3RfcmVnX2lkLAorCQkJCQkgIGlkbGVzdF9iaXQpOwogCX07CiB9CiAKQEAgLTc3MSw0ICs3NzIsOCBAQAogCQl0aV9jbGtfZmVhdHVyZXMuY21faWRsZXN0X3ZhbCA9IE9NQVAyNFhYX0NNX0lETEVTVF9WQUw7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCiAJCXRpX2Nsa19mZWF0dXJlcy5jbV9pZGxlc3RfdmFsID0gT01BUDM0WFhfQ01fSURMRVNUX1ZBTDsKKworCS8qIE9uIE9NQVAzNDMwIEVTMS4wLCBEUExMNCBjYW4ndCBiZSByZS1wcm9ncmFtbWVkICovCisJaWYgKG9tYXBfcmV2KCkgPT0gT01BUDM0MzBfUkVWX0VTMV8wKQorCQl0aV9jbGtfZmVhdHVyZXMuZmxhZ3MgfD0gVElfQ0xLX0RQTEw0X0RFTllfUkVQUk9HUkFNOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCmluZGV4IDQ1OTJhMjcuLjY0MTMzN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKQEAgLTIzNCw2ICsyMzQsNyBAQAogfTsKIAogI2RlZmluZSBUSV9DTEtfRFBMTF9IQVNfRlJFUVNFTAkJKDEgPDwgMCkKKyNkZWZpbmUgVElfQ0xLX0RQTEw0X0RFTllfUkVQUk9HUkFNCSgxIDw8IDEpCiAKIGV4dGVybiBzdHJ1Y3QgdGlfY2xrX2ZlYXR1cmVzIHRpX2Nsa19mZWF0dXJlczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmMKaW5kZXggMGIwMmI0MS4uYTllODZkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5jCkBAIC0zOCw2ICszOCwxOCBAQAogCiAvKiBuZWVkZWQgYnkgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKCkgKi8KIHN0cnVjdCBjbGsgKnNkcmNfaWNrX3AsICphcm1fZmNrX3A7CisKKy8qKgorICogb21hcDNfZHBsbDRfc2V0X3JhdGUgLSBzZXQgcmF0ZSBmb3Igb21hcDMgcGVyLWRwbGwKKyAqIEBodzogY2xvY2sgdG8gY2hhbmdlCisgKiBAcmF0ZTogdGFyZ2V0IHJhdGUgZm9yIGNsb2NrCisgKiBAcGFyZW50X3JhdGU6IHJhdGUgb2YgdGhlIHBhcmVudCBjbG9jaworICoKKyAqIENoZWNrIGlmIHRoZSBjdXJyZW50IFNvQyBzdXBwb3J0cyB0aGUgcGVyLWRwbGwgcmVwcm9ncmFtIG9wZXJhdGlvbgorICogb3Igbm90LCBhbmQgdGhlbiBkbyB0aGUgcmF0ZSBjaGFuZ2UgaWYgc3VwcG9ydGVkLiBSZXR1cm5zIC1FSU5WQUwKKyAqIGlmIG5vdCBzdXBwb3J0ZWQsIDAgZm9yIHN1Y2Nlc3MsIGFuZCBwb3RlbnRpYWwgZXJyb3IgY29kZXMgZnJvbSB0aGUKKyAqIGNsb2NrIHJhdGUgY2hhbmdlLgorICovCiBpbnQgb21hcDNfZHBsbDRfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQogewpAQCAtNDYsNyArNTgsNyBAQAogCSAqIG9uIDM0MzBFUzEgcHJldmVudHMgdXMgZnJvbSBjaGFuZ2luZyBEUExMIG11bHRpcGxpZXJzIG9yIGRpdmlkZXJzCiAJICogb24gRFBMTDQuCiAJICovCi0JaWYgKG9tYXBfcmV2KCkgPT0gT01BUDM0MzBfUkVWX0VTMV8wKSB7CisJaWYgKHRpX2Nsa19mZWF0dXJlcy5mbGFncyAmIFRJX0NMS19EUExMNF9ERU5ZX1JFUFJPR1JBTSkgewogCQlwcl9lcnIoImNsb2NrOiBEUExMNCBjYW5ub3QgY2hhbmdlIHJhdGUgZHVlIHRvIHNpbGljb24gJ0xpbWl0YXRpb24gMi41JyBvbiAzNDMwRVMxLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU0LDYgKzY2LDMwIEBACiAJcmV0dXJuIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShodywgcmF0ZSwgcGFyZW50X3JhdGUpOwogfQogCisvKioKKyAqIG9tYXAzX2RwbGw0X3NldF9yYXRlX2FuZF9wYXJlbnQgLSBzZXQgcmF0ZSBhbmQgcGFyZW50IGZvciBvbWFwMyBwZXItZHBsbAorICogQGh3OiBjbG9jayB0byBjaGFuZ2UKKyAqIEByYXRlOiB0YXJnZXQgcmF0ZSBmb3IgY2xvY2sKKyAqIEBwYXJlbnRfcmF0ZTogcmF0ZSBvZiB0aGUgcGFyZW50IGNsb2NrCisgKiBAaW5kZXg6IHBhcmVudCBpbmRleCwgMCAtIHJlZmVyZW5jZSBjbG9jaywgMSAtIGJ5cGFzcyBjbG9jaworICoKKyAqIENoZWNrIGlmIHRoZSBjdXJyZW50IFNvQyBzdXBwb3J0IHRoZSBwZXItZHBsbCByZXByb2dyYW0gb3BlcmF0aW9uCisgKiBvciBub3QsIGFuZCB0aGVuIGRvIHRoZSByYXRlICsgcGFyZW50IGNoYW5nZSBpZiBzdXBwb3J0ZWQuIFJldHVybnMKKyAqIC1FSU5WQUwgaWYgbm90IHN1cHBvcnRlZCwgMCBmb3Igc3VjY2VzcywgYW5kIHBvdGVudGlhbCBlcnJvciBjb2RlcworICogZnJvbSB0aGUgY2xvY2sgcmF0ZSBjaGFuZ2UuCisgKi8KK2ludCBvbWFwM19kcGxsNF9zZXRfcmF0ZV9hbmRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUsIHU4IGluZGV4KQoreworCWlmICh0aV9jbGtfZmVhdHVyZXMuZmxhZ3MgJiBUSV9DTEtfRFBMTDRfREVOWV9SRVBST0dSQU0pIHsKKwkJcHJfZXJyKCJjbG9jazogRFBMTDQgY2Fubm90IGNoYW5nZSByYXRlIGR1ZSB0byBzaWxpY29uICdMaW1pdGF0aW9uIDIuNScgb24gMzQzMEVTMS5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlX2FuZF9wYXJlbnQoaHcsIHJhdGUsIHBhcmVudF9yYXRlLAorCQkJCQkJICAgICAgaW5kZXgpOworfQorCiB2b2lkIF9faW5pdCBvbWFwM19jbGtfbG9ja19kcGxsNSh2b2lkKQogewogCXN0cnVjdCBjbGsgKmRwbGw1X2NsazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaAppbmRleCA5MzQ3M2Y5Li42MjIyZTg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCkBAIC00NSwxNyArNDUsMjkgQEAKICAqIHN0cnVjdCBjbV9sbF9kYXRhIC0gZm4gcHRycyB0byBwZXItU29DIENNIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucwogICogQHNwbGl0X2lkbGVzdF9yZWc6IHB0ciB0byB0aGUgU29DIENNLXNwZWNpZmljIHNwbGl0X2lkbGVzdF9yZWcgaW1wbAogICogQHdhaXRfbW9kdWxlX3JlYWR5OiBwdHIgdG8gdGhlIFNvQyBDTS1zcGVjaWZpYyB3YWl0X21vZHVsZV9yZWFkeSBpbXBsCisgKiBAd2FpdF9tb2R1bGVfaWRsZTogcHRyIHRvIHRoZSBTb0MgQ00tc3BlY2lmaWMgd2FpdF9tb2R1bGVfaWRsZSBpbXBsCisgKiBAbW9kdWxlX2VuYWJsZTogcHRyIHRvIHRoZSBTb0MgQ00tc3BlY2lmaWMgbW9kdWxlX2VuYWJsZSBpbXBsCisgKiBAbW9kdWxlX2Rpc2FibGU6IHB0ciB0byB0aGUgU29DIENNLXNwZWNpZmljIG1vZHVsZV9kaXNhYmxlIGltcGwKICAqLwogc3RydWN0IGNtX2xsX2RhdGEgewogCWludCAoKnNwbGl0X2lkbGVzdF9yZWcpKHZvaWQgX19pb21lbSAqaWRsZXN0X3JlZywgczE2ICpwcmNtX2luc3QsCiAJCQkJdTggKmlkbGVzdF9yZWdfaWQpOwotCWludCAoKndhaXRfbW9kdWxlX3JlYWR5KShzMTYgcHJjbV9tb2QsIHU4IGlkbGVzdF9pZCwgdTggaWRsZXN0X3NoaWZ0KTsKKwlpbnQgKCp3YWl0X21vZHVsZV9yZWFkeSkodTggcGFydCwgczE2IHByY21fbW9kLCB1MTYgaWRsZXN0X3JlZywKKwkJCQkgdTggaWRsZXN0X3NoaWZ0KTsKKwlpbnQgKCp3YWl0X21vZHVsZV9pZGxlKSh1OCBwYXJ0LCBzMTYgcHJjbV9tb2QsIHUxNiBpZGxlc3RfcmVnLAorCQkJCXU4IGlkbGVzdF9zaGlmdCk7CisJdm9pZCAoKm1vZHVsZV9lbmFibGUpKHU4IG1vZGUsIHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKTsKKwl2b2lkICgqbW9kdWxlX2Rpc2FibGUpKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKTsKIH07CiAKIGV4dGVybiBpbnQgY21fc3BsaXRfaWRsZXN0X3JlZyh2b2lkIF9faW9tZW0gKmlkbGVzdF9yZWcsIHMxNiAqcHJjbV9pbnN0LAogCQkJICAgICAgIHU4ICppZGxlc3RfcmVnX2lkKTsKLWV4dGVybiBpbnQgY21fd2FpdF9tb2R1bGVfcmVhZHkoczE2IHByY21fbW9kLCB1OCBpZGxlc3RfaWQsIHU4IGlkbGVzdF9zaGlmdCk7Ci0KK2ludCBvbWFwX2NtX3dhaXRfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHMxNiBwcmNtX21vZCwgdTE2IGlkbGVzdF9yZWcsCisJCQkgICAgICB1OCBpZGxlc3Rfc2hpZnQpOworaW50IG9tYXBfY21fd2FpdF9tb2R1bGVfaWRsZSh1OCBwYXJ0LCBzMTYgcHJjbV9tb2QsIHUxNiBpZGxlc3RfcmVnLAorCQkJICAgICB1OCBpZGxlc3Rfc2hpZnQpOworaW50IG9tYXBfY21fbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2Zmcyk7CitpbnQgb21hcF9jbV9tb2R1bGVfZGlzYWJsZSh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2Zmcyk7CiBleHRlcm4gaW50IGNtX3JlZ2lzdGVyKHN0cnVjdCBjbV9sbF9kYXRhICpjbGQpOwogZXh0ZXJuIGludCBjbV91bnJlZ2lzdGVyKHN0cnVjdCBjbV9sbF9kYXRhICpjbGQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV80NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV80NHh4LmgKaW5kZXggNWFlOGZlMy4uYTU5NDk5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfNDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzQ0eHguaApAQCAtMjUsOCArMjUsNiBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00xXzQ0WFhfSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00xXzQ0WFhfSAogCi0jaW5jbHVkZSAiY21fNDR4eF81NHh4LmgiCi0KIC8qIENNMSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgT01BUDQ0MzBfQ00xX0JBU0UJCTB4NGEwMDQwMDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfNTR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfNTR4eC5oCmluZGV4IDkwYjMzNDguLmZkMjQ1ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzU0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV81NHh4LmgKQEAgLTIyLDggKzIyLDYgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMV81NFhYX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMV81NFhYX0gKIAotI2luY2x1ZGUgImNtXzQ0eHhfNTR4eC5oIgotCiAvKiBDTTEgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIE9NQVA1NFhYX0NNX0NPUkVfQU9OX0JBU0UJCTB4NGEwMDQwMDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfN3h4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV83eHguaAppbmRleCBjYTZmYTFmLi4yZjFjMDllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV83eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMV83eHguaApAQCAtMjMsOCArMjMsNiBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00xXzdYWF9ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTFfN1hYX0gKIAotI2luY2x1ZGUgImNtXzQ0eHhfNTR4eC5oIgotCiAvKiBDTTEgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIERSQTdYWF9DTV9DT1JFX0FPTl9CQVNFCQkweDRhMDA1MDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzQ0eHguaAppbmRleCBlZTUxMzZkLi43NTIxYWJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl80NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfNDR4eC5oCkBAIC0yNSw4ICsyNSw2IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTJfNDRYWF9ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTJfNDRYWF9ICiAKLSNpbmNsdWRlICJjbV80NHh4XzU0eHguaCIKLQogLyogQ00yIGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBPTUFQNDQzMF9DTTJfQkFTRQkJMHg0YTAwODAwMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl81NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl81NHh4LmgKaW5kZXggMjY4MzIzMS4uZmY0MDQwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfNTR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzU0eHguaApAQCAtMjEsOCArMjEsNiBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00yXzU0WFhfSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00yXzU0WFhfSAogCi0jaW5jbHVkZSAiY21fNDR4eF81NHh4LmgiCi0KIC8qIENNMiBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgT01BUDU0WFhfQ01fQ09SRV9CQVNFCQkweDRhMDA4MDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yXzd4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfN3h4LmgKaW5kZXggZTk2NmUzYS4uY2U2M2ZkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfN3h4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfN3h4LmgKQEAgLTIyLDggKzIyLDYgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMl83WFhfSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ00yXzdYWF9ICiAKLSNpbmNsdWRlICJjbV80NHh4XzU0eHguaCIKLQogLyogQ00yIGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBEUkE3WFhfQ01fQ09SRV9CQVNFCQkweDRhMDA4MDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5jCmluZGV4IDhiZTZlYTUuLmE5NmQ5MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHguYwpAQCAtNTMsNyArNTMsNyBAQAogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcodiwgbW9kdWxlLCBPTUFQMl9DTV9DTEtTVENUUkwpOwogfQogCi1ib29sIG9tYXAyeHh4X2NtX2lzX2Nsa2RtX2luX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQorc3RhdGljIGJvb2wgb21hcDJ4eHhfY21faXNfY2xrZG1faW5faHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCiB7CiAJdTMyIHY7CiAKQEAgLTY0LDEyICs2NCwxMiBAQAogCXJldHVybiAodiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pID8gMSA6IDA7CiB9CiAKLXZvaWQgb21hcDJ4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQorc3RhdGljIHZvaWQgb21hcDJ4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQogewogCV93cml0ZV9jbGt0cmN0cmwoT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPLCBtb2R1bGUsIG1hc2spOwogfQogCi12b2lkIG9tYXAyeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCitzdGF0aWMgdm9pZCBvbWFwMnh4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQogewogCV93cml0ZV9jbGt0cmN0cmwoT01BUDI0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTywgbW9kdWxlLCBtYXNrKTsKIH0KQEAgLTE1MCw3ICsxNTAsNyBAQAogCXYgfD0gbTsKIAlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKHYsIFBMTF9NT0QsIENNX0NMS0VOKTsKIAotCW9tYXAyeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KFBMTF9NT0QsIDEsIHN0YXR1c19iaXQpOworCW9tYXAyeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KDAsIFBMTF9NT0QsIDEsIHN0YXR1c19iaXQpOwogCiAJLyoKIAkgKiBSRVZJU0lUOiBTaG91bGQgd2UgcmV0dXJuIGFuIGVycm9yIGNvZGUgaWYKQEAgLTIwNCw4ICsyMDQsOSBAQAogICogWFhYIFRoaXMgZnVuY3Rpb24gaXMgb25seSBuZWVkZWQgdW50aWwgYWJzb2x1dGUgcmVnaXN0ZXIgYWRkcmVzc2VzIGFyZQogICogcmVtb3ZlZCBmcm9tIHRoZSBPTUFQIHN0cnVjdCBjbGsgcmVjb3Jkcy4KICAqLwotaW50IG9tYXAyeHh4X2NtX3NwbGl0X2lkbGVzdF9yZWcodm9pZCBfX2lvbWVtICppZGxlc3RfcmVnLCBzMTYgKnByY21faW5zdCwKLQkJCQkgdTggKmlkbGVzdF9yZWdfaWQpCitzdGF0aWMgaW50IG9tYXAyeHh4X2NtX3NwbGl0X2lkbGVzdF9yZWcodm9pZCBfX2lvbWVtICppZGxlc3RfcmVnLAorCQkJCQlzMTYgKnByY21faW5zdCwKKwkJCQkJdTggKmlkbGVzdF9yZWdfaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzOwogCXU4IGlkbGVzdF9vZmZzOwpAQCAtMjM4LDYgKzIzOSw3IEBACiAKIC8qKgogICogb21hcDJ4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBsZWF2ZSBpZGxlIG9yIHN0YW5kYnkKKyAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbiwgaWdub3JlZCBmb3IgT01BUDIKICAqIEBwcmNtX21vZDogUFJDTSBtb2R1bGUgb2Zmc2V0CiAgKiBAaWRsZXN0X2lkOiBDTV9JRExFU1R4IHJlZ2lzdGVyIElEIChpLmUuLCB4ID0gMSwgMiwgMykKICAqIEBpZGxlc3Rfc2hpZnQ6IHNoaWZ0IG9mIHRoZSBiaXQgaW4gdGhlIENNX0lETEVTVCogcmVnaXN0ZXIgdG8gY2hlY2sKQEAgLTI0Niw3ICsyNDgsOCBAQAogICogKEBwcmNtX21vZCwgQGlkbGVzdF9pZCwgQGlkbGVzdF9zaGlmdCkgaXMgY2xvY2tlZC4gIFJldHVybiAwIHVwb24KICAqIHN1Y2Nlc3Mgb3IgLUVCVVNZIGlmIHRoZSBtb2R1bGUgZG9lc24ndCBlbmFibGUgaW4gdGltZS4KICAqLwotaW50IG9tYXAyeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHMxNiBwcmNtX21vZCwgdTggaWRsZXN0X2lkLCB1OCBpZGxlc3Rfc2hpZnQpCitpbnQgb21hcDJ4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkodTggcGFydCwgczE2IHByY21fbW9kLCB1MTYgaWRsZXN0X2lkLAorCQkJCSAgdTggaWRsZXN0X3NoaWZ0KQogewogCWludCBlbmEgPSAwLCBpID0gMDsKIAl1OCBjbV9pZGxlc3RfcmVnOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4LmgKaW5kZXggODkxZDgxYy4uYzg5NTAyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5oCkBAIC00Niw5ICs0Niw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogCi1leHRlcm4gdm9pZCBvbWFwMnh4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOwotZXh0ZXJuIHZvaWQgb21hcDJ4eHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzayk7Ci0KIGV4dGVybiB2b2lkIG9tYXAyeHh4X2NtX3NldF9kcGxsX2Rpc2FibGVfYXV0b2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMnh4eF9jbV9zZXRfZHBsbF9hdXRvX2xvd19wb3dlcl9zdG9wKHZvaWQpOwogCkBAIC01NywxMSArNTQsOCBAQAogZXh0ZXJuIHZvaWQgb21hcDJ4eHhfY21fc2V0X2FwbGw5Nl9kaXNhYmxlX2F1dG9pZGxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDJ4eHhfY21fc2V0X2FwbGw5Nl9hdXRvX2xvd19wb3dlcl9zdG9wKHZvaWQpOwogCi1leHRlcm4gYm9vbCBvbWFwMnh4eF9jbV9pc19jbGtkbV9pbl9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzayk7Ci1leHRlcm4gaW50IG9tYXAyeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHMxNiBwcmNtX21vZCwgdTggaWRsZXN0X2lkLAotCQkJCQkgdTggaWRsZXN0X3NoaWZ0KTsKLWV4dGVybiBpbnQgb21hcDJ4eHhfY21fc3BsaXRfaWRsZXN0X3JlZyh2b2lkIF9faW9tZW0gKmlkbGVzdF9yZWcsCi0JCQkJCXMxNiAqcHJjbV9pbnN0LCB1OCAqaWRsZXN0X3JlZ19pZCk7CitpbnQgb21hcDJ4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkodTggcGFydCwgczE2IHByY21fbW9kLCB1MTYgaWRsZXN0X2lkLAorCQkJCSAgdTggaWRsZXN0X3NoaWZ0KTsKIGV4dGVybiBpbnQgb21hcDJ4eHhfY21fZmNsa3NfYWN0aXZlKHZvaWQpOwogZXh0ZXJuIGludCBvbWFwMnh4eF9jbV9tcHVfcmV0ZW50aW9uX2FsbG93ZWQodm9pZCk7CiBleHRlcm4gdTMyIG9tYXAyeHh4X2NtX2dldF9jb3JlX2Nsa19zcmModm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguYwppbmRleCBiM2Y5OWU5Li5iOWFkNDYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zM3h4LmMKQEAgLTk2LDEzICs5NiwxMiBAQAogLyoqCiAgKiBfY2xrY3RybF9pZGxlc3QgLSByZWFkIGEgQ01fKl9DTEtDVFJMIHJlZ2lzdGVyOyBtYXNrICYgc2hpZnQgSURMRVNUIGJpdGZpZWxkCiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCiAgKgogICogUmV0dXJuIHRoZSBJRExFU1QgYml0ZmllbGQgb2YgYSBDTV8qX0NMS0NUUkwgcmVnaXN0ZXIsIHNoaWZ0ZWQgZG93biB0bwogICogYml0IDAuCiAgKi8KLXN0YXRpYyB1MzIgX2Nsa2N0cmxfaWRsZXN0KHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIHUzMiBfY2xrY3RybF9pZGxlc3QodTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpCiB7CiAJdTMyIHYgPSBhbTMzeHhfY21fcmVhZF9yZWcoaW5zdCwgY2xrY3RybF9vZmZzKTsKIAl2ICY9IEFNMzNYWF9JRExFU1RfTUFTSzsKQEAgLTExMywxNyArMTEyLDE2IEBACiAvKioKICAqIF9pc19tb2R1bGVfcmVhZHkgLSBjYW4gbW9kdWxlIHJlZ2lzdGVycyBiZSBhY2Nlc3NlZCB3aXRob3V0IGNhdXNpbmcgYW4gYWJvcnQ/CiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCiAgKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBtb2R1bGUncyBDTV8qX0NMS0NUUkwuSURMRVNUIGJpdGZpZWxkIGlzIGVpdGhlcgogICogKkZVTkNUSU9OQUwgb3IgKklOVEVSRkFDRV9JRExFOyBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIF9pc19tb2R1bGVfcmVhZHkodTE2IGluc3QsIHMxNiBjZG9mZnMsIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgYm9vbCBfaXNfbW9kdWxlX3JlYWR5KHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKQogewogCXUzMiB2OwogCi0JdiA9IF9jbGtjdHJsX2lkbGVzdChpbnN0LCBjZG9mZnMsIGNsa2N0cmxfb2Zmcyk7CisJdiA9IF9jbGtjdHJsX2lkbGVzdChpbnN0LCBjbGtjdHJsX29mZnMpOwogCiAJcmV0dXJuICh2ID09IENMS0NUUkxfSURMRVNUX0ZVTkNUSU9OQUwgfHwKIAkJdiA9PSBDTEtDVFJMX0lETEVTVF9JTlRFUkZBQ0VfSURMRSkgPyB0cnVlIDogZmFsc2U7CkBAIC0xNTgsNyArMTU2LDcgQEAKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2xvY2tkb21haW4gcmVmZXJyZWQgdG8gYnkgKEBpbnN0LCBAY2RvZmZzKQogICogaXMgaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUsIG9yIDAgb3RoZXJ3aXNlLgogICovCi1ib29sIGFtMzN4eF9jbV9pc19jbGtkbV9pbl9od3N1cCh1MTYgaW5zdCwgdTE2IGNkb2ZmcykKK3N0YXRpYyBib29sIGFtMzN4eF9jbV9pc19jbGtkbV9pbl9od3N1cCh1MTYgaW5zdCwgdTE2IGNkb2ZmcykKIHsKIAl1MzIgdjsKIApAQCAtMTc3LDcgKzE3NSw3IEBACiAgKiBQdXQgYSBjbG9ja2RvbWFpbiByZWZlcnJlZCB0byBieSAoQGluc3QsIEBjZG9mZnMpIGludG8KICAqIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIGFtMzN4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAodTE2IGluc3QsIHUxNiBjZG9mZnMpCitzdGF0aWMgdm9pZCBhbTMzeHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKQogewogCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPLCBpbnN0LCBjZG9mZnMpOwogfQpAQCAtMTkxLDcgKzE4OSw3IEBACiAgKiBzb2Z0d2FyZS1zdXBlcnZpc2VkIGlkbGUgbW9kZSwgaS5lLiwgY29udHJvbGxlZCBtYW51YWxseSBieSB0aGUKICAqIExpbnV4IE9NQVAgY2xvY2tkb21haW4gY29kZS4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBhbTMzeHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cCh1MTYgaW5zdCwgdTE2IGNkb2ZmcykKK3N0YXRpYyB2b2lkIGFtMzN4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKQogewogCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTywgaW5zdCwgY2RvZmZzKTsKIH0KQEAgLTIwNCw3ICsyMDIsNyBAQAogICogUHV0IGEgY2xvY2tkb21haW4gcmVmZXJyZWQgdG8gYnkgKEBpbnN0LCBAY2RvZmZzKSBpbnRvIGlkbGUKICAqIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBhbTMzeHhfY21fY2xrZG1fZm9yY2Vfc2xlZXAodTE2IGluc3QsIHUxNiBjZG9mZnMpCitzdGF0aWMgdm9pZCBhbTMzeHhfY21fY2xrZG1fZm9yY2Vfc2xlZXAodTE2IGluc3QsIHUxNiBjZG9mZnMpCiB7CiAJX2Nsa3RyY3RybF93cml0ZShPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfU0xFRVAsIGluc3QsIGNkb2Zmcyk7CiB9CkBAIC0yMTcsNyArMjE1LDcgQEAKICAqIFRha2UgYSBjbG9ja2RvbWFpbiByZWZlcnJlZCB0byBieSAoQGluc3QsIEBjZG9mZnMpIG91dCBvZiBpZGxlLAogICogd2FraW5nIGl0IHVwLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIGFtMzN4eF9jbV9jbGtkbV9mb3JjZV93YWtldXAodTE2IGluc3QsIHUxNiBjZG9mZnMpCitzdGF0aWMgdm9pZCBhbTMzeHhfY21fY2xrZG1fZm9yY2Vfd2FrZXVwKHUxNiBpbnN0LCB1MTYgY2RvZmZzKQogewogCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1dBS0VVUCwgaW5zdCwgY2RvZmZzKTsKIH0KQEAgLTIyOCwyMCArMjI2LDIyIEBACiAKIC8qKgogICogYW0zM3h4X2NtX3dhaXRfbW9kdWxlX3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gYmUgaW4gJ2Z1bmMnIHN0YXRlCisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24sIGlnbm9yZWQgZm9yIEFNMzN4eAogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQorICogQGJpdF9zaGlmdDogYml0IHNoaWZ0IGZvciB0aGUgcmVnaXN0ZXIsIGlnbm9yZWQgZm9yIEFNMzN4eAogICoKICAqIFdhaXQgZm9yIHRoZSBtb2R1bGUgSURMRVNUIHRvIGJlIGZ1bmN0aW9uYWwuIElmIHRoZSBpZGxlIHN0YXRlIGlzIGluIGFueQogICogdGhlIG5vbiBmdW5jdGlvbmFsIHN0YXRlICh0cmFucywgaWRsZSBvciBkaXNhYmxlZCksIG1vZHVsZSBhbmQgdGh1cyB0aGUKICAqIHN5c2NvbmZpZyBjYW5ub3QgYmUgYWNjZXNzZWQgYW5kIHdpbGwgcHJvYmFibHkgbGVhZCB0byBhbiAiaW1wcmVjaXNlCiAgKiBleHRlcm5hbCBhYm9ydCIKICAqLwotaW50IGFtMzN4eF9jbV93YWl0X21vZHVsZV9yZWFkeSh1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyBpbnQgYW0zM3h4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzLAorCQkJCSAgICAgICB1OCBiaXRfc2hpZnQpCiB7CiAJaW50IGkgPSAwOwogCi0Jb21hcF90ZXN0X3RpbWVvdXQoX2lzX21vZHVsZV9yZWFkeShpbnN0LCBjZG9mZnMsIGNsa2N0cmxfb2ZmcyksCisJb21hcF90ZXN0X3RpbWVvdXQoX2lzX21vZHVsZV9yZWFkeShpbnN0LCBjbGtjdHJsX29mZnMpLAogCQkJICBNQVhfTU9EVUxFX1JFQURZX1RJTUUsIGkpOwogCiAJcmV0dXJuIChpIDwgTUFYX01PRFVMRV9SRUFEWV9USU1FKSA/IDAgOiAtRUJVU1k7CkBAIC0yNTAsMjIgKzI1MCwyNCBAQAogLyoqCiAgKiBhbTMzeHhfY21fd2FpdF9tb2R1bGVfaWRsZSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGJlIGluICdkaXNhYmxlZCcKICAqIHN0YXRlCisgKiBAcGFydDogQ00gcGFydGl0aW9uLCBpZ25vcmVkIGZvciBBTTMzeHgKICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKKyAqIEBiaXRfc2hpZnQ6IGJpdCBzaGlmdCBmb3IgdGhlIHJlZ2lzdGVyLCBpZ25vcmVkIGZvciBBTTMzeHgKICAqCiAgKiBXYWl0IGZvciB0aGUgbW9kdWxlIElETEVTVCB0byBiZSBkaXNhYmxlZC4gU29tZSBQUkNNIHRyYW5zaXRpb24sCiAgKiBsaWtlIHJlc2V0IGFzc2VydGlvbiBvciBwYXJlbnQgY2xvY2sgZGUtYWN0aXZhdGlvbiBtdXN0IHdhaXQgdGhlCiAgKiBtb2R1bGUgdG8gYmUgZnVsbHkgZGlzYWJsZWQuCiAgKi8KLWludCBhbTMzeHhfY21fd2FpdF9tb2R1bGVfaWRsZSh1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyBpbnQgYW0zM3h4X2NtX3dhaXRfbW9kdWxlX2lkbGUodTggcGFydCwgczE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMsCisJCQkJICAgICAgdTggYml0X3NoaWZ0KQogewogCWludCBpID0gMDsKIAogCWlmICghY2xrY3RybF9vZmZzKQogCQlyZXR1cm4gMDsKIAotCW9tYXBfdGVzdF90aW1lb3V0KChfY2xrY3RybF9pZGxlc3QoaW5zdCwgY2RvZmZzLCBjbGtjdHJsX29mZnMpID09CisJb21hcF90ZXN0X3RpbWVvdXQoKF9jbGtjdHJsX2lkbGVzdChpbnN0LCBjbGtjdHJsX29mZnMpID09CiAJCQkJQ0xLQ1RSTF9JRExFU1RfRElTQUJMRUQpLAogCQkJCU1BWF9NT0RVTEVfUkVBRFlfVElNRSwgaSk7CiAKQEAgLTI3NSwxMyArMjc3LDE0IEBACiAvKioKICAqIGFtMzN4eF9jbV9tb2R1bGVfZW5hYmxlIC0gRW5hYmxlIHRoZSBtb2R1bGVtb2RlIGluc2lkZSBDTEtDVFJMCiAgKiBAbW9kZTogTW9kdWxlIG1vZGUgKFNXIG9yIEhXKQorICogQHBhcnQ6IENNIHBhcnRpdGlvbiwgaWdub3JlZCBmb3IgQU0zM3h4CiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCiAgKgogICogTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIGFtMzN4eF9jbV9tb2R1bGVfZW5hYmxlKHU4IG1vZGUsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIHZvaWQgYW0zM3h4X2NtX21vZHVsZV9lbmFibGUodTggbW9kZSwgdTggcGFydCwgdTE2IGluc3QsCisJCQkJICAgIHUxNiBjbGtjdHJsX29mZnMpCiB7CiAJdTMyIHY7CiAKQEAgLTI5MywxMyArMjk2LDEzIEBACiAKIC8qKgogICogYW0zM3h4X2NtX21vZHVsZV9kaXNhYmxlIC0gRGlzYWJsZSB0aGUgbW9kdWxlIGluc2lkZSBDTEtDVFJMCisgKiBAcGFydDogQ00gcGFydGl0aW9uLCBpZ25vcmVkIGZvciBBTTMzeHgKICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKICAqCiAgKiBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgYW0zM3h4X2NtX21vZHVsZV9kaXNhYmxlKHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIHZvaWQgYW0zM3h4X2NtX21vZHVsZV9kaXNhYmxlKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKQogewogCXUzMiB2OwogCkBAIC0zNjIsMyArMzY1LDIxIEBACiAJLmNsa2RtX2Nsa19lbmFibGUJPSBhbTMzeHhfY2xrZG1fY2xrX2VuYWJsZSwKIAkuY2xrZG1fY2xrX2Rpc2FibGUJPSBhbTMzeHhfY2xrZG1fY2xrX2Rpc2FibGUsCiB9OworCitzdGF0aWMgc3RydWN0IGNtX2xsX2RhdGEgYW0zM3h4X2NtX2xsX2RhdGEgPSB7CisJLndhaXRfbW9kdWxlX3JlYWR5CT0gJmFtMzN4eF9jbV93YWl0X21vZHVsZV9yZWFkeSwKKwkud2FpdF9tb2R1bGVfaWRsZQk9ICZhbTMzeHhfY21fd2FpdF9tb2R1bGVfaWRsZSwKKwkubW9kdWxlX2VuYWJsZQkJPSAmYW0zM3h4X2NtX21vZHVsZV9lbmFibGUsCisJLm1vZHVsZV9kaXNhYmxlCQk9ICZhbTMzeHhfY21fbW9kdWxlX2Rpc2FibGUsCit9OworCitpbnQgX19pbml0IGFtMzN4eF9jbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGNtX3JlZ2lzdGVyKCZhbTMzeHhfY21fbGxfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbTMzeHhfY21fZXhpdCh2b2lkKQoreworCWNtX3VucmVnaXN0ZXIoJmFtMzN4eF9jbV9sbF9kYXRhKTsKK30KK19fZXhpdGNhbGwoYW0zM3h4X2NtX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zM3h4LmgKaW5kZXggYmQyNDQxNy4uMDQ2YjRiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTMzeHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMzN4eC5oCkBAIC0zNzQsNDEgKzM3NCw2IEBACiAKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi1ib29sIGFtMzN4eF9jbV9pc19jbGtkbV9pbl9od3N1cCh1MTYgaW5zdCwgdTE2IGNkb2Zmcyk7Ci12b2lkIGFtMzN4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAodTE2IGluc3QsIHUxNiBjZG9mZnMpOwotdm9pZCBhbTMzeHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cCh1MTYgaW5zdCwgdTE2IGNkb2Zmcyk7Ci12b2lkIGFtMzN4eF9jbV9jbGtkbV9mb3JjZV9zbGVlcCh1MTYgaW5zdCwgdTE2IGNkb2Zmcyk7Ci12b2lkIGFtMzN4eF9jbV9jbGtkbV9mb3JjZV93YWtldXAodTE2IGluc3QsIHUxNiBjZG9mZnMpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FNMzNYWCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FNNDNYWCkKLWV4dGVybiBpbnQgYW0zM3h4X2NtX3dhaXRfbW9kdWxlX2lkbGUodTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJCXUxNiBjbGtjdHJsX29mZnMpOwotZXh0ZXJuIHZvaWQgYW0zM3h4X2NtX21vZHVsZV9lbmFibGUodTggbW9kZSwgdTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJCXUxNiBjbGtjdHJsX29mZnMpOwotZXh0ZXJuIHZvaWQgYW0zM3h4X2NtX21vZHVsZV9kaXNhYmxlKHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCQl1MTYgY2xrY3RybF9vZmZzKTsKLWV4dGVybiBpbnQgYW0zM3h4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCQl1MTYgY2xrY3RybF9vZmZzKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBhbTMzeHhfY21fd2FpdF9tb2R1bGVfaWRsZSh1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkJdTE2IGNsa2N0cmxfb2ZmcykKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhbTMzeHhfY21fbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkJdTE2IGNsa2N0cmxfb2ZmcykKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhbTMzeHhfY21fbW9kdWxlX2Rpc2FibGUodTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJCXUxNiBjbGtjdHJsX29mZnMpCi17Ci19Ci1zdGF0aWMgaW5saW5lIGludCBhbTMzeHhfY21fd2FpdF9tb2R1bGVfcmVhZHkodTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJCXUxNiBjbGtjdHJsX29mZnMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQoraW50IGFtMzN4eF9jbV9pbml0KHZvaWQpOwogI2VuZGlmIC8qIEFTU0VNQkxFUiAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTN4eHguYwppbmRleCAxMjlhNGU3Li5lYmVhZDhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmMKQEAgLTQyLDcgKzQyLDcgQEAKIAlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKHYsIG1vZHVsZSwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKIH0KIAotYm9vbCBvbWFwM3h4eF9jbV9pc19jbGtkbV9pbl9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3N0YXRpYyBib29sIG9tYXAzeHh4X2NtX2lzX2Nsa2RtX2luX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQogewogCXUzMiB2OwogCkBAIC01MywyMiArNTMsMjIgQEAKIAlyZXR1cm4gKHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSA/IDEgOiAwOwogfQogCi12b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKIHsKIAlfd3JpdGVfY2xrdHJjdHJsKE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTywgbW9kdWxlLCBtYXNrKTsKIH0KIAotdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQorc3RhdGljIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKIHsKIAlfd3JpdGVfY2xrdHJjdHJsKE9NQVAzNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8sIG1vZHVsZSwgbWFzayk7CiB9CiAKLXZvaWQgb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfc2xlZXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCitzdGF0aWMgdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9mb3JjZV9zbGVlcChzMTYgbW9kdWxlLCB1MzIgbWFzaykKIHsKIAlfd3JpdGVfY2xrdHJjdHJsKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9TTEVFUCwgbW9kdWxlLCBtYXNrKTsKIH0KIAotdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9mb3JjZV93YWtldXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCitzdGF0aWMgdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9mb3JjZV93YWtldXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCiB7CiAJX3dyaXRlX2Nsa3RyY3RybChPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQLCBtb2R1bGUsIG1hc2spOwogfQpAQCAtNzksNiArNzksNyBAQAogCiAvKioKICAqIG9tYXAzeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gbGVhdmUgaWRsZSBvciBzdGFuZGJ5CisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24sIGlnbm9yZWQgZm9yIE9NQVAzCiAgKiBAcHJjbV9tb2Q6IFBSQ00gbW9kdWxlIG9mZnNldAogICogQGlkbGVzdF9pZDogQ01fSURMRVNUeCByZWdpc3RlciBJRCAoaS5lLiwgeCA9IDEsIDIsIDMpCiAgKiBAaWRsZXN0X3NoaWZ0OiBzaGlmdCBvZiB0aGUgYml0IGluIHRoZSBDTV9JRExFU1QqIHJlZ2lzdGVyIHRvIGNoZWNrCkBAIC04Nyw3ICs4OCw4IEBACiAgKiAoQHByY21fbW9kLCBAaWRsZXN0X2lkLCBAaWRsZXN0X3NoaWZ0KSBpcyBjbG9ja2VkLiAgUmV0dXJuIDAgdXBvbgogICogc3VjY2VzcyBvciAtRUJVU1kgaWYgdGhlIG1vZHVsZSBkb2Vzbid0IGVuYWJsZSBpbiB0aW1lLgogICovCi1pbnQgb21hcDN4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkoczE2IHByY21fbW9kLCB1OCBpZGxlc3RfaWQsIHU4IGlkbGVzdF9zaGlmdCkKK3N0YXRpYyBpbnQgb21hcDN4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkodTggcGFydCwgczE2IHByY21fbW9kLCB1MTYgaWRsZXN0X2lkLAorCQkJCQkgdTggaWRsZXN0X3NoaWZ0KQogewogCWludCBlbmEgPSAwLCBpID0gMDsKIAl1OCBjbV9pZGxlc3RfcmVnOwpAQCAtMTE2LDggKzExOCw5IEBACiAgKiBYWFggVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG5lZWRlZCB1bnRpbCBhYnNvbHV0ZSByZWdpc3RlciBhZGRyZXNzZXMgYXJlCiAgKiByZW1vdmVkIGZyb20gdGhlIE9NQVAgc3RydWN0IGNsayByZWNvcmRzLgogICovCi1pbnQgb21hcDN4eHhfY21fc3BsaXRfaWRsZXN0X3JlZyh2b2lkIF9faW9tZW0gKmlkbGVzdF9yZWcsIHMxNiAqcHJjbV9pbnN0LAotCQkJCSB1OCAqaWRsZXN0X3JlZ19pZCkKK3N0YXRpYyBpbnQgb21hcDN4eHhfY21fc3BsaXRfaWRsZXN0X3JlZyh2b2lkIF9faW9tZW0gKmlkbGVzdF9yZWcsCisJCQkJCXMxNiAqcHJjbV9pbnN0LAorCQkJCQl1OCAqaWRsZXN0X3JlZ19pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnM7CiAJdTggaWRsZXN0X29mZnM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTN4eHguaAppbmRleCA3YTE2YjU1Li43MzRhODU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtM3h4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20zeHh4LmgKQEAgLTY4LDE4ICs2OCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogCi1leHRlcm4gdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOwotZXh0ZXJuIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzayk7Ci1leHRlcm4gdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9mb3JjZV9zbGVlcChzMTYgbW9kdWxlLCB1MzIgbWFzayk7Ci1leHRlcm4gdm9pZCBvbWFwM3h4eF9jbV9jbGtkbV9mb3JjZV93YWtldXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOwotCi1leHRlcm4gYm9vbCBvbWFwM3h4eF9jbV9pc19jbGtkbV9pbl9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzayk7Ci1leHRlcm4gaW50IG9tYXAzeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHMxNiBwcmNtX21vZCwgdTggaWRsZXN0X2lkLAotCQkJCQkgdTggaWRsZXN0X3NoaWZ0KTsKLQotZXh0ZXJuIGludCBvbWFwM3h4eF9jbV9zcGxpdF9pZGxlc3RfcmVnKHZvaWQgX19pb21lbSAqaWRsZXN0X3JlZywKLQkJCQkJczE2ICpwcmNtX2luc3QsIHU4ICppZGxlc3RfcmVnX2lkKTsKLQogZXh0ZXJuIHZvaWQgb21hcDNfY21fc2F2ZV9jb250ZXh0KHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDNfY21fcmVzdG9yZV9jb250ZXh0KHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDNfY21fc2F2ZV9zY3JhdGNocGFkX2NvbnRlbnRzKHUzMiAqcHRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTVjYzdiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogT01BUDQgQ00xLCBDTTIgbW9kdWxlIGxvdy1sZXZlbCBmdW5jdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqIFBhdWwgV2FsbXNsZXkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbmx5IGJ5IHRoZSBjbWluc3Q0NHh4LmMgZmlsZS4KLSAqIFhYWCBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IG1vdmUgdGhlbSB0aGVyZSBhbmQgbWFrZSB0aGVtIHN0YXRpYy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJjbS5oIgotI2luY2x1ZGUgImNtMV80NHh4LmgiCi0jaW5jbHVkZSAiY20yXzQ0eHguaCIKLQotLyogQ00xIGhhcmR3YXJlIG1vZHVsZSBsb3ctbGV2ZWwgZnVuY3Rpb25zICovCi0KLS8qIFJlYWQgYSByZWdpc3RlciBpbiBDTTEgKi8KLXUzMiBvbWFwNF9jbTFfcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IHJlZykKLXsKLQlyZXR1cm4gcmVhZGxfcmVsYXhlZChjbV9iYXNlICsgaW5zdCArIHJlZyk7Ci19Ci0KLS8qIFdyaXRlIGludG8gYSByZWdpc3RlciBpbiBDTTEgKi8KLXZvaWQgb21hcDRfY20xX3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgcmVnKQotewotCXdyaXRlbF9yZWxheGVkKHZhbCwgY21fYmFzZSArIGluc3QgKyByZWcpOwotfQotCi0vKiBSZWFkIGEgcmVnaXN0ZXIgaW4gQ00yICovCi11MzIgb21hcDRfY20yX3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiByZWcpCi17Ci0JcmV0dXJuIHJlYWRsX3JlbGF4ZWQoY20yX2Jhc2UgKyBpbnN0ICsgcmVnKTsKLX0KLQotLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIENNMiAqLwotdm9pZCBvbWFwNF9jbTJfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiByZWcpCi17Ci0Jd3JpdGVsX3JlbGF4ZWQodmFsLCBjbTJfYmFzZSArIGluc3QgKyByZWcpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmgKaW5kZXggMzM4MGJlZS4uNzI4ZDA2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5oCkBAIC0yMyw0ICsyMyw3IEBACiAjZGVmaW5lIE9NQVA0X0NNX0NMS1NUQ1RSTAkJCQkweDAwMDAKICNkZWZpbmUgT01BUDRfQ01fU1RBVElDREVQCQkJCTB4MDAwNAogCit2b2lkIG9tYXBfY21fYmFzZV9pbml0KHZvaWQpOworaW50IG9tYXA0X2NtX2luaXQodm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbV80NHh4XzU0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21fNDR4eF81NHh4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjIxMTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbV80NHh4XzU0eHguaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBPTUFQNDR4eCBhbmQgT01BUDU0eHggQ00xL0NNMiBmdW5jdGlvbiBwcm90b3R5cGVzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogUGF1bCBXYWxtc2xleSAocGF1bEBwd3Nhbi5jb20pCi0gKiBSYWplbmRyYSBOYXlhayAocm5heWFrQHRpLmNvbSkKLSAqIEJlbm9pdCBDb3Vzc29uIChiLWNvdXNzb25AdGkuY29tKQotICoKLSAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBPTUFQIGhhcmR3YXJlIGRhdGFiYXNlcy4KLSAqIFdlIHJlc3BlY3RmdWxseSBhc2sgdGhhdCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZpbGUgYmUgY29vcmRpbmF0ZWQKLSAqIHdpdGggdGhlIHB1YmxpYyBsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZyBtYWlsaW5nIGxpc3QgYW5kIHRoZQotICogYXV0aG9ycyBhYm92ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXV0b2dlbmVyYXRpb24gc2NyaXB0cyBhcmUga2VwdAotICogdXAtdG8tZGF0ZSB3aXRoIHRoZSBmaWxlIGNvbnRlbnRzLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICovCi0KLSNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNXzQ0WFhfNTRYWF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTV80NFhYXzU1WFhfSAotCi0vKiBDTTEgRnVuY3Rpb24gcHJvdG90eXBlcyAqLwotZXh0ZXJuIHUzMiBvbWFwNF9jbTFfcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IGlkeCk7Ci1leHRlcm4gdm9pZCBvbWFwNF9jbTFfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiBpZHgpOwotZXh0ZXJuIHUzMiBvbWFwNF9jbTFfcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IGlkeCk7Ci0KLS8qIENNMiBGdW5jdGlvbiBwcm90b3R5cGVzICovCi1leHRlcm4gdTMyIG9tYXA0X2NtMl9yZWFkX2luc3RfcmVnKHMxNiBpbnN0LCB1MTYgaWR4KTsKLWV4dGVybiB2b2lkIG9tYXA0X2NtMl93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IGlkeCk7Ci1leHRlcm4gdTMyIG9tYXA0X2NtMl9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgaWR4KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtX2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbV9jb21tb24uYwppbmRleCA4ZjZjNDcxLi44ZmUwMmZjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbV9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtX2NvbW1vbi5jCkBAIC03Miw5ICs3MiwxMCBAQAogfQogCiAvKioKLSAqIGNtX3dhaXRfbW9kdWxlX3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gbGVhdmUgaWRsZSBvciBzdGFuZGJ5CisgKiBvbWFwX2NtX3dhaXRfbW9kdWxlX3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gbGVhdmUgaWRsZSBvciBzdGFuZGJ5CisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24KICAqIEBwcmNtX21vZDogUFJDTSBtb2R1bGUgb2Zmc2V0Ci0gKiBAaWRsZXN0X2lkOiBDTV9JRExFU1R4IHJlZ2lzdGVyIElEIChpLmUuLCB4ID0gMSwgMiwgMykKKyAqIEBpZGxlc3RfcmVnOiBDTV9JRExFU1R4IHJlZ2lzdGVyCiAgKiBAaWRsZXN0X3NoaWZ0OiBzaGlmdCBvZiB0aGUgYml0IGluIHRoZSBDTV9JRExFU1QqIHJlZ2lzdGVyIHRvIGNoZWNrCiAgKgogICogV2FpdCBmb3IgdGhlIFBSQ00gdG8gaW5kaWNhdGUgdGhhdCB0aGUgbW9kdWxlIGlkZW50aWZpZWQgYnkKQEAgLTgzLDcgKzg0LDggQEAKICAqIG5vIHBlci1Tb0Mgd2FpdF9tb2R1bGVfcmVhZHkoKSBmdW5jdGlvbiBwb2ludGVyIGhhcyBiZWVuIHJlZ2lzdGVyZWQKICAqIG9yIGlmIHRoZSBpZGxlc3QgcmVnaXN0ZXIgaXMgdW5rbm93biBvbiB0aGUgU29DLgogICovCi1pbnQgY21fd2FpdF9tb2R1bGVfcmVhZHkoczE2IHByY21fbW9kLCB1OCBpZGxlc3RfaWQsIHU4IGlkbGVzdF9zaGlmdCkKK2ludCBvbWFwX2NtX3dhaXRfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHMxNiBwcmNtX21vZCwgdTE2IGlkbGVzdF9yZWcsCisJCQkgICAgICB1OCBpZGxlc3Rfc2hpZnQpCiB7CiAJaWYgKCFjbV9sbF9kYXRhLT53YWl0X21vZHVsZV9yZWFkeSkgewogCQlXQVJOX09OQ0UoMSwgImNtOiAlczogbm8gbG93LWxldmVsIGZ1bmN0aW9uIGRlZmluZWRcbiIsCkBAIC05MSw3ICs5Myw3OSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXR1cm4gY21fbGxfZGF0YS0+d2FpdF9tb2R1bGVfcmVhZHkocHJjbV9tb2QsIGlkbGVzdF9pZCwgaWRsZXN0X3NoaWZ0KTsKKwlyZXR1cm4gY21fbGxfZGF0YS0+d2FpdF9tb2R1bGVfcmVhZHkocGFydCwgcHJjbV9tb2QsIGlkbGVzdF9yZWcsCisJCQkJCSAgICAgaWRsZXN0X3NoaWZ0KTsKK30KKworLyoqCisgKiBvbWFwX2NtX3dhaXRfbW9kdWxlX2lkbGUgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBlbnRlciBpZGxlIG9yIHN0YW5kYnkKKyAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbgorICogQHByY21fbW9kOiBQUkNNIG1vZHVsZSBvZmZzZXQKKyAqIEBpZGxlc3RfcmVnOiBDTV9JRExFU1R4IHJlZ2lzdGVyCisgKiBAaWRsZXN0X3NoaWZ0OiBzaGlmdCBvZiB0aGUgYml0IGluIHRoZSBDTV9JRExFU1QqIHJlZ2lzdGVyIHRvIGNoZWNrCisgKgorICogV2FpdCBmb3IgdGhlIFBSQ00gdG8gaW5kaWNhdGUgdGhhdCB0aGUgbW9kdWxlIGlkZW50aWZpZWQgYnkKKyAqIChAcHJjbV9tb2QsIEBpZGxlc3RfaWQsIEBpZGxlc3Rfc2hpZnQpIGlzIG5vIGxvbmdlciBjbG9ja2VkLiAgUmV0dXJuCisgKiAwIHVwb24gc3VjY2VzcywgLUVCVVNZIGlmIHRoZSBtb2R1bGUgZG9lc24ndCBlbmFibGUgaW4gdGltZSwgb3IKKyAqIC1FSU5WQUwgaWYgbm8gcGVyLVNvQyB3YWl0X21vZHVsZV9pZGxlKCkgZnVuY3Rpb24gcG9pbnRlciBoYXMgYmVlbgorICogcmVnaXN0ZXJlZCBvciBpZiB0aGUgaWRsZXN0IHJlZ2lzdGVyIGlzIHVua25vd24gb24gdGhlIFNvQy4KKyAqLworaW50IG9tYXBfY21fd2FpdF9tb2R1bGVfaWRsZSh1OCBwYXJ0LCBzMTYgcHJjbV9tb2QsIHUxNiBpZGxlc3RfcmVnLAorCQkJICAgICB1OCBpZGxlc3Rfc2hpZnQpCit7CisJaWYgKCFjbV9sbF9kYXRhLT53YWl0X21vZHVsZV9pZGxlKSB7CisJCVdBUk5fT05DRSgxLCAiY206ICVzOiBubyBsb3ctbGV2ZWwgZnVuY3Rpb24gZGVmaW5lZFxuIiwKKwkJCSAgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gY21fbGxfZGF0YS0+d2FpdF9tb2R1bGVfaWRsZShwYXJ0LCBwcmNtX21vZCwgaWRsZXN0X3JlZywKKwkJCQkJICAgIGlkbGVzdF9zaGlmdCk7Cit9CisKKy8qKgorICogb21hcF9jbV9tb2R1bGVfZW5hYmxlIC0gZW5hYmxlIGEgbW9kdWxlCisgKiBAbW9kZTogdGFyZ2V0IG1vZGUgZm9yIHRoZSBtb2R1bGUKKyAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbgorICogQGluc3Q6IFBSQ00gaW5zdGFuY2UKKyAqIEBjbGtjdHJsX29mZnM6IENNX0NMS0NUUkwgcmVnaXN0ZXIgb2Zmc2V0IGZvciB0aGUgbW9kdWxlCisgKgorICogRW5hYmxlcyBjbG9ja3MgZm9yIGEgbW9kdWxlIGlkZW50aWZpZWQgYnkgKEBwYXJ0LCBAaW5zdCwgQGNsa2N0cmxfb2ZmcykKKyAqIG1ha2luZyBpdHMgSU8gc3BhY2UgYWNjZXNzaWJsZS4gUmV0dXJuIDAgdXBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIG5vCisgKiBwZXItU29DIG1vZHVsZV9lbmFibGUoKSBmdW5jdGlvbiBwb2ludGVyIGhhcyBiZWVuIHJlZ2lzdGVyZWQuCisgKi8KK2ludCBvbWFwX2NtX21vZHVsZV9lbmFibGUodTggbW9kZSwgdTggcGFydCwgdTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpCit7CisJaWYgKCFjbV9sbF9kYXRhLT5tb2R1bGVfZW5hYmxlKSB7CisJCVdBUk5fT05DRSgxLCAiY206ICVzOiBubyBsb3ctbGV2ZWwgZnVuY3Rpb24gZGVmaW5lZFxuIiwKKwkJCSAgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljbV9sbF9kYXRhLT5tb2R1bGVfZW5hYmxlKG1vZGUsIHBhcnQsIGluc3QsIGNsa2N0cmxfb2Zmcyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb21hcF9jbV9tb2R1bGVfZGlzYWJsZSAtIGRpc2FibGUgYSBtb2R1bGUKKyAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbgorICogQGluc3Q6IFBSQ00gaW5zdGFuY2UKKyAqIEBjbGtjdHJsX29mZnM6IENNX0NMS0NUUkwgcmVnaXN0ZXIgb2Zmc2V0IGZvciB0aGUgbW9kdWxlCisgKgorICogRGlzYWJsZXMgY2xvY2tzIGZvciBhIG1vZHVsZSBpZGVudGlmaWVkIGJ5IChAcGFydCwgQGluc3QsIEBjbGtjdHJsX29mZnMpCisgKiBtYWtpbmdzIGl0cyBJTyBzcGFjZSBpbmFjY2Vzc2libGUuIFJldHVybiAwIHVwb24gc3VjY2VzcywgLUVJTlZBTCBpZgorICogbm8gcGVyLVNvQyBtb2R1bGVfZGlzYWJsZSgpIGZ1bmN0aW9uIHBvaW50ZXIgaGFzIGJlZW4gcmVnaXN0ZXJlZC4KKyAqLworaW50IG9tYXBfY21fbW9kdWxlX2Rpc2FibGUodTggcGFydCwgdTE2IGluc3QsIHUxNiBjbGtjdHJsX29mZnMpCit7CisJaWYgKCFjbV9sbF9kYXRhLT5tb2R1bGVfZGlzYWJsZSkgeworCQlXQVJOX09OQ0UoMSwgImNtOiAlczogbm8gbG93LWxldmVsIGZ1bmN0aW9uIGRlZmluZWRcbiIsCisJCQkgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY21fbGxfZGF0YS0+bW9kdWxlX2Rpc2FibGUocGFydCwgaW5zdCwgY2xrY3RybF9vZmZzKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5jCmluZGV4IDEyYWNhNTYuLjk1YThjZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY20xXzQ0eHguaCIKICNpbmNsdWRlICJjbTJfNDR4eC5oIgogI2luY2x1ZGUgImNtNDR4eC5oIgotI2luY2x1ZGUgImNtaW5zdDQ0eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKICNpbmNsdWRlICJwcmNtNDR4eC5oIgogI2luY2x1ZGUgInBybTQ0eHguaCIKQEAgLTc0LDE3ICs3MywxOCBAQAogCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLwogCitzdGF0aWMgdTMyIG9tYXA0X2NtaW5zdF9yZWFkX2luc3RfcmVnKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgaWR4KTsKKwogLyoqCiAgKiBfY2xrY3RybF9pZGxlc3QgLSByZWFkIGEgQ01fKl9DTEtDVFJMIHJlZ2lzdGVyOyBtYXNrICYgc2hpZnQgSURMRVNUIGJpdGZpZWxkCiAgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24gSUQgdGhhdCB0aGUgQ01fQ0xLQ1RSTCByZWdpc3RlciBleGlzdHMgaW4KICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKICAqCiAgKiBSZXR1cm4gdGhlIElETEVTVCBiaXRmaWVsZCBvZiBhIENNXypfQ0xLQ1RSTCByZWdpc3Rlciwgc2hpZnRlZCBkb3duIHRvCiAgKiBiaXQgMC4KICAqLwotc3RhdGljIHUzMiBfY2xrY3RybF9pZGxlc3QodTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgdTMyIF9jbGtjdHJsX2lkbGVzdCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcykKIHsKIAl1MzIgdiA9IG9tYXA0X2NtaW5zdF9yZWFkX2luc3RfcmVnKHBhcnQsIGluc3QsIGNsa2N0cmxfb2Zmcyk7CiAJdiAmPSBPTUFQNDQzMF9JRExFU1RfTUFTSzsKQEAgLTk2LDI2ICs5NiwyMyBAQAogICogX2lzX21vZHVsZV9yZWFkeSAtIGNhbiBtb2R1bGUgcmVnaXN0ZXJzIGJlIGFjY2Vzc2VkIHdpdGhvdXQgY2F1c2luZyBhbiBhYm9ydD8KICAqIEBwYXJ0OiBQUkNNIHBhcnRpdGlvbiBJRCB0aGF0IHRoZSBDTV9DTEtDVFJMIHJlZ2lzdGVyIGV4aXN0cyBpbgogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQotICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKICAqIEBjbGtjdHJsX29mZnM6IE1vZHVsZSBjbG9jayBjb250cm9sIHJlZ2lzdGVyIG9mZnNldCAoKl9DTEtDVFJMIG1hY3JvKQogICoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kdWxlJ3MgQ01fKl9DTEtDVFJMLklETEVTVCBiaXRmaWVsZCBpcyBlaXRoZXIKICAqICpGVU5DVElPTkFMIG9yICpJTlRFUkZBQ0VfSURMRTsgZmFsc2Ugb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgYm9vbCBfaXNfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIGJvb2wgX2lzX21vZHVsZV9yZWFkeSh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNsa2N0cmxfb2ZmcykKIHsKIAl1MzIgdjsKIAotCXYgPSBfY2xrY3RybF9pZGxlc3QocGFydCwgaW5zdCwgY2RvZmZzLCBjbGtjdHJsX29mZnMpOworCXYgPSBfY2xrY3RybF9pZGxlc3QocGFydCwgaW5zdCwgY2xrY3RybF9vZmZzKTsKIAogCXJldHVybiAodiA9PSBDTEtDVFJMX0lETEVTVF9GVU5DVElPTkFMIHx8CiAJCXYgPT0gQ0xLQ1RSTF9JRExFU1RfSU5URVJGQUNFX0lETEUpID8gdHJ1ZSA6IGZhbHNlOwogfQogCi0vKiBQdWJsaWMgZnVuY3Rpb25zICovCi0KIC8qIFJlYWQgYSByZWdpc3RlciBpbiBhIENNIGluc3RhbmNlICovCi11MzIgb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWcodTggcGFydCwgdTE2IGluc3QsIHUxNiBpZHgpCitzdGF0aWMgdTMyIG9tYXA0X2NtaW5zdF9yZWFkX2luc3RfcmVnKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgaWR4KQogewogCUJVR19PTihwYXJ0ID49IE9NQVA0X01BWF9QUkNNX1BBUlRJVElPTlMgfHwKIAkgICAgICAgcGFydCA9PSBPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OIHx8CkBAIC0xMjQsNyArMTIxLDcgQEAKIH0KIAogLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIGEgQ00gaW5zdGFuY2UgKi8KLXZvaWQgb21hcDRfY21pbnN0X3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgaWR4KQorc3RhdGljIHZvaWQgb21hcDRfY21pbnN0X3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgaWR4KQogewogCUJVR19PTihwYXJ0ID49IE9NQVA0X01BWF9QUkNNX1BBUlRJVElPTlMgfHwKIAkgICAgICAgcGFydCA9PSBPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OIHx8CkBAIC0xMzMsOCArMTMwLDggQEAKIH0KIAogLyogUmVhZC1tb2RpZnktd3JpdGUgYSByZWdpc3RlciBpbiBDTTEuIENhbGxlciBtdXN0IGxvY2sgKi8KLXUzMiBvbWFwNF9jbWluc3Rfcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCB1OCBwYXJ0LCB1MTYgaW5zdCwKLQkJCQkgICBzMTYgaWR4KQorc3RhdGljIHUzMiBvbWFwNF9jbWluc3Rfcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCB1OCBwYXJ0LCB1MTYgaW5zdCwKKwkJCQkJICBzMTYgaWR4KQogewogCXUzMiB2OwogCkBAIC0xNDYsMTcgKzE0MywxOCBAQAogCXJldHVybiB2OwogfQogCi11MzIgb21hcDRfY21pbnN0X3NldF9pbnN0X3JlZ19iaXRzKHUzMiBiaXRzLCB1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGlkeCkKK3N0YXRpYyB1MzIgb21hcDRfY21pbnN0X3NldF9pbnN0X3JlZ19iaXRzKHUzMiBiaXRzLCB1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGlkeCkKIHsKIAlyZXR1cm4gb21hcDRfY21pbnN0X3Jtd19pbnN0X3JlZ19iaXRzKGJpdHMsIGJpdHMsIHBhcnQsIGluc3QsIGlkeCk7CiB9CiAKLXUzMiBvbWFwNF9jbWluc3RfY2xlYXJfaW5zdF9yZWdfYml0cyh1MzIgYml0cywgdTggcGFydCwgdTE2IGluc3QsIHMxNiBpZHgpCitzdGF0aWMgdTMyIG9tYXA0X2NtaW5zdF9jbGVhcl9pbnN0X3JlZ19iaXRzKHUzMiBiaXRzLCB1OCBwYXJ0LCB1MTYgaW5zdCwKKwkJCQkJICAgIHMxNiBpZHgpCiB7CiAJcmV0dXJuIG9tYXA0X2NtaW5zdF9ybXdfaW5zdF9yZWdfYml0cyhiaXRzLCAweDAsIHBhcnQsIGluc3QsIGlkeCk7CiB9CiAKLXUzMiBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZ19iaXRzKHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgaWR4LCB1MzIgbWFzaykKK3N0YXRpYyB1MzIgb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWdfYml0cyh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGlkeCwgdTMyIG1hc2spCiB7CiAJdTMyIHY7CiAKQEAgLTIwMCw3ICsxOTgsNyBAQAogICogUmV0dXJucyB0cnVlIGlmIHRoZSBjbG9ja2RvbWFpbiByZWZlcnJlZCB0byBieSAoQHBhcnQsIEBpbnN0LCBAY2RvZmZzKQogICogaXMgaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUsIG9yIDAgb3RoZXJ3aXNlLgogICovCi1ib29sIG9tYXA0X2NtaW5zdF9pc19jbGtkbV9pbl9od3N1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2ZmcykKK3N0YXRpYyBib29sIG9tYXA0X2NtaW5zdF9pc19jbGtkbV9pbl9od3N1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2ZmcykKIHsKIAl1MzIgdjsKIApAQCAtMjIwLDcgKzIxOCw3IEBACiAgKiBQdXQgYSBjbG9ja2RvbWFpbiByZWZlcnJlZCB0byBieSAoQHBhcnQsIEBpbnN0LCBAY2RvZmZzKSBpbnRvCiAgKiBoYXJkd2FyZS1zdXBlcnZpc2VkIGlkbGUgbW9kZS4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZW5hYmxlX2h3c3VwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKQorc3RhdGljIHZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2VuYWJsZV9od3N1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2ZmcykKIHsKIAlfY2xrdHJjdHJsX3dyaXRlKE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTywgcGFydCwgaW5zdCwgY2RvZmZzKTsKIH0KQEAgLTIzNSw3ICsyMzMsNyBAQAogICogc29mdHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUsIGkuZS4sIGNvbnRyb2xsZWQgbWFudWFsbHkgYnkgdGhlCiAgKiBMaW51eCBPTUFQIGNsb2NrZG9tYWluIGNvZGUuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2Rpc2FibGVfaHdzdXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpCitzdGF0aWMgdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZGlzYWJsZV9od3N1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2ZmcykKIHsKIAlfY2xrdHJjdHJsX3dyaXRlKE9NQVAzNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8sIHBhcnQsIGluc3QsIGNkb2Zmcyk7CiB9CkBAIC0yNDksNyArMjQ3LDcgQEAKICAqIFRha2UgYSBjbG9ja2RvbWFpbiByZWZlcnJlZCB0byBieSAoQHBhcnQsIEBpbnN0LCBAY2RvZmZzKSBvdXQgb2YgaWRsZSwKICAqIHdha2luZyBpdCB1cC4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfd2FrZXVwKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2RvZmZzKQorc3RhdGljIHZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2ZvcmNlX3dha2V1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2ZmcykKIHsKIAlfY2xrdHJjdHJsX3dyaXRlKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9XQUtFVVAsIHBhcnQsIGluc3QsIGNkb2Zmcyk7CiB9CkBAIC0yNTgsNyArMjU2LDcgQEAKICAqCiAgKi8KIAotdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfc2xlZXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpCitzdGF0aWMgdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfc2xlZXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpCiB7CiAJX2Nsa3RyY3RybF93cml0ZShPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfU0xFRVAsIHBhcnQsIGluc3QsIGNkb2Zmcyk7CiB9CkBAIC0yNjcsMjMgKzI2NSwyMyBAQAogICogb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gYmUgaW4gJ2Z1bmMnIHN0YXRlCiAgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24gSUQgdGhhdCB0aGUgQ01fQ0xLQ1RSTCByZWdpc3RlciBleGlzdHMgaW4KICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKKyAqIEBiaXRfc2hpZnQ6IGJpdCBzaGlmdCBmb3IgdGhlIHJlZ2lzdGVyLCBpZ25vcmVkIGZvciBPTUFQNCsKICAqCiAgKiBXYWl0IGZvciB0aGUgbW9kdWxlIElETEVTVCB0byBiZSBmdW5jdGlvbmFsLiBJZiB0aGUgaWRsZSBzdGF0ZSBpcyBpbiBhbnkKICAqIHRoZSBub24gZnVuY3Rpb25hbCBzdGF0ZSAodHJhbnMsIGlkbGUgb3IgZGlzYWJsZWQpLCBtb2R1bGUgYW5kIHRodXMgdGhlCiAgKiBzeXNjb25maWcgY2Fubm90IGJlIGFjY2Vzc2VkIGFuZCB3aWxsIHByb2JhYmx5IGxlYWQgdG8gYW4gImltcHJlY2lzZQogICogZXh0ZXJuYWwgYWJvcnQiCiAgKi8KLWludCBvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfcmVhZHkodTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJICAgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyBpbnQgb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX3JlYWR5KHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzLAorCQkJCQkgIHU4IGJpdF9zaGlmdCkKIHsKIAlpbnQgaSA9IDA7CiAKIAlpZiAoIWNsa2N0cmxfb2ZmcykKIAkJcmV0dXJuIDA7CiAKLQlvbWFwX3Rlc3RfdGltZW91dChfaXNfbW9kdWxlX3JlYWR5KHBhcnQsIGluc3QsIGNkb2ZmcywgY2xrY3RybF9vZmZzKSwKKwlvbWFwX3Rlc3RfdGltZW91dChfaXNfbW9kdWxlX3JlYWR5KHBhcnQsIGluc3QsIGNsa2N0cmxfb2ZmcyksCiAJCQkgIE1BWF9NT0RVTEVfUkVBRFlfVElNRSwgaSk7CiAKIAlyZXR1cm4gKGkgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpID8gMCA6IC1FQlVTWTsKQEAgLTI5NCwyMSArMjkyLDIyIEBACiAgKiBzdGF0ZQogICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uIElEIHRoYXQgdGhlIENNX0NMS0NUUkwgcmVnaXN0ZXIgZXhpc3RzIGluCiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCi0gKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQogICogQGNsa2N0cmxfb2ZmczogTW9kdWxlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0ICgqX0NMS0NUUkwgbWFjcm8pCisgKiBAYml0X3NoaWZ0OiBCaXQgc2hpZnQgZm9yIHRoZSByZWdpc3RlciwgaWdub3JlZCBmb3IgT01BUDQrCiAgKgogICogV2FpdCBmb3IgdGhlIG1vZHVsZSBJRExFU1QgdG8gYmUgZGlzYWJsZWQuIFNvbWUgUFJDTSB0cmFuc2l0aW9uLAogICogbGlrZSByZXNldCBhc3NlcnRpb24gb3IgcGFyZW50IGNsb2NrIGRlLWFjdGl2YXRpb24gbXVzdCB3YWl0IHRoZQogICogbW9kdWxlIHRvIGJlIGZ1bGx5IGRpc2FibGVkLgogICovCi1pbnQgb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX2lkbGUodTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsIHUxNiBjbGtjdHJsX29mZnMpCitzdGF0aWMgaW50IG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9pZGxlKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzLAorCQkJCQkgdTggYml0X3NoaWZ0KQogewogCWludCBpID0gMDsKIAogCWlmICghY2xrY3RybF9vZmZzKQogCQlyZXR1cm4gMDsKIAotCW9tYXBfdGVzdF90aW1lb3V0KChfY2xrY3RybF9pZGxlc3QocGFydCwgaW5zdCwgY2RvZmZzLCBjbGtjdHJsX29mZnMpID09CisJb21hcF90ZXN0X3RpbWVvdXQoKF9jbGtjdHJsX2lkbGVzdChwYXJ0LCBpbnN0LCBjbGtjdHJsX29mZnMpID09CiAJCQkgICBDTEtDVFJMX0lETEVTVF9ESVNBQkxFRCksCiAJCQkgIE1BWF9NT0RVTEVfRElTQUJMRV9USU1FLCBpKTsKIApAQCAtMzIwLDEzICszMTksMTIgQEAKICAqIEBtb2RlOiBNb2R1bGUgbW9kZSAoU1cgb3IgSFcpCiAgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24gSUQgdGhhdCB0aGUgQ01fQ0xLQ1RSTCByZWdpc3RlciBleGlzdHMgaW4KICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKICAqCiAgKiBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDRfY21pbnN0X21vZHVsZV9lbmFibGUodTggbW9kZSwgdTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkgICAgdTE2IGNsa2N0cmxfb2ZmcykKK3N0YXRpYyB2b2lkIG9tYXA0X2NtaW5zdF9tb2R1bGVfZW5hYmxlKHU4IG1vZGUsIHU4IHBhcnQsIHUxNiBpbnN0LAorCQkJCSAgICAgICB1MTYgY2xrY3RybF9vZmZzKQogewogCXUzMiB2OwogCkBAIC0zNDAsMTMgKzMzOCwxMSBAQAogICogb21hcDRfY21pbnN0X21vZHVsZV9kaXNhYmxlIC0gRGlzYWJsZSB0aGUgbW9kdWxlIGluc2lkZSBDTEtDVFJMCiAgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24gSUQgdGhhdCB0aGUgQ01fQ0xLQ1RSTCByZWdpc3RlciBleGlzdHMgaW4KICAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKLSAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCiAgKiBAY2xrY3RybF9vZmZzOiBNb2R1bGUgY2xvY2sgY29udHJvbCByZWdpc3RlciBvZmZzZXQgKCpfQ0xLQ1RSTCBtYWNybykKICAqCiAgKiBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDRfY21pbnN0X21vZHVsZV9kaXNhYmxlKHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJICAgICB1MTYgY2xrY3RybF9vZmZzKQorc3RhdGljIHZvaWQgb21hcDRfY21pbnN0X21vZHVsZV9kaXNhYmxlKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgY2xrY3RybF9vZmZzKQogewogCXUzMiB2OwogCkBAIC01MTAsMyArNTA2LDIxIEBACiAJLmNsa2RtX2Nsa19lbmFibGUJPSBvbWFwNF9jbGtkbV9jbGtfZW5hYmxlLAogCS5jbGtkbV9jbGtfZGlzYWJsZQk9IG9tYXA0X2Nsa2RtX2Nsa19kaXNhYmxlLAogfTsKKworc3RhdGljIHN0cnVjdCBjbV9sbF9kYXRhIG9tYXA0eHh4X2NtX2xsX2RhdGEgPSB7CisJLndhaXRfbW9kdWxlX3JlYWR5CT0gJm9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9yZWFkeSwKKwkud2FpdF9tb2R1bGVfaWRsZQk9ICZvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfaWRsZSwKKwkubW9kdWxlX2VuYWJsZQkJPSAmb21hcDRfY21pbnN0X21vZHVsZV9lbmFibGUsCisJLm1vZHVsZV9kaXNhYmxlCQk9ICZvbWFwNF9jbWluc3RfbW9kdWxlX2Rpc2FibGUsCit9OworCitpbnQgX19pbml0IG9tYXA0X2NtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY21fcmVnaXN0ZXIoJm9tYXA0eHh4X2NtX2xsX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb21hcDRfY21fZXhpdCh2b2lkKQoreworCWNtX3VucmVnaXN0ZXIoJm9tYXA0eHh4X2NtX2xsX2RhdGEpOworfQorX19leGl0Y2FsbChvbWFwNF9jbV9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNTZlYTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogT01BUDQgQ2xvY2sgTWFuYWdlbWVudCAoQ00pIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqIFBhdWwgV2FsbXNsZXkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0jaWZuZGVmIF9fQVJDSF9BU01fTUFDSF9PTUFQMl9DTUlOU1Q0NFhYX0gKLSNkZWZpbmUgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNSU5TVDQ0WFhfSAotCi1ib29sIG9tYXA0X2NtaW5zdF9pc19jbGtkbV9pbl9od3N1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2Zmcyk7Ci12b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9lbmFibGVfaHdzdXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpOwotdm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZGlzYWJsZV9od3N1cCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2Zmcyk7Ci12b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9mb3JjZV9zbGVlcCh1OCBwYXJ0LCB1MTYgaW5zdCwgdTE2IGNkb2Zmcyk7Ci12b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9mb3JjZV93YWtldXAodTggcGFydCwgdTE2IGluc3QsIHUxNiBjZG9mZnMpOwotZXh0ZXJuIGludCBvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfcmVhZHkodTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsIHUxNiBjbGtjdHJsX29mZnMpOwotZXh0ZXJuIGludCBvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfaWRsZSh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywKLQkJCQkJIHUxNiBjbGtjdHJsX29mZnMpOwotZXh0ZXJuIHZvaWQgb21hcDRfY21pbnN0X21vZHVsZV9lbmFibGUodTggbW9kZSwgdTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsCi0JCQkJICAgICAgIHUxNiBjbGtjdHJsX29mZnMpOwotZXh0ZXJuIHZvaWQgb21hcDRfY21pbnN0X21vZHVsZV9kaXNhYmxlKHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLAotCQkJCQl1MTYgY2xrY3RybF9vZmZzKTsKLS8qCi0gKiBJbiBhbiBpZGVhbCB3b3JsZCwgd2Ugd291bGQgbm90IGV4cG9ydCB0aGVzZSBsb3ctbGV2ZWwgZnVuY3Rpb25zLAotICogYnV0IHRoaXMgd2lsbCBwcm9iYWJseSB0YWtlIHNvbWUgdGltZSB0byBmaXggcHJvcGVybHkKLSAqLwotdTMyIG9tYXA0X2NtaW5zdF9yZWFkX2luc3RfcmVnKHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgaWR4KTsKLXZvaWQgb21hcDRfY21pbnN0X3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHU4IHBhcnQsIHUxNiBpbnN0LCB1MTYgaWR4KTsKLXUzMiBvbWFwNF9jbWluc3Rfcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCB1OCBwYXJ0LAotCQkJCSAgIHUxNiBpbnN0LCBzMTYgaWR4KTsKLXUzMiBvbWFwNF9jbWluc3Rfc2V0X2luc3RfcmVnX2JpdHModTMyIGJpdHMsIHU4IHBhcnQsIHUxNiBpbnN0LAotCQkJCSAgIHMxNiBpZHgpOwotdTMyIG9tYXA0X2NtaW5zdF9jbGVhcl9pbnN0X3JlZ19iaXRzKHUzMiBiaXRzLCB1OCBwYXJ0LCB1MTYgaW5zdCwKLQkJCQkgICAgIHMxNiBpZHgpOwotZXh0ZXJuIHUzMiBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZ19iaXRzKHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgaWR4LAotCQkJCQkgICB1MzIgbWFzayk7Ci0KLWV4dGVybiB2b2lkIG9tYXBfY21fYmFzZV9pbml0KHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTM0eHguYwppbmRleCBlMTg3MDlkLi5hYTdiMzc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jcHVpZGxlMzR4eC5jCkBAIC0yNjUsNyArMjY1LDYgQEAKIAkJCS5lbnRlcgkJICA9IG9tYXAzX2VudGVyX2lkbGVfYm0sCiAJCQkuZXhpdF9sYXRlbmN5CSAgPSAyICsgMiwKIAkJCS50YXJnZXRfcmVzaWRlbmN5ID0gNSwKLQkJCS5mbGFncwkJICA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkJLm5hbWUJCSAgPSAiQzEiLAogCQkJLmRlc2MJCSAgPSAiTVBVIE9OICsgQ09SRSBPTiIsCiAJCX0sCkBAIC0yNzMsNyArMjcyLDYgQEAKIAkJCS5lbnRlcgkJICA9IG9tYXAzX2VudGVyX2lkbGVfYm0sCiAJCQkuZXhpdF9sYXRlbmN5CSAgPSAxMCArIDEwLAogCQkJLnRhcmdldF9yZXNpZGVuY3kgPSAzMCwKLQkJCS5mbGFncwkJICA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkJLm5hbWUJCSAgPSAiQzIiLAogCQkJLmRlc2MJCSAgPSAiTVBVIE9OICsgQ09SRSBPTiIsCiAJCX0sCkBAIC0yODEsNyArMjc5LDYgQEAKIAkJCS5lbnRlcgkJICA9IG9tYXAzX2VudGVyX2lkbGVfYm0sCiAJCQkuZXhpdF9sYXRlbmN5CSAgPSA1MCArIDUwLAogCQkJLnRhcmdldF9yZXNpZGVuY3kgPSAzMDAsCi0JCQkuZmxhZ3MJCSAgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKIAkJCS5uYW1lCQkgID0gIkMzIiwKIAkJCS5kZXNjCQkgID0gIk1QVSBSRVQgKyBDT1JFIE9OIiwKIAkJfSwKQEAgLTI4OSw3ICsyODYsNiBAQAogCQkJLmVudGVyCQkgID0gb21hcDNfZW50ZXJfaWRsZV9ibSwKIAkJCS5leGl0X2xhdGVuY3kJICA9IDE1MDAgKyAxODAwLAogCQkJLnRhcmdldF9yZXNpZGVuY3kgPSA0MDAwLAotCQkJLmZsYWdzCQkgID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCiAJCQkubmFtZQkJICA9ICJDNCIsCiAJCQkuZGVzYwkJICA9ICJNUFUgT0ZGICsgQ09SRSBPTiIsCiAJCX0sCkBAIC0yOTcsNyArMjkzLDYgQEAKIAkJCS5lbnRlcgkJICA9IG9tYXAzX2VudGVyX2lkbGVfYm0sCiAJCQkuZXhpdF9sYXRlbmN5CSAgPSAyNTAwICsgNzUwMCwKIAkJCS50YXJnZXRfcmVzaWRlbmN5ID0gMTIwMDAsCi0JCQkuZmxhZ3MJCSAgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKIAkJCS5uYW1lCQkgID0gIkM1IiwKIAkJCS5kZXNjCQkgID0gIk1QVSBSRVQgKyBDT1JFIFJFVCIsCiAJCX0sCkBAIC0zMDUsNyArMzAwLDYgQEAKIAkJCS5lbnRlcgkJICA9IG9tYXAzX2VudGVyX2lkbGVfYm0sCiAJCQkuZXhpdF9sYXRlbmN5CSAgPSAzMDAwICsgODUwMCwKIAkJCS50YXJnZXRfcmVzaWRlbmN5ID0gMTUwMDAsCi0JCQkuZmxhZ3MJCSAgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKIAkJCS5uYW1lCQkgID0gIkM2IiwKIAkJCS5kZXNjCQkgID0gIk1QVSBPRkYgKyBDT1JFIFJFVCIsCiAJCX0sCkBAIC0zMTMsNyArMzA3LDYgQEAKIAkJCS5lbnRlcgkJICA9IG9tYXAzX2VudGVyX2lkbGVfYm0sCiAJCQkuZXhpdF9sYXRlbmN5CSAgPSAxMDAwMCArIDMwMDAwLAogCQkJLnRhcmdldF9yZXNpZGVuY3kgPSAzMDAwMCwKLQkJCS5mbGFncwkJICA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkJLm5hbWUJCSAgPSAiQzciLAogCQkJLmRlc2MJCSAgPSAiTVBVIE9GRiArIENPUkUgT0ZGIiwKIAkJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTQ0eHguYwppbmRleCAyNDk4YWIwLi4wMWUzOThhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGU0NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jcHVpZGxlNDR4eC5jCkBAIC0xOTYsNyArMTk2LDYgQEAKIAkJCS8qIEMxIC0gQ1BVMCBPTiArIENQVTEgT04gKyBNUFUgT04gKi8KIAkJCS5leGl0X2xhdGVuY3kgPSAyICsgMiwKIAkJCS50YXJnZXRfcmVzaWRlbmN5ID0gNSwKLQkJCS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkJLmVudGVyID0gb21hcF9lbnRlcl9pZGxlX3NpbXBsZSwKIAkJCS5uYW1lID0gIkMxIiwKIAkJCS5kZXNjID0gIkNQVXggT04sIE1QVVNTIE9OIgpAQCAtMjA1LDcgKzIwNCw3IEBACiAJCQkvKiBDMiAtIENQVTAgT0ZGICsgQ1BVMSBPRkYgKyBNUFUgQ1NXUiAqLwogCQkJLmV4aXRfbGF0ZW5jeSA9IDMyOCArIDQ0MCwKIAkJCS50YXJnZXRfcmVzaWRlbmN5ID0gOTYwLAotCQkJLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfQ09VUExFRCwKKwkJCS5mbGFncyA9IENQVUlETEVfRkxBR19DT1VQTEVELAogCQkJLmVudGVyID0gb21hcF9lbnRlcl9pZGxlX2NvdXBsZWQsCiAJCQkubmFtZSA9ICJDMiIsCiAJCQkuZGVzYyA9ICJDUFV4IE9GRiwgTVBVU1MgQ1NXUiIsCkBAIC0yMTQsNyArMjEzLDcgQEAKIAkJCS8qIEMzIC0gQ1BVMCBPRkYgKyBDUFUxIE9GRiArIE1QVSBPU1dSICovCiAJCQkuZXhpdF9sYXRlbmN5ID0gNDYwICsgNTE4LAogCQkJLnRhcmdldF9yZXNpZGVuY3kgPSAxMTAwLAotCQkJLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfQ09VUExFRCwKKwkJCS5mbGFncyA9IENQVUlETEVfRkxBR19DT1VQTEVELAogCQkJLmVudGVyID0gb21hcF9lbnRlcl9pZGxlX2NvdXBsZWQsCiAJCQkubmFtZSA9ICJDMyIsCiAJCQkuZGVzYyA9ICJDUFV4IE9GRiwgTVBVU1MgT1NXUiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCmluZGV4IDMyNGYwMmIuLmE3YmM0Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCkBAIC00OSw3ICs0OSw3IEBACiAJICogVG8gYXZvaWQgY29kZSBydW5uaW5nIG9uIG90aGVyIE9NQVBzIGluCiAJICogbXVsdGktb21hcCBidWlsZHMKIAkgKi8KLQlpZiAoIShjcHVfaXNfb21hcDM0eHgoKSkpCisJaWYgKCEoY3B1X2lzX29tYXAzNHh4KCkpIHx8IG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc25wcmludGYob2hfbmFtZSwgTDNfTU9EVUxFU19NQVhfTEVOLCAibDNfbWFpbiIpOwpAQCAtNjcsNDAgKzY3LDYgQEAKIH0KIG9tYXBfcG9zdGNvcmVfaW5pdGNhbGwob21hcDNfbDNfaW5pdCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IG9tYXA0X2wzX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgb21hcF9od21vZCAqb2hbM107Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQljaGFyIG9oX25hbWVbTDNfTU9EVUxFU19NQVhfTEVOXTsKLQotCS8qIElmIGR0YiBpcyB0aGVyZSwgdGhlIGRldmljZXMgd2lsbCBiZSBjcmVhdGVkIGR5bmFtaWNhbGx5ICovCi0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyoKLQkgKiBUbyBhdm9pZCBjb2RlIHJ1bm5pbmcgb24gb3RoZXIgT01BUHMgaW4KLQkgKiBtdWx0aS1vbWFwIGJ1aWxkcwotCSAqLwotCWlmICghY3B1X2lzX29tYXA0NHh4KCkgJiYgIXNvY19pc19vbWFwNTR4eCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWZvciAoaSA9IDA7IGkgPCBMM19NT0RVTEVTOyBpKyspIHsKLQkJc25wcmludGYob2hfbmFtZSwgTDNfTU9EVUxFU19NQVhfTEVOLCAibDNfbWFpbl8lZCIsIGkrMSk7Ci0KLQkJb2hbaV0gPSBvbWFwX2h3bW9kX2xvb2t1cChvaF9uYW1lKTsKLQkJaWYgKCEob2hbaV0pKQotCQkJcHJfZXJyKCJjb3VsZCBub3QgbG9vayB1cCAlc1xuIiwgb2hfbmFtZSk7Ci0JfQotCi0JcGRldiA9IG9tYXBfZGV2aWNlX2J1aWxkX3NzKCJvbWFwX2wzX25vYyIsIDAsIG9oLCAzLCBOVUxMLCAwKTsKLQotCVdBUk4oSVNfRVJSKHBkZXYpLCAiY291bGQgbm90IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlc1xuIiwgb2hfbmFtZSk7Ci0KLQlyZXR1cm4gUFRSX1JFVChwZGV2KTsKLX0KLW9tYXBfcG9zdGNvcmVfaW5pdGNhbGwob21hcDRfbDNfaW5pdCk7Ci0KICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfVklERU9fT01BUDJfTU9EVUxFKQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAyY2FtX3Jlc291cmNlc1tdID0gewpAQCAtNDQ1LDMgKzQxMSwyOSBAQAogCXJldHVybiAwOwogfQogb21hcF9hcmNoX2luaXRjYWxsKG9tYXAyX2luaXRfZGV2aWNlcyk7CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfZ3BtY19pbml0KHZvaWQpCit7CisJc3RydWN0IG9tYXBfaHdtb2QgKm9oOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJY2hhciAqb2hfbmFtZSA9ICJncG1jIjsKKworCS8qCisJICogaWYgdGhlIGJvYXJkIGJvb3RzIHVwIHdpdGggYSBwb3B1bGF0ZWQgRFQsIGRvIG5vdAorCSAqIG1hbnVhbGx5IGFkZCB0aGUgZGV2aWNlIGZyb20gdGhpcyBpbml0Y2FsbAorCSAqLworCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9oID0gb21hcF9od21vZF9sb29rdXAob2hfbmFtZSk7CisJaWYgKCFvaCkgeworCQlwcl9lcnIoIkNvdWxkIG5vdCBsb29rIHVwICVzXG4iLCBvaF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGRldiA9IG9tYXBfZGV2aWNlX2J1aWxkKCJvbWFwLWdwbWMiLCAtMSwgb2gsIE5VTEwsIDApOworCVdBUk4oSVNfRVJSKHBkZXYpLCAiY291bGQgbm90IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlc1xuIiwgb2hfbmFtZSk7CisKKwlyZXR1cm4gUFRSX1JFVChwZGV2KTsKK30KK29tYXBfcG9zdGNvcmVfaW5pdGNhbGwob21hcF9ncG1jX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsM3h4eC5jCmluZGV4IGFjM2Q3ODkuLjIwZTEyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMKQEAgLTQ2MCwyNSArNDYwLDI0IEBACiAvKiBOb24tQ09SRSBEUExMIHJhdGUgc2V0IGNvZGUgKi8KIAogLyoqCi0gKiBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUgLSBzZXQgbm9uLWNvcmUgRFBMTCByYXRlCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKLSAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCisgKiBvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUgLSBkZXRlcm1pbmUgcmF0ZSBmb3IgYSBEUExMCisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGNsb2NrIHRvIGRldGVybWluZSByYXRlIGZvcgorICogQHJhdGU6IHRhcmdldCByYXRlIGZvciB0aGUgRFBMTAorICogQGJlc3RfcGFyZW50X3JhdGU6IHBvaW50ZXIgZm9yIHJldHVybmluZyBiZXN0IHBhcmVudCByYXRlCisgKiBAYmVzdF9wYXJlbnRfY2xrOiBwb2ludGVyIGZvciByZXR1cm5pbmcgYmVzdCBwYXJlbnQgY2xvY2sKICAqCi0gKiBTZXQgdGhlIERQTEwgQ0xLT1VUIHRvIHRoZSB0YXJnZXQgcmF0ZS4gIElmIHRoZSBEUExMIGNhbiBlbnRlcgotICogbG93LXBvd2VyIGJ5cGFzcywgYW5kIHRoZSB0YXJnZXQgcmF0ZSBpcyB0aGUgYnlwYXNzIHNvdXJjZSBjbG9jawotICogcmF0ZSwgdGhlbiBjb25maWd1cmUgdGhlIERQTEwgZm9yIGJ5cGFzcy4gIE90aGVyd2lzZSwgcm91bmQgdGhlCi0gKiB0YXJnZXQgcmF0ZSBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGFscmVhZHksIHRoZW4gcHJvZ3JhbSBhbmQgbG9jawotICogdGhlIERQTEwuICBSZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKiBEZXRlcm1pbmVzIHdoaWNoIERQTEwgbW9kZSB0byB1c2UgZm9yIHJlYWNoaW5nIGEgZGVzaXJlZCB0YXJnZXQgcmF0ZS4KKyAqIENoZWNrcyB3aGV0aGVyIHRoZSBEUExMIHNoYWxsIGJlIGluIGJ5cGFzcyBvciBsb2NrZWQgbW9kZSwgYW5kIGlmCisgKiBsb2NrZWQsIGNhbGN1bGF0ZXMgdGhlIE0sTiB2YWx1ZXMgZm9yIHRoZSBEUExMIHZpYSByb3VuZC1yYXRlLgorICogUmV0dXJucyBhIHBvc2l0aXZlIGNsb2NrIHJhdGUgd2l0aCBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciB2YWx1ZQorICogaW4gZmFpbHVyZS4KICAqLwotaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAotCQkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQorbG9uZyBvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqYmVzdF9wYXJlbnRfcmF0ZSwKKwkJCQkgICAgICAgc3RydWN0IGNsayAqKmJlc3RfcGFyZW50X2NsaykKIHsKIAlzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsayA9IHRvX2Nsa19od19vbWFwKGh3KTsKLQlzdHJ1Y3QgY2xrICpuZXdfcGFyZW50ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHJyYXRlOwotCXUxNiBmcmVxc2VsID0gMDsKIAlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQlpbnQgcmV0OwogCiAJaWYgKCFodyB8fCAhcmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00ODksNjEgKzQ4OCwxMjEgQEAKIAogCWlmIChfX2Nsa19nZXRfcmF0ZShkZC0+Y2xrX2J5cGFzcykgPT0gcmF0ZSAmJgogCSAgICAoZGQtPm1vZGVzICYgKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSkpIHsKLQkJcHJfZGVidWcoIiVzOiAlczogc2V0IHJhdGU6IGVudGVyaW5nIGJ5cGFzcy5cbiIsCi0JCQkgX19mdW5jX18sIF9fY2xrX2dldF9uYW1lKGh3LT5jbGspKTsKLQotCQlfX2Nsa19wcmVwYXJlKGRkLT5jbGtfYnlwYXNzKTsKLQkJY2xrX2VuYWJsZShkZC0+Y2xrX2J5cGFzcyk7Ci0JCXJldCA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7Ci0JCWlmICghcmV0KQotCQkJbmV3X3BhcmVudCA9IGRkLT5jbGtfYnlwYXNzOwotCQljbGtfZGlzYWJsZShkZC0+Y2xrX2J5cGFzcyk7Ci0JCV9fY2xrX3VucHJlcGFyZShkZC0+Y2xrX2J5cGFzcyk7CisJCSpiZXN0X3BhcmVudF9jbGsgPSBkZC0+Y2xrX2J5cGFzczsKIAl9IGVsc2UgewotCQlfX2Nsa19wcmVwYXJlKGRkLT5jbGtfcmVmKTsKLQkJY2xrX2VuYWJsZShkZC0+Y2xrX3JlZik7Ci0KLQkJLyogWFhYIHRoaXMgY2hlY2sgaXMgcHJvYmFibHkgcG9pbnRsZXNzIGluIHRoZSBDQ0YgY29udGV4dCAqLwotCQlpZiAoZGQtPmxhc3Rfcm91bmRlZF9yYXRlICE9IHJhdGUpIHsKLQkJCXJyYXRlID0gX19jbGtfcm91bmRfcmF0ZShody0+Y2xrLCByYXRlKTsKLQkJCWlmIChycmF0ZSAhPSByYXRlKSB7Ci0JCQkJcHJfd2FybigiJXM6ICVzOiBmaW5hbCByYXRlICVsdSBkb2VzIG5vdCBtYXRjaCBkZXNpcmVkIHJhdGUgJWx1XG4iLAotCQkJCQlfX2Z1bmNfXywgX19jbGtfZ2V0X25hbWUoaHctPmNsayksCi0JCQkJCXJyYXRlLCByYXRlKTsKLQkJCQlyYXRlID0gcnJhdGU7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoZGQtPmxhc3Rfcm91bmRlZF9yYXRlID09IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBGcmVxc2VsIGlzIGF2YWlsYWJsZSBvbmx5IG9uIE9NQVAzNDNYIGRldmljZXMgKi8KLQkJaWYgKHRpX2Nsa19mZWF0dXJlcy5mbGFncyAmIFRJX0NMS19EUExMX0hBU19GUkVRU0VMKSB7Ci0JCQlmcmVxc2VsID0gX29tYXAzX2RwbGxfY29tcHV0ZV9mcmVxc2VsKGNsaywKLQkJCQkJCWRkLT5sYXN0X3JvdW5kZWRfbik7Ci0JCQlXQVJOX09OKCFmcmVxc2VsKTsKLQkJfQotCi0JCXByX2RlYnVnKCIlczogJXM6IHNldCByYXRlOiBsb2NraW5nIHJhdGUgdG8gJWx1LlxuIiwKLQkJCSBfX2Z1bmNfXywgX19jbGtfZ2V0X25hbWUoaHctPmNsayksIHJhdGUpOwotCi0JCXJldCA9IG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtKGNsaywgZnJlcXNlbCk7Ci0JCWlmICghcmV0KQotCQkJbmV3X3BhcmVudCA9IGRkLT5jbGtfcmVmOwotCQljbGtfZGlzYWJsZShkZC0+Y2xrX3JlZik7Ci0JCV9fY2xrX3VucHJlcGFyZShkZC0+Y2xrX3JlZik7CisJCXJhdGUgPSBvbWFwMl9kcGxsX3JvdW5kX3JhdGUoaHcsIHJhdGUsIGJlc3RfcGFyZW50X3JhdGUpOworCQkqYmVzdF9wYXJlbnRfY2xrID0gZGQtPmNsa19yZWY7CiAJfQorCisJKmJlc3RfcGFyZW50X3JhdGUgPSByYXRlOworCisJcmV0dXJuIHJhdGU7Cit9CisKKy8qKgorICogb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQgLSBzZXQgcGFyZW50IGZvciBhIERQTEwgY2xvY2sKKyAqIEBodzogcG9pbnRlciB0byB0aGUgY2xvY2sgdG8gc2V0IHBhcmVudCBmb3IKKyAqIEBpbmRleDogcGFyZW50IGluZGV4IHRvIHNlbGVjdAorICoKKyAqIFNldHMgcGFyZW50IGZvciBhIERQTEwgY2xvY2suIFRoaXMgc2V0cyB0aGUgRFBMTCBpbnRvIGJ5cGFzcyBvcgorICogbG9ja2VkIG1vZGUuIFJldHVybnMgMCB3aXRoIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkKK3sKKwlzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsayA9IHRvX2Nsa19od19vbWFwKGh3KTsKKwlpbnQgcmV0OworCisJaWYgKCFodykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5kZXgpCisJCXJldCA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7CisJZWxzZQorCQlyZXQgPSBfb21hcDNfbm9uY29yZV9kcGxsX2xvY2soY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlIC0gc2V0IHJhdGUgZm9yIGEgRFBMTCBjbG9jaworICogQGh3OiBwb2ludGVyIHRvIHRoZSBjbG9jayB0byBzZXQgcGFyZW50IGZvcgorICogQHJhdGU6IHRhcmdldCByYXRlIGZvciB0aGUgY2xvY2sKKyAqIEBwYXJlbnRfcmF0ZTogcmF0ZSBvZiB0aGUgcGFyZW50IGNsb2NrCisgKgorICogU2V0cyByYXRlIGZvciBhIERQTEwgY2xvY2suIEZpcnN0IGNoZWNrcyBpZiB0aGUgY2xvY2sgcGFyZW50IGlzCisgKiByZWZlcmVuY2UgY2xvY2sgKGluIGJ5cGFzcyBtb2RlLCB0aGUgcmF0ZSBvZiB0aGUgY2xvY2sgY2FuJ3QgYmUKKyAqIGNoYW5nZWQpIGFuZCBwcm9jZWVkcyB3aXRoIHRoZSByYXRlIGNoYW5nZSBvcGVyYXRpb24uIFJldHVybnMgMAorICogd2l0aCBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBjbGtfaHdfb21hcCAqY2xrID0gdG9fY2xrX2h3X29tYXAoaHcpOworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOworCXUxNiBmcmVxc2VsID0gMDsKKwlpbnQgcmV0OworCisJaWYgKCFodyB8fCAhcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCWlmICghZGQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKF9fY2xrX2dldF9wYXJlbnQoaHctPmNsaykgIT0gZGQtPmNsa19yZWYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEZyZXFzZWwgaXMgYXZhaWxhYmxlIG9ubHkgb24gT01BUDM0M1ggZGV2aWNlcyAqLworCWlmICh0aV9jbGtfZmVhdHVyZXMuZmxhZ3MgJiBUSV9DTEtfRFBMTF9IQVNfRlJFUVNFTCkgeworCQlmcmVxc2VsID0gX29tYXAzX2RwbGxfY29tcHV0ZV9mcmVxc2VsKGNsaywgZGQtPmxhc3Rfcm91bmRlZF9uKTsKKwkJV0FSTl9PTighZnJlcXNlbCk7CisJfQorCisJcHJfZGVidWcoIiVzOiAlczogc2V0IHJhdGU6IGxvY2tpbmcgcmF0ZSB0byAlbHUuXG4iLCBfX2Z1bmNfXywKKwkJIF9fY2xrX2dldF9uYW1lKGh3LT5jbGspLCByYXRlKTsKKworCXJldCA9IG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtKGNsaywgZnJlcXNlbCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZV9hbmRfcGFyZW50IC0gc2V0IHJhdGUgYW5kIHBhcmVudCBmb3IgYSBEUExMIGNsb2NrCisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGNsb2NrIHRvIHNldCByYXRlIGFuZCBwYXJlbnQgZm9yCisgKiBAcmF0ZTogdGFyZ2V0IHJhdGUgZm9yIHRoZSBEUExMCisgKiBAcGFyZW50X3JhdGU6IGNsb2NrIHJhdGUgb2YgdGhlIERQTEwgcGFyZW50CisgKiBAaW5kZXg6IG5ldyBwYXJlbnQgaW5kZXggZm9yIHRoZSBEUExMLCAwIC0gcmVmZXJlbmNlLCAxIC0gYnlwYXNzCisgKgorICogU2V0cyByYXRlIGFuZCBwYXJlbnQgZm9yIGEgRFBMTCBjbG9jay4gSWYgbmV3IHBhcmVudCBpcyB0aGUgYnlwYXNzCisgKiBjbG9jaywgb25seSBzZWxlY3RzIHRoZSBwYXJlbnQuIE90aGVyd2lzZSBwcm9jZWVkcyB3aXRoIGEgcmF0ZQorICogY2hhbmdlLCBhcyB0aGlzIHdpbGwgZWZmZWN0aXZlbHkgYWxzbyBjaGFuZ2UgdGhlIHBhcmVudCBhcyB0aGUKKyAqIERQTEwgaXMgcHV0IGludG8gbG9ja2VkIG1vZGUuIFJldHVybnMgMCB3aXRoIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yCisgKiB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGVfYW5kX3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJICAgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLAorCQkJCQkgICB1OCBpbmRleCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFodyB8fCAhcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKgotCSogRklYTUUgLSB0aGlzIGlzIGFsbCB3cm9uZy4gIGNvbW1vbiBjb2RlIGhhbmRsZXMgcmVwYXJlbnRpbmcgYW5kCi0JKiBtaWdyYXRpbmcgcHJlcGFyZS9lbmFibGUgY291bnRzLiAgZHBsbHMgc2hvdWxkIGJlIGEgbXVsdGlwbGV4ZXIKLQkqIGNsb2NrIGFuZCB0aGlzIHNob3VsZCBiZSBhIHNldF9wYXJlbnQgb3BlcmF0aW9uIHNvIHRoYXQgYWxsIG9mIHRoYXQKLQkqIHN0dWZmIGlzIGluaGVyaXRlZCBmb3IgZnJlZQotCSovCisJICogY2xrLXJlZiBhdCBpbmRleFswXSwgaW4gd2hpY2ggY2FzZSB3ZSBvbmx5IG5lZWQgdG8gc2V0IHJhdGUsCisJICogdGhlIHBhcmVudCB3aWxsIGJlIGNoYW5nZWQgYXV0b21hdGljYWxseSB3aXRoIHRoZSBsb2NrIHNlcXVlbmNlLgorCSAqIFdpdGggY2xrLWJ5cGFzcyBjYXNlIHdlIG9ubHkgbmVlZCB0byBjaGFuZ2UgcGFyZW50LgorCSAqLworCWlmIChpbmRleCkKKwkJcmV0ID0gb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQoaHcsIGluZGV4KTsKKwllbHNlCisJCXJldCA9IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShodywgcmF0ZSwgcGFyZW50X3JhdGUpOwogCi0JaWYgKCFyZXQgJiYgY2xrX2dldF9wYXJlbnQoaHctPmNsaykgIT0gbmV3X3BhcmVudCkKLQkJX19jbGtfcmVwYXJlbnQoaHctPmNsaywgbmV3X3BhcmVudCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBEUExMIGF1dG9pZGxlIHJlYWQvc2V0IGNvZGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDQ0eHguYwppbmRleCA0NjEzZjFlLi41MzU4MjJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGw0NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsNDR4eC5jCkBAIC0yMDcsMyArMjA3LDQ0IEBACiAKIAlyZXR1cm4gZGQtPmxhc3Rfcm91bmRlZF9yYXRlOwogfQorCisvKioKKyAqIG9tYXA0X2RwbGxfcmVnbTR4ZW5fZGV0ZXJtaW5lX3JhdGUgLSBkZXRlcm1pbmUgcmF0ZSBmb3IgYSBEUExMCisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGNsb2NrIHRvIGRldGVybWluZSByYXRlIGZvcgorICogQHJhdGU6IHRhcmdldCByYXRlIGZvciB0aGUgRFBMTAorICogQGJlc3RfcGFyZW50X3JhdGU6IHBvaW50ZXIgZm9yIHJldHVybmluZyBiZXN0IHBhcmVudCByYXRlCisgKiBAYmVzdF9wYXJlbnRfY2xrOiBwb2ludGVyIGZvciByZXR1cm5pbmcgYmVzdCBwYXJlbnQgY2xvY2sKKyAqCisgKiBEZXRlcm1pbmVzIHdoaWNoIERQTEwgbW9kZSB0byB1c2UgZm9yIHJlYWNoaW5nIGEgZGVzaXJlZCByYXRlLgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIERQTEwgc2hhbGwgYmUgaW4gYnlwYXNzIG9yIGxvY2tlZCBtb2RlLCBhbmQgaWYKKyAqIGxvY2tlZCwgY2FsY3VsYXRlcyB0aGUgTSxOIHZhbHVlcyBmb3IgdGhlIERQTEwgdmlhIHJvdW5kLXJhdGUuCisgKiBSZXR1cm5zIGEgcG9zaXRpdmUgY2xvY2sgcmF0ZSB3aXRoIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIHZhbHVlCisgKiBpbiBmYWlsdXJlLgorICovCitsb25nIG9tYXA0X2RwbGxfcmVnbTR4ZW5fZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkJdW5zaWduZWQgbG9uZyAqYmVzdF9wYXJlbnRfcmF0ZSwKKwkJCQkJc3RydWN0IGNsayAqKmJlc3RfcGFyZW50X2NsaykKK3sKKwlzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsayA9IHRvX2Nsa19od19vbWFwKGh3KTsKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKworCWlmICghaHcgfHwgIXJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwlpZiAoIWRkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChfX2Nsa19nZXRfcmF0ZShkZC0+Y2xrX2J5cGFzcykgPT0gcmF0ZSAmJgorCSAgICAoZGQtPm1vZGVzICYgKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSkpIHsKKwkJKmJlc3RfcGFyZW50X2NsayA9IGRkLT5jbGtfYnlwYXNzOworCX0gZWxzZSB7CisJCXJhdGUgPSBvbWFwNF9kcGxsX3JlZ200eGVuX3JvdW5kX3JhdGUoaHcsIHJhdGUsCisJCQkJCQkgICAgICBiZXN0X3BhcmVudF9yYXRlKTsKKwkJKmJlc3RfcGFyZW50X2NsayA9IGRkLT5jbGtfcmVmOworCX0KKworCSpiZXN0X3BhcmVudF9yYXRlID0gcmF0ZTsKKworCXJldHVybiByYXRlOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKaW5kZXggY2I3NzY0MzEuLmQ1OTUxYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuYwpAQCAtMTIsMTQgKzEyLDEzIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbXRkLW5hbmQtb21hcDIuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKLSNpbmNsdWRlICJncG1jLmgiCiAjaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiZ3BtYy1uYW5kLmgiCiAKIC8qIG1pbmltdW0gc2l6ZSBmb3IgSU8gbWFwcGluZyAqLwogI2RlZmluZQlOQU5EX0lPX1NJWkUJNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1OWUxMjguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuaAotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYJX19PTUFQMl9HUE1DX05BTkRfSAotI2RlZmluZQlfX09NQVAyX0dQTUNfTkFORF9ICi0KLSNpbmNsdWRlICJncG1jLmgiCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tdGQtbmFuZC1vbWFwMi5oPgotCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVREX05BTkRfT01BUDIpCi1leHRlcm4gaW50IGdwbWNfbmFuZF9pbml0KHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSAqZCwKLQkJCSAgc3RydWN0IGdwbWNfdGltaW5ncyAqZ3BtY190KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBncG1jX25hbmRfaW5pdChzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmQsCi0JCQkJIHN0cnVjdCBncG1jX3RpbWluZ3MgKmdwbWNfdCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1vbmVuYW5kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5jCmluZGV4IDhiNjg3NmMuLjUzZDE5N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1vbmVuYW5kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuYwpAQCAtMTUsMTQgKzE1LDEzIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmRfcmVncy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tdGQtb25lbmFuZC1vbWFwMi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAotI2luY2x1ZGUgImdwbWMuaCIKICNpbmNsdWRlICJzb2MuaCIKLSNpbmNsdWRlICJncG1jLW9uZW5hbmQuaCIKIAogI2RlZmluZQlPTkVOQU5EX0lPX1NJWkUJU1pfMTI4SwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2ZjIzYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoKLSAqICBhcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5oCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZglfX09NQVAyX0dQTUNfT05FTkFORF9ICi0jZGVmaW5lCV9fT01BUDJfR1BNQ19PTkVOQU5EX0gKLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbXRkLW9uZW5hbmQtb21hcDIuaD4KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKQotZXh0ZXJuIHZvaWQgZ3BtY19vbmVuYW5kX2luaXQoc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpkKTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX29uZW5hbmRfZGF0YQlOVUxMCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3BtY19vbmVuYW5kX2luaXQoc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpkKQotewotfQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWEwNjM1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1zbWM5MXguYworKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKiBDb250YWN0OglUb255IExpbmRncmVuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KLQotI2luY2x1ZGUgImdwbWMuaCIKLSNpbmNsdWRlICJncG1jLXNtYzkxeC5oIgotCi0jaW5jbHVkZSAic29jLmgiCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9zbWM5MXhfcGxhdGZvcm1fZGF0YSAqZ3BtY19jZmc7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ3BtY19zbWM5MXhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgZ3BtY19zbWM5MXhfaW5mbyA9IHsKLQkuZmxhZ3MJPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCB8IFNNQzkxWF9JT19TSElGVF8wLAotCS5sZWRhCT0gUlBDX0xFRF8xMDBfMTAsCi0JLmxlZGIJPSBSUENfTEVEX1RYX1JYLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZ3BtY19zbWM5MXhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbWM5MXgiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZ3BtY19zbWM5MXhfaW5mbywKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShncG1jX3NtYzkxeF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGdwbWNfc21jOTF4X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3BtY19zZXR0aW5ncyBzbWM5MXhfc2V0dGluZ3MgPSB7Ci0JLmRldmljZV93aWR0aCA9IEdQTUNfREVWV0lEVEhfMTZCSVQsCi19OwotCi0vKgotICogU2V0IHRoZSBncG1jIHRpbWluZ3MgZm9yIHNtYzkxYzk2LiBUaGUgdGltaW5ncyBhcmUgdGFrZW4KLSAqIGZyb20gdGhlIGRhdGEgc2hlZXQgYXZhaWxhYmxlIGF0OgotICogaHR0cDovL3d3dy5zbXNjLmNvbS9tYWluL2NhdGFsb2cvbGFuOTFjOTYuaHRtbAotICogUkVWSVNJVDogTGV2ZWwgc2hpZnRlcnMgY2FuIGFkZCBhdCBsZWFzdCB0byB0aGUgYWNjZXNzIGxhdGVuY3kuCi0gKi8KLXN0YXRpYyBpbnQgc21jOTFjOTZfZ3BtY19yZXRpbWUodm9pZCkKLXsKLQlzdHJ1Y3QgZ3BtY190aW1pbmdzIHQ7Ci0Jc3RydWN0IGdwbWNfZGV2aWNlX3RpbWluZ3MgZGV2X3Q7Ci0JY29uc3QgaW50IHQzID0gMTA7CS8qIEZpZ3VyZSAxMi4yIHJlYWQgYW5kIDEyLjQgd3JpdGUgKi8KLQljb25zdCBpbnQgdDRfciA9IDIwOwkvKiBGaWd1cmUgMTIuMiByZWFkICovCi0JY29uc3QgaW50IHQ0X3cgPSA1OwkvKiBGaWd1cmUgMTIuNCB3cml0ZSAqLwotCWNvbnN0IGludCB0NSA9IDI1OwkvKiBGaWd1cmUgMTIuMiByZWFkICovCi0JY29uc3QgaW50IHQ2ID0gMTU7CS8qIEZpZ3VyZSAxMi4yIHJlYWQgKi8KLQljb25zdCBpbnQgdDcgPSA1OwkvKiBGaWd1cmUgMTIuNCB3cml0ZSAqLwotCWNvbnN0IGludCB0OCA9IDU7CS8qIEZpZ3VyZSAxMi40IHdyaXRlICovCi0JY29uc3QgaW50IHQyMCA9IDE4NTsJLyogRmlndXJlIDEyLjIgcmVhZCBhbmQgMTIuNCB3cml0ZSAqLwotCi0JLyoKLQkgKiBGSVhNRTogQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIGFuZCBkYXRhIGJ1cyBtdXhlZCB0aW1pbmdzLgotCSAqIE5vdGUgdGhhdCBhdCBsZWFzdCBhZHZfcmRfb2ZmIG5lZWRzIHRvIGJlIGNoYW5nZWQgYWNjb3JkaW5nCi0JICogdG8gb21hcDM0MzAgVFJNIEZpZ3VyZSAxMS0xMS4gQXJlIHRoZSBzZHAgYm9hcmRzIHVzaW5nIHRoZQotCSAqIEZQR0EgaW4gYmV0d2VlbiBzbWM5MXggYW5kIG9tYXAgYXMgdGhlIHRpbWluZ3MgYXJlIGRpZmZlcmVudAotCSAqIGZyb20gYWJvdmU/Ci0JICovCi0JaWYgKGdwbWNfY2ZnLT5mbGFncyAmIEdQTUNfTVVYX0FERF9EQVRBKQotCQlyZXR1cm4gMDsKLQotCW1lbXNldCgmZGV2X3QsIDAsIHNpemVvZihkZXZfdCkpOwotCi0JZGV2X3QudF9vZWFzdSA9IHQzICogMTAwMDsKLQlkZXZfdC50X29lID0gdDUgKiAxMDAwOwotCWRldl90LnRfY2V6X3IgPSB0NF9yICogMTAwMDsKLQlkZXZfdC50X29leiA9IHQ2ICogMTAwMDsKLQlkZXZfdC50X3JkX2N5Y2xlID0gKHQyMCAtIHQzKSAqIDEwMDA7Ci0KLQlkZXZfdC50X3dlYXN1ID0gdDMgKiAxMDAwOwotCWRldl90LnRfd3BsID0gdDcgKiAxMDAwOwotCWRldl90LnRfd3BoID0gdDggKiAxMDAwOwotCWRldl90LnRfY2V6X3cgPSB0NF93ICogMTAwMDsKLQlkZXZfdC50X3dyX2N5Y2xlID0gKHQyMCAtIHQzKSAqIDEwMDA7Ci0KLQlncG1jX2NhbGNfdGltaW5ncygmdCwgJnNtYzkxeF9zZXR0aW5ncywgJmRldl90KTsKLQotCXJldHVybiBncG1jX2NzX3NldF90aW1pbmdzKGdwbWNfY2ZnLT5jcywgJnQpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBzbWM5MXggZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgR1BNQy4gTm90ZSB0aGF0IHdlCi0gKiBhc3N1bWUgdGhhdCBwaW4gbXVsdGlwbGV4aW5nIGlzIGRvbmUgaW4gdGhlIGJvYXJkLSouYyBmaWxlLAotICogb3IgaW4gdGhlIGJvb3Rsb2FkZXIuCi0gKi8KLXZvaWQgX19pbml0IGdwbWNfc21jOTF4X2luaXQoc3RydWN0IG9tYXBfc21jOTF4X3BsYXRmb3JtX2RhdGEgKmJvYXJkX2RhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBjc19tZW1fYmFzZTsKLQlpbnQgcmV0OwotCi0JZ3BtY19jZmcgPSBib2FyZF9kYXRhOwotCi0JaWYgKGdwbWNfY2ZnLT5mbGFncyAmIEdQTUNfVElNSU5HU19TTUM5MUM5NikKLQkJZ3BtY19jZmctPnJldGltZSA9IHNtYzkxYzk2X2dwbWNfcmV0aW1lOwotCi0JaWYgKGdwbWNfY3NfcmVxdWVzdChncG1jX2NmZy0+Y3MsIFNaXzE2TSwgJmNzX21lbV9iYXNlKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUE1DIG1lbSBmb3Igc21jOTF4XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWdwbWNfc21jOTF4X3Jlc291cmNlc1swXS5zdGFydCA9IGNzX21lbV9iYXNlICsgMHgzMDA7Ci0JZ3BtY19zbWM5MXhfcmVzb3VyY2VzWzBdLmVuZCA9IGNzX21lbV9iYXNlICsgMHgzMGY7Ci0JZ3BtY19zbWM5MXhfcmVzb3VyY2VzWzFdLmZsYWdzIHw9IChncG1jX2NmZy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSyk7Ci0KLQlpZiAoZ3BtY19jZmctPmZsYWdzICYgR1BNQ19NVVhfQUREX0RBVEEpCi0JCXNtYzkxeF9zZXR0aW5ncy5tdXhfYWRkX2RhdGEgPSBHUE1DX01VWF9BRDsKLQlpZiAoZ3BtY19jZmctPmZsYWdzICYgR1BNQ19SRUFEX01PTikKLQkJc21jOTF4X3NldHRpbmdzLndhaXRfb25fcmVhZCA9IHRydWU7Ci0JaWYgKGdwbWNfY2ZnLT5mbGFncyAmIEdQTUNfV1JJVEVfTU9OKQotCQlzbWM5MXhfc2V0dGluZ3Mud2FpdF9vbl93cml0ZSA9IHRydWU7Ci0JaWYgKGdwbWNfY2ZnLT53YWl0X3BpbikKLQkJc21jOTF4X3NldHRpbmdzLndhaXRfcGluID0gZ3BtY19jZmctPndhaXRfcGluOwotCXJldCA9IGdwbWNfY3NfcHJvZ3JhbV9zZXR0aW5ncyhncG1jX2NmZy0+Y3MsICZzbWM5MXhfc2V0dGluZ3MpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGZyZWUxOwotCi0JaWYgKGdwbWNfY2ZnLT5yZXRpbWUpIHsKLQkJcmV0ID0gZ3BtY19jZmctPnJldGltZSgpOwotCQlpZiAocmV0ICE9IDApCi0JCQlnb3RvIGZyZWUxOwotCX0KLQotCWlmIChncGlvX3JlcXVlc3Rfb25lKGdwbWNfY2ZnLT5ncGlvX2lycSwgR1BJT0ZfSU4sICJTTUM5MVggaXJxIikgPCAwKQotCQlnb3RvIGZyZWUxOwotCi0JZ3BtY19zbWM5MXhfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gZ3Bpb190b19pcnEoZ3BtY19jZmctPmdwaW9faXJxKTsKLQotCWlmIChncG1jX2NmZy0+Z3Bpb19wd3Jkd24pIHsKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShncG1jX2NmZy0+Z3Bpb19wd3Jkd24sCi0JCQkJICAgICAgIEdQSU9GX09VVF9JTklUX0xPVywgIlNNQzkxWCBwb3dlcmRvd24iKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZnJlZTI7Ci0JfQotCi0JaWYgKGdwbWNfY2ZnLT5ncGlvX3Jlc2V0KSB7Ci0JCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZ3BtY19jZmctPmdwaW9fcmVzZXQsCi0JCQkJICAgICAgIEdQSU9GX09VVF9JTklUX0xPVywgIlNNQzkxWCByZXNldCIpOwotCQlpZiAocmV0KQotCQkJZ290byBmcmVlMzsKLQotCQlncGlvX3NldF92YWx1ZShncG1jX2NmZy0+Z3Bpb19yZXNldCwgMSk7Ci0JCW1zbGVlcCgxMDApOwotCQlncGlvX3NldF92YWx1ZShncG1jX2NmZy0+Z3Bpb19yZXNldCwgMCk7Ci0JfQotCi0JaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZ3BtY19zbWM5MXhfZGV2aWNlKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgc21jOTF4IGRldmljZVxuIik7Ci0JCWdwaW9fZnJlZShncG1jX2NmZy0+Z3Bpb19yZXNldCk7Ci0JCWdvdG8gZnJlZTM7Ci0JfQotCi0JcmV0dXJuOwotCi1mcmVlMzoKLQlpZiAoZ3BtY19jZmctPmdwaW9fcHdyZHduKQotCQlncGlvX2ZyZWUoZ3BtY19jZmctPmdwaW9fcHdyZHduKTsKLWZyZWUyOgotCWdwaW9fZnJlZShncG1jX2NmZy0+Z3Bpb19pcnEpOwotZnJlZTE6Ci0JZ3BtY19jc19mcmVlKGdwbWNfY2ZnLT5jcyk7Ci0KLQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBpbml0aWFsaXplIHNtYzkxeFxuIik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtc21jOTF4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtc21jOTF4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NGZiZWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3BtYy1zbWM5MXguaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfR1BNQ19TTUM5MVhfSF9fCi0KLSNkZWZpbmUgR1BNQ19USU1JTkdTX1NNQzkxQzk2CSgxIDw8IDQpCi0jZGVmaW5lIEdQTUNfTVVYX0FERF9EQVRBCSgxIDw8IDUpIC8qIEdQTUNfQ09ORklHMV9NVVhBREREQVRBICovCi0jZGVmaW5lIEdQTUNfUkVBRF9NT04JCSgxIDw8IDYpIC8qIEdQTUNfQ09ORklHMV9XQUlUX1JFQURfTU9OICovCi0jZGVmaW5lIEdQTUNfV1JJVEVfTU9OCQkoMSA8PCA3KSAvKiBHUE1DX0NPTkZJRzFfV0FJVF9XUklURV9NT04gKi8KLQotc3RydWN0IG9tYXBfc21jOTF4X3BsYXRmb3JtX2RhdGEgewotCWludAljczsKLQlpbnQJZ3Bpb19pcnE7Ci0JaW50CWdwaW9fcHdyZHduOwotCWludAlncGlvX3Jlc2V0OwotCWludAl3YWl0X3BpbjsJLyogT3B0aW9uYWwgR1BNQ19DT05GSUcxX1dBSVRQSU5TRUxFQ1QgKi8KLQl1MzIJZmxhZ3M7Ci0JaW50CSgqcmV0aW1lKSh2b2lkKTsKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19TTUM5MVhfTU9EVUxFKQotCi1leHRlcm4gdm9pZCBncG1jX3NtYzkxeF9pbml0KHN0cnVjdCBvbWFwX3NtYzkxeF9wbGF0Zm9ybV9kYXRhICpkKTsKLQotI2Vsc2UKLQotI2RlZmluZSBib2FyZF9zbWM5MXhfZGF0YQlOVUxMCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncG1jX3NtYzkxeF9pbml0KHN0cnVjdCBvbWFwX3NtYzkxeF9wbGF0Zm9ybV9kYXRhICpkKQotewotfQotCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuaAppbmRleCA3MDdmNmQ1Li45Y2FhNDFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuaApAQCAtNiwyMjYgKzYsOSBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBEbyBub3QgaW5jbHVkZSB0aGlzIGZpbGUgaW4gYW55IG5ldyBjb2RlLCB0aGlzIHdpbGwgZ2V0IHJlbW92ZWQKKyAqIG9uY2Ugb21hcDMgYm9vdHMgaW4gZGV2aWNlIHRyZWUgb25seSBtb2RlLgorICoKICAqLwotCi0jaWZuZGVmIF9fT01BUDJfR1BNQ19ICi0jZGVmaW5lIF9fT01BUDJfR1BNQ19ICi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL210ZC1uYW5kLW9tYXAyLmg+Ci0KLS8qIE1heGltdW0gTnVtYmVyIG9mIENoaXAgU2VsZWN0cyAqLwotI2RlZmluZSBHUE1DX0NTX05VTQkJOAotCi0jZGVmaW5lIEdQTUNfQ1NfQ09ORklHMQkJMHgwMAotI2RlZmluZSBHUE1DX0NTX0NPTkZJRzIJCTB4MDQKLSNkZWZpbmUgR1BNQ19DU19DT05GSUczCQkweDA4Ci0jZGVmaW5lIEdQTUNfQ1NfQ09ORklHNAkJMHgwYwotI2RlZmluZSBHUE1DX0NTX0NPTkZJRzUJCTB4MTAKLSNkZWZpbmUgR1BNQ19DU19DT05GSUc2CQkweDE0Ci0jZGVmaW5lIEdQTUNfQ1NfQ09ORklHNwkJMHgxOAotI2RlZmluZSBHUE1DX0NTX05BTkRfQ09NTUFORAkweDFjCi0jZGVmaW5lIEdQTUNfQ1NfTkFORF9BRERSRVNTCTB4MjAKLSNkZWZpbmUgR1BNQ19DU19OQU5EX0RBVEEJMHgyNAotCi0vKiBDb250cm9sIENvbW1hbmRzICovCi0jZGVmaW5lIEdQTUNfQ09ORklHX1JEWV9CU1kJMHgwMDAwMDAwMQotI2RlZmluZSBHUE1DX0NPTkZJR19ERVZfU0laRQkweDAwMDAwMDAyCi0jZGVmaW5lIEdQTUNfQ09ORklHX0RFVl9UWVBFCTB4MDAwMDAwMDMKLSNkZWZpbmUgR1BNQ19TRVRfSVJRX1NUQVRVUwkweDAwMDAwMDA0Ci0jZGVmaW5lIEdQTUNfQ09ORklHX1dQCQkweDAwMDAwMDA1Ci0KLSNkZWZpbmUgR1BNQ19FTkFCTEVfSVJRCQkweDAwMDAwMDBkCi0KLS8qIEVDQyBjb21tYW5kcyAqLwotI2RlZmluZSBHUE1DX0VDQ19SRUFECQkwIC8qIFJlc2V0IEhhcmR3YXJlIEVDQyBmb3IgcmVhZCAqLwotI2RlZmluZSBHUE1DX0VDQ19XUklURQkJMSAvKiBSZXNldCBIYXJkd2FyZSBFQ0MgZm9yIHdyaXRlICovCi0jZGVmaW5lIEdQTUNfRUNDX1JFQURTWU4JMiAvKiBSZXNldCBiZWZvcmUgc3luZHJvbSBpcyByZWFkIGJhY2sgKi8KLQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JBUEJVUlNUX1NVUFAgICAgICgxIDw8IDMxKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRE1VTFRJUExFX1NVUFAgICgxIDw8IDMwKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRFRZUEVfQVNZTkMgICAgICgwIDw8IDI5KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRFRZUEVfU1lOQyAgICAgICgxIDw8IDI5KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JJVEVNVUxUSVBMRV9TVVBQICgxIDw8IDI4KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JJVEVUWVBFX0FTWU5DICAgICgwIDw8IDI3KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JJVEVUWVBFX1NZTkMgICAgICgxIDw8IDI3KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfQ0xLQUNUSVZBVElPTlRJTUUodmFsKSAoKHZhbCAmIDMpIDw8IDI1KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfUEFHRV9MRU4odmFsKSAgICAgICgodmFsICYgMykgPDwgMjMpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX1JFQURfTU9OICAgICAgKDEgPDwgMjIpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX1dSSVRFX01PTiAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX01PTl9JSU1FKHZhbCkgKCh2YWwgJiAzKSA8PCAxOCkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX1dBSVRfUElOX1NFTCh2YWwpICAoKHZhbCAmIDMpIDw8IDE2KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFU0laRSh2YWwpICAgICgodmFsICYgMykgPDwgMTIpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VTSVpFXzE2ICAgICAgR1BNQ19DT05GSUcxX0RFVklDRVNJWkUoMSkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVRZUEUodmFsKSAgICAoKHZhbCAmIDMpIDw8IDEwKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRV9OT1IgICAgIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFKDApCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9NVVhUWVBFKHZhbCkgICAgICAgKCh2YWwgJiAzKSA8PCA4KQotI2RlZmluZSBHUE1DX0NPTkZJRzFfVElNRV9QQVJBX0dSQU4gICAgICgxIDw8IDQpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVih2YWwpICAgICAgKHZhbCAmIDMpCi0jZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVjIgICAgICAgICAgKEdQTUNfQ09ORklHMV9GQ0xLX0RJVigxKSkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX0ZDTEtfRElWMyAgICAgICAgICAoR1BNQ19DT05GSUcxX0ZDTEtfRElWKDIpKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfRkNMS19ESVY0ICAgICAgICAgIChHUE1DX0NPTkZJRzFfRkNMS19ESVYoMykpCi0jZGVmaW5lIEdQTUNfQ09ORklHN19DU1ZBTElECQkoMSA8PCA2KQotCi0jZGVmaW5lIEdQTUNfREVWSUNFVFlQRV9OT1IJCTAKLSNkZWZpbmUgR1BNQ19ERVZJQ0VUWVBFX05BTkQJCTIKLSNkZWZpbmUgR1BNQ19DT05GSUdfV1JJVEVQUk9URUNUCTB4MDAwMDAwMTAKLSNkZWZpbmUgV1JfUkRfUElOX01PTklUT1JJTkcJCTB4MDA2MDAwMDAKLSNkZWZpbmUgR1BNQ19JUlFfRklGT0VWRU5URU5BQkxFCTB4MDEKLSNkZWZpbmUgR1BNQ19JUlFfQ09VTlRfRVZFTlQJCTB4MDIKLQotI2RlZmluZSBHUE1DX0JVUlNUXzQJCQk0CS8qIDQgd29yZCBidXJzdCAqLwotI2RlZmluZSBHUE1DX0JVUlNUXzgJCQk4CS8qIDggd29yZCBidXJzdCAqLwotI2RlZmluZSBHUE1DX0JVUlNUXzE2CQkJMTYJLyogMTYgd29yZCBidXJzdCAqLwotI2RlZmluZSBHUE1DX0RFVldJRFRIXzhCSVQJCTEJLyogOC1iaXQgZGV2aWNlIHdpZHRoICovCi0jZGVmaW5lIEdQTUNfREVWV0lEVEhfMTZCSVQJCTIJLyogMTYtYml0IGRldmljZSB3aWR0aCAqLwotI2RlZmluZSBHUE1DX01VWF9BQUQJCQkxCS8qIEFkZHItQWRkci1EYXRhIG11bHRpcGxleCAqLwotI2RlZmluZSBHUE1DX01VWF9BRAkJCTIJLyogQWRkci1EYXRhIG11bHRpcGxleCAqLwotCi0vKiBib29sIHR5cGUgdGltZSBzZXR0aW5ncyAqLwotc3RydWN0IGdwbWNfYm9vbF90aW1pbmdzIHsKLQlib29sIGN5Y2xlMmN5Y2xlZGlmZmNzZW47Ci0JYm9vbCBjeWNsZTJjeWNsZXNhbWVjc2VuOwotCWJvb2wgd2VfZXh0cmFfZGVsYXk7Ci0JYm9vbCBvZV9leHRyYV9kZWxheTsKLQlib29sIGFkdl9leHRyYV9kZWxheTsKLQlib29sIGNzX2V4dHJhX2RlbGF5OwotCWJvb2wgdGltZV9wYXJhX2dyYW51bGFyaXR5OwotfTsKLQotLyoKLSAqIE5vdGUgdGhhdCBhbGwgdmFsdWVzIGluIHRoaXMgc3RydWN0IGFyZSBpbiBuYW5vc2Vjb25kcyBleGNlcHQgc3luY19jbGsKLSAqICh3aGljaCBpcyBpbiBwaWNvc2Vjb25kcyksIHdoaWxlIHRoZSByZWdpc3RlciB2YWx1ZXMgYXJlIGluIGdwbWNfZmNrIGN5Y2xlcy4KLSAqLwotc3RydWN0IGdwbWNfdGltaW5ncyB7Ci0JLyogTWluaW11bSBjbG9jayBwZXJpb2QgZm9yIHN5bmNocm9ub3VzIG1vZGUgKGluIHBpY29zZWNvbmRzKSAqLwotCXUzMiBzeW5jX2NsazsKLQotCS8qIENoaXAtc2VsZWN0IHNpZ25hbCB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DU19DT05GSUcyICovCi0JdTMyIGNzX29uOwkJLyogQXNzZXJ0aW9uIHRpbWUgKi8KLQl1MzIgY3NfcmRfb2ZmOwkJLyogUmVhZCBkZWFzc2VydGlvbiB0aW1lICovCi0JdTMyIGNzX3dyX29mZjsJCS8qIFdyaXRlIGRlYXNzZXJ0aW9uIHRpbWUgKi8KLQotCS8qIEFEViBzaWduYWwgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ09ORklHMyAqLwotCXUzMiBhZHZfb247CQkvKiBBc3NlcnRpb24gdGltZSAqLwotCXUzMiBhZHZfcmRfb2ZmOwkJLyogUmVhZCBkZWFzc2VydGlvbiB0aW1lICovCi0JdTMyIGFkdl93cl9vZmY7CQkvKiBXcml0ZSBkZWFzc2VydGlvbiB0aW1lICovCi0KLQkvKiBXRSBzaWduYWxzIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NPTkZJRzQgKi8KLQl1MzIgd2Vfb247CQkvKiBXRSBhc3NlcnRpb24gdGltZSAqLwotCXUzMiB3ZV9vZmY7CQkvKiBXRSBkZWFzc2VydGlvbiB0aW1lICovCi0KLQkvKiBPRSBzaWduYWxzIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NPTkZJRzQgKi8KLQl1MzIgb2Vfb247CQkvKiBPRSBhc3NlcnRpb24gdGltZSAqLwotCXUzMiBvZV9vZmY7CQkvKiBPRSBkZWFzc2VydGlvbiB0aW1lICovCi0KLQkvKiBBY2Nlc3MgdGltZSBhbmQgY3ljbGUgdGltZSB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DT05GSUc1ICovCi0JdTMyIHBhZ2VfYnVyc3RfYWNjZXNzOwkvKiBNdWx0aXBsZSBhY2Nlc3Mgd29yZCBkZWxheSAqLwotCXUzMiBhY2Nlc3M7CQkvKiBTdGFydC1jeWNsZSB0byBmaXJzdCBkYXRhIHZhbGlkIGRlbGF5ICovCi0JdTMyIHJkX2N5Y2xlOwkJLyogVG90YWwgcmVhZCBjeWNsZSB0aW1lICovCi0JdTMyIHdyX2N5Y2xlOwkJLyogVG90YWwgd3JpdGUgY3ljbGUgdGltZSAqLwotCi0JdTMyIGJ1c190dXJuYXJvdW5kOwotCXUzMiBjeWNsZTJjeWNsZV9kZWxheTsKLQotCXUzMiB3YWl0X21vbml0b3Jpbmc7Ci0JdTMyIGNsa19hY3RpdmF0aW9uOwotCi0JLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSBvbiBPTUFQMzQzMCAqLwotCXUzMiB3cl9hY2Nlc3M7CQkvKiBXUkFDQ0VTU1RJTUUgKi8KLQl1MzIgd3JfZGF0YV9tdXhfYnVzOwkvKiBXUkRBVEFPTkFETVVYQlVTICovCi0KLQlzdHJ1Y3QgZ3BtY19ib29sX3RpbWluZ3MgYm9vbF90aW1pbmdzOwotfTsKLQotLyogRGV2aWNlIHRpbWluZ3MgaW4gcGljb3NlY29uZHMgKi8KLXN0cnVjdCBncG1jX2RldmljZV90aW1pbmdzIHsKLQl1MzIgdF9jZWFzdTsJLyogYWRkcmVzcyBzZXR1cCB0byBDUyB2YWxpZCAqLwotCXUzMiB0X2F2ZGFzdTsJLyogYWRkcmVzcyBzZXR1cCB0byBBRFYgdmFsaWQgKi8KLQkvKiBYWFg6IHRyeSB0byBjb21iaW5lIHRfYXZkcF9yICYgdF9hdmRwX3cuIElzc3VlIGlzCi0JICogb2YgdHVzYiB1c2luZyB0aGVzZSB0aW1pbmdzIGV2ZW4gZm9yIHN5bmMgd2hpbHN0Ci0JICogaWRlYWxseSBmb3IgYWR2X3JkLyh3cilfb2ZmIGl0IHNob3VsZCBoYXZlIGNvbnNpZGVyZWQKLQkgKiB0X2F2ZGggaW5zdGVhZC4gVGhpcyBpbmRpcmVjdGx5IG5lY2Vzc2l0YXRlcyByL3cKLQkgKiB2YXJpYXRpb25zIG9mIHRfYXZkcCBhcyBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG9uZQotCSAqIHN5bmMgJiBvdGhlciBhc3luYwotCSAqLwotCXUzMiB0X2F2ZHBfcjsJLyogQURWIGxvdyB0aW1lICh3aGF0IGFib3V0IHRfY2VyID8pICovCi0JdTMyIHRfYXZkcF93OwotCXUzMiB0X2FhdmRoOwkvKiBhZGRyZXNzIGhvbGQgdGltZSAqLwotCXUzMiB0X29lYXN1OwkvKiBhZGRyZXNzIHNldHVwIHRvIE9FIHZhbGlkICovCi0JdTMyIHRfYWE7CS8qIGFjY2VzcyB0aW1lIGZyb20gQURWIGFzc2VydGlvbiAqLwotCXUzMiB0X2lhYTsJLyogaW5pdGlhbCBhY2Nlc3MgdGltZSAqLwotCXUzMiB0X29lOwkvKiBhY2Nlc3MgdGltZSBmcm9tIE9FIGFzc2VydGlvbiAqLwotCXUzMiB0X2NlOwkvKiBhY2Nlc3MgdGltZSBmcm9tIENTIGFzZXJ0aW9uICovCi0JdTMyIHRfcmRfY3ljbGU7CS8qIHJlYWQgY3ljbGUgdGltZSAqLwotCXUzMiB0X2Nlel9yOwkvKiByZWFkIENTIGRlYXNzZXJ0aW9uIHRvIGhpZ2ggWiAqLwotCXUzMiB0X2Nlel93OwkvKiB3cml0ZSBDUyBkZWFzc2VydGlvbiB0byBoaWdoIFogKi8KLQl1MzIgdF9vZXo7CS8qIE9FIGRlYXNzZXJ0aW9uIHRvIGhpZ2ggWiAqLwotCXUzMiB0X3dlYXN1OwkvKiBhZGRyZXNzIHNldHVwIHRvIFdFIHZhbGlkICovCi0JdTMyIHRfd3BsOwkvKiB3cml0ZSBhc3NlcnRpb24gdGltZSAqLwotCXUzMiB0X3dwaDsJLyogd3JpdGUgZGVhc3NlcnRpb24gdGltZSAqLwotCXUzMiB0X3dyX2N5Y2xlOwkvKiB3cml0ZSBjeWNsZSB0aW1lICovCi0KLQl1MzIgY2xrOwotCXUzMiB0X2JhY2M7CS8qIGJ1cnN0IGFjY2VzcyB2YWxpZCBjbG9jayB0byBvdXRwdXQgZGVsYXkgKi8KLQl1MzIgdF9jZXM7CS8qIENTIHNldHVwIHRpbWUgdG8gY2xrICovCi0JdTMyIHRfYXZkczsJLyogQURWIHNldHVwIHRpbWUgdG8gY2xrICovCi0JdTMyIHRfYXZkaDsJLyogQURWIGhvbGQgdGltZSBmcm9tIGNsayAqLwotCXUzMiB0X2FjaDsJLyogYWRkcmVzcyBob2xkIHRpbWUgZnJvbSBjbGsgKi8KLQl1MzIgdF9yZHlvOwkvKiBjbGsgdG8gcmVhZHkgdmFsaWQgKi8KLQotCXUzMiB0X2NlX3JkeXo7CS8qIFhYWDogZGVzY3JpcHRpb24gPywgb3IgdXNlIHRfY2V6IGluc3RlYWQgKi8KLQl1MzIgdF9jZV9hdmQ7CS8qIENTIG9uIHRvIEFEViBvbiBkZWxheSAqLwotCi0JLyogWFhYOiBjaGVjayB0aGUgcG9zc2liaWxpdHkgb2YgY29tYmluaW5nCi0JICogY3ljX2FhdmhkX29lICYgY3ljX2FhdmRoX3dlCi0JICovCi0JdTggY3ljX2FhdmRoX29lOy8qIHJlYWQgYWRkcmVzcyBob2xkIHRpbWUgaW4gY3ljbGVzICovCi0JdTggY3ljX2FhdmRoX3dlOy8qIHdyaXRlIGFkZHJlc3MgaG9sZCB0aW1lIGluIGN5Y2xlcyAqLwotCXU4IGN5Y19vZTsJLyogYWNjZXNzIHRpbWUgZnJvbSBPRSBhc3NlcnRpb24gaW4gY3ljbGVzICovCi0JdTggY3ljX3dwbDsJLyogd3JpdGUgZGVhc3NlcnRpb24gdGltZSBpbiBjeWNsZXMgKi8KLQl1MzIgY3ljX2lhYTsJLyogaW5pdGlhbCBhY2Nlc3MgdGltZSBpbiBjeWNsZXMgKi8KLQotCS8qIGV4dHJhIGRlbGF5cyAqLwotCWJvb2wgY2VfeGRlbGF5OwotCWJvb2wgYXZkX3hkZWxheTsKLQlib29sIG9lX3hkZWxheTsKLQlib29sIHdlX3hkZWxheTsKLX07Ci0KLXN0cnVjdCBncG1jX3NldHRpbmdzIHsKLQlib29sIGJ1cnN0X3dyYXA7CS8qIGVuYWJsZXMgd3JhcCBidXJzdGluZyAqLwotCWJvb2wgYnVyc3RfcmVhZDsJLyogZW5hYmxlcyByZWFkIHBhZ2UvYnVyc3QgbW9kZSAqLwotCWJvb2wgYnVyc3Rfd3JpdGU7CS8qIGVuYWJsZXMgd3JpdGUgcGFnZS9idXJzdCBtb2RlICovCi0JYm9vbCBkZXZpY2VfbmFuZDsJLyogZGV2aWNlIGlzIE5BTkQgKi8KLQlib29sIHN5bmNfcmVhZDsJCS8qIGVuYWJsZXMgc3luY2hyb25vdXMgcmVhZHMgKi8KLQlib29sIHN5bmNfd3JpdGU7CS8qIGVuYWJsZXMgc3luY2hyb25vdXMgd3JpdGVzICovCi0JYm9vbCB3YWl0X29uX3JlYWQ7CS8qIG1vbml0b3Igd2FpdCBvbiByZWFkcyAqLwotCWJvb2wgd2FpdF9vbl93cml0ZTsJLyogbW9uaXRvciB3YWl0IG9uIHdyaXRlcyAqLwotCXUzMiBidXJzdF9sZW47CQkvKiBwYWdlL2J1cnN0IGxlbmd0aCAqLwotCXUzMiBkZXZpY2Vfd2lkdGg7CS8qIGRldmljZSBidXMgd2lkdGggKDggb3IgMTYgYml0KSAqLwotCXUzMiBtdXhfYWRkX2RhdGE7CS8qIG11bHRpcGxleCBhZGRyZXNzICYgZGF0YSAqLwotCXUzMiB3YWl0X3BpbjsJCS8qIHdhaXQtcGluIHRvIGJlIHVzZWQgKi8KLX07Ci0KLWV4dGVybiBpbnQgZ3BtY19jYWxjX3RpbWluZ3Moc3RydWN0IGdwbWNfdGltaW5ncyAqZ3BtY190LAotCQkJICAgICBzdHJ1Y3QgZ3BtY19zZXR0aW5ncyAqZ3BtY19zLAotCQkJICAgICBzdHJ1Y3QgZ3BtY19kZXZpY2VfdGltaW5ncyAqZGV2X3QpOwotCi1leHRlcm4gdm9pZCBncG1jX3VwZGF0ZV9uYW5kX3JlZyhzdHJ1Y3QgZ3BtY19uYW5kX3JlZ3MgKnJlZywgaW50IGNzKTsKLWV4dGVybiBpbnQgZ3BtY19nZXRfY2xpZW50X2lycSh1bnNpZ25lZCBpcnFfY29uZmlnKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBncG1jX3RpY2tzX3RvX25zKHVuc2lnbmVkIGludCB0aWNrcyk7Ci0KLWV4dGVybiB2b2lkIGdwbWNfY3Nfd3JpdGVfcmVnKGludCBjcywgaW50IGlkeCwgdTMyIHZhbCk7Ci1leHRlcm4gaW50IGdwbWNfY2FsY19kaXZpZGVyKHVuc2lnbmVkIGludCBzeW5jX2Nsayk7Ci1leHRlcm4gaW50IGdwbWNfY3Nfc2V0X3RpbWluZ3MoaW50IGNzLCBjb25zdCBzdHJ1Y3QgZ3BtY190aW1pbmdzICp0KTsKLWV4dGVybiBpbnQgZ3BtY19jc19wcm9ncmFtX3NldHRpbmdzKGludCBjcywgc3RydWN0IGdwbWNfc2V0dGluZ3MgKnApOwotZXh0ZXJuIGludCBncG1jX2NzX3JlcXVlc3QoaW50IGNzLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgKmJhc2UpOwotZXh0ZXJuIHZvaWQgZ3BtY19jc19mcmVlKGludCBjcyk7Ci1leHRlcm4gdm9pZCBvbWFwM19ncG1jX3NhdmVfY29udGV4dCh2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXAzX2dwbWNfcmVzdG9yZV9jb250ZXh0KHZvaWQpOwotZXh0ZXJuIGludCBncG1jX2NvbmZpZ3VyZShpbnQgY21kLCBpbnQgd3ZhbCk7Ci1leHRlcm4gdm9pZCBncG1jX3JlYWRfc2V0dGluZ3NfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkgIHN0cnVjdCBncG1jX3NldHRpbmdzICpwKTsKLQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvb21hcC1ncG1jLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKaW5kZXggMDdkNGM3Yi4uZGM2ZTc5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwpAQCAtMTQsMTQgKzE0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tb21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oPgogCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAib21hcF9kZXZpY2UuaCIKICNpbmNsdWRlICJvbWFwLXBtLmgiCiAKICNpbmNsdWRlICJtdXguaCIKLSNpbmNsdWRlICJtbWMuaCIKICNpbmNsdWRlICJoc21tYy5oIgogI2luY2x1ZGUgImNvbnRyb2wuaCIKIApAQCAtMzIsMjUgKzMzLDE0IEBACiAKICNkZWZpbmUgSFNNTUNfTkFNRV9MRU4JOQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgJiYgZGVmaW5lZChDT05GSUdfUE0pCi0KLXN0YXRpYyBpbnQgaHNtbWNfZ2V0X2NvbnRleHRfbG9zcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIG9tYXBfcG1fZ2V0X2Rldl9jb250ZXh0X2xvc3NfY291bnQoZGV2KTsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgaHNtbWNfZ2V0X2NvbnRleHRfbG9zcyBOVUxMCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgb21hcF9oc21tYzFfYmVmb3JlX3NldF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwKLQkJCQkgIGludCBwb3dlcl9vbiwgaW50IHZkZCkKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWMxX2JlZm9yZV9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgaW50IHBvd2VyX29uLCBpbnQgdmRkKQogewogCXUzMiByZWcsIHByb2dfaW87Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKLQlpZiAobW1jLT5zbG90c1swXS5yZW11eCkKLQkJbW1jLT5zbG90c1swXS5yZW11eChkZXYsIHNsb3QsIHBvd2VyX29uKTsKKwlpZiAobW1jLT5yZW11eCkKKwkJbW1jLT5yZW11eChkZXYsIHBvd2VyX29uKTsKIAogCS8qCiAJICogQXNzdW1lIHdlIHBvd2VyIGJvdGggT01BUCBWTU1DMSAoZm9yIENNRCwgQ0xLLCBEQVQwLi4zKSBhbmQgdGhlCkBAIC03Miw3ICs2Miw3IEBACiAJCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMSk7CiAJCX0KIAotCQlpZiAobW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykgeworCQlpZiAobW1jLT5pbnRlcm5hbF9jbG9jaykgewogCQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwogCQkJcmVnIHw9IE9NQVAyX01NQ1NESU8xQURQQ0xLSVNFTDsKIAkJCW9tYXBfY3RybF93cml0ZWwocmVnLCBPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKQEAgLTk2LDggKzg2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXBfaHNtbWMxX2FmdGVyX3NldF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwKLQkJCQkgaW50IHBvd2VyX29uLCBpbnQgdmRkKQorc3RhdGljIHZvaWQgb21hcF9oc21tYzFfYWZ0ZXJfc2V0X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCkKIHsKIAl1MzIgcmVnOwogCkBAIC0xMjAsMzQgKzEwOSwzMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaHNtbWMyX3NlbGVjdF9pbnB1dF9jbGtfc3JjKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMpCitzdGF0aWMgdm9pZCBoc21tYzJfc2VsZWN0X2lucHV0X2Nsa19zcmMoc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jKQogewogCXUzMiByZWc7CiAKIAlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoY29udHJvbF9kZXZjb25mMV9vZmZzZXQpOwotCWlmIChtbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrKQorCWlmIChtbWMtPmludGVybmFsX2Nsb2NrKQogCQlyZWcgfD0gT01BUDJfTU1DU0RJTzJBRFBDTEtJU0VMOwogCWVsc2UKIAkJcmVnICY9IH5PTUFQMl9NTUNTRElPMkFEUENMS0lTRUw7CiAJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0KTsKIH0KIAotc3RhdGljIHZvaWQgaHNtbWMyX2JlZm9yZV9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCi0JCQkJICAgaW50IHBvd2VyX29uLCBpbnQgdmRkKQorc3RhdGljIHZvaWQgaHNtbWMyX2JlZm9yZV9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBvd2VyX29uLCBpbnQgdmRkKQogewotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCi0JaWYgKG1tYy0+c2xvdHNbMF0ucmVtdXgpCi0JCW1tYy0+c2xvdHNbMF0ucmVtdXgoZGV2LCBzbG90LCBwb3dlcl9vbik7CisJaWYgKG1tYy0+cmVtdXgpCisJCW1tYy0+cmVtdXgoZGV2LCBwb3dlcl9vbik7CiAKIAlpZiAocG93ZXJfb24pCiAJCWhzbW1jMl9zZWxlY3RfaW5wdXRfY2xrX3NyYyhtbWMpOwogfQogCi1zdGF0aWMgaW50IGFtMzV4X2hzbW1jMl9zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwKLQkJCQkgIGludCBwb3dlcl9vbiwgaW50IHZkZCkKK3N0YXRpYyBpbnQgYW0zNXhfaHNtbWMyX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCkKIHsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAogCWlmIChwb3dlcl9vbikKIAkJaHNtbWMyX3NlbGVjdF9pbnB1dF9jbGtfc3JjKG1tYyk7CkBAIC0xNTUsMjMgKzE0MiwyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5vcF9tbWNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKLQkJCQkJCQlpbnQgdmRkKQorc3RhdGljIGludCBub3BfbW1jX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaHNtbWNfbXV4KHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWNfY29udHJvbGxlciwKLQkJCWludCBjb250cm9sbGVyX25yKQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaHNtbWNfbXV4KHN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEKKwkJCQkgICptbWNfY29udHJvbGxlciwgaW50IGNvbnRyb2xsZXJfbnIpCiB7Ci0JaWYgKGdwaW9faXNfdmFsaWQobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLnN3aXRjaF9waW4pICYmCi0JCShtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uc3dpdGNoX3BpbiA8IE9NQVBfTUFYX0dQSU9fTElORVMpKQotCQlvbWFwX211eF9pbml0X2dwaW8obW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLnN3aXRjaF9waW4sCi0JCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7Ci0JaWYgKGdwaW9faXNfdmFsaWQobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmdwaW9fd3ApICYmCi0JCShtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uZ3Bpb193cCA8IE9NQVBfTUFYX0dQSU9fTElORVMpKQotCQlvbWFwX211eF9pbml0X2dwaW8obW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmdwaW9fd3AsCi0JCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJaWYgKGdwaW9faXNfdmFsaWQobW1jX2NvbnRyb2xsZXItPnN3aXRjaF9waW4pICYmCisJICAgIChtbWNfY29udHJvbGxlci0+c3dpdGNoX3BpbiA8IE9NQVBfTUFYX0dQSU9fTElORVMpKQorCQlvbWFwX211eF9pbml0X2dwaW8obW1jX2NvbnRyb2xsZXItPnN3aXRjaF9waW4sCisJCQkJICAgT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwlpZiAoZ3Bpb19pc192YWxpZChtbWNfY29udHJvbGxlci0+Z3Bpb193cCkgJiYKKwkgICAgKG1tY19jb250cm9sbGVyLT5ncGlvX3dwIDwgT01BUF9NQVhfR1BJT19MSU5FUykpCisJCW9tYXBfbXV4X2luaXRfZ3BpbyhtbWNfY29udHJvbGxlci0+Z3Bpb193cCwKKwkJCQkgICBPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwogCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQlpZiAoY29udHJvbGxlcl9uciA9PSAwKSB7CiAJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2NsayIsCkBAIC0xODAsNyArMTY2LDcgQEAKIAkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwogCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQwIiwKIAkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwotCQkJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5jYXBzICYKKwkJCWlmIChtbWNfY29udHJvbGxlci0+Y2FwcyAmCiAJCQkJKE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQSkpIHsKIAkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2RhdDEiLAogCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwpAQCAtMTg5LDcgKzE3NSw3IEBACiAJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQzIiwKIAkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAkJCX0KLQkJCWlmIChtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uY2FwcyAmCisJCQlpZiAobW1jX2NvbnRyb2xsZXItPmNhcHMgJgogCQkJCQkJTU1DX0NBUF84X0JJVF9EQVRBKSB7CiAJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQ0IiwKIAkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKQEAgLTIxNCw3ICsyMDAsNyBAQAogCQkJICogRm9yIDggd2lyZSBjb25maWd1cmF0aW9ucywgTGluZXMgREFUNCwgNSwgNiBhbmQgNwogCQkJICogbmVlZCB0byBiZSBtdXhlZCBpbiB0aGUgYm9hcmQtKi5jIGZpbGVzCiAJCQkgKi8KLQkJCWlmIChtbWNfY29udHJvbGxlci0+c2xvdHNbMF0uY2FwcyAmCisJCQlpZiAobW1jX2NvbnRyb2xsZXItPmNhcHMgJgogCQkJCShNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEpKSB7CiAJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQxIiwKIAkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKQEAgLTIyMyw3ICsyMDksNyBAQAogCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0MyIsCiAJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CiAJCQl9Ci0JCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLmNhcHMgJgorCQkJaWYgKG1tY19jb250cm9sbGVyLT5jYXBzICYKIAkJCQkJCQlNTUNfQ0FQXzhfQklUX0RBVEEpIHsKIAkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2RhdDQuc2RtbWMyX2RhdDQiLAogCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwpAQCAtMjQzLDcgKzIyOSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaHNtbWNfcGRhdGFfaW5pdChzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyAqYywKLQkJCQkJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYykKKwkJCQkJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jKQogewogCWNoYXIgKmhjX25hbWU7CiAKQEAgLTI1OSwzOCArMjQ1LDIyIEBACiAJZWxzZQogCQlzbnByaW50ZihoY19uYW1lLCAoSFNNTUNfTkFNRV9MRU4gKyAxKSwgIm1tYyVpc2xvdCVpIiwKIAkJCQkJCQkJYy0+bW1jLCAxKTsKLQltbWMtPnNsb3RzWzBdLm5hbWUgPSBoY19uYW1lOwotCW1tYy0+bnJfc2xvdHMgPSAxOwotCW1tYy0+c2xvdHNbMF0uY2FwcyA9IGMtPmNhcHM7Ci0JbW1jLT5zbG90c1swXS5wbV9jYXBzID0gYy0+cG1fY2FwczsKLQltbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrID0gIWMtPmV4dF9jbG9jazsKLQltbWMtPm1heF9mcmVxID0gYy0+bWF4X2ZyZXE7CisJbW1jLT5uYW1lID0gaGNfbmFtZTsKKwltbWMtPmNhcHMgPSBjLT5jYXBzOworCW1tYy0+aW50ZXJuYWxfY2xvY2sgPSAhYy0+ZXh0X2Nsb2NrOwogCW1tYy0+cmVnX29mZnNldCA9IDA7Ci0JbW1jLT5nZXRfY29udGV4dF9sb3NzX2NvdW50ID0gaHNtbWNfZ2V0X2NvbnRleHRfbG9zczsKIAotCW1tYy0+c2xvdHNbMF0uc3dpdGNoX3BpbiA9IGMtPmdwaW9fY2Q7Ci0JbW1jLT5zbG90c1swXS5ncGlvX3dwID0gYy0+Z3Bpb193cDsKKwltbWMtPnN3aXRjaF9waW4gPSBjLT5ncGlvX2NkOworCW1tYy0+Z3Bpb193cCA9IGMtPmdwaW9fd3A7CiAKLQltbWMtPnNsb3RzWzBdLnJlbXV4ID0gYy0+cmVtdXg7Ci0JbW1jLT5zbG90c1swXS5pbml0X2NhcmQgPSBjLT5pbml0X2NhcmQ7CisJbW1jLT5yZW11eCA9IGMtPnJlbXV4OworCW1tYy0+aW5pdF9jYXJkID0gYy0+aW5pdF9jYXJkOwogCiAJaWYgKGMtPmNvdmVyX29ubHkpCi0JCW1tYy0+c2xvdHNbMF0uY292ZXIgPSAxOworCQltbWMtPmNvdmVyID0gMTsKIAogCWlmIChjLT5ub25yZW1vdmFibGUpCi0JCW1tYy0+c2xvdHNbMF0ubm9ucmVtb3ZhYmxlID0gMTsKLQotCWlmIChjLT5wb3dlcl9zYXZpbmcpCi0JCW1tYy0+c2xvdHNbMF0ucG93ZXJfc2F2aW5nID0gMTsKLQotCWlmIChjLT5ub19vZmYpCi0JCW1tYy0+c2xvdHNbMF0ubm9fb2ZmID0gMTsKLQotCWlmIChjLT5ub19vZmZfaW5pdCkKLQkJbW1jLT5zbG90c1swXS5ub19yZWd1bGF0b3Jfb2ZmX2luaXQgPSBjLT5ub19vZmZfaW5pdDsKLQotCWlmIChjLT52Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXApCi0JCW1tYy0+c2xvdHNbMF0udmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwID0gMTsKKwkJbW1jLT5ub25yZW1vdmFibGUgPSAxOwogCiAJLyoKIAkgKiBOT1RFOiAgTU1DIHNsb3RzIHNob3VsZCBoYXZlIGEgVmNjIHJlZ3VsYXRvciBzZXQgdXAuCkBAIC0zMDAsNDIgKzI3MCw0MiBAQAogCSAqIHRlbXBvcmFyeSBIQUNLOiBvY3JfbWFzayBpbnN0ZWFkIG9mIGZpeGVkIHN1cHBseQogCSAqLwogCWlmIChzb2NfaXNfYW0zNXh4KCkpCi0JCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBNTUNfVkREXzE2NV8xOTUgfAorCQltbWMtPm9jcl9tYXNrID0gTU1DX1ZERF8xNjVfMTk1IHwKIAkJCQkJIE1NQ19WRERfMjZfMjcgfAogCQkJCQkgTU1DX1ZERF8yN18yOCB8CiAJCQkJCSBNTUNfVkREXzI5XzMwIHwKIAkJCQkJIE1NQ19WRERfMzBfMzEgfAogCQkJCQkgTU1DX1ZERF8zMV8zMjsKIAllbHNlCi0JCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBjLT5vY3JfbWFzazsKKwkJbW1jLT5vY3JfbWFzayA9IGMtPm9jcl9tYXNrOwogCiAJaWYgKCFzb2NfaXNfYW0zNXh4KCkpCi0JCW1tYy0+c2xvdHNbMF0uZmVhdHVyZXMgfD0gSFNNTUNfSEFTX1BCSUFTOworCQltbWMtPmZlYXR1cmVzIHw9IEhTTU1DX0hBU19QQklBUzsKIAogCXN3aXRjaCAoYy0+bW1jKSB7CiAJY2FzZSAxOgotCQlpZiAobW1jLT5zbG90c1swXS5mZWF0dXJlcyAmIEhTTU1DX0hBU19QQklBUykgeworCQlpZiAobW1jLT5mZWF0dXJlcyAmIEhTTU1DX0hBU19QQklBUykgewogCQkJLyogb24tY2hpcCBsZXZlbCBzaGlmdGluZyB2aWEgUEJJQVMwL1BCSUFTMSAqLwotCQkJbW1jLT5zbG90c1swXS5iZWZvcmVfc2V0X3JlZyA9CisJCQltbWMtPmJlZm9yZV9zZXRfcmVnID0KIAkJCQkJb21hcF9oc21tYzFfYmVmb3JlX3NldF9yZWc7Ci0JCQltbWMtPnNsb3RzWzBdLmFmdGVyX3NldF9yZWcgPQorCQkJbW1jLT5hZnRlcl9zZXRfcmVnID0KIAkJCQkJb21hcF9oc21tYzFfYWZ0ZXJfc2V0X3JlZzsKIAkJfQogCiAJCWlmIChzb2NfaXNfYW0zNXh4KCkpCi0JCQltbWMtPnNsb3RzWzBdLnNldF9wb3dlciA9IG5vcF9tbWNfc2V0X3Bvd2VyOworCQkJbW1jLT5zZXRfcG93ZXIgPSBub3BfbW1jX3NldF9wb3dlcjsKIAogCQkvKiBPTUFQMzYzMCBIU01NQzEgc3VwcG9ydHMgb25seSA0LWJpdCAqLwogCQlpZiAoY3B1X2lzX29tYXAzNjMwKCkgJiYKIAkJCQkoYy0+Y2FwcyAmIE1NQ19DQVBfOF9CSVRfREFUQSkpIHsKIAkJCWMtPmNhcHMgJj0gfk1NQ19DQVBfOF9CSVRfREFUQTsKIAkJCWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwotCQkJbW1jLT5zbG90c1swXS5jYXBzID0gYy0+Y2FwczsKKwkJCW1tYy0+Y2FwcyA9IGMtPmNhcHM7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAyOgogCQlpZiAoc29jX2lzX2FtMzV4eCgpKQotCQkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSBhbTM1eF9oc21tYzJfc2V0X3Bvd2VyOworCQkJbW1jLT5zZXRfcG93ZXIgPSBhbTM1eF9oc21tYzJfc2V0X3Bvd2VyOwogCiAJCWlmIChjLT5leHRfY2xvY2spCiAJCQljLT50cmFuc2NlaXZlciA9IDE7CkBAIC0zNDMsMTcgKzMxMywxNyBAQAogCQkJYy0+Y2FwcyAmPSB+TU1DX0NBUF84X0JJVF9EQVRBOwogCQkJYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAJCX0KLQkJaWYgKG1tYy0+c2xvdHNbMF0uZmVhdHVyZXMgJiBIU01NQ19IQVNfUEJJQVMpIHsKKwkJaWYgKG1tYy0+ZmVhdHVyZXMgJiBIU01NQ19IQVNfUEJJQVMpIHsKIAkJCS8qIG9mZi1jaGlwIGxldmVsIHNoaWZ0aW5nLCBvciBub25lICovCi0JCQltbWMtPnNsb3RzWzBdLmJlZm9yZV9zZXRfcmVnID0gaHNtbWMyX2JlZm9yZV9zZXRfcmVnOwotCQkJbW1jLT5zbG90c1swXS5hZnRlcl9zZXRfcmVnID0gTlVMTDsKKwkJCW1tYy0+YmVmb3JlX3NldF9yZWcgPSBoc21tYzJfYmVmb3JlX3NldF9yZWc7CisJCQltbWMtPmFmdGVyX3NldF9yZWcgPSBOVUxMOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMzoKIAljYXNlIDQ6CiAJY2FzZSA1OgotCQltbWMtPnNsb3RzWzBdLmJlZm9yZV9zZXRfcmVnID0gTlVMTDsKLQkJbW1jLT5zbG90c1swXS5hZnRlcl9zZXRfcmVnID0gTlVMTDsKKwkJbW1jLT5iZWZvcmVfc2V0X3JlZyA9IE5VTEw7CisJCW1tYy0+YWZ0ZXJfc2V0X3JlZyA9IE5VTEw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigiTU1DJWQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkIVxuIiwgYy0+bW1jKTsKQEAgLTM2OCw3ICszMzgsNyBAQAogdm9pZCBvbWFwX2hzbW1jX2xhdGVfaW5pdChzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyAqYykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWNfcGRhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqbW1jX3BkYXRhOwogCWludCByZXM7CiAKIAlpZiAob21hcF9oc21tY19kb25lICE9IDEpCkBAIC0zODgsOCArMzU4LDggQEAKIAkJaWYgKCFtbWNfcGRhdGEpCiAJCQljb250aW51ZTsKIAotCQltbWNfcGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSBjLT5ncGlvX2NkOwotCQltbWNfcGRhdGEtPnNsb3RzWzBdLmdwaW9fd3AgPSBjLT5ncGlvX3dwOworCQltbWNfcGRhdGEtPnN3aXRjaF9waW4gPSBjLT5ncGlvX2NkOworCQltbWNfcGRhdGEtPmdwaW9fd3AgPSBjLT5ncGlvX3dwOwogCiAJCXJlcyA9IG9tYXBfZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOwogCQlpZiAocmVzKQpAQCAtNDA4LDEyICszNzgsMTIgQEAKIAlzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJY2hhciBvaF9uYW1lW01BWF9PTUFQX01NQ19IV01PRF9OQU1FX0xFTl07Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tY19kYXRhOwotCXN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciAqbW1jX2Rldl9hdHRyOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tY19kYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyICptbWNfZGV2X2F0dHI7CiAJY2hhciAqbmFtZTsKIAlpbnQgcmVzOwogCi0JbW1jX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSksIEdGUF9LRVJORUwpOworCW1tY19kYXRhID0ga3phbGxvYyhzaXplb2YoKm1tY19kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtbWNfZGF0YSkgewogCQlwcl9lcnIoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1tYyBkZXZpY2UhXG4iKTsKIAkJcmV0dXJuOwpAQCAtNDYzLDcgKzQzMyw3IEBACiAJfQogCiAJcmVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIG1tY19kYXRhLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhKSk7CisJCQkgICAgICBzaXplb2Yoc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSkpOwogCWlmIChyZXMpIHsKIAkJcHJfZXJyKCJDb3VsZCBub3QgYWRkIHBkYXRhIGZvciAlc1xuIiwgbmFtZSk7CiAJCWdvdG8gcHV0X3BkZXY7CkBAIC00ODksNyArNDU5LDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogCiBmcmVlX25hbWU6Ci0Ja2ZyZWUobW1jX2RhdGEtPnNsb3RzWzBdLm5hbWUpOworCWtmcmVlKG1tY19kYXRhLT5uYW1lKTsKIAogZnJlZV9tbWM6CiAJa2ZyZWUobW1jX2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oCmluZGV4IDdmMmU3OTAuLjE0OGNkOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmgKQEAgLTEyLDI1ICsxMiwxOCBAQAogCXU4CW1tYzsJCS8qIGNvbnRyb2xsZXIgMS8yLzMgKi8KIAl1MzIJY2FwczsJCS8qIDQvOCB3aXJlcyBhbmQgYW55IGFkZGl0aW9uYWwgaG9zdAogCQkJCSAqIGNhcGFiaWxpdGllcyBPUidkIChyZWYuIGxpbnV4L21tYy9ob3N0LmgpICovCi0JdTMyCXBtX2NhcHM7CS8qIFBNIGNhcGFiaWxpdGllcyAqLwogCWJvb2wJdHJhbnNjZWl2ZXI7CS8qIE1NQy0yIG9wdGlvbiAqLwogCWJvb2wJZXh0X2Nsb2NrOwkvKiB1c2UgZXh0ZXJuYWwgcGluIGZvciBpbnB1dCBjbG9jayAqLwogCWJvb2wJY292ZXJfb25seTsJLyogTm8gY2FyZCBkZXRlY3QgLSBqdXN0IGNvdmVyIHN3aXRjaCAqLwogCWJvb2wJbm9ucmVtb3ZhYmxlOwkvKiBOb25yZW1vdmFibGUgZS5nLiBlTU1DICovCi0JYm9vbAlwb3dlcl9zYXZpbmc7CS8qIFRyeSB0byBzbGVlcCBvciBwb3dlciBvZmYgd2hlbiBwb3NzaWJsZSAqLwotCWJvb2wJbm9fb2ZmOwkJLyogcG93ZXJfc2F2aW5nIGFuZCBwb3dlciBpcyBub3QgdG8gZ28gb2ZmICovCi0JYm9vbAlub19vZmZfaW5pdDsJLyogbm8gcG93ZXIgb2ZmIHdoZW4gbm90IGluIE1NQyBzbGVlcCBzdGF0ZSAqLwotCWJvb2wJdmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwOyAvKiBSZWd1bGF0b3Igb2ZmIHJlbWFwcGVkIHRvIHNsZWVwICovCiAJYm9vbAlkZWZlcnJlZDsJLyogbW1jIG5lZWRzIGEgZGVmZXJyZWQgcHJvYmUgKi8KIAlpbnQJZ3Bpb19jZDsJLyogb3IgLUVJTlZBTCAqLwogCWludAlncGlvX3dwOwkvKiBvciAtRUlOVkFMICovCiAJY2hhcgkqbmFtZTsJCS8qIG9yIE5VTEwgZm9yIGRlZmF1bHQgKi8KIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwkvKiBtbWMgY29udHJvbGxlciBpbnN0YW5jZSAqLwogCWludAlvY3JfbWFzazsJLyogdGVtcG9yYXJ5IEhBQ0sgKi8KLQlpbnQJbWF4X2ZyZXE7CS8qIG1heGltdW0gY2xvY2ssIGlmIGNvbnN0cmFpbmVkIGJ5IGV4dGVybmFsCi0JCQkJICogY2lyY3VpdHJ5LCBvciAwIGZvciBkZWZhdWx0ICovCiAJLyogUmVtdXggKHBhZCBjb25maWd1cmF0aW9uKSB3aGVuIHBvd2VyaW5nIG9uL29mZiAqLwotCXZvaWQgKCpyZW11eCkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uKTsKKwl2b2lkICgqcmVtdXgpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBvd2VyX29uKTsKIAkvKiBpbml0IHNvbWUgc3BlY2lhbCBjYXJkICovCiAJdm9pZCAoKmluaXRfY2FyZCkoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggMDNjYmIxNi4uYTFiZDZhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtNDUsMTMgKzQ1LDE1IEBACiAjaW5jbHVkZSAic3JhbS5oIgogI2luY2x1ZGUgImNtMnh4eC5oIgogI2luY2x1ZGUgImNtM3h4eC5oIgorI2luY2x1ZGUgImNtMzN4eC5oIgorI2luY2x1ZGUgImNtNDR4eC5oIgogI2luY2x1ZGUgInBybS5oIgogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAicHJjbV9tcHU0NHh4LmgiCiAjaW5jbHVkZSAicHJtaW5zdDQ0eHguaCIKLSNpbmNsdWRlICJjbWluc3Q0NHh4LmgiCiAjaW5jbHVkZSAicHJtMnh4eC5oIgogI2luY2x1ZGUgInBybTN4eHguaCIKKyNpbmNsdWRlICJwcm0zM3h4LmgiCiAjaW5jbHVkZSAicHJtNDR4eC5oIgogI2luY2x1ZGUgIm9wcDJ4eHguaCIKIApAQCAtMzU5LDcgKzM2MSw3IEBACiAJdTggcG9zdHNldHVwX3N0YXRlOwogCiAJLyogU2V0IHRoZSBkZWZhdWx0IHBvc3RzZXR1cCBzdGF0ZSBmb3IgYWxsIGh3bW9kcyAqLwotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAJcG9zdHNldHVwX3N0YXRlID0gX0hXTU9EX1NUQVRFX0lETEU7CiAjZWxzZQogCXBvc3RzZXR1cF9zdGF0ZSA9IF9IV01PRF9TVEFURV9FTkFCTEVEOwpAQCAtNTY1LDYgKzU2Nyw4IEBACiAJb21hcDJfc2V0X2dsb2JhbHNfY20oQU0zM1hYX0w0X1dLX0lPX0FERFJFU1MoQU0zM1hYX1BSQ01fQkFTRSksIE5VTEwpOwogCW9tYXAzeHh4X2NoZWNrX3JldmlzaW9uKCk7CiAJYW0zM3h4X2NoZWNrX2ZlYXR1cmVzKCk7CisJYW0zM3h4X3BybV9pbml0KCk7CisJYW0zM3h4X2NtX2luaXQoKTsKIAlhbTMzeHhfcG93ZXJkb21haW5zX2luaXQoKTsKIAlhbTMzeHhfY2xvY2tkb21haW5zX2luaXQoKTsKIAlhbTMzeHhfaHdtb2RfaW5pdCgpOwpAQCAtNTkxLDYgKzU5NSw4IEBACiAJb21hcF9jbV9iYXNlX2luaXQoKTsKIAlvbWFwM3h4eF9jaGVja19yZXZpc2lvbigpOwogCWFtMzN4eF9jaGVja19mZWF0dXJlcygpOworCW9tYXA0NHh4X3BybV9pbml0KCk7CisJb21hcDRfY21faW5pdCgpOwogCWFtNDN4eF9wb3dlcmRvbWFpbnNfaW5pdCgpOwogCWFtNDN4eF9jbG9ja2RvbWFpbnNfaW5pdCgpOwogCWFtNDN4eF9od21vZF9pbml0KCk7CkBAIC02MjAsNiArNjI2LDcgQEAKIAlvbWFwX2NtX2Jhc2VfaW5pdCgpOwogCW9tYXA0eHh4X2NoZWNrX3JldmlzaW9uKCk7CiAJb21hcDR4eHhfY2hlY2tfZmVhdHVyZXMoKTsKKwlvbWFwNF9jbV9pbml0KCk7CiAJb21hcDRfcG1faW5pdF9lYXJseSgpOwogCW9tYXA0NHh4X3BybV9pbml0KCk7CiAJb21hcDQ0eHhfdm9sdGFnZWRvbWFpbnNfaW5pdCgpOwpAQCAtNjU1LDYgKzY2Miw3IEBACiAJb21hcF9jbV9iYXNlX2luaXQoKTsKIAlvbWFwNDR4eF9wcm1faW5pdCgpOwogCW9tYXA1eHh4X2NoZWNrX3JldmlzaW9uKCk7CisJb21hcDRfY21faW5pdCgpOwogCW9tYXA1NHh4X3ZvbHRhZ2Vkb21haW5zX2luaXQoKTsKIAlvbWFwNTR4eF9wb3dlcmRvbWFpbnNfaW5pdCgpOwogCW9tYXA1NHh4X2Nsb2NrZG9tYWluc19pbml0KCk7CkBAIC02ODYsNiArNjk0LDcgQEAKIAlvbWFwX2NtX2Jhc2VfaW5pdCgpOwogCW9tYXA0NHh4X3BybV9pbml0KCk7CiAJZHJhN3h4eF9jaGVja19yZXZpc2lvbigpOworCW9tYXA0X2NtX2luaXQoKTsKIAlkcmE3eHhfcG93ZXJkb21haW5zX2luaXQoKTsKIAlkcmE3eHhfY2xvY2tkb21haW5zX2luaXQoKTsKIAlkcmE3eHhfaHdtb2RfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLmgKaW5kZXggMGNkNGIwOC4uMzBkMzliOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy5oCkBAIC0xLDUgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tbWMtb21hcC5oPgogCiAjZGVmaW5lIE9NQVAyNFhYX05SX01NQwkJMgogI2RlZmluZSBPTUFQMjQyMF9NTUNfU0laRQlPTUFQMV9NTUNfU0laRQpAQCAtNywxNCArNSw2IEBACiAKICNkZWZpbmUgT01BUDRfTU1DX1JFR19PRkZTRVQJMHgxMDAKIAotI2lmIGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpCi12b2lkIG9tYXAyNDJ4X2luaXRfbW1jKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICoqbW1jX2RhdGEpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMjQyeF9pbml0X21tYyhzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqKm1tY19kYXRhKQotewotfQotI2VuZGlmCi0KIHN0cnVjdCBvbWFwX2h3bW9kOwogaW50IG9tYXBfbXNkaV9yZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtbXB1c3MtbG93cG93ZXIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1tcHVzcy1sb3dwb3dlci5jCmluZGV4IDY5NDRhZTMuLjc5ZjQ5ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1tcHVzcy1sb3dwb3dlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1tcHVzcy1sb3dwb3dlci5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIGludCBvbWFwNF9lbnRlcl9sb3dwb3dlcih1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGUpCiB7CiAJc3RydWN0IG9tYXA0X2NwdV9wbV9pbmZvICpwbV9pbmZvID0gJnBlcl9jcHUob21hcDRfcG1faW5mbywgY3B1KTsKLQl1bnNpZ25lZCBpbnQgc2F2ZV9zdGF0ZSA9IDA7CisJdW5zaWduZWQgaW50IHNhdmVfc3RhdGUgPSAwLCBjcHVfbG9naWNfc3RhdGUgPSBQV1JETV9QT1dFUl9SRVQ7CiAJdW5zaWduZWQgaW50IHdha2V1cF9jcHU7CiAKIAlpZiAob21hcF9yZXYoKSA9PSBPTUFQNDQzMF9SRVZfRVMxXzApCkBAIC0yMzksNiArMjM5LDcgQEAKIAkJc2F2ZV9zdGF0ZSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgUFdSRE1fUE9XRVJfT0ZGOgorCQljcHVfbG9naWNfc3RhdGUgPSBQV1JETV9QT1dFUl9PRkY7CiAJCXNhdmVfc3RhdGUgPSAxOwogCQlicmVhazsKIAljYXNlIFBXUkRNX1BPV0VSX1JFVDoKQEAgLTI3MCw2ICsyNzEsNyBAQAogCiAJY3B1X2NsZWFyX3ByZXZfbG9naWNfcHdyc3QoY3B1KTsKIAlwd3JkbV9zZXRfbmV4dF9wd3JzdChwbV9pbmZvLT5wd3JkbSwgcG93ZXJfc3RhdGUpOworCXB3cmRtX3NldF9sb2dpY19yZXRzdChwbV9pbmZvLT5wd3JkbSwgY3B1X2xvZ2ljX3N0YXRlKTsKIAlzZXRfY3B1X3dha2V1cF9hZGRyKGNwdSwgdmlydF90b19waHlzKG9tYXBfcG1fb3BzLnJlc3VtZSkpOwogCW9tYXBfcG1fb3BzLnNjdV9wcmVwYXJlKGNwdSwgcG93ZXJfc3RhdGUpOwogCWwyeDBfcHdyc3RfcHJlcGFyZShjcHUsIHNhdmVfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMi1yZXN0YXJ0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAyLXJlc3RhcnQuYwppbmRleCA2ODQyM2UyLi5kOTM3YjJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAyLXJlc3RhcnQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAyLXJlc3RhcnQuYwpAQCAtMTUsNyArMTUsNyBAQAogCiAjaW5jbHVkZSAic29jLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAicHJtMnh4eC5oIgorI2luY2x1ZGUgInBybS5oIgogCiAvKgogICogcmVzZXRfdmlydF9wcmNtX3NldF9jaywgcmVzZXRfc3lzX2NrOiBwb2ludGVycyB0byB0aGUgdmlydF9wcmNtX3NldApAQCAtNDAsOCArNDAsNyBAQAogCiAJLyogWFhYIFNob3VsZCBzYXZlIHRoZSBjbWQgYXJndW1lbnQgZm9yIHVzZSBhZnRlciB0aGUgcmVib290ICovCiAKLQlvbWFwMnh4eF9wcm1fZHBsbF9yZXNldCgpOyAvKiBuZXZlciByZXR1cm5zICovCi0Jd2hpbGUgKDEpOworCW9tYXBfcHJtX3Jlc2V0X3N5c3RlbSgpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDMtcmVzdGFydC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMy1yZXN0YXJ0LmMKaW5kZXggNWRlMmEwYy4uMTAzYTQ5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMy1yZXN0YXJ0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMy1yZXN0YXJ0LmMKQEAgLTE0LDEwICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCi0jaW5jbHVkZSAiaW9tYXAuaCIKLSNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJjb250cm9sLmgiCi0jaW5jbHVkZSAicHJtM3h4eC5oIgorI2luY2x1ZGUgInBybS5oIgogCiAvKiBHbG9iYWwgYWRkcmVzcyBiYXNlIHNldHVwIGNvZGUgKi8KIApAQCAtMzIsNiArMzAsNSBAQAogdm9pZCBvbWFwM3h4eF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCW9tYXAzX2N0cmxfd3JpdGVfYm9vdF9tb2RlKChjbWQgPyAodTgpKmNtZCA6IDApKTsKLQlvbWFwM3h4eF9wcm1fZHBsbDNfcmVzZXQoKTsgLyogbmV2ZXIgcmV0dXJucyAqLwotCXdoaWxlICgxKTsKKwlvbWFwX3BybV9yZXNldF9zeXN0ZW0oKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LWNvbW1vbi5jCmluZGV4IDE2YjIwY2UuLmI3Y2I0NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgInNvYy5oIgogI2luY2x1ZGUgImlvbWFwLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAicHJtaW5zdDQ0eHguaCIKICNpbmNsdWRlICJwcmNtX21wdTQ0eHguaCIKICNpbmNsdWRlICJvbWFwNC1zYXItbGF5b3V0LmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LXJlc3RhcnQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtcmVzdGFydC5jCmluZGV4IDQxZGZkN2QuLmE5OWU3ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtcmVzdGFydC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtcmVzdGFydC5jCkBAIC05LDcgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlICJwcm1pbnN0NDR4eC5oIgorI2luY2x1ZGUgInBybS5oIgogCiAvKioKICAqIG9tYXA0NHh4X3Jlc3RhcnQgLSB0cmlnZ2VyIGEgc29mdHdhcmUgcmVzdGFydCBvZiB0aGUgU29DCkBAIC0yMiw3ICsyMiw1IEBACiB2b2lkIG9tYXA0NHh4X3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyogWFhYIFNob3VsZCBzYXZlICdjbWQnIGludG8gc2NyYXRjaHBhZCBmb3IgdXNlIGFmdGVyIHJlYm9vdCAqLwotCW9tYXA0X3BybWluc3RfZ2xvYmFsX3dhcm1fc3dfcmVzZXQoKTsgLyogbmV2ZXIgcmV0dXJucyAqLwotCXdoaWxlICgxKQotCQk7CisJb21hcF9wcm1fcmVzZXRfc3lzdGVtKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMKaW5kZXggOGM1OGI3MS4uYmU5NTQxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYwpAQCAtNTg4LDcgKzU4OCw3IEBACiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IF9vZF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKaW5kZXggNzE2MjQ3ZS4uY2JiOTA4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKQEAgLTE1Myw3ICsxNTMsNiBAQAogI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCiAjaW5jbHVkZSAiY20yeHh4LmgiCiAjaW5jbHVkZSAiY20zeHh4LmgiCi0jaW5jbHVkZSAiY21pbnN0NDR4eC5oIgogI2luY2x1ZGUgImNtMzN4eC5oIgogI2luY2x1ZGUgInBybS5oIgogI2luY2x1ZGUgInBybTN4eHguaCIKQEAgLTk3OSwzMSArOTc4LDkgQEAKIAlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6ICVzOiAlZFxuIiwKIAkJIG9oLT5uYW1lLCBfX2Z1bmNfXywgb2gtPnByY20ub21hcDQubW9kdWxlbW9kZSk7CiAKLQlvbWFwNF9jbWluc3RfbW9kdWxlX2VuYWJsZShvaC0+cHJjbS5vbWFwNC5tb2R1bGVtb2RlLAotCQkJCSAgIG9oLT5jbGtkbS0+cHJjbV9wYXJ0aXRpb24sCi0JCQkJICAgb2gtPmNsa2RtLT5jbV9pbnN0LAotCQkJCSAgIG9oLT5jbGtkbS0+Y2xrZG1fb2ZmcywKLQkJCQkgICBvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMpOwotfQotCi0vKioKLSAqIF9hbTMzeHhfZW5hYmxlX21vZHVsZSAtIGVuYWJsZSBDTEtDVFJMIG1vZHVsZW1vZGUgb24gQU0zM1hYCi0gKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKLSAqCi0gKiBFbmFibGVzIHRoZSBQUkNNIG1vZHVsZSBtb2RlIHJlbGF0ZWQgdG8gdGhlIGh3bW9kIEBvaC4KLSAqIE5vIHJldHVybiB2YWx1ZS4KLSAqLwotc3RhdGljIHZvaWQgX2FtMzN4eF9lbmFibGVfbW9kdWxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKLXsKLQlpZiAoIW9oLT5jbGtkbSB8fCAhb2gtPnByY20ub21hcDQubW9kdWxlbW9kZSkKLQkJcmV0dXJuOwotCi0JcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiAlczogJWRcbiIsCi0JCSBvaC0+bmFtZSwgX19mdW5jX18sIG9oLT5wcmNtLm9tYXA0Lm1vZHVsZW1vZGUpOwotCi0JYW0zM3h4X2NtX21vZHVsZV9lbmFibGUob2gtPnByY20ub21hcDQubW9kdWxlbW9kZSwgb2gtPmNsa2RtLT5jbV9pbnN0LAotCQkJCW9oLT5jbGtkbS0+Y2xrZG1fb2ZmcywKLQkJCQlvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMpOworCW9tYXBfY21fbW9kdWxlX2VuYWJsZShvaC0+cHJjbS5vbWFwNC5tb2R1bGVtb2RlLAorCQkJICAgICAgb2gtPmNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCSAgICAgIG9oLT5jbGtkbS0+Y21faW5zdCwgb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzKTsKIH0KIAogLyoqCkBAIC0xMDI2LDM1ICsxMDAzLDkgQEAKIAlpZiAob2gtPmZsYWdzICYgSFdNT0RfTk9fSURMRVNUKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfaWRsZShvaC0+Y2xrZG0tPnByY21fcGFydGl0aW9uLAotCQkJCQkgICAgIG9oLT5jbGtkbS0+Y21faW5zdCwKLQkJCQkJICAgICBvaC0+Y2xrZG0tPmNsa2RtX29mZnMsCi0JCQkJCSAgICAgb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzKTsKLX0KLQotLyoqCi0gKiBfYW0zM3h4X3dhaXRfdGFyZ2V0X2Rpc2FibGUgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBiZSBkaXNhYmxlZCBvbiBBTTMzWFgKLSAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgotICoKLSAqIFdhaXQgZm9yIGEgbW9kdWxlIEBvaCB0byBlbnRlciBzbGF2ZSBpZGxlLiAgUmV0dXJucyAwIGlmIHRoZSBtb2R1bGUKLSAqIGRvZXMgbm90IGhhdmUgYW4gSURMRVNUIGJpdCBvciBpZiB0aGUgbW9kdWxlIHN1Y2Nlc3NmdWxseSBlbnRlcnMKLSAqIHNsYXZlIGlkbGU7IG90aGVyd2lzZSwgcGFzcyBhbG9uZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZQotICogYXBwcm9wcmlhdGUgKl9jbSpfd2FpdF9tb2R1bGVfaWRsZSgpIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgaW50IF9hbTMzeHhfd2FpdF90YXJnZXRfZGlzYWJsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCi17Ci0JaWYgKCFvaCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob2gtPl9pbnRfZmxhZ3MgJiBfSFdNT0RfTk9fTVBVX1BPUlQpCi0JCXJldHVybiAwOwotCi0JaWYgKG9oLT5mbGFncyAmIEhXTU9EX05PX0lETEVTVCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gYW0zM3h4X2NtX3dhaXRfbW9kdWxlX2lkbGUob2gtPmNsa2RtLT5jbV9pbnN0LAotCQkJCQkgICAgIG9oLT5jbGtkbS0+Y2xrZG1fb2ZmcywKLQkJCQkJICAgICBvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMpOworCXJldHVybiBvbWFwX2NtX3dhaXRfbW9kdWxlX2lkbGUob2gtPmNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJb2gtPmNsa2RtLT5jbV9pbnN0LAorCQkJCQlvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMsIDApOwogfQogCiAvKioKQEAgLTE4NTksMTAgKzE4MTAsOCBAQAogCiAJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiAlc1xuIiwgb2gtPm5hbWUsIF9fZnVuY19fKTsKIAotCW9tYXA0X2NtaW5zdF9tb2R1bGVfZGlzYWJsZShvaC0+Y2xrZG0tPnByY21fcGFydGl0aW9uLAotCQkJCSAgICBvaC0+Y2xrZG0tPmNtX2luc3QsCi0JCQkJICAgIG9oLT5jbGtkbS0+Y2xrZG1fb2ZmcywKLQkJCQkgICAgb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzKTsKKwlvbWFwX2NtX21vZHVsZV9kaXNhYmxlKG9oLT5jbGtkbS0+cHJjbV9wYXJ0aXRpb24sIG9oLT5jbGtkbS0+Y21faW5zdCwKKwkJCSAgICAgICBvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMpOwogCiAJdiA9IF9vbWFwNF93YWl0X3RhcmdldF9kaXNhYmxlKG9oKTsKIAlpZiAodikKQEAgLTE4NzMsMzYgKzE4MjIsNiBAQAogfQogCiAvKioKLSAqIF9hbTMzeHhfZGlzYWJsZV9tb2R1bGUgLSBlbmFibGUgQ0xLQ1RSTCBtb2R1bGVtb2RlIG9uIEFNMzNYWAotICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCi0gKgotICogRGlzYWJsZSB0aGUgUFJDTSBtb2R1bGUgbW9kZSByZWxhdGVkIHRvIHRoZSBod21vZCBAb2guCi0gKiBSZXR1cm4gRUlOVkFMIGlmIHRoZSBtb2R1bGVtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIDAgaW4gY2FzZSBvZiBzdWNjZXNzLgotICovCi1zdGF0aWMgaW50IF9hbTMzeHhfZGlzYWJsZV9tb2R1bGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQotewotCWludCB2OwotCi0JaWYgKCFvaC0+Y2xrZG0gfHwgIW9oLT5wcmNtLm9tYXA0Lm1vZHVsZW1vZGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiAlc1xuIiwgb2gtPm5hbWUsIF9fZnVuY19fKTsKLQotCWlmIChfYXJlX2FueV9oYXJkcmVzZXRfbGluZXNfYXNzZXJ0ZWQob2gpKQotCQlyZXR1cm4gMDsKLQotCWFtMzN4eF9jbV9tb2R1bGVfZGlzYWJsZShvaC0+Y2xrZG0tPmNtX2luc3QsIG9oLT5jbGtkbS0+Y2xrZG1fb2ZmcywKLQkJCQkgb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzKTsKLQotCXYgPSBfYW0zM3h4X3dhaXRfdGFyZ2V0X2Rpc2FibGUob2gpOwotCWlmICh2KQotCQlwcl93YXJuKCJvbWFwX2h3bW9kOiAlczogX3dhaXRfdGFyZ2V0X2Rpc2FibGUgZmFpbGVkXG4iLAotCQkJb2gtPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogX29jcF9zb2Z0cmVzZXQgLSByZXNldCBhbiBvbWFwX2h3bW9kIHZpYSB0aGUgT0NQX1NZU0NPTkZJRyBiaXQKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgogICoKQEAgLTIwNjUsMTAgKzE5ODQsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX2NoYWluX2xvY2ssIGZsYWdzKTsKIAotCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKLQkJb21hcDN4eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKCk7Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpCi0JCW9tYXA0NHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbigpOworCW9tYXBfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19jaGFpbl9sb2NrLCBmbGFncyk7CiB9CkBAIC0yNzE5LDExICsyNjM1LDMzIEBACiAJaWYgKG9oLT5fc3RhdGUgIT0gX0hXTU9EX1NUQVRFX0lOSVRJQUxJWkVEKQogCQlyZXR1cm4gMDsKIAorCWlmIChvaC0+cGFyZW50X2h3bW9kKSB7CisJCWludCByOworCisJCXIgPSBfZW5hYmxlKG9oLT5wYXJlbnRfaHdtb2QpOworCQlXQVJOKHIsICJod21vZDogJXM6IHNldHVwOiBmYWlsZWQgdG8gZW5hYmxlIHBhcmVudCBod21vZCAlc1xuIiwKKwkJICAgICBvaC0+bmFtZSwgb2gtPnBhcmVudF9od21vZC0+bmFtZSk7CisJfQorCiAJX3NldHVwX2ljbGtfYXV0b2lkbGUob2gpOwogCiAJaWYgKCFfc2V0dXBfcmVzZXQob2gpKQogCQlfc2V0dXBfcG9zdHNldHVwKG9oKTsKIAorCWlmIChvaC0+cGFyZW50X2h3bW9kKSB7CisJCXU4IHBvc3RzZXR1cF9zdGF0ZTsKKworCQlwb3N0c2V0dXBfc3RhdGUgPSBvaC0+cGFyZW50X2h3bW9kLT5fcG9zdHNldHVwX3N0YXRlOworCisJCWlmIChwb3N0c2V0dXBfc3RhdGUgPT0gX0hXTU9EX1NUQVRFX0lETEUpCisJCQlfaWRsZShvaC0+cGFyZW50X2h3bW9kKTsKKwkJZWxzZSBpZiAocG9zdHNldHVwX3N0YXRlID09IF9IV01PRF9TVEFURV9ESVNBQkxFRCkKKwkJCV9zaHV0ZG93bihvaC0+cGFyZW50X2h3bW9kKTsKKwkJZWxzZSBpZiAocG9zdHNldHVwX3N0YXRlICE9IF9IV01PRF9TVEFURV9FTkFCTEVEKQorCQkJV0FSTigxLCAiaHdtb2Q6ICVzOiB1bmtub3duIHBvc3RzZXR1cCBzdGF0ZSAlZCEgZGVmYXVsdGluZyB0byBlbmFibGVkXG4iLAorCQkJICAgICBvaC0+cGFyZW50X2h3bW9kLT5uYW1lLCBwb3N0c2V0dXBfc3RhdGUpOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0yODMyLDEyICsyNzcwLDEwIEBACiAJX2FsbG9jX2xpbmtzKCZtbCwgJnNsKTsKIAogCW1sLT5vY3BfaWYgPSBvaTsKLQlJTklUX0xJU1RfSEVBRCgmbWwtPm5vZGUpOwogCWxpc3RfYWRkKCZtbC0+bm9kZSwgJm9pLT5tYXN0ZXItPm1hc3Rlcl9wb3J0cyk7CiAJb2ktPm1hc3Rlci0+bWFzdGVyc19jbnQrKzsKIAogCXNsLT5vY3BfaWYgPSBvaTsKLQlJTklUX0xJU1RfSEVBRCgmc2wtPm5vZGUpOwogCWxpc3RfYWRkKCZzbC0+bm9kZSwgJm9pLT5zbGF2ZS0+c2xhdmVfcG9ydHMpOwogCW9pLT5zbGF2ZS0+c2xhdmVzX2NudCsrOwogCkBAIC0yOTI3LDcgKzI4NjMsNyBAQAogLyogU3RhdGljIGZ1bmN0aW9ucyBpbnRlbmRlZCBvbmx5IGZvciB1c2UgaW4gc29jX29wcyBmaWVsZCBmdW5jdGlvbiBwb2ludGVycyAqLwogCiAvKioKLSAqIF9vbWFwMnh4eF93YWl0X3RhcmdldF9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGxlYXZlIHNsYXZlIGlkbGUKKyAqIF9vbWFwMnh4eF8zeHh4X3dhaXRfdGFyZ2V0X3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gbGVhdmUgc2xhdmUgaWRsZQogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKgogICogV2FpdCBmb3IgYSBtb2R1bGUgQG9oIHRvIGxlYXZlIHNsYXZlIGlkbGUuICBSZXR1cm5zIDAgaWYgdGhlIG1vZHVsZQpAQCAtMjkzNSw3ICsyODcxLDcgQEAKICAqIHNsYXZlIGlkbGU7IG90aGVyd2lzZSwgcGFzcyBhbG9uZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZQogICogYXBwcm9wcmlhdGUgKl9jbSpfd2FpdF9tb2R1bGVfcmVhZHkoKSBmdW5jdGlvbi4KICAqLwotc3RhdGljIGludCBfb21hcDJ4eHhfd2FpdF90YXJnZXRfcmVhZHkoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQorc3RhdGljIGludCBfb21hcDJ4eHhfM3h4eF93YWl0X3RhcmdldF9yZWFkeShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7CiAJaWYgKCFvaCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTQ4LDM2ICsyODg0LDkgQEAKIAogCS8qIFhYWCBjaGVjayBtb2R1bGUgU0lETEVNT0RFLCBoYXJkcmVzZXQgc3RhdHVzLCBlbmFibGVkIGNsb2NrcyAqLwogCi0JcmV0dXJuIG9tYXAyeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KG9oLT5wcmNtLm9tYXAyLm1vZHVsZV9vZmZzLAotCQkJCQkgICAgIG9oLT5wcmNtLm9tYXAyLmlkbGVzdF9yZWdfaWQsCi0JCQkJCSAgICAgb2gtPnByY20ub21hcDIuaWRsZXN0X2lkbGVfYml0KTsKLX0KLQotLyoqCi0gKiBfb21hcDN4eHhfd2FpdF90YXJnZXRfcmVhZHkgLSB3YWl0IGZvciBhIG1vZHVsZSB0byBsZWF2ZSBzbGF2ZSBpZGxlCi0gKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKLSAqCi0gKiBXYWl0IGZvciBhIG1vZHVsZSBAb2ggdG8gbGVhdmUgc2xhdmUgaWRsZS4gIFJldHVybnMgMCBpZiB0aGUgbW9kdWxlCi0gKiBkb2VzIG5vdCBoYXZlIGFuIElETEVTVCBiaXQgb3IgaWYgdGhlIG1vZHVsZSBzdWNjZXNzZnVsbHkgbGVhdmVzCi0gKiBzbGF2ZSBpZGxlOyBvdGhlcndpc2UsIHBhc3MgYWxvbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKLSAqIGFwcHJvcHJpYXRlICpfY20qX3dhaXRfbW9kdWxlX3JlYWR5KCkgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyBpbnQgX29tYXAzeHh4X3dhaXRfdGFyZ2V0X3JlYWR5KHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKLXsKLQlpZiAoIW9oKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvaC0+ZmxhZ3MgJiBIV01PRF9OT19JRExFU1QpCi0JCXJldHVybiAwOwotCi0JaWYgKCFfZmluZF9tcHVfcnRfcG9ydChvaCkpCi0JCXJldHVybiAwOwotCi0JLyogWFhYIGNoZWNrIG1vZHVsZSBTSURMRU1PREUsIGhhcmRyZXNldCBzdGF0dXMsIGVuYWJsZWQgY2xvY2tzICovCi0KLQlyZXR1cm4gb21hcDN4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkob2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsCi0JCQkJCSAgICAgb2gtPnByY20ub21hcDIuaWRsZXN0X3JlZ19pZCwKLQkJCQkJICAgICBvaC0+cHJjbS5vbWFwMi5pZGxlc3RfaWRsZV9iaXQpOworCXJldHVybiBvbWFwX2NtX3dhaXRfbW9kdWxlX3JlYWR5KDAsIG9oLT5wcmNtLm9tYXAyLm1vZHVsZV9vZmZzLAorCQkJCQkgb2gtPnByY20ub21hcDIuaWRsZXN0X3JlZ19pZCwKKwkJCQkJIG9oLT5wcmNtLm9tYXAyLmlkbGVzdF9pZGxlX2JpdCk7CiB9CiAKIC8qKgpAQCAtMzAwMiwzNyArMjkxMSw5IEBACiAKIAkvKiBYWFggY2hlY2sgbW9kdWxlIFNJRExFTU9ERSwgaGFyZHJlc2V0IHN0YXR1cyAqLwogCi0JcmV0dXJuIG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9yZWFkeShvaC0+Y2xrZG0tPnByY21fcGFydGl0aW9uLAotCQkJCQkgICAgICBvaC0+Y2xrZG0tPmNtX2luc3QsCi0JCQkJCSAgICAgIG9oLT5jbGtkbS0+Y2xrZG1fb2ZmcywKLQkJCQkJICAgICAgb2gtPnByY20ub21hcDQuY2xrY3RybF9vZmZzKTsKLX0KLQotLyoqCi0gKiBfYW0zM3h4X3dhaXRfdGFyZ2V0X3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gbGVhdmUgc2xhdmUgaWRsZQotICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCi0gKgotICogV2FpdCBmb3IgYSBtb2R1bGUgQG9oIHRvIGxlYXZlIHNsYXZlIGlkbGUuICBSZXR1cm5zIDAgaWYgdGhlIG1vZHVsZQotICogZG9lcyBub3QgaGF2ZSBhbiBJRExFU1QgYml0IG9yIGlmIHRoZSBtb2R1bGUgc3VjY2Vzc2Z1bGx5IGxlYXZlcwotICogc2xhdmUgaWRsZTsgb3RoZXJ3aXNlLCBwYXNzIGFsb25nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlCi0gKiBhcHByb3ByaWF0ZSAqX2NtKl93YWl0X21vZHVsZV9yZWFkeSgpIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgaW50IF9hbTMzeHhfd2FpdF90YXJnZXRfcmVhZHkoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQotewotCWlmICghb2ggfHwgIW9oLT5jbGtkbSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob2gtPmZsYWdzICYgSFdNT0RfTk9fSURMRVNUKQotCQlyZXR1cm4gMDsKLQotCWlmICghX2ZpbmRfbXB1X3J0X3BvcnQob2gpKQotCQlyZXR1cm4gMDsKLQotCS8qIFhYWCBjaGVjayBtb2R1bGUgU0lETEVNT0RFLCBoYXJkcmVzZXQgc3RhdHVzICovCi0KLQlyZXR1cm4gYW0zM3h4X2NtX3dhaXRfbW9kdWxlX3JlYWR5KG9oLT5jbGtkbS0+Y21faW5zdCwKLQkJCQkJICAgICAgb2gtPmNsa2RtLT5jbGtkbV9vZmZzLAotCQkJCQkgICAgICBvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMpOworCXJldHVybiBvbWFwX2NtX3dhaXRfbW9kdWxlX3JlYWR5KG9oLT5jbGtkbS0+cHJjbV9wYXJ0aXRpb24sCisJCQkJCSBvaC0+Y2xrZG0tPmNtX2luc3QsCisJCQkJCSBvaC0+cHJjbS5vbWFwNC5jbGtjdHJsX29mZnMsIDApOwogfQogCiAvKioKQEAgLTMwNDksOCArMjkzMCw4IEBACiBzdGF0aWMgaW50IF9vbWFwMl9hc3NlcnRfaGFyZHJlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwKIAkJCQkgICBzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyAqb2hyaSkKIHsKLQlyZXR1cm4gb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQob2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsCi0JCQkJCSAgb2hyaS0+cnN0X3NoaWZ0KTsKKwlyZXR1cm4gb21hcF9wcm1fYXNzZXJ0X2hhcmRyZXNldChvaHJpLT5yc3Rfc2hpZnQsIDAsCisJCQkJCSBvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywgMCk7CiB9CiAKIC8qKgpAQCAtMzA2Nyw5ICsyOTQ4LDggQEAKIHN0YXRpYyBpbnQgX29tYXAyX2RlYXNzZXJ0X2hhcmRyZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsCiAJCQkJICAgICBzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyAqb2hyaSkKIHsKLQlyZXR1cm4gb21hcDJfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldChvaC0+cHJjbS5vbWFwMi5tb2R1bGVfb2ZmcywKLQkJCQkJICAgIG9ocmktPnJzdF9zaGlmdCwKLQkJCQkJICAgIG9ocmktPnN0X3NoaWZ0KTsKKwlyZXR1cm4gb21hcF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KG9ocmktPnJzdF9zaGlmdCwgb2hyaS0+c3Rfc2hpZnQsIDAsCisJCQkJCSAgIG9oLT5wcmNtLm9tYXAyLm1vZHVsZV9vZmZzLCAwLCAwKTsKIH0KIAogLyoqCkBAIC0zMDg3LDggKzI5NjcsOCBAQAogc3RhdGljIGludCBfb21hcDJfaXNfaGFyZHJlc2V0X2Fzc2VydGVkKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwKIAkJCQkJc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gKm9ocmkpCiB7Ci0JcmV0dXJuIG9tYXAyX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQob2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsCi0JCQkJCSAgICAgICBvaHJpLT5zdF9zaGlmdCk7CisJcmV0dXJuIG9tYXBfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChvaHJpLT5zdF9zaGlmdCwgMCwKKwkJCQkJICAgICAgb2gtPnByY20ub21hcDIubW9kdWxlX29mZnMsIDApOwogfQogCiAvKioKQEAgLTMxMDksMTAgKzI5ODksMTAgQEAKIAlpZiAoIW9oLT5jbGtkbSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gb21hcDRfcHJtaW5zdF9hc3NlcnRfaGFyZHJlc2V0KG9ocmktPnJzdF9zaGlmdCwKLQkJCQlvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9wYXJ0aXRpb24sCi0JCQkJb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQlvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMpOworCXJldHVybiBvbWFwX3BybV9hc3NlcnRfaGFyZHJlc2V0KG9ocmktPnJzdF9zaGlmdCwKKwkJCQkJIG9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJIG9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJCSBvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMpOwogfQogCiAvKioKQEAgLTMxMzYsMTAgKzMwMTYsMTAgQEAKIAlpZiAob2hyaS0+c3Rfc2hpZnQpCiAJCXByX2Vycigib21hcF9od21vZDogJXM6ICVzOiBod21vZCBkYXRhIGVycm9yOiBPTUFQNCBkb2VzIG5vdCBzdXBwb3J0IHN0X3NoaWZ0XG4iLAogCQkgICAgICAgb2gtPm5hbWUsIG9ocmktPm5hbWUpOwotCXJldHVybiBvbWFwNF9wcm1pbnN0X2RlYXNzZXJ0X2hhcmRyZXNldChvaHJpLT5yc3Rfc2hpZnQsCi0JCQkJb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fcGFydGl0aW9uLAotCQkJCW9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzKTsKKwlyZXR1cm4gb21hcF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KG9ocmktPnJzdF9zaGlmdCwgMCwKKwkJCQkJICAgb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fcGFydGl0aW9uLAorCQkJCQkgICBvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkgICBvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMsIDApOwogfQogCiAvKioKQEAgLTMxNjAsMTAgKzMwNDAsMTEgQEAKIAlpZiAoIW9oLT5jbGtkbSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gb21hcDRfcHJtaW5zdF9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQob2hyaS0+cnN0X3NoaWZ0LAotCQkJCW9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX3BhcnRpdGlvbiwKLQkJCQlvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJCW9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2Zmcyk7CisJcmV0dXJuIG9tYXBfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChvaHJpLT5yc3Rfc2hpZnQsCisJCQkJCSAgICAgIG9oLT5jbGtkbS0+cHdyZG0ucHRyLT4KKwkJCQkJICAgICAgcHJjbV9wYXJ0aXRpb24sCisJCQkJCSAgICAgIG9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJCSAgICAgIG9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2Zmcyk7CiB9CiAKIC8qKgpAQCAtMzE4Miw5ICszMDYzLDkgQEAKIAkJCQkgICBzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyAqb2hyaSkKIAogewotCXJldHVybiBhbTMzeHhfcHJtX2Fzc2VydF9oYXJkcmVzZXQob2hyaS0+cnN0X3NoaWZ0LAotCQkJCW9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzKTsKKwlyZXR1cm4gb21hcF9wcm1fYXNzZXJ0X2hhcmRyZXNldChvaHJpLT5yc3Rfc2hpZnQsIDAsCisJCQkJCSBvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkgb2gtPnByY20ub21hcDQucnN0Y3RybF9vZmZzKTsKIH0KIAogLyoqCkBAIC0zMjAyLDExICszMDgzLDEwIEBACiBzdGF0aWMgaW50IF9hbTMzeHhfZGVhc3NlcnRfaGFyZHJlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwKIAkJCQkgICAgIHN0cnVjdCBvbWFwX2h3bW9kX3JzdF9pbmZvICpvaHJpKQogewotCXJldHVybiBhbTMzeHhfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldChvaHJpLT5yc3Rfc2hpZnQsCi0JCQkJb2hyaS0+c3Rfc2hpZnQsCi0JCQkJb2gtPmNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQlvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMsCi0JCQkJb2gtPnByY20ub21hcDQucnN0c3Rfb2Zmcyk7CisJcmV0dXJuIG9tYXBfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldChvaHJpLT5yc3Rfc2hpZnQsIG9ocmktPnN0X3NoaWZ0LCAwLAorCQkJCQkgICBvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkgICBvaC0+cHJjbS5vbWFwNC5yc3RjdHJsX29mZnMsCisJCQkJCSAgIG9oLT5wcmNtLm9tYXA0LnJzdHN0X29mZnMpOwogfQogCiAvKioKQEAgLTMyMjQsOSArMzEwNCw5IEBACiBzdGF0aWMgaW50IF9hbTMzeHhfaXNfaGFyZHJlc2V0X2Fzc2VydGVkKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwKIAkJCQkJc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gKm9ocmkpCiB7Ci0JcmV0dXJuIGFtMzN4eF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKG9ocmktPnJzdF9zaGlmdCwKLQkJCQlvaC0+Y2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJCW9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2Zmcyk7CisJcmV0dXJuIG9tYXBfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChvaHJpLT5yc3Rfc2hpZnQsIDAsCisJCQkJCSAgICAgIG9oLT5jbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJCSAgICAgIG9oLT5wcmNtLm9tYXA0LnJzdGN0cmxfb2Zmcyk7CiB9CiAKIC8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KQEAgLTQyMzQsMTIgKzQxMTQsMTIgQEAKIHZvaWQgX19pbml0IG9tYXBfaHdtb2RfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlzb2Nfb3BzLndhaXRfdGFyZ2V0X3JlYWR5ID0gX29tYXAyeHh4X3dhaXRfdGFyZ2V0X3JlYWR5OworCQlzb2Nfb3BzLndhaXRfdGFyZ2V0X3JlYWR5ID0gX29tYXAyeHh4XzN4eHhfd2FpdF90YXJnZXRfcmVhZHk7CiAJCXNvY19vcHMuYXNzZXJ0X2hhcmRyZXNldCA9IF9vbWFwMl9hc3NlcnRfaGFyZHJlc2V0OwogCQlzb2Nfb3BzLmRlYXNzZXJ0X2hhcmRyZXNldCA9IF9vbWFwMl9kZWFzc2VydF9oYXJkcmVzZXQ7CiAJCXNvY19vcHMuaXNfaGFyZHJlc2V0X2Fzc2VydGVkID0gX29tYXAyX2lzX2hhcmRyZXNldF9hc3NlcnRlZDsKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCXNvY19vcHMud2FpdF90YXJnZXRfcmVhZHkgPSBfb21hcDN4eHhfd2FpdF90YXJnZXRfcmVhZHk7CisJCXNvY19vcHMud2FpdF90YXJnZXRfcmVhZHkgPSBfb21hcDJ4eHhfM3h4eF93YWl0X3RhcmdldF9yZWFkeTsKIAkJc29jX29wcy5hc3NlcnRfaGFyZHJlc2V0ID0gX29tYXAyX2Fzc2VydF9oYXJkcmVzZXQ7CiAJCXNvY19vcHMuZGVhc3NlcnRfaGFyZHJlc2V0ID0gX29tYXAyX2RlYXNzZXJ0X2hhcmRyZXNldDsKIAkJc29jX29wcy5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQgPSBfb21hcDJfaXNfaGFyZHJlc2V0X2Fzc2VydGVkOwpAQCAtNDI1OCwxNCArNDEzOCwxNCBAQAogCQlzb2Nfb3BzLmVuYWJsZV9tb2R1bGUgPSBfb21hcDRfZW5hYmxlX21vZHVsZTsKIAkJc29jX29wcy5kaXNhYmxlX21vZHVsZSA9IF9vbWFwNF9kaXNhYmxlX21vZHVsZTsKIAkJc29jX29wcy53YWl0X3RhcmdldF9yZWFkeSA9IF9vbWFwNF93YWl0X3RhcmdldF9yZWFkeTsKLQkJc29jX29wcy5hc3NlcnRfaGFyZHJlc2V0ID0gX2FtMzN4eF9hc3NlcnRfaGFyZHJlc2V0OwotCQlzb2Nfb3BzLmRlYXNzZXJ0X2hhcmRyZXNldCA9IF9hbTMzeHhfZGVhc3NlcnRfaGFyZHJlc2V0OwotCQlzb2Nfb3BzLmlzX2hhcmRyZXNldF9hc3NlcnRlZCA9IF9hbTMzeHhfaXNfaGFyZHJlc2V0X2Fzc2VydGVkOworCQlzb2Nfb3BzLmFzc2VydF9oYXJkcmVzZXQgPSBfb21hcDRfYXNzZXJ0X2hhcmRyZXNldDsKKwkJc29jX29wcy5kZWFzc2VydF9oYXJkcmVzZXQgPSBfb21hcDRfZGVhc3NlcnRfaGFyZHJlc2V0OworCQlzb2Nfb3BzLmlzX2hhcmRyZXNldF9hc3NlcnRlZCA9IF9vbWFwNF9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQ7CiAJCXNvY19vcHMuaW5pdF9jbGtkbSA9IF9pbml0X2Nsa2RtOwogCX0gZWxzZSBpZiAoc29jX2lzX2FtMzN4eCgpKSB7Ci0JCXNvY19vcHMuZW5hYmxlX21vZHVsZSA9IF9hbTMzeHhfZW5hYmxlX21vZHVsZTsKLQkJc29jX29wcy5kaXNhYmxlX21vZHVsZSA9IF9hbTMzeHhfZGlzYWJsZV9tb2R1bGU7Ci0JCXNvY19vcHMud2FpdF90YXJnZXRfcmVhZHkgPSBfYW0zM3h4X3dhaXRfdGFyZ2V0X3JlYWR5OworCQlzb2Nfb3BzLmVuYWJsZV9tb2R1bGUgPSBfb21hcDRfZW5hYmxlX21vZHVsZTsKKwkJc29jX29wcy5kaXNhYmxlX21vZHVsZSA9IF9vbWFwNF9kaXNhYmxlX21vZHVsZTsKKwkJc29jX29wcy53YWl0X3RhcmdldF9yZWFkeSA9IF9vbWFwNF93YWl0X3RhcmdldF9yZWFkeTsKIAkJc29jX29wcy5hc3NlcnRfaGFyZHJlc2V0ID0gX2FtMzN4eF9hc3NlcnRfaGFyZHJlc2V0OwogCQlzb2Nfb3BzLmRlYXNzZXJ0X2hhcmRyZXNldCA9IF9hbTMzeHhfZGVhc3NlcnRfaGFyZHJlc2V0OwogCQlzb2Nfb3BzLmlzX2hhcmRyZXNldF9hc3NlcnRlZCA9IF9hbTMzeHhfaXNfaGFyZHJlc2V0X2Fzc2VydGVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuaAppbmRleCA1MTJmODA5Li4zNWNhNmVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuaApAQCAtNjMzLDYgKzYzMyw3IEBACiAgKiBAZmxhZ3M6IGh3bW9kIGZsYWdzIChkb2N1bWVudGVkIGJlbG93KQogICogQF9sb2NrOiBzcGlubG9jayBzZXJpYWxpemluZyBvcGVyYXRpb25zIG9uIHRoaXMgaHdtb2QKICAqIEBub2RlOiBsaXN0IG5vZGUgZm9yIGh3bW9kIGxpc3QgKGludGVybmFsIHVzZSkKKyAqIEBwYXJlbnRfaHdtb2Q6ICh0ZW1wb3JhcnkpIGEgcG9pbnRlciB0byB0aGUgaGllcmFyY2hpY2FsIHBhcmVudCBvZiB0aGlzIGh3bW9kCiAgKgogICogQG1haW5fY2xrIHJlZmVycyB0byB0aGlzIG1vZHVsZSdzICJtYWluIGNsb2NrLCIgd2hpY2ggZm9yIG91cgogICogcHVycG9zZXMgaXMgZGVmaW5lZCBhcyAidGhlIGZ1bmN0aW9uYWwgY2xvY2sgbmVlZGVkIGZvciByZWdpc3RlcgpAQCAtNjQzLDYgKzY0NCwxMiBAQAogICogdGhlIG9tYXBfaHdtb2QgY29kZSBhbmQgc2hvdWxkIG5vdCBiZSBzZXQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICoKICAqIEBtYXN0ZXJzIGFuZCBAc2xhdmVzIGFyZSBub3cgZGVwcmVjYXRlZC4KKyAqCisgKiBAcGFyZW50X2h3bW9kIGlzIHRlbXBvcmFyeTsgdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgZm9yIGl0LCBhcyB0aGlzCisgKiBpbmZvcm1hdGlvbiBzaG91bGQgYWxyZWFkeSBiZSBleHByZXNzZWQgaW4gdGhlIE9DUCBpbnRlcmZhY2UKKyAqIHN0cnVjdHVyZXMuICBAcGFyZW50X2h3bW9kIGlzIHByZXNlbnQgYXMgYSB3b3JrYXJvdW5kIHVudGlsIHdlIGltcHJvdmUKKyAqIGhhbmRsaW5nIGZvciBod21vZHMgd2l0aCBtdWx0aXBsZSBwYXJlbnRzIChlLmcuLCBPTUFQNCsgRFNTIHdpdGgKKyAqIG11bHRpcGxlIHJlZ2lzdGVyIHRhcmdldHMgYWNyb3NzIGRpZmZlcmVudCBpbnRlcmNvbm5lY3RzKS4KICAqLwogc3RydWN0IG9tYXBfaHdtb2QgewogCWNvbnN0IGNoYXIJCQkqbmFtZTsKQEAgLTY4MCw2ICs2ODcsNyBAQAogCXU4CQkJCV9pbnRfZmxhZ3M7CiAJdTgJCQkJX3N0YXRlOwogCXU4CQkJCV9wb3N0c2V0dXBfc3RhdGU7CisJc3RydWN0IG9tYXBfaHdtb2QJCSpwYXJlbnRfaHdtb2Q7CiB9OwogCiBzdHJ1Y3Qgb21hcF9od21vZCAqb21hcF9od21vZF9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKaW5kZXggYzI1NTVjYi4uNzkxMjdiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYwpAQCAtMTUsMTIgKzE1LDEyIEBACiAKICNpbmNsdWRlIDxsaW51eC9pMmMtb21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXNvYy10aS1tY2JzcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc3BpLW9tYXAyLW1jc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvb21hcC1kbWEuaD4KICNpbmNsdWRlIDxwbGF0L2RtdGltZXIuaD4KIAogI2luY2x1ZGUgIm9tYXBfaHdtb2QuaCIKLSNpbmNsdWRlICJtbWMuaCIKICNpbmNsdWRlICJsM18yeHh4LmgiCiAKICNpbmNsdWRlICJzb2MuaCIKQEAgLTM3Miw3ICszNzIsNyBAQAogCXsgLnJvbGUgPSAiZGJjayIsIC5jbGsgPSAibW1jaHNkYjFfZmNrIiB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0geworc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CiAJLmZsYWdzID0gT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMzN4eF80M3h4X2lwYmxvY2tfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzMzeHhfNDN4eF9pcGJsb2NrX2RhdGEuYwppbmRleCBhNTc5Yjg5Li5jYWJjNTY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMzN4eF80M3h4X2lwYmxvY2tfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zM3h4XzQzeHhfaXBibG9ja19kYXRhLmMKQEAgLTE1LDEwICsxNSwxMCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tb21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc3BpLW9tYXAyLW1jc3BpLmg+CiAjaW5jbHVkZSAib21hcF9od21vZC5oIgogI2luY2x1ZGUgImkyYy5oIgotI2luY2x1ZGUgIm1tYy5oIgogI2luY2x1ZGUgIndkX3RpbWVyLmgiCiAjaW5jbHVkZSAiY20zM3h4LmgiCiAjaW5jbHVkZSAicHJtMzN4eC5oIgpAQCAtODM2LDcgKzgzNiw3IEBACiB9OwogCiAvKiBtbWMwICovCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIGFtMzN4eF9tbWMwX2Rldl9hdHRyID0geworc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIGFtMzN4eF9tbWMwX2Rldl9hdHRyID0gewogCS5mbGFncwkJPSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVCwKIH07CiAKQEAgLTg1NCw3ICs4NTQsNyBAQAogfTsKIAogLyogbW1jMSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBhbTMzeHhfbW1jMV9kZXZfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBhbTMzeHhfbW1jMV9kZXZfYXR0ciA9IHsKIAkuZmxhZ3MJCT0gT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQsCiB9OwogCkBAIC04NzIsNyArODcyLDcgQEAKIH07CiAKIC8qIG1tYzIgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgYW0zM3h4X21tYzJfZGV2X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIgYW0zM3h4X21tYzJfZGV2X2F0dHIgPSB7CiAJLmZsYWdzCQk9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xULAogfTsKIHN0cnVjdCBvbWFwX2h3bW9kIGFtMzN4eF9tbWMyX2h3bW9kID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzMzeHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzMzeHhfZGF0YS5jCmluZGV4IDZiNDA2Y2EuLjBjZjdiNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zM3h4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMzN4eF9kYXRhLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJwcm0zM3h4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzN4eC5oIgogI2luY2x1ZGUgImkyYy5oIgotI2luY2x1ZGUgIm1tYy5oIgogI2luY2x1ZGUgIndkX3RpbWVyLmgiCiAjaW5jbHVkZSAib21hcF9od21vZF8zM3h4XzQzeHhfY29tbW9uX2RhdGEuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCmluZGV4IDJhNzhiMDkuLjExNDY4ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtb21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyL3NtYXJ0cmVmbGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9ncGlvLW9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2hzbW1jLW9tYXAuaD4KIAogI2luY2x1ZGUgPGxpbnV4L29tYXAtZG1hLmg+CiAjaW5jbHVkZSAibDNfM3h4eC5oIgpAQCAtMzcsNyArMzgsNiBAQAogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogCiAjaW5jbHVkZSAiaTJjLmgiCi0jaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAid2RfdGltZXIuaCIKICNpbmNsdWRlICJzZXJpYWwuaCIKIApAQCAtMTc4NiwxMiArMTc4NiwxMiBAQAogCXsgLnJvbGUgPSAiZGJjayIsIC5jbGsgPSAib21hcF8zMmtfZmNrIiwgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0gewogCS5mbGFncyA9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xULAogfTsKIAogLyogU2VlIDM1eHggZXJyYXRhIDIuMS4xLjEyOCBpbiBTUFJaMjc4RiAqLwotc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBtbWMxX3ByZV9lczNfZGV2X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIgbW1jMV9wcmVfZXMzX2Rldl9hdHRyID0gewogCS5mbGFncyA9IChPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVCB8CiAJCSAgT01BUF9IU01NQ19CUk9LRU5fTVVMVElCTE9DS19SRUFEKSwKIH07CkBAIC0xODU0LDcgKzE4NTQsNyBAQAogfTsKIAogLyogU2VlIDM1eHggZXJyYXRhIDIuMS4xLjEyOCBpbiBTUFJaMjc4RiAqLwotc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBtbWMyX3ByZV9lczNfZGV2X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIgbW1jMl9wcmVfZXMzX2Rldl9hdHRyID0gewogCS5mbGFncyA9IE9NQVBfSFNNTUNfQlJPS0VOX01VTFRJQkxPQ0tfUkVBRCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80M3h4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80M3h4X2RhdGEuYwppbmRleCBmZWEwMWFhLi41YzZjODQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDN4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQzeHhfZGF0YS5jCkBAIC00MTcsNiArNDE3LDM3IEBACiAJfSwKIH07CiAKKy8qCisgKiAnYWRjL3RzYycgY2xhc3MKKyAqIFRvdWNoU2NyZWVuIENvbnRyb2xsZXIgKEFuYWxvZy1Uby1EaWdpdGFsIENvbnZlcnRlcikKKyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBhbTQzeHhfYWRjX3RzY19zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAsCisJLnN5c2Nfb2Zmcwk9IDB4MTAsCisJLnN5c2NfZmxhZ3MJPSBTWVNDX0hBU19TSURMRU1PREUsCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICBTSURMRV9TTUFSVF9XS1VQKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIGFtNDN4eF9hZGNfdHNjX2h3bW9kX2NsYXNzID0geworCS5uYW1lCQk9ICJhZGNfdHNjIiwKKwkuc3lzYwkJPSAmYW00M3h4X2FkY190c2Nfc3lzYywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBhbTQzeHhfYWRjX3RzY19od21vZCA9IHsKKwkubmFtZQkJPSAiYWRjX3RzYyIsCisJLmNsYXNzCQk9ICZhbTQzeHhfYWRjX3RzY19od21vZF9jbGFzcywKKwkuY2xrZG1fbmFtZQk9ICJsM3NfdHNjX2Nsa2RtIiwKKwkubWFpbl9jbGsJPSAiYWRjX3RzY19mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXA0ICA9IHsKKwkJCS5jbGtjdHJsX29mZnMgICA9IEFNNDNYWF9DTV9XS1VQX0FEQ19UU0NfQ0xLQ1RSTF9PRkZTRVQsCisJCQkubW9kdWxlbW9kZSAgICAgPSBNT0RVTEVNT0RFX1NXQ1RSTCwKKwkJfSwKKwl9LAorfTsKKwogLyogZHNzICovCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBhbTQzeHhfZHNzX2NvcmVfaHdtb2QgPSB7CkBAIC01NDcsNiArNTc4LDEzIEBACiAJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgYW00M3h4X2w0X3drdXBfX2FkY190c2MgPSB7CisJLm1hc3RlciAgICAgICAgID0gJmFtMzN4eF9sNF93a3VwX2h3bW9kLAorCS5zbGF2ZSAgICAgICAgICA9ICZhbTQzeHhfYWRjX3RzY19od21vZCwKKwkuY2xrICAgICAgICAgICAgPSAiZHBsbF9jb3JlX200X2RpdjJfY2siLAorCS51c2VyICAgICAgICAgICA9IE9DUF9VU0VSX01QVSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgYW00M3h4X2w0X2hzX19jcGdtYWMwID0gewogCS5tYXN0ZXIJCT0gJmFtNDN4eF9sNF9oc19od21vZCwKIAkuc2xhdmUJCT0gJmFtMzN4eF9jcGdtYWMwX2h3bW9kLApAQCAtNzg5LDYgKzgyNyw3IEBACiAJJmFtNDN4eF9sNF93a3VwX19pMmMxLAogCSZhbTQzeHhfbDRfd2t1cF9fZ3BpbzAsCiAJJmFtNDN4eF9sNF93a3VwX193ZF90aW1lcjEsCisJJmFtNDN4eF9sNF93a3VwX19hZGNfdHNjLAogCSZhbTQzeHhfbDNfc19fcXNwaSwKIAkmYW0zM3h4X2w0X3Blcl9fZGNhbjAsCiAJJmFtMzN4eF9sNF9wZXJfX2RjYW4xLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCmluZGV4IDQ0ZTU2MzQuLmMzMTRiM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9ncGlvLW9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2hzbW1jLW9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlci9zbWFydHJlZmxleC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1vbWFwLmg+CiAKQEAgLTM5LDcgKzQwLDYgQEAKICNpbmNsdWRlICJwcm00NHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgImkyYy5oIgotI2luY2x1ZGUgIm1tYy5oIgogI2luY2x1ZGUgIndkX3RpbWVyLmgiCiAKIC8qIEJhc2Ugb2Zmc2V0IGZvciBhbGwgT01BUDQgaW50ZXJydXB0cyBleHRlcm5hbCB0byBNUFVTUyAqLwpAQCAtNTg5LDYgKzU4OSw3IEBACiAJCS5vbWFwNCA9IHsKIAkJCS5jbGtjdHJsX29mZnMgPSBPTUFQNF9DTV9EU1NfRFNTX0NMS0NUUkxfT0ZGU0VULAogCQkJLmNvbnRleHRfb2ZmcyA9IE9NQVA0X1JNX0RTU19EU1NfQ09OVEVYVF9PRkZTRVQsCisJCQkubW9kdWxlbW9kZSAgID0gTU9EVUxFTU9ERV9TV0NUUkwsCiAJCX0sCiAJfSwKIAkub3B0X2Nsa3MJPSBkc3Nfb3B0X2Nsa3MsCkBAIC02NDcsNyArNjQ4LDggQEAKIAkJCS5jb250ZXh0X29mZnMgPSBPTUFQNF9STV9EU1NfRFNTX0NPTlRFWFRfT0ZGU0VULAogCQl9LAogCX0sCi0JLmRldl9hdHRyCT0gJm9tYXA0NHh4X2Rzc19kaXNwY19kZXZfYXR0cgorCS5kZXZfYXR0cgk9ICZvbWFwNDR4eF9kc3NfZGlzcGNfZGV2X2F0dHIsCisJLnBhcmVudF9od21vZAk9ICZvbWFwNDR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKgpAQCAtNzAxLDYgKzcwMyw3IEBACiAJfSwKIAkub3B0X2Nsa3MJPSBkc3NfZHNpMV9vcHRfY2xrcywKIAkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfZHNpMV9vcHRfY2xrcyksCisJLnBhcmVudF9od21vZAk9ICZvbWFwNDR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKiBkc3NfZHNpMiAqLwpAQCAtNzMzLDYgKzczNiw3IEBACiAJfSwKIAkub3B0X2Nsa3MJPSBkc3NfZHNpMl9vcHRfY2xrcywKIAkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfZHNpMl9vcHRfY2xrcyksCisJLnBhcmVudF9od21vZAk9ICZvbWFwNDR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKgpAQCAtNzkwLDYgKzc5NCw3IEBACiAJfSwKIAkub3B0X2Nsa3MJPSBkc3NfaGRtaV9vcHRfY2xrcywKIAkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfaGRtaV9vcHRfY2xrcyksCisJLnBhcmVudF9od21vZAk9ICZvbWFwNDR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKgpAQCAtODE5LDcgKzgyNCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayBkc3NfcmZiaV9vcHRfY2xrc1tdID0gewotCXsgLnJvbGUgPSAiaWNrIiwgLmNsayA9ICJkc3NfZmNrIiB9LAorCXsgLnJvbGUgPSAiaWNrIiwgLmNsayA9ICJsM19kaXZfY2siIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZHNzX3JmYmlfaHdtb2QgPSB7CkBAIC04MzYsNiArODQxLDcgQEAKIAl9LAogCS5vcHRfY2xrcwk9IGRzc19yZmJpX29wdF9jbGtzLAogCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19yZmJpX29wdF9jbGtzKSwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA0NHh4X2Rzc19od21vZCwKIH07CiAKIC8qCkBAIC04NTksNiArODY1LDcgQEAKIAkJCS5jb250ZXh0X29mZnMgPSBPTUFQNF9STV9EU1NfRFNTX0NPTlRFWFRfT0ZGU0VULAogCQl9LAogCX0sCisJLnBhcmVudF9od21vZAk9ICZvbWFwNDR4eF9kc3NfaHdtb2QsCiB9OwogCiAvKgpAQCAtMTk1Miw3ICsxOTU5LDcgQEAKIH07CiAKIC8qIG1tYzEgZGV2X2F0dHIgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0gewogCS5mbGFncwk9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xULAogfTsKIApAQCAtMzY3MSw3ICszNjc4LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8yX19kc3MgPSB7CiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX2h3bW9kLAotCS5jbGsJCT0gImRzc19mY2siLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCiAJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX2RtYV9hZGRycywKIAkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAogfTsKQEAgLTM3MDcsNyArMzcxNCw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fZHNzX2Rpc3BjID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKIAkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc19kaXNwY19od21vZCwKLQkuY2xrCQk9ICJkc3NfZmNrIiwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAogCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc19kaXNwY19kbWFfYWRkcnMsCiAJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKIH07CkBAIC0zNzQzLDcgKzM3NTAsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2Rzc19kc2kxID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKIAkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc19kc2kxX2h3bW9kLAotCS5jbGsJCT0gImRzc19mY2siLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCiAJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX2RzaTFfZG1hX2FkZHJzLAogCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCiB9OwpAQCAtMzc3OSw3ICszNzg2LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8yX19kc3NfZHNpMiA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfZHNpMl9od21vZCwKLQkuY2xrCQk9ICJkc3NfZmNrIiwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAogCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc19kc2kyX2RtYV9hZGRycywKIAkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAogfTsKQEAgLTM4MTUsNyArMzgyMiw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMl9fZHNzX2hkbWkgPSB7CiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDNfbWFpbl8yX2h3bW9kLAogCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZHNzX2hkbWlfaHdtb2QsCi0JLmNsawkJPSAiZHNzX2ZjayIsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKIAkuYWRkcgkJPSBvbWFwNDR4eF9kc3NfaGRtaV9kbWFfYWRkcnMsCiAJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKIH07CkBAIC0zODUxLDcgKzM4NTgsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2Rzc19yZmJpID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKIAkuc2xhdmUJCT0gJm9tYXA0NHh4X2Rzc19yZmJpX2h3bW9kLAotCS5jbGsJCT0gImRzc19mY2siLAorCS5jbGsJCT0gImwzX2Rpdl9jayIsCiAJLmFkZHIJCT0gb21hcDQ0eHhfZHNzX3JmYmlfZG1hX2FkZHJzLAogCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCiB9OwpAQCAtMzg4Nyw3ICszODk0LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8yX19kc3NfdmVuYyA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9kc3NfdmVuY19od21vZCwKLQkuY2xrCQk9ICJkc3NfZmNrIiwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAogCS5hZGRyCQk9IG9tYXA0NHh4X2Rzc192ZW5jX2RtYV9hZGRycywKIAkudXNlcgkJPSBPQ1BfVVNFUl9TRE1BLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF81NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF81NHh4X2RhdGEuYwppbmRleCAxMTAzYWEwLi4zZTk1MjMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNTR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzU0eHhfZGF0YS5jCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1vbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9oc21tYy1vbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXIvc21hcnRyZWZsZXguaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtb21hcC5oPgogCkBAIC0zMyw3ICszNCw2IEBACiAjaW5jbHVkZSAiY20yXzU0eHguaCIKICNpbmNsdWRlICJwcm01NHh4LmgiCiAjaW5jbHVkZSAiaTJjLmgiCi0jaW5jbHVkZSAibW1jLmgiCiAjaW5jbHVkZSAid2RfdGltZXIuaCIKIAogLyogQmFzZSBvZmZzZXQgZm9yIGFsbCBPTUFQNSBpbnRlcnJ1cHRzIGV4dGVybmFsIHRvIE1QVVNTICovCkBAIC00MjEsNiArNDIxLDcgQEAKIAkub3B0X2Nsa3MJPSBkc3NfZGlzcGNfb3B0X2Nsa3MsCiAJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZHNzX2Rpc3BjX29wdF9jbGtzKSwKIAkuZGV2X2F0dHIJPSAmZHNzX2Rpc3BjX2Rldl9hdHRyLAorCS5wYXJlbnRfaHdtb2QJPSAmb21hcDU0eHhfZHNzX2h3bW9kLAogfTsKIAogLyoKQEAgLTQ2Miw2ICs0NjMsNyBAQAogCX0sCiAJLm9wdF9jbGtzCT0gZHNzX2RzaTFfYV9vcHRfY2xrcywKIAkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfZHNpMV9hX29wdF9jbGtzKSwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA1NHh4X2Rzc19od21vZCwKIH07CiAKIC8qIGRzc19kc2kxX2MgKi8KQEAgLTQ4Miw2ICs0ODQsNyBAQAogCX0sCiAJLm9wdF9jbGtzCT0gZHNzX2RzaTFfY19vcHRfY2xrcywKIAkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfZHNpMV9jX29wdF9jbGtzKSwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA1NHh4X2Rzc19od21vZCwKIH07CiAKIC8qCkBAIC01MjEsNiArNTI0LDcgQEAKIAl9LAogCS5vcHRfY2xrcwk9IGRzc19oZG1pX29wdF9jbGtzLAogCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19oZG1pX29wdF9jbGtzKSwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA1NHh4X2Rzc19od21vZCwKIH07CiAKIC8qCkBAIC01NjAsNiArNTY0LDcgQEAKIAl9LAogCS5vcHRfY2xrcwk9IGRzc19yZmJpX29wdF9jbGtzLAogCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGRzc19yZmJpX29wdF9jbGtzKSwKKwkucGFyZW50X2h3bW9kCT0gJm9tYXA1NHh4X2Rzc19od21vZCwKIH07CiAKIC8qCkBAIC0xMjY5LDcgKzEyNzQsNyBAQAogfTsKIAogLyogbW1jMSBkZXZfYXR0ciAqLwotc3RhdGljIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ciBtbWMxX2Rldl9hdHRyID0geworc3RhdGljIHN0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CiAJLmZsYWdzCT0gT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfN3h4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF83eHhfZGF0YS5jCmluZGV4IDU2ODRmMTEuLmZmZDY2MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF83eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF83eHhfZGF0YS5jCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1vbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9oc21tYy1vbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXIvc21hcnRyZWZsZXguaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtb21hcC5oPgogCkBAIC0zMyw3ICszNCw2IEBACiAjaW5jbHVkZSAiY20yXzd4eC5oIgogI2luY2x1ZGUgInBybTd4eC5oIgogI2luY2x1ZGUgImkyYy5oIgotI2luY2x1ZGUgIm1tYy5oIgogI2luY2x1ZGUgIndkX3RpbWVyLmgiCiAjaW5jbHVkZSAic29jLmgiCiAKQEAgLTEzMDEsNyArMTMwMSw3IEBACiB9OwogCiAvKiBtbWMxIGRldl9hdHRyICovCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2Rldl9hdHRyIG1tYzFfZGV2X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIgbW1jMV9kZXZfYXR0ciA9IHsKIAkuZmxhZ3MJPSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVCwKIH07CiAKQEAgLTIwNzUsNiArMjA3NSw3MCBAQAogCX0sCiB9OwogCisvKiB1YXJ0NyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIGRyYTd4eF91YXJ0N19od21vZCA9IHsKKwkubmFtZQkJPSAidWFydDciLAorCS5jbGFzcwkJPSAmZHJhN3h4X3VhcnRfaHdtb2RfY2xhc3MsCisJLmNsa2RtX25hbWUJPSAibDRwZXIyX2Nsa2RtIiwKKwkubWFpbl9jbGsJPSAidWFydDdfZ2ZjbGtfbXV4IiwKKwkuZmxhZ3MJCT0gSFdNT0RfU1dTVVBfU0lETEVfQUNULAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9vZmZzID0gRFJBN1hYX0NNX0w0UEVSMl9VQVJUN19DTEtDVFJMX09GRlNFVCwKKwkJCS5jb250ZXh0X29mZnMgPSBEUkE3WFhfUk1fTDRQRVIyX1VBUlQ3X0NPTlRFWFRfT0ZGU0VULAorCQkJLm1vZHVsZW1vZGUgICA9IE1PRFVMRU1PREVfU1dDVFJMLAorCQl9LAorCX0sCit9OworCisvKiB1YXJ0OCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIGRyYTd4eF91YXJ0OF9od21vZCA9IHsKKwkubmFtZQkJPSAidWFydDgiLAorCS5jbGFzcwkJPSAmZHJhN3h4X3VhcnRfaHdtb2RfY2xhc3MsCisJLmNsa2RtX25hbWUJPSAibDRwZXIyX2Nsa2RtIiwKKwkubWFpbl9jbGsJPSAidWFydDhfZ2ZjbGtfbXV4IiwKKwkuZmxhZ3MJCT0gSFdNT0RfU1dTVVBfU0lETEVfQUNULAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9vZmZzID0gRFJBN1hYX0NNX0w0UEVSMl9VQVJUOF9DTEtDVFJMX09GRlNFVCwKKwkJCS5jb250ZXh0X29mZnMgPSBEUkE3WFhfUk1fTDRQRVIyX1VBUlQ4X0NPTlRFWFRfT0ZGU0VULAorCQkJLm1vZHVsZW1vZGUgICA9IE1PRFVMRU1PREVfU1dDVFJMLAorCQl9LAorCX0sCit9OworCisvKiB1YXJ0OSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIGRyYTd4eF91YXJ0OV9od21vZCA9IHsKKwkubmFtZQkJPSAidWFydDkiLAorCS5jbGFzcwkJPSAmZHJhN3h4X3VhcnRfaHdtb2RfY2xhc3MsCisJLmNsa2RtX25hbWUJPSAibDRwZXIyX2Nsa2RtIiwKKwkubWFpbl9jbGsJPSAidWFydDlfZ2ZjbGtfbXV4IiwKKwkuZmxhZ3MJCT0gSFdNT0RfU1dTVVBfU0lETEVfQUNULAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9vZmZzID0gRFJBN1hYX0NNX0w0UEVSMl9VQVJUOV9DTEtDVFJMX09GRlNFVCwKKwkJCS5jb250ZXh0X29mZnMgPSBEUkE3WFhfUk1fTDRQRVIyX1VBUlQ5X0NPTlRFWFRfT0ZGU0VULAorCQkJLm1vZHVsZW1vZGUgICA9IE1PRFVMRU1PREVfU1dDVFJMLAorCQl9LAorCX0sCit9OworCisvKiB1YXJ0MTAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBkcmE3eHhfdWFydDEwX2h3bW9kID0geworCS5uYW1lCQk9ICJ1YXJ0MTAiLAorCS5jbGFzcwkJPSAmZHJhN3h4X3VhcnRfaHdtb2RfY2xhc3MsCisJLmNsa2RtX25hbWUJPSAid2t1cGFvbl9jbGtkbSIsCisJLm1haW5fY2xrCT0gInVhcnQxMF9nZmNsa19tdXgiLAorCS5mbGFncwkJPSBIV01PRF9TV1NVUF9TSURMRV9BQ1QsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX29mZnMgPSBEUkE3WFhfQ01fV0tVUEFPTl9VQVJUMTBfQ0xLQ1RSTF9PRkZTRVQsCisJCQkuY29udGV4dF9vZmZzID0gRFJBN1hYX1JNX1dLVVBBT05fVUFSVDEwX0NPTlRFWFRfT0ZGU0VULAorCQkJLm1vZHVsZW1vZGUgICA9IE1PRFVMRU1PREVfU1dDVFJMLAorCQl9LAorCX0sCit9OworCiAvKgogICogJ3VzYl9vdGdfc3MnIGNsYXNzCiAgKgpAQCAtMzA5NSw2ICszMTU5LDM4IEBACiAJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKIH07CiAKKy8qIGw0X3BlcjIgLT4gdWFydDcgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgZHJhN3h4X2w0X3BlcjJfX3VhcnQ3ID0geworCS5tYXN0ZXIJCT0gJmRyYTd4eF9sNF9wZXIyX2h3bW9kLAorCS5zbGF2ZQkJPSAmZHJhN3h4X3VhcnQ3X2h3bW9kLAorCS5jbGsJCT0gImwzX2ljbGtfZGl2IiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbDRfcGVyMiAtPiB1YXJ0OCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBkcmE3eHhfbDRfcGVyMl9fdWFydDggPSB7CisJLm1hc3RlcgkJPSAmZHJhN3h4X2w0X3BlcjJfaHdtb2QsCisJLnNsYXZlCQk9ICZkcmE3eHhfdWFydDhfaHdtb2QsCisJLmNsawkJPSAibDNfaWNsa19kaXYiLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBsNF9wZXIyIC0+IHVhcnQ5ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIGRyYTd4eF9sNF9wZXIyX191YXJ0OSA9IHsKKwkubWFzdGVyCQk9ICZkcmE3eHhfbDRfcGVyMl9od21vZCwKKwkuc2xhdmUJCT0gJmRyYTd4eF91YXJ0OV9od21vZCwKKwkuY2xrCQk9ICJsM19pY2xrX2RpdiIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0X3drdXAgLT4gdWFydDEwICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIGRyYTd4eF9sNF93a3VwX191YXJ0MTAgPSB7CisJLm1hc3RlcgkJPSAmZHJhN3h4X2w0X3drdXBfaHdtb2QsCisJLnNsYXZlCQk9ICZkcmE3eHhfdWFydDEwX2h3bW9kLAorCS5jbGsJCT0gIndrdXBhb25faWNsa19tdXgiLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCiAvKiBsNF9wZXIzIC0+IHVzYl9vdGdfc3MxICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIGRyYTd4eF9sNF9wZXIzX191c2Jfb3RnX3NzMSA9IHsKIAkubWFzdGVyCQk9ICZkcmE3eHhfbDRfcGVyM19od21vZCwKQEAgLTMyNTksNiArMzM1NSwxMCBAQAogCSZkcmE3eHhfbDRfcGVyMV9fdWFydDQsCiAJJmRyYTd4eF9sNF9wZXIxX191YXJ0NSwKIAkmZHJhN3h4X2w0X3BlcjFfX3VhcnQ2LAorCSZkcmE3eHhfbDRfcGVyMl9fdWFydDcsCisJJmRyYTd4eF9sNF9wZXIyX191YXJ0OCwKKwkmZHJhN3h4X2w0X3BlcjJfX3VhcnQ5LAorCSZkcmE3eHhfbDRfd2t1cF9fdWFydDEwLAogCSZkcmE3eHhfbDRfcGVyM19fdXNiX290Z19zczEsCiAJJmRyYTd4eF9sNF9wZXIzX191c2Jfb3RnX3NzMiwKIAkmZHJhN3h4X2w0X3BlcjNfX3VzYl9vdGdfc3MzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCmluZGV4IDUwNjQwYjMuLjFhMTlmYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKQEAgLTIxLDYgKzIxLDggQEAKICAgKgogICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CkBAIC05NywxMyArOTksMTMgQEAKIAogCQlvbWFwX2N0cmxfd3JpdGVsKGRldmNvbmYyLCBBTTM1WFhfQ09OVFJPTF9ERVZDT05GMik7CiAKLQkJcHJfaW5mbyhLRVJOX0lORk8gIldhaXRpbmcgZm9yIFBIWSBjbG9jayBnb29kLi4uXG4iKTsKKwkJcHJfaW5mbygiV2FpdGluZyBmb3IgUEhZIGNsb2NrIGdvb2QuLi5cbiIpOwogCQl3aGlsZSAoIShvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpCiAJCQkJJiBDT05GMl9QSFlDTEtHRCkpIHsKIAkJCWNwdV9yZWxheCgpOwogCiAJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJCXByX2VycihLRVJOX0VSUiAibXVzYiBQSFkgY2xvY2sgZ29vZCB0aW1lZCBvdXRcbiIpOworCQkJCXByX2VycigibXVzYiBQSFkgY2xvY2sgZ29vZCB0aW1lZCBvdXRcbiIpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0xNDUsNyArMTQ3LDcgQEAKIAkJZGV2Y29uZjIgfD0gQ09ORjJfTk9fT1ZFUlJJREU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByX2luZm8oS0VSTl9JTkZPICJVbnN1cHBvcnRlZCBtb2RlICV1XG4iLCBtdXNiX21vZGUpOworCQlwcl9pbmZvKCJVbnN1cHBvcnRlZCBtb2RlICV1XG4iLCBtdXNiX21vZGUpOwogCX0KIAogCW9tYXBfY3RybF93cml0ZWwoZGV2Y29uZjIsIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcGRhdGEtcXVpcmtzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1aXJrcy5jCmluZGV4IGNlYzlkNmMuLjNkN2VlZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcGRhdGEtcXVpcmtzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wZGF0YS1xdWlya3MuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpX3dpbGlua19zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dsMTJ4eC5oPgogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9waW5jdHJsLXNpbmdsZS5oPgpAQCAtMTMwLDE3ICsxMzEsNDUgQEAKIHsKIAlvbWFwM19zYmNfdDN4X3VzYl9odWJfaW5pdCgxNjcsICJzYi10MzUgdXNiIGh1YiIpOwogCWxlZ2FjeV9pbml0X3dsMTJ4eChXTDEyWFhfUkVGQ0xPQ0tfMzgsIDAsIDEzNik7Ci0Jb21hcF9hZHM3ODQ2X2luaXQoMSwgNTcsIDAsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfc2JjX3QzNTMwX2xlZ2FjeV9pbml0KHZvaWQpCiB7CiAJb21hcDNfc2JjX3QzeF91c2JfaHViX2luaXQoMTY3LCAic2ItdDM1IHVzYiBodWIiKTsKLQlvbWFwX2Fkczc4NDZfaW5pdCgxLCA1NywgMCwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19pZ2VwMDAyMF9sZWdhY3lfaW5pdCh2b2lkKQorc3RydWN0IHRpX3N0X3BsYXRfZGF0YSB3aWxpbmtfcGRhdGEgPSB7CisJLm5zaHV0ZG93bl9ncGlvID0gMTM3LAorCS5kZXZfbmFtZSA9ICIvZGV2L3R0eU8xIiwKKwkuZmxvd19jbnRybCA9IDEsCisJLmJhdWRfcmF0ZSA9IDMwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHdsMTh4eF9kZXZpY2UgPSB7CisJLm5hbWUJPSAia2ltIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ3aWxpbmtfcGRhdGEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYnR3aWxpbmtfZGV2aWNlID0geworCS5uYW1lCT0gImJ0d2lsaW5rIiwKKwkuaWQJPSAtMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19pZ2VwMDAyMF9yZXZfZl9sZWdhY3lfaW5pdCh2b2lkKQogeworCWxlZ2FjeV9pbml0X3dsMTJ4eCgwLCAwLCAxNzcpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmd2wxOHh4X2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZidHdpbGlua19kZXZpY2UpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfaWdlcDAwMzBfcmV2X2dfbGVnYWN5X2luaXQodm9pZCkKK3sKKwlsZWdhY3lfaW5pdF93bDEyeHgoMCwgMCwgMTM2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndsMTh4eF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYnR3aWxpbmtfZGV2aWNlKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2V2bV9sZWdhY3lfaW5pdCh2b2lkKQpAQCAtMjE4LDcgKzI0Nyw2IEBACiAJaHNtbWMyX2ludGVybmFsX2lucHV0X2NsaygpOwogCW9tYXAzX3NiY190MzUxN193aWZpX2luaXQoKTsKIAlsZWdhY3lfaW5pdF93bDEyeHgoV0wxMlhYX1JFRkNMT0NLXzM4LCAwLCAxNDUpOwotCW9tYXBfYWRzNzg0Nl9pbml0KDEsIDU3LCAwLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGFtMzUxN19ldm1fbGVnYWN5X2luaXQodm9pZCkKQEAgLTM5MCw3ICs0MTgsOCBAQAogCXsgIm5va2lhLG9tYXAzLW45MDAiLCBub2tpYV9uOTAwX2xlZ2FjeV9pbml0LCB9LAogCXsgIm5va2lhLG9tYXAzLW45IiwgaHNtbWMyX2ludGVybmFsX2lucHV0X2NsaywgfSwKIAl7ICJub2tpYSxvbWFwMy1uOTUwIiwgaHNtbWMyX2ludGVybmFsX2lucHV0X2NsaywgfSwKLQl7ICJpc2VlLG9tYXAzLWlnZXAwMDIwIiwgb21hcDNfaWdlcDAwMjBfbGVnYWN5X2luaXQsIH0sCisJeyAiaXNlZSxvbWFwMy1pZ2VwMDAyMC1yZXYtZiIsIG9tYXAzX2lnZXAwMDIwX3Jldl9mX2xlZ2FjeV9pbml0LCB9LAorCXsgImlzZWUsb21hcDMtaWdlcDAwMzAtcmV2LWciLCBvbWFwM19pZ2VwMDAzMF9yZXZfZ19sZWdhY3lfaW5pdCwgfSwKIAl7ICJ0aSxvbWFwMy1ldm0tMzd4eCIsIG9tYXAzX2V2bV9sZWdhY3lfaW5pdCwgfSwKIAl7ICJ0aSxvbWFwMy16b29tMyIsIG9tYXAzX3pvb21fbGVnYWN5X2luaXQsIH0sCiAJeyAidGksYW0zNTE3LWV2bSIsIGFtMzUxN19ldm1fbGVnYWN5X2luaXQsIH0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwppbmRleCAxNzU1NjRjLi44ODcyMWRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9vbWFwLWRtYS5oPgorI2luY2x1ZGUgPGxpbnV4L29tYXAtZ3BtYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1vbWFwLmg+CiAKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KQEAgLTQzLDcgKzQ0LDYgQEAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJjbTN4eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKLSNpbmNsdWRlICJncG1jLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogI2luY2x1ZGUgInBybTN4eHguaCIKICNpbmNsdWRlICJwbS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMKaW5kZXggNTAzMDk3Yy4uZDY5N2NlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jCkBAIC0zNyw2ICszNywxNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIH07CiAKKy8qKgorICogc3RydWN0IHN0YXRpY19kZXBfbWFwIC0gU3RhdGljIGRlcGVuZGVuY3kgbWFwCisgKiBAZnJvbToJZnJvbSBjbG9ja2RvbWFpbgorICogQHRvOgkJdG8gY2xvY2tkb21haW4KKyAgKi8KK3N0cnVjdCBzdGF0aWNfZGVwX21hcCB7CisJY29uc3QgY2hhciAqZnJvbTsKKwljb25zdCBjaGFyICp0bzsKK307CisKIHN0YXRpYyB1MzIgY3B1X3N1c3BlbmRfc3RhdGUgPSBQV1JETV9QT1dFUl9PRkY7CiAKIHN0YXRpYyBMSVNUX0hFQUQocHdyc3RfbGlzdCk7CkBAIC0xNDgsOTQgKzE1OCw2MSBAQAogCW9tYXBfZG9fd2ZpKCk7CiB9CiAKLS8qKgotICogb21hcDRfaW5pdF9zdGF0aWNfZGVwcyAtIEFkZCBPTUFQNCBzdGF0aWMgZGVwZW5kZW5jaWVzCi0gKgotICogQWRkIG5lZWRlZCBzdGF0aWMgY2xvY2tkb21haW4gZGVwZW5kZW5jaWVzIG9uIE9NQVA0IGRldmljZXMuCi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciAnZXJyJyBvbiBmYWlsdXJlcworLyoKKyAqIFRoZSBkeW5hbWljIGRlcGVuZGVuY3kgYmV0d2VlbiBNUFVTUyAtPiBNRU1JRiBhbmQKKyAqIE1QVVNTIC0+IEw0X1BFUi9MM18qIGFuZCBEVUNBVEkgLT4gTDNfKiBkb2Vzbid0IHdvcmsgYXMKKyAqIGV4cGVjdGVkLiBUaGUgaGFyZHdhcmUgcmVjb21tZW5kYXRpb24gaXMgdG8gZW5hYmxlIHN0YXRpYworICogZGVwZW5kZW5jaWVzIGZvciB0aGVzZSB0byBhdm9pZCBzeXN0ZW0gbG9jayB1cHMgb3IgcmFuZG9tIGNyYXNoZXMuCisgKiBUaGUgTDQgd2FrZXVwIGRlcGVkZW5jeSBpcyBhZGRlZCB0byB3b3JrYXJvdW5kIHRoZSBPQ1Agc3luYyBoYXJkd2FyZQorICogQlVHIHdpdGggMzJLIHN5bmN0aW1lciB3aGljaCBsZWFkIHRvIGluY29ycmVjdCB0aW1lciB2YWx1ZSByZWFkCisgKiBmcm9tIHRoZSAzMksgY291bnRlci4gVGhlIEJVRyBhcHBsaWVzIGZvciBHUFRJTUVSMSBhbmQgV0RUMiB3aGljaAorICogYXJlIHBhcnQgb2YgTDQgd2FrZXVwIGNsb2NrZG9tYWluLgogICovCi1zdGF0aWMgaW5saW5lIGludCBvbWFwNF9pbml0X3N0YXRpY19kZXBzKHZvaWQpCi17Ci0Jc3RydWN0IGNsb2NrZG9tYWluICplbWlmX2Nsa2RtLCAqbXB1c3NfY2xrZG0sICpsM18xX2Nsa2RtOwotCXN0cnVjdCBjbG9ja2RvbWFpbiAqZHVjYXRpX2Nsa2RtLCAqbDNfMl9jbGtkbTsKLQlpbnQgcmV0ID0gMDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhdGljX2RlcF9tYXAgb21hcDRfc3RhdGljX2RlcF9tYXBbXSA9IHsKKwl7LmZyb20gPSAibXB1c3NfY2xrZG0iLCAudG8gPSAibDNfZW1pZl9jbGtkbSJ9LAorCXsuZnJvbSA9ICJtcHVzc19jbGtkbSIsIC50byA9ICJsM18xX2Nsa2RtIn0sCisJey5mcm9tID0gIm1wdXNzX2Nsa2RtIiwgLnRvID0gImwzXzJfY2xrZG0ifSwKKwl7LmZyb20gPSAiZHVjYXRpX2Nsa2RtIiwgLnRvID0gImwzXzFfY2xrZG0ifSwKKwl7LmZyb20gPSAiZHVjYXRpX2Nsa2RtIiwgLnRvID0gImwzXzJfY2xrZG0ifSwKKwl7LmZyb20gID0gTlVMTH0gLyogVEVSTUlOQVRJT04gKi8KK307CiAKLQlpZiAob21hcF9yZXYoKSA9PSBPTUFQNDQzMF9SRVZfRVMxXzApIHsKLQkJV0FSTigxLCAiUG93ZXIgTWFuYWdlbWVudCBub3Qgc3VwcG9ydGVkIG9uIE9NQVA0NDMwIEVTMS4wXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJfZXJyKCJQb3dlciBNYW5hZ2VtZW50IGZvciBUSSBPTUFQNC5cbiIpOwotCS8qCi0JICogT01BUDQgY2hpcCBQTSBjdXJyZW50bHkgd29ya3Mgb25seSB3aXRoIGNlcnRhaW4gKG5ld2VyKQotCSAqIHZlcnNpb25zIG9mIGJvb3Rsb2FkZXJzLiBUaGlzIGlzIGR1ZSB0byBtaXNzaW5nIGNvZGUgaW4gdGhlCi0JICoga2VybmVsIHRvIHByb3Blcmx5IHJlc2V0IGFuZCBpbml0aWFsaXplIHNvbWUgZGV2aWNlcy4KLQkgKiBodHRwOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2FybS1rZXJuZWwvbXNnMjE4NjQxLmh0bWwKLQkgKi8KLQlwcl93YXJuKCJPTUFQNCBQTTogdS1ib290ID49IHYyMDEyLjA3IGlzIHJlcXVpcmVkIGZvciBmdWxsIFBNIHN1cHBvcnRcbiIpOwotCi0JcmV0ID0gcHdyZG1fZm9yX2VhY2gocHdyZG1zX3NldHVwLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHNldHVwIHBvd2VyZG9tYWluc1xuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoKLQkgKiBUaGUgZHluYW1pYyBkZXBlbmRlbmN5IGJldHdlZW4gTVBVU1MgLT4gTUVNSUYgYW5kCi0JICogTVBVU1MgLT4gTDRfUEVSL0wzXyogYW5kIERVQ0FUSSAtPiBMM18qIGRvZXNuJ3Qgd29yayBhcwotCSAqIGV4cGVjdGVkLiBUaGUgaGFyZHdhcmUgcmVjb21tZW5kYXRpb24gaXMgdG8gZW5hYmxlIHN0YXRpYwotCSAqIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UgdG8gYXZvaWQgc3lzdGVtIGxvY2sgdXBzIG9yIHJhbmRvbSBjcmFzaGVzLgotCSAqIFRoZSBMNCB3YWtldXAgZGVwZWRlbmN5IGlzIGFkZGVkIHRvIHdvcmthcm91bmQgdGhlIE9DUCBzeW5jIGhhcmR3YXJlCi0JICogQlVHIHdpdGggMzJLIHN5bmN0aW1lciB3aGljaCBsZWFkIHRvIGluY29ycmVjdCB0aW1lciB2YWx1ZSByZWFkCi0JICogZnJvbSB0aGUgMzJLIGNvdW50ZXIuIFRoZSBCVUcgYXBwbGllcyBmb3IgR1BUSU1FUjEgYW5kIFdEVDIgd2hpY2gKLQkgKiBhcmUgcGFydCBvZiBMNCB3YWtldXAgY2xvY2tkb21haW4uCi0JICovCi0JbXB1c3NfY2xrZG0gPSBjbGtkbV9sb29rdXAoIm1wdXNzX2Nsa2RtIik7Ci0JZW1pZl9jbGtkbSA9IGNsa2RtX2xvb2t1cCgibDNfZW1pZl9jbGtkbSIpOwotCWwzXzFfY2xrZG0gPSBjbGtkbV9sb29rdXAoImwzXzFfY2xrZG0iKTsKLQlsM18yX2Nsa2RtID0gY2xrZG1fbG9va3VwKCJsM18yX2Nsa2RtIik7Ci0JZHVjYXRpX2Nsa2RtID0gY2xrZG1fbG9va3VwKCJkdWNhdGlfY2xrZG0iKTsKLQlpZiAoKCFtcHVzc19jbGtkbSkgfHwgKCFlbWlmX2Nsa2RtKSB8fCAoIWwzXzFfY2xrZG0pIHx8Ci0JCSghbDNfMl9jbGtkbSkgfHwgKCFkdWNhdGlfY2xrZG0pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IGNsa2RtX2FkZF93a2RlcChtcHVzc19jbGtkbSwgZW1pZl9jbGtkbSk7Ci0JcmV0IHw9IGNsa2RtX2FkZF93a2RlcChtcHVzc19jbGtkbSwgbDNfMV9jbGtkbSk7Ci0JcmV0IHw9IGNsa2RtX2FkZF93a2RlcChtcHVzc19jbGtkbSwgbDNfMl9jbGtkbSk7Ci0JcmV0IHw9IGNsa2RtX2FkZF93a2RlcChkdWNhdGlfY2xrZG0sIGwzXzFfY2xrZG0pOwotCXJldCB8PSBjbGtkbV9hZGRfd2tkZXAoZHVjYXRpX2Nsa2RtLCBsM18yX2Nsa2RtKTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGFkZCBNUFVTUyAtPiBMMy9FTUlGL0w0UEVSLCBEVUNBVEkgLT4gTDMgd2FrZXVwIGRlcGVuZGVuY3lcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBzdGF0aWNfZGVwX21hcCBvbWFwNV9kcmE3X3N0YXRpY19kZXBfbWFwW10gPSB7CisJey5mcm9tID0gIm1wdV9jbGtkbSIsIC50byA9ICJlbWlmX2Nsa2RtIn0sCisJey5mcm9tICA9IE5VTEx9IC8qIFRFUk1JTkFUSU9OICovCit9OwogCiAvKioKLSAqIG9tYXA1X2RyYTdfaW5pdF9zdGF0aWNfZGVwcyAtIEluaXQgc3RhdGljIGNsa2RtIGRlcGVuZGVuY2llcyBvbiBPTUFQNSBhbmQKLSAqCQkJCSBEUkE3Ci0gKgotICogVGhlIGR5bmFtaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIE1QVVNTIC0+IEVNSUYgaXMgYnJva2VuIGFuZCBoYXMKLSAqIG5vdCB3b3JrZWQgYXMgZXhwZWN0ZWQuIFRoZSBoYXJkd2FyZSByZWNvbW1lbmRhdGlvbiBpcyB0bwotICogZW5hYmxlIHN0YXRpYyBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIHRvIGF2b2lkIHN5c3RlbQotICogbG9jayB1cHMgb3IgcmFuZG9tIGNyYXNoZXMuCisgKiBvbWFwNHBsdXNfaW5pdF9zdGF0aWNfZGVwcygpIC0gSW5pdGlhbGl6ZSBhIHN0YXRpYyBkZXBlbmRlbmN5IG1hcAorICogQG1hcDoJTWFwcGluZyBvZiBjbG9jayBkb21haW5zCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG9tYXA1X2RyYTdfaW5pdF9zdGF0aWNfZGVwcyh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgb21hcDRwbHVzX2luaXRfc3RhdGljX2RlcHMoY29uc3Qgc3RydWN0IHN0YXRpY19kZXBfbWFwICptYXApCiB7Ci0Jc3RydWN0IGNsb2NrZG9tYWluICptcHVzc19jbGtkbSwgKmVtaWZfY2xrZG07CiAJaW50IHJldDsKKwlzdHJ1Y3QgY2xvY2tkb21haW4gKmZyb20sICp0bzsKIAotCW1wdXNzX2Nsa2RtID0gY2xrZG1fbG9va3VwKCJtcHVfY2xrZG0iKTsKLQllbWlmX2Nsa2RtID0gY2xrZG1fbG9va3VwKCJlbWlmX2Nsa2RtIik7Ci0JaWYgKCFtcHVzc19jbGtkbSB8fCAhZW1pZl9jbGtkbSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFtYXApCisJCXJldHVybiAwOwogCi0JcmV0ID0gY2xrZG1fYWRkX3drZGVwKG1wdXNzX2Nsa2RtLCBlbWlmX2Nsa2RtKTsKLQlpZiAocmV0KQotCQlwcl9lcnIoIkZhaWxlZCB0byBhZGQgTVBVU1MgLT4gRU1JRiB3YWtldXAgZGVwZW5kZW5jeVxuIik7CisJd2hpbGUgKG1hcC0+ZnJvbSkgeworCQlmcm9tID0gY2xrZG1fbG9va3VwKG1hcC0+ZnJvbSk7CisJCXRvID0gY2xrZG1fbG9va3VwKG1hcC0+dG8pOworCQlpZiAoIWZyb20gfHwgIXRvKSB7CisJCQlwcl9lcnIoIkZhaWxlZCBsb29rdXAgJXMgb3IgJXMgZm9yIHdha2V1cCBkZXBlbmRlbmN5XG4iLAorCQkJICAgICAgIG1hcC0+ZnJvbSwgbWFwLT50byk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlyZXQgPSBjbGtkbV9hZGRfd2tkZXAoZnJvbSwgdG8pOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byBhZGQgJXMgLT4gJXMgd2FrZXVwIGRlcGVuZGVuY3koJWQpXG4iLAorCQkJICAgICAgIG1hcC0+ZnJvbSwgbWFwLT50bywgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAotCXJldHVybiByZXQ7CisJCW1hcCsrOworCX07CisKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yNzIsNiArMjQ5LDE1IEBACiAKIAlwcl9pbmZvKCJQb3dlciBNYW5hZ2VtZW50IGZvciBUSSBPTUFQNCsgZGV2aWNlcy5cbiIpOwogCisJLyoKKwkgKiBPTUFQNCBjaGlwIFBNIGN1cnJlbnRseSB3b3JrcyBvbmx5IHdpdGggY2VydGFpbiAobmV3ZXIpCisJICogdmVyc2lvbnMgb2YgYm9vdGxvYWRlcnMuIFRoaXMgaXMgZHVlIHRvIG1pc3NpbmcgY29kZSBpbiB0aGUKKwkgKiBrZXJuZWwgdG8gcHJvcGVybHkgcmVzZXQgYW5kIGluaXRpYWxpemUgc29tZSBkZXZpY2VzLgorCSAqIGh0dHA6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvYXJtLWtlcm5lbC9tc2cyMTg2NDEuaHRtbAorCSAqLworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcHJfd2FybigiT01BUDQgUE06IHUtYm9vdCA+PSB2MjAxMi4wNyBpcyByZXF1aXJlZCBmb3IgZnVsbCBQTSBzdXBwb3J0XG4iKTsKKwogCXJldCA9IHB3cmRtX2Zvcl9lYWNoKHB3cmRtc19zZXR1cCwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byBzZXR1cCBwb3dlcmRvbWFpbnMuXG4iKTsKQEAgLTI3OSw5ICsyNjUsOSBAQAogCX0KIAogCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKLQkJcmV0ID0gb21hcDRfaW5pdF9zdGF0aWNfZGVwcygpOworCQlyZXQgPSBvbWFwNHBsdXNfaW5pdF9zdGF0aWNfZGVwcyhvbWFwNF9zdGF0aWNfZGVwX21hcCk7CiAJZWxzZSBpZiAoc29jX2lzX29tYXA1NHh4KCkgfHwgc29jX2lzX2RyYTd4eCgpKQotCQlyZXQgPSBvbWFwNV9kcmE3X2luaXRfc3RhdGljX2RlcHMoKTsKKwkJcmV0ID0gb21hcDRwbHVzX2luaXRfc3RhdGljX2RlcHMob21hcDVfZHJhN19zdGF0aWNfZGVwX21hcCk7CiAKIAlpZiAocmV0KSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGluaXRpYWxpc2Ugc3RhdGljIGRlcGVuZGVuY2llcy5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKaW5kZXggNDg0ODBkNS4uNzc3NTJlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCkBAIC0yOSw2ICsyOSw3IEBACiAgKiBQUk1fSEFTX1ZPTFRBR0U6IGhhcyB2b2x0YWdlIGRvbWFpbnMKICAqLwogI2RlZmluZSBQUk1fSEFTX0lPX1dBS0VVUAkoMSA8PCAwKQorI2RlZmluZSBQUk1fSEFTX1ZPTFRBR0UJCSgxIDw8IDEpCiAKIC8qCiAgKiBNQVhfTU9EVUxFX1NPRlRSRVNFVF9XQUlUOiBNYXhpbXVtIG1pY3Jvc2Vjb25kcyB0byB3YWl0IGZvciBPTUFQCkBAIC0xMjcsNiArMTI4LDggQEAKICAqIEB3YXNfYW55X2NvbnRleHRfbG9zdF9vbGQ6IHB0ciB0byB0aGUgU29DIFBSTSBjb250ZXh0IGxvc3MgdGVzdCBmbgogICogQGNsZWFyX2NvbnRleHRfbG9zc19mbGFnc19vbGQ6IHB0ciB0byB0aGUgU29DIFBSTSBjb250ZXh0IGxvc3MgZmxhZyBjbGVhciBmbgogICogQGxhdGVfaW5pdDogcHRyIHRvIHRoZSBsYXRlIGluaXQgZnVuY3Rpb24KKyAqIEBhc3NlcnRfaGFyZHJlc2V0OiBwdHIgdG8gdGhlIFNvQyBQUk0gaGFyZHJlc2V0IGFzc2VydCBpbXBsCisgKiBAZGVhc3NlcnRfaGFyZHJlc2V0OiBwdHIgdG8gdGhlIFNvQyBQUk0gaGFyZHJlc2V0IGRlYXNzZXJ0IGltcGwKICAqCiAgKiBYWFggQHdhc19hbnlfY29udGV4dF9sb3N0X29sZCBhbmQgQGNsZWFyX2NvbnRleHRfbG9zc19mbGFnc19vbGQgYXJlCiAgKiBkZXByZWNhdGVkLgpAQCAtMTM2LDE0ICsxMzksMjcgQEAKIAlib29sICgqd2FzX2FueV9jb250ZXh0X2xvc3Rfb2xkKSh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGlkeCk7CiAJdm9pZCAoKmNsZWFyX2NvbnRleHRfbG9zc19mbGFnc19vbGQpKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgaWR4KTsKIAlpbnQgKCpsYXRlX2luaXQpKHZvaWQpOworCWludCAoKmFzc2VydF9oYXJkcmVzZXQpKHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwgdTE2IG9mZnNldCk7CisJaW50ICgqZGVhc3NlcnRfaGFyZHJlc2V0KSh1OCBzaGlmdCwgdTggc3Rfc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLAorCQkJCSAgdTE2IG9mZnNldCwgdTE2IHN0X29mZnNldCk7CisJaW50ICgqaXNfaGFyZHJlc2V0X2Fzc2VydGVkKSh1OCBzaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsCisJCQkJICAgICB1MTYgb2Zmc2V0KTsKKwl2b2lkICgqcmVzZXRfc3lzdGVtKSh2b2lkKTsKIH07CiAKIGV4dGVybiBpbnQgcHJtX3JlZ2lzdGVyKHN0cnVjdCBwcm1fbGxfZGF0YSAqcGxkKTsKIGV4dGVybiBpbnQgcHJtX3VucmVnaXN0ZXIoc3RydWN0IHBybV9sbF9kYXRhICpwbGQpOwogCitpbnQgb21hcF9wcm1fYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsIHUxNiBvZmZzZXQpOworaW50IG9tYXBfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggc3Rfc2hpZnQsIHU4IHBhcnQsIHMxNiBwcm1fbW9kLAorCQkJCXUxNiBvZmZzZXQsIHUxNiBzdF9vZmZzZXQpOworaW50IG9tYXBfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCh1OCBzaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsIHUxNiBvZmZzZXQpOwogZXh0ZXJuIHUzMiBwcm1fcmVhZF9yZXNldF9zb3VyY2VzKHZvaWQpOwogZXh0ZXJuIGJvb2wgcHJtX3dhc19hbnlfY29udGV4dF9sb3N0X29sZCh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGlkeCk7CiBleHRlcm4gdm9pZCBwcm1fY2xlYXJfY29udGV4dF9sb3NzX2ZsYWdzX29sZCh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGlkeCk7Cit2b2lkIG9tYXBfcHJtX3Jlc2V0X3N5c3RlbSh2b2lkKTsKKwordm9pZCBvbWFwX3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmMKaW5kZXggODY5NTgwNS4uYWYwZjE1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogICogU2V0IHRoZSBEUExMIHJlc2V0IGJpdCwgd2hpY2ggc2hvdWxkIHJlYm9vdCB0aGUgU29DLiAgVGhpcyBpcyB0aGUKICAqIHJlY29tbWVuZGVkIHdheSB0byByZXN0YXJ0IHRoZSBTb0MuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDJ4eHhfcHJtX2RwbGxfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIG9tYXAyeHh4X3BybV9kcGxsX3Jlc2V0KHZvaWQpCiB7CiAJb21hcDJfcHJtX3NldF9tb2RfcmVnX2JpdHMoT01BUF9SU1RfRFBMTDNfTUFTSywgV0tVUF9NT0QsCiAJCQkJICAgT01BUDJfUk1fUlNUQ1RSTCk7CkBAIC0yMTIsNiArMjEyLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcHJtX2xsX2RhdGEgb21hcDJ4eHhfcHJtX2xsX2RhdGEgPSB7CiAJLnJlYWRfcmVzZXRfc291cmNlcyA9ICZvbWFwMnh4eF9wcm1fcmVhZF9yZXNldF9zb3VyY2VzLAorCS5hc3NlcnRfaGFyZHJlc2V0ID0gJm9tYXAyX3BybV9hc3NlcnRfaGFyZHJlc2V0LAorCS5kZWFzc2VydF9oYXJkcmVzZXQgPSAmb21hcDJfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCwKKwkuaXNfaGFyZHJlc2V0X2Fzc2VydGVkID0gJm9tYXAyX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQsCisJLnJlc2V0X3N5c3RlbSA9ICZvbWFwMnh4eF9wcm1fZHBsbF9yZXNldCwKIH07CiAKIGludCBfX2luaXQgb21hcDJ4eHhfcHJtX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmgKaW5kZXggZDczNDE0MS4uMWQ1MTY0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmgKQEAgLTEyNCw3ICsxMjQsNiBAQAogZXh0ZXJuIGludCBvbWFwMnh4eF9jbGtkbV9zbGVlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKIGV4dGVybiBpbnQgb21hcDJ4eHhfY2xrZG1fd2FrZXVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwogCi1leHRlcm4gdm9pZCBvbWFwMnh4eF9wcm1fZHBsbF9yZXNldCh2b2lkKTsKIHZvaWQgb21hcDJ4eHhfcHJtX2NsZWFyX21vZF9pcnFzKHMxNiBtb2R1bGUsIHU4IHJlZ3MsIHUzMiB3a3N0X21hc2spOwogCiBleHRlcm4gaW50IF9faW5pdCBvbWFwMnh4eF9wcm1faW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5jCmluZGV4IGMxM2I0ZTIuLmNjMzM0MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguYwpAQCAtMjQsMTQgKzI0LDE2IEBACiAvKioKICAqIG9tYXAyX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQgLSByZWFkIHRoZSBIVyByZXNldCBsaW5lIHN0YXRlIG9mCiAgKiBzdWJtb2R1bGVzIGNvbnRhaW5lZCBpbiB0aGUgaHdtb2QgbW9kdWxlCi0gKiBAcHJtX21vZDogUFJNIHN1Ym1vZHVsZSBiYXNlIChlLmcuIENPUkVfTU9EKQogICogQHNoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZSB0byBjaGVjaworICogQHBhcnQ6IFBSTSBwYXJ0aXRpb24sIGlnbm9yZWQgZm9yIE9NQVAyCisgKiBAcHJtX21vZDogUFJNIHN1Ym1vZHVsZSBiYXNlIChlLmcuIENPUkVfTU9EKQorICogQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0LCBpZ25vcmVkIGZvciBPTUFQMgogICoKICAqIFJldHVybnMgMSBpZiB0aGUgKHN1Yiltb2R1bGUgaGFyZHJlc2V0IGxpbmUgaXMgY3VycmVudGx5IGFzc2VydGVkLAogICogMCBpZiB0aGUgKHN1Yiltb2R1bGUgaGFyZHJlc2V0IGxpbmUgaXMgbm90IGN1cnJlbnRseSBhc3NlcnRlZCwgb3IKICAqIC1FSU5WQUwgaWYgY2FsbGVkIHdoaWxlIHJ1bm5pbmcgb24gYSBub24tT01BUDIvMyBjaGlwLgogICovCi1pbnQgb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChzMTYgcHJtX21vZCwgdTggc2hpZnQpCitpbnQgb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCh1OCBzaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsIHUxNiBvZmZzZXQpCiB7CiAJcmV0dXJuIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHBybV9tb2QsIE9NQVAyX1JNX1JTVENUUkwsCiAJCQkJICAgICAgICgxIDw8IHNoaWZ0KSk7CkBAIC0zOSw4ICs0MSwxMCBAQAogCiAvKioKICAqIG9tYXAyX3BybV9hc3NlcnRfaGFyZHJlc2V0IC0gYXNzZXJ0IHRoZSBIVyByZXNldCBsaW5lIG9mIGEgc3VibW9kdWxlCi0gKiBAcHJtX21vZDogUFJNIHN1Ym1vZHVsZSBiYXNlIChlLmcuIENPUkVfTU9EKQogICogQHNoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZSB0byBhc3NlcnQKKyAqIEBwYXJ0OiBQUk0gcGFydGl0aW9uLCBpZ25vcmVkIGZvciBPTUFQMgorICogQHBybV9tb2Q6IFBSTSBzdWJtb2R1bGUgYmFzZSAoZS5nLiBDT1JFX01PRCkKKyAqIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCwgaWdub3JlZCBmb3IgT01BUDIKICAqCiAgKiBTb21lIElQcyBsaWtlIGRzcCBvciBpdmEgY29udGFpbiBwcm9jZXNzb3JzIHRoYXQgcmVxdWlyZSBhbiBIVwogICogcmVzZXQgbGluZSB0byBiZSBhc3NlcnRlZCAvIGRlYXNzZXJ0ZWQgaW4gb3JkZXIgdG8gZnVsbHkgZW5hYmxlIHRoZQpAQCAtNDksNyArNTMsNyBAQAogICogcGxhY2UgdGhlIHN1Ym1vZHVsZSBpbnRvIHJlc2V0LiAgUmV0dXJucyAwIHVwb24gc3VjY2VzcyBvciAtRUlOVkFMCiAgKiB1cG9uIGFuIGFyZ3VtZW50IGVycm9yLgogICovCi1pbnQgb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQoczE2IHBybV9tb2QsIHU4IHNoaWZ0KQoraW50IG9tYXAyX3BybV9hc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwgdTE2IG9mZnNldCkKIHsKIAl1MzIgbWFzazsKIApAQCAtNjQsNiArNjgsMTAgQEAKICAqIEBwcm1fbW9kOiBQUk0gc3VibW9kdWxlIGJhc2UgKGUuZy4gQ09SRV9NT0QpCiAgKiBAcnN0X3NoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZSB0byBkZWFzc2VydAogICogQHN0X3NoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgZm9yIHRoZSBzdGF0dXMgb2YgdGhlIGRlYXNzZXJ0ZWQgc3VibW9kdWxlCisgKiBAcGFydDogUFJNIHBhcnRpdGlvbiwgbm90IHVzZWQgZm9yIE9NQVAyCisgKiBAcHJtX21vZDogUFJNIHN1Ym1vZHVsZSBiYXNlIChlLmcuIENPUkVfTU9EKQorICogQHJzdF9vZmZzZXQ6IHJlc2V0IHJlZ2lzdGVyIG9mZnNldCwgbm90IHVzZWQgZm9yIE9NQVAyCisgKiBAc3Rfb2Zmc2V0OiByZXNldCBzdGF0dXMgcmVnaXN0ZXIgb2Zmc2V0LCBub3QgdXNlZCBmb3IgT01BUDIKICAqCiAgKiBTb21lIElQcyBsaWtlIGRzcCBvciBpdmEgY29udGFpbiBwcm9jZXNzb3JzIHRoYXQgcmVxdWlyZSBhbiBIVwogICogcmVzZXQgbGluZSB0byBiZSBhc3NlcnRlZCAvIGRlYXNzZXJ0ZWQgaW4gb3JkZXIgdG8gZnVsbHkgZW5hYmxlIHRoZQpAQCAtNzQsNyArODIsOCBAQAogICogLUVJTlZBTCB1cG9uIGFuIGFyZ3VtZW50IGVycm9yLCAtRUVYSVNUIGlmIHRoZSBzdWJtb2R1bGUgd2FzIGFscmVhZHkgb3V0CiAgKiBvZiByZXNldCwgb3IgLUVCVVNZIGlmIHRoZSBzdWJtb2R1bGUgZGlkIG5vdCBleGl0IHJlc2V0IHByb21wdGx5LgogICovCi1pbnQgb21hcDJfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldChzMTYgcHJtX21vZCwgdTggcnN0X3NoaWZ0LCB1OCBzdF9zaGlmdCkKK2ludCBvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHJzdF9zaGlmdCwgdTggc3Rfc2hpZnQsIHU4IHBhcnQsCisJCQkJIHMxNiBwcm1fbW9kLCB1MTYgcnN0X29mZnNldCwgdTE2IHN0X29mZnNldCkKIHsKIAl1MzIgcnN0LCBzdDsKIAlpbnQgYzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5oCmluZGV4IDFhM2E5NjMuLmY1N2UyOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguaApAQCAtMTAwLDkgKzEwMCwxMiBAQAogfQogCiAvKiBUaGVzZSBvbWFwMl8gUFJNIGZ1bmN0aW9ucyBhcHBseSB0byBib3RoIE9NQVAyIGFuZCAzICovCi1leHRlcm4gaW50IG9tYXAyX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoczE2IHBybV9tb2QsIHU4IHNoaWZ0KTsKLWV4dGVybiBpbnQgb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQoczE2IHBybV9tb2QsIHU4IHNoaWZ0KTsKLWV4dGVybiBpbnQgb21hcDJfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldChzMTYgcHJtX21vZCwgdTggcnN0X3NoaWZ0LCB1OCBzdF9zaGlmdCk7CitpbnQgb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCh1OCBzaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsIHUxNiBvZmZzZXQpOworaW50IG9tYXAyX3BybV9hc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwKKwkJCSAgICAgICB1MTYgb2Zmc2V0KTsKK2ludCBvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHJzdF9zaGlmdCwgdTggc3Rfc2hpZnQsIHU4IHBhcnQsCisJCQkJIHMxNiBwcm1fbW9kLCB1MTYgcmVzZXRfb2Zmc2V0LAorCQkJCSB1MTYgc3Rfb2Zmc2V0KTsKIAogZXh0ZXJuIGludCBvbWFwMl9wd3JkbV9zZXRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCk7CiBleHRlcm4gaW50IG9tYXAyX3B3cmRtX3JlYWRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMzN4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zM3h4LmMKaW5kZXggNjI3MDljZC4uMDJmNjI4NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMzN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMzN4eC5jCkBAIC0yMywyMCArMjMsMjQgQEAKICNpbmNsdWRlICJwcm0zM3h4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzN4eC5oIgogCisjZGVmaW5lIEFNMzNYWF9QUk1fUlNUQ1RSTF9PRkZTRVQJCTB4MDAwMAorCisjZGVmaW5lIEFNMzNYWF9SU1RfR0xPQkFMX1dBUk1fU1dfTUFTSwkJKDEgPDwgMCkKKwogLyogUmVhZCBhIHJlZ2lzdGVyIGluIGEgUFJNIGluc3RhbmNlICovCi11MzIgYW0zM3h4X3BybV9yZWFkX3JlZyhzMTYgaW5zdCwgdTE2IGlkeCkKK3N0YXRpYyB1MzIgYW0zM3h4X3BybV9yZWFkX3JlZyhzMTYgaW5zdCwgdTE2IGlkeCkKIHsKIAlyZXR1cm4gcmVhZGxfcmVsYXhlZChwcm1fYmFzZSArIGluc3QgKyBpZHgpOwogfQogCiAvKiBXcml0ZSBpbnRvIGEgcmVnaXN0ZXIgaW4gYSBQUk0gaW5zdGFuY2UgKi8KLXZvaWQgYW0zM3h4X3BybV93cml0ZV9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiBpZHgpCitzdGF0aWMgdm9pZCBhbTMzeHhfcHJtX3dyaXRlX3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IGlkeCkKIHsKIAl3cml0ZWxfcmVsYXhlZCh2YWwsIHBybV9iYXNlICsgaW5zdCArIGlkeCk7CiB9CiAKIC8qIFJlYWQtbW9kaWZ5LXdyaXRlIGEgcmVnaXN0ZXIgaW4gUFJNLiBDYWxsZXIgbXVzdCBsb2NrICovCi11MzIgYW0zM3h4X3BybV9ybXdfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IGlkeCkKK3N0YXRpYyB1MzIgYW0zM3h4X3BybV9ybXdfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IGlkeCkKIHsKIAl1MzIgdjsKIApAQCAtNTIsNiArNTYsNyBAQAogICogYW0zM3h4X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQgLSByZWFkIHRoZSBIVyByZXNldCBsaW5lIHN0YXRlIG9mCiAgKiBzdWJtb2R1bGVzIGNvbnRhaW5lZCBpbiB0aGUgaHdtb2QgbW9kdWxlCiAgKiBAc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lIHRvIGNoZWNrCisgKiBAcGFydDogUFJNIHBhcnRpdGlvbiwgaWdub3JlZCBmb3IgQU0zM3h4CiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCiAgKiBAcnN0Y3RybF9vZmZzOiBSTV9SU1RDVFJMIHJlZ2lzdGVyIGFkZHJlc3Mgb2Zmc2V0IGZvciB0aGlzIG1vZHVsZQogICoKQEAgLTU5LDcgKzY0LDggQEAKICAqIDAgaWYgdGhlIChzdWIpbW9kdWxlIGhhcmRyZXNldCBsaW5lIGlzIG5vdCBjdXJyZW50bHkgYXNzZXJ0ZWQsIG9yCiAgKiAtRUlOVkFMIHVwb24gcGFyYW1ldGVyIGVycm9yLgogICovCi1pbnQgYW0zM3h4X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQodTggc2hpZnQsIHMxNiBpbnN0LCB1MTYgcnN0Y3RybF9vZmZzKQorc3RhdGljIGludCBhbTMzeHhfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCh1OCBzaGlmdCwgdTggcGFydCwgczE2IGluc3QsCisJCQkJCSAgICB1MTYgcnN0Y3RybF9vZmZzKQogewogCXUzMiB2OwogCkBAIC03Myw2ICs3OSw3IEBACiAvKioKICAqIGFtMzN4eF9wcm1fYXNzZXJ0X2hhcmRyZXNldCAtIGFzc2VydCB0aGUgSFcgcmVzZXQgbGluZSBvZiBhIHN1Ym1vZHVsZQogICogQHNoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZSB0byBhc3NlcnQKKyAqIEBwYXJ0OiBDTSBwYXJ0aXRpb24sIGlnbm9yZWQgZm9yIEFNMzN4eAogICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQogICogQHJzdGN0cmxfcmVnOiBSTV9SU1RDVFJMIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXMgbW9kdWxlCiAgKgpAQCAtODMsNyArOTAsOCBAQAogICogcGxhY2UgdGhlIHN1Ym1vZHVsZSBpbnRvIHJlc2V0LiAgUmV0dXJucyAwIHVwb24gc3VjY2VzcyBvciAtRUlOVkFMCiAgKiB1cG9uIGFuIGFyZ3VtZW50IGVycm9yLgogICovCi1pbnQgYW0zM3h4X3BybV9hc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCBzMTYgaW5zdCwgdTE2IHJzdGN0cmxfb2ZmcykKK3N0YXRpYyBpbnQgYW0zM3h4X3BybV9hc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgaW5zdCwKKwkJCQkgICAgICAgdTE2IHJzdGN0cmxfb2ZmcykKIHsKIAl1MzIgbWFzayA9IDEgPDwgc2hpZnQ7CiAKQEAgLTk2LDYgKzEwNCw4IEBACiAgKiBhbTMzeHhfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCAtIGRlYXNzZXJ0IGEgc3VibW9kdWxlIGhhcmRyZXNldCBsaW5lIGFuZAogICogd2FpdAogICogQHNoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZSB0byBkZWFzc2VydAorICogQHN0X3NoaWZ0OiByZXNldCBzdGF0dXMgcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUKKyAqIEBwYXJ0OiBQUk0gcGFydGl0aW9uLCBub3QgdXNlZCBmb3IgQU0zM3h4CiAgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCiAgKiBAcnN0Y3RybF9yZWc6IFJNX1JTVENUUkwgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhpcyBtb2R1bGUKICAqIEByc3RzdF9yZWc6IFJNX1JTVFNUIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXMgbW9kdWxlCkBAIC0xMDksMTQgKzExOSwxNSBAQAogICogLUVJTlZBTCB1cG9uIGFuIGFyZ3VtZW50IGVycm9yLCAtRUVYSVNUIGlmIHRoZSBzdWJtb2R1bGUgd2FzIGFscmVhZHkgb3V0CiAgKiBvZiByZXNldCwgb3IgLUVCVVNZIGlmIHRoZSBzdWJtb2R1bGUgZGlkIG5vdCBleGl0IHJlc2V0IHByb21wdGx5LgogICovCi1pbnQgYW0zM3h4X3BybV9kZWFzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHN0X3NoaWZ0LCBzMTYgaW5zdCwKLQkJdTE2IHJzdGN0cmxfb2ZmcywgdTE2IHJzdHN0X29mZnMpCitzdGF0aWMgaW50IGFtMzN4eF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBzdF9zaGlmdCwgdTggcGFydCwKKwkJCQkJIHMxNiBpbnN0LCB1MTYgcnN0Y3RybF9vZmZzLAorCQkJCQkgdTE2IHJzdHN0X29mZnMpCiB7CiAJaW50IGM7CiAJdTMyIG1hc2sgPSAxIDw8IHN0X3NoaWZ0OwogCiAJLyogQ2hlY2sgdGhlIGN1cnJlbnQgc3RhdHVzIHRvIGF2b2lkICBkZS1hc3NlcnRpbmcgdGhlIGxpbmUgdHdpY2UgKi8KLQlpZiAoYW0zM3h4X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoc2hpZnQsIGluc3QsIHJzdGN0cmxfb2ZmcykgPT0gMCkKKwlpZiAoYW0zM3h4X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoc2hpZnQsIDAsIGluc3QsIHJzdGN0cmxfb2ZmcykgPT0gMCkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKIAkvKiBDbGVhciB0aGUgcmVzZXQgc3RhdHVzIGJ5IHdyaXRpbmcgMSB0byB0aGUgc3RhdHVzIGJpdCAqLwpAQCAtMTI4LDcgKzEzOSw3IEBACiAJYW0zM3h4X3BybV9ybXdfcmVnX2JpdHMobWFzaywgMCwgaW5zdCwgcnN0Y3RybF9vZmZzKTsKIAogCS8qIHdhaXQgdGhlIHN0YXR1cyB0byBiZSBzZXQgKi8KLQlvbWFwX3Rlc3RfdGltZW91dChhbTMzeHhfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChzdF9zaGlmdCwgaW5zdCwKKwlvbWFwX3Rlc3RfdGltZW91dChhbTMzeHhfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZChzdF9zaGlmdCwgMCwgaW5zdCwKIAkJCQkJCQkgICByc3RzdF9vZmZzKSwKIAkJCSAgTUFYX01PRFVMRV9IQVJEUkVTRVRfV0FJVCwgYyk7CiAKQEAgLTMyNSw2ICszMzYsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBhbTMzeHhfcHJtX2dsb2JhbF93YXJtX3N3X3Jlc2V0IC0gcmVib290IHRoZSBkZXZpY2UgdmlhIHdhcm0gcmVzZXQKKyAqCisgKiBJbW1lZGlhdGVseSByZWJvb3RzIHRoZSBkZXZpY2UgdGhyb3VnaCB3YXJtIHJlc2V0LgorICovCitzdGF0aWMgdm9pZCBhbTMzeHhfcHJtX2dsb2JhbF93YXJtX3N3X3Jlc2V0KHZvaWQpCit7CisJYW0zM3h4X3BybV9ybXdfcmVnX2JpdHMoQU0zM1hYX1JTVF9HTE9CQUxfV0FSTV9TV19NQVNLLAorCQkJCUFNMzNYWF9SU1RfR0xPQkFMX1dBUk1fU1dfTUFTSywKKwkJCQlBTTMzWFhfUFJNX0RFVklDRV9NT0QsCisJCQkJQU0zM1hYX1BSTV9SU1RDVFJMX09GRlNFVCk7CisKKwkvKiBPQ1AgYmFycmllciAqLworCSh2b2lkKWFtMzN4eF9wcm1fcmVhZF9yZWcoQU0zM1hYX1BSTV9ERVZJQ0VfTU9ELAorCQkJCSAgQU0zM1hYX1BSTV9SU1RDVFJMX09GRlNFVCk7Cit9CisKIHN0cnVjdCBwd3JkbV9vcHMgYW0zM3h4X3B3cmRtX29wZXJhdGlvbnMgPSB7CiAJLnB3cmRtX3NldF9uZXh0X3B3cnN0CQk9IGFtMzN4eF9wd3JkbV9zZXRfbmV4dF9wd3JzdCwKIAkucHdyZG1fcmVhZF9uZXh0X3B3cnN0CQk9IGFtMzN4eF9wd3JkbV9yZWFkX25leHRfcHdyc3QsCkBAIC0zNDIsMyArMzcwLDIxIEBACiAJLnB3cmRtX3dhaXRfdHJhbnNpdGlvbgkJPSBhbTMzeHhfcHdyZG1fd2FpdF90cmFuc2l0aW9uLAogCS5wd3JkbV9oYXNfdm9sdGRtCQk9IGFtMzN4eF9jaGVja192Y3ZwLAogfTsKKworc3RhdGljIHN0cnVjdCBwcm1fbGxfZGF0YSBhbTMzeHhfcHJtX2xsX2RhdGEgPSB7CisJLmFzc2VydF9oYXJkcmVzZXQJCT0gYW0zM3h4X3BybV9hc3NlcnRfaGFyZHJlc2V0LAorCS5kZWFzc2VydF9oYXJkcmVzZXQJCT0gYW0zM3h4X3BybV9kZWFzc2VydF9oYXJkcmVzZXQsCisJLmlzX2hhcmRyZXNldF9hc3NlcnRlZAkJPSBhbTMzeHhfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCwKKwkucmVzZXRfc3lzdGVtCQkJPSBhbTMzeHhfcHJtX2dsb2JhbF93YXJtX3N3X3Jlc2V0LAorfTsKKworaW50IF9faW5pdCBhbTMzeHhfcHJtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcHJtX3JlZ2lzdGVyKCZhbTMzeHhfcHJtX2xsX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYW0zM3h4X3BybV9leGl0KHZvaWQpCit7CisJcHJtX3VucmVnaXN0ZXIoJmFtMzN4eF9wcm1fbGxfZGF0YSk7Cit9CitfX2V4aXRjYWxsKGFtMzN4eF9wcm1fZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTMzeHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMzN4eC5oCmluZGV4IDliOTkxOGQuLjk4YWM0MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMzN4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMzN4eC5oCkBAIC0xMTgsMTQgKzExOCw3IEBACiAjZGVmaW5lIEFNMzNYWF9QTV9DRUZVU0VfUFdSU1RTVAkJQU0zM1hYX1BSTV9SRUdBRERSKEFNMzNYWF9QUk1fQ0VGVVNFX01PRCwgMHgwMDA0KQogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KLWV4dGVybiB1MzIgYW0zM3h4X3BybV9yZWFkX3JlZyhzMTYgaW5zdCwgdTE2IGlkeCk7Ci1leHRlcm4gdm9pZCBhbTMzeHhfcHJtX3dyaXRlX3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IGlkeCk7Ci1leHRlcm4gdTMyIGFtMzN4eF9wcm1fcm13X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IGluc3QsIHMxNiBpZHgpOwotZXh0ZXJuIHZvaWQgYW0zM3h4X3BybV9nbG9iYWxfd2FybV9zd19yZXNldCh2b2lkKTsKLWV4dGVybiBpbnQgYW0zM3h4X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQodTggc2hpZnQsIHMxNiBpbnN0LAotCQl1MTYgcnN0Y3RybF9vZmZzKTsKLWV4dGVybiBpbnQgYW0zM3h4X3BybV9hc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCBzMTYgaW5zdCwgdTE2IHJzdGN0cmxfb2Zmcyk7Ci1leHRlcm4gaW50IGFtMzN4eF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBzdF9zaGlmdCwgczE2IGluc3QsCi0JCXUxNiByc3RjdHJsX29mZnMsIHUxNiByc3RzdF9vZmZzKTsKK2ludCBhbTMzeHhfcHJtX2luaXQodm9pZCk7CisKICNlbmRpZiAvKiBBU1NFTUJMRVIgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTN4eHguYwppbmRleCBmZjA4ZGEzLi5jNWUwMGM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTN4eHguYwpAQCAtMzAsNiArMzAsMTEgQEAKICNpbmNsdWRlICJjbTN4eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKIAorc3RhdGljIHZvaWQgb21hcDN4eHhfcHJtX3JlYWRfcGVuZGluZ19pcnFzKHVuc2lnbmVkIGxvbmcgKmV2ZW50cyk7CitzdGF0aWMgdm9pZCBvbWFwM3h4eF9wcm1fb2NwX2JhcnJpZXIodm9pZCk7CitzdGF0aWMgdm9pZCBvbWFwM3h4eF9wcm1fc2F2ZV9hbmRfY2xlYXJfaXJxZW4odTMyICpzYXZlZF9tYXNrKTsKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X3BybV9yZXN0b3JlX2lycWVuKHUzMiAqc2F2ZWRfbWFzayk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF9wcmNtX2lycSBvbWFwM19wcmNtX2lycXNbXSA9IHsKIAlPTUFQX1BSQ01fSVJRKCJ3a3VwIiwJMCwJMCksCiAJT01BUF9QUkNNX0lSUSgiaW8iLAk5LAkxKSwKQEAgLTEzMSw3ICsxMzYsNyBAQAogICogcmVjb21tZW5kZWQgd2F5IHRvIHJlc3RhcnQgdGhlIFNvQywgY29uc2lkZXJpbmcgRXJyYXRhIGk1MjAuICBObwogICogcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXAzeHh4X3BybV9kcGxsM19yZXNldCh2b2lkKQorc3RhdGljIHZvaWQgb21hcDN4eHhfcHJtX2RwbGwzX3Jlc2V0KHZvaWQpCiB7CiAJb21hcDJfcHJtX3NldF9tb2RfcmVnX2JpdHMoT01BUF9SU1RfRFBMTDNfTUFTSywgT01BUDM0MzBfR1JfTU9ELAogCQkJCSAgIE9NQVAyX1JNX1JTVENUUkwpOwpAQCAtMTQ3LDcgKzE1Miw3IEBACiAgKiBNUFUgSVJRcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW50byB0aGUgdTMyIHBvaW50ZWQgdG8gYnkgQGV2ZW50cy4KICAqIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwM3h4eF9wcm1fcmVhZF9wZW5kaW5nX2lycXModW5zaWduZWQgbG9uZyAqZXZlbnRzKQorc3RhdGljIHZvaWQgb21hcDN4eHhfcHJtX3JlYWRfcGVuZGluZ19pcnFzKHVuc2lnbmVkIGxvbmcgKmV2ZW50cykKIHsKIAl1MzIgbWFzaywgc3Q7CiAKQEAgLTE2Niw3ICsxNzEsNyBAQAogICogYmxvY2ssIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhZnRlciBhY2tub3dsZWRnaW5nIG9yIGNsZWFyaW5nIElSUQogICogYml0cy4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwM3h4eF9wcm1fb2NwX2JhcnJpZXIodm9pZCkKK3N0YXRpYyB2b2lkIG9tYXAzeHh4X3BybV9vY3BfYmFycmllcih2b2lkKQogewogCW9tYXAyX3BybV9yZWFkX21vZF9yZWcoT0NQX01PRCwgT01BUDNfUFJNX1JFVklTSU9OX09GRlNFVCk7CiB9CkBAIC0xODIsNyArMTg3LDcgQEAKICAqIHJldHVybmluZzsgb3RoZXJ3aXNlLCBzcHVyaW91cyBpbnRlcnJ1cHRzIG1pZ2h0IG9jY3VyLiAgTm8gcmV0dXJuCiAgKiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwM3h4eF9wcm1fc2F2ZV9hbmRfY2xlYXJfaXJxZW4odTMyICpzYXZlZF9tYXNrKQorc3RhdGljIHZvaWQgb21hcDN4eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuKHUzMiAqc2F2ZWRfbWFzaykKIHsKIAlzYXZlZF9tYXNrWzBdID0gb21hcDJfcHJtX3JlYWRfbW9kX3JlZyhPQ1BfTU9ELAogCQkJCQkgICAgICAgT01BUDNfUFJNX0lSUUVOQUJMRV9NUFVfT0ZGU0VUKTsKQEAgLTIwMiw3ICsyMDcsNyBAQAogICogYmFycmllciBzaG91bGQgYmUgbmVlZGVkIGhlcmU7IGFueSBwZW5kaW5nIFBSTSBpbnRlcnJ1cHRzIHdpbGwgZmlyZQogICogb25jZSB0aGUgd3JpdGVzIHJlYWNoIHRoZSBQUk0uICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDN4eHhfcHJtX3Jlc3RvcmVfaXJxZW4odTMyICpzYXZlZF9tYXNrKQorc3RhdGljIHZvaWQgb21hcDN4eHhfcHJtX3Jlc3RvcmVfaXJxZW4odTMyICpzYXZlZF9tYXNrKQogewogCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKHNhdmVkX21hc2tbMF0sIE9DUF9NT0QsCiAJCQkJT01BUDNfUFJNX0lSUUVOQUJMRV9NUFVfT0ZGU0VUKTsKQEAgLTM3NSw3ICszODAsNyBAQAogICogVGhlIFNUX0lPX0NIQUlOIGJpdCBkb2VzIG5vdCBleGlzdCBpbiAzNDMwIGJlZm9yZSBlczMuMS4gVGhlIG9ubHkKICAqIHRoaW5nIHdlIGNhbiBkbyBpcyB0b2dnbGUgRU5fSU8gYml0IGZvciBlYXJsaWVyIG9tYXBzLgogICovCi12b2lkIG9tYXAzNDMwX3ByZV9lczNfMV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKQorc3RhdGljIHZvaWQgb21hcDM0MzBfcHJlX2VzM18xX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpCiB7CiAJb21hcDJfcHJtX2NsZWFyX21vZF9yZWdfYml0cyhPTUFQMzQzMF9FTl9JT19NQVNLLCBXS1VQX01PRCwKIAkJCQkgICAgIFBNX1dLRU4pOwpAQCAtMzkzLDcgKzM5OCw3IEBACiAgKiBkZWFzc2VydGluZyBXVUNMS0lOIGFuZCBjbGVhcmluZyB0aGUgU1RfSU9fQ0hBSU4gV0tTVCBiaXQuICBObwogICogcmV0dXJuIHZhbHVlLiBUaGVzZSByZWdpc3RlcnMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIDM0MzAgZXMzLjEgYW5kIGxhdGVyLgogICovCi12b2lkIG9tYXAzX3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKQorc3RhdGljIHZvaWQgb21hcDNfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpCiB7CiAJaW50IGkgPSAwOwogCkBAIC00MTYsMTUgKzQyMSw2IEBACiB9CiAKIC8qKgotICogb21hcDN4eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluIC0gcmVjb25maWd1cmUgSS9PIGNoYWluCi0gKi8KLXZvaWQgb21hcDN4eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpCi17Ci0JaWYgKG9tYXAzX3ByY21faXJxX3NldHVwLnJlY29uZmlndXJlX2lvX2NoYWluKQotCQlvbWFwM19wcmNtX2lycV9zZXR1cC5yZWNvbmZpZ3VyZV9pb19jaGFpbigpOwotfQotCi0vKioKICAqIG9tYXAzeHh4X3BybV9lbmFibGVfaW9fd2FrZXVwIC0gZW5hYmxlIHdha2V1cCBldmVudHMgZnJvbSBJL08gd2FrZXVwIGxhdGNoZXMKICAqCiAgKiBBY3RpdmF0ZXMgdGhlIEkvTyB3YWtldXAgZXZlbnQgbGF0Y2hlcyBhbmQgYWxsb3dzIGV2ZW50cyBsb2dnZWQgYnkKQEAgLTY2NCw2ICs2NjAsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgcHJtX2xsX2RhdGEgb21hcDN4eHhfcHJtX2xsX2RhdGEgPSB7CiAJLnJlYWRfcmVzZXRfc291cmNlcyA9ICZvbWFwM3h4eF9wcm1fcmVhZF9yZXNldF9zb3VyY2VzLAogCS5sYXRlX2luaXQgPSAmb21hcDN4eHhfcHJtX2xhdGVfaW5pdCwKKwkuYXNzZXJ0X2hhcmRyZXNldCA9ICZvbWFwMl9wcm1fYXNzZXJ0X2hhcmRyZXNldCwKKwkuZGVhc3NlcnRfaGFyZHJlc2V0ID0gJm9tYXAyX3BybV9kZWFzc2VydF9oYXJkcmVzZXQsCisJLmlzX2hhcmRyZXNldF9hc3NlcnRlZCA9ICZvbWFwMl9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkLAorCS5yZXNldF9zeXN0ZW0gPSAmb21hcDN4eHhfcHJtX2RwbGwzX3Jlc2V0LAogfTsKIAogaW50IF9faW5pdCBvbWFwM3h4eF9wcm1faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0zeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTN4eHguaAppbmRleCBiYzM3ZDQyLi5jZmRlM2Y0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTN4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTN4eHguaApAQCAtMTQ0LDIyICsxNDQsNiBAQAogZXh0ZXJuIHZvaWQgb21hcDNfcHJtX3ZjdnBfd3JpdGUodTMyIHZhbCwgdTggb2Zmc2V0KTsKIGV4dGVybiB1MzIgb21hcDNfcHJtX3ZjdnBfcm13KHUzMiBtYXNrLCB1MzIgYml0cywgdTggb2Zmc2V0KTsKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCi12b2lkIG9tYXAzeHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcDN4eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpCi17Ci19Ci0jZW5kaWYKLQotLyogUFJNIGludGVycnVwdC1yZWxhdGVkIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIHZvaWQgb21hcDN4eHhfcHJtX3JlYWRfcGVuZGluZ19pcnFzKHVuc2lnbmVkIGxvbmcgKmV2ZW50cyk7Ci1leHRlcm4gdm9pZCBvbWFwM3h4eF9wcm1fb2NwX2JhcnJpZXIodm9pZCk7Ci1leHRlcm4gdm9pZCBvbWFwM3h4eF9wcm1fc2F2ZV9hbmRfY2xlYXJfaXJxZW4odTMyICpzYXZlZF9tYXNrKTsKLWV4dGVybiB2b2lkIG9tYXAzeHh4X3BybV9yZXN0b3JlX2lycWVuKHUzMiAqc2F2ZWRfbWFzayk7Ci0KLWV4dGVybiB2b2lkIG9tYXAzeHh4X3BybV9kcGxsM19yZXNldCh2b2lkKTsKLQogZXh0ZXJuIGludCBfX2luaXQgb21hcDN4eHhfcHJtX2luaXQodm9pZCk7CiBleHRlcm4gdTMyIG9tYXAzeHh4X3BybV9nZXRfcmVzZXRfc291cmNlcyh2b2lkKTsKIGludCBvbWFwM3h4eF9wcm1fY2xlYXJfbW9kX2lycXMoczE2IG1vZHVsZSwgdTggcmVncywgdTMyIGlnbm9yZV9iaXRzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmMKaW5kZXggMDk1OGQwNy4uY2MxNzBmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmMKQEAgLTMyLDYgKzMyLDEyIEBACiAKIC8qIFN0YXRpYyBkYXRhICovCiAKK3N0YXRpYyB2b2lkIG9tYXA0NHh4X3BybV9yZWFkX3BlbmRpbmdfaXJxcyh1bnNpZ25lZCBsb25nICpldmVudHMpOworc3RhdGljIHZvaWQgb21hcDQ0eHhfcHJtX29jcF9iYXJyaWVyKHZvaWQpOworc3RhdGljIHZvaWQgb21hcDQ0eHhfcHJtX3NhdmVfYW5kX2NsZWFyX2lycWVuKHUzMiAqc2F2ZWRfbWFzayk7CitzdGF0aWMgdm9pZCBvbWFwNDR4eF9wcm1fcmVzdG9yZV9pcnFlbih1MzIgKnNhdmVkX21hc2spOworc3RhdGljIHZvaWQgb21hcDQ0eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfcHJjbV9pcnEgb21hcDRfcHJjbV9pcnFzW10gPSB7CiAJT01BUF9QUkNNX0lSUSgiaW8iLCAgICAgOSwgICAgICAxKSwKIH07CkBAIC04MCwxOSArODYsMTkgQEAKIC8qIFBSTSBsb3ctbGV2ZWwgZnVuY3Rpb25zICovCiAKIC8qIFJlYWQgYSByZWdpc3RlciBpbiBhIENNL1BSTSBpbnN0YW5jZSBpbiB0aGUgUFJNIG1vZHVsZSAqLwotdTMyIG9tYXA0X3BybV9yZWFkX2luc3RfcmVnKHMxNiBpbnN0LCB1MTYgcmVnKQorc3RhdGljIHUzMiBvbWFwNF9wcm1fcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IHJlZykKIHsKIAlyZXR1cm4gcmVhZGxfcmVsYXhlZChwcm1fYmFzZSArIGluc3QgKyByZWcpOwogfQogCiAvKiBXcml0ZSBpbnRvIGEgcmVnaXN0ZXIgaW4gYSBDTS9QUk0gaW5zdGFuY2UgaW4gdGhlIFBSTSBtb2R1bGUgKi8KLXZvaWQgb21hcDRfcHJtX3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgcmVnKQorc3RhdGljIHZvaWQgb21hcDRfcHJtX3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgcmVnKQogewogCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJtX2Jhc2UgKyBpbnN0ICsgcmVnKTsKIH0KIAogLyogUmVhZC1tb2RpZnktd3JpdGUgYSByZWdpc3RlciBpbiBhIFBSTSBtb2R1bGUuIENhbGxlciBtdXN0IGxvY2sgKi8KLXUzMiBvbWFwNF9wcm1fcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IHJlZykKK3N0YXRpYyB1MzIgb21hcDRfcHJtX3Jtd19pbnN0X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IGluc3QsIHMxNiByZWcpCiB7CiAJdTMyIHY7CiAKQEAgLTIwNyw3ICsyMTMsNyBAQAogICogTVBVIElSUXMsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGludG8gdGhlIHR3byB1MzJzIHBvaW50ZWQgdG8gYnkgQGV2ZW50cy4KICAqIE5vIHJldHVybiB2YWx1ZS4KICAqLwotdm9pZCBvbWFwNDR4eF9wcm1fcmVhZF9wZW5kaW5nX2lycXModW5zaWduZWQgbG9uZyAqZXZlbnRzKQorc3RhdGljIHZvaWQgb21hcDQ0eHhfcHJtX3JlYWRfcGVuZGluZ19pcnFzKHVuc2lnbmVkIGxvbmcgKmV2ZW50cykKIHsKIAlldmVudHNbMF0gPSBfcmVhZF9wZW5kaW5nX2lycV9yZWcoT01BUDRfUFJNX0lSUUVOQUJMRV9NUFVfT0ZGU0VULAogCQkJCQkgIE9NQVA0X1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCk7CkBAIC0yMjQsNyArMjMwLDcgQEAKICAqIGJsb2NrLCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYWZ0ZXIgYWNrbm93bGVkZ2luZyBvciBjbGVhcmluZyBJUlEKICAqIGJpdHMuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDQ0eHhfcHJtX29jcF9iYXJyaWVyKHZvaWQpCitzdGF0aWMgdm9pZCBvbWFwNDR4eF9wcm1fb2NwX2JhcnJpZXIodm9pZCkKIHsKIAlvbWFwNF9wcm1fcmVhZF9pbnN0X3JlZyhPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9JTlNULAogCQkJCU9NQVA0X1JFVklTSU9OX1BSTV9PRkZTRVQpOwpAQCAtMjQxLDcgKzI0Nyw3IEBACiAgKiBpbnRlcnJ1cHRzIHJlYWNoZXMgdGhlIFBSTSBiZWZvcmUgcmV0dXJuaW5nOyBvdGhlcndpc2UsIHNwdXJpb3VzCiAgKiBpbnRlcnJ1cHRzIG1pZ2h0IG9jY3VyLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi12b2lkIG9tYXA0NHh4X3BybV9zYXZlX2FuZF9jbGVhcl9pcnFlbih1MzIgKnNhdmVkX21hc2spCitzdGF0aWMgdm9pZCBvbWFwNDR4eF9wcm1fc2F2ZV9hbmRfY2xlYXJfaXJxZW4odTMyICpzYXZlZF9tYXNrKQogewogCXNhdmVkX21hc2tbMF0gPQogCQlvbWFwNF9wcm1fcmVhZF9pbnN0X3JlZyhPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9JTlNULApAQCAtMjcwLDcgKzI3Niw3IEBACiAgKiBObyBPQ1AgYmFycmllciBzaG91bGQgYmUgbmVlZGVkIGhlcmU7IGFueSBwZW5kaW5nIFBSTSBpbnRlcnJ1cHRzIHdpbGwgZmlyZQogICogb25jZSB0aGUgd3JpdGVzIHJlYWNoIHRoZSBQUk0uICBObyByZXR1cm4gdmFsdWUuCiAgKi8KLXZvaWQgb21hcDQ0eHhfcHJtX3Jlc3RvcmVfaXJxZW4odTMyICpzYXZlZF9tYXNrKQorc3RhdGljIHZvaWQgb21hcDQ0eHhfcHJtX3Jlc3RvcmVfaXJxZW4odTMyICpzYXZlZF9tYXNrKQogewogCW9tYXA0X3BybV93cml0ZV9pbnN0X3JlZyhzYXZlZF9tYXNrWzBdLCBPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9JTlNULAogCQkJCSBPTUFQNF9QUk1fSVJRRU5BQkxFX01QVV9PRkZTRVQpOwpAQCAtMjg3LDcgKzI5Myw3IEBACiAgKiBkZWFzc2VydGluZyBXVUNMS0lOIGFuZCB3YWl0aW5nIGZvciBXVUNMS09VVCB0byBiZSBkZWFzc2VydGVkLgogICogTm8gcmV0dXJuIHZhbHVlLiBYWFggQXJlIHRoZSBmaW5hbCB0d28gc3RlcHMgbmVjZXNzYXJ5PwogICovCi12b2lkIG9tYXA0NHh4X3BybV9yZWNvbmZpZ3VyZV9pb19jaGFpbih2b2lkKQorc3RhdGljIHZvaWQgb21hcDQ0eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpCiB7CiAJaW50IGkgPSAwOwogCXMzMiBpbnN0ID0gb21hcDRfcHJtc3RfZ2V0X3BybV9kZXZfaW5zdCgpOwpAQCAtNjUyLDExICs2NTgsMTAgQEAKIAogc3RhdGljIGludCBvbWFwNF9jaGVja192Y3ZwKHZvaWQpCiB7Ci0JLyogTm8gVkMvVlAgb24gZHJhN3h4IGRldmljZXMgKi8KLQlpZiAoc29jX2lzX2RyYTd4eCgpKQotCQlyZXR1cm4gMDsKKwlpZiAocHJtX2ZlYXR1cmVzICYgUFJNX0hBU19WT0xUQUdFKQorCQlyZXR1cm4gMTsKIAotCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBzdHJ1Y3QgcHdyZG1fb3BzIG9tYXA0X3B3cmRtX29wZXJhdGlvbnMgPSB7CkBAIC02ODksNiArNjk0LDEwIEBACiAJLndhc19hbnlfY29udGV4dF9sb3N0X29sZCA9ICZvbWFwNDR4eF9wcm1fd2FzX2FueV9jb250ZXh0X2xvc3Rfb2xkLAogCS5jbGVhcl9jb250ZXh0X2xvc3NfZmxhZ3Nfb2xkID0gJm9tYXA0NHh4X3BybV9jbGVhcl9jb250ZXh0X2xvc3NfZmxhZ3Nfb2xkLAogCS5sYXRlX2luaXQgPSAmb21hcDQ0eHhfcHJtX2xhdGVfaW5pdCwKKwkuYXNzZXJ0X2hhcmRyZXNldAk9IG9tYXA0X3BybWluc3RfYXNzZXJ0X2hhcmRyZXNldCwKKwkuZGVhc3NlcnRfaGFyZHJlc2V0CT0gb21hcDRfcHJtaW5zdF9kZWFzc2VydF9oYXJkcmVzZXQsCisJLmlzX2hhcmRyZXNldF9hc3NlcnRlZAk9IG9tYXA0X3BybWluc3RfaXNfaGFyZHJlc2V0X2Fzc2VydGVkLAorCS5yZXNldF9zeXN0ZW0JCT0gb21hcDRfcHJtaW5zdF9nbG9iYWxfd2FybV9zd19yZXNldCwKIH07CiAKIGludCBfX2luaXQgb21hcDQ0eHhfcHJtX2luaXQodm9pZCkKQEAgLTY5Niw2ICs3MDUsOSBAQAogCWlmIChjcHVfaXNfb21hcDQ0eHgoKSB8fCBzb2NfaXNfb21hcDU0eHgoKSB8fCBzb2NfaXNfZHJhN3h4KCkpCiAJCXBybV9mZWF0dXJlcyB8PSBQUk1fSEFTX0lPX1dBS0VVUDsKIAorCWlmICghc29jX2lzX2RyYTd4eCgpKQorCQlwcm1fZmVhdHVyZXMgfD0gUFJNX0hBU19WT0xUQUdFOworCiAJcmV0dXJuIHBybV9yZWdpc3Rlcigmb21hcDQ0eHhfcHJtX2xsX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHhfNTR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4XzU0eHguaAppbmRleCA4ZDk1YWE1Li5mNzUxMjUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHhfNTR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eF81NHh4LmgKQEAgLTI2LDEwICsyNiw2IEBACiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIAotZXh0ZXJuIHUzMiBvbWFwNF9wcm1fcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IGlkeCk7Ci1leHRlcm4gdm9pZCBvbWFwNF9wcm1fd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiBpZHgpOwotZXh0ZXJuIHUzMiBvbWFwNF9wcm1fcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IGlkeCk7Ci0KIC8qIE9NQVA0L09NQVA1LXNwZWNpZmljIFZQIGZ1bmN0aW9ucyAqLwogdTMyIG9tYXA0X3BybV92cF9jaGVja190eGRvbmUodTggdnBfaWQpOwogdm9pZCBvbWFwNF9wcm1fdnBfY2xlYXJfdHhkb25lKHU4IHZwX2lkKTsKQEAgLTQyLDIxICszOCw2IEBACiBleHRlcm4gdm9pZCBvbWFwNF9wcm1fdmN2cF93cml0ZSh1MzIgdmFsLCB1OCBvZmZzZXQpOwogZXh0ZXJuIHUzMiBvbWFwNF9wcm1fdmN2cF9ybXcodTMyIG1hc2ssIHUzMiBiaXRzLCB1OCBvZmZzZXQpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkgfHwgZGVmaW5lZChDT05GSUdfU09DX09NQVA1KSB8fCBcCi0JZGVmaW5lZChDT05GSUdfU09DX0RSQTdYWCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FNNDNYWCkKLXZvaWQgb21hcDQ0eHhfcHJtX3JlY29uZmlndXJlX2lvX2NoYWluKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwNDR4eF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCkKLXsKLX0KLSNlbmRpZgotCi0vKiBQUk0gaW50ZXJydXB0LXJlbGF0ZWQgZnVuY3Rpb25zICovCi1leHRlcm4gdm9pZCBvbWFwNDR4eF9wcm1fcmVhZF9wZW5kaW5nX2lycXModW5zaWduZWQgbG9uZyAqZXZlbnRzKTsKLWV4dGVybiB2b2lkIG9tYXA0NHh4X3BybV9vY3BfYmFycmllcih2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXA0NHh4X3BybV9zYXZlX2FuZF9jbGVhcl9pcnFlbih1MzIgKnNhdmVkX21hc2spOwotZXh0ZXJuIHZvaWQgb21hcDQ0eHhfcHJtX3Jlc3RvcmVfaXJxZW4odTMyICpzYXZlZF9tYXNrKTsKLQogZXh0ZXJuIGludCBfX2luaXQgb21hcDQ0eHhfcHJtX2luaXQodm9pZCk7CiBleHRlcm4gdTMyIG9tYXA0NHh4X3BybV9nZXRfcmVzZXRfc291cmNlcyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1fY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybV9jb21tb24uYwppbmRleCBlZTJiNTIyLi43Nzk5NDBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybV9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybV9jb21tb24uYwpAQCAtNDIzLDYgKzQyMywxMDUgQEAKIH0KIAogLyoqCisgKiBvbWFwX3BybV9hc3NlcnRfaGFyZHJlc2V0IC0gYXNzZXJ0IGhhcmRyZXNldCBmb3IgYW4gSVAgYmxvY2sKKyAqIEBzaGlmdDogcmVnaXN0ZXIgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUKKyAqIEBwYXJ0OiBQUk0gcGFydGl0aW9uCisgKiBAcHJtX21vZDogUFJNIHN1Ym1vZHVsZSBiYXNlIG9yIGluc3RhbmNlIG9mZnNldAorICogQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogQXNzZXJ0cyBhIGhhcmR3YXJlIHJlc2V0IGxpbmUgZm9yIGFuIElQIGJsb2NrLgorICovCitpbnQgb21hcF9wcm1fYXNzZXJ0X2hhcmRyZXNldCh1OCBzaGlmdCwgdTggcGFydCwgczE2IHBybV9tb2QsIHUxNiBvZmZzZXQpCit7CisJaWYgKCFwcm1fbGxfZGF0YS0+YXNzZXJ0X2hhcmRyZXNldCkgeworCQlXQVJOX09OQ0UoMSwgInBybTogJXM6IG5vIG1hcHBpbmcgZnVuY3Rpb24gZGVmaW5lZFxuIiwKKwkJCSAgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcHJtX2xsX2RhdGEtPmFzc2VydF9oYXJkcmVzZXQoc2hpZnQsIHBhcnQsIHBybV9tb2QsIG9mZnNldCk7Cit9CisKKy8qKgorICogb21hcF9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0IC0gZGVhc3NlcnQgaGFyZHJlc2V0IGZvciBhbiBJUCBibG9jaworICogQHNoaWZ0OiByZWdpc3RlciBiaXQgc2hpZnQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzZXQgbGluZQorICogQHN0X3NoaWZ0OiByZXNldCBzdGF0dXMgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc2V0IGxpbmUKKyAqIEBwYXJ0OiBQUk0gcGFydGl0aW9uCisgKiBAcHJtX21vZDogUFJNIHN1Ym1vZHVsZSBiYXNlIG9yIGluc3RhbmNlIG9mZnNldAorICogQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0CisgKiBAc3Rfb2Zmc2V0OiBzdGF0dXMgcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogRGVhc3NlcnRzIGEgaGFyZHdhcmUgcmVzZXQgbGluZSBmb3IgYW4gSVAgYmxvY2suCisgKi8KK2ludCBvbWFwX3BybV9kZWFzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHN0X3NoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwKKwkJCQl1MTYgb2Zmc2V0LCB1MTYgc3Rfb2Zmc2V0KQoreworCWlmICghcHJtX2xsX2RhdGEtPmRlYXNzZXJ0X2hhcmRyZXNldCkgeworCQlXQVJOX09OQ0UoMSwgInBybTogJXM6IG5vIG1hcHBpbmcgZnVuY3Rpb24gZGVmaW5lZFxuIiwKKwkJCSAgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcHJtX2xsX2RhdGEtPmRlYXNzZXJ0X2hhcmRyZXNldChzaGlmdCwgc3Rfc2hpZnQsIHBhcnQsIHBybV9tb2QsCisJCQkJCSAgICAgICBvZmZzZXQsIHN0X29mZnNldCk7Cit9CisKKy8qKgorICogb21hcF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkIC0gY2hlY2sgdGhlIGhhcmRyZXNldCBzdGF0dXMgZm9yIGFuIElQIGJsb2NrCisgKiBAc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lCisgKiBAcGFydDogUFJNIHBhcnRpdGlvbgorICogQHBybV9tb2Q6IFBSTSBzdWJtb2R1bGUgYmFzZSBvciBpbnN0YW5jZSBvZmZzZXQKKyAqIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldAorICoKKyAqIENoZWNrcyBpZiBhIGhhcmR3YXJlIHJlc2V0IGxpbmUgZm9yIGFuIElQIGJsb2NrIGlzIGVuYWJsZWQgb3Igbm90LgorICovCitpbnQgb21hcF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgcHJtX21vZCwgdTE2IG9mZnNldCkKK3sKKwlpZiAoIXBybV9sbF9kYXRhLT5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQpIHsKKwkJV0FSTl9PTkNFKDEsICJwcm06ICVzOiBubyBtYXBwaW5nIGZ1bmN0aW9uIGRlZmluZWRcbiIsCisJCQkgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHBybV9sbF9kYXRhLT5pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoc2hpZnQsIHBhcnQsIHBybV9tb2QsIG9mZnNldCk7Cit9CisKKy8qKgorICogb21hcF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4gLSBjbGVhciBsYXRjaGVzIGFuZCByZWNvbmZpZ3VyZSBJL08gY2hhaW4KKyAqCisgKiBDbGVhciBhbnkgcHJldmlvdXNseS1sYXRjaGVkIEkvTyB3YWtldXAgZXZlbnRzIGFuZCBlbnN1cmUgdGhhdCB0aGUKKyAqIEkvTyB3YWtldXAgZ2F0ZXMgYXJlIGFsaWduZWQgd2l0aCB0aGUgY3VycmVudCBtdXggc2V0dGluZ3MuCisgKiBDYWxscyBTb0Mgc3BlY2lmaWMgSS9PIGNoYWluIHJlY29uZmlndXJlIGZ1bmN0aW9uIGlmIGF2YWlsYWJsZSwKKyAqIG90aGVyd2lzZSBkb2VzIG5vdGhpbmcuCisgKi8KK3ZvaWQgb21hcF9wcm1fcmVjb25maWd1cmVfaW9fY2hhaW4odm9pZCkKK3sKKwlpZiAoIXByY21faXJxX3NldHVwIHx8ICFwcmNtX2lycV9zZXR1cC0+cmVjb25maWd1cmVfaW9fY2hhaW4pCisJCXJldHVybjsKKworCXByY21faXJxX3NldHVwLT5yZWNvbmZpZ3VyZV9pb19jaGFpbigpOworfQorCisvKioKKyAqIG9tYXBfcHJtX3Jlc2V0X3N5c3RlbSAtIHRyaWdnZXIgZ2xvYmFsIFNXIHJlc2V0CisgKgorICogVHJpZ2dlcnMgU29DIHNwZWNpZmljIGdsb2JhbCB3YXJtIHJlc2V0IHRvIHJlYm9vdCB0aGUgZGV2aWNlLgorICovCit2b2lkIG9tYXBfcHJtX3Jlc2V0X3N5c3RlbSh2b2lkKQoreworCWlmICghcHJtX2xsX2RhdGEtPnJlc2V0X3N5c3RlbSkgeworCQlXQVJOX09OQ0UoMSwgInBybTogJXM6IG5vIG1hcHBpbmcgZnVuY3Rpb24gZGVmaW5lZFxuIiwKKwkJCSAgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJcHJtX2xsX2RhdGEtPnJlc2V0X3N5c3RlbSgpOworCisJd2hpbGUgKDEpCisJCWNwdV9yZWxheCgpOworfQorCisvKioKICAqIHBybV9yZWdpc3RlciAtIHJlZ2lzdGVyIHBlci1Tb0MgbG93LWxldmVsIGRhdGEgd2l0aCB0aGUgUFJNCiAgKiBAcGxkOiBsb3ctbGV2ZWwgcGVyLVNvQyBPTUFQIFBSTSBkYXRhICYgZnVuY3Rpb24gcG9pbnRlcnMgdG8gcmVnaXN0ZXIKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmMKaW5kZXggMjI1ZTAyNS4uOGFkZjdiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguYwpAQCAtMTQ4LDggKzE0OCwxMiBAQAogLyoqCiAgKiBvbWFwNF9wcm1pbnN0X2RlYXNzZXJ0X2hhcmRyZXNldCAtIGRlYXNzZXJ0IGEgc3VibW9kdWxlIGhhcmRyZXNldCBsaW5lIGFuZAogICogd2FpdAotICogQHJzdGN0cmxfcmVnOiBSTV9SU1RDVFJMIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXMgbW9kdWxlCiAgKiBAc2hpZnQ6IHJlZ2lzdGVyIGJpdCBzaGlmdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXNldCBsaW5lIHRvIGRlYXNzZXJ0CisgKiBAc3Rfc2hpZnQ6IHN0YXR1cyBiaXQgb2Zmc2V0LCBub3QgdXNlZCBmb3IgT01BUDQrCisgKiBAcGFydDogUFJNIHBhcnRpdGlvbgorICogQGluc3Q6IFBSTSBpbnN0YW5jZSBvZmZzZXQKKyAqIEByc3RjdHJsX29mZnM6IHJlc2V0IHJlZ2lzdGVyIG9mZnNldAorICogQHN0X29mZnM6IHJlc2V0IHN0YXR1cyByZWdpc3RlciBvZmZzZXQsIG5vdCB1c2VkIGZvciBPTUFQNCsKICAqCiAgKiBTb21lIElQcyBsaWtlIGRzcCwgaXB1IG9yIGl2YSBjb250YWluIHByb2Nlc3NvcnMgdGhhdCByZXF1aXJlIGFuIEhXCiAgKiByZXNldCBsaW5lIHRvIGJlIGFzc2VydGVkIC8gZGVhc3NlcnRlZCBpbiBvcmRlciB0byBmdWxseSBlbmFibGUgdGhlCkBAIC0xNjAsOCArMTY0LDggQEAKICAqIC1FSU5WQUwgdXBvbiBhbiBhcmd1bWVudCBlcnJvciwgLUVFWElTVCBpZiB0aGUgc3VibW9kdWxlIHdhcyBhbHJlYWR5IG91dAogICogb2YgcmVzZXQsIG9yIC1FQlVTWSBpZiB0aGUgc3VibW9kdWxlIGRpZCBub3QgZXhpdCByZXNldCBwcm9tcHRseS4KICAqLwotaW50IG9tYXA0X3BybWluc3RfZGVhc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgaW5zdCwKLQkJCQkgICAgIHUxNiByc3RjdHJsX29mZnMpCitpbnQgb21hcDRfcHJtaW5zdF9kZWFzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHN0X3NoaWZ0LCB1OCBwYXJ0LCBzMTYgaW5zdCwKKwkJCQkgICAgIHUxNiByc3RjdHJsX29mZnMsIHUxNiBzdF9vZmZzKQogewogCWludCBjOwogCXUzMiBtYXNrID0gMSA8PCBzaGlmdDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguaAppbmRleCA1ODNhYTM3Li5mYjFjOWQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5oCkBAIC0zMCw4ICszMCw5IEBACiAJCQkJCSAgICAgICB1MTYgcnN0Y3RybF9vZmZzKTsKIGV4dGVybiBpbnQgb21hcDRfcHJtaW5zdF9hc3NlcnRfaGFyZHJlc2V0KHU4IHNoaWZ0LCB1OCBwYXJ0LCBzMTYgaW5zdCwKIAkJCQkJICB1MTYgcnN0Y3RybF9vZmZzKTsKLWV4dGVybiBpbnQgb21hcDRfcHJtaW5zdF9kZWFzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHBhcnQsIHMxNiBpbnN0LAotCQkJCQkgICAgdTE2IHJzdGN0cmxfb2Zmcyk7CitpbnQgb21hcDRfcHJtaW5zdF9kZWFzc2VydF9oYXJkcmVzZXQodTggc2hpZnQsIHU4IHN0X3NoaWZ0LCB1OCBwYXJ0LAorCQkJCSAgICAgczE2IGluc3QsIHUxNiByc3RjdHJsX29mZnMsCisJCQkJICAgICB1MTYgcnN0c3Rfb2Zmcyk7CiAKIGV4dGVybiB2b2lkIG9tYXBfcHJtX2Jhc2VfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggYTM4OGY4Yy4uNTdkZWUwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0yNjMsOSArMjYzLDYgQEAKIAlvbWFwX3VwLmRtYV9yeF90aW1lb3V0ID0gaW5mby0+ZG1hX3J4X3RpbWVvdXQ7CiAJb21hcF91cC5kbWFfcnhfcG9sbF9yYXRlID0gaW5mby0+ZG1hX3J4X3BvbGxfcmF0ZTsKIAlvbWFwX3VwLmF1dG9zdXNwZW5kX3RpbWVvdXQgPSBpbmZvLT5hdXRvc3VzcGVuZF90aW1lb3V0OwotCW9tYXBfdXAuRFRSX2dwaW8gPSBpbmZvLT5EVFJfZ3BpbzsKLQlvbWFwX3VwLkRUUl9pbnZlcnRlZCA9IGluZm8tPkRUUl9pbnZlcnRlZDsKLQlvbWFwX3VwLkRUUl9wcmVzZW50ID0gaW5mby0+RFRSX3ByZXNlbnQ7CiAKIAlwZGF0YSA9ICZvbWFwX3VwOwogCXBkYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IG9tYXBfdWFydF9wb3J0X2luZm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggZTY2OTBhNC4uODNlZmU5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC00LDYgKzQsMTcgQEAKIAogY29tbWVudCAiSW50ZWwvTWFydmVsbCBEZXYgUGxhdGZvcm1zIChzb3J0ZWQgYnkgaGFyZHdhcmUgcmVsZWFzZSB0aW1lKSIKIAorY29uZmlnIE1BQ0hfUFhBMjdYX0RUCisJYm9vbCAiU3VwcG9ydCBQWEEyN3ggcGxhdGZvcm1zIGZyb20gZGV2aWNlIHRyZWUiCisJc2VsZWN0IENQVV9QWEEyN3gKKwlzZWxlY3QgUE9XRVJfU1VQUExZCisJc2VsZWN0IFBYQTI3eAorCXNlbGVjdCBVU0VfT0YKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1hcnZlbGwgUFhBMjd4IGJhc2VkIHBsYXRmb3JtcyB1c2luZworCSAgdGhlIGRldmljZSB0cmVlLiBOZWVkbid0IHNlbGVjdCBhbnkgb3RoZXIgbWFjaGluZSB3aGlsZQorCSAgTUFDSF9QWEEyN1hfRFQgaXMgZW5hYmxlZC4KKwogY29uZmlnIE1BQ0hfUFhBM1hYX0RUCiAJYm9vbCAiU3VwcG9ydCBQWEEzeHggcGxhdGZvcm1zIGZyb20gZGV2aWNlIHRyZWUiCiAJc2VsZWN0IENQVV9QWEEzMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKaW5kZXggMmZlMTgyNC4uZWIwYmY3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKQEAgLTIxLDYgKzIxLDcgQEAKIAogIyBEZXZpY2UgVHJlZSBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9QWEEzWFhfRFQpCSs9IHB4YS1kdC5vCitvYmotJChDT05GSUdfTUFDSF9QWEEyN1hfRFQpCSs9IHB4YS1kdC5vCiAKICMgSW50ZWwvTWFydmVsbCBEZXYgUGxhdGZvcm1zCiBvYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKQkrPSBsdWJib2NrLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwppbmRleCA2OTE1YTlmLi41MTUzMWVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCkBAIC0zNzgsNyArMzc4LDcgQEAKIAogCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMTFfTkFORF9DUywgIk5BTkQgQ1MiKTsKIAlpZiAoZXJyKSB7Ci0JCXByX3dhcm5pbmcoIkVNLVgyNzA6IGZhaWxlZCB0byByZXF1ZXN0IE5BTkQgQ1MgZ3Bpb1xuIik7CisJCXByX3dhcm4oIkVNLVgyNzA6IGZhaWxlZCB0byByZXF1ZXN0IE5BTkQgQ1MgZ3Bpb1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM4Niw3ICszODYsNyBAQAogCiAJZXJyID0gZ3Bpb19yZXF1ZXN0KG5hbmRfcmIsICJOQU5EIFIvQiIpOwogCWlmIChlcnIpIHsKLQkJcHJfd2FybmluZygiRU0tWDI3MDogZmFpbGVkIHRvIHJlcXVlc3QgTkFORCBSL0IgZ3Bpb1xuIik7CisJCXByX3dhcm4oIkVNLVgyNzA6IGZhaWxlZCB0byByZXF1ZXN0IE5BTkQgUi9CIGdwaW9cbiIpOwogCQlncGlvX2ZyZWUoR1BJTzExX05BTkRfQ1MpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCmluZGV4IDg5NjM5ODQuLjdhOWZhMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKQEAgLTEzLDExICsxMywxMSBAQAogCiBzdHJ1Y3QgaXJxX2RhdGE7CiAKLWV4dGVybiB2b2lkIHB4YV90aW1lcl9pbml0KHZvaWQpOwotCi1leHRlcm4gdm9pZCBfX2luaXQgcHhhX21hcF9pbyh2b2lkKTsKLQogZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50IGluZm8pOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YV9kdF9pcnFfaW5pdChpbnQgKCpmbikoc3RydWN0IGlycV9kYXRhICosCisJCQkJCSAgICAgdW5zaWduZWQgaW50KSk7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhX21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIHB4YV90aW1lcl9pbml0KHZvaWQpOwogCiAjZGVmaW5lIFNFVF9CQU5LKF9fbnIsX19zdGFydCxfX3NpemUpIFwKIAltaS0+YmFua1tfX25yXS5zdGFydCA9IChfX3N0YXJ0KSwgXApAQCAtMjUsMjkgKzI1LDIxIEBACiAKICNkZWZpbmUgQVJSQVlfQU5EX1NJWkUoeCkJKHgpLCBBUlJBWV9TSVpFKHgpCiAKLSNpZmRlZiBDT05GSUdfUFhBMjV4Ci1leHRlcm4gdW5zaWduZWQgcHhhMjV4X2dldF9jbGtfZnJlcXVlbmN5X2toeihpbnQpOwotI2Vsc2UKLSNkZWZpbmUgcHhhMjV4X2dldF9jbGtfZnJlcXVlbmN5X2toeih4KQkJKDApCi0jZW5kaWYKKyNkZWZpbmUgcHhhMjV4X2hhbmRsZV9pcnEgaWNpcF9oYW5kbGVfaXJxCitleHRlcm4gdm9pZCBfX2luaXQgcHhhMjV4X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI1eF9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhMjZ4X2luaXRfaXJxKHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX1BYQTI3eAotZXh0ZXJuIHVuc2lnbmVkIHB4YTI3eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50KTsKLSNlbHNlCi0jZGVmaW5lIHB4YTI3eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooeCkJCSgwKQotI2VuZGlmCisjZGVmaW5lIHB4YTI3eF9oYW5kbGVfaXJxIGljaHBfaGFuZGxlX2lycQorZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI3eF9kdF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZAlweGEyN3hfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCk7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhMjd4X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI3eF9tYXBfaW8odm9pZCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QWEEyNXgpIHx8IGRlZmluZWQoQ09ORklHX1BYQTI3eCkKLWV4dGVybiB2b2lkIHB4YTJ4eF9jbGVhcl9yZXNldF9zdGF0dXModW5zaWduZWQgaW50KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgcHhhMnh4X2NsZWFyX3Jlc2V0X3N0YXR1cyh1bnNpZ25lZCBpbnQgbWFzaykge30KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BYQTN4eAotZXh0ZXJuIHVuc2lnbmVkIHB4YTN4eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50KTsKLSNlbHNlCi0jZGVmaW5lIHB4YTN4eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooeCkJCSgwKQotI2VuZGlmCisjZGVmaW5lIHB4YTN4eF9oYW5kbGVfaXJxIGljaHBfaGFuZGxlX2lycQorZXh0ZXJuIHZvaWQgX19pbml0IHB4YTN4eF9kdF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGEzeHhfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhM3h4X21hcF9pbyh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBweGFfaXJxX3N5c2NvcmVfb3BzOwogZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBweGEyeHhfbWZwX3N5c2NvcmVfb3BzOwpAQCAtNTksMyArNTEsMzAgQEAKIHZvaWQgX19pbml0IHB4YV9zZXRfaHd1YXJ0X2luZm8odm9pZCAqaW5mbyk7CiAKIHZvaWQgcHhhX3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSwgY29uc3QgY2hhciAqKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBMjd4KQorZXh0ZXJuIHZvaWQgcHhhMnh4X2NsZWFyX3Jlc2V0X3N0YXR1cyh1bnNpZ25lZCBpbnQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBweGEyeHhfY2xlYXJfcmVzZXRfc3RhdHVzKHVuc2lnbmVkIGludCBtYXNrKSB7fQorI2VuZGlmCisKKy8qCisgKiBPbmNlIGZ1bGx5IGNvbnZlcnRlZCB0byB0aGUgY2xvY2sgZnJhbWV3b3JrLCBhbGwgdGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZQorICogcmVtb3ZlZCwgYW5kIHJlcGxhY2VkIHdpdGggYSBjbGtfZ2V0KE5VTEwsICJjb3JlIikuCisgKi8KKyNpZmRlZiBDT05GSUdfUFhBMjV4CitleHRlcm4gdW5zaWduZWQgcHhhMjV4X2dldF9jbGtfZnJlcXVlbmN5X2toeihpbnQpOworI2Vsc2UKKyNkZWZpbmUgcHhhMjV4X2dldF9jbGtfZnJlcXVlbmN5X2toeih4KQkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QWEEyN3gKKyNlbHNlCisjZGVmaW5lIHB4YTI3eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooeCkJCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFhBM3h4CitleHRlcm4gdW5zaWduZWQJcHhhM3h4X2dldF9jbGtfZnJlcXVlbmN5X2toeihpbnQpOworI2Vsc2UKKyNkZWZpbmUgcHhhM3h4X2dldF9jbGtfZnJlcXVlbmN5X2toeih4KQkJKDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYwppbmRleCAwMGI5MmRhLi5mNmM3NmEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCkBAIC0xNDAsOCArMTQwLDcgQEAKIAlpbnQgdGltZW91dCA9IDUwMDsKIAogCWlmICghKE9TQ0MgJiBPU0NDX09PSykpCi0JCXByX3dhcm5pbmcoIjMya0h6IGNsb2NrIHdhcyBub3Qgb24uIEJvb3Rsb2FkZXIgbWF5IG5lZWQgdG8gIgotCQkJCSJiZSB1cGRhdGVkXG4iKTsKKwkJcHJfd2FybigiMzJrSHogY2xvY2sgd2FzIG5vdCBvbi4gQm9vdGxvYWRlciBtYXkgbmVlZCB0byBiZSB1cGRhdGVkXG4iKTsKIAllbHNlCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI1eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI1eC5oCmluZGV4IDNhYzBiYWEuLjVhMzQxNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyNXguaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjV4LmgKQEAgLTYsMTIgKzYsNCBAQAogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogCi1leHRlcm4gdm9pZCBfX2luaXQgcHhhMjV4X21hcF9pbyh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCBweGEyNXhfaW5pdF9pcnEodm9pZCk7Ci0jaWZkZWYgQ09ORklHX0NQVV9QWEEyNngKLWV4dGVybiB2b2lkIF9faW5pdCBweGEyNnhfaW5pdF9pcnEodm9pZCk7Ci0jZW5kaWYKLQotI2RlZmluZSBweGEyNXhfaGFuZGxlX2lycQlpY2lwX2hhbmRsZV9pcnEKLQogI2VuZGlmIC8qIF9fTUFDSF9QWEEyNXhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eC5oCmluZGV4IDdjZmY2NDAuLjU5OWI5MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyN3guaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjd4LmgKQEAgLTE5LDExICsxOSw3IEBACiAjZGVmaW5lIEFSQl9DT1JFX1BBUksJCSgxPDwyNCkJICAgLyogQmUgcGFya2VkIHdpdGggY29yZSB3aGVuIGlkbGUgKi8KICNkZWZpbmUgQVJCX0xPQ0tfRkxBRwkJKDE8PDIzKQkgICAvKiBPbmx5IExvY2tpbmcgbWFzdGVycyBnYWluIGFjY2VzcyB0byB0aGUgYnVzICovCiAKLWV4dGVybiB2b2lkIF9faW5pdCBweGEyN3hfbWFwX2lvKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI3eF9pbml0X2lycSh2b2lkKTsKIGV4dGVybiBpbnQgX19pbml0IHB4YTI3eF9zZXRfcHdybW9kZSh1bnNpZ25lZCBpbnQgbW9kZSk7CiBleHRlcm4gdm9pZCBweGEyN3hfY3B1X3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7CiAKLSNkZWZpbmUgcHhhMjd4X2hhbmRsZV9pcnEJaWNocF9oYW5kbGVfaXJxCi0KICNlbmRpZiAvKiBfX01BQ0hfUFhBMjd4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHguaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHguaAppbmRleCA2ZGQ3ZmExLi5iNDE0M2ZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC5oCkBAIC01LDkgKzUsNCBAQAogI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAotZXh0ZXJuIHZvaWQgX19pbml0IHB4YTN4eF9tYXBfaW8odm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgcHhhM3h4X2luaXRfaXJxKHZvaWQpOwotCi0jZGVmaW5lIHB4YTN4eF9oYW5kbGVfaXJxCWljaHBfaGFuZGxlX2lycQotCiAjZW5kaWYgLyogX19NQUNIX1BYQTNYWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKaW5kZXggZWYwNDI2YS4uNjY2Yjc4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYwpAQCAtOTMsOCArOTMsOCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiB3YXJuaW5nIGFuZCBmYWxsIHRocm91Z2gsIHRyZWF0IGFzIE1GUF9MUE1fREVGQVVMVCAqLwotCQlwcl93YXJuaW5nKCIlczogR1BJTyVkOiB1bnN1cHBvcnRlZCBsb3cgcG93ZXIgbW9kZVxuIiwKLQkJCQlfX2Z1bmNfXywgZ3Bpbyk7CisJCXByX3dhcm4oIiVzOiBHUElPJWQ6IHVuc3VwcG9ydGVkIGxvdyBwb3dlciBtb2RlXG4iLAorCQkJX19mdW5jX18sIGdwaW8pOwogCQlicmVhazsKIAl9CiAKQEAgLTEwNywxNCArMTA3LDEyIEBACiAJICogY29uZmlndXJhdGlvbnMgb2YgdGhvc2UgcGlucyBub3QgYWJsZSB0byB3YWtldXAKIAkgKi8KIAlpZiAoKGMgJiBNRlBfTFBNX0NBTl9XQUtFVVApICYmICFncGlvX2Rlc2NbZ3Bpb10uY2FuX3dha2V1cCkgewotCQlwcl93YXJuaW5nKCIlczogR1BJTyVkIHVuYWJsZSB0byB3YWtldXBcbiIsCi0JCQkJX19mdW5jX18sIGdwaW8pOworCQlwcl93YXJuKCIlczogR1BJTyVkIHVuYWJsZSB0byB3YWtldXBcbiIsIF9fZnVuY19fLCBncGlvKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKChjICYgTUZQX0xQTV9DQU5fV0FLRVVQKSAmJiBpc19vdXQpIHsKLQkJcHJfd2FybmluZygiJXM6IG91dHB1dCBHUElPJWQgdW5hYmxlIHRvIHdha2V1cFxuIiwKLQkJCQlfX2Z1bmNfXywgZ3Bpbyk7CisJCXByX3dhcm4oIiVzOiBvdXRwdXQgR1BJTyVkIHVuYWJsZSB0byB3YWtldXBcbiIsIF9fZnVuY19fLCBncGlvKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMjYsNyArMTI0LDcgQEAKIAlpbnQgZ3BpbyA9IG1mcF90b19ncGlvKG1mcCk7CiAKIAlpZiAoKG1mcCA+IE1GUF9QSU5fR1BJTzEyNykgfHwgIWdwaW9fZGVzY1tncGlvXS52YWxpZCkgewotCQlwcl93YXJuaW5nKCIlczogR1BJTyVkIGlzIGludmFsaWQgcGluXG4iLCBfX2Z1bmNfXywgZ3Bpbyk7CisJCXByX3dhcm4oIiVzOiBHUElPJWQgaXMgaW52YWxpZCBwaW5cbiIsIF9fZnVuY19fLCBncGlvKTsKIAkJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwppbmRleCAxMzE5OTE2Li4yOTAxOWJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAKIAlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJwb29kbGU6IFVuYWJsZSB0byByZWdpc3RlciBMb0NvTW8gZGV2aWNlXG4iKTsKKwkJcHJfd2FybigicG9vZGxlOiBVbmFibGUgdG8gcmVnaXN0ZXIgTG9Db01vIGRldmljZVxuIik7CiAKIAlweGFfc2V0X2ZiX2luZm8oJnBvb2RsZV9sb2NvbW9fZGV2aWNlLmRldiwgJnBvb2RsZV9mYl9pbmZvKTsKIAlweGFfc2V0X3VkY19pbmZvKCZ1ZGNfaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEtZHQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YS1kdC5jCmluZGV4IGY2YTJjNGIuLjdlMGU1YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YS1kdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YS1kdC5jCkBAIC0xNSwxMyArMTUsMTAgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhM3h4Lmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKICNpZmRlZiBDT05GSUdfUFhBM3h4Ci1leHRlcm4gdm9pZCBfX2luaXQgcHhhM3h4X2R0X2luaXRfaXJxKHZvaWQpOwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldl9hdXhkYXRhIHB4YTN4eF9hdXhkYXRhX2xvb2t1cFtdIF9faW5pdGNvbnN0ID0gewogCU9GX0RFVl9BVVhEQVRBKCJtcnZsLHB4YS11YXJ0IiwJCTB4NDAxMDAwMDAsICJweGEyeHgtdWFydC4wIiwgTlVMTCksCiAJT0ZfREVWX0FVWERBVEEoIm1ydmwscHhhLXVhcnQiLAkJMHg0MDIwMDAwMCwgInB4YTJ4eC11YXJ0LjEiLCBOVUxMKSwKQEAgLTYxLDMgKzU4LDE4IEBACiAJLmR0X2NvbXBhdAk9IHB4YTN4eF9kdF9ib2FyZF9jb21wYXQsCiBNQUNISU5FX0VORAogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFhBMjd4CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHB4YTI3eF9kdF9ib2FyZF9jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKKwkibWFydmVsbCxweGEyNzAiLAorCU5VTEwsCit9OworCitEVF9NQUNISU5FX1NUQVJUKFBYQTI3WF9EVCwgIk1hcnZlbGwgUFhBMnh4IChEZXZpY2UgVHJlZSBTdXBwb3J0KSIpCisJLm1hcF9pbwkJPSBweGEyN3hfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI3eF9kdF9pbml0X2lycSwKKwkuaGFuZGxlX2lycQk9IHB4YTI3eF9oYW5kbGVfaXJxLAorCS5yZXN0YXJ0CT0gcHhhX3Jlc3RhcnQsCisJLmR0X2NvbXBhdAk9IHB4YTI3eF9kdF9ib2FyZF9jb21wYXQsCitNQUNISU5FX0VORAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCmluZGV4IGIwNDBkN2QuLmFmNDIzYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCkBAIC0zOTgsNiArMzk4LDEyIEBACiAJcHhhX2luaXRfaXJxKDM0LCBweGEyN3hfc2V0X3dha2UpOwogfQogCit2b2lkIF9faW5pdCBweGEyN3hfZHRfaW5pdF9pcnEodm9pZCkKK3sKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpKQorCQlweGFfZHRfaXJxX2luaXQocHhhMjd4X3NldF93YWtlKTsKK30KKwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBweGEyN3hfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewkvKiBNZW0gQ3RsICovCiAJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpU01FTUNfVklSVCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC11bHBpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHgtdWxwaS5jCmluZGV4IGUzMjljY2UuLjYxNDAwM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC11bHBpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LXVscGkuYwpAQCAtNzQsNyArNzQsNyBAQAogCQljcHVfcmVsYXgoKTsKIAl9CiAKLQlwcl93YXJuaW5nKCIlczogVUxQSSBhY2Nlc3MgdGltZWQgb3V0IVxuIiwgX19mdW5jX18pOworCXByX3dhcm4oIiVzOiBVTFBJIGFjY2VzcyB0aW1lZCBvdXQhXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KQEAgLTg0LDcgKzg0LDcgQEAKIAlpbnQgZXJyOwogCiAJaWYgKHB4YTMxMF91bHBpX2dldF9waHltb2RlKCkgIT0gU1lOQ0gpIHsKLQkJcHJfd2FybmluZygiJXM6IFBIWSBpcyBub3QgaW4gU1lOQ0ggbW9kZSFcbiIsIF9fZnVuY19fKTsKKwkJcHJfd2FybigiJXM6IFBIWSBpcyBub3QgaW4gU1lOQ0ggbW9kZSFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogc3RhdGljIGludCBweGEzMTBfdWxwaV93cml0ZShzdHJ1Y3QgdXNiX3BoeSAqb3RnLCB1MzIgdmFsLCB1MzIgcmVnKQogewogCWlmIChweGEzMTBfdWxwaV9nZXRfcGh5bW9kZSgpICE9IFNZTkNIKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBQSFkgaXMgbm90IGluIFNZTkNIIG1vZGUhXG4iLCBfX2Z1bmNfXyk7CisJCXByX3dhcm4oIiVzOiBQSFkgaXMgbm90IGluIFNZTkNIIG1vZGUhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcmF1bWZlbGQuYwppbmRleCA4Mzg2ZGMzLi5hNzYyYjIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogCQkJCSJXMSBleHRlcm5hbCBwdWxsdXAgZW5hYmxlIik7CiAKIAlpZiAocmV0IDwgMCkKLQkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19XMV9QVUxMVVBfRU5BQkxFXG4iKTsKKwkJcHJfd2FybigiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19XMV9QVUxMVVBfRU5BQkxFXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1cxX1BVTExVUF9FTkFCTEUsIDApOwogCkBAIC02MDAsNyArNjAwLDcgQEAKIAogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1RGVF9WQV9FTiwgImRpc3BsYXkgVkEgZW5hYmxlIik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fVEZUX1ZBX0VOXG4iKTsKKwkJcHJfd2FybigiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19URlRfVkFfRU5cbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fVEZUX1ZBX0VOLCAxKTsKIApAQCAtNjA4LDcgKzYwOCw3IEBACiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19ESVNQTEFZX0VOQUJMRSwgImRpc3BsYXkgZW5hYmxlIik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fRElTUExBWV9FTkFCTEVcbiIpOworCQlwcl93YXJuKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX0RJU1BMQVlfRU5BQkxFXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0RJU1BMQVlfRU5BQkxFLCAxKTsKIApAQCAtODE0LDE3ICs4MTQsMTcgQEAKIAkvKiBTZXQgUEVOMiBoaWdoIHRvIGVuYWJsZSBtYXhpbXVtIGNoYXJnZSBjdXJyZW50ICovCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fQ0hSR19QRU4yLCAiQ0hSR19QRU4yIik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fQ0hSR19QRU4yXG4iKTsKKwkJcHJfd2FybigiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19DSFJHX1BFTjJcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fQ0hSR19QRU4yLCAxKTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0NIQVJHRV9EQ19PSywgIkNBQkxFX0RDX09LIik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fQ0hBUkdFX0RDX09LXG4iKTsKKwkJcHJfd2FybigiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19DSEFSR0VfRENfT0tcbiIpOwogCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fQ0hBUkdFX1VTQl9TVVNQLCAiQ0hBUkdFX1VTQl9TVVNQIik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fQ0hBUkdFX1VTQl9TVVNQXG4iKTsKKwkJcHJfd2FybigiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19DSEFSR0VfVVNCX1NVU1BcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fQ0hBUkdFX1VTQl9TVVNQLCAwKTsKIApAQCAtOTc2LDE5ICs5NzYsMTkgQEAKIAogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0NPREVDX1JFU0VULCAiY3M0MjcwIHJlc2V0Iik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoInVuYWJsZSB0byByZXF1ZXN0IEdQSU9fQ09ERUNfUkVTRVRcbiIpOworCQlwcl93YXJuKCJ1bmFibGUgdG8gcmVxdWVzdCBHUElPX0NPREVDX1JFU0VUXG4iKTsKIAllbHNlCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0NPREVDX1JFU0VULCAxKTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1NQRElGX1JFU0VULCAiYWs0MTA0IHMvcGRpZiByZXNldCIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVxdWVzdCBHUElPX1NQRElGX1JFU0VUXG4iKTsKKwkJcHJfd2FybigidW5hYmxlIHRvIHJlcXVlc3QgR1BJT19TUERJRl9SRVNFVFxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19TUERJRl9SRVNFVCwgMSk7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19NQ0xLX1JFU0VULCAiTUNMSyByZXNldCIpOwogCWlmIChyZXQgPCAwKQotCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVxdWVzdCBHUElPX01DTEtfUkVTRVRcbiIpOworCQlwcl93YXJuKCJ1bmFibGUgdG8gcmVxdWVzdCBHUElPX01DTEtfUkVTRVRcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTUNMS19SRVNFVCwgMSk7CiAKQEAgLTEwMTksMjAgKzEwMTksMjAgQEAKIAogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1cyV19SRVNFVCwgIldpMldpIHJlc2V0Iik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fVzJXX1JFU0VUXG4iKTsKKwkJcHJfd2FybigiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19XMldfUkVTRVRcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fVzJXX1JFU0VULCAwKTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1cyV19QRE4sICJXaTJXaSBwb3dlcnVwIik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fVzJXX1BETlxuIik7CisJCXByX3dhcm4oIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fVzJXX1BETlxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19XMldfUEROLCAwKTsKIAogCS8qIHRoaXMgY2FuIGJlIHVzZWQgdG8gc3dpdGNoIG9mZiB0aGUgZGV2aWNlICovCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fU0hVVERPV05fU1VQUExZLCAic3VwcGx5IHNodXRkb3duIik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fU0hVVERPV05fU1VQUExZXG4iKTsKKwkJcHJfd2FybigiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19TSFVURE9XTl9TVVBQTFlcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fU0hVVERPV05fU1VQUExZLCAwKTsKIApAQCAtMTA1MSw3ICsxMDUxLDcgQEAKIAogCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1NIVVRET1dOX0JBVFQsICJiYXR0ZXJ5IHNodXRkb3duIik7CiAJaWYgKHJldCA8IDApCi0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fU0hVVERPV05fQkFUVFxuIik7CisJCXByX3dhcm4oIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fU0hVVERPV05fQkFUVFxuIik7CiAJZWxzZQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19TSFVURE9XTl9CQVRULCAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCmluZGV4IGMxNThhNmUuLjc3ODBkMWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXIvZ3Bpby1jaGFyZ2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgpAQCAtMzYxLDQ0ICszNjEsMTcgQEAKIC8qCiAgKiBUb3NhIEFDIElOCiAgKi8KLXN0YXRpYyBpbnQgdG9zYV9wb3dlcl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0ID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19BQ19JTiwgImFjIGluIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfZ3Bpb19yZXE7Ci0KLQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChUT1NBX0dQSU9fQUNfSU4pOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX2dwaW9faW47Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2dwaW9faW46Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19BQ19JTik7Ci1lcnJfZ3Bpb19yZXE6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgdG9zYV9wb3dlcl9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoVE9TQV9HUElPX0FDX0lOKTsKLX0KLQotc3RhdGljIGludCB0b3NhX3Bvd2VyX2FjX29ubGluZSh2b2lkKQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShUT1NBX0dQSU9fQUNfSU4pID09IDA7Ci19Ci0KIHN0YXRpYyBjaGFyICp0b3NhX2FjX3N1cHBsaWVkX3RvW10gPSB7CiAJIm1haW4tYmF0dGVyeSIsCiAJImJhY2t1cC1iYXR0ZXJ5IiwKIAkiamFja2V0LWJhdHRlcnkiLAogfTsKIAotc3RhdGljIHN0cnVjdCBwZGFfcG93ZXJfcGRhdGEgdG9zYV9wb3dlcl9kYXRhID0gewotCS5pbml0CQkJPSB0b3NhX3Bvd2VyX2luaXQsCi0JLmlzX2FjX29ubGluZQkJPSB0b3NhX3Bvd2VyX2FjX29ubGluZSwKLQkuZXhpdAkJCT0gdG9zYV9wb3dlcl9leGl0LAorc3RhdGljIHN0cnVjdCBncGlvX2NoYXJnZXJfcGxhdGZvcm1fZGF0YSB0b3NhX3Bvd2VyX2RhdGEgPSB7CisJLm5hbWUJCQk9ICJjaGFyZ2VyIiwKKwkudHlwZQkJCT0gUE9XRVJfU1VQUExZX1RZUEVfTUFJTlMsCisJLmdwaW8JCQk9IFRPU0FfR1BJT19BQ19JTiwKKwkuZ3Bpb19hY3RpdmVfbG93CT0gMSwKIAkuc3VwcGxpZWRfdG8JCT0gdG9zYV9hY19zdXBwbGllZF90bywKIAkubnVtX3N1cHBsaWNhbnRzCT0gQVJSQVlfU0laRSh0b3NhX2FjX3N1cHBsaWVkX3RvKSwKIH07CkBAIC00MTUsNyArMzg4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRvc2FfcG93ZXJfZGV2aWNlID0gewotCS5uYW1lCQkJPSAicGRhLXBvd2VyIiwKKwkubmFtZQkJCT0gImdwaW8tY2hhcmdlciIsCiAJLmlkCQkJPSAtMSwKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmdG9zYV9wb3dlcl9kYXRhLAogCS5yZXNvdXJjZQkJPSB0b3NhX3Bvd2VyX3Jlc291cmNlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCmluZGV4IDlkYjIwMjkuLjU2NTkyNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKQEAgLTEsNiArMSwxOSBAQAogbWVudSAiUmVhbFZpZXcgcGxhdGZvcm0gdHlwZSIKIAlkZXBlbmRzIG9uIEFSQ0hfUkVBTFZJRVcKIAorY29uZmlnIFJFQUxWSUVXX0RUCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBEZXZpY2UgVHJlZSBiYXNlZCBib290IgorCXNlbGVjdCBBUk1fR0lDCisJc2VsZWN0IE1GRF9TWVNDT04KKwlzZWxlY3QgUE9XRVJfUkVTRVQKKwlzZWxlY3QgUE9XRVJfUkVTRVRfVkVSU0FUSUxFCisJc2VsZWN0IFBPV0VSX1NVUFBMWQorCXNlbGVjdCBTT0NfUkVBTFZJRVcKKwlzZWxlY3QgVVNFX09GCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBib290aW5nIHRoZSBBUk0oUikgUmVhbFZpZXcoUikgZXZhbHVhdGlvbgorCSAgYm9hcmRzIHVzaW5nIGEgZGV2aWNlIHRyZWUgbWFjaGluZSBkZXNjcmlwdGlvbi4KKwogY29uZmlnIE1BQ0hfUkVBTFZJRVdfRUIKIAlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQiCiAJc2VsZWN0IEFSTV9HSUMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L01ha2VmaWxlCmluZGV4IDU0MWZhNGMuLmUwN2ZkZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKICMKIAogb2JqLXkJCQkJCTo9IGNvcmUubworb2JqLSQoQ09ORklHX1JFQUxWSUVXX0RUKQkJKz0gcmVhbHZpZXctZHQubwogb2JqLSQoQ09ORklHX01BQ0hfUkVBTFZJRVdfRUIpCQkrPSByZWFsdmlld19lYi5vCiBvYmotJChDT05GSUdfTUFDSF9SRUFMVklFV19QQjExTVApCSs9IHJlYWx2aWV3X3BiMTFtcC5vCiBvYmotJChDT05GSUdfTUFDSF9SRUFMVklFV19QQjExNzYpCSs9IHJlYWx2aWV3X3BiMTE3Ni5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3LWR0LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3LWR0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyOGI4OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXctZHQuYwpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMdGQuCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KKyNpbmNsdWRlICJjb3JlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWFsdmlld19kdF9wbGF0Zm9ybV9jb21wYXRbXSBfX2luaXRjb25zdCA9IHsKKwkiYXJtLHJlYWx2aWV3LWViIiwKKwkiYXJtLHJlYWx2aWV3LXBiMTE3NiIsCisJImFybSxyZWFsdmlldy1wYjExbXAiLAorCSJhcm0scmVhbHZpZXctcGJhOCIsCisJImFybSxyZWFsdmlldy1wYngiLAorCU5VTEwsCit9OworCitEVF9NQUNISU5FX1NUQVJUKFJFQUxWSUVXX0RULCAiQVJNIFJlYWxWaWV3IE1hY2hpbmUgKERldmljZSBUcmVlIFN1cHBvcnQpIikKKyNpZmRlZiBDT05GSUdfWk9ORV9ETUEKKwkuZG1hX3pvbmVfc2l6ZQk9IFNaXzI1Nk0sCisjZW5kaWYKKwkuZHRfY29tcGF0CT0gcmVhbHZpZXdfZHRfcGxhdGZvcm1fY29tcGF0LAorCS5sMmNfYXV4X3ZhbCA9IDB4MCwKKwkubDJjX2F1eF9tYXNrID0gfjB4MCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL2hlYWRzbXAuUyBiL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvaGVhZHNtcC5TCmluZGV4IDczMjA2ZTMuLjQ2YzIyZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvaGVhZHNtcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvaGVhZHNtcC5TCkBAIC0xNiw3ICsxNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogRU5UUlkocm9ja2NoaXBfc2Vjb25kYXJ5X3N0YXJ0dXApCi0JYmwJdjdfaW52YWxpZGF0ZV9sMQorCW1yYwlwMTUsIDAsIHIwLCBjMCwgYzAsIDAJQCByZWFkIG1haW4gSUQgcmVnaXN0ZXIKKwlsZHIJcjEsID0weDAwMDAwYzA5CQlAIENvcnRleC1BOSBwcmltYXJ5IHBhcnQgbnVtYmVyCisJdGVxCXIwLCByMQorCWJlcQl2N19pbnZhbGlkYXRlX2wxCiAJYglzZWNvbmRhcnlfc3RhcnR1cAogRU5EUFJPQyhyb2NrY2hpcF9zZWNvbmRhcnlfc3RhcnR1cCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3BsYXRzbXAuYwppbmRleCAxODk2ODRmLi5mMjZmY2RjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3BsYXRzbXAuYwpAQCAtMTksNyArMTksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KIAorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY3AxNS5oPgogI2luY2x1ZGUgPGFzbS9zbXBfc2N1Lmg+CkBAIC0zNywyMyArNDEsNzggQEAKIAogI2RlZmluZSBQTVVfUFdSRE5fU0NVCQk0CiAKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnBtdV9iYXNlX2FkZHI7CitzdGF0aWMgc3RydWN0IHJlZ21hcCAqcG11OwogCi1zdGF0aWMgaW5saW5lIGJvb2wgcG11X3Bvd2VyX2RvbWFpbl9pc19vbihpbnQgcGQpCitzdGF0aWMgaW50IHBtdV9wb3dlcl9kb21haW5faXNfb24oaW50IHBkKQogewotCXJldHVybiAhKHJlYWRsX3JlbGF4ZWQocG11X2Jhc2VfYWRkciArIFBNVV9QV1JETl9TVCkgJiBCSVQocGQpKTsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSByZWdtYXBfcmVhZChwbXUsIFBNVV9QV1JETl9TVCwgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gISh2YWwgJiBCSVQocGQpKTsKIH0KIAotc3RhdGljIHZvaWQgcG11X3NldF9wb3dlcl9kb21haW4oaW50IHBkLCBib29sIG9uKQorc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJvY2tjaGlwX2dldF9jb3JlX3Jlc2V0KGludCBjcHUpCiB7Ci0JdTMyIHZhbCA9IHJlYWRsX3JlbGF4ZWQocG11X2Jhc2VfYWRkciArIFBNVV9QV1JETl9DT04pOwotCWlmIChvbikKLQkJdmFsICY9IH5CSVQocGQpOwotCWVsc2UKLQkJdmFsIHw9ICBCSVQocGQpOwotCXdyaXRlbCh2YWwsIHBtdV9iYXNlX2FkZHIgKyBQTVVfUFdSRE5fQ09OKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBnZXRfY3B1X2RldmljZShjcHUpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKLQl3aGlsZSAocG11X3Bvd2VyX2RvbWFpbl9pc19vbihwZCkgIT0gb24pIHsgfQorCS8qIFRoZSBjcHUgZGV2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyIHRoZSBpbml0aWFsIGNvcmUgYnJpbmd1cCAqLworCWlmIChkZXYpCisJCW5wID0gZGV2LT5vZl9ub2RlOworCWVsc2UKKwkJbnAgPSBvZl9nZXRfY3B1X25vZGUoY3B1LCAwKTsKKworCXJldHVybiBvZl9yZXNldF9jb250cm9sX2dldChucCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgcG11X3NldF9wb3dlcl9kb21haW4oaW50IHBkLCBib29sIG9uKQoreworCXUzMiB2YWwgPSAob24pID8gMCA6IEJJVChwZCk7CisJaW50IHJldDsKKworCS8qCisJICogV2UgbmVlZCB0byBzb2Z0IHJlc2V0IHRoZSBjcHUgd2hlbiB3ZSB0dXJuIG9mZiB0aGUgY3B1IHBvd2VyIGRvbWFpbiwKKwkgKiBvciBlbHNlIHRoZSBhY3RpdmUgcHJvY2Vzc29ycyBtaWdodCBiZSBzdGFsbGVkIHdoZW4gdGhlIGluZGl2aWR1YWwKKwkgKiBwcm9jZXNzb3IgaXMgcG93ZXJlZCBkb3duLgorCSAqLworCWlmIChyZWFkX2NwdWlkX3BhcnQoKSAhPSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KSB7CisJCXN0cnVjdCByZXNldF9jb250cm9sICpyc3RjID0gcm9ja2NoaXBfZ2V0X2NvcmVfcmVzZXQocGQpOworCisJCWlmIChJU19FUlIocnN0YykpIHsKKwkJCXByX2VycigiJXM6IGNvdWxkIG5vdCBnZXQgcmVzZXQgY29udHJvbCBmb3IgY29yZSAlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgcGQpOworCQkJcmV0dXJuIFBUUl9FUlIocnN0Yyk7CisJCX0KKworCQlpZiAob24pCisJCQlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHJzdGMpOworCQllbHNlCisJCQlyZXNldF9jb250cm9sX2Fzc2VydChyc3RjKTsKKworCQlyZXNldF9jb250cm9sX3B1dChyc3RjKTsKKwl9CisKKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocG11LCBQTVVfUFdSRE5fQ09OLCBCSVQocGQpLCB2YWwpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiJXM6IGNvdWxkIG5vdCB1cGRhdGUgcG93ZXIgZG9tYWluXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gLTE7CisJd2hpbGUgKHJldCAhPSBvbikgeworCQlyZXQgPSBwbXVfcG93ZXJfZG9tYWluX2lzX29uKHBkKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2VycigiJXM6IGNvdWxkIG5vdCByZWFkIHBvd2VyIGRvbWFpbiBzdGF0ZVxuIiwKKwkJCQkgX19mdW5jX18pOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNjMsNyArMTIyLDkgQEAKIHN0YXRpYyBpbnQgX19jcHVpbml0IHJvY2tjaGlwX2Jvb3Rfc2Vjb25kYXJ5KHVuc2lnbmVkIGludCBjcHUsCiAJCQkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQogewotCWlmICghc3JhbV9iYXNlX2FkZHIgfHwgIXBtdV9iYXNlX2FkZHIpIHsKKwlpbnQgcmV0OworCisJaWYgKCFzcmFtX2Jhc2VfYWRkciB8fCAhcG11KSB7CiAJCXByX2VycigiJXM6IHNyYW0gb3IgcG11IG1pc3NpbmcgZm9yIGNwdSBib290XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5YSU87CiAJfQpAQCAtNzUsNyArMTM2LDI0IEBACiAJfQogCiAJLyogc3RhcnQgdGhlIGNvcmUgKi8KLQlwbXVfc2V0X3Bvd2VyX2RvbWFpbigwICsgY3B1LCB0cnVlKTsKKwlyZXQgPSBwbXVfc2V0X3Bvd2VyX2RvbWFpbigwICsgY3B1LCB0cnVlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChyZWFkX2NwdWlkX3BhcnQoKSAhPSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KSB7CisJCS8qIFdlIGNvbW11bmljYXRlIHdpdGggdGhlIGJvb3Ryb20gdG8gYWN0aXZlIHRoZSBjcHVzIG90aGVyCisJCSAqIHRoYW4gY3B1MCwgYWZ0ZXIgYSBibG9iIG9mIGluaXRpYWxpemUgY29kZSwgdGhleSB3aWxsCisJCSAqIHN0YXkgYXQgd2ZlIHN0YXRlLCBvbmNlIHRoZXkgYXJlIGFjdGl2ZWQsIHRoZXkgd2lsbCBjaGVjaworCQkgKiB0aGUgbWFpbGJveDoKKwkJICogc3JhbV9iYXNlX2FkZHIgKyA0OiAweGRlYWRiZWFmCisJCSAqIHNyYW1fYmFzZV9hZGRyICsgODogc3RhcnQgYWRkcmVzcyBmb3IgcGMKKwkJICogKi8KKwkJdWRlbGF5KDEwKTsKKwkJd3JpdGVsKHZpcnRfdG9fcGh5cyhyb2NrY2hpcF9zZWNvbmRhcnlfc3RhcnR1cCksCisJCQlzcmFtX2Jhc2VfYWRkciArIDgpOworCQl3cml0ZWwoMHhERUFEQkVBRiwgc3JhbV9iYXNlX2FkZHIgKyA0KTsKKwkJZHNiX3NldigpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTEwLDggKzE4OCw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXNyYW1fYmFzZV9hZGRyID0gb2ZfaW9tYXAobm9kZSwgMCk7Ci0KIAkvKiBzZXQgdGhlIGJvb3QgZnVuY3Rpb24gZm9yIHRoZSBzcmFtIGNvZGUgKi8KIAlyb2NrY2hpcF9ib290X2ZuID0gdmlydF90b19waHlzKHJvY2tjaGlwX3NlY29uZGFyeV9zdGFydHVwKTsKIApAQCAtMTI1LDU1ICsyMDEsMTE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByb2NrY2hpcF9wbXVfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSAzMiwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCByb2NrY2hpcF9zbXBfcHJlcGFyZV9wbXUodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisJdm9pZCBfX2lvbWVtICpwbXVfYmFzZTsKKworCS8qCisJICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCB2aWEgc21wX29wcy0+c21wX3ByZXBhcmVfY3B1KCkuCisJICogVGhhdCBvbmx5IGhhcHBlbnMgaWYgYSAiL2NwdXMiIGRldmljZSB0cmVlIG5vZGUgZXhpc3RzCisJICogYW5kIGhhcyBhbiAiZW5hYmxlLW1ldGhvZCIgcHJvcGVydHkgdGhhdCBzZWxlY3RzIHRoZSBTTVAKKwkgKiBvcGVyYXRpb25zIGRlZmluZWQgaGVyZWluLgorCSAqLworCW5vZGUgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2NwdXMiKTsKKworCXBtdSA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobm9kZSwgInJvY2tjaGlwLHBtdSIpOworCW9mX25vZGVfcHV0KG5vZGUpOworCWlmICghSVNfRVJSKHBtdSkpCisJCXJldHVybiAwOworCisJcG11ID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZSgicm9ja2NoaXAscmszMDY2LXBtdSIpOworCWlmICghSVNfRVJSKHBtdSkpCisJCXJldHVybiAwOworCisJLyogZmFsbGJhY2ssIGNyZWF0ZSBvdXIgb3duIHJlZ21hcCBmb3IgdGhlIHBtdSBhcmVhICovCisJcG11ID0gTlVMTDsKKwlub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgInJvY2tjaGlwLHJrMzA2Ni1wbXUiKTsKKwlpZiAoIW5vZGUpIHsKKwkJcHJfZXJyKCIlczogY291bGQgbm90IGZpbmQgcG11IGR0IG5vZGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcG11X2Jhc2UgPSBvZl9pb21hcChub2RlLCAwKTsKKwlpZiAoIXBtdV9iYXNlKSB7CisJCXByX2VycigiJXM6IGNvdWxkIG5vdCBtYXAgcG11IHJlZ2lzdGVyc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwbXUgPSByZWdtYXBfaW5pdF9tbWlvKE5VTEwsIHBtdV9iYXNlLCAmcm9ja2NoaXBfcG11X3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIocG11KSkgeworCQlpbnQgcmV0ID0gUFRSX0VSUihwbXUpOworCisJCWlvdW5tYXAocG11X2Jhc2UpOworCQlwbXUgPSBOVUxMOworCQlwcl9lcnIoIiVzOiByZWdtYXAgaW5pdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHJvY2tjaGlwX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYXJtLGNvcnRleC1hOS1zY3UiKTsKLQlpZiAoIW5vZGUpIHsKLQkJcHJfZXJyKCIlczogbWlzc2luZyBzY3VcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCXNjdV9iYXNlX2FkZHIgPSBvZl9pb21hcChub2RlLCAwKTsKLQlpZiAoIXNjdV9iYXNlX2FkZHIpIHsKLQkJcHJfZXJyKCIlczogY291bGQgbm90IG1hcCBzY3UgcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KIAlub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgInJvY2tjaGlwLHJrMzA2Ni1zbXAtc3JhbSIpOwogCWlmICghbm9kZSkgewogCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgZmluZCBzcmFtIGR0IG5vZGVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChyb2NrY2hpcF9zbXBfcHJlcGFyZV9zcmFtKG5vZGUpKQotCQlyZXR1cm47Ci0KLQlub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgInJvY2tjaGlwLHJrMzA2Ni1wbXUiKTsKLQlpZiAoIW5vZGUpIHsKLQkJcHJfZXJyKCIlczogY291bGQgbm90IGZpbmQgcG11IGR0IG5vZGVcbiIsIF9fZnVuY19fKTsKKwlzcmFtX2Jhc2VfYWRkciA9IG9mX2lvbWFwKG5vZGUsIDApOworCWlmICghc3JhbV9iYXNlX2FkZHIpIHsKKwkJcHJfZXJyKCIlczogY291bGQgbm90IG1hcCBzcmFtIHJlZ2lzdGVyc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JcG11X2Jhc2VfYWRkciA9IG9mX2lvbWFwKG5vZGUsIDApOwotCWlmICghcG11X2Jhc2VfYWRkcikgewotCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgbWFwIHBtdSByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKKwlpZiAocm9ja2NoaXBfc21wX3ByZXBhcmVfcG11KCkpCiAJCXJldHVybjsKKworCWlmIChyZWFkX2NwdWlkX3BhcnQoKSA9PSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E5KSB7CisJCWlmIChyb2NrY2hpcF9zbXBfcHJlcGFyZV9zcmFtKG5vZGUpKQorCQkJcmV0dXJuOworCisJCS8qIGVuYWJsZSB0aGUgU0NVIHBvd2VyIGRvbWFpbiAqLworCQlwbXVfc2V0X3Bvd2VyX2RvbWFpbihQTVVfUFdSRE5fU0NVLCB0cnVlKTsKKworCQlub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImFybSxjb3J0ZXgtYTktc2N1Iik7CisJCWlmICghbm9kZSkgeworCQkJcHJfZXJyKCIlczogbWlzc2luZyBzY3VcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNjdV9iYXNlX2FkZHIgPSBvZl9pb21hcChub2RlLCAwKTsKKwkJaWYgKCFzY3VfYmFzZV9hZGRyKSB7CisJCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgbWFwIHNjdSByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qCisJCSAqIFdoaWxlIHRoZSBudW1iZXIgb2YgY3B1cyBpcyBnYXRoZXJlZCBmcm9tIGR0LCBhbHNvIGdldCB0aGUKKwkJICogbnVtYmVyIG9mIGNvcmVzIGZyb20gdGhlIHNjdSB0byB2ZXJpZnkgdGhpcyB2YWx1ZSB3aGVuCisJCSAqIGJvb3RpbmcgdGhlIGNvcmVzLgorCQkgKi8KKwkJbmNvcmVzID0gc2N1X2dldF9jb3JlX2NvdW50KHNjdV9iYXNlX2FkZHIpOworCQlwcl9lcnIoIiVzOiBuY29yZXMgJWRcbiIsIF9fZnVuY19fLCBuY29yZXMpOworCisJCXNjdV9lbmFibGUoc2N1X2Jhc2VfYWRkcik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50IGwyY3RscjsKKworCQlhc20gKCJtcmMgcDE1LCAxLCAlMCwgYzksIGMwLCAyXG4iIDogIj1yIiAobDJjdGxyKSk7CisJCW5jb3JlcyA9ICgobDJjdGxyID4+IDI0KSAmIDB4MykgKyAxOwogCX0KIAotCS8qIGVuYWJsZSB0aGUgU0NVIHBvd2VyIGRvbWFpbiAqLwotCXBtdV9zZXRfcG93ZXJfZG9tYWluKFBNVV9QV1JETl9TQ1UsIHRydWUpOwotCi0JLyoKLQkgKiBXaGlsZSB0aGUgbnVtYmVyIG9mIGNwdXMgaXMgZ2F0aGVyZWQgZnJvbSBkdCwgYWxzbyBnZXQgdGhlIG51bWJlcgotCSAqIG9mIGNvcmVzIGZyb20gdGhlIHNjdSB0byB2ZXJpZnkgdGhpcyB2YWx1ZSB3aGVuIGJvb3RpbmcgdGhlIGNvcmVzLgotCSAqLwotCW5jb3JlcyA9IHNjdV9nZXRfY29yZV9jb3VudChzY3VfYmFzZV9hZGRyKTsKLQotCXNjdV9lbmFibGUoc2N1X2Jhc2VfYWRkcik7Ci0KIAkvKiBNYWtlIHN1cmUgdGhhdCBhbGwgY29yZXMgZXhjZXB0IHRoZSBmaXJzdCBhcmUgcmVhbGx5IG9mZiAqLwogCWZvciAoaSA9IDE7IGkgPCBuY29yZXM7IGkrKykKIAkJcG11X3NldF9wb3dlcl9kb21haW4oMCArIGksIGZhbHNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcm9ja2NoaXAuYyBiL2FyY2gvYXJtL21hY2gtcm9ja2NoaXAvcm9ja2NoaXAuYwppbmRleCA4YWI5ZTBlLi5kMjI2YjcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJvY2tjaGlwL3JvY2tjaGlwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yb2NrY2hpcC9yb2NrY2hpcC5jCkBAIC0yNCw2ICsyNCwxMiBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogCitzdGF0aWMgdm9pZCBfX2luaXQgcm9ja2NoaXBfZHRfaW5pdCh2b2lkKQoreworCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJjcHVmcmVxLWR0IiwgMCwgTlVMTCwgMCk7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgcm9ja2NoaXBfYm9hcmRfZHRfY29tcGF0W10gPSB7CiAJInJvY2tjaGlwLHJrMjkyOCIsCiAJInJvY2tjaGlwLHJrMzA2NmEiLApAQCAtMzcsNCArNDMsNSBAQAogCS5sMmNfYXV4X3ZhbAk9IDAsCiAJLmwyY19hdXhfbWFzawk9IH4wLAogCS5kdF9jb21wYXQJPSByb2NrY2hpcF9ib2FyZF9kdF9jb21wYXQsCisJLmluaXRfbWFjaGluZQk9IHJvY2tjaGlwX2R0X2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2gxOTQwLWJsdWV0b290aC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2gxOTQwLWJsdWV0b290aC5jCmluZGV4IGI0ZDE0YjguLjljOGIxMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9oMTk0MC1ibHVldG9vdGguYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvaDE5NDAtYmx1ZXRvb3RoLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAkJbWRlbGF5KDEwKTsKIAkJZ3Bpb19zZXRfdmFsdWUoUzNDMjQxMF9HUEgoMSksIDApOwogCi0JCWgxOTQwX2xlZF9ibGlua19zZXQoLUVJTlZBTCwgR1BJT19MRURfQkxJTkssIE5VTEwsIE5VTEwpOworCQloMTk0MF9sZWRfYmxpbmtfc2V0KE5VTEwsIEdQSU9fTEVEX0JMSU5LLCBOVUxMLCBOVUxMKTsKIAl9CiAJZWxzZSB7CiAJCWdwaW9fc2V0X3ZhbHVlKFMzQzI0MTBfR1BIKDEpLCAxKTsKQEAgLTUwLDcgKzUwLDcgQEAKIAkJbWRlbGF5KDEwKTsKIAkJZ3Bpb19zZXRfdmFsdWUoSDE5NDBfTEFUQ0hfQkxVRVRPT1RIX1BPV0VSLCAwKTsKIAotCQloMTk0MF9sZWRfYmxpbmtfc2V0KC1FSU5WQUwsIEdQSU9fTEVEX05PX0JMSU5LX0xPVywgTlVMTCwgTlVMTCk7CisJCWgxOTQwX2xlZF9ibGlua19zZXQoTlVMTCwgR1BJT19MRURfTk9fQkxJTktfTE9XLCBOVUxMLCBOVUxMKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9oMTk0MC5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2gxOTQwLmgKaW5kZXggMjk1MGNjNC4uNTk2ZDlmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2gxOTQwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2gxOTQwLmgKQEAgLTE5LDggKzE5LDEwIEBACiAjZGVmaW5lIEgxOTQwX1NVU1BFTkRfUkVTVU1FQVQJCSgweDMwMDgxMDAwKQogI2RlZmluZSBIMTk0MF9TVVNQRU5EX0NIRUNLCQkoMHgzMDA4MDAwMCkKIAorc3RydWN0IGdwaW9fZGVzYzsKKwogZXh0ZXJuIHZvaWQgaDE5NDBfcG1fcmV0dXJuKHZvaWQpOwotZXh0ZXJuIGludCBoMTk0MF9sZWRfYmxpbmtfc2V0KHVuc2lnbmVkIGdwaW8sIGludCBzdGF0ZSwKK2V4dGVybiBpbnQgaDE5NDBfbGVkX2JsaW5rX3NldChzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCBpbnQgc3RhdGUsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtaDE5NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLWgxOTQwLmMKaW5kZXggZDM1ZGRjMS4uZDQwZDRmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtaDE5NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvbWFjaC1oMTk0MC5jCkBAIC0zNTksMTAgKzM1OSwxMSBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGgxOTQwX2JsaW5rX3NwaW4pOwogCi1pbnQgaDE5NDBfbGVkX2JsaW5rX3NldCh1bnNpZ25lZCBncGlvLCBpbnQgc3RhdGUsCitpbnQgaDE5NDBfbGVkX2JsaW5rX3NldChzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCBpbnQgc3RhdGUsCiAJdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKIHsKIAlpbnQgYmxpbmtfZ3BpbywgY2hlY2tfZ3BpbzEsIGNoZWNrX2dwaW8yOworCWludCBncGlvID0gZGVzYyA/IGRlc2NfdG9fZ3BpbyhkZXNjKSA6IC1FSU5WQUw7CiAKIAlzd2l0Y2ggKGdwaW8pIHsKIAljYXNlIEgxOTQwX0xBVENIX0xFRF9HUkVFTjoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9tYWNoLXJ4MTk1MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtcngxOTUwLmMKaW5kZXggYzNmMjY4Mi4uMWQzNWZmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtcngxOTUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L21hY2gtcngxOTUwLmMKQEAgLTI1MCw5ICsyNTAsMTAgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhyeDE5NTBfYmxpbmtfc3Bpbik7CiAKLXN0YXRpYyBpbnQgcngxOTUwX2xlZF9ibGlua19zZXQodW5zaWduZWQgZ3BpbywgaW50IHN0YXRlLAorc3RhdGljIGludCByeDE5NTBfbGVkX2JsaW5rX3NldChzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCBpbnQgc3RhdGUsCiAJdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKIHsKKwlpbnQgZ3BpbyA9IGRlc2NfdG9fZ3BpbyhkZXNjKTsKIAlpbnQgYmxpbmtfZ3BpbywgY2hlY2tfZ3BpbzsKIAogCXN3aXRjaCAoZ3BpbykgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2NwdWlkbGUuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9jcHVpZGxlLmMKaW5kZXggM2M4YWIwNy4uMmViMDcyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2NwdWlkbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvY3B1aWRsZS5jCkBAIC00OCw3ICs0OCw2IEBACiAJCQkuZW50ZXIgICAgICAgICAgICA9IHMzYzY0eHhfZW50ZXJfaWRsZSwKIAkJCS5leGl0X2xhdGVuY3kgICAgID0gMSwKIAkJCS50YXJnZXRfcmVzaWRlbmN5ID0gMSwKLQkJCS5mbGFncyAgICAgICAgICAgID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCiAJCQkubmFtZSAgICAgICAgICAgICA9ICJJRExFIiwKIAkJCS5kZXNjICAgICAgICAgICAgID0gIlN5c3RlbSBhY3RpdmUsIEFSTSBnYXRlZCIsCiAJCX0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcGNpLW5hbm9lbmdpbmUuYwppbmRleCBmZjAyZTJkLi5iNzA0NDMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BjaS1uYW5vZW5naW5lLmMKQEAgLTMzLDEyICszMywxMiBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhuYW5vX2xvY2spOwogCiBzdGF0aWMgaW50IG5hbm9lbmdpbmVfZ2V0X3BjaV9hZGRyZXNzKHN0cnVjdCBwY2lfYnVzICpidXMsCi0JdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHVuc2lnbmVkIGxvbmcgKmFkZHJlc3MpCisJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHZvaWQgX19pb21lbSAqKmFkZHJlc3MpCiB7CiAJaW50IHJldCA9IFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIAl1bnNpZ25lZCBpbnQgYnVzbnIgPSBidXMtPm51bWJlcjsKIAotCSphZGRyZXNzID0gTkFOT19QQ0lfQ09ORklHX1NQQUNFX1ZJUlQgKworCSphZGRyZXNzID0gKHZvaWQgX19pb21lbSAqKU5BTk9fUENJX0NPTkZJR19TUEFDRV9WSVJUICsKIAkJKChidXMtPm51bWJlciA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiB+MykpOwogCiAJcmV0ID0gKGJ1c25yID4gMjU1IHx8IGRldmZuID4gMjU1IHx8IHdoZXJlID4gMjU1KSA/CkBAIC01MSw3ICs1MSw3IEBACiAJaW50IHNpemUsIHUzMiAqdmFsKQogewogCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXZvaWQgX19pb21lbSAqYWRkcmVzczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB2OwogCkBAIC04NSw3ICs4NSw3IEBACiAJaW50IHNpemUsIHUzMiB2YWwpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJdm9pZCBfX2lvbWVtICphZGRyZXNzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgc2hpZnQ7CiAJdTMyIHY7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKaW5kZXggMjFmNDU3Yi4uMWI0ZmFmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZwpAQCAtMSw1ICsxLDYgQEAKIGNvbmZpZyBBUkNIX1NITU9CSUxFCiAJYm9vbAorCXNlbGVjdCBaT05FX0RNQSBpZiBBUk1fTFBBRQogCiBjb25maWcgUE1fUkNBUgogCWJvb2wKQEAgLTE4LDYgKzE5LDcgQEAKIAlzZWxlY3QgUE1fUkNBUiBpZiBQTSB8fCBTTVAKIAlzZWxlY3QgUkVORVNBU19JUlFDCiAJc2VsZWN0IFNZU19TVVBQT1JUU19TSF9DTVQKKwlzZWxlY3QgUENJX0RPTUFJTlMgaWYgUENJCiAKIGNvbmZpZyBBUkNIX1JNT0JJTEUKIAlib29sCkBAIC0zNiw3ICszOCw2IEBACiAJc2VsZWN0IE5PX0lPUE9SVF9NQVAKIAlzZWxlY3QgUElOQ1RSTAogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgotCXNlbGVjdCBBUkNIX0hBU19PUFAKIAogaWYgQVJDSF9TSE1PQklMRV9NVUxUSQogCkBAIC03MywxMSArNzQsNiBAQAogCiBjb21tZW50ICJSZW5lc2FzIEFSTSBTb0NzIEJvYXJkIFR5cGUiCiAKLWNvbmZpZyBNQUNIX0tPRUxTQ0gKLQlib29sICJLb2Vsc2NoIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9SOEE3NzkxCi0Jc2VsZWN0IE1JQ1JFTF9QSFkgaWYgU0hfRVRICi0KIGNvbmZpZyBNQUNIX0xBR0VSCiAJYm9vbCAiTGFnZXIgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX1I4QTc3OTAKQEAgLTE0NSwxNCArMTQxLDYgQEAKIAlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKIAlzZWxlY3QgQVJDSF9ETUFfQUREUl9UXzY0QklUIGlmIEFSTV9MUEFFCiAKLWNvbmZpZyBBUkNIX1I4QTc3OTEKLQlib29sICJSLUNhciBNMi1XIChSOEE3NzkxMCkiCi0Jc2VsZWN0IEFSQ0hfUkNBUl9HRU4yCi0Jc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCi0Jc2VsZWN0IEFSTV9HSUMKLQlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKLQlzZWxlY3QgQVJDSF9ETUFfQUREUl9UXzY0QklUIGlmIEFSTV9MUEFFCi0KIGNvbW1lbnQgIlJlbmVzYXMgQVJNIFNvQ3MgQm9hcmQgVHlwZSIKIAogY29uZmlnIE1BQ0hfQVBFNkVWTQpAQCAtMjI3LDEyICsyMTUsNiBAQAogCXNlbGVjdCBNSUNSRUxfUEhZIGlmIFNIX0VUSAogCXNlbGVjdCBTTkRfU09DX0FLNDY0MiBpZiBTTkRfU0lNUExFX0NBUkQKIAotY29uZmlnIE1BQ0hfS09FTFNDSAotCWJvb2wgIktvZWxzY2ggYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX1I4QTc3OTEKLQlzZWxlY3QgVVNFX09GCi0Jc2VsZWN0IE1JQ1JFTF9QSFkgaWYgU0hfRVRICi0KIGNvbmZpZyBNQUNIX0taTTlHCiAJYm9vbCAiS1pNLUE5LUdUIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9TSDczQTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlCmluZGV4IGUyMGYyNzguLmI1NWNhYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZQpAQCAtMTksOCArMTksOCBAQAogb2JqLSQoQ09ORklHX0FSQ0hfUjdTNzIxMDApCSs9IHNldHVwLXI3czcyMTAwLm8KIAogIyBDbG9jayBvYmplY3RzCi1vYmoteQkJCQkrPSBjbG9jay5vCiBpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEsKK29iai15CQkJCSs9IGNsb2NrLm8KIG9iai0kKENPTkZJR19BUkNIX1NINzM3MikJKz0gY2xvY2stc2g3MzcyLm8KIG9iai0kKENPTkZJR19BUkNIX1NINzNBMCkJKz0gY2xvY2stc2g3M2EwLm8KIG9iai0kKENPTkZJR19BUkNIX1I4QTczQTQpCSs9IGNsb2NrLXI4YTczYTQubwpAQCAtMjgsNyArMjgsNiBAQAogb2JqLSQoQ09ORklHX0FSQ0hfUjhBNzc3OCkJKz0gY2xvY2stcjhhNzc3OC5vCiBvYmotJChDT05GSUdfQVJDSF9SOEE3Nzc5KQkrPSBjbG9jay1yOGE3Nzc5Lm8KIG9iai0kKENPTkZJR19BUkNIX1I4QTc3OTApCSs9IGNsb2NrLXI4YTc3OTAubwotb2JqLSQoQ09ORklHX0FSQ0hfUjhBNzc5MSkJKz0gY2xvY2stcjhhNzc5MS5vCiBlbmRpZgogCiAjIENQVSByZXNldCB2ZWN0b3IgaGFuZGxpbmcgb2JqZWN0cwpAQCAtMzYsNiArMzUsNyBAQAogCiAjIFNoYXJlZCBTb0MgZmFtaWx5IG9iamVjdHMKIG9iai0kKENPTkZJR19BUkNIX1JDQVJfR0VOMikJKz0gc2V0dXAtcmNhci1nZW4yLm8gcGxhdHNtcC1hcG11Lm8gJChjcHUteSkKK0NGTEFHU19zZXR1cC1yY2FyLWdlbjIubwkrPSAtbWFyY2g9YXJtdjctYQogCiAjIFNNUCBvYmplY3RzCiBzbXAteQkJCQk6PSAkKGNwdS15KQpAQCAtNTcsNyArNTcsNiBAQAogCiAjIEJvYXJkIG9iamVjdHMKIGlmZGVmIENPTkZJR19BUkNIX1NITU9CSUxFX01VTFRJCi1vYmotJChDT05GSUdfTUFDSF9LT0VMU0NIKQkrPSBib2FyZC1rb2Vsc2NoLXJlZmVyZW5jZS5vCiBvYmotJChDT05GSUdfTUFDSF9MQUdFUikJKz0gYm9hcmQtbGFnZXItcmVmZXJlbmNlLm8KIG9iai0kKENPTkZJR19NQUNIX01BUlpFTikJKz0gYm9hcmQtbWFyemVuLXJlZmVyZW5jZS5vCiBlbHNlCkBAIC02OSw3ICs2OCw2IEBACiBvYmotJChDT05GSUdfTUFDSF9NQVJaRU4pCSs9IGJvYXJkLW1hcnplbi5vCiBvYmotJChDT05GSUdfTUFDSF9MQUdFUikJKz0gYm9hcmQtbGFnZXIubwogb2JqLSQoQ09ORklHX01BQ0hfQVJNQURJTExPODAwRVZBKQkrPSBib2FyZC1hcm1hZGlsbG84MDBldmEubwotb2JqLSQoQ09ORklHX01BQ0hfS09FTFNDSCkJKz0gYm9hcmQta29lbHNjaC5vCiBvYmotJChDT05GSUdfTUFDSF9LWk05RykJKz0gYm9hcmQta3ptOWcubwogb2JqLSQoQ09ORklHX01BQ0hfS1pNOUdfUkVGRVJFTkNFKQkrPSBib2FyZC1rem05Zy1yZWZlcmVuY2UubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUuYm9vdAppbmRleCBkZTlhMjM4Li41N2QwMGVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlLmJvb3QKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZS5ib290CkBAIC01LDcgKzUsNiBAQAogbG9hZGFkZHItJChDT05GSUdfTUFDSF9BUk1BRElMTE84MDBFVkEpICs9IDB4NDAwMDgwMDAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfQk9DS1cpICs9IDB4NjAwMDgwMDAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfQk9DS1dfUkVGRVJFTkNFKSArPSAweDYwMDA4MDAwCi1sb2FkYWRkci0kKENPTkZJR19NQUNIX0tPRUxTQ0gpICs9IDB4NDAwMDgwMDAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfS1pNOUcpICs9IDB4NDEwMDgwMDAKIGxvYWRhZGRyLSQoQ09ORklHX01BQ0hfS1pNOUdfUkVGRVJFTkNFKSArPSAweDQxMDA4MDAwCiBsb2FkYWRkci0kKENPTkZJR19NQUNIX0xBR0VSKSArPSAweDQwMDA4MDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwZTZldm0tcmVmZXJlbmNlLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwZTZldm0tcmVmZXJlbmNlLmMKaW5kZXggYTY1MDNkOC4uM2I2ODM3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcGU2ZXZtLXJlZmVyZW5jZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS1yZWZlcmVuY2UuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpAQCAtNDgsNyArNDQsNiBAQAogCWNsa19wdXQocGFyZW50KTsKIAljbGtfcHV0KG1wKTsKIAotCXI4YTczYTRfYWRkX2R0X2RldmljZXMoKTsKIAlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShOVUxMLCBvZl9kZWZhdWx0X2J1c19tYXRjaF90YWJsZSwgTlVMTCwgTlVMTCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcGU2ZXZtLmMKaW5kZXggYjIyMmY2OC4uNjZmNjc4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcGU2ZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcGU2ZXZtLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXJtYWRpbGxvODAwZXZhLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFybWFkaWxsbzgwMGV2YS5jCmluZGV4IGU3MDk4MzUuLjZkOTQ5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXJtYWRpbGxvODAwZXZhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcm1hZGlsbG84MDBldmEuYwpAQCAtMTIsNTMgKzEyLDQ4IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zdDEyMzJfcGRhdGEuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgotI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3B3bS5oPgotI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZ3Bpby1yZWd1bGF0b3IuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NoX2V0aC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9yZW5lc2FzX3VzYmhzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2hfbW1jaWYuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2hfbW9iaWxlX3NkaGkuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc3QxMjMyX3BkYXRhLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHdtLmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZ3Bpby1yZWd1bGF0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2V0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9yZW5lc2FzX3VzYmhzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKLSNpbmNsdWRlIDxtZWRpYS9tdDl0MTEyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgotI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+Ci0jaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KLSNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfaGRtaS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bWVkaWEvbXQ5dDExMi5oPgorI2luY2x1ZGUgPG1lZGlhL3NoX21vYmlsZV9jZXUuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAjaW5jbHVkZSA8c291bmQvc2hfZnNpLmg+CiAjaW5jbHVkZSA8c291bmQvc2ltcGxlX2NhcmQuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfaGRtaS5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJpcnFzLmgiCkBAIC0xMjM0LDggKzEyMjksMTUgQEAKIAlzdGF0aWMgc3RydWN0IHBtX2RvbWFpbl9kZXZpY2UgZG9tYWluX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCQl7ICJBNExDIiwgJmxjZGMwX2RldmljZSB9LAogCQl7ICJBNExDIiwgJmhkbWlfbGNkY19kZXZpY2UgfSwKKwkJeyAiQTRNUCIsICZoZG1pX2RldmljZSB9LAorCQl7ICJBNE1QIiwgJmZzaV9kZXZpY2UgfSwKKwkJeyAiQTRSIiwgICZjZXUwX2RldmljZSB9LAorCQl7ICJBNFMiLCAgJnNoX2V0aF9kZXZpY2UgfSwKKwkJeyAiQTNTUCIsICZwd21fZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmc2RoaTBfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmc2hfbW1jaWZfZGV2aWNlIH0sCiAJfTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1c2IgPSBOVUxMOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVzYiA9IE5VTEwsICpzZGhpMSA9IE5VTEw7CiAKIAlyZWd1bGF0b3JfcmVnaXN0ZXJfYWx3YXlzX29uKDAsICJmaXhlZC0zLjNWIiwgZml4ZWQzdjNfcG93ZXJfY29uc3VtZXJzLAogCQkJCSAgICAgQVJSQVlfU0laRShmaXhlZDN2M19wb3dlcl9jb25zdW1lcnMpLCAzMzAwMDAwKTsKQEAgLTEzMDQsNiArMTMwNiw3IEBACiAKIAkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Y2Nfc2RoaTEpOwogCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNkaGkxX2RldmljZSk7CisJCXNkaGkxID0gJnNkaGkxX2RldmljZTsKIAl9CiAKIApAQCAtMTMyNCw2ICsxMzI3LDggQEAKIAkJCQkgICAgICAgQVJSQVlfU0laRShkb21haW5fZGV2aWNlcykpOwogCWlmICh1c2IpCiAJCXJtb2JpbGVfYWRkX2RldmljZV90b19kb21haW4oIkEzU1AiLCB1c2IpOworCWlmIChzZGhpMSkKKwkJcm1vYmlsZV9hZGRfZGV2aWNlX3RvX2RvbWFpbigiQTNTUCIsIHNkaGkxKTsKIAogCXI4YTc3NDBfcG1faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy1yZWZlcmVuY2UuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYm9ja3ctcmVmZXJlbmNlLmMKaW5kZXggNzljNDc4NC4uZDY0OWFkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy1yZWZlcmVuY2UuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWJvY2t3LXJlZmVyZW5jZS5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1ib2Nrdy5jCmluZGV4IDFjZjJjNzUuLmYyN2I1YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYm9ja3cuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWJvY2t3LmMKQEAgLTEzLDEwICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWtvZWxzY2gtcmVmZXJlbmNlLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWtvZWxzY2gtcmVmZXJlbmNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWE1NDAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rb2Vsc2NoLXJlZmVyZW5jZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0gKiBLb2Vsc2NoIGJvYXJkIHN1cHBvcnQgLSBSZWZlcmVuY2UgRFQgaW1wbGVtZW50YXRpb24KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgIFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAxMyAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyAgTWFnbnVzIERhbW0KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvcmNhci1kdS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJpcnFzLmgiCi0jaW5jbHVkZSAicjhhNzc5MS5oIgotI2luY2x1ZGUgInJjYXItZ2VuMi5oIgotCi0vKiBEVSAqLwotc3RhdGljIHN0cnVjdCByY2FyX2R1X2VuY29kZXJfZGF0YSBrb2Vsc2NoX2R1X2VuY29kZXJzW10gPSB7Ci0JewotCQkudHlwZSA9IFJDQVJfRFVfRU5DT0RFUl9OT05FLAotCQkub3V0cHV0ID0gUkNBUl9EVV9PVVRQVVRfTFZEUzAsCi0JCS5jb25uZWN0b3IubHZkcy5wYW5lbCA9IHsKLQkJCS53aWR0aF9tbSA9IDIxMCwKLQkJCS5oZWlnaHRfbW0gPSAxNTgsCi0JCQkubW9kZSA9IHsKLQkJCQkucGl4ZWxjbG9jayA9IDY1MDAwMDAwLAotCQkJCS5oYWN0aXZlID0gMTAyNCwKLQkJCQkuaGZyb250X3BvcmNoID0gMjAsCi0JCQkJLmhiYWNrX3BvcmNoID0gMTYwLAotCQkJCS5oc3luY19sZW4gPSAxMzYsCi0JCQkJLnZhY3RpdmUgPSA3NjgsCi0JCQkJLnZmcm9udF9wb3JjaCA9IDMsCi0JCQkJLnZiYWNrX3BvcmNoID0gMjksCi0JCQkJLnZzeW5jX2xlbiA9IDYsCi0JCQl9LAotCQl9LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjYXJfZHVfcGxhdGZvcm1fZGF0YSBrb2Vsc2NoX2R1X3BkYXRhID0gewotCS5lbmNvZGVycyA9IGtvZWxzY2hfZHVfZW5jb2RlcnMsCi0JLm51bV9lbmNvZGVycyA9IEFSUkFZX1NJWkUoa29lbHNjaF9kdV9lbmNvZGVycyksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIGR1X3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCURFRklORV9SRVNfTUVNKDB4ZmViMDAwMDAsIDB4NDAwMDApLAotCURFRklORV9SRVNfTUVNX05BTUVEKDB4ZmViOTAwMDAsIDB4MWMsICJsdmRzLjAiKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI1NikpLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMjY4KSksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQga29lbHNjaF9hZGRfZHVfZGV2aWNlKHZvaWQpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGluZm8gPSB7Ci0JCS5uYW1lID0gInJjYXItZHUtcjhhNzc5MSIsCi0JCS5pZCA9IC0xLAotCQkucmVzID0gZHVfcmVzb3VyY2VzLAotCQkubnVtX3JlcyA9IEFSUkFZX1NJWkUoZHVfcmVzb3VyY2VzKSwKLQkJLmRhdGEgPSAma29lbHNjaF9kdV9wZGF0YSwKLQkJLnNpemVfZGF0YSA9IHNpemVvZihrb2Vsc2NoX2R1X3BkYXRhKSwKLQkJLmRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLQl9OwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJmluZm8pOwotfQotCi0vKgotICogVGhpcyBpcyBhIHJlYWxseSBjcnVkZSBoYWNrIHRvIHByb3ZpZGUgY2xrZGV2IHN1cHBvcnQgdG8gcGxhdGZvcm0KLSAqIGRldmljZXMgdW50aWwgdGhleSBnZXQgbW92ZWQgdG8gRFQuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX25hbWUgY2xrX25hbWVzW10gX19pbml0Y29uc3QgPSB7Ci0JeyAiZHUwIiwgImR1LjAiLCAicmNhci1kdS1yOGE3NzkxIiB9LAotCXsgImR1MSIsICJkdS4xIiwgInJjYXItZHUtcjhhNzc5MSIgfSwKLQl7ICJsdmRzMCIsICJsdmRzLjAiLCAicmNhci1kdS1yOGE3NzkxIiB9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGtvZWxzY2hfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKLXsKLQlzaG1vYmlsZV9jbGtfd29ya2Fyb3VuZChjbGtfbmFtZXMsIEFSUkFZX1NJWkUoY2xrX25hbWVzKSwgZmFsc2UpOwotCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKLQotCWtvZWxzY2hfYWRkX2R1X2RldmljZSgpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtvZWxzY2hfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGNvbnN0ID0gewotCSJyZW5lc2FzLGtvZWxzY2giLAotCSJyZW5lc2FzLGtvZWxzY2gtcmVmZXJlbmNlIiwKLQlOVUxMLAotfTsKLQotRFRfTUFDSElORV9TVEFSVChLT0VMU0NIX0RULCAia29lbHNjaCIpCi0JLnNtcAkJPSBzbXBfb3BzKHI4YTc3OTFfc21wX29wcyksCi0JLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAotCS5pbml0X3RpbWUJPSByY2FyX2dlbjJfdGltZXJfaW5pdCwKLQkuaW5pdF9tYWNoaW5lCT0ga29lbHNjaF9hZGRfc3RhbmRhcmRfZGV2aWNlcywKLQkuaW5pdF9sYXRlCT0gc2htb2JpbGVfaW5pdF9sYXRlLAotCS5yZXNlcnZlCT0gcmNhcl9nZW4yX3Jlc2VydmUsCi0JLmR0X2NvbXBhdAk9IGtvZWxzY2hfYm9hcmRzX2NvbXBhdF9kdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWtvZWxzY2guYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta29lbHNjaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTExYjVjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta29lbHNjaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTI3ICswLDAgQEAKLS8qCi0gKiBLb2Vsc2NoIGJvYXJkIHN1cHBvcnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgIFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDEzICBNYWdudXMgRGFtbQotICogQ29weXJpZ2h0IChDKSAyMDE0ICBDb2dlbnQgRW1iZWRkZWQsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tYy9zaF9tb2JpbGVfc2RoaS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZ3Bpby1yY2FyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9yY2FyLWR1Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9ncGlvLXJlZ3VsYXRvci5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvc2hfZXRoLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3JzcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImlycXMuaCIKLSNpbmNsdWRlICJyOGE3NzkxLmgiCi0jaW5jbHVkZSAicmNhci1nZW4yLmgiCi0KLS8qIERVICovCi1zdGF0aWMgc3RydWN0IHJjYXJfZHVfZW5jb2Rlcl9kYXRhIGtvZWxzY2hfZHVfZW5jb2RlcnNbXSA9IHsKLQl7Ci0JCS50eXBlID0gUkNBUl9EVV9FTkNPREVSX05PTkUsCi0JCS5vdXRwdXQgPSBSQ0FSX0RVX09VVFBVVF9MVkRTMCwKLQkJLmNvbm5lY3Rvci5sdmRzLnBhbmVsID0gewotCQkJLndpZHRoX21tID0gMjEwLAotCQkJLmhlaWdodF9tbSA9IDE1OCwKLQkJCS5tb2RlID0gewotCQkJCS5waXhlbGNsb2NrID0gNjUwMDAwMDAsCi0JCQkJLmhhY3RpdmUgPSAxMDI0LAotCQkJCS5oZnJvbnRfcG9yY2ggPSAyMCwKLQkJCQkuaGJhY2tfcG9yY2ggPSAxNjAsCi0JCQkJLmhzeW5jX2xlbiA9IDEzNiwKLQkJCQkudmFjdGl2ZSA9IDc2OCwKLQkJCQkudmZyb250X3BvcmNoID0gMywKLQkJCQkudmJhY2tfcG9yY2ggPSAyOSwKLQkJCQkudnN5bmNfbGVuID0gNiwKLQkJCX0sCi0JCX0sCi0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmNhcl9kdV9wbGF0Zm9ybV9kYXRhIGtvZWxzY2hfZHVfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmVuY29kZXJzID0ga29lbHNjaF9kdV9lbmNvZGVycywKLQkubnVtX2VuY29kZXJzID0gQVJSQVlfU0laRShrb2Vsc2NoX2R1X2VuY29kZXJzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgZHVfcmVzb3VyY2VzW10gX19pbml0Y29uc3QgPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhmZWIwMDAwMCwgMHg0MDAwMCksCi0JREVGSU5FX1JFU19NRU1fTkFNRUQoMHhmZWI5MDAwMCwgMHgxYywgImx2ZHMuMCIpLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMjU2KSksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyNjgpKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBrb2Vsc2NoX2FkZF9kdV9kZXZpY2Uodm9pZCkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gaW5mbyA9IHsKLQkJLm5hbWUgPSAicmNhci1kdS1yOGE3NzkxIiwKLQkJLmlkID0gLTEsCi0JCS5yZXMgPSBkdV9yZXNvdXJjZXMsCi0JCS5udW1fcmVzID0gQVJSQVlfU0laRShkdV9yZXNvdXJjZXMpLAotCQkuZGF0YSA9ICZrb2Vsc2NoX2R1X3BkYXRhLAotCQkuc2l6ZV9kYXRhID0gc2l6ZW9mKGtvZWxzY2hfZHVfcGRhdGEpLAotCQkuZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCX07Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgmaW5mbyk7Ci19Ci0KLS8qIEV0aGVyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNoX2V0aF9wbGF0X2RhdGEgZXRoZXJfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLnBoeQkJCT0gMHgxLAotCS5waHlfaXJxCQk9IGlycV9waW4oMCksCi0JLmVkbWFjX2VuZGlhbgkJPSBFRE1BQ19MSVRUTEVfRU5ESUFOLAotCS5waHlfaW50ZXJmYWNlCQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLAotCS5ldGhlcl9saW5rX2FjdGl2ZV9sb3cJPSAxLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBldGhlcl9yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQlERUZJTkVfUkVTX01FTSgweGVlNzAwMDAwLCAweDQwMCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgxNjIpKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gZXRoZXJfaW5mbyBfX2luaXRjb25zdCA9IHsKLQkubmFtZQkJPSAicjhhNzc5MS1ldGhlciIsCi0JLmlkCQk9IC0xLAotCS5yZXMJCT0gZXRoZXJfcmVzb3VyY2VzLAotCS5udW1fcmVzCT0gQVJSQVlfU0laRShldGhlcl9yZXNvdXJjZXMpLAotCS5kYXRhCQk9ICZldGhlcl9wZGF0YSwKLQkuc2l6ZV9kYXRhCT0gc2l6ZW9mKGV0aGVyX3BkYXRhKSwKLQkuZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAotfTsKLQotLyogTEVEUyAqLwotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBrb2Vsc2NoX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJsZWQ4IiwKLQkJLmdwaW8JCT0gUkNBUl9HUF9QSU4oMiwgMjEpLAotCQkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PTiwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJsZWQ3IiwKLQkJLmdwaW8JCT0gUkNBUl9HUF9QSU4oMiwgMjApLAotCQkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PTiwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJsZWQ2IiwKLQkJLmdwaW8JCT0gUkNBUl9HUF9QSU4oMiwgMTkpLAotCQkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PTiwKLQl9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGtvZWxzY2hfbGVkc19wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkubGVkcwkJPSBrb2Vsc2NoX2xlZHMsCi0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShrb2Vsc2NoX2xlZHMpLAotfTsKLQotLyogR1BJTyBLRVkgKi8KLSNkZWZpbmUgR1BJT19LRVkoYywgZywgZCwgLi4uKSBcCi0JeyAuY29kZSA9IGMsIC5ncGlvID0gZywgLmRlc2MgPSBkLCAuYWN0aXZlX2xvdyA9IDEsIFwKLQkgIC53YWtldXAgPSAxLCAuZGVib3VuY2VfaW50ZXJ2YWwgPSAyMCB9Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBncGlvX2J1dHRvbnNbXSA9IHsKLQlHUElPX0tFWShLRVlfNCwJCVJDQVJfR1BfUElOKDUsIDMpLAkiU1cyLXBpbjQiKSwKLQlHUElPX0tFWShLRVlfMywJCVJDQVJfR1BfUElOKDUsIDIpLAkiU1cyLXBpbjMiKSwKLQlHUElPX0tFWShLRVlfMiwJCVJDQVJfR1BfUElOKDUsIDEpLAkiU1cyLXBpbjIiKSwKLQlHUElPX0tFWShLRVlfMSwJCVJDQVJfR1BfUElOKDUsIDApLAkiU1cyLXBpbjEiKSwKLQlHUElPX0tFWShLRVlfRywJCVJDQVJfR1BfUElOKDcsIDYpLAkiU1czNiIpLAotCUdQSU9fS0VZKEtFWV9GLAkJUkNBUl9HUF9QSU4oNywgNSksCSJTVzM1IiksCi0JR1BJT19LRVkoS0VZX0UsCQlSQ0FSX0dQX1BJTig3LCA0KSwJIlNXMzQiKSwKLQlHUElPX0tFWShLRVlfRCwJCVJDQVJfR1BfUElOKDcsIDMpLAkiU1czMyIpLAotCUdQSU9fS0VZKEtFWV9DLAkJUkNBUl9HUF9QSU4oNywgMiksCSJTVzMyIiksCi0JR1BJT19LRVkoS0VZX0IsCQlSQ0FSX0dQX1BJTig3LCAxKSwJIlNXMzEiKSwKLQlHUElPX0tFWShLRVlfQSwJCVJDQVJfR1BfUElOKDcsIDApLAkiU1czMCIpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBrb2Vsc2NoX2tleXNfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmJ1dHRvbnMJPSBncGlvX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShncGlvX2J1dHRvbnMpLAotfTsKLQotLyogUVNQSSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBxc3BpX3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCURFRklORV9SRVNfTUVNKDB4ZTZiMTAwMDAsIDB4MTAwMCksCi0JREVGSU5FX1JFU19JUlFfTkFNRUQoZ2ljX3NwaSgxODQpLCAibXV4IiksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJzcGlfcGxhdF9kYXRhIHFzcGlfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLm51bV9jaGlwc2VsZWN0ID0gMSwKLX07Ci0KLS8qIFNQSSBGbGFzaCBtZW1vcnkgKFNwYW5zaW9uIFMyNUZMNTEyU0FHTUZJRzExIDY0IE1pQikgKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzcGlfZmxhc2hfcGFydFtdID0gewotCXsKLQkJLm5hbWUJCT0gImxvYWRlciIsCi0JCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKLQkJLnNpemUJCT0gNTEyICogMTAyNCwKLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAotCX0sCi0JewotCQkubmFtZQkJPSAiYm9vdGVudiIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSA1MTIgKiAxMDI0LAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJkYXRhIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBzcGlfZmxhc2hfZGF0YSA9IHsKLQkubmFtZQkJPSAibTI1cDgwIiwKLQkucGFydHMJCT0gc3BpX2ZsYXNoX3BhcnQsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRShzcGlfZmxhc2hfcGFydCksCi0JLnR5cGUJCT0gInMyNWZsNTEycyIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNwaV9pbmZvW10gX19pbml0Y29uc3QgPSB7Ci0JewotCQkubW9kYWxpYXMJPSAibTI1cDgwIiwKLQkJLnBsYXRmb3JtX2RhdGEJPSAmc3BpX2ZsYXNoX2RhdGEsCi0JCS5tb2RlCQk9IFNQSV9NT0RFXzAgfCBTUElfVFhfUVVBRCB8IFNQSV9SWF9RVUFELAotCQkubWF4X3NwZWVkX2h6CT0gMzAwMDAwMDAsCi0JCS5idXNfbnVtCT0gMCwKLQkJLmNoaXBfc2VsZWN0CT0gMCwKLQl9LAotfTsKLQotLyogU0FUQTAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2Ugc2F0YTBfcmVzb3VyY2VzW10gX19pbml0Y29uc3QgPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhlZTMwMDAwMCwgMHgyMDAwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDEwNSkpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBzYXRhMF9pbmZvIF9faW5pdGNvbnN0ID0gewotCS5uYW1lCQk9ICJzYXRhLXI4YTc3OTEiLAotCS5pZAkJPSAwLAotCS5yZXMJCT0gc2F0YTBfcmVzb3VyY2VzLAotCS5udW1fcmVzCT0gQVJSQVlfU0laRShzYXRhMF9yZXNvdXJjZXMpLAotCS5kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi19OwotCi0vKiBJMkMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgaTJjX3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCS8qIEkyQzAgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTA4MDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI4NykpLAotCS8qIEkyQzEgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTE4MDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI4OCkpLAotCS8qIEkyQzIgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTMwMDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI4NikpLAotCS8qIEkyQzMgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTQwMDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI5MCkpLAotCS8qIEkyQzQgKi8KLQlERUZJTkVfUkVTX01FTSgweEU2NTIwMDAwLCAweDQwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDE5KSksCi0JLyogSTJDNSAqLwotCURFRklORV9SRVNfTUVNKDB4RTY1MjgwMDAsIDB4NDApLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMjApKSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBrb2Vsc2NoX2FkZF9pMmModW5zaWduZWQgaWR4KQotewotCXVuc2lnbmVkIHJlc19pZHggPSBpZHggKiAyOwotCi0JQlVHX09OKHJlc19pZHggPj0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzKSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJpMmMtcmNhcl9nZW4yIiwgaWR4LAotCQkJCQlpMmNfcmVzb3VyY2VzICsgcmVzX2lkeCwgMik7Ci19Ci0KLSNkZWZpbmUgU0RISV9SRUdVTEFUT1IoaWR4LCB2ZGRfcGluLCB2Y2NxX3BpbikJCQkJXAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHZjY19zZGhpIyNpZHgjI19jb25zdW1lciA9CVwKLQlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgInNoX21vYmlsZV9zZGhpLiIgI2lkeCk7CQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmNjX3NkaGkjI2lkeCMjX2luaXRfZGF0YSA9IHsJCVwKLQkuY29uc3RyYWludHMgPSB7CQkJCQkJXAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywJCVwKLQl9LAkJCQkJCQkJXAotCS5jb25zdW1lcl9zdXBwbGllcwk9ICZ2Y2Nfc2RoaSMjaWR4IyNfY29uc3VtZXIsCQlcCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCQkJCQlcCi19OwkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgdmNjX3NkaGkjI2lkeCMjX2luZm8gX19pbml0Y29uc3QgPSB7XAotCS5zdXBwbHlfbmFtZQk9ICJTREhJIiAjaWR4ICJWY2MiLAkJCQlcCi0JLm1pY3Jvdm9sdHMJPSAzMzAwMDAwLAkJCQkJXAotCS5ncGlvCQk9IHZkZF9waW4sCQkJCQlcCi0JLmVuYWJsZV9oaWdoCT0gMSwJCQkJCQlcCi0JLmluaXRfZGF0YQk9ICZ2Y2Nfc2RoaSMjaWR4IyNfaW5pdF9kYXRhLAkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHZjY3Ffc2RoaSMjaWR4IyNfY29uc3VtZXIgPQlcCi0JUkVHVUxBVE9SX1NVUFBMWSgidnFtbWMiLCAic2hfbW9iaWxlX3NkaGkuIiAjaWR4KTsJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2Y2NxX3NkaGkjI2lkeCMjX2luaXRfZGF0YSA9IHsJXAotCS5jb25zdHJhaW50cyA9IHsJCQkJCQlcCi0JCS5pbnB1dF91Vgk9IDMzMDAwMDAsCQkJCVwKLQkJLm1pbl91VgkJPSAxODAwMDAwLAkJCQlcCi0JCS5tYXhfdVYJCT0gMzMwMDAwMCwJCQkJXAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAkJXAotCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCQlcCi0JfSwJCQkJCQkJCVwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSAmdmNjcV9zZGhpIyNpZHgjI19jb25zdW1lciwJCVwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwJCQkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBncGlvIHZjY3Ffc2RoaSMjaWR4IyNfZ3BpbyA9CQkJCVwKLQl7IHZjY3FfcGluLCBHUElPRl9PVVRfSU5JVF9ISUdILCAidmNjcS1zZGhpIiAjaWR4IH07CQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3RydWN0IGdwaW9fcmVndWxhdG9yX3N0YXRlIHZjY3Ffc2RoaSMjaWR4IyNfc3RhdGVzW10gPSB7CVwKLQl7IC52YWx1ZSA9IDE4MDAwMDAsIC5ncGlvcyA9IDAgfSwJCQkJXAotCXsgLnZhbHVlID0gMzMwMDAwMCwgLmdwaW9zID0gMSB9LAkJCQlcCi19OwkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19yZWd1bGF0b3JfY29uZmlnIHZjY3Ffc2RoaSMjaWR4IyNfaW5mbyBfX2luaXRjb25zdCA9IHtcCi0JLnN1cHBseV9uYW1lCT0gInZxbW1jIiwJCQkJCVwKLQkuZ3Bpb3MJCT0gJnZjY3Ffc2RoaSMjaWR4IyNfZ3BpbywJCQlcCi0JLm5yX2dwaW9zCT0gMSwJCQkJCQlcCi0JLnN0YXRlcwkJPSB2Y2NxX3NkaGkjI2lkeCMjX3N0YXRlcywJCQlcCi0JLm5yX3N0YXRlcwk9IEFSUkFZX1NJWkUodmNjcV9zZGhpIyNpZHgjI19zdGF0ZXMpLAkJXAotCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCi0JLmluaXRfZGF0YQk9ICZ2Y2NxX3NkaGkjI2lkeCMjX2luaXRfZGF0YSwJCQlcCi19OwotCi1TREhJX1JFR1VMQVRPUigwLCBSQ0FSX0dQX1BJTig3LCAxNyksIFJDQVJfR1BfUElOKDIsIDEyKSk7Ci1TREhJX1JFR1VMQVRPUigxLCBSQ0FSX0dQX1BJTig3LCAxOCksIFJDQVJfR1BfUElOKDIsIDEzKSk7Ci1TREhJX1JFR1VMQVRPUigyLCBSQ0FSX0dQX1BJTig3LCAxOSksIFJDQVJfR1BfUElOKDIsIDI2KSk7Ci0KLS8qIFNESEkwICovCi1zdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2RoaTBfaW5mbyBfX2luaXRkYXRhID0gewotCS50bWlvX2NhcHMJPSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RJT19JUlEgfAotCQkJICBNTUNfQ0FQX1BPV0VSX09GRl9DQVJELAotCS50bWlvX2ZsYWdzCT0gVE1JT19NTUNfSEFTX0lETEVfV0FJVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2RoaTBfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKLQlERUZJTkVfUkVTX01FTSgweGVlMTAwMDAwLCAweDIwMCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgxNjUpKSwKLX07Ci0KLS8qIFNESEkxICovCi1zdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2RoaTFfaW5mbyBfX2luaXRkYXRhID0gewotCS50bWlvX2NhcHMJPSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RJT19JUlEgfAotCQkJICBNTUNfQ0FQX1BPV0VSX09GRl9DQVJELAotCS50bWlvX2ZsYWdzCT0gVE1JT19NTUNfSEFTX0lETEVfV0FJVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2RoaTFfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKLQlERUZJTkVfUkVTX01FTSgweGVlMTQwMDAwLCAweDEwMCksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgxNjcpKSwKLX07Ci0KLS8qIFNESEkyICovCi1zdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2RoaTJfaW5mbyBfX2luaXRkYXRhID0gewotCS50bWlvX2NhcHMJPSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RJT19JUlEgfAotCQkJICBNTUNfQ0FQX1BPV0VSX09GRl9DQVJELAotCS50bWlvX2ZsYWdzCT0gVE1JT19NTUNfSEFTX0lETEVfV0FJVCB8Ci0JCQkgIFRNSU9fTU1DX1dSUFJPVEVDVF9ESVNBQkxFLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzZGhpMl9yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0gewotCURFRklORV9SRVNfTUVNKDB4ZWUxNjAwMDAsIDB4MTAwKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDE2OCkpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jdHJsX21hcCBrb2Vsc2NoX3BpbmN0cmxfbWFwW10gPSB7Ci0JLyogRFUgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyY2FyLWR1LXI4YTc3OTEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgImR1X3JnYjY2NiIsICJkdSIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInJjYXItZHUtcjhhNzc5MSIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiZHVfc3luYyIsICJkdSIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInJjYXItZHUtcjhhNzc5MSIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiZHVfY2xrX291dF8wIiwgImR1IiksCi0JLyogRXRoZXIgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyOGE3NzkxLWV0aGVyIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJldGhfbGluayIsICJldGgiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyOGE3NzkxLWV0aGVyIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJldGhfbWRpbyIsICJldGgiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyOGE3NzkxLWV0aGVyIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJldGhfcm1paSIsICJldGgiKSwKLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJyOGE3NzkxLWV0aGVyIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJpbnRjX2lycTAiLCAiaW50YyIpLAotCS8qIFFTUEkgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJxc3BpLjAiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInFzcGlfY3RybCIsICJxc3BpIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgicXNwaS4wIiwgInBmYy1yOGE3NzkxIiwKLQkJCQkgICJxc3BpX2RhdGE0IiwgInFzcGkiKSwKLQkvKiBTQ0lGMCAoQ04xOTogREVCVUcgU0VSSUFMMCkgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJzaC1zY2kuNiIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2NpZjBfZGF0YV9kIiwgInNjaWYwIiksCi0JLyogU0NJRjEgKENOMjA6IERFQlVHIFNFUklBTDEpICovCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2gtc2NpLjciLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNjaWYxX2RhdGFfZCIsICJzY2lmMSIpLAotCS8qIEkyQzEgKi8KLQlQSU5fTUFQX01VWF9HUk9VUF9ERUZBVUxUKCJpMmMtcmNhcl9nZW4yLjEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgImkyYzFfZSIsICJpMmMxIiksCi0JLyogSTJDMiAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoImkyYy1yY2FyX2dlbjIuMiIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiaTJjMiIsICJpMmMyIiksCi0JLyogSTJDNCAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoImkyYy1yY2FyX2dlbjIuNCIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAiaTJjNF9jIiwgImkyYzQiKSwKLQkvKiBTREhJMCAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjAiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkwX2RhdGE0IiwgInNkaGkwIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2hfbW9iaWxlX3NkaGkuMCIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2RoaTBfY3RybCIsICJzZGhpMCIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjAiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkwX2NkIiwgInNkaGkwIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2hfbW9iaWxlX3NkaGkuMCIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2RoaTBfd3AiLCAic2RoaTAiKSwKLQkvKiBTREhJMiAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkxX2RhdGE0IiwgInNkaGkxIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2hfbW9iaWxlX3NkaGkuMSIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2RoaTFfY3RybCIsICJzZGhpMSIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjEiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkxX2NkIiwgInNkaGkxIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2hfbW9iaWxlX3NkaGkuMSIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2RoaTFfd3AiLCAic2RoaTEiKSwKLQkvKiBTREhJMiAqLwotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjIiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkyX2RhdGE0IiwgInNkaGkyIiksCi0JUElOX01BUF9NVVhfR1JPVVBfREVGQVVMVCgic2hfbW9iaWxlX3NkaGkuMiIsICJwZmMtcjhhNzc5MSIsCi0JCQkJICAic2RoaTJfY3RybCIsICJzZGhpMiIpLAotCVBJTl9NQVBfTVVYX0dST1VQX0RFRkFVTFQoInNoX21vYmlsZV9zZGhpLjIiLCAicGZjLXI4YTc3OTEiLAotCQkJCSAgInNkaGkyX2NkIiwgInNkaGkyIiksCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQga29lbHNjaF9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCXI4YTc3OTFfY2xvY2tfaW5pdCgpOwotCXBpbmN0cmxfcmVnaXN0ZXJfbWFwcGluZ3Moa29lbHNjaF9waW5jdHJsX21hcCwKLQkJCQkgIEFSUkFZX1NJWkUoa29lbHNjaF9waW5jdHJsX21hcCkpOwotCXI4YTc3OTFfcGlubXV4X2luaXQoKTsKLQlyOGE3NzkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKCk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJmV0aGVyX2luZm8pOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKE5VTEwsICJsZWRzLWdwaW8iLCAtMSwKLQkJCQkgICAgICAma29lbHNjaF9sZWRzX3BkYXRhLAotCQkJCSAgICAgIHNpemVvZihrb2Vsc2NoX2xlZHNfcGRhdGEpKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAiZ3Bpby1rZXlzIiwgLTEsCi0JCQkJICAgICAgJmtvZWxzY2hfa2V5c19wZGF0YSwKLQkJCQkgICAgICBzaXplb2Yoa29lbHNjaF9rZXlzX3BkYXRhKSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsICJxc3BpIiwgMCwKLQkJCQkJICBxc3BpX3Jlc291cmNlcywKLQkJCQkJICBBUlJBWV9TSVpFKHFzcGlfcmVzb3VyY2VzKSwKLQkJCQkJICAmcXNwaV9wZGF0YSwgc2l6ZW9mKHFzcGlfcGRhdGEpKTsKLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfaW5mbywgQVJSQVlfU0laRShzcGlfaW5mbykpOwotCi0Ja29lbHNjaF9hZGRfZHVfZGV2aWNlKCk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgmc2F0YTBfaW5mbyk7Ci0KLQlrb2Vsc2NoX2FkZF9pMmMoMSk7Ci0Ja29lbHNjaF9hZGRfaTJjKDIpOwotCWtvZWxzY2hfYWRkX2kyYyg0KTsKLQlrb2Vsc2NoX2FkZF9pMmMoNSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAicmVnLWZpeGVkLXZvbHRhZ2UiLCAwLAotCQkJCSAgICAgICZ2Y2Nfc2RoaTBfaW5mbywgc2l6ZW9mKHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZykpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKE5VTEwsICJyZWctZml4ZWQtdm9sdGFnZSIsIDEsCi0JCQkJICAgICAgJnZjY19zZGhpMV9pbmZvLCBzaXplb2Yoc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnKSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoTlVMTCwgInJlZy1maXhlZC12b2x0YWdlIiwgMiwKLQkJCQkgICAgICAmdmNjX3NkaGkyX2luZm8sIHNpemVvZihzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcpKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAiZ3Bpby1yZWd1bGF0b3IiLCAwLAotCQkJCSAgICAgICZ2Y2NxX3NkaGkwX2luZm8sIHNpemVvZihzdHJ1Y3QgZ3Bpb19yZWd1bGF0b3JfY29uZmlnKSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoTlVMTCwgImdwaW8tcmVndWxhdG9yIiwgMSwKLQkJCQkgICAgICAmdmNjcV9zZGhpMV9pbmZvLCBzaXplb2Yoc3RydWN0IGdwaW9fcmVndWxhdG9yX2NvbmZpZykpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKE5VTEwsICJncGlvLXJlZ3VsYXRvciIsIDIsCi0JCQkJICAgICAgJnZjY3Ffc2RoaTJfaW5mbywgc2l6ZW9mKHN0cnVjdCBncGlvX3JlZ3VsYXRvcl9jb25maWcpKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAic2hfbW9iaWxlX3NkaGkiLCAwLAotCQkJCQkgIHNkaGkwX3Jlc291cmNlcywgQVJSQVlfU0laRShzZGhpMF9yZXNvdXJjZXMpLAotCQkJCQkgICZzZGhpMF9pbmZvLCBzaXplb2Yoc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8pKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAic2hfbW9iaWxlX3NkaGkiLCAxLAotCQkJCQkgIHNkaGkxX3Jlc291cmNlcywgQVJSQVlfU0laRShzZGhpMV9yZXNvdXJjZXMpLAotCQkJCQkgICZzZGhpMV9pbmZvLCBzaXplb2Yoc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8pKTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAic2hfbW9iaWxlX3NkaGkiLCAyLAotCQkJCQkgIHNkaGkyX3Jlc291cmNlcywgQVJSQVlfU0laRShzZGhpMl9yZXNvdXJjZXMpLAotCQkJCQkgICZzZGhpMl9pbmZvLCBzaXplb2Yoc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8pKTsKLQotfQotCi0vKgotICogRXRoZXIgTEVEcyBvbiB0aGUgS29lbHNjaCBib2FyZCBhcmUgbmFtZWQgTElOSyBhbmQgQUNUSVZFIHdoaWNoIGNvcnJlc3BvbmRzCi0gKiB0byBub24tZGVmYXVsdCAwMSBzZXR0aW5nIG9mIHRoZSBNaWNyZWwgS1NaODA0MSBQSFkgY29udHJvbCByZWdpc3RlciAxIGJpdHMKLSAqIDE0LTE1LiBXZSBoYXZlIHRvIHNldCB0aGVtIGJhY2sgdG8gMDEgZnJvbSB0aGUgZGVmYXVsdCAwMCB2YWx1ZSBlYWNoIHRpbWUKLSAqIHRoZSBQSFkgaXMgcmVzZXQuIEl0J3MgYWxzbyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgUEhZJ3MgTEVEMCBzaWduYWwgaXMKLSAqIGNvbm5lY3RlZCB0byBTb0MncyBFVEhfTElOSyBzaWduYWwgYW5kIGluIHRoZSBQSFkncyBkZWZhdWx0IG1vZGUgaXQgd2lsbAotICogYm91bmNlIG9uIGFuZCBvZmYgYWZ0ZXIgZWFjaCBwYWNrZXQsIHdoaWNoIHdlIGFwcGFyZW50bHkgd2FudCB0byBhdm9pZC4KLSAqLwotc3RhdGljIGludCBrb2Vsc2NoX2tzejgwNDFfZml4dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKLXsKLQl1MTYgcGh5Y3RybDEgPSBwaHlfcmVhZChwaHlkZXYsIDB4MWUpOwotCi0JcGh5Y3RybDEgJj0gfjB4YzAwMDsKLQlwaHljdHJsMSB8PSAweDQwMDA7Ci0JcmV0dXJuIHBoeV93cml0ZShwaHlkZXYsIDB4MWUsIHBoeWN0cmwxKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGtvZWxzY2hfaW5pdCh2b2lkKQotewotCWtvZWxzY2hfYWRkX3N0YW5kYXJkX2RldmljZXMoKTsKLQotCWlycV9zZXRfaXJxX3R5cGUoaXJxX3BpbigwKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQotCWlmIChJU19FTkFCTEVEKENPTkZJR19QSFlMSUIpKQotCQlwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX2lkKCJyOGE3NzkxLWV0aGVyLWZmOjAxIiwKLQkJCQkJICBrb2Vsc2NoX2tzejgwNDFfZml4dXApOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtvZWxzY2hfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGNvbnN0ID0gewotCSJyZW5lc2FzLGtvZWxzY2giLAotCU5VTEwsCi19OwotCi1EVF9NQUNISU5FX1NUQVJUKEtPRUxTQ0hfRFQsICJrb2Vsc2NoIikKLQkuc21wCQk9IHNtcF9vcHMocjhhNzc5MV9zbXBfb3BzKSwKLQkuaW5pdF9lYXJseQk9IHNobW9iaWxlX2luaXRfZGVsYXksCi0JLmluaXRfdGltZQk9IHJjYXJfZ2VuMl90aW1lcl9pbml0LAotCS5pbml0X21hY2hpbmUJPSBrb2Vsc2NoX2luaXQsCi0JLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKLQkucmVzZXJ2ZQk9IHJjYXJfZ2VuMl9yZXNlcnZlLAotCS5kdF9jb21wYXQJPSBrb2Vsc2NoX2JvYXJkc19jb21wYXRfZHQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rem05Zy1yZWZlcmVuY2UuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta3ptOWctcmVmZXJlbmNlLmMKaW5kZXggZDljZGY5YS4uMmU4MmU0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rem05Zy1yZWZlcmVuY2UuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWt6bTlnLXJlZmVyZW5jZS5jCkBAIC0xNCwxMCArMTQsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNDMsNiArMzksMTMgQEAKICNlbmRpZgogfQogCisjZGVmaW5lIFJFU0NOVDIgSU9NRU0oMHhlNjE4ODAyMCkKK3N0YXRpYyB2b2lkIGt6bTlnX3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJLyogRG8gc29mdCBwb3dlciBvbiByZXNldCAqLworCXdyaXRlbCgoMSA8PCAzMSksIFJFU0NOVDIpOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqa3ptOWdfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGRhdGEgPSB7CiAJInJlbmVzYXMsa3ptOWctcmVmZXJlbmNlIiwKIAlOVUxMLApAQCAtNTQsNSArNTcsNiBAQAogCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKIAkuaW5pdF9tYWNoaW5lCT0ga3ptX2luaXQsCiAJLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKKwkucmVzdGFydAk9IGt6bTlnX3Jlc3RhcnQsCiAJLmR0X2NvbXBhdAk9IGt6bTlnX2JvYXJkc19jb21wYXRfZHQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rem05Zy5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1rem05Zy5jCmluZGV4IDc3ZTM2ZmEuLjdjOWI2M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQta3ptOWcuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWt6bTlnLmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLXJlZmVyZW5jZS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci1yZWZlcmVuY2UuYwppbmRleCBiYzRiNDgzLi5mYTA2YmRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLXJlZmVyZW5jZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXItcmVmZXJlbmNlLmMKQEAgLTEyLDEwMCArMTIsMTcgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3JjYXItZHUuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAiaXJxcy5oIgogI2luY2x1ZGUgInI4YTc3OTAuaCIKICNpbmNsdWRlICJyY2FyLWdlbjIuaCIKIAotLyogRFUgKi8KLXN0YXRpYyBzdHJ1Y3QgcmNhcl9kdV9lbmNvZGVyX2RhdGEgbGFnZXJfZHVfZW5jb2RlcnNbXSA9IHsKLQl7Ci0JCS50eXBlID0gUkNBUl9EVV9FTkNPREVSX1ZHQSwKLQkJLm91dHB1dCA9IFJDQVJfRFVfT1VUUFVUX0RQQUQwLAotCX0sIHsKLQkJLnR5cGUgPSBSQ0FSX0RVX0VOQ09ERVJfTk9ORSwKLQkJLm91dHB1dCA9IFJDQVJfRFVfT1VUUFVUX0xWRFMxLAotCQkuY29ubmVjdG9yLmx2ZHMucGFuZWwgPSB7Ci0JCQkud2lkdGhfbW0gPSAyMTAsCi0JCQkuaGVpZ2h0X21tID0gMTU4LAotCQkJLm1vZGUgPSB7Ci0JCQkJLnBpeGVsY2xvY2sgPSA2NTAwMDAwMCwKLQkJCQkuaGFjdGl2ZSA9IDEwMjQsCi0JCQkJLmhmcm9udF9wb3JjaCA9IDIwLAotCQkJCS5oYmFja19wb3JjaCA9IDE2MCwKLQkJCQkuaHN5bmNfbGVuID0gMTM2LAotCQkJCS52YWN0aXZlID0gNzY4LAotCQkJCS52ZnJvbnRfcG9yY2ggPSAzLAotCQkJCS52YmFja19wb3JjaCA9IDI5LAotCQkJCS52c3luY19sZW4gPSA2LAotCQkJfSwKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY2FyX2R1X3BsYXRmb3JtX2RhdGEgbGFnZXJfZHVfcGRhdGEgPSB7Ci0JLmVuY29kZXJzID0gbGFnZXJfZHVfZW5jb2RlcnMsCi0JLm51bV9lbmNvZGVycyA9IEFSUkFZX1NJWkUobGFnZXJfZHVfZW5jb2RlcnMpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBkdV9yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQlERUZJTkVfUkVTX01FTSgweGZlYjAwMDAwLCAweDcwMDAwKSwKLQlERUZJTkVfUkVTX01FTV9OQU1FRCgweGZlYjkwMDAwLCAweDFjLCAibHZkcy4wIiksCi0JREVGSU5FX1JFU19NRU1fTkFNRUQoMHhmZWI5NDAwMCwgMHgxYywgImx2ZHMuMSIpLAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMjU2KSksCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyNjgpKSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDI2OSkpLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGxhZ2VyX2FkZF9kdV9kZXZpY2Uodm9pZCkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gaW5mbyA9IHsKLQkJLm5hbWUgPSAicmNhci1kdS1yOGE3NzkwIiwKLQkJLmlkID0gLTEsCi0JCS5yZXMgPSBkdV9yZXNvdXJjZXMsCi0JCS5udW1fcmVzID0gQVJSQVlfU0laRShkdV9yZXNvdXJjZXMpLAotCQkuZGF0YSA9ICZsYWdlcl9kdV9wZGF0YSwKLQkJLnNpemVfZGF0YSA9IHNpemVvZihsYWdlcl9kdV9wZGF0YSksCi0JCS5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi0JfTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKCZpbmZvKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgYSByZWFsbHkgY3J1ZGUgaGFjayB0byBwcm92aWRlIGNsa2RldiBzdXBwb3J0IHRvIHBsYXRmb3JtCi0gKiBkZXZpY2VzIHVudGlsIHRoZXkgZ2V0IG1vdmVkIHRvIERULgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19uYW1lIGNsa19uYW1lc1tdIF9faW5pdGNvbnN0ID0gewotCXsgImR1MCIsICJkdS4wIiwgInJjYXItZHUtcjhhNzc5MCIgfSwKLQl7ICJkdTEiLCAiZHUuMSIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCi0JeyAiZHUyIiwgImR1LjIiLCAicmNhci1kdS1yOGE3NzkwIiB9LAotCXsgImx2ZHMwIiwgImx2ZHMuMCIsICJyY2FyLWR1LXI4YTc3OTAiIH0sCi0JeyAibHZkczEiLCAibHZkcy4xIiwgInJjYXItZHUtcjhhNzc5MCIgfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBsYWdlcl9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCXNobW9iaWxlX2Nsa193b3JrYXJvdW5kKGNsa19uYW1lcywgQVJSQVlfU0laRShjbGtfbmFtZXMpLCBmYWxzZSk7Ci0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwotCi0JbGFnZXJfYWRkX2R1X2RldmljZSgpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqbGFnZXJfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGRhdGEgPSB7CiAJInJlbmVzYXMsbGFnZXIiLAogCSJyZW5lc2FzLGxhZ2VyLXJlZmVyZW5jZSIsCkBAIC0xMTYsNyArMzMsNiBAQAogCS5zbXAJCT0gc21wX29wcyhyOGE3NzkwX3NtcF9vcHMpLAogCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKIAkuaW5pdF90aW1lCT0gcmNhcl9nZW4yX3RpbWVyX2luaXQsCi0JLmluaXRfbWFjaGluZQk9IGxhZ2VyX2FkZF9zdGFuZGFyZF9kZXZpY2VzLAogCS5pbml0X2xhdGUJPSBzaG1vYmlsZV9pbml0X2xhdGUsCiAJLnJlc2VydmUJPSByY2FyX2dlbjJfcmVzZXJ2ZSwKIAkuZHRfY29tcGF0CT0gbGFnZXJfYm9hcmRzX2NvbXBhdF9kdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXIuYwppbmRleCA1NzEzMjdiLi5iNDcyNjJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKaW5kZXggY2E1ZDM0Yi4uZWQxMDg3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwpAQCAtMTYsMTAgKzE2LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hcnplbi1yZWZlcmVuY2UuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFyemVuLXJlZmVyZW5jZS5jCmluZGV4IDM4ZDljZGQuLmIxNWViOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFyemVuLXJlZmVyZW5jZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFyemVuLXJlZmVyZW5jZS5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9jbGsvc2htb2JpbGUuaD4KQEAgLTI2LDcgKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCi0jaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJpcnFzLmgiCiAjaW5jbHVkZSAicjhhNzc3OS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYXJ6ZW4uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFyemVuLmMKaW5kZXggY2UzM2Q3OC4uOTk0ZGM3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYXJ6ZW4uYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hcnplbi5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzNhNC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3M2E0LmMKaW5kZXggYzIzMzBlYS4uMWNmNDRkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3M2E0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3M2E0LmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc0MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzQwLmMKaW5kZXggMTlkZjljYi4uOWNhYzgyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzQwLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stcjhhNzc3OC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc4LmMKaW5kZXggNjc5ODBhMC4uZTg1MTBjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc4LmMKQEAgLTE3LDEwICsxNyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3Nzc5LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYwppbmRleCBjNTFmOWRiLi5mYThhYjJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3NzkuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzkwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTAuYwppbmRleCBmNjIyNjUyLi5mOWJiYzVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTAuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1yOGE3NzkxLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUzYjIzMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXI4YTc3OTEuYworKysgL2Rldi9udWxsCkBAIC0xLDM0MiArMCwwIEBACi0vKgotICogcjhhNzc5MSBjbG9jayBmcmFtZXdvcmsgc3VwcG9ydAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyAgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IChDKSAyMDEzICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDEzICBNYWdudXMgRGFtbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zaF9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgInJjYXItZ2VuMi5oIgotCi0vKgotICogICBNRAkJRVhUQUwJCVBMTDAJUExMMQlQTEwzCi0gKiAxNCAxMyAxOQkoTUh6KQkJKjEJKjEKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAwICAwICAwCTE1IHggMQkJeDE3Mi8yCXgyMDgvMgl4MTA2Ci0gKiAwICAwICAxCTE1IHggMQkJeDE3Mi8yCXgyMDgvMgl4ODgKLSAqIDAgIDEgIDAJMjAgeCAxCQl4MTMwLzIJeDE1Ni8yCXg4MAotICogMCAgMSAgMQkyMCB4IDEJCXgxMzAvMgl4MTU2LzIJeDY2Ci0gKiAxICAwICAwCTI2IC8gMgkJeDIwMC8yCXgyNDAvMgl4MTIyCi0gKiAxICAwICAxCTI2IC8gMgkJeDIwMC8yCXgyNDAvMgl4MTAyCi0gKiAxICAxICAwCTMwIC8gMgkJeDE3Mi8yCXgyMDgvMgl4MTA2Ci0gKiAxICAxICAxCTMwIC8gMgkJeDE3Mi8yCXgyMDgvMgl4ODgKLSAqCi0gKiAqMSA6CVRhYmxlIDcuNiBpbmRpY2F0ZXMgVkNPIG91cHV0IChQTEx4ID0gVkNPLzIpCi0gKglzZWUgInAxIC8gMiIgb24gUjhBNzc5MV9DTE9DS19ST09UKCkgYmVsb3cKLSAqLwotCi0jZGVmaW5lIENQR19CQVNFIDB4ZTYxNTAwMDAKLSNkZWZpbmUgQ1BHX0xFTiAweDEwMDAKLQotI2RlZmluZSBTTVNUUENSMAkweEU2MTUwMTMwCi0jZGVmaW5lIFNNU1RQQ1IxCTB4RTYxNTAxMzQKLSNkZWZpbmUgU01TVFBDUjIJMHhlNjE1MDEzOAotI2RlZmluZSBTTVNUUENSMwkweEU2MTUwMTNDCi0jZGVmaW5lIFNNU1RQQ1I1CTB4RTYxNTAxNDQKLSNkZWZpbmUgU01TVFBDUjcJMHhlNjE1MDE0YwotI2RlZmluZSBTTVNUUENSOAkweEU2MTUwOTkwCi0jZGVmaW5lIFNNU1RQQ1I5CTB4RTYxNTA5OTQKLSNkZWZpbmUgU01TVFBDUjEwCTB4RTYxNTA5OTgKLSNkZWZpbmUgU01TVFBDUjExCTB4RTYxNTA5OUMKLQotI2RlZmluZSBNU1RQU1IxCQlJT01FTSgweGU2MTUwMDM4KQotI2RlZmluZSBNU1RQU1IyCQlJT01FTSgweGU2MTUwMDQwKQotI2RlZmluZSBNU1RQU1IzCQlJT01FTSgweGU2MTUwMDQ4KQotI2RlZmluZSBNU1RQU1I1CQlJT01FTSgweGU2MTUwMDNjKQotI2RlZmluZSBNU1RQU1I3CQlJT01FTSgweGU2MTUwMWM0KQotI2RlZmluZSBNU1RQU1I4CQlJT01FTSgweGU2MTUwOWEwKQotI2RlZmluZSBNU1RQU1I5CQlJT01FTSgweGU2MTUwOWE0KQotI2RlZmluZSBNU1RQU1IxMQlJT01FTSgweGU2MTUwOWFjKQotCi0jZGVmaW5lIFNEQ0tDUgkJMHhFNjE1MDA3NAotI2RlZmluZSBTRDFDS0NSCQkweEU2MTUwMDc4Ci0jZGVmaW5lIFNEMkNLQ1IJCTB4RTYxNTAyNmMKLSNkZWZpbmUgTU1DMENLQ1IJMHhFNjE1MDI0MAotI2RlZmluZSBNTUMxQ0tDUgkweEU2MTUwMjQ0Ci0jZGVmaW5lIFNTUENLQ1IJCTB4RTYxNTAyNDgKLSNkZWZpbmUgU1NQUlNDS0NSCTB4RTYxNTAyNEMKLQotc3RhdGljIHN0cnVjdCBjbGtfbWFwcGluZyBjcGdfbWFwcGluZyA9IHsKLQkucGh5cyAgID0gQ1BHX0JBU0UsCi0JLmxlbiAgICA9IENQR19MRU4sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBleHRhbF9jbGsgPSB7Ci0JLyogLnJhdGUgd2lsbCBiZSB1cGRhdGVkIG9uIHI4YTc3OTFfY2xvY2tfaW5pdCgpICovCi0JLm1hcHBpbmcJPSAmY3BnX21hcHBpbmcsCi19OwotCi1zdGF0aWMgc3RydWN0IHNoX2Nsa19vcHMgZm9sbG93cGFyZW50X2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwk9IGZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtYWluX2NsayA9IHsKLQkvKiAucGFyZW50IHdpbGwgYmUgc2V0IHI4YTczYTRfY2xvY2tfaW5pdCAqLwotCS5vcHMJPSAmZm9sbG93cGFyZW50X2Nsa19vcHMsCi19OwotCi0vKgotICogY2xvY2sgcmF0aW8gb2YgdGhlc2UgY2xvY2sgd2lsbCBiZSB1cGRhdGVkCi0gKiBvbiByOGE3NzkxX2Nsb2NrX2luaXQoKQotICovCi1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKHBsbDFfY2xrLAkJbWFpbl9jbGssCTEsIDEpOwotU0hfRklYRURfUkFUSU9fQ0xLX1NFVChwbGwzX2NsaywJCW1haW5fY2xrLAkxLCAxKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQocXNwaV9jbGssCQlwbGwxX2NsaywJMSwgMSk7Ci0KLS8qIGZpeGVkIHJhdGlvIGNsb2NrICovCi1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKGV4dGFsX2RpdjJfY2xrLAkJZXh0YWxfY2xrLAkxLCAyKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoY3BfY2xrLAkJCWV4dGFsX2NsaywJMSwgMik7Ci0KLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQocGxsMV9kaXYyX2NsaywJCXBsbDFfY2xrLAkxLCAyKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoaHBfY2xrLAkJCXBsbDFfY2xrLAkxLCAxMik7Ci1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKHBfY2xrLAkJCXBsbDFfY2xrLAkxLCAyNCk7Ci1TSF9GSVhFRF9SQVRJT19DTEtfU0VUKHJjbGtfY2xrLAkJcGxsMV9jbGssCTEsICg0OCAqIDEwMjQpKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQobXBfY2xrLAkJCXBsbDFfZGl2Ml9jbGssCTEsIDE1KTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoemdfY2xrLAkJCXBsbDFfY2xrLAkxLCAzKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoenhfY2xrLAkJCXBsbDFfY2xrLAkxLCAzKTsKLVNIX0ZJWEVEX1JBVElPX0NMS19TRVQoenNfY2xrLAkJCXBsbDFfY2xrLAkxLCA2KTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKm1haW5fY2xrc1tdID0gewotCSZleHRhbF9jbGssCi0JJmV4dGFsX2RpdjJfY2xrLAotCSZtYWluX2NsaywKLQkmcGxsMV9jbGssCi0JJnBsbDFfZGl2Ml9jbGssCi0JJnBsbDNfY2xrLAotCSZocF9jbGssCi0JJnBfY2xrLAotCSZxc3BpX2NsaywKLQkmcmNsa19jbGssCi0JJm1wX2NsaywKLQkmY3BfY2xrLAotCSZ6Z19jbGssCi0JJnp4X2NsaywKLQkmenNfY2xrLAotfTsKLQotLyogU0RISSAoRElWNCkgY2xvY2sgKi8KLXN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAxOCwgMjQsIDAsIDM2LCA0OCwgMTAgfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKLQkuZGl2aXNvcnMgPSBkaXZpc29ycywKLQkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKLQkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKLX07Ci0KLWVudW0gewotCURJVjRfU0RILCBESVY0X1NEMCwKLQlESVY0X05SCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkaXY0X2Nsa3NbRElWNF9OUl0gPSB7Ci0JW0RJVjRfU0RIXSA9IFNIX0NMS19ESVY0KCZwbGwxX2NsaywgU0RDS0NSLCA4LCAweDBkZmYsIENMS19FTkFCTEVfT05fSU5JVCksCi0JW0RJVjRfU0QwXSA9IFNIX0NMS19ESVY0KCZwbGwxX2NsaywgU0RDS0NSLCA0LCAweDFkZjAsIENMS19FTkFCTEVfT05fSU5JVCksCi19OwotCi0vKiBESVY2IGNsb2NrcyAqLwotZW51bSB7Ci0JRElWNl9TRDEsIERJVjZfU0QyLAotCURJVjZfTlIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRpdjZfY2xrc1tESVY2X05SXSA9IHsKLQlbRElWNl9TRDFdCT0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIFNEMUNLQ1IsIDApLAotCVtESVY2X1NEMl0JPSBTSF9DTEtfRElWNigmcGxsMV9kaXYyX2NsaywgU0QyQ0tDUiwgMCksCi19OwotCi0vKiBNU1RQICovCi1lbnVtIHsKLQlNU1RQMTEwOCwgTVNUUDExMDcsIE1TVFAxMTA2LAotCU1TVFA5MzEsIE1TVFA5MzAsIE1TVFA5MjksIE1TVFA5MjgsIE1TVFA5MjcsIE1TVFA5MjUsCi0JTVNUUDkxNywKLQlNU1RQODE1LCBNU1RQODE0LAotCU1TVFA4MTMsCi0JTVNUUDgxMSwgTVNUUDgxMCwgTVNUUDgwOSwKLQlNU1RQNzI2LCBNU1RQNzI0LCBNU1RQNzIzLCBNU1RQNzIxLCBNU1RQNzIwLAotCU1TVFA3MTksIE1TVFA3MTgsIE1TVFA3MTUsIE1TVFA3MTQsCi0JTVNUUDUyMiwKLQlNU1RQMzE0LCBNU1RQMzEyLCBNU1RQMzExLAotCU1TVFAyMTYsIE1TVFAyMDcsIE1TVFAyMDYsCi0JTVNUUDIwNCwgTVNUUDIwMywgTVNUUDIwMiwKLQlNU1RQMTI0LAotCU1TVFBfTlIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1zdHBfY2xrc1tNU1RQX05SXSA9IHsKLQlbTVNUUDExMDhdID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjExLCA4LCBNU1RQU1IxMSwgMCksIC8qIFNDSUZBNSAqLwotCVtNU1RQMTEwN10gPSBTSF9DTEtfTVNUUDMyX1NUUygmbXBfY2xrLCBTTVNUUENSMTEsIDcsIE1TVFBTUjExLCAwKSwgLyogU0NJRkE0ICovCi0JW01TVFAxMTA2XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZtcF9jbGssIFNNU1RQQ1IxMSwgNiwgTVNUUFNSMTEsIDApLCAvKiBTQ0lGQTMgKi8KLQlbTVNUUDkzMV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmaHBfY2xrLCBTTVNUUENSOSwgMzEsIE1TVFBTUjksIDApLCAvKiBJMkMwICovCi0JW01TVFA5MzBdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmhwX2NsaywgU01TVFBDUjksIDMwLCBNU1RQU1I5LCAwKSwgLyogSTJDMSAqLwotCVtNU1RQOTI5XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZocF9jbGssIFNNU1RQQ1I5LCAyOSwgTVNUUFNSOSwgMCksIC8qIEkyQzIgKi8KLQlbTVNUUDkyOF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmaHBfY2xrLCBTTVNUUENSOSwgMjgsIE1TVFBTUjksIDApLCAvKiBJMkMzICovCi0JW01TVFA5MjddID0gU0hfQ0xLX01TVFAzMl9TVFMoJmhwX2NsaywgU01TVFBDUjksIDI3LCBNU1RQU1I5LCAwKSwgLyogSTJDNCAqLwotCVtNU1RQOTI1XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZocF9jbGssIFNNU1RQQ1I5LCAyNSwgTVNUUFNSOSwgMCksIC8qIEkyQzUgKi8KLQlbTVNUUDkxN10gPSBTSF9DTEtfTVNUUDMyX1NUUygmcXNwaV9jbGssIFNNU1RQQ1I5LCAxNywgTVNUUFNSOSwgMCksIC8qIFFTUEkgKi8KLQlbTVNUUDgxNV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmenNfY2xrLCBTTVNUUENSOCwgMTUsIE1TVFBTUjgsIDApLCAvKiBTQVRBMCAqLwotCVtNU1RQODE0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZ6c19jbGssIFNNU1RQQ1I4LCAxNCwgTVNUUFNSOCwgMCksIC8qIFNBVEExICovCi0JW01TVFA4MTNdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSOCwgMTMsIE1TVFBTUjgsIDApLCAvKiBFdGhlciAqLwotCVtNU1RQODExXSA9IFNIX0NMS19NU1RQMzJfU1RTKCZ6Z19jbGssIFNNU1RQQ1I4LCAxMSwgTVNUUFNSOCwgMCksIC8qIFZJTjAgKi8KLQlbTVNUUDgxMF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmemdfY2xrLCBTTVNUUENSOCwgMTAsIE1TVFBTUjgsIDApLCAvKiBWSU4xICovCi0JW01TVFA4MDldID0gU0hfQ0xLX01TVFAzMl9TVFMoJnpnX2NsaywgU01TVFBDUjgsIDksIE1TVFBTUjgsIDApLCAvKiBWSU4yICovCi0JW01TVFA3MjZdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnp4X2NsaywgU01TVFBDUjcsIDI2LCBNU1RQU1I3LCAwKSwgLyogTFZEUzAgKi8KLQlbTVNUUDcyNF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmenhfY2xrLCBTTVNUUENSNywgMjQsIE1TVFBTUjcsIDApLCAvKiBEVTAgKi8KLQlbTVNUUDcyM10gPSBTSF9DTEtfTVNUUDMyX1NUUygmenhfY2xrLCBTTVNUUENSNywgMjMsIE1TVFBTUjcsIDApLCAvKiBEVTEgKi8KLQlbTVNUUDcyMV0gPSBTSF9DTEtfTVNUUDMyX1NUUygmcF9jbGssIFNNU1RQQ1I3LCAyMSwgTVNUUFNSNywgMCksIC8qIFNDSUYwICovCi0JW01TVFA3MjBdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSNywgMjAsIE1TVFBTUjcsIDApLCAvKiBTQ0lGMSAqLwotCVtNU1RQNzE5XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjcsIDE5LCBNU1RQU1I3LCAwKSwgLyogU0NJRjIgKi8KLQlbTVNUUDcxOF0gPSBTSF9DTEtfTVNUUDMyX1NUUygmcF9jbGssIFNNU1RQQ1I3LCAxOCwgTVNUUFNSNywgMCksIC8qIFNDSUYzICovCi0JW01TVFA3MTVdID0gU0hfQ0xLX01TVFAzMl9TVFMoJnBfY2xrLCBTTVNUUENSNywgMTUsIE1TVFBTUjcsIDApLCAvKiBTQ0lGNCAqLwotCVtNU1RQNzE0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZwX2NsaywgU01TVFBDUjcsIDE0LCBNU1RQU1I3LCAwKSwgLyogU0NJRjUgKi8KLQlbTVNUUDUyMl0gPSBTSF9DTEtfTVNUUDMyX1NUUygmZXh0YWxfY2xrLCBTTVNUUENSNSwgMjIsIE1TVFBTUjUsIDApLCAvKiBUaGVybWFsICovCi0JW01TVFAzMTRdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmRpdjRfY2xrc1tESVY0X1NEMF0sIFNNU1RQQ1IzLCAxNCwgTVNUUFNSMywgMCksIC8qIFNESEkwICovCi0JW01TVFAzMTJdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmRpdjZfY2xrc1tESVY2X1NEMV0sIFNNU1RQQ1IzLCAxMiwgTVNUUFNSMywgMCksIC8qIFNESEkxICovCi0JW01TVFAzMTFdID0gU0hfQ0xLX01TVFAzMl9TVFMoJmRpdjZfY2xrc1tESVY2X1NEMl0sIFNNU1RQQ1IzLCAxMSwgTVNUUFNSMywgMCksIC8qIFNESEkyICovCi0JW01TVFAyMTZdID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjIsIDE2LCBNU1RQU1IyLCAwKSwgLyogU0NJRkIyICovCi0JW01TVFAyMDddID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjIsIDcsIE1TVFBTUjIsIDApLCAvKiBTQ0lGQjEgKi8KLQlbTVNUUDIwNl0gPSBTSF9DTEtfTVNUUDMyX1NUUygmbXBfY2xrLCBTTVNUUENSMiwgNiwgTVNUUFNSMiwgMCksIC8qIFNDSUZCMCAqLwotCVtNU1RQMjA0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZtcF9jbGssIFNNU1RQQ1IyLCA0LCBNU1RQU1IyLCAwKSwgLyogU0NJRkEwICovCi0JW01TVFAyMDNdID0gU0hfQ0xLX01TVFAzMl9TVFMoJm1wX2NsaywgU01TVFBDUjIsIDMsIE1TVFBTUjIsIDApLCAvKiBTQ0lGQTEgKi8KLQlbTVNUUDIwMl0gPSBTSF9DTEtfTVNUUDMyX1NUUygmbXBfY2xrLCBTTVNUUENSMiwgMiwgTVNUUFNSMiwgMCksIC8qIFNDSUZBMiAqLwotCVtNU1RQMTI0XSA9IFNIX0NMS19NU1RQMzJfU1RTKCZyY2xrX2NsaywgU01TVFBDUjEsIDI0LCBNU1RQU1IxLCAwKSwgLyogQ01UMCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKLQotCS8qIG1haW4gY2xvY2tzICovCi0JQ0xLREVWX0NPTl9JRCgiZXh0YWwiLAkJJmV4dGFsX2NsayksCi0JQ0xLREVWX0NPTl9JRCgiZXh0YWxfZGl2MiIsCSZleHRhbF9kaXYyX2NsayksCi0JQ0xLREVWX0NPTl9JRCgibWFpbiIsCQkmbWFpbl9jbGspLAotCUNMS0RFVl9DT05fSUQoInBsbDEiLAkJJnBsbDFfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJwbGwxX2RpdjIiLAkmcGxsMV9kaXYyX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicGxsMyIsCQkmcGxsM19jbGspLAotCUNMS0RFVl9DT05fSUQoInpnIiwJCSZ6Z19jbGspLAotCUNMS0RFVl9DT05fSUQoInpzIiwJCSZ6c19jbGspLAotCUNMS0RFVl9DT05fSUQoImhwIiwJCSZocF9jbGspLAotCUNMS0RFVl9DT05fSUQoInAiLAkJJnBfY2xrKSwKLQlDTEtERVZfQ09OX0lEKCJxc3BpIiwJCSZxc3BpX2NsayksCi0JQ0xLREVWX0NPTl9JRCgicmNsayIsCQkmcmNsa19jbGspLAotCUNMS0RFVl9DT05fSUQoIm1wIiwJCSZtcF9jbGspLAotCUNMS0RFVl9DT05fSUQoImNwIiwJCSZjcF9jbGspLAotCUNMS0RFVl9DT05fSUQoInBlcmlwaGVyYWxfY2xrIiwgJmhwX2NsayksCi0KLQkvKiBNU1RQICovCi0JQ0xLREVWX0lDS19JRCgibHZkcy4wIiwgInJjYXItZHUtcjhhNzc5MSIsICZtc3RwX2Nsa3NbTVNUUDcyNl0pLAotCUNMS0RFVl9JQ0tfSUQoImR1LjAiLCAicmNhci1kdS1yOGE3NzkxIiwgJm1zdHBfY2xrc1tNU1RQNzI0XSksCi0JQ0xLREVWX0lDS19JRCgiZHUuMSIsICJyY2FyLWR1LXI4YTc3OTEiLCAmbXN0cF9jbGtzW01TVFA3MjNdKSwKLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMCIsICZtc3RwX2Nsa3NbTVNUUDIwNF0pLCAvKiBTQ0lGQTAgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbTVNUUDIwM10pLCAvKiBTQ0lGQTEgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMiIsICZtc3RwX2Nsa3NbTVNUUDIwNl0pLCAvKiBTQ0lGQjAgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMyIsICZtc3RwX2Nsa3NbTVNUUDIwN10pLCAvKiBTQ0lGQjEgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuNCIsICZtc3RwX2Nsa3NbTVNUUDIxNl0pLCAvKiBTQ0lGQjIgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuNSIsICZtc3RwX2Nsa3NbTVNUUDIwMl0pLCAvKiBTQ0lGQTIgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuNiIsICZtc3RwX2Nsa3NbTVNUUDcyMV0pLCAvKiBTQ0lGMCAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS43IiwgJm1zdHBfY2xrc1tNU1RQNzIwXSksIC8qIFNDSUYxICovCi0JQ0xLREVWX0RFVl9JRCgic2gtc2NpLjgiLCAmbXN0cF9jbGtzW01TVFA3MTldKSwgLyogU0NJRjIgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuOSIsICZtc3RwX2Nsa3NbTVNUUDcxOF0pLCAvKiBTQ0lGMyAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4xMCIsICZtc3RwX2Nsa3NbTVNUUDcxNV0pLCAvKiBTQ0lGNCAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4xMSIsICZtc3RwX2Nsa3NbTVNUUDcxNF0pLCAvKiBTQ0lGNSAqLwotCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4xMiIsICZtc3RwX2Nsa3NbTVNUUDExMDZdKSwgLyogU0NJRkEzICovCi0JQ0xLREVWX0RFVl9JRCgic2gtc2NpLjEzIiwgJm1zdHBfY2xrc1tNU1RQMTEwN10pLCAvKiBTQ0lGQTQgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1zY2kuMTQiLCAmbXN0cF9jbGtzW01TVFAxMTA4XSksIC8qIFNDSUZBNSAqLwotCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9zZGhpLjAiLCAmbXN0cF9jbGtzW01TVFAzMTRdKSwKLQlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4xIiwgJm1zdHBfY2xrc1tNU1RQMzEyXSksCi0JQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX3NkaGkuMiIsICZtc3RwX2Nsa3NbTVNUUDMxMV0pLAotCUNMS0RFVl9JQ0tfSUQoImZjayIsICJzaC1jbXQtNDgtZ2VuMi4wIiwgJm1zdHBfY2xrc1tNU1RQMTI0XSksCi0JQ0xLREVWX0RFVl9JRCgicXNwaS4wIiwgJm1zdHBfY2xrc1tNU1RQOTE3XSksCi0JQ0xLREVWX0RFVl9JRCgicmNhcl90aGVybWFsIiwgJm1zdHBfY2xrc1tNU1RQNTIyXSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4wIiwgJm1zdHBfY2xrc1tNU1RQOTMxXSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4xIiwgJm1zdHBfY2xrc1tNU1RQOTMwXSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4yIiwgJm1zdHBfY2xrc1tNU1RQOTI5XSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi4zIiwgJm1zdHBfY2xrc1tNU1RQOTI4XSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi40IiwgJm1zdHBfY2xrc1tNU1RQOTI3XSksCi0JQ0xLREVWX0RFVl9JRCgiaTJjLXJjYXJfZ2VuMi41IiwgJm1zdHBfY2xrc1tNU1RQOTI1XSksCi0JQ0xLREVWX0RFVl9JRCgicjhhNzc5MS1ldGhlciIsICZtc3RwX2Nsa3NbTVNUUDgxM10pLCAvKiBFdGhlciAqLwotCUNMS0RFVl9ERVZfSUQoInI4YTc3OTEtdmluLjAiLCAmbXN0cF9jbGtzW01TVFA4MTFdKSwKLQlDTEtERVZfREVWX0lEKCJyOGE3NzkxLXZpbi4xIiwgJm1zdHBfY2xrc1tNU1RQODEwXSksCi0JQ0xLREVWX0RFVl9JRCgicjhhNzc5MS12aW4uMiIsICZtc3RwX2Nsa3NbTVNUUDgwOV0pLAotCUNMS0RFVl9ERVZfSUQoInNhdGEtcjhhNzc5MS4wIiwgJm1zdHBfY2xrc1tNU1RQODE1XSksCi0JQ0xLREVWX0RFVl9JRCgic2F0YS1yOGE3NzkxLjEiLCAmbXN0cF9jbGtzW01TVFA4MTRdKSwKLX07Ci0KLSNkZWZpbmUgUjhBNzc5MV9DTE9DS19ST09UKGUsIG0sIHAwLCBwMSwgcDMwLCBwMzEpCQlcCi0JZXh0YWxfY2xrLnJhdGUJPSBlICogMTAwMCAqIDEwMDA7CQkJXAotCW1haW5fY2xrLnBhcmVudAk9IG07CQkJCQlcCi0JU0hfQ0xLX1NFVF9SQVRJTygmcGxsMV9jbGtfcmF0aW8sIHAxIC8gMiwgMSk7CQlcCi0JaWYgKG1vZGUgJiBNRCgxOSkpCQkJCQlcCi0JCVNIX0NMS19TRVRfUkFUSU8oJnBsbDNfY2xrX3JhdGlvLCBwMzEsIDEpOwlcCi0JZWxzZQkJCQkJCQlcCi0JCVNIX0NMS19TRVRfUkFUSU8oJnBsbDNfY2xrX3JhdGlvLCBwMzAsIDEpCi0KLQotdm9pZCBfX2luaXQgcjhhNzc5MV9jbG9ja19pbml0KHZvaWQpCi17Ci0JdTMyIG1vZGUgPSByY2FyX2dlbjJfcmVhZF9tb2RlX3BpbnMoKTsKLQlpbnQgaywgcmV0ID0gMDsKLQotCXN3aXRjaCAobW9kZSAmIChNRCgxNCkgfCBNRCgxMykpKSB7Ci0JY2FzZSAwOgotCQlSOEE3NzkxX0NMT0NLX1JPT1QoMTUsICZleHRhbF9jbGssIDE3MiwgMjA4LCAxMDYsIDg4KTsKLQkJYnJlYWs7Ci0JY2FzZSBNRCgxMyk6Ci0JCVI4QTc3OTFfQ0xPQ0tfUk9PVCgyMCwgJmV4dGFsX2NsaywgMTMwLCAxNTYsIDgwLCA2Nik7Ci0JCWJyZWFrOwotCWNhc2UgTUQoMTQpOgotCQlSOEE3NzkxX0NMT0NLX1JPT1QoMjYsICZleHRhbF9kaXYyX2NsaywgMjAwLCAyNDAsIDEyMiwgMTAyKTsKLQkJYnJlYWs7Ci0JY2FzZSBNRCgxMykgfCBNRCgxNCk6Ci0JCVI4QTc3OTFfQ0xPQ0tfUk9PVCgzMCwgJmV4dGFsX2RpdjJfY2xrLCAxNzIsIDIwOCwgMTA2LCA4OCk7Ci0JCWJyZWFrOwotCX0KLQotCWlmICgobW9kZSAmIChNRCgzKSB8IE1EKDIpIHwgTUQoMSkpKSA9PSBNRCgyKSkKLQkJU0hfQ0xLX1NFVF9SQVRJTygmcXNwaV9jbGtfcmF0aW8sIDEsIDE2KTsKLQllbHNlCi0JCVNIX0NMS19TRVRfUkFUSU8oJnFzcGlfY2xrX3JhdGlvLCAxLCAyMCk7Ci0KLQlmb3IgKGsgPSAwOyAhcmV0ICYmIChrIDwgQVJSQVlfU0laRShtYWluX2Nsa3MpKTsgaysrKQotCQlyZXQgPSBjbGtfcmVnaXN0ZXIobWFpbl9jbGtzW2tdKTsKLQotCWlmICghcmV0KQotCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKLQotCWlmICghcmV0KQotCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIERJVjZfTlIpOwotCi0JaWYgKCFyZXQpCi0JCXJldCA9IHNoX2Nsa19tc3RwX3JlZ2lzdGVyKG1zdHBfY2xrcywgTVNUUF9OUik7Ci0KLQljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwotCi0JaWYgKCFyZXQpCi0JCXNobW9iaWxlX2Nsa19pbml0KCk7Ci0JZWxzZQotCQlnb3RvIGVwYW5pYzsKLQotCXJldHVybjsKLQotZXBhbmljOgotCXBhbmljKCJmYWlsZWQgdG8gc2V0dXAgcjhhNzc5MSBjbG9ja3NcbiIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKaW5kZXggNzA3MTY3Ni4uM2JjOTJmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYwppbmRleCAwMmE2ZjQ1Li42YjRjMWYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suYwppbmRleCA4MDZmOTQwLi4zNGYwNTZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay5jCkBAIC0xNCw0MSArMTQsMTMgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKICAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaWZkZWYgQ09ORklHX0NPTU1PTl9DTEsKLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KLSNpbmNsdWRlICJjbG9jay5oIgotCi12b2lkIF9faW5pdCBzaG1vYmlsZV9jbGtfd29ya2Fyb3VuZChjb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa3MsCi0JCQkJICAgIGludCBucl9jbGtzLCBib29sIGVuYWJsZSkKLXsKLQljb25zdCBzdHJ1Y3QgY2xrX25hbWUgKmNsa247Ci0Jc3RydWN0IGNsayAqY2xrOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX2Nsa3M7ICsraSkgewotCQljbGtuID0gY2xrcyArIGk7Ci0JCWNsayA9IGNsa19nZXQoTlVMTCwgY2xrbi0+Y2xrKTsKLQkJaWYgKCFJU19FUlIoY2xrKSkgewotCQkJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssIGNsa24tPmNvbl9pZCwgY2xrbi0+ZGV2X2lkKTsKLQkJCWlmIChlbmFibGUpCi0JCQkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7Ci0JCQljbGtfcHV0KGNsayk7Ci0JCX0KLQl9Ci19Ci0KLSNlbHNlIC8qIENPTkZJR19DT01NT05fQ0xLICovCiAjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgogCkBAIC04NCw1ICs1NiwzIEBACiB7CiB9CiBFWFBPUlRfU1lNQk9MKF9fY2xrX3B1dCk7Ci0KLSNlbmRpZiAvKiBDT05GSUdfQ09NTU9OX0NMSyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay5oCmluZGV4IDMxYjY0MTcuLmNmMzU1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmgKQEAgLTEsMTkgKzEsNiBAQAogI2lmbmRlZiBDTE9DS19ICiAjZGVmaW5lIENMT0NLX0gKIAotI2lmZGVmIENPTkZJR19DT01NT05fQ0xLCi0vKiB0ZW1wb3JhcnkgY2xvY2sgY29uZmlndXJhdGlvbiBoZWxwZXIgZm9yIHBsYXRmb3JtIGRldmljZXMgKi8KLQotc3RydWN0IGNsa19uYW1lIHsKLQljb25zdCBjaGFyICpjbGs7Ci0JY29uc3QgY2hhciAqY29uX2lkOwotCWNvbnN0IGNoYXIgKmRldl9pZDsKLX07Ci0KLXZvaWQgc2htb2JpbGVfY2xrX3dvcmthcm91bmQoY29uc3Qgc3RydWN0IGNsa19uYW1lICpjbGtzLCBpbnQgbnJfY2xrcywKLQkJCSAgICAgYm9vbCBlbmFibGUpOwotCi0jZWxzZSAvKiBDT05GSUdfQ09NTU9OX0NMSyAqLwogLyogbGVnYWN5IGNsb2NrIGltcGxlbWVudGF0aW9uICovCiAKIHN0cnVjdCBjbGs7CkBAIC01Miw1ICszOSw0IEBACiAJKHApLT5kaXYgPSBkOwlcCiB9IHdoaWxlICgwKQogCi0jZW5kaWYgLyogQ09ORklHX0NPTU1PTl9DTEsgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29tbW9uLmgKaW5kZXggNzIwODdjNy4uMzA5MDI1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2NvbW1vbi5oCkBAIC0xOSwxMSArMTksNiBAQAogZXh0ZXJuIHZvaWQgc2htb2JpbGVfc21wX3NjdV9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKIGV4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9zY3VfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKIGV4dGVybiBpbnQgc2htb2JpbGVfc21wX3NjdV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOwotZXh0ZXJuIGludCBzaG1vYmlsZV9zbXBfYXBtdV9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LAotCQkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKTsKLWV4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9hcG11X2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7Ci1leHRlcm4gaW50IHNobW9iaWxlX3NtcF9hcG11X2NwdV9raWxsKHVuc2lnbmVkIGludCBjcHUpOwogc3RydWN0IGNsazsKIGV4dGVybiBpbnQgc2htb2JpbGVfY2xrX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBzaG1vYmlsZV9oYW5kbGVfaXJxX2ludGMoc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2NvbnNvbGUuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jCmluZGV4IGYyZTc5ZjIuLmUzMjljY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9oZWFkc21wLXNjdS5TIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9oZWFkc21wLXNjdS5TCmluZGV4IGY0NWRkZTcuLjY5ZGY4YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaGVhZHNtcC1zY3UuUworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2hlYWRzbXAtc2N1LlMKQEAgLTEyLDExICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jCmluZGV4IGUyYWYwMGIuLjFjY2Y0OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMKaW5kZXggNDQ0NTdhOS4uOWUzNjE4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYwpAQCAtMTEsMTAgKzExLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BsYXRzbXAtYXBtdS5jCmluZGV4IDJjMDY4MTAuLmY0ODNiNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbGF0c21wLWFwbXUuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBTTVAgc3VwcG9ydCBmb3IgU29DcyB3aXRoIEFQTVUKICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgIFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KICAqIENvcHlyaWdodCAoQykgMjAxMyAgTWFnbnVzIERhbW0KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjIsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicGxhdHNtcC1hcG11LmgiCiAKIHN0YXRpYyBzdHJ1Y3QgewogCXZvaWQgX19pb21lbSAqaW9tZW07CkBAIC04MywyOCArODUsMTUgQEAKIAlwcl9kZWJ1ZygiYXBtdSBpb3JlbWFwICVkICVkICVwclxuIiwgY3B1LCBiaXQsIHJlcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgewotCXN0cnVjdCByZXNvdXJjZSBpb21lbTsKLQlpbnQgY3B1c1s0XTsKLX0gYXBtdV9jb25maWdbXSA9IHsKLQl7Ci0JCS5pb21lbSA9IERFRklORV9SRVNfTUVNKDB4ZTYxNTIwMDAsIDB4ODgpLAotCQkuY3B1cyA9IHsgMCwgMSwgMiwgMyB9LAotCX0sCi0JewotCQkuaW9tZW0gPSBERUZJTkVfUkVTX01FTSgweGU2MTUxMDAwLCAweDg4KSwKLQkJLmNwdXMgPSB7IDB4MTAwLCAweDEwMSwgMHgxMDIsIDB4MTAzIH0sCi0JfQotfTsKLQotc3RhdGljIHZvaWQgYXBtdV9wYXJzZV9jZmcodm9pZCAoKmZuKShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IGNwdSwgaW50IGJpdCkpCitzdGF0aWMgdm9pZCBhcG11X3BhcnNlX2NmZyh2b2lkICgqZm4pKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgY3B1LCBpbnQgYml0KSwKKwkJCSAgIHN0cnVjdCByY2FyX2FwbXVfY29uZmlnICphcG11X2NvbmZpZywgaW50IG51bSkKIHsKIAl1MzIgaWQ7CiAJaW50IGs7CiAJaW50IGJpdCwgaW5kZXg7CiAJYm9vbCBpc19hbGxvd2VkOwogCi0JZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoYXBtdV9jb25maWcpOyBrKyspIHsKKwlmb3IgKGsgPSAwOyBrIDwgbnVtOyBrKyspIHsKIAkJLyogb25seSBlbmFibGUgdGhlIGNsdXN0ZXIgdGhhdCBpbmNsdWRlcyB0aGUgYm9vdCBDUFUgKi8KIAkJaXNfYWxsb3dlZCA9IGZhbHNlOwogCQlmb3IgKGJpdCA9IDA7IGJpdCA8IEFSUkFZX1NJWkUoYXBtdV9jb25maWdba10uY3B1cyk7IGJpdCsrKSB7CkBAIC0xMjgsMTQgKzExNywxNiBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQgc2htb2JpbGVfc21wX2FwbXVfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3ZvaWQgX19pbml0IHNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMsCisJCQkJCSAgIHN0cnVjdCByY2FyX2FwbXVfY29uZmlnICphcG11X2NvbmZpZywKKwkJCQkJICAgaW50IG51bSkKIHsKIAkvKiBpbnN0YWxsIGJvb3QgY29kZSBzaGFyZWQgYnkgYWxsIENQVXMgKi8KIAlzaG1vYmlsZV9ib290X2ZuID0gdmlydF90b19waHlzKHNobW9iaWxlX3NtcF9ib290KTsKIAlzaG1vYmlsZV9ib290X2FyZyA9IE1QSURSX0hXSURfQklUTUFTSzsKIAogCS8qIHBlcmZvcm0gcGVyLWNwdSBzZXR1cCAqLwotCWFwbXVfcGFyc2VfY2ZnKGFwbXVfaW5pdF9jcHUpOworCWFwbXVfcGFyc2VfY2ZnKGFwbXVfaW5pdF9jcHUsIGFwbXVfY29uZmlnLCBudW0pOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbGF0c21wLWFwbXUuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1MTJjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC1hcG11LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIHJtb2JpbGUgYXBtdSBkZWZpbml0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0ICBSZW5lc2FzIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIFBMQVRTTVBfQVBNVV9ICisjZGVmaW5lIFBMQVRTTVBfQVBNVV9ICisKK3N0cnVjdCByY2FyX2FwbXVfY29uZmlnIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgaW9tZW07CisJaW50IGNwdXNbNF07Cit9OworCitleHRlcm4gdm9pZCBzaG1vYmlsZV9zbXBfYXBtdV9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzLAorCQkJCQkgICBzdHJ1Y3QgcmNhcl9hcG11X2NvbmZpZyAqYXBtdV9jb25maWcsCisJCQkJCSAgIGludCBudW0pOworZXh0ZXJuIGludCBzaG1vYmlsZV9zbXBfYXBtdV9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKTsKK2V4dGVybiB2b2lkIHNobW9iaWxlX3NtcF9hcG11X2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaW50IHNobW9iaWxlX3NtcF9hcG11X2NwdV9raWxsKHVuc2lnbmVkIGludCBjcHUpOworCisjZW5kaWYgLyogUExBVFNNUF9BUE1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcG0tcjhhNzc0MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1yOGE3NzQwLmMKaW5kZXggZTNmMTQ2NC4uYWMyZWVjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1yOGE3NzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1yOGE3NzQwLmMKQEAgLTE0LDEwICsxNCwxMCBAQAogI2luY2x1ZGUgInBtLXJtb2JpbGUuaCIKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiAhZGVmaW5lZChDT05GSUdfQVJDSF9NVUxUSVBMQVRGT1JNKQotc3RhdGljIGludCByOGE3NzQwX3BkX2E0c19zdXNwZW5kKHZvaWQpCitzdGF0aWMgaW50IHI4YTc3NDBfcGRfYTNzbV9zdXNwZW5kKHZvaWQpCiB7CiAJLyoKLQkgKiBUaGUgQTRTIGRvbWFpbiBjb250YWlucyB0aGUgQ1BVIGNvcmUgYW5kIHRoZXJlZm9yZSBpdCBzaG91bGQKKwkgKiBUaGUgQTNTTSBkb21haW4gY29udGFpbnMgdGhlIENQVSBjb3JlIGFuZCB0aGVyZWZvcmUgaXQgc2hvdWxkCiAJICogb25seSBiZSB0dXJuZWQgb2ZmIGlmIHRoZSBDUFUgaXMgbm90IGluIHVzZS4KIAkgKi8KIAlyZXR1cm4gLUVCVVNZOwpAQCAtMzIsMjkgKzMyLDY1IEBACiAJcmV0dXJuIGNvbnNvbGVfc3VzcGVuZF9lbmFibGVkID8gMCA6IC1FQlVTWTsKIH0KIAorc3RhdGljIGludCByOGE3NzQwX3BkX2Q0X3N1c3BlbmQodm9pZCkKK3sKKwkvKgorCSAqIFRoZSBENCBkb21haW4gY29udGFpbnMgdGhlIENvcmVzaWdodC1FVE0gaGFyZHdhcmUgYmxvY2sgYW5kCisJICogdGhlcmVmb3JlIGl0IHNob3VsZCBvbmx5IGJlIHR1cm5lZCBvZmYgaWYgdGhlIGRlYnVnIG1vZHVsZSBpcworCSAqIG5vdCBpbiB1c2UuCisJICovCisJcmV0dXJuIC1FQlVTWTsKK30KKwogc3RhdGljIHN0cnVjdCBybW9iaWxlX3BtX2RvbWFpbiByOGE3NzQwX3BtX2RvbWFpbnNbXSA9IHsKIAl7CiAJCS5nZW5wZC5uYW1lCT0gIkE0TEMiLAogCQkuYml0X3NoaWZ0CT0gMSwKIAl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkE0TVAiLAorCQkuYml0X3NoaWZ0CT0gMiwKKwl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkQ0IiwKKwkJLmJpdF9zaGlmdAk9IDMsCisJCS5nb3YJCT0gJnBtX2RvbWFpbl9hbHdheXNfb25fZ292LAorCQkuc3VzcGVuZAk9IHI4YTc3NDBfcGRfZDRfc3VzcGVuZCwKKwl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkE0UiIsCisJCS5iaXRfc2hpZnQJPSA1LAorCX0sIHsKKwkJLmdlbnBkLm5hbWUJPSAiQTNSViIsCisJCS5iaXRfc2hpZnQJPSA2LAorCX0sIHsKIAkJLmdlbnBkLm5hbWUJPSAiQTRTIiwKIAkJLmJpdF9zaGlmdAk9IDEwLAotCQkuZ292CQk9ICZwbV9kb21haW5fYWx3YXlzX29uX2dvdiwKIAkJLm5vX2RlYnVnCT0gdHJ1ZSwKLQkJLnN1c3BlbmQJPSByOGE3NzQwX3BkX2E0c19zdXNwZW5kLAogCX0sIHsKIAkJLmdlbnBkLm5hbWUJPSAiQTNTUCIsCiAJCS5iaXRfc2hpZnQJPSAxMSwKIAkJLmdvdgkJPSAmcG1fZG9tYWluX2Fsd2F5c19vbl9nb3YsCiAJCS5ub19kZWJ1Zwk9IHRydWUsCiAJCS5zdXNwZW5kCT0gcjhhNzc0MF9wZF9hM3NwX3N1c3BlbmQsCisJfSwgeworCQkuZ2VucGQubmFtZQk9ICJBM1NNIiwKKwkJLmJpdF9zaGlmdAk9IDEyLAorCQkuZ292CQk9ICZwbV9kb21haW5fYWx3YXlzX29uX2dvdiwKKwkJLnN1c3BlbmQJPSByOGE3NzQwX3BkX2Ezc21fc3VzcGVuZCwKKwl9LCB7CisJCS5nZW5wZC5uYW1lCT0gIkEzU0ciLAorCQkuYml0X3NoaWZ0CT0gMTMsCisJfSwgeworCQkuZ2VucGQubmFtZQk9ICJBNFNVIiwKKwkJLmJpdF9zaGlmdAk9IDIwLAogCX0sCiB9OwogCiB2b2lkIF9faW5pdCByOGE3NzQwX2luaXRfcG1fZG9tYWlucyh2b2lkKQogewogCXJtb2JpbGVfaW5pdF9kb21haW5zKHI4YTc3NDBfcG1fZG9tYWlucywgQVJSQVlfU0laRShyOGE3NzQwX3BtX2RvbWFpbnMpKTsKKwlwbV9nZW5wZF9hZGRfc3ViZG9tYWluX25hbWVzKCJBNFIiLCAiQTNSViIpOwogCXBtX2dlbnBkX2FkZF9zdWJkb21haW5fbmFtZXMoIkE0UyIsICJBM1NQIik7CisJcG1fZ2VucGRfYWRkX3N1YmRvbWFpbl9uYW1lcygiQTRTIiwgIkEzU00iKTsKKwlwbV9nZW5wZF9hZGRfc3ViZG9tYWluX25hbWVzKCJBNFMiLCAiQTNTRyIpOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAmJiAhQ09ORklHX0FSQ0hfTVVMVElQTEFURk9STSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtLXI4YTc3NzkuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcG0tcjhhNzc3OS5jCmluZGV4IDgyZmUzZDcuLjQ0YTc0YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcG0tcjhhNzc3OS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcG0tcjhhNzc3OS5jCkBAIC04Myw5ICs4Myw4IEBACiB7CiAJc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCA9ICZyOGE3Nzc5X3BkLT5nZW5wZDsKIAorCWdlbnBkLT5mbGFncyA9IEdFTlBEX0ZMQUdfUE1fQ0xLOwogCXBtX2dlbnBkX2luaXQoZ2VucGQsIE5VTEwsIGZhbHNlKTsKLQlnZW5wZC0+ZGV2X29wcy5zdG9wID0gcG1fY2xrX3N1c3BlbmQ7Ci0JZ2VucGQtPmRldl9vcHMuc3RhcnQgPSBwbV9jbGtfcmVzdW1lOwogCWdlbnBkLT5kZXZfb3BzLmFjdGl2ZV93YWtldXAgPSBwZF9hY3RpdmVfd2FrZXVwOwogCWdlbnBkLT5wb3dlcl9vZmYgPSBwZF9wb3dlcl9kb3duOwogCWdlbnBkLT5wb3dlcl9vbiA9IHBkX3Bvd2VyX3VwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1ybW9iaWxlLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtLXJtb2JpbGUuYwppbmRleCA3MTdlNjQxLi42ZjdkNTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtLXJtb2JpbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtLXJtb2JpbGUuYwpAQCAtMTA2LDkgKzEwNiw4IEBACiAJc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCA9ICZybW9iaWxlX3BkLT5nZW5wZDsKIAlzdHJ1Y3QgZGV2X3Bvd2VyX2dvdmVybm9yICpnb3YgPSBybW9iaWxlX3BkLT5nb3Y7CiAKKwlnZW5wZC0+ZmxhZ3MgPSBHRU5QRF9GTEFHX1BNX0NMSzsKIAlwbV9nZW5wZF9pbml0KGdlbnBkLCBnb3YgPyA6ICZzaW1wbGVfcW9zX2dvdmVybm9yLCBmYWxzZSk7Ci0JZ2VucGQtPmRldl9vcHMuc3RvcAkJPSBwbV9jbGtfc3VzcGVuZDsKLQlnZW5wZC0+ZGV2X29wcy5zdGFydAkJPSBwbV9jbGtfcmVzdW1lOwogCWdlbnBkLT5kZXZfb3BzLmFjdGl2ZV93YWtldXAJPSBybW9iaWxlX3BkX2FjdGl2ZV93YWtldXA7CiAJZ2VucGQtPnBvd2VyX29mZgkJPSBybW9iaWxlX3BkX3Bvd2VyX2Rvd247CiAJZ2VucGQtPnBvd2VyX29uCQkJPSBybW9iaWxlX3BkX3Bvd2VyX3VwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcG0tc2g3MzcyLmMKaW5kZXggN2U1YzI2Ny4uMGUzN2RhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbS1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtLXNoNzM3Mi5jCkBAIC00MjMsNyArNDIzLDYgQEAKIAkJLmRlc2MgPSAiQ29yZSBTdGFuZGJ5IE1vZGUiLAogCQkuZXhpdF9sYXRlbmN5ID0gMTAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMjAgKyAxMCwKLQkJLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCiAJCS5lbnRlciA9IHNoNzM3Ml9lbnRlcl9jb3JlX3N0YW5kYnksCiAJfSwKIAkuc3RhdGVzWzJdID0gewpAQCAtNDMxLDcgKzQzMCw2IEBACiAJCS5kZXNjID0gIkEzU00gUExMIE9OIiwKIAkJLmV4aXRfbGF0ZW5jeSA9IDIwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDMwICsgMjAsCi0JCS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkuZW50ZXIgPSBzaDczNzJfZW50ZXJfYTNzbV9wbGxfb24sCiAJfSwKIAkuc3RhdGVzWzNdID0gewpAQCAtNDM5LDcgKzQzNyw2IEBACiAJCS5kZXNjID0gIkEzU00gUExMIE9GRiIsCiAJCS5leGl0X2xhdGVuY3kgPSAxMjAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMzAgKyAxMjAsCi0JCS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkuZW50ZXIgPSBzaDczNzJfZW50ZXJfYTNzbV9wbGxfb2ZmLAogCX0sCiAJLnN0YXRlc1s0XSA9IHsKQEAgLTQ0Nyw3ICs0NDQsNiBAQAogCQkuZGVzYyA9ICJBNFMgUExMIE9GRiIsCiAJCS5leGl0X2xhdGVuY3kgPSAyNDAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMzAgKyAyNDAsCi0JCS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkuZW50ZXIgPSBzaDczNzJfZW50ZXJfYTRzLAogCQkuZGlzYWJsZWQgPSB0cnVlLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTczYTQuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzNhNC5oCmluZGV4IDVmYWZkNmYuLjcwZGNkODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzNhNC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzNhNC5oCkBAIC0xMSw3ICsxMSw2IEBACiB9OwogCiB2b2lkIHI4YTczYTRfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7Ci12b2lkIHI4YTczYTRfYWRkX2R0X2RldmljZXModm9pZCk7CiB2b2lkIHI4YTczYTRfY2xvY2tfaW5pdCh2b2lkKTsKIHZvaWQgcjhhNzNhNF9waW5tdXhfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yOGE3NzQwLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NDAuaAppbmRleCBmMzY5YjRiLi5jYTc4MDVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NDAuaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NDAuaApAQCAtMTAsMTAgKzEwLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaWZuZGVmIF9fQVNNX1I4QTc3NDBfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3NzguaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc3OC5oCmluZGV4IGY0MDc2YTUuLmY2NGZlZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc3OC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc3OC5oCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaWZuZGVmIF9fQVNNX1I4QTc3NzhfSF9fCiAjZGVmaW5lIF9fQVNNX1I4QTc3NzhfSF9fCkBAIC03MSw3ICs2Nyw2IEBACiBleHRlcm4gdm9pZCByOGE3Nzc4X2FkZF9kdF9kZXZpY2VzKHZvaWQpOwogCiBleHRlcm4gdm9pZCByOGE3Nzc4X2luaXRfbGF0ZSh2b2lkKTsKLWV4dGVybiB2b2lkIHI4YTc3NzhfaW5pdF9kZWxheSh2b2lkKTsKIGV4dGVybiB2b2lkIHI4YTc3NzhfaW5pdF9pcnFfZHQodm9pZCk7CiBleHRlcm4gdm9pZCByOGE3Nzc4X2Nsb2NrX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCByOGE3Nzc4X2luaXRfaXJxX2V4dHBpbihpbnQgaXJsbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3I4YTc3OTEuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc5MS5oCmluZGV4IGMxYmY3YWIuLjZjZjExZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc5MS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcjhhNzc5MS5oCkBAIC0xLDkgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9SOEE3NzkxX0hfXwogI2RlZmluZSBfX0FTTV9SOEE3NzkxX0hfXwogCi12b2lkIHI4YTc3OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7Ci12b2lkIHI4YTc3OTFfY2xvY2tfaW5pdCh2b2lkKTsKLXZvaWQgcjhhNzc5MV9waW5tdXhfaW5pdCh2b2lkKTsKIHZvaWQgcjhhNzc5MV9wbV9pbml0KHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucyByOGE3NzkxX3NtcF9vcHM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtZW1ldjIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtZW1ldjIuYwppbmRleCBiMDZhOWU4Li5hYWQ5N2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLWVtZXYyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1lbWV2Mi5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yN3M3MjEwMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yN3M3MjEwMC5jCmluZGV4IDQxMjIxMDQuLjE3MTE3NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjdzNzIxMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI3czcyMTAwLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3M2E0LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTczYTQuYwppbmRleCA1M2Y0MGI3Li5jMjc2ODIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTczYTQuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTczYTQuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTgwLDE4ICsxNzYsMTMgQEAKIAlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDEyMCkpLAogfTsKIAotI2RlZmluZSByOGE3NzkwX3JlZ2lzdGVyX2NtdChpZHgpCQkJCQlcCisjZGVmaW5lIHI4YTczYTRfcmVnaXN0ZXJfY210KGlkeCkJCQkJCVwKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgInNoLWNtdC00OC1nZW4yIiwJXAogCQkJCQkgIGlkeCwgY210IyNpZHgjI19yZXNvdXJjZXMsCVwKIAkJCQkJICBBUlJBWV9TSVpFKGNtdCMjaWR4IyNfcmVzb3VyY2VzKSwgXAogCQkJCQkgICZjbXQjI2lkeCMjX3BsYXRmb3JtX2RhdGEsCVwKIAkJCQkJICBzaXplb2Yoc3RydWN0IHNoX3RpbWVyX2NvbmZpZykpCiAKLXZvaWQgX19pbml0IHI4YTczYTRfYWRkX2R0X2RldmljZXModm9pZCkKLXsKLQlyOGE3NzkwX3JlZ2lzdGVyX2NtdCgxKTsKLX0KLQogLyogRE1BICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnIGRtYV9zbGF2ZXNbXSA9IHsKIAl7CkBAIC0yODIsNyArMjczLDcgQEAKIAogdm9pZCBfX2luaXQgcjhhNzNhNF9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQogewotCXI4YTczYTRfYWRkX2R0X2RldmljZXMoKTsKKwlyOGE3M2E0X3JlZ2lzdGVyX2NtdCgxKTsKIAlyOGE3M2E0X3JlZ2lzdGVyX3NjaWYoMCk7CiAJcjhhNzNhNF9yZWdpc3Rlcl9zY2lmKDEpOwogCXI4YTczYTRfcmVnaXN0ZXJfc2NpZigyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc0MC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKaW5kZXggODg5NGUxYi4uNzlhZDkzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzQwLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC03MSw2ICs2Nyw3IEBACiAKIHZvaWQgX19pbml0IHI4YTc3NDBfbWFwX2lvKHZvaWQpCiB7CisJZGVidWdfbGxfaW9faW5pdCgpOwogCWlvdGFibGVfaW5pdChyOGE3NzQwX2lvX2Rlc2MsIEFSUkFZX1NJWkUocjhhNzc0MF9pb19kZXNjKSk7CiB9CiAKQEAgLTc0Niw2ICs3NDMsMTIgQEAKIHZvaWQgX19pbml0IHI4YTc3NDBfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKIHsKIAlzdGF0aWMgc3RydWN0IHBtX2RvbWFpbl9kZXZpY2UgZG9tYWluX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCQl7ICJBNFIiLCAgJnRtdTBfZGV2aWNlIH0sCisJCXsgIkE0UiIsICAmaTJjMF9kZXZpY2UgfSwKKwkJeyAiQTRTIiwgICZpcnFwaW4wX2RldmljZSB9LAorCQl7ICJBNFMiLCAgJmlycXBpbjFfZGV2aWNlIH0sCisJCXsgIkE0UyIsICAmaXJxcGluMl9kZXZpY2UgfSwKKwkJeyAiQTRTIiwgICZpcnFwaW4zX2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWYwX2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWYxX2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWYyX2RldmljZSB9LApAQCAtNzU2LDYgKzc1OSwxMSBAQAogCQl7ICJBM1NQIiwgJnNjaWY3X2RldmljZSB9LAogCQl7ICJBM1NQIiwgJnNjaWY4X2RldmljZSB9LAogCQl7ICJBM1NQIiwgJmkyYzFfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmaXBtbXVfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmZG1hMF9kZXZpY2UgfSwKKwkJeyAiQTNTUCIsICZkbWExX2RldmljZSB9LAorCQl7ICJBM1NQIiwgJmRtYTJfZGV2aWNlIH0sCisJCXsgIkEzU1AiLCAmdXNiX2RtYV9kZXZpY2UgfSwKIAl9OwogCiAJLyogSTJDIHdvcmstYXJvdW5kICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzguYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OC5jCmluZGV4IDg1ZmUwMTYuLjE3MGJkMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OC5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI5Miw4ICsyODgsNiBAQAogCQlsMngwX2luaXQoYmFzZSwgMHgwMDQwMDAwMCwgMHhjMjBmMGZmZik7CiAJfQogI2VuZGlmCi0KLQlyOGE3Nzc4X3JlZ2lzdGVyX3RtdSgwKTsKIH0KIAogLyogSFBCLURNQSAqLwpAQCAtNTAxLDYgKzQ5NSw3IEBACiB2b2lkIF9faW5pdCByOGE3Nzc4X2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCiB7CiAJcjhhNzc3OF9hZGRfZHRfZGV2aWNlcygpOworCXI4YTc3NzhfcmVnaXN0ZXJfdG11KDApOwogCXI4YTc3NzhfcmVnaXN0ZXJfc2NpZigwKTsKIAlyOGE3Nzc4X3JlZ2lzdGVyX3NjaWYoMSk7CiAJcjhhNzc3OF9yZWdpc3Rlcl9zY2lmKDIpOwpAQCAtNTcyLDExICs1NjcsNiBAQAogCQkJJmlycXBpbl9wbGF0Zm9ybV9kYXRhLCBzaXplb2YoaXJxcGluX3BsYXRmb3JtX2RhdGEpKTsKIH0KIAotdm9pZCBfX2luaXQgcjhhNzc3OF9pbml0X2RlbGF5KHZvaWQpCi17Ci0Jc2htb2JpbGVfaW5pdF9kZWxheSgpOwotfQotCiAjaWZkZWYgQ09ORklHX1VTRV9PRgogI2RlZmluZSBJTlQyU01TS0NSMAkweDgyMjg4IC8qIDB4ZmU3ODIyODggKi8KICNkZWZpbmUgSU5UMlNNU0tDUjEJMHg4MjI4YyAvKiAweGZlNzgyMjhjICovCkBAIC02MDgsNyArNTk4LDcgQEAKIH07CiAKIERUX01BQ0hJTkVfU1RBUlQoUjhBNzc3OF9EVCwgIkdlbmVyaWMgUjhBNzc3OCAoRmxhdHRlbmVkIERldmljZSBUcmVlKSIpCi0JLmluaXRfZWFybHkJPSByOGE3Nzc4X2luaXRfZGVsYXksCisJLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAogCS5pbml0X2lycQk9IHI4YTc3NzhfaW5pdF9pcnFfZHQsCiAJLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKIAkuZHRfY29tcGF0CT0gcjhhNzc3OF9jb21wYXRfZHQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3NzkuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCmluZGV4IDEzNjA3OGEuLjYxNTZkMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc3OS5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTIsMTQgKzQ4LDE0IEBACiAjaW5jbHVkZSAicjhhNzc3OS5oIgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHI4YTc3NzlfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogMk0gZW50aXR5IG1hcCBmb3IgMHhmMDAwMDAwMCAoTVBDT1JFKSAqLworCS8qIDJNIGlkZW50aXR5IG1hcHBpbmcgZm9yIDB4ZjAwMDAwMDAgKE1QQ09SRSkgKi8KIAl7CiAJCS52aXJ0dWFsCT0gMHhmMDAwMDAwMCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4ZjAwMDAwMDApLAogCQkubGVuZ3RoCQk9IFNaXzJNLAogCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECiAJfSwKLQkvKiAxNk0gZW50aXR5IG1hcCBmb3IgMHhmZXh4eHh4eCAoRE1BQy1TL0hQQlJFRy9JTlRDMi9MUkFNL0RCU0MpICovCisJLyogMTZNIGlkZW50aXR5IG1hcHBpbmcgZm9yIDB4ZmV4eHh4eHggKERNQUMtUy9IUEJSRUcvSU5UQzIvTFJBTS9EQlNDKSAqLwogCXsKIAkJLnZpcnR1YWwJPSAweGZlMDAwMDAwLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oMHhmZTAwMDAwMCksCkBAIC03MCw2ICs2Niw3IEBACiAKIHZvaWQgX19pbml0IHI4YTc3NzlfbWFwX2lvKHZvaWQpCiB7CisJZGVidWdfbGxfaW9faW5pdCgpOwogCWlvdGFibGVfaW5pdChyOGE3Nzc5X2lvX2Rlc2MsIEFSUkFZX1NJWkUocjhhNzc3OV9pb19kZXNjKSk7CiB9CiAKQEAgLTY4Myw3ICs2ODAsNyBAQAogCiAJLyogRWFybHkgc2VyaWFsIGNvbnNvbGUgc2V0dXAgaXMgbm90IGluY2x1ZGVkIGhlcmUgZHVlIHRvCiAJICogbWVtb3J5IG1hcCBjb2xsaXNpb25zLiBUaGUgU0NJRiBzZXJpYWwgcG9ydHMgaW4gcjhhNzc3OQotCSAqIGFyZSBkaWZmaWN1bHQgdG8gZW50aXR5IG1hcCAxOjEgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIHRoZQorCSAqIGFyZSBkaWZmaWN1bHQgdG8gaWRlbnRpdHkgbWFwIDE6MSBkdWUgdG8gY29sbGlzaW9uIHdpdGggdGhlCiAJICogdmlydHVhbCBtZW1vcnkgcmFuZ2UgdXNlZCBieSB0aGUgY29oZXJlbnQgRE1BIGNvZGUgb24gQVJNLgogCSAqCiAJICogQW55b25lIHdhbnRpbmcgdG8gZGVidWcgZWFybHkgY2FuIHJlbW92ZSBVUEZfSU9SRU1BUCBmcm9tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3OTAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MC5jCmluZGV4IDg3N2ZkZWIuLmVjN2Q5N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MC5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcjhhNzc5MS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKaW5kZXggMzVkNzg2My4uZWY4ZWIzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkxLmMKQEAgLTEzLDE5OCArMTMsMTYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2dwaW8tcmNhci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaXJxLXJlbmVzYXMtaXJxYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImlycXMuaCIKICNpbmNsdWRlICJyOGE3NzkxLmgiCiAjaW5jbHVkZSAicmNhci1nZW4yLmgiCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgcGZjX3Jlc291cmNlc1tdIF9faW5pdGNvbnN0ID0gewotCURFRklORV9SRVNfTUVNKDB4ZTYwNjAwMDAsIDB4MjUwKSwKLX07Ci0KLSNkZWZpbmUgcjhhNzc5MV9yZWdpc3Rlcl9wZmMoKQkJCQkJCVwKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJwZmMtcjhhNzc5MSIsIC0xLCBwZmNfcmVzb3VyY2VzLCBcCi0JCQkJCUFSUkFZX1NJWkUocGZjX3Jlc291cmNlcykpCi0KLSNkZWZpbmUgUjhBNzc5MV9HUElPKGlkeCwgYmFzZSwgbnIpCQkJCQlcCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIHI4YTc3OTFfZ3BpbyMjaWR4IyNfcmVzb3VyY2VzW10gX19pbml0Y29uc3QgPSB7IFwKLQlERUZJTkVfUkVTX01FTSgoYmFzZSksIDB4NTApLAkJCQkJXAotCURFRklORV9SRVNfSVJRKGdpY19zcGkoNCArIChpZHgpKSksCQkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvX3JjYXJfY29uZmlnCQkJCQlcCi1yOGE3NzkxX2dwaW8jI2lkeCMjX3BsYXRmb3JtX2RhdGEgX19pbml0Y29uc3QgPSB7CQkJXAotCS5ncGlvX2Jhc2UJPSAzMiAqIChpZHgpLAkJCQkJXAotCS5pcnFfYmFzZQk9IDAsCQkJCQkJXAotCS5udW1iZXJfb2ZfcGlucwk9IChuciksCQkJCQkJXAotCS5wY3RsX25hbWUJPSAicGZjLXI4YTc3OTEiLAkJCQlcCi0JLmhhc19ib3RoX2VkZ2VfdHJpZ2dlciA9IDEsCQkJCQlcCi19OwkJCQkJCQkJCVwKLQotUjhBNzc5MV9HUElPKDAsIDB4ZTYwNTAwMDAsIDMyKTsKLVI4QTc3OTFfR1BJTygxLCAweGU2MDUxMDAwLCAzMik7Ci1SOEE3NzkxX0dQSU8oMiwgMHhlNjA1MjAwMCwgMzIpOwotUjhBNzc5MV9HUElPKDMsIDB4ZTYwNTMwMDAsIDMyKTsKLVI4QTc3OTFfR1BJTyg0LCAweGU2MDU0MDAwLCAzMik7Ci1SOEE3NzkxX0dQSU8oNSwgMHhlNjA1NTAwMCwgMzIpOwotUjhBNzc5MV9HUElPKDYsIDB4ZTYwNTU0MDAsIDMyKTsKLVI4QTc3OTFfR1BJTyg3LCAweGU2MDU1ODAwLCAyNik7Ci0KLSNkZWZpbmUgcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKGlkeCkJCQkJCVwKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgImdwaW9fcmNhciIsIGlkeCwJXAotCQlyOGE3NzkxX2dwaW8jI2lkeCMjX3Jlc291cmNlcywJCQkJXAotCQlBUlJBWV9TSVpFKHI4YTc3OTFfZ3BpbyMjaWR4IyNfcmVzb3VyY2VzKSwJCVwKLQkJJnI4YTc3OTFfZ3BpbyMjaWR4IyNfcGxhdGZvcm1fZGF0YSwJCQlcCi0JCXNpemVvZihyOGE3NzkxX2dwaW8jI2lkeCMjX3BsYXRmb3JtX2RhdGEpKQotCi12b2lkIF9faW5pdCByOGE3NzkxX3Bpbm11eF9pbml0KHZvaWQpCi17Ci0JcjhhNzc5MV9yZWdpc3Rlcl9wZmMoKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX2dwaW8oMCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKDEpOwotCXI4YTc3OTFfcmVnaXN0ZXJfZ3BpbygyKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX2dwaW8oMyk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKDQpOwotCXI4YTc3OTFfcmVnaXN0ZXJfZ3Bpbyg1KTsKLQlyOGE3NzkxX3JlZ2lzdGVyX2dwaW8oNik7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9ncGlvKDcpOwotfQotCi0jZGVmaW5lIF9fUjhBNzc5MV9TQ0lGKHNjaWZfdHlwZSwgaW5kZXgsIGJhc2VhZGRyLCBpcnEpCQkJXAotc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYjI2luZGV4IyNfcGxhdGZvcm1fZGF0YSA9IHsJCVwKLQkudHlwZQkJPSBzY2lmX3R5cGUsCQkJCQlcCi0JLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX0lPUkVNQVAsCQlcCi0JLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUsCQkJCVwKLX07CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzY2lmIyNpbmRleCMjX3Jlc291cmNlc1tdID0gewkJCVwKLQlERUZJTkVfUkVTX01FTShiYXNlYWRkciwgMHgxMDApLAkJCQlcCi0JREVGSU5FX1JFU19JUlEoaXJxKSwJCQkJCQlcCi19Ci0KLSNkZWZpbmUgUjhBNzc5MV9TQ0lGKGluZGV4LCBiYXNlYWRkciwgaXJxKQkJCQlcCi0JX19SOEE3NzkxX1NDSUYoUE9SVF9TQ0lGLCBpbmRleCwgYmFzZWFkZHIsIGlycSkKLQotI2RlZmluZSBSOEE3NzkxX1NDSUZBKGluZGV4LCBiYXNlYWRkciwgaXJxKQkJCQlcCi0JX19SOEE3NzkxX1NDSUYoUE9SVF9TQ0lGQSwgaW5kZXgsIGJhc2VhZGRyLCBpcnEpCi0KLSNkZWZpbmUgUjhBNzc5MV9TQ0lGQihpbmRleCwgYmFzZWFkZHIsIGlycSkJCQkJXAotCV9fUjhBNzc5MV9TQ0lGKFBPUlRfU0NJRkIsIGluZGV4LCBiYXNlYWRkciwgaXJxKQotCi1SOEE3NzkxX1NDSUZBKDAsICAweGU2YzQwMDAwLCBnaWNfc3BpKDE0NCkpOyAvKiBTQ0lGQTAgKi8KLVI4QTc3OTFfU0NJRkEoMSwgIDB4ZTZjNTAwMDAsIGdpY19zcGkoMTQ1KSk7IC8qIFNDSUZBMSAqLwotUjhBNzc5MV9TQ0lGQigyLCAgMHhlNmMyMDAwMCwgZ2ljX3NwaSgxNDgpKTsgLyogU0NJRkIwICovCi1SOEE3NzkxX1NDSUZCKDMsICAweGU2YzMwMDAwLCBnaWNfc3BpKDE0OSkpOyAvKiBTQ0lGQjEgKi8KLVI4QTc3OTFfU0NJRkIoNCwgIDB4ZTZjZTAwMDAsIGdpY19zcGkoMTUwKSk7IC8qIFNDSUZCMiAqLwotUjhBNzc5MV9TQ0lGQSg1LCAgMHhlNmM2MDAwMCwgZ2ljX3NwaSgxNTEpKTsgLyogU0NJRkEyICovCi1SOEE3NzkxX1NDSUYoNiwgICAweGU2ZTYwMDAwLCBnaWNfc3BpKDE1MikpOyAvKiBTQ0lGMCAqLwotUjhBNzc5MV9TQ0lGKDcsICAgMHhlNmU2ODAwMCwgZ2ljX3NwaSgxNTMpKTsgLyogU0NJRjEgKi8KLVI4QTc3OTFfU0NJRig4LCAgIDB4ZTZlNTgwMDAsIGdpY19zcGkoMjIpKTsgLyogU0NJRjIgKi8KLVI4QTc3OTFfU0NJRig5LCAgIDB4ZTZlYTgwMDAsIGdpY19zcGkoMjMpKTsgLyogU0NJRjMgKi8KLVI4QTc3OTFfU0NJRigxMCwgIDB4ZTZlZTAwMDAsIGdpY19zcGkoMjQpKTsgLyogU0NJRjQgKi8KLVI4QTc3OTFfU0NJRigxMSwgIDB4ZTZlZTgwMDAsIGdpY19zcGkoMjUpKTsgLyogU0NJRjUgKi8KLVI4QTc3OTFfU0NJRkEoMTIsIDB4ZTZjNzAwMDAsIGdpY19zcGkoMjkpKTsgLyogU0NJRkEzICovCi1SOEE3NzkxX1NDSUZBKDEzLCAweGU2Yzc4MDAwLCBnaWNfc3BpKDMwKSk7IC8qIFNDSUZBNCAqLwotUjhBNzc5MV9TQ0lGQSgxNCwgMHhlNmM4MDAwMCwgZ2ljX3NwaSgzMSkpOyAvKiBTQ0lGQTUgKi8KLQotI2RlZmluZSByOGE3NzkxX3JlZ2lzdGVyX3NjaWYoaW5kZXgpCQkJCQkgICAgICAgXAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAic2gtc2NpIiwgaW5kZXgsICAJICAgICAgIFwKLQkJCQkJICBzY2lmIyNpbmRleCMjX3Jlc291cmNlcywJICAgICAgIFwKLQkJCQkJICBBUlJBWV9TSVpFKHNjaWYjI2luZGV4IyNfcmVzb3VyY2VzKSwgXAotCQkJCQkgICZzY2lmIyNpbmRleCMjX3BsYXRmb3JtX2RhdGEsCSAgICAgICBcCi0JCQkJCSAgc2l6ZW9mKHNjaWYjI2luZGV4IyNfcGxhdGZvcm1fZGF0YSkpCi0KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDBfcGxhdGZvcm1fZGF0YSA9IHsKLQkuY2hhbm5lbHNfbWFzayA9IDB4NjAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDBfcmVzb3VyY2VzW10gPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhmZmNhMDAwMCwgMHgxMDA0KSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDE0MikpLAotfTsKLQotI2RlZmluZSByOGE3NzkxX3JlZ2lzdGVyX2NtdChpZHgpCQkJCQlcCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsICJzaC1jbXQtNDgtZ2VuMiIsCVwKLQkJCQkJICBpZHgsIGNtdCMjaWR4IyNfcmVzb3VyY2VzLAlcCi0JCQkJCSAgQVJSQVlfU0laRShjbXQjI2lkeCMjX3Jlc291cmNlcyksIFwKLQkJCQkJICAmY210IyNpZHgjI19wbGF0Zm9ybV9kYXRhLAlcCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBzaF90aW1lcl9jb25maWcpKQotCi1zdGF0aWMgc3RydWN0IHJlbmVzYXNfaXJxY19jb25maWcgaXJxYzBfZGF0YSA9IHsKLQkuaXJxX2Jhc2UgPSBpcnFfcGluKDApLCAvKiBJUlEwIC0+IElSUTkgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJxYzBfcmVzb3VyY2VzW10gPSB7Ci0JREVGSU5FX1JFU19NRU0oMHhlNjFjMDAwMCwgMHgyMDApLCAvKiBJUlFDIEV2ZW50IERldGVjdG9yIEJsb2NrXzAgKi8KLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDApKSwgLyogSVJRMCAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMSkpLCAvKiBJUlExICovCi0JREVGSU5FX1JFU19JUlEoZ2ljX3NwaSgyKSksIC8qIElSUTIgKi8KLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDMpKSwgLyogSVJRMyAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTIpKSwgLyogSVJRNCAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTMpKSwgLyogSVJRNSAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTQpKSwgLyogSVJRNiAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTUpKSwgLyogSVJRNyAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTYpKSwgLyogSVJROCAqLwotCURFRklORV9SRVNfSVJRKGdpY19zcGkoMTcpKSwgLyogSVJROSAqLwotfTsKLQotI2RlZmluZSByOGE3NzkxX3JlZ2lzdGVyX2lycWMoaWR4KQkJCQkJXAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YShOVUxMLCAicmVuZXNhc19pcnFjIiwJCVwKLQkJCQkJICBpZHgsIGlycWMjI2lkeCMjX3Jlc291cmNlcywJXAotCQkJCQkgIEFSUkFZX1NJWkUoaXJxYyMjaWR4IyNfcmVzb3VyY2VzKSwgXAotCQkJCQkgICZpcnFjIyNpZHgjI19kYXRhLAkJXAotCQkJCQkgIHNpemVvZihzdHJ1Y3QgcmVuZXNhc19pcnFjX2NvbmZpZykpCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGhlcm1hbF9yZXNvdXJjZXNbXSBfX2luaXRjb25zdCA9IHsKLQlERUZJTkVfUkVTX01FTSgweGU2MWYwMDAwLCAweDE0KSwKLQlERUZJTkVfUkVTX01FTSgweGU2MWYwMTAwLCAweDM4KSwKLQlERUZJTkVfUkVTX0lSUShnaWNfc3BpKDY5KSksCi19OwotCi0jZGVmaW5lIHI4YTc3OTFfcmVnaXN0ZXJfdGhlcm1hbCgpCQkJCQlcCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicmNhcl90aGVybWFsIiwgLTEsCQlcCi0JCQkJCXRoZXJtYWxfcmVzb3VyY2VzLAkJXAotCQkJCQlBUlJBWV9TSVpFKHRoZXJtYWxfcmVzb3VyY2VzKSkKLQotdm9pZCBfX2luaXQgcjhhNzc5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQotewotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigwKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMSk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDIpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigzKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoNCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDUpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZig2KTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoNyk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDgpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZig5KTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMTApOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigxMSk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9zY2lmKDEyKTsKLQlyOGE3NzkxX3JlZ2lzdGVyX3NjaWYoMTMpOwotCXI4YTc3OTFfcmVnaXN0ZXJfc2NpZigxNCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9jbXQoMCk7Ci0JcjhhNzc5MV9yZWdpc3Rlcl9pcnFjKDApOwotCXI4YTc3OTFfcmVnaXN0ZXJfdGhlcm1hbCgpOwotfQotCi0jaWZkZWYgQ09ORklHX1VTRV9PRgogc3RhdGljIGNvbnN0IGNoYXIgKnI4YTc3OTFfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGRhdGEgPSB7CiAJInJlbmVzYXMscjhhNzc5MSIsCiAJTlVMTCwKQEAgLTIxOCw0ICszNiwzIEBACiAJLnJlc2VydmUJPSByY2FyX2dlbjJfcmVzZXJ2ZSwKIAkuZHRfY29tcGF0CT0gcjhhNzc5MV9ib2FyZHNfY29tcGF0X2R0LAogTUFDSElORV9FTkQKLSNlbmRpZiAvKiBDT05GSUdfVVNFX09GICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yY2FyLWdlbjIuYwppbmRleCA0MmQ1YjQzLi4zZGQ2ZWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcmNhci1nZW4yLmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEzICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgogICogQ29weXJpZ2h0IChDKSAyMDEzICBNYWdudXMgRGFtbQorICogQ29weXJpZ2h0IChDKSAyMDE0ICBVbHJpY2ggSGVjaHQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEyLDEwICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Nsay9zaG1vYmlsZS5oPgpAQCAtMjQsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1jb250aWd1b3VzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlICJjb21tb24uaCIKQEAgLTU0LDM3ICs1Miw2MSBAQAogewogI2lmIGRlZmluZWQoQ09ORklHX0FSTV9BUkNIX1RJTUVSKSB8fCBkZWZpbmVkKENPTkZJR19DT01NT05fQ0xLKQogCXUzMiBtb2RlID0gcmNhcl9nZW4yX3JlYWRfbW9kZV9waW5zKCk7CisJYm9vbCBpc19lMiA9IChib29sKW9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCSJyZW5lc2FzLHI4YTc3OTQiKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19BUk1fQVJDSF9USU1FUgogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlpbnQgZXh0YWxfbWh6ID0gMDsKIAl1MzIgZnJlcTsKIAotCS8qIEF0IExpbnV4IGJvb3QgdGltZSB0aGUgcjhhNzc5MCBhcmNoIHRpbWVyIGNvbWVzIHVwCi0JICogd2l0aCB0aGUgY291bnRlciBkaXNhYmxlZC4gTW9yZW92ZXIsIGl0IG1heSBhbHNvIHJlcG9ydAotCSAqIGEgcG90ZW50aWFsbHkgaW5jb3JyZWN0IGZpeGVkIDEzIE1IeiBmcmVxdWVuY3kuIFRvIGJlCi0JICogY29ycmVjdCB0aGVzZSByZWdpc3RlcnMgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHVzZSB0aGUKLQkgKiBmcmVxdWVuY3kgRVhUQUwgLyAyIHdoaWNoIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBNRCBwaW5zLgotCSAqLworCWlmIChpc19lMikgeworCQlmcmVxID0gMjYwMDAwMDAwIC8gODsJLyogWlMgLyA4ICovCisJCS8qIENOVFZPRkYgaGFzIHRvIGJlIGluaXRpYWxpemVkIGVpdGhlciBmcm9tIG5vbi1zZWN1cmUKKwkJICogSHlwZXJ2aXNvciBtb2RlIG9yIHNlY3VyZSBNb25pdG9yIG1vZGUgd2l0aCBTQ1IuTlM9PTEuCisJCSAqIElmIFRydXN0Wm9uZSBpcyBlbmFibGVkIHRoZW4gaXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlCisJCSAqIHNlY3VyZSBjb2RlLgorCQkgKi8KKwkJYXNtIHZvbGF0aWxlKAorCQkiCWNwcwkweDE2XG4iCisJCSIJbXJjCXAxNSwgMCwgcjEsIGMxLCBjMSwgMFxuIgorCQkiCW9ycglyMCwgcjEsICMxXG4iCisJCSIJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMSwgMFxuIgorCQkiCWlzYlxuIgorCQkiCW1vdglyMCwgIzBcbiIKKwkJIgltY3JyCXAxNSwgNCwgcjAsIHIwLCBjMTRcbiIKKwkJIglpc2JcbiIKKwkJIgltY3IJcDE1LCAwLCByMSwgYzEsIGMxLCAwXG4iCisJCSIJaXNiXG4iCisJCSIJY3BzCTB4MTNcbiIKKwkJCTogOiA6ICJyMCIsICJyMSIpOworCX0gZWxzZSB7CisJCS8qIEF0IExpbnV4IGJvb3QgdGltZSB0aGUgcjhhNzc5MCBhcmNoIHRpbWVyIGNvbWVzIHVwCisJCSAqIHdpdGggdGhlIGNvdW50ZXIgZGlzYWJsZWQuIE1vcmVvdmVyLCBpdCBtYXkgYWxzbyByZXBvcnQKKwkJICogYSBwb3RlbnRpYWxseSBpbmNvcnJlY3QgZml4ZWQgMTMgTUh6IGZyZXF1ZW5jeS4gVG8gYmUKKwkJICogY29ycmVjdCB0aGVzZSByZWdpc3RlcnMgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHVzZSB0aGUKKwkJICogZnJlcXVlbmN5IEVYVEFMIC8gMiB3aGljaCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgTUQgcGlucy4KKwkJICovCiAKLQlzd2l0Y2ggKG1vZGUgJiAoTUQoMTQpIHwgTUQoMTMpKSkgewotCWNhc2UgMDoKLQkJZXh0YWxfbWh6ID0gMTU7Ci0JCWJyZWFrOwotCWNhc2UgTUQoMTMpOgotCQlleHRhbF9taHogPSAyMDsKLQkJYnJlYWs7Ci0JY2FzZSBNRCgxNCk6Ci0JCWV4dGFsX21oeiA9IDI2OwotCQlicmVhazsKLQljYXNlIE1EKDEzKSB8IE1EKDE0KToKLQkJZXh0YWxfbWh6ID0gMzA7Ci0JCWJyZWFrOworCQlzd2l0Y2ggKG1vZGUgJiAoTUQoMTQpIHwgTUQoMTMpKSkgeworCQljYXNlIDA6CisJCQlleHRhbF9taHogPSAxNTsKKwkJCWJyZWFrOworCQljYXNlIE1EKDEzKToKKwkJCWV4dGFsX21oeiA9IDIwOworCQkJYnJlYWs7CisJCWNhc2UgTUQoMTQpOgorCQkJZXh0YWxfbWh6ID0gMjY7CisJCQlicmVhazsKKwkJY2FzZSBNRCgxMykgfCBNRCgxNCk6CisJCQlleHRhbF9taHogPSAzMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogVGhlIGFyY2ggdGltZXIgZnJlcXVlbmN5IGVxdWFscyBFWFRBTCAvIDIgKi8KKwkJZnJlcSA9IGV4dGFsX21oeiAqICgxMDAwMDAwIC8gMik7CiAJfQogCi0JLyogVGhlIGFyY2ggdGltZXIgZnJlcXVlbmN5IGVxdWFscyBFWFRBTCAvIDIgKi8KLQlmcmVxID0gZXh0YWxfbWh6ICogKDEwMDAwMDAgLyAyKTsKLQogCS8qIFJlbWFwICJhcm1nY250IGFkZHJlc3MgbWFwIiBzcGFjZSAqLwogCWJhc2UgPSBpb3JlbWFwKDB4ZTYwODAwMDAsIFBBR0VfU0laRSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Mi5jCmluZGV4IGQ2NDZjOGQuLjQ1OGEyY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQ3LDcgKzQzLDcgQEAKICNpbmNsdWRlICJzaDczNzIuaCIKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzaDczNzJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogY3JlYXRlIGEgMToxIGVudGl0eSBtYXAgZm9yIDB4ZTZ4eHh4eHgKKwkvKiBjcmVhdGUgYSAxOjEgaWRlbnRpdHkgbWFwcGluZyBmb3IgMHhlNnh4eHh4eAogCSAqIHVzZWQgYnkgQ1BHQSwgSU5UQyBhbmQgUEZDLgogCSAqLwogCXsKQEAgLTYwLDYgKzU2LDcgQEAKIAogdm9pZCBfX2luaXQgc2g3MzcyX21hcF9pbyh2b2lkKQogeworCWRlYnVnX2xsX2lvX2luaXQoKTsKIAlpb3RhYmxlX2luaXQoc2g3MzcyX2lvX2Rlc2MsIEFSUkFZX1NJWkUoc2g3MzcyX2lvX2Rlc2MpKTsKIH0KIApAQCAtMTAxMiw2ICsxMDA5LDcgQEAKIAkuaW5pdF9pcnEJPSBzaDczNzJfaW5pdF9pcnEsCiAJLmhhbmRsZV9pcnEJPSBzaG1vYmlsZV9oYW5kbGVfaXJxX2ludGMsCiAJLmluaXRfbWFjaGluZQk9IHNoNzM3Ml9hZGRfc3RhbmRhcmRfZGV2aWNlc19kdCwKKwkuaW5pdF9sYXRlCT0gc2htb2JpbGVfaW5pdF9sYXRlLAogCS5kdF9jb21wYXQJPSBzaDczNzJfYm9hcmRzX2NvbXBhdF9kdCwKIE1BQ0hJTkVfRU5ECiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzNhMC5jCmluZGV4IDMyODY1N2QuLjkzZWJlMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3M2EwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczYTAuYwpAQCAtMTMsMTAgKzEzLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQ2LDcgKzQyLDcgQEAKICNpbmNsdWRlICJzaDczYTAuaCIKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzaDczYTBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogY3JlYXRlIGEgMToxIGVudGl0eSBtYXAgZm9yIDB4ZTZ4eHh4eHgKKwkvKiBjcmVhdGUgYSAxOjEgaWRlbnRpdHkgbWFwcGluZyBmb3IgMHhlNnh4eHh4eAogCSAqIHVzZWQgYnkgQ1BHQSwgSU5UQyBhbmQgUEZDLgogCSAqLwogCXsKQEAgLTU5LDYgKzU1LDcgQEAKIAogdm9pZCBfX2luaXQgc2g3M2EwX21hcF9pbyh2b2lkKQogeworCWRlYnVnX2xsX2lvX2luaXQoKTsKIAlpb3RhYmxlX2luaXQoc2g3M2EwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoc2g3M2EwX2lvX2Rlc2MpKTsKIH0KIApAQCAtNzYwLDE3ICs3NTcsMTIgQEAKIAkJCSAgICBBUlJBWV9TSVpFKHNoNzNhMF9sYXRlX2RldmljZXMpKTsKIH0KIAotdm9pZCBfX2luaXQgc2g3M2EwX2luaXRfZGVsYXkodm9pZCkKLXsKLQlzaG1vYmlsZV9pbml0X2RlbGF5KCk7Ci19Ci0KIC8qIGRvIG5vdGhpbmcgZm9yICFDT05GSUdfU01QIG9yICFDT05GSUdfSEFWRV9UV0QgKi8KIHZvaWQgX19pbml0IF9fd2VhayBzaDczYTBfcmVnaXN0ZXJfdHdkKHZvaWQpIHsgfQogCiB2b2lkIF9faW5pdCBzaDczYTBfZWFybHl0aW1lcl9pbml0KHZvaWQpCiB7Ci0Jc2g3M2EwX2luaXRfZGVsYXkoKTsKKwlzaG1vYmlsZV9pbml0X2RlbGF5KCk7CiAJc2g3M2EwX2Nsb2NrX2luaXQoKTsKIAlzaG1vYmlsZV9lYXJseXRpbWVyX2luaXQoKTsKIAlzaDczYTBfcmVnaXN0ZXJfdHdkKCk7CkBAIC03OTUsNiArNzg3LDEzIEBACiAJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwogfQogCisjZGVmaW5lIFJFU0NOVDIgSU9NRU0oMHhlNjE4ODAyMCkKK3N0YXRpYyB2b2lkIHNoNzNhMF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCS8qIERvIHNvZnQgcG93ZXIgb24gcmVzZXQgKi8KKwl3cml0ZWwoKDEgPDwgMzEpLCBSRVNDTlQyKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKnNoNzNhMF9ib2FyZHNfY29tcGF0X2R0W10gX19pbml0ZGF0YSA9IHsKIAkicmVuZXNhcyxzaDczYTAiLAogCU5VTEwsCkBAIC04MDMsOSArODAyLDEwIEBACiBEVF9NQUNISU5FX1NUQVJUKFNINzNBMF9EVCwgIkdlbmVyaWMgU0g3M0EwIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpIikKIAkuc21wCQk9IHNtcF9vcHMoc2g3M2EwX3NtcF9vcHMpLAogCS5tYXBfaW8JCT0gc2g3M2EwX21hcF9pbywKLQkuaW5pdF9lYXJseQk9IHNoNzNhMF9pbml0X2RlbGF5LAorCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKIAkuaW5pdF9tYWNoaW5lCT0gc2g3M2EwX2FkZF9zdGFuZGFyZF9kZXZpY2VzX2R0LAogCS5pbml0X2xhdGUJPSBzaG1vYmlsZV9pbml0X2xhdGUsCisJLnJlc3RhcnQJPSBzaDczYTBfcmVzdGFydCwKIAkuZHRfY29tcGF0CT0gc2g3M2EwX2JvYXJkc19jb21wYXRfZHQsCiBNQUNISU5FX0VORAogI2VuZGlmIC8qIENPTkZJR19VU0VfT0YgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2g3M2EwLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NoNzNhMC5oCmluZGV4IDM1OWI1ODIuLmYwMzdjNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2g3M2EwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zaDczYTAuaApAQCAtNzEsNyArNzEsNiBAQAogI2RlZmluZSBTSDczQTBfUElOVDBfSVJRKGlycSkgKChpcnEpICsgNzAwKQogI2RlZmluZSBTSDczQTBfUElOVDFfSVJRKGlycSkgKChpcnEpICsgNzMyKQogCi1leHRlcm4gdm9pZCBzaDczYTBfaW5pdF9kZWxheSh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzNhMF9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzNhMF9pbml0X2lycV9kdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzNhMF9tYXBfaW8odm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NsZWVwLXNoNzM3Mi5TIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbGVlcC1zaDczNzIuUwppbmRleCA5NzgyODYyLi4xNDZiOGRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NsZWVwLXNoNzM3Mi5TCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2xlZXAtc2g3MzcyLlMKQEAgLTIyLDExICsyMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtZW1ldjIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLWVtZXYyLmMKaW5kZXggNmZmMWRmMS4uYmFmZjNiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtZW1ldjIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1lbWV2Mi5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc3OS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc3OS5jCmluZGV4IDMxMDBlMzUuLjNmNzYxZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXI4YTc3NzkuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3Nzc5LmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkwLmMKaW5kZXggMjMxMTY5NC4uOWMzZGExMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc5MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXI4YTc3OTAuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicGxhdHNtcC1hcG11LmgiCiAjaW5jbHVkZSAicG0tcmNhci5oIgogI2luY2x1ZGUgInI4YTc3OTAuaCIKIApAQCAtMzQsMTAgKzM1LDIzIEBACiAJLmlzcl9iaXQgPSAyMSwgLyogQ0E3LVNDVSAqLwogfTsKIAorc3RhdGljIHN0cnVjdCByY2FyX2FwbXVfY29uZmlnIHI4YTc3OTBfYXBtdV9jb25maWdbXSA9IHsKKwl7CisJCS5pb21lbSA9IERFRklORV9SRVNfTUVNKDB4ZTYxNTIwMDAsIDB4ODgpLAorCQkuY3B1cyA9IHsgMCwgMSwgMiwgMyB9LAorCX0sCisJeworCQkuaW9tZW0gPSBERUZJTkVfUkVTX01FTSgweGU2MTUxMDAwLCAweDg4KSwKKwkJLmNwdXMgPSB7IDB4MTAwLCAweDAxMDEsIDB4MTAyLCAweDEwMyB9LAorCX0KK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCByOGE3NzkwX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewogCS8qIGxldCBBUE1VIGNvZGUgaW5zdGFsbCBkYXRhIHJlbGF0ZWQgdG8gc2htb2JpbGVfYm9vdF92ZWN0b3IgKi8KLQlzaG1vYmlsZV9zbXBfYXBtdV9wcmVwYXJlX2NwdXMobWF4X2NwdXMpOworCXNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyhtYXhfY3B1cywKKwkJCQkgICAgICAgcjhhNzc5MF9hcG11X2NvbmZpZywKKwkJCQkgICAgICAgQVJSQVlfU0laRShyOGE3NzkwX2FwbXVfY29uZmlnKSk7CiAKIAkvKiB0dXJuIG9uIHBvd2VyIHRvIFNDVSAqLwogCXI4YTc3OTBfcG1faW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc5MS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtcjhhNzc5MS5jCmluZGV4IGY3NDMzODYuLjdlNDllMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXI4YTc3OTEuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1yOGE3NzkxLmMKQEAgLTIxLDEzICsyMSwyMyBAQAogI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicGxhdHNtcC1hcG11LmgiCiAjaW5jbHVkZSAicjhhNzc5MS5oIgogI2luY2x1ZGUgInJjYXItZ2VuMi5oIgogCitzdGF0aWMgc3RydWN0IHJjYXJfYXBtdV9jb25maWcgcjhhNzc5MV9hcG11X2NvbmZpZ1tdID0geworCXsKKwkJLmlvbWVtID0gREVGSU5FX1JFU19NRU0oMHhlNjE1MjAwMCwgMHg4OCksCisJCS5jcHVzID0geyAwLCAxIH0sCisJfQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHI4YTc3OTFfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CiAJLyogbGV0IEFQTVUgY29kZSBpbnN0YWxsIGRhdGEgcmVsYXRlZCB0byBzaG1vYmlsZV9ib290X3ZlY3RvciAqLwotCXNobW9iaWxlX3NtcF9hcG11X3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7CisJc2htb2JpbGVfc21wX2FwbXVfcHJlcGFyZV9jcHVzKG1heF9jcHVzLAorCQkJCSAgICAgICByOGE3NzkxX2FwbXVfY29uZmlnLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKHI4YTc3OTFfYXBtdV9jb25maWcpKTsKIAogCXI4YTc3OTFfcG1faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1zaDczYTAuYwppbmRleCAyMmQ4Zjg3Li5jMTZkYmZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1zaDczYTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NtcC1zaDczYTAuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYwppbmRleCA4N2M2YmUxLi5mMWQwMjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS90aW1lci5jCkBAIC0xMiwxMSArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CkBAIC00NSw2ICs0MCw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpucCwgKmNwdXM7CiAJYm9vbCBpc19hN19hOF9hOSA9IGZhbHNlOwogCWJvb2wgaXNfYTE1ID0gZmFsc2U7CisJYm9vbCBoYXNfYXJjaF90aW1lciA9IGZhbHNlOwogCXUzMiBtYXhfZnJlcSA9IDA7CiAKIAljcHVzID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jcHVzIik7CkBAIC01NywxMiArNTMsMTYgQEAKIAkJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNsb2NrLWZyZXF1ZW5jeSIsICZmcmVxKSkKIAkJCW1heF9mcmVxID0gbWF4KG1heF9mcmVxLCBmcmVxKTsKIAotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhcm0sY29ydGV4LWE3IikgfHwKLQkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYXJtLGNvcnRleC1hOCIpIHx8Ci0JCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTkiKSkKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYXJtLGNvcnRleC1hOCIpIHx8CisJCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTkiKSkgewogCQkJaXNfYTdfYThfYTkgPSB0cnVlOwotCQllbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTE1IikpCisJCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhcm0sY29ydGV4LWE3IikpIHsKKwkJCWlzX2E3X2E4X2E5ID0gdHJ1ZTsKKwkJCWhhc19hcmNoX3RpbWVyID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFybSxjb3J0ZXgtYTE1IikpIHsKIAkJCWlzX2ExNSA9IHRydWU7CisJCQloYXNfYXJjaF90aW1lciA9IHRydWU7CisJCX0KIAl9CiAKIAlvZl9ub2RlX3B1dChjcHVzKTsKQEAgLTcwLDEwICs3MCwxMiBAQAogCWlmICghbWF4X2ZyZXEpCiAJCXJldHVybjsKIAotCWlmIChpc19hN19hOF9hOSkKLQkJc2htb2JpbGVfc2V0dXBfZGVsYXlfaHoobWF4X2ZyZXEsIDEsIDMpOwotCWVsc2UgaWYgKGlzX2ExNSAmJiAhSVNfRU5BQkxFRChDT05GSUdfQVJNX0FSQ0hfVElNRVIpKQotCQlzaG1vYmlsZV9zZXR1cF9kZWxheV9oeihtYXhfZnJlcSwgMiwgNCk7CisJaWYgKCFoYXNfYXJjaF90aW1lciB8fCAhSVNfRU5BQkxFRChDT05GSUdfQVJNX0FSQ0hfVElNRVIpKSB7CisJCWlmIChpc19hN19hOF9hOSkKKwkJCXNobW9iaWxlX3NldHVwX2RlbGF5X2h6KG1heF9mcmVxLCAxLCAzKTsKKwkJZWxzZSBpZiAoaXNfYTE1KQorCQkJc2htb2JpbGVfc2V0dXBfZGVsYXlfaHoobWF4X2ZyZXEsIDIsIDQpOworCX0KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNobW9iaWxlX2xhdGVfdGltZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1zb2NmcGdhL2NvcmUuaAppbmRleCA2MGM0NDNkLi40ODNjYjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc29jZnBnYS9jb3JlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgX19NQUNIX0NPUkVfSAogCiAjZGVmaW5lIFNPQ0ZQR0FfUlNUTUdSX0NUUkwJMHgwNAorI2RlZmluZSBTT0NGUEdBX1JTVE1HUl9NT0RNUFVSU1QJMHgxMAogI2RlZmluZSBTT0NGUEdBX1JTVE1HUl9NT0RQRVJSU1QJMHgxNAogI2RlZmluZSBTT0NGUEdBX1JTVE1HUl9CUkdNT0RSU1QJMHgxYwogCkBAIC0yOCw2ICsyOSw4IEBACiAjZGVmaW5lIFJTVE1HUl9DVFJMX1NXQ09MRFJTVFJFUQkweDEJLyogQ29sZCBSZXNldCAqLwogI2RlZmluZSBSU1RNR1JfQ1RSTF9TV1dBUk1SU1RSRVEJMHgyCS8qIFdhcm0gUmVzZXQgKi8KIAorI2RlZmluZSBSU1RNR1JfTVBVTU9EUlNUX0NQVTEJCTB4MiAgICAgLyogQ1BVMSBSZXNldCAqLworCiBleHRlcm4gdm9pZCBzb2NmcGdhX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqc29jZnBnYV9zY3VfYmFzZV9hZGRyOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1zb2NmcGdhL3BsYXRzbXAuYwppbmRleCAxNmNhOTdiLi5jNjRkODliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNvY2ZwZ2EvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc29jZnBnYS9wbGF0c21wLmMKQEAgLTM0LDE3ICszNCwyMSBAQAogCWludCB0cmFtcG9saW5lX3NpemUgPSAmc2Vjb25kYXJ5X3RyYW1wb2xpbmVfZW5kIC0gJnNlY29uZGFyeV90cmFtcG9saW5lOwogCiAJaWYgKHNvY2ZwZ2FfY3B1MXN0YXJ0X2FkZHIpIHsKKwkJLyogVGhpcyB3aWxsIHB1dCBDUFUgIzEgaW50byByZXNldC4gKi8KKwkJd3JpdGVsKFJTVE1HUl9NUFVNT0RSU1RfQ1BVMSwKKwkJICAgICAgIHJzdF9tYW5hZ2VyX2Jhc2VfYWRkciArIFNPQ0ZQR0FfUlNUTUdSX01PRE1QVVJTVCk7CisKIAkJbWVtY3B5KHBoeXNfdG9fdmlydCgwKSwgJnNlY29uZGFyeV90cmFtcG9saW5lLCB0cmFtcG9saW5lX3NpemUpOwogCi0JCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoc29jZnBnYV9zZWNvbmRhcnlfc3RhcnR1cCksCi0JCQkoc3lzX21hbmFnZXJfYmFzZV9hZGRyICsgKHNvY2ZwZ2FfY3B1MXN0YXJ0X2FkZHIgJiAweDAwMDAwMGZmKSkpOworCQl3cml0ZWwodmlydF90b19waHlzKHNvY2ZwZ2Ffc2Vjb25kYXJ5X3N0YXJ0dXApLAorCQkgICAgICAgc3lzX21hbmFnZXJfYmFzZV9hZGRyICsgKHNvY2ZwZ2FfY3B1MXN0YXJ0X2FkZHIgJiAweDAwMDAwMGZmKSk7CiAKIAkJZmx1c2hfY2FjaGVfYWxsKCk7CiAJCXNtcF93bWIoKTsKIAkJb3V0ZXJfY2xlYW5fcmFuZ2UoMCwgdHJhbXBvbGluZV9zaXplKTsKIAotCQkvKiBUaGlzIHdpbGwgcmVsZWFzZSBDUFUgIzEgb3V0IG9mIHJlc2V0LiovCi0JCV9fcmF3X3dyaXRlbCgwLCByc3RfbWFuYWdlcl9iYXNlX2FkZHIgKyAweDEwKTsKKwkJLyogVGhpcyB3aWxsIHJlbGVhc2UgQ1BVICMxIG91dCBvZiByZXNldC4gKi8KKwkJd3JpdGVsKDAsIHJzdF9tYW5hZ2VyX2Jhc2VfYWRkciArIFNPQ0ZQR0FfUlNUTUdSX01PRE1QVVJTVCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04NiwxMCArOTAsOSBAQAogICovCiBzdGF0aWMgdm9pZCBzb2NmcGdhX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKIHsKLQljcHVfZG9faWRsZSgpOwotCi0JLyogV2Ugc2hvdWxkIGhhdmUgbmV2ZXIgcmV0dXJuZWQgZnJvbSBpZGxlICovCi0JcGFuaWMoImNwdSAlZCB1bmV4cGVjdGVkbHkgZXhpdCBmcm9tIHNodXRkb3duXG4iLCBjcHUpOworCS8qIERvIFdGSS4gSWYgd2Ugd2FrZSB1cCBlYXJseSwgZ28gYmFjayBpbnRvIFdGSSAqLworCXdoaWxlICgxKQorCQljcHVfZG9faWRsZSgpOwogfQogCiBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgc29jZnBnYV9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXN0aS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zdGkvS2NvbmZpZwppbmRleCA4NzhlOWVjLi44ODI1YmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXN0aS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtc3RpL0tjb25maWcKQEAgLTQyLDQgKzQyLDE0IEBACiAJICBhbmQgb3RoZXIgZGlnaXRhbCBhdWRpby92aWRlbyBhcHBsaWNhdGlvbnMgdXNpbmcgRmxhdHRlbmVkIERldmljZQogCSAgVHJlZXMuCiAKK2NvbmZpZyBTT0NfU1RJSDQwNworCWJvb2wgIlNUaUg0MDcgU1RNaWNyb2VsZWN0cm9uaWNzIENvbnN1bWVyIEVsZWN0cm9uaWNzIGZhbWlseSIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgU1RJSDQwN19SRVNFVAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBTVE1pY3JvZWxlY3Ryb25pY3MgRGlnaXRhbCBDb25zdW1lcgorCSAgRWxlY3Ryb25pY3MgZmFtaWx5IFN0aUg0MDcgcGFydHMsIHRhcmdldHRlZCBhdCBzZXQtdG9wLWJveAorCSAgYW5kIG90aGVyIGRpZ2l0YWwgYXVkaW8vdmlkZW8gYXBwbGljYXRpb25zIHVzaW5nIEZsYXR0ZW5lZCBEZXZpY2UKKwkgIFRyZWVzLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zdW54aS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9LY29uZmlnCmluZGV4IDFhYWExZTEuLmE3NzYwNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3VueGkvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXN1bnhpL0tjb25maWcKQEAgLTQyLDQgKzQyLDExIEBACiAJc2VsZWN0IE1GRF9TVU42SV9QUkNNCiAJc2VsZWN0IFJFU0VUX0NPTlRST0xMRVIKIAorY29uZmlnIE1BQ0hfU1VOOUkKKwlib29sICJBbGx3aW5uZXIgKHN1bjlpKSBTb0NzIHN1cHBvcnQiCisJZGVmYXVsdCBBUkNIX1NVTlhJCisJc2VsZWN0IEFSQ0hfSEFTX1JFU0VUX0NPTlRST0xMRVIKKwlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBSRVNFVF9DT05UUk9MTEVSCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXN1bnhpL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtc3VueGkvcGxhdHNtcC5jCmluZGV4IGM1MzA3N2IuLmU0NGQwMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3VueGkvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3VueGkvcGxhdHNtcC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHNtcF9vcGVyYXRpb25zIHN1bjZpX3NtcF9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc21wX29wZXJhdGlvbnMgc3VuNmlfc21wX29wcyBfX2luaXRkYXRhID0gewogCS5zbXBfcHJlcGFyZV9jcHVzCT0gc3VuNmlfc21wX3ByZXBhcmVfY3B1cywKIAkuc21wX2Jvb3Rfc2Vjb25kYXJ5CT0gc3VuNmlfc21wX2Jvb3Rfc2Vjb25kYXJ5LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3VueGkvc3VueGkuYyBiL2FyY2gvYXJtL21hY2gtc3VueGkvc3VueGkuYwppbmRleCBkNzU5OGFlLi4xZjk4Njc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXN1bnhpL3N1bnhpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zdW54aS9zdW54aS5jCkBAIC02MywzICs2MywxMiBAQAogRFRfTUFDSElORV9TVEFSVChTVU44SV9EVCwgIkFsbHdpbm5lciBzdW44aSAoQTIzKSBGYW1pbHkiKQogCS5kdF9jb21wYXQJPSBzdW44aV9ib2FyZF9kdF9jb21wYXQsCiBNQUNISU5FX0VORAorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN1bjlpX2JvYXJkX2R0X2NvbXBhdFtdID0geworCSJhbGx3aW5uZXIsc3VuOWktYTgwIiwKKwlOVUxMLAorfTsKKworRFRfTUFDSElORV9TVEFSVChTVU45SV9EVCwgIkFsbHdpbm5lciBzdW45aSBGYW1pbHkiKQorCS5kdF9jb21wYXQJPSBzdW45aV9ib2FyZF9kdF9jb21wYXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9LY29uZmlnCmluZGV4IDA5NTM5OTYuLmQwYmU5YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJYm9vbCAiTlZJRElBIFRlZ3JhIiBpZiBBUkNIX01VTFRJX1Y3CiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfVFJVU1RFRF9GT1VOREFUSU9OUworCXNlbGVjdCBBUk1fQU1CQQogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IENMS1NSQ19NTUlPCiAJc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBTTVAKQEAgLTU5LDEyICs2MCw0IEBACiAJICBTdXBwb3J0IGZvciBOVklESUEgVGVncmEgVDEyNCBwcm9jZXNzb3IgZmFtaWx5LCBiYXNlZCBvbiB0aGUKIAkgIEFSTSBDb3J0ZXhBMTVNUCBDUFUKIAotY29uZmlnIFRFR1JBX0FIQgotCWJvb2wgIkVuYWJsZSBBSEIgZHJpdmVyIGZvciBOVklESUEgVGVncmEgU29DcyIKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBBZGRzIEFIQiBjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkgZm9yIE5WSURJQSBUZWdyYSBTb0NzLAotCSAgd2hpY2ggY29udHJvbHMgQUhCIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gYW5kIHNvbWUKLQkgIHBlcmZvcm1hbmNlIHBhcmFtZXRlcnMocHJpb3JpdHksIHByZWZlY2ggc2l6ZSkuCi0KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2NwdWlkbGUtdGVncmExMTQuYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTExNC5jCmluZGV4IGUzZWJkY2UuLmYyYjU4NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTExNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTExNC5jCkBAIC00OSw3ICs0OSw3IEBACiAJY2FsbF9maXJtd2FyZV9vcChwcmVwYXJlX2lkbGUpOwogCiAJLyogRG8gc3VzcGVuZCBieSBvdXJzZWx2ZXMgaWYgdGhlIGZpcm13YXJlIGRvZXMgbm90IGltcGxlbWVudCBpdCAqLwotCWlmIChjYWxsX2Zpcm13YXJlX29wKGRvX2lkbGUpID09IC1FTk9TWVMpCisJaWYgKGNhbGxfZmlybXdhcmVfb3AoZG9faWRsZSwgMCkgPT0gLUVOT1NZUykKIAkJY3B1X3N1c3BlbmQoMCwgdGVncmEzMF9zbGVlcF9jcHVfc2Vjb25kYXJ5X2ZpbmlzaCk7CiAKIAljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRVhJVCwgJmRldi0+Y3B1KTsKQEAgLTc1LDcgKzc1LDYgQEAKIAkJCS5leGl0X2xhdGVuY3kJCT0gNTAwLAogCQkJLnRhcmdldF9yZXNpZGVuY3kJPSAxMDAwLAogCQkJLnBvd2VyX3VzYWdlCQk9IDAsCi0JCQkuZmxhZ3MJCQk9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkJLm5hbWUJCQk9ICJwb3dlcmVkLWRvd24iLAogCQkJLmRlc2MJCQk9ICJDUFUgcG93ZXIgZ2F0ZWQiLAogCQl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9jcHVpZGxlLXRlZ3JhMjAuYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTIwLmMKaW5kZXggYjMwYmY1Yy4uNGYyNWE3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9jcHVpZGxlLXRlZ3JhMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2NwdWlkbGUtdGVncmEyMC5jCkBAIC01OSw4ICs1OSw3IEBACiAJCQkuZXhpdF9sYXRlbmN5ICAgICA9IDUwMDAsCiAJCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDEwMDAwLAogCQkJLnBvd2VyX3VzYWdlICAgICAgPSAwLAotCQkJLmZsYWdzICAgICAgICAgICAgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8Ci0JCQlDUFVJRExFX0ZMQUdfQ09VUExFRCwKKwkJCS5mbGFncyAgICAgICAgICAgID0gQ1BVSURMRV9GTEFHX0NPVVBMRUQsCiAJCQkubmFtZSAgICAgICAgICAgICA9ICJwb3dlcmVkLWRvd24iLAogCQkJLmRlc2MgICAgICAgICAgICAgPSAiQ1BVIHBvd2VyIGdhdGVkIiwKIAkJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTMwLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2NwdWlkbGUtdGVncmEzMC5jCmluZGV4IDM1NTYxMjcuLmY4ODE1ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvY3B1aWRsZS10ZWdyYTMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9jcHVpZGxlLXRlZ3JhMzAuYwpAQCAtNTYsNyArNTYsNiBAQAogCQkJLmV4aXRfbGF0ZW5jeQkJPSAyMDAwLAogCQkJLnRhcmdldF9yZXNpZGVuY3kJPSAyMjAwLAogCQkJLnBvd2VyX3VzYWdlCQk9IDAsCi0JCQkuZmxhZ3MJCQk9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkJLm5hbWUJCQk9ICJwb3dlcmVkLWRvd24iLAogCQkJLmRlc2MJCQk9ICJDUFUgcG93ZXIgZ2F0ZWQiLAogCQl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9yZXNldC1oYW5kbGVyLlMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL3Jlc2V0LWhhbmRsZXIuUwppbmRleCA3YjJiYWFiLi43MWJlNGFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL3Jlc2V0LWhhbmRsZXIuUworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL3Jlc2V0LWhhbmRsZXIuUwpAQCAtNTEsNiArNTEsNyBAQAogIFRIVU1CKAlpdAluZSApCiAJYm5lCWNwdV9yZXN1bWUJCQlAIG5vCiAKKwl0ZWdyYV9nZXRfc29jX2lkIFRFR1JBX0FQQl9NSVNDX0JBU0UsIHI2CiAJLyogQXJlIHdlIG9uIFRlZ3JhMjA/ICovCiAJY21wCXI2LCAjVEVHUkEyMAogCWJlcQkxZgkJCQlAIFllcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jCmluZGV4IGVjMDI4M2MuLjEzMTk5NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9kdW1teXNwaWNoaXAuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKQEAgLTgwLDggKzgwLDggQEAKIAkJImluIDhiaXQgbW9kZVxuIik7CiAJc3RhdHVzID0gc3BpX3c4cjgoc3BpLCAweEFBKTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2lwbGUgdGVzdCAxOiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKLQkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDE6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDE6IFNVQ0NFU1MhXG4iKTsKIApAQCAtODksOCArODksOCBAQAogCQkiaW4gOGJpdCBtb2RlIChmdWxsIEZJRk8pXG4iKTsKIAlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCA4LCAmcnhidWZbMF0sIDgpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAyOiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgMjogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAyOiBTVUNDRVNTIVxuIik7CiAKQEAgLTk4LDggKzk4LDggQEAKIAkJImluIDhiaXQgbW9kZSAoc2VlIGlmIHdlIG92ZXJmbG93IEZJRk8pXG4iKTsKIAlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCAxNCwgJnJ4YnVmWzBdLCAxNCk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDM6IEZBSUxVUkU6IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAiCi0JCQkgICAiKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDM6IEZBSUxVUkU6IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAzOiBTVUNDRVNTIVxuIik7CiAKQEAgLTEwNywxNCArMTA3LDE0IEBACiAJCSJieXRlcyBnYXJiYWdlIHdpdGggc3BpX3JlYWQoKSBpbiA4Yml0IG1vZGVcbiIpOwogCXN0YXR1cyA9IHNwaV93cml0ZShzcGksICZ0eGJ1ZlswXSwgOCk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDQgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQgc3RlcCAxOiBTVUNDRVNTIVxuIik7CiAJc3RhdHVzID0gc3BpX3JlYWQoc3BpLCAmcnhidWZbMF0sIDgpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgNCBzdGVwIDI6IFNVQ0NFU1MhXG4iKTsKIApAQCAtMTIyLDE2ICsxMjIsMTQgQEAKIAkJIjE0IGJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIik7CiAJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJnR4YnVmWzBdLCAxNCk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAotCQkJICAgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNSBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA1IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOwogCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJnJ4YnVmWzBdLCAxNCk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDUgc3RlcCAyOiBGQUlMVVJFOiBzcGlfcmVhZCgpICIKLQkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCi0JCQkgICBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCA1IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgNTogU1VDQ0VTUyFcbiIpOwogCkBAIC0xNDAsMTYgKzEzOCwxNCBAQAogCQlETUFfVEVTVF9TSVpFLCBETUFfVEVTVF9TSVpFKTsKIAlzdGF0dXMgPSBzcGlfd3JpdGUoc3BpLCAmYmlndHhidWZfdmlydHVhbFswXSwgRE1BX1RFU1RfU0laRSk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDYgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAotCQkJICAgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNiBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOwogCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJmJpZ3J4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAotCQkJICAgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNiBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDY6IFNVQ0NFU1MhXG4iKTsKIApAQCAtMTY5LDE4ICsxNjUsMTcgQEAKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgNzogU1VDQ0VTUyEgKGV4cGVjdGVkIGZhaWx1cmUgd2l0aCAiCiAJCQkic3RhdHVzIEVJTylcbiIpOwogCWVsc2UgaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpcGxlIHRlc3QgNzogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCA3OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQotCQlwcl93YXJuaW5nKCJTaXBsZSB0ZXN0IDc6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgIgotCQkJICAgInN1Y2NlZWRlZCBidXQgaXQgd2FzIGV4cGVjdGVkIHRvIGZhaWwhXG4iKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgNzogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCBzdWNjZWVkZWQgYnV0IGl0IHdhcyBleHBlY3RlZCB0byBmYWlsIVxuIik7CiAKIAlwcl9pbmZvKCJTaW1wbGUgdGVzdCA4OiB3cml0ZSA4IGJ5dGVzLCByZWFkIGJhY2sgOCBieXRlcyBnYXJiYWdlICIKIAkJImluIDE2Yml0IG1vZGUgKGZ1bGwgRklGTylcbiIpOwogCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCAmdHhidWZbMF0sIDgsICZyeGJ1ZlswXSwgOCk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDg6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQoKSAiCi0JCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCA4OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkKCkgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDg6IFNVQ0NFU1MhXG4iKTsKIApAQCAtMTg4LDggKzE4Myw4IEBACiAJCSJpbiAxNmJpdCBtb2RlIChzZWUgaWYgd2Ugb3ZlcmZsb3cgRklGTylcbiIpOwogCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCAmdHhidWZbMF0sIDE0LCAmcnhidWZbMF0sIDE0KTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgOTogRkFJTFVSRTogZmFpbGVkIHdpdGggc3RhdHVzICVkICIKLQkJCSAgICIocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwgc3RhdHVzKTsKKwkJcHJfd2FybigiU2ltcGxlIHRlc3QgOTogRkFJTFVSRTogZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJc3RhdHVzKTsKIAllbHNlCiAJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDk6IFNVQ0NFU1MhXG4iKTsKIApAQCAtMTk4LDE3ICsxOTMsMTUgQEAKIAkgICAgICAgRE1BX1RFU1RfU0laRSwgRE1BX1RFU1RfU0laRSk7CiAJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJmJpZ3R4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpICIKLQkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCi0JCQkgICBzdGF0dXMpOworCQlwcl93YXJuKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCXN0YXR1cyk7CiAJZWxzZQogCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDE6IFNVQ0NFU1MhXG4iKTsKIAogCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJmJpZ3J4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOwogCWlmIChzdGF0dXMgPCAwKQotCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgotCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKLQkJCSAgIHN0YXR1cyk7CisJCXByX3dhcm4oIlNpbXBsZSB0ZXN0IDEwIHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQlzdGF0dXMpOwogCWVsc2UKIAkJcHJfaW5mbygiU2ltcGxlIHRlc3QgMTA6IFNVQ0NFU1MhXG4iKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9LY29uZmlnCmluZGV4IDY5OWU4NjAuLmM5YWMxOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL0tjb25maWcKQEAgLTMyLDYgKzMyLDcgQEAKIAlzZWxlY3QgUElOQ1RSTF9BQjg1NDAKIAlzZWxlY3QgUkVHVUxBVE9SCiAJc2VsZWN0IFJFR1VMQVRPUl9EQjg1MDBfUFJDTVUKKwlzZWxlY3QgUE1fR0VORVJJQ19ET01BSU5TIGlmIFBNCiAKIGNvbmZpZyBNQUNIX01PUDUwMAogCWJvb2wgIlU4NTAwIERldmVsb3BtZW50IHBsYXRmb3JtLCBNT1A1MDAgdmVyc2lvbnMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9NYWtlZmlsZQppbmRleCA5NzQxZGU5NS4uNDQxOGE1MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL01ha2VmaWxlCkBAIC05LDUgKzksNiBAQAogCQkJCWJvYXJkLW1vcDUwMC1hdWRpby5vCiBvYmotJChDT05GSUdfU01QKQkJKz0gcGxhdHNtcC5vIGhlYWRzbXAubwogb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBob3RwbHVnLm8KK29iai0kKENPTkZJR19QTV9HRU5FUklDX0RPTUFJTlMpICs9IHBtX2RvbWFpbnMubwogCiBDRkxBR1NfaG90cGx1Zy5vCQkrPSAtbWFyY2g9YXJtdjctYQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9wbS5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9wbS5jCmluZGV4IGI4MGE5YTIuLjJjYjU4N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL3BtLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2FybS11eDUwMC1wbS5oPgogCiAjaW5jbHVkZSAiZGI4NTAwLXJlZ3MuaCIKKyNpbmNsdWRlICJwbV9kb21haW5zLmgiCiAKIC8qIEFSTSBXRkkgU3RhbmRieSBzaWduYWwgcmVnaXN0ZXIgKi8KICNkZWZpbmUgUFJDTV9BUk1fV0ZJX1NUQU5EQlkgICAgKHByY211X2Jhc2UgKyAweDEzMCkKQEAgLTE5MSw0ICsxOTIsNyBAQAogCiAJLyogU2V0IHVwIHV4NTAwIHN1c3BlbmQgY2FsbGJhY2tzLiAqLwogCXN1c3BlbmRfc2V0X29wcyhVWDUwMF9TVVNQRU5EX09QUyk7CisKKwkvKiBJbml0aWFsaXplIHV4NTAwIHBvd2VyIGRvbWFpbnMgKi8KKwl1eDUwMF9wbV9kb21haW5zX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvcG1fZG9tYWlucy5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9wbV9kb21haW5zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0YjViNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvcG1fZG9tYWlucy5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTGluYXJvIEx0ZC4KKyAqCisgKiBBdXRob3I6IFVsZiBIYW5zc29uIDx1bGYuaGFuc3NvbkBsaW5hcm8ub3JnPgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogSW1wbGVtZW50cyBQTSBkb21haW5zIHVzaW5nIHRoZSBnZW5lcmljIFBNIGRvbWFpbiBmb3IgdXg1MDAuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9kb21haW4uaD4KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2FybS91eDUwMF9wbV9kb21haW5zLmg+CisjaW5jbHVkZSAicG1fZG9tYWlucy5oIgorCitzdGF0aWMgaW50IHBkX3Bvd2VyX29mZihzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmRvbWFpbikKK3sKKwkvKgorCSAqIEhhbmRsZSB0aGUgZ2F0aW5nIG9mIHRoZSBQTSBkb21haW4gcmVndWxhdG9yIGhlcmUuCisJICoKKwkgKiBEcml2ZXJzL3N1YnN5c3RlbXMgaGFuZGxpbmcgZGV2aWNlcyBpbiB0aGUgUE0gZG9tYWluIG5lZWRzIHRvIHBlcmZvcm0KKwkgKiByZWdpc3RlciBjb250ZXh0IHNhdmUvcmVzdG9yZSBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgcnVudGltZSBQTQorCSAqIGNhbGxiYWNrcywgdG8gYmUgYWJsZSB0byBlbmFibGUgUE0gZG9tYWluIGdhdGluZy91bmdhdGluZy4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZF9wb3dlcl9vbihzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmRvbWFpbikKK3sKKwkvKgorCSAqIEhhbmRsZSB0aGUgdW5nYXRpbmcgb2YgdGhlIFBNIGRvbWFpbiByZWd1bGF0b3IgaGVyZS4KKwkgKgorCSAqIERyaXZlcnMvc3Vic3lzdGVtcyBoYW5kbGluZyBkZXZpY2VzIGluIHRoZSBQTSBkb21haW4gbmVlZHMgdG8gcGVyZm9ybQorCSAqIHJlZ2lzdGVyIGNvbnRleHQgc2F2ZS9yZXN0b3JlIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBydW50aW1lIFBNCisJICogY2FsbGJhY2tzLCB0byBiZSBhYmxlIHRvIGVuYWJsZSBQTSBkb21haW4gZ2F0aW5nL3VuZ2F0aW5nLgorCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluIHV4NTAwX3BtX2RvbWFpbl92YXBlID0geworCS5uYW1lID0gIlZBUEUiLAorCS5wb3dlcl9vZmYgPSBwZF9wb3dlcl9vZmYsCisJLnBvd2VyX29uID0gcGRfcG93ZXJfb24sCit9OworCitzdGF0aWMgc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICp1eDUwMF9wbV9kb21haW5zW05SX0RPTUFJTlNdID0geworCVtET01BSU5fVkFQRV0gPSAmdXg1MDBfcG1fZG9tYWluX3ZhcGUsCit9OworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB1eDUwMF9wbV9kb21haW5fbWF0Y2hlc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic3Rlcmljc3Nvbix1eDUwMC1wbS1kb21haW5zIiwgfSwKKwl7IH0sCit9OworCitpbnQgX19pbml0IHV4NTAwX3BtX2RvbWFpbnNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IGdlbnBkX29uZWNlbGxfZGF0YSAqZ2VucGRfZGF0YTsKKwlpbnQgaTsKKworCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIHV4NTAwX3BtX2RvbWFpbl9tYXRjaGVzKTsKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWdlbnBkX2RhdGEgPSBremFsbG9jKHNpemVvZigqZ2VucGRfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZ2VucGRfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnZW5wZF9kYXRhLT5kb21haW5zID0gdXg1MDBfcG1fZG9tYWluczsKKwlnZW5wZF9kYXRhLT5udW1fZG9tYWlucyA9IEFSUkFZX1NJWkUodXg1MDBfcG1fZG9tYWlucyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1eDUwMF9wbV9kb21haW5zKTsgKytpKQorCQlwbV9nZW5wZF9pbml0KHV4NTAwX3BtX2RvbWFpbnNbaV0sIE5VTEwsIGZhbHNlKTsKKworCW9mX2dlbnBkX2FkZF9wcm92aWRlcl9vbmVjZWxsKG5wLCBnZW5wZF9kYXRhKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvcG1fZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9wbV9kb21haW5zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzZDNiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvcG1fZG9tYWlucy5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTGluYXJvIEx0ZC4KKyAqCisgKiBBdXRob3I6IFVsZiBIYW5zc29uIDx1bGYuaGFuc3NvbkBsaW5hcm8ub3JnPgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKi8KKworI2lmbmRlZiBfX01BQ0hfVVg1MDBfUE1fRE9NQUlOU19ICisjZGVmaW5lIF9fTUFDSF9VWDUwMF9QTV9ET01BSU5TX0gKKworI2lmZGVmIENPTkZJR19QTV9HRU5FUklDX0RPTUFJTlMKK2V4dGVybiBpbnQgX19pbml0IHV4NTAwX3BtX2RvbWFpbnNfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCB1eDUwMF9wbV9kb21haW5zX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9LY29uZmlnCmluZGV4IGIyY2ZiYTE2Yy4uZDZiMTZkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZwpAQCAtMTYsNiArMTYsNyBAQAogCXNlbGVjdCBQT1dFUl9SRVNFVAogCXNlbGVjdCBQT1dFUl9SRVNFVF9WRVhQUkVTUwogCXNlbGVjdCBQT1dFUl9TVVBQTFkKKwlzZWxlY3QgUkVHVUxBVE9SIGlmIE1NQ19BUk1NTUNJCiAJc2VsZWN0IFJFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlmIFJFR1VMQVRPUgogCXNlbGVjdCBWRVhQUkVTU19DT05GSUcKIAlzZWxlY3QgVkVYUFJFU1NfU1lTQ0ZHCkBAIC00OSw5ICs1MCw2IEBACiAJICBidWlsZCBhIHdvcmtpbmcga2VybmVsLCB5b3UgbXVzdCBhbHNvIGVuYWJsZSByZWxldmFudCBjb3JlCiAJICB0aWxlIHN1cHBvcnQgb3IgRmxhdHRlbmVkIERldmljZSBUcmVlIGJhc2VkIHN1cHBvcnQgb3B0aW9ucy4KIAotY29uZmlnIEFSQ0hfVkVYUFJFU1NfQ0E5WDQKLQlib29sICJWZXJzYXRpbGUgRXhwcmVzcyBDb3J0ZXgtQTl4NCB0aWxlIgotCiBjb25maWcgQVJDSF9WRVhQUkVTU19EQ1NDQgogCWJvb2wgIkR1YWwgQ2x1c3RlciBTeXN0ZW0gQ29udHJvbCBCbG9jayAoRENTQ0IpIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBNQ1BNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9NYWtlZmlsZQppbmRleCBmYzY0OWJjLi5mNWMxMDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvTWFrZWZpbGUKQEAgLTEsMTEgKzEsMTAgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCi1jY2ZsYWdzLSQoQ09ORklHX0FSQ0hfTVVMVElQTEFURk9STSkgOj0gLUkkKHNyY3RyZWUpLyQoc3JjKS9pbmNsdWRlIFwKK2NjZmxhZ3MtJChDT05GSUdfQVJDSF9NVUxUSVBMQVRGT1JNKSA6PSBcCiAJLUkkKHNyY3RyZWUpL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL2luY2x1ZGUKIAogb2JqLXkJCQkJCTo9IHYybS5vCi1vYmotJChDT05GSUdfQVJDSF9WRVhQUkVTU19DQTlYNCkJKz0gY3QtY2E5eDQubwogb2JqLSQoQ09ORklHX0FSQ0hfVkVYUFJFU1NfRENTQ0IpCSs9IGRjc2NiLm8JZGNzY2Jfc2V0dXAubwogQ0ZMQUdTX2Rjc2NiLm8JCQkJKz0gLW1hcmNoPWFybXY3LWEKIENGTEFHU19SRU1PVkVfZGNzY2IubwkJCT0gLXBnCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY29yZS5oCmluZGV4IDE1MmZhZDkuLjJhMTFkM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY29yZS5oCkBAIC0xLDEyICsxLDUgQEAKLS8qIDJNQiBsYXJnZSBhcmVhIGZvciBtb3RoZXJib2FyZCdzIHBlcmlwaGVyYWxzIHN0YXRpYyBtYXBwaW5nICovCi0jZGVmaW5lIFYyTV9QRVJJUEggMHhmODAwMDAwMAotCi0vKiBUaWxlJ3MgcGVyaXBoZXJhbHMgc3RhdGljIG1hcHBpbmdzIHNob3VsZCBzdGFydCBoZXJlICovCi0jZGVmaW5lIFYyVF9QRVJJUEggMHhmODIwMDAwMAotCiBib29sIHZleHByZXNzX3NtcF9pbml0X29wcyh2b2lkKTsKIAotZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucwl2ZXhwcmVzc19zbXBfb3BzOwogZXh0ZXJuIHN0cnVjdCBzbXBfb3BlcmF0aW9ucwl2ZXhwcmVzc19zbXBfZHRfb3BzOwogCiBleHRlcm4gdm9pZCB2ZXhwcmVzc19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jdC1jYTl4NC5jIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jdC1jYTl4NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2JlYTA0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY3QtY2E5eDQuYworKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKgotICogVmVyc2F0aWxlIEV4cHJlc3MgQ29yZSBUaWxlIENvcnRleCBBOXg0IFN1cHBvcnQKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9nZnAuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+Ci0jaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS92aWRlby1jbGNkLXZlcnNhdGlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZleHByZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxY2hpcC9hcm0tZ2ljLmg+Ci0KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYXJtX3RpbWVyLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KLSNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgotI2luY2x1ZGUgPGFzbS9zbXBfdHdkLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2N0LWNhOXg0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdGltZXItc3AuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLQotI2luY2x1ZGUgImNvcmUuaCIKLQotI2luY2x1ZGUgPG1hY2gvbW90aGVyYm9hcmQuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBjdF9jYTl4NF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsICAgICAgICA9IFYyVF9QRVJJUEgsCi0JCS5wZm4gICAgICAgICAgICA9IF9fcGh5c190b19wZm4oQ1RfQ0E5WDRfTVBJQyksCi0JCS5sZW5ndGggICAgICAgICA9IFNaXzhLLAotCQkudHlwZSAgICAgICAgICAgPSBNVF9ERVZJQ0UsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjdF9jYTl4NF9tYXBfaW8odm9pZCkKLXsKLQlpb3RhYmxlX2luaXQoY3RfY2E5eDRfaW9fZGVzYywgQVJSQVlfU0laRShjdF9jYTl4NF9pb19kZXNjKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjYTl4NF9sMl9pbml0KHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKLQl2b2lkIF9faW9tZW0gKmwyeDBfYmFzZSA9IGlvcmVtYXAoQ1RfQ0E5WDRfTDJDQywgU1pfNEspOwotCi0JaWYgKGwyeDBfYmFzZSkgewotCQkvKiBzZXQgUkFNIGxhdGVuY2llcyB0byAxIGN5Y2xlIGZvciB0aGlzIGNvcmUgdGlsZS4gKi8KLQkJd3JpdGVsKDAsIGwyeDBfYmFzZSArIEwzMTBfVEFHX0xBVEVOQ1lfQ1RSTCk7Ci0JCXdyaXRlbCgwLCBsMngwX2Jhc2UgKyBMMzEwX0RBVEFfTEFURU5DWV9DVFJMKTsKLQotCQlsMngwX2luaXQobDJ4MF9iYXNlLCAweDAwNDAwMDAwLCAweGZlMGZmZmZmKTsKLQl9IGVsc2UgewotCQlwcl9lcnIoIkwyQzogdW5hYmxlIHRvIG1hcCBMMiBjYWNoZSBjb250cm9sbGVyXG4iKTsKLQl9Ci0jZW5kaWYKLX0KLQotI2lmZGVmIENPTkZJR19IQVZFX0FSTV9UV0QKLXN0YXRpYyBERUZJTkVfVFdEX0xPQ0FMX1RJTUVSKHR3ZF9sb2NhbF90aW1lciwgQTlfTVBDT1JFX1RXRCwgSVJRX0xPQ0FMVElNRVIpOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2E5eDRfdHdkX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyID0gdHdkX2xvY2FsX3RpbWVyX3JlZ2lzdGVyKCZ0d2RfbG9jYWxfdGltZXIpOwotCWlmIChlcnIpCi0JCXByX2VycigidHdkX2xvY2FsX3RpbWVyX3JlZ2lzdGVyIGZhaWxlZCAlZFxuIiwgZXJyKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGNhOXg0X3R3ZF9pbml0KCkJZG8ge30gd2hpbGUoMCkKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3RfY2E5eDRfaW5pdF9pcnEodm9pZCkKLXsKLQlnaWNfaW5pdCgwLCAyOSwgaW9yZW1hcChBOV9NUENPUkVfR0lDX0RJU1QsIFNaXzRLKSwKLQkJIGlvcmVtYXAoQTlfTVBDT1JFX0dJQ19DUFUsIFNaXzI1NikpOwotCWNhOXg0X3R3ZF9pbml0KCk7Ci0JY2E5eDRfbDJfaW5pdCgpOwotfQotCi1zdGF0aWMgaW50IGN0X2NhOXg0X2NsY2Rfc2V0dXAoc3RydWN0IGNsY2RfZmIgKmZiKQotewotCXVuc2lnbmVkIGxvbmcgZnJhbWVzaXplID0gMTAyNCAqIDc2OCAqIDI7Ci0KLQlmYi0+cGFuZWwgPSB2ZXJzYXRpbGVfY2xjZF9nZXRfcGFuZWwoIlhWR0EiKTsKLQlpZiAoIWZiLT5wYW5lbCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gdmVyc2F0aWxlX2NsY2Rfc2V0dXBfZG1hKGZiLCBmcmFtZXNpemUpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsY2RfYm9hcmQgY3RfY2E5eDRfY2xjZF9kYXRhID0gewotCS5uYW1lCQk9ICJDVC1DQTlYNCIsCi0JLmNhcHMJCT0gQ0xDRF9DQVBfNTU1MSB8IENMQ0RfQ0FQXzU2NSwKLQkuY2hlY2sJCT0gY2xjZGZiX2NoZWNrLAotCS5kZWNvZGUJCT0gY2xjZGZiX2RlY29kZSwKLQkuc2V0dXAJCT0gY3RfY2E5eDRfY2xjZF9zZXR1cCwKLQkubW1hcAkJPSB2ZXJzYXRpbGVfY2xjZF9tbWFwX2RtYSwKLQkucmVtb3ZlCQk9IHZlcnNhdGlsZV9jbGNkX3JlbW92ZV9kbWEsCi19OwotCi1zdGF0aWMgQU1CQV9BSEJfREVWSUNFKGNsY2QsICJjdDpjbGNkIiwgMCwgQ1RfQ0E5WDRfQ0xDREMsIElSUV9DVF9DQTlYNF9DTENEQywgJmN0X2NhOXg0X2NsY2RfZGF0YSk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKGRtYywgImN0OmRtYyIsIDAsIENUX0NBOVg0X0RNQywgSVJRX0NUX0NBOVg0X0RNQywgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKHNtYywgImN0OnNtYyIsIDAsIENUX0NBOVg0X1NNQywgSVJRX0NUX0NBOVg0X1NNQywgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKGdwaW8sICJjdDpncGlvIiwgMCwgQ1RfQ0E5WDRfR1BJTywgSVJRX0NUX0NBOVg0X0dQSU8sIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICpjdF9jYTl4NF9hbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewotCSZjbGNkX2RldmljZSwKLQkmZG1jX2RldmljZSwKLQkmc21jX2RldmljZSwKLQkmZ3Bpb19kZXZpY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBtdV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IElSUV9DVF9DQTlYNF9QTVVfQ1BVMCwKLQkJLmVuZAk9IElSUV9DVF9DQTlYNF9QTVVfQ1BVMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9DVF9DQTlYNF9QTVVfQ1BVMSwKLQkJLmVuZAk9IElSUV9DVF9DQTlYNF9QTVVfQ1BVMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IElSUV9DVF9DQTlYNF9QTVVfQ1BVMiwKLQkJLmVuZAk9IElSUV9DVF9DQTlYNF9QTVVfQ1BVMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS5zdGFydAk9IElSUV9DVF9DQTlYNF9QTVVfQ1BVMywKLQkJLmVuZAk9IElSUV9DVF9DQTlYNF9QTVVfQ1BVMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBtdV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImFybS1wbXUiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocG11X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gcG11X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBvc2MxX2xvb2t1cCA9IHsKLQkuZGV2X2lkCQk9ICJjdDpjbGNkIiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9zYzFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJ2ZXhwcmVzcy1vc2MiLAotCS5pZAkJPSAxLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAoc3RydWN0IHJlc291cmNlIFtdKSB7Ci0JCVZFWFBSRVNTX1JFU19GVU5DKDB4ZiwgMSksCi0JfSwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmb3NjMV9sb29rdXAsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3RfY2E5eDRfaW5pdCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3RfY2E5eDRfYW1iYV9kZXZzKTsgaSsrKQotCQlhbWJhX2RldmljZV9yZWdpc3RlcihjdF9jYTl4NF9hbWJhX2RldnNbaV0sICZpb21lbV9yZXNvdXJjZSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBtdV9kZXZpY2UpOwotCXZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoJm9zYzFfZGV2aWNlKTsKLX0KLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkICpjdF9jYTl4NF9zY3VfYmFzZSBfX2luaXRkYXRhOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY3RfY2E5eDRfaW5pdF9jcHVfbWFwKHZvaWQpCi17Ci0JaW50IGksIG5jb3JlczsKLQotCWN0X2NhOXg0X3NjdV9iYXNlID0gaW9yZW1hcChBOV9NUENPUkVfU0NVLCBTWl8xMjgpOwotCWlmIChXQVJOX09OKCFjdF9jYTl4NF9zY3VfYmFzZSkpCi0JCXJldHVybjsKLQotCW5jb3JlcyA9IHNjdV9nZXRfY29yZV9jb3VudChjdF9jYTl4NF9zY3VfYmFzZSk7Ci0KLQlpZiAobmNvcmVzID4gbnJfY3B1X2lkcykgewotCQlwcl93YXJuKCJTTVA6ICV1IGNvcmVzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtICgldSksIGNsaXBwaW5nXG4iLAotCQkJbmNvcmVzLCBucl9jcHVfaWRzKTsKLQkJbmNvcmVzID0gbnJfY3B1X2lkczsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmNvcmVzOyArK2kpCi0JCXNldF9jcHVfcG9zc2libGUoaSwgdHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjdF9jYTl4NF9zbXBfZW5hYmxlKHVuc2lnbmVkIGludCBtYXhfY3B1cykKLXsKLQlzY3VfZW5hYmxlKGN0X2NhOXg0X3NjdV9iYXNlKTsKLX0KLSNlbmRpZgotCi1zdHJ1Y3QgY3RfZGVzYyBjdF9jYTl4NF9kZXNjIF9faW5pdGRhdGEgPSB7Ci0JLmlkCQk9IFYyTV9DVF9JRF9DQTksCi0JLm5hbWUJCT0gIkNBOXg0IiwKLQkubWFwX2lvCQk9IGN0X2NhOXg0X21hcF9pbywKLQkuaW5pdF9pcnEJPSBjdF9jYTl4NF9pbml0X2lycSwKLQkuaW5pdF90aWxlCT0gY3RfY2E5eDRfaW5pdCwKLSNpZmRlZiBDT05GSUdfU01QCi0JLmluaXRfY3B1X21hcAk9IGN0X2NhOXg0X2luaXRfY3B1X21hcCwKLQkuc21wX2VuYWJsZQk9IGN0X2NhOXg0X3NtcF9lbmFibGUsCi0jZW5kaWYKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9jdC1jYTl4NC5oIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvY3QtY2E5eDQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRhY2Y4NC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9jdC1jYTl4NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotI2lmbmRlZiBfX01BQ0hfQ1RfQ0E5WDRfSAotI2RlZmluZSBfX01BQ0hfQ1RfQ0E5WDRfSAotCi0vKgotICogUGh5c2ljYWwgYmFzZSBhZGRyZXNzZXMKLSAqLwotI2RlZmluZSBDVF9DQTlYNF9DTENEQwkJKDB4MTAwMjAwMDApCi0jZGVmaW5lIENUX0NBOVg0X0FYSVJBTQkJKDB4MTAwNjAwMDApCi0jZGVmaW5lIENUX0NBOVg0X0RNQwkJKDB4MTAwZTAwMDApCi0jZGVmaW5lIENUX0NBOVg0X1NNQwkJKDB4MTAwZTEwMDApCi0jZGVmaW5lIENUX0NBOVg0X1NDQwkJKDB4MTAwZTIwMDApCi0jZGVmaW5lIENUX0NBOVg0X1NQODA0X1RJTUVSCSgweDEwMGU0MDAwKQotI2RlZmluZSBDVF9DQTlYNF9TUDgwNV9XRFQJKDB4MTAwZTUwMDApCi0jZGVmaW5lIENUX0NBOVg0X1RaUEMJCSgweDEwMGU2MDAwKQotI2RlZmluZSBDVF9DQTlYNF9HUElPCQkoMHgxMDBlODAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfRkFTVEFYSQkoMHgxMDBlOTAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfU0xPV0FYSQkoMHgxMDBlYTAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfVFpBU0MJCSgweDEwMGVjMDAwKQotI2RlZmluZSBDVF9DQTlYNF9DT1JFU0lHSFQJKDB4MTAyMDAwMDApCi0jZGVmaW5lIENUX0NBOVg0X01QSUMJCSgweDFlMDAwMDAwKQotI2RlZmluZSBDVF9DQTlYNF9TWVNUSU1FUgkoMHgxZTAwNDAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfU1lTV0RUCQkoMHgxZTAwNzAwMCkKLSNkZWZpbmUgQ1RfQ0E5WDRfTDJDQwkJKDB4MWUwMGEwMDApCi0KLSNkZWZpbmUgQTlfTVBDT1JFX1NDVQkJKENUX0NBOVg0X01QSUMgKyAweDAwMDApCi0jZGVmaW5lIEE5X01QQ09SRV9HSUNfQ1BVCShDVF9DQTlYNF9NUElDICsgMHgwMTAwKQotI2RlZmluZSBBOV9NUENPUkVfR0lUCQkoQ1RfQ0E5WDRfTVBJQyArIDB4MDIwMCkKLSNkZWZpbmUgQTlfTVBDT1JFX1RXRAkJKENUX0NBOVg0X01QSUMgKyAweDA2MDApCi0jZGVmaW5lIEE5X01QQ09SRV9HSUNfRElTVAkoQ1RfQ0E5WDRfTVBJQyArIDB4MTAwMCkKLQotLyoKLSAqIEludGVycnVwdHMuICBUaG9zZSBpbiB7fSBhcmUgZm9yIEFNQkEgZGV2aWNlcwotICovCi0jZGVmaW5lIElSUV9DVF9DQTlYNF9DTENEQwl7IDc2IH0KLSNkZWZpbmUgSVJRX0NUX0NBOVg0X0RNQwl7IDAgfQotI2RlZmluZSBJUlFfQ1RfQ0E5WDRfU01DCXsgNzcsIDc4IH0KLSNkZWZpbmUgSVJRX0NUX0NBOVg0X1RJTUVSMAk4MAotI2RlZmluZSBJUlFfQ1RfQ0E5WDRfVElNRVIxCTgxCi0jZGVmaW5lIElSUV9DVF9DQTlYNF9HUElPCXsgODIgfQotI2RlZmluZSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTAJOTIKLSNkZWZpbmUgSVJRX0NUX0NBOVg0X1BNVV9DUFUxCTkzCi0jZGVmaW5lIElSUV9DVF9DQTlYNF9QTVVfQ1BVMgk5NAotI2RlZmluZSBJUlFfQ1RfQ0E5WDRfUE1VX0NQVTMJOTUKLQotZXh0ZXJuIHN0cnVjdCBjdF9kZXNjIGN0X2NhOXg0X2Rlc2M7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYThjMTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9pcnFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZjdmNzguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jZGVmaW5lIElSUV9MT0NBTFRJTUVSCQkyOQotI2RlZmluZSBJUlFfTE9DQUxXRE9HCQkzMAotCi0jaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCi0jZGVmaW5lIE5SX0lSUVMJMjU2Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL21vdGhlcmJvYXJkLmggYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9tb3RoZXJib2FyZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGFiYzhiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL21vdGhlcmJvYXJkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0jaWZuZGVmIF9fTUFDSF9NT1RIRVJCT0FSRF9ICi0jZGVmaW5lIF9fTUFDSF9NT1RIRVJCT0FSRF9ICi0KLS8qCi0gKiBQaHlzaWNhbCBhZGRyZXNzZXMsIG9mZnNldCBmcm9tIFYyTV9QQV9DUzAtMwotICovCi0jZGVmaW5lIFYyTV9OT1IwCQkoVjJNX1BBX0NTMCkKLSNkZWZpbmUgVjJNX05PUjEJCShWMk1fUEFfQ1MxKQotI2RlZmluZSBWMk1fU1JBTQkJKFYyTV9QQV9DUzIpCi0jZGVmaW5lIFYyTV9WSURFT19TUkFNCQkoVjJNX1BBX0NTMyArIDB4MDAwMDAwMDApCi0jZGVmaW5lIFYyTV9MQU45MTE4CQkoVjJNX1BBX0NTMyArIDB4MDIwMDAwMDApCi0jZGVmaW5lIFYyTV9JU1AxNzYxCQkoVjJNX1BBX0NTMyArIDB4MDMwMDAwMDApCi0KLS8qCi0gKiBQaHlzaWNhbCBhZGRyZXNzZXMsIG9mZnNldCBmcm9tIFYyTV9QQV9DUzcKLSAqLwotI2RlZmluZSBWMk1fU1lTUkVHUwkJKFYyTV9QQV9DUzcgKyAweDAwMDAwMDAwKQotI2RlZmluZSBWMk1fU1lTQ1RMCQkoVjJNX1BBX0NTNyArIDB4MDAwMDEwMDApCi0jZGVmaW5lIFYyTV9TRVJJQUxfQlVTX1BDSQkoVjJNX1BBX0NTNyArIDB4MDAwMDIwMDApCi0KLSNkZWZpbmUgVjJNX0FBQ0kJCShWMk1fUEFfQ1M3ICsgMHgwMDAwNDAwMCkKLSNkZWZpbmUgVjJNX01NQ0kJCShWMk1fUEFfQ1M3ICsgMHgwMDAwNTAwMCkKLSNkZWZpbmUgVjJNX0tNSTAJCShWMk1fUEFfQ1M3ICsgMHgwMDAwNjAwMCkKLSNkZWZpbmUgVjJNX0tNSTEJCShWMk1fUEFfQ1M3ICsgMHgwMDAwNzAwMCkKLQotI2RlZmluZSBWMk1fVUFSVDAJCShWMk1fUEFfQ1M3ICsgMHgwMDAwOTAwMCkKLSNkZWZpbmUgVjJNX1VBUlQxCQkoVjJNX1BBX0NTNyArIDB4MDAwMGEwMDApCi0jZGVmaW5lIFYyTV9VQVJUMgkJKFYyTV9QQV9DUzcgKyAweDAwMDBiMDAwKQotI2RlZmluZSBWMk1fVUFSVDMJCShWMk1fUEFfQ1M3ICsgMHgwMDAwYzAwMCkKLQotI2RlZmluZSBWMk1fV0RUCQkJKFYyTV9QQV9DUzcgKyAweDAwMDBmMDAwKQotCi0jZGVmaW5lIFYyTV9USU1FUjAxCQkoVjJNX1BBX0NTNyArIDB4MDAwMTEwMDApCi0jZGVmaW5lIFYyTV9USU1FUjIzCQkoVjJNX1BBX0NTNyArIDB4MDAwMTIwMDApCi0KLSNkZWZpbmUgVjJNX1NFUklBTF9CVVNfRFZJCShWMk1fUEFfQ1M3ICsgMHgwMDAxNjAwMCkKLSNkZWZpbmUgVjJNX1JUQwkJCShWMk1fUEFfQ1M3ICsgMHgwMDAxNzAwMCkKLQotI2RlZmluZSBWMk1fQ0YJCQkoVjJNX1BBX0NTNyArIDB4MDAwMWEwMDApCi0jZGVmaW5lIFYyTV9DTENECQkoVjJNX1BBX0NTNyArIDB4MDAwMWYwMDApCi0KLQotLyoKLSAqIEludGVycnVwdHMuICBUaG9zZSBpbiB7fSBhcmUgZm9yIEFNQkEgZGV2aWNlcwotICovCi0jZGVmaW5lIElSUV9WMk1fV0RUCQl7ICgzMiArIDApIH0KLSNkZWZpbmUgSVJRX1YyTV9USU1FUjAJCSgzMiArIDIpCi0jZGVmaW5lIElSUV9WMk1fVElNRVIxCQkoMzIgKyAyKQotI2RlZmluZSBJUlFfVjJNX1RJTUVSMgkJKDMyICsgMykKLSNkZWZpbmUgSVJRX1YyTV9USU1FUjMJCSgzMiArIDMpCi0jZGVmaW5lIElSUV9WMk1fUlRDCQl7ICgzMiArIDQpIH0KLSNkZWZpbmUgSVJRX1YyTV9VQVJUMAkJeyAoMzIgKyA1KSB9Ci0jZGVmaW5lIElSUV9WMk1fVUFSVDEJCXsgKDMyICsgNikgfQotI2RlZmluZSBJUlFfVjJNX1VBUlQyCQl7ICgzMiArIDcpIH0KLSNkZWZpbmUgSVJRX1YyTV9VQVJUMwkJeyAoMzIgKyA4KSB9Ci0jZGVmaW5lIElSUV9WMk1fTU1DSQkJeyAoMzIgKyA5KSwgKDMyICsgMTApIH0KLSNkZWZpbmUgSVJRX1YyTV9BQUNJCQl7ICgzMiArIDExKSB9Ci0jZGVmaW5lIElSUV9WMk1fS01JMAkJeyAoMzIgKyAxMikgfQotI2RlZmluZSBJUlFfVjJNX0tNSTEJCXsgKDMyICsgMTMpIH0KLSNkZWZpbmUgSVJRX1YyTV9DTENECQl7ICgzMiArIDE0KSB9Ci0jZGVmaW5lIElSUV9WMk1fTEFOOTExOAkJKDMyICsgMTUpCi0jZGVmaW5lIElSUV9WMk1fSVNQMTc2MQkJKDMyICsgMTYpCi0jZGVmaW5lIElSUV9WMk1fUENJRQkJKDMyICsgMTcpCi0KLQotLyoKLSAqIENvcmUgdGlsZSBJRHMKLSAqLwotI2RlZmluZSBWMk1fQ1RfSURfQ0E5CQkweDBjMDAwMTkxCi0jZGVmaW5lIFYyTV9DVF9JRF9VTlNVUFBPUlRFRAkweGZmMDAwMTkxCi0jZGVmaW5lIFYyTV9DVF9JRF9NQVNLCQkweGZmMDAwZmZmCi0KLXN0cnVjdCBjdF9kZXNjIHsKLQl1MzIJCQlpZDsKLQljb25zdCBjaGFyCQkqbmFtZTsKLQl2b2lkCQkJKCptYXBfaW8pKHZvaWQpOwotCXZvaWQJCQkoKmluaXRfZWFybHkpKHZvaWQpOwotCXZvaWQJCQkoKmluaXRfaXJxKSh2b2lkKTsKLQl2b2lkCQkJKCppbml0X3RpbGUpKHZvaWQpOwotI2lmZGVmIENPTkZJR19TTVAKLQl2b2lkCQkJKCppbml0X2NwdV9tYXApKHZvaWQpOwotCXZvaWQJCQkoKnNtcF9lbmFibGUpKHVuc2lnbmVkIGludCk7Ci0jZW5kaWYKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgY3RfZGVzYyAqY3RfZGVzYzsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCmluZGV4IGExZjM4MDQuLjgzMTg4Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCkBAIC0xOSw0OCArMTksMTAgQEAKICNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCi0jaW5jbHVkZSA8bWFjaC9tb3RoZXJib2FyZC5oPgotCiAjaW5jbHVkZSA8cGxhdC9wbGF0c21wLmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCiAKLS8qCi0gKiBJbml0aWFsaXNlIHRoZSBDUFUgcG9zc2libGUgbWFwIGVhcmx5IC0gdGhpcyBkZXNjcmliZXMgdGhlIENQVXMKLSAqIHdoaWNoIG1heSBiZSBwcmVzZW50IG9yIGJlY29tZSBwcmVzZW50IGluIHRoZSBzeXN0ZW0uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCB2ZXhwcmVzc19zbXBfaW5pdF9jcHVzKHZvaWQpCi17Ci0JY3RfZGVzYy0+aW5pdF9jcHVfbWFwKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2ZXhwcmVzc19zbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKLXsKLQkvKgotCSAqIEluaXRpYWxpc2UgdGhlIHByZXNlbnQgbWFwLCB3aGljaCBkZXNjcmliZXMgdGhlIHNldCBvZiBDUFVzCi0JICogYWN0dWFsbHkgcG9wdWxhdGVkIGF0IHRoZSBwcmVzZW50IHRpbWUuCi0JICovCi0JY3RfZGVzYy0+c21wX2VuYWJsZShtYXhfY3B1cyk7Ci0KLQkvKgotCSAqIFdyaXRlIHRoZSBhZGRyZXNzIG9mIHNlY29uZGFyeSBzdGFydHVwIGludG8gdGhlCi0JICogc3lzdGVtLXdpZGUgZmxhZ3MgcmVnaXN0ZXIuIFRoZSBib290IG1vbml0b3Igd2FpdHMKLQkgKiB1bnRpbCBpdCByZWNlaXZlcyBhIHNvZnQgaW50ZXJydXB0LCBhbmQgdGhlbiB0aGUKLQkgKiBzZWNvbmRhcnkgQ1BVIGJyYW5jaGVzIHRvIHRoaXMgYWRkcmVzcy4KLQkgKi8KLQl2ZXhwcmVzc19mbGFnc19zZXQodmlydF90b19waHlzKHZlcnNhdGlsZV9zZWNvbmRhcnlfc3RhcnR1cCkpOwotfQotCi1zdHJ1Y3Qgc21wX29wZXJhdGlvbnMgX19pbml0ZGF0YSB2ZXhwcmVzc19zbXBfb3BzID0gewotCS5zbXBfaW5pdF9jcHVzCQk9IHZleHByZXNzX3NtcF9pbml0X2NwdXMsCi0JLnNtcF9wcmVwYXJlX2NwdXMJPSB2ZXhwcmVzc19zbXBfcHJlcGFyZV9jcHVzLAotCS5zbXBfc2Vjb25kYXJ5X2luaXQJPSB2ZXJzYXRpbGVfc2Vjb25kYXJ5X2luaXQsCi0JLnNtcF9ib290X3NlY29uZGFyeQk9IHZlcnNhdGlsZV9ib290X3NlY29uZGFyeSwKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQkuY3B1X2RpZQkJPSB2ZXhwcmVzc19jcHVfZGllLAotI2VuZGlmCi19OwotCiBib29sIF9faW5pdCB2ZXhwcmVzc19zbXBfaW5pdF9vcHModm9pZCkKIHsKICNpZmRlZiBDT05GSUdfTUNQTQpAQCAtNzksOCArNDEsNiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX09GKQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2ZXhwcmVzc19zbXBfZHRfc2N1X21hdGNoW10gX19pbml0Y29uc3QgPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1LXNjdSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE5LXNjdSIsIH0sCkBAIC0xMTIsNSArNzIsMyBAQAogCS5jcHVfZGllCQk9IHZleHByZXNzX2NwdV9kaWUsCiAjZW5kaWYKIH07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKaW5kZXggNmZmNjgxYS4uYTA0MDBmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCkBAIC0xLDM4MCArMSw3IEBACi0vKgotICogVmVyc2F0aWxlIEV4cHJlc3MgVjJNIE1vdGhlcmJvYXJkIFN1cHBvcnQKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+Ci0jaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxNzYwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZleHByZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3RpbWVyLXNwLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2N0LWNhOXg0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9tb3RoZXJib2FyZC5oPgotCi0jaW5jbHVkZSA8cGxhdC9zY2hlZF9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvcGxhdHNtcC5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgogCi0jZGVmaW5lIFYyTV9QQV9DUzAJMHg0MDAwMDAwMAotI2RlZmluZSBWMk1fUEFfQ1MxCTB4NDQwMDAwMDAKLSNkZWZpbmUgVjJNX1BBX0NTMgkweDQ4MDAwMDAwCi0jZGVmaW5lIFYyTV9QQV9DUzMJMHg0YzAwMDAwMAotI2RlZmluZSBWMk1fUEFfQ1M3CTB4MTAwMDAwMDAKLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB2Mm1faW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkudmlydHVhbAk9IFYyTV9QRVJJUEgsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihWMk1fUEFfQ1M3KSwKLQkJLmxlbmd0aAkJPSBTWl8xMjhLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1fc3A4MDRfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaWYgKFdBUk5fT04oIWJhc2UgfHwgaXJxID09IE5PX0lSUSkpCi0JCXJldHVybjsKLQotCXNwODA0X2Nsb2Nrc291cmNlX2luaXQoYmFzZSArIFRJTUVSXzJfQkFTRSwgInYybS10aW1lcjEiKTsKLQlzcDgwNF9jbG9ja2V2ZW50c19pbml0KGJhc2UgKyBUSU1FUl8xX0JBU0UsIGlycSwgInYybS10aW1lcjAiKTsKLX0KLQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHYybV9wY2llX2kyY19yZXNvdXJjZSA9IHsKLQkuc3RhcnQJPSBWMk1fU0VSSUFMX0JVU19QQ0ksCi0JLmVuZAk9IFYyTV9TRVJJQUxfQlVTX1BDSSArIFNaXzRLIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9wY2llX2kyY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInZlcnNhdGlsZS1pMmMiLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmdjJtX3BjaWVfaTJjX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2Mm1fZGRjX2kyY19yZXNvdXJjZSA9IHsKLQkuc3RhcnQJPSBWMk1fU0VSSUFMX0JVU19EVkksCi0JLmVuZAk9IFYyTV9TRVJJQUxfQlVTX0RWSSArIFNaXzRLIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9kZGNfaTJjX2RldmljZSA9IHsKLQkubmFtZQkJPSAidmVyc2F0aWxlLWkyYyIsCi0JLmlkCQk9IDEsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZ2Mm1fZGRjX2kyY19yZXNvdXJjZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdjJtX2V0aF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IFYyTV9MQU45MTE4LAotCQkuZW5kCT0gVjJNX0xBTjkxMTggKyBTWl82NEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IElSUV9WMk1fTEFOOTExOCwKLQkJLmVuZAk9IElSUV9WMk1fTEFOOTExOCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHYybV9ldGhfY29uZmlnID0gewotCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQsCi0JLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfSElHSCwKLQkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9QVVNIX1BVTEwsCi0JLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdjJtX2V0aF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNtc2M5MTF4IiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gdjJtX2V0aF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHYybV9ldGhfcmVzb3VyY2VzKSwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdjJtX2V0aF9jb25maWcsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdjJtX2V0aF9zdXBwbGllc1tdID0gewotCVJFR1VMQVRPUl9TVVBQTFkoInZkZHZhcmlvIiwgInNtc2M5MTF4IiksCi0JUkVHVUxBVE9SX1NVUFBMWSgidmRkMzNhIiwgInNtc2M5MTF4IiksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHYybV91c2JfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBWMk1fSVNQMTc2MSwKLQkJLmVuZAk9IFYyTV9JU1AxNzYxICsgU1pfMTI4SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CT0gSVJRX1YyTV9JU1AxNzYxLAotCQkuZW5kCT0gSVJRX1YyTV9JU1AxNzYxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpc3AxNzYwX3BsYXRmb3JtX2RhdGEgdjJtX3VzYl9jb25maWcgPSB7Ci0JLmlzX2lzcDE3NjEJCT0gdHJ1ZSwKLQkuYnVzX3dpZHRoXzE2CQk9IGZhbHNlLAotCS5wb3J0MV9vdGcJCT0gdHJ1ZSwKLQkuYW5hbG9nX29jCQk9IGZhbHNlLAotCS5kYWNrX3BvbGFyaXR5X2hpZ2gJPSBmYWxzZSwKLQkuZHJlcV9wb2xhcml0eV9oaWdoCT0gZmFsc2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2Mm1fdXNiX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaXNwMTc2MCIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHYybV91c2JfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2Mm1fdXNiX3Jlc291cmNlcyksCi0JLmRldi5wbGF0Zm9ybV9kYXRhID0gJnYybV91c2JfY29uZmlnLAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgdjJtX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDQsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHYybV9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IFYyTV9OT1IwLAotCQkuZW5kCT0gVjJNX05PUjAgKyBTWl82NE0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IFYyTV9OT1IxLAotCQkuZW5kCT0gVjJNX05PUjEgKyBTWl82NE0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdjJtX2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHYybV9mbGFzaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHYybV9mbGFzaF9yZXNvdXJjZXMpLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ2Mm1fZmxhc2hfZGF0YSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGF0YV9wbGF0Zm9ybV9pbmZvIHYybV9wYXRhX2RhdGEgPSB7Ci0JLmlvcG9ydF9zaGlmdAk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHYybV9wYXRhX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gVjJNX0NGLAotCQkuZW5kCT0gVjJNX0NGICsgMHhmZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJPSBWMk1fQ0YgKyAweDEwMCwKLQkJLmVuZAk9IFYyTV9DRiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9jZl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInBhdGFfcGxhdGZvcm0iLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB2Mm1fcGF0YV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHYybV9wYXRhX3Jlc291cmNlcyksCi0JLmRldi5wbGF0Zm9ybV9kYXRhID0gJnYybV9wYXRhX2RhdGEsCi19OwotCi1zdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSB2Mm1fbW1jaV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuc3RhdHVzCQk9IHZleHByZXNzX2dldF9tY2lfY2FyZGluLAotCS5ncGlvX2NkCT0gLTEsCi0JLmdwaW9fd3AJPSAtMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdjJtX3N5c3JlZ19yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IFYyTV9TWVNSRUdTLAotCQkuZW5kCT0gVjJNX1NZU1JFR1MgKyAweGZmZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHYybV9zeXNyZWdfZGV2aWNlID0gewotCS5uYW1lCQk9ICJ2ZXhwcmVzcy1zeXNyZWciLAotCS5pZAkJPSAtMSwKLQkucmVzb3VyY2UJPSB2Mm1fc3lzcmVnX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodjJtX3N5c3JlZ19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdjJtX211eGZwZ2FfZGV2aWNlID0gewotCS5uYW1lCQk9ICJ2ZXhwcmVzcy1tdXhmcGdhIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gKHN0cnVjdCByZXNvdXJjZSBbXSkgewotCQlWRVhQUkVTU19SRVNfRlVOQygwLCA3KSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2Mm1fc2h1dGRvd25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJ2ZXhwcmVzcy1zaHV0ZG93biIsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9IChzdHJ1Y3QgcmVzb3VyY2UgW10pIHsKLQkJVkVYUFJFU1NfUkVTX0ZVTkMoMCwgOCksCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdjJtX3JlYm9vdF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInZleHByZXNzLXJlYm9vdCIsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9IChzdHJ1Y3QgcmVzb3VyY2UgW10pIHsKLQkJVkVYUFJFU1NfUkVTX0ZVTkMoMCwgOSksCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdjJtX2R2aW1vZGVfZGV2aWNlID0gewotCS5uYW1lCQk9ICJ2ZXhwcmVzcy1kdmltb2RlIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gKHN0cnVjdCByZXNvdXJjZSBbXSkgewotCQlWRVhQUkVTU19SRVNfRlVOQygwLCAxMSksCi0JfQotfTsKLQotc3RhdGljIEFNQkFfQVBCX0RFVklDRShhYWNpLCAgIm1iOmFhY2kiLCAgMCwgVjJNX0FBQ0ksIElSUV9WMk1fQUFDSSwgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKG1tY2ksICAibWI6bW1jaSIsICAwLCBWMk1fTU1DSSwgSVJRX1YyTV9NTUNJLCAmdjJtX21tY2lfZGF0YSk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKGttaTAsICAibWI6a21pMCIsICAwLCBWMk1fS01JMCwgSVJRX1YyTV9LTUkwLCBOVUxMKTsKLXN0YXRpYyBBTUJBX0FQQl9ERVZJQ0Uoa21pMSwgICJtYjprbWkxIiwgIDAsIFYyTV9LTUkxLCBJUlFfVjJNX0tNSTEsIE5VTEwpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRSh1YXJ0MCwgIm1iOnVhcnQwIiwgMCwgVjJNX1VBUlQwLCBJUlFfVjJNX1VBUlQwLCBOVUxMKTsKLXN0YXRpYyBBTUJBX0FQQl9ERVZJQ0UodWFydDEsICJtYjp1YXJ0MSIsIDAsIFYyTV9VQVJUMSwgSVJRX1YyTV9VQVJUMSwgTlVMTCk7Ci1zdGF0aWMgQU1CQV9BUEJfREVWSUNFKHVhcnQyLCAibWI6dWFydDIiLCAwLCBWMk1fVUFSVDIsIElSUV9WMk1fVUFSVDIsIE5VTEwpOwotc3RhdGljIEFNQkFfQVBCX0RFVklDRSh1YXJ0MywgIm1iOnVhcnQzIiwgMCwgVjJNX1VBUlQzLCBJUlFfVjJNX1VBUlQzLCBOVUxMKTsKLXN0YXRpYyBBTUJBX0FQQl9ERVZJQ0Uod2R0LCAgICJtYjp3ZHQiLCAgIDAsIFYyTV9XRFQsIElSUV9WMk1fV0RULCBOVUxMKTsKLXN0YXRpYyBBTUJBX0FQQl9ERVZJQ0UocnRjLCAgICJtYjpydGMiLCAgIDAsIFYyTV9SVEMsIElSUV9WMk1fUlRDLCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqdjJtX2FtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7Ci0JJmFhY2lfZGV2aWNlLAotCSZtbWNpX2RldmljZSwKLQkma21pMF9kZXZpY2UsCi0JJmttaTFfZGV2aWNlLAotCSZ1YXJ0MF9kZXZpY2UsCi0JJnVhcnQxX2RldmljZSwKLQkmdWFydDJfZGV2aWNlLAotCSZ1YXJ0M19kZXZpY2UsCi0JJndkdF9kZXZpY2UsCi0JJnJ0Y19kZXZpY2UsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdjJtX3RpbWVyX2luaXQodm9pZCkKLXsKLQl2ZXhwcmVzc19jbGtfaW5pdChpb3JlbWFwKFYyTV9TWVNDVEwsIFNaXzRLKSk7Ci0JdjJtX3NwODA0X2luaXQoaW9yZW1hcChWMk1fVElNRVIwMSwgU1pfNEspLCBJUlFfVjJNX1RJTUVSMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1faW5pdF9lYXJseSh2b2lkKQotewotCWlmIChjdF9kZXNjLT5pbml0X2Vhcmx5KQotCQljdF9kZXNjLT5pbml0X2Vhcmx5KCk7Ci0JdmVyc2F0aWxlX3NjaGVkX2Nsb2NrX2luaXQodmV4cHJlc3NfZ2V0XzI0bWh6X2Nsb2NrX2Jhc2UoKSwgMjQwMDAwMDApOwotfQotCi1zdHJ1Y3QgY3RfZGVzYyAqY3RfZGVzYzsKLQotc3RhdGljIHN0cnVjdCBjdF9kZXNjICpjdF9kZXNjc1tdIF9faW5pdGRhdGEgPSB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfVkVYUFJFU1NfQ0E5WDQKLQkmY3RfY2E5eDRfZGVzYywKLSNlbmRpZgotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHYybV9wb3B1bGF0ZV9jdF9kZXNjKHZvaWQpCi17Ci0JaW50IGk7Ci0JdTMyIGN1cnJlbnRfdGlsZV9pZDsKLQotCWN0X2Rlc2MgPSBOVUxMOwotCWN1cnJlbnRfdGlsZV9pZCA9IHZleHByZXNzX2dldF9wcm9jaWQoVkVYUFJFU1NfU0lURV9NQVNURVIpCi0JCQkJJiBWMk1fQ1RfSURfTUFTSzsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0X2Rlc2NzKSAmJiAhY3RfZGVzYzsgKytpKQotCQlpZiAoY3RfZGVzY3NbaV0tPmlkID09IGN1cnJlbnRfdGlsZV9pZCkKLQkJCWN0X2Rlc2MgPSBjdF9kZXNjc1tpXTsKLQotCWlmICghY3RfZGVzYykKLQkJcGFuaWMoInZleHByZXNzOiB0aGlzIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGNvcmUgdGlsZSBJRCAweCUwOHggd2hlbiBib290aW5nIHZpYSBBVEFHcy5cbiIKLQkJICAgICAgIllvdSBtYXkgbmVlZCBhIGRldmljZSB0cmVlIGJsb2Igb3IgYSBkaWZmZXJlbnQga2VybmVsIHRvIGJvb3Qgb24gdGhpcyBib2FyZC5cbiIsCi0JCSAgICAgIGN1cnJlbnRfdGlsZV9pZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1fbWFwX2lvKHZvaWQpCi17Ci0JaW90YWJsZV9pbml0KHYybV9pb19kZXNjLCBBUlJBWV9TSVpFKHYybV9pb19kZXNjKSk7Ci0JdmV4cHJlc3Nfc3lzcmVnX2Vhcmx5X2luaXQoaW9yZW1hcChWMk1fU1lTUkVHUywgU1pfNEspKTsKLQl2Mm1fcG9wdWxhdGVfY3RfZGVzYygpOwotCWN0X2Rlc2MtPm1hcF9pbygpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgdjJtX2luaXRfaXJxKHZvaWQpCi17Ci0JY3RfZGVzYy0+aW5pdF9pcnEoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHYybV9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlyZWd1bGF0b3JfcmVnaXN0ZXJfZml4ZWQoMCwgdjJtX2V0aF9zdXBwbGllcywKLQkJCUFSUkFZX1NJWkUodjJtX2V0aF9zdXBwbGllcykpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fc3lzcmVnX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fcGNpZV9pMmNfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnYybV9kZGNfaTJjX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fZmxhc2hfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnYybV9jZl9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdjJtX2V0aF9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdjJtX3VzYl9kZXZpY2UpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodjJtX2FtYmFfZGV2cyk7IGkrKykKLQkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIodjJtX2FtYmFfZGV2c1tpXSwgJmlvbWVtX3Jlc291cmNlKTsKLQotCXZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoJnYybV9tdXhmcGdhX2RldmljZSk7Ci0JdmV4cHJlc3Nfc3lzY2ZnX2RldmljZV9yZWdpc3RlcigmdjJtX3NodXRkb3duX2RldmljZSk7Ci0JdmV4cHJlc3Nfc3lzY2ZnX2RldmljZV9yZWdpc3RlcigmdjJtX3JlYm9vdF9kZXZpY2UpOwotCXZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoJnYybV9kdmltb2RlX2RldmljZSk7Ci0KLQljdF9kZXNjLT5pbml0X3RpbGUoKTsKLX0KLQotTUFDSElORV9TVEFSVChWRVhQUkVTUywgIkFSTS1WZXJzYXRpbGUgRXhwcmVzcyIpCi0JLmF0YWdfb2Zmc2V0CT0gMHgxMDAsCi0JLnNtcAkJPSBzbXBfb3BzKHZleHByZXNzX3NtcF9vcHMpLAotCS5tYXBfaW8JCT0gdjJtX21hcF9pbywKLQkuaW5pdF9lYXJseQk9IHYybV9pbml0X2Vhcmx5LAotCS5pbml0X2lycQk9IHYybV9pbml0X2lycSwKLQkuaW5pdF90aW1lCT0gdjJtX3RpbWVyX2luaXQsCi0JLmluaXRfbWFjaGluZQk9IHYybV9pbml0LAotTUFDSElORV9FTkQKLQotc3RhdGljIHZvaWQgX19pbml0IHYybV9kdF9pbml0KHZvaWQpCi17Ci0Jb2ZfcGxhdGZvcm1fcG9wdWxhdGUoTlVMTCwgb2ZfZGVmYXVsdF9idXNfbWF0Y2hfdGFibGUsIE5VTEwsIE5VTEwpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHYybV9kdF9tYXRjaFtdIF9faW5pdGNvbnN0ID0gewogCSJhcm0sdmV4cHJlc3MiLAogCU5VTEwsCkBAIC0zODYsNSArMTMsNCBAQAogCS5sMmNfYXV4X21hc2sJPSAweGZlMGZmZmZmLAogCS5zbXAJCT0gc21wX29wcyh2ZXhwcmVzc19zbXBfZHRfb3BzKSwKIAkuc21wX2luaXQJPSBzbXBfaW5pdF9vcHModmV4cHJlc3Nfc21wX2luaXRfb3BzKSwKLQkuaW5pdF9tYWNoaW5lCT0gdjJtX2R0X2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC16eW5xL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC16eW5xL01ha2VmaWxlCmluZGV4IGM4NWZiM2YuLmIwM2E5N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtenlucS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXp5bnEvTWFrZWZpbGUKQEAgLTQsNiArNCw0IEBACiAKICMgQ29tbW9uIHN1cHBvcnQKIG9iai15CQkJCTo9IGNvbW1vbi5vIHNsY3IubyBwbS5vCi1DRkxBR1NfUkVNT1ZFX2hvdHBsdWcubwkJPS1tYXJjaD1hcm12NmsKLUNGTEFHU19ob3RwbHVnLm8gCQk9LVdhLC1tYXJjaD1hcm12Ny1hIC1tY3B1PWNvcnRleC1hOQogb2JqLSQoQ09ORklHX1NNUCkJCSs9IGhlYWRzbXAubyBwbGF0c21wLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtenlucS9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtenlucS9jb21tb24uaAppbmRleCAyYmM3MTI3Li4zODJjNjBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5oCkBAIC0yOSw3ICsyOSw2IEBACiBleHRlcm4gdTMyIHp5bnFfc2xjcl9nZXRfZGV2aWNlX2lkKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1NNUAotZXh0ZXJuIHZvaWQgc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7CiBleHRlcm4gY2hhciB6eW5xX3NlY29uZGFyeV90cmFtcG9saW5lOwogZXh0ZXJuIGNoYXIgenlucV9zZWNvbmRhcnlfdHJhbXBvbGluZV9qdW1wOwogZXh0ZXJuIGNoYXIgenlucV9zZWNvbmRhcnlfdHJhbXBvbGluZV9lbmQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXp5bnEvaG90cGx1Zy5jIGIvYXJjaC9hcm0vbWFjaC16eW5xL2hvdHBsdWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY4NWM4OS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXp5bnEvaG90cGx1Zy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFhpbGlueAotICoKLSAqIGJhc2VkIG9uIGxpbnV4L2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaG90cGx1Zy5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIEFSTSBMdGQuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCA3ZWI5NGU2Li5hYjkwNmI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTIxLDcgKzIxLDcgQEAKIAogIyBBUk03MjBUCiBjb25maWcgQ1BVX0FSTTcyMFQKLQlib29sICJTdXBwb3J0IEFSTTcyMFQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKKwlib29sICJTdXBwb3J0IEFSTTcyMFQgcHJvY2Vzc29yIiBpZiAoQVJDSF9NVUxUSV9WNFQgJiYgQVJDSF9JTlRFR1JBVE9SKQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjQKQEAgLTM5LDcgKzM5LDcgQEAKIAogIyBBUk03NDBUCiBjb25maWcgQ1BVX0FSTTc0MFQKLQlib29sICJTdXBwb3J0IEFSTTc0MFQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKKwlib29sICJTdXBwb3J0IEFSTTc0MFQgcHJvY2Vzc29yIiBpZiAoQVJDSF9NVUxUSV9WNFQgJiYgQVJDSF9JTlRFR1JBVE9SKQogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VApAQCAtNzEsNyArNzEsNyBAQAogCiAjIEFSTTkyMFQKIGNvbmZpZyBDUFVfQVJNOTIwVAotCWJvb2wgIlN1cHBvcnQgQVJNOTIwVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNOTIwVCBwcm9jZXNzb3IiIGlmIChBUkNIX01VTFRJX1Y0VCAmJiBBUkNIX0lOVEVHUkFUT1IpCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCkBAIC04OSw3ICs4OSw3IEBACiAKICMgQVJNOTIyVAogY29uZmlnIENQVV9BUk05MjJUCi0JYm9vbCAiU3VwcG9ydCBBUk05MjJUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk05MjJUIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjRUICYmIEFSQ0hfSU5URUdSQVRPUikKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAjIEFSTTkyNlQKIGNvbmZpZyBDUFVfQVJNOTI2VAotCWJvb2wgIlN1cHBvcnQgQVJNOTI2VCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCisJYm9vbCAiU3VwcG9ydCBBUk05MjZUIHByb2Nlc3NvciIgaWYgKCFBUkNIX01VTFRJUExBVEZPUk0gfHwgQVJDSF9NVUxUSV9WNSkgJiYgKEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCKQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUSgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVApAQCAtMTYzLDcgKzE2Myw3IEBACiAKICMgQVJNOTQwVAogY29uZmlnIENQVV9BUk05NDBUCi0JYm9vbCAiU3VwcG9ydCBBUk05NDBUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk05NDBUIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjRUICYmIEFSQ0hfSU5URUdSQVRPUikKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX05PTU1VCkBAIC0xODEsNyArMTgxLDcgQEAKIAogIyBBUk05NDZFLVMKIGNvbmZpZyBDUFVfQVJNOTQ2RQotCWJvb2wgIlN1cHBvcnQgQVJNOTQ2RS1TIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk05NDZFLVMgcHJvY2Vzc29yIiBpZiAoQVJDSF9NVUxUSV9WNSAmJiBBUkNIX0lOVEVHUkFUT1IpCiAJZGVwZW5kcyBvbiAhTU1VCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX05PTU1VCkBAIC0xOTgsNyArMTk4LDcgQEAKIAogIyBBUk0xMDIwIC0gbmVlZHMgdmFsaWRhdGluZwogY29uZmlnIENQVV9BUk0xMDIwCi0JYm9vbCAiU3VwcG9ydCBBUk0xMDIwVCAocmV2IDApIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk0xMDIwVCAocmV2IDApIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjUgJiYgQVJDSF9JTlRFR1JBVE9SKQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCkBAIC0yMTYsNyArMjE2LDcgQEAKIAogIyBBUk0xMDIwRSAtIG5lZWRzIHZhbGlkYXRpbmcKIGNvbmZpZyBDUFVfQVJNMTAyMEUKLQlib29sICJTdXBwb3J0IEFSTTEwMjBFIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk0xMDIwRSBwcm9jZXNzb3IiIGlmIChBUkNIX01VTFRJX1Y1ICYmIEFSQ0hfSU5URUdSQVRPUikKIAlkZXBlbmRzIG9uIG4KIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VApAQCAtMjI5LDcgKzIyOSw3IEBACiAKICMgQVJNMTAyMkUKIGNvbmZpZyBDUFVfQVJNMTAyMgotCWJvb2wgIlN1cHBvcnQgQVJNMTAyMkUgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKKwlib29sICJTdXBwb3J0IEFSTTEwMjJFIHByb2Nlc3NvciIgaWYgKEFSQ0hfTVVMVElfVjUgJiYgQVJDSF9JTlRFR1JBVE9SKQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAogIyBBUk0xMDI2RUotUwogY29uZmlnIENQVV9BUk0xMDI2Ci0JYm9vbCAiU3VwcG9ydCBBUk0xMDI2RUotUyBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNMTAyNkVKLVMgcHJvY2Vzc29yIiBpZiAoQVJDSF9NVUxUSV9WNSAmJiBBUkNIX0lOVEVHUkFUT1IpCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQgIyBCdXQgbmVlZCBKYXplbGxlLCBidXQgRVY1VEogaWdub3JlcyBiaXQgMTAKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKQEAgLTM1OCw3ICszNTgsNyBAQAogCiAjIEFSTXY2CiBjb25maWcgQ1BVX1Y2Ci0JYm9vbCAiU3VwcG9ydCBBUk0gVjYgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWAorCWJvb2wgIlN1cHBvcnQgQVJNIFY2IHByb2Nlc3NvciIgaWYgKCFBUkNIX01VTFRJUExBVEZPUk0gfHwgQVJDSF9NVUxUSV9WNikgJiYgKEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IE1BQ0hfUkVBTFZJRVdfUEJYKQogCXNlbGVjdCBDUFVfMzJ2NgogCXNlbGVjdCBDUFVfQUJSVF9FVjYKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y2CkBAIC0zNzEsNyArMzcxLDcgQEAKIAogIyBBUk12NmsKIGNvbmZpZyBDUFVfVjZLCi0JYm9vbCAiU3VwcG9ydCBBUk0gVjZLIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgTUFDSF9SRUFMVklFV19QQlgKKwlib29sICJTdXBwb3J0IEFSTSBWNksgcHJvY2Vzc29yIiBpZiAoIUFSQ0hfTVVMVElQTEFURk9STSB8fCBBUkNIX01VTFRJX1Y2KSAmJiAoQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgTUFDSF9SRUFMVklFV19QQlgpCiAJc2VsZWN0IENQVV8zMnY2CiAJc2VsZWN0IENQVV8zMnY2SwogCXNlbGVjdCBDUFVfQUJSVF9FVjYKQEAgLTM4NSw3ICszODUsNyBAQAogCiAjIEFSTXY3CiBjb25maWcgQ1BVX1Y3Ci0JYm9vbCAiU3VwcG9ydCBBUk0gVjcgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWAorCWJvb2wgIlN1cHBvcnQgQVJNIFY3IHByb2Nlc3NvciIgaWYgKCFBUkNIX01VTFRJUExBVEZPUk0gfHwgQVJDSF9NVUxUSV9WNykgJiYgKEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IE1BQ0hfUkVBTFZJRVdfUEJYKQogCXNlbGVjdCBDUFVfMzJ2NksKIAlzZWxlY3QgQ1BVXzMydjcKIAlzZWxlY3QgQ1BVX0FCUlRfRVY3CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCmluZGV4IGUwNDhmNjEuLjUxNjhhNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCkBAIC0zMDYsOSArMzA2LDEwIEBACiAKICNkZWZpbmUgT1JJT05fQkxJTktfSEFMRl9QRVJJT0QgMTAwIC8qIG1zICovCiAKLWludCBvcmlvbl9ncGlvX2xlZF9ibGlua19zZXQodW5zaWduZWQgZ3BpbywgaW50IHN0YXRlLAoraW50IG9yaW9uX2dwaW9fbGVkX2JsaW5rX3NldChzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCBpbnQgc3RhdGUsCiAJdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKIHsKKwl1bnNpZ25lZCBncGlvID0gZGVzY190b19ncGlvKGRlc2MpOwogCiAJaWYgKGRlbGF5X29uICYmIGRlbGF5X29mZiAmJiAhKmRlbGF5X29uICYmICEqZGVsYXlfb2ZmKQogCQkqZGVsYXlfb24gPSAqZGVsYXlfb2ZmID0gT1JJT05fQkxJTktfSEFMRl9QRVJJT0Q7CkBAIC01MDUsOSArNTA2LDkgQEAKIAl1MzIgbWFzayA9IGQtPm1hc2s7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JcmVnX3ZhbCA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MubWFzayk7CisJcmVnX3ZhbCA9IGlycV9yZWdfcmVhZGwoZ2MsIGN0LT5yZWdzLm1hc2spOwogCXJlZ192YWwgfD0gbWFzazsKLQlpcnFfcmVnX3dyaXRlbChyZWdfdmFsLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5tYXNrKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgcmVnX3ZhbCwgY3QtPnJlZ3MubWFzayk7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiAKQEAgLTUxOSw5ICs1MjAsOSBAQAogCXUzMiByZWdfdmFsOwogCiAJaXJxX2djX2xvY2soZ2MpOwotCXJlZ192YWwgPSBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLm1hc2spOworCXJlZ192YWwgPSBpcnFfcmVnX3JlYWRsKGdjLCBjdC0+cmVncy5tYXNrKTsKIAlyZWdfdmFsICY9IH5tYXNrOwotCWlycV9yZWdfd3JpdGVsKHJlZ192YWwsIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLm1hc2spOworCWlycV9yZWdfd3JpdGVsKGdjLCByZWdfdmFsLCBjdC0+cmVncy5tYXNrKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb24tZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb24tZ3Bpby5oCmluZGV4IGU3NjM5ODguLmU4NTZiMDczYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb24tZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uLWdwaW8uaApAQCAtMTQsMTIgKzE0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisKK3N0cnVjdCBncGlvX2Rlc2M7CisKIC8qCiAgKiBPcmlvbi1zcGVjaWZpYyBHUElPIEFQSSBleHRlbnNpb25zLgogICovCiB2b2lkIG9yaW9uX2dwaW9fc2V0X3VudXNlZCh1bnNpZ25lZCBwaW4pOwogdm9pZCBvcmlvbl9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluayk7Ci1pbnQgb3Jpb25fZ3Bpb19sZWRfYmxpbmtfc2V0KHVuc2lnbmVkIGdwaW8sIGludCBzdGF0ZSwKK2ludCBvcmlvbl9ncGlvX2xlZF9ibGlua19zZXQoc3RydWN0IGdwaW9fZGVzYyAqZGVzYywgaW50IHN0YXRlLAogCXVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLCB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpOwogCiAjZGVmaW5lIEdQSU9fSU5QVVRfT0sJCSgxIDw8IDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUKaW5kZXggZjBhMDA4NC4uODc3NDZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9NYWtlZmlsZQpAQCAtMzUsNiArMzUsNyBAQAogIyBQTSBzdXBwb3J0CiAKIG9iai0kKENPTkZJR19QTV9TTEVFUCkJCSs9IHBtLWNvbW1vbi5vCitvYmotJChDT05GSUdfRVhZTk9TX0NQVV9TVVNQRU5EKSArPSBwbS1jb21tb24ubwogb2JqLSQoQ09ORklHX1NBTVNVTkdfUE0pCSs9IHBtLm8KIG9iai0kKENPTkZJR19TQU1TVU5HX1BNX0dQSU8pCSs9IHBtLWdwaW8ubwogb2JqLSQoQ09ORklHX1NBTVNVTkdfUE1fQ0hFQ0spCSs9IHBtLWNoZWNrLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9tYXAtczVwLmgKaW5kZXggZjViOWQzZi4uZjVjZjJiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9tYXAtczVwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9tYXAtczVwLmgKQEAgLTE1LDQzICsxNSwyMiBAQAogCiAjZGVmaW5lIFM1UF9WQV9DSElQSUQJCVMzQ19BRERSKDB4MDIwMDAwMDApCiAjZGVmaW5lIFM1UF9WQV9DTVUJCVMzQ19BRERSKDB4MDIxMDAwMDApCi0jZGVmaW5lIFM1UF9WQV9HUElPCQlTM0NfQUREUigweDAyMjAwMDAwKQotI2RlZmluZSBTNVBfVkFfR1BJTzEJCVM1UF9WQV9HUElPCi0jZGVmaW5lIFM1UF9WQV9HUElPMgkJUzNDX0FERFIoMHgwMjI0MDAwMCkKLSNkZWZpbmUgUzVQX1ZBX0dQSU8zCQlTM0NfQUREUigweDAyMjgwMDAwKQogCi0jZGVmaW5lIFM1UF9WQV9TWVNSQU0JCVMzQ19BRERSKDB4MDI0MDAwMDApCi0jZGVmaW5lIFM1UF9WQV9TWVNSQU1fTlMJUzNDX0FERFIoMHgwMjQxMDAwMCkKICNkZWZpbmUgUzVQX1ZBX0RNQzAJCVMzQ19BRERSKDB4MDI0NDAwMDApCiAjZGVmaW5lIFM1UF9WQV9ETUMxCQlTM0NfQUREUigweDAyNDgwMDAwKQogI2RlZmluZSBTNVBfVkFfU1JPTUMJCVMzQ19BRERSKDB4MDI0QzAwMDApCiAKLSNkZWZpbmUgUzVQX1ZBX1NZU1RJTUVSCQlTM0NfQUREUigweDAyNTAwMDAwKQotI2RlZmluZSBTNVBfVkFfTDJDQwkJUzNDX0FERFIoMHgwMjYwMDAwMCkKLQotI2RlZmluZSBTNVBfVkFfQ09NQklORVJfQkFTRQlTM0NfQUREUigweDAyNzAwMDAwKQotI2RlZmluZSBTNVBfVkFfQ09NQklORVIoeCkJKFM1UF9WQV9DT01CSU5FUl9CQVNFICsgKCh4KSA+PiAyKSAqIDB4MTApCi0KICNkZWZpbmUgUzVQX1ZBX0NPUkVQRVJJX0JBU0UJUzNDX0FERFIoMHgwMjgwMDAwMCkKICNkZWZpbmUgUzVQX1ZBX0NPUkVQRVJJKHgpCShTNVBfVkFfQ09SRVBFUklfQkFTRSArICh4KSkKICNkZWZpbmUgUzVQX1ZBX1NDVQkJUzVQX1ZBX0NPUkVQRVJJKDB4MCkKICNkZWZpbmUgUzVQX1ZBX1RXRAkJUzVQX1ZBX0NPUkVQRVJJKDB4NjAwKQogCi0jZGVmaW5lIFM1UF9WQV9HSUNfQ1BVCQlTM0NfQUREUigweDAyODEwMDAwKQotI2RlZmluZSBTNVBfVkFfR0lDX0RJU1QJCVMzQ19BRERSKDB4MDI4MjAwMDApCi0KICNkZWZpbmUgVkFfVklDKHgpCQkoUzNDX1ZBX0lSUSArICgoeCkgKiAweDEwMDAwKSkKICNkZWZpbmUgVkFfVklDMAkJCVZBX1ZJQygwKQogI2RlZmluZSBWQV9WSUMxCQkJVkFfVklDKDEpCiAjZGVmaW5lIFZBX1ZJQzIJCQlWQV9WSUMoMikKICNkZWZpbmUgVkFfVklDMwkJCVZBX1ZJQygzKQogCi0jZGVmaW5lIFM1UF9WQV9VQVJUKHgpCQkoUzNDX1ZBX1VBUlQgKyAoKHgpICogUzNDX1VBUlRfT0ZGU0VUKSkKLSNkZWZpbmUgUzVQX1ZBX1VBUlQwCQlTNVBfVkFfVUFSVCgwKQotI2RlZmluZSBTNVBfVkFfVUFSVDEJCVM1UF9WQV9VQVJUKDEpCi0jZGVmaW5lIFM1UF9WQV9VQVJUMgkJUzVQX1ZBX1VBUlQoMikKLSNkZWZpbmUgUzVQX1ZBX1VBUlQzCQlTNVBfVkFfVUFSVCgzKQotCiAjaWZuZGVmIFMzQ19VQVJUX09GRlNFVAogI2RlZmluZSBTM0NfVUFSVF9PRkZTRVQJCSgweDQwMCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL0tjb25maWcKaW5kZXggYTMwMWNhMi4uNDliOGVmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9LY29uZmlnCkBAIC00LDYgKzQsNiBAQAogCWJvb2wKIAogY29uZmlnIFBMQVRfVkVSU0FUSUxFX1NDSEVEX0NMT0NLCi0JZGVmX2Jvb2wgeQorCWJvb2wKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZwppbmRleCA5NTMyZjhkLi42YjFlYmQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L0tjb25maWcKKysrIGIvYXJjaC9hcm02NC9LY29uZmlnCkBAIC0yNCw5ICsyNCw5IEBACiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUIGlmIFNNUAogCXNlbGVjdCBHRU5FUklDX0NQVV9BVVRPUFJPQkUKIAlzZWxlY3QgR0VORVJJQ19FQVJMWV9JT1JFTUFQCi0Jc2VsZWN0IEdFTkVSSUNfSU9NQVAKIAlzZWxlY3QgR0VORVJJQ19JUlFfUFJPQkUKIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVworCXNlbGVjdCBHRU5FUklDX1BDSV9JT01BUAogCXNlbGVjdCBHRU5FUklDX1NDSEVEX0NMT0NLCiAJc2VsZWN0IEdFTkVSSUNfU01QX0lETEVfVEhSRUFECiAJc2VsZWN0IEdFTkVSSUNfU1RSTkNQWV9GUk9NX1VTRVIKQEAgLTM0LDEzICszNCwxNiBAQAogCXNlbGVjdCBHRU5FUklDX1RJTUVfVlNZU0NBTEwKIAlzZWxlY3QgSEFORExFX0RPTUFJTl9JUlEKIAlzZWxlY3QgSEFSRElSUVNfU1dfUkVTRU5ECisJc2VsZWN0IEhBVkVfQUxJR05FRF9TVFJVQ1RfUEFHRSBpZiBTTFVCCiAJc2VsZWN0IEhBVkVfQVJDSF9BVURJVFNZU0NBTEwKIAlzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUwKIAlzZWxlY3QgSEFWRV9BUkNIX0tHREIKKwlzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKIAlzZWxlY3QgSEFWRV9CUEZfSklUCiAJc2VsZWN0IEhBVkVfQ19SRUNPUkRNQ09VTlQKIAlzZWxlY3QgSEFWRV9DQ19TVEFDS1BST1RFQ1RPUgorCXNlbGVjdCBIQVZFX0NNUFhDSEdfRE9VQkxFCiAJc2VsZWN0IEhBVkVfREVCVUdfQlVHVkVSQk9TRQogCXNlbGVjdCBIQVZFX0RFQlVHX0tNRU1MRUFLCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwpAQCAtMTQyLDYgKzE0NSwxMSBAQAogCiBtZW51ICJQbGF0Zm9ybSBzZWxlY3Rpb24iCiAKK2NvbmZpZyBBUkNIX1NFQVRUTEUKKwlib29sICJBTUQgU2VhdHRsZSBTb0MgRmFtaWx5IgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBBTUQgU2VhdHRsZSBTT0MgRmFtaWx5CisKIGNvbmZpZyBBUkNIX1RIVU5ERVIKIAlib29sICJDYXZpdW0gSW5jLiBUaHVuZGVyIFNvQyBGYW1pbHkiCiAJaGVscApAQCAtMTY2LDkgKzE3NCw2IEBACiAKIG1lbnUgIkJ1cyBzdXBwb3J0IgogCi1jb25maWcgQVJNX0FNQkEKLQlib29sCi0KIGNvbmZpZyBQQ0kKIAlib29sICJQQ0kgc3VwcG9ydCIKIAloZWxwCkBAIC0xOTMsNiArMTk4LDExNCBAQAogCiBtZW51ICJLZXJuZWwgRmVhdHVyZXMiCiAKK21lbnUgIkFSTSBlcnJhdGEgd29ya2Fyb3VuZHMgdmlhIHRoZSBhbHRlcm5hdGl2ZXMgZnJhbWV3b3JrIgorCitjb25maWcgQVJNNjRfRVJSQVRVTV84MjYzMTkKKwlib29sICJDb3J0ZXgtQTUzOiA4MjYzMTk6IFN5c3RlbSBtaWdodCBkZWFkbG9jayBpZiBhIHdyaXRlIGNhbm5vdCBjb21wbGV0ZSB1bnRpbCByZWFkIGRhdGEgaXMgYWNjZXB0ZWQiCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhbiBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVlbmNlIHRvIHdvcmsgYXJvdW5kIEFSTQorCSAgZXJyYXR1bSA4MjYzMTkgb24gQ29ydGV4LUE1MyBwYXJ0cyB1cCB0byByMHAyIHdpdGggYW4gQU1CQSA0IEFDRSBvcgorCSAgQVhJIG1hc3RlciBpbnRlcmZhY2UgYW5kIGFuIEwyIGNhY2hlLgorCisJICBJZiBhIENvcnRleC1BNTMgdXNlcyBhbiBBTUJBIEFYSTQgQUNFIGludGVyZmFjZSB0byBvdGhlciBwcm9jZXNzb3JzCisJICBhbmQgaXMgdW5hYmxlIHRvIGFjY2VwdCBhIGNlcnRhaW4gd3JpdGUgdmlhIHRoaXMgaW50ZXJmYWNlLCBpdCB3aWxsCisJICBub3QgcHJvZ3Jlc3Mgb24gcmVhZCBkYXRhIHByZXNlbnRlZCBvbiB0aGUgcmVhZCBkYXRhIGNoYW5uZWwgYW5kIHRoZQorCSAgc3lzdGVtIGNhbiBkZWFkbG9jay4KKworCSAgVGhlIHdvcmthcm91bmQgcHJvbW90ZXMgZGF0YSBjYWNoZSBjbGVhbiBpbnN0cnVjdGlvbnMgdG8KKwkgIGRhdGEgY2FjaGUgY2xlYW4tYW5kLWludmFsaWRhdGUuCisJICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgZW5hYmxlIHRoZSB3b3JrYXJvdW5kLAorCSAgYXMgaXQgZGVwZW5kcyBvbiB0aGUgYWx0ZXJuYXRpdmUgZnJhbWV3b3JrLCB3aGljaCB3aWxsIG9ubHkgcGF0Y2gKKwkgIHRoZSBrZXJuZWwgaWYgYW4gYWZmZWN0ZWQgQ1BVIGlzIGRldGVjdGVkLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgQVJNNjRfRVJSQVRVTV84MjczMTkKKwlib29sICJDb3J0ZXgtQTUzOiA4MjczMTk6IERhdGEgY2FjaGUgY2xlYW4gaW5zdHJ1Y3Rpb25zIG1pZ2h0IGNhdXNlIG92ZXJsYXBwaW5nIHRyYW5zYWN0aW9ucyB0byB0aGUgaW50ZXJjb25uZWN0IgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZSB0byB3b3JrIGFyb3VuZCBBUk0KKwkgIGVycmF0dW0gODI3MzE5IG9uIENvcnRleC1BNTMgcGFydHMgdXAgdG8gcjBwMiB3aXRoIGFuIEFNQkEgNSBDSEkKKwkgIG1hc3RlciBpbnRlcmZhY2UgYW5kIGFuIEwyIGNhY2hlLgorCisJICBVbmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgdGhpcyBlcnJhdHVtIGNhbiBjYXVzZSBhIGNsZWFuIGxpbmUgZXZpY3Rpb24KKwkgIHRvIG9jY3VyIGF0IHRoZSBzYW1lIHRpbWUgYXMgYW5vdGhlciB0cmFuc2FjdGlvbiB0byB0aGUgc2FtZSBhZGRyZXNzCisJICBvbiB0aGUgQU1CQSA1IENISSBpbnRlcmZhY2UsIHdoaWNoIGNhbiBjYXVzZSBkYXRhIGNvcnJ1cHRpb24gaWYgdGhlCisJICBpbnRlcmNvbm5lY3QgcmVvcmRlcnMgdGhlIHR3byB0cmFuc2FjdGlvbnMuCisKKwkgIFRoZSB3b3JrYXJvdW5kIHByb21vdGVzIGRhdGEgY2FjaGUgY2xlYW4gaW5zdHJ1Y3Rpb25zIHRvCisJICBkYXRhIGNhY2hlIGNsZWFuLWFuZC1pbnZhbGlkYXRlLgorCSAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGVuYWJsZSB0aGUgd29ya2Fyb3VuZCwKKwkgIGFzIGl0IGRlcGVuZHMgb24gdGhlIGFsdGVybmF0aXZlIGZyYW1ld29yaywgd2hpY2ggd2lsbCBvbmx5IHBhdGNoCisJICB0aGUga2VybmVsIGlmIGFuIGFmZmVjdGVkIENQVSBpcyBkZXRlY3RlZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIEFSTTY0X0VSUkFUVU1fODI0MDY5CisJYm9vbCAiQ29ydGV4LUE1MzogODI0MDY5OiBDYWNoZSBsaW5lIG1pZ2h0IG5vdCBiZSBtYXJrZWQgYXMgY2xlYW4gYWZ0ZXIgYSBDbGVhblNoYXJlZCBzbm9vcCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVuY2UgdG8gd29yayBhcm91bmQgQVJNCisJICBlcnJhdHVtIDgyNDA2OSBvbiBDb3J0ZXgtQTUzIHBhcnRzIHVwIHRvIHIwcDIgd2hlbiBpdCBpcyBjb25uZWN0ZWQKKwkgIHRvIGEgY29oZXJlbnQgaW50ZXJjb25uZWN0LgorCisJICBJZiBhIENvcnRleC1BNTMgcHJvY2Vzc29yIGlzIGV4ZWN1dGluZyBhIHN0b3JlIG9yIHByZWZldGNoIGZvcgorCSAgd3JpdGUgaW5zdHJ1Y3Rpb24gYXQgdGhlIHNhbWUgdGltZSBhcyBhIHByb2Nlc3NvciBpbiBhbm90aGVyCisJICBjbHVzdGVyIGlzIGV4ZWN1dGluZyBhIGNhY2hlIG1haW50ZW5hbmNlIG9wZXJhdGlvbiB0byB0aGUgc2FtZQorCSAgYWRkcmVzcywgdGhlbiB0aGlzIGVycmF0dW0gbWlnaHQgY2F1c2UgYSBjbGVhbiBjYWNoZSBsaW5lIHRvIGJlCisJICBpbmNvcnJlY3RseSBtYXJrZWQgYXMgZGlydHkuCisKKwkgIFRoZSB3b3JrYXJvdW5kIHByb21vdGVzIGRhdGEgY2FjaGUgY2xlYW4gaW5zdHJ1Y3Rpb25zIHRvCisJICBkYXRhIGNhY2hlIGNsZWFuLWFuZC1pbnZhbGlkYXRlLgorCSAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2VzIG5vdCBuZWNlc3NhcmlseSBlbmFibGUgdGhlCisJICB3b3JrYXJvdW5kLCBhcyBpdCBkZXBlbmRzIG9uIHRoZSBhbHRlcm5hdGl2ZSBmcmFtZXdvcmssIHdoaWNoIHdpbGwKKwkgIG9ubHkgcGF0Y2ggdGhlIGtlcm5lbCBpZiBhbiBhZmZlY3RlZCBDUFUgaXMgZGV0ZWN0ZWQuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBBUk02NF9FUlJBVFVNXzgxOTQ3MgorCWJvb2wgIkNvcnRleC1BNTM6IDgxOTQ3MjogU3RvcmUgZXhjbHVzaXZlIGluc3RydWN0aW9ucyBtaWdodCBjYXVzZSBkYXRhIGNvcnJ1cHRpb24iCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhbiBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVlbmNlIHRvIHdvcmsgYXJvdW5kIEFSTQorCSAgZXJyYXR1bSA4MTk0NzIgb24gQ29ydGV4LUE1MyBwYXJ0cyB1cCB0byByMHAxIHdpdGggYW4gTDIgY2FjaGUKKwkgIHByZXNlbnQgd2hlbiBpdCBpcyBjb25uZWN0ZWQgdG8gYSBjb2hlcmVudCBpbnRlcmNvbm5lY3QuCisKKwkgIElmIHRoZSBwcm9jZXNzb3IgaXMgZXhlY3V0aW5nIGEgbG9hZCBhbmQgc3RvcmUgZXhjbHVzaXZlIHNlcXVlbmNlIGF0CisJICB0aGUgc2FtZSB0aW1lIGFzIGEgcHJvY2Vzc29yIGluIGFub3RoZXIgY2x1c3RlciBpcyBleGVjdXRpbmcgYSBjYWNoZQorCSAgbWFpbnRlbmFuY2Ugb3BlcmF0aW9uIHRvIHRoZSBzYW1lIGFkZHJlc3MsIHRoZW4gdGhpcyBlcnJhdHVtIG1pZ2h0CisJICBjYXVzZSBkYXRhIGNvcnJ1cHRpb24uCisKKwkgIFRoZSB3b3JrYXJvdW5kIHByb21vdGVzIGRhdGEgY2FjaGUgY2xlYW4gaW5zdHJ1Y3Rpb25zIHRvCisJICBkYXRhIGNhY2hlIGNsZWFuLWFuZC1pbnZhbGlkYXRlLgorCSAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGVuYWJsZSB0aGUgd29ya2Fyb3VuZCwKKwkgIGFzIGl0IGRlcGVuZHMgb24gdGhlIGFsdGVybmF0aXZlIGZyYW1ld29yaywgd2hpY2ggd2lsbCBvbmx5IHBhdGNoCisJICB0aGUga2VybmVsIGlmIGFuIGFmZmVjdGVkIENQVSBpcyBkZXRlY3RlZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIEFSTTY0X0VSUkFUVU1fODMyMDc1CisJYm9vbCAiQ29ydGV4LUE1NzogODMyMDc1OiBwb3NzaWJsZSBkZWFkbG9jayBvbiBtaXhpbmcgZXhjbHVzaXZlIG1lbW9yeSBhY2Nlc3NlcyB3aXRoIGRldmljZSBsb2FkcyIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVuY2UgdG8gd29yayBhcm91bmQgQVJNCisJICBlcnJhdHVtIDgzMjA3NSBvbiBDb3J0ZXgtQTU3IHBhcnRzIHVwIHRvIHIxcDIuCisKKwkgIEFmZmVjdGVkIENvcnRleC1BNTcgcGFydHMgbWlnaHQgZGVhZGxvY2sgd2hlbiBleGNsdXNpdmUgbG9hZC9zdG9yZQorCSAgaW5zdHJ1Y3Rpb25zIHRvIFdyaXRlLUJhY2sgbWVtb3J5IGFyZSBtaXhlZCB3aXRoIERldmljZSBsb2Fkcy4KKworCSAgVGhlIHdvcmthcm91bmQgaXMgdG8gcHJvbW90ZSBkZXZpY2UgbG9hZHMgdG8gdXNlIExvYWQtQWNxdWlyZQorCSAgc2VtYW50aWNzLgorCSAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGVuYWJsZSB0aGUgd29ya2Fyb3VuZCwKKwkgIGFzIGl0IGRlcGVuZHMgb24gdGhlIGFsdGVybmF0aXZlIGZyYW1ld29yaywgd2hpY2ggd2lsbCBvbmx5IHBhdGNoCisJICB0aGUga2VybmVsIGlmIGFuIGFmZmVjdGVkIENQVSBpcyBkZXRlY3RlZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworZW5kbWVudQorCisKIGNob2ljZQogCXByb21wdCAiUGFnZSBzaXplIgogCWRlZmF1bHQgQVJNNjRfNEtfUEFHRVMKQEAgLTM0NSw2ICs0NTgsMTkgQEAKIAogc291cmNlICJtbS9LY29uZmlnIgogCitjb25maWcgU0VDQ09NUAorCWJvb2wgIkVuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSIKKwktLS1oZWxwLS0tCisJICBUaGlzIGtlcm5lbCBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgbnVtYmVyIGNydW5jaGluZyBhcHBsaWNhdGlvbnMKKwkgIHRoYXQgbWF5IG5lZWQgdG8gY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUgZHVyaW5nIHRoZWlyCisJICBleGVjdXRpb24uIEJ5IHVzaW5nIHBpcGVzIG9yIG90aGVyIHRyYW5zcG9ydHMgbWFkZSBhdmFpbGFibGUgdG8KKwkgIHRoZSBwcm9jZXNzIGFzIGZpbGUgZGVzY3JpcHRvcnMgc3VwcG9ydGluZyB0aGUgcmVhZC93cml0ZQorCSAgc3lzY2FsbHMsIGl0J3MgcG9zc2libGUgdG8gaXNvbGF0ZSB0aG9zZSBhcHBsaWNhdGlvbnMgaW4KKwkgIHRoZWlyIG93biBhZGRyZXNzIHNwYWNlIHVzaW5nIHNlY2NvbXAuIE9uY2Ugc2VjY29tcCBpcworCSAgZW5hYmxlZCB2aWEgcHJjdGwoUFJfU0VUX1NFQ0NPTVApLCBpdCBjYW5ub3QgYmUgZGlzYWJsZWQKKwkgIGFuZCB0aGUgdGFzayBpcyBvbmx5IGFsbG93ZWQgdG8gZXhlY3V0ZSBhIGZldyBzYWZlIHN5c2NhbGxzCisJICBkZWZpbmVkIGJ5IGVhY2ggc2VjY29tcCBtb2RlLgorCiBjb25maWcgWEVOX0RPTTAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBYRU4KQEAgLTM2MSw2ICs0ODcsNTggQEAKIAlkZWZhdWx0ICIxNCIgaWYgKEFSTTY0XzY0S19QQUdFUyAmJiBUUkFOU1BBUkVOVF9IVUdFUEFHRSkKIAlkZWZhdWx0ICIxMSIKIAorbWVudWNvbmZpZyBBUk1WOF9ERVBSRUNBVEVECisJYm9vbCAiRW11bGF0ZSBkZXByZWNhdGVkL29ic29sZXRlIEFSTXY4IGluc3RydWN0aW9ucyIKKwlkZXBlbmRzIG9uIENPTVBBVAorCWhlbHAKKwkgIExlZ2FjeSBzb2Z0d2FyZSBzdXBwb3J0IG1heSByZXF1aXJlIGNlcnRhaW4gaW5zdHJ1Y3Rpb25zCisJICB0aGF0IGhhdmUgYmVlbiBkZXByZWNhdGVkIG9yIG9ic29sZXRlZCBpbiB0aGUgYXJjaGl0ZWN0dXJlLgorCisJICBFbmFibGUgdGhpcyBjb25maWcgdG8gZW5hYmxlIHNlbGVjdGl2ZSBlbXVsYXRpb24gb2YgdGhlc2UKKwkgIGZlYXR1cmVzLgorCisJICBJZiB1bnN1cmUsIHNheSBZCisKK2lmIEFSTVY4X0RFUFJFQ0FURUQKKworY29uZmlnIFNXUF9FTVVMQVRJT04KKwlib29sICJFbXVsYXRlIFNXUC9TV1BCIGluc3RydWN0aW9ucyIKKwloZWxwCisJICBBUk12OCBvYnNvbGV0ZXMgdGhlIHVzZSBvZiBBMzIgU1dQL1NXUEIgaW5zdHJ1Y3Rpb25zIHN1Y2ggdGhhdAorCSAgdGhleSBhcmUgYWx3YXlzIHVuZGVmaW5lZC4gU2F5IFkgaGVyZSB0byBlbmFibGUgc29mdHdhcmUKKwkgIGVtdWxhdGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgZm9yIHVzZXJzcGFjZSB1c2luZyBMRFhSL1NUWFIuCisKKwkgIEluIHNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgZ2xpYmMgWzw9Mi44XSBTV1AgaXMgdXNlZCBkdXJpbmcgZnV0ZXgKKwkgIHRyeWxvY2soKSBvcGVyYXRpb25zIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgY29kZSB3aWxsIG5vdAorCSAgYmUgcHJlZW1wdGVkLiBUaGlzIGludmFsaWQgYXNzdW1wdGlvbiBtYXkgYmUgbW9yZSBsaWtlbHkgdG8gZmFpbAorCSAgd2l0aCBTV1AgZW11bGF0aW9uIGVuYWJsZWQsIGxlYWRpbmcgdG8gZGVhZGxvY2sgb2YgdGhlIHVzZXIKKwkgIGFwcGxpY2F0aW9uLgorCisJICBOT1RFOiB3aGVuIGFjY2Vzc2luZyB1bmNhY2hlZCBzaGFyZWQgcmVnaW9ucywgTERYUi9TVFhSIHJlbHkKKwkgIG9uIGFuIGV4dGVybmFsIHRyYW5zYWN0aW9uIG1vbml0b3JpbmcgYmxvY2sgY2FsbGVkIGEgZ2xvYmFsCisJICBtb25pdG9yIHRvIG1haW50YWluIHVwZGF0ZSBhdG9taWNpdHkuIElmIHlvdXIgc3lzdGVtIGRvZXMgbm90CisJICBpbXBsZW1lbnQgYSBnbG9iYWwgbW9uaXRvciwgdGhpcyBvcHRpb24gY2FuIGNhdXNlIHByb2dyYW1zIHRoYXQKKwkgIHBlcmZvcm0gU1dQIG9wZXJhdGlvbnMgdG8gdW5jYWNoZWQgbWVtb3J5IHRvIGRlYWRsb2NrLgorCisJICBJZiB1bnN1cmUsIHNheSBZCisKK2NvbmZpZyBDUDE1X0JBUlJJRVJfRU1VTEFUSU9OCisJYm9vbCAiRW11bGF0ZSBDUDE1IEJhcnJpZXIgaW5zdHJ1Y3Rpb25zIgorCWhlbHAKKwkgIFRoZSBDUDE1IGJhcnJpZXIgaW5zdHJ1Y3Rpb25zIC0gQ1AxNUlTQiwgQ1AxNURTQiwgYW5kCisJICBDUDE1RE1CIC0gYXJlIGRlcHJlY2F0ZWQgaW4gQVJNdjggKGFuZCBBUk12NykuIEl0IGlzCisJICBzdHJvbmdseSByZWNvbW1lbmRlZCB0byB1c2UgdGhlIElTQiwgRFNCLCBhbmQgRE1CCisJICBpbnN0cnVjdGlvbnMgaW5zdGVhZC4KKworCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoZXNlCisJICBpbnN0cnVjdGlvbnMgZm9yIEFBcmNoMzIgdXNlcnNwYWNlIGNvZGUuIFdoZW4gdGhpcyBvcHRpb24gaXMKKwkgIGVuYWJsZWQsIENQMTUgYmFycmllciB1c2FnZSBpcyB0cmFjZWQgd2hpY2ggY2FuIGhlbHAKKwkgIGlkZW50aWZ5IHNvZnR3YXJlIHRoYXQgbmVlZHMgdXBkYXRpbmcuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkKKworZW5kaWYKKwogZW5kbWVudQogCiBtZW51ICJCb290IG9wdGlvbnMiCkBAIC00MDEsNiArNTc5LDE3IEBACiAJICBhbGxvdyB0aGUga2VybmVsIHRvIGJlIGJvb3RlZCBhcyBhbiBFRkkgYXBwbGljYXRpb24uIFRoaXMKIAkgIGlzIG9ubHkgdXNlZnVsIG9uIHN5c3RlbXMgdGhhdCBoYXZlIFVFRkkgZmlybXdhcmUuCiAKK2NvbmZpZyBETUkKKwlib29sICJFbmFibGUgc3VwcG9ydCBmb3IgU01CSU9TIChETUkpIHRhYmxlcyIKKwlkZXBlbmRzIG9uIEVGSQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBTTUJJT1MvRE1JIGZlYXR1cmUgZm9yIHN5c3RlbXMuCisKKwkgIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIG9uIHN5c3RlbXMgdGhhdCBoYXZlIFVFRkkgZmlybXdhcmUuCisJICBIb3dldmVyLCBldmVuIHdpdGggdGhpcyBvcHRpb24sIHRoZSByZXN1bHRhbnQga2VybmVsIHNob3VsZAorCSAgY29udGludWUgdG8gYm9vdCBvbiBleGlzdGluZyBub24tVUVGSSBwbGF0Zm9ybXMuCisKIGVuZG1lbnUKIAogbWVudSAiVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnLmRlYnVnIGIvYXJjaC9hcm02NC9LY29uZmlnLmRlYnVnCmluZGV4IDBhMTI5MzMuLjVmZGQ2ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2FybTY0L0tjb25maWcuZGVidWcKQEAgLTYsNiArNiwxOCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEFSTTY0X1BURFVNUAorCWJvb2wgIkV4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnMiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwlzZWxlY3QgREVCVUdfRlMKKyAgICAgICAgaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBzaG93IHRoZSBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCBpbiBhCisJICBkZWJ1Z2ZzIGZpbGUuIFRoaXMgaW5mb3JtYXRpb24gaXMgb25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZlbG9wZXJzCisJICB3aG8gYXJlIHdvcmtpbmcgaW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGFyZWFzIG9mIHRoZSBrZXJuZWwuCisJICBJdCBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSBpbiBhIHByb2R1Y3Rpb24KKwkgIGtlcm5lbC4KKwkgIElmIGluIGRvdWJ0LCBzYXkgIk4iCisKIGNvbmZpZyBTVFJJQ1RfREVWTUVNCiAJYm9vbCAiRmlsdGVyIGFjY2VzcyB0byAvZGV2L21lbSIKIAlkZXBlbmRzIG9uIE1NVQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvTWFrZWZpbGUKaW5kZXggMjA5MDFmZi4uMWM0M2NlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L01ha2VmaWxlCkBAIC03MCw4ICs3MCwxMyBAQAogJS5kdGI6IHNjcmlwdHMKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpL2R0cyAkKGJvb3QpL2R0cy8kQAogCi1kdGJzOiBzY3JpcHRzCi0JJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KS9kdHMgZHRicworUEhPTlkgKz0gZHRicyBkdGJzX2luc3RhbGwKKworZHRiczogcHJlcGFyZSBzY3JpcHRzCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KS9kdHMKKworZHRic19pbnN0YWxsOgorCSQoUSkkKE1BS0UpICQoZHRiaW5zdCk9JChib290KS9kdHMKIAogUEhPTlkgKz0gdmRzb19pbnN0YWxsCiB2ZHNvX2luc3RhbGw6CkBAIC04NSw2ICs5MCw3IEBACiAgIGVjaG8gICcqIEltYWdlLmd6ICAgICAgLSBDb21wcmVzc2VkIGtlcm5lbCBpbWFnZSAoYXJjaC8kKEFSQ0gpL2Jvb3QvSW1hZ2UuZ3opJwogICBlY2hvICAnICBJbWFnZSAgICAgICAgIC0gVW5jb21wcmVzc2VkIGtlcm5lbCBpbWFnZSAoYXJjaC8kKEFSQ0gpL2Jvb3QvSW1hZ2UpJwogICBlY2hvICAnKiBkdGJzICAgICAgICAgIC0gQnVpbGQgZGV2aWNlIHRyZWUgYmxvYnMgZm9yIGVuYWJsZWQgYm9hcmRzJworICBlY2hvICAnICBkdGJzX2luc3RhbGwgIC0gSW5zdGFsbCBkdGJzIHRvICQoSU5TVEFMTF9EVEJTX1BBVEgpJwogICBlY2hvICAnICBpbnN0YWxsICAgICAgIC0gSW5zdGFsbCB1bmNvbXByZXNzZWQga2VybmVsJwogICBlY2hvICAnICB6aW5zdGFsbCAgICAgIC0gSW5zdGFsbCBjb21wcmVzc2VkIGtlcm5lbCcKICAgZWNobyAgJyAgICAgICAgICAgICAgICAgIEluc3RhbGwgdXNpbmcgKHlvdXIpIH4vYmluL2luc3RhbGxrZXJuZWwgb3InCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL01ha2VmaWxlIGIvYXJjaC9hcm02NC9ib290L2R0cy9NYWtlZmlsZQppbmRleCBmODAwMWE2Li4zYjhkNDI3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvTWFrZWZpbGUKQEAgLTEsMTAgKzEsOCBAQAotZHRiLSQoQ09ORklHX0FSQ0hfVEhVTkRFUikgKz0gdGh1bmRlci04OHh4LmR0YgotZHRiLSQoQ09ORklHX0FSQ0hfVkVYUFJFU1MpICs9IHJ0c21fdmUtYWVtdjhhLmR0YiBmb3VuZGF0aW9uLXY4LmR0YgotZHRiLSQoQ09ORklHX0FSQ0hfWEdFTkUpICs9IGFwbS1tdXN0YW5nLmR0YgorZHRzLWRpcnMgKz0gYW1kCitkdHMtZGlycyArPSBhcG0KK2R0cy1kaXJzICs9IGFybQorZHRzLWRpcnMgKz0gY2F2aXVtCiAKLXRhcmdldHMgKz0gZHRicwotdGFyZ2V0cyArPSAkKGR0Yi15KQotCi1kdGJzOiAkKGFkZHByZWZpeCAkKG9iaikvLCAkKGR0Yi15KSkKLQotY2xlYW4tZmlsZXMgOj0gKi5kdGIKK2Fsd2F5cwkJOj0gJChkdGIteSkKK3N1YmRpci15CTo9ICQoZHRzLWRpcnMpCitjbGVhbi1maWxlcwk6PSAqLmR0YgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvTWFrZWZpbGUgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmRmNzAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACitkdGItJChDT05GSUdfQVJDSF9TRUFUVExFKSArPSBhbWQtb3ZlcmRyaXZlLmR0YgorCithbHdheXMJCTo9ICQoZHRiLXkpCitzdWJkaXIteQk6PSAkKGR0cy1kaXJzKQorY2xlYW4tZmlsZXMJOj0gKi5kdGIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL2FtZC1vdmVyZHJpdmUuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvYW1kLW92ZXJkcml2ZS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0YTNmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL2FtZC1vdmVyZHJpdmUuZHRzCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBEVFMgZmlsZSBmb3IgQU1EIFNlYXR0bGUgT3ZlcmRyaXZlIERldmVsb3BtZW50IEJvYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqLworCisvZHRzLXYxLzsKKworL2luY2x1ZGUvICJhbWQtc2VhdHRsZS1zb2MuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiQU1EIFNlYXR0bGUgRGV2ZWxvcG1lbnQgQm9hcmQgKE92ZXJkcml2ZSkiOworCWNvbXBhdGlibGUgPSAiYW1kLHNlYXR0bGUtb3ZlcmRyaXZlIiwgImFtZCxzZWF0dGxlIjsKKworCWNob3NlbiB7CisJCXN0ZG91dC1wYXRoID0gJnNlcmlhbDA7CisJCWxpbnV4LHBjaS1wcm9iZS1vbmx5OworCX07Cit9OworCismY2NwMCB7CisJc3RhdHVzID0gIm9rIjsKK307CisKKyZncGlvMCB7CisJc3RhdHVzID0gIm9rIjsKK307CisKKyZncGlvMSB7CisJc3RhdHVzID0gIm9rIjsKK307CisKKyZpMmMwIHsKKwlzdGF0dXMgPSAib2siOworfTsKKworJnBjaWUwIHsKKwlzdGF0dXMgPSAib2siOworfTsKKworJnNwaTAgeworCXN0YXR1cyA9ICJvayI7Cit9OworCismc3BpMSB7CisJc3RhdHVzID0gIm9rIjsKKwlzZGNhcmQwOiBzZGNhcmRAMCB7CisJCWNvbXBhdGlibGUgPSAibW1jLXNwaS1zbG90IjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisJCXZvbHRhZ2UtcmFuZ2VzID0gPDMyMDAgMzQwMD47CisJCWdwaW9zID0gPCZncGlvMCA3IDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvMD47CisJCWludGVycnVwdHMgPSA8NyAzPjsKKwkJcGwwMjIsaGllcmFyY2h5ID0gPDA+OworCQlwbDAyMixpbnRlcmZhY2UgPSA8MD47CisJCXBsMDIyLGNvbS1tb2RlID0gPDB4MD47CisJCXBsMDIyLHJ4LWxldmVsLXRyaWcgPSA8MD47CisJCXBsMDIyLHR4LWxldmVsLXRyaWcgPSA8MD47CisJfTsKK307CisKKyZ2Mm0wIHsKKwlhcm0sbXNpLWJhc2Utc3BpID0gPDY0PjsKKwlhcm0sbXNpLW51bS1zcGlzID0gPDI1Nj47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvYW1kLXNlYXR0bGUtY2xrcy5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvYW1kLXNlYXR0bGUtY2xrcy5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MjNjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FtZC9hbWQtc2VhdHRsZS1jbGtzLmR0c2kKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIERUUyBmaWxlIGZvciBBTUQgU2VhdHRsZSBDbG9ja3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICovCisKKwlhZGwzY2xrXzEwMG1oejogY2xrMTAwbWh6XzAgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFkbDNjbGtfMTAwbWh6IjsKKwl9OworCisJY2NwY2xrXzM3NW1oejogY2xrMzc1bWh6IHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDM3NTAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjY3BjbGtfMzc1bWh6IjsKKwl9OworCisJc2F0YWNsa18zMzNtaHo6IGNsazMzM21oeiB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAic2F0YWNsa18zMzNtaHoiOworCX07CisKKwlwY2llY2xrXzUwMG1oejogY2xrNTAwbWh6XzAgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gInBjaWVjbGtfNTAwbWh6IjsKKwl9OworCisJZG1hY2xrXzUwMG1oejogY2xrNTAwbWh6XzEgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NTAwMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gImRtYWNsa181MDBtaHoiOworCX07CisKKwltaXNjY2xrXzI1MG1oejogY2xrMjUwbWh6XzQgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gIm1pc2NjbGtfMjUwbWh6IjsKKwl9OworCisJdWFydHNwaWNsa18xMDBtaHo6IGNsazEwMG1oel8xIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJ1YXJ0c3BpY2xrXzEwMG1oeiI7CisJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL2FtZC1zZWF0dGxlLXNvYy5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9hbWQvYW1kLXNlYXR0bGUtc29jLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3NGQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYW1kL2FtZC1zZWF0dGxlLXNvYy5kdHNpCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogRFRTIGZpbGUgZm9yIEFNRCBTZWF0dGxlIFNvQworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKi8KKworLyB7CisJY29tcGF0aWJsZSA9ICJhbWQsc2VhdHRsZSI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljMD47CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CisKKwlnaWMwOiBpbnRlcnJ1cHQtY29udHJvbGxlckBlMTEwMTAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGdpYy00MDAiLCAiYXJtLGNvcnRleC1hMTUtZ2ljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmVnID0gPDB4MCAweGUxMTEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDB4MCAweGUxMTJmMDAwIDAgMHgyMDAwPiwKKwkJICAgICAgPDB4MCAweGUxMTQwMDAwIDAgMHgxMDAwMD4sCisJCSAgICAgIDwweDAgMHhlMTE2MDAwMCAwIDB4MTAwMDA+OworCQlpbnRlcnJ1cHRzID0gPDEgOSAweGYwND47CisJCXJhbmdlcyA9IDwwIDAgMCAweGUxMTAwMDAwIDAgMHgxMDAwMDA+OworCQl2Mm0wOiB2Mm1AZTAwODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sZ2ljLXYybS1mcmFtZSI7CisJCQltc2ktY29udHJvbGxlcjsKKwkJCXJlZyA9IDwweDAgMHgwMDA4MDAwMCAwIDB4MTAwMD47CisJCX07CisJfTsKKworCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtdGltZXIiOworCQlpbnRlcnJ1cHRzID0gPDEgMTMgMHhmZjA0PiwKKwkJCSAgICAgPDEgMTQgMHhmZjA0PiwKKwkJCSAgICAgPDEgMTEgMHhmZjA0PiwKKwkJCSAgICAgPDEgMTAgMHhmZjA0PjsKKwl9OworCisJcG11IHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtcG11djMiOworCQlpbnRlcnJ1cHRzID0gPDAgNyA0PiwKKwkJCSAgICAgPDAgOCA0PiwKKwkJCSAgICAgPDAgOSA0PiwKKwkJCSAgICAgPDAgMTAgND4sCisJCQkgICAgIDwwIDExIDQ+LAorCQkJICAgICA8MCAxMiA0PiwKKwkJCSAgICAgPDAgMTMgND4sCisJCQkgICAgIDwwIDE0IDQ+OworCX07CisKKwlzbWIwOiBzbWIgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCXJhbmdlczsKKworCQkvKiBERFIgcmFuZ2UgaXMgNDAtYml0IGFkZHJlc3NpbmcgKi8KKwkJZG1hLXJhbmdlcyA9IDwweDgwIDB4MCAweDgwIDB4MCAweDdmIDB4ZmZmZmZmZmY+OworCisJCS9pbmNsdWRlLyAiYW1kLXNlYXR0bGUtY2xrcy5kdHNpIgorCisJCXNhdGEwOiBzYXRhQGUwMzAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAic25wcyxkd2MtYWhjaSI7CisJCQlyZWcgPSA8MCAweGUwMzAwMDAwIDAgMHg4MDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDM1NSA0PjsKKwkJCWNsb2NrcyA9IDwmc2F0YWNsa18zMzNtaHo+OworCQkJZG1hLWNvaGVyZW50OworCQl9OworCisJCWkyYzA6IGkyY0BlMTAwMDAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJY29tcGF0aWJsZSA9ICJzbnBzLGRlc2lnbndhcmUtaTJjIjsKKwkJCXJlZyA9IDwwIDB4ZTEwMDAwMDAgMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDM1NyA0PjsKKwkJCWNsb2NrcyA9IDwmdWFydHNwaWNsa18xMDBtaHo+OworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEBlMTAxMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAxMSIsICJhcm0scHJpbWVjZWxsIjsKKwkJCXJlZyA9IDwwIDB4ZTEwMTAwMDAgMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDMyOCA0PjsKKwkJCWNsb2NrcyA9IDwmdWFydHNwaWNsa18xMDBtaHo+LCA8JnVhcnRzcGljbGtfMTAwbWh6PjsKKwkJCWNsb2NrLW5hbWVzID0gInVhcnRjbGsiLCAiYXBiX3BjbGsiOworCQl9OworCisJCXNwaTA6IHNzcEBlMTAyMDAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwMjIiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwwIDB4ZTEwMjAwMDAgMCAweDEwMDA+OworCQkJc3BpLWNvbnRyb2xsZXI7CisJCQlpbnRlcnJ1cHRzID0gPDAgMzMwIDQ+OworCQkJY2xvY2tzID0gPCZ1YXJ0c3BpY2xrXzEwMG1oej47CisJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJCX07CisKKwkJc3BpMTogc3NwQGUxMDMwMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQljb21wYXRpYmxlID0gImFybSxwbDAyMiIsICJhcm0scHJpbWVjZWxsIjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJcmVnID0gPDAgMHhlMTAzMDAwMCAwIDB4MTAwMD47CisJCQlzcGktY29udHJvbGxlcjsKKwkJCWludGVycnVwdHMgPSA8MCAzMjkgND47CisJCQljbG9ja3MgPSA8JnVhcnRzcGljbGtfMTAwbWh6PjsKKwkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJCW51bS1jcyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCX07CisKKwkJZ3BpbzA6IGdwaW9AZTEwNDAwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDYxIiwgImFybSxwcmltZWNlbGwiOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MCAweGUxMDQwMDAwIDAgMHgxMDAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCWludGVycnVwdHMgPSA8MCAzNTkgND47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQljbG9ja3MgPSA8JnVhcnRzcGljbGtfMTAwbWh6PjsKKwkJCWNsb2NrLW5hbWVzID0gImFwYl9wY2xrIjsKKwkJfTsKKworCQlncGlvMTogZ3Bpb0BlMTA1MDAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNjEiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwwIDB4ZTEwNTAwMDAgMCAweDEwMDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJaW50ZXJydXB0cyA9IDwwIDM1OCA0PjsKKwkJCWNsb2NrcyA9IDwmdWFydHNwaWNsa18xMDBtaHo+OworCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQl9OworCisJCWNjcDA6IGNjcEBlMDEwMDAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJY29tcGF0aWJsZSA9ICJhbWQsY2NwLXNlYXR0bGUtdjFhIjsKKwkJCXJlZyA9IDwwIDB4ZTAxMDAwMDAgMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MCAzIDQ+OworCQkJZG1hLWNvaGVyZW50OworCQl9OworCisJCXBjaWUwOiBwY2llQGYwMDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAicGNpLWhvc3QtZWNhbS1nZW5lcmljIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCWJ1cy1yYW5nZSA9IDwwIDB4N2Y+OworCQkJbXNpLXBhcmVudCA9IDwmdjJtMD47CisJCQlyZWcgPSA8MCAweGYwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQkJaW50ZXJydXB0LW1hcCA9CisJCQkJPDB4MTAwMCAweDAgMHgwIDB4MSAmZ2ljMCAweDAgMHgwIDB4MCAweDEyMCAweDE+LAorCQkJCTwweDEwMDAgMHgwIDB4MCAweDIgJmdpYzAgMHgwIDB4MCAweDAgMHgxMjEgMHgxPiwKKwkJCQk8MHgxMDAwIDB4MCAweDAgMHgzICZnaWMwIDB4MCAweDAgMHgwIDB4MTIyIDB4MT4sCisJCQkJPDB4MTAwMCAweDAgMHgwIDB4NCAmZ2ljMCAweDAgMHgwIDB4MCAweDEyMyAweDE+OworCisJCQlkbWEtY29oZXJlbnQ7CisJCQlkbWEtcmFuZ2VzID0gPDB4NDMwMDAwMDAgMHg4MCAweDAgMHg4MCAweDAgMHg3ZiAweGZmZmZmZmZmPjsKKwkJCXJhbmdlcyA9CisJCQkJLyogSS9PIE1lbW9yeSAoc2l6ZT02NEspICovCisJCQkJPDB4MDEwMDAwMDAgMHgwMCAweDAwMDAwMDAwIDB4MDAgMHhlZmZmMDAwMCAweDAwIDB4MDAwMTAwMDA+LAorCQkJCS8qIDMyLWJpdCBNTUlPIChzaXplPTJHKSAqLworCQkJCTwweDAyMDAwMDAwIDB4MDAgMHg0MDAwMDAwMCAweDAwIDB4NDAwMDAwMDAgMHgwMCAweDgwMDAwMDAwPiwKKwkJCQkvKiA2NC1iaXQgTU1JTyAoc2l6ZT0gMTI0RykgKi8KKwkJCQk8MHgwMzAwMDAwMCAweDAxIDB4MDAwMDAwMDAgMHgwMSAweDAwMDAwMDAwIDB4N2YgMHgwMDAwMDAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXBtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYWZhYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK2R0Yi0kKENPTkZJR19BUkNIX1hHRU5FKSArPSBhcG0tbXVzdGFuZy5kdGIKKworYWx3YXlzCQk6PSAkKGR0Yi15KQorc3ViZGlyLXkJOj0gJChkdHMtZGlycykKK2NsZWFuLWZpbGVzCTo9ICouZHRiCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS1tdXN0YW5nLmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXBtL2FwbS1tdXN0YW5nLmR0cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm02NC9ib290L2R0cy9hcG0tbXVzdGFuZy5kdHMKcmVuYW1lIHRvIGFyY2gvYXJtNjQvYm9vdC9kdHMvYXBtL2FwbS1tdXN0YW5nLmR0cwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hcG0tc3Rvcm0uZHRzaSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXBtL2FwbS1zdG9ybS5kdHNpCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS1zdG9ybS5kdHNpCnJlbmFtZSB0byBhcmNoL2FybTY0L2Jvb3QvZHRzL2FwbS9hcG0tc3Rvcm0uZHRzaQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDFhMGRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACitkdGItJChDT05GSUdfQVJDSF9WRVhQUkVTUykgKz0gZm91bmRhdGlvbi12OC5kdGIKK2R0Yi0kKENPTkZJR19BUkNIX1ZFWFBSRVNTKSArPSBqdW5vLmR0YgorZHRiLSQoQ09ORklHX0FSQ0hfVkVYUFJFU1MpICs9IHJ0c21fdmUtYWVtdjhhLmR0YgorCithbHdheXMJCTo9ICQoZHRiLXkpCitzdWJkaXIteQk6PSAkKGR0cy1kaXJzKQorY2xlYW4tZmlsZXMJOj0gKi5kdGIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvZm91bmRhdGlvbi12OC5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9mb3VuZGF0aW9uLXY4LmR0cwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2Jvb3QvZHRzL2ZvdW5kYXRpb24tdjguZHRzCnJlbmFtZSB0byBhcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9mb3VuZGF0aW9uLXY4LmR0cwppbmRleCA0YTA2MDkwLi4yN2YzMjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2ZvdW5kYXRpb24tdjguZHRzCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2ZvdW5kYXRpb24tdjguZHRzCkBAIC03OCwxMCArNzgsMTAgQEAKIAogCXRpbWVyIHsKIAkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtdGltZXIiOwotCQlpbnRlcnJ1cHRzID0gPDEgMTMgMHhmZjAxPiwKLQkJCSAgICAgPDEgMTQgMHhmZjAxPiwKLQkJCSAgICAgPDEgMTEgMHhmZjAxPiwKLQkJCSAgICAgPDEgMTAgMHhmZjAxPjsKKwkJaW50ZXJydXB0cyA9IDwxIDEzIDB4ZjA4PiwKKwkJCSAgICAgPDEgMTQgMHhmMDg+LAorCQkJICAgICA8MSAxMSAweGYwOD4sCisJCQkgICAgIDwxIDEwIDB4ZjA4PjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby1jbG9ja3MuZHRzaSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2p1bm8tY2xvY2tzLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyYjU2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2p1bm8tY2xvY2tzLmR0c2kKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIEFSTSBKdW5vIFBsYXRmb3JtIGNsb2NrcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IEFSTSBMdGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgYSBkdWFsIEdQTHYyIG9yIEJTRCBsaWNlbnNlLgorICoKKyAqLworCisJLyogU29DIGZpeGVkIGNsb2NrcyAqLworCXNvY191YXJ0Y2xrOiByZWZjbGs3MjczOGtoeiB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw3MjczODAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gImp1bm86dWFydGNsayI7CisJfTsKKworCXNvY191c2I0OG1oejogY2xrNDhtaHogeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiY2xrNDhtaHoiOworCX07CisKKwlzb2Nfc21jNTBtaHo6IGNsazUwbWh6IHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gInNtY19jbGsiOworCX07CisKKwlzb2NfcmVmY2xrMTAwbWh6OiByZWZjbGsxMDBtaHogeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gImFwYl9wY2xrIjsKKwl9OworCisJc29jX2ZheGljbGs6IHJlZmNsazUzM21oeiB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1MzMwMDAwMDA+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiZmF4aV9jbGsiOworCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLW1vdGhlcmJvYXJkLmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLW1vdGhlcmJvYXJkLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzOGI5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL2p1bm8tbW90aGVyYm9hcmQuZHRzaQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIEFSTSBKdW5vIFBsYXRmb3JtIG1vdGhlcmJvYXJkIHBlcmlwaGVyYWxzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgQVJNIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBhIGR1YWwgR1BMdjIgb3IgQlNEIGxpY2Vuc2UuCisgKgorICovCisKKwkJbWJfY2xrMjRtaHo6IGNsazI0bWh6IHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkJI2Nsb2NrLWNlbGxzID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDI0MDAwMDAwPjsKKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJqdW5vX21iOmNsazI0bWh6IjsKKwkJfTsKKworCQltYl9jbGsyNW1oejogY2xrMjVtaHogeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDA+OworCQkJY2xvY2stb3V0cHV0LW5hbWVzID0gImp1bm9fbWI6Y2xrMjVtaHoiOworCQl9OworCisJCW1vdGhlcmJvYXJkIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLHYycC1wMSIsICJzaW1wbGUtYnVzIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OyAgLyogU01CIGNoaXBzZWxlY3QgbnVtYmVyIGFuZCBvZmZzZXQgKi8KKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCXJhbmdlczsKKwkJCW1vZGVsID0gIlYyTS1KdW5vIjsKKwkJCWFybSxoYmkgPSA8MHgyNTI+OworCQkJYXJtLHZleHByZXNzLHNpdGUgPSA8MD47CisJCQlhcm0sdjJtLW1lbW9yeS1tYXAgPSAicnMxIjsKKworCQkJbWJfZml4ZWRfM3YzOiBmaXhlZHJlZ3VsYXRvckAwIHsKKwkJCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAiTUNDX1NCXzNWMyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCWV0aGVybmV0QDIsMDAwMDAwMDAgeworCQkJCWNvbXBhdGlibGUgPSAic21zYyxsYW45MTE4IiwgInNtc2MsbGFuOTExNSI7CisJCQkJcmVnID0gPDIgMHgwMDAwMDAwMCAweDEwMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDM+OworCQkJCXBoeS1tb2RlID0gIm1paSI7CisJCQkJcmVnLWlvLXdpZHRoID0gPDQ+OworCQkJCXNtc2MsaXJxLWFjdGl2ZS1oaWdoOworCQkJCXNtc2MsaXJxLXB1c2gtcHVsbDsKKwkJCQljbG9ja3MgPSA8Jm1iX2NsazI1bWh6PjsKKwkJCQl2ZGQzM2Etc3VwcGx5ID0gPCZtYl9maXhlZF8zdjM+OworCQkJCXZkZHZhcmlvLXN1cHBseSA9IDwmbWJfZml4ZWRfM3YzPjsKKwkJCX07CisKKwkJCXVzYkA1LDAwMDAwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gIm54cCx1c2ItaXNwMTc2MyI7CisJCQkJcmVnID0gPDUgMHgwMDAwMDAwMCAweDIwMDAwPjsKKwkJCQlidXMtd2lkdGggPSA8MTY+OworCQkJCWludGVycnVwdHMgPSA8ND47CisJCQl9OworCisJCQlpb2ZwZ2FAMywwMDAwMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhcm0sYW1iYS1idXMiLCAic2ltcGxlLWJ1cyI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmFuZ2VzID0gPDAgMyAwIDB4MjAwMDAwPjsKKworCQkJCW1tY2lAMDUwMDAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwxODAiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJCXJlZyA9IDwweDA1MDAwMCAweDEwMDA+OworCQkJCQlpbnRlcnJ1cHRzID0gPDU+OworCQkJCQkvKiBjZC1ncGlvcyA9IDwmdjJtX21tY19ncGlvcyAwIDA+OworCQkJCQl3cC1ncGlvcyA9IDwmdjJtX21tY19ncGlvcyAxIDA+OyAqLworCQkJCQltYXgtZnJlcXVlbmN5ID0gPDEyMDAwMDAwPjsKKwkJCQkJdm1tYy1zdXBwbHkgPSA8Jm1iX2ZpeGVkXzN2Mz47CisJCQkJCWNsb2NrcyA9IDwmbWJfY2xrMjRtaHo+LCA8JnNvY19zbWM1MG1oej47CisJCQkJCWNsb2NrLW5hbWVzID0gIm1jbGsiLCAiYXBiX3BjbGsiOworCQkJCX07CisKKwkJCQlrbWlAMDYwMDAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNTAiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJCXJlZyA9IDwweDA2MDAwMCAweDEwMDA+OworCQkJCQlpbnRlcnJ1cHRzID0gPDg+OworCQkJCQljbG9ja3MgPSA8Jm1iX2NsazI0bWh6PiwgPCZzb2Nfc21jNTBtaHo+OworCQkJCQljbG9jay1uYW1lcyA9ICJLTUlSRUZDTEsiLCAiYXBiX3BjbGsiOworCQkJCX07CisKKwkJCQlrbWlAMDcwMDAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhcm0scGwwNTAiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJCXJlZyA9IDwweDA3MDAwMCAweDEwMDA+OworCQkJCQlpbnRlcnJ1cHRzID0gPDg+OworCQkJCQljbG9ja3MgPSA8Jm1iX2NsazI0bWh6PiwgPCZzb2Nfc21jNTBtaHo+OworCQkJCQljbG9jay1uYW1lcyA9ICJLTUlSRUZDTEsiLCAiYXBiX3BjbGsiOworCQkJCX07CisKKwkJCQl3ZHRAMGYwMDAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhcm0sc3A4MDUiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJCXJlZyA9IDwweDBmMDAwMCAweDEwMDAwPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw3PjsKKwkJCQkJY2xvY2tzID0gPCZtYl9jbGsyNG1oej4sIDwmc29jX3NtYzUwbWh6PjsKKwkJCQkJY2xvY2stbmFtZXMgPSAid2RvZ2NsayIsICJhcGJfcGNsayI7CisJCQkJfTsKKworCQkJCXYybV90aW1lcjAxOiB0aW1lckAxMTAwMDAgeworCQkJCQljb21wYXRpYmxlID0gImFybSxzcDgwNCIsICJhcm0scHJpbWVjZWxsIjsKKwkJCQkJcmVnID0gPDB4MTEwMDAwIDB4MTAwMDA+OworCQkJCQlpbnRlcnJ1cHRzID0gPDk+OworCQkJCQljbG9ja3MgPSA8Jm1iX2NsazI0bWh6PiwgPCZzb2Nfc21jNTBtaHo+OworCQkJCQljbG9jay1uYW1lcyA9ICJ0aW1jbGtlbjEiLCAiYXBiX3BjbGsiOworCQkJCX07CisKKwkJCQl2Mm1fdGltZXIyMzogdGltZXJAMTIwMDAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhcm0sc3A4MDQiLCAiYXJtLHByaW1lY2VsbCI7CisJCQkJCXJlZyA9IDwweDEyMDAwMCAweDEwMDAwPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw5PjsKKwkJCQkJY2xvY2tzID0gPCZtYl9jbGsyNG1oej4sIDwmc29jX3NtYzUwbWh6PjsKKwkJCQkJY2xvY2stbmFtZXMgPSAidGltY2xrZW4xIiwgImFwYl9wY2xrIjsKKwkJCQl9OworCisJCQkJcnRjQDE3MDAwMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDMxIiwgImFybSxwcmltZWNlbGwiOworCQkJCQlyZWcgPSA8MHgxNzAwMDAgMHgxMDAwMD47CisJCQkJCWludGVycnVwdHMgPSA8MD47CisJCQkJCWNsb2NrcyA9IDwmc29jX3NtYzUwbWh6PjsKKwkJCQkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCQkJCX07CisJCQl9OworCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9qdW5vLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjMwNzNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hcm0vanVuby5kdHMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBBUk0gTHRkLiBKdW5vIFBsYXRmb3JtCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgQVJNIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgYSBkdWFsIEdQTHYyIG9yIEJTRCBsaWNlbnNlLgorICovCisKKy9kdHMtdjEvOworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorCisvIHsKKwltb2RlbCA9ICJBUk0gSnVubyBkZXZlbG9wbWVudCBib2FyZCAocjApIjsKKwljb21wYXRpYmxlID0gImFybSxqdW5vIiwgImFybSx2ZXhwcmVzcyI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKKworCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJnNvY191YXJ0MDsKKwl9OworCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAmc29jX3VhcnQwOworCX07CisKKwlwc2NpIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scHNjaS0wLjIiOworCQltZXRob2QgPSAic21jIjsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlBNTdfMDogY3B1QDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1NyIsImFybSxhcm12OCI7CisJCQlyZWcgPSA8MHgwIDB4MD47CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJfTsKKworCQlBNTdfMTogY3B1QDEgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1NyIsImFybSxhcm12OCI7CisJCQlyZWcgPSA8MHgwIDB4MT47CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJfTsKKworCQlBNTNfMDogY3B1QDEwMCB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIiwiYXJtLGFybXY4IjsKKwkJCXJlZyA9IDwweDAgMHgxMDA+OworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCX07CisKKwkJQTUzXzE6IGNwdUAxMDEgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyIsImFybSxhcm12OCI7CisJCQlyZWcgPSA8MHgwIDB4MTAxPjsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQl9OworCisJCUE1M18yOiBjcHVAMTAyIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiLCJhcm0sYXJtdjgiOworCQkJcmVnID0gPDB4MCAweDEwMj47CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJfTsKKworCQlBNTNfMzogY3B1QDEwMyB7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIiwiYXJtLGFybXY4IjsKKwkJCXJlZyA9IDwweDAgMHgxMDM+OworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCX07CisJfTsKKworCW1lbW9yeUA4MDAwMDAwMCB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCS8qIGxhc3QgMTZNQiBvZiB0aGUgZmlyc3QgbWVtb3J5IGFyZWEgaXMgcmVzZXJ2ZWQgZm9yIHNlY3VyZSB3b3JsZCB1c2UgYnkgZmlybXdhcmUgKi8KKwkJcmVnID0gPDB4MDAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHg3ZjAwMDAwMD4sCisJCSAgICAgIDwweDAwMDAwMDA4IDB4ODAwMDAwMDAgMHgxIDB4ODAwMDAwMDA+OworCX07CisKKwlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQDJjMDAxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sZ2ljLTQwMCIsICJhcm0sY29ydGV4LWExNS1naWMiOworCQlyZWcgPSA8MHgwIDB4MmMwMTAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MHgwIDB4MmMwMmYwMDAgMCAweDIwMDA+LAorCQkgICAgICA8MHgwIDB4MmMwNGYwMDAgMCAweDIwMDA+LAorCQkgICAgICA8MHgwIDB4MmMwNmYwMDAgMCAweDIwMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWludGVycnVwdHMgPSA8R0lDX1BQSSA5IChHSUNfQ1BVX01BU0tfU0lNUExFKDYpIHwgSVJRX1RZUEVfTEVWRUxfSElHSCk+OworCX07CisKKwl0aW1lciB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY4LXRpbWVyIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDEzIChHSUNfQ1BVX01BU0tfU0lNUExFKDYpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCisJCQkgICAgIDxHSUNfUFBJIDE0IChHSUNfQ1BVX01BU0tfU0lNUExFKDYpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCisJCQkgICAgIDxHSUNfUFBJIDExIChHSUNfQ1BVX01BU0tfU0lNUExFKDYpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT4sCisJCQkgICAgIDxHSUNfUFBJIDEwIChHSUNfQ1BVX01BU0tfU0lNUExFKDYpIHwgSVJRX1RZUEVfTEVWRUxfTE9XKT47CisJfTsKKworCXBtdSB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY4LXBtdXYzIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyMiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMjYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDMwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAwMiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKworCS9pbmNsdWRlLyAianVuby1jbG9ja3MuZHRzaSIKKworCWRtYUA3ZmYwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLHBsMzMwIiwgImFybSxwcmltZWNlbGwiOworCQlyZWcgPSA8MHgwIDB4N2ZmMDAwMDAgMCAweDEwMDA+OworCQkjZG1hLWNlbGxzID0gPDE+OworCQkjZG1hLWNoYW5uZWxzID0gPDg+OworCQkjZG1hLXJlcXVlc3RzID0gPDMyPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSA4OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgOTAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDkxIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMDggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDEwOSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMTEwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmc29jX2ZheGljbGs+OworCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CisJfTsKKworCXNvY191YXJ0MDogdWFydEA3ZmY4MDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOworCQlyZWcgPSA8MHgwIDB4N2ZmODAwMDAgMHgwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZzb2NfdWFydGNsaz4sIDwmc29jX3JlZmNsazEwMG1oej47CisJCWNsb2NrLW5hbWVzID0gInVhcnRjbGsiLCAiYXBiX3BjbGsiOworCX07CisKKwlpMmNAN2ZmYTAwMDAgeworCQljb21wYXRpYmxlID0gInNucHMsZGVzaWdud2FyZS1pMmMiOworCQlyZWcgPSA8MHgwIDB4N2ZmYTAwMDAgMHgwIDB4MTAwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEwNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisJCWkyYy1zZGEtaG9sZC10aW1lLW5zID0gPDUwMD47CisJCWNsb2NrcyA9IDwmc29jX3NtYzUwbWh6PjsKKworCQlkdmkwOiBkdmktdHJhbnNtaXR0ZXJANzAgeworCQkJY29tcGF0aWJsZSA9ICJueHAsdGRhOTk4eCI7CisJCQlyZWcgPSA8MHg3MD47CisJCX07CisKKwkJZHZpMTogZHZpLXRyYW5zbWl0dGVyQDcxIHsKKwkJCWNvbXBhdGlibGUgPSAibnhwLHRkYTk5OHgiOworCQkJcmVnID0gPDB4NzE+OworCQl9OworCX07CisKKwlvaGNpQDdmZmIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJnZW5lcmljLW9oY2kiOworCQlyZWcgPSA8MHgwIDB4N2ZmYjAwMDAgMHgwIDB4MTAwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTE2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnNvY191c2I0OG1oej47CisJfTsKKworCWVoY2lAN2ZmYzAwMDAgeworCQljb21wYXRpYmxlID0gImdlbmVyaWMtZWhjaSI7CisJCXJlZyA9IDwweDAgMHg3ZmZjMDAwMCAweDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmc29jX3VzYjQ4bWh6PjsKKwl9OworCisJbWVtb3J5LWNvbnRyb2xsZXJAN2ZmZDAwMDAgeworCQljb21wYXRpYmxlID0gImFybSxwbDM1NCIsICJhcm0scHJpbWVjZWxsIjsKKwkJcmVnID0gPDAgMHg3ZmZkMDAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSA4NiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgODcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmc29jX3NtYzUwbWh6PjsKKwkJY2xvY2stbmFtZXMgPSAiYXBiX3BjbGsiOworCX07CisKKwlzbWIgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlcyA9IDwwIDAgMCAweDA4MDAwMDAwIDB4MDQwMDAwMDA+LAorCQkJIDwxIDAgMCAweDE0MDAwMDAwIDB4MDQwMDAwMDA+LAorCQkJIDwyIDAgMCAweDE4MDAwMDAwIDB4MDQwMDAwMDA+LAorCQkJIDwzIDAgMCAweDFjMDAwMDAwIDB4MDQwMDAwMDA+LAorCQkJIDw0IDAgMCAweDBjMDAwMDAwIDB4MDQwMDAwMDA+LAorCQkJIDw1IDAgMCAweDEwMDAwMDAwIDB4MDQwMDAwMDA+OworCisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwwIDAgMTU+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAgMCAmZ2ljIDAgIDY4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgIDEgJmdpYyAwICA2OSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwICAyICZnaWMgMCAgNzAgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAgMyAmZ2ljIDAgMTYwIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgIDQgJmdpYyAwIDE2MSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwICA1ICZnaWMgMCAxNjIgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAgNiAmZ2ljIDAgMTYzIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgIDcgJmdpYyAwIDE2NCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwICA4ICZnaWMgMCAxNjUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAgOSAmZ2ljIDAgMTY2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCTwwIDAgMTAgJmdpYyAwIDE2NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQk8MCAwIDExICZnaWMgMCAxNjggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJPDAgMCAxMiAmZ2ljIDAgMTY5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCisJCS9pbmNsdWRlLyAianVuby1tb3RoZXJib2FyZC5kdHNpIgorCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9ydHNtX3ZlLWFlbXY4YS5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9ydHNtX3ZlLWFlbXY4YS5kdHMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9hcm02NC9ib290L2R0cy9ydHNtX3ZlLWFlbXY4YS5kdHMKcmVuYW1lIHRvIGFyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL3J0c21fdmUtYWVtdjhhLmR0cwppbmRleCA1NzIwMDVlLi5lZmM1OWIzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3J0c21fdmUtYWVtdjhhLmR0cworKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2FybS9ydHNtX3ZlLWFlbXY4YS5kdHMKQEAgLTgxLDEwICs4MSwxMCBAQAogCiAJdGltZXIgewogCQljb21wYXRpYmxlID0gImFybSxhcm12OC10aW1lciI7Ci0JCWludGVycnVwdHMgPSA8MSAxMyAweGZmMDE+LAotCQkJICAgICA8MSAxNCAweGZmMDE+LAotCQkJICAgICA8MSAxMSAweGZmMDE+LAotCQkJICAgICA8MSAxMCAweGZmMDE+OworCQlpbnRlcnJ1cHRzID0gPDEgMTMgMHhmMDg+LAorCQkJICAgICA8MSAxNCAweGYwOD4sCisJCQkgICAgIDwxIDExIDB4ZjA4PiwKKwkJCSAgICAgPDEgMTAgMHhmMDg+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3J0c21fdmUtbW90aGVyYm9hcmQuZHRzaSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL3J0c21fdmUtbW90aGVyYm9hcmQuZHRzaQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm02NC9ib290L2R0cy9ydHNtX3ZlLW1vdGhlcmJvYXJkLmR0c2kKcmVuYW1lIHRvIGFyY2gvYXJtNjQvYm9vdC9kdHMvYXJtL3J0c21fdmUtbW90aGVyYm9hcmQuZHRzaQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9jYXZpdW0vTWFrZWZpbGUgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2Nhdml1bS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzRmODlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9jYXZpdW0vTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACitkdGItJChDT05GSUdfQVJDSF9USFVOREVSKSArPSB0aHVuZGVyLTg4eHguZHRiCisKK2Fsd2F5cwkJOj0gJChkdGIteSkKK3N1YmRpci15CTo9ICQoZHRzLWRpcnMpCitjbGVhbi1maWxlcwk6PSAqLmR0YgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy90aHVuZGVyLTg4eHguZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9jYXZpdW0vdGh1bmRlci04OHh4LmR0cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm02NC9ib290L2R0cy90aHVuZGVyLTg4eHguZHRzCnJlbmFtZSB0byBhcmNoL2FybTY0L2Jvb3QvZHRzL2Nhdml1bS90aHVuZGVyLTg4eHguZHRzCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3RodW5kZXItODh4eC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9jYXZpdW0vdGh1bmRlci04OHh4LmR0c2kKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtNjQvYm9vdC9kdHMvdGh1bmRlci04OHh4LmR0c2kKcmVuYW1lIHRvIGFyY2gvYXJtNjQvYm9vdC9kdHMvY2F2aXVtL3RodW5kZXItODh4eC5kdHNpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL2luY2x1ZGUvZHQtYmluZGluZ3MgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2luY2x1ZGUvZHQtYmluZGluZ3MKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMDhjMDBlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvaW5jbHVkZS9kdC1iaW5kaW5ncwpAQCAtMCwwICsxIEBACisuLi8uLi8uLi8uLi8uLi9pbmNsdWRlL2R0LWJpbmRpbmdzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9jcnlwdG8vS2NvbmZpZyBiL2FyY2gvYXJtNjQvY3J5cHRvL0tjb25maWcKaW5kZXggNTU2MjY1Mi4uYTM4YjAyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9jcnlwdG8vS2NvbmZpZworKysgYi9hcmNoL2FybTY0L2NyeXB0by9LY29uZmlnCkBAIC0yNywyMCArMjcsMTkgQEAKIAl0cmlzdGF0ZSAiQUVTIGNvcmUgY2lwaGVyIHVzaW5nIEFSTXY4IENyeXB0byBFeHRlbnNpb25zIgogCWRlcGVuZHMgb24gQVJNNjQgJiYgS0VSTkVMX01PREVfTkVPTgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCi0Jc2VsZWN0IENSWVBUT19BRVMKIAogY29uZmlnIENSWVBUT19BRVNfQVJNNjRfQ0VfQ0NNCiAJdHJpc3RhdGUgIkFFUyBpbiBDQ00gbW9kZSB1c2luZyBBUk12OCBDcnlwdG8gRXh0ZW5zaW9ucyIKIAlkZXBlbmRzIG9uIEFSTTY0ICYmIEtFUk5FTF9NT0RFX05FT04KIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQotCXNlbGVjdCBDUllQVE9fQUVTCisJc2VsZWN0IENSWVBUT19BRVNfQVJNNjRfQ0UKIAlzZWxlY3QgQ1JZUFRPX0FFQUQKIAogY29uZmlnIENSWVBUT19BRVNfQVJNNjRfQ0VfQkxLCiAJdHJpc3RhdGUgIkFFUyBpbiBFQ0IvQ0JDL0NUUi9YVFMgbW9kZXMgdXNpbmcgQVJNdjggQ3J5cHRvIEV4dGVuc2lvbnMiCiAJZGVwZW5kcyBvbiBBUk02NCAmJiBLRVJORUxfTU9ERV9ORU9OCiAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKLQlzZWxlY3QgQ1JZUFRPX0FFUworCXNlbGVjdCBDUllQVE9fQUVTX0FSTTY0X0NFCiAJc2VsZWN0IENSWVBUT19BQkxLX0hFTFBFUgogCiBjb25maWcgQ1JZUFRPX0FFU19BUk02NF9ORU9OX0JMSwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLWNjbS1nbHVlLmMgYi9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2UtY2NtLWdsdWUuYwppbmRleCA5ZTZjZGRlOS4uMGFjNzNiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLWNjbS1nbHVlLmMKKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLWNjbS1nbHVlLmMKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAorI2luY2x1ZGUgImFlcy1jZS1zZXRrZXkuaCIKKwogc3RhdGljIGludCBudW1fcm91bmRzKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4KQogewogCS8qCkBAIC00OCw3ICs1MCw3IEBACiAJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgodGZtKTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gY3J5cHRvX2Flc19leHBhbmRfa2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKKwlyZXQgPSBjZV9hZXNfZXhwYW5ka2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1jaXBoZXIuYyBiL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1jaXBoZXIuYwppbmRleCAyMDc1ZTFhLi5jZTQ3NzkyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2UtY2lwaGVyLmMKKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLWNpcGhlci5jCkBAIC0xNCw2ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKKyNpbmNsdWRlICJhZXMtY2Utc2V0a2V5LmgiCisKIE1PRFVMRV9ERVNDUklQVElPTigiU3luY2hyb25vdXMgQUVTIGNpcGhlciB1c2luZyBBUk12OCBDcnlwdG8gRXh0ZW5zaW9ucyIpOwogTU9EVUxFX0FVVEhPUigiQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CkBAIC0xMjQsNiArMTI2LDExNCBAQAogCWtlcm5lbF9uZW9uX2VuZCgpOwogfQogCisvKgorICogYWVzX3N1YigpIC0gdXNlIHRoZSBhZXNlIGluc3RydWN0aW9uIHRvIHBlcmZvcm0gdGhlIEFFUyBzYm94IHN1YnN0aXR1dGlvbgorICogICAgICAgICAgICAgb24gZWFjaCBieXRlIGluICdpbnB1dCcKKyAqLworc3RhdGljIHUzMiBhZXNfc3ViKHUzMiBpbnB1dCkKK3sKKwl1MzIgcmV0OworCisJX19hc21fXygiZHVwCXYxLjRzLCAld1tpbl0JCTsiCisJCSJtb3ZpCXYwLjE2YiwgIzAJCTsiCisJCSJhZXNlCXYwLjE2YiwgdjEuMTZiCQk7IgorCQkidW1vdgkld1tvdXRdLCB2MC40c1swXQk7IgorCisJOglbb3V0XQkiPXIiKHJldCkKKwk6CVtpbl0JInIiKGlucHV0KQorCToJCSJ2MCIsInYxIik7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2VfYWVzX2V4cGFuZGtleShzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmluX2tleSwKKwkJICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwkvKgorCSAqIFRoZSBBRVMga2V5IHNjaGVkdWxlIHJvdW5kIGNvbnN0YW50cworCSAqLworCXN0YXRpYyB1OCBjb25zdCByY29uW10gPSB7CisJCTB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsCisJfTsKKworCXUzMiBrd29yZHMgPSBrZXlfbGVuIC8gc2l6ZW9mKHUzMik7CisJc3RydWN0IGFlc19ibG9jayAqa2V5X2VuYywgKmtleV9kZWM7CisJaW50IGksIGo7CisKKwlpZiAoa2V5X2xlbiAhPSBBRVNfS0VZU0laRV8xMjggJiYKKwkgICAga2V5X2xlbiAhPSBBRVNfS0VZU0laRV8xOTIgJiYKKwkgICAga2V5X2xlbiAhPSBBRVNfS0VZU0laRV8yNTYpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KGN0eC0+a2V5X2VuYywgaW5fa2V5LCBrZXlfbGVuKTsKKwljdHgtPmtleV9sZW5ndGggPSBrZXlfbGVuOworCisJa2VybmVsX25lb25fYmVnaW5fcGFydGlhbCgyKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJjb24pOyBpKyspIHsKKwkJdTMyICpya2kgPSBjdHgtPmtleV9lbmMgKyAoaSAqIGt3b3Jkcyk7CisJCXUzMiAqcmtvID0gcmtpICsga3dvcmRzOworCisJCXJrb1swXSA9IHJvcjMyKGFlc19zdWIocmtpW2t3b3JkcyAtIDFdKSwgOCkgXiByY29uW2ldIF4gcmtpWzBdOworCQlya29bMV0gPSBya29bMF0gXiBya2lbMV07CisJCXJrb1syXSA9IHJrb1sxXSBeIHJraVsyXTsKKwkJcmtvWzNdID0gcmtvWzJdIF4gcmtpWzNdOworCisJCWlmIChrZXlfbGVuID09IEFFU19LRVlTSVpFXzE5MikgeworCQkJaWYgKGkgPj0gNykKKwkJCQlicmVhazsKKwkJCXJrb1s0XSA9IHJrb1szXSBeIHJraVs0XTsKKwkJCXJrb1s1XSA9IHJrb1s0XSBeIHJraVs1XTsKKwkJfSBlbHNlIGlmIChrZXlfbGVuID09IEFFU19LRVlTSVpFXzI1NikgeworCQkJaWYgKGkgPj0gNikKKwkJCQlicmVhazsKKwkJCXJrb1s0XSA9IGFlc19zdWIocmtvWzNdKSBeIHJraVs0XTsKKwkJCXJrb1s1XSA9IHJrb1s0XSBeIHJraVs1XTsKKwkJCXJrb1s2XSA9IHJrb1s1XSBeIHJraVs2XTsKKwkJCXJrb1s3XSA9IHJrb1s2XSBeIHJraVs3XTsKKwkJfQorCX0KKworCS8qCisJICogR2VuZXJhdGUgdGhlIGRlY3J5cHRpb24ga2V5cyBmb3IgdGhlIEVxdWl2YWxlbnQgSW52ZXJzZSBDaXBoZXIuCisJICogVGhpcyBpbnZvbHZlcyByZXZlcnNpbmcgdGhlIG9yZGVyIG9mIHRoZSByb3VuZCBrZXlzLCBhbmQgYXBwbHlpbmcKKwkgKiB0aGUgSW52ZXJzZSBNaXggQ29sdW1ucyB0cmFuc2Zvcm1hdGlvbiBvbiBhbGwgYnV0IHRoZSBmaXJzdCBhbmQKKwkgKiB0aGUgbGFzdCBvbmUuCisJICovCisJa2V5X2VuYyA9IChzdHJ1Y3QgYWVzX2Jsb2NrICopY3R4LT5rZXlfZW5jOworCWtleV9kZWMgPSAoc3RydWN0IGFlc19ibG9jayAqKWN0eC0+a2V5X2RlYzsKKwlqID0gbnVtX3JvdW5kcyhjdHgpOworCisJa2V5X2RlY1swXSA9IGtleV9lbmNbal07CisJZm9yIChpID0gMSwgai0tOyBqID4gMDsgaSsrLCBqLS0pCisJCV9fYXNtX18oImxkMQl7djAuMTZifSwgJVtpbl0JCTsiCisJCQkiYWVzaW1jCXYxLjE2YiwgdjAuMTZiCQk7IgorCQkJInN0MQl7djEuMTZifSwgJVtvdXRdCTsiCisKKwkJOglbb3V0XQkiPVEiKGtleV9kZWNbaV0pCisJCToJW2luXQkiUSIoa2V5X2VuY1tqXSkKKwkJOgkJInYwIiwidjEiKTsKKwlrZXlfZGVjW2ldID0ga2V5X2VuY1swXTsKKworCWtlcm5lbF9uZW9uX2VuZCgpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjZV9hZXNfZXhwYW5ka2V5KTsKKworaW50IGNlX2Flc19zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKKwkJICB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJaW50IHJldDsKKworCXJldCA9IGNlX2Flc19leHBhbmRrZXkoY3R4LCBpbl9rZXksIGtleV9sZW4pOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCXRmbS0+Y3J0X2ZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChjZV9hZXNfc2V0a2V5KTsKKwogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFlc19hbGcgPSB7CiAJLmNyYV9uYW1lCQk9ICJhZXMiLAogCS5jcmFfZHJpdmVyX25hbWUJPSAiYWVzLWNlIiwKQEAgLTEzNSw3ICsyNDUsNyBAQAogCS5jcmFfY2lwaGVyID0gewogCQkuY2lhX21pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKIAkJLmNpYV9tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCi0JCS5jaWFfc2V0a2V5CQk9IGNyeXB0b19hZXNfc2V0X2tleSwKKwkJLmNpYV9zZXRrZXkJCT0gY2VfYWVzX3NldGtleSwKIAkJLmNpYV9lbmNyeXB0CQk9IGFlc19jaXBoZXJfZW5jcnlwdCwKIAkJLmNpYV9kZWNyeXB0CQk9IGFlc19jaXBoZXJfZGVjcnlwdAogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1zZXRrZXkuaCBiL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1zZXRrZXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDhhNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLXNldGtleS5oCkBAIC0wLDAgKzEsNSBAQAorCitpbnQgY2VfYWVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LAorCQkgIHVuc2lnbmVkIGludCBrZXlfbGVuKTsKK2ludCBjZV9hZXNfZXhwYW5ka2V5KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqaW5fa2V5LAorCQkgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1nbHVlLmMgYi9hcmNoL2FybTY0L2NyeXB0by9hZXMtZ2x1ZS5jCmluZGV4IDc5Y2Q5MTEuLjgwMWFhZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1nbHVlLmMKKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWdsdWUuYwpAQCAtMTYsOSArMTYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmZWF0dXJlLmg+CiAKKyNpbmNsdWRlICJhZXMtY2Utc2V0a2V5LmgiCisKICNpZmRlZiBVU0VfVjhfQ1JZUFRPX0VYVEVOU0lPTlMKICNkZWZpbmUgTU9ERQkJCSJjZSIKICNkZWZpbmUgUFJJTwkJCTMwMAorI2RlZmluZSBhZXNfc2V0a2V5CQljZV9hZXNfc2V0a2V5CisjZGVmaW5lIGFlc19leHBhbmRrZXkJCWNlX2Flc19leHBhbmRrZXkKICNkZWZpbmUgYWVzX2VjYl9lbmNyeXB0CQljZV9hZXNfZWNiX2VuY3J5cHQKICNkZWZpbmUgYWVzX2VjYl9kZWNyeXB0CQljZV9hZXNfZWNiX2RlY3J5cHQKICNkZWZpbmUgYWVzX2NiY19lbmNyeXB0CQljZV9hZXNfY2JjX2VuY3J5cHQKQEAgLTMwLDYgKzM0LDggQEAKICNlbHNlCiAjZGVmaW5lIE1PREUJCQkibmVvbiIKICNkZWZpbmUgUFJJTwkJCTIwMAorI2RlZmluZSBhZXNfc2V0a2V5CQljcnlwdG9fYWVzX3NldF9rZXkKKyNkZWZpbmUgYWVzX2V4cGFuZGtleQkJY3J5cHRvX2Flc19leHBhbmRfa2V5CiAjZGVmaW5lIGFlc19lY2JfZW5jcnlwdAkJbmVvbl9hZXNfZWNiX2VuY3J5cHQKICNkZWZpbmUgYWVzX2VjYl9kZWNyeXB0CQluZW9uX2Flc19lY2JfZGVjcnlwdAogI2RlZmluZSBhZXNfY2JjX2VuY3J5cHQJCW5lb25fYWVzX2NiY19lbmNyeXB0CkBAIC03OSwxMCArODUsMTAgQEAKIAlzdHJ1Y3QgY3J5cHRvX2Flc194dHNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCWludCByZXQ7CiAKLQlyZXQgPSBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoJmN0eC0+a2V5MSwgaW5fa2V5LCBrZXlfbGVuIC8gMik7CisJcmV0ID0gYWVzX2V4cGFuZGtleSgmY3R4LT5rZXkxLCBpbl9rZXksIGtleV9sZW4gLyAyKTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gY3J5cHRvX2Flc19leHBhbmRfa2V5KCZjdHgtPmtleTIsICZpbl9rZXlba2V5X2xlbiAvIDJdLAotCQkJCQkgICAga2V5X2xlbiAvIDIpOworCQlyZXQgPSBhZXNfZXhwYW5ka2V5KCZjdHgtPmtleTIsICZpbl9rZXlba2V5X2xlbiAvIDJdLAorCQkJCSAgICBrZXlfbGVuIC8gMik7CiAJaWYgKCFyZXQpCiAJCXJldHVybiAwOwogCkBAIC0yODgsNyArMjk0LDcgQEAKIAkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKIAkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKIAkJLml2c2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKLQkJLnNldGtleQkJPSBjcnlwdG9fYWVzX3NldF9rZXksCisJCS5zZXRrZXkJCT0gYWVzX3NldGtleSwKIAkJLmVuY3J5cHQJPSBlY2JfZW5jcnlwdCwKIAkJLmRlY3J5cHQJPSBlY2JfZGVjcnlwdCwKIAl9LApAQCAtMzA2LDcgKzMxMiw3IEBACiAJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCiAJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCiAJCS5pdnNpemUJCT0gQUVTX0JMT0NLX1NJWkUsCi0JCS5zZXRrZXkJCT0gY3J5cHRvX2Flc19zZXRfa2V5LAorCQkuc2V0a2V5CQk9IGFlc19zZXRrZXksCiAJCS5lbmNyeXB0CT0gY2JjX2VuY3J5cHQsCiAJCS5kZWNyeXB0CT0gY2JjX2RlY3J5cHQsCiAJfSwKQEAgLTMyNCw3ICszMzAsNyBAQAogCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAogCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAogCQkuaXZzaXplCQk9IEFFU19CTE9DS19TSVpFLAotCQkuc2V0a2V5CQk9IGNyeXB0b19hZXNfc2V0X2tleSwKKwkJLnNldGtleQkJPSBhZXNfc2V0a2V5LAogCQkuZW5jcnlwdAk9IGN0cl9lbmNyeXB0LAogCQkuZGVjcnlwdAk9IGN0cl9lbmNyeXB0LAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLWFzbS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTlhNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9fQVNNX0FMVEVSTkFUSVZFX0FTTV9ICisjZGVmaW5lIF9fQVNNX0FMVEVSTkFUSVZFX0FTTV9ICisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKworLm1hY3JvIGFsdGluc3RydWN0aW9uX2VudHJ5IG9yaWdfb2Zmc2V0IGFsdF9vZmZzZXQgZmVhdHVyZSBvcmlnX2xlbiBhbHRfbGVuCisJLndvcmQgXG9yaWdfb2Zmc2V0IC0gLgorCS53b3JkIFxhbHRfb2Zmc2V0IC0gLgorCS5od29yZCBcZmVhdHVyZQorCS5ieXRlIFxvcmlnX2xlbgorCS5ieXRlIFxhbHRfbGVuCisuZW5kbQorCisubWFjcm8gYWx0ZXJuYXRpdmVfaW5zbiBpbnNuMSBpbnNuMiBjYXAKKzY2MToJXGluc24xCis2NjI6CS5wdXNoc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCAiYSIKKwlhbHRpbnN0cnVjdGlvbl9lbnRyeSA2NjFiLCA2NjNmLCBcY2FwLCA2NjJiLTY2MWIsIDY2NGYtNjYzZgorCS5wb3BzZWN0aW9uCisJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4IgorNjYzOglcaW5zbjIKKzY2NDoJLnBvcHNlY3Rpb24KKwkuaWYgKCg2NjRiLTY2M2IpICE9ICg2NjJiLTY2MWIpKQorCQkuZXJyb3IgIkFsdGVybmF0aXZlcyBpbnN0cnVjdGlvbiBsZW5ndGggbWlzbWF0Y2giCisJLmVuZGlmCisuZW5kbQorCisjZW5kaWYgIC8qICBfX0FTU0VNQkxZX18gICovCisKKyNlbmRpZiAvKiBfX0FTTV9BTFRFUk5BVElWRV9BU01fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjFmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfX0FTTV9BTFRFUk5BVElWRV9ICisjZGVmaW5lIF9fQVNNX0FMVEVSTkFUSVZFX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisKK3N0cnVjdCBhbHRfaW5zdHIgeworCXMzMiBvcmlnX29mZnNldDsJLyogb2Zmc2V0IHRvIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJczMyIGFsdF9vZmZzZXQ7CQkvKiBvZmZzZXQgdG8gcmVwbGFjZW1lbnQgaW5zdHJ1Y3Rpb24gKi8KKwl1MTYgY3B1ZmVhdHVyZTsJCS8qIGNwdWZlYXR1cmUgYml0IHNldCBmb3IgcmVwbGFjZW1lbnQgKi8KKwl1OCAgb3JpZ19sZW47CQkvKiBzaXplIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uKHMpICovCisJdTggIGFsdF9sZW47CQkvKiBzaXplIG9mIG5ldyBpbnN0cnVjdGlvbihzKSwgPD0gb3JpZ19sZW4gKi8KK307CisKK3ZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKTsKK3ZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKTsKK3ZvaWQgZnJlZV9hbHRlcm5hdGl2ZXNfbWVtb3J5KHZvaWQpOworCisjZGVmaW5lIEFMVElOU1RSX0VOVFJZKGZlYXR1cmUpCQkJCQkJICAgICAgXAorCSIgLndvcmQgNjYxYiAtIC5cbiIJCQkJLyogbGFiZWwgICAgICAgICAgICovIFwKKwkiIC53b3JkIDY2M2YgLSAuXG4iCQkJCS8qIG5ldyBpbnN0cnVjdGlvbiAqLyBcCisJIiAuaHdvcmQgIiBfX3N0cmluZ2lmeShmZWF0dXJlKSAiXG4iCQkvKiBmZWF0dXJlIGJpdCAgICAgKi8gXAorCSIgLmJ5dGUgNjYyYi02NjFiXG4iCQkJCS8qIHNvdXJjZSBsZW4gICAgICAqLyBcCisJIiAuYnl0ZSA2NjRmLTY2M2ZcbiIJCQkJLyogcmVwbGFjZW1lbnQgbGVuICovCisKKy8qIGFsdGVybmF0aXZlIGFzc2VtYmx5IHByaW1pdGl2ZTogKi8KKyNkZWZpbmUgQUxURVJOQVRJVkUob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlKQkJCVwKKwkiNjYxOlxuXHQiCQkJCQkJCVwKKwlvbGRpbnN0ciAiXG4iCQkJCQkJCVwKKwkiNjYyOlxuIgkJCQkJCQlcCisJIi5wdXNoc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLFwiYVwiXG4iCQkJCVwKKwlBTFRJTlNUUl9FTlRSWShmZWF0dXJlKQkJCQkJCVwKKwkiLnBvcHNlY3Rpb25cbiIJCQkJCQkJXAorCSIucHVzaHNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCBcImFcIlxuIgkJCVwKKwkiNjYzOlxuXHQiCQkJCQkJCVwKKwluZXdpbnN0ciAiXG4iCQkJCQkJCVwKKwkiNjY0OlxuXHQiCQkJCQkJCVwKKwkiLnBvcHNlY3Rpb25cblx0IgkJCQkJCVwKKwkiLmlmICgoNjY0Yi02NjNiKSAhPSAoNjYyYi02NjFiKSlcblx0IgkJCQlcCisJIgkuZXJyb3IgXCJBbHRlcm5hdGl2ZXMgaW5zdHJ1Y3Rpb24gbGVuZ3RoIG1pc21hdGNoXCJcblx0IlwKKwkiLmVuZGlmXG4iCisKKyNlbmRpZiAvKiBfX0FTTV9BTFRFUk5BVElWRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfdGltZXIuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYXJjaF90aW1lci5oCmluZGV4IGYxOTA5NzEuLmIxZmE0ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYXJjaF90aW1lci5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYXJjaF90aW1lci5oCkBAIC0xMDQsNiArMTA0LDE1IEBACiAJYXNtIHZvbGF0aWxlKCJtc3IJY250a2N0bF9lbDEsICUwIiA6IDogInIiIChjbnRrY3RsKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTY0IGFyY2hfY291bnRlcl9nZXRfY250cGN0KHZvaWQpCit7CisJLyoKKwkgKiBBQXJjaDY0IGtlcm5lbCBhbmQgdXNlciBzcGFjZSBtYW5kYXRlIHRoZSB1c2Ugb2YgQ05UVkNULgorCSAqLworCUJVRygpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHU2NCBhcmNoX2NvdW50ZXJfZ2V0X2NudHZjdCh2b2lkKQogewogCXU2NCBjdmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IDg4Y2MwNWIuLmJkZTQ0OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NhY2hlLmgKQEAgLTMyLDYgKzMyLDggQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS4ucmVhZF9tb3N0bHkiKSkpCisKIHN0YXRpYyBpbmxpbmUgaW50IGNhY2hlX2xpbmVfc2l6ZSh2b2lkKQogewogCXUzMiBjd2cgPSBjYWNoZV90eXBlX2N3ZygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA2ODliNjM3Li43YWUzMWEyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNzMsNyArNzMsNyBAQAogZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOwotZXh0ZXJuIHZvaWQgX19mbHVzaF9jYWNoZV91c2VyX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiBsb25nIF9fZmx1c2hfY2FjaGVfdXNlcl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY21weGNoZy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKaW5kZXggZGRiOWQ3OC4uY2I5NTkzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNkZWZpbmUgX19BU01fQ01QWENIR19ICiAKICNpbmNsdWRlIDxsaW51eC9idWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWRlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCkBAIC0xNTIsNiArMTUzLDUxIEBACiAJcmV0dXJuIG9sZHZhbDsKIH0KIAorI2RlZmluZSBzeXN0ZW1faGFzX2NtcHhjaGdfZG91YmxlKCkgICAgIDEKKworc3RhdGljIGlubGluZSBpbnQgX19jbXB4Y2hnX2RvdWJsZSh2b2xhdGlsZSB2b2lkICpwdHIxLCB2b2xhdGlsZSB2b2lkICpwdHIyLAorCQl1bnNpZ25lZCBsb25nIG9sZDEsIHVuc2lnbmVkIGxvbmcgb2xkMiwKKwkJdW5zaWduZWQgbG9uZyBuZXcxLCB1bnNpZ25lZCBsb25nIG5ldzIsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbG9vcCwgbG9zdDsKKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgODoKKwkJVk1fQlVHX09OKCh1bnNpZ25lZCBsb25nICopcHRyMiAtICh1bnNpZ25lZCBsb25nICopcHRyMSAhPSAxKTsKKwkJZG8geworCQkJYXNtIHZvbGF0aWxlKCIvLyBfX2NtcHhjaGdfZG91YmxlOFxuIgorCQkJIglsZHhwCSUwLCAlMSwgJTJcbiIKKwkJCSIJZW9yCSUwLCAlMCwgJTNcbiIKKwkJCSIJZW9yCSUxLCAlMSwgJTRcbiIKKwkJCSIJb3JyCSUxLCAlMCwgJTFcbiIKKwkJCSIJbW92CSV3MCwgIzBcbiIKKwkJCSIJY2JuegklMSwgMWZcbiIKKwkJCSIJc3R4cAkldzAsICU1LCAlNiwgJTJcbiIKKwkJCSIxOlxuIgorCQkJCTogIj0mciIobG9vcCksICI9JnIiKGxvc3QpLCAiK1EiICgqKHU2NCAqKXB0cjEpCisJCQkJOiAiciIgKG9sZDEpLCAiciIob2xkMiksICJyIihuZXcxKSwgInIiKG5ldzIpKTsKKwkJfSB3aGlsZSAobG9vcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVSUxEX0JVRygpOworCX0KKworCXJldHVybiAhbG9zdDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19jbXB4Y2hnX2RvdWJsZV9tYih2b2xhdGlsZSB2b2lkICpwdHIxLCB2b2xhdGlsZSB2b2lkICpwdHIyLAorCQkJdW5zaWduZWQgbG9uZyBvbGQxLCB1bnNpZ25lZCBsb25nIG9sZDIsCisJCQl1bnNpZ25lZCBsb25nIG5ldzEsIHVuc2lnbmVkIGxvbmcgbmV3MiwgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCXNtcF9tYigpOworCXJldCA9IF9fY21weGNoZ19kb3VibGUocHRyMSwgcHRyMiwgb2xkMSwgb2xkMiwgbmV3MSwgbmV3Miwgc2l6ZSk7CisJc21wX21iKCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX21iKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCiAJCQkJCSB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCiB7CkBAIC0xODIsNiArMjI4LDMzIEBACiAJX19yZXQ7IFwKIH0pCiAKKyNkZWZpbmUgY21weGNoZ19kb3VibGUocHRyMSwgcHRyMiwgbzEsIG8yLCBuMSwgbjIpIFwKKyh7XAorCWludCBfX3JldDtcCisJX19yZXQgPSBfX2NtcHhjaGdfZG91YmxlX21iKChwdHIxKSwgKHB0cjIpLCAodW5zaWduZWQgbG9uZykobzEpLCBcCisJCQkodW5zaWduZWQgbG9uZykobzIpLCAodW5zaWduZWQgbG9uZykobjEpLCBcCisJCQkodW5zaWduZWQgbG9uZykobjIpLCBzaXplb2YoKihwdHIxKSkpO1wKKwlfX3JldDsgXAorfSkKKworI2RlZmluZSBjbXB4Y2hnX2RvdWJsZV9sb2NhbChwdHIxLCBwdHIyLCBvMSwgbzIsIG4xLCBuMikgXAorKHtcCisJaW50IF9fcmV0O1wKKwlfX3JldCA9IF9fY21weGNoZ19kb3VibGUoKHB0cjEpLCAocHRyMiksICh1bnNpZ25lZCBsb25nKShvMSksIFwKKwkJCSh1bnNpZ25lZCBsb25nKShvMiksICh1bnNpZ25lZCBsb25nKShuMSksIFwKKwkJCSh1bnNpZ25lZCBsb25nKShuMiksIHNpemVvZigqKHB0cjEpKSk7XAorCV9fcmV0OyBcCit9KQorCisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfMShwdHIsIG8sIG4pIGNtcHhjaGdfbG9jYWwocmF3X2NwdV9wdHIoJihwdHIpKSwgbywgbikKKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ18yKHB0ciwgbywgbikgY21weGNoZ19sb2NhbChyYXdfY3B1X3B0cigmKHB0cikpLCBvLCBuKQorI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzQocHRyLCBvLCBuKSBjbXB4Y2hnX2xvY2FsKHJhd19jcHVfcHRyKCYocHRyKSksIG8sIG4pCisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfOChwdHIsIG8sIG4pIGNtcHhjaGdfbG9jYWwocmF3X2NwdV9wdHIoJihwdHIpKSwgbywgbikKKworI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnX2RvdWJsZV84KHB0cjEsIHB0cjIsIG8xLCBvMiwgbjEsIG4yKSBcCisJY21weGNoZ19kb3VibGVfbG9jYWwocmF3X2NwdV9wdHIoJihwdHIxKSksIHJhd19jcHVfcHRyKCYocHRyMikpLCBcCisJCQkJbzEsIG8yLCBuMSwgbjIpCisKICNkZWZpbmUgY21weGNoZzY0KHB0cixvLG4pCQljbXB4Y2hnKChwdHIpLChvKSwobikpCiAjZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsbyxuKQljbXB4Y2hnX2xvY2FsKChwdHIpLChvKSwobikpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY29tcGF0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NvbXBhdC5oCmluZGV4IDU2ZGU1YWEuLjNmYjA1M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY29tcGF0LmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jb21wYXQuaApAQCAtMjA1LDYgKzIwNSwxMyBAQAogCQkJY29tcGF0X2xvbmdfdCBfYmFuZDsJLyogUE9MTF9JTiwgUE9MTF9PVVQsIFBPTExfTVNHICovCiAJCQlpbnQgX2ZkOwogCQl9IF9zaWdwb2xsOworCisJCS8qIFNJR1NZUyAqLworCQlzdHJ1Y3QgeworCQkJY29tcGF0X3VwdHJfdCBfY2FsbF9hZGRyOyAvKiBjYWxsaW5nIHVzZXIgaW5zbiAqLworCQkJaW50IF9zeXNjYWxsOwkvKiB0cmlnZ2VyaW5nIHN5c3RlbSBjYWxsIG51bWJlciAqLworCQkJY29tcGF0X3VpbnRfdCBfYXJjaDsJLyogQVVESVRfQVJDSF8qIG9mIHN5c2NhbGwgKi8KKwkJfSBfc2lnc3lzOwogCX0gX3NpZmllbGRzOwogfSBjb21wYXRfc2lnaW5mb190OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCAwNTY0NDMwLi5hY2U3MDY4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTMwLDYgKzMwLDggQEAKIAl1MzIJCXJlZ19kY3ppZDsKIAl1MzIJCXJlZ19taWRyOwogCisJdTY0CQlyZWdfaWRfYWE2NGRmcjA7CisJdTY0CQlyZWdfaWRfYWE2NGRmcjE7CiAJdTY0CQlyZWdfaWRfYWE2NGlzYXIwOwogCXU2NAkJcmVnX2lkX2FhNjRpc2FyMTsKIAl1NjQJCXJlZ19pZF9hYTY0bW1mcjA7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IGNkNGFjMDUuLjA3NTQ3Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC0yMSw5ICsyMSwzOCBAQAogI2RlZmluZSBNQVhfQ1BVX0ZFQVRVUkVTCSg4ICogc2l6ZW9mKGVsZl9od2NhcCkpCiAjZGVmaW5lIGNwdV9mZWF0dXJlKHgpCQlpbG9nMihIV0NBUF8gIyMgeCkKIAorI2RlZmluZSBBUk02NF9XT1JLQVJPVU5EX0NMRUFOX0NBQ0hFCQkwCisjZGVmaW5lIEFSTTY0X1dPUktBUk9VTkRfREVWSUNFX0xPQURfQUNRVUlSRQkxCisKKyNkZWZpbmUgQVJNNjRfTkNBUFMJCQkJMgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitleHRlcm4gREVDTEFSRV9CSVRNQVAoY3B1X2h3Y2FwcywgQVJNNjRfTkNBUFMpOworCiBzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhdmVfZmVhdHVyZSh1bnNpZ25lZCBpbnQgbnVtKQogewogCXJldHVybiBlbGZfaHdjYXAgJiAoMVVMIDw8IG51bSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBjcHVzX2hhdmVfY2FwKHVuc2lnbmVkIGludCBudW0pCit7CisJaWYgKG51bSA+PSBBUk02NF9OQ0FQUykKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0ZXN0X2JpdChudW0sIGNwdV9od2NhcHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1c19zZXRfY2FwKHVuc2lnbmVkIGludCBudW0pCit7CisJaWYgKG51bSA+PSBBUk02NF9OQ0FQUykKKwkJcHJfd2FybigiQXR0ZW1wdCB0byBzZXQgYW4gaWxsZWdhbCBDUFUgY2FwYWJpbGl0eSAoJWQgPj0gJWQpXG4iLAorCQkJbnVtLCBBUk02NF9OQ0FQUyk7CisJZWxzZQorCQlfX3NldF9iaXQobnVtLCBjcHVfaHdjYXBzKTsKK30KKwordm9pZCBjaGVja19sb2NhbF9jcHVfZXJyYXRhKHZvaWQpOworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHV0eXBlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdXR5cGUuaAppbmRleCAzNzlkMGI4Li44YWRiOTg2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdXR5cGUuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdXR5cGUuaApAQCAtNTcsNiArNTcsMTEgQEAKICNkZWZpbmUgTUlEUl9JTVBMRU1FTlRPUihtaWRyKQlcCiAJKCgobWlkcikgJiBNSURSX0lNUExFTUVOVE9SX01BU0spID4+IE1JRFJfSU1QTEVNRU5UT1JfU0hJRlQpCiAKKyNkZWZpbmUgTUlEUl9DUFVfUEFSVChpbXAsIHBhcnRudW0pIFwKKwkoKChpbXApCQkJPDwgTUlEUl9JTVBMRU1FTlRPUl9TSElGVCkgfCBcCisJKDB4ZgkJCTw8IE1JRFJfQVJDSElURUNUVVJFX1NISUZUKSB8IFwKKwkoKHBhcnRudW0pCQk8PCBNSURSX1BBUlROVU1fU0hJRlQpKQorCiAjZGVmaW5lIEFSTV9DUFVfSU1QX0FSTQkJMHg0MQogI2RlZmluZSBBUk1fQ1BVX0lNUF9BUE0JCTB4NTAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9kbWkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkMzdkOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZG1pLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZG1pLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQuCisgKiBXcml0dGVuIGJ5OiBZaSBMaSAoeWkubGlAbGluYXJvLm9yZykKKyAqCisgKiBiYXNlZCBvbiBhcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1pLmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQVNNX0RNSV9ICisjZGVmaW5lIF9fQVNNX0RNSV9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworLyoKKyAqIEFjY29yZGluZyB0byBzZWN0aW9uIDIuMy42IG9mIHRoZSBVRUZJIHNwZWMsIHRoZSBmaXJtd2FyZSBzaG91bGQgbm90CisgKiByZXF1ZXN0IGEgdmlydHVhbCBtYXBwaW5nIGZvciBjb25maWd1cmF0aW9uIHRhYmxlcyBzdWNoIGFzIFNNQklPUy4KKyAqIFRoaXMgbWVhbnMgd2UgaGF2ZSB0byBtYXAgdGhlbSBiZWZvcmUgdXNlLgorICovCisjZGVmaW5lIGRtaV9lYXJseV9yZW1hcCh4LCBsKQkJaW9yZW1hcF9jYWNoZSh4LCBsKQorI2RlZmluZSBkbWlfZWFybHlfdW5tYXAoeCwgbCkJCWlvdW5tYXAoeCkKKyNkZWZpbmUgZG1pX3JlbWFwKHgsIGwpCQkJaW9yZW1hcF9jYWNoZSh4LCBsKQorI2RlZmluZSBkbWlfdW5tYXAoeCkJCQlpb3VubWFwKHgpCisjZGVmaW5lIGRtaV9hbGxvYyhsKQkJCWt6YWxsb2MobCwgR0ZQX0tFUk5FTCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCA1ZjdiZmU2Li45ZWY2ZWNhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTMxLDYgKzMxLDcgQEAKICAqCiAgKi8KIGVudW0gZml4ZWRfYWRkcmVzc2VzIHsKKwlGSVhfSE9MRSwKIAlGSVhfRUFSTFlDT05fTUVNX0JBU0UsCiAJX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcywKIApAQCAtNTYsMTAgKzU3LDExIEBACiAKICNkZWZpbmUgRklYTUFQX1BBR0VfSU8gICAgIF9fcGdwcm90KFBST1RfREVWSUNFX25HblJFKQogCi1leHRlcm4gdm9pZCBfX2Vhcmx5X3NldF9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LAotCQkJICAgICAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IGZsYWdzKTsKK3ZvaWQgX19pbml0IGVhcmx5X2ZpeG1hcF9pbml0KHZvaWQpOwogCi0jZGVmaW5lIF9fc2V0X2ZpeG1hcCBfX2Vhcmx5X3NldF9maXhtYXAKKyNkZWZpbmUgX19lYXJseV9zZXRfZml4bWFwIF9fc2V0X2ZpeG1hcAorCitleHRlcm4gdm9pZCBfX3NldF9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LCBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90KTsKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ZpeG1hcC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h3Y2FwLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h3Y2FwLmgKaW5kZXggMDI0YzQ2MS4uMGFkNzM1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9od2NhcC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHdjYXAuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBDT01QQVRfSFdDQVBfSURJVkEJKDEgPDwgMTcpCiAjZGVmaW5lIENPTVBBVF9IV0NBUF9JRElWVAkoMSA8PCAxOCkKICNkZWZpbmUgQ09NUEFUX0hXQ0FQX0lESVYJKENPTVBBVF9IV0NBUF9JRElWQXxDT01QQVRfSFdDQVBfSURJVlQpCisjZGVmaW5lIENPTVBBVF9IV0NBUF9MUEFFCSgxIDw8IDIwKQogI2RlZmluZSBDT01QQVRfSFdDQVBfRVZUU1RSTQkoMSA8PCAyMSkKIAogI2RlZmluZSBDT01QQVRfSFdDQVAyX0FFUwkoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaAppbmRleCA1NmE5ZTYzLi5lMmZmMzJhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaApAQCAtMzU0LDYgKzM1NCwxNiBAQAogaW50IGFhcmNoNjRfaW5zbl9wYXRjaF90ZXh0X25vc3luYyh2b2lkICphZGRyLCB1MzIgaW5zbik7CiBpbnQgYWFyY2g2NF9pbnNuX3BhdGNoX3RleHRfc3luYyh2b2lkICphZGRyc1tdLCB1MzIgaW5zbnNbXSwgaW50IGNudCk7CiBpbnQgYWFyY2g2NF9pbnNuX3BhdGNoX3RleHQodm9pZCAqYWRkcnNbXSwgdTMyIGluc25zW10sIGludCBjbnQpOworCitib29sIGFhcmNoMzJfaW5zbl9pc193aWRlKHUzMiBpbnNuKTsKKworI2RlZmluZSBBMzJfUk5fT0ZGU0VUCTE2CisjZGVmaW5lIEEzMl9SVF9PRkZTRVQJMTIKKyNkZWZpbmUgQTMyX1JUMl9PRkZTRVQJIDAKKwordTMyIGFhcmNoMzJfaW5zbl9leHRyYWN0X3JlZ19udW0odTMyIGluc24sIGludCBvZmZzZXQpOwordTMyIGFhcmNoMzJfaW5zbl9tY3JfZXh0cmFjdF9vcGMyKHUzMiBpbnNuKTsKK3UzMiBhYXJjaDMyX2luc25fbWNyX2V4dHJhY3RfY3JtKHUzMiBpbnNuKTsKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmCS8qIF9fQVNNX0lOU05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDc5ZjFkNTE5Li45NDljNDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pby5oCkBAIC0yOCw1NyArMjgsODAgQEAKICNpbmNsdWRlIDxhc20vYmFycmllci5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2Vhcmx5X2lvcmVtYXAuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogCiAjaW5jbHVkZSA8eGVuL3hlbi5oPgogCiAvKgogICogR2VuZXJpYyBJTyByZWFkL3dyaXRlLiAgVGhlc2UgcGVyZm9ybSBuYXRpdmUtZW5kaWFuIGFjY2Vzc2VzLgogICovCisjZGVmaW5lIF9fcmF3X3dyaXRlYiBfX3Jhd193cml0ZWIKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWIodTggdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJYXNtIHZvbGF0aWxlKCJzdHJiICV3MCwgWyUxXSIgOiA6ICJyIiAodmFsKSwgInIiIChhZGRyKSk7CiB9CiAKKyNkZWZpbmUgX19yYXdfd3JpdGV3IF9fcmF3X3dyaXRldwogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRldyh1MTYgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJYXNtIHZvbGF0aWxlKCJzdHJoICV3MCwgWyUxXSIgOiA6ICJyIiAodmFsKSwgInIiIChhZGRyKSk7CiB9CiAKKyNkZWZpbmUgX19yYXdfd3JpdGVsIF9fcmF3X3dyaXRlbAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlbCh1MzIgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJYXNtIHZvbGF0aWxlKCJzdHIgJXcwLCBbJTFdIiA6IDogInIiICh2YWwpLCAiciIgKGFkZHIpKTsKIH0KIAorI2RlZmluZSBfX3Jhd193cml0ZXEgX19yYXdfd3JpdGVxCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVxKHU2NCB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlhc20gdm9sYXRpbGUoInN0ciAlMCwgWyUxXSIgOiA6ICJyIiAodmFsKSwgInIiIChhZGRyKSk7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZGIgX19yYXdfcmVhZGIKIHN0YXRpYyBpbmxpbmUgdTggX19yYXdfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXU4IHZhbDsKLQlhc20gdm9sYXRpbGUoImxkcmIgJXcwLCBbJTFdIiA6ICI9ciIgKHZhbCkgOiAiciIgKGFkZHIpKTsKKwlhc20gdm9sYXRpbGUoQUxURVJOQVRJVkUoImxkcmIgJXcwLCBbJTFdIiwKKwkJCQkgImxkYXJiICV3MCwgWyUxXSIsCisJCQkJIEFSTTY0X1dPUktBUk9VTkRfREVWSUNFX0xPQURfQUNRVUlSRSkKKwkJICAgICA6ICI9ciIgKHZhbCkgOiAiciIgKGFkZHIpKTsKIAlyZXR1cm4gdmFsOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWR3IF9fcmF3X3JlYWR3CiBzdGF0aWMgaW5saW5lIHUxNiBfX3Jhd19yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdTE2IHZhbDsKLQlhc20gdm9sYXRpbGUoImxkcmggJXcwLCBbJTFdIiA6ICI9ciIgKHZhbCkgOiAiciIgKGFkZHIpKTsKKworCWFzbSB2b2xhdGlsZShBTFRFUk5BVElWRSgibGRyaCAldzAsIFslMV0iLAorCQkJCSAibGRhcmggJXcwLCBbJTFdIiwKKwkJCQkgQVJNNjRfV09SS0FST1VORF9ERVZJQ0VfTE9BRF9BQ1FVSVJFKQorCQkgICAgIDogIj1yIiAodmFsKSA6ICJyIiAoYWRkcikpOwogCXJldHVybiB2YWw7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZGwgX19yYXdfcmVhZGwKIHN0YXRpYyBpbmxpbmUgdTMyIF9fcmF3X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1MzIgdmFsOwotCWFzbSB2b2xhdGlsZSgibGRyICV3MCwgWyUxXSIgOiAiPXIiICh2YWwpIDogInIiIChhZGRyKSk7CisJYXNtIHZvbGF0aWxlKEFMVEVSTkFUSVZFKCJsZHIgJXcwLCBbJTFdIiwKKwkJCQkgImxkYXIgJXcwLCBbJTFdIiwKKwkJCQkgQVJNNjRfV09SS0FST1VORF9ERVZJQ0VfTE9BRF9BQ1FVSVJFKQorCQkgICAgIDogIj1yIiAodmFsKSA6ICJyIiAoYWRkcikpOwogCXJldHVybiB2YWw7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZHEgX19yYXdfcmVhZHEKIHN0YXRpYyBpbmxpbmUgdTY0IF9fcmF3X3JlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1NjQgdmFsOwotCWFzbSB2b2xhdGlsZSgibGRyICUwLCBbJTFdIiA6ICI9ciIgKHZhbCkgOiAiciIgKGFkZHIpKTsKKwlhc20gdm9sYXRpbGUoQUxURVJOQVRJVkUoImxkciAlMCwgWyUxXSIsCisJCQkJICJsZGFyICUwLCBbJTFdIiwKKwkJCQkgQVJNNjRfV09SS0FST1VORF9ERVZJQ0VfTE9BRF9BQ1FVSVJFKQorCQkgICAgIDogIj1yIiAodmFsKSA6ICJyIiAoYWRkcikpOwogCXJldHVybiB2YWw7CiB9CiAKQEAgLTEyNSw5NCArMTQ4LDYgQEAKICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJCShTWl8zMk0gLSAxKQogI2RlZmluZSBQQ0lfSU9CQVNFCQkoKHZvaWQgX19pb21lbSAqKShNT0RVTEVTX1ZBRERSIC0gU1pfMzJNKSkKIAotc3RhdGljIGlubGluZSB1OCBpbmIodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiByZWFkYihhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IGludyh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIHJlYWR3KGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgaW5sKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gcmVhZGwoYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0Yih1OCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jd3JpdGViKGIsIGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG91dHcodTE2IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl3cml0ZXcoYiwgYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0bCh1MzIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXdyaXRlbChiLCBhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLSNkZWZpbmUgaW5iX3AoYWRkcikJaW5iKGFkZHIpCi0jZGVmaW5lIGlud19wKGFkZHIpCWludyhhZGRyKQotI2RlZmluZSBpbmxfcChhZGRyKQlpbmwoYWRkcikKLQotI2RlZmluZSBvdXRiX3AoeCwgYWRkcikJb3V0YigoeCksIChhZGRyKSkKLSNkZWZpbmUgb3V0d19wKHgsIGFkZHIpCW91dHcoKHgpLCAoYWRkcikpCi0jZGVmaW5lIG91dGxfcCh4LCBhZGRyKQlvdXRsKCh4KSwgKGFkZHIpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5zYih1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQotewotCXU4ICpidWYgPSBidWZmZXI7Ci0Jd2hpbGUgKGNvdW50LS0pCi0JCSpidWYrKyA9IF9fcmF3X3JlYWRiKGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluc3codW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKLXsKLQl1MTYgKmJ1ZiA9IGJ1ZmZlcjsKLQl3aGlsZSAoY291bnQtLSkKLQkJKmJ1ZisrID0gX19yYXdfcmVhZHcoYWRkciArIFBDSV9JT0JBU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5zbCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQotewotCXUzMiAqYnVmID0gYnVmZmVyOwotCXdoaWxlIChjb3VudC0tKQotCQkqYnVmKysgPSBfX3Jhd19yZWFkbChhZGRyICsgUENJX0lPQkFTRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzYih1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQotewotCWNvbnN0IHU4ICpidWYgPSBidWZmZXI7Ci0Jd2hpbGUgKGNvdW50LS0pCi0JCV9fcmF3X3dyaXRlYigqYnVmKyssIGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG91dHN3KHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCi17Ci0JY29uc3QgdTE2ICpidWYgPSBidWZmZXI7Ci0Jd2hpbGUgKGNvdW50LS0pCi0JCV9fcmF3X3dyaXRldygqYnVmKyssIGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG91dHNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCi17Ci0JY29uc3QgdTMyICpidWYgPSBidWZmZXI7Ci0Jd2hpbGUgKGNvdW50LS0pCi0JCV9fcmF3X3dyaXRlbCgqYnVmKyssIGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KLQotI2RlZmluZSBpbnNiX3AocG9ydCx0byxsZW4pCWluc2IocG9ydCx0byxsZW4pCi0jZGVmaW5lIGluc3dfcChwb3J0LHRvLGxlbikJaW5zdyhwb3J0LHRvLGxlbikKLSNkZWZpbmUgaW5zbF9wKHBvcnQsdG8sbGVuKQlpbnNsKHBvcnQsdG8sbGVuKQotCi0jZGVmaW5lIG91dHNiX3AocG9ydCxmcm9tLGxlbikJb3V0c2IocG9ydCxmcm9tLGxlbikKLSNkZWZpbmUgb3V0c3dfcChwb3J0LGZyb20sbGVuKQlvdXRzdyhwb3J0LGZyb20sbGVuKQotI2RlZmluZSBvdXRzbF9wKHBvcnQsZnJvbSxsZW4pCW91dHNsKHBvcnQsZnJvbSxsZW4pCi0KIC8qCiAgKiBTdHJpbmcgdmVyc2lvbiBvZiBJL08gbWVtb3J5IGFjY2VzcyBvcGVyYXRpb25zLgogICovCkBAIC0yMzYsMTggKzE3MSwxNCBAQAogI2RlZmluZSBpb3JlbWFwX3djKGFkZHIsIHNpemUpCQlfX2lvcmVtYXAoKGFkZHIpLCAoc2l6ZSksIF9fcGdwcm90KFBST1RfTk9STUFMX05DKSkKICNkZWZpbmUgaW91bm1hcAkJCQlfX2lvdW5tYXAKIAotI2RlZmluZSBBUkNIX0hBU19JT1JFTUFQX1dDCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KLQogLyoKLSAqIE1vcmUgcmVzdHJpY3RpdmUgYWRkcmVzcyByYW5nZSBjaGVja2luZyB0aGFuIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCi0gKiAoUEhZU19PRkZTRVQgYW5kIFBIWVNfTUFTSyB0YWtlbiBpbnRvIGFjY291bnQpLgorICogaW97cmVhZCx3cml0ZX17MTYsMzJ9YmUoKSBtYWNyb3MKICAqLwotI2RlZmluZSBBUkNIX0hBU19WQUxJRF9QSFlTX0FERFJfUkFOR0UKLWV4dGVybiBpbnQgdmFsaWRfcGh5c19hZGRyX3JhbmdlKHBoeXNfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplKTsKLWV4dGVybiBpbnQgdmFsaWRfbW1hcF9waHlzX2FkZHJfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHNpemVfdCBzaXplKTsKKyNkZWZpbmUgaW9yZWFkMTZiZShwKQkJKHsgX191MTYgX192ID0gYmUxNl90b19jcHUoKF9fZm9yY2UgX19iZTE2KV9fcmF3X3JlYWR3KHApKTsgX19pb3JtYigpOyBfX3Y7IH0pCisjZGVmaW5lIGlvcmVhZDMyYmUocCkJCSh7IF9fdTMyIF9fdiA9IGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMilfX3Jhd19yZWFkbChwKSk7IF9faW9ybWIoKTsgX192OyB9KQogCi1leHRlcm4gaW50IGRldm1lbV9pc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgcGZuKTsKKyNkZWZpbmUgaW93cml0ZTE2YmUodixwKQkoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNiljcHVfdG9fYmUxNih2KSwgcCk7IH0pCisjZGVmaW5lIGlvd3JpdGUzMmJlKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpY3B1X3RvX2JlMzIodiksIHApOyB9KQogCiAvKgogICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQpAQCAtMjYwLDYgKzE5MSwxOCBAQAogICovCiAjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCiAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pby5oPgorCisvKgorICogTW9yZSByZXN0cmljdGl2ZSBhZGRyZXNzIHJhbmdlIGNoZWNraW5nIHRoYW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAqIChQSFlTX09GRlNFVCBhbmQgUEhZU19NQVNLIHRha2VuIGludG8gYWNjb3VudCkuCisgKi8KKyNkZWZpbmUgQVJDSF9IQVNfVkFMSURfUEhZU19BRERSX1JBTkdFCitleHRlcm4gaW50IHZhbGlkX3BoeXNfYWRkcl9yYW5nZShwaHlzX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gaW50IHZhbGlkX21tYXBfcGh5c19hZGRyX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCBzaXplX3Qgc2l6ZSk7CisKK2V4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwZm4pOworCiBzdHJ1Y3QgYmlvX3ZlYzsKIGV4dGVybiBib29sIHhlbl9iaW92ZWNfcGh5c19tZXJnZWFibGUoY29uc3Qgc3RydWN0IGJpb192ZWMgKnZlYzEsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGJpb192ZWMgKnZlYzIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggZTFmN2VjZC4uOTRjNTM2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lycS5oCkBAIC0zLDcgKzMsOCBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXJxLmg+CiAKLWV4dGVybiB2b2lkICgqaGFuZGxlX2FyY2hfaXJxKShzdHJ1Y3QgcHRfcmVncyAqKTsKK3N0cnVjdCBwdF9yZWdzOworCiBleHRlcm4gdm9pZCBtaWdyYXRlX2lycXModm9pZCk7CiBleHRlcm4gdm9pZCBzZXRfaGFuZGxlX2lycSh2b2lkICgqaGFuZGxlX2lycSkoc3RydWN0IHB0X3JlZ3MgKikpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oCmluZGV4IDdmZDNlMjcuLjhhZmI4NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2FybS5oCkBAIC0xOCw2ICsxOCw3IEBACiAjaWZuZGVmIF9fQVJNNjRfS1ZNX0FSTV9IX18KICNkZWZpbmUgX19BUk02NF9LVk1fQVJNX0hfXwogCisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCiAvKiBIeXAgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoSENSKSBiaXRzICovCkBAIC0xNjAsOSArMTYxLDkgQEAKICNlbmRpZgogCiAjZGVmaW5lIFZUVEJSX0JBRERSX1NISUZUIChWVFRCUl9YIC0gMSkKLSNkZWZpbmUgVlRUQlJfQkFERFJfTUFTSyAgKCgoMUxMVSA8PCAoUEhZU19NQVNLX1NISUZUIC0gVlRUQlJfWCkpIC0gMSkgPDwgVlRUQlJfQkFERFJfU0hJRlQpCi0jZGVmaW5lIFZUVEJSX1ZNSURfU0hJRlQgICg0OExMVSkKLSNkZWZpbmUgVlRUQlJfVk1JRF9NQVNLCSAgKDB4ZmZMTFUgPDwgVlRUQlJfVk1JRF9TSElGVCkKKyNkZWZpbmUgVlRUQlJfQkFERFJfTUFTSyAgKCgoVUwoMSkgPDwgKFBIWVNfTUFTS19TSElGVCAtIFZUVEJSX1gpKSAtIDEpIDw8IFZUVEJSX0JBRERSX1NISUZUKQorI2RlZmluZSBWVFRCUl9WTUlEX1NISUZUICAoVUwoNDgpKQorI2RlZmluZSBWVFRCUl9WTUlEX01BU0sJICAoVUwoMHhGRikgPDwgVlRUQlJfVk1JRF9TSElGVCkKIAogLyogSHlwIFN5c3RlbSBUcmFwIFJlZ2lzdGVyICovCiAjZGVmaW5lIEhTVFJfRUwyX1RURUUJKDEgPDwgMTYpCkBAIC0xODUsMTMgKzE4NiwxMyBAQAogCiAvKiBFeGNlcHRpb24gU3luZHJvbWUgUmVnaXN0ZXIgKEVTUikgYml0cyAqLwogI2RlZmluZSBFU1JfRUwyX0VDX1NISUZUCSgyNikKLSNkZWZpbmUgRVNSX0VMMl9FQwkJKDB4M2ZVIDw8IEVTUl9FTDJfRUNfU0hJRlQpCi0jZGVmaW5lIEVTUl9FTDJfSUwJCSgxVSA8PCAyNSkKKyNkZWZpbmUgRVNSX0VMMl9FQwkJKFVMKDB4M2YpIDw8IEVTUl9FTDJfRUNfU0hJRlQpCisjZGVmaW5lIEVTUl9FTDJfSUwJCShVTCgxKSA8PCAyNSkKICNkZWZpbmUgRVNSX0VMMl9JU1MJCShFU1JfRUwyX0lMIC0gMSkKICNkZWZpbmUgRVNSX0VMMl9JU1ZfU0hJRlQJKDI0KQotI2RlZmluZSBFU1JfRUwyX0lTVgkJKDFVIDw8IEVTUl9FTDJfSVNWX1NISUZUKQorI2RlZmluZSBFU1JfRUwyX0lTVgkJKFVMKDEpIDw8IEVTUl9FTDJfSVNWX1NISUZUKQogI2RlZmluZSBFU1JfRUwyX1NBU19TSElGVAkoMjIpCi0jZGVmaW5lIEVTUl9FTDJfU0FTCQkoM1UgPDwgRVNSX0VMMl9TQVNfU0hJRlQpCisjZGVmaW5lIEVTUl9FTDJfU0FTCQkoVUwoMykgPDwgRVNSX0VMMl9TQVNfU0hJRlQpCiAjZGVmaW5lIEVTUl9FTDJfU1NFCQkoMSA8PCAyMSkKICNkZWZpbmUgRVNSX0VMMl9TUlRfU0hJRlQJKDE2KQogI2RlZmluZSBFU1JfRUwyX1NSVF9NQVNLCSgweDFmIDw8IEVTUl9FTDJfU1JUX1NISUZUKQpAQCAtMjA1LDE2ICsyMDYsMTYgQEAKICNkZWZpbmUgRVNSX0VMMl9GU0NfVFlQRQkoMHgzYykKIAogI2RlZmluZSBFU1JfRUwyX0NWX1NISUZUCSgyNCkKLSNkZWZpbmUgRVNSX0VMMl9DVgkJKDFVIDw8IEVTUl9FTDJfQ1ZfU0hJRlQpCisjZGVmaW5lIEVTUl9FTDJfQ1YJCShVTCgxKSA8PCBFU1JfRUwyX0NWX1NISUZUKQogI2RlZmluZSBFU1JfRUwyX0NPTkRfU0hJRlQJKDIwKQotI2RlZmluZSBFU1JfRUwyX0NPTkQJCSgweGZVIDw8IEVTUl9FTDJfQ09ORF9TSElGVCkKKyNkZWZpbmUgRVNSX0VMMl9DT05ECQkoVUwoMHhmKSA8PCBFU1JfRUwyX0NPTkRfU0hJRlQpCiAKIAogI2RlZmluZSBGU0NfRkFVTFQJKDB4MDQpCiAjZGVmaW5lIEZTQ19QRVJNCSgweDBjKQogCiAvKiBIeXAgUHJlZmV0Y2ggRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAoSFBGQVIvSERGQVIpICovCi0jZGVmaW5lIEhQRkFSX01BU0sJKH4weEZVTCkKKyNkZWZpbmUgSFBGQVJfTUFTSwkoflVMKDB4ZikpCiAKICNkZWZpbmUgRVNSX0VMMl9FQ19VTktOT1dOCSgweDAwKQogI2RlZmluZSBFU1JfRUwyX0VDX1dGSQkJKDB4MDEpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21lbW9yeS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tZW1vcnkuaAppbmRleCBhNjJjZDA3Li42NDg2YjJiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbWVtb3J5LmgKQEAgLTEyMCwxMSArMTIwLDEzIEBACiAgKiB0cmFuc2xhdGlvbiBmb3IgdHJhbnNsYXRpbmcgRE1BIGFkZHJlc3Nlcy4gIFVzZSB0aGUgZHJpdmVyCiAgKiBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oLgogICovCisjZGVmaW5lIHZpcnRfdG9fcGh5cyB2aXJ0X3RvX3BoeXMKIHN0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgdmlydF90b19waHlzKGNvbnN0IHZvbGF0aWxlIHZvaWQgKngpCiB7CiAJcmV0dXJuIF9fdmlydF90b19waHlzKCh1bnNpZ25lZCBsb25nKSh4KSk7CiB9CiAKKyNkZWZpbmUgcGh5c190b192aXJ0IHBoeXNfdG9fdmlydAogc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQocGh5c19hZGRyX3QgeCkKIHsKIAlyZXR1cm4gKHZvaWQgKikoX19waHlzX3RvX3ZpcnQoeCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9vcGNvZGVzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL29wY29kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTYwM2VhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9vcGNvZGVzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPC4uLy4uL2FybS9pbmNsdWRlL2FzbS9vcGNvZGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZXJjcHUuaAppbmRleCA1Mjc5ZTU3Li4wOWRhMjViIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTQ0LDYgKzQ0LDIyMSBAQAogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCisjZGVmaW5lIFBFUkNQVV9PUChvcCwgYXNtX29wKQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3BlcmNwdV8jI29wKHZvaWQgKnB0ciwJCQlcCisJCQl1bnNpZ25lZCBsb25nIHZhbCwgaW50IHNpemUpCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGxvb3AsIHJldDsJCQkJCVwKKwkJCQkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCWNhc2UgMToJCQkJCQkJCVwKKwkJZG8gewkJCQkJCQlcCisJCQlhc20gKCIvL19fcGVyX2NwdV8iICNvcCAiXzFcbiIJCQlcCisJCQkibGR4cmIJICAld1tyZXRdLCAlW3B0cl1cbiIJCQlcCisJCQkjYXNtX29wICIgJXdbcmV0XSwgJXdbcmV0XSwgJXdbdmFsXVxuIgkJXAorCQkJInN0eHJiCSAgJXdbbG9vcF0sICV3W3JldF0sICVbcHRyXVxuIgkJXAorCQkJOiBbbG9vcF0gIj0mciIgKGxvb3ApLCBbcmV0XSAiPSZyIiAocmV0KSwJXAorCQkJICBbcHRyXSAiK1EiKCoodTggKilwdHIpCQkJXAorCQkJOiBbdmFsXSAiSXIiICh2YWwpKTsJCQkJXAorCQl9IHdoaWxlIChsb29wKTsJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlkbyB7CQkJCQkJCVwKKwkJCWFzbSAoIi8vX19wZXJfY3B1XyIgI29wICJfMlxuIgkJCVwKKwkJCSJsZHhyaAkgICV3W3JldF0sICVbcHRyXVxuIgkJCVwKKwkJCSNhc21fb3AgIiAld1tyZXRdLCAld1tyZXRdLCAld1t2YWxdXG4iCQlcCisJCQkic3R4cmgJICAld1tsb29wXSwgJXdbcmV0XSwgJVtwdHJdXG4iCQlcCisJCQk6IFtsb29wXSAiPSZyIiAobG9vcCksIFtyZXRdICI9JnIiIChyZXQpLAlcCisJCQkgIFtwdHJdICAiK1EiKCoodTE2ICopcHRyKQkJCVwKKwkJCTogW3ZhbF0gIklyIiAodmFsKSk7CQkJCVwKKwkJfSB3aGlsZSAobG9vcCk7CQkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJZG8gewkJCQkJCQlcCisJCQlhc20gKCIvL19fcGVyX2NwdV8iICNvcCAiXzRcbiIJCQlcCisJCQkibGR4cgkgICV3W3JldF0sICVbcHRyXVxuIgkJCVwKKwkJCSNhc21fb3AgIiAld1tyZXRdLCAld1tyZXRdLCAld1t2YWxdXG4iCQlcCisJCQkic3R4cgkgICV3W2xvb3BdLCAld1tyZXRdLCAlW3B0cl1cbiIJCVwKKwkJCTogW2xvb3BdICI9JnIiIChsb29wKSwgW3JldF0gIj0mciIgKHJldCksCVwKKwkJCSAgW3B0cl0gIitRIigqKHUzMiAqKXB0cikJCQlcCisJCQk6IFt2YWxdICJJciIgKHZhbCkpOwkJCQlcCisJCX0gd2hpbGUgKGxvb3ApOwkJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCWRvIHsJCQkJCQkJXAorCQkJYXNtICgiLy9fX3Blcl9jcHVfIiAjb3AgIl84XG4iCQkJXAorCQkJImxkeHIJICAlW3JldF0sICVbcHRyXVxuIgkJCVwKKwkJCSNhc21fb3AgIiAlW3JldF0sICVbcmV0XSwgJVt2YWxdXG4iCQlcCisJCQkic3R4cgkgICV3W2xvb3BdLCAlW3JldF0sICVbcHRyXVxuIgkJXAorCQkJOiBbbG9vcF0gIj0mciIgKGxvb3ApLCBbcmV0XSAiPSZyIiAocmV0KSwJXAorCQkJICBbcHRyXSAiK1EiKCoodTY0ICopcHRyKQkJCVwKKwkJCTogW3ZhbF0gIklyIiAodmFsKSk7CQkJCVwKKwkJfSB3aGlsZSAobG9vcCk7CQkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJQlVJTERfQlVHKCk7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CisKK1BFUkNQVV9PUChhZGQsIGFkZCkKK1BFUkNQVV9PUChhbmQsIGFuZCkKK1BFUkNQVV9PUChvciwgb3JyKQorI3VuZGVmIFBFUkNQVV9PUAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19wZXJjcHVfcmVhZCh2b2lkICpwdHIsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlyZXQgPSBBQ0NFU1NfT05DRSgqKHU4ICopcHRyKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXQgPSBBQ0NFU1NfT05DRSgqKHUxNiAqKXB0cik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcmV0ID0gQUNDRVNTX09OQ0UoKih1MzIgKilwdHIpOworCQlicmVhazsKKwljYXNlIDg6CisJCXJldCA9IEFDQ0VTU19PTkNFKCoodTY0ICopcHRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVJTERfQlVHKCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1X3dyaXRlKHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJQUNDRVNTX09OQ0UoKih1OCAqKXB0cikgPSAodTgpdmFsOworCQlicmVhazsKKwljYXNlIDI6CisJCUFDQ0VTU19PTkNFKCoodTE2ICopcHRyKSA9ICh1MTYpdmFsOworCQlicmVhazsKKwljYXNlIDQ6CisJCUFDQ0VTU19PTkNFKCoodTMyICopcHRyKSA9ICh1MzIpdmFsOworCQlicmVhazsKKwljYXNlIDg6CisJCUFDQ0VTU19PTkNFKCoodTY0ICopcHRyKSA9ICh1NjQpdmFsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUlMRF9CVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3BlcmNwdV94Y2hnKHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkJCQlpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCwgbG9vcDsKKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJZG8geworCQkJYXNtICgiLy9fX3BlcmNwdV94Y2hnXzFcbiIKKwkJCSJsZHhyYiAld1tyZXRdLCAlW3B0cl1cbiIKKwkJCSJzdHhyYiAld1tsb29wXSwgJXdbdmFsXSwgJVtwdHJdXG4iCisJCQk6IFtsb29wXSAiPSZyIihsb29wKSwgW3JldF0gIj0mciIocmV0KSwKKwkJCSAgW3B0cl0gIitRIigqKHU4ICopcHRyKQorCQkJOiBbdmFsXSAiciIgKHZhbCkpOworCQl9IHdoaWxlIChsb29wKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkbyB7CisJCQlhc20gKCIvL19fcGVyY3B1X3hjaGdfMlxuIgorCQkJImxkeHJoICV3W3JldF0sICVbcHRyXVxuIgorCQkJInN0eHJoICV3W2xvb3BdLCAld1t2YWxdLCAlW3B0cl1cbiIKKwkJCTogW2xvb3BdICI9JnIiKGxvb3ApLCBbcmV0XSAiPSZyIihyZXQpLAorCQkJICBbcHRyXSAiK1EiKCoodTE2ICopcHRyKQorCQkJOiBbdmFsXSAiciIgKHZhbCkpOworCQl9IHdoaWxlIChsb29wKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkbyB7CisJCQlhc20gKCIvL19fcGVyY3B1X3hjaGdfNFxuIgorCQkJImxkeHIgJXdbcmV0XSwgJVtwdHJdXG4iCisJCQkic3R4ciAld1tsb29wXSwgJXdbdmFsXSwgJVtwdHJdXG4iCisJCQk6IFtsb29wXSAiPSZyIihsb29wKSwgW3JldF0gIj0mciIocmV0KSwKKwkJCSAgW3B0cl0gIitRIigqKHUzMiAqKXB0cikKKwkJCTogW3ZhbF0gInIiICh2YWwpKTsKKwkJfSB3aGlsZSAobG9vcCk7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZG8geworCQkJYXNtICgiLy9fX3BlcmNwdV94Y2hnXzhcbiIKKwkJCSJsZHhyICVbcmV0XSwgJVtwdHJdXG4iCisJCQkic3R4ciAld1tsb29wXSwgJVt2YWxdLCAlW3B0cl1cbiIKKwkJCTogW2xvb3BdICI9JnIiKGxvb3ApLCBbcmV0XSAiPSZyIihyZXQpLAorCQkJICBbcHRyXSAiK1EiKCoodTY0ICopcHRyKQorCQkJOiBbdmFsXSAiciIgKHZhbCkpOworCQl9IHdoaWxlIChsb29wKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVJTERfQlVHKCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBfcGVyY3B1X2FkZChwY3AsIHZhbCkgXAorCV9fcGVyY3B1X2FkZChyYXdfY3B1X3B0cigmKHBjcCkpLCB2YWwsIHNpemVvZihwY3ApKQorCisjZGVmaW5lIF9wZXJjcHVfYWRkX3JldHVybihwY3AsIHZhbCkgKHR5cGVvZihwY3ApKSAoX3BlcmNwdV9hZGQocGNwLCB2YWwpKQorCisjZGVmaW5lIF9wZXJjcHVfYW5kKHBjcCwgdmFsKSBcCisJX19wZXJjcHVfYW5kKHJhd19jcHVfcHRyKCYocGNwKSksIHZhbCwgc2l6ZW9mKHBjcCkpCisKKyNkZWZpbmUgX3BlcmNwdV9vcihwY3AsIHZhbCkgXAorCV9fcGVyY3B1X29yKHJhd19jcHVfcHRyKCYocGNwKSksIHZhbCwgc2l6ZW9mKHBjcCkpCisKKyNkZWZpbmUgX3BlcmNwdV9yZWFkKHBjcCkgKHR5cGVvZihwY3ApKQlcCisJKF9fcGVyY3B1X3JlYWQocmF3X2NwdV9wdHIoJihwY3ApKSwgc2l6ZW9mKHBjcCkpKQorCisjZGVmaW5lIF9wZXJjcHVfd3JpdGUocGNwLCB2YWwpIFwKKwlfX3BlcmNwdV93cml0ZShyYXdfY3B1X3B0cigmKHBjcCkpLCAodW5zaWduZWQgbG9uZykodmFsKSwgc2l6ZW9mKHBjcCkpCisKKyNkZWZpbmUgX3BlcmNwdV94Y2hnKHBjcCwgdmFsKSAodHlwZW9mKHBjcCkpIFwKKwkoX19wZXJjcHVfeGNoZyhyYXdfY3B1X3B0cigmKHBjcCkpLCAodW5zaWduZWQgbG9uZykodmFsKSwgc2l6ZW9mKHBjcCkpKQorCisjZGVmaW5lIHRoaXNfY3B1X2FkZF8xKHBjcCwgdmFsKSBfcGVyY3B1X2FkZChwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzIocGNwLCB2YWwpIF9wZXJjcHVfYWRkKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfNChwY3AsIHZhbCkgX3BlcmNwdV9hZGQocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FkZF84KHBjcCwgdmFsKSBfcGVyY3B1X2FkZChwY3AsIHZhbCkKKworI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpIF9wZXJjcHVfYWRkX3JldHVybihwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl8yKHBjcCwgdmFsKSBfcGVyY3B1X2FkZF9yZXR1cm4ocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fNChwY3AsIHZhbCkgX3BlcmNwdV9hZGRfcmV0dXJuKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzgocGNwLCB2YWwpIF9wZXJjcHVfYWRkX3JldHVybihwY3AsIHZhbCkKKworI2RlZmluZSB0aGlzX2NwdV9hbmRfMShwY3AsIHZhbCkgX3BlcmNwdV9hbmQocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FuZF8yKHBjcCwgdmFsKSBfcGVyY3B1X2FuZChwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYW5kXzQocGNwLCB2YWwpIF9wZXJjcHVfYW5kKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hbmRfOChwY3AsIHZhbCkgX3BlcmNwdV9hbmQocGNwLCB2YWwpCisKKyNkZWZpbmUgdGhpc19jcHVfb3JfMShwY3AsIHZhbCkgX3BlcmNwdV9vcihwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfb3JfMihwY3AsIHZhbCkgX3BlcmNwdV9vcihwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfb3JfNChwY3AsIHZhbCkgX3BlcmNwdV9vcihwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfb3JfOChwY3AsIHZhbCkgX3BlcmNwdV9vcihwY3AsIHZhbCkKKworI2RlZmluZSB0aGlzX2NwdV9yZWFkXzEocGNwKSBfcGVyY3B1X3JlYWQocGNwKQorI2RlZmluZSB0aGlzX2NwdV9yZWFkXzIocGNwKSBfcGVyY3B1X3JlYWQocGNwKQorI2RlZmluZSB0aGlzX2NwdV9yZWFkXzQocGNwKSBfcGVyY3B1X3JlYWQocGNwKQorI2RlZmluZSB0aGlzX2NwdV9yZWFkXzgocGNwKSBfcGVyY3B1X3JlYWQocGNwKQorCisjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzEocGNwLCB2YWwpIF9wZXJjcHVfd3JpdGUocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzIocGNwLCB2YWwpIF9wZXJjcHVfd3JpdGUocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzQocGNwLCB2YWwpIF9wZXJjcHVfd3JpdGUocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzgocGNwLCB2YWwpIF9wZXJjcHVfd3JpdGUocGNwLCB2YWwpCisKKyNkZWZpbmUgdGhpc19jcHVfeGNoZ18xKHBjcCwgdmFsKSBfcGVyY3B1X3hjaGcocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMihwY3AsIHZhbCkgX3BlcmNwdV94Y2hnKHBjcCwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV94Y2hnXzQocGNwLCB2YWwpIF9wZXJjcHVfeGNoZyhwY3AsIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfeGNoZ184KHBjcCwgdmFsKSBfcGVyY3B1X3hjaGcocGNwLCB2YWwpCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KIAogI2VuZGlmIC8qIF9fQVNNX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGQ1YmVkMDIuLmUyMGRmMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0yNiwxMSArMjYsMTMgQEAKIAogI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQkJZG8geyB9IHdoaWxlICgwKQogCisjZGVmaW5lIFBHQUxMT0NfR0ZQCShHRlBfS0VSTkVMIHwgX19HRlBfTk9UUkFDSyB8IF9fR0ZQX1JFUEVBVCB8IF9fR0ZQX1pFUk8pCisKICNpZiBDT05GSUdfQVJNNjRfUEdUQUJMRV9MRVZFTFMgPiAyCiAKIHN0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4gKHBtZF90ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQpOworCXJldHVybiAocG1kX3QgKilfX2dldF9mcmVlX3BhZ2UoUEdBTExPQ19HRlApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpCkBAIC01MCw3ICs1Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgcHVkX3QgKnB1ZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4gKHB1ZF90ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQpOworCXJldHVybiAocHVkX3QgKilfX2dldF9mcmVlX3BhZ2UoUEdBTExPQ19HRlApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQpCkBAIC02OSw4ICs3MSw2IEBACiBleHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiBleHRlcm4gdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7CiAKLSNkZWZpbmUgUEdBTExPQ19HRlAJKEdGUF9LRVJORUwgfCBfX0dGUF9OT1RSQUNLIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTykKLQogc3RhdGljIGlubGluZSBwdGVfdCAqCiBwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA0MWE0M2JmLi5kZjIyMzE0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjc5LDYgKzI3OSw3IEBACiAjZW5kaWYgLyogQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUgKi8KICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi8KIAorI2RlZmluZSBwbWRfZGlydHkocG1kKQkJcHRlX2RpcnR5KHBtZF9wdGUocG1kKSkKICNkZWZpbmUgcG1kX3lvdW5nKHBtZCkJCXB0ZV95b3VuZyhwbWRfcHRlKHBtZCkpCiAjZGVmaW5lIHBtZF93cnByb3RlY3QocG1kKQlwdGVfcG1kKHB0ZV93cnByb3RlY3QocG1kX3B0ZShwbWQpKSkKICNkZWZpbmUgcG1kX21rc3BsaXR0aW5nKHBtZCkJcHRlX3BtZChwdGVfbWtzcGVjaWFsKHBtZF9wdGUocG1kKSkpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NlY2NvbXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc2VjY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NmZhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3NlY2NvbXAuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zZWNjb21wLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTGluYXJvIExpbWl0ZWQKKyAqIEF1dGhvcjogQUtBU0hJIFRha2FoaXJvIDx0YWthaGlyby5ha2FzaGlAbGluYXJvLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9BU01fU0VDQ09NUF9ICisjZGVmaW5lIF9BU01fU0VDQ09NUF9ICisKKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkXzMyCQlfX05SX2NvbXBhdF9yZWFkCisjZGVmaW5lIF9fTlJfc2VjY29tcF93cml0ZV8zMgkJX19OUl9jb21wYXRfd3JpdGUKKyNkZWZpbmUgX19OUl9zZWNjb21wX2V4aXRfMzIJCV9fTlJfY29tcGF0X2V4aXQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybl8zMglfX05SX2NvbXBhdF9ydF9zaWdyZXR1cm4KKyNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWNjb21wLmg+CisKKyNlbmRpZiAvKiBfQVNNX1NFQ0NPTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggYTgyYzBjNS4uYzAyOGZlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xOSwxMCArMTksNiBAQAogI2lmbmRlZiBfX0FTTV9UTEJfSAogI2RlZmluZSBfX0FTTV9UTEJfSAogCi0jZGVmaW5lICBfX3RsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeSBfX3RsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCkBAIC0zNyw3MSArMzMsMjIgQEAKICNkZWZpbmUgdGxiX3JlbW92ZV9lbnRyeSh0bGIsIGVudHJ5KQl0bGJfcmVtb3ZlX3BhZ2UodGxiLCBlbnRyeSkKICNlbmRpZiAvKiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRSAqLwogCi0vKgotICogVGhlcmUncyB0aHJlZSB3YXlzIHRoZSBUTEIgc2hvb3Rkb3duIGNvZGUgaXMgdXNlZDoKLSAqICAxLiBVbm1hcHBpbmcgYSByYW5nZSBvZiB2bWFzLiAgU2VlIHphcF9wYWdlX3JhbmdlKCksIHVubWFwX3JlZ2lvbigpLgotICogICAgIHRsYi0+ZnVsbG1tID0gMCwgYW5kIHRsYl9zdGFydF92bWEvdGxiX2VuZF92bWEgd2lsbCBiZSBjYWxsZWQuCi0gKiAgMi4gVW5tYXBwaW5nIGFsbCB2bWFzLiAgU2VlIGV4aXRfbW1hcCgpLgotICogICAgIHRsYi0+ZnVsbG1tID0gMSwgYW5kIHRsYl9zdGFydF92bWEvdGxiX2VuZF92bWEgd2lsbCBiZSBjYWxsZWQuCi0gKiAgICAgUGFnZSB0YWJsZXMgd2lsbCBiZSBmcmVlZC4KLSAqICAzLiBVbm1hcHBpbmcgYXJndW1lbnQgcGFnZXMuICBTZWUgc2hpZnRfYXJnX3BhZ2VzKCkuCi0gKiAgICAgdGxiLT5mdWxsbW0gPSAwLCBidXQgdGxiX3N0YXJ0X3ZtYS90bGJfZW5kX3ZtYSB3aWxsIG5vdCBiZSBjYWxsZWQuCi0gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKwogc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQogewogCWlmICh0bGItPmZ1bGxtbSkgewogCQlmbHVzaF90bGJfbW0odGxiLT5tbSk7Ci0JfSBlbHNlIGlmICh0bGItPmVuZCA+IDApIHsKKwl9IGVsc2UgewogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qgdm1hID0geyAudm1fbW0gPSB0bGItPm1tLCB9OwogCQlmbHVzaF90bGJfcmFuZ2UoJnZtYSwgdGxiLT5zdGFydCwgdGxiLT5lbmQpOwotCQl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOwotCQl0bGItPmVuZCA9IDA7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX2FkZF9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQl0bGItPnN0YXJ0ID0gbWluKHRsYi0+c3RhcnQsIGFkZHIpOwotCQl0bGItPmVuZCA9IG1heCh0bGItPmVuZCwgYWRkciArIFBBR0VfU0laRSk7Ci0JfQotfQotCi0vKgotICogTWVtb3JpemUgdGhlIHJhbmdlIGZvciB0aGUgVExCIGZsdXNoLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVtb3ZlX3RsYl9lbnRyeShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdGVfdCAqcHRlcCwKLQkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOwotfQotCi0vKgotICogSW4gdGhlIGNhc2Ugb2YgdGxiIHZtYSBoYW5kbGluZywgd2UgY2FuIG9wdGltaXNlIHRoZXNlIGF3YXkgaW4gdGhlCi0gKiBjYXNlIHdoZXJlIHdlJ3JlIGRvaW5nIGEgZnVsbCBNTSBmbHVzaC4gIFdoZW4gd2UncmUgZG9pbmcgYSBtdW5tYXAsCi0gKiB0aGUgdm1hcyBhcmUgYWRqdXN0ZWQgdG8gb25seSBjb3ZlciB0aGUgcmVnaW9uIHRvIGJlIHRvcm4gZG93bi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRsYl9zdGFydF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKLQkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOwotCQl0bGItPmVuZCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX2VuZF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKLQkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlpZiAoIXRsYi0+ZnVsbG1tKQotCQl0bGJfZmx1c2godGxiKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwdGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcGd0YWJsZV9wYWdlX2R0b3IocHRlKTsKLQl0bGJfYWRkX2ZsdXNoKHRsYiwgYWRkcik7CiAJdGxiX3JlbW92ZV9lbnRyeSh0bGIsIHB0ZSk7CiB9CiAKQEAgLTEwOSw3ICs1Niw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZHAsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOwogCXRsYl9yZW1vdmVfZW50cnkodGxiLCB2aXJ0X3RvX3BhZ2UocG1kcCkpOwogfQogI2VuZGlmCkBAIC0xMTgsMTUgKzY0LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B1ZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdWRfdCAqcHVkcCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl0bGJfYWRkX2ZsdXNoKHRsYiwgYWRkcik7CiAJdGxiX3JlbW92ZV9lbnRyeSh0bGIsIHZpcnRfdG9fcGFnZShwdWRwKSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWRwLAotCQkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXRsYl9hZGRfZmx1c2godGxiLCBhZGRyZXNzKTsKLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RyYXBzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3RyYXBzLmgKaW5kZXggMTBjYThmZi4uMjMyZTRiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS90cmFwcy5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdHJhcHMuaApAQCAtMTgsNiArMTgsMjIgQEAKICNpZm5kZWYgX19BU01fVFJBUF9ICiAjZGVmaW5lIF9fQVNNX1RSQVBfSAogCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IHVuZGVmX2hvb2sgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwl1MzIgaW5zdHJfbWFzazsKKwl1MzIgaW5zdHJfdmFsOworCXU2NCBwc3RhdGVfbWFzazsKKwl1NjQgcHN0YXRlX3ZhbDsKKwlpbnQgKCpmbikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpbnN0cik7Cit9OworCit2b2lkIHJlZ2lzdGVyX3VuZGVmX2hvb2soc3RydWN0IHVuZGVmX2hvb2sgKmhvb2spOwordm9pZCB1bnJlZ2lzdGVyX3VuZGVmX2hvb2soc3RydWN0IHVuZGVmX2hvb2sgKmhvb2spOworCiBzdGF0aWMgaW5saW5lIGludCBpbl9leGNlcHRpb25fdGV4dCh1bnNpZ25lZCBsb25nIHB0cikKIHsKIAlleHRlcm4gY2hhciBfX2V4Y2VwdGlvbl90ZXh0X3N0YXJ0W107CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA2ZDJiZjQxLi40OWM5YWVmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTMxLDYgKzMxLDkgQEAKICAqIENvbXBhdCBzeXNjYWxsIG51bWJlcnMgdXNlZCBieSB0aGUgQUFyY2g2NCBrZXJuZWwuCiAgKi8KICNkZWZpbmUgX19OUl9jb21wYXRfcmVzdGFydF9zeXNjYWxsCTAKKyNkZWZpbmUgX19OUl9jb21wYXRfZXhpdAkJMQorI2RlZmluZSBfX05SX2NvbXBhdF9yZWFkCQkzCisjZGVmaW5lIF9fTlJfY29tcGF0X3dyaXRlCQk0CiAjZGVmaW5lIF9fTlJfY29tcGF0X3NpZ3JldHVybgkJMTE5CiAjZGVmaW5lIF9fTlJfY29tcGF0X3J0X3NpZ3JldHVybgkxNzMKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQzMi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQzMi5oCmluZGV4IDlkZmRhYzQuLjg4OTNjZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkMzIuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZDMyLmgKQEAgLTc4Nyw3ICs3ODcsOCBAQAogX19TWVNDQUxMKF9fTlJfc2NoZWRfZ2V0YXR0ciwgc3lzX3NjaGVkX2dldGF0dHIpCiAjZGVmaW5lIF9fTlJfcmVuYW1lYXQyIDM4MgogX19TWVNDQUxMKF9fTlJfcmVuYW1lYXQyLCBzeXNfcmVuYW1lYXQyKQotCQkJLyogMzgzIGZvciBzZWNjb21wICovCisjZGVmaW5lIF9fTlJfc2VjY29tcCAzODMKK19fU1lTQ0FMTChfX05SX3NlY2NvbXAsIHN5c19zZWNjb21wKQogI2RlZmluZSBfX05SX2dldHJhbmRvbSAzODQKIF9fU1lTQ0FMTChfX05SX2dldHJhbmRvbSwgc3lzX2dldHJhbmRvbSkKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUgMzg1CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlCmluZGV4IDViZDAyOWIuLmVhYTc3ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogQ1BQRkxBR1Nfdm1saW51eC5sZHMJOj0gLURURVhUX09GRlNFVD0kKFRFWFRfT0ZGU0VUKQogQUZMQUdTX2hlYWQubwkJOj0gLURURVhUX09GRlNFVD0kKFRFWFRfT0ZGU0VUKQogQ0ZMQUdTX2VmaS1zdHViLm8gCTo9IC1EVEVYVF9PRkZTRVQ9JChURVhUX09GRlNFVCkKK0NGTEFHU19hcm12OF9kZXByZWNhdGVkLm8gOj0gLUkkKHNyYykKIAogQ0ZMQUdTX1JFTU9WRV9mdHJhY2UubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9pbnNuLm8gPSAtcGcKQEAgLTE1LDEwICsxNiwxMSBAQAogCQkJICAgZW50cnktZnBzaW1kLm8gcHJvY2Vzcy5vIHB0cmFjZS5vIHNldHVwLm8gc2lnbmFsLm8JXAogCQkJICAgc3lzLm8gc3RhY2t0cmFjZS5vIHRpbWUubyB0cmFwcy5vIGlvLm8gdmRzby5vCVwKIAkJCSAgIGh5cC1zdHViLm8gcHNjaS5vIGNwdV9vcHMubyBpbnNuLm8gcmV0dXJuX2FkZHJlc3MubwlcCi0JCQkgICBjcHVpbmZvLm8KKwkJCSAgIGNwdWluZm8ubyBjcHVfZXJyYXRhLm8gYWx0ZXJuYXRpdmUubwogCiBhcm02NC1vYmotJChDT05GSUdfQ09NUEFUKQkJKz0gc3lzMzIubyBrdXNlcjMyLm8gc2lnbmFsMzIubyAJXAotCQkJCQkgICBzeXNfY29tcGF0Lm8KKwkJCQkJICAgc3lzX2NvbXBhdC5vIAkJCVwKKwkJCQkJICAgLi4vLi4vYXJtL2tlcm5lbC9vcGNvZGVzLm8KIGFybTY0LW9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpCSs9IGZ0cmFjZS5vIGVudHJ5LWZ0cmFjZS5vCiBhcm02NC1vYmotJChDT05GSUdfTU9EVUxFUykJCSs9IGFybTY0a3N5bXMubyBtb2R1bGUubwogYXJtNjQtb2JqLSQoQ09ORklHX1NNUCkJCQkrPSBzbXAubyBzbXBfc3Bpbl90YWJsZS5vIHRvcG9sb2d5Lm8KQEAgLTMxLDYgKzMzLDcgQEAKIGFybTY0LW9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYi5vCiBhcm02NC1vYmotJChDT05GSUdfRUZJKQkJCSs9IGVmaS5vIGVmaS1zdHViLm8gZWZpLWVudHJ5Lm8KIGFybTY0LW9iai0kKENPTkZJR19QQ0kpCQkJKz0gcGNpLm8KK2FybTY0LW9iai0kKENPTkZJR19BUk1WOF9ERVBSRUNBVEVEKQkrPSBhcm12OF9kZXByZWNhdGVkLm8KIAogb2JqLXkJCQkJCSs9ICQoYXJtNjQtb2JqLXkpIHZkc28vCiBvYmotbQkJCQkJKz0gJChhcm02NC1vYmotbSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzgyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBhbHRlcm5hdGl2ZSBydW50aW1lIHBhdGNoaW5nCisgKiBpbnNwaXJlZCBieSB0aGUgeDg2IHZlcnNpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQVJNIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgImFsdGVybmF0aXZlczogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CisKK2V4dGVybiBzdHJ1Y3QgYWx0X2luc3RyIF9fYWx0X2luc3RydWN0aW9uc1tdLCBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kW107CisKK3N0cnVjdCBhbHRfcmVnaW9uIHsKKwlzdHJ1Y3QgYWx0X2luc3RyICpiZWdpbjsKKwlzdHJ1Y3QgYWx0X2luc3RyICplbmQ7Cit9OworCitzdGF0aWMgaW50IF9fYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKmFsdF9yZWdpb24pCit7CisJc3RydWN0IGFsdF9pbnN0ciAqYWx0OworCXN0cnVjdCBhbHRfcmVnaW9uICpyZWdpb24gPSBhbHRfcmVnaW9uOworCXU4ICpvcmlncHRyLCAqcmVwbHB0cjsKKworCWZvciAoYWx0ID0gcmVnaW9uLT5iZWdpbjsgYWx0IDwgcmVnaW9uLT5lbmQ7IGFsdCsrKSB7CisJCWlmICghY3B1c19oYXZlX2NhcChhbHQtPmNwdWZlYXR1cmUpKQorCQkJY29udGludWU7CisKKwkJQlVHX09OKGFsdC0+YWx0X2xlbiA+IGFsdC0+b3JpZ19sZW4pOworCisJCXByX2luZm9fb25jZSgicGF0Y2hpbmcga2VybmVsIGNvZGVcbiIpOworCisJCW9yaWdwdHIgPSAodTggKikmYWx0LT5vcmlnX29mZnNldCArIGFsdC0+b3JpZ19vZmZzZXQ7CisJCXJlcGxwdHIgPSAodTggKikmYWx0LT5hbHRfb2Zmc2V0ICsgYWx0LT5hbHRfb2Zmc2V0OworCQltZW1jcHkob3JpZ3B0ciwgcmVwbHB0ciwgYWx0LT5hbHRfbGVuKTsKKwkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1aW50cHRyX3Qpb3JpZ3B0ciwKKwkJCQkgICAodWludHB0cl90KShvcmlncHRyICsgYWx0LT5hbHRfbGVuKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKQoreworCXN0cnVjdCBhbHRfcmVnaW9uIHJlZ2lvbiA9IHsKKwkJLmJlZ2luCT0gX19hbHRfaW5zdHJ1Y3Rpb25zLAorCQkuZW5kCT0gX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCwKKwl9OworCisJLyogYmV0dGVyIG5vdCB0cnkgY29kZSBwYXRjaGluZyBvbiBhIGxpdmUgU01QIHN5c3RlbSAqLworCXN0b3BfbWFjaGluZShfX2FwcGx5X2FsdGVybmF0aXZlcywgJnJlZ2lvbiwgTlVMTCk7Cit9CisKK3ZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBhbHRfcmVnaW9uIHJlZ2lvbiA9IHsKKwkJLmJlZ2luCT0gc3RhcnQsCisJCS5lbmQJPSBzdGFydCArIGxlbmd0aCwKKwl9OworCisJX19hcHBseV9hbHRlcm5hdGl2ZXMoJnJlZ2lvbik7Cit9CisKK3ZvaWQgZnJlZV9hbHRlcm5hdGl2ZXNfbWVtb3J5KHZvaWQpCit7CisJZnJlZV9yZXNlcnZlZF9hcmVhKF9fYWx0X2luc3RydWN0aW9ucywgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCwKKwkJCSAgIDAsICJhbHRlcm5hdGl2ZXMiKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2FybXY4X2RlcHJlY2F0ZWQuYyBiL2FyY2gvYXJtNjQva2VybmVsL2FybXY4X2RlcHJlY2F0ZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzYzNjcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvYXJtdjhfZGVwcmVjYXRlZC5jCkBAIC0wLDAgKzEsNTUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNCBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorCisjaW5jbHVkZSA8YXNtL2luc24uaD4KKyNpbmNsdWRlIDxhc20vb3Bjb2Rlcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgInRyYWNlLWV2ZW50cy1lbXVsYXRpb24uaCIKKworLyoKKyAqIFRoZSBydW50aW1lIHN1cHBvcnQgZm9yIGRlcHJlY2F0ZWQgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBjYW4gYmUgaW4gb25lIG9mCisgKiBmb2xsb3dpbmcgdGhyZWUgc3RhdGVzIC0KKyAqCisgKiAwID0gdW5kZWYKKyAqIDEgPSBlbXVsYXRlIChzb2Z0d2FyZSBlbXVsYXRpb24pCisgKiAyID0gaHcgKHN1cHBvcnRlZCBpbiBoYXJkd2FyZSkKKyAqLworZW51bSBpbnNuX2VtdWxhdGlvbl9tb2RlIHsKKwlJTlNOX1VOREVGLAorCUlOU05fRU1VTEFURSwKKwlJTlNOX0hXLAorfTsKKworZW51bSBsZWdhY3lfaW5zbl9zdGF0dXMgeworCUlOU05fREVQUkVDQVRFRCwKKwlJTlNOX09CU09MRVRFLAorfTsKKworc3RydWN0IGluc25fZW11bGF0aW9uX29wcyB7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJZW51bSBsZWdhY3lfaW5zbl9zdGF0dXMJc3RhdHVzOworCXN0cnVjdCB1bmRlZl9ob29rCSpob29rczsKKwlpbnQJCQkoKnNldF9od19tb2RlKShib29sIGVuYWJsZSk7Cit9OworCitzdHJ1Y3QgaW5zbl9lbXVsYXRpb24geworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzICpvcHM7CisJaW50IGN1cnJlbnRfbW9kZTsKKwlpbnQgbWluOworCWludCBtYXg7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKGluc25fZW11bGF0aW9uKTsKK3N0YXRpYyBpbnQgbnJfaW5zbl9lbXVsYXRlZDsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGluc25fZW11bGF0aW9uX2xvY2spOworCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9lbXVsYXRpb25faG9va3Moc3RydWN0IGluc25fZW11bGF0aW9uX29wcyAqb3BzKQoreworCXN0cnVjdCB1bmRlZl9ob29rICpob29rOworCisJQlVHX09OKCFvcHMtPmhvb2tzKTsKKworCWZvciAoaG9vayA9IG9wcy0+aG9va3M7IGhvb2stPmluc3RyX21hc2s7IGhvb2srKykKKwkJcmVnaXN0ZXJfdW5kZWZfaG9vayhob29rKTsKKworCXByX25vdGljZSgiUmVnaXN0ZXJlZCAlcyBlbXVsYXRpb24gaGFuZGxlclxuIiwgb3BzLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2VtdWxhdGlvbl9ob29rcyhzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzICpvcHMpCit7CisJc3RydWN0IHVuZGVmX2hvb2sgKmhvb2s7CisKKwlCVUdfT04oIW9wcy0+aG9va3MpOworCisJZm9yIChob29rID0gb3BzLT5ob29rczsgaG9vay0+aW5zdHJfbWFzazsgaG9vaysrKQorCQl1bnJlZ2lzdGVyX3VuZGVmX2hvb2soaG9vayk7CisKKwlwcl9ub3RpY2UoIlJlbW92ZWQgJXMgZW11bGF0aW9uIGhhbmRsZXJcbiIsIG9wcy0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2luc25fZW11bGF0aW9uX21vZGUoc3RydWN0IGluc25fZW11bGF0aW9uICppbnNuLAorCQkJCSAgICAgICBlbnVtIGluc25fZW11bGF0aW9uX21vZGUgcHJldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocHJldikgeworCWNhc2UgSU5TTl9VTkRFRjogLyogTm90aGluZyB0byBiZSBkb25lICovCisJCWJyZWFrOworCWNhc2UgSU5TTl9FTVVMQVRFOgorCQlyZW1vdmVfZW11bGF0aW9uX2hvb2tzKGluc24tPm9wcyk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9IVzoKKwkJaWYgKGluc24tPm9wcy0+c2V0X2h3X21vZGUpIHsKKwkJCWluc24tPm9wcy0+c2V0X2h3X21vZGUoZmFsc2UpOworCQkJcHJfbm90aWNlKCJEaXNhYmxlZCAlcyBzdXBwb3J0XG4iLCBpbnNuLT5vcHMtPm5hbWUpOworCQl9CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaW5zbi0+Y3VycmVudF9tb2RlKSB7CisJY2FzZSBJTlNOX1VOREVGOgorCQlicmVhazsKKwljYXNlIElOU05fRU1VTEFURToKKwkJcmVnaXN0ZXJfZW11bGF0aW9uX2hvb2tzKGluc24tPm9wcyk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9IVzoKKwkJaWYgKGluc24tPm9wcy0+c2V0X2h3X21vZGUgJiYgaW5zbi0+b3BzLT5zZXRfaHdfbW9kZSh0cnVlKSkKKwkJCXByX25vdGljZSgiRW5hYmxlZCAlcyBzdXBwb3J0XG4iLCBpbnNuLT5vcHMtPm5hbWUpOworCQllbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9pbnNuX2VtdWxhdGlvbihzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzICpvcHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaW5zbl9lbXVsYXRpb24gKmluc247CisKKwlpbnNuID0ga3phbGxvYyhzaXplb2YoKmluc24pLCBHRlBfS0VSTkVMKTsKKwlpbnNuLT5vcHMgPSBvcHM7CisJaW5zbi0+bWluID0gSU5TTl9VTkRFRjsKKworCXN3aXRjaCAob3BzLT5zdGF0dXMpIHsKKwljYXNlIElOU05fREVQUkVDQVRFRDoKKwkJaW5zbi0+Y3VycmVudF9tb2RlID0gSU5TTl9FTVVMQVRFOworCQlpbnNuLT5tYXggPSBJTlNOX0hXOworCQlicmVhazsKKwljYXNlIElOU05fT0JTT0xFVEU6CisJCWluc24tPmN1cnJlbnRfbW9kZSA9IElOU05fVU5ERUY7CisJCWluc24tPm1heCA9IElOU05fRU1VTEFURTsKKwkJYnJlYWs7CisJfQorCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpbnNuX2VtdWxhdGlvbl9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmluc24tPm5vZGUsICZpbnNuX2VtdWxhdGlvbik7CisJbnJfaW5zbl9lbXVsYXRlZCsrOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnNuX2VtdWxhdGlvbl9sb2NrLCBmbGFncyk7CisKKwkvKiBSZWdpc3RlciBhbnkgaGFuZGxlcnMgaWYgcmVxdWlyZWQgKi8KKwl1cGRhdGVfaW5zbl9lbXVsYXRpb25fbW9kZShpbnNuLCBJTlNOX1VOREVGKTsKK30KKworc3RhdGljIGludCBlbXVsYXRpb25fcHJvY19oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCisJCQkJICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsCisJCQkJICBsb2ZmX3QgKnBwb3MpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGluc25fZW11bGF0aW9uICppbnNuID0gKHN0cnVjdCBpbnNuX2VtdWxhdGlvbiAqKSB0YWJsZS0+ZGF0YTsKKwllbnVtIGluc25fZW11bGF0aW9uX21vZGUgcHJldl9tb2RlID0gaW5zbi0+Y3VycmVudF9tb2RlOworCisJdGFibGUtPmRhdGEgPSAmaW5zbi0+Y3VycmVudF9tb2RlOworCXJldCA9IHByb2NfZG9pbnR2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKworCWlmIChyZXQgfHwgIXdyaXRlIHx8IHByZXZfbW9kZSA9PSBpbnNuLT5jdXJyZW50X21vZGUpCisJCWdvdG8gcmV0OworCisJcmV0ID0gdXBkYXRlX2luc25fZW11bGF0aW9uX21vZGUoaW5zbiwgcHJldl9tb2RlKTsKKwlpZiAocmV0KSB7CisJCS8qIE1vZGUgY2hhbmdlIGZhaWxlZCwgcmV2ZXJ0IHRvIHByZXZpb3VzIG1vZGUuICovCisJCWluc24tPmN1cnJlbnRfbW9kZSA9IHByZXZfbW9kZTsKKwkJdXBkYXRlX2luc25fZW11bGF0aW9uX21vZGUoaW5zbiwgSU5TTl9VTkRFRik7CisJfQorcmV0OgorCXRhYmxlLT5kYXRhID0gaW5zbjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBjdGxfYWJpW10gPSB7CisJeworCQkucHJvY25hbWUgPSAiYWJpIiwKKwkJLm1vZGUgPSAwNTU1LAorCX0sCisJeyB9Cit9OworCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9pbnNuX2VtdWxhdGlvbl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqdGFibGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSA9IDA7CisJc3RydWN0IGluc25fZW11bGF0aW9uICppbnNuOworCXN0cnVjdCBjdGxfdGFibGUgKmluc25zX3N5c2N0bCwgKnN5c2N0bDsKKworCWluc25zX3N5c2N0bCA9IGt6YWxsb2Moc2l6ZW9mKCpzeXNjdGwpICogKG5yX2luc25fZW11bGF0ZWQgKyAxKSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpbnNuX2VtdWxhdGlvbl9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnNuLCAmaW5zbl9lbXVsYXRpb24sIG5vZGUpIHsKKwkJc3lzY3RsID0gJmluc25zX3N5c2N0bFtpXTsKKworCQlzeXNjdGwtPm1vZGUgPSAwNjQ0OworCQlzeXNjdGwtPm1heGxlbiA9IHNpemVvZihpbnQpOworCisJCXN5c2N0bC0+cHJvY25hbWUgPSBpbnNuLT5vcHMtPm5hbWU7CisJCXN5c2N0bC0+ZGF0YSA9IGluc247CisJCXN5c2N0bC0+ZXh0cmExID0gJmluc24tPm1pbjsKKwkJc3lzY3RsLT5leHRyYTIgPSAmaW5zbi0+bWF4OworCQlzeXNjdGwtPnByb2NfaGFuZGxlciA9IGVtdWxhdGlvbl9wcm9jX2hhbmRsZXI7CisJCWkrKzsKKwl9CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc25fZW11bGF0aW9uX2xvY2ssIGZsYWdzKTsKKworCXRhYmxlLT5jaGlsZCA9IGluc25zX3N5c2N0bDsKKwlyZWdpc3Rlcl9zeXNjdGxfdGFibGUodGFibGUpOworfQorCisvKgorICogIEltcGxlbWVudCBlbXVsYXRpb24gb2YgdGhlIFNXUC9TV1BCIGluc3RydWN0aW9ucyB1c2luZyBsb2FkLWV4Y2x1c2l2ZSBhbmQKKyAqICBzdG9yZS1leGNsdXNpdmUuCisgKgorICogIFN5bnRheCBvZiBTV1B7Qn0gaW5zdHJ1Y3Rpb246IFNXUHtCfTxjPiA8UnQ+LCA8UnQyPiwgWzxSbj5dCisgKiAgV2hlcmU6IFJ0ICA9IGRlc3RpbmF0aW9uCisgKgkgICBSdDIgPSBzb3VyY2UKKyAqCSAgIFJuICA9IGFkZHJlc3MKKyAqLworCisvKgorICogRXJyb3ItY2hlY2tpbmcgU1dQIG1hY3JvcyBpbXBsZW1lbnRlZCB1c2luZyBsZHhye2J9L3N0eHJ7Yn0KKyAqLworI2RlZmluZSBfX3VzZXJfc3dwWF9hc20oZGF0YSwgYWRkciwgcmVzLCB0ZW1wLCBCKQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSIJbW92CQkldzIsICV3MVxuIgkJCVwKKwkiMDoJbGR4ciJCIgkJJXcxLCBbJTNdXG4iCQkJXAorCSIxOglzdHhyIkIiCQkldzAsICV3MiwgWyUzXVxuIgkJXAorCSIJY2J6CQkldzAsIDJmXG4iCQkJXAorCSIJbW92CQkldzAsICV3NFxuIgkJCVwKKwkiMjpcbiIJCQkJCQkJXAorCSIJLnB1c2hzZWN0aW9uCSAuZml4dXAsXCJheFwiXG4iCQlcCisJIgkuYWxpZ24JCTJcbiIJCQkJXAorCSIzOgltb3YJCSV3MCwgJXc1XG4iCQkJXAorCSIJYgkJMmJcbiIJCQkJXAorCSIJLnBvcHNlY3Rpb24iCQkJCQlcCisJIgkucHVzaHNlY3Rpb24JIF9fZXhfdGFibGUsXCJhXCJcbiIJCVwKKwkiCS5hbGlnbgkJM1xuIgkJCQlcCisJIgkucXVhZAkJMGIsIDNiXG4iCQkJXAorCSIJLnF1YWQJCTFiLCAzYlxuIgkJCVwKKwkiCS5wb3BzZWN0aW9uIgkJCQkJXAorCTogIj0mciIgKHJlcyksICIrciIgKGRhdGEpLCAiPSZyIiAodGVtcCkJCVwKKwk6ICJyIiAoYWRkciksICJpIiAoLUVBR0FJTiksICJpIiAoLUVGQVVMVCkJCVwKKwk6ICJtZW1vcnkiKQorCisjZGVmaW5lIF9fdXNlcl9zd3BfYXNtKGRhdGEsIGFkZHIsIHJlcywgdGVtcCkgXAorCV9fdXNlcl9zd3BYX2FzbShkYXRhLCBhZGRyLCByZXMsIHRlbXAsICIiKQorI2RlZmluZSBfX3VzZXJfc3dwYl9hc20oZGF0YSwgYWRkciwgcmVzLCB0ZW1wKSBcCisJX191c2VyX3N3cFhfYXNtKGRhdGEsIGFkZHIsIHJlcywgdGVtcCwgImIiKQorCisvKgorICogQml0IDIyIG9mIHRoZSBpbnN0cnVjdGlvbiBlbmNvZGluZyBkaXN0aW5ndWlzaGVzIGJldHdlZW4KKyAqIHRoZSBTV1AgYW5kIFNXUEIgdmFyaWFudHMgKGJpdCBzZXQgbWVhbnMgU1dQQikuCisgKi8KKyNkZWZpbmUgVFlQRV9TV1BCICgxIDw8IDIyKQorCisvKgorICogU2V0IHVwIHByb2Nlc3MgaW5mbyB0byBzaWduYWwgc2VnbWVudGF0aW9uIGZhdWx0IC0gY2FsbGVkIG9uIGFjY2VzcyBlcnJvci4KKyAqLworc3RhdGljIHZvaWQgc2V0X3NlZ2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc2lnaW5mb190IGluZm87CisKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJaWYgKGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKSA9PSBOVUxMKQorCQlpbmZvLnNpX2NvZGUgPSBTRUdWX01BUEVSUjsKKwllbHNlCisJCWluZm8uc2lfY29kZSA9IFNFR1ZfQUNDRVJSOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpbmZvLnNpX3NpZ25vID0gU0lHU0VHVjsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2FkZHIgID0gKHZvaWQgKikgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKKworCXByX2RlYnVnKCJTV1B7Qn0gZW11bGF0aW9uOiBhY2Nlc3MgY2F1c2VkIG1lbW9yeSBhYm9ydCFcbiIpOworCWFybTY0X25vdGlmeV9kaWUoIklsbGVnYWwgbWVtb3J5IGFjY2VzcyIsIHJlZ3MsICZpbmZvLCAwKTsKK30KKworc3RhdGljIGludCBlbXVsYXRlX3N3cFgodW5zaWduZWQgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGludCAqZGF0YSwKKwkJCXVuc2lnbmVkIGludCB0eXBlKQoreworCXVuc2lnbmVkIGludCByZXMgPSAwOworCisJaWYgKCh0eXBlICE9IFRZUEVfU1dQQikgJiYgKGFkZHJlc3MgJiAweDMpKSB7CisJCS8qIFNXUCB0byB1bmFsaWduZWQgYWRkcmVzcyBub3QgcGVybWl0dGVkICovCisJCXByX2RlYnVnKCJTV1AgaW5zdHJ1Y3Rpb24gb24gdW5hbGlnbmVkIHBvaW50ZXIhXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCWlmICh0eXBlID09IFRZUEVfU1dQQikKKwkJCV9fdXNlcl9zd3BiX2FzbSgqZGF0YSwgYWRkcmVzcywgcmVzLCB0ZW1wKTsKKwkJZWxzZQorCQkJX191c2VyX3N3cF9hc20oKmRhdGEsIGFkZHJlc3MsIHJlcywgdGVtcCk7CisKKwkJaWYgKGxpa2VseShyZXMgIT0gLUVBR0FJTikgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlicmVhazsKKworCQljb25kX3Jlc2NoZWQoKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogc3dwX2hhbmRsZXIgbG9ncyB0aGUgaWQgb2YgY2FsbGluZyBwcm9jZXNzLCBkaXNzZWN0cyB0aGUgaW5zdHJ1Y3Rpb24sIHNhbml0eQorICogY2hlY2tzIHRoZSBtZW1vcnkgbG9jYXRpb24sIGNhbGxzIGVtdWxhdGVfc3dwWCBmb3IgdGhlIGFjdHVhbCBvcGVyYXRpb24gYW5kCisgKiBkZWFscyB3aXRoIGZpeHVwL2Vycm9yIGhhbmRsaW5nIGJlZm9yZSByZXR1cm5pbmcKKyAqLworc3RhdGljIGludCBzd3BfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIGluc3RyKQoreworCXUzMiBkZXN0cmVnLCBkYXRhLCB0eXBlLCBhZGRyZXNzID0gMDsKKwlpbnQgcm4sIHJ0MiwgcmVzID0gMDsKKworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTLCAxLCByZWdzLCByZWdzLT5wYyk7CisKKwl0eXBlID0gaW5zdHIgJiBUWVBFX1NXUEI7CisKKwlzd2l0Y2ggKGFybV9jaGVja19jb25kaXRpb24oaW5zdHIsIHJlZ3MtPnBzdGF0ZSkpIHsKKwljYXNlIEFSTV9PUENPREVfQ09ORFRFU1RfUEFTUzoKKwkJYnJlYWs7CisJY2FzZSBBUk1fT1BDT0RFX0NPTkRURVNUX0ZBSUw6CisJCS8qIENvbmRpdGlvbiBmYWlsZWQgLSByZXR1cm4gdG8gbmV4dCBpbnN0cnVjdGlvbiAqLworCQlnb3RvIHJldDsKKwljYXNlIEFSTV9PUENPREVfQ09ORFRFU1RfVU5DT05EOgorCQkvKiBJZiB1bmNvbmRpdGlvbmFsIGVuY29kaW5nIC0gbm90IGEgU1dQLCB1bmRlZiAqLworCQlyZXR1cm4gLUVGQVVMVDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlybiA9IGFhcmNoMzJfaW5zbl9leHRyYWN0X3JlZ19udW0oaW5zdHIsIEEzMl9STl9PRkZTRVQpOworCXJ0MiA9IGFhcmNoMzJfaW5zbl9leHRyYWN0X3JlZ19udW0oaW5zdHIsIEEzMl9SVDJfT0ZGU0VUKTsKKworCWFkZHJlc3MgPSAodTMyKXJlZ3MtPnVzZXJfcmVncy5yZWdzW3JuXTsKKwlkYXRhCT0gKHUzMilyZWdzLT51c2VyX3JlZ3MucmVnc1tydDJdOworCWRlc3RyZWcgPSBhYXJjaDMyX2luc25fZXh0cmFjdF9yZWdfbnVtKGluc3RyLCBBMzJfUlRfT0ZGU0VUKTsKKworCXByX2RlYnVnKCJhZGRyIGluIHIlZC0+MHglMDh4LCBkZXN0IGlzIHIlZCwgc291cmNlIGluIHIlZC0+MHglMDh4KVxuIiwKKwkJcm4sIGFkZHJlc3MsIGRlc3RyZWcsCisJCWFhcmNoMzJfaW5zbl9leHRyYWN0X3JlZ19udW0oaW5zdHIsIEEzMl9SVDJfT0ZGU0VUKSwgZGF0YSk7CisKKwkvKiBDaGVjayBhY2Nlc3MgaW4gcmVhc29uYWJsZSBhY2Nlc3MgcmFuZ2UgZm9yIGJvdGggU1dQIGFuZCBTV1BCICovCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAoYWRkcmVzcyAmIH4zKSwgNCkpIHsKKwkJcHJfZGVidWcoIlNXUHtCfSBlbXVsYXRpb246IGFjY2VzcyB0byAweCUwOHggbm90IGFsbG93ZWQhXG4iLAorCQkJYWRkcmVzcyk7CisJCWdvdG8gZmF1bHQ7CisJfQorCisJcmVzID0gZW11bGF0ZV9zd3BYKGFkZHJlc3MsICZkYXRhLCB0eXBlKTsKKwlpZiAocmVzID09IC1FRkFVTFQpCisJCWdvdG8gZmF1bHQ7CisJZWxzZSBpZiAocmVzID09IDApCisJCXJlZ3MtPnVzZXJfcmVncy5yZWdzW2Rlc3RyZWddID0gZGF0YTsKKworcmV0OgorCWlmICh0eXBlID09IFRZUEVfU1dQQikKKwkJdHJhY2VfaW5zdHJ1Y3Rpb25fZW11bGF0aW9uKCJzd3BiIiwgcmVncy0+cGMpOworCWVsc2UKKwkJdHJhY2VfaW5zdHJ1Y3Rpb25fZW11bGF0aW9uKCJzd3AiLCByZWdzLT5wYyk7CisKKwlwcl93YXJuX3JhdGVsaW1pdGVkKCJcIiVzXCIgKCVsZCkgdXNlcyBvYnNvbGV0ZSBTV1B7Qn0gaW5zdHJ1Y3Rpb24gYXQgMHglbGx4XG4iLAorCQkJY3VycmVudC0+Y29tbSwgKHVuc2lnbmVkIGxvbmcpY3VycmVudC0+cGlkLCByZWdzLT5wYyk7CisKKwlyZWdzLT5wYyArPSA0OworCXJldHVybiAwOworCitmYXVsdDoKKwlzZXRfc2VnZmF1bHQocmVncywgYWRkcmVzcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE9ubHkgZW11bGF0ZSBTV1AvU1dQQiBleGVjdXRlZCBpbiBBUk0gc3RhdGUvVXNlciBtb2RlLgorICogVGhlIGtlcm5lbCBtdXN0IGJlIFNXUCBmcmVlIGFuZCBTV1B7Qn0gZG9lcyBub3QgZXhpc3QgaW4gVGh1bWIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdW5kZWZfaG9vayBzd3BfaG9va3NbXSA9IHsKKwl7CisJCS5pbnN0cl9tYXNrCT0gMHgwZmIwMGZmMCwKKwkJLmluc3RyX3ZhbAk9IDB4MDEwMDAwOTAsCisJCS5wc3RhdGVfbWFzawk9IENPTVBBVF9QU1JfTU9ERV9NQVNLLAorCQkucHN0YXRlX3ZhbAk9IENPTVBBVF9QU1JfTU9ERV9VU1IsCisJCS5mbgkJPSBzd3BfaGFuZGxlcgorCX0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGluc25fZW11bGF0aW9uX29wcyBzd3Bfb3BzID0geworCS5uYW1lID0gInN3cCIsCisJLnN0YXR1cyA9IElOU05fT0JTT0xFVEUsCisJLmhvb2tzID0gc3dwX2hvb2tzLAorCS5zZXRfaHdfbW9kZSA9IE5VTEwsCit9OworCitzdGF0aWMgaW50IGNwMTViYXJyaWVyX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpbnN0cikKK3sKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUywgMSwgcmVncywgcmVncy0+cGMpOworCisJc3dpdGNoIChhcm1fY2hlY2tfY29uZGl0aW9uKGluc3RyLCByZWdzLT5wc3RhdGUpKSB7CisJY2FzZSBBUk1fT1BDT0RFX0NPTkRURVNUX1BBU1M6CisJCWJyZWFrOworCWNhc2UgQVJNX09QQ09ERV9DT05EVEVTVF9GQUlMOgorCQkvKiBDb25kaXRpb24gZmFpbGVkIC0gcmV0dXJuIHRvIG5leHQgaW5zdHJ1Y3Rpb24gKi8KKwkJZ290byByZXQ7CisJY2FzZSBBUk1fT1BDT0RFX0NPTkRURVNUX1VOQ09ORDoKKwkJLyogSWYgdW5jb25kaXRpb25hbCBlbmNvZGluZyAtIG5vdCBhIGJhcnJpZXIgaW5zdHJ1Y3Rpb24gKi8KKwkJcmV0dXJuIC1FRkFVTFQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChhYXJjaDMyX2luc25fbWNyX2V4dHJhY3RfY3JtKGluc3RyKSkgeworCWNhc2UgMTA6CisJCS8qCisJCSAqIGRtYiAtIG1jciBwMTUsIDAsIFJ0LCBjNywgYzEwLCA1CisJCSAqIGRzYiAtIG1jciBwMTUsIDAsIFJ0LCBjNywgYzEwLCA0CisJCSAqLworCQlpZiAoYWFyY2gzMl9pbnNuX21jcl9leHRyYWN0X29wYzIoaW5zdHIpID09IDUpIHsKKwkJCWRtYihzeSk7CisJCQl0cmFjZV9pbnN0cnVjdGlvbl9lbXVsYXRpb24oCisJCQkJIm1jciBwMTUsIDAsIFJ0LCBjNywgYzEwLCA1IDsgZG1iIiwgcmVncy0+cGMpOworCQl9IGVsc2UgeworCQkJZHNiKHN5KTsKKwkJCXRyYWNlX2luc3RydWN0aW9uX2VtdWxhdGlvbigKKwkJCQkibWNyIHAxNSwgMCwgUnQsIGM3LCBjMTAsIDQgOyBkc2IiLCByZWdzLT5wYyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSA1OgorCQkvKgorCQkgKiBpc2IgLSBtY3IgcDE1LCAwLCBSdCwgYzcsIGM1LCA0CisJCSAqCisJCSAqIFRha2luZyBhbiBleGNlcHRpb24gb3IgcmV0dXJuaW5nIGZyb20gb25lIGFjdHMgYXMgYW4KKwkJICogaW5zdHJ1Y3Rpb24gYmFycmllci4gU28gbm8gZXhwbGljaXQgYmFycmllciBuZWVkZWQgaGVyZS4KKwkJICovCisJCXRyYWNlX2luc3RydWN0aW9uX2VtdWxhdGlvbigKKwkJCSJtY3IgcDE1LCAwLCBSdCwgYzcsIGM1LCA0IDsgaXNiIiwgcmVncy0+cGMpOworCQlicmVhazsKKwl9CisKK3JldDoKKwlwcl93YXJuX3JhdGVsaW1pdGVkKCJcIiVzXCIgKCVsZCkgdXNlcyBkZXByZWNhdGVkIENQMTUgQmFycmllciBpbnN0cnVjdGlvbiBhdCAweCVsbHhcbiIsCisJCQljdXJyZW50LT5jb21tLCAodW5zaWduZWQgbG9uZyljdXJyZW50LT5waWQsIHJlZ3MtPnBjKTsKKworCXJlZ3MtPnBjICs9IDQ7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgU0NUTFJfRUwxX0NQMTVCRU4gKDEgPDwgNSkKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ19zY3Rscl9lbDEodTMyIGNsZWFyLCB1MzIgc2V0KQoreworCXUzMiB2YWw7CisKKwlhc20gdm9sYXRpbGUoIm1ycyAlMCwgc2N0bHJfZWwxIiA6ICI9ciIgKHZhbCkpOworCXZhbCAmPSB+Y2xlYXI7CisJdmFsIHw9IHNldDsKKwlhc20gdm9sYXRpbGUoIm1zciBzY3Rscl9lbDEsICUwIiA6IDogInIiICh2YWwpKTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX2NwMTVfYmVuKHZvaWQgKmluZm8pCit7CisJY29uZmlnX3NjdGxyX2VsMSgwLCBTQ1RMUl9FTDFfQ1AxNUJFTik7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfY3AxNV9iZW4odm9pZCAqaW5mbykKK3sKKwljb25maWdfc2N0bHJfZWwxKFNDVExSX0VMMV9DUDE1QkVOLCAwKTsKK30KKworc3RhdGljIGludCBjcHVfaG90cGx1Z19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpiLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9TVEFSVElORzoKKwljYXNlIENQVV9TVEFSVElOR19GUk9aRU46CisJCWVuYWJsZV9jcDE1X2JlbihOVUxMKTsKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCWNhc2UgQ1BVX0RZSU5HOgorCWNhc2UgQ1BVX0RZSU5HX0ZST1pFTjoKKwkJZGlzYWJsZV9jcDE1X2JlbihOVUxMKTsKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3B1X2hvdHBsdWdfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjcHVfaG90cGx1Z19ub3RpZnksCit9OworCitzdGF0aWMgaW50IGNwMTVfYmFycmllcl9zZXRfaHdfbW9kZShib29sIGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKSB7CisJCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X2hvdHBsdWdfbm90aWZpZXIpOworCQlvbl9lYWNoX2NwdShlbmFibGVfY3AxNV9iZW4sIE5VTEwsIHRydWUpOworCX0gZWxzZSB7CisJCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfaG90cGx1Z19ub3RpZmllcik7CisJCW9uX2VhY2hfY3B1KGRpc2FibGVfY3AxNV9iZW4sIE5VTEwsIHRydWUpOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IHVuZGVmX2hvb2sgY3AxNV9iYXJyaWVyX2hvb2tzW10gPSB7CisJeworCQkuaW5zdHJfbWFzawk9IDB4MGZmZjBmZGYsCisJCS5pbnN0cl92YWwJPSAweDBlMDcwZjlhLAorCQkucHN0YXRlX21hc2sJPSBDT01QQVRfUFNSX01PREVfTUFTSywKKwkJLnBzdGF0ZV92YWwJPSBDT01QQVRfUFNSX01PREVfVVNSLAorCQkuZm4JCT0gY3AxNWJhcnJpZXJfaGFuZGxlciwKKwl9LAorCXsKKwkJLmluc3RyX21hc2sJPSAweDBmZmYwZmZmLAorCQkuaW5zdHJfdmFsCT0gMHgwZTA3MGY5NSwKKwkJLnBzdGF0ZV9tYXNrCT0gQ09NUEFUX1BTUl9NT0RFX01BU0ssCisJCS5wc3RhdGVfdmFsCT0gQ09NUEFUX1BTUl9NT0RFX1VTUiwKKwkJLmZuCQk9IGNwMTViYXJyaWVyX2hhbmRsZXIsCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzIGNwMTVfYmFycmllcl9vcHMgPSB7CisJLm5hbWUgPSAiY3AxNV9iYXJyaWVyIiwKKwkuc3RhdHVzID0gSU5TTl9ERVBSRUNBVEVELAorCS5ob29rcyA9IGNwMTVfYmFycmllcl9ob29rcywKKwkuc2V0X2h3X21vZGUgPSBjcDE1X2JhcnJpZXJfc2V0X2h3X21vZGUsCit9OworCisvKgorICogSW52b2tlZCBhcyBsYXRlX2luaXRjYWxsLCBzaW5jZSBub3QgbmVlZGVkIGJlZm9yZSBpbml0IHNwYXduZWQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGFybXY4X2RlcHJlY2F0ZWRfaW5pdCh2b2lkKQoreworCWlmIChJU19FTkFCTEVEKENPTkZJR19TV1BfRU1VTEFUSU9OKSkKKwkJcmVnaXN0ZXJfaW5zbl9lbXVsYXRpb24oJnN3cF9vcHMpOworCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NQMTVfQkFSUklFUl9FTVVMQVRJT04pKQorCQlyZWdpc3Rlcl9pbnNuX2VtdWxhdGlvbigmY3AxNV9iYXJyaWVyX29wcyk7CisKKwlyZWdpc3Rlcl9pbnNuX2VtdWxhdGlvbl9zeXNjdGwoY3RsX2FiaSk7CisKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChhcm12OF9kZXByZWNhdGVkX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjI2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb250YWlucyBDUFUgc3BlY2lmaWMgZXJyYXRhIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFSTSBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJhbHRlcm5hdGl2ZXM6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisKKyNkZWZpbmUgTUlEUl9DT1JURVhfQTUzIE1JRFJfQ1BVX1BBUlQoQVJNX0NQVV9JTVBfQVJNLCBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E1MykKKyNkZWZpbmUgTUlEUl9DT1JURVhfQTU3IE1JRFJfQ1BVX1BBUlQoQVJNX0NQVV9JTVBfQVJNLCBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E1NykKKworLyoKKyAqIEFkZCBhIHN0cnVjdCBvciBhbm90aGVyIGRhdGF0eXBlIHRvIHRoZSB1bmlvbiBiZWxvdyBpZiB5b3UgbmVlZAorICogZGlmZmVyZW50IG1lYW5zIHRvIGRldGVjdCBhbiBhZmZlY3RlZCBDUFUuCisgKi8KK3N0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIHsKKwljb25zdCBjaGFyICpkZXNjOworCXUxNiBjYXBhYmlsaXR5OworCWJvb2wgKCppc19hZmZlY3RlZCkoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKik7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyIG1pZHJfbW9kZWw7CisJCQl1MzIgbWlkcl9yYW5nZV9taW4sIG1pZHJfcmFuZ2VfbWF4OworCQl9OworCX07Cit9OworCisjZGVmaW5lIENQVV9NT0RFTF9NQVNLIChNSURSX0lNUExFTUVOVE9SX01BU0sgfCBNSURSX1BBUlROVU1fTUFTSyB8IFwKKwkJCU1JRFJfQVJDSElURUNUVVJFX01BU0spCisKK3N0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkCitpc19hZmZlY3RlZF9taWRyX3JhbmdlKHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSkKK3sKKwl1MzIgbWlkciA9IHJlYWRfY3B1aWRfaWQoKTsKKworCWlmICgobWlkciAmIENQVV9NT0RFTF9NQVNLKSAhPSBlbnRyeS0+bWlkcl9tb2RlbCkKKwkJcmV0dXJuIGZhbHNlOworCisJbWlkciAmPSBNSURSX1JFVklTSU9OX01BU0sgfCBNSURSX1ZBUklBTlRfTUFTSzsKKworCXJldHVybiAobWlkciA+PSBlbnRyeS0+bWlkcl9yYW5nZV9taW4gJiYgbWlkciA8PSBlbnRyeS0+bWlkcl9yYW5nZV9tYXgpOworfQorCisjZGVmaW5lIE1JRFJfUkFOR0UobW9kZWwsIG1pbiwgbWF4KSBcCisJLmlzX2FmZmVjdGVkID0gaXNfYWZmZWN0ZWRfbWlkcl9yYW5nZSwgXAorCS5taWRyX21vZGVsID0gbW9kZWwsIFwKKwkubWlkcl9yYW5nZV9taW4gPSBtaW4sIFwKKwkubWlkcl9yYW5nZV9tYXggPSBtYXgKKworc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZXJyYXRhW10gPSB7CisjaWYJZGVmaW5lZChDT05GSUdfQVJNNjRfRVJSQVRVTV84MjYzMTkpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19BUk02NF9FUlJBVFVNXzgyNzMxOSkgfHwgXAorCWRlZmluZWQoQ09ORklHX0FSTTY0X0VSUkFUVU1fODI0MDY5KQorCXsKKwkvKiBDb3J0ZXgtQTUzIHIwcFswMTJdICovCisJCS5kZXNjID0gIkFSTSBlcnJhdGEgODI2MzE5LCA4MjczMTksIDgyNDA2OSIsCisJCS5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF9DTEVBTl9DQUNIRSwKKwkJTUlEUl9SQU5HRShNSURSX0NPUlRFWF9BNTMsIDB4MDAsIDB4MDIpLAorCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJNNjRfRVJSQVRVTV84MTk0NzIKKwl7CisJLyogQ29ydGV4LUE1MyByMHBbMDFdICovCisJCS5kZXNjID0gIkFSTSBlcnJhdGEgODE5NDcyIiwKKwkJLmNhcGFiaWxpdHkgPSBBUk02NF9XT1JLQVJPVU5EX0NMRUFOX0NBQ0hFLAorCQlNSURSX1JBTkdFKE1JRFJfQ09SVEVYX0E1MywgMHgwMCwgMHgwMSksCisJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUk02NF9FUlJBVFVNXzgzMjA3NQorCXsKKwkvKiBDb3J0ZXgtQTU3IHIwcDAgLSByMXAyICovCisJCS5kZXNjID0gIkFSTSBlcnJhdHVtIDgzMjA3NSIsCisJCS5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF9ERVZJQ0VfTE9BRF9BQ1FVSVJFLAorCQlNSURSX1JBTkdFKE1JRFJfQ09SVEVYX0E1NywgMHgwMCwgMHgxMiksCisJfSwKKyNlbmRpZgorCXsKKwl9Cit9OworCit2b2lkIGNoZWNrX2xvY2FsX2NwdV9lcnJhdGEodm9pZCkKK3sKKwlzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY3B1cyA9IGFybTY0X2VycmF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGNwdXNbaV0uZGVzYzsgaSsrKSB7CisJCWlmICghY3B1c1tpXS5pc19hZmZlY3RlZCgmY3B1c1tpXSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWNwdXNfaGF2ZV9jYXAoY3B1c1tpXS5jYXBhYmlsaXR5KSkKKwkJCXByX2luZm8oImVuYWJsaW5nIHdvcmthcm91bmQgZm9yICVzXG4iLCBjcHVzW2ldLmRlc2MpOworCQljcHVzX3NldF9jYXAoY3B1c1tpXS5jYXBhYmlsaXR5KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMKaW5kZXggNTA0ZmRhYS4uNTdiNjQxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1aW5mby5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWluZm8uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZXR5cGUuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CkBAIC0xMTEsNiArMTEyLDE1IEBACiAJZGlmZiB8PSBDSEVDSyhjbnRmcnEsIGJvb3QsIGN1ciwgY3B1KTsKIAogCS8qCisJICogVGhlIGtlcm5lbCB1c2VzIHNlbGYtaG9zdGVkIGRlYnVnIGZlYXR1cmVzIGFuZCBleHBlY3RzIENQVXMgdG8KKwkgKiBzdXBwb3J0IGlkZW50aWNhbCBkZWJ1ZyBmZWF0dXJlcy4gV2UgcHJlc2VudGx5IG5lZWQgQ1RYX0NNUHMsIFdSUHMsCisJICogYW5kIEJSUHMgdG8gYmUgaWRlbnRpY2FsLgorCSAqIElEX0FBNjRERlIxIGlzIGN1cnJlbnRseSBSRVMwLgorCSAqLworCWRpZmYgfD0gQ0hFQ0soaWRfYWE2NGRmcjAsIGJvb3QsIGN1ciwgY3B1KTsKKwlkaWZmIHw9IENIRUNLKGlkX2FhNjRkZnIxLCBib290LCBjdXIsIGNwdSk7CisKKwkvKgogCSAqIEV2ZW4gaW4gYmlnLkxJVFRMRSwgcHJvY2Vzc29ycyBzaG91bGQgYmUgaWRlbnRpY2FsIGluc3RydWN0aW9uLXNldAogCSAqIHdpc2UuCiAJICovCkBAIC0xNDMsNyArMTUzLDEyIEBACiAJZGlmZiB8PSBDSEVDSyhpZF9pc2FyMywgYm9vdCwgY3VyLCBjcHUpOwogCWRpZmYgfD0gQ0hFQ0soaWRfaXNhcjQsIGJvb3QsIGN1ciwgY3B1KTsKIAlkaWZmIHw9IENIRUNLKGlkX2lzYXI1LCBib290LCBjdXIsIGNwdSk7Ci0JZGlmZiB8PSBDSEVDSyhpZF9tbWZyMCwgYm9vdCwgY3VyLCBjcHUpOworCS8qCisJICogUmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlIEF1eFJlZyBmaWVsZCwgdGhlIEFJRlNSLCBBREZTUiwgYW5kCisJICogQUNUTFIgZm9ybWF0cyBjb3VsZCBkaWZmZXIgYWNyb3NzIENQVXMgYW5kIHRoZXJlZm9yZSB3b3VsZCBoYXZlIHRvCisJICogYmUgdHJhcHBlZCBmb3IgdmlydHVhbGl6YXRpb24gYW55d2F5LgorCSAqLworCWRpZmYgfD0gQ0hFQ0tfTUFTSyhpZF9tbWZyMCwgMHhmZjBmZmZmZiwgYm9vdCwgY3VyLCBjcHUpOwogCWRpZmYgfD0gQ0hFQ0soaWRfbW1mcjEsIGJvb3QsIGN1ciwgY3B1KTsKIAlkaWZmIHw9IENIRUNLKGlkX21tZnIyLCBib290LCBjdXIsIGNwdSk7CiAJZGlmZiB8PSBDSEVDSyhpZF9tbWZyMywgYm9vdCwgY3VyLCBjcHUpOwpAQCAtMTU1LDcgKzE3MCw3IEBACiAJICogcHJldGVuZCB0byBzdXBwb3J0IHRoZW0uCiAJICovCiAJV0FSTl9UQUlOVF9PTkNFKGRpZmYsIFRBSU5UX0NQVV9PVVRfT0ZfU1BFQywKLQkJCSJVbnN1cHBvcnRlZCBDUFUgZmVhdHVyZSB2YXJpYXRpb24uIik7CisJCQkiVW5zdXBwb3J0ZWQgQ1BVIGZlYXR1cmUgdmFyaWF0aW9uLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5mb19zdG9yZV9jcHUoc3RydWN0IGNwdWluZm9fYXJtNjQgKmluZm8pCkBAIC0xNjUsNiArMTgwLDggQEAKIAlpbmZvLT5yZWdfZGN6aWQgPSByZWFkX2NwdWlkKERDWklEX0VMMCk7CiAJaW5mby0+cmVnX21pZHIgPSByZWFkX2NwdWlkX2lkKCk7CiAKKwlpbmZvLT5yZWdfaWRfYWE2NGRmcjAgPSByZWFkX2NwdWlkKElEX0FBNjRERlIwX0VMMSk7CisJaW5mby0+cmVnX2lkX2FhNjRkZnIxID0gcmVhZF9jcHVpZChJRF9BQTY0REZSMV9FTDEpOwogCWluZm8tPnJlZ19pZF9hYTY0aXNhcjAgPSByZWFkX2NwdWlkKElEX0FBNjRJU0FSMF9FTDEpOwogCWluZm8tPnJlZ19pZF9hYTY0aXNhcjEgPSByZWFkX2NwdWlkKElEX0FBNjRJU0FSMV9FTDEpOwogCWluZm8tPnJlZ19pZF9hYTY0bW1mcjAgPSByZWFkX2NwdWlkKElEX0FBNjRNTUZSMF9FTDEpOwpAQCAtMTg2LDYgKzIwMyw4IEBACiAJaW5mby0+cmVnX2lkX3BmcjEgPSByZWFkX2NwdWlkKElEX1BGUjFfRUwxKTsKIAogCWNwdWluZm9fZGV0ZWN0X2ljYWNoZV9wb2xpY3koaW5mbyk7CisKKwljaGVja19sb2NhbF9jcHVfZXJyYXRhKCk7CiB9CiAKIHZvaWQgY3B1aW5mb19zdG9yZV9jcHUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2VmaS1lbnRyeS5TIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLWVudHJ5LlMKaW5kZXggZDE4YTQ0OS4uOGNlOWIwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZWZpLWVudHJ5LlMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLWVudHJ5LlMKQEAgLTYxLDcgKzYxLDggQEAKIAkgKi8KIAltb3YJeDIwLCB4MAkJLy8gRFRCIGFkZHJlc3MKIAlsZHIJeDAsIFtzcCwgIzE2XQkvLyByZWxvY2F0ZWQgX3RleHQgYWRkcmVzcwotCW1vdgl4MjEsIHgwCisJbGRyCXgyMSwgPXN0ZXh0X29mZnNldAorCWFkZAl4MjEsIHgwLCB4MjEKIAogCS8qCiAJICogQ2FsY3VsYXRlIHNpemUgb2YgdGhlIGtlcm5lbCBJbWFnZSAoc2FtZSBmb3Igb3JpZ2luYWwgYW5kIGNvcHkpLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9lZmkuYwppbmRleCA5NWM0OWViLi42ZmFjMjUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9lZmkuYwpAQCAtMTEsNiArMTEsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KQEAgLTExMiw4ICsxMTMsNiBAQAogCQllZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gJiAweGZmZmYsIHZlbmRvcik7CiAKIAlyZXR2YWwgPSBlZmlfY29uZmlnX2luaXQoTlVMTCk7Ci0JaWYgKHJldHZhbCA9PSAwKQotCQlzZXRfYml0KEVGSV9DT05GSUdfVEFCTEVTLCAmZWZpLmZsYWdzKTsKIAogb3V0OgogCWVhcmx5X21lbXVubWFwKGVmaS5zeXN0YWIsICBzaXplb2YoZWZpX3N5c3RlbV90YWJsZV90KSk7CkBAIC0xMjUsMTcgKzEyNCwxNyBAQAogICovCiBzdGF0aWMgX19pbml0IGludCBpc19yZXNlcnZlX3JlZ2lvbihlZmlfbWVtb3J5X2Rlc2NfdCAqbWQpCiB7Ci0JaWYgKCFpc19ub3JtYWxfcmFtKG1kKSkKKwlzd2l0Y2ggKG1kLT50eXBlKSB7CisJY2FzZSBFRklfTE9BREVSX0NPREU6CisJY2FzZSBFRklfTE9BREVSX0RBVEE6CisJY2FzZSBFRklfQk9PVF9TRVJWSUNFU19DT0RFOgorCWNhc2UgRUZJX0JPT1RfU0VSVklDRVNfREFUQToKKwljYXNlIEVGSV9DT05WRU5USU9OQUxfTUVNT1JZOgogCQlyZXR1cm4gMDsKLQotCWlmIChtZC0+YXR0cmlidXRlICYgRUZJX01FTU9SWV9SVU5USU1FKQotCQlyZXR1cm4gMTsKLQotCWlmIChtZC0+dHlwZSA9PSBFRklfQUNQSV9SRUNMQUlNX01FTU9SWSB8fAotCSAgICBtZC0+dHlwZSA9PSBFRklfUkVTRVJWRURfVFlQRSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIGlzX25vcm1hbF9yYW0obWQpOwogfQogCiBzdGF0aWMgX19pbml0IHZvaWQgcmVzZXJ2ZV9yZWdpb25zKHZvaWQpCkBAIC00NzEsMyArNDcwLDE3IEBACiAJcmV0dXJuIC0xOwogfQogZWFybHlfaW5pdGNhbGwoYXJtNjRfZW50ZXJfdmlydHVhbF9tb2RlKTsKKworc3RhdGljIGludCBfX2luaXQgYXJtNjRfZG1pX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIE9uIGFybTY0LCBETUkgZGVwZW5kcyBvbiBVRUZJLCBhbmQgZG1pX3NjYW5fbWFjaGluZSgpIG5lZWRzIHRvCisJICogYmUgY2FsbGVkIGVhcmx5IGJlY2F1c2UgZG1pX2lkX2luaXQoKSwgd2hpY2ggaXMgYW4gYXJjaF9pbml0Y2FsbAorCSAqIGl0c2VsZiwgZGVwZW5kcyBvbiBkbWlfc2Nhbl9tYWNoaW5lKCkgaGF2aW5nIGJlZW4gY2FsbGVkIGFscmVhZHkuCisJICovCisJZG1pX3NjYW5fbWFjaGluZSgpOworCWlmIChkbWlfYXZhaWxhYmxlKQorCQlkbWlfc2V0X2R1bXBfc3RhY2tfYXJjaF9kZXNjKCk7CisJcmV0dXJuIDA7Cit9Citjb3JlX2luaXRjYWxsKGFybTY0X2RtaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5LWZ0cmFjZS5TIGIvYXJjaC9hcm02NC9rZXJuZWwvZW50cnktZnRyYWNlLlMKaW5kZXggMzhlNzA0ZS4uMDhjYWZjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZW50cnktZnRyYWNlLlMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZW50cnktZnRyYWNlLlMKQEAgLTk4LDggKzk4LDggQEAKIEVOVFJZKF9tY291bnQpCiAJbWNvdW50X2VudGVyCiAKLQlsZHIJeDAsID1mdHJhY2VfdHJhY2VfZnVuY3Rpb24KLQlsZHIJeDIsIFt4MF0KKwlhZHJwCXgwLCBmdHJhY2VfdHJhY2VfZnVuY3Rpb24KKwlsZHIJeDIsIFt4MCwgIzpsbzEyOmZ0cmFjZV90cmFjZV9mdW5jdGlvbl0KIAlhZHIJeDAsIGZ0cmFjZV9zdHViCiAJY21wCXgwLCB4MgkJCS8vIGlmIChmdHJhY2VfdHJhY2VfZnVuY3Rpb24KIAliLmVxCXNraXBfZnRyYWNlX2NhbGwJLy8gICAgICE9IGZ0cmFjZV9zdHViKSB7CkBAIC0xMTUsMTQgKzExNSwxNSBAQAogCW1jb3VudF9leGl0CQkJLy8gICByZXR1cm47CiAJCQkJCS8vIH0KIHNraXBfZnRyYWNlX2NhbGw6Ci0JbGRyCXgxLCA9ZnRyYWNlX2dyYXBoX3JldHVybgotCWxkcgl4MiwgW3gxXQkJLy8gICBpZiAoKGZ0cmFjZV9ncmFwaF9yZXR1cm4KLQljbXAJeDAsIHgyCQkJLy8gICAgICAgICE9IGZ0cmFjZV9zdHViKQotCWIubmUJZnRyYWNlX2dyYXBoX2NhbGxlcgorCWFkcnAJeDEsIGZ0cmFjZV9ncmFwaF9yZXR1cm4KKwlsZHIJeDIsIFt4MSwgIzpsbzEyOmZ0cmFjZV9ncmFwaF9yZXR1cm5dCisJY21wCXgwLCB4MgkJCS8vICAgaWYgKChmdHJhY2VfZ3JhcGhfcmV0dXJuCisJYi5uZQlmdHJhY2VfZ3JhcGhfY2FsbGVyCS8vICAgICAgICAhPSBmdHJhY2Vfc3R1YikKIAotCWxkcgl4MSwgPWZ0cmFjZV9ncmFwaF9lbnRyeQkvLyAgICAgfHwgKGZ0cmFjZV9ncmFwaF9lbnRyeQotCWxkcgl4MiwgW3gxXQkJLy8gICAgICAgICE9IGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViKSkKLQlsZHIJeDAsID1mdHJhY2VfZ3JhcGhfZW50cnlfc3R1YgorCWFkcnAJeDEsIGZ0cmFjZV9ncmFwaF9lbnRyeQkvLyAgICAgfHwgKGZ0cmFjZV9ncmFwaF9lbnRyeQorCWFkcnAJeDAsIGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViIC8vICAgICAhPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YikpCisJbGRyCXgyLCBbeDEsICM6bG8xMjpmdHJhY2VfZ3JhcGhfZW50cnldCisJYWRkCXgwLCB4MCwgIzpsbzEyOmZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViCiAJY21wCXgwLCB4MgogCWIubmUJZnRyYWNlX2dyYXBoX2NhbGxlcgkvLyAgICAgZnRyYWNlX2dyYXBoX2NhbGxlcigpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9hcm02NC9rZXJuZWwvZW50cnkuUwppbmRleCA3MjZiOTEwLi5mZDRmYTM3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5LlMKQEAgLTY0LDI1ICs2NCwyNiBAQAogI2RlZmluZSBCQURfRVJST1IJMwogCiAJLm1hY3JvCWtlcm5lbF9lbnRyeSwgZWwsIHJlZ3NpemUgPSA2NAotCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSBTX0xSCS8vIHJvb20gZm9yIExSLCBTUCwgU1BTUiwgRUxSCisJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQogCS5pZglccmVnc2l6ZSA9PSAzMgogCW1vdgl3MCwgdzAJCQkJLy8gemVybyB1cHBlciAzMiBiaXRzIG9mIHgwCiAJLmVuZGlmCi0JcHVzaAl4MjgsIHgyOQotCXB1c2gJeDI2LCB4MjcKLQlwdXNoCXgyNCwgeDI1Ci0JcHVzaAl4MjIsIHgyMwotCXB1c2gJeDIwLCB4MjEKLQlwdXNoCXgxOCwgeDE5Ci0JcHVzaAl4MTYsIHgxNwotCXB1c2gJeDE0LCB4MTUKLQlwdXNoCXgxMiwgeDEzCi0JcHVzaAl4MTAsIHgxMQotCXB1c2gJeDgsIHg5Ci0JcHVzaAl4NiwgeDcKLQlwdXNoCXg0LCB4NQotCXB1c2gJeDIsIHgzCi0JcHVzaAl4MCwgeDEKKwlzdHAJeDAsIHgxLCBbc3AsICMxNiAqIDBdCisJc3RwCXgyLCB4MywgW3NwLCAjMTYgKiAxXQorCXN0cAl4NCwgeDUsIFtzcCwgIzE2ICogMl0KKwlzdHAJeDYsIHg3LCBbc3AsICMxNiAqIDNdCisJc3RwCXg4LCB4OSwgW3NwLCAjMTYgKiA0XQorCXN0cAl4MTAsIHgxMSwgW3NwLCAjMTYgKiA1XQorCXN0cAl4MTIsIHgxMywgW3NwLCAjMTYgKiA2XQorCXN0cAl4MTQsIHgxNSwgW3NwLCAjMTYgKiA3XQorCXN0cAl4MTYsIHgxNywgW3NwLCAjMTYgKiA4XQorCXN0cAl4MTgsIHgxOSwgW3NwLCAjMTYgKiA5XQorCXN0cAl4MjAsIHgyMSwgW3NwLCAjMTYgKiAxMF0KKwlzdHAJeDIyLCB4MjMsIFtzcCwgIzE2ICogMTFdCisJc3RwCXgyNCwgeDI1LCBbc3AsICMxNiAqIDEyXQorCXN0cAl4MjYsIHgyNywgW3NwLCAjMTYgKiAxM10KKwlzdHAJeDI4LCB4MjksIFtzcCwgIzE2ICogMTRdCisKIAkuaWYJXGVsID09IDAKIAltcnMJeDIxLCBzcF9lbDAKIAlnZXRfdGhyZWFkX2luZm8gdHNrCQkJLy8gRW5zdXJlIE1EU0NSX0VMMS5TUyBpcyBjbGVhciwKQEAgLTExOCwzMyArMTE5LDMxIEBACiAJLmlmCVxlbCA9PSAwCiAJY3RfdXNlcl9lbnRlcgogCWxkcgl4MjMsIFtzcCwgI1NfU1BdCQkvLyBsb2FkIHJldHVybiBzdGFjayBwb2ludGVyCi0JLmVuZGlmCi0JLmlmCVxyZXQKLQlsZHIJeDEsIFtzcCwgI1NfWDFdCQkJLy8gcHJlc2VydmUgeDAgKHN5c2NhbGwgcmV0dXJuKQotCWFkZAlzcCwgc3AsIFNfWDIKLQkuZWxzZQotCXBvcAl4MCwgeDEKLQkuZW5kaWYKLQlwb3AJeDIsIHgzCQkJCS8vIGxvYWQgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycwotCXBvcAl4NCwgeDUKLQlwb3AJeDYsIHg3Ci0JcG9wCXg4LCB4OQotCW1zcgllbHJfZWwxLCB4MjEJCQkvLyBzZXQgdXAgdGhlIHJldHVybiBkYXRhCi0JbXNyCXNwc3JfZWwxLCB4MjIKLQkuaWYJXGVsID09IDAKIAltc3IJc3BfZWwwLCB4MjMKIAkuZW5kaWYKLQlwb3AJeDEwLCB4MTEKLQlwb3AJeDEyLCB4MTMKLQlwb3AJeDE0LCB4MTUKLQlwb3AJeDE2LCB4MTcKLQlwb3AJeDE4LCB4MTkKLQlwb3AJeDIwLCB4MjEKLQlwb3AJeDIyLCB4MjMKLQlwb3AJeDI0LCB4MjUKLQlwb3AJeDI2LCB4MjcKLQlwb3AJeDI4LCB4MjkKLQlsZHIJbHIsIFtzcF0sICNTX0ZSQU1FX1NJWkUgLSBTX0xSCS8vIGxvYWQgTFIgYW5kIHJlc3RvcmUgU1AKKwltc3IJZWxyX2VsMSwgeDIxCQkJLy8gc2V0IHVwIHRoZSByZXR1cm4gZGF0YQorCW1zcglzcHNyX2VsMSwgeDIyCisJLmlmCVxyZXQKKwlsZHIJeDEsIFtzcCwgI1NfWDFdCQkJLy8gcHJlc2VydmUgeDAgKHN5c2NhbGwgcmV0dXJuKQorCS5lbHNlCisJbGRwCXgwLCB4MSwgW3NwLCAjMTYgKiAwXQorCS5lbmRpZgorCWxkcAl4MiwgeDMsIFtzcCwgIzE2ICogMV0KKwlsZHAJeDQsIHg1LCBbc3AsICMxNiAqIDJdCisJbGRwCXg2LCB4NywgW3NwLCAjMTYgKiAzXQorCWxkcAl4OCwgeDksIFtzcCwgIzE2ICogNF0KKwlsZHAJeDEwLCB4MTEsIFtzcCwgIzE2ICogNV0KKwlsZHAJeDEyLCB4MTMsIFtzcCwgIzE2ICogNl0KKwlsZHAJeDE0LCB4MTUsIFtzcCwgIzE2ICogN10KKwlsZHAJeDE2LCB4MTcsIFtzcCwgIzE2ICogOF0KKwlsZHAJeDE4LCB4MTksIFtzcCwgIzE2ICogOV0KKwlsZHAJeDIwLCB4MjEsIFtzcCwgIzE2ICogMTBdCisJbGRwCXgyMiwgeDIzLCBbc3AsICMxNiAqIDExXQorCWxkcAl4MjQsIHgyNSwgW3NwLCAjMTYgKiAxMl0KKwlsZHAJeDI2LCB4MjcsIFtzcCwgIzE2ICogMTNdCisJbGRwCXgyOCwgeDI5LCBbc3AsICMxNiAqIDE0XQorCWxkcglsciwgW3NwLCAjU19MUl0KKwlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCQkvLyByZXN0b3JlIHNwCiAJZXJldAkJCQkJLy8gcmV0dXJuIHRvIGtlcm5lbAogCS5lbmRtCiAKQEAgLTE2OCw3ICsxNjcsOCBAQAogICogSW50ZXJydXB0IGhhbmRsaW5nLgogICovCiAJLm1hY3JvCWlycV9oYW5kbGVyCi0JbGRyCXgxLCBoYW5kbGVfYXJjaF9pcnEKKwlhZHJwCXgxLCBoYW5kbGVfYXJjaF9pcnEKKwlsZHIJeDEsIFt4MSwgIzpsbzEyOmhhbmRsZV9hcmNoX2lycV0KIAltb3YJeDAsIHNwCiAJYmxyCXgxCiAJLmVuZG0KQEAgLTQ1NSw4ICs0NTUsOCBAQAogCWJpYwl4MCwgeDI2LCAjKDB4ZmYgPDwgNTYpCiAJbW92CXgxLCB4MjUKIAltb3YJeDIsIHNwCi0JYWRyCWxyLCByZXRfdG9fdXNlcgotCWIJZG9fbWVtX2Fib3J0CisJYmwJZG9fbWVtX2Fib3J0CisJYglyZXRfdG9fdXNlcgogZWwwX2lhOgogCS8qCiAJICogSW5zdHJ1Y3Rpb24gYWJvcnQgaGFuZGxpbmcKQEAgLTQ2OCw4ICs0NjgsOCBAQAogCW1vdgl4MCwgeDI2CiAJb3JyCXgxLCB4MjUsICMxIDw8IDI0CQkvLyB1c2UgcmVzZXJ2ZWQgSVNTIGJpdCBmb3IgaW5zdHJ1Y3Rpb24gYWJvcnRzCiAJbW92CXgyLCBzcAotCWFkcglsciwgcmV0X3RvX3VzZXIKLQliCWRvX21lbV9hYm9ydAorCWJsCWRvX21lbV9hYm9ydAorCWIJcmV0X3RvX3VzZXIKIGVsMF9mcHNpbWRfYWNjOgogCS8qCiAJICogRmxvYXRpbmcgUG9pbnQgb3IgQWR2YW5jZWQgU0lNRCBhY2Nlc3MKQEAgLTQ3OCw4ICs0NzgsOCBAQAogCWN0X3VzZXJfZXhpdAogCW1vdgl4MCwgeDI1CiAJbW92CXgxLCBzcAotCWFkcglsciwgcmV0X3RvX3VzZXIKLQliCWRvX2Zwc2ltZF9hY2MKKwlibAlkb19mcHNpbWRfYWNjCisJYglyZXRfdG9fdXNlcgogZWwwX2Zwc2ltZF9leGM6CiAJLyoKIAkgKiBGbG9hdGluZyBQb2ludCBvciBBZHZhbmNlZCBTSU1EIGV4Y2VwdGlvbgpAQCAtNDg4LDggKzQ4OCw4IEBACiAJY3RfdXNlcl9leGl0CiAJbW92CXgwLCB4MjUKIAltb3YJeDEsIHNwCi0JYWRyCWxyLCByZXRfdG9fdXNlcgotCWIJZG9fZnBzaW1kX2V4YworCWJsCWRvX2Zwc2ltZF9leGMKKwliCXJldF90b191c2VyCiBlbDBfc3BfcGM6CiAJLyoKIAkgKiBTdGFjayBvciBQQyBhbGlnbm1lbnQgZXhjZXB0aW9uIGhhbmRsaW5nCkBAIC01MDAsOCArNTAwLDggQEAKIAltb3YJeDAsIHgyNgogCW1vdgl4MSwgeDI1CiAJbW92CXgyLCBzcAotCWFkcglsciwgcmV0X3RvX3VzZXIKLQliCWRvX3NwX3BjX2Fib3J0CisJYmwJZG9fc3BfcGNfYWJvcnQKKwliCXJldF90b191c2VyCiBlbDBfdW5kZWY6CiAJLyoKIAkgKiBVbmRlZmluZWQgaW5zdHJ1Y3Rpb24KQEAgLTUxMCw4ICs1MTAsOCBAQAogCWVuYWJsZV9kYmdfYW5kX2lycQogCWN0X3VzZXJfZXhpdAogCW1vdgl4MCwgc3AKLQlhZHIJbHIsIHJldF90b191c2VyCi0JYglkb191bmRlZmluc3RyCisJYmwJZG9fdW5kZWZpbnN0cgorCWIJcmV0X3RvX3VzZXIKIGVsMF9kYmc6CiAJLyoKIAkgKiBEZWJ1ZyBleGNlcHRpb24gaGFuZGxpbmcKQEAgLTUzMCw4ICs1MzAsOCBAQAogCW1vdgl4MCwgc3AKIAltb3YJeDEsICNCQURfU1lOQwogCW1ycwl4MiwgZXNyX2VsMQotCWFkcglsciwgcmV0X3RvX3VzZXIKLQliCWJhZF9tb2RlCisJYmwJYmFkX21vZGUKKwliCXJldF90b191c2VyCiBFTkRQUk9DKGVsMF9zeW5jKQogCiAJLmFsaWduCTYKQEAgLTY1MywxNCArNjUzLDE1IEBACiAJbGRyCXgxNiwgW3RzaywgI1RJX0ZMQUdTXQkJLy8gY2hlY2sgZm9yIHN5c2NhbGwgaG9va3MKIAl0c3QJeDE2LCAjX1RJRl9TWVNDQUxMX1dPUksKIAliLm5lCV9fc3lzX3RyYWNlCi0JYWRyCWxyLCByZXRfZmFzdF9zeXNjYWxsCQkvLyByZXR1cm4gYWRkcmVzcwogCWNtcCAgICAgc2Nubywgc2NfbnIgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB1cHBlciBzeXNjYWxsIGxpbWl0CiAJYi5ocwluaV9zeXMKIAlsZHIJeDE2LCBbc3RibCwgc2NubywgbHNsICMzXQkvLyBhZGRyZXNzIGluIHRoZSBzeXNjYWxsIHRhYmxlCi0JYnIJeDE2CQkJCS8vIGNhbGwgc3lzXyogcm91dGluZQorCWJscgl4MTYJCQkJLy8gY2FsbCBzeXNfKiByb3V0aW5lCisJYglyZXRfZmFzdF9zeXNjYWxsCiBuaV9zeXM6CiAJbW92CXgwLCBzcAotCWIJZG9fbmlfc3lzY2FsbAorCWJsCWRvX25pX3N5c2NhbGwKKwliCXJldF9mYXN0X3N5c2NhbGwKIEVORFBST0MoZWwwX3N2YykKIAogCS8qCkBAIC02NjgsMjYgKzY2OSwzOCBAQAogCSAqIHN3aXRjaGVzLCBhbmQgd2FpdGluZyBmb3Igb3VyIHBhcmVudCB0byByZXNwb25kLgogCSAqLwogX19zeXNfdHJhY2U6Ci0JbW92CXgwLCBzcAorCW1vdgl3MCwgIy0xCQkJCS8vIHNldCBkZWZhdWx0IGVycm5vIGZvcgorCWNtcCAgICAgc2NubywgeDAJCQkvLyB1c2VyLWlzc3VlZCBzeXNjYWxsKC0xKQorCWIubmUJMWYKKwltb3YJeDAsICMtRU5PU1lTCisJc3RyCXgwLCBbc3AsICNTX1gwXQorMToJbW92CXgwLCBzcAogCWJsCXN5c2NhbGxfdHJhY2VfZW50ZXIKLQlhZHIJbHIsIF9fc3lzX3RyYWNlX3JldHVybgkJLy8gcmV0dXJuIGFkZHJlc3MKKwljbXAJdzAsICMtMQkJCQkvLyBza2lwIHRoZSBzeXNjYWxsPworCWIuZXEJX19zeXNfdHJhY2VfcmV0dXJuX3NraXBwZWQKIAl1eHR3CXNjbm8sIHcwCQkJLy8gc3lzY2FsbCBudW1iZXIgKHBvc3NpYmx5IG5ldykKIAltb3YJeDEsIHNwCQkJCS8vIHBvaW50ZXIgdG8gcmVncwogCWNtcAlzY25vLCBzY19ucgkJCS8vIGNoZWNrIHVwcGVyIHN5c2NhbGwgbGltaXQKLQliLmhzCW5pX3N5cworCWIuaHMJX19uaV9zeXNfdHJhY2UKIAlsZHAJeDAsIHgxLCBbc3BdCQkJLy8gcmVzdG9yZSB0aGUgc3lzY2FsbCBhcmdzCiAJbGRwCXgyLCB4MywgW3NwLCAjU19YMl0KIAlsZHAJeDQsIHg1LCBbc3AsICNTX1g0XQogCWxkcAl4NiwgeDcsIFtzcCwgI1NfWDZdCiAJbGRyCXgxNiwgW3N0YmwsIHNjbm8sIGxzbCAjM10JLy8gYWRkcmVzcyBpbiB0aGUgc3lzY2FsbCB0YWJsZQotCWJyCXgxNgkJCQkvLyBjYWxsIHN5c18qIHJvdXRpbmUKKwlibHIJeDE2CQkJCS8vIGNhbGwgc3lzXyogcm91dGluZQogCiBfX3N5c190cmFjZV9yZXR1cm46Ci0Jc3RyCXgwLCBbc3BdCQkJLy8gc2F2ZSByZXR1cm5lZCB4MAorCXN0cgl4MCwgW3NwLCAjU19YMF0JCQkvLyBzYXZlIHJldHVybmVkIHgwCitfX3N5c190cmFjZV9yZXR1cm5fc2tpcHBlZDoKIAltb3YJeDAsIHNwCiAJYmwJc3lzY2FsbF90cmFjZV9leGl0CiAJYglyZXRfdG9fdXNlcgogCitfX25pX3N5c190cmFjZToKKwltb3YJeDAsIHNwCisJYmwJZG9fbmlfc3lzY2FsbAorCWIJX19zeXNfdHJhY2VfcmV0dXJuCisKIC8qCiAgKiBTcGVjaWFsIHN5c3RlbSBjYWxsIHdyYXBwZXJzLgogICovCkBAIC02OTUsNiArNzA4LDMgQEAKIAltb3YJeDAsIHNwCiAJYglzeXNfcnRfc2lncmV0dXJuCiBFTkRQUk9DKHN5c19ydF9zaWdyZXR1cm5fd3JhcHBlcikKLQotRU5UUlkoaGFuZGxlX2FyY2hfaXJxKQotCS5xdWFkCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvYXJtNjQva2VybmVsL2hlYWQuUwppbmRleCAwYTZlNGY5Li44Y2U4OGUwIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvaGVhZC5TCkBAIC0xMzIsNiArMTMyLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VGSQorCS5nbG9ibAlzdGV4dF9vZmZzZXQKKwkuc2V0CXN0ZXh0X29mZnNldCwgc3RleHQgLSBlZmlfaGVhZAogCS5hbGlnbiAzCiBwZV9oZWFkZXI6CiAJLmFzY2lpCSJQRSIKQEAgLTE1NSwxMiArMTU3LDEyIEBACiAJLmxvbmcJMAkJCQkvLyBTaXplT2ZJbml0aWFsaXplZERhdGEKIAkubG9uZwkwCQkJCS8vIFNpemVPZlVuaW5pdGlhbGl6ZWREYXRhCiAJLmxvbmcJZWZpX3N0dWJfZW50cnkgLSBlZmlfaGVhZAkvLyBBZGRyZXNzT2ZFbnRyeVBvaW50Ci0JLmxvbmcJc3RleHQgLSBlZmlfaGVhZAkJLy8gQmFzZU9mQ29kZQorCS5sb25nCXN0ZXh0X29mZnNldAkJCS8vIEJhc2VPZkNvZGUKIAogZXh0cmFfaGVhZGVyX2ZpZWxkczoKIAkucXVhZAkwCQkJCS8vIEltYWdlQmFzZQotCS5sb25nCTB4MjAJCQkJLy8gU2VjdGlvbkFsaWdubWVudAotCS5sb25nCTB4OAkJCQkvLyBGaWxlQWxpZ25tZW50CisJLmxvbmcJMHgxMDAwCQkJCS8vIFNlY3Rpb25BbGlnbm1lbnQKKwkubG9uZwlQRUNPRkZfRklMRV9BTElHTk1FTlQJCS8vIEZpbGVBbGlnbm1lbnQKIAkuc2hvcnQJMAkJCQkvLyBNYWpvck9wZXJhdGluZ1N5c3RlbVZlcnNpb24KIAkuc2hvcnQJMAkJCQkvLyBNaW5vck9wZXJhdGluZ1N5c3RlbVZlcnNpb24KIAkuc2hvcnQJMAkJCQkvLyBNYWpvckltYWdlVmVyc2lvbgpAQCAtMTcyLDcgKzE3NCw3IEBACiAJLmxvbmcJX2VuZCAtIGVmaV9oZWFkCQkJLy8gU2l6ZU9mSW1hZ2UKIAogCS8vIEV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBrZXJuZWwgaW1hZ2UgaXMgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBoZWFkZXIKLQkubG9uZwlzdGV4dCAtIGVmaV9oZWFkCQkvLyBTaXplT2ZIZWFkZXJzCisJLmxvbmcJc3RleHRfb2Zmc2V0CQkJLy8gU2l6ZU9mSGVhZGVycwogCS5sb25nCTAJCQkJLy8gQ2hlY2tTdW0KIAkuc2hvcnQJMHhhCQkJCS8vIFN1YnN5c3RlbSAoRUZJIGFwcGxpY2F0aW9uKQogCS5zaG9ydAkwCQkJCS8vIERsbENoYXJhY3RlcmlzdGljcwpAQCAtMjE3LDE2ICsyMTksMjQgQEAKIAkuYnl0ZQkwCiAJLmJ5dGUJMCAgICAgICAgCQkvLyBlbmQgb2YgMCBwYWRkaW5nIG9mIHNlY3Rpb24gbmFtZQogCS5sb25nCV9lbmQgLSBzdGV4dAkJLy8gVmlydHVhbFNpemUKLQkubG9uZwlzdGV4dCAtIGVmaV9oZWFkCS8vIFZpcnR1YWxBZGRyZXNzCisJLmxvbmcJc3RleHRfb2Zmc2V0CQkvLyBWaXJ0dWFsQWRkcmVzcwogCS5sb25nCV9lZGF0YSAtIHN0ZXh0CQkvLyBTaXplT2ZSYXdEYXRhCi0JLmxvbmcJc3RleHQgLSBlZmlfaGVhZAkvLyBQb2ludGVyVG9SYXdEYXRhCisJLmxvbmcJc3RleHRfb2Zmc2V0CQkvLyBQb2ludGVyVG9SYXdEYXRhCiAKIAkubG9uZwkwCQkvLyBQb2ludGVyVG9SZWxvY2F0aW9ucyAoMCBmb3IgZXhlY3V0YWJsZXMpCiAJLmxvbmcJMAkJLy8gUG9pbnRlclRvTGluZU51bWJlcnMgKDAgZm9yIGV4ZWN1dGFibGVzKQogCS5zaG9ydAkwCQkvLyBOdW1iZXJPZlJlbG9jYXRpb25zICAoMCBmb3IgZXhlY3V0YWJsZXMpCiAJLnNob3J0CTAJCS8vIE51bWJlck9mTGluZU51bWJlcnMgICgwIGZvciBleGVjdXRhYmxlcykKIAkubG9uZwkweGUwNTAwMDIwCS8vIENoYXJhY3RlcmlzdGljcyAoc2VjdGlvbiBmbGFncykKLQkuYWxpZ24gNQorCisJLyoKKwkgKiBFRkkgd2lsbCBsb2FkIHN0ZXh0IG9ud2FyZHMgYXQgdGhlIDRrIHNlY3Rpb24gYWxpZ25tZW50CisJICogZGVzY3JpYmVkIGluIHRoZSBQRS9DT0ZGIGhlYWRlci4gVG8gZW5zdXJlIHRoYXQgaW5zdHJ1Y3Rpb24KKwkgKiBzZXF1ZW5jZXMgdXNpbmcgYW4gYWRycCBhbmQgYSA6bG8xMjogaW1tZWRpYXRlIHdpbGwgZnVuY3Rpb24KKwkgKiBjb3JyZWN0bHkgYXQgdGhpcyBhbGlnbm1lbnQsIHdlIG11c3QgZW5zdXJlIHRoYXQgc3RleHQgaXMKKwkgKiBwbGFjZWQgYXQgYSA0ayBib3VuZGFyeSBpbiB0aGUgSW1hZ2UgdG8gYmVnaW4gd2l0aC4KKwkgKi8KKwkuYWxpZ24gMTIKICNlbmRpZgogCiBFTlRSWShzdGV4dCkKQEAgLTIzOCw3ICsyNDgsMTMgQEAKIAltb3YJeDAsIHgyMgogCWJsCWxvb2t1cF9wcm9jZXNzb3JfdHlwZQogCW1vdgl4MjMsIHgwCQkJCS8vIHgyMz1jdXJyZW50IGNwdV90YWJsZQotCWNiegl4MjMsIF9fZXJyb3JfcAkJCS8vIGludmFsaWQgcHJvY2Vzc29yICh4MjM9MCk/CisJLyoKKwkgKiBfX2Vycm9yX3AgbWF5IGVuZCB1cCBvdXQgb2YgcmFuZ2UgZm9yIGNieiBpZiB0ZXh0IGFyZWFzIGFyZQorCSAqIGFsaWduZWQgdXAgdG8gc2VjdGlvbiBzaXplcy4KKwkgKi8KKwljYm56CXgyMywgMWYJCQkJLy8gaW52YWxpZCBwcm9jZXNzb3IgKHgyMz0wKT8KKwliCV9fZXJyb3JfcAorMToKIAlibAlfX3ZldF9mZHQKIAlibAlfX2NyZWF0ZV9wYWdlX3RhYmxlcwkJLy8geDI1PVRUQlIwLCB4MjY9VFRCUjEKIAkvKgpAQCAtMjUwLDI0NyArMjY2LDMxIEBACiAJICovCiAJbGRyCXgyNywgX19zd2l0Y2hfZGF0YQkJLy8gYWRkcmVzcyB0byBqdW1wIHRvIGFmdGVyCiAJCQkJCQkvLyBNTVUgaGFzIGJlZW4gZW5hYmxlZAotCWFkcglsciwgX19lbmFibGVfbW11CQkvLyByZXR1cm4gKFBJQykgYWRkcmVzcworCWFkcnAJbHIsIF9fZW5hYmxlX21tdQkJLy8gcmV0dXJuIChQSUMpIGFkZHJlc3MKKwlhZGQJbHIsIGxyLCAjOmxvMTI6X19lbmFibGVfbW11CiAJbGRyCXgxMiwgW3gyMywgI0NQVV9JTkZPX1NFVFVQXQogCWFkZAl4MTIsIHgxMiwgeDI4CQkJLy8gX192aXJ0X3RvX3BoeXMKIAlicgl4MTIJCQkJLy8gaW5pdGlhbGlzZSBwcm9jZXNzb3IKIEVORFBST0Moc3RleHQpCiAKIC8qCi0gKiBJZiB3ZSdyZSBmb3J0dW5hdGUgZW5vdWdoIHRvIGJvb3QgYXQgRUwyLCBlbnN1cmUgdGhhdCB0aGUgd29ybGQgaXMKLSAqIHNhbmUgYmVmb3JlIGRyb3BwaW5nIHRvIEVMMS4KLSAqCi0gKiBSZXR1cm5zIGVpdGhlciBCT09UX0NQVV9NT0RFX0VMMSBvciBCT09UX0NQVV9NT0RFX0VMMiBpbiB4MjAgaWYKLSAqIGJvb3RlZCBpbiBFTDEgb3IgRUwyIHJlc3BlY3RpdmVseS4KKyAqIERldGVybWluZSB2YWxpZGl0eSBvZiB0aGUgeDIxIEZEVCBwb2ludGVyLgorICogVGhlIGR0YiBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkIGFuZCBsaXZlIGluIHRoZSBmaXJzdCA1MTJNIG9mIG1lbW9yeS4KICAqLwotRU5UUlkoZWwyX3NldHVwKQotCW1ycwl4MCwgQ3VycmVudEVMCi0JY21wCXgwLCAjQ3VycmVudEVMX0VMMgorX192ZXRfZmR0OgorCXRzdAl4MjEsICMweDcKIAliLm5lCTFmCi0JbXJzCXgwLCBzY3Rscl9lbDIKLUNQVV9CRSgJb3JyCXgwLCB4MCwgIygxIDw8IDI1KQkpCS8vIFNldCB0aGUgRUUgYml0IGZvciBFTDIKLUNQVV9MRSgJYmljCXgwLCB4MCwgIygxIDw8IDI1KQkpCS8vIENsZWFyIHRoZSBFRSBiaXQgZm9yIEVMMgotCW1zcglzY3Rscl9lbDIsIHgwCi0JYgkyZgotMToJbXJzCXgwLCBzY3Rscl9lbDEKLUNQVV9CRSgJb3JyCXgwLCB4MCwgIygzIDw8IDI0KQkpCS8vIFNldCB0aGUgRUUgYW5kIEUwRSBiaXRzIGZvciBFTDEKLUNQVV9MRSgJYmljCXgwLCB4MCwgIygzIDw8IDI0KQkpCS8vIENsZWFyIHRoZSBFRSBhbmQgRTBFIGJpdHMgZm9yIEVMMQotCW1zcglzY3Rscl9lbDEsIHgwCi0JbW92CXcyMCwgI0JPT1RfQ1BVX01PREVfRUwxCQkvLyBUaGlzIGNwdSBib290ZWQgaW4gRUwxCi0JaXNiCisJY21wCXgyMSwgeDI0CisJYi5sdAkxZgorCW1vdgl4MCwgIygxIDw8IDI5KQorCWFkZAl4MCwgeDAsIHgyNAorCWNtcAl4MjEsIHgwCisJYi5nZQkxZgogCXJldAotCi0JLyogSHlwIGNvbmZpZ3VyYXRpb24uICovCi0yOgltb3YJeDAsICMoMSA8PCAzMSkJCQkvLyA2NC1iaXQgRUwxCi0JbXNyCWhjcl9lbDIsIHgwCi0KLQkvKiBHZW5lcmljIHRpbWVycy4gKi8KLQltcnMJeDAsIGNudGhjdGxfZWwyCi0Jb3JyCXgwLCB4MCwgIzMJCQkvLyBFbmFibGUgRUwxIHBoeXNpY2FsIHRpbWVycwotCW1zcgljbnRoY3RsX2VsMiwgeDAKLQltc3IJY250dm9mZl9lbDIsIHh6cgkJLy8gQ2xlYXIgdmlydHVhbCBvZmZzZXQKLQotI2lmZGVmIENPTkZJR19BUk1fR0lDX1YzCi0JLyogR0lDdjMgc3lzdGVtIHJlZ2lzdGVyIGFjY2VzcyAqLwotCW1ycwl4MCwgaWRfYWE2NHBmcjBfZWwxCi0JdWJmeAl4MCwgeDAsICMyNCwgIzQKLQljbXAJeDAsICMxCi0JYi5uZQkzZgotCi0JbXJzX3MJeDAsIElDQ19TUkVfRUwyCi0Jb3JyCXgwLCB4MCwgI0lDQ19TUkVfRUwyX1NSRQkvLyBTZXQgSUNDX1NSRV9FTDIuU1JFPT0xCi0Jb3JyCXgwLCB4MCwgI0lDQ19TUkVfRUwyX0VOQUJMRQkvLyBTZXQgSUNDX1NSRV9FTDIuRW5hYmxlPT0xCi0JbXNyX3MJSUNDX1NSRV9FTDIsIHgwCi0JaXNiCQkJCQkvLyBNYWtlIHN1cmUgU1JFIGlzIG5vdyBzZXQKLQltc3JfcwlJQ0hfSENSX0VMMiwgeHpyCQkvLyBSZXNldCBJQ0NfSENSX0VMMiB0byBkZWZhdWx0cwotCi0zOgotI2VuZGlmCi0KLQkvKiBQb3B1bGF0ZSBJRCByZWdpc3RlcnMuICovCi0JbXJzCXgwLCBtaWRyX2VsMQotCW1ycwl4MSwgbXBpZHJfZWwxCi0JbXNyCXZwaWRyX2VsMiwgeDAKLQltc3IJdm1waWRyX2VsMiwgeDEKLQotCS8qIHNjdGxyX2VsMSAqLwotCW1vdgl4MCwgIzB4MDgwMAkJCS8vIFNldC9jbGVhciBSRVN7MSwwfSBiaXRzCi1DUFVfQkUoCW1vdmsJeDAsICMweDMzZDAsIGxzbCAjMTYJKQkvLyBTZXQgRUUgYW5kIEUwRSBvbiBCRSBzeXN0ZW1zCi1DUFVfTEUoCW1vdmsJeDAsICMweDMwZDAsIGxzbCAjMTYJKQkvLyBDbGVhciBFRSBhbmQgRTBFIG9uIExFIHN5c3RlbXMKLQltc3IJc2N0bHJfZWwxLCB4MAotCi0JLyogQ29wcm9jZXNzb3IgdHJhcHMuICovCi0JbW92CXgwLCAjMHgzM2ZmCi0JbXNyCWNwdHJfZWwyLCB4MAkJCS8vIERpc2FibGUgY29wcm8uIHRyYXBzIHRvIEVMMgotCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCW1zcgloc3RyX2VsMiwgeHpyCQkJLy8gRGlzYWJsZSBDUDE1IHRyYXBzIHRvIEVMMgotI2VuZGlmCi0KLQkvKiBTdGFnZS0yIHRyYW5zbGF0aW9uICovCi0JbXNyCXZ0dGJyX2VsMiwgeHpyCi0KLQkvKiBIeXBlcnZpc29yIHN0dWIgKi8KLQlhZHIJeDAsIF9faHlwX3N0dWJfdmVjdG9ycwotCW1zcgl2YmFyX2VsMiwgeDAKLQotCS8qIHNwc3IgKi8KLQltb3YJeDAsICMoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgUFNSX0FfQklUIHwgUFNSX0RfQklUIHxcCi0JCSAgICAgIFBTUl9NT0RFX0VMMWgpCi0JbXNyCXNwc3JfZWwyLCB4MAotCW1zcgllbHJfZWwyLCBscgotCW1vdgl3MjAsICNCT09UX0NQVV9NT0RFX0VMMgkJLy8gVGhpcyBDUFUgYm9vdGVkIGluIEVMMgotCWVyZXQKLUVORFBST0MoZWwyX3NldHVwKQotCi0vKgotICogU2V0cyB0aGUgX19ib290X2NwdV9tb2RlIGZsYWcgZGVwZW5kaW5nIG9uIHRoZSBDUFUgYm9vdCBtb2RlIHBhc3NlZAotICogaW4geDIwLiBTZWUgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmggZm9yIG1vcmUgaW5mby4KLSAqLwotRU5UUlkoc2V0X2NwdV9ib290X21vZGVfZmxhZykKLQlsZHIJeDEsID1fX2Jvb3RfY3B1X21vZGUJCS8vIENvbXB1dGUgX19ib290X2NwdV9tb2RlCi0JYWRkCXgxLCB4MSwgeDI4Ci0JY21wCXcyMCwgI0JPT1RfQ1BVX01PREVfRUwyCi0JYi5uZQkxZgotCWFkZAl4MSwgeDEsICM0Ci0xOglzdHIJdzIwLCBbeDFdCQkJLy8gVGhpcyBDUFUgaGFzIGJvb3RlZCBpbiBFTDEKLQlkbWIJc3kKLQlkYwlpdmFjLCB4MQkJCS8vIEludmFsaWRhdGUgcG90ZW50aWFsbHkgc3RhbGUgY2FjaGUgbGluZQorMToKKwltb3YJeDIxLCAjMAogCXJldAotRU5EUFJPQyhzZXRfY3B1X2Jvb3RfbW9kZV9mbGFnKQotCi0vKgotICogV2UgbmVlZCB0byBmaW5kIG91dCB0aGUgQ1BVIGJvb3QgbW9kZSBsb25nIGFmdGVyIGJvb3QsIHNvIHdlIG5lZWQgdG8KLSAqIHN0b3JlIGl0IGluIGEgd3JpdGFibGUgdmFyaWFibGUuCi0gKgotICogVGhpcyBpcyBub3QgaW4gLmJzcywgYmVjYXVzZSB3ZSBzZXQgaXQgc3VmZmljaWVudGx5IGVhcmx5IHRoYXQgdGhlIGJvb3QtdGltZQotICogemVyb2luZyBvZiAuYnNzIHdvdWxkIGNsb2JiZXIgaXQuCi0gKi8KLQkucHVzaHNlY3Rpb24JLmRhdGEuLmNhY2hlbGluZV9hbGlnbmVkCi1FTlRSWShfX2Jvb3RfY3B1X21vZGUpCi0JLmFsaWduCUwxX0NBQ0hFX1NISUZUCi0JLmxvbmcJQk9PVF9DUFVfTU9ERV9FTDIKLQkubG9uZwkwCi0JLnBvcHNlY3Rpb24KLQotI2lmZGVmIENPTkZJR19TTVAKLQkuYWxpZ24JMwotMToJLnF1YWQJLgotCS5xdWFkCXNlY29uZGFyeV9ob2xkaW5nX3Blbl9yZWxlYXNlCi0KLQkvKgotCSAqIFRoaXMgcHJvdmlkZXMgYSAiaG9sZGluZyBwZW4iIGZvciBwbGF0Zm9ybXMgdG8gaG9sZCBhbGwgc2Vjb25kYXJ5Ci0JICogY29yZXMgYXJlIGhlbGQgdW50aWwgd2UncmUgcmVhZHkgZm9yIHRoZW0gdG8gaW5pdGlhbGlzZS4KLQkgKi8KLUVOVFJZKHNlY29uZGFyeV9ob2xkaW5nX3BlbikKLQlibAllbDJfc2V0dXAJCQkvLyBEcm9wIHRvIEVMMSwgdzIwPWNwdV9ib290X21vZGUKLQlibAlfX2NhbGNfcGh5c19vZmZzZXQJCS8vIHgyND1QSFlTX09GRlNFVCwgeDI4PVBIWVNfT0ZGU0VULVBBR0VfT0ZGU0VUCi0JYmwJc2V0X2NwdV9ib290X21vZGVfZmxhZwotCW1ycwl4MCwgbXBpZHJfZWwxCi0JbGRyICAgICB4MSwgPU1QSURSX0hXSURfQklUTUFTSwotCWFuZAl4MCwgeDAsIHgxCi0JYWRyCXgxLCAxYgotCWxkcAl4MiwgeDMsIFt4MV0KLQlzdWIJeDEsIHgxLCB4MgotCWFkZAl4MywgeDMsIHgxCi1wZW46CWxkcgl4NCwgW3gzXQotCWNtcAl4NCwgeDAKLQliLmVxCXNlY29uZGFyeV9zdGFydHVwCi0Jd2ZlCi0JYglwZW4KLUVORFBST0Moc2Vjb25kYXJ5X2hvbGRpbmdfcGVuKQotCi0JLyoKLQkgKiBTZWNvbmRhcnkgZW50cnkgcG9pbnQgdGhhdCBqdW1wcyBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwuIE9ubHkgdG8KLQkgKiBiZSB1c2VkIHdoZXJlIENQVXMgYXJlIGJyb3VnaHQgb25saW5lIGR5bmFtaWNhbGx5IGJ5IHRoZSBrZXJuZWwuCi0JICovCi1FTlRSWShzZWNvbmRhcnlfZW50cnkpCi0JYmwJZWwyX3NldHVwCQkJLy8gRHJvcCB0byBFTDEKLQlibAlfX2NhbGNfcGh5c19vZmZzZXQJCS8vIHgyND1QSFlTX09GRlNFVCwgeDI4PVBIWVNfT0ZGU0VULVBBR0VfT0ZGU0VUCi0JYmwJc2V0X2NwdV9ib290X21vZGVfZmxhZwotCWIJc2Vjb25kYXJ5X3N0YXJ0dXAKLUVORFBST0Moc2Vjb25kYXJ5X2VudHJ5KQotCi1FTlRSWShzZWNvbmRhcnlfc3RhcnR1cCkKLQkvKgotCSAqIENvbW1vbiBlbnRyeSBwb2ludCBmb3Igc2Vjb25kYXJ5IENQVXMuCi0JICovCi0JbXJzCXgyMiwgbWlkcl9lbDEJCQkvLyB4MjI9Y3B1aWQKLQltb3YJeDAsIHgyMgotCWJsCWxvb2t1cF9wcm9jZXNzb3JfdHlwZQotCW1vdgl4MjMsIHgwCQkJCS8vIHgyMz1jdXJyZW50IGNwdV90YWJsZQotCWNiegl4MjMsIF9fZXJyb3JfcAkJCS8vIGludmFsaWQgcHJvY2Vzc29yICh4MjM9MCk/Ci0KLQlwZ3RibAl4MjUsIHgyNiwgeDI4CQkJLy8geDI1PVRUQlIwLCB4MjY9VFRCUjEKLQlsZHIJeDEyLCBbeDIzLCAjQ1BVX0lORk9fU0VUVVBdCi0JYWRkCXgxMiwgeDEyLCB4MjgJCQkvLyBfX3ZpcnRfdG9fcGh5cwotCWJscgl4MTIJCQkJLy8gaW5pdGlhbGlzZSBwcm9jZXNzb3IKLQotCWxkcgl4MjEsID1zZWNvbmRhcnlfZGF0YQotCWxkcgl4MjcsID1fX3NlY29uZGFyeV9zd2l0Y2hlZAkvLyBhZGRyZXNzIHRvIGp1bXAgdG8gYWZ0ZXIgZW5hYmxpbmcgdGhlIE1NVQotCWIJX19lbmFibGVfbW11Ci1FTkRQUk9DKHNlY29uZGFyeV9zdGFydHVwKQotCi1FTlRSWShfX3NlY29uZGFyeV9zd2l0Y2hlZCkKLQlsZHIJeDAsIFt4MjFdCQkJLy8gZ2V0IHNlY29uZGFyeV9kYXRhLnN0YWNrCi0JbW92CXNwLCB4MAotCW1vdgl4MjksICMwCi0JYglzZWNvbmRhcnlfc3RhcnRfa2VybmVsCi1FTkRQUk9DKF9fc2Vjb25kYXJ5X3N3aXRjaGVkKQotI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KLQotLyoKLSAqIFNldHVwIGNvbW1vbiBiaXRzIGJlZm9yZSBmaW5hbGx5IGVuYWJsaW5nIHRoZSBNTVUuIEVzc2VudGlhbGx5IHRoaXMgaXMganVzdAotICogbG9hZGluZyB0aGUgcGFnZSB0YWJsZSBwb2ludGVyIGFuZCB2ZWN0b3IgYmFzZSByZWdpc3RlcnMuCi0gKgotICogT24gZW50cnkgdG8gdGhpcyBjb2RlLCB4MCBtdXN0IGNvbnRhaW4gdGhlIFNDVExSX0VMMSB2YWx1ZSBmb3IgdHVybmluZyBvbgotICogdGhlIE1NVS4KLSAqLwotX19lbmFibGVfbW11OgotCWxkcgl4NSwgPXZlY3RvcnMKLQltc3IJdmJhcl9lbDEsIHg1Ci0JbXNyCXR0YnIwX2VsMSwgeDI1CQkJLy8gbG9hZCBUVEJSMAotCW1zcgl0dGJyMV9lbDEsIHgyNgkJCS8vIGxvYWQgVFRCUjEKLQlpc2IKLQliCV9fdHVybl9tbXVfb24KLUVORFBST0MoX19lbmFibGVfbW11KQotCi0vKgotICogRW5hYmxlIHRoZSBNTVUuIFRoaXMgY29tcGxldGVseSBjaGFuZ2VzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHZpc2libGUgbWVtb3J5Ci0gKiBzcGFjZS4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggdGhpcy4KLSAqCi0gKiAgeDAgID0gc3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXIKLSAqICB4MjcgPSAqdmlydHVhbCogYWRkcmVzcyB0byBqdW1wIHRvIHVwb24gY29tcGxldGlvbgotICoKLSAqIG90aGVyIHJlZ2lzdGVycyBkZXBlbmQgb24gdGhlIGZ1bmN0aW9uIGNhbGxlZCB1cG9uIGNvbXBsZXRpb24KLSAqCi0gKiBXZSBhbGlnbiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvIHRoZSBzbWFsbGVzdCBwb3dlciBvZiB0d28gbGFyZ2VyIHRoYW4gaXQgdG8KLSAqIGVuc3VyZSBpdCBmaXRzIHdpdGhpbiBhIHNpbmdsZSBibG9jayBtYXAgZW50cnkuIE90aGVyd2lzZSB3ZXJlIFBIWVNfT0ZGU0VUCi0gKiBjbG9zZSB0byB0aGUgZW5kIG9mIGEgNTEyTUIgb3IgMUdCIGJsb2NrIHdlIG1pZ2h0IHJlcXVpcmUgYW4gYWRkaXRpb25hbAotICogdGFibGUgdG8gbWFwIHRoZSBlbnRpcmUgZnVuY3Rpb24uCi0gKi8KLQkuYWxpZ24JNAotX190dXJuX21tdV9vbjoKLQltc3IJc2N0bHJfZWwxLCB4MAotCWlzYgotCWJyCXgyNwotRU5EUFJPQyhfX3R1cm5fbW11X29uKQotCi0vKgotICogQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiBwaHlzaWNhbCBtZW1vcnkuCi0gKi8KLV9fY2FsY19waHlzX29mZnNldDoKLQlhZHIJeDAsIDFmCi0JbGRwCXgxLCB4MiwgW3gwXQotCXN1Ygl4MjgsIHgwLCB4MQkJCS8vIHgyOCA9IFBIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQKLQlhZGQJeDI0LCB4MiwgeDI4CQkJLy8geDI0ID0gUEhZU19PRkZTRVQKLQlyZXQKLUVORFBST0MoX19jYWxjX3BoeXNfb2Zmc2V0KQotCi0JLmFsaWduIDMKLTE6CS5xdWFkCS4KLQkucXVhZAlQQUdFX09GRlNFVAotCitFTkRQUk9DKF9fdmV0X2ZkdCkKIC8qCiAgKiBNYWNybyB0byBjcmVhdGUgYSB0YWJsZSBlbnRyeSB0byB0aGUgbmV4dCBwYWdlLgogICoKQEAgLTY2OSw2ICs0NjksMjQ3IEBACiBFTkRQUk9DKF9fbW1hcF9zd2l0Y2hlZCkKIAogLyoKKyAqIGVuZCBlYXJseSBoZWFkIHNlY3Rpb24sIGJlZ2luIGhlYWQgY29kZSB0aGF0IGlzIGFsc28gdXNlZCBmb3IKKyAqIGhvdHBsdWcgYW5kIG5lZWRzIHRvIGhhdmUgdGhlIHNhbWUgcHJvdGVjdGlvbnMgYXMgdGhlIHRleHQgcmVnaW9uCisgKi8KKwkuc2VjdGlvbiAiLnRleHQiLCJheCIKKy8qCisgKiBJZiB3ZSdyZSBmb3J0dW5hdGUgZW5vdWdoIHRvIGJvb3QgYXQgRUwyLCBlbnN1cmUgdGhhdCB0aGUgd29ybGQgaXMKKyAqIHNhbmUgYmVmb3JlIGRyb3BwaW5nIHRvIEVMMS4KKyAqCisgKiBSZXR1cm5zIGVpdGhlciBCT09UX0NQVV9NT0RFX0VMMSBvciBCT09UX0NQVV9NT0RFX0VMMiBpbiB4MjAgaWYKKyAqIGJvb3RlZCBpbiBFTDEgb3IgRUwyIHJlc3BlY3RpdmVseS4KKyAqLworRU5UUlkoZWwyX3NldHVwKQorCW1ycwl4MCwgQ3VycmVudEVMCisJY21wCXgwLCAjQ3VycmVudEVMX0VMMgorCWIubmUJMWYKKwltcnMJeDAsIHNjdGxyX2VsMgorQ1BVX0JFKAlvcnIJeDAsIHgwLCAjKDEgPDwgMjUpCSkJLy8gU2V0IHRoZSBFRSBiaXQgZm9yIEVMMgorQ1BVX0xFKAliaWMJeDAsIHgwLCAjKDEgPDwgMjUpCSkJLy8gQ2xlYXIgdGhlIEVFIGJpdCBmb3IgRUwyCisJbXNyCXNjdGxyX2VsMiwgeDAKKwliCTJmCisxOgltcnMJeDAsIHNjdGxyX2VsMQorQ1BVX0JFKAlvcnIJeDAsIHgwLCAjKDMgPDwgMjQpCSkJLy8gU2V0IHRoZSBFRSBhbmQgRTBFIGJpdHMgZm9yIEVMMQorQ1BVX0xFKAliaWMJeDAsIHgwLCAjKDMgPDwgMjQpCSkJLy8gQ2xlYXIgdGhlIEVFIGFuZCBFMEUgYml0cyBmb3IgRUwxCisJbXNyCXNjdGxyX2VsMSwgeDAKKwltb3YJdzIwLCAjQk9PVF9DUFVfTU9ERV9FTDEJCS8vIFRoaXMgY3B1IGJvb3RlZCBpbiBFTDEKKwlpc2IKKwlyZXQKKworCS8qIEh5cCBjb25maWd1cmF0aW9uLiAqLworMjoJbW92CXgwLCAjKDEgPDwgMzEpCQkJLy8gNjQtYml0IEVMMQorCW1zcgloY3JfZWwyLCB4MAorCisJLyogR2VuZXJpYyB0aW1lcnMuICovCisJbXJzCXgwLCBjbnRoY3RsX2VsMgorCW9ycgl4MCwgeDAsICMzCQkJLy8gRW5hYmxlIEVMMSBwaHlzaWNhbCB0aW1lcnMKKwltc3IJY250aGN0bF9lbDIsIHgwCisJbXNyCWNudHZvZmZfZWwyLCB4enIJCS8vIENsZWFyIHZpcnR1YWwgb2Zmc2V0CisKKyNpZmRlZiBDT05GSUdfQVJNX0dJQ19WMworCS8qIEdJQ3YzIHN5c3RlbSByZWdpc3RlciBhY2Nlc3MgKi8KKwltcnMJeDAsIGlkX2FhNjRwZnIwX2VsMQorCXViZngJeDAsIHgwLCAjMjQsICM0CisJY21wCXgwLCAjMQorCWIubmUJM2YKKworCW1yc19zCXgwLCBJQ0NfU1JFX0VMMgorCW9ycgl4MCwgeDAsICNJQ0NfU1JFX0VMMl9TUkUJLy8gU2V0IElDQ19TUkVfRUwyLlNSRT09MQorCW9ycgl4MCwgeDAsICNJQ0NfU1JFX0VMMl9FTkFCTEUJLy8gU2V0IElDQ19TUkVfRUwyLkVuYWJsZT09MQorCW1zcl9zCUlDQ19TUkVfRUwyLCB4MAorCWlzYgkJCQkJLy8gTWFrZSBzdXJlIFNSRSBpcyBub3cgc2V0CisJbXNyX3MJSUNIX0hDUl9FTDIsIHh6cgkJLy8gUmVzZXQgSUNDX0hDUl9FTDIgdG8gZGVmYXVsdHMKKworMzoKKyNlbmRpZgorCisJLyogUG9wdWxhdGUgSUQgcmVnaXN0ZXJzLiAqLworCW1ycwl4MCwgbWlkcl9lbDEKKwltcnMJeDEsIG1waWRyX2VsMQorCW1zcgl2cGlkcl9lbDIsIHgwCisJbXNyCXZtcGlkcl9lbDIsIHgxCisKKwkvKiBzY3Rscl9lbDEgKi8KKwltb3YJeDAsICMweDA4MDAJCQkvLyBTZXQvY2xlYXIgUkVTezEsMH0gYml0cworQ1BVX0JFKAltb3ZrCXgwLCAjMHgzM2QwLCBsc2wgIzE2CSkJLy8gU2V0IEVFIGFuZCBFMEUgb24gQkUgc3lzdGVtcworQ1BVX0xFKAltb3ZrCXgwLCAjMHgzMGQwLCBsc2wgIzE2CSkJLy8gQ2xlYXIgRUUgYW5kIEUwRSBvbiBMRSBzeXN0ZW1zCisJbXNyCXNjdGxyX2VsMSwgeDAKKworCS8qIENvcHJvY2Vzc29yIHRyYXBzLiAqLworCW1vdgl4MCwgIzB4MzNmZgorCW1zcgljcHRyX2VsMiwgeDAJCQkvLyBEaXNhYmxlIGNvcHJvLiB0cmFwcyB0byBFTDIKKworI2lmZGVmIENPTkZJR19DT01QQVQKKwltc3IJaHN0cl9lbDIsIHh6cgkJCS8vIERpc2FibGUgQ1AxNSB0cmFwcyB0byBFTDIKKyNlbmRpZgorCisJLyogU3RhZ2UtMiB0cmFuc2xhdGlvbiAqLworCW1zcgl2dHRicl9lbDIsIHh6cgorCisJLyogSHlwZXJ2aXNvciBzdHViICovCisJYWRycAl4MCwgX19oeXBfc3R1Yl92ZWN0b3JzCisJYWRkCXgwLCB4MCwgIzpsbzEyOl9faHlwX3N0dWJfdmVjdG9ycworCW1zcgl2YmFyX2VsMiwgeDAKKworCS8qIHNwc3IgKi8KKwltb3YJeDAsICMoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgUFNSX0FfQklUIHwgUFNSX0RfQklUIHxcCisJCSAgICAgIFBTUl9NT0RFX0VMMWgpCisJbXNyCXNwc3JfZWwyLCB4MAorCW1zcgllbHJfZWwyLCBscgorCW1vdgl3MjAsICNCT09UX0NQVV9NT0RFX0VMMgkJLy8gVGhpcyBDUFUgYm9vdGVkIGluIEVMMgorCWVyZXQKK0VORFBST0MoZWwyX3NldHVwKQorCisvKgorICogU2V0cyB0aGUgX19ib290X2NwdV9tb2RlIGZsYWcgZGVwZW5kaW5nIG9uIHRoZSBDUFUgYm9vdCBtb2RlIHBhc3NlZAorICogaW4geDIwLiBTZWUgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmggZm9yIG1vcmUgaW5mby4KKyAqLworRU5UUlkoc2V0X2NwdV9ib290X21vZGVfZmxhZykKKwlsZHIJeDEsID1fX2Jvb3RfY3B1X21vZGUJCS8vIENvbXB1dGUgX19ib290X2NwdV9tb2RlCisJYWRkCXgxLCB4MSwgeDI4CisJY21wCXcyMCwgI0JPT1RfQ1BVX01PREVfRUwyCisJYi5uZQkxZgorCWFkZAl4MSwgeDEsICM0CisxOglzdHIJdzIwLCBbeDFdCQkJLy8gVGhpcyBDUFUgaGFzIGJvb3RlZCBpbiBFTDEKKwlkbWIJc3kKKwlkYwlpdmFjLCB4MQkJCS8vIEludmFsaWRhdGUgcG90ZW50aWFsbHkgc3RhbGUgY2FjaGUgbGluZQorCXJldAorRU5EUFJPQyhzZXRfY3B1X2Jvb3RfbW9kZV9mbGFnKQorCisvKgorICogV2UgbmVlZCB0byBmaW5kIG91dCB0aGUgQ1BVIGJvb3QgbW9kZSBsb25nIGFmdGVyIGJvb3QsIHNvIHdlIG5lZWQgdG8KKyAqIHN0b3JlIGl0IGluIGEgd3JpdGFibGUgdmFyaWFibGUuCisgKgorICogVGhpcyBpcyBub3QgaW4gLmJzcywgYmVjYXVzZSB3ZSBzZXQgaXQgc3VmZmljaWVudGx5IGVhcmx5IHRoYXQgdGhlIGJvb3QtdGltZQorICogemVyb2luZyBvZiAuYnNzIHdvdWxkIGNsb2JiZXIgaXQuCisgKi8KKwkucHVzaHNlY3Rpb24JLmRhdGEuLmNhY2hlbGluZV9hbGlnbmVkCitFTlRSWShfX2Jvb3RfY3B1X21vZGUpCisJLmFsaWduCUwxX0NBQ0hFX1NISUZUCisJLmxvbmcJQk9PVF9DUFVfTU9ERV9FTDIKKwkubG9uZwkwCisJLnBvcHNlY3Rpb24KKworI2lmZGVmIENPTkZJR19TTVAKKwkuYWxpZ24JMworMToJLnF1YWQJLgorCS5xdWFkCXNlY29uZGFyeV9ob2xkaW5nX3Blbl9yZWxlYXNlCisKKwkvKgorCSAqIFRoaXMgcHJvdmlkZXMgYSAiaG9sZGluZyBwZW4iIGZvciBwbGF0Zm9ybXMgdG8gaG9sZCBhbGwgc2Vjb25kYXJ5CisJICogY29yZXMgYXJlIGhlbGQgdW50aWwgd2UncmUgcmVhZHkgZm9yIHRoZW0gdG8gaW5pdGlhbGlzZS4KKwkgKi8KK0VOVFJZKHNlY29uZGFyeV9ob2xkaW5nX3BlbikKKwlibAllbDJfc2V0dXAJCQkvLyBEcm9wIHRvIEVMMSwgdzIwPWNwdV9ib290X21vZGUKKwlibAlfX2NhbGNfcGh5c19vZmZzZXQJCS8vIHgyND1QSFlTX09GRlNFVCwgeDI4PVBIWVNfT0ZGU0VULVBBR0VfT0ZGU0VUCisJYmwJc2V0X2NwdV9ib290X21vZGVfZmxhZworCW1ycwl4MCwgbXBpZHJfZWwxCisJbGRyICAgICB4MSwgPU1QSURSX0hXSURfQklUTUFTSworCWFuZAl4MCwgeDAsIHgxCisJYWRyCXgxLCAxYgorCWxkcAl4MiwgeDMsIFt4MV0KKwlzdWIJeDEsIHgxLCB4MgorCWFkZAl4MywgeDMsIHgxCitwZW46CWxkcgl4NCwgW3gzXQorCWNtcAl4NCwgeDAKKwliLmVxCXNlY29uZGFyeV9zdGFydHVwCisJd2ZlCisJYglwZW4KK0VORFBST0Moc2Vjb25kYXJ5X2hvbGRpbmdfcGVuKQorCisJLyoKKwkgKiBTZWNvbmRhcnkgZW50cnkgcG9pbnQgdGhhdCBqdW1wcyBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwuIE9ubHkgdG8KKwkgKiBiZSB1c2VkIHdoZXJlIENQVXMgYXJlIGJyb3VnaHQgb25saW5lIGR5bmFtaWNhbGx5IGJ5IHRoZSBrZXJuZWwuCisJICovCitFTlRSWShzZWNvbmRhcnlfZW50cnkpCisJYmwJZWwyX3NldHVwCQkJLy8gRHJvcCB0byBFTDEKKwlibAlfX2NhbGNfcGh5c19vZmZzZXQJCS8vIHgyND1QSFlTX09GRlNFVCwgeDI4PVBIWVNfT0ZGU0VULVBBR0VfT0ZGU0VUCisJYmwJc2V0X2NwdV9ib290X21vZGVfZmxhZworCWIJc2Vjb25kYXJ5X3N0YXJ0dXAKK0VORFBST0Moc2Vjb25kYXJ5X2VudHJ5KQorCitFTlRSWShzZWNvbmRhcnlfc3RhcnR1cCkKKwkvKgorCSAqIENvbW1vbiBlbnRyeSBwb2ludCBmb3Igc2Vjb25kYXJ5IENQVXMuCisJICovCisJbXJzCXgyMiwgbWlkcl9lbDEJCQkvLyB4MjI9Y3B1aWQKKwltb3YJeDAsIHgyMgorCWJsCWxvb2t1cF9wcm9jZXNzb3JfdHlwZQorCW1vdgl4MjMsIHgwCQkJCS8vIHgyMz1jdXJyZW50IGNwdV90YWJsZQorCWNiegl4MjMsIF9fZXJyb3JfcAkJCS8vIGludmFsaWQgcHJvY2Vzc29yICh4MjM9MCk/CisKKwlwZ3RibAl4MjUsIHgyNiwgeDI4CQkJLy8geDI1PVRUQlIwLCB4MjY9VFRCUjEKKwlsZHIJeDEyLCBbeDIzLCAjQ1BVX0lORk9fU0VUVVBdCisJYWRkCXgxMiwgeDEyLCB4MjgJCQkvLyBfX3ZpcnRfdG9fcGh5cworCWJscgl4MTIJCQkJLy8gaW5pdGlhbGlzZSBwcm9jZXNzb3IKKworCWxkcgl4MjEsID1zZWNvbmRhcnlfZGF0YQorCWxkcgl4MjcsID1fX3NlY29uZGFyeV9zd2l0Y2hlZAkvLyBhZGRyZXNzIHRvIGp1bXAgdG8gYWZ0ZXIgZW5hYmxpbmcgdGhlIE1NVQorCWIJX19lbmFibGVfbW11CitFTkRQUk9DKHNlY29uZGFyeV9zdGFydHVwKQorCitFTlRSWShfX3NlY29uZGFyeV9zd2l0Y2hlZCkKKwlsZHIJeDAsIFt4MjFdCQkJLy8gZ2V0IHNlY29uZGFyeV9kYXRhLnN0YWNrCisJbW92CXNwLCB4MAorCW1vdgl4MjksICMwCisJYglzZWNvbmRhcnlfc3RhcnRfa2VybmVsCitFTkRQUk9DKF9fc2Vjb25kYXJ5X3N3aXRjaGVkKQorI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KKworLyoKKyAqIFNldHVwIGNvbW1vbiBiaXRzIGJlZm9yZSBmaW5hbGx5IGVuYWJsaW5nIHRoZSBNTVUuIEVzc2VudGlhbGx5IHRoaXMgaXMganVzdAorICogbG9hZGluZyB0aGUgcGFnZSB0YWJsZSBwb2ludGVyIGFuZCB2ZWN0b3IgYmFzZSByZWdpc3RlcnMuCisgKgorICogT24gZW50cnkgdG8gdGhpcyBjb2RlLCB4MCBtdXN0IGNvbnRhaW4gdGhlIFNDVExSX0VMMSB2YWx1ZSBmb3IgdHVybmluZyBvbgorICogdGhlIE1NVS4KKyAqLworX19lbmFibGVfbW11OgorCWxkcgl4NSwgPXZlY3RvcnMKKwltc3IJdmJhcl9lbDEsIHg1CisJbXNyCXR0YnIwX2VsMSwgeDI1CQkJLy8gbG9hZCBUVEJSMAorCW1zcgl0dGJyMV9lbDEsIHgyNgkJCS8vIGxvYWQgVFRCUjEKKwlpc2IKKwliCV9fdHVybl9tbXVfb24KK0VORFBST0MoX19lbmFibGVfbW11KQorCisvKgorICogRW5hYmxlIHRoZSBNTVUuIFRoaXMgY29tcGxldGVseSBjaGFuZ2VzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHZpc2libGUgbWVtb3J5CisgKiBzcGFjZS4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggdGhpcy4KKyAqCisgKiAgeDAgID0gc3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXIKKyAqICB4MjcgPSAqdmlydHVhbCogYWRkcmVzcyB0byBqdW1wIHRvIHVwb24gY29tcGxldGlvbgorICoKKyAqIG90aGVyIHJlZ2lzdGVycyBkZXBlbmQgb24gdGhlIGZ1bmN0aW9uIGNhbGxlZCB1cG9uIGNvbXBsZXRpb24KKyAqCisgKiBXZSBhbGlnbiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvIHRoZSBzbWFsbGVzdCBwb3dlciBvZiB0d28gbGFyZ2VyIHRoYW4gaXQgdG8KKyAqIGVuc3VyZSBpdCBmaXRzIHdpdGhpbiBhIHNpbmdsZSBibG9jayBtYXAgZW50cnkuIE90aGVyd2lzZSB3ZXJlIFBIWVNfT0ZGU0VUCisgKiBjbG9zZSB0byB0aGUgZW5kIG9mIGEgNTEyTUIgb3IgMUdCIGJsb2NrIHdlIG1pZ2h0IHJlcXVpcmUgYW4gYWRkaXRpb25hbAorICogdGFibGUgdG8gbWFwIHRoZSBlbnRpcmUgZnVuY3Rpb24uCisgKi8KKwkuYWxpZ24JNAorX190dXJuX21tdV9vbjoKKwltc3IJc2N0bHJfZWwxLCB4MAorCWlzYgorCWJyCXgyNworRU5EUFJPQyhfX3R1cm5fbW11X29uKQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiBwaHlzaWNhbCBtZW1vcnkuCisgKi8KK19fY2FsY19waHlzX29mZnNldDoKKwlhZHIJeDAsIDFmCisJbGRwCXgxLCB4MiwgW3gwXQorCXN1Ygl4MjgsIHgwLCB4MQkJCS8vIHgyOCA9IFBIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQKKwlhZGQJeDI0LCB4MiwgeDI4CQkJLy8geDI0ID0gUEhZU19PRkZTRVQKKwlyZXQKK0VORFBST0MoX19jYWxjX3BoeXNfb2Zmc2V0KQorCisJLmFsaWduIDMKKzE6CS5xdWFkCS4KKwkucXVhZAlQQUdFX09GRlNFVAorCisvKgogICogRXhjZXB0aW9uIGhhbmRsaW5nLiBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2UgY2FuJ3QgcHJvY2VlZC4gV2Ugb3VnaHQgdG8KICAqIHRlbGwgdGhlIHVzZXIsIGJ1dCBzaW5jZSB3ZSBkb24ndCBoYXZlIGFueSBndWFyYW50ZWUgdGhhdCB3ZSdyZSBldmVuCiAgKiBydW5uaW5nIG9uIHRoZSByaWdodCBhcmNoaXRlY3R1cmUsIHdlIGRvIHZpcnR1YWxseSBub3RoaW5nLgpAQCAtNzE1LDIyICs3NTYsMyBAQAogCS5xdWFkCS4KIAkucXVhZAljcHVfdGFibGUKIAkuc2l6ZQlfX2xvb2t1cF9wcm9jZXNzb3JfdHlwZV9kYXRhLCAuIC0gX19sb29rdXBfcHJvY2Vzc29yX3R5cGVfZGF0YQotCi0vKgotICogRGV0ZXJtaW5lIHZhbGlkaXR5IG9mIHRoZSB4MjEgRkRUIHBvaW50ZXIuCi0gKiBUaGUgZHRiIG11c3QgYmUgOC1ieXRlIGFsaWduZWQgYW5kIGxpdmUgaW4gdGhlIGZpcnN0IDUxMk0gb2YgbWVtb3J5LgotICovCi1fX3ZldF9mZHQ6Ci0JdHN0CXgyMSwgIzB4NwotCWIubmUJMWYKLQljbXAJeDIxLCB4MjQKLQliLmx0CTFmCi0JbW92CXgwLCAjKDEgPDwgMjkpCi0JYWRkCXgwLCB4MCwgeDI0Ci0JY21wCXgyMSwgeDAKLQliLmdlCTFmCi0JcmV0Ci0xOgotCW1vdgl4MjEsICMwCi0JcmV0Ci1FTkRQUk9DKF9fdmV0X2ZkdCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2luc24uYyBiL2FyY2gvYXJtNjQva2VybmVsL2luc24uYwppbmRleCA4Y2QyN2ZlLi43ZTkzMjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9pbnNuLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvaW5zbi5jCkBAIC05NjAsMyArOTYwLDI5IEBACiAKIAlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7CiB9CisKK2Jvb2wgYWFyY2gzMl9pbnNuX2lzX3dpZGUodTMyIGluc24pCit7CisJcmV0dXJuIGluc24gPj0gMHhlODAwOworfQorCisvKgorICogTWFjcm9zL2RlZmluZXMgZm9yIGV4dHJhY3RpbmcgcmVnaXN0ZXIgbnVtYmVycyBmcm9tIGluc3RydWN0aW9uLgorICovCit1MzIgYWFyY2gzMl9pbnNuX2V4dHJhY3RfcmVnX251bSh1MzIgaW5zbiwgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKGluc24gJiAoMHhmIDw8IG9mZnNldCkpID4+IG9mZnNldDsKK30KKworI2RlZmluZSBPUEMyX01BU0sJMHg3CisjZGVmaW5lIE9QQzJfT0ZGU0VUCTUKK3UzMiBhYXJjaDMyX2luc25fbWNyX2V4dHJhY3Rfb3BjMih1MzIgaW5zbikKK3sKKwlyZXR1cm4gKGluc24gJiAoT1BDMl9NQVNLIDw8IE9QQzJfT0ZGU0VUKSkgPj4gT1BDMl9PRkZTRVQ7Cit9CisKKyNkZWZpbmUgQ1JNX01BU0sJMHhmCit1MzIgYWFyY2gzMl9pbnNuX21jcl9leHRyYWN0X2NybSh1MzIgaW5zbikKK3sKKwlyZXR1cm4gaW5zbiAmIENSTV9NQVNLOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvaW8uYyBiL2FyY2gvYXJtNjQva2VybmVsL2lvLmMKaW5kZXggN2QzN2VhZC4uMzU0YmUyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvaW8uYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9pby5jCkBAIC0yNSwxMiArMjUsMjYgQEAKICAqLwogdm9pZCBfX21lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGNoYXIgKnQgPSB0bzsKLQl3aGlsZSAoY291bnQpIHsKLQkJY291bnQtLTsKLQkJKnQgPSByZWFkYihmcm9tKTsKLQkJdCsrOworCXdoaWxlIChjb3VudCAmJiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZnJvbSwgOCkgfHwKKwkJCSAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl0bywgOCkpKSB7CisJCSoodTggKil0byA9IF9fcmF3X3JlYWRiKGZyb20pOwogCQlmcm9tKys7CisJCXRvKys7CisJCWNvdW50LS07CisJfQorCisJd2hpbGUgKGNvdW50ID49IDgpIHsKKwkJKih1NjQgKil0byA9IF9fcmF3X3JlYWRxKGZyb20pOworCQlmcm9tICs9IDg7CisJCXRvICs9IDg7CisJCWNvdW50IC09IDg7CisJfQorCisJd2hpbGUgKGNvdW50KSB7CisJCSoodTggKil0byA9IF9fcmF3X3JlYWRiKGZyb20pOworCQlmcm9tKys7CisJCXRvKys7CisJCWNvdW50LS07CiAJfQogfQogRVhQT1JUX1NZTUJPTChfX21lbWNweV9mcm9taW8pOwpAQCAtNDAsMTIgKzU0LDI2IEBACiAgKi8KIHZvaWQgX19tZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgY291bnQpCiB7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZiA9IGZyb207Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCWNvdW50LS07Ci0JCXdyaXRlYigqZiwgdG8pOwotCQlmKys7CisJd2hpbGUgKGNvdW50ICYmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl0bywgOCkgfHwKKwkJCSAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylmcm9tLCA4KSkpIHsKKwkJX19yYXdfd3JpdGViKCoodm9sYXRpbGUgdTggKilmcm9tLCB0byk7CisJCWZyb20rKzsKIAkJdG8rKzsKKwkJY291bnQtLTsKKwl9CisKKwl3aGlsZSAoY291bnQgPj0gOCkgeworCQlfX3Jhd193cml0ZXEoKih2b2xhdGlsZSB1NjQgKilmcm9tLCB0byk7CisJCWZyb20gKz0gODsKKwkJdG8gKz0gODsKKwkJY291bnQgLT0gODsKKwl9CisKKwl3aGlsZSAoY291bnQpIHsKKwkJX19yYXdfd3JpdGViKCoodm9sYXRpbGUgdTggKilmcm9tLCB0byk7CisJCWZyb20rKzsKKwkJdG8rKzsKKwkJY291bnQtLTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKF9fbWVtY3B5X3RvaW8pOwpAQCAtNTUsMTAgKzgzLDI4IEBACiAgKi8KIHZvaWQgX19tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGludCBjLCBzaXplX3QgY291bnQpCiB7Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCWNvdW50LS07Ci0JCXdyaXRlYihjLCBkc3QpOworCXU2NCBxYyA9ICh1OCljOworCisJcWMgfD0gcWMgPDwgODsKKwlxYyB8PSBxYyA8PCAxNjsKKwlxYyB8PSBxYyA8PCAzMjsKKworCXdoaWxlIChjb3VudCAmJiAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylkc3QsIDgpKSB7CisJCV9fcmF3X3dyaXRlYihjLCBkc3QpOwogCQlkc3QrKzsKKwkJY291bnQtLTsKKwl9CisKKwl3aGlsZSAoY291bnQgPj0gOCkgeworCQlfX3Jhd193cml0ZXEocWMsIGRzdCk7CisJCWRzdCArPSA4OworCQljb3VudCAtPSA4OworCX0KKworCXdoaWxlIChjb3VudCkgeworCQlfX3Jhd193cml0ZWIoYywgZHN0KTsKKwkJZHN0Kys7CisJCWNvdW50LS07CiAJfQogfQogRVhQT1JUX1NZTUJPTChfX21lbXNldF9pbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtNjQva2VybmVsL2lycS5jCmluZGV4IDA3MWE2ZWMuLjI0MGI3NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2lycS5jCkBAIC00MCw2ICs0MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgKCpoYW5kbGVfYXJjaF9pcnEpKHN0cnVjdCBwdF9yZWdzICopID0gTlVMTDsKKwogdm9pZCBfX2luaXQgc2V0X2hhbmRsZV9pcnEodm9pZCAoKmhhbmRsZV9pcnEpKHN0cnVjdCBwdF9yZWdzICopKQogewogCWlmIChoYW5kbGVfYXJjaF9pcnEpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9qdW1wX2xhYmVsLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9qdW1wX2xhYmVsLmMKaW5kZXggMjYzYTE2Ni4uNGYxZmVjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvanVtcF9sYWJlbC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2p1bXBfbGFiZWwuYwpAQCAtMjIsOSArMjIsOCBAQAogCiAjaWZkZWYgSEFWRV9KVU1QX0xBQkVMCiAKLXN0YXRpYyB2b2lkIF9fYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnksCi0JCQkJCWVudW0ganVtcF9sYWJlbF90eXBlIHR5cGUsCi0JCQkJCWJvb2wgaXNfc3RhdGljKQordm9pZCBhcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgICBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKQogewogCXZvaWQgKmFkZHIgPSAodm9pZCAqKWVudHJ5LT5jb2RlOwogCXUzMiBpbnNuOwpAQCAtMzcsMjIgKzM2LDE4IEBACiAJCWluc24gPSBhYXJjaDY0X2luc25fZ2VuX25vcCgpOwogCX0KIAotCWlmIChpc19zdGF0aWMpCi0JCWFhcmNoNjRfaW5zbl9wYXRjaF90ZXh0X25vc3luYyhhZGRyLCBpbnNuKTsKLQllbHNlCi0JCWFhcmNoNjRfaW5zbl9wYXRjaF90ZXh0KCZhZGRyLCAmaW5zbiwgMSk7Ci19Ci0KLXZvaWQgYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnksCi0JCQkgICAgICAgZW51bSBqdW1wX2xhYmVsX3R5cGUgdHlwZSkKLXsKLQlfX2FyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm0oZW50cnksIHR5cGUsIGZhbHNlKTsKKwlhYXJjaDY0X2luc25fcGF0Y2hfdGV4dCgmYWRkciwgJmluc24sIDEpOwogfQogCiB2b2lkIGFyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm1fc3RhdGljKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwKIAkJCQkgICAgICBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKQogewotCV9fYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShlbnRyeSwgdHlwZSwgdHJ1ZSk7CisJLyoKKwkgKiBXZSB1c2UgdGhlIGFyY2hpdGVjdGVkIEE2NCBOT1AgaW4gYXJjaF9zdGF0aWNfYnJhbmNoLCBzbyB0aGVyZSdzIG5vCisJICogbmVlZCB0byBwYXRjaCBhbiBpZGVudGljYWwgQTY0IE5PUCBvdmVyIHRoZSB0b3Agb2YgaXQgaGVyZS4gVGhlIGNvcmUKKwkgKiB3aWxsIGNhbGwgYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybSBmcm9tIGEgbW9kdWxlIG5vdGlmaWVyIGlmIHRoZQorCSAqIE5PUCBuZWVkcyB0byBiZSByZXBsYWNlZCBieSBhIGJyYW5jaC4KKwkgKi8KIH0KIAogI2VuZGlmCS8qIEhBVkVfSlVNUF9MQUJFTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYwppbmRleCAxZWIxY2M5Li5mZDAyN2IxIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vaW5zbi5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAjZGVmaW5lCUFBUkNINjRfSU5TTl9JTU1fTU9WTloJCUFBUkNINjRfSU5TTl9JTU1fTUFYCiAjZGVmaW5lCUFBUkNINjRfSU5TTl9JTU1fTU9WSwkJQUFSQ0g2NF9JTlNOX0lNTV8xNgpAQCAtMzk0LDMgKzM5NSwyMCBAQAogCSAgICAgICBtZS0+bmFtZSwgKGludClFTEY2NF9SX1RZUEUocmVsW2ldLnJfaW5mbyksIHZhbCk7CiAJcmV0dXJuIC1FTk9FWEVDOwogfQorCitpbnQgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsCisJCSAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKKwkJICAgIHN0cnVjdCBtb2R1bGUgKm1lKQoreworCWNvbnN0IEVsZl9TaGRyICpzLCAqc2U7CisJY29uc3QgY2hhciAqc2Vjc3RycyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKKworCWZvciAocyA9IHNlY2hkcnMsIHNlID0gc2VjaGRycyArIGhkci0+ZV9zaG51bTsgcyA8IHNlOyBzKyspIHsKKwkJaWYgKHN0cmNtcCgiLmFsdGluc3RydWN0aW9ucyIsIHNlY3N0cnMgKyBzLT5zaF9uYW1lKSA9PSAwKSB7CisJCQlhcHBseV9hbHRlcm5hdGl2ZXMoKHZvaWQgKilzLT5zaF9hZGRyLCBzLT5zaF9zaXplKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FybTY0L2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggYWEyOWVjYi4uMjVhNTMwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTY5LDggKzE2OSwxNCBAQAogCQlyZXQgPSAxOwogCX0KIAotCWlmIChsZWZ0ID4gKHM2NClhcm1wbXUtPm1heF9wZXJpb2QpCi0JCWxlZnQgPSBhcm1wbXUtPm1heF9wZXJpb2Q7CisJLyoKKwkgKiBMaW1pdCB0aGUgbWF4aW11bSBwZXJpb2QgdG8gcHJldmVudCB0aGUgY291bnRlciB2YWx1ZQorCSAqIGZyb20gb3ZlcnRha2luZyB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBwcm9ncmFtLiBJbgorCSAqIGVmZmVjdCB3ZSBhcmUgcmVkdWNpbmcgbWF4X3BlcmlvZCB0byBhY2NvdW50IGZvcgorCSAqIGludGVycnVwdCBsYXRlbmN5IChhbmQgd2UgYXJlIGJlaW5nIHZlcnkgY29uc2VydmF0aXZlKS4KKwkgKi8KKwlpZiAobGVmdCA+IChhcm1wbXUtPm1heF9wZXJpb2QgPj4gMSkpCisJCWxlZnQgPSBhcm1wbXUtPm1heF9wZXJpb2QgPj4gMTsKIAogCWxvY2FsNjRfc2V0KCZod2MtPnByZXZfY291bnQsICh1NjQpLWxlZnQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IDhhNGFlOGUuLmQ4ODJiODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY2NvbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KQEAgLTU1MSw2ICs1NTIsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHN5c3RlbV9jYWxsX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkJICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkJICAgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJaW50IHN5c2NhbGxubyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpLT5zeXNjYWxsbm87CisKKwlyZXR1cm4gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkgICAmc3lzY2FsbG5vLCAwLCAtMSk7Cit9CisKK3N0YXRpYyBpbnQgc3lzdGVtX2NhbGxfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCQkgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQkgICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlpbnQgc3lzY2FsbG5vLCByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsICZzeXNjYWxsbm8sIDAsIC0xKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdGFza19wdF9yZWdzKHRhcmdldCktPnN5c2NhbGxubyA9IHN5c2NhbGxubzsKKwlyZXR1cm4gcmV0OworfQorCiBlbnVtIGFhcmNoNjRfcmVnc2V0IHsKIAlSRUdTRVRfR1BSLAogCVJFR1NFVF9GUFIsCkBAIC01NTksNiArNTg2LDcgQEAKIAlSRUdTRVRfSFdfQlJFQUssCiAJUkVHU0VUX0hXX1dBVENILAogI2VuZGlmCisJUkVHU0VUX1NZU1RFTV9DQUxMLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBhYXJjaDY0X3JlZ3NldHNbXSA9IHsKQEAgLTYwOCw2ICs2MzYsMTQgQEAKIAkJLnNldCA9IGh3X2JyZWFrX3NldCwKIAl9LAogI2VuZGlmCisJW1JFR1NFVF9TWVNURU1fQ0FMTF0gPSB7CisJCS5jb3JlX25vdGVfdHlwZSA9IE5UX0FSTV9TWVNURU1fQ0FMTCwKKwkJLm4gPSAxLAorCQkuc2l6ZSA9IHNpemVvZihpbnQpLAorCQkuYWxpZ24gPSBzaXplb2YoaW50KSwKKwkJLmdldCA9IHN5c3RlbV9jYWxsX2dldCwKKwkJLnNldCA9IHN5c3RlbV9jYWxsX3NldCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfYWFyY2g2NF92aWV3ID0gewpAQCAtMTExNCw2ICsxMTUwLDEwIEBACiAKIGFzbWxpbmthZ2UgaW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJLyogRG8gdGhlIHNlY3VyZSBjb21wdXRpbmcgY2hlY2sgZmlyc3Q7IGZhaWx1cmVzIHNob3VsZCBiZSBmYXN0LiAqLworCWlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpCisJCXJldHVybiAtMTsKKwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKIAkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsKHJlZ3MsIFBUUkFDRV9TWVNDQUxMX0VOVEVSKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmMKaW5kZXggMjQzNzE5Ni4uYjgwOTkxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jCkBAIC00MywxMiArNDMsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdV9vcHMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTcyLDEzICs3NCwxNSBAQAogCQkJCSBDT01QQVRfSFdDQVBfRkFTVF9NVUxUfENPTVBBVF9IV0NBUF9FRFNQfFwKIAkJCQkgQ09NUEFUX0hXQ0FQX1RMU3xDT01QQVRfSFdDQVBfVkZQfFwKIAkJCQkgQ09NUEFUX0hXQ0FQX1ZGUHYzfENPTVBBVF9IV0NBUF9WRlB2NHxcCi0JCQkJIENPTVBBVF9IV0NBUF9ORU9OfENPTVBBVF9IV0NBUF9JRElWKQorCQkJCSBDT01QQVRfSFdDQVBfTkVPTnxDT01QQVRfSFdDQVBfSURJVnxcCisJCQkJIENPTVBBVF9IV0NBUF9MUEFFKQogdW5zaWduZWQgaW50IGNvbXBhdF9lbGZfaHdjYXAgX19yZWFkX21vc3RseSA9IENPTVBBVF9FTEZfSFdDQVBfREVGQVVMVDsKIHVuc2lnbmVkIGludCBjb21wYXRfZWxmX2h3Y2FwMiBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAKK0RFQ0xBUkVfQklUTUFQKGNwdV9od2NhcHMsIEFSTTY0X05DQVBTKTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9uYW1lOwotc3RhdGljIGNvbnN0IGNoYXIgKm1hY2hpbmVfbmFtZTsKIHBoeXNfYWRkcl90IF9fZmR0X3BvaW50ZXIgX19pbml0ZGF0YTsKIAogLyoKQEAgLTExNiwxMiArMTIwLDE2IEBACiAKIHZvaWQgX19pbml0IHNtcF9zZXR1cF9wcm9jZXNzb3JfaWQodm9pZCkKIHsKKwl1NjQgbXBpZHIgPSByZWFkX2NwdWlkX21waWRyKCkgJiBNUElEUl9IV0lEX0JJVE1BU0s7CisJY3B1X2xvZ2ljYWxfbWFwKDApID0gbXBpZHI7CisKIAkvKgogCSAqIGNsZWFyIF9fbXlfY3B1X29mZnNldCBvbiBib290IENQVSB0byBhdm9pZCBoYW5nIGNhdXNlZCBieQogCSAqIHVzaW5nIHBlcmNwdSB2YXJpYWJsZSBlYXJseSwgZm9yIGV4YW1wbGUsIGxvY2tkZXAgd2lsbAogCSAqIGFjY2VzcyBwZXJjcHUgdmFyaWFibGUgaW5zaWRlIGxvY2tfcmVsZWFzZQogCSAqLwogCXNldF9teV9jcHVfb2Zmc2V0KDApOworCXByX2luZm8oIkJvb3RpbmcgTGludXggb24gcGh5c2ljYWwgQ1BVIDB4JWx4XG4iLCAodW5zaWduZWQgbG9uZyltcGlkcik7CiB9CiAKIGJvb2wgYXJjaF9tYXRjaF9jcHVfcGh5c19pZChpbnQgY3B1LCB1NjQgcGh5c19pZCkKQEAgLTMxMSw3ICszMTksNyBAQAogCQkJY3B1X3JlbGF4KCk7CiAJfQogCi0JbWFjaGluZV9uYW1lID0gb2ZfZmxhdF9kdF9nZXRfbWFjaGluZV9uYW1lKCk7CisJZHVtcF9zdGFja19zZXRfYXJjaF9kZXNjKCIlcyAoRFQpIiwgb2ZfZmxhdF9kdF9nZXRfbWFjaGluZV9uYW1lKCkpOwogfQogCiAvKgpAQCAtMzc2LDYgKzM4NCw3IEBACiAKIAkqY21kbGluZV9wID0gYm9vdF9jb21tYW5kX2xpbmU7CiAKKwllYXJseV9maXhtYXBfaW5pdCgpOwogCWVhcmx5X2lvcmVtYXBfaW5pdCgpOwogCiAJcGFyc2VfZWFybHlfcGFyYW0oKTsKQEAgLTM5OCw3ICs0MDcsNiBAQAogCiAJcHNjaV9pbml0KCk7CiAKLQljcHVfbG9naWNhbF9tYXAoMCkgPSByZWFkX2NwdWlkX21waWRyKCkgJiBNUElEUl9IV0lEX0JJVE1BU0s7CiAJY3B1X3JlYWRfYm9vdGNwdV9vcHMoKTsKICNpZmRlZiBDT05GSUdfU01QCiAJc21wX2luaXRfY3B1cygpOwpAQCAtNDQ3LDE0ICs0NTUsNTAgQEAKIAlOVUxMCiB9OwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGNvbnN0IGNoYXIgKmNvbXBhdF9od2NhcF9zdHJbXSA9IHsKKwkic3dwIiwKKwkiaGFsZiIsCisJInRodW1iIiwKKwkiMjZiaXQiLAorCSJmYXN0bXVsdCIsCisJImZwYSIsCisJInZmcCIsCisJImVkc3AiLAorCSJqYXZhIiwKKwkiaXdtbXh0IiwKKwkiY3J1bmNoIiwKKwkidGh1bWJlZSIsCisJIm5lb24iLAorCSJ2ZnB2MyIsCisJInZmcHYzZDE2IiwKKwkidGxzIiwKKwkidmZwdjQiLAorCSJpZGl2YSIsCisJImlkaXZ0IiwKKwkidmZwZDMyIiwKKwkibHBhZSIsCisJImV2dHN0cm0iCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29tcGF0X2h3Y2FwMl9zdHJbXSA9IHsKKwkiYWVzIiwKKwkicG11bGwiLAorCSJzaGExIiwKKwkic2hhMiIsCisJImNyYzMyIiwKKwlOVUxMCit9OworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKwogc3RhdGljIGludCBjX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBpOwotCi0Jc2VxX3ByaW50ZihtLCAiUHJvY2Vzc29yXHQ6ICVzIHJldiAlZCAoJXMpXG4iLAotCQkgICBjcHVfbmFtZSwgcmVhZF9jcHVpZF9pZCgpICYgMTUsIEVMRl9QTEFURk9STSk7CisJaW50IGksIGo7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJc3RydWN0IGNwdWluZm9fYXJtNjQgKmNwdWluZm8gPSAmcGVyX2NwdShjcHVfZGF0YSwgaSk7CisJCXUzMiBtaWRyID0gY3B1aW5mby0+cmVnX21pZHI7CisKIAkJLyoKIAkJICogZ2xpYmMgcmVhZHMgL3Byb2MvY3B1aW5mbyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZgogCQkgKiBvbmxpbmUgcHJvY2Vzc29ycywgbG9va2luZyBmb3IgbGluZXMgYmVnaW5uaW5nIHdpdGgKQEAgLTQ2MywyNSArNTA3LDM5IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCQlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdDogJWRcbiIsIGkpOwogI2VuZGlmCisKKwkJLyoKKwkJICogRHVtcCBvdXQgdGhlIGNvbW1vbiBwcm9jZXNzb3IgZmVhdHVyZXMgaW4gYSBzaW5nbGUgbGluZS4KKwkJICogVXNlcnNwYWNlIHNob3VsZCByZWFkIHRoZSBod2NhcHMgd2l0aCBnZXRhdXh2YWwoQVRfSFdDQVApCisJCSAqIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gcGFyc2UgdGhpcywgYnV0IHRoZXJlJ3MgYSBib2R5IG9mCisJCSAqIHNvZnR3YXJlIHdoaWNoIGRvZXMgYWxyZWFkeSAoYXQgbGVhc3QgZm9yIDMyLWJpdCkuCisJCSAqLworCQlzZXFfcHV0cyhtLCAiRmVhdHVyZXNcdDoiKTsKKwkJaWYgKHBlcnNvbmFsaXR5KGN1cnJlbnQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMikgeworI2lmZGVmIENPTkZJR19DT01QQVQKKwkJCWZvciAoaiA9IDA7IGNvbXBhdF9od2NhcF9zdHJbal07IGorKykKKwkJCQlpZiAoY29tcGF0X2VsZl9od2NhcCAmICgxIDw8IGopKQorCQkJCQlzZXFfcHJpbnRmKG0sICIgJXMiLCBjb21wYXRfaHdjYXBfc3RyW2pdKTsKKworCQkJZm9yIChqID0gMDsgY29tcGF0X2h3Y2FwMl9zdHJbal07IGorKykKKwkJCQlpZiAoY29tcGF0X2VsZl9od2NhcDIgJiAoMSA8PCBqKSkKKwkJCQkJc2VxX3ByaW50ZihtLCAiICVzIiwgY29tcGF0X2h3Y2FwMl9zdHJbal0pOworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKwkJfSBlbHNlIHsKKwkJCWZvciAoaiA9IDA7IGh3Y2FwX3N0cltqXTsgaisrKQorCQkJCWlmIChlbGZfaHdjYXAgJiAoMSA8PCBqKSkKKwkJCQkJc2VxX3ByaW50ZihtLCAiICVzIiwgaHdjYXBfc3RyW2pdKTsKKwkJfQorCQlzZXFfcHV0cyhtLCAiXG4iKTsKKworCQlzZXFfcHJpbnRmKG0sICJDUFUgaW1wbGVtZW50ZXJcdDogMHglMDJ4XG4iLAorCQkJICAgTUlEUl9JTVBMRU1FTlRPUihtaWRyKSk7CisJCXNlcV9wcmludGYobSwgIkNQVSBhcmNoaXRlY3R1cmU6IDhcbiIpOworCQlzZXFfcHJpbnRmKG0sICJDUFUgdmFyaWFudFx0OiAweCV4XG4iLCBNSURSX1ZBUklBTlQobWlkcikpOworCQlzZXFfcHJpbnRmKG0sICJDUFUgcGFydFx0OiAweCUwM3hcbiIsIE1JRFJfUEFSVE5VTShtaWRyKSk7CisJCXNlcV9wcmludGYobSwgIkNQVSByZXZpc2lvblx0OiAlZFxuXG4iLCBNSURSX1JFVklTSU9OKG1pZHIpKTsKIAl9CiAKLQkvKiBkdW1wIG91dCB0aGUgcHJvY2Vzc29yIGZlYXR1cmVzICovCi0Jc2VxX3B1dHMobSwgIkZlYXR1cmVzXHQ6ICIpOwotCi0JZm9yIChpID0gMDsgaHdjYXBfc3RyW2ldOyBpKyspCi0JCWlmIChlbGZfaHdjYXAgJiAoMSA8PCBpKSkKLQkJCXNlcV9wcmludGYobSwgIiVzICIsIGh3Y2FwX3N0cltpXSk7Ci0KLQlzZXFfcHJpbnRmKG0sICJcbkNQVSBpbXBsZW1lbnRlclx0OiAweCUwMnhcbiIsIHJlYWRfY3B1aWRfaWQoKSA+PiAyNCk7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BVIGFyY2hpdGVjdHVyZTogQUFyY2g2NFxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BVIHZhcmlhbnRcdDogMHgleFxuIiwgKHJlYWRfY3B1aWRfaWQoKSA+PiAyMCkgJiAxNSk7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BVIHBhcnRcdDogMHglMDN4XG4iLCAocmVhZF9jcHVpZF9pZCgpID4+IDQpICYgMHhmZmYpOwotCXNlcV9wcmludGYobSwgIkNQVSByZXZpc2lvblx0OiAlZFxuIiwgcmVhZF9jcHVpZF9pZCgpICYgMTUpOwotCi0Jc2VxX3B1dHMobSwgIlxuIik7Ci0KLQlzZXFfcHJpbnRmKG0sICJIYXJkd2FyZVx0OiAlc1xuIiwgbWFjaGluZV9uYW1lKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwzMi5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsMzIuYwppbmRleCAxYjlhZDAyLi41YTFiYTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwzMi5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbDMyLmMKQEAgLTE4Niw2ICsxODYsMTIgQEAKIAkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7CiAJCWVyciB8PSBfX3B1dF91c2VyKChjb21wYXRfdXB0cl90KSh1bnNpZ25lZCBsb25nKWZyb20tPnNpX3B0ciwgJnRvLT5zaV9wdHIpOwogCQlicmVhazsKKwljYXNlIF9fU0lfU1lTOgorCQllcnIgfD0gX19wdXRfdXNlcigoY29tcGF0X3VwdHJfdCkodW5zaWduZWQgbG9uZykKKwkJCQlmcm9tLT5zaV9jYWxsX2FkZHIsICZ0by0+c2lfY2FsbF9hZGRyKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfc3lzY2FsbCwgJnRvLT5zaV9zeXNjYWxsKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfYXJjaCwgJnRvLT5zaV9hcmNoKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDogLyogdGhpcyBpcyBqdXN0IGluIGNhc2UgZm9yIG5vdyAuLi4gKi8KIAkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfcGlkLCAmdG8tPnNpX3BpZCk7CiAJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3VpZCwgJnRvLT5zaV91aWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2xlZXAuUyBiL2FyY2gvYXJtNjQva2VybmVsL3NsZWVwLlMKaW5kZXggYTU2NGI0NC4uZWRlMTg2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2xlZXAuUworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zbGVlcC5TCkBAIC0xNDcsMTQgKzE0NywxMiBAQAogCXJldAogRU5EUFJPQyhjcHVfcmVzdW1lX2FmdGVyX21tdSkKIAotCS5kYXRhCiBFTlRSWShjcHVfcmVzdW1lKQogCWJsCWVsMl9zZXR1cAkJLy8gaWYgaW4gRUwyIGRyb3AgdG8gRUwxIGNsZWFubHkKICNpZmRlZiBDT05GSUdfU01QCiAJbXJzCXgxLCBtcGlkcl9lbDEKLQlhZHIJeDQsIG1waWRyX2hhc2hfcHRyCi0JbGRyCXg1LCBbeDRdCi0JYWRkCXg4LCB4NCwgeDUJCS8vIHg4ID0gc3RydWN0IG1waWRyX2hhc2ggcGh5cyBhZGRyZXNzCisJYWRycAl4OCwgbXBpZHJfaGFzaAorCWFkZCB4OCwgeDgsICM6bG8xMjptcGlkcl9oYXNoIC8vIHg4ID0gc3RydWN0IG1waWRyX2hhc2ggcGh5cyBhZGRyZXNzCiAgICAgICAgIC8qIHJldHJpZXZlIG1waWRyX2hhc2ggbWVtYmVycyB0byBjb21wdXRlIHRoZSBoYXNoICovCiAJbGRyCXgyLCBbeDgsICNNUElEUl9IQVNIX01BU0tdCiAJbGRwCXczLCB3NCwgW3g4LCAjTVBJRFJfSEFTSF9TSElGVFNdCkBAIC0xNjQsMTQgKzE2MiwxNSBAQAogI2Vsc2UKIAltb3YJeDcsIHh6cgogI2VuZGlmCi0JYWRyCXgwLCBzbGVlcF9zYXZlX3NwCisJYWRycAl4MCwgc2xlZXBfc2F2ZV9zcAorCWFkZAl4MCwgeDAsICM6bG8xMjpzbGVlcF9zYXZlX3NwCiAJbGRyCXgwLCBbeDAsICNTTEVFUF9TQVZFX1NQX1BIWVNdCiAJbGRyCXgwLCBbeDAsIHg3LCBsc2wgIzNdCiAJLyogbG9hZCBzcCBmcm9tIGNvbnRleHQgKi8KIAlsZHIJeDIsIFt4MCwgI0NQVV9DVFhfU1BdCi0JYWRyCXgxLCBzbGVlcF9pZG1hcF9waHlzCisJYWRycAl4MSwgc2xlZXBfaWRtYXBfcGh5cwogCS8qIGxvYWQgcGh5c2ljYWwgYWRkcmVzcyBvZiBpZGVudGl0eSBtYXAgcGFnZSB0YWJsZSBpbiB4MSAqLwotCWxkcgl4MSwgW3gxXQorCWxkcgl4MSwgW3gxLCAjOmxvMTI6c2xlZXBfaWRtYXBfcGh5c10KIAltb3YJc3AsIHgyCiAJLyoKIAkgKiBjcHVfZG9fcmVzdW1lIGV4cGVjdHMgeDAgdG8gY29udGFpbiBjb250ZXh0IHBoeXNpY2FsIGFkZHJlc3MKQEAgLTE4MCwyNiArMTc5LDMgQEAKIAlibAljcHVfZG9fcmVzdW1lCQkvLyBQQyByZWxhdGl2ZSBqdW1wLCBNTVUgb2ZmCiAJYgljcHVfcmVzdW1lX21tdQkJLy8gUmVzdW1lIE1NVSwgbmV2ZXIgcmV0dXJucwogRU5EUFJPQyhjcHVfcmVzdW1lKQotCi0JLmFsaWduIDMKLW1waWRyX2hhc2hfcHRyOgotCS8qCi0JICogb2Zmc2V0IG9mIG1waWRyX2hhc2ggc3ltYm9sIGZyb20gY3VycmVudCBsb2NhdGlvbgotCSAqIHVzZWQgdG8gb2J0YWluIHJ1bi10aW1lIG1waWRyX2hhc2ggYWRkcmVzcyB3aXRoIE1NVSBvZmYKLSAgICAgICAgICovCi0JLnF1YWQJbXBpZHJfaGFzaCAtIC4KLS8qCi0gKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGlkZW50aXR5IG1hcHBlZCBwYWdlIHRhYmxlcwotICovCi0JLnR5cGUJc2xlZXBfaWRtYXBfcGh5cywgI29iamVjdAotRU5UUlkoc2xlZXBfaWRtYXBfcGh5cykKLQkucXVhZAkwCi0vKgotICogc3RydWN0IHNsZWVwX3NhdmVfc3AgewotICoJcGh5c19hZGRyX3QgKnNhdmVfcHRyX3N0YXNoOwotICoJcGh5c19hZGRyX3Qgc2F2ZV9wdHJfc3Rhc2hfcGh5czsKLSAqIH07Ci0gKi8KLQkudHlwZQlzbGVlcF9zYXZlX3NwLCAjb2JqZWN0Ci1FTlRSWShzbGVlcF9zYXZlX3NwKQotCS5zcGFjZQlTTEVFUF9TQVZFX1NQX1NaCS8vIHN0cnVjdCBzbGVlcF9zYXZlX3NwCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jCmluZGV4IGIwNmQxZDkuLjdhZTZlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFfd29yay5oPgogCisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgpAQCAtMzA5LDYgKzMxMCw3IEBACiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKIAlwcl9pbmZvKCJTTVA6IFRvdGFsIG9mICVkIHByb2Nlc3NvcnMgYWN0aXZhdGVkLlxuIiwgbnVtX29ubGluZV9jcHVzKCkpOworCWFwcGx5X2FsdGVybmF0aXZlc19hbGwoKTsKIH0KIAogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3N1c3BlbmQuYyBiL2FyY2gvYXJtNjQva2VybmVsL3N1c3BlbmQuYwppbmRleCAxM2FkNGRiLi4zNzcxYjcyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zdXNwZW5kLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc3VzcGVuZC5jCkBAIC0xMjYsOCArMTI2LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1leHRlcm4gc3RydWN0IHNsZWVwX3NhdmVfc3Agc2xlZXBfc2F2ZV9zcDsKLWV4dGVybiBwaHlzX2FkZHJfdCBzbGVlcF9pZG1hcF9waHlzOworc3RydWN0IHNsZWVwX3NhdmVfc3Agc2xlZXBfc2F2ZV9zcDsKK3BoeXNfYWRkcl90IHNsZWVwX2lkbWFwX3BoeXM7CiAKIHN0YXRpYyBpbnQgX19pbml0IGNwdV9zdXNwZW5kX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3N5c19jb21wYXQuYyBiL2FyY2gvYXJtNjQva2VybmVsL3N5c19jb21wYXQuYwppbmRleCBkYzQ3ZTUzLi4yOGM1MTFiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zeXNfY29tcGF0LmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc3lzX2NvbXBhdC5jCkBAIC0yOCwyOSArMjgsMzkgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotc3RhdGljIGlubGluZSB2b2lkCi1kb19jb21wYXRfY2FjaGVfb3AodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGludCBmbGFncykKK3N0YXRpYyBsb25nCitfX2RvX2NvbXBhdF9jYWNoZV9vcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPmFjdGl2ZV9tbTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlsb25nIHJldDsKIAotCWlmIChlbmQgPCBzdGFydCB8fCBmbGFncykKLQkJcmV0dXJuOworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBjaHVuayA9IG1pbihQQUdFX1NJWkUsIGVuZCAtIHN0YXJ0KTsKIAotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOwotCWlmICh2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZCkgewotCQlpZiAoc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KQotCQkJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwotCQlpZiAoZW5kID4gdm1hLT52bV9lbmQpCi0JCQllbmQgPSB2bWEtPnZtX2VuZDsKLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJX19mbHVzaF9jYWNoZV91c2VyX3JhbmdlKHN0YXJ0ICYgUEFHRV9NQVNLLCBQQUdFX0FMSUdOKGVuZCkpOwotCQlyZXR1cm47Ci0JfQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAwOworCisJCXJldCA9IF9fZmx1c2hfY2FjaGVfdXNlcl9yYW5nZShzdGFydCwgc3RhcnQgKyBjaHVuayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWNvbmRfcmVzY2hlZCgpOworCQlzdGFydCArPSBjaHVuazsKKwl9IHdoaWxlIChzdGFydCA8IGVuZCk7CisKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBsb25nCitkb19jb21wYXRfY2FjaGVfb3AodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGludCBmbGFncykKK3sKKwlpZiAoZW5kIDwgc3RhcnQgfHwgZmxhZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHN0YXJ0LCBlbmQgLSBzdGFydCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIF9fZG9fY29tcGF0X2NhY2hlX29wKHN0YXJ0LCBlbmQpOworfQogLyoKICAqIEhhbmRsZSBhbGwgdW5yZWNvZ25pc2VkIHN5c3RlbSBjYWxscy4KICAqLwpAQCAtNzQsOCArODQsNyBAQAogCSAqIHRoZSBzcGVjaWZpZWQgcmVnaW9uKS4KIAkgKi8KIAljYXNlIF9fQVJNX05SX2NvbXBhdF9jYWNoZWZsdXNoOgotCQlkb19jb21wYXRfY2FjaGVfb3AocmVncy0+cmVnc1swXSwgcmVncy0+cmVnc1sxXSwgcmVncy0+cmVnc1syXSk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gZG9fY29tcGF0X2NhY2hlX29wKHJlZ3MtPnJlZ3NbMF0sIHJlZ3MtPnJlZ3NbMV0sIHJlZ3MtPnJlZ3NbMl0pOwogCiAJY2FzZSBfX0FSTV9OUl9jb21wYXRfc2V0X3RsczoKIAkJY3VycmVudC0+dGhyZWFkLnRwX3ZhbHVlID0gcmVncy0+cmVnc1swXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL2FybTY0L2tlcm5lbC90b3BvbG9neS5jCmluZGV4IGI2ZWUyNmIuLmZjYjhmN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMjU1LDEyICsyNTUsMTUgQEAKIAkJLyogTXVsdGlwcm9jZXNzb3Igc3lzdGVtIDogTXVsdGktdGhyZWFkcyBwZXIgY29yZSAqLwogCQljcHVpZF90b3BvLT50aHJlYWRfaWQgID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDApOwogCQljcHVpZF90b3BvLT5jb3JlX2lkICAgID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpOwotCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDIpOworCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDIpIHwKKwkJCQkJIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAzKSA8PCA4OwogCX0gZWxzZSB7CiAJCS8qIE11bHRpcHJvY2Vzc29yIHN5c3RlbSA6IFNpbmdsZS10aHJlYWQgcGVyIGNvcmUgKi8KIAkJY3B1aWRfdG9wby0+dGhyZWFkX2lkICA9IC0xOwogCQljcHVpZF90b3BvLT5jb3JlX2lkICAgID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDApOwotCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpOworCQljcHVpZF90b3BvLT5jbHVzdGVyX2lkID0gTVBJRFJfQUZGSU5JVFlfTEVWRUwobXBpZHIsIDEpIHwKKwkJCQkJIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAyKSA8PCA4IHwKKwkJCQkJIE1QSURSX0FGRklOSVRZX0xFVkVMKG1waWRyLCAzKSA8PCAxNjsKIAl9CiAKIAlwcl9kZWJ1ZygiQ1BVJXU6IGNsdXN0ZXIgJWQgY29yZSAlZCB0aHJlYWQgJWQgbXBpZHIgJSMwMTZsbHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC90cmFjZS1ldmVudHMtZW11bGF0aW9uLmggYi9hcmNoL2FybTY0L2tlcm5lbC90cmFjZS1ldmVudHMtZW11bGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxZGQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3RyYWNlLWV2ZW50cy1lbXVsYXRpb24uaApAQCAtMCwwICsxLDM1IEBACisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBlbXVsYXRpb24KKworI2lmICFkZWZpbmVkKF9UUkFDRV9FTVVMQVRJT05fSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1RSQUNFX0VNVUxBVElPTl9ICisKKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKK1RSQUNFX0VWRU5UKGluc3RydWN0aW9uX2VtdWxhdGlvbiwKKworCVRQX1BST1RPKGNvbnN0IGNoYXIgKmluc3RyLCB1NjQgYWRkciksCisJVFBfQVJHUyhpbnN0ciwgYWRkciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX3N0cmluZyhpbnN0ciwgaW5zdHIpCisJCV9fZmllbGQodTY0LCBhZGRyKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKGluc3RyLCBpbnN0cik7CisJCV9fZW50cnktPmFkZHIgPSBhZGRyOworCSksCisKKwlUUF9wcmludGsoImluc3RyPVwiJXNcIiBhZGRyPTB4JWxseCIsIF9fZ2V0X3N0cihpbnN0ciksIF9fZW50cnktPmFkZHIpCispOworCisjZW5kaWYgLyogX1RSQUNFX0VNVUxBVElPTl9IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSAorI3VuZGVmIFRSQUNFX0lOQ0xVREVfRklMRQorI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEggLgorCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSB0cmFjZS1ldmVudHMtZW11bGF0aW9uCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYwppbmRleCBkZTFiMDg1Li4wYTgwMWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMKQEAgLTI1OSw2ICsyNTksNjkgQEAKIAl9CiB9CiAKK3N0YXRpYyBMSVNUX0hFQUQodW5kZWZfaG9vayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyh1bmRlZl9sb2NrKTsKKwordm9pZCByZWdpc3Rlcl91bmRlZl9ob29rKHN0cnVjdCB1bmRlZl9ob29rICpob29rKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnVuZGVmX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmaG9vay0+bm9kZSwgJnVuZGVmX2hvb2spOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bmRlZl9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgdW5yZWdpc3Rlcl91bmRlZl9ob29rKHN0cnVjdCB1bmRlZl9ob29rICpob29rKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnVuZGVmX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmaG9vay0+bm9kZSk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVuZGVmX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjYWxsX3VuZGVmX2hvb2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVuZGVmX2hvb2sgKmhvb2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaW5zdHI7CisJaW50ICgqZm4pKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgaW5zdHIpID0gTlVMTDsKKwl2b2lkIF9fdXNlciAqcGMgPSAodm9pZCBfX3VzZXIgKilpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCXJldHVybiAxOworCisJaWYgKGNvbXBhdF90aHVtYl9tb2RlKHJlZ3MpKSB7CisJCS8qIDE2LWJpdCBUaHVtYiBpbnN0cnVjdGlvbiAqLworCQlpZiAoZ2V0X3VzZXIoaW5zdHIsICh1MTYgX191c2VyICopcGMpKQorCQkJZ290byBleGl0OworCQlpbnN0ciA9IGxlMTZfdG9fY3B1KGluc3RyKTsKKwkJaWYgKGFhcmNoMzJfaW5zbl9pc193aWRlKGluc3RyKSkgeworCQkJdTMyIGluc3RyMjsKKworCQkJaWYgKGdldF91c2VyKGluc3RyMiwgKHUxNiBfX3VzZXIgKikocGMgKyAyKSkpCisJCQkJZ290byBleGl0OworCQkJaW5zdHIyID0gbGUxNl90b19jcHUoaW5zdHIyKTsKKwkJCWluc3RyID0gKGluc3RyIDw8IDE2KSB8IGluc3RyMjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIDMyLWJpdCBBUk0gaW5zdHJ1Y3Rpb24gKi8KKwkJaWYgKGdldF91c2VyKGluc3RyLCAodTMyIF9fdXNlciAqKXBjKSkKKwkJCWdvdG8gZXhpdDsKKwkJaW5zdHIgPSBsZTMyX3RvX2NwdShpbnN0cik7CisJfQorCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ1bmRlZl9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCAmdW5kZWZfaG9vaywgbm9kZSkKKwkJaWYgKChpbnN0ciAmIGhvb2stPmluc3RyX21hc2spID09IGhvb2stPmluc3RyX3ZhbCAmJgorCQkJKHJlZ3MtPnBzdGF0ZSAmIGhvb2stPnBzdGF0ZV9tYXNrKSA9PSBob29rLT5wc3RhdGVfdmFsKQorCQkJZm4gPSBob29rLT5mbjsKKworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bmRlZl9sb2NrLCBmbGFncyk7CitleGl0OgorCXJldHVybiBmbiA/IGZuKHJlZ3MsIGluc3RyKSA6IDE7Cit9CisKIGFzbWxpbmthZ2Ugdm9pZCBfX2V4Y2VwdGlvbiBkb191bmRlZmluc3RyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXNpZ2luZm9fdCBpbmZvOwpAQCAtMjY4LDYgKzMzMSw5IEBACiAJaWYgKCFhYXJjaDMyX2JyZWFrX2hhbmRsZXIocmVncykpCiAJCXJldHVybjsKIAorCWlmIChjYWxsX3VuZGVmX2hvb2socmVncykgPT0gMCkKKwkJcmV0dXJuOworCiAJaWYgKHNob3dfdW5oYW5kbGVkX3NpZ25hbHMgJiYgdW5oYW5kbGVkX3NpZ25hbChjdXJyZW50LCBTSUdJTEwpICYmCiAJICAgIHByaW50a19yYXRlbGltaXQoKSkgewogCQlwcl9pbmZvKCIlc1slZF06IHVuZGVmaW5lZCBpbnN0cnVjdGlvbjogcGM9JXBcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm02NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBlZGY4NzE1Li45OTY1ZWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTExLDggKzExLDkgQEAKIAogI2luY2x1ZGUgImltYWdlLmgiCiAKLSNkZWZpbmUgQVJNX0VYSVRfS0VFUCh4KQotI2RlZmluZSBBUk1fRVhJVF9ESVNDQVJEKHgpCXgKKy8qIC5leGl0LnRleHQgbmVlZGVkIGluIGNhc2Ugb2YgYWx0ZXJuYXRpdmUgcGF0Y2hpbmcgKi8KKyNkZWZpbmUgQVJNX0VYSVRfS0VFUCh4KQl4CisjZGVmaW5lIEFSTV9FWElUX0RJU0NBUkQoeCkKIAogT1VUUFVUX0FSQ0goYWFyY2g2NCkKIEVOVFJZKF90ZXh0KQpAQCAtMzIsNiArMzMsMjIgQEAKIAkqKC5oeXAudGV4dCkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX2h5cF90ZXh0X2VuZCkgPSAuOwogCisvKgorICogVGhlIHNpemUgb2YgdGhlIFBFL0NPRkYgc2VjdGlvbiB0aGF0IGNvdmVycyB0aGUga2VybmVsIGltYWdlLCB3aGljaAorICogcnVucyBmcm9tIHN0ZXh0IHRvIF9lZGF0YSwgbXVzdCBiZSBhIHJvdW5kIG11bHRpcGxlIG9mIHRoZSBQRS9DT0ZGCisgKiBGaWxlQWxpZ25tZW50LCB3aGljaCB3ZSBzZXQgdG8gaXRzIG1pbmltdW0gdmFsdWUgb2YgMHgyMDAuICdzdGV4dCcKKyAqIGl0c2VsZiBpcyA0IEtCIGFsaWduZWQsIHNvIHBhZGRpbmcgb3V0IF9lZGF0YSB0byBhIDB4MjAwIGFsaWduZWQKKyAqIGJvdW5kYXJ5IHNob3VsZCBiZSBzdWZmaWNpZW50LgorICovCitQRUNPRkZfRklMRV9BTElHTk1FTlQgPSAweDIwMDsKKworI2lmZGVmIENPTkZJR19FRkkKKyNkZWZpbmUgUEVDT0ZGX0VEQVRBX1BBRERJTkcJXAorCS5wZWNvZmZfZWRhdGFfcGFkZGluZyA6IHsgQllURSgwKTsgLiA9IEFMSUdOKFBFQ09GRl9GSUxFX0FMSUdOTUVOVCk7IH0KKyNlbHNlCisjZGVmaW5lIFBFQ09GRl9FREFUQV9QQURESU5HCisjZW5kaWYKKwogU0VDVElPTlMKIHsKIAkvKgpAQCAtMTAwLDkgKzExNywyMSBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9faW5pdF9lbmQgPSAuOwogCisJLiA9IEFMSUdOKDQpOworCS5hbHRpbnN0cnVjdGlvbnMgOiB7CisJCV9fYWx0X2luc3RydWN0aW9ucyA9IC47CisJCSooLmFsdGluc3RydWN0aW9ucykKKwkJX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCA9IC47CisJfQorCS5hbHRpbnN0cl9yZXBsYWNlbWVudCA6IHsKKwkJKiguYWx0aW5zdHJfcmVwbGFjZW1lbnQpCisJfQorCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX2RhdGEgPSAuOwogCV9zZGF0YSA9IC47CiAJUldfREFUQV9TRUNUSU9OKDY0LCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQorCVBFQ09GRl9FREFUQV9QQURESU5HCiAJX2VkYXRhID0gLjsKIAogCUJTU19TRUNUSU9OKDAsIDAsIDApCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAuUyBiL2FyY2gvYXJtNjQva3ZtL2h5cC5TCmluZGV4IGI3MmFhOWYuLmZiZTkwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC5TCisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC5TCkBAIC03NjEsMTAgKzc2MSwxMCBAQAogLm1hY3JvIGFjdGl2YXRlX3RyYXBzCiAJbGRyICAgICB4MiwgW3gwLCAjVkNQVV9IQ1JfRUwyXQogCW1zciAgICAgaGNyX2VsMiwgeDIKLQlsZHIJeDIsID0oQ1BUUl9FTDJfVFRBKQorCW1vdgl4MiwgI0NQVFJfRUwyX1RUQQogCW1zcgljcHRyX2VsMiwgeDIKIAotCWxkcgl4MiwgPSgxIDw8IDE1KQkvLyBUcmFwIENQMTUgQ3I9MTUKKwltb3YJeDIsICMoMSA8PCAxNSkJLy8gVHJhcCBDUDE1IENyPTE1CiAJbXNyCWhzdHJfZWwyLCB4MgogCiAJbXJzCXgyLCBtZGNyX2VsMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvbW0vTWFrZWZpbGUKaW5kZXggYzU2MTc5ZS4uNzczZDM3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L21tL01ha2VmaWxlCkBAIC0zLDMgKzMsNCBAQAogCQkJCSAgIGlvcmVtYXAubyBtbWFwLm8gcGdkLm8gbW11Lm8gXAogCQkJCSAgIGNvbnRleHQubyBwcm9jLm8gcGFnZWF0dHIubwogb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkJKz0gaHVnZXRsYnBhZ2Uubworb2JqLSQoQ09ORklHX0FSTTY0X1BURFVNUCkJKz0gZHVtcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2NhY2hlLlMgYi9hcmNoL2FybTY0L21tL2NhY2hlLlMKaW5kZXggMjM2NjM4My4uMjU2MGUxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9jYWNoZS5TCisrKyBiL2FyY2gvYXJtNjQvbW0vY2FjaGUuUwpAQCAtMTcsOSArMTcsMTIgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgogCiAjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKIApAQCAtMTM4LDkgKzE0MSwxMiBAQAogCWFkZAl4NCwgeDQsIHgyCiAJY21wCXg0LCB4MQogCWIubG8JMWIKLTk6CQkJCQkJLy8gaWdub3JlIGFueSBmYXVsdGluZyBjYWNoZSBvcGVyYXRpb24KIAlkc2IJaXNoCiAJaXNiCisJbW92CXgwLCAjMAorCXJldAorOToKKwltb3YJeDAsICMtRUZBVUxUCiAJcmV0CiBFTkRQUk9DKGZsdXNoX2ljYWNoZV9yYW5nZSkKIEVORFBST0MoX19mbHVzaF9jYWNoZV91c2VyX3JhbmdlKQpAQCAtMjEwLDcgKzIxNiw3IEBACiAJZGNhY2hlX2xpbmVfc2l6ZSB4MiwgeDMKIAlzdWIJeDMsIHgyLCAjMQogCWJpYwl4MCwgeDAsIHgzCi0xOglkYwljdmFjLCB4MAkJCS8vIGNsZWFuIEQgLyBVIGxpbmUKKzE6CWFsdGVybmF0aXZlX2luc24gImRjIGN2YWMsIHgwIiwgImRjIGNpdmFjLCB4MCIsIEFSTTY0X1dPUktBUk9VTkRfQ0xFQU5fQ0FDSEUKIAlhZGQJeDAsIHgwLCB4MgogCWNtcAl4MCwgeDEKIAliLmxvCTFiCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2R1bXAuYyBiL2FyY2gvYXJtNjQvbW0vZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNjk2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L21tL2R1bXAuYwpAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBEZWJ1ZyBoZWxwZXIgdG8gZHVtcCB0aGUgY3VycmVudCBrZXJuZWwgcGFnZXRhYmxlcyBvZiB0aGUgc3lzdGVtCisgKiBzbyB0aGF0IHdlIGNhbiBzZWUgd2hhdCB0aGUgdmFyaW91cyBtZW1vcnkgcmFuZ2VzIGFyZSBzZXQgdG8uCisgKgorICogRGVyaXZlZCBmcm9tIHg4NiBhbmQgYXJtIGltcGxlbWVudGF0aW9uOgorICogKEMpIENvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yOiBBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBsaW51eC5pbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworI2RlZmluZSBMT1dFU1RfQUREUgkoVUwoMHhmZmZmZmZmZmZmZmZmZmZmKSA8PCBWQV9CSVRTKQorCitzdHJ1Y3QgYWRkcl9tYXJrZXIgeworCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzczsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworZW51bSBhZGRyZXNzX21hcmtlcnNfaWR4IHsKKwlWTUFMTE9DX1NUQVJUX05SID0gMCwKKwlWTUFMTE9DX0VORF9OUiwKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKKwlWTUVNTUFQX1NUQVJUX05SLAorCVZNRU1NQVBfRU5EX05SLAorI2VuZGlmCisJUENJX1NUQVJUX05SLAorCVBDSV9FTkRfTlIsCisJRklYQUREUl9TVEFSVF9OUiwKKwlGSVhBRERSX0VORF9OUiwKKwlNT0RVTEVTX1NUQVJUX05SLAorCU1PRFVFTFNfRU5EX05SLAorCUtFUk5FTF9TUEFDRV9OUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYWRkcl9tYXJrZXIgYWRkcmVzc19tYXJrZXJzW10gPSB7CisJeyBWTUFMTE9DX1NUQVJULAkidm1hbGxvYygpIEFyZWEiIH0sCisJeyBWTUFMTE9DX0VORCwJCSJ2bWFsbG9jKCkgRW5kIiB9LAorI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUAorCXsgMCwJCQkidm1lbW1hcCBzdGFydCIgfSwKKwl7IDAsCQkJInZtZW1tYXAgZW5kIiB9LAorI2VuZGlmCisJeyAodW5zaWduZWQgbG9uZykgUENJX0lPQkFTRSwJCSJQQ0kgSS9PIHN0YXJ0IiB9LAorCXsgKHVuc2lnbmVkIGxvbmcpIFBDSV9JT0JBU0UgKyBTWl8xNk0sCSJQQ0kgSS9PIGVuZCIgfSwKKwl7IEZJWEFERFJfU1RBUlQsCSJGaXhtYXAgc3RhcnQiIH0sCisJeyBGSVhBRERSX1RPUCwJCSJGaXhtYXAgZW5kIiB9LAorCXsgTU9EVUxFU19WQUREUiwJIk1vZHVsZXMgc3RhcnQiIH0sCisJeyBNT0RVTEVTX0VORCwJCSJNb2R1bGVzIGVuZCIgfSwKKwl7IFBBR0VfT0ZGU0VULAkJIktlcm5lbCBNYXBwaW5nIiB9LAorCXsgLTEsCQkJTlVMTCB9LAorfTsKKworc3RydWN0IHBnX3N0YXRlIHsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKKwljb25zdCBzdHJ1Y3QgYWRkcl9tYXJrZXIgKm1hcmtlcjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3M7CisJdW5zaWduZWQgbGV2ZWw7CisJdTY0IGN1cnJlbnRfcHJvdDsKK307CisKK3N0cnVjdCBwcm90X2JpdHMgeworCXU2NAkJbWFzazsKKwl1NjQJCXZhbDsKKwljb25zdCBjaGFyCSpzZXQ7CisJY29uc3QgY2hhcgkqY2xlYXI7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RfYml0cyBwdGVfYml0c1tdID0geworCXsKKwkJLm1hc2sJPSBQVEVfVVNFUiwKKwkJLnZhbAk9IFBURV9VU0VSLAorCQkuc2V0CT0gIlVTUiIsCisJCS5jbGVhcgk9ICIgICAiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfUkRPTkxZLAorCQkudmFsCT0gUFRFX1JET05MWSwKKwkJLnNldAk9ICJybyIsCisJCS5jbGVhcgk9ICJSVyIsCisJfSwgeworCQkubWFzawk9IFBURV9QWE4sCisJCS52YWwJPSBQVEVfUFhOLAorCQkuc2V0CT0gIk5YIiwKKwkJLmNsZWFyCT0gInggIiwKKwl9LCB7CisJCS5tYXNrCT0gUFRFX1NIQVJFRCwKKwkJLnZhbAk9IFBURV9TSEFSRUQsCisJCS5zZXQJPSAiU0hEIiwKKwkJLmNsZWFyCT0gIiAgICIsCisJfSwgeworCQkubWFzawk9IFBURV9BRiwKKwkJLnZhbAk9IFBURV9BRiwKKwkJLnNldAk9ICJBRiIsCisJCS5jbGVhcgk9ICIgICIsCisJfSwgeworCQkubWFzawk9IFBURV9ORywKKwkJLnZhbAk9IFBURV9ORywKKwkJLnNldAk9ICJORyIsCisJCS5jbGVhcgk9ICIgICIsCisJfSwgeworCQkubWFzawk9IFBURV9VWE4sCisJCS52YWwJPSBQVEVfVVhOLAorCQkuc2V0CT0gIlVYTiIsCisJfSwgeworCQkubWFzawk9IFBURV9BVFRSSU5EWF9NQVNLLAorCQkudmFsCT0gUFRFX0FUVFJJTkRYKE1UX0RFVklDRV9uR25SbkUpLAorCQkuc2V0CT0gIkRFVklDRS9uR25SbkUiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfQVRUUklORFhfTUFTSywKKwkJLnZhbAk9IFBURV9BVFRSSU5EWChNVF9ERVZJQ0VfbkduUkUpLAorCQkuc2V0CT0gIkRFVklDRS9uR25SRSIsCisJfSwgeworCQkubWFzawk9IFBURV9BVFRSSU5EWF9NQVNLLAorCQkudmFsCT0gUFRFX0FUVFJJTkRYKE1UX0RFVklDRV9HUkUpLAorCQkuc2V0CT0gIkRFVklDRS9HUkUiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfQVRUUklORFhfTUFTSywKKwkJLnZhbAk9IFBURV9BVFRSSU5EWChNVF9OT1JNQUxfTkMpLAorCQkuc2V0CT0gIk1FTS9OT1JNQUwtTkMiLAorCX0sIHsKKwkJLm1hc2sJPSBQVEVfQVRUUklORFhfTUFTSywKKwkJLnZhbAk9IFBURV9BVFRSSU5EWChNVF9OT1JNQUwpLAorCQkuc2V0CT0gIk1FTS9OT1JNQUwiLAorCX0KK307CisKK3N0cnVjdCBwZ19sZXZlbCB7CisJY29uc3Qgc3RydWN0IHByb3RfYml0cyAqYml0czsKKwlzaXplX3QgbnVtOworCXU2NCBtYXNrOworfTsKKworc3RhdGljIHN0cnVjdCBwZ19sZXZlbCBwZ19sZXZlbFtdID0geworCXsKKwl9LCB7IC8qIHBnZCAqLworCQkuYml0cwk9IHB0ZV9iaXRzLAorCQkubnVtCT0gQVJSQVlfU0laRShwdGVfYml0cyksCisJfSwgeyAvKiBwdWQgKi8KKwkJLmJpdHMJPSBwdGVfYml0cywKKwkJLm51bQk9IEFSUkFZX1NJWkUocHRlX2JpdHMpLAorCX0sIHsgLyogcG1kICovCisJCS5iaXRzCT0gcHRlX2JpdHMsCisJCS5udW0JPSBBUlJBWV9TSVpFKHB0ZV9iaXRzKSwKKwl9LCB7IC8qIHB0ZSAqLworCQkuYml0cwk9IHB0ZV9iaXRzLAorCQkubnVtCT0gQVJSQVlfU0laRShwdGVfYml0cyksCisJfSwKK307CisKK3N0YXRpYyB2b2lkIGR1bXBfcHJvdChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBjb25zdCBzdHJ1Y3QgcHJvdF9iaXRzICpiaXRzLAorCQkJc2l6ZV90IG51bSkKK3sKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrLCBiaXRzKyspIHsKKwkJY29uc3QgY2hhciAqczsKKworCQlpZiAoKHN0LT5jdXJyZW50X3Byb3QgJiBiaXRzLT5tYXNrKSA9PSBiaXRzLT52YWwpCisJCQlzID0gYml0cy0+c2V0OworCQllbHNlCisJCQlzID0gYml0cy0+Y2xlYXI7CisKKwkJaWYgKHMpCisJCQlzZXFfcHJpbnRmKHN0LT5zZXEsICIgJXMiLCBzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5vdGVfcGFnZShzdHJ1Y3QgcGdfc3RhdGUgKnN0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxldmVsLAorCQkJCXU2NCB2YWwpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgdW5pdHNbXSA9ICJLTUdUUEUiOworCXU2NCBwcm90ID0gdmFsICYgcGdfbGV2ZWxbbGV2ZWxdLm1hc2s7CisKKwlpZiAoYWRkciA8IExPV0VTVF9BRERSKQorCQlyZXR1cm47CisKKwlpZiAoIXN0LT5sZXZlbCkgeworCQlzdC0+bGV2ZWwgPSBsZXZlbDsKKwkJc3QtPmN1cnJlbnRfcHJvdCA9IHByb3Q7CisJCXN0LT5zdGFydF9hZGRyZXNzID0gYWRkcjsKKwkJc2VxX3ByaW50ZihzdC0+c2VxLCAiLS0tWyAlcyBdLS0tXG4iLCBzdC0+bWFya2VyLT5uYW1lKTsKKwl9IGVsc2UgaWYgKHByb3QgIT0gc3QtPmN1cnJlbnRfcHJvdCB8fCBsZXZlbCAhPSBzdC0+bGV2ZWwgfHwKKwkJICAgYWRkciA+PSBzdC0+bWFya2VyWzFdLnN0YXJ0X2FkZHJlc3MpIHsKKwkJY29uc3QgY2hhciAqdW5pdCA9IHVuaXRzOworCQl1bnNpZ25lZCBsb25nIGRlbHRhOworCisJCWlmIChzdC0+Y3VycmVudF9wcm90KSB7CisJCQlzZXFfcHJpbnRmKHN0LT5zZXEsICIweCUxNmx4LTB4JTE2bHggICAiLAorCQkJCSAgIHN0LT5zdGFydF9hZGRyZXNzLCBhZGRyKTsKKworCQkJZGVsdGEgPSAoYWRkciAtIHN0LT5zdGFydF9hZGRyZXNzKSA+PiAxMDsKKwkJCXdoaWxlICghKGRlbHRhICYgMTAyMykgJiYgdW5pdFsxXSkgeworCQkJCWRlbHRhID4+PSAxMDsKKwkJCQl1bml0Kys7CisJCQl9CisJCQlzZXFfcHJpbnRmKHN0LT5zZXEsICIlOWx1JWMiLCBkZWx0YSwgKnVuaXQpOworCQkJaWYgKHBnX2xldmVsW3N0LT5sZXZlbF0uYml0cykKKwkJCQlkdW1wX3Byb3Qoc3QsIHBnX2xldmVsW3N0LT5sZXZlbF0uYml0cywKKwkJCQkJICBwZ19sZXZlbFtzdC0+bGV2ZWxdLm51bSk7CisJCQlzZXFfcHV0cyhzdC0+c2VxLCAiXG4iKTsKKwkJfQorCisJCWlmIChhZGRyID49IHN0LT5tYXJrZXJbMV0uc3RhcnRfYWRkcmVzcykgeworCQkJc3QtPm1hcmtlcisrOworCQkJc2VxX3ByaW50ZihzdC0+c2VxLCAiLS0tWyAlcyBdLS0tXG4iLCBzdC0+bWFya2VyLT5uYW1lKTsKKwkJfQorCisJCXN0LT5zdGFydF9hZGRyZXNzID0gYWRkcjsKKwkJc3QtPmN1cnJlbnRfcHJvdCA9IHByb3Q7CisJCXN0LT5sZXZlbCA9IGxldmVsOworCX0KKworCWlmIChhZGRyID49IHN0LT5tYXJrZXJbMV0uc3RhcnRfYWRkcmVzcykgeworCQlzdC0+bWFya2VyKys7CisJCXNlcV9wcmludGYoc3QtPnNlcSwgIi0tLVsgJXMgXS0tLVxuIiwgc3QtPm1hcmtlci0+bmFtZSk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIHdhbGtfcHRlKHN0cnVjdCBwZ19zdGF0ZSAqc3QsIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQpCit7CisJcHRlX3QgKnB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgMCk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUFRFOyBpKyssIHB0ZSsrKSB7CisJCWFkZHIgPSBzdGFydCArIGkgKiBQQUdFX1NJWkU7CisJCW5vdGVfcGFnZShzdCwgYWRkciwgNCwgcHRlX3ZhbCgqcHRlKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3YWxrX3BtZChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQoreworCXBtZF90ICpwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgMCk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUE1EOyBpKyssIHBtZCsrKSB7CisJCWFkZHIgPSBzdGFydCArIGkgKiBQTURfU0laRTsKKwkJaWYgKHBtZF9ub25lKCpwbWQpIHx8IHBtZF9zZWN0KCpwbWQpIHx8IHBtZF9iYWQoKnBtZCkpCisJCQlub3RlX3BhZ2Uoc3QsIGFkZHIsIDMsIHBtZF92YWwoKnBtZCkpOworCQllbHNlCisJCQl3YWxrX3B0ZShzdCwgcG1kLCBhZGRyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdhbGtfcHVkKHN0cnVjdCBwZ19zdGF0ZSAqc3QsIHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgc3RhcnQpCit7CisJcHVkX3QgKnB1ZCA9IHB1ZF9vZmZzZXQocGdkLCAwKTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVUQ7IGkrKywgcHVkKyspIHsKKwkJYWRkciA9IHN0YXJ0ICsgaSAqIFBVRF9TSVpFOworCQlpZiAocHVkX25vbmUoKnB1ZCkgfHwgcHVkX3NlY3QoKnB1ZCkgfHwgcHVkX2JhZCgqcHVkKSkKKwkJCW5vdGVfcGFnZShzdCwgYWRkciwgMiwgcHVkX3ZhbCgqcHVkKSk7CisJCWVsc2UKKwkJCXdhbGtfcG1kKHN0LCBwdWQsIGFkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgd2Fsa19wZ2Qoc3RydWN0IHBnX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQpCit7CisJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXQobW0sIDApOworCXVuc2lnbmVkIGk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BHRDsgaSsrLCBwZ2QrKykgeworCQlhZGRyID0gc3RhcnQgKyBpICogUEdESVJfU0laRTsKKwkJaWYgKHBnZF9ub25lKCpwZ2QpIHx8IHBnZF9iYWQoKnBnZCkpCisJCQlub3RlX3BhZ2Uoc3QsIGFkZHIsIDEsIHBnZF92YWwoKnBnZCkpOworCQllbHNlCisJCQl3YWxrX3B1ZChzdCwgcGdkLCBhZGRyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBwZ19zdGF0ZSBzdCA9IHsKKwkJLnNlcSA9IG0sCisJCS5tYXJrZXIgPSBhZGRyZXNzX21hcmtlcnMsCisJfTsKKworCXdhbGtfcGdkKCZzdCwgJmluaXRfbW0sIExPV0VTVF9BRERSKTsKKworCW5vdGVfcGFnZSgmc3QsIDAsIDAsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB0ZHVtcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwdGR1bXBfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB0ZHVtcF9mb3BzID0geworCS5vcGVuCQk9IHB0ZHVtcF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHB0ZHVtcF9pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqcGU7CisJdW5zaWduZWQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBnX2xldmVsKTsgaSsrKQorCQlpZiAocGdfbGV2ZWxbaV0uYml0cykKKwkJCWZvciAoaiA9IDA7IGogPCBwZ19sZXZlbFtpXS5udW07IGorKykKKwkJCQlwZ19sZXZlbFtpXS5tYXNrIHw9IHBnX2xldmVsW2ldLmJpdHNbal0ubWFzazsKKworCWFkZHJlc3NfbWFya2Vyc1tWTUVNTUFQX1NUQVJUX05SXS5zdGFydF9hZGRyZXNzID0KKwkJCQkodW5zaWduZWQgbG9uZyl2aXJ0X3RvX3BhZ2UoUEFHRV9PRkZTRVQpOworCWFkZHJlc3NfbWFya2Vyc1tWTUVNTUFQX0VORF9OUl0uc3RhcnRfYWRkcmVzcyA9CisJCQkJKHVuc2lnbmVkIGxvbmcpdmlydF90b19wYWdlKGhpZ2hfbWVtb3J5KTsKKworCXBlID0gZGVidWdmc19jcmVhdGVfZmlsZSgia2VybmVsX3BhZ2VfdGFibGVzIiwgMDQwMCwgTlVMTCwgTlVMTCwKKwkJCQkgJnB0ZHVtcF9mb3BzKTsKKwlyZXR1cm4gcGUgPyAwIDogLUVOT01FTTsKK30KK2RldmljZV9pbml0Y2FsbChwdGR1bXBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmMKaW5kZXggNDFjYjZkMy4uYzExY2QyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJImxldmVsIDEgYWRkcmVzcyBzaXplIGZhdWx0Igl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJsZXZlbCAyIGFkZHJlc3Mgc2l6ZSBmYXVsdCIJfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkibGV2ZWwgMyBhZGRyZXNzIHNpemUgZmF1bHQiCX0sCi0JeyBkb190cmFuc2xhdGlvbl9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJpbnB1dCBhZGRyZXNzIHJhbmdlIGZhdWx0Igl9LAorCXsgZG9fdHJhbnNsYXRpb25fZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkibGV2ZWwgMCB0cmFuc2xhdGlvbiBmYXVsdCIJfSwKIAl7IGRvX3RyYW5zbGF0aW9uX2ZhdWx0LAlTSUdTRUdWLCBTRUdWX01BUEVSUiwJImxldmVsIDEgdHJhbnNsYXRpb24gZmF1bHQiCX0sCiAJeyBkb190cmFuc2xhdGlvbl9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJsZXZlbCAyIHRyYW5zbGF0aW9uIGZhdWx0Igl9LAogCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJsZXZlbCAzIHRyYW5zbGF0aW9uIGZhdWx0Igl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuYwppbmRleCA0OTQyOTdjLi5iYWM0OTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2luaXQuYworKysgYi9hcmNoL2FybTY0L21tL2luaXQuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KIAogI2luY2x1ZGUgIm1tLmgiCiAKQEAgLTMyNSw2ICszMjYsNyBAQAogdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKIHsKIAlmcmVlX2luaXRtZW1fZGVmYXVsdCgwKTsKKwlmcmVlX2FsdGVybmF0aXZlc19tZW1vcnkoKTsKIH0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pb3JlbWFwLmMgYi9hcmNoL2FybTY0L21tL2lvcmVtYXAuYwppbmRleCA0YTA3NjMwLi5jYmI5OWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2lvcmVtYXAuYworKysgYi9hcmNoL2FybTY0L21tL2lvcmVtYXAuYwpAQCAtMTAzLDk3ICsxMDMsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woaW9yZW1hcF9jYWNoZSk7CiAKLXN0YXRpYyBwdGVfdCBibV9wdGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZF9ic3M7Ci0jaWYgQ09ORklHX0FSTTY0X1BHVEFCTEVfTEVWRUxTID4gMgotc3RhdGljIHBtZF90IGJtX3BtZFtQVFJTX1BFUl9QTURdIF9fcGFnZV9hbGlnbmVkX2JzczsKLSNlbmRpZgotI2lmIENPTkZJR19BUk02NF9QR1RBQkxFX0xFVkVMUyA+IDMKLXN0YXRpYyBwdWRfdCBibV9wdWRbUFRSU19QRVJfUFVEXSBfX3BhZ2VfYWxpZ25lZF9ic3M7Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSBwdWRfdCAqIF9faW5pdCBlYXJseV9pb3JlbWFwX3B1ZCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcGdkX3QgKnBnZDsKLQotCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKLQlCVUdfT04ocGdkX25vbmUoKnBnZCkgfHwgcGdkX2JhZCgqcGdkKSk7Ci0KLQlyZXR1cm4gcHVkX29mZnNldChwZ2QsIGFkZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHBtZF90ICogX19pbml0IGVhcmx5X2lvcmVtYXBfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlwdWRfdCAqcHVkID0gZWFybHlfaW9yZW1hcF9wdWQoYWRkcik7Ci0KLQlCVUdfT04ocHVkX25vbmUoKnB1ZCkgfHwgcHVkX2JhZCgqcHVkKSk7Ci0KLQlyZXR1cm4gcG1kX29mZnNldChwdWQsIGFkZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90ICogX19pbml0IGVhcmx5X2lvcmVtYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlwbWRfdCAqcG1kID0gZWFybHlfaW9yZW1hcF9wbWQoYWRkcik7Ci0KLQlCVUdfT04ocG1kX25vbmUoKnBtZCkgfHwgcG1kX2JhZCgqcG1kKSk7Ci0KLQlyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKLX0KLQorLyoKKyAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIGVhcmx5X2ZpeG1hcF9pbml0CisgKi8KIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfaW5pdCh2b2lkKQogewotCXBnZF90ICpwZ2Q7Ci0JcHVkX3QgKnB1ZDsKLQlwbWRfdCAqcG1kOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IGZpeF90b192aXJ0KEZJWF9CVE1BUF9CRUdJTik7Ci0KLQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7Ci0JcGdkX3BvcHVsYXRlKCZpbml0X21tLCBwZ2QsIGJtX3B1ZCk7Ci0JcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOwotCXB1ZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcHVkLCBibV9wbWQpOwotCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKLQlwbWRfcG9wdWxhdGVfa2VybmVsKCZpbml0X21tLCBwbWQsIGJtX3B0ZSk7Ci0KLQkvKgotCSAqIFRoZSBib290LWlvcmVtYXAgcmFuZ2Ugc3BhbnMgbXVsdGlwbGUgcG1kcywgZm9yIHdoaWNoCi0JICogd2UgYXJlIG5vdCBwcmVwYXJlZDoKLQkgKi8KLQlCVUlMRF9CVUdfT04oKF9fZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSA+PiBQTURfU0hJRlQpCi0JCSAgICAgIT0gKF9fZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkgPj4gUE1EX1NISUZUKSk7Ci0KLQlpZiAocG1kICE9IGVhcmx5X2lvcmVtYXBfcG1kKGZpeF90b192aXJ0KEZJWF9CVE1BUF9FTkQpKSkgewotCQlXQVJOX09OKDEpOwotCQlwcl93YXJuKCJwbWQgJXAgIT0gJXBcbiIsCi0JCQlwbWQsIGVhcmx5X2lvcmVtYXBfcG1kKGZpeF90b192aXJ0KEZJWF9CVE1BUF9FTkQpKSk7Ci0JCXByX3dhcm4oImZpeF90b192aXJ0KEZJWF9CVE1BUF9CRUdJTik6ICUwOGx4XG4iLAotCQkJZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSk7Ci0JCXByX3dhcm4oImZpeF90b192aXJ0KEZJWF9CVE1BUF9FTkQpOiAgICUwOGx4XG4iLAotCQkJZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkpOwotCi0JCXByX3dhcm4oIkZJWF9CVE1BUF9FTkQ6ICAgICAgICVkXG4iLCBGSVhfQlRNQVBfRU5EKTsKLQkJcHJfd2FybigiRklYX0JUTUFQX0JFR0lOOiAgICAgJWRcbiIsCi0JCQlGSVhfQlRNQVBfQkVHSU4pOwotCX0KLQogCWVhcmx5X2lvcmVtYXBfc2V0dXAoKTsKIH0KLQotdm9pZCBfX2luaXQgX19lYXJseV9zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKLQkJCSAgICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBmbGFncykKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBfX2ZpeF90b192aXJ0KGlkeCk7Ci0JcHRlX3QgKnB0ZTsKLQotCWlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzKSB7Ci0JCUJVRygpOwotCQlyZXR1cm47Ci0JfQotCi0JcHRlID0gZWFybHlfaW9yZW1hcF9wdGUoYWRkcik7Ci0KLQlpZiAocGdwcm90X3ZhbChmbGFncykpCi0JCXNldF9wdGUocHRlLCBwZm5fcHRlKHBoeXMgPj4gUEFHRV9TSElGVCwgZmxhZ3MpKTsKLQllbHNlIHsKLQkJcHRlX2NsZWFyKCZpbml0X21tLCBhZGRyLCBwdGUpOwotCQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIrUEFHRV9TSVpFKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tLmggYi9hcmNoL2FybTY0L21tL21tLmgKaW5kZXggZDUxOWY0Zi4uNTBjMzM1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9tbS5oCisrKyBiL2FyY2gvYXJtNjQvbW0vbW0uaApAQCAtMSwyICsxIEBACiBleHRlcm4gdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IGFybTY0X3N3aW90bGJfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW1hcC5jIGIvYXJjaC9hcm02NC9tbS9tbWFwLmMKaW5kZXggMWQ3MzY2Mi4uNTQ5MjJkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9tbWFwLmMKKysrIGIvYXJjaC9hcm02NC9tbS9tbWFwLmMKQEAgLTQ3LDIyICs0NywxNCBAQAogCXJldHVybiBzeXNjdGxfbGVnYWN5X3ZhX2xheW91dDsKIH0KIAotLyoKLSAqIFNpbmNlIGdldF9yYW5kb21faW50KCkgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSB3aXRoaW4gYSAxIGppZmZ5IHdpbmRvdywgd2UKLSAqIHdpbGwgYWxtb3N0IGFsd2F5cyBnZXQgdGhlIHNhbWUgcmFuZG9taXNhdGlvbiBmb3IgdGhlIHN0YWNrIGFuZCBtbWFwCi0gKiByZWdpb24uIFRoaXMgd2lsbCBtZWFuIHRoZSByZWxhdGl2ZSBkaXN0YW5jZSBiZXR3ZWVuIHN0YWNrIGFuZCBtbWFwIHdpbGwgYmUKLSAqIHRoZSBzYW1lLgotICoKLSAqIFRvIGF2b2lkIHRoaXMgd2UgY2FuIHNoaWZ0IHRoZSByYW5kb21uZXNzIGJ5IDEgYml0LgotICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtbWFwX3JuZCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcm5kID0gMDsKIAogCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkKLQkJcm5kID0gKGxvbmcpZ2V0X3JhbmRvbV9pbnQoKSAmIChTVEFDS19STkRfTUFTSyA+PiAxKTsKKwkJcm5kID0gKGxvbmcpZ2V0X3JhbmRvbV9pbnQoKSAmIFNUQUNLX1JORF9NQVNLOwogCi0JcmV0dXJuIHJuZCA8PCAoUEFHRV9TSElGVCArIDEpOworCXJldHVybiBybmQgPDwgUEFHRV9TSElGVDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW1hcF9iYXNlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuYwppbmRleCBmNGY4YjUwLi42MDMyZjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CkBAIC00NjMsMyArNDY0LDk2IEBACiB7CiB9CiAjZW5kaWYJLyogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQICovCisKK3N0YXRpYyBwdGVfdCBibV9wdGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisjaWYgQ09ORklHX0FSTTY0X1BHVEFCTEVfTEVWRUxTID4gMgorc3RhdGljIHBtZF90IGJtX3BtZFtQVFJTX1BFUl9QTURdIF9fcGFnZV9hbGlnbmVkX2JzczsKKyNlbmRpZgorI2lmIENPTkZJR19BUk02NF9QR1RBQkxFX0xFVkVMUyA+IDMKK3N0YXRpYyBwdWRfdCBibV9wdWRbUFRSU19QRVJfUFVEXSBfX3BhZ2VfYWxpZ25lZF9ic3M7CisjZW5kaWYKKworc3RhdGljIGlubGluZSBwdWRfdCAqIGZpeG1hcF9wdWQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CisKKwlCVUdfT04ocGdkX25vbmUoKnBnZCkgfHwgcGdkX2JhZCgqcGdkKSk7CisKKwlyZXR1cm4gcHVkX29mZnNldChwZ2QsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHBtZF90ICogZml4bWFwX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcHVkX3QgKnB1ZCA9IGZpeG1hcF9wdWQoYWRkcik7CisKKwlCVUdfT04ocHVkX25vbmUoKnB1ZCkgfHwgcHVkX2JhZCgqcHVkKSk7CisKKwlyZXR1cm4gcG1kX29mZnNldChwdWQsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICogZml4bWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcG1kX3QgKnBtZCA9IGZpeG1hcF9wbWQoYWRkcik7CisKKwlCVUdfT04ocG1kX25vbmUoKnBtZCkgfHwgcG1kX2JhZCgqcG1kKSk7CisKKwlyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKK30KKwordm9pZCBfX2luaXQgZWFybHlfZml4bWFwX2luaXQodm9pZCkKK3sKKwlwZ2RfdCAqcGdkOworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBGSVhBRERSX1NUQVJUOworCisJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOworCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdkLCBibV9wdWQpOworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgYm1fcG1kKTsKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBibV9wdGUpOworCisJLyoKKwkgKiBUaGUgYm9vdC1pb3JlbWFwIHJhbmdlIHNwYW5zIG11bHRpcGxlIHBtZHMsIGZvciB3aGljaAorCSAqIHdlIGFyZSBub3QgcHJlcGFydGVkOgorCSAqLworCUJVSUxEX0JVR19PTigoX19maXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pID4+IFBNRF9TSElGVCkKKwkJICAgICAhPSAoX19maXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSA+PiBQTURfU0hJRlQpKTsKKworCWlmICgocG1kICE9IGZpeG1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSkpCisJICAgICB8fCBwbWQgIT0gZml4bWFwX3BtZChmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSkpIHsKKwkJV0FSTl9PTigxKTsKKwkJcHJfd2FybigicG1kICVwICE9ICVwLCAlcFxuIiwKKwkJCXBtZCwgZml4bWFwX3BtZChmaXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pKSwKKwkJCWZpeG1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkpKTsKKwkJcHJfd2FybigiZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKTogJTA4bHhcbiIsCisJCQlmaXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pKTsKKwkJcHJfd2FybigiZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCk6ICAgJTA4bHhcbiIsCisJCQlmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSk7CisKKwkJcHJfd2FybigiRklYX0JUTUFQX0VORDogICAgICAgJWRcbiIsIEZJWF9CVE1BUF9FTkQpOworCQlwcl93YXJuKCJGSVhfQlRNQVBfQkVHSU46ICAgICAlZFxuIiwgRklYX0JUTUFQX0JFR0lOKTsKKwl9Cit9CisKK3ZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKKwkJCSAgICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBfX2ZpeF90b192aXJ0KGlkeCk7CisJcHRlX3QgKnB0ZTsKKworCWlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzKSB7CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCisJcHRlID0gZml4bWFwX3B0ZShhZGRyKTsKKworCWlmIChwZ3Byb3RfdmFsKGZsYWdzKSkgeworCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwaHlzID4+IFBBR0VfU0hJRlQsIGZsYWdzKSk7CisJfSBlbHNlIHsKKwkJcHRlX2NsZWFyKCZpbml0X21tLCBhZGRyLCBwdGUpOworCQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIrUEFHRV9TSVpFKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BnZC5jIGIvYXJjaC9hcm02NC9tbS9wZ2QuYwppbmRleCA2NjgyYjM2Li43MWNhMTA0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL3BnZC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vcGdkLmMKQEAgLTM1LDkgKzM1LDkgQEAKIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJaWYgKFBHRF9TSVpFID09IFBBR0VfU0laRSkKLQkJcmV0dXJuIChwZ2RfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJcmV0dXJuIChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFnZShQR0FMTE9DX0dGUCk7CiAJZWxzZQotCQlyZXR1cm4ga21lbV9jYWNoZV96YWxsb2MocGdkX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MocGdkX2NhY2hlLCBQR0FMTE9DX0dGUCk7CiB9CiAKIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDQxZjFlM2UuLmVkYmEwNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC02MCw3ICs2MCw3IEBACiAJY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nOwogCWludCBpZHg7CiAJaW50IHRtcF91c2VkOwotCWludCBib2R5X29mZnNldDsKKwlpbnQgZXBpbG9ndWVfb2Zmc2V0OwogCWludCAqb2Zmc2V0OwogCXUzMiAqaW1hZ2U7CiB9OwpAQCAtMTMwLDggKzEzMCw4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGVwaWxvZ3VlX29mZnNldChjb25zdCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQogewotCWludCB0byA9IGN0eC0+b2Zmc2V0W2N0eC0+cHJvZy0+bGVuIC0gMV07Ci0JaW50IGZyb20gPSBjdHgtPmlkeCAtIGN0eC0+Ym9keV9vZmZzZXQ7CisJaW50IHRvID0gY3R4LT5lcGlsb2d1ZV9vZmZzZXQ7CisJaW50IGZyb20gPSBjdHgtPmlkeDsKIAogCXJldHVybiB0byAtIGZyb207CiB9CkBAIC00NjMsNiArNDYzLDggQEAKIAl9CiAJLyogZnVuY3Rpb24gcmV0dXJuICovCiAJY2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6CisJCS8qIE9wdGltaXphdGlvbjogd2hlbiBsYXN0IGluc3RydWN0aW9uIGlzIEVYSVQsCisJCSAgIHNpbXBseSBmYWxsdGhyb3VnaCB0byBlcGlsb2d1ZS4gKi8KIAkJaWYgKGkgPT0gY3R4LT5wcm9nLT5sZW4gLSAxKQogCQkJYnJlYWs7CiAJCWptcF9vZmZzZXQgPSBlcGlsb2d1ZV9vZmZzZXQoY3R4KTsKQEAgLTY4NSwxMSArNjg3LDEzIEBACiAKIAkvKiAxLiBJbml0aWFsIGZha2UgcGFzcyB0byBjb21wdXRlIGN0eC0+aWR4LiAqLwogCi0JLyogRmFrZSBwYXNzIHRvIGZpbGwgaW4gY3R4LT5vZmZzZXQuICovCisJLyogRmFrZSBwYXNzIHRvIGZpbGwgaW4gY3R4LT5vZmZzZXQgYW5kIGN0eC0+dG1wX3VzZWQuICovCiAJaWYgKGJ1aWxkX2JvZHkoJmN0eCkpCiAJCWdvdG8gb3V0OwogCiAJYnVpbGRfcHJvbG9ndWUoJmN0eCk7CisKKwljdHguZXBpbG9ndWVfb2Zmc2V0ID0gY3R4LmlkeDsKIAlidWlsZF9lcGlsb2d1ZSgmY3R4KTsKIAogCS8qIE5vdyB3ZSBrbm93IHRoZSBhY3R1YWwgaW1hZ2Ugc2l6ZS4gKi8KQEAgLTcwNiw3ICs3MTAsNiBAQAogCiAJYnVpbGRfcHJvbG9ndWUoJmN0eCk7CiAKLQljdHguYm9keV9vZmZzZXQgPSBjdHguaWR4OwogCWlmIChidWlsZF9ib2R5KCZjdHgpKSB7CiAJCWJwZl9qaXRfYmluYXJ5X2ZyZWUoaGVhZGVyKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCmluZGV4IDM3Yjc1NjAuLmNjOTJjZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9hdG1lbF91c2JhX3VkYy5oPgogCi0jaW5jbHVkZSA8bWFjaC9hdG1lbC1tY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL21tYy1hdG1lbC1tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1lbC1tY2kuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYXRtZWwtbWNpLmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFkN2Y0Yi4uMDAwMDAwMAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgX19NQUNIX0FUTUVMX01DSV9ICi0jZGVmaW5lIF9fTUFDSF9BVE1FTF9NQ0lfSAotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtZHcuaD4KLQotLyoqCi0gKiBzdHJ1Y3QgbWNpX2RtYV9kYXRhIC0gRE1BIGRhdGEgZm9yIE1DSSBpbnRlcmZhY2UKLSAqLwotc3RydWN0IG1jaV9kbWFfZGF0YSB7Ci0Jc3RydWN0IGR3X2RtYV9zbGF2ZQlzZGF0YTsKLX07Ci0KLS8qIGFjY2Vzc29yIG1hY3JvcyAqLwotI2RlZmluZQlzbGF2ZV9kYXRhX3B0cihzKQkoJihzKS0+c2RhdGEpCi0jZGVmaW5lIGZpbmRfc2xhdmVfZGV2KHMpCSgocyktPnNkYXRhLmRtYV9kZXYpCi0KLSNlbmRpZiAvKiBfX01BQ0hfQVRNRUxfTUNJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZTU5ZGJhMS4uNzUyYTNmNCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTExMiw2ICsxMTIsOSBAQAogCWVsc2UKIAkJKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKSBhZGRyID0gYjsKIH0KKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQoYiwgYWRkcikgd3JpdGViKGIsIGFkZHIpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKGIsIGFkZHIpIHdyaXRldyhiLCBhZGRyKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZChiLCBhZGRyKSB3cml0ZWwoYiwgYWRkcikKICNkZWZpbmUgX19yYXdfd3JpdGViIHdyaXRlYgogI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CiAjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDhjYjUwYTIuLjk5YmI3ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vaW8uaApAQCAtMjQzLDYgKzI0Myw5IEBACiAJCV9fZmx1c2hfUENJX3dyaXRlcygpOwogfQogCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkIHdyaXRlYgorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCB3cml0ZXcKKyNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQgd3JpdGVsCiAKIC8qIFZhbHVlcyBmb3Igbm9jYWNoZWZsYWcgYW5kIGNtb2RlICovCiAjZGVmaW5lIElPTUFQX0ZVTExfQ0FDSElORwkJMApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCBjODRjODhiLi5jZTk1MzFlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtMTEsNyArMTEsNiBAQAogCXNlbGVjdCBQQ0kgaWYgKCFJQTY0X0hQX1NJTSkKIAlzZWxlY3QgQUNQSSBpZiAoIUlBNjRfSFBfU0lNKQogCXNlbGVjdCBBUkNIX01JR0hUX0hBVkVfQUNQSV9QREMgaWYgQUNQSQotCXNlbGVjdCBQTSBpZiAoIUlBNjRfSFBfU0lNKQogCXNlbGVjdCBIQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKQEAgLTIzMyw2ICsyMzIsNyBAQAogY29uZmlnIElBNjRfSFBfU0lNCiAJYm9vbCAiU2tpLXNpbXVsYXRvciIKIAlzZWxlY3QgU1dJT1RMQgorCWRlcGVuZHMgb24gIVBNCiAKIGVuZGNob2ljZQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGJlZTBhY2QuLjgwYTdlMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pby5oCkBAIC0zOTMsNiArMzkzLDEwIEBACiAjZGVmaW5lIHdyaXRldyh2LGEpCV9fd3JpdGV3KCh2KSwgKGEpKQogI2RlZmluZSB3cml0ZWwodixhKQlfX3dyaXRlbCgodiksIChhKSkKICNkZWZpbmUgd3JpdGVxKHYsYSkJX193cml0ZXEoKHYpLCAoYSkpCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkKHYsYSkJX193cml0ZWIoKHYpLCAoYSkpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKHYsYSkJX193cml0ZXcoKHYpLCAoYSkpCisjZGVmaW5lIHdyaXRlbF9yZWxheGVkKHYsYSkJX193cml0ZWwoKHYpLCAoYSkpCisjZGVmaW5lIHdyaXRlcV9yZWxheGVkKHYsYSkJX193cml0ZXEoKHYpLCAoYSkpCiAjZGVmaW5lIF9fcmF3X3dyaXRlYgl3cml0ZWIKICNkZWZpbmUgX19yYXdfd3JpdGV3CXdyaXRldwogI2RlZmluZSBfX3Jhd193cml0ZWwJd3JpdGVsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCA0NDljOGMwLi4xMDNiZWRjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTM2NSwxNSArMzY1LDE1IEBACiB9CiAKICNkZWZpbmUgQVJDSF9IQVNfVFJBTlNMQVRFX01FTV9QVFIJMQotc3RhdGljIF9faW5saW5lX18gY2hhciAqCi14bGF0ZV9kZXZfbWVtX3B0ciAodW5zaWduZWQgbG9uZyBwKQorc3RhdGljIF9faW5saW5lX18gdm9pZCAqCit4bGF0ZV9kZXZfbWVtX3B0cihwaHlzX2FkZHJfdCBwKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCWNoYXIgKiBwdHI7CisJdm9pZCAqcHRyOwogCiAJcGFnZSA9IHBmbl90b19wYWdlKHAgPj4gUEFHRV9TSElGVCk7CiAJaWYgKFBhZ2VVbmNhY2hlZChwYWdlKSkKLQkJcHRyID0gKGNoYXIgKilwICsgX19JQTY0X1VOQ0FDSEVEX09GRlNFVDsKKwkJcHRyID0gKHZvaWQgKilwICsgX19JQTY0X1VOQ0FDSEVEX09GRlNFVDsKIAllbHNlCiAJCXB0ciA9IF9fdmEocCk7CiAKQEAgLTM4MywxNSArMzgzLDE1IEBACiAvKgogICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIGtlcm5lbCBtZW1vcnkgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgKgoteGxhdGVfZGV2X2ttZW1fcHRyIChjaGFyICogcCkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgKgoreGxhdGVfZGV2X2ttZW1fcHRyKHZvaWQgKnApCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JY2hhciAqIHB0cjsKKwl2b2lkICpwdHI7CiAKIAlwYWdlID0gdmlydF90b19wYWdlKCh1bnNpZ25lZCBsb25nKXApOwogCWlmIChQYWdlVW5jYWNoZWQocGFnZSkpCi0JCXB0ciA9IChjaGFyICopX19wYShwKSArIF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7CisJCXB0ciA9ICh2b2lkICopX19wYShwKSArIF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7CiAJZWxzZQogCQlwdHIgPSBwOwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS91YXBpL2FzbS9zaWdpbmZvLmggYi9hcmNoL2lhNjQvaW5jbHVkZS91YXBpL2FzbS9zaWdpbmZvLmgKaW5kZXggNGVhNjIyNS4uYmNlOWJjMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vc2lnaW5mby5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL3VhcGkvYXNtL3NpZ2luZm8uaApAQCAtNjMsNiArNjMsMTAgQEAKIAkJCXVuc2lnbmVkIGludCBfZmxhZ3M7CS8qIHNlZSBiZWxvdyAqLwogCQkJdW5zaWduZWQgbG9uZyBfaXNyOwkvKiBpc3IgKi8KIAkJCXNob3J0IF9hZGRyX2xzYjsJLyogbHNiIG9mIGZhdWx0aW5nIGFkZHJlc3MgKi8KKwkJCXN0cnVjdCB7CisJCQkJdm9pZCBfX3VzZXIgKl9sb3dlcjsKKwkJCQl2b2lkIF9fdXNlciAqX3VwcGVyOworCQkJfSBfYWRkcl9ibmQ7CiAJCX0gX3NpZ2ZhdWx0OwogCiAJCS8qIFNJR1BPTEwgKi8KQEAgLTExMCw5ICsxMTQsOSBAQAogLyoKICAqIFNJR1NFR1Ygc2lfY29kZXMKICAqLwotI2RlZmluZSBfX1NFR1ZfUFNUS09WRgkoX19TSV9GQVVMVHwzKQkvKiBwYXJhZ3JhcGggc3RhY2sgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgX19TRUdWX1BTVEtPVkYJKF9fU0lfRkFVTFR8NCkJLyogcGFyYWdyYXBoIHN0YWNrIG92ZXJmbG93ICovCiAjdW5kZWYgTlNJR1NFR1YKLSNkZWZpbmUgTlNJR1NFR1YJMworI2RlZmluZSBOU0lHU0VHVgk0CiAKICN1bmRlZiBOU0lHVFJBUAogI2RlZmluZSBOU0lHVFJBUAk0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMgYi9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKaW5kZXggOGMzNzMwYy4uOGFlMzZlYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYwpAQCAtMzUsNyArMzUsNyBAQAogCWRhdGEgfD0gTVNJX0RBVEFfVkVDVE9SKGlycV90b192ZWN0b3IoaXJxKSk7CiAJbXNnLmRhdGEgPSBkYXRhOwogCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAJY3B1bWFza19jb3B5KGlkYXRhLT5hZmZpbml0eSwgY3B1bWFza19vZihjcHUpKTsKIAogCXJldHVybiAwOwpAQCAtNzEsNyArNzEsNyBAQAogCQlNU0lfREFUQV9ERUxJVkVSWV9GSVhFRCB8CiAJCU1TSV9EQVRBX1ZFQ1RPUih2ZWN0b3IpOwogCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJmlhNjRfbXNpX2NoaXAsIGhhbmRsZV9lZGdlX2lycSk7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMiw4ICsxMDIsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlhNjRfbXNpX2NoaXAgPSB7CiAJLm5hbWUJCQk9ICJQQ0ktTVNJIiwKLQkuaXJxX21hc2sJCT0gbWFza19tc2lfaXJxLAotCS5pcnFfdW5tYXNrCQk9IHVubWFza19tc2lfaXJxLAorCS5pcnFfbWFzawkJPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrCQk9IHBjaV9tc2lfdW5tYXNrX2lycSwKIAkuaXJxX2FjawkJPSBpYTY0X2Fja19tc2lfaXJxLAogI2lmZGVmIENPTkZJR19TTVAKIAkuaXJxX3NldF9hZmZpbml0eQk9IGlhNjRfc2V0X21zaV9pcnFfYWZmaW5pdHksCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDU4NDVmZmUuLmRjMDYzZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC0yNjYyLDcgKzI2NjIsNyBAQAogCiAJcmV0ID0gLUVOT01FTTsKIAotCWZkID0gZ2V0X3VudXNlZF9mZCgpOworCWZkID0gZ2V0X3VudXNlZF9mZF9mbGFncygwKTsKIAlpZiAoZmQgPCAwKQogCQlyZXR1cm4gZmQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvbXNpX3NuLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL21zaV9zbi5jCmluZGV4IDQ0NmU3NzkuLmEwZWIyN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvbXNpX3NuLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9tc2lfc24uYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJbXNnLmRhdGEgPSAweDEwMCArIGlycTsKIAogCWlycV9zZXRfbXNpX2Rlc2MoaXJxLCBlbnRyeSk7Ci0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJnNuX21zaV9jaGlwLCBoYW5kbGVfZWRnZV9pcnEpOwogCiAJcmV0dXJuIDA7CkBAIC0yMDUsNyArMjA1LDcgQEAKIAltc2cuYWRkcmVzc19oaSA9ICh1MzIpKGJ1c19hZGRyID4+IDMyKTsKIAltc2cuYWRkcmVzc19sbyA9ICh1MzIpKGJ1c19hZGRyICYgMHgwMDAwMDAwMGZmZmZmZmZmKTsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCWNwdW1hc2tfY29weShkYXRhLT5hZmZpbml0eSwgY3B1X21hc2spOwogCiAJcmV0dXJuIDA7CkBAIC0yMjgsOCArMjI4LDggQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzbl9tc2lfY2hpcCA9IHsKIAkubmFtZQkJCT0gIlBDSS1NU0kiLAotCS5pcnFfbWFzawkJPSBtYXNrX21zaV9pcnEsCi0JLmlycV91bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCisJLmlycV9tYXNrCQk9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sJCT0gcGNpX21zaV91bm1hc2tfaXJxLAogCS5pcnFfYWNrCQk9IHNuX2Fja19tc2lfaXJxLAogI2lmZGVmIENPTkZJR19TTVAKIAkuaXJxX3NldF9hZmZpbml0eQk9IHNuX3NldF9tc2lfaXJxX2FmZmluaXR5LApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaAppbmRleCA0MDEwZjFmLi42ZTc3ODdmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaApAQCAtMTYxLDYgKzE2MSw5IEBACiAjZGVmaW5lIF9fcmF3X3dyaXRlYiB3cml0ZWIKICNkZWZpbmUgX19yYXdfd3JpdGV3IHdyaXRldwogI2RlZmluZSBfX3Jhd193cml0ZWwgd3JpdGVsCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkIHdyaXRlYgorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCB3cml0ZXcKKyNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQgd3JpdGVsCiAKICNkZWZpbmUgaW9yZWFkOCByZWFkCiAjZGVmaW5lIGlvcmVhZDE2IHJlYWR3CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMgYi9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKaW5kZXggMDFhNjIxNi4uMTkyYjAwZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwpAQCAtODU4LDYgKzg1OCwyNCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfQVRBUklfRVRIRVJORUMgKi8KIAorI2lmZGVmIENPTkZJR19BVEFSSV9TQ1NJCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIGF0YXJpX3Njc2lfc3RfcnNyY1tdIF9faW5pdGNvbnN0ID0geworCXsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IElSUV9NRlBfRlNDU0ksCisJCS5lbmQgICA9IElSUV9NRlBfRlNDU0ksCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgYXRhcmlfc2NzaV90dF9yc3JjW10gX19pbml0Y29uc3QgPSB7CisJeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0ID0gSVJRX1RUX01GUF9TQ1NJLAorCQkuZW5kICAgPSBJUlFfVFRfTUZQX1NDU0ksCisJfSwKK307CisjZW5kaWYKKwogaW50IF9faW5pdCBhdGFyaV9wbGF0Zm9ybV9pbml0KHZvaWQpCiB7CiAJaW50IHJ2ID0gMDsKQEAgLTg5Miw2ICs5MTAsMTUgQEAKIAl9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BVEFSSV9TQ1NJCisJaWYgKEFUQVJJSFdfUFJFU0VOVChTVF9TQ1NJKSkKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiYXRhcmlfc2NzaSIsIC0xLAorCQkJYXRhcmlfc2NzaV9zdF9yc3JjLCBBUlJBWV9TSVpFKGF0YXJpX3Njc2lfc3RfcnNyYykpOworCWVsc2UgaWYgKEFUQVJJSFdfUFJFU0VOVChUVF9TQ1NJKSkKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiYXRhcmlfc2NzaSIsIC0xLAorCQkJYXRhcmlfc2NzaV90dF9yc3JjLCBBUlJBWV9TSVpFKGF0YXJpX3Njc2lfdHRfcnNyYykpOworI2VuZGlmCisKIAlyZXR1cm4gcnY7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jIGIvYXJjaC9tNjhrL2F0YXJpL3N0ZG1hLmMKaW5kZXggZGRiZjQzYy4uZTVhNjY1OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL3N0ZG1hLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL3N0ZG1hLmMKQEAgLTU5LDYgKzU5LDMxIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKiBFbmQgb2YgUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCisvKioKKyAqIHN0ZG1hX3RyeV9sb2NrIC0gYXR0ZW1wdCB0byBhY3F1aXJlIFNUIERNQSBpbnRlcnJ1cHQgImxvY2siCisgKiBAaGFuZGxlcjogaW50ZXJydXB0IGhhbmRsZXIgdG8gdXNlIGFmdGVyIGFjcXVpc2l0aW9uCisgKgorICogUmV0dXJucyAhMCBpZiBsb2NrIHdhcyBhY3F1aXJlZDsgb3RoZXJ3aXNlIDAuCisgKi8KKworaW50IHN0ZG1hX3RyeV9sb2NrKGlycV9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmIChzdGRtYV9sb2NrZWQpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdGRtYV9sb2NrZWQgICA9IDE7CisJc3RkbWFfaXNyICAgICAgPSBoYW5kbGVyOworCXN0ZG1hX2lzcl9kYXRhID0gZGF0YTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKHN0ZG1hX3RyeV9sb2NrKTsKKwogCiAvKgogICogRnVuY3Rpb246IHZvaWQgc3RkbWFfbG9jayggaXNyZnVuYyBpc3IsIHZvaWQgKmRhdGEgKQpAQCAtNzgsMTkgKzEwMywxMCBAQAogCiB2b2lkIHN0ZG1hX2xvY2soaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkvKiBwcm90ZWN0IGxvY2sgKi8KLQogCS8qIFNpbmNlIHRoZSBETUEgaXMgdXNlZCBmb3IgZmlsZSBzeXN0ZW0gcHVycG9zZXMsIHdlCiAJIGhhdmUgdG8gc2xlZXAgdW5pbnRlcnJ1cHRpYmxlICh0aGVyZSBtYXkgYmUgbG9ja2VkCiAJIGJ1ZmZlcnMpICovCi0Jd2FpdF9ldmVudChzdGRtYV93YWl0LCAhc3RkbWFfbG9ja2VkKTsKLQotCXN0ZG1hX2xvY2tlZCAgID0gMTsKLQlzdGRtYV9pc3IgICAgICA9IGhhbmRsZXI7Ci0Jc3RkbWFfaXNyX2RhdGEgPSBkYXRhOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl3YWl0X2V2ZW50KHN0ZG1hX3dhaXQsIHN0ZG1hX3RyeV9sb2NrKGhhbmRsZXIsIGRhdGEpKTsKIH0KIEVYUE9SVF9TWU1CT0woc3RkbWFfbG9jayk7CiAKQEAgLTEyMiwyMiArMTM4LDI1IEBACiBFWFBPUlRfU1lNQk9MKHN0ZG1hX3JlbGVhc2UpOwogCiAKLS8qCi0gKiBGdW5jdGlvbjogaW50IHN0ZG1hX290aGVyc193YWl0aW5nKCB2b2lkICkKKy8qKgorICogc3RkbWFfaXNfbG9ja2VkX2J5IC0gYWxsb3cgbG9jayBob2xkZXIgdG8gY2hlY2sgd2hldGhlciBpdCBuZWVkcyB0byByZWxlYXNlLgorICogQGhhbmRsZXI6IGludGVycnVwdCBoYW5kbGVyIHByZXZpb3VzbHkgdXNlZCB0byBhY3F1aXJlIGxvY2suCiAgKgotICogUHVycG9zZTogQ2hlY2sgaWYgc29tZW9uZSB3YWl0cyBmb3IgdGhlIFNULURNQSBsb2NrLgotICoKLSAqIElucHV0czogbm9uZQotICoKLSAqIFJldHVybnM6IDAgaWYgbm8gb25lIGlzIHdhaXRpbmcsICE9IDAgb3RoZXJ3aXNlCi0gKgorICogUmV0dXJucyAhMCBpZiBsb2NrZWQgZm9yIHRoZSBnaXZlbiBoYW5kbGVyOyAwIG90aGVyd2lzZS4KICAqLwogCi1pbnQgc3RkbWFfb3RoZXJzX3dhaXRpbmcodm9pZCkKK2ludCBzdGRtYV9pc19sb2NrZWRfYnkoaXJxX2hhbmRsZXJfdCBoYW5kbGVyKQogewotCXJldHVybiB3YWl0cXVldWVfYWN0aXZlKCZzdGRtYV93YWl0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQ7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmVzdWx0ID0gc3RkbWFfbG9ja2VkICYmIChzdGRtYV9pc3IgPT0gaGFuZGxlcik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJlc3VsdDsKIH0KLUVYUE9SVF9TWU1CT0woc3RkbWFfb3RoZXJzX3dhaXRpbmcpOworRVhQT1JUX1NZTUJPTChzdGRtYV9pc19sb2NrZWRfYnkpOwogCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlfc3RkbWEuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaV9zdGRtYS5oCmluZGV4IDhlMzg5YjcuLmQyNGUzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaV9zdGRtYS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaV9zdGRtYS5oCkBAIC04LDExICs4LDExIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitpbnQgc3RkbWFfdHJ5X2xvY2soaXJxX2hhbmRsZXJfdCwgdm9pZCAqKTsKIHZvaWQgc3RkbWFfbG9jayhpcnFfaGFuZGxlcl90IGhhbmRsZXIsIHZvaWQgKmRhdGEpOwogdm9pZCBzdGRtYV9yZWxlYXNlKCB2b2lkICk7Ci1pbnQgc3RkbWFfb3RoZXJzX3dhaXRpbmcoIHZvaWQgKTsKIGludCBzdGRtYV9pc2xvY2tlZCggdm9pZCApOwotdm9pZCAqc3RkbWFfbG9ja2VkX2J5KCB2b2lkICk7CitpbnQgc3RkbWFfaXNfbG9ja2VkX2J5KGlycV9oYW5kbGVyX3QpOwogdm9pZCBzdGRtYV9pbml0KCB2b2lkICk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvZiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaW8uaAppbmRleCBjNzBjYzkxLi5iY2NkNWE5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaW8uaApAQCAtMywzICszLDExIEBACiAjZWxzZQogI2luY2x1ZGUgPGFzbS9pb19tbS5oPgogI2VuZGlmCisKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKQlyZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpCXJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikJcmVhZGwoYWRkcikKKworI2RlZmluZSB3cml0ZWJfcmVsYXhlZChiLCBhZGRyKQl3cml0ZWIoYiwgYWRkcikKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQoYiwgYWRkcikJd3JpdGV3KGIsIGFkZHIpCisjZGVmaW5lIHdyaXRlbF9yZWxheGVkKGIsIGFkZHIpCXdyaXRlbChiLCBhZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lvX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9fbm8uaAppbmRleCBiZTRiNWE4Li5hOTNjOGNkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9fbm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9fbm8uaApAQCAtNDAsMTAgKzQwLDYgQEAKICNkZWZpbmUgcmVhZGwoYWRkcikgXAogICAgICh7IHVuc2lnbmVkIGludCBfX3YgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKGFkZHIpKTsgX192OyB9KQogCi0jZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikgcmVhZGIoYWRkcikKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKSByZWFkdyhhZGRyKQotI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpIHJlYWRsKGFkZHIpCi0KICNkZWZpbmUgd3JpdGViKGIsYWRkcikgKHZvaWQpKCgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKGFkZHIpKSA9IChiKSkKICNkZWZpbmUgd3JpdGV3KGIsYWRkcikgKHZvaWQpKCgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIChhZGRyKSkgPSAoYikpCiAjZGVmaW5lIHdyaXRlbChiLGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKGFkZHIpKSA9IChiKSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaAppbmRleCBkMzIzYjJjLi4yOWM3YzZjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCkBAIC01Myw2ICs1MywxMCBAQAogI2RlZmluZSBNQUNfU0NTSV9RVUFEUkEJCTIKICNkZWZpbmUgTUFDX1NDU0lfUVVBRFJBMgkzCiAjZGVmaW5lIE1BQ19TQ1NJX1FVQURSQTMJNAorI2RlZmluZSBNQUNfU0NTSV9JSUZYCQk1CisjZGVmaW5lIE1BQ19TQ1NJX0RVTwkJNgorI2RlZmluZSBNQUNfU0NTSV9DQ0wJCTcKKyNkZWZpbmUgTUFDX1NDU0lfTEFURQkJOAogCiAjZGVmaW5lIE1BQ19JREVfTk9ORQkJMAogI2RlZmluZSBNQUNfSURFX1FVQURSQQkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9jb25maWcuYyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKaW5kZXggYTQ3MWVhYi4uZTljMzc1NiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuYworKysgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJLm5hbWUJCT0gIklJZngiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lPUCwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfSUlGWCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fSU9QLApAQCAtMzI5LDcgKzMyOSw3IEBACiAJCS5uYW1lCQk9ICJDb2xvciBDbGFzc2ljIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9DQ0wsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkJLm5hbWUJCT0gIkNvbG9yIENsYXNzaWMgSUkiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0NDTCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTUyNiw3ICs1MjYsNyBAQAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNTIwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9DQ0wsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC01MzUsNyArNTM1LDcgQEAKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDU1MCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfQ0NMLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNTY3LDcgKzU2Nyw3IEBACiAJCS5uYW1lCQk9ICJUViIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfQ0NMLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNzEyLDcgKzcxMiw3IEBACiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTkwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfTEFURSwKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9CQUJPT04sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKQEAgLTcyMiw3ICs3MjIsNyBAQAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDUyMCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0xBVEUsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCkBAIC03NDAsNyArNzQwLDcgQEAKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjEwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0RVTywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC03NDksNyArNzQ5LDcgQEAKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjMwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0RVTywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC03NTgsNyArNzU4LDcgQEAKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjUwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0RVTywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC03NjcsNyArNzY3LDcgQEAKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjcwYyIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9EVU8sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNzc2LDcgKzc3Niw3IEBACiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI4MCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9EVU8sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNzg1LDcgKzc4NSw3IEBACiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI4MGMiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfRFVPLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTkyOSw2ICs5MjksNzAgQEAKIAkucmVzb3VyY2UJPSAmc3dpbV9yc3JjLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBtYWNfc2NzaV9paWZ4X3JzcmNbXSBfX2luaXRjb25zdCA9IHsKKwl7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBJUlFfTUFDX1NDU0ksCisJCS5lbmQgICA9IElSUV9NQUNfU0NTSSwKKwl9LCB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSAweDUwMDA4MDAwLAorCQkuZW5kICAgPSAweDUwMDA5RkZGLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIG1hY19zY3NpX2R1b19yc3JjW10gX19pbml0Y29uc3QgPSB7CisJeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gMHhGRUUwMjAwMCwKKwkJLmVuZCAgID0gMHhGRUUwM0ZGRiwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBtYWNfc2NzaV9vbGRfcnNyY1tdIF9faW5pdGNvbnN0ID0geworCXsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IElSUV9NQUNfU0NTSSwKKwkJLmVuZCAgID0gSVJRX01BQ19TQ1NJLAorCX0sIHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IDB4NTAwMTAwMDAsCisJCS5lbmQgICA9IDB4NTAwMTFGRkYsCisJfSwgeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gMHg1MDAwNjAwMCwKKwkJLmVuZCAgID0gMHg1MDAwN0ZGRiwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBtYWNfc2NzaV9sYXRlX3JzcmNbXSBfX2luaXRjb25zdCA9IHsKKwl7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBJUlFfTUFDX1NDU0ksCisJCS5lbmQgICA9IElSUV9NQUNfU0NTSSwKKwl9LCB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSAweDUwMDEwMDAwLAorCQkuZW5kICAgPSAweDUwMDExRkZGLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlIG1hY19zY3NpX2NjbF9yc3JjW10gX19pbml0Y29uc3QgPSB7CisJeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0ID0gSVJRX01BQ19TQ1NJLAorCQkuZW5kICAgPSBJUlFfTUFDX1NDU0ksCisJfSwgeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gMHg1MEYxMDAwMCwKKwkJLmVuZCAgID0gMHg1MEYxMUZGRiwKKwl9LCB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSAweDUwRjA2MDAwLAorCQkuZW5kICAgPSAweDUwRjA3RkZGLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlc3BfMF9wZGV2ID0gewogCS5uYW1lCQk9ICJtYWNfZXNwIiwKIAkuaWQJCT0gMCwKQEAgLTEwMDAsNiArMTA2NCw2MCBAQAogCQkgICAgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9ROTUwKSkKIAkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXNwXzFfcGRldik7CiAJCWJyZWFrOworCWNhc2UgTUFDX1NDU0lfSUlGWDoKKwkJLyogQWRkcmVzc2VzIGZyb20gVGhlIEd1aWRlIHRvIE1hYyBGYW1pbHkgSGFyZHdhcmUuCisJCSAqICQ1MDAwIDgwMDAgLSAkNTAwMCA5RkZGOiBTQ1NJIERNQQorCQkgKiAkNTAwMCBDMDAwIC0gJDUwMDAgREZGRjogQWx0ZXJuYXRlIFNDU0kgKERNQSkKKwkJICogJDUwMDAgRTAwMCAtICQ1MDAwIEZGRkY6IEFsdGVybmF0ZSBTQ1NJIChIc2spCisJCSAqIFRoZSBTQ1NJIERNQSBjdXN0b20gSUMgZW1iZWRzIHRoZSA1M0M4MCBjb3JlLiBtYWNfc2NzaSBkb2VzCisJCSAqIG5vdCBtYWtlIHVzZSBvZiBpdHMgRE1BIG9yIGhhcmR3YXJlIGhhbmRzaGFraW5nIGxvZ2ljLgorCQkgKi8KKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibWFjX3Njc2kiLCAwLAorCQkJbWFjX3Njc2lfaWlmeF9yc3JjLCBBUlJBWV9TSVpFKG1hY19zY3NpX2lpZnhfcnNyYykpOworCQlicmVhazsKKwljYXNlIE1BQ19TQ1NJX0RVTzoKKwkJLyogQWRkcmVzc2VzIGZyb20gdGhlIER1byBEb2NrIElJIERldmVsb3BlciBOb3RlLgorCQkgKiAkRkVFMCAyMDAwIC0gJEZFRTAgM0ZGRjogbm9ybWFsIG1vZGUKKwkJICogJEZFRTAgNDAwMCAtICRGRUUwIDVGRkY6IHBzZXVkbyBETUEgd2l0aG91dCAvRFJRCisJCSAqICRGRUUwIDYwMDAgLSAkRkVFMCA3RkZGOiBwc2V1ZG8gRE1BIHdpdGggL0RSUQorCQkgKiBUaGUgTmV0QlNEIGNvZGUgaW5kaWNhdGVzIHRoYXQgYm90aCA1MzgwIGNoaXBzIHNoYXJlCisJCSAqIGFuIElSUSAoPykgd2hpY2ggd291bGQgbmVlZCBjYXJlZnVsIGhhbmRsaW5nIChzZWUgbWFjX2VzcCkuCisJCSAqLworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJtYWNfc2NzaSIsIDEsCisJCQltYWNfc2NzaV9kdW9fcnNyYywgQVJSQVlfU0laRShtYWNfc2NzaV9kdW9fcnNyYykpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE1BQ19TQ1NJX09MRDoKKwkJLyogQWRkcmVzc2VzIGZyb20gRGV2ZWxvcGVyIE5vdGVzIGZvciBEdW8gU3lzdGVtLAorCQkgKiBQb3dlckJvb2sgMTgwICYgMTYwLCAxNDAgJiAxNzAsIE1hY2ludG9zaCBJSXNpCisJCSAqIGFuZCBhbHNvIGZyb20gVGhlIEd1aWRlIHRvIE1hYyBGYW1pbHkgSGFyZHdhcmUgZm9yCisJCSAqIFNFLzMwLCBJSSwgSUl4LCBJSWN4LCBJSWNpLgorCQkgKiAkNTAwMCA2MDAwIC0gJDUwMDAgN0ZGRjogcHNldWRvLURNQSB3aXRoIC9EUlEKKwkJICogJDUwMDEgMDAwMCAtICQ1MDAxIDFGRkY6IG5vcm1hbCBtb2RlCisJCSAqICQ1MDAxIDIwMDAgLSAkNTAwMSAzRkZGOiBwc2V1ZG8tRE1BIHdpdGhvdXQgL0RSUQorCQkgKiBHTUZIIHNheXMgdGhhdCAkNTAwMCAwMDAwIC0gJDUwRkYgRkZGRiAid3JhcHMKKwkJICogJDUwMDAgMDAwMCAtICQ1MDAxIEZGRkYgZWlnaHQgdGltZXMiICghKQorCQkgKiBtZXNzLm9yZyBzYXlzIElJY2kgYW5kIENvbG9yIENsYXNzaWMgZG8gbm90IGFsaWFzCisJCSAqIEkvTyBhZGRyZXNzIHNwYWNlLgorCQkgKi8KKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibWFjX3Njc2kiLCAwLAorCQkJbWFjX3Njc2lfb2xkX3JzcmMsIEFSUkFZX1NJWkUobWFjX3Njc2lfb2xkX3JzcmMpKTsKKwkJYnJlYWs7CisJY2FzZSBNQUNfU0NTSV9MQVRFOgorCQkvKiBQRE1BIGxvZ2ljIGluIDY4MDQwIFBvd2VyQm9va3MgaXMgc29tZWhvdyBkaWZmZXJlbnQgdG8KKwkJICogJzAzMCBtb2RlbHMuIEl0J3MgcHJvYmFibHkgbW9yZSBsaWtlIFF1YWRyYXMgKHNlZSBtYWNfZXNwKS4KKwkJICovCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm1hY19zY3NpIiwgMCwKKwkJCW1hY19zY3NpX2xhdGVfcnNyYywgQVJSQVlfU0laRShtYWNfc2NzaV9sYXRlX3JzcmMpKTsKKwkJYnJlYWs7CisJY2FzZSBNQUNfU0NTSV9DQ0w6CisJCS8qIEFkZHJlc3NlcyBmcm9tIHRoZSBDb2xvciBDbGFzc2ljIERldmVsb3BlciBOb3RlLgorCQkgKiAkNTBGMCA2MDAwIC0gJDUwRjAgN0ZGRjogU0NTSSBoYW5kc2hha2UKKwkJICogJDUwRjEgMDAwMCAtICQ1MEYxIDFGRkY6IFNDU0kKKwkJICogJDUwRjEgMjAwMCAtICQ1MEYxIDNGRkY6IFNDU0kgRE1BCisJCSAqLworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJtYWNfc2NzaSIsIDAsCisJCQltYWNfc2NzaV9jY2xfcnNyYywgQVJSQVlfU0laRShtYWNfc2NzaV9jY2xfcnNyYykpOworCQlicmVhazsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2luaXQuYyBiL2FyY2gvbTY4ay9tbS9pbml0LmMKaW5kZXggYWNhZmY2YS4uYjA5YTNjYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL2luaXQuYworKysgYi9hcmNoL202OGsvbW0vaW5pdC5jCkBAIC05NCw3ICs5NCw2IEBACiAJaGlnaF9tZW1vcnkgPSAodm9pZCAqKSBlbmRfbWVtOwogCiAJZW1wdHlfemVyb19wYWdlID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwotCW1lbXNldChlbXB0eV96ZXJvX3BhZ2UsIDAsIFBBR0VfU0laRSk7CiAKIAkvKgogCSAqIFNldCB1cCBTRkMvREZDIHJlZ2lzdGVycyAodXNlciBkYXRhIHNwYWNlKS4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jIGIvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKaW5kZXggZjU5ZWM1OC4uYThiOTQyYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMjcsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9zdW4zbW11Lmg+CiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2hpbmVzLmg+CiAjaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9pbnRlcnNpbC5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTE2OSwzICsxNzEsNjEgQEAKICAgICAgICAgaW50ZXJzaWxfY2xlYXIoKTsKIH0KIAorI2lmZGVmIENPTkZJR19TVU4zX1NDU0kKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBzdW4zX3Njc2lfdm1lX3JzcmNbXSBfX2luaXRjb25zdCA9IHsKKwl7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBTVU4zX1ZFQ19WTUVTQ1NJMCwKKwkJLmVuZCAgID0gU1VOM19WRUNfVk1FU0NTSTAsCisJfSwgeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gMHhmZjIwMDAwMCwKKwkJLmVuZCAgID0gMHhmZjIwMDAyMSwKKwl9LCB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBTVU4zX1ZFQ19WTUVTQ1NJMSwKKwkJLmVuZCAgID0gU1VOM19WRUNfVk1FU0NTSTEsCisJfSwgeworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gMHhmZjIwNDAwMCwKKwkJLmVuZCAgID0gMHhmZjIwNDAyMSwKKwl9LAorfTsKKworLyoKKyAqIEludDogbGV2ZWwgMiBhdXRvdmVjdG9yCisgKiBJTzogdHlwZSAxLCBiYXNlIDB4MDAxNDAwMDAsIDUgYml0cyBwaHlzIHNwYWNlOiBBPDQuLjA+CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2Ugc3VuM19zY3NpX3JzcmNbXSBfX2luaXRjb25zdCA9IHsKKwl7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSAyLAorCQkuZW5kICAgPSAyLAorCX0sIHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IDB4MDAxNDAwMDAsCisJCS5lbmQgICA9IDB4MDAxNDAwMWYsCisJfSwKK307CisKK2ludCBfX2luaXQgc3VuM19wbGF0Zm9ybV9pbml0KHZvaWQpCit7CisJc3dpdGNoIChpZHByb20tPmlkX21hY2h0eXBlKSB7CisJY2FzZSBTTV9TVU4zIHwgU01fM18xNjA6CisJY2FzZSBTTV9TVU4zIHwgU01fM18yNjA6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInN1bjNfc2NzaV92bWUiLCAtMSwKKwkJCXN1bjNfc2NzaV92bWVfcnNyYywgQVJSQVlfU0laRShzdW4zX3Njc2lfdm1lX3JzcmMpKTsKKwkJYnJlYWs7CisJY2FzZSBTTV9TVU4zIHwgU01fM181MDoKKwljYXNlIFNNX1NVTjMgfCBTTV8zXzYwOgorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJzdW4zX3Njc2kiLCAtMSwKKwkJCXN1bjNfc2NzaV9yc3JjLCBBUlJBWV9TSVpFKHN1bjNfc2NzaV9yc3JjKSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChzdW4zX3BsYXRmb3JtX2luaXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNDMzNzUxYi4uOTQwZjVmYyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTY5LDEyICs2OSw0IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pby5oPgogCi0jZGVmaW5lIHJlYWRiX3JlbGF4ZWQJcmVhZGIKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZAlyZWFkdwotI2RlZmluZSByZWFkbF9yZWxheGVkCXJlYWRsCi0KLSNkZWZpbmUgd3JpdGViX3JlbGF4ZWQJd3JpdGViCi0jZGVmaW5lIHdyaXRld19yZWxheGVkCXdyaXRldwotI2RlZmluZSB3cml0ZWxfcmVsYXhlZAl3cml0ZWwKLQogI2VuZGlmIC8qIF9BU01fTUlDUk9CTEFaRV9JT19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggOGFhOTc4MS4uOTliNmRlZCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90bGIuaApAQCAtMTQsNyArMTQsNiBAQAogI2RlZmluZSB0bGJfZmx1c2godGxiKQlmbHVzaF90bGJfbW0oKHRsYiktPm1tKQogCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgogCiAjaWZkZWYgQ09ORklHX01NVQogI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKQkJZG8geyB9IHdoaWxlICgwKQpAQCAtMjIsNCArMjEsNiBAQAogI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlLCBhZGRyZXNzKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgorCiAjZW5kaWYgLyogX0FTTV9NSUNST0JMQVpFX1RMQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaWRsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lkbGUuaAppbmRleCAxYzk2N2FiLi5hMmQxOGFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaWRsZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pZGxlLmgKQEAgLTIyLDcgKzIyLDYgQEAKIAkuZXhpdF9sYXRlbmN5CQk9IDEsXAogCS50YXJnZXRfcmVzaWRlbmN5CT0gMSxcCiAJLnBvd2VyX3VzYWdlCQk9IFVJTlRfTUFYLFwKLQkuZmxhZ3MJCQk9IENQVUlETEVfRkxBR19USU1FX1ZBTElELFwKIAkubmFtZQkJCT0gIndhaXQiLFwKIAkuZGVzYwkJCT0gIk1JUFMgd2FpdCIsXAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc2lnaW5mby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc2lnaW5mby5oCmluZGV4IGU4MTE3NDQuLmQwOGY4M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zaWdpbmZvLmgKQEAgLTkyLDYgKzkyLDEwIEBACiAJCQlpbnQgX3RyYXBubzsJLyogVFJBUCAjIHdoaWNoIGNhdXNlZCB0aGUgc2lnbmFsICovCiAjZW5kaWYKIAkJCXNob3J0IF9hZGRyX2xzYjsKKwkJCXN0cnVjdCB7CisJCQkJdm9pZCBfX3VzZXIgKl9sb3dlcjsKKwkJCQl2b2lkIF9fdXNlciAqX3VwcGVyOworCQkJfSBfYWRkcl9ibmQ7CiAJCX0gX3NpZ2ZhdWx0OwogCiAJCS8qIFNJR1BPTEwsIFNJR1hGU1ogKFRvIGRvIC4uLikJICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL21zaS1vY3Rlb24uYyBiL2FyY2gvbWlwcy9wY2kvbXNpLW9jdGVvbi5jCmluZGV4IDYzYmJlMDcuLmNmZmFhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvbXNpLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvbXNpLW9jdGVvbi5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBkZXYtPm1zaV9jYXAgKyBQQ0lfTVNJX0ZMQUdTLCBjb250cm9sKTsKIAogCWlycV9zZXRfbXNpX2Rlc2MoaXJxLCBkZXNjKTsKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9tc2kteGxwLmMgYi9hcmNoL21pcHMvcGNpL21zaS14bHAuYwppbmRleCBmN2FjM2VkLi42YTQwZjI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL21zaS14bHAuYworKysgYi9hcmNoL21pcHMvcGNpL21zaS14bHAuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAKIAltc2l4dmVjID0gbmxtX2lycV9tc2l4dmVjKGQtPmlycSk7CiAJbGluayA9IG5sbV9pcnFfbXNpeGxpbmsobXNpeHZlYyk7Ci0JbWFza19tc2lfaXJxKGQpOworCXBjaV9tc2lfbWFza19pcnEoZCk7CiAJbWQgPSBpcnFfZGF0YV9nZXRfaXJxX2hhbmRsZXJfZGF0YShkKTsKIAogCS8qIEFjayBNU0kgb24gYnJpZGdlICovCkBAIC0yMzksMTAgKzIzOSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhscF9tc2l4X2NoaXAgPSB7CiAJLm5hbWUJCT0gIlhMUC1NU0lYIiwKLQkuaXJxX2VuYWJsZQk9IHVubWFza19tc2lfaXJxLAotCS5pcnFfZGlzYWJsZQk9IG1hc2tfbXNpX2lycSwKKwkuaXJxX2VuYWJsZQk9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2Rpc2FibGUJPSBwY2lfbXNpX21hc2tfaXJxLAogCS5pcnFfbWFza19hY2sJPSB4bHBfbXNpeF9tYXNrX2FjaywKLQkuaXJxX3VubWFzawk9IHVubWFza19tc2lfaXJxLAorCS5pcnFfdW5tYXNrCT0gcGNpX21zaV91bm1hc2tfaXJxLAogfTsKIAogdm9pZCBhcmNoX3RlYXJkb3duX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTM0NSw3ICszNDUsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0Jd3JpdGVfbXNpX21zZyh4aXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyh4aXJxLCAmbXNnKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQl3cml0ZV9tc2lfbXNnKHhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKHhpcnEsICZtc2cpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS14bHIuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLXhsci5jCmluZGV4IDBkZGU4MDMuLjI2ZDJkYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLXhsci5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLXhsci5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlwY2lfd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCXJldHVybiAwOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGU2ZWQwZDguLjg5N2JhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9pby5oCkBAIC02Nyw2ICs2NywxMCBAQAogI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CiAjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKIAorI2RlZmluZSB3cml0ZWJfcmVsYXhlZCB3cml0ZWIKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQgd3JpdGV3CisjZGVmaW5lIHdyaXRlbF9yZWxheGVkIHdyaXRlbAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogdHJhZGl0aW9uYWwgaW5wdXQvb3V0cHV0IGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9LY29uZmlnIGIvYXJjaC9uaW9zMi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjFhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL0tjb25maWcKQEAgLTAsMCArMSwyMDYgQEAKK2NvbmZpZyBOSU9TMgorCWRlZl9ib29sIHkKKwlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKKwlzZWxlY3QgQ0xLU1JDX09GCisJc2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCXNlbGVjdCBHRU5FUklDX0NQVV9ERVZJQ0VTCisJc2VsZWN0IEdFTkVSSUNfSVJRX1BST0JFCisJc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKKwlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSworCXNlbGVjdCBJUlFfRE9NQUlOCisJc2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBCisJc2VsZWN0IE9GCisJc2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFCisJc2VsZWN0IFNPQ19CVVMKKwlzZWxlY3QgU1BBUlNFX0lSUQorCXNlbGVjdCBVU0JfQVJDSF9IQVNfSENEIGlmIFVTQl9TVVBQT1JUCisKK2NvbmZpZyBHRU5FUklDX0NTVU0KKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBHRU5FUklDX0hXRUlHSFQKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQorCWRlZl9ib29sIHkKKworY29uZmlnIE5PX0lPUE9SVF9NQVAKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBIQVNfRE1BCisJZGVmX2Jvb2wgeQorCitjb25maWcgRlBVCisJZGVmX2Jvb2wgbgorCitjb25maWcgU1dBUAorCWRlZl9ib29sIG4KKworY29uZmlnIFJXU0VNX0dFTkVSSUNfU1BJTkxPQ0sKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCisJZGVmX2Jvb2wgbgorCitzb3VyY2UgImluaXQvS2NvbmZpZyIKKworbWVudSAiS2VybmVsIGZlYXR1cmVzIgorCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLnByZWVtcHQiCisKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKworc291cmNlICJrZXJuZWwvS2NvbmZpZy5oeiIKKworc291cmNlICJtbS9LY29uZmlnIgorCitjb25maWcgRk9SQ0VfTUFYX1pPTkVPUkRFUgorCWludCAiTWF4aW11bSB6b25lIG9yZGVyIgorCXJhbmdlIDkgMjAKKwlkZWZhdWx0ICIxMSIKKwloZWxwCisJICBUaGUga2VybmVsIG1lbW9yeSBhbGxvY2F0b3IgZGl2aWRlcyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5CisJICBibG9ja3MgaW50byAiem9uZXMiLCB3aGVyZSBlYWNoIHpvbmUgaXMgYSBwb3dlciBvZiB0d28gbnVtYmVyIG9mCisJICBwYWdlcy4gIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIGxhcmdlc3QgcG93ZXIgb2YgdHdvIHRoYXQgdGhlIGtlcm5lbAorCSAga2VlcHMgaW4gdGhlIG1lbW9yeSBhbGxvY2F0b3IuICBJZiB5b3UgbmVlZCB0byBhbGxvY2F0ZSB2ZXJ5IGxhcmdlCisJICBibG9ja3Mgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSwgdGhlbiB5b3UgbWF5IG5lZWQgdG8KKwkgIGluY3JlYXNlIHRoaXMgdmFsdWUuCisKKwkgIFRoaXMgY29uZmlnIG9wdGlvbiBpcyBhY3R1YWxseSBtYXhpbXVtIG9yZGVyIHBsdXMgb25lLiBGb3IgZXhhbXBsZSwKKwkgIGEgdmFsdWUgb2YgMTEgbWVhbnMgdGhhdCB0aGUgbGFyZ2VzdCBmcmVlIG1lbW9yeSBibG9jayBpcyAyXjEwIHBhZ2VzLgorCitlbmRtZW51CisKK3NvdXJjZSAiYXJjaC9uaW9zMi9wbGF0Zm9ybS9LY29uZmlnLnBsYXRmb3JtIgorCittZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCisKK2NvbmZpZyBNTVUKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBOUl9DUFVTCisJaW50CisJZGVmYXVsdCAiMSIKKworY29uZmlnIE5JT1MyX0FMSUdOTUVOVF9UUkFQCisJYm9vbCAiQ2F0Y2ggYWxpZ25tZW50IHRyYXAiCisJZGVmYXVsdCB5CisJaGVscAorCSAgTmlvcyBJSSBDUFVzIGNhbm5vdCBmZXRjaC9zdG9yZSBkYXRhIHdoaWNoIGlzIG5vdCBidXMgYWxpZ25lZCwKKwkgIGkuZS4sIGEgMiBvciA0IGJ5dGUgZmV0Y2ggbXVzdCBzdGFydCBhdCBhbiBhZGRyZXNzIGRpdmlzaWJsZSBieQorCSAgMiBvciA0LiBBbnkgbm9uLWFsaWduZWQgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgd2lsbCBiZSB0cmFwcGVkIGFuZAorCSAgZW11bGF0ZWQgaW4gc29mdHdhcmUgaWYgeW91IHNheSBZIGhlcmUsIHdoaWNoIGhhcyBhIHBlcmZvcm1hbmNlCisJICBpbXBhY3QuCisKK2NvbW1lbnQgIkJvb3Qgb3B0aW9ucyIKKworY29uZmlnIENNRExJTkVfQk9PTAorCWJvb2wgIkRlZmF1bHQgYm9vdGxvYWRlciBrZXJuZWwgYXJndW1lbnRzIgorCWRlZmF1bHQgeQorCitjb25maWcgQ01ETElORQorCXN0cmluZyAiRGVmYXVsdCBrZXJuZWwgY29tbWFuZCBzdHJpbmciCisJZGVmYXVsdCAiIgorCWRlcGVuZHMgb24gQ01ETElORV9CT09MCisJaGVscAorCSAgT24gc29tZSBwbGF0Zm9ybXMsIHRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgZm9yIHRoZSBib290IGxvYWRlciB0bworCSAgcGFzcyBhcmd1bWVudHMgdG8gdGhlIGtlcm5lbC4gRm9yIHRoZXNlIHBsYXRmb3JtcywgeW91IGNhbiBzdXBwbHkKKwkgIHNvbWUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXQgYnVpbGQgdGltZSBieSBlbnRlcmluZyB0aGVtIGhlcmUuICBJbgorCSAgb3RoZXIgY2FzZXMgeW91IGNhbiBzcGVjaWZ5IGtlcm5lbCBhcmdzIHNvIHRoYXQgeW91IGRvbid0IGhhdmUKKwkgIHRvIHNldCB0aGVtIHVwIGluIGJvYXJkIHByb20gaW5pdGlhbGl6YXRpb24gcm91dGluZXMuCisKK2NvbmZpZyBDTURMSU5FX0ZPUkNFCisJYm9vbCAiRm9yY2UgZGVmYXVsdCBrZXJuZWwgY29tbWFuZCBzdHJpbmciCisJZGVwZW5kcyBvbiBDTURMSU5FX0JPT0wKKwloZWxwCisJICBTZXQgdGhpcyB0byBoYXZlIGFyZ3VtZW50cyBmcm9tIHRoZSBkZWZhdWx0IGtlcm5lbCBjb21tYW5kIHN0cmluZworCSAgb3ZlcnJpZGUgdGhvc2UgcGFzc2VkIGJ5IHRoZSBib290IGxvYWRlci4KKworY29uZmlnIE5JT1MyX0NNRExJTkVfSUdOT1JFX0RUQgorCWJvb2wgIklnbm9yZSBrZXJuZWwgY29tbWFuZCBzdHJpbmcgZnJvbSBEVEIiCisJZGVwZW5kcyBvbiBDTURMSU5FX0JPT0wKKwlkZXBlbmRzIG9uICFDTURMSU5FX0ZPUkNFCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2V0IHRoaXMgdG8gaWdub3JlIHRoZSBib290YXJncyBwcm9wZXJ0eSBmcm9tIHRoZSBkZXZpY2V0cmVlJ3MKKwkgIGNob3NlbiBub2RlIGFuZCBmYWxsIGJhY2sgdG8gQ01ETElORSBpZiBub3RoaW5nIGlzIHBhc3NlZC4KKworY29uZmlnIE5JT1MyX1BBU1NfQ01ETElORQorCWJvb2wgIlBhc3NlZCBrZXJuZWwgY29tbWFuZCBsaW5lIGZyb20gdS1ib290IgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFVzZSBib290YXJncyBlbnYgdmFyaWFibGUgZnJvbSB1LWJvb3QgZm9yIGtlcm5lbCBjb21tYW5kIGxpbmUuCisJICB3aWxsIG92ZXJyaWRlICJEZWZhdWx0IGtlcm5lbCBjb21tYW5kIHN0cmluZyIuCisJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KKworZW5kbWVudQorCittZW51ICJBZHZhbmNlZCBzZXR1cCIKKworY29uZmlnIEFEVkFOQ0VEX09QVElPTlMKKwlib29sICJQcm9tcHQgZm9yIGFkdmFuY2VkIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMiCisJaGVscAorCitjb21tZW50ICJEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQiCisJZGVwZW5kcyBvbiAhQURWQU5DRURfT1BUSU9OUworCitjb25maWcgTklPUzJfS0VSTkVMX01NVV9SRUdJT05fQkFTRV9CT09MCisJYm9vbCAiU2V0IGN1c3RvbSBrZXJuZWwgTU1VIHJlZ2lvbiBiYXNlIGFkZHJlc3MiCisJZGVwZW5kcyBvbiBBRFZBTkNFRF9PUFRJT05TCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUga2VybmVsIE1NVSByZWdpb24uCisKKwkgIFNheSBOIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKworY29uZmlnIE5JT1MyX0tFUk5FTF9NTVVfUkVHSU9OX0JBU0UKKwloZXggIlZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBrZXJuZWwgTU1VIHJlZ2lvbiAiIGlmIE5JT1MyX0tFUk5FTF9NTVVfUkVHSU9OX0JBU0VfQk9PTAorCWRlZmF1bHQgIjB4ODAwMDAwMDAiCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBrZXJuZWwgTU1VIHJlZ2lvbi4KKworY29uZmlnIE5JT1MyX0tFUk5FTF9SRUdJT05fQkFTRV9CT09MCisJYm9vbCAiU2V0IGN1c3RvbSBrZXJuZWwgcmVnaW9uIGJhc2UgYWRkcmVzcyIKKwlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBrZXJuZWwgcmVnaW9uLgorCisJICBTYXkgTiBoZXJlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKK2NvbmZpZyBOSU9TMl9LRVJORUxfUkVHSU9OX0JBU0UKKwloZXggIlZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBrZXJuZWwgcmVnaW9uICIgaWYgTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFX0JPT0wKKwlkZWZhdWx0ICIweGMwMDAwMDAwIgorCitjb25maWcgTklPUzJfSU9fUkVHSU9OX0JBU0VfQk9PTAorCWJvb2wgIlNldCBjdXN0b20gSS9PIHJlZ2lvbiBiYXNlIGFkZHJlc3MiCisJZGVwZW5kcyBvbiBBRFZBTkNFRF9PUFRJT05TCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgSS9PIHJlZ2lvbi4KKworCSAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCitjb25maWcgTklPUzJfSU9fUkVHSU9OX0JBU0UKKwloZXggIlZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBJL08gcmVnaW9uIiBpZiBOSU9TMl9JT19SRUdJT05fQkFTRV9CT09MCisJZGVmYXVsdCAiMHhlMDAwMDAwMCIKKworZW5kbWVudQorCittZW51ICJFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cyIKKworc291cmNlICJmcy9LY29uZmlnLmJpbmZtdCIKKworZW5kbWVudQorCitzb3VyY2UgIm5ldC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvS2NvbmZpZyIKKworc291cmNlICJmcy9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvbmlvczIvS2NvbmZpZy5kZWJ1ZyIKKworc291cmNlICJzZWN1cml0eS9LY29uZmlnIgorCitzb3VyY2UgImNyeXB0by9LY29uZmlnIgorCitzb3VyY2UgImxpYi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9LY29uZmlnLmRlYnVnIGIvYXJjaC9uaW9zMi9LY29uZmlnLmRlYnVnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNGU2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL0tjb25maWcuZGVidWcKQEAgLTAsMCArMSwxNyBAQAorbWVudSAiS2VybmVsIGhhY2tpbmciCisKK2NvbmZpZyBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCisJZGVmX2Jvb2wgeQorCitzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgorCitjb25maWcgREVCVUdfU1RBQ0tfVVNBR0UKKwlib29sICJFbmFibGUgc3RhY2sgdXRpbGl6YXRpb24gaW5zdHJ1bWVudGF0aW9uIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCisJaGVscAorCSAgRW5hYmxlcyB0aGUgZGlzcGxheSBvZiB0aGUgbWluaW11bSBhbW91bnQgb2YgZnJlZSBzdGFjayB3aGljaCBlYWNoCisJICB0YXNrIGhhcyBldmVyIGhhZCBhdmFpbGFibGUgaW4gdGhlIHN5c3JxLVQgYW5kIHN5c3JxLVAgZGVidWcgb3V0cHV0LgorCisJICBUaGlzIG9wdGlvbiB3aWxsIHNsb3cgZG93biBwcm9jZXNzIGNyZWF0aW9uIHNvbWV3aGF0LgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL01ha2VmaWxlIGIvYXJjaC9uaW9zMi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQyYzllZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvTWFrZWZpbGUKQEAgLTAsMCArMSw3MyBAQAorIworIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChDKSAxOTk0LCA5NSwgOTYsIDIwMDMgYnkgV2luZCBSaXZlciBTeXN0ZW1zCisjIFdyaXR0ZW4gYnkgRnJlZHJpayBNYXJrc3Ryb20KKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IHRoZSBnbG9iYWwgbWFrZWZpbGUgc28gdGhhdCB5b3UgY2FuIGFkZCB5b3VyIG93bgorIyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgYW5kIGRlcGVuZGVuY2llcy4gUmVtZW1iZXIgdG8gZG8gaGF2ZSBhY3Rpb25zCisjIGZvciAiYXJjaGNsZWFuIiBjbGVhbmluZyB1cCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCisjCisjIE5pb3MyIHBvcnQgYnkgV2luZCBSaXZlciBTeXN0ZW1zIEluYyB0cm91Z2g6CisjICAgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorCitVVFNfU1lTTkFNRSA9IExpbnV4CisKK2V4cG9ydCBNTVUKKworTElCR0NDCQk6PSAkKHNoZWxsICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLXByaW50LWxpYmdjYy1maWxlLW5hbWUpCisKK0tCVUlMRF9DRkxBR1MgKz0gLXBpcGUgLURfX2xpbnV4X18gLURfX0VMRl9fCitLQlVJTERfQ0ZMQUdTICs9ICQoaWYgJChDT05GSUdfTklPUzJfSFdfTVVMX1NVUFBPUlQpLC1taHctbXVsLC1tbm8taHctbXVsKQorS0JVSUxEX0NGTEFHUyArPSAkKGlmICQoQ09ORklHX05JT1MyX0hXX01VTFhfU1VQUE9SVCksLW1ody1tdWx4LC1tbm8taHctbXVseCkKK0tCVUlMRF9DRkxBR1MgKz0gJChpZiAkKENPTkZJR19OSU9TMl9IV19ESVZfU1VQUE9SVCksLW1ody1kaXYsLW1uby1ody1kaXYpCitLQlVJTERfQ0ZMQUdTICs9ICQoaWYgJChDT05GSUdfTklPUzJfRlBVX1NVUFBPUlQpLC1tY3VzdG9tLWZwdS1jZmc9NjAtMSwpCisKK0tCVUlMRF9DRkxBR1MgKz0gLWZuby1vcHRpbWl6ZS1zaWJsaW5nLWNhbGxzCitLQlVJTERfQ0ZMQUdTICs9IC1EVVRTX1NZU05BTUU9XCIkKFVUU19TWVNOQU1FKVwiCitLQlVJTERfQ0ZMQUdTICs9IC1mbm8tYnVpbHRpbgorS0JVSUxEX0NGTEFHUyArPSAtRyAwCisKK2hlYWQteQkJOj0gYXJjaC9uaW9zMi9rZXJuZWwvaGVhZC5vCitsaWJzLXkJCSs9IGFyY2gvbmlvczIvbGliLyAkKExJQkdDQykKK2NvcmUteQkJKz0gYXJjaC9uaW9zMi9rZXJuZWwvIGFyY2gvbmlvczIvbW0vCitjb3JlLXkJCSs9IGFyY2gvbmlvczIvcGxhdGZvcm0vCisKK0lOU1RBTExfUEFUSCA/PSAvdGZ0cGJvb3QKK25pb3MyLWJvb3QgOj0gYXJjaC8kKEFSQ0gpL2Jvb3QKK0JPT1RfVEFSR0VUUyA9IHZtSW1hZ2UgekltYWdlCitQSE9OWSArPSAkKEJPT1RfVEFSR0VUUykgaW5zdGFsbAorS0JVSUxEX0lNQUdFIDo9ICQobmlvczItYm9vdCkvdm1JbWFnZQorCitpZm5lcSAoJChDT05GSUdfTklPUzJfRFRCX1NPVVJDRSksIiIpCisJY29yZS15CSs9ICQobmlvczItYm9vdCkvCitlbmRpZgorCithbGw6IHZtSW1hZ2UKKworYXJjaGNsZWFuOgorCSQoUSkkKE1BS0UpICQoY2xlYW4pPSQobmlvczItYm9vdCkKKworJS5kdGI6CisJJChRKSQoTUFLRSkgJChidWlsZCk9JChuaW9zMi1ib290KSAkKG5pb3MyLWJvb3QpLyRACisKK2R0YnM6CisJJChRKSQoTUFLRSkgJChidWlsZCk9JChuaW9zMi1ib290KSAkKG5pb3MyLWJvb3QpLyRACisKKyQoQk9PVF9UQVJHRVRTKTogdm1saW51eAorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQobmlvczItYm9vdCkgJChuaW9zMi1ib290KS8kQAorCitpbnN0YWxsOgorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQobmlvczItYm9vdCkgQk9PVElNQUdFPSQoS0JVSUxEX0lNQUdFKSBpbnN0YWxsCisKK2RlZmluZSBhcmNoaGVscAorICBlY2hvICAnKiB2bUltYWdlICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290ICgkKEtCVUlMRF9JTUFHRSkpJworICBlY2hvICAnICBpbnN0YWxsICAgICAgICAgLSBJbnN0YWxsIGtlcm5lbCB1c2luZycKKyAgZWNobyAgJyAgICAgICAgICAgICAgICAgICAgICh5b3VyKSB+L2Jpbi8kKElOU1RBTExLRVJORUwpIG9yJworICBlY2hvICAnICAgICAgICAgICAgICAgICAgICAgKGRpc3RyaWJ1dGlvbikgL3NiaW4vJChJTlNUQUxMS0VSTkVMKSBvcicKKyAgZWNobyAgJyAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgdG8gJCQoSU5TVEFMTF9QQVRIKScKKyAgZWNobyAgJyAgZHRicyAgICAgICAgICAgIC0gQnVpbGQgZGV2aWNlIHRyZWUgYmxvYnMgZm9yIGVuYWJsZWQgYm9hcmRzJworZW5kZWYKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvYm9vdC9NYWtlZmlsZSBiL2FyY2gvbmlvczIvYm9vdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTM5MmRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9ib290L01ha2VmaWxlCkBAIC0wLDAgKzEsNTIgQEAKKyMKKyMgYXJjaC9uaW9zMi9ib290L01ha2VmaWxlCisjCisjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKworVUlNQUdFX0xPQURBRERSID0gJChzaGVsbCAkKE5NKSB2bWxpbnV4IHwgYXdrICckJE5GID09ICJfc3RleHQiIHtwcmludCAkJDF9JykKK1VJTUFHRV9FTlRSWUFERFIgPSAkKHNoZWxsICQoTk0pIHZtbGludXggfCBhd2sgJyQkTkYgPT0gIl9zdGFydCIge3ByaW50ICQkMX0nKQorVUlNQUdFX0NPTVBSRVNTSU9OID0gZ3ppcAorCitPQkpDT1BZRkxBR1Nfdm1saW51eC5iaW4gOj0gLU8gYmluYXJ5CisKK3RhcmdldHMgKz0gdm1saW51eC5iaW4gdm1saW51eC5neiB2bUltYWdlCisKKyQob2JqKS92bWxpbnV4LmJpbjogdm1saW51eCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCisKKyQob2JqKS92bWxpbnV4Lmd6OiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQorCiskKG9iaikvdm1JbWFnZTogJChvYmopL3ZtbGludXguZ3oKKwkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UpCisJQCQoa2VjaG8pICdLZXJuZWw6ICRAIGlzIHJlYWR5JworCisjIFJ1bGUgdG8gYnVpbGQgZGV2aWNlIHRyZWUgYmxvYnMKK0RUQl9TUkMgOj0gJChwYXRzdWJzdCAiJSIsJSwkKENPTkZJR19OSU9TMl9EVEJfU09VUkNFKSkKKworIyBNYWtlIHN1cmUgdGhlIGdlbmVyYXRlZCBkdGIgZ2V0cyByZW1vdmVkIGR1cmluZyBjbGVhbgorZXh0cmEtJChDT05GSUdfTklPUzJfRFRCX1NPVVJDRV9CT09MKSArPSBzeXN0ZW0uZHRiCisKKyQob2JqKS9zeXN0ZW0uZHRiOiAkKERUQl9TUkMpIEZPUkNFCisJJChjYWxsIGNtZCxkdGMpCisKKyMgRW5zdXJlIHN5c3RlbS5kdGIgZXhpc3RzCiskKG9iaikvbGlua2VkX2R0Yi5vOiAkKG9iaikvc3lzdGVtLmR0YgorCitvYmotJChDT05GSUdfTklPUzJfRFRCX1NPVVJDRV9CT09MKSArPSBsaW5rZWRfZHRiLm8KKwordGFyZ2V0cyArPSAkKGR0Yi15KQorCisjIFJ1bGUgdG8gYnVpbGQgZGV2aWNlIHRyZWUgYmxvYnMgd2l0aCBtYWtlIGNvbW1hbmQKKyQob2JqKS8lLmR0YjogJChzcmMpL2R0cy8lLmR0cyBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxkdGMpCisKKyQob2JqKS9kdGJzOiAkKGFkZHByZWZpeCAkKG9iaikvLCAkKGR0Yi15KSkKKworY2xlYW4tZmlsZXMgOj0gKi5kdGIKKworaW5zdGFsbDoKKwlzaCAkKHNyY3RyZWUpLyQoc3JjKS9pbnN0YWxsLnNoICQoS0VSTkVMUkVMRUFTRSkgJChCT09USU1BR0UpIFN5c3RlbS5tYXAgIiQoSU5TVEFMTF9QQVRIKSIKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvYm9vdC9kdHMvM2MxMjBfZGV2Ym9hcmQuZHRzIGIvYXJjaC9uaW9zMi9ib290L2R0cy8zYzEyMF9kZXZib2FyZC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjNTFmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvYm9vdC9kdHMvM2MxMjBfZGV2Ym9hcmQuZHRzCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgc29wYzJkdHMuCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gImFsdHIscXN5c19naHJkXzNjMTIwIjsKKwljb21wYXRpYmxlID0gImFsdHIscXN5c19naHJkXzNjMTIwIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1OiBjcHVAMHgwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFsdHIsbmlvczItMS4wIjsKKwkJCXJlZyA9IDwweDAwMDAwMDAwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMjUwMDAwMDA+OworCQkJZGNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWRjYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCWljYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCWFsdHIsaW1wbGVtZW50YXRpb24gPSAiZmFzdCI7CisJCQlhbHRyLHBpZC1udW0tYml0cyA9IDw4PjsKKwkJCWFsdHIsdGxiLW51bS13YXlzID0gPDE2PjsKKwkJCWFsdHIsdGxiLW51bS1lbnRyaWVzID0gPDEyOD47CisJCQlhbHRyLHRsYi1wdHItc3ogPSA8Nz47CisJCQlhbHRyLGhhcy1kaXYgPSA8MT47CisJCQlhbHRyLGhhcy1tdWwgPSA8MT47CisJCQlhbHRyLHJlc2V0LWFkZHIgPSA8MHhjMjgwMDAwMD47CisJCQlhbHRyLGZhc3QtdGxiLW1pc3MtYWRkciA9IDwweGM3ZmZmNDAwPjsKKwkJCWFsdHIsZXhjZXB0aW9uLWFkZHIgPSA8MHhkMDAwMDAyMD47CisJCQlhbHRyLGhhcy1pbml0ZGEgPSA8MT47CisJCQlhbHRyLGhhcy1tbXUgPSA8MT47CisJCX07CisJfTsKKworCW1lbW9yeUAwIHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MTAwMDAwMDAgMHgwODAwMDAwMD4sCisJCQk8MHgwN2ZmZjQwMCAweDAwMDAwNDAwPjsKKwl9OworCisJc29wY0AwIHsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJcmFuZ2VzOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiYWx0cixhdmFsb24iLCAic2ltcGxlLWJ1cyI7CisJCWJ1cy1mcmVxdWVuY3kgPSA8MTI1MDAwMDAwPjsKKworCQlwYl9jcHVfdG9faW86IGJyaWRnZUAweDgwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXJlZyA9IDwweDA4MDAwMDAwIDB4MDA4MDAwMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlcyA9IDwweDAwMDAyMDAwIDB4MDgwMDIwMDAgMHgwMDAwMjAwMD4sCisJCQkJPDB4MDAwMDQwMDAgMHgwODAwNDAwMCAweDAwMDAwNDAwPiwKKwkJCQk8MHgwMDAwNDQwMCAweDA4MDA0NDAwIDB4MDAwMDAwNDA+LAorCQkJCTwweDAwMDA0ODAwIDB4MDgwMDQ4MDAgMHgwMDAwMDA0MD4sCisJCQkJPDB4MDAwMDRjODAgMHgwODAwNGM4MCAweDAwMDAwMDIwPiwKKwkJCQk8MHgwMDAwNGQ1MCAweDA4MDA0ZDUwIDB4MDAwMDAwMDg+LAorCQkJCTwweDAwMDA4MDAwIDB4MDgwMDgwMDAgMHgwMDAwMDAyMD4sCisJCQkJPDB4MDA0MDAwMDAgMHgwODQwMDAwMCAweDAwMDAwMDIwPjsKKworCQkJdGltZXJfMW1zOiB0aW1lckAweDQwMDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhbHRyLHRpbWVyLTEuMCI7CisJCQkJcmVnID0gPDB4MDA0MDAwMDAgMHgwMDAwMDAyMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmY3B1PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDExPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTI1MDAwMDAwPjsKKwkJCX07CisKKwkJCXRpbWVyXzA6IHRpbWVyQDB4ODAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhbHRyLHRpbWVyLTEuMCI7CisJCQkJcmVnID0gPCAweDAwMDA4MDAwIDB4MDAwMDAwMjAgPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmY3B1ID47CisJCQkJaW50ZXJydXB0cyA9IDwgNSA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwgMTI1MDAwMDAwID47CisJCQl9OworCisJCQlqdGFnX3VhcnQ6IHNlcmlhbEAweDRkNTAgeworCQkJCWNvbXBhdGlibGUgPSAiYWx0cixqdWFydC0xLjAiOworCQkJCXJlZyA9IDwweDAwMDA0ZDUwIDB4MDAwMDAwMDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmNwdT47CisJCQkJaW50ZXJydXB0cyA9IDwxPjsKKwkJCX07CisKKwkJCXRzZV9tYWM6IGV0aGVybmV0QDB4NDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJhbHRyLHRzZS0xLjAiOworCQkJCXJlZyA9IDwweDAwMDA0MDAwIDB4MDAwMDA0MDA+LAorCQkJCQk8MHgwMDAwNDQwMCAweDAwMDAwMDQwPiwKKwkJCQkJPDB4MDAwMDQ4MDAgMHgwMDAwMDA0MD4sCisJCQkJCTwweDAwMDAyMDAwIDB4MDAwMDIwMDA+OworCQkJCXJlZy1uYW1lcyA9ICJjb250cm9sX3BvcnQiLCAicnhfY3NyIiwgInR4X2NzciIsICJzMSI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmY3B1PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIgMz47CisJCQkJaW50ZXJydXB0LW5hbWVzID0gInJ4X2lycSIsICJ0eF9pcnEiOworCQkJCXJ4LWZpZm8tZGVwdGggPSA8ODE5Mj47CisJCQkJdHgtZmlmby1kZXB0aCA9IDw4MTkyPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDwxNTE4PjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCQlwaHktbW9kZSA9ICJyZ21paS1pZCI7CisJCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCQkJdHNlX21hY19tZGlvOiBtZGlvIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhbHRyLHRzZS1tZGlvIjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCQlwaHkwOiBldGhlcm5ldC1waHlAMTggeworCQkJCQkJcmVnID0gPDE4PjsKKwkJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCXVhcnQ6IHNlcmlhbEAweDRjODAgeworCQkJCWNvbXBhdGlibGUgPSAiYWx0cix1YXJ0LTEuMCI7CisJCQkJcmVnID0gPDB4MDAwMDRjODAgMHgwMDAwMDAyMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmY3B1PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDYyNTAwMDAwPjsKKwkJCX07CisJCX07CisKKwkJY2ZpX2ZsYXNoXzY0bTogZmxhc2hAMHgwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDQwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCXBhcnRpdGlvbkA4MDAwMDAgeworCQkJCXJlZyA9IDwweDAwODAwMDAwIDB4MDFlMDAwMDA+OworCQkJCWxhYmVsID0gIkpGRlMyIEZpbGVzeXN0ZW0iOworCQkJfTsKKwkJfTsKKwl9OworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiZGVidWcgY29uc29sZT10dHlKMCwxMTUyMDAiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9ib290L2luc3RhbGwuc2ggYi9hcmNoL25pb3MyL2Jvb3QvaW5zdGFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2IzZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9ib290L2luc3RhbGwuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk1IGJ5IExpbnVzIFRvcnZhbGRzCisjCisjIEFkYXB0ZWQgZnJvbSBjb2RlIGluIGFyY2gvaTM4Ni9ib290L01ha2VmaWxlIGJ5IEguIFBldGVyIEFudmluCisjCisjICJtYWtlIGluc3RhbGwiIHNjcmlwdCBmb3IgbmlvczIgYXJjaGl0ZWN0dXJlCisjCisjIEFyZ3VtZW50czoKKyMgICAkMSAtIGtlcm5lbCB2ZXJzaW9uCisjICAgJDIgLSBrZXJuZWwgaW1hZ2UgZmlsZQorIyAgICQzIC0ga2VybmVsIG1hcCBmaWxlCisjICAgJDQgLSBkZWZhdWx0IGluc3RhbGwgcGF0aCAoYmxhbmsgaWYgcm9vdCBkaXJlY3RvcnkpCisjCisKK3ZlcmlmeSAoKSB7CisJaWYgWyAhIC1mICIkMSIgXTsgdGhlbgorCQllY2hvICIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMgorCQllY2hvICIgKioqIE1pc3NpbmcgZmlsZTogJDEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMgorCQllY2hvICcgKioqIFlvdSBuZWVkIHRvIHJ1biAibWFrZSIgYmVmb3JlICJtYWtlIGluc3RhbGwiLicgMT4mMgorCQllY2hvICIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMgorCQlleGl0IDEKKwlmaQorfQorCisjIE1ha2Ugc3VyZSB0aGUgZmlsZXMgYWN0dWFsbHkgZXhpc3QKK3ZlcmlmeSAiJDIiCit2ZXJpZnkgIiQzIgorCisjIFVzZXIgbWF5IGhhdmUgYSBjdXN0b20gaW5zdGFsbCBzY3JpcHQKKworaWYgWyAteCB+L2Jpbi8ke0lOU1RBTExLRVJORUx9IF07IHRoZW4gZXhlYyB+L2Jpbi8ke0lOU1RBTExLRVJORUx9ICIkQCI7IGZpCitpZiBbIC14IC9zYmluLyR7SU5TVEFMTEtFUk5FTH0gXTsgdGhlbiBleGVjIC9zYmluLyR7SU5TVEFMTEtFUk5FTH0gIiRAIjsgZmkKKworIyBEZWZhdWx0IGluc3RhbGwgLSBzYW1lIGFzIG1ha2UgemxpbG8KKworaWYgWyAtZiAkNC92bWxpbnV6IF07IHRoZW4KKwltdiAkNC92bWxpbnV6ICQ0L3ZtbGludXoub2xkCitmaQorCitpZiBbIC1mICQ0L1N5c3RlbS5tYXAgXTsgdGhlbgorCW12ICQ0L1N5c3RlbS5tYXAgJDQvU3lzdGVtLm9sZAorZmkKKworY2F0ICQyID4gJDQvdm1saW51egorY3AgJDMgJDQvU3lzdGVtLm1hcAorCitzeW5jCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2Jvb3QvbGlua2VkX2R0Yi5TIGIvYXJjaC9uaW9zMi9ib290L2xpbmtlZF9kdGIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzFmOTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9ib290L2xpbmtlZF9kdGIuUwpAQCAtMCwwICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworLnNlY3Rpb24gLmR0Yi5pbml0LnJvZGF0YSwiYSIKKy5pbmNiaW4gImFyY2gvbmlvczIvYm9vdC9zeXN0ZW0uZHRiIgpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9jb25maWdzLzNjMTIwX2RlZmNvbmZpZyBiL2FyY2gvbmlvczIvY29uZmlncy8zYzEyMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1NDFmMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvY29uZmlncy8zYzEyMF9kZWZjb25maWcKQEAgLTAsMCArMSw3NyBAQAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX05PX0haX0lETEU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUdOQUxGRCBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUkZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VWRU5URkQgaXMgbm90IHNldAorIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU0xBQj15CitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTklPUzJfTUVNX0JBU0U9MHgxMDAwMDAwMAorQ09ORklHX05JT1MyX0hXX01VTF9TVVBQT1JUPXkKK0NPTkZJR19OSU9TMl9IV19ESVZfU1VQUE9SVD15CitDT05GSUdfQ1VTVE9NX0NBQ0hFX1NFVFRJTkdTPXkKK0NPTkZJR19OSU9TMl9EQ0FDSEVfU0laRT0weDgwMDAKK0NPTkZJR19OSU9TMl9JQ0FDSEVfU0laRT0weDgwMDAKKyMgQ09ORklHX05JT1MyX0NNRExJTkVfSUdOT1JFX0RUQiBpcyBub3Qgc2V0CitDT05GSUdfTklPUzJfUEFTU19DTURMSU5FPXkKK0NPTkZJR19ORVQ9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfVU5JWD15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfREVWVE1QRlM9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX0JMT0NLPXkKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQUxURVJBX1RTRT15CitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQUxURVJBX0pUQUdVQVJUPXkKK0NPTkZJR19TRVJJQUxfQUxURVJBX0pUQUdVQVJUX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BTFRFUkFfVUFSVD15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWV9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfU1VOUlBDX0RFQlVHPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9LYnVpbGQgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL0tidWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjE2MGJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTAsMCArMSw2NiBAQAorZ2VuZXJpYy15ICs9IGF0b21pYy5oCitnZW5lcmljLXkgKz0gYXV4dmVjLmgKK2dlbmVyaWMteSArPSBiYXJyaWVyLmgKK2dlbmVyaWMteSArPSBiaXRvcHMuaAorZ2VuZXJpYy15ICs9IGJpdHNwZXJsb25nLmgKK2dlbmVyaWMteSArPSBidWcuaAorZ2VuZXJpYy15ICs9IGJ1Z3MuaAorZ2VuZXJpYy15ICs9IGNsa2Rldi5oCitnZW5lcmljLXkgKz0gY3B1dGltZS5oCitnZW5lcmljLXkgKz0gY3VycmVudC5oCitnZW5lcmljLXkgKz0gZGV2aWNlLmgKK2dlbmVyaWMteSArPSBkaXY2NC5oCitnZW5lcmljLXkgKz0gZG1hLmgKK2dlbmVyaWMteSArPSBlbWVyZ2VuY3ktcmVzdGFydC5oCitnZW5lcmljLXkgKz0gZXJybm8uaAorZ2VuZXJpYy15ICs9IGV4ZWMuaAorZ2VuZXJpYy15ICs9IGZiLmgKK2dlbmVyaWMteSArPSBmY250bC5oCitnZW5lcmljLXkgKz0gZnRyYWNlLmgKK2dlbmVyaWMteSArPSBmdXRleC5oCitnZW5lcmljLXkgKz0gaGFyZGlycS5oCitnZW5lcmljLXkgKz0gaGFzaC5oCitnZW5lcmljLXkgKz0gaHdfaXJxLmgKK2dlbmVyaWMteSArPSBpb2N0bC5oCitnZW5lcmljLXkgKz0gaW9jdGxzLmgKK2dlbmVyaWMteSArPSBpcGNidWYuaAorZ2VuZXJpYy15ICs9IGlycV9yZWdzLmgKK2dlbmVyaWMteSArPSBpcnFfd29yay5oCitnZW5lcmljLXkgKz0ga2RlYnVnLmgKK2dlbmVyaWMteSArPSBrbWFwX3R5cGVzLmgKK2dlbmVyaWMteSArPSBrdm1fcGFyYS5oCitnZW5lcmljLXkgKz0gbG9jYWwuaAorZ2VuZXJpYy15ICs9IG1jc19zcGlubG9jay5oCitnZW5lcmljLXkgKz0gbW1hbi5oCitnZW5lcmljLXkgKz0gbW9kdWxlLmgKK2dlbmVyaWMteSArPSBtc2didWYuaAorZ2VuZXJpYy15ICs9IHBhcmFtLmgKK2dlbmVyaWMteSArPSBwY2kuaAorZ2VuZXJpYy15ICs9IHBlcmNwdS5oCitnZW5lcmljLXkgKz0gcG9sbC5oCitnZW5lcmljLXkgKz0gcG9zaXhfdHlwZXMuaAorZ2VuZXJpYy15ICs9IHByZWVtcHQuaAorZ2VuZXJpYy15ICs9IHJlc291cmNlLmgKK2dlbmVyaWMteSArPSBzY2F0dGVybGlzdC5oCitnZW5lcmljLXkgKz0gc2VjdGlvbnMuaAorZ2VuZXJpYy15ICs9IHNlZ21lbnQuaAorZ2VuZXJpYy15ICs9IHNlbWJ1Zi5oCitnZW5lcmljLXkgKz0gc2VyaWFsLmgKK2dlbmVyaWMteSArPSBzaG1idWYuaAorZ2VuZXJpYy15ICs9IHNobXBhcmFtLmgKK2dlbmVyaWMteSArPSBzaWdpbmZvLmgKK2dlbmVyaWMteSArPSBzaWduYWwuaAorZ2VuZXJpYy15ICs9IHNvY2tldC5oCitnZW5lcmljLXkgKz0gc29ja2lvcy5oCitnZW5lcmljLXkgKz0gc3BpbmxvY2suaAorZ2VuZXJpYy15ICs9IHN0YXQuaAorZ2VuZXJpYy15ICs9IHN0YXRmcy5oCitnZW5lcmljLXkgKz0gdGVybWJpdHMuaAorZ2VuZXJpYy15ICs9IHRlcm1pb3MuaAorZ2VuZXJpYy15ICs9IHRvcG9sb2d5LmgKK2dlbmVyaWMteSArPSB0cmFjZV9jbG9jay5oCitnZW5lcmljLXkgKz0gdHlwZXMuaAorZ2VuZXJpYy15ICs9IHVuYWxpZ25lZC5oCitnZW5lcmljLXkgKz0gdXNlci5oCitnZW5lcmljLXkgKz0gdmdhLmgKK2dlbmVyaWMteSArPSB4b3IuaApkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9hc20tbWFjcm9zLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2FzbS1tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWZhMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9hc20tbWFjcm9zLmgKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBNYWNybyB1c2VkIHRvIHNpbXBsaWZ5IGNvZGluZyBtdWx0aS1saW5lIGFzc2VtYmxlci4KKyAqIFNvbWUgb2YgdGhlIGJpdCB0ZXN0IG1hY3JvIGNhbiBzaW1wbGlmeSBkb3duIHRvIG9uZSBsaW5lCisgKiBkZXBlbmRpbmcgb24gdGhlIG1hc2sgdmFsdWUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqLworI2lmbmRlZiBfQVNNX05JT1MyX0FTTU1BQ1JPU19ICisjZGVmaW5lIF9BU01fTklPUzJfQVNNTUFDUk9TX0gKKy8qCisgKiBBTkRzIHJlZzIgd2l0aCBtYXNrIGFuZCBwbGFjZXMgdGhlIHJlc3VsdCBpbiByZWcxLgorICoKKyAqIFlvdSBjYW5ubm90IHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEFOREkzMglyZWcxLCByZWcyLCBtYXNrCisuaWYgXG1hc2sgJiAweGZmZmYKKwkuaWYgXG1hc2sgJiAweGZmZmYwMDAwCisJCW1vdmhpCVxyZWcxLCAlaGkoXG1hc2spCisJCW1vdnVpCVxyZWcxLCAlbG8oXG1hc2spCisJCWFuZAlccmVnMSwgXHJlZzEsIFxyZWcyCisJLmVsc2UKKwkJYW5kaQlccmVnMSwgXHJlZzIsICVsbyhcbWFzaykKKwkuZW5kaWYKKy5lbHNlCisJYW5kaGkJXHJlZzEsIFxyZWcyLCAlaGkoXG1hc2spCisuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBPUnMgcmVnMiB3aXRoIG1hc2sgYW5kIHBsYWNlcyB0aGUgcmVzdWx0IGluIHJlZzEuCisgKgorICogSXQgaXMgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBPUkkzMglyZWcxLCByZWcyLCBtYXNrCisuaWYgXG1hc2sgJiAweGZmZmYKKwkuaWYgXG1hc2sgJiAweGZmZmYwMDAwCisJCW9yaGkJXHJlZzEsIFxyZWcyLCAlaGkoXG1hc2spCisJCW9yaQlccmVnMSwgXHJlZzIsICVsbyhcbWFzaykKKwkuZWxzZQorCQlvcmkJXHJlZzEsIFxyZWcyLCAlbG8oXG1hc2spCisJLmVuZGlmCisuZWxzZQorCW9yaGkJXHJlZzEsIFxyZWcyLCAlaGkoXG1hc2spCisuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBYT1JzIHJlZzIgd2l0aCBtYXNrIGFuZCBwbGFjZXMgdGhlIHJlc3VsdCBpbiByZWcxLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gWE9SSTMyCXJlZzEsIHJlZzIsIG1hc2sKKy5pZiBcbWFzayAmIDB4ZmZmZgorCS5pZiBcbWFzayAmIDB4ZmZmZjAwMDAKKwkJeG9yaGkJXHJlZzEsIFxyZWcyLCAlaGkoXG1hc2spCisJCXhvcmkJXHJlZzEsIFxyZWcxLCAlbG8oXG1hc2spCisJLmVsc2UKKwkJeG9yaQlccmVnMSwgXHJlZzIsICVsbyhcbWFzaykKKwkuZW5kaWYKKy5lbHNlCisJeG9yaGkJXHJlZzEsIFxyZWcyLCAlaGkoXG1hc2spCisuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBUaGlzIGlzIGEgc3VwcG9ydCBtYWNybyBmb3IgQlRCWiAmIEJUQk5aLiAgSXQgY2hlY2tzCisgKiB0aGUgYml0IHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZCAzMiB2YWx1ZS4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUCXJlZzEsIHJlZzIsIGJpdAorLmlmIFxiaXQgPiAzMQorCS5lcnIKKy5lbHNlCisJLmlmIFxiaXQgPCAxNgorCQlhbmRpCVxyZWcxLCBccmVnMiwgKDEgPDwgXGJpdCkKKwkuZWxzZQorCQlhbmRoaQlccmVnMSwgXHJlZzIsICgxIDw8IChcYml0IC0gMTYpKQorCS5lbmRpZgorLmVuZGlmCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCBicmFuY2hlcyB0byBsYWJlbCBpZiB0aGUKKyAqIGJpdCBpcyB6ZXJvLiAgVGhlIHJlc3VsdCBvZiB0aGUgYml0IHRlc3QgaXMgc3RvcmVkIGluIHJlZzEuCisgKgorICogSXQgaXMgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVEJaCXJlZzEsIHJlZzIsIGJpdCwgbGFiZWwKKwlCVAlccmVnMSwgXHJlZzIsIFxiaXQKKwliZXEJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIGJyYW5jaGVzIHRvIGxhYmVsIGlmIHRoZQorICogYml0IGlzIG5vbi16ZXJvLiAgVGhlIHJlc3VsdCBvZiB0aGUgYml0IHRlc3QgaXMgc3RvcmVkIGluIHJlZzEuCisgKgorICogSXQgaXMgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVEJOWglyZWcxLCByZWcyLCBiaXQsIGxhYmVsCisJQlQJXHJlZzEsIFxyZWcyLCBcYml0CisJYm5lCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCB0aGVuIGNvbXBsaW1lbnRzIHRoZSBiaXQgaW4gcmVnMi4KKyAqIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLgorICoKKyAqIEl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUQwlyZWcxLCByZWcyLCBiaXQKKy5pZiBcYml0ID4gMzEKKwkuZXJyCisuZWxzZQorCS5pZiBcYml0IDwgMTYKKwkJYW5kaQlccmVnMSwgXHJlZzIsICgxIDw8IFxiaXQpCisJCXhvcmkJXHJlZzIsIFxyZWcyLCAoMSA8PCBcYml0KQorCS5lbHNlCisJCWFuZGhpCVxyZWcxLCBccmVnMiwgKDEgPDwgKFxiaXQgLSAxNikpCisJCXhvcmhpCVxyZWcyLCBccmVnMiwgKDEgPDwgKFxiaXQgLSAxNikpCisJLmVuZGlmCisuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIHRoZW4gc2V0cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4KKyAqCisgKiBJdCBpcyBOT1Qgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVFMJcmVnMSwgcmVnMiwgYml0CisuaWYgXGJpdCA+IDMxCisJLmVycgorLmVsc2UKKwkuaWYgXGJpdCA8IDE2CisJCWFuZGkJXHJlZzEsIFxyZWcyLCAoMSA8PCBcYml0KQorCQlvcmkJXHJlZzIsIFxyZWcyLCAoMSA8PCBcYml0KQorCS5lbHNlCisJCWFuZGhpCVxyZWcxLCBccmVnMiwgKDEgPDwgKFxiaXQgLSAxNikpCisJCW9yaGkJXHJlZzIsIFxyZWcyLCAoMSA8PCAoXGJpdCAtIDE2KSkKKwkuZW5kaWYKKy5lbmRpZgorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXQgaW4gcmVnMiBhbmQgdGhlbiByZXNldHMgdGhlIGJpdCBpbiByZWcyLgorICogVGhlIHJlc3VsdCBvZiB0aGUgYml0IHRlc3QgaXMgc3RvcmVkIGluIHJlZzEuCisgKgorICogSXQgaXMgTk9UIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRSCXJlZzEsIHJlZzIsIGJpdAorLmlmIFxiaXQgPiAzMQorCS5lcnIKKy5lbHNlCisJLmlmIFxiaXQgPCAxNgorCQlhbmRpCVxyZWcxLCBccmVnMiwgKDEgPDwgXGJpdCkKKwkJYW5kaQlccmVnMiwgXHJlZzIsICVsbyh+KDEgPDwgXGJpdCkpCisJLmVsc2UKKwkJYW5kaGkJXHJlZzEsIFxyZWcyLCAoMSA8PCAoXGJpdCAtIDE2KSkKKwkJYW5kaGkJXHJlZzIsIFxyZWcyLCAlbG8ofigxIDw8IChcYml0IC0gMTYpKSkKKwkuZW5kaWYKKy5lbmRpZgorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXQgaW4gcmVnMiBhbmQgdGhlbiBjb21wbGltZW50cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4gIElmIHRoZQorICogb3JpZ2luYWwgYml0IHdhcyB6ZXJvIGl0IGJyYW5jaGVzIHRvIGxhYmVsLgorICoKKyAqIEl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUQ0JaCXJlZzEsIHJlZzIsIGJpdCwgbGFiZWwKKwlCVEMJXHJlZzEsIFxyZWcyLCBcYml0CisJYmVxCVxyZWcxLCByMCwgXGxhYmVsCisuZW5kbQorCisvKgorICogVGVzdHMgdGhlIGJpdCBpbiByZWcyIGFuZCB0aGVuIGNvbXBsaW1lbnRzIHRoZSBiaXQgaW4gcmVnMi4KKyAqIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLiAgSWYgdGhlCisgKiBvcmlnaW5hbCBiaXQgd2FzIG5vbi16ZXJvIGl0IGJyYW5jaGVzIHRvIGxhYmVsLgorICoKKyAqIEl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUQ0JOWglyZWcxLCByZWcyLCBiaXQsIGxhYmVsCisJQlRDCVxyZWcxLCBccmVnMiwgXGJpdAorCWJuZQlccmVnMSwgcjAsIFxsYWJlbAorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXQgaW4gcmVnMiBhbmQgdGhlbiBzZXRzIHRoZSBiaXQgaW4gcmVnMi4KKyAqIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLiAgSWYgdGhlCisgKiBvcmlnaW5hbCBiaXQgd2FzIHplcm8gaXQgYnJhbmNoZXMgdG8gbGFiZWwuCisgKgorICogSXQgaXMgTk9UIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRTQloJcmVnMSwgcmVnMiwgYml0LCBsYWJlbAorCUJUUwlccmVnMSwgXHJlZzIsIFxiaXQKKwliZXEJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIHRoZW4gc2V0cyB0aGUgYml0IGluIHJlZzIuCisgKiBUaGUgcmVzdWx0IG9mIHRoZSBiaXQgdGVzdCBpcyBzdG9yZWQgaW4gcmVnMS4gIElmIHRoZQorICogb3JpZ2luYWwgYml0IHdhcyBub24temVybyBpdCBicmFuY2hlcyB0byBsYWJlbC4KKyAqCisgKiBJdCBpcyBOT1Qgc2FmZSB0byB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIHJlZzEgJiByZWcyLgorICovCisKKy5tYWNybyBCVFNCTloJcmVnMSwgcmVnMiwgYml0LCBsYWJlbAorCUJUUwlccmVnMSwgXHJlZzIsIFxiaXQKKwlibmUJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIHRoZW4gcmVzZXRzIHRoZSBiaXQgaW4gcmVnMi4KKyAqIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLiAgSWYgdGhlCisgKiBvcmlnaW5hbCBiaXQgd2FzIHplcm8gaXQgYnJhbmNoZXMgdG8gbGFiZWwuCisgKgorICogSXQgaXMgTk9UIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gQlRSQloJcmVnMSwgcmVnMiwgYml0LCBsYWJlbAorCUJUUglccmVnMSwgXHJlZzIsIFxiaXQKKwlibmUJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBUZXN0cyB0aGUgYml0IGluIHJlZzIgYW5kIHRoZW4gcmVzZXRzIHRoZSBiaXQgaW4gcmVnMi4KKyAqIFRoZSByZXN1bHQgb2YgdGhlIGJpdCB0ZXN0IGlzIHN0b3JlZCBpbiByZWcxLiAgSWYgdGhlCisgKiBvcmlnaW5hbCBiaXQgd2FzIG5vbi16ZXJvIGl0IGJyYW5jaGVzIHRvIGxhYmVsLgorICoKKyAqIEl0IGlzIE5PVCBzYWZlIHRvIHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IgcmVnMSAmIHJlZzIuCisgKi8KKworLm1hY3JvIEJUUkJOWglyZWcxLCByZWcyLCBiaXQsIGxhYmVsCisJQlRSCVxyZWcxLCBccmVnMiwgXGJpdAorCWJuZQlccmVnMSwgcjAsIFxsYWJlbAorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXRzIGluIG1hc2sgYWdhaW5zdCByZWcyIHN0b3JlcyB0aGUgcmVzdWx0IGluIHJlZzEuCisgKiBJZiB0aGUgYWxsIHRoZSBiaXRzIGluIHRoZSBtYXNrIGFyZSB6ZXJvIGl0IGJyYW5jaGVzIHRvIGxhYmVsLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gVFNUQloJcmVnMSwgcmVnMiwgbWFzaywgbGFiZWwKKwlBTkRJMzIJXHJlZzEsIFxyZWcyLCBcbWFzaworCWJlcQlccmVnMSwgcjAsIFxsYWJlbAorLmVuZG0KKworLyoKKyAqIFRlc3RzIHRoZSBiaXRzIGluIG1hc2sgYWdhaW5zdCByZWcyIHN0b3JlcyB0aGUgcmVzdWx0IGluIHJlZzEuCisgKiBJZiB0aGUgYW55IG9mIHRoZSBiaXRzIGluIHRoZSBtYXNrIGFyZSAxIGl0IGJyYW5jaGVzIHRvIGxhYmVsLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHJlZ2lzdGVyIGZvciByZWcxICYgcmVnMi4KKyAqLworCisubWFjcm8gVFNUQk5aCXJlZzEsIHJlZzIsIG1hc2ssIGxhYmVsCisJQU5ESTMyCVxyZWcxLCBccmVnMiwgXG1hc2sKKwlibmUJXHJlZzEsIHIwLCBcbGFiZWwKKy5lbmRtCisKKy8qCisgKiBQdXNoZXMgcmVnIG9udG8gdGhlIHN0YWNrLgorICovCisKKy5tYWNybyBQVVNICXJlZworCWFkZGkJc3AsIHNwLCAtNAorCXN0dwlccmVnLCAwKHNwKQorLmVuZG0KKworLyoKKyAqIFBvcHMgdGhlIHRvcCBvZiB0aGUgc3RhY2sgaW50byByZWcuCisgKi8KKworLm1hY3JvIFBPUAlyZWcKKwlsZHcJXHJlZywgMChzcCkKKwlhZGRpCXNwLCBzcCwgNAorLmVuZG0KKworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9BU01NQUNST1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOWY1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5M2NmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9DQUNIRV9ICisjZGVmaW5lIF9BU01fTklPUzJfQ0FDSEVfSAorCisjZGVmaW5lIE5JT1MyX0RDQUNIRV9TSVpFCUNPTkZJR19OSU9TMl9EQ0FDSEVfU0laRQorI2RlZmluZSBOSU9TMl9JQ0FDSEVfU0laRQlDT05GSUdfTklPUzJfSUNBQ0hFX1NJWkUKKyNkZWZpbmUgTklPUzJfRENBQ0hFX0xJTkVfU0laRQlDT05GSUdfTklPUzJfRENBQ0hFX0xJTkVfU0laRQorI2RlZmluZSBOSU9TMl9JQ0FDSEVfTElORV9TSElGVAk1CisjZGVmaW5lIE5JT1MyX0lDQUNIRV9MSU5FX1NJWkUJKDEgPDwgTklPUzJfSUNBQ0hFX0xJTkVfU0hJRlQpCisKKy8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQlOSU9TMl9JQ0FDSEVfTElORV9TSElGVAorI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkJTklPUzJfSUNBQ0hFX0xJTkVfU0laRQorCisjZGVmaW5lIEFSQ0hfRE1BX01JTkFMSUdOCUwxX0NBQ0hFX0JZVEVTCisKKyNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZAorI2RlZmluZSBfX19fY2FjaGVsaW5lX2FsaWduZWQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYWJiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9DQUNIRUZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L21tX3R5cGVzLmg+CisKKy8qCisgKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwYWdlIHBvaW50ZWQgdG8gYnkgYSBwdGUgaXMgY2xlYW4KKyAqIGFuZCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuaW5nIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gdGhlIHVzZXIuCisgKi8KKyNkZWZpbmUgUEdfZGNhY2hlX2NsZWFuIFBHX2FyY2hfMQorCitzdHJ1Y3QgbW1fc3RydWN0OworCitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9kdXBfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIsCisJdW5zaWduZWQgbG9uZyBwZm4pOworI2RlZmluZSBBUkNIX0lNUExFTUVOVFNfRkxVU0hfRENBQ0hFX1BBR0UgMQorZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworCitleHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKTsKKworI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9kY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9kY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkKKworZXh0ZXJuIHZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCXVuc2lnbmVkIGxvbmcgdXNlcl92YWRkciwKKwkJCQl2b2lkICpkc3QsIHZvaWQgKnNyYywgaW50IGxlbik7CitleHRlcm4gdm9pZCBjb3B5X2Zyb21fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQl1bnNpZ25lZCBsb25nIHVzZXJfdmFkZHIsCisJCQkJdm9pZCAqZHN0LCB2b2lkICpzcmMsIGludCBsZW4pOworCitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BU01fTklPUzJfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjMWYwZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vY2hlY2tzdW0uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1NfQ0hFQ0tTVU1fSAorI2RlZmluZSBfQVNNX05JT1NfQ0hFQ0tTVU1fSAorCisvKiBUYWtlIHRoZXNlIGZyb20gbGliL2NoZWNrc3VtLmMgKi8KK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOworZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weShjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwKKwkJCQlfX3dzdW0gc3VtKTsKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICpjc3VtX2Vycik7CisjZGVmaW5lIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soc3JjLCBkc3QsIGxlbiwgc3VtKQlcCisJY3N1bV9wYXJ0aWFsX2NvcHkoKHNyYyksIChkc3QpLCAobGVuKSwgKHN1bSkpCisKK2V4dGVybiBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpOworZXh0ZXJuIF9fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pOworCisvKgorICogRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KKyAqLworc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiYWRkCSUwLCAlMSwgJTBcbiIKKwkJImNtcGx0dQlyOCwgJTAsICUxXG4iCisJCSJzcmxpCSUwLCAlMCwgMTZcbiIKKwkJImFkZAklMCwgJTAsIHI4XG4iCisJCSJub3IJJTAsICUwLCAlMFxuIgorCQk6ICI9ciIgKHN1bSkKKwkJOiAiciIgKHN1bSA8PCAxNiksICIwIiAoc3VtKQorCQk6ICJyOCIpOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KSBzdW07Cit9CisKKy8qCisgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgorICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKKyAqLworI2RlZmluZSBjc3VtX3RjcHVkcF9ub2ZvbGQgY3N1bV90Y3B1ZHBfbm9mb2xkCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCV9fd3N1bSBzdW0pCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJhZGQJJTAsICUxLCAlMFxuIgorCQkiY21wbHR1CXI4LCAlMCwgJTFcbiIKKwkJImFkZAklMCwgJTAsIHI4XG4iCS8qIGFkZCBjYXJyeSAqLworCQkiYWRkCSUwLCAlMiwgJTBcbiIKKwkJImNtcGx0dQlyOCwgJTAsICUyXG4iCisJCSJhZGQJJTAsICUwLCByOFxuIgkvKiBhZGQgY2FycnkgKi8KKwkJImFkZAklMCwgJTMsICUwXG4iCisJCSJjbXBsdHUJcjgsICUwLCAlM1xuIgorCQkiYWRkCSUwLCAlMCwgcjhcbiIJLyogYWRkIGNhcnJ5ICovCisJCTogIj1yIiAoc3VtKSwgIj1yIiAoc2FkZHIpCisJCTogInIiIChkYWRkciksICJyIiAoKG50b2hzKGxlbikgPDwgMTYpICsgKHByb3RvICogMjU2KSksCisJCSAgIjAiIChzdW0pLAorCQkgICIxIiAoc2FkZHIpCisJCTogInI4Iik7CisKKwlyZXR1cm4gc3VtOworfQorCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCit7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsIGRhZGRyLCBsZW4sIHByb3RvLCBzdW0pKTsKK30KKworI2VuZGlmIC8qIF9BU01fTklPU19DSEVDS1NVTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NtcHhjaGcuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vY21weGNoZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTM4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NtcHhjaGcuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0NNUFhDSEdfSAorI2RlZmluZSBfQVNNX05JT1MyX0NNUFhDSEdfSAorCisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KKworI2RlZmluZSB4Y2hnKHB0ciwgeCkJXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSkpCisKK3N0cnVjdCBfX3hjaGdfZHVtbXkgeyB1bnNpZ25lZCBsb25nIGFbMTAwXTsgfTsKKyNkZWZpbmUgX194Zyh4KQkJKCh2b2xhdGlsZSBzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHgpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqcHRyLAorCQkJCQlpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCwgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkJImxkYgklMCwgJTJcbiIKKwkJCSJzdGIJJTEsICUyXG4iCisJCQk6ICI9JnIiICh0bXApCisJCQk6ICJyIiAoeCksICJtIiAoKl9feGcocHRyKSkKKwkJCTogIm1lbW9yeSIpOworCQlicmVhazsKKwljYXNlIDI6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkJImxkaAklMCwgJTJcbiIKKwkJCSJzdGgJJTEsICUyXG4iCisJCQk6ICI9JnIiICh0bXApCisJCQk6ICJyIiAoeCksICJtIiAoKl9feGcocHRyKSkKKwkJCTogIm1lbW9yeSIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkJImxkdwklMCwgJTJcbiIKKwkJCSJzdHcJJTEsICUyXG4iCisJCQk6ICI9JnIiICh0bXApCisJCQk6ICJyIiAoeCksICJtIiAoKl9feGcocHRyKSkKKwkJCTogIm1lbW9yeSIpOworCQlicmVhazsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHRtcDsKK30KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NtcHhjaGcuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jbXB4Y2hnLWxvY2FsLmg+CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX0NNUFhDSEdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jcHVpbmZvLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2NwdWluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODhmY2FlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9jcHVpbmZvLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfQ1BVSU5GT19ICisjZGVmaW5lIF9BU01fTklPUzJfQ1BVSU5GT19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgY3B1aW5mbyB7CisJLyogQ29yZSBDUFUgY29uZmlndXJhdGlvbiAqLworCWNoYXIgY3B1X2ltcGxbMTJdOworCXUzMiBjcHVfY2xvY2tfZnJlcTsKKwl1MzIgbW11OworCXUzMiBoYXNfZGl2OworCXUzMiBoYXNfbXVsOworCXUzMiBoYXNfbXVseDsKKworCS8qIENQVSBjYWNoZXMgKi8KKwl1MzIgaWNhY2hlX2xpbmVfc2l6ZTsKKwl1MzIgaWNhY2hlX3NpemU7CisJdTMyIGRjYWNoZV9saW5lX3NpemU7CisJdTMyIGRjYWNoZV9zaXplOworCisJLyogVExCICovCisJdTMyIHRsYl9waWRfbnVtX2JpdHM7CS8qIG51bWJlciBvZiBiaXRzIHVzZWQgZm9yIHRoZSBQSUQgaW4gVExCTUlTQyAqLworCXUzMiB0bGJfbnVtX3dheXM7CisJdTMyIHRsYl9udW1fd2F5c19sb2cyOworCXUzMiB0bGJfbnVtX2VudHJpZXM7CisJdTMyIHRsYl9udW1fbGluZXM7CisJdTMyIHRsYl9wdHJfc3o7CisKKwkvKiBBZGRyZXNzZXMgKi8KKwl1MzIgcmVzZXRfYWRkcjsKKwl1MzIgZXhjZXB0aW9uX2FkZHI7CisJdTMyIGZhc3RfdGxiX21pc3NfZXhjX2FkZHI7Cit9OworCitleHRlcm4gc3RydWN0IGNwdWluZm8gY3B1aW5mbzsKKworZXh0ZXJuIHZvaWQgc2V0dXBfY3B1aW5mbyh2b2lkKTsKKworI2VuZGlmIC8qIF9BU01fTklPUzJfQ1BVSU5GT19IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2RlbGF5LmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4ZTQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZGVsYXkuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0RFTEFZX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9ERUxBWV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kZWxheS5oPgorCisvKiBVbmRlZmluZWQgZnVuY3Rpb25zIHRvIGdldCBjb21waWxlLXRpbWUgZXJyb3JzICovCitleHRlcm4gdm9pZCBfX2JhZF91ZGVsYXkodm9pZCk7CitleHRlcm4gdm9pZCBfX2JhZF9uZGVsYXkodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKworI2VuZGlmIC8qIF9BU01fTklPUzJfREVMQVlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NTY3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfQVNNX05JT1MyX0RNQV9NQVBQSU5HX0gKKworI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kbWFfc3luY19mb3JfZGV2aWNlKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzd2l0Y2ggKGRpcmVjdGlvbikgeworCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyl2YWRkciwKKwkJCSh1bnNpZ25lZCBsb25nKSh2YWRkciArIHNpemUpKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQkvKgorCQkgKiBXZSBqdXN0IG5lZWQgdG8gZmx1c2ggdGhlIGNhY2hlcyBoZXJlICwgYnV0IE5pb3MyIGZsdXNoCisJCSAqIGluc3RydWN0aW9uIHdpbGwgZG8gYm90aCB3cml0ZWJhY2sgYW5kIGludmFsaWRhdGUuCisJCSAqLworCWNhc2UgRE1BX0JJRElSRUNUSU9OQUw6IC8qIGZsdXNoIGFuZCBpbnZhbGlkYXRlICovCisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyl2YWRkciwKKwkJCSh1bnNpZ25lZCBsb25nKSh2YWRkciArIHNpemUpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kbWFfc3luY19mb3JfY3B1KHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzd2l0Y2ggKGRpcmVjdGlvbikgeworCWNhc2UgRE1BX0JJRElSRUNUSU9OQUw6CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXZhZGRyLAorCQkJKHVuc2lnbmVkIGxvbmcpKHZhZGRyICsgc2l6ZSkpOworCQlicmVhazsKKwljYXNlIERNQV9UT19ERVZJQ0U6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCisjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCisKK3ZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZyk7CisKK3ZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLAorCQkJCQlzaXplX3Qgc2l6ZSwKKwkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlfX2RtYV9zeW5jX2Zvcl9kZXZpY2UocHRyLCBzaXplLCBkaXJlY3Rpb24pOworCXJldHVybiB2aXJ0X3RvX3BoeXMocHRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cit9CisKK2V4dGVybiBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIGRtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLAorCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwlpbnQgbmh3ZW50cmllcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJaWYgKCFkZXYtPmRtYV9tYXNrIHx8ICFkbWFfc3VwcG9ydGVkKGRldiwgbWFzaykpCisJCXJldHVybiAtRUlPOworCisJKmRldi0+ZG1hX21hc2sgPSBtYXNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyogZG1hX2FsbG9jX25vbmNvaGVyZW50KCkgcmV0dXJucyBub24tY2FjaGVhYmxlIG1lbW9yeSwgc28gdGhlcmUncyBubyBuZWVkIHRvCisqIGRvIGFueSBmbHVzaGluZyBoZXJlLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKK30KKworLyogZHJpdmVycy9iYXNlL2RtYS1tYXBwaW5nLmMgKi8KK2V4dGVybiBpbnQgZG1hX2NvbW1vbl9tbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCXZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gaW50IGRtYV9jb21tb25fZ2V0X3NndGFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCwKKwkJdm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCXNpemVfdCBzaXplKTsKKworI2RlZmluZSBkbWFfbW1hcF9jb2hlcmVudChkLCB2LCBjLCBoLCBzKSBkbWFfY29tbW9uX21tYXAoZCwgdiwgYywgaCwgcykKKyNkZWZpbmUgZG1hX2dldF9zZ3RhYmxlKGQsIHQsIHYsIGgsIHMpIGRtYV9jb21tb25fZ2V0X3NndGFibGUoZCwgdCwgdiwgaCwgcykKKworI2VuZGlmIC8qIF9BU01fTklPUzJfRE1BX01BUFBJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkNjU1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0VMRl9ICisjZGVmaW5lIF9BU01fTklPUzJfRUxGX0gKKworI2luY2x1ZGUgPHVhcGkvYXNtL2VsZi5oPgorCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fQUxURVJBX05JT1MyKQorCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikKKworI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAorI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CisKKy8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCisgICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCisgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLworCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRQkJMHhEMDAwMDAwMFVMCisKKy8qIHJlZ3MgaXMgc3RydWN0IHB0X3JlZ3MsIHByX3JlZyBpcyBlbGZfZ3JlZ3NldF90ICh3aGljaCBpcworICAgbm93IHN0cnVjdF91c2VyX3JlZ3MsIHRoZXkgYXJlIGRpZmZlcmVudCkgKi8KKworI2RlZmluZSBBUkNIX0hBU19TRVRVUF9BRERJVElPTkFMX1BBR0VTCTEKK3N0cnVjdCBsaW51eF9iaW5wcm07CitleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAorCWludCB1c2VzX2ludGVycCk7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhwcl9yZWcsIHJlZ3MpCQkJCVwKK3sgZG8gewkJCQkJCQkJCVwKKwkvKiBCbGVlY2guICovCQkJCQkJCVwKKwlwcl9yZWdbMF0gID0gcmVncy0+cjg7CQkJCQkJXAorCXByX3JlZ1sxXSAgPSByZWdzLT5yOTsJCQkJCQlcCisJcHJfcmVnWzJdICA9IHJlZ3MtPnIxMDsJCQkJCQlcCisJcHJfcmVnWzNdICA9IHJlZ3MtPnIxMTsJCQkJCQlcCisJcHJfcmVnWzRdICA9IHJlZ3MtPnIxMjsJCQkJCQlcCisJcHJfcmVnWzVdICA9IHJlZ3MtPnIxMzsJCQkJCQlcCisJcHJfcmVnWzZdICA9IHJlZ3MtPnIxNDsJCQkJCQlcCisJcHJfcmVnWzddICA9IHJlZ3MtPnIxNTsJCQkJCQlcCisJcHJfcmVnWzhdICA9IHJlZ3MtPnIxOwkJCQkJCVwKKwlwcl9yZWdbOV0gID0gcmVncy0+cjI7CQkJCQkJXAorCXByX3JlZ1sxMF0gPSByZWdzLT5yMzsJCQkJCQlcCisJcHJfcmVnWzExXSA9IHJlZ3MtPnI0OwkJCQkJCVwKKwlwcl9yZWdbMTJdID0gcmVncy0+cjU7CQkJCQkJXAorCXByX3JlZ1sxM10gPSByZWdzLT5yNjsJCQkJCQlcCisJcHJfcmVnWzE0XSA9IHJlZ3MtPnI3OwkJCQkJCVwKKwlwcl9yZWdbMTVdID0gcmVncy0+b3JpZ19yMjsJCQkJCVwKKwlwcl9yZWdbMTZdID0gcmVncy0+cmE7CQkJCQkJXAorCXByX3JlZ1sxN10gPSByZWdzLT5mcDsJCQkJCQlcCisJcHJfcmVnWzE4XSA9IHJlZ3MtPnNwOwkJCQkJCVwKKwlwcl9yZWdbMTldID0gcmVncy0+Z3A7CQkJCQkJXAorCXByX3JlZ1syMF0gPSByZWdzLT5lc3RhdHVzOwkJCQkJXAorCXByX3JlZ1syMV0gPSByZWdzLT5lYTsJCQkJCQlcCisJcHJfcmVnWzIyXSA9IHJlZ3MtPm9yaWdfcjc7CQkJCQlcCisJewkJCQkJCQkJXAorCQlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MpIC0gMTsgXAorCQlwcl9yZWdbMjNdID0gc3ctPnIxNjsJCQkJCVwKKwkJcHJfcmVnWzI0XSA9IHN3LT5yMTc7CQkJCQlcCisJCXByX3JlZ1syNV0gPSBzdy0+cjE4OwkJCQkJXAorCQlwcl9yZWdbMjZdID0gc3ctPnIxOTsJCQkJCVwKKwkJcHJfcmVnWzI3XSA9IHN3LT5yMjA7CQkJCQlcCisJCXByX3JlZ1syOF0gPSBzdy0+cjIxOwkJCQkJXAorCQlwcl9yZWdbMjldID0gc3ctPnIyMjsJCQkJCVwKKwkJcHJfcmVnWzMwXSA9IHN3LT5yMjM7CQkJCQlcCisJCXByX3JlZ1szMV0gPSBzdy0+ZnA7CQkJCQlcCisJCXByX3JlZ1szMl0gPSBzdy0+Z3A7CQkJCQlcCisJCXByX3JlZ1szM10gPSBzdy0+cmE7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCk7IH0KKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgY3B1IHN1cHBvcnRzLiAgKi8KKworI2RlZmluZSBFTEZfSFdDQVAJKDApCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLiAgKi8KKworI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9lbnRyeS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9lbnRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMzdmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2VudHJ5LmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfRU5UUllfSAorI2RlZmluZSBfQVNNX05JT1MyX0VOVFJZX0gKKworI2lmZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKworLyoKKyAqIFN0YW5kYXJkIE5pb3MyIGludGVycnVwdCBlbnRyeSBhbmQgZXhpdCBtYWNyb3MuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KKy5tYWNybyBTQVZFX0FMTAorCXJkY3RsCXIyNCwgZXN0YXR1cworCWFuZGkJcjI0LCByMjQsIEVTVEFUVVNfRVUKKwliZXEJcjI0LCByMCwgMWYgLyogSW4gc3VwZXJ2aXNvciBtb2RlLCBhbHJlYWR5IG9uIGtlcm5lbCBzdGFjayAqLworCisJbW92aWEJcjI0LCBfY3VycmVudF90aHJlYWQJLyogU3dpdGNoIHRvIGN1cnJlbnQga2VybmVsIHN0YWNrICovCisJbGR3CXIyNCwgMChyMjQpCQkvKiB1c2luZyB0aGUgdGhyZWFkX2luZm8gKi8KKwlhZGRpCXIyNCwgcjI0LCBUSFJFQURfU0laRS1QVF9SRUdTX1NJWkUKKwlzdHcJc3AsIFBUX1NQKHIyNCkJCS8qIFNhdmUgdXNlciBzdGFjayBiZWZvcmUgY2hhbmdpbmcgKi8KKwltb3YJc3AsIHIyNAorCWJyCTJmCisKKzEgOgltb3YJcjI0LCBzcAorCWFkZGkJc3AsIHNwLCAtUFRfUkVHU19TSVpFCS8qIEJhY2t1cCB0aGUga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KKwlzdHcJcjI0LCBQVF9TUChzcCkKKzIgOglzdHcJcjEsIFBUX1IxKHNwKQorCXN0dwlyMiwgUFRfUjIoc3ApCisJc3R3CXIzLCBQVF9SMyhzcCkKKwlzdHcJcjQsIFBUX1I0KHNwKQorCXN0dwlyNSwgUFRfUjUoc3ApCisJc3R3CXI2LCBQVF9SNihzcCkKKwlzdHcJcjcsIFBUX1I3KHNwKQorCXN0dwlyOCwgUFRfUjgoc3ApCisJc3R3CXI5LCBQVF9SOShzcCkKKwlzdHcJcjEwLCBQVF9SMTAoc3ApCisJc3R3CXIxMSwgUFRfUjExKHNwKQorCXN0dwlyMTIsIFBUX1IxMihzcCkKKwlzdHcJcjEzLCBQVF9SMTMoc3ApCisJc3R3CXIxNCwgUFRfUjE0KHNwKQorCXN0dwlyMTUsIFBUX1IxNShzcCkKKwlzdHcJcjIsIFBUX09SSUdfUjIoc3ApCisJc3R3CXI3LCBQVF9PUklHX1I3KHNwKQorCisJc3R3CXJhLCBQVF9SQShzcCkKKwlzdHcJZnAsIFBUX0ZQKHNwKQorCXN0dwlncCwgUFRfR1Aoc3ApCisJcmRjdGwJcjI0LCBlc3RhdHVzCisJc3R3CXIyNCwgUFRfRVNUQVRVUyhzcCkKKwlzdHcJZWEsIFBUX0VBKHNwKQorLmVuZG0KKworLm1hY3JvIFJFU1RPUkVfQUxMCisJbGR3CXIxLCBQVF9SMShzcCkJCS8qIFJlc3RvcmUgcmVnaXN0ZXJzICovCisJbGR3CXIyLCBQVF9SMihzcCkKKwlsZHcJcjMsIFBUX1IzKHNwKQorCWxkdwlyNCwgUFRfUjQoc3ApCisJbGR3CXI1LCBQVF9SNShzcCkKKwlsZHcJcjYsIFBUX1I2KHNwKQorCWxkdwlyNywgUFRfUjcoc3ApCisJbGR3CXI4LCBQVF9SOChzcCkKKwlsZHcJcjksIFBUX1I5KHNwKQorCWxkdwlyMTAsIFBUX1IxMChzcCkKKwlsZHcJcjExLCBQVF9SMTEoc3ApCisJbGR3CXIxMiwgUFRfUjEyKHNwKQorCWxkdwlyMTMsIFBUX1IxMyhzcCkKKwlsZHcJcjE0LCBQVF9SMTQoc3ApCisJbGR3CXIxNSwgUFRfUjE1KHNwKQorCWxkdwlyYSwgUFRfUkEoc3ApCisJbGR3CWZwLCBQVF9GUChzcCkKKwlsZHcJZ3AsIFBUX0dQKHNwKQorCWxkdwlyMjQsIFBUX0VTVEFUVVMoc3ApCisJd3JjdGwJZXN0YXR1cywgcjI0CisJbGR3CWVhLCBQVF9FQShzcCkKKwlsZHcJc3AsIFBUX1NQKHNwKQkJLyogUmVzdG9yZSBzcCBsYXN0ICovCisuZW5kbQorCisubWFjcm8JU0FWRV9TV0lUQ0hfU1RBQ0sKKwlhZGRpCXNwLCBzcCwgLVNXSVRDSF9TVEFDS19TSVpFCisJc3R3CXIxNiwgU1dfUjE2KHNwKQorCXN0dwlyMTcsIFNXX1IxNyhzcCkKKwlzdHcJcjE4LCBTV19SMTgoc3ApCisJc3R3CXIxOSwgU1dfUjE5KHNwKQorCXN0dwlyMjAsIFNXX1IyMChzcCkKKwlzdHcJcjIxLCBTV19SMjEoc3ApCisJc3R3CXIyMiwgU1dfUjIyKHNwKQorCXN0dwlyMjMsIFNXX1IyMyhzcCkKKwlzdHcJZnAsIFNXX0ZQKHNwKQorCXN0dwlncCwgU1dfR1Aoc3ApCisJc3R3CXJhLCBTV19SQShzcCkKKy5lbmRtCisKKy5tYWNybwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCWxkdwlyMTYsIFNXX1IxNihzcCkKKwlsZHcJcjE3LCBTV19SMTcoc3ApCisJbGR3CXIxOCwgU1dfUjE4KHNwKQorCWxkdwlyMTksIFNXX1IxOShzcCkKKwlsZHcJcjIwLCBTV19SMjAoc3ApCisJbGR3CXIyMSwgU1dfUjIxKHNwKQorCWxkdwlyMjIsIFNXX1IyMihzcCkKKwlsZHcJcjIzLCBTV19SMjMoc3ApCisJbGR3CWZwLCBTV19GUChzcCkKKwlsZHcJZ3AsIFNXX0dQKHNwKQorCWxkdwlyYSwgU1dfUkEoc3ApCisJYWRkaQlzcCwgc3AsIFNXSVRDSF9TVEFDS19TSVpFCisuZW5kbQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX0FTTV9OSU9TMl9FTlRSWV9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwMmJmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vaW8uaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX0lPX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9JT19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWJpdHMuaD4KKworLyogUENJIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbmlvczIsIHNldCB0aGlzIHRvIDAuICovCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDAKKworI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpCXJlYWRiKGFkZHIpCisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikJcmVhZHcoYWRkcikKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKQlyZWFkbChhZGRyKQorCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkKHgsIGFkZHIpCXdyaXRlYih4LCBhZGRyKQorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCh4LCBhZGRyKQl3cml0ZXcoeCwgYWRkcikKKyNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQoeCwgYWRkcikJd3JpdGVsKHgsIGFkZHIpCisKK2V4dGVybiB2b2lkIF9faW9tZW0gKl9faW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQl1bnNpZ25lZCBsb25nIGNhY2hlZmxhZyk7CitleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCisJCQkJCQl1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwgc2l6ZSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX2lvdW5tYXAoYWRkcik7Cit9CisKKy8qIFBhZ2VzIHRvIHBoeXNpY2FsIGFkZHJlc3MuLi4gKi8KKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCXZpcnRfdG9fcGh5cyhwYWdlX3RvX3ZpcnQocGFnZSkpCisjZGVmaW5lIHBhZ2VfdG9fYnVzKHBhZ2UpCXBhZ2VfdG9fdmlydChwYWdlKQorCisvKiBNYWNyb3MgdXNlZCBmb3IgY29udmVydGluZyBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIG1hcHBpbmdzLiAqLworI2RlZmluZSBwaHlzX3RvX3ZpcnQodmFkZHIpCVwKKwkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHZhZGRyKSB8IENPTkZJR19OSU9TMl9LRVJORUxfUkVHSU9OX0JBU0UpKQorLyogQ2xlYXIgdG9wIDMgYml0cyAqLworI2RlZmluZSB2aXJ0X3RvX3BoeXModmFkZHIpCVwKKwkoKHVuc2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBsb25nKSh2YWRkcikgJiB+MHhFMDAwMDAwMCkpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pby5oPgorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9JT19IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQwZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9JUlFfSAorI2RlZmluZSBfQVNNX05JT1MyX0lSUV9ICisKKyNkZWZpbmUgTklPUzJfQ1BVX05SX0lSUVMJMzIKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWFiOTJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhvbWFzIENob3UgPHRob21hc0B3eXRyb24uY29tLnR3PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisjaWZuZGVmIF9BU01fSVJRRkxBR1NfSAorI2RlZmluZSBfQVNNX0lSUUZMQUdTX0gKKworI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfbG9jYWxfc2F2ZV9mbGFncyh2b2lkKQoreworCXJldHVybiBSRENUTChDVExfU1RBVFVTKTsKK30KKworLyoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIEFMTCBzdGF0dXMgcmVnaXN0ZXIgZmxhZ3MsIG5vdCBvbmx5IHRoZSBpbnRlcnJ1cHQKKyAqIG1hc2sgZmxhZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlXUkNUTChDVExfU1RBVFVTLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2xvY2FsX2lycV9kaXNhYmxlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWZsYWdzID0gYXJjaF9sb2NhbF9zYXZlX2ZsYWdzKCk7CisJYXJjaF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyAmIH5TVEFUVVNfUElFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmbGFncyA9IGFyY2hfbG9jYWxfc2F2ZV9mbGFncygpOworCWFyY2hfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MgfCBTVEFUVVNfUElFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJjaF9pcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIChmbGFncyAmIFNUQVRVU19QSUUpID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaXJxc19kaXNhYmxlZCh2b2lkKQoreworCXJldHVybiBhcmNoX2lycXNfZGlzYWJsZWRfZmxhZ3MoYXJjaF9sb2NhbF9zYXZlX2ZsYWdzKCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF9sb2NhbF9pcnFfc2F2ZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmbGFncyA9IGFyY2hfbG9jYWxfc2F2ZV9mbGFncygpOworCWFyY2hfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MgJiB+U1RBVFVTX1BJRSk7CisJcmV0dXJuIGZsYWdzOworfQorCisjZW5kaWYgLyogX0FTTV9JUlFGTEFHU19IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2xpbmthZ2UuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYzZkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2xpbmthZ2UuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfTElOS0FHRV9ICisjZGVmaW5lIF9BU01fTklPUzJfTElOS0FHRV9ICisKKy8qIFRoaXMgZmlsZSBpcyByZXF1aXJlZCBieSBpbmNsdWRlL2xpbnV4L2xpbmthZ2UuaCAqLworI2RlZmluZSBfX0FMSUdOIC5hbGlnbiA0CisjZGVmaW5lIF9fQUxJR05fU1RSICIuYWxpZ24gNCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWMwYjEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX01NVV9ICisjZGVmaW5lIF9BU01fTklPUzJfTU1VX0gKKworLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKKworI2VuZGlmIC8qIF9BU01fTklPUzJfTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRiNGIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICoKKyAqIGJhc2VkIG9uIE1JUFMgYXNtL21tdV9jb250ZXh0LmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfTU1VX0NPTlRFWFRfSAorI2RlZmluZSBfQVNNX05JT1MyX01NVV9DT05URVhUX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+CisKK2V4dGVybiB2b2lkIG1tdV9jb250ZXh0X2luaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfcGlkX2Zyb21fY29udGV4dChtbV9jb250ZXh0X3QgKmN0eCk7CisKKy8qCisgKiBGb3IgdGhlIGZhc3QgdGxiIG1pc3MgaGFuZGxlcnMsIHdlIGtlZXAgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHBnZC4KKyAqIHByb2Nlc3Nvci4KKyAqLworZXh0ZXJuIHBnZF90ICpwZ2RfY3VycmVudDsKKworc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGNvbnRleHQgcmVsYXRlZCBpbmZvIGZvciBhIG5ldyBtbV9zdHJ1Y3QgaW5zdGFuY2UuCisgKgorICogU2V0IGFsbCBuZXcgY29udGV4dHMgdG8gMCwgdGhhdCB3YXkgdGhlIGdlbmVyYXRpb24gd2lsbCBuZXZlciBtYXRjaAorICogdGhlIGN1cnJlbnRseSBydW5uaW5nIGdlbmVyYXRpb24gd2hlbiB0aGlzIGNvbnRleHQgaXMgc3dpdGNoZWQgaW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCW1tLT5jb250ZXh0ID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlc3Ryb3kgY29udGV4dCByZWxhdGVkIGluZm8gZm9yIGFuIG1tX3N0cnVjdCB0aGF0IGlzIGFib3V0CisgKiB0byBiZSBwdXQgdG8gcmVzdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKwordm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCitzdGF0aWMgaW5saW5lIHZvaWQgZGVhY3RpdmF0ZV9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworLyoKKyAqIEFmdGVyIHdlIGhhdmUgc2V0IGN1cnJlbnQtPm1tIHRvIGEgbmV3IHZhbHVlLCB0aGlzIGFjdGl2YXRlcworICogdGhlIGNvbnRleHQgZm9yIHRoZSBuZXcgbW0gc28gd2Ugc2VlIHRoZSBuZXcgbWFwcGluZ3MuCisgKi8KK3ZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCk7CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX01NVV9DT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbXV0ZXguaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vbXV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjYxMDFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9tdXRleC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzMmQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIE1NVSBzdXBwb3J0IGJhc2VkIG9uIGFzbS9wYWdlLmggZnJvbSBtaXBzIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCAtIDE5OTksIDIwMDAsIDAzIFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfUEFHRV9ICisjZGVmaW5lIF9BU01fTklPUzJfUEFHRV9ICisKKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorCisvKgorICogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUKKyAqLworI2RlZmluZSBQQUdFX1NISUZUCTEyCisjZGVmaW5lIFBBR0VfU0laRQkoX0FDKDEsIFVMKSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFIC0gMSkpCisKKy8qCisgKiBQQUdFX09GRlNFVCAtLSB0aGUgZmlyc3QgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZSBvZiBtZW1vcnkuCisgKi8KKyNkZWZpbmUgUEFHRV9PRkZTRVQJXAorCShDT05GSUdfTklPUzJfTUVNX0JBU0UgKyBDT05GSUdfTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogVGhpcyBnaXZlcyB0aGUgcGh5c2ljYWwgUkFNIG9mZnNldC4KKyAqLworI2RlZmluZSBQSFlTX09GRlNFVAkJQ09ORklHX05JT1MyX01FTV9CQVNFCisKKy8qCisgKiBJdCdzIG5vcm1hbGx5IGRlZmluZWQgb25seSBmb3IgRkxBVE1FTSBjb25maWcgYnV0IGl0J3MKKyAqIHVzZWQgaW4gb3VyIGVhcmx5IG1lbSBpbml0IGNvZGUgZm9yIGFsbCBtZW1vcnkgbW9kZWxzLgorICogU28gYWx3YXlzIGRlZmluZSBpdC4KKyAqLworI2RlZmluZSBBUkNIX1BGTl9PRkZTRVQJCVBGTl9VUChQSFlTX09GRlNFVCkKKworI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpCW1lbXNldCgocGFnZSksIDAsIFBBR0VfU0laRSkKKyNkZWZpbmUgY29weV9wYWdlKHRvLCBmcm9tKQltZW1jcHkoKHRvKSwgKGZyb20pLCBQQUdFX1NJWkUpCisKK3N0cnVjdCBwYWdlOworCitleHRlcm4gdm9pZCBjbGVhcl91c2VyX3BhZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdnRvLCB2b2lkICp2ZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwKKwkJCQlzdHJ1Y3QgcGFnZSAqdG8pOworCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLgorICovCit0eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CisKKyNkZWZpbmUgcHRlX3ZhbCh4KQkoKHgpLnB0ZSkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpLnBnZCkKKyNkZWZpbmUgcGdwcm90X3ZhbCh4KQkoKHgpLnBncHJvdCkKKworI2RlZmluZSBfX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KSB9KQorI2RlZmluZSBfX3BnZCh4KQkoKHBnZF90KSB7ICh4KSB9KQorI2RlZmluZSBfX3BncHJvdCh4KQkoKHBncHJvdF90KSB7ICh4KSB9KQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfZW5kOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3NpemU7CisKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqbWVtX21hcDsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworIyBkZWZpbmUgX19wYSh4KQkJXAorCSgodW5zaWduZWQgbG9uZykoeCkgLSBQQUdFX09GRlNFVCArIFBIWVNfT0ZGU0VUKQorIyBkZWZpbmUgX192YSh4KQkJXAorCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkgKyBQQUdFX09GRlNFVCAtIFBIWVNfT0ZGU0VUKSkKKworI2RlZmluZSBwYWdlX3RvX3ZpcnQocGFnZSkJXAorCSgoKChwYWdlKSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpICsgUEFHRV9PRkZTRVQpCisKKyMgZGVmaW5lIHBmbl90b19rYWRkcihwZm4pCV9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkKKyMgZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gQVJDSF9QRk5fT0ZGU0VUICYmCVwKKwkJCQkJKHBmbikgPCBtYXhfbWFwbnIpCisKKyMgZGVmaW5lIHZpcnRfdG9fcGFnZSh2YWRkcikJcGZuX3RvX3BhZ2UoUEZOX0RPV04odmlydF90b19waHlzKHZhZGRyKSkpCisjIGRlZmluZSB2aXJ0X2FkZHJfdmFsaWQodmFkZHIpCXBmbl92YWxpZChQRk5fRE9XTih2aXJ0X3RvX3BoeXModmFkZHIpKSkKKworIyBkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBcCisJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyMgZGVmaW5lIFVOQ0FDX0FERFIoYWRkcikJXAorCSgodm9pZCAqKSgodW5zaWduZWQpKGFkZHIpIHwgQ09ORklHX05JT1MyX0lPX1JFR0lPTl9CQVNFKSkKKyMgZGVmaW5lIENBQ19BRERSKGFkZHIpCQlcCisJKCh2b2lkICopKCgodW5zaWduZWQpKGFkZHIpICYgfkNPTkZJR19OSU9TMl9JT19SRUdJT05fQkFTRSkgfAlcCisJCUNPTkZJR19OSU9TMl9LRVJORUxfUkVHSU9OX0JBU0UpKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9nZXRvcmRlci5oPgorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyOTg1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAyMDAxLCAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfUEdBTExPQ19ICisjZGVmaW5lIF9BU01fTklPUzJfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKKwlwdGVfdCAqcHRlKQoreworCXNldF9wbWQocG1kLCBfX3BtZCgodW5zaWduZWQgbG9uZylwdGUpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKKwlwZ3RhYmxlX3QgcHRlKQoreworCXNldF9wbWQocG1kLCBfX3BtZCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocHRlKSkpOworfQorI2RlZmluZSBwbWRfcGd0YWJsZShwbWQpIHBtZF9wYWdlKHBtZCkKKworLyoKKyAqIEluaXRpYWxpemUgYSBuZXcgcG1kIHRhYmxlIHdpdGggaW52YWxpZCBwb2ludGVycy4KKyAqLworZXh0ZXJuIHZvaWQgcG1kX2luaXQodW5zaWduZWQgbG9uZyBwYWdlLCB1bnNpZ25lZCBsb25nIHBhZ2V0YWJsZSk7CisKK2V4dGVybiBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworc3RhdGljIGlubGluZSB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQoreworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGdkLCBQR0RfT1JERVIpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcHRlX3QgKnB0ZTsKKworCXB0ZSA9IChwdGVfdCAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUfF9fR0ZQX1pFUk8sCisJCQkJCVBURV9PUkRFUik7CisKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgcGFnZSAqcHRlOworCisJcHRlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCwgUFRFX09SREVSKTsKKwlpZiAocHRlKSB7CisJCWlmICghcGd0YWJsZV9wYWdlX2N0b3IocHRlKSkgeworCQkJX19mcmVlX3BhZ2UocHRlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWNsZWFyX2hpZ2hwYWdlKHB0ZSk7CisJfQorCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB0ZV90ICpwdGUpCit7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwdGUsIFBURV9PUkRFUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHBhZ2UgKnB0ZSkKK3sKKwlwZ3RhYmxlX3BhZ2VfZHRvcihwdGUpOworCV9fZnJlZV9wYWdlcyhwdGUsIFBURV9PUkRFUik7Cit9CisKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJcGd0YWJsZV9wYWdlX2R0b3IocHRlKTsJCQkJXAorCQl0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksIChwdGUpKTsJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLWJpdHMuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5ZTcwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1BHVEFCTEVfQklUU19ICisjZGVmaW5lIF9BU01fTklPUzJfUEdUQUJMRV9CSVRTX0gKKworLyoKKyAqIFRoZXNlIGFyZSBhY3R1YWwgaGFyZHdhcmUgZGVmaW5lZCBwcm90ZWN0aW9uIGJpdHMgaW4gdGhlIHRsYmFjYyByZWdpc3RlcgorICogd2hpY2ggbG9va3MgbGlrZSB0aGlzOgorICoKKyAqIDMxIDMwIC4uLiAyNiAyNSAyNCAyMyAyMiAyMSAyMCAxOSAxOCAuLi4gIDEgIDAKKyAqIGlnbm9yZWQuLi4uLi4uLiAgQyAgUiAgVyAgWCAgRyBQRk4uLi4uLi4uLi4uLi4KKyAqLworI2RlZmluZSBfUEFHRV9HTE9CQUwJKDE8PDIwKQorI2RlZmluZSBfUEFHRV9FWEVDCSgxPDwyMSkKKyNkZWZpbmUgX1BBR0VfV1JJVEUJKDE8PDIyKQorI2RlZmluZSBfUEFHRV9SRUFECSgxPDwyMykKKyNkZWZpbmUgX1BBR0VfQ0FDSEVECSgxPDwyNCkJLyogQzogZGF0YSBhY2Nlc3MgY2FjaGVhYmxlICovCisKKy8qCisgKiBTb2Z0d2FyZSBkZWZpbmVkIGJpdHMuIFRoZXkgYXJlIGlnbm9yZWQgYnkgdGhlIGhhcmR3YXJlIGFuZCBhbHdheXMgcmVhZCBiYWNrCisgKiBhcyB6ZXJvLCBidXQgY2FuIGJlIHdyaXR0ZW4gYXMgbm9uLXplcm8uCisgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkoMTw8MjUpCS8qIFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECSgxPDwyNikJLyogcGFnZSByZWZlcmVuY2VkICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCSgxPDwyNykJLyogZGlydHkgcGFnZSAqLworI2RlZmluZSBfUEFHRV9GSUxFCSgxPDwyOCkJLyogUFRFIHVzZWQgZm9yIGZpbGUgbWFwcGluZyBvciBzd2FwICovCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1BHVEFCTEVfQklUU19IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYmFmZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKgorICogQmFzZWQgb24gYXNtL3BndGFibGUtMzIuaCBmcm9tIG1pcHMgd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDAsIDIwMDMgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9QR1RBQkxFX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9QR1RBQkxFX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCisjaW5jbHVkZSA8YXNtL3BndGFibGUtYml0cy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKworI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAorCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJCUNPTkZJR19OSU9TMl9LRVJORUxfTU1VX1JFR0lPTl9CQVNFCisjZGVmaW5lIFZNQUxMT0NfRU5ECQkoQ09ORklHX05JT1MyX0tFUk5FTF9SRUdJT05fQkFTRSAtIDEpCisKK3N0cnVjdCBtbV9zdHJ1Y3Q7CisKKy8qIEhlbHBlciBtYWNybyAqLworI2RlZmluZSBNS1AoeCwgdywgcikgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0NBQ0hFRCB8CQlcCisJCQkJKCh4KSA/IF9QQUdFX0VYRUMgOiAwKSB8CQlcCisJCQkJKChyKSA/IF9QQUdFX1JFQUQgOiAwKSB8CQlcCisJCQkJKCh3KSA/IF9QQUdFX1dSSVRFIDogMCkpCisvKgorICogVGhlc2UgYXJlIHRoZSBtYWNyb3MgdGhhdCBnZW5lcmljIGtlcm5lbCBjb2RlIG5lZWRzCisgKiAodG8gcG9wdWxhdGUgcHJvdGVjdGlvbl9tYXBbXSkKKyAqLworCisvKiBSZW1vdmUgVyBiaXQgb24gcHJpdmF0ZSBwYWdlcyBmb3IgQ09XIHN1cHBvcnQgKi8KKyNkZWZpbmUgX19QMDAwCU1LUCgwLCAwLCAwKQorI2RlZmluZSBfX1AwMDEJTUtQKDAsIDAsIDEpCisjZGVmaW5lIF9fUDAxMAlNS1AoMCwgMCwgMCkJLyogQ09XICovCisjZGVmaW5lIF9fUDAxMQlNS1AoMCwgMCwgMSkJLyogQ09XICovCisjZGVmaW5lIF9fUDEwMAlNS1AoMSwgMCwgMCkKKyNkZWZpbmUgX19QMTAxCU1LUCgxLCAwLCAxKQorI2RlZmluZSBfX1AxMTAJTUtQKDEsIDAsIDApCS8qIENPVyAqLworI2RlZmluZSBfX1AxMTEJTUtQKDEsIDAsIDEpCS8qIENPVyAqLworCisvKiBTaGFyZWQgcGFnZXMgY2FuIGhhdmUgZXhhY3QgSFcgbWFwcGluZyAqLworI2RlZmluZSBfX1MwMDAJTUtQKDAsIDAsIDApCisjZGVmaW5lIF9fUzAwMQlNS1AoMCwgMCwgMSkKKyNkZWZpbmUgX19TMDEwCU1LUCgwLCAxLCAwKQorI2RlZmluZSBfX1MwMTEJTUtQKDAsIDEsIDEpCisjZGVmaW5lIF9fUzEwMAlNS1AoMSwgMCwgMCkKKyNkZWZpbmUgX19TMTAxCU1LUCgxLCAwLCAxKQorI2RlZmluZSBfX1MxMTAJTUtQKDEsIDEsIDApCisjZGVmaW5lIF9fUzExMQlNS1AoMSwgMSwgMSkKKworLyogVXNlZCBhbGwgb3ZlciB0aGUga2VybmVsICovCisjZGVmaW5lIFBBR0VfS0VSTkVMIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9DQUNIRUQgfCBfUEFHRV9SRUFEIHwgXAorCQkJICAgICBfUEFHRV9XUklURSB8IF9QQUdFX0VYRUMgfCBfUEFHRV9HTE9CQUwpCisKKyNkZWZpbmUgUEFHRV9TSEFSRUQgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0NBQ0hFRCB8IF9QQUdFX1JFQUQgfCBcCisJCQkgICAgIF9QQUdFX1dSSVRFIHwgX1BBR0VfQUNDRVNTRUQpCisKKyNkZWZpbmUgUEFHRV9DT1BZIE1LUCgwLCAwLCAxKQorCisjZGVmaW5lIFBHRF9PUkRFUgkwCisjZGVmaW5lIFBURV9PUkRFUgkwCisKKyNkZWZpbmUgUFRSU19QRVJfUEdECSgoUEFHRV9TSVpFIDw8IFBHRF9PUkRFUikgLyBzaXplb2YocGdkX3QpKQorI2RlZmluZSBQVFJTX1BFUl9QVEUJKChQQUdFX1NJWkUgPDwgUFRFX09SREVSKSAvIHNpemVvZihwdGVfdCkpCisKKyNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJXAorCShDT05GSUdfTklPUzJfS0VSTkVMX01NVV9SRUdJT05fQkFTRSAvIFBHRElSX1NJWkUpCisKKyNkZWZpbmUgUEdESVJfU0hJRlQJMjIKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKQkodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOworZXh0ZXJuIHB0ZV90IGludmFsaWRfcHRlX3RhYmxlW1BBR0VfU0laRS9zaXplb2YocHRlX3QpXTsKKworLyoKKyAqIChwbWRzIGFyZSBmb2xkZWQgaW50byBwdWRzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLAorICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLikKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHB0ciwgcG1kX3QgcG1kdmFsKQoreworCXBtZHB0ci0+cHVkLnBnZC5wZ2QgPSBwbWR2YWwucHVkLnBnZC5wZ2Q7Cit9CisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2RfaW5kZXgoYWRkcikJCSgoKGFkZHIpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QgLSAxKSkKKyNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcikJKChtbSktPnBnZCArIHBnZF9pbmRleChhZGRyKSkKKworc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJCVwKKwl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9XUklURTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJCVwKKwl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCVwKKwl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQkJXAorCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkJeyByZXR1cm4gMDsgfQorCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQgcGdwcm90X25vbmNhY2hlZAorCitzdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9ub25jYWNoZWQocGdwcm90X3QgX3Byb3QpCit7CisJdW5zaWduZWQgbG9uZyBwcm90ID0gcGdwcm90X3ZhbChfcHJvdCk7CisKKwlwcm90ICY9IH5fUEFHRV9DQUNIRUQ7CisKKwlyZXR1cm4gX19wZ3Byb3QocHJvdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gIShwdGVfdmFsKHB0ZSkgJiB+KF9QQUdFX0dMT0JBTHwweGYpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRlX3ByZXNlbnQocHRlX3QgcHRlKQlcCisJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfUFJFU0VOVDsgfQorCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQoreworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfV1JJVEU7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9ESVJUWTsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9BQ0NFU1NFRDsKKwlyZXR1cm4gcHRlOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfV1JJVEU7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCit7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0RJUlRZOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZTsgfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKK3sKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nIG1hc2sgPSBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9FWEVDOworCisJcHRlX3ZhbChwdGUpID0gKHB0ZV92YWwocHRlKSAmIH5tYXNrKSB8IChwZ3Byb3RfdmFsKG5ld3Byb3QpICYgbWFzayk7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1kX3ByZXNlbnQocG1kX3QgcG1kKQoreworCXJldHVybiAocG1kX3ZhbChwbWQpICE9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZSkKKwkJCSYmIChwbWRfdmFsKHBtZCkgIT0gMFVMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9jbGVhcihwbWRfdCAqcG1kcCkKK3sKKwlwbWRfdmFsKCpwbWRwKSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZTsKK30KKworI2RlZmluZSBwdGVfcGZuKHB0ZSkJCShwdGVfdmFsKHB0ZSkgJiAweGZmZmZmKQorI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJKF9fcHRlKHBmbiB8IHBncHJvdF92YWwocHJvdCkpKQorI2RlZmluZSBwdGVfcGFnZShwdGUpCQkocGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKSkKKworLyoKKyAqIFN0b3JlIGEgbGludXggUFRFIGludG8gdGhlIGxpbnV4IHBhZ2UgdGFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpCit7CisJKnB0ZXAgPSBwdGV2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKQoreworCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBwYWdlX3RvX3ZpcnQocHRlX3BhZ2UocHRldmFsKSk7CisKKwlmbHVzaF9kY2FjaGVfcmFuZ2UocGFkZHIsIHBhZGRyICsgUEFHRV9TSVpFKTsKKwlzZXRfcHRlKHB0ZXAsIHB0ZXZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9ub25lKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gKHBtZF92YWwocG1kKSA9PQorCQkodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGUpIHx8IChwbWRfdmFsKHBtZCkgPT0gMFVMKTsKK30KKworI2RlZmluZSBwbWRfYmFkKHBtZCkJKHBtZF92YWwocG1kKSAmIH5QQUdFX01BU0spCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlwdGVfdCBudWxsOworCisJcHRlX3ZhbChudWxsKSA9IChhZGRyID4+IFBBR0VfU0hJRlQpICYgMHhmOworCisJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgbnVsbCk7CisJZmx1c2hfdGxiX29uZShhZGRyKTsKK30KKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICovCisjZGVmaW5lIG1rX3B0ZShwYWdlLCBwcm90KQkocGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgcHJvdCkpCisKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKi8KKyNkZWZpbmUgcG1kX3BoeXMocG1kKQkJdmlydF90b19waHlzKCh2b2lkICopcG1kX3ZhbChwbWQpKQorI2RlZmluZSBwbWRfcGFnZShwbWQpCQkocGZuX3RvX3BhZ2UocG1kX3BoeXMocG1kKSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKQlwbWRfdmFsKHBtZCkKKworI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHIpCQkJXAorCSgocHRlX3QgKikgcGFnZV9hZGRyZXNzKHBtZF9wYWdlKCpkaXIpKSArCVwKKwkgKCgoYWRkcikgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpKQorCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEga2VybmVsIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyKQlwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyKQorCisvKiBHZXQgdGhlIGFkZHJlc3MgdG8gdGhlIFBURSBmb3IgYSB2YWRkciBpbiBzcGVjaWZpYyBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyKQkJCVwKKwkoKHB0ZV90ICopIHBtZF9wYWdlX3ZhZGRyKCooZGlyKSkgKwkJXAorCSAoKChhZGRyKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkpCisKKyNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKKwlwcl9lcnIoIiVzOiVkOiBiYWQgcHRlICUwOGx4LlxuIiwgXAorCQlfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjZGVmaW5lIHBnZF9FUlJPUihlKSBcCisJcHJfZXJyKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIFwKKwkJX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQorCisvKgorICogRW5jb2RlIGFuZCBkZWNvZGUgYSBzd2FwIGVudHJ5IChtdXN0IGJlICFwdGVfbm9uZShwdGUpICYmICFwdGVfcHJlc2VudChwdGUpCisgKiAmJiAhcHRlX2ZpbGUocHRlKSk6CisgKgorICogMzEgMzAgMjkgMjggMjcgMjYgMjUgMjQgMjMgMjIgMjEgMjAgMTkgMTggLi4uICAxICAwCisgKiAgMCAgMCAgMCAgMCB0eXBlLiAgMCAgMCAgMCAgMCAgMCAgMCBvZmZzZXQuLi4uLi4uLi4KKyAqCisgKiBUaGlzIGdpdmVzIHVzIHVwIHRvIDIqKjIgPSA0IHN3YXAgZmlsZXMgYW5kIDIqKjIwICogNEsgPSA0RyBwZXIgc3dhcCBmaWxlLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgb2Zmc2V0IGZpZWxkIGlzIGFsd2F5cyBub24temVybywgdGh1cyAhcHRlX25vbmUocHRlKSBpcyBhbHdheXMKKyAqIHRydWUuCisgKi8KKyNkZWZpbmUgX19zd3BfdHlwZShzd3ApCQkoKChzd3ApLnZhbCA+PiAyNikgJiAweDMpCisjZGVmaW5lIF9fc3dwX29mZnNldChzd3ApCSgoc3dwKS52YWwgJiAweGZmZmZmKQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmYpCSgoc3dwX2VudHJ5X3QpIHsgKCgodHlwZSkgJiAweDMpIDw8IDI2KSBcCisJCQkJCQkgfCAoKG9mZikgJiAweGZmZmZmKSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoc3dwKQkoKHB0ZV90KSB7IChzd3ApLnZhbCB9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQorCisvKiBFbmNvZGUgYW5kIGRlY29kZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgZW50cnkgKi8KKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjUKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkJKHB0ZV92YWwocHRlKSAmIDB4MWZmZmZmZikKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJX19wdGUoKChvZmYpICYgMHgxZmZmZmZmKSB8IF9QQUdFX0ZJTEUpCisKKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCQkoMSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KKworI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKQkJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbW11X2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZSk7CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkMzQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqIENvcHlyaWdodCAoQykgMjAwMSBLZW4gSGlsbCAoa2hpbGxAbWljcm90cm9uaXguY29tKQorICogICAgICAgICAgICAgICAgICAgIFZpYyBQaGlsbGlwcyAodmljQG1pY3JvdHJvbml4LmNvbSkKKyAqCisgKiBiYXNlZCBvbiBTUEFSQyBhc20vcHJvY2Vzc29yXzMyLmggd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IERhdmlkIFMuIE1pbGxlcgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9QUk9DRVNTT1JfSAorI2RlZmluZSBfQVNNX05JT1MyX1BST0NFU1NPUl9ICisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3JlZ2lzdGVycy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgTklPUzJfRkxBR19LVEhSRUFECTB4MDAwMDAwMDEJLyogdGFzayBpcyBhIGtlcm5lbCB0aHJlYWQgKi8KKworI2RlZmluZSBOSU9TMl9PUF9OT1AJCTB4MTg4M2EKKyNkZWZpbmUgTklPUzJfT1BfQlJFQUsJCTB4M2RhMDNhCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgU1RBQ0tfVE9QCVRBU0tfU0laRQorI2RlZmluZSBTVEFDS19UT1BfTUFYCVNUQUNLX1RPUAorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBLdXNlciBoZWxwZXJzIGlzIG1hcHBlZCB0byB0aGlzIHVzZXIgc3BhY2UgYWRkcmVzcyAqLworI2RlZmluZSBLVVNFUl9CQVNFCQkweDEwMDAKKyNkZWZpbmUgS1VTRVJfU0laRQkJKFBBR0VfU0laRSkKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CisgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCisgKi8KKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sOyB9KQorCisjIGRlZmluZSBUQVNLX1NJWkUJCTB4N0ZGRjAwMDBVTAorIyBkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFCShQQUdFX0FMSUdOKFRBU0tfU0laRSAvIDMpKQorCisvKiBUaGUgTmlvcyBwcm9jZXNzb3Igc3BlY2lmaWMgdGhyZWFkIHN0cnVjdC4gKi8KK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwlzdHJ1Y3QgcHRfcmVncyAqa3JlZ3M7CisKKwkvKiBDb250ZXh0IHN3aXRjaCBzYXZlZCBrZXJuZWwgc3RhdGUuICovCisJdW5zaWduZWQgbG9uZyBrc3A7CisJdW5zaWduZWQgbG9uZyBrcHNyOworfTsKKworI2RlZmluZSBJTklUX01NQVAgXAorCXsgJmluaXRfbW0sICgwKSwgKDApLCBfX3BncHJvdCgweDApLCBWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIH0KKworIyBkZWZpbmUgSU5JVF9USFJFQUQgewkJCVwKKwkua3JlZ3MJPSBOVUxMLAkJCVwKKwkua3NwCT0gMCwJCQlcCisJLmtwc3IJPSAwLAkJCVwKK30KKworZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHBjLAorCQkJdW5zaWduZWQgbG9uZyBzcCk7CisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCit7Cit9CisKKy8qIEZyZWUgY3VycmVudCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4uICovCitzdGF0aWMgaW5saW5lIHZvaWQgZXhpdF90aHJlYWQodm9pZCkKK3sKK30KKworLyogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuICovCisjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0c2spCSgodHNrKS0+dGhyZWFkLmtyZWdzLT5lYSkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKy8qIFByZXBhcmUgdG8gY29weSB0aHJlYWQgc3RhdGUgLSB1bmxhenkgYWxsIGxhenkgc3RhdHVzICovCisjZGVmaW5lIHByZXBhcmVfdG9fY29weSh0c2spCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSB0YXNrX3B0X3JlZ3MocCkgXAorCSgoc3RydWN0IHB0X3JlZ3MgKikoVEhSRUFEX1NJWkUgKyB0YXNrX3N0YWNrX3BhZ2UocCkpIC0gMSkKKworLyogVXNlZCBieSBwcm9jZnMgKi8KKyNkZWZpbmUgS1NUS19FSVAodHNrKQkoKHRzayktPnRocmVhZC5rcmVncy0+ZWEpCisjZGVmaW5lIEtTVEtfRVNQKHRzaykJKCh0c2spLT50aHJlYWQua3JlZ3MtPnNwKQorCisjZGVmaW5lIGNwdV9yZWxheCgpCWJhcnJpZXIoKQorI2RlZmluZSBjcHVfcmVsYXhfbG93bGF0ZW5jeSgpICBjcHVfcmVsYXgoKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZiMWNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogYmFzZWQgb24gbTY4ayBhc20vcHJvY2Vzc29yLmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfUFRSQUNFX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9QVFJBQ0VfSAorCisjaW5jbHVkZSA8dWFwaS9hc20vcHRyYWNlLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIHVzZXJfbW9kZShyZWdzKQkoKChyZWdzKS0+ZXN0YXR1cyAmIEVTVEFUVVNfRVUpKQorCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykJKChyZWdzKS0+cmEpCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykJCWluc3RydWN0aW9uX3BvaW50ZXIocmVncykKKyNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpCSgocmVncyktPnNwKQorZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOworCisjZGVmaW5lIGN1cnJlbnRfcHRfcmVncygpIFwKKwkoKHN0cnVjdCBwdF9yZWdzICopKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGhyZWFkX2luZm8oKSArIFRIUkVBRF9TSVpFKVwKKwkJLSAxKQorCitpbnQgZG9fc3lzY2FsbF90cmFjZV9lbnRlcih2b2lkKTsKK3ZvaWQgZG9fc3lzY2FsbF90cmFjZV9leGl0KHZvaWQpOworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9BU01fTklPUzJfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcmVnaXN0ZXJzLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3JlZ2lzdGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNWJjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3JlZ2lzdGVycy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1JFR0lTVEVSU19ICisjZGVmaW5lIF9BU01fTklPUzJfUkVHSVNURVJTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorI2VuZGlmCisKKy8qIGNvbnRyb2wgcmVnaXN0ZXIgbnVtYmVycyAqLworI2RlZmluZSBDVExfU1RBVFVTCTAKKyNkZWZpbmUgQ1RMX0VTVEFUVVMJMQorI2RlZmluZSBDVExfQlNUQVRVUwkyCisjZGVmaW5lIENUTF9JRU5BQkxFCTMKKyNkZWZpbmUgQ1RMX0lQRU5ESU5HCTQKKyNkZWZpbmUgQ1RMX0NQVUlECTUKKyNkZWZpbmUgQ1RMX1JTVjEJNgorI2RlZmluZSBDVExfRVhDRVBUSU9OCTcKKyNkZWZpbmUgQ1RMX1BURUFERFIJOAorI2RlZmluZSBDVExfVExCQUNDCTkKKyNkZWZpbmUgQ1RMX1RMQk1JU0MJMTAKKyNkZWZpbmUgQ1RMX1JTVjIJMTEKKyNkZWZpbmUgQ1RMX0JBREFERFIJMTIKKyNkZWZpbmUgQ1RMX0NPTkZJRwkxMworI2RlZmluZSBDVExfTVBVQkFTRQkxNAorI2RlZmluZSBDVExfTVBVQUNDCTE1CisKKy8qIGFjY2VzcyBjb250cm9sIHJlZ2lzdGVycyB1c2luZyBHQ0MgYnVpbHRpbnMgKi8KKyNkZWZpbmUgUkRDVEwocikJX19idWlsdGluX3JkY3RsKHIpCisjZGVmaW5lIFdSQ1RMKHIsIHYpCV9fYnVpbHRpbl93cmN0bChyLCB2KQorCisvKiBzdGF0dXMgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBTVEFUVVNfUElFCSgxIDw8IDApCS8qIHByb2Nlc3NvciBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFNUQVRVU19VCSgxIDw8IDEpCS8qIHVzZXIgbW9kZSAqLworI2RlZmluZSBTVEFUVVNfRUgJKDEgPDwgMikJLyogRXhjZXB0aW9uIG1vZGUgKi8KKworLyogZXN0YXR1cyByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIEVTVEFUVVNfRVBJRQkoMSA8PCAwKQkvKiBwcm9jZXNzb3IgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBFU1RBVFVTX0VVCSgxIDw8IDEpCS8qIHVzZXIgbW9kZSAqLworI2RlZmluZSBFU1RBVFVTX0VICSgxIDw8IDIpCS8qIEV4Y2VwdGlvbiBtb2RlICovCisKKy8qIHRsYm1pc2MgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBUTEJNSVNDX1BJRF9TSElGVAk0CisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBUTEJNSVNDX1BJRF9NQVNLCSgoMVVMIDw8IGNwdWluZm8udGxiX3BpZF9udW1fYml0cykgLSAxKQorI2VuZGlmCisjZGVmaW5lIFRMQk1JU0NfV0FZX01BU0sJMHhmCisjZGVmaW5lIFRMQk1JU0NfV0FZX1NISUZUCTIwCisKKyNkZWZpbmUgVExCTUlTQ19QSUQJKFRMQk1JU0NfUElEX01BU0sgPDwgVExCTUlTQ19QSURfU0hJRlQpCS8qIFRMQiBQSUQgKi8KKyNkZWZpbmUgVExCTUlTQ19XRQkoMSA8PCAxOCkJLyogVExCIHdyaXRlIGVuYWJsZSAqLworI2RlZmluZSBUTEJNSVNDX1JECSgxIDw8IDE5KQkvKiBUTEIgcmVhZCAqLworI2RlZmluZSBUTEJNSVNDX1dBWQkoVExCTUlTQ19XQVlfTUFTSyA8PCBUTEJNSVNDX1dBWV9TSElGVCkgLyogVExCIHdheSAqLworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9SRUdJU1RFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYmY4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfU0VUVVBfSAorI2RlZmluZSBfQVNNX05JT1MyX1NFVFVQX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NldHVwLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaWZkZWYgX19LRVJORUxfXworCitleHRlcm4gY2hhciBleGNlcHRpb25faGFuZGxlcl9ob29rW107CitleHRlcm4gY2hhciBmYXN0X2hhbmRsZXJbXTsKK2V4dGVybiBjaGFyIGZhc3RfaGFuZGxlcl9lbmRbXTsKKworZXh0ZXJuIHZvaWQgcGFnZXRhYmxlX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIHNldHVwX2Vhcmx5X3ByaW50ayh2b2lkKTsKKworI2VuZGlmLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9TRVRVUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3NpZ25hbC5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmNmMTFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zaWduYWwuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IEFsdGVyYSBDb3Jwb3JhdGlvbiAoQykgMjAxMy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisjaWZuZGVmIF9OSU9TMl9TSUdOQUxfSAorI2RlZmluZSBfTklPUzJfU0lHTkFMX0gKKworI2luY2x1ZGUgPHVhcGkvYXNtL3NpZ25hbC5oPgorCisjZW5kaWYJLyogX05JT1MyX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3N0cmluZy5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGRkNTcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zdHJpbmcuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1NUUklOR19ICisjZGVmaW5lIF9BU01fTklPUzJfU1RSSU5HX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTU1PVkUKKworZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgc2l6ZV90IGNvdW50KTsKK2V4dGVybiB2b2lkICptZW1jcHkodm9pZCAqZCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGNvdW50KTsKK2V4dGVybiB2b2lkICptZW1tb3ZlKHZvaWQgKmQsIGNvbnN0IHZvaWQgKnMsIHNpemVfdCBjb3VudCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1NUUklOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3N3aXRjaF90by5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDdiM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX0FTTV9OSU9TMl9TV0lUQ0hfVE9fSAorI2RlZmluZSBfQVNNX05JT1MyX1NXSVRDSF9UT19ICisKKy8qCisgKiBzd2l0Y2hfdG8obikgc2hvdWxkIHN3aXRjaCB0YXNrcyB0byB0YXNrIHB0ciwgZmlyc3QgY2hlY2tpbmcgdGhhdAorICogcHRyIGlzbid0IHRoZSBjdXJyZW50IHRhc2ssIGluIHdoaWNoIGNhc2UgaXQgZG9lcyBub3RoaW5nLiAgVGhpcworICogYWxzbyBjbGVhcnMgdGhlIFRTLWZsYWcgaWYgdGhlIHRhc2sgd2Ugc3dpdGNoZWQgdG8gaGFzIHVzZWQgdGhlCisgKiBtYXRoIGNvLXByb2Nlc3NvciBsYXRlc3QuCisgKi8KKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpCQkJXAorewkJCQkJCQlcCisJdm9pZCAqX2xhc3Q7CQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQlcCisJCSJtb3YJcjQsICUxXG4iCQkJXAorCQkibW92CXI1LCAlMlxuIgkJCVwKKwkJImNhbGwJcmVzdW1lXG4iCQkJXAorCQkibW92CSUwLHI0XG4iCQkJXAorCQk6ICI9ciIgKF9sYXN0KQkJCQlcCisJCTogInIiIChwcmV2KSwgInIiIChuZXh0KQkJXAorCQk6ICJyNCIsICJyNSIsICJyNyIsICJyOCIsICJyYSIpOwlcCisJKGxhc3QpID0gX2xhc3Q7CQkJCQlcCit9CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1NXSVRDSF9UT19IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTIyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCBBbHRlcmEgQ29ycG9yYXRpb24gKEMpIDwyMDE0Pi4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBfX0FTTV9OSU9TMl9TWVNDQUxMX0hfXworI2RlZmluZSBfX0FTTV9OSU9TMl9TWVNDQUxMX0hfXworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworc3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+cjI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3JvbGxiYWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZWdzLT5yMiA9IHJlZ3MtPm9yaWdfcjI7CisJcmVncy0+cjcgPSByZWdzLT5vcmlnX3I3OworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfZXJyb3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5yNyA/IHJlZ3MtPnIyIDogMDsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIHJlZ3MtPnIyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVycm9yLCBsb25nIHZhbCkKK3sKKwlpZiAoZXJyb3IpIHsKKwkJLyogZXJyb3IgPCAwLCBidXQgbmlvczIgdXNlcyA+IDAgcmV0dXJuIHZhbHVlICovCisJCXJlZ3MtPnIyID0gLWVycm9yOworCQlyZWdzLT5yNyA9IDE7CisJfSBlbHNlIHsKKwkJcmVncy0+cjIgPSB2YWw7CisJCXJlZ3MtPnI3ID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2dldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCXN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKwlCVUdfT04oaSArIG4gPiA2KTsKKworCXN3aXRjaCAoaSkgeworCWNhc2UgMDoKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJKmFyZ3MrKyA9IHJlZ3MtPnI0OworCWNhc2UgMToKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJKmFyZ3MrKyA9IHJlZ3MtPnI1OworCWNhc2UgMjoKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJKmFyZ3MrKyA9IHJlZ3MtPnI2OworCWNhc2UgMzoKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJKmFyZ3MrKyA9IHJlZ3MtPnI3OworCWNhc2UgNDoKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJKmFyZ3MrKyA9IHJlZ3MtPnI4OworCWNhc2UgNToKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJKmFyZ3MrKyA9IHJlZ3MtPnI5OworCWNhc2UgNjoKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3NldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCXN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJY29uc3QgdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKwlCVUdfT04oaSArIG4gPiA2KTsKKworCXN3aXRjaCAoaSkgeworCWNhc2UgMDoKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJcmVncy0+cjQgPSAqYXJncysrOworCWNhc2UgMToKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJcmVncy0+cjUgPSAqYXJncysrOworCWNhc2UgMjoKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJcmVncy0+cjYgPSAqYXJncysrOworCWNhc2UgMzoKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJcmVncy0+cjcgPSAqYXJncysrOworCWNhc2UgNDoKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJcmVncy0+cjggPSAqYXJncysrOworCWNhc2UgNToKKwkJaWYgKCFuLS0pCisJCQlicmVhazsKKwkJcmVncy0+cjkgPSAqYXJncysrOworCWNhc2UgNjoKKwkJaWYgKCFuKQorCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3lzY2FsbHMuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vc3lzY2FsbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQ1ZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgQWx0ZXJhIENvcnBvcmF0aW9uIChDKSAyMDEzLiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKyNpZm5kZWYgX19BU01fTklPUzJfU1lTQ0FMTFNfSAorI2RlZmluZSBfX0FTTV9OSU9TMl9TWVNDQUxMU19ICisKK2ludCBzeXNfY2FjaGVmbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCXVuc2lnbmVkIGludCBvcCk7CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zeXNjYWxscy5oPgorCisjZW5kaWYgLyogX19BU01fTklPUzJfU1lTQ0FMTFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjY2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBOaW9zSUkgbG93LWxldmVsIHRocmVhZCBpbmZvcm1hdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBCYXNlZCBvbiBhc20vdGhyZWFkX2luZm9fbm8uaCBmcm9tIG02OGsgd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIERhdmlkIEhvd2VsbHMgPGRob3dlbGxzQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9USFJFQURfSU5GT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBTaXplIG9mIHRoZSBrZXJuZWwgc3RhY2sgZm9yIGVhY2ggcHJvY2Vzcy4KKyAqLworI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkxCisjZGVmaW5lIFRIUkVBRF9TSVpFCQk4MTkyIC8qIDIgKiBQQUdFX1NJWkUgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKKy8qCisgKiBsb3cgbGV2ZWwgdGFzayBkYXRhIHRoYXQgZW50cnkuUyBuZWVkcyBpbW1lZGlhdGUgYWNjZXNzIHRvCisgKiAtIHRoaXMgc3RydWN0IHNob3VsZCBmaXQgZW50aXJlbHkgaW5zaWRlIG9mIG9uZSBjYWNoZSBsaW5lCisgKiAtIHRoaXMgc3RydWN0IHNoYXJlcyB0aGUgc3VwZXJ2aXNvciBzdGFjayBwYWdlcworICogLSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGNoYW5nZWQsIHRoZSBhc3NlbWJseSBjb25zdGFudHMKKyAqICAgbXVzdCBhbHNvIGJlIGNoYW5nZWQKKyAqLworc3RydWN0IHRocmVhZF9pbmZvIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CQkvKiBtYWluIHRhc2sgc3RydWN0dXJlICovCisJc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCisJX191MzIJCQljcHU7CQkvKiBjdXJyZW50IENQVSAqLworCWludAkJCXByZWVtcHRfY291bnQ7CS8qIDAgPT4gcHJlZW1wdGFibGUsPDAgPT4gQlVHICovCisJbW1fc2VnbWVudF90CQlhZGRyX2xpbWl0OwkvKiB0aHJlYWQgYWRkcmVzcyBzcGFjZToKKwkJCQkJCSAgMC0weDdGRkZGRkZGIGZvciB1c2VyLXRoZWFkCisJCQkJCQkgIDAtMHhGRkZGRkZGRiBmb3Iga2VybmVsLXRocmVhZAorCQkJCQkJKi8KKwlzdHJ1Y3QgcmVzdGFydF9ibG9jawlyZXN0YXJ0X2Jsb2NrOworCXN0cnVjdCBwdF9yZWdzCQkqcmVnczsKK307CisKKy8qCisgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIHByZWVtcHRfY291bnQgbmVlZHMgdG8gYmUgMSBpbml0aWFsbHksIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgZnVuY3Rpb25hbC4KKyAqLworI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCit7CQkJCQkJXAorCS50YXNrCQk9ICZ0c2ssCQkJXAorCS5leGVjX2RvbWFpbgk9ICZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCisJLmZsYWdzCQk9IDAsCQkJXAorCS5jcHUJCT0gMCwJCQlcCisJLnByZWVtcHRfY291bnQJPSBJTklUX1BSRUVNUFRfQ09VTlQsCVwKKwkuYWRkcl9saW1pdAk9IEtFUk5FTF9EUywJCVwKKwkucmVzdGFydF9ibG9jawk9IHsJCQlcCisJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAorCX0sCQkJCQlcCit9CisKKyNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCisjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBzcCBhc20oInNwIik7CisKKwlyZXR1cm4gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKShzcCAmIH4oVEhSRUFEX1NJWkUgLSAxKSk7Cit9CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisvKgorICogdGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzCisgKiAtIHRoZXNlIGFyZSBwcm9jZXNzIHN0YXRlIGZsYWdzIHRoYXQgdmFyaW91cyBhc3NlbWJseSBmaWxlcyBtYXkgbmVlZCB0bworICogICBhY2Nlc3MKKyAqIC0gcGVuZGluZyB3b3JrLXRvLWJlLWRvbmUgZmxhZ3MgYXJlIGluIExTVworICogLSBvdGhlciBmbGFncyBpbiBNU1cKKyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkwCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogcmVzdW1wdGlvbiBub3RpZmljYXRpb24gcmVxdWVzdGVkICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9NRU1ESUUJCTQJLyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi8KKyNkZWZpbmUgVElGX1NFQ0NPTVAJCTUJLyogc2VjdXJlIGNvbXB1dGluZyAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVAk2CS8qIHN5c2NhbGwgYXVkaXRpbmcgYWN0aXZlICovCisjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJOQkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCisKKyNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZworCQkJCQkgICBUSUZfTkVFRF9SRVNDSEVEICovCisKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDEgPDwgVElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfU0VDQ09NUAkJKDEgPDwgVElGX1NFQ0NPTVApCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMSA8PCBUSUZfU1lTQ0FMTF9BVURJVCkKKyNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKKyNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCisKKy8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KKyNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMEZGRkUKKworLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHUtc3BhY2UgKi8KKyMgZGVmaW5lIF9USUZfQUxMV09SS19NQVNLCTB4MDAwMEZGRkYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fTklPUzJfVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90aW1leC5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmFiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RpbWV4LmgKQEAgLTAsMCArMSwyNCBAQAorLyogQ29weXJpZ2h0IEFsdGVyYSBDb3Jwb3JhdGlvbiAoQykgMjAxNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9USU1FWF9ICisjZGVmaW5lIF9BU01fTklPUzJfVElNRVhfSAorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CisKK2V4dGVybiBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYmM2NDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1RMQl9ICisjZGVmaW5lIF9BU01fTklPUzJfVExCX0gKKworI2RlZmluZSB0bGJfZmx1c2godGxiKQlmbHVzaF90bGJfbW0oKHRsYiktPm1tKQorCitleHRlcm4gdm9pZCBzZXRfbW11X3BpZCh1bnNpZ25lZCBsb25nIHBpZCk7CisKKy8qCisgKiBOaW9zSUkgZG9lc24ndCBuZWVkIGFueSBzcGVjaWFsIHBlci1wdGUgb3IgcGVyLXZtYSBoYW5kbGluZywgZXhjZXB0CisgKiB3ZSBuZWVkIHRvIGZsdXNoIGNhY2hlIGZvciB0aGUgYXJlYSB0byBiZSB1bm1hcHBlZC4KKyAqLworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoIXRsYi0+ZnVsbG1tKQkJCQlcCisJCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsgXAorCX0gIHdoaWxlICgwKQorCisjZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGVwLCBhZGRyZXNzKQlkbyB7IH0gd2hpbGUgKDApCisKKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CisKKyNlbmRpZiAvKiBfQVNNX05JT1MyX1RMQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5NjUyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9UTEJGTFVTSF9ICisjZGVmaW5lIF9BU01fTklPUzJfVExCRkxVU0hfSAorCitzdHJ1Y3QgbW1fc3RydWN0OworCisvKgorICogVExCIGZsdXNoaW5nOgorICoKKyAqICAtIGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBwcm9jZXNzZXMgVExCIGVudHJpZXMKKyAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgVExCIGVudHJpZXMKKyAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCisgKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKKyAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcworICovCitleHRlcm4gdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyB2YWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJZmx1c2hfdGxiX29uZShhZGRyKTsKK30KKworI2VuZGlmIC8qIF9BU01fTklPUzJfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90cmFwcy5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS90cmFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTQ4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfVFJBUFNfSAorI2RlZmluZSBfQVNNX05JT1MyX1RSQVBTX0gKKworI2RlZmluZSBUUkFQX0lEX1NZU0NBTEwJCTAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3ZvaWQgX2V4Y2VwdGlvbihpbnQgc2lnbm8sIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9OSU9TMl9UUkFQU19IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZWRjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMgZm9yIE5pb3MgSUkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSwgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqICAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9VQUNDRVNTX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9VQUNDRVNTX0gKKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgVkVSSUZZX1JFQUQJMAorI2RlZmluZSBWRVJJRllfV1JJVEUJMQorCisvKgorICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKKyAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcworICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIHByb2dyYW0gc2hvdWxkIGNvbnRpbnVlLiAgTm8gcmVnaXN0ZXJzIGFyZQorICogbW9kaWZpZWQsIHNvIGl0IGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb250aW51YXRpb24gY29kZSB0byBmaWd1cmUgb3V0CisgKiB3aGF0IHRvIGRvLgorICoKKyAqIEFsbCB0aGUgcm91dGluZXMgYmVsb3cgdXNlIGJpdHMgb2YgZml4dXAgY29kZSB0aGF0IGFyZSBvdXQgb2YgbGluZQorICogd2l0aCB0aGUgbWFpbiBpbnN0cnVjdGlvbiBwYXRoLiAgVGhpcyBtZWFucyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd2VsbCwKKyAqIHdlIGRvbid0IGV2ZW4gaGF2ZSB0byBqdW1wIG92ZXIgdGhlbS4gIEZ1cnRoZXIsIHRoZXkgZG8gbm90IGludHJ1ZGUKKyAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KKyAqLworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSB7CisJdW5zaWduZWQgbG9uZyBpbnNuOworCXVuc2lnbmVkIGxvbmcgZml4dXA7Cit9OworCitleHRlcm4gaW50IGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCisgKiBTZWdtZW50IHN0dWZmCisgKi8KKyNkZWZpbmUgTUFLRV9NTV9TRUcocykJCSgobW1fc2VnbWVudF90KSB7IChzKSB9KQorI2RlZmluZSBVU0VSX0RTCQkJTUFLRV9NTV9TRUcoMHg4MDAwMDAwMFVMKQorI2RlZmluZSBLRVJORUxfRFMJCU1BS0VfTU1fU0VHKDApCisKKyNkZWZpbmUgZ2V0X2RzKCkJCShLRVJORUxfRFMpCisKKyNkZWZpbmUgZ2V0X2ZzKCkJCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQpCisjZGVmaW5lIHNldF9mcyhzZWcpCQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0ID0gKHNlZykpCisKKyNkZWZpbmUgc2VnbWVudF9lcShhLCBiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQorCisjZGVmaW5lIF9fYWNjZXNzX29rKGFkZHIsIGxlbikJCQlcCisJKCgoc2lnbmVkIGxvbmcpKCgobG9uZylnZXRfZnMoKS5zZWcpICYJXAorCQkoKGxvbmcpKGFkZHIpIHwgKCgobG9uZykoYWRkcikpICsgKGxlbikpIHwgKGxlbikpKSkgPT0gMCkKKworI2RlZmluZSBhY2Nlc3Nfb2sodHlwZSwgYWRkciwgbGVuKQkJXAorCWxpa2VseShfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykoYWRkciksICh1bnNpZ25lZCBsb25nKShsZW4pKSkKKworIyBkZWZpbmUgX19FWF9UQUJMRV9TRUNUSU9OCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisKKy8qCisgKiBaZXJvIFVzZXJzcGFjZQorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jbGVhcl91c2VyKHZvaWQgX191c2VyICp0bywKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOiAgICAgc3RiICAgICB6ZXJvLCAwKCUxKVxuIgorCQkiICAgICAgIGFkZGkgICAgJTAsICUwLCAtMVxuIgorCQkiICAgICAgIGFkZGkgICAgJTEsICUxLCAxXG4iCisJCSIgICAgICAgYm5lICAgICAlMCwgemVybywgMWJcbiIKKwkJIjI6XG4iCisJCV9fRVhfVEFCTEVfU0VDVElPTgorCQkiLndvcmQgIDFiLCAyYlxuIgorCQkiLnByZXZpb3VzXG4iCisJCTogIj1yIiAobiksICI9ciIgKHRvKQorCQk6ICIwIiAobiksICIxIiAodG8pCisJKTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIGNsZWFyX3VzZXIodm9pZCBfX3VzZXIgKnRvLAorCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHRvLCBuKSkKKwkJcmV0dXJuIG47CisJcmV0dXJuIF9fY2xlYXJfdXNlcih0bywgbik7Cit9CisKK2V4dGVybiBsb25nIF9fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorCQkJCXVuc2lnbmVkIGxvbmcgbik7CitleHRlcm4gbG9uZyBfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCisJCQkJdW5zaWduZWQgbG9uZyBuKQoreworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBuKSkKKwkJcmV0dXJuIG47CisJcmV0dXJuIF9fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKKwkJCQl1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikpCisJCXJldHVybiBuOworCXJldHVybiBfX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7Cit9CisKK2V4dGVybiBsb25nIHN0cm5jcHlfZnJvbV91c2VyKGNoYXIgKl9fdG8sIGNvbnN0IGNoYXIgX191c2VyICpfX2Zyb20sCisJCQkJbG9uZyBfX2xlbik7CitleHRlcm4gbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnMsIGxvbmcgbik7CisKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYwlfX2NvcHlfZnJvbV91c2VyCisjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljCQlfX2NvcHlfdG9fdXNlcgorCisvKiBPcHRpbWl6ZWQgbWFjcm9zICovCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHZhbCwgaW5zbiwgYWRkciwgZXJyKQkJCQlcCit7CQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiICAgICAgIG1vdmkgICAgJTAsICUzXG4iCQkJCQlcCisJIjE6ICAgIiBpbnNuICIgJTEsIDAoJTIpXG4iCQkJCQlcCisJIiAgICAgICBtb3ZpICAgICAlMCwgMFxuIgkJCQkJXAorCSIyOlxuIgkJCQkJCQkJXAorCSIgICAgICAgLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCQlcCisJIiAgICAgICAud29yZCAxYiwgMmJcbiIJCQkJCQlcCisJIiAgICAgICAucHJldmlvdXMiCQkJCQkJXAorCTogIj0mciIgKGVyciksICI9ciIgKHZhbCkJCQkJCVwKKwk6ICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCkpOwkJCQkJXAorfQorCisjZGVmaW5lIF9fZ2V0X3VzZXJfdW5rbm93bih2YWwsIHNpemUsIHB0ciwgZXJyKSBkbyB7CQkJXAorCWVyciA9IDA7CQkJCQkJCVwKKwlpZiAoY29weV9mcm9tX3VzZXIoJih2YWwpLCBwdHIsIHNpemUpKSB7CQkJXAorCQllcnIgPSAtRUZBVUxUOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2dldF91c2VyX2NvbW1vbih2YWwsIHNpemUsIHB0ciwgZXJyKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh2YWwsICJsZGJ1IiwgcHRyLCBlcnIpOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKHZhbCwgImxkaHUiLCBwdHIsIGVycik7CQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20odmFsLCAibGR3IiwgcHRyLCBlcnIpOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfdW5rbm93bih2YWwsIHNpemUsIHB0ciwgZXJyKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCwgcHRyKQkJCQkJCVwKKwkoewkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxUOwkJCQkJXAorCWNvbnN0IF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fZ3VfcHRyID0gKHB0cik7CQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsJCQkJCQlcCisJX19nZXRfdXNlcl9jb21tb24oX19ndV92YWwsIHNpemVvZigqKHB0cikpLCBfX2d1X3B0ciwgX19ndV9lcnIpO1wKKwkoeCkgPSAoX190eXBlb2ZfXyh4KSlfX2d1X3ZhbDsJCQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAorCX0pCisKKyNkZWZpbmUgZ2V0X3VzZXIoeCwgcHRyKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxUOwkJCQkJXAorCWNvbnN0IF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fZ3VfcHRyID0gKHB0cik7CQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X3ZhbCA9IDA7CQkJCQlcCisJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgIF9fZ3VfcHRyLCBzaXplb2YoKl9fZ3VfcHRyKSkpCVwKKwkJX19nZXRfdXNlcl9jb21tb24oX19ndV92YWwsIHNpemVvZigqX19ndV9wdHIpLAkJXAorCQkJX19ndV9wdHIsIF9fZ3VfZXJyKTsJCQkJXAorCSh4KSA9IChfX3R5cGVvZl9fKHgpKV9fZ3VfdmFsOwkJCQkJXAorCV9fZ3VfZXJyOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHZhbCwgaW5zbiwgcHRyLCBlcnIpCQkJCVwKK3sJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIgICAgICAgbW92aSAgICAlMCwgJTNcbiIJCQkJCVwKKwkiMTogICAiIGluc24gIiAlMSwgMCglMilcbiIJCQkJCVwKKwkiICAgICAgIG1vdmkgICAgICUwLCAwXG4iCQkJCQlcCisJIjI6XG4iCQkJCQkJCQlcCisJIiAgICAgICAuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJCVwKKwkiICAgICAgIC53b3JkIDFiLCAyYlxuIgkJCQkJCVwKKwkiICAgICAgIC5wcmV2aW91c1xuIgkJCQkJCVwKKwk6ICI9JnIiIChlcnIpCQkJCQkJCVwKKwk6ICJyIiAodmFsKSwgInIiIChwdHIpLCAiaSIgKC1FRkFVTFQpKTsJCQkJXAorfQorCisjZGVmaW5lIHB1dF91c2VyKHgsIHB0cikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlsb25nIF9fcHVfZXJyID0gLUVGQVVMVDsJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX3B1X3B0ciA9IChwdHIpOwkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19wdV92YWwgPSAoX190eXBlb2YoKnB0cikpKHgpOwkJXAorCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBfX3B1X3B0ciwgc2l6ZW9mKCpfX3B1X3B0cikpKSB7CVwKKwkJc3dpdGNoIChzaXplb2YoKl9fcHVfcHRyKSkgewkJCQlcCisJCWNhc2UgMToJCQkJCQkJXAorCQkJX19wdXRfdXNlcl9hc20oX19wdV92YWwsICJzdGIiLCBfX3B1X3B0ciwgX19wdV9lcnIpOyBcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgMjoJCQkJCQkJXAorCQkJX19wdXRfdXNlcl9hc20oX19wdV92YWwsICJzdGgiLCBfX3B1X3B0ciwgX19wdV9lcnIpOyBcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgNDoJCQkJCQkJXAorCQkJX19wdXRfdXNlcl9hc20oX19wdV92YWwsICJzdHciLCBfX3B1X3B0ciwgX19wdV9lcnIpOyBcCisJCQlicmVhazsJCQkJCQlcCisJCWRlZmF1bHQ6CQkJCQkJXAorCQkJLyogWFhYOiBUaGlzIGxvb2tzIHdyb25nLi4uICovCQkJXAorCQkJX19wdV9lcnIgPSAwOwkJCQkJXAorCQkJaWYgKGNvcHlfdG9fdXNlcihfX3B1X3B0ciwgJihfX3B1X3ZhbCksCQlcCisJCQkJc2l6ZW9mKCpfX3B1X3B0cikpKQkJCVwKKwkJCQlfX3B1X2VyciA9IC1FRkFVTFQ7CQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJX19wdV9lcnI7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19wdXRfdXNlcih4LCBwdHIpIHB1dF91c2VyKHgsIHB0cikKKworI2VuZGlmIC8qIF9BU01fTklPUzJfVUFDQ0VTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4NzYxNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vdWNvbnRleHQuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1VDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9VQ09OVEVYVF9ICisKK3R5cGVkZWYgaW50IGdyZWdfdDsKKyNkZWZpbmUgTkdSRUcgMzIKK3R5cGVkZWYgZ3JlZ190IGdyZWdzZXRfdFtOR1JFR107CisKK3N0cnVjdCBtY29udGV4dCB7CisJaW50IHZlcnNpb247CisJZ3JlZ3NldF90IGdyZWdzOworfTsKKworI2RlZmluZSBNQ09OVEVYVF9WRVJTSU9OIDIKKworc3RydWN0IHVjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CisJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKKwlzdGFja190CQkgIHVjX3N0YWNrOworCXN0cnVjdCBtY29udGV4dAkgIHVjX21jb250ZXh0OworCXNpZ3NldF90CSAgdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9LYnVpbGQgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vS2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMDdjYTNmOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9LYnVpbGQKQEAgLTAsMCArMSw0IEBACitpbmNsdWRlIGluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCisKK2hlYWRlci15ICs9IGVsZi5oCitoZWFkZXIteSArPSB1Y29udGV4dC5oCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vYnl0ZW9yZGVyLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vYnl0ZW9yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiNWRjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9ieXRlb3JkZXIuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICAgVGhvbWFzIENob3UgPHRob21hc0B3eXRyb24uY29tLnR3PgorICogQ29weXJpZ2h0IChDKSAyMDA0ICAgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9OSU9TMl9CWVRFT1JERVJfSAorI2RlZmluZSBfQVNNX05JT1MyX0JZVEVPUkRFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9lbGYuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWI5MWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL2VsZi5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworCisjaWZuZGVmIF9VQVBJX0FTTV9OSU9TMl9FTEZfSAorI2RlZmluZSBfVUFQSV9BU01fTklPUzJfRUxGX0gKKworI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCisvKiBSZWxvY2F0aW9uIHR5cGVzICovCisjZGVmaW5lIFJfTklPUzJfTk9ORQkJMAorI2RlZmluZSBSX05JT1MyX1MxNgkJMQorI2RlZmluZSBSX05JT1MyX1UxNgkJMgorI2RlZmluZSBSX05JT1MyX1BDUkVMMTYJCTMKKyNkZWZpbmUgUl9OSU9TMl9DQUxMMjYJCTQKKyNkZWZpbmUgUl9OSU9TMl9JTU01CQk1CisjZGVmaW5lIFJfTklPUzJfQ0FDSEVfT1BYCTYKKyNkZWZpbmUgUl9OSU9TMl9JTU02CQk3CisjZGVmaW5lIFJfTklPUzJfSU1NOAkJOAorI2RlZmluZSBSX05JT1MyX0hJMTYJCTkKKyNkZWZpbmUgUl9OSU9TMl9MTzE2CQkxMAorI2RlZmluZSBSX05JT1MyX0hJQURKMTYJCTExCisjZGVmaW5lIFJfTklPUzJfQkZEX1JFTE9DXzMyCTEyCisjZGVmaW5lIFJfTklPUzJfQkZEX1JFTE9DXzE2CTEzCisjZGVmaW5lIFJfTklPUzJfQkZEX1JFTE9DXzgJMTQKKyNkZWZpbmUgUl9OSU9TMl9HUFJFTAkJMTUKKyNkZWZpbmUgUl9OSU9TMl9HTlVfVlRJTkhFUklUCTE2CisjZGVmaW5lIFJfTklPUzJfR05VX1ZURU5UUlkJMTcKKyNkZWZpbmUgUl9OSU9TMl9VSk1QCQkxOAorI2RlZmluZSBSX05JT1MyX0NKTVAJCTE5CisjZGVmaW5lIFJfTklPUzJfQ0FMTFIJCTIwCisjZGVmaW5lIFJfTklPUzJfQUxJR04JCTIxCisvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICAqLworI2RlZmluZSBSX05JT1MyX05VTQkJMjIKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisKKyNkZWZpbmUgRUxGX05HUkVHCVwKKwkoKHNpemVvZihzdHJ1Y3QgcHRfcmVncykgKyBzaXplb2Yoc3RydWN0IHN3aXRjaF9zdGFjaykpIC8JXAorCQlzaXplb2YoZWxmX2dyZWdfdCkpCit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2ZwcmVnc2V0X3Q7CisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KKyAqLworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQgorI2RlZmluZSBFTEZfQVJDSAlFTV9BTFRFUkFfTklPUzIKKworI2VuZGlmIC8qIF9VQVBJX0FTTV9OSU9TMl9FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3B0cmFjZS5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4M2E3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vcHRyYWNlLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqCisgKiBiYXNlZCBvbiBtNjhrIGFzbS9wcm9jZXNzb3IuaAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX1VBUElfQVNNX05JT1MyX1BUUkFDRV9ICisjZGVmaW5lIF9VQVBJX0FTTV9OSU9TMl9QVFJBQ0VfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogUmVnaXN0ZXIgbnVtYmVycyB1c2VkIGJ5ICdwdHJhY2UnIHN5c3RlbSBjYWxsIGludGVyZmFjZS4KKyAqLworCisvKiBHUCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFRSX1IwCQkwCisjZGVmaW5lIFBUUl9SMQkJMQorI2RlZmluZSBQVFJfUjIJCTIKKyNkZWZpbmUgUFRSX1IzCQkzCisjZGVmaW5lIFBUUl9SNAkJNAorI2RlZmluZSBQVFJfUjUJCTUKKyNkZWZpbmUgUFRSX1I2CQk2CisjZGVmaW5lIFBUUl9SNwkJNworI2RlZmluZSBQVFJfUjgJCTgKKyNkZWZpbmUgUFRSX1I5CQk5CisjZGVmaW5lIFBUUl9SMTAJCTEwCisjZGVmaW5lIFBUUl9SMTEJCTExCisjZGVmaW5lIFBUUl9SMTIJCTEyCisjZGVmaW5lIFBUUl9SMTMJCTEzCisjZGVmaW5lIFBUUl9SMTQJCTE0CisjZGVmaW5lIFBUUl9SMTUJCTE1CisjZGVmaW5lIFBUUl9SMTYJCTE2CisjZGVmaW5lIFBUUl9SMTcJCTE3CisjZGVmaW5lIFBUUl9SMTgJCTE4CisjZGVmaW5lIFBUUl9SMTkJCTE5CisjZGVmaW5lIFBUUl9SMjAJCTIwCisjZGVmaW5lIFBUUl9SMjEJCTIxCisjZGVmaW5lIFBUUl9SMjIJCTIyCisjZGVmaW5lIFBUUl9SMjMJCTIzCisjZGVmaW5lIFBUUl9SMjQJCTI0CisjZGVmaW5lIFBUUl9SMjUJCTI1CisjZGVmaW5lIFBUUl9HUAkJMjYKKyNkZWZpbmUgUFRSX1NQCQkyNworI2RlZmluZSBQVFJfRlAJCTI4CisjZGVmaW5lIFBUUl9FQQkJMjkKKyNkZWZpbmUgUFRSX0JBCQkzMAorI2RlZmluZSBQVFJfUkEJCTMxCisvKiBDb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBQVFJfUEMJCTMyCisjZGVmaW5lIFBUUl9TVEFUVVMJMzMKKyNkZWZpbmUgUFRSX0VTVEFUVVMJMzQKKyNkZWZpbmUgUFRSX0JTVEFUVVMJMzUKKyNkZWZpbmUgUFRSX0lFTkFCTEUJMzYKKyNkZWZpbmUgUFRSX0lQRU5ESU5HCTM3CisjZGVmaW5lIFBUUl9DUFVJRAkzOAorI2RlZmluZSBQVFJfQ1RMNgkzOQorI2RlZmluZSBQVFJfQ1RMNwk0MAorI2RlZmluZSBQVFJfUFRFQUREUgk0MQorI2RlZmluZSBQVFJfVExCQUNDCTQyCisjZGVmaW5lIFBUUl9UTEJNSVNDCTQzCisKKyNkZWZpbmUgTlVNX1BUUkFDRV9SRUcgKFBUUl9UTEJNSVNDICsgMSkKKworLyogdGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUKKyAgIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLgorCisgICBUaGVyZSBpcyBhIGZha2VfcmVncyBpbiBzZXR1cC5jIHRoYXQgaGFzIHRvIG1hdGNoIHB0X3JlZ3MuKi8KKworc3RydWN0IHB0X3JlZ3MgeworCXVuc2lnbmVkIGxvbmcgIHI4OwkJLyogcjgtcjE1IENhbGxlci1zYXZlZCBHUCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nICByOTsKKwl1bnNpZ25lZCBsb25nICByMTA7CisJdW5zaWduZWQgbG9uZyAgcjExOworCXVuc2lnbmVkIGxvbmcgIHIxMjsKKwl1bnNpZ25lZCBsb25nICByMTM7CisJdW5zaWduZWQgbG9uZyAgcjE0OworCXVuc2lnbmVkIGxvbmcgIHIxNTsKKwl1bnNpZ25lZCBsb25nICByMTsJCS8qIEFzc2VtYmxlciB0ZW1wb3JhcnkgKi8KKwl1bnNpZ25lZCBsb25nICByMjsJCS8qIFJldHZhbCBMUyAzMmJpdHMgKi8KKwl1bnNpZ25lZCBsb25nICByMzsJCS8qIFJldHZhbCBNUyAzMmJpdHMgKi8KKwl1bnNpZ25lZCBsb25nICByNDsJCS8qIHI0LXI3IFJlZ2lzdGVyIGFyZ3VtZW50cyAqLworCXVuc2lnbmVkIGxvbmcgIHI1OworCXVuc2lnbmVkIGxvbmcgIHI2OworCXVuc2lnbmVkIGxvbmcgIHI3OworCXVuc2lnbmVkIGxvbmcgIG9yaWdfcjI7CQkvKiBDb3B5IG9mIHIyID8/ICovCisJdW5zaWduZWQgbG9uZyAgcmE7CQkvKiBSZXR1cm4gYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgIGZwOwkJLyogRnJhbWUgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcgIHNwOwkJLyogU3RhY2sgcG9pbnRlciAqLworCXVuc2lnbmVkIGxvbmcgIGdwOwkJLyogR2xvYmFsIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBsb25nICBlc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgIGVhOwkJLyogRXhjZXB0aW9uIHJldHVybiBhZGRyZXNzIChwYykgKi8KKwl1bnNpZ25lZCBsb25nICBvcmlnX3I3OworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGV4dGVuZGVkIHN0YWNrIHVzZWQgYnkgc2lnbmFsIGhhbmRsZXJzIGFuZCB0aGUgY29udGV4dAorICogc3dpdGNoZXI6IGl0J3MgcHVzaGVkIGFmdGVyIHRoZSBub3JtYWwgInN0cnVjdCBwdF9yZWdzIi4KKyAqLworc3RydWN0IHN3aXRjaF9zdGFjayB7CisJdW5zaWduZWQgbG9uZyAgcjE2OwkJLyogcjE2LXIyMyBDYWxsZWUtc2F2ZWQgR1AgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyAgcjE3OworCXVuc2lnbmVkIGxvbmcgIHIxODsKKwl1bnNpZ25lZCBsb25nICByMTk7CisJdW5zaWduZWQgbG9uZyAgcjIwOworCXVuc2lnbmVkIGxvbmcgIHIyMTsKKwl1bnNpZ25lZCBsb25nICByMjI7CisJdW5zaWduZWQgbG9uZyAgcjIzOworCXVuc2lnbmVkIGxvbmcgIGZwOworCXVuc2lnbmVkIGxvbmcgIGdwOworCXVuc2lnbmVkIGxvbmcgIHJhOworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9VQVBJX0FTTV9OSU9TMl9QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3NpZ2NvbnRleHQuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9zaWdjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4YmI0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX05JT1MyX1NJR0NPTlRFWFRfSAorI2RlZmluZSBfQVNNX05JT1MyX1NJR0NPTlRFWFRfSAorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwl1bnNpZ25lZCBsb25nICBzY19tYXNrOwkvKiBvbGQgc2lnbWFzayAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc2lnbmFsLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5ZWU2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9zaWduYWwuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IEFsdGVyYSBDb3Jwb3JhdGlvbiAoQykgMjAxMy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisjaWZuZGVmIF9BU01fTklPUzJfU0lHTkFMX0gKKyNkZWZpbmUgX0FTTV9OSU9TMl9TSUdOQUxfSAorCisjZGVmaW5lIFNBX1JFU1RPUkVSIDB4MDQwMDAwMDAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KKworI2VuZGlmIC8qIF9BU01fTklPUzJfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS9zd2FiLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc3dhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZTIyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvdWFwaS9hc20vc3dhYi5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHlyYW1pZCBUZWNobmljYWwgQ29uc3VsdGFudHMsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fTklPUzJfU1dBQl9ICisjZGVmaW5lIF9BU01fTklPUzJfU1dBQl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N3YWIuaD4KKworI2lmZGVmIENPTkZJR19OSU9TMl9DSV9TV0FCX1NVUFBPUlQKKyNpZmRlZiBfX0dOVUNfXworCisjZGVmaW5lIF9fbmlvczJfc3dhYih4KQkJXAorCV9fYnVpbHRpbl9jdXN0b21faW5pKENPTkZJR19OSU9TMl9DSV9TV0FCX05PLCAoeCkpCisKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoY29uc3QpKSBfX3UxNiBfX2FyY2hfc3dhYjE2KF9fdTE2IHgpCit7CisJcmV0dXJuIChfX3UxNikgX19uaW9zMl9zd2FiKCgoX191MzIpIHgpIDw8IDE2KTsKK30KKyNkZWZpbmUgX19hcmNoX3N3YWIxNiBfX2FyY2hfc3dhYjE2CisKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoY29uc3QpKSBfX3UzMiBfX2FyY2hfc3dhYjMyKF9fdTMyIHgpCit7CisJcmV0dXJuIChfX3UzMikgX19uaW9zMl9zd2FiKHgpOworfQorI2RlZmluZSBfX2FyY2hfc3dhYjMyIF9fYXJjaF9zd2FiMzIKKworI2VuZGlmIC8qIF9fR05VQ19fICovCisjZW5kaWYgLyogQ09ORklHX05JT1MyX0NJX1NXQUJfU1VQUE9SVCAqLworCisjZW5kaWYgLyogX0FTTV9OSU9TMl9TV0FCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJmNzk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworICNkZWZpbmUgc3lzX21tYXAyIHN5c19tbWFwX3Bnb2ZmCisKKy8qIFVzZSB0aGUgc3RhbmRhcmQgQUJJIGZvciBzeXNjYWxscyAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3VuaXN0ZC5oPgorCisvKiBBZGRpdGlvbmFsIE5pb3MgSUkgc3BlY2lmaWMgc3lzY2FsbHMuICovCisjZGVmaW5lIF9fTlJfY2FjaGVmbHVzaCAoX19OUl9hcmNoX3NwZWNpZmljX3N5c2NhbGwpCitfX1NZU0NBTEwoX19OUl9jYWNoZWZsdXNoLCBzeXNfY2FjaGVmbHVzaCkKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL01ha2VmaWxlIGIvYXJjaC9uaW9zMi9rZXJuZWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlNzY4MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL01ha2VmaWxlCkBAIC0wLDAgKzEsMjQgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBuaW9zMiBsaW51eCBrZXJuZWwuCisjCisKK2V4dHJhLXkJKz0gaGVhZC5vCitleHRyYS15CSs9IHZtbGludXgubGRzCisKK29iai15CSs9IGNwdWluZm8ubworb2JqLXkJKz0gZW50cnkubworb2JqLXkJKz0gaW5zbmVtdS5vCitvYmoteQkrPSBpcnEubworb2JqLXkJKz0gbmlvczJfa3N5bXMubworb2JqLXkJKz0gcHJvY2Vzcy5vCitvYmoteQkrPSBwcm9tLm8KK29iai15CSs9IHB0cmFjZS5vCitvYmoteQkrPSBzZXR1cC5vCitvYmoteQkrPSBzaWduYWwubworb2JqLXkJKz0gc3lzX25pb3MyLm8KK29iai15CSs9IHN5c2NhbGxfdGFibGUubworb2JqLXkJKz0gdGltZS5vCitvYmoteQkrPSB0cmFwcy5vCisKK29iai0kKENPTkZJR19NT0RVTEVTKQkJCSs9IG1vZHVsZS5vCitvYmotJChDT05GSUdfTklPUzJfQUxJR05NRU5UX1RSQVApCSs9IG1pc2FsaWduZWQubwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbmlvczIva2VybmVsL2FzbS1vZmZzZXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNlZTczYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L2tidWlsZC5oPgorCitpbnQgbWFpbih2b2lkKQoreworCS8qIHN0cnVjdCB0YXNrX3N0cnVjdCAqLworCU9GRlNFVChUQVNLX1RIUkVBRCwgdGFza19zdHJ1Y3QsIHRocmVhZCk7CisJQkxBTksoKTsKKworCS8qIHN0cnVjdCB0aHJlYWRfc3RydWN0ICovCisJT0ZGU0VUKFRIUkVBRF9LU1AsIHRocmVhZF9zdHJ1Y3QsIGtzcCk7CisJT0ZGU0VUKFRIUkVBRF9LUFNSLCB0aHJlYWRfc3RydWN0LCBrcHNyKTsKKwlCTEFOSygpOworCisJLyogc3RydWN0IHB0X3JlZ3MgKi8KKwlPRkZTRVQoUFRfT1JJR19SMiwgcHRfcmVncywgb3JpZ19yMik7CisJT0ZGU0VUKFBUX09SSUdfUjcsIHB0X3JlZ3MsIG9yaWdfcjcpOworCisJT0ZGU0VUKFBUX1IxLCBwdF9yZWdzLCByMSk7CisJT0ZGU0VUKFBUX1IyLCBwdF9yZWdzLCByMik7CisJT0ZGU0VUKFBUX1IzLCBwdF9yZWdzLCByMyk7CisJT0ZGU0VUKFBUX1I0LCBwdF9yZWdzLCByNCk7CisJT0ZGU0VUKFBUX1I1LCBwdF9yZWdzLCByNSk7CisJT0ZGU0VUKFBUX1I2LCBwdF9yZWdzLCByNik7CisJT0ZGU0VUKFBUX1I3LCBwdF9yZWdzLCByNyk7CisJT0ZGU0VUKFBUX1I4LCBwdF9yZWdzLCByOCk7CisJT0ZGU0VUKFBUX1I5LCBwdF9yZWdzLCByOSk7CisJT0ZGU0VUKFBUX1IxMCwgcHRfcmVncywgcjEwKTsKKwlPRkZTRVQoUFRfUjExLCBwdF9yZWdzLCByMTEpOworCU9GRlNFVChQVF9SMTIsIHB0X3JlZ3MsIHIxMik7CisJT0ZGU0VUKFBUX1IxMywgcHRfcmVncywgcjEzKTsKKwlPRkZTRVQoUFRfUjE0LCBwdF9yZWdzLCByMTQpOworCU9GRlNFVChQVF9SMTUsIHB0X3JlZ3MsIHIxNSk7CisJT0ZGU0VUKFBUX0VBLCBwdF9yZWdzLCBlYSk7CisJT0ZGU0VUKFBUX1JBLCBwdF9yZWdzLCByYSk7CisJT0ZGU0VUKFBUX0ZQLCBwdF9yZWdzLCBmcCk7CisJT0ZGU0VUKFBUX1NQLCBwdF9yZWdzLCBzcCk7CisJT0ZGU0VUKFBUX0dQLCBwdF9yZWdzLCBncCk7CisJT0ZGU0VUKFBUX0VTVEFUVVMsIHB0X3JlZ3MsIGVzdGF0dXMpOworCURFRklORShQVF9SRUdTX1NJWkUsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCUJMQU5LKCk7CisKKwkvKiBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICovCisJT0ZGU0VUKFNXX1IxNiwgc3dpdGNoX3N0YWNrLCByMTYpOworCU9GRlNFVChTV19SMTcsIHN3aXRjaF9zdGFjaywgcjE3KTsKKwlPRkZTRVQoU1dfUjE4LCBzd2l0Y2hfc3RhY2ssIHIxOCk7CisJT0ZGU0VUKFNXX1IxOSwgc3dpdGNoX3N0YWNrLCByMTkpOworCU9GRlNFVChTV19SMjAsIHN3aXRjaF9zdGFjaywgcjIwKTsKKwlPRkZTRVQoU1dfUjIxLCBzd2l0Y2hfc3RhY2ssIHIyMSk7CisJT0ZGU0VUKFNXX1IyMiwgc3dpdGNoX3N0YWNrLCByMjIpOworCU9GRlNFVChTV19SMjMsIHN3aXRjaF9zdGFjaywgcjIzKTsKKwlPRkZTRVQoU1dfRlAsIHN3aXRjaF9zdGFjaywgZnApOworCU9GRlNFVChTV19HUCwgc3dpdGNoX3N0YWNrLCBncCk7CisJT0ZGU0VUKFNXX1JBLCBzd2l0Y2hfc3RhY2ssIHJhKTsKKwlERUZJTkUoU1dJVENIX1NUQUNLX1NJWkUsIHNpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKSk7CisJQkxBTksoKTsKKworCS8qIHN0cnVjdCB0aHJlYWRfaW5mbyAqLworCU9GRlNFVChUSV9GTEFHUywgdGhyZWFkX2luZm8sIGZsYWdzKTsKKwlPRkZTRVQoVElfUFJFRU1QVF9DT1VOVCwgdGhyZWFkX2luZm8sIHByZWVtcHRfY291bnQpOworCUJMQU5LKCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL2NwdWluZm8uYyBiL2FyY2gvbmlvczIva2VybmVsL2NwdWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWQ1YmI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvY3B1aW5mby5jCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICoKKyAqIEJhc2VkIG9uIGNwdWluZm8uYyBmcm9tIG1pY3JvYmxhemUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGFzbS9jcHVpbmZvLmg+CisKK3N0cnVjdCBjcHVpbmZvIGNwdWluZm87CisKKyNkZWZpbmUgZXJyX2NwdSh4KSBcCisJcHJfZXJyKCJFUlJPUjogTmlvcyBJSSAiIHggIiBkaWZmZXJlbnQgZm9yIGtlcm5lbCBhbmQgRFRTXG4iKQorCitzdGF0aWMgaW5saW5lIHUzMiBmY3B1KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1LCBjb25zdCBjaGFyICpuKQoreworCXUzMiB2YWwgPSAwOworCisJb2ZfcHJvcGVydHlfcmVhZF91MzIoY3B1LCBuLCAmdmFsKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGZjcHVfaGFzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1LCBjb25zdCBjaGFyICpuKQoreworCXJldHVybiBvZl9nZXRfcHJvcGVydHkoY3B1LCBuLCBOVUxMKSA/IDEgOiAwOworfQorCit2b2lkIF9faW5pdCBzZXR1cF9jcHVpbmZvKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpjcHU7CisJY29uc3QgY2hhciAqc3RyOworCWludCBsZW47CisKKwljcHUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7CisJaWYgKCFjcHUpCisJCXBhbmljKCIlczogTm8gQ1BVIGZvdW5kIGluIGRldmljZXRyZWUhXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIWZjcHVfaGFzKGNwdSwgImFsdHIsaGFzLWluaXRkYSIpKQorCQlwYW5pYygiaW5pdGRhIGluc3RydWN0aW9uIGlzIHVuaW1wbGVtZW50ZWQuIFBsZWFzZSB1cGRhdGUgeW91ciAiCisJCQkiaGFyZHdhcmUgc3lzdGVtIHRvIGhhdmUgbW9yZSB0aGFuIDQtYnl0ZSBsaW5lIGRhdGEgIgorCQkJImNhY2hlXG4iKTsKKworCWNwdWluZm8uY3B1X2Nsb2NrX2ZyZXEgPSBmY3B1KGNwdSwgImNsb2NrLWZyZXF1ZW5jeSIpOworCisJc3RyID0gb2ZfZ2V0X3Byb3BlcnR5KGNwdSwgImFsdHIsaW1wbGVtZW50YXRpb24iLCAmbGVuKTsKKwlpZiAoc3RyKQorCQlzdHJsY3B5KGNwdWluZm8uY3B1X2ltcGwsIHN0ciwgc2l6ZW9mKGNwdWluZm8uY3B1X2ltcGwpKTsKKwllbHNlCisJCXN0cmNweShjcHVpbmZvLmNwdV9pbXBsLCAiPHVua25vd24+Iik7CisKKwljcHVpbmZvLmhhc19kaXYgPSBmY3B1X2hhcyhjcHUsICJhbHRyLGhhcy1kaXYiKTsKKwljcHVpbmZvLmhhc19tdWwgPSBmY3B1X2hhcyhjcHUsICJhbHRyLGhhcy1tdWwiKTsKKwljcHVpbmZvLmhhc19tdWx4ID0gZmNwdV9oYXMoY3B1LCAiYWx0cixoYXMtbXVseCIpOworCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX05JT1MyX0hXX0RJVl9TVVBQT1JUKSAmJiAhY3B1aW5mby5oYXNfZGl2KQorCQllcnJfY3B1KCJESVYiKTsKKworCWlmIChJU19FTkFCTEVEKENPTkZJR19OSU9TMl9IV19NVUxfU1VQUE9SVCkgJiYgIWNwdWluZm8uaGFzX211bCkKKwkJZXJyX2NwdSgiTVVMIik7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTklPUzJfSFdfTVVMWF9TVVBQT1JUKSAmJiAhY3B1aW5mby5oYXNfbXVseCkKKwkJZXJyX2NwdSgiTVVMWCIpOworCisJY3B1aW5mby50bGJfbnVtX3dheXMgPSBmY3B1KGNwdSwgImFsdHIsdGxiLW51bS13YXlzIik7CisJaWYgKCFjcHVpbmZvLnRsYl9udW1fd2F5cykKKwkJcGFuaWMoImFsdHIsdGxiLW51bS13YXlzIGNhbid0IGJlIDAuIFBsZWFzZSBjaGVjayB5b3VyIGhhcmR3YXJlICIKKwkJCSJzeXN0ZW1cbiIpOworCWNwdWluZm8uaWNhY2hlX2xpbmVfc2l6ZSA9IGZjcHUoY3B1LCAiaWNhY2hlLWxpbmUtc2l6ZSIpOworCWNwdWluZm8uaWNhY2hlX3NpemUgPSBmY3B1KGNwdSwgImljYWNoZS1zaXplIik7CisJaWYgKENPTkZJR19OSU9TMl9JQ0FDSEVfU0laRSAhPSBjcHVpbmZvLmljYWNoZV9zaXplKQorCQlwcl93YXJuKCJXYXJuaW5nOiBpY2FjaGUgc2l6ZSBjb25maWd1cmF0aW9uIG1pc21hdGNoICIKKwkJIigweCV4IHZzIDB4JXgpIG9mIENPTkZJR19OSU9TMl9JQ0FDSEVfU0laRSB2cyAiCisJCSJkZXZpY2UgdHJlZSBpY2FjaGUtc2l6ZVxuIiwKKwkJQ09ORklHX05JT1MyX0lDQUNIRV9TSVpFLCBjcHVpbmZvLmljYWNoZV9zaXplKTsKKworCWNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSA9IGZjcHUoY3B1LCAiZGNhY2hlLWxpbmUtc2l6ZSIpOworCWlmIChDT05GSUdfTklPUzJfRENBQ0hFX0xJTkVfU0laRSAhPSBjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUpCisJCXByX3dhcm4oIldhcm5pbmc6IGRjYWNoZSBsaW5lIHNpemUgY29uZmlndXJhdGlvbiBtaXNtYXRjaCAiCisJCSIoMHgleCB2cyAweCV4KSBvZiBDT05GSUdfTklPUzJfRENBQ0hFX0xJTkVfU0laRSB2cyAiCisJCSJkZXZpY2UgdHJlZSBkY2FjaGUtbGluZS1zaXplXG4iLAorCQlDT05GSUdfTklPUzJfRENBQ0hFX0xJTkVfU0laRSwgY3B1aW5mby5kY2FjaGVfbGluZV9zaXplKTsKKwljcHVpbmZvLmRjYWNoZV9zaXplID0gZmNwdShjcHUsICJkY2FjaGUtc2l6ZSIpOworCWlmIChDT05GSUdfTklPUzJfRENBQ0hFX1NJWkUgIT0gY3B1aW5mby5kY2FjaGVfc2l6ZSkKKwkJcHJfd2FybigiV2FybmluZzogZGNhY2hlIHNpemUgY29uZmlndXJhdGlvbiBtaXNtYXRjaCAiCisJCQkiKDB4JXggdnMgMHgleCkgb2YgQ09ORklHX05JT1MyX0RDQUNIRV9TSVpFIHZzICIKKwkJCSJkZXZpY2UgdHJlZSBkY2FjaGUtc2l6ZVxuIiwKKwkJCUNPTkZJR19OSU9TMl9EQ0FDSEVfU0laRSwgY3B1aW5mby5kY2FjaGVfc2l6ZSk7CisKKwljcHVpbmZvLnRsYl9waWRfbnVtX2JpdHMgPSBmY3B1KGNwdSwgImFsdHIscGlkLW51bS1iaXRzIik7CisJY3B1aW5mby50bGJfbnVtX3dheXNfbG9nMiA9IGlsb2cyKGNwdWluZm8udGxiX251bV93YXlzKTsKKwljcHVpbmZvLnRsYl9udW1fZW50cmllcyA9IGZjcHUoY3B1LCAiYWx0cix0bGItbnVtLWVudHJpZXMiKTsKKwljcHVpbmZvLnRsYl9udW1fbGluZXMgPSBjcHVpbmZvLnRsYl9udW1fZW50cmllcyAvIGNwdWluZm8udGxiX251bV93YXlzOworCWNwdWluZm8udGxiX3B0cl9zeiA9IGZjcHUoY3B1LCAiYWx0cix0bGItcHRyLXN6Iik7CisKKwljcHVpbmZvLnJlc2V0X2FkZHIgPSBmY3B1KGNwdSwgImFsdHIscmVzZXQtYWRkciIpOworCWNwdWluZm8uZXhjZXB0aW9uX2FkZHIgPSBmY3B1KGNwdSwgImFsdHIsZXhjZXB0aW9uLWFkZHIiKTsKKwljcHVpbmZvLmZhc3RfdGxiX21pc3NfZXhjX2FkZHIgPSBmY3B1KGNwdSwgImFsdHIsZmFzdC10bGItbWlzcy1hZGRyIik7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCisvKgorICogR2V0IENQVSBpbmZvcm1hdGlvbiBmb3IgdXNlIGJ5IHRoZSBwcm9jZnMuCisgKi8KK3N0YXRpYyBpbnQgc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlpbnQgY291bnQgPSAwOworCWNvbnN0IHUzMiBjbG9ja2ZyZXEgPSBjcHVpbmZvLmNwdV9jbG9ja19mcmVxOworCisJY291bnQgPSBzZXFfcHJpbnRmKG0sCisJCQkiQ1BVOlx0XHROaW9zIElJLyVzXG4iCisJCQkiTU1VOlx0XHQlc1xuIgorCQkJIkZQVTpcdFx0bm9uZVxuIgorCQkJIkNsb2NraW5nOlx0JXUuJTAydSBNSHpcbiIKKwkJCSJCb2dvTWlwczpcdCVsdS4lMDJsdVxuIgorCQkJIkNhbGlicmF0aW9uOlx0JWx1IGxvb3BzXG4iLAorCQkJY3B1aW5mby5jcHVfaW1wbCwKKwkJCWNwdWluZm8ubW11ID8gInByZXNlbnQiIDogIm5vbmUiLAorCQkJY2xvY2tmcmVxIC8gMTAwMDAwMCwgKGNsb2NrZnJlcSAvIDEwMDAwMCkgJSAxMCwKKwkJCShsb29wc19wZXJfamlmZnkgKiBIWikgLyA1MDAwMDAsCisJCQkoKGxvb3BzX3Blcl9qaWZmeSAqIEhaKSAvIDUwMDApICUgMTAwLAorCQkJKGxvb3BzX3Blcl9qaWZmeSAqIEhaKSk7CisKKwljb3VudCArPSBzZXFfcHJpbnRmKG0sCisJCQkiSFc6XG4iCisJCQkiIE1VTDpcdFx0JXNcbiIKKwkJCSIgTVVMWDpcdFx0JXNcbiIKKwkJCSIgRElWOlx0XHQlc1xuIiwKKwkJCWNwdWluZm8uaGFzX211bCA/ICJ5ZXMiIDogIm5vIiwKKwkJCWNwdWluZm8uaGFzX211bHggPyAieWVzIiA6ICJubyIsCisJCQljcHVpbmZvLmhhc19kaXYgPyAieWVzIiA6ICJubyIpOworCisJY291bnQgKz0gc2VxX3ByaW50ZihtLAorCQkJIkljYWNoZTpcdFx0JXVrQiwgbGluZSBsZW5ndGg6ICV1XG4iLAorCQkJY3B1aW5mby5pY2FjaGVfc2l6ZSA+PiAxMCwKKwkJCWNwdWluZm8uaWNhY2hlX2xpbmVfc2l6ZSk7CisKKwljb3VudCArPSBzZXFfcHJpbnRmKG0sCisJCQkiRGNhY2hlOlx0XHQldWtCLCBsaW5lIGxlbmd0aDogJXVcbiIsCisJCQljcHVpbmZvLmRjYWNoZV9zaXplID4+IDEwLAorCQkJY3B1aW5mby5kY2FjaGVfbGluZV9zaXplKTsKKworCWNvdW50ICs9IHNlcV9wcmludGYobSwKKwkJCSJUTEI6XHRcdCV1IHdheXMsICV1IGVudHJpZXMsICV1IFBJRCBiaXRzXG4iLAorCQkJY3B1aW5mby50bGJfbnVtX3dheXMsCisJCQljcHVpbmZvLnRsYl9udW1fZW50cmllcywKKwkJCWNwdWluZm8udGxiX3BpZF9udW1fYml0cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKmNwdWluZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwl1bnNpZ25lZCBsb25nIGkgPSAqcG9zOworCisJcmV0dXJuIGkgPCBudW1fcG9zc2libGVfY3B1cygpID8gKHZvaWQgKikgKGkgKyAxKSA6IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpjcHVpbmZvX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkrKypwb3M7CisJcmV0dXJuIGNwdWluZm9fc3RhcnQobSwgcG9zKTsKK30KKworc3RhdGljIHZvaWQgY3B1aW5mb19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKK30KKworY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3AgPSB7CisJLnN0YXJ0CT0gY3B1aW5mb19zdGFydCwKKwkubmV4dAk9IGNwdWluZm9fbmV4dCwKKwkuc3RvcAk9IGNwdWluZm9fc3RvcCwKKwkuc2hvdwk9IHNob3dfY3B1aW5mbworfTsKKworI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9uaW9zMi9rZXJuZWwvZW50cnkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2JjYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvZW50cnkuUwpAQCAtMCwwICsxLDU1NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbmlvczIva2VybmVsL2VudHJ5LlMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCAgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqCisgKiBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyLCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQorICogIENvcHlyaWdodCAoQykgMTk5OCAgRC4gSmVmZiBEaW9ubmUgPGplZmZAbGluZW8uY2E+LAorICogICAgICAgICAgICAgICAgICAgICAgS2VubmV0aCBBbGJhbm93c2tpIDxramFoZHNAa2phaGRzLmNvbT4sCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwICBMaW5lbyBJbmMuICh3d3cubGluZW8uY29tKQorICogIENvcHlyaWdodCAoQykgMjAwNCAgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogTGludXgvbTY4ayBzdXBwb3J0IGJ5IEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiA2ODA2MCBmaXhlcyBieSBKZXNwZXIgU2tvdgorICogQ29sZEZpcmUgc3VwcG9ydCBieSBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQorICogNTMwNyBmaXhlcyBieSBEYXZpZCBXLiBNaWxsZXIKKyAqIGxpbnV4IDIuNCBzdXBwb3J0IERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUBzbmFwZ2Vhci5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW1hY3Jvcy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKy5tYWNybyBHRVRfVEhSRUFEX0lORk8gcmVnCisuaWYgVEhSRUFEX1NJWkUgJiAweGZmZmYwMDAwCisJYW5kaGkJXHJlZywgc3AsICVoaSh+KFRIUkVBRF9TSVpFLTEpKQorLmVsc2UKKwlhZGRpCVxyZWcsIHIwLCAlbG8ofihUSFJFQURfU0laRS0xKSkKKwlhbmQJXHJlZywgXHJlZywgc3AKKy5lbmRpZgorLmVuZG0KKworLm1hY3JvCWt1c2VyX2NtcHhjaGdfY2hlY2sKKwkvKgorCSAqIE1ha2Ugc3VyZSBvdXIgdXNlciBzcGFjZSBhdG9taWMgaGVscGVyIGlzIHJlc3RhcnRlZCBpZiBpdCB3YXMKKwkgKiBpbnRlcnJ1cHRlZCBpbiBhIGNyaXRpY2FsIHJlZ2lvbi4KKwkgKiBlYS00ID0gYWRkcmVzcyBvZiBpbnRlcnJ1cHRlZCBpbnNuIChlYSBtdXN0IGJlIHByZXNlcnZlZCkuCisJICogc3AgPSBzYXZlZCByZWdzLgorCSAqIGNtcHhjaGdfbGR3ID0gZmlyc3QgY3JpdGljYWwgaW5zbiwgY21weGNoZ19zdHcgPSBsYXN0IGNyaXRpY2FsIGluc24uCisJICogSWYgZWEgPD0gY21weGNoZ19zdHcgYW5kIGVhID4gY21weGNoZ19sZHcgdGhlbiBzYXZlZCBFQSBpcyBzZXQgdG8KKwkgKiBjbXB4Y2hnX2xkdyArIDQuCisJKi8KKwkvKiBldCA9IGNtcHhjaGdfc3R3ICsgNCAqLworCW1vdnVpICAgZXQsIChLVVNFUl9CQVNFICsgNCArIChjbXB4Y2hnX3N0dyAtIF9fa3VzZXJfaGVscGVyX3N0YXJ0KSkKKwliZ3R1CWVhLCBldCwgMWYKKworCXN1YmkJZXQsIGV0LCAoY21weGNoZ19zdHcgLSBjbXB4Y2hnX2xkdykgLyogZXQgPSBjbXB4Y2hnX2xkdyArIDQgKi8KKwlibHR1CWVhLCBldCwgMWYKKwlzdHcJZXQsIFBUX0VBKHNwKQkvKiBmaXggdXAgRUEgKi8KKwltb3YJZWEsIGV0CisxOgorLmVuZG0KKworLnNlY3Rpb24gLnJvZGF0YQorLmFsaWduIDQKK2V4Y2VwdGlvbl90YWJsZToKKwkud29yZCB1bmhhbmRsZWRfZXhjZXB0aW9uCS8qIDAgLSBSZXNldCAqLworCS53b3JkIHVuaGFuZGxlZF9leGNlcHRpb24JLyogMSAtIFByb2Nlc3Nvci1vbmx5IFJlc2V0ICovCisJLndvcmQgZXh0ZXJuYWxfaW50ZXJydXB0CS8qIDIgLSBJbnRlcnJ1cHQgKi8KKwkud29yZCBoYW5kbGVfdHJhcAkJLyogMyAtIFRyYXAgSW5zdHJ1Y3Rpb24gKi8KKworCS53b3JkIGluc3RydWN0aW9uX3RyYXAJCS8qIDQgLSBVbmltcGxlbWVudGVkIGluc3RydWN0aW9uICovCisJLndvcmQgaGFuZGxlX2lsbGVnYWwJCS8qIDUgLSBJbGxlZ2FsIGluc3RydWN0aW9uICovCisJLndvcmQgaGFuZGxlX3VuYWxpZ25lZAkJLyogNiAtIE1pc2FsaWduZWQgZGF0YSBhY2Nlc3MgKi8KKwkud29yZCBoYW5kbGVfdW5hbGlnbmVkCQkvKiA3IC0gTWlzYWxpZ25lZCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisKKwkud29yZCBoYW5kbGVfZGl2ZXJyb3IJCS8qIDggLSBEaXZpc2lvbiBlcnJvciAqLworCS53b3JkIHByb3RlY3Rpb25fZXhjZXB0aW9uX2JhCS8qIDkgLSBTdXBlcnZpc29yLW9ubHkgaW5zdHIuIGFkZHJlc3MgKi8KKwkud29yZCBwcm90ZWN0aW9uX2V4Y2VwdGlvbl9pbnN0ciAvKiAxMCAtIFN1cGVydmlzb3Igb25seSBpbnN0cnVjdGlvbiAqLworCS53b3JkIHByb3RlY3Rpb25fZXhjZXB0aW9uX2JhCS8qIDExIC0gU3VwZXJ2aXNvciBvbmx5IGRhdGEgYWRkcmVzcyAqLworCisJLndvcmQgdW5oYW5kbGVkX2V4Y2VwdGlvbgkvKiAxMiAtIERvdWJsZSBUTEIgbWlzcyAoZGF0YSkgKi8KKwkud29yZCBwcm90ZWN0aW9uX2V4Y2VwdGlvbl9wdGUJLyogMTMgLSBUTEIgcGVybWlzc2lvbiB2aW9sYXRpb24gKHgpICovCisJLndvcmQgcHJvdGVjdGlvbl9leGNlcHRpb25fcHRlCS8qIDE0IC0gVExCIHBlcm1pc3Npb24gdmlvbGF0aW9uIChyKSAqLworCS53b3JkIHByb3RlY3Rpb25fZXhjZXB0aW9uX3B0ZQkvKiAxNSAtIFRMQiBwZXJtaXNzaW9uIHZpb2xhdGlvbiAodykgKi8KKworCS53b3JkIHVuaGFuZGxlZF9leGNlcHRpb24JLyogMTYgLSBNUFUgcmVnaW9uIHZpb2xhdGlvbiAqLworCit0cmFwX3RhYmxlOgorCS53b3JkCWhhbmRsZV9zeXN0ZW1fY2FsbAkvKiAwICAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMSAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDIgICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAzICAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogNCAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDUgICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiA2ICAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogNyAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDggICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiA5ICAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMTAgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDExICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAxMiAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMTMgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDE0ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAxNSAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMTYgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDE3ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAxOCAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMTkgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDIwICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyMSAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMjIgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDIzICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyNCAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMjUgKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDI2ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAyNyAqLworCS53b3JkCWluc3RydWN0aW9uX3RyYXAJLyogMjggKi8KKwkud29yZAlpbnN0cnVjdGlvbl90cmFwCS8qIDI5ICovCisJLndvcmQJaW5zdHJ1Y3Rpb25fdHJhcAkvKiAzMCAqLworCS53b3JkCWhhbmRsZV9icmVha3BvaW50CS8qIDMxICovCisKKy50ZXh0Cisuc2V0IG5vYXQKKy5zZXQgbm9icmVhaworCitFTlRSWShpbnRoYW5kbGVyKQorCVNBVkVfQUxMCisKKwlrdXNlcl9jbXB4Y2hnX2NoZWNrCisKKwkvKiBDbGVhciBFSCBiaXQgYmVmb3JlIHdlIGdldCBhIG5ldyBleGNwZXRpb24gaW4gdGhlIGtlcm5lbAorCSAqIGFuZCBhZnRlciB3ZSBoYXZlIHNhdmVkIGl0IHRvIHRoZSBleGNlcHRpb24gZnJhbWUuIFRoaXMgaXMgZG9uZQorCSAqIHdoZXRoZXIgaXQncyB0cmFwLCB0bGItbWlzcyBvciBpbnRlcnJ1cHQuIElmIHdlIGRvbid0IGRvIHRoaXMKKwkgKiBlc3RhdHVzIGlzIG5vdCB1cGRhdGVkIHRoZSBuZXh0IGV4Y2VwdGlvbi4KKwkgKi8KKwlyZGN0bAlyMjQsIHN0YXR1cworCW1vdmkJcjksICVsbyh+U1RBVFVTX0VIKQorCWFuZAlyMjQsIHIyNCwgcjkKKwl3cmN0bAlzdGF0dXMsIHIyNAorCisJLyogUmVhZCBjYXVzZSBhbmQgdmVjdG9yIGFuZCBicmFuY2ggdG8gdGhlIGFzc29jaWF0ZWQgaGFuZGxlciAqLworCW1vdglyNCwgc3AKKwlyZGN0bAlyNSwgZXhjZXB0aW9uCisJbW92aWEJcjksIGV4Y2VwdGlvbl90YWJsZQorCWFkZAlyMjQsIHI5LCByNQorCWxkdwlyMjQsIDAocjI0KQorCWptcAlyMjQKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhhbmRsZSB0cmFwcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK0VOVFJZKGhhbmRsZV90cmFwKQorCWxkdwlyMjQsIC00KGVhKQkvKiBpbnN0cnVjdGlvbiB0aGF0IGNhdXNlZCB0aGUgZXhjZXB0aW9uICovCisJc3JsaQlyMjQsIHIyNCwgNAorCWFuZGkJcjI0LCByMjQsIDB4N2MKKwltb3ZpYQlyOSx0cmFwX3RhYmxlCisJYWRkCXIyNCwgcjI0LCByOQorCWxkdwlyMjQsIDAocjI0KQorCWptcAlyMjQKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhhbmRsZSBzeXN0ZW0gY2FsbHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitFTlRSWShoYW5kbGVfc3lzdGVtX2NhbGwpCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwlyZGN0bAlyMTAsIHN0YXR1cworCW9yaQlyMTAsIHIxMCwgU1RBVFVTX1BJRQorCXdyY3RsCXN0YXR1cywgcjEwCisKKwkvKiBSZWxvYWQgcmVnaXN0ZXJzIGRlc3Ryb3llZCBieSBjb21tb24gY29kZS4gKi8KKwlsZHcJcjQsIFBUX1I0KHNwKQorCWxkdwlyNSwgUFRfUjUoc3ApCisKK2xvY2FsX3Jlc3RhcnQ6CisJLyogQ2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIHN5c3RlbSBjYWxsIGlzIHdpdGhpbiBsaW1pdHMgKi8KKwltb3Z1aQlyMSwgX19OUl9zeXNjYWxscworCWJnZXUJcjIsIHIxLCByZXRfaW52c3lzY2FsbAorCXNsbGkJcjEsIHIyLCAyCisJbW92aGkJcjExLCAlaGlhZGooc3lzX2NhbGxfdGFibGUpCisJYWRkCXIxLCByMSwgcjExCisJbGR3CXIxLCAlbG8oc3lzX2NhbGxfdGFibGUpKHIxKQorCWJlcQlyMSwgcjAsIHJldF9pbnZzeXNjYWxsCisKKwkvKiBDaGVjayBpZiB3ZSBhcmUgYmVpbmcgdHJhY2VkICovCisJR0VUX1RIUkVBRF9JTkZPIHIxMQorCWxkdwlyMTEsVElfRkxBR1MocjExKQorCUJUQk5aICAgcjExLHIxMSxUSUZfU1lTQ0FMTF9UUkFDRSx0cmFjZWRfc3lzdGVtX2NhbGwKKworCS8qIEV4ZWN1dGUgdGhlIHN5c3RlbSBjYWxsICovCisJY2FsbHIJcjEKKworCS8qIElmIHRoZSBzeXNjYWxsIHJldHVybnMgYSBuZWdhdGl2ZSByZXN1bHQ6CisJICogICBTZXQgcjcgdG8gMSB0byBpbmRpY2F0ZSBlcnJvciwKKwkgKiAgIE5lZ2F0ZSByMiB0byBnZXQgYSBwb3NpdGl2ZSBlcnJvciBjb2RlCisJICogSWYgdGhlIHN5c2NhbGwgcmV0dXJucyB6ZXJvIG9yIGEgcG9zaXRpdmUgdmFsdWU6CisJICogICBTZXQgcjcgdG8gMC4KKwkgKiBUaGUgc2lncmV0dXJuIHN5c3RlbSBjYWxscyB3aWxsIHNraXAgdGhlIGNvZGUgYmVsb3cgYnkKKwkgKiBhZGRpbmcgdG8gcmVnaXN0ZXIgcmEuIFRvIGF2b2lkIGRlc3Ryb3lpbmcgcmVnaXN0ZXJzCisJICovCit0cmFuc2xhdGVfcmNfYW5kX3JldDoKKwltb3ZpCXIxLCAwCisJYmdlCXIyLCB6ZXJvLCAzZgorCXN1YglyMiwgemVybywgcjIKKwltb3ZpCXIxLCAxCiszOgorCXN0dwlyMiwgUFRfUjIoc3ApCisJc3R3CXIxLCBQVF9SNyhzcCkKK2VuZF90cmFuc2xhdGVfcmNfYW5kX3JldDoKKworcmV0X2Zyb21fZXhjZXB0aW9uOgorCWxkdwlyMSwgUFRfRVNUQVRVUyhzcCkKKwkvKiBpZiBzbywgc2tpcCByZXNjaGVkLCBzaWduYWxzICovCisJVFNUQk5aCXIxLCByMSwgRVNUQVRVU19FVSwgTHVzZXJfcmV0dXJuCisKK3Jlc3RvcmVfYWxsOgorCXJkY3RsCXIxMCwgc3RhdHVzCQkJLyogZGlzYWJsZSBpbnRycyAqLworCWFuZGkJcjEwLCByMTAsICVsbyh+U1RBVFVTX1BJRSkKKwl3cmN0bAlzdGF0dXMsIHIxMAorCVJFU1RPUkVfQUxMCisJZXJldAorCisJLyogSWYgdGhlIHN5c2NhbGwgbnVtYmVyIHdhcyBpbnZhbGlkIHJldHVybiBFTk9TWVMgKi8KK3JldF9pbnZzeXNjYWxsOgorCW1vdmkJcjIsIC1FTk9TWVMKKwlicgl0cmFuc2xhdGVfcmNfYW5kX3JldAorCisJLyogVGhpcyBpbXBsZW1lbnRzIHRoZSBzYW1lIGFzIGFib3ZlLCBleGNlcHQgaXQgY2FsbHMKKwkgKiBkb19zeXNjYWxsX3RyYWNlX2VudGVyIGFuZCBkb19zeXNjYWxsX3RyYWNlX2V4aXQgYmVmb3JlIGFuZCBhZnRlciB0aGUKKwkgKiBzeXNjYWxsIGluIG9yZGVyIGZvciB1dGlsaXRpZXMgbGlrZSBzdHJhY2UgYW5kIGdkYiB0byB3b3JrLgorCSAqLwordHJhY2VkX3N5c3RlbV9jYWxsOgorCVNBVkVfU1dJVENIX1NUQUNLCisJY2FsbAlkb19zeXNjYWxsX3RyYWNlX2VudGVyCisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKworCS8qIENyZWF0ZSBzeXN0ZW0gY2FsbCByZWdpc3RlciBhcmd1bWVudHMuIFRoZSA1dGggYW5kIDZ0aAorCSAgIGFyZ3VtZW50cyBvbiBzdGFjayBhcmUgYWxyZWFkeSBpbiBwbGFjZSBhdCB0aGUgYmVnaW5uaW5nCisJICAgb2YgcHRfcmVncy4gKi8KKwlsZHcJcjIsIFBUX1IyKHNwKQorCWxkdwlyNCwgUFRfUjQoc3ApCisJbGR3CXI1LCBQVF9SNShzcCkKKwlsZHcJcjYsIFBUX1I2KHNwKQorCWxkdwlyNywgUFRfUjcoc3ApCisKKwkvKiBGZXRjaCB0aGUgc3lzY2FsbCBmdW5jdGlvbiwgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgYm91bmRhcmllcworCSAqIHNpbmNlIHRoaXMgaXMgYWxyZWFkeSBkb25lLgorCSAqLworCXNsbGkJcjEsIHIyLCAyCisJbW92aGkJcjExLCVoaWFkaihzeXNfY2FsbF90YWJsZSkKKwlhZGQJcjEsIHIxLCByMTEKKwlsZHcJcjEsICVsbyhzeXNfY2FsbF90YWJsZSkocjEpCisKKwljYWxscglyMQorCisJLyogSWYgdGhlIHN5c2NhbGwgcmV0dXJucyBhIG5lZ2F0aXZlIHJlc3VsdDoKKwkgKiAgIFNldCByNyB0byAxIHRvIGluZGljYXRlIGVycm9yLAorCSAqICAgTmVnYXRlIHIyIHRvIGdldCBhIHBvc2l0aXZlIGVycm9yIGNvZGUKKwkgKiBJZiB0aGUgc3lzY2FsbCByZXR1cm5zIHplcm8gb3IgYSBwb3NpdGl2ZSB2YWx1ZToKKwkgKiAgIFNldCByNyB0byAwLgorCSAqIFRoZSBzaWdyZXR1cm4gc3lzdGVtIGNhbGxzIHdpbGwgc2tpcCB0aGUgY29kZSBiZWxvdyBieQorCSAqIGFkZGluZyB0byByZWdpc3RlciByYS4gVG8gYXZvaWQgZGVzdHJveWluZyByZWdpc3RlcnMKKwkgKi8KK3RyYW5zbGF0ZV9yY19hbmRfcmV0MjoKKwltb3ZpCXIxLCAwCisJYmdlCXIyLCB6ZXJvLCA0ZgorCXN1YglyMiwgemVybywgcjIKKwltb3ZpCXIxLCAxCis0OgorCXN0dwlyMiwgUFRfUjIoc3ApCisJc3R3CXIxLCBQVF9SNyhzcCkKK2VuZF90cmFuc2xhdGVfcmNfYW5kX3JldDI6CisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwljYWxsCWRvX3N5c2NhbGxfdHJhY2VfZXhpdAorCVJFU1RPUkVfU1dJVENIX1NUQUNLCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK0x1c2VyX3JldHVybjoKKwlHRVRfVEhSRUFEX0lORk8JcjExCQkJLyogZ2V0IHRocmVhZF9pbmZvIHBvaW50ZXIgKi8KKwlsZHcJcjEwLCBUSV9GTEFHUyhyMTEpCQkvKiBnZXQgdGhyZWFkX2luZm8tPmZsYWdzICovCisJQU5ESTMyCXIxMSwgcjEwLCBfVElGX1dPUktfTUFTSworCWJlcQlyMTEsIHIwLCByZXN0b3JlX2FsbAkJLyogTm90aGluZyB0byBkbyAqLworCUJUQloJcjEsIHIxMCwgVElGX05FRURfUkVTQ0hFRCwgTHNpZ25hbF9yZXR1cm4KKworCS8qIFJlc2NoZWR1bGUgd29yayAqLworCWNhbGwJc2NoZWR1bGUKKwlicglyZXRfZnJvbV9leGNlcHRpb24KKworTHNpZ25hbF9yZXR1cm46CisJQU5ESTMyCXIxLCByMTAsIF9USUZfU0lHUEVORElORyB8IF9USUZfTk9USUZZX1JFU1VNRQorCWJlcQlyMSwgcjAsIHJlc3RvcmVfYWxsCisJbW92CXI0LCBzcAkJCS8qIHB0X3JlZ3MgKi8KKwlTQVZFX1NXSVRDSF9TVEFDSworCWNhbGwJZG9fbm90aWZ5X3Jlc3VtZQorCWJlcQlyMiwgcjAsIG5vX3dvcmtfcGVuZGluZworCVJFU1RPUkVfU1dJVENIX1NUQUNLCisJLyogcHJlcGFyZSByZXN0YXJ0IHN5c2NhbGwgaGVyZSB3aXRob3V0IGxlYXZpbmcga2VybmVsICovCisJbGR3CXIyLCBQVF9SMihzcCkJLyogcmVsb2FkIHN5c2NhbGwgbnVtYmVyIGluIHIyICovCisJbGR3IAlyNCwgUFRfUjQoc3ApCS8qIHJlbG9hZCBzeXNjYWxsIGFyZ3VtZW50cyByNC1yOSAqLworCWxkdyAJcjUsIFBUX1I1KHNwKQorCWxkdyAJcjYsIFBUX1I2KHNwKQorCWxkdyAJcjcsIFBUX1I3KHNwKQorCWxkdyAJcjgsIFBUX1I4KHNwKQorCWxkdyAJcjksIFBUX1I5KHNwKQorCWJyCWxvY2FsX3Jlc3RhcnQJLyogcmVzdGFydCBzeXNjYWxsICovCisKK25vX3dvcmtfcGVuZGluZzoKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhhbmRsZSBleHRlcm5hbCBpbnRlcnJ1cHRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKy8qCisgKiBUaGlzIGlzIHRoZSBnZW5lcmljIGludGVycnVwdCBoYW5kbGVyIChmb3IgYWxsIGhhcmR3YXJlIGludGVycnVwdAorICogc291cmNlcykuIEl0IGZpZ3VyZXMgb3V0IHRoZSB2ZWN0b3IgbnVtYmVyIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUKKyAqIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZGlyZWN0bHkuCisgKi8KK2V4dGVybmFsX2ludGVycnVwdDoKKwlyZGN0bAlyMTIsIGlwZW5kaW5nCisJcmRjdGwJcjksIGllbmFibGUKKwlhbmQJcjEyLCByMTIsIHI5CisJLyogc2tpcCBpZiBubyBpbnRlcnJ1cHQgaXMgcGVuZGluZyAqLworCWJlcQlyMTIsIHIwLCByZXRfZnJvbV9pbnRlcnJ1cHQKKworCW1vdmkJcjI0LCAtMQorCXN0dwlyMjQsIFBUX09SSUdfUjIoc3ApCisKKwkvKgorCSAqIFByb2Nlc3MgYW4gZXh0ZXJuYWwgaGFyZHdhcmUgaW50ZXJydXB0LgorCSAqLworCisJYWRkaQllYSwgZWEsIC00CS8qIHJlLWlzc3VlIHRoZSBpbnRlcnJ1cHRlZCBpbnN0cnVjdGlvbiAqLworCXN0dwllYSwgUFRfRUEoc3ApCisyOgltb3ZpCXI0LCAlbG8oLTEpCS8qIFN0YXJ0IGZyb20gYml0IHBvc2l0aW9uIDAsCisJCQkJCWhpZ2hlc3QgcHJpb3JpdHkgKi8KKwkJCQkvKiBUaGlzIGlzIHRoZSBJUlEgIyBmb3IgaGFuZGxlciBjYWxsICovCisxOglhbmRpCXIxMCwgcjEyLCAxCS8qIElzb2xhdGUgYml0IHdlIGFyZSBpbnRlcmVzdGVkIGluICovCisJc3JsaQlyMTIsIHIxMiwgMQkvKiBzaGlmdCBjb3VudCBpcyBjb3N0bHkgd2l0aG91dCBoYXJkd2FyZQorCQkJCQltdWx0aXBsaWVyICovCisJYWRkaQlyNCwgcjQsIDEKKwliZXEJcjEwLCByMCwgMWIKKwltb3YJcjUsIHNwCQkvKiBTZXR1cCBwdF9yZWdzIHBvaW50ZXIgZm9yIGhhbmRsZXIgY2FsbCAqLworCWNhbGwJZG9fSVJRCisJcmRjdGwJcjEyLCBpcGVuZGluZwkvKiBjaGVjayBhZ2FpbiBpZiBpcnEgc3RpbGwgcGVuZGluZyAqLworCXJkY3RsCXI5LCBpZW5hYmxlCS8qIElzb2xhdGUgcG9zc2libGUgaW50ZXJydXB0cyAqLworCWFuZAlyMTIsIHIxMiwgcjkKKwlibmUJcjEyLCByMCwgMmIKKwkvKiBicglyZXRfZnJvbV9pbnRlcnJ1cHQgKi8gLyogZmFsbCB0aHJvdWdoIHRvIHJldF9mcm9tX2ludGVycnVwdCAqLworCitFTlRSWShyZXRfZnJvbV9pbnRlcnJ1cHQpCisJbGR3CXIxLCBQVF9FU1RBVFVTKHNwKQkvKiBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsICovCisJVFNUQk5aCXIxLCByMSwgRVNUQVRVU19FVSwgTHVzZXJfcmV0dXJuCisKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCUdFVF9USFJFQURfSU5GTwlyMQorCWxkdwlyNCwgVElfUFJFRU1QVF9DT1VOVChyMSkKKwlibmUJcjQsIHIwLCByZXN0b3JlX2FsbAorCituZWVkX3Jlc2NoZWQ6CisJbGR3CXI0LCBUSV9GTEFHUyhyMSkJCS8qID8gTmVlZCByZXNjaGVkIHNldCAqLworCUJUQloJcjEwLCByNCwgVElGX05FRURfUkVTQ0hFRCwgcmVzdG9yZV9hbGwKKwlsZHcJcjQsIFBUX0VTVEFUVVMoc3ApCS8qID8gSW50ZXJydXB0cyBvZmYgKi8KKwlhbmRpCXIxMCwgcjQsIEVTVEFUVVNfRVBJRQorCWJlcQlyMTAsIHIwLCByZXN0b3JlX2FsbAorCW1vdmlhCXI0LCBQUkVFTVBUX0FDVElWRQorCXN0dwlyNCwgVElfUFJFRU1QVF9DT1VOVChyMSkKKwlyZGN0bAlyMTAsIHN0YXR1cwkJLyogZW5hYmxlIGludHJzIGFnYWluICovCisJb3JpCXIxMCwgcjEwICxTVEFUVVNfUElFCisJd3JjdGwJc3RhdHVzLCByMTAKKwlQVVNICXIxCisJY2FsbAlzY2hlZHVsZQorCVBPUAlyMQorCW1vdglyNCwgcjAKKwlzdHcJcjQsIFRJX1BSRUVNUFRfQ09VTlQocjEpCisJcmRjdGwJcjEwLCBzdGF0dXMJCS8qIGRpc2FibGUgaW50cnMgKi8KKwlhbmRpCXIxMCwgcjEwLCAlbG8oflNUQVRVU19QSUUpCisJd3JjdGwJc3RhdHVzLCByMTAKKwlicgluZWVkX3Jlc2NoZWQKKyNlbHNlCisJYnIJcmVzdG9yZV9hbGwKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgZmV3IHN5c2NhbGwgd3JhcHBlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisvKgorICogaW50IGNsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisgKgkJaW50IF9fdXNlciAqIHBhcmVudF90aWRwdHIsIGludCBfX3VzZXIgKiBjaGlsZF90aWRwdHIsCisgKgkJaW50IHRsc192YWwpCisgKi8KK0VOVFJZKHN5c19jbG9uZSkKKwlTQVZFX1NXSVRDSF9TVEFDSworCWFkZGkJc3AsIHNwLCAtNAorCXN0dwlyNywgMChzcCkJLyogUGFzcyA1dGggYXJnIHRocnUgc3RhY2sgKi8KKwltb3YJcjcsIHI2CQkvKiA0dGggYXJnIGlzIDNyZCBvZiBjbG9uZSgpICovCisJbW92CXI2LCB6ZXJvCS8qIDNyZCBhcmcgYWx3YXlzIDAgKi8KKwljYWxsCWRvX2ZvcmsKKwlhZGRpCXNwLCBzcCwgNAorCVJFU1RPUkVfU1dJVENIX1NUQUNLCisJcmV0CisKK0VOVFJZKHN5c19ydF9zaWdyZXR1cm4pCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwltb3YJcjQsIHNwCisJY2FsbAlkb19ydF9zaWdyZXR1cm4KKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCWFkZGkJcmEsIHJhLCAoZW5kX3RyYW5zbGF0ZV9yY19hbmRfcmV0IC0gdHJhbnNsYXRlX3JjX2FuZF9yZXQpCisJcmV0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQSBmZXcgb3RoZXIgd3JhcHBlcnMgYW5kIHN0dWJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcHJvdGVjdGlvbl9leGNlcHRpb25fcHRlOgorCXJkY3RsCXI2LCBwdGVhZGRyCisJc2xsaQlyNiwgcjYsIDEwCisJY2FsbAlkb19wYWdlX2ZhdWx0CisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK3Byb3RlY3Rpb25fZXhjZXB0aW9uX2JhOgorCXJkY3RsCXI2LCBiYWRhZGRyCisJY2FsbAlkb19wYWdlX2ZhdWx0CisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK3Byb3RlY3Rpb25fZXhjZXB0aW9uX2luc3RyOgorCWNhbGwJaGFuZGxlX3N1cGVydmlzb3JfaW5zdHIKKwlicglyZXRfZnJvbV9leGNlcHRpb24KKworaGFuZGxlX2JyZWFrcG9pbnQ6CisJY2FsbAlicmVha3BvaW50X2MKKwlicglyZXRfZnJvbV9leGNlcHRpb24KKworI2lmZGVmIENPTkZJR19OSU9TMl9BTElHTk1FTlRfVFJBUAoraGFuZGxlX3VuYWxpZ25lZDoKKwlTQVZFX1NXSVRDSF9TVEFDSworCWNhbGwJaGFuZGxlX3VuYWxpZ25lZF9jCisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlicglyZXRfZnJvbV9leGNlcHRpb24KKyNlbHNlCitoYW5kbGVfdW5hbGlnbmVkOgorCWNhbGwJaGFuZGxlX3VuYWxpZ25lZF9jCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisjZW5kaWYKKworaGFuZGxlX2lsbGVnYWw6CisJY2FsbAloYW5kbGVfaWxsZWdhbF9jCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKK2hhbmRsZV9kaXZlcnJvcjoKKwljYWxsCWhhbmRsZV9kaXZlcnJvcl9jCisJYnIJcmV0X2Zyb21fZXhjZXB0aW9uCisKKy8qCisgKiBCZXdhcmUgLSB3aGVuIGVudGVyaW5nIHJlc3VtZSwgcHJldiAodGhlIGN1cnJlbnQgdGFzaykgaXMKKyAqIGluIHI0LCBuZXh0ICh0aGUgbmV3IHRhc2spIGlzIGluIHI1LCBkb24ndCBjaGFuZ2UgdGhlc2UKKyAqIHJlZ2lzdGVycy4KKyAqLworRU5UUlkocmVzdW1lKQorCisJcmRjdGwJcjcsIHN0YXR1cwkJCS8qIHNhdmUgdGhyZWFkIHN0YXR1cyByZWcgKi8KKwlzdHcJcjcsIFRBU0tfVEhSRUFEICsgVEhSRUFEX0tQU1IocjQpCisKKwlhbmRpCXI3LCByNywgJWxvKH5TVEFUVVNfUElFKQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwl3cmN0bAlzdGF0dXMsIHI3CisKKwlTQVZFX1NXSVRDSF9TVEFDSworCXN0dwlzcCwgVEFTS19USFJFQUQgKyBUSFJFQURfS1NQKHI0KS8qIHNhdmUga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KKwlsZHcJc3AsIFRBU0tfVEhSRUFEICsgVEhSRUFEX0tTUChyNSkvKiByZXN0b3JlIG5ldyB0aHJlYWQgc3RhY2sgKi8KKwltb3ZpYQlyMjQsIF9jdXJyZW50X3RocmVhZAkJLyogc2F2ZSB0aHJlYWQgKi8KKwlHRVRfVEhSRUFEX0lORk8gcjEKKwlzdHcJcjEsIDAocjI0KQorCVJFU1RPUkVfU1dJVENIX1NUQUNLCisKKwlsZHcJcjcsIFRBU0tfVEhSRUFEICsgVEhSRUFEX0tQU1IocjUpLyogcmVzdG9yZSB0aHJlYWQgc3RhdHVzIHJlZyAqLworCXdyY3RsCXN0YXR1cywgcjcKKwlyZXQKKworRU5UUlkocmV0X2Zyb21fZm9yaykKKwljYWxsCXNjaGVkdWxlX3RhaWwKKwlicglyZXRfZnJvbV9leGNlcHRpb24KKworRU5UUlkocmV0X2Zyb21fa2VybmVsX3RocmVhZCkKKwljYWxsCXNjaGVkdWxlX3RhaWwKKwltb3YJcjQscjE3CS8qIGFyZyAqLworCWNhbGxyCXIxNgkvKiBmdW5jdGlvbiAqLworCWJyCXJldF9mcm9tX2V4Y2VwdGlvbgorCisvKgorICogS2VybmVsIHVzZXIgaGVscGVycy4KKyAqCisgKiBFYWNoIHNlZ21lbnQgaXMgNjQtYnl0ZSBhbGlnbmVkIGFuZCB3aWxsIGJlIG1hcHBlZCB0byB0aGUgPFVzZXIgc3BhY2U+LgorICogTmV3IHNlZ21lbnRzIChpZiBldmVyIG5lZWRlZCkgbXVzdCBiZSBhZGRlZCBhZnRlciB0aGUgZXhpc3Rpbmcgb25lcy4KKyAqIFRoaXMgbWVjaGFuaXNtIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIHRoaW5ncyB0aGF0IGFyZSByZWFsbHkgc21hbGwgYW5kCisgKiBqdXN0aWZpZWQsIGFuZCBub3QgYmUgYWJ1c2VkIGZyZWVseS4KKyAqCisgKi8KKworIC8qIEZpbGxpbmcgcGFkcyB3aXRoIHVuZGVmaW5lZCBpbnN0cnVjdGlvbnMuICovCisubWFjcm8Ja3VzZXJfcGFkIHN5bSBzaXplCisJLmlmCSgoLiAtIFxzeW0pICYgMykKKwkucmVwdAkoNCAtICguIC0gXHN5bSkgJiAzKQorCS5ieXRlCTAKKwkuZW5kcgorCS5lbmRpZgorCS5yZXB0CSgoXHNpemUgLSAoLiAtIFxzeW0pKSAvIDQpCisJLndvcmQJMHhkZWFkYmVlZgorCS5lbmRyCisuZW5kbQorCisJLmFsaWduCTYKKwkuZ2xvYmwJX19rdXNlcl9oZWxwZXJfc3RhcnQKK19fa3VzZXJfaGVscGVyX3N0YXJ0OgorCitfX2t1c2VyX2hlbHBlcl92ZXJzaW9uOgkJCQkvKiBAIDB4MTAwMCAqLworCS53b3JkCSgoX19rdXNlcl9oZWxwZXJfZW5kIC0gX19rdXNlcl9oZWxwZXJfc3RhcnQpID4+IDYpCisKK19fa3VzZXJfY21weGNoZzoJCQkJLyogQCAweDEwMDQgKi8KKwkvKgorCSAqIHI0IHBvaW50ZXIgdG8gZXhjaGFuZ2UgdmFyaWFibGUKKwkgKiByNSBvbGQgdmFsdWUKKwkgKiByNiBuZXcgdmFsdWUKKwkgKi8KK2NtcHhjaGdfbGR3OgorCWxkdwlyMiwgMChyNCkJCQkvKiBsb2FkIGN1cnJlbnQgdmFsdWUgKi8KKwlzdWIJcjIsIHIyLCByNQkJCS8qIGNvbXBhcmUgd2l0aCBvbGQgdmFsdWUgKi8KKwlibmUJcjIsIHplcm8sIGNtcHhjaGdfcmV0CisKKwkvKiBXZSBoYWQgYSBtYXRjaCwgc3RvcmUgdGhlIG5ldyB2YWx1ZSAqLworY21weGNoZ19zdHc6CisJc3R3CXI2LCAwKHI0KQorY21weGNoZ19yZXQ6CisJcmV0CisKKwlrdXNlcl9wYWQgX19rdXNlcl9jbXB4Y2hnLCA2NAorCisJLmdsb2JsCV9fa3VzZXJfc2lndHJhbXAKK19fa3VzZXJfc2lndHJhbXA6CisJbW92aQlyMiwgX19OUl9ydF9zaWdyZXR1cm4KKwl0cmFwCisKKwlrdXNlcl9wYWQgX19rdXNlcl9zaWd0cmFtcCwgNjQKKworCS5nbG9ibAlfX2t1c2VyX2hlbHBlcl9lbmQKK19fa3VzZXJfaGVscGVyX2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL2hlYWQuUyBiL2FyY2gvbmlvczIva2VybmVsL2hlYWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzJjZTRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvaGVhZC5TCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqICAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVmljIFBoaWxsaXBzLCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqCisgKiBCYXNlZCBvbiBoZWFkLlMgZm9yIEFsdGVyYSdzIEV4Y2FsaWJ1ciBkZXZlbG9wbWVudCBib2FyZCB3aXRoIG5pb3MgcHJvY2Vzc29yCisgKgorICogQmFzZWQgb24gdGhlIGZvbGxvd2luZyBmcm9tIHRoZSBFeGNhbGlidXIgc2RrIGRpc3RyaWJ1dGlvbjoKKyAqCU5BX01lbW9yeU1hcC5zLCBOUl9KdW1wVG9TdGFydC5zLCBOUl9TZXR1cC5zLCBOUl9DV1BNYW5hZ2VyLnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9hc20tbWFjcm9zLmg+CisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBzcGVjaWFsIHBhZ2UgdGhhdCBpcyB1c2VkIGZvciB6ZXJvLWluaXRpYWxpemVkCisgKiBkYXRhIGFuZCBDT1cuCisgKi8KKy5kYXRhCisuZ2xvYmFsIGVtcHR5X3plcm9fcGFnZQorLmFsaWduIDEyCitlbXB0eV96ZXJvX3BhZ2U6CisJLnNwYWNlCVBBR0VfU0laRQorCisvKgorICogVGhpcyBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZCBhcyBhbiBleHRlbnNpb24gdG8gdGhlIG5pb3MnCisgKiBTVEFUVVMgcmVnaXN0ZXIgdG8gZW11bGF0ZSBhIHVzZXIvc3VwZXJ2aXNvciBtb2RlLgorICovCisJLmRhdGEKKwkuYWxpZ24JMgorCS5zZXQgbm9hdAorCisJLmdsb2JhbCBfY3VycmVudF90aHJlYWQKK19jdXJyZW50X3RocmVhZDoKKwkubG9uZwkwCisvKgorICogSW5wdXQocyk6IHBhc3NlZCBmcm9tIHUtYm9vdAorICogICByNCAtIE9wdGlvbmFsIHBvaW50ZXIgdG8gYSBib2FyZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisgKiAgIHI1IC0gT3B0aW9uYWwgcG9pbnRlciB0byB0aGUgcGh5c2ljYWwgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgaW5pdCBSQU0KKyAqICAgICAgICBkaXNrLgorICogICByNiAtIE9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIHBoeXNpY2FsIGVuZGluZyBhZGRyZXNzIG9mIHRoZSBpbml0IFJBTQorICogICAgICAgIGRpc2suCisgKiAgIHI3IC0gT3B0aW9uYWwgcG9pbnRlciB0byB0aGUgcGh5c2ljYWwgc3RhcnRpbmcgYWRkcmVzcyBvZiBhbnkga2VybmVsCisgKiAgICAgICAgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMuCisgKi8KKworLyoKKyAqIEZpcnN0IGV4ZWN1dGFibGUgY29kZSAtIGRldGVjdGVkIGFuZCBqdW1wZWQgdG8gYnkgdGhlIFJPTSBib290c3RyYXAKKyAqIGlmIHRoZSBjb2RlIHJlc2lkZXMgaW4gZmxhc2ggKGxvb2tzIGZvciAiTmlvcyIgYXQgb2Zmc2V0IDB4MGMgZnJvbQorICogdGhlIHBvdGVudGlhbCBleGVjdXRhYmxlIGltYWdlKS4KKyAqLworCV9fSEVBRAorRU5UUlkoX3N0YXJ0KQorCXdyY3RsCXN0YXR1cywgcjAJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCisJLyogSW5pdGlhbGl6ZSBhbGwgY2FjaGUgbGluZXMgd2l0aGluIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSAqLworCW1vdmlhCXIxLCBOSU9TMl9JQ0FDSEVfU0laRQorCW1vdnVpCXIyLCBOSU9TMl9JQ0FDSEVfTElORV9TSVpFCisKK2ljYWNoZV9pbml0OgorCWluaXRpCXIxCisJc3ViCXIxLCByMSwgcjIKKwliZ3QJcjEsIHIwLCBpY2FjaGVfaW5pdAorCWJyCTFmCisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRoZSBleGNlcHRpb24gaGFuZGxlci4gQ29kZSBpbiBqdW1wCisJICogdG8gb3VyIGhhbmRsZXIKKwkgKi8KK0VOVFJZKGV4Y2VwdGlvbl9oYW5kbGVyX2hvb2spCisJbW92aWEJcjI0LCBpbnRoYW5kbGVyCisJam1wCXIyNAorCitFTlRSWShmYXN0X2hhbmRsZXIpCisJbmV4dHBjIGV0CitoZWxwZXI6CisJc3R3CXIzLCByM3NhdmUgLSBoZWxwZXIoZXQpCisKKwlyZGN0bAlyMyAsIHB0ZWFkZHIKKwlzcmxpCXIzLCByMywgMTIKKwlzbGxpCXIzLCByMywgMgorCW1vdmlhCWV0LCBwZ2RfY3VycmVudAorCisJbGR3CWV0LCAwKGV0KQorCWFkZAlyMywgZXQsIHIzCisJbGR3CWV0LCAwKHIzKQorCisJcmRjdGwJcjMsIHB0ZWFkZHIKKwlhbmRpCXIzLCByMywgMHhmZmYKKwlhZGQJZXQsIHIzLCBldAorCWxkdwlldCwgMChldCkKKwl3cmN0bAl0bGJhY2MsIGV0CisJbmV4dHBjCWV0CitoZWxwZXIyOgorCWxkdwlyMywgcjNzYXZlIC0gaGVscGVyMihldCkKKwlzdWJpCWVhLCBlYSwgNAorCWVyZXQKK3Izc2F2ZToKKwkud29yZCAweDAKK0VOVFJZKGZhc3RfaGFuZGxlcl9lbmQpCisKKzE6CisJLyoKKwkgKiBBZnRlciB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgaXMgaW5pdGlhbGl6ZWQsIHRoZSBkYXRhIGNhY2hlIG11c3QKKwkgKiBhbHNvIGJlIGluaXRpYWxpemVkLgorCSAqLworCW1vdmlhCXIxLCBOSU9TMl9EQ0FDSEVfU0laRQorCW1vdnVpCXIyLCBOSU9TMl9EQ0FDSEVfTElORV9TSVpFCisKK2RjYWNoZV9pbml0OgorCWluaXRkCTAocjEpCisJc3ViCXIxLCByMSwgcjIKKwliZ3QJcjEsIHIwLCBkY2FjaGVfaW5pdAorCisJbmV4dHBjCXIxCQkJLyogRmluZCBvdXQgd2hlcmUgd2UgYXJlICovCitjaGthZHI6CisJbW92aWEJcjIsIGNoa2FkcgorCWJlcQlyMSwgcjIsZmluaXNoX21vdmUJLyogV2UgYXJlIHJ1bm5pbmcgaW4gUkFNIGRvbmUgKi8KKwlhZGRpCXIxLCByMSwoX3N0YXJ0IC0gY2hrYWRyKQkvKiBTb3VyY2UgKi8KKwltb3ZpYQlyMiwgX3N0YXJ0CQkvKiBEZXN0aW5hdGlvbiAqLworCW1vdmlhCXIzLCBfX2Jzc19zdGFydAkJLyogRW5kIG9mIGNvcHkgKi8KKworbG9vcF9tb3ZlOgkJCQkvKiByMTogc3JjLCByMjogZGVzdCwgcjM6IGxhc3QgZGVzdCAqLworCWxkdwlyOCwgMChyMSkJCS8qIGxvYWQgYSB3b3JkIGZyb20gW3IxXSAqLworCXN0dwlyOCwgMChyMikJCS8qIHN0b3JlIGEgd29yZCB0byBkZXN0IFtyMl0gKi8KKwlmbHVzaGQJMChyMikJCQkvKiBGbHVzaCBjYWNoZSBmb3Igc2FmZXR5ICovCisJYWRkaSAJcjEsIHIxLCA0CQkvKiBpbmMgdGhlIHNyYyBhZGRyICovCisJYWRkaQlyMiwgcjIsIDQJCS8qIGluYyB0aGUgZGVzdCBhZGRyICovCisJYmx0CXIyLCByMywgbG9vcF9tb3ZlCisKKwltb3ZpYQlyMSwgZmluaXNoX21vdmUJCS8qIFZNQShfc3RhcnQpLT5sMSAqLworCWptcAlyMQkJCS8qIGptcCB0byBfc3RhcnQgKi8KKworZmluaXNoX21vdmU6CisKKwkvKiBNYXNrIG9mZiBhbGwgcG9zc2libGUgaW50ZXJydXB0cyAqLworCXdyY3RsCWllbmFibGUsIHIwCisKKwkvKiBDbGVhciAuYnNzICovCisJbW92aWEJcjIsIF9fYnNzX3N0YXJ0CisJbW92aWEJcjEsIF9fYnNzX3N0b3AKKzE6CisJc3RiCXIwLCAwKHIyKQorCWFkZGkJcjIsIHIyLCAxCisJYm5lCXIxLCByMiwgMWIKKworCW1vdmlhCXIxLCBpbml0X3RocmVhZF91bmlvbgkvKiBzZXQgc3RhY2sgYXQgdG9wIG9mIHRoZSB0YXNrIHVuaW9uICovCisJYWRkaQlzcCwgcjEsIFRIUkVBRF9TSVpFCisJbW92aWEJcjIsIF9jdXJyZW50X3RocmVhZAkvKiBSZW1lbWJlciBjdXJyZW50IHRocmVhZCAqLworCXN0dwlyMSwgMChyMikKKworCW1vdmlhCXIxLCBuaW9zMl9ib290X2luaXQJLyogc2F2ZSBhcmdzIHI0LXI3IHBhc3NlZCBmcm9tIHUtYm9vdCAqLworCWNhbGxyCXIxCisKKwltb3ZpYQlyMSwgc3RhcnRfa2VybmVsCS8qIGNhbGwgc3RhcnRfa2VybmVsIGFzIGEgc3Vicm91dGluZSAqLworCWNhbGxyCXIxCisKKwkvKiBJZiB3ZSByZXR1cm4gZnJvbSBzdGFydF9rZXJuZWwsIGJyZWFrIHRvIHRoZSBvY2kgZGVidWdnZXIgYW5kCisJICogYnVnZ2VyZWQgd2UgYXJlLgorCSAqLworCWJyZWFrCisKKwkvKiBFbmQgb2Ygc3RhcnR1cCBjb2RlICovCisuc2V0IGF0CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9pbnNuZW11LlMgYi9hcmNoL25pb3MyL2tlcm5lbC9pbnNuZW11LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2YjY1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL2luc25lbXUuUwpAQCAtMCwwICsxLDU5MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgorCisuc2V0IG5vYXQKKy5zZXQgbm9icmVhaworCisvKgorKiBFeHBsaWNpdGx5IGFsbG93IHRoZSB1c2Ugb2YgcjEgKHRoZSBhc3NlbWJsZXIgdGVtcG9yYXJ5IHJlZ2lzdGVyKQorKiB3aXRoaW4gdGhpcyBjb2RlLiBUaGlzIHJlZ2lzdGVyIGlzIG5vcm1hbGx5IHJlc2VydmVkIGZvciB0aGUgdXNlIG9mCisqIHRoZSBjb21waWxlci4KKyovCisKK0VOVFJZKGluc3RydWN0aW9uX3RyYXApCisJbGR3CXIxLCBQVF9SMShzcCkJCS8vIFJlc3RvcmUgcmVnaXN0ZXJzCisJbGR3CXIyLCBQVF9SMihzcCkKKwlsZHcJcjMsIFBUX1IzKHNwKQorCWxkdwlyNCwgUFRfUjQoc3ApCisJbGR3CXI1LCBQVF9SNShzcCkKKwlsZHcJcjYsIFBUX1I2KHNwKQorCWxkdwlyNywgUFRfUjcoc3ApCisJbGR3CXI4LCBQVF9SOChzcCkKKwlsZHcJcjksIFBUX1I5KHNwKQorCWxkdwlyMTAsIFBUX1IxMChzcCkKKwlsZHcJcjExLCBQVF9SMTEoc3ApCisJbGR3CXIxMiwgUFRfUjEyKHNwKQorCWxkdwlyMTMsIFBUX1IxMyhzcCkKKwlsZHcJcjE0LCBQVF9SMTQoc3ApCisJbGR3CXIxNSwgUFRfUjE1KHNwKQorCWxkdwlyYSwgUFRfUkEoc3ApCisJbGR3CWZwLCBQVF9GUChzcCkKKwlsZHcJZ3AsIFBUX0dQKHNwKQorCWxkdwlldCwgUFRfRVNUQVRVUyhzcCkKKwl3cmN0bAllc3RhdHVzLCBldAorCWxkdwllYSwgUFRfRUEoc3ApCisJbGR3CWV0LCBQVF9TUChzcCkJCS8qIGJhY2t1cCBzcCBpbiBldCAqLworCisJYWRkaQlzcCwgc3AsIFBUX1JFR1NfU0laRQorCisJLyogSU5TVFJVQ1RJT04gRU1VTEFUSU9OCisJKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJKgorCSogTmlvcyBJSSBwcm9jZXNzb3JzIGdlbmVyYXRlIGV4Y2VwdGlvbnMgZm9yIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb25zLgorCSogVGhlIHJvdXRpbmVzIGJlbG93IGVtdWxhdGUgdGhlc2UgaW5zdHJ1Y3Rpb25zLiAgRGVwZW5kaW5nIG9uIHRoZQorCSogcHJvY2Vzc29yIGNvcmUsIHRoZSBvbmx5IGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgZW11bGF0ZWQKKwkqIGFyZSBkaXYsIGRpdnUsIG11bCwgbXVsaSwgbXVseHNzLCBtdWx4c3UsIGFuZCBtdWx4dXUuCisJKgorCSogVGhlIGVtdWxhdGlvbnMgbWF0Y2ggdGhlIGluc3RydWN0aW9ucywgZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nCisJKiBsaW1pdGF0aW9uczoKKwkqCisJKiAxKSBUaGUgZW11bGF0aW9uIHJvdXRpbmVzIGRvIG5vdCBlbXVsYXRlIHRoZSB1c2Ugb2YgdGhlIGV4Y2VwdGlvbgorCSogICAgdGVtcG9yYXJ5IHJlZ2lzdGVyIChldCkgYXMgYSBzb3VyY2Ugb3BlcmFuZCBiZWNhdXNlIHRoZSBleGNlcHRpb24KKwkqICAgIGhhbmRsZXIgYWxyZWFkeSBoYXMgbW9kaWZpZWQgaXQuCisJKgorCSogMikgVGhlIHJvdXRpbmVzIGRvIG5vdCBlbXVsYXRlIHRoZSB1c2Ugb2YgdGhlIHN0YWNrIHBvaW50ZXIgKHNwKSBvcgorCSogICAgdGhlIGV4Y2VwdGlvbiByZXR1cm4gYWRkcmVzcyByZWdpc3RlciAoZWEpIGFzIGEgZGVzdGluYXRpb24gYmVjYXVzZQorCSogICAgbW9kaWZ5aW5nIHRoZXNlIHJlZ2lzdGVycyBjcmFzaGVzIHRoZSBleGNlcHRpb24gaGFuZGxlciBvciB0aGUKKwkqICAgIGludGVycnVwdGVkIHJvdXRpbmUuCisJKgorCSogRGV0YWlsZWQgRGVzaWduCisJKiAtLS0tLS0tLS0tLS0tLS0KKwkqCisJKiBUaGUgZW11bGF0aW9uIHJvdXRpbmVzIGV4cGVjdCB0aGUgY29udGVudHMgb2YgaW50ZWdlciByZWdpc3RlcnMgcjAtcjMxCisJKiB0byBiZSBvbiB0aGUgc3RhY2sgYXQgYWRkcmVzc2VzIHNwLCA0KHNwKSwgOChzcCksIC4uLiAxMjQoc3ApLiAgVGhlCisJKiByb3V0aW5lcyByZXRyaWV2ZSBzb3VyY2Ugb3BlcmFuZHMgZnJvbSB0aGUgc3RhY2sgYW5kIG1vZGlmeSB0aGUKKwkqIGRlc3RpbmF0aW9uIHJlZ2lzdGVyJ3MgdmFsdWUgb24gdGhlIHN0YWNrIHByaW9yIHRvIHRoZSBlbmQgb2YgdGhlCisJKiBleGNlcHRpb24gaGFuZGxlci4gIFRoZW4gYWxsIHJlZ2lzdGVycyBleGNlcHQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisJKiBhcmUgcmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzLgorCSoKKwkqIFRoZSBpbnN0cnVjdGlvbiB0aGF0IGNhdXNlcyB0aGUgZXhjZXB0aW9uIGlzIGZvdW5kIGF0IGFkZHJlc3MgLTQoZWEpLgorCSogVGhlIGluc3RydWN0aW9uJ3MgT1AgYW5kIE9QWCBmaWVsZHMgaWRlbnRpZnkgdGhlIG9wZXJhdGlvbiB0byBiZQorCSogcGVyZm9ybWVkLgorCSoKKwkqIE9uZSBpbnN0cnVjdGlvbiwgbXVsaSwgaXMgYW4gSS10eXBlIGluc3RydWN0aW9uIHRoYXQgaXMgaWRlbnRpZmllZCBieQorCSogYW4gT1AgZmllbGQgb2YgMHgyNC4KKwkqCisJKiBtdWxpICAgQUFBQUEsQkJCQkIsSUlJSUlJSUlJSUlJSUlJSSwtMHgyNC0KKwkqICAgICAgICAgICAyNyAgICAyMiAgICAgICAgICAgICAgICA2ICAgICAgMCAgICA8LS0gTFNCIG9mIGZpZWxkCisJKgorCSogVGhlIHJlbWFpbmluZyBlbXVsYXRlZCBpbnN0cnVjdGlvbnMgYXJlIFItdHlwZSBhbmQgaGF2ZSBhbiBPUCBmaWVsZAorCSogb2YgMHgzYS4gIFRoZWlyIE9QWCBmaWVsZHMgaWRlbnRpZnkgdGhlbS4KKwkqCisJKiBSLXR5cGUgQUFBQUEsQkJCQkIsQ0NDQ0MsWFhYWFhYLE5OTk5OLC0weDNhLQorCSogICAgICAgICAgIDI3ICAgIDIyICAgIDE3ICAgICAxMSAgICAgNiAgICAgIDAgIDwtLSBMU0Igb2YgZmllbGQKKwkqCisJKgorCSogT3Bjb2RlIEVuY29kaW5nLiAgbXVsaSBpcyBpZGVudGlmaWVkIGJ5IGl0cyBPUCB2YWx1ZS4gIFRoZW4gT1BYICYgMHgwMgorCSogaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIGRpdmlzaW9uIG9wY29kZXMgYW5kIHRoZQorCSogcmVtYWluaW5nIG11bHRpcGxpY2F0aW9uIG9wY29kZXMuCisJKgorCSogSW5zdHJ1Y3Rpb24gICBPUCAgICAgIE9QWCAgICBPUFggJiAweDAyCisJKiAtLS0tLS0tLS0tLSAgIC0tLS0gICAgLS0tLSAgIC0tLS0tLS0tLS0KKwkqIG11bGkgICAgICAgICAgMHgyNAorCSogZGl2dSAgICAgICAgICAweDNhICAgIDB4MjQgICAgICAgICAwCisJKiBkaXYgICAgICAgICAgIDB4M2EgICAgMHgyNSAgICAgICAgIDAKKwkqIG11bCAgICAgICAgICAgMHgzYSAgICAweDI3ICAgICAgIT0gMAorCSogbXVseHV1ICAgICAgICAweDNhICAgIDB4MDcgICAgICAhPSAwCisJKiBtdWx4c3UgICAgICAgIDB4M2EgICAgMHgxNyAgICAgICE9IDAKKwkqIG11bHhzcyAgICAgICAgMHgzYSAgICAweDFmICAgICAgIT0gMAorCSovCisKKworCS8qCisJKiBTYXZlIGV2ZXJ5dGhpbmcgb24gdGhlIHN0YWNrIHRvIG1ha2UgaXQgZWFzeSBmb3IgdGhlIGVtdWxhdGlvbgorCSogcm91dGluZXMgdG8gcmV0cmlldmUgdGhlIHNvdXJjZSByZWdpc3RlciBvcGVyYW5kcy4KKwkqLworCisJYWRkaSBzcCwgc3AsIC0xMjgKKwlzdHcgemVybywgMChzcCkJLyogU2F2ZSB6ZXJvIG9uIHN0YWNrIHRvIGF2b2lkIHNwZWNpYWwgY2FzZSBmb3IgcjAuICovCisJc3R3IHIxLCA0KHNwKQorCXN0dyByMiwgIDgoc3ApCisJc3R3IHIzLCAxMihzcCkKKwlzdHcgcjQsIDE2KHNwKQorCXN0dyByNSwgMjAoc3ApCisJc3R3IHI2LCAyNChzcCkKKwlzdHcgcjcsIDI4KHNwKQorCXN0dyByOCwgMzIoc3ApCisJc3R3IHI5LCAzNihzcCkKKwlzdHcgcjEwLCA0MChzcCkKKwlzdHcgcjExLCA0NChzcCkKKwlzdHcgcjEyLCA0OChzcCkKKwlzdHcgcjEzLCA1MihzcCkKKwlzdHcgcjE0LCA1NihzcCkKKwlzdHcgcjE1LCA2MChzcCkKKwlzdHcgcjE2LCA2NChzcCkKKwlzdHcgcjE3LCA2OChzcCkKKwlzdHcgcjE4LCA3MihzcCkKKwlzdHcgcjE5LCA3NihzcCkKKwlzdHcgcjIwLCA4MChzcCkKKwlzdHcgcjIxLCA4NChzcCkKKwlzdHcgcjIyLCA4OChzcCkKKwlzdHcgcjIzLCA5MihzcCkKKwkJLyogRG9uJ3QgYm90aGVyIHRvIHNhdmUgZXQuICBJdCdzIGFscmVhZHkgYmVlbiBjaGFuZ2VkLiAqLworCXJkY3RsIHI1LCBlc3RhdHVzCisJc3R3IHI1LCAgMTAwKHNwKQorCisJc3R3IGdwLCAxMDQoc3ApCisJc3R3IGV0LCAxMDgoc3ApCS8qIGV0IGNvbnRhaW5zIHByZXZpb3VzIHNwIHZhbHVlLiAqLworCXN0dyBmcCwgMTEyKHNwKQorCXN0dyBlYSwgMTE2KHNwKQorCXN0dyByYSwgMTIwKHNwKQorCisKKwkvKgorCSogU3BsaXQgdGhlIGluc3RydWN0aW9uIGludG8gaXRzIGZpZWxkcy4gIFdlIG5lZWQgNCpBLCA0KkIsIGFuZCA0KkMgYXMKKwkqIG9mZnNldHMgdG8gdGhlIHN0YWNrIHBvaW50ZXIgZm9yIGFjY2VzcyB0byB0aGUgc3RvcmVkIHJlZ2lzdGVyIHZhbHVlcy4KKwkqLworCWxkdyByMiwtNChlYSkJLyogcjIgPSBBQUFBQSxCQkJCQixJSUlJSUlJSUlJSUlJSUlJLFBQUFBQUCAqLworCXJvbGkgcjMsIHIyLCA3CS8qIHIzID0gQkJCLElJSUlJSUlJSUlJSUlJSUksUFBQUFBQLEFBQUFBLEJCICovCisJcm9saSByNCwgcjMsIDMJLyogcjQgPSBJSUlJSUlJSUlJSUlJSUlJLFBQUFBQUCxBQUFBQSxCQkJCQiAqLworCXJvbGkgcjUsIHI0LCAyCS8qIHI1ID0gSUlJSUlJSUlJSUlJSUksUFBQUFBQLEFBQUFBLEJCQkJCLElJICovCisJc3JhaSByNCwgcjQsIDE2CS8qIHI0ID0gKHNpZ24tZXh0ZW5kZWQpIElNTTE2ICovCisJcm9saSByNiwgcjUsIDUJLyogcjYgPSBYWFhYLE5OTk5OLFBQUFBQUCxBQUFBQSxCQkJCQixDQ0NDQyxYWCAqLworCWFuZGkgcjIsIHIyLCAweDNmCS8qIHIyID0gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsUFBQUFBQICovCisJYW5kaSByMywgcjMsIDB4N2MJLyogcjMgPSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLEFBQUFBLDAwICovCisJYW5kaSByNSwgcjUsIDB4N2MJLyogcjUgPSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLEJCQkJCLDAwICovCisJYW5kaSByNiwgcjYsIDB4N2MJLyogcjYgPSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLENDQ0NDLDAwICovCisKKwkvKiBOb3cKKwkqIHIyID0gT1AKKwkqIHIzID0gNCpBCisJKiByNCA9IElNTTE2IChzaWduIGV4dGVuZGVkKQorCSogcjUgPSA0KkIKKwkqIHI2ID0gNCpDCisJKi8KKworCS8qCisJKiBHZXQgdGhlIG9wZXJhbmRzLgorCSoKKwkqIEl0IGlzIG5lY2Vzc2FyeSB0byBjaGVjayBmb3IgbXVsaSBiZWNhdXNlIGl0IHVzZXMgYW4gSS10eXBlCisJKiBpbnN0cnVjdGlvbiBmb3JtYXQsIHdoaWxlIHRoZSBvdGhlciBpbnN0cnVjdGlvbnMgYXJlIGhhdmUgYW4gUi10eXBlCisJKiBmb3JtYXQuCisJKgorCSogIFByZXBhcmUgZm9yIGVpdGhlciBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbiBsb29wLgorCSogIFRoZXkgYm90aCBsb29wIDMyIHRpbWVzLgorCSovCisJbW92aSByMTQsIDMyCisKKwlhZGQgIHIzLCByMywgc3AJCS8qIHIzID0gYWRkcmVzcyBvZiBBLW9wZXJhbmQuICovCisJbGR3ICByMywgMChyMykJCS8qIHIzID0gQS1vcGVyYW5kLiAqLworCW1vdmkgcjcsIDB4MjQJCS8qIG11bGkgb3Bjb2RlIChJLXR5cGUgaW5zdHJ1Y3Rpb24gZm9ybWF0KSAqLworCWJlcSByMiwgcjcsIG11bF9pbW1lZCAvKiBtdWxpIGRvZXNuJ3QgdXNlIHRoZSBCIHJlZ2lzdGVyIGFzIGEgc291cmNlICovCisKKwlhZGQgIHI1LCByNSwgc3AJCS8qIHI1ID0gYWRkcmVzcyBvZiBCLW9wZXJhbmQuICovCisJbGR3ICByNSwgMChyNSkJCS8qIHI1ID0gQi1vcGVyYW5kLiAqLworCQkJCS8qIHI0ID0gU1NTU1NTU1NTU1NTU1NTUywtLS0tLUlNTTE2LS0tLS0tICovCisJCQkJLyogSU1NMTYgbm90IG5lZWRlZCwgYWxpZ24gT1BYIHBvcnRpb24gKi8KKwkJCQkvKiByNCA9IFNTU1NTU1NTU1NTU1NTU1MsQ0NDQ0MsLU9QWC0tLDAwMDAwICovCisJc3JsaSByNCwgcjQsIDUJCS8qIHI0ID0gMDAwMDAsU1NTU1NTU1NTU1NTU1NTUyxDQ0NDQywtT1BYLS0gKi8KKwlhbmRpIHI0LCByNCwgMHgzZgkvKiByNCA9IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLC1PUFgtLSAqLworCisJLyogTm93CisJKiByMiA9IE9QCisJKiByMyA9IHNyYzEKKwkqIHI1ID0gc3JjMgorCSogcjQgPSBPUFggKG5vIGxvbmdlciBjYW4gYmUgbXVsaSkKKwkqIHI2ID0gNCpDCisJKi8KKworCisJLyoKKwkqICBNdWx0aXBseSBvciBEaXZpZGU/CisJKi8KKwlhbmRpIHI3LCByNCwgMHgwMgkvKiBGb3IgUi10eXBlIG11bHRpcGx5IGluc3RydWN0aW9ucywKKwkJCQkgICBPUFggJiAweDAyICE9IDAgKi8KKwlibmUgcjcsIHplcm8sIG11bHRpcGx5CisKKworCS8qIERJVklTSU9OCisJKgorCSogRGl2aWRlIGFuIHVuc2lnbmVkIGRpdmlkZW5kIGJ5IGFuIHVuc2lnbmVkIGRpdmlzb3IgdXNpbmcKKwkqIGEgc2hpZnQtYW5kLXN1YnRyYWN0IGFsZ29yaXRobS4gIFRoZSBleGFtcGxlIGJlbG93IHNob3dzCisJKiA0MyBkaXYgNyA9IDYgZm9yIDgtYml0IGludGVnZXJzLiAgVGhpcyBjbGFzc2ljIGFsZ29yaXRobSB1c2VzIGEKKwkqIHNpbmdsZSByZWdpc3RlciB0byBzdG9yZSBib3RoIHRoZSBkaXZpZGVuZCBhbmQgdGhlIHF1b3RpZW50LAorCSogYWxsb3dpbmcgYm90aCB2YWx1ZXMgdG8gYmUgc2hpZnRlZCB3aXRoIGEgc2luZ2xlIGluc3RydWN0aW9uLgorCSoKKwkqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmRlciBkaXZpZGVuZDpxdW90aWVudAorCSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tCisJKiAgIGluaXRpYWxpemUgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAgICAgIDAwMTAxMDExOgorCSogICBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwICAgICAwMTAxMDExOl8KKwkqICAgcmVtYWluZGVyID49IGRpdmlzb3I/IG5vICAgICAwMDAwMDAwMCAgICAgMDEwMTAxMTowCisJKiAgIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAgICAgIDEwMTAxMTowXworCSogICByZW1haW5kZXIgPj0gZGl2aXNvcj8gbm8gICAgIDAwMDAwMDAwICAgICAxMDEwMTE6MDAKKwkqICAgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMSAgICAgMDEwMTE6MDBfCisJKiAgIHJlbWFpbmRlciA+PSBkaXZpc29yPyBubyAgICAgMDAwMDAwMDEgICAgIDAxMDExOjAwMAorCSogICBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDEwICAgICAxMDExOjAwMF8KKwkqICAgcmVtYWluZGVyID49IGRpdmlzb3I/IG5vICAgICAwMDAwMDAxMCAgICAgMTAxMTowMDAwCisJKiAgIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAxMDEgICAgIDAxMTowMDAwXworCSogICByZW1haW5kZXIgPj0gZGl2aXNvcj8gbm8gICAgIDAwMDAwMTAxICAgICAwMTE6MDAwMDAKKwkqICAgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMTAxMCAgICAgMTE6MDAwMDBfCisJKiAgIHJlbWFpbmRlciA+PSBkaXZpc29yPyB5ZXMgICAgMDAwMDEwMTAgICAgIDExOjAwMDAwMQorCSogICAgICAgcmVtYWluZGVyIC09IGRpdmlzb3IgICAtIDAwMDAwMTExCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0KKwkqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAxMSAgICAgMTE6MDAwMDAxCisJKiAgIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAxMTEgICAgIDE6MDAwMDAxXworCSogICByZW1haW5kZXIgPj0gZGl2aXNvcj8geWVzICAgIDAwMDAwMTExICAgICAxOjAwMDAwMTEKKwkqICAgICAgIHJlbWFpbmRlciAtPSBkaXZpc29yICAgLSAwMDAwMDExMQorCSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tCisJKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAgICAgIDE6MDAwMDAxMQorCSogICBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAxICAgICA6MDAwMDAxMV8KKwkqICAgcmVtYWluZGVyID49IGRpdmlzb3I/IG5vICAgICAwMDAwMDAwMSAgICAgOjAwMDAwMTEwCisJKgorCSogVGhlIHF1b3RpZW50IGlzIDAwMDAwMTEwLgorCSovCisKK2RpdmlkZToKKwkvKgorCSogIFByZXBhcmUgZm9yIGRpdmlzaW9uIGJ5IGFzc3VtaW5nIHRoZSByZXN1bHQKKwkqICBpcyB1bnNpZ25lZCwgYW5kIHN0b3JpbmcgaXRzICJzaWduIiBhcyAwLgorCSovCisJbW92aSByMTcsIDAKKworCisJLyogV2hpY2ggZGl2aXNpb24gb3Bjb2RlPyAqLworCXhvcmkgcjcsIHI0LCAweDI1CQkvKiBPUFggb2YgZGl2ICovCisJYm5lIHI3LCB6ZXJvLCB1bnNpZ25lZF9kaXZpc2lvbgorCisKKwkvKgorCSogIE9QWCBpcyBkaXYuICBEZXRlcm1pbmUgYW5kIHN0b3JlIHRoZSBzaWduIG9mIHRoZSBxdW90aWVudC4KKwkqICBUaGVuIHRha2UgdGhlIGFic29sdXRlIHZhbHVlIG9mIGJvdGggb3BlcmFuZHMuCisJKi8KKwl4b3IgcjE3LCByMywgcjUJCS8qIE1TQiBjb250YWlucyBzaWduIG9mIHF1b3RpZW50ICovCisJYmdlIHIzLHplcm8sZGl2aWRlbmRfaXNfbm9ubmVnYXRpdmUKKwlzdWIgcjMsIHplcm8sIHIzCS8qIC1yMyAqLworZGl2aWRlbmRfaXNfbm9ubmVnYXRpdmU6CisJYmdlIHI1LCB6ZXJvLCBkaXZpc29yX2lzX25vbm5lZ2F0aXZlCisJc3ViIHI1LCB6ZXJvLCByNQkvKiAtcjUgKi8KK2Rpdmlzb3JfaXNfbm9ubmVnYXRpdmU6CisKKwordW5zaWduZWRfZGl2aXNpb246CisJLyogSW5pdGlhbGl6ZSB0aGUgdW5zaWduZWQtZGl2aXNpb24gbG9vcC4gKi8KKwltb3ZpIHIxMywgMAkvKiByZW1haW5kZXIgPSAwICovCisKKwkvKiBOb3cKKwkqIHIzID0gZGl2aWRlbmQgOiBxdW90aWVudAorCSogcjQgPSAweDI1IGZvciBkaXYsIDB4MjQgZm9yIGRpdnUKKwkqIHI1ID0gZGl2aXNvcgorCSogcjEzID0gcmVtYWluZGVyCisJKiByMTQgPSBsb29wIGNvdW50ZXIgKGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMzIpCisJKiByMTcgPSBNU0IgY29udGFpbnMgc2lnbiBvZiBxdW90aWVudAorCSovCisKKworCS8qCisJKiAgIGZvciAoY291bnQgPSAzMjsgY291bnQgPiAwOyAtLWNvdW50KQorCSogICB7CisJKi8KK2RpdmlkZV9sb29wOgorCisJLyoKKwkqICAgICAgIERpdmlzaW9uOgorCSoKKwkqICAgICAgIChyZW1haW5kZXI6ZGl2aWRlbmQ6cXVvdGllbnQpIDw8PSAxOworCSovCisJc2xsaSByMTMsIHIxMywgMQorCWNtcGx0IHI3LCByMywgemVybwkvKiByNyA9IE1TQiBvZiByMyAqLworCW9yIHIxMywgcjEzLCByNworCXNsbGkgcjMsIHIzLCAxCisKKworCS8qCisJKiAgICAgICBpZiAocmVtYWluZGVyID49IGRpdmlzb3IpCisJKiAgICAgICB7CisJKiAgICAgICAgICAgc2V0IExTQiBvZiBxdW90aWVudAorCSogICAgICAgICAgIHJlbWFpbmRlciAtPSBkaXZpc29yOworCSogICAgICAgfQorCSovCisJYmx0dSByMTMsIHI1LCBkaXZfc2tpcAorCW9yaSByMywgcjMsIDEKKwlzdWIgcjEzLCByMTMsIHI1CitkaXZfc2tpcDoKKworCS8qCisJKiAgIH0KKwkqLworCXN1YmkgcjE0LCByMTQsIDEKKwlibmUgcjE0LCB6ZXJvLCBkaXZpZGVfbG9vcAorCisKKwkvKiBOb3cKKwkqIHIzID0gcXVvdGllbnQKKwkqIHI0ID0gMHgyNSBmb3IgZGl2LCAweDI0IGZvciBkaXZ1CisJKiByNiA9IDQqQworCSogcjE3ID0gTVNCIGNvbnRhaW5zIHNpZ24gb2YgcXVvdGllbnQKKwkqLworCisKKwkvKgorCSogIENvbmRpdGlvbmFsbHkgbmVnYXRlIHNpZ25lZCBxdW90aWVudC4gIElmIHF1b3RpZW50IGlzIHVuc2lnbmVkLAorCSogIHRoZSBzaWduIGFscmVhZHkgaXMgaW5pdGlhbGl6ZWQgdG8gMC4KKwkqLworCWJnZSByMTcsIHplcm8sIHF1b3RpZW50X2lzX25vbm5lZ2F0aXZlCisJc3ViIHIzLCB6ZXJvLCByMwkJLyogLXIzICovCisJcXVvdGllbnRfaXNfbm9ubmVnYXRpdmU6CisKKworCS8qCisJKiAgRmluYWwgcXVvdGllbnQgaXMgaW4gcjMuCisJKi8KKwlhZGQgcjYsIHI2LCBzcAorCXN0dyByMywgMChyNikJLyogd3JpdGUgcXVvdGllbnQgdG8gc3RhY2sgKi8KKwliciByZXN0b3JlX3JlZ2lzdGVycworCisKKworCisJLyogTVVMVElQTElDQVRJT04KKwkqCisJKiBBICJwcm9kdWN0IiBpcyB0aGUgbnVtYmVyIHRoYXQgb25lIGdldHMgYnkgc3VtbWluZyBhICJtdWx0aXBsaWNhbmQiCisJKiBzZXZlcmFsIHRpbWVzLiAgVGhlICJtdWx0aXBsaWVyIiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgdGhlCisJKiBtdWx0aXBsaWNhbmQgdGhhdCBhcmUgc3VtbWVkLgorCSoKKwkqIEFjdHVhbCBtdWx0aXBsaWNhdGlvbiBhbGdvcml0aG1zIGRvbid0IHVzZSByZXBlYXRlZCBhZGRpdGlvbiwgaG93ZXZlci4KKwkqIFNoaWZ0LWFuZC1hZGQgYWxnb3JpdGhtcyBnZXQgdGhlIHNhbWUgYW5zd2VyIGFzIHJlcGVhdGVkIGFkZGl0aW9uLCBhbmQKKwkqIHRoZXkgYXJlIGZhc3Rlci4gIFRvIGNvbXB1dGUgdGhlIGxvd2VyIGhhbGYgb2YgYSBwcm9kdWN0IChwcHBwIGJlbG93KQorCSogb25lIHNoaWZ0cyB0aGUgcHJvZHVjdCBsZWZ0IGJlZm9yZSBhZGRpbmcgaW4gZWFjaCBvZiB0aGUgcGFydGlhbAorCSogcHJvZHVjdHMgKGEgKiBtbW1tKSB0aHJvdWdoIChkICogbW1tbSkuCisJKgorCSogVG8gY29tcHV0ZSB0aGUgdXBwZXIgaGFsZiBvZiBhIHByb2R1Y3QgKFBQUFAgYmVsb3cpLCBvbmUgYWRkcyBpbiB0aGUKKwkqIHBhcnRpYWwgcHJvZHVjdHMgKGQgKiBtbW1tKSB0aHJvdWdoIChhICogbW1tbSksIGVhY2ggdGltZSBmb2xsb3dpbmcKKwkqIHRoZSBhZGQgYnkgYSByaWdodCBzaGlmdCBvZiB0aGUgcHJvZHVjdC4KKwkqCisJKiAgICAgbW1tbQorCSogICAqIGFiY2QKKwkqICAgLS0tLS0tCisJKiAgICAgIyMjIyAgPSBkICogbW1tbQorCSogICAgIyMjIyAgID0gYyAqIG1tbW0KKwkqICAgIyMjIyAgICA9IGIgKiBtbW1tCisJKiAgIyMjIyAgICAgPSBhICogbW1tbQorCSogLS0tLS0tLS0KKwkqIFBQUFBwcHBwCisJKgorCSogVGhlIGV4YW1wbGUgYWJvdmUgc2hvd3MgNCBwYXJ0aWFsIHByb2R1Y3RzLiAgQ29tcHV0aW5nIGFjdHVhbCBOaW9zIElJCisJKiBwcm9kdWN0cyByZXF1aXJlcyAzMiBwYXJ0aWFscy4KKwkqCisJKiBJdCBpcyBwb3NzaWJsZSB0byBjb21wdXRlIHRoZSByZXN1bHQgb2YgbXVseHN1IGZyb20gdGhlIHJlc3VsdCBvZgorCSogbXVseHV1IGJlY2F1c2UgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZXN1bHRzIG9mIHRoZXNlIHR3bworCSogb3Bjb2RlcyBpcyB0aGUgdmFsdWUgb2YgdGhlIHBhcnRpYWwgcHJvZHVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNpZ24KKwkqIGJpdCBvZiByQS4KKwkqCisJKiAgIG11bHhzdSA9IG11bHh1dSAtIChyQSA8IDApID8gckIgOiAwOworCSoKKwkqIEl0IGlzIHBvc3NpYmxlIHRvIGNvbXB1dGUgdGhlIHJlc3VsdCBvZiBtdWx4c3MgZnJvbSB0aGUgcmVzdWx0IG9mCisJKiBtdWx4c3UgYmVjYXVzZSB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHJlc3VsdHMgb2YgdGhlc2UgdHdvCisJKiBvcGNvZGVzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgcGFydGlhbCBwcm9kdWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2lnbgorCSogYml0IG9mIHJCLgorCSoKKwkqICAgbXVseHNzID0gbXVseHN1IC0gKHJCIDwgMCkgPyByQSA6IDA7CisJKgorCSovCisKK211bF9pbW1lZDoKKwkvKiBPcGNvZGUgaXMgbXVsaS4gIENoYW5nZSBpdCBpbnRvIG11bCBmb3IgcmVtYWluZGVyIG9mIGFsZ29yaXRobS4gKi8KKwltb3YgcjYsIHI1CQkvKiBGaWVsZCBCIGlzIGRlc3QgcmVnaXN0ZXIsIG5vdCBmaWVsZCBDLiAqLworCW1vdiByNSwgcjQJCS8qIEZpZWxkIElNTTE2IGlzIHNyYzIsIG5vdCBmaWVsZCBCLiAqLworCW1vdmkgcjQsIDB4MjcJCS8qIE9QWCBvZiBtdWwgaXMgMHgyNyAqLworCittdWx0aXBseToKKwkvKiBJbml0aWFsaXplIHRoZSBtdWx0aXBsaWNhdGlvbiBsb29wLiAqLworCW1vdmkgcjksIDAJLyogbXVsX3Byb2R1Y3QgICAgPSAwICovCisJbW92aSByMTAsIDAJLyogbXVseHV1X3Byb2R1Y3QgPSAwICovCisJbW92IHIxMSwgcjUJLyogc2F2ZSBvcmlnaW5hbCBtdWx0aXBsaWVyIGZvciBtdWx4c3UgYW5kIG11bHhzcyAqLworCW1vdiByMTIsIHI1CS8qIG11bHh1dV9tdWx0aXBsaWVyICh3aWxsIGJlIHNoaWZ0ZWQpICovCisJbW92aSByMTYsIDEJLyogdXNlZCB0byBjcmVhdGUgInJvcmkgQixBLDEiIGZyb20gInJvciBCLEEscjE2IiAqLworCisJLyogTm93CisJKiByMyA9IG11bHRpcGxpY2FuZAorCSogcjUgPSBtdWxfbXVsdGlwbGllcgorCSogcjYgPSA0ICogZGVzdF9yZWdpc3RlciAodXNlZCBsYXRlciBhcyBvZmZzZXQgdG8gc3ApCisJKiByNyA9IHRlbXAKKwkqIHI5ID0gbXVsX3Byb2R1Y3QKKwkqIHIxMCA9IG11bHh1dV9wcm9kdWN0CisJKiByMTEgPSBvcmlnaW5hbCBtdWx0aXBsaWVyCisJKiByMTIgPSBtdWx4dXVfbXVsdGlwbGllcgorCSogcjE0ID0gbG9vcCBjb3VudGVyIChhbHJlYWR5IGluaXRpYWxpemVkKQorCSogcjE2ID0gMQorCSovCisKKworCS8qCisJKiAgIGZvciAoY291bnQgPSAzMjsgY291bnQgPiAwOyAtLWNvdW50KQorCSogICB7CisJKi8KK211bHRpcGx5X2xvb3A6CisKKwkvKgorCSogICAgICAgbXVsX3Byb2R1Y3QgPDw9IDE7CisJKiAgICAgICBsc2IgPSBtdWx0aXBsaWVyICYgMTsKKwkqLworCXNsbGkgcjksIHI5LCAxCisJYW5kaSByNywgcjEyLCAxCisKKwkvKgorCSogICAgICAgaWYgKGxzYiA9PSAxKQorCSogICAgICAgeworCSogICAgICAgICAgIG11bHh1dV9wcm9kdWN0ICs9IG11bHRpcGxpY2FuZDsKKwkqICAgICAgIH0KKwkqLworCWJlcSByNywgemVybywgbXVseF9za2lwCisJYWRkIHIxMCwgcjEwLCByMworCWNtcGx0dSByNywgcjEwLCByMyAvKiBTYXZlIHRoZSBjYXJyeSBmcm9tIHRoZSBNU0Igb2YgbXVseHV1X3Byb2R1Y3QuICovCisJcm9yIHI3LCByNywgcjE2CS8qIHI3ID0gMHg4MDAwMDAwMCBvbiBjYXJyeSwgb3IgZWxzZSAweDAwMDAwMDAwICovCittdWx4X3NraXA6CisKKwkvKgorCSogICAgICAgaWYgKE1TQiBvZiBtdWxfbXVsdGlwbGllciA9PSAxKQorCSogICAgICAgeworCSogICAgICAgICAgIG11bF9wcm9kdWN0ICs9IG11bHRpcGxpY2FuZDsKKwkqICAgICAgIH0KKwkqLworCWJnZSByNSwgemVybywgbXVsX3NraXAKKwlhZGQgcjksIHI5LCByMworbXVsX3NraXA6CisKKwkvKgorCSogICAgICAgbXVseHV1X3Byb2R1Y3QgPj49IDE7ICAgICAgICAgICBsb2dpY2FsIHNoaWZ0CisJKiAgICAgICBtdWxfbXVsdGlwbGllciA8PD0gMTsgICAgICAgICAgIGRvbmUgd2l0aCBNU0IKKwkqICAgICAgIG11bHhfbXVsdGlwbGllciA+Pj0gMTsgICAgICAgICAgZG9uZSB3aXRoIExTQgorCSovCisJc3JsaSByMTAsIHIxMCwgMQorCW9yIHIxMCwgcjEwLCByNwkJLyogT1IgaW4gdGhlIHNhdmVkIGNhcnJ5IGJpdC4gKi8KKwlzbGxpIHI1LCByNSwgMQorCXNybGkgcjEyLCByMTIsIDEKKworCisJLyoKKwkqICAgfQorCSovCisJc3ViaSByMTQsIHIxNCwgMQorCWJuZSByMTQsIHplcm8sIG11bHRpcGx5X2xvb3AKKworCisJLyoKKwkqICBNdWx0aXBseSBlbXVsYXRpb24gbG9vcCBkb25lLgorCSovCisKKwkvKiBOb3cKKwkqIHIzID0gbXVsdGlwbGljYW5kCisJKiByNCA9IE9QWAorCSogcjYgPSA0ICogZGVzdF9yZWdpc3RlciAodXNlZCBsYXRlciBhcyBvZmZzZXQgdG8gc3ApCisJKiByNyA9IHRlbXAKKwkqIHI5ID0gbXVsX3Byb2R1Y3QKKwkqIHIxMCA9IG11bHh1dV9wcm9kdWN0CisJKiByMTEgPSBvcmlnaW5hbCBtdWx0aXBsaWVyCisJKi8KKworCisJLyogQ2FsY3VsYXRlIGFkZHJlc3MgZm9yIHJlc3VsdCBmcm9tIDQgKiBkZXN0X3JlZ2lzdGVyICovCisJYWRkIHI2LCByNiwgc3AKKworCisJLyoKKwkqIFNlbGVjdC9jb21wdXRlIHRoZSByZXN1bHQgYmFzZWQgb24gT1BYLgorCSovCisKKworCS8qIE9QWCA9PSBtdWw/ICBUaGVuIHN0b3JlLiAqLworCXhvcmkgcjcsIHI0LCAweDI3CisJYmVxIHI3LCB6ZXJvLCBzdG9yZV9wcm9kdWN0CisKKwkvKiBJdCdzIG9uZSBvZiB0aGUgbXVseC4uIG9wY29kZXMuICBNb3ZlIG92ZXIgdGhlIHJlc3VsdC4gKi8KKwltb3YgcjksIHIxMAorCisJLyogT1BYID09IG11bHh1dT8gIFRoZW4gc3RvcmUuICovCisJeG9yaSByNywgcjQsIDB4MDcKKwliZXEgcjcsIHplcm8sIHN0b3JlX3Byb2R1Y3QKKworCS8qIENvbXB1dGUgbXVseHN1CisJICoKKwkgKiBtdWx4c3UgPSBtdWx4dXUgLSAockEgPCAwKSA/IHJCIDogMDsKKwkgKi8KKwliZ2UgcjMsIHplcm8sIG11bHhzdV9za2lwCisJc3ViIHI5LCByOSwgcjExCittdWx4c3Vfc2tpcDoKKworCS8qIE9QWCA9PSBtdWx4c3U/ICBUaGVuIHN0b3JlLiAqLworCXhvcmkgcjcsIHI0LCAweDE3CisJYmVxIHI3LCB6ZXJvLCBzdG9yZV9wcm9kdWN0CisKKwkvKiBDb21wdXRlIG11bHhzcworCSAqCisJICogbXVseHNzID0gbXVseHN1IC0gKHJCIDwgMCkgPyByQSA6IDA7CisJICovCisJYmdlIHIxMSx6ZXJvLG11bHhzc19za2lwCisJc3ViIHI5LCByOSwgcjMKK211bHhzc19za2lwOgorCS8qIEF0IHRoaXMgcG9pbnQsIGFzc3VtZSB0aGF0IE9QWCBpcyBtdWx4c3MsIHNvIHN0b3JlKi8KKworCitzdG9yZV9wcm9kdWN0OgorCXN0dyByOSwgMChyNikKKworCityZXN0b3JlX3JlZ2lzdGVyczoKKwkJCS8qIE5vIG5lZWQgdG8gcmVzdG9yZSByMC4gKi8KKwlsZHcgcjUsIDEwMChzcCkKKwl3cmN0bCBlc3RhdHVzLCByNQorCisJbGR3IHIxLCA0KHNwKQorCWxkdyByMiwgOChzcCkKKwlsZHcgcjMsIDEyKHNwKQorCWxkdyByNCwgMTYoc3ApCisJbGR3IHI1LCAyMChzcCkKKwlsZHcgcjYsIDI0KHNwKQorCWxkdyByNywgMjgoc3ApCisJbGR3IHI4LCAzMihzcCkKKwlsZHcgcjksIDM2KHNwKQorCWxkdyByMTAsIDQwKHNwKQorCWxkdyByMTEsIDQ0KHNwKQorCWxkdyByMTIsIDQ4KHNwKQorCWxkdyByMTMsIDUyKHNwKQorCWxkdyByMTQsIDU2KHNwKQorCWxkdyByMTUsIDYwKHNwKQorCWxkdyByMTYsIDY0KHNwKQorCWxkdyByMTcsIDY4KHNwKQorCWxkdyByMTgsIDcyKHNwKQorCWxkdyByMTksIDc2KHNwKQorCWxkdyByMjAsIDgwKHNwKQorCWxkdyByMjEsIDg0KHNwKQorCWxkdyByMjIsIDg4KHNwKQorCWxkdyByMjMsIDkyKHNwKQorCQkJLyogRG9lcyBub3QgbmVlZCB0byByZXN0b3JlIGV0ICovCisJbGR3IGdwLCAxMDQoc3ApCisKKwlsZHcgZnAsIDExMihzcCkKKwlsZHcgZWEsIDExNihzcCkKKwlsZHcgcmEsIDEyMChzcCkKKwlsZHcgc3AsIDEwOChzcCkJLyogbGFzdCByZXN0b3JlIHNwICovCisJZXJldAorCisuc2V0IGF0Cisuc2V0IGJyZWFrCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC9pcnEuYyBiL2FyY2gvbmlvczIva2VybmVsL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1Yjc0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9pcnEuYwpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KKyAqCisgKiBiYXNlZCBvbiBpcnEuYyBmcm9tIG02OGsgd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorCitzdGF0aWMgdTMyIGllbmFibGU7CisKK2FzbWxpbmthZ2Ugdm9pZCBkb19JUlEoaW50IGh3aXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqb2xkcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKwlpbnQgaXJxOworCisJaXJxX2VudGVyKCk7CisJaXJxID0gaXJxX2ZpbmRfbWFwcGluZyhOVUxMLCBod2lycSk7CisJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJaXJxX2V4aXQoKTsKKworCXNldF9pcnFfcmVncyhvbGRyZWdzKTsKK30KKworc3RhdGljIHZvaWQgY2hpcF91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQoreworCWllbmFibGUgfD0gKDEgPDwgZC0+aHdpcnEpOworCVdSQ1RMKENUTF9JRU5BQkxFLCBpZW5hYmxlKTsKK30KKworc3RhdGljIHZvaWQgY2hpcF9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlpZW5hYmxlICY9IH4oMSA8PCBkLT5od2lycSk7CisJV1JDVEwoQ1RMX0lFTkFCTEUsIGllbmFibGUpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1faXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIk5JT1MyLUlOVEMiLAorCS5pcnFfdW5tYXNrCT0gY2hpcF91bm1hc2ssCisJLmlycV9tYXNrCT0gY2hpcF9tYXNrLAorfTsKKworc3RhdGljIGludCBpcnFfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCQlpcnFfaHdfbnVtYmVyX3QgaHdfaXJxX251bSkKK3sKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJm1faXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgaXJxX29wcyA9IHsKKwkubWFwCT0gaXJxX21hcCwKKwkueGxhdGUJPSBpcnFfZG9tYWluX3hsYXRlX29uZWNlbGwsCit9OworCit2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQoreworCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCisJbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJhbHRyLG5pb3MyLTEuMCIpOworCWlmICghbm9kZSkKKwkJbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJhbHRyLG5pb3MyLTEuMSIpOworCisJQlVHX09OKCFub2RlKTsKKworCWRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihub2RlLCBOSU9TMl9DUFVfTlJfSVJRUywgJmlycV9vcHMsIE5VTEwpOworCUJVR19PTighZG9tYWluKTsKKworCWlycV9zZXRfZGVmYXVsdF9ob3N0KGRvbWFpbik7CisJb2Zfbm9kZV9wdXQobm9kZSk7CisJLyogTG9hZCB0aGUgaW5pdGlhbCBpZW5hYmxlIHZhbHVlICovCisJaWVuYWJsZSA9IFJEQ1RMKENUTF9JRU5BQkxFKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL21pc2FsaWduZWQuYyBiL2FyY2gvbmlvczIva2VybmVsL21pc2FsaWduZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTU5MDdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvbWlzYWxpZ25lZC5jCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogIGxpbnV4L2FyY2gvbmlvczIva2VybmVsL21pc2FsaWduZWQuYworICoKKyAqICBiYXNpYyBlbXVsYXRpb24gZm9yIG1pcy1hbGlnbmVkIGFjY2Vzc2VzIG9uIHRoZSBOSU9TIElJIGNwdQorICogIG1vZGVsbGVkIGFmdGVyIHRoZSB2ZXJzaW9uIGZvciBhcm0gaW4gYXJtL2FsaWdubWVudC5jCisgKgorICogIEJyYWQgUGFya2VyIDxicmFkQGhlZWx0b2UuY29tPgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbWJpZW50IENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChjKSAyMDEwIEFsdGVyYSBDb3Jwb3JhdGlvbiwgU2FuIEpvc2UsIENhbGlmb3JuaWEsIFVTQS4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAgQXJyb3cgRWxlY3Ryb25pY3MsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZgorICogdGhpcyBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisvKiBpbnN0cnVjdGlvbnMgd2UgZW11bGF0ZSAqLworI2RlZmluZSBJTlNUX0xESFUJMHgwYgorI2RlZmluZSBJTlNUX1NUSAkweDBkCisjZGVmaW5lIElOU1RfTERICTB4MGYKKyNkZWZpbmUgSU5TVF9TVFcJMHgxNQorI2RlZmluZSBJTlNUX0xEVwkweDE3CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1hX3VzZXIsIG1hX2tlcm4sIG1hX3NraXBwZWQsIG1hX2hhbGYsIG1hX3dvcmQ7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWFfdXNlcm1vZGU7CisjZGVmaW5lIFVNX1dBUk4JCTB4MDEKKyNkZWZpbmUgVU1fRklYVVAJMHgwMgorI2RlZmluZSBVTV9TSUdOQUwJMHgwNAorI2RlZmluZSBLTV9XQVJOCQkweDA4CisKKy8qIHNlZSBhcmNoL25pb3MyL2luY2x1ZGUvYXNtL3B0cmFjZS5oICovCitzdGF0aWMgdTggc3lzX3N0YWNrX2ZyYW1lX3JlZ19vZmZzZXRbXSA9IHsKKwkvKiBzdHJ1Y3QgcHRfcmVncyAqLworCTgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDAsCisJLyogc3RydWN0IHN3aXRjaF9zdGFjayAqLworCTE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorfTsKKworc3RhdGljIGludCByZWdfb2Zmc2V0c1szMl07CisKK3N0YXRpYyBpbmxpbmUgdTMyIGdldF9yZWdfdmFsKHN0cnVjdCBwdF9yZWdzICpmcCwgaW50IHJlZykKK3sKKwl1OCAqcCA9ICgodTggKilmcCkgKyByZWdfb2Zmc2V0c1tyZWddOworCisJcmV0dXJuICoodTMyICopcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB1dF9yZWdfdmFsKHN0cnVjdCBwdF9yZWdzICpmcCwgaW50IHJlZywgdTMyIHZhbCkKK3sKKwl1OCAqcCA9ICgodTggKilmcCkgKyByZWdfb2Zmc2V0c1tyZWddOworCSoodTMyICopcCA9IHZhbDsKK30KKworLyoKKyAqIChtaXMpYWxpZ25tZW50IGhhbmRsZXIKKyAqLworYXNtbGlua2FnZSB2b2lkIGhhbmRsZV91bmFsaWduZWRfYyhzdHJ1Y3QgcHRfcmVncyAqZnAsIGludCBjYXVzZSkKK3sKKwl1MzIgaXNuLCBhZGRyLCB2YWw7CisJaW50IGluX2tlcm5lbDsKKwl1OCBhLCBiLCBkMCwgZDEsIGQyLCBkMzsKKwl1MTYgaW1tMTY7CisJdW5zaWduZWQgaW50IGZhdWx0OworCisJLyogYmFjayB1cCBvbmUgaW5zdHJ1Y3Rpb24gKi8KKwlmcC0+ZWEgLT0gNDsKKworCWlmIChmaXh1cF9leGNlcHRpb24oZnApKSB7CisJCW1hX3NraXBwZWQrKzsKKwkJcmV0dXJuOworCX0KKworCWluX2tlcm5lbCA9ICF1c2VyX21vZGUoZnApOworCisJaXNuID0gKih1bnNpZ25lZCBsb25nICopKGZwLT5lYSk7CisKKwlmYXVsdCA9IDA7CisKKwkvKiBkbyBmaXh1cCBpZiBpbiBrZXJuZWwgb3IgbW9kZSB0dXJuZWQgb24gKi8KKwlpZiAoaW5fa2VybmVsIHx8IChtYV91c2VybW9kZSAmIFVNX0ZJWFVQKSkgeworCQkvKiBkZWNvbXBvc2UgaW5zdHJ1Y3Rpb24gKi8KKwkJYSA9IChpc24gPj4gMjcpICYgMHgxZjsKKwkJYiA9IChpc24gPj4gMjIpICYgMHgxZjsKKwkJaW1tMTYgPSAoaXNuID4+IDYpICYgMHhmZmZmOworCQlhZGRyID0gZ2V0X3JlZ192YWwoZnAsIGEpICsgaW1tMTY7CisKKwkJLyogZG8gZml4dXAgdG8gc2F2ZWQgcmVnaXN0ZXJzICovCisJCXN3aXRjaCAoaXNuICYgMHgzZikgeworCQljYXNlIElOU1RfTERIVToKKwkJCWZhdWx0IHw9IF9fZ2V0X3VzZXIoZDAsICh1OCAqKShhZGRyKzApKTsKKwkJCWZhdWx0IHw9IF9fZ2V0X3VzZXIoZDEsICh1OCAqKShhZGRyKzEpKTsKKwkJCXZhbCA9IChkMSA8PCA4KSB8IGQwOworCQkJcHV0X3JlZ192YWwoZnAsIGIsIHZhbCk7CisJCQltYV9oYWxmKys7CisJCQlicmVhazsKKwkJY2FzZSBJTlNUX1NUSDoKKwkJCXZhbCA9IGdldF9yZWdfdmFsKGZwLCBiKTsKKwkJCWQxID0gdmFsID4+IDg7CisJCQlkMCA9IHZhbCA+PiAwOworCisJCQlwcl9kZWJ1Zygic3RoOiByYT0lZCAoJTA4eCkgcmI9JWQgKCUwOHgpLCBpbW0xNiAlMDR4IGFkZHIgJTA4eCB2YWwgJTA4eFxuIiwKKwkJCQlhLCBnZXRfcmVnX3ZhbChmcCwgYSksCisJCQkJYiwgZ2V0X3JlZ192YWwoZnAsIGIpLAorCQkJCWltbTE2LCBhZGRyLCB2YWwpOworCisJCQlpZiAoaW5fa2VybmVsKSB7CisJCQkJKih1OCAqKShhZGRyKzApID0gZDA7CisJCQkJKih1OCAqKShhZGRyKzEpID0gZDE7CisJCQl9IGVsc2UgeworCQkJCWZhdWx0IHw9IF9fcHV0X3VzZXIoZDAsICh1OCAqKShhZGRyKzApKTsKKwkJCQlmYXVsdCB8PSBfX3B1dF91c2VyKGQxLCAodTggKikoYWRkcisxKSk7CisJCQl9CisJCQltYV9oYWxmKys7CisJCQlicmVhazsKKwkJY2FzZSBJTlNUX0xESDoKKwkJCWZhdWx0IHw9IF9fZ2V0X3VzZXIoZDAsICh1OCAqKShhZGRyKzApKTsKKwkJCWZhdWx0IHw9IF9fZ2V0X3VzZXIoZDEsICh1OCAqKShhZGRyKzEpKTsKKwkJCXZhbCA9IChzaG9ydCkoKGQxIDw8IDgpIHwgZDApOworCQkJcHV0X3JlZ192YWwoZnAsIGIsIHZhbCk7CisJCQltYV9oYWxmKys7CisJCQlicmVhazsKKwkJY2FzZSBJTlNUX1NUVzoKKwkJCXZhbCA9IGdldF9yZWdfdmFsKGZwLCBiKTsKKwkJCWQzID0gdmFsID4+IDI0OworCQkJZDIgPSB2YWwgPj4gMTY7CisJCQlkMSA9IHZhbCA+PiA4OworCQkJZDAgPSB2YWwgPj4gMDsKKwkJCWlmIChpbl9rZXJuZWwpIHsKKwkJCQkqKHU4ICopKGFkZHIrMCkgPSBkMDsKKwkJCQkqKHU4ICopKGFkZHIrMSkgPSBkMTsKKwkJCQkqKHU4ICopKGFkZHIrMikgPSBkMjsKKwkJCQkqKHU4ICopKGFkZHIrMykgPSBkMzsKKwkJCX0gZWxzZSB7CisJCQkJZmF1bHQgfD0gX19wdXRfdXNlcihkMCwgKHU4ICopKGFkZHIrMCkpOworCQkJCWZhdWx0IHw9IF9fcHV0X3VzZXIoZDEsICh1OCAqKShhZGRyKzEpKTsKKwkJCQlmYXVsdCB8PSBfX3B1dF91c2VyKGQyLCAodTggKikoYWRkcisyKSk7CisJCQkJZmF1bHQgfD0gX19wdXRfdXNlcihkMywgKHU4ICopKGFkZHIrMykpOworCQkJfQorCQkJbWFfd29yZCsrOworCQkJYnJlYWs7CisJCWNhc2UgSU5TVF9MRFc6CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQwLCAodTggKikoYWRkciswKSk7CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQxLCAodTggKikoYWRkcisxKSk7CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQyLCAodTggKikoYWRkcisyKSk7CisJCQlmYXVsdCB8PSBfX2dldF91c2VyKGQzLCAodTggKikoYWRkciszKSk7CisJCQl2YWwgPSAoZDMgPDwgMjQpIHwgKGQyIDw8IDE2KSB8IChkMSA8PCA4KSB8IGQwOworCQkJcHV0X3JlZ192YWwoZnAsIGIsIHZhbCk7CisJCQltYV93b3JkKys7CisJCQlicmVhazsKKwkJfQorCX0KKworCWFkZHIgPSBSRENUTChDVExfQkFEQUREUik7CisJY2F1c2UgPj49IDI7CisKKwlpZiAoZmF1bHQpIHsKKwkJaWYgKGluX2tlcm5lbCkgeworCQkJcHJfZXJyKCJmYXVsdCBkdXJpbmcga2VybmVsIG1pc2FsaWduZWQgZml4dXAgQCAlI2x4OyBhZGRyIDB4JTA4eDsgaXNuPTB4JTA4eFxuIiwKKwkJCQlmcC0+ZWEsICh1bnNpZ25lZCBpbnQpYWRkciwKKwkJCQkodW5zaWduZWQgaW50KWlzbik7CisJCX0gZWxzZSB7CisJCQlwcl9lcnIoImZhdWx0IGR1cmluZyB1c2VyIG1pc2FsaWduZWQgZml4dXAgQCAlI2x4OyBpc249JTA4eCBhZGRyPTB4JTA4eCBzcD0weCUwOGx4IHBpZD0lZFxuIiwKKwkJCQlmcC0+ZWEsCisJCQkJKHVuc2lnbmVkIGludClpc24sIGFkZHIsIGZwLT5zcCwKKwkJCQljdXJyZW50LT5waWQpOworCisJCQlfZXhjZXB0aW9uKFNJR1NFR1YsIGZwLCBTRUdWX01BUEVSUiwgZnAtPmVhKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qCisJICoga2VybmVsIG1vZGUgLQorCSAqICBub3RlIGV4Y2VwdGlvbiBhbmQgc2tpcCBiYWQgaW5zdHJ1Y3Rpb24gKHJldHVybikKKwkgKi8KKwlpZiAoaW5fa2VybmVsKSB7CisJCW1hX2tlcm4rKzsKKwkJZnAtPmVhICs9IDQ7CisKKwkJaWYgKG1hX3VzZXJtb2RlICYgS01fV0FSTikgeworCQkJcHJfZXJyKCJrZXJuZWwgdW5hbGlnbmVkIGFjY2VzcyBAICUjbHg7IEJBREFERFIgMHglMDh4OyBjYXVzZT0lZCwgaXNuPTB4JTA4eFxuIiwKKwkJCQlmcC0+ZWEsCisJCQkJKHVuc2lnbmVkIGludClhZGRyLCBjYXVzZSwKKwkJCQkodW5zaWduZWQgaW50KWlzbik7CisJCQkvKiBzaG93X3JlZ3MoZnApOyAqLworCQl9CisKKwkJcmV0dXJuOworCX0KKworCW1hX3VzZXIrKzsKKworCS8qCisJICogdXNlciBtb2RlIC0KKwkgKiAgcG9zc2libHkgd2FybiwKKwkgKiAgcG9zc2libHkgc2VuZCBTSUdCVVMgc2lnbmFsIHRvIHByb2Nlc3MKKwkgKi8KKwlpZiAobWFfdXNlcm1vZGUgJiBVTV9XQVJOKSB7CisJCXByX2VycigidXNlciB1bmFsaWduZWQgYWNjZXNzIEAgJSNseDsgaXNuPTB4JTA4bHggZWE9MHglMDhseCByYT0weCUwOGx4IHNwPTB4JTA4bHhcbiIsCisJCQkodW5zaWduZWQgbG9uZylhZGRyLCAodW5zaWduZWQgbG9uZylpc24sCisJCQlmcC0+ZWEsIGZwLT5yYSwgZnAtPnNwKTsKKwl9CisKKwlpZiAobWFfdXNlcm1vZGUgJiBVTV9TSUdOQUwpCisJCV9leGNlcHRpb24oU0lHQlVTLCBmcCwgQlVTX0FEUkFMTiwgZnAtPmVhKTsKKwllbHNlCisJCWZwLT5lYSArPSA0OwkvKiBlbHNlIGFkdmFuY2UgKi8KK30KKworc3RhdGljIHZvaWQgX19pbml0IG1pc2FsaWduZWRfY2FsY19yZWdfb2Zmc2V0cyh2b2lkKQoreworCWludCBpLCByLCBvZmZzZXQ7CisKKwkvKiBwcmUtY2FsYyBvZmZzZXRzIG9mIHJlZ2lzdGVycyBvbiBzeXMgY2FsbCBzdGFjayBmcmFtZSAqLworCW9mZnNldCA9IDA7CisKKwkvKiBzdHJ1Y3QgcHRfcmVncyAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXIgPSBzeXNfc3RhY2tfZnJhbWVfcmVnX29mZnNldFtpXTsKKwkJcmVnX29mZnNldHNbcl0gPSBvZmZzZXQ7CisJCW9mZnNldCArPSA0OworCX0KKworCS8qIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKi8KKwlvZmZzZXQgPSAtc2l6ZW9mKHN0cnVjdCBzd2l0Y2hfc3RhY2spOworCWZvciAoaSA9IDE2OyBpIDwgMzI7IGkrKykgeworCQlyID0gc3lzX3N0YWNrX2ZyYW1lX3JlZ19vZmZzZXRbaV07CisJCXJlZ19vZmZzZXRzW3JdID0gb2Zmc2V0OworCQlvZmZzZXQgKz0gNDsKKwl9Cit9CisKKworc3RhdGljIGludCBfX2luaXQgbWlzYWxpZ25lZF9pbml0KHZvaWQpCit7CisJLyogZGVmYXVsdCBtb2RlIC0gc2lsZW50IGZpeCAqLworCW1hX3VzZXJtb2RlID0gVU1fRklYVVAgfCBLTV9XQVJOOworCisJbWlzYWxpZ25lZF9jYWxjX3JlZ19vZmZzZXRzKCk7CisKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGwobWlzYWxpZ25lZF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL21vZHVsZS5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5MjRhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL21vZHVsZS5jCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogS2VybmVsIG1vZHVsZSBzdXBwb3J0IGZvciBOaW9zIElJLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZC4KKyAqICAgV3JpdHRlbiBieSBXZW50YW8gWHUgPHh1d2VudGFvQG1pY3JvdHJvbml4LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMyBSdXN0eSBSdXNzZWxsCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworLyoKKyAqIE1vZHVsZXMgc2hvdWxkIE5PVCBiZSBhbGxvY2F0ZWQgd2l0aCBrbWFsbG9jIGZvciAob2J2aW91cykgcmVhc29ucy4KKyAqIEJ1dCB3ZSBkbyBpdCBmb3Igbm93IHRvIGF2b2lkIHJlbG9jYXRpb24gaXNzdWVzLiBDQUxMMjYvUENSRUwyNiBjYW5ub3QgcmVhY2gKKyAqIGZyb20gMHg4MDAwMDAwMCAodm1hbGxvYyBhcmVhKSB0byAweGMwMDAwMDAwMCAoa2VybmVsKSAoa21hbGxvYyByZXR1cm5zCisgKiBhZGRyZXNzZXMgaW4gMHhjMDAwMDAwMCkKKyAqLwordm9pZCAqbW9kdWxlX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKK30KKworLyogRnJlZSBtZW1vcnkgcmV0dXJuZWQgZnJvbSBtb2R1bGVfYWxsb2MgKi8KK3ZvaWQgbW9kdWxlX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKQoreworCWtmcmVlKG1vZHVsZV9yZWdpb24pOworfQorCitpbnQgYXBwbHlfcmVsb2NhdGVfYWRkKEVsZjMyX1NoZHIgKnNlY2hkcnMsIGNvbnN0IGNoYXIgKnN0cnRhYiwKKwkJCXVuc2lnbmVkIGludCBzeW1pbmRleCwgdW5zaWduZWQgaW50IHJlbHNlYywKKwkJCXN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlFbGYzMl9SZWxhICpyZWxhID0gKHZvaWQgKilzZWNoZHJzW3JlbHNlY10uc2hfYWRkcjsKKworCXByX2RlYnVnKCJBcHBseWluZyByZWxvY2F0ZSBzZWN0aW9uICV1IHRvICV1XG4iLCByZWxzZWMsCisJCSBzZWNoZHJzW3JlbHNlY10uc2hfaW5mbyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VjaGRyc1tyZWxzZWNdLnNoX3NpemUgLyBzaXplb2YoKnJlbGEpOyBpKyspIHsKKwkJLyogVGhpcyBpcyB3aGVyZSB0byBtYWtlIHRoZSBjaGFuZ2UgKi8KKwkJdWludDMyX3Qgd29yZDsKKwkJdWludDMyX3QgKmxvYworCQkJPSAoKHZvaWQgKilzZWNoZHJzW3NlY2hkcnNbcmVsc2VjXS5zaF9pbmZvXS5zaF9hZGRyCisJCQkgICArIHJlbGFbaV0ucl9vZmZzZXQpOworCQkvKiBUaGlzIGlzIHRoZSBzeW1ib2wgaXQgaXMgcmVmZXJyaW5nIHRvLiAgTm90ZSB0aGF0IGFsbAorCQkgICB1bmRlZmluZWQgc3ltYm9scyBoYXZlIGJlZW4gcmVzb2x2ZWQuICAqLworCQlFbGYzMl9TeW0gKnN5bQorCQkJPSAoKEVsZjMyX1N5bSAqKXNlY2hkcnNbc3ltaW5kZXhdLnNoX2FkZHIKKwkJCQkrIEVMRjMyX1JfU1lNKHJlbGFbaV0ucl9pbmZvKSk7CisJCXVpbnQzMl90IHYgPSBzeW0tPnN0X3ZhbHVlICsgcmVsYVtpXS5yX2FkZGVuZDsKKworCQlwcl9kZWJ1ZygicmVsdHlwZSAlZCAweCV4IG5hbWU6PCVzPlxuIiwKKwkJCUVMRjMyX1JfVFlQRShyZWxhW2ldLnJfaW5mbyksCisJCQlyZWxhW2ldLnJfb2Zmc2V0LCBzdHJ0YWIgKyBzeW0tPnN0X25hbWUpOworCisJCXN3aXRjaCAoRUxGMzJfUl9UWVBFKHJlbGFbaV0ucl9pbmZvKSkgeworCQljYXNlIFJfTklPUzJfTk9ORToKKwkJCWJyZWFrOworCQljYXNlIFJfTklPUzJfQkZEX1JFTE9DXzMyOgorCQkJKmxvYyArPSB2OworCQkJYnJlYWs7CisJCWNhc2UgUl9OSU9TMl9QQ1JFTDE2OgorCQkJdiAtPSAodWludDMyX3QpbG9jICsgNDsKKwkJCWlmICgoaW50MzJfdCl2ID4gMHg3ZmZmIHx8CisJCQkJKGludDMyX3QpdiA8IC0oaW50MzJfdCkweDgwMDApIHsKKwkJCQlwcl9lcnIoIm1vZHVsZSAlczogcmVsb2NhdGlvbiBvdmVyZmxvd1xuIiwKKwkJCQkJbW9kLT5uYW1lKTsKKwkJCQlyZXR1cm4gLUVOT0VYRUM7CisJCQl9CisJCQl3b3JkID0gKmxvYzsKKwkJCSpsb2MgPSAoKCgod29yZCA+PiAyMikgPDwgMTYpIHwgKHYgJiAweGZmZmYpKSA8PCA2KSB8CisJCQkJKHdvcmQgJiAweDNmKTsKKwkJCWJyZWFrOworCQljYXNlIFJfTklPUzJfQ0FMTDI2OgorCQkJaWYgKHYgJiAzKSB7CisJCQkJcHJfZXJyKCJtb2R1bGUgJXM6IGRhbmdlcm91cyByZWxvY2F0aW9uXG4iLAorCQkJCQltb2QtPm5hbWUpOworCQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCX0KKwkJCWlmICgodiA+PiAyOCkgIT0gKCh1aW50MzJfdClsb2MgPj4gMjgpKSB7CisJCQkJcHJfZXJyKCJtb2R1bGUgJXM6IHJlbG9jYXRpb24gb3ZlcmZsb3dcbiIsCisJCQkJCW1vZC0+bmFtZSk7CisJCQkJcmV0dXJuIC1FTk9FWEVDOworCQkJfQorCQkJKmxvYyA9ICgqbG9jICYgMHgzZikgfCAoKHYgPj4gMikgPDwgNik7CisJCQlicmVhazsKKwkJY2FzZSBSX05JT1MyX0hJMTY6CisJCQl3b3JkID0gKmxvYzsKKwkJCSpsb2MgPSAoKCgod29yZCA+PiAyMikgPDwgMTYpIHwKKwkJCQkoKHYgPj4gMTYpICYgMHhmZmZmKSkgPDwgNikgfCAod29yZCAmIDB4M2YpOworCQkJYnJlYWs7CisJCWNhc2UgUl9OSU9TMl9MTzE2OgorCQkJd29yZCA9ICpsb2M7CisJCQkqbG9jID0gKCgoKHdvcmQgPj4gMjIpIDw8IDE2KSB8ICh2ICYgMHhmZmZmKSkgPDwgNikgfAorCQkJCQkod29yZCAmIDB4M2YpOworCQkJYnJlYWs7CisJCWNhc2UgUl9OSU9TMl9ISUFESjE2OgorCQkJeworCQkJCUVsZjMyX0FkZHIgd29yZDI7CisKKwkJCQl3b3JkID0gKmxvYzsKKwkJCQl3b3JkMiA9ICgodiA+PiAxNikgKyAoKHYgPj4gMTUpICYgMSkpICYgMHhmZmZmOworCQkJCSpsb2MgPSAoKCgod29yZCA+PiAyMikgPDwgMTYpIHwgd29yZDIpIDw8IDYpIHwKKwkJCQkJCSh3b3JkICYgMHgzZik7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJfZXJyKCJtb2R1bGUgJXM6IFVua25vd24gcmVsb2M6ICV1XG4iLAorCQkJCW1vZC0+bmFtZSwgRUxGMzJfUl9UWVBFKHJlbGFbaV0ucl9pbmZvKSk7CisJCQlyZXR1cm4gLUVOT0VYRUM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLCBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKKwkJCXN0cnVjdCBtb2R1bGUgKm1lKQoreworCWZsdXNoX2NhY2hlX2FsbCgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvbmlvczJfa3N5bXMuYyBiL2FyY2gvbmlvczIva2VybmVsL25pb3MyX2tzeW1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyZjU1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL25pb3MyX2tzeW1zLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworLyogc3RyaW5nIGZ1bmN0aW9ucyAqLworCitFWFBPUlRfU1lNQk9MKG1lbWNweSk7CitFWFBPUlRfU1lNQk9MKG1lbXNldCk7CitFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOworCisvKgorICogbGliZ2NjIGZ1bmN0aW9ucyAtIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGludGVybmFsbHkgYnkgdGhlCisgKiBjb21waWxlci4uLiAgKHByb3RvdHlwZXMgYXJlIG5vdCBjb3JyZWN0IHRob3VnaCwgYnV0IHRoYXQKKyAqIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBzaW5jZSB0aGV5J3JlIG5vdCB2ZXJzaW9uZWQpLgorICovCisjZGVmaW5lIERFQ0xBUkVfRVhQT1JUKG5hbWUpCWV4dGVybiB2b2lkIG5hbWUodm9pZCk7IEVYUE9SVF9TWU1CT0wobmFtZSkKKworREVDTEFSRV9FWFBPUlQoX19nY2NfYmNtcCk7CitERUNMQVJFX0VYUE9SVChfX2RpdnNpMyk7CitERUNMQVJFX0VYUE9SVChfX21vZGRpMyk7CitERUNMQVJFX0VYUE9SVChfX21vZHNpMyk7CitERUNMQVJFX0VYUE9SVChfX3VkaXZtb2RkaTQpOworREVDTEFSRV9FWFBPUlQoX191ZGl2c2kzKTsKK0RFQ0xBUkVfRVhQT1JUKF9fdW1vZGRpMyk7CitERUNMQVJFX0VYUE9SVChfX3Vtb2RzaTMpOworREVDTEFSRV9FWFBPUlQoX19tdWxkaTMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMDc1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBBcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqICAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGljay5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorCithc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpOworCit2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKSA9IE5VTEw7CitFWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7CisKK3ZvaWQgYXJjaF9jcHVfaWRsZSh2b2lkKQoreworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworLyoKKyAqIFRoZSBkZXZlbG9wbWVudCBib2FyZHMgaGF2ZSBubyB3YXkgdG8gcHVsbCBhIGJvYXJkIHJlc2V0LiBKdXN0IGp1bXAgdG8gdGhlCisgKiBjcHUgcmVzZXQgYWRkcmVzcyBhbmQgbGV0IHRoZSBib290IGxvYWRlciBvciB0aGUgY29kZSBpbiBoZWFkLlMgdGFrZSBjYXJlIG9mCisgKiByZXNldHRpbmcgcGVyaXBoZXJhbHMuCisgKi8KK3ZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKl9fdW51c2VkKQoreworCXByX25vdGljZSgiTWFjaGluZSByZXN0YXJ0ICglMDh4KS4uLlxuIiwgY3B1aW5mby5yZXNldF9hZGRyKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkiam1wCSUwXG5cdCIKKwk6CisJOiAiciIgKGNwdWluZm8ucmVzZXRfYWRkcikKKwk6ICJyNCIpOworfQorCit2b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQoreworCXByX25vdGljZSgiTWFjaGluZSBoYWx0Li4uXG4iKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWZvciAoOzspCisJCTsKK30KKworLyoKKyAqIFRoZXJlIGlzIG5vIHdheSB0byBwb3dlciBvZmYgdGhlIGRldmVsb3BtZW50IGJvYXJkcy4gU28ganVzdCBzcGluIGZvciBub3cuIElmCisgKiB3ZSBldmVyIGhhdmUgYSB3YXkgb2YgcmVzZXR0aW5nIGEgYm9hcmQgdXNpbmcgYSBHUElPIHdlIHNob3VsZCBhZGQgdGhhdCBoZXJlLgorICovCit2b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisJcHJfbm90aWNlKCJNYWNoaW5lIHBvd2VyIG9mZi4uLlxuIik7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlmb3IgKDs7KQorCQk7Cit9CisKK3ZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXByX25vdGljZSgiXG4iKTsKKwlzaG93X3JlZ3NfcHJpbnRfaW5mbyhLRVJOX0RFRkFVTFQpOworCisJcHJfbm90aWNlKCJyMTogJTA4bHggcjI6ICUwOGx4IHIzOiAlMDhseCByNDogJTA4bHhcbiIsCisJCXJlZ3MtPnIxLCAgcmVncy0+cjIsICByZWdzLT5yMywgIHJlZ3MtPnI0KTsKKworCXByX25vdGljZSgicjU6ICUwOGx4IHI2OiAlMDhseCByNzogJTA4bHggcjg6ICUwOGx4XG4iLAorCQlyZWdzLT5yNSwgIHJlZ3MtPnI2LCAgcmVncy0+cjcsICByZWdzLT5yOCk7CisKKwlwcl9ub3RpY2UoInI5OiAlMDhseCByMTA6ICUwOGx4IHIxMTogJTA4bHggcjEyOiAlMDhseFxuIiwKKwkJcmVncy0+cjksICByZWdzLT5yMTAsIHJlZ3MtPnIxMSwgcmVncy0+cjEyKTsKKworCXByX25vdGljZSgicjEzOiAlMDhseCByMTQ6ICUwOGx4IHIxNTogJTA4bHhcbiIsCisJCXJlZ3MtPnIxMywgcmVncy0+cjE0LCByZWdzLT5yMTUpOworCisJcHJfbm90aWNlKCJyYTogJTA4bHggZnA6ICAlMDhseCBzcDogJTA4bHggZ3A6ICUwOGx4XG4iLAorCQlyZWdzLT5yYSwgIHJlZ3MtPmZwLCAgcmVncy0+c3AsICByZWdzLT5ncCk7CisKKwlwcl9ub3RpY2UoImVhOiAlMDhseCBlc3RhdHVzOiAlMDhseFxuIiwKKwkJcmVncy0+ZWEsICByZWdzLT5lc3RhdHVzKTsKK30KKwordm9pZCBmbHVzaF90aHJlYWQodm9pZCkKK3sKKwlzZXRfZnMoVVNFUl9EUyk7Cit9CisKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAorCQl1bnNpZ25lZCBsb25nIHVzcCwgdW5zaWduZWQgbG9uZyBhcmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqY2hpbGRyZWdzID0gdGFza19wdF9yZWdzKHApOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN0YWNrOworCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKmNoaWxkc3RhY2sgPQorCQkoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKiljaGlsZHJlZ3MpIC0gMTsKKworCWlmICh1bmxpa2VseShwLT5mbGFncyAmIFBGX0tUSFJFQUQpKSB7CisJCW1lbXNldChjaGlsZHN0YWNrLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBzd2l0Y2hfc3RhY2spICsgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisKKwkJY2hpbGRzdGFjay0+cjE2ID0gdXNwOwkJLyogZm4gKi8KKwkJY2hpbGRzdGFjay0+cjE3ID0gYXJnOworCQljaGlsZHN0YWNrLT5yYSA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9rZXJuZWxfdGhyZWFkOworCQljaGlsZHJlZ3MtPmVzdGF0dXMgPSBTVEFUVVNfUElFOworCQljaGlsZHJlZ3MtPnNwID0gKHVuc2lnbmVkIGxvbmcpIGNoaWxkc3RhY2s7CisKKwkJcC0+dGhyZWFkLmtzcCA9ICh1bnNpZ25lZCBsb25nKSBjaGlsZHN0YWNrOworCQlwLT50aHJlYWQua3JlZ3MgPSBjaGlsZHJlZ3M7CisJCXJldHVybiAwOworCX0KKworCXJlZ3MgPSBjdXJyZW50X3B0X3JlZ3MoKTsKKwkqY2hpbGRyZWdzID0gKnJlZ3M7CisJY2hpbGRyZWdzLT5yMiA9IDA7CS8qIFNldCB0aGUgcmV0dXJuIHZhbHVlIGZvciB0aGUgY2hpbGQuICovCisJY2hpbGRyZWdzLT5yNyA9IDA7CisKKwlzdGFjayA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKSByZWdzKSAtIDE7CisJKmNoaWxkc3RhY2sgPSAqc3RhY2s7CisJY2hpbGRzdGFjay0+cmEgPSAodW5zaWduZWQgbG9uZylyZXRfZnJvbV9mb3JrOworCXAtPnRocmVhZC5rcmVncyA9IGNoaWxkcmVnczsKKwlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpIGNoaWxkc3RhY2s7CisKKwlpZiAodXNwKQorCQljaGlsZHJlZ3MtPnNwID0gdXNwOworCisJLyogSW5pdGlhbGl6ZSB0bHMgcmVnaXN0ZXIuICovCisJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKQorCQljaGlsZHN0YWNrLT5yMjMgPSByZWdzLT5yODsKKworCXJldHVybiAwOworfQorCisvKgorICoJR2VuZXJpYyBkdW1waW5nIGNvZGUuIFVzZWQgZm9yIHBhbmljIGFuZCBkZWJ1Zy4KKyAqLwordm9pZCBkdW1wKHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwl1bnNpZ25lZCBsb25nCSpzcDsKKwl1bnNpZ25lZCBjaGFyCSp0cDsKKwlpbnQJCWk7CisKKwlwcl9lbWVyZygiXG5DVVJSRU5UIFBST0NFU1M6XG5cbiIpOworCXByX2VtZXJnKCJDT01NPSVzIFBJRD0lZFxuIiwgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKKworCWlmIChjdXJyZW50LT5tbSkgeworCQlwcl9lbWVyZygiVEVYVD0lMDh4LSUwOHggREFUQT0lMDh4LSUwOHggQlNTPSUwOHgtJTA4eFxuIiwKKwkJCShpbnQpIGN1cnJlbnQtPm1tLT5zdGFydF9jb2RlLAorCQkJKGludCkgY3VycmVudC0+bW0tPmVuZF9jb2RlLAorCQkJKGludCkgY3VycmVudC0+bW0tPnN0YXJ0X2RhdGEsCisJCQkoaW50KSBjdXJyZW50LT5tbS0+ZW5kX2RhdGEsCisJCQkoaW50KSBjdXJyZW50LT5tbS0+ZW5kX2RhdGEsCisJCQkoaW50KSBjdXJyZW50LT5tbS0+YnJrKTsKKwkJcHJfZW1lcmcoIlVTRVItU1RBQ0s9JTA4eCAgS0VSTkVMLVNUQUNLPSUwOHhcblxuIiwKKwkJCShpbnQpIGN1cnJlbnQtPm1tLT5zdGFydF9zdGFjaywKKwkJCShpbnQpKCgodW5zaWduZWQgbG9uZykgY3VycmVudCkgKyBUSFJFQURfU0laRSkpOworCX0KKworCXByX2VtZXJnKCJQQzogJTA4bHhcbiIsIGZwLT5lYSk7CisJcHJfZW1lcmcoIlNSOiAlMDhseCAgICBTUDogJTA4bHhcbiIsCisJCShsb25nKSBmcC0+ZXN0YXR1cywgKGxvbmcpIGZwKTsKKworCXByX2VtZXJnKCJyMTogJTA4bHggICAgcjI6ICUwOGx4ICAgIHIzOiAlMDhseFxuIiwKKwkJZnAtPnIxLCBmcC0+cjIsIGZwLT5yMyk7CisKKwlwcl9lbWVyZygicjQ6ICUwOGx4ICAgIHI1OiAlMDhseCAgICByNjogJTA4bHggICAgcjc6ICUwOGx4XG4iLAorCQlmcC0+cjQsIGZwLT5yNSwgZnAtPnI2LCBmcC0+cjcpOworCXByX2VtZXJnKCJyODogJTA4bHggICAgcjk6ICUwOGx4ICAgIHIxMDogJTA4bHggICAgcjExOiAlMDhseFxuIiwKKwkJZnAtPnI4LCBmcC0+cjksIGZwLT5yMTAsIGZwLT5yMTEpOworCXByX2VtZXJnKCJyMTI6ICUwOGx4ICByMTM6ICUwOGx4ICAgIHIxNDogJTA4bHggICAgcjE1OiAlMDhseFxuIiwKKwkJZnAtPnIxMiwgZnAtPnIxMywgZnAtPnIxNCwgZnAtPnIxNSk7CisJcHJfZW1lcmcoIm9yMjogJTA4bHggICByYTogJTA4bHggICAgIGZwOiAlMDhseCAgICBzcDogJTA4bHhcbiIsCisJCWZwLT5vcmlnX3IyLCBmcC0+cmEsIGZwLT5mcCwgZnAtPnNwKTsKKwlwcl9lbWVyZygiXG5VU1A6ICUwOHggICBUUkFQRlJBTUU6ICUwOHhcbiIsCisJCSh1bnNpZ25lZCBpbnQpIGZwLT5zcCwgKHVuc2lnbmVkIGludCkgZnApOworCisJcHJfZW1lcmcoIlxuQ09ERToiKTsKKwl0cCA9ICgodW5zaWduZWQgY2hhciAqKSBmcC0+ZWEpIC0gMHgyMDsKKwlmb3IgKHNwID0gKHVuc2lnbmVkIGxvbmcgKikgdHAsIGkgPSAwOyAoaSA8IDB4NDApOyAgaSArPSA0KSB7CisJCWlmICgoaSAlIDB4MTApID09IDApCisJCQlwcl9lbWVyZygiXG4lMDh4OiAiLCAoaW50KSAodHAgKyBpKSk7CisJCXByX2VtZXJnKCIlMDh4ICIsIChpbnQpICpzcCsrKTsKKwl9CisJcHJfZW1lcmcoIlxuIik7CisKKwlwcl9lbWVyZygiXG5LRVJORUwgU1RBQ0s6Iik7CisJdHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgZnApIC0gMHg0MDsKKwlmb3IgKHNwID0gKHVuc2lnbmVkIGxvbmcgKikgdHAsIGkgPSAwOyAoaSA8IDB4YzApOyBpICs9IDQpIHsKKwkJaWYgKChpICUgMHgxMCkgPT0gMCkKKwkJCXByX2VtZXJnKCJcbiUwOHg6ICIsIChpbnQpICh0cCArIGkpKTsKKwkJcHJfZW1lcmcoIiUwOHggIiwgKGludCkgKnNwKyspOworCX0KKwlwcl9lbWVyZygiXG4iKTsKKwlwcl9lbWVyZygiXG4iKTsKKworCXByX2VtZXJnKCJcblVTRVIgU1RBQ0s6Iik7CisJdHAgPSAodW5zaWduZWQgY2hhciAqKSAoZnAtPnNwIC0gMHgxMCk7CisJZm9yIChzcCA9ICh1bnNpZ25lZCBsb25nICopIHRwLCBpID0gMDsgKGkgPCAweDgwKTsgaSArPSA0KSB7CisJCWlmICgoaSAlIDB4MTApID09IDApCisJCQlwcl9lbWVyZygiXG4lMDh4OiAiLCAoaW50KSAodHAgKyBpKSk7CisJCXByX2VtZXJnKCIlMDh4ICIsIChpbnQpICpzcCsrKTsKKwl9CisJcHJfZW1lcmcoIlxuXG4iKTsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXVuc2lnbmVkIGxvbmcgZnAsIHBjOworCXVuc2lnbmVkIGxvbmcgc3RhY2tfcGFnZTsKKwlpbnQgY291bnQgPSAwOworCisJaWYgKCFwIHx8IHAgPT0gY3VycmVudCB8fCBwLT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcpCisJCXJldHVybiAwOworCisJc3RhY2tfcGFnZSA9ICh1bnNpZ25lZCBsb25nKXA7CisJZnAgPSAoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKilwLT50aHJlYWQua3NwKS0+ZnA7CS8qIDtkZ3QyICovCisJZG8geworCQlpZiAoZnAgPCBzdGFja19wYWdlK3NpemVvZihzdHJ1Y3QgdGFza19zdHJ1Y3QpIHx8CisJCQlmcCA+PSA4MTg0K3N0YWNrX3BhZ2UpCS8qIDtkZ3QyO3RtcCAqLworCQkJcmV0dXJuIDA7CisJCXBjID0gKCh1bnNpZ25lZCBsb25nICopZnApWzFdOworCQlpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhwYykpCisJCQlyZXR1cm4gcGM7CisJCWZwID0gKih1bnNpZ25lZCBsb25nICopIGZwOworCX0gd2hpbGUgKGNvdW50KysgPCAxNik7CQkvKiA7ZGd0Mjt0bXAgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4KKyAqIFdpbGwgc3RhcnR1cCBpbiB1c2VyIG1vZGUgKHN0YXR1c19leHRlbnNpb24gPSAwKS4KKyAqLwordm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgc3ApCit7CisJbWVtc2V0KCh2b2lkICopIHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCXJlZ3MtPmVzdGF0dXMgPSBFU1RBVFVTX0VQSUUgfCBFU1RBVFVTX0VVOworCXJlZ3MtPmVhID0gcGM7CisJcmVncy0+c3AgPSBzcDsKK30KKworI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KKworLyogRmlsbCBpbiB0aGUgRlBVIHN0cnVjdHVyZSBmb3IgYSBjb3JlIGR1bXAuICovCitpbnQgZHVtcF9mcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGVsZl9mcHJlZ3NldF90ICpyKQoreworCXJldHVybiAwOyAvKiBOaW9zMiBoYXMgbm8gRlBVIGFuZCB0aHVzIG5vIEZQVSByZWdpc3RlcnMgKi8KK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3Byb20uYyBiL2FyY2gvbmlvczIva2VybmVsL3Byb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTIyZDMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvcHJvbS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBEZXZpY2UgdHJlZSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRob21hcyBDaG91IDx0aG9tYXNAd3l0cm9uLmNvbS50dz4KKyAqCisgKiBCYXNlZCBvbiBNSVBTIHN1cHBvcnQgZm9yIENPTkZJR19PRiBkZXZpY2UgdHJlZSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIENpc2NvIFN5c3RlbXMgSW5jLiA8ZGVkaWFvQGNpc2NvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZmR0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2FkZF9tZW1vcnlfYXJjaCh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisJdTY0IGtlcm5lbF9zdGFydCA9ICh1NjQpdmlydF90b19waHlzKF90ZXh0KTsKKworCWlmICghbWVtb3J5X3NpemUgJiYKKwkgICAgKGtlcm5lbF9zdGFydCA+PSBiYXNlKSAmJiAoa2VybmVsX3N0YXJ0IDwgKGJhc2UgKyBzaXplKSkpCisJCW1lbW9yeV9zaXplID0gc2l6ZTsKKworfQorCit2b2lkICogX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfbWVtb3J5X2FyY2godTY0IHNpemUsIHU2NCBhbGlnbikKK3sKKwlyZXR1cm4gYWxsb2NfYm9vdG1lbV9hbGlnbihzaXplLCBhbGlnbik7Cit9CisKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfZGV2dHJlZSh2b2lkICpwYXJhbXMpCit7CisJX19iZTMyICpkdGIgPSAodTMyICopX19kdGJfc3RhcnQ7CisjaWYgZGVmaW5lZChDT05GSUdfTklPUzJfRFRCX0FUX1BIWVNfQUREUikKKwlpZiAoYmUzMl90b19jcHVwKChfX2JlMzIgKilDT05GSUdfTklPUzJfRFRCX1BIWVNfQUREUikgPT0KKwkJIE9GX0RUX0hFQURFUikgeworCQlwYXJhbXMgPSAodm9pZCAqKUNPTkZJR19OSU9TMl9EVEJfUEhZU19BRERSOworCQllYXJseV9pbml0X2R0X3NjYW4ocGFyYW1zKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCWlmIChiZTMyX3RvX2NwdSgoX19iZTMyKSAqZHRiKSA9PSBPRl9EVF9IRUFERVIpCisJCXBhcmFtcyA9ICh2b2lkICopX19kdGJfc3RhcnQ7CisKKwllYXJseV9pbml0X2R0X3NjYW4ocGFyYW1zKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvcHRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxZGRhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3B0cmFjZS5jCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFsdGVyYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3NldC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KKworc3RhdGljIGludCBnZW5yZWdzX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgICAgICAgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFyZ2V0KTsKKwljb25zdCBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcmVncyAtIDE7CisJaW50IHJldCA9IDA7CisKKyNkZWZpbmUgUkVHX09fWkVST19SQU5HRShTVEFSVCwgRU5EKQkJXAorCWlmICghcmV0KQkJCQkJXAorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0X3plcm8oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsIFwKKwkJCVNUQVJUICogNCwgKEVORCAqIDQpICsgNCk7CisKKyNkZWZpbmUgUkVHX09fT05FKFBUUiwgTE9DKQlcCisJaWYgKCFyZXQpCQkJXAorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCBQVFIsIFwKKwkJCUxPQyAqIDQsIChMT0MgKiA0KSArIDQpOworCisjZGVmaW5lIFJFR19PX1JBTkdFKFBUUiwgU1RBUlQsIEVORCkJXAorCWlmICghcmV0KQkJCQlcCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsIFBUUiwgXAorCQkJU1RBUlQgKiA0LCAoRU5EICogNCkgKyA0KTsKKworCVJFR19PX1pFUk9fUkFOR0UoUFRSX1IwLCBQVFJfUjApOworCVJFR19PX1JBTkdFKCZyZWdzLT5yMSwgUFRSX1IxLCBQVFJfUjcpOworCVJFR19PX1JBTkdFKCZyZWdzLT5yOCwgUFRSX1I4LCBQVFJfUjE1KTsKKwlSRUdfT19SQU5HRShzdywgUFRSX1IxNiwgUFRSX1IyMyk7CisJUkVHX09fWkVST19SQU5HRShQVFJfUjI0LCBQVFJfUjI1KTsgLyogZXQgYW5kIGJ0ICovCisJUkVHX09fT05FKCZyZWdzLT5ncCwgUFRSX0dQKTsKKwlSRUdfT19PTkUoJnJlZ3MtPnNwLCBQVFJfU1ApOworCVJFR19PX09ORSgmcmVncy0+ZnAsIFBUUl9GUCk7CisJUkVHX09fT05FKCZyZWdzLT5lYSwgUFRSX0VBKTsKKwlSRUdfT19aRVJPX1JBTkdFKFBUUl9CQSwgUFRSX0JBKTsKKwlSRUdfT19PTkUoJnJlZ3MtPnJhLCBQVFJfUkEpOworCVJFR19PX09ORSgmcmVncy0+ZWEsIFBUUl9QQyk7IC8qIHVzZSBlYSBmb3IgUEMgKi8KKwlpZiAoIXJldCkKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dF96ZXJvKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgUFRSX1NUQVRVUyAqIDQsIC0xKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTZXQgdGhlIHRocmVhZCBzdGF0ZSBmcm9tIGEgcmVnc2V0IHBhc3NlZCBpbiB2aWEgcHRyYWNlCisgKi8KK3N0YXRpYyBpbnQgZ2VucmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKHRhcmdldCk7CisJY29uc3Qgc3RydWN0IHN3aXRjaF9zdGFjayAqc3cgPSAoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MgLSAxOworCWludCByZXQgPSAwOworCisjZGVmaW5lIFJFR19JR05PUkVfUkFOR0UoU1RBUlQsIEVORCkJCVwKKwlpZiAoIXJldCkJCQkJCVwKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluX2lnbm9yZSgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwgXAorCQkJU1RBUlQgKiA0LCAoRU5EICogNCkgKyA0KTsKKworI2RlZmluZSBSRUdfSU5fT05FKFBUUiwgTE9DKQlcCisJaWYgKCFyZXQpCQkJXAorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsIFwKKwkJCSh2b2lkICopKFBUUiksIExPQyAqIDQsIChMT0MgKiA0KSArIDQpOworCisjZGVmaW5lIFJFR19JTl9SQU5HRShQVFIsIFNUQVJULCBFTkQpCVwKKwlpZiAoIXJldCkJCQkJXAorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsIFwKKwkJCSh2b2lkICopKFBUUiksIFNUQVJUICogNCwgKEVORCAqIDQpICsgNCk7CisKKwlSRUdfSUdOT1JFX1JBTkdFKFBUUl9SMCwgUFRSX1IwKTsKKwlSRUdfSU5fUkFOR0UoJnJlZ3MtPnIxLCBQVFJfUjEsIFBUUl9SNyk7CisJUkVHX0lOX1JBTkdFKCZyZWdzLT5yOCwgUFRSX1I4LCBQVFJfUjE1KTsKKwlSRUdfSU5fUkFOR0Uoc3csIFBUUl9SMTYsIFBUUl9SMjMpOworCVJFR19JR05PUkVfUkFOR0UoUFRSX1IyNCwgUFRSX1IyNSk7IC8qIGV0IGFuZCBidCAqLworCVJFR19JTl9PTkUoJnJlZ3MtPmdwLCBQVFJfR1ApOworCVJFR19JTl9PTkUoJnJlZ3MtPnNwLCBQVFJfU1ApOworCVJFR19JTl9PTkUoJnJlZ3MtPmZwLCBQVFJfRlApOworCVJFR19JTl9PTkUoJnJlZ3MtPmVhLCBQVFJfRUEpOworCVJFR19JR05PUkVfUkFOR0UoUFRSX0JBLCBQVFJfQkEpOworCVJFR19JTl9PTkUoJnJlZ3MtPnJhLCBQVFJfUkEpOworCVJFR19JTl9PTkUoJnJlZ3MtPmVhLCBQVFJfUEMpOyAvKiB1c2UgZWEgZm9yIFBDICovCisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbl9pZ25vcmUoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCSBQVFJfU1RBVFVTICogNCwgLTEpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlZmluZSB0aGUgcmVnaXN0ZXIgc2V0cyBhdmFpbGFibGUgb24gTmlvczIgdW5kZXIgTGludXgKKyAqLworZW51bSBuaW9zMl9yZWdzZXQgeworCVJFR1NFVF9HRU5FUkFMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBuaW9zMl9yZWdzZXRzW10gPSB7CisJW1JFR1NFVF9HRU5FUkFMXSA9IHsKKwkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJTVEFUVVMsCisJCS5uID0gTlVNX1BUUkFDRV9SRUcsCisJCS5zaXplID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkuYWxpZ24gPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5nZXQgPSBnZW5yZWdzX2dldCwKKwkJLnNldCA9IGdlbnJlZ3Nfc2V0LAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyBuaW9zMl91c2VyX3ZpZXcgPSB7CisJLm5hbWUgPSAibmlvczIiLAorCS5lX21hY2hpbmUgPSBFTEZfQVJDSCwKKwkuZWlfb3NhYmkgPSBFTEZfT1NBQkksCisJLnJlZ3NldHMgPSBuaW9zMl9yZWdzZXRzLAorCS5uID0gQVJSQVlfU0laRShuaW9zMl9yZWdzZXRzKQorfTsKKworY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgKnRhc2tfdXNlcl9yZWdzZXRfdmlldyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuICZuaW9zMl91c2VyX3ZpZXc7Cit9CisKK3ZvaWQgcHRyYWNlX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKworfQorCitsb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXJldHVybiBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7Cit9CisKK2FzbWxpbmthZ2UgaW50IGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKKwkJcmV0ID0gdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHRhc2tfcHRfcmVncyhjdXJyZW50KSk7CisKKwlyZXR1cm4gcmV0OworfQorCithc21saW5rYWdlIHZvaWQgZG9fc3lzY2FsbF90cmFjZV9leGl0KHZvaWQpCit7CisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQorCQl0cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZXhpdCh0YXNrX3B0X3JlZ3MoY3VycmVudCksIDApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbmlvczIva2VybmVsL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzMTIxZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3NldHVwLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBOaW9zMi1zcGVjaWZpYyBwYXJ0cyBvZiBzeXN0ZW0gc2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVmljIFBoaWxsaXBzIDx2aWNAbWljcm90cm9uaXguY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgorCisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2NwdWluZm8uaD4KKwordW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQ7CitFWFBPUlRfU1lNQk9MKG1lbW9yeV9zdGFydCk7CisKK3Vuc2lnbmVkIGxvbmcgbWVtb3J5X2VuZDsKK0VYUE9SVF9TWU1CT0wobWVtb3J5X2VuZCk7CisKK3Vuc2lnbmVkIGxvbmcgbWVtb3J5X3NpemU7CisKK3N0YXRpYyBzdHJ1Y3QgcHRfcmVncyBmYWtlX3JlZ3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCQkJCTAsIDAsIDAsIDAsIDAsIDAsCisJCQkJCTB9OworCisvKiBDb3B5IGEgc2hvcnQgaG9vayBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB0byB0aGUgZXhjZXB0aW9uIGFkZHJlc3MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2V4Y2VwdGlvbl9oYW5kbGVyKHVuc2lnbmVkIGludCBhZGRyKQoreworCXVuc2lnbmVkIGludCBzdGFydCA9ICh1bnNpZ25lZCBpbnQpIGV4Y2VwdGlvbl9oYW5kbGVyX2hvb2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IHRtcCA9IDA7CisKKwlpZiAoc3RhcnQgPT0gYWRkcikgeworCQkvKiBUaGUgQ1BVIGV4Y2VwdGlvbiBhZGRyZXNzIGFscmVhZHkgcG9pbnRzIHRvIHRoZSBoYW5kbGVyLiAqLworCQlyZXR1cm47CisJfQorCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkibGR3CSUyLDAoJTApXG4iCisJCSJzdHcJJTIsMCglMSlcbiIKKwkJImxkdwklMiw0KCUwKVxuIgorCQkic3R3CSUyLDQoJTEpXG4iCisJCSJsZHcJJTIsOCglMClcbiIKKwkJInN0dwklMiw4KCUxKVxuIgorCQkiZmx1c2hkCTAoJTEpXG4iCisJCSJmbHVzaGQJNCglMSlcbiIKKwkJImZsdXNoZAk4KCUxKVxuIgorCQkiZmx1c2hpICUxXG4iCisJCSJhZGRpCSUxLCUxLDRcbiIKKwkJImZsdXNoaSAlMVxuIgorCQkiYWRkaQklMSwlMSw0XG4iCisJCSJmbHVzaGkgJTFcbiIKKwkJImZsdXNocFxuIgorCQk6IC8qIG5vIG91dHB1dCByZWdpc3RlcnMgKi8KKwkJOiAiciIgKHN0YXJ0KSwgInIiIChhZGRyKSwgInIiICh0bXApCisJCTogIm1lbW9yeSIKKwkpOworfQorCisvKiBDb3B5IHRoZSBmYXN0IFRMQiBtaXNzIGhhbmRsZXIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2Zhc3RfdGxiX21pc3NfaGFuZGxlcih1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgc3RhcnQgPSAodW5zaWduZWQgaW50KSBmYXN0X2hhbmRsZXI7CisJdW5zaWduZWQgaW50IGVuZCA9ICh1bnNpZ25lZCBpbnQpIGZhc3RfaGFuZGxlcl9lbmQ7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IHRtcCA9IDA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOlxuIgorCQkiCWxkdwklMywwKCUwKVxuIgorCQkiCXN0dwklMywwKCUxKVxuIgorCQkiCWZsdXNoZAkwKCUxKVxuIgorCQkiCWZsdXNoaQklMVxuIgorCQkiCWZsdXNocFxuIgorCQkiCWFkZGkJJTAsJTAsNFxuIgorCQkiCWFkZGkJJTEsJTEsNFxuIgorCQkiCWJuZQklMCwlMiwxYlxuIgorCQk6IC8qIG5vIG91dHB1dCByZWdpc3RlcnMgKi8KKwkJOiAiciIgKHN0YXJ0KSwgInIiIChhZGRyKSwgInIiIChlbmQpLCAiciIgKHRtcCkKKwkJOiAibWVtb3J5IgorCSk7Cit9CisKKy8qCisgKiBzYXZlIGFyZ3MgcGFzc2VkIGZyb20gdS1ib290LCBjYWxsZWQgZnJvbSBoZWFkLlMKKyAqCisgKiBAcjQ6IE5JT1MgbWFnaWMKKyAqIEByNTogaW5pdHJkIHN0YXJ0CisgKiBAcjY6IGluaXRyZCBlbmQgb3IgZmR0CisgKiBAcjc6IGtlcm5lbCBjb21tYW5kIGxpbmUKKyAqLworYXNtbGlua2FnZSB2b2lkIF9faW5pdCBuaW9zMl9ib290X2luaXQodW5zaWduZWQgcjQsIHVuc2lnbmVkIHI1LCB1bnNpZ25lZCByNiwKKwkJCQkgICAgICAgdW5zaWduZWQgcjcpCit7CisJdW5zaWduZWQgZHRiX3Bhc3NlZCA9IDA7CisJY2hhciBjbWRsaW5lX3Bhc3NlZFtDT01NQU5EX0xJTkVfU0laRV0gPSB7IDAsIH07CisKKyNpZiBkZWZpbmVkKENPTkZJR19OSU9TMl9QQVNTX0NNRExJTkUpCisJaWYgKHI0ID09IDB4NTM0ZjQ5NGUpIHsgLyogcjQgaXMgbWFnaWMgTklPUyAqLworI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5JVFJEKQorCQlpZiAocjUpIHsgLyogaW5pdHJhbWZzICovCisJCQlpbml0cmRfc3RhcnQgPSByNTsKKwkJCWluaXRyZF9lbmQgPSByNjsKKwkJfQorI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLworCQlkdGJfcGFzc2VkID0gcjY7CisKKwkJaWYgKHI3KQorCQkJc3RybmNweShjbWRsaW5lX3Bhc3NlZCwgKGNoYXIgKilyNywgQ09NTUFORF9MSU5FX1NJWkUpOworCX0KKyNlbmRpZgorCisJZWFybHlfaW5pdF9kZXZ0cmVlKCh2b2lkICopZHRiX3Bhc3NlZCk7CisKKyNpZm5kZWYgQ09ORklHX0NNRExJTkVfRk9SQ0UKKwlpZiAoY21kbGluZV9wYXNzZWRbMF0pCisJCXN0cm5jcHkoYm9vdF9jb21tYW5kX2xpbmUsIGNtZGxpbmVfcGFzc2VkLCBDT01NQU5EX0xJTkVfU0laRSk7CisjaWZkZWYgQ09ORklHX05JT1MyX0NNRExJTkVfSUdOT1JFX0RUQgorCWVsc2UKKwkJc3RybmNweShib290X2NvbW1hbmRfbGluZSwgQ09ORklHX0NNRExJTkUsIENPTU1BTkRfTElORV9TSVpFKTsKKyNlbmRpZgorI2VuZGlmCit9CisKK3ZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKK3sKKwlpbnQgYm9vdG1hcF9zaXplOworCisJY29uc29sZV92ZXJib3NlKCk7CisKKwltZW1vcnlfc3RhcnQgPSBQQUdFX0FMSUdOKCh1bnNpZ25lZCBsb25nKV9fcGEoX2VuZCkpOworCW1lbW9yeV9lbmQgPSAodW5zaWduZWQgbG9uZykgQ09ORklHX05JT1MyX01FTV9CQVNFICsgbWVtb3J5X3NpemU7CisKKwlpbml0X21tLnN0YXJ0X2NvZGUgPSAodW5zaWduZWQgbG9uZykgX3N0ZXh0OworCWluaXRfbW0uZW5kX2NvZGUgPSAodW5zaWduZWQgbG9uZykgX2V0ZXh0OworCWluaXRfbW0uZW5kX2RhdGEgPSAodW5zaWduZWQgbG9uZykgX2VkYXRhOworCWluaXRfbW0uYnJrID0gKHVuc2lnbmVkIGxvbmcpIF9lbmQ7CisJaW5pdF90YXNrLnRocmVhZC5rcmVncyA9ICZmYWtlX3JlZ3M7CisKKwkvKiBLZWVwIGEgY29weSBvZiBjb21tYW5kIGxpbmUgKi8KKwkqY21kbGluZV9wID0gYm9vdF9jb21tYW5kX2xpbmU7CisKKwltaW5fbG93X3BmbiA9IFBGTl9VUChtZW1vcnlfc3RhcnQpOworCW1heF9sb3dfcGZuID0gUEZOX0RPV04obWVtb3J5X2VuZCk7CisJbWF4X21hcG5yID0gbWF4X2xvd19wZm47CisKKwkvKgorCSAqIGdpdmUgYWxsIHRoZSBtZW1vcnkgdG8gdGhlIGJvb3RtYXAgYWxsb2NhdG9yLCAgdGVsbCBpdCB0byBwdXQgdGhlCisJICogYm9vdCBtZW1fbWFwIGF0IHRoZSBzdGFydCBvZiBtZW1vcnkKKwkgKi8KKwlwcl9kZWJ1ZygiaW5pdF9ib290bWVtX25vZGUoPywlI2x4LCAlI3gsICUjbHgpXG4iLAorCQltaW5fbG93X3BmbiwgUEZOX0RPV04oUEhZU19PRkZTRVQpLCBtYXhfbG93X3Bmbik7CisJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLAorCQkJCQltaW5fbG93X3BmbiwgUEZOX0RPV04oUEhZU19PRkZTRVQpLAorCQkJCQltYXhfbG93X3Bmbik7CisKKwkvKgorCSAqIGZyZWUgdGhlIHVzYWJsZSBtZW1vcnksICB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkbyBub3QgZnJlZQorCSAqIHRoZSBib290bWVtIGJpdG1hcCBzbyB3ZSB0aGVuIHJlc2VydmUgaXQgYWZ0ZXIgZnJlZWluZyBpdCA6LSkKKwkgKi8KKwlwcl9kZWJ1ZygiZnJlZV9ib290bWVtKCUjbHgsICUjbHgpXG4iLAorCQltZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmQgLSBtZW1vcnlfc3RhcnQpOworCWZyZWVfYm9vdG1lbShtZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmQgLSBtZW1vcnlfc3RhcnQpOworCisJLyoKKwkgKiBSZXNlcnZlIHRoZSBib290bWVtIGJpdG1hcCBpdHNlbGYgYXMgd2VsbC4gV2UgZG8gdGhpcyBpbiB0d28KKwkgKiBzdGVwcyAoZmlyc3Qgc3RlcCB3YXMgaW5pdF9ib290bWVtKCkpIGJlY2F1c2UgdGhpcyBjYXRjaGVzCisJICogdGhlICh2ZXJ5IHVubGlrZWx5KSBjYXNlIG9mIHVzIGFjY2lkZW50YWxseSBpbml0aWFsaXppbmcgdGhlCisJICogYm9vdG1lbSBhbGxvY2F0b3Igd2l0aCBhbiBpbnZhbGlkIFJBTSBhcmVhLgorCSAqCisJICogQXJndW1lbnRzIGFyZSBzdGFydCwgc2l6ZQorCSAqLworCXByX2RlYnVnKCJyZXNlcnZlX2Jvb3RtZW0oJSNseCwgJSN4KVxuIiwgbWVtb3J5X3N0YXJ0LCBib290bWFwX3NpemUpOworCXJlc2VydmVfYm9vdG1lbShtZW1vcnlfc3RhcnQsIGJvb3RtYXBfc2l6ZSwgQk9PVE1FTV9ERUZBVUxUKTsKKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmIChpbml0cmRfc3RhcnQpIHsKKwkJcmVzZXJ2ZV9ib290bWVtKHZpcnRfdG9fcGh5cygodm9pZCAqKWluaXRyZF9zdGFydCksCisJCQkJaW5pdHJkX2VuZCAtIGluaXRyZF9zdGFydCwgQk9PVE1FTV9ERUZBVUxUKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5JVFJEICovCisKKwl1bmZsYXR0ZW5fYW5kX2NvcHlfZGV2aWNlX3RyZWUoKTsKKworCXNldHVwX2NwdWluZm8oKTsKKworCWNvcHlfZXhjZXB0aW9uX2hhbmRsZXIoY3B1aW5mby5leGNlcHRpb25fYWRkcik7CisKKwltbXVfaW5pdCgpOworCisJY29weV9mYXN0X3RsYl9taXNzX2hhbmRsZXIoY3B1aW5mby5mYXN0X3RsYl9taXNzX2V4Y19hZGRyKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBNTVUgY29udGV4dCBoYW5kbGluZyBoZXJlIGJlY2F1c2UgZGF0YSBmcm9tIGNwdWluZm8gaXMKKwkgKiBuZWVkZWQgZm9yIHRoaXMuCisJICovCisJbW11X2NvbnRleHRfaW5pdCgpOworCisJLyoKKwkgKiBnZXQga21hbGxvYyBpbnRvIGdlYXIKKwkgKi8KKwlwYWdpbmdfaW5pdCgpOworCisjaWYgZGVmaW5lZChDT05GSUdfVlQpICYmIGRlZmluZWQoQ09ORklHX0RVTU1ZX0NPTlNPTEUpCisJY29uc3dpdGNocCA9ICZkdW1teV9jb247CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkMjc4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jCkBAIC0wLDAgKzEsMzIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICogQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyIExpbnVzIFRvcnZhbGRzCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgorCisjaW5jbHVkZSA8YXNtL3Vjb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKKworLyoKKyAqIERvIGEgc2lnbmFsIHJldHVybjsgdW5kbyB0aGUgc2lnbmFsIHN0YWNrLgorICoKKyAqIEtlZXAgdGhlIHJldHVybiBjb2RlIG9uIHRoZSBzdGFjayBxdWFkd29yZCBhbGlnbmVkIQorICogVGhhdCBtYWtlcyB0aGUgY2FjaGUgZmx1c2ggYmVsb3cgZWFzaWVyLgorICovCisKK3N0cnVjdCBydF9zaWdmcmFtZSB7CisJc3RydWN0IHNpZ2luZm8gaW5mbzsKKwlzdHJ1Y3QgdWNvbnRleHQgdWM7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBydF9yZXN0b3JlX3Vjb250ZXh0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdywKKwkJCQkJc3RydWN0IHVjb250ZXh0ICp1YywgaW50ICpwcjIpCit7CisJaW50IHRlbXA7CisJZ3JlZ190ICpncmVncyA9IHVjLT51Y19tY29udGV4dC5ncmVnczsKKwlpbnQgZXJyOworCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCisJZXJyID0gX19nZXRfdXNlcih0ZW1wLCAmdWMtPnVjX21jb250ZXh0LnZlcnNpb24pOworCWlmICh0ZW1wICE9IE1DT05URVhUX1ZFUlNJT04pCisJCWdvdG8gYmFkZnJhbWU7CisJLyogcmVzdG9yZSBwYXNzZWQgcmVnaXN0ZXJzICovCisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjEsICZncmVnc1swXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjIsICZncmVnc1sxXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjMsICZncmVnc1syXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjQsICZncmVnc1szXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjUsICZncmVnc1s0XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjYsICZncmVnc1s1XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjcsICZncmVnc1s2XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjgsICZncmVnc1s3XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjksICZncmVnc1s4XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjEwLCAmZ3JlZ3NbOV0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIxMSwgJmdyZWdzWzEwXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjEyLCAmZ3JlZ3NbMTFdKTsKKwllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5yMTMsICZncmVnc1sxMl0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnIxNCwgJmdyZWdzWzEzXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cjE1LCAmZ3JlZ3NbMTRdKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+cjE2LCAmZ3JlZ3NbMTVdKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+cjE3LCAmZ3JlZ3NbMTZdKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+cjE4LCAmZ3JlZ3NbMTddKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+cjE5LCAmZ3JlZ3NbMThdKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+cjIwLCAmZ3JlZ3NbMTldKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+cjIxLCAmZ3JlZ3NbMjBdKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+cjIyLCAmZ3JlZ3NbMjFdKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+cjIzLCAmZ3JlZ3NbMjJdKTsKKwkvKiBncmVnc1syM10gaXMgaGFuZGxlZCBiZWxvdyAqLworCWVyciB8PSBfX2dldF91c2VyKHN3LT5mcCwgJmdyZWdzWzI0XSk7ICAvKiBWZXJpZnksIHNob3VsZCB0aGlzIGJlCisJCQkJCQkJc2V0dGFibGUgKi8KKwllcnIgfD0gX19nZXRfdXNlcihzdy0+Z3AsICZncmVnc1syNV0pOyAgLyogVmVyaWZ5LCBzaG91bGQgdGhpcyBiZQorCQkJCQkJCXNldHRhYmxlICovCisKKwllcnIgfD0gX19nZXRfdXNlcih0ZW1wLCAmZ3JlZ3NbMjZdKTsgIC8qIE5vdCByZWFsbHkgbmVjZXNzYXJ5IG5vIHVzZXIKKwkJCQkJCQlzZXR0YWJsZSBiaXRzICovCisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+ZWEsICZncmVnc1syN10pOworCisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+cmEsICZncmVnc1syM10pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnNwLCAmZ3JlZ3NbMjhdKTsKKworCXJlZ3MtPm9yaWdfcjIgPSAtMTsJCS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MgKi8KKworCWVyciB8PSByZXN0b3JlX2FsdHN0YWNrKCZ1Yy0+dWNfc3RhY2spOworCWlmIChlcnIpCisJCWdvdG8gYmFkZnJhbWU7CisKKwkqcHIyID0gcmVncy0+cjI7CisJcmV0dXJuIGVycjsKKworYmFkZnJhbWU6CisJcmV0dXJuIDE7Cit9CisKK2FzbWxpbmthZ2UgaW50IGRvX3J0X3NpZ3JldHVybihzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKShzdyArIDEpOworCS8qIFZlcmlmeSwgY2FuIHdlIGZvbGxvdyB0aGUgc3RhY2sgYmFjayAqLworCXN0cnVjdCBydF9zaWdmcmFtZSAqZnJhbWUgPSAoc3RydWN0IHJ0X3NpZ2ZyYW1lICopIHJlZ3MtPnNwOworCXNpZ3NldF90IHNldDsKKwlpbnQgcnZhbDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQorCQlnb3RvIGJhZGZyYW1lOworCisJaWYgKF9fY29weV9mcm9tX3VzZXIoJnNldCwgJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzaXplb2Yoc2V0KSkpCisJCWdvdG8gYmFkZnJhbWU7CisKKwlzZXRfY3VycmVudF9ibG9ja2VkKCZzZXQpOworCisJaWYgKHJ0X3Jlc3RvcmVfdWNvbnRleHQocmVncywgc3csICZmcmFtZS0+dWMsICZydmFsKSkKKwkJZ290byBiYWRmcmFtZTsKKworCXJldHVybiBydmFsOworCitiYWRmcmFtZToKKwlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJ0X3NldHVwX3Vjb250ZXh0KHN0cnVjdCB1Y29udGV4dCAqdWMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKilyZWdzIC0gMTsKKwlncmVnX3QgKmdyZWdzID0gdWMtPnVjX21jb250ZXh0LmdyZWdzOworCWludCBlcnIgPSAwOworCisJZXJyIHw9IF9fcHV0X3VzZXIoTUNPTlRFWFRfVkVSU0lPTiwgJnVjLT51Y19tY29udGV4dC52ZXJzaW9uKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMSwgJmdyZWdzWzBdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMiwgJmdyZWdzWzFdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMywgJmdyZWdzWzJdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yNCwgJmdyZWdzWzNdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yNSwgJmdyZWdzWzRdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yNiwgJmdyZWdzWzVdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yNywgJmdyZWdzWzZdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yOCwgJmdyZWdzWzddKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yOSwgJmdyZWdzWzhdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTAsICZncmVnc1s5XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjExLCAmZ3JlZ3NbMTBdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTIsICZncmVnc1sxMV0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxMywgJmdyZWdzWzEyXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjE0LCAmZ3JlZ3NbMTNdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTUsICZncmVnc1sxNF0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5yMTYsICZncmVnc1sxNV0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5yMTcsICZncmVnc1sxNl0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5yMTgsICZncmVnc1sxN10pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5yMTksICZncmVnc1sxOF0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5yMjAsICZncmVnc1sxOV0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5yMjEsICZncmVnc1syMF0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5yMjIsICZncmVnc1syMV0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5yMjMsICZncmVnc1syMl0pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnJhLCAmZ3JlZ3NbMjNdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+ZnAsICZncmVnc1syNF0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5ncCwgJmdyZWdzWzI1XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZWEsICZncmVnc1syN10pOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnNwLCAmZ3JlZ3NbMjhdKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmdldF9zaWdmcmFtZShzdHJ1Y3Qga3NpZ25hbCAqa3NpZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJIHNpemVfdCBmcmFtZV9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgdXNwOworCisJLyogRGVmYXVsdCB0byB1c2luZyBub3JtYWwgc3RhY2suICAqLworCXVzcCA9IHJlZ3MtPnNwOworCisJLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCisJdXNwID0gc2lnc3AodXNwLCBrc2lnKTsKKworCS8qIFZlcmlmeSwgaXMgaXQgMzIgb3IgNjQgYml0IGFsaWduZWQgKi8KKwlyZXR1cm4gKHZvaWQgKikoKHVzcCAtIGZyYW1lX3NpemUpICYgLThVTCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfcnRfZnJhbWUoc3RydWN0IGtzaWduYWwgKmtzaWcsIHNpZ3NldF90ICpzZXQsCisJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBydF9zaWdmcmFtZSAqZnJhbWU7CisJaW50IGVyciA9IDA7CisKKwlmcmFtZSA9IGdldF9zaWdmcmFtZShrc2lnLCByZWdzLCBzaXplb2YoKmZyYW1lKSk7CisKKwlpZiAoa3NpZy0+a2Euc2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQorCQllcnIgfD0gY29weV9zaWdpbmZvX3RvX3VzZXIoJmZyYW1lLT5pbmZvLCAma3NpZy0+aW5mbyk7CisKKwkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KKwllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKKwllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2xpbmspOworCWVyciB8PSBfX3NhdmVfYWx0c3RhY2soJmZyYW1lLT51Yy51Y19zdGFjaywgcmVncy0+c3ApOworCWVyciB8PSBydF9zZXR1cF91Y29udGV4dCgmZnJhbWUtPnVjLCByZWdzKTsKKwllcnIgfD0gY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOworCisJaWYgKGVycikKKwkJZ290byBnaXZlX3NpZ3NlZ3Y7CisKKwkvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlOyBqdW1wIHRvIGZpeGVkIGFkZHJlc3Mgc2lncmV0dXJuCisJICAgdHJhbXBvbGluZSBvbiBrdXNlciBwYWdlLiAgKi8KKwlyZWdzLT5yYSA9ICh1bnNpZ25lZCBsb25nKSAoMHgxMDQwKTsKKworCS8qIFNldCB1cCByZWdpc3RlcnMgZm9yIHNpZ25hbCBoYW5kbGVyICovCisJcmVncy0+c3AgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CisJcmVncy0+cjQgPSAodW5zaWduZWQgbG9uZykga3NpZy0+c2lnOworCXJlZ3MtPnI1ID0gKHVuc2lnbmVkIGxvbmcpICZmcmFtZS0+aW5mbzsKKwlyZWdzLT5yNiA9ICh1bnNpZ25lZCBsb25nKSAmZnJhbWUtPnVjOworCXJlZ3MtPmVhID0gKHVuc2lnbmVkIGxvbmcpIGtzaWctPmthLnNhLnNhX2hhbmRsZXI7CisJcmV0dXJuIDA7CisKK2dpdmVfc2lnc2VndjoKKwlmb3JjZV9zaWdzZWd2KGtzaWctPnNpZywgY3VycmVudCk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKy8qCisgKiBPSywgd2UncmUgaW52b2tpbmcgYSBoYW5kbGVyCisgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9zaWduYWwoc3RydWN0IGtzaWduYWwgKmtzaWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCByZXQ7CisJc2lnc2V0X3QgKm9sZHNldCA9IHNpZ21hc2tfdG9fc2F2ZSgpOworCisJLyogc2V0IHVwIHRoZSBzdGFjayBmcmFtZSAqLworCXJldCA9IHNldHVwX3J0X2ZyYW1lKGtzaWcsIG9sZHNldCwgcmVncyk7CisKKwlzaWduYWxfc2V0dXBfZG9uZShyZXQsIGtzaWcsIDApOworfQorCitzdGF0aWMgaW50IGRvX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsID0gMCwgY29udGludWVfYWRkciA9IDAsIHJlc3RhcnRfYWRkciA9IDA7CisJaW50IHJlc3RhcnQgPSAwOworCXN0cnVjdCBrc2lnbmFsIGtzaWc7CisKKwljdXJyZW50LT50aHJlYWQua3JlZ3MgPSByZWdzOworCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGZyb20gYSBzeXN0ZW0gY2FsbCwgY2hlY2sgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLi4KKwkgKi8KKwlpZiAocmVncy0+b3JpZ19yMiA+PSAwKSB7CisJCWNvbnRpbnVlX2FkZHIgPSByZWdzLT5lYTsKKwkJcmVzdGFydF9hZGRyID0gY29udGludWVfYWRkciAtIDQ7CisJCXJldHZhbCA9IHJlZ3MtPnIyOworCisJCS8qCisJCSAqIFByZXBhcmUgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnQuIFdlIGRvIHRoaXMgaGVyZSBzbyB0aGF0IGEKKwkJICogZGVidWdnZXIgd2lsbCBzZWUgdGhlIGFscmVhZHkgY2hhbmdlZCBQQy4KKwkJICovCisJCXN3aXRjaCAocmV0dmFsKSB7CisJCWNhc2UgRVJFU1RBUlRfUkVTVEFSVEJMT0NLOgorCQkJcmVzdGFydCA9IC0yOworCQljYXNlIEVSRVNUQVJUTk9IQU5EOgorCQljYXNlIEVSRVNUQVJUU1lTOgorCQljYXNlIEVSRVNUQVJUTk9JTlRSOgorCQkJcmVzdGFydCsrOworCQkJcmVncy0+cjIgPSByZWdzLT5vcmlnX3IyOworCQkJcmVncy0+cjcgPSByZWdzLT5vcmlnX3I3OworCQkJcmVncy0+ZWEgPSByZXN0YXJ0X2FkZHI7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChnZXRfc2lnbmFsKCZrc2lnKSkgeworCQkvKiBoYW5kbGVyICovCisJCWlmICh1bmxpa2VseShyZXN0YXJ0ICYmIHJlZ3MtPmVhID09IHJlc3RhcnRfYWRkcikpIHsKKwkJCWlmIChyZXR2YWwgPT0gRVJFU1RBUlROT0hBTkQgfHwKKwkJCSAgICByZXR2YWwgPT0gRVJFU1RBUlRfUkVTVEFSVEJMT0NLIHx8CisJCQkgICAgIChyZXR2YWwgPT0gRVJFU1RBUlRTWVMKKwkJCQkmJiAhKGtzaWcua2Euc2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkpIHsKKwkJCQlyZWdzLT5yMiA9IEVJTlRSOworCQkJCXJlZ3MtPnI3ID0gMTsKKwkJCQlyZWdzLT5lYSA9IGNvbnRpbnVlX2FkZHI7CisJCQl9CisJCX0KKwkJaGFuZGxlX3NpZ25hbCgma3NpZywgcmVncyk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogTm8gaGFuZGxlciBwcmVzZW50CisJICovCisJaWYgKHVubGlrZWx5KHJlc3RhcnQpICYmIHJlZ3MtPmVhID09IHJlc3RhcnRfYWRkcikgeworCQlyZWdzLT5lYSA9IGNvbnRpbnVlX2FkZHI7CisJCXJlZ3MtPnIyID0gX19OUl9yZXN0YXJ0X3N5c2NhbGw7CisJfQorCisJLyoKKwkqIElmIHRoZXJlJ3Mgbm8gc2lnbmFsIHRvIGRlbGl2ZXIsIHdlIGp1c3QgcHV0IHRoZSBzYXZlZCBzaWdtYXNrIGJhY2suCisJKi8KKwlyZXN0b3JlX3NhdmVkX3NpZ21hc2soKTsKKworCXJldHVybiByZXN0YXJ0OworfQorCithc21saW5rYWdlIGludCBkb19ub3RpZnlfcmVzdW1lKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qCisJICogV2Ugd2FudCB0aGUgY29tbW9uIGNhc2UgdG8gZ28gZmFzdCwgd2hpY2ggaXMgd2h5IHdlIG1heSBpbiBjZXJ0YWluCisJICogY2FzZXMgZ2V0IGhlcmUgZnJvbSBrZXJuZWwgbW9kZS4gSnVzdCByZXR1cm4gd2l0aG91dCBkb2luZyBhbnl0aGluZworCSAqIGlmIHNvLgorCSAqLworCWlmICghdXNlcl9tb2RlKHJlZ3MpKQorCQlyZXR1cm4gMDsKKworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKSkgeworCQlpbnQgcmVzdGFydCA9IGRvX3NpZ25hbChyZWdzKTsKKworCQlpZiAodW5saWtlbHkocmVzdGFydCkpIHsKKwkJCS8qCisJCQkgKiBSZXN0YXJ0IHdpdGhvdXQgaGFuZGxlcnMuCisJCQkgKiBEZWFsIHdpdGggaXQgd2l0aG91dCBsZWF2aW5nCisJCQkgKiB0aGUga2VybmVsIHNwYWNlLgorCQkJICovCisJCQlyZXR1cm4gcmVzdGFydDsKKwkJfQorCX0gZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVElGWV9SRVNVTUUpKQorCQl0cmFjZWhvb2tfbm90aWZ5X3Jlc3VtZShyZWdzKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvc3lzX25pb3MyLmMgYi9hcmNoL25pb3MyL2tlcm5lbC9zeXNfbmlvczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDM5MGVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvc3lzX25pb3MyLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pY3JvdHJvbml4IERhdGFjb20gTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisKKy8qIHN5c19jYWNoZWZsdXNoIC0tIGZsdXNoIHRoZSBwcm9jZXNzb3IgY2FjaGUuICovCithc21saW5rYWdlIGludCBzeXNfY2FjaGVmbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCXVuc2lnbmVkIGludCBvcCkKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBXZSBvbmx5IHN1cHBvcnQgb3AgMCBub3csIHJldHVybiBlcnJvciBpZiBvcCBpcyBub24temVyby4qLworCWlmIChvcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8KKwlpZiAoYWRkciArIGxlbiA8IGFkZHIpCisJCXJldHVybiAtRUZBVUxUOworCisJLyoKKwkgKiBWZXJpZnkgdGhhdCB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgcmVnaW9uIGFjdHVhbGx5IGJlbG9uZ3MKKwkgKiB0byB0aGlzIHByb2Nlc3MuCisJICovCisJdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOworCWlmICh2bWEgPT0gTlVMTCB8fCBhZGRyIDwgdm1hLT52bV9zdGFydCB8fCBhZGRyICsgbGVuID4gdm1hLT52bV9lbmQpCisJCXJldHVybiAtRUZBVUxUOworCisJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICsgbGVuKTsKKworCXJldHVybiAwOworfQorCithc21saW5rYWdlIGludCBzeXNfZ2V0cGFnZXNpemUodm9pZCkKK3sKKwlyZXR1cm4gUEFHRV9TSVpFOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvc3lzY2FsbF90YWJsZS5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvc3lzY2FsbF90YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZTZhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLmMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCBBbHRlcmEgQ29ycG9yYXRpb24gKEMpIDIwMTMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKworI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgorCisjdW5kZWYgX19TWVNDQUxMCisjZGVmaW5lIF9fU1lTQ0FMTChuciwgY2FsbCkgW25yXSA9IChjYWxsKSwKKwordm9pZCAqc3lzX2NhbGxfdGFibGVbX19OUl9zeXNjYWxsc10gPSB7CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIva2VybmVsL3RpbWUuYyBiL2FyY2gvbmlvczIva2VybmVsL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjQ1NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9rZXJuZWwvdGltZS5jCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBBTFRFUkFfVElNRVJfU1RBVFVTX1JFRwkJMAorI2RlZmluZSBBTFRFUkFfVElNRVJfQ09OVFJPTF9SRUcJNAorI2RlZmluZSBBTFRFUkFfVElNRVJfUEVSSU9ETF9SRUcJOAorI2RlZmluZSBBTFRFUkFfVElNRVJfUEVSSU9ESF9SRUcJMTIKKyNkZWZpbmUgQUxURVJBX1RJTUVSX1NOQVBMX1JFRwkJMTYKKyNkZWZpbmUgQUxURVJBX1RJTUVSX1NOQVBIX1JFRwkJMjAKKworI2RlZmluZSBBTFRFUkFfVElNRVJfQ09OVFJPTF9JVE9fTVNLCSgweDEpCisjZGVmaW5lIEFMVEVSQV9USU1FUl9DT05UUk9MX0NPTlRfTVNLCSgweDIpCisjZGVmaW5lIEFMVEVSQV9USU1FUl9DT05UUk9MX1NUQVJUX01TSwkoMHg0KQorI2RlZmluZSBBTFRFUkFfVElNRVJfQ09OVFJPTF9TVE9QX01TSwkoMHg4KQorCitzdHJ1Y3QgbmlvczJfdGltZXIgeworCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1bnNpZ25lZCBsb25nIGZyZXE7Cit9OworCitzdHJ1Y3QgbmlvczJfY2xvY2tldmVudF9kZXYgeworCXN0cnVjdCBuaW9zMl90aW1lciB0aW1lcjsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNlZDsKK307CisKK3N0cnVjdCBuaW9zMl9jbG9ja3NvdXJjZSB7CisJc3RydWN0IG5pb3MyX3RpbWVyIHRpbWVyOworCXN0cnVjdCBjbG9ja3NvdXJjZSBjczsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5pb3MyX2Nsb2NrZXZlbnRfZGV2ICoKKwl0b19uaW9zMl9jbGtldmVudChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihldnQsIHN0cnVjdCBuaW9zMl9jbG9ja2V2ZW50X2RldiwgY2VkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlvczJfY2xvY2tzb3VyY2UgKgorCXRvX25pb3MyX2Nsa3NvdXJjZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXJldHVybiBjb250YWluZXJfb2YoY3MsIHN0cnVjdCBuaW9zMl9jbG9ja3NvdXJjZSwgY3MpOworfQorCitzdGF0aWMgdTE2IHRpbWVyX3JlYWR3KHN0cnVjdCBuaW9zMl90aW1lciAqdGltZXIsIHUzMiBvZmZzKQoreworCXJldHVybiByZWFkdyh0aW1lci0+YmFzZSArIG9mZnMpOworfQorCitzdGF0aWMgdm9pZCB0aW1lcl93cml0ZXcoc3RydWN0IG5pb3MyX3RpbWVyICp0aW1lciwgdTE2IHZhbCwgdTMyIG9mZnMpCit7CisJd3JpdGV3KHZhbCwgdGltZXItPmJhc2UgKyBvZmZzKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfdGltZXJzbmFwc2hvdChzdHJ1Y3QgbmlvczJfdGltZXIgKnRpbWVyKQoreworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisKKwl0aW1lcl93cml0ZXcodGltZXIsIDAsIEFMVEVSQV9USU1FUl9TTkFQTF9SRUcpOworCWNvdW50ID0gdGltZXJfcmVhZHcodGltZXIsIEFMVEVSQV9USU1FUl9TTkFQSF9SRUcpIDw8IDE2IHwKKwkJdGltZXJfcmVhZHcodGltZXIsIEFMVEVSQV9USU1FUl9TTkFQTF9SRUcpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY3ljbGVfdCBuaW9zMl90aW1lcl9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJc3RydWN0IG5pb3MyX2Nsb2Nrc291cmNlICpuaW9zMl9jcyA9IHRvX25pb3MyX2Nsa3NvdXJjZShjcyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgY291bnQ7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY291bnQgPSByZWFkX3RpbWVyc25hcHNob3QoJm5pb3MyX2NzLT50aW1lcik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyogQ291bnRlciBpcyBjb3VudGluZyBkb3duICovCisJcmV0dXJuIH5jb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBuaW9zMl9jbG9ja3NvdXJjZSBuaW9zMl9jcyA9IHsKKwkuY3MgPSB7CisJCS5uYW1lCT0gIm5pb3MyLWNsa3NyYyIsCisJCS5yYXRpbmcJPSAyNTAsCisJCS5yZWFkCT0gbmlvczJfdGltZXJfcmVhZCwKKwkJLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkJLmZsYWdzCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCisJfSwKK307CisKK2N5Y2xlc190IGdldF9jeWNsZXModm9pZCkKK3sKKwlyZXR1cm4gbmlvczJfdGltZXJfcmVhZCgmbmlvczJfY3MuY3MpOworfQorCitzdGF0aWMgdm9pZCBuaW9zMl90aW1lcl9zdGFydChzdHJ1Y3QgbmlvczJfdGltZXIgKnRpbWVyKQoreworCXUxNiBjdHJsOworCisJY3RybCA9IHRpbWVyX3JlYWR3KHRpbWVyLCBBTFRFUkFfVElNRVJfQ09OVFJPTF9SRUcpOworCWN0cmwgfD0gQUxURVJBX1RJTUVSX0NPTlRST0xfU1RBUlRfTVNLOworCXRpbWVyX3dyaXRldyh0aW1lciwgY3RybCwgQUxURVJBX1RJTUVSX0NPTlRST0xfUkVHKTsKK30KKworc3RhdGljIHZvaWQgbmlvczJfdGltZXJfc3RvcChzdHJ1Y3QgbmlvczJfdGltZXIgKnRpbWVyKQoreworCXUxNiBjdHJsOworCisJY3RybCA9IHRpbWVyX3JlYWR3KHRpbWVyLCBBTFRFUkFfVElNRVJfQ09OVFJPTF9SRUcpOworCWN0cmwgfD0gQUxURVJBX1RJTUVSX0NPTlRST0xfU1RPUF9NU0s7CisJdGltZXJfd3JpdGV3KHRpbWVyLCBjdHJsLCBBTFRFUkFfVElNRVJfQ09OVFJPTF9SRUcpOworfQorCitzdGF0aWMgdm9pZCBuaW9zMl90aW1lcl9jb25maWcoc3RydWN0IG5pb3MyX3RpbWVyICp0aW1lciwgdW5zaWduZWQgbG9uZyBwZXJpb2QsCisJZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUpCit7CisJdTE2IGN0cmw7CisKKwkvKiBUaGUgdGltZXIncyBhY3R1YWwgcGVyaW9kIGlzIG9uZSBjeWNsZSBncmVhdGVyIHRoYW4gdGhlIHZhbHVlCisJICogc3RvcmVkIGluIHRoZSBwZXJpb2QgcmVnaXN0ZXIuICovCisJIHBlcmlvZC0tOworCisJY3RybCA9IHRpbWVyX3JlYWR3KHRpbWVyLCBBTFRFUkFfVElNRVJfQ09OVFJPTF9SRUcpOworCS8qIHN0b3AgY291bnRlciAqLworCXRpbWVyX3dyaXRldyh0aW1lciwgY3RybCB8IEFMVEVSQV9USU1FUl9DT05UUk9MX1NUT1BfTVNLLAorCQlBTFRFUkFfVElNRVJfQ09OVFJPTF9SRUcpOworCisJLyogd3JpdGUgbmV3IGNvdW50ICovCisJdGltZXJfd3JpdGV3KHRpbWVyLCBwZXJpb2QsIEFMVEVSQV9USU1FUl9QRVJJT0RMX1JFRyk7CisJdGltZXJfd3JpdGV3KHRpbWVyLCBwZXJpb2QgPj4gMTYsIEFMVEVSQV9USU1FUl9QRVJJT0RIX1JFRyk7CisKKwljdHJsIHw9IEFMVEVSQV9USU1FUl9DT05UUk9MX1NUQVJUX01TSyB8IEFMVEVSQV9USU1FUl9DT05UUk9MX0lUT19NU0s7CisJaWYgKG1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMpCisJCWN0cmwgfD0gQUxURVJBX1RJTUVSX0NPTlRST0xfQ09OVF9NU0s7CisJZWxzZQorCQljdHJsICY9IH5BTFRFUkFfVElNRVJfQ09OVFJPTF9DT05UX01TSzsKKwl0aW1lcl93cml0ZXcodGltZXIsIGN0cmwsIEFMVEVSQV9USU1FUl9DT05UUk9MX1JFRyk7Cit9CisKK3N0YXRpYyBpbnQgbmlvczJfdGltZXJfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJc3RydWN0IG5pb3MyX2Nsb2NrZXZlbnRfZGV2ICpuaW9zMl9jZWQgPSB0b19uaW9zMl9jbGtldmVudChldnQpOworCisJbmlvczJfdGltZXJfY29uZmlnKCZuaW9zMl9jZWQtPnRpbWVyLCBkZWx0YSwgZXZ0LT5tb2RlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuaW9zMl90aW1lcl9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdW5zaWduZWQgbG9uZyBwZXJpb2Q7CisJc3RydWN0IG5pb3MyX2Nsb2NrZXZlbnRfZGV2ICpuaW9zMl9jZWQgPSB0b19uaW9zMl9jbGtldmVudChldnQpOworCXN0cnVjdCBuaW9zMl90aW1lciAqdGltZXIgPSAmbmlvczJfY2VkLT50aW1lcjsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCXBlcmlvZCA9IERJVl9ST1VORF9VUCh0aW1lci0+ZnJlcSwgSFopOworCQluaW9zMl90aW1lcl9jb25maWcodGltZXIsIHBlcmlvZCwgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJbmlvczJfdGltZXJfc3RvcCh0aW1lcik7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQluaW9zMl90aW1lcl9zdGFydCh0aW1lcik7CisJCWJyZWFrOworCX0KK30KKworaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKSBkZXZfaWQ7CisJc3RydWN0IG5pb3MyX2Nsb2NrZXZlbnRfZGV2ICpuaW9zMl9jZWQgPSB0b19uaW9zMl9jbGtldmVudChldnQpOworCisJLyogQ2xlYXIgdGhlIGludGVycnVwdCBjb25kaXRpb24gKi8KKwl0aW1lcl93cml0ZXcoJm5pb3MyX2NlZC0+dGltZXIsIDAsIEFMVEVSQV9USU1FUl9TVEFUVVNfUkVHKTsKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG5pb3MyX3RpbWVyX2dldF9iYXNlX2FuZF9mcmVxKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJdm9pZCBfX2lvbWVtICoqYmFzZSwgdTMyICpmcmVxKQoreworCSpiYXNlID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghKmJhc2UpCisJCXBhbmljKCJVbmFibGUgdG8gbWFwIHJlZyBmb3IgJXNcbiIsIG5wLT5uYW1lKTsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNsb2NrLWZyZXF1ZW5jeSIsIGZyZXEpKQorCQlwYW5pYygiVW5hYmxlIHRvIGdldCAlcyBjbG9jayBmcmVxdWVuY3lcbiIsIG5wLT5uYW1lKTsKK30KKworc3RhdGljIHN0cnVjdCBuaW9zMl9jbG9ja2V2ZW50X2RldiBuaW9zMl9jZSA9IHsKKwkuY2VkID0geworCQkubmFtZSA9ICJuaW9zMi1jbGtldmVudCIsCisJCS5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkJLnJhdGluZyA9IDI1MCwKKwkJLnNoaWZ0ID0gMzIsCisJCS5zZXRfbmV4dF9ldmVudCA9IG5pb3MyX3RpbWVyX3NldF9uZXh0X2V2ZW50LAorCQkuc2V0X21vZGUgPSBuaW9zMl90aW1lcl9zZXRfbW9kZSwKKwl9LAorfTsKKworc3RhdGljIF9faW5pdCB2b2lkIG5pb3MyX2Nsb2NrZXZlbnRfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKnRpbWVyKQoreworCXZvaWQgX19pb21lbSAqaW9iYXNlOworCXUzMiBmcmVxOworCWludCBpcnE7CisKKwluaW9zMl90aW1lcl9nZXRfYmFzZV9hbmRfZnJlcSh0aW1lciwgJmlvYmFzZSwgJmZyZXEpOworCisJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAodGltZXIsIDApOworCWlmICghaXJxKQorCQlwYW5pYygiVW5hYmxlIHRvIHBhcnNlIHRpbWVyIGlycVxuIik7CisKKwluaW9zMl9jZS50aW1lci5iYXNlID0gaW9iYXNlOworCW5pb3MyX2NlLnRpbWVyLmZyZXEgPSBmcmVxOworCisJbmlvczJfY2UuY2VkLmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCW5pb3MyX2NlLmNlZC5pcnEgPSBpcnE7CisKKwluaW9zMl90aW1lcl9zdG9wKCZuaW9zMl9jZS50aW1lcik7CisJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKwl0aW1lcl93cml0ZXcoJm5pb3MyX2NlLnRpbWVyLCAwLCBBTFRFUkFfVElNRVJfU1RBVFVTX1JFRyk7CisKKwlpZiAocmVxdWVzdF9pcnEoaXJxLCB0aW1lcl9pbnRlcnJ1cHQsIElSUUZfVElNRVIsIHRpbWVyLT5uYW1lLAorCQkmbmlvczJfY2UuY2VkKSkKKwkJcGFuaWMoIlVuYWJsZSB0byBzZXR1cCB0aW1lciBpcnFcbiIpOworCisJY2xvY2tldmVudHNfY29uZmlnX2FuZF9yZWdpc3RlcigmbmlvczJfY2UuY2VkLCBmcmVxLCAxLCBVTE9OR19NQVgpOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgbmlvczJfY2xvY2tzb3VyY2VfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKnRpbWVyKQoreworCXVuc2lnbmVkIGludCBjdHJsOworCXZvaWQgX19pb21lbSAqaW9iYXNlOworCXUzMiBmcmVxOworCisJbmlvczJfdGltZXJfZ2V0X2Jhc2VfYW5kX2ZyZXEodGltZXIsICZpb2Jhc2UsICZmcmVxKTsKKworCW5pb3MyX2NzLnRpbWVyLmJhc2UgPSBpb2Jhc2U7CisJbmlvczJfY3MudGltZXIuZnJlcSA9IGZyZXE7CisKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmbmlvczJfY3MuY3MsIGZyZXEpOworCisJdGltZXJfd3JpdGV3KCZuaW9zMl9jcy50aW1lciwgVVNIUlRfTUFYLCBBTFRFUkFfVElNRVJfUEVSSU9ETF9SRUcpOworCXRpbWVyX3dyaXRldygmbmlvczJfY3MudGltZXIsIFVTSFJUX01BWCwgQUxURVJBX1RJTUVSX1BFUklPREhfUkVHKTsKKworCS8qIGludGVycnVwdCBkaXNhYmxlICsgY29udGludW91cyArIHN0YXJ0ICovCisJY3RybCA9IEFMVEVSQV9USU1FUl9DT05UUk9MX0NPTlRfTVNLIHwgQUxURVJBX1RJTUVSX0NPTlRST0xfU1RBUlRfTVNLOworCXRpbWVyX3dyaXRldygmbmlvczJfY3MudGltZXIsIGN0cmwsIEFMVEVSQV9USU1FUl9DT05UUk9MX1JFRyk7CisKKwkvKiBDYWxpYnJhdGUgdGhlIGRlbGF5IGxvb3AgZGlyZWN0bHkgKi8KKwlscGpfZmluZSA9IGZyZXEgLyBIWjsKK30KKworLyoKKyAqIFRoZSBmaXJzdCB0aW1lciBpbnN0YW5jZSB3aWxsIHVzZSBhcyBhIGNsb2NrZXZlbnQuIElmIHRoZXJlIGFyZSB0d28gb3IKKyAqIG1vcmUgaW5zdGFuY2VzLCB0aGUgc2Vjb25kIG9uZSBnZXRzIHVzZWQgYXMgY2xvY2tzb3VyY2UgYW5kIGFsbAorICogb3RoZXJzIGFyZSB1bnVzZWQuCisqLworc3RhdGljIHZvaWQgX19pbml0IG5pb3MyX3RpbWVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKnRpbWVyKQoreworCXN0YXRpYyBpbnQgbnVtX2NhbGxlZDsKKworCXN3aXRjaCAobnVtX2NhbGxlZCkgeworCWNhc2UgMDoKKwkJbmlvczJfY2xvY2tldmVudF9pbml0KHRpbWVyKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQluaW9zMl9jbG9ja3NvdXJjZV9pbml0KHRpbWVyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbnVtX2NhbGxlZCsrOworfQorCit2b2lkIHJlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCXRzLT50dl9zZWMgPSBta3RpbWUoMjAwNywgMSwgMSwgMCwgMCwgMCk7CisJdHMtPnR2X25zZWMgPSAwOworfQorCit2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKK3sKKwljbG9ja3NvdXJjZV9vZl9pbml0KCk7Cit9CisKK0NMT0NLU09VUkNFX09GX0RFQ0xBUkUobmlvczJfdGltZXIsICJhbHRyLHRpbWVyLTEuMCIsIG5pb3MyX3RpbWVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9uaW9zMi9rZXJuZWwvdHJhcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2I5NzY0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3RyYXBzLmMKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBIYXJkd2FyZSBleGNlcHRpb24gaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVmljIFBoaWxsaXBzCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRpZV9sb2NrKTsKKwordm9pZCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpCit7CisJY29uc29sZV92ZXJib3NlKCk7CisJc3Bpbl9sb2NrX2lycSgmZGllX2xvY2spOworCXByX3dhcm4oIk9vcHM6ICVzLCBzaWc6ICVsZFxuIiwgc3RyLCBlcnIpOworCXNob3dfcmVncyhyZWdzKTsKKwlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKKwkvKgorCSAqIGRvX2V4aXQoKSBzaG91bGQgdGFrZSBjYXJlIG9mIHBhbmljJ2luZyBmcm9tIGFuIGludGVycnVwdAorCSAqIGNvbnRleHQgc28gd2UgZG9uJ3QgaGFuZGxlIGl0IGhlcmUKKwkgKi8KKwlkb19leGl0KGVycik7Cit9CisKK3ZvaWQgX2V4Y2VwdGlvbihpbnQgc2lnbm8sIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXNpZ2luZm9fdCBpbmZvOworCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCWRpZSgiRXhjZXB0aW9uIGluIGtlcm5lbCBtb2RlIiwgcmVncywgc2lnbm8pOworCisJaW5mby5zaV9zaWdubyA9IHNpZ25vOworCWluZm8uc2lfZXJybm8gPSAwOworCWluZm8uc2lfY29kZSA9IGNvZGU7CisJaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopIGFkZHI7CisJZm9yY2Vfc2lnX2luZm8oc2lnbm8sICZpbmZvLCBjdXJyZW50KTsKK30KKworLyoKKyAqIFRoZSBzaG93X3N0YWNrIGlzIGFuIGV4dGVybmFsIEFQSSB3aGljaCB3ZSBkbyBub3QgdXNlIG91cnNlbHZlcy4KKyAqLworCitpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gNDg7CisKK3ZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnN0YWNrKQoreworCXVuc2lnbmVkIGxvbmcgKmVuZHN0YWNrLCBhZGRyOworCWludCBpOworCisJaWYgKCFzdGFjaykgeworCQlpZiAodGFzaykKKwkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQua3NwOworCQllbHNlCisJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopJnN0YWNrOworCX0KKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgc3RhY2s7CisJZW5kc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSBQQUdFX0FMSUdOKGFkZHIpOworCisJcHJfZW1lcmcoIlN0YWNrIGZyb20gJTA4bHg6IiwgKHVuc2lnbmVkIGxvbmcpc3RhY2spOworCWZvciAoaSA9IDA7IGkgPCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7IGkrKykgeworCQlpZiAoc3RhY2sgKyAxID4gZW5kc3RhY2spCisJCQlicmVhazsKKwkJaWYgKGkgJSA4ID09IDApCisJCQlwcl9lbWVyZygiXG4gICAgICAgIik7CisJCXByX2VtZXJnKCIgJTA4bHgiLCAqc3RhY2srKyk7CisJfQorCisJcHJfZW1lcmcoIlxuQ2FsbCBUcmFjZToiKTsKKwlpID0gMDsKKwl3aGlsZSAoc3RhY2sgKyAxIDw9IGVuZHN0YWNrKSB7CisJCWFkZHIgPSAqc3RhY2srKzsKKwkJLyoKKwkJICogSWYgdGhlIGFkZHJlc3MgaXMgZWl0aGVyIGluIHRoZSB0ZXh0IHNlZ21lbnQgb2YgdGhlCisJCSAqIGtlcm5lbCwgb3IgaW4gdGhlIHJlZ2lvbiB3aGljaCBjb250YWlucyB2bWFsbG9jJ2VkCisJCSAqIG1lbW9yeSwgaXQgKm1heSogYmUgdGhlIGFkZHJlc3Mgb2YgYSBjYWxsaW5nCisJCSAqIHJvdXRpbmU7IGlmIHNvLCBwcmludCBpdCBzbyB0aGF0IHNvbWVvbmUgdHJhY2luZworCQkgKiBkb3duIHRoZSBjYXVzZSBvZiB0aGUgY3Jhc2ggd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZQorCQkgKiBvdXQgdGhlIGNhbGwgcGF0aCB0aGF0IHdhcyB0YWtlbi4KKwkJICovCisJCWlmICgoKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpIF9zdGV4dCkgJiYKKwkJICAgICAoYWRkciA8PSAodW5zaWduZWQgbG9uZykgX2V0ZXh0KSkpIHsKKwkJCWlmIChpICUgNCA9PSAwKQorCQkJCXByX2VtZXJnKCJcbiAgICAgICAiKTsKKwkJCXByX2VtZXJnKCIgWzwlMDhseD5dIiwgYWRkcik7CisJCQlpKys7CisJCX0KKwl9CisJcHJfZW1lcmcoIlxuIik7Cit9CisKK3ZvaWQgX19pbml0IHRyYXBfaW5pdCh2b2lkKQoreworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLworfQorCisvKiBCcmVha3BvaW50IGhhbmRsZXIgKi8KK2FzbWxpbmthZ2Ugdm9pZCBicmVha3BvaW50X2Moc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCS8qCisJICogVGhlIGJyZWFrcG9pbnQgZW50cnkgY29kZSBoYXMgbW92ZWQgdGhlIFBDIG9uIGJ5IDQgYnl0ZXMsIHNvIHdlIG11c3QKKwkgKiBtb3ZlIGl0IGJhY2suIFRoaXMgY291bGQgYmUgZG9uZSBvbiB0aGUgaG9zdCBidXQgd2UgZG8gaXQgaGVyZQorCSAqIGJlY2F1c2UgbW9uaXRvci5TIG9mIEpUQUcgZ2Ric2VydmVyIGRvZXMgaXQgdG9vLgorCSAqLworCWZwLT5lYSAtPSA0OworCV9leGNlcHRpb24oU0lHVFJBUCwgZnAsIFRSQVBfQlJLUFQsIGZwLT5lYSk7Cit9CisKKyNpZm5kZWYgQ09ORklHX05JT1MyX0FMSUdOTUVOVF9UUkFQCisvKiBBbGlnbm1lbnQgZXhjZXB0aW9uIGhhbmRsZXIgKi8KK2FzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfdW5hbGlnbmVkX2Moc3RydWN0IHB0X3JlZ3MgKmZwLCBpbnQgY2F1c2UpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gUkRDVEwoQ1RMX0JBREFERFIpOworCisJY2F1c2UgPj49IDI7CisJZnAtPmVhIC09IDQ7CisKKwlpZiAoZml4dXBfZXhjZXB0aW9uKGZwKSkKKwkJcmV0dXJuOworCisJaWYgKCF1c2VyX21vZGUoZnApKSB7CisJCXByX2FsZXJ0KCJVbmFsaWduZWQgYWNjZXNzIGZyb20ga2VybmVsIG1vZGUsIHRoaXMgbWlnaHQgYmUgYSBoYXJkd2FyZVxuIik7CisJCXByX2FsZXJ0KCJwcm9ibGVtLCBkdW1wIHJlZ2lzdGVycyBhbmQgcmVzdGFydCB0aGUgaW5zdHJ1Y3Rpb25cbiIpOworCQlwcl9hbGVydCgiICBCQURBRERSIDB4JTA4bHhcbiIsIGFkZHIpOworCQlwcl9hbGVydCgiICBjYXVzZSAgICVkXG4iLCBjYXVzZSk7CisJCXByX2FsZXJ0KCIgIG9wLWNvZGUgMHglMDhseFxuIiwgKih1bnNpZ25lZCBsb25nICopKGZwLT5lYSkpOworCQlzaG93X3JlZ3MoZnApOworCQlyZXR1cm47CisJfQorCisJX2V4Y2VwdGlvbihTSUdCVVMsIGZwLCBCVVNfQURSQUxOLCBhZGRyKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfTklPUzJfQUxJR05NRU5UX1RSQVAgKi8KKworLyogSWxsZWdhbCBpbnN0cnVjdGlvbiBoYW5kbGVyICovCithc21saW5rYWdlIHZvaWQgaGFuZGxlX2lsbGVnYWxfYyhzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJZnAtPmVhIC09IDQ7CisJX2V4Y2VwdGlvbihTSUdJTEwsIGZwLCBJTExfSUxMT1BDLCBmcC0+ZWEpOworfQorCisvKiBTdXBlcnZpc29yIGluc3RydWN0aW9uIGhhbmRsZXIgKi8KK2FzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfc3VwZXJ2aXNvcl9pbnN0cihzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJZnAtPmVhIC09IDQ7CisJX2V4Y2VwdGlvbihTSUdJTEwsIGZwLCBJTExfUFJWT1BDLCBmcC0+ZWEpOworfQorCisvKiBEaXZpc2lvbiBlcnJvciBoYW5kbGVyICovCithc21saW5rYWdlIHZvaWQgaGFuZGxlX2RpdmVycm9yX2Moc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWZwLT5lYSAtPSA0OworCV9leGNlcHRpb24oU0lHRlBFLCBmcCwgRlBFX0lOVERJViwgZnAtPmVhKTsKK30KKworLyogVW5oYW5kbGVkIGV4Y2VwdGlvbiBoYW5kbGVyICovCithc21saW5rYWdlIHZvaWQgdW5oYW5kbGVkX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNhdXNlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IFJEQ1RMKENUTF9CQURBRERSKTsKKworCWNhdXNlIC89IDQ7CisKKwlwcl9lbWVyZygiVW5oYW5kbGVkIGV4Y2VwdGlvbiAjJWQgaW4gJXMgbW9kZSAoYmFkYWRkcj0weCUwOGx4KVxuIiwKKwkJCWNhdXNlLCB1c2VyX21vZGUocmVncykgPyAidXNlciIgOiAia2VybmVsIiwgYWRkcik7CisKKwlyZWdzLT5lYSAtPSA0OworCXNob3dfcmVncyhyZWdzKTsKKworCXByX2VtZXJnKCJvcGNvZGU6IDB4JTA4bHhcbiIsICoodW5zaWduZWQgbG9uZyAqKShyZWdzLT5lYSkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbmlvczIva2VybmVsL3ZtbGludXgubGRzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2ZmFiNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaG9tYXMgQ2hvdSA8dGhvbWFzQHd5dHJvbi5jb20udHc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZW5pb3MyIiwgImVsZjMyLWxpdHRsZW5pb3MyIiwgImVsZjMyLWxpdHRsZW5pb3MyIikKKworT1VUUFVUX0FSQ0gobmlvcykKK0VOVFJZKF9zdGFydCkJLyogRGVmaW5lZCBpbiBoZWFkLlMgKi8KKworamlmZmllcyA9IGppZmZpZXNfNjQ7CisKK1NFQ1RJT05TCit7CisJLiA9IENPTkZJR19OSU9TMl9NRU1fQkFTRSB8IENPTkZJR19OSU9TMl9LRVJORUxfUkVHSU9OX0JBU0U7CisKKwlfdGV4dCA9IC47CisJX3N0ZXh0ID0gLjsKKwlIRUFEX1RFWFRfU0VDVElPTgorCS50ZXh0IDogeworCQlURVhUX1RFWFQKKwkJU0NIRURfVEVYVAorCQlMT0NLX1RFWFQKKwkJSVJRRU5UUllfVEVYVAorCQlLUFJPQkVTX1RFWFQKKwl9ID0wCisJX2V0ZXh0ID0gLjsKKworCS5nb3QgOiB7CisJCSooLmdvdC5wbHQpCisJCSooLmlnb3QucGx0KQorCQkqKC5nb3QpCisJCSooLmlnb3QpCisJfQorCisJRVhDRVBUSU9OX1RBQkxFKEwxX0NBQ0hFX0JZVEVTKQorCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJX19pbml0X2JlZ2luID0gLjsKKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCisJSU5JVF9EQVRBX1NFQ1RJT04oUEFHRV9TSVpFKQorCVBFUkNQVV9TRUNUSU9OKEwxX0NBQ0hFX0JZVEVTKQorCV9faW5pdF9lbmQgPSAuOworCisJX3NkYXRhID0gLjsKKwlST19EQVRBX1NFQ1RJT04oUEFHRV9TSVpFKQorCVJXX0RBVEFfU0VDVElPTihMMV9DQUNIRV9CWVRFUywgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKKwlfZWRhdGEgPSAuOworCisJQlNTX1NFQ1RJT04oMCwgMCwgMCkKKwlfZW5kID0gLjsKKworCVNUQUJTX0RFQlVHCisJRFdBUkZfREVCVUcKKwlOT1RFUworCisJRElTQ0FSRFMKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbGliL01ha2VmaWxlIGIvYXJjaC9uaW9zMi9saWIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3MjU2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbGliL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgTmlvczItc3BlY2lmaWMgbGlicmFyeSBmaWxlcy4KKyMKKworbGliLXkgKz0gZGVsYXkubworbGliLXkgKz0gbWVtY3B5Lm8KK2xpYi15ICs9IG1lbW1vdmUubworbGliLXkgKz0gbWVtc2V0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbGliL2RlbGF5LmMgYi9hcmNoL25pb3MyL2xpYi9kZWxheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ODExOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2xpYi9kZWxheS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qIENvcHlyaWdodCBBbHRlcmEgQ29ycG9yYXRpb24gKEMpIDIwMTQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS90aW1leC5oPgorCit2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBjeWNsZXMpCit7CisJY3ljbGVzX3Qgc3RhcnQgPSBnZXRfY3ljbGVzKCk7CisKKwl3aGlsZSAoKGdldF9jeWNsZXMoKSAtIHN0YXJ0KSA8IGN5Y2xlcykKKwkJY3B1X3JlbGF4KCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fZGVsYXkpOworCit2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcgeGxvb3BzKQoreworCXU2NCBsb29wczsKKworCWxvb3BzID0gKHU2NCl4bG9vcHMgKiBsb29wc19wZXJfamlmZnkgKiBIWjsKKworCV9fZGVsYXkobG9vcHMgPj4gMzIpOworfQorRVhQT1JUX1NZTUJPTChfX2NvbnN0X3VkZWxheSk7CisKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjcykKK3sKKwlfX2NvbnN0X3VkZWxheSh1c2VjcyAqIDB4MTBDN1VMKTsgLyogMioqMzIgLyAxMDAwMDAwIChyb3VuZGVkIHVwKSAqLworfQorRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7CisKK3ZvaWQgX19uZGVsYXkodW5zaWduZWQgbG9uZyBuc2VjcykKK3sKKwlfX2NvbnN0X3VkZWxheShuc2VjcyAqIDB4NVVMKTsgLyogMioqMzIgLyAxMDAwMDAwMDAwIChyb3VuZGVkIHVwKSAqLworfQorRVhQT1JUX1NZTUJPTChfX25kZWxheSk7CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2xpYi9tZW1jcHkuYyBiL2FyY2gvbmlvczIvbGliL21lbWNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTVmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2xpYi9tZW1jcHkuYwpAQCAtMCwwICsxLDIwMiBAQAorLyogRXh0cmFjdGVkIGZyb20gR0xJQkMgbWVtY3B5LmMgYW5kIG1lbWNvcHkuaCwgd2hpY2ggaXM6CisgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTcsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IFRvcmJqb3JuIEdyYW5sdW5kICh0ZWdlQHNpY3Muc2UpLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBUeXBlIHRvIHVzZSBmb3IgYWxpZ25lZCBtZW1vcnkgb3BlcmF0aW9ucy4KKyAgIFRoaXMgc2hvdWxkIG5vcm1hbGx5IGJlIHRoZSBiaWdnZXN0IHR5cGUgc3VwcG9ydGVkIGJ5IGEgc2luZ2xlIGxvYWQKKyAgIGFuZCBzdG9yZS4gICovCisjZGVmaW5lCW9wX3QJdW5zaWduZWQgbG9uZyBpbnQKKyNkZWZpbmUgT1BTSVoJKHNpemVvZihvcF90KSkKKworLyogT3B0aW1hbCB0eXBlIGZvciBzdG9yaW5nIGJ5dGVzIGluIHJlZ2lzdGVycy4gICovCisjZGVmaW5lCXJlZ19jaGFyCWNoYXIKKworI2RlZmluZSBNRVJHRSh3MCwgc2hfMSwgdzEsIHNoXzIpICgoKHcwKSA+PiAoc2hfMSkpIHwgKCh3MSkgPDwgKHNoXzIpKSkKKworLyogQ29weSBleGFjdGx5IE5CWVRFUyBieXRlcyBmcm9tIFNSQ19CUCB0byBEU1RfQlAsCisgICB3aXRob3V0IGFueSBhc3N1bXB0aW9ucyBhYm91dCBhbGlnbm1lbnQgb2YgdGhlIHBvaW50ZXJzLiAgKi8KKyNkZWZpbmUgQllURV9DT1BZX0ZXRChkc3RfYnAsIHNyY19icCwgbmJ5dGVzKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXNpemVfdCBfX25ieXRlcyA9IChuYnl0ZXMpOwkJCQkJXAorCXdoaWxlIChfX25ieXRlcyA+IDApIHsJCQkJCQlcCisJCXVuc2lnbmVkIGNoYXIgX194ID0gKCh1bnNpZ25lZCBjaGFyICopIHNyY19icClbMF07CVwKKwkJc3JjX2JwICs9IDE7CQkJCQkJXAorCQlfX25ieXRlcyAtPSAxOwkJCQkJCVwKKwkJKCh1bnNpZ25lZCBjaGFyICopIGRzdF9icClbMF0gPSBfX3g7CQkJXAorCQlkc3RfYnAgKz0gMTsJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogQ29weSAqdXAgdG8qIE5CWVRFUyBieXRlcyBmcm9tIFNSQ19CUCB0byBEU1RfQlAsIHdpdGgKKyAgIHRoZSBhc3N1bXB0aW9uIHRoYXQgRFNUX0JQIGlzIGFsaWduZWQgb24gYW4gT1BTSVogbXVsdGlwbGUuICBJZgorICAgbm90IGFsbCBieXRlcyBjb3VsZCBiZSBlYXNpbHkgY29waWVkLCBzdG9yZSByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzCisgICBpbiBOQllURVNfTEVGVCwgb3RoZXJ3aXNlIHN0b3JlIDAuICAqLworLyogZXh0ZXJuIHZvaWQgX3dvcmRjb3B5X2Z3ZF9hbGlnbmVkIF9fUCAoKGxvbmcgaW50LCBsb25nIGludCwgc2l6ZV90KSk7ICovCisvKiBleHRlcm4gdm9pZCBfd29yZGNvcHlfZndkX2Rlc3RfYWxpZ25lZCBfX1AgKChsb25nIGludCwgbG9uZyBpbnQsIHNpemVfdCkpOyAqLworI2RlZmluZSBXT1JEX0NPUFlfRldEKGRzdF9icCwgc3JjX2JwLCBuYnl0ZXNfbGVmdCwgbmJ5dGVzKQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoc3JjX2JwICUgT1BTSVogPT0gMCkJCQkJCVwKKwkJX3dvcmRjb3B5X2Z3ZF9hbGlnbmVkKGRzdF9icCwgc3JjX2JwLCAobmJ5dGVzKSAvIE9QU0laKTtcCisJZWxzZQkJCQkJCQkJXAorCQlfd29yZGNvcHlfZndkX2Rlc3RfYWxpZ25lZChkc3RfYnAsIHNyY19icCwgKG5ieXRlcykgLyBPUFNJWik7XAorCXNyY19icCArPSAobmJ5dGVzKSAmIC1PUFNJWjsJCQkJCVwKKwlkc3RfYnAgKz0gKG5ieXRlcykgJiAtT1BTSVo7CQkJCQlcCisJKG5ieXRlc19sZWZ0KSA9IChuYnl0ZXMpICUgT1BTSVo7CQkJCVwKK30gd2hpbGUgKDApCisKKworLyogVGhyZXNob2xkIHZhbHVlIGZvciB3aGVuIHRvIGVudGVyIHRoZSB1bnJvbGxlZCBsb29wcy4gICovCisjZGVmaW5lCU9QX1RfVEhSRVMJMTYKKworLyogX3dvcmRjb3B5X2Z3ZF9hbGlnbmVkIC0tIENvcHkgYmxvY2sgYmVnaW5uaW5nIGF0IFNSQ1AgdG8KKyAgIGJsb2NrIGJlZ2lubmluZyBhdCBEU1RQIHdpdGggTEVOIGBvcF90JyB3b3JkcyAobm90IExFTiBieXRlcyEpLgorICAgQm90aCBTUkNQIGFuZCBEU1RQIHNob3VsZCBiZSBhbGlnbmVkIGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBgb3BfdCdzLiAgKi8KKy8qIHN0cmVhbS1saW5lZCAocmVhZCB4OCArIHdyaXRlIHg4KSAqLworc3RhdGljIHZvaWQgX3dvcmRjb3B5X2Z3ZF9hbGlnbmVkKGxvbmcgaW50IGRzdHAsIGxvbmcgaW50IHNyY3AsIHNpemVfdCBsZW4pCit7CisJd2hpbGUgKGxlbiA+IDcpIHsKKwkJcmVnaXN0ZXIgb3BfdCBhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTc7CisKKwkJYTAgPSAoKG9wX3QgKikgc3JjcClbMF07CisJCWExID0gKChvcF90ICopIHNyY3ApWzFdOworCQlhMiA9ICgob3BfdCAqKSBzcmNwKVsyXTsKKwkJYTMgPSAoKG9wX3QgKikgc3JjcClbM107CisJCWE0ID0gKChvcF90ICopIHNyY3ApWzRdOworCQlhNSA9ICgob3BfdCAqKSBzcmNwKVs1XTsKKwkJYTYgPSAoKG9wX3QgKikgc3JjcClbNl07CisJCWE3ID0gKChvcF90ICopIHNyY3ApWzddOworCQkoKG9wX3QgKikgZHN0cClbMF0gPSBhMDsKKwkJKChvcF90ICopIGRzdHApWzFdID0gYTE7CisJCSgob3BfdCAqKSBkc3RwKVsyXSA9IGEyOworCQkoKG9wX3QgKikgZHN0cClbM10gPSBhMzsKKwkJKChvcF90ICopIGRzdHApWzRdID0gYTQ7CisJCSgob3BfdCAqKSBkc3RwKVs1XSA9IGE1OworCQkoKG9wX3QgKikgZHN0cClbNl0gPSBhNjsKKwkJKChvcF90ICopIGRzdHApWzddID0gYTc7CisKKwkJc3JjcCArPSA4ICogT1BTSVo7CisJCWRzdHAgKz0gOCAqIE9QU0laOworCQlsZW4gLT0gODsKKwl9CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJKihvcF90ICopZHN0cCA9ICoob3BfdCAqKXNyY3A7CisKKwkJc3JjcCArPSBPUFNJWjsKKwkJZHN0cCArPSBPUFNJWjsKKwkJbGVuIC09IDE7CisJfQorfQorCisvKiBfd29yZGNvcHlfZndkX2Rlc3RfYWxpZ25lZCAtLSBDb3B5IGJsb2NrIGJlZ2lubmluZyBhdCBTUkNQIHRvCisgICBibG9jayBiZWdpbm5pbmcgYXQgRFNUUCB3aXRoIExFTiBgb3BfdCcgd29yZHMgKG5vdCBMRU4gYnl0ZXMhKS4KKyAgIERTVFAgc2hvdWxkIGJlIGFsaWduZWQgZm9yIG1lbW9yeSBvcGVyYXRpb25zIG9uIGBvcF90J3MsIGJ1dCBTUkNQIG11c3QKKyAgICpub3QqIGJlIGFsaWduZWQuICAqLworLyogc3RyZWFtLWxpbmVkIChyZWFkIHg0ICsgd3JpdGUgeDQpICovCitzdGF0aWMgdm9pZCBfd29yZGNvcHlfZndkX2Rlc3RfYWxpZ25lZChsb25nIGludCBkc3RwLCBsb25nIGludCBzcmNwLAorCQkJCQlzaXplX3QgbGVuKQoreworCW9wX3QgYXA7CisJaW50IHNoXzEsIHNoXzI7CisKKwkvKiBDYWxjdWxhdGUgaG93IHRvIHNoaWZ0IGEgd29yZCByZWFkIGF0IHRoZSBtZW1vcnkgb3BlcmF0aW9uCisJYWxpZ25lZCBzcmNwIHRvIG1ha2UgaXQgYWxpZ25lZCBmb3IgY29weS4gKi8KKworCXNoXzEgPSA4ICogKHNyY3AgJSBPUFNJWik7CisJc2hfMiA9IDggKiBPUFNJWiAtIHNoXzE7CisKKwkvKiBNYWtlIFNSQ1AgYWxpZ25lZCBieSByb3VuZGluZyBpdCBkb3duIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGBvcF90JworCWl0IHBvaW50cyBpbiB0aGUgbWlkZGxlIG9mLiAqLworCXNyY3AgJj0gLU9QU0laOworCWFwID0gKChvcF90ICopIHNyY3ApWzBdOworCXNyY3AgKz0gT1BTSVo7CisKKwl3aGlsZSAobGVuID4gMykgeworCQlvcF90IGEwLCBhMSwgYTIsIGEzOworCisJCWEwID0gKChvcF90ICopIHNyY3ApWzBdOworCQlhMSA9ICgob3BfdCAqKSBzcmNwKVsxXTsKKwkJYTIgPSAoKG9wX3QgKikgc3JjcClbMl07CisJCWEzID0gKChvcF90ICopIHNyY3ApWzNdOworCQkoKG9wX3QgKikgZHN0cClbMF0gPSBNRVJHRShhcCwgc2hfMSwgYTAsIHNoXzIpOworCQkoKG9wX3QgKikgZHN0cClbMV0gPSBNRVJHRShhMCwgc2hfMSwgYTEsIHNoXzIpOworCQkoKG9wX3QgKikgZHN0cClbMl0gPSBNRVJHRShhMSwgc2hfMSwgYTIsIHNoXzIpOworCQkoKG9wX3QgKikgZHN0cClbM10gPSBNRVJHRShhMiwgc2hfMSwgYTMsIHNoXzIpOworCisJCWFwID0gYTM7CisJCXNyY3AgKz0gNCAqIE9QU0laOworCQlkc3RwICs9IDQgKiBPUFNJWjsKKwkJbGVuIC09IDQ7CisJfQorCXdoaWxlIChsZW4gPiAwKSB7CisJCXJlZ2lzdGVyIG9wX3QgYTA7CisKKwkJYTAgPSAoKG9wX3QgKikgc3JjcClbMF07CisJCSgob3BfdCAqKSBkc3RwKVswXSA9IE1FUkdFKGFwLCBzaF8xLCBhMCwgc2hfMik7CisKKwkJYXAgPSBhMDsKKwkJc3JjcCArPSBPUFNJWjsKKwkJZHN0cCArPSBPUFNJWjsKKwkJbGVuIC09IDE7CisJfQorfQorCit2b2lkICptZW1jcHkodm9pZCAqZHN0cHAsIGNvbnN0IHZvaWQgKnNyY3BwLCBzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgaW50IGRzdHAgPSAobG9uZyBpbnQpIGRzdHBwOworCXVuc2lnbmVkIGxvbmcgaW50IHNyY3AgPSAobG9uZyBpbnQpIHNyY3BwOworCisJLyogQ29weSBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gdGhlIGVuZC4gICovCisKKwkvKiBJZiB0aGVyZSBub3QgdG9vIGZldyBieXRlcyB0byBjb3B5LCB1c2Ugd29yZCBjb3B5LiAgKi8KKwlpZiAobGVuID49IE9QX1RfVEhSRVMpIHsKKwkJLyogQ29weSBqdXN0IGEgZmV3IGJ5dGVzIHRvIG1ha2UgRFNUUCBhbGlnbmVkLiAgKi8KKwkJbGVuIC09ICgtZHN0cCkgJSBPUFNJWjsKKwkJQllURV9DT1BZX0ZXRChkc3RwLCBzcmNwLCAoLWRzdHApICUgT1BTSVopOworCisJCS8qIENvcHkgd2hvbGUgcGFnZXMgZnJvbSBTUkNQIHRvIERTVFAgYnkgdmlydHVhbCBhZGRyZXNzCisJCSAgIG1hbmlwdWxhdGlvbiwgYXMgbXVjaCBhcyBwb3NzaWJsZS4gICovCisKKwkJLyogUEFHRV9DT1BZX0ZXRF9NQVlCRSAoZHN0cCwgc3JjcCwgbGVuLCBsZW4pOyAqLworCisJCS8qIENvcHkgZnJvbSBTUkNQIHRvIERTVFAgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUga25vd24KKwkJICAgYWxpZ25tZW50IG9mIERTVFAuIE51bWJlciBvZiBieXRlcyByZW1haW5pbmcgaXMgcHV0IGluIHRoZQorCQkgICB0aGlyZCBhcmd1bWVudCwgaS5lLiBpbiBMRU4uICBUaGlzIG51bWJlciBtYXkgdmFyeSBmcm9tCisJCSAgIG1hY2hpbmUgdG8gbWFjaGluZS4gKi8KKworCQlXT1JEX0NPUFlfRldEKGRzdHAsIHNyY3AsIGxlbiwgbGVuKTsKKworCQkvKiBGYWxsIG91dCBhbmQgY29weSB0aGUgdGFpbC4gKi8KKwl9CisKKwkvKiBUaGVyZSBhcmUganVzdCBhIGZldyBieXRlcyB0byBjb3B5LiAgVXNlIGJ5dGUgbWVtb3J5IG9wZXJhdGlvbnMuICovCisJQllURV9DT1BZX0ZXRChkc3RwLCBzcmNwLCBsZW4pOworCisJcmV0dXJuIGRzdHBwOworfQorCit2b2lkICptZW1jcHliKHZvaWQgKmRzdHBwLCBjb25zdCB2b2lkICpzcmNwcCwgdW5zaWduZWQgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgaW50IGRzdHAgPSAobG9uZyBpbnQpIGRzdHBwOworCXVuc2lnbmVkIGxvbmcgaW50IHNyY3AgPSAobG9uZyBpbnQpIHNyY3BwOworCisJQllURV9DT1BZX0ZXRChkc3RwLCBzcmNwLCBsZW4pOworCisJcmV0dXJuIGRzdHBwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9saWIvbWVtbW92ZS5jIGIvYXJjaC9uaW9zMi9saWIvbWVtbW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NWVmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL2xpYi9tZW1tb3ZlLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaWZkZWYgX19IQVZFX0FSQ0hfTUVNTU9WRQordm9pZCAqbWVtbW92ZSh2b2lkICpkLCBjb25zdCB2b2lkICpzLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBkc3QsIHNyYzsKKworCWlmICghY291bnQpCisJCXJldHVybiBkOworCisJaWYgKGQgPCBzKSB7CisJCWRzdCA9ICh1bnNpZ25lZCBsb25nKSBkOworCQlzcmMgPSAodW5zaWduZWQgbG9uZykgczsKKworCQlpZiAoKGNvdW50IDwgOCkgfHwgKChkc3QgXiBzcmMpICYgMykpCisJCQlnb3RvIHJlc3R1cDsKKworCQlpZiAoZHN0ICYgMSkgeworCQkJKihjaGFyICopZHN0KysgPSAqKGNoYXIgKilzcmMrKzsKKwkJCWNvdW50LS07CisJCX0KKwkJaWYgKGRzdCAmIDIpIHsKKwkJCSooc2hvcnQgKilkc3QgPSAqKHNob3J0ICopc3JjOworCQkJc3JjICs9IDI7CisJCQlkc3QgKz0gMjsKKwkJCWNvdW50IC09IDI7CisJCX0KKwkJd2hpbGUgKGNvdW50ID4gMykgeworCQkJKihsb25nICopZHN0ID0gKihsb25nICopc3JjOworCQkJc3JjICs9IDQ7CisJCQlkc3QgKz0gNDsKKwkJCWNvdW50IC09IDQ7CisJCX0KK3Jlc3R1cDoKKwkJd2hpbGUgKGNvdW50LS0pCisJCQkqKGNoYXIgKilkc3QrKyA9ICooY2hhciAqKXNyYysrOworCX0gZWxzZSB7CisJCWRzdCA9ICh1bnNpZ25lZCBsb25nKSBkICsgY291bnQ7CisJCXNyYyA9ICh1bnNpZ25lZCBsb25nKSBzICsgY291bnQ7CisKKwkJaWYgKChjb3VudCA8IDgpIHx8ICgoZHN0IF4gc3JjKSAmIDMpKQorCQkJZ290byByZXN0ZG93bjsKKworCQlpZiAoZHN0ICYgMSkgeworCQkJc3JjLS07CisJCQlkc3QtLTsKKwkJCWNvdW50LS07CisJCQkqKGNoYXIgKilkc3QgPSAqKGNoYXIgKilzcmM7CisJCX0KKwkJaWYgKGRzdCAmIDIpIHsKKwkJCXNyYyAtPSAyOworCQkJZHN0IC09IDI7CisJCQljb3VudCAtPSAyOworCQkJKihzaG9ydCAqKWRzdCA9ICooc2hvcnQgKilzcmM7CisJCX0KKwkJd2hpbGUgKGNvdW50ID4gMykgeworCQkJc3JjIC09IDQ7CisJCQlkc3QgLT0gNDsKKwkJCWNvdW50IC09IDQ7CisJCQkqKGxvbmcgKilkc3QgPSAqKGxvbmcgKilzcmM7CisJCX0KK3Jlc3Rkb3duOgorCQl3aGlsZSAoY291bnQtLSkgeworCQkJc3JjLS07CisJCQlkc3QtLTsKKwkJCSooY2hhciAqKWRzdCA9ICooY2hhciAqKXNyYzsKKwkJfQorCX0KKworCXJldHVybiBkOworfQorI2VuZGlmIC8qIF9fSEFWRV9BUkNIX01FTU1PVkUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbGliL21lbXNldC5jIGIvYXJjaC9uaW9zMi9saWIvbWVtc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlOTc4MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbGliL21lbXNldC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2lmZGVmIF9fSEFWRV9BUkNIX01FTVNFVAordm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3QgY291bnQpCit7CisJaW50IGRlc3RwdHIsIGNoYXJjbnQsIGR3b3JkY250LCBmaWxsOHJlZywgd3JrcmVnYTsKKworCWlmICghY291bnQpCisJCXJldHVybiBzOworCisJYyAmPSAweEZGOworCisJaWYgKGNvdW50IDw9IDgpIHsKKwkJY2hhciAqeHMgPSAoY2hhciAqKSBzOworCisJCXdoaWxlIChjb3VudC0tKQorCQkJKnhzKysgPSBjOworCQlyZXR1cm4gczsKKwl9CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCS8qIGZpbGw4ICUzLCAlNSAoYyAmIDB4ZmYpICovCisJCSIJc2xsaQklNCwgJTUsIDhcbiIKKwkJIglvcgklNCwgJTQsICU1XG4iCisJCSIJc2xsaSAgICAlMywgJTQsIDE2XG4iCisJCSIJb3IJJTMsICUzLCAlNFxuIgorCQkvKiBXb3JkLWFsaWduICUwIChzKSBpZiBuZWNlc3NhcnkgKi8KKwkJIglhbmRpCSU0LCAlMCwgMHgwMVxuIgorCQkiCWJlcQklNCwgemVybywgMWZcbiIKKwkJIglhZGRpCSUxLCAlMSwgLTFcbiIKKwkJIglzdGIJJTMsIDAoJTApXG4iCisJCSIJYWRkaQklMCwgJTAsIDFcbiIKKwkJIjE6CW1vdgklMiwgJTFcbiIKKwkJLyogRHdvcmQtYWxpZ24gJTAgKHMpIGlmIG5lY2Vzc2FyeSAqLworCQkiCWFuZGkJJTQsICUwLCAweDAyXG4iCisJCSIJYmVxCSU0LCB6ZXJvLCAyZlxuIgorCQkiCWFkZGkJJTEsICUxLCAtMlxuIgorCQkiCXN0aAklMywgMCglMClcbiIKKwkJIglhZGRpCSUwLCAlMCwgMlxuIgorCQkiCW1vdgklMiwgJTFcbiIKKwkJLyogJTEgYW5kICUyIGFyZSBob3cgbWFueSBtb3JlIGJ5dGVzIHRvIHNldCAqLworCQkiMjoJc3JsaQklMiwgJTIsIDJcbiIKKwkJLyogJTIgaXMgaG93IG1hbnkgZHdvcmRzIHRvIHNldCAqLworCQkiMzoJc3R3CSUzLCAwKCUwKVxuIgorCQkiCWFkZGkJJTAsICUwLCA0XG4iCisJCSIJYWRkaSAgICAlMiwgJTIsIC0xXG4iCisJCSIJYm5lCSUyLCB6ZXJvLCAzYlxuIgorCQkvKiBzdG9yZSByZXNpZHVhbCB3b3JkIGFuZC9vciBieXRlIGlmIG5lY2Vzc2FyeSAqLworCQkiCWFuZGkJJTQsICUxLCAweDAyXG4iCisJCSIJYmVxCSU0LCB6ZXJvLCA0ZlxuIgorCQkiCXN0aAklMywgMCglMClcbiIKKwkJIglhZGRpCSUwLCAlMCwgMlxuIgorCQkvKiBzdG9yZSByZXNpZHVhbCBieXRlIGlmIG5lY2Vzc2FyeSAqLworCQkiNDoJYW5kaQklNCwgJTEsIDB4MDFcbiIKKwkJIgliZXEJJTQsIHplcm8sIDVmXG4iCisJCSIJc3RiCSUzLCAwKCUwKVxuIgorCQkiNTpcbiIKKwkJOiAiPXIiIChkZXN0cHRyKSwJLyogJTAgIE91dHB1dCAqLworCQkgICI9ciIgKGNoYXJjbnQpLAkvKiAlMSAgT3V0cHV0ICovCisJCSAgIj1yIiAoZHdvcmRjbnQpLAkvKiAlMiAgT3V0cHV0ICovCisJCSAgIj1yIiAoZmlsbDhyZWcpLAkvKiAlMyAgT3V0cHV0ICovCisJCSAgIj1yIiAod3JrcmVnYSkJLyogJTQgIE91dHB1dCAqLworCQk6ICJyIiAoYyksCQkvKiAlNSAgSW5wdXQgKi8KKwkJICAiMCIgKHMpLAkJLyogJTAgIElucHV0L091dHB1dCAqLworCQkgICIxIiAoY291bnQpCQkvKiAlMSAgSW5wdXQvT3V0cHV0ICovCisJCTogIm1lbW9yeSIJCS8qIGNsb2JiZXJlZCAqLworCSk7CisKKwlyZXR1cm4gczsKK30KKyNlbmRpZiAvKiBfX0hBVkVfQVJDSF9NRU1TRVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vTWFrZWZpbGUgYi9hcmNoL25pb3MyL21tL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYmQwODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL21tL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBOaW9zMi1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCisjCisKK29iai15CSs9IGNhY2hlZmx1c2gubworb2JqLXkJKz0gZG1hLW1hcHBpbmcubworb2JqLXkJKz0gZXh0YWJsZS5vCitvYmoteQkrPSBmYXVsdC5vCitvYmoteQkrPSBpbml0Lm8KK29iai15CSs9IGlvcmVtYXAubworb2JqLXkJKz0gbW11X2NvbnRleHQubworb2JqLXkJKz0gcGd0YWJsZS5vCitvYmoteQkrPSB0bGIubworb2JqLXkJKz0gdWFjY2Vzcy5vCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL2NhY2hlZmx1c2guYyBiL2FyY2gvbmlvczIvbW0vY2FjaGVmbHVzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTQ4MmI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9jYWNoZWZsdXNoLmMKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9jcHVpbmZvLmg+CisKK3N0YXRpYyB2b2lkIF9fZmx1c2hfZGNhY2hlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCXN0YXJ0ICY9IH4oY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7CisJZW5kICs9IChjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKKwllbmQgJj0gfihjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKKworCWlmIChlbmQgPiBzdGFydCArIGNwdWluZm8uZGNhY2hlX3NpemUpCisJCWVuZCA9IHN0YXJ0ICsgY3B1aW5mby5kY2FjaGVfc2l6ZTsKKworCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSkgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiAgIGZsdXNoZGEgMCglMClcbiIKKwkJCQkJOiAvKiBPdXRwdXRzICovCisJCQkJCTogLyogSW5wdXRzICAqLyAiciIoYWRkcikKKwkJCQkJLyogOiBObyBjbG9iYmVyICovKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZmx1c2hfZGNhY2hlX2FsbCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlzdGFydCAmPSB+KGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCWVuZCArPSAoY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7CisJZW5kICY9IH4oY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7CisKKwlpZiAoZW5kID4gc3RhcnQgKyBjcHVpbmZvLmRjYWNoZV9zaXplKQorCQllbmQgPSBzdGFydCArIGNwdWluZm8uZGNhY2hlX3NpemU7CisKKwlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUpIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgICBmbHVzaGQgMCglMClcbiIKKwkJCQkJOiAvKiBPdXRwdXRzICovCisJCQkJCTogLyogSW5wdXRzICAqLyAiciIoYWRkcikKKwkJCQkJLyogOiBObyBjbG9iYmVyICovKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW52YWxpZGF0ZV9kY2FjaGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJc3RhcnQgJj0gfihjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKKwllbmQgKz0gKGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCWVuZCAmPSB+KGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCisJaWYgKGVuZCA+IHN0YXJ0ICsgY3B1aW5mby5kY2FjaGVfc2l6ZSkKKwkJZW5kID0gc3RhcnQgKyBjcHVpbmZvLmRjYWNoZV9zaXplOworCisJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gY3B1aW5mby5kY2FjaGVfbGluZV9zaXplKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiICAgaW5pdGRhIDAoJTApXG4iCisJCQkJCTogLyogT3V0cHV0cyAqLworCQkJCQk6IC8qIElucHV0cyAgKi8gInIiKGFkZHIpCisJCQkJCS8qIDogTm8gY2xvYmJlciAqLyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2ljYWNoZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlzdGFydCAmPSB+KGNwdWluZm8uaWNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCWVuZCArPSAoY3B1aW5mby5pY2FjaGVfbGluZV9zaXplIC0gMSk7CisJZW5kICY9IH4oY3B1aW5mby5pY2FjaGVfbGluZV9zaXplIC0gMSk7CisKKwlpZiAoZW5kID4gc3RhcnQgKyBjcHVpbmZvLmljYWNoZV9zaXplKQorCQllbmQgPSBzdGFydCArIGNwdWluZm8uaWNhY2hlX3NpemU7CisKKwlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBjcHVpbmZvLmljYWNoZV9saW5lX3NpemUpIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgICBmbHVzaGkgJTBcbiIKKwkJCQkJOiAvKiBPdXRwdXRzICovCisJCQkJCTogLyogSW5wdXRzICAqLyAiciIoYWRkcikKKwkJCQkJLyogOiBObyBjbG9iYmVyICovKTsKKwl9CisJX19hc21fXyBfX3ZvbGF0aWxlKCIgZmx1c2hwXG4iKTsKK30KKworc3RhdGljIHZvaWQgZmx1c2hfYWxpYXNlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5hY3RpdmVfbW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICptcG50OworCXBnb2ZmX3QgcGdvZmY7CisKKwlwZ29mZiA9IHBhZ2UtPmluZGV4OworCisJZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKTsKKwl2bWFfaW50ZXJ2YWxfdHJlZV9mb3JlYWNoKG1wbnQsICZtYXBwaW5nLT5pX21tYXAsIHBnb2ZmLCBwZ29mZikgeworCQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKworCQlpZiAobXBudC0+dm1fbW0gIT0gbW0pCisJCQljb250aW51ZTsKKwkJaWYgKCEobXBudC0+dm1fZmxhZ3MgJiBWTV9NQVlTSEFSRSkpCisJCQljb250aW51ZTsKKworCQlvZmZzZXQgPSAocGdvZmYgLSBtcG50LT52bV9wZ29mZikgPDwgUEFHRV9TSElGVDsKKwkJZmx1c2hfY2FjaGVfcGFnZShtcG50LCBtcG50LT52bV9zdGFydCArIG9mZnNldCwKKwkJCXBhZ2VfdG9fcGZuKHBhZ2UpKTsKKwl9CisJZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpOworfQorCit2b2lkIGZsdXNoX2NhY2hlX2FsbCh2b2lkKQoreworCV9fZmx1c2hfZGNhY2hlX2FsbCgwLCBjcHVpbmZvLmRjYWNoZV9zaXplKTsKKwlfX2ZsdXNoX2ljYWNoZSgwLCBjcHVpbmZvLmljYWNoZV9zaXplKTsKK30KKwordm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlmbHVzaF9jYWNoZV9hbGwoKTsKK30KKwordm9pZCBmbHVzaF9jYWNoZV9kdXBfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJZmx1c2hfY2FjaGVfYWxsKCk7Cit9CisKK3ZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCV9fZmx1c2hfaWNhY2hlKHN0YXJ0LCBlbmQpOworfQorCit2b2lkIGZsdXNoX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlfX2ZsdXNoX2RjYWNoZShzdGFydCwgZW5kKTsKK30KK0VYUE9SVF9TWU1CT0woZmx1c2hfZGNhY2hlX3JhbmdlKTsKKwordm9pZCBpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlfX2ludmFsaWRhdGVfZGNhY2hlKHN0YXJ0LCBlbmQpOworfQorRVhQT1JUX1NZTUJPTChpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSk7CisKK3ZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQl1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlfX2ZsdXNoX2RjYWNoZShzdGFydCwgZW5kKTsKKwlpZiAodm1hID09IE5VTEwgfHwgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSkKKwkJX19mbHVzaF9pY2FjaGUoc3RhcnQsIGVuZCk7Cit9CisKK3ZvaWQgZmx1c2hfaWNhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CisKKwlfX2ZsdXNoX2ljYWNoZShzdGFydCwgZW5kKTsKK30KKwordm9pZCBmbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkciwKKwkJCXVuc2lnbmVkIGxvbmcgcGZuKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWFkZHI7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIFBBR0VfU0laRTsKKworCV9fZmx1c2hfZGNhY2hlKHN0YXJ0LCBlbmQpOworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykKKwkJX19mbHVzaF9pY2FjaGUoc3RhcnQsIGVuZCk7Cit9CisKK3ZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisKKwkvKgorCSAqIFRoZSB6ZXJvIHBhZ2UgaXMgbmV2ZXIgd3JpdHRlbiB0bywgc28gbmV2ZXIgaGFzIGFueSBkaXJ0eQorCSAqIGNhY2hlIGxpbmVzLCBhbmQgdGhlcmVmb3JlIG5ldmVyIG5lZWRzIHRvIGJlIGZsdXNoZWQuCisJICovCisJaWYgKHBhZ2UgPT0gWkVST19QQUdFKDApKQorCQlyZXR1cm47CisKKwltYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOworCisJLyogRmx1c2ggdGhpcyBwYWdlIGlmIHRoZXJlIGFyZSBhbGlhc2VzLiAqLworCWlmIChtYXBwaW5nICYmICFtYXBwaW5nX21hcHBlZChtYXBwaW5nKSkgeworCQljbGVhcl9iaXQoUEdfZGNhY2hlX2NsZWFuLCAmcGFnZS0+ZmxhZ3MpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7CisKKwkJX19mbHVzaF9kY2FjaGVfYWxsKHN0YXJ0LCBzdGFydCArIFBBR0VfU0laRSk7CisJCWlmIChtYXBwaW5nKQorCQkJZmx1c2hfYWxpYXNlcyhtYXBwaW5nLCAgcGFnZSk7CisJCXNldF9iaXQoUEdfZGNhY2hlX2NsZWFuLCAmcGFnZS0+ZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZmx1c2hfZGNhY2hlX3BhZ2UpOworCit2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4oKnB0ZSk7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAoIXBmbl92YWxpZChwZm4pKQorCQlyZXR1cm47CisKKwkvKgorCSogVGhlIHplcm8gcGFnZSBpcyBuZXZlciB3cml0dGVuIHRvLCBzbyBuZXZlciBoYXMgYW55IGRpcnR5CisJKiBjYWNoZSBsaW5lcywgYW5kIHRoZXJlZm9yZSBuZXZlciBuZWVkcyB0byBiZSBmbHVzaGVkLgorCSovCisJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisJaWYgKHBhZ2UgPT0gWkVST19QQUdFKDApKQorCQlyZXR1cm47CisKKwlpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSAmJgorCSAgICAgIXRlc3RfYW5kX3NldF9iaXQoUEdfZGNhY2hlX2NsZWFuLCAmcGFnZS0+ZmxhZ3MpKSB7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBwYWdlX3RvX3ZpcnQocGFnZSk7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCisJCV9fZmx1c2hfZGNhY2hlKHN0YXJ0LCBzdGFydCArIFBBR0VfU0laRSk7CisKKwkJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKKwkJaWYgKG1hcHBpbmcpCisJCQlmbHVzaF9hbGlhc2VzKG1hcHBpbmcsIHBhZ2UpOworCX0KK30KKwordm9pZCBjb3B5X3VzZXJfcGFnZSh2b2lkICp2dG8sIHZvaWQgKnZmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorCQkgICAgc3RydWN0IHBhZ2UgKnRvKQoreworCV9fZmx1c2hfZGNhY2hlKHZhZGRyLCB2YWRkciArIFBBR0VfU0laRSk7CisJY29weV9wYWdlKHZ0bywgdmZyb20pOworCV9fZmx1c2hfZGNhY2hlKCh1bnNpZ25lZCBsb25nKXZ0bywgKHVuc2lnbmVkIGxvbmcpdnRvICsgUEFHRV9TSVpFKTsKK30KKwordm9pZCBjbGVhcl91c2VyX3BhZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19mbHVzaF9kY2FjaGUodmFkZHIsIHZhZGRyICsgUEFHRV9TSVpFKTsKKwljbGVhcl9wYWdlKGFkZHIpOworCV9fZmx1c2hfZGNhY2hlKCh1bnNpZ25lZCBsb25nKWFkZHIsICh1bnNpZ25lZCBsb25nKWFkZHIgKyBQQUdFX1NJWkUpOworfQorCit2b2lkIGNvcHlfZnJvbV91c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJdW5zaWduZWQgbG9uZyB1c2VyX3ZhZGRyLAorCQkJdm9pZCAqZHN0LCB2b2lkICpzcmMsIGludCBsZW4pCit7CisJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHVzZXJfdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKKwltZW1jcHkoZHN0LCBzcmMsIGxlbik7CisJX19mbHVzaF9kY2FjaGUoKHVuc2lnbmVkIGxvbmcpc3JjLCAodW5zaWduZWQgbG9uZylzcmMgKyBsZW4pOworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykKKwkJX19mbHVzaF9pY2FjaGUoKHVuc2lnbmVkIGxvbmcpc3JjLCAodW5zaWduZWQgbG9uZylzcmMgKyBsZW4pOworfQorCit2b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXVuc2lnbmVkIGxvbmcgdXNlcl92YWRkciwKKwkJCXZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgbGVuKQoreworCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB1c2VyX3ZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7CisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworCV9fZmx1c2hfZGNhY2hlKCh1bnNpZ25lZCBsb25nKWRzdCwgKHVuc2lnbmVkIGxvbmcpZHN0ICsgbGVuKTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCisJCV9fZmx1c2hfaWNhY2hlKCh1bnNpZ25lZCBsb25nKWRzdCwgKHVuc2lnbmVkIGxvbmcpZHN0ICsgbGVuKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvbmlvczIvbW0vZG1hLW1hcHBpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzVkYTc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9kbWEtbWFwcGluZy5jCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRvYmlhcyBLbGF1c2VyIDx0a2xhdXNlckBkaXN0YW56LmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqICBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKgorICogQmFzZWQgb24gRE1BIGNvZGUgZnJvbSBNSVBTLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisKK3ZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCkKK3sKKwl2b2lkICpyZXQ7CisKKwkvKiBpZ25vcmUgcmVnaW9uIHNwZWNpZmllcnMgKi8KKwlnZnAgJj0gfihfX0dGUF9ETUEgfCBfX0dGUF9ISUdITUVNKTsKKworCS8qIG9wdGltaXplZCBwYWdlIGNsZWFyaW5nICovCisJZ2ZwIHw9IF9fR0ZQX1pFUk87CisKKwlpZiAoZGV2ID09IE5VTEwgfHwgKGRldi0+Y29oZXJlbnRfZG1hX21hc2sgPCAweGZmZmZmZmZmKSkKKwkJZ2ZwIHw9IEdGUF9ETUE7CisKKwlyZXQgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKGdmcCwgZ2V0X29yZGVyKHNpemUpKTsKKwlpZiAocmV0ICE9IE5VTEwpIHsKKwkJKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX3BoeXMocmV0KTsKKwkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKSByZXQsCisJCQkodW5zaWduZWQgbG9uZykgcmV0ICsgc2l6ZSk7CisJCXJldCA9IFVOQ0FDX0FERFIocmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkbWFfYWxsb2NfY29oZXJlbnQpOworCit2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAorCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSBDQUNfQUREUigodW5zaWduZWQgbG9uZykgdmFkZHIpOworCisJZnJlZV9wYWdlcyhhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOworfQorRVhQT1JUX1NZTUJPTChkbWFfZnJlZV9jb2hlcmVudCk7CisKK2ludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaW50IGk7CisKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisKKwlmb3JfZWFjaF9zZyhzZywgc2csIG5lbnRzLCBpKSB7CisJCXZvaWQgKmFkZHI7CisKKwkJYWRkciA9IHNnX3ZpcnQoc2cpOworCQlpZiAoYWRkcikgeworCQkJX19kbWFfc3luY19mb3JfZGV2aWNlKGFkZHIsIHNnLT5sZW5ndGgsIGRpcmVjdGlvbik7CisJCQlzZy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHNnKTsKKwkJfQorCX0KKworCXJldHVybiBuZW50czsKK30KK0VYUE9SVF9TWU1CT0woZG1hX21hcF9zZyk7CisKK2RtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJdm9pZCAqYWRkcjsKKworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKworCWFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CisJX19kbWFfc3luY19mb3JfZGV2aWNlKGFkZHIsIHNpemUsIGRpcmVjdGlvbik7CisKKwlyZXR1cm4gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0OworfQorRVhQT1JUX1NZTUJPTChkbWFfbWFwX3BhZ2UpOworCit2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsCisJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJX19kbWFfc3luY19mb3JfY3B1KHBoeXNfdG9fdmlydChkbWFfYWRkcmVzcyksIHNpemUsIGRpcmVjdGlvbik7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV91bm1hcF9wYWdlKTsKKwordm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKKwkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJdm9pZCAqYWRkcjsKKwlpbnQgaTsKKworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKworCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfc2coc2csIHNnLCBuaHdlbnRyaWVzLCBpKSB7CisJCWFkZHIgPSBzZ192aXJ0KHNnKTsKKwkJaWYgKGFkZHIpCisJCQlfX2RtYV9zeW5jX2Zvcl9jcHUoYWRkciwgc2ctPmxlbmd0aCwgZGlyZWN0aW9uKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRtYV91bm1hcF9zZyk7CisKK3ZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJX19kbWFfc3luY19mb3JfY3B1KHBoeXNfdG9fdmlydChkbWFfaGFuZGxlKSwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUpOworCit2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJX19kbWFfc3luY19mb3JfZGV2aWNlKHBoeXNfdG9fdmlydChkbWFfaGFuZGxlKSwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpOworCit2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisKKwlfX2RtYV9zeW5jX2Zvcl9jcHUocGh5c190b192aXJ0KGRtYV9oYW5kbGUpLCBzaXplLCBkaXJlY3Rpb24pOworfQorRVhQT1JUX1NZTUJPTChkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSk7CisKK3ZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKworCV9fZG1hX3N5bmNfZm9yX2RldmljZShwaHlzX3RvX3ZpcnQoZG1hX2hhbmRsZSksIHNpemUsIGRpcmVjdGlvbik7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKTsKKwordm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaW50IGk7CisKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBnY2MgZG9lc24ndCBsZWF2ZSB0aGUgZW1wdHkgbG9vcCBib2R5LiAgKi8KKwlmb3JfZWFjaF9zZyhzZywgc2csIG5lbGVtcywgaSkKKwkJX19kbWFfc3luY19mb3JfY3B1KHNnX3ZpcnQoc2cpLCBzZy0+bGVuZ3RoLCBkaXJlY3Rpb24pOworfQorRVhQT1JUX1NZTUJPTChkbWFfc3luY19zZ19mb3JfY3B1KTsKKwordm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaW50IGk7CisKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBnY2MgZG9lc24ndCBsZWF2ZSB0aGUgZW1wdHkgbG9vcCBib2R5LiAgKi8KKwlmb3JfZWFjaF9zZyhzZywgc2csIG5lbGVtcywgaSkKKwkJX19kbWFfc3luY19mb3JfZGV2aWNlKHNnX3ZpcnQoc2cpLCBzZy0+bGVuZ3RoLCBkaXJlY3Rpb24pOworCit9CitFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9leHRhYmxlLmMgYi9hcmNoL25pb3MyL21tL2V4dGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDJmYzVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9leHRhYmxlLmMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqICAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKK2ludCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZml4dXA7CisKKwlmaXh1cCA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPmVhKTsKKwlpZiAoZml4dXApIHsKKwkJcmVncy0+ZWEgPSBmaXh1cC0+Zml4dXA7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9mYXVsdC5jIGIvYXJjaC9uaW9zMi9tbS9mYXVsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTBiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL21tL2ZhdWx0LmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICogICBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKgorICogYmFzZWQgb24gYXJjaC9taXBzL21tL2ZhdWx0LmMgd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgUmFsZiBCYWVjaGxlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCisjZGVmaW5lIEVYQ19TVVBFUlZfSU5TTl9BQ0NFU1MJOSAgLyogU3VwZXJ2aXNvciBvbmx5IGluc3RydWN0aW9uIGFkZHJlc3MgKi8KKyNkZWZpbmUgRVhDX1NVUEVSVl9EQVRBX0FDQ0VTUwkxMSAvKiBTdXBlcnZpc29yIG9ubHkgZGF0YSBhZGRyZXNzICovCisjZGVmaW5lIEVYQ19YX1BST1RFQ1RJT05fRkFVTFQJMTMgLyogVExCIHBlcm1pc3Npb24gdmlvbGF0aW9uICh4KSAqLworI2RlZmluZSBFWENfUl9QUk9URUNUSU9OX0ZBVUxUCTE0IC8qIFRMQiBwZXJtaXNzaW9uIHZpb2xhdGlvbiAocikgKi8KKyNkZWZpbmUgRVhDX1dfUFJPVEVDVElPTl9GQVVMVAkxNSAvKiBUTEIgcGVybWlzc2lvbiB2aW9sYXRpb24gKHcpICovCisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBwYWdlIGZhdWx0cy4gIEl0IGRldGVybWluZXMgdGhlIGFkZHJlc3MsCisgKiBhbmQgdGhlIHByb2JsZW0sIGFuZCB0aGVuIHBhc3NlcyBpdCBvZmYgdG8gb25lIG9mIHRoZSBhcHByb3ByaWF0ZQorICogcm91dGluZXMuCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBkb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGNhdXNlLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLT5tbTsKKwlpbnQgY29kZSA9IFNFR1ZfTUFQRVJSOworCWludCBmYXVsdDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCisJY2F1c2UgPj49IDI7CisKKwkvKiBSZXN0YXJ0IHRoZSBpbnN0cnVjdGlvbiAqLworCXJlZ3MtPmVhIC09IDQ7CisKKwkvKgorCSAqIFdlIGZhdWx0LWluIGtlcm5lbC1zcGFjZSB2aXJ0dWFsIG1lbW9yeSBvbi1kZW1hbmQuIFRoZQorCSAqICdyZWZlcmVuY2UnIHBhZ2UgdGFibGUgaXMgaW5pdF9tbS5wZ2QuCisJICoKKwkgKiBOT1RFISBXZSBNVVNUIE5PVCB0YWtlIGFueSBsb2NrcyBmb3IgdGhpcyBjYXNlLiBXZSBtYXkKKwkgKiBiZSBpbiBhbiBpbnRlcnJ1cHQgb3IgYSBjcml0aWNhbCByZWdpb24sIGFuZCBzaG91bGQKKwkgKiBvbmx5IGNvcHkgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIG1hc3RlciBwYWdlIHRhYmxlLAorCSAqIG5vdGhpbmcgbW9yZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoYWRkcmVzcyA+PSBWTUFMTE9DX1NUQVJUICYmIGFkZHJlc3MgPD0gVk1BTExPQ19FTkQpKSB7CisJCWlmICh1c2VyX21vZGUocmVncykpCisJCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOworCQllbHNlCisJCQlnb3RvIHZtYWxsb2NfZmF1bHQ7CisJfQorCisJaWYgKHVubGlrZWx5KGFkZHJlc3MgPj0gVEFTS19TSVpFKSkKKwkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKKworCS8qCisJICogSWYgd2UncmUgaW4gYW4gaW50ZXJydXB0IG9yIGhhdmUgbm8gdXNlcgorCSAqIGNvbnRleHQsIHdlIG11c3Qgbm90IHRha2UgdGhlIGZhdWx0Li4KKwkgKi8KKwlpZiAoaW5fYXRvbWljKCkgfHwgIW1tKQorCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOworCisJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJZmxhZ3MgfD0gRkFVTFRfRkxBR19VU0VSOworCisJaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmbW0tPm1tYXBfc2VtKSkgeworCQlpZiAoIXVzZXJfbW9kZShyZWdzKSAmJiAhc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+ZWEpKQorCQkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCX0KKworCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyZXNzKTsKKwlpZiAoIXZtYSkKKwkJZ290byBiYWRfYXJlYTsKKwlpZiAodm1hLT52bV9zdGFydCA8PSBhZGRyZXNzKQorCQlnb3RvIGdvb2RfYXJlYTsKKwlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKSkKKwkJZ290byBiYWRfYXJlYTsKKwlpZiAoZXhwYW5kX3N0YWNrKHZtYSwgYWRkcmVzcykpCisJCWdvdG8gYmFkX2FyZWE7CisvKgorICogT2ssIHdlIGhhdmUgYSBnb29kIHZtX2FyZWEgZm9yIHRoaXMgbWVtb3J5IGFjY2Vzcywgc28KKyAqIHdlIGNhbiBoYW5kbGUgaXQuLgorICovCitnb29kX2FyZWE6CisJY29kZSA9IFNFR1ZfQUNDRVJSOworCisJc3dpdGNoIChjYXVzZSkgeworCWNhc2UgRVhDX1NVUEVSVl9JTlNOX0FDQ0VTUzoKKwkJZ290byBiYWRfYXJlYTsKKwljYXNlIEVYQ19TVVBFUlZfREFUQV9BQ0NFU1M6CisJCWdvdG8gYmFkX2FyZWE7CisJY2FzZSBFWENfWF9QUk9URUNUSU9OX0ZBVUxUOgorCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpCisJCQlnb3RvIGJhZF9hcmVhOworCQlicmVhazsKKwljYXNlIEVYQ19SX1BST1RFQ1RJT05fRkFVTFQ6CisJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSkKKwkJCWdvdG8gYmFkX2FyZWE7CisJCWJyZWFrOworCWNhc2UgRVhDX1dfUFJPVEVDVElPTl9GQVVMVDoKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKKwkJCWdvdG8gYmFkX2FyZWE7CisJCWZsYWdzID0gRkFVTFRfRkxBR19XUklURTsKKwkJYnJlYWs7CisJfQorCitzdXJ2aXZlOgorCS8qCisJICogSWYgZm9yIGFueSByZWFzb24gYXQgYWxsIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZmF1bHQsCisJICogbWFrZSBzdXJlIHdlIGV4aXQgZ3JhY2VmdWxseSByYXRoZXIgdGhhbiBlbmRsZXNzbHkgcmVkbworCSAqIHRoZSBmYXVsdC4KKwkgKi8KKwlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CisJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKKwkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCisJCQlnb3RvIGRvX3NpZ2J1czsKKwkJQlVHKCk7CisJfQorCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKQorCQl0c2stPm1hal9mbHQrKzsKKwllbHNlCisJCXRzay0+bWluX2ZsdCsrOworCisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm47CisKKy8qCisgKiBTb21ldGhpbmcgdHJpZWQgdG8gYWNjZXNzIG1lbW9yeSB0aGF0IGlzbid0IGluIG91ciBtZW1vcnkgbWFwLi4KKyAqIEZpeCBpdCwgYnV0IGNoZWNrIGlmIGl0J3Mga2VybmVsIG9yIHVzZXIgZmlyc3QuLgorICovCitiYWRfYXJlYToKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCitiYWRfYXJlYV9ub3NlbWFwaG9yZToKKwkvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi8KKwlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CisJCXByX2FsZXJ0KCIlczogdW5oYW5kbGVkIHBhZ2UgZmF1bHQgKCVkKSBhdCAweCUwOGx4LCAiCisJCQkiY2F1c2UgJWxkXG4iLCBjdXJyZW50LT5jb21tLCBTSUdTRUdWLCBhZGRyZXNzLCBjYXVzZSk7CisJCXNob3dfcmVncyhyZWdzKTsKKwkJX2V4Y2VwdGlvbihTSUdTRUdWLCByZWdzLCBjb2RlLCBhZGRyZXNzKTsKKwkJcmV0dXJuOworCX0KKworbm9fY29udGV4dDoKKwkvKiBBcmUgd2UgcHJlcGFyZWQgdG8gaGFuZGxlIHRoaXMga2VybmVsIGZhdWx0PyAqLworCWlmIChmaXh1cF9leGNlcHRpb24ocmVncykpCisJCXJldHVybjsKKworCS8qCisJICogT29wcy4gVGhlIGtlcm5lbCB0cmllZCB0byBhY2Nlc3Mgc29tZSBiYWQgcGFnZS4gV2UnbGwgaGF2ZSB0bworCSAqIHRlcm1pbmF0ZSB0aGluZ3Mgd2l0aCBleHRyZW1lIHByZWp1ZGljZS4KKwkgKi8KKwlidXN0X3NwaW5sb2NrcygxKTsKKworCXByX2FsZXJ0KCJVbmFibGUgdG8gaGFuZGxlIGtlcm5lbCAlcyBhdCB2aXJ0dWFsIGFkZHJlc3MgJTA4bHgiLAorCQlhZGRyZXNzIDwgUEFHRV9TSVpFID8gIk5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSIgOgorCQkicGFnaW5nIHJlcXVlc3QiLCBhZGRyZXNzKTsKKwlwcl9hbGVydCgiZWEgPSAlMDhseCwgcmEgPSAlMDhseCwgY2F1c2UgPSAlbGRcbiIsIHJlZ3MtPmVhLCByZWdzLT5yYSwKKwkJY2F1c2UpOworCXBhbmljKCJPb3BzIik7CisJcmV0dXJuOworCisvKgorICogV2UgcmFuIG91dCBvZiBtZW1vcnksIG9yIHNvbWUgb3RoZXIgdGhpbmcgaGFwcGVuZWQgdG8gdXMgdGhhdCBtYWRlCisgKiB1cyB1bmFibGUgdG8gaGFuZGxlIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCisgKi8KK291dF9vZl9tZW1vcnk6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlpZiAoaXNfZ2xvYmFsX2luaXQodHNrKSkgeworCQl5aWVsZCgpOworCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCWdvdG8gc3Vydml2ZTsKKwl9CisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCWdvdG8gbm9fY29udGV4dDsKKwlwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpOworCXJldHVybjsKKworZG9fc2lnYnVzOgorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisKKwkvKiBLZXJuZWwgbW9kZT8gSGFuZGxlIGV4Y2VwdGlvbnMgb3IgZGllICovCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCWdvdG8gbm9fY29udGV4dDsKKworCV9leGNlcHRpb24oU0lHQlVTLCByZWdzLCBCVVNfQURSRVJSLCBhZGRyZXNzKTsKKwlyZXR1cm47CisKK3ZtYWxsb2NfZmF1bHQ6CisJeworCQkvKgorCQkgKiBTeW5jaHJvbml6ZSB0aGlzIHRhc2sncyB0b3AgbGV2ZWwgcGFnZS10YWJsZQorCQkgKiB3aXRoIHRoZSAncmVmZXJlbmNlJyBwYWdlIHRhYmxlLgorCQkgKgorCQkgKiBEbyBfbm90XyB1c2UgInRzayIgaGVyZS4gV2UgbWlnaHQgYmUgaW5zaWRlCisJCSAqIGFuIGludGVycnVwdCBpbiB0aGUgbWlkZGxlIG9mIGEgdGFzayBzd2l0Y2guLgorCQkgKi8KKwkJaW50IG9mZnNldCA9IHBnZF9pbmRleChhZGRyZXNzKTsKKwkJcGdkX3QgKnBnZCwgKnBnZF9rOworCQlwdWRfdCAqcHVkLCAqcHVkX2s7CisJCXBtZF90ICpwbWQsICpwbWRfazsKKwkJcHRlX3QgKnB0ZV9rOworCisJCXBnZCA9IHBnZF9jdXJyZW50ICsgb2Zmc2V0OworCQlwZ2RfayA9IGluaXRfbW0ucGdkICsgb2Zmc2V0OworCisJCWlmICghcGdkX3ByZXNlbnQoKnBnZF9rKSkKKwkJCWdvdG8gbm9fY29udGV4dDsKKwkJc2V0X3BnZChwZ2QsICpwZ2Rfayk7CisKKwkJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOworCQlwdWRfayA9IHB1ZF9vZmZzZXQocGdkX2ssIGFkZHJlc3MpOworCQlpZiAoIXB1ZF9wcmVzZW50KCpwdWRfaykpCisJCQlnb3RvIG5vX2NvbnRleHQ7CisJCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKKwkJcG1kX2sgPSBwbWRfb2Zmc2V0KHB1ZF9rLCBhZGRyZXNzKTsKKwkJaWYgKCFwbWRfcHJlc2VudCgqcG1kX2spKQorCQkJZ290byBub19jb250ZXh0OworCQlzZXRfcG1kKHBtZCwgKnBtZF9rKTsKKworCQlwdGVfayA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZF9rLCBhZGRyZXNzKTsKKwkJaWYgKCFwdGVfcHJlc2VudCgqcHRlX2spKQorCQkJZ290byBub19jb250ZXh0OworCisJCWZsdXNoX3RsYl9vbmUoYWRkcmVzcyk7CisJCXJldHVybjsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL2luaXQuYyBiL2FyY2gvbmlvczIvbW0vaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NWM3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL21tL2luaXQuYwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbHRlcmEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWNyb3Ryb25peCBEYXRhY29tIEx0ZAorICoKKyAqIGJhc2VkIG9uIGFyY2gvbTY4ay9tbS9pbml0LmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworcGdkX3QgKnBnZF9jdXJyZW50OworCisvKgorICogcGFnaW5nX2luaXQoKSBjb250aW51ZXMgdGhlIHZpcnR1YWwgbWVtb3J5IGVudmlyb25tZW50IHNldHVwIHdoaWNoCisgKiB3YXMgYmVndW4gYnkgdGhlIGNvZGUgaW4gYXJjaC9oZWFkLlMuCisgKiBUaGUgcGFyYW1ldGVycyBhcmUgcG9pbnRlcnMgdG8gd2hlcmUgdG8gc3RpY2sgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcKKyAqIGFkZHJlc3NlcyBvZiBhdmFpbGFibGUga2VybmVsIHZpcnR1YWwgbWVtb3J5LgorICovCit2b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdOworCisJbWVtc2V0KHpvbmVzX3NpemUsIDAsIHNpemVvZih6b25lc19zaXplKSk7CisKKwlwYWdldGFibGVfaW5pdCgpOworCXBnZF9jdXJyZW50ID0gc3dhcHBlcl9wZ19kaXI7CisKKwl6b25lc19zaXplW1pPTkVfTk9STUFMXSA9IG1heF9tYXBucjsKKworCS8qIHBhc3MgdGhlIG1lbW9yeSBmcm9tIHRoZSBib290bWVtIGFsbG9jYXRvciB0byB0aGUgbWFpbiBhbGxvY2F0b3IgKi8KKwlmcmVlX2FyZWFfaW5pdCh6b25lc19zaXplKTsKKworCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyllbXB0eV96ZXJvX3BhZ2UsCisJCQkodW5zaWduZWQgbG9uZyllbXB0eV96ZXJvX3BhZ2UgKyBQQUdFX1NJWkUpOworfQorCit2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZW5kX21lbSAgID0gbWVtb3J5X2VuZDsgLyogdGhpcyBtdXN0IG5vdCBpbmNsdWRlCisJCQkJCQlrZXJuZWwgc3RhY2sgYXQgdG9wICovCisKKwlwcl9kZWJ1ZygibWVtX2luaXQ6IHN0YXJ0PSVseCwgZW5kPSVseFxuIiwgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kKTsKKworCWVuZF9tZW0gJj0gUEFHRV9NQVNLOworCWhpZ2hfbWVtb3J5ID0gX192YShlbmRfbWVtKTsKKworCS8qIHRoaXMgd2lsbCBwdXQgYWxsIG1lbW9yeSBvbnRvIHRoZSBmcmVlbGlzdHMgKi8KKwlmcmVlX2FsbF9ib290bWVtKCk7CisJbWVtX2luaXRfcHJpbnRfaW5mbyhOVUxMKTsKK30KKwordm9pZCBfX2luaXQgbW11X2luaXQodm9pZCkKK3sKKwlmbHVzaF90bGJfYWxsKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK3ZvaWQgX19pbml0IGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmcmVlX3Jlc2VydmVkX2FyZWEoKHZvaWQgKilzdGFydCwgKHZvaWQgKillbmQsIC0xLCAiaW5pdHJkIik7Cit9CisjZW5kaWYKKwordm9pZCBfX2luaXRfcmVmb2sgZnJlZV9pbml0bWVtKHZvaWQpCit7CisJZnJlZV9pbml0bWVtX2RlZmF1bHQoLTEpOworfQorCisjZGVmaW5lIF9fcGFnZV9hbGlnbmVkKG9yZGVyKSBfX2FsaWduZWQoUEFHRV9TSVpFIDw8IChvcmRlcikpCitwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdIF9fcGFnZV9hbGlnbmVkKFBHRF9PUkRFUik7CitwdGVfdCBpbnZhbGlkX3B0ZV90YWJsZVtQVFJTX1BFUl9QVEVdIF9fcGFnZV9hbGlnbmVkKFBURV9PUkRFUik7CitzdGF0aWMgc3RydWN0IHBhZ2UgKmt1c2VyX3BhZ2VbMV07CisKK3N0YXRpYyBpbnQgYWxsb2Nfa3VzZXJfcGFnZSh2b2lkKQoreworCWV4dGVybiBjaGFyIF9fa3VzZXJfaGVscGVyX3N0YXJ0W10sIF9fa3VzZXJfaGVscGVyX2VuZFtdOworCWludCBrdXNlcl9zeiA9IF9fa3VzZXJfaGVscGVyX2VuZCAtIF9fa3VzZXJfaGVscGVyX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgdnBhZ2U7CisKKwl2cGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKKwlpZiAoIXZwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIENvcHkga3VzZXIgaGVscGVycyAqLworCW1lbWNweSgodm9pZCAqKXZwYWdlLCBfX2t1c2VyX2hlbHBlcl9zdGFydCwga3VzZXJfc3opOworCisJZmx1c2hfaWNhY2hlX3JhbmdlKHZwYWdlLCB2cGFnZSArIEtVU0VSX1NJWkUpOworCWt1c2VyX3BhZ2VbMF0gPSB2aXJ0X3RvX3BhZ2UodnBhZ2UpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGFsbG9jX2t1c2VyX3BhZ2UpOworCitpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGludCB1c2VzX2ludGVycCkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCWludCByZXQ7CisKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCisJLyogTWFwIGt1c2VyIGhlbHBlcnMgdG8gdXNlciBzcGFjZSBhZGRyZXNzICovCisJcmV0ID0gaW5zdGFsbF9zcGVjaWFsX21hcHBpbmcobW0sIEtVU0VSX0JBU0UsIEtVU0VSX1NJWkUsCisJCQkJICAgICAgVk1fUkVBRCB8IFZNX0VYRUMgfCBWTV9NQVlSRUFEIHwKKwkJCQkgICAgICBWTV9NQVlFWEVDLCBrdXNlcl9wYWdlKTsKKworCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCisJcmV0dXJuIHJldDsKK30KKworY29uc3QgY2hhciAqYXJjaF92bWFfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gKHZtYS0+dm1fc3RhcnQgPT0gS1VTRVJfQkFTRSkgPyAiW2t1c2VyXSIgOiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS9pb3JlbWFwLmMgYi9hcmNoL25pb3MyL21tL2lvcmVtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTI4MTc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS9pb3JlbWFwLmMKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9iaWFzIEtsYXVzZXIgPHRrbGF1c2VyQGRpc3RhbnouY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zIEluYworICogICBJbXBsZW1lbnRlZCBieSBmcmVkcmlrLm1hcmtzdHJvbUBnbWFpbC5jb20gYW5kIGl2YXJob2xtcXZpc3RAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTWljcm90cm9uaXggRGF0YWNvbSBMdGQuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1hcF9hcmVhX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKKwkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgZW5kOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXBncHJvdF90IHBncHJvdCA9IF9fcGdwcm90KF9QQUdFX0dMT0JBTCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFECisJCQkJfCBfUEFHRV9XUklURSB8IGZsYWdzKTsKKworCWFkZHJlc3MgJj0gflBNRF9NQVNLOworCWVuZCA9IGFkZHJlc3MgKyBzaXplOworCWlmIChlbmQgPiBQTURfU0laRSkKKwkJZW5kID0gUE1EX1NJWkU7CisJaWYgKGFkZHJlc3MgPj0gZW5kKQorCQlCVUcoKTsKKwlwZm4gPSBQRk5fRE9XTihwaHlzX2FkZHIpOworCWRvIHsKKwkJaWYgKCFwdGVfbm9uZSgqcHRlKSkgeworCQkJcHJfZXJyKCJyZW1hcF9hcmVhX3B0ZTogcGFnZSBhbHJlYWR5IGV4aXN0c1xuIik7CisJCQlCVUcoKTsKKwkJfQorCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwZm4sIHBncHJvdCkpOworCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKKwkJcGZuKys7CisJCXB0ZSsrOworCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmVtYXBfYXJlYV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCisJCQkJdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGVuZDsKKworCWFkZHJlc3MgJj0gflBHRElSX01BU0s7CisJZW5kID0gYWRkcmVzcyArIHNpemU7CisJaWYgKGVuZCA+IFBHRElSX1NJWkUpCisJCWVuZCA9IFBHRElSX1NJWkU7CisJcGh5c19hZGRyIC09IGFkZHJlc3M7CisJaWYgKGFkZHJlc3MgPj0gZW5kKQorCQlCVUcoKTsKKwlkbyB7CisJCXB0ZV90ICpwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcmVzcyk7CisKKwkJaWYgKCFwdGUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcmVtYXBfYXJlYV9wdGUocHRlLCBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzLCBhZGRyZXNzICsgcGh5c19hZGRyLAorCQkJZmxhZ3MpOworCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQTURfU0laRSkgJiBQTURfTUFTSzsKKwkJcG1kKys7CisJfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlbWFwX2FyZWFfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKKwkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaW50IGVycm9yOworCXBnZF90ICpkaXI7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyZXNzICsgc2l6ZTsKKworCXBoeXNfYWRkciAtPSBhZGRyZXNzOworCWRpciA9IHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpOworCWZsdXNoX2NhY2hlX2FsbCgpOworCWlmIChhZGRyZXNzID49IGVuZCkKKwkJQlVHKCk7CisJZG8geworCQlwdWRfdCAqcHVkOworCQlwbWRfdCAqcG1kOworCisJCWVycm9yID0gLUVOT01FTTsKKwkJcHVkID0gcHVkX2FsbG9jKCZpbml0X21tLCBkaXIsIGFkZHJlc3MpOworCQlpZiAoIXB1ZCkKKwkJCWJyZWFrOworCQlwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIHB1ZCwgYWRkcmVzcyk7CisJCWlmICghcG1kKQorCQkJYnJlYWs7CisJCWlmIChyZW1hcF9hcmVhX3BtZChwbWQsIGFkZHJlc3MsIGVuZCAtIGFkZHJlc3MsCisJCQlwaHlzX2FkZHIgKyBhZGRyZXNzLCBmbGFncykpCisJCQlicmVhazsKKwkJZXJyb3IgPSAwOworCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7CisJCWRpcisrOworCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKKwlmbHVzaF90bGJfYWxsKCk7CisJcmV0dXJuIGVycm9yOworfQorCisjZGVmaW5lIElTX01BUFBBQkxFX1VOQ0FDSEVBQkxFKGFkZHIpIChhZGRyIDwgMHgyMDAwMDAwMFVMKQorCisvKgorICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KKyAqLwordm9pZCBfX2lvbWVtICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCXVuc2lnbmVkIGxvbmcgY2FjaGVmbGFnKQoreworCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBsYXN0X2FkZHI7CisJdm9pZCAqYWRkcjsKKworCS8qIERvbid0IGFsbG93IHdyYXBhcm91bmQgb3IgemVybyBzaXplICovCisJbGFzdF9hZGRyID0gcGh5c19hZGRyICsgc2l6ZSAtIDE7CisKKwlpZiAoIXNpemUgfHwgbGFzdF9hZGRyIDwgcGh5c19hZGRyKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIERvbid0IGFsbG93IGFueWJvZHkgdG8gcmVtYXAgbm9ybWFsIFJBTSB0aGF0IHdlJ3JlIHVzaW5nICovCisJaWYgKHBoeXNfYWRkciA+IFBIWVNfT0ZGU0VUICYmIHBoeXNfYWRkciA8IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpIHsKKwkJY2hhciAqdF9hZGRyLCAqdF9lbmQ7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCisJCXRfYWRkciA9IF9fdmEocGh5c19hZGRyKTsKKwkJdF9lbmQgPSB0X2FkZHIgKyAoc2l6ZSAtIDEpOworCQlmb3IgKHBhZ2UgPSB2aXJ0X3RvX3BhZ2UodF9hZGRyKTsKKwkJCXBhZ2UgPD0gdmlydF90b19wYWdlKHRfZW5kKTsgcGFnZSsrKQorCQkJaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkpCisJCQkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBNYXAgdW5jYWNoZWQgb2JqZWN0cyBpbiB0aGUgbG93IHBhcnQgb2YgYWRkcmVzcyBzcGFjZSB0bworCSAqIENPTkZJR19OSU9TMl9JT19SRUdJT05fQkFTRQorCSAqLworCWlmIChJU19NQVBQQUJMRV9VTkNBQ0hFQUJMRShwaHlzX2FkZHIpICYmCisJICAgIElTX01BUFBBQkxFX1VOQ0FDSEVBQkxFKGxhc3RfYWRkcikgJiYKKwkgICAgIShjYWNoZWZsYWcgJiBfUEFHRV9DQUNIRUQpKQorCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShDT05GSUdfTklPUzJfSU9fUkVHSU9OX0JBU0UgKyBwaHlzX2FkZHIpOworCisJLyogTWFwcGluZ3MgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQgKi8KKwlvZmZzZXQgPSBwaHlzX2FkZHIgJiB+UEFHRV9NQVNLOworCXBoeXNfYWRkciAmPSBQQUdFX01BU0s7CisJc2l6ZSA9IFBBR0VfQUxJR04obGFzdF9hZGRyICsgMSkgLSBwaHlzX2FkZHI7CisKKwkvKiBPaywgZ28gZm9yIGl0ICovCisJYXJlYSA9IGdldF92bV9hcmVhKHNpemUsIFZNX0lPUkVNQVApOworCWlmICghYXJlYSkKKwkJcmV0dXJuIE5VTEw7CisJYWRkciA9IGFyZWEtPmFkZHI7CisJaWYgKHJlbWFwX2FyZWFfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIGFkZHIsIHBoeXNfYWRkciwgc2l6ZSwKKwkJY2FjaGVmbGFnKSkgeworCQl2dW5tYXAoYWRkcik7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAob2Zmc2V0ICsgKGNoYXIgKilhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woX19pb3JlbWFwKTsKKworLyoKKyAqIF9faW91bm1hcCB1bm1hcHMgbmVhcmx5IGV2ZXJ5dGhpbmcsIHNvIGJlIGNhcmVmdWwKKyAqIGl0IGRvZXNuJ3QgZnJlZSBjdXJyZW50bHkgcG9pbnRlci9wYWdlIHRhYmxlcyBhbnltb3JlIGJ1dCBpdAorICogd2Fzbid0IHVzZWQgYW55d2F5IGFuZCBtaWdodCBiZSBhZGRlZCBsYXRlci4KKyAqLwordm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKQoreworCXN0cnVjdCB2bV9zdHJ1Y3QgKnA7CisKKwlpZiAoKHVuc2lnbmVkIGxvbmcpIGFkZHIgPiBDT05GSUdfTklPUzJfSU9fUkVHSU9OX0JBU0UpCisJCXJldHVybjsKKworCXAgPSByZW1vdmVfdm1fYXJlYSgodm9pZCAqKSAoUEFHRV9NQVNLICYgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSkgYWRkcikpOworCWlmICghcCkKKwkJcHJfZXJyKCJpb3VubWFwOiBiYWQgYWRkcmVzcyAlcFxuIiwgYWRkcik7CisJa2ZyZWUocCk7Cit9CitFWFBPUlRfU1lNQk9MKF9faW91bm1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL21tdV9jb250ZXh0LmMgYi9hcmNoL25pb3MyL21tL21tdV9jb250ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkNmI5YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvbW0vbW11X2NvbnRleHQuYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIE1NVSBjb250ZXh0IGhhbmRsaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUb2JpYXMgS2xhdXNlciA8dGtsYXVzZXJAZGlzdGFuei5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9jcHVpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3RsYi5oPgorCisvKiBUaGUgcGlkcyBwb3NpdGlvbiBhbmQgbWFzayBpbiBjb250ZXh0ICovCisjZGVmaW5lIFBJRF9TSElGVAkwCisjZGVmaW5lIFBJRF9CSVRTCShjcHVpbmZvLnRsYl9waWRfbnVtX2JpdHMpCisjZGVmaW5lIFBJRF9NQVNLCSgoMVVMIDw8IFBJRF9CSVRTKSAtIDEpCisKKy8qIFRoZSB2ZXJzaW9ucyBwb3NpdGlvbiBhbmQgbWFzayBpbiBjb250ZXh0ICovCisjZGVmaW5lIFZFUlNJT05fQklUUwkoMzIgLSBQSURfQklUUykKKyNkZWZpbmUgVkVSU0lPTl9TSElGVAkoUElEX1NISUZUICsgUElEX0JJVFMpCisjZGVmaW5lIFZFUlNJT05fTUFTSwkoKDFVTCA8PCBWRVJTSU9OX0JJVFMpIC0gMSkKKworLyogUmV0dXJuIHRoZSB2ZXJzaW9uIHBhcnQgb2YgYSBjb250ZXh0ICovCisjZGVmaW5lIENUWF9WRVJTSU9OKGMpCSgoKGMpID4+IFZFUlNJT05fU0hJRlQpICYgVkVSU0lPTl9NQVNLKQorCisvKiBSZXR1cm4gdGhlIHBpZCBwYXJ0IG9mIGEgY29udGV4dCAqLworI2RlZmluZSBDVFhfUElEKGMpCSgoKGMpID4+IFBJRF9TSElGVCkgJiBQSURfTUFTSykKKworLyogVmFsdWUgb2YgdGhlIGZpcnN0IGNvbnRleHQgKHZlcnNpb24gMSwgcGlkIDApICovCisjZGVmaW5lIEZJUlNUX0NUWAkoKDFVTCA8PCBWRVJTSU9OX1NISUZUKSB8ICgwIDw8IFBJRF9TSElGVCkpCisKK3N0YXRpYyBtbV9jb250ZXh0X3QgbmV4dF9tbXVfY29udGV4dDsKKworLyoKKyAqIEluaXRpYWxpemUgTU1VIGNvbnRleHQgbWFuYWdlbWVudCBzdHVmZi4KKyAqLwordm9pZCBfX2luaXQgbW11X2NvbnRleHRfaW5pdCh2b2lkKQoreworCS8qIFdlIG5lZWQgdG8gc2V0IHRoaXMgaGVyZSBiZWNhdXNlIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHJ1bnRpbWUgZGF0YQorCSAqIGZyb20gY3B1aW5mbyAqLworCW5leHRfbW11X2NvbnRleHQgPSBGSVJTVF9DVFg7Cit9CisKKy8qCisgKiBTZXQgbmV3IGNvbnRleHQgKHBpZCksIGtlZXAgd2F5CisgKi8KK3N0YXRpYyB2b2lkIHNldF9jb250ZXh0KG1tX2NvbnRleHRfdCBjb250ZXh0KQoreworCXNldF9tbXVfcGlkKENUWF9QSUQoY29udGV4dCkpOworfQorCitzdGF0aWMgbW1fY29udGV4dF90IGdldF9uZXdfY29udGV4dCh2b2lkKQoreworCS8qIFJldHVybiB0aGUgbmV4dCBwaWQgKi8KKwluZXh0X21tdV9jb250ZXh0ICs9ICgxVUwgPDwgUElEX1NISUZUKTsKKworCS8qIElmIHRoZSBwaWQgZmllbGQgd3JhcHMgYXJvdW5kIHdlIGluY3JlYXNlIHRoZSB2ZXJzaW9uIGFuZAorCSAqIGZsdXNoIHRoZSB0bGIgKi8KKwlpZiAodW5saWtlbHkoQ1RYX1BJRChuZXh0X21tdV9jb250ZXh0KSA9PSAwKSkgeworCQkvKiBWZXJzaW9uIGlzIGluY3JlbWVudGVkIHNpbmNlIHRoZSBwaWQgaW5jcmVtZW50IGFib3ZlCisJCSAqIG92ZXJmbG93cyBpbmZvIHZlcnNpb24gKi8KKwkJZmx1c2hfY2FjaGVfYWxsKCk7CisJCWZsdXNoX3RsYl9hbGwoKTsKKwl9CisKKwkvKiBJZiB0aGUgdmVyc2lvbiB3cmFwcyB3ZSBzdGFydCBvdmVyIHdpdGggdGhlIGZpcnN0IGdlbmVyYXRpb24sIHdlIGRvCisJICogbm90IG5lZWQgdG8gZmx1c2ggdGhlIHRsYiBoZXJlIHNpbmNlIGl0J3MgYWx3YXlzIGRvbmUgYWJvdmUgKi8KKwlpZiAodW5saWtlbHkoQ1RYX1ZFUlNJT04obmV4dF9tbXVfY29udGV4dCkgPT0gMCkpCisJCW5leHRfbW11X2NvbnRleHQgPSBGSVJTVF9DVFg7CisKKwlyZXR1cm4gbmV4dF9tbXVfY29udGV4dDsKK30KKwordm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKKwkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIElmIHRoZSBwcm9jZXNzIGNvbnRleHQgd2UgYXJlIHN3YXBwaW5nIGluIGhhcyBhIGRpZmZlcmVudCBjb250ZXh0CisJICogZ2VuZXJhdGlvbiB0aGVuIHdlIGhhdmUgaXQgc2hvdWxkIGdldCBhIG5ldyBnZW5lcmF0aW9uL3BpZCAqLworCWlmICh1bmxpa2VseShDVFhfVkVSU0lPTihuZXh0LT5jb250ZXh0KSAhPQorCQlDVFhfVkVSU0lPTihuZXh0X21tdV9jb250ZXh0KSkpCisJCW5leHQtPmNvbnRleHQgPSBnZXRfbmV3X2NvbnRleHQoKTsKKworCS8qIFNhdmUgdGhlIGN1cnJlbnQgcGdkIHNvIHRoZSBmYXN0IHRsYiBoYW5kbGVyIGNhbiBmaW5kIGl0ICovCisJcGdkX2N1cnJlbnQgPSBuZXh0LT5wZ2Q7CisKKwkvKiBTZXQgdGhlIGN1cnJlbnQgY29udGV4dCAqLworCXNldF9jb250ZXh0KG5leHQtPmNvbnRleHQpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogQWZ0ZXIgd2UgaGF2ZSBzZXQgY3VycmVudC0+bW0gdG8gYSBuZXcgdmFsdWUsIHRoaXMgYWN0aXZhdGVzCisgKiB0aGUgY29udGV4dCBmb3IgdGhlIG5ldyBtbSBzbyB3ZSBzZWUgdGhlIG5ldyBtYXBwaW5ncy4KKyAqLwordm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQoreworCW5leHQtPmNvbnRleHQgPSBnZXRfbmV3X2NvbnRleHQoKTsKKwlzZXRfY29udGV4dChuZXh0LT5jb250ZXh0KTsKKwlwZ2RfY3VycmVudCA9IG5leHQtPnBnZDsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfcGlkX2Zyb21fY29udGV4dChtbV9jb250ZXh0X3QgKmNvbnRleHQpCit7CisJcmV0dXJuIENUWF9QSUQoKCpjb250ZXh0KSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL3BndGFibGUuYyBiL2FyY2gvbmlvczIvbW0vcGd0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZTI0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL21tL3BndGFibGUuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqICAgSW1wbGVtZW50ZWQgYnkgZnJlZHJpay5tYXJrc3Ryb21AZ21haWwuY29tIGFuZCBpdmFyaG9sbXF2aXN0QGdtYWlsLmNvbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVpbmZvLmg+CisKKy8qIHB0ZWFkZHI6CisgKiAgIHB0YmFzZSB8IHZwbiogfCB6ZXJvCisgKiAgIDMxLTIyICB8IDIxLTIgfCAxLTAKKyAqCisgKiAgICp2cG4gaXMgcHJlc2VydmVkIG9uIGRvdWJsZSBmYXVsdAorICoKKyAqIHRsYmFjYzoKKyAqICAgSUcgICB8KmZsYWdzfCBwZm4KKyAqICAgMzEtMjV8MjQtMjAgfCAxOS0wCisgKgorICogICAqY3J3eGcKKyAqCisgKiB0bGJtaXNjOgorICogICByZXN2ICB8d2F5ICAgfHJkIHwgd2V8cGlkIHxkYmx8YmFkfHBlcm18ZAorICogICAzMS0yNCB8MjMtMjAgfDE5IHwgMjB8MTctNHwzICB8MiAgfDEgICB8MAorICoKKyAqLworCisvKgorICogSW5pdGlhbGl6ZSBhIG5ldyBwZ2QgLyBwbWQgdGFibGUgd2l0aCBpbnZhbGlkIHBvaW50ZXJzLgorICovCitzdGF0aWMgdm9pZCBwZ2RfaW5pdChwZ2RfdCAqcGdkKQoreworCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAqKSBwZ2Q7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNFUl9QVFJTX1BFUl9QR0Q7IGkgKz0gOCkgeworCQlwW2kgKyAwXSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZTsKKwkJcFtpICsgMV0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7CisJCXBbaSArIDJdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlOworCQlwW2kgKyAzXSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZTsKKwkJcFtpICsgNF0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7CisJCXBbaSArIDVdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlOworCQlwW2kgKyA2XSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZTsKKwkJcFtpICsgN10gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGU7CisJfQorfQorCitwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXBnZF90ICpyZXQsICppbml0OworCisJcmV0ID0gKHBnZF90ICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgUEdEX09SREVSKTsKKwlpZiAocmV0KSB7CisJCWluaXQgPSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCAwVUwpOworCQlwZ2RfaW5pdChyZXQpOworCQltZW1jcHkocmV0ICsgVVNFUl9QVFJTX1BFUl9QR0QsIGluaXQgKyBVU0VSX1BUUlNfUEVSX1BHRCwKKwkJICAgICAgIChQVFJTX1BFUl9QR0QgLSBVU0VSX1BUUlNfUEVSX1BHRCkgKiBzaXplb2YocGdkX3QpKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIF9faW5pdCBwYWdldGFibGVfaW5pdCh2b2lkKQoreworCS8qIEluaXRpYWxpemUgdGhlIGVudGlyZSBwZ2QuICAqLworCXBnZF9pbml0KHN3YXBwZXJfcGdfZGlyKTsKKwlwZ2RfaW5pdChzd2FwcGVyX3BnX2RpciArIFVTRVJfUFRSU19QRVJfUEdEKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vdGxiLmMgYi9hcmNoL25pb3MyL21tL3RsYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMTAzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL21tL3RsYi5jCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogTmlvczIgVExCIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jCisgKiAgIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vY3B1aW5mby5oPgorCisjZGVmaW5lIFRMQl9JTkRFWF9NQVNLCQlcCisJKCgoKDFVTCA8PCAoY3B1aW5mby50bGJfcHRyX3N6IC0gY3B1aW5mby50bGJfbnVtX3dheXNfbG9nMikpKSAtIDEpIFwKKwkJPDwgUEFHRV9TSElGVCkKKworLyogVXNlZCBhcyBpbGxlZ2FsIFBIWVNfQUREUiBmb3IgVExCIG1hcHBpbmdzCisgKi8KKyNkZWZpbmUgTUFYX1BIWVNfQUREUiAwCisKK3N0YXRpYyB2b2lkIGdldF9taXNjX2FuZF9waWQodW5zaWduZWQgbG9uZyAqbWlzYywgdW5zaWduZWQgbG9uZyAqcGlkKQoreworCSptaXNjICA9IFJEQ1RMKENUTF9UTEJNSVNDKTsKKwkqbWlzYyAmPSAoVExCTUlTQ19QSUQgfCBUTEJNSVNDX1dBWSk7CisJKnBpZCAgPSAqbWlzYyAmIFRMQk1JU0NfUElEOworfQorCisvKgorICogQWxsIGVudHJpZXMgY29tbW9uIHRvIGEgbW0gc2hhcmUgYW4gYXNpZC4gIFRvIGVmZmVjdGl2ZWx5IGZsdXNoIHRoZXNlCisgKiBlbnRyaWVzLCB3ZSBqdXN0IGJ1bXAgdGhlIGFzaWQuCisgKi8KK3ZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmIChjdXJyZW50LT5tbSA9PSBtbSkKKwkJZmx1c2hfdGxiX2FsbCgpOworCWVsc2UKKwkJbWVtc2V0KCZtbS0+Y29udGV4dCwgMCwgc2l6ZW9mKG1tX2NvbnRleHRfdCkpOworfQorCisvKgorICogVGhpcyBvbmUgaXMgb25seSB1c2VkIGZvciBwYWdlcyB3aXRoIHRoZSBnbG9iYWwgYml0IHNldCBzbyB3ZSBkb24ndCBjYXJlCisgKiBtdWNoIGFib3V0IHRoZSBBU0lELgorICovCit2b2lkIGZsdXNoX3RsYl9vbmVfcGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBtbXVfcGlkKQoreworCXVuc2lnbmVkIGludCB3YXk7CisJdW5zaWduZWQgbG9uZyBvcmdfbWlzYywgcGlkX21pc2M7CisKKwlwcl9kZWJ1ZygiRmx1c2ggdGxiLWVudHJ5IGZvciB2YWRkcj0lI2x4XG4iLCBhZGRyKTsKKworCS8qIHJlbWVtYmVyIHBpZC93YXkgdW50aWwgd2UgcmV0dXJuLiAqLworCWdldF9taXNjX2FuZF9waWQoJm9yZ19taXNjLCAmcGlkX21pc2MpOworCisJV1JDVEwoQ1RMX1BURUFERFIsIChhZGRyID4+IFBBR0VfU0hJRlQpIDw8IDIpOworCisJZm9yICh3YXkgPSAwOyB3YXkgPCBjcHVpbmZvLnRsYl9udW1fd2F5czsgd2F5KyspIHsKKwkJdW5zaWduZWQgbG9uZyBwdGVhZGRyOworCQl1bnNpZ25lZCBsb25nIHRsYm1pc2M7CisJCXVuc2lnbmVkIGxvbmcgcGlkOworCisJCXRsYm1pc2MgPSBwaWRfbWlzYyB8IFRMQk1JU0NfUkQgfCAod2F5IDw8IFRMQk1JU0NfV0FZX1NISUZUKTsKKwkJV1JDVEwoQ1RMX1RMQk1JU0MsIHRsYm1pc2MpOworCQlwdGVhZGRyID0gUkRDVEwoQ1RMX1BURUFERFIpOworCQl0bGJtaXNjID0gUkRDVEwoQ1RMX1RMQk1JU0MpOworCQlwaWQgPSAodGxibWlzYyA+PiBUTEJNSVNDX1BJRF9TSElGVCkgJiBUTEJNSVNDX1BJRF9NQVNLOworCQlpZiAoKCgoKHB0ZWFkZHIgPj4gMikgJiAweGZmZmZmKSkgPT0gKGFkZHIgPj4gUEFHRV9TSElGVCkpICYmCisJCQkJcGlkID09IG1tdV9waWQpIHsKKwkJCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBDT05GSUdfTklPUzJfSU9fUkVHSU9OX0JBU0UgKworCQkJCSgoUEFHRV9TSVpFICogY3B1aW5mby50bGJfbnVtX2xpbmVzKSAqIHdheSkgKworCQkJCShhZGRyICYgVExCX0lOREVYX01BU0spOworCQkJcHJfZGVidWcoIkZsdXNoIGVudHJ5IGJ5IHdyaXRpbmcgJSNseCB3YXk9JWRsIHBpZD0lbGRcbiIsCisJCQkJdmFkZHIsIHdheSwgKHBpZF9taXNjID4+IFRMQk1JU0NfUElEX1NISUZUKSk7CisKKwkJCVdSQ1RMKENUTF9QVEVBRERSLCAodmFkZHIgPj4gMTIpIDw8IDIpOworCQkJdGxibWlzYyA9IHBpZF9taXNjIHwgVExCTUlTQ19XRSB8CisJCQkJKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCQlXUkNUTChDVExfVExCTUlTQywgdGxibWlzYyk7CisJCQlXUkNUTChDVExfVExCQUNDLCAoTUFYX1BIWVNfQUREUiA+PiBQQUdFX1NISUZUKSk7CisJCX0KKwl9CisKKwlXUkNUTChDVExfVExCTUlTQywgb3JnX21pc2MpOworfQorCit2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCXVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgbW11X3BpZCA9IGdldF9waWRfZnJvbV9jb250ZXh0KCZ2bWEtPnZtX21tLT5jb250ZXh0KTsKKworCXdoaWxlIChzdGFydCA8IGVuZCkgeworCQlmbHVzaF90bGJfb25lX3BpZChzdGFydCwgbW11X3BpZCk7CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwl9Cit9CisKK3ZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJZmx1c2hfdGxiX29uZShzdGFydCk7CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIG9uZSBpcyBvbmx5IHVzZWQgZm9yIHBhZ2VzIHdpdGggdGhlIGdsb2JhbCBiaXQgc2V0IHNvIHdlIGRvbid0IGNhcmUKKyAqIG11Y2ggYWJvdXQgdGhlIEFTSUQuCisgKi8KK3ZvaWQgZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgaW50IHdheTsKKwl1bnNpZ25lZCBsb25nIG9yZ19taXNjLCBwaWRfbWlzYzsKKworCXByX2RlYnVnKCJGbHVzaCB0bGItZW50cnkgZm9yIHZhZGRyPSUjbHhcbiIsIGFkZHIpOworCisJLyogcmVtZW1iZXIgcGlkL3dheSB1bnRpbCB3ZSByZXR1cm4uICovCisJZ2V0X21pc2NfYW5kX3BpZCgmb3JnX21pc2MsICZwaWRfbWlzYyk7CisKKwlXUkNUTChDVExfUFRFQUREUiwgKGFkZHIgPj4gUEFHRV9TSElGVCkgPDwgMik7CisKKwlmb3IgKHdheSA9IDA7IHdheSA8IGNwdWluZm8udGxiX251bV93YXlzOyB3YXkrKykgeworCQl1bnNpZ25lZCBsb25nIHB0ZWFkZHI7CisJCXVuc2lnbmVkIGxvbmcgdGxibWlzYzsKKworCQl0bGJtaXNjID0gcGlkX21pc2MgfCBUTEJNSVNDX1JEIHwgKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCVdSQ1RMKENUTF9UTEJNSVNDLCB0bGJtaXNjKTsKKwkJcHRlYWRkciA9IFJEQ1RMKENUTF9QVEVBRERSKTsKKwkJdGxibWlzYyA9IFJEQ1RMKENUTF9UTEJNSVNDKTsKKworCQlpZiAoKCgocHRlYWRkciA+PiAyKSAmIDB4ZmZmZmYpKSA9PSAoYWRkciA+PiBQQUdFX1NISUZUKSkgeworCQkJdW5zaWduZWQgbG9uZyB2YWRkciA9IENPTkZJR19OSU9TMl9JT19SRUdJT05fQkFTRSArCisJCQkJKChQQUdFX1NJWkUgKiBjcHVpbmZvLnRsYl9udW1fbGluZXMpICogd2F5KSArCisJCQkJKGFkZHIgJiBUTEJfSU5ERVhfTUFTSyk7CisKKwkJCXByX2RlYnVnKCJGbHVzaCBlbnRyeSBieSB3cml0aW5nICUjbHggd2F5PSVkbCBwaWQ9JWxkXG4iLAorCQkJCXZhZGRyLCB3YXksIChwaWRfbWlzYyA+PiBUTEJNSVNDX1BJRF9TSElGVCkpOworCisJCQl0bGJtaXNjID0gcGlkX21pc2MgfCBUTEJNSVNDX1dFIHwKKwkJCQkod2F5IDw8IFRMQk1JU0NfV0FZX1NISUZUKTsKKwkJCVdSQ1RMKENUTF9QVEVBRERSLCAodmFkZHIgPj4gMTIpIDw8IDIpOworCQkJV1JDVEwoQ1RMX1RMQk1JU0MsIHRsYm1pc2MpOworCQkJV1JDVEwoQ1RMX1RMQkFDQywgKE1BWF9QSFlTX0FERFIgPj4gUEFHRV9TSElGVCkpOworCQl9CisJfQorCisJV1JDVEwoQ1RMX1RMQk1JU0MsIG9yZ19taXNjKTsKK30KKwordm9pZCBkdW1wX3RsYl9saW5lKHVuc2lnbmVkIGxvbmcgbGluZSkKK3sKKwl1bnNpZ25lZCBpbnQgd2F5OworCXVuc2lnbmVkIGxvbmcgb3JnX21pc2M7CisKKwlwcl9kZWJ1ZygiZHVtcCB0bGItZW50cmllcyBmb3IgbGluZT0lI2x4IChhZGRyICUwOGx4KVxuIiwgbGluZSwKKwkJbGluZSA8PCAoUEFHRV9TSElGVCArIGNwdWluZm8udGxiX251bV93YXlzX2xvZzIpKTsKKworCS8qIHJlbWVtYmVyIHBpZC93YXkgdW50aWwgd2UgcmV0dXJuICovCisJb3JnX21pc2MgPSAoUkRDVEwoQ1RMX1RMQk1JU0MpICYgKFRMQk1JU0NfUElEIHwgVExCTUlTQ19XQVkpKTsKKworCVdSQ1RMKENUTF9QVEVBRERSLCBsaW5lIDw8IDIpOworCisJZm9yICh3YXkgPSAwOyB3YXkgPCBjcHVpbmZvLnRsYl9udW1fd2F5czsgd2F5KyspIHsKKwkJdW5zaWduZWQgbG9uZyBwdGVhZGRyOworCQl1bnNpZ25lZCBsb25nIHRsYm1pc2M7CisJCXVuc2lnbmVkIGxvbmcgdGxiYWNjOworCisJCVdSQ1RMKENUTF9UTEJNSVNDLCBUTEJNSVNDX1JEIHwgKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCkpOworCQlwdGVhZGRyID0gUkRDVEwoQ1RMX1BURUFERFIpOworCQl0bGJtaXNjID0gUkRDVEwoQ1RMX1RMQk1JU0MpOworCQl0bGJhY2MgPSBSRENUTChDVExfVExCQUNDKTsKKworCQlpZiAoKHRsYmFjYyA8PCBQQUdFX1NISUZUKSAhPSAoTUFYX1BIWVNfQUREUiAmIFBBR0VfTUFTSykpIHsKKwkJCXByX2RlYnVnKCItLSB3YXk6JTAyeCB2cG46MHglMDhseCBwaHlzOjB4JTA4bHggcGlkOjB4JTAybHggZmxhZ3M6JWMlYyVjJWMlY1xuIiwKKwkJCQl3YXksCisJCQkJKHB0ZWFkZHIgPDwgKFBBR0VfU0hJRlQtMikpLAorCQkJCSh0bGJhY2MgPDwgUEFHRV9TSElGVCksCisJCQkJKCh0bGJtaXNjID4+IFRMQk1JU0NfUElEX1NISUZUKSAmCisJCQkJVExCTUlTQ19QSURfTUFTSyksCisJCQkJKHRsYmFjYyAmIF9QQUdFX1JFQUQgPyAncicgOiAnLScpLAorCQkJCSh0bGJhY2MgJiBfUEFHRV9XUklURSA/ICd3JyA6ICctJyksCisJCQkJKHRsYmFjYyAmIF9QQUdFX0VYRUMgPyAneCcgOiAnLScpLAorCQkJCSh0bGJhY2MgJiBfUEFHRV9HTE9CQUwgPyAnZycgOiAnLScpLAorCQkJCSh0bGJhY2MgJiBfUEFHRV9DQUNIRUQgPyAnYycgOiAnLScpKTsKKwkJfQorCX0KKworCVdSQ1RMKENUTF9UTEJNSVNDLCBvcmdfbWlzYyk7Cit9CisKK3ZvaWQgZHVtcF90bGIodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjcHVpbmZvLnRsYl9udW1fbGluZXM7IGkrKykKKwkJZHVtcF90bGJfbGluZShpKTsKK30KKwordm9pZCBmbHVzaF90bGJfcGlkKHVuc2lnbmVkIGxvbmcgcGlkKQoreworCXVuc2lnbmVkIGludCBsaW5lOworCXVuc2lnbmVkIGludCB3YXk7CisJdW5zaWduZWQgbG9uZyBvcmdfbWlzYywgcGlkX21pc2M7CisKKwkvKiByZW1lbWJlciBwaWQvd2F5IHVudGlsIHdlIHJldHVybiAqLworCWdldF9taXNjX2FuZF9waWQoJm9yZ19taXNjLCAmcGlkX21pc2MpOworCisJZm9yIChsaW5lID0gMDsgbGluZSA8IGNwdWluZm8udGxiX251bV9saW5lczsgbGluZSsrKSB7CisJCVdSQ1RMKENUTF9QVEVBRERSLCBsaW5lIDw8IDIpOworCisJCWZvciAod2F5ID0gMDsgd2F5IDwgY3B1aW5mby50bGJfbnVtX3dheXM7IHdheSsrKSB7CisJCQl1bnNpZ25lZCBsb25nIHB0ZWFkZHI7CisJCQl1bnNpZ25lZCBsb25nIHRsYm1pc2M7CisJCQl1bnNpZ25lZCBsb25nIHRsYmFjYzsKKworCQkJdGxibWlzYyA9IHBpZF9taXNjIHwgVExCTUlTQ19SRCB8CisJCQkJKHdheSA8PCBUTEJNSVNDX1dBWV9TSElGVCk7CisJCQlXUkNUTChDVExfVExCTUlTQywgdGxibWlzYyk7CisJCQlwdGVhZGRyID0gUkRDVEwoQ1RMX1BURUFERFIpOworCQkJdGxibWlzYyA9IFJEQ1RMKENUTF9UTEJNSVNDKTsKKwkJCXRsYmFjYyA9IFJEQ1RMKENUTF9UTEJBQ0MpOworCisJCQlpZiAoKCh0bGJtaXNjPj5UTEJNSVNDX1BJRF9TSElGVCkgJiBUTEJNSVNDX1BJRF9NQVNLKQorCQkJCT09IHBpZCkgeworCQkJCXRsYm1pc2MgPSBwaWRfbWlzYyB8IFRMQk1JU0NfV0UgfAorCQkJCQkod2F5IDw8IFRMQk1JU0NfV0FZX1NISUZUKTsKKwkJCQlXUkNUTChDVExfVExCTUlTQywgdGxibWlzYyk7CisJCQkJV1JDVEwoQ1RMX1RMQkFDQywKKwkJCQkJKE1BWF9QSFlTX0FERFIgPj4gUEFHRV9TSElGVCkpOworCQkJfQorCQl9CisKKwkJV1JDVEwoQ1RMX1RMQk1JU0MsIG9yZ19taXNjKTsKKwl9Cit9CisKK3ZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBDT05GSUdfTklPUzJfSU9fUkVHSU9OX0JBU0U7CisJdW5zaWduZWQgaW50IHdheTsKKwl1bnNpZ25lZCBsb25nIG9yZ19taXNjLCBwaWRfbWlzYywgdGxibWlzYzsKKworCS8qIHJlbWVtYmVyIHBpZC93YXkgdW50aWwgd2UgcmV0dXJuICovCisJZ2V0X21pc2NfYW5kX3BpZCgmb3JnX21pc2MsICZwaWRfbWlzYyk7CisJcGlkX21pc2MgfD0gVExCTUlTQ19XRTsKKworCS8qIE1hcCBlYWNoIFRMQiBlbnRyeSB0byBwaHlzY2FsIGFkZHJlc3MgMCB3aXRoIG5vLWFjY2VzcyBhbmQgYQorCSAgIGJhZCBwdGJhc2UgKi8KKwlmb3IgKHdheSA9IDA7IHdheSA8IGNwdWluZm8udGxiX251bV93YXlzOyB3YXkrKykgeworCQl0bGJtaXNjID0gcGlkX21pc2MgfCAod2F5IDw8IFRMQk1JU0NfV0FZX1NISUZUKTsKKwkJZm9yIChpID0gMDsgaSA8IGNwdWluZm8udGxiX251bV9saW5lczsgaSsrKSB7CisJCQlXUkNUTChDVExfUFRFQUREUiwgKCh2YWRkcikgPj4gUEFHRV9TSElGVCkgPDwgMik7CisJCQlXUkNUTChDVExfVExCTUlTQywgdGxibWlzYyk7CisJCQlXUkNUTChDVExfVExCQUNDLCAoTUFYX1BIWVNfQUREUiA+PiBQQUdFX1NISUZUKSk7CisJCQl2YWRkciArPSAxVUwgPDwgMTI7CisJCX0KKwl9CisKKwkvKiByZXN0b3JlIHBpZC93YXkgKi8KKwlXUkNUTChDVExfVExCTUlTQywgb3JnX21pc2MpOworfQorCit2b2lkIHNldF9tbXVfcGlkKHVuc2lnbmVkIGxvbmcgcGlkKQoreworCVdSQ1RMKENUTF9UTEJNSVNDLCAoUkRDVEwoQ1RMX1RMQk1JU0MpICYgVExCTUlTQ19XQVkpIHwKKwkJKChwaWQgJiBUTEJNSVNDX1BJRF9NQVNLKSA8PCBUTEJNSVNDX1BJRF9TSElGVCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9tbS91YWNjZXNzLmMgYi9hcmNoL25pb3MyL21tL3VhY2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjYzZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9tbS91YWNjZXNzLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIFdpbmQgUml2ZXIgU3lzdGVtcyBJbmMKKyAqIEltcGxlbWVudGVkIGJ5IGZyZWRyaWsubWFya3N0cm9tQGdtYWlsLmNvbSBhbmQgaXZhcmhvbG1xdmlzdEBnbWFpbC5jb20KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCithc20oIi5nbG9iYWwJX19jb3B5X2Zyb21fdXNlclxuIgorCSIgICAudHlwZSBfX2NvcHlfZnJvbV91c2VyLCBAZnVuY3Rpb25cbiIKKwkiX19jb3B5X2Zyb21fdXNlcjpcbiIKKwkiICAgbW92aSAgcjIsN1xuIgorCSIgICBtb3YgICByMyxyNFxuIgorCSIgICBiZ2UgICByMixyNiwxZlxuIgorCSIgICB4b3IgICByMixyNCxyNVxuIgorCSIgICBhbmRpICByMixyMiwzXG4iCisJIiAgIG1vdmkgIHI3LDNcbiIKKwkiICAgYmVxICAgcjIsemVybyw0ZlxuIgorCSIxOiBhZGRpICByNixyNiwtMVxuIgorCSIgICBtb3ZpICByMiwtMVxuIgorCSIgICBiZXEgICByNixyMiwzZlxuIgorCSIgICBtb3YgICByNyxyMlxuIgorCSIyOiBsZGJ1ICByMiwwKHI1KVxuIgorCSIgICBhZGRpICByNixyNiwtMVxuIgorCSIgICBhZGRpICByNSxyNSwxXG4iCisJIiAgIHN0YiAgIHIyLDAocjMpXG4iCisJIiAgIGFkZGkgIHIzLHIzLDFcbiIKKwkiICAgYm5lICAgcjYscjcsMmJcbiIKKwkiMzpcbiIKKwkiICAgYWRkaSAgcjIscjYsMVxuIgorCSIgICByZXRcbiIKKwkiMTM6bW92ICAgcjIscjZcbiIKKwkiICAgcmV0XG4iCisJIjQ6IGFuZGkgIHIyLHI0LDFcbiIKKwkiICAgY21wZXEgcjIscjIsemVyb1xuIgorCSIgICBiZXEgICByMix6ZXJvLDdmXG4iCisJIjU6IGFuZGkgIHIyLHIzLDJcbiIKKwkiICAgYmVxICAgcjIsemVybyw2ZlxuIgorCSI5OiBsZGh1ICByMiwwKHI1KVxuIgorCSIgICBhZGRpICByNixyNiwtMlxuIgorCSIgICBhZGRpICByNSxyNSwyXG4iCisJIiAgIHN0aCAgIHIyLDAocjMpXG4iCisJIiAgIGFkZGkgIHIzLHIzLDJcbiIKKwkiNjogYmdlICAgcjcscjYsMWJcbiIKKwkiMTA6bGR3ICAgcjIsMChyNSlcbiIKKwkiICAgYWRkaSAgcjYscjYsLTRcbiIKKwkiICAgYWRkaSAgcjUscjUsNFxuIgorCSIgICBzdHcgICByMiwwKHIzKVxuIgorCSIgICBhZGRpICByMyxyMyw0XG4iCisJIiAgIGJyICAgIDZiXG4iCisJIjc6IGxkYnUgIHIyLDAocjUpXG4iCisJIiAgIGFkZGkgIHI2LHI2LC0xXG4iCisJIiAgIGFkZGkgIHI1LHI1LDFcbiIKKwkiICAgYWRkaSAgcjMscjQsMVxuIgorCSIgICBzdGIgICByMiwwKHI0KVxuIgorCSIgICBiciAgICA1YlxuIgorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJIi53b3JkIDJiLDNiXG4iCisJIi53b3JkIDliLDEzYlxuIgorCSIud29yZCAxMGIsMTNiXG4iCisJIi53b3JkIDdiLDEzYlxuIgorCSIucHJldmlvdXNcbiIKKwkpOworRVhQT1JUX1NZTUJPTChfX2NvcHlfZnJvbV91c2VyKTsKKworYXNtKAorCSIgICAuZ2xvYmFsIF9fY29weV90b191c2VyXG4iCisJIiAgIC50eXBlIF9fY29weV90b191c2VyLCBAZnVuY3Rpb25cbiIKKwkiX19jb3B5X3RvX3VzZXI6XG4iCisJIiAgIG1vdmkgIHIyLDdcbiIKKwkiICAgbW92ICAgcjMscjRcbiIKKwkiICAgYmdlICAgcjIscjYsMWZcbiIKKwkiICAgeG9yICAgcjIscjQscjVcbiIKKwkiICAgYW5kaSAgcjIscjIsM1xuIgorCSIgICBtb3ZpICByNywzXG4iCisJIiAgIGJlcSAgIHIyLHplcm8sNGZcbiIKKwkvKiBCYWlsIGlmIHdlIHRyeSB0byBjb3B5IHplcm8gYnl0ZXMgICovCisJIjE6IGFkZGkgIHI2LHI2LC0xXG4iCisJIiAgIG1vdmkgIHIyLC0xXG4iCisJIiAgIGJlcSAgIHI2LHIyLDNmXG4iCisJLyogQ29weSBieXRlIGJ5IGJ5dGUgZm9yIHNtYWxsIGNvcGllcyBhbmQgaWYgc3JjXmRzdCAhPSAwICovCisJIiAgIG1vdiAgIHI3LHIyXG4iCisJIjI6IGxkYnUgIHIyLDAocjUpXG4iCisJIiAgIGFkZGkgIHI1LHI1LDFcbiIKKwkiOTogc3RiICAgcjIsMChyMylcbiIKKwkiICAgYWRkaSAgcjYscjYsLTFcbiIKKwkiICAgYWRkaSAgcjMscjMsMVxuIgorCSIgICBibmUgICByNixyNywyYlxuIgorCSIzOiBhZGRpICByMixyNiwxXG4iCisJIiAgIHJldFxuIgorCSIxMzptb3YgICByMixyNlxuIgorCSIgICByZXRcbiIKKwkvKiAgSWYgJ3RvJyBpcyBhbiBvZGQgYWRkcmVzcyBieXRlIGNvcHkgKi8KKwkiNDogYW5kaSAgcjIscjQsMVxuIgorCSIgICBjbXBlcSByMixyMix6ZXJvXG4iCisJIiAgIGJlcSAgIHIyLHplcm8sN2ZcbiIKKwkvKiBJZiAndG8nIGlzIG5vdCBkaXZpZGVhYmxlIGJ5IGZvdXIgY29weSBoYWxmd29yZHMgKi8KKwkiNTogYW5kaSAgcjIscjMsMlxuIgorCSIgICBiZXEgICByMix6ZXJvLDZmXG4iCisJIiAgIGxkaHUgIHIyLDAocjUpXG4iCisJIiAgIGFkZGkgIHI1LHI1LDJcbiIKKwkiMTA6c3RoICAgcjIsMChyMylcbiIKKwkiICAgYWRkaSAgcjYscjYsLTJcbiIKKwkiICAgYWRkaSAgcjMscjMsMlxuIgorCS8qIENvcHkgd29yZHMgKi8KKwkiNjogYmdlICAgcjcscjYsMWJcbiIKKwkiICAgbGR3ICAgcjIsMChyNSlcbiIKKwkiICAgYWRkaSAgcjUscjUsNFxuIgorCSIxMTpzdHcgICByMiwwKHIzKVxuIgorCSIgICBhZGRpICByNixyNiwtNFxuIgorCSIgICBhZGRpICByMyxyMyw0XG4iCisJIiAgIGJyICAgIDZiXG4iCisJLyogQ29weSByZW1haW5pbmcgYnl0ZXMgKi8KKwkiNzogbGRidSAgcjIsMChyNSlcbiIKKwkiICAgYWRkaSAgcjUscjUsMVxuIgorCSIgICBhZGRpICByMyxyNCwxXG4iCisJIjEyOiBzdGIgIHIyLDAocjQpXG4iCisJIiAgIGFkZGkgIHI2LHI2LC0xXG4iCisJIiAgIGJyICAgIDViXG4iCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkiLndvcmQgOWIsM2JcbiIKKwkiLndvcmQgMTBiLDEzYlxuIgorCSIud29yZCAxMWIsMTNiXG4iCisJIi53b3JkIDEyYiwxM2JcbiIKKwkiLnByZXZpb3VzXG4iKTsKK0VYUE9SVF9TWU1CT0woX19jb3B5X3RvX3VzZXIpOworCitsb25nIHN0cm5jcHlfZnJvbV91c2VyKGNoYXIgKl9fdG8sIGNvbnN0IGNoYXIgX191c2VyICpfX2Zyb20sIGxvbmcgX19sZW4pCit7CisJaW50IGwgPSBzdHJubGVuX3VzZXIoX19mcm9tLCBfX2xlbik7CisJaW50IGlzX3p0ID0gMTsKKworCWlmIChsID4gX19sZW4pIHsKKwkJaXNfenQgPSAwOworCQlsID0gX19sZW47CisJfQorCisJaWYgKGwgPT0gMCB8fCBjb3B5X2Zyb21fdXNlcihfX3RvLCBfX2Zyb20sIGwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChpc196dCkKKwkJbC0tOworCXJldHVybiBsOworfQorCitsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqcywgbG9uZyBuKQoreworCWxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJY2hhciBjOworCisJCWlmIChnZXRfdXNlcihjLCBzICsgaSkgPT0gLUVGQVVMVCkKKwkJCXJldHVybiAwOworCQlpZiAoYyA9PSAwKQorCQkJcmV0dXJuIGkgKyAxOworCX0KKwlyZXR1cm4gbiArIDE7Cit9CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL3BsYXRmb3JtL0tjb25maWcucGxhdGZvcm0gYi9hcmNoL25pb3MyL3BsYXRmb3JtL0tjb25maWcucGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlNWRmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbmlvczIvcGxhdGZvcm0vS2NvbmZpZy5wbGF0Zm9ybQpAQCAtMCwwICsxLDEyOSBAQAorbWVudSAiUGxhdGZvcm0gb3B0aW9ucyIKKworY29tbWVudCAiTWVtb3J5IHNldHRpbmdzIgorCitjb25maWcgTklPUzJfTUVNX0JBU0UKKwloZXggIk1lbW9yeSBiYXNlIGFkZHJlc3MiCisJZGVmYXVsdCAiMHgwMDAwMDAwMCIKKwloZWxwCisJICBUaGlzIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgdGhhdCB0aGUga2VybmVsIHdpbGwgcnVuCisJICBmcm9tLiBUaGlzIGFkZHJlc3MgaXMgdXNlZCB0byBsaW5rIHRoZSBrZXJuZWwgYW5kIHNldHVwIGluaXRpYWwgbWVtb3J5CisJICBtYW5hZ2VtZW50LiBZb3Ugc2hvdWxkIHRha2UgdGhlIHJhdyBtZW1vcnkgYWRkcmVzcyB3aXRob3V0IGFueSBNTVUKKwkgIG9yIGNhY2hlIGJpdHMgc2V0LgorCSAgUGxlYXNlIG5vdCB0aGF0IHRoaXMgYWRkcmVzcyBpcyB1c2VkIGRpcmVjdGx5IHNvIHlvdSBoYXZlIHRvIG1hbnVhbGx5CisJICBkbyBhZGRyZXNzIHRyYW5zbGF0aW9uIGlmIGl0J3MgY29ubmVjdGVkIHRvIGEgYnJpZGdlLgorCitjb21tZW50ICJEZXZpY2UgdHJlZSIKKworY29uZmlnIE5JT1MyX0RUQl9BVF9QSFlTX0FERFIKKwlib29sICJEVEIgYXQgcGh5c2ljYWwgYWRkcmVzcyIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBXaGVuIGVuYWJsZWQgeW91IGNhbiBzZWxlY3QgYSBwaHlzaWNhbCBhZGRyZXNzIHRvIGxvYWQgdGhlIGR0YiBmcm9tLgorCSAgTm9ybWFsbHkgdGhpcyBhZGRyZXNzIGlzIHBhc3NlZCBieSBhIGJvb3Rsb2FkZXIgc3VjaCBhcyB1LWJvb3QgYnV0CisJICB1c2luZyB0aGlzIHlvdSBjYW4gdXNlIGEgZGV2aWNldHJlZSB3aXRob3V0IGEgYm9vdGxvYWRlci4KKwkgIFRoaXMgd2F5IHlvdSBjYW4gc3RvcmUgYSBkZXZpY2V0cmVlIGluIE5PUiBmbGFzaCBvciBhbiBvbmNoaXAgcm9tLgorCSAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGFkZHJlc3MgaXMgdXNlZCBkaXJlY3RseSBzbyB5b3UgaGF2ZSB0byBtYW51YWxseQorCSAgZG8gYWRkcmVzcyB0cmFuc2xhdGlvbiBpZiBpdCdzIGNvbm5lY3RlZCB0byBhIGJyaWRnZS4gQWxzbyB0YWtlIGludG8KKwkgIGFjY291bnQgdGhhdCB3aGVuIHVzaW5nIGFuIE1NVSB5b3UnZCBoYXZlIHRvIGFkIDB4QzAwMDAwMDAgdG8geW91cgorCSAgYWRkcmVzcworCitjb25maWcgTklPUzJfRFRCX1BIWVNfQUREUgorCWhleCAiRFRCIEFkZHJlc3MiCisJZGVwZW5kcyBvbiBOSU9TMl9EVEJfQVRfUEhZU19BRERSCisJZGVmYXVsdCAiMHhDMDAwMDAwMCIKKwloZWxwCisJICBQaHlzaWNhbCBhZGRyZXNzIG9mIGEgZHRiIGJsb2IuCisKK2NvbmZpZyBOSU9TMl9EVEJfU09VUkNFX0JPT0wKKwlib29sICJDb21waWxlIGFuZCBsaW5rIGRldmljZSB0cmVlIGludG8ga2VybmVsIGltYWdlIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgZHRzIChkZXZpY2UgdHJlZSBzb3VyY2UpIGZpbGUKKwkgIHdoaWNoIHdpbGwgYmUgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuCisKK2NvbmZpZyBOSU9TMl9EVEJfU09VUkNFCisJc3RyaW5nICJEZXZpY2UgdHJlZSBzb3VyY2UgZmlsZSIKKwlkZXBlbmRzIG9uIE5JT1MyX0RUQl9TT1VSQ0VfQk9PTAorCWRlZmF1bHQgIiIKKwloZWxwCisJICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkZXZpY2UgdHJlZSBzb3VyY2UgKGR0cykgZmlsZSBkZXNjcmliaW5nIHlvdXIKKwkgIHN5c3RlbS4KKworY29tbWVudCAiTmlvcyBJSSBpbnN0cnVjdGlvbnMiCisKK2NvbmZpZyBOSU9TMl9IV19NVUxfU1VQUE9SVAorCWJvb2wgIkVuYWJsZSBNVUwgaW5zdHJ1Y3Rpb24iCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2V0IHRvIHRydWUgaWYgeW91IGNvbmZpZ3VyZWQgdGhlIE5pb3MgSUkgdG8gaW5jbHVkZSB0aGUgTVVMCisJICBpbnN0cnVjdGlvbi4gIFRoaXMgd2lsbCBlbmFibGUgdGhlIC1taHctbXVsIGNvbXBpbGVyIGZsYWcuCisKK2NvbmZpZyBOSU9TMl9IV19NVUxYX1NVUFBPUlQKKwlib29sICJFbmFibGUgTVVMWCBpbnN0cnVjdGlvbiIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTZXQgdG8gdHJ1ZSBpZiB5b3UgY29uZmlndXJlZCB0aGUgTmlvcyBJSSB0byBpbmNsdWRlIHRoZSBNVUxYCisJICBpbnN0cnVjdGlvbi4gIEVuYWJsZXMgdGhlIC1taHctbXVseCBjb21waWxlciBmbGFnLgorCitjb25maWcgTklPUzJfSFdfRElWX1NVUFBPUlQKKwlib29sICJFbmFibGUgRElWIGluc3RydWN0aW9uIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNldCB0byB0cnVlIGlmIHlvdSBjb25maWd1cmVkIHRoZSBOaW9zIElJIHRvIGluY2x1ZGUgdGhlIERJVgorCSAgaW5zdHJ1Y3Rpb24uICBFbmFibGVzIHRoZSAtbWh3LWRpdiBjb21waWxlciBmbGFnLgorCitjb25maWcgTklPUzJfRlBVX1NVUFBPUlQKKwlib29sICJDdXN0b20gZmxvYXRpbmcgcG9pbnQgaW5zdHIgc3VwcG9ydCIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBFbmFibGVzIHRoZSAtbWN1c3RvbS1mcHUtY2ZnPTYwLTEgY29tcGlsZXIgZmxhZy4KKworY29uZmlnIE5JT1MyX0NJX1NXQUJfU1VQUE9SVAorCWJvb2wgIkJ5dGVzd2FwIGN1c3RvbSBpbnN0cnVjdGlvbiIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBVc2UgdGhlIGJ5dGVzd2FwIChlbmRpYW4gY29udmVydGVyKSBOaW9zIElJIGN1c3RvbSBpbnN0cnVjdGlvbiBwcm92aWRlZAorCSAgYnkgQWx0ZXJhIGFuZCB3aGljaCBjYW4gYmUgZW5hYmxlZCBpbiBRU1lTIGJ1aWxkZXIuIFRoaXMgYWNjZWxlcmF0ZXMKKwkgIGVuZGlhbiBjb252ZXJzaW9ucyBpbiB0aGUga2VybmVsIChlLmcuIG50b2hzKS4KKworY29uZmlnIE5JT1MyX0NJX1NXQUJfTk8KKwlpbnQgIkJ5dGVzd2FwIGN1c3RvbSBpbnN0cnVjdGlvbiBudW1iZXIiIGlmIE5JT1MyX0NJX1NXQUJfU1VQUE9SVAorCWRlZmF1bHQgMAorCWhlbHAKKwkgIE51bWJlciBvZiB0aGUgaW5zdHJ1Y3Rpb24gYXMgY29uZmlndXJlZCBpbiBRU1lTIEJ1aWxkZXIuCisKK2NvbW1lbnQgIkNhY2hlIHNldHRpbmdzIgorCitjb25maWcgQ1VTVE9NX0NBQ0hFX1NFVFRJTkdTCisJYm9vbCAiQ3VzdG9tIGNhY2hlIHNldHRpbmdzIgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdHdlYWsgdGhlIGNhY2hlIHNldHRpbmdzIHVzZWQgZHVyaW5nIGVhcmx5CisJICBib290ICh3aGVyZSB0aGUgaW5mb3JtYXRpb24gZnJvbSBkZXZpY2UgdHJlZSBpcyBub3QgeWV0IGF2YWlsYWJsZSkuCisJICBUaGVyZSBzaG91bGQgYmUgbm8gcmVhc29uIHRvIGNoYW5nZSB0aGVzZSB2YWx1ZXMuIExpbnV4IHdpbGwgd29yaworCSAgcGVyZmVjdGx5IGZpbmUsIGV2ZW4gaWYgdGhlIE5pb3MgSUkgaXMgY29uZmlndXJlZCB3aXRoIHNtYWxsZXIgY2FjaGVzLgorCisJICBTYXkgTiBoZXJlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKK2NvbmZpZyBOSU9TMl9EQ0FDSEVfU0laRQorCWhleCAiRC1DYWNoZSBzaXplIiBpZiBDVVNUT01fQ0FDSEVfU0VUVElOR1MKKwlyYW5nZSAweDIwMCAweDEwMDAwCisJZGVmYXVsdCAiMHg4MDAiCisJaGVscAorCSAgTWF4aW11bSBwb3NzaWJsZSBkYXRhIGNhY2hlIHNpemUuCisKK2NvbmZpZyBOSU9TMl9EQ0FDSEVfTElORV9TSVpFCisJaGV4ICJELUNhY2hlIGxpbmUgc2l6ZSIgaWYgQ1VTVE9NX0NBQ0hFX1NFVFRJTkdTCisJcmFuZ2UgMHgxMCAweDIwCisJZGVmYXVsdCAiMHgyMCIKKwloZWxwCisJICBNaW5pbXVtIHBvc3NpYmxlIGRhdGEgY2FjaGUgbGluZSBzaXplLgorCitjb25maWcgTklPUzJfSUNBQ0hFX1NJWkUKKwloZXggIkktQ2FjaGUgc2l6ZSIgaWYgQ1VTVE9NX0NBQ0hFX1NFVFRJTkdTCisJcmFuZ2UgMHgyMDAgMHgxMDAwMAorCWRlZmF1bHQgIjB4MTAwMCIKKwloZWxwCisJICBNYXhpbXVtIHBvc3NpYmxlIGluc3RydWN0aW9uIGNhY2hlIHNpemUuCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvcGxhdGZvcm0vTWFrZWZpbGUgYi9hcmNoL25pb3MyL3BsYXRmb3JtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzY0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL25pb3MyL3BsYXRmb3JtL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai15ICs9IHBsYXRmb3JtLm8KZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvcGxhdGZvcm0vcGxhdGZvcm0uYyBiL2FyY2gvbmlvczIvcGxhdGZvcm0vcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDc4NzczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9wbGF0Zm9ybS9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhvbWFzIENob3UKKyAqIENvcHlyaWdodCAoQykgMjAxMSBXYWx0ZXIgR29vc3NlbnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNfc29jLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworc3RhdGljIGludCBfX2luaXQgbmlvczJfc29jX2RldmljZV9pbml0KHZvaWQpCit7CisJc3RydWN0IHNvY19kZXZpY2UgKnNvY19kZXY7CisJc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlICpzb2NfZGV2X2F0dHI7CisJY29uc3QgY2hhciAqbWFjaGluZTsKKworCXNvY19kZXZfYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCpzb2NfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc29jX2Rldl9hdHRyKSB7CisJCW1hY2hpbmUgPSBvZl9mbGF0X2R0X2dldF9tYWNoaW5lX25hbWUoKTsKKwkJaWYgKG1hY2hpbmUpCisJCQlzb2NfZGV2X2F0dHItPm1hY2hpbmUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzIiwKKwkJCQkJCW1hY2hpbmUpOworCisJCXNvY19kZXZfYXR0ci0+ZmFtaWx5ID0gIk5pb3MgSUkiOworCisJCXNvY19kZXYgPSBzb2NfZGV2aWNlX3JlZ2lzdGVyKHNvY19kZXZfYXR0cik7CisJCWlmIChJU19FUlIoc29jX2RldikpIHsKKwkJCWtmcmVlKHNvY19kZXZfYXR0ci0+bWFjaGluZSk7CisJCQlrZnJlZShzb2NfZGV2X2F0dHIpOworCQl9CisJfQorCisJcmV0dXJuIG9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLAorCQlOVUxMLCBOVUxMKTsKK30KKworZGV2aWNlX2luaXRjYWxsKG5pb3MyX3NvY19kZXZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9ocHV4L2ZzLmMgYi9hcmNoL3BhcmlzYy9ocHV4L2ZzLmMKaW5kZXggMmJlZGFmZS4uOTdhN2JmOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaHB1eC9mcy5jCisrKyBiL2FyY2gvcGFyaXNjL2hwdXgvZnMuYwpAQCAtNTYsMTEgKzU2LDEyIEBACiAKICNkZWZpbmUgTkFNRV9PRkZTRVQoZGUpICgoaW50KSAoKGRlKS0+ZF9uYW1lIC0gKGNoYXIgX191c2VyICopIChkZSkpKQogCi1zdGF0aWMgaW50IGZpbGxkaXIodm9pZCAqIF9fYnVmLCBjb25zdCBjaGFyICogbmFtZSwgaW50IG5hbWxlbiwgbG9mZl90IG9mZnNldCwKLQkJdTY0IGlubywgdW5zaWduZWQgZF90eXBlKQorc3RhdGljIGludCBmaWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtbGVuLAorCQkgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBkX3R5cGUpCiB7CiAJc3RydWN0IGhwdXhfZGlyZW50IF9fdXNlciAqIGRpcmVudDsKLQlzdHJ1Y3QgZ2V0ZGVudHNfY2FsbGJhY2sgKiBidWYgPSAoc3RydWN0IGdldGRlbnRzX2NhbGxiYWNrICopIF9fYnVmOworCXN0cnVjdCBnZXRkZW50c19jYWxsYmFjayAqYnVmID0KKwkJY29udGFpbmVyX29mKGN0eCwgc3RydWN0IGdldGRlbnRzX2NhbGxiYWNrLCBjdHgpOwogCWlub190IGRfaW5vOwogCWludCByZWNsZW4gPSBBTElHTihOQU1FX09GRlNFVChkaXJlbnQpICsgbmFtbGVuICsgMSwgc2l6ZW9mKGxvbmcpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMWY2ZDJhZS4uOGNkMGFiZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pby5oCkBAIC0yMTcsMTAgKzIxNywxNCBAQAogI2RlZmluZSB3cml0ZWwJd3JpdGVsCiAjZGVmaW5lIHdyaXRlcQl3cml0ZXEKIAotI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQotI2RlZmluZSByZWFkcV9yZWxheGVkKGFkZHIpIHJlYWRxKGFkZHIpCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikJcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKQlyZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpCXJlYWRsKGFkZHIpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYWRkcikJcmVhZHEoYWRkcikKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQoYiwgYWRkcikJd3JpdGViKGIsIGFkZHIpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKHcsIGFkZHIpCXdyaXRldyh3LCBhZGRyKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZChsLCBhZGRyKQl3cml0ZWwobCwgYWRkcikKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQocSwgYWRkcikJd3JpdGVxKHEsIGFkZHIpCiAKICNkZWZpbmUgbW1pb3diKCkgZG8geyB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDk3ZDM4NjkuLjllYWYzMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCkBAIC02MTcsMTAgKzYxNywxNCBAQAogLyoKICAqIFdlIGRvbid0IGRvIHJlbGF4ZWQgb3BlcmF0aW9ucyB5ZXQsIGF0IGxlYXN0IG5vdCB3aXRoIHRoaXMgc2VtYW50aWMKICAqLwotI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQotI2RlZmluZSByZWFkcV9yZWxheGVkKGFkZHIpIHJlYWRxKGFkZHIpCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikJcmVhZGIoYWRkcikKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKQlyZWFkdyhhZGRyKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpCXJlYWRsKGFkZHIpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYWRkcikJcmVhZHEoYWRkcikKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQodiwgYWRkcikJd3JpdGViKHYsIGFkZHIpCisjZGVmaW5lIHdyaXRld19yZWxheGVkKHYsIGFkZHIpCXdyaXRldyh2LCBhZGRyKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZCh2LCBhZGRyKQl3cml0ZWwodiwgYWRkcikKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQodiwgYWRkcikJd3JpdGVxKHYsIGFkZHIpCiAKICNpZmRlZiBDT05GSUdfUFBDMzIKICNkZWZpbmUgbW1pb3diKCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb21tdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKaW5kZXggNDI2MzJjNy4uOWNmYTM3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKQEAgLTEzNywxMyArMTM3LDE2IEBACiAJaW9tbXVfYWRkX2RldmljZShkZXYpOwogfQogCi1leHRlcm4gaW50IGlvbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAotCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCi0JCQl1bnNpZ25lZCBsb25nIG1hc2ssIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKLWV4dGVybiB2b2lkIGlvbW11X3VubWFwX3NnKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKLQkJCSAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKK2V4dGVybiBpbnQgcHBjX2lvbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAorCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgbWFzaywKKwkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworZXh0ZXJuIHZvaWQgcHBjX2lvbW11X3VubWFwX3NnKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAorCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJICAgICAgIGludCBuZWxlbXMsCisJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKIAogZXh0ZXJuIHZvaWQgKmlvbW11X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCiAJCQkJICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGU5YTlmNjAuLmZjM2VlMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMyw3ICszLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgogCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKIGV4dGVybiB2b2lkIHRsYl9mbHVzaF9wZ3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CkBAIC0xNCw2ICsxMyw4IEBACiB9CiAjZW5kaWYgLyogIUNPTkZJR19QUENfQk9PSzNFICovCiAKK2V4dGVybiB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpOworCiAjaWZkZWYgQ09ORklHX1BQQzY0CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MtNjQuaD4KICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaAppbmRleCBhZTE1M2M0Li45YjRiMTkwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogfQogCiAjZGVmaW5lIHBtZF9wZm4ocG1kKQkJcHRlX3BmbihwbWRfcHRlKHBtZCkpCisjZGVmaW5lIHBtZF9kaXJ0eShwbWQpCQlwdGVfZGlydHkocG1kX3B0ZShwbWQpKQogI2RlZmluZSBwbWRfeW91bmcocG1kKQkJcHRlX3lvdW5nKHBtZF9wdGUocG1kKSkKICNkZWZpbmUgcG1kX21rb2xkKHBtZCkJCXB0ZV9wbWQocHRlX21rb2xkKHBtZF9wdGUocG1kKSkpCiAjZGVmaW5lIHBtZF93cnByb3RlY3QocG1kKQlwdGVfcG1kKHB0ZV93cnByb3RlY3QocG1kX3B0ZShwbWQpKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGIuaAppbmRleCBlMmI0MjhiLi4yMDczM2ZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5CV9fdGxiX3JlbW92ZV90bGJfZW50cnkKIAogZXh0ZXJuIHZvaWQgdGxiX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYwppbmRleCA1NGQwMTE2Li40YzY4YmZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMKQEAgLTYwLDE2ICs2MCwxNiBAQAogCQkJICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKLQlyZXR1cm4gaW9tbXVfbWFwX3NnKGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2dsaXN0LCBuZWxlbXMsCi0JCQkgICAgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CisJcmV0dXJuIHBwY19pb21tdV9tYXBfc2coZGV2LCBnZXRfaW9tbXVfdGFibGVfYmFzZShkZXYpLCBzZ2xpc3QsIG5lbGVtcywKKwkJCQlkZXZpY2VfdG9fbWFzayhkZXYpLCBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIAogc3RhdGljIHZvaWQgZG1hX2lvbW11X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCiAJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JaW9tbXVfdW5tYXBfc2coZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2dsaXN0LCBuZWxlbXMsIGRpcmVjdGlvbiwKLQkJICAgICAgIGF0dHJzKTsKKwlwcGNfaW9tbXVfdW5tYXBfc2coZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2dsaXN0LCBuZWxlbXMsCisJCQkgICBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIAogLyogV2Ugc3VwcG9ydCBETUEgdG8vZnJvbSBhbnkgbWVtb3J5IHBhZ2UgdmlhIHRoZSBpb21tdSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMKaW5kZXggMzkwMzExYy4uZTY2YWY2ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Z0cmFjZS5jCkBAIC00NDksNyArNDQ5LDcgQEAKIAkJcmVjID0gZnRyYWNlX3JlY19pdGVyX3JlY29yZChpdGVyKTsKIAkJcmV0ID0gX19mdHJhY2VfcmVwbGFjZV9jb2RlKHJlYywgZW5hYmxlKTsKIAkJaWYgKHJldCkgewotCQkJZnRyYWNlX2J1ZyhyZXQsIHJlYy0+aXApOworCQkJZnRyYWNlX2J1ZyhyZXQsIHJlYyk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKaW5kZXggYTEwNjQyYS4uYTgzY2Y1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwpAQCAtNDI4LDEwICs0MjgsMTAgQEAKIAkJcHBjX21kLnRjZV9mbHVzaCh0YmwpOwogfQogCi1pbnQgaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCi0JCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbGVtcywKLQkJIHVuc2lnbmVkIGxvbmcgbWFzaywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitpbnQgcHBjX2lvbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAorCQkgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgbWFzaywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCWRtYV9hZGRyX3QgZG1hX25leHQgPSAwLCBkbWFfYWRkcjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnMsICpvdXRzLCAqc2Vnc3RhcnQ7CkBAIC01MzksNyArNTM5LDcgQEAKIAogCURCRygibWFwcGVkICVkIGVsZW1lbnRzOlxuIiwgb3V0Y291bnQpOwogCi0JLyogRm9yIHRoZSBzYWtlIG9mIGlvbW11X3VubWFwX3NnLCB3ZSBjbGVhciBvdXQgdGhlIGxlbmd0aCBpbiB0aGUKKwkvKiBGb3IgdGhlIHNha2Ugb2YgcHBjX2lvbW11X3VubWFwX3NnLCB3ZSBjbGVhciBvdXQgdGhlIGxlbmd0aCBpbiB0aGUKIAkgKiBuZXh0IGVudHJ5IG9mIHRoZSBzZ2xpc3QgaWYgd2UgZGlkbid0IGZpbGwgdGhlIGxpc3QgY29tcGxldGVseQogCSAqLwogCWlmIChvdXRjb3VudCA8IGluY291bnQpIHsKQEAgLTU3Miw5ICs1NzIsOSBAQAogfQogCiAKLXZvaWQgaW9tbXVfdW5tYXBfc2coc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQordm9pZCBwcGNfaW9tbXVfdW5tYXBfc2coc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCA3ZTcwYWU5Li42YTRhNWZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtNTE3LDggKzUxNyw2IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9odWdlcGQ7IGkrKywgaHBkcCsrKQogCQlocGRwLT5wZCA9IDA7CiAKLQl0bGItPm5lZWRfZmx1c2ggPSAxOwotCiAjaWZkZWYgQ09ORklHX1BQQ19GU0xfQk9PSzNFCiAJaHVnZXBkX2ZyZWUodGxiLCBodWdlcHRlKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC9zcHVfdGFza19zeW5jLmMgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC9zcHVfdGFza19zeW5jLmMKaW5kZXggMjhmMWFmMi4uMWMyNzgzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvc3B1X3Rhc2tfc3luYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3NwdV90YXNrX3N5bmMuYwpAQCAtMzMxLDggKzMzMSw3IEBACiAKIAlpZiAobW0tPmV4ZV9maWxlKSB7CiAJCWFwcF9jb29raWUgPSBmYXN0X2dldF9kY29va2llKCZtbS0+ZXhlX2ZpbGUtPmZfcGF0aCk7Ci0JCXByX2RlYnVnKCJnb3QgZGNvb2tpZSBmb3IgJXNcbiIsCi0JCQkgbW0tPmV4ZV9maWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQlwcl9kZWJ1ZygiZ290IGRjb29raWUgZm9yICVwRFxuIiwgbW0tPmV4ZV9maWxlKTsKIAl9CiAKIAlmb3IgKHZtYSA9IG1tLT5tbWFwOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgewpAQCAtMzQyLDE1ICszNDEsMTQgQEAKIAkJaWYgKCF2bWEtPnZtX2ZpbGUpCiAJCQlnb3RvIGZhaWxfbm9faW1hZ2VfY29va2llOwogCi0JCXByX2RlYnVnKCJGb3VuZCBzcHUgRUxGIGF0ICVYKG9iamVjdC1pZDolbHgpIGZvciBmaWxlICVzXG4iLAotCQkJIG15X29mZnNldCwgc3B1X3JlZiwKLQkJCSB2bWEtPnZtX2ZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCXByX2RlYnVnKCJGb3VuZCBzcHUgRUxGIGF0ICVYKG9iamVjdC1pZDolbHgpIGZvciBmaWxlICVwRFxuIiwKKwkJCSBteV9vZmZzZXQsIHNwdV9yZWYsIHZtYS0+dm1fZmlsZSk7CiAJCSpvZmZzZXRwID0gbXlfb2Zmc2V0OwogCQlicmVhazsKIAl9CiAKIAkqc3B1X2Jpbl9kY29va2llID0gZmFzdF9nZXRfZGNvb2tpZSgmdm1hLT52bV9maWxlLT5mX3BhdGgpOwotCXByX2RlYnVnKCJnb3QgZGNvb2tpZSBmb3IgJXNcbiIsIHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lKTsKKwlwcl9kZWJ1ZygiZ290IGRjb29raWUgZm9yICVwRFxuIiwgdm1hLT52bV9maWxlKTsKIAogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKaW5kZXggODYyYjMyNy4uMDg4Mzk5NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogCiAJCWlycV9zZXRfbXNpX2Rlc2ModmlycSwgZW50cnkpOwogCQltc2cuZGF0YSA9IHZpcnE7Ci0JCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzAxLDkgKzMwMSw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpY19pcnFfY2hpcCA9IHsKLQkuaXJxX21hc2sJPSBtYXNrX21zaV9pcnEsCi0JLmlycV91bm1hc2sJPSB1bm1hc2tfbXNpX2lycSwKLQkuaXJxX3NodXRkb3duCT0gbWFza19tc2lfaXJxLAorCS5pcnFfbWFzawk9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sJPSBwY2lfbXNpX3VubWFza19pcnEsCisJLmlycV9zaHV0ZG93bgk9IHBjaV9tc2lfbWFza19pcnEsCiAJLm5hbWUJCT0gIkFYT04tTVNJIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKaW5kZXggMmI5MGZmOC4uYzdjODcyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKQEAgLTYyMSw4ICs2MjEsOSBAQAogCWlmIChpb21tdV9maXhlZF9pc193ZWFrID09IGRtYV9nZXRfYXR0cihETUFfQVRUUl9XRUFLX09SREVSSU5HLCBhdHRycykpCiAJCXJldHVybiBkbWFfZGlyZWN0X29wcy5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbiwgYXR0cnMpOwogCWVsc2UKLQkJcmV0dXJuIGlvbW11X21hcF9zZyhkZXYsIGNlbGxfZ2V0X2lvbW11X3RhYmxlKGRldiksIHNnLCBuZW50cywKLQkJCQkgICAgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CisJCXJldHVybiBwcGNfaW9tbXVfbWFwX3NnKGRldiwgY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KSwgc2csCisJCQkJCW5lbnRzLCBkZXZpY2VfdG9fbWFzayhkZXYpLAorCQkJCQlkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIAogc3RhdGljIHZvaWQgZG1hX2ZpeGVkX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKQEAgLTYzMiw4ICs2MzMsOCBAQAogCWlmIChpb21tdV9maXhlZF9pc193ZWFrID09IGRtYV9nZXRfYXR0cihETUFfQVRUUl9XRUFLX09SREVSSU5HLCBhdHRycykpCiAJCWRtYV9kaXJlY3Rfb3BzLnVubWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24sIGF0dHJzKTsKIAllbHNlCi0JCWlvbW11X3VubWFwX3NnKGNlbGxfZ2V0X2lvbW11X3RhYmxlKGRldiksIHNnLCBuZW50cywgZGlyZWN0aW9uLAotCQkJICAgICAgIGF0dHJzKTsKKwkJcHBjX2lvbW11X3VubWFwX3NnKGNlbGxfZ2V0X2lvbW11X3RhYmxlKGRldiksIHNnLCBuZW50cywKKwkJCQkgICBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIAogc3RhdGljIGludCBkbWFfZml4ZWRfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwppbmRleCA4N2JhN2NmLi4xYTM0MjllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqdG1wOwogCiAJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVudHJ5LCB0bXAsICZkaXItPmRfc3ViZGlycywgZF91LmRfY2hpbGQpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVudHJ5LCB0bXAsICZkaXItPmRfc3ViZGlycywgZF9jaGlsZCkgewogCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJaWYgKCEoZF91bmhhc2hlZChkZW50cnkpKSAmJiBkZW50cnktPmRfaW5vZGUpIHsKIAkJCWRnZXRfZGxvY2soZGVudHJ5KTsKQEAgLTMwMSw3ICszMDEsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAKLQlyZXQgPSBnZXRfdW51c2VkX2ZkKCk7CisJcmV0ID0gZ2V0X3VudXNlZF9mZF9mbGFncygwKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTE4LDcgKzUxOCw3IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIAotCXJldCA9IGdldF91bnVzZWRfZmQoKTsKKwlyZXQgPSBnZXRfdW51c2VkX2ZkX2ZsYWdzKDApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1zZW5zb3IuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXNlbnNvci5jCmluZGV4IDEwMjcxYWQuLjRhYjY3ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXNlbnNvci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXNlbnNvci5jCkBAIC0yMCw3ICsyMCw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxhc20vb3BhbC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAKIHN0YXRpYyBERUZJTkVfTVVURVgob3BhbF9zZW5zb3JfbXV0ZXgpOwogCkBAIC02NCwzICs2NiwyMSBAQAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvcGFsX2dldF9zZW5zb3JfZGF0YSk7CisKK3N0YXRpYyBfX2luaXQgaW50IG9wYWxfc2Vuc29yX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc2Vuc29yOworCisJc2Vuc29yID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9pYm0sb3BhbC9zZW5zb3JzIik7CisJaWYgKCFzZW5zb3IpIHsKKwkJcHJfZXJyKCJPcGFsIG5vZGUgJ3NlbnNvcnMnIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBkZXYgPSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKHNlbnNvciwgIm9wYWwtc2Vuc29yIiwgTlVMTCk7CisJb2Zfbm9kZV9wdXQoc2Vuc29yKTsKKworCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocGRldik7Cit9CittYWNoaW5lX3N1YnN5c19pbml0Y2FsbChwb3dlcm52LCBvcGFsX3NlbnNvcl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYwppbmRleCA0YjIwZjJjLi41NDBmYzZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS5jCkBAIC05MCw3ICs5MCw3IEBACiAJCQlyZXR1cm4gcmM7CiAJCX0KIAkJaXJxX3NldF9tc2lfZGVzYyh2aXJxLCBlbnRyeSk7Ci0JCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYwppbmRleCA4YjkwOWU5Li42OTFhMTU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCkBAIC00NzYsNyArNDc2LDcgQEAKIAkJaXJxX3NldF9tc2lfZGVzYyh2aXJxLCBlbnRyeSk7CiAKIAkJLyogUmVhZCBjb25maWcgc3BhY2UgYmFjayBzbyB3ZSBjYW4gcmVzdG9yZSBhZnRlciByZXNldCAqLwotCQlfX3JlYWRfbXNpX21zZyhlbnRyeSwgJm1zZyk7CisJCV9fcGNpX3JlYWRfbXNpX21zZyhlbnRyeSwgJm1zZyk7CiAJCWVudHJ5LT5tc2cgPSBtc2c7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IGRhMDhlZDAuLjdhZWQ4ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC04Miw4ICs4Miw4IEBACiAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBmc2xfbXNpX2NoaXAgPSB7Ci0JLmlycV9tYXNrCT0gbWFza19tc2lfaXJxLAotCS5pcnFfdW5tYXNrCT0gdW5tYXNrX21zaV9pcnEsCisJLmlycV9tYXNrCT0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzawk9IHBjaV9tc2lfdW5tYXNrX2lycSwKIAkuaXJxX2Fjawk9IGZzbF9tc2lfZW5kX2lycSwKIAkuaXJxX3ByaW50X2NoaXAgPSBmc2xfbXNpX3ByaW50X2NoaXAsCiB9OwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJCWlycV9zZXRfbXNpX2Rlc2ModmlycSwgZW50cnkpOwogCiAJCWZzbF9jb21wb3NlX21zaV9tc2cocGRldiwgaHdpcnEsICZtc2csIG1zaV9kYXRhKTsKLQkJd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKKwkJcGNpX3dyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CiAJfQogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYwppbmRleCAxNWRjY2QzLi40NWMxMTRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKQEAgLTQyLDcgKzQyLDcgQEAKIHN0YXRpYyB2b2lkIG1waWNfcGFzZW1pX21zaV9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CiAJcHJfZGVidWcoIm1waWNfcGFzZW1pX21zaV9tYXNrX2lycSAlZFxuIiwgZGF0YS0+aXJxKTsKLQltYXNrX21zaV9pcnEoZGF0YSk7CisJcGNpX21zaV9tYXNrX2lycShkYXRhKTsKIAltcGljX21hc2tfaXJxKGRhdGEpOwogfQogCkBAIC01MCw3ICs1MCw3IEBACiB7CiAJcHJfZGVidWcoIm1waWNfcGFzZW1pX21zaV91bm1hc2tfaXJxICVkXG4iLCBkYXRhLT5pcnEpOwogCW1waWNfdW5tYXNrX2lycShkYXRhKTsKLQl1bm1hc2tfbXNpX2lycShkYXRhKTsKKwlwY2lfbXNpX3VubWFza19pcnEoZGF0YSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXBpY19wYXNlbWlfbXNpX2NoaXAgPSB7CkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJICogcmVnaXN0ZXIgdG8gZ2VuZXJhdGUgTVNJIFs1MTIuLi4xMDIzXQogCQkgKi8KIAkJbXNnLmRhdGEgPSBod2lycS0weDIwMDsKLQkJd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKKwkJcGNpX3dyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jCmluZGV4IDYyM2Q3ZmIuLjBkZmYxY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogc3RhdGljIHZvaWQgbXBpY191M21zaV9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JbWFza19tc2lfaXJxKGRhdGEpOworCXBjaV9tc2lfbWFza19pcnEoZGF0YSk7CiAJbXBpY19tYXNrX2lycShkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgbXBpY191M21zaV91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAltcGljX3VubWFza19pcnEoZGF0YSk7Ci0JdW5tYXNrX21zaV9pcnEoZGF0YSk7CisJcGNpX21zaV91bm1hc2tfaXJxKGRhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1waWNfdTNtc2lfY2hpcCA9IHsKQEAgLTE3MSw3ICsxNzEsNyBAQAogCQlwcmludGsoInUzbXNpOiBhbGxvY2F0ZWQgdmlycSAweCV4IChodyAweCV4KSBhZGRyIDB4JWx4XG4iLAogCQkJICB2aXJxLCBod2lycSwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CiAJCW1zZy5kYXRhID0gaHdpcnE7Ci0JCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOwogCiAJCWh3aXJxKys7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfaHN0YV9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X2hzdGFfbXNpLmMKaW5kZXggYTZhNGRiZC4uOTA4MTA1ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfaHN0YV9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9oc3RhX21zaS5jCkBAIC04NSw3ICs4NSw3IEBACiAJCQltc2lfYml0bWFwX2ZyZWVfaHdpcnFzKCZwcGM0eHhfaHN0YV9tc2kuYm1wLCBpcnEsIDEpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJd3JpdGVfbXNpX21zZyhod2lycSwgJm1zZyk7CisJCXBjaV93cml0ZV9tc2lfbXNnKGh3aXJxLCAmbXNnKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfbXNpLmMKaW5kZXggMjJiNTIwMC4uNTE4ZWFiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfbXNpLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCiAJCWlycV9zZXRfbXNpX2Rlc2ModmlycSwgZW50cnkpOwogCQltc2cuZGF0YSA9IGludF9ubzsKLQkJd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKKwkJcGNpX3dyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1vcGFsLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNzLW9wYWwuYwppbmRleCAzYzZlZTFiLi40YmE1NTRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNzLW9wYWwuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNzLW9wYWwuYwpAQCAtNzMsNyArNzMsNyBAQAogCSAqIGF0IHRoYXQgbGV2ZWwsIHNvIHdlIGRvIGl0IGhlcmUgYnkgaGFuZC4KIAkgKi8KIAlpZiAoZC0+bXNpX2Rlc2MpCi0JCXVubWFza19tc2lfaXJxKGQpOworCQlwY2lfbXNpX3VubWFza19pcnEoZCk7CiAjZW5kaWYKIAogCS8qIHVubWFzayBpdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1ydGFzLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNzLXJ0YXMuYwppbmRleCA5MzY1NzVkLi5iYzgxMzM1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1ydGFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1ydGFzLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkgKiBhdCB0aGF0IGxldmVsLCBzbyB3ZSBkbyBpdCBoZXJlIGJ5IGhhbmQuCiAJICovCiAJaWYgKGQtPm1zaV9kZXNjKQotCQl1bm1hc2tfbXNpX2lycShkKTsKKwkJcGNpX21zaV91bm1hc2tfaXJxKGQpOwogI2VuZGlmCiAJLyogdW5tYXNrIGl0ICovCiAJaWNzX3J0YXNfdW5tYXNrX2lycShkKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kYmZzLmMgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGJmcy5jCmluZGV4IDJiYWRmMmIuLjQ3ZmUxMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kYmZzLmMKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RiZnMuYwpAQCAtODMsMTAgKzgzLDkgQEAKIAogc3RhdGljIGxvbmcgZGJmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGh5cGZzX2RiZnNfZmlsZSAqZGY7CisJc3RydWN0IGh5cGZzX2RiZnNfZmlsZSAqZGYgPSBmaWxlX2lub2RlKGZpbGUpLT5pX3ByaXZhdGU7CiAJbG9uZyByYzsKIAotCWRmID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCW11dGV4X2xvY2soJmRmLT5sb2NrKTsKIAlpZiAoZGYtPnVubG9ja2VkX2lvY3RsKQogCQlyYyA9IGRmLT51bmxvY2tlZF9pb2N0bChmaWxlLCBjbWQsIGFyZyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGNkNmI5ZWUuLjZhZDkwMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5oCkBAIC0xMyw5ICsxMywxMCBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BjaV9pby5oPgogCi12b2lkICp4bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMpOwogI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0ciB4bGF0ZV9kZXZfbWVtX3B0cgotdm9pZCB1bnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgcGh5cywgdm9pZCAqYWRkcik7Cit2b2lkICp4bGF0ZV9kZXZfbWVtX3B0cihwaHlzX2FkZHJfdCBwaHlzKTsKKyNkZWZpbmUgdW54bGF0ZV9kZXZfbWVtX3B0ciB1bnhsYXRlX2Rldl9tZW1fcHRyCit2b2lkIHVueGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqYWRkcik7CiAKIC8qCiAgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCkBAIC02MCwxMSArNjEsNiBAQAogI2RlZmluZSBfX3Jhd193cml0ZWwJenBjaV93cml0ZV91MzIKICNkZWZpbmUgX19yYXdfd3JpdGVxCXpwY2lfd3JpdGVfdTY0CiAKLSNkZWZpbmUgcmVhZGJfcmVsYXhlZAlyZWFkYgotI2RlZmluZSByZWFkd19yZWxheGVkCXJlYWR3Ci0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQJcmVhZGwKLSNkZWZpbmUgcmVhZHFfcmVsYXhlZAlyZWFkcQotCiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggMzgxNWJmZS4uZjQ5YjcxOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTEyMCw0ICsxMjAsMTUgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfdW5tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9icHJtX21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKK30KKwogI2VuZGlmIC8qIF9fUzM5MF9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL25taS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYwppbmRleCBkZDFjMjRjLi4zZjUxY2Y0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL25taS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKQEAgLTU0LDEyICs1NCw4IEBACiAJICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWxvY2FsX21jY2tfZGlzYWJsZSgpOwotCS8qCi0JICogVW1tbS4uLiBEb2VzIHRoaXMgbWFrZSBzZW5zZSBhdCBhbGw/IENvcHlpbmcgdGhlIHBlcmNwdSBzdHJ1Y3QKLQkgKiBhbmQgdGhlbiB6YXBwaW5nIGl0IG9uZSBzdGF0ZW1lbnQgbGF0ZXI/Ci0JICovCi0JbWVtY3B5KCZtY2NrLCB0aGlzX2NwdV9wdHIoJmNwdV9tY2NrKSwgc2l6ZW9mKG1jY2spKTsKLQltZW1zZXQoJm1jY2ssIDAsIHNpemVvZihzdHJ1Y3QgbWNja19zdHJ1Y3QpKTsKKwltY2NrID0gKnRoaXNfY3B1X3B0cigmY3B1X21jY2spOworCW1lbXNldCh0aGlzX2NwdV9wdHIoJmNwdV9tY2NrKSwgMCwgc2l6ZW9mKG1jY2spKTsKIAljbGVhcl9jcHVfZmxhZyhDSUZfTUNDS19QRU5ESU5HKTsKIAlsb2NhbF9tY2NrX2VuYWJsZSgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9tYWNjZXNzLmMgYi9hcmNoL3MzOTAvbW0vbWFjY2Vzcy5jCmluZGV4IDJhMmUzNTQuLjJlYjM0YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9tYWNjZXNzLmMKKysrIGIvYXJjaC9zMzkwL21tL21hY2Nlc3MuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAgKiBGb3Igc3dhcHBlZCBwcmVmaXggcGFnZXMgYSBuZXcgYnVmZmVyIGlzIHJldHVybmVkIHRoYXQgY29udGFpbnMgYSBjb3B5IG9mCiAgKiB0aGUgYWJzb2x1dGUgbWVtb3J5LiBUaGUgYnVmZmVyIHNpemUgaXMgbWF4aW11bSBvbmUgcGFnZSBsYXJnZS4KICAqLwotdm9pZCAqeGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBhZGRyKQordm9pZCAqeGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgYWRkcikKIHsKIAl2b2lkICpib3VuY2UgPSAodm9pZCAqKSBhZGRyOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogLyoKICAqIEZyZWUgY29udmVydGVkIGJ1ZmZlciBmb3IgL2Rldi9tZW0gYWNjZXNzIChpZiBuZWNlc3NhcnkpCiAgKi8KLXZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZikKK3ZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cihwaHlzX2FkZHJfdCBhZGRyLCB2b2lkICpidWYpCiB7CiAJaWYgKCh2b2lkICopIGFkZHIgIT0gYnVmKQogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvcGNpL3BjaS5jIGIvYXJjaC9zMzkwL3BjaS9wY2kuYwppbmRleCAyZmE3YjE0Li5kNTljODI1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvcGNpL3BjaS5jCisrKyBiL2FyY2gvczM5MC9wY2kvcGNpLmMKQEAgLTUwLDggKzUwLDggQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB6cGNpX2lycV9jaGlwID0gewogCS5uYW1lID0gInpQQ0kiLAotCS5pcnFfdW5tYXNrID0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9tYXNrID0gbWFza19tc2lfaXJxLAorCS5pcnFfdW5tYXNrID0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfbWFzayA9IHBjaV9tc2lfbWFza19pcnEsCiB9OwogCiBzdGF0aWMgREVDTEFSRV9CSVRNQVAoenBjaV9kb21haW4sIFpQQ0lfTlJfREVWSUNFUyk7CkBAIC00MDMsNyArNDAzLDcgQEAKIAkJbXNnLmRhdGEgPSBod2lycTsKIAkJbXNnLmFkZHJlc3NfbG8gPSB6ZGV2LT5tc2lfYWRkciAmIDB4ZmZmZmZmZmY7CiAJCW1zZy5hZGRyZXNzX2hpID0gemRldi0+bXNpX2FkZHIgPj4gMzI7Ci0JCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwkJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAkJYWlycV9pdl9zZXRfZGF0YSh6ZGV2LT5haWJ2LCBod2lycSwgaXJxKTsKIAkJaHdpcnErKzsKIAl9CkBAIC00NDgsOSArNDQ4LDkgQEAKIAkvKiBSZWxlYXNlIE1TSSBpbnRlcnJ1cHRzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtc2ksICZwZGV2LT5tc2lfbGlzdCwgbGlzdCkgewogCQlpZiAobXNpLT5tc2lfYXR0cmliLmlzX21zaXgpCi0JCQlkZWZhdWx0X21zaXhfbWFza19pcnEobXNpLCAxKTsKKwkJCV9fcGNpX21zaXhfZGVzY19tYXNrX2lycShtc2ksIDEpOwogCQllbHNlCi0JCQlkZWZhdWx0X21zaV9tYXNrX2lycShtc2ksIDEsIDEpOworCQkJX19wY2lfbXNpX2Rlc2NfbWFza19pcnEobXNpLCAxLCAxKTsKIAkJaXJxX3NldF9tc2lfZGVzYyhtc2ktPmlycSwgTlVMTCk7CiAJCWlycV9mcmVlX2Rlc2MobXNpLT5pcnEpOwogCQltc2ktPm1zZy5hZGRyZXNzX2xvID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCAyNDRmYjRjLi5hMTQwMzQ3IDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0yMjIsNyArMjIyLDYgQEAKIGNvbmZpZyBBUkNIX1NITU9CSUxFCiAJYm9vbAogCXNlbGVjdCBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKLQlzZWxlY3QgUE0KIAlzZWxlY3QgUE1fUlVOVElNRQogCiBjb25maWcgQ1BVX0hBU19QTVUKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9jcHVpZGxlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvY3B1aWRsZS5jCmluZGV4IGUzYWJmZDQuLjUzYjhlZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9jcHVpZGxlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL2NwdWlkbGUuYwpAQCAtNTksNyArNTksNiBAQAogCQkJLmV4aXRfbGF0ZW5jeSA9IDEsCiAJCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDEgKiAyLAogCQkJLnBvd2VyX3VzYWdlID0gMywKLQkJCS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkJLmVudGVyID0gY3B1aWRsZV9zbGVlcF9lbnRlciwKIAkJCS5uYW1lID0gIkMxIiwKIAkJCS5kZXNjID0gIlN1cGVySCBTbGVlcCBNb2RlIiwKQEAgLTY4LDcgKzY3LDYgQEAKIAkJCS5leGl0X2xhdGVuY3kgPSAxMDAsCiAJCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDEgKiAyLAogCQkJLnBvd2VyX3VzYWdlID0gMSwKLQkJCS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkJLmVudGVyID0gY3B1aWRsZV9zbGVlcF9lbnRlciwKIAkJCS5uYW1lID0gIkMyIiwKIAkJCS5kZXNjID0gIlN1cGVySCBTbGVlcCBNb2RlIFtTRl0iLApAQCAtNzgsNyArNzYsNiBAQAogCQkJLmV4aXRfbGF0ZW5jeSA9IDIzMDAsCiAJCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDEgKiAyLAogCQkJLnBvd2VyX3VzYWdlID0gMSwKLQkJCS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkJLmVudGVyID0gY3B1aWRsZV9zbGVlcF9lbnRlciwKIAkJCS5uYW1lID0gIkMzIiwKIAkJCS5kZXNjID0gIlN1cGVySCBNb2JpbGUgU3RhbmRieSBNb2RlIFtTRl0iLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9udW1hLmMgYi9hcmNoL3NoL21tL251bWEuYwppbmRleCAzZDg1MjI1Li5iY2U1MmJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL251bWEuYworKysgYi9hcmNoL3NoL21tL251bWEuYwpAQCAtMzEsNyArMzEsNyBAQAogCXVuc2lnbmVkIGxvbmcgYm9vdG1lbV9wYWRkcjsKIAogCS8qIERvbid0IGFsbG93IGJvZ3VzIG5vZGUgYXNzaWdubWVudCAqLwotCUJVR19PTihuaWQgPiBNQVhfTlVNTk9ERVMgfHwgbmlkIDw9IDApOworCUJVR19PTihuaWQgPj0gTUFYX05VTU5PREVTIHx8IG5pZCA8PSAwKTsKIAogCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7CiAJZW5kX3BmbiA9IGVuZCA+PiBQQUdFX1NISUZUOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb18zMi5oCmluZGV4IDlmNTMyOTAuLjQwN2FjMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9fMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzMyLmgKQEAgLTQsMTAgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPiAgLyogc3RydWN0IHJlc291cmNlICovCiAKLSNkZWZpbmUgcmVhZGJfcmVsYXhlZChfX2FkZHIpCXJlYWRiKF9fYWRkcikKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZChfX2FkZHIpCXJlYWR3KF9fYWRkcikKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChfX2FkZHIpCXJlYWRsKF9fYWRkcikKLQogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCiAKICNkZWZpbmUgbWVtc2V0X2lvKGQsYyxzeikgICAgIF9tZW1zZXRfaW8oZCxjLHN6KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb182NC5oCmluZGV4IDgwYjU0YjMuLjliNjcyYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzY0LmgKQEAgLTEwMSw2ICsxMDEsNyBAQAogICogdGhlIGNhY2hlIGJ5IHVzaW5nIEFTSV9QSFlTX0JZUEFTU19FQ19FX0wKICAqLwogI2RlZmluZSByZWFkYiByZWFkYgorI2RlZmluZSByZWFkYl9yZWxheGVkIHJlYWRiCiBzdGF0aWMgaW5saW5lIHU4IHJlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsJdTggcmV0OwogCkBAIC0xMTIsNiArMTEzLDcgQEAKIH0KIAogI2RlZmluZSByZWFkdyByZWFkdworI2RlZmluZSByZWFkd19yZWxheGVkIHJlYWR3CiBzdGF0aWMgaW5saW5lIHUxNiByZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CXUxNiByZXQ7CiAKQEAgLTEyNCw2ICsxMjYsNyBAQAogfQogCiAjZGVmaW5lIHJlYWRsIHJlYWRsCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQgcmVhZGwKIHN0YXRpYyBpbmxpbmUgdTMyIHJlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsJdTMyIHJldDsKIApAQCAtMTM2LDYgKzEzOSw3IEBACiB9CiAKICNkZWZpbmUgcmVhZHEgcmVhZHEKKyNkZWZpbmUgcmVhZHFfcmVsYXhlZCByZWFkcQogc3RhdGljIGlubGluZSB1NjQgcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewl1NjQgcmV0OwogCkBAIC0xNDgsNiArMTUyLDcgQEAKIH0KIAogI2RlZmluZSB3cml0ZWIgd3JpdGViCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkIHdyaXRlYgogc3RhdGljIGlubGluZSB2b2lkIHdyaXRlYih1OCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YmFcdCVyMCwgWyUxXSAlMlx0LyogcGNpX3dyaXRlYiAqLyIKQEAgLTE1Nyw2ICsxNjIsNyBAQAogfQogCiAjZGVmaW5lIHdyaXRldyB3cml0ZXcKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQgd3JpdGV3CiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGV3KHUxNiB3LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGFcdCVyMCwgWyUxXSAlMlx0LyogcGNpX3dyaXRldyAqLyIKQEAgLTE2Niw2ICsxNzIsNyBAQAogfQogCiAjZGVmaW5lIHdyaXRlbCB3cml0ZWwKKyNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQgd3JpdGVsCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVsKHUzMiBsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2FcdCVyMCwgWyUxXSAlMlx0LyogcGNpX3dyaXRlbCAqLyIKQEAgLTE3NSw2ICsxODIsNyBAQAogfQogCiAjZGVmaW5lIHdyaXRlcSB3cml0ZXEKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQgd3JpdGVxCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVxKHU2NCBxLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGFcdCVyMCwgWyUxXSAlMlx0LyogcGNpX3dyaXRlcSAqLyIKQEAgLTE4Myw3ICsxOTEsNiBAQAogCQkJICAgICA6ICJtZW1vcnkiKTsKIH0KIAotCiAjZGVmaW5lIGluYiBpbmIKIHN0YXRpYyBpbmxpbmUgdTggaW5iKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKQEAgLTI2NCwxMSArMjcxLDYgQEAKIAlvdXRzbCgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXBvcnQsIGJ1ZiwgY291bnQpOwogfQogCi0jZGVmaW5lIHJlYWRiX3JlbGF4ZWQoX19hZGRyKQlyZWFkYihfX2FkZHIpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoX19hZGRyKQlyZWFkdyhfX2FkZHIpCi0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQoX19hZGRyKQlyZWFkbChfX2FkZHIpCi0jZGVmaW5lIHJlYWRxX3JlbGF4ZWQoX19hZGRyKQlyZWFkcShfX2FkZHIpCi0KIC8qIFZhbGlkIEkvTyBTcGFjZSByZWdpb25zIGFyZSBhbnl3aGVyZSwgYmVjYXVzZSBlYWNoIFBDSSBidXMgc3VwcG9ydGVkCiAgKiBjYW4gbGl2ZSBpbiBhbiBhcmJpdHJhcnkgYXJlYSBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAppbmRleCBiZmViNjI2Li4xZmY5ZTc4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtNjY3LDYgKzY2NywxMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX2RpcnR5KHBtZF90IHBtZCkKK3sKKwlwdGVfdCBwdGUgPSBfX3B0ZShwbWRfdmFsKHBtZCkpOworCisJcmV0dXJuIHB0ZV9kaXJ0eShwdGUpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3lvdW5nKHBtZF90IHBtZCkKIHsKIAlwdGVfdCBwdGUgPSBfX3B0ZShwbWRfdmFsKHBtZCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX21zaS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX21zaS5jCmluZGV4IDU4MDY1MWEuLjg0ZTE2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9tc2kuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfbXNpLmMKQEAgLTExMSwxMCArMTExLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpX2lycSA9IHsKIAkubmFtZQkJPSAiUENJLU1TSSIsCi0JLmlycV9tYXNrCT0gbWFza19tc2lfaXJxLAotCS5pcnFfdW5tYXNrCT0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9lbmFibGUJPSB1bm1hc2tfbXNpX2lycSwKLQkuaXJxX2Rpc2FibGUJPSBtYXNrX21zaV9pcnEsCisJLmlycV9tYXNrCT0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzawk9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2VuYWJsZQk9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2Rpc2FibGUJPSBwY2lfbXNpX21hc2tfaXJxLAogCS8qIFhYWCBhZmZpbml0eSBYWFggKi8KIH07CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCW1zZy5kYXRhID0gbXNpOwogCiAJaXJxX3NldF9tc2lfZGVzYygqaXJxX3AsIGVudHJ5KTsKLQl3cml0ZV9tc2lfbXNnKCppcnFfcCwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coKmlycV9wLCAmbXNnKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDlmZTQzNDkuLmQzNzI2NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pby5oCkBAIC0yNDEsNiArMjQxLDEwIEBACiAjZGVmaW5lIHJlYWR3X3JlbGF4ZWQgcmVhZHcKICNkZWZpbmUgcmVhZGxfcmVsYXhlZCByZWFkbAogI2RlZmluZSByZWFkcV9yZWxheGVkIHJlYWRxCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkIHdyaXRlYgorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCB3cml0ZXcKKyNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQgd3JpdGVsCisjZGVmaW5lIHdyaXRlcV9yZWxheGVkIHdyaXRlcQogCiAjZGVmaW5lIGlvcmVhZDggcmVhZGIKICNkZWZpbmUgaW9yZWFkMTYgcmVhZHcKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3RpbGUva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IGI2MDhlMDAuLmFlZmIyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtNDMsMTMgKzQzLDIwIEBACiAKIHZvaWQgZWFybHlfcGFuaWMoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7Ci0JdmFfbGlzdCBhcDsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKKwl2YV9saXN0IGFyZ3M7CisKIAlhcmNoX2xvY2FsX2lycV9kaXNhYmxlX2FsbCgpOwotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCWVhcmx5X3ByaW50aygiS2VybmVsIHBhbmljIC0gbm90IHN5bmNpbmc6ICIpOwotCWVhcmx5X3ZwcmludGsoZm10LCBhcCk7Ci0JZWFybHlfcHJpbnRrKCJcbiIpOwotCXZhX2VuZChhcCk7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCisJdmFmLmZtdCA9IGZtdDsKKwl2YWYudmEgPSAmYXJnczsKKworCWVhcmx5X3ByaW50aygiS2VybmVsIHBhbmljIC0gbm90IHN5bmNpbmc6ICVwViIsICZ2YWYpOworCisJdmFfZW5kKGFyZ3MpOworCiAJZHVtcF9zdGFjaygpOwogCWh2X2hhbHQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvcGNpX2d4LmMgYi9hcmNoL3RpbGUva2VybmVsL3BjaV9neC5jCmluZGV4IGUzOWY5YzUuLmU3MTdhZjIwIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUva2VybmVsL3BjaV9neC5jCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvcGNpX2d4LmMKQEAgLTE0NTMsNyArMTQ1Myw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHRpbGVneF9tc2lfc3RhcnR1cChzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJaWYgKGQtPm1zaV9kZXNjKQotCQl1bm1hc2tfbXNpX2lycShkKTsKKwkJcGNpX21zaV91bm1hc2tfaXJxKGQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDY1LDE0ICsxNDY1LDE0IEBACiAKIHN0YXRpYyB2b2lkIHRpbGVneF9tc2lfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JbWFza19tc2lfaXJxKGQpOworCXBjaV9tc2lfbWFza19pcnEoZCk7CiAJX19pbnNuX210c3ByKFNQUl9JUElfTUFTS19TRVRfSywgMVVMIDw8IGQtPmlycSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRpbGVneF9tc2lfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlfX2luc25fbXRzcHIoU1BSX0lQSV9NQVNLX1JFU0VUX0ssIDFVTCA8PCBkLT5pcnEpOwotCXVubWFza19tc2lfaXJxKGQpOworCXBjaV9tc2lfdW5tYXNrX2lycShkKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0aWxlZ3hfbXNpX2NoaXAgPSB7CkBAIC0xNTkwLDcgKzE1OTAsNyBAQAogCW1zZy5hZGRyZXNzX2hpID0gbXNpX2FkZHIgPj4gMzI7CiAJbXNnLmFkZHJlc3NfbG8gPSBtc2lfYWRkciAmIDB4ZmZmZmZmZmY7CiAKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmdGlsZWd4X21zaV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpcnFfc2V0X2hhbmRsZXJfZGF0YShpcnEsIGNvbnRyb2xsZXIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3NldHVwLmMgYi9hcmNoL3RpbGUva2VybmVsL3NldHVwLmMKaW5kZXggYjk3MzZkZS4uN2YwNzliYiAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvc2V0dXAuYwpAQCAtNTM0LDExICs1MzQsMTAgQEAKIAkJCX0KIAkJfQogCQlwaHlzcGFnZXMgLT0gZHJvcHBlZF9wYWdlczsKLQkJcHJfd2FybmluZygiT25seSB1c2luZyAlbGRNQiBtZW1vcnk7IgotCQkgICAgICAgIiBpZ25vcmluZyAlbGRNQi5cbiIsCi0JCSAgICAgICBwaHlzcGFnZXMgPj4gKDIwIC0gUEFHRV9TSElGVCksCi0JCSAgICAgICBkcm9wcGVkX3BhZ2VzID4+ICgyMCAtIFBBR0VfU0hJRlQpKTsKLQkJcHJfd2FybmluZygiQ29uc2lkZXIgdXNpbmcgYSBsYXJnZXIgcGFnZSBzaXplLlxuIik7CisJCXByX3dhcm4oIk9ubHkgdXNpbmcgJWxkTUIgbWVtb3J5IC0gaWdub3JpbmcgJWxkTUJcbiIsCisJCQlwaHlzcGFnZXMgPj4gKDIwIC0gUEFHRV9TSElGVCksCisJCQlkcm9wcGVkX3BhZ2VzID4+ICgyMCAtIFBBR0VfU0hJRlQpKTsKKwkJcHJfd2FybigiQ29uc2lkZXIgdXNpbmcgYSBsYXJnZXIgcGFnZSBzaXplXG4iKTsKIAl9CiAjZW5kaWYKIApAQCAtNTY2LDkgKzU2NSw4IEBACiAKICNpZm5kZWYgX190aWxlZ3hfXwogCWlmIChub2RlX2VuZF9wZm5bMF0gPiBNQVhNRU1fUEZOKSB7Ci0JCXByX3dhcm5pbmcoIk9ubHkgdXNpbmcgJWxkTUIgTE9XTUVNLlxuIiwKLQkJICAgICAgIE1BWE1FTT4+MjApOwotCQlwcl93YXJuaW5nKCJVc2UgYSBISUdITUVNIGVuYWJsZWQga2VybmVsLlxuIik7CisJCXByX3dhcm4oIk9ubHkgdXNpbmcgJWxkTUIgTE9XTUVNXG4iLCBNQVhNRU0gPj4gMjApOworCQlwcl93YXJuKCJVc2UgYSBISUdITUVNIGVuYWJsZWQga2VybmVsXG4iKTsKIAkJbWF4X2xvd19wZm4gPSBNQVhNRU1fUEZOOwogCQltYXhfcGZuID0gTUFYTUVNX1BGTjsKIAkJbm9kZV9lbmRfcGZuWzBdID0gTUFYTUVNX1BGTjsKQEAgLTExMTIsOCArMTExMCw4IEBACiAJZmQgPSBodl9mc19maW5kZmlsZSgoSFZfVmlydEFkZHIpIGluaXRyYW1mc19maWxlKTsKIAlpZiAoZmQgPT0gSFZfRU5PRU5UKSB7CiAJCWlmIChzZXRfaW5pdHJhbWZzX2ZpbGUpIHsKLQkJCXByX3dhcm5pbmcoIk5vIHN1Y2ggaHZmcyBpbml0cmFtZnMgZmlsZSAnJXMnXG4iLAotCQkJCSAgIGluaXRyYW1mc19maWxlKTsKKwkJCXByX3dhcm4oIk5vIHN1Y2ggaHZmcyBpbml0cmFtZnMgZmlsZSAnJXMnXG4iLAorCQkJCWluaXRyYW1mc19maWxlKTsKIAkJCXJldHVybjsKIAkJfSBlbHNlIHsKIAkJCS8qIFRyeSBvbGQgYmFja3dhcmRzLWNvbXBhdGlibGUgbmFtZS4gKi8KQEAgLTExMjYsOCArMTEyNCw4IEBACiAJc3RhdCA9IGh2X2ZzX2ZzdGF0KGZkKTsKIAlCVUdfT04oc3RhdC5zaXplIDwgMCk7CiAJaWYgKHN0YXQuZmxhZ3MgJiBIVl9GU19JU0RJUikgewotCQlwcl93YXJuaW5nKCJJZ25vcmluZyBodmZzIGZpbGUgJyVzJzogaXQncyBhIGRpcmVjdG9yeS5cbiIsCi0JCQkgICBpbml0cmFtZnNfZmlsZSk7CisJCXByX3dhcm4oIklnbm9yaW5nIGh2ZnMgZmlsZSAnJXMnOiBpdCdzIGEgZGlyZWN0b3J5XG4iLAorCQkJaW5pdHJhbWZzX2ZpbGUpOwogCQlyZXR1cm47CiAJfQogCWluaXRyZCA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoc3RhdC5zaXplKTsKQEAgLTExODUsOSArMTE4Myw4IEBACiAJSFZfVG9wb2xvZ3kgdG9wb2xvZ3kgPSBodl9pbnF1aXJlX3RvcG9sb2d5KCk7CiAJQlVHX09OKHRvcG9sb2d5LmNvb3JkLnggIT0gMCB8fCB0b3BvbG9neS5jb29yZC55ICE9IDApOwogCWlmICh0b3BvbG9neS53aWR0aCAhPSAxIHx8IHRvcG9sb2d5LmhlaWdodCAhPSAxKSB7Ci0JCXByX3dhcm5pbmcoIldhcm5pbmc6IGJvb3RpbmcgVVAga2VybmVsIG9uICVkeCVkIGdyaWQ7IgotCQkJICAgIiB3aWxsIGlnbm9yZSBhbGwgYnV0IGZpcnN0IHRpbGUuXG4iLAotCQkJICAgdG9wb2xvZ3kud2lkdGgsIHRvcG9sb2d5LmhlaWdodCk7CisJCXByX3dhcm4oIldhcm5pbmc6IGJvb3RpbmcgVVAga2VybmVsIG9uICVkeCVkIGdyaWQ7IHdpbGwgaWdub3JlIGFsbCBidXQgZmlyc3QgdGlsZVxuIiwKKwkJCXRvcG9sb2d5LndpZHRoLCB0b3BvbG9neS5oZWlnaHQpOwogCX0KICNlbmRpZgogCkBAIC0xMjA4LDkgKzEyMDUsOCBAQAogCSAqIFdlIHVzZSBhIHN0cnVjdCBjcHVtYXNrIGZvciB0aGlzLCBzbyBpdCBtdXN0IGJlIGJpZyBlbm91Z2guCiAJICovCiAJaWYgKChzbXBfaGVpZ2h0ICogc21wX3dpZHRoKSA+IG5yX2NwdV9pZHMpCi0JCWVhcmx5X3BhbmljKCJIeXBlcnZpc29yICVkIHggJWQgZ3JpZCB0b28gYmlnIGZvciBMaW51eCIKLQkJCSAgICAiIE5SX0NQVVMgJWRcbiIsIHNtcF9oZWlnaHQsIHNtcF93aWR0aCwKLQkJCSAgICBucl9jcHVfaWRzKTsKKwkJZWFybHlfcGFuaWMoIkh5cGVydmlzb3IgJWQgeCAlZCBncmlkIHRvbyBiaWcgZm9yIExpbnV4IE5SX0NQVVMgJWRcbiIsCisJCQkgICAgc21wX2hlaWdodCwgc21wX3dpZHRoLCBucl9jcHVfaWRzKTsKICNlbmRpZgogCiAJLyoKQEAgLTEyNjUsMTAgKzEyNjEsOSBAQAogCiAJLyogS2VybmVsIFBDcyBtdXN0IGhhdmUgdGhlaXIgaGlnaCBiaXQgc2V0OyBzZWUgaW50dmVjLlMuICovCiAJaWYgKChsb25nKVZNQUxMT0NfU1RBUlQgPj0gMCkKLQkJZWFybHlfcGFuaWMoCi0JCQkiTGludXggVk1BTExPQyByZWdpb24gYmVsb3cgdGhlIDJHQiBsaW5lICglI2x4KSFcbiIKLQkJCSJSZWNvbmZpZ3VyZSB0aGUga2VybmVsIHdpdGggc21hbGxlciBWTUFMTE9DX1JFU0VSVkUuXG4iLAotCQkJVk1BTExPQ19TVEFSVCk7CisJCWVhcmx5X3BhbmljKCJMaW51eCBWTUFMTE9DIHJlZ2lvbiBiZWxvdyB0aGUgMkdCIGxpbmUgKCUjbHgpIVxuIgorCQkJICAgICJSZWNvbmZpZ3VyZSB0aGUga2VybmVsIHdpdGggc21hbGxlciBWTUFMTE9DX1JFU0VSVkVcbiIsCisJCQkgICAgVk1BTExPQ19TVEFSVCk7CiAjZW5kaWYKIH0KIApAQCAtMTM5NSw3ICsxMzkwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgZGF0YXBsYW5lKGNoYXIgKnN0cikKIHsKLQlwcl93YXJuaW5nKCJXQVJOSU5HOiBkYXRhcGxhbmUgc3VwcG9ydCBkaXNhYmxlZCBpbiB0aGlzIGtlcm5lbFxuIik7CisJcHJfd2FybigiV0FSTklORzogZGF0YXBsYW5lIHN1cHBvcnQgZGlzYWJsZWQgaW4gdGhpcyBrZXJuZWxcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0xNDEzLDggKzE0MDgsOCBAQAogCWxlbiA9IGh2X2dldF9jb21tYW5kX2xpbmUoKEhWX1ZpcnRBZGRyKSBib290X2NvbW1hbmRfbGluZSwKIAkJCQkgIENPTU1BTkRfTElORV9TSVpFKTsKIAlpZiAoYm9vdF9jb21tYW5kX2xpbmVbMF0pCi0JCXByX3dhcm5pbmcoIldBUk5JTkc6IGlnbm9yaW5nIGR5bmFtaWMgY29tbWFuZCBsaW5lIFwiJXNcIlxuIiwKLQkJCSAgIGJvb3RfY29tbWFuZF9saW5lKTsKKwkJcHJfd2FybigiV0FSTklORzogaWdub3JpbmcgZHluYW1pYyBjb21tYW5kIGxpbmUgXCIlc1wiXG4iLAorCQkJYm9vdF9jb21tYW5kX2xpbmUpOwogCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIGJ1aWx0aW5fY21kbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOwogI2Vsc2UKIAljaGFyICpodl9jbWRsaW5lOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IGFhNGE3NDMuLjk0MTUyN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTEwLDcgKzEwLDI2IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCiBleHRlcm4gdm9pZCB1bWxfc2V0dXBfc3R1YnMoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworLyoKKyAqIE5lZWRlZCBzaW5jZSB3ZSBkbyBub3QgdXNlIHRoZSBhc20tZ2VuZXJpYy9tbV9ob29rcy5oOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW1sX3NldHVwX3N0dWJzKG1tKTsKK30KIGV4dGVybiB2b2lkIGFyY2hfZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3VubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2Jwcm1fbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworfQorLyoKKyAqIGVuZCBhc20tZ2VuZXJpYy9tbV9ob29rcy5oIGZ1bmN0aW9ucworICovCiAKICNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKIApAQCAtNDEsMTEgKzYwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2R1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQl1bWxfc2V0dXBfc3R1YnMobW0pOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIAogCQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBlZjQ3MGE3Li4xY2I1MjIwIDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTg2LDQgKzg2LDE1IEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3VubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfYnBybV9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggNDFhNTAzYy4uYmVhM2EwMTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMjQ4LDYgKzI0OCwxMCBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIElOVEVMX0lPTU1VICYmIEFDUEkKIAorY29uZmlnIFg4Nl9JTlRFTF9NUFgKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBDUFVfU1VQX0lOVEVMCisKIGNvbmZpZyBYODZfMzJfU01QCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gWDg2XzMyICYmIFNNUApAQCAtOTg4LDYgKzk5MiwyNCBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFg4Nl8xNkJJVCAmJiBYODZfNjQKIAorY29uZmlnIFg4Nl9WU1lTQ0FMTF9FTVVMQVRJT04KKyAgICAgICBib29sICJFbmFibGUgdnN5c2NhbGwgZW11bGF0aW9uIiBpZiBFWFBFUlQKKyAgICAgICBkZWZhdWx0IHkKKyAgICAgICBkZXBlbmRzIG9uIFg4Nl82NAorICAgICAgIC0tLWhlbHAtLS0KKwkgVGhpcyBlbmFibGVzIGVtdWxhdGlvbiBvZiB0aGUgbGVnYWN5IHZzeXNjYWxsIHBhZ2UuICBEaXNhYmxpbmcKKwkgaXQgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGJvb3Rpbmcgd2l0aCB2c3lzY2FsbD1ub25lLCBleGNlcHQKKwkgdGhhdCBpdCB3aWxsIGFsc28gZGlzYWJsZSB0aGUgaGVscGZ1bCB3YXJuaW5nIGlmIGEgcHJvZ3JhbQorCSB0cmllcyB0byB1c2UgYSB2c3lzY2FsbC4gIFdpdGggdGhpcyBvcHRpb24gc2V0IHRvIE4sIG9mZmVuZGluZworCSBwcm9ncmFtcyB3aWxsIGp1c3Qgc2VnZmF1bHQsIGNpdGluZyBhZGRyZXNzZXMgb2YgdGhlIGZvcm0KKwkgMHhmZmZmZmZmZmZmNjAwPzAwLgorCisJIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkIGJ5IG1hbnkgcHJvZ3JhbXMgYnVpbHQgYmVmb3JlIDIwMTMsIGFuZAorCSBjYXJlIHNob3VsZCBiZSB1c2VkIGV2ZW4gd2l0aCBuZXdlciBwcm9ncmFtcyBpZiBzZXQgdG8gTi4KKworCSBEaXNhYmxpbmcgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgN0sgb2Yga2VybmVsIHNpemUgYW5kCisJIHBvc3NpYmx5IDRLIG9mIGFkZGl0aW9uYWwgcnVudGltZSBwYWdldGFibGUgbWVtb3J5LgorCiBjb25maWcgVE9TSElCQQogCXRyaXN0YXRlICJUb3NoaWJhIExhcHRvcCBzdXBwb3J0IgogCWRlcGVuZHMgb24gWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggYmUxZTA3ZC4uZDk5OTM5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMyw2ICszLDE4IEBACiAjCiAjIGNyZWF0ZSBhIGNvbXByZXNzZWQgdm1saW51eCBpbWFnZSBmcm9tIHRoZSBvcmlnaW5hbCB2bWxpbnV4CiAjCisjIHZtbGludXogaXM6CisjCWRlY29tcHJlc3Npb24gY29kZSAoKi5vKQorIwlhc20gZ2xvYmFscyAocGlnZ3kuUyksIGluY2x1ZGluZzoKKyMJCXZtbGludXguYmluLihnenxiejJ8bHptYXwuLi4pCisjCisjIHZtbGludXguYmluIGlzOgorIwl2bWxpbnV4IHN0cmlwcGVkIG9mIGRlYnVnZ2luZyBhbmQgY29tbWVudHMKKyMgdm1saW51eC5iaW4uYWxsIGlzOgorIwl2bWxpbnV4LmJpbiArIHZtbGludXgucmVsb2NzCisjIHZtbGludXguYmluLihnenxiejJ8bHptYXwuLi4pIGlzOgorIwkoc2VlIHNjcmlwdHMvTWFrZWZpbGUubGliIHNpemVfYXBwZW5kKQorIwljb21wcmVzc2VkIHZtbGludXguYmluLmFsbCArIHUzMiBzaXplIG9mIHZtbGludXguYmluLmFsbAogCiB0YXJnZXRzIDo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEgXAogCXZtbGludXguYmluLnh6IHZtbGludXguYmluLmx6byB2bWxpbnV4LmJpbi5sejQKQEAgLTM1LDcgKzQ3LDggQEAKIAogJChvYmopL2Vib290Lm86IEtCVUlMRF9DRkxBR1MgKz0gLWZzaG9ydC13Y2hhciAtbW5vLXJlZC16b25lCiAKLXZtbGludXgtb2Jqcy0kKENPTkZJR19FRklfU1RVQikgKz0gJChvYmopL2Vib290Lm8gJChvYmopL2VmaV9zdHViXyQoQklUUykubwordm1saW51eC1vYmpzLSQoQ09ORklHX0VGSV9TVFVCKSArPSAkKG9iaikvZWJvb3QubyAkKG9iaikvZWZpX3N0dWJfJChCSVRTKS5vIFwKKwkkKG9ianRyZWUpL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvbGliLmEKIAogJChvYmopL3ZtbGludXg6ICQodm1saW51eC1vYmpzLXkpIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbGQpCkBAIC03Niw3ICs4OSw3IEBACiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTykgCTo9IGx6bwogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWjQpIAk6PSBsejQKIAotUlVOX1NJWkUgPSAkKHNoZWxsIG9iamR1bXAgLWggdm1saW51eCB8IFwKK1JVTl9TSVpFID0gJChzaGVsbCAkKE9CSkRVTVApIC1oIHZtbGludXggfCBcCiAJICAgICBwZXJsICQoc3JjdHJlZSkvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5wbCkKIHF1aWV0X2NtZF9ta3BpZ2d5ID0gTUtQSUdHWSAkQAogICAgICAgY21kX21rcGlnZ3kgPSAkKG9iaikvbWtwaWdneSAkPCAkKFJVTl9TSVpFKSA+ICRAIHx8ICggcm0gLWYgJEAgOyBmYWxzZSApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3QuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5jCmluZGV4IDFhY2Y2MDUuLjkyYjlhNWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5jCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5jCkBAIC0yMSw4ICsyMSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGVmaV9jb25maWcgKmVmaV9lYXJseTsKIAotI2RlZmluZSBlZmlfY2FsbF9lYXJseShmLCAuLi4pCQkJCQkJXAotCWVmaV9lYXJseS0+Y2FsbChlZmlfZWFybHktPmYsIF9fVkFfQVJHU19fKTsKK19fcHVyZSBjb25zdCBzdHJ1Y3QgZWZpX2NvbmZpZyAqX19lZmlfZWFybHkodm9pZCkKK3sKKwlyZXR1cm4gZWZpX2Vhcmx5OworfQogCiAjZGVmaW5lIEJPT1RfU0VSVklDRVMoYml0cykJCQkJCQlcCiBzdGF0aWMgdm9pZCBzZXR1cF9ib290X3NlcnZpY2VzIyNiaXRzKHN0cnVjdCBlZmlfY29uZmlnICpjKQkJXApAQCAtMjg1LDggKzI4Nyw2IEBACiAJfQogfQogCi0jaW5jbHVkZSAiLi4vLi4vLi4vLi4vZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyIKLQogc3RhdGljIHZvaWQgZmluZF9iaXRzKHVuc2lnbmVkIGxvbmcgbWFzaywgdTggKnBvcywgdTggKnNpemUpCiB7CiAJdTggZmlyc3QsIGxlbjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9lYm9vdC5oIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vib290LmgKaW5kZXggYzg4YzMxZS4uZDQ4N2U3MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vib290LmgKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vib290LmgKQEAgLTEwMywyMCArMTAzLDQgQEAKIAl2b2lkICpibHQ7CiB9OwogCi1zdHJ1Y3QgZWZpX2NvbmZpZyB7Ci0JdTY0IGltYWdlX2hhbmRsZTsKLQl1NjQgdGFibGU7Ci0JdTY0IGFsbG9jYXRlX3Bvb2w7Ci0JdTY0IGFsbG9jYXRlX3BhZ2VzOwotCXU2NCBnZXRfbWVtb3J5X21hcDsKLQl1NjQgZnJlZV9wb29sOwotCXU2NCBmcmVlX3BhZ2VzOwotCXU2NCBsb2NhdGVfaGFuZGxlOwotCXU2NCBoYW5kbGVfcHJvdG9jb2w7Ci0JdTY0IGV4aXRfYm9vdF9zZXJ2aWNlczsKLQl1NjQgdGV4dF9vdXRwdXQ7Ci0JZWZpX3N0YXR1c190ICgqY2FsbCkodW5zaWduZWQgbG9uZywgLi4uKTsKLQlib29sIGlzNjQ7Ci19IF9fcGFja2VkOwotCiAjZW5kaWYgLyogQk9PVF9DT01QUkVTU0VEX0VCT09UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDMwZGQ1OWEuLmRjYzFjNTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAKIAkvKgogCSAqIFByb2Nlc3MgcmVsb2NhdGlvbnM6IDMyIGJpdCByZWxvY2F0aW9ucyBmaXJzdCB0aGVuIDY0IGJpdCBhZnRlci4KLQkgKiBUd28gc2V0cyBvZiBiaW5hcnkgcmVsb2NhdGlvbnMgYXJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGtlcm5lbAorCSAqIFRocmVlIHNldHMgb2YgYmluYXJ5IHJlbG9jYXRpb25zIGFyZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBrZXJuZWwKIAkgKiBiZWZvcmUgY29tcHJlc3Npb24uIEVhY2ggcmVsb2NhdGlvbiB0YWJsZSBlbnRyeSBpcyB0aGUga2VybmVsCiAJICogYWRkcmVzcyBvZiB0aGUgbG9jYXRpb24gd2hpY2ggbmVlZHMgdG8gYmUgdXBkYXRlZCBzdG9yZWQgYXMgYQogCSAqIDMyLWJpdCB2YWx1ZSB3aGljaCBpcyBzaWduIGV4dGVuZGVkIHRvIDY0IGJpdHMuCkBAIC0yNzAsNiArMjcwLDggQEAKIAkgKiBrZXJuZWwgYml0cy4uLgogCSAqIDAgLSB6ZXJvIHRlcm1pbmF0b3IgZm9yIDY0IGJpdCByZWxvY2F0aW9ucwogCSAqIDY0IGJpdCByZWxvY2F0aW9uIHJlcGVhdGVkCisJICogMCAtIHplcm8gdGVybWluYXRvciBmb3IgaW52ZXJzZSAzMiBiaXQgcmVsb2NhdGlvbnMKKwkgKiAzMiBiaXQgaW52ZXJzZSByZWxvY2F0aW9uIHJlcGVhdGVkCiAJICogMCAtIHplcm8gdGVybWluYXRvciBmb3IgMzIgYml0IHJlbG9jYXRpb25zCiAJICogMzIgYml0IHJlbG9jYXRpb24gcmVwZWF0ZWQKIAkgKgpAQCAtMjg2LDYgKzI4OCwxNiBAQAogCQkqKHVpbnQzMl90ICopcHRyICs9IGRlbHRhOwogCX0KICNpZmRlZiBDT05GSUdfWDg2XzY0CisJd2hpbGUgKCotLXJlbG9jKSB7CisJCWxvbmcgZXh0ZW5kZWQgPSAqcmVsb2M7CisJCWV4dGVuZGVkICs9IG1hcDsKKworCQlwdHIgPSAodW5zaWduZWQgbG9uZylleHRlbmRlZDsKKwkJaWYgKHB0ciA8IG1pbl9hZGRyIHx8IHB0ciA+IG1heF9hZGRyKQorCQkJZXJyb3IoImludmVyc2UgMzItYml0IHJlbG9jYXRpb24gb3V0c2lkZSBvZiBrZXJuZWwhXG4iKTsKKworCQkqKGludDMyX3QgKilwdHIgLT0gZGVsdGE7CisJfQogCWZvciAocmVsb2MtLTsgKnJlbG9jOyByZWxvYy0tKSB7CiAJCWxvbmcgZXh0ZW5kZWQgPSAqcmVsb2M7CiAJCWV4dGVuZGVkICs9IG1hcDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcgYi9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCmluZGV4IDMyZDJlNzAuLjQxOTgxOWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKKysrIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwpAQCAtOCw2ICs4LDcgQEAKIENPTkZJR19UQVNLX0RFTEFZX0FDQ1Q9eQogQ09ORklHX1RBU0tfWEFDQ1Q9eQogQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15CitDT05GSUdfRkhBTkRMRT15CiBDT05GSUdfQVVESVQ9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCmluZGV4IGE0ODFkZDQuLjRjMzExZGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZworKysgYi9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKQEAgLTcsNiArNyw3IEBACiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKIENPTkZJR19UQVNLX1hBQ0NUPXkKIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQorQ09ORklHX0ZIQU5ETEU9eQogQ09ORklHX0FVRElUPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJfYW91dC5jCmluZGV4IGRmOTE0NjYuLmFlNmFhZDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyX2FvdXQuYwpAQCAtMzQyLDggKzM0Miw4IEBACiAJCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBlcnJvcl90aW1lICsgNSpIWikpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiZmRfb2Zmc2V0IGlzIG5vdCBwYWdlIGFsaWduZWQuIFBsZWFzZSBjb252ZXJ0ICIKLQkJCSAgICAgICAicHJvZ3JhbTogJXNcbiIsCi0JCQkgICAgICAgYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkJICAgICAgICJwcm9ncmFtOiAlcERcbiIsCisJCQkgICAgICAgYnBybS0+ZmlsZSk7CiAJCQllcnJvcl90aW1lID0gamlmZmllczsKIAkJfQogI2VuZGlmCkBAIC00MjksOCArNDI5LDggQEAKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZXJyb3JfdGltZSArIDUqSFopKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIk5fVFhUT0ZGIGlzIG5vdCBwYWdlIGFsaWduZWQuIFBsZWFzZSBjb252ZXJ0ICIKLQkJCSAgICAgICAibGlicmFyeTogJXNcbiIsCi0JCQkgICAgICAgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkJICAgICAgICJsaWJyYXJ5OiAlcERcbiIsCisJCQkgICAgICAgZmlsZSk7CiAJCQllcnJvcl90aW1lID0gamlmZmllczsKIAkJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggOTg2M2VlMy4uNDdjOGUzMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNSw2NSArNSw2IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zcGVjaWFsX2luc25zLmg+CiAKLSNpZmRlZiBDT05GSUdfWDg2X1BBVAotLyoKLSAqIFg4NiBQQVQgdXNlcyBwYWdlIGZsYWdzIFdDIGFuZCBVbmNhY2hlZCB0b2dldGhlciB0byBrZWVwIHRyYWNrIG9mCi0gKiBtZW1vcnkgdHlwZSBvZiBwYWdlcyB0aGF0IGhhdmUgYmFja2luZyBwYWdlIHN0cnVjdC4gWDg2IFBBVCBzdXBwb3J0cyAzCi0gKiBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzLCBfUEFHRV9DQUNIRV9XQiwgX1BBR0VfQ0FDSEVfV0MgYW5kCi0gKiBfUEFHRV9DQUNIRV9VQ19NSU5VUyBhbmQgZm91cnRoIHN0YXRlIHdoZXJlIHBhZ2UncyBtZW1vcnkgdHlwZSBoYXMgbm90Ci0gKiBiZWVuIGNoYW5nZWQgZnJvbSBpdHMgZGVmYXVsdCAodmFsdWUgb2YgLTEgdXNlZCB0byBkZW5vdGUgdGhpcykuCi0gKiBOb3RlIHdlIGRvIG5vdCBzdXBwb3J0IF9QQUdFX0NBQ0hFX1VDIGhlcmUuCi0gKi8KLQotI2RlZmluZSBfUEdNVF9ERUZBVUxUCQkwCi0jZGVmaW5lIF9QR01UX1dDCQkoMVVMIDw8IFBHX2FyY2hfMSkKLSNkZWZpbmUgX1BHTVRfVUNfTUlOVVMJCSgxVUwgPDwgUEdfdW5jYWNoZWQpCi0jZGVmaW5lIF9QR01UX1dCCQkoMVVMIDw8IFBHX3VuY2FjaGVkIHwgMVVMIDw8IFBHX2FyY2hfMSkKLSNkZWZpbmUgX1BHTVRfTUFTSwkJKDFVTCA8PCBQR191bmNhY2hlZCB8IDFVTCA8PCBQR19hcmNoXzEpCi0jZGVmaW5lIF9QR01UX0NMRUFSX01BU0sJKH5fUEdNVF9NQVNLKQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3BhZ2VfbWVtdHlwZShzdHJ1Y3QgcGFnZSAqcGcpCi17Ci0JdW5zaWduZWQgbG9uZyBwZ19mbGFncyA9IHBnLT5mbGFncyAmIF9QR01UX01BU0s7Ci0KLQlpZiAocGdfZmxhZ3MgPT0gX1BHTVRfREVGQVVMVCkKLQkJcmV0dXJuIC0xOwotCWVsc2UgaWYgKHBnX2ZsYWdzID09IF9QR01UX1dDKQotCQlyZXR1cm4gX1BBR0VfQ0FDSEVfV0M7Ci0JZWxzZSBpZiAocGdfZmxhZ3MgPT0gX1BHTVRfVUNfTUlOVVMpCi0JCXJldHVybiBfUEFHRV9DQUNIRV9VQ19NSU5VUzsKLQllbHNlCi0JCXJldHVybiBfUEFHRV9DQUNIRV9XQjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX21lbXR5cGUoc3RydWN0IHBhZ2UgKnBnLCB1bnNpZ25lZCBsb25nIG1lbXR5cGUpCi17Ci0JdW5zaWduZWQgbG9uZyBtZW10eXBlX2ZsYWdzID0gX1BHTVRfREVGQVVMVDsKLQl1bnNpZ25lZCBsb25nIG9sZF9mbGFnczsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFnczsKLQotCXN3aXRjaCAobWVtdHlwZSkgewotCWNhc2UgX1BBR0VfQ0FDSEVfV0M6Ci0JCW1lbXR5cGVfZmxhZ3MgPSBfUEdNVF9XQzsKLQkJYnJlYWs7Ci0JY2FzZSBfUEFHRV9DQUNIRV9VQ19NSU5VUzoKLQkJbWVtdHlwZV9mbGFncyA9IF9QR01UX1VDX01JTlVTOwotCQlicmVhazsKLQljYXNlIF9QQUdFX0NBQ0hFX1dCOgotCQltZW10eXBlX2ZsYWdzID0gX1BHTVRfV0I7Ci0JCWJyZWFrOwotCX0KLQotCWRvIHsKLQkJb2xkX2ZsYWdzID0gcGctPmZsYWdzOwotCQluZXdfZmxhZ3MgPSAob2xkX2ZsYWdzICYgX1BHTVRfQ0xFQVJfTUFTSykgfCBtZW10eXBlX2ZsYWdzOwotCX0gd2hpbGUgKGNtcHhjaGcoJnBnLT5mbGFncywgb2xkX2ZsYWdzLCBuZXdfZmxhZ3MpICE9IG9sZF9mbGFncyk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9wYWdlX21lbXR5cGUoc3RydWN0IHBhZ2UgKnBnKSB7IHJldHVybiAtMTsgfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX21lbXR5cGUoc3RydWN0IHBhZ2UgKnBnLCB1bnNpZ25lZCBsb25nIG1lbXR5cGUpIHsgfQotI2VuZGlmCi0KIC8qCiAgKiBUaGUgc2V0X21lbW9yeV8qIEFQSSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdmFyaW91cyBhdHRyaWJ1dGVzIG9mIGEgdmlydHVhbAogICogYWRkcmVzcyByYW5nZS4gVGhlIGF0dHJpYnV0ZXMgaW5jbHVkZToKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rpc2FibGVkLWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kaXNhYmxlZC1mZWF0dXJlcy5oCmluZGV4IDk3NTM0YTcuLmYyMjZkZjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rpc2FibGVkLWZlYXR1cmVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGlzYWJsZWQtZmVhdHVyZXMuaApAQCAtMTAsNiArMTAsMTIgQEAKICAqIGNwdV9mZWF0dXJlX2VuYWJsZWQoKS4KICAqLwogCisjaWZkZWYgQ09ORklHX1g4Nl9JTlRFTF9NUFgKKyMgZGVmaW5lIERJU0FCTEVfTVBYCTAKKyNlbHNlCisjIGRlZmluZSBESVNBQkxFX01QWAkoMTw8KFg4Nl9GRUFUVVJFX01QWCAmIDMxKSkKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogIyBkZWZpbmUgRElTQUJMRV9WTUUJCSgxPDwoWDg2X0ZFQVRVUkVfVk1FICYgMzEpKQogIyBkZWZpbmUgRElTQUJMRV9LNl9NVFJSCSgxPDwoWDg2X0ZFQVRVUkVfSzZfTVRSUiAmIDMxKSkKQEAgLTM0LDYgKzQwLDYgQEAKICNkZWZpbmUgRElTQUJMRURfTUFTSzYJMAogI2RlZmluZSBESVNBQkxFRF9NQVNLNwkwCiAjZGVmaW5lIERJU0FCTEVEX01BU0s4CTAKLSNkZWZpbmUgRElTQUJMRURfTUFTSzkJMAorI2RlZmluZSBESVNBQkxFRF9NQVNLOQkoRElTQUJMRV9NUFgpCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9ESVNBQkxFRF9GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oCmluZGV4IDliMTE3NTcuLjI1YmNlNDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oCkBAIC0xNTgsNiArMTU4LDMwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0VGSV9NSVhFRCAqLwogCisKKy8qIGFyY2ggc3BlY2lmaWMgZGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgc3R1YiBjb2RlICovCisKK3N0cnVjdCBlZmlfY29uZmlnIHsKKwl1NjQgaW1hZ2VfaGFuZGxlOworCXU2NCB0YWJsZTsKKwl1NjQgYWxsb2NhdGVfcG9vbDsKKwl1NjQgYWxsb2NhdGVfcGFnZXM7CisJdTY0IGdldF9tZW1vcnlfbWFwOworCXU2NCBmcmVlX3Bvb2w7CisJdTY0IGZyZWVfcGFnZXM7CisJdTY0IGxvY2F0ZV9oYW5kbGU7CisJdTY0IGhhbmRsZV9wcm90b2NvbDsKKwl1NjQgZXhpdF9ib290X3NlcnZpY2VzOworCXU2NCB0ZXh0X291dHB1dDsKKwllZmlfc3RhdHVzX3QgKCpjYWxsKSh1bnNpZ25lZCBsb25nLCAuLi4pOworCWJvb2wgaXM2NDsKK30gX19wYWNrZWQ7CisKK19fcHVyZSBjb25zdCBzdHJ1Y3QgZWZpX2NvbmZpZyAqX19lZmlfZWFybHkodm9pZCk7CisKKyNkZWZpbmUgZWZpX2NhbGxfZWFybHkoZiwgLi4uKQkJCQkJCVwKKwlfX2VmaV9lYXJseSgpLT5jYWxsKF9fZWZpX2Vhcmx5KCktPmYsIF9fVkFfQVJHU19fKTsKKwogZXh0ZXJuIGJvb2wgZWZpX3JlYm9vdF9yZXF1aXJlZCh2b2lkKTsKIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mYi5oCmluZGV4IDI1MTlkMDYuLmMzZGQ1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaApAQCAtOCw4ICs4LDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZmJfcGdwcm90ZWN0KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQl1bnNpZ25lZCBsb25nIG9mZikKIHsKKwl1bnNpZ25lZCBsb25nIHByb3Q7CisKKwlwcm90ID0gcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJiB+X1BBR0VfQ0FDSEVfTUFTSzsKIAlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQotCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9QQ0Q7CisJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpID0KKwkJCXByb3QgfCBjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKTsKIH0KIAogZXh0ZXJuIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IGZmYjE3MzMuLmY4MGQ3MDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC02OSw3ICs2OSw5IEBACiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCUZJWF9IT0xFLAogI2Vsc2UKKyNpZmRlZiBDT05GSUdfWDg2X1ZTWVNDQUxMX0VNVUxBVElPTgogCVZTWVNDQUxMX1BBR0UgPSAoRklYQUREUl9UT1AgLSBWU1lTQ0FMTF9BRERSKSA+PiBQQUdFX1NISUZULAorI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX0NMT0NLCiAJUFZDTE9DS19GSVhNQVBfQkVHSU4sCiAJUFZDTE9DS19GSVhNQVBfRU5EID0gUFZDTE9DS19GSVhNQVBfQkVHSU4rUFZDTE9DS19WU1lTQ0FMTF9OUl9QQUdFUy0xLApAQCAtMTM2LDkgKzEzOCw3IEBACiBleHRlcm4gdm9pZCByZXNlcnZlX3RvcF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZSk7CiAKICNkZWZpbmUgRklYQUREUl9TSVpFCShfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIEZJWEFERFJfQk9PVF9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgRklYQUREUl9TVEFSVAkJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TSVpFKQotI2RlZmluZSBGSVhBRERSX0JPT1RfU1RBUlQJKEZJWEFERFJfVE9QIC0gRklYQUREUl9CT09UX1NJWkUpCiAKIGV4dGVybiBpbnQgZml4bWFwc19zZXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggZTFmN2ZlYy4uZjQ1YWNhZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTEsMzkgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1g4Nl9GVFJBQ0VfSAogI2RlZmluZSBfQVNNX1g4Nl9GVFJBQ0VfSAogCi0jaWZkZWYgX19BU1NFTUJMWV9fCi0KLQkvKiBza2lwIGlzIHNldCBpZiB0aGUgc3RhY2sgd2FzIGFscmVhZHkgcGFydGlhbGx5IGFkanVzdGVkICovCi0JLm1hY3JvIE1DT1VOVF9TQVZFX0ZSQU1FIHNraXA9MAotCSAvKgotCSAgKiBXZSBhZGQgZW5vdWdoIHN0YWNrIHRvIHNhdmUgYWxsIHJlZ3MuCi0JICAqLwotCXN1YnEgJChTUys4LVxza2lwKSwgJXJzcAotCW1vdnEgJXJheCwgUkFYKCVyc3ApCi0JbW92cSAlcmN4LCBSQ1goJXJzcCkKLQltb3ZxICVyZHgsIFJEWCglcnNwKQotCW1vdnEgJXJzaSwgUlNJKCVyc3ApCi0JbW92cSAlcmRpLCBSREkoJXJzcCkKLQltb3ZxICVyOCwgUjgoJXJzcCkKLQltb3ZxICVyOSwgUjkoJXJzcCkKLQkgLyogTW92ZSBSSVAgdG8gaXRzIHByb3BlciBsb2NhdGlvbiAqLwotCW1vdnEgU1MrOCglcnNwKSwgJXJkeAotCW1vdnEgJXJkeCwgUklQKCVyc3ApCi0JLmVuZG0KLQotCS5tYWNybyBNQ09VTlRfUkVTVE9SRV9GUkFNRSBza2lwPTAKLQltb3ZxIFI5KCVyc3ApLCAlcjkKLQltb3ZxIFI4KCVyc3ApLCAlcjgKLQltb3ZxIFJESSglcnNwKSwgJXJkaQotCW1vdnEgUlNJKCVyc3ApLCAlcnNpCi0JbW92cSBSRFgoJXJzcCksICVyZHgKLQltb3ZxIFJDWCglcnNwKSwgJXJjeAotCW1vdnEgUkFYKCVyc3ApLCAlcmF4Ci0JYWRkcSAkKFNTKzgtXHNraXApLCAlcnNwCi0JLmVuZG0KLQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCiAjaWZkZWYgQ0NfVVNJTkdfRkVOVFJZCiAjIGRlZmluZSBNQ09VTlRfQUREUgkJKChsb25nKShfX2ZlbnRyeV9fKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaAppbmRleCAzMDJhMzIzLi4wNGU5ZDAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCkBAIC0zOCwxNyArMzgsMjAgQEAKIC8qCiAgKiBPcmRlcmluZyBpczoKICAqCi0gKiBGSVhBRERSX1RPUAotICogCQkJZml4ZWRfYWRkcmVzc2VzCi0gKiBGSVhBRERSX1NUQVJUCi0gKiAJCQl0ZW1wIGZpeGVkIGFkZHJlc3NlcwotICogRklYQUREUl9CT09UX1NUQVJUCi0gKiAJCQlQZXJzaXN0ZW50IGttYXAgYXJlYQotICogUEtNQVBfQkFTRQotICogVk1BTExPQ19FTkQKLSAqIAkJCVZtYWxsb2MgYXJlYQotICogVk1BTExPQ19TVEFSVAotICogaGlnaF9tZW1vcnkKKyAqIGhpZ2ggbWVtb3J5IG9uOgkJCSAgICAgICAgICAgICAgaGlnaF9tZW1vcnkgb2ZmOgorICogICAgRklYQUREUl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYQUREUl9UT1AKKyAqICAgICAgICBmaXhlZCBhZGRyZXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZCBhZGRyZXNzZXMKKyAqICAgIEZJWEFERFJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWEFERFJfU1RBUlQKKyAqICAgICAgICB0ZW1wIGZpeGVkIGFkZHJlc3Nlcy9wZXJzaXN0ZW50IGttYXAgYXJlYSAgICAgIFZNQUxMT0NfRU5ECisgKiAgICBQS01BUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCBmaXhlZCBhZGRyZXNzZXMvdm1hbGxvYyBhcmVhCisgKiAgICBWTUFMTE9DX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWTUFMTE9DX1NUQVJUCisgKiAgICAgICAgdm1hbGxvYyBhcmVhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoX21lbW9yeQorICogICAgVk1BTExPQ19TVEFSVAorICogICAgaGlnaF9tZW1vcnkKKyAqCisgKiBUaGUgdGVtcCBmaXhlZCBhcmVhIGlzIG9ubHkgdXNlZCBkdXJpbmcgYm9vdCBmb3IgZWFybHlfaW9yZW1hcCgpLCBhbmQKKyAqIGl0IGlzIHVudXNlZCB3aGVuIHRoZSBpb3JlbWFwKCkgaXMgZnVuY3Rpb25hbC4gdm1hbGxvYy9wa21hcCBhcmVhIGJlY29tZQorICogYXZhaWxhYmxlIGFmdGVyIGVhcmx5IGJvb3Qgc28gdGhlIHRlbXAgZml4ZWQgYXJlYSBpcyBhdmFpbGFibGUgZm9yIHJlLXVzZS4KICAqLwogI2RlZmluZSBMQVNUX1BLTUFQX01BU0sgKExBU1RfUEtNQVAtMSkKICNkZWZpbmUgUEtNQVBfTlIodmlydCkgICgodmlydC1QS01BUF9CQVNFKSA+PiBQQUdFX1NISUZUKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5zbi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5zbi5oCmluZGV4IDQ4ZWIzMGEuLjQ3ZjI5YjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luc24uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnNuLmgKQEAgLTY1LDYgKzY1LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHg4Nl82NDsKIAogCWNvbnN0IGluc25fYnl0ZV90ICprYWRkcjsJLyoga2VybmVsIGFkZHJlc3Mgb2YgaW5zbiB0byBhbmFseXplICovCisJY29uc3QgaW5zbl9ieXRlX3QgKmVuZF9rYWRkcjsJLyoga2VybmVsIGFkZHJlc3Mgb2YgbGFzdCBpbnNuIGluIGJ1ZmZlciAqLwogCWNvbnN0IGluc25fYnl0ZV90ICpuZXh0X2J5dGU7CiB9OwogCkBAIC05Niw3ICs5Nyw3IEBACiAjZGVmaW5lIFg4Nl9WRVhfUCh2ZXgpCSgodmV4KSAmIDB4MDMpCQkvKiBWRVgzIEJ5dGUyLCBWRVgyIEJ5dGUxICovCiAjZGVmaW5lIFg4Nl9WRVhfTV9NQVgJMHgxZgkJCS8qIFZFWDMuTSBNYXhpbXVtIHZhbHVlICovCiAKLWV4dGVybiB2b2lkIGluc25faW5pdChzdHJ1Y3QgaW5zbiAqaW5zbiwgY29uc3Qgdm9pZCAqa2FkZHIsIGludCB4ODZfNjQpOworZXh0ZXJuIHZvaWQgaW5zbl9pbml0KHN0cnVjdCBpbnNuICppbnNuLCBjb25zdCB2b2lkICprYWRkciwgaW50IGJ1Zl9sZW4sIGludCB4ODZfNjQpOwogZXh0ZXJuIHZvaWQgaW5zbl9nZXRfcHJlZml4ZXMoc3RydWN0IGluc24gKmluc24pOwogZXh0ZXJuIHZvaWQgaW5zbl9nZXRfb3Bjb2RlKHN0cnVjdCBpbnNuICppbnNuKTsKIGV4dGVybiB2b2lkIGluc25fZ2V0X21vZHJtKHN0cnVjdCBpbnNuICppbnNuKTsKQEAgLTExNSwxMiArMTE2LDEzIEBACiBleHRlcm4gaW50IGluc25fcmlwX3JlbGF0aXZlKHN0cnVjdCBpbnNuICppbnNuKTsKIAogLyogSW5pdCBpbnNuIGZvciBrZXJuZWwgdGV4dCAqLwotc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbF9pbnNuX2luaXQoc3RydWN0IGluc24gKmluc24sIGNvbnN0IHZvaWQgKmthZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbF9pbnNuX2luaXQoc3RydWN0IGluc24gKmluc24sCisJCQkJICAgIGNvbnN0IHZvaWQgKmthZGRyLCBpbnQgYnVmX2xlbikKIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JaW5zbl9pbml0KGluc24sIGthZGRyLCAxKTsKKwlpbnNuX2luaXQoaW5zbiwga2FkZHIsIGJ1Zl9sZW4sIDEpOwogI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwotCWluc25faW5pdChpbnNuLCBrYWRkciwgMCk7CisJaW5zbl9pbml0KGluc24sIGthZGRyLCBidWZfbGVuLCAwKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaAppbmRleCBiODIzN2Q4Li4zNGE1YjkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKQEAgLTc0LDYgKzc0LDkgQEAKICNkZWZpbmUgX19yYXdfcmVhZHcgX19yZWFkdwogI2RlZmluZSBfX3Jhd19yZWFkbCBfX3JlYWRsCiAKKyNkZWZpbmUgd3JpdGViX3JlbGF4ZWQodiwgYSkgX193cml0ZWIodiwgYSkKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQodiwgYSkgX193cml0ZXcodiwgYSkKKyNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQodiwgYSkgX193cml0ZWwodiwgYSkKICNkZWZpbmUgX19yYXdfd3JpdGViIF9fd3JpdGViCiAjZGVmaW5lIF9fcmF3X3dyaXRldyBfX3dyaXRldwogI2RlZmluZSBfX3Jhd193cml0ZWwgX193cml0ZWwKQEAgLTg2LDYgKzg5LDcgQEAKIGJ1aWxkX21taW9fd3JpdGUod3JpdGVxLCAicSIsIHVuc2lnbmVkIGxvbmcsICJyIiwgOiJtZW1vcnkiKQogCiAjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYSkJcmVhZHEoYSkKKyNkZWZpbmUgd3JpdGVxX3JlbGF4ZWQodiwgYSkJd3JpdGVxKHYsIGEpCiAKICNkZWZpbmUgX19yYXdfcmVhZHEoYSkJCXJlYWRxKGEpCiAjZGVmaW5lIF9fcmF3X3dyaXRlcSh2YWwsIGFkZHIpCXdyaXRlcSh2YWwsIGFkZHIpCkBAIC0zMTAsMTEgKzMxNCwxMSBAQAogQlVJTERJTyh3LCB3LCBzaG9ydCkKIEJVSUxESU8obCwgLCBpbnQpCiAKLWV4dGVybiB2b2lkICp4bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMpOwotZXh0ZXJuIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgKmFkZHIpOworZXh0ZXJuIHZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IHBoeXMpOworZXh0ZXJuIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cihwaHlzX2FkZHJfdCBwaHlzLCB2b2lkICphZGRyKTsKIAogZXh0ZXJuIGludCBpb3JlbWFwX2NoYW5nZV9hdHRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQl1bnNpZ25lZCBsb25nIHByb3RfdmFsKTsKKwkJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY20pOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF93YyhyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiBleHRlcm4gYm9vbCBpc19lYXJseV9pb3JlbWFwX3B0ZXAocHRlX3QgKnB0ZXApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAppbmRleCA5NThiOTBmLi41MWIyNmU4OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKQEAgLTM0LDYgKzM0LDEwIEBACiAjZGVmaW5lIE1DSV9TVEFUVVNfUwkgKDFVTEw8PDU2KSAgLyogU2lnbmFsZWQgbWFjaGluZSBjaGVjayAqLwogI2RlZmluZSBNQ0lfU1RBVFVTX0FSCSAoMVVMTDw8NTUpICAvKiBBY3Rpb24gcmVxdWlyZWQgKi8KIAorLyogQU1ELXNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgTUNJX1NUQVRVU19ERUZFUlJFRAkoMVVMTDw8NDQpICAvKiBkZWNsYXJlIGFuIHVuY29ycmVjdGVkIGVycm9yICovCisjZGVmaW5lIE1DSV9TVEFUVVNfUE9JU09OCSgxVUxMPDw0MykgIC8qIGFjY2VzcyBwb2lzb25vdXMgZGF0YSAqLworCiAvKgogICogTm90ZSB0aGF0IHRoZSBmdWxsIE1DQUNPRCBmaWVsZCBvZiBJQTMyX01DaV9TVEFUVVMgTVNSIGlzCiAgKiBiaXRzIDE1OjAuICBCdXQgYml0IDEyIGlzIHRoZSAnRicgYml0LCBkZWZpbmVkIGZvciBjb3JyZWN0ZWQKQEAgLTc4LDcgKzgyLDYgQEAKIC8qIFNvZnR3YXJlIGRlZmluZWQgYmFua3MgKi8KICNkZWZpbmUgTUNFX0VYVEVOREVEX0JBTksJMTI4CiAjZGVmaW5lIE1DRV9USEVSTUFMX0JBTksJKE1DRV9FWFRFTkRFRF9CQU5LICsgMCkKLSNkZWZpbmUgSzhfTUNFX1RIUkVTSE9MRF9CQVNFICAgKE1DRV9FWFRFTkRFRF9CQU5LICsgMSkKIAogI2RlZmluZSBNQ0VfTE9HX0xFTiAzMgogI2RlZmluZSBNQ0VfTE9HX1NJR05BVFVSRQkiTUFDSElORUNIRUNLIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaAppbmRleCA2NGRjMzYyLi4yMDFiNTIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaApAQCAtNzgsNiArNzgsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGxvYWRfdWNvZGVfYnNwKHZvaWQpOwogZXh0ZXJuIHZvaWQgbG9hZF91Y29kZV9hcCh2b2lkKTsKIGV4dGVybiBpbnQgX19pbml0IHNhdmVfbWljcm9jb2RlX2luX2luaXRyZCh2b2lkKTsKK3ZvaWQgcmVsb2FkX2Vhcmx5X21pY3JvY29kZSh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGxvYWRfdWNvZGVfYnNwKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF91Y29kZV9hcCh2b2lkKSB7fQpAQCAtODUsNiArODYsNyBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSB2b2lkIHJlbG9hZF9lYXJseV9taWNyb2NvZGUodm9pZCkge30KICNlbmRpZgogCiAjZW5kaWYgLyogX0FTTV9YODZfTUlDUk9DT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9hbWQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9hbWQuaAppbmRleCBiN2IxMGI4Li5hZjkzNTM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGVfYW1kLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlX2FtZC5oCkBAIC01OSw3ICs1OSw3IEBACiAKIGV4dGVybiBpbnQgX19hcHBseV9taWNyb2NvZGVfYW1kKHN0cnVjdCBtaWNyb2NvZGVfYW1kICptY19hbWQpOwogZXh0ZXJuIGludCBhcHBseV9taWNyb2NvZGVfYW1kKGludCBjcHUpOwotZXh0ZXJuIGVudW0gdWNvZGVfc3RhdGUgbG9hZF9taWNyb2NvZGVfYW1kKHU4IGZhbWlseSwgY29uc3QgdTggKmRhdGEsIHNpemVfdCBzaXplKTsKK2V4dGVybiBlbnVtIHVjb2RlX3N0YXRlIGxvYWRfbWljcm9jb2RlX2FtZChpbnQgY3B1LCB1OCBmYW1pbHksIGNvbnN0IHU4ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CiAKICNkZWZpbmUgUEFUQ0hfTUFYX1NJWkUgUEFHRV9TSVpFCiBleHRlcm4gdTggYW1kX3Vjb2RlX3BhdGNoW1BBVENIX01BWF9TSVpFXTsKQEAgLTY4LDEwICs2OCwxMiBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGxvYWRfdWNvZGVfYW1kX2JzcCh2b2lkKTsKIGV4dGVybiB2b2lkIGxvYWRfdWNvZGVfYW1kX2FwKHZvaWQpOwogZXh0ZXJuIGludCBfX2luaXQgc2F2ZV9taWNyb2NvZGVfaW5faW5pdHJkX2FtZCh2b2lkKTsKK3ZvaWQgcmVsb2FkX3Vjb2RlX2FtZCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGxvYWRfdWNvZGVfYW1kX2JzcCh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGxvYWRfdWNvZGVfYW1kX2FwKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIGludCBfX2luaXQgc2F2ZV9taWNyb2NvZGVfaW5faW5pdHJkX2FtZCh2b2lkKSB7IHJldHVybiAtRUlOVkFMOyB9Cit2b2lkIHJlbG9hZF91Y29kZV9hbWQodm9pZCkge30KICNlbmRpZgogCiAjZW5kaWYgLyogX0FTTV9YODZfTUlDUk9DT0RFX0FNRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGVfaW50ZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9pbnRlbC5oCmluZGV4IGJiZTI5NmUuLmRkNGMyMDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9pbnRlbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21pY3JvY29kZV9pbnRlbC5oCkBAIC02OCwxMSArNjgsMTMgQEAKIGV4dGVybiB2b2lkIGxvYWRfdWNvZGVfaW50ZWxfYXAodm9pZCk7CiBleHRlcm4gdm9pZCBzaG93X3Vjb2RlX2luZm9fZWFybHkodm9pZCk7CiBleHRlcm4gaW50IF9faW5pdCBzYXZlX21pY3JvY29kZV9pbl9pbml0cmRfaW50ZWwodm9pZCk7Cit2b2lkIHJlbG9hZF91Y29kZV9pbnRlbCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIF9faW5pdCB2b2lkIGxvYWRfdWNvZGVfaW50ZWxfYnNwKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF91Y29kZV9pbnRlbF9hcCh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIHNob3dfdWNvZGVfaW5mb19lYXJseSh2b2lkKSB7fQogc3RhdGljIGlubGluZSBpbnQgX19pbml0IHNhdmVfbWljcm9jb2RlX2luX2luaXRyZF9pbnRlbCh2b2lkKSB7IHJldHVybiAtRUlOVkFMOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVsb2FkX3Vjb2RlX2ludGVsKHZvaWQpIHt9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01JQ1JPQ09ERV9JTlRFTF9FQVJMWSkgJiYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCAxNjZhZjJhLi40MDI2OWEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTEwLDkgKzEwLDggQEAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2luY2x1ZGUgPGFzbS9tcHguaD4KICNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1faG9va3MuaD4KLQogc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCiAJCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpCiB7CkBAIC01Myw3ICs1MiwxNiBAQAogCQkvKiBTdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLwogCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2socHJldikpOwogCi0JCS8qIExvYWQgdGhlIExEVCwgaWYgdGhlIExEVCBpcyBkaWZmZXJlbnQ6ICovCisJCS8qCisJCSAqIExvYWQgdGhlIExEVCwgaWYgdGhlIExEVCBpcyBkaWZmZXJlbnQuCisJCSAqCisJCSAqIEl0J3MgcG9zc2libGUgbGVhdmVfbW0ocHJldikgaGFzIGJlZW4gY2FsbGVkLiAgSWYgc28sCisJCSAqIHRoZW4gcHJldi0+Y29udGV4dC5sZHQgY291bGQgYmUgb3V0IG9mIHN5bmMgd2l0aCB0aGUKKwkJICogTERUIGRlc2NyaXB0b3Igb3IgdGhlIExEVCByZWdpc3Rlci4gIFRoaXMgY2FuIG9ubHkgaGFwcGVuCisJCSAqIGlmIHByZXYtPmNvbnRleHQubGR0IGlzIG5vbi1udWxsLCBzaW5jZSB3ZSBuZXZlciBmcmVlCisJCSAqIGFuIExEVC4gIEJ1dCBMRFRzIGNhbid0IGJlIHNoYXJlZCBhY3Jvc3MgbW1zLCBzbworCQkgKiBwcmV2LT5jb250ZXh0LmxkdCB3b24ndCBiZSBlcXVhbCB0byBuZXh0LT5jb250ZXh0LmxkdC4KKwkJICovCiAJCWlmICh1bmxpa2VseShwcmV2LT5jb250ZXh0LmxkdCAhPSBuZXh0LT5jb250ZXh0LmxkdCkpCiAJCQlsb2FkX0xEVF9ub2xvY2soJm5leHQtPmNvbnRleHQpOwogCX0KQEAgLTEwMiw0ICsxMTAsMjcgQEAKIH0gd2hpbGUgKDApCiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0sCisJCQkJIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXBhcmF2aXJ0X2FyY2hfZHVwX21tYXAob2xkbW0sIG1tKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXBhcmF2aXJ0X2FyY2hfZXhpdF9tbWFwKG1tKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfYnBybV9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwltcHhfbW1faW5pdChtbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3VubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCW1weF9ub3RpZnlfdW5tYXAobW0sIHZtYSwgc3RhcnQsIGVuZCk7Cit9CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21weC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTJhMTNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXB4LmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgX0FTTV9YODZfTVBYX0gKKyNkZWZpbmUgX0FTTV9YODZfTVBYX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9pbnNuLmg+CisKKy8qCisgKiBOVUxMIGlzIHRoZW9yZXRpY2FsbHkgYSB2YWxpZCBwbGFjZSB0byBwdXQgdGhlIGJvdW5kcworICogZGlyZWN0b3J5LCBzbyBwb2ludCB0aGlzIGF0IGFuIGludmFsaWQgYWRkcmVzcy4KKyAqLworI2RlZmluZSBNUFhfSU5WQUxJRF9CT1VORFNfRElSCSgodm9pZCBfX3VzZXIgKiktMSkKKyNkZWZpbmUgTVBYX0JORENGR19FTkFCTEVfRkxBRwkweDEKKyNkZWZpbmUgTVBYX0JEX0VOVFJZX1ZBTElEX0ZMQUcJMHgxCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisKKy8qIHVwcGVyIDI4IGJpdHMgWzQ3OjIwXSBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIGluIDY0LWJpdCB1c2VkIHRvCisgKiBpbmRleCBpbnRvIGJvdW5kcyBkaXJlY3RvcnkgKEJEKS4KKyAqLworI2RlZmluZSBNUFhfQkRfRU5UUllfT0ZGU0VUCTI4CisjZGVmaW5lIE1QWF9CRF9FTlRSWV9TSElGVAkzCisvKiBiaXRzIFsxOTozXSBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIGluIDY0LWJpdCB1c2VkIHRvIGluZGV4IGludG8KKyAqIGJvdW5kcyB0YWJsZSAoQlQpLgorICovCisjZGVmaW5lIE1QWF9CVF9FTlRSWV9PRkZTRVQJMTcKKyNkZWZpbmUgTVBYX0JUX0VOVFJZX1NISUZUCTUKKyNkZWZpbmUgTVBYX0lHTl9CSVRTCQkzCisjZGVmaW5lIE1QWF9CRF9FTlRSWV9UQUlMCTMKKworI2Vsc2UKKworI2RlZmluZSBNUFhfQkRfRU5UUllfT0ZGU0VUCTIwCisjZGVmaW5lIE1QWF9CRF9FTlRSWV9TSElGVAkyCisjZGVmaW5lIE1QWF9CVF9FTlRSWV9PRkZTRVQJMTAKKyNkZWZpbmUgTVBYX0JUX0VOVFJZX1NISUZUCTQKKyNkZWZpbmUgTVBYX0lHTl9CSVRTCQkyCisjZGVmaW5lIE1QWF9CRF9FTlRSWV9UQUlMCTIKKworI2VuZGlmCisKKyNkZWZpbmUgTVBYX0JEX1NJWkVfQllURVMgKDFVTDw8KE1QWF9CRF9FTlRSWV9PRkZTRVQrTVBYX0JEX0VOVFJZX1NISUZUKSkKKyNkZWZpbmUgTVBYX0JUX1NJWkVfQllURVMgKDFVTDw8KE1QWF9CVF9FTlRSWV9PRkZTRVQrTVBYX0JUX0VOVFJZX1NISUZUKSkKKworI2RlZmluZSBNUFhfQk5EU1RBX1RBSUwJCTIKKyNkZWZpbmUgTVBYX0JORENGR19UQUlMCQkxMgorI2RlZmluZSBNUFhfQk5EU1RBX0FERFJfTUFTSwkofigoMVVMPDxNUFhfQk5EU1RBX1RBSUwpLTEpKQorI2RlZmluZSBNUFhfQk5EQ0ZHX0FERFJfTUFTSwkofigoMVVMPDxNUFhfQk5EQ0ZHX1RBSUwpLTEpKQorI2RlZmluZSBNUFhfQlRfQUREUl9NQVNLCSh+KCgxVUw8PE1QWF9CRF9FTlRSWV9UQUlMKS0xKSkKKworI2RlZmluZSBNUFhfQk5EQ0ZHX0FERFJfTUFTSwkofigoMVVMPDxNUFhfQk5EQ0ZHX1RBSUwpLTEpKQorI2RlZmluZSBNUFhfQk5EU1RBX0VSUk9SX0NPREUJMHgzCisKKyNkZWZpbmUgTVBYX0JEX0VOVFJZX01BU0sJKCgxPDxNUFhfQkRfRU5UUllfT0ZGU0VUKS0xKQorI2RlZmluZSBNUFhfQlRfRU5UUllfTUFTSwkoKDE8PE1QWF9CVF9FTlRSWV9PRkZTRVQpLTEpCisjZGVmaW5lIE1QWF9HRVRfQkRfRU5UUllfT0ZGU0VUKGFkZHIpCSgoKChhZGRyKT4+KE1QWF9CVF9FTlRSWV9PRkZTRVQrIFwKKwkJTVBYX0lHTl9CSVRTKSkgJiBNUFhfQkRfRU5UUllfTUFTSykgPDwgTVBYX0JEX0VOVFJZX1NISUZUKQorI2RlZmluZSBNUFhfR0VUX0JUX0VOVFJZX09GRlNFVChhZGRyKQkoKCgoYWRkcik+Pk1QWF9JR05fQklUUykgJiBcCisJCU1QWF9CVF9FTlRSWV9NQVNLKSA8PCBNUFhfQlRfRU5UUllfU0hJRlQpCisKKyNpZmRlZiBDT05GSUdfWDg2X0lOVEVMX01QWAorc2lnaW5mb190ICptcHhfZ2VuZXJhdGVfc2lnaW5mbyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQlzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c2F2ZV9idWYpOworaW50IG1weF9oYW5kbGVfYmRfZmF1bHQoc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKTsKK3N0YXRpYyBpbmxpbmUgaW50IGtlcm5lbF9tYW5hZ2luZ19tcHhfdGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiAobW0tPmJkX2FkZHIgIT0gTVBYX0lOVkFMSURfQk9VTkRTX0RJUik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbXB4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJLyoKKwkgKiBOVUxMIGlzIHRoZW9yZXRpY2FsbHkgYSB2YWxpZCBwbGFjZSB0byBwdXQgdGhlIGJvdW5kcworCSAqIGRpcmVjdG9yeSwgc28gcG9pbnQgdGhpcyBhdCBhbiBpbnZhbGlkIGFkZHJlc3MuCisJICovCisJbW0tPmJkX2FkZHIgPSBNUFhfSU5WQUxJRF9CT1VORFNfRElSOworfQordm9pZCBtcHhfbm90aWZ5X3VubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc2lnaW5mb190ICptcHhfZ2VuZXJhdGVfc2lnaW5mbyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJICAgICAgc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKQoreworCXJldHVybiBOVUxMOworfQorc3RhdGljIGlubGluZSBpbnQgbXB4X2hhbmRsZV9iZF9mYXVsdChzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c2F2ZV9idWYpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIGludCBrZXJuZWxfbWFuYWdpbmdfbXB4X3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtcHhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtcHhfbm90aWZ5X3VubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl9JTlRFTF9NUFggKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X01QWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKaW5kZXggZjQwOGNhZi4uYjNiZWJmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfNjQuaApAQCAtMzksNiArMzksOCBAQAogCiAjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwogCi0jZGVmaW5lIF9fSEFWRV9BUkNIX0dBVEVfQVJFQSAxCisjaWZkZWYgQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04KKyMgZGVmaW5lIF9fSEFWRV9BUkNIX0dBVEVfQVJFQSAxCisjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X1BBR0VfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggY2Q2ZTE2MS4uMzI0NDRhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC0zMzAsMTMgKzMzMCwxMyBAQAogCVBWT1BfVkNBTEwyKHB2X21tdV9vcHMuYWN0aXZhdGVfbW0sIHByZXYsIG5leHQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKLQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKKwkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlQVk9QX1ZDQUxMMihwdl9tbXVfb3BzLmR1cF9tbWFwLCBvbGRtbSwgbW0pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9leGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYXJjaF9leGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJUFZPUF9WQ0FMTDEocHZfbW11X29wcy5leGl0X21tYXAsIG1tKTsKIH0KQEAgLTk4Niw1ICs5ODYsMTUgQEAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbHNlICAvKiBDT05GSUdfUEFSQVZJUlQgKi8KICMgZGVmaW5lIGRlZmF1bHRfYmFubmVyIHg4Nl9pbml0X25vb3AKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdGF0aWMgaW5saW5lIHZvaWQgcGFyYXZpcnRfYXJjaF9kdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKKwkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhcmF2aXJ0X2FyY2hfZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qICFDT05GSUdfUEFSQVZJUlQgKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9QQVJBVklSVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCmluZGV4IGUyYzE2NjguLjkxYmM0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCkBAIC0xMSwxNiArMTEsMTcgQEAKICNlbmRpZgogCiBleHRlcm4gdm9pZCBwYXRfaW5pdCh2b2lkKTsKK3ZvaWQgcGF0X2luaXRfY2FjaGVfbW9kZXModm9pZCk7CiAKIGV4dGVybiBpbnQgcmVzZXJ2ZV9tZW10eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwKLQkJdW5zaWduZWQgbG9uZyByZXFfdHlwZSwgdW5zaWduZWQgbG9uZyAqcmV0X3R5cGUpOworCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSByZXFfcGNtLCBlbnVtIHBhZ2VfY2FjaGVfbW9kZSAqcmV0X3BjbSk7CiBleHRlcm4gaW50IGZyZWVfbWVtdHlwZSh1NjQgc3RhcnQsIHU2NCBlbmQpOwogCiBleHRlcm4gaW50IGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHU2NCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCXVuc2lnbmVkIGxvbmcgZmxhZyk7CisJCWVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSk7CiAKIGludCBpb19yZXNlcnZlX21lbXR5cGUocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgZW5kLAotCQkJdW5zaWduZWQgbG9uZyAqdHlwZSk7CisJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSAqcGNtKTsKIAogdm9pZCBpb19mcmVlX21lbXR5cGUocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgZW5kKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAppbmRleCBmZDQ3MjE4Li5lMGJhNjZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtNjQsNyArNjQsNyBAQAogI2RlZmluZSBfX3BlcmNwdV9wcmVmaXgJCSIiCiAjZW5kaWYKIAotI2RlZmluZSBfX3BlcmNwdV9hcmcoeCkJCV9fcGVyY3B1X3ByZWZpeCAiJVAiICN4CisjZGVmaW5lIF9fcGVyY3B1X2FyZyh4KQkJX19wZXJjcHVfcHJlZml4ICIlIiAjeAogCiAvKgogICogSW5pdGlhbGl6ZWQgcG9pbnRlcnMgdG8gcGVyLWNwdSB2YXJpYWJsZXMgbmVlZGVkIGZvciB0aGUgYm9vdApAQCAtMTc5LDI5ICsxNzksNTggQEAKIAl9CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIHBlcmNwdV9mcm9tX29wKG9wLCB2YXIsIGNvbnN0cmFpbnQpCQlcCisjZGVmaW5lIHBlcmNwdV9mcm9tX29wKG9wLCB2YXIpCQkJCVwKICh7CQkJCQkJCVwKIAl0eXBlb2YodmFyKSBwZm9fcmV0X187CQkJCVwKIAlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCVwKIAljYXNlIDE6CQkJCQkJXAogCQlhc20ob3AgImIgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9cSIgKHBmb19yZXRfXykJCQlcCi0JCSAgICA6IGNvbnN0cmFpbnQpOwkJCVwKKwkJICAgIDogIm0iICh2YXIpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgMjoJCQkJCQlcCiAJCWFzbShvcCAidyAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKIAkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKLQkJICAgIDogY29uc3RyYWludCk7CQkJXAorCQkgICAgOiAibSIgKHZhcikpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCiAJY2FzZSA0OgkJCQkJCVwKIAkJYXNtKG9wICJsICJfX3BlcmNwdV9hcmcoMSkiLCUwIgkJXAogCQkgICAgOiAiPXIiIChwZm9fcmV0X18pCQkJXAotCQkgICAgOiBjb25zdHJhaW50KTsJCQlcCisJCSAgICA6ICJtIiAodmFyKSk7CQkJXAogCQlicmVhazsJCQkJCVwKIAljYXNlIDg6CQkJCQkJXAogCQlhc20ob3AgInEgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9ciIgKHBmb19yZXRfXykJCQlcCi0JCSAgICA6IGNvbnN0cmFpbnQpOwkJCVwKKwkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJXAorCX0JCQkJCQlcCisJcGZvX3JldF9fOwkJCQkJXAorfSkKKworI2RlZmluZSBwZXJjcHVfc3RhYmxlX29wKG9wLCB2YXIpCQkJXAorKHsJCQkJCQkJXAorCXR5cGVvZih2YXIpIHBmb19yZXRfXzsJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJXAorCWNhc2UgMToJCQkJCQlcCisJCWFzbShvcCAiYiAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1xIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgMjoJCQkJCQlcCisJCWFzbShvcCAidyAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgNDoJCQkJCQlcCisJCWFzbShvcCAibCAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgODoJCQkJCQlcCisJCWFzbShvcCAicSAiX19wZXJjcHVfYXJnKFAxKSIsJTAiCVwKKwkJICAgIDogIj1yIiAocGZvX3JldF9fKQkJCVwKKwkJICAgIDogInAiICgmKHZhcikpKTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJXAogCX0JCQkJCQlcCkBAIC0zNTksMTEgKzM4OCwxMSBAQAogICogcGVyLXRocmVhZCB2YXJpYWJsZXMgaW1wbGVtZW50ZWQgYXMgcGVyLWNwdSB2YXJpYWJsZXMgYW5kIHRodXMKICAqIHN0YWJsZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXNwZWN0aXZlIHRhc2suCiAgKi8KLSNkZWZpbmUgdGhpc19jcHVfcmVhZF9zdGFibGUodmFyKQlwZXJjcHVfZnJvbV9vcCgibW92IiwgdmFyLCAicCIgKCYodmFyKSkpCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfc3RhYmxlKHZhcikJcGVyY3B1X3N0YWJsZV9vcCgibW92IiwgdmFyKQogCi0jZGVmaW5lIHJhd19jcHVfcmVhZF8xKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCi0jZGVmaW5lIHJhd19jcHVfcmVhZF8yKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCi0jZGVmaW5lIHJhd19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIHJhd19jcHVfcmVhZF8xKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCisjZGVmaW5lIHJhd19jcHVfcmVhZF8yKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCisjZGVmaW5lIHJhd19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCiAKICNkZWZpbmUgcmF3X2NwdV93cml0ZV8xKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIHJhd19jcHVfd3JpdGVfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQpAQCAtMzgxLDkgKzQxMCw5IEBACiAjZGVmaW5lIHJhd19jcHVfeGNoZ18yKHBjcCwgdmFsKQlwZXJjcHVfeGNoZ19vcChwY3AsIHZhbCkKICNkZWZpbmUgcmF3X2NwdV94Y2hnXzQocGNwLCB2YWwpCXBlcmNwdV94Y2hnX29wKHBjcCwgdmFsKQogCi0jZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQotI2RlZmluZSB0aGlzX2NwdV9yZWFkXzIocGNwKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIChwY3ApLCAibSIocGNwKSkKLSNkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgcGNwKQorI2RlZmluZSB0aGlzX2NwdV9yZWFkXzIocGNwKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBjcCkKKyNkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCBwY3ApCiAjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCkBAIC00MzUsNyArNDY0LDcgQEAKICAqIDMyIGJpdCBtdXN0IGZhbGwgYmFjayB0byBnZW5lcmljIG9wZXJhdGlvbnMuCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIHJhd19jcHVfcmVhZF84KHBjcCkJCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQorI2RlZmluZSByYXdfY3B1X3JlYWRfOChwY3ApCQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBjcCkKICNkZWZpbmUgcmF3X2NwdV93cml0ZV84KHBjcCwgdmFsKQkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQogI2RlZmluZSByYXdfY3B1X2FkZF84KHBjcCwgdmFsKQkJCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKICNkZWZpbmUgcmF3X2NwdV9hbmRfOChwY3AsIHZhbCkJCQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCkBAIC00NDQsNyArNDczLDcgQEAKICNkZWZpbmUgcmF3X2NwdV94Y2hnXzgocGNwLCBudmFsKQkJcGVyY3B1X3hjaGdfb3AocGNwLCBudmFsKQogI2RlZmluZSByYXdfY3B1X2NtcHhjaGdfOChwY3AsIG92YWwsIG52YWwpCXBlcmNwdV9jbXB4Y2hnX29wKHBjcCwgb3ZhbCwgbnZhbCkKIAotI2RlZmluZSB0aGlzX2NwdV9yZWFkXzgocGNwKQkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApCQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBjcCkKICNkZWZpbmUgdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbCkJCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfYWRkXzgocGNwLCB2YWwpCQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCiAjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKQkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQpAQCAtNTIyLDcgKzU1MSw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CiAKIC8qIFdlIGNhbiB1c2UgdGhpcyBkaXJlY3RseSBmb3IgbG9jYWwgQ1BVIChmYXN0ZXIpLiAqLwotREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHRoaXNfY3B1X29mZik7CitERUNMQVJFX1BFUl9DUFVfUkVBRF9NT1NUTFkodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKTsKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCmluZGV4IDhkZmM5ZmQuLmRjMGY2ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTE3Nyw2ICsxNzcsOSBAQAogI2RlZmluZSBJQlNfQ0FQU19CUk5UUkdUCQkoMVU8PDUpCiAjZGVmaW5lIElCU19DQVBTX09QQ05URVhUCQkoMVU8PDYpCiAjZGVmaW5lIElCU19DQVBTX1JJUElOVkFMSURDSEsJCSgxVTw8NykKKyNkZWZpbmUgSUJTX0NBUFNfT1BCUk5GVVNFCQkoMVU8PDgpCisjZGVmaW5lIElCU19DQVBTX0ZFVENIQ1RMRVhURAkJKDFVPDw5KQorI2RlZmluZSBJQlNfQ0FQU19PUERBVEE0CQkoMVU8PDEwKQogCiAjZGVmaW5lIElCU19DQVBTX0RFRkFVTFQJCShJQlNfQ0FQU19BVkFJTAkJXAogCQkJCQkgfCBJQlNfQ0FQU19GRVRDSFNBTQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYWE5N2EwNy4uZThhNTQ1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtOSw5ICs5LDEwIEBACiAvKgogICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyBVQy0KICAqLwotI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCQkJCQlcCi0JKChib290X2NwdV9kYXRhLng4NiA+IDMpCQkJCVwKLQkgPyAoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX0NBQ0hFX1VDX01JTlVTKSkJXAorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCQkJCQkJXAorCSgoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQkJCQkJXAorCSA/IChfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwJCQkJCVwKKwkJICAgICBjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKSkpCVwKIAkgOiAocHJvdCkpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC05OSw2ICsxMDAsMTEgQEAKIAlyZXR1cm4gcHRlX2ZsYWdzKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcG1kX2RpcnR5KHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gcG1kX2ZsYWdzKHBtZCkgJiBfUEFHRV9ESVJUWTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgcG1kX3lvdW5nKHBtZF90IHBtZCkKIHsKIAlyZXR1cm4gcG1kX2ZsYWdzKHBtZCkgJiBfUEFHRV9BQ0NFU1NFRDsKQEAgLTQwNCw4ICs0MTAsOCBAQAogI2RlZmluZSBjYW5vbl9wZ3Byb3QocCkgX19wZ3Byb3QobWFzc2FnZV9wZ3Byb3QocCkpCiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX25ld19tZW10eXBlX2FsbG93ZWQodTY0IHBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkJCQkgdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MpCisJCQkJCSBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY20sCisJCQkJCSBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBuZXdfcGNtKQogewogCS8qCiAJICogUEFUIHR5cGUgaXMgYWx3YXlzIFdCIGZvciB1bnRyYWNrZWQgcmFuZ2VzLCBzbyBubyBuZWVkIHRvIGNoZWNrLgpAQCAtNDE5LDEwICs0MjUsMTAgQEAKIAkgKiAtIHJlcXVlc3QgaXMgdW5jYWNoZWQsIHJldHVybiBjYW5ub3QgYmUgd3JpdGUtYmFjawogCSAqIC0gcmVxdWVzdCBpcyB3cml0ZS1jb21iaW5lLCByZXR1cm4gY2Fubm90IGJlIHdyaXRlLWJhY2sKIAkgKi8KLQlpZiAoKGZsYWdzID09IF9QQUdFX0NBQ0hFX1VDX01JTlVTICYmCi0JICAgICBuZXdfZmxhZ3MgPT0gX1BBR0VfQ0FDSEVfV0IpIHx8Ci0JICAgIChmbGFncyA9PSBfUEFHRV9DQUNIRV9XQyAmJgotCSAgICAgbmV3X2ZsYWdzID09IF9QQUdFX0NBQ0hFX1dCKSkgeworCWlmICgocGNtID09IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMgJiYKKwkgICAgIG5ld19wY20gPT0gX1BBR0VfQ0FDSEVfTU9ERV9XQikgfHwKKwkgICAgKHBjbSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dDICYmCisJICAgICBuZXdfcGNtID09IF9QQUdFX0NBQ0hFX01PREVfV0IpKSB7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oCmluZGV4IGVkNTkwM2IuLjlmYjJmMmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyX3R5cGVzLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNkZWZpbmUgTEFTVF9QS01BUCAxMDI0CiAjZW5kaWYKIAotI2RlZmluZSBQS01BUF9CQVNFICgoRklYQUREUl9CT09UX1NUQVJUIC0gUEFHRV9TSVpFICogKExBU1RfUEtNQVAgKyAxKSkJXAorI2RlZmluZSBQS01BUF9CQVNFICgoRklYQUREUl9TVEFSVCAtIFBBR0VfU0laRSAqIChMQVNUX1BLTUFQICsgMSkpCVwKIAkJICAgICYgUE1EX01BU0spCiAKICNpZmRlZiBDT05GSUdfSElHSE1FTQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NF90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NF90eXBlcy5oCmluZGV4IDcxNjZlMjUuLjYwMmI2MDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjRfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0X3R5cGVzLmgKQEAgLTYzLDYgKzYzLDggQEAKICNkZWZpbmUgTU9EVUxFU19MRU4gICAoTU9EVUxFU19FTkQgLSBNT0RVTEVTX1ZBRERSKQogI2RlZmluZSBFU1BGSVhfUEdEX0VOVFJZIF9BQygtMiwgVUwpCiAjZGVmaW5lIEVTUEZJWF9CQVNFX0FERFIgKEVTUEZJWF9QR0RfRU5UUlkgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIEVGSV9WQV9TVEFSVAkgKCAtNCAqIChfQUMoMSwgVUwpIDw8IDMwKSkKKyNkZWZpbmUgRUZJX1ZBX0VORAkgKC02OCAqIChfQUMoMSwgVUwpIDw8IDMwKSkKIAogI2RlZmluZSBFQVJMWV9EWU5BTUlDX1BBR0VfVEFCTEVTCTY0CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAppbmRleCAwNzc4OTY0Li5hZjQ0N2Y5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCkBAIC0xMjgsMTEgKzEyOCwyOCBAQAogCQkJIF9QQUdFX1NPRlRfRElSVFkgfCBfUEFHRV9OVU1BKQogI2RlZmluZSBfSFBBR0VfQ0hHX01BU0sgKF9QQUdFX0NIR19NQVNLIHwgX1BBR0VfUFNFIHwgX1BBR0VfTlVNQSkKIAotI2RlZmluZSBfUEFHRV9DQUNIRV9NQVNLCShfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpCi0jZGVmaW5lIF9QQUdFX0NBQ0hFX1dCCQkoMCkKLSNkZWZpbmUgX1BBR0VfQ0FDSEVfV0MJCShfUEFHRV9QV1QpCi0jZGVmaW5lIF9QQUdFX0NBQ0hFX1VDX01JTlVTCShfUEFHRV9QQ0QpCi0jZGVmaW5lIF9QQUdFX0NBQ0hFX1VDCQkoX1BBR0VfUENEIHwgX1BBR0VfUFdUKQorLyoKKyAqIFRoZSBjYWNoZSBtb2RlcyBkZWZpbmVkIGhlcmUgYXJlIHVzZWQgdG8gdHJhbnNsYXRlIGJldHdlZW4gcHVyZSBTVyB1c2FnZQorICogYW5kIHRoZSBIVyBkZWZpbmVkIGNhY2hlIG1vZGUgYml0cyBhbmQvb3IgUEFUIGVudHJpZXMuCisgKgorICogVGhlIHJlc3VsdGluZyBiaXRzIGZvciBQV1QsIFBDRCBhbmQgUEFUIHNob3VsZCBiZSBjaG9zZW4gaW4gYSB3YXkKKyAqIHRvIGhhdmUgdGhlIFdCIG1vZGUgYXQgaW5kZXggMCAoYWxsIGJpdHMgY2xlYXIpLiBUaGlzIGlzIHRoZSBkZWZhdWx0CisgKiByaWdodCBub3cgYW5kIGxpa2VseSB3b3VsZCBicmVhayB0b28gbXVjaCBpZiBjaGFuZ2VkLgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZW51bSBwYWdlX2NhY2hlX21vZGUgeworCV9QQUdFX0NBQ0hFX01PREVfV0IgPSAwLAorCV9QQUdFX0NBQ0hFX01PREVfV0MgPSAxLAorCV9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMgPSAyLAorCV9QQUdFX0NBQ0hFX01PREVfVUMgPSAzLAorCV9QQUdFX0NBQ0hFX01PREVfV1QgPSA0LAorCV9QQUdFX0NBQ0hFX01PREVfV1AgPSA1LAorCV9QQUdFX0NBQ0hFX01PREVfTlVNID0gOAorfTsKKyNlbmRpZgorCisjZGVmaW5lIF9QQUdFX0NBQ0hFX01BU0sJKF9QQUdFX1BBVCB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKyNkZWZpbmUgX1BBR0VfTk9DQUNIRQkJKGNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUMpKQogCiAjZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX0FDQ0VTU0VEKQogI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgXApAQCAtMTU2LDQxICsxNzMsMjcgQEAKIAogI2RlZmluZSBfX1BBR0VfS0VSTkVMX1JPCQkoX19QQUdFX0tFUk5FTCAmIH5fUEFHRV9SVykKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9SWAkJKF9fUEFHRV9LRVJORUxfRVhFQyAmIH5fUEFHRV9SVykKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9FWEVDX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfRVhFQyB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9XQwkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9DQUNIRV9XQykKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9OT0NBQ0hFCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9VQ19NSU5VUwkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QQ0QpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfTk9DQUNIRQkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9OT0NBQ0hFKQogI2RlZmluZSBfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMCQkoX19QQUdFX0tFUk5FTF9SWCB8IF9QQUdFX1VTRVIpCiAjZGVmaW5lIF9fUEFHRV9LRVJORUxfVlZBUgkJKF9fUEFHRV9LRVJORUxfUk8gfCBfUEFHRV9VU0VSKQotI2RlZmluZSBfX1BBR0VfS0VSTkVMX1ZWQVJfTk9DQUNIRQkoX19QQUdFX0tFUk5FTF9WVkFSIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUKQogI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BTRSkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfQ0FDSEVfVUMgfCBfUEFHRV9QU0UpCiAjZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQwkoX19QQUdFX0tFUk5FTF9FWEVDIHwgX1BBR0VfUFNFKQogCiAjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU8JCShfX1BBR0VfS0VSTkVMKQogI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lPX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfTk9DQUNIRSkKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9JT19VQ19NSU5VUwkoX19QQUdFX0tFUk5FTF9VQ19NSU5VUykKLSNkZWZpbmUgX19QQUdFX0tFUk5FTF9JT19XQwkJKF9fUEFHRV9LRVJORUxfV0MpCiAKICNkZWZpbmUgUEFHRV9LRVJORUwJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMKQogI2RlZmluZSBQQUdFX0tFUk5FTF9STwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfUk8pCiAjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfRVhFQykKICNkZWZpbmUgUEFHRV9LRVJORUxfUlgJCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1JYKQotI2RlZmluZSBQQUdFX0tFUk5FTF9XQwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfV0MpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTk9DQUNIRSkKLSNkZWZpbmUgUEFHRV9LRVJORUxfVUNfTUlOVVMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfVUNfTUlOVVMpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRSkKICNkZWZpbmUgUEFHRV9LRVJORUxfTEFSR0UJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0UpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFX05PQ0FDSEUJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFKQogI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRV9FWEVDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1ZTWVNDQUxMCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMKQogI2RlZmluZSBQQUdFX0tFUk5FTF9WVkFSCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1ZWQVIpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX1ZWQVJfTk9DQUNIRQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1ZWQVJfTk9DQUNIRSkKIAogI2RlZmluZSBQQUdFX0tFUk5FTF9JTwkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU8pCiAjZGVmaW5lIFBBR0VfS0VSTkVMX0lPX05PQ0FDSEUJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU9fTk9DQUNIRSkKLSNkZWZpbmUgUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMJCV9fcGdwcm90KF9fUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0lPX1dDCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX1dDKQogCiAvKiAgICAgICAgIHh3ciAqLwogI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCkBAIC0zNDEsNiArMzQ0LDU5IEBACiAjZGVmaW5lIHBncHJvdF92YWwoeCkJKCh4KS5wZ3Byb3QpCiAjZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQogCitleHRlcm4gdWludDE2X3QgX19jYWNoZW1vZGUycHRlX3RibFtfUEFHRV9DQUNIRV9NT0RFX05VTV07CitleHRlcm4gdWludDhfdCBfX3B0ZTJjYWNoZW1vZGVfdGJsWzhdOworCisjZGVmaW5lIF9fcHRlMmNtX2lkeChjYikJCQkJXAorCSgoKChjYikgPj4gKF9QQUdFX0JJVF9QQVQgLSAyKSkgJiA0KSB8CQlcCisJICgoKGNiKSA+PiAoX1BBR0VfQklUX1BDRCAtIDEpKSAmIDIpIHwJCVwKKwkgKCgoY2IpID4+IF9QQUdFX0JJVF9QV1QpICYgMSkpCisjZGVmaW5lIF9fY21faWR4MnB0ZShpKQkJCQkJXAorCSgoKChpKSAmIDQpIDw8IChfUEFHRV9CSVRfUEFUIC0gMikpIHwJCVwKKwkgKCgoaSkgJiAyKSA8PCAoX1BBR0VfQklUX1BDRCAtIDEpKSB8CQlcCisJICgoKGkpICYgMSkgPDwgX1BBR0VfQklUX1BXVCkpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjYWNoZW1vZGUycHJvdHZhbChlbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY20pCit7CisJaWYgKGxpa2VseShwY20gPT0gMCkpCisJCXJldHVybiAwOworCXJldHVybiBfX2NhY2hlbW9kZTJwdGVfdGJsW3BjbV07Cit9CitzdGF0aWMgaW5saW5lIHBncHJvdF90IGNhY2hlbW9kZTJwZ3Byb3QoZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtKQoreworCXJldHVybiBfX3BncHJvdChjYWNoZW1vZGUycHJvdHZhbChwY20pKTsKK30KK3N0YXRpYyBpbmxpbmUgZW51bSBwYWdlX2NhY2hlX21vZGUgcGdwcm90MmNhY2hlbW9kZShwZ3Byb3RfdCBwZ3Byb3QpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrZWQ7CisKKwltYXNrZWQgPSBwZ3Byb3RfdmFsKHBncHJvdCkgJiBfUEFHRV9DQUNIRV9NQVNLOworCWlmIChsaWtlbHkobWFza2VkID09IDApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gX19wdGUyY2FjaGVtb2RlX3RibFtfX3B0ZTJjbV9pZHgobWFza2VkKV07Cit9CitzdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF80a18yX2xhcmdlKHBncHJvdF90IHBncHJvdCkKK3sKKwlwZ3Byb3RfdCBuZXc7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwl2YWwgPSBwZ3Byb3RfdmFsKHBncHJvdCk7CisJcGdwcm90X3ZhbChuZXcpID0gKHZhbCAmIH4oX1BBR0VfUEFUIHwgX1BBR0VfUEFUX0xBUkdFKSkgfAorCQkoKHZhbCAmIF9QQUdFX1BBVCkgPDwgKF9QQUdFX0JJVF9QQVRfTEFSR0UgLSBfUEFHRV9CSVRfUEFUKSk7CisJcmV0dXJuIG5ldzsKK30KK3N0YXRpYyBpbmxpbmUgcGdwcm90X3QgcGdwcm90X2xhcmdlXzJfNGsocGdwcm90X3QgcGdwcm90KQoreworCXBncHJvdF90IG5ldzsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXZhbCA9IHBncHJvdF92YWwocGdwcm90KTsKKwlwZ3Byb3RfdmFsKG5ldykgPSAodmFsICYgfihfUEFHRV9QQVQgfCBfUEFHRV9QQVRfTEFSR0UpKSB8CisJCQkgICgodmFsICYgX1BBR0VfUEFUX0xBUkdFKSA+PgorCQkJICAgKF9QQUdFX0JJVF9QQVRfTEFSR0UgLSBfUEFHRV9CSVRfUEFUKSk7CisJcmV0dXJuIG5ldzsKK30KKwogCiB0eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByZWVtcHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByZWVtcHQuaAppbmRleCA0MDA4NzM0Li44ZjMyNzE4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJlZW1wdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByZWVtcHQuaApAQCAtMzAsOSArMzAsNiBAQAogLyoKICAqIG11c3QgYmUgbWFjcm9zIHRvIGF2b2lkIGhlYWRlciByZWN1cnNpb24gaGVsbAogICovCi0jZGVmaW5lIHRhc2tfcHJlZW1wdF9jb3VudChwKSBcCi0JKHRhc2tfdGhyZWFkX2luZm8ocCktPnNhdmVkX3ByZWVtcHRfY291bnQgJiB+UFJFRU1QVF9ORUVEX1JFU0NIRUQpCi0KICNkZWZpbmUgaW5pdF90YXNrX3ByZWVtcHRfY291bnQocCkgZG8geyBcCiAJdGFza190aHJlYWRfaW5mbyhwKS0+c2F2ZWRfcHJlZW1wdF9jb3VudCA9IFBSRUVNUFRfRElTQUJMRUQ7IFwKIH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGViNzFlYzcuLmEwOTJhMGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xMjcsNyArMTI3LDcgQEAKIAkvKiBJbmRleCBpbnRvIHBlcl9jcHUgbGlzdDogKi8KIAl1MTYJCQljcHVfaW5kZXg7CiAJdTMyCQkJbWljcm9jb2RlOwotfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhTTVBfQ0FDSEVfQllURVMpKSk7Cit9OwogCiAjZGVmaW5lIFg4Nl9WRU5ET1JfSU5URUwJMAogI2RlZmluZSBYODZfVkVORE9SX0NZUklYCTEKQEAgLTE1MSw3ICsxNTEsNyBAQAogZXh0ZXJuIF9fdTMyCQkJY3B1X2NhcHNfc2V0W05DQVBJTlRTXTsKIAogI2lmZGVmIENPTkZJR19TTVAKLURFQ0xBUkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgY3B1aW5mb194ODYsIGNwdV9pbmZvKTsKK0RFQ0xBUkVfUEVSX0NQVV9SRUFEX01PU1RMWShzdHJ1Y3QgY3B1aW5mb194ODYsIGNwdV9pbmZvKTsKICNkZWZpbmUgY3B1X2RhdGEoY3B1KQkJcGVyX2NwdShjcHVfaW5mbywgY3B1KQogI2Vsc2UKICNkZWZpbmUgY3B1X2luZm8JCWJvb3RfY3B1X2RhdGEKQEAgLTM3NCwxMyArMzc0LDE0IEBACiAJdTggcmVzZXJ2ZWRbMTI4XTsKIH07CiAKLXN0cnVjdCBibmRyZWdzX3N0cnVjdCB7Ci0JdTY0IGJuZHJlZ3NbOF07CitzdHJ1Y3QgYm5kcmVnIHsKKwl1NjQgbG93ZXJfYm91bmQ7CisJdTY0IHVwcGVyX2JvdW5kOwogfSBfX3BhY2tlZDsKIAotc3RydWN0IGJuZGNzcl9zdHJ1Y3QgewotCXU2NCBjZmdfcmVnX3U7Ci0JdTY0IHN0YXR1c19yZWc7CitzdHJ1Y3QgYm5kY3NyIHsKKwl1NjQgYm5kY2ZndTsKKwl1NjQgYm5kc3RhdHVzOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IHhzYXZlX2hkcl9zdHJ1Y3QgewpAQCAtMzk0LDggKzM5NSw4IEBACiAJc3RydWN0IHhzYXZlX2hkcl9zdHJ1Y3QgeHNhdmVfaGRyOwogCXN0cnVjdCB5bW1oX3N0cnVjdCB5bW1oOwogCXN0cnVjdCBsd3Bfc3RydWN0IGx3cDsKLQlzdHJ1Y3QgYm5kcmVnc19zdHJ1Y3QgYm5kcmVnczsKLQlzdHJ1Y3QgYm5kY3NyX3N0cnVjdCBibmRjc3I7CisJc3RydWN0IGJuZHJlZyBibmRyZWdbNF07CisJc3RydWN0IGJuZGNzciBibmRjc3I7CiAJLyogbmV3IHByb2Nlc3NvciBzdGF0ZSBleHRlbnNpb25zIHdpbGwgZ28gaGVyZSAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLCBhbGlnbmVkICg2NCkpKTsKIApAQCAtODkzLDcgKzg5NCwxMyBAQAogCiAjZWxzZQogLyoKLSAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplLiA0N2JpdHMgbWludXMgb25lIGd1YXJkIHBhZ2UuCisgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZS4gNDdiaXRzIG1pbnVzIG9uZSBndWFyZCBwYWdlLiAgVGhlIGd1YXJkCisgKiBwYWdlIGlzIG5lY2Vzc2FyeSBvbiBJbnRlbCBDUFVzOiBpZiBhIFNZU0NBTEwgaW5zdHJ1Y3Rpb24gaXMgYXQKKyAqIHRoZSBoaWdoZXN0IHBvc3NpYmxlIGNhbm9uaWNhbCB1c2Vyc3BhY2UgYWRkcmVzcywgdGhlbiB0aGF0CisgKiBzeXNjYWxsIHdpbGwgZW50ZXIgdGhlIGtlcm5lbCB3aXRoIGEgbm9uLWNhbm9uaWNhbCByZXR1cm4KKyAqIGFkZHJlc3MsIGFuZCBTWVNSRVQgd2lsbCBleHBsb2RlIGRhbmdlcm91c2x5LiAgV2UgYXZvaWQgdGhpcworICogcGFydGljdWxhciBwcm9ibGVtIGJ5IHByZXZlbnRpbmcgYW55dGhpbmcgZnJvbSBiZWluZyBtYXBwZWQKKyAqIGF0IHRoZSBtYXhpbXVtIGNhbm9uaWNhbCBhZGRyZXNzLgogICovCiAjZGVmaW5lIFRBU0tfU0laRV9NQVgJKCgxVUwgPDwgNDcpIC0gUEFHRV9TSVpFKQogCkBAIC05NTMsNiArOTYwLDI0IEBACiBleHRlcm4gaW50IGdldF90c2NfbW9kZSh1bnNpZ25lZCBsb25nIGFkcik7CiBleHRlcm4gaW50IHNldF90c2NfbW9kZSh1bnNpZ25lZCBpbnQgdmFsKTsKIAorLyogUmVnaXN0ZXIvdW5yZWdpc3RlciBhIHByb2Nlc3MnIE1QWCByZWxhdGVkIHJlc291cmNlICovCisjZGVmaW5lIE1QWF9FTkFCTEVfTUFOQUdFTUVOVCh0c2spCW1weF9lbmFibGVfbWFuYWdlbWVudCgodHNrKSkKKyNkZWZpbmUgTVBYX0RJU0FCTEVfTUFOQUdFTUVOVCh0c2spCW1weF9kaXNhYmxlX21hbmFnZW1lbnQoKHRzaykpCisKKyNpZmRlZiBDT05GSUdfWDg2X0lOVEVMX01QWAorZXh0ZXJuIGludCBtcHhfZW5hYmxlX21hbmFnZW1lbnQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIGludCBtcHhfZGlzYWJsZV9tYW5hZ2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBtcHhfZW5hYmxlX21hbmFnZW1lbnQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIGludCBtcHhfZGlzYWJsZV9tYW5hZ2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmIC8qIENPTkZJR19YODZfSU5URUxfTVBYICovCisKIGV4dGVybiB1MTYgYW1kX2dldF9uYl9pZChpbnQgY3B1KTsKIAogc3RhdGljIGlubGluZSB1aW50MzJfdCBoeXBlcnZpc29yX2NwdWlkX2Jhc2UoY29uc3QgY2hhciAqc2lnLCB1aW50MzJfdCBsZWF2ZXMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCA5Mjk1MDE2Li5hNGVmZTQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE4Myw4ICsxODMsMjAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl91bmxvY2tfd2FpdChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0Jd2hpbGUgKGFyY2hfc3Bpbl9pc19sb2NrZWQobG9jaykpCisJX190aWNrZXRfdCBoZWFkID0gQUNDRVNTX09OQ0UobG9jay0+dGlja2V0cy5oZWFkKTsKKworCWZvciAoOzspIHsKKwkJc3RydWN0IF9fcmF3X3RpY2tldHMgdG1wID0gQUNDRVNTX09OQ0UobG9jay0+dGlja2V0cyk7CisJCS8qCisJCSAqIFdlIG5lZWQgdG8gY2hlY2sgInVubG9ja2VkIiBpbiBhIGxvb3AsIHRtcC5oZWFkID09IGhlYWQKKwkJICogY2FuIGJlIGZhbHNlIHBvc2l0aXZlIGJlY2F1c2Ugb2Ygb3ZlcmZsb3cuCisJCSAqLworCQlpZiAodG1wLmhlYWQgPT0gKHRtcC50YWlsICYgflRJQ0tFVF9TTE9XUEFUSF9GTEFHKSB8fAorCQkgICAgdG1wLmhlYWQgIT0gaGVhZCkKKwkJCWJyZWFrOworCiAJCWNwdV9yZWxheCgpOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgKaW5kZXggZDdmM2IzYi4uNzUxYmY0YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgKQEAgLTc5LDEyICs3OSwxMiBAQAogI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwogCiAvKiBmcmFtZSBwb2ludGVyIG11c3QgYmUgbGFzdCBmb3IgZ2V0X3djaGFuICovCi0jZGVmaW5lIFNBVkVfQ09OVEVYVCAgICAicHVzaGYgOyBwdXNocSAlJXJicCA7IG1vdnEgJSVyc2ksJSVyYnBcblx0IgotI2RlZmluZSBSRVNUT1JFX0NPTlRFWFQgIm1vdnEgJSVyYnAsJSVyc2kgOyBwb3BxICUlcmJwIDsgcG9wZlx0IgorI2RlZmluZSBTQVZFX0NPTlRFWFQgICAgInB1c2hxICUlcmJwIDsgbW92cSAlJXJzaSwlJXJicFxuXHQiCisjZGVmaW5lIFJFU1RPUkVfQ09OVEVYVCAibW92cSAlJXJicCwlJXJzaSA7IHBvcHEgJSVyYnBcdCIKIAogI2RlZmluZSBfX0VYVFJBX0NMT0JCRVIgIFwKIAksICJyY3giLCAicmJ4IiwgInJkeCIsICJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgXAotCSAgInIxMiIsICJyMTMiLCAicjE0IiwgInIxNSIKKwkgICJyMTIiLCAicjEzIiwgInIxNCIsICJyMTUiLCAiZmxhZ3MiCiAKICNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKICNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5CQkJCQkJCSAgXApAQCAtMTAwLDcgKzEwMCwxMSBAQAogI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfaXBhcmFtCiAjZW5kaWYJLyogQ0NfU1RBQ0tQUk9URUNUT1IgKi8KIAotLyogU2F2ZSByZXN0b3JlIGZsYWdzIHRvIGNsZWFyIGhhbmRsZSBsZWFraW5nIE5UICovCisvKgorICogVGhlcmUgaXMgbm8gbmVlZCB0byBzYXZlIG9yIHJlc3RvcmUgZmxhZ3MsIGJlY2F1c2UgZmxhZ3MgYXJlIGFsd2F5cworICogY2xlYW4gaW4ga2VybmVsIG1vZGUsIHdpdGggdGhlIHBvc3NpYmxlIGV4Y2VwdGlvbiBvZiBJT1BMLiAgS2VybmVsIElPUEwKKyAqIGhhcyBubyBlZmZlY3QuCisgKi8KICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpIFwKIAlhc20gdm9sYXRpbGUoU0FWRV9DT05URVhUCQkJCQkgIFwKIAkgICAgICJtb3ZxICUlcnNwLCVQW3RocmVhZHJzcF0oJVtwcmV2XSlcblx0IiAvKiBzYXZlIFJTUCAqLwkgIFwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKaW5kZXggMmQ2MGE3OC4uZmM4MDhiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKQEAgLTMzLDggKzMzLDggQEAKICAqIEVhY2ggb2YgdGhlIGRlc2NyaXB0b3JzIGlzIDY0IGJ5dGVzIGluIHNpemUgKDgqNjQgPSA1MTIgYnl0ZXMgaW4gYSBzZXQpLgogICovCiAKLSNkZWZpbmUgTUFYX0NQVVNfUEVSX1VWSFVCCQk2NAotI2RlZmluZSBNQVhfQ1BVU19QRVJfU09DS0VUCQkzMgorI2RlZmluZSBNQVhfQ1BVU19QRVJfVVZIVUIJCTEyOAorI2RlZmluZSBNQVhfQ1BVU19QRVJfU09DS0VUCQk2NAogI2RlZmluZSBBRFBfU1oJCQkJNjQgLyogaGFyZHdhcmUtcHJvdmlkZWQgbWF4LiAqLwogI2RlZmluZSBVVl9DUFVTX1BFUl9BUwkJCTMyIC8qIGhhcmR3YXJlLXByb3ZpZGVkIG1heC4gKi8KICNkZWZpbmUgSVRFTVNfUEVSX0RFU0MJCQk4CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z3RvZC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmd0b2QuaAppbmRleCAzYzMzNjZjLi5lN2U5NjgyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z3RvZC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZndG9kLmgKQEAgLTcwLDQgKzcwLDIzIEBACiAJKytzLT5zZXE7CiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisKKyNkZWZpbmUgVkdFVENQVV9DUFVfTUFTSyAweGZmZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2dldGNwdSh2b2lkKQoreworCXVuc2lnbmVkIGludCBwOworCisJLyoKKwkgKiBMb2FkIHBlciBDUFUgZGF0YSBmcm9tIEdEVC4gIExTTCBpcyBmYXN0ZXIgdGhhbiBSRFRTQ1AgYW5kCisJICogd29ya3Mgb24gYWxsIENQVXMuCisJICovCisJYXNtKCJsc2wgJTEsJTAiIDogIj1yIiAocCkgOiAiciIgKF9fUEVSX0NQVV9TRUcpKTsKKworCXJldHVybiBwOworfQorCisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworCiAjZW5kaWYgLyogX0FTTV9YODZfVkdUT0RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdnN5c2NhbGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZzeXNjYWxsLmgKaW5kZXggMmE0NmNhNy4uNmJhNjZlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdnN5c2NhbGwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92c3lzY2FsbC5oCkBAIC00LDE1ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CiAjaW5jbHVkZSA8dWFwaS9hc20vdnN5c2NhbGwuaD4KIAotI2RlZmluZSBWR0VUQ1BVX1JEVFNDUAkxCi0jZGVmaW5lIFZHRVRDUFVfTFNMCTIKLQotLyoga2VybmVsIHNwYWNlICh3cml0ZWFibGUpICovCi1leHRlcm4gaW50IHZnZXRjcHVfbW9kZTsKLWV4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OwotCi0jaW5jbHVkZSA8YXNtL3Z2YXIuaD4KLQorI2lmZGVmIENPTkZJR19YODZfVlNZU0NBTExfRU1VTEFUSU9OCiBleHRlcm4gdm9pZCBtYXBfdnN5c2NhbGwodm9pZCk7CiAKIC8qCkBAIC0yMCwyNSArMTIsMTIgQEAKICAqIFJldHVybnMgdHJ1ZSBpZiBoYW5kbGVkLgogICovCiBleHRlcm4gYm9vbCBlbXVsYXRlX3ZzeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCi0jZGVmaW5lIFZHRVRDUFVfQ1BVX01BU0sgMHhmZmYKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19nZXRjcHUodm9pZCkKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwX3ZzeXNjYWxsKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIGJvb2wgZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXVuc2lnbmVkIGludCBwOwotCi0JaWYgKFZWQVIodmdldGNwdV9tb2RlKSA9PSBWR0VUQ1BVX1JEVFNDUCkgewotCQkvKiBMb2FkIHBlciBDUFUgZGF0YSBmcm9tIFJEVFNDUCAqLwotCQluYXRpdmVfcmVhZF90c2NwKCZwKTsKLQl9IGVsc2UgewotCQkvKiBMb2FkIHBlciBDUFUgZGF0YSBmcm9tIEdEVCAqLwotCQlhc20oImxzbCAlMSwlMCIgOiAiPXIiIChwKSA6ICJyIiAoX19QRVJfQ1BVX1NFRykpOwotCX0KLQotCXJldHVybiBwOworCXJldHVybiBmYWxzZTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X1ZTWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Z2YXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Z2YXIuaAppbmRleCA1ZDJiOWFkLi4zZjMyZGZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92dmFyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdnZhci5oCkBAIC00NCw4ICs0NCw2IEBACiAKIC8qIERFQ0xBUkVfVlZBUihvZmZzZXQsIHR5cGUsIG5hbWUpICovCiAKLURFQ0xBUkVfVlZBUigwLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nLCBqaWZmaWVzKQotREVDTEFSRV9WVkFSKDE2LCBpbnQsIHZnZXRjcHVfbW9kZSkKIERFQ0xBUkVfVlZBUigxMjgsIHN0cnVjdCB2c3lzY2FsbF9ndG9kX2RhdGEsIHZzeXNjYWxsX2d0b2RfZGF0YSkKIAogI3VuZGVmIERFQ0xBUkVfVlZBUgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKaW5kZXggZTQ1ZTRkYS4uZjU4YTljNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCkBAIC0xNzIsNyArMTcyLDYgQEAKIAogc3RydWN0IHBjaV9kZXY7CiBzdHJ1Y3QgbXNpX21zZzsKLXN0cnVjdCBtc2lfZGVzYzsKIAogc3RydWN0IHg4Nl9tc2lfb3BzIHsKIAlpbnQgKCpzZXR1cF9tc2lfaXJxcykoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG52ZWMsIGludCB0eXBlKTsKQEAgLTE4Myw4ICsxODIsNiBAQAogCXZvaWQgKCp0ZWFyZG93bl9tc2lfaXJxcykoc3RydWN0IHBjaV9kZXYgKmRldik7CiAJdm9pZCAoKnJlc3RvcmVfbXNpX2lycXMpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCWludCAgKCpzZXR1cF9ocGV0X21zaSkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGlkKTsKLQl1MzIgKCptc2lfbWFza19pcnEpKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIG1hc2ssIHUzMiBmbGFnKTsKLQl1MzIgKCptc2l4X21hc2tfaXJxKShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBmbGFnKTsKIH07CiAKIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vbXNyLWluZGV4LmgKaW5kZXggNjI4MzhlNS4uYzhhYTY1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9tc3ItaW5kZXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL21zci1pbmRleC5oCkBAIC0yNDUsNiArMjQ1LDcgQEAKICNkZWZpbmUgTVNSX0FNRDY0X0lCU09QX1JFR19NQVNLCSgoMVVMPDxNU1JfQU1ENjRfSUJTT1BfUkVHX0NPVU5UKS0xKQogI2RlZmluZSBNU1JfQU1ENjRfSUJTQ1RMCQkweGMwMDExMDNhCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNCUlRBUkdFVAkJMHhjMDAxMTAzYgorI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BEQVRBNAkJMHhjMDAxMTAzZAogI2RlZmluZSBNU1JfQU1ENjRfSUJTX1JFR19DT1VOVF9NQVgJOCAvKiBpbmNsdWRlcyBNU1JfQU1ENjRfSUJTQlJUQVJHRVQgKi8KIAogLyogRmFtIDE2aCBNU1JzICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggOGYxZTc3NC4uNWQ0NTAyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMjgsOCArMjgsNyBAQAogb2JqLSQoQ09ORklHX1g4Nl82NCkJKz0gc3lzX3g4Nl82NC5vIHg4NjY0X2tzeW1zXzY0Lm8KIG9iai0kKENPTkZJR19YODZfNjQpCSs9IG1jb3VudF82NC5vCiBvYmoteQkJCSs9IHN5c2NhbGxfJChCSVRTKS5vIHZzeXNjYWxsX2d0b2Qubwotb2JqLSQoQ09ORklHX1g4Nl82NCkJKz0gdnN5c2NhbGxfNjQubwotb2JqLSQoQ09ORklHX1g4Nl82NCkJKz0gdnN5c2NhbGxfZW11XzY0Lm8KK29iai0kKENPTkZJR19YODZfVlNZU0NBTExfRU1VTEFUSU9OKQkrPSB2c3lzY2FsbF82NC5vIHZzeXNjYWxsX2VtdV82NC5vCiBvYmotJChDT05GSUdfWDg2X0VTUEZJWDY0KQkrPSBlc3BmaXhfNjQubwogb2JqLSQoQ09ORklHX1NZU0ZTKQkrPSBrc3lzZnMubwogb2JqLXkJCQkrPSBib290ZmxhZy5vIGU4MjAubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9uYi5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9uYi5jCmluZGV4IGYwNGRiYjMuLjVjYWVkMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfbmIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMKQEAgLTIxLDYgKzIxLDcgQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GMykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMTBIX0YzKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTYwSF9OQl9GMykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE2SF9OQl9GMykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE2SF9NMzBIX05CX0YzKSB9LAogCXt9CkBAIC0zMCw2ICszMSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kX25iX2xpbmtfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjQpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GNCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NNjBIX05CX0Y0KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTZIX05CX0Y0KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfMTZIX00zMEhfTkJfRjQpIH0sCiAJe30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbnVtYWNoaXAuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbnVtYWNoaXAuYwppbmRleCA0MTI4YjVmLi5jMmZkMjFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX251bWFjaGlwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19udW1hY2hpcC5jCkBAIC00MCw3ICs0MCw3IEBACiAJdW5zaWduZWQgaW50IGlkOwogCiAJcmRtc3JsKE1TUl9GQU0xMEhfTk9ERV9JRCwgdmFsdWUpOwotCWlkID0gKCh4ID4+IDI0KSAmIDB4ZmZVKSB8ICgodmFsdWUgPDwgMikgJiAweDNmMDBVKTsKKwlpZCA9ICgoeCA+PiAyNCkgJiAweGZmVSkgfCAoKHZhbHVlIDw8IDIpICYgMHhmZjAwVSk7CiAKIAlyZXR1cm4gaWQ7CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAogc3RhdGljIHZvaWQgbnVtYWNoaXBfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQogewotCV9fZGVmYXVsdF9zZW5kX0lQSV9zaG9ydGN1dChBUElDX0RFU1RfU0VMRiwgdmVjdG9yLCBBUElDX0RFU1RfUEhZU0lDQUwpOworCWFwaWNfd3JpdGUoQVBJQ19TRUxGX0lQSSwgdmVjdG9yKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgbnVtYWNoaXBfcHJvYmUodm9pZCkKQEAgLTE1MywyMCArMTUzLDggQEAKIAlyZXR1cm4gYXBpYyA9PSAmYXBpY19udW1hY2hpcDsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG1hcF9jc3JzKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTnVtYUNoaXA6IE1hcHBpbmcgbG9jYWwgQ1NSIHNwYWNlICglMDE2bGx4IC0gJTAxNmxseClcbiIsCi0JCU5VTUFDSElQX0xDU1JfQkFTRSwgTlVNQUNISVBfTENTUl9CQVNFICsgTlVNQUNISVBfTENTUl9TSVpFIC0gMSk7Ci0JaW5pdF9leHRyYV9tYXBwaW5nX3VjKE5VTUFDSElQX0xDU1JfQkFTRSwgTlVNQUNISVBfTENTUl9TSVpFKTsKLQotCXByaW50ayhLRVJOX0lORk8gIk51bWFDaGlwOiBNYXBwaW5nIGdsb2JhbCBDU1Igc3BhY2UgKCUwMTZsbHggLSAlMDE2bGx4KVxuIiwKLQkJTlVNQUNISVBfR0NTUl9CQVNFLCBOVU1BQ0hJUF9HQ1NSX0JBU0UgKyBOVU1BQ0hJUF9HQ1NSX1NJWkUgLSAxKTsKLQlpbml0X2V4dHJhX21hcHBpbmdfdWMoTlVNQUNISVBfR0NTUl9CQVNFLCBOVU1BQ0hJUF9HQ1NSX1NJWkUpOwotfQotCiBzdGF0aWMgdm9pZCBmaXh1cF9jcHVfaWQoc3RydWN0IGNwdWluZm9feDg2ICpjLCBpbnQgbm9kZSkKIHsKLQogCWlmIChjLT5waHlzX3Byb2NfaWQgIT0gbm9kZSkgewogCQljLT5waHlzX3Byb2NfaWQgPSBub2RlOwogCQlwZXJfY3B1KGNwdV9sbGNfaWQsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBub2RlOwpAQCAtMTc1LDE5ICsxNjMsMTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgbnVtYWNoaXBfc3lzdGVtX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgdmFsOwotCiAJaWYgKCFudW1hY2hpcF9zeXN0ZW0pCiAJCXJldHVybiAwOwogCisJaW5pdF9leHRyYV9tYXBwaW5nX3VjKE5VTUFDSElQX0xDU1JfQkFTRSwgTlVNQUNISVBfTENTUl9TSVpFKTsKKwlpbml0X2V4dHJhX21hcHBpbmdfdWMoTlVNQUNISVBfR0NTUl9CQVNFLCBOVU1BQ0hJUF9HQ1NSX1NJWkUpOworCiAJeDg2X2NwdWluaXQuZml4dXBfY3B1X2lkID0gZml4dXBfY3B1X2lkOwogCXg4Nl9pbml0LnBjaS5hcmNoX2luaXQgPSBwY2lfbnVtYWNoaXBfaW5pdDsKIAotCW1hcF9jc3JzKCk7Ci0KLQl2YWwgPSByZWFkX2xjc3IoQ1NSX0cwX05PREVfSURTKTsKLQlwcmludGsoS0VSTl9JTkZPICJOdW1hQ2hpcDogTG9jYWwgTm9kZUlEID0gJTA4eFxuIiwgdmFsKTsKLQogCXJldHVybiAwOwogfQogZWFybHlfaW5pdGNhbGwobnVtYWNoaXBfc3lzdGVtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYwppbmRleCA2YTFlNzFiLi42ODczYWI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2J1Zi5oPgogCiAjaWZkZWYgQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IKIHU2NCBod19ubWlfZ2V0X3NhbXBsZV9wZXJpb2QoaW50IHdhdGNoZG9nX3RocmVzaCkKQEAgLTI5LDE0ICszMCwzNSBAQAogI2lmZGVmIGFyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZQogLyogRm9yIHJlbGlhYmlsaXR5LCB3ZSdyZSBwcmVwYXJlZCB0byB3YXN0ZSBiaXRzIGhlcmUuICovCiBzdGF0aWMgREVDTEFSRV9CSVRNQVAoYmFja3RyYWNlX21hc2ssIE5SX0NQVVMpIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgY3B1bWFza190IHByaW50dHJhY2VfbWFzazsKKworI2RlZmluZSBOTUlfQlVGX1NJWkUJCTQwOTYKKworc3RydWN0IG5taV9zZXFfYnVmIHsKKwl1bnNpZ25lZCBjaGFyCQlidWZmZXJbTk1JX0JVRl9TSVpFXTsKKwlzdHJ1Y3Qgc2VxX2J1ZgkJc2VxOworfTsKKworLyogU2FmZSBwcmludGluZyBpbiBOTUkgY29udGV4dCAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBubWlfc2VxX2J1Ziwgbm1pX3ByaW50X3NlcSk7CiAKIC8qICJpbiBwcm9ncmVzcyIgZmxhZyBvZiBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJhY2t0cmFjZV9mbGFnOwogCitzdGF0aWMgdm9pZCBwcmludF9zZXFfbGluZShzdHJ1Y3Qgbm1pX3NlcV9idWYgKnMsIGludCBzdGFydCwgaW50IGVuZCkKK3sKKwljb25zdCBjaGFyICpidWYgPSBzLT5idWZmZXIgKyBzdGFydDsKKworCXByaW50aygiJS4qcyIsIChlbmQgLSBzdGFydCkgKyAxLCBidWYpOworfQorCiB2b2lkIGFyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZShib29sIGluY2x1ZGVfc2VsZikKIHsKKwlzdHJ1Y3Qgbm1pX3NlcV9idWYgKnM7CisJaW50IGxlbjsKKwlpbnQgY3B1OwogCWludCBpOwotCWludCBjcHUgPSBnZXRfY3B1KCk7CisJaW50IHRoaXNfY3B1ID0gZ2V0X2NwdSgpOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmJhY2t0cmFjZV9mbGFnKSkgewogCQkvKgpAQCAtNDksNyArNzEsMTcgQEAKIAogCWNwdW1hc2tfY29weSh0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSwgY3B1X29ubGluZV9tYXNrKTsKIAlpZiAoIWluY2x1ZGVfc2VsZikKLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCB0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KHRoaXNfY3B1LCB0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSk7CisKKwljcHVtYXNrX2NvcHkoJnByaW50dHJhY2VfbWFzaywgdG9fY3B1bWFzayhiYWNrdHJhY2VfbWFzaykpOworCS8qCisJICogU2V0IHVwIHBlcl9jcHUgc2VxX2J1ZiBidWZmZXJzIHRoYXQgdGhlIE5NSXMgcnVubmluZyBvbiB0aGUgb3RoZXIKKwkgKiBDUFVzIHdpbGwgd3JpdGUgdG8uCisJICovCisJZm9yX2VhY2hfY3B1KGNwdSwgdG9fY3B1bWFzayhiYWNrdHJhY2VfbWFzaykpIHsKKwkJcyA9ICZwZXJfY3B1KG5taV9wcmludF9zZXEsIGNwdSk7CisJCXNlcV9idWZfaW5pdCgmcy0+c2VxLCBzLT5idWZmZXIsIE5NSV9CVUZfU0laRSk7CisJfQogCiAJaWYgKCFjcHVtYXNrX2VtcHR5KHRvX2NwdW1hc2soYmFja3RyYWNlX21hc2spKSkgewogCQlwcl9pbmZvKCJzZW5kaW5nIE5NSSB0byAlcyBDUFVzOlxuIiwKQEAgLTY1LDExICs5Nyw1OCBAQAogCQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CiAJfQogCisJLyoKKwkgKiBOb3cgdGhhdCBhbGwgdGhlIE5NSXMgaGF2ZSB0cmlnZ2VyZWQsIHdlIGNhbiBkdW1wIG91dCB0aGVpcgorCSAqIGJhY2sgdHJhY2VzIHNhZmVseSB0byB0aGUgY29uc29sZS4KKwkgKi8KKwlmb3JfZWFjaF9jcHUoY3B1LCAmcHJpbnR0cmFjZV9tYXNrKSB7CisJCWludCBsYXN0X2kgPSAwOworCisJCXMgPSAmcGVyX2NwdShubWlfcHJpbnRfc2VxLCBjcHUpOworCQlsZW4gPSBzZXFfYnVmX3VzZWQoJnMtPnNlcSk7CisJCWlmICghbGVuKQorCQkJY29udGludWU7CisKKwkJLyogUHJpbnQgbGluZSBieSBsaW5lLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCWlmIChzLT5idWZmZXJbaV0gPT0gJ1xuJykgeworCQkJCXByaW50X3NlcV9saW5lKHMsIGxhc3RfaSwgaSk7CisJCQkJbGFzdF9pID0gaSArIDE7CisJCQl9CisJCX0KKwkJLyogQ2hlY2sgaWYgdGhlcmUgd2FzIGEgcGFydGlhbCBsaW5lLiAqLworCQlpZiAobGFzdF9pIDwgbGVuKSB7CisJCQlwcmludF9zZXFfbGluZShzLCBsYXN0X2ksIGxlbiAtIDEpOworCQkJcHJfY29udCgiXG4iKTsKKwkJfQorCX0KKwogCWNsZWFyX2JpdCgwLCAmYmFja3RyYWNlX2ZsYWcpOwogCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJcHV0X2NwdSgpOwogfQogCisvKgorICogSXQgaXMgbm90IHNhZmUgdG8gY2FsbCBwcmludGsoKSBkaXJlY3RseSBmcm9tIE5NSSBoYW5kbGVycy4KKyAqIEl0IG1heSBiZSBmaW5lIGlmIHRoZSBOTUkgZGV0ZWN0ZWQgYSBsb2NrIHVwIGFuZCB3ZSBoYXZlIG5vIGNob2ljZQorICogYnV0IHRvIGRvIHNvLCBidXQgZG9pbmcgYSBOTUkgb24gYWxsIG90aGVyIENQVXMgdG8gZ2V0IGEgYmFjayB0cmFjZQorICogY2FuIGJlIGRvbmUgd2l0aCBhIHN5c3JxLWwuIFdlIGRvbid0IHdhbnQgdGhhdCB0byBsb2NrIHVwLCB3aGljaAorICogY2FuIGhhcHBlbiBpZiB0aGUgTk1JIGludGVycnVwdHMgYSBwcmludGsgaW4gcHJvZ3Jlc3MuCisgKgorICogSW5zdGVhZCwgd2UgcmVkaXJlY3QgdGhlIHZwcmludGsoKSB0byB0aGlzIG5taV92cHJpbnRrKCkgdGhhdCB3cml0ZXMKKyAqIHRoZSBjb250ZW50IGludG8gYSBwZXIgY3B1IHNlcV9idWYgYnVmZmVyLiBUaGVuIHdoZW4gdGhlIE5NSXMgYXJlCisgKiBhbGwgZG9uZSwgd2UgY2FuIHNhZmVseSBkdW1wIHRoZSBjb250ZW50cyBvZiB0aGUgc2VxX2J1ZiB0byBhIHByaW50aygpCisgKiBmcm9tIGEgbm9uIE5NSSBjb250ZXh0LgorICovCitzdGF0aWMgaW50IG5taV92cHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworCXN0cnVjdCBubWlfc2VxX2J1ZiAqcyA9IHRoaXNfY3B1X3B0cigmbm1pX3ByaW50X3NlcSk7CisJdW5zaWduZWQgaW50IGxlbiA9IHNlcV9idWZfdXNlZCgmcy0+c2VxKTsKKworCXNlcV9idWZfdnByaW50Zigmcy0+c2VxLCBmbXQsIGFyZ3MpOworCXJldHVybiBzZXFfYnVmX3VzZWQoJnMtPnNlcSkgLSBsZW47Cit9CisKIHN0YXRpYyBpbnQKIGFyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZV9oYW5kbGVyKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtNzgsMTIgKzE1NywxNCBAQAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdG9fY3B1bWFzayhiYWNrdHJhY2VfbWFzaykpKSB7Ci0JCXN0YXRpYyBhcmNoX3NwaW5sb2NrX3QgbG9jayA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CisJCXByaW50a19mdW5jX3QgcHJpbnRrX2Z1bmNfc2F2ZSA9IHRoaXNfY3B1X3JlYWQocHJpbnRrX2Z1bmMpOwogCi0JCWFyY2hfc3Bpbl9sb2NrKCZsb2NrKTsKKwkJLyogUmVwbGFjZSBwcmludGsgdG8gd3JpdGUgaW50byB0aGUgTk1JIHNlcSAqLworCQl0aGlzX2NwdV93cml0ZShwcmludGtfZnVuYywgbm1pX3ZwcmludGspOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJOTUkgYmFja3RyYWNlIGZvciBjcHUgJWRcbiIsIGNwdSk7CiAJCXNob3dfcmVncyhyZWdzKTsKLQkJYXJjaF9zcGluX3VubG9jaygmbG9jayk7CisJCXRoaXNfY3B1X3dyaXRlKHByaW50a19mdW5jLCBwcmludGtfZnVuY19zYXZlKTsKKwogCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRvX2NwdW1hc2soYmFja3RyYWNlX21hc2spKTsKIAkJcmV0dXJuIE5NSV9IQU5ETEVEOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCAxMTgzZDU0Li5hNjc0NWU3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC0zMTU4LDcgKzMxNTgsNyBAQAogCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7CiAJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKIAotCV9fd3JpdGVfbXNpX21zZyhkYXRhLT5tc2lfZGVzYywgJm1zZyk7CisJX19wY2lfd3JpdGVfbXNpX21zZyhkYXRhLT5tc2lfZGVzYywgJm1zZyk7CiAKIAlyZXR1cm4gSVJRX1NFVF9NQVNLX09LX05PQ09QWTsKIH0KQEAgLTMxNjksOCArMzE2OSw4IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpX2NoaXAgPSB7CiAJLm5hbWUJCQk9ICJQQ0ktTVNJIiwKLQkuaXJxX3VubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKLQkuaXJxX21hc2sJCT0gbWFza19tc2lfaXJxLAorCS5pcnFfdW5tYXNrCQk9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX21hc2sJCT0gcGNpX21zaV9tYXNrX2lycSwKIAkuaXJxX2FjawkJPSBhY2tfYXBpY19lZGdlLAogCS5pcnFfc2V0X2FmZmluaXR5CT0gbXNpX3NldF9hZmZpbml0eSwKIAkuaXJxX3JldHJpZ2dlcgkJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKQEAgLTMxOTYsNyArMzE5Niw3IEBACiAJICogTVNJIG1lc3NhZ2UgZGVub3RlcyBhIGNvbnRpZ3VvdXMgZ3JvdXAgb2YgSVJRcywgd3JpdHRlbiBmb3IgMHRoIElSUS4KIAkgKi8KIAlpZiAoIWlycV9vZmZzZXQpCi0JCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwkJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAogCXNldHVwX3JlbWFwcGVkX2lycShpcnEsIGlycV9jZmcoaXJxKSwgY2hpcCk7CiAKQEAgLTM5NjgsNyArMzk2OCw3IEBACiB7CiAJaWYgKGRldi0+cG93ZXIuaXNfcHJlcGFyZWQpCiAJCXJldHVybiB0cnVlOwotI2lmZGVmCUNPTkZJR19QTV9SVU5USU1FCisjaWZkZWYJQ09ORklHX1BNCiAJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRJTkcpCiAJCXJldHVybiB0cnVlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKaW5kZXggNTg0ODc0NC4uOTI3ZWM5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwpAQCAtMzc4LDcgKzM3OCw2IEBACiAJCXsgLyogZW50cnkgMSBpcyBmb3IgQVBNIGlkbGUgKi8KIAkJCS5uYW1lID0gIkFQTSIsCiAJCQkuZGVzYyA9ICJBUE0gaWRsZSIsCi0JCQkuZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKIAkJCS5leGl0X2xhdGVuY3kgPSAyNTAsCS8qIFdBRyAqLwogCQkJLnRhcmdldF9yZXNpZGVuY3kgPSA1MDAsCS8qIFdBRyAqLwogCQkJLmVudGVyID0gJmFwbV9jcHVfaWRsZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYwppbmRleCBlN2M3OThiLi40ZjkzNTlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYwpAQCAtNDgsNyArNDgsNiBAQAogCiAjZGVmaW5lIEVOVFJZKGVudHJ5KSBPRkZTRVQocHRfcmVnc18gIyMgZW50cnksIHB0X3JlZ3MsIGVudHJ5KQogCUVOVFJZKGJ4KTsKLQlFTlRSWShieCk7CiAJRU5UUlkoY3gpOwogCUVOVFJZKGR4KTsKIAlFTlRSWShzcCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCA4MTNkMjlkLi4xNWM1ZGY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTU2Niw2ICs1NjYsMTcgQEAKIAogCWlmICghYy0+eDg2X21vZGVsX2lkWzBdKQogCQlzdHJjcHkoYy0+eDg2X21vZGVsX2lkLCAiSGFtbWVyIik7CisKKyNpZmRlZiBDT05GSUdfU01QCisJLyoKKwkgKiBEaXNhYmxlIFRMQiBmbHVzaCBmaWx0ZXIgYnkgc2V0dGluZyBIV0NSLkZGRElTIG9uIEs4CisJICogYml0IDYgb2YgbXNyIEMwMDFfMDAxNQorCSAqCisJICogRXJyYXRhIDYzIGZvciBTSC1CMyBzdGVwcGluZ3MKKwkgKiBFcnJhdGEgMTIyIGZvciBhbGwgc3RlcHBpbmdzIChGKyBoYXZlIGl0IGRpc2FibGVkIGJ5IGRlZmF1bHQpCisJICovCisJbXNyX3NldF9iaXQoTVNSX0s3X0hXQ1IsIDYpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfYW1kX2doKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKQEAgLTYzNiwxOCArNjQ3LDYgQEAKIHsKIAl1MzIgZHVtbXk7CiAKLSNpZmRlZiBDT05GSUdfU01QCi0JLyoKLQkgKiBEaXNhYmxlIFRMQiBmbHVzaCBmaWx0ZXIgYnkgc2V0dGluZyBIV0NSLkZGRElTIG9uIEs4Ci0JICogYml0IDYgb2YgbXNyIEMwMDFfMDAxNQotCSAqCi0JICogRXJyYXRhIDYzIGZvciBTSC1CMyBzdGVwcGluZ3MKLQkgKiBFcnJhdGEgMTIyIGZvciBhbGwgc3RlcHBpbmdzIChGKyBoYXZlIGl0IGRpc2FibGVkIGJ5IGRlZmF1bHQpCi0JICovCi0JaWYgKGMtPng4NiA9PSAweGYpCi0JCW1zcl9zZXRfYml0KE1TUl9LN19IV0NSLCA2KTsKLSNlbmRpZgotCiAJZWFybHlfaW5pdF9hbWQoYyk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggY2ZhOWI1Yi4uYzYwNDk2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC05NTgsMTQgKzk1OCw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci1zdGF0aWMgdm9pZCB2Z2V0Y3B1X3NldF9tb2RlKHZvaWQpCi17Ci0JaWYgKGNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX1JEVFNDUCkpCi0JCXZnZXRjcHVfbW9kZSA9IFZHRVRDUFVfUkRUU0NQOwotCWVsc2UKLQkJdmdldGNwdV9tb2RlID0gVkdFVENQVV9MU0w7Ci19Ci0KICNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KIC8qIE1heSBub3QgYmUgX19pbml0OiBjYWxsZWQgZHVyaW5nIHJlc3VtZSAqLwogc3RhdGljIHZvaWQgc3lzY2FsbDMyX2NwdV9pbml0KHZvaWQpCkBAIC0xMDA4LDggKzEwMDAsNiBAQAogI2lmZGVmIENPTkZJR19YODZfMzIKIAlzeXNlbnRlcl9zZXR1cCgpOwogCWVuYWJsZV9zZXBfY3B1KCk7Ci0jZWxzZQotCXZnZXRjcHVfc2V0X21vZGUoKTsKICNlbmRpZgogCWNwdV9kZXRlY3RfdGxiKCZib290X2NwdV9kYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbnRlcm5hbC5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWludGVybmFsLmgKaW5kZXggMDllZGQwYi4uMTBiNDY5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWludGVybmFsLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWludGVybmFsLmgKQEAgLTMsNiArMyw4IEBACiAKIGVudW0gc2V2ZXJpdHlfbGV2ZWwgewogCU1DRV9OT19TRVZFUklUWSwKKwlNQ0VfREVGRVJSRURfU0VWRVJJVFksCisJTUNFX1VDTkFfU0VWRVJJVFkgPSBNQ0VfREVGRVJSRURfU0VWRVJJVFksCiAJTUNFX0tFRVBfU0VWRVJJVFksCiAJTUNFX1NPTUVfU0VWRVJJVFksCiAJTUNFX0FPX1NFVkVSSVRZLApAQCAtMjEsNyArMjMsNyBAQAogCWNoYXIJCQlhdHRybmFtZVtBVFRSX0xFTl07CS8qIGF0dHJpYnV0ZSBuYW1lICovCiB9OwogCi1pbnQgbWNlX3NldmVyaXR5KHN0cnVjdCBtY2UgKmEsIGludCB0b2xlcmFudCwgY2hhciAqKm1zZyk7CitpbnQgbWNlX3NldmVyaXR5KHN0cnVjdCBtY2UgKmEsIGludCB0b2xlcmFudCwgY2hhciAqKm1zZywgYm9vbCBpc19leGNwKTsKIHN0cnVjdCBkZW50cnkgKm1jZV9nZXRfZGVidWdmc19kaXIodm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3QgbWNlX2JhbmsgKm1jZV9iYW5rczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1zZXZlcml0eS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLXNldmVyaXR5LmMKaW5kZXggYzM3MGUxYy4uOGJiNDMzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLXNldmVyaXR5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLXNldmVyaXR5LmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogZW51bSBjb250ZXh0IHsgSU5fS0VSTkVMID0gMSwgSU5fVVNFUiA9IDIgfTsKIGVudW0gc2VyIHsgU0VSX1JFUVVJUkVEID0gMSwgTk9fU0VSID0gMiB9OworZW51bSBleGNlcHRpb24geyBFWENQX0NPTlRFWFQgPSAxLCBOT19FWENQID0gMiB9OwogCiBzdGF0aWMgc3RydWN0IHNldmVyaXR5IHsKIAl1NjQgbWFzazsKQEAgLTQwLDYgKzQxLDcgQEAKIAl1bnNpZ25lZCBjaGFyIG1jZ3JlczsKIAl1bnNpZ25lZCBjaGFyIHNlcjsKIAl1bnNpZ25lZCBjaGFyIGNvbnRleHQ7CisJdW5zaWduZWQgY2hhciBleGNwOwogCXVuc2lnbmVkIGNoYXIgY292ZXJlZDsKIAljaGFyICptc2c7CiB9IHNldmVyaXRpZXNbXSA9IHsKQEAgLTQ4LDYgKzUwLDggQEAKICNkZWZpbmUgIFVTRVIJCS5jb250ZXh0ID0gSU5fVVNFUgogI2RlZmluZSAgU0VSCQkuc2VyID0gU0VSX1JFUVVJUkVECiAjZGVmaW5lICBOT1NFUgkJLnNlciA9IE5PX1NFUgorI2RlZmluZSAgRVhDUAkJLmV4Y3AgPSBFWENQX0NPTlRFWFQKKyNkZWZpbmUgIE5PRVhDUAkJLmV4Y3AgPSBOT19FWENQCiAjZGVmaW5lICBCSVRDTFIoeCkJLm1hc2sgPSB4LCAucmVzdWx0ID0gMAogI2RlZmluZSAgQklUU0VUKHgpCS5tYXNrID0geCwgLnJlc3VsdCA9IHgKICNkZWZpbmUgIE1DR01BU0soeCwgeSkJLm1jZ21hc2sgPSB4LCAubWNncmVzID0geQpAQCAtNjIsNyArNjYsNyBAQAogCQkpLAogCU1DRVNFVigKIAkJTk8sICJOb3QgZW5hYmxlZCIsCi0JCUJJVENMUihNQ0lfU1RBVFVTX0VOKQorCQlFWENQLCBCSVRDTFIoTUNJX1NUQVRVU19FTikKIAkJKSwKIAlNQ0VTRVYoCiAJCVBBTklDLCAiUHJvY2Vzc29yIGNvbnRleHQgY29ycnVwdCIsCkBAIC03MSwxNiArNzUsMjAgQEAKIAkvKiBXaGVuIE1DSVAgaXMgbm90IHNldCBzb21ldGhpbmcgaXMgdmVyeSBjb25mdXNlZCAqLwogCU1DRVNFVigKIAkJUEFOSUMsICJNQ0lQIG5vdCBzZXQgaW4gTUNBIGhhbmRsZXIiLAotCQlNQ0dNQVNLKE1DR19TVEFUVVNfTUNJUCwgMCkKKwkJRVhDUCwgTUNHTUFTSyhNQ0dfU1RBVFVTX01DSVAsIDApCiAJCSksCiAJLyogTmVpdGhlciByZXR1cm4gbm90IGVycm9yIElQIC0tIG5vIGNoYW5jZSB0byByZWNvdmVyIC0+IFBBTklDICovCiAJTUNFU0VWKAogCQlQQU5JQywgIk5laXRoZXIgcmVzdGFydCBub3IgZXJyb3IgSVAiLAotCQlNQ0dNQVNLKE1DR19TVEFUVVNfUklQVnxNQ0dfU1RBVFVTX0VJUFYsIDApCisJCUVYQ1AsIE1DR01BU0soTUNHX1NUQVRVU19SSVBWfE1DR19TVEFUVVNfRUlQViwgMCkKIAkJKSwKIAlNQ0VTRVYoCiAJCVBBTklDLCAiSW4ga2VybmVsIGFuZCBubyByZXN0YXJ0IElQIiwKLQkJS0VSTkVMLCBNQ0dNQVNLKE1DR19TVEFUVVNfUklQViwgMCkKKwkJRVhDUCwgS0VSTkVMLCBNQ0dNQVNLKE1DR19TVEFUVVNfUklQViwgMCkKKwkJKSwKKwlNQ0VTRVYoCisJCURFRkVSUkVELCAiRGVmZXJyZWQgZXJyb3IiLAorCQlOT1NFUiwgTUFTSyhNQ0lfU1RBVFVTX1VDfE1DSV9TVEFUVVNfREVGRVJSRUR8TUNJX1NUQVRVU19QT0lTT04sIE1DSV9TVEFUVVNfREVGRVJSRUQpCiAJCSksCiAJTUNFU0VWKAogCQlLRUVQLCAiQ29ycmVjdGVkIGVycm9yIiwKQEAgLTg5LDcgKzk3LDcgQEAKIAogCS8qIGlnbm9yZSBPVkVSIGZvciBVQ05BICovCiAJTUNFU0VWKAotCQlLRUVQLCAiVW5jb3JyZWN0ZWQgbm8gYWN0aW9uIHJlcXVpcmVkIiwKKwkJVUNOQSwgIlVuY29ycmVjdGVkIG5vIGFjdGlvbiByZXF1aXJlZCIsCiAJCVNFUiwgTUFTSyhNQ0lfVUNfU0FSLCBNQ0lfU1RBVFVTX1VDKQogCQkpLAogCU1DRVNFVigKQEAgLTE3OCw4ICsxODYsOSBAQAogCXJldHVybiAoKG0tPmNzICYgMykgPT0gMykgPyBJTl9VU0VSIDogSU5fS0VSTkVMOwogfQogCi1pbnQgbWNlX3NldmVyaXR5KHN0cnVjdCBtY2UgKm0sIGludCB0b2xlcmFudCwgY2hhciAqKm1zZykKK2ludCBtY2Vfc2V2ZXJpdHkoc3RydWN0IG1jZSAqbSwgaW50IHRvbGVyYW50LCBjaGFyICoqbXNnLCBib29sIGlzX2V4Y3ApCiB7CisJZW51bSBleGNlcHRpb24gZXhjcCA9IChpc19leGNwID8gRVhDUF9DT05URVhUIDogTk9fRVhDUCk7CiAJZW51bSBjb250ZXh0IGN0eCA9IGVycm9yX2NvbnRleHQobSk7CiAJc3RydWN0IHNldmVyaXR5ICpzOwogCkBAIC0xOTQsNiArMjAzLDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAocy0+Y29udGV4dCAmJiBjdHggIT0gcy0+Y29udGV4dCkKIAkJCWNvbnRpbnVlOworCQlpZiAocy0+ZXhjcCAmJiBleGNwICE9IHMtPmV4Y3ApCisJCQljb250aW51ZTsKIAkJaWYgKG1zZykKIAkJCSptc2cgPSBzLT5tc2c7CiAJCXMtPmNvdmVyZWQgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwppbmRleCA2MWE5NjY4Y2UuLmQyYzYxMTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC0yOTIsMTAgKzI5MiwxMCBAQAogCiAjZGVmaW5lIFBBTklDX1RJTUVPVVQgNSAvKiA1IHNlY29uZHMgKi8KIAotc3RhdGljIGF0b21pY190IG1jZV9wYW5pY2VkOworc3RhdGljIGF0b21pY190IG1jZV9wYW5pY2tlZDsKIAogc3RhdGljIGludCBmYWtlX3BhbmljOwotc3RhdGljIGF0b21pY190IG1jZV9mYWtlX3BhbmljZWQ7CitzdGF0aWMgYXRvbWljX3QgbWNlX2Zha2VfcGFuaWNrZWQ7CiAKIC8qIFBhbmljIGluIHByb2dyZXNzLiBFbmFibGUgaW50ZXJydXB0cyBhbmQgd2FpdCBmb3IgZmluYWwgSVBJICovCiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYW5pYyh2b2lkKQpAQCAtMzE5LDcgKzMxOSw3IEBACiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSBvbmx5IG9uZSBDUFUgcnVucyBpbiBtYWNoaW5lIGNoZWNrIHBhbmljCiAJCSAqLwotCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJm1jZV9wYW5pY2VkKSA+IDEpCisJCWlmIChhdG9taWNfaW5jX3JldHVybigmbWNlX3Bhbmlja2VkKSA+IDEpCiAJCQl3YWl0X2Zvcl9wYW5pYygpOwogCQliYXJyaWVyKCk7CiAKQEAgLTMyNyw3ICszMjcsNyBAQAogCQljb25zb2xlX3ZlcmJvc2UoKTsKIAl9IGVsc2UgewogCQkvKiBEb24ndCBsb2cgdG9vIG11Y2ggZm9yIGZha2UgcGFuaWMgKi8KLQkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZtY2VfZmFrZV9wYW5pY2VkKSA+IDEpCisJCWlmIChhdG9taWNfaW5jX3JldHVybigmbWNlX2Zha2VfcGFuaWNrZWQpID4gMSkKIAkJCXJldHVybjsKIAl9CiAJLyogRmlyc3QgcHJpbnQgY29ycmVjdGVkIG9uZXMgdGhhdCBhcmUgc3RpbGwgdW5sb2dnZWQgKi8KQEAgLTU3NSw2ICs1NzUsMzcgQEAKIAl9CiB9CiAKK3N0YXRpYyBib29sIG1lbW9yeV9lcnJvcihzdHJ1Y3QgbWNlICptKQoreworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZib290X2NwdV9kYXRhOworCisJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpIHsKKwkJLyoKKwkJICogY29taW5nIHNvb24KKwkJICovCisJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgeworCQkvKgorCQkgKiBJbnRlbCBTRE0gVm9sdW1lIDNCIC0gMTUuOS4yIENvbXBvdW5kIEVycm9yIENvZGVzCisJCSAqCisJCSAqIEJpdCA3IG9mIHRoZSBNQ0FDT0QgZmllbGQgb2YgSUEzMl9NQ2lfU1RBVFVTIGlzIHVzZWQgZm9yCisJCSAqIGluZGljYXRpbmcgYSBtZW1vcnkgZXJyb3IuIEJpdCA4IGlzIHVzZWQgZm9yIGluZGljYXRpbmcgYQorCQkgKiBjYWNoZSBoaWVyYXJjaHkgZXJyb3IuIFRoZSBjb21iaW5hdGlvbiBvZiBiaXQgMiBhbmQgYml0IDMKKwkJICogaXMgdXNlZCBmb3IgaW5kaWNhdGluZyBhIGBnZW5lcmljJyBjYWNoZSBoaWVyYXJjaHkgZXJyb3IKKwkJICogQnV0IHdlIGNhbid0IGp1c3QgYmxpbmRseSBjaGVjayB0aGUgYWJvdmUgYml0cywgYmVjYXVzZSBpZgorCQkgKiBiaXQgMTEgaXMgc2V0LCB0aGVuIGl0IGlzIGEgYnVzL2ludGVyY29ubmVjdCBlcnJvciAtIGFuZAorCQkgKiBlaXRoZXIgd2F5IHRoZSBhYm92ZSBiaXRzIGp1c3QgZ2l2ZXMgbW9yZSBkZXRhaWwgb24gd2hhdAorCQkgKiBidXMvaW50ZXJjb25uZWN0IGVycm9yIGhhcHBlbmVkLiBOb3RlIHRoYXQgYml0IDEyIGNhbiBiZQorCQkgKiBpZ25vcmVkLCBhcyBpdCdzIHRoZSAiZmlsdGVyIiBiaXQuCisJCSAqLworCQlyZXR1cm4gKG0tPnN0YXR1cyAmIDB4ZWY4MCkgPT0gQklUKDcpIHx8CisJCSAgICAgICAobS0+c3RhdHVzICYgMHhlZjAwKSA9PSBCSVQoOCkgfHwKKwkJICAgICAgIChtLT5zdGF0dXMgJiAweGVmZmMpID09IDB4YzsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkLCBtY2VfcG9sbF9jb3VudCk7CiAKIC8qCkBAIC01OTUsNiArNjI2LDcgQEAKIHZvaWQgbWFjaGluZV9jaGVja19wb2xsKGVudW0gbWNwX2ZsYWdzIGZsYWdzLCBtY2VfYmFua3NfdCAqYikKIHsKIAlzdHJ1Y3QgbWNlIG07CisJaW50IHNldmVyaXR5OwogCWludCBpOwogCiAJdGhpc19jcHVfaW5jKG1jZV9wb2xsX2NvdW50KTsKQEAgLTYzMCw2ICs2NjIsMjAgQEAKIAogCQlpZiAoIShmbGFncyAmIE1DUF9USU1FU1RBTVApKQogCQkJbS50c2MgPSAwOworCisJCXNldmVyaXR5ID0gbWNlX3NldmVyaXR5KCZtLCBtY2FfY2ZnLnRvbGVyYW50LCBOVUxMLCBmYWxzZSk7CisKKwkJLyoKKwkJICogSW4gdGhlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGhhdmUgYSB2YWxpZCBhZGRyZXNzIGFmdGVyIGFsbCwKKwkJICogZG8gbm90IGFkZCBpdCBpbnRvIHRoZSByaW5nIGJ1ZmZlci4KKwkJICovCisJCWlmIChzZXZlcml0eSA9PSBNQ0VfREVGRVJSRURfU0VWRVJJVFkgJiYgbWVtb3J5X2Vycm9yKCZtKSkgeworCQkJaWYgKG0uc3RhdHVzICYgTUNJX1NUQVRVU19BRERSVikgeworCQkJCW1jZV9yaW5nX2FkZChtLmFkZHIgPj4gUEFHRV9TSElGVCk7CisJCQkJbWNlX3NjaGVkdWxlX3dvcmsoKTsKKwkJCX0KKwkJfQorCiAJCS8qCiAJCSAqIERvbid0IGdldCB0aGUgSVAgaGVyZSBiZWNhdXNlIGl0J3MgdW5saWtlbHkgdG8KIAkJICogaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIHRoZSBhY3R1YWwgZXJyb3IgbG9jYXRpb24uCkBAIC02NjgsNyArNzE0LDggQEAKIAkJCWlmIChxdWlya19ub193YXlfb3V0KQogCQkJCXF1aXJrX25vX3dheV9vdXQoaSwgbSwgcmVncyk7CiAJCX0KLQkJaWYgKG1jZV9zZXZlcml0eShtLCBtY2FfY2ZnLnRvbGVyYW50LCBtc2cpID49IE1DRV9QQU5JQ19TRVZFUklUWSkKKwkJaWYgKG1jZV9zZXZlcml0eShtLCBtY2FfY2ZnLnRvbGVyYW50LCBtc2csIHRydWUpID49CisJCSAgICBNQ0VfUEFOSUNfU0VWRVJJVFkpCiAJCQlyZXQgPSAxOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNjk3LDcgKzc0NCw3IEBACiAJICogbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZS4KIAkgKi8KIAlybWIoKTsKLQlpZiAoYXRvbWljX3JlYWQoJm1jZV9wYW5pY2VkKSkKKwlpZiAoYXRvbWljX3JlYWQoJm1jZV9wYW5pY2tlZCkpCiAJCXdhaXRfZm9yX3BhbmljKCk7CiAJaWYgKCFtY2FfY2ZnLm1vbmFyY2hfdGltZW91dCkKIAkJZ290byBvdXQ7CkBAIC03NTQsNyArODAxLDcgQEAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWludCBzZXZlcml0eSA9IG1jZV9zZXZlcml0eSgmcGVyX2NwdShtY2VzX3NlZW4sIGNwdSksCiAJCQkJCSAgICBtY2FfY2ZnLnRvbGVyYW50LAotCQkJCQkgICAgJm5tc2cpOworCQkJCQkgICAgJm5tc2csIHRydWUpOwogCQlpZiAoc2V2ZXJpdHkgPiBnbG9iYWxfd29yc3QpIHsKIAkJCW1zZyA9IG5tc2c7CiAJCQlnbG9iYWxfd29yc3QgPSBzZXZlcml0eTsKQEAgLTEwOTUsMTMgKzExNDIsMTQgQEAKIAkJICovCiAJCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLLCBMT0NLREVQX05PV19VTlJFTElBQkxFKTsKIAotCQlzZXZlcml0eSA9IG1jZV9zZXZlcml0eSgmbSwgY2ZnLT50b2xlcmFudCwgTlVMTCk7CisJCXNldmVyaXR5ID0gbWNlX3NldmVyaXR5KCZtLCBjZmctPnRvbGVyYW50LCBOVUxMLCB0cnVlKTsKIAogCQkvKgotCQkgKiBXaGVuIG1hY2hpbmUgY2hlY2sgd2FzIGZvciBjb3JyZWN0ZWQgaGFuZGxlciBkb24ndCB0b3VjaCwKLQkJICogdW5sZXNzIHdlJ3JlIHBhbmljaW5nLgorCQkgKiBXaGVuIG1hY2hpbmUgY2hlY2sgd2FzIGZvciBjb3JyZWN0ZWQvZGVmZXJyZWQgaGFuZGxlciBkb24ndAorCQkgKiB0b3VjaCwgdW5sZXNzIHdlJ3JlIHBhbmljaW5nLgogCQkgKi8KLQkJaWYgKHNldmVyaXR5ID09IE1DRV9LRUVQX1NFVkVSSVRZICYmICFub193YXlfb3V0KQorCQlpZiAoKHNldmVyaXR5ID09IE1DRV9LRUVQX1NFVkVSSVRZIHx8CisJCSAgICAgc2V2ZXJpdHkgPT0gTUNFX1VDTkFfU0VWRVJJVFkpICYmICFub193YXlfb3V0KQogCQkJY29udGludWU7CiAJCV9fc2V0X2JpdChpLCB0b2NsZWFyKTsKIAkJaWYgKHNldmVyaXR5ID09IE1DRV9OT19TRVZFUklUWSkgewpAQCAtMjUyMCw3ICsyNTY4LDcgQEAKIHN0YXRpYyB2b2lkIG1jZV9yZXNldCh2b2lkKQogewogCWNwdV9taXNzaW5nID0gMDsKLQlhdG9taWNfc2V0KCZtY2VfZmFrZV9wYW5pY2VkLCAwKTsKKwlhdG9taWNfc2V0KCZtY2VfZmFrZV9wYW5pY2tlZCwgMCk7CiAJYXRvbWljX3NldCgmbWNlX2V4ZWN1dGluZywgMCk7CiAJYXRvbWljX3NldCgmbWNlX2NhbGxpbiwgMCk7CiAJYXRvbWljX3NldCgmZ2xvYmFsX253bywgMCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKaW5kZXggNWQ0OTk5Zi4uZjFjMzc2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYwpAQCAtMjEyLDEyICsyMTIsMTIgQEAKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXUzMiBsb3cgPSAwLCBoaWdoID0gMCwgYWRkcmVzcyA9IDA7CiAJdW5zaWduZWQgaW50IGJhbmssIGJsb2NrOwotCWludCBvZmZzZXQgPSAtMTsKKwlpbnQgb2Zmc2V0ID0gLTEsIG5ldzsKIAogCWZvciAoYmFuayA9IDA7IGJhbmsgPCBtY2FfY2ZnLmJhbmtzOyArK2JhbmspIHsKIAkJZm9yIChibG9jayA9IDA7IGJsb2NrIDwgTlJfQkxPQ0tTOyArK2Jsb2NrKSB7CiAJCQlpZiAoYmxvY2sgPT0gMCkKLQkJCQlhZGRyZXNzID0gTVNSX0lBMzJfTUMwX01JU0MgKyBiYW5rICogNDsKKwkJCQlhZGRyZXNzID0gTVNSX0lBMzJfTUN4X01JU0MoYmFuayk7CiAJCQllbHNlIGlmIChibG9jayA9PSAxKSB7CiAJCQkJYWRkcmVzcyA9IChsb3cgJiBNQVNLX0JMS1BUUl9MTykgPj4gMjE7CiAJCQkJaWYgKCFhZGRyZXNzKQpAQCAtMjQ3LDEzICsyNDcsMTggQEAKIAkJCWIuYWRkcmVzcwkJPSBhZGRyZXNzOwogCQkJYi5pbnRlcnJ1cHRfY2FwYWJsZQk9IGx2dF9pbnRlcnJ1cHRfc3VwcG9ydGVkKGJhbmssIGhpZ2gpOwogCi0JCQlpZiAoYi5pbnRlcnJ1cHRfY2FwYWJsZSkgewotCQkJCWludCBuZXcgPSAoaGlnaCAmIE1BU0tfTFZUT0ZGX0hJKSA+PiAyMDsKLQkJCQlvZmZzZXQgID0gc2V0dXBfQVBJQ19tY2Uob2Zmc2V0LCBuZXcpOwotCQkJfQorCQkJaWYgKCFiLmludGVycnVwdF9jYXBhYmxlKQorCQkJCWdvdG8gaW5pdDsKIAorCQkJbmV3CT0gKGhpZ2ggJiBNQVNLX0xWVE9GRl9ISSkgPj4gMjA7CisJCQlvZmZzZXQgID0gc2V0dXBfQVBJQ19tY2Uob2Zmc2V0LCBuZXcpOworCisJCQlpZiAoKG9mZnNldCA9PSBuZXcpICYmCisJCQkgICAgKG1jZV90aHJlc2hvbGRfdmVjdG9yICE9IGFtZF90aHJlc2hvbGRfaW50ZXJydXB0KSkKKwkJCQltY2VfdGhyZXNob2xkX3ZlY3RvciA9IGFtZF90aHJlc2hvbGRfaW50ZXJydXB0OworCitpbml0OgogCQkJbWNlX3RocmVzaG9sZF9ibG9ja19pbml0KCZiLCBvZmZzZXQpOwotCQkJbWNlX3RocmVzaG9sZF92ZWN0b3IgPSBhbWRfdGhyZXNob2xkX2ludGVycnVwdDsKIAkJfQogCX0KIH0KQEAgLTI3MCwxOCArMjc1LDE3IEBACiBzdGF0aWMgdm9pZCBhbWRfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKQogewogCXUzMiBsb3cgPSAwLCBoaWdoID0gMCwgYWRkcmVzcyA9IDA7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1bnNpZ25lZCBpbnQgYmFuaywgYmxvY2s7CiAJc3RydWN0IG1jZSBtOwogCi0JbWNlX3NldHVwKCZtKTsKLQogCS8qIGFzc3VtZSBmaXJzdCBiYW5rIGNhdXNlZCBpdCAqLwogCWZvciAoYmFuayA9IDA7IGJhbmsgPCBtY2FfY2ZnLmJhbmtzOyArK2JhbmspIHsKLQkJaWYgKCEocGVyX2NwdShiYW5rX21hcCwgbS5jcHUpICYgKDEgPDwgYmFuaykpKQorCQlpZiAoIShwZXJfY3B1KGJhbmtfbWFwLCBjcHUpICYgKDEgPDwgYmFuaykpKQogCQkJY29udGludWU7CiAJCWZvciAoYmxvY2sgPSAwOyBibG9jayA8IE5SX0JMT0NLUzsgKytibG9jaykgewogCQkJaWYgKGJsb2NrID09IDApIHsKLQkJCQlhZGRyZXNzID0gTVNSX0lBMzJfTUMwX01JU0MgKyBiYW5rICogNDsKKwkJCQlhZGRyZXNzID0gTVNSX0lBMzJfTUN4X01JU0MoYmFuayk7CiAJCQl9IGVsc2UgaWYgKGJsb2NrID09IDEpIHsKIAkJCQlhZGRyZXNzID0gKGxvdyAmIE1BU0tfQkxLUFRSX0xPKSA+PiAyMTsKIAkJCQlpZiAoIWFkZHJlc3MpCkBAIC0zMDksMjEgKzMxMywyMCBAQAogCQkJICogTG9nIHRoZSBtYWNoaW5lIGNoZWNrIHRoYXQgY2F1c2VkIHRoZSB0aHJlc2hvbGQKIAkJCSAqIGV2ZW50LgogCQkJICovCi0JCQltYWNoaW5lX2NoZWNrX3BvbGwoTUNQX1RJTUVTVEFNUCwKLQkJCQkJdGhpc19jcHVfcHRyKCZtY2VfcG9sbF9iYW5rcykpOwotCi0JCQlpZiAoaGlnaCAmIE1BU0tfT1ZFUkZMT1dfSEkpIHsKLQkJCQlyZG1zcmwoYWRkcmVzcywgbS5taXNjKTsKLQkJCQlyZG1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUyArIGJhbmsgKiA0LAotCQkJCSAgICAgICBtLnN0YXR1cyk7Ci0JCQkJbS5iYW5rID0gSzhfTUNFX1RIUkVTSE9MRF9CQVNFCi0JCQkJICAgICAgICsgYmFuayAqIE5SX0JMT0NLUwotCQkJCSAgICAgICArIGJsb2NrOwotCQkJCW1jZV9sb2coJm0pOwotCQkJCXJldHVybjsKLQkJCX0KKwkJCWlmIChoaWdoICYgTUFTS19PVkVSRkxPV19ISSkKKwkJCQlnb3RvIGxvZzsKIAkJfQogCX0KKwlyZXR1cm47CisKK2xvZzoKKwltY2Vfc2V0dXAoJm0pOworCXJkbXNybChNU1JfSUEzMl9NQ3hfU1RBVFVTKGJhbmspLCBtLnN0YXR1cyk7CisJbS5taXNjID0gKCh1NjQpaGlnaCA8PCAzMikgfCBsb3c7CisJbS5iYW5rID0gYmFuazsKKwltY2VfbG9nKCZtKTsKKworCXdybXNybChNU1JfSUEzMl9NQ3hfU1RBVFVTKGJhbmspLCAwKTsKIH0KIAogLyoKQEAgLTYxNyw4ICs2MjAsNyBAQAogCQl9CiAJfQogCi0JZXJyID0gYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrcyhjcHUsIGJhbmssIDAsCi0JCQkJCU1TUl9JQTMyX01DMF9NSVNDICsgYmFuayAqIDQpOworCWVyciA9IGFsbG9jYXRlX3RocmVzaG9sZF9ibG9ja3MoY3B1LCBiYW5rLCAwLCBNU1JfSUEzMl9NQ3hfTUlTQyhiYW5rKSk7CiAJaWYgKCFlcnIpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZC5jCmluZGV4IDhmZmZkODQuLmJmYmJlNjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZC5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAlyZXR1cm4gVUNPREVfT0s7CiB9CiAKLWVudW0gdWNvZGVfc3RhdGUgbG9hZF9taWNyb2NvZGVfYW1kKHU4IGZhbWlseSwgY29uc3QgdTggKmRhdGEsIHNpemVfdCBzaXplKQorZW51bSB1Y29kZV9zdGF0ZSBsb2FkX21pY3JvY29kZV9hbWQoaW50IGNwdSwgdTggZmFtaWx5LCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IHNpemUpCiB7CiAJZW51bSB1Y29kZV9zdGF0ZSByZXQ7CiAKQEAgLTM5MCw4ICszOTAsOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTUlDUk9DT0RFX0FNRF9FQVJMWSkgJiYgZGVmaW5lZChDT05GSUdfWDg2XzMyKQogCS8qIHNhdmUgQlNQJ3MgbWF0Y2hpbmcgcGF0Y2ggZm9yIGVhcmx5IGxvYWQgKi8KLQlpZiAoY3B1X2RhdGEoc21wX3Byb2Nlc3Nvcl9pZCgpKS5jcHVfaW5kZXggPT0gYm9vdF9jcHVfZGF0YS5jcHVfaW5kZXgpIHsKLQkJc3RydWN0IHVjb2RlX3BhdGNoICpwID0gZmluZF9wYXRjaChzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmIChjcHVfZGF0YShjcHUpLmNwdV9pbmRleCA9PSBib290X2NwdV9kYXRhLmNwdV9pbmRleCkgeworCQlzdHJ1Y3QgdWNvZGVfcGF0Y2ggKnAgPSBmaW5kX3BhdGNoKGNwdSk7CiAJCWlmIChwKSB7CiAJCQltZW1zZXQoYW1kX3Vjb2RlX3BhdGNoLCAwLCBQQVRDSF9NQVhfU0laRSk7CiAJCQltZW1jcHkoYW1kX3Vjb2RlX3BhdGNoLCBwLT5kYXRhLCBtaW5fdCh1MzIsIGtzaXplKHAtPmRhdGEpLApAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCWdvdG8gZndfcmVsZWFzZTsKIAl9CiAKLQlyZXQgPSBsb2FkX21pY3JvY29kZV9hbWQoYy0+eDg2LCBmdy0+ZGF0YSwgZnctPnNpemUpOworCXJldCA9IGxvYWRfbWljcm9jb2RlX2FtZChjcHUsIGMtPng4NiwgZnctPmRhdGEsIGZ3LT5zaXplKTsKIAogIGZ3X3JlbGVhc2U6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9hbWRfZWFybHkuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZF9lYXJseS5jCmluZGV4IDA2Njc0NDcuLjczNzczN2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZF9lYXJseS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2FtZF9lYXJseS5jCkBAIC0zODksNyArMzg5LDcgQEAKIAllYXggICA9IGNwdWlkX2VheCgweDAwMDAwMDAxKTsKIAllYXggICA9ICgoZWF4ID4+IDgpICYgMHhmKSArICgoZWF4ID4+IDIwKSAmIDB4ZmYpOwogCi0JcmV0ID0gbG9hZF9taWNyb2NvZGVfYW1kKGVheCwgY29udGFpbmVyLCBjb250YWluZXJfc2l6ZSk7CisJcmV0ID0gbG9hZF9taWNyb2NvZGVfYW1kKHNtcF9wcm9jZXNzb3JfaWQoKSwgZWF4LCBjb250YWluZXIsIGNvbnRhaW5lcl9zaXplKTsKIAlpZiAocmV0ICE9IFVDT0RFX09LKQogCQlyZXR2YWwgPSAtRUlOVkFMOwogCkBAIC00MDIsMyArNDAyLDIxIEBACiAKIAlyZXR1cm4gcmV0dmFsOwogfQorCit2b2lkIHJlbG9hZF91Y29kZV9hbWQodm9pZCkKK3sKKwlzdHJ1Y3QgbWljcm9jb2RlX2FtZCAqbWM7CisJdTMyIHJldiwgZWF4OworCisJcmRtc3IoTVNSX0FNRDY0X1BBVENIX0xFVkVMLCByZXYsIGVheCk7CisKKwltYyA9IChzdHJ1Y3QgbWljcm9jb2RlX2FtZCAqKWFtZF91Y29kZV9wYXRjaDsKKworCWlmIChtYyAmJiByZXYgPCBtYy0+aGRyLnBhdGNoX2lkKSB7CisJCWlmICghX19hcHBseV9taWNyb2NvZGVfYW1kKG1jKSkgeworCQkJdWNvZGVfbmV3X3JldiA9IG1jLT5oZHIucGF0Y2hfaWQ7CisJCQlwcl9pbmZvKCJtaWNyb2NvZGU6IHJlbG9hZCBwYXRjaF9sZXZlbD0weCUwOHhcbiIsCisJCQkJdWNvZGVfbmV3X3Jldik7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlLmMKaW5kZXggMmNlOTA1MS4uMTVjMjkwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmUuYwpAQCAtNDY2LDEzICs0NjYsNyBAQAogCWlmICh1Y2ktPnZhbGlkICYmIHVjaS0+bWMpCiAJCW1pY3JvY29kZV9vcHMtPmFwcGx5X21pY3JvY29kZShjcHUpOwogCWVsc2UgaWYgKCF1Y2ktPm1jKQotCQkvKgotCQkgKiBXZSBtaWdodCByZXN1bWUgYW5kIG5vdCBoYXZlIGFwcGxpZWQgbGF0ZSBtaWNyb2NvZGUgYnV0IHN0aWxsCi0JCSAqIGhhdmUgYSBuZXdlciBwYXRjaCBzdGFzaGVkIGZyb20gdGhlIGVhcmx5IGxvYWRlci4gV2UgZG9uJ3QKLQkJICogaGF2ZSBpdCBpbiB1Y2ktPm1jIHNvIHdlIGhhdmUgdG8gbG9hZCBpdCB0aGUgc2FtZSB3YXkgd2UncmUKLQkJICogYXBwbHlpbmcgcGF0Y2hlcyBlYXJseSBvbiB0aGUgQVBzLgotCQkgKi8KLQkJbG9hZF91Y29kZV9hcCgpOworCQlyZWxvYWRfZWFybHlfbWljcm9jb2RlKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgbWNfc3lzY29yZV9vcHMgPSB7CkBAIC01NTcsNyArNTUxLDcgQEAKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CiAJaW50IGVycm9yOwogCi0JaWYgKGRpc191Y29kZV9sZHIpCisJaWYgKHBhcmF2aXJ0X2VuYWJsZWQoKSB8fCBkaXNfdWNvZGVfbGRyKQogCQlyZXR1cm4gMDsKIAogCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlX2Vhcmx5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlX2Vhcmx5LmMKaW5kZXggMmMwMTdmMi4uZDQ1ZGY0YmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmVfZWFybHkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlX2Vhcmx5LmMKQEAgLTE3NiwzICsxNzYsMjQgQEAKIAogCXJldHVybiAwOwogfQorCit2b2lkIHJlbG9hZF9lYXJseV9taWNyb2NvZGUodm9pZCkKK3sKKwlpbnQgdmVuZG9yLCB4ODY7CisKKwl2ZW5kb3IgPSB4ODZfdmVuZG9yKCk7CisJeDg2ID0geDg2X2ZhbWlseSgpOworCisJc3dpdGNoICh2ZW5kb3IpIHsKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCWlmICh4ODYgPj0gNikKKwkJCXJlbG9hZF91Y29kZV9pbnRlbCgpOworCQlicmVhazsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlpZiAoeDg2ID49IDB4MTApCisJCQlyZWxvYWRfdWNvZGVfYW1kKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2ludGVsX2Vhcmx5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9pbnRlbF9lYXJseS5jCmluZGV4IGI4ODM0M2YuLmVjOWRmNmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2ludGVsX2Vhcmx5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvaW50ZWxfZWFybHkuYwpAQCAtNjUwLDggKzY1MCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBhcHBseV9taWNyb2NvZGVfZWFybHkoc3RydWN0IG1jX3NhdmVkX2RhdGEgKm1jX3NhdmVkX2RhdGEsCi0JCQkJIHN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpKQorc3RhdGljIGludCBhcHBseV9taWNyb2NvZGVfZWFybHkoc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2ksIGJvb2wgZWFybHkpCiB7CiAJc3RydWN0IG1pY3JvY29kZV9pbnRlbCAqbWNfaW50ZWw7CiAJdW5zaWduZWQgaW50IHZhbFsyXTsKQEAgLTY4MCw3ICs2NzksMTAgQEAKICNlbmRpZgogCXVjaS0+Y3B1X3NpZy5yZXYgPSB2YWxbMV07CiAKLQlwcmludF91Y29kZSh1Y2kpOworCWlmIChlYXJseSkKKwkJcHJpbnRfdWNvZGUodWNpKTsKKwllbHNlCisJCXByaW50X3Vjb2RlX2luZm8odWNpLCBtY19pbnRlbC0+aGRyLmRhdGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MTUsMTIgKzcxNywxNyBAQAogCQkgICAgICB1bnNpZ25lZCBsb25nIGluaXRyZF9lbmRfZWFybHksCiAJCSAgICAgIHN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpKQogeworCWVudW0gdWNvZGVfc3RhdGUgcmV0OworCiAJY29sbGVjdF9jcHVfaW5mb19lYXJseSh1Y2kpOwogCXNjYW5fbWljcm9jb2RlKGluaXRyZF9zdGFydF9lYXJseSwgaW5pdHJkX2VuZF9lYXJseSwgbWNfc2F2ZWRfZGF0YSwKIAkJICAgICAgIG1jX3NhdmVkX2luX2luaXRyZCwgdWNpKTsKLQlsb2FkX21pY3JvY29kZShtY19zYXZlZF9kYXRhLCBtY19zYXZlZF9pbl9pbml0cmQsCi0JCSAgICAgICBpbml0cmRfc3RhcnRfZWFybHksIHVjaSk7Ci0JYXBwbHlfbWljcm9jb2RlX2Vhcmx5KG1jX3NhdmVkX2RhdGEsIHVjaSk7CisKKwlyZXQgPSBsb2FkX21pY3JvY29kZShtY19zYXZlZF9kYXRhLCBtY19zYXZlZF9pbl9pbml0cmQsCisJCQkgICAgIGluaXRyZF9zdGFydF9lYXJseSwgdWNpKTsKKworCWlmIChyZXQgPT0gVUNPREVfT0spCisJCWFwcGx5X21pY3JvY29kZV9lYXJseSh1Y2ksIHRydWUpOwogfQogCiB2b2lkIF9faW5pdApAQCAtNzQ5LDcgKzc1Niw4IEBACiAJaW5pdHJkX2VuZF9lYXJseSA9IGluaXRyZF9zdGFydF9lYXJseSArIHJhbWRpc2tfc2l6ZTsKIAogCV9sb2FkX3Vjb2RlX2ludGVsX2JzcCgmbWNfc2F2ZWRfZGF0YSwgbWNfc2F2ZWRfaW5faW5pdHJkLAotCQkJICAgICAgaW5pdHJkX3N0YXJ0X2Vhcmx5LCBpbml0cmRfZW5kX2Vhcmx5LCAmdWNpKTsKKwkJCSAgICAgIGluaXRyZF9zdGFydF9lYXJseSwgaW5pdHJkX2VuZF9lYXJseSwKKwkJCSAgICAgICZ1Y2kpOwogI2VuZGlmCiB9CiAKQEAgLTc4Myw1ICs3OTEsMjMgQEAKIAljb2xsZWN0X2NwdV9pbmZvX2Vhcmx5KCZ1Y2kpOwogCWxvYWRfbWljcm9jb2RlKG1jX3NhdmVkX2RhdGFfcCwgbWNfc2F2ZWRfaW5faW5pdHJkX3AsCiAJCSAgICAgICBpbml0cmRfc3RhcnRfYWRkciwgJnVjaSk7Ci0JYXBwbHlfbWljcm9jb2RlX2Vhcmx5KG1jX3NhdmVkX2RhdGFfcCwgJnVjaSk7CisJYXBwbHlfbWljcm9jb2RlX2Vhcmx5KCZ1Y2ksIHRydWUpOworfQorCit2b2lkIHJlbG9hZF91Y29kZV9pbnRlbCh2b2lkKQoreworCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyB1Y2k7CisJZW51bSB1Y29kZV9zdGF0ZSByZXQ7CisKKwlpZiAoIW1jX3NhdmVkX2RhdGEubWNfc2F2ZWRfY291bnQpCisJCXJldHVybjsKKworCWNvbGxlY3RfY3B1X2luZm9fZWFybHkoJnVjaSk7CisKKwlyZXQgPSBnZW5lcmljX2xvYWRfbWljcm9jb2RlX2Vhcmx5KG1jX3NhdmVkX2RhdGEubWNfc2F2ZWQsCisJCQkJCSAgIG1jX3NhdmVkX2RhdGEubWNfc2F2ZWRfY291bnQsICZ1Y2kpOworCWlmIChyZXQgIT0gVUNPREVfT0spCisJCXJldHVybjsKKworCWFwcGx5X21pY3JvY29kZV9lYXJseSgmdWNpLCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5oCmluZGV4IGZjNWViMzkuLjRlNmNkYjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5oCkBAIC0yNTMsNiArMjUzLDEwIEBACiAjZGVmaW5lIElOVEVMX1VFVkVOVF9DT05TVFJBSU5UKGMsIG4pCVwKIAlFVkVOVF9DT05TVFJBSU5UKGMsIG4sIElOVEVMX0FSQ0hfRVZFTlRfTUFTSykKIAorLyogTGlrZSBVRVZFTlRfQ09OU1RSQUlOVCwgYnV0IG1hdGNoIGZsYWdzIHRvbyAqLworI2RlZmluZSBJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVChjLCBuKQlcCisJRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBJTlRFTF9BUkNIX0VWRU5UX01BU0t8WDg2X0FMTF9FVkVOVF9GTEFHUykKKwogI2RlZmluZSBJTlRFTF9QTERfQ09OU1RSQUlOVChjLCBuKQlcCiAJX19FVkVOVF9DT05TVFJBSU5UKGMsIG4sIElOVEVMX0FSQ0hfRVZFTlRfTUFTS3xYODZfQUxMX0VWRU5UX0ZMQUdTLCBcCiAJCQkgICBIV0VJR0hUKG4pLCAwLCBQRVJGX1g4Nl9FVkVOVF9QRUJTX0xETEFUKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZF9pYnMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWRfaWJzLmMKaW5kZXggY2JiMWJlM2UuLmE2MWY1YzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWRfaWJzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZF9pYnMuYwpAQCAtNTY1LDYgKzU2NSwyMSBAQAogCQkJCSAgICAgICBwZXJmX2licy0+b2Zmc2V0X21heCwKIAkJCQkgICAgICAgb2Zmc2V0ICsgMSk7CiAJfSB3aGlsZSAob2Zmc2V0IDwgb2Zmc2V0X21heCk7CisJaWYgKGV2ZW50LT5hdHRyLnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7CisJCS8qCisJCSAqIFJlYWQgSWJzQnJUYXJnZXQgYW5kIElic09wRGF0YTQgc2VwYXJhdGVseQorCQkgKiBkZXBlbmRpbmcgb24gdGhlaXIgYXZhaWxhYmlsaXR5LgorCQkgKiBDYW4ndCBhZGQgdG8gb2Zmc2V0X21heCBhcyB0aGV5IGFyZSBzdGFnZ2VyZWQKKwkJICovCisJCWlmIChpYnNfY2FwcyAmIElCU19DQVBTX0JSTlRSR1QpIHsKKwkJCXJkbXNybChNU1JfQU1ENjRfSUJTQlJUQVJHRVQsICpidWYrKyk7CisJCQlzaXplKys7CisJCX0KKwkJaWYgKGlic19jYXBzICYgSUJTX0NBUFNfT1BEQVRBNCkgeworCQkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNPUERBVEE0LCAqYnVmKyspOworCQkJc2l6ZSsrOworCQl9CisJfQogCWlic19kYXRhLnNpemUgPSBzaXplb2YodTY0KSAqIHNpemU7CiAKIAlyZWdzID0gKmlyZWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2RzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfZHMuYwppbmRleCA0NjIxMWJjLi4zYzg5NWQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfZHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfZHMuYwpAQCAtNTUyLDE4ICs1NTIsMTggQEAKICAqIFBFQlMKICAqLwogc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfY29yZTJfcGVic19ldmVudF9jb25zdHJhaW50c1tdID0gewotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDBjMCwgMHgxKSwgLyogSU5TVF9SRVRJUkVELkFOWSAqLwotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4ZmVjMSwgMHgxKSwgLyogWDg3X09QU19SRVRJUkVELkFOWSAqLwotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDBjNSwgMHgxKSwgLyogQlJfSU5TVF9SRVRJUkVELk1JU1BSRUQgKi8KLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDFmYzcsIDB4MSksIC8qIFNJTURfSU5TVF9SRVRVUkVELkFOWSAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHgxKSwgICAgLyogTUVNX0xPQURfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMGMwLCAweDEpLCAvKiBJTlNUX1JFVElSRUQuQU5ZICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHhmZWMxLCAweDEpLCAvKiBYODdfT1BTX1JFVElSRUQuQU5ZICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMGM1LCAweDEpLCAvKiBCUl9JTlNUX1JFVElSRUQuTUlTUFJFRCAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MWZjNywgMHgxKSwgLyogU0lNRF9JTlNUX1JFVFVSRUQuQU5ZICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweDEpLCAgICAvKiBNRU1fTE9BRF9SRVRJUkVELiogKi8KIAlFVkVOVF9DT05TVFJBSU5UX0VORAogfTsKIAogc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfYXRvbV9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7Ci0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMGMwLCAweDEpLCAvKiBJTlNUX1JFVElSRUQuQU5ZICovCi0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMGM1LCAweDEpLCAvKiBNSVNQUkVESUNURURfQlJBTkNIX1JFVElSRUQgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4MSksICAgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MDBjMCwgMHgxKSwgLyogSU5TVF9SRVRJUkVELkFOWSAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MDBjNSwgMHgxKSwgLyogTUlTUFJFRElDVEVEX0JSQU5DSF9SRVRJUkVEICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweDEpLCAgICAvKiBNRU1fTE9BRF9SRVRJUkVELiogKi8KIAlFVkVOVF9DT05TVFJBSU5UX0VORAogfTsKIApAQCAtNTc3LDM2ICs1NzcsMzYgQEAKIAogc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfbmVoYWxlbV9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7CiAJSU5URUxfUExEX0NPTlNUUkFJTlQoMHgxMDBiLCAweGYpLCAgICAgIC8qIE1FTV9JTlNUX1JFVElSRUQuKiAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgwZiwgMHhmKSwgICAgLyogTUVNX1VOQ09SRV9SRVRJUkVELiogKi8KLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAxMGMsIDB4ZiksIC8qIE1FTV9TVE9SRV9SRVRJUkVELkRUTEJfTUlTUyAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjMCwgMHhmKSwgICAgLyogSU5TVF9SRVRJUkVELkFOWSAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHgwZiwgMHhmKSwgICAgLyogTUVNX1VOQ09SRV9SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDAxMGMsIDB4ZiksIC8qIE1FTV9TVE9SRV9SRVRJUkVELkRUTEJfTUlTUyAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjMCwgMHhmKSwgICAgLyogSU5TVF9SRVRJUkVELkFOWSAqLwogCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjMiwgMHhmKSwgICAgLyogVU9QU19SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzQsIDB4ZiksICAgIC8qIEJSX0lOU1RfUkVUSVJFRC4qICovCi0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMmM1LCAweGYpLCAvKiBCUl9NSVNQX1JFVElSRUQuTkVBUl9DQUxMICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGM3LCAweGYpLCAgICAvKiBTU0VYX1VPUFNfUkVUSVJFRC4qICovCi0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgyMGM4LCAweGYpLCAvKiBJVExCX01JU1NfUkVUSVJFRCAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHhmKSwgICAgLyogTUVNX0xPQURfUkVUSVJFRC4qICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGY3LCAweGYpLCAgICAvKiBGUF9BU1NJU1QuKiAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjNCwgMHhmKSwgICAgLyogQlJfSU5TVF9SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDAyYzUsIDB4ZiksIC8qIEJSX01JU1BfUkVUSVJFRC5ORUFSX0NBTEwgKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4YzcsIDB4ZiksICAgIC8qIFNTRVhfVU9QU19SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDIwYzgsIDB4ZiksIC8qIElUTEJfTUlTU19SRVRJUkVEICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweGYpLCAgICAvKiBNRU1fTE9BRF9SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4ZjcsIDB4ZiksICAgIC8qIEZQX0FTU0lTVC4qICovCiAJRVZFTlRfQ09OU1RSQUlOVF9FTkQKIH07CiAKIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3dlc3RtZXJlX3BlYnNfZXZlbnRfY29uc3RyYWludHNbXSA9IHsKIAlJTlRFTF9QTERfQ09OU1RSQUlOVCgweDEwMGIsIDB4ZiksICAgICAgLyogTUVNX0lOU1RfUkVUSVJFRC4qICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDBmLCAweGYpLCAgICAvKiBNRU1fVU5DT1JFX1JFVElSRUQuKiAqLwotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MDEwYywgMHhmKSwgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAweGYpLCAgICAvKiBJTlNUUl9SRVRJUkVELiogKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4MGYsIDB4ZiksICAgIC8qIE1FTV9VTkNPUkVfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMTBjLCAweGYpLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4YzAsIDB4ZiksICAgIC8qIElOU1RSX1JFVElSRUQuKiAqLwogCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjMiwgMHhmKSwgICAgLyogVU9QU19SRVRJUkVELiogKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzQsIDB4ZiksICAgIC8qIEJSX0lOU1RfUkVUSVJFRC4qICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGM1LCAweGYpLCAgICAvKiBCUl9NSVNQX1JFVElSRUQuKiAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjNywgMHhmKSwgICAgLyogU1NFWF9VT1BTX1JFVElSRUQuKiAqLwotCUlOVEVMX1VFVkVOVF9DT05TVFJBSU5UKDB4MjBjOCwgMHhmKSwgLyogSVRMQl9NSVNTX1JFVElSRUQgKi8KLQlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4ZiksICAgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLwotCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhmNywgMHhmKSwgICAgLyogRlBfQVNTSVNULiogKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4YzQsIDB4ZiksICAgIC8qIEJSX0lOU1RfUkVUSVJFRC4qICovCisJSU5URUxfRkxBR1NfRVZFTlRfQ09OU1RSQUlOVCgweGM1LCAweGYpLCAgICAvKiBCUl9NSVNQX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhjNywgMHhmKSwgICAgLyogU1NFWF9VT1BTX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MjBjOCwgMHhmKSwgLyogSVRMQl9NSVNTX1JFVElSRUQgKi8KKwlJTlRFTF9GTEFHU19FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4ZiksICAgIC8qIE1FTV9MT0FEX1JFVElSRUQuKiAqLworCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHhmNywgMHhmKSwgICAgLyogRlBfQVNTSVNULiogKi8KIAlFVkVOVF9DT05TVFJBSU5UX0VORAogfTsKIAogc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfc25iX3BlYnNfZXZlbnRfY29uc3RyYWludHNbXSA9IHsKLQlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAxYzAsIDB4MiksIC8qIElOU1RfUkVUSVJFRC5QUkVDRElTVCAqLworCUlOVEVMX0ZMQUdTX1VFVkVOVF9DT05TVFJBSU5UKDB4MDFjMCwgMHgyKSwgLyogSU5TVF9SRVRJUkVELlBSRUNESVNUICovCiAJSU5URUxfUExEX0NPTlNUUkFJTlQoMHgwMWNkLCAweDgpLCAgICAvKiBNRU1fVFJBTlNfUkVUSVJFRC5MQVRfQUJPVkVfVEhSICovCiAJSU5URUxfUFNUX0NPTlNUUkFJTlQoMHgwMmNkLCAweDgpLCAgICAvKiBNRU1fVFJBTlNfUkVUSVJFRC5QUkVDSVNFX1NUT1JFUyAqLwogCS8qIFVPUFNfUkVUSVJFRC5BTEwsIGludj0xLCBjbWFzaz0xNiAoY3ljbGVzOnApLiAqLwpAQCAtNjE3LDcgKzYxNyw3IEBACiB9OwogCiBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9pdmJfcGVic19ldmVudF9jb25zdHJhaW50c1tdID0gewotICAgICAgICBJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDAxYzAsIDB4MiksIC8qIElOU1RfUkVUSVJFRC5QUkVDRElTVCAqLworICAgICAgICBJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDAxYzAsIDB4MiksIC8qIElOU1RfUkVUSVJFRC5QUkVDRElTVCAqLwogICAgICAgICBJTlRFTF9QTERfQ09OU1RSQUlOVCgweDAxY2QsIDB4OCksICAgIC8qIE1FTV9UUkFOU19SRVRJUkVELkxBVF9BQk9WRV9USFIgKi8KIAlJTlRFTF9QU1RfQ09OU1RSQUlOVCgweDAyY2QsIDB4OCksICAgIC8qIE1FTV9UUkFOU19SRVRJUkVELlBSRUNJU0VfU1RPUkVTICovCiAJLyogVU9QU19SRVRJUkVELkFMTCwgaW52PTEsIGNtYXNrPTE2IChjeWNsZXM6cCkuICovCkBAIC02MjgsNyArNjI4LDcgQEAKIH07CiAKIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2hzd19wZWJzX2V2ZW50X2NvbnN0cmFpbnRzW10gPSB7Ci0JSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMWMwLCAweDIpLCAvKiBJTlNUX1JFVElSRUQuUFJFQ0RJU1QgKi8KKwlJTlRFTF9GTEFHU19VRVZFTlRfQ09OU1RSQUlOVCgweDAxYzAsIDB4MiksIC8qIElOU1RfUkVUSVJFRC5QUkVDRElTVCAqLwogCUlOVEVMX1BMRF9DT05TVFJBSU5UKDB4MDFjZCwgMHhmKSwgICAgLyogTUVNX1RSQU5TX1JFVElSRUQuKiAqLwogCS8qIFVPUFNfUkVUSVJFRC5BTEwsIGludj0xLCBjbWFzaz0xNiAoY3ljbGVzOnApLiAqLwogCUlOVEVMX0ZMQUdTX0VWRU5UX0NPTlNUUkFJTlQoMHgxMDgwMDFjMiwgMHhmKSwKQEAgLTcyNCw2ICs3MjQsNyBAQAogCXVuc2lnbmVkIGxvbmcgaXAgPSByZWdzLT5pcDsKIAlpbnQgaXNfNjRiaXQgPSAwOwogCXZvaWQgKmthZGRyOworCWludCBzaXplOwogCiAJLyoKIAkgKiBXZSBkb24ndCBuZWVkIHRvIGZpeHVwIGlmIHRoZSBQRUJTIGFzc2lzdCBpcyBmYXVsdCBsaWtlCkBAIC03NTgsMTEgKzc1OSwxMiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKKwlzaXplID0gaXAgLSB0bzsKIAlpZiAoIWtlcm5lbF9pcChpcCkpIHsKLQkJaW50IHNpemUsIGJ5dGVzOworCQlpbnQgYnl0ZXM7CiAJCXU4ICpidWYgPSB0aGlzX2NwdV9yZWFkKGluc25fYnVmZmVyKTsKIAotCQlzaXplID0gaXAgLSB0bzsgLyogTXVzdCBmaXQgb3VyIGJ1ZmZlciwgc2VlIGFib3ZlICovCisJCS8qICdzaXplJyBtdXN0IGZpdCBvdXIgYnVmZmVyLCBzZWUgYWJvdmUgKi8KIAkJYnl0ZXMgPSBjb3B5X2Zyb21fdXNlcl9ubWkoYnVmLCAodm9pZCBfX3VzZXIgKil0bywgc2l6ZSk7CiAJCWlmIChieXRlcyAhPSAwKQogCQkJcmV0dXJuIDA7CkBAIC03ODAsMTEgKzc4MiwyMCBAQAogI2lmZGVmIENPTkZJR19YODZfNjQKIAkJaXNfNjRiaXQgPSBrZXJuZWxfaXAodG8pIHx8ICF0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKTsKICNlbmRpZgotCQlpbnNuX2luaXQoJmluc24sIGthZGRyLCBpc182NGJpdCk7CisJCWluc25faW5pdCgmaW5zbiwga2FkZHIsIHNpemUsIGlzXzY0Yml0KTsKIAkJaW5zbl9nZXRfbGVuZ3RoKCZpbnNuKTsKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZXJlIHdhcyBub3QgYSBwcm9ibGVtIGRlY29kaW5nIHRoZQorCQkgKiBpbnN0cnVjdGlvbiBhbmQgZ2V0dGluZyB0aGUgbGVuZ3RoLiAgVGhpcyBpcworCQkgKiBkb3VibHkgaW1wb3J0YW50IGJlY2F1c2Ugd2UgaGF2ZSBhbiBpbmZpbml0ZQorCQkgKiBsb29wIGlmIGluc24ubGVuZ3RoPTAuCisJCSAqLworCQlpZiAoIWluc24ubGVuZ3RoKQorCQkJYnJlYWs7CiAKIAkJdG8gKz0gaW5zbi5sZW5ndGg7CiAJCWthZGRyICs9IGluc24ubGVuZ3RoOworCQlzaXplIC09IGluc24ubGVuZ3RoOwogCX0gd2hpbGUgKHRvIDwgaXApOwogCiAJaWYgKHRvID09IGlwKSB7CkBAIC04ODYsNiArODk3LDI5IEBACiAJcmVncy5icCA9IHBlYnMtPmJwOwogCXJlZ3Muc3AgPSBwZWJzLT5zcDsKIAorCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfSU5UUikgeworCQlyZWdzLmF4ID0gcGVicy0+YXg7CisJCXJlZ3MuYnggPSBwZWJzLT5ieDsKKwkJcmVncy5jeCA9IHBlYnMtPmN4OworCQlyZWdzLmR4ID0gcGVicy0+ZHg7CisJCXJlZ3Muc2kgPSBwZWJzLT5zaTsKKwkJcmVncy5kaSA9IHBlYnMtPmRpOworCQlyZWdzLmJwID0gcGVicy0+YnA7CisJCXJlZ3Muc3AgPSBwZWJzLT5zcDsKKworCQlyZWdzLmZsYWdzID0gcGVicy0+ZmxhZ3M7CisjaWZuZGVmIENPTkZJR19YODZfMzIKKwkJcmVncy5yOCA9IHBlYnMtPnI4OworCQlyZWdzLnI5ID0gcGVicy0+cjk7CisJCXJlZ3MucjEwID0gcGVicy0+cjEwOworCQlyZWdzLnIxMSA9IHBlYnMtPnIxMTsKKwkJcmVncy5yMTIgPSBwZWJzLT5yMTI7CisJCXJlZ3MucjEzID0gcGVicy0+cjEzOworCQlyZWdzLnIxNCA9IHBlYnMtPnIxNDsKKwkJcmVncy5yMTUgPSBwZWJzLT5yMTU7CisjZW5kaWYKKwl9CisKIAlpZiAoZXZlbnQtPmF0dHIucHJlY2lzZV9pcCA+IDEgJiYgeDg2X3BtdS5pbnRlbF9jYXAucGVic19mb3JtYXQgPj0gMikgewogCQlyZWdzLmlwID0gcGVicy0+cmVhbF9pcDsKIAkJcmVncy5mbGFncyB8PSBQRVJGX0VGTEFHU19FWEFDVDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9sYnIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9sYnIuYwppbmRleCA0NWZhNzMwLi41OGYxYTk0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfbGJyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2xici5jCkBAIC00NjUsNyArNDY1LDcgQEAKIHsKIAlzdHJ1Y3QgaW5zbiBpbnNuOwogCXZvaWQgKmFkZHI7Ci0JaW50IGJ5dGVzLCBzaXplID0gTUFYX0lOU05fU0laRTsKKwlpbnQgYnl0ZXNfcmVhZCwgYnl0ZXNfbGVmdDsKIAlpbnQgcmV0ID0gWDg2X0JSX05PTkU7CiAJaW50IGV4dCwgdG9fcGxtLCBmcm9tX3BsbTsKIAl1OCBidWZbTUFYX0lOU05fU0laRV07CkBAIC00OTMsOCArNDkzLDEwIEBACiAJCQlyZXR1cm4gWDg2X0JSX05PTkU7CiAKIAkJLyogbWF5IGZhaWwgaWYgdGV4dCBub3QgcHJlc2VudCAqLwotCQlieXRlcyA9IGNvcHlfZnJvbV91c2VyX25taShidWYsICh2b2lkIF9fdXNlciAqKWZyb20sIHNpemUpOwotCQlpZiAoYnl0ZXMgIT0gMCkKKwkJYnl0ZXNfbGVmdCA9IGNvcHlfZnJvbV91c2VyX25taShidWYsICh2b2lkIF9fdXNlciAqKWZyb20sCisJCQkJCQlNQVhfSU5TTl9TSVpFKTsKKwkJYnl0ZXNfcmVhZCA9IE1BWF9JTlNOX1NJWkUgLSBieXRlc19sZWZ0OworCQlpZiAoIWJ5dGVzX3JlYWQpCiAJCQlyZXR1cm4gWDg2X0JSX05PTkU7CiAKIAkJYWRkciA9IGJ1ZjsKQEAgLTUwNSwxMCArNTA3LDE5IEBACiAJCSAqIEVuc3VyZSB3ZSBkb24ndCBibGluZHkgcmVhZCBhbnkgYWRkcmVzcyBieSB2YWxpZGF0aW5nIGl0IGlzCiAJCSAqIGEga25vd24gdGV4dCBhZGRyZXNzLgogCQkgKi8KLQkJaWYgKGtlcm5lbF90ZXh0X2FkZHJlc3MoZnJvbSkpCisJCWlmIChrZXJuZWxfdGV4dF9hZGRyZXNzKGZyb20pKSB7CiAJCQlhZGRyID0gKHZvaWQgKilmcm9tOwotCQllbHNlCisJCQkvKgorCQkJICogQXNzdW1lIHdlIGNhbiBnZXQgdGhlIG1heGltdW0gcG9zc2libGUgc2l6ZQorCQkJICogd2hlbiBncmFiYmluZyBrZXJuZWwgZGF0YS4gIFRoaXMgaXMgbm90CisJCQkgKiBfc3RyaWN0bHlfIHRydWUgc2luY2Ugd2UgY291bGQgcG9zc2libHkgYmUKKwkJCSAqIGV4ZWN1dGluZyB1cCBuZXh0IHRvIGEgbWVtb3J5IGhvbGUsIGJ1dAorCQkJICogaXQgaXMgdmVyeSB1bmxpa2VseSB0byBiZSBhIHByb2JsZW0uCisJCQkgKi8KKwkJCWJ5dGVzX3JlYWQgPSBNQVhfSU5TTl9TSVpFOworCQl9IGVsc2UgewogCQkJcmV0dXJuIFg4Nl9CUl9OT05FOworCQl9CiAJfQogCiAJLyoKQEAgLTUxOCw4ICs1MjksMTAgQEAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJaXM2NCA9IGtlcm5lbF9pcCgodW5zaWduZWQgbG9uZylhZGRyKSB8fCAhdGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMik7CiAjZW5kaWYKLQlpbnNuX2luaXQoJmluc24sIGFkZHIsIGlzNjQpOworCWluc25faW5pdCgmaW5zbiwgYWRkciwgYnl0ZXNfcmVhZCwgaXM2NCk7CiAJaW5zbl9nZXRfb3Bjb2RlKCZpbnNuKTsKKwlpZiAoIWluc24ub3Bjb2RlLmdvdCkKKwkJcmV0dXJuIFg4Nl9CUl9BQk9SVDsKIAogCXN3aXRjaCAoaW5zbi5vcGNvZGUuYnl0ZXNbMF0pIHsKIAljYXNlIDB4ZjoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmVfc25iZXAuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmVfc25iZXAuYwppbmRleCBmOWVkNDI5Li43NDViMTU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlX3NuYmVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZV9zbmJlcC5jCkBAIC00NDksNyArNDQ5LDExIEBACiBzdGF0aWMgc3RydWN0IHVuY29yZV9ldmVudF9kZXNjIHNuYmVwX3VuY29yZV9pbWNfZXZlbnRzW10gPSB7CiAJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2xvY2t0aWNrcywgICAgICAiZXZlbnQ9MHhmZix1bWFzaz0weDAwIiksCiAJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3JlYWQsICAiZXZlbnQ9MHgwNCx1bWFzaz0weDAzIiksCisJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3JlYWQuc2NhbGUsICI2LjEwMzUxNTYyNWUtNSIpLAorCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF9yZWFkLnVuaXQsICJNaUIiKSwKIAlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfd3JpdGUsICJldmVudD0weDA0LHVtYXNrPTB4MGMiKSwKKwlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfd3JpdGUuc2NhbGUsICI2LjEwMzUxNTYyNWUtNSIpLAorCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF93cml0ZS51bml0LCAiTWlCIiksCiAJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfSwKIH07CiAKQEAgLTIwMzYsNyArMjA0MCwxMSBAQAogc3RhdGljIHN0cnVjdCB1bmNvcmVfZXZlbnRfZGVzYyBoc3dlcF91bmNvcmVfaW1jX2V2ZW50c1tdID0gewogCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNsb2NrdGlja3MsICAgICAgImV2ZW50PTB4MDAsdW1hc2s9MHgwMCIpLAogCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF9yZWFkLCAgImV2ZW50PTB4MDQsdW1hc2s9MHgwMyIpLAorCUlOVEVMX1VOQ09SRV9FVkVOVF9ERVNDKGNhc19jb3VudF9yZWFkLnNjYWxlLCAiNi4xMDM1MTU2MjVlLTUiKSwKKwlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfcmVhZC51bml0LCAiTWlCIiksCiAJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3dyaXRlLCAiZXZlbnQ9MHgwNCx1bWFzaz0weDBjIiksCisJSU5URUxfVU5DT1JFX0VWRU5UX0RFU0MoY2FzX2NvdW50X3dyaXRlLnNjYWxlLCAiNi4xMDM1MTU2MjVlLTUiKSwKKwlJTlRFTF9VTkNPUkVfRVZFTlRfREVTQyhjYXNfY291bnRfd3JpdGUudW5pdCwgIk1pQiIpLAogCXsgLyogZW5kOiBhbGwgemVyb2VzICovIH0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCmluZGV4IDU0MzM2NTguLmU3ZDhjNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCkBAIC03Miw3ICs3Miw3IEBACiAJaWYgKGMtPng4Nl9tYXNrIHx8IGMtPmNwdWlkX2xldmVsID49IDApCiAJCXNlcV9wcmludGYobSwgInN0ZXBwaW5nXHQ6ICVkXG4iLCBjLT54ODZfbWFzayk7CiAJZWxzZQotCQlzZXFfcHJpbnRmKG0sICJzdGVwcGluZ1x0OiB1bmtub3duXG4iKTsKKwkJc2VxX3B1dHMobSwgInN0ZXBwaW5nXHQ6IHVua25vd25cbiIpOwogCWlmIChjLT5taWNyb2NvZGUpCiAJCXNlcV9wcmludGYobSwgIm1pY3JvY29kZVx0OiAweCV4XG4iLCBjLT5taWNyb2NvZGUpOwogCkBAIC05MiwxMiArOTIsMTIgQEAKIAlzaG93X2NwdWluZm9fY29yZShtLCBjLCBjcHUpOwogCXNob3dfY3B1aW5mb19taXNjKG0sIGMpOwogCi0Jc2VxX3ByaW50ZihtLCAiZmxhZ3NcdFx0OiIpOworCXNlcV9wdXRzKG0sICJmbGFnc1x0XHQ6Iik7CiAJZm9yIChpID0gMDsgaSA8IDMyKk5DQVBJTlRTOyBpKyspCiAJCWlmIChjcHVfaGFzKGMsIGkpICYmIHg4Nl9jYXBfZmxhZ3NbaV0gIT0gTlVMTCkKIAkJCXNlcV9wcmludGYobSwgIiAlcyIsIHg4Nl9jYXBfZmxhZ3NbaV0pOwogCi0Jc2VxX3ByaW50ZihtLCAiXG5idWdzXHRcdDoiKTsKKwlzZXFfcHV0cyhtLCAiXG5idWdzXHRcdDoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgMzIqTkJVR0lOVFM7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgYnVnX2JpdCA9IDMyKk5DQVBJTlRTICsgaTsKIApAQCAtMTE4LDcgKzExOCw3IEBACiAJc2VxX3ByaW50ZihtLCAiYWRkcmVzcyBzaXplc1x0OiAldSBiaXRzIHBoeXNpY2FsLCAldSBiaXRzIHZpcnR1YWxcbiIsCiAJCSAgIGMtPng4Nl9waHlzX2JpdHMsIGMtPng4Nl92aXJ0X2JpdHMpOwogCi0Jc2VxX3ByaW50ZihtLCAicG93ZXIgbWFuYWdlbWVudDoiKTsKKwlzZXFfcHV0cyhtLCAicG93ZXIgbWFuYWdlbWVudDoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewogCQlpZiAoYy0+eDg2X3Bvd2VyICYgKDEgPDwgaSkpIHsKIAkJCWlmIChpIDwgQVJSQVlfU0laRSh4ODZfcG93ZXJfZmxhZ3MpICYmCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkJfQogCX0KIAotCXNlcV9wcmludGYobSwgIlxuXG4iKTsKKwlzZXFfcHV0cyhtLCAiXG5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCmluZGV4IDMyMjVhZTZjLi44Mzc0MWE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAKIAlkZXYgPSBkZXZpY2VfY3JlYXRlKGNwdWlkX2NsYXNzLCBOVUxMLCBNS0RFVihDUFVJRF9NQUpPUiwgY3B1KSwgTlVMTCwKIAkJCSAgICAiY3B1JWQiLCBjcHUpOwotCXJldHVybiBJU19FUlIoZGV2KSA/IFBUUl9FUlIoZGV2KSA6IDA7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBjcHVpZF9kZXZpY2VfZGVzdHJveShpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VzcGZpeF82NC5jIGIvYXJjaC94ODYva2VybmVsL2VzcGZpeF82NC5jCmluZGV4IDk0ZDg1N2YuLmY1ZDA3MzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lc3BmaXhfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZXNwZml4XzY0LmMKQEAgLTEyMiw5ICsxMjIsNiBAQAogdm9pZCBfX2luaXQgaW5pdF9lc3BmaXhfYnNwKHZvaWQpCiB7CiAJcGdkX3QgKnBnZF9wOwotCXB0ZXZhbF90IHB0ZW1hc2s7Ci0KLQlwdGVtYXNrID0gX19zdXBwb3J0ZWRfcHRlX21hc2s7CiAKIAkvKiBJbnN0YWxsIHRoZSBlc3BmaXggcHVkIGludG8gdGhlIGtlcm5lbCBwYWdlIGRpcmVjdG9yeSAqLwogCXBnZF9wID0gJmluaXRfbGV2ZWw0X3BndFtwZ2RfaW5kZXgoRVNQRklYX0JBU0VfQUREUildOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCmluZGV4IDMzODZkYzkuLjIxNDIzNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNDcsNyArNDgsNyBAQAogdW5pb24gZnRyYWNlX2NvZGVfdW5pb24gewogCWNoYXIgY29kZVtNQ09VTlRfSU5TTl9TSVpFXTsKIAlzdHJ1Y3QgewotCQljaGFyIGU4OworCQl1bnNpZ25lZCBjaGFyIGU4OwogCQlpbnQgb2Zmc2V0OwogCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiB9OwpAQCAtNTgyLDcgKzU4Myw3IEBACiAKICByZW1vdmVfYnJlYWtwb2ludHM6CiAJcHJfd2FybigiRmFpbGVkIG9uICVzICglZCk6XG4iLCByZXBvcnQsIGNvdW50KTsKLQlmdHJhY2VfYnVnKHJldCwgcmVjID8gcmVjLT5pcCA6IDApOworCWZ0cmFjZV9idWcocmV0LCByZWMpOwogCWZvcl9mdHJhY2VfcmVjX2l0ZXIoaXRlcikgewogCQlyZWMgPSBmdHJhY2VfcmVjX2l0ZXJfcmVjb3JkKGl0ZXIpOwogCQkvKgpAQCAtNjQ0LDEzICs2NDUsOCBAQAogewogCXJldHVybiAwOwogfQotI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0KLSNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKLWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9jYWxsKHZvaWQpOwotCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpCiBzdGF0aWMgdW5zaWduZWQgY2hhciAqZnRyYWNlX2ptcF9yZXBsYWNlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlzdGF0aWMgdW5pb24gZnRyYWNlX2NvZGVfdW5pb24gY2FsYzsKQEAgLTY2NCw2ICs2NjAsMjgwIEBACiAJICovCiAJcmV0dXJuIGNhbGMuY29kZTsKIH0KKyNlbmRpZgorCisvKiBDdXJyZW50bHkgb25seSB4ODZfNjQgc3VwcG9ydHMgZHluYW1pYyB0cmFtcG9saW5lcyAqLworI2lmZGVmIENPTkZJR19YODZfNjQKKworI2lmZGVmIENPTkZJR19NT0RVTEVTCisjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CisvKiBNb2R1bGUgYWxsb2NhdGlvbiBzaW1wbGlmaWVzIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBjb2RlICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmFsbG9jX3RyYW1wKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gbW9kdWxlX2FsbG9jKHNpemUpOworfQorc3RhdGljIGlubGluZSB2b2lkIHRyYW1wX2ZyZWUodm9pZCAqdHJhbXApCit7CisJbW9kdWxlX2ZyZWUoTlVMTCwgdHJhbXApOworfQorI2Vsc2UKKy8qIFRyYW1wb2xpbmVzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaWYgbW9kdWxlcyBhcmUgc3VwcG9ydGVkICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmFsbG9jX3RyYW1wKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFtcF9mcmVlKHZvaWQgKnRyYW1wKSB7IH0KKyNlbmRpZgorCisvKiBEZWZpbmVkIGFzIG1hcmtlcnMgdG8gdGhlIGVuZCBvZiB0aGUgZnRyYWNlIGRlZmF1bHQgdHJhbXBvbGluZXMgKi8KK2V4dGVybiB2b2lkIGZ0cmFjZV9jYWxsZXJfZW5kKHZvaWQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX3JlZ3NfY2FsbGVyX2VuZCh2b2lkKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9yZXR1cm4odm9pZCk7CitleHRlcm4gdm9pZCBmdHJhY2VfY2FsbGVyX29wX3B0cih2b2lkKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9yZWdzX2NhbGxlcl9vcF9wdHIodm9pZCk7CisKKy8qIG1vdnEgZnVuY3Rpb25fdHJhY2Vfb3AoJXJpcCksICVyZHggKi8KKy8qIDB4NDggMHg4YiAweDE1IDxvZmZzZXQtdG8tZnRyYWNlX3RyYWNlX29wICg0IGJ5dGVzKT4gKi8KKyNkZWZpbmUgT1BfUkVGX1NJWkUJNworCisvKgorICogVGhlIGZ0cmFjZV9vcHMgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBjYWxsYmFjay4gU2luY2UgdGhlCisgKiB0cmFtcG9saW5lIG9ubHkgc2VydmljZXMgYSBzaW5nbGUgZnRyYWNlX29wcywgd2UgY2FuIHBhc3MgaW4KKyAqIHRoYXQgb3BzIGRpcmVjdGx5LgorICoKKyAqIFRoZSBmdHJhY2Vfb3BfY29kZV91bmlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBhIHBvaW50ZXIgdG8gdGhlCisgKiBmdHJhY2Vfb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICovCit1bmlvbiBmdHJhY2Vfb3BfY29kZV91bmlvbiB7CisJY2hhciBjb2RlW09QX1JFRl9TSVpFXTsKKwlzdHJ1Y3QgeworCQljaGFyIG9wWzNdOworCQlpbnQgb2Zmc2V0OworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZworY3JlYXRlX3RyYW1wb2xpbmUoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgaW50ICp0cmFtcF9zaXplKQoreworCXVuc2lnbmVkIGNvbnN0IGNoYXIgKmptcDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGVuZF9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBvcF9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGxvbmcgaXA7CisJdW5zaWduZWQgbG9uZyAqcHRyOworCXZvaWQgKnRyYW1wb2xpbmU7CisJLyogNDggOGIgMTUgPG9mZnNldD4gaXMgbW92cSA8b2Zmc2V0PiglcmlwKSwgJXJkeCAqLworCXVuc2lnbmVkIGNvbnN0IGNoYXIgb3BfcmVmW10gPSB7IDB4NDgsIDB4OGIsIDB4MTUgfTsKKwl1bmlvbiBmdHJhY2Vfb3BfY29kZV91bmlvbiBvcF9wdHI7CisJaW50IHJldDsKKworCWlmIChvcHMtPmZsYWdzICYgRlRSQUNFX09QU19GTF9TQVZFX1JFR1MpIHsKKwkJc3RhcnRfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpZnRyYWNlX3JlZ3NfY2FsbGVyOworCQllbmRfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpZnRyYWNlX3JlZ3NfY2FsbGVyX2VuZDsKKwkJb3Bfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpZnRyYWNlX3JlZ3NfY2FsbGVyX29wX3B0cjsKKwl9IGVsc2UgeworCQlzdGFydF9vZmZzZXQgPSAodW5zaWduZWQgbG9uZylmdHJhY2VfY2FsbGVyOworCQllbmRfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpZnRyYWNlX2NhbGxlcl9lbmQ7CisJCW9wX29mZnNldCA9ICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9jYWxsZXJfb3BfcHRyOworCX0KKworCXNpemUgPSBlbmRfb2Zmc2V0IC0gc3RhcnRfb2Zmc2V0OworCisJLyoKKwkgKiBBbGxvY2F0ZSBlbm91Z2ggc2l6ZSB0byBzdG9yZSB0aGUgZnRyYWNlX2NhbGxlciBjb2RlLAorCSAqIHRoZSBqbXAgdG8gZnRyYWNlX3JldHVybiwgYXMgd2VsbCBhcyB0aGUgYWRkcmVzcyBvZgorCSAqIHRoZSBmdHJhY2Vfb3BzIHRoaXMgdHJhbXBvbGluZSBpcyB1c2VkIGZvci4KKwkgKi8KKwl0cmFtcG9saW5lID0gYWxsb2NfdHJhbXAoc2l6ZSArIE1DT1VOVF9JTlNOX1NJWkUgKyBzaXplb2Yodm9pZCAqKSk7CisJaWYgKCF0cmFtcG9saW5lKQorCQlyZXR1cm4gMDsKKworCSp0cmFtcF9zaXplID0gc2l6ZSArIE1DT1VOVF9JTlNOX1NJWkUgKyBzaXplb2Yodm9pZCAqKTsKKworCS8qIENvcHkgZnRyYWNlX2NhbGxlciBvbnRvIHRoZSB0cmFtcG9saW5lIG1lbW9yeSAqLworCXJldCA9IHByb2JlX2tlcm5lbF9yZWFkKHRyYW1wb2xpbmUsICh2b2lkICopc3RhcnRfb2Zmc2V0LCBzaXplKTsKKwlpZiAoV0FSTl9PTihyZXQgPCAwKSkgeworCQl0cmFtcF9mcmVlKHRyYW1wb2xpbmUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpcCA9ICh1bnNpZ25lZCBsb25nKXRyYW1wb2xpbmUgKyBzaXplOworCisJLyogVGhlIHRyYW1wb2xpbmUgZW5kcyB3aXRoIGEgam1wIHRvIGZ0cmFjZV9yZXR1cm4gKi8KKwlqbXAgPSBmdHJhY2Vfam1wX3JlcGxhY2UoaXAsICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9yZXR1cm4pOworCW1lbWNweSh0cmFtcG9saW5lICsgc2l6ZSwgam1wLCBNQ09VTlRfSU5TTl9TSVpFKTsKKworCS8qCisJICogVGhlIGFkZHJlc3Mgb2YgdGhlIGZ0cmFjZV9vcHMgdGhhdCBpcyB1c2VkIGZvciB0aGlzIHRyYW1wb2xpbmUKKwkgKiBpcyBzdG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbXBvbGluZS4gVGhpcyB3aWxsIGJlIHVzZWQgdG8KKwkgKiBsb2FkIHRoZSB0aGlyZCBwYXJhbWV0ZXIgZm9yIHRoZSBjYWxsYmFjay4gQmFzaWNhbGx5LCB0aGF0CisJICogbG9jYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgdHJhbXBvbGluZSB0YWtlcyB0aGUgcGxhY2Ugb2YKKwkgKiB0aGUgZ2xvYmFsIGZ1bmN0aW9uX3RyYWNlX29wIHZhcmlhYmxlLgorCSAqLworCisJcHRyID0gKHVuc2lnbmVkIGxvbmcgKikodHJhbXBvbGluZSArIHNpemUgKyBNQ09VTlRfSU5TTl9TSVpFKTsKKwkqcHRyID0gKHVuc2lnbmVkIGxvbmcpb3BzOworCisJb3Bfb2Zmc2V0IC09IHN0YXJ0X29mZnNldDsKKwltZW1jcHkoJm9wX3B0ciwgdHJhbXBvbGluZSArIG9wX29mZnNldCwgT1BfUkVGX1NJWkUpOworCisJLyogQXJlIHdlIHBvaW50aW5nIHRvIHRoZSByZWZlcmVuY2U/ICovCisJaWYgKFdBUk5fT04obWVtY21wKG9wX3B0ci5vcCwgb3BfcmVmLCAzKSAhPSAwKSkgeworCQl0cmFtcF9mcmVlKHRyYW1wb2xpbmUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBMb2FkIHRoZSBjb250ZW50cyBvZiBwdHIgaW50byB0aGUgY2FsbGJhY2sgcGFyYW1ldGVyICovCisJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpcHRyOworCW9mZnNldCAtPSAodW5zaWduZWQgbG9uZyl0cmFtcG9saW5lICsgb3Bfb2Zmc2V0ICsgT1BfUkVGX1NJWkU7CisKKwlvcF9wdHIub2Zmc2V0ID0gb2Zmc2V0OworCisJLyogcHV0IGluIHRoZSBuZXcgb2Zmc2V0IHRvIHRoZSBmdHJhY2Vfb3BzICovCisJbWVtY3B5KHRyYW1wb2xpbmUgKyBvcF9vZmZzZXQsICZvcF9wdHIsIE9QX1JFRl9TSVpFKTsKKworCS8qIEFMTE9DX1RSQU1QIGZsYWdzIGxldHMgdXMga25vdyB3ZSBjcmVhdGVkIGl0ICovCisJb3BzLT5mbGFncyB8PSBGVFJBQ0VfT1BTX0ZMX0FMTE9DX1RSQU1QOworCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKXRyYW1wb2xpbmU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfdHJhbXBvbGluZV9jYWxsX29mZnNldChib29sIHNhdmVfcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGNhbGxfb2Zmc2V0OworCisJaWYgKHNhdmVfcmVncykgeworCQlzdGFydF9vZmZzZXQgPSAodW5zaWduZWQgbG9uZylmdHJhY2VfcmVnc19jYWxsZXI7CisJCWNhbGxfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpZnRyYWNlX3JlZ3NfY2FsbDsKKwl9IGVsc2UgeworCQlzdGFydF9vZmZzZXQgPSAodW5zaWduZWQgbG9uZylmdHJhY2VfY2FsbGVyOworCQljYWxsX29mZnNldCA9ICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9jYWxsOworCX0KKworCXJldHVybiBjYWxsX29mZnNldCAtIHN0YXJ0X29mZnNldDsKK30KKwordm9pZCBhcmNoX2Z0cmFjZV91cGRhdGVfdHJhbXBvbGluZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQoreworCWZ0cmFjZV9mdW5jX3QgZnVuYzsKKwl1bnNpZ25lZCBjaGFyICpuZXc7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBpcDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlpbnQgcmV0OworCisJaWYgKG9wcy0+dHJhbXBvbGluZSkgeworCQkvKgorCQkgKiBUaGUgZnRyYWNlX29wcyBjYWxsZXIgbWF5IHNldCB1cCBpdHMgb3duIHRyYW1wb2xpbmUuCisJCSAqIEluIHN1Y2ggYSBjYXNlLCB0aGlzIGNvZGUgbXVzdCBub3QgbW9kaWZ5IGl0LgorCQkgKi8KKwkJaWYgKCEob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfQUxMT0NfVFJBTVApKQorCQkJcmV0dXJuOworCX0gZWxzZSB7CisJCW9wcy0+dHJhbXBvbGluZSA9IGNyZWF0ZV90cmFtcG9saW5lKG9wcywgJnNpemUpOworCQlpZiAoIW9wcy0+dHJhbXBvbGluZSkKKwkJCXJldHVybjsKKwkJb3BzLT50cmFtcG9saW5lX3NpemUgPSBzaXplOworCX0KKworCW9mZnNldCA9IGNhbGNfdHJhbXBvbGluZV9jYWxsX29mZnNldChvcHMtPmZsYWdzICYgRlRSQUNFX09QU19GTF9TQVZFX1JFR1MpOworCWlwID0gb3BzLT50cmFtcG9saW5lICsgb2Zmc2V0OworCisJZnVuYyA9IGZ0cmFjZV9vcHNfZ2V0X2Z1bmMob3BzKTsKKworCS8qIERvIGEgc2FmZSBtb2RpZnkgaW4gY2FzZSB0aGUgdHJhbXBvbGluZSBpcyBleGVjdXRpbmcgKi8KKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCAodW5zaWduZWQgbG9uZylmdW5jKTsKKwlyZXQgPSB1cGRhdGVfZnRyYWNlX2Z1bmMoaXAsIG5ldyk7CisKKwkvKiBUaGUgdXBkYXRlIHNob3VsZCBuZXZlciBmYWlsICovCisJV0FSTl9PTihyZXQpOworfQorCisvKiBSZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHRoZSB0cmFtcG9saW5lIGNhbGxzICovCitzdGF0aWMgdm9pZCAqYWRkcl9mcm9tX2NhbGwodm9pZCAqcHRyKQoreworCXVuaW9uIGZ0cmFjZV9jb2RlX3VuaW9uIGNhbGM7CisJaW50IHJldDsKKworCXJldCA9IHByb2JlX2tlcm5lbF9yZWFkKCZjYWxjLCBwdHIsIE1DT1VOVF9JTlNOX1NJWkUpOworCWlmIChXQVJOX09OX09OQ0UocmV0IDwgMCkpCisJCXJldHVybiBOVUxMOworCisJLyogTWFrZSBzdXJlIHRoaXMgaXMgYSBjYWxsICovCisJaWYgKFdBUk5fT05fT05DRShjYWxjLmU4ICE9IDB4ZTgpKSB7CisJCXByX3dhcm4oIkV4cGVjdGVkIGU4LCBnb3QgJXhcbiIsIGNhbGMuZTgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcHRyICsgTUNPVU5UX0lOU05fU0laRSArIGNhbGMub2Zmc2V0OworfQorCit2b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nIHNlbGZfYWRkciwgdW5zaWduZWQgbG9uZyAqcGFyZW50LAorCQkJICAgdW5zaWduZWQgbG9uZyBmcmFtZV9wb2ludGVyKTsKKworLyoKKyAqIElmIHRoZSBvcHMtPnRyYW1wb2xpbmUgd2FzIG5vdCBhbGxvY2F0ZWQsIHRoZW4gaXQgcHJvYmFibHkKKyAqIGhhcyBhIHN0YXRpYyB0cmFtcG9saW5lIGZ1bmMsIG9yIGlzIHRoZSBmdHJhY2UgY2FsbGVyIGl0c2VsZi4KKyAqLworc3RhdGljIHZvaWQgKnN0YXRpY190cmFtcF9mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJYm9vbCBzYXZlX3JlZ3MgPSByZWMtPmZsYWdzICYgRlRSQUNFX0ZMX1JFR1NfRU47CisJdm9pZCAqcHRyOworCisJaWYgKG9wcyAmJiBvcHMtPnRyYW1wb2xpbmUpIHsKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJCS8qCisJCSAqIFdlIG9ubHkga25vdyBhYm91dCBmdW5jdGlvbiBncmFwaCB0cmFjZXIgc2V0dGluZyBhcyBzdGF0aWMKKwkJICogdHJhbXBvbGluZS4KKwkJICovCisJCWlmIChvcHMtPnRyYW1wb2xpbmUgPT0gRlRSQUNFX0dSQVBIX0FERFIpCisJCQlyZXR1cm4gKHZvaWQgKilwcmVwYXJlX2Z0cmFjZV9yZXR1cm47CisjZW5kaWYKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJb2Zmc2V0ID0gY2FsY190cmFtcG9saW5lX2NhbGxfb2Zmc2V0KHNhdmVfcmVncyk7CisKKwlpZiAoc2F2ZV9yZWdzKQorCQlwdHIgPSAodm9pZCAqKUZUUkFDRV9SRUdTX0FERFIgKyBvZmZzZXQ7CisJZWxzZQorCQlwdHIgPSAodm9pZCAqKUZUUkFDRV9BRERSICsgb2Zmc2V0OworCisJcmV0dXJuIGFkZHJfZnJvbV9jYWxsKHB0cik7Cit9CisKK3ZvaWQgKmFyY2hfZnRyYWNlX3RyYW1wb2xpbmVfZnVuYyhzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCisJLyogSWYgd2UgZGlkbid0IGFsbG9jYXRlIHRoaXMgdHJhbXBvbGluZSwgY29uc2lkZXIgaXQgc3RhdGljICovCisJaWYgKCFvcHMgfHwgIShvcHMtPmZsYWdzICYgRlRSQUNFX09QU19GTF9BTExPQ19UUkFNUCkpCisJCXJldHVybiBzdGF0aWNfdHJhbXBfZnVuYyhvcHMsIHJlYyk7CisKKwlvZmZzZXQgPSBjYWxjX3RyYW1wb2xpbmVfY2FsbF9vZmZzZXQob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTKTsKKwlyZXR1cm4gYWRkcl9mcm9tX2NhbGwoKHZvaWQgKilvcHMtPnRyYW1wb2xpbmUgKyBvZmZzZXQpOworfQorCit2b2lkIGFyY2hfZnRyYWNlX3RyYW1wb2xpbmVfZnJlZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQoreworCWlmICghb3BzIHx8ICEob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfQUxMT0NfVFJBTVApKQorCQlyZXR1cm47CisKKwl0cmFtcF9mcmVlKCh2b2lkICopb3BzLT50cmFtcG9saW5lKTsKKwlvcHMtPnRyYW1wb2xpbmUgPSAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLworCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCitleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfY2FsbCh2b2lkKTsKIAogc3RhdGljIGludCBmdHJhY2VfbW9kX2ptcCh1bnNpZ25lZCBsb25nIGlwLCB2b2lkICpmdW5jKQogewpAQCAtNjk0LDcgKzk2NCw3IEBACiAgKiBIb29rIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgcHVzaCBpdCBpbiB0aGUgc3RhY2sgb2YgcmV0dXJuIGFkZHJzCiAgKiBpbiBjdXJyZW50IHRocmVhZCBpbmZvLgogICovCi12b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyLAordm9pZCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4odW5zaWduZWQgbG9uZyBzZWxmX2FkZHIsIHVuc2lnbmVkIGxvbmcgKnBhcmVudCwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgZnJhbWVfcG9pbnRlcikKIHsKIAl1bnNpZ25lZCBsb25nIG9sZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCA5MjJkMjg1Li42MzA3YTBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC01OSw3OCArNTksNzggQEAKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJOTUkiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5fX25taV9jb3VudCk7Ci0Jc2VxX3ByaW50ZihwLCAiICBOb24tbWFza2FibGUgaW50ZXJydXB0c1xuIik7CisJc2VxX3B1dHMocCwgIiAgTm9uLW1hc2thYmxlIGludGVycnVwdHNcbiIpOwogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkxPQyIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfdGltZXJfaXJxcyk7Ci0Jc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKIAogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlNQVSIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9zcHVyaW91c19jb3VudCk7Ci0Jc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJQTUkiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3BlcmZfaXJxcyk7Ci0Jc2VxX3ByaW50ZihwLCAiICBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW50ZXJydXB0c1xuIik7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiSVdJIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+YXBpY19pcnFfd29ya19pcnFzKTsKLQlzZXFfcHJpbnRmKHAsICIgIElSUSB3b3JrIGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIElSUSB3b3JrIGludGVycnVwdHNcbiIpOwogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlJUUiIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmljcl9yZWFkX3JldHJ5X2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIEFQSUMgSUNSIHJlYWQgcmV0cmllc1xuIik7CisJc2VxX3B1dHMocCwgIiAgQVBJQyBJQ1IgcmVhZCByZXRyaWVzXG4iKTsKICNlbmRpZgogCWlmICh4ODZfcGxhdGZvcm1faXBpX2NhbGxiYWNrKSB7CiAJCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlBMVCIpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+eDg2X3BsYXRmb3JtX2lwaXMpOwotCQlzZXFfcHJpbnRmKHAsICIgIFBsYXRmb3JtIGludGVycnVwdHNcbiIpOworCQlzZXFfcHV0cyhwLCAiICBQbGF0Zm9ybSBpbnRlcnJ1cHRzXG4iKTsKIAl9CiAjaWZkZWYgQ09ORklHX1NNUAogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlJFUyIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9yZXNjaGVkX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIFJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1xuIik7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiQ0FMIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX2NhbGxfY291bnQgLQogCQkJCQlpcnFfc3RhdHMoaiktPmlycV90bGJfY291bnQpOwotCXNlcV9wcmludGYocCwgIiAgRnVuY3Rpb24gY2FsbCBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHV0cyhwLCAiICBGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcbiIpOwogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlRMQiIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV90bGJfY291bnQpOwotCXNlcV9wcmludGYocCwgIiAgVExCIHNob290ZG93bnNcbiIpOworCXNlcV9wdXRzKHAsICIgIFRMQiBzaG9vdGRvd25zXG4iKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfVEhFUk1BTF9WRUNUT1IKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUUk0iKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhlcm1hbF9jb3VudCk7Ci0Jc2VxX3ByaW50ZihwLCAiICBUaGVybWFsIGV2ZW50IGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIFRoZXJtYWwgZXZlbnQgaW50ZXJydXB0c1xuIik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X01DRV9USFJFU0hPTEQKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUSFIiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhyZXNob2xkX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIFRocmVzaG9sZCBBUElDIGludGVycnVwdHNcbiIpOworCXNlcV9wdXRzKHAsICIgIFRocmVzaG9sZCBBUElDIGludGVycnVwdHNcbiIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJNQ0UiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgcGVyX2NwdShtY2VfZXhjZXB0aW9uX2NvdW50LCBqKSk7Ci0Jc2VxX3ByaW50ZihwLCAiICBNYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnNcbiIpOworCXNlcV9wdXRzKHAsICIgIE1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uc1xuIik7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiTUNQIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHBlcl9jcHUobWNlX3BvbGxfY291bnQsIGopKTsKLQlzZXFfcHJpbnRmKHAsICIgIE1hY2hpbmUgY2hlY2sgcG9sbHNcbiIpOworCXNlcV9wdXRzKHAsICIgIE1hY2hpbmUgY2hlY2sgcG9sbHNcbiIpOwogI2VuZGlmCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSFlQRVJWKSB8fCBkZWZpbmVkKENPTkZJR19YRU4pCiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVEhSIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX2h2X2NhbGxiYWNrX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIEh5cGVydmlzb3IgY2FsbGJhY2sgaW50ZXJydXB0c1xuIik7CisJc2VxX3B1dHMocCwgIiAgSHlwZXJ2aXNvciBjYWxsYmFjayBpbnRlcnJ1cHRzXG4iKTsKICNlbmRpZgogCXNlcV9wcmludGYocCwgIiUqczogJTEwdVxuIiwgcHJlYywgIkVSUiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmMKaW5kZXggNjdlNmQxOWUuLmY3ZTNjZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL2NvcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogCQkgKiBub3JtYWxseSB1c2VkLCB3ZSBqdXN0IGdvIHRocm91Z2ggaWYgdGhlcmUgaXMgbm8ga3Byb2JlLgogCQkgKi8KIAkJX19hZGRyID0gcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oYnVmLCBhZGRyKTsKLQkJa2VybmVsX2luc25faW5pdCgmaW5zbiwgKHZvaWQgKilfX2FkZHIpOworCQlrZXJuZWxfaW5zbl9pbml0KCZpbnNuLCAodm9pZCAqKV9fYWRkciwgTUFYX0lOU05fU0laRSk7CiAJCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CiAKIAkJLyoKQEAgLTMzMCw4ICszMzAsMTAgQEAKIHsKIAlzdHJ1Y3QgaW5zbiBpbnNuOwogCWtwcm9iZV9vcGNvZGVfdCBidWZbTUFYX0lOU05fU0laRV07CisJdW5zaWduZWQgbG9uZyByZWNvdmVyZWRfaW5zbiA9CisJCXJlY292ZXJfcHJvYmVkX2luc3RydWN0aW9uKGJ1ZiwgKHVuc2lnbmVkIGxvbmcpc3JjKTsKIAotCWtlcm5lbF9pbnNuX2luaXQoJmluc24sICh2b2lkICopcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oYnVmLCAodW5zaWduZWQgbG9uZylzcmMpKTsKKwlrZXJuZWxfaW5zbl9pbml0KCZpbnNuLCAodm9pZCAqKXJlY292ZXJlZF9pbnNuLCBNQVhfSU5TTl9TSVpFKTsKIAlpbnNuX2dldF9sZW5ndGgoJmluc24pOwogCS8qIEFub3RoZXIgc3Vic3lzdGVtIHB1dHMgYSBicmVha3BvaW50LCBmYWlsZWQgdG8gcmVjb3ZlciAqLwogCWlmIChpbnNuLm9wY29kZS5ieXRlc1swXSA9PSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKQpAQCAtMzQyLDcgKzM0NCw3IEBACiAJaWYgKGluc25fcmlwX3JlbGF0aXZlKCZpbnNuKSkgewogCQlzNjQgbmV3ZGlzcDsKIAkJdTggKmRpc3A7Ci0JCWtlcm5lbF9pbnNuX2luaXQoJmluc24sIGRlc3QpOworCQlrZXJuZWxfaW5zbl9pbml0KCZpbnNuLCBkZXN0LCBpbnNuLmxlbmd0aCk7CiAJCWluc25fZ2V0X2Rpc3BsYWNlbWVudCgmaW5zbik7CiAJCS8qCiAJCSAqIFRoZSBjb3BpZWQgaW5zdHJ1Y3Rpb24gdXNlcyB0aGUgJXJpcC1yZWxhdGl2ZSBhZGRyZXNzaW5nCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9mdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL2Z0cmFjZS5jCmluZGV4IDcxN2IwMmEuLjVmOGYwYjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL2Z0cmFjZS5jCkBAIC0yNyw3ICsyNyw3IEBACiAKIHN0YXRpYyBub2twcm9iZV9pbmxpbmUKIGludCBfX3NraXBfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJICAgICAgc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKKwkJICAgICAgc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiwgdW5zaWduZWQgbG9uZyBvcmlnX2lwKQogewogCS8qCiAJICogRW11bGF0ZSBzaW5nbGVzdGVwIChhbmQgYWxzbyByZWNvdmVyIHJlZ3MtPmlwKQpAQCAtMzksNiArMzksOCBAQAogCQlwLT5wb3N0X2hhbmRsZXIocCwgcmVncywgMCk7CiAJfQogCV9fdGhpc19jcHVfd3JpdGUoY3VycmVudF9rcHJvYmUsIE5VTEwpOworCWlmIChvcmlnX2lwKQorCQlyZWdzLT5pcCA9IG9yaWdfaXA7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQ2LDcgKzQ4LDcgQEAKIAkJICAgIHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJaWYgKGtwcm9iZV9mdHJhY2UocCkpCi0JCXJldHVybiBfX3NraXBfc2luZ2xlc3RlcChwLCByZWdzLCBrY2IpOworCQlyZXR1cm4gX19za2lwX3NpbmdsZXN0ZXAocCwgcmVncywga2NiLCAwKTsKIAllbHNlCiAJCXJldHVybiAwOwogfQpAQCAtNzEsMTMgKzczLDE0IEBACiAJaWYgKGtwcm9iZV9ydW5uaW5nKCkpIHsKIAkJa3Byb2Jlc19pbmNfbm1pc3NlZF9jb3VudChwKTsKIAl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIG9yaWdfaXAgPSByZWdzLT5pcDsKIAkJLyogS3Byb2JlIGhhbmRsZXIgZXhwZWN0cyByZWdzLT5pcCA9IGlwICsgMSBhcyBicmVha3BvaW50IGhpdCAqLwogCQlyZWdzLT5pcCA9IGlwICsgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCk7CiAKIAkJX190aGlzX2NwdV93cml0ZShjdXJyZW50X2twcm9iZSwgcCk7CiAJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfQUNUSVZFOwogCQlpZiAoIXAtPnByZV9oYW5kbGVyIHx8ICFwLT5wcmVfaGFuZGxlcihwLCByZWdzKSkKLQkJCV9fc2tpcF9zaW5nbGVzdGVwKHAsIHJlZ3MsIGtjYik7CisJCQlfX3NraXBfc2luZ2xlc3RlcChwLCByZWdzLCBrY2IsIG9yaWdfaXApOwogCQkvKgogCQkgKiBJZiBwcmVfaGFuZGxlciByZXR1cm5zICEwLCBpdCBzZXRzIHJlZ3MtPmlwIGFuZAogCQkgKiByZXNldHMgY3VycmVudCBrcHJvYmUuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9vcHQuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL29wdC5jCmluZGV4IGYxMzE0ZDAuLjdjNTIzYmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL29wdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL29wdC5jCkBAIC0yNTEsMTMgKzI1MSwxNSBAQAogCS8qIERlY29kZSBpbnN0cnVjdGlvbnMgKi8KIAlhZGRyID0gcGFkZHIgLSBvZmZzZXQ7CiAJd2hpbGUgKGFkZHIgPCBwYWRkciAtIG9mZnNldCArIHNpemUpIHsgLyogRGVjb2RlIHVudGlsIGZ1bmN0aW9uIGVuZCAqLworCQl1bnNpZ25lZCBsb25nIHJlY292ZXJlZF9pbnNuOwogCQlpZiAoc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMoYWRkcikpCiAJCQkvKgogCQkJICogU2luY2Ugc29tZSBmaXh1cCBjb2RlIHdpbGwganVtcHMgaW50byB0aGlzIGZ1bmN0aW9uLAogCQkJICogd2UgY2FuJ3Qgb3B0aW1pemUga3Byb2JlIGluIHRoaXMgZnVuY3Rpb24uCiAJCQkgKi8KIAkJCXJldHVybiAwOwotCQlrZXJuZWxfaW5zbl9pbml0KCZpbnNuLCAodm9pZCAqKXJlY292ZXJfcHJvYmVkX2luc3RydWN0aW9uKGJ1ZiwgYWRkcikpOworCQlyZWNvdmVyZWRfaW5zbiA9IHJlY292ZXJfcHJvYmVkX2luc3RydWN0aW9uKGJ1ZiwgYWRkcik7CisJCWtlcm5lbF9pbnNuX2luaXQoJmluc24sICh2b2lkICopcmVjb3ZlcmVkX2luc24sIE1BWF9JTlNOX1NJWkUpOwogCQlpbnNuX2dldF9sZW5ndGgoJmluc24pOwogCQkvKiBBbm90aGVyIHN1YnN5c3RlbSBwdXRzIGEgYnJlYWtwb2ludCAqLwogCQlpZiAoaW5zbi5vcGNvZGUuYnl0ZXNbMF0gPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tY291bnRfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9tY291bnRfNjQuUwppbmRleCBjNzNhZWNmLi45NGVhMTIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWNvdW50XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL21jb3VudF82NC5TCkBAIC0yMSw0MCArMjEsMTU5IEBACiAjIGRlZmluZSBmdW5jdGlvbl9ob29rCW1jb3VudAogI2VuZGlmCiAKKy8qIEFsbCBjYXNlcyBzYXZlIHRoZSBvcmlnaW5hbCByYnAgKDggYnl0ZXMpICovCisjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKyMgaWZkZWYgQ0NfVVNJTkdfRkVOVFJZCisvKiBTYXZlIHBhcmVudCBhbmQgZnVuY3Rpb24gc3RhY2sgZnJhbWVzIChyaXAgYW5kIHJicCkgKi8KKyMgIGRlZmluZSBNQ09VTlRfRlJBTUVfU0laRQkoOCsxNioyKQorIyBlbHNlCisvKiBTYXZlIGp1c3QgZnVuY3Rpb24gc3RhY2sgZnJhbWUgKHJpcCBhbmQgcmJwKSAqLworIyAgZGVmaW5lIE1DT1VOVF9GUkFNRV9TSVpFCSg4KzE2KQorIyBlbmRpZgorI2Vsc2UKKy8qIE5vIG5lZWQgdG8gc2F2ZSBhIHN0YWNrIGZyYW1lICovCisjIGRlZmluZSBNQ09VTlRfRlJBTUVfU0laRQk4CisjZW5kaWYgLyogQ09ORklHX0ZSQU1FX1BPSU5URVIgKi8KKworLyogU2l6ZSBvZiBzdGFjayB1c2VkIHRvIHNhdmUgbWNvdW50IHJlZ3MgaW4gc2F2ZV9tY291bnRfcmVncyAqLworI2RlZmluZSBNQ09VTlRfUkVHX1NJWkUJCShTUys4ICsgTUNPVU5UX0ZSQU1FX1NJWkUpCisKKy8qCisgKiBnY2MgLXBnIG9wdGlvbiBhZGRzIGEgY2FsbCB0byAnbWNvdW50JyBpbiBtb3N0IGZ1bmN0aW9ucy4KKyAqIFdoZW4gLW1mZW50cnkgaXMgdXNlZCwgdGhlIGNhbGwgaXMgdG8gJ2ZlbnRyeScgYW5kIG5vdCAnbWNvdW50JworICogYW5kIGlzIGRvbmUgYmVmb3JlIHRoZSBmdW5jdGlvbidzIHN0YWNrIGZyYW1lIGlzIHNldCB1cC4KKyAqIFRoZXkgYm90aCByZXF1aXJlIGEgc2V0IG9mIHJlZ3MgdG8gYmUgc2F2ZWQgYmVmb3JlIGNhbGxpbmcKKyAqIGFueSBDIGNvZGUgYW5kIHJlc3RvcmVkIGJlZm9yZSByZXR1cm5pbmcgYmFjayB0byB0aGUgZnVuY3Rpb24uCisgKgorICogT24gYm9vdCB1cCwgYWxsIHRoZXNlIGNhbGxzIGFyZSBjb252ZXJ0ZWQgaW50byBub3BzLiBXaGVuIHRyYWNpbmcKKyAqIGlzIGVuYWJsZWQsIHRoZSBjYWxsIGNhbiBqdW1wIHRvIGVpdGhlciBmdHJhY2VfY2FsbGVyIG9yCisgKiBmdHJhY2VfcmVnc19jYWxsZXIuIENhbGxiYWNrcyAodHJhY2luZyBmdW5jdGlvbnMpIHRoYXQgcmVxdWlyZQorICogZnRyYWNlX3JlZ3NfY2FsbGVyIChsaWtlIGtwcm9iZXMpIG5lZWQgdG8gaGF2ZSBwdF9yZWdzIHBhc3NlZCB0bworICogaXQuIEZvciB0aGlzIHJlYXNvbiwgdGhlIHNpemUgb2YgdGhlIHB0X3JlZ3Mgc3RydWN0dXJlIHdpbGwgYmUKKyAqIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHRoZSByZXF1aXJlZCBtY291bnQgcmVnaXN0ZXJzIHdpbGwKKyAqIGJlIHNhdmVkIGluIHRoZSBsb2NhdGlvbnMgdGhhdCBwdF9yZWdzIGhhcyB0aGVtIGluLgorICovCisKKy8qCisgKiBAYWRkZWQ6IHRoZSBhbW91bnQgb2Ygc3RhY2sgYWRkZWQgYmVmb3JlIGNhbGxpbmcgdGhpcworICoKKyAqIEFmdGVyIHRoaXMgaXMgY2FsbGVkLCB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBjb250YWluOgorICoKKyAqICAlcmRpIC0gaG9sZHMgdGhlIGFkZHJlc3MgdGhhdCBjYWxsZWQgdGhlIHRyYW1wb2xpbmUKKyAqICAlcnNpIC0gaG9sZHMgdGhlIHBhcmVudCBmdW5jdGlvbiAodHJhY2VkIGZ1bmN0aW9uJ3MgcmV0dXJuIGFkZHJlc3MpCisgKiAgJXJkeCAtIGhvbGRzIHRoZSBvcmlnaW5hbCAlcmJwCisgKi8KKy5tYWNybyBzYXZlX21jb3VudF9yZWdzIGFkZGVkPTAKKworCS8qIEFsd2F5cyBzYXZlIHRoZSBvcmlnaW5hbCByYnAgKi8KKwlwdXNocSAlcmJwCisKKyNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgorCS8qCisJICogU3RhY2sgdHJhY2VzIHdpbGwgc3RvcCBhdCB0aGUgZnRyYWNlIHRyYW1wb2xpbmUgaWYgdGhlIGZyYW1lIHBvaW50ZXIKKwkgKiBpcyBub3Qgc2V0IHVwIHByb3Blcmx5LiBJZiBmZW50cnkgaXMgdXNlZCwgd2UgbmVlZCB0byBzYXZlIGEgZnJhbWUKKwkgKiBwb2ludGVyIGZvciB0aGUgcGFyZW50IGFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9uIHRyYWNlZCwgYmVjYXVzZSB0aGUKKwkgKiBmZW50cnkgaXMgY2FsbGVkIGJlZm9yZSB0aGUgc3RhY2sgZnJhbWUgaXMgc2V0IHVwLCB3aGVyZSBhcyBtY291bnQKKwkgKiBpcyBjYWxsZWQgYWZ0ZXJ3YXJkLgorCSAqLworI2lmZGVmIENDX1VTSU5HX0ZFTlRSWQorCS8qIFNhdmUgdGhlIHBhcmVudCBwb2ludGVyIChza2lwIG9yaWcgcmJwIGFuZCBvdXIgcmV0dXJuIGFkZHJlc3MpICovCisJcHVzaHEgXGFkZGVkKzgqMiglcnNwKQorCXB1c2hxICVyYnAKKwltb3ZxICVyc3AsICVyYnAKKwkvKiBTYXZlIHRoZSByZXR1cm4gYWRkcmVzcyAobm93IHNraXAgb3JpZyByYnAsIHJicCBhbmQgcGFyZW50KSAqLworCXB1c2hxIFxhZGRlZCs4KjMoJXJzcCkKKyNlbHNlCisJLyogQ2FuJ3QgYXNzdW1lIHRoYXQgcmlwIGlzIGJlZm9yZSB0aGlzICh1bmxlc3MgYWRkZWQgd2FzIHplcm8pICovCisJcHVzaHEgXGFkZGVkKzgoJXJzcCkKKyNlbmRpZgorCXB1c2hxICVyYnAKKwltb3ZxICVyc3AsICVyYnAKKyNlbmRpZiAvKiBDT05GSUdfRlJBTUVfUE9JTlRFUiAqLworCisJLyoKKwkgKiBXZSBhZGQgZW5vdWdoIHN0YWNrIHRvIHNhdmUgYWxsIHJlZ3MuCisJICovCisJc3VicSAkKE1DT1VOVF9SRUdfU0laRSAtIE1DT1VOVF9GUkFNRV9TSVpFKSwgJXJzcAorCW1vdnEgJXJheCwgUkFYKCVyc3ApCisJbW92cSAlcmN4LCBSQ1goJXJzcCkKKwltb3ZxICVyZHgsIFJEWCglcnNwKQorCW1vdnEgJXJzaSwgUlNJKCVyc3ApCisJbW92cSAlcmRpLCBSREkoJXJzcCkKKwltb3ZxICVyOCwgUjgoJXJzcCkKKwltb3ZxICVyOSwgUjkoJXJzcCkKKwkvKgorCSAqIFNhdmUgdGhlIG9yaWdpbmFsIFJCUC4gRXZlbiB0aG91Z2ggdGhlIG1jb3VudCBBQkkgZG9lcyBub3QKKwkgKiByZXF1aXJlIHRoaXMsIGl0IGhlbHBzIG91dCBjYWxsZXJzLgorCSAqLworCW1vdnEgTUNPVU5UX1JFR19TSVpFLTgoJXJzcCksICVyZHgKKwltb3ZxICVyZHgsIFJCUCglcnNwKQorCisJLyogQ29weSB0aGUgcGFyZW50IGFkZHJlc3MgaW50byAlcnNpIChzZWNvbmQgcGFyYW1ldGVyKSAqLworI2lmZGVmIENDX1VTSU5HX0ZFTlRSWQorCW1vdnEgTUNPVU5UX1JFR19TSVpFKzgrXGFkZGVkKCVyc3ApLCAlcnNpCisjZWxzZQorCS8qICVyZHggY29udGFpbnMgb3JpZ2luYWwgJXJicCAqLworCW1vdnEgOCglcmR4KSwgJXJzaQorI2VuZGlmCisKKwkgLyogTW92ZSBSSVAgdG8gaXRzIHByb3BlciBsb2NhdGlvbiAqLworCW1vdnEgTUNPVU5UX1JFR19TSVpFK1xhZGRlZCglcnNwKSwgJXJkaQorCW1vdnEgJXJkaSwgUklQKCVyc3ApCisKKwkvKgorCSAqIE5vdyAlcmRpICh0aGUgZmlyc3QgcGFyYW1ldGVyKSBoYXMgdGhlIHJldHVybiBhZGRyZXNzIG9mCisJICogd2hlcmUgZnRyYWNlX2NhbGwgcmV0dXJucy4gQnV0IHRoZSBjYWxsYmFja3MgZXhwZWN0IHRoZQorCSAqIGFkZHJlc3Mgb2YgdGhlIGNhbGwgaXRzZWxmLgorCSAqLworCXN1YnEgJE1DT1VOVF9JTlNOX1NJWkUsICVyZGkKKwkuZW5kbQorCisubWFjcm8gcmVzdG9yZV9tY291bnRfcmVncworCW1vdnEgUjkoJXJzcCksICVyOQorCW1vdnEgUjgoJXJzcCksICVyOAorCW1vdnEgUkRJKCVyc3ApLCAlcmRpCisJbW92cSBSU0koJXJzcCksICVyc2kKKwltb3ZxIFJEWCglcnNwKSwgJXJkeAorCW1vdnEgUkNYKCVyc3ApLCAlcmN4CisJbW92cSBSQVgoJXJzcCksICVyYXgKKworCS8qIGZ0cmFjZV9yZWdzX2NhbGxlciBjYW4gbW9kaWZ5ICVyYnAgKi8KKwltb3ZxIFJCUCglcnNwKSwgJXJicAorCisJYWRkcSAkTUNPVU5UX1JFR19TSVpFLCAlcnNwCisKKwkuZW5kbQorCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKIEVOVFJZKGZ1bmN0aW9uX2hvb2spCiAJcmV0cQogRU5EKGZ1bmN0aW9uX2hvb2spCiAKLS8qIHNraXAgaXMgc2V0IGlmIHN0YWNrIGhhcyBiZWVuIGFkanVzdGVkICovCi0ubWFjcm8gZnRyYWNlX2NhbGxlcl9zZXR1cCBza2lwPTAKLQlNQ09VTlRfU0FWRV9GUkFNRSBcc2tpcAorRU5UUlkoZnRyYWNlX2NhbGxlcikKKwkvKiBzYXZlX21jb3VudF9yZWdzIGZpbGxzIGluIGZpcnN0IHR3byBwYXJhbWV0ZXJzICovCisJc2F2ZV9tY291bnRfcmVncwogCitHTE9CQUwoZnRyYWNlX2NhbGxlcl9vcF9wdHIpCiAJLyogTG9hZCB0aGUgZnRyYWNlX29wcyBpbnRvIHRoZSAzcmQgcGFyYW1ldGVyICovCiAJbW92cSBmdW5jdGlvbl90cmFjZV9vcCglcmlwKSwgJXJkeAogCi0JLyogTG9hZCBpcCBpbnRvIHRoZSBmaXJzdCBwYXJhbWV0ZXIgKi8KLQltb3ZxIFJJUCglcnNwKSwgJXJkaQotCXN1YnEgJE1DT1VOVF9JTlNOX1NJWkUsICVyZGkKLQkvKiBMb2FkIHRoZSBwYXJlbnRfaXAgaW50byB0aGUgc2Vjb25kIHBhcmFtZXRlciAqLwotI2lmZGVmIENDX1VTSU5HX0ZFTlRSWQotCW1vdnEgU1MrMTYoJXJzcCksICVyc2kKLSNlbHNlCi0JbW92cSA4KCVyYnApLCAlcnNpCi0jZW5kaWYKLS5lbmRtCi0KLUVOVFJZKGZ0cmFjZV9jYWxsZXIpCi0JZnRyYWNlX2NhbGxlcl9zZXR1cAogCS8qIHJlZ3MgZ28gaW50byA0dGggcGFyYW1ldGVyIChidXQgbWFrZSBpdCBOVUxMKSAqLwogCW1vdnEgJDAsICVyY3gKIAogR0xPQkFMKGZ0cmFjZV9jYWxsKQogCWNhbGwgZnRyYWNlX3N0dWIKIAotCU1DT1VOVF9SRVNUT1JFX0ZSQU1FCi1mdHJhY2VfcmV0dXJuOgorCXJlc3RvcmVfbWNvdW50X3JlZ3MKKworCS8qCisJICogVGhlIGNvcGllZCB0cmFtcG9saW5lIG11c3QgY2FsbCBmdHJhY2VfcmV0dXJuIGFzIGl0CisJICogc3RpbGwgbWF5IG5lZWQgdG8gY2FsbCB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyLgorCSAqLworR0xPQkFMKGZ0cmFjZV9jYWxsZXJfZW5kKQorCitHTE9CQUwoZnRyYWNlX3JldHVybikKIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIEdMT0JBTChmdHJhY2VfZ3JhcGhfY2FsbCkKQEAgLTY2LDExICsxODUsMTYgQEAKIEVORChmdHJhY2VfY2FsbGVyKQogCiBFTlRSWShmdHJhY2VfcmVnc19jYWxsZXIpCi0JLyogU2F2ZSB0aGUgY3VycmVudCBmbGFncyBiZWZvcmUgY29tcGFyZSAoaW4gU1MgbG9jYXRpb24pKi8KKwkvKiBTYXZlIHRoZSBjdXJyZW50IGZsYWdzIGJlZm9yZSBhbnkgb3BlcmF0aW9ucyB0aGF0IGNhbiBjaGFuZ2UgdGhlbSAqLwogCXB1c2hmcQogCi0JLyogc2tpcD04IHRvIHNraXAgZmxhZ3Mgc2F2ZWQgaW4gU1MgKi8KLQlmdHJhY2VfY2FsbGVyX3NldHVwIDgKKwkvKiBhZGRlZCA4IGJ5dGVzIHRvIHNhdmUgZmxhZ3MgKi8KKwlzYXZlX21jb3VudF9yZWdzIDgKKwkvKiBzYXZlX21jb3VudF9yZWdzIGZpbGxzIGluIGZpcnN0IHR3byBwYXJhbWV0ZXJzICovCisKK0dMT0JBTChmdHJhY2VfcmVnc19jYWxsZXJfb3BfcHRyKQorCS8qIExvYWQgdGhlIGZ0cmFjZV9vcHMgaW50byB0aGUgM3JkIHBhcmFtZXRlciAqLworCW1vdnEgZnVuY3Rpb25fdHJhY2Vfb3AoJXJpcCksICVyZHgKIAogCS8qIFNhdmUgdGhlIHJlc3Qgb2YgcHRfcmVncyAqLwogCW1vdnEgJXIxNSwgUjE1KCVyc3ApCkBAIC03OSwxOCArMjAzLDE3IEBACiAJbW92cSAlcjEyLCBSMTIoJXJzcCkKIAltb3ZxICVyMTEsIFIxMSglcnNwKQogCW1vdnEgJXIxMCwgUjEwKCVyc3ApCi0JbW92cSAlcmJwLCBSQlAoJXJzcCkKIAltb3ZxICVyYngsIFJCWCglcnNwKQogCS8qIENvcHkgc2F2ZWQgZmxhZ3MgKi8KLQltb3ZxIFNTKCVyc3ApLCAlcmN4CisJbW92cSBNQ09VTlRfUkVHX1NJWkUoJXJzcCksICVyY3gKIAltb3ZxICVyY3gsIEVGTEFHUyglcnNwKQogCS8qIEtlcm5lbCBzZWdtZW50cyAqLwogCW1vdnEgJF9fS0VSTkVMX0RTLCAlcmN4CiAJbW92cSAlcmN4LCBTUyglcnNwKQogCW1vdnEgJF9fS0VSTkVMX0NTLCAlcmN4CiAJbW92cSAlcmN4LCBDUyglcnNwKQotCS8qIFN0YWNrIC0gc2tpcHBpbmcgcmV0dXJuIGFkZHJlc3MgKi8KLQlsZWFxIFNTKzE2KCVyc3ApLCAlcmN4CisJLyogU3RhY2sgLSBza2lwcGluZyByZXR1cm4gYWRkcmVzcyBhbmQgZmxhZ3MgKi8KKwlsZWFxIE1DT1VOVF9SRUdfU0laRSs4KjIoJXJzcCksICVyY3gKIAltb3ZxICVyY3gsIFJTUCglcnNwKQogCiAJLyogcmVncyBnbyBpbnRvIDR0aCBwYXJhbWV0ZXIgKi8KQEAgLTEwMSwxMSArMjI0LDExIEBACiAKIAkvKiBDb3B5IGZsYWdzIGJhY2sgdG8gU1MsIHRvIHJlc3RvcmUgdGhlbSAqLwogCW1vdnEgRUZMQUdTKCVyc3ApLCAlcmF4Ci0JbW92cSAlcmF4LCBTUyglcnNwKQorCW1vdnEgJXJheCwgTUNPVU5UX1JFR19TSVpFKCVyc3ApCiAKIAkvKiBIYW5kbGVycyBjYW4gY2hhbmdlIHRoZSBSSVAgKi8KIAltb3ZxIFJJUCglcnNwKSwgJXJheAotCW1vdnEgJXJheCwgU1MrOCglcnNwKQorCW1vdnEgJXJheCwgTUNPVU5UX1JFR19TSVpFKzgoJXJzcCkKIAogCS8qIHJlc3RvcmUgdGhlIHJlc3Qgb2YgcHRfcmVncyAqLwogCW1vdnEgUjE1KCVyc3ApLCAlcjE1CkBAIC0xMTMsMTkgKzIzNiwyMiBAQAogCW1vdnEgUjEzKCVyc3ApLCAlcjEzCiAJbW92cSBSMTIoJXJzcCksICVyMTIKIAltb3ZxIFIxMCglcnNwKSwgJXIxMAotCW1vdnEgUkJQKCVyc3ApLCAlcmJwCiAJbW92cSBSQlgoJXJzcCksICVyYngKIAotCS8qIHNraXA9OCB0byBza2lwIGZsYWdzIHNhdmVkIGluIFNTICovCi0JTUNPVU5UX1JFU1RPUkVfRlJBTUUgOAorCXJlc3RvcmVfbWNvdW50X3JlZ3MKIAogCS8qIFJlc3RvcmUgZmxhZ3MgKi8KIAlwb3BmcQogCi0Jam1wIGZ0cmFjZV9yZXR1cm4KKwkvKgorCSAqIEFzIHRoaXMgam1wIHRvIGZ0cmFjZV9yZXR1cm4gY2FuIGJlIGEgc2hvcnQganVtcAorCSAqIGl0IG11c3Qgbm90IGJlIGNvcGllZCBpbnRvIHRoZSB0cmFtcG9saW5lLgorCSAqIFRoZSB0cmFtcG9saW5lIHdpbGwgYWRkIHRoZSBjb2RlIHRvIGp1bXAKKwkgKiB0byB0aGUgcmV0dXJuLgorCSAqLworR0xPQkFMKGZ0cmFjZV9yZWdzX2NhbGxlcl9lbmQpCiAKLQlwb3BmcQotCWptcCAgZnRyYWNlX3N0dWIKKwlqbXAgZnRyYWNlX3JldHVybgogCiBFTkQoZnRyYWNlX3JlZ3NfY2FsbGVyKQogCkBAIC0xMzYsNiArMjYyLDcgQEAKIAljbXBxICRmdHJhY2Vfc3R1YiwgZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCiAJam56IHRyYWNlCiAKK2ZncmFwaF90cmFjZToKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJY21wcSAkZnRyYWNlX3N0dWIsIGZ0cmFjZV9ncmFwaF9yZXR1cm4KIAlqbnogZnRyYWNlX2dyYXBoX2NhbGxlcgpAQCAtMTQ4LDQyICsyNzUsMzUgQEAKIAlyZXRxCiAKIHRyYWNlOgotCU1DT1VOVF9TQVZFX0ZSQU1FCi0KLQltb3ZxIFJJUCglcnNwKSwgJXJkaQotI2lmZGVmIENDX1VTSU5HX0ZFTlRSWQotCW1vdnEgU1MrMTYoJXJzcCksICVyc2kKLSNlbHNlCi0JbW92cSA4KCVyYnApLCAlcnNpCi0jZW5kaWYKLQlzdWJxICRNQ09VTlRfSU5TTl9TSVpFLCAlcmRpCisJLyogc2F2ZV9tY291bnRfcmVncyBmaWxscyBpbiBmaXJzdCB0d28gcGFyYW1ldGVycyAqLworCXNhdmVfbWNvdW50X3JlZ3MKIAogCWNhbGwgICAqZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCiAKLQlNQ09VTlRfUkVTVE9SRV9GUkFNRQorCXJlc3RvcmVfbWNvdW50X3JlZ3MKIAotCWptcCBmdHJhY2Vfc3R1YgorCWptcCBmZ3JhcGhfdHJhY2UKIEVORChmdW5jdGlvbl9ob29rKQogI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIEVOVFJZKGZ0cmFjZV9ncmFwaF9jYWxsZXIpCi0JTUNPVU5UX1NBVkVfRlJBTUUKKwkvKiBTYXZlcyByYnAgaW50byAlcmR4IGFuZCBmaWxscyBmaXJzdCBwYXJhbWV0ZXIgICovCisJc2F2ZV9tY291bnRfcmVncwogCiAjaWZkZWYgQ0NfVVNJTkdfRkVOVFJZCi0JbGVhcSBTUysxNiglcnNwKSwgJXJkaQorCWxlYXEgTUNPVU5UX1JFR19TSVpFKzgoJXJzcCksICVyc2kKIAltb3ZxICQwLCAlcmR4CS8qIE5vIGZyYW1lcG9pbnRlcnMgbmVlZGVkICovCiAjZWxzZQotCWxlYXEgOCglcmJwKSwgJXJkaQotCW1vdnEgKCVyYnApLCAlcmR4CisJLyogU2F2ZSBhZGRyZXNzIG9mIHRoZSByZXR1cm4gYWRkcmVzcyBvZiB0cmFjZWQgZnVuY3Rpb24gKi8KKwlsZWFxIDgoJXJkeCksICVyc2kKKwkvKiBmdHJhY2UgZG9lcyBzYW5pdHkgY2hlY2tzIGFnYWluc3QgZnJhbWUgcG9pbnRlcnMgKi8KKwltb3ZxICglcmR4KSwgJXJkeAogI2VuZGlmCi0JbW92cSBSSVAoJXJzcCksICVyc2kKLQlzdWJxICRNQ09VTlRfSU5TTl9TSVpFLCAlcnNpCi0KIAljYWxsCXByZXBhcmVfZnRyYWNlX3JldHVybgogCi0JTUNPVU5UX1JFU1RPUkVfRlJBTUUKKwlyZXN0b3JlX21jb3VudF9yZWdzCiAKIAlyZXRxCiBFTkQoZnRyYWNlX2dyYXBoX2NhbGxlcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwppbmRleCBjOTYwM2FjLi4xMTNlNzA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21zci5jCkBAIC0yMiw2ICsyMiw4IEBACiAgKiBhbiBTTVAgYm94IHdpbGwgZGlyZWN0IHRoZSBhY2Nlc3MgdG8gQ1BVICVkLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTUwLDExICs1MiwxMSBAQAogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaCAob3JpZykgewotCWNhc2UgMDoKKwljYXNlIFNFRUtfU0VUOgogCQlmaWxlLT5mX3BvcyA9IG9mZnNldDsKIAkJcmV0ID0gZmlsZS0+Zl9wb3M7CiAJCWJyZWFrOwotCWNhc2UgMToKKwljYXNlIFNFRUtfQ1VSOgogCQlmaWxlLT5mX3BvcyArPSBvZmZzZXQ7CiAJCXJldCA9IGZpbGUtPmZfcG9zOwogCQlicmVhazsKQEAgLTIwNiw3ICsyMDgsNyBAQAogCiAJZGV2ID0gZGV2aWNlX2NyZWF0ZShtc3JfY2xhc3MsIE5VTEwsIE1LREVWKE1TUl9NQUpPUiwgY3B1KSwgTlVMTCwKIAkJCSAgICAibXNyJWQiLCBjcHUpOwotCXJldHVybiBJU19FUlIoZGV2KSA/IFBUUl9FUlIoZGV2KSA6IDA7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBtc3JfZGV2aWNlX2Rlc3Ryb3koaW50IGNwdSkKQEAgLTI0OCw4ICsyNTAsNyBAQAogCWkgPSAwOwogCiAJaWYgKF9fcmVnaXN0ZXJfY2hyZGV2KE1TUl9NQUpPUiwgMCwgTlJfQ1BVUywgImNwdS9tc3IiLCAmbXNyX2ZvcHMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXNyOiB1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBtc3JcbiIsCi0JCSAgICAgICBNU1JfTUFKT1IpOworCQlwcl9lcnIoInVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIG1zclxuIiwgTVNSX01BSk9SKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGFiMDhhYTIuLmFiNDczNGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC05NjAsNiArOTYwLDggQEAKIAlpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpIF9lZGF0YTsKIAlpbml0X21tLmJyayA9IF9icmtfZW5kOwogCisJbXB4X21tX2luaXQoJmluaXRfbW0pOworCiAJY29kZV9yZXNvdXJjZS5zdGFydCA9IF9fcGFfc3ltYm9sKF90ZXh0KTsKIAljb2RlX3Jlc291cmNlLmVuZCA9IF9fcGFfc3ltYm9sKF9ldGV4dCktMTsKIAlkYXRhX3Jlc291cmNlLnN0YXJ0ID0gX19wYV9zeW1ib2woX2V0ZXh0KTsKQEAgLTExOTAsOSArMTE5Miw3IEBACiAKIAl0Ym9vdF9wcm9iZSgpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogCW1hcF92c3lzY2FsbCgpOwotI2VuZGlmCiAKIAlnZW5lcmljX2FwaWNfcHJvYmUoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCmluZGV4IDVjZGZmMDMuLmU0ZmNiODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgQk9PVF9QRVJDUFVfT0ZGU0VUIDAKICNlbmRpZgogCi1ERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpID0gQk9PVF9QRVJDUFVfT0ZGU0VUOworREVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFkodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKSA9IEJPT1RfUEVSQ1BVX09GRlNFVDsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTCh0aGlzX2NwdV9vZmYpOwogCiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDY2OGQ4ZjIuLjdhOGY1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtOTksNyArOTksNyBAQAogREVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFkoY3B1bWFza192YXJfdCwgY3B1X2xsY19zaGFyZWRfbWFwKTsKIAogLyogUGVyIENQVSBib2dvbWlwcyBhbmQgb3RoZXIgcGFyYW1ldGVycyAqLwotREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CitERUZJTkVfUEVSX0NQVV9SRUFEX01PU1RMWShzdHJ1Y3QgY3B1aW5mb194ODYsIGNwdV9pbmZvKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfaW5mbyk7CiAKIGF0b21pY190IGluaXRfZGVhc3NlcnRlZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNmYi5jIGIvYXJjaC94ODYva2VybmVsL3N5c2ZiLmMKaW5kZXggMTkzZWMyYy4uMTYwMzg2ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c2ZiLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3N5c2ZiLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogCXBkID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsIG5hbWUsIDAsCiAJCQkJCSAgICAgICBOVUxMLCAwLCBzaSwgc2l6ZW9mKCpzaSkpOwotCXJldHVybiBJU19FUlIocGQpID8gUFRSX0VSUihwZCkgOiAwOworCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocGQpOwogfQogCiAvKiBtdXN0IGV4ZWN1dGUgYWZ0ZXIgUENJIHN1YnN5c3RlbSBmb3IgRUZJIHF1aXJrcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c2ZiX3NpbXBsZWZiLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzZmJfc2ltcGxlZmIuYwppbmRleCA4NjE3OWQ0Li43NjRhMjlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzZmJfc2ltcGxlZmIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzZmJfc2ltcGxlZmIuYwpAQCAtODgsOCArODgsNSBAQAogCiAJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgInNpbXBsZS1mcmFtZWJ1ZmZlciIsIDAsCiAJCQkJCSAgICAgICAmcmVzLCAxLCBtb2RlLCBzaXplb2YoKm1vZGUpKTsKLQlpZiAoSVNfRVJSKHBkKSkKLQkJcmV0dXJuIFBUUl9FUlIocGQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jIGIvYXJjaC94ODYva2VybmVsL3RpbWUuYwppbmRleCAwZmEyOTYwLi4yNWFkYzBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotX192aXNpYmxlIERFRklORV9WVkFSKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcsIGppZmZpZXMpID0gSU5JVElBTF9KSUZGSUVTOworX192aXNpYmxlIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgamlmZmllcyBfX2NhY2hlbGluZV9hbGlnbmVkID0gSU5JVElBTF9KSUZGSUVTOwogI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggZGU4MDFmMi4uYTlhZTIwNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hfdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vbXB4Lmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAjaW5jbHVkZSA8YXNtL3g4Nl9pbml0Lmg+CkBAIC0yMjgsNyArMjI5LDYgQEAKIAogRE9fRVJST1IoWDg2X1RSQVBfREUsICAgICBTSUdGUEUsICAiZGl2aWRlIGVycm9yIiwJCWRpdmlkZV9lcnJvcikKIERPX0VSUk9SKFg4Nl9UUkFQX09GLCAgICAgU0lHU0VHViwgIm92ZXJmbG93IiwJCQlvdmVyZmxvdykKLURPX0VSUk9SKFg4Nl9UUkFQX0JSLCAgICAgU0lHU0VHViwgImJvdW5kcyIsCQkJYm91bmRzKQogRE9fRVJST1IoWDg2X1RSQVBfVUQsICAgICBTSUdJTEwsICAiaW52YWxpZCBvcGNvZGUiLAkJaW52YWxpZF9vcCkKIERPX0VSUk9SKFg4Nl9UUkFQX09MRF9NRiwgU0lHRlBFLCAgImNvcHJvY2Vzc29yIHNlZ21lbnQgb3ZlcnJ1biIsY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKQogRE9fRVJST1IoWDg2X1RSQVBfVFMsICAgICBTSUdTRUdWLCAiaW52YWxpZCBUU1MiLAkJaW52YWxpZF9UU1MpCkBAIC0yODYsNiArMjg2LDg5IEBACiB9CiAjZW5kaWYKIAorZG90cmFwbGlua2FnZSB2b2lkIGRvX2JvdW5kcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlzdHJ1Y3QgeHNhdmVfc3RydWN0ICp4c2F2ZV9idWY7CisJZW51bSBjdHhfc3RhdGUgcHJldl9zdGF0ZTsKKwlzdHJ1Y3QgYm5kY3NyICpibmRjc3I7CisJc2lnaW5mb190ICppbmZvOworCisJcHJldl9zdGF0ZSA9IGV4Y2VwdGlvbl9lbnRlcigpOworCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCAiYm91bmRzIiwgcmVncywgZXJyb3JfY29kZSwKKwkJCVg4Nl9UUkFQX0JSLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJZ290byBleGl0OworCWNvbmRpdGlvbmFsX3N0aShyZWdzKTsKKworCWlmICghdXNlcl9tb2RlKHJlZ3MpKQorCQlkaWUoImJvdW5kcyIsIHJlZ3MsIGVycm9yX2NvZGUpOworCisJaWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01QWCkpIHsKKwkJLyogVGhlIGV4Y2VwdGlvbiBpcyBub3QgZnJvbSBJbnRlbCBNUFggKi8KKwkJZ290byBleGl0X3RyYXA7CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIGxvb2sgYXQgQk5EU1RBVFVTIHRvIHJlc29sdmUgdGhpcyBleGNlcHRpb24uCisJICogSXQgaXMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUsIHRob3VnaCwgc28gd2UgbmVlZCB0bworCSAqIGRvIGFuIHhzYXZlIGFuZCB0aGVuIHB1bGwgaXQgb3V0IG9mIHRoZSB4c2F2ZSBidWZmZXIuCisJICovCisJZnB1X3NhdmVfaW5pdCgmdHNrLT50aHJlYWQuZnB1KTsKKwl4c2F2ZV9idWYgPSAmKHRzay0+dGhyZWFkLmZwdS5zdGF0ZS0+eHNhdmUpOworCWJuZGNzciA9IGdldF94c2F2ZV9hZGRyKHhzYXZlX2J1ZiwgWFNUQVRFX0JORENTUik7CisJaWYgKCFibmRjc3IpCisJCWdvdG8gZXhpdF90cmFwOworCisJLyoKKwkgKiBUaGUgZXJyb3IgY29kZSBmaWVsZCBvZiB0aGUgQk5EU1RBVFVTIHJlZ2lzdGVyIGNvbW11bmljYXRlcyBzdGF0dXMKKwkgKiBpbmZvcm1hdGlvbiBvZiBhIGJvdW5kIHJhbmdlIGV4Y2VwdGlvbiAjQlIgb3Igb3BlcmF0aW9uIGludm9sdmluZworCSAqIGJvdW5kIGRpcmVjdG9yeS4KKwkgKi8KKwlzd2l0Y2ggKGJuZGNzci0+Ym5kc3RhdHVzICYgTVBYX0JORFNUQV9FUlJPUl9DT0RFKSB7CisJY2FzZSAyOgkvKiBCb3VuZCBkaXJlY3RvcnkgaGFzIGludmFsaWQgZW50cnkuICovCisJCWlmIChtcHhfaGFuZGxlX2JkX2ZhdWx0KHhzYXZlX2J1ZikpCisJCQlnb3RvIGV4aXRfdHJhcDsKKwkJYnJlYWs7IC8qIFN1Y2Nlc3MsIGl0IHdhcyBoYW5kbGVkICovCisJY2FzZSAxOiAvKiBCb3VuZCB2aW9sYXRpb24uICovCisJCWluZm8gPSBtcHhfZ2VuZXJhdGVfc2lnaW5mbyhyZWdzLCB4c2F2ZV9idWYpOworCQlpZiAoUFRSX0VSUihpbmZvKSkgeworCQkJLyoKKwkJCSAqIFdlIGZhaWxlZCB0byBkZWNvZGUgdGhlIE1QWCBpbnN0cnVjdGlvbi4gIEFjdCBhcyBpZgorCQkJICogdGhlIGV4Y2VwdGlvbiB3YXMgbm90IGNhdXNlZCBieSBNUFguCisJCQkgKi8KKwkJCWdvdG8gZXhpdF90cmFwOworCQl9CisJCS8qCisJCSAqIFN1Y2Nlc3MsIHdlIGRlY29kZWQgdGhlIGluc3RydWN0aW9uIGFuZCByZXRyaWV2ZWQKKwkJICogYW4gJ2luZm8nIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3MgYmVpbmcgYWNjZXNzZWQKKwkJICogd2hpY2ggY2F1c2VkIHRoZSBleGNlcHRpb24uICBUaGlzIGluZm9ybWF0aW9uCisJCSAqIGFsbG93cyBhbmQgYXBwbGljYXRpb24gdG8gcG9zc2libHkgaGFuZGxlIHRoZQorCQkgKiAjQlIgZXhjZXB0aW9uIGl0c2VsZi4KKwkJICovCisJCWRvX3RyYXAoWDg2X1RSQVBfQlIsIFNJR1NFR1YsICJib3VuZHMiLCByZWdzLCBlcnJvcl9jb2RlLCBpbmZvKTsKKwkJa2ZyZWUoaW5mbyk7CisJCWJyZWFrOworCWNhc2UgMDogLyogTm8gZXhjZXB0aW9uIGNhdXNlZCBieSBJbnRlbCBNUFggb3BlcmF0aW9ucy4gKi8KKwkJZ290byBleGl0X3RyYXA7CisJZGVmYXVsdDoKKwkJZGllKCJib3VuZHMiLCByZWdzLCBlcnJvcl9jb2RlKTsKKwl9CisKK2V4aXQ6CisJZXhjZXB0aW9uX2V4aXQocHJldl9zdGF0ZSk7CisJcmV0dXJuOworZXhpdF90cmFwOgorCS8qCisJICogVGhpcyBwYXRoIG91dCBpcyBmb3IgYWxsIHRoZSBjYXNlcyB3aGVyZSB3ZSBjb3VsZCBub3QKKwkgKiBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBpbiBzb21lIHdheSAobGlrZSBhbGxvY2F0aW5nIGEKKwkgKiB0YWJsZSBvciB0ZWxsaW5nIHVzZXJzcGFjZSBhYm91dCBpdC4gIFdlIHdpbGwgYWxzbyBlbmQKKwkgKiB1cCBoZXJlIGlmIHRoZSBrZXJuZWwgaGFzIE1QWCB0dXJuZWQgb2ZmIGF0IGNvbXBpbGUKKwkgKiB0aW1lLi4KKwkgKi8KKwlkb190cmFwKFg4Nl9UUkFQX0JSLCBTSUdTRUdWLCAiYm91bmRzIiwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7CisJZXhjZXB0aW9uX2V4aXQocHJldl9zdGF0ZSk7Cit9CisKIGRvdHJhcGxpbmthZ2Ugdm9pZAogZG9fZ2VuZXJhbF9wcm90ZWN0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CkBAIC0zODcsNyArNDcwLDcgQEAKICAqIGZvciBzY2hlZHVsaW5nIG9yIHNpZ25hbCBoYW5kbGluZy4gVGhlIGFjdHVhbCBzdGFjayBzd2l0Y2ggaXMgZG9uZSBpbgogICogZW50cnkuUwogICovCi1hc21saW5rYWdlIF9fdmlzaWJsZSBzdHJ1Y3QgcHRfcmVncyAqc3luY19yZWdzKHN0cnVjdCBwdF9yZWdzICplcmVncykKK2FzbWxpbmthZ2UgX192aXNpYmxlIG5vdHJhY2Ugc3RydWN0IHB0X3JlZ3MgKnN5bmNfcmVncyhzdHJ1Y3QgcHRfcmVncyAqZXJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBlcmVnczsKIAkvKiBEaWQgYWxyZWFkeSBzeW5jICovCkBAIC00MTMsNyArNDk2LDcgQEAKIAlzdHJ1Y3QgcHRfcmVncyByZWdzOwogfTsKIAotYXNtbGlua2FnZSBfX3Zpc2libGUKK2FzbWxpbmthZ2UgX192aXNpYmxlIG5vdHJhY2UKIHN0cnVjdCBiYWRfaXJldF9zdGFjayAqZml4dXBfYmFkX2lyZXQoc3RydWN0IGJhZF9pcmV0X3N0YWNrICpzKQogewogCS8qCkBAIC00MzYsNiArNTE5LDcgQEAKIAlCVUdfT04oIXVzZXJfbW9kZV92bSgmbmV3X3N0YWNrLT5yZWdzKSk7CiAJcmV0dXJuIG5ld19zdGFjazsKIH0KK05PS1BST0JFX1NZTUJPTChmaXh1cF9iYWRfaXJldCk7CiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91cHJvYmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXByb2Jlcy5jCmluZGV4IDVkMWNiZmUuLjhiOTZhOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC91cHJvYmVzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Vwcm9iZXMuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiB7CiAJdTMyIHZvbGF0aWxlICpnb29kX2luc25zOwogCi0JaW5zbl9pbml0KGluc24sIGF1cHJvYmUtPmluc24sIHg4Nl82NCk7CisJaW5zbl9pbml0KGluc24sIGF1cHJvYmUtPmluc24sIHNpemVvZihhdXByb2JlLT5pbnNuKSwgeDg2XzY0KTsKIAkvKiBoYXMgdGhlIHNpZGUtZWZmZWN0IG9mIHByb2Nlc3NpbmcgdGhlIGVudGlyZSBpbnN0cnVjdGlvbiAqLwogCWluc25fZ2V0X2xlbmd0aChpbnNuKTsKIAlpZiAoV0FSTl9PTl9PTkNFKCFpbnNuX2NvbXBsZXRlKGluc24pKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNDllZGYyZC4uMDBiZjMwMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE4Niw2ICsxODYsOCBAQAogCSAqIHN0YXJ0IGFub3RoZXIgc2VnbWVudCAtIGluaXQuCiAJICovCiAJUEVSQ1BVX1ZBRERSKElOVEVSTk9ERV9DQUNIRV9CWVRFUywgMCwgOnBlcmNwdSkKKwlBU1NFUlQoU0laRU9GKC5kYXRhLi5wZXJjcHUpIDwgQ09ORklHX1BIWVNJQ0FMX1NUQVJULAorCSAgICAgICAicGVyLUNQVSBkYXRhIHRvbyBsYXJnZSAtIGluY3JlYXNlIENPTkZJR19QSFlTSUNBTF9TVEFSVCIpCiAjZW5kaWYKIAogCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF82NC5jIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKaW5kZXggOTU3Nzc5Zi4uMmRjYzZmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKQEAgLTEsNTkgKzEsNDMgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBBbmR5IEx1dG9taXJza2kgPGx1dG9AYW1hY2FwaXRhbC5uZXQ+CisgKgorICogQmFzZWQgb24gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHdoaWNoIGlzOgogICogIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWEgQXJjYW5nZWxpIDxhbmRyZWFAc3VzZS5kZT4gU3VTRQogICogIENvcHlyaWdodCAyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KICAqCi0gKiAgWyBOT1RFOiB0aGlzIG1lY2hhbmlzbSBpcyBub3cgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgdkRTTy4gXQorICogIFBhcnRzIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGhhdmUgYmVlbiBtb3ZlZCB0byBhcmNoL3g4Ni92ZHNvL3ZtYS5jCiAgKgotICogIFRoYW5rcyB0byBocGFAdHJhbnNtZXRhLmNvbSBmb3Igc29tZSB1c2VmdWwgaGludC4KLSAqICBTcGVjaWFsIHRoYW5rcyB0byBJbmdvIE1vbG5hciBmb3IgaGlzIGVhcmx5IGV4cGVyaWVuY2Ugd2l0aAotICogIGEgZGlmZmVyZW50IHZzeXNjYWxsIGltcGxlbWVudGF0aW9uIGZvciBMaW51eC9JQTMyIGFuZCBmb3IgdGhlIG5hbWUuCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB2c3lzY2FsbCBlbXVsYXRpb24uICB2c3lzY2FsbHMgYXJlIGEgbGVnYWN5IEFCSToKKyAqIFVzZXJzcGFjZSBjYW4gcmVxdWVzdCBjZXJ0YWluIGtlcm5lbCBzZXJ2aWNlcyBieSBjYWxsaW5nIGZpeGVkCisgKiBhZGRyZXNzZXMuICBUaGlzIGNvbmNlcHQgaXMgcHJvYmxlbWF0aWM6CiAgKgotICogIHZzeXNjYWxsIDEgaXMgbG9jYXRlZCBhdCAtMTBNYnl0ZSwgdnN5c2NhbGwgMiBpcyBsb2NhdGVkCi0gKiAgYXQgdmlydHVhbCBhZGRyZXNzIC0xME1ieXRlKzEwMjRieXRlcyBldGMuLi4gVGhlcmUgYXJlIGF0IG1heCA0Ci0gKiAgdnN5c2NhbGxzLiBPbmUgdnN5c2NhbGwgY2FuIHJlc2VydmUgbW9yZSB0aGFuIDEgc2xvdCB0byBhdm9pZAotICogIGp1bXBpbmcgb3V0IG9mIGxpbmUgaWYgbmVjZXNzYXJ5LiBXZSBjYW5ub3QgYWRkIG1vcmUgd2l0aCB0aGlzCi0gKiAgbWVjaGFuaXNtIGJlY2F1c2Ugb2xkZXIga2VybmVscyB3b24ndCByZXR1cm4gLUVOT1NZUy4KKyAqIC0gSXQgaW50ZXJmZXJlcyB3aXRoIEFTTFIuCisgKiAtIEl0J3MgYXdrd2FyZCB0byB3cml0ZSBjb2RlIHRoYXQgbGl2ZXMgaW4ga2VybmVsIGFkZHJlc3NlcyBidXQgaXMKKyAqICAgY2FsbGFibGUgYnkgdXNlcnNwYWNlIGF0IGZpeGVkIGFkZHJlc3Nlcy4KKyAqIC0gVGhlIHdob2xlIGNvbmNlcHQgaXMgaW1wb3NzaWJsZSBmb3IgMzItYml0IGNvbXBhdCB1c2Vyc3BhY2UuCisgKiAtIFVNTCBjYW5ub3QgZWFzaWx5IHZpcnR1YWxpemUgYSB2c3lzY2FsbC4KICAqCi0gKiAgTm90ZTogdGhlIGNvbmNlcHQgY2xhc2hlcyB3aXRoIHVzZXIgbW9kZSBsaW51eC4gIFVNTCB1c2VycyBzaG91bGQKLSAqICB1c2UgdGhlIHZEU08uCisgKiBBcyBvZiBtaWQtMjAxNCwgSSBiZWxpZXZlIHRoYXQgdGhlcmUgaXMgbm8gbmV3IHVzZXJzcGFjZSBjb2RlIHRoYXQKKyAqIHdpbGwgdXNlIGEgdnN5c2NhbGwgaWYgdGhlIHZEU08gaXMgcHJlc2VudC4gIEkgaG9wZSB0aGF0IHRoZXJlIHdpbGwKKyAqIHNvb24gYmUgbm8gbmV3IHVzZXJzcGFjZSBjb2RlIHRoYXQgd2lsbCBldmVyIHVzZSBhIHZzeXNjYWxsLgorICoKKyAqIFRoZSBjb2RlIGluIHRoaXMgZmlsZSBlbXVsYXRlcyB2c3lzY2FsbHMgd2hlbiBub3RpZmllZCBvZiBhIHBhZ2UKKyAqIGZhdWx0IHRvIGEgdnN5c2NhbGwgYWRkcmVzcy4KICAqLwogCi0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10Ci0KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVrZWVwZXJfaW50ZXJuYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9nZXRjcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAKICNpbmNsdWRlIDxhc20vdnN5c2NhbGwuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9jb21wYXQuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS90b3BvbG9neS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlICJ2c3lzY2FsbF90cmFjZS5oIgogCi1ERUZJTkVfVlZBUihpbnQsIHZnZXRjcHVfbW9kZSk7Ci0KIHN0YXRpYyBlbnVtIHsgRU1VTEFURSwgTkFUSVZFLCBOT05FIH0gdnN5c2NhbGxfbW9kZSA9IEVNVUxBVEU7CiAKIHN0YXRpYyBpbnQgX19pbml0IHZzeXNjYWxsX3NldHVwKGNoYXIgKnN0cikKQEAgLTIyMiw2ICsyMDYsNyBAQAogCQkJCSAgInNlY2NvbXAgdHJpZWQgdG8gY2hhbmdlIHN5c2NhbGwgbnIgb3IgaXAiKTsKIAkJZG9fZXhpdChTSUdTWVMpOwogCX0KKwlyZWdzLT5vcmlnX2F4ID0gLTE7CiAJaWYgKHRtcCkKIAkJZ290byBkb19yZXQ7ICAvKiBza2lwIHJlcXVlc3RlZCAqLwogCkBAIC0yODQsNDYgKzI2OSw1NCBAQAogfQogCiAvKgotICogQXNzdW1lIF9faW5pdGNhbGwgZXhlY3V0ZXMgYmVmb3JlIGFsbCB1c2VyIHNwYWNlLiBIb3BlZnVsbHkga21vZAotICogZG9lc24ndCB2aW9sYXRlIHRoYXQuIFdlJ2xsIGZpbmQgb3V0IGlmIGl0IGRvZXMuCisgKiBBIHBzZXVkbyBWTUEgdG8gYWxsb3cgcHRyYWNlIGFjY2VzcyBmb3IgdGhlIHZzeXNjYWxsIHBhZ2UuICBUaGlzIG9ubHkKKyAqIGNvdmVycyB0aGUgNjRiaXQgdnN5c2NhbGwgcGFnZSBub3cuIDMyYml0IGhhcyBhIHJlYWwgVk1BIG5vdyBhbmQgZG9lcworICogbm90IG5lZWQgc3BlY2lhbCBoYW5kbGluZyBhbnltb3JlOgogICovCi1zdGF0aWMgdm9pZCB2c3lzY2FsbF9zZXRfY3B1KGludCBjcHUpCitzdGF0aWMgY29uc3QgY2hhciAqZ2F0ZV92bWFfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQl1bnNpZ25lZCBsb25nIGQ7Ci0JdW5zaWduZWQgbG9uZyBub2RlID0gMDsKLSNpZmRlZiBDT05GSUdfTlVNQQotCW5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOworCXJldHVybiAiW3ZzeXNjYWxsXSI7Cit9CitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdhdGVfdm1hX29wcyA9IHsKKwkubmFtZSA9IGdhdGVfdm1hX25hbWUsCit9Oworc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCBnYXRlX3ZtYSA9IHsKKwkudm1fc3RhcnQJPSBWU1lTQ0FMTF9BRERSLAorCS52bV9lbmQJCT0gVlNZU0NBTExfQUREUiArIFBBR0VfU0laRSwKKwkudm1fcGFnZV9wcm90CT0gUEFHRV9SRUFET05MWV9FWEVDLAorCS52bV9mbGFncwk9IFZNX1JFQUQgfCBWTV9FWEVDLAorCS52bV9vcHMJCT0gJmdhdGVfdm1hX29wcywKK307CisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X2dhdGVfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgorCWlmICghbW0gfHwgbW0tPmNvbnRleHQuaWEzMl9jb21wYXQpCisJCXJldHVybiBOVUxMOwogI2VuZGlmCi0JaWYgKGNwdV9oYXMoJmNwdV9kYXRhKGNwdSksIFg4Nl9GRUFUVVJFX1JEVFNDUCkpCi0JCXdyaXRlX3JkdHNjcF9hdXgoKG5vZGUgPDwgMTIpIHwgY3B1KTsKLQotCS8qCi0JICogU3RvcmUgY3B1IG51bWJlciBpbiBsaW1pdCBzbyB0aGF0IGl0IGNhbiBiZSBsb2FkZWQgcXVpY2tseQotCSAqIGluIHVzZXIgc3BhY2UgaW4gdmdldGNwdS4gKDEyIGJpdHMgZm9yIHRoZSBDUFUgYW5kIDggYml0cyBmb3IgdGhlIG5vZGUpCi0JICovCi0JZCA9IDB4MGY0MDAwMDAwMDAwMFVMTDsKLQlkIHw9IGNwdTsKLQlkIHw9IChub2RlICYgMHhmKSA8PCAxMjsKLQlkIHw9IChub2RlID4+IDQpIDw8IDQ4OwotCi0Jd3JpdGVfZ2R0X2VudHJ5KGdldF9jcHVfZ2R0X3RhYmxlKGNwdSksIEdEVF9FTlRSWV9QRVJfQ1BVLCAmZCwgREVTQ1RZUEVfUyk7CisJaWYgKHZzeXNjYWxsX21vZGUgPT0gTk9ORSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuICZnYXRlX3ZtYTsKIH0KIAotc3RhdGljIHZvaWQgY3B1X3ZzeXNjYWxsX2luaXQodm9pZCAqYXJnKQoraW50IGluX2dhdGVfYXJlYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCS8qIHByZWVtcHRpb24gc2hvdWxkIGJlIGFscmVhZHkgb2ZmICovCi0JdnN5c2NhbGxfc2V0X2NwdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGdldF9nYXRlX3ZtYShtbSk7CisKKwlpZiAoIXZtYSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKGFkZHIgPj0gdm1hLT52bV9zdGFydCkgJiYgKGFkZHIgPCB2bWEtPnZtX2VuZCk7CiB9CiAKLXN0YXRpYyBpbnQKLWNwdV92c3lzY2FsbF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCisvKgorICogVXNlIHRoaXMgd2hlbiB5b3UgaGF2ZSBubyByZWxpYWJsZSBtbSwgdHlwaWNhbGx5IGZyb20gaW50ZXJydXB0CisgKiBjb250ZXh0LiBJdCBpcyBsZXNzIHJlbGlhYmxlIHRoYW4gdXNpbmcgYSB0YXNrJ3MgbW0gYW5kIG1heSBnaXZlCisgKiBmYWxzZSBwb3NpdGl2ZXMuCisgKi8KK2ludCBpbl9nYXRlX2FyZWFfbm9fbW0odW5zaWduZWQgbG9uZyBhZGRyKQogewotCWxvbmcgY3B1ID0gKGxvbmcpYXJnOwotCi0JaWYgKGFjdGlvbiA9PSBDUFVfT05MSU5FIHx8IGFjdGlvbiA9PSBDUFVfT05MSU5FX0ZST1pFTikKLQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgY3B1X3ZzeXNjYWxsX2luaXQsIE5VTEwsIDEpOwotCi0JcmV0dXJuIE5PVElGWV9ET05FOworCXJldHVybiB2c3lzY2FsbF9tb2RlICE9IE5PTkUgJiYgKGFkZHIgJiBQQUdFX01BU0spID09IFZTWVNDQUxMX0FERFI7CiB9CiAKIHZvaWQgX19pbml0IG1hcF92c3lzY2FsbCh2b2lkKQpAQCAtMzMxLDI0ICszMjQsMTIgQEAKIAlleHRlcm4gY2hhciBfX3ZzeXNjYWxsX3BhZ2U7CiAJdW5zaWduZWQgbG9uZyBwaHlzYWRkcl92c3lzY2FsbCA9IF9fcGFfc3ltYm9sKCZfX3ZzeXNjYWxsX3BhZ2UpOwogCi0JX19zZXRfZml4bWFwKFZTWVNDQUxMX1BBR0UsIHBoeXNhZGRyX3ZzeXNjYWxsLAotCQkgICAgIHZzeXNjYWxsX21vZGUgPT0gTkFUSVZFCi0JCSAgICAgPyBQQUdFX0tFUk5FTF9WU1lTQ0FMTAotCQkgICAgIDogUEFHRV9LRVJORUxfVlZBUik7CisJaWYgKHZzeXNjYWxsX21vZGUgIT0gTk9ORSkKKwkJX19zZXRfZml4bWFwKFZTWVNDQUxMX1BBR0UsIHBoeXNhZGRyX3ZzeXNjYWxsLAorCQkJICAgICB2c3lzY2FsbF9tb2RlID09IE5BVElWRQorCQkJICAgICA/IFBBR0VfS0VSTkVMX1ZTWVNDQUxMCisJCQkgICAgIDogUEFHRV9LRVJORUxfVlZBUik7CisKIAlCVUlMRF9CVUdfT04oKHVuc2lnbmVkIGxvbmcpX19maXhfdG9fdmlydChWU1lTQ0FMTF9QQUdFKSAhPQogCQkgICAgICh1bnNpZ25lZCBsb25nKVZTWVNDQUxMX0FERFIpOwogfQotCi1zdGF0aWMgaW50IF9faW5pdCB2c3lzY2FsbF9pbml0KHZvaWQpCi17Ci0JY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2JlZ2luKCk7Ci0KLQlvbl9lYWNoX2NwdShjcHVfdnN5c2NhbGxfaW5pdCwgTlVMTCwgMSk7Ci0JLyogbm90aWZpZXIgcHJpb3JpdHkgPiBLVk0gKi8KLQlfX2hvdGNwdV9ub3RpZmllcihjcHVfdnN5c2NhbGxfbm90aWZpZXIsIDMwKTsKLQotCWNwdV9ub3RpZmllcl9yZWdpc3Rlcl9kb25lKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLV9faW5pdGNhbGwodnN5c2NhbGxfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCmluZGV4IGU0OGI2NzQuLjIzNGIwNzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCkBAIC0xMTYsOCArMTE2LDYgQEAKIAkudGVhcmRvd25fbXNpX2lycXMJPSBkZWZhdWx0X3RlYXJkb3duX21zaV9pcnFzLAogCS5yZXN0b3JlX21zaV9pcnFzCT0gZGVmYXVsdF9yZXN0b3JlX21zaV9pcnFzLAogCS5zZXR1cF9ocGV0X21zaQkJPSBkZWZhdWx0X3NldHVwX2hwZXRfbXNpLAotCS5tc2lfbWFza19pcnEJCT0gZGVmYXVsdF9tc2lfbWFza19pcnEsCi0JLm1zaXhfbWFza19pcnEJCT0gZGVmYXVsdF9tc2l4X21hc2tfaXJxLAogfTsKIAogLyogTVNJIGFyY2ggc3BlY2lmaWMgaG9va3MgKi8KQEAgLTE0MCwxNCArMTM4LDYgQEAKIHsKIAl4ODZfbXNpLnJlc3RvcmVfbXNpX2lycXMoZGV2KTsKIH0KLXUzMiBhcmNoX21zaV9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZykKLXsKLQlyZXR1cm4geDg2X21zaS5tc2lfbWFza19pcnEoZGVzYywgbWFzaywgZmxhZyk7Ci19Ci11MzIgYXJjaF9tc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCi17Ci0JcmV0dXJuIHg4Nl9tc2kubXNpeF9tYXNrX2lycShkZXNjLCBmbGFnKTsKLX0KICNlbmRpZgogCiBzdHJ1Y3QgeDg2X2lvX2FwaWNfb3BzIHg4Nl9pb19hcGljX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXV0cmFjZS5oIGIvYXJjaC94ODYva3ZtL21tdXRyYWNlLmgKaW5kZXggNWFhZjM1Ni4uY2U0NjNhOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdXRyYWNlLmgKKysrIGIvYXJjaC94ODYva3ZtL21tdXRyYWNlLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAlfX2VudHJ5LT51bnN5bmMgPSBzcC0+dW5zeW5jOwogCiAjZGVmaW5lIEtWTV9NTVVfUEFHRV9QUklOVEsoKSAoewkJCQkgICAgICAgIFwKLQljb25zdCB1MzIgc2F2ZWRfbGVuID0gcC0+bGVuOwkJCQkJXAorCWNvbnN0IGNoYXIgKnNhdmVkX3B0ciA9IHRyYWNlX3NlcV9idWZmZXJfcHRyKHApOwkJXAogCXN0YXRpYyBjb25zdCBjaGFyICphY2Nlc3Nfc3RyW10gPSB7CQkJICAgICAgICBcCiAJCSItLS0iLCAiLS14IiwgInctLSIsICJ3LXgiLCAiLXUtIiwgIi11eCIsICJ3dS0iLCAid3V4IiAgXAogCX07CQkJCQkJCSAgICAgICAgXApAQCAtNDEsNyArNDEsNyBAQAogCQkJIHJvbGUubnhlID8gIiIgOiAiISIsCQkJCVwKIAkJCSBfX2VudHJ5LT5yb290X2NvdW50LAkJCQlcCiAJCQkgX19lbnRyeS0+dW5zeW5jID8gInVuc3luYyIgOiAic3luYyIsIDApOwlcCi0JcC0+YnVmZmVyICsgc2F2ZWRfbGVuOwkJCQkJCVwKKwlzYXZlZF9wdHI7CQkJCQkJCVwKIAkJfSkKIAogI2RlZmluZSBrdm1fbW11X3RyYWNlX3BmZXJyX2ZsYWdzICAgICAgIFwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9pbnNuLmMgYi9hcmNoL3g4Ni9saWIvaW5zbi5jCmluZGV4IDU0ZmNmZmUuLjI0ODA5NzhiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvaW5zbi5jCisrKyBiL2FyY2gveDg2L2xpYi9pbnNuLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyogVmVyaWZ5IG5leHQgc2l6ZW9mKHQpIGJ5dGVzIGNhbiBiZSBvbiB0aGUgc2FtZSBpbnN0cnVjdGlvbiAqLwogI2RlZmluZSB2YWxpZGF0ZV9uZXh0KHQsIGluc24sIG4pCVwKLQkoKGluc24pLT5uZXh0X2J5dGUgKyBzaXplb2YodCkgKyBuIC0gKGluc24pLT5rYWRkciA8PSBNQVhfSU5TTl9TSVpFKQorCSgoaW5zbiktPm5leHRfYnl0ZSArIHNpemVvZih0KSArIG4gPCAoaW5zbiktPmVuZF9rYWRkcikKIAogI2RlZmluZSBfX2dldF9uZXh0KHQsIGluc24pCVwKIAkoeyB0IHIgPSAqKHQqKWluc24tPm5leHRfYnl0ZTsgaW5zbi0+bmV4dF9ieXRlICs9IHNpemVvZih0KTsgcjsgfSkKQEAgLTUwLDEwICs1MCwxMSBAQAogICogQGthZGRyOglhZGRyZXNzIChpbiBrZXJuZWwgbWVtb3J5KSBvZiBpbnN0cnVjdGlvbiAob3IgY29weSB0aGVyZW9mKQogICogQHg4Nl82NDoJITAgZm9yIDY0LWJpdCBrZXJuZWwgb3IgNjQtYml0IGFwcAogICovCi12b2lkIGluc25faW5pdChzdHJ1Y3QgaW5zbiAqaW5zbiwgY29uc3Qgdm9pZCAqa2FkZHIsIGludCB4ODZfNjQpCit2b2lkIGluc25faW5pdChzdHJ1Y3QgaW5zbiAqaW5zbiwgY29uc3Qgdm9pZCAqa2FkZHIsIGludCBidWZfbGVuLCBpbnQgeDg2XzY0KQogewogCW1lbXNldChpbnNuLCAwLCBzaXplb2YoKmluc24pKTsKIAlpbnNuLT5rYWRkciA9IGthZGRyOworCWluc24tPmVuZF9rYWRkciA9IGthZGRyICsgYnVmX2xlbjsKIAlpbnNuLT5uZXh0X2J5dGUgPSBrYWRkcjsKIAlpbnNuLT54ODZfNjQgPSB4ODZfNjQgPyAxIDogMDsKIAlpbnNuLT5vcG5kX2J5dGVzID0gNDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL01ha2VmaWxlIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKaW5kZXggNmExOWFkOS4uZWNmZGM0NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKQEAgLTMwLDMgKzMwLDUgQEAKIG9iai0kKENPTkZJR19OVU1BX0VNVSkJCSs9IG51bWFfZW11bGF0aW9uLm8KIAogb2JqLSQoQ09ORklHX01FTVRFU1QpCQkrPSBtZW10ZXN0Lm8KKworb2JqLSQoQ09ORklHX1g4Nl9JTlRFTF9NUFgpCSs9IG1weC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jCmluZGV4IDk1YTQyN2UuLmYwY2VkZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jCisrKyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jCkBAIC03Niw2ICs3Niw5IEBACiAjIGlmZGVmIENPTkZJR19YODZfRVNQRklYNjQKIAl7IEVTUEZJWF9CQVNFX0FERFIsCSJFU1BmaXggQXJlYSIsIDE2IH0sCiAjIGVuZGlmCisjIGlmZGVmIENPTkZJR19FRkkKKwl7IEVGSV9WQV9FTkQsCQkiRUZJIFJ1bnRpbWUgU2VydmljZXMiIH0sCisjIGVuZGlmCiAJeyBfX1NUQVJUX0tFUk5FTF9tYXAsICAgIkhpZ2ggS2VybmVsIE1hcHBpbmciIH0sCiAJeyBNT0RVTEVTX1ZBRERSLCAgICAgICAgIk1vZHVsZXMiIH0sCiAJeyBNT0RVTEVTX0VORCwgICAgICAgICAgIkVuZCBNb2R1bGVzIiB9LApAQCAtMTI2LDcgKzEyOSw3IEBACiAKIAlpZiAoIXBncHJvdF92YWwocHJvdCkpIHsKIAkJLyogTm90IHByZXNlbnQgKi8KLQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CiAJfSBlbHNlIHsKIAkJaWYgKHByICYgX1BBR0VfVVNFUikKIAkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgIlVTUiAiKTsKQEAgLTE0NSwxOCArMTQ4LDE2IEBACiAJCWVsc2UKIAkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgIiAgICAiKTsKIAotCQkvKiBCaXQgOSBoYXMgYSBkaWZmZXJlbnQgbWVhbmluZyBvbiBsZXZlbCAzIHZzIDQgKi8KLQkJaWYgKGxldmVsIDw9IDMpIHsKLQkJCWlmIChwciAmIF9QQUdFX1BTRSkKLQkJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICJQU0UgIik7Ci0JCQllbHNlCi0JCQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiICAgICIpOwotCQl9IGVsc2UgewotCQkJaWYgKHByICYgX1BBR0VfUEFUKQotCQkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgInBhdCAiKTsKLQkJCWVsc2UKLQkJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICIgICAgIik7Ci0JCX0KKwkJLyogQml0IDcgaGFzIGEgZGlmZmVyZW50IG1lYW5pbmcgb24gbGV2ZWwgMyB2cyA0ICovCisJCWlmIChsZXZlbCA8PSAzICYmIHByICYgX1BBR0VfUFNFKQorCQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiUFNFICIpOworCQllbHNlCisJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICIgICAgIik7CisJCWlmICgobGV2ZWwgPT0gNCAmJiBwciAmIF9QQUdFX1BBVCkgfHwKKwkJICAgICgobGV2ZWwgPT0gMyB8fCBsZXZlbCA9PSAyKSAmJiBwciAmIF9QQUdFX1BBVF9MQVJHRSkpCisJCQlwdF9kdW1wX2NvbnRfcHJpbnRmKG0sIGRtc2csICJwYXQgIik7CisJCWVsc2UKKwkJCXB0X2R1bXBfY29udF9wcmludGYobSwgZG1zZywgIiAgICAiKTsKIAkJaWYgKHByICYgX1BBR0VfR0xPQkFMKQogCQkJcHRfZHVtcF9jb250X3ByaW50ZihtLCBkbXNnLCAiR0xCICIpOwogCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmMKaW5kZXggNjZkYmEzNi4uODJiNDFkNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2L21tL2luaXQuYwpAQCAtMjcsNiArMjcsMzUgQEAKIAogI2luY2x1ZGUgIm1tX2ludGVybmFsLmgiCiAKKy8qCisgKiBUYWJsZXMgdHJhbnNsYXRpbmcgYmV0d2VlbiBwYWdlX2NhY2hlX3R5cGVfdCBhbmQgcHRlIGVuY29kaW5nLgorICogTWluaW1hbCBzdXBwb3J0ZWQgbW9kZXMgYXJlIGRlZmluZWQgc3RhdGljYWxseSwgbW9kaWZpZWQgaWYgbW9yZSBzdXBwb3J0ZWQKKyAqIGNhY2hlIG1vZGVzIGFyZSBhdmFpbGFibGUuCisgKiBJbmRleCBpbnRvIF9fY2FjaGVtb2RlMnB0ZV90YmwgaXMgdGhlIGNhY2hlbW9kZS4KKyAqIEluZGV4IGludG8gX19wdGUyY2FjaGVtb2RlX3RibCBhcmUgdGhlIGNhY2hpbmcgYXR0cmlidXRlIGJpdHMgb2YgdGhlIHB0ZQorICogKF9QQUdFX1BXVCwgX1BBR0VfUENELCBfUEFHRV9QQVQpIGF0IGluZGV4IGJpdCBwb3NpdGlvbnMgMCwgMSwgMi4KKyAqLwordWludDE2X3QgX19jYWNoZW1vZGUycHRlX3RibFtfUEFHRV9DQUNIRV9NT0RFX05VTV0gPSB7CisJW19QQUdFX0NBQ0hFX01PREVfV0JdCQk9IDAsCisJW19QQUdFX0NBQ0hFX01PREVfV0NdCQk9IF9QQUdFX1BXVCwKKwlbX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VU10JPSBfUEFHRV9QQ0QsCisJW19QQUdFX0NBQ0hFX01PREVfVUNdCQk9IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCwKKwlbX1BBR0VfQ0FDSEVfTU9ERV9XVF0JCT0gX1BBR0VfUENELAorCVtfUEFHRV9DQUNIRV9NT0RFX1dQXQkJPSBfUEFHRV9QQ0QsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoX19jYWNoZW1vZGUycHRlX3RibCk7Cit1aW50OF90IF9fcHRlMmNhY2hlbW9kZV90YmxbOF0gPSB7CisJW19fcHRlMmNtX2lkeCgwKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1dCLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUFdUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1dDLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUENEKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUFdUIHwgX1BBR0VfUENEKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1VDLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUEFUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1dCLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUFdUIHwgX1BBR0VfUEFUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1dDLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUENEIHwgX1BBR0VfUEFUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTLAorCVtfX3B0ZTJjbV9pZHgoX1BBR0VfUFdUIHwgX1BBR0VfUENEIHwgX1BBR0VfUEFUKV0gPSBfUEFHRV9DQUNIRV9NT0RFX1VDLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9fcHRlMmNhY2hlbW9kZV90YmwpOworCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHBndF9idWZfc3RhcnQ7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHBndF9idWZfZW5kOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBwZ3RfYnVmX3RvcDsKQEAgLTY4NywzICs3MTYsMTEgQEAKIAlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKIH0KIAordm9pZCB1cGRhdGVfY2FjaGVfbW9kZV9lbnRyeSh1bnNpZ25lZCBlbnRyeSwgZW51bSBwYWdlX2NhY2hlX21vZGUgY2FjaGUpCit7CisJLyogZW50cnkgMCBNVVNUIGJlIFdCIChoYXJkd2lyZWQgdG8gc3BlZWQgdXAgdHJhbnNsYXRpb25zKSAqLworCUJVR19PTighZW50cnkgJiYgY2FjaGUgIT0gX1BBR0VfQ0FDSEVfTU9ERV9XQik7CisKKwlfX2NhY2hlbW9kZTJwdGVfdGJsW2NhY2hlXSA9IF9fY21faWR4MnB0ZShlbnRyeSk7CisJX19wdGUyY2FjaGVtb2RlX3RibFtlbnRyeV0gPSBjYWNoZTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCA0ZTVkZmVjLi4zMGViMDVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC01Miw3ICs1Miw2IEBACiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKICNpbmNsdWRlICJtbV9pbnRlcm5hbC5oIgpAQCAtMzM4LDEyICszMzcsMTUgQEAKICAqIENyZWF0ZSBsYXJnZSBwYWdlIHRhYmxlIG1hcHBpbmdzIGZvciBhIHJhbmdlIG9mIHBoeXNpY2FsIGFkZHJlc3Nlcy4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IF9faW5pdF9leHRyYV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQkJcGdwcm90X3QgcHJvdCkKKwkJCQkJZW51bSBwYWdlX2NhY2hlX21vZGUgY2FjaGUpCiB7CiAJcGdkX3QgKnBnZDsKIAlwdWRfdCAqcHVkOwogCXBtZF90ICpwbWQ7CisJcGdwcm90X3QgcHJvdDsKIAorCXBncHJvdF92YWwocHJvdCkgPSBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX0xBUkdFKSB8CisJCXBncHJvdF92YWwocGdwcm90XzRrXzJfbGFyZ2UoY2FjaGVtb2RlMnBncHJvdChjYWNoZSkpKTsKIAlCVUdfT04oKHBoeXMgJiB+UE1EX01BU0spIHx8IChzaXplICYgflBNRF9NQVNLKSk7CiAJZm9yICg7IHNpemU7IHBoeXMgKz0gUE1EX1NJWkUsIHNpemUgLT0gUE1EX1NJWkUpIHsKIAkJcGdkID0gcGdkX29mZnNldF9rKCh1bnNpZ25lZCBsb25nKV9fdmEocGh5cykpOwpAQCAtMzY2LDEyICszNjgsMTIgQEAKIAogdm9pZCBfX2luaXQgaW5pdF9leHRyYV9tYXBwaW5nX3diKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplKQogewotCV9faW5pdF9leHRyYV9tYXBwaW5nKHBoeXMsIHNpemUsIFBBR0VfS0VSTkVMX0xBUkdFKTsKKwlfX2luaXRfZXh0cmFfbWFwcGluZyhwaHlzLCBzaXplLCBfUEFHRV9DQUNIRV9NT0RFX1dCKTsKIH0KIAogdm9pZCBfX2luaXQgaW5pdF9leHRyYV9tYXBwaW5nX3VjKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplKQogewotCV9faW5pdF9leHRyYV9tYXBwaW5nKHBoeXMsIHNpemUsIFBBR0VfS0VSTkVMX0xBUkdFX05PQ0FDSEUpOworCV9faW5pdF9leHRyYV9tYXBwaW5nKHBoeXMsIHNpemUsIF9QQUdFX0NBQ0hFX01PREVfVUMpOwogfQogCiAvKgpAQCAtMTIwMiw2NiArMTIwNCwxNSBAQAogCXJldHVybiBwZm5fdmFsaWQocHRlX3BmbigqcHRlKSk7CiB9CiAKLS8qCi0gKiBBIHBzZXVkbyBWTUEgdG8gYWxsb3cgcHRyYWNlIGFjY2VzcyBmb3IgdGhlIHZzeXNjYWxsIHBhZ2UuICBUaGlzIG9ubHkKLSAqIGNvdmVycyB0aGUgNjRiaXQgdnN5c2NhbGwgcGFnZSBub3cuIDMyYml0IGhhcyBhIHJlYWwgVk1BIG5vdyBhbmQgZG9lcwotICogbm90IG5lZWQgc3BlY2lhbCBoYW5kbGluZyBhbnltb3JlOgotICovCi1zdGF0aWMgY29uc3QgY2hhciAqZ2F0ZV92bWFfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlyZXR1cm4gIlt2c3lzY2FsbF0iOwotfQotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnYXRlX3ZtYV9vcHMgPSB7Ci0JLm5hbWUgPSBnYXRlX3ZtYV9uYW1lLAotfTsKLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgZ2F0ZV92bWEgPSB7Ci0JLnZtX3N0YXJ0CT0gVlNZU0NBTExfQUREUiwKLQkudm1fZW5kCQk9IFZTWVNDQUxMX0FERFIgKyBQQUdFX1NJWkUsCi0JLnZtX3BhZ2VfcHJvdAk9IFBBR0VfUkVBRE9OTFlfRVhFQywKLQkudm1fZmxhZ3MJPSBWTV9SRUFEIHwgVk1fRVhFQywKLQkudm1fb3BzCQk9ICZnYXRlX3ZtYV9vcHMsCi19OwotCi1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9nYXRlX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLSNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KLQlpZiAoIW1tIHx8IG1tLT5jb250ZXh0LmlhMzJfY29tcGF0KQotCQlyZXR1cm4gTlVMTDsKLSNlbmRpZgotCXJldHVybiAmZ2F0ZV92bWE7Ci19Ci0KLWludCBpbl9nYXRlX2FyZWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGdldF9nYXRlX3ZtYShtbSk7Ci0KLQlpZiAoIXZtYSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gKGFkZHIgPj0gdm1hLT52bV9zdGFydCkgJiYgKGFkZHIgPCB2bWEtPnZtX2VuZCk7Ci19Ci0KLS8qCi0gKiBVc2UgdGhpcyB3aGVuIHlvdSBoYXZlIG5vIHJlbGlhYmxlIG1tLCB0eXBpY2FsbHkgZnJvbSBpbnRlcnJ1cHQKLSAqIGNvbnRleHQuIEl0IGlzIGxlc3MgcmVsaWFibGUgdGhhbiB1c2luZyBhIHRhc2sncyBtbSBhbmQgbWF5IGdpdmUKLSAqIGZhbHNlIHBvc2l0aXZlcy4KLSAqLwotaW50IGluX2dhdGVfYXJlYV9ub19tbSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIChhZGRyICYgUEFHRV9NQVNLKSA9PSBWU1lTQ0FMTF9BRERSOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwcm9iZV9tZW1vcnlfYmxvY2tfc2l6ZSh2b2lkKQogewogCS8qIHN0YXJ0IGZyb20gMmcgKi8KIAl1bnNpZ25lZCBsb25nIGJ6ID0gMVVMPDwzMTsKIAotI2lmZGVmIENPTkZJR19YODZfVVYKLQlpZiAoaXNfdXZfc3lzdGVtKCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVVY6IG1lbW9yeSBibG9jayBzaXplIDJHQlxuIik7CisJaWYgKHRvdGFscmFtX3BhZ2VzID49ICg2NFVMTCA8PCAoMzAgLSBQQUdFX1NISUZUKSkpIHsKKwkJcHJfaW5mbygiVXNpbmcgMkdCIG1lbW9yeSBibG9jayBzaXplIGZvciBsYXJnZS1tZW1vcnkgc3lzdGVtXG4iKTsKIAkJcmV0dXJuIDJVTCAqIDEwMjQgKiAxMDI0ICogMTAyNDsKIAl9Ci0jZW5kaWYKIAogCS8qIGxlc3MgdGhhbiA2NGcgaW5zdGFsbGVkICovCiAJaWYgKChtYXhfcGZuIDw8IFBBR0VfU0hJRlQpIDwgKDE2VUwgPDwgMzIpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW9tYXBfMzIuYyBiL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKaW5kZXggN2IxNzliNDkuLjljYTM1ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW9tYXBfMzIuYwpAQCAtMzMsMTcgKzMzLDE3IEBACiAKIGludCBpb21hcF9jcmVhdGVfd2MocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnByb3QpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnID0gX1BBR0VfQ0FDSEVfV0M7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtID0gX1BBR0VfQ0FDSEVfTU9ERV9XQzsKIAlpbnQgcmV0OwogCiAJaWYgKCFpc19pb19tYXBwaW5nX3Bvc3NpYmxlKGJhc2UsIHNpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IGlvX3Jlc2VydmVfbWVtdHlwZShiYXNlLCBiYXNlICsgc2l6ZSwgJmZsYWcpOworCXJldCA9IGlvX3Jlc2VydmVfbWVtdHlwZShiYXNlLCBiYXNlICsgc2l6ZSwgJnBjbSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCSpwcm90ID0gX19wZ3Byb3QoX19QQUdFX0tFUk5FTCB8IGZsYWcpOworCSpwcm90ID0gX19wZ3Byb3QoX19QQUdFX0tFUk5FTCB8IGNhY2hlbW9kZTJwcm90dmFsKHBjbSkpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfY3JlYXRlX3djKTsKQEAgLTgyLDggKzgyLDEwIEBACiAJICogTVRSUiBpcyBVQyBvciBXQy4gIFVDX01JTlVTIGdldHMgdGhlIHJlYWwgaW50ZW50aW9uLCBvZiB0aGUKIAkgKiB1c2VyLCB3aGljaCBpcyAiV0MgaWYgdGhlIE1UUlIgaXMgV0MsIFVDIGlmIHlvdSBjYW4ndCBkbyB0aGF0LiIKIAkgKi8KLQlpZiAoIXBhdF9lbmFibGVkICYmIHBncHJvdF92YWwocHJvdCkgPT0gcGdwcm90X3ZhbChQQUdFX0tFUk5FTF9XQykpCi0JCXByb3QgPSBQQUdFX0tFUk5FTF9VQ19NSU5VUzsKKwlpZiAoIXBhdF9lbmFibGVkICYmIHBncHJvdF92YWwocHJvdCkgPT0KKwkgICAgKF9fUEFHRV9LRVJORUwgfCBjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1dDKSkpCisJCXByb3QgPSBfX3BncHJvdChfX1BBR0VfS0VSTkVMIHwKKwkJCQljYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKSk7CiAKIAlyZXR1cm4gKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIGttYXBfYXRvbWljX3Byb3RfcGZuKHBmbiwgcHJvdCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggYWY3OGU1MC4uZmRmNjE3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtMjksMjAgKzI5LDIwIEBACiAgKiBjb25mbGljdHMuCiAgKi8KIGludCBpb3JlbWFwX2NoYW5nZV9hdHRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHByb3RfdmFsKQorCQkJZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtKQogewogCXVuc2lnbmVkIGxvbmcgbnJwYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKIAlpbnQgZXJyOwogCi0Jc3dpdGNoIChwcm90X3ZhbCkgewotCWNhc2UgX1BBR0VfQ0FDSEVfVUM6CisJc3dpdGNoIChwY20pIHsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfVUM6CiAJZGVmYXVsdDoKIAkJZXJyID0gX3NldF9tZW1vcnlfdWModmFkZHIsIG5ycGFnZXMpOwogCQlicmVhazsKLQljYXNlIF9QQUdFX0NBQ0hFX1dDOgorCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQzoKIAkJZXJyID0gX3NldF9tZW1vcnlfd2ModmFkZHIsIG5ycGFnZXMpOwogCQlicmVhazsKLQljYXNlIF9QQUdFX0NBQ0hFX1dCOgorCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQjoKIAkJZXJyID0gX3NldF9tZW1vcnlfd2IodmFkZHIsIG5ycGFnZXMpOwogCQlicmVhazsKIAl9CkBAIC03NSwxNCArNzUsMTQgQEAKICAqIGNhbGxlciBzaG91bGRuJ3QgbmVlZCB0byBrbm93IHRoYXQgc21hbGwgZGV0YWlsLgogICovCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpfX2lvcmVtYXBfY2FsbGVyKHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsCi0JCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBwcm90X3ZhbCwgdm9pZCAqY2FsbGVyKQorCQl1bnNpZ25lZCBsb25nIHNpemUsIGVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSwgdm9pZCAqY2FsbGVyKQogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB2YWRkcjsKIAlyZXNvdXJjZV9zaXplX3QgcGZuLCBsYXN0X3BmbiwgbGFzdF9hZGRyOwogCWNvbnN0IHJlc291cmNlX3NpemVfdCB1bmFsaWduZWRfcGh5c19hZGRyID0gcGh5c19hZGRyOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgdW5hbGlnbmVkX3NpemUgPSBzaXplOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7Ci0JdW5zaWduZWQgbG9uZyBuZXdfcHJvdF92YWw7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgbmV3X3BjbTsKIAlwZ3Byb3RfdCBwcm90OwogCWludCByZXR2YWw7CiAJdm9pZCBfX2lvbWVtICpyZXRfYWRkcjsKQEAgLTEzNCwzOCArMTM0LDQwIEBACiAJc2l6ZSA9IFBBR0VfQUxJR04obGFzdF9hZGRyKzEpIC0gcGh5c19hZGRyOwogCiAJcmV0dmFsID0gcmVzZXJ2ZV9tZW10eXBlKHBoeXNfYWRkciwgKHU2NClwaHlzX2FkZHIgKyBzaXplLAotCQkJCQkJcHJvdF92YWwsICZuZXdfcHJvdF92YWwpOworCQkJCQkJcGNtLCAmbmV3X3BjbSk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9FUlIgImlvcmVtYXAgcmVzZXJ2ZV9tZW10eXBlIGZhaWxlZCAlZFxuIiwgcmV0dmFsKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKHByb3RfdmFsICE9IG5ld19wcm90X3ZhbCkgewotCQlpZiAoIWlzX25ld19tZW10eXBlX2FsbG93ZWQocGh5c19hZGRyLCBzaXplLAotCQkJCQkgICAgcHJvdF92YWwsIG5ld19wcm90X3ZhbCkpIHsKKwlpZiAocGNtICE9IG5ld19wY20pIHsKKwkJaWYgKCFpc19uZXdfbWVtdHlwZV9hbGxvd2VkKHBoeXNfYWRkciwgc2l6ZSwgcGNtLCBuZXdfcGNtKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCSJpb3JlbWFwIGVycm9yIGZvciAweCVsbHgtMHglbGx4LCByZXF1ZXN0ZWQgMHglbHgsIGdvdCAweCVseFxuIiwKKwkJImlvcmVtYXAgZXJyb3IgZm9yIDB4JWxseC0weCVsbHgsIHJlcXVlc3RlZCAweCV4LCBnb3QgMHgleFxuIiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkciwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKShwaHlzX2FkZHIgKyBzaXplKSwKLQkJCQlwcm90X3ZhbCwgbmV3X3Byb3RfdmFsKTsKKwkJCQlwY20sIG5ld19wY20pOwogCQkJZ290byBlcnJfZnJlZV9tZW10eXBlOwogCQl9Ci0JCXByb3RfdmFsID0gbmV3X3Byb3RfdmFsOworCQlwY20gPSBuZXdfcGNtOwogCX0KIAotCXN3aXRjaCAocHJvdF92YWwpIHsKLQljYXNlIF9QQUdFX0NBQ0hFX1VDOgorCXByb3QgPSBQQUdFX0tFUk5FTF9JTzsKKwlzd2l0Y2ggKHBjbSkgeworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9VQzoKIAlkZWZhdWx0OgotCQlwcm90ID0gUEFHRV9LRVJORUxfSU9fTk9DQUNIRTsKKwkJcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfAorCQkJCWNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUMpKTsKIAkJYnJlYWs7Ci0JY2FzZSBfUEFHRV9DQUNIRV9VQ19NSU5VUzoKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX0lPX1VDX01JTlVTOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUzoKKwkJcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfAorCQkJCWNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpKTsKIAkJYnJlYWs7Ci0JY2FzZSBfUEFHRV9DQUNIRV9XQzoKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX0lPX1dDOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQzoKKwkJcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfAorCQkJCWNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfV0MpKTsKIAkJYnJlYWs7Ci0JY2FzZSBfUEFHRV9DQUNIRV9XQjoKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX0lPOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQjoKIAkJYnJlYWs7CiAJfQogCkBAIC0xNzgsNyArMTgwLDcgQEAKIAlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgYXJlYS0+YWRkcjsKIAotCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwaHlzX2FkZHIsIHNpemUsIHByb3RfdmFsKSkKKwlpZiAoa2VybmVsX21hcF9zeW5jX21lbXR5cGUocGh5c19hZGRyLCBzaXplLCBwY20pKQogCQlnb3RvIGVycl9mcmVlX2FyZWE7CiAKIAlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKHZhZGRyLCB2YWRkciArIHNpemUsIHBoeXNfYWRkciwgcHJvdCkpCkBAIC0yMjcsMTQgKzIyOSwxNCBAQAogewogCS8qCiAJICogSWRlYWxseSwgdGhpcyBzaG91bGQgYmU6Ci0JICoJcGF0X2VuYWJsZWQgPyBfUEFHRV9DQUNIRV9VQyA6IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCSAqCXBhdF9lbmFibGVkID8gX1BBR0VfQ0FDSEVfTU9ERV9VQyA6IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAJICoKIAkgKiBUaWxsIHdlIGZpeCBhbGwgWCBkcml2ZXJzIHRvIHVzZSBpb3JlbWFwX3djKCksIHdlIHdpbGwgdXNlCiAJICogVUMgTUlOVVMuCiAJICovCi0JdW5zaWduZWQgbG9uZyB2YWwgPSBfUEFHRV9DQUNIRV9VQ19NSU5VUzsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY20gPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOwogCi0JcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCB2YWwsCisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCBwY20sCiAJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woaW9yZW1hcF9ub2NhY2hlKTsKQEAgLTI1Miw3ICsyNTQsNyBAQAogdm9pZCBfX2lvbWVtICppb3JlbWFwX3djKHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAocGF0X2VuYWJsZWQpCi0JCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgX1BBR0VfQ0FDSEVfV0MsCisJCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgX1BBR0VfQ0FDSEVfTU9ERV9XQywKIAkJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAllbHNlCiAJCXJldHVybiBpb3JlbWFwX25vY2FjaGUocGh5c19hZGRyLCBzaXplKTsKQEAgLTI2MSw3ICsyNjMsNyBAQAogCiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfY2FjaGUocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgX1BBR0VfQ0FDSEVfV0IsCisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCBfUEFHRV9DQUNIRV9NT0RFX1dCLAogCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGlvcmVtYXBfY2FjaGUpOwpAQCAtMjY5LDcgKzI3MSw4IEBACiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJdW5zaWduZWQgbG9uZyBwcm90X3ZhbCkKIHsKLQlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHIsIHNpemUsIChwcm90X3ZhbCAmIF9QQUdFX0NBQ0hFX01BU0spLAorCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwKKwkJCQlwZ3Byb3QyY2FjaGVtb2RlKF9fcGdwcm90KHByb3RfdmFsKSksCiAJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woaW9yZW1hcF9wcm90KTsKQEAgLTMyNyw3ICszMzAsNyBAQAogICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQogICogYWNjZXNzCiAgKi8KLXZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgcGh5cykKK3ZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IHBoeXMpCiB7CiAJdm9pZCAqYWRkcjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGh5cyAmIFBBR0VfTUFTSzsKQEAgLTM0Myw3ICszNDYsNyBAQAogCXJldHVybiBhZGRyOwogfQogCi12b2lkIHVueGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBwaHlzLCB2b2lkICphZGRyKQordm9pZCB1bnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IHBoeXMsIHZvaWQgKmFkZHIpCiB7CiAJaWYgKHBhZ2VfaXNfcmFtKHBoeXMgPj4gUEFHRV9TSElGVCkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21tX2ludGVybmFsLmggYi9hcmNoL3g4Ni9tbS9tbV9pbnRlcm5hbC5oCmluZGV4IDZiNTYzYTEuLjYyNDc0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21tX2ludGVybmFsLmgKKysrIGIvYXJjaC94ODYvbW0vbW1faW50ZXJuYWwuaApAQCAtMTYsNCArMTYsNiBAQAogCiBleHRlcm4gaW50IGFmdGVyX2Jvb3RtZW07CiAKK3ZvaWQgdXBkYXRlX2NhY2hlX21vZGVfZW50cnkodW5zaWduZWQgZW50cnksIGVudW0gcGFnZV9jYWNoZV9tb2RlIGNhY2hlKTsKKwogI2VuZGlmCS8qIF9fWDg2X01NX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21weC5jIGIvYXJjaC94ODYvbW0vbXB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlYmY1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L21tL21weC5jCkBAIC0wLDAgKzEsOTI4IEBACisvKgorICogbXB4LmMgLSBNZW1vcnkgUHJvdGVjdGlvbiBlWHRlbnNpb25zCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIFFpYW93ZWkgUmVuIDxxaWFvd2VpLnJlbkBpbnRlbC5jb20+CisgKiBEYXZlIEhhbnNlbiA8ZGF2ZS5oYW5zZW5AaW50ZWwuY29tPgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQvc3lzY3RsLmg+CisKKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorI2luY2x1ZGUgPGFzbS9pbnNuLmg+CisjaW5jbHVkZSA8YXNtL21tYW4uaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vbXB4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9mcHUtaW50ZXJuYWwuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKm1weF9tYXBwaW5nX25hbWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuICJbbXB4XSI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXB4X3ZtYV9vcHMgPSB7CisJLm5hbWUgPSBtcHhfbWFwcGluZ19uYW1lLAorfTsKKworc3RhdGljIGludCBpc19tcHhfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiAodm1hLT52bV9vcHMgPT0gJm1weF92bWFfb3BzKTsKK30KKworLyoKKyAqIFRoaXMgaXMgcmVhbGx5IGEgc2ltcGxpZmllZCAidm1fbW1hcCIuIGl0IG9ubHkgaGFuZGxlcyBNUFgKKyAqIGJvdW5kcyB0YWJsZXMgKHRoZSBib3VuZHMgZGlyZWN0b3J5IGlzIHVzZXItYWxsb2NhdGVkKS4KKyAqCisgKiBMYXRlciBvbiwgd2UgdXNlIHRoZSB2bWEtPnZtX29wcyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGVzZQorICogVk1Bcy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXB4X21tYXAodW5zaWduZWQgbG9uZyBsZW4pCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBwZ29mZjsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXZtX2ZsYWdzX3Qgdm1fZmxhZ3M7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwkvKiBPbmx5IGJvdW5kcyB0YWJsZSBhbmQgYm91bmRzIGRpcmVjdG9yeSBjYW4gYmUgYWxsb2NhdGVkIGhlcmUgKi8KKwlpZiAobGVuICE9IE1QWF9CRF9TSVpFX0JZVEVTICYmIGxlbiAhPSBNUFhfQlRfU0laRV9CWVRFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCisJLyogVG9vIG1hbnkgbWFwcGluZ3M/ICovCisJaWYgKG1tLT5tYXBfY291bnQgPiBzeXNjdGxfbWF4X21hcF9jb3VudCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBPYnRhaW4gdGhlIGFkZHJlc3MgdG8gbWFwIHRvLiB3ZSB2ZXJpZnkgKG9yIHNlbGVjdCkgaXQgYW5kIGVuc3VyZQorCSAqIHRoYXQgaXQgcmVwcmVzZW50cyBhIHZhbGlkIHNlY3Rpb24gb2YgdGhlIGFkZHJlc3Mgc3BhY2UuCisJICovCisJYWRkciA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIDAsIGxlbiwgMCwgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFKTsKKwlpZiAoYWRkciAmIH5QQUdFX01BU0spIHsKKwkJcmV0ID0gYWRkcjsKKwkJZ290byBvdXQ7CisJfQorCisJdm1fZmxhZ3MgPSBWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9NUFggfAorCQkJbW0tPmRlZl9mbGFncyB8IFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUM7CisKKwkvKiBTZXQgcGdvZmYgYWNjb3JkaW5nIHRvIGFkZHIgZm9yIGFub25fdm1hICovCisJcGdvZmYgPSBhZGRyID4+IFBBR0VfU0hJRlQ7CisKKwlyZXQgPSBtbWFwX3JlZ2lvbihOVUxMLCBhZGRyLCBsZW4sIHZtX2ZsYWdzLCBwZ29mZik7CisJaWYgKElTX0VSUl9WQUxVRShyZXQpKQorCQlnb3RvIG91dDsKKworCXZtYSA9IGZpbmRfdm1hKG1tLCByZXQpOworCWlmICghdm1hKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwl2bWEtPnZtX29wcyA9ICZtcHhfdm1hX29wczsKKworCWlmICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwkJbW1fcG9wdWxhdGUocmV0LCBsZW4pOworCQlyZXR1cm4gcmV0OworCX0KKworb3V0OgorCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiByZXQ7Cit9CisKK2VudW0gcmVnX3R5cGUgeworCVJFR19UWVBFX1JNID0gMCwKKwlSRUdfVFlQRV9JTkRFWCwKKwlSRUdfVFlQRV9CQVNFLAorfTsKKworc3RhdGljIGludCBnZXRfcmVnX29mZnNldChzdHJ1Y3QgaW5zbiAqaW5zbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkgIGVudW0gcmVnX3R5cGUgdHlwZSkKK3sKKwlpbnQgcmVnbm8gPSAwOworCisJc3RhdGljIGNvbnN0IGludCByZWdvZmZbXSA9IHsKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGF4KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGN4KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGR4KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGJ4KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNwKSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGJwKSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNpKSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGRpKSwKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByOCksCisJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByOSksCisJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMTApLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjExKSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHIxMiksCisJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMTMpLAorCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjE0KSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHIxNSksCisjZW5kaWYKKwl9OworCWludCBucl9yZWdpc3RlcnMgPSBBUlJBWV9TSVpFKHJlZ29mZik7CisJLyoKKwkgKiBEb24ndCBwb3NzaWJseSBkZWNvZGUgYSAzMi1iaXQgaW5zdHJ1Y3Rpb25zIGFzCisJICogcmVhZGluZyBhIDY0LWJpdC1vbmx5IHJlZ2lzdGVyLgorCSAqLworCWlmIChJU19FTkFCTEVEKENPTkZJR19YODZfNjQpICYmICFpbnNuLT54ODZfNjQpCisJCW5yX3JlZ2lzdGVycyAtPSA4OworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBSRUdfVFlQRV9STToKKwkJcmVnbm8gPSBYODZfTU9EUk1fUk0oaW5zbi0+bW9kcm0udmFsdWUpOworCQlpZiAoWDg2X1JFWF9CKGluc24tPnJleF9wcmVmaXgudmFsdWUpID09IDEpCisJCQlyZWdubyArPSA4OworCQlicmVhazsKKworCWNhc2UgUkVHX1RZUEVfSU5ERVg6CisJCXJlZ25vID0gWDg2X1NJQl9JTkRFWChpbnNuLT5zaWIudmFsdWUpOworCQlpZiAoWDg2X1JFWF9YKGluc24tPnJleF9wcmVmaXgudmFsdWUpID09IDEpCisJCQlyZWdubyArPSA4OworCQlicmVhazsKKworCWNhc2UgUkVHX1RZUEVfQkFTRToKKwkJcmVnbm8gPSBYODZfU0lCX0JBU0UoaW5zbi0+c2liLnZhbHVlKTsKKwkJaWYgKFg4Nl9SRVhfQihpbnNuLT5yZXhfcHJlZml4LnZhbHVlKSA9PSAxKQorCQkJcmVnbm8gKz0gODsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcl9lcnIoImludmFsaWQgcmVnaXN0ZXIgdHlwZSIpOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJlZ25vID4gbnJfcmVnaXN0ZXJzKSB7CisJCVdBUk5fT05DRSgxLCAiZGVjb2RlZCBhbiBpbnN0cnVjdGlvbiB3aXRoIGFuIGludmFsaWQgcmVnaXN0ZXIiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiByZWdvZmZbcmVnbm9dOworfQorCisvKgorICogcmV0dXJuIHRoZSBhZGRyZXNzIGJlaW5nIHJlZmVyZW5jZWQgYmUgaW5zdHJ1Y3Rpb24KKyAqIGZvciBybT0zIHJldHVybmluZyB0aGUgY29udGVudCBvZiB0aGUgcm0gcmVnCisgKiBmb3Igcm0hPTMgY2FsY3VsYXRlcyB0aGUgYWRkcmVzcyB1c2luZyBTSUIgYW5kIERpc3AKKyAqLworc3RhdGljIHZvaWQgX191c2VyICptcHhfZ2V0X2FkZHJfcmVmKHN0cnVjdCBpbnNuICppbnNuLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGJhc2UsIGluZHg7CisJaW50IGFkZHJfb2Zmc2V0LCBiYXNlX29mZnNldCwgaW5keF9vZmZzZXQ7CisJaW5zbl9ieXRlX3Qgc2liOworCisJaW5zbl9nZXRfbW9kcm0oaW5zbik7CisJaW5zbl9nZXRfc2liKGluc24pOworCXNpYiA9IGluc24tPnNpYi52YWx1ZTsKKworCWlmIChYODZfTU9EUk1fTU9EKGluc24tPm1vZHJtLnZhbHVlKSA9PSAzKSB7CisJCWFkZHJfb2Zmc2V0ID0gZ2V0X3JlZ19vZmZzZXQoaW5zbiwgcmVncywgUkVHX1RZUEVfUk0pOworCQlpZiAoYWRkcl9vZmZzZXQgPCAwKQorCQkJZ290byBvdXRfZXJyOworCQlhZGRyID0gcmVnc19nZXRfcmVnaXN0ZXIocmVncywgYWRkcl9vZmZzZXQpOworCX0gZWxzZSB7CisJCWlmIChpbnNuLT5zaWIubmJ5dGVzKSB7CisJCQliYXNlX29mZnNldCA9IGdldF9yZWdfb2Zmc2V0KGluc24sIHJlZ3MsIFJFR19UWVBFX0JBU0UpOworCQkJaWYgKGJhc2Vfb2Zmc2V0IDwgMCkKKwkJCQlnb3RvIG91dF9lcnI7CisKKwkJCWluZHhfb2Zmc2V0ID0gZ2V0X3JlZ19vZmZzZXQoaW5zbiwgcmVncywgUkVHX1RZUEVfSU5ERVgpOworCQkJaWYgKGluZHhfb2Zmc2V0IDwgMCkKKwkJCQlnb3RvIG91dF9lcnI7CisKKwkJCWJhc2UgPSByZWdzX2dldF9yZWdpc3RlcihyZWdzLCBiYXNlX29mZnNldCk7CisJCQlpbmR4ID0gcmVnc19nZXRfcmVnaXN0ZXIocmVncywgaW5keF9vZmZzZXQpOworCQkJYWRkciA9IGJhc2UgKyBpbmR4ICogKDEgPDwgWDg2X1NJQl9TQ0FMRShzaWIpKTsKKwkJfSBlbHNlIHsKKwkJCWFkZHJfb2Zmc2V0ID0gZ2V0X3JlZ19vZmZzZXQoaW5zbiwgcmVncywgUkVHX1RZUEVfUk0pOworCQkJaWYgKGFkZHJfb2Zmc2V0IDwgMCkKKwkJCQlnb3RvIG91dF9lcnI7CisJCQlhZGRyID0gcmVnc19nZXRfcmVnaXN0ZXIocmVncywgYWRkcl9vZmZzZXQpOworCQl9CisJCWFkZHIgKz0gaW5zbi0+ZGlzcGxhY2VtZW50LnZhbHVlOworCX0KKwlyZXR1cm4gKHZvaWQgX191c2VyICopYWRkcjsKK291dF9lcnI6CisJcmV0dXJuICh2b2lkIF9fdXNlciAqKS0xOworfQorCitzdGF0aWMgaW50IG1weF9pbnNuX2RlY29kZShzdHJ1Y3QgaW5zbiAqaW5zbiwKKwkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGNoYXIgYnVmW01BWF9JTlNOX1NJWkVdOworCWludCB4ODZfNjQgPSAhdGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMik7CisJaW50IG5vdF9jb3BpZWQ7CisJaW50IG5yX2NvcGllZDsKKworCW5vdF9jb3BpZWQgPSBjb3B5X2Zyb21fdXNlcihidWYsICh2b2lkIF9fdXNlciAqKXJlZ3MtPmlwLCBzaXplb2YoYnVmKSk7CisJbnJfY29waWVkID0gc2l6ZW9mKGJ1ZikgLSBub3RfY29waWVkOworCS8qCisJICogVGhlIGRlY29kZXIgX3Nob3VsZF8gZmFpbCBuaWNlbHkgaWYgd2UgcGFzcyBpdCBhIHNob3J0IGJ1ZmZlci4KKwkgKiBCdXQsIGxldCdzIG5vdCBkZXBlbmQgb24gdGhhdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBJZiB3ZQorCSAqIGRpZCBub3QgZ2V0IGFueXRoaW5nLCBqdXN0IGVycm9yIG91dCBub3cuCisJICovCisJaWYgKCFucl9jb3BpZWQpCisJCXJldHVybiAtRUZBVUxUOworCWluc25faW5pdChpbnNuLCBidWYsIG5yX2NvcGllZCwgeDg2XzY0KTsKKwlpbnNuX2dldF9sZW5ndGgoaW5zbik7CisJLyoKKwkgKiBjb3B5X2Zyb21fdXNlcigpIHRyaWVzIHRvIGdldCBhcyBtYW55IGJ5dGVzIGFzIHdlIGNvdWxkIHNlZSBpbgorCSAqIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGluc3RydWN0aW9uLiAgSWYgdGhlIGluc3RydWN0aW9uIHdlIGFyZQorCSAqIGFmdGVyIGlzIHNob3J0ZXIgdGhhbiB0aGF0IF9hbmRfIHdlIGF0dGVtcHQgdG8gY29weSBmcm9tCisJICogc29tZXRoaW5nIHVucmVhZGFibGUsIHdlIG1pZ2h0IGdldCBhIHNob3J0IHJlYWQuICBUaGlzIGlzIE9LCisJICogYXMgbG9uZyBhcyB0aGUgcmVhZCBkaWQgbm90IHN0b3AgaW4gdGhlIG1pZGRsZSBvZiB0aGUKKwkgKiBpbnN0cnVjdGlvbi4gIENoZWNrIHRvIHNlZSBpZiB3ZSBnb3QgYSBwYXJ0aWFsIGluc3RydWN0aW9uLgorCSAqLworCWlmIChucl9jb3BpZWQgPCBpbnNuLT5sZW5ndGgpCisJCXJldHVybiAtRUZBVUxUOworCisJaW5zbl9nZXRfb3Bjb2RlKGluc24pOworCS8qCisJICogV2Ugb25seSBfcmVhbGx5XyBuZWVkIHRvIGRlY29kZSBibmRjbC9ibmRjbi9ibmRjdQorCSAqIEVycm9yIG91dCBvbiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChpbnNuLT5vcGNvZGUuYnl0ZXNbMF0gIT0gMHgwZikKKwkJZ290byBiYWRfb3Bjb2RlOworCWlmICgoaW5zbi0+b3Bjb2RlLmJ5dGVzWzFdICE9IDB4MWEpICYmCisJICAgIChpbnNuLT5vcGNvZGUuYnl0ZXNbMV0gIT0gMHgxYikpCisJCWdvdG8gYmFkX29wY29kZTsKKworCXJldHVybiAwOworYmFkX29wY29kZToKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIElmIGEgYm91bmRzIG92ZXJmbG93IG9jY3VycyB0aGVuIGEgI0JSIGlzIGdlbmVyYXRlZC4gVGhpcworICogZnVuY3Rpb24gZGVjb2RlcyBNUFggaW5zdHJ1Y3Rpb25zIHRvIGdldCB2aW9sYXRpb24gYWRkcmVzcworICogYW5kIHNldCB0aGlzIGFkZHJlc3MgaW50byBleHRlbmRlZCBzdHJ1Y3Qgc2lnaW5mby4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBzdXBlciBwcmVjaXNlIHdheSBvZiBkb2luZyB0aGlzLgorICogVXNlcnNwYWNlIGNvdWxkIGhhdmUsIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB3cml0dGVuCisgKiBhbnl0aGluZyBpdCB3YW50cyBpbiB0byB0aGUgaW5zdHJ1Y3Rpb25zLiAgV2UgY2FuIG5vdAorICogdHJ1c3QgYW55dGhpbmcgYWJvdXQgaXQuICBUaGV5IG1pZ2h0IG5vdCBiZSB2YWxpZAorICogaW5zdHJ1Y3Rpb25zIG9yIG1pZ2h0IGVuY29kZSBpbnZhbGlkIHJlZ2lzdGVycywgZXRjLi4uCisgKgorICogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBrZnJlZSgpIHRoZSByZXR1cm5lZCBzaWdpbmZvX3QuCisgKi8KK3NpZ2luZm9fdCAqbXB4X2dlbmVyYXRlX3NpZ2luZm8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKQoreworCXN0cnVjdCBibmRyZWcgKmJuZHJlZ3MsICpibmRyZWc7CisJc2lnaW5mb190ICppbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaW5zbiBpbnNuOworCXVpbnQ4X3QgYm5kcmVnbm87CisJaW50IGVycjsKKworCWVyciA9IG1weF9pbnNuX2RlY29kZSgmaW5zbiwgcmVncyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJLyoKKwkgKiBXZSBrbm93IGF0IHRoaXMgcG9pbnQgdGhhdCB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGgKKwkgKiBNUFggaW5zdHJ1Y3Rpb25zLgorCSAqLworCWluc25fZ2V0X21vZHJtKCZpbnNuKTsKKwlibmRyZWdubyA9IFg4Nl9NT0RSTV9SRUcoaW5zbi5tb2RybS52YWx1ZSk7CisJaWYgKGJuZHJlZ25vID4gMykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCS8qIGdldCB0aGUgYm5kcmVncyBfYXJlYV8gb2YgdGhlIHhzYXZlIHN0cnVjdHVyZSAqLworCWJuZHJlZ3MgPSBnZXRfeHNhdmVfYWRkcih4c2F2ZV9idWYsIFhTVEFURV9CTkRSRUdTKTsKKwlpZiAoIWJuZHJlZ3MpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb3V0OworCX0KKwkvKiBub3cgZ28gc2VsZWN0IHRoZSBpbmRpdmlkdWFsIHJlZ2lzdGVyIGluIHRoZSBzZXQgb2YgNCAqLworCWJuZHJlZyA9ICZibmRyZWdzW2JuZHJlZ25vXTsKKworCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCS8qCisJICogVGhlIHJlZ2lzdGVycyBhcmUgYWx3YXlzIDY0LWJpdCwgYnV0IHRoZSB1cHBlciAzMgorCSAqIGJpdHMgYXJlIGlnbm9yZWQgaW4gMzItYml0IG1vZGUuICBBbHNvLCBub3RlIHRoYXQgdGhlCisJICogdXBwZXIgYm91bmRzIGFyZSBhcmNoaXRlY3R1cmFsbHkgcmVwcmVzZW50ZWQgaW4gMSdzCisJICogY29tcGxlbWVudCBmb3JtLgorCSAqCisJICogVGhlICd1bnNpZ25lZCBsb25nJyBjYXN0IGlzIGJlY2F1c2UgdGhlIGNvbXBpbGVyCisJICogY29tcGxhaW5zIHdoZW4gY2FzdGluZyBmcm9tIGludGVnZXJzIHRvIGRpZmZlcmVudC1zaXplCisJICogcG9pbnRlcnMuCisJICovCisJaW5mby0+c2lfbG93ZXIgPSAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylibmRyZWctPmxvd2VyX2JvdW5kOworCWluZm8tPnNpX3VwcGVyID0gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpfmJuZHJlZy0+dXBwZXJfYm91bmQ7CisJaW5mby0+c2lfYWRkcl9sc2IgPSAwOworCWluZm8tPnNpX3NpZ25vID0gU0lHU0VHVjsKKwlpbmZvLT5zaV9lcnJubyA9IDA7CisJaW5mby0+c2lfY29kZSA9IFNFR1ZfQk5ERVJSOworCWluZm8tPnNpX2FkZHIgPSBtcHhfZ2V0X2FkZHJfcmVmKCZpbnNuLCByZWdzKTsKKwkvKgorCSAqIFdlIHdlcmUgbm90IGFibGUgdG8gZXh0cmFjdCBhbiBhZGRyZXNzIGZyb20gdGhlIGluc3RydWN0aW9uLAorCSAqIHByb2JhYmx5IGJlY2F1c2UgdGhlcmUgd2FzIHNvbWV0aGluZyBpbnZhbGlkIGluIGl0LgorCSAqLworCWlmIChpbmZvLT5zaV9hZGRyID09ICh2b2lkICopLTEpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb3V0OworCX0KKwlyZXR1cm4gaW5mbzsKK2Vycl9vdXQ6CisJLyogaW5mbyBtaWdodCBiZSBOVUxMLCBidXQga2ZyZWUoKSBoYW5kbGVzIHRoYXQgKi8KKwlrZnJlZShpbmZvKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgX191c2VyIHZvaWQgKnRhc2tfZ2V0X2JvdW5kc19kaXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IGJuZGNzciAqYm5kY3NyOworCisJaWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01QWCkpCisJCXJldHVybiBNUFhfSU5WQUxJRF9CT1VORFNfRElSOworCisJLyoKKwkgKiBUaGUgYm91bmRzIGRpcmVjdG9yeSBwb2ludGVyIGlzIHN0b3JlZCBpbiBhIHJlZ2lzdGVyCisJICogb25seSBhY2Nlc3NpYmxlIGlmIHdlIGZpcnN0IGRvIGFuIHhzYXZlLgorCSAqLworCWZwdV9zYXZlX2luaXQoJnRzay0+dGhyZWFkLmZwdSk7CisJYm5kY3NyID0gZ2V0X3hzYXZlX2FkZHIoJnRzay0+dGhyZWFkLmZwdS5zdGF0ZS0+eHNhdmUsIFhTVEFURV9CTkRDU1IpOworCWlmICghYm5kY3NyKQorCQlyZXR1cm4gTVBYX0lOVkFMSURfQk9VTkRTX0RJUjsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSByZWdpc3RlciBsb29rcyB2YWxpZCBieSBjaGVja2luZyB0aGUKKwkgKiBlbmFibGUgYml0LgorCSAqLworCWlmICghKGJuZGNzci0+Ym5kY2ZndSAmIE1QWF9CTkRDRkdfRU5BQkxFX0ZMQUcpKQorCQlyZXR1cm4gTVBYX0lOVkFMSURfQk9VTkRTX0RJUjsKKworCS8qCisJICogTGFzdGx5LCBtYXNrIG9mZiB0aGUgbG93IGJpdHMgdXNlZCBmb3IgY29uZmlndXJhdGlvbgorCSAqIGZsYWdzLCBhbmQgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBib3VuZHMgdGFibGUuCisJICovCisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKQorCQkoYm5kY3NyLT5ibmRjZmd1ICYgTVBYX0JORENGR19BRERSX01BU0spOworfQorCitpbnQgbXB4X2VuYWJsZV9tYW5hZ2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXZvaWQgX191c2VyICpiZF9iYXNlID0gTVBYX0lOVkFMSURfQk9VTkRTX0RJUjsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIHJ1bnRpbWUgaW4gdGhlIHVzZXJzcGFjZSB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW9uIG9mCisJICogdGhlIGJvdW5kcyBkaXJlY3RvcnkuIFRoZW4sIGl0IHdpbGwgc2F2ZSB0aGUgYmFzZSBvZiB0aGUgYm91bmRzCisJICogZGlyZWN0b3J5IGludG8gWFNBVkUvWFJTVE9SIFNhdmUgQXJlYSBhbmQgZW5hYmxlIE1QWCB0aHJvdWdoCisJICogWFJTVE9SIGluc3RydWN0aW9uLgorCSAqCisJICogZnB1X3hzYXZlKCkgaXMgZXhwZWN0ZWQgdG8gYmUgdmVyeSBleHBlbnNpdmUuIFN0b3JpbmcgdGhlIGJvdW5kcworCSAqIGRpcmVjdG9yeSBoZXJlIG1lYW5zIHRoYXQgd2UgZG8gbm90IGhhdmUgdG8gZG8geHNhdmUgaW4gdGhlIHVubWFwCisJICogcGF0aDsgd2UgY2FuIGp1c3QgdXNlIG1tLT5iZF9hZGRyIGluc3RlYWQuCisJICovCisJYmRfYmFzZSA9IHRhc2tfZ2V0X2JvdW5kc19kaXIodHNrKTsKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCW1tLT5iZF9hZGRyID0gYmRfYmFzZTsKKwlpZiAobW0tPmJkX2FkZHIgPT0gTVBYX0lOVkFMSURfQk9VTkRTX0RJUikKKwkJcmV0ID0gLUVOWElPOworCisJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IG1weF9kaXNhYmxlX21hbmFnZW1lbnQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKworCWlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9NUFgpKQorCQlyZXR1cm4gLUVOWElPOworCisJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwltbS0+YmRfYWRkciA9IE1QWF9JTlZBTElEX0JPVU5EU19ESVI7CisJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXaXRoIDMyLWJpdCBtb2RlLCBNUFhfQlRfU0laRV9CWVRFUyBpcyA0TUIsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoCisgKiBib3VuZHMgdGFibGUgaXMgMTZLQi4gV2l0aCA2NC1iaXQgbW9kZSwgTVBYX0JUX1NJWkVfQllURVMgaXMgMkdCLAorICogYW5kIHRoZSBzaXplIG9mIGVhY2ggYm91bmRzIHRhYmxlIGlzIDRNQi4KKyAqLworc3RhdGljIGludCBhbGxvY2F0ZV9idChsb25nIF9fdXNlciAqYmRfZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyBleHBlY3RlZF9vbGRfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGFjdHVhbF9vbGRfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGJ0X2FkZHI7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIENhcnZlIHRoZSB2aXJ0dWFsIHNwYWNlIG91dCBvZiB1c2Vyc3BhY2UgZm9yIHRoZSBuZXcKKwkgKiBib3VuZHMgdGFibGU6CisJICovCisJYnRfYWRkciA9IG1weF9tbWFwKE1QWF9CVF9TSVpFX0JZVEVTKTsKKwlpZiAoSVNfRVJSKCh2b2lkICopYnRfYWRkcikpCisJCXJldHVybiBQVFJfRVJSKCh2b2lkICopYnRfYWRkcik7CisJLyoKKwkgKiBTZXQgdGhlIHZhbGlkIGZsYWcgKGtpbmRhIGxpa2UgX1BBR0VfUFJFU0VOVCBpbiBhIHB0ZSkKKwkgKi8KKwlidF9hZGRyID0gYnRfYWRkciB8IE1QWF9CRF9FTlRSWV9WQUxJRF9GTEFHOworCisJLyoKKwkgKiBHbyBwb2tlIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXcgYm91bmRzIHRhYmxlIGluIHRvIHRoZQorCSAqIGJvdW5kcyBkaXJlY3RvcnkgZW50cnkgb3V0IGluIHVzZXJzcGFjZSBtZW1vcnkuICBOb3RlOgorCSAqIHdlIG1heSByYWNlIHdpdGggYW5vdGhlciBDUFUgaW5zdGFudGlhdGluZyB0aGUgc2FtZSB0YWJsZS4KKwkgKiBJbiB0aGF0IGNhc2UgdGhlIGNtcHhjaGcgd2lsbCBzZWUgYW4gdW5leHBlY3RlZAorCSAqICdhY3R1YWxfb2xkX3ZhbCcuCisJICoKKwkgKiBUaGlzIGNhbiBmYXVsdCwgYnV0IHRoYXQncyBPSyBiZWNhdXNlIHdlIGRvIG5vdCBob2xkCisJICogbW1hcF9zZW0gYXQgdGhpcyBwb2ludCwgdW5saWtlIHNvbWUgb2YgdGhlIG90aGVyIHBhcnQKKwkgKiBvZiB0aGUgTVBYIGNvZGUgdGhhdCBoYXZlIHRvIHBhZ2VmYXVsdF9kaXNhYmxlKCkuCisJICovCisJcmV0ID0gdXNlcl9hdG9taWNfY21weGNoZ19pbmF0b21pYygmYWN0dWFsX29sZF92YWwsIGJkX2VudHJ5LAorCQkJCQkgICBleHBlY3RlZF9vbGRfdmFsLCBidF9hZGRyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bm1hcDsKKworCS8qCisJICogVGhlIHVzZXJfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMoKSB3aWxsIG9ubHkgcmV0dXJuIG5vbnplcm8KKwkgKiBmb3IgZmF1bHRzLCAqbm90KiBpZiB0aGUgY21weGNoZyBpdHNlbGYgZmFpbHMuICBOb3cgd2UgbXVzdAorCSAqIHZlcmlmeSB0aGF0IHRoZSBjbXB4Y2hnIGl0c2VsZiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorCSAqLworCS8qCisJICogV2UgZXhwZWN0ZWQgYW4gZW1wdHkgJ2V4cGVjdGVkX29sZF92YWwnLCBidXQgaW5zdGVhZCBmb3VuZAorCSAqIGFuIGFwcGFyZW50bHkgdmFsaWQgZW50cnkuICBBc3N1bWUgd2UgcmFjZWQgd2l0aCBhbm90aGVyCisJICogdGhyZWFkIHRvIGluc3RhbnRpYXRlIHRoaXMgdGFibGUgYW5kIGRlc2NsYXJlIHN1Y2NlY3NzLgorCSAqLworCWlmIChhY3R1YWxfb2xkX3ZhbCAmIE1QWF9CRF9FTlRSWV9WQUxJRF9GTEFHKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0X3VubWFwOworCX0KKwkvKgorCSAqIFdlIGZvdW5kIGEgbm9uLWVtcHR5IGJkX2VudHJ5IGJ1dCBpdCBkaWQgbm90IGhhdmUgdGhlCisJICogVkFMSURfRkxBRyBzZXQuICBSZXR1cm4gYW4gZXJyb3Igd2hpY2ggd2lsbCByZXN1bHQgaW4KKwkgKiBhIFNFR1Ygc2luY2UgdGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHNvbWVib2R5IHNjcmliYmxlZAorCSAqIHNvbWUgaW52YWxpZCBkYXRhIGluIHRvIGEgYm91bmRzIHRhYmxlLgorCSAqLworCWlmIChleHBlY3RlZF9vbGRfdmFsICE9IGFjdHVhbF9vbGRfdmFsKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubWFwOworCX0KKwlyZXR1cm4gMDsKK291dF91bm1hcDoKKwl2bV9tdW5tYXAoYnRfYWRkciAmIE1QWF9CVF9BRERSX01BU0ssIE1QWF9CVF9TSVpFX0JZVEVTKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV2hlbiBhIEJORFNUWCBpbnN0cnVjdGlvbiBhdHRlbXB0cyB0byBzYXZlIGJvdW5kcyB0byBhIGJvdW5kcworICogdGFibGUsIGl0IHdpbGwgZmlyc3QgYXR0ZW1wdCB0byBsb29rIHVwIHRoZSB0YWJsZSBpbiB0aGUKKyAqIGZpcnN0LWxldmVsIGJvdW5kcyBkaXJlY3RvcnkuICBJZiBpdCBkb2VzIG5vdCBmaW5kIGEgdGFibGUgaW4KKyAqIHRoZSBkaXJlY3RvcnksIGEgI0JSIGlzIGdlbmVyYXRlZCBhbmQgd2UgZ2V0IGhlcmUgaW4gb3JkZXIgdG8KKyAqIGFsbG9jYXRlIGEgbmV3IHRhYmxlLgorICoKKyAqIFdpdGggMzItYml0IG1vZGUsIHRoZSBzaXplIG9mIEJEIGlzIDRNQiwgYW5kIHRoZSBzaXplIG9mIGVhY2gKKyAqIGJvdW5kIHRhYmxlIGlzIDE2S0IuIFdpdGggNjQtYml0IG1vZGUsIHRoZSBzaXplIG9mIEJEIGlzIDJHQiwKKyAqIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIGJvdW5kIHRhYmxlIGlzIDRNQi4KKyAqLworc3RhdGljIGludCBkb19tcHhfYnRfZmF1bHQoc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKQoreworCXVuc2lnbmVkIGxvbmcgYmRfZW50cnksIGJkX2Jhc2U7CisJc3RydWN0IGJuZGNzciAqYm5kY3NyOworCisJYm5kY3NyID0gZ2V0X3hzYXZlX2FkZHIoeHNhdmVfYnVmLCBYU1RBVEVfQk5EQ1NSKTsKKwlpZiAoIWJuZGNzcikKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyoKKwkgKiBNYXNrIG9mZiB0aGUgcHJlc2VydmUgYW5kIGVuYWJsZSBiaXRzCisJICovCisJYmRfYmFzZSA9IGJuZGNzci0+Ym5kY2ZndSAmIE1QWF9CTkRDRkdfQUREUl9NQVNLOworCS8qCisJICogVGhlIGhhcmR3YXJlIHByb3ZpZGVzIHRoZSBhZGRyZXNzIG9mIHRoZSBtaXNzaW5nIG9yIGludmFsaWQKKwkgKiBlbnRyeSB2aWEgQk5EU1RBVFVTLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGdvIGxvb2sgaXQgdXAuCisJICovCisJYmRfZW50cnkgPSBibmRjc3ItPmJuZHN0YXR1cyAmIE1QWF9CTkRTVEFfQUREUl9NQVNLOworCS8qCisJICogTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZW50cnkgaXMgd2l0aGluIHdoZXJlIHdlIHRoaW5rCisJICogdGhlIGRpcmVjdG9yeSBpcy4KKwkgKi8KKwlpZiAoKGJkX2VudHJ5IDwgYmRfYmFzZSkgfHwKKwkgICAgKGJkX2VudHJ5ID49IGJkX2Jhc2UgKyBNUFhfQkRfU0laRV9CWVRFUykpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGFsbG9jYXRlX2J0KChsb25nIF9fdXNlciAqKWJkX2VudHJ5KTsKK30KKworaW50IG1weF9oYW5kbGVfYmRfZmF1bHQoc3RydWN0IHhzYXZlX3N0cnVjdCAqeHNhdmVfYnVmKQoreworCS8qCisJICogVXNlcnNwYWNlIG5ldmVyIGFza2VkIHVzIHRvIG1hbmFnZSB0aGUgYm91bmRzIHRhYmxlcywKKwkgKiBzbyByZWZ1c2UgdG8gaGVscC4KKwkgKi8KKwlpZiAoIWtlcm5lbF9tYW5hZ2luZ19tcHhfdGFibGVzKGN1cnJlbnQtPm1tKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZG9fbXB4X2J0X2ZhdWx0KHhzYXZlX2J1ZikpIHsKKwkJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOworCQkvKgorCQkgKiBUaGUgZm9yY2Vfc2lnKCkgaXMgZXNzZW50aWFsbHkgImhhbmRsaW5nIiB0aGlzCisJCSAqIGV4Y2VwdGlvbiwgc28gd2UgZG8gbm90IHBhc3MgdXAgdGhlIGVycm9yCisJCSAqIGZyb20gZG9fbXB4X2J0X2ZhdWx0KCkuCisJCSAqLworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEEgdGhpbiB3cmFwcGVyIGFyb3VuZCBnZXRfdXNlcl9wYWdlcygpLiAgUmV0dXJucyAwIGlmIHRoZQorICogZmF1bHQgd2FzIHJlc29sdmVkIG9yIC1lcnJubyBpZiBub3QuCisgKi8KK3N0YXRpYyBpbnQgbXB4X3Jlc29sdmVfZmF1bHQobG9uZyBfX3VzZXIgKmFkZHIsIGludCB3cml0ZSkKK3sKKwlsb25nIGd1cF9yZXQ7CisJaW50IG5yX3BhZ2VzID0gMTsKKwlpbnQgZm9yY2UgPSAwOworCisJZ3VwX3JldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCAodW5zaWduZWQgbG9uZylhZGRyLAorCQkJCSBucl9wYWdlcywgd3JpdGUsIGZvcmNlLCBOVUxMLCBOVUxMKTsKKwkvKgorCSAqIGdldF91c2VyX3BhZ2VzKCkgcmV0dXJucyBudW1iZXIgb2YgcGFnZXMgZ290dGVuLgorCSAqIDAgbWVhbnMgd2UgZmFpbGVkIHRvIGZhdWx0IGluIGFuZCBnZXQgYW55dGhpbmcsCisJICogcHJvYmFibHkgYmVjYXVzZSAnYWRkcicgaXMgYmFkLgorCSAqLworCWlmICghZ3VwX3JldCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJLyogT3RoZXIgZXJyb3IsIHJldHVybiBpdCAqLworCWlmIChndXBfcmV0IDwgMCkKKwkJcmV0dXJuIGd1cF9yZXQ7CisJLyogbXVzdCBoYXZlIGd1cCdkIGEgcGFnZSBhbmQgZ3VwX3JldD4wLCBzdWNjZXNzICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgdGhlIGJhc2Ugb2YgYm91bmRzIHRhYmxlcyBwb2ludGVkIGJ5IHNwZWNpZmljIGJvdW5kcworICogZGlyZWN0b3J5IGVudHJ5LgorICovCitzdGF0aWMgaW50IGdldF9idF9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJbG9uZyBfX3VzZXIgKmJkX2VudHJ5LCB1bnNpZ25lZCBsb25nICpidF9hZGRyKQoreworCWludCByZXQ7CisJaW50IHZhbGlkX2JpdDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCAoYmRfZW50cnkpLCBzaXplb2YoKmJkX2VudHJ5KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJd2hpbGUgKDEpIHsKKwkJaW50IG5lZWRfd3JpdGUgPSAwOworCisJCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisJCXJldCA9IGdldF91c2VyKCpidF9hZGRyLCBiZF9lbnRyeSk7CisJCXBhZ2VmYXVsdF9lbmFibGUoKTsKKwkJaWYgKCFyZXQpCisJCQlicmVhazsKKwkJaWYgKHJldCA9PSAtRUZBVUxUKQorCQkJcmV0ID0gbXB4X3Jlc29sdmVfZmF1bHQoYmRfZW50cnksIG5lZWRfd3JpdGUpOworCQkvKgorCQkgKiBJZiB3ZSBjb3VsZCBub3QgcmVzb2x2ZSB0aGUgZmF1bHQsIGNvbnNpZGVyIGl0CisJCSAqIHVzZXJzcGFjZSdzIGZhdWx0IGFuZCBlcnJvciBvdXQuCisJCSAqLworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwl2YWxpZF9iaXQgPSAqYnRfYWRkciAmIE1QWF9CRF9FTlRSWV9WQUxJRF9GTEFHOworCSpidF9hZGRyICY9IE1QWF9CVF9BRERSX01BU0s7CisKKwkvKgorCSAqIFdoZW4gdGhlIGtlcm5lbCBpcyBtYW5hZ2luZyBib3VuZHMgdGFibGVzLCBhIGJvdW5kcyBkaXJlY3RvcnkKKwkgKiBlbnRyeSB3aWxsIGVpdGhlciBoYXZlIGEgdmFsaWQgYWRkcmVzcyAocGx1cyB0aGUgdmFsaWQgYml0KQorCSAqICpPUiogYmUgY29tcGxldGVseSBlbXB0eS4gSWYgd2Ugc2VlIGEgIXZhbGlkIGVudHJ5ICphbmQqIHNvbWUKKwkgKiBkYXRhIGluIHRoZSBhZGRyZXNzIGZpZWxkLCB3ZSBrbm93IHNvbWV0aGluZyBpcyB3cm9uZy4gVGhpcworCSAqIC1FSU5WQUwgcmV0dXJuIHdpbGwgY2F1c2UgYSBTSUdTRUdWLgorCSAqLworCWlmICghdmFsaWRfYml0ICYmICpidF9hZGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKgorCSAqIERvIHdlIGhhdmUgYW4gY29tcGxldGVseSB6ZXJvZWQgYnQgZW50cnk/ICBUaGF0IGlzIE9LLiAgSXQKKwkgKiBqdXN0IG1lYW5zIHRoZXJlIHdhcyBubyBib3VuZHMgdGFibGUgZm9yIHRoaXMgbWVtb3J5LiAgTWFrZQorCSAqIHN1cmUgdG8gZGlzdGluZ3Vpc2ggdGhpcyBmcm9tIC1FSU5WQUwsIHdoaWNoIHdpbGwgY2F1c2UKKwkgKiBhIFNFR1YuCisJICovCisJaWYgKCF2YWxpZF9iaXQpCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBiYWNraW5nIHBoeXNpY2FsIHBhZ2VzIG9mIGJvdW5kcyB0YWJsZSAnYnRfYWRkcicuCisgKiBBc3N1bWUgc3RhcnQuLi5lbmQgaXMgd2l0aGluIHRoYXQgYm91bmRzIHRhYmxlLgorICovCitzdGF0aWMgaW50IHphcF9idF9lbnRyaWVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQl1bnNpZ25lZCBsb25nIGJ0X2FkZHIsCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgYWRkciwgbGVuOworCisJLyoKKwkgKiBGaW5kIHRoZSBmaXJzdCBvdmVybGFwcGluZyB2bWEuIElmIHZtYS0+dm1fc3RhcnQgPiBzdGFydCwgdGhlcmUKKwkgKiB3aWxsIGJlIGEgaG9sZSBpbiB0aGUgYm91bmRzIHRhYmxlLiBUaGlzIC1FSU5WQUwgcmV0dXJuIHdpbGwKKwkgKiBjYXVzZSBhIFNJR1NFR1YuCisJICovCisJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKKwlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gc3RhcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBBIE5VTUEgcG9saWN5IG9uIGEgVk1fTVBYIFZNQSBjb3VsZCBjYXVzZSB0aGlzIGJvdWRzIHRhYmxlIHRvCisJICogYmUgc3BsaXQuIFNvIHdlIG5lZWQgdG8gbG9vayBhY3Jvc3MgdGhlIGVudGlyZSAnc3RhcnQgLT4gZW5kJworCSAqIHJhbmdlIG9mIHRoaXMgYm91bmRzIHRhYmxlLCBmaW5kIGFsbCBvZiB0aGUgVk1fTVBYIFZNQXMsIGFuZAorCSAqIHphcCBvbmx5IHRob3NlLgorCSAqLworCWFkZHIgPSBzdGFydDsKKwl3aGlsZSAodm1hICYmIHZtYS0+dm1fc3RhcnQgPCBlbmQpIHsKKwkJLyoKKwkJICogV2UgZm9sbG93ZWQgYSBib3VuZHMgZGlyZWN0b3J5IGVudHJ5IGRvd24KKwkJICogaGVyZS4gIElmIHdlIGZpbmQgYSBub24tTVBYIFZNQSwgdGhhdCdzIGJhZCwKKwkJICogc28gc3RvcCBpbW1lZGlhdGVseSBhbmQgcmV0dXJuIGFuIGVycm9yLiAgVGhpcworCQkgKiBwcm9iYWJseSByZXN1bHRzIGluIGEgU0lHU0VHVi4KKwkJICovCisJCWlmICghaXNfbXB4X3ZtYSh2bWEpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbGVuID0gbWluKHZtYS0+dm1fZW5kLCBlbmQpIC0gYWRkcjsKKwkJemFwX3BhZ2VfcmFuZ2Uodm1hLCBhZGRyLCBsZW4sIE5VTEwpOworCisJCXZtYSA9IHZtYS0+dm1fbmV4dDsKKwkJYWRkciA9IHZtYS0+dm1fc3RhcnQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdW5tYXBfc2luZ2xlX2J0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQlsb25nIF9fdXNlciAqYmRfZW50cnksIHVuc2lnbmVkIGxvbmcgYnRfYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGVjdGVkX29sZF92YWwgPSBidF9hZGRyIHwgTVBYX0JEX0VOVFJZX1ZBTElEX0ZMQUc7CisJdW5zaWduZWQgbG9uZyBhY3R1YWxfb2xkX3ZhbCA9IDA7CisJaW50IHJldDsKKworCXdoaWxlICgxKSB7CisJCWludCBuZWVkX3dyaXRlID0gMTsKKworCQlwYWdlZmF1bHRfZGlzYWJsZSgpOworCQlyZXQgPSB1c2VyX2F0b21pY19jbXB4Y2hnX2luYXRvbWljKCZhY3R1YWxfb2xkX3ZhbCwgYmRfZW50cnksCisJCQkJCQkgICBleHBlY3RlZF9vbGRfdmFsLCAwKTsKKwkJcGFnZWZhdWx0X2VuYWJsZSgpOworCQlpZiAoIXJldCkKKwkJCWJyZWFrOworCQlpZiAocmV0ID09IC1FRkFVTFQpCisJCQlyZXQgPSBtcHhfcmVzb2x2ZV9mYXVsdChiZF9lbnRyeSwgbmVlZF93cml0ZSk7CisJCS8qCisJCSAqIElmIHdlIGNvdWxkIG5vdCByZXNvbHZlIHRoZSBmYXVsdCwgY29uc2lkZXIgaXQKKwkJICogdXNlcnNwYWNlJ3MgZmF1bHQgYW5kIGVycm9yIG91dC4KKwkJICovCisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwkvKgorCSAqIFRoZSBjbXB4Y2hnIHdhcyBwZXJmb3JtZWQsIGNoZWNrIHRoZSByZXN1bHRzLgorCSAqLworCWlmIChhY3R1YWxfb2xkX3ZhbCAhPSBleHBlY3RlZF9vbGRfdmFsKSB7CisJCS8qCisJCSAqIFNvbWVvbmUgZWxzZSByYWNlZCB3aXRoIHVzIHRvIHVubWFwIHRoZSB0YWJsZS4KKwkJICogVGhlcmUgd2FzIG5vIGJvdW5kcyB0YWJsZSBwb2ludGVkIHRvIGJ5IHRoZQorCQkgKiBkaXJlY3RvcnksIHNvIGRlY2xhcmUgc3VjY2Vzcy4gIFNvbWVib2R5IGZyZWVkCisJCSAqIGl0LgorCQkgKi8KKwkJaWYgKCFhY3R1YWxfb2xkX3ZhbCkKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBTb21ldGhpbmcgbWVzc2VkIHdpdGggdGhlIGJvdW5kcyBkaXJlY3RvcnkKKwkJICogZW50cnkuICBXZSBob2xkIG1tYXBfc2VtIGZvciByZWFkIG9yIHdyaXRlCisJCSAqIGhlcmUsIHNvIGl0IGNvdWxkIG5vdCBiZSBhIF9uZXdfIGJvdW5kcyB0YWJsZQorCQkgKiB0aGF0IHNvbWVvbmUganVzdCBhbGxvY2F0ZWQuICBTb21ldGhpbmcgaXMKKwkJICogd3JvbmcsIHNvIHBhc3MgdXAgdGhlIGVycm9yIGFuZCBTSUdTRUdWLgorCQkgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBOb3RlLCB3ZSBhcmUgbGlrZWx5IGJlaW5nIGNhbGxlZCB1bmRlciBkb19tdW5tYXAoKSBhbHJlYWR5LiBUbworCSAqIGF2b2lkIHJlY3Vyc2lvbiwgZG9fbXVubWFwKCkgd2lsbCBjaGVjayB3aGV0aGVyIGl0IGNvbWVzCisJICogZnJvbSBvbmUgYm91bmRzIHRhYmxlIHRocm91Z2ggVk1fTVBYIGZsYWcuCisJICovCisJcmV0dXJuIGRvX211bm1hcChtbSwgYnRfYWRkciwgTVBYX0JUX1NJWkVfQllURVMpOworfQorCisvKgorICogSWYgdGhlIGJvdW5kcyB0YWJsZSBwb2ludGVkIGJ5IGJvdW5kcyBkaXJlY3RvcnkgJ2JkX2VudHJ5JyBpcworICogbm90IHNoYXJlZCwgdW5tYXAgdGhpcyB3aG9sZSBib3VuZHMgdGFibGUuIE90aGVyd2lzZSwgb25seSBmcmVlCisgKiB0aG9zZSBiYWNraW5nIHBoeXNpY2FsIHBhZ2VzIG9mIGJvdW5kcyB0YWJsZSBlbnRyaWVzIGNvdmVyZWQKKyAqIGluIHRoaXMgdmlydHVhbCBhZGRyZXNzIHJlZ2lvbiBzdGFydC4uLmVuZC4KKyAqLworc3RhdGljIGludCB1bm1hcF9zaGFyZWRfYnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCWxvbmcgX191c2VyICpiZF9lbnRyeSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgcHJldl9zaGFyZWQsIGJvb2wgbmV4dF9zaGFyZWQpCit7CisJdW5zaWduZWQgbG9uZyBidF9hZGRyOworCWludCByZXQ7CisKKwlyZXQgPSBnZXRfYnRfYWRkcihtbSwgYmRfZW50cnksICZidF9hZGRyKTsKKwkvKgorCSAqIFdlIGNvdWxkIHNlZSBhbiAiZXJyb3IiIHJldCBmb3Igbm90LXByZXNlbnQgYm91bmRzCisJICogdGFibGVzIChub3QgcmVhbGx5IGFuIGVycm9yKSwgb3IgYWN0dWFsIGVycm9ycywgYnV0CisJICogc3RvcCB1bm1hcHBpbmcgZWl0aGVyIHdheS4KKwkgKi8KKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHByZXZfc2hhcmVkICYmIG5leHRfc2hhcmVkKQorCQlyZXQgPSB6YXBfYnRfZW50cmllcyhtbSwgYnRfYWRkciwKKwkJCQlidF9hZGRyK01QWF9HRVRfQlRfRU5UUllfT0ZGU0VUKHN0YXJ0KSwKKwkJCQlidF9hZGRyK01QWF9HRVRfQlRfRU5UUllfT0ZGU0VUKGVuZCkpOworCWVsc2UgaWYgKHByZXZfc2hhcmVkKQorCQlyZXQgPSB6YXBfYnRfZW50cmllcyhtbSwgYnRfYWRkciwKKwkJCQlidF9hZGRyK01QWF9HRVRfQlRfRU5UUllfT0ZGU0VUKHN0YXJ0KSwKKwkJCQlidF9hZGRyK01QWF9CVF9TSVpFX0JZVEVTKTsKKwllbHNlIGlmIChuZXh0X3NoYXJlZCkKKwkJcmV0ID0gemFwX2J0X2VudHJpZXMobW0sIGJ0X2FkZHIsIGJ0X2FkZHIsCisJCQkJYnRfYWRkcitNUFhfR0VUX0JUX0VOVFJZX09GRlNFVChlbmQpKTsKKwllbHNlCisJCXJldCA9IHVubWFwX3NpbmdsZV9idChtbSwgYmRfZW50cnksIGJ0X2FkZHIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEEgdmlydHVhbCBhZGRyZXNzIHJlZ2lvbiBiZWluZyBtdW5tYXAoKWVkIG1pZ2h0IHNoYXJlIGJvdW5kcyB0YWJsZQorICogd2l0aCBhZGphY2VudCBWTUFzLiBXZSBvbmx5IG5lZWQgdG8gZnJlZSB0aGUgYmFja2luZyBwaHlzaWNhbAorICogbWVtb3J5IG9mIHRoZXNlIHNoYXJlZCBib3VuZHMgdGFibGVzIGVudHJpZXMgY292ZXJlZCBpbiB0aGlzIHZpcnR1YWwKKyAqIGFkZHJlc3MgcmVnaW9uLgorICovCitzdGF0aWMgaW50IHVubWFwX2VkZ2VfYnRzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbnQgcmV0OworCWxvbmcgX191c2VyICpiZGVfc3RhcnQsICpiZGVfZW5kOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgKm5leHQ7CisJYm9vbCBwcmV2X3NoYXJlZCA9IGZhbHNlLCBuZXh0X3NoYXJlZCA9IGZhbHNlOworCisJYmRlX3N0YXJ0ID0gbW0tPmJkX2FkZHIgKyBNUFhfR0VUX0JEX0VOVFJZX09GRlNFVChzdGFydCk7CisJYmRlX2VuZCA9IG1tLT5iZF9hZGRyICsgTVBYX0dFVF9CRF9FTlRSWV9PRkZTRVQoZW5kLTEpOworCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIGJkZV9zdGFydCBhbmQgYmRlX2VuZCBhcmUgc2hhcmVkIHdpdGggYWRqYWNlbnQKKwkgKiBWTUFzLgorCSAqCisJICogV2UgYWxyZWFkeSB1bmxpa2VkIHRoZSBWTUFzIGZyb20gdGhlIG1tJ3MgcmJ0cmVlIHNvICdzdGFydCcKKwkgKiBpcyBndWFyYW50ZWVkIHRvIGJlIGluIGEgaG9sZS4gVGhpcyBnZXRzIHVzIHRoZSBmaXJzdCBWTUEKKwkgKiBiZWZvcmUgdGhlIGhvbGUgaW4gdG8gJ3ByZXYnIGFuZCB0aGUgbmV4dCBWTUEgYWZ0ZXIgdGhlIGhvbGUKKwkgKiBpbiB0byAnbmV4dCcuCisJICovCisJbmV4dCA9IGZpbmRfdm1hX3ByZXYobW0sIHN0YXJ0LCAmcHJldik7CisJaWYgKHByZXYgJiYgKG1tLT5iZF9hZGRyICsgTVBYX0dFVF9CRF9FTlRSWV9PRkZTRVQocHJldi0+dm1fZW5kLTEpKQorCQkJPT0gYmRlX3N0YXJ0KQorCQlwcmV2X3NoYXJlZCA9IHRydWU7CisJaWYgKG5leHQgJiYgKG1tLT5iZF9hZGRyICsgTVBYX0dFVF9CRF9FTlRSWV9PRkZTRVQobmV4dC0+dm1fc3RhcnQpKQorCQkJPT0gYmRlX2VuZCkKKwkJbmV4dF9zaGFyZWQgPSB0cnVlOworCisJLyoKKwkgKiBUaGlzIHZpcnR1YWwgYWRkcmVzcyByZWdpb24gYmVpbmcgbXVubWFwKCllZCBpcyBvbmx5CisJICogY292ZXJlZCBieSBvbmUgYm91bmRzIHRhYmxlLgorCSAqCisJICogSW4gdGhpcyBjYXNlLCBpZiB0aGlzIHRhYmxlIGlzIGFsc28gc2hhcmVkIHdpdGggYWRqYWNlbnQKKwkgKiBWTUFzLCBvbmx5IHBhcnQgb2YgdGhlIGJhY2tpbmcgcGh5c2ljYWwgbWVtb3J5IG9mIHRoZSBib3VuZHMKKwkgKiB0YWJsZSBuZWVkIGJlIGZyZWVlZC4gT3RoZXJ3aXNlIHRoZSB3aG9sZSBib3VuZHMgdGFibGUgbmVlZAorCSAqIGJlIHVubWFwcGVkLgorCSAqLworCWlmIChiZGVfc3RhcnQgPT0gYmRlX2VuZCkgeworCQlyZXR1cm4gdW5tYXBfc2hhcmVkX2J0KG1tLCBiZGVfc3RhcnQsIHN0YXJ0LCBlbmQsCisJCQkJcHJldl9zaGFyZWQsIG5leHRfc2hhcmVkKTsKKwl9CisKKwkvKgorCSAqIElmIG1vcmUgdGhhbiBvbmUgYm91bmRzIHRhYmxlcyBhcmUgY292ZXJlZCBpbiB0aGlzIHZpcnR1YWwKKwkgKiBhZGRyZXNzIHJlZ2lvbiBiZWluZyBtdW5tYXAoKWVkLCB3ZSBuZWVkIHRvIHNlcGFyYXRlbHkgY2hlY2sKKwkgKiB3aGV0aGVyIGJkZV9zdGFydCBhbmQgYmRlX2VuZCBhcmUgc2hhcmVkIHdpdGggYWRqYWNlbnQgVk1Bcy4KKwkgKi8KKwlyZXQgPSB1bm1hcF9zaGFyZWRfYnQobW0sIGJkZV9zdGFydCwgc3RhcnQsIGVuZCwgcHJldl9zaGFyZWQsIGZhbHNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IHVubWFwX3NoYXJlZF9idChtbSwgYmRlX2VuZCwgc3RhcnQsIGVuZCwgZmFsc2UsIG5leHRfc2hhcmVkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXB4X3VubWFwX3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaW50IHJldDsKKwlsb25nIF9fdXNlciAqYmRfZW50cnksICpiZGVfc3RhcnQsICpiZGVfZW5kOworCXVuc2lnbmVkIGxvbmcgYnRfYWRkcjsKKworCS8qCisJICogIkVkZ2UiIGJvdW5kcyB0YWJsZXMgYXJlIHRob3NlIHdoaWNoIGFyZSBiZWluZyB1c2VkIGJ5IHRoZSByZWdpb24KKwkgKiAoc3RhcnQgLT4gZW5kKSwgYnV0IHRoYXQgbWF5IGJlIHNoYXJlZCB3aXRoIGFkamFjZW50IGFyZWFzLiAgSWYgdGhleQorCSAqIHR1cm4gb3V0IHRvIGJlIGNvbXBsZXRlbHkgdW5zaGFyZWQsIHRoZXkgd2lsbCBiZSBmcmVlZC4gIElmIHRoZXkgYXJlCisJICogc2hhcmVkLCB3ZSB3aWxsIGZyZWUgdGhlIGJhY2tpbmcgc3RvcmUgKGxpa2UgYW4gTUFEVl9ET05UTkVFRCkgZm9yCisJICogYXJlYXMgdXNlZCBieSB0aGlzIHJlZ2lvbi4KKwkgKi8KKwlyZXQgPSB1bm1hcF9lZGdlX2J0cyhtbSwgc3RhcnQsIGVuZCk7CisJc3dpdGNoIChyZXQpIHsKKwkJLyogbm9uLXByZXNlbnQgdGFibGVzIGFyZSBPSyAqLworCQljYXNlIDA6CisJCWNhc2UgLUVOT0VOVDoKKwkJCS8qIFN1Y2Nlc3MsIG9yIG5vIHRhYmxlcyB0byB1bm1hcCAqLworCQkJYnJlYWs7CisJCWNhc2UgLUVJTlZBTDoKKwkJY2FzZSAtRUZBVUxUOgorCQlkZWZhdWx0OgorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIE9ubHkgdW5tYXAgdGhlIGJvdW5kcyB0YWJsZSB0aGF0IGFyZQorCSAqICAgMS4gZnVsbHkgY292ZXJlZAorCSAqICAgMi4gbm90IGF0IHRoZSBlZGdlcyBvZiB0aGUgbWFwcGluZywgZXZlbiBpZiBmdWxsIGFsaWduZWQKKwkgKi8KKwliZGVfc3RhcnQgPSBtbS0+YmRfYWRkciArIE1QWF9HRVRfQkRfRU5UUllfT0ZGU0VUKHN0YXJ0KTsKKwliZGVfZW5kID0gbW0tPmJkX2FkZHIgKyBNUFhfR0VUX0JEX0VOVFJZX09GRlNFVChlbmQtMSk7CisJZm9yIChiZF9lbnRyeSA9IGJkZV9zdGFydCArIDE7IGJkX2VudHJ5IDwgYmRlX2VuZDsgYmRfZW50cnkrKykgeworCQlyZXQgPSBnZXRfYnRfYWRkcihtbSwgYmRfZW50cnksICZidF9hZGRyKTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJCWNhc2UgMDoKKwkJCQlicmVhazsKKwkJCWNhc2UgLUVOT0VOVDoKKwkJCQkvKiBObyB0YWJsZSBoZXJlLCB0cnkgdGhlIG5leHQgb25lICovCisJCQkJY29udGludWU7CisJCQljYXNlIC1FSU5WQUw6CisJCQljYXNlIC1FRkFVTFQ6CisJCQlkZWZhdWx0OgorCQkJCS8qCisJCQkJICogTm90ZTogd2UgYXJlIGJlaW5nIHN0cmljdCBoZXJlLgorCQkJCSAqIEFueSB0aW1lIHdlIHJ1biBpbiB0byBhbiBpc3N1ZQorCQkJCSAqIHVubWFwcGluZyB0YWJsZXMsIHdlIHN0b3AgYW5kCisJCQkJICogU0lHU0VHVi4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gdW5tYXBfc2luZ2xlX2J0KG1tLCBiZF9lbnRyeSwgYnRfYWRkcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogRnJlZSB1bnVzZWQgYm91bmRzIHRhYmxlcyBjb3ZlcmVkIGluIGEgdmlydHVhbCBhZGRyZXNzIHJlZ2lvbiBiZWluZworICogbXVubWFwKCllZC4gQXNzdW1lIGVuZCA+IHN0YXJ0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgZG9fbXVubWFwKCksIGFuZCB0aGUgVk1BcyBjb3ZlcmluZworICogdGhlIHZpcnR1YWwgYWRkcmVzcyByZWdpb24gc3RhcnQuLi5lbmQgaGF2ZSBhbHJlYWR5IGJlZW4gc3BsaXQgaWYKKyAqIG5lY2Vzc2FyeSwgYW5kIHRoZSAndm1hJyBpcyB0aGUgZmlyc3Qgdm1hIGluIHRoaXMgcmFuZ2UgKHN0YXJ0IC0+IGVuZCkuCisgKi8KK3ZvaWQgbXB4X25vdGlmeV91bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIFJlZnVzZSB0byBkbyBhbnl0aGluZyB1bmxlc3MgdXNlcnNwYWNlIGhhcyBhc2tlZAorCSAqIHRoZSBrZXJuZWwgdG8gaGVscCBtYW5hZ2UgdGhlIGJvdW5kcyB0YWJsZXMsCisJICovCisJaWYgKCFrZXJuZWxfbWFuYWdpbmdfbXB4X3RhYmxlcyhjdXJyZW50LT5tbSkpCisJCXJldHVybjsKKwkvKgorCSAqIFRoaXMgd2lsbCBsb29rIGFjcm9zcyB0aGUgZW50aXJlICdzdGFydCAtPiBlbmQnIHJhbmdlLAorCSAqIGFuZCBmaW5kIGFsbCBvZiB0aGUgbm9uLVZNX01QWCBWTUFzLgorCSAqCisJICogVG8gYXZvaWQgcmVjdXJzaW9uLCBpZiBhIFZNX01QWCB2bWEgaXMgZm91bmQgaW4gdGhlIHJhbmdlCisJICogKHN0YXJ0LT5lbmQpLCB3ZSB3aWxsIG5vdCBjb250aW51ZSBmb2xsb3ctdXAgd29yay4gVGhpcworCSAqIHJlY3Vyc2lvbiByZXByZXNlbnRzIGhhdmluZyBib3VuZHMgdGFibGVzIGZvciBib3VuZHMgdGFibGVzLAorCSAqIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkuIEJlaW5nIHN0cmljdCBhYm91dCBpdCBoZXJlCisJICogaGVscHMgZW5zdXJlIHRoYXQgd2UgZG8gbm90IGhhdmUgYW4gZXhwbG9pdGFibGUgc3RhY2sgb3ZlcmZsb3cuCisJICovCisJZG8geworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX01QWCkKKwkJCXJldHVybjsKKwkJdm1hID0gdm1hLT52bV9uZXh0OworCX0gd2hpbGUgKHZtYSAmJiB2bWEtPnZtX3N0YXJ0IDwgZW5kKTsKKworCXJldCA9IG1weF91bm1hcF90YWJsZXMobW0sIHN0YXJ0LCBlbmQpOworCWlmIChyZXQpCisJCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IDM2ZGUyOTMuLmEzYTVkNDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtNDg1LDE0ICs0ODUsMjMgQEAKIAogCS8qCiAJICogV2UgYXJlIHNhZmUgbm93LiBDaGVjayB3aGV0aGVyIHRoZSBuZXcgcGdwcm90IGlzIHRoZSBzYW1lOgorCSAqIENvbnZlcnQgcHJvdGVjdGlvbiBhdHRyaWJ1dGVzIHRvIDRrLWZvcm1hdCwgYXMgY3BhLT5tYXNrKiBhcmUgc2V0CisJICogdXAgYWNjb3JkaW5nbHkuCiAJICovCiAJb2xkX3B0ZSA9ICprcHRlOwotCW9sZF9wcm90ID0gcmVxX3Byb3QgPSBwdGVfcGdwcm90KG9sZF9wdGUpOworCW9sZF9wcm90ID0gcmVxX3Byb3QgPSBwZ3Byb3RfbGFyZ2VfMl80ayhwdGVfcGdwcm90KG9sZF9wdGUpKTsKIAogCXBncHJvdF92YWwocmVxX3Byb3QpICY9IH5wZ3Byb3RfdmFsKGNwYS0+bWFza19jbHIpOwogCXBncHJvdF92YWwocmVxX3Byb3QpIHw9IHBncHJvdF92YWwoY3BhLT5tYXNrX3NldCk7CiAKIAkvKgorCSAqIHJlcV9wcm90IGlzIGluIGZvcm1hdCBvZiA0ayBwYWdlcy4gSXQgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gbGFyZ2UKKwkgKiBwYWdlIGZvcm1hdDogdGhlIGNhY2hpbmcgbW9kZSBpbmNsdWRlcyB0aGUgUEFUIGJpdCBsb2NhdGVkIGF0CisJICogZGlmZmVyZW50IGJpdCBwb3NpdGlvbnMgaW4gdGhlIHR3byBmb3JtYXRzLgorCSAqLworCXJlcV9wcm90ID0gcGdwcm90XzRrXzJfbGFyZ2UocmVxX3Byb3QpOworCisJLyoKIAkgKiBTZXQgdGhlIFBTRSBhbmQgR0xPQkFMIGZsYWdzIG9ubHkgaWYgdGhlIFBSRVNFTlQgZmxhZyBpcwogCSAqIHNldCBvdGhlcndpc2UgcG1kX3ByZXNlbnQvcG1kX2h1Z2Ugd2lsbCByZXR1cm4gdHJ1ZSBldmVuIG9uCiAJICogYSBub24gcHJlc2VudCBwbWQuIFRoZSBjYW5vbl9wZ3Byb3Qgd2lsbCBjbGVhciBfUEFHRV9HTE9CQUwKQEAgLTU4NSwxMyArNTk0LDEwIEBACiAKIAlwYXJhdmlydF9hbGxvY19wdGUoJmluaXRfbW0sIHBhZ2VfdG9fcGZuKGJhc2UpKTsKIAlyZWZfcHJvdCA9IHB0ZV9wZ3Byb3QocHRlX2Nscmh1Z2UoKmtwdGUpKTsKLQkvKgotCSAqIElmIHdlIGV2ZXIgd2FudCB0byB1dGlsaXplIHRoZSBQQVQgYml0LCB3ZSBuZWVkIHRvCi0JICogdXBkYXRlIHRoaXMgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIGl0J3MgY29udmVydGVkIGZyb20KLQkgKiBiaXQgMTIgdG8gYml0IDcgd2hlbiB3ZSBjcm9zcyBmcm9tIHRoZSAyTUIgbGV2ZWwgdG8KLQkgKiB0aGUgNEsgbGV2ZWw6Ci0JICovCi0JV0FSTl9PTl9PTkNFKHBncHJvdF92YWwocmVmX3Byb3QpICYgX1BBR0VfUEFUX0xBUkdFKTsKKworCS8qIHByb21vdGUgUEFUIGJpdCB0byBjb3JyZWN0IHBvc2l0aW9uICovCisJaWYgKGxldmVsID09IFBHX0xFVkVMXzJNKQorCQlyZWZfcHJvdCA9IHBncHJvdF9sYXJnZV8yXzRrKHJlZl9wcm90KTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAobGV2ZWwgPT0gUEdfTEVWRUxfMUcpIHsKQEAgLTg3OSw2ICs4ODUsNyBAQAogewogCXVuc2lnbmVkIGludCBjdXJfcGFnZXMgPSAwOwogCXBtZF90ICpwbWQ7CisJcGdwcm90X3QgcG1kX3BncHJvdDsKIAogCS8qCiAJICogTm90IG9uIGEgMk0gYm91bmRhcnk/CkBAIC05MTAsNiArOTE3LDggQEAKIAlpZiAobnVtX3BhZ2VzID09IGN1cl9wYWdlcykKIAkJcmV0dXJuIGN1cl9wYWdlczsKIAorCXBtZF9wZ3Byb3QgPSBwZ3Byb3RfNGtfMl9sYXJnZShwZ3Byb3QpOworCiAJd2hpbGUgKGVuZCAtIHN0YXJ0ID49IFBNRF9TSVpFKSB7CiAKIAkJLyoKQEAgLTkyMSw3ICs5MzAsOCBAQAogCiAJCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBzdGFydCk7CiAKLQkJc2V0X3BtZChwbWQsIF9fcG1kKGNwYS0+cGZuIHwgX1BBR0VfUFNFIHwgbWFzc2FnZV9wZ3Byb3QocGdwcm90KSkpOworCQlzZXRfcG1kKHBtZCwgX19wbWQoY3BhLT5wZm4gfCBfUEFHRV9QU0UgfAorCQkJCSAgIG1hc3NhZ2VfcGdwcm90KHBtZF9wZ3Byb3QpKSk7CiAKIAkJc3RhcnQJICArPSBQTURfU0laRTsKIAkJY3BhLT5wZm4gICs9IFBNRF9TSVpFOwpAQCAtOTQ5LDYgKzk1OSw3IEBACiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKIAlpbnQgY3VyX3BhZ2VzID0gMDsKKwlwZ3Byb3RfdCBwdWRfcGdwcm90OwogCiAJZW5kID0gc3RhcnQgKyAoY3BhLT5udW1wYWdlcyA8PCBQQUdFX1NISUZUKTsKIApAQCAtOTg2LDEyICs5OTcsMTQgQEAKIAkJcmV0dXJuIGN1cl9wYWdlczsKIAogCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBzdGFydCk7CisJcHVkX3BncHJvdCA9IHBncHJvdF80a18yX2xhcmdlKHBncHJvdCk7CiAKIAkvKgogCSAqIE1hcCBldmVyeXRoaW5nIHN0YXJ0aW5nIGZyb20gdGhlIEdiIGJvdW5kYXJ5LCBwb3NzaWJseSB3aXRoIDFHIHBhZ2VzCiAJICovCiAJd2hpbGUgKGVuZCAtIHN0YXJ0ID49IFBVRF9TSVpFKSB7Ci0JCXNldF9wdWQocHVkLCBfX3B1ZChjcGEtPnBmbiB8IF9QQUdFX1BTRSB8IG1hc3NhZ2VfcGdwcm90KHBncHJvdCkpKTsKKwkJc2V0X3B1ZChwdWQsIF9fcHVkKGNwYS0+cGZuIHwgX1BBR0VfUFNFIHwKKwkJCQkgICBtYXNzYWdlX3BncHJvdChwdWRfcGdwcm90KSkpOwogCiAJCXN0YXJ0CSAgKz0gUFVEX1NJWkU7CiAJCWNwYS0+cGZuICArPSBQVURfU0laRTsKQEAgLTEzMDQsMTIgKzEzMTcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjYWNoZV9hdHRyKHBncHJvdF90IGF0dHIpCi17Ci0JcmV0dXJuIHBncHJvdF92YWwoYXR0cikgJgotCQkoX1BBR0VfUEFUIHwgX1BBR0VfUEFUX0xBUkdFIHwgX1BBR0VfUFdUIHwgX1BBR0VfUENEKTsKLX0KLQogc3RhdGljIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLAogCQkJCSAgICBwZ3Byb3RfdCBtYXNrX3NldCwgcGdwcm90X3QgbWFza19jbHIsCiAJCQkJICAgIGludCBmb3JjZV9zcGxpdCwgaW50IGluX2ZsYWcsCkBAIC0xMzkwLDcgKzEzOTcsNyBAQAogCSAqIE5vIG5lZWQgdG8gZmx1c2gsIHdoZW4gd2UgZGlkIG5vdCBzZXQgYW55IG9mIHRoZSBjYWNoaW5nCiAJICogYXR0cmlidXRlczoKIAkgKi8KLQljYWNoZSA9IGNhY2hlX2F0dHIobWFza19zZXQpOworCWNhY2hlID0gISFwZ3Byb3QyY2FjaGVtb2RlKG1hc2tfc2V0KTsKIAogCS8qCiAJICogT24gc3VjY2VzcyB3ZSB1c2UgQ0xGTFVTSCwgd2hlbiB0aGUgQ1BVIHN1cHBvcnRzIGl0IHRvCkBAIC0xNDQ1LDcgKzE0NTIsOCBAQAogCSAqIGZvciBub3cgVUMgTUlOVVMuIHNlZSBjb21tZW50cyBpbiBpb3JlbWFwX25vY2FjaGUoKQogCSAqLwogCXJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldCgmYWRkciwgbnVtcGFnZXMsCi0JCQkJICAgIF9fcGdwcm90KF9QQUdFX0NBQ0hFX1VDX01JTlVTKSwgMCk7CisJCQkJICAgIGNhY2hlbW9kZTJwZ3Byb3QoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUyksCisJCQkJICAgIDApOwogfQogCiBpbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKQEAgLTE0NTYsNyArMTQ2NCw3IEBACiAJICogZm9yIG5vdyBVQyBNSU5VUy4gc2VlIGNvbW1lbnRzIGluIGlvcmVtYXBfbm9jYWNoZSgpCiAJICovCiAJcmV0ID0gcmVzZXJ2ZV9tZW10eXBlKF9fcGEoYWRkciksIF9fcGEoYWRkcikgKyBudW1wYWdlcyAqIFBBR0VfU0laRSwKLQkJCSAgICBfUEFHRV9DQUNIRV9VQ19NSU5VUywgTlVMTCk7CisJCQkgICAgICBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTLCBOVUxMKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9lcnI7CiAKQEAgLTE0NzQsNyArMTQ4Miw3IEBACiBFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfdWMpOwogCiBzdGF0aWMgaW50IF9zZXRfbWVtb3J5X2FycmF5KHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBhZGRyaW5hcnJheSwKLQkJdW5zaWduZWQgbG9uZyBuZXdfdHlwZSkKKwkJZW51bSBwYWdlX2NhY2hlX21vZGUgbmV3X3R5cGUpCiB7CiAJaW50IGksIGo7CiAJaW50IHJldDsKQEAgLTE0OTAsMTEgKzE0OTgsMTMgQEAKIAl9CiAKIAlyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldChhZGRyLCBhZGRyaW5hcnJheSwKLQkJCQkgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfVUNfTUlOVVMpLCAxKTsKKwkJCQkgICBjYWNoZW1vZGUycGdwcm90KF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpLAorCQkJCSAgIDEpOwogCi0JaWYgKCFyZXQgJiYgbmV3X3R5cGUgPT0gX1BBR0VfQ0FDSEVfV0MpCisJaWYgKCFyZXQgJiYgbmV3X3R5cGUgPT0gX1BBR0VfQ0FDSEVfTU9ERV9XQykKIAkJcmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIGFkZHJpbmFycmF5LAotCQkJCQkgICAgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfV0MpLAorCQkJCQkgICAgICAgY2FjaGVtb2RlMnBncHJvdCgKKwkJCQkJCV9QQUdFX0NBQ0hFX01PREVfV0MpLAogCQkJCQkgICAgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfTUFTSyksCiAJCQkJCSAgICAgICAwLCBDUEFfQVJSQVksIE5VTEwpOwogCWlmIChyZXQpCkBAIC0xNTExLDEzICsxNTIxLDEzIEBACiAKIGludCBzZXRfbWVtb3J5X2FycmF5X3VjKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBhZGRyaW5hcnJheSkKIHsKLQlyZXR1cm4gX3NldF9tZW1vcnlfYXJyYXkoYWRkciwgYWRkcmluYXJyYXksIF9QQUdFX0NBQ0hFX1VDX01JTlVTKTsKKwlyZXR1cm4gX3NldF9tZW1vcnlfYXJyYXkoYWRkciwgYWRkcmluYXJyYXksIF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpOwogfQogRVhQT1JUX1NZTUJPTChzZXRfbWVtb3J5X2FycmF5X3VjKTsKIAogaW50IHNldF9tZW1vcnlfYXJyYXlfd2ModW5zaWduZWQgbG9uZyAqYWRkciwgaW50IGFkZHJpbmFycmF5KQogewotCXJldHVybiBfc2V0X21lbW9yeV9hcnJheShhZGRyLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfV0MpOworCXJldHVybiBfc2V0X21lbW9yeV9hcnJheShhZGRyLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfTU9ERV9XQyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfYXJyYXlfd2MpOwogCkBAIC0xNTI3LDEwICsxNTM3LDEyIEBACiAJdW5zaWduZWQgbG9uZyBhZGRyX2NvcHkgPSBhZGRyOwogCiAJcmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXQoJmFkZHIsIG51bXBhZ2VzLAotCQkJCSAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9VQ19NSU5VUyksIDApOworCQkJCSAgIGNhY2hlbW9kZTJwZ3Byb3QoX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUyksCisJCQkJICAgMCk7CiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhZGRyX2NvcHksIG51bXBhZ2VzLAotCQkJCQkgICAgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfV0MpLAorCQkJCQkgICAgICAgY2FjaGVtb2RlMnBncHJvdCgKKwkJCQkJCV9QQUdFX0NBQ0hFX01PREVfV0MpLAogCQkJCQkgICAgICAgX19wZ3Byb3QoX1BBR0VfQ0FDSEVfTUFTSyksCiAJCQkJCSAgICAgICAwLCAwLCBOVUxMKTsKIAl9CkBAIC0xNTQ1LDcgKzE1NTcsNyBAQAogCQlyZXR1cm4gc2V0X21lbW9yeV91YyhhZGRyLCBudW1wYWdlcyk7CiAKIAlyZXQgPSByZXNlcnZlX21lbXR5cGUoX19wYShhZGRyKSwgX19wYShhZGRyKSArIG51bXBhZ2VzICogUEFHRV9TSVpFLAotCQlfUEFHRV9DQUNIRV9XQywgTlVMTCk7CisJCV9QQUdFX0NBQ0hFX01PREVfV0MsIE5VTEwpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtMTU2NCw2ICsxNTc2LDcgQEAKIAogaW50IF9zZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKQogeworCS8qIFdCIGNhY2hlIG1vZGUgaXMgaGFyZCB3aXJlZCB0byBhbGwgY2FjaGUgYXR0cmlidXRlIGJpdHMgYmVpbmcgMCAqLwogCXJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKCZhZGRyLCBudW1wYWdlcywKIAkJCQkgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSwgMCk7CiB9CkBAIC0xNTg2LDYgKzE1OTksNyBAQAogCWludCBpOwogCWludCByZXQ7CiAKKwkvKiBXQiBjYWNoZSBtb2RlIGlzIGhhcmQgd2lyZWQgdG8gYWxsIGNhY2hlIGF0dHJpYnV0ZSBiaXRzIGJlaW5nIDAgKi8KIAlyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKGFkZHIsIGFkZHJpbmFycmF5LAogCQkJCSAgICAgIF9fcGdwcm90KF9QQUdFX0NBQ0hFX01BU0spLCAxKTsKIAlpZiAocmV0KQpAQCAtMTY0OCw3ICsxNjYyLDcgQEAKIEVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX3VjKTsKIAogc3RhdGljIGludCBfc2V0X3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBhZGRyaW5hcnJheSwKLQkJdW5zaWduZWQgbG9uZyBuZXdfdHlwZSkKKwkJZW51bSBwYWdlX2NhY2hlX21vZGUgbmV3X3R5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKQEAgLTE2NjYsMTAgKzE2ODAsMTEgQEAKIAl9CiAKIAlyZXQgPSBjcGFfc2V0X3BhZ2VzX2FycmF5KHBhZ2VzLCBhZGRyaW5hcnJheSwKLQkJCV9fcGdwcm90KF9QQUdFX0NBQ0hFX1VDX01JTlVTKSk7Ci0JaWYgKCFyZXQgJiYgbmV3X3R5cGUgPT0gX1BBR0VfQ0FDSEVfV0MpCisJCQljYWNoZW1vZGUycGdwcm90KF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpKTsKKwlpZiAoIXJldCAmJiBuZXdfdHlwZSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dDKQogCQlyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgYWRkcmluYXJyYXksCi0JCQkJCSAgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9XQyksCisJCQkJCSAgICAgICBjYWNoZW1vZGUycGdwcm90KAorCQkJCQkJX1BBR0VfQ0FDSEVfTU9ERV9XQyksCiAJCQkJCSAgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSwKIAkJCQkJICAgICAgIDAsIENQQV9QQUdFU19BUlJBWSwgcGFnZXMpOwogCWlmIChyZXQpCkBAIC0xNjg5LDEzICsxNzA0LDEzIEBACiAKIGludCBzZXRfcGFnZXNfYXJyYXlfdWMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KQogewotCXJldHVybiBfc2V0X3BhZ2VzX2FycmF5KHBhZ2VzLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfVUNfTUlOVVMpOworCXJldHVybiBfc2V0X3BhZ2VzX2FycmF5KHBhZ2VzLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9wYWdlc19hcnJheV91Yyk7CiAKIGludCBzZXRfcGFnZXNfYXJyYXlfd2Moc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KQogewotCXJldHVybiBfc2V0X3BhZ2VzX2FycmF5KHBhZ2VzLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfV0MpOworCXJldHVybiBfc2V0X3BhZ2VzX2FycmF5KHBhZ2VzLCBhZGRyaW5hcnJheSwgX1BBR0VfQ0FDSEVfTU9ERV9XQyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9wYWdlc19hcnJheV93Yyk7CiAKQEAgLTE3MTQsNiArMTcyOSw3IEBACiAJdW5zaWduZWQgbG9uZyBlbmQ7CiAJaW50IGk7CiAKKwkvKiBXQiBjYWNoZSBtb2RlIGlzIGhhcmQgd2lyZWQgdG8gYWxsIGNhY2hlIGF0dHJpYnV0ZSBiaXRzIGJlaW5nIDAgKi8KIAlyZXR2YWwgPSBjcGFfY2xlYXJfcGFnZXNfYXJyYXkocGFnZXMsIGFkZHJpbmFycmF5LAogCQkJX19wZ3Byb3QoX1BBR0VfQ0FDSEVfTUFTSykpOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQuYyBiL2FyY2gveDg2L21tL3BhdC5jCmluZGV4IDY1NzQzODguLmVkZjI5OWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhdC5jCisrKyBiL2FyY2gveDg2L21tL3BhdC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJwYXRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJtbV9pbnRlcm5hbC5oIgogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQVQKIGludCBfX3JlYWRfbW9zdGx5IHBhdF9lbmFibGVkID0gMTsKQEAgLTY2LDYgKzY3LDc1IEBACiAKIHN0YXRpYyB1NjQgX19yZWFkX21vc3RseSBib290X3BhdF9zdGF0ZTsKIAorI2lmZGVmIENPTkZJR19YODZfUEFUCisvKgorICogWDg2IFBBVCB1c2VzIHBhZ2UgZmxhZ3MgV0MgYW5kIFVuY2FjaGVkIHRvZ2V0aGVyIHRvIGtlZXAgdHJhY2sgb2YKKyAqIG1lbW9yeSB0eXBlIG9mIHBhZ2VzIHRoYXQgaGF2ZSBiYWNraW5nIHBhZ2Ugc3RydWN0LiBYODYgUEFUIHN1cHBvcnRzIDMKKyAqIGRpZmZlcmVudCBtZW1vcnkgdHlwZXMsIF9QQUdFX0NBQ0hFX01PREVfV0IsIF9QQUdFX0NBQ0hFX01PREVfV0MgYW5kCisgKiBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTIGFuZCBmb3VydGggc3RhdGUgd2hlcmUgcGFnZSdzIG1lbW9yeSB0eXBlIGhhcyBub3QKKyAqIGJlZW4gY2hhbmdlZCBmcm9tIGl0cyBkZWZhdWx0ICh2YWx1ZSBvZiAtMSB1c2VkIHRvIGRlbm90ZSB0aGlzKS4KKyAqIE5vdGUgd2UgZG8gbm90IHN1cHBvcnQgX1BBR0VfQ0FDSEVfTU9ERV9VQyBoZXJlLgorICovCisKKyNkZWZpbmUgX1BHTVRfREVGQVVMVAkJMAorI2RlZmluZSBfUEdNVF9XQwkJKDFVTCA8PCBQR19hcmNoXzEpCisjZGVmaW5lIF9QR01UX1VDX01JTlVTCQkoMVVMIDw8IFBHX3VuY2FjaGVkKQorI2RlZmluZSBfUEdNVF9XQgkJKDFVTCA8PCBQR191bmNhY2hlZCB8IDFVTCA8PCBQR19hcmNoXzEpCisjZGVmaW5lIF9QR01UX01BU0sJCSgxVUwgPDwgUEdfdW5jYWNoZWQgfCAxVUwgPDwgUEdfYXJjaF8xKQorI2RlZmluZSBfUEdNVF9DTEVBUl9NQVNLCSh+X1BHTVRfTUFTSykKKworc3RhdGljIGlubGluZSBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBnZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZykKK3sKKwl1bnNpZ25lZCBsb25nIHBnX2ZsYWdzID0gcGctPmZsYWdzICYgX1BHTVRfTUFTSzsKKworCWlmIChwZ19mbGFncyA9PSBfUEdNVF9ERUZBVUxUKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAocGdfZmxhZ3MgPT0gX1BHTVRfV0MpCisJCXJldHVybiBfUEFHRV9DQUNIRV9NT0RFX1dDOworCWVsc2UgaWYgKHBnX2ZsYWdzID09IF9QR01UX1VDX01JTlVTKQorCQlyZXR1cm4gX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUzsKKwllbHNlCisJCXJldHVybiBfUEFHRV9DQUNIRV9NT0RFX1dCOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbWVtdHlwZShzdHJ1Y3QgcGFnZSAqcGcsCisJCQkJICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlIG1lbXR5cGUpCit7CisJdW5zaWduZWQgbG9uZyBtZW10eXBlX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgb2xkX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzOworCisJc3dpdGNoIChtZW10eXBlKSB7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dDOgorCQltZW10eXBlX2ZsYWdzID0gX1BHTVRfV0M7CisJCWJyZWFrOworCWNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9VQ19NSU5VUzoKKwkJbWVtdHlwZV9mbGFncyA9IF9QR01UX1VDX01JTlVTOworCQlicmVhazsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfV0I6CisJCW1lbXR5cGVfZmxhZ3MgPSBfUEdNVF9XQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWVtdHlwZV9mbGFncyA9IF9QR01UX0RFRkFVTFQ7CisJCWJyZWFrOworCX0KKworCWRvIHsKKwkJb2xkX2ZsYWdzID0gcGctPmZsYWdzOworCQluZXdfZmxhZ3MgPSAob2xkX2ZsYWdzICYgX1BHTVRfQ0xFQVJfTUFTSykgfCBtZW10eXBlX2ZsYWdzOworCX0gd2hpbGUgKGNtcHhjaGcoJnBnLT5mbGFncywgb2xkX2ZsYWdzLCBuZXdfZmxhZ3MpICE9IG9sZF9mbGFncyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBnZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZykKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbWVtdHlwZShzdHJ1Y3QgcGFnZSAqcGcsCisJCQkJICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlIG1lbXR5cGUpCit7Cit9CisjZW5kaWYKKwogZW51bSB7CiAJUEFUX1VDID0gMCwJCS8qIHVuY2FjaGVkICovCiAJUEFUX1dDID0gMSwJCS8qIFdyaXRlIGNvbWJpbmluZyAqLwpAQCAtNzUsNiArMTQ1LDUyIEBACiAJUEFUX1VDX01JTlVTID0gNywJLyogVUMsIGJ1dCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IE1UUlIgKi8KIH07CiAKKyNkZWZpbmUgQ00oYykgKF9QQUdFX0NBQ0hFX01PREVfICMjIGMpCisKK3N0YXRpYyBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBwYXRfZ2V0X2NhY2hlX21vZGUodW5zaWduZWQgcGF0X3ZhbCwgY2hhciAqbXNnKQoreworCWVudW0gcGFnZV9jYWNoZV9tb2RlIGNhY2hlOworCWNoYXIgKmNhY2hlX21vZGU7CisKKwlzd2l0Y2ggKHBhdF92YWwpIHsKKwljYXNlIFBBVF9VQzogICAgICAgY2FjaGUgPSBDTShVQyk7ICAgICAgIGNhY2hlX21vZGUgPSAiVUMgICI7IGJyZWFrOworCWNhc2UgUEFUX1dDOiAgICAgICBjYWNoZSA9IENNKFdDKTsgICAgICAgY2FjaGVfbW9kZSA9ICJXQyAgIjsgYnJlYWs7CisJY2FzZSBQQVRfV1Q6ICAgICAgIGNhY2hlID0gQ00oV1QpOyAgICAgICBjYWNoZV9tb2RlID0gIldUICAiOyBicmVhazsKKwljYXNlIFBBVF9XUDogICAgICAgY2FjaGUgPSBDTShXUCk7ICAgICAgIGNhY2hlX21vZGUgPSAiV1AgICI7IGJyZWFrOworCWNhc2UgUEFUX1dCOiAgICAgICBjYWNoZSA9IENNKFdCKTsgICAgICAgY2FjaGVfbW9kZSA9ICJXQiAgIjsgYnJlYWs7CisJY2FzZSBQQVRfVUNfTUlOVVM6IGNhY2hlID0gQ00oVUNfTUlOVVMpOyBjYWNoZV9tb2RlID0gIlVDLSAiOyBicmVhazsKKwlkZWZhdWx0OiAgICAgICAgICAgY2FjaGUgPSBDTShXQik7ICAgICAgIGNhY2hlX21vZGUgPSAiV0IgICI7IGJyZWFrOworCX0KKworCW1lbWNweShtc2csIGNhY2hlX21vZGUsIDQpOworCisJcmV0dXJuIGNhY2hlOworfQorCisjdW5kZWYgQ00KKworLyoKKyAqIFVwZGF0ZSB0aGUgY2FjaGUgbW9kZSB0byBwZ3Byb3QgdHJhbnNsYXRpb24gdGFibGVzIGFjY29yZGluZyB0byBQQVQKKyAqIGNvbmZpZ3VyYXRpb24uCisgKiBVc2luZyBsb3dlciBpbmRpY2VzIGlzIHByZWZlcnJlZCwgc28gd2Ugc3RhcnQgd2l0aCBoaWdoZXN0IGluZGV4LgorICovCit2b2lkIHBhdF9pbml0X2NhY2hlX21vZGVzKHZvaWQpCit7CisJaW50IGk7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgY2FjaGU7CisJY2hhciBwYXRfbXNnWzMzXTsKKwl1NjQgcGF0OworCisJcmRtc3JsKE1TUl9JQTMyX0NSX1BBVCwgcGF0KTsKKwlwYXRfbXNnWzMyXSA9IDA7CisJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJY2FjaGUgPSBwYXRfZ2V0X2NhY2hlX21vZGUoKHBhdCA+PiAoaSAqIDgpKSAmIDcsCisJCQkJCSAgIHBhdF9tc2cgKyA0ICogaSk7CisJCXVwZGF0ZV9jYWNoZV9tb2RlX2VudHJ5KGksIGNhY2hlKTsKKwl9CisJcHJfaW5mbygiUEFUIGNvbmZpZ3VyYXRpb24gWzAtN106ICVzXG4iLCBwYXRfbXNnKTsKK30KKwogI2RlZmluZSBQQVQoeCwgeSkJKCh1NjQpUEFUXyAjIyB5IDw8ICgoeCkqOCkpCiAKIHZvaWQgcGF0X2luaXQodm9pZCkKQEAgLTEyNCw4ICsyNDAsNyBAQAogCXdybXNybChNU1JfSUEzMl9DUl9QQVQsIHBhdCk7CiAKIAlpZiAoYm9vdF9jcHUpCi0JCXByaW50ayhLRVJOX0lORk8gIng4NiBQQVQgZW5hYmxlZDogY3B1ICVkLCBvbGQgMHglTHgsIG5ldyAweCVMeFxuIiwKLQkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgYm9vdF9wYXRfc3RhdGUsIHBhdCk7CisJCXBhdF9pbml0X2NhY2hlX21vZGVzKCk7CiB9CiAKICN1bmRlZiBQQVQKQEAgLTEzOSwyMCArMjU0LDIxIEBACiAgKiBUaGUgaW50ZXJzZWN0aW9uIGlzIGJhc2VkIG9uICJFZmZlY3RpdmUgTWVtb3J5IFR5cGUiIHRhYmxlcyBpbiBJQS0zMgogICogU0RNIHZvbCAzYQogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYXRfeF9tdHJyX3R5cGUodTY0IHN0YXJ0LCB1NjQgZW5kLCB1bnNpZ25lZCBsb25nIHJlcV90eXBlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcGF0X3hfbXRycl90eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwKKwkJCQkgICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlIHJlcV90eXBlKQogewogCS8qCiAJICogTG9vayBmb3IgTVRSUiBoaW50IHRvIGdldCB0aGUgZWZmZWN0aXZlIHR5cGUgaW4gY2FzZSB3aGVyZSBQQVQKIAkgKiByZXF1ZXN0IGlzIGZvciBXQi4KIAkgKi8KLQlpZiAocmVxX3R5cGUgPT0gX1BBR0VfQ0FDSEVfV0IpIHsKKwlpZiAocmVxX3R5cGUgPT0gX1BBR0VfQ0FDSEVfTU9ERV9XQikgewogCQl1OCBtdHJyX3R5cGU7CiAKIAkJbXRycl90eXBlID0gbXRycl90eXBlX2xvb2t1cChzdGFydCwgZW5kKTsKIAkJaWYgKG10cnJfdHlwZSAhPSBNVFJSX1RZUEVfV1JCQUNLKQotCQkJcmV0dXJuIF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCQkJcmV0dXJuIF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAKLQkJcmV0dXJuIF9QQUdFX0NBQ0hFX1dCOworCQlyZXR1cm4gX1BBR0VfQ0FDSEVfTU9ERV9XQjsKIAl9CiAKIAlyZXR1cm4gcmVxX3R5cGU7CkBAIC0yMDcsMjUgKzMyMywyNiBAQAogICogLSBGaW5kIHRoZSBtZW10eXBlIG9mIGFsbCB0aGUgcGFnZXMgaW4gdGhlIHJhbmdlLCBsb29rIGZvciBhbnkgY29uZmxpY3RzCiAgKiAtIEluIGNhc2Ugb2Ygbm8gY29uZmxpY3RzLCBzZXQgdGhlIG5ldyBtZW10eXBlIGZvciBwYWdlcyBpbiB0aGUgcmFuZ2UKICAqLwotc3RhdGljIGludCByZXNlcnZlX3JhbV9wYWdlc190eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwgdW5zaWduZWQgbG9uZyByZXFfdHlwZSwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgKm5ld190eXBlKQorc3RhdGljIGludCByZXNlcnZlX3JhbV9wYWdlc190eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwKKwkJCQkgIGVudW0gcGFnZV9jYWNoZV9tb2RlIHJlcV90eXBlLAorCQkJCSAgZW51bSBwYWdlX2NhY2hlX21vZGUgKm5ld190eXBlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXU2NCBwZm47CiAKLQlpZiAocmVxX3R5cGUgPT0gX1BBR0VfQ0FDSEVfVUMpIHsKKwlpZiAocmVxX3R5cGUgPT0gX1BBR0VfQ0FDSEVfTU9ERV9VQykgewogCQkvKiBXZSBkbyBub3Qgc3VwcG9ydCBzdHJvbmcgVUMgKi8KIAkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXFfdHlwZSA9IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCQlyZXFfdHlwZSA9IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAJfQogCiAJZm9yIChwZm4gPSAoc3RhcnQgPj4gUEFHRV9TSElGVCk7IHBmbiA8IChlbmQgPj4gUEFHRV9TSElGVCk7ICsrcGZuKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdHlwZTsKKwkJZW51bSBwYWdlX2NhY2hlX21vZGUgdHlwZTsKIAogCQlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAkJdHlwZSA9IGdldF9wYWdlX21lbXR5cGUocGFnZSk7CiAJCWlmICh0eXBlICE9IC0xKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJyZXNlcnZlX3JhbV9wYWdlc190eXBlIGZhaWxlZCBbbWVtICUjMDEwTHgtJSMwMTBMeF0sIHRyYWNrIDB4JWx4LCByZXEgMHglbHhcbiIsCisJCQlwcl9pbmZvKCJyZXNlcnZlX3JhbV9wYWdlc190eXBlIGZhaWxlZCBbbWVtICUjMDEwTHgtJSMwMTBMeF0sIHRyYWNrIDB4JXgsIHJlcSAweCV4XG4iLAogCQkJCXN0YXJ0LCBlbmQgLSAxLCB0eXBlLCByZXFfdHlwZSk7CiAJCQlpZiAobmV3X3R5cGUpCiAJCQkJKm5ld190eXBlID0gdHlwZTsKQEAgLTI1OCwyMSArMzc1LDIxIEBACiAKIC8qCiAgKiByZXFfdHlwZSB0eXBpY2FsbHkgaGFzIG9uZSBvZiB0aGU6Ci0gKiAtIF9QQUdFX0NBQ0hFX1dCCi0gKiAtIF9QQUdFX0NBQ0hFX1dDCi0gKiAtIF9QQUdFX0NBQ0hFX1VDX01JTlVTCi0gKiAtIF9QQUdFX0NBQ0hFX1VDCisgKiAtIF9QQUdFX0NBQ0hFX01PREVfV0IKKyAqIC0gX1BBR0VfQ0FDSEVfTU9ERV9XQworICogLSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTCisgKiAtIF9QQUdFX0NBQ0hFX01PREVfVUMKICAqCiAgKiBJZiBuZXdfdHlwZSBpcyBOVUxMLCBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBlcnJvciBpZiBpdCBjYW5ub3QgcmVzZXJ2ZSB0aGUKICAqIHJlZ2lvbiB3aXRoIHJlcV90eXBlLiBJZiBuZXdfdHlwZSBpcyBub24tTlVMTCwgZnVuY3Rpb24gd2lsbCByZXR1cm4KICAqIGF2YWlsYWJsZSB0eXBlIGluIG5ld190eXBlIGluIGNhc2Ugb2Ygbm8gZXJyb3IuIEluIGNhc2Ugb2YgYW55IGVycm9yCiAgKiBpdCB3aWxsIHJldHVybiBhIG5lZ2F0aXZlIHJldHVybiB2YWx1ZS4KICAqLwotaW50IHJlc2VydmVfbWVtdHlwZSh1NjQgc3RhcnQsIHU2NCBlbmQsIHVuc2lnbmVkIGxvbmcgcmVxX3R5cGUsCi0JCSAgICB1bnNpZ25lZCBsb25nICpuZXdfdHlwZSkKK2ludCByZXNlcnZlX21lbXR5cGUodTY0IHN0YXJ0LCB1NjQgZW5kLCBlbnVtIHBhZ2VfY2FjaGVfbW9kZSByZXFfdHlwZSwKKwkJICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlICpuZXdfdHlwZSkKIHsKIAlzdHJ1Y3QgbWVtdHlwZSAqbmV3OwotCXVuc2lnbmVkIGxvbmcgYWN0dWFsX3R5cGU7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgYWN0dWFsX3R5cGU7CiAJaW50IGlzX3JhbmdlX3JhbTsKIAlpbnQgZXJyID0gMDsKIApAQCAtMjgxLDEwICszOTgsMTAgQEAKIAlpZiAoIXBhdF9lbmFibGVkKSB7CiAJCS8qIFRoaXMgaXMgaWRlbnRpY2FsIHRvIHBhZ2UgdGFibGUgc2V0dGluZyB3aXRob3V0IFBBVCAqLwogCQlpZiAobmV3X3R5cGUpIHsKLQkJCWlmIChyZXFfdHlwZSA9PSBfUEFHRV9DQUNIRV9XQykKLQkJCQkqbmV3X3R5cGUgPSBfUEFHRV9DQUNIRV9VQ19NSU5VUzsKKwkJCWlmIChyZXFfdHlwZSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dDKQorCQkJCSpuZXdfdHlwZSA9IF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVM7CiAJCQllbHNlCi0JCQkJKm5ld190eXBlID0gcmVxX3R5cGUgJiBfUEFHRV9DQUNIRV9NQVNLOworCQkJCSpuZXdfdHlwZSA9IHJlcV90eXBlOwogCQl9CiAJCXJldHVybiAwOwogCX0KQEAgLTI5Miw3ICs0MDksNyBAQAogCS8qIExvdyBJU0EgcmVnaW9uIGlzIGFsd2F5cyBtYXBwZWQgV0IgaW4gcGFnZSB0YWJsZS4gTm8gbmVlZCB0byB0cmFjayAqLwogCWlmICh4ODZfcGxhdGZvcm0uaXNfdW50cmFja2VkX3BhdF9yYW5nZShzdGFydCwgZW5kKSkgewogCQlpZiAobmV3X3R5cGUpCi0JCQkqbmV3X3R5cGUgPSBfUEFHRV9DQUNIRV9XQjsKKwkJCSpuZXdfdHlwZSA9IF9QQUdFX0NBQ0hFX01PREVfV0I7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzAyLDcgKzQxOSw3IEBACiAJICogdG9vbHMgYW5kIEFDUEkgdG9vbHMpLiBVc2UgV0IgcmVxdWVzdCBmb3IgV0IgbWVtb3J5IGFuZCB1c2UKIAkgKiBVQ19NSU5VUyBvdGhlcndpc2UuCiAJICovCi0JYWN0dWFsX3R5cGUgPSBwYXRfeF9tdHJyX3R5cGUoc3RhcnQsIGVuZCwgcmVxX3R5cGUgJiBfUEFHRV9DQUNIRV9NQVNLKTsKKwlhY3R1YWxfdHlwZSA9IHBhdF94X210cnJfdHlwZShzdGFydCwgZW5kLCByZXFfdHlwZSk7CiAKIAlpZiAobmV3X3R5cGUpCiAJCSpuZXdfdHlwZSA9IGFjdHVhbF90eXBlOwpAQCAtMzk0LDEyICs1MTEsMTIgQEAKICAqCiAgKiBPbmx5IHRvIGJlIGNhbGxlZCB3aGVuIFBBVCBpcyBlbmFibGVkCiAgKgotICogUmV0dXJucyBfUEFHRV9DQUNIRV9XQiwgX1BBR0VfQ0FDSEVfV0MsIF9QQUdFX0NBQ0hFX1VDX01JTlVTIG9yCi0gKiBfUEFHRV9DQUNIRV9VQworICogUmV0dXJucyBfUEFHRV9DQUNIRV9NT0RFX1dCLCBfUEFHRV9DQUNIRV9NT0RFX1dDLCBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTCisgKiBvciBfUEFHRV9DQUNIRV9NT0RFX1VDCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvb2t1cF9tZW10eXBlKHU2NCBwYWRkcikKK3N0YXRpYyBlbnVtIHBhZ2VfY2FjaGVfbW9kZSBsb29rdXBfbWVtdHlwZSh1NjQgcGFkZHIpCiB7Ci0JaW50IHJldHR5cGUgPSBfUEFHRV9DQUNIRV9XQjsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSByZXR0eXBlID0gX1BBR0VfQ0FDSEVfTU9ERV9XQjsKIAlzdHJ1Y3QgbWVtdHlwZSAqZW50cnk7CiAKIAlpZiAoeDg2X3BsYXRmb3JtLmlzX3VudHJhY2tlZF9wYXRfcmFuZ2UocGFkZHIsIHBhZGRyICsgUEFHRV9TSVpFKSkKQEAgLTQxNCw3ICs1MzEsNyBAQAogCQkgKiBkZWZhdWx0IHN0YXRlIGFuZCBub3QgcmVzZXJ2ZWQsIGFuZCBoZW5jZSBvZiB0eXBlIFdCCiAJCSAqLwogCQlpZiAocmV0dHlwZSA9PSAtMSkKLQkJCXJldHR5cGUgPSBfUEFHRV9DQUNIRV9XQjsKKwkJCXJldHR5cGUgPSBfUEFHRV9DQUNIRV9NT0RFX1dCOwogCiAJCXJldHVybiByZXR0eXBlOwogCX0KQEAgLTQyNSw3ICs1NDIsNyBAQAogCWlmIChlbnRyeSAhPSBOVUxMKQogCQlyZXR0eXBlID0gZW50cnktPnR5cGU7CiAJZWxzZQotCQlyZXR0eXBlID0gX1BBR0VfQ0FDSEVfVUNfTUlOVVM7CisJCXJldHR5cGUgPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOwogCiAJc3Bpbl91bmxvY2soJm1lbXR5cGVfbG9jayk7CiAJcmV0dXJuIHJldHR5cGU7CkBAIC00NDIsMTEgKzU1OSwxMSBAQAogICogT24gZmFpbHVyZSwgcmV0dXJucyBub24temVybwogICovCiBpbnQgaW9fcmVzZXJ2ZV9tZW10eXBlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IGVuZCwKLQkJCXVuc2lnbmVkIGxvbmcgKnR5cGUpCisJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSAqdHlwZSkKIHsKIAlyZXNvdXJjZV9zaXplX3Qgc2l6ZSA9IGVuZCAtIHN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgcmVxX3R5cGUgPSAqdHlwZTsKLQl1bnNpZ25lZCBsb25nIG5ld190eXBlOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIHJlcV90eXBlID0gKnR5cGU7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgbmV3X3R5cGU7CiAJaW50IHJldDsKIAogCVdBUk5fT05fT05DRShpb21lbV9tYXBfc2FuaXR5X2NoZWNrKHN0YXJ0LCBzaXplKSk7CkBAIC01MjAsMTMgKzYzNywxMyBAQAogaW50IHBoeXNfbWVtX2FjY2Vzc19wcm90X2FsbG93ZWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnZtYV9wcm90KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBfUEFHRV9DQUNIRV9XQjsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZSBwY20gPSBfUEFHRV9DQUNIRV9NT0RFX1dCOwogCiAJaWYgKCFyYW5nZV9pc19hbGxvd2VkKHBmbiwgc2l6ZSkpCiAJCXJldHVybiAwOwogCiAJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0RTWU5DKQotCQlmbGFncyA9IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCQlwY20gPSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCS8qCkBAIC01NDMsMTIgKzY2MCwxMiBAQAogCSAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWVJJWF9BUlIpIHx8CiAJICAgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSKSkgJiYKIAkgICAgKHBmbiA8PCBQQUdFX1NISUZUKSA+PSBfX3BhKGhpZ2hfbWVtb3J5KSkgewotCQlmbGFncyA9IF9QQUdFX0NBQ0hFX1VDOworCQlwY20gPSBfUEFHRV9DQUNIRV9NT0RFX1VDOwogCX0KICNlbmRpZgogCiAJKnZtYV9wcm90ID0gX19wZ3Byb3QoKHBncHJvdF92YWwoKnZtYV9wcm90KSAmIH5fUEFHRV9DQUNIRV9NQVNLKSB8Ci0JCQkgICAgIGZsYWdzKTsKKwkJCSAgICAgY2FjaGVtb2RlMnByb3R2YWwocGNtKSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTU1Niw3ICs2NzMsOCBAQAogICogQ2hhbmdlIHRoZSBtZW1vcnkgdHlwZSBmb3IgdGhlIHBoeXNpYWwgYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgaWRlbnRpdHkKICAqIG1hcHBpbmcgc3BhY2UgaWYgdGhhdCByYW5nZSBpcyBhIHBhcnQgb2YgaWRlbnRpdHkgbWFwLgogICovCi1pbnQga2VybmVsX21hcF9zeW5jX21lbXR5cGUodTY0IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK2ludCBrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZSh1NjQgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgIGVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSkKIHsKIAl1bnNpZ25lZCBsb25nIGlkX3N6OwogCkBAIC01NzQsMTEgKzY5MiwxMSBAQAogCQkJCV9fcGEoaGlnaF9tZW1vcnkpIC0gYmFzZSA6CiAJCQkJc2l6ZTsKIAotCWlmIChpb3JlbWFwX2NoYW5nZV9hdHRyKCh1bnNpZ25lZCBsb25nKV9fdmEoYmFzZSksIGlkX3N6LCBmbGFncykgPCAwKSB7CisJaWYgKGlvcmVtYXBfY2hhbmdlX2F0dHIoKHVuc2lnbmVkIGxvbmcpX192YShiYXNlKSwgaWRfc3osIHBjbSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiVkIGlvcmVtYXBfY2hhbmdlX2F0dHIgZmFpbGVkICVzICIKIAkJCSJmb3IgW21lbSAlIzAxMEx4LSUjMDEwTHhdXG4iLAogCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAotCQkJY2F0dHJfbmFtZShmbGFncyksCisJCQljYXR0cl9uYW1lKHBjbSksCiAJCQliYXNlLCAodW5zaWduZWQgbG9uZyBsb25nKShiYXNlICsgc2l6ZS0xKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU5NSw4ICs3MTMsOCBAQAogewogCWludCBpc19yYW0gPSAwOwogCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyB3YW50X2ZsYWdzID0gKHBncHJvdF92YWwoKnZtYV9wcm90KSAmIF9QQUdFX0NBQ0hFX01BU0spOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSB3YW50X2ZsYWdzOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIHdhbnRfcGNtID0gcGdwcm90MmNhY2hlbW9kZSgqdm1hX3Byb3QpOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSA9IHdhbnRfcGNtOwogCiAJaXNfcmFtID0gcGF0X3BhZ2VyYW5nZV9pc19yYW0ocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAKQEAgLTYwOSwzNiArNzI3LDM2IEBACiAJCWlmICghcGF0X2VuYWJsZWQpCiAJCQlyZXR1cm4gMDsKIAotCQlmbGFncyA9IGxvb2t1cF9tZW10eXBlKHBhZGRyKTsKLQkJaWYgKHdhbnRfZmxhZ3MgIT0gZmxhZ3MpIHsKKwkJcGNtID0gbG9va3VwX21lbXR5cGUocGFkZHIpOworCQlpZiAod2FudF9wY20gIT0gcGNtKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczolZCBtYXAgcGZuIFJBTSByYW5nZSByZXEgJXMgZm9yIFttZW0gJSMwMTBMeC0lIzAxMEx4XSwgZ290ICVzXG4iLAogCQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKLQkJCQljYXR0cl9uYW1lKHdhbnRfZmxhZ3MpLAorCQkJCWNhdHRyX25hbWUod2FudF9wY20pLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGFkZHIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykocGFkZHIgKyBzaXplIC0gMSksCi0JCQkJY2F0dHJfbmFtZShmbGFncykpOworCQkJCWNhdHRyX25hbWUocGNtKSk7CiAJCQkqdm1hX3Byb3QgPSBfX3BncHJvdCgocGdwcm90X3ZhbCgqdm1hX3Byb3QpICYKLQkJCQkJICAgICAgKH5fUEFHRV9DQUNIRV9NQVNLKSkgfAotCQkJCQkgICAgIGZsYWdzKTsKKwkJCQkJICAgICAofl9QQUdFX0NBQ0hFX01BU0spKSB8CisJCQkJCSAgICAgY2FjaGVtb2RlMnByb3R2YWwocGNtKSk7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0ID0gcmVzZXJ2ZV9tZW10eXBlKHBhZGRyLCBwYWRkciArIHNpemUsIHdhbnRfZmxhZ3MsICZmbGFncyk7CisJcmV0ID0gcmVzZXJ2ZV9tZW10eXBlKHBhZGRyLCBwYWRkciArIHNpemUsIHdhbnRfcGNtLCAmcGNtKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKGZsYWdzICE9IHdhbnRfZmxhZ3MpIHsKKwlpZiAocGNtICE9IHdhbnRfcGNtKSB7CiAJCWlmIChzdHJpY3RfcHJvdCB8fAotCQkgICAgIWlzX25ld19tZW10eXBlX2FsbG93ZWQocGFkZHIsIHNpemUsIHdhbnRfZmxhZ3MsIGZsYWdzKSkgeworCQkgICAgIWlzX25ld19tZW10eXBlX2FsbG93ZWQocGFkZHIsIHNpemUsIHdhbnRfcGNtLCBwY20pKSB7CiAJCQlmcmVlX21lbXR5cGUocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiVkIG1hcCBwZm4gZXhwZWN0ZWQgbWFwcGluZyB0eXBlICVzIgogCQkJCSIgZm9yIFttZW0gJSMwMTBMeC0lIzAxMEx4XSwgZ290ICVzXG4iLAogCQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKLQkJCQljYXR0cl9uYW1lKHdhbnRfZmxhZ3MpLAorCQkJCWNhdHRyX25hbWUod2FudF9wY20pLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGFkZHIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykocGFkZHIgKyBzaXplIC0gMSksCi0JCQkJY2F0dHJfbmFtZShmbGFncykpOworCQkJCWNhdHRyX25hbWUocGNtKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKgpAQCAtNjQ3LDEwICs3NjUsMTAgQEAKIAkJICovCiAJCSp2bWFfcHJvdCA9IF9fcGdwcm90KChwZ3Byb3RfdmFsKCp2bWFfcHJvdCkgJgogCQkJCSAgICAgICh+X1BBR0VfQ0FDSEVfTUFTSykpIHwKLQkJCQkgICAgIGZsYWdzKTsKKwkJCQkgICAgIGNhY2hlbW9kZTJwcm90dmFsKHBjbSkpOwogCX0KIAotCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwYWRkciwgc2l6ZSwgZmxhZ3MpIDwgMCkgeworCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwYWRkciwgc2l6ZSwgcGNtKSA8IDApIHsKIAkJZnJlZV9tZW10eXBlKHBhZGRyLCBwYWRkciArIHNpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03MDksNyArODI3LDcgQEAKIAkJICAgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXNvdXJjZV9zaXplX3QgcGFkZHIgPSAocmVzb3VyY2Vfc2l6ZV90KXBmbiA8PCBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtOwogCiAJLyogcmVzZXJ2ZSB0aGUgd2hvbGUgY2h1bmsgc3RhcnRpbmcgZnJvbSBwYWRkciAqLwogCWlmIChhZGRyID09IHZtYS0+dm1fc3RhcnQgJiYgc2l6ZSA9PSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSkgewpAQCAtNzI4LDE4ICs4NDYsMTggQEAKIAkgKiBGb3IgYW55dGhpbmcgc21hbGxlciB0aGFuIHRoZSB2bWEgc2l6ZSB3ZSBzZXQgcHJvdCBiYXNlZCBvbiB0aGUKIAkgKiBsb29rdXAuCiAJICovCi0JZmxhZ3MgPSBsb29rdXBfbWVtdHlwZShwYWRkcik7CisJcGNtID0gbG9va3VwX21lbXR5cGUocGFkZHIpOwogCiAJLyogQ2hlY2sgbWVtdHlwZSBmb3IgdGhlIHJlbWFpbmluZyBwYWdlcyAqLwogCXdoaWxlIChzaXplID4gUEFHRV9TSVpFKSB7CiAJCXNpemUgLT0gUEFHRV9TSVpFOwogCQlwYWRkciArPSBQQUdFX1NJWkU7Ci0JCWlmIChmbGFncyAhPSBsb29rdXBfbWVtdHlwZShwYWRkcikpCisJCWlmIChwY20gIT0gbG9va3VwX21lbXR5cGUocGFkZHIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJKnByb3QgPSBfX3BncHJvdCgocGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJiAofl9QQUdFX0NBQ0hFX01BU0spKSB8Ci0JCQkgZmxhZ3MpOworCQkJIGNhY2hlbW9kZTJwcm90dmFsKHBjbSkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDcsMTUgKzg2NSwxNSBAQAogaW50IHRyYWNrX3Bmbl9pbnNlcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBncHJvdF90ICpwcm90LAogCQkgICAgIHVuc2lnbmVkIGxvbmcgcGZuKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZW51bSBwYWdlX2NhY2hlX21vZGUgcGNtOwogCiAJaWYgKCFwYXRfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBTZXQgcHJvdCBiYXNlZCBvbiBsb29rdXAgKi8KLQlmbGFncyA9IGxvb2t1cF9tZW10eXBlKChyZXNvdXJjZV9zaXplX3QpcGZuIDw8IFBBR0VfU0hJRlQpOworCXBjbSA9IGxvb2t1cF9tZW10eXBlKChyZXNvdXJjZV9zaXplX3QpcGZuIDw8IFBBR0VfU0hJRlQpOwogCSpwcm90ID0gX19wZ3Byb3QoKHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICYgKH5fUEFHRV9DQUNIRV9NQVNLKSkgfAotCQkJIGZsYWdzKTsKKwkJCSBjYWNoZW1vZGUycHJvdHZhbChwY20pKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzkxLDcgKzkwOSw4IEBACiBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpCiB7CiAJaWYgKHBhdF9lbmFibGVkKQotCQlyZXR1cm4gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX0NBQ0hFX1dDKTsKKwkJcmV0dXJuIF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfAorCQkJCWNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfV0MpKTsKIAllbHNlCiAJCXJldHVybiBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpOwogfQpAQCAtODI0LDcgKzk0Myw3IEBACiB7CiAJaWYgKCpwb3MgPT0gMCkgewogCQkrKypwb3M7Ci0JCXNlcV9wcmludGYoc2VxLCAiUEFUIG1lbXR5cGUgbGlzdDpcbiIpOworCQlzZXFfcHV0cyhzZXEsICJQQVQgbWVtdHlwZSBsaXN0OlxuIik7CiAJfQogCiAJcmV0dXJuIG1lbXR5cGVfZ2V0X2lkeCgqcG9zKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdF9pbnRlcm5hbC5oIGIvYXJjaC94ODYvbW0vcGF0X2ludGVybmFsLmgKaW5kZXggNzdlNWJhMS4uZjY0MTE2MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0X2ludGVybmFsLmgKKysrIGIvYXJjaC94ODYvbW0vcGF0X2ludGVybmFsLmgKQEAgLTEwLDMwICsxMCwzMiBAQAogCXU2NAkJCXN0YXJ0OwogCXU2NAkJCWVuZDsKIAl1NjQJCQlzdWJ0cmVlX21heF9lbmQ7Ci0JdW5zaWduZWQgbG9uZwkJdHlwZTsKKwllbnVtIHBhZ2VfY2FjaGVfbW9kZQl0eXBlOwogCXN0cnVjdCByYl9ub2RlCQlyYjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgY2hhciAqY2F0dHJfbmFtZSh1bnNpZ25lZCBsb25nIGZsYWdzKQorc3RhdGljIGlubGluZSBjaGFyICpjYXR0cl9uYW1lKGVudW0gcGFnZV9jYWNoZV9tb2RlIHBjbSkKIHsKLQlzd2l0Y2ggKGZsYWdzICYgX1BBR0VfQ0FDSEVfTUFTSykgewotCWNhc2UgX1BBR0VfQ0FDSEVfVUM6CQlyZXR1cm4gInVuY2FjaGVkIjsKLQljYXNlIF9QQUdFX0NBQ0hFX1VDX01JTlVTOglyZXR1cm4gInVuY2FjaGVkLW1pbnVzIjsKLQljYXNlIF9QQUdFX0NBQ0hFX1dCOgkJcmV0dXJuICJ3cml0ZS1iYWNrIjsKLQljYXNlIF9QQUdFX0NBQ0hFX1dDOgkJcmV0dXJuICJ3cml0ZS1jb21iaW5pbmciOwotCWRlZmF1bHQ6CQkJcmV0dXJuICJicm9rZW4iOworCXN3aXRjaCAocGNtKSB7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1VDOgkJcmV0dXJuICJ1bmNhY2hlZCI7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTOgkJcmV0dXJuICJ1bmNhY2hlZC1taW51cyI7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dCOgkJcmV0dXJuICJ3cml0ZS1iYWNrIjsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfV0M6CQlyZXR1cm4gIndyaXRlLWNvbWJpbmluZyI7CisJY2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dUOgkJcmV0dXJuICJ3cml0ZS10aHJvdWdoIjsKKwljYXNlIF9QQUdFX0NBQ0hFX01PREVfV1A6CQlyZXR1cm4gIndyaXRlLXByb3RlY3RlZCI7CisJZGVmYXVsdDoJCQkJcmV0dXJuICJicm9rZW4iOwogCX0KIH0KIAogI2lmZGVmIENPTkZJR19YODZfUEFUCiBleHRlcm4gaW50IHJidF9tZW10eXBlX2NoZWNrX2luc2VydChzdHJ1Y3QgbWVtdHlwZSAqbmV3LAotCQkJCQl1bnNpZ25lZCBsb25nICpuZXdfdHlwZSk7CisJCQkJCWVudW0gcGFnZV9jYWNoZV9tb2RlICpuZXdfdHlwZSk7CiBleHRlcm4gc3RydWN0IG1lbXR5cGUgKnJidF9tZW10eXBlX2VyYXNlKHU2NCBzdGFydCwgdTY0IGVuZCk7CiBleHRlcm4gc3RydWN0IG1lbXR5cGUgKnJidF9tZW10eXBlX2xvb2t1cCh1NjQgYWRkcik7CiBleHRlcm4gaW50IHJidF9tZW10eXBlX2NvcHlfbnRoX2VsZW1lbnQoc3RydWN0IG1lbXR5cGUgKm91dCwgbG9mZl90IHBvcyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgcmJ0X21lbXR5cGVfY2hlY2tfaW5zZXJ0KHN0cnVjdCBtZW10eXBlICpuZXcsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKm5ld190eXBlKQorCQkJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSAqbmV3X3R5cGUpCiB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW10eXBlICpyYnRfbWVtdHlwZV9lcmFzZSh1NjQgc3RhcnQsIHU2NCBlbmQpCiB7IHJldHVybiBOVUxMOyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXRfcmJ0cmVlLmMgYi9hcmNoL3g4Ni9tbS9wYXRfcmJ0cmVlLmMKaW5kZXggNDE1ZjZjNC4uNjU4MmFkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0X3JidHJlZS5jCisrKyBiL2FyY2gveDg2L21tL3BhdF9yYnRyZWUuYwpAQCAtMTIyLDExICsxMjIsMTIgQEAKIAogc3RhdGljIGludCBtZW10eXBlX3JiX2NoZWNrX2NvbmZsaWN0KHN0cnVjdCByYl9yb290ICpyb290LAogCQkJCXU2NCBzdGFydCwgdTY0IGVuZCwKLQkJCQl1bnNpZ25lZCBsb25nIHJlcXR5cGUsIHVuc2lnbmVkIGxvbmcgKm5ld3R5cGUpCisJCQkJZW51bSBwYWdlX2NhY2hlX21vZGUgcmVxdHlwZSwKKwkJCQllbnVtIHBhZ2VfY2FjaGVfbW9kZSAqbmV3dHlwZSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgbWVtdHlwZSAqbWF0Y2g7Ci0JaW50IGZvdW5kX3R5cGUgPSByZXF0eXBlOworCWVudW0gcGFnZV9jYWNoZV9tb2RlIGZvdW5kX3R5cGUgPSByZXF0eXBlOwogCiAJbWF0Y2ggPSBtZW10eXBlX3JiX2xvd2VzdF9tYXRjaCgmbWVtdHlwZV9yYnJvb3QsIHN0YXJ0LCBlbmQpOwogCWlmIChtYXRjaCA9PSBOVUxMKQpAQCAtMTg3LDcgKzE4OCw4IEBACiAJcmJfaW5zZXJ0X2F1Z21lbnRlZCgmbmV3ZGF0YS0+cmIsIHJvb3QsICZtZW10eXBlX3JiX2F1Z21lbnRfY2IpOwogfQogCi1pbnQgcmJ0X21lbXR5cGVfY2hlY2tfaW5zZXJ0KHN0cnVjdCBtZW10eXBlICpuZXcsIHVuc2lnbmVkIGxvbmcgKnJldF90eXBlKQoraW50IHJidF9tZW10eXBlX2NoZWNrX2luc2VydChzdHJ1Y3QgbWVtdHlwZSAqbmV3LAorCQkJICAgICBlbnVtIHBhZ2VfY2FjaGVfbW9kZSAqcmV0X3R5cGUpCiB7CiAJaW50IGVyciA9IDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IDM3YzE0MzUuLjliMThlZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtNDMzLDE0ICs0MzMsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocGF0X2VuYWJsZWQgJiYgd3JpdGVfY29tYmluZSkKLQkJcHJvdCB8PSBfUEFHRV9DQUNIRV9XQzsKKwkJcHJvdCB8PSBjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1dDKTsKIAllbHNlIGlmIChwYXRfZW5hYmxlZCB8fCBib290X2NwdV9kYXRhLng4NiA+IDMpCiAJCS8qCiAJCSAqIGlvcmVtYXAoKSBhbmQgaW9yZW1hcF9ub2NhY2hlKCkgZGVmYXVsdHMgdG8gVUMgTUlOVVMgZm9yIG5vdy4KIAkJICogVG8gYXZvaWQgYXR0cmlidXRlIGNvbmZsaWN0cywgcmVxdWVzdCBVQyBNSU5VUyBoZXJlCiAJCSAqIGFzIHdlbGwuCiAJCSAqLwotCQlwcm90IHw9IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCQlwcm90IHw9IGNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpOwogCiAJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdChwcm90KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL251bWFjaGlwLmMgYi9hcmNoL3g4Ni9wY2kvbnVtYWNoaXAuYwppbmRleCA3MzA3ZDlkLi4yZTU2NWU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbnVtYWNoaXAuYworKysgYi9hcmNoL3g4Ni9wY2kvbnVtYWNoaXAuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0cnVjdCBwY2lfcmF3X29wcyBwY2lfbW1jZmdfbnVtYWNoaXAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9yYXdfb3BzIHBjaV9tbWNmZ19udW1hY2hpcCA9IHsKIAkucmVhZCA9IHBjaV9tbWNmZ19yZWFkX251bWFjaGlwLAogCS53cml0ZSA9IHBjaV9tbWNmZ193cml0ZV9udW1hY2hpcCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kveGVuLmMgYi9hcmNoL3g4Ni9wY2kveGVuLmMKaW5kZXggMDkzZjVmNC4uMTgxOWE5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL3hlbi5jCisrKyBiL2FyY2gveDg2L3BjaS94ZW4uYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJCXJldHVybiAxOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtc2lkZXNjLCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewotCQlfX3JlYWRfbXNpX21zZyhtc2lkZXNjLCAmbXNnKTsKKwkJX19wY2lfcmVhZF9tc2lfbXNnKG1zaWRlc2MsICZtc2cpOwogCQlwaXJxID0gTVNJX0FERFJfRVhUX0RFU1RfSUQobXNnLmFkZHJlc3NfaGkpIHwKIAkJCSgobXNnLmFkZHJlc3NfbG8gPj4gTVNJX0FERFJfREVTVF9JRF9TSElGVCkgJiAweGZmKTsKIAkJaWYgKG1zZy5kYXRhICE9IFhFTl9QSVJRX01TSV9EQVRBIHx8CkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCQkJeGVuX21zaV9jb21wb3NlX21zZyhkZXYsIHBpcnEsICZtc2cpOwotCQkJX193cml0ZV9tc2lfbXNnKG1zaWRlc2MsICZtc2cpOworCQkJX19wY2lfd3JpdGVfbXNpX21zZyhtc2lkZXNjLCAmbXNnKTsKIAkJCWRldl9kYmcoJmRldi0+ZGV2LCAieGVuOiBtc2kgYm91bmQgdG8gcGlycT0lZFxuIiwgcGlycSk7CiAJCX0gZWxzZSB7CiAJCQlkZXZfZGJnKCZkZXYtPmRldiwKQEAgLTM5NCwxNCArMzk0LDcgQEAKIHsKIAl4ZW5fZGVzdHJveV9pcnEoaXJxKTsKIH0KLXN0YXRpYyB1MzIgeGVuX25vcF9tc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgdTMyIHhlbl9ub3BfbXNpeF9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBmbGFnKQotewotCXJldHVybiAwOwotfQorCiAjZW5kaWYKIAogaW50IF9faW5pdCBwY2lfeGVuX2luaXQodm9pZCkKQEAgLTQyNSw4ICs0MTgsNyBAQAogCXg4Nl9tc2kuc2V0dXBfbXNpX2lycXMgPSB4ZW5fc2V0dXBfbXNpX2lycXM7CiAJeDg2X21zaS50ZWFyZG93bl9tc2lfaXJxID0geGVuX3RlYXJkb3duX21zaV9pcnE7CiAJeDg2X21zaS50ZWFyZG93bl9tc2lfaXJxcyA9IHhlbl90ZWFyZG93bl9tc2lfaXJxczsKLQl4ODZfbXNpLm1zaV9tYXNrX2lycSA9IHhlbl9ub3BfbXNpX21hc2tfaXJxOwotCXg4Nl9tc2kubXNpeF9tYXNrX2lycSA9IHhlbl9ub3BfbXNpeF9tYXNrX2lycTsKKwlwY2lfbXNpX2lnbm9yZV9tYXNrID0gMTsKICNlbmRpZgogCXJldHVybiAwOwogfQpAQCAtNTA2LDggKzQ5OCw3IEBACiAJeDg2X21zaS5zZXR1cF9tc2lfaXJxcyA9IHhlbl9pbml0ZG9tX3NldHVwX21zaV9pcnFzOwogCXg4Nl9tc2kudGVhcmRvd25fbXNpX2lycSA9IHhlbl90ZWFyZG93bl9tc2lfaXJxOwogCXg4Nl9tc2kucmVzdG9yZV9tc2lfaXJxcyA9IHhlbl9pbml0ZG9tX3Jlc3RvcmVfbXNpX2lycXM7Ci0JeDg2X21zaS5tc2lfbWFza19pcnEgPSB4ZW5fbm9wX21zaV9tYXNrX2lycTsKLQl4ODZfbXNpLm1zaXhfbWFza19pcnEgPSB4ZW5fbm9wX21zaXhfbWFza19pcnE7CisJcGNpX21zaV9pZ25vcmVfbWFzayA9IDE7CiAjZW5kaWYKIAl4ZW5fc2V0dXBfYWNwaV9zY2koKTsKIAlfX2FjcGlfcmVnaXN0ZXJfZ3NpID0gYWNwaV9yZWdpc3Rlcl9nc2lfeGVuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jIGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jCmluZGV4IDM1YWVjYjYuLjE3ZTgwZDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYworKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMKQEAgLTQ4LDggKzQ4LDcgQEAKICAqIFdlIGFsbG9jYXRlIHJ1bnRpbWUgc2VydmljZXMgcmVnaW9ucyBib3R0b20tdXAsIHN0YXJ0aW5nIGZyb20gLTRHLCBpLmUuCiAgKiAweGZmZmZfZmZmZl8wMDAwXzAwMDAgYW5kIGxpbWl0IEVGSSBWQSBtYXBwaW5nIHNwYWNlIHRvIDY0Ry4KICAqLwotc3RhdGljIHU2NCBlZmlfdmEJPSAtNCAqICgxVUwgPDwgMzApOwotI2RlZmluZSBFRklfVkFfRU5ECSgtNjggKiAoMVVMIDw8IDMwKSkKK3N0YXRpYyB1NjQgZWZpX3ZhID0gRUZJX1ZBX1NUQVJUOwogCiAvKgogICogU2NyYXRjaCBzcGFjZSB1c2VkIGZvciBzd2l0Y2hpbmcgdGhlIHBhZ2V0YWJsZSBpbiB0aGUgRUZJIHN0dWIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jIGIvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKaW5kZXggMzk2OGQ2Ny4uOTk0Nzk4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKQEAgLTEzNjcsMjMgKzEzNjcsMjUgQEAKIAogCWNwdSA9ICoobG9mZl90ICopZGF0YTsKIAlpZiAoIWNwdSkgewotCQlzZXFfcHJpbnRmKGZpbGUsCi0JCSAiIyBjcHUgYmF1b2ZmIHNlbnQgc3RpbWUgc2VsZiBsb2NhbHMgcmVtb3RlcyBuY3B1cyBsb2NhbGh1YiAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJInJlbW90ZWh1YiBudW11dmh1YnMgbnVtdXZodWJzMTYgbnVtdXZodWJzOCAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJIm51bXV2aHViczQgbnVtdXZodWJzMiBudW11dmh1YnMxIGR0byBzbmFja3MgcmV0cmllcyAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJInJvayByZXNldHAgcmVzZXR0IGdpdmV1cCBzdG8gYnogdGhyb3QgZGlzYWJsZSAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJImVuYWJsZSB3YXJzIHdhcnNodyB3YXJ3YWl0cyBlbnRlcnMgaXBpZGlzIHBsdWdnZWQgIik7Ci0JCXNlcV9wcmludGYoZmlsZSwKLQkJCSJpcGlvdmVyIGdsaW0gY29uZyBzd2FjayByZWN2IHJ0aW1lIGFsbCBvbmUgbXVsdCAiKTsKLQkJc2VxX3ByaW50ZihmaWxlLAotCQkJIm5vbmUgcmV0cnkgY2FuYyBub2NhbiByZXNldCByY2FuXG4iKTsKKwkJc2VxX3B1dHMoZmlsZSwKKwkJCSAiIyBjcHUgYmF1b2ZmIHNlbnQgc3RpbWUgc2VsZiBsb2NhbHMgcmVtb3RlcyBuY3B1cyBsb2NhbGh1YiAiKTsKKwkJc2VxX3B1dHMoZmlsZSwgInJlbW90ZWh1YiBudW11dmh1YnMgbnVtdXZodWJzMTYgbnVtdXZodWJzOCAiKTsKKwkJc2VxX3B1dHMoZmlsZSwKKwkJCSAibnVtdXZodWJzNCBudW11dmh1YnMyIG51bXV2aHViczEgZHRvIHNuYWNrcyByZXRyaWVzICIpOworCQlzZXFfcHV0cyhmaWxlLAorCQkJICJyb2sgcmVzZXRwIHJlc2V0dCBnaXZldXAgc3RvIGJ6IHRocm90IGRpc2FibGUgIik7CisJCXNlcV9wdXRzKGZpbGUsCisJCQkgImVuYWJsZSB3YXJzIHdhcnNodyB3YXJ3YWl0cyBlbnRlcnMgaXBpZGlzIHBsdWdnZWQgIik7CisJCXNlcV9wdXRzKGZpbGUsCisJCQkgImlwaW92ZXIgZ2xpbSBjb25nIHN3YWNrIHJlY3YgcnRpbWUgYWxsIG9uZSBtdWx0ICIpOworCQlzZXFfcHV0cyhmaWxlLCAibm9uZSByZXRyeSBjYW5jIG5vY2FuIHJlc2V0IHJjYW5cbiIpOwogCX0KIAlpZiAoY3B1IDwgbnVtX3Bvc3NpYmxlX2NwdXMoKSAmJiBjcHVfb25saW5lKGNwdSkpIHsKIAkJYmNwID0gJnBlcl9jcHUoYmF1X2NvbnRyb2wsIGNwdSk7CisJCWlmIChiY3AtPm5vYmF1KSB7CisJCQlzZXFfcHJpbnRmKGZpbGUsICJjcHUgJWQgYmF1IGRpc2FibGVkXG4iLCBjcHUpOworCQkJcmV0dXJuIDA7CisJCX0KIAkJc3RhdCA9IGJjcC0+c3RhdHA7CiAJCS8qIHNvdXJjZSBzaWRlIHN0YXRpc3RpY3MgKi8KIAkJc2VxX3ByaW50ZihmaWxlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcHVyZ2F0b3J5L01ha2VmaWxlIGIvYXJjaC94ODYvcHVyZ2F0b3J5L01ha2VmaWxlCmluZGV4IGY1MmUwMzMuLjJjODM1ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3B1cmdhdG9yeS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9wdXJnYXRvcnkvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDcgQEAKIAogJChvYmopL2tleGVjLXB1cmdhdG9yeS5jOiAkKG9iaikvcHVyZ2F0b3J5LnJvIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsYmluMmMpCisJQDoKIAogCiBvYmotJChDT05GSUdfS0VYRUNfRklMRSkJKz0ga2V4ZWMtcHVyZ2F0b3J5Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xzL2luc25fc2FuaXR5LmMgYi9hcmNoL3g4Ni90b29scy9pbnNuX3Nhbml0eS5jCmluZGV4IDg3MmViNjAuLmJhNzBmZjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Rvb2xzL2luc25fc2FuaXR5LmMKKysrIGIvYXJjaC94ODYvdG9vbHMvaW5zbl9zYW5pdHkuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJCQljb250aW51ZTsKIAogCQkvKiBEZWNvZGUgYW4gaW5zdHJ1Y3Rpb24gKi8KLQkJaW5zbl9pbml0KCZpbnNuLCBpbnNuX2J1ZiwgeDg2XzY0KTsKKwkJaW5zbl9pbml0KCZpbnNuLCBpbnNuX2J1Ziwgc2l6ZW9mKGluc25fYnVmKSwgeDg2XzY0KTsKIAkJaW5zbl9nZXRfbGVuZ3RoKCZpbnNuKTsKIAogCQlpZiAoaW5zbi5uZXh0X2J5dGUgPD0gaW5zbi5rYWRkciB8fApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvcmVsb2NzLmMgYi9hcmNoL3g4Ni90b29scy9yZWxvY3MuYwppbmRleCBhNWVmYjIxLi4wYzJmYWU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni90b29scy9yZWxvY3MuYworKysgYi9hcmNoL3g4Ni90b29scy9yZWxvY3MuYwpAQCAtMjAsNyArMjAsMTAgQEAKIAogc3RhdGljIHN0cnVjdCByZWxvY3MgcmVsb2NzMTY7CiBzdGF0aWMgc3RydWN0IHJlbG9jcyByZWxvY3MzMjsKKyNpZiBFTEZfQklUUyA9PSA2NAorc3RhdGljIHN0cnVjdCByZWxvY3MgcmVsb2NzMzJuZWc7CiBzdGF0aWMgc3RydWN0IHJlbG9jcyByZWxvY3M2NDsKKyNlbmRpZgogCiBzdHJ1Y3Qgc2VjdGlvbiB7CiAJRWxmX1NoZHIgICAgICAgc2hkcjsKQEAgLTc2MiwxMSArNzY1LDE2IEBACiAKIAlzd2l0Y2ggKHJfdHlwZSkgewogCWNhc2UgUl9YODZfNjRfTk9ORToKKwkJLyogTk9ORSBjYW4gYmUgaWdub3JlZC4gKi8KKwkJYnJlYWs7CisKIAljYXNlIFJfWDg2XzY0X1BDMzI6CiAJCS8qCi0JCSAqIE5PTkUgY2FuIGJlIGlnbm9yZWQgYW5kIFBDIHJlbGF0aXZlIHJlbG9jYXRpb25zIGRvbid0Ci0JCSAqIG5lZWQgdG8gYmUgYWRqdXN0ZWQuCisJCSAqIFBDIHJlbGF0aXZlIHJlbG9jYXRpb25zIGRvbid0IG5lZWQgdG8gYmUgYWRqdXN0ZWQgdW5sZXNzCisJCSAqIHJlZmVyZW5jaW5nIGEgcGVyY3B1IHN5bWJvbC4KIAkJICovCisJCWlmIChpc19wZXJjcHVfc3ltKHN5bSwgc3ltbmFtZSkpCisJCQlhZGRfcmVsb2MoJnJlbG9jczMybmVnLCBvZmZzZXQpOwogCQlicmVhazsKIAogCWNhc2UgUl9YODZfNjRfMzI6CkBAIC05ODYsNyArOTk0LDEwIEBACiAJLyogT3JkZXIgdGhlIHJlbG9jYXRpb25zIGZvciBtb3JlIGVmZmljaWVudCBwcm9jZXNzaW5nICovCiAJc29ydF9yZWxvY3MoJnJlbG9jczE2KTsKIAlzb3J0X3JlbG9jcygmcmVsb2NzMzIpOworI2lmIEVMRl9CSVRTID09IDY0CisJc29ydF9yZWxvY3MoJnJlbG9jczMybmVnKTsKIAlzb3J0X3JlbG9jcygmcmVsb2NzNjQpOworI2VuZGlmCiAKIAkvKiBQcmludCB0aGUgcmVsb2NhdGlvbnMgKi8KIAlpZiAoYXNfdGV4dCkgewpAQCAtMTAwNywxNCArMTAxOCwyMSBAQAogCQlmb3IgKGkgPSAwOyBpIDwgcmVsb2NzMzIuY291bnQ7IGkrKykKIAkJCXdyaXRlX3JlbG9jKHJlbG9jczMyLm9mZnNldFtpXSwgc3Rkb3V0KTsKIAl9IGVsc2UgewotCQlpZiAoRUxGX0JJVFMgPT0gNjQpIHsKLQkJCS8qIFByaW50IGEgc3RvcCAqLwotCQkJd3JpdGVfcmVsb2MoMCwgc3Rkb3V0KTsKKyNpZiBFTEZfQklUUyA9PSA2NAorCQkvKiBQcmludCBhIHN0b3AgKi8KKwkJd3JpdGVfcmVsb2MoMCwgc3Rkb3V0KTsKIAotCQkJLyogTm93IHByaW50IGVhY2ggcmVsb2NhdGlvbiAqLwotCQkJZm9yIChpID0gMDsgaSA8IHJlbG9jczY0LmNvdW50OyBpKyspCi0JCQkJd3JpdGVfcmVsb2MocmVsb2NzNjQub2Zmc2V0W2ldLCBzdGRvdXQpOwotCQl9CisJCS8qIE5vdyBwcmludCBlYWNoIHJlbG9jYXRpb24gKi8KKwkJZm9yIChpID0gMDsgaSA8IHJlbG9jczY0LmNvdW50OyBpKyspCisJCQl3cml0ZV9yZWxvYyhyZWxvY3M2NC5vZmZzZXRbaV0sIHN0ZG91dCk7CisKKwkJLyogUHJpbnQgYSBzdG9wICovCisJCXdyaXRlX3JlbG9jKDAsIHN0ZG91dCk7CisKKwkJLyogTm93IHByaW50IGVhY2ggaW52ZXJzZSAzMi1iaXQgcmVsb2NhdGlvbiAqLworCQlmb3IgKGkgPSAwOyBpIDwgcmVsb2NzMzJuZWcuY291bnQ7IGkrKykKKwkJCXdyaXRlX3JlbG9jKHJlbG9jczMybmVnLm9mZnNldFtpXSwgc3Rkb3V0KTsKKyNlbmRpZgogCiAJCS8qIFByaW50IGEgc3RvcCAqLwogCQl3cml0ZV9yZWxvYygwLCBzdGRvdXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMgYi9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYwppbmRleCAxMzQwM2ZjLi41NmYwNGRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYworKysgYi9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJLyogRGVjb2RlIGFuIGluc3RydWN0aW9uICovCi0JCWluc25faW5pdCgmaW5zbiwgaW5zbl9idWYsIHg4Nl82NCk7CisJCWluc25faW5pdCgmaW5zbiwgaW5zbl9idWYsIHNpemVvZihpbnNuX2J1ZiksIHg4Nl82NCk7CiAJCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CiAJCWlmIChpbnNuLmxlbmd0aCAhPSBuYikgewogCQkJd2FybmluZ3MrKzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vdmdldGNwdS5jIGIvYXJjaC94ODYvdmRzby92Z2V0Y3B1LmMKaW5kZXggMmY5NGIwMy4uOGVjM2QxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby92Z2V0Y3B1LmMKKysrIGIvYXJjaC94ODYvdmRzby92Z2V0Y3B1LmMKQEAgLTcsOSArNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9nZXRjcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgogI2luY2x1ZGUgPGFzbS92Z3RvZC5oPgogCiBub3RyYWNlIGxvbmcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vdm1hLmMgYi9hcmNoL3g4Ni92ZHNvL3ZtYS5jCmluZGV4IDk3MDQ2M2IuLjAwOTQ5NWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vdm1hLmMKKysrIGIvYXJjaC94ODYvdmRzby92bWEuYwpAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBTZXQgdXAgdGhlIFZNQXMgdG8gdGVsbCB0aGUgVk0gYWJvdXQgdGhlIHZEU08uCiAgKiBDb3B5cmlnaHQgMjAwNyBBbmRpIEtsZWVuLCBTVVNFIExhYnMuCiAgKiBTdWJqZWN0IHRvIHRoZSBHUEwsIHYuMgorICoKKyAqIFRoaXMgY29udGFpbnMgbW9zdCBvZiB0aGUgeDg2IHZEU08ga2VybmVsLXNpZGUgY29kZS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0xMCwxNyArMTEsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+Ci0jaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3ZndG9kLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL3Zkc28uaD4KKyNpbmNsdWRlIDxhc20vdnZhci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQogdW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgdmRzbzY0X2VuYWJsZWQgPSAxOwotCi1leHRlcm4gdW5zaWduZWQgc2hvcnQgdmRzb19zeW5jX2NwdWlkOwogI2VuZGlmCiAKIHZvaWQgX19pbml0IGluaXRfdmRzb19pbWFnZShjb25zdCBzdHJ1Y3QgdmRzb19pbWFnZSAqaW1hZ2UpCkBAIC0zOCwyMCArMzksNiBAQAogCQkJCQkJaW1hZ2UtPmFsdF9sZW4pKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKQotewotCWluaXRfdmRzb19pbWFnZSgmdmRzb19pbWFnZV82NCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X1gzMl9BQkkKLQlpbml0X3Zkc29faW1hZ2UoJnZkc29faW1hZ2VfeDMyKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci1zdWJzeXNfaW5pdGNhbGwoaW5pdF92ZHNvKTsKLSNlbmRpZgotCiBzdHJ1Y3QgbGludXhfYmlucHJtOwogCiAvKiBQdXQgdGhlIHZkc28gYWJvdmUgdGhlIChyYW5kb21pemVkKSBzdGFjayB3aXRoIGFub3RoZXIgcmFuZG9taXplZCBvZmZzZXQuCkBAIC0yMzgsMyArMjI1LDYzIEBACiB9CiBfX3NldHVwKCJ2ZHNvPSIsIHZkc29fc2V0dXApOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgdm9pZCB2Z2V0Y3B1X2NwdV9pbml0KHZvaWQgKmFyZykKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBkZXNjX3N0cnVjdCBkID0geyB9OworCXVuc2lnbmVkIGxvbmcgbm9kZSA9IDA7CisjaWZkZWYgQ09ORklHX05VTUEKKwlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKyNlbmRpZgorCWlmIChjcHVfaGFzKCZjcHVfZGF0YShjcHUpLCBYODZfRkVBVFVSRV9SRFRTQ1ApKQorCQl3cml0ZV9yZHRzY3BfYXV4KChub2RlIDw8IDEyKSB8IGNwdSk7CisKKwkvKgorCSAqIFN0b3JlIGNwdSBudW1iZXIgaW4gbGltaXQgc28gdGhhdCBpdCBjYW4gYmUgbG9hZGVkCisJICogcXVpY2tseSBpbiB1c2VyIHNwYWNlIGluIHZnZXRjcHUuICgxMiBiaXRzIGZvciB0aGUgQ1BVCisJICogYW5kIDggYml0cyBmb3IgdGhlIG5vZGUpCisJICovCisJZC5saW1pdDAgPSBjcHUgfCAoKG5vZGUgJiAweGYpIDw8IDEyKTsKKwlkLmxpbWl0ID0gbm9kZSA+PiA0OworCWQudHlwZSA9IDU7CQkvKiBSTyBkYXRhLCBleHBhbmQgZG93biwgYWNjZXNzZWQgKi8KKwlkLmRwbCA9IDM7CQkvKiBWaXNpYmxlIHRvIHVzZXIgY29kZSAqLworCWQucyA9IDE7CQkvKiBOb3QgYSBzeXN0ZW0gc2VnbWVudCAqLworCWQucCA9IDE7CQkvKiBQcmVzZW50ICovCisJZC5kID0gMTsJCS8qIDMyLWJpdCAqLworCisJd3JpdGVfZ2R0X2VudHJ5KGdldF9jcHVfZ2R0X3RhYmxlKGNwdSksIEdEVF9FTlRSWV9QRVJfQ1BVLCAmZCwgREVTQ1RZUEVfUyk7Cit9CisKK3N0YXRpYyBpbnQKK3ZnZXRjcHVfY3B1X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZykKK3sKKwlsb25nIGNwdSA9IChsb25nKWFyZzsKKworCWlmIChhY3Rpb24gPT0gQ1BVX09OTElORSB8fCBhY3Rpb24gPT0gQ1BVX09OTElORV9GUk9aRU4pCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIHZnZXRjcHVfY3B1X2luaXQsIE5VTEwsIDEpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3Zkc28odm9pZCkKK3sKKwlpbml0X3Zkc29faW1hZ2UoJnZkc29faW1hZ2VfNjQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9YMzJfQUJJCisJaW5pdF92ZHNvX2ltYWdlKCZ2ZHNvX2ltYWdlX3gzMik7CisjZW5kaWYKKworCWNwdV9ub3RpZmllcl9yZWdpc3Rlcl9iZWdpbigpOworCisJb25fZWFjaF9jcHUodmdldGNwdV9jcHVfaW5pdCwgTlVMTCwgMSk7CisJLyogbm90aWZpZXIgcHJpb3JpdHkgPiBLVk0gKi8KKwlfX2hvdGNwdV9ub3RpZmllcih2Z2V0Y3B1X2NwdV9ub3RpZmllciwgMzApOworCisJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2RvbmUoKTsKKworCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKGluaXRfdmRzbyk7CisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IGZhYzVlNGYuLjZiZjNhMTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTExMDAsMTIgKzExMDAsNiBAQAogCQkvKiBGYXN0IHN5c2NhbGwgc2V0dXAgaXMgYWxsIGRvbmUgaW4gaHlwZXJjYWxscywgc28KIAkJICAgdGhlc2UgYXJlIGFsbCBpZ25vcmVkLiAgU3R1YiB0aGVtIG91dCBoZXJlIHRvIHN0b3AKIAkJICAgWGVuIGNvbnNvbGUgbm9pc2UuICovCi0JCWJyZWFrOwotCi0JY2FzZSBNU1JfSUEzMl9DUl9QQVQ6Ci0JCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkKLQkJCXhlbl9zZXRfcGF0KCgodTY0KWhpZ2ggPDwgMzIpIHwgbG93KTsKLQkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlyZXQgPSBuYXRpdmVfd3JpdGVfbXNyX3NhZmUobXNyLCBsb3csIGhpZ2gpOwpAQCAtMTU2MSwxMCArMTU1NSw2IEBACiAKIAkvKiBQcmV2ZW50IHVud2FudGVkIGJpdHMgZnJvbSBiZWluZyBzZXQgaW4gUFRFcy4gKi8KIAlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfR0xPQkFMOwotI2lmIDAKLQlpZiAoIXhlbl9pbml0aWFsX2RvbWFpbigpKQotI2VuZGlmCi0JCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH4oX1BBR0VfUFdUIHwgX1BBR0VfUENEKTsKIAogCS8qCiAJICogUHJldmVudCBwYWdlIHRhYmxlcyBmcm9tIGJlaW5nIGFsbG9jYXRlZCBpbiBoaWdobWVtLCBldmVuCkBAIC0xNjE4LDE0ICsxNjA4LDYgQEAKIAkgKi8KIAlhY3BpX251bWEgPSAtMTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfUEFUCi0JLyoKLQkgKiBGb3IgcmlnaHQgbm93IGRpc2FibGUgdGhlIFBBVC4gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2UKLQkgKiBnaXQgY29tbWl0IDhlYWZmYTY3YjQzZTk5YWU1ODE2MjJjNTEzM2UyMGIwZjQ4YmNlZjEKLQkgKiAoeGVuL3BhdDogRGlzYWJsZSBQQVQgc3VwcG9ydCBmb3Igbm93KSBpcyByZXZlcnRlZC4KLQkgKi8KLQlwYXRfZW5hYmxlZCA9IDA7Ci0jZW5kaWYKIAkvKiBEb24ndCBkbyB0aGUgZnVsbCB2Y3B1X2luZm8gcGxhY2VtZW50IHN0dWZmIHVudGlsIHdlIGhhdmUgYQogCSAgIHBvc3NpYmxlIG1hcCBhbmQgYSBub24tZHVtbXkgc2hhcmVkX2luZm8uICovCiAJcGVyX2NwdSh4ZW5fdmNwdSwgMCkgPSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdOwpAQCAtMTYzNiw2ICsxNjE4LDEzIEBACiAJeGVuX3Jhd19jb25zb2xlX3dyaXRlKCJtYXBwaW5nIGtlcm5lbCBpbnRvIHBoeXNpY2FsIG1lbW9yeVxuIik7CiAJeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUoKHBnZF90ICopeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2UsIHhlbl9zdGFydF9pbmZvLT5ucl9wYWdlcyk7CiAKKwkvKgorCSAqIE1vZGlmeSB0aGUgY2FjaGUgbW9kZSB0cmFuc2xhdGlvbiB0YWJsZXMgdG8gbWF0Y2ggWGVuJ3MgUEFUCisJICogY29uZmlndXJhdGlvbi4KKwkgKi8KKworCXBhdF9pbml0X2NhY2hlX21vZGVzKCk7CisKIAkvKiBrZWVwIHVzaW5nIFhlbiBnZHQgZm9yIG5vdzsgbm8gdXJnZW50IG5lZWQgdG8gY2hhbmdlIGl0ICovCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbW11LmMgYi9hcmNoL3g4Ni94ZW4vbW11LmMKaW5kZXggYThhMWEzZC4uOGM4Mjk4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL21tdS5jCisrKyBiL2FyY2gveDg2L3hlbi9tbXUuYwpAQCAtNDEwLDEzICs0MTAsNyBAQAogX192aXNpYmxlIHB0ZXZhbF90IHhlbl9wdGVfdmFsKHB0ZV90IHB0ZSkKIHsKIAlwdGV2YWxfdCBwdGV2YWwgPSBwdGUucHRlOwotI2lmIDAKLQkvKiBJZiB0aGlzIGlzIGEgV0MgcHRlLCBjb252ZXJ0IGJhY2sgZnJvbSBYZW4gV0MgdG8gTGludXggV0MgKi8KLQlpZiAoKHB0ZXZhbCAmIChfUEFHRV9QQVQgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpKSA9PSBfUEFHRV9QQVQpIHsKLQkJV0FSTl9PTighcGF0X2VuYWJsZWQpOwotCQlwdGV2YWwgPSAocHRldmFsICYgfl9QQUdFX1BBVCkgfCBfUEFHRV9QV1Q7Ci0JfQotI2VuZGlmCisKIAlyZXR1cm4gcHRlX21mbl90b19wZm4ocHRldmFsKTsKIH0KIFBWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX3B0ZV92YWwpOwpAQCAtNDI3LDQ3ICs0MjEsOCBAQAogfQogUFZfQ0FMTEVFX1NBVkVfUkVHU19USFVOSyh4ZW5fcGdkX3ZhbCk7CiAKLS8qCi0gKiBYZW4ncyBQQVQgc2V0dXAgaXMgcGFydCBvZiBpdHMgQUJJLCB0aG91Z2ggSSBhc3N1bWUgZW50cmllcyA2ICYgNwotICogYXJlIHJlc2VydmVkIGZvciBub3csIHRvIGNvcnJlc3BvbmQgdG8gdGhlIEludGVsLXJlc2VydmVkIFBBVAotICogdHlwZXMuCi0gKgotICogV2UgZXhwZWN0IExpbnV4J3MgUEFUIHNldCBhcyBmb2xsb3dzOgotICoKLSAqIElkeCAgUFRFIGZsYWdzICAgICAgICBMaW51eCAgICBYZW4gICAgRGVmYXVsdAotICogMCAgICAgICAgICAgICAgICAgICAgIFdCICAgICAgIFdCICAgICBXQgotICogMSAgICAgICAgICAgIFBXVCAgICAgIFdDICAgICAgIFdUICAgICBXVAotICogMiAgICAgICAgUENEICAgICAgICAgIFVDLSAgICAgIFVDLSAgICBVQy0KLSAqIDMgICAgICAgIFBDRCBQV1QgICAgICBVQyAgICAgICBVQyAgICAgVUMKLSAqIDQgICAgUEFUICAgICAgICAgICAgICBXQiAgICAgICBXQyAgICAgV0IKLSAqIDUgICAgUEFUICAgICBQV1QgICAgICBXQyAgICAgICBXUCAgICAgV1QKLSAqIDYgICAgUEFUIFBDRCAgICAgICAgICBVQy0gICAgICByc3YgICAgVUMtCi0gKiA3ICAgIFBBVCBQQ0QgUFdUICAgICAgVUMgICAgICAgcnN2ICAgIFVDCi0gKi8KLQotdm9pZCB4ZW5fc2V0X3BhdCh1NjQgcGF0KQotewotCS8qIFdlIGV4cGVjdCBMaW51eCB0byB1c2UgYSBQQVQgc2V0dGluZyBvZgotCSAqIFVDIFVDLSBXQyBXQiAoaWdub3JpbmcgdGhlIFBBVCBmbGFnKSAqLwotCVdBUk5fT04ocGF0ICE9IDB4MDAwNzAxMDYwMDA3MDEwNnVsbCk7Ci19Ci0KIF9fdmlzaWJsZSBwdGVfdCB4ZW5fbWFrZV9wdGUocHRldmFsX3QgcHRlKQogewotI2lmIDAKLQkvKiBJZiBMaW51eCBpcyB0cnlpbmcgdG8gc2V0IGEgV0MgcHRlLCB0aGVuIG1hcCB0byB0aGUgWGVuIFdDLgotCSAqIElmIF9QQUdFX1BBVCBpcyBzZXQsIHRoZW4gaXQgcHJvYmFibHkgbWVhbnMgaXQgaXMgcmVhbGx5Ci0JICogX1BBR0VfUFNFLCBzbyBhdm9pZCBmaWRkbGluZyB3aXRoIHRoZSBQQVQgbWFwcGluZyBhbmQgaG9wZQotCSAqIHRoaW5ncyB3b3JrIG91dCBPSy4uLgotCSAqCi0JICogKFdlIHNob3VsZCBuZXZlciBzZWUga2VybmVsIG1hcHBpbmdzIHdpdGggX1BBR0VfUFNFIHNldCwKLQkgKiBidXQgd2UgY291bGQgc2VlIGh1Z2V0bGJmcyBtYXBwaW5ncywgSSB0aGluay4pLgotCSAqLwotCWlmIChwYXRfZW5hYmxlZCAmJiAhV0FSTl9PTihwdGUgJiBfUEFHRV9QQVQpKSB7Ci0JCWlmICgocHRlICYgKF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpID09IF9QQUdFX1BXVCkKLQkJCXB0ZSA9IChwdGUgJiB+KF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpIHwgX1BBR0VfUEFUOwotCX0KLSNlbmRpZgogCXB0ZSA9IHB0ZV9wZm5fdG9fbWZuKHB0ZSk7CiAKIAlyZXR1cm4gbmF0aXZlX21ha2VfcHRlKHB0ZSk7CkBAIC0xNDU3LDggKzE0MTIsMTAgQEAKIAkJcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKXVzZXJfcGdkOwogCiAJCWlmICh1c2VyX3BnZCAhPSBOVUxMKSB7CisjaWZkZWYgQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04KIAkJCXVzZXJfcGdkW3BnZF9pbmRleChWU1lTQ0FMTF9BRERSKV0gPQogCQkJCV9fcGdkKF9fcGEobGV2ZWwzX3VzZXJfdnN5c2NhbGwpIHwgX1BBR0VfVEFCTEUpOworI2VuZGlmCiAJCQlyZXQgPSAwOwogCQl9CiAKQEAgLTIwMjEsNyArMTk3OCw3IEBACiAjIGlmZGVmIENPTkZJR19ISUdITUVNCiAJY2FzZSBGSVhfS01BUF9CRUdJTiAuLi4gRklYX0tNQVBfRU5EOgogIyBlbmRpZgotI2Vsc2UKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl9WU1lTQ0FMTF9FTVVMQVRJT04pCiAJY2FzZSBWU1lTQ0FMTF9QQUdFOgogI2VuZGlmCiAJY2FzZSBGSVhfVEVYVF9QT0tFMDoKQEAgLTIwNjAsNyArMjAxNyw3IEBACiAKIAlfX25hdGl2ZV9zZXRfZml4bWFwKGlkeCwgcHRlKTsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKKyNpZmRlZiBDT05GSUdfWDg2X1ZTWVNDQUxMX0VNVUxBVElPTgogCS8qIFJlcGxpY2F0ZSBjaGFuZ2VzIHRvIG1hcCB0aGUgdnN5c2NhbGwgcGFnZSBpbnRvIHRoZSB1c2VyCiAJICAgcGFnZXRhYmxlIHZzeXNjYWxsIG1hcHBpbmcuICovCiAJaWYgKGlkeCA9PSBWU1lTQ0FMTF9QQUdFKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oIGIvYXJjaC94ODYveGVuL3hlbi1vcHMuaAppbmRleCAyOGM3ZTBiLi40YWI5Mjk4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKQEAgLTMzLDcgKzMzLDYgQEAKIAogdm9pZCB4ZW5fbW1fcGluX2FsbCh2b2lkKTsKIHZvaWQgeGVuX21tX3VucGluX2FsbCh2b2lkKTsKLXZvaWQgeGVuX3NldF9wYXQodTY0KTsKIAogY2hhciAqIF9faW5pdCB4ZW5fbWVtb3J5X3NldHVwKHZvaWQpOwogY2hhciAqIHhlbl9hdXRvX3hsYXRlZF9tZW1vcnlfc2V0dXAodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW8uaAppbmRleCA3NDk0NDIwLi5mZTE2MDBhIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTc0LDEzICs3NCw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKLS8qCi0gKiBHZW5lcmljIEkvTwotICovCi0jZGVmaW5lIHJlYWRiX3JlbGF4ZWQgcmVhZGIKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZCByZWFkdwotI2RlZmluZSByZWFkbF9yZWxheGVkIHJlYWRsCi0KICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pby5oPgpkaWZmIC0tZ2l0IGEvYmxvY2svYmlvLWludGVncml0eS5jIGIvYmxvY2svYmlvLWludGVncml0eS5jCmluZGV4IDA5ODQyMzIuLjVjYmQ1ZDkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jpby1pbnRlZ3JpdHkuYworKysgYi9ibG9jay9iaW8taW50ZWdyaXR5LmMKQEAgLTIxNiw5ICsyMTYsMTAgQEAKIHsKIAlzdHJ1Y3QgYmxrX2ludGVncml0eSAqYmkgPSBiZGV2X2dldF9pbnRlZ3JpdHkoYmlvLT5iaV9iZGV2KTsKIAlzdHJ1Y3QgYmxrX2ludGVncml0eV9pdGVyIGl0ZXI7Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OworCXN0cnVjdCBidmVjX2l0ZXIgYnZpdGVyOworCXN0cnVjdCBiaW9fdmVjIGJ2OwogCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcCA9IGJpb19pbnRlZ3JpdHkoYmlvKTsKLQl1bnNpZ25lZCBpbnQgaSwgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKIAl2b2lkICpwcm90X2J1ZiA9IHBhZ2VfYWRkcmVzcyhiaXAtPmJpcF92ZWMtPmJ2X3BhZ2UpICsKIAkJYmlwLT5iaXBfdmVjLT5idl9vZmZzZXQ7CiAKQEAgLTIyNywxMSArMjI4LDExIEBACiAJaXRlci5zZWVkID0gYmlwX2dldF9zZWVkKGJpcCk7CiAJaXRlci5wcm90X2J1ZiA9IHByb3RfYnVmOwogCi0JYmlvX2Zvcl9lYWNoX3NlZ21lbnRfYWxsKGJ2LCBiaW8sIGkpIHsKLQkJdm9pZCAqa2FkZHIgPSBrbWFwX2F0b21pYyhidi0+YnZfcGFnZSk7CisJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgYnZpdGVyKSB7CisJCXZvaWQgKmthZGRyID0ga21hcF9hdG9taWMoYnYuYnZfcGFnZSk7CiAKLQkJaXRlci5kYXRhX2J1ZiA9IGthZGRyICsgYnYtPmJ2X29mZnNldDsKLQkJaXRlci5kYXRhX3NpemUgPSBidi0+YnZfbGVuOworCQlpdGVyLmRhdGFfYnVmID0ga2FkZHIgKyBidi5idl9vZmZzZXQ7CisJCWl0ZXIuZGF0YV9zaXplID0gYnYuYnZfbGVuOwogCiAJCXJldCA9IHByb2NfZm4oJml0ZXIpOwogCQlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCAwNDIxYjUzLi5lYTFjNGQwIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTEyNjYsNyArMTI2Niw3IEBACiAJYmxrX2NsZWFyX3JxX2NvbXBsZXRlKHJxKTsKIAl0cmFjZV9ibG9ja19ycV9yZXF1ZXVlKHEsIHJxKTsKIAotCWlmIChibGtfcnFfdGFnZ2VkKHJxKSkKKwlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9RVUVVRUQpCiAJCWJsa19xdWV1ZV9lbmRfdGFnKHEsIHJxKTsKIAogCUJVR19PTihibGtfcXVldWVkX3JxKHJxKSk7CkBAIC0xMzI1LDcgKzEzMjUsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGFydF9yb3VuZF9zdGF0cyk7CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHZvaWQgYmxrX3BtX3B1dF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlpZiAocnEtPnEtPmRldiAmJiAhKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUE0pICYmICEtLXJxLT5xLT5ucl9wZW5kaW5nKQpAQCAtMjEzNCw3ICsyMTM0LDcgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogLyoKICAqIERvbid0IHByb2Nlc3Mgbm9ybWFsIHJlcXVlc3RzIHdoZW4gcXVldWUgaXMgc3VzcGVuZGVkCiAgKiBvciBpbiB0aGUgcHJvY2VzcyBvZiBzdXNwZW5kaW5nL3Jlc3VtaW5nCkBAIC0yNTU0LDcgKzI1NTQsNyBAQAogICovCiB2b2lkIGJsa19maW5pc2hfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBpbnQgZXJyb3IpCiB7Ci0JaWYgKGJsa19ycV90YWdnZWQocmVxKSkKKwlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfUVVFVUVEKQogCQlibGtfcXVldWVfZW5kX3RhZyhyZXEtPnEsIHJlcSk7CiAKIAlCVUdfT04oYmxrX3F1ZXVlZF9ycShyZXEpKTsKQEAgLTMxNTksNyArMzE1OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGJsa19maW5pc2hfcGx1Zyk7CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogLyoqCiAgKiBibGtfcG1fcnVudGltZV9pbml0IC0gQmxvY2sgbGF5ZXIgcnVudGltZSBQTSBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKiBAcTogdGhlIHF1ZXVlIG9mIHRoZSBkZXZpY2UKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS10YWcuYyBiL2Jsb2NrL2Jsay1tcS10YWcuYwppbmRleCA4MzE3MTc1Li43MjhiOWE0IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEtdGFnLmMKKysrIGIvYmxvY2svYmxrLW1xLXRhZy5jCkBAIC01ODQsNiArNTg0LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogYmxrX21xX3VuaXF1ZV90YWcoKSAtIHJldHVybiBhIHRhZyB0aGF0IGlzIHVuaXF1ZSBxdWV1ZS13aWRlCisgKiBAcnE6IHJlcXVlc3QgZm9yIHdoaWNoIHRvIGNvbXB1dGUgYSB1bmlxdWUgdGFnCisgKgorICogVGhlIHRhZyBmaWVsZCBpbiBzdHJ1Y3QgcmVxdWVzdCBpcyB1bmlxdWUgcGVyIGhhcmR3YXJlIHF1ZXVlIGJ1dCBub3Qgb3ZlcgorICogYWxsIGhhcmR3YXJlIHF1ZXVlcy4gSGVuY2UgdGhpcyBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0YWcgd2l0aCB0aGUKKyAqIGhhcmR3YXJlIGNvbnRleHQgaW5kZXggaW4gdGhlIHVwcGVyIGJpdHMgYW5kIHRoZSBwZXIgaGFyZHdhcmUgcXVldWUgdGFnIGluCisgKiB0aGUgbG93ZXIgYml0cy4KKyAqCisgKiBOb3RlOiBXaGVuIGNhbGxlZCBmb3IgYSByZXF1ZXN0IHRoYXQgaXMgcXVldWVkIG9uIGEgbm9uLW11bHRpcXVldWUgcmVxdWVzdAorICogcXVldWUsIHRoZSBoYXJkd2FyZSBjb250ZXh0IGluZGV4IGlzIHNldCB0byB6ZXJvLgorICovCit1MzIgYmxrX21xX3VuaXF1ZV90YWcoc3RydWN0IHJlcXVlc3QgKnJxKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcnEtPnE7CisJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CisJaW50IGh3cSA9IDA7CisKKwlpZiAocS0+bXFfb3BzKSB7CisJCWhjdHggPSBxLT5tcV9vcHMtPm1hcF9xdWV1ZShxLCBycS0+bXFfY3R4LT5jcHUpOworCQlod3EgPSBoY3R4LT5xdWV1ZV9udW07CisJfQorCisJcmV0dXJuIChod3EgPDwgQkxLX01RX1VOSVFVRV9UQUdfQklUUykgfAorCQkocnEtPnRhZyAmIEJMS19NUV9VTklRVUVfVEFHX01BU0spOworfQorRVhQT1JUX1NZTUJPTChibGtfbXFfdW5pcXVlX3RhZyk7CisKIHNzaXplX3QgYmxrX21xX3RhZ19zeXNmc19zaG93KHN0cnVjdCBibGtfbXFfdGFncyAqdGFncywgY2hhciAqcGFnZSkKIHsKIAljaGFyICpvcmlnX3BhZ2UgPSBwYWdlOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuYwppbmRleCAxZDAxNmZjLi45MmNlZWYwIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuYworKysgYi9ibG9jay9ibGstbXEuYwpAQCAtMjA0OSw2ICsyMDQ5LDggQEAKICAqLwogaW50IGJsa19tcV9hbGxvY190YWdfc2V0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0KQogeworCUJVSUxEX0JVR19PTihCTEtfTVFfTUFYX0RFUFRIID4gMSA8PCBCTEtfTVFfVU5JUVVFX1RBR19CSVRTKTsKKwogCWlmICghc2V0LT5ucl9od19xdWV1ZXMpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghc2V0LT5xdWV1ZV9kZXB0aCkKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IGFmYTNiMDMuLjU5Nzk0ZDAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtNTM5LDcgKzUzOSw3IEBACiAJCWUtPnR5cGUtPm9wcy5lbGV2YXRvcl9iaW9fbWVyZ2VkX2ZuKHEsIHJxLCBiaW8pOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB2b2lkIGJsa19wbV9yZXF1ZXVlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQogewogCWlmIChycS0+cS0+ZGV2ICYmICEocnEtPmNtZF9mbGFncyAmIFJFUV9QTSkpCmRpZmYgLS1naXQgYS9ibG9jay9zY3NpX2lvY3RsLmMgYi9ibG9jay9zY3NpX2lvY3RsLmMKaW5kZXggYjBjMmE2MS4uMjgxNjNmYSAxMDA2NDQKLS0tIGEvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJX19zZXRfYml0KEdQQ01EX1ZFUklGWV8xMCwgZmlsdGVyLT5yZWFkX29rKTsKIAlfX3NldF9iaXQoVkVSSUZZXzE2LCBmaWx0ZXItPnJlYWRfb2spOwogCV9fc2V0X2JpdChSRVBPUlRfTFVOUywgZmlsdGVyLT5yZWFkX29rKTsKLQlfX3NldF9iaXQoU0VSVklDRV9BQ1RJT05fSU4sIGZpbHRlci0+cmVhZF9vayk7CisJX19zZXRfYml0KFNFUlZJQ0VfQUNUSU9OX0lOXzE2LCBmaWx0ZXItPnJlYWRfb2spOwogCV9fc2V0X2JpdChSRUNFSVZFX0RJQUdOT1NUSUMsIGZpbHRlci0+cmVhZF9vayk7CiAJX19zZXRfYml0KE1BSU5URU5BTkNFX0lOLCBmaWx0ZXItPnJlYWRfb2spOwogCV9fc2V0X2JpdChHUENNRF9SRUFEX0JVRkZFUl9DQVBBQ0lUWSwgZmlsdGVyLT5yZWFkX29rKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvS2NvbmZpZyBiL2RyaXZlcnMvS2NvbmZpZwppbmRleCAxYTY5M2QzLi5hZjAyYThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9LY29uZmlnCkBAIC0xLDUgKzEsNyBAQAogbWVudSAiRGV2aWNlIERyaXZlcnMiCiAKK3NvdXJjZSAiZHJpdmVycy9hbWJhL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9iYXNlL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9idXMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggYjIzZmUzNy4uODk1MWNlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0zNjAsMTUgKzM2MCwxNCBAQAogY29uZmlnIEFDUElfUkVEVUNFRF9IQVJEV0FSRV9PTkxZCiAJYm9vbCAiSGFyZHdhcmUtcmVkdWNlZCBBQ1BJIHN1cHBvcnQgb25seSIgaWYgRVhQRVJUCiAJZGVmX2Jvb2wgbgotCWRlcGVuZHMgb24gQUNQSQogCWhlbHAKLQlUaGlzIGNvbmZpZyBpdGVtIGNoYW5nZXMgdGhlIHdheSB0aGUgQUNQSSBjb2RlIGlzIGJ1aWx0LiAgV2hlbiB0aGlzCi0Jb3B0aW9uIGlzIHNlbGVjdGVkLCB0aGUga2VybmVsIHdpbGwgdXNlIGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZgotCUFDUElDQSB0aGF0IE9OTFkgc3VwcG9ydHMgdGhlIEFDUEkgInJlZHVjZWQgaGFyZHdhcmUiIG1vZGUuICBUaGUKLQlyZXN1bHRpbmcga2VybmVsIHdpbGwgYmUgc21hbGxlciBidXQgaXQgd2lsbCBhbHNvIGJlIHJlc3RyaWN0ZWQgdG8KLQlydW5uaW5nIGluIEFDUEkgcmVkdWNlZCBoYXJkd2FyZSBtb2RlIE9OTFkuCisJICBUaGlzIGNvbmZpZyBpdGVtIGNoYW5nZXMgdGhlIHdheSB0aGUgQUNQSSBjb2RlIGlzIGJ1aWx0LiAgV2hlbiB0aGlzCisJICBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZSBrZXJuZWwgd2lsbCB1c2UgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mCisJICBBQ1BJQ0EgdGhhdCBPTkxZIHN1cHBvcnRzIHRoZSBBQ1BJICJyZWR1Y2VkIGhhcmR3YXJlIiBtb2RlLiAgVGhlCisJICByZXN1bHRpbmcga2VybmVsIHdpbGwgYmUgc21hbGxlciBidXQgaXQgd2lsbCBhbHNvIGJlIHJlc3RyaWN0ZWQgdG8KKwkgIHJ1bm5pbmcgaW4gQUNQSSByZWR1Y2VkIGhhcmR3YXJlIG1vZGUgT05MWS4KIAotCUlmIHlvdSBhcmUgdW5zdXJlIHdoYXQgdG8gZG8sIGRvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24uCisJICBJZiB5b3UgYXJlIHVuc3VyZSB3aGF0IHRvIGRvLCBkbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uLgogCiBzb3VyY2UgImRyaXZlcnMvYWNwaS9hcGVpL0tjb25maWciCiAKQEAgLTM5NCw0ICszOTMsMjcgQEAKIAkgIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHRoYXQgZnVuY3Rpb25hbGl0eSB3aXRoIGNvcnJlc3BvbmRpbmcKIAkgIHRyYWNlcG9pbnQgd2hpY2ggY2FycmllcyB0aGF0IGluZm9ybWF0aW9uIHRvIHVzZXJzcGFjZS4KIAorbWVudWNvbmZpZyBQTUlDX09QUkVHSU9OCisJYm9vbCAiUE1JQyAoUG93ZXIgTWFuYWdlbWVudCBJbnRlZ3JhdGVkIENpcmN1aXQpIG9wZXJhdGlvbiByZWdpb24gc3VwcG9ydCIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIHN1cHBvcnQgZm9yIEFDUEkgb3BlcmF0aW9uCisJICByZWdpb24gb2YgdGhlIFBNSUMgY2hpcC4gVGhlIG9wZXJhdGlvbiByZWdpb24gY2FuIGJlIHVzZWQKKwkgIHRvIGNvbnRyb2wgcG93ZXIgcmFpbHMgYW5kIHNlbnNvciByZWFkaW5nL3dyaXRpbmcgb24gdGhlCisJICBQTUlDIGNoaXAuCisKK2lmIFBNSUNfT1BSRUdJT04KK2NvbmZpZyBDUkNfUE1JQ19PUFJFR0lPTgorCWJvb2wgIkFDUEkgb3BlcmF0aW9uIHJlZ2lvbiBzdXBwb3J0IGZvciBDcnlzdGFsQ292ZSBQTUlDIgorCWRlcGVuZHMgb24gSU5URUxfU09DX1BNSUMKKwloZWxwCisJICBUaGlzIGNvbmZpZyBhZGRzIEFDUEkgb3BlcmF0aW9uIHJlZ2lvbiBzdXBwb3J0IGZvciBDcnlzdGFsQ292ZSBQTUlDLgorCitjb25maWcgWFBPV0VSX1BNSUNfT1BSRUdJT04KKwlib29sICJBQ1BJIG9wZXJhdGlvbiByZWdpb24gc3VwcG9ydCBmb3IgWFBvd2VyIEFYUDI4OCBQTUlDIgorCWRlcGVuZHMgb24gQVhQMjg4X0FEQyA9IHkKKwloZWxwCisJICBUaGlzIGNvbmZpZyBhZGRzIEFDUEkgb3BlcmF0aW9uIHJlZ2lvbiBzdXBwb3J0IGZvciBYUG93ZXIgQVhQMjg4IFBNSUMuCisKK2VuZGlmCisKIGVuZGlmCSMgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCmluZGV4IGMzYjJmY2IuLmY3NDMxN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTQ3LDYgKzQ3LDcgQEAKIGFjcGkteQkJCQkrPSBwb3dlci5vCiBhY3BpLXkJCQkJKz0gZXZlbnQubwogYWNwaS15CQkJCSs9IHN5c2ZzLm8KK2FjcGkteQkJCQkrPSBwcm9wZXJ0eS5vCiBhY3BpLSQoQ09ORklHX1g4NikJCSs9IGFjcGlfY21vc19ydGMubwogYWNwaS0kKENPTkZJR19ERUJVR19GUykJCSs9IGRlYnVnZnMubwogYWNwaS0kKENPTkZJR19BQ1BJX05VTUEpCSs9IG51bWEubwpAQCAtODcsMyArODgsNyBAQAogb2JqLSQoQ09ORklHX0FDUElfQVBFSSkJCSs9IGFwZWkvCiAKIG9iai0kKENPTkZJR19BQ1BJX0VYVExPRykJKz0gYWNwaV9leHRsb2cubworCitvYmotJChDT05GSUdfUE1JQ19PUFJFR0lPTikJKz0gcG1pYy9pbnRlbF9wbWljLm8KK29iai0kKENPTkZJR19DUkNfUE1JQ19PUFJFR0lPTikgKz0gcG1pYy9pbnRlbF9wbWljX2NyYy5vCitvYmotJChDT05GSUdfWFBPV0VSX1BNSUNfT1BSRUdJT04pICs9IHBtaWMvaW50ZWxfcG1pY194cG93ZXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfbHBzcy5jIGIvZHJpdmVycy9hY3BpL2FjcGlfbHBzcy5jCmluZGV4IDkzZDE2MDYuLjRmM2ZlYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpX2xwc3MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9scHNzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogQUNQSSBzdXBwb3J0IGZvciBJbnRlbCBMeW54cG9pbnQgTFBTUy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCiAgKiBBdXRob3JzOiBNaWthIFdlc3RlcmJlcmcgPG1pa2Eud2VzdGVyYmVyZ0BsaW51eC5pbnRlbC5jb20+CiAgKiAgICAgICAgICBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+CiAgKgpAQCAtNjAsNiArNjAsOCBAQAogI2RlZmluZSBMUFNTX0NMS19ESVZJREVSCQlCSVQoMikKICNkZWZpbmUgTFBTU19MVFIJCQlCSVQoMykKICNkZWZpbmUgTFBTU19TQVZFX0NUWAkJCUJJVCg0KQorI2RlZmluZSBMUFNTX0RFVl9QUk9YWQkJCUJJVCg1KQorI2RlZmluZSBMUFNTX1BST1hZX1JFUQkJCUJJVCg2KQogCiBzdHJ1Y3QgbHBzc19wcml2YXRlX2RhdGE7CiAKQEAgLTcwLDggKzcyLDEwIEBACiAJdm9pZCAoKnNldHVwKShzdHJ1Y3QgbHBzc19wcml2YXRlX2RhdGEgKnBkYXRhKTsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICpwcm94eV9kZXZpY2U7CisKIHN0YXRpYyBzdHJ1Y3QgbHBzc19kZXZpY2VfZGVzYyBscHNzX2RtYV9kZXNjID0gewotCS5mbGFncyA9IExQU1NfQ0xLLAorCS5mbGFncyA9IExQU1NfQ0xLIHwgTFBTU19QUk9YWV9SRVEsCiB9OwogCiBzdHJ1Y3QgbHBzc19wcml2YXRlX2RhdGEgewpAQCAtMTQ2LDIyICsxNTAsMjQgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbHBzc19kZXZpY2VfZGVzYyBieXRfdWFydF9kZXZfZGVzYyA9IHsKLQkuZmxhZ3MgPSBMUFNTX0NMSyB8IExQU1NfQ0xLX0dBVEUgfCBMUFNTX0NMS19ESVZJREVSIHwgTFBTU19TQVZFX0NUWCwKKwkuZmxhZ3MgPSBMUFNTX0NMSyB8IExQU1NfQ0xLX0dBVEUgfCBMUFNTX0NMS19ESVZJREVSIHwgTFBTU19TQVZFX0NUWCB8CisJCSBMUFNTX0RFVl9QUk9YWSwKIAkucHJ2X29mZnNldCA9IDB4ODAwLAogCS5zZXR1cCA9IGxwc3NfdWFydF9zZXR1cCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbHBzc19kZXZpY2VfZGVzYyBieXRfc3BpX2Rldl9kZXNjID0gewotCS5mbGFncyA9IExQU1NfQ0xLIHwgTFBTU19DTEtfR0FURSB8IExQU1NfQ0xLX0RJVklERVIgfCBMUFNTX1NBVkVfQ1RYLAorCS5mbGFncyA9IExQU1NfQ0xLIHwgTFBTU19DTEtfR0FURSB8IExQU1NfQ0xLX0RJVklERVIgfCBMUFNTX1NBVkVfQ1RYIHwKKwkJIExQU1NfREVWX1BST1hZLAogCS5wcnZfb2Zmc2V0ID0gMHg0MDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGxwc3NfZGV2aWNlX2Rlc2MgYnl0X3NkaW9fZGV2X2Rlc2MgPSB7Ci0JLmZsYWdzID0gTFBTU19DTEssCisJLmZsYWdzID0gTFBTU19DTEsgfCBMUFNTX0RFVl9QUk9YWSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbHBzc19kZXZpY2VfZGVzYyBieXRfaTJjX2Rldl9kZXNjID0gewotCS5mbGFncyA9IExQU1NfQ0xLIHwgTFBTU19TQVZFX0NUWCwKKwkuZmxhZ3MgPSBMUFNTX0NMSyB8IExQU1NfU0FWRV9DVFggfCBMUFNTX0RFVl9QUk9YWSwKIAkucHJ2X29mZnNldCA9IDB4ODAwLAogCS5zZXR1cCA9IGJ5dF9pMmNfc2V0dXAsCiB9OwpAQCAtMzY4LDYgKzM3NCw4IEBACiAJYWRldi0+ZHJpdmVyX2RhdGEgPSBwZGF0YTsKIAlwZGV2ID0gYWNwaV9jcmVhdGVfcGxhdGZvcm1fZGV2aWNlKGFkZXYpOwogCWlmICghSVNfRVJSX09SX05VTEwocGRldikpIHsKKwkJaWYgKCFwcm94eV9kZXZpY2UgJiYgZGV2X2Rlc2MtPmZsYWdzICYgTFBTU19ERVZfUFJPWFkpCisJCQlwcm94eV9kZXZpY2UgPSAmcGRldi0+ZGV2OwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTQ5OSwxNCArNTA3LDE1IEBACiAvKioKICAqIGFjcGlfbHBzc19zYXZlX2N0eCgpIC0gU2F2ZSB0aGUgcHJpdmF0ZSByZWdpc3RlcnMgb2YgTFBTUyBkZXZpY2UKICAqIEBkZXY6IExQU1MgZGV2aWNlCisgKiBAcGRhdGE6IHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgTFBTUyBkZXZpY2UKICAqCiAgKiBNb3N0IExQU1MgZGV2aWNlcyBoYXZlIHByaXZhdGUgcmVnaXN0ZXJzIHdoaWNoIG1heSBsb29zZSB0aGVpciBjb250ZXh0IHdoZW4KICAqIHRoZSBkZXZpY2UgaXMgcG93ZXJlZCBkb3duLiBhY3BpX2xwc3Nfc2F2ZV9jdHgoKSBzYXZlcyB0aG9zZSByZWdpc3RlcnMgaW50bwogICogcHJ2X3JlZ19jdHggYXJyYXkuCiAgKi8KLXN0YXRpYyB2b2lkIGFjcGlfbHBzc19zYXZlX2N0eChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBhY3BpX2xwc3Nfc2F2ZV9jdHgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBscHNzX3ByaXZhdGVfZGF0YSAqcGRhdGEpCiB7Ci0Jc3RydWN0IGxwc3NfcHJpdmF0ZV9kYXRhICpwZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoQUNQSV9DT01QQU5JT04oZGV2KSk7CiAJdW5zaWduZWQgaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTFBTU19QUlZfUkVHX0NPVU5UOyBpKyspIHsKQEAgLTUyMSwxMiArNTMwLDEzIEBACiAvKioKICAqIGFjcGlfbHBzc19yZXN0b3JlX2N0eCgpIC0gUmVzdG9yZSB0aGUgcHJpdmF0ZSByZWdpc3RlcnMgb2YgTFBTUyBkZXZpY2UKICAqIEBkZXY6IExQU1MgZGV2aWNlCisgKiBAcGRhdGE6IHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgTFBTUyBkZXZpY2UKICAqCiAgKiBSZXN0b3JlcyB0aGUgcmVnaXN0ZXJzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0b3JlZCB3aXRoIGFjcGlfbHBzc19zYXZlX2N0eCgpLgogICovCi1zdGF0aWMgdm9pZCBhY3BpX2xwc3NfcmVzdG9yZV9jdHgoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgYWNwaV9scHNzX3Jlc3RvcmVfY3R4KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBscHNzX3ByaXZhdGVfZGF0YSAqcGRhdGEpCiB7Ci0Jc3RydWN0IGxwc3NfcHJpdmF0ZV9kYXRhICpwZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoQUNQSV9DT01QQU5JT04oZGV2KSk7CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKgpAQCAtNTQ5LDU0ICs1NTksODIgQEAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgYWNwaV9scHNzX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldCA9IHBtX2dlbmVyaWNfc3VzcGVuZF9sYXRlKGRldik7CisJc3RydWN0IGxwc3NfcHJpdmF0ZV9kYXRhICpwZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoQUNQSV9DT01QQU5JT04oZGV2KSk7CisJaW50IHJldDsKIAorCXJldCA9IHBtX2dlbmVyaWNfc3VzcGVuZF9sYXRlKGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWFjcGlfbHBzc19zYXZlX2N0eChkZXYpOworCWlmIChwZGF0YS0+ZGV2X2Rlc2MtPmZsYWdzICYgTFBTU19TQVZFX0NUWCkKKwkJYWNwaV9scHNzX3NhdmVfY3R4KGRldiwgcGRhdGEpOworCiAJcmV0dXJuIGFjcGlfZGV2X3N1c3BlbmRfbGF0ZShkZXYpOwogfQogCiBzdGF0aWMgaW50IGFjcGlfbHBzc19yZXN1bWVfZWFybHkoc3RydWN0IGRldmljZSAqZGV2KQogewotCWludCByZXQgPSBhY3BpX2Rldl9yZXN1bWVfZWFybHkoZGV2KTsKKwlzdHJ1Y3QgbHBzc19wcml2YXRlX2RhdGEgKnBkYXRhID0gYWNwaV9kcml2ZXJfZGF0YShBQ1BJX0NPTVBBTklPTihkZXYpKTsKKwlpbnQgcmV0OwogCisJcmV0ID0gYWNwaV9kZXZfcmVzdW1lX2Vhcmx5KGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWFjcGlfbHBzc19yZXN0b3JlX2N0eChkZXYpOworCWlmIChwZGF0YS0+ZGV2X2Rlc2MtPmZsYWdzICYgTFBTU19TQVZFX0NUWCkKKwkJYWNwaV9scHNzX3Jlc3RvcmVfY3R4KGRldiwgcGRhdGEpOworCiAJcmV0dXJuIHBtX2dlbmVyaWNfcmVzdW1lX2Vhcmx5KGRldik7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogc3RhdGljIGludCBhY3BpX2xwc3NfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0ID0gcG1fZ2VuZXJpY19ydW50aW1lX3N1c3BlbmQoZGV2KTsKKwlzdHJ1Y3QgbHBzc19wcml2YXRlX2RhdGEgKnBkYXRhID0gYWNwaV9kcml2ZXJfZGF0YShBQ1BJX0NPTVBBTklPTihkZXYpKTsKKwlpbnQgcmV0OwogCisJcmV0ID0gcG1fZ2VuZXJpY19ydW50aW1lX3N1c3BlbmQoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JYWNwaV9scHNzX3NhdmVfY3R4KGRldik7Ci0JcmV0dXJuIGFjcGlfZGV2X3J1bnRpbWVfc3VzcGVuZChkZXYpOworCWlmIChwZGF0YS0+ZGV2X2Rlc2MtPmZsYWdzICYgTFBTU19TQVZFX0NUWCkKKwkJYWNwaV9scHNzX3NhdmVfY3R4KGRldiwgcGRhdGEpOworCisJcmV0ID0gYWNwaV9kZXZfcnVudGltZV9zdXNwZW5kKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwZGF0YS0+ZGV2X2Rlc2MtPmZsYWdzICYgTFBTU19QUk9YWV9SRVEgJiYgcHJveHlfZGV2aWNlKQorCQlyZXR1cm4gcG1fcnVudGltZV9wdXRfc3luY19zdXNwZW5kKHByb3h5X2RldmljZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX2xwc3NfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCWludCByZXQgPSBhY3BpX2Rldl9ydW50aW1lX3Jlc3VtZShkZXYpOworCXN0cnVjdCBscHNzX3ByaXZhdGVfZGF0YSAqcGRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKEFDUElfQ09NUEFOSU9OKGRldikpOworCWludCByZXQ7CiAKKwlpZiAocGRhdGEtPmRldl9kZXNjLT5mbGFncyAmIExQU1NfUFJPWFlfUkVRICYmIHByb3h5X2RldmljZSkgeworCQlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKHByb3h5X2RldmljZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGFjcGlfZGV2X3J1bnRpbWVfcmVzdW1lKGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWFjcGlfbHBzc19yZXN0b3JlX2N0eChkZXYpOworCWlmIChwZGF0YS0+ZGV2X2Rlc2MtPmZsYWdzICYgTFBTU19TQVZFX0NUWCkKKwkJYWNwaV9scHNzX3Jlc3RvcmVfY3R4KGRldiwgcGRhdGEpOworCiAJcmV0dXJuIHBtX2dlbmVyaWNfcnVudGltZV9yZXN1bWUoZGV2KTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiBzdGF0aWMgc3RydWN0IGRldl9wbV9kb21haW4gYWNwaV9scHNzX3BtX2RvbWFpbiA9IHsKIAkub3BzID0geworI2lmZGVmIENPTkZJR19QTQogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogCQkucHJlcGFyZSA9IGFjcGlfc3Vic3lzX3ByZXBhcmUsCiAJCS5jb21wbGV0ZSA9IGFjcGlfc3Vic3lzX2NvbXBsZXRlLApAQCAtNjA4LDcgKzY0Niw2IEBACiAJCS5wb3dlcm9mZl9sYXRlID0gYWNwaV9scHNzX3N1c3BlbmRfbGF0ZSwKIAkJLnJlc3RvcmVfZWFybHkgPSBhY3BpX2xwc3NfcmVzdW1lX2Vhcmx5LAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIAkJLnJ1bnRpbWVfc3VzcGVuZCA9IGFjcGlfbHBzc19ydW50aW1lX3N1c3BlbmQsCiAJCS5ydW50aW1lX3Jlc3VtZSA9IGFjcGlfbHBzc19ydW50aW1lX3Jlc3VtZSwKICNlbmRpZgpAQCAtNjMxLDMwICs2NjgsMjcgQEAKIAkJcmV0dXJuIDA7CiAKIAlwZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoYWRldik7Ci0JaWYgKCFwZGF0YSB8fCAhcGRhdGEtPm1taW9fYmFzZSkKKwlpZiAoIXBkYXRhKQogCQlyZXR1cm4gMDsKIAotCWlmIChwZGF0YS0+bW1pb19zaXplIDwgcGRhdGEtPmRldl9kZXNjLT5wcnZfb2Zmc2V0ICsgTFBTU19MVFJfU0laRSkgeworCWlmIChwZGF0YS0+bW1pb19iYXNlICYmCisJICAgIHBkYXRhLT5tbWlvX3NpemUgPCBwZGF0YS0+ZGV2X2Rlc2MtPnBydl9vZmZzZXQgKyBMUFNTX0xUUl9TSVpFKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk1NSU8gc2l6ZSBpbnN1ZmZpY2llbnQgdG8gYWNjZXNzIExUUlxuIik7CiAJCXJldHVybiAwOwogCX0KIAogCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBCVVNfTk9USUZZX0JPVU5EX0RSSVZFUjoKLQkJaWYgKHBkYXRhLT5kZXZfZGVzYy0+ZmxhZ3MgJiBMUFNTX1NBVkVfQ1RYKQotCQkJcGRldi0+ZGV2LnBtX2RvbWFpbiA9ICZhY3BpX2xwc3NfcG1fZG9tYWluOwotCQlicmVhazsKLQljYXNlIEJVU19OT1RJRllfVU5CT1VORF9EUklWRVI6Ci0JCWlmIChwZGF0YS0+ZGV2X2Rlc2MtPmZsYWdzICYgTFBTU19TQVZFX0NUWCkKLQkJCXBkZXYtPmRldi5wbV9kb21haW4gPSBOVUxMOwotCQlicmVhazsKIAljYXNlIEJVU19OT1RJRllfQUREX0RFVklDRToKKwkJcGRldi0+ZGV2LnBtX2RvbWFpbiA9ICZhY3BpX2xwc3NfcG1fZG9tYWluOwogCQlpZiAocGRhdGEtPmRldl9kZXNjLT5mbGFncyAmIExQU1NfTFRSKQogCQkJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosCiAJCQkJCQkgICZscHNzX2F0dHJfZ3JvdXApOworCQlicmVhazsKIAljYXNlIEJVU19OT1RJRllfREVMX0RFVklDRToKIAkJaWYgKHBkYXRhLT5kZXZfZGVzYy0+ZmxhZ3MgJiBMUFNTX0xUUikKIAkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZscHNzX2F0dHJfZ3JvdXApOworCQlwZGV2LT5kZXYucG1fZG9tYWluID0gTlVMTDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCmluZGV4IGViZjAyY2MuLjdmNjA1ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmgKQEAgLTMwNSw2ICszMDUsNyBAQAogCiBBQ1BJX0lOSVRfR0xPQkFMKHU4LCBhY3BpX2dibF9ub19yZXNvdXJjZV9kaXNhc3NlbWJseSwgRkFMU0UpOwogQUNQSV9JTklUX0dMT0JBTCh1OCwgYWNwaV9nYmxfaWdub3JlX25vb3Bfb3BlcmF0b3IsIEZBTFNFKTsKK0FDUElfSU5JVF9HTE9CQUwodTgsIGFjcGlfZ2JsX2NzdHlsZV9kaXNhc3NlbWJseSwgVFJVRSk7CiAKIEFDUElfR0xPQkFMKHU4LCBhY3BpX2dibF9kYl9vcHRfZGlzYXNtKTsKIEFDUElfR0xPQkFMKHU4LCBhY3BpX2dibF9kYl9vcHRfdmVyYm9zZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCmluZGV4IGMwMGU3ZTQuLjY4MGQyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCkBAIC00NTQsNiArNDU0LDcgQEAKIAl1MTYgYmFzZV9ncGVfbnVtYmVyOwkvKiBCYXNlIEdQRSBudW1iZXIgZm9yIHRoaXMgcmVnaXN0ZXIgKi8KIAl1OCBlbmFibGVfZm9yX3dha2U7CS8qIEdQRXMgdG8ga2VlcCBlbmFibGVkIHdoZW4gc2xlZXBpbmcgKi8KIAl1OCBlbmFibGVfZm9yX3J1bjsJLyogR1BFcyB0byBrZWVwIGVuYWJsZWQgd2hlbiBydW5uaW5nICovCisJdTggZW5hYmxlX21hc2s7CQkvKiBDdXJyZW50IG1hc2sgb2YgZW5hYmxlZCBHUEVzICovCiB9OwogCiAvKgpAQCAtNzIyLDYgKzcyMyw3IEBACiAJQUNQSV9ESVNBU01fT05MWV9NRU1CRVJTIChcCiAJdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhc21fZmxhZ3M7ICAgLyogVXNlZCBkdXJpbmcgQU1MIGRpc2Fzc2VtYmx5ICovXAogCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYXNtX29wY29kZTsgIC8qIFN1YnR5cGUgdXNlZCBmb3IgZGlzYXNzZW1ibHkgKi9cCisJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3BlcmF0b3Jfc3ltYm9sOy8qIFVzZWQgZm9yIEMtc3R5bGUgb3BlcmF0b3IgbmFtZSBzdHJpbmdzICovXAogCWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1sX29wX25hbWVbMTZdKQkvKiBPcCBuYW1lIChkZWJ1ZyBvbmx5KSAqLwogCiAvKiBGbGFncyBmb3IgZGlzYXNtX2ZsYWdzIGZpZWxkIGFib3ZlICovCkBAIC04MjcsNiArODI5LDggQEAKICNkZWZpbmUgQUNQSV9QQVJTRU9QX0VNUFRZX1RFUk1MSVNUICAgICAweDA0CiAjZGVmaW5lIEFDUElfUEFSU0VPUF9QUkVERUZfQ0hFQ0tFRCAgICAgMHgwOAogI2RlZmluZSBBQ1BJX1BBUlNFT1BfU1BFQ0lBTCAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQUNQSV9QQVJTRU9QX0NPTVBPVU5EICAgICAgICAgICAweDIwCisjZGVmaW5lIEFDUElfUEFSU0VPUF9BU1NJR05NRU5UICAgICAgICAgMHg0MAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKaW5kZXggMjA5NWRmYi4uYWE3MDE1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAKIAkvKiBFbmFibGUgdGhlIHJlcXVlc3RlZCBHUEUgKi8KIAotCXN0YXR1cyA9IGFjcGlfaHdfbG93X3NldF9ncGUoZ3BlX2V2ZW50X2luZm8sIEFDUElfR1BFX0VOQUJMRSk7CisJc3RhdHVzID0gYWNwaV9od19sb3dfc2V0X2dwZShncGVfZXZlbnRfaW5mbywgQUNQSV9HUEVfRU5BQkxFX1NBVkUpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCQlzdGF0dXMgPQogCQkJICAgIGFjcGlfaHdfbG93X3NldF9ncGUoZ3BlX2V2ZW50X2luZm8sCi0JCQkJCQlBQ1BJX0dQRV9ESVNBQkxFKTsKKwkJCQkJCUFDUElfR1BFX0RJU0FCTEVfU0FWRSk7CiAJCX0KIAogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTYxNiw4ICs2MTYsMTEgQEAKIHN0YXRpYyB2b2lkIEFDUElfU1lTVEVNX1hGQUNFIGFjcGlfZXZfYXN5bmNoX2VuYWJsZV9ncGUodm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8gPSBjb250ZXh0OworCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwogCisJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CiAJKHZvaWQpYWNwaV9ldl9maW5pc2hfZ3BlKGdwZV9ldmVudF9pbmZvKTsKKwlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9ncGVfbG9jaywgZmxhZ3MpOwogCiAJQUNQSV9GUkVFKGdwZV9ldmVudF9pbmZvKTsKIAlyZXR1cm47CkBAIC02NTUsNyArNjU4LDcgQEAKIAogCS8qCiAJICogRW5hYmxlIHRoaXMgR1BFLCBjb25kaXRpb25hbGx5LiBUaGlzIG1lYW5zIHRoYXQgdGhlIEdQRSB3aWxsCi0JICogb25seSBiZSBwaHlzaWNhbGx5IGVuYWJsZWQgaWYgdGhlIGVuYWJsZV9mb3JfcnVuIGJpdCBpcyBzZXQKKwkgKiBvbmx5IGJlIHBoeXNpY2FsbHkgZW5hYmxlZCBpZiB0aGUgZW5hYmxlX21hc2sgYml0IGlzIHNldAogCSAqIGluIHRoZSBldmVudF9pbmZvLgogCSAqLwogCSh2b2lkKWFjcGlfaHdfbG93X3NldF9ncGUoZ3BlX2V2ZW50X2luZm8sIEFDUElfR1BFX0NPTkRJVElPTkFMX0VOQUJMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKaW5kZXggNDhhYzdiNy4uNDk0MDI3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKQEAgLTExNSwxMiArMTE1LDEyIEBACiAJLyogU2V0IG9yIGNsZWFyIGp1c3QgdGhlIGJpdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgR1BFICovCiAKIAlyZWdpc3Rlcl9iaXQgPSBhY3BpX2h3X2dldF9ncGVfcmVnaXN0ZXJfYml0KGdwZV9ldmVudF9pbmZvKTsKLQlzd2l0Y2ggKGFjdGlvbikgeworCXN3aXRjaCAoYWN0aW9uICYgfkFDUElfR1BFX1NBVkVfTUFTSykgewogCWNhc2UgQUNQSV9HUEVfQ09ORElUSU9OQUxfRU5BQkxFOgogCi0JCS8qIE9ubHkgZW5hYmxlIGlmIHRoZSBlbmFibGVfZm9yX3J1biBiaXQgaXMgc2V0ICovCisJCS8qIE9ubHkgZW5hYmxlIGlmIHRoZSBjb3JyZXNwb25kaW5nIGVuYWJsZV9tYXNrIGJpdCBpcyBzZXQgKi8KIAotCQlpZiAoIShyZWdpc3Rlcl9iaXQgJiBncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4pKSB7CisJCWlmICghKHJlZ2lzdGVyX2JpdCAmIGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfbWFzaykpIHsKIAkJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJCX0KIApAQCAtMTQ1LDYgKzE0NSw5IEBACiAJLyogV3JpdGUgdGhlIHVwZGF0ZWQgZW5hYmxlIG1hc2sgKi8KIAogCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGUoZW5hYmxlX21hc2ssICZncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2FkZHJlc3MpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJiAoYWN0aW9uICYgQUNQSV9HUEVfU0FWRV9NQVNLKSkgeworCQlncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX21hc2sgPSBlbmFibGVfbWFzazsKKwl9CiAJcmV0dXJuIChzdGF0dXMpOwogfQogCkBAIC0yNjIsNiArMjY1LDMyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV9od19ncGVfZW5hYmxlX3dyaXRlCisgKgorICogUEFSQU1FVEVSUzogIGVuYWJsZV9tYXNrICAgICAgICAgLSBCaXQgbWFzayB0byB3cml0ZSB0byB0aGUgR1BFIHJlZ2lzdGVyCisgKiAgICAgICAgICAgICAgZ3BlX3JlZ2lzdGVyX2luZm8gICAtIEdwZSBSZWdpc3RlciBpbmZvCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBXcml0ZSB0aGUgZW5hYmxlIG1hc2sgYnl0ZSB0byB0aGUgZ2l2ZW4gR1BFIHJlZ2lzdGVyLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9od19ncGVfZW5hYmxlX3dyaXRlKHU4IGVuYWJsZV9tYXNrLAorCQkJIHN0cnVjdCBhY3BpX2dwZV9yZWdpc3Rlcl9pbmZvICpncGVfcmVnaXN0ZXJfaW5mbykKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlKGVuYWJsZV9tYXNrLCAmZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9hZGRyZXNzKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9tYXNrID0gZW5hYmxlX21hc2s7CisJfQorCXJldHVybiAoc3RhdHVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2h3X2Rpc2FibGVfZ3BlX2Jsb2NrCiAgKgogICogUEFSQU1FVEVSUzogIGdwZV94cnVwdF9pbmZvICAgICAgLSBHUEUgSW50ZXJydXB0IGluZm8KQEAgLTI4Nyw4ICszMTYsOCBAQAogCQkvKiBEaXNhYmxlIGFsbCBHUEVzIGluIHRoaXMgcmVnaXN0ZXIgKi8KIAogCQlzdGF0dXMgPQotCQkgICAgYWNwaV9od193cml0ZSgweDAwLAotCQkJCSAgJmdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXS5lbmFibGVfYWRkcmVzcyk7CisJCSAgICBhY3BpX2h3X2dwZV9lbmFibGVfd3JpdGUoMHgwMCwKKwkJCQkJICAgICAmZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCX0KQEAgLTM1NSwyMSArMzg0LDIzIEBACiB7CiAJdTMyIGk7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX2dwZV9yZWdpc3Rlcl9pbmZvICpncGVfcmVnaXN0ZXJfaW5mbzsKIAogCS8qIE5PVEU6IGFzc3VtZXMgdGhhdCBhbGwgR1BFcyBhcmUgY3VycmVudGx5IGRpc2FibGVkICovCiAKIAkvKiBFeGFtaW5lIGVhY2ggR1BFIFJlZ2lzdGVyIHdpdGhpbiB0aGUgYmxvY2sgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBncGVfYmxvY2stPnJlZ2lzdGVyX2NvdW50OyBpKyspIHsKLQkJaWYgKCFncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV0uZW5hYmxlX2Zvcl9ydW4pIHsKKwkJZ3BlX3JlZ2lzdGVyX2luZm8gPSAmZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldOworCQlpZiAoIWdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1bikgewogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBFbmFibGUgYWxsICJydW50aW1lIiBHUEVzIGluIHRoaXMgcmVnaXN0ZXIgKi8KIAogCQlzdGF0dXMgPQotCQkgICAgYWNwaV9od193cml0ZShncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV0uZW5hYmxlX2Zvcl9ydW4sCi0JCQkJICAmZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldLmVuYWJsZV9hZGRyZXNzKTsKKwkJICAgIGFjcGlfaHdfZ3BlX2VuYWJsZV93cml0ZShncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sCisJCQkJCSAgICAgZ3BlX3JlZ2lzdGVyX2luZm8pOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybiAoc3RhdHVzKTsKIAkJfQpAQCAtMzk5LDEwICs0MzAsMTIgQEAKIHsKIAl1MzIgaTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfZ3BlX3JlZ2lzdGVyX2luZm8gKmdwZV9yZWdpc3Rlcl9pbmZvOwogCiAJLyogRXhhbWluZSBlYWNoIEdQRSBSZWdpc3RlciB3aXRoaW4gdGhlIGJsb2NrICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudDsgaSsrKSB7CisJCWdwZV9yZWdpc3Rlcl9pbmZvID0gJmdwZV9ibG9jay0+cmVnaXN0ZXJfaW5mb1tpXTsKIAogCQkvKgogCQkgKiBFbmFibGUgYWxsICJ3YWtlIiBHUEVzIGluIHRoaXMgcmVnaXN0ZXIgYW5kIGRpc2FibGUgdGhlCkBAIC00MTAsOCArNDQzLDggQEAKIAkJICovCiAKIAkJc3RhdHVzID0KLQkJICAgIGFjcGlfaHdfd3JpdGUoZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9pbmZvW2ldLmVuYWJsZV9mb3Jfd2FrZSwKLQkJCQkgICZncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV0uZW5hYmxlX2FkZHJlc3MpOworCQkgICAgYWNwaV9od19ncGVfZW5hYmxlX3dyaXRlKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3dha2UsCisJCQkJCSAgICAgZ3BlX3JlZ2lzdGVyX2luZm8pOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybiAoc3RhdHVzKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHJlc3JjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cmVzcmMuYwppbmRleCA1Y2QwMTdjLi5iYzFmZjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cmVzcmMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cmVzcmMuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAvKiBVQVJUIHNlcmlhbCBidXMgc3RvcCBiaXRzICovCiAKIGNvbnN0IGNoYXIgKmFjcGlfZ2JsX3NiX2RlY29kZVtdID0gewotCSJTdG9wQml0c05vbmUiLAorCSJTdG9wQml0c1plcm8iLAogCSJTdG9wQml0c09uZSIsCiAJIlN0b3BCaXRzT25lUGx1c0hhbGYiLAogCSJTdG9wQml0c1R3byIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmYWNlLmMKaW5kZXggNTAyYTg0OS4uNDljODczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmYWNlLmMKQEAgLTUzMSw3ICs1MzEsOSBAQAogCUFDUElfTU9WRV8zMl9UT18zMigmZHdvcmQsICZidWZmZXJbMF0pOwogCXBsZF9pbmZvLT5yZXZpc2lvbiA9IEFDUElfUExEX0dFVF9SRVZJU0lPTigmZHdvcmQpOwogCXBsZF9pbmZvLT5pZ25vcmVfY29sb3IgPSBBQ1BJX1BMRF9HRVRfSUdOT1JFX0NPTE9SKCZkd29yZCk7Ci0JcGxkX2luZm8tPmNvbG9yID0gQUNQSV9QTERfR0VUX0NPTE9SKCZkd29yZCk7CisJcGxkX2luZm8tPnJlZCA9IEFDUElfUExEX0dFVF9SRUQoJmR3b3JkKTsKKwlwbGRfaW5mby0+Z3JlZW4gPSBBQ1BJX1BMRF9HRVRfR1JFRU4oJmR3b3JkKTsKKwlwbGRfaW5mby0+Ymx1ZSA9IEFDUElfUExEX0dFVF9CTFVFKCZkd29yZCk7CiAKIAkvKiBTZWNvbmQgMzItYml0IERXb3JkICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmluaXQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmluaXQuYwppbmRleCAxMzM4MGQ4Li5iMWZkNjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmaW5pdC5jCkBAIC01Myw2ICs1Myw5IEBACiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9VVElMSVRJRVMKIEFDUElfTU9EVUxFX05BTUUoInV0eGZpbml0IikKIAorLyogRm9yIGFjcGlfZXhlYyBvbmx5ICovCit2b2lkIGFlX2RvX29iamVjdF9vdmVycmlkZXModm9pZCk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaW5pdGlhbGl6ZV9zdWJzeXN0ZW0KQEAgLTY1LDYgKzY4LDcgQEAKICAqICAgICAgICAgICAgICBjYWxsZWQsIHNvIGFueSBlYXJseSBpbml0aWFsaXphdGlvbiBiZWxvbmdzIGhlcmUuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogYWNwaV9zdGF0dXMgX19pbml0IGFjcGlfaW5pdGlhbGl6ZV9zdWJzeXN0ZW0odm9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CkBAIC0yNzUsNiArMjc5LDEzIEBACiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQogCX0KKyNpZmRlZiBBQ1BJX0VYRUNfQVBQCisJLyoKKwkgKiBUaGlzIGNhbGwgaW1wbGVtZW50cyB0aGUgImluaXRpYWxpemF0aW9uIGZpbGUiIG9wdGlvbiBmb3IgYWNwaV9leGVjLgorCSAqIFRoaXMgaXMgdGhlIHByZWNpc2UgcG9pbnQgdGhhdCB3ZSB3YW50IHRvIHBlcmZvcm0gdGhlIG92ZXJyaWRlcy4KKwkgKi8KKwlhZV9kb19vYmplY3Rfb3ZlcnJpZGVzKCk7CisjZW5kaWYKIAogCS8qCiAJICogRXhlY3V0ZSBhbnkgbW9kdWxlLWxldmVsIGNvZGUgdGhhdCB3YXMgZGV0ZWN0ZWQgZHVyaW5nIHRoZSB0YWJsZSBsb2FkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXBlaS9naGVzLmMgYi9kcml2ZXJzL2FjcGkvYXBlaS9naGVzLmMKaW5kZXggZmM1Zjc4MC4uMWI2YWE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FwZWkvZ2hlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hcGVpL2doZXMuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiBzdGF0aWMgc3RydWN0IGdlbl9wb29sICpnaGVzX2VzdGF0dXNfcG9vbDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdoZXNfZXN0YXR1c19wb29sX3NpemVfcmVxdWVzdDsKIAotc3RydWN0IGdoZXNfZXN0YXR1c19jYWNoZSAqZ2hlc19lc3RhdHVzX2NhY2hlc1tHSEVTX0VTVEFUVVNfQ0FDSEVTX1NJWkVdOworc3RhdGljIHN0cnVjdCBnaGVzX2VzdGF0dXNfY2FjaGUgKmdoZXNfZXN0YXR1c19jYWNoZXNbR0hFU19FU1RBVFVTX0NBQ0hFU19TSVpFXTsKIHN0YXRpYyBhdG9taWNfdCBnaGVzX2VzdGF0dXNfY2FjaGVfYWxsb2NlZDsKIAogc3RhdGljIGludCBnaGVzX2lvcmVtYXBfaW5pdCh2b2lkKQpAQCAtNzM4LDIwICs3MzgsNiBAQAogCiBzdGF0aWMgaW50IGdoZXNfcGFuaWNfdGltZW91dAlfX3JlYWRfbW9zdGx5ID0gMzA7CiAKLXN0YXRpYyBzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxpc3Rfbm9kZXNfcmV2ZXJzZShzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlKQotewotCXN0cnVjdCBsbGlzdF9ub2RlICpuZXh0LCAqdGFpbCA9IE5VTEw7Ci0KLQl3aGlsZSAobGxub2RlKSB7Ci0JCW5leHQgPSBsbG5vZGUtPm5leHQ7Ci0JCWxsbm9kZS0+bmV4dCA9IHRhaWw7Ci0JCXRhaWwgPSBsbG5vZGU7Ci0JCWxsbm9kZSA9IG5leHQ7Ci0JfQotCi0JcmV0dXJuIHRhaWw7Ci19Ci0KIHN0YXRpYyB2b2lkIGdoZXNfcHJvY19pbl9pcnEoc3RydWN0IGlycV93b3JrICppcnFfd29yaykKIHsKIAlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCAqbmV4dDsKQEAgLTc2NSw3ICs3NTEsNyBAQAogCSAqIEJlY2F1c2UgdGhlIHRpbWUgb3JkZXIgb2YgZXN0YXR1cyBpbiBsaXN0IGlzIHJldmVyc2VkLAogCSAqIHJldmVydCBpdCBiYWNrIHRvIHByb3BlciBvcmRlci4KIAkgKi8KLQlsbG5vZGUgPSBsbGlzdF9ub2Rlc19yZXZlcnNlKGxsbm9kZSk7CisJbGxub2RlID0gbGxpc3RfcmV2ZXJzZV9vcmRlcihsbG5vZGUpOwogCXdoaWxlIChsbG5vZGUpIHsKIAkJbmV4dCA9IGxsbm9kZS0+bmV4dDsKIAkJZXN0YXR1c19ub2RlID0gbGxpc3RfZW50cnkobGxub2RlLCBzdHJ1Y3QgZ2hlc19lc3RhdHVzX25vZGUsCkBAIC03OTgsNyArNzg0LDcgQEAKIAkgKiBCZWNhdXNlIHRoZSB0aW1lIG9yZGVyIG9mIGVzdGF0dXMgaW4gbGlzdCBpcyByZXZlcnNlZCwKIAkgKiByZXZlcnQgaXQgYmFjayB0byBwcm9wZXIgb3JkZXIuCiAJICovCi0JbGxub2RlID0gbGxpc3Rfbm9kZXNfcmV2ZXJzZShsbG5vZGUpOworCWxsbm9kZSA9IGxsaXN0X3JldmVyc2Vfb3JkZXIobGxub2RlKTsKIAl3aGlsZSAobGxub2RlKSB7CiAJCWVzdGF0dXNfbm9kZSA9IGxsaXN0X2VudHJ5KGxsbm9kZSwgc3RydWN0IGdoZXNfZXN0YXR1c19ub2RlLAogCQkJCQkgICBsbG5vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggOGVjOGE4OS4uZDk4YmE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC0xMTgwLDYgKzExODAsMTAgQEAKIAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkZXZpY2UtPmRlcF91bm1ldCkKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKIAliYXR0ZXJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfYmF0dGVyeSksIEdGUF9LRVJORUwpOwogCWlmICghYmF0dGVyeSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMgYi9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMKaW5kZXggN2RiMTkzMS4uYzJkYWE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RldmljZV9wbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9kZXZpY2VfcG0uYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJICogVHJhbnNpdGlvbiBQb3dlcgogCSAqIC0tLS0tLS0tLS0tLS0tLS0KIAkgKiBJbiBhY2NvcmRhbmNlIHdpdGggdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiBmaXJzdCBhcHBseSBwb3dlciAodmlhCi0JICogcG93ZXIgcmVzb3VyY2VzKSBhbmQgdGhlbiBldmFsdXRlIF9QU3guCisJICogcG93ZXIgcmVzb3VyY2VzKSBhbmQgdGhlbiBldmFsdWF0ZSBfUFN4LgogCSAqLwogCWlmIChkZXZpY2UtPnBvd2VyLmZsYWdzLnBvd2VyX3Jlc291cmNlcykgewogCQlyZXN1bHQgPSBhY3BpX3Bvd2VyX3RyYW5zaXRpb24oZGV2aWNlLCBzdGF0ZSk7CkBAIC02ODAsMTkgKzY4MCwyNiBAQAogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAKKwkJaWYgKGFkZXYtPndha2V1cC5mbGFncy5lbmFibGVkKQorCQkJcmV0dXJuIDA7CisKIAkJcmVzID0gYWNwaV9lbmFibGVfZ3BlKHdha2V1cC0+Z3BlX2RldmljZSwgd2FrZXVwLT5ncGVfbnVtYmVyKTsKLQkJaWYgKEFDUElfRkFJTFVSRShyZXMpKSB7CisJCWlmIChBQ1BJX1NVQ0NFU1MocmVzKSkgeworCQkJYWRldi0+d2FrZXVwLmZsYWdzLmVuYWJsZWQgPSAxOworCQl9IGVsc2UgewogCQkJYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoYWRldik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0gZWxzZSB7Ci0JCWFjcGlfZGlzYWJsZV9ncGUod2FrZXVwLT5ncGVfZGV2aWNlLCB3YWtldXAtPmdwZV9udW1iZXIpOworCQlpZiAoYWRldi0+d2FrZXVwLmZsYWdzLmVuYWJsZWQpIHsKKwkJCWFjcGlfZGlzYWJsZV9ncGUod2FrZXVwLT5ncGVfZGV2aWNlLCB3YWtldXAtPmdwZV9udW1iZXIpOworCQkJYWRldi0+d2FrZXVwLmZsYWdzLmVuYWJsZWQgPSAwOworCQl9CiAJCWFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGFkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiAvKioKICAqIGFjcGlfcG1fZGV2aWNlX3J1bl93YWtlIC0gRW5hYmxlL2Rpc2FibGUgcmVtb3RlIHdha2V1cCBmb3IgZ2l2ZW4gZGV2aWNlLgogICogQGRldjogRGV2aWNlIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBwbGF0Zm9ybSB0byB3YWtlIHVwLgpAQCAtNzE0LDcgKzcyMSw2IEBACiAJcmV0dXJuIGFjcGlfZGV2aWNlX3dha2V1cChhZGV2LCBBQ1BJX1NUQVRFX1MwLCBlbmFibGUpOwogfQogRVhQT1JUX1NZTUJPTChhY3BpX3BtX2RldmljZV9ydW5fd2FrZSk7Ci0jZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogLyoqCkBAIC03NzMsNyArNzc5LDYgQEAKIAkJYWNwaV9kZXZpY2Vfc2V0X3Bvd2VyKGFkZXYsIEFDUElfU1RBVEVfRDApIDogMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiAvKioKICAqIGFjcGlfZGV2X3J1bnRpbWVfc3VzcGVuZCAtIFB1dCBkZXZpY2UgaW50byBhIGxvdy1wb3dlciBzdGF0ZSB1c2luZyBBQ1BJLgogICogQGRldjogRGV2aWNlIHRvIHB1dCBpbnRvIGEgbG93LXBvd2VyIHN0YXRlLgpAQCAtODU1LDcgKzg2MCw2IEBACiAJcmV0dXJuIHJldCA/IHJldCA6IHBtX2dlbmVyaWNfcnVudGltZV9yZXN1bWUoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjcGlfc3Vic3lzX3J1bnRpbWVfcmVzdW1lKTsKLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAvKioKQEAgLTEwMjMsMTAgKzEwMjcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGRldl9wbV9kb21haW4gYWNwaV9nZW5lcmFsX3BtX2RvbWFpbiA9IHsKIAkub3BzID0gewotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAJCS5ydW50aW1lX3N1c3BlbmQgPSBhY3BpX3N1YnN5c19ydW50aW1lX3N1c3BlbmQsCiAJCS5ydW50aW1lX3Jlc3VtZSA9IGFjcGlfc3Vic3lzX3J1bnRpbWVfcmVzdW1lLAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAJCS5wcmVwYXJlID0gYWNwaV9zdWJzeXNfcHJlcGFyZSwKIAkJLmNvbXBsZXRlID0gYWNwaV9zdWJzeXNfY29tcGxldGUsCkBAIC0xMDM4LDYgKzEwNDEsNyBAQAogCQkucG93ZXJvZmZfbGF0ZSA9IGFjcGlfc3Vic3lzX3N1c3BlbmRfbGF0ZSwKIAkJLnJlc3RvcmVfZWFybHkgPSBhY3BpX3N1YnN5c19yZXN1bWVfZWFybHksCiAjZW5kaWYKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWMuYyBiL2RyaXZlcnMvYWNwaS9lYy5jCmluZGV4IDVmOWI3NGIuLjFiNTg1M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lYy5jCkBAIC04NDQsNiArODQ0LDggQEAKIAogc3RhdGljIHZvaWQgZWNfcmVtb3ZlX2hhbmRsZXJzKHN0cnVjdCBhY3BpX2VjICplYykKIHsKKwlpZiAoIXRlc3RfYml0KEVDX0ZMQUdTX0hBTkRMRVJTX0lOU1RBTExFRCwgJmVjLT5mbGFncykpCisJCXJldHVybjsKIAlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKGVjLT5oYW5kbGUsCiAJCQkJQUNQSV9BRFJfU1BBQ0VfRUMsICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9mYW4uYyBiL2RyaXZlcnMvYWNwaS9mYW4uYwppbmRleCBjYWY5Yjc2Li43YTM2ZjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZmFuLmMKKysrIGIvZHJpdmVycy9hY3BpL2Zhbi5jCkBAIC0zMjUsNiArMzI1LDcgQEAKIAlzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldjsKIAlzdHJ1Y3QgYWNwaV9mYW4gKmZhbjsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IEFDUElfQ09NUEFOSU9OKCZwZGV2LT5kZXYpOworCWNoYXIgKm5hbWU7CiAKIAlmYW4gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpmYW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZhbikgewpAQCAtMzQ2LDcgKzM0NywxMiBAQAogCQl9CiAJfQogCi0JY2RldiA9IHRoZXJtYWxfY29vbGluZ19kZXZpY2VfcmVnaXN0ZXIoIkZhbiIsIGRldmljZSwKKwlpZiAoIXN0cm5jbXAocGRldi0+bmFtZSwgIlBOUDBDMEIiLCBzdHJsZW4oIlBOUDBDMEIiKSkpCisJCW5hbWUgPSAiRmFuIjsKKwllbHNlCisJCW5hbWUgPSBhY3BpX2RldmljZV9iaWQoZGV2aWNlKTsKKworCWNkZXYgPSB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsIGRldmljZSwKIAkJCQkJCSZmYW5fY29vbGluZ19vcHMpOwogCWlmIChJU19FUlIoY2RldikpIHsKIAkJcmVzdWx0ID0gUFRSX0VSUihjZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oIGIvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKaW5kZXggNDQ3ZjZkNi4uMTYzZTgyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKQEAgLTE3Myw0ICsxNzMsMTAgQEAKIGJvb2wgYWNwaV9vc2lfaXNfd2luOCh2b2lkKTsKICNlbmRpZgogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJRGV2aWNlIHByb3BlcnRpZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3ZvaWQgYWNwaV9pbml0X3Byb3BlcnRpZXMoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2KTsKK3ZvaWQgYWNwaV9mcmVlX3Byb3BlcnRpZXMoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2KTsKKwogI2VuZGlmIC8qIF9BQ1BJX0lOVEVSTkFMX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggOTk2NGY3MC4uZjllZWFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtNDM2LDcgKzQzNiw3IEBACiBzdGF0aWMgdm9pZCBhY3BpX29zX21hcF9jbGVhbnVwKHN0cnVjdCBhY3BpX2lvcmVtYXAgKm1hcCkKIHsKIAlpZiAoIW1hcC0+cmVmY291bnQpIHsKLQkJc3luY2hyb25pemVfcmN1KCk7CisJCXN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQoKTsKIAkJYWNwaV91bm1hcChtYXAtPnBoeXMsIG1hcC0+dmlydCk7CiAJCWtmcmVlKG1hcCk7CiAJfQpAQCAtMTE4OCw2ICsxMTg4LDEyIEBACiAKIHZvaWQgYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZSh2b2lkKQogeworCS8qCisJICogTWFrZSBzdXJlIHRoZSBHUEUgaGFuZGxlciBvciB0aGUgZml4ZWQgZXZlbnQgaGFuZGxlciBpcyBub3QgdXNlZAorCSAqIG9uIGFub3RoZXIgQ1BVIGFmdGVyIHJlbW92YWwuCisJICovCisJaWYgKGFjcGlfaXJxX2hhbmRsZXIpCisJCXN5bmNocm9uaXplX2hhcmRpcnEoYWNwaV9nYmxfRkFEVC5zY2lfaW50ZXJydXB0KTsKIAlmbHVzaF93b3JrcXVldWUoa2FjcGlkX3dxKTsKIAlmbHVzaF93b3JrcXVldWUoa2FjcGlfbm90aWZ5X3dxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMgYi9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCmluZGV4IDZlNmI4MGUuLjdjYzRlMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9pcnEuYwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAJLyogS2VlcCBJT0FQSUMgcGluIGNvbmZpZ3VyYXRpb24gd2hlbiBzdXNwZW5kaW5nICovCiAJaWYgKGRldi0+ZGV2LnBvd2VyLmlzX3ByZXBhcmVkKQogCQlyZXR1cm47Ci0jaWZkZWYJQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZglDT05GSUdfUE0KIAlpZiAoZGV2LT5kZXYucG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRJTkcpCiAJCXJldHVybjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BtaWMvaW50ZWxfcG1pYy5jIGIvZHJpdmVycy9hY3BpL3BtaWMvaW50ZWxfcG1pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzJlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvcG1pYy9pbnRlbF9wbWljLmMKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiBpbnRlbF9wbWljLmMgLSBJbnRlbCBQTUlDIG9wZXJhdGlvbiByZWdpb24gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgImludGVsX3BtaWMuaCIKKworI2RlZmluZSBQTUlDX1BPV0VSX09QUkVHSU9OX0lECQkweDhkCisjZGVmaW5lIFBNSUNfVEhFUk1BTF9PUFJFR0lPTl9JRAkweDhjCisKK3N0cnVjdCBhY3BpX2xwYXQgeworCWludCB0ZW1wOworCWludCByYXc7Cit9OworCitzdHJ1Y3QgaW50ZWxfcG1pY19vcHJlZ2lvbiB7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IGFjcGlfbHBhdCAqbHBhdDsKKwlpbnQgbHBhdF9jb3VudDsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IGludGVsX3BtaWNfb3ByZWdpb25fZGF0YSAqZGF0YTsKK307CisKK3N0YXRpYyBpbnQgcG1pY19nZXRfcmVnX2JpdChpbnQgYWRkcmVzcywgc3RydWN0IHBtaWNfdGFibGUgKnRhYmxlLAorCQkJICAgIGludCBjb3VudCwgaW50ICpyZWcsIGludCAqYml0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKHRhYmxlW2ldLmFkZHJlc3MgPT0gYWRkcmVzcykgeworCQkJKnJlZyA9IHRhYmxlW2ldLnJlZzsKKwkJCWlmIChiaXQpCisJCQkJKmJpdCA9IHRhYmxlW2ldLmJpdDsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRU5PRU5UOworfQorCisvKioKKyAqIHJhd190b190ZW1wKCk6IFJldHVybiB0ZW1wZXJhdHVyZSBmcm9tIHJhdyB2YWx1ZSB0aHJvdWdoIExQQVQgdGFibGUKKyAqCisgKiBAbHBhdDogdGhlIHRlbXBlcmF0dXJlX3JhdyBtYXBwaW5nIHRhYmxlCisgKiBAY291bnQ6IHRoZSBjb3VudCBvZiB0aGUgYWJvdmUgbWFwcGluZyB0YWJsZQorICogQHJhdzogdGhlIHJhdyB2YWx1ZSwgdXNlZCBhcyBhIGtleSB0byBnZXQgdGhlIHRlbWVyYXR1cmUgZnJvbSB0aGUKKyAqICAgICAgIGFib3ZlIG1hcHBpbmcgdGFibGUKKyAqCisgKiBBIHBvc2l0aXZlIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB3aWxsCisgKiBiZSByZXR1cm5lZCBpbiBlcnJvciBjYXNlcy4KKyAqLworc3RhdGljIGludCByYXdfdG9fdGVtcChzdHJ1Y3QgYWNwaV9scGF0ICpscGF0LCBpbnQgY291bnQsIGludCByYXcpCit7CisJaW50IGksIGRlbHRhX3RlbXAsIGRlbHRhX3JhdywgdGVtcDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudCAtIDE7IGkrKykgeworCQlpZiAoKHJhdyA+PSBscGF0W2ldLnJhdyAmJiByYXcgPD0gbHBhdFtpKzFdLnJhdykgfHwKKwkJICAgIChyYXcgPD0gbHBhdFtpXS5yYXcgJiYgcmF3ID49IGxwYXRbaSsxXS5yYXcpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gY291bnQgLSAxKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWRlbHRhX3RlbXAgPSBscGF0W2krMV0udGVtcCAtIGxwYXRbaV0udGVtcDsKKwlkZWx0YV9yYXcgPSBscGF0W2krMV0ucmF3IC0gbHBhdFtpXS5yYXc7CisJdGVtcCA9IGxwYXRbaV0udGVtcCArIChyYXcgLSBscGF0W2ldLnJhdykgKiBkZWx0YV90ZW1wIC8gZGVsdGFfcmF3OworCisJcmV0dXJuIHRlbXA7Cit9CisKKy8qKgorICogdGVtcF90b19yYXcoKTogUmV0dXJuIHJhdyB2YWx1ZSBmcm9tIHRlbXBlcmF0dXJlIHRocm91Z2ggTFBBVCB0YWJsZQorICoKKyAqIEBscGF0OiB0aGUgdGVtcGVyYXR1cmVfcmF3IG1hcHBpbmcgdGFibGUKKyAqIEBjb3VudDogdGhlIGNvdW50IG9mIHRoZSBhYm92ZSBtYXBwaW5nIHRhYmxlCisgKiBAdGVtcDogdGhlIHRlbXBlcmF0dXJlLCB1c2VkIGFzIGEga2V5IHRvIGdldCB0aGUgcmF3IHZhbHVlIGZyb20gdGhlCisgKiAgICAgICAgYWJvdmUgbWFwcGluZyB0YWJsZQorICoKKyAqIEEgcG9zaXRpdmUgdmFsdWUgd2lsbCBiZSByZXR1cm5lZCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHdpbGwKKyAqIGJlIHJldHVybmVkIGluIGVycm9yIGNhc2VzLgorICovCitzdGF0aWMgaW50IHRlbXBfdG9fcmF3KHN0cnVjdCBhY3BpX2xwYXQgKmxwYXQsIGludCBjb3VudCwgaW50IHRlbXApCit7CisJaW50IGksIGRlbHRhX3RlbXAsIGRlbHRhX3JhdywgcmF3OworCisJZm9yIChpID0gMDsgaSA8IGNvdW50IC0gMTsgaSsrKSB7CisJCWlmICh0ZW1wID49IGxwYXRbaV0udGVtcCAmJiB0ZW1wIDw9IGxwYXRbaSsxXS50ZW1wKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gY291bnQgLSAxKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWRlbHRhX3RlbXAgPSBscGF0W2krMV0udGVtcCAtIGxwYXRbaV0udGVtcDsKKwlkZWx0YV9yYXcgPSBscGF0W2krMV0ucmF3IC0gbHBhdFtpXS5yYXc7CisJcmF3ID0gbHBhdFtpXS5yYXcgKyAodGVtcCAtIGxwYXRbaV0udGVtcCkgKiBkZWx0YV9yYXcgLyBkZWx0YV90ZW1wOworCisJcmV0dXJuIHJhdzsKK30KKworc3RhdGljIHZvaWQgcG1pY190aGVybWFsX2xwYXQoc3RydWN0IGludGVsX3BtaWNfb3ByZWdpb24gKm9wcmVnaW9uLAorCQkJICAgICAgYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqX3AsICpvYmpfZTsKKwlpbnQgKmxwYXQsIGk7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiTFBBVCIsIE5VTEwsICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuOworCisJb2JqX3AgPSAodW5pb24gYWNwaV9vYmplY3QgKilidWZmZXIucG9pbnRlcjsKKwlpZiAoIW9ial9wIHx8IChvYmpfcC0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgfHwKKwkgICAgKG9ial9wLT5wYWNrYWdlLmNvdW50ICUgMikgfHwgKG9ial9wLT5wYWNrYWdlLmNvdW50IDwgNCkpCisJCWdvdG8gb3V0OworCisJbHBhdCA9IGRldm1fa21hbGxvYyhkZXYsIHNpemVvZihpbnQpICogb2JqX3AtPnBhY2thZ2UuY291bnQsCisJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFscGF0KQorCQlnb3RvIG91dDsKKworCWZvciAoaSA9IDA7IGkgPCBvYmpfcC0+cGFja2FnZS5jb3VudDsgaSsrKSB7CisJCW9ial9lID0gJm9ial9wLT5wYWNrYWdlLmVsZW1lbnRzW2ldOworCQlpZiAob2JqX2UtPnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJCWRldm1fa2ZyZWUoZGV2LCBscGF0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWxwYXRbaV0gPSAoczY0KW9ial9lLT5pbnRlZ2VyLnZhbHVlOworCX0KKworCW9wcmVnaW9uLT5scGF0ID0gKHN0cnVjdCBhY3BpX2xwYXQgKilscGF0OworCW9wcmVnaW9uLT5scGF0X2NvdW50ID0gb2JqX3AtPnBhY2thZ2UuY291bnQgLyAyOworCitvdXQ6CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgaW50ZWxfcG1pY19wb3dlcl9oYW5kbGVyKHUzMiBmdW5jdGlvbiwKKwkJYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsIHUzMiBiaXRzLCB1NjQgKnZhbHVlNjQsCisJCXZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpCit7CisJc3RydWN0IGludGVsX3BtaWNfb3ByZWdpb24gKm9wcmVnaW9uID0gcmVnaW9uX2NvbnRleHQ7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gb3ByZWdpb24tPnJlZ21hcDsKKwlzdHJ1Y3QgaW50ZWxfcG1pY19vcHJlZ2lvbl9kYXRhICpkID0gb3ByZWdpb24tPmRhdGE7CisJaW50IHJlZywgYml0LCByZXN1bHQ7CisKKwlpZiAoYml0cyAhPSAzMiB8fCAhdmFsdWU2NCkKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CisKKwlpZiAoZnVuY3Rpb24gPT0gQUNQSV9XUklURSAmJiAhKCp2YWx1ZTY0ID09IDAgfHwgKnZhbHVlNjQgPT0gMSkpCisJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOworCisJcmVzdWx0ID0gcG1pY19nZXRfcmVnX2JpdChhZGRyZXNzLCBkLT5wb3dlcl90YWJsZSwKKwkJCQkgIGQtPnBvd2VyX3RhYmxlX2NvdW50LCAmcmVnLCAmYml0KTsKKwlpZiAocmVzdWx0ID09IC1FTk9FTlQpCisJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOworCisJbXV0ZXhfbG9jaygmb3ByZWdpb24tPmxvY2spOworCisJcmVzdWx0ID0gZnVuY3Rpb24gPT0gQUNQSV9SRUFEID8KKwkJZC0+Z2V0X3Bvd2VyKHJlZ21hcCwgcmVnLCBiaXQsIHZhbHVlNjQpIDoKKwkJZC0+dXBkYXRlX3Bvd2VyKHJlZ21hcCwgcmVnLCBiaXQsICp2YWx1ZTY0ID09IDEpOworCisJbXV0ZXhfdW5sb2NrKCZvcHJlZ2lvbi0+bG9jayk7CisKKwlyZXR1cm4gcmVzdWx0ID8gQUVfRVJST1IgOiBBRV9PSzsKK30KKworc3RhdGljIGludCBwbWljX3JlYWRfdGVtcChzdHJ1Y3QgaW50ZWxfcG1pY19vcHJlZ2lvbiAqb3ByZWdpb24sCisJCQkgIGludCByZWcsIHU2NCAqdmFsdWUpCit7CisJaW50IHJhd190ZW1wLCB0ZW1wOworCisJaWYgKCFvcHJlZ2lvbi0+ZGF0YS0+Z2V0X3Jhd190ZW1wKQorCQlyZXR1cm4gLUVOWElPOworCisJcmF3X3RlbXAgPSBvcHJlZ2lvbi0+ZGF0YS0+Z2V0X3Jhd190ZW1wKG9wcmVnaW9uLT5yZWdtYXAsIHJlZyk7CisJaWYgKHJhd190ZW1wIDwgMCkKKwkJcmV0dXJuIHJhd190ZW1wOworCisJaWYgKCFvcHJlZ2lvbi0+bHBhdCkgeworCQkqdmFsdWUgPSByYXdfdGVtcDsKKwkJcmV0dXJuIDA7CisJfQorCisJdGVtcCA9IHJhd190b190ZW1wKG9wcmVnaW9uLT5scGF0LCBvcHJlZ2lvbi0+bHBhdF9jb3VudCwgcmF3X3RlbXApOworCWlmICh0ZW1wIDwgMCkKKwkJcmV0dXJuIHRlbXA7CisKKwkqdmFsdWUgPSB0ZW1wOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtaWNfdGhlcm1hbF90ZW1wKHN0cnVjdCBpbnRlbF9wbWljX29wcmVnaW9uICpvcHJlZ2lvbiwgaW50IHJlZywKKwkJCSAgICAgdTMyIGZ1bmN0aW9uLCB1NjQgKnZhbHVlKQoreworCXJldHVybiBmdW5jdGlvbiA9PSBBQ1BJX1JFQUQgPworCQlwbWljX3JlYWRfdGVtcChvcHJlZ2lvbiwgcmVnLCB2YWx1ZSkgOiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHBtaWNfdGhlcm1hbF9hdXgoc3RydWN0IGludGVsX3BtaWNfb3ByZWdpb24gKm9wcmVnaW9uLCBpbnQgcmVnLAorCQkJICAgIHUzMiBmdW5jdGlvbiwgdTY0ICp2YWx1ZSkKK3sKKwlpbnQgcmF3X3RlbXA7CisKKwlpZiAoZnVuY3Rpb24gPT0gQUNQSV9SRUFEKQorCQlyZXR1cm4gcG1pY19yZWFkX3RlbXAob3ByZWdpb24sIHJlZywgdmFsdWUpOworCisJaWYgKCFvcHJlZ2lvbi0+ZGF0YS0+dXBkYXRlX2F1eCkKKwkJcmV0dXJuIC1FTlhJTzsKKworCWlmIChvcHJlZ2lvbi0+bHBhdCkgeworCQlyYXdfdGVtcCA9IHRlbXBfdG9fcmF3KG9wcmVnaW9uLT5scGF0LCBvcHJlZ2lvbi0+bHBhdF9jb3VudCwKKwkJCQkgICAgICAgKnZhbHVlKTsKKwkJaWYgKHJhd190ZW1wIDwgMCkKKwkJCXJldHVybiByYXdfdGVtcDsKKwl9IGVsc2UgeworCQlyYXdfdGVtcCA9ICp2YWx1ZTsKKwl9CisKKwlyZXR1cm4gb3ByZWdpb24tPmRhdGEtPnVwZGF0ZV9hdXgob3ByZWdpb24tPnJlZ21hcCwgcmVnLCByYXdfdGVtcCk7Cit9CisKK3N0YXRpYyBpbnQgcG1pY190aGVybWFsX3BlbihzdHJ1Y3QgaW50ZWxfcG1pY19vcHJlZ2lvbiAqb3ByZWdpb24sIGludCByZWcsCisJCQkgICAgdTMyIGZ1bmN0aW9uLCB1NjQgKnZhbHVlKQoreworCXN0cnVjdCBpbnRlbF9wbWljX29wcmVnaW9uX2RhdGEgKmQgPSBvcHJlZ2lvbi0+ZGF0YTsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBvcHJlZ2lvbi0+cmVnbWFwOworCisJaWYgKCFkLT5nZXRfcG9saWN5IHx8ICFkLT51cGRhdGVfcG9saWN5KQorCQlyZXR1cm4gLUVOWElPOworCisJaWYgKGZ1bmN0aW9uID09IEFDUElfUkVBRCkKKwkJcmV0dXJuIGQtPmdldF9wb2xpY3kocmVnbWFwLCByZWcsIHZhbHVlKTsKKworCWlmICgqdmFsdWUgIT0gMCAmJiAqdmFsdWUgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZC0+dXBkYXRlX3BvbGljeShyZWdtYXAsIHJlZywgKnZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG1pY190aGVybWFsX2lzX3RlbXAoaW50IGFkZHJlc3MpCit7CisJcmV0dXJuIChhZGRyZXNzIDw9IDB4M2MpICYmICEoYWRkcmVzcyAlIDEyKTsKK30KKworc3RhdGljIGJvb2wgcG1pY190aGVybWFsX2lzX2F1eChpbnQgYWRkcmVzcykKK3sKKwlyZXR1cm4gKGFkZHJlc3MgPj0gNCAmJiBhZGRyZXNzIDw9IDB4NDAgJiYgISgoYWRkcmVzcyAtIDQpICUgMTIpKSB8fAorCSAgICAgICAoYWRkcmVzcyA+PSA4ICYmIGFkZHJlc3MgPD0gMHg0NCAmJiAhKChhZGRyZXNzIC0gOCkgJSAxMikpOworfQorCitzdGF0aWMgYm9vbCBwbWljX3RoZXJtYWxfaXNfcGVuKGludCBhZGRyZXNzKQoreworCXJldHVybiBhZGRyZXNzID49IDB4NDggJiYgYWRkcmVzcyA8PSAweDVjOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgaW50ZWxfcG1pY190aGVybWFsX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAorCQlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywgdTMyIGJpdHMsIHU2NCAqdmFsdWU2NCwKKwkJdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCkKK3sKKwlzdHJ1Y3QgaW50ZWxfcG1pY19vcHJlZ2lvbiAqb3ByZWdpb24gPSByZWdpb25fY29udGV4dDsKKwlzdHJ1Y3QgaW50ZWxfcG1pY19vcHJlZ2lvbl9kYXRhICpkID0gb3ByZWdpb24tPmRhdGE7CisJaW50IHJlZywgcmVzdWx0OworCisJaWYgKGJpdHMgIT0gMzIgfHwgIXZhbHVlNjQpCisJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOworCisJcmVzdWx0ID0gcG1pY19nZXRfcmVnX2JpdChhZGRyZXNzLCBkLT50aGVybWFsX3RhYmxlLAorCQkJCSAgZC0+dGhlcm1hbF90YWJsZV9jb3VudCwgJnJlZywgTlVMTCk7CisJaWYgKHJlc3VsdCA9PSAtRU5PRU5UKQorCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKKworCW11dGV4X2xvY2soJm9wcmVnaW9uLT5sb2NrKTsKKworCWlmIChwbWljX3RoZXJtYWxfaXNfdGVtcChhZGRyZXNzKSkKKwkJcmVzdWx0ID0gcG1pY190aGVybWFsX3RlbXAob3ByZWdpb24sIHJlZywgZnVuY3Rpb24sIHZhbHVlNjQpOworCWVsc2UgaWYgKHBtaWNfdGhlcm1hbF9pc19hdXgoYWRkcmVzcykpCisJCXJlc3VsdCA9IHBtaWNfdGhlcm1hbF9hdXgob3ByZWdpb24sIHJlZywgZnVuY3Rpb24sIHZhbHVlNjQpOworCWVsc2UgaWYgKHBtaWNfdGhlcm1hbF9pc19wZW4oYWRkcmVzcykpCisJCXJlc3VsdCA9IHBtaWNfdGhlcm1hbF9wZW4ob3ByZWdpb24sIHJlZywgZnVuY3Rpb24sIHZhbHVlNjQpOworCWVsc2UKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKworCW11dGV4X3VubG9jaygmb3ByZWdpb24tPmxvY2spOworCisJaWYgKHJlc3VsdCA8IDApIHsKKwkJaWYgKHJlc3VsdCA9PSAtRUlOVkFMKQorCQkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CisJCWVsc2UKKwkJCXJldHVybiBBRV9FUlJPUjsKKwl9CisKKwlyZXR1cm4gQUVfT0s7Cit9CisKK2ludCBpbnRlbF9wbWljX2luc3RhbGxfb3ByZWdpb25faGFuZGxlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJCQkJc3RydWN0IHJlZ21hcCAqcmVnbWFwLAorCQkJCQlzdHJ1Y3QgaW50ZWxfcG1pY19vcHJlZ2lvbl9kYXRhICpkKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgaW50ZWxfcG1pY19vcHJlZ2lvbiAqb3ByZWdpb247CisKKwlpZiAoIWRldiB8fCAhcmVnbWFwIHx8ICFkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghaGFuZGxlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9wcmVnaW9uID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpvcHJlZ2lvbiksIEdGUF9LRVJORUwpOworCWlmICghb3ByZWdpb24pCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmb3ByZWdpb24tPmxvY2spOworCW9wcmVnaW9uLT5yZWdtYXAgPSByZWdtYXA7CisJcG1pY190aGVybWFsX2xwYXQob3ByZWdpb24sIGhhbmRsZSwgZGV2KTsKKworCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoaGFuZGxlLAorCQkJCQkJICAgIFBNSUNfUE9XRVJfT1BSRUdJT05fSUQsCisJCQkJCQkgICAgaW50ZWxfcG1pY19wb3dlcl9oYW5kbGVyLAorCQkJCQkJICAgIE5VTEwsIG9wcmVnaW9uKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOworCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihoYW5kbGUsCisJCQkJCQkgICAgUE1JQ19USEVSTUFMX09QUkVHSU9OX0lELAorCQkJCQkJICAgIGludGVsX3BtaWNfdGhlcm1hbF9oYW5kbGVyLAorCQkJCQkJICAgIE5VTEwsIG9wcmVnaW9uKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKGhhbmRsZSwgUE1JQ19QT1dFUl9PUFJFR0lPTl9JRCwKKwkJCQkJCSAgaW50ZWxfcG1pY19wb3dlcl9oYW5kbGVyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJb3ByZWdpb24tPmRhdGEgPSBkOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfcG1pY19pbnN0YWxsX29wcmVnaW9uX2hhbmRsZXIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcG1pYy9pbnRlbF9wbWljLmggYi9kcml2ZXJzL2FjcGkvcG1pYy9pbnRlbF9wbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlOTBhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9wbWljL2ludGVsX3BtaWMuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9fSU5URUxfUE1JQ19ICisjZGVmaW5lIF9fSU5URUxfUE1JQ19ICisKK3N0cnVjdCBwbWljX3RhYmxlIHsKKwlpbnQgYWRkcmVzczsJLyogb3BlcmF0aW9uIHJlZ2lvbiBhZGRyZXNzICovCisJaW50IHJlZzsJLyogY29ycmVzcG9uZGluZyB0aGVybWFsIHJlZ2lzdGVyICovCisJaW50IGJpdDsJLyogY29udHJvbCBiaXQgZm9yIHBvd2VyICovCit9OworCitzdHJ1Y3QgaW50ZWxfcG1pY19vcHJlZ2lvbl9kYXRhIHsKKwlpbnQgKCpnZXRfcG93ZXIpKHN0cnVjdCByZWdtYXAgKnIsIGludCByZWcsIGludCBiaXQsIHU2NCAqdmFsdWUpOworCWludCAoKnVwZGF0ZV9wb3dlcikoc3RydWN0IHJlZ21hcCAqciwgaW50IHJlZywgaW50IGJpdCwgYm9vbCBvbik7CisJaW50ICgqZ2V0X3Jhd190ZW1wKShzdHJ1Y3QgcmVnbWFwICpyLCBpbnQgcmVnKTsKKwlpbnQgKCp1cGRhdGVfYXV4KShzdHJ1Y3QgcmVnbWFwICpyLCBpbnQgcmVnLCBpbnQgcmF3X3RlbXApOworCWludCAoKmdldF9wb2xpY3kpKHN0cnVjdCByZWdtYXAgKnIsIGludCByZWcsIHU2NCAqdmFsdWUpOworCWludCAoKnVwZGF0ZV9wb2xpY3kpKHN0cnVjdCByZWdtYXAgKnIsIGludCByZWcsIGludCBlbmFibGUpOworCXN0cnVjdCBwbWljX3RhYmxlICpwb3dlcl90YWJsZTsKKwlpbnQgcG93ZXJfdGFibGVfY291bnQ7CisJc3RydWN0IHBtaWNfdGFibGUgKnRoZXJtYWxfdGFibGU7CisJaW50IHRoZXJtYWxfdGFibGVfY291bnQ7Cit9OworCitpbnQgaW50ZWxfcG1pY19pbnN0YWxsX29wcmVnaW9uX2hhbmRsZXIoc3RydWN0IGRldmljZSAqZGV2LCBhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCByZWdtYXAgKnJlZ21hcCwgc3RydWN0IGludGVsX3BtaWNfb3ByZWdpb25fZGF0YSAqZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BtaWMvaW50ZWxfcG1pY19jcmMuYyBiL2RyaXZlcnMvYWNwaS9wbWljL2ludGVsX3BtaWNfY3JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3ZDhmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9wbWljL2ludGVsX3BtaWNfY3JjLmMKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBpbnRlbF9wbWljX2NyYy5jIC0gSW50ZWwgQ3J5c3RhbENvdmUgUE1JQyBvcGVyYXRpb24gcmVnaW9uIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvaW50ZWxfc29jX3BtaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlICJpbnRlbF9wbWljLmgiCisKKyNkZWZpbmUgUFdSX1NPVVJDRV9TRUxFQ1QJQklUKDEpCisKKyNkZWZpbmUgUE1JQ19BMExPQ0tfUkVHCQkweGM1CisKK3N0YXRpYyBzdHJ1Y3QgcG1pY190YWJsZSBwb3dlcl90YWJsZVtdID0geworCXsKKwkJLmFkZHJlc3MgPSAweDI0LAorCQkucmVnID0gMHg2NiwKKwkJLmJpdCA9IDB4MDAsCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHg0OCwKKwkJLnJlZyA9IDB4NWQsCisJCS5iaXQgPSAweDAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBtaWNfdGFibGUgdGhlcm1hbF90YWJsZVtdID0geworCXsKKwkJLmFkZHJlc3MgPSAweDAwLAorCQkucmVnID0gMHg3NQorCX0sCisJeworCQkuYWRkcmVzcyA9IDB4MDQsCisJCS5yZWcgPSAweDk1CisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHgwOCwKKwkJLnJlZyA9IDB4OTcKKwl9LAorCXsKKwkJLmFkZHJlc3MgPSAweDBjLAorCQkucmVnID0gMHg3NworCX0sCisJeworCQkuYWRkcmVzcyA9IDB4MTAsCisJCS5yZWcgPSAweDlhCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHgxNCwKKwkJLnJlZyA9IDB4OWMKKwl9LAorCXsKKwkJLmFkZHJlc3MgPSAweDE4LAorCQkucmVnID0gMHg3OQorCX0sCisJeworCQkuYWRkcmVzcyA9IDB4MWMsCisJCS5yZWcgPSAweDlmCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHgyMCwKKwkJLnJlZyA9IDB4YTEKKwl9LAorCXsKKwkJLmFkZHJlc3MgPSAweDQ4LAorCQkucmVnID0gMHg5NAorCX0sCisJeworCQkuYWRkcmVzcyA9IDB4NGMsCisJCS5yZWcgPSAweDk5CisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHg1MCwKKwkJLnJlZyA9IDB4OWUKKwl9LAorfTsKKworc3RhdGljIGludCBpbnRlbF9jcmNfcG1pY19nZXRfcG93ZXIoc3RydWN0IHJlZ21hcCAqcmVnbWFwLCBpbnQgcmVnLAorCQkJCSAgICBpbnQgYml0LCB1NjQgKnZhbHVlKQoreworCWludCBkYXRhOworCisJaWYgKHJlZ21hcF9yZWFkKHJlZ21hcCwgcmVnLCAmZGF0YSkpCisJCXJldHVybiAtRUlPOworCisJKnZhbHVlID0gKGRhdGEgJiBQV1JfU09VUkNFX1NFTEVDVCkgJiYgKGRhdGEgJiBCSVQoYml0KSkgPyAxIDogMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnRlbF9jcmNfcG1pY191cGRhdGVfcG93ZXIoc3RydWN0IHJlZ21hcCAqcmVnbWFwLCBpbnQgcmVnLAorCQkJCSAgICAgICBpbnQgYml0LCBib29sIG9uKQoreworCWludCBkYXRhOworCisJaWYgKHJlZ21hcF9yZWFkKHJlZ21hcCwgcmVnLCAmZGF0YSkpCisJCXJldHVybiAtRUlPOworCisJaWYgKG9uKSB7CisJCWRhdGEgfD0gUFdSX1NPVVJDRV9TRUxFQ1QgfCBCSVQoYml0KTsKKwl9IGVsc2UgeworCQlkYXRhICY9IH5CSVQoYml0KTsKKwkJZGF0YSB8PSBQV1JfU09VUkNFX1NFTEVDVDsKKwl9CisKKwlpZiAocmVnbWFwX3dyaXRlKHJlZ21hcCwgcmVnLCBkYXRhKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfY3JjX3BtaWNfZ2V0X3Jhd190ZW1wKHN0cnVjdCByZWdtYXAgKnJlZ21hcCwgaW50IHJlZykKK3sKKwlpbnQgdGVtcF9sLCB0ZW1wX2g7CisKKwkvKgorCSAqIFJhdyB0ZW1wZXJhdHVyZSB2YWx1ZSBpcyAxMGJpdHM6IDhiaXRzIGluIHJlZworCSAqIGFuZCAyYml0cyBpbiByZWctMTogYml0MCwxCisJICovCisJaWYgKHJlZ21hcF9yZWFkKHJlZ21hcCwgcmVnLCAmdGVtcF9sKSB8fAorCSAgICByZWdtYXBfcmVhZChyZWdtYXAsIHJlZyAtIDEsICZ0ZW1wX2gpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiB0ZW1wX2wgfCAodGVtcF9oICYgMHgzKSA8PCA4OworfQorCitzdGF0aWMgaW50IGludGVsX2NyY19wbWljX3VwZGF0ZV9hdXgoc3RydWN0IHJlZ21hcCAqcmVnbWFwLCBpbnQgcmVnLCBpbnQgcmF3KQoreworCXJldHVybiByZWdtYXBfd3JpdGUocmVnbWFwLCByZWcsIHJhdykgfHwKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgcmVnIC0gMSwgMHgzLCByYXcgPj4gOCkgPyAtRUlPIDogMDsKK30KKworc3RhdGljIGludCBpbnRlbF9jcmNfcG1pY19nZXRfcG9saWN5KHN0cnVjdCByZWdtYXAgKnJlZ21hcCwgaW50IHJlZywgdTY0ICp2YWx1ZSkKK3sKKwlpbnQgcGVuOworCisJaWYgKHJlZ21hcF9yZWFkKHJlZ21hcCwgcmVnLCAmcGVuKSkKKwkJcmV0dXJuIC1FSU87CisJKnZhbHVlID0gcGVuID4+IDc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfY3JjX3BtaWNfdXBkYXRlX3BvbGljeShzdHJ1Y3QgcmVnbWFwICpyZWdtYXAsCisJCQkJCWludCByZWcsIGludCBlbmFibGUpCit7CisJaW50IGFsZXJ0MDsKKworCS8qIFVwZGF0ZSB0byBwb2xpY3kgZW5hYmxlIGJpdCByZXF1aXJlcyB1bmxvY2tpbmcgYTBsb2NrICovCisJaWYgKHJlZ21hcF9yZWFkKHJlZ21hcCwgUE1JQ19BMExPQ0tfUkVHLCAmYWxlcnQwKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAocmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgUE1JQ19BMExPQ0tfUkVHLCAweDAxLCAwKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAocmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgcmVnLCAweDgwLCBlbmFibGUgPDwgNykpCisJCXJldHVybiAtRUlPOworCisJLyogcmVzdG9yZSBhbGVydDAgKi8KKwlpZiAocmVnbWFwX3dyaXRlKHJlZ21hcCwgUE1JQ19BMExPQ0tfUkVHLCBhbGVydDApKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGludGVsX3BtaWNfb3ByZWdpb25fZGF0YSBpbnRlbF9jcmNfcG1pY19vcHJlZ2lvbl9kYXRhID0geworCS5nZXRfcG93ZXIJPSBpbnRlbF9jcmNfcG1pY19nZXRfcG93ZXIsCisJLnVwZGF0ZV9wb3dlcgk9IGludGVsX2NyY19wbWljX3VwZGF0ZV9wb3dlciwKKwkuZ2V0X3Jhd190ZW1wCT0gaW50ZWxfY3JjX3BtaWNfZ2V0X3Jhd190ZW1wLAorCS51cGRhdGVfYXV4CT0gaW50ZWxfY3JjX3BtaWNfdXBkYXRlX2F1eCwKKwkuZ2V0X3BvbGljeQk9IGludGVsX2NyY19wbWljX2dldF9wb2xpY3ksCisJLnVwZGF0ZV9wb2xpY3kJPSBpbnRlbF9jcmNfcG1pY191cGRhdGVfcG9saWN5LAorCS5wb3dlcl90YWJsZQk9IHBvd2VyX3RhYmxlLAorCS5wb3dlcl90YWJsZV9jb3VudD0gQVJSQVlfU0laRShwb3dlcl90YWJsZSksCisJLnRoZXJtYWxfdGFibGUJPSB0aGVybWFsX3RhYmxlLAorCS50aGVybWFsX3RhYmxlX2NvdW50ID0gQVJSQVlfU0laRSh0aGVybWFsX3RhYmxlKSwKK307CisKK3N0YXRpYyBpbnQgaW50ZWxfY3JjX3BtaWNfb3ByZWdpb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaW50ZWxfc29jX3BtaWMgKnBtaWMgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJcmV0dXJuIGludGVsX3BtaWNfaW5zdGFsbF9vcHJlZ2lvbl9oYW5kbGVyKCZwZGV2LT5kZXYsCisJCQlBQ1BJX0hBTkRMRShwZGV2LT5kZXYucGFyZW50KSwgcG1pYy0+cmVnbWFwLAorCQkJJmludGVsX2NyY19wbWljX29wcmVnaW9uX2RhdGEpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbnRlbF9jcmNfcG1pY19vcHJlZ2lvbl9kcml2ZXIgPSB7CisJLnByb2JlID0gaW50ZWxfY3JjX3BtaWNfb3ByZWdpb25fcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiY3J5c3RhbF9jb3ZlX3BtaWMiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbnRlbF9jcmNfcG1pY19vcHJlZ2lvbl9kcml2ZXJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmludGVsX2NyY19wbWljX29wcmVnaW9uX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChpbnRlbF9jcmNfcG1pY19vcHJlZ2lvbl9kcml2ZXJfaW5pdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQ3J5c3RhbENvdmUgQUNQSSBvcHJhdGlvbiByZWdpb24gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcG1pYy9pbnRlbF9wbWljX3hwb3dlci5jIGIvZHJpdmVycy9hY3BpL3BtaWMvaW50ZWxfcG1pY194cG93ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTA4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hY3BpL3BtaWMvaW50ZWxfcG1pY194cG93ZXIuYwpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIGludGVsX3BtaWNfeHBvd2VyLmMgLSBYUG93ZXIgQVhQMjg4IFBNSUMgb3BlcmF0aW9uIHJlZ2lvbiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2F4cDIweC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lpby9jb25zdW1lci5oPgorI2luY2x1ZGUgImludGVsX3BtaWMuaCIKKworI2RlZmluZSBYUE9XRVJfR1BBRENfTE9XCTB4NWIKKworc3RhdGljIHN0cnVjdCBwbWljX3RhYmxlIHBvd2VyX3RhYmxlW10gPSB7CisJeworCQkuYWRkcmVzcyA9IDB4MDAsCisJCS5yZWcgPSAweDEzLAorCQkuYml0ID0gMHgwNSwKKwl9LAorCXsKKwkJLmFkZHJlc3MgPSAweDA0LAorCQkucmVnID0gMHgxMywKKwkJLmJpdCA9IDB4MDYsCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHgwOCwKKwkJLnJlZyA9IDB4MTMsCisJCS5iaXQgPSAweDA3LAorCX0sCisJeworCQkuYWRkcmVzcyA9IDB4MGMsCisJCS5yZWcgPSAweDEyLAorCQkuYml0ID0gMHgwMywKKwl9LAorCXsKKwkJLmFkZHJlc3MgPSAweDEwLAorCQkucmVnID0gMHgxMiwKKwkJLmJpdCA9IDB4MDQsCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHgxNCwKKwkJLnJlZyA9IDB4MTIsCisJCS5iaXQgPSAweDA1LAorCX0sCisJeworCQkuYWRkcmVzcyA9IDB4MTgsCisJCS5yZWcgPSAweDEyLAorCQkuYml0ID0gMHgwNiwKKwl9LAorCXsKKwkJLmFkZHJlc3MgPSAweDFjLAorCQkucmVnID0gMHgxMiwKKwkJLmJpdCA9IDB4MDAsCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHgyMCwKKwkJLnJlZyA9IDB4MTIsCisJCS5iaXQgPSAweDAxLAorCX0sCisJeworCQkuYWRkcmVzcyA9IDB4MjQsCisJCS5yZWcgPSAweDEyLAorCQkuYml0ID0gMHgwMiwKKwl9LAorCXsKKwkJLmFkZHJlc3MgPSAweDI4LAorCQkucmVnID0gMHgxMywKKwkJLmJpdCA9IDB4MDIsCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHgyYywKKwkJLnJlZyA9IDB4MTMsCisJCS5iaXQgPSAweDAzLAorCX0sCisJeworCQkuYWRkcmVzcyA9IDB4MzAsCisJCS5yZWcgPSAweDEzLAorCQkuYml0ID0gMHgwNCwKKwl9LAorCXsKKwkJLmFkZHJlc3MgPSAweDM4LAorCQkucmVnID0gMHgxMCwKKwkJLmJpdCA9IDB4MDMsCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHgzYywKKwkJLnJlZyA9IDB4MTAsCisJCS5iaXQgPSAweDA2LAorCX0sCisJeworCQkuYWRkcmVzcyA9IDB4NDAsCisJCS5yZWcgPSAweDEwLAorCQkuYml0ID0gMHgwNSwKKwl9LAorCXsKKwkJLmFkZHJlc3MgPSAweDQ0LAorCQkucmVnID0gMHgxMCwKKwkJLmJpdCA9IDB4MDQsCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHg0OCwKKwkJLnJlZyA9IDB4MTAsCisJCS5iaXQgPSAweDAxLAorCX0sCisJeworCQkuYWRkcmVzcyA9IDB4NGMsCisJCS5yZWcgPSAweDEwLAorCQkuYml0ID0gMHgwMAorCX0sCit9OworCisvKiBUTVAwIC0gVE1QNSBhcmUgdGhlIHNhbWUsIGFsbCBmcm9tIEdQQURDICovCitzdGF0aWMgc3RydWN0IHBtaWNfdGFibGUgdGhlcm1hbF90YWJsZVtdID0geworCXsKKwkJLmFkZHJlc3MgPSAweDAwLAorCQkucmVnID0gWFBPV0VSX0dQQURDX0xPVworCX0sCisJeworCQkuYWRkcmVzcyA9IDB4MGMsCisJCS5yZWcgPSBYUE9XRVJfR1BBRENfTE9XCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHgxOCwKKwkJLnJlZyA9IFhQT1dFUl9HUEFEQ19MT1cKKwl9LAorCXsKKwkJLmFkZHJlc3MgPSAweDI0LAorCQkucmVnID0gWFBPV0VSX0dQQURDX0xPVworCX0sCisJeworCQkuYWRkcmVzcyA9IDB4MzAsCisJCS5yZWcgPSBYUE9XRVJfR1BBRENfTE9XCisJfSwKKwl7CisJCS5hZGRyZXNzID0gMHgzYywKKwkJLnJlZyA9IFhQT1dFUl9HUEFEQ19MT1cKKwl9LAorfTsKKworc3RhdGljIGludCBpbnRlbF94cG93ZXJfcG1pY19nZXRfcG93ZXIoc3RydWN0IHJlZ21hcCAqcmVnbWFwLCBpbnQgcmVnLAorCQkJCSAgICAgICBpbnQgYml0LCB1NjQgKnZhbHVlKQoreworCWludCBkYXRhOworCisJaWYgKHJlZ21hcF9yZWFkKHJlZ21hcCwgcmVnLCAmZGF0YSkpCisJCXJldHVybiAtRUlPOworCisJKnZhbHVlID0gKGRhdGEgJiBCSVQoYml0KSkgPyAxIDogMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnRlbF94cG93ZXJfcG1pY191cGRhdGVfcG93ZXIoc3RydWN0IHJlZ21hcCAqcmVnbWFwLCBpbnQgcmVnLAorCQkJCQkgIGludCBiaXQsIGJvb2wgb24pCit7CisJaW50IGRhdGE7CisKKwlpZiAocmVnbWFwX3JlYWQocmVnbWFwLCByZWcsICZkYXRhKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAob24pCisJCWRhdGEgfD0gQklUKGJpdCk7CisJZWxzZQorCQlkYXRhICY9IH5CSVQoYml0KTsKKworCWlmIChyZWdtYXBfd3JpdGUocmVnbWFwLCByZWcsIGRhdGEpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGludGVsX3hwb3dlcl9wbWljX2dldF9yYXdfdGVtcCgpOiBHZXQgcmF3IHRlbXBlcmF0dXJlIHJlYWRpbmcgZnJvbSB0aGUgUE1JQworICoKKyAqIEByZWdtYXA6IHJlZ21hcCBvZiB0aGUgUE1JQyBkZXZpY2UKKyAqIEByZWc6IHJlZ2lzdGVyIHRvIGdldCB0aGUgcmVhZGluZworICoKKyAqIFdlIGNvdWxkIGdldCB0aGUgc2Vuc29yIHZhbHVlIGJ5IG1hbmlwdWxhdGluZyB0aGUgSFcgcmVncyBoZXJlLCBidXQgc2luY2UKKyAqIHRoZSBheHAyODggSUlPIGRyaXZlciBtYXkgYWxzbyBhY2Nlc3MgdGhlIHNhbWUgcmVncyBhdCB0aGUgc2FtZSB0aW1lLCB0aGUKKyAqIEFQSXMgcHJvdmlkZWQgYnkgSUlPIHN1YnN5c3RlbSBhcmUgdXNlZCBoZXJlIGluc3RlYWQgdG8gYXZvaWQgcHJvYmxlbXMuIEFzCisgKiBhIHJlc3VsdCwgdGhlIHR3byBwYXNzZWQgaW4gcGFyYW1zIGFyZSBvZiBubyBhY3R1YWwgdXNlLgorICoKKyAqIFJldHVybiBhIHBvc2l0aXZlIHZhbHVlIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaW50ZWxfeHBvd2VyX3BtaWNfZ2V0X3Jhd190ZW1wKHN0cnVjdCByZWdtYXAgKnJlZ21hcCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgaWlvX2NoYW5uZWwgKmdwYWRjX2NoYW47CisJaW50IHJldCwgdmFsOworCisJZ3BhZGNfY2hhbiA9IGlpb19jaGFubmVsX2dldChOVUxMLCAiYXhwMjg4LXN5c3RlbS10ZW1wIik7CisJaWYgKElTX0VSUl9PUl9OVUxMKGdwYWRjX2NoYW4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCXJldCA9IGlpb19yZWFkX2NoYW5uZWxfcmF3KGdwYWRjX2NoYW4sICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQl2YWwgPSByZXQ7CisKKwlpaW9fY2hhbm5lbF9yZWxlYXNlKGdwYWRjX2NoYW4pOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfcG1pY19vcHJlZ2lvbl9kYXRhIGludGVsX3hwb3dlcl9wbWljX29wcmVnaW9uX2RhdGEgPSB7CisJLmdldF9wb3dlciA9IGludGVsX3hwb3dlcl9wbWljX2dldF9wb3dlciwKKwkudXBkYXRlX3Bvd2VyID0gaW50ZWxfeHBvd2VyX3BtaWNfdXBkYXRlX3Bvd2VyLAorCS5nZXRfcmF3X3RlbXAgPSBpbnRlbF94cG93ZXJfcG1pY19nZXRfcmF3X3RlbXAsCisJLnBvd2VyX3RhYmxlID0gcG93ZXJfdGFibGUsCisJLnBvd2VyX3RhYmxlX2NvdW50ID0gQVJSQVlfU0laRShwb3dlcl90YWJsZSksCisJLnRoZXJtYWxfdGFibGUgPSB0aGVybWFsX3RhYmxlLAorCS50aGVybWFsX3RhYmxlX2NvdW50ID0gQVJSQVlfU0laRSh0aGVybWFsX3RhYmxlKSwKK307CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBpbnRlbF94cG93ZXJfcG1pY19ncGlvX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAorCQlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywgdTMyIGJpdF93aWR0aCwgdTY0ICp2YWx1ZSwKKwkJdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCkKK3sKKwlyZXR1cm4gQUVfT0s7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfeHBvd2VyX3BtaWNfb3ByZWdpb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBwZGV2LT5kZXYucGFyZW50OworCXN0cnVjdCBheHAyMHhfZGV2ICpheHAyMHggPSBkZXZfZ2V0X2RydmRhdGEocGFyZW50KTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJaW50IHJlc3VsdDsKKworCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoQUNQSV9IQU5ETEUocGFyZW50KSwKKwkJCUFDUElfQURSX1NQQUNFX0dQSU8sIGludGVsX3hwb3dlcl9wbWljX2dwaW9faGFuZGxlciwKKwkJCU5VTEwsIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXN1bHQgPSBpbnRlbF9wbWljX2luc3RhbGxfb3ByZWdpb25faGFuZGxlcigmcGRldi0+ZGV2LAorCQkJCQlBQ1BJX0hBTkRMRShwYXJlbnQpLCBheHAyMHgtPnJlZ21hcCwKKwkJCQkJJmludGVsX3hwb3dlcl9wbWljX29wcmVnaW9uX2RhdGEpOworCWlmIChyZXN1bHQpCisJCWFjcGlfcmVtb3ZlX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihBQ1BJX0hBTkRMRShwYXJlbnQpLAorCQkJCQkJICBBQ1BJX0FEUl9TUEFDRV9HUElPLAorCQkJCQkJICBpbnRlbF94cG93ZXJfcG1pY19ncGlvX2hhbmRsZXIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW50ZWxfeHBvd2VyX3BtaWNfb3ByZWdpb25fZHJpdmVyID0geworCS5wcm9iZSA9IGludGVsX3hwb3dlcl9wbWljX29wcmVnaW9uX3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImF4cDI4OF9wbWljX2FjcGkiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbnRlbF94cG93ZXJfcG1pY19vcHJlZ2lvbl9kcml2ZXJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmludGVsX3hwb3dlcl9wbWljX29wcmVnaW9uX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChpbnRlbF94cG93ZXJfcG1pY19vcHJlZ2lvbl9kcml2ZXJfaW5pdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiWFBvd2VyIEFYUDI4OCBBQ1BJIG9wZXJhdGlvbiByZWdpb24gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCmluZGV4IDE3ZjllYzUuLjQ5OTUzNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCkBAIC0zMzQsMTAgKzMzNCwxMCBAQAogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wb3dlcl9pbmZvX2NzdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQogewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXU2NCBjb3VudDsKIAlpbnQgY3VycmVudF9jb3VudDsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0ID0gMDsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCXVuaW9uIGFjcGlfb2JqZWN0ICpjc3Q7CiAKQEAgLTM1OCw3ICszNTgsNyBAQAogCS8qIFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgMiBlbGVtZW50cyAqLwogCWlmICghY3N0IHx8IChjc3QtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHx8IGNzdC0+cGFja2FnZS5jb3VudCA8IDIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAibm90IGVub3VnaCBlbGVtZW50cyBpbiBfQ1NUXG4iKTsKLQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBlbmQ7CiAJfQogCkBAIC0zNjcsNyArMzY3LDcgQEAKIAkvKiBWYWxpZGF0ZSBudW1iZXIgb2YgcG93ZXIgc3RhdGVzLiAqLwogCWlmIChjb3VudCA8IDEgfHwgY291bnQgIT0gY3N0LT5wYWNrYWdlLmNvdW50IC0gMSkgewogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJjb3VudCBnaXZlbiBieSBfQ1NUIGlzIG5vdCB2YWxpZFxuIik7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7CisJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZW5kOwogCX0KIApAQCAtNDg5LDEyICs0ODksMTIgQEAKIAogCS8qIFZhbGlkYXRlIG51bWJlciBvZiBwb3dlciBzdGF0ZXMgZGlzY292ZXJlZCAqLwogCWlmIChjdXJyZW50X2NvdW50IDwgMikKLQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKIAogICAgICAgZW5kOgogCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgYWNwaV9wcm9jZXNzb3JfcG93ZXJfdmVyaWZ5X2MzKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCkBAIC05ODUsOCArOTg1LDggQEAKIAkJc3RhdGUtPmZsYWdzID0gMDsKIAkJc3dpdGNoIChjeC0+dHlwZSkgewogCQkJY2FzZSBBQ1BJX1NUQVRFX0MxOgotCQkJaWYgKGN4LT5lbnRyeV9tZXRob2QgPT0gQUNQSV9DU1RBVEVfRkZIKQotCQkJCXN0YXRlLT5mbGFncyB8PSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRDsKKwkJCWlmIChjeC0+ZW50cnlfbWV0aG9kICE9IEFDUElfQ1NUQVRFX0ZGSCkKKwkJCQlzdGF0ZS0+ZmxhZ3MgfD0gQ1BVSURMRV9GTEFHX1RJTUVfSU5WQUxJRDsKIAogCQkJc3RhdGUtPmVudGVyID0gYWNwaV9pZGxlX2VudGVyX2MxOwogCQkJc3RhdGUtPmVudGVyX2RlYWQgPSBhY3BpX2lkbGVfcGxheV9kZWFkOwpAQCAtOTk0LDE0ICs5OTQsMTIgQEAKIAkJCWJyZWFrOwogCiAJCQljYXNlIEFDUElfU1RBVEVfQzI6Ci0JCQlzdGF0ZS0+ZmxhZ3MgfD0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQ7CiAJCQlzdGF0ZS0+ZW50ZXIgPSBhY3BpX2lkbGVfZW50ZXJfc2ltcGxlOwogCQkJc3RhdGUtPmVudGVyX2RlYWQgPSBhY3BpX2lkbGVfcGxheV9kZWFkOwogCQkJZHJ2LT5zYWZlX3N0YXRlX2luZGV4ID0gY291bnQ7CiAJCQlicmVhazsKIAogCQkJY2FzZSBBQ1BJX1NUQVRFX0MzOgotCQkJc3RhdGUtPmZsYWdzIHw9IENQVUlETEVfRkxBR19USU1FX1ZBTElEOwogCQkJc3RhdGUtPmVudGVyID0gcHItPmZsYWdzLmJtX2NoZWNrID8KIAkJCQkJYWNwaV9pZGxlX2VudGVyX2JtIDoKIAkJCQkJYWNwaV9pZGxlX2VudGVyX3NpbXBsZTsKQEAgLTExMTEsNyArMTEwOSw3IEBACiAKIGludCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldjsKIAlzdGF0aWMgaW50IGZpcnN0X3J1bjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9wZXJ0eS5jIGIvZHJpdmVycy9hY3BpL3Byb3BlcnR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwODM3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9wZXJ0eS5jCkBAIC0wLDAgKzEsNTUxIEBACisvKgorICogQUNQSSBkZXZpY2Ugc3BlY2lmaWMgcHJvcGVydGllcyBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yczogTWlrYSBXZXN0ZXJiZXJnIDxtaWthLndlc3RlcmJlcmdAbGludXguaW50ZWwuY29tPgorICogICAgICAgICAgRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisgKiAgICAgICAgICBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyogQUNQSSBfRFNEIGRldmljZSBwcm9wZXJ0aWVzIFVVSUQ6IGRhZmZkODE0LTZlYmEtNGQ4Yy04YTkxLWJjOWJiZjRhYTMwMSAqLworc3RhdGljIGNvbnN0IHU4IHBycF91dWlkWzE2XSA9IHsKKwkweDE0LCAweGQ4LCAweGZmLCAweGRhLCAweGJhLCAweDZlLCAweDhjLCAweDRkLAorCTB4OGEsIDB4OTEsIDB4YmMsIDB4OWIsIDB4YmYsIDB4NGEsIDB4YTMsIDB4MDEKK307CisKK3N0YXRpYyBib29sIGFjcGlfcHJvcGVydHlfdmFsdWVfb2soY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKnZhbHVlKQoreworCWludCBqOworCisJLyoKKwkgKiBUaGUgdmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyLCBhIHN0cmluZywgYSByZWZlcmVuY2UsIG9yIGEgcGFja2FnZQorCSAqIHdob3NlIGV2ZXJ5IGVsZW1lbnQgbXVzdCBiZSBhbiBpbnRlZ2VyLCBhIHN0cmluZywgb3IgYSByZWZlcmVuY2UuCisJICovCisJc3dpdGNoICh2YWx1ZS0+dHlwZSkgeworCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CisJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgorCWNhc2UgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRToKKwkJcmV0dXJuIHRydWU7CisKKwljYXNlIEFDUElfVFlQRV9QQUNLQUdFOgorCQlmb3IgKGogPSAwOyBqIDwgdmFsdWUtPnBhY2thZ2UuY291bnQ7IGorKykKKwkJCXN3aXRjaCAodmFsdWUtPnBhY2thZ2UuZWxlbWVudHNbal0udHlwZSkgeworCQkJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKKwkJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKKwkJCWNhc2UgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRToKKwkJCQljb250aW51ZTsKKworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgYWNwaV9wcm9wZXJ0aWVzX2Zvcm1hdF92YWxpZChjb25zdCB1bmlvbiBhY3BpX29iamVjdCAqcHJvcGVydGllcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKKwkJY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKnByb3BlcnR5OworCisJCXByb3BlcnR5ID0gJnByb3BlcnRpZXMtPnBhY2thZ2UuZWxlbWVudHNbaV07CisJCS8qCisJCSAqIE9ubHkgdHdvIGVsZW1lbnRzIGFsbG93ZWQsIHRoZSBmaXJzdCBvbmUgbXVzdCBiZSBhIHN0cmluZyBhbmQKKwkJICogdGhlIHNlY29uZCBvbmUgaGFzIHRvIHNhdGlzZnkgY2VydGFpbiBjb25kaXRpb25zLgorCQkgKi8KKwkJaWYgKHByb3BlcnR5LT5wYWNrYWdlLmNvdW50ICE9IDIKKwkJICAgIHx8IHByb3BlcnR5LT5wYWNrYWdlLmVsZW1lbnRzWzBdLnR5cGUgIT0gQUNQSV9UWVBFX1NUUklORworCQkgICAgfHwgIWFjcGlfcHJvcGVydHlfdmFsdWVfb2soJnByb3BlcnR5LT5wYWNrYWdlLmVsZW1lbnRzWzFdKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfaW5pdF9vZl9jb21wYXRpYmxlKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldikKK3sKKwljb25zdCB1bmlvbiBhY3BpX29iamVjdCAqb2ZfY29tcGF0aWJsZTsKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaHdpZDsKKwlib29sIGFjcGlfb2YgPSBmYWxzZTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgc3BlY2lhbCBQUlAwMDAxIEFDUEkgSUQgaXMgcHJlc2VudCBhbmQgaW4gdGhhdAorCSAqIGNhc2Ugd2UgZmlsbCBpbiBEZXZpY2UgVHJlZSBjb21wYXRpYmxlIHByb3BlcnRpZXMgZm9yIHRoaXMKKwkgKiBkZXZpY2UuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShod2lkLCAmYWRldi0+cG5wLmlkcywgbGlzdCkgeworCQlpZiAoIXN0cmNtcChod2lkLT5pZCwgIlBSUDAwMDEiKSkgeworCQkJYWNwaV9vZiA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghYWNwaV9vZikKKwkJcmV0dXJuOworCisJcmV0ID0gYWNwaV9kZXZfZ2V0X3Byb3BlcnR5X2FycmF5KGFkZXYsICJjb21wYXRpYmxlIiwgQUNQSV9UWVBFX1NUUklORywKKwkJCQkJICAmb2ZfY29tcGF0aWJsZSk7CisJaWYgKHJldCkgeworCQlyZXQgPSBhY3BpX2Rldl9nZXRfcHJvcGVydHkoYWRldiwgImNvbXBhdGlibGUiLAorCQkJCQkgICAgQUNQSV9UWVBFX1NUUklORywgJm9mX2NvbXBhdGlibGUpOworCQlpZiAocmV0KSB7CisJCQlhY3BpX2hhbmRsZV93YXJuKGFkZXYtPmhhbmRsZSwKKwkJCQkJICJQUlAwMDAxIHJlcXVpcmVzIGNvbXBhdGlibGUgcHJvcGVydHlcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCWFkZXYtPmRhdGEub2ZfY29tcGF0aWJsZSA9IG9mX2NvbXBhdGlibGU7Cit9CisKK3ZvaWQgYWNwaV9pbml0X3Byb3BlcnRpZXMoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWYgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSIH07CisJY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKmRlc2M7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWludCBpOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoYWRldi0+aGFuZGxlLCAiX0RTRCIsIE5VTEwsICZidWYsCisJCQkJCSAgICBBQ1BJX1RZUEVfUEFDS0FHRSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm47CisKKwlkZXNjID0gYnVmLnBvaW50ZXI7CisJaWYgKGRlc2MtPnBhY2thZ2UuY291bnQgJSAyKQorCQlnb3RvIGZhaWw7CisKKwkvKiBMb29rIGZvciB0aGUgZGV2aWNlIHByb3BlcnRpZXMgVVVJRC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+cGFja2FnZS5jb3VudDsgaSArPSAyKSB7CisJCWNvbnN0IHVuaW9uIGFjcGlfb2JqZWN0ICp1dWlkLCAqcHJvcGVydGllczsKKworCQl1dWlkID0gJmRlc2MtPnBhY2thZ2UuZWxlbWVudHNbaV07CisJCXByb3BlcnRpZXMgPSAmZGVzYy0+cGFja2FnZS5lbGVtZW50c1tpICsgMV07CisKKwkJLyoKKwkJICogVGhlIGZpcnN0IGVsZW1lbnQgbXVzdCBiZSBhIFVVSUQgYW5kIHRoZSBzZWNvbmQgb25lIG11c3QgYmUKKwkJICogYSBwYWNrYWdlLgorCQkgKi8KKwkJaWYgKHV1aWQtPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUiB8fCB1dWlkLT5idWZmZXIubGVuZ3RoICE9IDE2CisJCSAgICB8fCBwcm9wZXJ0aWVzLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKQorCQkJYnJlYWs7CisKKwkJaWYgKG1lbWNtcCh1dWlkLT5idWZmZXIucG9pbnRlciwgcHJwX3V1aWQsIHNpemVvZihwcnBfdXVpZCkpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogV2UgZm91bmQgdGhlIG1hdGNoaW5nIFVVSUQuIE5vdyB2YWxpZGF0ZSB0aGUgZm9ybWF0IG9mIHRoZQorCQkgKiBwYWNrYWdlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBpdC4KKwkJICovCisJCWlmICghYWNwaV9wcm9wZXJ0aWVzX2Zvcm1hdF92YWxpZChwcm9wZXJ0aWVzKSkKKwkJCWJyZWFrOworCisJCWFkZXYtPmRhdGEucG9pbnRlciA9IGJ1Zi5wb2ludGVyOworCQlhZGV2LT5kYXRhLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworCisJCWFjcGlfaW5pdF9vZl9jb21wYXRpYmxlKGFkZXYpOworCQlyZXR1cm47CisJfQorCisgZmFpbDoKKwlkZXZfd2FybigmYWRldi0+ZGV2LCAiUmV0dXJuZWQgX0RTRCBkYXRhIGlzIG5vdCB2YWxpZCwgc2tpcHBpbmdcbiIpOworCUFDUElfRlJFRShidWYucG9pbnRlcik7Cit9CisKK3ZvaWQgYWNwaV9mcmVlX3Byb3BlcnRpZXMoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2KQoreworCUFDUElfRlJFRSgodm9pZCAqKWFkZXYtPmRhdGEucG9pbnRlcik7CisJYWRldi0+ZGF0YS5vZl9jb21wYXRpYmxlID0gTlVMTDsKKwlhZGV2LT5kYXRhLnBvaW50ZXIgPSBOVUxMOworCWFkZXYtPmRhdGEucHJvcGVydGllcyA9IE5VTEw7Cit9CisKKy8qKgorICogYWNwaV9kZXZfZ2V0X3Byb3BlcnR5IC0gcmV0dXJuIGFuIEFDUEkgcHJvcGVydHkgd2l0aCBnaXZlbiBuYW1lCisgKiBAYWRldjogQUNQSSBkZXZpY2UgdG8gZ2V0IHByb3BlcnR5CisgKiBAbmFtZTogTmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqIEB0eXBlOiBFeHBlY3RlZCBwcm9wZXJ0eSB0eXBlCisgKiBAb2JqOiBMb2NhdGlvbiB0byBzdG9yZSB0aGUgcHJvcGVydHkgdmFsdWUgKGlmIG5vdCAlTlVMTCkKKyAqCisgKiBMb29rIHVwIGEgcHJvcGVydHkgd2l0aCBAbmFtZSBhbmQgc3RvcmUgYSBwb2ludGVyIHRvIHRoZSByZXN1bHRpbmcgQUNQSQorICogb2JqZWN0IGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IEBvYmogaWYgZm91bmQuCisgKgorICogQ2FsbGVycyBtdXN0IG5vdCBhdHRlbXB0IHRvIGZyZWUgdGhlIHJldHVybmVkIG9iamVjdHMuICBUaGVzZSBvYmplY3RzIHdpbGwgYmUKKyAqIGZyZWVkIGJ5IHRoZSBBQ1BJIGNvcmUgYXV0b21hdGljYWxseSBkdXJpbmcgdGhlIHJlbW92YWwgb2YgQGFkZXYuCisgKgorICogUmV0dXJuOiAlMCBpZiBwcm9wZXJ0eSB3aXRoIEBuYW1lIGhhcyBiZWVuIGZvdW5kIChzdWNjZXNzKSwKKyAqICAgICAgICAgJS1FSU5WQUwgaWYgdGhlIGFyZ3VtZW50cyBhcmUgaW52YWxpZCwKKyAqICAgICAgICAgJS1FTk9EQVRBIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0LAorICogICAgICAgICAlLUVQUk9UTyBpZiB0aGUgcHJvcGVydHkgdmFsdWUgdHlwZSBkb2Vzbid0IG1hdGNoIEB0eXBlLgorICovCitpbnQgYWNwaV9kZXZfZ2V0X3Byb3BlcnR5KHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgYWNwaV9vYmplY3RfdHlwZSB0eXBlLCBjb25zdCB1bmlvbiBhY3BpX29iamVjdCAqKm9iaikKK3sKKwljb25zdCB1bmlvbiBhY3BpX29iamVjdCAqcHJvcGVydGllczsKKwlpbnQgaTsKKworCWlmICghYWRldiB8fCAhbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWFkZXYtPmRhdGEucG9pbnRlciB8fCAhYWRldi0+ZGF0YS5wcm9wZXJ0aWVzKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwlwcm9wZXJ0aWVzID0gYWRldi0+ZGF0YS5wcm9wZXJ0aWVzOworCWZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKKwkJY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKnByb3BuYW1lLCAqcHJvcHZhbHVlOworCQljb25zdCB1bmlvbiBhY3BpX29iamVjdCAqcHJvcGVydHk7CisKKwkJcHJvcGVydHkgPSAmcHJvcGVydGllcy0+cGFja2FnZS5lbGVtZW50c1tpXTsKKworCQlwcm9wbmFtZSA9ICZwcm9wZXJ0eS0+cGFja2FnZS5lbGVtZW50c1swXTsKKwkJcHJvcHZhbHVlID0gJnByb3BlcnR5LT5wYWNrYWdlLmVsZW1lbnRzWzFdOworCisJCWlmICghc3RyY21wKG5hbWUsIHByb3BuYW1lLT5zdHJpbmcucG9pbnRlcikpIHsKKwkJCWlmICh0eXBlICE9IEFDUElfVFlQRV9BTlkgJiYgcHJvcHZhbHVlLT50eXBlICE9IHR5cGUpCisJCQkJcmV0dXJuIC1FUFJPVE87CisJCQllbHNlIGlmIChvYmopCisJCQkJKm9iaiA9IHByb3B2YWx1ZTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9EQVRBOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9kZXZfZ2V0X3Byb3BlcnR5KTsKKworLyoqCisgKiBhY3BpX2Rldl9nZXRfcHJvcGVydHlfYXJyYXkgLSByZXR1cm4gYW4gQUNQSSBhcnJheSBwcm9wZXJ0eSB3aXRoIGdpdmVuIG5hbWUKKyAqIEBhZGV2OiBBQ1BJIGRldmljZSB0byBnZXQgcHJvcGVydHkKKyAqIEBuYW1lOiBOYW1lIG9mIHRoZSBwcm9wZXJ0eQorICogQHR5cGU6IEV4cGVjdGVkIHR5cGUgb2YgYXJyYXkgZWxlbWVudHMKKyAqIEBvYmo6IExvY2F0aW9uIHRvIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgcHJvcGVydHkgdmFsdWUgKGlmIG5vdCBOVUxMKQorICoKKyAqIExvb2sgdXAgYW4gYXJyYXkgcHJvcGVydHkgd2l0aCBAbmFtZSBhbmQgc3RvcmUgYSBwb2ludGVyIHRvIHRoZSByZXN1bHRpbmcKKyAqIEFDUEkgb2JqZWN0IGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IEBvYmogaWYgZm91bmQuCisgKgorICogQ2FsbGVycyBtdXN0IG5vdCBhdHRlbXB0IHRvIGZyZWUgdGhlIHJldHVybmVkIG9iamVjdHMuICBUaG9zZSBvYmplY3RzIHdpbGwgYmUKKyAqIGZyZWVkIGJ5IHRoZSBBQ1BJIGNvcmUgYXV0b21hdGljYWxseSBkdXJpbmcgdGhlIHJlbW92YWwgb2YgQGFkZXYuCisgKgorICogUmV0dXJuOiAlMCBpZiBhcnJheSBwcm9wZXJ0eSAocGFja2FnZSkgd2l0aCBAbmFtZSBoYXMgYmVlbiBmb3VuZCAoc3VjY2VzcyksCisgKiAgICAgICAgICUtRUlOVkFMIGlmIHRoZSBhcmd1bWVudHMgYXJlIGludmFsaWQsCisgKiAgICAgICAgICUtRU5PREFUQSBpZiB0aGUgcHJvcGVydHkgZG9lc24ndCBleGlzdCwKKyAqICAgICAgICAgJS1FUFJPVE8gaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBhIHBhY2thZ2Ugb3IgdGhlIHR5cGUgb2YgaXRzIGVsZW1lbnRzCisgKiAgICAgICAgICAgZG9lc24ndCBtYXRjaCBAdHlwZS4KKyAqLworaW50IGFjcGlfZGV2X2dldF9wcm9wZXJ0eV9hcnJheShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJYWNwaV9vYmplY3RfdHlwZSB0eXBlLAorCQkJCWNvbnN0IHVuaW9uIGFjcGlfb2JqZWN0ICoqb2JqKQoreworCWNvbnN0IHVuaW9uIGFjcGlfb2JqZWN0ICpwcm9wOworCWludCByZXQsIGk7CisKKwlyZXQgPSBhY3BpX2Rldl9nZXRfcHJvcGVydHkoYWRldiwgbmFtZSwgQUNQSV9UWVBFX1BBQ0tBR0UsICZwcm9wKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHR5cGUgIT0gQUNQSV9UWVBFX0FOWSkgeworCQkvKiBDaGVjayB0aGF0IGFsbCBlbGVtZW50cyBhcmUgb2YgY29ycmVjdCB0eXBlLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgcHJvcC0+cGFja2FnZS5jb3VudDsgaSsrKQorCQkJaWYgKHByb3AtPnBhY2thZ2UuZWxlbWVudHNbaV0udHlwZSAhPSB0eXBlKQorCQkJCXJldHVybiAtRVBST1RPOworCX0KKwlpZiAob2JqKQorCQkqb2JqID0gcHJvcDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9kZXZfZ2V0X3Byb3BlcnR5X2FycmF5KTsKKworLyoqCisgKiBhY3BpX2Rldl9nZXRfcHJvcGVydHlfcmVmZXJlbmNlIC0gcmV0dXJucyBoYW5kbGUgdG8gdGhlIHJlZmVyZW5jZWQgb2JqZWN0CisgKiBAYWRldjogQUNQSSBkZXZpY2UgdG8gZ2V0IHByb3BlcnR5CisgKiBAbmFtZTogTmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqIEBpbmRleDogSW5kZXggb2YgdGhlIHJlZmVyZW5jZSB0byByZXR1cm4KKyAqIEBhcmdzOiBMb2NhdGlvbiB0byBzdG9yZSB0aGUgcmV0dXJuZWQgcmVmZXJlbmNlIHdpdGggb3B0aW9uYWwgYXJndW1lbnRzCisgKgorICogRmluZCBwcm9wZXJ0eSB3aXRoIEBuYW1lLCB2ZXJpZmlmeSB0aGF0IGl0IGlzIGEgcGFja2FnZSBjb250YWluaW5nIGF0IGxlYXN0CisgKiBvbmUgb2JqZWN0IHJlZmVyZW5jZSBhbmQgaWYgc28sIHN0b3JlIHRoZSBBQ1BJIGRldmljZSBvYmplY3QgcG9pbnRlciB0byB0aGUKKyAqIHRhcmdldCBvYmplY3QgaW4gQGFyZ3MtPmFkZXYuICBJZiB0aGUgcmVmZXJlbmNlIGluY2x1ZGVzIGFyZ3VtZW50cywgc3RvcmUKKyAqIHRoZW0gaW4gdGhlIEBhcmdzLT5hcmdzW10gYXJyYXkuCisgKgorICogSWYgdGhlcmUncyBtb3JlIHRoYW4gb25lIHJlZmVyZW5jZSBpbiB0aGUgcHJvcGVydHkgdmFsdWUgcGFja2FnZSwgQGluZGV4IGlzCisgKiB1c2VkIHRvIHNlbGVjdCB0aGUgb25lIHRvIHJldHVybi4KKyAqCisgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGFjcGlfZGV2X2dldF9wcm9wZXJ0eV9yZWZlcmVuY2Uoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAorCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgaW5kZXgsCisJCQkJICAgIHN0cnVjdCBhY3BpX3JlZmVyZW5jZV9hcmdzICphcmdzKQoreworCWNvbnN0IHVuaW9uIGFjcGlfb2JqZWN0ICplbGVtZW50LCAqZW5kOworCWNvbnN0IHVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CisJaW50IHJldCwgaWR4ID0gMDsKKworCXJldCA9IGFjcGlfZGV2X2dldF9wcm9wZXJ0eShhZGV2LCBuYW1lLCBBQ1BJX1RZUEVfQU5ZLCAmb2JqKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBUaGUgc2ltcGxlc3QgY2FzZSBpcyB3aGVuIHRoZSB2YWx1ZSBpcyBhIHNpbmdsZSByZWZlcmVuY2UuICBKdXN0CisJICogcmV0dXJuIHRoYXQgcmVmZXJlbmNlIHRoZW4uCisJICovCisJaWYgKG9iai0+dHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7CisJCWlmIChpbmRleCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldCA9IGFjcGlfYnVzX2dldF9kZXZpY2Uob2JqLT5yZWZlcmVuY2UuaGFuZGxlLCAmZGV2aWNlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJYXJncy0+YWRldiA9IGRldmljZTsKKwkJYXJncy0+bmFyZ3MgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElmIGl0IGlzIG5vdCBhIHNpbmdsZSByZWZlcmVuY2UsIHRoZW4gaXQgaXMgYSBwYWNrYWdlIG9mCisJICogcmVmZXJlbmNlcyBmb2xsb3dlZCBieSBudW1iZXIgb2YgaW50cyBhcyBmb2xsb3dzOgorCSAqCisJICogIFBhY2thZ2UgKCkgeyBSRUYsIElOVCwgUkVGLCBJTlQsIElOVCB9CisJICoKKwkgKiBUaGUgaW5kZXggYXJndW1lbnQgaXMgdGhlbiB1c2VkIHRvIGRldGVybWluZSB3aGljaCByZWZlcmVuY2UKKwkgKiB0aGUgY2FsbGVyIHdhbnRzIChhbG9uZyB3aXRoIHRoZSBhcmd1bWVudHMpLgorCSAqLworCWlmIChvYmotPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UgfHwgaW5kZXggPj0gb2JqLT5wYWNrYWdlLmNvdW50KQorCQlyZXR1cm4gLUVQUk9UTzsKKworCWVsZW1lbnQgPSBvYmotPnBhY2thZ2UuZWxlbWVudHM7CisJZW5kID0gZWxlbWVudCArIG9iai0+cGFja2FnZS5jb3VudDsKKworCXdoaWxlIChlbGVtZW50IDwgZW5kKSB7CisJCXUzMiBuYXJncywgaTsKKworCQlpZiAoZWxlbWVudC0+dHlwZSAhPSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKQorCQkJcmV0dXJuIC1FUFJPVE87CisKKwkJcmV0ID0gYWNwaV9idXNfZ2V0X2RldmljZShlbGVtZW50LT5yZWZlcmVuY2UuaGFuZGxlLCAmZGV2aWNlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRU5PREVWOworCisJCWVsZW1lbnQrKzsKKwkJbmFyZ3MgPSAwOworCisJCS8qIGFzc3VtZSBmb2xsb3dpbmcgaW50ZWdlciBlbGVtZW50cyBhcmUgYWxsIGFyZ3MgKi8KKwkJZm9yIChpID0gMDsgZWxlbWVudCArIGkgPCBlbmQ7IGkrKykgeworCQkJaW50IHR5cGUgPSBlbGVtZW50W2ldLnR5cGU7CisKKwkJCWlmICh0eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKQorCQkJCW5hcmdzKys7CisJCQllbHNlIGlmICh0eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJcmV0dXJuIC1FUFJPVE87CisJCX0KKworCQlpZiAoaWR4KysgPT0gaW5kZXgpIHsKKwkJCWFyZ3MtPmFkZXYgPSBkZXZpY2U7CisJCQlhcmdzLT5uYXJncyA9IG5hcmdzOworCQkJZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisJCQkJYXJncy0+YXJnc1tpXSA9IGVsZW1lbnRbaV0uaW50ZWdlci52YWx1ZTsKKworCQkJcmV0dXJuIDA7CisJCX0KKworCQllbGVtZW50ICs9IG5hcmdzOworCX0KKworCXJldHVybiAtRVBST1RPOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9kZXZfZ2V0X3Byb3BlcnR5X3JlZmVyZW5jZSk7CisKK2ludCBhY3BpX2Rldl9wcm9wX2dldChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYsIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkgICAgICB2b2lkICoqdmFscHRyKQoreworCXJldHVybiBhY3BpX2Rldl9nZXRfcHJvcGVydHkoYWRldiwgcHJvcG5hbWUsIEFDUElfVFlQRV9BTlksCisJCQkJICAgICAoY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKiopdmFscHRyKTsKK30KKworaW50IGFjcGlfZGV2X3Byb3BfcmVhZF9zaW5nbGUoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LCBjb25zdCBjaGFyICpwcm9wbmFtZSwKKwkJCSAgICAgIGVudW0gZGV2X3Byb3BfdHlwZSBwcm9wdHlwZSwgdm9pZCAqdmFsKQoreworCWNvbnN0IHVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCWlmICghdmFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwcm9wdHlwZSA+PSBERVZfUFJPUF9VOCAmJiBwcm9wdHlwZSA8PSBERVZfUFJPUF9VNjQpIHsKKwkJcmV0ID0gYWNwaV9kZXZfZ2V0X3Byb3BlcnR5KGFkZXYsIHByb3BuYW1lLCBBQ1BJX1RZUEVfSU5URUdFUiwgJm9iaik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXN3aXRjaCAocHJvcHR5cGUpIHsKKwkJY2FzZSBERVZfUFJPUF9VODoKKwkJCWlmIChvYmotPmludGVnZXIudmFsdWUgPiBVOF9NQVgpCisJCQkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJCQkqKHU4ICopdmFsID0gb2JqLT5pbnRlZ2VyLnZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgREVWX1BST1BfVTE2OgorCQkJaWYgKG9iai0+aW50ZWdlci52YWx1ZSA+IFUxNl9NQVgpCisJCQkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJCQkqKHUxNiAqKXZhbCA9IG9iai0+aW50ZWdlci52YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIERFVl9QUk9QX1UzMjoKKwkJCWlmIChvYmotPmludGVnZXIudmFsdWUgPiBVMzJfTUFYKQorCQkJCXJldHVybiAtRU9WRVJGTE9XOworCQkJKih1MzIgKil2YWwgPSBvYmotPmludGVnZXIudmFsdWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCSoodTY0ICopdmFsID0gb2JqLT5pbnRlZ2VyLnZhbHVlOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKHByb3B0eXBlID09IERFVl9QUk9QX1NUUklORykgeworCQlyZXQgPSBhY3BpX2Rldl9nZXRfcHJvcGVydHkoYWRldiwgcHJvcG5hbWUsIEFDUElfVFlQRV9TVFJJTkcsICZvYmopOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkqKGNoYXIgKiopdmFsID0gb2JqLT5zdHJpbmcucG9pbnRlcjsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFjcGlfY29weV9wcm9wZXJ0eV9hcnJheV91OChjb25zdCB1bmlvbiBhY3BpX29iamVjdCAqaXRlbXMsIHU4ICp2YWwsCisJCQkJICAgICAgIHNpemVfdCBudmFsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG52YWw7IGkrKykgeworCQlpZiAoaXRlbXNbaV0udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikKKwkJCXJldHVybiAtRVBST1RPOworCQlpZiAoaXRlbXNbaV0uaW50ZWdlci52YWx1ZSA+IFU4X01BWCkKKwkJCXJldHVybiAtRU9WRVJGTE9XOworCisJCXZhbFtpXSA9IGl0ZW1zW2ldLmludGVnZXIudmFsdWU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcGlfY29weV9wcm9wZXJ0eV9hcnJheV91MTYoY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKml0ZW1zLAorCQkJCQl1MTYgKnZhbCwgc2l6ZV90IG52YWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnZhbDsgaSsrKSB7CisJCWlmIChpdGVtc1tpXS50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKQorCQkJcmV0dXJuIC1FUFJPVE87CisJCWlmIChpdGVtc1tpXS5pbnRlZ2VyLnZhbHVlID4gVTE2X01BWCkKKwkJCXJldHVybiAtRU9WRVJGTE9XOworCisJCXZhbFtpXSA9IGl0ZW1zW2ldLmludGVnZXIudmFsdWU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcGlfY29weV9wcm9wZXJ0eV9hcnJheV91MzIoY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKml0ZW1zLAorCQkJCQl1MzIgKnZhbCwgc2l6ZV90IG52YWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnZhbDsgaSsrKSB7CisJCWlmIChpdGVtc1tpXS50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKQorCQkJcmV0dXJuIC1FUFJPVE87CisJCWlmIChpdGVtc1tpXS5pbnRlZ2VyLnZhbHVlID4gVTMyX01BWCkKKwkJCXJldHVybiAtRU9WRVJGTE9XOworCisJCXZhbFtpXSA9IGl0ZW1zW2ldLmludGVnZXIudmFsdWU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcGlfY29weV9wcm9wZXJ0eV9hcnJheV91NjQoY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKml0ZW1zLAorCQkJCQl1NjQgKnZhbCwgc2l6ZV90IG52YWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnZhbDsgaSsrKSB7CisJCWlmIChpdGVtc1tpXS50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKQorCQkJcmV0dXJuIC1FUFJPVE87CisKKwkJdmFsW2ldID0gaXRlbXNbaV0uaW50ZWdlci52YWx1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9jb3B5X3Byb3BlcnR5X2FycmF5X3N0cmluZyhjb25zdCB1bmlvbiBhY3BpX29iamVjdCAqaXRlbXMsCisJCQkJCSAgIGNoYXIgKip2YWwsIHNpemVfdCBudmFsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG52YWw7IGkrKykgeworCQlpZiAoaXRlbXNbaV0udHlwZSAhPSBBQ1BJX1RZUEVfU1RSSU5HKQorCQkJcmV0dXJuIC1FUFJPVE87CisKKwkJdmFsW2ldID0gaXRlbXNbaV0uc3RyaW5nLnBvaW50ZXI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgYWNwaV9kZXZfcHJvcF9yZWFkKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwgY29uc3QgY2hhciAqcHJvcG5hbWUsCisJCSAgICAgICBlbnVtIGRldl9wcm9wX3R5cGUgcHJvcHR5cGUsIHZvaWQgKnZhbCwgc2l6ZV90IG52YWwpCit7CisJY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwljb25zdCB1bmlvbiBhY3BpX29iamVjdCAqaXRlbXM7CisJaW50IHJldDsKKworCWlmICh2YWwgJiYgbnZhbCA9PSAxKSB7CisJCXJldCA9IGFjcGlfZGV2X3Byb3BfcmVhZF9zaW5nbGUoYWRldiwgcHJvcG5hbWUsIHByb3B0eXBlLCB2YWwpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gYWNwaV9kZXZfZ2V0X3Byb3BlcnR5X2FycmF5KGFkZXYsIHByb3BuYW1lLCBBQ1BJX1RZUEVfQU5ZLCAmb2JqKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCF2YWwpCisJCXJldHVybiBvYmotPnBhY2thZ2UuY291bnQ7CisJZWxzZSBpZiAobnZhbCA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChudmFsID4gb2JqLT5wYWNrYWdlLmNvdW50KQorCQlyZXR1cm4gLUVPVkVSRkxPVzsKKworCWl0ZW1zID0gb2JqLT5wYWNrYWdlLmVsZW1lbnRzOworCXN3aXRjaCAocHJvcHR5cGUpIHsKKwljYXNlIERFVl9QUk9QX1U4OgorCQlyZXQgPSBhY3BpX2NvcHlfcHJvcGVydHlfYXJyYXlfdTgoaXRlbXMsICh1OCAqKXZhbCwgbnZhbCk7CisJCWJyZWFrOworCWNhc2UgREVWX1BST1BfVTE2OgorCQlyZXQgPSBhY3BpX2NvcHlfcHJvcGVydHlfYXJyYXlfdTE2KGl0ZW1zLCAodTE2ICopdmFsLCBudmFsKTsKKwkJYnJlYWs7CisJY2FzZSBERVZfUFJPUF9VMzI6CisJCXJldCA9IGFjcGlfY29weV9wcm9wZXJ0eV9hcnJheV91MzIoaXRlbXMsICh1MzIgKil2YWwsIG52YWwpOworCQlicmVhazsKKwljYXNlIERFVl9QUk9QX1U2NDoKKwkJcmV0ID0gYWNwaV9jb3B5X3Byb3BlcnR5X2FycmF5X3U2NChpdGVtcywgKHU2NCAqKXZhbCwgbnZhbCk7CisJCWJyZWFrOworCWNhc2UgREVWX1BST1BfU1RSSU5HOgorCQlyZXQgPSBhY3BpX2NvcHlfcHJvcGVydHlfYXJyYXlfc3RyaW5nKGl0ZW1zLCAoY2hhciAqKil2YWwsIG52YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IDA0NzZlOTAuLjE2OTE0Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtMzYsNiArMzYsOCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqZHVtbXlfaGlkID0gImRldmljZSI7CiAKK3N0YXRpYyBMSVNUX0hFQUQoYWNwaV9kZXBfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGFjcGlfZGVwX2xpc3RfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKGFjcGlfYnVzX2lkX2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChhY3BpX3NjYW5fbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKGFjcGlfc2Nhbl9oYW5kbGVyc19saXN0KTsKQEAgLTQzLDYgKzQ1LDEyIEBACiBMSVNUX0hFQUQoYWNwaV93YWtldXBfZGV2aWNlX2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChhY3BpX2hwX2NvbnRleHRfbG9jayk7CiAKK3N0cnVjdCBhY3BpX2RlcF9kYXRhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJYWNwaV9oYW5kbGUgbWFzdGVyOworCWFjcGlfaGFuZGxlIHNsYXZlOworfTsKKwogc3RydWN0IGFjcGlfZGV2aWNlX2J1c19pZHsKIAljaGFyIGJ1c19pZFsxNV07CiAJdW5zaWduZWQgaW50IGluc3RhbmNlX25vOwpAQCAtMTI0LDE3ICsxMzIsNTYgQEAKIAlpZiAobGlzdF9lbXB0eSgmYWNwaV9kZXYtPnBucC5pZHMpKQogCQlyZXR1cm4gMDsKIAotCWxlbiA9IHNucHJpbnRmKG1vZGFsaWFzLCBzaXplLCAiYWNwaToiKTsKLQlzaXplIC09IGxlbjsKKwkvKgorCSAqIElmIHRoZSBkZXZpY2UgaGFzIFBSUDAwMDEgd2UgZXhwb3NlIERUIGNvbXBhdGlibGUgbW9kYWxpYXMKKwkgKiBpbnN0ZWFkIGluIGZvcm0gb2Ygb2Y6Tm5hbWVUQ2NvbXBhdGlibGUuCisJICovCisJaWYgKGFjcGlfZGV2LT5kYXRhLm9mX2NvbXBhdGlibGUpIHsKKwkJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZiA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIgfTsKKwkJY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKm9mX2NvbXBhdGlibGUsICpvYmo7CisJCWludCBpLCBudmFsOworCQljaGFyICpjOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpZCwgJmFjcGlfZGV2LT5wbnAuaWRzLCBsaXN0KSB7Ci0JCWNvdW50ID0gc25wcmludGYoJm1vZGFsaWFzW2xlbl0sIHNpemUsICIlczoiLCBpZC0+aWQpOwotCQlpZiAoY291bnQgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChjb3VudCA+PSBzaXplKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWxlbiArPSBjb3VudDsKLQkJc2l6ZSAtPSBjb3VudDsKKwkJYWNwaV9nZXRfbmFtZShhY3BpX2Rldi0+aGFuZGxlLCBBQ1BJX1NJTkdMRV9OQU1FLCAmYnVmKTsKKwkJLyogRFQgc3RyaW5ncyBhcmUgYWxsIGluIGxvd2VyIGNhc2UgKi8KKwkJZm9yIChjID0gYnVmLnBvaW50ZXI7ICpjICE9ICdcMCc7IGMrKykKKwkJCSpjID0gdG9sb3dlcigqYyk7CisKKwkJbGVuID0gc25wcmludGYobW9kYWxpYXMsIHNpemUsICJvZjpOJXNUIiwgKGNoYXIgKilidWYucG9pbnRlcik7CisJCUFDUElfRlJFRShidWYucG9pbnRlcik7CisKKwkJb2ZfY29tcGF0aWJsZSA9IGFjcGlfZGV2LT5kYXRhLm9mX2NvbXBhdGlibGU7CisJCWlmIChvZl9jb21wYXRpYmxlLT50eXBlID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJCQludmFsID0gb2ZfY29tcGF0aWJsZS0+cGFja2FnZS5jb3VudDsKKwkJCW9iaiA9IG9mX2NvbXBhdGlibGUtPnBhY2thZ2UuZWxlbWVudHM7CisJCX0gZWxzZSB7IC8qIE11c3QgYmUgQUNQSV9UWVBFX1NUUklORy4gKi8KKwkJCW52YWwgPSAxOworCQkJb2JqID0gb2ZfY29tcGF0aWJsZTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgbnZhbDsgaSsrLCBvYmorKykgeworCQkJY291bnQgPSBzbnByaW50ZigmbW9kYWxpYXNbbGVuXSwgc2l6ZSwgIkMlcyIsCisJCQkJCSBvYmotPnN0cmluZy5wb2ludGVyKTsKKwkJCWlmIChjb3VudCA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY291bnQgPj0gc2l6ZSkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJbGVuICs9IGNvdW50OworCQkJc2l6ZSAtPSBjb3VudDsKKwkJfQorCX0gZWxzZSB7CisJCWxlbiA9IHNucHJpbnRmKG1vZGFsaWFzLCBzaXplLCAiYWNwaToiKTsKKwkJc2l6ZSAtPSBsZW47CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpZCwgJmFjcGlfZGV2LT5wbnAuaWRzLCBsaXN0KSB7CisJCQljb3VudCA9IHNucHJpbnRmKCZtb2RhbGlhc1tsZW5dLCBzaXplLCAiJXM6IiwgaWQtPmlkKTsKKwkJCWlmIChjb3VudCA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY291bnQgPj0gc2l6ZSkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWxlbiArPSBjb3VudDsKKwkJCXNpemUgLT0gY291bnQ7CisJCX0KIAl9CiAKIAltb2RhbGlhc1tsZW5dID0gJ1wwJzsKQEAgLTkwMiw2ICs5NDksNTEgQEAKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9tYXRjaF9kZXZpY2VfaWRzKTsKIAorLyogUGVyZm9ybXMgbWF0Y2ggYWdhaW5zdCBzcGVjaWFsICJQUlAwMDAxIiBzaG9laG9ybiBBQ1BJIElEICovCitzdGF0aWMgYm9vbCBhY3BpX29mX2RyaXZlcl9tYXRjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQljb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCWNvbnN0IHVuaW9uIGFjcGlfb2JqZWN0ICpvZl9jb21wYXRpYmxlLCAqb2JqOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldjsKKwlpbnQgaSwgbnZhbDsKKworCWFkZXYgPSBBQ1BJX0NPTVBBTklPTihkZXYpOworCWlmICghYWRldikKKwkJcmV0dXJuIGZhbHNlOworCisJb2ZfY29tcGF0aWJsZSA9IGFkZXYtPmRhdGEub2ZfY29tcGF0aWJsZTsKKwlpZiAoIWRydi0+b2ZfbWF0Y2hfdGFibGUgfHwgIW9mX2NvbXBhdGlibGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChvZl9jb21wYXRpYmxlLT50eXBlID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJCW52YWwgPSBvZl9jb21wYXRpYmxlLT5wYWNrYWdlLmNvdW50OworCQlvYmogPSBvZl9jb21wYXRpYmxlLT5wYWNrYWdlLmVsZW1lbnRzOworCX0gZWxzZSB7IC8qIE11c3QgYmUgQUNQSV9UWVBFX1NUUklORy4gKi8KKwkJbnZhbCA9IDE7CisJCW9iaiA9IG9mX2NvbXBhdGlibGU7CisJfQorCS8qIE5vdyB3ZSBjYW4gbG9vayBmb3IgdGhlIGRyaXZlciBEVCBjb21wYXRpYmxlIHN0cmluZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnZhbDsgaSsrLCBvYmorKykgeworCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZDsKKworCQlmb3IgKGlkID0gZHJ2LT5vZl9tYXRjaF90YWJsZTsgaWQtPmNvbXBhdGlibGVbMF07IGlkKyspCisJCQlpZiAoIXN0cmNhc2VjbXAob2JqLT5zdHJpbmcucG9pbnRlciwgaWQtPmNvbXBhdGlibGUpKQorCQkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBhY3BpX2RyaXZlcl9tYXRjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlpZiAoIWRydi0+YWNwaV9tYXRjaF90YWJsZSkKKwkJcmV0dXJuIGFjcGlfb2ZfZHJpdmVyX21hdGNoX2RldmljZShkZXYsIGRydik7CisKKwlyZXR1cm4gISFhY3BpX21hdGNoX2RldmljZShkcnYtPmFjcGlfbWF0Y2hfdGFibGUsIGRldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhY3BpX2RyaXZlcl9tYXRjaF9kZXZpY2UpOworCiBzdGF0aWMgdm9pZCBhY3BpX2ZyZWVfcG93ZXJfcmVzb3VyY2VzX2xpc3RzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWludCBpOwpAQCAtOTIyLDYgKzEwMTQsNyBAQAogewogCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSB0b19hY3BpX2RldmljZShkZXYpOwogCisJYWNwaV9mcmVlX3Byb3BlcnRpZXMoYWNwaV9kZXYpOwogCWFjcGlfZnJlZV9wbnBfaWRzKCZhY3BpX2Rldi0+cG5wKTsKIAlhY3BpX2ZyZWVfcG93ZXJfcmVzb3VyY2VzX2xpc3RzKGFjcGlfZGV2KTsKIAlrZnJlZShhY3BpX2Rldik7CkBAIC0xMzA0LDYgKzEzOTcsMjYgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZ2V0X25leHRfY2hpbGQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmNoaWxkKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldiA9IEFDUElfQ09NUEFOSU9OKGRldik7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgKm5leHQ7CisKKwlpZiAoIWFkZXYpCisJCXJldHVybiBOVUxMOworCisJaGVhZCA9ICZhZGV2LT5jaGlsZHJlbjsKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWNoaWxkKQorCQlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgYWNwaV9kZXZpY2UsIG5vZGUpOworCisJbmV4dCA9IGNoaWxkLT5ub2RlLm5leHQ7CisJcmV0dXJuIG5leHQgPT0gaGVhZCA/IE5VTEwgOiBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCBhY3BpX2RldmljZSwgbm9kZSk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIgTWFuYWdlbWVudAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE5MjMsOSArMjAzNiwxMSBAQAogCWRldmljZS0+ZGV2aWNlX3R5cGUgPSB0eXBlOwogCWRldmljZS0+aGFuZGxlID0gaGFuZGxlOwogCWRldmljZS0+cGFyZW50ID0gYWNwaV9idXNfZ2V0X3BhcmVudChoYW5kbGUpOworCWRldmljZS0+Zndub2RlLnR5cGUgPSBGV05PREVfQUNQSTsKIAlhY3BpX3NldF9kZXZpY2Vfc3RhdHVzKGRldmljZSwgc3RhKTsKIAlhY3BpX2RldmljZV9nZXRfYnVzaWQoZGV2aWNlKTsKIAlhY3BpX3NldF9wbnBfaWRzKGhhbmRsZSwgJmRldmljZS0+cG5wLCB0eXBlKTsKKwlhY3BpX2luaXRfcHJvcGVydGllcyhkZXZpY2UpOwogCWFjcGlfYnVzX2dldF9mbGFncyhkZXZpY2UpOwogCWRldmljZS0+ZmxhZ3MubWF0Y2hfZHJpdmVyID0gZmFsc2U7CiAJZGV2aWNlLT5mbGFncy5pbml0aWFsaXplZCA9IHRydWU7CkBAIC0yMDg2LDYgKzIyMDEsNTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX2RlcF9pbml0aWFsaXplKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3QgYWNwaV9kZXBfZGF0YSAqZGVwOworCXN0cnVjdCBhY3BpX2hhbmRsZV9saXN0IGRlcF9kZXZpY2VzOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlpbnQgaTsKKworCWlmICghYWNwaV9oYXNfbWV0aG9kKGFkZXYtPmhhbmRsZSwgIl9ERVAiKSkKKwkJcmV0dXJuOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9yZWZlcmVuY2UoYWRldi0+aGFuZGxlLCAiX0RFUCIsIE5VTEwsCisJCQkJCSZkZXBfZGV2aWNlcyk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWRldl9kYmcoJmFkZXYtPmRldiwgIkZhaWxlZCB0byBldmFsdWF0ZSBfREVQLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGVwX2RldmljZXMuY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKKwkJaW50IHNraXA7CisKKwkJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oZGVwX2RldmljZXMuaGFuZGxlc1tpXSwgJmluZm8pOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCWRldl9kYmcoJmFkZXYtPmRldiwgIkVycm9yIHJlYWRpbmcgX0RFUCBkZXZpY2UgaW5mb1xuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNraXAgdGhlIGRlcGVuZGVuY3kgb2YgV2luZG93cyBTeXN0ZW0gUG93ZXIKKwkJICogTWFuYWdlbWVudCBDb250cm9sbGVyCisJCSAqLworCQlza2lwID0gaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCAmJgorCQkJIXN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmcsICJJTlQzMzk2Iik7CisKKwkJa2ZyZWUoaW5mbyk7CisKKwkJaWYgKHNraXApCisJCQljb250aW51ZTsKKworCQlkZXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9kZXBfZGF0YSksIEdGUF9LRVJORUwpOworCQlpZiAoIWRlcCkKKwkJCXJldHVybjsKKworCQlkZXAtPm1hc3RlciA9IGRlcF9kZXZpY2VzLmhhbmRsZXNbaV07CisJCWRlcC0+c2xhdmUgID0gYWRldi0+aGFuZGxlOworCQlhZGV2LT5kZXBfdW5tZXQrKzsKKworCQltdXRleF9sb2NrKCZhY3BpX2RlcF9saXN0X2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZkZXAtPm5vZGUgLCAmYWNwaV9kZXBfbGlzdCk7CisJCW11dGV4X3VubG9jaygmYWNwaV9kZXBfbGlzdF9sb2NrKTsKKwl9Cit9CisKIHN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX2J1c19jaGVja19hZGQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbHZsX25vdF91c2VkLAogCQkJCSAgICAgIHZvaWQgKm5vdF91c2VkLCB2b2lkICoqcmV0dXJuX3ZhbHVlKQogewpAQCAtMjExMiw2ICsyMjgwLDcgQEAKIAkJcmV0dXJuIEFFX0NUUkxfREVQVEg7CiAKIAlhY3BpX3NjYW5faW5pdF9ob3RwbHVnKGRldmljZSk7CisJYWNwaV9kZXZpY2VfZGVwX2luaXRpYWxpemUoZGV2aWNlKTsKIAogIG91dDoKIAlpZiAoISpyZXR1cm5fdmFsdWUpCkBAIC0yMjMyLDYgKzI0MDEsMjkgQEAKIAkJZGV2aWNlLT5oYW5kbGVyLT5ob3RwbHVnLm5vdGlmeV9vbmxpbmUoZGV2aWNlKTsKIH0KIAordm9pZCBhY3BpX3dhbGtfZGVwX2RldmljZV9saXN0KGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXBfZGF0YSAqZGVwLCAqdG1wOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldjsKKworCW11dGV4X2xvY2soJmFjcGlfZGVwX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlcCwgdG1wLCAmYWNwaV9kZXBfbGlzdCwgbm9kZSkgeworCQlpZiAoZGVwLT5tYXN0ZXIgPT0gaGFuZGxlKSB7CisJCQlhY3BpX2J1c19nZXRfZGV2aWNlKGRlcC0+c2xhdmUsICZhZGV2KTsKKwkJCWlmICghYWRldikKKwkJCQljb250aW51ZTsKKworCQkJYWRldi0+ZGVwX3VubWV0LS07CisJCQlpZiAoIWFkZXYtPmRlcF91bm1ldCkKKwkJCQlhY3BpX2J1c19hdHRhY2goYWRldik7CisJCQlsaXN0X2RlbCgmZGVwLT5ub2RlKTsKKwkJCWtmcmVlKGRlcCk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZhY3BpX2RlcF9saXN0X2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV93YWxrX2RlcF9kZXZpY2VfbGlzdCk7CisKIC8qKgogICogYWNwaV9idXNfc2NhbiAtIEFkZCBBQ1BJIGRldmljZSBub2RlIG9iamVjdHMgaW4gYSBnaXZlbiBuYW1lc3BhY2Ugc2NvcGUuCiAgKiBAaGFuZGxlOiBSb290IG9mIHRoZSBuYW1lc3BhY2Ugc2NvcGUgdG8gc2Nhbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKaW5kZXggMDVhMzFiNS4uOGFhOTI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKQEAgLTYzMCw2ICs2MzAsNyBAQAogc3RhdGljIGludCBhY3BpX2ZyZWV6ZV9wcmVwYXJlKHZvaWQpCiB7CiAJYWNwaV9lbmFibGVfYWxsX3dha2V1cF9ncGVzKCk7CisJYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZSgpOwogCWVuYWJsZV9pcnFfd2FrZShhY3BpX2dibF9GQURULnNjaV9pbnRlcnJ1cHQpOwogCXJldHVybiAwOwogfQpAQCAtODI1LDYgKzgyNiw3IEBACiAJLyogUHJlcGFyZSB0byBwb3dlciBvZmYgdGhlIHN5c3RlbSAqLwogCWFjcGlfc2xlZXBfcHJlcGFyZShBQ1BJX1NUQVRFX1M1KTsKIAlhY3BpX2Rpc2FibGVfYWxsX2dwZXMoKTsKKwlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFjcGlfcG93ZXJfb2ZmKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzLmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKaW5kZXggNmQ1YTZjZC4uOTNiODE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwpAQCAtMTkwLDMwICsxOTAsMjQgQEAKIAl9CiB9CiAKLQogaW50IF9faW5pdAotYWNwaV90YWJsZV9wYXJzZV9lbnRyaWVzKGNoYXIgKmlkLAotCQkJICAgICB1bnNpZ25lZCBsb25nIHRhYmxlX3NpemUsCi0JCQkgICAgIGludCBlbnRyeV9pZCwKLQkJCSAgICAgYWNwaV90YmxfZW50cnlfaGFuZGxlciBoYW5kbGVyLAotCQkJICAgICB1bnNpZ25lZCBpbnQgbWF4X2VudHJpZXMpCithY3BpX3BhcnNlX2VudHJpZXMoY2hhciAqaWQsIHVuc2lnbmVkIGxvbmcgdGFibGVfc2l6ZSwKKwkJYWNwaV90YmxfZW50cnlfaGFuZGxlciBoYW5kbGVyLAorCQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlX2hlYWRlciwKKwkJaW50IGVudHJ5X2lkLCB1bnNpZ25lZCBpbnQgbWF4X2VudHJpZXMpCiB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZV9oZWFkZXIgPSBOVUxMOwogCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqZW50cnk7Ci0JdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlpbnQgY291bnQgPSAwOwogCXVuc2lnbmVkIGxvbmcgdGFibGVfZW5kOwotCWFjcGlfc2l6ZSB0Ymxfc2l6ZTsKIAogCWlmIChhY3BpX2Rpc2FibGVkKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghaGFuZGxlcikKKwlpZiAoIWlkIHx8ICFoYW5kbGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChzdHJuY21wKGlkLCBBQ1BJX1NJR19NQURULCA0KSA9PSAwKQotCQlhY3BpX2dldF90YWJsZV93aXRoX3NpemUoaWQsIGFjcGlfYXBpY19pbnN0YW5jZSwgJnRhYmxlX2hlYWRlciwgJnRibF9zaXplKTsKLQllbHNlCi0JCWFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShpZCwgMCwgJnRhYmxlX2hlYWRlciwgJnRibF9zaXplKTsKKwlpZiAoIXRhYmxlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCF0YWJsZV9oZWFkZXIpIHsKIAkJcHJfd2FybigiJTQuNHMgbm90IHByZXNlbnRcbiIsIGlkKTsKQEAgLTIzMCw5ICsyMjQsMTIgQEAKIAl3aGlsZSAoKCh1bnNpZ25lZCBsb25nKWVudHJ5KSArIHNpemVvZihzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIpIDwKIAkgICAgICAgdGFibGVfZW5kKSB7CiAJCWlmIChlbnRyeS0+dHlwZSA9PSBlbnRyeV9pZAotCQkgICAgJiYgKCFtYXhfZW50cmllcyB8fCBjb3VudCsrIDwgbWF4X2VudHJpZXMpKQorCQkgICAgJiYgKCFtYXhfZW50cmllcyB8fCBjb3VudCA8IG1heF9lbnRyaWVzKSkgewogCQkJaWYgKGhhbmRsZXIoZW50cnksIHRhYmxlX2VuZCkpCi0JCQkJZ290byBlcnI7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWNvdW50Kys7CisJCX0KIAogCQkvKgogCQkgKiBJZiBlbnRyeS0+bGVuZ3RoIGlzIDAsIGJyZWFrIGZyb20gdGhpcyBsb29wIHRvIGF2b2lkCkBAIC0yNDAsMjIgKzIzNyw1MyBAQAogCQkgKi8KIAkJaWYgKGVudHJ5LT5sZW5ndGggPT0gMCkgewogCQkJcHJfZXJyKCJbJTQuNHM6MHglMDJ4XSBJbnZhbGlkIHplcm8gbGVuZ3RoXG4iLCBpZCwgZW50cnlfaWQpOwotCQkJZ290byBlcnI7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWVudHJ5ID0gKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqKQogCQkgICAgKCh1bnNpZ25lZCBsb25nKWVudHJ5ICsgZW50cnktPmxlbmd0aCk7CiAJfQorCiAJaWYgKG1heF9lbnRyaWVzICYmIGNvdW50ID4gbWF4X2VudHJpZXMpIHsKIAkJcHJfd2FybigiWyU0LjRzOjB4JTAyeF0gaWdub3JlZCAlaSBlbnRyaWVzIG9mICVpIGZvdW5kXG4iLAogCQkJaWQsIGVudHJ5X2lkLCBjb3VudCAtIG1heF9lbnRyaWVzLCBjb3VudCk7CiAJfQogCisJcmV0dXJuIGNvdW50OworfQorCitpbnQgX19pbml0CithY3BpX3RhYmxlX3BhcnNlX2VudHJpZXMoY2hhciAqaWQsCisJCQkgdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplLAorCQkJIGludCBlbnRyeV9pZCwKKwkJCSBhY3BpX3RibF9lbnRyeV9oYW5kbGVyIGhhbmRsZXIsCisJCQkgdW5zaWduZWQgaW50IG1heF9lbnRyaWVzKQoreworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGVfaGVhZGVyID0gTlVMTDsKKwlhY3BpX3NpemUgdGJsX3NpemU7CisJaW50IGNvdW50OworCXUzMiBpbnN0YW5jZSA9IDA7CisKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWlkIHx8ICFoYW5kbGVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghc3RybmNtcChpZCwgQUNQSV9TSUdfTUFEVCwgNCkpCisJCWluc3RhbmNlID0gYWNwaV9hcGljX2luc3RhbmNlOworCisJYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplKGlkLCBpbnN0YW5jZSwgJnRhYmxlX2hlYWRlciwgJnRibF9zaXplKTsKKwlpZiAoIXRhYmxlX2hlYWRlcikgeworCQlwcl93YXJuKCIlNC40cyBub3QgcHJlc2VudFxuIiwgaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljb3VudCA9IGFjcGlfcGFyc2VfZW50cmllcyhpZCwgdGFibGVfc2l6ZSwgaGFuZGxlciwgdGFibGVfaGVhZGVyLAorCQkJZW50cnlfaWQsIG1heF9lbnRyaWVzKTsKKwogCWVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KChjaGFyICopdGFibGVfaGVhZGVyLCB0Ymxfc2l6ZSk7CiAJcmV0dXJuIGNvdW50OwotZXJyOgotCWVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KChjaGFyICopdGFibGVfaGVhZGVyLCB0Ymxfc2l6ZSk7Ci0JcmV0dXJuIC1FSU5WQUw7CiB9CiAKIGludCBfX2luaXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlscy5jIGIvZHJpdmVycy9hY3BpL3V0aWxzLmMKaW5kZXggMzcxYWMxMi4uY2Q0OWEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxzLmMKQEAgLTEzNiw4ICsxMzYsNyBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSAnQic6CiAJCQkJc2l6ZV9yZXF1aXJlZCArPQotCQkJCSAgICBzaXplb2YodTggKikgKwotCQkJCSAgICAoZWxlbWVudC0+YnVmZmVyLmxlbmd0aCAqIHNpemVvZih1OCkpOworCQkJCSAgICBzaXplb2YodTggKikgKyBlbGVtZW50LT5idWZmZXIubGVuZ3RoOwogCQkJCXRhaWxfb2Zmc2V0ICs9IHNpemVvZih1OCAqKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CkBAIC0yNTUsNyArMjU0LDcgQEAKIAkJCQltZW1jcHkodGFpbCwgZWxlbWVudC0+YnVmZmVyLnBvaW50ZXIsCiAJCQkJICAgICAgIGVsZW1lbnQtPmJ1ZmZlci5sZW5ndGgpOwogCQkJCWhlYWQgKz0gc2l6ZW9mKHU4ICopOwotCQkJCXRhaWwgKz0gZWxlbWVudC0+YnVmZmVyLmxlbmd0aCAqIHNpemVvZih1OCk7CisJCQkJdGFpbCArPSBlbGVtZW50LT5idWZmZXIubGVuZ3RoOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KQEAgLTM0NywyMiArMzQ2LDE2IEBACiAJcGFja2FnZSA9IGJ1ZmZlci5wb2ludGVyOwogCiAJaWYgKChidWZmZXIubGVuZ3RoID09IDApIHx8ICFwYWNrYWdlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIk5vIHJldHVybiBvYmplY3QgKGxlbiAlWCBwdHIgJXApXG4iLAotCQkJICAgICh1bnNpZ25lZClidWZmZXIubGVuZ3RoLCBwYWNrYWdlKTsKIAkJc3RhdHVzID0gQUVfQkFEX0RBVEE7CiAJCWFjcGlfdXRpbF9ldmFsX2Vycm9yKGhhbmRsZSwgcGF0aG5hbWUsIHN0YXR1cyk7CiAJCWdvdG8gZW5kOwogCX0KIAlpZiAocGFja2FnZS0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJFeHBlY3RpbmcgYSBbUGFja2FnZV0sIGZvdW5kIHR5cGUgJVhcbiIsCi0JCQkgICAgcGFja2FnZS0+dHlwZSk7CiAJCXN0YXR1cyA9IEFFX0JBRF9EQVRBOwogCQlhY3BpX3V0aWxfZXZhbF9lcnJvcihoYW5kbGUsIHBhdGhuYW1lLCBzdGF0dXMpOwogCQlnb3RvIGVuZDsKIAl9CiAJaWYgKCFwYWNrYWdlLT5wYWNrYWdlLmNvdW50KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIltQYWNrYWdlXSBoYXMgemVybyBlbGVtZW50cyAoJXApXG4iLAotCQkJICAgIHBhY2thZ2UpOwogCQlzdGF0dXMgPSBBRV9CQURfREFUQTsKIAkJYWNwaV91dGlsX2V2YWxfZXJyb3IoaGFuZGxlLCBwYXRobmFtZSwgc3RhdHVzKTsKIAkJZ290byBlbmQ7CkBAIC0zODEsMTcgKzM3NCwxMyBAQAogCiAJCWlmIChlbGVtZW50LT50eXBlICE9IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKIAkJCXN0YXR1cyA9IEFFX0JBRF9EQVRBOwotCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAotCQkJCSAgICAiRXhwZWN0aW5nIGEgW1JlZmVyZW5jZV0gcGFja2FnZSBlbGVtZW50LCBmb3VuZCB0eXBlICVYXG4iLAotCQkJCSAgICBlbGVtZW50LT50eXBlKTsKIAkJCWFjcGlfdXRpbF9ldmFsX2Vycm9yKGhhbmRsZSwgcGF0aG5hbWUsIHN0YXR1cyk7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmICghZWxlbWVudC0+cmVmZXJlbmNlLmhhbmRsZSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkludmFsaWQgcmVmZXJlbmNlIGluIgotCQkJICAgICAgICIgcGFja2FnZSAlc1xuIiwgcGF0aG5hbWUpOwogCQkJc3RhdHVzID0gQUVfTlVMTF9FTlRSWTsKKwkJCWFjcGlfdXRpbF9ldmFsX2Vycm9yKGhhbmRsZSwgcGF0aG5hbWUsIHN0YXR1cyk7CiAJCQlicmVhazsKIAkJfQogCQkvKiBHZXQgdGhlICBhY3BpX2hhbmRsZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggODA3YTg4YS4uMWVhYWRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTE1NSw2ICsxNTUsNyBAQAogCXU4IGRvc19zZXR0aW5nOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2VudW1lcmF0ZWRfZGV2aWNlICphdHRhY2hlZF9hcnJheTsKIAl1OCBhdHRhY2hlZF9jb3VudDsKKwl1OCBjaGlsZF9jb3VudDsKIAlzdHJ1Y3QgYWNwaV92aWRlb19idXNfY2FwIGNhcDsKIAlzdHJ1Y3QgYWNwaV92aWRlb19idXNfZmxhZ3MgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCB2aWRlb19kZXZpY2VfbGlzdDsKQEAgLTExNTksMTIgKzExNjAsMTcgQEAKIAlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gZGV2aWNlLT52aWRlbzsKIAlpbnQgaTsKIAotCS8qIElmIHdlIGhhdmUgYSBicm9rZW4gX0RPRCwgbm8gbmVlZCB0byB0ZXN0ICovCi0JaWYgKCF2aWRlby0+YXR0YWNoZWRfY291bnQpCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgYnJva2VuIF9ET0Qgb3Igd2UgaGF2ZSBtb3JlIHRoYW4gOCBvdXRwdXQgZGV2aWNlcworCSAqIHVuZGVyIHRoZSBncmFwaGljcyBjb250cm9sbGVyIG5vZGUgdGhhdCB3ZSBjYW4ndCBwcm9wZXIgZGVhbCB3aXRoCisJICogaW4gdGhlIG9wZXJhdGlvbiByZWdpb24gY29kZSBjdXJyZW50bHksIG5vIG5lZWQgdG8gdGVzdC4KKwkgKi8KKwlpZiAoIXZpZGVvLT5hdHRhY2hlZF9jb3VudCB8fCB2aWRlby0+Y2hpbGRfY291bnQgPiA4KQogCQlyZXR1cm4gdHJ1ZTsKIAogCWZvciAoaSA9IDA7IGkgPCB2aWRlby0+YXR0YWNoZWRfY291bnQ7IGkrKykgewotCQlpZiAodmlkZW8tPmF0dGFjaGVkX2FycmF5W2ldLmJpbmRfaW5mbyA9PSBkZXZpY2UpCisJCWlmICgodmlkZW8tPmF0dGFjaGVkX2FycmF5W2ldLnZhbHVlLmludF92YWwgJiAweGZmZikgPT0KKwkJICAgIChkZXZpY2UtPmRldmljZV9pZCAmIDB4ZmZmKSkKIAkJCXJldHVybiB0cnVlOwogCX0KIApAQCAtMTQxMiw2ICsxNDE4LDcgQEAKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAiQ2FuJ3QgYXR0YWNoIGRldmljZVxuIik7CiAJCQlicmVhazsKIAkJfQorCQl2aWRlby0+Y2hpbGRfY291bnQrKzsKIAl9CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTE2ODAsNiArMTY4NywxOSBAQAogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDcmVhdGUgc3lzZnMgbGlua1xuIik7CiB9CiAKK3N0YXRpYyB2b2lkIGFjcGlfdmlkZW9fcnVuX2JjbF9mb3Jfb3NpKHN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW8pCit7CisJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXY7CisJdW5pb24gYWNwaV9vYmplY3QgKmxldmVsczsKKworCW11dGV4X2xvY2soJnZpZGVvLT5kZXZpY2VfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnZpZGVvLT52aWRlb19kZXZpY2VfbGlzdCwgZW50cnkpIHsKKwkJaWYgKCFhY3BpX3ZpZGVvX2RldmljZV9sY2RfcXVlcnlfbGV2ZWxzKGRldiwgJmxldmVscykpCisJCQlrZnJlZShsZXZlbHMpOworCX0KKwltdXRleF91bmxvY2soJnZpZGVvLT5kZXZpY2VfbGlzdF9sb2NrKTsKK30KKwogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19yZWdpc3Rlcl9iYWNrbGlnaHQoc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbykKIHsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldjsKQEAgLTE2ODcsNiArMTcwNyw4IEBACiAJaWYgKHZpZGVvLT5iYWNrbGlnaHRfcmVnaXN0ZXJlZCkKIAkJcmV0dXJuIDA7CiAKKwlhY3BpX3ZpZGVvX3J1bl9iY2xfZm9yX29zaSh2aWRlbyk7CisKIAlpZiAoIWFjcGlfdmlkZW9fdmVyaWZ5X2JhY2tsaWdodF9zdXBwb3J0KCkpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvS2NvbmZpZyBiL2RyaXZlcnMvYW1iYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNWM5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FtYmEvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACitjb25maWcgQVJNX0FNQkEKKwlib29sCisKK2lmIEFSTV9BTUJBCisKK2NvbmZpZyBURUdSQV9BSEIKKwlib29sICJFbmFibGUgQUhCIGRyaXZlciBmb3IgTlZJRElBIFRlZ3JhIFNvQ3MiCisJZGVmYXVsdCB5IGlmIEFSQ0hfVEVHUkEKKwloZWxwCisJICBBZGRzIEFIQiBjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkgZm9yIE5WSURJQSBUZWdyYSBTb0NzLAorCSAgd2hpY2ggY29udHJvbHMgQUhCIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gYW5kIHNvbWUgcGVyZm9ybWFuY2UKKwkgIHBhcmFtZXRlcnMgKHByaW9yaXR5LCBwcmVmZXRjaCBzaXplKS4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW1iYS9idXMuYyBiL2RyaXZlcnMvYW1iYS9idXMuYwppbmRleCA0N2JiZGMxLi45NzNhMzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FtYmEvYnVzLmMKKysrIGIvZHJpdmVycy9hbWJhL2J1cy5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAkudGhhdwkJPSBwbV9nZW5lcmljX3RoYXcsCiAJLnBvd2Vyb2ZmCT0gcG1fZ2VuZXJpY19wb3dlcm9mZiwKIAkucmVzdG9yZQk9IHBtX2dlbmVyaWNfcmVzdG9yZSwKLQlTRVRfUE1fUlVOVElNRV9QTV9PUFMoCisJU0VUX1JVTlRJTUVfUE1fT1BTKAogCQlhbWJhX3BtX3J1bnRpbWVfc3VzcGVuZCwKIAkJYW1iYV9wbV9ydW50aW1lX3Jlc3VtZSwKIAkJTlVMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvS2NvbmZpZyBiL2RyaXZlcnMvYXRhL0tjb25maWcKaW5kZXggY2Q0Y2NjYi4uYTNhMTM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvS2NvbmZpZworKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCkBAIC02MSw3ICs2MSw3IEBACiAKIGNvbmZpZyBTQVRBX1pQT0RECiAJYm9vbCAiU0FUQSBaZXJvIFBvd2VyIE9wdGljYWwgRGlzYyBEcml2ZSAoWlBPREQpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBVEFfQUNQSSAmJiBQTV9SVU5USU1FCisJZGVwZW5kcyBvbiBBVEFfQUNQSSAmJiBQTQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgU0FUQSBaZXJvIFBvd2VyIE9wdGljYWwgRGlzYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IGU0NWY4MzcuLjQ5ZjFlNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTMyMSw2ICszMjEsOSBAQAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4OGM4NyksIGJvYXJkX2FoY2kgfSwgLyogOSBTZXJpZXMgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4OGM4ZSksIGJvYXJkX2FoY2kgfSwgLyogOSBTZXJpZXMgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4OGM4ZiksIGJvYXJkX2FoY2kgfSwgLyogOSBTZXJpZXMgUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4OWQwMyksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1MUCBBSENJICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHg5ZDA1KSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUxQIFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDlkMDcpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtTFAgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4YTEwMyksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1IIEFIQ0kgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExMDMpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtSCBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTA1KSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUggUkFJRCAqLwpAQCAtNDkyLDYgKzQ5NSw3IEBACiAJICogZW5hYmxlZC4gIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA3MzEKIAkgKi8KIAl7IFBDSV9WREVWSUNFKFNBTVNVTkcsIDB4MTYwMCksIGJvYXJkX2FoY2lfbm9tc2kgfSwKKwl7IFBDSV9WREVWSUNFKFNBTVNVTkcsIDB4YTgwMCksIGJvYXJkX2FoY2lfbm9tc2kgfSwKIAogCS8qIEVubW90dXMgKi8KIAl7IFBDSV9ERVZJQ0UoMHgxYzQ0LCAweDgwMDApLCBib2FyZF9haGNpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCAwNTg2ZjY2Li5kZDQ1YzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKQEAgLTExNjQsNyArMTE2NCw3IEBACiAKIAkJZGVwdGggPSBtaW4oc2Rldi0+aG9zdC0+Y2FuX3F1ZXVlLCBhdGFfaWRfcXVldWVfZGVwdGgoZGV2LT5pZCkpOwogCQlkZXB0aCA9IG1pbihBVEFfTUFYX1FVRVVFIC0gMSwgZGVwdGgpOwotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfU0lNUExFX1RBRywgZGVwdGgpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBkZXB0aCk7CiAJfQogCiAJYmxrX3F1ZXVlX2ZsdXNoX3F1ZXVlYWJsZShxLCBmYWxzZSk7CkBAIC0xMjQzLDIxICsxMjQzLDE3IEBACiAgKglAYXA6IEFUQSBwb3J0IHRvIHdoaWNoIHRoZSBkZXZpY2UgY2hhbmdlIHRoZSBxdWV1ZSBkZXB0aAogICoJQHNkZXY6IFNDU0kgZGV2aWNlIHRvIGNvbmZpZ3VyZSBxdWV1ZSBkZXB0aCBmb3IKICAqCUBxdWV1ZV9kZXB0aDogbmV3IHF1ZXVlIGRlcHRoCi0gKglAcmVhc29uOiBjYWxsaW5nIGNvbnRleHQKICAqCiAgKglsaWJzYXMgYW5kIGxpYmF0YSBoYXZlIGRpZmZlcmVudCBhcHByb2FjaGVzIGZvciBhc3NvY2lhdGluZyBhIHNkZXYgdG8KICAqCWl0cyBhdGFfcG9ydC4KICAqCiAgKi8KIGludCBfX2F0YV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJICAgICBpbnQgcXVldWVfZGVwdGgsIGludCByZWFzb24pCisJCQkgICAgIGludCBxdWV1ZV9kZXB0aCkKIHsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCWlmIChxdWV1ZV9kZXB0aCA8IDEgfHwgcXVldWVfZGVwdGggPT0gc2Rldi0+cXVldWVfZGVwdGgpCiAJCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKIApAQCAtMTI4MiwxNSArMTI3OCwxMyBAQAogCWlmIChzZGV2LT5xdWV1ZV9kZXB0aCA9PSBxdWV1ZV9kZXB0aCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfU0lNUExFX1RBRywgcXVldWVfZGVwdGgpOwotCXJldHVybiBxdWV1ZV9kZXB0aDsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcXVldWVfZGVwdGgpOwogfQogCiAvKioKICAqCWF0YV9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIFNDU0kgY2FsbGJhY2sgZm9yIHF1ZXVlIGRlcHRoIGNvbmZpZwogICoJQHNkZXY6IFNDU0kgZGV2aWNlIHRvIGNvbmZpZ3VyZSBxdWV1ZSBkZXB0aCBmb3IKICAqCUBxdWV1ZV9kZXB0aDogbmV3IHF1ZXVlIGRlcHRoCi0gKglAcmVhc29uOiBjYWxsaW5nIGNvbnRleHQKICAqCiAgKglUaGlzIGlzIGxpYmF0YSBzdGFuZGFyZCBob3N0dC0+Y2hhbmdlX3F1ZXVlX2RlcHRoIGNhbGxiYWNrLgogICoJU0NTSSB3aWxsIGNhbGwgaW50byB0aGlzIGNhbGxiYWNrIHdoZW4gdXNlciB0cmllcyB0byBzZXQgcXVldWUKQEAgLTEzMDIsMTIgKzEyOTYsMTEgQEAKICAqCVJFVFVSTlM6CiAgKglOZXdseSBjb25maWd1cmVkIHF1ZXVlIGRlcHRoLgogICovCi1pbnQgYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHF1ZXVlX2RlcHRoLAotCQkJCWludCByZWFzb24pCitpbnQgYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHF1ZXVlX2RlcHRoKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhdGFfc2hvc3RfdG9fcG9ydChzZGV2LT5ob3N0KTsKIAotCXJldHVybiBfX2F0YV9jaGFuZ2VfcXVldWVfZGVwdGgoYXAsIHNkZXYsIHF1ZXVlX2RlcHRoLCByZWFzb24pOworCXJldHVybiBfX2F0YV9jaGFuZ2VfcXVldWVfZGVwdGgoYXAsIHNkZXYsIHF1ZXVlX2RlcHRoKTsKIH0KIAogLyoqCkBAIC0zNTcwLDcgKzM1NjMsNyBAQAogCQlhdGFfc2NzaV9yYnVmX2ZpbGwoJmFyZ3MsIGF0YV9zY3Npb3BfcmVhZF9jYXApOwogCQlicmVhazsKIAotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKIAkJaWYgKChzY3NpY21kWzFdICYgMHgxZikgPT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpCiAJCQlhdGFfc2NzaV9yYnVmX2ZpbGwoJmFyZ3MsIGF0YV9zY3Npb3BfcmVhZF9jYXApOwogCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwppbmRleCAwN2JjN2U0Li42NTA3MTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJaG9zdF9wcml2LT5jc3JfYmFzZSA9IGNzcl9iYXNlOwogCiAJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPmRldi5vZl9ub2RlLCAwKTsKLQlpZiAoaXJxIDwgMCkgeworCWlmICghaXJxKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJpbnZhbGlkIGlycSBmcm9tIHBsYXRmb3JtXG4iKTsKIAkJZ290byBlcnJvcl9leGl0X3dpdGhfY2xlYW51cDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX252LmMgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKaW5kZXggY2RmOTlmYS4uMWRiNmY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwpAQCAtMTk1MSw3ICsxOTUxLDcgQEAKIAlhdGFfaWRfY19zdHJpbmcoZGV2LT5pZCwgbW9kZWxfbnVtLCBBVEFfSURfUFJPRCwgc2l6ZW9mKG1vZGVsX251bSkpOwogCiAJaWYgKHN0cm5jbXAobW9kZWxfbnVtLCAiTWF4dG9yIiwgNikgPT0gMCkgewotCQlhdGFfc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgMSwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJCWF0YV9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCAxKTsKIAkJYXRhX2Rldl9ub3RpY2UoZGV2LCAiRGlzYWJsaW5nIFNXTkNRIG1vZGUgKGRlcHRoICV4KVxuIiwKIAkJCSAgICAgICBzZGV2LT5xdWV1ZV9kZXB0aCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL0tjb25maWcgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwppbmRleCBkZjA0MjI3Li45ODUwNGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwpAQCAtMjY3LDE4ICsyNjcsMjQgQEAKIGNvbmZpZyBDTUFfU0laRV9NQllURVMKIAlpbnQgIlNpemUgaW4gTWVnYSBCeXRlcyIKIAlkZXBlbmRzIG9uICFDTUFfU0laRV9TRUxfUEVSQ0VOVEFHRQorCWRlZmF1bHQgMCBpZiBYODYKIAlkZWZhdWx0IDE2CiAJaGVscAogCSAgRGVmaW5lcyB0aGUgc2l6ZSAoaW4gTWlCKSBvZiB0aGUgZGVmYXVsdCBtZW1vcnkgYXJlYSBmb3IgQ29udGlndW91cwotCSAgTWVtb3J5IEFsbG9jYXRvci4KKwkgIE1lbW9yeSBBbGxvY2F0b3IuICBJZiB0aGUgc2l6ZSBvZiAwIGlzIHNlbGVjdGVkLCBDTUEgaXMgZGlzYWJsZWQgYnkKKwkgIGRlZmF1bHQsIGJ1dCBpdCBjYW4gYmUgZW5hYmxlZCBieSBwYXNzaW5nIGNtYT1zaXplW01HXSB0byB0aGUga2VybmVsLgorCiAKIGNvbmZpZyBDTUFfU0laRV9QRVJDRU5UQUdFCiAJaW50ICJQZXJjZW50YWdlIG9mIHRvdGFsIG1lbW9yeSIKIAlkZXBlbmRzIG9uICFDTUFfU0laRV9TRUxfTUJZVEVTCisJZGVmYXVsdCAwIGlmIFg4NgogCWRlZmF1bHQgMTAKIAloZWxwCiAJICBEZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBkZWZhdWx0IG1lbW9yeSBhcmVhIGZvciBDb250aWd1b3VzIE1lbW9yeQogCSAgQWxsb2NhdG9yIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgbWVtb3J5IGluIHRoZSBzeXN0ZW0uCisJICBJZiAwIHBlcmNlbnQgaXMgc2VsZWN0ZWQsIENNQSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgaXQgY2FuIGJlCisJICBlbmFibGVkIGJ5IHBhc3NpbmcgY21hPXNpemVbTUddIHRvIHRoZSBrZXJuZWwuCiAKIGNob2ljZQogCXByb21wdCAiU2VsZWN0ZWQgcmVnaW9uIHNpemUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvTWFrZWZpbGUgYi9kcml2ZXJzL2Jhc2UvTWFrZWZpbGUKaW5kZXggNjkyMmNkNi4uNTNjM2ZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmFzZS9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAkJCSAgIGRyaXZlci5vIGNsYXNzLm8gcGxhdGZvcm0ubyBcCiAJCQkgICBjcHUubyBmaXJtd2FyZS5vIGluaXQubyBtYXAubyBkZXZyZXMubyBcCiAJCQkgICBhdHRyaWJ1dGVfY29udGFpbmVyLm8gdHJhbnNwb3J0X2NsYXNzLm8gXAotCQkJICAgdG9wb2xvZ3kubyBjb250YWluZXIubworCQkJICAgdG9wb2xvZ3kubyBjb250YWluZXIubyBwcm9wZXJ0eS5vCiBvYmotJChDT05GSUdfREVWVE1QRlMpCSs9IGRldnRtcGZzLm8KIG9iai0kKENPTkZJR19ETUFfQ01BKSArPSBkbWEtY29udGlndW91cy5vCiBvYmoteQkJCSs9IHBvd2VyLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL2Nsb2NrX29wcy5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2Nsb2NrX29wcy5jCmluZGV4IDc4MzY5MzAuLmQ2MjY1NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvY2xvY2tfb3BzLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX2Nsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCkBAIC0zNCwxNCArMzUsMjAgQEAKIC8qKgogICogcG1fY2xrX2VuYWJsZSAtIEVuYWJsZSBhIGNsb2NrLCByZXBvcnRpbmcgYW55IGVycm9ycwogICogQGRldjogVGhlIGRldmljZSBmb3IgdGhlIGdpdmVuIGNsb2NrCi0gKiBAY2xrOiBUaGUgY2xvY2sgYmVpbmcgZW5hYmxlZC4KKyAqIEBjZTogUE0gY2xvY2sgZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgY2xvY2suCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fcG1fY2xrX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyBpbmxpbmUgaW50IF9fcG1fY2xrX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbV9jbG9ja19lbnRyeSAqY2UpCiB7Ci0JaW50IHJldCA9IGNsa19lbmFibGUoY2xrKTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKGRldiwgIiVzOiBmYWlsZWQgdG8gZW5hYmxlIGNsayAlcCwgZXJyb3IgJWRcbiIsCi0JCQlfX2Z1bmNfXywgY2xrLCByZXQpOworCWludCByZXQ7CisKKwlpZiAoY2UtPnN0YXR1cyA8IFBDRV9TVEFUVVNfRVJST1IpIHsKKwkJcmV0ID0gY2xrX2VuYWJsZShjZS0+Y2xrKTsKKwkJaWYgKCFyZXQpCisJCQljZS0+c3RhdHVzID0gUENFX1NUQVRVU19FTkFCTEVEOworCQllbHNlCisJCQlkZXZfZXJyKGRldiwgIiVzOiBmYWlsZWQgdG8gZW5hYmxlIGNsayAlcCwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIGNlLT5jbGssIHJldCk7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTUzLDcgKzYwLDggQEAKICAqLwogc3RhdGljIHZvaWQgcG1fY2xrX2FjcXVpcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcG1fY2xvY2tfZW50cnkgKmNlKQogewotCWNlLT5jbGsgPSBjbGtfZ2V0KGRldiwgY2UtPmNvbl9pZCk7CisJaWYgKCFjZS0+Y2xrKQorCQljZS0+Y2xrID0gY2xrX2dldChkZXYsIGNlLT5jb25faWQpOwogCWlmIChJU19FUlIoY2UtPmNsaykpIHsKIAkJY2UtPnN0YXR1cyA9IFBDRV9TVEFUVVNfRVJST1I7CiAJfSBlbHNlIHsKQEAgLTYzLDE1ICs3MSw4IEBACiAJfQogfQogCi0vKioKLSAqIHBtX2Nsa19hZGQgLSBTdGFydCB1c2luZyBhIGRldmljZSBjbG9jayBmb3IgcG93ZXIgbWFuYWdlbWVudC4KLSAqIEBkZXY6IERldmljZSB3aG9zZSBjbG9jayBpcyBnb2luZyB0byBiZSB1c2VkIGZvciBwb3dlciBtYW5hZ2VtZW50LgotICogQGNvbl9pZDogQ29ubmVjdGlvbiBJRCBvZiB0aGUgY2xvY2suCi0gKgotICogQWRkIHRoZSBjbG9jayByZXByZXNlbnRlZCBieSBAY29uX2lkIHRvIHRoZSBsaXN0IG9mIGNsb2NrcyB1c2VkIGZvcgotICogdGhlIHBvd2VyIG1hbmFnZW1lbnQgb2YgQGRldi4KLSAqLwotaW50IHBtX2Nsa19hZGQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCitzdGF0aWMgaW50IF9fcG1fY2xrX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCwKKwkJCXN0cnVjdCBjbGsgKmNsaykKIHsKIAlzdHJ1Y3QgcG1fc3Vic3lzX2RhdGEgKnBzZCA9IGRldl90b19wc2QoZGV2KTsKIAlzdHJ1Y3QgcG1fY2xvY2tfZW50cnkgKmNlOwpAQCAtOTMsNiArOTQsMTIgQEAKIAkJCWtmcmVlKGNlKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CisJfSBlbHNlIHsKKwkJaWYgKElTX0VSUihjZS0+Y2xrKSB8fCAhX19jbGtfZ2V0KGNsaykpIHsKKwkJCWtmcmVlKGNlKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJCWNlLT5jbGsgPSBjbGs7CiAJfQogCiAJcG1fY2xrX2FjcXVpcmUoZGV2LCBjZSk7CkBAIC0xMDQsNiArMTExLDMyIEBACiB9CiAKIC8qKgorICogcG1fY2xrX2FkZCAtIFN0YXJ0IHVzaW5nIGEgZGV2aWNlIGNsb2NrIGZvciBwb3dlciBtYW5hZ2VtZW50LgorICogQGRldjogRGV2aWNlIHdob3NlIGNsb2NrIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHBvd2VyIG1hbmFnZW1lbnQuCisgKiBAY29uX2lkOiBDb25uZWN0aW9uIElEIG9mIHRoZSBjbG9jay4KKyAqCisgKiBBZGQgdGhlIGNsb2NrIHJlcHJlc2VudGVkIGJ5IEBjb25faWQgdG8gdGhlIGxpc3Qgb2YgY2xvY2tzIHVzZWQgZm9yCisgKiB0aGUgcG93ZXIgbWFuYWdlbWVudCBvZiBAZGV2LgorICovCitpbnQgcG1fY2xrX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCkKK3sKKwlyZXR1cm4gX19wbV9jbGtfYWRkKGRldiwgY29uX2lkLCBOVUxMKTsKK30KKworLyoqCisgKiBwbV9jbGtfYWRkX2NsayAtIFN0YXJ0IHVzaW5nIGEgZGV2aWNlIGNsb2NrIGZvciBwb3dlciBtYW5hZ2VtZW50LgorICogQGRldjogRGV2aWNlIHdob3NlIGNsb2NrIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHBvd2VyIG1hbmFnZW1lbnQuCisgKiBAY2xrOiBDbG9jayBwb2ludGVyCisgKgorICogQWRkIHRoZSBjbG9jayB0byB0aGUgbGlzdCBvZiBjbG9ja3MgdXNlZCBmb3IgdGhlIHBvd2VyIG1hbmFnZW1lbnQgb2YgQGRldi4KKyAqIEl0IHdpbGwgaW5jcmVtZW50IHJlZmNvdW50IG9uIGNsb2NrIHBvaW50ZXIsIHVzZSBjbGtfcHV0KCkgb24gaXQgd2hlbiBkb25lLgorICovCitpbnQgcG1fY2xrX2FkZF9jbGsoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIF9fcG1fY2xrX2FkZChkZXYsIE5VTEwsIGNsayk7Cit9CisKKy8qKgogICogX19wbV9jbGtfcmVtb3ZlIC0gRGVzdHJveSBQTSBjbG9jayBlbnRyeS4KICAqIEBjZTogUE0gY2xvY2sgZW50cnkgdG8gZGVzdHJveS4KICAqLwpAQCAtMjIzLDEwICsyNTYsNiBAQAogCX0KIH0KIAotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKLQogLyoqCiAgKiBwbV9jbGtfc3VzcGVuZCAtIERpc2FibGUgY2xvY2tzIGluIGEgZGV2aWNlJ3MgUE0gY2xvY2sgbGlzdC4KICAqIEBkZXY6IERldmljZSB0byBkaXNhYmxlIHRoZSBjbG9ja3MgZm9yLgpAQCAtMjY2LDcgKzI5NSw2IEBACiAJc3RydWN0IHBtX3N1YnN5c19kYXRhICpwc2QgPSBkZXZfdG9fcHNkKGRldik7CiAJc3RydWN0IHBtX2Nsb2NrX2VudHJ5ICpjZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7CiAKIAlkZXZfZGJnKGRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIApAQCAtMjc1LDEzICszMDMsOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBzZC0+bG9jaywgZmxhZ3MpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjZSwgJnBzZC0+Y2xvY2tfbGlzdCwgbm9kZSkgewotCQlpZiAoY2UtPnN0YXR1cyA8IFBDRV9TVEFUVVNfRVJST1IpIHsKLQkJCXJldCA9IF9fcG1fY2xrX2VuYWJsZShkZXYsIGNlLT5jbGspOwotCQkJaWYgKCFyZXQpCi0JCQkJY2UtPnN0YXR1cyA9IFBDRV9TVEFUVVNfRU5BQkxFRDsKLQkJfQotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNlLCAmcHNkLT5jbG9ja19saXN0LCBub2RlKQorCQlfX3BtX2Nsa19lbmFibGUoZGV2LCBjZSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwc2QtPmxvY2ssIGZsYWdzKTsKIApAQCAtMzQ2LDc0ICszNjksNyBAQAogCXJldHVybiAwOwogfQogCi0jZWxzZSAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KLQotI2lmZGVmIENPTkZJR19QTQotCi0vKioKLSAqIHBtX2Nsa19zdXNwZW5kIC0gRGlzYWJsZSBjbG9ja3MgaW4gYSBkZXZpY2UncyBQTSBjbG9jayBsaXN0LgotICogQGRldjogRGV2aWNlIHRvIGRpc2FibGUgdGhlIGNsb2NrcyBmb3IuCi0gKi8KLWludCBwbV9jbGtfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBtX3N1YnN5c19kYXRhICpwc2QgPSBkZXZfdG9fcHNkKGRldik7Ci0Jc3RydWN0IHBtX2Nsb2NrX2VudHJ5ICpjZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZGV2X2RiZyhkZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0KLQkvKiBJZiB0aGVyZSBpcyBubyBkcml2ZXIsIHRoZSBjbG9ja3MgYXJlIGFscmVhZHkgZGlzYWJsZWQuICovCi0JaWYgKCFwc2QgfHwgIWRldi0+ZHJpdmVyKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwc2QtPmxvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjZSwgJnBzZC0+Y2xvY2tfbGlzdCwgbm9kZSkgewotCQlpZiAoY2UtPnN0YXR1cyA8IFBDRV9TVEFUVVNfRVJST1IpIHsKLQkJCWlmIChjZS0+c3RhdHVzID09IFBDRV9TVEFUVVNfRU5BQkxFRCkKLQkJCQljbGtfZGlzYWJsZShjZS0+Y2xrKTsKLQkJCWNlLT5zdGF0dXMgPSBQQ0VfU1RBVFVTX0FDUVVJUkVEOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHNkLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBwbV9jbGtfcmVzdW1lIC0gRW5hYmxlIGNsb2NrcyBpbiBhIGRldmljZSdzIFBNIGNsb2NrIGxpc3QuCi0gKiBAZGV2OiBEZXZpY2UgdG8gZW5hYmxlIHRoZSBjbG9ja3MgZm9yLgotICovCi1pbnQgcG1fY2xrX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBtX3N1YnN5c19kYXRhICpwc2QgPSBkZXZfdG9fcHNkKGRldik7Ci0Jc3RydWN0IHBtX2Nsb2NrX2VudHJ5ICpjZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQlkZXZfZGJnKGRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKLQotCS8qIElmIHRoZXJlIGlzIG5vIGRyaXZlciwgdGhlIGNsb2NrcyBzaG91bGQgcmVtYWluIGRpc2FibGVkLiAqLwotCWlmICghcHNkIHx8ICFkZXYtPmRyaXZlcikKLQkJcmV0dXJuIDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHNkLT5sb2NrLCBmbGFncyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNlLCAmcHNkLT5jbG9ja19saXN0LCBub2RlKSB7Ci0JCWlmIChjZS0+c3RhdHVzIDwgUENFX1NUQVRVU19FUlJPUikgewotCQkJcmV0ID0gX19wbV9jbGtfZW5hYmxlKGRldiwgY2UtPmNsayk7Ci0JCQlpZiAoIXJldCkKLQkJCQljZS0+c3RhdHVzID0gUENFX1NUQVRVU19FTkFCTEVEOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHNkLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19QTSAqLworI2Vsc2UgLyogIUNPTkZJR19QTSAqLwogCiAvKioKICAqIGVuYWJsZV9jbG9jayAtIEVuYWJsZSBhIGRldmljZSBjbG9jay4KQEAgLTQ5Myw3ICs0NDksNyBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogIUNPTkZJR19QTSAqLwogCiAvKioKICAqIHBtX2Nsa19hZGRfbm90aWZpZXIgLSBBZGQgYnVzIHR5cGUgbm90aWZpZXIgZm9yIHBvd2VyIG1hbmFnZW1lbnQgY2xvY2tzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jCmluZGV4IGZiODNkNGEuLjZhMTAzYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fZG9tYWluLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zLmg+CisjaW5jbHVkZSA8bGludXgvcG1fY2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTE1MSw2ICsxNTIsNTkgQEAKIAlnZW5wZC0+Y3B1aWRsZV9kYXRhLT5pZGxlX3N0YXRlLT5leGl0X2xhdGVuY3kgPSB1c2VjczY0OwogfQogCitzdGF0aWMgaW50IGdlbnBkX3Bvd2VyX29uKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqZ2VucGQpCit7CisJa3RpbWVfdCB0aW1lX3N0YXJ0OworCXM2NCBlbGFwc2VkX25zOworCWludCByZXQ7CisKKwlpZiAoIWdlbnBkLT5wb3dlcl9vbikKKwkJcmV0dXJuIDA7CisKKwl0aW1lX3N0YXJ0ID0ga3RpbWVfZ2V0KCk7CisJcmV0ID0gZ2VucGQtPnBvd2VyX29uKGdlbnBkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZWxhcHNlZF9ucyA9IGt0aW1lX3RvX25zKGt0aW1lX3N1YihrdGltZV9nZXQoKSwgdGltZV9zdGFydCkpOworCWlmIChlbGFwc2VkX25zIDw9IGdlbnBkLT5wb3dlcl9vbl9sYXRlbmN5X25zKQorCQlyZXR1cm4gcmV0OworCisJZ2VucGQtPnBvd2VyX29uX2xhdGVuY3lfbnMgPSBlbGFwc2VkX25zOworCWdlbnBkLT5tYXhfb2ZmX3RpbWVfY2hhbmdlZCA9IHRydWU7CisJZ2VucGRfcmVjYWxjX2NwdV9leGl0X2xhdGVuY3koZ2VucGQpOworCXByX3dhcm4oIiVzOiBQb3dlci0lcyBsYXRlbmN5IGV4Y2VlZGVkLCBuZXcgdmFsdWUgJWxsZCBuc1xuIiwKKwkJZ2VucGQtPm5hbWUsICJvbiIsIGVsYXBzZWRfbnMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZW5wZF9wb3dlcl9vZmYoc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCkKK3sKKwlrdGltZV90IHRpbWVfc3RhcnQ7CisJczY0IGVsYXBzZWRfbnM7CisJaW50IHJldDsKKworCWlmICghZ2VucGQtPnBvd2VyX29mZikKKwkJcmV0dXJuIDA7CisKKwl0aW1lX3N0YXJ0ID0ga3RpbWVfZ2V0KCk7CisJcmV0ID0gZ2VucGQtPnBvd2VyX29mZihnZW5wZCk7CisJaWYgKHJldCA9PSAtRUJVU1kpCisJCXJldHVybiByZXQ7CisKKwllbGFwc2VkX25zID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKGt0aW1lX2dldCgpLCB0aW1lX3N0YXJ0KSk7CisJaWYgKGVsYXBzZWRfbnMgPD0gZ2VucGQtPnBvd2VyX29mZl9sYXRlbmN5X25zKQorCQlyZXR1cm4gcmV0OworCisJZ2VucGQtPnBvd2VyX29mZl9sYXRlbmN5X25zID0gZWxhcHNlZF9uczsKKwlnZW5wZC0+bWF4X29mZl90aW1lX2NoYW5nZWQgPSB0cnVlOworCXByX3dhcm4oIiVzOiBQb3dlci0lcyBsYXRlbmN5IGV4Y2VlZGVkLCBuZXcgdmFsdWUgJWxsZCBuc1xuIiwKKwkJZ2VucGQtPm5hbWUsICJvZmYiLCBlbGFwc2VkX25zKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogX19wbV9nZW5wZF9wb3dlcm9uIC0gUmVzdG9yZSBwb3dlciB0byBhIGdpdmVuIFBNIGRvbWFpbiBhbmQgaXRzIG1hc3RlcnMuCiAgKiBAZ2VucGQ6IFBNIGRvbWFpbiB0byBwb3dlciB1cC4KQEAgLTIyMiwyNSArMjc2LDkgQEAKIAkJfQogCX0KIAotCWlmIChnZW5wZC0+cG93ZXJfb24pIHsKLQkJa3RpbWVfdCB0aW1lX3N0YXJ0ID0ga3RpbWVfZ2V0KCk7Ci0JCXM2NCBlbGFwc2VkX25zOwotCi0JCXJldCA9IGdlbnBkLT5wb3dlcl9vbihnZW5wZCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycjsKLQotCQllbGFwc2VkX25zID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKGt0aW1lX2dldCgpLCB0aW1lX3N0YXJ0KSk7Ci0JCWlmIChlbGFwc2VkX25zID4gZ2VucGQtPnBvd2VyX29uX2xhdGVuY3lfbnMpIHsKLQkJCWdlbnBkLT5wb3dlcl9vbl9sYXRlbmN5X25zID0gZWxhcHNlZF9uczsKLQkJCWdlbnBkLT5tYXhfb2ZmX3RpbWVfY2hhbmdlZCA9IHRydWU7Ci0JCQlnZW5wZF9yZWNhbGNfY3B1X2V4aXRfbGF0ZW5jeShnZW5wZCk7Ci0JCQlpZiAoZ2VucGQtPm5hbWUpCi0JCQkJcHJfd2FybmluZygiJXM6IFBvd2VyLW9uIGxhdGVuY3kgZXhjZWVkZWQsICIKLQkJCQkJIm5ldyB2YWx1ZSAlbGxkIG5zXG4iLCBnZW5wZC0+bmFtZSwKLQkJCQkJZWxhcHNlZF9ucyk7Ci0JCX0KLQl9CisJcmV0ID0gZ2VucGRfcG93ZXJfb24oZ2VucGQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOwogCiAgb3V0OgogCWdlbnBkX3NldF9hY3RpdmUoZ2VucGQpOwpAQCAtMjgwLDggKzMxOCw2IEBACiAJcmV0dXJuIGdlbnBkID8gcG1fZ2VucGRfcG93ZXJvbihnZW5wZCkgOiAtRUlOVkFMOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKLQogc3RhdGljIGludCBnZW5wZF9zdGFydF9kZXZfbm9fdGltaW5nKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqZ2VucGQsCiAJCQkJICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC01NDQsMTYgKzU4MCwxMSBAQAogCX0KIAogCWlmIChnZW5wZC0+cG93ZXJfb2ZmKSB7Ci0JCWt0aW1lX3QgdGltZV9zdGFydDsKLQkJczY0IGVsYXBzZWRfbnM7Ci0KIAkJaWYgKGF0b21pY19yZWFkKCZnZW5wZC0+c2RfY291bnQpID4gMCkgewogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQl0aW1lX3N0YXJ0ID0ga3RpbWVfZ2V0KCk7Ci0KIAkJLyoKIAkJICogSWYgc2RfY291bnQgPiAwIGF0IHRoaXMgcG9pbnQsIG9uZSBvZiB0aGUgc3ViZG9tYWlucyBoYXNuJ3QKIAkJICogbWFuYWdlZCB0byBjYWxsIHBtX2dlbnBkX3Bvd2Vyb24oKSBmb3IgdGhlIG1hc3RlciB5ZXQgYWZ0ZXIKQEAgLTU2MiwyMSArNTkzLDExIEBACiAJCSAqIHRoZSBwbV9nZW5wZF9wb3dlcm9uKCkgcmVzdG9yZSBwb3dlciBmb3IgdXMgKHRoaXMgc2hvdWxkbid0CiAJCSAqIGhhcHBlbiB2ZXJ5IG9mdGVuKS4KIAkJICovCi0JCXJldCA9IGdlbnBkLT5wb3dlcl9vZmYoZ2VucGQpOworCQlyZXQgPSBnZW5wZF9wb3dlcl9vZmYoZ2VucGQpOwogCQlpZiAocmV0ID09IC1FQlVTWSkgewogCQkJZ2VucGRfc2V0X2FjdGl2ZShnZW5wZCk7CiAJCQlnb3RvIG91dDsKIAkJfQotCi0JCWVsYXBzZWRfbnMgPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksIHRpbWVfc3RhcnQpKTsKLQkJaWYgKGVsYXBzZWRfbnMgPiBnZW5wZC0+cG93ZXJfb2ZmX2xhdGVuY3lfbnMpIHsKLQkJCWdlbnBkLT5wb3dlcl9vZmZfbGF0ZW5jeV9ucyA9IGVsYXBzZWRfbnM7Ci0JCQlnZW5wZC0+bWF4X29mZl90aW1lX2NoYW5nZWQgPSB0cnVlOwotCQkJaWYgKGdlbnBkLT5uYW1lKQotCQkJCXByX3dhcm5pbmcoIiVzOiBQb3dlci1vZmYgbGF0ZW5jeSBleGNlZWRlZCwgIgotCQkJCQkibmV3IHZhbHVlICVsbGQgbnNcbiIsIGdlbnBkLT5uYW1lLAotCQkJCQllbGFwc2VkX25zKTsKLQkJfQogCX0KIAogCWdlbnBkLT5zdGF0dXMgPSBHUERfU1RBVEVfUE9XRVJfT0ZGOwpAQCAtNzU1LDMzICs3NzYsMTUgQEAKIH0KIGxhdGVfaW5pdGNhbGwoZ2VucGRfcG93ZXJvZmZfdW51c2VkKTsKIAotI2Vsc2UKLQotc3RhdGljIGlubGluZSBpbnQgZ2VucGRfZGV2X3BtX3Fvc19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnB0cikKLXsKLQlyZXR1cm4gTk9USUZZX0RPTkU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ2VucGRfcXVldWVfcG93ZXJfb2ZmX3dvcmsoc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCkge30KLQotc3RhdGljIGlubGluZSB2b2lkIGdlbnBkX3Bvd2VyX29mZl93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykge30KLQotI2RlZmluZSBwbV9nZW5wZF9ydW50aW1lX3N1c3BlbmQJTlVMTAotI2RlZmluZSBwbV9nZW5wZF9ydW50aW1lX3Jlc3VtZQkJTlVMTAotCi0jZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KLQogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogCiAvKioKICAqIHBtX2dlbnBkX3ByZXNlbnQgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gUE0gZG9tYWluIGhhcyBiZWVuIGluaXRpYWxpemVkLgogICogQGdlbnBkOiBQTSBkb21haW4gdG8gY2hlY2suCiAgKi8KLXN0YXRpYyBib29sIHBtX2dlbnBkX3ByZXNlbnQoc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCkKK3N0YXRpYyBib29sIHBtX2dlbnBkX3ByZXNlbnQoY29uc3Qgc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCkKIHsKLQlzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmdwZDsKKwljb25zdCBzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmdwZDsKIAogCWlmIChJU19FUlJfT1JfTlVMTChnZW5wZCkpCiAJCXJldHVybiBmYWxzZTsKQEAgLTgyMiw4ICs4MjUsNyBAQAogCSAgICB8fCBhdG9taWNfcmVhZCgmZ2VucGQtPnNkX2NvdW50KSA+IDApCiAJCXJldHVybjsKIAotCWlmIChnZW5wZC0+cG93ZXJfb2ZmKQotCQlnZW5wZC0+cG93ZXJfb2ZmKGdlbnBkKTsKKwlnZW5wZF9wb3dlcl9vZmYoZ2VucGQpOwogCiAJZ2VucGQtPnN0YXR1cyA9IEdQRF9TVEFURV9QT1dFUl9PRkY7CiAKQEAgLTg1NCw4ICs4NTYsNyBAQAogCQlnZW5wZF9zZF9jb3VudGVyX2luYyhsaW5rLT5tYXN0ZXIpOwogCX0KIAotCWlmIChnZW5wZC0+cG93ZXJfb24pCi0JCWdlbnBkLT5wb3dlcl9vbihnZW5wZCk7CisJZ2VucGRfcG93ZXJfb24oZ2VucGQpOwogCiAJZ2VucGQtPnN0YXR1cyA9IEdQRF9TVEFURV9BQ1RJVkU7CiB9CkBAIC0xMjc3LDggKzEyNzgsNyBAQAogCQkJICogSWYgdGhlIGRvbWFpbiB3YXMgb2ZmIGJlZm9yZSB0aGUgaGliZXJuYXRpb24sIG1ha2UKIAkJCSAqIHN1cmUgaXQgd2lsbCBiZSBvZmYgZ29pbmcgZm9yd2FyZC4KIAkJCSAqLwotCQkJaWYgKGdlbnBkLT5wb3dlcl9vZmYpCi0JCQkJZ2VucGQtPnBvd2VyX29mZihnZW5wZCk7CisJCQlnZW5wZF9wb3dlcl9vZmYoZ2VucGQpOwogCiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTM2NCw3ICsxMzY0LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBtX2dlbnBkX3N5c2NvcmVfcG93ZXJvbik7CiAKLSNlbHNlCisjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKICNkZWZpbmUgcG1fZ2VucGRfcHJlcGFyZQkJTlVMTAogI2RlZmluZSBwbV9nZW5wZF9zdXNwZW5kCQlOVUxMCkBAIC0xOTI5LDYgKzE5MjksMTIgQEAKIAlnZW5wZC0+ZG9tYWluLm9wcy5jb21wbGV0ZSA9IHBtX2dlbnBkX2NvbXBsZXRlOwogCWdlbnBkLT5kZXZfb3BzLnNhdmVfc3RhdGUgPSBwbV9nZW5wZF9kZWZhdWx0X3NhdmVfc3RhdGU7CiAJZ2VucGQtPmRldl9vcHMucmVzdG9yZV9zdGF0ZSA9IHBtX2dlbnBkX2RlZmF1bHRfcmVzdG9yZV9zdGF0ZTsKKworCWlmIChnZW5wZC0+ZmxhZ3MgJiBHRU5QRF9GTEFHX1BNX0NMSykgeworCQlnZW5wZC0+ZGV2X29wcy5zdG9wID0gcG1fY2xrX3N1c3BlbmQ7CisJCWdlbnBkLT5kZXZfb3BzLnN0YXJ0ID0gcG1fY2xrX3Jlc3VtZTsKKwl9CisKIAltdXRleF9sb2NrKCZncGRfbGlzdF9sb2NrKTsKIAlsaXN0X2FkZCgmZ2VucGQtPmdwZF9saXN0X25vZGUsICZncGRfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZncGRfbGlzdF9sb2NrKTsKQEAgLTIyMTYsMTEgKzIyMjIsMTIgQEAKIAl9CiAKIAlkZXYtPnBtX2RvbWFpbi0+ZGV0YWNoID0gZ2VucGRfZGV2X3BtX2RldGFjaDsKKwlwbV9nZW5wZF9wb3dlcm9uKHBkKTsKIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGRfZGV2X3BtX2F0dGFjaCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TX09GICovCiAKIAogLyoqKiAgICAgICAgZGVidWdmcyBzdXBwb3J0ICAgICAgICAqKiovCkBAIC0yMjM2LDEwICsyMjQzLDggQEAKIAogLyoKICAqIFRPRE86IFRoaXMgZnVuY3Rpb24gaXMgYSBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIHJ0cG1fc3RhdHVzX3Nob3cKLSAqIGZyb20gc3lzZnMuYywgYnV0IGRlcGVuZGVuY2llcyBiZXR3ZWVuIFBNX0dFTkVSSUNfRE9NQUlOUyBhbmQgUE1fUlVOVElNRQotICogYXJlIHRvbyBsb29zZSB0byBnZW5lcmFsaXplIGl0LgorICogZnJvbSBzeXNmcy5jLCBzbyBnZW5lcmFsaXplIGl0LgogICovCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIHN0YXRpYyB2b2lkIHJ0cG1fc3RhdHVzX3N0cihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN0YXR1c19sb29rdXBbXSA9IHsKQEAgLTIyNjEsMTIgKzIyNjYsNiBAQAogCiAJc2VxX3B1dHMocywgcCk7CiB9Ci0jZWxzZQotc3RhdGljIHZvaWQgcnRwbV9zdGF0dXNfc3RyKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRldmljZSAqZGV2KQotewotCXNlcV9wdXRzKHMsICJhY3RpdmUiKTsKLX0KLSNlbmRpZgogCiBzdGF0aWMgaW50IHBtX2dlbnBkX3N1bW1hcnlfb25lKHN0cnVjdCBzZXFfZmlsZSAqcywKIAkJc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpncGQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluX2dvdmVybm9yLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluX2dvdmVybm9yLmMKaW5kZXggZDg4YTYyZS4uMmE0MTU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbl9nb3Zlcm5vci5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW5fZ292ZXJub3IuYwpAQCAtMTEsOCArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCi0KIHN0YXRpYyBpbnQgZGV2X3VwZGF0ZV9xb3NfY29uc3RyYWludChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJczY0ICpjb25zdHJhaW50X25zX3AgPSBkYXRhOwpAQCAtMjI3LDE1ICsyMjUsNiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBkZWZhdWx0X3N0b3Bfb2soc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiBmYWxzZTsgfQotCi0jZGVmaW5lIGRlZmF1bHRfcG93ZXJfZG93bl9vawlOVUxMCi0jZGVmaW5lIGFsd2F5c19vbl9wb3dlcl9kb3duX29rCU5VTEwKLQotI2VuZGlmIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLwotCiBzdHJ1Y3QgZGV2X3Bvd2VyX2dvdmVybm9yIHNpbXBsZV9xb3NfZ292ZXJub3IgPSB7CiAJLnN0b3Bfb2sgPSBkZWZhdWx0X3N0b3Bfb2ssCiAJLnBvd2VyX2Rvd25fb2sgPSBkZWZhdWx0X3Bvd2VyX2Rvd25fb2ssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvb3BwLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvb3BwLmMKaW5kZXggMmQxOTVmMy4uZDI0ZGQ2MTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvb3BwLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL29wcC5jCkBAIC04NCw3ICs4NCwxMSBAQAogICoKICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgbWFpbnRhaW5pbmcgdGhlIGxpbmsgdG8gb3BwcyBhdHRhY2hlZCB0bwogICogYSBkZXZpY2UuIFRoaXMgc3RydWN0dXJlIGlzIG5vdCBtZWFudCB0byBiZSBzaGFyZWQgdG8gdXNlcnMgYXMgaXQgaXMKLSAqIG1lYW50IGZvciBib29rIGtlZXBpbmcgYW5kIHByaXZhdGUgdG8gT1BQIGxpYnJhcnkKKyAqIG1lYW50IGZvciBib29rIGtlZXBpbmcgYW5kIHByaXZhdGUgdG8gT1BQIGxpYnJhcnkuCisgKgorICogQmVjYXVzZSB0aGUgb3BwIHN0cnVjdHVyZXMgY2FuIGJlIHVzZWQgZnJvbSBib3RoIHJjdSBhbmQgc3JjdSByZWFkZXJzLCB3ZQorICogbmVlZCB0byB3YWl0IGZvciB0aGUgZ3JhY2UgcGVyaW9kIG9mIGJvdGggb2YgdGhlbSBiZWZvcmUgZnJlZWluZyBhbnkKKyAqIHJlc291cmNlcy4gQW5kIHNvIHdlIGhhdmUgdXNlZCBrZnJlZV9yY3UoKSBmcm9tIHdpdGhpbiBjYWxsX3NyY3UoKSBoYW5kbGVycy4KICAqLwogc3RydWN0IGRldmljZV9vcHAgewogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKQEAgLTM4MiwxMiArMzg2LDM0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfcG1fb3BwX2ZpbmRfZnJlcV9mbG9vcik7CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX29wcCAqYWRkX2RldmljZV9vcHAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfb3BwICpkZXZfb3BwOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhIG5ldyBkZXZpY2UgT1BQIHRhYmxlLiBJbiB0aGUgaW5mcmVxdWVudCBjYXNlIHdoZXJlIGEgbmV3CisJICogZGV2aWNlIGlzIG5lZWRlZCB0byBiZSBhZGRlZCwgd2UgcGF5IHRoaXMgcGVuYWx0eS4KKwkgKi8KKwlkZXZfb3BwID0ga3phbGxvYyhzaXplb2YoKmRldl9vcHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldl9vcHApCisJCXJldHVybiBOVUxMOworCisJZGV2X29wcC0+ZGV2ID0gZGV2OworCXNyY3VfaW5pdF9ub3RpZmllcl9oZWFkKCZkZXZfb3BwLT5zcmN1X2hlYWQpOworCUlOSVRfTElTVF9IRUFEKCZkZXZfb3BwLT5vcHBfbGlzdCk7CisKKwkvKiBTZWN1cmUgdGhlIGRldmljZSBsaXN0IG1vZGlmaWNhdGlvbiAqLworCWxpc3RfYWRkX3JjdSgmZGV2X29wcC0+bm9kZSwgJmRldl9vcHBfbGlzdCk7CisJcmV0dXJuIGRldl9vcHA7Cit9CisKIHN0YXRpYyBpbnQgZGV2X3BtX29wcF9hZGRfZHluYW1pYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgdV92b2x0LCBib29sIGR5bmFtaWMpCiB7CiAJc3RydWN0IGRldmljZV9vcHAgKmRldl9vcHAgPSBOVUxMOwogCXN0cnVjdCBkZXZfcG1fb3BwICpvcHAsICpuZXdfb3BwOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJaW50IHJldDsKIAogCS8qIGFsbG9jYXRlIG5ldyBPUFAgbm9kZSAqLwogCW5ld19vcHAgPSBremFsbG9jKHNpemVvZigqbmV3X29wcCksIEdGUF9LRVJORUwpOwpAQCAtNDAwLDcgKzQyNiw2IEBACiAJbXV0ZXhfbG9jaygmZGV2X29wcF9saXN0X2xvY2spOwogCiAJLyogcG9wdWxhdGUgdGhlIG9wcCB0YWJsZSAqLwotCW5ld19vcHAtPmRldl9vcHAgPSBkZXZfb3BwOwogCW5ld19vcHAtPnJhdGUgPSBmcmVxOwogCW5ld19vcHAtPnVfdm9sdCA9IHVfdm9sdDsKIAluZXdfb3BwLT5hdmFpbGFibGUgPSB0cnVlOwpAQCAtNDA5LDI3ICs0MzQsMTIgQEAKIAkvKiBDaGVjayBmb3IgZXhpc3RpbmcgbGlzdCBmb3IgJ2RldicgKi8KIAlkZXZfb3BwID0gZmluZF9kZXZpY2Vfb3BwKGRldik7CiAJaWYgKElTX0VSUihkZXZfb3BwKSkgewotCQkvKgotCQkgKiBBbGxvY2F0ZSBhIG5ldyBkZXZpY2UgT1BQIHRhYmxlLiBJbiB0aGUgaW5mcmVxdWVudCBjYXNlCi0JCSAqIHdoZXJlIGEgbmV3IGRldmljZSBpcyBuZWVkZWQgdG8gYmUgYWRkZWQsIHdlIHBheSB0aGlzCi0JCSAqIHBlbmFsdHkuCi0JCSAqLwotCQlkZXZfb3BwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldmljZV9vcHApLCBHRlBfS0VSTkVMKTsKKwkJZGV2X29wcCA9IGFkZF9kZXZpY2Vfb3BwKGRldik7CiAJCWlmICghZGV2X29wcCkgewotCQkJbXV0ZXhfdW5sb2NrKCZkZXZfb3BwX2xpc3RfbG9jayk7Ci0JCQlrZnJlZShuZXdfb3BwKTsKLQkJCWRldl93YXJuKGRldiwKLQkJCQkiJXM6IFVuYWJsZSB0byBjcmVhdGUgZGV2aWNlIE9QUCBzdHJ1Y3R1cmVcbiIsCi0JCQkJX19mdW5jX18pOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmcmVlX29wcDsKIAkJfQogCi0JCWRldl9vcHAtPmRldiA9IGRldjsKLQkJc3JjdV9pbml0X25vdGlmaWVyX2hlYWQoJmRldl9vcHAtPnNyY3VfaGVhZCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZXZfb3BwLT5vcHBfbGlzdCk7Ci0KLQkJLyogU2VjdXJlIHRoZSBkZXZpY2UgbGlzdCBtb2RpZmljYXRpb24gKi8KLQkJbGlzdF9hZGRfcmN1KCZkZXZfb3BwLT5ub2RlLCAmZGV2X29wcF9saXN0KTsKIAkJaGVhZCA9ICZkZXZfb3BwLT5vcHBfbGlzdDsKIAkJZ290byBsaXN0X2FkZDsKIAl9CkBAIC00NDgsMTggKzQ1OCwxNyBAQAogCiAJLyogRHVwbGljYXRlIE9QUHMgPyAqLwogCWlmIChuZXdfb3BwLT5yYXRlID09IG9wcC0+cmF0ZSkgewotCQlpbnQgcmV0ID0gb3BwLT5hdmFpbGFibGUgJiYgbmV3X29wcC0+dV92b2x0ID09IG9wcC0+dV92b2x0ID8KKwkJcmV0ID0gb3BwLT5hdmFpbGFibGUgJiYgbmV3X29wcC0+dV92b2x0ID09IG9wcC0+dV92b2x0ID8KIAkJCTAgOiAtRUVYSVNUOwogCiAJCWRldl93YXJuKGRldiwgIiVzOiBkdXBsaWNhdGUgT1BQcyBkZXRlY3RlZC4gRXhpc3Rpbmc6IGZyZXE6ICVsdSwgdm9sdDogJWx1LCBlbmFibGVkOiAlZC4gTmV3OiBmcmVxOiAlbHUsIHZvbHQ6ICVsdSwgZW5hYmxlZDogJWRcbiIsCiAJCQkgX19mdW5jX18sIG9wcC0+cmF0ZSwgb3BwLT51X3ZvbHQsIG9wcC0+YXZhaWxhYmxlLAogCQkJIG5ld19vcHAtPnJhdGUsIG5ld19vcHAtPnVfdm9sdCwgbmV3X29wcC0+YXZhaWxhYmxlKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfb3BwX2xpc3RfbG9jayk7Ci0JCWtmcmVlKG5ld19vcHApOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGZyZWVfb3BwOwogCX0KIAogbGlzdF9hZGQ6CisJbmV3X29wcC0+ZGV2X29wcCA9IGRldl9vcHA7CiAJbGlzdF9hZGRfcmN1KCZuZXdfb3BwLT5ub2RlLCBoZWFkKTsKIAltdXRleF91bmxvY2soJmRldl9vcHBfbGlzdF9sb2NrKTsKIApAQCAtNDY5LDYgKzQ3OCwxMSBAQAogCSAqLwogCXNyY3Vfbm90aWZpZXJfY2FsbF9jaGFpbigmZGV2X29wcC0+c3JjdV9oZWFkLCBPUFBfRVZFTlRfQURELCBuZXdfb3BwKTsKIAlyZXR1cm4gMDsKKworZnJlZV9vcHA6CisJbXV0ZXhfdW5sb2NrKCZkZXZfb3BwX2xpc3RfbG9jayk7CisJa2ZyZWUobmV3X29wcCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC01MTEsMTAgKzUyNSwxMSBAQAogewogCXN0cnVjdCBkZXZpY2Vfb3BwICpkZXZpY2Vfb3BwID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBkZXZpY2Vfb3BwLCByY3VfaGVhZCk7CiAKLQlrZnJlZShkZXZpY2Vfb3BwKTsKKwlrZnJlZV9yY3UoZGV2aWNlX29wcCwgcmN1X2hlYWQpOwogfQogCi12b2lkIF9fZGV2X3BtX29wcF9yZW1vdmUoc3RydWN0IGRldmljZV9vcHAgKmRldl9vcHAsIHN0cnVjdCBkZXZfcG1fb3BwICpvcHApCitzdGF0aWMgdm9pZCBfX2Rldl9wbV9vcHBfcmVtb3ZlKHN0cnVjdCBkZXZpY2Vfb3BwICpkZXZfb3BwLAorCQkJCXN0cnVjdCBkZXZfcG1fb3BwICpvcHApCiB7CiAJLyoKIAkgKiBOb3RpZnkgdGhlIGNoYW5nZXMgaW4gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgb3BlcmFibGUKQEAgLTU5Miw3ICs2MDcsNyBAQAogc3RhdGljIGludCBvcHBfc2V0X2F2YWlsYWJpbGl0eShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSwKIAkJYm9vbCBhdmFpbGFiaWxpdHlfcmVxKQogewotCXN0cnVjdCBkZXZpY2Vfb3BwICp0bXBfZGV2X29wcCwgKmRldl9vcHAgPSBFUlJfUFRSKC1FTk9ERVYpOworCXN0cnVjdCBkZXZpY2Vfb3BwICpkZXZfb3BwOwogCXN0cnVjdCBkZXZfcG1fb3BwICpuZXdfb3BwLCAqdG1wX29wcCwgKm9wcCA9IEVSUl9QVFIoLUVOT0RFVik7CiAJaW50IHIgPSAwOwogCkBAIC02MDYsMTIgKzYyMSw3IEBACiAJbXV0ZXhfbG9jaygmZGV2X29wcF9saXN0X2xvY2spOwogCiAJLyogRmluZCB0aGUgZGV2aWNlX29wcCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX2Rldl9vcHAsICZkZXZfb3BwX2xpc3QsIG5vZGUpIHsKLQkJaWYgKGRldiA9PSB0bXBfZGV2X29wcC0+ZGV2KSB7Ci0JCQlkZXZfb3BwID0gdG1wX2Rldl9vcHA7Ci0JCQlicmVhazsKLQkJfQotCX0KKwlkZXZfb3BwID0gZmluZF9kZXZpY2Vfb3BwKGRldik7CiAJaWYgKElTX0VSUihkZXZfb3BwKSkgewogCQlyID0gUFRSX0VSUihkZXZfb3BwKTsKIAkJZGV2X3dhcm4oZGV2LCAiJXM6IERldmljZSBPUFAgbm90IGZvdW5kICglZClcbiIsIF9fZnVuY19fLCByKTsKQEAgLTc2OCw3ICs3NzgsNyBAQAogICovCiB2b2lkIG9mX2ZyZWVfb3BwX3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGV2aWNlX29wcCAqZGV2X29wcCA9IGZpbmRfZGV2aWNlX29wcChkZXYpOworCXN0cnVjdCBkZXZpY2Vfb3BwICpkZXZfb3BwOwogCXN0cnVjdCBkZXZfcG1fb3BwICpvcHAsICp0bXA7CiAKIAkvKiBDaGVjayBmb3IgZXhpc3RpbmcgbGlzdCBmb3IgJ2RldicgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmgKaW5kZXggYTIxMjIzZC4uYjZiOGEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmgKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmgKQEAgLTksNyArOSw3IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAogc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfZWFybHlfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0yMCw3ICsyMCwyMSBAQAogZXh0ZXJuIHZvaWQgcG1fcnVudGltZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBwbV9ydW50aW1lX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCi0jZWxzZSAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KKy8qCisgKiBzeXNmcy5jCisgKi8KKworZXh0ZXJuIGludCBkcG1fc3lzZnNfYWRkKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBkcG1fc3lzZnNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBycG1fc3lzZnNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHdha2V1cF9zeXNmc19hZGQoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHdha2V1cF9zeXNmc19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fcW9zX3N5c2ZzX2FkZF9yZXN1bWVfbGF0ZW5jeShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcG1fcW9zX3N5c2ZzX3JlbW92ZV9yZXN1bWVfbGF0ZW5jeShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9xb3Nfc3lzZnNfYWRkX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwbV9xb3Nfc3lzZnNfcmVtb3ZlX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKyNlbHNlIC8qIENPTkZJR19QTSAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9lYXJseV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTMwLDcgKzQ0LDE1IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiAKLSNlbmRpZiAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRwbV9zeXNmc19hZGQoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZHBtX3N5c2ZzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcnBtX3N5c2ZzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIGludCB3YWtldXBfc3lzZnNfYWRkKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHdha2V1cF9zeXNmc19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KSB7fQorc3RhdGljIGlubGluZSBpbnQgcG1fcW9zX3N5c2ZzX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9xb3Nfc3lzZnNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikge30KKworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIApAQCAtNzcsMzEgKzk5LDMgQEAKIAlkZXZpY2VfcG1fc2xlZXBfaW5pdChkZXYpOwogCXBtX3J1bnRpbWVfaW5pdChkZXYpOwogfQotCi0jaWZkZWYgQ09ORklHX1BNCi0KLS8qCi0gKiBzeXNmcy5jCi0gKi8KLQotZXh0ZXJuIGludCBkcG1fc3lzZnNfYWRkKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBkcG1fc3lzZnNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBycG1fc3lzZnNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IHdha2V1cF9zeXNmc19hZGQoc3RydWN0IGRldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIHdha2V1cF9zeXNmc19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgcG1fcW9zX3N5c2ZzX2FkZF9yZXN1bWVfbGF0ZW5jeShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgcG1fcW9zX3N5c2ZzX3JlbW92ZV9yZXN1bWVfbGF0ZW5jeShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBwbV9xb3Nfc3lzZnNfYWRkX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBwbV9xb3Nfc3lzZnNfcmVtb3ZlX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLSNlbHNlIC8qIENPTkZJR19QTSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBkcG1fc3lzZnNfYWRkKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGRwbV9zeXNmc19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KSB7fQotc3RhdGljIGlubGluZSB2b2lkIHJwbV9zeXNmc19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KSB7fQotc3RhdGljIGlubGluZSBpbnQgd2FrZXVwX3N5c2ZzX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtldXBfc3lzZnNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikge30KLXN0YXRpYyBpbmxpbmUgaW50IHBtX3Fvc19zeXNmc19hZGQoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcG1fcW9zX3N5c2ZzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Fvcy5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3Fvcy5jCmluZGV4IDM2YjllYjQuLmE4ZmU0YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9xb3MuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcW9zLmMKQEAgLTU5OSw3ICs1OTksNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X3BtX3Fvc19hZGRfYW5jZXN0b3JfcmVxdWVzdCk7CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogc3RhdGljIHZvaWQgX19kZXZfcG1fcW9zX2Ryb3BfdXNlcl9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgZW51bSBkZXZfcG1fcW9zX3JlcV90eXBlIHR5cGUpCiB7CkBAIC04ODAsNyArODc5LDMgQEAKIAltdXRleF91bmxvY2soJmRldl9wbV9xb3NfbXR4KTsKIAlyZXR1cm4gcmV0OwogfQotI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCi1zdGF0aWMgdm9pZCBfX2Rldl9wbV9xb3NfaGlkZV9sYXRlbmN5X2xpbWl0KHN0cnVjdCBkZXZpY2UgKmRldikge30KLXN0YXRpYyB2b2lkIF9fZGV2X3BtX3Fvc19oaWRlX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmRldikge30KLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKaW5kZXggNjdjNzkzOC4uNTA3MGM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC0xMyw0MiArMTMsMzcgQEAKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcnBtLmg+CiAjaW5jbHVkZSAicG93ZXIuaCIKIAotI2RlZmluZSBSUE1fR0VUX0NBTExCQUNLKGRldiwgY2IpCQkJCVwKLSh7CQkJCQkJCQlcCi0JaW50ICgqX19ycG1fY2IpKHN0cnVjdCBkZXZpY2UgKl9fZCk7CQkJXAotCQkJCQkJCQlcCi0JaWYgKGRldi0+cG1fZG9tYWluKQkJCQkJXAotCQlfX3JwbV9jYiA9IGRldi0+cG1fZG9tYWluLT5vcHMuY2I7CQlcCi0JZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0pCQkJXAotCQlfX3JwbV9jYiA9IGRldi0+dHlwZS0+cG0tPmNiOwkJCVwKLQllbHNlIGlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPnBtKQkJCVwKLQkJX19ycG1fY2IgPSBkZXYtPmNsYXNzLT5wbS0+Y2I7CQkJXAotCWVsc2UgaWYgKGRldi0+YnVzICYmIGRldi0+YnVzLT5wbSkJCQlcCi0JCV9fcnBtX2NiID0gZGV2LT5idXMtPnBtLT5jYjsJCQlcCi0JZWxzZQkJCQkJCQlcCi0JCV9fcnBtX2NiID0gTlVMTDsJCQkJXAotCQkJCQkJCQlcCi0JaWYgKCFfX3JwbV9jYiAmJiBkZXYtPmRyaXZlciAmJiBkZXYtPmRyaXZlci0+cG0pCVwKLQkJX19ycG1fY2IgPSBkZXYtPmRyaXZlci0+cG0tPmNiOwkJCVwKLQkJCQkJCQkJXAotCV9fcnBtX2NiOwkJCQkJCVwKLX0pCit0eXBlZGVmIGludCAoKnBtX2NhbGxiYWNrX3QpKHN0cnVjdCBkZXZpY2UgKik7CiAKLXN0YXRpYyBpbnQgKCpycG1fZ2V0X3N1c3BlbmRfY2Ioc3RydWN0IGRldmljZSAqZGV2KSkoc3RydWN0IGRldmljZSAqKQorc3RhdGljIHBtX2NhbGxiYWNrX3QgX19ycG1fZ2V0X2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IGNiX29mZnNldCkKIHsKLQlyZXR1cm4gUlBNX0dFVF9DQUxMQkFDSyhkZXYsIHJ1bnRpbWVfc3VzcGVuZCk7CisJcG1fY2FsbGJhY2tfdCBjYjsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqb3BzOworCisJaWYgKGRldi0+cG1fZG9tYWluKQorCQlvcHMgPSAmZGV2LT5wbV9kb21haW4tPm9wczsKKwllbHNlIGlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkKKwkJb3BzID0gZGV2LT50eXBlLT5wbTsKKwllbHNlIGlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPnBtKQorCQlvcHMgPSBkZXYtPmNsYXNzLT5wbTsKKwllbHNlIGlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0pCisJCW9wcyA9IGRldi0+YnVzLT5wbTsKKwllbHNlCisJCW9wcyA9IE5VTEw7CisKKwlpZiAob3BzKQorCQljYiA9ICoocG1fY2FsbGJhY2tfdCAqKSgodm9pZCAqKW9wcyArIGNiX29mZnNldCk7CisJZWxzZQorCQljYiA9IE5VTEw7CisKKwlpZiAoIWNiICYmIGRldi0+ZHJpdmVyICYmIGRldi0+ZHJpdmVyLT5wbSkKKwkJY2IgPSAqKHBtX2NhbGxiYWNrX3QgKikoKHZvaWQgKilkZXYtPmRyaXZlci0+cG0gKyBjYl9vZmZzZXQpOworCisJcmV0dXJuIGNiOwogfQogCi1zdGF0aWMgaW50ICgqcnBtX2dldF9yZXN1bWVfY2Ioc3RydWN0IGRldmljZSAqZGV2KSkoc3RydWN0IGRldmljZSAqKQotewotCXJldHVybiBSUE1fR0VUX0NBTExCQUNLKGRldiwgcnVudGltZV9yZXN1bWUpOwotfQotCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKLXN0YXRpYyBpbnQgKCpycG1fZ2V0X2lkbGVfY2Ioc3RydWN0IGRldmljZSAqZGV2KSkoc3RydWN0IGRldmljZSAqKQotewotCXJldHVybiBSUE1fR0VUX0NBTExCQUNLKGRldiwgcnVudGltZV9pZGxlKTsKLX0KKyNkZWZpbmUgUlBNX0dFVF9DQUxMQkFDSyhkZXYsIGNhbGxiYWNrKSBcCisJCV9fcnBtX2dldF9jYWxsYmFjayhkZXYsIG9mZnNldG9mKHN0cnVjdCBkZXZfcG1fb3BzLCBjYWxsYmFjaykpCiAKIHN0YXRpYyBpbnQgcnBtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBycG1mbGFncyk7CiBzdGF0aWMgaW50IHJwbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJwbWZsYWdzKTsKQEAgLTM0Nyw3ICszNDIsNyBAQAogCiAJZGV2LT5wb3dlci5pZGxlX25vdGlmaWNhdGlvbiA9IHRydWU7CiAKLQljYWxsYmFjayA9IHJwbV9nZXRfaWRsZV9jYihkZXYpOworCWNhbGxiYWNrID0gUlBNX0dFVF9DQUxMQkFDSyhkZXYsIHJ1bnRpbWVfaWRsZSk7CiAKIAlpZiAoY2FsbGJhY2spCiAJCXJldHZhbCA9IF9fcnBtX2NhbGxiYWNrKGNhbGxiYWNrLCBkZXYpOwpAQCAtNTE3LDcgKzUxMiw3IEBACiAKIAlfX3VwZGF0ZV9ydW50aW1lX3N0YXR1cyhkZXYsIFJQTV9TVVNQRU5ESU5HKTsKIAotCWNhbGxiYWNrID0gcnBtX2dldF9zdXNwZW5kX2NiKGRldik7CisJY2FsbGJhY2sgPSBSUE1fR0VUX0NBTExCQUNLKGRldiwgcnVudGltZV9zdXNwZW5kKTsKIAogCXJldHZhbCA9IHJwbV9jYWxsYmFjayhjYWxsYmFjaywgZGV2KTsKIAlpZiAocmV0dmFsKQpAQCAtNzM3LDcgKzczMiw3IEBACiAKIAlfX3VwZGF0ZV9ydW50aW1lX3N0YXR1cyhkZXYsIFJQTV9SRVNVTUlORyk7CiAKLQljYWxsYmFjayA9IHJwbV9nZXRfcmVzdW1lX2NiKGRldik7CisJY2FsbGJhY2sgPSBSUE1fR0VUX0NBTExCQUNLKGRldiwgcnVudGltZV9yZXN1bWUpOwogCiAJcmV0dmFsID0gcnBtX2NhbGxiYWNrKGNhbGxiYWNrLCBkZXYpOwogCWlmIChyZXR2YWwpIHsKQEAgLTE0MDIsNyArMTM5Nyw2IEBACiAJaWYgKGRldi0+cG93ZXIuaXJxX3NhZmUgJiYgZGV2LT5wYXJlbnQpCiAJCXBtX3J1bnRpbWVfcHV0KGRldi0+cGFyZW50KTsKIH0KLSNlbmRpZgogCiAvKioKICAqIHBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZCAtIEZvcmNlIGEgZGV2aWNlIGludG8gc3VzcGVuZCBzdGF0ZSBpZiBuZWVkZWQuCkBAIC0xNDIyLDE2ICsxNDE2LDEwIEBACiAJaW50IHJldCA9IDA7CiAKIAlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKLQotCS8qCi0JICogTm90ZSB0aGF0IHBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRlZCgpIHJldHVybnMgZmFsc2Ugd2hpbGUKLQkgKiAhQ09ORklHX1BNX1JVTlRJTUUsIHdoaWNoIG1lYW5zIHRoZSBkZXZpY2Ugd2lsbCBiZSBwdXQgaW50byBsb3cKLQkgKiBwb3dlciBzdGF0ZS4KLQkgKi8KIAlpZiAocG1fcnVudGltZV9zdGF0dXNfc3VzcGVuZGVkKGRldikpCiAJCXJldHVybiAwOwogCi0JY2FsbGJhY2sgPSBycG1fZ2V0X3N1c3BlbmRfY2IoZGV2KTsKKwljYWxsYmFjayA9IFJQTV9HRVRfQ0FMTEJBQ0soZGV2LCBydW50aW1lX3N1c3BlbmQpOwogCiAJaWYgKCFjYWxsYmFjaykgewogCQlyZXQgPSAtRU5PU1lTOwpAQCAtMTQ2Nyw3ICsxNDU1LDcgQEAKIAlpbnQgKCpjYWxsYmFjaykoc3RydWN0IGRldmljZSAqKTsKIAlpbnQgcmV0ID0gMDsKIAotCWNhbGxiYWNrID0gcnBtX2dldF9yZXN1bWVfY2IoZGV2KTsKKwljYWxsYmFjayA9IFJQTV9HRVRfQ0FMTEJBQ0soZGV2LCBydW50aW1lX3Jlc3VtZSk7CiAKIAlpZiAoIWNhbGxiYWNrKSB7CiAJCXJldCA9IC1FTk9TWVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3lzZnMuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCmluZGV4IGE5ZDI2ZWQuLmQyYmUzZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCkBAIC05NSw3ICs5NSw2IEBACiBjb25zdCBjaGFyIHBvd2VyX2dyb3VwX25hbWVbXSA9ICJwb3dlciI7CiBFWFBPUlRfU1lNQk9MX0dQTChwb3dlcl9ncm91cF9uYW1lKTsKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiBzdGF0aWMgY29uc3QgY2hhciBjdHJsX2F1dG9bXSA9ICJhdXRvIjsKIHN0YXRpYyBjb25zdCBjaGFyIGN0cmxfb25bXSA9ICJvbiI7CiAKQEAgLTMzMCw3ICszMjksNiBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIocG1fcW9zX3JlbW90ZV93YWtldXAsIDA2NDQsCiAJCSAgIHBtX3Fvc19yZW1vdGVfd2FrZXVwX3Nob3csIHBtX3Fvc19yZW1vdGVfd2FrZXVwX3N0b3JlKTsKLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgY29uc3QgY2hhciBfZW5hYmxlZFtdID0gImVuYWJsZWQiOwpAQCAtNTMxLDggKzUyOSw2IEBACiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKICNpZmRlZiBDT05GSUdfUE1fQURWQU5DRURfREVCVUcKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQotCiBzdGF0aWMgc3NpemVfdCBydHBtX3VzYWdlY291bnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC01NjIsMTAgKzU1OCw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIocnVudGltZV9hY3RpdmVfa2lkcywgMDQ0NCwgcnRwbV9jaGlsZHJlbl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihydW50aW1lX2VuYWJsZWQsIDA0NDQsIHJ0cG1fZW5hYmxlZF9zaG93LCBOVUxMKTsKIAotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKLQogc3RhdGljIHNzaXplX3QgYXN5bmNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICBjaGFyICpidWYpCiB7CkBAIC01OTUsNyArNTg4LDcgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGFzeW5jLCAwNjQ0LCBhc3luY19zaG93LCBhc3luY19zdG9yZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwogI2VuZGlmIC8qIENPTkZJR19QTV9BRFZBTkNFRF9ERUJVRyAqLwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcG93ZXJfYXR0cnNbXSA9IHsKQEAgLTYwMywxMiArNTk2LDEwIEBACiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAJJmRldl9hdHRyX2FzeW5jLmF0dHIsCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogCSZkZXZfYXR0cl9ydW50aW1lX3N0YXR1cy5hdHRyLAogCSZkZXZfYXR0cl9ydW50aW1lX3VzYWdlLmF0dHIsCiAJJmRldl9hdHRyX3J1bnRpbWVfYWN0aXZlX2tpZHMuYXR0ciwKIAkmZGV2X2F0dHJfcnVudGltZV9lbmFibGVkLmF0dHIsCi0jZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfUE1fQURWQU5DRURfREVCVUcgKi8KIAlOVUxMLAogfTsKQEAgLTY0MCw3ICs2MzEsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJ1bnRpbWVfYXR0cnNbXSA9IHsKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogI2lmbmRlZiBDT05GSUdfUE1fQURWQU5DRURfREVCVUcKIAkmZGV2X2F0dHJfcnVudGltZV9zdGF0dXMuYXR0ciwKICNlbmRpZgpAQCAtNjQ4LDcgKzYzOCw2IEBACiAJJmRldl9hdHRyX3J1bnRpbWVfc3VzcGVuZGVkX3RpbWUuYXR0ciwKIAkmZGV2X2F0dHJfcnVudGltZV9hY3RpdmVfdGltZS5hdHRyLAogCSZkZXZfYXR0cl9hdXRvc3VzcGVuZF9kZWxheV9tcy5hdHRyLAotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCiAJTlVMTCwKIH07CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwbV9ydW50aW1lX2F0dHJfZ3JvdXAgPSB7CkBAIC02NTcsOSArNjQ2LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwbV9xb3NfcmVzdW1lX2xhdGVuY3lfYXR0cnNbXSA9IHsKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogCSZkZXZfYXR0cl9wbV9xb3NfcmVzdW1lX2xhdGVuY3lfdXMuYXR0ciwKLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogCU5VTEwsCiB9Owogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG1fcW9zX3Jlc3VtZV9sYXRlbmN5X2F0dHJfZ3JvdXAgPSB7CkBAIC02NjgsOSArNjU1LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwbV9xb3NfbGF0ZW5jeV90b2xlcmFuY2VfYXR0cnNbXSA9IHsKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogCSZkZXZfYXR0cl9wbV9xb3NfbGF0ZW5jeV90b2xlcmFuY2VfdXMuYXR0ciwKLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogCU5VTEwsCiB9Owogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG1fcW9zX2xhdGVuY3lfdG9sZXJhbmNlX2F0dHJfZ3JvdXAgPSB7CkBAIC02NzksMTAgKzY2NCw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcG1fcW9zX2ZsYWdzX2F0dHJzW10gPSB7Ci0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIAkmZGV2X2F0dHJfcG1fcW9zX25vX3Bvd2VyX29mZi5hdHRyLAogCSZkZXZfYXR0cl9wbV9xb3NfcmVtb3RlX3dha2V1cC5hdHRyLAotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCiAJTlVMTCwKIH07CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwbV9xb3NfZmxhZ3NfYXR0cl9ncm91cCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wcm9wZXJ0eS5jIGIvZHJpdmVycy9iYXNlL3Byb3BlcnR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1ODQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmFzZS9wcm9wZXJ0eS5jCkBAIC0wLDAgKzEsNDMxIEBACisvKgorICogcHJvcGVydHkuYyAtIFVuaWZpZWQgZGV2aWNlIHByb3BlcnR5IGludGVyZmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3JzOiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+CisgKiAgICAgICAgICBNaWthIFdlc3RlcmJlcmcgPG1pa2Eud2VzdGVyYmVyZ0BsaW51eC5pbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4KKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworLyoqCisgKiBkZXZpY2VfcHJvcGVydHlfcHJlc2VudCAtIGNoZWNrIGlmIGEgcHJvcGVydHkgb2YgYSBkZXZpY2UgaXMgcHJlc2VudAorICogQGRldjogRGV2aWNlIHdob3NlIHByb3BlcnR5IGlzIGJlaW5nIGNoZWNrZWQKKyAqIEBwcm9wbmFtZTogTmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqCisgKiBDaGVjayBpZiBwcm9wZXJ0eSBAcHJvcG5hbWUgaXMgcHJlc2VudCBpbiB0aGUgZGV2aWNlIGZpcm13YXJlIGRlc2NyaXB0aW9uLgorICovCitib29sIGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcHJvcG5hbWUpCit7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBkZXYtPm9mX25vZGUpCisJCXJldHVybiBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2RlLCBwcm9wbmFtZSk7CisKKwlyZXR1cm4gIWFjcGlfZGV2X3Byb3BfZ2V0KEFDUElfQ09NUEFOSU9OKGRldiksIHByb3BuYW1lLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KTsKKworLyoqCisgKiBmd25vZGVfcHJvcGVydHlfcHJlc2VudCAtIGNoZWNrIGlmIGEgcHJvcGVydHkgb2YgYSBmaXJtd2FyZSBub2RlIGlzIHByZXNlbnQKKyAqIEBmd25vZGU6IEZpcm13YXJlIG5vZGUgd2hvc2UgcHJvcGVydHkgdG8gY2hlY2sKKyAqIEBwcm9wbmFtZTogTmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqLworYm9vbCBmd25vZGVfcHJvcGVydHlfcHJlc2VudChzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCBjb25zdCBjaGFyICpwcm9wbmFtZSkKK3sKKwlpZiAoaXNfb2Zfbm9kZShmd25vZGUpKQorCQlyZXR1cm4gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUoZndub2RlKSwgcHJvcG5hbWUpOworCWVsc2UgaWYgKGlzX2FjcGlfbm9kZShmd25vZGUpKQorCQlyZXR1cm4gIWFjcGlfZGV2X3Byb3BfZ2V0KGFjcGlfbm9kZShmd25vZGUpLCBwcm9wbmFtZSwgTlVMTCk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmd25vZGVfcHJvcGVydHlfcHJlc2VudCk7CisKKyNkZWZpbmUgT0ZfREVWX1BST1BfUkVBRF9BUlJBWShub2RlLCBwcm9wbmFtZSwgdHlwZSwgdmFsLCBudmFsKSBcCisJKHZhbCkgPyBvZl9wcm9wZXJ0eV9yZWFkXyMjdHlwZSMjX2FycmF5KChub2RlKSwgKHByb3BuYW1lKSwgKHZhbCksIChudmFsKSkgXAorCSAgICAgIDogb2ZfcHJvcGVydHlfY291bnRfZWxlbXNfb2Zfc2l6ZSgobm9kZSksIChwcm9wbmFtZSksIHNpemVvZih0eXBlKSkKKworI2RlZmluZSBERVZfUFJPUF9SRUFEX0FSUkFZKF9kZXZfLCBfcHJvcG5hbWVfLCBfdHlwZV8sIF9wcm9wdHlwZV8sIF92YWxfLCBfbnZhbF8pIFwKKwlJU19FTkFCTEVEKENPTkZJR19PRikgJiYgX2Rldl8tPm9mX25vZGUgPyBcCisJCShPRl9ERVZfUFJPUF9SRUFEX0FSUkFZKF9kZXZfLT5vZl9ub2RlLCBfcHJvcG5hbWVfLCBfdHlwZV8sIFwKKwkJCQkJX3ZhbF8sIF9udmFsXykpIDogXAorCQlhY3BpX2Rldl9wcm9wX3JlYWQoQUNQSV9DT01QQU5JT04oX2Rldl8pLCBfcHJvcG5hbWVfLCBcCisJCQkJICAgX3Byb3B0eXBlXywgX3ZhbF8sIF9udmFsXykKKworLyoqCisgKiBkZXZpY2VfcHJvcGVydHlfcmVhZF91OF9hcnJheSAtIHJldHVybiBhIHU4IGFycmF5IHByb3BlcnR5IG9mIGEgZGV2aWNlCisgKiBAZGV2OiBEZXZpY2UgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBvZgorICogQHByb3BuYW1lOiBOYW1lIG9mIHRoZSBwcm9wZXJ0eQorICogQHZhbDogVGhlIHZhbHVlcyBhcmUgc3RvcmVkIGhlcmUKKyAqIEBudmFsOiBTaXplIG9mIHRoZSBAdmFsIGFycmF5CisgKgorICogRnVuY3Rpb24gcmVhZHMgYW4gYXJyYXkgb2YgdTggcHJvcGVydGllcyB3aXRoIEBwcm9wbmFtZSBmcm9tIHRoZSBkZXZpY2UKKyAqIGZpcm13YXJlIGRlc2NyaXB0aW9uIGFuZCBzdG9yZXMgdGhlbSB0byBAdmFsIGlmIGZvdW5kLgorICoKKyAqIFJldHVybjogJTAgaWYgdGhlIHByb3BlcnR5IHdhcyBmb3VuZCAoc3VjY2VzcyksCisgKgkgICAlLUVJTlZBTCBpZiBnaXZlbiBhcmd1bWVudHMgYXJlIG5vdCB2YWxpZCwKKyAqCSAgICUtRU5PREFUQSBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgaGF2ZSBhIHZhbHVlLAorICoJICAgJS1FUFJPVE8gaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBhbiBhcnJheSBvZiBudW1iZXJzLAorICoJICAgJS1FT1ZFUkZMT1cgaWYgdGhlIHNpemUgb2YgdGhlIHByb3BlcnR5IGlzIG5vdCBhcyBleHBlY3RlZC4KKyAqLworaW50IGRldmljZV9wcm9wZXJ0eV9yZWFkX3U4X2FycmF5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcHJvcG5hbWUsCisJCQkJICB1OCAqdmFsLCBzaXplX3QgbnZhbCkKK3sKKwlyZXR1cm4gREVWX1BST1BfUkVBRF9BUlJBWShkZXYsIHByb3BuYW1lLCB1OCwgREVWX1BST1BfVTgsIHZhbCwgbnZhbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfcHJvcGVydHlfcmVhZF91OF9hcnJheSk7CisKKy8qKgorICogZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTE2X2FycmF5IC0gcmV0dXJuIGEgdTE2IGFycmF5IHByb3BlcnR5IG9mIGEgZGV2aWNlCisgKiBAZGV2OiBEZXZpY2UgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBvZgorICogQHByb3BuYW1lOiBOYW1lIG9mIHRoZSBwcm9wZXJ0eQorICogQHZhbDogVGhlIHZhbHVlcyBhcmUgc3RvcmVkIGhlcmUKKyAqIEBudmFsOiBTaXplIG9mIHRoZSBAdmFsIGFycmF5CisgKgorICogRnVuY3Rpb24gcmVhZHMgYW4gYXJyYXkgb2YgdTE2IHByb3BlcnRpZXMgd2l0aCBAcHJvcG5hbWUgZnJvbSB0aGUgZGV2aWNlCisgKiBmaXJtd2FyZSBkZXNjcmlwdGlvbiBhbmQgc3RvcmVzIHRoZW0gdG8gQHZhbCBpZiBmb3VuZC4KKyAqCisgKiBSZXR1cm46ICUwIGlmIHRoZSBwcm9wZXJ0eSB3YXMgZm91bmQgKHN1Y2Nlc3MpLAorICoJICAgJS1FSU5WQUwgaWYgZ2l2ZW4gYXJndW1lbnRzIGFyZSBub3QgdmFsaWQsCisgKgkgICAlLUVOT0RBVEEgaWYgdGhlIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwKKyAqCSAgICUtRVBST1RPIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgYW4gYXJyYXkgb2YgbnVtYmVycywKKyAqCSAgICUtRU9WRVJGTE9XIGlmIHRoZSBzaXplIG9mIHRoZSBwcm9wZXJ0eSBpcyBub3QgYXMgZXhwZWN0ZWQuCisgKi8KK2ludCBkZXZpY2VfcHJvcGVydHlfcmVhZF91MTZfYXJyYXkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpwcm9wbmFtZSwKKwkJCQkgICB1MTYgKnZhbCwgc2l6ZV90IG52YWwpCit7CisJcmV0dXJuIERFVl9QUk9QX1JFQURfQVJSQVkoZGV2LCBwcm9wbmFtZSwgdTE2LCBERVZfUFJPUF9VMTYsIHZhbCwgbnZhbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfcHJvcGVydHlfcmVhZF91MTZfYXJyYXkpOworCisvKioKKyAqIGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheSAtIHJldHVybiBhIHUzMiBhcnJheSBwcm9wZXJ0eSBvZiBhIGRldmljZQorICogQGRldjogRGV2aWNlIHRvIGdldCB0aGUgcHJvcGVydHkgb2YKKyAqIEBwcm9wbmFtZTogTmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqIEB2YWw6IFRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBoZXJlCisgKiBAbnZhbDogU2l6ZSBvZiB0aGUgQHZhbCBhcnJheQorICoKKyAqIEZ1bmN0aW9uIHJlYWRzIGFuIGFycmF5IG9mIHUzMiBwcm9wZXJ0aWVzIHdpdGggQHByb3BuYW1lIGZyb20gdGhlIGRldmljZQorICogZmlybXdhcmUgZGVzY3JpcHRpb24gYW5kIHN0b3JlcyB0aGVtIHRvIEB2YWwgaWYgZm91bmQuCisgKgorICogUmV0dXJuOiAlMCBpZiB0aGUgcHJvcGVydHkgd2FzIGZvdW5kIChzdWNjZXNzKSwKKyAqCSAgICUtRUlOVkFMIGlmIGdpdmVuIGFyZ3VtZW50cyBhcmUgbm90IHZhbGlkLAorICoJICAgJS1FTk9EQVRBIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUsCisgKgkgICAlLUVQUk9UTyBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGFuIGFycmF5IG9mIG51bWJlcnMsCisgKgkgICAlLUVPVkVSRkxPVyBpZiB0aGUgc2l6ZSBvZiB0aGUgcHJvcGVydHkgaXMgbm90IGFzIGV4cGVjdGVkLgorICovCitpbnQgZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcHJvcG5hbWUsCisJCQkJICAgdTMyICp2YWwsIHNpemVfdCBudmFsKQoreworCXJldHVybiBERVZfUFJPUF9SRUFEX0FSUkFZKGRldiwgcHJvcG5hbWUsIHUzMiwgREVWX1BST1BfVTMyLCB2YWwsIG52YWwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KTsKKworLyoqCisgKiBkZXZpY2VfcHJvcGVydHlfcmVhZF91NjRfYXJyYXkgLSByZXR1cm4gYSB1NjQgYXJyYXkgcHJvcGVydHkgb2YgYSBkZXZpY2UKKyAqIEBkZXY6IERldmljZSB0byBnZXQgdGhlIHByb3BlcnR5IG9mCisgKiBAcHJvcG5hbWU6IE5hbWUgb2YgdGhlIHByb3BlcnR5CisgKiBAdmFsOiBUaGUgdmFsdWVzIGFyZSBzdG9yZWQgaGVyZQorICogQG52YWw6IFNpemUgb2YgdGhlIEB2YWwgYXJyYXkKKyAqCisgKiBGdW5jdGlvbiByZWFkcyBhbiBhcnJheSBvZiB1NjQgcHJvcGVydGllcyB3aXRoIEBwcm9wbmFtZSBmcm9tIHRoZSBkZXZpY2UKKyAqIGZpcm13YXJlIGRlc2NyaXB0aW9uIGFuZCBzdG9yZXMgdGhlbSB0byBAdmFsIGlmIGZvdW5kLgorICoKKyAqIFJldHVybjogJTAgaWYgdGhlIHByb3BlcnR5IHdhcyBmb3VuZCAoc3VjY2VzcyksCisgKgkgICAlLUVJTlZBTCBpZiBnaXZlbiBhcmd1bWVudHMgYXJlIG5vdCB2YWxpZCwKKyAqCSAgICUtRU5PREFUQSBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgaGF2ZSBhIHZhbHVlLAorICoJICAgJS1FUFJPVE8gaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBhbiBhcnJheSBvZiBudW1iZXJzLAorICoJICAgJS1FT1ZFUkZMT1cgaWYgdGhlIHNpemUgb2YgdGhlIHByb3BlcnR5IGlzIG5vdCBhcyBleHBlY3RlZC4KKyAqLworaW50IGRldmljZV9wcm9wZXJ0eV9yZWFkX3U2NF9hcnJheShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCSAgIHU2NCAqdmFsLCBzaXplX3QgbnZhbCkKK3sKKwlyZXR1cm4gREVWX1BST1BfUkVBRF9BUlJBWShkZXYsIHByb3BuYW1lLCB1NjQsIERFVl9QUk9QX1U2NCwgdmFsLCBudmFsKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wcm9wZXJ0eV9yZWFkX3U2NF9hcnJheSk7CisKKy8qKgorICogZGV2aWNlX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2FycmF5IC0gcmV0dXJuIGEgc3RyaW5nIGFycmF5IHByb3BlcnR5IG9mIGRldmljZQorICogQGRldjogRGV2aWNlIHRvIGdldCB0aGUgcHJvcGVydHkgb2YKKyAqIEBwcm9wbmFtZTogTmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqIEB2YWw6IFRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBoZXJlCisgKiBAbnZhbDogU2l6ZSBvZiB0aGUgQHZhbCBhcnJheQorICoKKyAqIEZ1bmN0aW9uIHJlYWRzIGFuIGFycmF5IG9mIHN0cmluZyBwcm9wZXJ0aWVzIHdpdGggQHByb3BuYW1lIGZyb20gdGhlIGRldmljZQorICogZmlybXdhcmUgZGVzY3JpcHRpb24gYW5kIHN0b3JlcyB0aGVtIHRvIEB2YWwgaWYgZm91bmQuCisgKgorICogUmV0dXJuOiAlMCBpZiB0aGUgcHJvcGVydHkgd2FzIGZvdW5kIChzdWNjZXNzKSwKKyAqCSAgICUtRUlOVkFMIGlmIGdpdmVuIGFyZ3VtZW50cyBhcmUgbm90IHZhbGlkLAorICoJICAgJS1FTk9EQVRBIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUsCisgKgkgICAlLUVQUk9UTyBvciAlLUVJTFNFUSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGFuIGFycmF5IG9mIHN0cmluZ3MsCisgKgkgICAlLUVPVkVSRkxPVyBpZiB0aGUgc2l6ZSBvZiB0aGUgcHJvcGVydHkgaXMgbm90IGFzIGV4cGVjdGVkLgorICovCitpbnQgZGV2aWNlX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2FycmF5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcHJvcG5hbWUsCisJCQkJICAgICAgY29uc3QgY2hhciAqKnZhbCwgc2l6ZV90IG52YWwpCit7CisJcmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBkZXYtPm9mX25vZGUgPworCQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheShkZXYtPm9mX25vZGUsIHByb3BuYW1lLCB2YWwsIG52YWwpIDoKKwkJYWNwaV9kZXZfcHJvcF9yZWFkKEFDUElfQ09NUEFOSU9OKGRldiksIHByb3BuYW1lLAorCQkJCSAgIERFVl9QUk9QX1NUUklORywgdmFsLCBudmFsKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheSk7CisKKy8qKgorICogZGV2aWNlX3Byb3BlcnR5X3JlYWRfc3RyaW5nIC0gcmV0dXJuIGEgc3RyaW5nIHByb3BlcnR5IG9mIGEgZGV2aWNlCisgKiBAZGV2OiBEZXZpY2UgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBvZgorICogQHByb3BuYW1lOiBOYW1lIG9mIHRoZSBwcm9wZXJ0eQorICogQHZhbDogVGhlIHZhbHVlIGlzIHN0b3JlZCBoZXJlCisgKgorICogRnVuY3Rpb24gcmVhZHMgcHJvcGVydHkgQHByb3BuYW1lIGZyb20gdGhlIGRldmljZSBmaXJtd2FyZSBkZXNjcmlwdGlvbiBhbmQKKyAqIHN0b3JlcyB0aGUgdmFsdWUgaW50byBAdmFsIGlmIGZvdW5kLiBUaGUgdmFsdWUgaXMgY2hlY2tlZCB0byBiZSBhIHN0cmluZy4KKyAqCisgKiBSZXR1cm46ICUwIGlmIHRoZSBwcm9wZXJ0eSB3YXMgZm91bmQgKHN1Y2Nlc3MpLAorICoJICAgJS1FSU5WQUwgaWYgZ2l2ZW4gYXJndW1lbnRzIGFyZSBub3QgdmFsaWQsCisgKgkgICAlLUVOT0RBVEEgaWYgdGhlIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwKKyAqCSAgICUtRVBST1RPIG9yICUtRUlMU0VRIGlmIHRoZSBwcm9wZXJ0eSB0eXBlIGlzIG5vdCBhIHN0cmluZy4KKyAqLworaW50IGRldmljZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCWNvbnN0IGNoYXIgKip2YWwpCit7CisJcmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBkZXYtPm9mX25vZGUgPworCQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXYtPm9mX25vZGUsIHByb3BuYW1lLCB2YWwpIDoKKwkJYWNwaV9kZXZfcHJvcF9yZWFkKEFDUElfQ09NUEFOSU9OKGRldiksIHByb3BuYW1lLAorCQkJCSAgIERFVl9QUk9QX1NUUklORywgdmFsLCAxKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyk7CisKKyNkZWZpbmUgRldOT0RFX1BST1BfUkVBRF9BUlJBWShfZndub2RlXywgX3Byb3BuYW1lXywgX3R5cGVfLCBfcHJvcHR5cGVfLCBfdmFsXywgX252YWxfKSBcCisoeyBcCisJaW50IF9yZXRfOyBcCisJaWYgKGlzX29mX25vZGUoX2Z3bm9kZV8pKSBcCisJCV9yZXRfID0gT0ZfREVWX1BST1BfUkVBRF9BUlJBWShvZl9ub2RlKF9md25vZGVfKSwgX3Byb3BuYW1lXywgXAorCQkJCQkgICAgICAgX3R5cGVfLCBfdmFsXywgX252YWxfKTsgXAorCWVsc2UgaWYgKGlzX2FjcGlfbm9kZShfZndub2RlXykpIFwKKwkJX3JldF8gPSBhY3BpX2Rldl9wcm9wX3JlYWQoYWNwaV9ub2RlKF9md25vZGVfKSwgX3Byb3BuYW1lXywgXAorCQkJCQkgICBfcHJvcHR5cGVfLCBfdmFsXywgX252YWxfKTsgXAorCWVsc2UgXAorCQlfcmV0XyA9IC1FTlhJTzsgXAorCV9yZXRfOyBcCit9KQorCisvKioKKyAqIGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3U4X2FycmF5IC0gcmV0dXJuIGEgdTggYXJyYXkgcHJvcGVydHkgb2YgZmlybXdhcmUgbm9kZQorICogQGZ3bm9kZTogRmlybXdhcmUgbm9kZSB0byBnZXQgdGhlIHByb3BlcnR5IG9mCisgKiBAcHJvcG5hbWU6IE5hbWUgb2YgdGhlIHByb3BlcnR5CisgKiBAdmFsOiBUaGUgdmFsdWVzIGFyZSBzdG9yZWQgaGVyZQorICogQG52YWw6IFNpemUgb2YgdGhlIEB2YWwgYXJyYXkKKyAqCisgKiBSZWFkIGFuIGFycmF5IG9mIHU4IHByb3BlcnRpZXMgd2l0aCBAcHJvcG5hbWUgZnJvbSBAZndub2RlIGFuZCBzdG9yZXMgdGhlbSB0bworICogQHZhbCBpZiBmb3VuZC4KKyAqCisgKiBSZXR1cm46ICUwIGlmIHRoZSBwcm9wZXJ0eSB3YXMgZm91bmQgKHN1Y2Nlc3MpLAorICoJICAgJS1FSU5WQUwgaWYgZ2l2ZW4gYXJndW1lbnRzIGFyZSBub3QgdmFsaWQsCisgKgkgICAlLUVOT0RBVEEgaWYgdGhlIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwKKyAqCSAgICUtRVBST1RPIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgYW4gYXJyYXkgb2YgbnVtYmVycywKKyAqCSAgICUtRU9WRVJGTE9XIGlmIHRoZSBzaXplIG9mIHRoZSBwcm9wZXJ0eSBpcyBub3QgYXMgZXhwZWN0ZWQsCisgKgkgICAlLUVOWElPIGlmIG5vIHN1aXRhYmxlIGZpcm13YXJlIGludGVyZmFjZSBpcyBwcmVzZW50LgorICovCitpbnQgZndub2RlX3Byb3BlcnR5X3JlYWRfdThfYXJyYXkoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnByb3BuYW1lLCB1OCAqdmFsLCBzaXplX3QgbnZhbCkKK3sKKwlyZXR1cm4gRldOT0RFX1BST1BfUkVBRF9BUlJBWShmd25vZGUsIHByb3BuYW1lLCB1OCwgREVWX1BST1BfVTgsCisJCQkJICAgICAgdmFsLCBudmFsKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3U4X2FycmF5KTsKKworLyoqCisgKiBmd25vZGVfcHJvcGVydHlfcmVhZF91MTZfYXJyYXkgLSByZXR1cm4gYSB1MTYgYXJyYXkgcHJvcGVydHkgb2YgZmlybXdhcmUgbm9kZQorICogQGZ3bm9kZTogRmlybXdhcmUgbm9kZSB0byBnZXQgdGhlIHByb3BlcnR5IG9mCisgKiBAcHJvcG5hbWU6IE5hbWUgb2YgdGhlIHByb3BlcnR5CisgKiBAdmFsOiBUaGUgdmFsdWVzIGFyZSBzdG9yZWQgaGVyZQorICogQG52YWw6IFNpemUgb2YgdGhlIEB2YWwgYXJyYXkKKyAqCisgKiBSZWFkIGFuIGFycmF5IG9mIHUxNiBwcm9wZXJ0aWVzIHdpdGggQHByb3BuYW1lIGZyb20gQGZ3bm9kZSBhbmQgc3RvcmUgdGhlbSB0bworICogQHZhbCBpZiBmb3VuZC4KKyAqCisgKiBSZXR1cm46ICUwIGlmIHRoZSBwcm9wZXJ0eSB3YXMgZm91bmQgKHN1Y2Nlc3MpLAorICoJICAgJS1FSU5WQUwgaWYgZ2l2ZW4gYXJndW1lbnRzIGFyZSBub3QgdmFsaWQsCisgKgkgICAlLUVOT0RBVEEgaWYgdGhlIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwKKyAqCSAgICUtRVBST1RPIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgYW4gYXJyYXkgb2YgbnVtYmVycywKKyAqCSAgICUtRU9WRVJGTE9XIGlmIHRoZSBzaXplIG9mIHRoZSBwcm9wZXJ0eSBpcyBub3QgYXMgZXhwZWN0ZWQsCisgKgkgICAlLUVOWElPIGlmIG5vIHN1aXRhYmxlIGZpcm13YXJlIGludGVyZmFjZSBpcyBwcmVzZW50LgorICovCitpbnQgZndub2RlX3Byb3BlcnR5X3JlYWRfdTE2X2FycmF5KHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCisJCQkJICAgY29uc3QgY2hhciAqcHJvcG5hbWUsIHUxNiAqdmFsLCBzaXplX3QgbnZhbCkKK3sKKwlyZXR1cm4gRldOT0RFX1BST1BfUkVBRF9BUlJBWShmd25vZGUsIHByb3BuYW1lLCB1MTYsIERFVl9QUk9QX1UxNiwKKwkJCQkgICAgICB2YWwsIG52YWwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZndub2RlX3Byb3BlcnR5X3JlYWRfdTE2X2FycmF5KTsKKworLyoqCisgKiBmd25vZGVfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkgLSByZXR1cm4gYSB1MzIgYXJyYXkgcHJvcGVydHkgb2YgZmlybXdhcmUgbm9kZQorICogQGZ3bm9kZTogRmlybXdhcmUgbm9kZSB0byBnZXQgdGhlIHByb3BlcnR5IG9mCisgKiBAcHJvcG5hbWU6IE5hbWUgb2YgdGhlIHByb3BlcnR5CisgKiBAdmFsOiBUaGUgdmFsdWVzIGFyZSBzdG9yZWQgaGVyZQorICogQG52YWw6IFNpemUgb2YgdGhlIEB2YWwgYXJyYXkKKyAqCisgKiBSZWFkIGFuIGFycmF5IG9mIHUzMiBwcm9wZXJ0aWVzIHdpdGggQHByb3BuYW1lIGZyb20gQGZ3bm9kZSBzdG9yZSB0aGVtIHRvCisgKiBAdmFsIGlmIGZvdW5kLgorICoKKyAqIFJldHVybjogJTAgaWYgdGhlIHByb3BlcnR5IHdhcyBmb3VuZCAoc3VjY2VzcyksCisgKgkgICAlLUVJTlZBTCBpZiBnaXZlbiBhcmd1bWVudHMgYXJlIG5vdCB2YWxpZCwKKyAqCSAgICUtRU5PREFUQSBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgaGF2ZSBhIHZhbHVlLAorICoJICAgJS1FUFJPVE8gaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBhbiBhcnJheSBvZiBudW1iZXJzLAorICoJICAgJS1FT1ZFUkZMT1cgaWYgdGhlIHNpemUgb2YgdGhlIHByb3BlcnR5IGlzIG5vdCBhcyBleHBlY3RlZCwKKyAqCSAgICUtRU5YSU8gaWYgbm8gc3VpdGFibGUgZmlybXdhcmUgaW50ZXJmYWNlIGlzIHByZXNlbnQuCisgKi8KK2ludCBmd25vZGVfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKKwkJCQkgICBjb25zdCBjaGFyICpwcm9wbmFtZSwgdTMyICp2YWwsIHNpemVfdCBudmFsKQoreworCXJldHVybiBGV05PREVfUFJPUF9SRUFEX0FSUkFZKGZ3bm9kZSwgcHJvcG5hbWUsIHUzMiwgREVWX1BST1BfVTMyLAorCQkJCSAgICAgIHZhbCwgbnZhbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmd25vZGVfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkpOworCisvKioKKyAqIGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3U2NF9hcnJheSAtIHJldHVybiBhIHU2NCBhcnJheSBwcm9wZXJ0eSBmaXJtd2FyZSBub2RlCisgKiBAZndub2RlOiBGaXJtd2FyZSBub2RlIHRvIGdldCB0aGUgcHJvcGVydHkgb2YKKyAqIEBwcm9wbmFtZTogTmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqIEB2YWw6IFRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBoZXJlCisgKiBAbnZhbDogU2l6ZSBvZiB0aGUgQHZhbCBhcnJheQorICoKKyAqIFJlYWQgYW4gYXJyYXkgb2YgdTY0IHByb3BlcnRpZXMgd2l0aCBAcHJvcG5hbWUgZnJvbSBAZndub2RlIGFuZCBzdG9yZSB0aGVtIHRvCisgKiBAdmFsIGlmIGZvdW5kLgorICoKKyAqIFJldHVybjogJTAgaWYgdGhlIHByb3BlcnR5IHdhcyBmb3VuZCAoc3VjY2VzcyksCisgKgkgICAlLUVJTlZBTCBpZiBnaXZlbiBhcmd1bWVudHMgYXJlIG5vdCB2YWxpZCwKKyAqCSAgICUtRU5PREFUQSBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgaGF2ZSBhIHZhbHVlLAorICoJICAgJS1FUFJPVE8gaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBhbiBhcnJheSBvZiBudW1iZXJzLAorICoJICAgJS1FT1ZFUkZMT1cgaWYgdGhlIHNpemUgb2YgdGhlIHByb3BlcnR5IGlzIG5vdCBhcyBleHBlY3RlZCwKKyAqCSAgICUtRU5YSU8gaWYgbm8gc3VpdGFibGUgZmlybXdhcmUgaW50ZXJmYWNlIGlzIHByZXNlbnQuCisgKi8KK2ludCBmd25vZGVfcHJvcGVydHlfcmVhZF91NjRfYXJyYXkoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKKwkJCQkgICBjb25zdCBjaGFyICpwcm9wbmFtZSwgdTY0ICp2YWwsIHNpemVfdCBudmFsKQoreworCXJldHVybiBGV05PREVfUFJPUF9SRUFEX0FSUkFZKGZ3bm9kZSwgcHJvcG5hbWUsIHU2NCwgREVWX1BST1BfVTY0LAorCQkJCSAgICAgIHZhbCwgbnZhbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmd25vZGVfcHJvcGVydHlfcmVhZF91NjRfYXJyYXkpOworCisvKioKKyAqIGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheSAtIHJldHVybiBzdHJpbmcgYXJyYXkgcHJvcGVydHkgb2YgYSBub2RlCisgKiBAZndub2RlOiBGaXJtd2FyZSBub2RlIHRvIGdldCB0aGUgcHJvcGVydHkgb2YKKyAqIEBwcm9wbmFtZTogTmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqIEB2YWw6IFRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBoZXJlCisgKiBAbnZhbDogU2l6ZSBvZiB0aGUgQHZhbCBhcnJheQorICoKKyAqIFJlYWQgYW4gc3RyaW5nIGxpc3QgcHJvcGVydHkgQHByb3BuYW1lIGZyb20gdGhlIGdpdmVuIGZpcm13YXJlIG5vZGUgYW5kIHN0b3JlCisgKiB0aGVtIHRvIEB2YWwgaWYgZm91bmQuCisgKgorICogUmV0dXJuOiAlMCBpZiB0aGUgcHJvcGVydHkgd2FzIGZvdW5kIChzdWNjZXNzKSwKKyAqCSAgICUtRUlOVkFMIGlmIGdpdmVuIGFyZ3VtZW50cyBhcmUgbm90IHZhbGlkLAorICoJICAgJS1FTk9EQVRBIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUsCisgKgkgICAlLUVQUk9UTyBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGFuIGFycmF5IG9mIHN0cmluZ3MsCisgKgkgICAlLUVPVkVSRkxPVyBpZiB0aGUgc2l6ZSBvZiB0aGUgcHJvcGVydHkgaXMgbm90IGFzIGV4cGVjdGVkLAorICoJICAgJS1FTlhJTyBpZiBubyBzdWl0YWJsZSBmaXJtd2FyZSBpbnRlcmZhY2UgaXMgcHJlc2VudC4KKyAqLworaW50IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLCBjb25zdCBjaGFyICoqdmFsLAorCQkJCSAgICAgIHNpemVfdCBudmFsKQoreworCWlmIChpc19vZl9ub2RlKGZ3bm9kZSkpCisJCXJldHVybiBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheShvZl9ub2RlKGZ3bm9kZSksIHByb3BuYW1lLAorCQkJCQkJICAgICB2YWwsIG52YWwpOworCWVsc2UgaWYgKGlzX2FjcGlfbm9kZShmd25vZGUpKQorCQlyZXR1cm4gYWNwaV9kZXZfcHJvcF9yZWFkKGFjcGlfbm9kZShmd25vZGUpLCBwcm9wbmFtZSwKKwkJCQkJICBERVZfUFJPUF9TVFJJTkcsIHZhbCwgbnZhbCk7CisKKwlyZXR1cm4gLUVOWElPOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZndub2RlX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2FycmF5KTsKKworLyoqCisgKiBmd25vZGVfcHJvcGVydHlfcmVhZF9zdHJpbmcgLSByZXR1cm4gYSBzdHJpbmcgcHJvcGVydHkgb2YgYSBmaXJtd2FyZSBub2RlCisgKiBAZndub2RlOiBGaXJtd2FyZSBub2RlIHRvIGdldCB0aGUgcHJvcGVydHkgb2YKKyAqIEBwcm9wbmFtZTogTmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqIEB2YWw6IFRoZSB2YWx1ZSBpcyBzdG9yZWQgaGVyZQorICoKKyAqIFJlYWQgcHJvcGVydHkgQHByb3BuYW1lIGZyb20gdGhlIGdpdmVuIGZpcm13YXJlIG5vZGUgYW5kIHN0b3JlIHRoZSB2YWx1ZSBpbnRvCisgKiBAdmFsIGlmIGZvdW5kLiAgVGhlIHZhbHVlIGlzIGNoZWNrZWQgdG8gYmUgYSBzdHJpbmcuCisgKgorICogUmV0dXJuOiAlMCBpZiB0aGUgcHJvcGVydHkgd2FzIGZvdW5kIChzdWNjZXNzKSwKKyAqCSAgICUtRUlOVkFMIGlmIGdpdmVuIGFyZ3VtZW50cyBhcmUgbm90IHZhbGlkLAorICoJICAgJS1FTk9EQVRBIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUsCisgKgkgICAlLUVQUk9UTyBvciAlLUVJTFNFUSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGEgc3RyaW5nLAorICoJICAgJS1FTlhJTyBpZiBubyBzdWl0YWJsZSBmaXJtd2FyZSBpbnRlcmZhY2UgaXMgcHJlc2VudC4KKyAqLworaW50IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLAorCQkJCWNvbnN0IGNoYXIgKnByb3BuYW1lLCBjb25zdCBjaGFyICoqdmFsKQoreworCWlmIChpc19vZl9ub2RlKGZ3bm9kZSkpCisJCXJldHVybiBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhvZl9ub2RlKGZ3bm9kZSkscHJvcG5hbWUsIHZhbCk7CisJZWxzZSBpZiAoaXNfYWNwaV9ub2RlKGZ3bm9kZSkpCisJCXJldHVybiBhY3BpX2Rldl9wcm9wX3JlYWQoYWNwaV9ub2RlKGZ3bm9kZSksIHByb3BuYW1lLAorCQkJCQkgIERFVl9QUk9QX1NUUklORywgdmFsLCAxKTsKKworCXJldHVybiAtRU5YSU87Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmd25vZGVfcHJvcGVydHlfcmVhZF9zdHJpbmcpOworCisvKioKKyAqIGRldmljZV9nZXRfbmV4dF9jaGlsZF9ub2RlIC0gUmV0dXJuIHRoZSBuZXh0IGNoaWxkIG5vZGUgaGFuZGxlIGZvciBhIGRldmljZQorICogQGRldjogRGV2aWNlIHRvIGZpbmQgdGhlIG5leHQgY2hpbGQgbm9kZSBmb3IuCisgKiBAY2hpbGQ6IEhhbmRsZSB0byBvbmUgb2YgdGhlIGRldmljZSdzIGNoaWxkIG5vZGVzIG9yIGEgbnVsbCBoYW5kbGUuCisgKi8KK3N0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZpY2VfZ2V0X25leHRfY2hpbGRfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkKQoreworCWlmIChJU19FTkFCTEVEKENPTkZJR19PRikgJiYgZGV2LT5vZl9ub2RlKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gb2ZfZ2V0X25leHRfYXZhaWxhYmxlX2NoaWxkKGRldi0+b2Zfbm9kZSwgb2Zfbm9kZShjaGlsZCkpOworCQlpZiAobm9kZSkKKwkJCXJldHVybiAmbm9kZS0+Zndub2RlOworCX0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfQUNQSSkpIHsKKwkJc3RydWN0IGFjcGlfZGV2aWNlICpub2RlOworCisJCW5vZGUgPSBhY3BpX2dldF9uZXh0X2NoaWxkKGRldiwgYWNwaV9ub2RlKGNoaWxkKSk7CisJCWlmIChub2RlKQorCQkJcmV0dXJuIGFjcGlfZndub2RlX2hhbmRsZShub2RlKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfZ2V0X25leHRfY2hpbGRfbm9kZSk7CisKKy8qKgorICogZndub2RlX2hhbmRsZV9wdXQgLSBEcm9wIHJlZmVyZW5jZSB0byBhIGRldmljZSBub2RlCisgKiBAZndub2RlOiBQb2ludGVyIHRvIHRoZSBkZXZpY2Ugbm9kZSB0byBkcm9wIHRoZSByZWZlcmVuY2UgdG8uCisgKgorICogVGhpcyBoYXMgdG8gYmUgdXNlZCB3aGVuIHRlcm1pbmF0aW5nIGRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlKCkgaXRlcmF0aW9uCisgKiB3aXRoIGJyZWFrIG9yIHJldHVybiB0byBwcmV2ZW50IHN0YWxlIGRldmljZSBub2RlIHJlZmVyZW5jZXMgZnJvbSBiZWluZyBsZWZ0CisgKiBiZWhpbmQuCisgKi8KK3ZvaWQgZndub2RlX2hhbmRsZV9wdXQoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKK3sKKwlpZiAoaXNfb2Zfbm9kZShmd25vZGUpKQorCQlvZl9ub2RlX3B1dChvZl9ub2RlKGZ3bm9kZSkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZndub2RlX2hhbmRsZV9wdXQpOworCisvKioKKyAqIGRldmljZV9nZXRfY2hpbGRfbm9kZV9jb3VudCAtIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoaWxkIG5vZGVzIGZvciBkZXZpY2UKKyAqIEBkZXY6IERldmljZSB0byBjb3VuZCB0aGUgY2hpbGQgbm9kZXMgZm9yCisgKi8KK3Vuc2lnbmVkIGludCBkZXZpY2VfZ2V0X2NoaWxkX25vZGVfY291bnQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBmd25vZGVfaGFuZGxlICpjaGlsZDsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGUoZGV2LCBjaGlsZCkKKwkJY291bnQrKzsKKworCXJldHVybiBjb3VudDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9nZXRfY2hpbGRfbm9kZV9jb3VudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcKaW5kZXggOGEzZjUxZi4uZGI5ZDAwYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZworKysgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcKQEAgLTMsMTIgKzMsMTUgQEAKICMgc3Vic3lzdGVtcyBzaG91bGQgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBzeW1ib2xzLgogCiBjb25maWcgUkVHTUFQCi0JZGVmYXVsdCB5IGlmIChSRUdNQVBfSTJDIHx8IFJFR01BUF9TUEkgfHwgUkVHTUFQX1NQTUkgfHwgUkVHTUFQX01NSU8gfHwgUkVHTUFQX0lSUSkKKwlkZWZhdWx0IHkgaWYgKFJFR01BUF9JMkMgfHwgUkVHTUFQX1NQSSB8fCBSRUdNQVBfU1BNSSB8fCBSRUdNQVBfQUM5NyB8fCBSRUdNQVBfTU1JTyB8fCBSRUdNQVBfSVJRKQogCXNlbGVjdCBMWk9fQ09NUFJFU1MKIAlzZWxlY3QgTFpPX0RFQ09NUFJFU1MKIAlzZWxlY3QgSVJRX0RPTUFJTiBpZiBSRUdNQVBfSVJRCiAJYm9vbAogCitjb25maWcgUkVHTUFQX0FDOTcKKwl0cmlzdGF0ZQorCiBjb25maWcgUkVHTUFQX0kyQwogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvTWFrZWZpbGUgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL01ha2VmaWxlCmluZGV4IGE3YzY3MGIuLjBhNTMzNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9NYWtlZmlsZQpAQCAtMSw2ICsxLDcgQEAKIG9iai0kKENPTkZJR19SRUdNQVApICs9IHJlZ21hcC5vIHJlZ2NhY2hlLm8KIG9iai0kKENPTkZJR19SRUdNQVApICs9IHJlZ2NhY2hlLXJidHJlZS5vIHJlZ2NhY2hlLWx6by5vIHJlZ2NhY2hlLWZsYXQubwogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKSArPSByZWdtYXAtZGVidWdmcy5vCitvYmotJChDT05GSUdfUkVHTUFQX0FDOTcpICs9IHJlZ21hcC1hYzk3Lm8KIG9iai0kKENPTkZJR19SRUdNQVBfSTJDKSArPSByZWdtYXAtaTJjLm8KIG9iai0kKENPTkZJR19SRUdNQVBfU1BJKSArPSByZWdtYXAtc3BpLm8KIG9iai0kKENPTkZJR19SRUdNQVBfU1BNSSkgKz0gcmVnbWFwLXNwbWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1mbGF0LmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWZsYXQuYwppbmRleCBkOTc2MmU0Li4wMjQ2ZjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWZsYXQuYworKysgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWZsYXQuYwpAQCAtMTAsOSArMTAsOSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbHpvLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLWx6by5jCmluZGV4IGUyMTBhNmQuLjJkNTNmNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbHpvLmMKKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1sem8uYwpAQCAtMTAsOSArMTAsOSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9sem8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLXJidHJlZS5jIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1yYnRyZWUuYwppbmRleCBmM2U4ZmUwLi5kNDUzYTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLXJidHJlZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtcmJ0cmVlLmMKQEAgLTEwLDExICsxMCwxMSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMKaW5kZXggZjEyODBkYy4uZjM3M2MzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYwpAQCAtMTAsMTIgKzEwLDEyIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9ic2VhcmNoLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcmVnbWFwLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCkBAIC0zNiw2ICszNiwyMyBAQAogCWlmICghbWFwLT5udW1fcmVnX2RlZmF1bHRzX3JhdykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgcmVnX2RlZmF1bHRzICovCisJZm9yIChjb3VudCA9IDAsIGkgPSAwOyBpIDwgbWFwLT5udW1fcmVnX2RlZmF1bHRzX3JhdzsgaSsrKQorCQlpZiAoIXJlZ21hcF92b2xhdGlsZShtYXAsIGkgKiBtYXAtPnJlZ19zdHJpZGUpKQorCQkJY291bnQrKzsKKworCS8qIGFsbCByZWdpc3RlcnMgYXJlIHZvbGF0aWxlLCBzbyBqdXN0IGJ5cGFzcyAqLworCWlmICghY291bnQpIHsKKwkJbWFwLT5jYWNoZV9ieXBhc3MgPSB0cnVlOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAtPm51bV9yZWdfZGVmYXVsdHMgPSBjb3VudDsKKwltYXAtPnJlZ19kZWZhdWx0cyA9IGttYWxsb2NfYXJyYXkoY291bnQsIHNpemVvZihzdHJ1Y3QgcmVnX2RlZmF1bHQpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghbWFwLT5yZWdfZGVmYXVsdHMpCisJCXJldHVybiAtRU5PTUVNOworCiAJaWYgKCFtYXAtPnJlZ19kZWZhdWx0c19yYXcpIHsKIAkJdTMyIGNhY2hlX2J5cGFzcyA9IG1hcC0+Y2FjaGVfYnlwYXNzOwogCQlkZXZfd2FybihtYXAtPmRldiwgIk5vIGNhY2hlIGRlZmF1bHRzLCByZWFkaW5nIGJhY2sgZnJvbSBIV1xuIik7CkBAIC00Myw0MCArNjAsMjUgQEAKIAkJLyogQnlwYXNzIHRoZSBjYWNoZSBhY2Nlc3MgdGlsbCBkYXRhIHJlYWQgZnJvbSBIVyovCiAJCW1hcC0+Y2FjaGVfYnlwYXNzID0gMTsKIAkJdG1wX2J1ZiA9IGttYWxsb2MobWFwLT5jYWNoZV9zaXplX3JhdywgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdG1wX2J1ZikKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIXRtcF9idWYpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9mcmVlOworCQl9CiAJCXJldCA9IHJlZ21hcF9yYXdfcmVhZChtYXAsIDAsIHRtcF9idWYsCiAJCQkJICAgICAgbWFwLT5udW1fcmVnX2RlZmF1bHRzX3Jhdyk7CiAJCW1hcC0+Y2FjaGVfYnlwYXNzID0gY2FjaGVfYnlwYXNzOwotCQlpZiAocmV0IDwgMCkgewotCQkJa2ZyZWUodG1wX2J1Zik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJfY2FjaGVfZnJlZTsKKwogCQltYXAtPnJlZ19kZWZhdWx0c19yYXcgPSB0bXBfYnVmOwogCQltYXAtPmNhY2hlX2ZyZWUgPSAxOwogCX0KIAotCS8qIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiByZWdfZGVmYXVsdHMgKi8KLQlmb3IgKGNvdW50ID0gMCwgaSA9IDA7IGkgPCBtYXAtPm51bV9yZWdfZGVmYXVsdHNfcmF3OyBpKyspIHsKLQkJdmFsID0gcmVnY2FjaGVfZ2V0X3ZhbChtYXAsIG1hcC0+cmVnX2RlZmF1bHRzX3JhdywgaSk7Ci0JCWlmIChyZWdtYXBfdm9sYXRpbGUobWFwLCBpICogbWFwLT5yZWdfc3RyaWRlKSkKLQkJCWNvbnRpbnVlOwotCQljb3VudCsrOwotCX0KLQotCW1hcC0+cmVnX2RlZmF1bHRzID0ga21hbGxvYyhjb3VudCAqIHNpemVvZihzdHJ1Y3QgcmVnX2RlZmF1bHQpLAotCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmICghbWFwLT5yZWdfZGVmYXVsdHMpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZTsKLQl9Ci0KIAkvKiBmaWxsIHRoZSByZWdfZGVmYXVsdHMgKi8KLQltYXAtPm51bV9yZWdfZGVmYXVsdHMgPSBjb3VudDsKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG1hcC0+bnVtX3JlZ19kZWZhdWx0c19yYXc7IGkrKykgewotCQl2YWwgPSByZWdjYWNoZV9nZXRfdmFsKG1hcCwgbWFwLT5yZWdfZGVmYXVsdHNfcmF3LCBpKTsKIAkJaWYgKHJlZ21hcF92b2xhdGlsZShtYXAsIGkgKiBtYXAtPnJlZ19zdHJpZGUpKQogCQkJY29udGludWU7CisJCXZhbCA9IHJlZ2NhY2hlX2dldF92YWwobWFwLCBtYXAtPnJlZ19kZWZhdWx0c19yYXcsIGkpOwogCQltYXAtPnJlZ19kZWZhdWx0c1tqXS5yZWcgPSBpICogbWFwLT5yZWdfc3RyaWRlOwogCQltYXAtPnJlZ19kZWZhdWx0c1tqXS5kZWYgPSB2YWw7CiAJCWorKzsKQEAgLTg0LDkgKzg2LDEwIEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX2NhY2hlX2ZyZWU6CisJa2ZyZWUodG1wX2J1Zik7CiBlcnJfZnJlZToKLQlpZiAobWFwLT5jYWNoZV9mcmVlKQotCQlrZnJlZShtYXAtPnJlZ19kZWZhdWx0c19yYXcpOworCWtmcmVlKG1hcC0+cmVnX2RlZmF1bHRzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTAsNiArMTUzLDggQEAKIAkJcmV0ID0gcmVnY2FjaGVfaHdfaW5pdChtYXApOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CisJCWlmIChtYXAtPmNhY2hlX2J5cGFzcykKKwkJCXJldHVybiAwOwogCX0KIAogCWlmICghbWFwLT5tYXhfcmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1hYzk3LmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1hYzk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjNDVkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWFjOTcuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIFJlZ2lzdGVyIG1hcCBhY2Nlc3MgQVBJIC0gQUMnOTcgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAyMDEzIExpbmFybyBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKworYm9vbCByZWdtYXBfYWM5N19kZWZhdWx0X3ZvbGF0aWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgQUM5N19SRVNFVDoKKwljYXNlIEFDOTdfUE9XRVJET1dOOgorCWNhc2UgQUM5N19JTlRfUEFHSU5HOgorCWNhc2UgQUM5N19FWFRFTkRFRF9JRDoKKwljYXNlIEFDOTdfRVhURU5ERURfU1RBVFVTOgorCWNhc2UgQUM5N19FWFRFTkRFRF9NSUQ6CisJY2FzZSBBQzk3X0VYVEVOREVEX01TVEFUVVM6CisJY2FzZSBBQzk3X0dQSU9fU1RBVFVTOgorCWNhc2UgQUM5N19NSVNDX0FGRToKKwljYXNlIEFDOTdfVkVORE9SX0lEMToKKwljYXNlIEFDOTdfVkVORE9SX0lEMjoKKwljYXNlIEFDOTdfQ09ERUNfQ0xBU1NfUkVWOgorCWNhc2UgQUM5N19QQ0lfU1ZJRDoKKwljYXNlIEFDOTdfUENJX1NJRDoKKwljYXNlIEFDOTdfRlVOQ19TRUxFQ1Q6CisJY2FzZSBBQzk3X0ZVTkNfSU5GTzoKKwljYXNlIEFDOTdfU0VOU0VfSU5GTzoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ21hcF9hYzk3X2RlZmF1bHRfdm9sYXRpbGUpOworCitzdGF0aWMgaW50IHJlZ21hcF9hYzk3X3JlZ19yZWFkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50ICp2YWwpCit7CisJc3RydWN0IHNuZF9hYzk3ICphYzk3ID0gY29udGV4dDsKKworCSp2YWwgPSBhYzk3LT5idXMtPm9wcy0+cmVhZChhYzk3LCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVnbWFwX2FjOTdfcmVnX3dyaXRlKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcgPSBjb250ZXh0OworCisJYWM5Ny0+YnVzLT5vcHMtPndyaXRlKGFjOTcsIHJlZywgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9idXMgYWM5N19yZWdtYXBfYnVzID0geworCQkucmVnX3dyaXRlID0gcmVnbWFwX2FjOTdfcmVnX3dyaXRlLAorCQkucmVnX3JlYWQgPSByZWdtYXBfYWM5N19yZWdfcmVhZCwKK307CisKKy8qKgorICogcmVnbWFwX2luaXRfYWM5NygpOiBJbml0aWFsaXNlIEFDJzk3IHJlZ2lzdGVyIG1hcAorICoKKyAqIEBhYzk3OiBEZXZpY2UgdGhhdCB3aWxsIGJlIGludGVyYWN0ZWQgd2l0aAorICogQGNvbmZpZzogQ29uZmlndXJhdGlvbiBmb3IgcmVnaXN0ZXIgbWFwCisgKgorICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGFuIEVSUl9QVFIoKSBvbiBlcnJvciBvciBhIHZhbGlkIHBvaW50ZXIgdG8KKyAqIGEgc3RydWN0IHJlZ21hcC4KKyAqLworc3RydWN0IHJlZ21hcCAqcmVnbWFwX2luaXRfYWM5NyhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCQkJY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZykKK3sKKwlyZXR1cm4gcmVnbWFwX2luaXQoJmFjOTctPmRldiwgJmFjOTdfcmVnbWFwX2J1cywgYWM5NywgY29uZmlnKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ21hcF9pbml0X2FjOTcpOworCisvKioKKyAqIGRldm1fcmVnbWFwX2luaXRfYWM5NygpOiBJbml0aWFsaXNlIEFDJzk3IHJlZ2lzdGVyIG1hcAorICoKKyAqIEBhYzk3OiBEZXZpY2UgdGhhdCB3aWxsIGJlIGludGVyYWN0ZWQgd2l0aAorICogQGNvbmZpZzogQ29uZmlndXJhdGlvbiBmb3IgcmVnaXN0ZXIgbWFwCisgKgorICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGFuIEVSUl9QVFIoKSBvbiBlcnJvciBvciBhIHZhbGlkIHBvaW50ZXIKKyAqIHRvIGEgc3RydWN0IHJlZ21hcC4gIFRoZSByZWdtYXAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZyZWVkIGJ5IHRoZQorICogZGV2aWNlIG1hbmFnZW1lbnQgY29kZS4KKyAqLworc3RydWN0IHJlZ21hcCAqZGV2bV9yZWdtYXBfaW5pdF9hYzk3KHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpCit7CisJcmV0dXJuIGRldm1fcmVnbWFwX2luaXQoJmFjOTctPmRldiwgJmFjOTdfcmVnbWFwX2J1cywgYWM5NywgY29uZmlnKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fcmVnbWFwX2luaXRfYWM5Nyk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2RlYnVnZnMuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2RlYnVnZnMuYwppbmRleCA5MDBkNGQzLi45YTk1MDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfZGVidWdmcy5jCkBAIC00MTksNyArNDE5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogc2ltcGxlX3Bvc2l0aXZlKGZpbGUtPmZfZGVudHJ5KSByZXNwZWN0aXZlbHkgZGVidWdmc19wb3NpdGl2ZSgpLAorLyogc2ltcGxlX3Bvc2l0aXZlKGZpbGUtPmZfcGF0aC5kZW50cnkpIHJlc3BlY3RpdmVseSBkZWJ1Z2ZzX3Bvc2l0aXZlKCksCiAgKiBidXQgbmVpdGhlciBpcyAicmVhY2hhYmxlIiBmcm9tIGhlcmUuCiAgKiBTbyB3ZSBoYXZlIG91ciBvd24gaW5saW5lIHZlcnNpb24gb2YgaXQgYWJvdmUuICA6LSggKi8KIHN0YXRpYyBpbmxpbmUgaW50IGRlYnVnZnNfcG9zaXRpdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQpAQCAtNDM3LDE0ICs0MzcsMTQgQEAKIAogCS8qIEFyZSB3ZSBzdGlsbCBsaW5rZWQsCiAJICogb3IgaGFzIGRlYnVnZnNfcmVtb3ZlKCkgYWxyZWFkeSBiZWVuIGNhbGxlZD8gKi8KLQlwYXJlbnQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQ7CisJcGFyZW50ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQ7CiAJLyogbm90IHN1cmUgaWYgdGhpcyBjYW4gaGFwcGVuOiAqLwogCWlmICghcGFyZW50IHx8ICFwYXJlbnQtPmRfaW5vZGUpCiAJCWdvdG8gb3V0OwogCS8qIHNlcmlhbGl6ZSB3aXRoIGRfZGVsZXRlKCkgKi8KIAltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCS8qIE1ha2Ugc3VyZSB0aGUgb2JqZWN0IGlzIHN0aWxsIGFsaXZlICovCi0JaWYgKGRlYnVnZnNfcG9zaXRpdmUoZmlsZS0+Zl9kZW50cnkpCisJaWYgKGRlYnVnZnNfcG9zaXRpdmUoZmlsZS0+Zl9wYXRoLmRlbnRyeSkKIAkmJiBrcmVmX2dldF91bmxlc3NfemVybyhrcmVmKSkKIAkJcmV0ID0gMDsKIAltdXRleF91bmxvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL252bWUtc2NzaS5jIGIvZHJpdmVycy9ibG9jay9udm1lLXNjc2kuYwppbmRleCBhNGNkNmQ2Li4wYjRiMjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL252bWUtc2NzaS5jCisrKyBiL2RyaXZlcnMvYmxvY2svbnZtZS1zY3NpLmMKQEAgLTMyOSw3ICszMjksNyBAQAogKEdFVF9VMzJfRlJPTV9DREIoY2RiLCBSRUFEX0NBUF8xNl9DREJfQUxMT0NfTEVOR1RIX09GRlNFVCkpCiAKICNkZWZpbmUgSVNfUkVBRF9DQVBfMTYoY2RiKQkJCQkJXAotKChjZGJbMF0gPT0gU0VSVklDRV9BQ1RJT05fSU4gJiYgY2RiWzFdID09IFNBSV9SRUFEX0NBUEFDSVRZXzE2KSA/IDEgOiAwKQorKChjZGJbMF0gPT0gU0VSVklDRV9BQ1RJT05fSU5fMTYgJiYgY2RiWzFdID09IFNBSV9SRUFEX0NBUEFDSVRZXzE2KSA/IDEgOiAwKQogCiAvKiBSZXF1ZXN0IFNlbnNlIEhlbHBlciBNYWNyb3MgKi8KICNkZWZpbmUgR0VUX1JFUVVFU1RfU0VOU0VfQUxMT0NfTEVOR1RIKGNkYikJCQlcCkBAIC0yOTQ3LDcgKzI5NDcsNyBAQAogCWNhc2UgUkVBRF9DQVBBQ0lUWToKIAkJcmV0Y29kZSA9IG52bWVfdHJhbnNfcmVhZF9jYXBhY2l0eShucywgaGRyLCBjbWQpOwogCQlicmVhazsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAJCWlmIChJU19SRUFEX0NBUF8xNihjbWQpKQogCQkJcmV0Y29kZSA9IG52bWVfdHJhbnNfcmVhZF9jYXBhY2l0eShucywgaGRyLCBjbWQpOwogCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9LY29uZmlnIGIvZHJpdmVycy9idXMvS2NvbmZpZwppbmRleCA2MDNlYjFiLi5iOTk3MjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2J1cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvYnVzL0tjb25maWcKQEAgLTYsNyArNiw3IEBACiAKIGNvbmZpZyBCUkNNU1RCX0dJU0JfQVJCCiAJYm9vbCAiQnJvYWRjb20gU1RCIEdJU0IgYnVzIGFyYml0ZXIiCi0JZGVwZW5kcyBvbiBBUk0KKwlkZXBlbmRzIG9uIEFSTSB8fCBNSVBTCiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgQnJvYWRjb20gU2V0IFRvcCBCb3ggU3lzdGVtLW9uLWEtY2hpcCBpbnRlcm5hbCBidXMKIAkgIGFyYml0ZXIuIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHRpbWVvdXQgYW5kIHRhcmdldCBhYm9ydCBlcnJvciBoYW5kbGluZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvYXJtLWNjaS5jIGIvZHJpdmVycy9idXMvYXJtLWNjaS5jCmluZGV4IDdhZjc4ZGYuLjg2MGRhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL2FybS1jY2kuYworKysgYi9kcml2ZXJzL2J1cy9hcm0tY2NpLmMKQEAgLTE2LDE3ICsxNiwxNyBAQAogCiAjaW5jbHVkZSA8bGludXgvYXJtLWNjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vcG11Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJDQ0ktNDAwIgpAQCAtOTgsNiArOTgsOCBAQAogCiAjZGVmaW5lIENDSV9QTVVfQ05UUl9CQVNFKGlkeCkJKChpZHgpICogU1pfNEspCiAKKyNkZWZpbmUgQ0NJX1BNVV9DTlRSX01BU0sJKCgxVUxMIDw8IDMyKSAtMSkKKwogLyoKICAqIEluc3RlYWQgb2YgYW4gZXZlbnQgaWQgdG8gbW9uaXRvciBDQ0kgY3ljbGVzLCBhIGRlZGljYXRlZCBjb3VudGVyIGlzCiAgKiBwcm92aWRlZC4gVXNlIDB4ZmYgdG8gcmVwcmVzZW50IENDSSBjeWNsZXMgYW5kIGhvcGUgdGhhdCBubyBmdXR1cmUgcmV2aXNpb25zCkBAIC0xNzAsMTggKzE3MiwyOSBAQAogCVtDQ0lfUkVWX1IxXSA9ICJDQ0lfNDAwX3IxIiwKIH07CiAKLXN0cnVjdCBjY2lfcG11X2Rydl9kYXRhIHsKK3N0cnVjdCBjY2lfcG11X2h3X2V2ZW50cyB7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50c1tDQ0lfUE1VX01BWF9IV19FVkVOVFNdOworCXVuc2lnbmVkIGxvbmcgdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoQ0NJX1BNVV9NQVhfSFdfRVZFTlRTKV07CisJcmF3X3NwaW5sb2NrX3QgcG11X2xvY2s7Cit9OworCitzdHJ1Y3QgY2NpX3BtdSB7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwotCXN0cnVjdCBhcm1fcG11ICpjY2lfcG11OworCXN0cnVjdCBwbXUgcG11OwogCWludCBucl9pcnFzOwogCWludCBpcnFzW0NDSV9QTVVfTUFYX0hXX0VWRU5UU107CiAJdW5zaWduZWQgbG9uZyBhY3RpdmVfaXJxczsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnRzW0NDSV9QTVVfTUFYX0hXX0VWRU5UU107Ci0JdW5zaWduZWQgbG9uZyB1c2VkX21hc2tbQklUU19UT19MT05HUyhDQ0lfUE1VX01BWF9IV19FVkVOVFMpXTsKIAlzdHJ1Y3QgcG11X3BvcnRfZXZlbnRfcmFuZ2VzICpwb3J0X3JhbmdlczsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyBod19ldmVudHM7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzIGh3X2V2ZW50czsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldmljZTsKKwlpbnQgbnVtX2V2ZW50czsKKwlhdG9taWNfdCBhY3RpdmVfZXZlbnRzOworCXN0cnVjdCBtdXRleCByZXNlcnZlX211dGV4OworCWNwdW1hc2tfdCBjcHVzOwogfTsKLXN0YXRpYyBzdHJ1Y3QgY2NpX3BtdV9kcnZfZGF0YSAqcG11Oworc3RhdGljIHN0cnVjdCBjY2lfcG11ICpwbXU7CisKKyNkZWZpbmUgdG9fY2NpX3BtdShjKQkoY29udGFpbmVyX29mKGMsIHN0cnVjdCBjY2lfcG11LCBwbXUpKQogCiBzdGF0aWMgYm9vbCBpc19kdXBsaWNhdGVfaXJxKGludCBpcnEsIGludCAqaXJxcywgaW50IG5yX2lycXMpCiB7CkBAIC0yNTIsNyArMjY1LDcgQEAKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIAotc3RhdGljIGludCBwbXVfaXNfdmFsaWRfY291bnRlcihzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSwgaW50IGlkeCkKK3N0YXRpYyBpbnQgcG11X2lzX3ZhbGlkX2NvdW50ZXIoc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUsIGludCBpZHgpCiB7CiAJcmV0dXJuIENDSV9QTVVfQ1lDTEVfQ05UUl9JRFggPD0gaWR4ICYmCiAJCWlkeCA8PSBDQ0lfUE1VX0NOVFJfTEFTVChjY2lfcG11KTsKQEAgLTI5MywxNCArMzA2LDkgQEAKIAlyZXR1cm4gbl9jbnRzICsgMTsKIH0KIAotc3RhdGljIHN0cnVjdCBwbXVfaHdfZXZlbnRzICpwbXVfZ2V0X2h3X2V2ZW50cyh2b2lkKQorc3RhdGljIGludCBwbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY2NpX3BtdV9od19ldmVudHMgKmh3LCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0JcmV0dXJuICZwbXUtPmh3X2V2ZW50czsKLX0KLQotc3RhdGljIGludCBwbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqaHcsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod19ldmVudCA9ICZldmVudC0+aHc7CiAJdW5zaWduZWQgbG9uZyBjY2lfZXZlbnQgPSBod19ldmVudC0+Y29uZmlnX2Jhc2UgJiBDQ0lfUE1VX0VWRU5UX01BU0s7CiAJaW50IGlkeDsKQEAgLTMzNiw3ICszNDQsNyBAQAogCXJldHVybiBtYXBwaW5nOwogfQogCi1zdGF0aWMgaW50IHBtdV9yZXF1ZXN0X2lycShzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSwgaXJxX2hhbmRsZXJfdCBoYW5kbGVyKQorc3RhdGljIGludCBwbXVfcmVxdWVzdF9pcnEoc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUsIGlycV9oYW5kbGVyX3QgaGFuZGxlcikKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbXVfZGV2aWNlID0gY2NpX3BtdS0+cGxhdF9kZXZpY2U7CkBAIC0zNzEsMTcgKzM3OSw5MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwbXVfZnJlZV9pcnEoc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG11LT5ucl9pcnFzOyBpKyspIHsKKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJnBtdS0+YWN0aXZlX2lycXMpKQorCQkJY29udGludWU7CisKKwkJZnJlZV9pcnEocG11LT5pcnFzW2ldLCBjY2lfcG11KTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgcG11X3JlYWRfY291bnRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod19jb3VudGVyID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdfY291bnRlci0+aWR4OworCXUzMiB2YWx1ZTsKKworCWlmICh1bmxpa2VseSghcG11X2lzX3ZhbGlkX2NvdW50ZXIoY2NpX3BtdSwgaWR4KSkpIHsKKwkJZGV2X2VycigmY2NpX3BtdS0+cGxhdF9kZXZpY2UtPmRldiwgIkludmFsaWQgQ0NJIFBNVSBjb3VudGVyICVkXG4iLCBpZHgpOworCQlyZXR1cm4gMDsKKwl9CisJdmFsdWUgPSBwbXVfcmVhZF9yZWdpc3RlcihpZHgsIENDSV9QTVVfQ05UUik7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHBtdV93cml0ZV9jb3VudGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBjY2lfcG11ICpjY2lfcG11ID0gdG9fY2NpX3BtdShldmVudC0+cG11KTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdfY291bnRlciA9ICZldmVudC0+aHc7CisJaW50IGlkeCA9IGh3X2NvdW50ZXItPmlkeDsKKworCWlmICh1bmxpa2VseSghcG11X2lzX3ZhbGlkX2NvdW50ZXIoY2NpX3BtdSwgaWR4KSkpCisJCWRldl9lcnIoJmNjaV9wbXUtPnBsYXRfZGV2aWNlLT5kZXYsICJJbnZhbGlkIENDSSBQTVUgY291bnRlciAlZFxuIiwgaWR4KTsKKwllbHNlCisJCXBtdV93cml0ZV9yZWdpc3Rlcih2YWx1ZSwgaWR4LCBDQ0lfUE1VX0NOVFIpOworfQorCitzdGF0aWMgdTY0IHBtdV9ldmVudF91cGRhdGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXU2NCBkZWx0YSwgcHJldl9yYXdfY291bnQsIG5ld19yYXdfY291bnQ7CisKKwlkbyB7CisJCXByZXZfcmF3X2NvdW50ID0gbG9jYWw2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOworCQluZXdfcmF3X2NvdW50ID0gcG11X3JlYWRfY291bnRlcihldmVudCk7CisJfSB3aGlsZSAobG9jYWw2NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXZfcmF3X2NvdW50LAorCQkgbmV3X3Jhd19jb3VudCkgIT0gcHJldl9yYXdfY291bnQpOworCisJZGVsdGEgPSAobmV3X3Jhd19jb3VudCAtIHByZXZfcmF3X2NvdW50KSAmIENDSV9QTVVfQ05UUl9NQVNLOworCisJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCisJcmV0dXJuIG5ld19yYXdfY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIHBtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlwbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsKK30KKwordm9pZCBwbXVfZXZlbnRfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJLyoKKwkgKiBUaGUgQ0NJIFBNVSBjb3VudGVycyBoYXZlIGEgcGVyaW9kIG9mIDJeMzIuIFRvIGFjY291bnQgZm9yIHRoZQorCSAqIHBvc3NpYmxpdHkgb2YgZXh0cmVtZSBpbnRlcnJ1cHQgbGF0ZW5jeSB3ZSBwcm9ncmFtIGZvciBhIHBlcmlvZCBvZgorCSAqIGhhbGYgdGhhdC4gSG9wZWZ1bGx5IHdlIGNhbiBoYW5kbGUgdGhlIGludGVycnVwdCBiZWZvcmUgYW5vdGhlciAyXjMxCisJICogZXZlbnRzIG9jY3VyIGFuZCB0aGUgY291bnRlciBvdmVydGFrZXMgaXRzIHByZXZpb3VzIHZhbHVlLgorCSAqLworCXU2NCB2YWwgPSAxVUxMIDw8IDMxOworCWxvY2FsNjRfc2V0KCZod2MtPnByZXZfY291bnQsIHZhbCk7CisJcG11X3dyaXRlX2NvdW50ZXIoZXZlbnQsIHZhbCk7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBwbXVfaGFuZGxlX2lycShpbnQgaXJxX251bSwgdm9pZCAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGFybV9wbXUgKmNjaV9wbXUgPSAoc3RydWN0IGFybV9wbXUgKilkZXY7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNjaV9wbXUtPmdldF9od19ldmVudHMoKTsKLQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCXN0cnVjdCBjY2lfcG11ICpjY2lfcG11ID0gZGV2OworCXN0cnVjdCBjY2lfcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gJnBtdS0+aHdfZXZlbnRzOwogCWludCBpZHgsIGhhbmRsZWQgPSBJUlFfTk9ORTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwotCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAkvKgogCSAqIEl0ZXJhdGUgb3ZlciBjb3VudGVycyBhbmQgdXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIHBlcmYgZXZlbnRzLgogCSAqIFRoaXMgc2hvdWxkIHdvcmsgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGhhdmUgcGVyLWNvdW50ZXIgb3ZlcmZsb3cKQEAgLTQwMywxNTQgKzQ4NSw0MDcgQEAKIAogCQlwbXVfd3JpdGVfcmVnaXN0ZXIoQ0NJX1BNVV9PVlJGTFdfRkxBRywgaWR4LCBDQ0lfUE1VX09WUkZMVyk7CiAKKwkJcG11X2V2ZW50X3VwZGF0ZShldmVudCk7CisJCXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50KTsKIAkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOwotCi0JCWFybXBtdV9ldmVudF91cGRhdGUoZXZlbnQpOwotCQlwZXJmX3NhbXBsZV9kYXRhX2luaXQoJmRhdGEsIDAsIGh3X2NvdW50ZXItPmxhc3RfcGVyaW9kKTsKLQkJaWYgKCFhcm1wbXVfZXZlbnRfc2V0X3BlcmlvZChldmVudCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgJmRhdGEsIHJlZ3MpKQotCQkJY2NpX3BtdS0+ZGlzYWJsZShldmVudCk7CiAJfQogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAotc3RhdGljIHZvaWQgcG11X2ZyZWVfaXJxKHN0cnVjdCBhcm1fcG11ICpjY2lfcG11KQorc3RhdGljIGludCBjY2lfcG11X2dldF9odyhzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSkKIHsKLQlpbnQgaTsKKwlpbnQgcmV0ID0gcG11X3JlcXVlc3RfaXJxKGNjaV9wbXUsIHBtdV9oYW5kbGVfaXJxKTsKKwlpZiAocmV0KSB7CisJCXBtdV9mcmVlX2lycShjY2lfcG11KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CiAKLQlmb3IgKGkgPSAwOyBpIDwgcG11LT5ucl9pcnFzOyBpKyspIHsKLQkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJnBtdS0+YWN0aXZlX2lycXMpKQotCQkJY29udGludWU7CitzdGF0aWMgdm9pZCBjY2lfcG11X3B1dF9odyhzdHJ1Y3QgY2NpX3BtdSAqY2NpX3BtdSkKK3sKKwlwbXVfZnJlZV9pcnEoY2NpX3BtdSk7Cit9CiAKLQkJZnJlZV9pcnEocG11LT5pcnFzW2ldLCBjY2lfcG11KTsKK3N0YXRpYyB2b2lkIGh3X3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOworCWF0b21pY190ICphY3RpdmVfZXZlbnRzID0gJmNjaV9wbXUtPmFjdGl2ZV9ldmVudHM7CisJc3RydWN0IG11dGV4ICpyZXNlcnZlX211dGV4ID0gJmNjaV9wbXUtPnJlc2VydmVfbXV0ZXg7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfbXV0ZXhfbG9jayhhY3RpdmVfZXZlbnRzLCByZXNlcnZlX211dGV4KSkgeworCQljY2lfcG11X3B1dF9odyhjY2lfcG11KTsKKwkJbXV0ZXhfdW5sb2NrKHJlc2VydmVfbXV0ZXgpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCBjY2lfcG11X2VuYWJsZShzdHJ1Y3QgcG11ICpwbXUpCiB7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KHBtdSk7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSAmY2NpX3BtdS0+aHdfZXZlbnRzOworCWludCBlbmFibGVkID0gYml0bWFwX3dlaWdodChod19ldmVudHMtPnVzZWRfbWFzaywgY2NpX3BtdS0+bnVtX2V2ZW50cyk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNjaV9wbXUtPmdldF9od19ldmVudHMoKTsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdfY291bnRlciA9ICZldmVudC0+aHc7Ci0JaW50IGlkeCA9IGh3X2NvdW50ZXItPmlkeDsKLQotCWlmICh1bmxpa2VseSghcG11X2lzX3ZhbGlkX2NvdW50ZXIoY2NpX3BtdSwgaWR4KSkpIHsKLQkJZGV2X2VycigmY2NpX3BtdS0+cGxhdF9kZXZpY2UtPmRldiwgIkludmFsaWQgQ0NJIFBNVSBjb3VudGVyICVkXG4iLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7Ci0KLQkvKiBDb25maWd1cmUgdGhlIGV2ZW50IHRvIGNvdW50LCB1bmxlc3MgeW91IGFyZSBjb3VudGluZyBjeWNsZXMgKi8KLQlpZiAoaWR4ICE9IENDSV9QTVVfQ1lDTEVfQ05UUl9JRFgpCi0JCXBtdV9zZXRfZXZlbnQoaWR4LCBod19jb3VudGVyLT5jb25maWdfYmFzZSk7Ci0KLQlwbXVfZW5hYmxlX2NvdW50ZXIoaWR4KTsKLQotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7Ci0Jc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3X2NvdW50ZXIgPSAmZXZlbnQtPmh3OwotCWludCBpZHggPSBod19jb3VudGVyLT5pZHg7Ci0KLQlpZiAodW5saWtlbHkoIXBtdV9pc192YWxpZF9jb3VudGVyKGNjaV9wbXUsIGlkeCkpKSB7Ci0JCWRldl9lcnIoJmNjaV9wbXUtPnBsYXRfZGV2aWNlLT5kZXYsICJJbnZhbGlkIENDSSBQTVUgY291bnRlciAlZFxuIiwgaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCXBtdV9kaXNhYmxlX2NvdW50ZXIoaWR4KTsKLX0KLQotc3RhdGljIHZvaWQgcG11X3N0YXJ0KHN0cnVjdCBhcm1fcG11ICpjY2lfcG11KQotewogCXUzMiB2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzID0gY2NpX3BtdS0+Z2V0X2h3X2V2ZW50cygpOwogCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CisJaWYgKCFlbmFibGVkKQorCQlyZXR1cm47CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmh3X2V2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIAogCS8qIEVuYWJsZSBhbGwgdGhlIFBNVSBjb3VudGVycy4gKi8KIAl2YWwgPSByZWFkbF9yZWxheGVkKGNjaV9jdHJsX2Jhc2UgKyBDQ0lfUE1DUikgfCBDQ0lfUE1DUl9DRU47CiAJd3JpdGVsKHZhbCwgY2NpX2N0cmxfYmFzZSArIENDSV9QTUNSKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdfZXZlbnRzLT5wbXVfbG9jaywgZmxhZ3MpOwogCi0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmV2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgcG11X3N0b3Aoc3RydWN0IGFybV9wbXUgKmNjaV9wbXUpCitzdGF0aWMgdm9pZCBjY2lfcG11X2Rpc2FibGUoc3RydWN0IHBtdSAqcG11KQogewotCXUzMiB2YWw7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KHBtdSk7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSAmY2NpX3BtdS0+aHdfZXZlbnRzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHBtdV9od19ldmVudHMgKmV2ZW50cyA9IGNjaV9wbXUtPmdldF9od19ldmVudHMoKTsKKwl1MzIgdmFsOwogCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZod19ldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgUE1VIGNvdW50ZXJzLiAqLwogCXZhbCA9IHJlYWRsX3JlbGF4ZWQoY2NpX2N0cmxfYmFzZSArIENDSV9QTUNSKSAmIH5DQ0lfUE1DUl9DRU47CiAJd3JpdGVsKHZhbCwgY2NpX2N0cmxfYmFzZSArIENDSV9QTUNSKTsKLQotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3X2V2ZW50cy0+cG11X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHUzMiBwbXVfcmVhZF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3N0YXRpYyB2b2lkIGNjaV9wbXVfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgcG11X2ZsYWdzKQogewotCXN0cnVjdCBhcm1fcG11ICpjY2lfcG11ID0gdG9fYXJtX3BtdShldmVudC0+cG11KTsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdfY291bnRlciA9ICZldmVudC0+aHc7Ci0JaW50IGlkeCA9IGh3X2NvdW50ZXItPmlkeDsKLQl1MzIgdmFsdWU7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOworCXN0cnVjdCBjY2lfcG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzID0gJmNjaV9wbXUtPmh3X2V2ZW50czsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdjLT5pZHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogVG8gaGFuZGxlIGludGVycnVwdCBsYXRlbmN5LCB3ZSBhbHdheXMgcmVwcm9ncmFtIHRoZSBwZXJpb2QKKwkgKiByZWdhcmRsZXNzcyBvZiBQRVJGX0VGX1JFTE9BRC4KKwkgKi8KKwlpZiAocG11X2ZsYWdzICYgUEVSRl9FRl9SRUxPQUQpCisJCVdBUk5fT05fT05DRSghKGh3Yy0+c3RhdGUgJiBQRVJGX0hFU19VUFRPREFURSkpOworCisJaHdjLT5zdGF0ZSA9IDA7CiAKIAlpZiAodW5saWtlbHkoIXBtdV9pc192YWxpZF9jb3VudGVyKGNjaV9wbXUsIGlkeCkpKSB7CiAJCWRldl9lcnIoJmNjaV9wbXUtPnBsYXRfZGV2aWNlLT5kZXYsICJJbnZhbGlkIENDSSBQTVUgY291bnRlciAlZFxuIiwgaWR4KTsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAl9Ci0JdmFsdWUgPSBwbXVfcmVhZF9yZWdpc3RlcihpZHgsIENDSV9QTVVfQ05UUik7CiAKLQlyZXR1cm4gdmFsdWU7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZod19ldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CisKKwkvKiBDb25maWd1cmUgdGhlIGV2ZW50IHRvIGNvdW50LCB1bmxlc3MgeW91IGFyZSBjb3VudGluZyBjeWNsZXMgKi8KKwlpZiAoaWR4ICE9IENDSV9QTVVfQ1lDTEVfQ05UUl9JRFgpCisJCXBtdV9zZXRfZXZlbnQoaWR4LCBod2MtPmNvbmZpZ19iYXNlKTsKKworCXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50KTsKKwlwbXVfZW5hYmxlX2NvdW50ZXIoaWR4KTsKKworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZod19ldmVudHMtPnBtdV9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBtdV93cml0ZV9jb3VudGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyIHZhbHVlKQorc3RhdGljIHZvaWQgY2NpX3BtdV9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IHBtdV9mbGFncykKIHsKLQlzdHJ1Y3QgYXJtX3BtdSAqY2NpX3BtdSA9IHRvX2FybV9wbXUoZXZlbnQtPnBtdSk7Ci0Jc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3X2NvdW50ZXIgPSAmZXZlbnQtPmh3OwotCWludCBpZHggPSBod19jb3VudGVyLT5pZHg7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod2MtPmlkeDsKIAotCWlmICh1bmxpa2VseSghcG11X2lzX3ZhbGlkX2NvdW50ZXIoY2NpX3BtdSwgaWR4KSkpCisJaWYgKGh3Yy0+c3RhdGUgJiBQRVJGX0hFU19TVE9QUEVEKQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkoIXBtdV9pc192YWxpZF9jb3VudGVyKGNjaV9wbXUsIGlkeCkpKSB7CiAJCWRldl9lcnIoJmNjaV9wbXUtPnBsYXRfZGV2aWNlLT5kZXYsICJJbnZhbGlkIENDSSBQTVUgY291bnRlciAlZFxuIiwgaWR4KTsKLQllbHNlCi0JCXBtdV93cml0ZV9yZWdpc3Rlcih2YWx1ZSwgaWR4LCBDQ0lfUE1VX0NOVFIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSBhbHdheXMgcmVwcm9ncmFtIHRoZSBjb3VudGVyLCBzbyBpZ25vcmUgUEVSRl9FRl9VUERBVEUuIFNlZQorCSAqIGNjaV9wbXVfc3RhcnQoKQorCSAqLworCXBtdV9kaXNhYmxlX2NvdW50ZXIoaWR4KTsKKwlwbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsKKwlod2MtPnN0YXRlIHw9IFBFUkZfSEVTX1NUT1BQRUQgfCBQRVJGX0hFU19VUFRPREFURTsKIH0KIAotc3RhdGljIGludCBjY2lfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKmNjaV9wbXUsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGNjaV9wbXVfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQogewotCSpjY2lfcG11ID0gKHN0cnVjdCBhcm1fcG11KXsKLQkJLm5hbWUJCSAgPSBwbXVfbmFtZXNbcHJvYmVfY2NpX3JldmlzaW9uKCldLAotCQkubWF4X3BlcmlvZCAgICAgICA9ICgxTExVIDw8IDMyKSAtIDEsCi0JCS5nZXRfaHdfZXZlbnRzICAgID0gcG11X2dldF9od19ldmVudHMsCi0JCS5nZXRfZXZlbnRfaWR4ICAgID0gcG11X2dldF9ldmVudF9pZHgsCi0JCS5tYXBfZXZlbnQgICAgICAgID0gcG11X21hcF9ldmVudCwKLQkJLnJlcXVlc3RfaXJxICAgICAgPSBwbXVfcmVxdWVzdF9pcnEsCi0JCS5oYW5kbGVfaXJxICAgICAgID0gcG11X2hhbmRsZV9pcnEsCi0JCS5mcmVlX2lycSAgICAgICAgID0gcG11X2ZyZWVfaXJxLAotCQkuZW5hYmxlICAgICAgICAgICA9IHBtdV9lbmFibGVfZXZlbnQsCi0JCS5kaXNhYmxlICAgICAgICAgID0gcG11X2Rpc2FibGVfZXZlbnQsCi0JCS5zdGFydCAgICAgICAgICAgID0gcG11X3N0YXJ0LAotCQkuc3RvcCAgICAgICAgICAgICA9IHBtdV9zdG9wLAotCQkucmVhZF9jb3VudGVyICAgICA9IHBtdV9yZWFkX2NvdW50ZXIsCi0JCS53cml0ZV9jb3VudGVyICAgID0gcG11X3dyaXRlX2NvdW50ZXIsCisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOworCXN0cnVjdCBjY2lfcG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzID0gJmNjaV9wbXUtPmh3X2V2ZW50czsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4OworCWludCBlcnIgPSAwOworCisJcGVyZl9wbXVfZGlzYWJsZShldmVudC0+cG11KTsKKworCS8qIElmIHdlIGRvbid0IGhhdmUgYSBzcGFjZSBmb3IgdGhlIGNvdW50ZXIgdGhlbiBmaW5pc2ggZWFybHkuICovCisJaWR4ID0gcG11X2dldF9ldmVudF9pZHgoaHdfZXZlbnRzLCBldmVudCk7CisJaWYgKGlkeCA8IDApIHsKKwkJZXJyID0gaWR4OworCQlnb3RvIG91dDsKKwl9CisKKwlldmVudC0+aHcuaWR4ID0gaWR4OworCWh3X2V2ZW50cy0+ZXZlbnRzW2lkeF0gPSBldmVudDsKKworCWh3Yy0+c3RhdGUgPSBQRVJGX0hFU19TVE9QUEVEIHwgUEVSRl9IRVNfVVBUT0RBVEU7CisJaWYgKGZsYWdzICYgUEVSRl9FRl9TVEFSVCkKKwkJY2NpX3BtdV9zdGFydChldmVudCwgUEVSRl9FRl9SRUxPQUQpOworCisJLyogUHJvcGFnYXRlIG91ciBjaGFuZ2VzIHRvIHRoZSB1c2Vyc3BhY2UgbWFwcGluZy4gKi8KKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CisKK291dDoKKwlwZXJmX3BtdV9lbmFibGUoZXZlbnQtPnBtdSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgY2NpX3BtdV9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUgPSB0b19jY2lfcG11KGV2ZW50LT5wbXUpOworCXN0cnVjdCBjY2lfcG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzID0gJmNjaV9wbXUtPmh3X2V2ZW50czsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdjLT5pZHg7CisKKwljY2lfcG11X3N0b3AoZXZlbnQsIFBFUkZfRUZfVVBEQVRFKTsKKwlod19ldmVudHMtPmV2ZW50c1tpZHhdID0gTlVMTDsKKwljbGVhcl9iaXQoaWR4LCBod19ldmVudHMtPnVzZWRfbWFzayk7CisKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2V2ZW50KHN0cnVjdCBjY2lfcG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzLAorCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKGlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoZXZlbnQtPnN0YXRlIDwgUEVSRl9FVkVOVF9TVEFURV9PRkYpCisJCXJldHVybiAxOworCisJaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX09GRiAmJiAhZXZlbnQtPmF0dHIuZW5hYmxlX29uX2V4ZWMpCisJCXJldHVybiAxOworCisJcmV0dXJuIHBtdV9nZXRfZXZlbnRfaWR4KGh3X2V2ZW50cywgZXZlbnQpID49IDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2dyb3VwKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqc2libGluZywgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7CisJc3RydWN0IGNjaV9wbXVfaHdfZXZlbnRzIGZha2VfcG11ID0geworCQkvKgorCQkgKiBJbml0aWFsaXNlIHRoZSBmYWtlIFBNVS4gV2Ugb25seSBuZWVkIHRvIHBvcHVsYXRlIHRoZQorCQkgKiB1c2VkX21hc2sgZm9yIHRoZSBwdXJwb3NlcyBvZiB2YWxpZGF0aW9uLgorCQkgKi8KKwkJLnVzZWRfbWFzayA9IENQVV9CSVRTX05PTkUsCisJfTsKKworCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBsZWFkZXIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2libGluZywgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoIXZhbGlkYXRlX2V2ZW50KCZmYWtlX3BtdSwgc2libGluZykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXZhbGlkYXRlX2V2ZW50KCZmYWtlX3BtdSwgZXZlbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfX2h3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJaW50IG1hcHBpbmc7CisKKwltYXBwaW5nID0gcG11X21hcF9ldmVudChldmVudCk7CisKKwlpZiAobWFwcGluZyA8IDApIHsKKwkJcHJfZGVidWcoImV2ZW50ICV4OiVsbHggbm90IHN1cHBvcnRlZFxuIiwgZXZlbnQtPmF0dHIudHlwZSwKKwkJCSBldmVudC0+YXR0ci5jb25maWcpOworCQlyZXR1cm4gbWFwcGluZzsKKwl9CisKKwkvKgorCSAqIFdlIGRvbid0IGFzc2lnbiBhbiBpbmRleCB1bnRpbCB3ZSBhY3R1YWxseSBwbGFjZSB0aGUgZXZlbnQgb250bworCSAqIGhhcmR3YXJlLiBVc2UgLTEgdG8gc2lnbmlmeSB0aGF0IHdlIGhhdmVuJ3QgZGVjaWRlZCB3aGVyZSB0byBwdXQgaXQKKwkgKiB5ZXQuCisJICovCisJaHdjLT5pZHgJCT0gLTE7CisJaHdjLT5jb25maWdfYmFzZQk9IDA7CisJaHdjLT5jb25maWcJCT0gMDsKKwlod2MtPmV2ZW50X2Jhc2UJCT0gMDsKKworCS8qCisJICogU3RvcmUgdGhlIGV2ZW50IGVuY29kaW5nIGludG8gdGhlIGNvbmZpZ19iYXNlIGZpZWxkLgorCSAqLworCWh3Yy0+Y29uZmlnX2Jhc2UJICAgIHw9ICh1bnNpZ25lZCBsb25nKW1hcHBpbmc7CisKKwkvKgorCSAqIExpbWl0IHRoZSBzYW1wbGVfcGVyaW9kIHRvIGhhbGYgb2YgdGhlIGNvdW50ZXIgd2lkdGguIFRoYXQgd2F5LCB0aGUKKwkgKiBuZXcgY291bnRlciB2YWx1ZSBpcyBmYXIgbGVzcyBsaWtlbHkgdG8gb3ZlcnRha2UgdGhlIHByZXZpb3VzIG9uZQorCSAqIHVubGVzcyB5b3UgaGF2ZSBzb21lIHNlcmlvdXMgSVJRIGxhdGVuY3kgaXNzdWVzLgorCSAqLworCWh3Yy0+c2FtcGxlX3BlcmlvZCAgPSBDQ0lfUE1VX0NOVFJfTUFTSyA+PiAxOworCWh3Yy0+bGFzdF9wZXJpb2QgICAgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CisJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CisKKwlpZiAoZXZlbnQtPmdyb3VwX2xlYWRlciAhPSBldmVudCkgeworCQlpZiAodmFsaWRhdGVfZ3JvdXAoZXZlbnQpICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjY2lfcG11X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBjY2lfcG11ICpjY2lfcG11ID0gdG9fY2NpX3BtdShldmVudC0+cG11KTsKKwlhdG9taWNfdCAqYWN0aXZlX2V2ZW50cyA9ICZjY2lfcG11LT5hY3RpdmVfZXZlbnRzOworCWludCBlcnIgPSAwOworCWludCBjcHU7CisKKwlpZiAoZXZlbnQtPmF0dHIudHlwZSAhPSBldmVudC0+cG11LT50eXBlKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCS8qIFNoYXJlZCBieSBhbGwgQ1BVcywgbm8gbWVhbmluZ2Z1bCBzdGF0ZSB0byBzYW1wbGUgKi8KKwlpZiAoaXNfc2FtcGxpbmdfZXZlbnQoZXZlbnQpIHx8IGV2ZW50LT5hdHRhY2hfc3RhdGUgJiBQRVJGX0FUVEFDSF9UQVNLKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBXZSBoYXZlIG5vIGZpbHRlcmluZyBvZiBhbnkga2luZCAqLworCWlmIChldmVudC0+YXR0ci5leGNsdWRlX3VzZXIJfHwKKwkgICAgZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwJfHwKKwkgICAgZXZlbnQtPmF0dHIuZXhjbHVkZV9odgl8fAorCSAgICBldmVudC0+YXR0ci5leGNsdWRlX2lkbGUJfHwKKwkgICAgZXZlbnQtPmF0dHIuZXhjbHVkZV9ob3N0CXx8CisJICAgIGV2ZW50LT5hdHRyLmV4Y2x1ZGVfZ3Vlc3QpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBGb2xsb3dpbmcgdGhlIGV4YW1wbGUgc2V0IGJ5IG90aGVyICJ1bmNvcmUiIFBNVXMsIHdlIGFjY2VwdCBhbnkgQ1BVCisJICogYW5kIHJld3JpdGUgaXRzIGFmZmluaXR5IGR5bmFtaWNhbGx5IHJhdGhlciB0aGFuIGhhdmluZyBwZXJmIGNvcmUKKwkgKiBoYW5kbGUgY3B1ID09IC0xIGFuZCBwaWQgPT0gLTEgZm9yIHRoaXMgY2FzZS4KKwkgKgorCSAqIFRoZSBwZXJmIGNvcmUgd2lsbCBwaW4gb25saW5lIENQVXMgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGNhbGwgYW5kCisJICogdGhlIGV2ZW50IGJlaW5nIGluc3RhbGxlZCBpbnRvIGl0cyBjb250ZXh0LCBzbyB0aGUgUE1VJ3MgQ1BVIGNhbid0CisJICogY2hhbmdlIHVuZGVyIG91ciBmZWV0LgorCSAqLworCWNwdSA9IGNwdW1hc2tfZmlyc3QoJmNjaV9wbXUtPmNwdXMpOworCWlmIChldmVudC0+Y3B1IDwgMCB8fCBjcHUgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlldmVudC0+Y3B1ID0gY3B1OworCisJZXZlbnQtPmRlc3Ryb3kgPSBod19wZXJmX2V2ZW50X2Rlc3Ryb3k7CisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKGFjdGl2ZV9ldmVudHMpKSB7CisJCW11dGV4X2xvY2soJmNjaV9wbXUtPnJlc2VydmVfbXV0ZXgpOworCQlpZiAoYXRvbWljX3JlYWQoYWN0aXZlX2V2ZW50cykgPT0gMCkKKwkJCWVyciA9IGNjaV9wbXVfZ2V0X2h3KGNjaV9wbXUpOworCQlpZiAoIWVycikKKwkJCWF0b21pY19pbmMoYWN0aXZlX2V2ZW50cyk7CisJCW11dGV4X3VubG9jaygmY2NpX3BtdS0+cmVzZXJ2ZV9tdXRleCk7CisJfQorCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBfX2h3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CisJaWYgKGVycikKKwkJaHdfcGVyZl9ldmVudF9kZXN0cm95KGV2ZW50KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBtdV9hdHRyX2NwdW1hc2tfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWludCBuID0gY3B1bGlzdF9zY25wcmludGYoYnVmLCBQQUdFX1NJWkUgLSAyLCAmcG11LT5jcHVzKTsKKworCWJ1ZltuKytdID0gJ1xuJzsKKwlidWZbbl0gPSAnXDAnOworCXJldHVybiBuOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY3B1bWFzaywgU19JUlVHTywgcG11X2F0dHJfY3B1bWFza19zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBtdV9hdHRyc1tdID0geworCSZkZXZfYXR0cl9jcHVtYXNrLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBtdV9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IHBtdV9hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwbXVfYXR0cl9ncm91cHNbXSA9IHsKKwkmcG11X2F0dHJfZ3JvdXAsCisJTlVMTAorfTsKKworc3RhdGljIGludCBjY2lfcG11X2luaXQoc3RydWN0IGNjaV9wbXUgKmNjaV9wbXUsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY2hhciAqbmFtZSA9IHBtdV9uYW1lc1twcm9iZV9jY2lfcmV2aXNpb24oKV07CisJY2NpX3BtdS0+cG11ID0gKHN0cnVjdCBwbXUpIHsKKwkJLm5hbWUJCT0gcG11X25hbWVzW3Byb2JlX2NjaV9yZXZpc2lvbigpXSwKKwkJLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQsCisJCS5wbXVfZW5hYmxlCT0gY2NpX3BtdV9lbmFibGUsCisJCS5wbXVfZGlzYWJsZQk9IGNjaV9wbXVfZGlzYWJsZSwKKwkJLmV2ZW50X2luaXQJPSBjY2lfcG11X2V2ZW50X2luaXQsCisJCS5hZGQJCT0gY2NpX3BtdV9hZGQsCisJCS5kZWwJCT0gY2NpX3BtdV9kZWwsCisJCS5zdGFydAkJPSBjY2lfcG11X3N0YXJ0LAorCQkuc3RvcAkJPSBjY2lfcG11X3N0b3AsCisJCS5yZWFkCQk9IHBtdV9yZWFkLAorCQkuYXR0cl9ncm91cHMJPSBwbXVfYXR0cl9ncm91cHMsCiAJfTsKIAogCWNjaV9wbXUtPnBsYXRfZGV2aWNlID0gcGRldjsKIAljY2lfcG11LT5udW1fZXZlbnRzID0gcG11X2dldF9tYXhfY291bnRlcnMoKTsKIAotCXJldHVybiBhcm1wbXVfcmVnaXN0ZXIoY2NpX3BtdSwgLTEpOworCXJldHVybiBwZXJmX3BtdV9yZWdpc3RlcigmY2NpX3BtdS0+cG11LCBuYW1lLCAtMSk7CiB9CiAKK3N0YXRpYyBpbnQgY2NpX3BtdV9jcHVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXVuc2lnbmVkIGludCBjcHUgPSAobG9uZyloY3B1OworCXVuc2lnbmVkIGludCB0YXJnZXQ7CisKKwlzd2l0Y2ggKGFjdGlvbiAmIH5DUFVfVEFTS1NfRlJPWkVOKSB7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCQlpZiAoIWNwdW1hc2tfdGVzdF9hbmRfY2xlYXJfY3B1KGNwdSwgJnBtdS0+Y3B1cykpCisJCQlicmVhazsKKwkJdGFyZ2V0ID0gY3B1bWFza19hbnlfYnV0KGNwdV9vbmxpbmVfbWFzaywgY3B1KTsKKwkJaWYgKHRhcmdldCA8IDApIC8vIFVQLCBsYXN0IENQVQorCQkJYnJlYWs7CisJCS8qCisJCSAqIFRPRE86IG1pZ3JhdGUgY29udGV4dCBvbmNlIGNvcmUgcmFjZXMgb24gZXZlbnQtPmN0eCBoYXZlCisJCSAqIGJlZW4gZml4ZWQuCisJCSAqLworCQljcHVtYXNrX3NldF9jcHUodGFyZ2V0LCAmcG11LT5jcHVzKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNjaV9wbXVfY3B1X25iID0geworCS5ub3RpZmllcl9jYWxsCT0gY2NpX3BtdV9jcHVfbm90aWZpZXIsCisJLyoKKwkgKiB0byBtaWdyYXRlIHVuY29yZSBldmVudHMsIG91ciBub3RpZmllciBzaG91bGQgYmUgZXhlY3V0ZWQKKwkgKiBiZWZvcmUgcGVyZiBjb3JlJ3Mgbm90aWZpZXIuCisJICovCisJLnByaW9yaXR5CT0gQ1BVX1BSSV9QRVJGICsgMSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFybV9jY2lfcG11X21hdGNoZXNbXSA9IHsKIAl7CiAJCS5jb21wYXRpYmxlID0gImFybSxjY2ktNDAwLXBtdSIsCkBAIC02MDQsMTUgKzkzOSwxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwbXUtPmNjaV9wbXUgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCoocG11LT5jY2lfcG11KSksIEdGUF9LRVJORUwpOwotCWlmICghcG11LT5jY2lfcG11KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXBtdS0+aHdfZXZlbnRzLmV2ZW50cyA9IHBtdS0+ZXZlbnRzOwotCXBtdS0+aHdfZXZlbnRzLnVzZWRfbWFzayA9IHBtdS0+dXNlZF9tYXNrOwogCXJhd19zcGluX2xvY2tfaW5pdCgmcG11LT5od19ldmVudHMucG11X2xvY2spOworCW11dGV4X2luaXQoJnBtdS0+cmVzZXJ2ZV9tdXRleCk7CisJYXRvbWljX3NldCgmcG11LT5hY3RpdmVfZXZlbnRzLCAwKTsKKwljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCAmcG11LT5jcHVzKTsKIAotCXJldCA9IGNjaV9wbXVfaW5pdChwbXUtPmNjaV9wbXUsIHBkZXYpOworCXJldCA9IHJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY2NpX3BtdV9jcHVfbmIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjY2lfcG11X2luaXQocG11LCBwZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9icmNtc3RiX2dpc2IuYyBiL2RyaXZlcnMvYnVzL2JyY21zdGJfZ2lzYi5jCmluZGV4IGYyY2Q2YTJkLi40NmRlOGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2J1cy9icmNtc3RiX2dpc2IuYworKysgYi9kcml2ZXJzL2J1cy9icmNtc3RiX2dpc2IuYwpAQCAtMjMsMzUgKzIzLDEwMyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKKyNpZmRlZiBDT05GSUdfQVJNCiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KKyNlbmRpZgogCi0jZGVmaW5lIEFSQl9USU1FUgkJCTB4MDA4Ci0jZGVmaW5lIEFSQl9FUlJfQ0FQX0NMUgkJCTB4N2U0CiAjZGVmaW5lICBBUkJfRVJSX0NBUF9DTEVBUgkJKDEgPDwgMCkKLSNkZWZpbmUgQVJCX0VSUl9DQVBfSElfQUREUgkJMHg3ZTgKLSNkZWZpbmUgQVJCX0VSUl9DQVBfQUREUgkJMHg3ZWMKLSNkZWZpbmUgQVJCX0VSUl9DQVBfREFUQQkJMHg3ZjAKLSNkZWZpbmUgQVJCX0VSUl9DQVBfU1RBVFVTCQkweDdmNAogI2RlZmluZSAgQVJCX0VSUl9DQVBfU1RBVFVTX1RJTUVPVVQJKDEgPDwgMTIpCiAjZGVmaW5lICBBUkJfRVJSX0NBUF9TVEFUVVNfVEVBCQkoMSA8PCAxMSkKICNkZWZpbmUgIEFSQl9FUlJfQ0FQX1NUQVRVU19CU19TSElGVAkoMSA8PCAyKQogI2RlZmluZSAgQVJCX0VSUl9DQVBfU1RBVFVTX0JTX01BU0sJMHgzYwogI2RlZmluZSAgQVJCX0VSUl9DQVBfU1RBVFVTX1dSSVRFCSgxIDw8IDEpCiAjZGVmaW5lICBBUkJfRVJSX0NBUF9TVEFUVVNfVkFMSUQJKDEgPDwgMCkKLSNkZWZpbmUgQVJCX0VSUl9DQVBfTUFTVEVSCQkweDdmOAorCitlbnVtIHsKKwlBUkJfVElNRVIsCisJQVJCX0VSUl9DQVBfQ0xSLAorCUFSQl9FUlJfQ0FQX0hJX0FERFIsCisJQVJCX0VSUl9DQVBfQUREUiwKKwlBUkJfRVJSX0NBUF9EQVRBLAorCUFSQl9FUlJfQ0FQX1NUQVRVUywKKwlBUkJfRVJSX0NBUF9NQVNURVIsCit9OworCitzdGF0aWMgY29uc3QgaW50IGdpc2Jfb2Zmc2V0c19iY203MDM4W10gPSB7CisJW0FSQl9USU1FUl0JCT0gMHgwMGMsCisJW0FSQl9FUlJfQ0FQX0NMUl0JPSAweDBjNCwKKwlbQVJCX0VSUl9DQVBfSElfQUREUl0JPSAtMSwKKwlbQVJCX0VSUl9DQVBfQUREUl0JPSAweDBjOCwKKwlbQVJCX0VSUl9DQVBfREFUQV0JPSAweDBjYywKKwlbQVJCX0VSUl9DQVBfU1RBVFVTXQk9IDB4MGQwLAorCVtBUkJfRVJSX0NBUF9NQVNURVJdCT0gLTEsCit9OworCitzdGF0aWMgY29uc3QgaW50IGdpc2Jfb2Zmc2V0c19iY203NDAwW10gPSB7CisJW0FSQl9USU1FUl0JCT0gMHgwMGMsCisJW0FSQl9FUlJfQ0FQX0NMUl0JPSAweDBjOCwKKwlbQVJCX0VSUl9DQVBfSElfQUREUl0JPSAtMSwKKwlbQVJCX0VSUl9DQVBfQUREUl0JPSAweDBjYywKKwlbQVJCX0VSUl9DQVBfREFUQV0JPSAweDBkMCwKKwlbQVJCX0VSUl9DQVBfU1RBVFVTXQk9IDB4MGQ0LAorCVtBUkJfRVJSX0NBUF9NQVNURVJdCT0gMHgwZDgsCit9OworCitzdGF0aWMgY29uc3QgaW50IGdpc2Jfb2Zmc2V0c19iY203NDM1W10gPSB7CisJW0FSQl9USU1FUl0JCT0gMHgwMGMsCisJW0FSQl9FUlJfQ0FQX0NMUl0JPSAweDE2OCwKKwlbQVJCX0VSUl9DQVBfSElfQUREUl0JPSAtMSwKKwlbQVJCX0VSUl9DQVBfQUREUl0JPSAweDE2YywKKwlbQVJCX0VSUl9DQVBfREFUQV0JPSAweDE3MCwKKwlbQVJCX0VSUl9DQVBfU1RBVFVTXQk9IDB4MTc0LAorCVtBUkJfRVJSX0NBUF9NQVNURVJdCT0gMHgxNzgsCit9OworCitzdGF0aWMgY29uc3QgaW50IGdpc2Jfb2Zmc2V0c19iY203NDQ1W10gPSB7CisJW0FSQl9USU1FUl0JCT0gMHgwMDgsCisJW0FSQl9FUlJfQ0FQX0NMUl0JPSAweDdlNCwKKwlbQVJCX0VSUl9DQVBfSElfQUREUl0JPSAweDdlOCwKKwlbQVJCX0VSUl9DQVBfQUREUl0JPSAweDdlYywKKwlbQVJCX0VSUl9DQVBfREFUQV0JPSAweDdmMCwKKwlbQVJCX0VSUl9DQVBfU1RBVFVTXQk9IDB4N2Y0LAorCVtBUkJfRVJSX0NBUF9NQVNURVJdCT0gMHg3ZjgsCit9OwogCiBzdHJ1Y3QgYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2UgewogCXZvaWQgX19pb21lbQkqYmFzZTsKKwljb25zdCBpbnQJKmdpc2Jfb2Zmc2V0czsKIAlzdHJ1Y3QgbXV0ZXgJbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7CiAJdTMyIHZhbGlkX21hc2s7CiAJY29uc3QgY2hhciAqbWFzdGVyX25hbWVzW3NpemVvZih1MzIpICogQklUU19QRVJfQllURV07CisJdTMyIHNhdmVkX3RpbWVvdXQ7CiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKGJyY21zdGJfZ2lzYl9hcmJfZGV2aWNlX2xpc3QpOwogCitzdGF0aWMgdTMyIGdpc2JfcmVhZChzdHJ1Y3QgYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2UgKmdkZXYsIGludCByZWcpCit7CisJaW50IG9mZnNldCA9IGdkZXYtPmdpc2Jfb2Zmc2V0c1tyZWddOworCisJLyogcmV0dXJuIDEgaWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgaGF2ZSBBUkJfRVJSX0NBUF9NQVNURVIgKi8KKwlpZiAob2Zmc2V0ID09IC0xKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBpb3JlYWQzMihnZGV2LT5iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZ2lzYl93cml0ZShzdHJ1Y3QgYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2UgKmdkZXYsIHUzMiB2YWwsIGludCByZWcpCit7CisJaW50IG9mZnNldCA9IGdkZXYtPmdpc2Jfb2Zmc2V0c1tyZWddOworCisJaWYgKG9mZnNldCA9PSAtMSkKKwkJcmV0dXJuOworCWlvd3JpdGUzMih2YWwsIGdkZXYtPmJhc2UgKyByZWcpOworfQorCiBzdGF0aWMgc3NpemVfdCBnaXNiX2FyYl9nZXRfdGltZW91dChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgICBjaGFyICpidWYpCkBAIC02MSw3ICsxMjksNyBAQAogCXUzMiB0aW1lb3V0OwogCiAJbXV0ZXhfbG9jaygmZ2Rldi0+bG9jayk7Ci0JdGltZW91dCA9IGlvcmVhZDMyKGdkZXYtPmJhc2UgKyBBUkJfVElNRVIpOworCXRpbWVvdXQgPSBnaXNiX3JlYWQoZ2RldiwgQVJCX1RJTUVSKTsKIAltdXRleF91bmxvY2soJmdkZXYtPmxvY2spOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQiLCB0aW1lb3V0KTsKQEAgLTgzLDcgKzE1MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZ2Rldi0+bG9jayk7Ci0JaW93cml0ZTMyKHZhbCwgZ2Rldi0+YmFzZSArIEFSQl9USU1FUik7CisJZ2lzYl93cml0ZShnZGV2LCB2YWwsIEFSQl9USU1FUik7CiAJbXV0ZXhfdW5sb2NrKCZnZGV2LT5sb2NrKTsKIAogCXJldHVybiBjb3VudDsKQEAgLTExMCwxOCArMTc4LDE4IEBACiAJY29uc3QgY2hhciAqbV9uYW1lOwogCWNoYXIgbV9mbXRbMTFdOwogCi0JY2FwX3N0YXR1cyA9IGlvcmVhZDMyKGdkZXYtPmJhc2UgKyBBUkJfRVJSX0NBUF9TVEFUVVMpOworCWNhcF9zdGF0dXMgPSBnaXNiX3JlYWQoZ2RldiwgQVJCX0VSUl9DQVBfU1RBVFVTKTsKIAogCS8qIEludmFsaWQgY2FwdHVyZWQgYWRkcmVzcywgYmFpbCBvdXQgKi8KIAlpZiAoIShjYXBfc3RhdHVzICYgQVJCX0VSUl9DQVBfU1RBVFVTX1ZBTElEKSkKIAkJcmV0dXJuIDE7CiAKIAkvKiBSZWFkIHRoZSBhZGRyZXNzIGFuZCBtYXN0ZXIgKi8KLQlhcmJfYWRkciA9IGlvcmVhZDMyKGdkZXYtPmJhc2UgKyBBUkJfRVJSX0NBUF9BRERSKSAmIDB4ZmZmZmZmZmY7CisJYXJiX2FkZHIgPSBnaXNiX3JlYWQoZ2RldiwgQVJCX0VSUl9DQVBfQUREUikgJiAweGZmZmZmZmZmOwogI2lmIChJU19FTkFCTEVEKENPTkZJR19QSFlTX0FERFJfVF82NEJJVCkpCi0JYXJiX2FkZHIgfD0gKHU2NClpb3JlYWQzMihnZGV2LT5iYXNlICsgQVJCX0VSUl9DQVBfSElfQUREUikgPDwgMzI7CisJYXJiX2FkZHIgfD0gKHU2NClnaXNiX3JlYWQoZ2RldiwgQVJCX0VSUl9DQVBfSElfQUREUikgPDwgMzI7CiAjZW5kaWYKLQltYXN0ZXIgPSBpb3JlYWQzMihnZGV2LT5iYXNlICsgQVJCX0VSUl9DQVBfTUFTVEVSKTsKKwltYXN0ZXIgPSBnaXNiX3JlYWQoZ2RldiwgQVJCX0VSUl9DQVBfTUFTVEVSKTsKIAogCW1fbmFtZSA9IGJyY21zdGJfZ2lzYl9tYXN0ZXJfdG9fc3RyKGdkZXYsIG1hc3Rlcik7CiAJaWYgKCFtX25hbWUpIHsKQEAgLTEzNiwxMSArMjA0LDEyIEBACiAJCW1fbmFtZSk7CiAKIAkvKiBjbGVhciB0aGUgR0lTQiBlcnJvciAqLwotCWlvd3JpdGUzMihBUkJfRVJSX0NBUF9DTEVBUiwgZ2Rldi0+YmFzZSArIEFSQl9FUlJfQ0FQX0NMUik7CisJZ2lzYl93cml0ZShnZGV2LCBBUkJfRVJSX0NBUF9DTEVBUiwgQVJCX0VSUl9DQVBfQ0xSKTsKIAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0FSTQogc3RhdGljIGludCBicmNtc3RiX2J1c19lcnJvcl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKIAkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtMTU5LDEyICsyMjgsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQotdm9pZCBfX2luaXQgYnJjbXN0Yl9ob29rX2ZhdWx0X2NvZGUodm9pZCkKLXsKLQlob29rX2ZhdWx0X2NvZGUoMjIsIGJyY21zdGJfYnVzX2Vycm9yX2hhbmRsZXIsIFNJR0JVUywgMCwKLQkJCSJpbXByZWNpc2UgZXh0ZXJuYWwgYWJvcnQiKTsKLX0KKyNlbmRpZgogCiBzdGF0aWMgaXJxcmV0dXJuX3QgYnJjbXN0Yl9naXNiX3RpbWVvdXRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CkBAIC0xOTIsMTAgKzI1NiwyMCBAQAogCS5hdHRycyA9IGdpc2JfYXJiX3N5c2ZzX2F0dHJzLAogfTsKIAotc3RhdGljIGludCBicmNtc3RiX2dpc2JfYXJiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBicmNtc3RiX2dpc2JfYXJiX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGdpc2ItYXJiIiwgICAgICAgICAuZGF0YSA9IGdpc2Jfb2Zmc2V0c19iY203NDQ1IH0sCisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTc0NDUtZ2lzYi1hcmIiLCAuZGF0YSA9IGdpc2Jfb2Zmc2V0c19iY203NDQ1IH0sCisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTc0MzUtZ2lzYi1hcmIiLCAuZGF0YSA9IGdpc2Jfb2Zmc2V0c19iY203NDM1IH0sCisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTc0MDAtZ2lzYi1hcmIiLCAuZGF0YSA9IGdpc2Jfb2Zmc2V0c19iY203NDAwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTcwMzgtZ2lzYi1hcmIiLCAuZGF0YSA9IGdpc2Jfb2Zmc2V0c19iY203MDM4IH0sCisJeyB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYnJjbXN0Yl9naXNiX2FyYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2UgKmdkZXY7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CiAJc3RydWN0IHJlc291cmNlICpyOwogCWludCBlcnIsIHRpbWVvdXRfaXJxLCB0ZWFfaXJxOwogCXVuc2lnbmVkIGludCBudW1fbWFzdGVycywgaiA9IDA7CkBAIC0yMTYsNiArMjkwLDEzIEBACiAJaWYgKElTX0VSUihnZGV2LT5iYXNlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZ2Rldi0+YmFzZSk7CiAKKwlvZl9pZCA9IG9mX21hdGNoX25vZGUoYnJjbXN0Yl9naXNiX2FyYl9vZl9tYXRjaCwgZG4pOworCWlmICghb2ZfaWQpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gbG9vayB1cCBjb21wYXRpYmxlIHN0cmluZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlnZGV2LT5naXNiX29mZnNldHMgPSBvZl9pZC0+ZGF0YTsKKwogCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgdGltZW91dF9pcnEsCiAJCQkJYnJjbXN0Yl9naXNiX3RpbWVvdXRfaGFuZGxlciwgMCwgcGRldi0+bmFtZSwKIAkJCQlnZGV2KTsKQEAgLTI2MSwyOSArMzQyLDYzIEBACiAKIAlsaXN0X2FkZF90YWlsKCZnZGV2LT5uZXh0LCAmYnJjbXN0Yl9naXNiX2FyYl9kZXZpY2VfbGlzdCk7CiAKKyNpZmRlZiBDT05GSUdfQVJNCisJaG9va19mYXVsdF9jb2RlKDIyLCBicmNtc3RiX2J1c19lcnJvcl9oYW5kbGVyLCBTSUdCVVMsIDAsCisJCQkiaW1wcmVjaXNlIGV4dGVybmFsIGFib3J0Iik7CisjZW5kaWYKKwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyZWdpc3RlcmVkIG1lbTogJXAsIGlycXM6ICVkLCAlZFxuIiwKIAkJCWdkZXYtPmJhc2UsIHRpbWVvdXRfaXJxLCB0ZWFfaXJxKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBicmNtc3RiX2dpc2JfYXJiX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJicmNtLGdpc2ItYXJiIiB9LAotCXsgfSwKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgYnJjbXN0Yl9naXNiX2FyYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGJyY21zdGJfZ2lzYl9hcmJfZGV2aWNlICpnZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlnZGV2LT5zYXZlZF90aW1lb3V0ID0gZ2lzYl9yZWFkKGdkZXYsIEFSQl9USU1FUik7CisKKwlyZXR1cm4gMDsKK30KKworLyogTWFrZSBzdXJlIHdlIHByb3ZpZGUgdGhlIHNhbWUgdGltZW91dCB2YWx1ZSB0aGF0IHdhcyBjb25maWd1cmVkIGJlZm9yZSwgYW5kCisgKiBkbyB0aGlzIGJlZm9yZSB0aGUgR0lTQiB0aW1lb3V0IGludGVycnVwdCBoYW5kbGVyIGhhcyBhbnkgY2hhbmNlIHRvIHJ1bi4KKyAqLworc3RhdGljIGludCBicmNtc3RiX2dpc2JfYXJiX3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBicmNtc3RiX2dpc2JfYXJiX2RldmljZSAqZ2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZ2lzYl93cml0ZShnZGV2LCBnZGV2LT5zYXZlZF90aW1lb3V0LCBBUkJfVElNRVIpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBicmNtc3RiX2dpc2JfYXJiX3N1c3BlbmQgICAgICAgTlVMTAorI2RlZmluZSBicmNtc3RiX2dpc2JfYXJiX3Jlc3VtZV9ub2lycSAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBicmNtc3RiX2dpc2JfYXJiX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IGJyY21zdGJfZ2lzYl9hcmJfc3VzcGVuZCwKKwkucmVzdW1lX25vaXJxCT0gYnJjbXN0Yl9naXNiX2FyYl9yZXN1bWVfbm9pcnEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBicmNtc3RiX2dpc2JfYXJiX2RyaXZlciA9IHsKLQkucHJvYmUJPSBicmNtc3RiX2dpc2JfYXJiX3Byb2JlLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImJyY20tZ2lzYi1hcmIiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm9mX21hdGNoX3RhYmxlID0gYnJjbXN0Yl9naXNiX2FyYl9vZl9tYXRjaCwKKwkJLnBtCT0gJmJyY21zdGJfZ2lzYl9hcmJfcG1fb3BzLAogCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBicmNtX2dpc2JfZHJpdmVyX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZicmNtc3RiX2dpc2JfYXJiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYnJjbXN0Yl9naXNiX2FyYl9kcml2ZXIsCisJCQkJICAgICBicmNtc3RiX2dpc2JfYXJiX3Byb2JlKTsKIH0KIAogbW9kdWxlX2luaXQoYnJjbV9naXNiX2RyaXZlcl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL212ZWJ1LW1idXMuYyBiL2RyaXZlcnMvYnVzL212ZWJ1LW1idXMuYwppbmRleCAyNmMzNzc5ZC4uZWI3NjgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9idXMvbXZlYnUtbWJ1cy5jCisrKyBiL2RyaXZlcnMvYnVzL212ZWJ1LW1idXMuYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKIC8qCiAgKiBERFIgdGFyZ2V0IGlzIHRoZSBzYW1lIG9uIGFsbCBwbGF0Zm9ybXMuCkBAIC05NCwyMCArOTUsNDIgQEAKIAogI2RlZmluZSBET1ZFX0REUl9CQVNFX0NTX09GRihuKSAoKG4pIDw8IDQpCiAKKy8qIFJlbGF0aXZlIHRvIG1idXNicmlkZ2VfYmFzZSAqLworI2RlZmluZSBNQlVTX0JSSURHRV9DVFJMX09GRgkweDAKKyNkZWZpbmUgTUJVU19CUklER0VfQkFTRV9PRkYJMHg0CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIHdpbmRvd3MsIGZvciBhbGwga25vd24gcGxhdGZvcm1zICovCisjZGVmaW5lIE1CVVNfV0lOU19NQVggICAgICAgICAgIDIwCisKIHN0cnVjdCBtdmVidV9tYnVzX3N0YXRlOwogCiBzdHJ1Y3QgbXZlYnVfbWJ1c19zb2NfZGF0YSB7CiAJdW5zaWduZWQgaW50IG51bV93aW5zOwogCXVuc2lnbmVkIGludCBudW1fcmVtYXBwYWJsZV93aW5zOworCWJvb2wgaGFzX21idXNfYnJpZGdlOwogCXVuc2lnbmVkIGludCAoKndpbl9jZmdfb2Zmc2V0KShjb25zdCBpbnQgd2luKTsKIAl2b2lkICgqc2V0dXBfY3B1X3RhcmdldCkoc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKnMpOworCWludCAoKnNhdmVfY3B1X3RhcmdldCkoc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKnMsCisJCQkgICAgICAgdTMyICpzdG9yZV9hZGRyKTsKIAlpbnQgKCpzaG93X2NwdV90YXJnZXQpKHN0cnVjdCBtdmVidV9tYnVzX3N0YXRlICpzLAogCQkJICAgICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KTsKIH07CiAKKy8qCisgKiBVc2VkIHRvIHN0b3JlIHRoZSBzdGF0ZSBvZiBvbmUgTUJ1cyB3aW5kb3cgYWNjcm9zcyBzdXNwZW5kL3Jlc3VtZS4KKyAqLworc3RydWN0IG12ZWJ1X21idXNfd2luX2RhdGEgeworCXUzMiBjdHJsOworCXUzMiBiYXNlOworCXUzMiByZW1hcF9sbzsKKwl1MzIgcmVtYXBfaGk7Cit9OworCiBzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSB7CiAJdm9pZCBfX2lvbWVtICptYnVzd2luc19iYXNlOwogCXZvaWQgX19pb21lbSAqc2RyYW13aW5zX2Jhc2U7CisJdm9pZCBfX2lvbWVtICptYnVzYnJpZGdlX2Jhc2U7CisJcGh5c19hZGRyX3Qgc2RyYW13aW5zX3BoeXNfYmFzZTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19zZHJhbTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RldnM7CkBAIC0xMTUsNiArMTM4LDExIEBACiAJc3RydWN0IHJlc291cmNlIHBjaWVfaW9fYXBlcnR1cmU7CiAJY29uc3Qgc3RydWN0IG12ZWJ1X21idXNfc29jX2RhdGEgKnNvYzsKIAlpbnQgaHdfaW9fY29oZXJlbmN5OworCisJLyogVXNlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgKi8KKwl1MzIgbWJ1c19icmlkZ2VfY3RybDsKKwl1MzIgbWJ1c19icmlkZ2VfYmFzZTsKKwlzdHJ1Y3QgbXZlYnVfbWJ1c193aW5fZGF0YSB3aW5zW01CVVNfV0lOU19NQVhdOwogfTsKIAogc3RhdGljIHN0cnVjdCBtdmVidV9tYnVzX3N0YXRlIG1idXNfc3RhdGU7CkBAIC01MTYsNiArNTQ0LDI4IEBACiAJbXZlYnVfbWJ1c19kcmFtX2luZm8ubnVtX2NzID0gY3M7CiB9CiAKK3N0YXRpYyBpbnQKK212ZWJ1X21idXNfZGVmYXVsdF9zYXZlX2NwdV90YXJnZXQoc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKm1idXMsCisJCQkJICAgdTMyICpzdG9yZV9hZGRyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQl1MzIgYmFzZSA9IHJlYWRsKG1idXMtPnNkcmFtd2luc19iYXNlICsgRERSX0JBU0VfQ1NfT0ZGKGkpKTsKKwkJdTMyIHNpemUgPSByZWFkbChtYnVzLT5zZHJhbXdpbnNfYmFzZSArIEREUl9TSVpFX0NTX09GRihpKSk7CisKKwkJd3JpdGVsKG1idXMtPnNkcmFtd2luc19waHlzX2Jhc2UgKyBERFJfQkFTRV9DU19PRkYoaSksCisJCSAgICAgICBzdG9yZV9hZGRyKyspOworCQl3cml0ZWwoYmFzZSwgc3RvcmVfYWRkcisrKTsKKwkJd3JpdGVsKG1idXMtPnNkcmFtd2luc19waHlzX2Jhc2UgKyBERFJfU0laRV9DU19PRkYoaSksCisJCSAgICAgICBzdG9yZV9hZGRyKyspOworCQl3cml0ZWwoc2l6ZSwgc3RvcmVfYWRkcisrKTsKKwl9CisKKwkvKiBXZSd2ZSB3cml0dGVuIDE2IHdvcmRzIHRvIHRoZSBzdG9yZSBhZGRyZXNzICovCisJcmV0dXJuIDE2OworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQKIG12ZWJ1X21idXNfZG92ZV9zZXR1cF9jcHVfdGFyZ2V0KHN0cnVjdCBtdmVidV9tYnVzX3N0YXRlICptYnVzKQogewpAQCAtNTQ2LDEwICs1OTYsMzUgQEAKIAltdmVidV9tYnVzX2RyYW1faW5mby5udW1fY3MgPSBjczsKIH0KIAorc3RhdGljIGludAorbXZlYnVfbWJ1c19kb3ZlX3NhdmVfY3B1X3RhcmdldChzdHJ1Y3QgbXZlYnVfbWJ1c19zdGF0ZSAqbWJ1cywKKwkJCQl1MzIgKnN0b3JlX2FkZHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXUzMiBtYXAgPSByZWFkbChtYnVzLT5zZHJhbXdpbnNfYmFzZSArIERPVkVfRERSX0JBU0VfQ1NfT0ZGKGkpKTsKKworCQl3cml0ZWwobWJ1cy0+c2RyYW13aW5zX3BoeXNfYmFzZSArIERPVkVfRERSX0JBU0VfQ1NfT0ZGKGkpLAorCQkgICAgICAgc3RvcmVfYWRkcisrKTsKKwkJd3JpdGVsKG1hcCwgc3RvcmVfYWRkcisrKTsKKwl9CisKKwkvKiBXZSd2ZSB3cml0dGVuIDQgd29yZHMgdG8gdGhlIHN0b3JlIGFkZHJlc3MgKi8KKwlyZXR1cm4gNDsKK30KKworaW50IG12ZWJ1X21idXNfc2F2ZV9jcHVfdGFyZ2V0KHUzMiAqc3RvcmVfYWRkcikKK3sKKwlyZXR1cm4gbWJ1c19zdGF0ZS5zb2MtPnNhdmVfY3B1X3RhcmdldCgmbWJ1c19zdGF0ZSwgc3RvcmVfYWRkcik7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXZlYnVfbWJ1c19zb2NfZGF0YSBhcm1hZGFfMzcwX3hwX21idXNfZGF0YSA9IHsKIAkubnVtX3dpbnMgICAgICAgICAgICA9IDIwLAogCS5udW1fcmVtYXBwYWJsZV93aW5zID0gOCwKKwkuaGFzX21idXNfYnJpZGdlICAgICA9IHRydWUsCiAJLndpbl9jZmdfb2Zmc2V0ICAgICAgPSBhcm1hZGFfMzcwX3hwX21idXNfd2luX29mZnNldCwKKwkuc2F2ZV9jcHVfdGFyZ2V0ICAgICA9IG12ZWJ1X21idXNfZGVmYXVsdF9zYXZlX2NwdV90YXJnZXQsCiAJLnNldHVwX2NwdV90YXJnZXQgICAgPSBtdmVidV9tYnVzX2RlZmF1bHRfc2V0dXBfY3B1X3RhcmdldCwKIAkuc2hvd19jcHVfdGFyZ2V0ICAgICA9IG12ZWJ1X3NkcmFtX2RlYnVnX3Nob3dfb3Jpb24sCiB9OwpAQCAtNTU4LDYgKzYzMyw3IEBACiAJLm51bV93aW5zICAgICAgICAgICAgPSA4LAogCS5udW1fcmVtYXBwYWJsZV93aW5zID0gNCwKIAkud2luX2NmZ19vZmZzZXQgICAgICA9IG9yaW9uX21idXNfd2luX29mZnNldCwKKwkuc2F2ZV9jcHVfdGFyZ2V0ICAgICA9IG12ZWJ1X21idXNfZGVmYXVsdF9zYXZlX2NwdV90YXJnZXQsCiAJLnNldHVwX2NwdV90YXJnZXQgICAgPSBtdmVidV9tYnVzX2RlZmF1bHRfc2V0dXBfY3B1X3RhcmdldCwKIAkuc2hvd19jcHVfdGFyZ2V0ICAgICA9IG12ZWJ1X3NkcmFtX2RlYnVnX3Nob3dfb3Jpb24sCiB9OwpAQCAtNTY2LDYgKzY0Miw3IEBACiAJLm51bV93aW5zICAgICAgICAgICAgPSA4LAogCS5udW1fcmVtYXBwYWJsZV93aW5zID0gNCwKIAkud2luX2NmZ19vZmZzZXQgICAgICA9IG9yaW9uX21idXNfd2luX29mZnNldCwKKwkuc2F2ZV9jcHVfdGFyZ2V0ICAgICA9IG12ZWJ1X21idXNfZG92ZV9zYXZlX2NwdV90YXJnZXQsCiAJLnNldHVwX2NwdV90YXJnZXQgICAgPSBtdmVidV9tYnVzX2RvdmVfc2V0dXBfY3B1X3RhcmdldCwKIAkuc2hvd19jcHVfdGFyZ2V0ICAgICA9IG12ZWJ1X3NkcmFtX2RlYnVnX3Nob3dfZG92ZSwKIH07CkBAIC01NzgsNiArNjU1LDcgQEAKIAkubnVtX3dpbnMgICAgICAgICAgICA9IDgsCiAJLm51bV9yZW1hcHBhYmxlX3dpbnMgPSA0LAogCS53aW5fY2ZnX29mZnNldCAgICAgID0gb3Jpb25fbWJ1c193aW5fb2Zmc2V0LAorCS5zYXZlX2NwdV90YXJnZXQgICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NhdmVfY3B1X3RhcmdldCwKIAkuc2V0dXBfY3B1X3RhcmdldCAgICA9IG12ZWJ1X21idXNfZGVmYXVsdF9zZXR1cF9jcHVfdGFyZ2V0LAogCS5zaG93X2NwdV90YXJnZXQgICAgID0gbXZlYnVfc2RyYW1fZGVidWdfc2hvd19vcmlvbiwKIH07CkBAIC01ODYsNiArNjY0LDcgQEAKIAkubnVtX3dpbnMgICAgICAgICAgICA9IDgsCiAJLm51bV9yZW1hcHBhYmxlX3dpbnMgPSAyLAogCS53aW5fY2ZnX29mZnNldCAgICAgID0gb3Jpb25fbWJ1c193aW5fb2Zmc2V0LAorCS5zYXZlX2NwdV90YXJnZXQgICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NhdmVfY3B1X3RhcmdldCwKIAkuc2V0dXBfY3B1X3RhcmdldCAgICA9IG12ZWJ1X21idXNfZGVmYXVsdF9zZXR1cF9jcHVfdGFyZ2V0LAogCS5zaG93X2NwdV90YXJnZXQgICAgID0gbXZlYnVfc2RyYW1fZGVidWdfc2hvd19vcmlvbiwKIH07CkBAIC01OTQsNiArNjczLDcgQEAKIAkubnVtX3dpbnMgICAgICAgICAgICA9IDE0LAogCS5udW1fcmVtYXBwYWJsZV93aW5zID0gOCwKIAkud2luX2NmZ19vZmZzZXQgICAgICA9IG12Nzh4eDBfbWJ1c193aW5fb2Zmc2V0LAorCS5zYXZlX2NwdV90YXJnZXQgICAgID0gbXZlYnVfbWJ1c19kZWZhdWx0X3NhdmVfY3B1X3RhcmdldCwKIAkuc2V0dXBfY3B1X3RhcmdldCAgICA9IG12ZWJ1X21idXNfZGVmYXVsdF9zZXR1cF9jcHVfdGFyZ2V0LAogCS5zaG93X2NwdV90YXJnZXQgICAgID0gbXZlYnVfc2RyYW1fZGVidWdfc2hvd19vcmlvbiwKIH07CkBAIC02OTgsMTEgKzc3OCw3MyBAQAogfQogZnNfaW5pdGNhbGwobXZlYnVfbWJ1c19kZWJ1Z2ZzX2luaXQpOwogCitzdGF0aWMgaW50IG12ZWJ1X21idXNfc3VzcGVuZCh2b2lkKQoreworCXN0cnVjdCBtdmVidV9tYnVzX3N0YXRlICpzID0gJm1idXNfc3RhdGU7CisJaW50IHdpbjsKKworCWlmICghcy0+bWJ1c2JyaWRnZV9iYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAod2luID0gMDsgd2luIDwgcy0+c29jLT5udW1fd2luczsgd2luKyspIHsKKwkJdm9pZCBfX2lvbWVtICphZGRyID0gcy0+bWJ1c3dpbnNfYmFzZSArCisJCQlzLT5zb2MtPndpbl9jZmdfb2Zmc2V0KHdpbik7CisKKwkJcy0+d2luc1t3aW5dLmJhc2UgPSByZWFkbChhZGRyICsgV0lOX0JBU0VfT0ZGKTsKKwkJcy0+d2luc1t3aW5dLmN0cmwgPSByZWFkbChhZGRyICsgV0lOX0NUUkxfT0ZGKTsKKworCQlpZiAod2luID49IHMtPnNvYy0+bnVtX3JlbWFwcGFibGVfd2lucykKKwkJCWNvbnRpbnVlOworCisJCXMtPndpbnNbd2luXS5yZW1hcF9sbyA9IHJlYWRsKGFkZHIgKyBXSU5fUkVNQVBfTE9fT0ZGKTsKKwkJcy0+d2luc1t3aW5dLnJlbWFwX2hpID0gcmVhZGwoYWRkciArIFdJTl9SRU1BUF9ISV9PRkYpOworCX0KKworCXMtPm1idXNfYnJpZGdlX2N0cmwgPSByZWFkbChzLT5tYnVzYnJpZGdlX2Jhc2UgKworCQkJCSAgICBNQlVTX0JSSURHRV9DVFJMX09GRik7CisJcy0+bWJ1c19icmlkZ2VfYmFzZSA9IHJlYWRsKHMtPm1idXNicmlkZ2VfYmFzZSArCisJCQkJICAgIE1CVVNfQlJJREdFX0JBU0VfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdmVidV9tYnVzX3Jlc3VtZSh2b2lkKQoreworCXN0cnVjdCBtdmVidV9tYnVzX3N0YXRlICpzID0gJm1idXNfc3RhdGU7CisJaW50IHdpbjsKKworCXdyaXRlbChzLT5tYnVzX2JyaWRnZV9jdHJsLAorCSAgICAgICBzLT5tYnVzYnJpZGdlX2Jhc2UgKyBNQlVTX0JSSURHRV9DVFJMX09GRik7CisJd3JpdGVsKHMtPm1idXNfYnJpZGdlX2Jhc2UsCisJICAgICAgIHMtPm1idXNicmlkZ2VfYmFzZSArIE1CVVNfQlJJREdFX0JBU0VfT0ZGKTsKKworCWZvciAod2luID0gMDsgd2luIDwgcy0+c29jLT5udW1fd2luczsgd2luKyspIHsKKwkJdm9pZCBfX2lvbWVtICphZGRyID0gcy0+bWJ1c3dpbnNfYmFzZSArCisJCQlzLT5zb2MtPndpbl9jZmdfb2Zmc2V0KHdpbik7CisKKwkJd3JpdGVsKHMtPndpbnNbd2luXS5iYXNlLCBhZGRyICsgV0lOX0JBU0VfT0ZGKTsKKwkJd3JpdGVsKHMtPndpbnNbd2luXS5jdHJsLCBhZGRyICsgV0lOX0NUUkxfT0ZGKTsKKworCQlpZiAod2luID49IHMtPnNvYy0+bnVtX3JlbWFwcGFibGVfd2lucykKKwkJCWNvbnRpbnVlOworCisJCXdyaXRlbChzLT53aW5zW3dpbl0ucmVtYXBfbG8sIGFkZHIgKyBXSU5fUkVNQVBfTE9fT0ZGKTsKKwkJd3JpdGVsKHMtPndpbnNbd2luXS5yZW1hcF9oaSwgYWRkciArIFdJTl9SRU1BUF9ISV9PRkYpOworCX0KK30KKworc3RydWN0IHN5c2NvcmVfb3BzIG12ZWJ1X21idXNfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBtdmVidV9tYnVzX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBtdmVidV9tYnVzX3Jlc3VtZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IG12ZWJ1X21idXNfY29tbW9uX2luaXQoc3RydWN0IG12ZWJ1X21idXNfc3RhdGUgKm1idXMsCiAJCQkJCSBwaHlzX2FkZHJfdCBtYnVzd2luc19waHlzX2Jhc2UsCiAJCQkJCSBzaXplX3QgbWJ1c3dpbnNfc2l6ZSwKIAkJCQkJIHBoeXNfYWRkcl90IHNkcmFtd2luc19waHlzX2Jhc2UsCi0JCQkJCSBzaXplX3Qgc2RyYW13aW5zX3NpemUpCisJCQkJCSBzaXplX3Qgc2RyYW13aW5zX3NpemUsCisJCQkJCSBwaHlzX2FkZHJfdCBtYnVzYnJpZGdlX3BoeXNfYmFzZSwKKwkJCQkJIHNpemVfdCBtYnVzYnJpZGdlX3NpemUpCiB7CiAJaW50IHdpbjsKIApAQCAtNzE2LDExICs4NTgsMjYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJbWJ1cy0+c2RyYW13aW5zX3BoeXNfYmFzZSA9IHNkcmFtd2luc19waHlzX2Jhc2U7CisKKwlpZiAobWJ1c2JyaWRnZV9waHlzX2Jhc2UpIHsKKwkJbWJ1cy0+bWJ1c2JyaWRnZV9iYXNlID0gaW9yZW1hcChtYnVzYnJpZGdlX3BoeXNfYmFzZSwKKwkJCQkJCW1idXNicmlkZ2Vfc2l6ZSk7CisJCWlmICghbWJ1cy0+bWJ1c2JyaWRnZV9iYXNlKSB7CisJCQlpb3VubWFwKG1idXMtPnNkcmFtd2luc19iYXNlKTsKKwkJCWlvdW5tYXAobWJ1cy0+bWJ1c3dpbnNfYmFzZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0gZWxzZQorCQltYnVzLT5tYnVzYnJpZGdlX2Jhc2UgPSBOVUxMOworCiAJZm9yICh3aW4gPSAwOyB3aW4gPCBtYnVzLT5zb2MtPm51bV93aW5zOyB3aW4rKykKIAkJbXZlYnVfbWJ1c19kaXNhYmxlX3dpbmRvdyhtYnVzLCB3aW4pOwogCiAJbWJ1cy0+c29jLT5zZXR1cF9jcHVfdGFyZ2V0KG1idXMpOwogCisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJm12ZWJ1X21idXNfc3lzY29yZV9vcHMpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc0Niw3ICs5MDMsNyBAQAogCQkJbWJ1c3dpbnNfcGh5c19iYXNlLAogCQkJbWJ1c3dpbnNfc2l6ZSwKIAkJCXNkcmFtd2luc19waHlzX2Jhc2UsCi0JCQlzZHJhbXdpbnNfc2l6ZSk7CisJCQlzZHJhbXdpbnNfc2l6ZSwgMCwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfT0YKQEAgLTg4Nyw3ICsxMDQ0LDcgQEAKIAogaW50IF9faW5pdCBtdmVidV9tYnVzX2R0X2luaXQoYm9vbCBpc19jb2hlcmVudCkKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgbWJ1c3dpbnNfcmVzLCBzZHJhbXdpbnNfcmVzOworCXN0cnVjdCByZXNvdXJjZSBtYnVzd2luc19yZXMsIHNkcmFtd2luc19yZXMsIG1idXNicmlkZ2VfcmVzOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpjb250cm9sbGVyOwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOwogCWNvbnN0IF9fYmUzMiAqcHJvcDsKQEAgLTkyMyw2ICsxMDgwLDE5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qCisJICogU2V0IHRoZSByZXNvdXJjZSB0byAwIHNvIHRoYXQgaXQgY2FuIGJlIGxlZnQgdW5tYXBwZWQgYnkKKwkgKiBtdmVidV9tYnVzX2NvbW1vbl9pbml0KCkgaWYgdGhlIERUIGRvZXNuJ3QgY2FycnkgdGhlCisJICogbmVjZXNzYXJ5IGluZm9ybWF0aW9uLiBUaGlzIGlzIG5lZWRlZCB0byBwcmVzZXJ2ZSBiYWNrd2FyZAorCSAqIGNvbXBhdGliaWxpdHkuCisJICovCisJbWVtc2V0KCZtYnVzYnJpZGdlX3JlcywgMCwgc2l6ZW9mKG1idXNicmlkZ2VfcmVzKSk7CisKKwlpZiAobWJ1c19zdGF0ZS5zb2MtPmhhc19tYnVzX2JyaWRnZSkgeworCQlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShjb250cm9sbGVyLCAyLCAmbWJ1c2JyaWRnZV9yZXMpKQorCQkJcHJfd2FybihGV19XQVJOICJkZXByZWNhdGVkIG1idXMtbXZlYnUgRGV2aWNlIFRyZWUsIHN1c3BlbmQvcmVzdW1lIHdpbGwgbm90IHdvcmtcbiIpOworCX0KKwogCW1idXNfc3RhdGUuaHdfaW9fY29oZXJlbmN5ID0gaXNfY29oZXJlbnQ7CiAKIAkvKiBHZXQgb3B0aW9uYWwgcGNpZS17bWVtLGlvfS1hcGVydHVyZSBwcm9wZXJ0aWVzICovCkBAIC05MzMsNyArMTEwMyw5IEBACiAJCQkJICAgICBtYnVzd2luc19yZXMuc3RhcnQsCiAJCQkJICAgICByZXNvdXJjZV9zaXplKCZtYnVzd2luc19yZXMpLAogCQkJCSAgICAgc2RyYW13aW5zX3Jlcy5zdGFydCwKLQkJCQkgICAgIHJlc291cmNlX3NpemUoJnNkcmFtd2luc19yZXMpKTsKKwkJCQkgICAgIHJlc291cmNlX3NpemUoJnNkcmFtd2luc19yZXMpLAorCQkJCSAgICAgbWJ1c2JyaWRnZV9yZXMuc3RhcnQsCisJCQkJICAgICByZXNvdXJjZV9zaXplKCZtYnVzYnJpZGdlX3JlcykpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL29tYXBfbDNfbm9jLmMgYi9kcml2ZXJzL2J1cy9vbWFwX2wzX25vYy5jCmluZGV4IDUzMWFlNTkuLjE3ZDg2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL29tYXBfbDNfbm9jLmMKKysrIGIvZHJpdmVycy9idXMvb21hcF9sM19ub2MuYwpAQCAtMjIyLDEwICsyMjIsMTQgQEAKIAkJCX0KIAogCQkJLyogRXJyb3IgZm91bmQgc28gYnJlYWsgdGhlIGZvciBsb29wICovCi0JCQlicmVhazsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJfQogCX0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlkZXZfZXJyKGwzLT5kZXYsICJMMyAlcyBJUlEgbm90IGhhbmRsZWQhIVxuIiwKKwkJaW50dHlwZSA/ICJkZWJ1ZyIgOiAiYXBwbGljYXRpb24iKTsKKworCXJldHVybiBJUlFfTk9ORTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbDNfbm9jX21hdGNoW10gPSB7CkBAIC0yOTYsMTEgKzMwMCw2NiBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZglDT05GSUdfUE0KKworLyoqCisgKiBsM19yZXN1bWVfbm9pcnEoKSAtIHJlc3VtZSBmdW5jdGlvbiBmb3IgbDNfbm9jCisgKiBAZGV2Oglwb2ludGVyIHRvIGwzX25vYyBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogV2Ugb25seSBoYXZlIHRoZSByZXN1bWUgaGFuZGxlciBvbmx5IHNpbmNlIHdlCisgKiBoYXZlIGFscmVhZHkgbWFpbnRhaW5lZCB0aGUgZGVsdGEgcmVnaXN0ZXIKKyAqIGNvbmZpZ3VyYXRpb24gYXMgcGFydCBvZiBjb25maWd1cmluZyB0aGUgc3lzdGVtCisgKi8KK3N0YXRpYyBpbnQgbDNfcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb21hcF9sMyAqbDMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaTsKKwlzdHJ1Y3QgbDNfZmxhZ211eF9kYXRhICpmbGFnX211eDsKKwl2b2lkIF9faW9tZW0gKmJhc2UsICptYXNrX3JlZ3ggPSBOVUxMOworCXUzMiBtYXNrX3ZhbDsKKworCWZvciAoaSA9IDA7IGkgPCBsMy0+bnVtX21vZHVsZXM7IGkrKykgeworCQliYXNlID0gbDMtPmwzX2Jhc2VbaV07CisJCWZsYWdfbXV4ID0gbDMtPmwzX2ZsYWdtdXhbaV07CisJCWlmICghZmxhZ19tdXgtPm1hc2tfYXBwX2JpdHMgJiYgIWZsYWdfbXV4LT5tYXNrX2RiZ19iaXRzKQorCQkJY29udGludWU7CisKKwkJbWFza19yZWd4ID0gYmFzZSArIGZsYWdfbXV4LT5vZmZzZXQgKyBMM19GTEFHTVVYX01BU0swICsKKwkJCSAgIChMM19BUFBMSUNBVElPTl9FUlJPUiA8PCAzKTsKKwkJbWFza192YWwgPSByZWFkbF9yZWxheGVkKG1hc2tfcmVneCk7CisJCW1hc2tfdmFsICY9IH4oZmxhZ19tdXgtPm1hc2tfYXBwX2JpdHMpOworCisJCXdyaXRlbF9yZWxheGVkKG1hc2tfdmFsLCBtYXNrX3JlZ3gpOworCQltYXNrX3JlZ3ggPSBiYXNlICsgZmxhZ19tdXgtPm9mZnNldCArIEwzX0ZMQUdNVVhfTUFTSzAgKworCQkJICAgKEwzX0RFQlVHX0VSUk9SIDw8IDMpOworCQltYXNrX3ZhbCA9IHJlYWRsX3JlbGF4ZWQobWFza19yZWd4KTsKKwkJbWFza192YWwgJj0gfihmbGFnX211eC0+bWFza19kYmdfYml0cyk7CisKKwkJd3JpdGVsX3JlbGF4ZWQobWFza192YWwsIG1hc2tfcmVneCk7CisJfQorCisJLyogRHVtbXkgcmVhZCB0byBmb3JjZSBPQ1AgYmFycmllciAqLworCWlmIChtYXNrX3JlZ3gpCisJCSh2b2lkKXJlYWRsKG1hc2tfcmVneCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGwzX2Rldl9wbV9vcHMgPSB7CisJLnJlc3VtZV9ub2lycQkJPSBsM19yZXN1bWVfbm9pcnEsCit9OworCisjZGVmaW5lIEwzX0RFVl9QTV9PUFMgKCZsM19kZXZfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgTDNfREVWX1BNX09QUyBOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9sM19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9tYXBfbDNfcHJvYmUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9ICJvbWFwX2wzX25vYyIsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBtCQk9IEwzX0RFVl9QTV9PUFMsCiAJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihsM19ub2NfbWF0Y2gpLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvb21hcF9sM19zbXguYyBiL2RyaXZlcnMvYnVzL29tYXBfbDNfc214LmMKaW5kZXggYWNjMjE2NC4uNTk3ZmRhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9idXMvb21hcF9sM19zbXguYworKysgYi9kcml2ZXJzL2J1cy9vbWFwX2wzX3NteC5jCkBAIC0yNyw2ICsyNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKwogI2luY2x1ZGUgIm9tYXBfbDNfc214LmgiCiAKIHN0YXRpYyBpbmxpbmUgdTY0IG9tYXAzX2wzX3JlYWRsbCh2b2lkIF9faW9tZW0gKmJhc2UsIHUxNiByZWcpCkBAIC0yMTEsNyArMjE1LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb21hcDNfbDNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKyNpZiBJU19CVUlMVElOKENPTkZJR19PRikKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9tYXAzX2wzX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1sMy1zbXgiLAorCX0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9tYXAzX2wzX21hdGNoKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IG9tYXAzX2wzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9tYXAzX2wzICpsMzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTI2NSw3ICsyNzksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IG9tYXAzX2wzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBvbWFwM19sM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgb21hcDNfbDMgICAgICAgICAqbDMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApAQCAtMjc4LDE1ICsyOTIsMTcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDNfbDNfZHJpdmVyID0gewotCS5yZW1vdmUgICAgICAgICA9IF9fZXhpdF9wKG9tYXAzX2wzX3JlbW92ZSksCisJLnByb2JlCQk9IG9tYXAzX2wzX3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IG9tYXAzX2wzX3JlbW92ZSwKIAkuZHJpdmVyICAgICAgICAgPSB7Ci0JLm5hbWUgICA9ICJvbWFwX2wzX3NteCIsCisJCS5uYW1lICAgPSAib21hcF9sM19zbXgiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob21hcDNfbDNfbWF0Y2gpLAogCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwM19sM19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmb21hcDNfbDNfZHJpdmVyLCBvbWFwM19sM19wcm9iZSk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcDNfbDNfZHJpdmVyKTsKIH0KIHBvc3Rjb3JlX2luaXRjYWxsX3N5bmMob21hcDNfbDNfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vZXh5bm9zLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9leHlub3Mtcm5nLmMKaW5kZXggOWY4Mjc3Yy4uOTkzZWZkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9leHlub3Mtcm5nLmMKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9leHlub3Mtcm5nLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApIHx8IGRlZmluZWQoQ09ORklHX1BNX1JVTlRJTUUpCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGV4eW5vc19ybmdfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNTI0YjcwNy4uNGM1ODMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtODQsOSArODQsMTIgQEAKIH0KICNlbmRpZgogCi12b2lkIF9fd2VhayB1bnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgcGh5cywgdm9pZCAqYWRkcikKKyNpZm5kZWYgdW54bGF0ZV9kZXZfbWVtX3B0cgorI2RlZmluZSB1bnhsYXRlX2Rldl9tZW1fcHRyIHVueGxhdGVfZGV2X21lbV9wdHIKK3ZvaWQgX193ZWFrIHVueGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqYWRkcikKIHsKIH0KKyNlbmRpZgogCiAvKgogICogVGhpcyBmdW5jaW9uIHJlYWRzIHRoZSAqcGh5c2ljYWwqIG1lbW9yeS4gVGhlIGZfcG9zIHBvaW50cyBkaXJlY3RseSB0byB0aGUKQEAgLTk3LDcgKzEwMCw3IEBACiB7CiAJcGh5c19hZGRyX3QgcCA9ICpwcG9zOwogCXNzaXplX3QgcmVhZCwgc3o7Ci0JY2hhciAqcHRyOworCXZvaWQgKnB0cjsKIAogCWlmIChwICE9ICpwcG9zKQogCQlyZXR1cm4gMDsKQEAgLTQwMCw3ICs0MDMsNyBAQAogCQkJICogdW5jYWNoZWQsIHRoZW4gaXQgbXVzdCBhbHNvIGJlIGFjY2Vzc2VkIHVuY2FjaGVkCiAJCQkgKiBieSB0aGUga2VybmVsIG9yIGRhdGEgY29ycnVwdGlvbiBtYXkgb2NjdXIKIAkJCSAqLwotCQkJa2J1ZiA9IHhsYXRlX2Rldl9rbWVtX3B0cigoY2hhciAqKXApOworCQkJa2J1ZiA9IHhsYXRlX2Rldl9rbWVtX3B0cigodm9pZCAqKXApOwogCiAJCQlpZiAoY29weV90b191c2VyKGJ1Ziwga2J1Ziwgc3opKQogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtNDYxLDcgKzQ2NCw3IEBACiAjZW5kaWYKIAogCXdoaWxlIChjb3VudCA+IDApIHsKLQkJY2hhciAqcHRyOworCQl2b2lkICpwdHI7CiAKIAkJc3ogPSBzaXplX2luc2lkZV9wYWdlKHAsIGNvdW50KTsKIApAQCAtNDcwLDcgKzQ3Myw3IEBACiAJCSAqIGl0IG11c3QgYWxzbyBiZSBhY2Nlc3NlZCB1bmNhY2hlZCBieSB0aGUga2VybmVsIG9yIGRhdGEKIAkJICogY29ycnVwdGlvbiBtYXkgb2NjdXIuCiAJCSAqLwotCQlwdHIgPSB4bGF0ZV9kZXZfa21lbV9wdHIoKGNoYXIgKilwKTsKKwkJcHRyID0geGxhdGVfZGV2X2ttZW1fcHRyKCh2b2lkICopcCk7CiAKIAkJY29waWVkID0gY29weV9mcm9tX3VzZXIocHRyLCBidWYsIHN6KTsKIAkJaWYgKGNvcGllZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLXMybXBzMTEuYyBiL2RyaXZlcnMvY2xrL2Nsay1zMm1wczExLmMKaW5kZXggYjc3OTdmYi4uN2JiMTNhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLXMybXBzMTEuYworKysgYi9kcml2ZXJzL2Nsay9jbGstczJtcHMxMS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHMxMS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wczE0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczVtODc2Ny5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL2NvcmUuaD4KQEAgLTEyMCw2ICsxMjEsMjQgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGtfaW5pdF9kYXRhIHMybXBzMTNfY2xrc19pbml0W1MyTVBTMTFfQ0xLU19OVU1dID0geworCVtTMk1QUzExX0NMS19BUF0gPSB7CisJCS5uYW1lID0gInMybXBzMTNfYXAiLAorCQkub3BzID0gJnMybXBzMTFfY2xrX29wcywKKwkJLmZsYWdzID0gQ0xLX0lTX1JPT1QsCisJfSwKKwlbUzJNUFMxMV9DTEtfQ1BdID0geworCQkubmFtZSA9ICJzMm1wczEzX2NwIiwKKwkJLm9wcyA9ICZzMm1wczExX2Nsa19vcHMsCisJCS5mbGFncyA9IENMS19JU19ST09ULAorCX0sCisJW1MyTVBTMTFfQ0xLX0JUXSA9IHsKKwkJLm5hbWUgPSAiczJtcHMxM19idCIsCisJCS5vcHMgPSAmczJtcHMxMV9jbGtfb3BzLAorCQkuZmxhZ3MgPSBDTEtfSVNfUk9PVCwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBjbGtfaW5pdF9kYXRhIHMybXBzMTRfY2xrc19pbml0W1MyTVBTMTFfQ0xLU19OVU1dID0gewogCVtTMk1QUzExX0NMS19BUF0gPSB7CiAJCS5uYW1lID0gInMybXBzMTRfYXAiLApAQCAtMTg0LDYgKzIwMywxMCBAQAogCQlzMm1wczExX3JlZyA9IFMyTVBTMTFfUkVHX1JUQ19DVFJMOwogCQljbGtzX2luaXQgPSBzMm1wczExX2Nsa3NfaW5pdDsKIAkJYnJlYWs7CisJY2FzZSBTMk1QUzEzWDoKKwkJczJtcHMxMV9yZWcgPSBTMk1QUzEzX1JFR19SVENDVFJMOworCQljbGtzX2luaXQgPSBzMm1wczEzX2Nsa3NfaW5pdDsKKwkJYnJlYWs7CiAJY2FzZSBTMk1QUzE0WDoKIAkJczJtcHMxMV9yZWcgPSBTMk1QUzE0X1JFR19SVENDVFJMOwogCQljbGtzX2luaXQgPSBzMm1wczE0X2Nsa3NfaW5pdDsKQEAgLTI3OSw2ICszMDIsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzMm1wczExX2Nsa19pZFtdID0gewogCXsgInMybXBzMTEtY2xrIiwgUzJNUFMxMVh9LAorCXsgInMybXBzMTMtY2xrIiwgUzJNUFMxM1h9LAogCXsgInMybXBzMTQtY2xrIiwgUzJNUFMxNFh9LAogCXsgInM1bTg3NjctY2xrIiwgUzVNODc2N1h9LAogCXsgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL212ZWJ1L2NvbW1vbi5jIGIvZHJpdmVycy9jbGsvbXZlYnUvY29tbW9uLmMKaW5kZXggYjdmY2I0Ni4uMGQ0ZDEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvbXZlYnUvY29tbW9uLmMKKysrIGIvZHJpdmVycy9jbGsvbXZlYnUvY29tbW9uLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlICJjb21tb24uaCIKIApAQCAtMTc3LDE0ICsxNzgsMTcgQEAKIAlzcGlubG9ja190ICpsb2NrOwogCXN0cnVjdCBjbGsgKipnYXRlczsKIAlpbnQgbnVtX2dhdGVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1MzIgc2F2ZWRfcmVnOwogfTsKIAogI2RlZmluZSB0b19jbGtfZ2F0ZShfaHcpIGNvbnRhaW5lcl9vZihfaHcsIHN0cnVjdCBjbGtfZ2F0ZSwgaHcpCiAKK3N0YXRpYyBzdHJ1Y3QgY2xrX2dhdGluZ19jdHJsICpjdHJsOworCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrX2dhdGluZ19nZXRfc3JjKAogCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmNsa3NwZWMsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGNsa19nYXRpbmdfY3RybCAqY3RybCA9IChzdHJ1Y3QgY2xrX2dhdGluZ19jdHJsICopZGF0YTsKIAlpbnQgbjsKIAogCWlmIChjbGtzcGVjLT5hcmdzX2NvdW50IDwgMSkKQEAgLTE5OSwxNSArMjAzLDM1IEBACiAJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKK3N0YXRpYyBpbnQgbXZlYnVfY2xrX2dhdGluZ19zdXNwZW5kKHZvaWQpCit7CisJY3RybC0+c2F2ZWRfcmVnID0gcmVhZGwoY3RybC0+YmFzZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG12ZWJ1X2Nsa19nYXRpbmdfcmVzdW1lKHZvaWQpCit7CisJd3JpdGVsKGN0cmwtPnNhdmVkX3JlZywgY3RybC0+YmFzZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgY2xrX2dhdGVfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQgPSBtdmVidV9jbGtfZ2F0aW5nX3N1c3BlbmQsCisJLnJlc3VtZSA9IG12ZWJ1X2Nsa19nYXRpbmdfcmVzdW1lLAorfTsKKwogdm9pZCBfX2luaXQgbXZlYnVfY2xrX2dhdGluZ19zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBjbGtfZ2F0aW5nX3NvY19kZXNjICpkZXNjKQogewotCXN0cnVjdCBjbGtfZ2F0aW5nX2N0cmwgKmN0cmw7CiAJc3RydWN0IGNsayAqY2xrOwogCXZvaWQgX19pb21lbSAqYmFzZTsKIAljb25zdCBjaGFyICpkZWZhdWx0X3BhcmVudCA9IE5VTEw7CiAJaW50IG47CiAKKwlpZiAoY3RybCkgeworCQlwcl9lcnIoIm12ZWJ1LWNsay1nYXRpbmc6IGNhbm5vdCBpbnN0YW50aWF0ZSBtb3JlIHRoYW4gb25lIGdhdGFibGUgY2xvY2sgZGV2aWNlXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCWJhc2UgPSBvZl9pb21hcChucCwgMCk7CiAJaWYgKFdBUk5fT04oIWJhc2UpKQogCQlyZXR1cm47CkBAIC0yMjUsNiArMjQ5LDggQEAKIAkvKiBsb2NrIG11c3QgYWxyZWFkeSBiZSBpbml0aWFsaXplZCAqLwogCWN0cmwtPmxvY2sgPSAmY3RybF9nYXRpbmdfbG9jazsKIAorCWN0cmwtPmJhc2UgPSBiYXNlOworCiAJLyogQ291bnQsIGFsbG9jYXRlLCBhbmQgcmVnaXN0ZXIgY2xvY2sgZ2F0ZXMgKi8KIAlmb3IgKG4gPSAwOyBkZXNjW25dLm5hbWU7KQogCQluKys7CkBAIC0yNDYsNiArMjcyLDggQEAKIAogCW9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIGNsa19nYXRpbmdfZ2V0X3NyYywgY3RybCk7CiAKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmY2xrX2dhdGVfc3lzY29yZV9vcHMpOworCiAJcmV0dXJuOwogZ2F0ZXNfb3V0OgogCWtmcmVlKGN0cmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQ0MC5jIGIvZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zNTQ0MC5jCmluZGV4IDAwZDFkMDAuLjk3OWU4MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczU0NDAuYworKysgYi9kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3M1NDQwLmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCiAjaW5jbHVkZSAiY2xrLmgiCiAjaW5jbHVkZSAiY2xrLXBsbC5oIgpAQCAtMjMsNiArMjUsOCBAQAogI2RlZmluZSBDUFVfQ0xLX1NUQVRVUwkJMHhmYwogI2RlZmluZSBNSVNDX0RPVVQxCQkweDU1OAogCitzdGF0aWMgdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKwogLyogcGFyZW50IGNsb2NrIG5hbWUgbGlzdCAqLwogUE5BTUUobW91dF9hcm1jbGtfcCkJPSB7ICJjcGxsYSIsICJjcGxsYiIgfTsKIFBOQU1FKG1vdXRfc3BpX3ApCT0geyAiZGl2MTI1IiwgImRpdjIwMCIgfTsKQEAgLTg5LDEwICs5MywzMCBAQAogCXt9LAogfTsKIAorc3RhdGljIGludCBleHlub3M1NDQwX2Nsa19yZXN0YXJ0X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCXVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQoreworCXUzMiB2YWwsIHN0YXR1czsKKworCXN0YXR1cyA9IHJlYWRsX3JlbGF4ZWQocmVnX2Jhc2UgKyAweGJjKTsKKwl2YWwgPSByZWFkbF9yZWxheGVkKHJlZ19iYXNlICsgMHhjYyk7CisJdmFsID0gKHZhbCAmIDB4ZmZmZjAwMDApIHwgKHN0YXR1cyAmIDB4ZmZmZik7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCByZWdfYmFzZSArIDB4Y2MpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCisvKgorICogRXh5bm9zNTQ0MCBDbG9jayByZXN0YXJ0IG5vdGlmaWVyLCBoYW5kbGVzIHJlc3RhcnQgZnVuY3Rpb25hbGl0eQorICovCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGV4eW5vczU0NDBfY2xrX3Jlc3RhcnRfaGFuZGxlciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGV4eW5vczU0NDBfY2xrX3Jlc3RhcnRfbm90aWZ5LAorCS5wcmlvcml0eSA9IDEyOCwKK307CisKIC8qIHJlZ2lzdGVyIGV4eW5vczU0NDAgY2xvY2tzICovCiBzdGF0aWMgdm9pZCBfX2luaXQgZXh5bm9zNTQ0MF9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewotCXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7CiAJc3RydWN0IHNhbXN1bmdfY2xrX3Byb3ZpZGVyICpjdHg7CiAKIAlyZWdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKQEAgLTEyNSw2ICsxNDksOSBAQAogCiAJc2Ftc3VuZ19jbGtfb2ZfYWRkX3Byb3ZpZGVyKG5wLCBjdHgpOwogCisJaWYgKHJlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcigmZXh5bm9zNTQ0MF9jbGtfcmVzdGFydF9oYW5kbGVyKSkKKwkJcHJfd2FybigiZXh5bm9zNTQ0MCBjbG9jayBjYW4ndCByZWdpc3RlciByZXN0YXJ0IGhhbmRsZXJcbiIpOworCiAJcHJfaW5mbygiRXh5bm9zNTQ0MDogYXJtX2NsayA9ICVsZEh6XG4iLCBfZ2V0X3JhdGUoImFybV9jbGsiKSk7CiAJcHJfaW5mbygiZXh5bm9zNTQ0MCBjbG9jayBpbml0aWFsaXphdGlvbiBjb21wbGV0ZVxuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstZGl2aWRlci5jIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLWRpdmlkZXIuYwppbmRleCAyOTBmOWMxLi41OWE1NzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstZGl2aWRlci5jCisrKyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay1kaXZpZGVyLmMKQEAgLTE4NSwzICsxODUsMTYgQEAKIAogCXJldHVybiBjbGs7CiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX2Rpdl90YWJsZSBtY19kaXZfdGFibGVbXSA9IHsKKwl7IC52YWwgPSAwLCAuZGl2ID0gMiB9LAorCXsgLnZhbCA9IDEsIC5kaXYgPSAxIH0sCisJeyAudmFsID0gMCwgLmRpdiA9IDAgfSwKK307CisKK3N0cnVjdCBjbGsgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9tYyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKKwkJCQkgIHZvaWQgX19pb21lbSAqcmVnLCBzcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBjbGtfcmVnaXN0ZXJfZGl2aWRlcl90YWJsZShOVUxMLCBuYW1lLCBwYXJlbnRfbmFtZSwgMCwgcmVnLAorCQkJCQkgIDE2LCAxLCAwLCBtY19kaXZfdGFibGUsIGxvY2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTE0LmMgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmExMTQuYwppbmRleCBmNzYwZjMxLi4wYjAzZDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmExMTQuYworKysgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmExMTQuYwpAQCAtMTczLDYgKzE3Myw3IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBsbF9kMl9sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGxsX3VfbG9jayk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBsbF9yZV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZW1jX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGRpdl9ubXAgcGxseGNfbm1wID0gewogCS5kaXZtX3NoaWZ0ID0gMCwKQEAgLTEyMjgsNyArMTIyOSwxMSBAQAogCQkJICAgICAgIEFSUkFZX1NJWkUobXV4X3BsbG1jcF9jbGttKSwKIAkJCSAgICAgICBDTEtfU0VUX1JBVEVfTk9fUkVQQVJFTlQsCiAJCQkgICAgICAgY2xrX2Jhc2UgKyBDTEtfU09VUkNFX0VNQywKLQkJCSAgICAgICAyOSwgMywgMCwgTlVMTCk7CisJCQkgICAgICAgMjksIDMsIDAsICZlbWNfbG9jayk7CisKKwljbGsgPSB0ZWdyYV9jbGtfcmVnaXN0ZXJfbWMoIm1jIiwgImVtY19tdXgiLCBjbGtfYmFzZSArIENMS19TT1VSQ0VfRU1DLAorCQkJCSAgICAmZW1jX2xvY2spOworCWNsa3NbVEVHUkExMTRfQ0xLX01DXSA9IGNsazsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhX3BlcmlwaF9jbGtfbGlzdCk7IGkrKykgewogCQlkYXRhID0gJnRlZ3JhX3BlcmlwaF9jbGtfbGlzdFtpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTEyNC5jIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTI0LmMKaW5kZXggZTNhODU4NC4uZjVmOWJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTI0LmMKKysrIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMTI0LmMKQEAgLTEzMiw2ICsxMzIsNyBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhwbGxfZV9sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGxsX3JlX2xvY2spOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwbGxfdV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZW1jX2xvY2spOwogCiAvKiBwb3NzaWJsZSBPU0MgZnJlcXVlbmNpZXMgaW4gSHogKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRlZ3JhMTI0X2lucHV0X2ZyZXFbXSA9IHsKQEAgLTExMjcsNyArMTEyOCwxMSBAQAogCWNsayA9IGNsa19yZWdpc3Rlcl9tdXgoTlVMTCwgImVtY19tdXgiLCBtdXhfcGxsbWNwX2Nsa20sCiAJCQkgICAgICAgQVJSQVlfU0laRShtdXhfcGxsbWNwX2Nsa20pLCAwLAogCQkJICAgICAgIGNsa19iYXNlICsgQ0xLX1NPVVJDRV9FTUMsCi0JCQkgICAgICAgMjksIDMsIDAsIE5VTEwpOworCQkJICAgICAgIDI5LCAzLCAwLCAmZW1jX2xvY2spOworCisJY2xrID0gdGVncmFfY2xrX3JlZ2lzdGVyX21jKCJtYyIsICJlbWNfbXV4IiwgY2xrX2Jhc2UgKyBDTEtfU09VUkNFX0VNQywKKwkJCQkgICAgJmVtY19sb2NrKTsKKwljbGtzW1RFR1JBMTI0X0NMS19NQ10gPSBjbGs7CiAKIAkvKiBjbWwwICovCiAJY2xrID0gY2xrX3JlZ2lzdGVyX2dhdGUoTlVMTCwgImNtbDAiLCAicGxsX2UiLCAwLCBjbGtfYmFzZSArIFBMTEVfQVVYLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjAuYyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIwLmMKaW5kZXggZGFjZTJiMS4uNDEyNzJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjAuYworKysgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMC5jCkBAIC0xNDAsNiArMTQwLDggQEAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmNsa19iYXNlOwogc3RhdGljIHZvaWQgX19pb21lbSAqcG1jX2Jhc2U7CiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZW1jX2xvY2spOworCiAjZGVmaW5lIFRFR1JBX0lOSVRfREFUQV9NVVgoX25hbWUsIF9wYXJlbnRzLCBfb2Zmc2V0LAlcCiAJCQkgICAgX2Nsa19udW0sIF9nYXRlX2ZsYWdzLCBfY2xrX2lkKQlcCiAJVEVHUkFfSU5JVF9EQVRBKF9uYW1lLCBOVUxMLCBOVUxMLCBfcGFyZW50cywgX29mZnNldCwJXApAQCAtODE5LDExICs4MjEsMTUgQEAKIAkJCSAgICAgICBBUlJBWV9TSVpFKG11eF9wbGxtY3BfY2xrbSksCiAJCQkgICAgICAgQ0xLX1NFVF9SQVRFX05PX1JFUEFSRU5ULAogCQkJICAgICAgIGNsa19iYXNlICsgQ0xLX1NPVVJDRV9FTUMsCi0JCQkgICAgICAgMzAsIDIsIDAsIE5VTEwpOworCQkJICAgICAgIDMwLCAyLCAwLCAmZW1jX2xvY2spOwogCWNsayA9IHRlZ3JhX2Nsa19yZWdpc3Rlcl9wZXJpcGhfZ2F0ZSgiZW1jIiwgImVtY19tdXgiLCAwLCBjbGtfYmFzZSwgMCwKIAkJCQkgICAgNTcsIHBlcmlwaF9jbGtfZW5iX3JlZmNudCk7CiAJY2xrc1tURUdSQTIwX0NMS19FTUNdID0gY2xrOwogCisJY2xrID0gdGVncmFfY2xrX3JlZ2lzdGVyX21jKCJtYyIsICJlbWNfbXV4IiwgY2xrX2Jhc2UgKyBDTEtfU09VUkNFX0VNQywKKwkJCQkgICAgJmVtY19sb2NrKTsKKwljbGtzW1RFR1JBMjBfQ0xLX01DXSA9IGNsazsKKwogCS8qIGRzaSAqLwogCWNsayA9IHRlZ3JhX2Nsa19yZWdpc3Rlcl9wZXJpcGhfZ2F0ZSgiZHNpIiwgInBsbF9kIiwgMCwgY2xrX2Jhc2UsIDAsCiAJCQkJICAgIDQ4LCBwZXJpcGhfY2xrX2VuYl9yZWZjbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMzAuYyBiL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTMwLmMKaW5kZXggNWJiYWNkMC4uNGI5ZDhiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMzAuYworKysgYi9kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEzMC5jCkBAIC0xNzcsNiArMTc3LDcgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhjbWxfbG9jayk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBsbF9kX2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhlbWNfbG9jayk7CiAKICNkZWZpbmUgVEVHUkFfSU5JVF9EQVRBX01VWChfbmFtZSwgX3BhcmVudHMsIF9vZmZzZXQsCVwKIAkJCSAgICBfY2xrX251bSwgX2dhdGVfZmxhZ3MsIF9jbGtfaWQpCVwKQEAgLTExNTcsMTEgKzExNTgsMTUgQEAKIAkJCSAgICAgICBBUlJBWV9TSVpFKG11eF9wbGxtY3BfY2xrbSksCiAJCQkgICAgICAgQ0xLX1NFVF9SQVRFX05PX1JFUEFSRU5ULAogCQkJICAgICAgIGNsa19iYXNlICsgQ0xLX1NPVVJDRV9FTUMsCi0JCQkgICAgICAgMzAsIDIsIDAsIE5VTEwpOworCQkJICAgICAgIDMwLCAyLCAwLCAmZW1jX2xvY2spOwogCWNsayA9IHRlZ3JhX2Nsa19yZWdpc3Rlcl9wZXJpcGhfZ2F0ZSgiZW1jIiwgImVtY19tdXgiLCAwLCBjbGtfYmFzZSwgMCwKIAkJCQkgICAgNTcsIHBlcmlwaF9jbGtfZW5iX3JlZmNudCk7CiAJY2xrc1tURUdSQTMwX0NMS19FTUNdID0gY2xrOwogCisJY2xrID0gdGVncmFfY2xrX3JlZ2lzdGVyX21jKCJtYyIsICJlbWNfbXV4IiwgY2xrX2Jhc2UgKyBDTEtfU09VUkNFX0VNQywKKwkJCQkgICAgJmVtY19sb2NrKTsKKwljbGtzW1RFR1JBMzBfQ0xLX01DXSA9IGNsazsKKwogCS8qIGNtbDAgKi8KIAljbGsgPSBjbGtfcmVnaXN0ZXJfZ2F0ZShOVUxMLCAiY21sMCIsICJwbGxfZSIsIDAsIGNsa19iYXNlICsgUExMRV9BVVgsCiAJCQkJMCwgMCwgJmNtbF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RlZ3JhL2Nsay5oIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLmgKaW5kZXggMTZlYzhkNi4uNGU0NThhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGVncmEvY2xrLmgKKysrIGIvZHJpdmVycy9jbGsvdGVncmEvY2xrLmgKQEAgLTg2LDYgKzg2LDggQEAKIAkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHZvaWQgX19pb21lbSAqcmVnLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB1OCBjbGtfZGl2aWRlcl9mbGFncywgdTggc2hpZnQsIHU4IHdpZHRoLAogCQl1OCBmcmFjX3dpZHRoLCBzcGlubG9ja190ICpsb2NrKTsKK3N0cnVjdCBjbGsgKnRlZ3JhX2Nsa19yZWdpc3Rlcl9tYyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJlbnRfbmFtZSwKKwkJCQkgIHZvaWQgX19pb21lbSAqcmVnLCBzcGlubG9ja190ICpsb2NrKTsKIAogLyoKICAqIFRlZ3JhIFBMTDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RpL2RwbGwuYyBiL2RyaXZlcnMvY2xrL3RpL2RwbGwuYwppbmRleCA3OTc5MWUxLi44NWFjMGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90aS9kcGxsLmMKKysrIGIvZHJpdmVycy9jbGsvdGkvZHBsbC5jCkBAIC0zMyw2ICszMyw5IEBACiAJLnJlY2FsY19yYXRlCT0gJm9tYXA0X2RwbGxfcmVnbTR4ZW5fcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXA0X2RwbGxfcmVnbTR4ZW5fcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5zZXRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50LAorCS5zZXRfcmF0ZV9hbmRfcGFyZW50CT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZV9hbmRfcGFyZW50LAorCS5kZXRlcm1pbmVfcmF0ZQk9ICZvbWFwNF9kcGxsX3JlZ200eGVuX2RldGVybWluZV9yYXRlLAogCS5nZXRfcGFyZW50CT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCiB9OwogI2Vsc2UKQEAgLTUzLDYgKzU2LDkgQEAKIAkucmVjYWxjX3JhdGUJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQsCisJLnNldF9yYXRlX2FuZF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlX2FuZF9wYXJlbnQsCisJLmRldGVybWluZV9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kZXRlcm1pbmVfcmF0ZSwKIAkuZ2V0X3BhcmVudAk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAogfTsKIApAQCAtNjEsNiArNjcsOSBAQAogCS5nZXRfcGFyZW50CT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9wYXJlbnQsCisJLnNldF9yYXRlX2FuZF9wYXJlbnQJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlX2FuZF9wYXJlbnQsCisJLmRldGVybWluZV9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kZXRlcm1pbmVfcmF0ZSwKIH07CiAjZWxzZQogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGRwbGxfY29yZV9ja19vcHMgPSB7fTsKQEAgLTk3LDYgKzEwNiw5IEBACiAJLmdldF9wYXJlbnQJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKIAkucmVjYWxjX3JhdGUJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKKwkuc2V0X3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3BhcmVudCwKKwkuc2V0X3JhdGVfYW5kX3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGVfYW5kX3BhcmVudCwKKwkuZGV0ZXJtaW5lX3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2RldGVybWluZV9yYXRlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKIH07CiAKQEAgLTEwNiw2ICsxMTgsOSBAQAogCS5nZXRfcGFyZW50CT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCiAJLnJlY2FsY19yYXRlCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZSwKKwkuc2V0X3BhcmVudAk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3BhcmVudCwKKwkuc2V0X3JhdGVfYW5kX3BhcmVudAk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZV9hbmRfcGFyZW50LAorCS5kZXRlcm1pbmVfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL01ha2VmaWxlIGIvZHJpdmVycy9jbGsvdmVyc2F0aWxlL01ha2VmaWxlCmluZGV4IDE2MmU1MTkuLjhmZjAzNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvTWFrZWZpbGUKQEAgLTIsNiArMiw1IEBACiBvYmotJChDT05GSUdfSUNTVCkJCSs9IGNsay1pY3N0Lm8gY2xrLXZlcnNhdGlsZS5vCiBvYmotJChDT05GSUdfSU5URUdSQVRPUl9JTVBEMSkJKz0gY2xrLWltcGQxLm8KIG9iai0kKENPTkZJR19BUkNIX1JFQUxWSUVXKQkrPSBjbGstcmVhbHZpZXcubwotb2JqLSQoQ09ORklHX0FSQ0hfVkVYUFJFU1MpCSs9IGNsay12ZXhwcmVzcy5vCiBvYmotJChDT05GSUdfQ0xLX1NQODEwKQkJKz0gY2xrLXNwODEwLm8KIG9iai0kKENPTkZJR19DTEtfVkVYUFJFU1NfT1NDKQkrPSBjbGstdmV4cHJlc3Mtb3NjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3Mtb3NjLmMgYi9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLW9zYy5jCmluZGV4IDUyOWE1OWMuLjc2NWYxZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3ZlcnNhdGlsZS9jbGstdmV4cHJlc3Mtb3NjLmMKKysrIGIvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy1vc2MuYwpAQCAtNzAsNyArNzAsNiBAQAogCiBzdGF0aWMgaW50IHZleHByZXNzX29zY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBjbGtfbG9va3VwICpjbCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOyAvKiBOb24tRFQgbG9va3VwICovCiAJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKIAlzdHJ1Y3QgdmV4cHJlc3Nfb3NjICpvc2M7CiAJc3RydWN0IGNsayAqY2xrOwpAQCAtMTA2LDEyICsxMDUsNiBAQAogCiAJb2ZfY2xrX2FkZF9wcm92aWRlcihwZGV2LT5kZXYub2Zfbm9kZSwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBjbGspOwogCi0JLyogT25seSBoYXBwZW5zIGZvciBub24tRFQgY2FzZXMgKi8KLQlpZiAoY2wpIHsKLQkJY2wtPmNsayA9IGNsazsKLQkJY2xrZGV2X2FkZChjbCk7Ci0JfQotCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiUmVnaXN0ZXJlZCBjbG9jayAnJXMnXG4iLCBpbml0Lm5hbWUpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLmMgYi9kcml2ZXJzL2Nsay92ZXJzYXRpbGUvY2xrLXZleHByZXNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNWUxYjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jbGsvdmVyc2F0aWxlL2Nsay12ZXhwcmVzcy5jCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQVJNIExpbWl0ZWQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYW1iYS9zcDgxMC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZleHByZXNzLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZXhwcmVzc19zcDgxMF90aW1lcmNsa2VuWzRdOwotc3RhdGljIERFRklORV9TUElOTE9DSyh2ZXhwcmVzc19zcDgxMF9sb2NrKTsKLQotc3RhdGljIHZvaWQgX19pbml0IHZleHByZXNzX3NwODEwX2luaXQodm9pZCBfX2lvbWVtICpiYXNlKQotewotCWludCBpOwotCi0JaWYgKFdBUk5fT04oIWJhc2UpKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2ZXhwcmVzc19zcDgxMF90aW1lcmNsa2VuKTsgaSsrKSB7Ci0JCWNoYXIgbmFtZVsxMl07Ci0JCWNvbnN0IGNoYXIgKnBhcmVudHNbXSA9IHsKLQkJCSJ2Mm06cmVmY2xrMzJraHoiLCAvKiBSRUZDTEsgKi8KLQkJCSJ2Mm06cmVmY2xrMW1oeiIgLyogVElNQ0xLICovCi0JCX07Ci0KLQkJc25wcmludGYobmFtZSwgQVJSQVlfU0laRShuYW1lKSwgInRpbWVyY2xrZW4lZCIsIGkpOwotCi0JCXZleHByZXNzX3NwODEwX3RpbWVyY2xrZW5baV0gPSBjbGtfcmVnaXN0ZXJfbXV4KE5VTEwsIG5hbWUsCi0JCQkJcGFyZW50cywgMiwgQ0xLX1NFVF9SQVRFX05PX1JFUEFSRU5ULAotCQkJCWJhc2UgKyBTQ0NUUkwsIFNDQ1RSTF9USU1FUkVOblNFTF9TSElGVChpKSwgMSwKLQkJCQkwLCAmdmV4cHJlc3Nfc3A4MTBfbG9jayk7Ci0KLQkJaWYgKFdBUk5fT04oSVNfRVJSKHZleHByZXNzX3NwODEwX3RpbWVyY2xrZW5baV0pKSkKLQkJCWJyZWFrOwotCX0KLX0KLQotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZleHByZXNzX2Nsa18yNG1oel9wZXJpcGhzW10gX19pbml0Y29uc3QgPSB7Ci0JIm1iOnVhcnQwIiwgIm1iOnVhcnQxIiwgIm1iOnVhcnQyIiwgIm1iOnVhcnQzIiwKLQkibWI6bW1jaSIsICJtYjprbWkwIiwgIm1iOmttaTEiCi19OwotCi12b2lkIF9faW5pdCB2ZXhwcmVzc19jbGtfaW5pdCh2b2lkIF9faW9tZW0gKnNwODEwX2Jhc2UpCi17Ci0Jc3RydWN0IGNsayAqY2xrOwotCWludCBpOwotCi0JY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoTlVMTCwgImR1bW15X2FwYl9wY2xrIiwgTlVMTCwKLQkJCUNMS19JU19ST09ULCAwKTsKLQlXQVJOX09OKGNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrLCAiYXBiX3BjbGsiLCBOVUxMKSk7Ci0KLQljbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCAidjJtOmNsa18yNG1oeiIsIE5VTEwsCi0JCQlDTEtfSVNfUk9PVCwgMjQwMDAwMDApOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZleHByZXNzX2Nsa18yNG1oel9wZXJpcGhzKTsgaSsrKQotCQlXQVJOX09OKGNsa19yZWdpc3Rlcl9jbGtkZXYoY2xrLCBOVUxMLAotCQkJCXZleHByZXNzX2Nsa18yNG1oel9wZXJpcGhzW2ldKSk7Ci0KLQljbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCAidjJtOnJlZmNsazMya2h6IiwgTlVMTCwKLQkJCUNMS19JU19ST09ULCAzMjc2OCk7Ci0JV0FSTl9PTihjbGtfcmVnaXN0ZXJfY2xrZGV2KGNsaywgTlVMTCwgInYybTp3ZHQiKSk7Ci0KLQljbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCAidjJtOnJlZmNsazFtaHoiLCBOVUxMLAotCQkJQ0xLX0lTX1JPT1QsIDEwMDAwMDApOwotCi0JdmV4cHJlc3Nfc3A4MTBfaW5pdChzcDgxMF9iYXNlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZleHByZXNzX3NwODEwX3RpbWVyY2xrZW4pOyBpKyspCi0JCVdBUk5fT04oY2xrX3NldF9wYXJlbnQodmV4cHJlc3Nfc3A4MTBfdGltZXJjbGtlbltpXSwgY2xrKSk7Ci0KLQlXQVJOX09OKGNsa19yZWdpc3Rlcl9jbGtkZXYodmV4cHJlc3Nfc3A4MTBfdGltZXJjbGtlblswXSwKLQkJCQkidjJtLXRpbWVyMCIsICJzcDgwNCIpKTsKLQlXQVJOX09OKGNsa19yZWdpc3Rlcl9jbGtkZXYodmV4cHJlc3Nfc3A4MTBfdGltZXJjbGtlblsxXSwKLQkJCQkidjJtLXRpbWVyMSIsICJzcDgwNCIpKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZwppbmRleCA5MDQyMDYwLi5mNjU3YTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCkBAIC0zMiw2ICszMiw3IEBACiAKIGNvbmZpZyBNRVNPTjZfVElNRVIKIAlib29sCisJc2VsZWN0IENMS1NSQ19NTUlPCiAKIGNvbmZpZyBPUklPTl9USU1FUgogCXNlbGVjdCBDTEtTUkNfT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCmluZGV4IDc1NmY2ZjEuLmZhZTA0MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQpAQCAtNDUsNCArNDUsNSBAQAogb2JqLSQoQ09ORklHX0NMS1NSQ19NRVRBR19HRU5FUklDKQkrPSBtZXRhZ19nZW5lcmljLm8KIG9iai0kKENPTkZJR19BUkNIX0hBU19USUNLX0JST0FEQ0FTVCkJKz0gZHVtbXlfdGltZXIubwogb2JqLSQoQ09ORklHX0FSQ0hfS0VZU1RPTkUpCQkrPSB0aW1lci1rZXlzdG9uZS5vCitvYmotJChDT05GSUdfQVJDSF9JTlRFR1JBVE9SX0FQKQkrPSB0aW1lci1pbnRlZ3JhdG9yLWFwLm8KIG9iai0kKENPTkZJR19DTEtTUkNfVkVSU0FUSUxFKQkJKz0gdmVyc2F0aWxlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYXJtX2FyY2hfdGltZXIuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYXJtX2FyY2hfdGltZXIuYwppbmRleCA0MzAwNWQ0Li42YTc5ZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FybV9hcmNoX3RpbWVyLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5jCkBAIC00NjIsNyArNDYyLDEwIEBACiAKIAkvKiBSZWdpc3RlciB0aGUgQ1AxNSBiYXNlZCBjb3VudGVyIGlmIHdlIGhhdmUgb25lICovCiAJaWYgKHR5cGUgJiBBUkNIX0NQMTVfVElNRVIpIHsKLQkJYXJjaF90aW1lcl9yZWFkX2NvdW50ZXIgPSBhcmNoX2NvdW50ZXJfZ2V0X2NudHZjdDsKKwkJaWYgKGFyY2hfdGltZXJfdXNlX3ZpcnR1YWwpCisJCQlhcmNoX3RpbWVyX3JlYWRfY291bnRlciA9IGFyY2hfY291bnRlcl9nZXRfY250dmN0OworCQllbHNlCisJCQlhcmNoX3RpbWVyX3JlYWRfY291bnRlciA9IGFyY2hfY291bnRlcl9nZXRfY250cGN0OwogCX0gZWxzZSB7CiAJCWFyY2hfdGltZXJfcmVhZF9jb3VudGVyID0gYXJjaF9jb3VudGVyX2dldF9jbnR2Y3RfbWVtOwogCkBAIC03MDIsNiArNzA1LDE0IEBACiAJYXJjaF90aW1lcl9kZXRlY3RfcmF0ZShOVUxMLCBucCk7CiAKIAkvKgorCSAqIElmIHdlIGNhbm5vdCByZWx5IG9uIGZpcm13YXJlIGluaXRpYWxpemluZyB0aGUgdGltZXIgcmVnaXN0ZXJzIHRoZW4KKwkgKiB3ZSBzaG91bGQgdXNlIHRoZSBwaHlzaWNhbCB0aW1lcnMgaW5zdGVhZC4KKwkgKi8KKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJNKSAmJgorCSAgICBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJhcm0sY3B1LXJlZ2lzdGVycy1ub3QtZnctY29uZmlndXJlZCIpKQorCQkJYXJjaF90aW1lcl91c2VfdmlydHVhbCA9IGZhbHNlOworCisJLyoKIAkgKiBJZiBIWVAgbW9kZSBpcyBhdmFpbGFibGUsIHdlIGtub3cgdGhhdCB0aGUgcGh5c2ljYWwgdGltZXIKIAkgKiBoYXMgYmVlbiBjb25maWd1cmVkIHRvIGJlIGFjY2Vzc2libGUgZnJvbSBQTDEuIFVzZSBpdCwgc28KIAkgKiB0aGF0IGEgZ3Vlc3QgY2FuIHVzZSB0aGUgdmlydHVhbCB0aW1lciBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lLWFybWFkYS0zNzAteHAuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZS1hcm1hZGEtMzcwLXhwLmMKaW5kZXggMDQ1MWU2Mi4uMGM4YzVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lLWFybWFkYS0zNzAteHAuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWUtYXJtYWRhLTM3MC14cC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWRfY2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAvKgogICogVGltZXIgYmxvY2sgcmVnaXN0ZXJzLgpAQCAtMjIzLDYgKzIyNCwyOCBAQAogCS5ub3RpZmllcl9jYWxsID0gYXJtYWRhXzM3MF94cF90aW1lcl9jcHVfbm90aWZ5LAogfTsKIAorc3RhdGljIHUzMiB0aW1lcjBfY3RybF9yZWcsIHRpbWVyMF9sb2NhbF9jdHJsX3JlZzsKKworc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX3RpbWVyX3N1c3BlbmQodm9pZCkKK3sKKwl0aW1lcjBfY3RybF9yZWcgPSByZWFkbCh0aW1lcl9iYXNlICsgVElNRVJfQ1RSTF9PRkYpOworCXRpbWVyMF9sb2NhbF9jdHJsX3JlZyA9IHJlYWRsKGxvY2FsX2Jhc2UgKyBUSU1FUl9DVFJMX09GRik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFybWFkYV8zNzBfeHBfdGltZXJfcmVzdW1lKHZvaWQpCit7CisJd3JpdGVsKDB4ZmZmZmZmZmYsIHRpbWVyX2Jhc2UgKyBUSU1FUjBfVkFMX09GRik7CisJd3JpdGVsKDB4ZmZmZmZmZmYsIHRpbWVyX2Jhc2UgKyBUSU1FUjBfUkVMT0FEX09GRik7CisJd3JpdGVsKHRpbWVyMF9jdHJsX3JlZywgdGltZXJfYmFzZSArIFRJTUVSX0NUUkxfT0ZGKTsKKwl3cml0ZWwodGltZXIwX2xvY2FsX2N0cmxfcmVnLCBsb2NhbF9iYXNlICsgVElNRVJfQ1RSTF9PRkYpOworfQorCitzdHJ1Y3Qgc3lzY29yZV9vcHMgYXJtYWRhXzM3MF94cF90aW1lcl9zeXNjb3JlX29wcyA9IHsKKwkuc3VzcGVuZAk9IGFybWFkYV8zNzBfeHBfdGltZXJfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFybWFkYV8zNzBfeHBfdGltZXJfcmVzdW1lLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzBfeHBfdGltZXJfY29tbW9uX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAl1MzIgY2xyID0gMCwgc2V0ID0gMDsKQEAgLTI4NSw2ICszMDgsOCBAQAogCS8qIEltbWVkaWF0ZWx5IGNvbmZpZ3VyZSB0aGUgdGltZXIgb24gdGhlIGJvb3QgQ1BVICovCiAJaWYgKCFyZXMpCiAJCWFybWFkYV8zNzBfeHBfdGltZXJfc2V0dXAodGhpc19jcHVfcHRyKGFybWFkYV8zNzBfeHBfZXZ0KSk7CisKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmYXJtYWRhXzM3MF94cF90aW1lcl9zeXNjb3JlX29wcyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfeHBfdGltZXJfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQpAQCAtMjkzLDYgKzMxOCw3IEBACiAKIAkvKiBUaGUgMjVNaHogZml4ZWQgY2xvY2sgaXMgbWFuZGF0b3J5LCBhbmQgbXVzdCBhbHdheXMgYmUgYXZhaWxhYmxlICovCiAJQlVHX09OKElTX0VSUihjbGspKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKIAl0aW1lcl9jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIAogCWFybWFkYV8zNzBfeHBfdGltZXJfY29tbW9uX2luaXQobnApOwpAQCAtMzAwLDExICszMjYsNDAgQEAKIENMT0NLU09VUkNFX09GX0RFQ0xBUkUoYXJtYWRhX3hwLCAibWFydmVsbCxhcm1hZGEteHAtdGltZXIiLAogCQkgICAgICAgYXJtYWRhX3hwX3RpbWVyX2luaXQpOwogCitzdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3NV90aW1lcl9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IGNsayAqY2xrOworCisJY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKG5wLCAiZml4ZWQiKTsKKwlpZiAoIUlTX0VSUihjbGspKSB7CisJCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOworCQl0aW1lcl9jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKKwl9IGVsc2UgeworCisJCS8qCisJCSAqIFRoaXMgZmFsbGJhY2sgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gcmV0YWluIHByb3BlcgorCQkgKiBkZXZpY2V0cmVlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCQkgKi8KKwkJY2xrID0gb2ZfY2xrX2dldChucCwgMCk7CisKKwkJLyogTXVzdCBoYXZlIGF0IGxlYXN0IGEgY2xvY2sgKi8KKwkJQlVHX09OKElTX0VSUihjbGspKTsKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7CisJCXRpbWVyX2NsayA9IGNsa19nZXRfcmF0ZShjbGspIC8gVElNRVJfRElWSURFUjsKKwkJdGltZXIyNU1oeiA9IGZhbHNlOworCX0KKworCWFybWFkYV8zNzBfeHBfdGltZXJfY29tbW9uX2luaXQobnApOworfQorQ0xPQ0tTT1VSQ0VfT0ZfREVDTEFSRShhcm1hZGFfMzc1LCAibWFydmVsbCxhcm1hZGEtMzc1LXRpbWVyIiwKKwkJICAgICAgIGFybWFkYV8zNzVfdGltZXJfaW5pdCk7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzcwX3RpbWVyX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAlzdHJ1Y3QgY2xrICpjbGsgPSBvZl9jbGtfZ2V0KG5wLCAwKTsKIAogCUJVR19PTihJU19FUlIoY2xrKSk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7CiAJdGltZXJfY2xrID0gY2xrX2dldF9yYXRlKGNsaykgLyBUSU1FUl9ESVZJREVSOwogCXRpbWVyMjVNaHogPSBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1hdG1lbC1waXQuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItYXRtZWwtcGl0LmMKaW5kZXggZDUyODkwOS4uYjViNGQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1hdG1lbC1waXQuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLWF0bWVsLXBpdC5jCkBAIC0yNjIsMzUgKzI2MiwzIEBACiB9CiBDTE9DS1NPVVJDRV9PRl9ERUNMQVJFKGF0OTFzYW05MjZ4X3BpdCwgImF0bWVsLGF0OTFzYW05MjYwLXBpdCIsCiAJCSAgICAgICBhdDkxc2FtOTI2eF9waXRfZHRfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnBpdF9iYXNlX2FkZHI7Ci0KLXZvaWQgX19pbml0IGF0OTFzYW05MjZ4X3BpdF9pbml0KGludCBpcnEpCi17Ci0Jc3RydWN0IHBpdF9kYXRhICpkYXRhOwotCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlwYW5pYyhwcl9mbXQoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpKTsKLQotCWRhdGEtPmJhc2UgPSBwaXRfYmFzZV9hZGRyOwotCi0JZGF0YS0+bWNrID0gY2xrX2dldChOVUxMLCAibWNrIik7Ci0JaWYgKElTX0VSUihkYXRhLT5tY2spKQotCQlwYW5pYyhwcl9mbXQoIlVuYWJsZSB0byBnZXQgbWNrIGNsa1xuIikpOwotCi0JZGF0YS0+aXJxID0gaXJxOwotCi0JYXQ5MXNhbTkyNnhfcGl0X2NvbW1vbl9pbml0KGRhdGEpOwotfQotCi12b2lkIF9faW5pdCBhdDkxc2FtOTI2eF9pb3JlbWFwX3BpdCh1MzIgYWRkcikKLXsKLQlpZiAob2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSkKLQkJcmV0dXJuOwotCi0JcGl0X2Jhc2VfYWRkciA9IGlvcmVtYXAoYWRkciwgMTYpOwotCi0JaWYgKCFwaXRfYmFzZV9hZGRyKQotCQlwYW5pYyhwcl9mbXQoIkltcG9zc2libGUgdG8gaW9yZW1hcCBQSVRcbiIpKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItaW50ZWdyYXRvci1hcC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1pbnRlZ3JhdG9yLWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjllZmQzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItaW50ZWdyYXRvci1hcC5jCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogSW50ZWdyYXRvci9BUCB0aW1lciBkcml2ZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIExpbmFybyBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZF9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdGltZXIuaD4KKworc3RhdGljIHZvaWQgX19pb21lbSAqIHNjaGVkX2Nsa19iYXNlOworCitzdGF0aWMgdTY0IG5vdHJhY2UgaW50ZWdyYXRvcl9yZWFkX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIC1yZWFkbChzY2hlZF9jbGtfYmFzZSArIFRJTUVSX1ZBTFVFKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWdyYXRvcl9jbG9ja3NvdXJjZV9pbml0KHVuc2lnbmVkIGxvbmcgaW5yYXRlLAorCQkJCQl2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJdTMyIGN0cmwgPSBUSU1FUl9DVFJMX0VOQUJMRSB8IFRJTUVSX0NUUkxfUEVSSU9ESUM7CisJdW5zaWduZWQgbG9uZyByYXRlID0gaW5yYXRlOworCisJaWYgKHJhdGUgPj0gMTUwMDAwMCkgeworCQlyYXRlIC89IDE2OworCQljdHJsIHw9IFRJTUVSX0NUUkxfRElWMTY7CisJfQorCisJd3JpdGVsKDB4ZmZmZiwgYmFzZSArIFRJTUVSX0xPQUQpOworCXdyaXRlbChjdHJsLCBiYXNlICsgVElNRVJfQ1RSTCk7CisKKwljbG9ja3NvdXJjZV9tbWlvX2luaXQoYmFzZSArIFRJTUVSX1ZBTFVFLCAidGltZXIyIiwKKwkJCXJhdGUsIDIwMCwgMTYsIGNsb2Nrc291cmNlX21taW9fcmVhZGxfZG93bik7CisKKwlzY2hlZF9jbGtfYmFzZSA9IGJhc2U7CisJc2NoZWRfY2xvY2tfcmVnaXN0ZXIoaW50ZWdyYXRvcl9yZWFkX3NjaGVkX2Nsb2NrLCAxNiwgcmF0ZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3JlbG9hZDsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBjbGtldnRfYmFzZTsKKworLyoKKyAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIKKyAqLworc3RhdGljIGlycXJldHVybl90IGludGVncmF0b3JfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSBkZXZfaWQ7CisKKwkvKiBjbGVhciB0aGUgaW50ZXJydXB0ICovCisJd3JpdGVsKDEsIGNsa2V2dF9iYXNlICsgVElNRVJfSU5UQ0xSKTsKKworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBjbGtldnRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwl1MzIgY3RybCA9IHJlYWRsKGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCkgJiB+VElNRVJfQ1RSTF9FTkFCTEU7CisKKwkvKiBEaXNhYmxlIHRpbWVyICovCisJd3JpdGVsKGN0cmwsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQkvKiBFbmFibGUgdGhlIHRpbWVyIGFuZCBzdGFydCB0aGUgcGVyaW9kaWMgdGljayAqLworCQl3cml0ZWwodGltZXJfcmVsb2FkLCBjbGtldnRfYmFzZSArIFRJTUVSX0xPQUQpOworCQljdHJsIHw9IFRJTUVSX0NUUkxfUEVSSU9ESUMgfCBUSU1FUl9DVFJMX0VOQUJMRTsKKwkJd3JpdGVsKGN0cmwsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJLyogTGVhdmUgdGhlIHRpbWVyIGRpc2FibGVkLCAuc2V0X25leHRfZXZlbnQgd2lsbCBlbmFibGUgaXQgKi8KKwkJY3RybCAmPSB+VElNRVJfQ1RSTF9QRVJJT0RJQzsKKwkJd3JpdGVsKGN0cmwsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJZGVmYXVsdDoKKwkJLyogSnVzdCBsZWF2ZSBpbiBkaXNhYmxlZCBzdGF0ZSAqLworCQlicmVhazsKKwl9CisKK30KKworc3RhdGljIGludCBjbGtldnRfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdW5zaWduZWQgbG9uZyBjdHJsID0gcmVhZGwoY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKKworCXdyaXRlbChjdHJsICYgflRJTUVSX0NUUkxfRU5BQkxFLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOworCXdyaXRlbChuZXh0LCBjbGtldnRfYmFzZSArIFRJTUVSX0xPQUQpOworCXdyaXRlbChjdHJsIHwgVElNRVJfQ1RSTF9FTkFCTEUsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgaW50ZWdyYXRvcl9jbG9ja2V2ZW50ID0geworCS5uYW1lCQk9ICJ0aW1lcjEiLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuc2V0X21vZGUJPSBjbGtldnRfc2V0X21vZGUsCisJLnNldF9uZXh0X2V2ZW50CT0gY2xrZXZ0X3NldF9uZXh0X2V2ZW50LAorCS5yYXRpbmcJCT0gMzAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaW50ZWdyYXRvcl90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gInRpbWVyIiwKKwkuZmxhZ3MJCT0gSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuaGFuZGxlcgk9IGludGVncmF0b3JfdGltZXJfaW50ZXJydXB0LAorCS5kZXZfaWQJCT0gJmludGVncmF0b3JfY2xvY2tldmVudCwKK307CisKK3N0YXRpYyB2b2lkIGludGVncmF0b3JfY2xvY2tldmVudF9pbml0KHVuc2lnbmVkIGxvbmcgaW5yYXRlLAorCQkJCXZvaWQgX19pb21lbSAqYmFzZSwgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBpbnJhdGU7CisJdW5zaWduZWQgaW50IGN0cmwgPSAwOworCisJY2xrZXZ0X2Jhc2UgPSBiYXNlOworCS8qIENhbGN1bGF0ZSBhbmQgcHJvZ3JhbSBhIGRpdmlzb3IgKi8KKwlpZiAocmF0ZSA+IDB4MTAwMDAwICogSFopIHsKKwkJcmF0ZSAvPSAyNTY7CisJCWN0cmwgfD0gVElNRVJfQ1RSTF9ESVYyNTY7CisJfSBlbHNlIGlmIChyYXRlID4gMHgxMDAwMCAqIEhaKSB7CisJCXJhdGUgLz0gMTY7CisJCWN0cmwgfD0gVElNRVJfQ1RSTF9ESVYxNjsKKwl9CisJdGltZXJfcmVsb2FkID0gcmF0ZSAvIEhaOworCXdyaXRlbChjdHJsLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOworCisJc2V0dXBfaXJxKGlycSwgJmludGVncmF0b3JfdGltZXJfaXJxKTsKKwljbG9ja2V2ZW50c19jb25maWdfYW5kX3JlZ2lzdGVyKCZpbnRlZ3JhdG9yX2Nsb2NrZXZlbnQsCisJCQkJCXJhdGUsCisJCQkJCTEsCisJCQkJCTB4ZmZmZlUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaW50ZWdyYXRvcl9hcF90aW1lcl9pbml0X29mKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwljb25zdCBjaGFyICpwYXRoOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgZXJyOworCWludCBpcnE7CisJc3RydWN0IGNsayAqY2xrOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByaV9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc2VjX25vZGU7CisKKwliYXNlID0gb2ZfaW9fcmVxdWVzdF9hbmRfbWFwKG5vZGUsIDAsICJpbnRlZ3JhdG9yLXRpbWVyIik7CisJaWYgKCFiYXNlKQorCQlyZXR1cm47CisKKwljbGsgPSBvZl9jbGtfZ2V0KG5vZGUsIDApOworCWlmIChJU19FUlIoY2xrKSkgeworCQlwcl9lcnIoIk5vIGNsb2NrIGZvciAlc1xuIiwgbm9kZS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7CisJcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOworCXdyaXRlbCgwLCBiYXNlICsgVElNRVJfQ1RSTCk7CisKKwllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhvZl9hbGlhc2VzLAorCQkJCSJhcm0sdGltZXItcHJpbWFyeSIsICZwYXRoKTsKKwlpZiAoV0FSTl9PTihlcnIpKQorCQlyZXR1cm47CisJcHJpX25vZGUgPSBvZl9maW5kX25vZGVfYnlfcGF0aChwYXRoKTsKKwllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhvZl9hbGlhc2VzLAorCQkJCSJhcm0sdGltZXItc2Vjb25kYXJ5IiwgJnBhdGgpOworCWlmIChXQVJOX09OKGVycikpCisJCXJldHVybjsKKwlzZWNfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKHBhdGgpOworCisJaWYgKG5vZGUgPT0gcHJpX25vZGUpIHsKKwkJLyogVGhlIHByaW1hcnkgdGltZXIgbGFja3MgSVJRLCB1c2UgYXMgY2xvY2tzb3VyY2UgKi8KKwkJaW50ZWdyYXRvcl9jbG9ja3NvdXJjZV9pbml0KHJhdGUsIGJhc2UpOworCQlyZXR1cm47CisJfQorCisJaWYgKG5vZGUgPT0gc2VjX25vZGUpIHsKKwkJLyogVGhlIHNlY29uZGFyeSB0aW1lciB3aWxsIGRyaXZlIHRoZSBjbG9jayBldmVudCAqLworCQlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsKKwkJaW50ZWdyYXRvcl9jbG9ja2V2ZW50X2luaXQocmF0ZSwgYmFzZSwgaXJxKTsKKwkJcmV0dXJuOworCX0KKworCXByX2luZm8oIlRpbWVyIEAlcCB1bnVzZWRcbiIsIGJhc2UpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGspOworfQorCitDTE9DS1NPVVJDRV9PRl9ERUNMQVJFKGludGVncmF0b3JfYXBfdGltZXIsICJhcm0saW50ZWdyYXRvci10aW1lciIsCisJCSAgICAgICBpbnRlZ3JhdG9yX2FwX3RpbWVyX2luaXRfb2YpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1tYXJjby5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1tYXJjby5jCmluZGV4IGNhZjdhMjAuLjM2MWE3ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItbWFyY28uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLW1hcmNvLmMKQEAgLTIwLDggKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWRfY2xvY2suaD4KIAotI2RlZmluZSBNQVJDT19DTE9DS19GUkVRIDEwMDAwMDAKLQogI2RlZmluZSBTSVJGU09DX1RJTUVSXzMyQ09VTlRFUl8wX0NUUkwJCQkweDAwMDAKICNkZWZpbmUgU0lSRlNPQ19USU1FUl8zMkNPVU5URVJfMV9DVFJMCQkJMHgwMDA0CiAjZGVmaW5lIFNJUkZTT0NfVElNRVJfTUFUQ0hfMAkJCQkweDAwMTgKQEAgLTQwLDYgKzM4LDggQEAKIAogI2RlZmluZSBTSVJGU09DX1RJTUVSX1JFR19DTlQgNgogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXJjb190aW1lcl9yYXRlOworCiBzdGF0aWMgY29uc3QgdTMyIHNpcmZzb2NfdGltZXJfcmVnX2xpc3RbU0lSRlNPQ19USU1FUl9SRUdfQ05UXSA9IHsKIAlTSVJGU09DX1RJTUVSX1dBVENIRE9HX0VOLAogCVNJUkZTT0NfVElNRVJfMzJDT1VOVEVSXzBfQ1RSTCwKQEAgLTE5NSw3ICsxOTUsNyBAQAogCWNlLT5yYXRpbmcgPSAyMDA7CiAJY2UtPnNldF9tb2RlID0gc2lyZnNvY190aW1lcl9zZXRfbW9kZTsKIAljZS0+c2V0X25leHRfZXZlbnQgPSBzaXJmc29jX3RpbWVyX3NldF9uZXh0X2V2ZW50OwotCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdChjZSwgTUFSQ09fQ0xPQ0tfRlJFUSwgNjApOworCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdChjZSwgbWFyY29fdGltZXJfcmF0ZSwgNjApOwogCWNlLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKC0yLCBjZSk7CiAJY2UtPm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMiwgY2UpOwogCWNlLT5jcHVtYXNrID0gY3B1bWFza19vZihjcHUpOwpAQCAtMjU3LDcgKzI1Nyw2IEBACiAvKiBpbml0aWFsaXplIHRoZSBrZXJuZWwgamlmZnkgdGltZXIgc291cmNlICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2lyZnNvY19tYXJjb190aW1lcl9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7Ci0JdW5zaWduZWQgbG9uZyByYXRlOwogCXUzMiB0aW1lcl9kaXY7CiAJc3RydWN0IGNsayAqY2xrOwogCkBAIC0yNjYsMTYgKzI2NSwxMiBAQAogCiAJQlVHX09OKGNsa19wcmVwYXJlX2VuYWJsZShjbGspKTsKIAotCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKKwltYXJjb190aW1lcl9yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CiAKLQlCVUdfT04ocmF0ZSA8IE1BUkNPX0NMT0NLX0ZSRVEpOwotCUJVR19PTihyYXRlICUgTUFSQ09fQ0xPQ0tfRlJFUSk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSB0aW1lciBkaXZpZGVycyAqLwotCXRpbWVyX2RpdiA9IHJhdGUgLyBNQVJDT19DTE9DS19GUkVRIC0gMTsKLQl3cml0ZWxfcmVsYXhlZCh0aW1lcl9kaXYgPDwgMTYsIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfNjRDT1VOVEVSX0NUUkwpOwotCXdyaXRlbF9yZWxheGVkKHRpbWVyX2RpdiA8PCAxNiwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl8zMkNPVU5URVJfMF9DVFJMKTsKLQl3cml0ZWxfcmVsYXhlZCh0aW1lcl9kaXYgPDwgMTYsIHNpcmZzb2NfdGltZXJfYmFzZSArIFNJUkZTT0NfVElNRVJfMzJDT1VOVEVSXzFfQ1RSTCk7CisJLyogdGltZXIgZGl2aWRlcnM6IDAsIG5vdCBkaXZpZGVkICovCisJd3JpdGVsX3JlbGF4ZWQoMCwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl82NENPVU5URVJfQ1RSTCk7CisJd3JpdGVsX3JlbGF4ZWQoMCwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl8zMkNPVU5URVJfMF9DVFJMKTsKKwl3cml0ZWxfcmVsYXhlZCgwLCBzaXJmc29jX3RpbWVyX2Jhc2UgKyBTSVJGU09DX1RJTUVSXzMyQ09VTlRFUl8xX0NUUkwpOwogCiAJLyogSW5pdGlhbGl6ZSB0aW1lciBjb3VudGVycyB0byAwICovCiAJd3JpdGVsX3JlbGF4ZWQoMCwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl82NENPVU5URVJfTE9BRF9MTyk7CkBAIC0yODgsNyArMjgzLDcgQEAKIAkvKiBDbGVhciBhbGwgaW50ZXJydXB0cyAqLwogCXdyaXRlbF9yZWxheGVkKDB4RkZGRiwgc2lyZnNvY190aW1lcl9iYXNlICsgU0lSRlNPQ19USU1FUl9JTlRSX1NUQVRVUyk7CiAKLQlCVUdfT04oY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJnNpcmZzb2NfY2xvY2tzb3VyY2UsIE1BUkNPX0NMT0NLX0ZSRVEpKTsKKwlCVUdfT04oY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJnNpcmZzb2NfY2xvY2tzb3VyY2UsIG1hcmNvX3RpbWVyX3JhdGUpKTsKIAogCXNpcmZzb2NfY2xvY2tldmVudF9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1hcm02NC5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtYXJtNjQuYwppbmRleCA1MDk5N2VhLi44MDcwNGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1hcm02NC5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWFybTY0LmMKQEAgLTczLDcgKzczLDYgQEAKIAkJLmV4aXRfbGF0ZW5jeSAgICAgICAgICAgPSAxLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSAgICAgICA9IDEsCiAJCS5wb3dlcl91c2FnZQkJPSBVSU5UX01BWCwKLQkJLmZsYWdzICAgICAgICAgICAgICAgICAgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKIAkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAiV0ZJIiwKIAkJLmRlc2MgICAgICAgICAgICAgICAgICAgPSAiQVJNNjQgV0ZJIiwKIAl9CkBAIC0xMDQsMTEgKzEwMyw4IEBACiAJICogcmVhc29uIHRvIGluaXRpYWxpemUgdGhlIGlkbGUgZHJpdmVyIGlmIG9ubHkgd2ZpIGlzIHN1cHBvcnRlZC4KIAkgKi8KIAlyZXQgPSBkdF9pbml0X2lkbGVfZHJpdmVyKGRydiwgYXJtNjRfaWRsZV9zdGF0ZV9tYXRjaCwgMSk7Ci0JaWYgKHJldCA8PSAwKSB7Ci0JCWlmIChyZXQpCi0JCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIGlkbGUgc3RhdGVzXG4iKTsKKwlpZiAocmV0IDw9IDApCiAJCXJldHVybiByZXQgPyA6IC1FTk9ERVY7Ci0JfQogCiAJLyoKIAkgKiBDYWxsIGFyY2ggQ1BVIG9wZXJhdGlvbnMgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZQpAQCAtMTIyLDEyICsxMTgsNiBAQAogCQl9CiAJfQogCi0JcmV0ID0gY3B1aWRsZV9yZWdpc3RlcihkcnYsIE5VTEwpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1aWRsZSBkcml2ZXJcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBjcHVpZGxlX3JlZ2lzdGVyKGRydiwgTlVMTCk7CiB9CiBkZXZpY2VfaW5pdGNhbGwoYXJtNjRfaWRsZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWF0OTEuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWF0OTEuYwppbmRleCBhMDc3NDM3Li4xOTY0ZmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1hdDkxLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtYXQ5MS5jCkBAIC00Myw3ICs0Myw2IEBACiAJCS5lbnRlcgkJCT0gYXQ5MV9lbnRlcl9pZGxlLAogCQkuZXhpdF9sYXRlbmN5CQk9IDEwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeQk9IDEwMDAwLAotCQkuZmxhZ3MJCQk9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkubmFtZQkJCT0gIlJBTV9TUiIsCiAJCS5kZXNjCQkJPSAiV0ZJIGFuZCBERFIgU2VsZiBSZWZyZXNoIiwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtYmlnX2xpdHRsZS5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtYmlnX2xpdHRsZS5jCmluZGV4IGZiYzAwYTEuLmUzZTIyNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWJpZ19saXR0bGUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1iaWdfbGl0dGxlLmMKQEAgLTY3LDggKzY3LDcgQEAKIAkJLmVudGVyCQkJPSBibF9lbnRlcl9wb3dlcmRvd24sCiAJCS5leGl0X2xhdGVuY3kJCT0gNzAwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeQk9IDI1MDAsCi0JCS5mbGFncwkJCT0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfAotCQkJCQkgIENQVUlETEVfRkxBR19USU1FUl9TVE9QLAorCQkuZmxhZ3MJCQk9IENQVUlETEVfRkxBR19USU1FUl9TVE9QLAogCQkubmFtZQkJCT0gIkMxIiwKIAkJLmRlc2MJCQk9ICJBUk0gbGl0dGxlLWNsdXN0ZXIgcG93ZXIgZG93biIsCiAJfSwKQEAgLTg5LDggKzg4LDcgQEAKIAkJLmVudGVyCQkJPSBibF9lbnRlcl9wb3dlcmRvd24sCiAJCS5leGl0X2xhdGVuY3kJCT0gNTAwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeQk9IDIwMDAsCi0JCS5mbGFncwkJCT0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfAotCQkJCQkgIENQVUlETEVfRkxBR19USU1FUl9TVE9QLAorCQkuZmxhZ3MJCQk9IENQVUlETEVfRkxBR19USU1FUl9TVE9QLAogCQkubmFtZQkJCT0gIkMxIiwKIAkJLmRlc2MJCQk9ICJBUk0gYmlnLWNsdXN0ZXIgcG93ZXIgZG93biIsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWNhbHhlZGEuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWNhbHhlZGEuYwppbmRleCA2ZTUxMTE0Li42NTQxYjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1jYWx4ZWRhLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtY2FseGVkYS5jCkBAIC01NSw3ICs1NSw2IEBACiAJCXsKIAkJCS5uYW1lID0gIlBHIiwKIAkJCS5kZXNjID0gIlBvd2VyIEdhdGUiLAotCQkJLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCiAJCQkuZXhpdF9sYXRlbmN5ID0gMzAsCiAJCQkucG93ZXJfdXNhZ2UgPSA1MCwKIAkJCS50YXJnZXRfcmVzaWRlbmN5ID0gMjAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtY3BzLmMgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1jcHMuYwppbmRleCBmYzdiNjI3Li4xYWRiNjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1jcHMuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1jcHMuYwpAQCAtNzksNyArNzksNiBAQAogCQkJLmVudGVyCT0gY3BzX25jX2VudGVyLAogCQkJLmV4aXRfbGF0ZW5jeQkJPSAyMDAsCiAJCQkudGFyZ2V0X3Jlc2lkZW5jeQk9IDQ1MCwKLQkJCS5mbGFncwk9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkJLm5hbWUJPSAibmMtd2FpdCIsCiAJCQkuZGVzYwk9ICJub24tY29oZXJlbnQgTUlQUyB3YWl0IiwKIAkJfSwKQEAgLTg3LDggKzg2LDcgQEAKIAkJCS5lbnRlcgk9IGNwc19uY19lbnRlciwKIAkJCS5leGl0X2xhdGVuY3kJCT0gMzAwLAogCQkJLnRhcmdldF9yZXNpZGVuY3kJPSA3MDAsCi0JCQkuZmxhZ3MJPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8Ci0JCQkJICBDUFVJRExFX0ZMQUdfVElNRVJfU1RPUCwKKwkJCS5mbGFncwk9IENQVUlETEVfRkxBR19USU1FUl9TVE9QLAogCQkJLm5hbWUJPSAiY2xvY2stZ2F0ZWQiLAogCQkJLmRlc2MJPSAiY29yZSBjbG9jayBnYXRlZCIsCiAJCX0sCkBAIC05Niw4ICs5NCw3IEBACiAJCQkuZW50ZXIJPSBjcHNfbmNfZW50ZXIsCiAJCQkuZXhpdF9sYXRlbmN5CQk9IDYwMCwKIAkJCS50YXJnZXRfcmVzaWRlbmN5CT0gMTAwMCwKLQkJCS5mbGFncwk9IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwKLQkJCQkgIENQVUlETEVfRkxBR19USU1FUl9TVE9QLAorCQkJLmZsYWdzCT0gQ1BVSURMRV9GTEFHX1RJTUVSX1NUT1AsCiAJCQkubmFtZQk9ICJwb3dlci1nYXRlZCIsCiAJCQkuZGVzYwk9ICJjb3JlIHBvd2VyIGdhdGVkIiwKIAkJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWV4eW5vcy5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtZXh5bm9zLmMKaW5kZXggYmE5YjM0Yi4uNjRkMTJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtZXh5bm9zLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtZXh5bm9zLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKIAkJCS5lbnRlcgkJCT0gZXh5bm9zX2VudGVyX2xvd3Bvd2VyLAogCQkJLmV4aXRfbGF0ZW5jeQkJPSAzMDAsCiAJCQkudGFyZ2V0X3Jlc2lkZW5jeQk9IDEwMDAwMCwKLQkJCS5mbGFncwkJCT0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCiAJCQkubmFtZQkJCT0gIkMxIiwKIAkJCS5kZXNjCQkJPSAiQVJNIHBvd2VyIGRvd24iLAogCQl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUta2lya3dvb2QuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWtpcmt3b29kLmMKaW5kZXggNDFiYTg0My4uZDg4ZjhkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUta2lya3dvb2QuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1raXJrd29vZC5jCkBAIC00Nyw3ICs0Nyw2IEBACiAJCS5lbnRlcgkJCT0ga2lya3dvb2RfZW50ZXJfaWRsZSwKIAkJLmV4aXRfbGF0ZW5jeQkJPSAxMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kJPSAxMDAwMDAsCi0JCS5mbGFncwkJCT0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCiAJCS5uYW1lCQkJPSAiRERSIFNSIiwKIAkJLmRlc2MJCQk9ICJXRkkgYW5kIEREUiBTZWxmIFJlZnJlc2giLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1tdmVidS12Ny5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtbXZlYnUtdjcuYwppbmRleCA0NTM3MWJiLi5kZDRjMTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1tdmVidS12Ny5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLW12ZWJ1LXY3LmMKQEAgLTUzLDcgKzUzLDYgQEAKIAkJLmV4aXRfbGF0ZW5jeQkJPSAxMCwKIAkJLnBvd2VyX3VzYWdlCQk9IDUwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeQk9IDEwMCwKLQkJLmZsYWdzCQkJPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKIAkJLm5hbWUJCQk9ICJNViBDUFUgSURMRSIsCiAJCS5kZXNjCQkJPSAiQ1BVIHBvd2VyIGRvd24iLAogCX0sCkBAIC02Miw4ICs2MSw3IEBACiAJCS5leGl0X2xhdGVuY3kJCT0gMTAwLAogCQkucG93ZXJfdXNhZ2UJCT0gNSwKIAkJLnRhcmdldF9yZXNpZGVuY3kJPSAxMDAwLAotCQkuZmxhZ3MJCQk9IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwKLQkJCQkJCU1WRUJVX1Y3X0ZMQUdfREVFUF9JRExFLAorCQkuZmxhZ3MJCQk9IE1WRUJVX1Y3X0ZMQUdfREVFUF9JRExFLAogCQkubmFtZQkJCT0gIk1WIENQVSBERUVQIElETEUiLAogCQkuZGVzYwkJCT0gIkNQVSBhbmQgTDIgRmFicmljIHBvd2VyIGRvd24iLAogCX0sCkBAIC03OCw4ICs3Niw3IEBACiAJCS5leGl0X2xhdGVuY3kJCT0gMTAwLAogCQkucG93ZXJfdXNhZ2UJCT0gNSwKIAkJLnRhcmdldF9yZXNpZGVuY3kJPSAxMDAwLAotCQkuZmxhZ3MJCQk9IChDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8Ci0JCQkJCSAgIE1WRUJVX1Y3X0ZMQUdfREVFUF9JRExFKSwKKwkJLmZsYWdzCQkJPSBNVkVCVV9WN19GTEFHX0RFRVBfSURMRSwKIAkJLm5hbWUJCQk9ICJEZWVwIElkbGUiLAogCQkuZGVzYwkJCT0gIkNQVSBhbmQgTDIgRmFicmljIHBvd2VyIGRvd24iLAogCX0sCkBAIC05NCw3ICs5MSw2IEBACiAJCS5leGl0X2xhdGVuY3kJCT0gMTAsCiAJCS5wb3dlcl91c2FnZQkJPSA1LAogCQkudGFyZ2V0X3Jlc2lkZW5jeQk9IDEwMCwKLQkJLmZsYWdzCQkJPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKIAkJLm5hbWUJCQk9ICJJZGxlIiwKIAkJLmRlc2MJCQk9ICJDUFUgYW5kIFNDVSBwb3dlciBkb3duIiwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtcG93ZXJudi5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtcG93ZXJudi5jCmluZGV4IDdkM2EzNDkuLmU5MjQ4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLXBvd2VybnYuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1wb3dlcm52LmMKQEAgLTkzLDcgKzkzLDYgQEAKIAl7IC8qIFNub296ZSAqLwogCQkubmFtZSA9ICJzbm9vemUiLAogCQkuZGVzYyA9ICJzbm9vemUiLAotCQkuZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMCwKIAkJLmVudGVyID0gJnNub296ZV9sb29wIH0sCkBAIC0yMDIsNyArMjAxLDcgQEAKIAkJCS8qIEFkZCBOQVAgc3RhdGUgKi8KIAkJCXN0cmNweShwb3dlcm52X3N0YXRlc1tucl9pZGxlX3N0YXRlc10ubmFtZSwgIk5hcCIpOwogCQkJc3RyY3B5KHBvd2VybnZfc3RhdGVzW25yX2lkbGVfc3RhdGVzXS5kZXNjLCAiTmFwIik7Ci0JCQlwb3dlcm52X3N0YXRlc1tucl9pZGxlX3N0YXRlc10uZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRDsKKwkJCXBvd2VybnZfc3RhdGVzW25yX2lkbGVfc3RhdGVzXS5mbGFncyA9IDA7CiAJCQlwb3dlcm52X3N0YXRlc1tucl9pZGxlX3N0YXRlc10uZXhpdF9sYXRlbmN5ID0KIAkJCQkJKCh1bnNpZ25lZCBpbnQpbGF0ZW5jeV9ucykgLyAxMDAwOwogCQkJcG93ZXJudl9zdGF0ZXNbbnJfaWRsZV9zdGF0ZXNdLnRhcmdldF9yZXNpZGVuY3kgPQpAQCAtMjE1LDggKzIxNCw3IEBACiAJCQkvKiBBZGQgRkFTVFNMRUVQIHN0YXRlICovCiAJCQlzdHJjcHkocG93ZXJudl9zdGF0ZXNbbnJfaWRsZV9zdGF0ZXNdLm5hbWUsICJGYXN0U2xlZXAiKTsKIAkJCXN0cmNweShwb3dlcm52X3N0YXRlc1tucl9pZGxlX3N0YXRlc10uZGVzYywgIkZhc3RTbGVlcCIpOwotCQkJcG93ZXJudl9zdGF0ZXNbbnJfaWRsZV9zdGF0ZXNdLmZsYWdzID0KLQkJCQlDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19USU1FUl9TVE9QOworCQkJcG93ZXJudl9zdGF0ZXNbbnJfaWRsZV9zdGF0ZXNdLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVSX1NUT1A7CiAJCQlwb3dlcm52X3N0YXRlc1tucl9pZGxlX3N0YXRlc10uZXhpdF9sYXRlbmN5ID0KIAkJCQkJKCh1bnNpZ25lZCBpbnQpbGF0ZW5jeV9ucykgLyAxMDAwOwogCQkJcG93ZXJudl9zdGF0ZXNbbnJfaWRsZV9zdGF0ZXNdLnRhcmdldF9yZXNpZGVuY3kgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtcHNlcmllcy5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtcHNlcmllcy5jCmluZGV4IDZmN2IwMTkuLmJiOWUyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLXBzZXJpZXMuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1wc2VyaWVzLmMKQEAgLTE0MiwxNCArMTQyLDEyIEBACiAJeyAvKiBTbm9vemUgKi8KIAkJLm5hbWUgPSAic25vb3plIiwKIAkJLmRlc2MgPSAic25vb3plIiwKLQkJLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCiAJCS5leGl0X2xhdGVuY3kgPSAwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDAsCiAJCS5lbnRlciA9ICZzbm9vemVfbG9vcCB9LAogCXsgLyogQ0VERSAqLwogCQkubmFtZSA9ICJDRURFIiwKIAkJLmRlc2MgPSAiQ0VERSIsCi0JCS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElELAogCQkuZXhpdF9sYXRlbmN5ID0gMTAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMTAwLAogCQkuZW50ZXIgPSAmZGVkaWNhdGVkX2NlZGVfbG9vcCB9LApAQCAtMTYyLDcgKzE2MCw2IEBACiAJeyAvKiBTaGFyZWQgQ2VkZSAqLwogCQkubmFtZSA9ICJTaGFyZWQgQ2VkZSIsCiAJCS5kZXNjID0gIlNoYXJlZCBDZWRlIiwKLQkJLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCiAJCS5leGl0X2xhdGVuY3kgPSAwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDAsCiAJCS5lbnRlciA9ICZzaGFyZWRfY2VkZV9sb29wIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS11eDUwMC5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtdXg1MDAuYwppbmRleCA1ZTM1ODA0Li4yOTJlNjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS11eDUwMC5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLXV4NTAwLmMKQEAgLTEwMSw4ICsxMDEsNyBAQAogCQkJLmVudGVyCQkgID0gdXg1MDBfZW50ZXJfaWRsZSwKIAkJCS5leGl0X2xhdGVuY3kJICA9IDcwLAogCQkJLnRhcmdldF9yZXNpZGVuY3kgPSAyNjAsCi0JCQkuZmxhZ3MJCSAgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8Ci0JCQkgICAgICAgICAgICAgICAgICAgIENQVUlETEVfRkxBR19USU1FUl9TVE9QLAorCQkJLmZsYWdzCQkgID0gQ1BVSURMRV9GTEFHX1RJTUVSX1NUT1AsCiAJCQkubmFtZQkJICA9ICJBcElkbGUiLAogCQkJLmRlc2MJCSAgPSAiQVJNIFJldGVudGlvbiIsCiAJCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS16eW5xLmMgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS16eW5xLmMKaW5kZXggYzYxYjhiMi4uMDIyZGVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtenlucS5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLXp5bnEuYwpAQCAtNTIsNyArNTIsNiBAQAogCQkJLmVudGVyCQkJPSB6eW5xX2VudGVyX2lkbGUsCiAJCQkuZXhpdF9sYXRlbmN5CQk9IDEwLAogCQkJLnRhcmdldF9yZXNpZGVuY3kJPSAxMDAwMCwKLQkJCS5mbGFncwkJCT0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCiAJCQkubmFtZQkJCT0gIlJBTV9TUiIsCiAJCQkuZGVzYwkJCT0gIldGSSBhbmQgUkFNIFNlbGYgUmVmcmVzaCIsCiAJCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvZHJpdmVyLmMgYi9kcml2ZXJzL2NwdWlkbGUvZHJpdmVyLmMKaW5kZXggZTQzMWQxMS4uMjY5N2U4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9kcml2ZXIuYwpAQCAtMjAxLDcgKzIwMSw2IEBACiAJc3RhdGUtPmV4aXRfbGF0ZW5jeSA9IDA7CiAJc3RhdGUtPnRhcmdldF9yZXNpZGVuY3kgPSAwOwogCXN0YXRlLT5wb3dlcl91c2FnZSA9IC0xOwotCXN0YXRlLT5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElEOwogCXN0YXRlLT5lbnRlciA9IHBvbGxfaWRsZTsKIAlzdGF0ZS0+ZGlzYWJsZWQgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9kdF9pZGxlX3N0YXRlcy5jIGIvZHJpdmVycy9jcHVpZGxlL2R0X2lkbGVfc3RhdGVzLmMKaW5kZXggNTJmNGQxMS4uYTVjMTExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2R0X2lkbGVfc3RhdGVzLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2R0X2lkbGVfc3RhdGVzLmMKQEAgLTI3LDYgKzI3LDcgQEAKIHsKIAlpbnQgZXJyOwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoX2lkOworCWNvbnN0IGNoYXIgKmRlc2M7CiAKIAltYXRjaF9pZCA9IG9mX21hdGNoX25vZGUobWF0Y2hlcywgc3RhdGVfbm9kZSk7CiAJaWYgKCFtYXRjaF9pZCkKQEAgLTczLDcgKzc0LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlkbGVfc3RhdGUtPmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQ7CisJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoc3RhdGVfbm9kZSwgImlkbGUtc3RhdGUtbmFtZSIsICZkZXNjKTsKKwlpZiAoZXJyKQorCQlkZXNjID0gc3RhdGVfbm9kZS0+bmFtZTsKKworCWlkbGVfc3RhdGUtPmZsYWdzID0gMDsKIAlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKHN0YXRlX25vZGUsICJsb2NhbC10aW1lci1zdG9wIikpCiAJCWlkbGVfc3RhdGUtPmZsYWdzIHw9IENQVUlETEVfRkxBR19USU1FUl9TVE9QOwogCS8qCkBAIC04Miw3ICs4Nyw3IEBACiAJICoJYW5kIGRlc2MgYmVjb21lIHN0cmluZyBwb2ludGVycwogCSAqLwogCXN0cm5jcHkoaWRsZV9zdGF0ZS0+bmFtZSwgc3RhdGVfbm9kZS0+bmFtZSwgQ1BVSURMRV9OQU1FX0xFTiAtIDEpOwotCXN0cm5jcHkoaWRsZV9zdGF0ZS0+ZGVzYywgc3RhdGVfbm9kZS0+bmFtZSwgQ1BVSURMRV9ERVNDX0xFTiAtIDEpOworCXN0cm5jcHkoaWRsZV9zdGF0ZS0+ZGVzYywgZGVzYywgQ1BVSURMRV9ERVNDX0xFTiAtIDEpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjksNiArMTc0LDkgQEAKIAkJaWYgKCFzdGF0ZV9ub2RlKQogCQkJYnJlYWs7CiAKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHN0YXRlX25vZGUpKQorCQkJY29udGludWU7CisKIAkJaWYgKCFpZGxlX3N0YXRlX3ZhbGlkKHN0YXRlX25vZGUsIGksIGNwdW1hc2spKSB7CiAJCQlwcl93YXJuKCIlcyBpZGxlIHN0YXRlIG5vdCB2YWxpZCwgYmFpbGluZyBvdXRcbiIsCiAJCQkJc3RhdGVfbm9kZS0+ZnVsbF9uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbGFkZGVyLmMgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL2xhZGRlci5jCmluZGV4IDA2YjU3YzQuLjM3MjYzZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbGFkZGVyLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9sYWRkZXIuYwpAQCAtNzksNyArNzksNyBAQAogCiAJbGFzdF9zdGF0ZSA9ICZsZGV2LT5zdGF0ZXNbbGFzdF9pZHhdOwogCi0JaWYgKGRydi0+c3RhdGVzW2xhc3RfaWR4XS5mbGFncyAmIENQVUlETEVfRkxBR19USU1FX1ZBTElEKSB7CisJaWYgKCEoZHJ2LT5zdGF0ZXNbbGFzdF9pZHhdLmZsYWdzICYgQ1BVSURMRV9GTEFHX1RJTUVfSU5WQUxJRCkpIHsKIAkJbGFzdF9yZXNpZGVuY3kgPSBjcHVpZGxlX2dldF9sYXN0X3Jlc2lkZW5jeShkZXYpIC0gXAogCQkJCQkgZHJ2LT5zdGF0ZXNbbGFzdF9pZHhdLmV4aXRfbGF0ZW5jeTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYyBiL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbWVudS5jCmluZGV4IDcxMGEyMzMuLjY1OWQ3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbWVudS5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbWVudS5jCkBAIC00MDUsNyArNDA1LDcgQEAKIAkgKiB0aGUgbWVhc3VyZWQgYW1vdW50IG9mIHRpbWUgaXMgbGVzcyB0aGFuIHRoZSBleGl0IGxhdGVuY3ksCiAJICogYXNzdW1lIHRoZSBzdGF0ZSB3YXMgbmV2ZXIgcmVhY2hlZCBhbmQgdGhlIGV4aXQgbGF0ZW5jeSBpcyAwLgogCSAqLwotCWlmICh1bmxpa2VseSghKHRhcmdldC0+ZmxhZ3MgJiBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCkpKSB7CisJaWYgKHVubGlrZWx5KHRhcmdldC0+ZmxhZ3MgJiBDUFVJRExFX0ZMQUdfVElNRV9JTlZBTElEKSkgewogCQkvKiBVc2UgdGltZXIgdmFsdWUgYXMgaXMgKi8KIAkJbWVhc3VyZWRfdXMgPSBkYXRhLT5uZXh0X3RpbWVyX3VzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kdy9jb3JlLmMgYi9kcml2ZXJzL2RtYS9kdy9jb3JlLmMKaW5kZXggMjQ0NzIyMS4uMzgwNDc4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZHcvY29yZS5jCisrKyBiL2RyaXZlcnMvZG1hL2R3L2NvcmUuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgIi4uL2RtYWVuZ2luZS5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCkBAIC0xNTA0LDYgKzE1MDUsOSBAQAogCWR3LT5yZWdzID0gY2hpcC0+cmVnczsKIAljaGlwLT5kdyA9IGR3OwogCisJcG1fcnVudGltZV9lbmFibGUoY2hpcC0+ZGV2KTsKKwlwbV9ydW50aW1lX2dldF9zeW5jKGNoaXAtPmRldik7CisKIAlkd19wYXJhbXMgPSBkbWFfcmVhZF9ieWFkZHIoY2hpcC0+cmVncywgRFdfUEFSQU1TKTsKIAlhdXRvY2ZnID0gZHdfcGFyYW1zID4+IERXX1BBUkFNU19FTiAmIDB4MTsKIApAQCAtMTY2NywxMSArMTY3MSwxNCBAQAogCWRldl9pbmZvKGNoaXAtPmRldiwgIkRlc2lnbldhcmUgRE1BIENvbnRyb2xsZXIsICVkIGNoYW5uZWxzXG4iLAogCQkgbnJfY2hhbm5lbHMpOwogCisJcG1fcnVudGltZV9wdXRfc3luY19zdXNwZW5kKGNoaXAtPmRldik7CisKIAlyZXR1cm4gMDsKIAogZXJyX2RtYV9yZWdpc3RlcjoKIAlmcmVlX2lycShjaGlwLT5pcnEsIGR3KTsKIGVycl9wZGF0YToKKwlwbV9ydW50aW1lX3B1dF9zeW5jX3N1c3BlbmQoY2hpcC0+ZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZHdfZG1hX3Byb2JlKTsKQEAgLTE2ODEsNiArMTY4OCw4IEBACiAJc3RydWN0IGR3X2RtYQkJKmR3ID0gY2hpcC0+ZHc7CiAJc3RydWN0IGR3X2RtYV9jaGFuCSpkd2MsICpfZHdjOwogCisJcG1fcnVudGltZV9nZXRfc3luYyhjaGlwLT5kZXYpOworCiAJZHdfZG1hX29mZihkdyk7CiAJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZkdy0+ZG1hKTsKIApAQCAtMTY5Myw2ICsxNzAyLDggQEAKIAkJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOwogCX0KIAorCXBtX3J1bnRpbWVfcHV0X3N5bmNfc3VzcGVuZChjaGlwLT5kZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShjaGlwLT5kZXYpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZHdfZG1hX3JlbW92ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9uYnBmYXhpLmMgYi9kcml2ZXJzL2RtYS9uYnBmYXhpLmMKaW5kZXggNWFlYWRhNS4uYmRhMjBlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvbmJwZmF4aS5jCisrKyBiL2RyaXZlcnMvZG1hL25icGZheGkuYwpAQCAtMTQ3OSw3ICsxNDc5LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBuYnBmX2lkcyk7CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBuYnBmX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5icGZfZGV2aWNlICpuYnBmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc3RlX2RtYTQwLmMgYi9kcml2ZXJzL2RtYS9zdGVfZG1hNDAuYwppbmRleCA1ZmU1OTMzLi5kOWNhM2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zdGVfZG1hNDAuYworKysgYi9kcml2ZXJzL2RtYS9zdGVfZG1hNDAuYwpAQCAtMzA1MSw3ICszMDUxLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGRtYTQwX3BtX29wcyA9IHsKIAlTRVRfTEFURV9TWVNURU1fU0xFRVBfUE1fT1BTKGRtYTQwX3N1c3BlbmQsIGRtYTQwX3Jlc3VtZSkKLQlTRVRfUE1fUlVOVElNRV9QTV9PUFMoZG1hNDBfcnVudGltZV9zdXNwZW5kLAorCVNFVF9SVU5USU1FX1BNX09QUyhkbWE0MF9ydW50aW1lX3N1c3BlbmQsCiAJCQkJZG1hNDBfcnVudGltZV9yZXN1bWUsCiAJCQkJTlVMTCkKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS90ZWdyYTIwLWFwYi1kbWEuYyBiL2RyaXZlcnMvZG1hL3RlZ3JhMjAtYXBiLWRtYS5jCmluZGV4IDE2ZWZhNjAuLjFjODY3ZDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS90ZWdyYTIwLWFwYi1kbWEuYworKysgYi9kcml2ZXJzL2RtYS90ZWdyYTIwLWFwYi1kbWEuYwpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdGVncmFfZG1hX2Rldl9wbV9vcHMgPSB7Ci0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAkucnVudGltZV9zdXNwZW5kID0gdGVncmFfZG1hX3J1bnRpbWVfc3VzcGVuZCwKIAkucnVudGltZV9yZXN1bWUgPSB0ZWdyYV9kbWFfcnVudGltZV9yZXN1bWUsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9LY29uZmlnIGIvZHJpdmVycy9lZGFjL0tjb25maWcKaW5kZXggNzA3MmMyOC4uNDljMjY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL0tjb25maWcKKysrIGIvZHJpdmVycy9lZGFjL0tjb25maWcKQEAgLTYxLDE0ICs2MSwxNCBAQAogCSAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCiAKIGNvbmZpZyBFREFDX01DRV9JTkoKLQl0cmlzdGF0ZSAiU2ltcGxlIE1DRSBpbmplY3Rpb24gaW50ZXJmYWNlIG92ZXIgL3N5c2ZzIgotCWRlcGVuZHMgb24gRURBQ19ERUNPREVfTUNFCisJdHJpc3RhdGUgIlNpbXBsZSBNQ0UgaW5qZWN0aW9uIGludGVyZmFjZSIKKwlkZXBlbmRzIG9uIEVEQUNfREVDT0RFX01DRSAmJiBERUJVR19GUwogCWRlZmF1bHQgbgogCWhlbHAKLQkgIFRoaXMgaXMgYSBzaW1wbGUgaW50ZXJmYWNlIHRvIGluamVjdCBNQ0VzIG92ZXIgL3N5c2ZzIGFuZCB0ZXN0Ci0JICB0aGUgTUNFIGRlY29kaW5nIGNvZGUgaW4gRURBQy4KKwkgIFRoaXMgaXMgYSBzaW1wbGUgZGVidWdmcyBpbnRlcmZhY2UgdG8gaW5qZWN0IE1DRXMgYW5kIHRlc3QgZGlmZmVyZW50CisJICBhc3BlY3RzIG9mIHRoZSBNQ0UgaGFuZGxpbmcgY29kZS4KIAotCSAgVGhpcyBpcyBjdXJyZW50bHkgQU1ELW9ubHkuCisJICBXQVJOSU5HOiBEbyBub3QgZXZlbiBhc3N1bWUgdGhpcyBpbnRlcmZhY2UgaXMgc3RheWluZyBzdGFibGUhCiAKIGNvbmZpZyBFREFDX01NX0VEQUMKIAl0cmlzdGF0ZSAiTWFpbiBNZW1vcnkgRURBQyAoRXJyb3IgRGV0ZWN0aW9uIEFuZCBDb3JyZWN0aW9uKSByZXBvcnRpbmciCkBAIC0xMDUsMTEgKzEwNSwxMSBAQAogCSAgSW4gZG91YnQsIHNheSAnWScuCiAKIGNvbmZpZyBFREFDX0FNRDY0Ci0JdHJpc3RhdGUgIkFNRDY0IChPcHRlcm9uLCBBdGhsb242NCkgSzgsIEYxMGgiCi0JZGVwZW5kcyBvbiBFREFDX01NX0VEQUMgJiYgQU1EX05CICYmIFg4Nl82NCAmJiBFREFDX0RFQ09ERV9NQ0UKKwl0cmlzdGF0ZSAiQU1ENjQgKE9wdGVyb24sIEF0aGxvbjY0KSIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBBTURfTkIgJiYgRURBQ19ERUNPREVfTUNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgZXJyb3IgZGV0ZWN0aW9uIGFuZCBjb3JyZWN0aW9uIG9mIERSQU0gRUNDIGVycm9ycyBvbgotCSAgdGhlIEFNRDY0IGZhbWlsaWVzIG9mIG1lbW9yeSBjb250cm9sbGVycyAoSzggYW5kIEYxMGgpCisJICB0aGUgQU1ENjQgZmFtaWxpZXMgKD49IEs4KSBvZiBtZW1vcnkgY29udHJvbGxlcnMuCiAKIGNvbmZpZyBFREFDX0FNRDY0X0VSUk9SX0lOSkVDVElPTgogCWJvb2wgIlN5c2ZzIEhXIEVycm9yIGluamVjdGlvbiBmYWNpbGl0aWVzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL01ha2VmaWxlIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCmluZGV4IDM1OWFhNDkuLmQ0MGM2OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKQEAgLTksNyArOSw3IEBACiBvYmotJChDT05GSUdfRURBQykJCQk6PSBlZGFjX3N0dWIubwogb2JqLSQoQ09ORklHX0VEQUNfTU1fRURBQykJCSs9IGVkYWNfY29yZS5vCiAKLWVkYWNfY29yZS15CTo9IGVkYWNfbWMubyBlZGFjX2RldmljZS5vIGVkYWNfbWNfc3lzZnMubyBlZGFjX3BjaV9zeXNmcy5vCitlZGFjX2NvcmUteQk6PSBlZGFjX21jLm8gZWRhY19kZXZpY2UubyBlZGFjX21jX3N5c2ZzLm8KIGVkYWNfY29yZS15CSs9IGVkYWNfbW9kdWxlLm8gZWRhY19kZXZpY2Vfc3lzZnMubwogCiBpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwppbmRleCBiYmQ2NTE0Li4xNzYzOGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKQEAgLTY5Miw5ICs2OTIsMTkgQEAKIHsKIAllZGFjX2RiZygxLCAiRjJ4JWQ5MCAoRFJBTSBDZmcgTG93KTogMHglMDh4XG4iLCBjaGFuLCBkY2xyKTsKIAotCWVkYWNfZGJnKDEsICIgIERJTU0gdHlwZTogJXNidWZmZXJlZDsgYWxsIERJTU1zIHN1cHBvcnQgRUNDOiAlc1xuIiwKLQkJIChkY2xyICYgQklUKDE2KSkgPyAgInVuIiA6ICIiLAotCQkgKGRjbHIgJiBCSVQoMTkpKSA/ICJ5ZXMiIDogIm5vIik7CisJaWYgKHB2dC0+ZHJhbV90eXBlID09IE1FTV9MUkREUjMpIHsKKwkJdTMyIGRjc20gPSBwdnQtPmNzZWxzW2NoYW5dLmNzbWFza3NbMF07CisJCS8qCisJCSAqIEl0J3MgYXNzdW1lZCBhbGwgTFJESU1NcyBpbiBhIERDVCBhcmUgZ29pbmcgdG8gYmUgb2YKKwkJICogc2FtZSAndHlwZScgdW50aWwgcHJvdmVuIG90aGVyd2lzZS4gU28sIHVzZSBhIGNzCisJCSAqIHZhbHVlIG9mICcwJyBoZXJlIHRvIGdldCBkY3NtIHZhbHVlLgorCQkgKi8KKwkJZWRhY19kYmcoMSwgIiBMUkRJTU0gJWR4IHJhbmsgbXVsdGlwbHlcbiIsIChkY3NtICYgMHgzKSk7CisJfQorCisJZWRhY19kYmcoMSwgIkFsbCBESU1NcyBzdXBwb3J0IEVDQzolc1xuIiwKKwkJICAgIChkY2xyICYgQklUKDE5KSkgPyAieWVzIiA6ICJubyIpOworCiAKIAllZGFjX2RiZygxLCAiICBQQVIvRVJSIHBhcml0eTogJXNcbiIsCiAJCSAoZGNsciAmIEJJVCg4KSkgPyAgImVuYWJsZWQiIDogImRpc2FibGVkIik7CkBAIC03NTYsNyArNzY2LDcgQEAKIAlpZiAocHZ0LT5mYW0gPT0gMHhmICYmIHB2dC0+ZXh0X21vZGVsIDwgSzhfUkVWX0YpIHsKIAkJcHZ0LT5jc2Vsc1swXS5iX2NudCA9IHB2dC0+Y3NlbHNbMV0uYl9jbnQgPSA4OwogCQlwdnQtPmNzZWxzWzBdLm1fY250ID0gcHZ0LT5jc2Vsc1sxXS5tX2NudCA9IDg7Ci0JfSBlbHNlIGlmIChwdnQtPmZhbSA9PSAweDE1ICYmIHB2dC0+bW9kZWwgPj0gMHgzMCkgeworCX0gZWxzZSBpZiAocHZ0LT5mYW0gPT0gMHgxNSAmJiBwdnQtPm1vZGVsID09IDB4MzApIHsKIAkJcHZ0LT5jc2Vsc1swXS5iX2NudCA9IHB2dC0+Y3NlbHNbMV0uYl9jbnQgPSA0OwogCQlwdnQtPmNzZWxzWzBdLm1fY250ID0gcHZ0LT5jc2Vsc1sxXS5tX2NudCA9IDI7CiAJfSBlbHNlIHsKQEAgLTgxMywyNSArODIzLDYzIEBACiAJfQogfQogCi1zdGF0aWMgZW51bSBtZW1fdHlwZSBkZXRlcm1pbmVfbWVtb3J5X3R5cGUoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCBpbnQgY3MpCitzdGF0aWMgdm9pZCBkZXRlcm1pbmVfbWVtb3J5X3R5cGUoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQogewotCWVudW0gbWVtX3R5cGUgdHlwZTsKKwl1MzIgZHJhbV9jdHJsLCBkY3NtOwogCi0JLyogRjE1aCBzdXBwb3J0cyBvbmx5IEREUjMgKi8KLQlpZiAocHZ0LT5mYW0gPj0gMHgxNSkKLQkJdHlwZSA9IChwdnQtPmRjbHIwICYgQklUKDE2KSkgPwlNRU1fRERSMyA6IE1FTV9SRERSMzsKLQllbHNlIGlmIChwdnQtPmZhbSA9PSAweDEwIHx8IHB2dC0+ZXh0X21vZGVsID49IEs4X1JFVl9GKSB7CisJc3dpdGNoIChwdnQtPmZhbSkgeworCWNhc2UgMHhmOgorCQlpZiAocHZ0LT5leHRfbW9kZWwgPj0gSzhfUkVWX0YpCisJCQlnb3RvIGRkcjM7CisKKwkJcHZ0LT5kcmFtX3R5cGUgPSAocHZ0LT5kY2xyMCAmIEJJVCgxOCkpID8gTUVNX0REUiA6IE1FTV9SRERSOworCQlyZXR1cm47CisKKwljYXNlIDB4MTA6CiAJCWlmIChwdnQtPmRjaHIwICYgRERSM19NT0RFKQotCQkJdHlwZSA9IChwdnQtPmRjbHIwICYgQklUKDE2KSkgPwlNRU1fRERSMyA6IE1FTV9SRERSMzsKKwkJCWdvdG8gZGRyMzsKKworCQlwdnQtPmRyYW1fdHlwZSA9IChwdnQtPmRjbHIwICYgQklUKDE2KSkgPyBNRU1fRERSMiA6IE1FTV9SRERSMjsKKwkJcmV0dXJuOworCisJY2FzZSAweDE1OgorCQlpZiAocHZ0LT5tb2RlbCA8IDB4NjApCisJCQlnb3RvIGRkcjM7CisKKwkJLyoKKwkJICogTW9kZWwgMHg2MGggbmVlZHMgc3BlY2lhbCBoYW5kbGluZzoKKwkJICoKKwkJICogV2UgdXNlIGEgQ2hpcCBTZWxlY3QgdmFsdWUgb2YgJzAnIHRvIG9idGFpbiBkY3NtLgorCQkgKiBUaGVvcmV0aWNhbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBwb3B1bGF0ZSBMUkRJTU1zIG9mIGRpZmZlcmVudAorCQkgKiAnUmFuaycgdmFsdWUgb24gYSBEQ1QuIEJ1dCB0aGlzIGlzIG5vdCB0aGUgY29tbW9uIGNhc2UuIFNvLAorCQkgKiBpdCdzIHJlYXNvbmFibGUgdG8gYXNzdW1lIGFsbCBESU1NcyBhcmUgZ29pbmcgdG8gYmUgb2Ygc2FtZQorCQkgKiAndHlwZScgdW50aWwgcHJvdmVuIG90aGVyd2lzZS4KKwkJICovCisJCWFtZDY0X3JlYWRfZGN0X3BjaV9jZmcocHZ0LCAwLCBEUkFNX0NPTlRST0wsICZkcmFtX2N0cmwpOworCQlkY3NtID0gcHZ0LT5jc2Vsc1swXS5jc21hc2tzWzBdOworCisJCWlmICgoKGRyYW1fY3RybCA+PiA4KSAmIDB4NykgPT0gMHgyKQorCQkJcHZ0LT5kcmFtX3R5cGUgPSBNRU1fRERSNDsKKwkJZWxzZSBpZiAocHZ0LT5kY2xyMCAmIEJJVCgxNikpCisJCQlwdnQtPmRyYW1fdHlwZSA9IE1FTV9ERFIzOworCQllbHNlIGlmIChkY3NtICYgMHgzKQorCQkJcHZ0LT5kcmFtX3R5cGUgPSBNRU1fTFJERFIzOwogCQllbHNlCi0JCQl0eXBlID0gKHB2dC0+ZGNscjAgJiBCSVQoMTYpKSA/IE1FTV9ERFIyIDogTUVNX1JERFIyOwotCX0gZWxzZSB7Ci0JCXR5cGUgPSAocHZ0LT5kY2xyMCAmIEJJVCgxOCkpID8gTUVNX0REUiA6IE1FTV9SRERSOworCQkJcHZ0LT5kcmFtX3R5cGUgPSBNRU1fUkREUjM7CisKKwkJcmV0dXJuOworCisJY2FzZSAweDE2OgorCQlnb3RvIGRkcjM7CisKKwlkZWZhdWx0OgorCQlXQVJOKDEsIEtFUk5fRVJSICIlczogRmFtaWx5Pz8/IDB4JXhcbiIsIF9fZnVuY19fLCBwdnQtPmZhbSk7CisJCXB2dC0+ZHJhbV90eXBlID0gTUVNX0VNUFRZOwogCX0KKwlyZXR1cm47CiAKLQlhbWQ2NF9pbmZvKCJDUyVkOiAlc1xuIiwgY3MsIGVkYWNfbWVtX3R5cGVzW3R5cGVdKTsKLQotCXJldHVybiB0eXBlOworZGRyMzoKKwlwdnQtPmRyYW1fdHlwZSA9IChwdnQtPmRjbHIwICYgQklUKDE2KSkgPyBNRU1fRERSMyA6IE1FTV9SRERSMzsKIH0KIAogLyogR2V0IHRoZSBudW1iZXIgb2YgRENUIGNoYW5uZWxzIHRoZSBtZW1vcnkgY29udHJvbGxlciBpcyB1c2luZy4gKi8KQEAgLTk1OCw4ICsxMDA2LDEyIEBACiAJaWYgKFdBUk5fT04oIW5iKSkKIAkJcmV0dXJuOwogCi0JcGNpX2Z1bmMgPSAocHZ0LT5tb2RlbCA9PSAweDMwKSA/IFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0YxCi0JCQkJCTogUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YxOworCWlmIChwdnQtPm1vZGVsID09IDB4NjApCisJCXBjaV9mdW5jID0gUENJX0RFVklDRV9JRF9BTURfMTVIX002MEhfTkJfRjE7CisJZWxzZSBpZiAocHZ0LT5tb2RlbCA9PSAweDMwKQorCQlwY2lfZnVuYyA9IFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMzBIX05CX0YxOworCWVsc2UKKwkJcGNpX2Z1bmMgPSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjE7CiAKIAlmMSA9IHBjaV9nZXRfcmVsYXRlZF9mdW5jdGlvbihuYi0+bWlzYy0+dmVuZG9yLCBwY2lfZnVuYywgbmItPm1pc2MpOwogCWlmIChXQVJOX09OKCFmMSkpCkBAIC0xMDQ5LDcgKzExMDEsNyBAQAogfQogCiBzdGF0aWMgaW50IGs4X2RiYW1fdG9fY2hpcF9zZWxlY3Qoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1OCBkY3QsCi0JCQkJICB1bnNpZ25lZCBjc19tb2RlKQorCQkJCSAgdW5zaWduZWQgY3NfbW9kZSwgaW50IGNzX21hc2tfbnIpCiB7CiAJdTMyIGRjbHIgPSBkY3QgPyBwdnQtPmRjbHIxIDogcHZ0LT5kY2xyMDsKIApAQCAtMTE2Nyw4ICsxMjE5LDQzIEBACiAJcmV0dXJuIGNzX3NpemU7CiB9CiAKK3N0YXRpYyBpbnQgZGRyM19scmRpbW1fY3Nfc2l6ZSh1bnNpZ25lZCBpLCB1bnNpZ25lZCByYW5rX211bHRpcGx5KQoreworCXVuc2lnbmVkIHNoaWZ0ID0gMDsKKwlpbnQgY3Nfc2l6ZSA9IDA7CisKKwlpZiAoaSA8IDQgfHwgaSA9PSA2KQorCQljc19zaXplID0gLTE7CisJZWxzZSBpZiAoaSA9PSAxMikKKwkJc2hpZnQgPSA3OworCWVsc2UgaWYgKCEoaSAmIDB4MSkpCisJCXNoaWZ0ID0gaSA+PiAxOworCWVsc2UKKwkJc2hpZnQgPSAoaSArIDEpID4+IDE7CisKKwlpZiAoY3Nfc2l6ZSAhPSAtMSkKKwkJY3Nfc2l6ZSA9IHJhbmtfbXVsdGlwbHkgKiAoMTI4IDw8IHNoaWZ0KTsKKworCXJldHVybiBjc19zaXplOworfQorCitzdGF0aWMgaW50IGRkcjRfY3Nfc2l6ZSh1bnNpZ25lZCBpKQoreworCWludCBjc19zaXplID0gMDsKKworCWlmIChpID09IDApCisJCWNzX3NpemUgPSAtMTsKKwllbHNlIGlmIChpID09IDEpCisJCWNzX3NpemUgPSAxMDI0OworCWVsc2UKKwkJLyogTWluIGNzX3NpemUgPSAxRyAqLworCQljc19zaXplID0gMTAyNCAqICgxIDw8IChpID4+IDEpKTsKKworCXJldHVybiBjc19zaXplOworfQorCiBzdGF0aWMgaW50IGYxMF9kYmFtX3RvX2NoaXBfc2VsZWN0KHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgdTggZGN0LAotCQkJCSAgIHVuc2lnbmVkIGNzX21vZGUpCisJCQkJICAgdW5zaWduZWQgY3NfbW9kZSwgaW50IGNzX21hc2tfbnIpCiB7CiAJdTMyIGRjbHIgPSBkY3QgPyBwdnQtPmRjbHIxIDogcHZ0LT5kY2xyMDsKIApAQCAtMTE4NCwxOCArMTI3MSw0OSBAQAogICogRjE1aCBzdXBwb3J0cyBvbmx5IDY0Yml0IERDVCBpbnRlcmZhY2VzCiAgKi8KIHN0YXRpYyBpbnQgZjE1X2RiYW1fdG9fY2hpcF9zZWxlY3Qoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1OCBkY3QsCi0JCQkJICAgdW5zaWduZWQgY3NfbW9kZSkKKwkJCQkgICB1bnNpZ25lZCBjc19tb2RlLCBpbnQgY3NfbWFza19ucikKIHsKIAlXQVJOX09OKGNzX21vZGUgPiAxMik7CiAKIAlyZXR1cm4gZGRyM19jc19zaXplKGNzX21vZGUsIGZhbHNlKTsKIH0KIAorLyogRjE1aCBNNjBoIHN1cHBvcnRzIEREUjQgbWFwcGluZyBhcyB3ZWxsLi4gKi8KK3N0YXRpYyBpbnQgZjE1X202MGhfZGJhbV90b19jaGlwX3NlbGVjdChzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIHU4IGRjdCwKKwkJCQkJdW5zaWduZWQgY3NfbW9kZSwgaW50IGNzX21hc2tfbnIpCit7CisJaW50IGNzX3NpemU7CisJdTMyIGRjc20gPSBwdnQtPmNzZWxzW2RjdF0uY3NtYXNrc1tjc19tYXNrX25yXTsKKworCVdBUk5fT04oY3NfbW9kZSA+IDEyKTsKKworCWlmIChwdnQtPmRyYW1fdHlwZSA9PSBNRU1fRERSNCkgeworCQlpZiAoY3NfbW9kZSA+IDkpCisJCQlyZXR1cm4gLTE7CisKKwkJY3Nfc2l6ZSA9IGRkcjRfY3Nfc2l6ZShjc19tb2RlKTsKKwl9IGVsc2UgaWYgKHB2dC0+ZHJhbV90eXBlID09IE1FTV9MUkREUjMpIHsKKwkJdW5zaWduZWQgcmFua19tdWx0aXBseSA9IGRjc20gJiAweGY7CisKKwkJaWYgKHJhbmtfbXVsdGlwbHkgPT0gMykKKwkJCXJhbmtfbXVsdGlwbHkgPSA0OworCQljc19zaXplID0gZGRyM19scmRpbW1fY3Nfc2l6ZShjc19tb2RlLCByYW5rX211bHRpcGx5KTsKKwl9IGVsc2UgeworCQkvKiBNaW5pbXVtIGNzIHNpemUgaXMgNTEybWIgZm9yIEYxNWhNNjBoKi8KKwkJaWYgKGNzX21vZGUgPT0gMHgxKQorCQkJcmV0dXJuIC0xOworCisJCWNzX3NpemUgPSBkZHIzX2NzX3NpemUoY3NfbW9kZSwgZmFsc2UpOworCX0KKworCXJldHVybiBjc19zaXplOworfQorCiAvKgogICogRjE2aCBhbmQgRjE1aCBtb2RlbCAzMGggaGF2ZSBvbmx5IGxpbWl0ZWQgY3NfbW9kZXMuCiAgKi8KIHN0YXRpYyBpbnQgZjE2X2RiYW1fdG9fY2hpcF9zZWxlY3Qoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1OCBkY3QsCi0JCQkJdW5zaWduZWQgY3NfbW9kZSkKKwkJCQl1bnNpZ25lZCBjc19tb2RlLCBpbnQgY3NfbWFza19ucikKIHsKIAlXQVJOX09OKGNzX21vZGUgPiAxMik7CiAKQEAgLTE3NTcsMTMgKzE4NzUsMjAgQEAKIAogCQlzaXplMCA9IDA7CiAJCWlmIChkY3NiW2RpbW0qMl0gJiBEQ1NCX0NTX0VOQUJMRSkKKwkJCS8qIEZvciBmMTVtNjBoLCBuZWVkIG11bHRpcGxpZXIgZm9yIExSRElNTSBjc19zaXplCisJCQkgKiBjYWxjdWxhdGlvbi4gV2UgcGFzcyAnZGltbScgdmFsdWUgdG8gdGhlIGRiYW1fdG9fY3MKKwkJCSAqIG1hcHBlciBzbyB3ZSBjYW4gZmluZCB0aGUgbXVsdGlwbGllciBmcm9tIHRoZQorCQkJICogY29ycmVzcG9uZGluZyBEQ1NNLgorCQkJICovCiAJCQlzaXplMCA9IHB2dC0+b3BzLT5kYmFtX3RvX2NzKHB2dCwgY3RybCwKLQkJCQkJCSAgICAgREJBTV9ESU1NKGRpbW0sIGRiYW0pKTsKKwkJCQkJCSAgICAgREJBTV9ESU1NKGRpbW0sIGRiYW0pLAorCQkJCQkJICAgICBkaW1tKTsKIAogCQlzaXplMSA9IDA7CiAJCWlmIChkY3NiW2RpbW0qMiArIDFdICYgRENTQl9DU19FTkFCTEUpCiAJCQlzaXplMSA9IHB2dC0+b3BzLT5kYmFtX3RvX2NzKHB2dCwgY3RybCwKLQkJCQkJCSAgICAgREJBTV9ESU1NKGRpbW0sIGRiYW0pKTsKKwkJCQkJCSAgICAgREJBTV9ESU1NKGRpbW0sIGRiYW0pLAorCQkJCQkJICAgICBkaW1tKTsKIAogCQlhbWQ2NF9pbmZvKEVEQUNfTUMgIjogJWQ6ICU1ZE1CICVkOiAlNWRNQlxuIiwKIAkJCQlkaW1tICogMiwgICAgIHNpemUwLApAQCAtMTgxMiw2ICsxOTM3LDE2IEBACiAJCQkuZGJhbV90b19jcwkJPSBmMTZfZGJhbV90b19jaGlwX3NlbGVjdCwKIAkJfQogCX0sCisJW0YxNV9NNjBIX0NQVVNdID0geworCQkuY3RsX25hbWUgPSAiRjE1aF9NNjBoIiwKKwkJLmYxX2lkID0gUENJX0RFVklDRV9JRF9BTURfMTVIX002MEhfTkJfRjEsCisJCS5mM19pZCA9IFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NNjBIX05CX0YzLAorCQkub3BzID0geworCQkJLmVhcmx5X2NoYW5uZWxfY291bnQJPSBmMXhfZWFybHlfY2hhbm5lbF9jb3VudCwKKwkJCS5tYXBfc3lzYWRkcl90b19jc3Jvdwk9IGYxeF9tYXBfc3lzYWRkcl90b19jc3JvdywKKwkJCS5kYmFtX3RvX2NzCQk9IGYxNV9tNjBoX2RiYW1fdG9fY2hpcF9zZWxlY3QsCisJCX0KKwl9LAogCVtGMTZfQ1BVU10gPSB7CiAJCS5jdGxfbmFtZSA9ICJGMTZoIiwKIAkJLmYxX2lkID0gUENJX0RFVklDRV9JRF9BTURfMTZIX05CX0YxLApAQCAtMjE3NSw2ICsyMzEwLDggQEAKIAl9CiAKIAlwdnQtPmVjY19zeW1fc3ogPSA0OworCWRldGVybWluZV9tZW1vcnlfdHlwZShwdnQpOworCWVkYWNfZGJnKDEsICIgIERJTU0gdHlwZTogJXNcbiIsIGVkYWNfbWVtX3R5cGVzW3B2dC0+ZHJhbV90eXBlXSk7CiAKIAlpZiAocHZ0LT5mYW0gPj0gMHgxMCkgewogCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMywgRVhUX05CX01DQV9DRkcsICZ0bXApOwpAQCAtMjIzOCw3ICsyMzc1LDggQEAKIAkgKi8KIAljc19tb2RlID0gREJBTV9ESU1NKGNzcm93X25yIC8gMiwgZGJhbSk7CiAKLQlucl9wYWdlcyA9IHB2dC0+b3BzLT5kYmFtX3RvX2NzKHB2dCwgZGN0LCBjc19tb2RlKSA8PCAoMjAgLSBQQUdFX1NISUZUKTsKKwlucl9wYWdlcyA9IHB2dC0+b3BzLT5kYmFtX3RvX2NzKHB2dCwgZGN0LCBjc19tb2RlLCAoY3Nyb3dfbnIgLyAyKSkKKwkJCQkJCQkgICA8PCAoMjAgLSBQQUdFX1NISUZUKTsKIAogCWVkYWNfZGJnKDAsICJjc3JvdzogJWQsIGNoYW5uZWw6ICVkLCBEQkFNIGlkeDogJWRcbiIsCiAJCSAgICBjc3Jvd19uciwgZGN0LCAgY3NfbW9kZSk7CkBAIC0yMjU3LDcgKzIzOTUsNiBAQAogCXN0cnVjdCBjc3Jvd19pbmZvICpjc3JvdzsKIAlzdHJ1Y3QgZGltbV9pbmZvICpkaW1tOwogCWVudW0gZWRhY190eXBlIGVkYWNfbW9kZTsKLQllbnVtIG1lbV90eXBlIG10eXBlOwogCWludCBpLCBqLCBlbXB0eSA9IDE7CiAJaW50IG5yX3BhZ2VzID0gMDsKIAl1MzIgdmFsOwpAQCAtMjMwMiw4ICsyNDM5LDYgQEAKIAkJCW5yX3BhZ2VzICs9IHJvd19kY3QxX3BhZ2VzOwogCQl9CiAKLQkJbXR5cGUgPSBkZXRlcm1pbmVfbWVtb3J5X3R5cGUocHZ0LCBpKTsKLQogCQllZGFjX2RiZygxLCAiVG90YWwgY3Nyb3clZCBwYWdlczogJXVcbiIsIGksIG5yX3BhZ2VzKTsKIAogCQkvKgpAQCAtMjMxNyw3ICsyNDUyLDcgQEAKIAogCQlmb3IgKGogPSAwOyBqIDwgcHZ0LT5jaGFubmVsX2NvdW50OyBqKyspIHsKIAkJCWRpbW0gPSBjc3Jvdy0+Y2hhbm5lbHNbal0tPmRpbW07Ci0JCQlkaW1tLT5tdHlwZSA9IG10eXBlOworCQkJZGltbS0+bXR5cGUgPSBwdnQtPmRyYW1fdHlwZTsKIAkJCWRpbW0tPmVkYWNfbW9kZSA9IGVkYWNfbW9kZTsKIAkJfQogCX0KQEAgLTI2MDQsNiArMjczOSwxMCBAQAogCQkJZmFtX3R5cGUgPSAmZmFtaWx5X3R5cGVzW0YxNV9NMzBIX0NQVVNdOwogCQkJcHZ0LT5vcHMgPSAmZmFtaWx5X3R5cGVzW0YxNV9NMzBIX0NQVVNdLm9wczsKIAkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHB2dC0+bW9kZWwgPT0gMHg2MCkgeworCQkJZmFtX3R5cGUgPSAmZmFtaWx5X3R5cGVzW0YxNV9NNjBIX0NQVVNdOworCQkJcHZ0LT5vcHMgPSAmZmFtaWx5X3R5cGVzW0YxNV9NNjBIX0NQVVNdLm9wczsKKwkJCWJyZWFrOwogCQl9CiAKIAkJZmFtX3R5cGUJPSAmZmFtaWx5X3R5cGVzW0YxNV9DUFVTXTsKQEAgLTI4MjgsNTUgKzI5NjcsMTMgQEAKICAqIGlucXVpcnkgdGhpcyB0YWJsZSB0byBzZWUgaWYgdGhpcyBkcml2ZXIgaXMgZm9yIGEgZ2l2ZW4gZGV2aWNlIGZvdW5kLgogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kNjRfcGNpX3RhYmxlW10gPSB7Ci0JewotCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQU1ELAotCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfQU1EX0s4X05CX01FTUNUTCwKLQkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCi0JCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAotCQkuY2xhc3MJCT0gMCwKLQkJLmNsYXNzX21hc2sJPSAwLAotCX0sCi0JewotCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQU1ELAotCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfQU1EXzEwSF9OQl9EUkFNLAotCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKLQkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCi0JCS5jbGFzcwkJPSAwLAotCQkuY2xhc3NfbWFzawk9IDAsCi0JfSwKLQl7Ci0JCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9BTUQsCi0JCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YyLAotCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKLQkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCi0JCS5jbGFzcwkJPSAwLAotCQkuY2xhc3NfbWFzawk9IDAsCi0JfSwKLQl7Ci0JCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9BTUQsCi0JCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjIsCi0JCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKLQkJLmNsYXNzCQk9IDAsCi0JCS5jbGFzc19tYXNrCT0gMCwKLQl9LAotCXsKLQkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0FNRCwKLQkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTkJfRjIsCi0JCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKLQkJLmNsYXNzCQk9IDAsCi0JCS5jbGFzc19tYXNrCT0gMCwKLQl9LAotCXsKLQkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0FNRCwKLQkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTTMwSF9OQl9GMiwKLQkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCi0JCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAotCQkuY2xhc3MJCT0gMCwKLQkJLmNsYXNzX21hc2sJPSAwLAotCX0sCi0KKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfSzhfTkJfTUVNQ1RMKSB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xMEhfTkJfRFJBTSkgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YyKSB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMikgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTVIX002MEhfTkJfRjIpIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE2SF9OQl9GMikgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTZIX00zMEhfTkJfRjIpIH0sCiAJezAsIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYW1kNjRfcGNpX3RhYmxlKTsKQEAgLTI5MzgsNiArMzAzNSwxMSBAQAogCQlnb3RvIGVycl9ub19pbnN0YW5jZXM7CiAKIAlzZXR1cF9wY2lfZGV2aWNlKCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJYW1kNjRfZXJyKCIlcyBvbiAzMi1iaXQgaXMgdW5zdXBwb3J0ZWQuIFVTRSBBVCBZT1VSIE9XTiBSSVNLIVxuIiwgRURBQ19NT0RfU1RSKTsKKyNlbmRpZgorCiAJcmV0dXJuIDA7CiAKIGVycl9ub19pbnN0YW5jZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAppbmRleCA1NWZiNTk0Li5kODQ2OGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKQEAgLTE2MiwxMCArMTYyLDEyIEBACiAvKgogICogUENJLWRlZmluZWQgY29uZmlndXJhdGlvbiBzcGFjZSByZWdpc3RlcnMKICAqLwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMSAweDE0MWIKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjIgMHgxNDFjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GMQkweDE2MDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YyCTB4MTYwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMSAweDE0MWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjIgMHgxNDFjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NNjBIX05CX0YxIDB4MTU3MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTYwSF9OQl9GMiAweDE1NzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTZIX05CX0YxCTB4MTUzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNkhfTkJfRjIJMHgxNTMyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE2SF9NMzBIX05CX0YxIDB4MTU4MQpAQCAtMjIxLDYgKzIyMyw4IEBACiAKICNkZWZpbmUgY3Nyb3dfZW5hYmxlZChpLCBkY3QsIHB2dCkJKChwdnQpLT5jc2Vsc1soZGN0KV0uY3NiYXNlc1soaSldICYgRENTQl9DU19FTkFCTEUpCiAKKyNkZWZpbmUgRFJBTV9DT05UUk9MCQkJMHg3OAorCiAjZGVmaW5lIERCQU0wCQkJCTB4ODAKICNkZWZpbmUgREJBTTEJCQkJMHgxODAKIApAQCAtMzAxLDYgKzMwNSw3IEBACiAJRjEwX0NQVVMsCiAJRjE1X0NQVVMsCiAJRjE1X00zMEhfQ1BVUywKKwlGMTVfTTYwSF9DUFVTLAogCUYxNl9DUFVTLAogCUYxNl9NMzBIX0NQVVMsCiAJTlVNX0ZBTUlMSUVTLApAQCAtMzc5LDYgKzM4NCw5IEBACiAKIAkvKiBwbGFjZSB0byBzdG9yZSBlcnJvciBpbmplY3Rpb24gcGFyYW1ldGVycyBwcmlvciB0byBpc3N1ZSAqLwogCXN0cnVjdCBlcnJvcl9pbmplY3Rpb24gaW5qZWN0aW9uOworCisJLyogY2FjaGUgdGhlIGRyYW1fdHlwZSAqLworCWVudW0gbWVtX3R5cGUgZHJhbV90eXBlOwogfTsKIAogZW51bSBlcnJfY29kZXMgewpAQCAtNDgwLDcgKzQ4OCw4IEBACiAJaW50ICgqZWFybHlfY2hhbm5lbF9jb3VudCkJKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCk7CiAJdm9pZCAoKm1hcF9zeXNhZGRyX3RvX2Nzcm93KQkoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCB1NjQgc3lzX2FkZHIsCiAJCQkJCSBzdHJ1Y3QgZXJyX2luZm8gKik7Ci0JaW50ICgqZGJhbV90b19jcykJCShzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIHU4IGRjdCwgdW5zaWduZWQgY3NfbW9kZSk7CisJaW50ICgqZGJhbV90b19jcykJCShzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIHU4IGRjdCwKKwkJCQkJIHVuc2lnbmVkIGNzX21vZGUsIGludCBjc19tYXNrX25yKTsKIH07CiAKIHN0cnVjdCBhbWQ2NF9mYW1pbHlfdHlwZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWMuYwppbmRleCBjMzg5M2IwLi4xNzQ3OTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKQEAgLTEyNSwyNyArMTI1LDI3IEBACiAKICNlbmRpZgkJCQkvKiBDT05GSUdfRURBQ19ERUJVRyAqLwogCi0vKgotICoga2VlcCB0aG9zZSBpbiBzeW5jIHdpdGggdGhlIGVudW0gbWVtX3R5cGUKLSAqLwogY29uc3QgY2hhciAqIGNvbnN0IGVkYWNfbWVtX3R5cGVzW10gPSB7Ci0JIkVtcHR5IGNzcm93IiwKLQkiUmVzZXJ2ZWQgY3Nyb3cgdHlwZSIsCi0JIlVua25vd24gY3Nyb3cgdHlwZSIsCi0JIkZhc3QgcGFnZSBtb2RlIFJBTSIsCi0JIkV4dGVuZGVkIGRhdGEgb3V0IFJBTSIsCi0JIkJ1cnN0IEV4dGVuZGVkIGRhdGEgb3V0IFJBTSIsCi0JIlNpbmdsZSBkYXRhIHJhdGUgU0RSQU0iLAotCSJSZWdpc3RlcmVkIHNpbmdsZSBkYXRhIHJhdGUgU0RSQU0iLAotCSJEb3VibGUgZGF0YSByYXRlIFNEUkFNIiwKLQkiUmVnaXN0ZXJlZCBEb3VibGUgZGF0YSByYXRlIFNEUkFNIiwKLQkiUmFtYnVzIERSQU0iLAotCSJVbmJ1ZmZlcmVkIEREUjIgUkFNIiwKLQkiRnVsbHkgYnVmZmVyZWQgRERSMiIsCi0JIlJlZ2lzdGVyZWQgRERSMiBSQU0iLAotCSJSYW1idXMgWERSIiwKLQkiVW5idWZmZXJlZCBERFIzIFJBTSIsCi0JIlJlZ2lzdGVyZWQgRERSMyBSQU0iLAorCVtNRU1fRU1QVFldCT0gIkVtcHR5IGNzcm93IiwKKwlbTUVNX1JFU0VSVkVEXQk9ICJSZXNlcnZlZCBjc3JvdyB0eXBlIiwKKwlbTUVNX1VOS05PV05dCT0gIlVua25vd24gY3Nyb3cgdHlwZSIsCisJW01FTV9GUE1dCT0gIkZhc3QgcGFnZSBtb2RlIFJBTSIsCisJW01FTV9FRE9dCT0gIkV4dGVuZGVkIGRhdGEgb3V0IFJBTSIsCisJW01FTV9CRURPXQk9ICJCdXJzdCBFeHRlbmRlZCBkYXRhIG91dCBSQU0iLAorCVtNRU1fU0RSXQk9ICJTaW5nbGUgZGF0YSByYXRlIFNEUkFNIiwKKwlbTUVNX1JEUl0JPSAiUmVnaXN0ZXJlZCBzaW5nbGUgZGF0YSByYXRlIFNEUkFNIiwKKwlbTUVNX0REUl0JPSAiRG91YmxlIGRhdGEgcmF0ZSBTRFJBTSIsCisJW01FTV9SRERSXQk9ICJSZWdpc3RlcmVkIERvdWJsZSBkYXRhIHJhdGUgU0RSQU0iLAorCVtNRU1fUk1CU10JPSAiUmFtYnVzIERSQU0iLAorCVtNRU1fRERSMl0JPSAiVW5idWZmZXJlZCBERFIyIFJBTSIsCisJW01FTV9GQl9ERFIyXQk9ICJGdWxseSBidWZmZXJlZCBERFIyIiwKKwlbTUVNX1JERFIyXQk9ICJSZWdpc3RlcmVkIEREUjIgUkFNIiwKKwlbTUVNX1hEUl0JPSAiUmFtYnVzIFhEUiIsCisJW01FTV9ERFIzXQk9ICJVbmJ1ZmZlcmVkIEREUjMgUkFNIiwKKwlbTUVNX1JERFIzXQk9ICJSZWdpc3RlcmVkIEREUjMgUkFNIiwKKwlbTUVNX0xSRERSM10JPSAiTG9hZC1SZWR1Y2VkIEREUjMgUkFNIiwKKwlbTUVNX0REUjRdCT0gIlVuYnVmZmVyZWQgRERSNCBSQU0iLAorCVtNRU1fUkREUjRdCT0gIlJlZ2lzdGVyZWQgRERSNCBSQU0iLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGVkYWNfbWVtX3R5cGVzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYwppbmRleCBlODY1OGU0Li4yNGQ4NzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYworKysgYi9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYwpAQCAtMTQsOSArMTQsNiBAQAogI2luY2x1ZGUgImVkYWNfY29yZS5oIgogI2luY2x1ZGUgImVkYWNfbW9kdWxlLmgiCiAKLS8qIFR1cm4gb2ZmIHRoaXMgd2hvbGUgZmVhdHVyZSBpZiBQQ0kgaXMgbm90IGNvbmZpZ3VyZWQgKi8KLSNpZmRlZiBDT05GSUdfUENJCi0KICNkZWZpbmUgRURBQ19QQ0lfU1lNTElOSwkiZGV2aWNlIgogCiAvKiBkYXRhIHZhcmlhYmxlcyBleHBvcnRlZCB2aWEgc3lzZnMgKi8KQEAgLTc2MSw1ICs3NTgsMyBAQAogbW9kdWxlX3BhcmFtKGVkYWNfcGNpX3BhbmljX29uX3BlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlZGFjX3BjaV9wYW5pY19vbl9wZSwKIAkJICJQYW5pYyBvbiBQQ0kgQnVzIFBhcml0eSBlcnJvcjogMD1vZmYgMT1vbiIpOwotCi0jZW5kaWYJCQkJLyogQ09ORklHX1BDSSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2doZXNfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2doZXNfZWRhYy5jCmluZGV4IDgzOTliNGUuLmIyNDY4MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9naGVzX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvZ2hlc19lZGFjLmMKQEAgLTQxMyw4ICs0MTMsOCBAQAogCiAJLyogR2VuZXJhdGUgdGhlIHRyYWNlIGV2ZW50ICovCiAJZ3JhaW5fYml0cyA9IGZsc19sb25nKGUtPmdyYWluKTsKLQlzcHJpbnRmKHB2dC0+ZGV0YWlsX2xvY2F0aW9uLCAiQVBFSSBsb2NhdGlvbjogJXMgJXMiLAotCQllLT5sb2NhdGlvbiwgZS0+b3RoZXJfZGV0YWlsKTsKKwlzbnByaW50ZihwdnQtPmRldGFpbF9sb2NhdGlvbiwgc2l6ZW9mKHB2dC0+ZGV0YWlsX2xvY2F0aW9uKSwKKwkJICJBUEVJIGxvY2F0aW9uOiAlcyAlcyIsIGUtPmxvY2F0aW9uLCBlLT5vdGhlcl9kZXRhaWwpOwogCXRyYWNlX21jX2V2ZW50KHR5cGUsIGUtPm1zZywgZS0+bGFiZWwsIGUtPmVycm9yX2NvdW50LAogCQkgICAgICAgbWNpLT5tY19pZHgsIGUtPnRvcF9sYXllciwgZS0+bWlkX2xheWVyLCBlLT5sb3dfbGF5ZXIsCiAJCSAgICAgICBQQUdFU19UT19NaUIoZS0+cGFnZV9mcmFtZV9udW1iZXIpIHwgZS0+b2Zmc2V0X2luX3BhZ2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTMwMDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2kzMDAwX2VkYWMuYwppbmRleCBjZDI4Yjk2Li41Y2IzNmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTMwMDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pMzAwMF9lZGFjLmMKQEAgLTU0Miw4ICs1NDIsNyBAQAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaTMwMDBfZHJpdmVyKTsKIAogZmFpbDA6Ci0JaWYgKG1jaV9wZGV2KQotCQlwY2lfZGV2X3B1dChtY2lfcGRldik7CisJcGNpX2Rldl9wdXQobWNpX3BkZXYpOwogCiAJcmV0dXJuIHBjaV9yYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pMzIwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTMyMDBfZWRhYy5jCmluZGV4IGFhOThiMTMuLjRhZDA2MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pMzIwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2kzMjAwX2VkYWMuYwpAQCAtNTIzLDggKzUyMyw3IEBACiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpMzIwMF9kcml2ZXIpOwogCiBmYWlsMDoKLQlpZiAobWNpX3BkZXYpCi0JCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKKwlwY2lfZGV2X3B1dChtY2lfcGRldik7CiAKIAlyZXR1cm4gcGNpX3JjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jCmluZGV4IGQ3MzBlMjc2Li5iNDcwNWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTgyNDQzYnhneF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jCkBAIC00NTgsOCArNDU4LDcgQEAKIAlpZiAoIWk4MjQ0M2J4Z3hfcmVnaXN0ZXJlZCkKIAkJaTgyNDQzYnhneF9lZGFjbWNfcmVtb3ZlX29uZShtY2lfcGRldik7CiAKLQlpZiAobWNpX3BkZXYpCi0JCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKKwlwY2lfZGV2X3B1dChtY2lfcGRldik7CiB9CiAKIG1vZHVsZV9pbml0KGk4MjQ0M2J4Z3hfZWRhY21jX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21jZV9hbWQuYyBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmMKaW5kZXggZjc4YzFjNS4uNTg1ODZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21jZV9hbWQuYworKysgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZC5jCkBAIC0xMzgsNiArMTM4LDE1IEBACiAJIlJldGlyZSBzdGF0dXMgcXVldWUiCiB9OwogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1jNl9tY2VfZGVzY1tdID0geworCSJIYXJkd2FyZSBBc3NlcnRpb24iLAorCSJGcmVlIExpc3QiLAorCSJQaHlzaWNhbCBSZWdpc3RlciBGaWxlIiwKKwkiUmV0aXJlIFF1ZXVlIiwKKwkiU2NoZWR1bGVyIHRhYmxlIiwKKwkiU3RhdHVzIFJlZ2lzdGVyIEZpbGUiLAorfTsKKwogc3RhdGljIGJvb2wgZjEyaF9tYzBfbWNlKHUxNiBlYywgdTggeGVjKQogewogCWJvb2wgcmV0ID0gZmFsc2U7CkBAIC00MzIsOCArNDQxLDggQEAKIAkJcHJfY29udCgiOiAlcyBlcnJvciBpbiB0aGUgTDIgY2FjaGUgdGFncy5cbiIsIFI0X01TRyhlYykpOwogCWVsc2UgaWYgKHhlYyA9PSAweDApIHsKIAkJaWYgKFRMQl9FUlJPUihlYykpCi0JCQlwcl9jb250KCI6ICVzIGVycm9yIGluIGEgUGFnZSBEZXNjcmlwdG9yIENhY2hlIG9yICIKLQkJCQkiR3Vlc3QgVExCLlxuIiwgVFRfTVNHKGVjKSk7CisJCQlwcl9jb250KCIlcyBlcnJvciBpbiBhIFBhZ2UgRGVzY3JpcHRvciBDYWNoZSBvciBHdWVzdCBUTEIuXG4iLAorCQkJCVRUX01TRyhlYykpOwogCQllbHNlIGlmIChCVVNfRVJST1IoZWMpKQogCQkJcHJfY29udCgiOiAlcy9FQ0MgZXJyb3IgaW4gZGF0YSByZWFkIGZyb20gTkI6ICVzLlxuIiwKIAkJCQlSNF9NU0coZWMpLCBQUF9NU0coZWMpKTsKQEAgLTY3MiwzOCArNjgxLDEwIEBACiAKIAlwcl9lbWVyZyhIV19FUlIgIk1DNiBFcnJvcjogIik7CiAKLQlzd2l0Y2ggKHhlYykgewotCWNhc2UgMHgwOgotCQlwcl9jb250KCJIYXJkd2FyZSBBc3NlcnRpb24iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4MToKLQkJcHJfY29udCgiRnJlZSBMaXN0Iik7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDI6Ci0JCXByX2NvbnQoIlBoeXNpY2FsIFJlZ2lzdGVyIEZpbGUiKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4MzoKLQkJcHJfY29udCgiUmV0aXJlIFF1ZXVlIik7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDQ6Ci0JCXByX2NvbnQoIlNjaGVkdWxlciB0YWJsZSIpOwotCQlicmVhazsKLQotCWNhc2UgMHg1OgotCQlwcl9jb250KCJTdGF0dXMgUmVnaXN0ZXIgRmlsZSIpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6CisJaWYgKHhlYyA+IDB4NSkKIAkJZ290byB3cm9uZ19tYzZfbWNlOwotCQlicmVhazsKLQl9CiAKLQlwcl9jb250KCIgcGFyaXR5IGVycm9yLlxuIik7Ci0KKwlwcl9jb250KCIlcyBwYXJpdHkgZXJyb3IuXG4iLCBtYzZfbWNlX2Rlc2NbeGVjXSk7CiAJcmV0dXJuOwogCiAgd3JvbmdfbWM2X21jZToKQEAgLTgwMCw3ICs3ODEsNyBAQAogCXByX2NvbnQoIl06IDB4JTAxNmxseFxuIiwgbS0+c3RhdHVzKTsKIAogCWlmIChtLT5zdGF0dXMgJiBNQ0lfU1RBVFVTX0FERFJWKQotCQlwcl9lbWVyZyhIV19FUlIgIk1DJWRfQUREUjogMHglMDE2bGx4XG4iLCBtLT5iYW5rLCBtLT5hZGRyKTsKKwkJcHJfZW1lcmcoSFdfRVJSICJNQyVkIEVycm9yIEFkZHJlc3M6IDB4JTAxNmxseFxuIiwgbS0+YmFuaywgbS0+YWRkcik7CiAKIAlpZiAoIWZhbV9vcHMpCiAJCWdvdG8gZXJyX2NvZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbWNlX2FtZC5oIGIvZHJpdmVycy9lZGFjL21jZV9hbWQuaAppbmRleCA1MWI3ZTNhLi5jMjM1OWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbWNlX2FtZC5oCisrKyBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmgKQEAgLTMyLDkgKzMyLDYgQEAKICNkZWZpbmUgUjQoeCkJCQkJKCgoeCkgPj4gNCkgJiAweGYpCiAjZGVmaW5lIFI0X01TRyh4KQkJCSgoUjQoeCkgPCA5KSA/ICBycnJyX21zZ3NbUjQoeCldIDogIldyb25nIFI0ISIpCiAKLSNkZWZpbmUgTUNJX1NUQVRVU19ERUZFUlJFRAkJQklUXzY0KDQ0KQotI2RlZmluZSBNQ0lfU1RBVFVTX1BPSVNPTgkJQklUXzY0KDQzKQotCiBleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHBwX21zZ3NbXTsKIAogZW51bSB0dF9pZHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21jZV9hbWRfaW5qLmMgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYwppbmRleCA1ZTQ2YTlmLi4wYmQ5MWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYworKysgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYwpAQCAtMSwxNzMgKzEsMjYyIEBACiAvKgotICogQSBzaW1wbGUgTUNFIGluamVjdGlvbiBmYWNpbGl0eSBmb3IgdGVzdGluZyB0aGUgTUNFIGRlY29kaW5nIGNvZGUuIFRoaXMKLSAqIGRyaXZlciBzaG91bGQgYmUgYnVpbHQgYXMgbW9kdWxlIHNvIHRoYXQgaXQgY2FuIGJlIGxvYWRlZCBvbiBwcm9kdWN0aW9uCi0gKiBrZXJuZWxzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorICogQSBzaW1wbGUgTUNFIGluamVjdGlvbiBmYWNpbGl0eSBmb3IgdGVzdGluZyBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUgUkFTCisgKiBjb2RlLiBUaGlzIGRyaXZlciBzaG91bGQgYmUgYnVpbHQgYXMgbW9kdWxlIHNvIHRoYXQgaXQgY2FuIGJlIGxvYWRlZAorICogb24gcHJvZHVjdGlvbiBrZXJuZWxzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgogICoKICAqIFRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgdmVyc2lvbiAyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMDogIEJvcmlzbGF2IFBldGtvdiA8YnBAYWxpZW44LmRlPgorICogQ29weXJpZ2h0IChjKSAyMDEwLTE0OiAgQm9yaXNsYXYgUGV0a292IDxicEBhbGllbjguZGU+CiAgKgkJCUFkdmFuY2VkIE1pY3JvIERldmljZXMgSW5jLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2VkYWMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+CiAKICNpbmNsdWRlICJtY2VfYW1kLmgiCiAKLXN0cnVjdCBlZGFjX21jZV9hdHRyIHsKLQlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Ci0Jc3NpemVfdCAoKnNob3cpIChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGVkYWNfbWNlX2F0dHIgKmF0dHIsIGNoYXIgKmJ1Zik7Ci0Jc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGVkYWNfbWNlX2F0dHIgKmF0dHIsCi0JCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotfTsKLQotI2RlZmluZSBFREFDX01DRV9BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkJCQlcCi1zdGF0aWMgc3RydWN0IGVkYWNfbWNlX2F0dHIgbWNlX2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpCi0KLXN0YXRpYyBzdHJ1Y3Qga29iamVjdCAqbWNlX2tvYmo7Ci0KIC8qCiAgKiBDb2xsZWN0IGFsbCB0aGUgTUNpX1hYWCBzZXR0aW5ncwogICovCiBzdGF0aWMgc3RydWN0IG1jZSBpX21jZTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZnNfaW5qOwogCi0jZGVmaW5lIE1DRV9JTkpFQ1RfU1RPUkUocmVnKQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IGVkYWNfaW5qZWN0XyMjcmVnIyNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCQlcCi0JCQkJCSBzdHJ1Y3QgZWRhY19tY2VfYXR0ciAqYXR0ciwJXAotCQkJCQkgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50KVwKKyNkZWZpbmUgTUNFX0lOSkVDVF9TRVQocmVnKQkJCQkJCVwKK3N0YXRpYyBpbnQgaW5qXyMjcmVnIyNfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCQkJCVwKIHsJCQkJCQkJCQlcCi0JaW50IHJldCA9IDA7CQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwkJCQkJCVwKKwlzdHJ1Y3QgbWNlICptID0gKHN0cnVjdCBtY2UgKilkYXRhOwkJCQlcCiAJCQkJCQkJCQlcCi0JcmV0ID0ga3N0cnRvdWwoZGF0YSwgMTYsICZ2YWx1ZSk7CQkJCVwKLQlpZiAocmV0IDwgMCkJCQkJCQkJXAotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdyaXRpbmcgTUNFICIgI3JlZyAiIGZpZWxkLlxuIik7CVwKLQkJCQkJCQkJCVwKLQlpX21jZS5yZWcgPSB2YWx1ZTsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIGNvdW50OwkJCQkJCQlcCisJbS0+cmVnID0gdmFsOwkJCQkJCQlcCisJcmV0dXJuIDA7CQkJCQkJCVwKIH0KIAotTUNFX0lOSkVDVF9TVE9SRShzdGF0dXMpOwotTUNFX0lOSkVDVF9TVE9SRShtaXNjKTsKLU1DRV9JTkpFQ1RfU1RPUkUoYWRkcik7CitNQ0VfSU5KRUNUX1NFVChzdGF0dXMpOworTUNFX0lOSkVDVF9TRVQobWlzYyk7CitNQ0VfSU5KRUNUX1NFVChhZGRyKTsKIAotI2RlZmluZSBNQ0VfSU5KRUNUX1NIT1cocmVnKQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IGVkYWNfaW5qZWN0XyMjcmVnIyNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwJCVwKLQkJCQkJc3RydWN0IGVkYWNfbWNlX2F0dHIgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKKyNkZWZpbmUgTUNFX0lOSkVDVF9HRVQocmVnKQkJCQkJCVwKK3N0YXRpYyBpbnQgaW5qXyMjcmVnIyNfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQkJCVwKIHsJCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDE2bGx4XG4iLCBpX21jZS5yZWcpOwkJCVwKKwlzdHJ1Y3QgbWNlICptID0gKHN0cnVjdCBtY2UgKilkYXRhOwkJCQlcCisJCQkJCQkJCQlcCisJKnZhbCA9IG0tPnJlZzsJCQkJCQkJXAorCXJldHVybiAwOwkJCQkJCQlcCiB9CiAKLU1DRV9JTkpFQ1RfU0hPVyhzdGF0dXMpOwotTUNFX0lOSkVDVF9TSE9XKG1pc2MpOwotTUNFX0lOSkVDVF9TSE9XKGFkZHIpOworTUNFX0lOSkVDVF9HRVQoc3RhdHVzKTsKK01DRV9JTkpFQ1RfR0VUKG1pc2MpOworTUNFX0lOSkVDVF9HRVQoYWRkcik7CiAKLUVEQUNfTUNFX0FUVFIoc3RhdHVzLCAwNjQ0LCBlZGFjX2luamVjdF9zdGF0dXNfc2hvdywgZWRhY19pbmplY3Rfc3RhdHVzX3N0b3JlKTsKLUVEQUNfTUNFX0FUVFIobWlzYywgMDY0NCwgZWRhY19pbmplY3RfbWlzY19zaG93LCBlZGFjX2luamVjdF9taXNjX3N0b3JlKTsKLUVEQUNfTUNFX0FUVFIoYWRkciwgMDY0NCwgZWRhY19pbmplY3RfYWRkcl9zaG93LCBlZGFjX2luamVjdF9hZGRyX3N0b3JlKTsKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHN0YXR1c19mb3BzLCBpbmpfc3RhdHVzX2dldCwgaW5qX3N0YXR1c19zZXQsICIlbGx4XG4iKTsKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKG1pc2NfZm9wcywgaW5qX21pc2NfZ2V0LCBpbmpfbWlzY19zZXQsICIlbGx4XG4iKTsKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGFkZHJfZm9wcywgaW5qX2FkZHJfZ2V0LCBpbmpfYWRkcl9zZXQsICIlbGx4XG4iKTsKKworLyoKKyAqIENhbGxlciBuZWVkcyB0byBiZSBtYWtlIHN1cmUgdGhpcyBjcHUgZG9lc24ndCBkaXNhcHBlYXIKKyAqIGZyb20gdW5kZXIgdXMsIGkuZS46IGdldF9jcHUvcHV0X2NwdS4KKyAqLworc3RhdGljIGludCB0b2dnbGVfaHdfbWNlX2luamVjdCh1bnNpZ25lZCBpbnQgY3B1LCBib29sIGVuYWJsZSkKK3sKKwl1MzIgbCwgaDsKKwlpbnQgZXJyOworCisJZXJyID0gcmRtc3Jfb25fY3B1KGNwdSwgTVNSX0s3X0hXQ1IsICZsLCAmaCk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIiVzOiBlcnJvciByZWFkaW5nIEhXQ1JcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllbmFibGUgPyAobCB8PSBCSVQoMTgpKSA6IChsICY9IH5CSVQoMTgpKTsKKworCWVyciA9IHdybXNyX29uX2NwdShjcHUsIE1TUl9LN19IV0NSLCBsLCBoKTsKKwlpZiAoZXJyKQorCQlwcl9lcnIoIiVzOiBlcnJvciB3cml0aW5nIEhXQ1JcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmxhZ3NfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBtY2UgKm0gPSAoc3RydWN0IG1jZSAqKWRhdGE7CisKKwkqdmFsID0gbS0+aW5qZWN0X2ZsYWdzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxhZ3Nfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IG1jZSAqbSA9IChzdHJ1Y3QgbWNlICopZGF0YTsKKworCW0tPmluamVjdF9mbGFncyA9ICh1OCl2YWw7CisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGZsYWdzX2ZvcHMsIGZsYWdzX2dldCwgZmxhZ3Nfc2V0LCAiJWxsdVxuIik7CisKKy8qCisgKiBPbiB3aGljaCBDUFUgdG8gaW5qZWN0PworICovCitNQ0VfSU5KRUNUX0dFVChleHRjcHUpOworCitzdGF0aWMgaW50IGlual9leHRjcHVfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IG1jZSAqbSA9IChzdHJ1Y3QgbWNlICopZGF0YTsKKworCWlmICh2YWwgPj0gbnJfY3B1X2lkcyB8fCAhY3B1X29ubGluZSh2YWwpKSB7CisJCXByX2VycigiJXM6IEludmFsaWQgQ1BVOiAlbGx1XG4iLCBfX2Z1bmNfXywgdmFsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW0tPmV4dGNwdSA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoZXh0Y3B1X2ZvcHMsIGlual9leHRjcHVfZ2V0LCBpbmpfZXh0Y3B1X3NldCwgIiVsbHVcbiIpOworCitzdGF0aWMgdm9pZCB0cmlnZ2VyX21jZSh2b2lkICppbmZvKQoreworCWFzbSB2b2xhdGlsZSgiaW50ICQxOCIpOworfQorCitzdGF0aWMgdm9pZCBkb19pbmplY3Qodm9pZCkKK3sKKwl1NjQgbWNnX3N0YXR1cyA9IDA7CisJdW5zaWduZWQgaW50IGNwdSA9IGlfbWNlLmV4dGNwdTsKKwl1OCBiID0gaV9tY2UuYmFuazsKKworCWlmICghKGlfbWNlLmluamVjdF9mbGFncyAmIE1DSl9FWENFUFRJT04pKSB7CisJCWFtZF9kZWNvZGVfbWNlKE5VTEwsIDAsICZpX21jZSk7CisJCXJldHVybjsKKwl9CisKKwlnZXRfb25saW5lX2NwdXMoKTsKKwlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKKwkJZ290byBlcnI7CisKKwkvKiBwcmVwIE1DRSBnbG9iYWwgc2V0dGluZ3MgZm9yIHRoZSBpbmplY3Rpb24gKi8KKwltY2dfc3RhdHVzID0gTUNHX1NUQVRVU19NQ0lQIHwgTUNHX1NUQVRVU19FSVBWOworCisJaWYgKCEoaV9tY2Uuc3RhdHVzICYgTUNJX1NUQVRVU19QQ0MpKQorCQltY2dfc3RhdHVzIHw9IE1DR19TVEFUVVNfUklQVjsKKworCXRvZ2dsZV9od19tY2VfaW5qZWN0KGNwdSwgdHJ1ZSk7CisKKwl3cm1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9NQ0dfU1RBVFVTLAorCQkgICAgICh1MzIpbWNnX3N0YXR1cywgKHUzMikobWNnX3N0YXR1cyA+PiAzMikpOworCisJd3Jtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfTUN4X1NUQVRVUyhiKSwKKwkJICAgICAodTMyKWlfbWNlLnN0YXR1cywgKHUzMikoaV9tY2Uuc3RhdHVzID4+IDMyKSk7CisKKwl3cm1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9NQ3hfQUREUihiKSwKKwkJICAgICAodTMyKWlfbWNlLmFkZHIsICh1MzIpKGlfbWNlLmFkZHIgPj4gMzIpKTsKKworCXdybXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX01DeF9NSVNDKGIpLAorCQkgICAgICh1MzIpaV9tY2UubWlzYywgKHUzMikoaV9tY2UubWlzYyA+PiAzMikpOworCisJdG9nZ2xlX2h3X21jZV9pbmplY3QoY3B1LCBmYWxzZSk7CisKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCB0cmlnZ2VyX21jZSwgTlVMTCwgMCk7CisKK2VycjoKKwlwdXRfb25saW5lX2NwdXMoKTsKKworfQogCiAvKgogICogVGhpcyBkZW5vdGVzIGludG8gd2hpY2ggYmFuayB3ZSdyZSBpbmplY3RpbmcgYW5kIHRyaWdnZXJzCiAgKiB0aGUgaW5qZWN0aW9uLCBhdCB0aGUgc2FtZSB0aW1lLgogICovCi1zdGF0aWMgc3NpemVfdCBlZGFjX2luamVjdF9iYW5rX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICAgIHN0cnVjdCBlZGFjX21jZV9hdHRyICphdHRyLAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbnQgaW5qX2Jhbmtfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiB7Ci0JaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlzdHJ1Y3QgbWNlICptID0gKHN0cnVjdCBtY2UgKilkYXRhOwogCi0JcmV0ID0ga3N0cnRvdWwoZGF0YSwgMTAsICZ2YWx1ZSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGJhbmsgdmFsdWUhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHZhbHVlID4gNSkKLQkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDB4MTUgfHwgdmFsdWUgPiA2KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIk5vbi1leGlzdGVudCBNQ0UgYmFuazogJWx1XG4iLCB2YWx1ZSk7CisJaWYgKHZhbCA+IDUpIHsKKwkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDB4MTUgfHwgdmFsID4gNikgeworCQkJcHJfZXJyKCJOb24tZXhpc3RlbnQgTUNFIGJhbms6ICVsbHVcbiIsIHZhbCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCX0KIAotCWlfbWNlLmJhbmsgPSB2YWx1ZTsKKwltLT5iYW5rID0gdmFsOworCWRvX2luamVjdCgpOwogCi0JYW1kX2RlY29kZV9tY2UoTlVMTCwgMCwgJmlfbWNlKTsKLQotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QgZWRhY19pbmplY3RfYmFua19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICAgc3RydWN0IGVkYWNfbWNlX2F0dHIgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgaW5qX2JhbmtfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBpX21jZS5iYW5rKTsKKwlzdHJ1Y3QgbWNlICptID0gKHN0cnVjdCBtY2UgKilkYXRhOworCisJKnZhbCA9IG0tPmJhbms7CisJcmV0dXJuIDA7CiB9CiAKLUVEQUNfTUNFX0FUVFIoYmFuaywgMDY0NCwgZWRhY19pbmplY3RfYmFua19zaG93LCBlZGFjX2luamVjdF9iYW5rX3N0b3JlKTsKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGJhbmtfZm9wcywgaW5qX2JhbmtfZ2V0LCBpbmpfYmFua19zZXQsICIlbGx1XG4iKTsKIAotc3RhdGljIHN0cnVjdCBlZGFjX21jZV9hdHRyICpzeXNmc19hdHRyc1tdID0geyAmbWNlX2F0dHJfc3RhdHVzLCAmbWNlX2F0dHJfbWlzYywKLQkJCQkJICAgICAgICZtY2VfYXR0cl9hZGRyLCAmbWNlX2F0dHJfYmFuaworc3RydWN0IGRmc19ub2RlIHsKKwljaGFyICpuYW1lOworCXN0cnVjdCBkZW50cnkgKmQ7CisJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKK30gZGZzX2Zsc1tdID0geworCXsgLm5hbWUgPSAic3RhdHVzIiwJLmZvcHMgPSAmc3RhdHVzX2ZvcHMgfSwKKwl7IC5uYW1lID0gIm1pc2MiLAkuZm9wcyA9ICZtaXNjX2ZvcHMgfSwKKwl7IC5uYW1lID0gImFkZHIiLAkuZm9wcyA9ICZhZGRyX2ZvcHMgfSwKKwl7IC5uYW1lID0gImJhbmsiLAkuZm9wcyA9ICZiYW5rX2ZvcHMgfSwKKwl7IC5uYW1lID0gImZsYWdzIiwJLmZvcHMgPSAmZmxhZ3NfZm9wcyB9LAorCXsgLm5hbWUgPSAiY3B1IiwJLmZvcHMgPSAmZXh0Y3B1X2ZvcHMgfSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGVkYWNfaW5pdF9tY2VfaW5qZWN0KHZvaWQpCi17Ci0Jc3RydWN0IGJ1c190eXBlICplZGFjX3N1YnN5cyA9IE5VTEw7Ci0JaW50IGksIGVyciA9IDA7Ci0KLQllZGFjX3N1YnN5cyA9IGVkYWNfZ2V0X3N5c2ZzX3N1YnN5cygpOwotCWlmICghZWRhY19zdWJzeXMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWNlX2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJtY2UiLCAmZWRhY19zdWJzeXMtPmRldl9yb290LT5rb2JqKTsKLQlpZiAoIW1jZV9rb2JqKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgY3JlYXRpbmcgYSBtY2Uga3NldC5cbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9tY2Vfa29iajsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzeXNmc19hdHRycyk7IGkrKykgewotCQllcnIgPSBzeXNmc19jcmVhdGVfZmlsZShtY2Vfa29iaiwgJnN5c2ZzX2F0dHJzW2ldLT5hdHRyKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBjcmVhdGluZyAlcyBpbiBzeXNmcy5cbiIsCi0JCQkJCXN5c2ZzX2F0dHJzW2ldLT5hdHRyLm5hbWUpOwotCQkJZ290byBlcnJfc3lzZnNfY3JlYXRlOwotCQl9Ci0JfQotCXJldHVybiAwOwotCi1lcnJfc3lzZnNfY3JlYXRlOgotCXdoaWxlICgtLWkgPj0gMCkKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUobWNlX2tvYmosICZzeXNmc19hdHRyc1tpXS0+YXR0cik7Ci0KLQlrb2JqZWN0X2RlbChtY2Vfa29iaik7Ci0KLWVycl9tY2Vfa29iajoKLQllZGFjX3B1dF9zeXNmc19zdWJzeXMoKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBlZGFjX2V4aXRfbWNlX2luamVjdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaW5pdF9tY2VfaW5qZWN0KHZvaWQpCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzeXNmc19hdHRycyk7IGkrKykKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUobWNlX2tvYmosICZzeXNmc19hdHRyc1tpXS0+YXR0cik7CisJZGZzX2luaiA9IGRlYnVnZnNfY3JlYXRlX2RpcigibWNlLWluamVjdCIsIE5VTEwpOworCWlmICghZGZzX2luaikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlrb2JqZWN0X2RlbChtY2Vfa29iaik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGZzX2Zscyk7IGkrKykgeworCQlkZnNfZmxzW2ldLmQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGRmc19mbHNbaV0ubmFtZSwKKwkJCQkJCSAgICBTX0lSVVNSIHwgU19JV1VTUiwKKwkJCQkJCSAgICBkZnNfaW5qLAorCQkJCQkJICAgICZpX21jZSwKKwkJCQkJCSAgICBkZnNfZmxzW2ldLmZvcHMpOwogCi0JZWRhY19wdXRfc3lzZnNfc3Vic3lzKCk7CisJCWlmICghZGZzX2Zsc1tpXS5kKQorCQkJZ290byBlcnJfZGZzX2FkZDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2Rmc19hZGQ6CisJd2hpbGUgKC0taSA+PSAwKQorCQlkZWJ1Z2ZzX3JlbW92ZShkZnNfZmxzW2ldLmQpOworCisJZGVidWdmc19yZW1vdmUoZGZzX2luaik7CisJZGZzX2luaiA9IE5VTEw7CisKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAotbW9kdWxlX2luaXQoZWRhY19pbml0X21jZV9pbmplY3QpOwotbW9kdWxlX2V4aXQoZWRhY19leGl0X21jZV9pbmplY3QpOworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfbWNlX2luamVjdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGZzX2Zscyk7IGkrKykKKwkJZGVidWdmc19yZW1vdmUoZGZzX2Zsc1tpXS5kKTsKKworCW1lbXNldCgmZGZzX2ZscywgMCwgc2l6ZW9mKGRmc19mbHMpKTsKKworCWRlYnVnZnNfcmVtb3ZlKGRmc19pbmopOworCWRmc19pbmogPSBOVUxMOworfQorbW9kdWxlX2luaXQoaW5pdF9tY2VfaW5qZWN0KTsKK21vZHVsZV9leGl0KGV4aXRfbWNlX2luamVjdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkJvcmlzbGF2IFBldGtvdiA8YnBAYWxpZW44LmRlPiIpOwogTU9EVUxFX0FVVEhPUigiQU1EIEluYy4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTUNFIGluamVjdGlvbiBmYWNpbGl0eSBmb3IgdGVzdGluZyBNQ0UgZGVjb2RpbmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiTUNFIGluamVjdGlvbiBmYWNpbGl0eSBmb3IgUkFTIHRlc3RpbmciKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYwppbmRleCA1NDJmYWQ3Li42MzY2ZTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIAkJcmVzID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LAogCQkJCSAgICAgICBwZGF0YS0+aXJxLAogCQkJCSAgICAgICBtdjY0eDYwX3BjaV9pc3IsCi0JCQkJICAgICAgIElSUUZfRElTQUJMRUQsCisJCQkJICAgICAgIDAsCiAJCQkJICAgICAgICJbRURBQ10gUENJIGVyciIsCiAJCQkJICAgICAgIHBjaSk7CiAJCWlmIChyZXMgPCAwKSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJcmVzID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LAogCQkJCSAgICAgICBwZGF0YS0+aXJxLAogCQkJCSAgICAgICBtdjY0eDYwX3NyYW1faXNyLAotCQkJCSAgICAgICBJUlFGX0RJU0FCTEVELAorCQkJCSAgICAgICAwLAogCQkJCSAgICAgICAiW0VEQUNdIFNSQU0gZXJyIiwKIAkJCQkgICAgICAgZWRhY19kZXYpOwogCQlpZiAocmVzIDwgMCkgewpAQCAtNTQwLDcgKzU0MCw3IEBACiAJCXJlcyA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwKIAkJCQkgICAgICAgcGRhdGEtPmlycSwKIAkJCQkgICAgICAgbXY2NHg2MF9jcHVfaXNyLAotCQkJCSAgICAgICBJUlFGX0RJU0FCTEVELAorCQkJCSAgICAgICAwLAogCQkJCSAgICAgICAiW0VEQUNdIENQVSBlcnIiLAogCQkJCSAgICAgICBlZGFjX2Rldik7CiAJCWlmIChyZXMgPCAwKSB7CkBAIC04MDAsNyArODAwLDcgQEAKIAkJcmVzID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LAogCQkJCSAgICAgICBwZGF0YS0+aXJxLAogCQkJCSAgICAgICBtdjY0eDYwX21jX2lzciwKLQkJCQkgICAgICAgSVJRRl9ESVNBQkxFRCwKKwkJCQkgICAgICAgMCwKIAkJCQkgICAgICAgIltFREFDXSBNQyBlcnIiLAogCQkJCSAgICAgICBtY2kpOwogCQlpZiAocmVzIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYwppbmRleCAwZjA0ZDVlLi40MTU5MzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYwpAQCAtMTEyMCw3ICsxMTIwLDcgQEAKIAogCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGRlZF9pcnEsCiAJCQkgICAgIHBwYzR4eF9lZGFjX2lzciwKLQkJCSAgICAgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICAgMCwKIAkJCSAgICAgIltFREFDXSBNQyBFQ0NERUQiLAogCQkJICAgICBtY2kpOwogCkBAIC0xMTM0LDcgKzExMzQsNyBAQAogCiAJc3RhdHVzID0gcmVxdWVzdF9pcnEoc2VjX2lycSwKIAkJCSAgICAgcHBjNHh4X2VkYWNfaXNyLAotCQkJICAgICBJUlFGX0RJU0FCTEVELAorCQkJICAgICAwLAogCQkJICAgICAiW0VEQUNdIE1DIEVDQ1NFQyIsCiAJCQkgICAgIG1jaSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy94MzhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL3gzOF9lZGFjLmMKaW5kZXggZTY0NGI1Mi4uN2M1Y2RjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3gzOF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL3gzOF9lZGFjLmMKQEAgLTUwMCw4ICs1MDAsNyBAQAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmeDM4X2RyaXZlcik7CiAKIGZhaWwwOgotCWlmIChtY2lfcGRldikKLQkJcGNpX2Rldl9wdXQobWNpX3BkZXYpOworCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKIAogCXJldHVybiBwY2lfcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggMTdhZmM1MS4uYzVmN2I0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtOTMsNiArOTMsMTIgQEAKIAkJY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtID0gKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopZGF0YTsKIAogCQkvKgorCQkgKiA3LjQ1IEVuZC1vZi1UYWJsZSAoVHlwZSAxMjcpIFtTTUJJT1MgcmVmZXJlbmNlIHNwZWMgdjMuMC4wXQorCQkgKi8KKwkJaWYgKGRtLT50eXBlID09IERNSV9FTlRSWV9FTkRfT0ZfVEFCTEUpCisJCQlicmVhazsKKworCQkvKgogCQkgKiAgV2Ugd2FudCB0byBrbm93IHRoZSB0b3RhbCBsZW5ndGggKGZvcm1hdHRlZCBhcmVhIGFuZAogCQkgKiAgc3RyaW5ncykgYmVmb3JlIGRlY29kaW5nIHRvIG1ha2Ugc3VyZSB3ZSB3b24ndCBydW4gb2ZmIHRoZQogCQkgKiAgdGFibGUgaW4gZG1pX2RlY29kZSBvciBkbWlfc3RyaW5nCkBAIC0xMDcsNyArMTEzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB1MzIgZG1pX2Jhc2U7CitzdGF0aWMgcGh5c19hZGRyX3QgZG1pX2Jhc2U7CiBzdGF0aWMgdTE2IGRtaV9sZW47CiBzdGF0aWMgdTE2IGRtaV9udW07CiAKQEAgLTQ2Nyw3ICs0NzMsNyBAQAogCiAJaWYgKG1lbWNtcChidWYsICJfU01fIiwgNCkgPT0gMCAmJgogCSAgICBidWZbNV0gPCAzMiAmJiBkbWlfY2hlY2tzdW0oYnVmLCBidWZbNV0pKSB7Ci0JCXNtYmlvc192ZXIgPSAoYnVmWzZdIDw8IDgpICsgYnVmWzddOworCQlzbWJpb3NfdmVyID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGJ1ZiArIDYpOwogCiAJCS8qIFNvbWUgQklPUyByZXBvcnQgd2VpcmQgU01CSU9TIHZlcnNpb24sIGZpeCB0aGF0IHVwICovCiAJCXN3aXRjaCAoc21iaW9zX3ZlcikgewpAQCAtNDg5LDEwICs0OTUsOSBAQAogCWJ1ZiArPSAxNjsKIAogCWlmIChtZW1jbXAoYnVmLCAiX0RNSV8iLCA1KSA9PSAwICYmIGRtaV9jaGVja3N1bShidWYsIDE1KSkgewotCQlkbWlfbnVtID0gKGJ1ZlsxM10gPDwgOCkgfCBidWZbMTJdOwotCQlkbWlfbGVuID0gKGJ1Zls3XSA8PCA4KSB8IGJ1Zls2XTsKLQkJZG1pX2Jhc2UgPSAoYnVmWzExXSA8PCAyNCkgfCAoYnVmWzEwXSA8PCAxNikgfAotCQkJKGJ1Zls5XSA8PCA4KSB8IGJ1Zls4XTsKKwkJZG1pX251bSA9IGdldF91bmFsaWduZWRfbGUxNihidWYgKyAxMik7CisJCWRtaV9sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYoYnVmICsgNik7CisJCWRtaV9iYXNlID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGJ1ZiArIDgpOwogCiAJCWlmIChkbWlfd2Fsa19lYXJseShkbWlfZGVjb2RlKSA9PSAwKSB7CiAJCQlpZiAoc21iaW9zX3ZlcikgewpAQCAtNTE0LDEyICs1MTksNzIgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIENoZWNrIGZvciB0aGUgU01CSU9TIDMuMCA2NC1iaXQgZW50cnkgcG9pbnQgc2lnbmF0dXJlLiBVbmxpa2UgdGhlIGxlZ2FjeQorICogMzItYml0IGVudHJ5IHBvaW50LCB0aGVyZSBpcyBubyBlbWJlZGRlZCBETUkgaGVhZGVyIChfRE1JXykgaW4gaGVyZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgZG1pX3NtYmlvczNfcHJlc2VudChjb25zdCB1OCAqYnVmKQoreworCWlmIChtZW1jbXAoYnVmLCAiX1NNM18iLCA1KSA9PSAwICYmCisJICAgIGJ1Zls2XSA8IDMyICYmIGRtaV9jaGVja3N1bShidWYsIGJ1Zls2XSkpIHsKKwkJZG1pX3ZlciA9IGdldF91bmFsaWduZWRfYmUxNihidWYgKyA3KTsKKwkJZG1pX2xlbiA9IGdldF91bmFsaWduZWRfbGUzMihidWYgKyAxMik7CisJCWRtaV9iYXNlID0gZ2V0X3VuYWxpZ25lZF9sZTY0KGJ1ZiArIDE2KTsKKworCQkvKgorCQkgKiBUaGUgNjQtYml0IFNNQklPUyAzLjAgZW50cnkgcG9pbnQgbm8gbG9uZ2VyIGhhcyBhIGZpZWxkCisJCSAqIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmVzIHByZXNlbnQgaW4gdGhlIHRhYmxlLgorCQkgKiBJbnN0ZWFkLCBpdCBkZWZpbmVzIHRoZSB0YWJsZSBzaXplIGFzIGEgbWF4aW11bSBzaXplLCBhbmQKKwkJICogcmVsaWVzIG9uIHRoZSBlbmQtb2YtdGFibGUgc3RydWN0dXJlIHR5cGUgKCMxMjcpIHRvIGJlIHVzZWQKKwkJICogdG8gc2lnbmFsIHRoZSBlbmQgb2YgdGhlIHRhYmxlLgorCQkgKiBTbyBsZXQncyBkZWZpbmUgZG1pX251bSBhcyBhbiB1cHBlciBib3VuZCBhcyB3ZWxsOiBlYWNoCisJCSAqIHN0cnVjdHVyZSBoYXMgYSA0IGJ5dGUgaGVhZGVyLCBzbyBkbWlfbGVuIC8gNCBpcyBhbiB1cHBlcgorCQkgKiBib3VuZCBmb3IgdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmVzIGluIHRoZSB0YWJsZS4KKwkJICovCisJCWRtaV9udW0gPSBkbWlfbGVuIC8gNDsKKworCQlpZiAoZG1pX3dhbGtfZWFybHkoZG1pX2RlY29kZSkgPT0gMCkgeworCQkJcHJfaW5mbygiU01CSU9TICVkLiVkIHByZXNlbnQuXG4iLAorCQkJCWRtaV92ZXIgPj4gOCwgZG1pX3ZlciAmIDB4RkYpOworCQkJZG1pX2Zvcm1hdF9pZHMoZG1pX2lkc19zdHJpbmcsIHNpemVvZihkbWlfaWRzX3N0cmluZykpOworCQkJcHJfZGVidWcoIkRNSTogJXNcbiIsIGRtaV9pZHNfc3RyaW5nKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAxOworfQorCiB2b2lkIF9faW5pdCBkbWlfc2Nhbl9tYWNoaW5lKHZvaWQpCiB7CiAJY2hhciBfX2lvbWVtICpwLCAqcTsKIAljaGFyIGJ1ZlszMl07CiAKIAlpZiAoZWZpX2VuYWJsZWQoRUZJX0NPTkZJR19UQUJMRVMpKSB7CisJCS8qCisJCSAqIEFjY29yZGluZyB0byB0aGUgRE1URiBTTUJJT1MgcmVmZXJlbmNlIHNwZWMgdjMuMC4wLCBpdCBpcworCQkgKiBhbGxvd2VkIHRvIGRlZmluZSBib3RoIHRoZSA2NC1iaXQgZW50cnkgcG9pbnQgKHNtYmlvczMpIGFuZAorCQkgKiB0aGUgMzItYml0IGVudHJ5IHBvaW50IChzbWJpb3MpLCBpbiB3aGljaCBjYXNlIHRoZXkgc2hvdWxkCisJCSAqIGVpdGhlciBib3RoIHBvaW50IHRvIHRoZSBzYW1lIFNNQklPUyBzdHJ1Y3R1cmUgdGFibGUsIG9yIHRoZQorCQkgKiB0YWJsZSBwb2ludGVkIHRvIGJ5IHRoZSA2NC1iaXQgZW50cnkgcG9pbnQgc2hvdWxkIGNvbnRhaW4gYQorCQkgKiBzdXBlcnNldCBvZiB0aGUgdGFibGUgY29udGVudHMgcG9pbnRlZCB0byBieSB0aGUgMzItYml0IGVudHJ5CisJCSAqIHBvaW50IChzZWN0aW9uIDUuMikKKwkJICogVGhpcyBpbXBsaWVzIHRoYXQgdGhlIDY0LWJpdCBlbnRyeSBwb2ludCBzaG91bGQgaGF2ZQorCQkgKiBwcmVjZWRlbmNlIGlmIGl0IGlzIGRlZmluZWQgYW5kIHN1cHBvcnRlZCBieSB0aGUgT1MuIElmIHdlCisJCSAqIGhhdmUgdGhlIDY0LWJpdCBlbnRyeSBwb2ludCwgYnV0IGZhaWwgdG8gZGVjb2RlIGl0LCBmYWxsCisJCSAqIGJhY2sgdG8gdGhlIGxlZ2FjeSBvbmUgKGlmIGF2YWlsYWJsZSkKKwkJICovCisJCWlmIChlZmkuc21iaW9zMyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB7CisJCQlwID0gZG1pX2Vhcmx5X3JlbWFwKGVmaS5zbWJpb3MzLCAzMik7CisJCQlpZiAocCA9PSBOVUxMKQorCQkJCWdvdG8gZXJyb3I7CisJCQltZW1jcHlfZnJvbWlvKGJ1ZiwgcCwgMzIpOworCQkJZG1pX2Vhcmx5X3VubWFwKHAsIDMyKTsKKworCQkJaWYgKCFkbWlfc21iaW9zM19wcmVzZW50KGJ1ZikpIHsKKwkJCQlkbWlfYXZhaWxhYmxlID0gMTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQogCQlpZiAoZWZpLnNtYmlvcyA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQogCQkJZ290byBlcnJvcjsKIApAQCAtNTUyLDcgKzYxNyw3IEBACiAJCW1lbXNldChidWYsIDAsIDE2KTsKIAkJZm9yIChxID0gcDsgcSA8IHAgKyAweDEwMDAwOyBxICs9IDE2KSB7CiAJCQltZW1jcHlfZnJvbWlvKGJ1ZiArIDE2LCBxLCAxNik7Ci0JCQlpZiAoIWRtaV9wcmVzZW50KGJ1ZikpIHsKKwkJCWlmICghZG1pX3NtYmlvczNfcHJlc2VudChidWYpIHx8ICFkbWlfcHJlc2VudChidWYpKSB7CiAJCQkJZG1pX2F2YWlsYWJsZSA9IDE7CiAJCQkJZG1pX2Vhcmx5X3VubWFwKHAsIDB4MTAwMDApOwogCQkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQppbmRleCBhZWY2YTk1Li5kOGJlNjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQpAQCAtNyw0ICs3LDQgQEAKIG9iai0kKENPTkZJR19VRUZJX0NQRVIpCQkJKz0gY3Blci5vCiBvYmotJChDT05GSUdfRUZJX1JVTlRJTUVfTUFQKQkJKz0gcnVudGltZS1tYXAubwogb2JqLSQoQ09ORklHX0VGSV9SVU5USU1FX1dSQVBQRVJTKQkrPSBydW50aW1lLXdyYXBwZXJzLm8KLW9iai0kKENPTkZJR19FRklfQVJNX1NUVUIpCQkrPSBsaWJzdHViLworb2JqLSQoQ09ORklHX0VGSV9TVFVCKQkJCSs9IGxpYnN0dWIvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9jcGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9jcGVyLmMKaW5kZXggNWI1M2Q2MS4uNGZkOTk2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvY3Blci5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2NwZXIuYwpAQCAtMjk0LDcgKzI5NCw3IEBACiBjb25zdCBjaGFyICpjcGVyX21lbV9lcnJfdW5wYWNrKHN0cnVjdCB0cmFjZV9zZXEgKnAsCiAJCQkJc3RydWN0IGNwZXJfbWVtX2Vycl9jb21wYWN0ICpjbWVtKQogewotCWNvbnN0IGNoYXIgKnJldCA9IHAtPmJ1ZmZlciArIHAtPmxlbjsKKwljb25zdCBjaGFyICpyZXQgPSB0cmFjZV9zZXFfYnVmZmVyX3B0cihwKTsKIAogCWlmIChjcGVyX21lbV9lcnJfbG9jYXRpb24oY21lbSwgcmNkX2RlY29kZV9zdHIpKQogCQl0cmFjZV9zZXFfcHJpbnRmKHAsICIlcyIsIHJjZF9kZWNvZGVfc3RyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKaW5kZXggODU5MDA5OS4uOTAzNWMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAkuYWNwaSAgICAgICA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiAJLmFjcGkyMCAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5zbWJpb3MgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKKwkuc21iaW9zMyAgICA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCiAJLnNhbF9zeXN0YWIgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5ib290X2luZm8gID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUiwKIAkuaGNkcCAgICAgICA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsCkBAIC04Niw2ICs4Nyw4IEBACiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIkFDUEk9MHglbHhcbiIsIGVmaS5hY3BpKTsKIAlpZiAoZWZpLnNtYmlvcyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQogCQlzdHIgKz0gc3ByaW50ZihzdHIsICJTTUJJT1M9MHglbHhcbiIsIGVmaS5zbWJpb3MpOworCWlmIChlZmkuc21iaW9zMyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQorCQlzdHIgKz0gc3ByaW50ZihzdHIsICJTTUJJT1MzPTB4JWx4XG4iLCBlZmkuc21iaW9zMyk7CiAJaWYgKGVmaS5oY2RwICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhDRFA9MHglbHhcbiIsIGVmaS5oY2RwKTsKIAlpZiAoZWZpLmJvb3RfaW5mbyAhPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQpAQCAtMjYwLDYgKzI2Myw3IEBACiAJe01QU19UQUJMRV9HVUlELCAiTVBTIiwgJmVmaS5tcHN9LAogCXtTQUxfU1lTVEVNX1RBQkxFX0dVSUQsICJTQUxzeXN0YWIiLCAmZWZpLnNhbF9zeXN0YWJ9LAogCXtTTUJJT1NfVEFCTEVfR1VJRCwgIlNNQklPUyIsICZlZmkuc21iaW9zfSwKKwl7U01CSU9TM19UQUJMRV9HVUlELCAiU01CSU9TIDMuMCIsICZlZmkuc21iaW9zM30sCiAJe1VHQV9JT19QUk9UT0NPTF9HVUlELCAiVUdBIiwgJmVmaS51Z2F9LAogCXtOVUxMX0dVSUQsIE5VTEwsIE5VTEx9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvYXJtLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvYXJtLXN0dWIuYwppbmRleCA3NWVlMDU5Li5lYjQ4YTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2FybS1zdHViLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9hcm0tc3R1Yi5jCkBAIC0yNDcsOSArMjQ3LDE4IEBACiAJCQlnb3RvIGZhaWxfZnJlZV9jbWRsaW5lOwogCQl9CiAJfQotCWlmICghZmR0X2FkZHIpCisKKwlpZiAoZmR0X2FkZHIpIHsKKwkJcHJfZWZpKHN5c190YWJsZSwgIlVzaW5nIERUQiBmcm9tIGNvbW1hbmQgbGluZVxuIik7CisJfSBlbHNlIHsKIAkJLyogTG9vayBmb3IgYSBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJ5LiAqLwogCQlmZHRfYWRkciA9ICh1aW50cHRyX3QpZ2V0X2ZkdChzeXNfdGFibGUpOworCQlpZiAoZmR0X2FkZHIpCisJCQlwcl9lZmkoc3lzX3RhYmxlLCAiVXNpbmcgRFRCIGZyb20gY29uZmlndXJhdGlvbiB0YWJsZVxuIik7CisJfQorCisJaWYgKCFmZHRfYWRkcikKKwkJcHJfZWZpKHN5c190YWJsZSwgIkdlbmVyYXRpbmcgZW1wdHkgRFRCXG4iKTsKIAogCXN0YXR1cyA9IGhhbmRsZV9jbWRsaW5lX2ZpbGVzKHN5c190YWJsZSwgaW1hZ2UsIGNtZGxpbmVfcHRyLAogCQkJCSAgICAgICJpbml0cmQ9IiwgZHJhbV9iYXNlICsgU1pfNTEyTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggMDk1OWNhOS4uMjNkZmQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTkwNSw0ICs5MDUsMTYgQEAKICAgICAgICAgICBSaXZlciBUZWNoJ3MgdmlwZXJib2FyZC5oIGZvciBkZXRhaWxlZCBtZWFuaW5nCiAgICAgICAgICAgb2YgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzLgogCitjb25maWcgR1BJT19ETE4yCisJdHJpc3RhdGUgIkRpb2xhbiBETE4yIEdQSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1GRF9ETE4yCisJc2VsZWN0IEdQSU9MSUJfSVJRQ0hJUAorCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBHUElPIGRyaXZlciBmb3IgdGhlIERpb2xhbiBETE4yCisJICBib2FyZC4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBncGlvLWRsbjIuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKaW5kZXggZTVkMzQ2Yy4uZTYwNjc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQAogb2JqLSQoQ09ORklHX0dQSU9fREE5MDUyKQkrPSBncGlvLWRhOTA1Mi5vCiBvYmotJChDT05GSUdfR1BJT19EQTkwNTUpCSs9IGdwaW8tZGE5MDU1Lm8KIG9iai0kKENPTkZJR19HUElPX0RBVklOQ0kpCSs9IGdwaW8tZGF2aW5jaS5vCitvYmotJChDT05GSUdfR1BJT19ETE4yKQkJKz0gZ3Bpby1kbG4yLm8KIG9iai0kKENPTkZJR19HUElPX0RXQVBCKQkrPSBncGlvLWR3YXBiLm8KIG9iai0kKENPTkZJR19HUElPX0VNKQkJKz0gZ3Bpby1lbS5vCiBvYmotJChDT05GSUdfR1BJT19FUDkzWFgpCSs9IGdwaW8tZXA5M3h4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9kZXZyZXMuYyBiL2RyaXZlcnMvZ3Bpby9kZXZyZXMuYwppbmRleCA5NTRiOWY2Li4xM2RiZDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZGV2cmVzLmMKKysrIGIvZHJpdmVycy9ncGlvL2RldnJlcy5jCkBAIC0xMDksNiArMTA5LDM4IEBACiBFWFBPUlRfU1lNQk9MKF9fZGV2bV9ncGlvZF9nZXRfaW5kZXgpOwogCiAvKioKKyAqIGRldm1fZ2V0X2dwaW9kX2Zyb21fY2hpbGQgLSBnZXQgYSBHUElPIGRlc2NyaXB0b3IgZnJvbSBhIGRldmljZSdzIGNoaWxkIG5vZGUKKyAqIEBkZXY6CUdQSU8gY29uc3VtZXIKKyAqIEBjaGlsZDoJZmlybXdhcmUgbm9kZSAoY2hpbGQgb2YgQGRldikKKyAqCisgKiBHUElPIGRlc2NyaXB0b3JzIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiBhcmUgYXV0b21hdGljYWxseSBkaXNwb3NlZCBvbgorICogZHJpdmVyIGRldGFjaC4KKyAqLworc3RydWN0IGdwaW9fZGVzYyAqZGV2bV9nZXRfZ3Bpb2RfZnJvbV9jaGlsZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQpCit7CisJc3RydWN0IGdwaW9fZGVzYyAqKmRyOworCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2M7CisKKwlkciA9IGRldnJlc19hbGxvYyhkZXZtX2dwaW9kX3JlbGVhc2UsIHNpemVvZihzdHJ1Y3QgZ3Bpb19kZXNjICopLAorCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRlc2MgPSBmd25vZGVfZ2V0X25hbWVkX2dwaW9kKGNoaWxkLCAiZ3Bpb3MiKTsKKwlpZiAoSVNfRVJSKGRlc2MpKSB7CisJCWRldnJlc19mcmVlKGRyKTsKKwkJcmV0dXJuIGRlc2M7CisJfQorCisJKmRyID0gZGVzYzsKKwlkZXZyZXNfYWRkKGRldiwgZHIpOworCisJcmV0dXJuIGRlc2M7Cit9CitFWFBPUlRfU1lNQk9MKGRldm1fZ2V0X2dwaW9kX2Zyb21fY2hpbGQpOworCisvKioKICAqIGRldm1fZ3Bpb2RfZ2V0X2luZGV4X29wdGlvbmFsIC0gUmVzb3VyY2UtbWFuYWdlZCBncGlvZF9nZXRfaW5kZXhfb3B0aW9uYWwoKQogICogQGRldjogR1BJTyBjb25zdW1lcgogICogQGNvbl9pZDogZnVuY3Rpb24gd2l0aGluIHRoZSBHUElPIGNvbnN1bWVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1kbG4yLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1kbG4yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4YjUxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWRsbjIuYwpAQCAtMCwwICsxLDU1MyBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIERpb2xhbiBETE4tMiBVU0ItR1BJTyBhZGFwdGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvY2hhaW5lZF9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGxuMi5oPgorCisjZGVmaW5lIERMTjJfR1BJT19JRAkJCTB4MDEKKworI2RlZmluZSBETE4yX0dQSU9fR0VUX1BJTl9DT1VOVAkJRExOMl9DTUQoMHgwMSwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fU0VUX0RFQk9VTkNFCQlETE4yX0NNRCgweDA0LCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19HRVRfREVCT1VOQ0UJCURMTjJfQ01EKDB4MDUsIERMTjJfR1BJT19JRCkKKyNkZWZpbmUgRExOMl9HUElPX1BPUlRfR0VUX1ZBTAkJRExOMl9DTUQoMHgwNiwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX0dFVF9WQUwJCURMTjJfQ01EKDB4MEIsIERMTjJfR1BJT19JRCkKKyNkZWZpbmUgRExOMl9HUElPX1BJTl9TRVRfT1VUX1ZBTAlETE4yX0NNRCgweDBDLCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fR0VUX09VVF9WQUwJRExOMl9DTUQoMHgwRCwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fQ09ORElUSU9OX01FVF9FVglETE4yX0NNRCgweDBGLCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fRU5BQkxFCQlETE4yX0NNRCgweDEwLCBETE4yX0dQSU9fSUQpCisjZGVmaW5lIERMTjJfR1BJT19QSU5fRElTQUJMRQkJRExOMl9DTUQoMHgxMSwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX1NFVF9ESVJFQ1RJT04JRExOMl9DTUQoMHgxMywgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX0dFVF9ESVJFQ1RJT04JRExOMl9DTUQoMHgxNCwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX1NFVF9FVkVOVF9DRkcJRExOMl9DTUQoMHgxRSwgRExOMl9HUElPX0lEKQorI2RlZmluZSBETE4yX0dQSU9fUElOX0dFVF9FVkVOVF9DRkcJRExOMl9DTUQoMHgxRiwgRExOMl9HUElPX0lEKQorCisjZGVmaW5lIERMTjJfR1BJT19FVkVOVF9OT05FCQkwCisjZGVmaW5lIERMTjJfR1BJT19FVkVOVF9DSEFOR0UJCTEKKyNkZWZpbmUgRExOMl9HUElPX0VWRU5UX0xWTF9ISUdICTIKKyNkZWZpbmUgRExOMl9HUElPX0VWRU5UX0xWTF9MT1cJCTMKKyNkZWZpbmUgRExOMl9HUElPX0VWRU5UX0NIQU5HRV9SSVNJTkcJMHgxMQorI2RlZmluZSBETE4yX0dQSU9fRVZFTlRfQ0hBTkdFX0ZBTExJTkcgIDB4MjEKKyNkZWZpbmUgRExOMl9HUElPX0VWRU5UX01BU0sJCTB4MEYKKworI2RlZmluZSBETE4yX0dQSU9fTUFYX1BJTlMgMzIKKworc3RydWN0IGRsbjJfaXJxX3dvcmsgeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjI7CisJaW50IHBpbjsKKwlpbnQgdHlwZTsKK307CisKK3N0cnVjdCBkbG4yX2dwaW8geworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGdwaW9fY2hpcCBncGlvOworCisJLyoKKwkgKiBDYWNoZSBwaW4gZGlyZWN0aW9uIHRvIHNhdmUgdXMgb25lIHRyYW5zZmVyLCBzaW5jZSB0aGUgaGFyZHdhcmUgaGFzCisJICogc2VwYXJhdGUgY29tbWFuZHMgdG8gcmVhZCB0aGUgaW4gYW5kIG91dCB2YWx1ZXMuCisJICovCisJREVDTEFSRV9CSVRNQVAob3V0cHV0X2VuYWJsZWQsIERMTjJfR1BJT19NQVhfUElOUyk7CisKKwlERUNMQVJFX0JJVE1BUChpcnFzX21hc2tlZCwgRExOMl9HUElPX01BWF9QSU5TKTsKKwlERUNMQVJFX0JJVE1BUChpcnFzX2VuYWJsZWQsIERMTjJfR1BJT19NQVhfUElOUyk7CisJREVDTEFSRV9CSVRNQVAoaXJxc19wZW5kaW5nLCBETE4yX0dQSU9fTUFYX1BJTlMpOworCXN0cnVjdCBkbG4yX2lycV93b3JrICppcnFfd29yazsKK307CisKK3N0cnVjdCBkbG4yX2dwaW9fcGluIHsKKwlfX2xlMTYgcGluOworfTsKKworc3RydWN0IGRsbjJfZ3Bpb19waW5fdmFsIHsKKwlfX2xlMTYgcGluIF9fcGFja2VkOworCXU4IHZhbHVlOworfTsKKworc3RhdGljIGludCBkbG4yX2dwaW9fZ2V0X3Bpbl9jb3VudChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJX19sZTE2IGNvdW50OworCWludCBsZW4gPSBzaXplb2YoY291bnQpOworCisJcmV0ID0gZGxuMl90cmFuc2Zlcl9yeChwZGV2LCBETE4yX0dQSU9fR0VUX1BJTl9DT1VOVCwgJmNvdW50LCAmbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAobGVuIDwgc2l6ZW9mKGNvdW50KSkKKwkJcmV0dXJuIC1FUFJPVE87CisKKwlyZXR1cm4gbGUxNl90b19jcHUoY291bnQpOworfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19waW5fY21kKHN0cnVjdCBkbG4yX2dwaW8gKmRsbjIsIGludCBjbWQsIHVuc2lnbmVkIHBpbikKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvX3BpbiByZXEgPSB7CisJCS5waW4gPSBjcHVfdG9fbGUxNihwaW4pLAorCX07CisKKwlyZXR1cm4gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBjbWQsICZyZXEsIHNpemVvZihyZXEpKTsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fcGluX3ZhbChzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgcGluKQoreworCWludCByZXQ7CisJc3RydWN0IGRsbjJfZ3Bpb19waW4gcmVxID0geworCQkucGluID0gY3B1X3RvX2xlMTYocGluKSwKKwl9OworCXN0cnVjdCBkbG4yX2dwaW9fcGluX3ZhbCByc3A7CisJaW50IGxlbiA9IHNpemVvZihyc3ApOworCisJcmV0ID0gZGxuMl90cmFuc2ZlcihkbG4yLT5wZGV2LCBjbWQsICZyZXEsIHNpemVvZihyZXEpLCAmcnNwLCAmbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAobGVuIDwgc2l6ZW9mKHJzcCkgfHwgcmVxLnBpbiAhPSByc3AucGluKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCXJldHVybiByc3AudmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3Bpbl9nZXRfaW5fdmFsKHN0cnVjdCBkbG4yX2dwaW8gKmRsbjIsIHVuc2lnbmVkIGludCBwaW4pCit7CisJaW50IHJldDsKKworCXJldCA9IGRsbjJfZ3Bpb19waW5fdmFsKGRsbjIsIERMTjJfR1BJT19QSU5fR0VUX1ZBTCwgcGluKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gISFyZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3Bpbl9nZXRfb3V0X3ZhbChzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yLCB1bnNpZ25lZCBpbnQgcGluKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkbG4yX2dwaW9fcGluX3ZhbChkbG4yLCBETE4yX0dQSU9fUElOX0dFVF9PVVRfVkFMLCBwaW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAhIXJldDsKK30KKworc3RhdGljIHZvaWQgZGxuMl9ncGlvX3Bpbl9zZXRfb3V0X3ZhbChzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBwaW4sIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvX3Bpbl92YWwgcmVxID0geworCQkucGluID0gY3B1X3RvX2xlMTYocGluKSwKKwkJLnZhbHVlID0gdmFsdWUsCisJfTsKKworCWRsbjJfdHJhbnNmZXJfdHgoZGxuMi0+cGRldiwgRExOMl9HUElPX1BJTl9TRVRfT1VUX1ZBTCwgJnJlcSwKKwkJCSBzaXplb2YocmVxKSk7Cit9CisKKyNkZWZpbmUgRExOMl9HUElPX0RJUkVDVElPTl9JTgkJMAorI2RlZmluZSBETE4yX0dQSU9fRElSRUNUSU9OX09VVAkJMQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCXN0cnVjdCBkbG4yX2dwaW9fcGluIHJlcSA9IHsKKwkJLnBpbiA9IGNwdV90b19sZTE2KG9mZnNldCksCisJfTsKKwlzdHJ1Y3QgZGxuMl9ncGlvX3Bpbl92YWwgcnNwOworCWludCBsZW4gPSBzaXplb2YocnNwKTsKKwlpbnQgcmV0OworCisJcmV0ID0gZGxuMl9ncGlvX3Bpbl9jbWQoZGxuMiwgRExOMl9HUElPX1BJTl9FTkFCTEUsIG9mZnNldCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBjYWNoZSB0aGUgcGluIGRpcmVjdGlvbiAqLworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9HUElPX1BJTl9HRVRfRElSRUNUSU9OLAorCQkJICAgICZyZXEsIHNpemVvZihyZXEpLCAmcnNwLCAmbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAobGVuIDwgc2l6ZW9mKHJzcCkgfHwgcmVxLnBpbiAhPSByc3AucGluKSB7CisJCXJldCA9IC1FUFJPVE87CisJCWdvdG8gb3V0X2Rpc2FibGU7CisJfQorCisJc3dpdGNoIChyc3AudmFsdWUpIHsKKwljYXNlIERMTjJfR1BJT19ESVJFQ1RJT05fSU46CisJCWNsZWFyX2JpdChvZmZzZXQsIGRsbjItPm91dHB1dF9lbmFibGVkKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBETE4yX0dQSU9fRElSRUNUSU9OX09VVDoKKwkJc2V0X2JpdChvZmZzZXQsIGRsbjItPm91dHB1dF9lbmFibGVkKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVQUk9UTzsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisKK291dF9kaXNhYmxlOgorCWRsbjJfZ3Bpb19waW5fY21kKGRsbjIsIERMTjJfR1BJT19QSU5fRElTQUJMRSwgb2Zmc2V0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkbG4yX2dwaW9fZnJlZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKworCWRsbjJfZ3Bpb19waW5fY21kKGRsbjIsIERMTjJfR1BJT19QSU5fRElTQUJMRSwgb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fZ2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKworCWlmICh0ZXN0X2JpdChvZmZzZXQsIGRsbjItPm91dHB1dF9lbmFibGVkKSkKKwkJcmV0dXJuIEdQSU9GX0RJUl9PVVQ7CisKKwlyZXR1cm4gR1BJT0ZfRElSX0lOOworfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCWludCBkaXI7CisKKwlkaXIgPSBkbG4yX2dwaW9fZ2V0X2RpcmVjdGlvbihjaGlwLCBvZmZzZXQpOworCWlmIChkaXIgPCAwKQorCQlyZXR1cm4gZGlyOworCisJaWYgKGRpciA9PSBHUElPRl9ESVJfSU4pCisJCXJldHVybiBkbG4yX2dwaW9fcGluX2dldF9pbl92YWwoZGxuMiwgb2Zmc2V0KTsKKworCXJldHVybiBkbG4yX2dwaW9fcGluX2dldF9vdXRfdmFsKGRsbjIsIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGRsbjJfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKworCWRsbjJfZ3Bpb19waW5fc2V0X291dF92YWwoZGxuMiwgb2Zmc2V0LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3NldF9kaXJlY3Rpb24oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCSAgIHVuc2lnbmVkIGRpcikKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCXN0cnVjdCBkbG4yX2dwaW9fcGluX3ZhbCByZXEgPSB7CisJCS5waW4gPSBjcHVfdG9fbGUxNihvZmZzZXQpLAorCQkudmFsdWUgPSBkaXIsCisJfTsKKwlpbnQgcmV0OworCisJcmV0ID0gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX0dQSU9fUElOX1NFVF9ESVJFQ1RJT04sCisJCQkgICAgICAgJnJlcSwgc2l6ZW9mKHJlcSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGRpciA9PSBETE4yX0dQSU9fRElSRUNUSU9OX09VVCkKKwkJc2V0X2JpdChvZmZzZXQsIGRsbjItPm91dHB1dF9lbmFibGVkKTsKKwllbHNlCisJCWNsZWFyX2JpdChvZmZzZXQsIGRsbjItPm91dHB1dF9lbmFibGVkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJcmV0dXJuIGRsbjJfZ3Bpb19zZXRfZGlyZWN0aW9uKGNoaXAsIG9mZnNldCwgRExOMl9HUElPX0RJUkVDVElPTl9JTik7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCSAgICAgIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gZGxuMl9ncGlvX3NldF9kaXJlY3Rpb24oY2hpcCwgb2Zmc2V0LCBETE4yX0dQSU9fRElSRUNUSU9OX09VVCk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9ncGlvX3NldF9kZWJvdW5jZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJICB1bnNpZ25lZCBkZWJvdW5jZSkKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCV9fbGUzMiBkdXJhdGlvbiA9IGNwdV90b19sZTMyKGRlYm91bmNlKTsKKworCXJldHVybiBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfR1BJT19TRVRfREVCT1VOQ0UsCisJCQkJJmR1cmF0aW9uLCBzaXplb2YoZHVyYXRpb24pKTsKK30KKworc3RhdGljIGludCBkbG4yX2dwaW9fc2V0X2V2ZW50X2NmZyhzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yLCB1bnNpZ25lZCBwaW4sCisJCQkJICAgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgcGVyaW9kKQoreworCXN0cnVjdCB7CisJCV9fbGUxNiBwaW47CisJCXU4IHR5cGU7CisJCV9fbGUxNiBwZXJpb2Q7CisJfSBfX3BhY2tlZCByZXEgPSB7CisJCS5waW4gPSBjcHVfdG9fbGUxNihwaW4pLAorCQkudHlwZSA9IHR5cGUsCisJCS5wZXJpb2QgPSBjcHVfdG9fbGUxNihwZXJpb2QpLAorCX07CisKKwlyZXR1cm4gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX0dQSU9fUElOX1NFVF9FVkVOVF9DRkcsCisJCQkJJnJlcSwgc2l6ZW9mKHJlcSkpOworfQorCitzdGF0aWMgdm9pZCBkbG4yX2lycV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKK3sKKwlzdHJ1Y3QgZGxuMl9pcnFfd29yayAqaXcgPSBjb250YWluZXJfb2Yodywgc3RydWN0IGRsbjJfaXJxX3dvcmssIHdvcmspOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBpdy0+ZGxuMjsKKwl1OCB0eXBlID0gaXctPnR5cGUgJiBETE4yX0dQSU9fRVZFTlRfTUFTSzsKKworCWlmICh0ZXN0X2JpdChpdy0+cGluLCBkbG4yLT5pcnFzX2VuYWJsZWQpKQorCQlkbG4yX2dwaW9fc2V0X2V2ZW50X2NmZyhkbG4yLCBpdy0+cGluLCB0eXBlLCAwKTsKKwllbHNlCisJCWRsbjJfZ3Bpb19zZXRfZXZlbnRfY2ZnKGRsbjIsIGl3LT5waW4sIERMTjJfR1BJT19FVkVOVF9OT05FLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGxuMl9pcnFfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOworCisJc2V0X2JpdChwaW4sIGRsbjItPmlycXNfZW5hYmxlZCk7CisJc2NoZWR1bGVfd29yaygmZGxuMi0+aXJxX3dvcmtbcGluXS53b3JrKTsKK30KKworc3RhdGljIHZvaWQgZGxuMl9pcnFfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShpcnFkKTsKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKwlpbnQgcGluID0gaXJxZF90b19od2lycShpcnFkKTsKKworCWNsZWFyX2JpdChwaW4sIGRsbjItPmlycXNfZW5hYmxlZCk7CisJc2NoZWR1bGVfd29yaygmZGxuMi0+aXJxX3dvcmtbcGluXS53b3JrKTsKK30KKworc3RhdGljIHZvaWQgZGxuMl9pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShpcnFkKTsKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKwlpbnQgcGluID0gaXJxZF90b19od2lycShpcnFkKTsKKworCXNldF9iaXQocGluLCBkbG4yLT5pcnFzX21hc2tlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRsbjJfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShpcnFkKTsKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgZGxuMl9ncGlvLCBncGlvKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkbG4yLT5ncGlvLmRldjsKKwlpbnQgcGluID0gaXJxZF90b19od2lycShpcnFkKTsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQocGluLCBkbG4yLT5pcnFzX3BlbmRpbmcpKSB7CisJCWludCBpcnE7CisKKwkJaXJxID0gaXJxX2ZpbmRfbWFwcGluZyhkbG4yLT5ncGlvLmlycWRvbWFpbiwgcGluKTsKKwkJaWYgKCFpcnEpIHsKKwkJCWRldl9lcnIoZGV2LCAicGluICVkIG5vdCBtYXBwZWQgdG8gSVJRXG4iLCBwaW4pOworCQkJcmV0dXJuOworCQl9CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJfQorfQorCitzdGF0aWMgaW50IGRsbjJfaXJxX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCwgdW5zaWduZWQgdHlwZSkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBkbG4yX2dwaW8sIGdwaW8pOworCWludCBwaW4gPSBpcnFkX3RvX2h3aXJxKGlycWQpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQlkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUgPSBETE4yX0dQSU9fRVZFTlRfTFZMX0hJR0g7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgorCQlkbG4yLT5pcnFfd29ya1twaW5dLnR5cGUgPSBETE4yX0dQSU9fRVZFTlRfTFZMX0xPVzsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6CisJCWRsbjItPmlycV93b3JrW3Bpbl0udHlwZSA9IERMTjJfR1BJT19FVkVOVF9DSEFOR0U7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6CisJCWRsbjItPmlycV93b3JrW3Bpbl0udHlwZSA9IERMTjJfR1BJT19FVkVOVF9DSEFOR0VfUklTSU5HOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKKwkJZGxuMi0+aXJxX3dvcmtbcGluXS50eXBlID0gRExOMl9HUElPX0VWRU5UX0NIQU5HRV9GQUxMSU5HOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBkbG4yX2dwaW9faXJxY2hpcCA9IHsKKwkubmFtZSA9ICJkbG4yLWlycSIsCisJLmlycV9lbmFibGUgPSBkbG4yX2lycV9lbmFibGUsCisJLmlycV9kaXNhYmxlID0gZGxuMl9pcnFfZGlzYWJsZSwKKwkuaXJxX21hc2sgPSBkbG4yX2lycV9tYXNrLAorCS5pcnFfdW5tYXNrID0gZGxuMl9pcnFfdW5tYXNrLAorCS5pcnFfc2V0X3R5cGUgPSBkbG4yX2lycV9zZXRfdHlwZSwKK307CisKK3N0YXRpYyB2b2lkIGRsbjJfZ3Bpb19ldmVudChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1MTYgZWNobywKKwkJCSAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCWludCBwaW4sIGlycTsKKwljb25zdCBzdHJ1Y3QgeworCQlfX2xlMTYgY291bnQ7CisJCV9fdTggdHlwZTsKKwkJX19sZTE2IHBpbjsKKwkJX191OCB2YWx1ZTsKKwl9IF9fcGFja2VkICpldmVudCA9IGRhdGE7CisJc3RydWN0IGRsbjJfZ3BpbyAqZGxuMiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGxlbiA8IHNpemVvZigqZXZlbnQpKSB7CisJCWRldl9lcnIoZGxuMi0+Z3Bpby5kZXYsICJzaG9ydCBldmVudCBtZXNzYWdlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBpbiA9IGxlMTZfdG9fY3B1KGV2ZW50LT5waW4pOworCWlmIChwaW4gPj0gZGxuMi0+Z3Bpby5uZ3BpbykgeworCQlkZXZfZXJyKGRsbjItPmdwaW8uZGV2LCAib3V0IG9mIGJvdW5kcyBwaW4gJWRcbiIsIHBpbik7CisJCXJldHVybjsKKwl9CisKKwlpcnEgPSBpcnFfZmluZF9tYXBwaW5nKGRsbjItPmdwaW8uaXJxZG9tYWluLCBwaW4pOworCWlmICghaXJxKSB7CisJCWRldl9lcnIoZGxuMi0+Z3Bpby5kZXYsICJwaW4gJWQgbm90IG1hcHBlZCB0byBJUlFcbiIsIHBpbik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXRlc3RfYml0KHBpbiwgZGxuMi0+aXJxc19lbmFibGVkKSkKKwkJcmV0dXJuOworCWlmICh0ZXN0X2JpdChwaW4sIGRsbjItPmlycXNfbWFza2VkKSkgeworCQlzZXRfYml0KHBpbiwgZGxuMi0+aXJxc19wZW5kaW5nKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZGxuMi0+aXJxX3dvcmtbcGluXS50eXBlKSB7CisJY2FzZSBETE4yX0dQSU9fRVZFTlRfQ0hBTkdFX1JJU0lORzoKKwkJaWYgKGV2ZW50LT52YWx1ZSkKKwkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCQlicmVhazsKKwljYXNlIERMTjJfR1BJT19FVkVOVF9DSEFOR0VfRkFMTElORzoKKwkJaWYgKCFldmVudC0+dmFsdWUpCisJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJfQorfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkbG4yX2dwaW8gKmRsbjI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlpbnQgcGluczsKKwlpbnQgaSwgcmV0OworCisJcGlucyA9IGRsbjJfZ3Bpb19nZXRfcGluX2NvdW50KHBkZXYpOworCWlmIChwaW5zIDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgcGluIGNvdW50OiAlZFxuIiwgcGlucyk7CisJCXJldHVybiBwaW5zOworCX0KKwlpZiAocGlucyA+IERMTjJfR1BJT19NQVhfUElOUykgeworCQlwaW5zID0gRExOMl9HUElPX01BWF9QSU5TOworCQlkZXZfd2FybihkZXYsICJjbGFtcGluZyBwaW5zIHRvICVkXG4iLCBETE4yX0dQSU9fTUFYX1BJTlMpOworCX0KKworCWRsbjIgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkbG4yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbG4yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRsbjItPmlycV93b3JrID0gZGV2bV9rY2FsbG9jKCZwZGV2LT5kZXYsIHBpbnMsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBkbG4yX2lycV93b3JrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbG4yLT5pcnFfd29yaykKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpID0gMDsgaSA8IHBpbnM7IGkrKykgeworCQlJTklUX1dPUksoJmRsbjItPmlycV93b3JrW2ldLndvcmssIGRsbjJfaXJxX3dvcmspOworCQlkbG4yLT5pcnFfd29ya1tpXS5waW4gPSBpOworCQlkbG4yLT5pcnFfd29ya1tpXS5kbG4yID0gZGxuMjsKKwl9CisKKwlkbG4yLT5wZGV2ID0gcGRldjsKKworCWRsbjItPmdwaW8ubGFiZWwgPSAiZGxuMiI7CisJZGxuMi0+Z3Bpby5kZXYgPSBkZXY7CisJZGxuMi0+Z3Bpby5vd25lciA9IFRISVNfTU9EVUxFOworCWRsbjItPmdwaW8uYmFzZSA9IC0xOworCWRsbjItPmdwaW8ubmdwaW8gPSBwaW5zOworCWRsbjItPmdwaW8uZXhwb3J0ZWQgPSB0cnVlOworCWRsbjItPmdwaW8uY2FuX3NsZWVwID0gdHJ1ZTsKKwlkbG4yLT5ncGlvLmlycV9ub3RfdGhyZWFkZWQgPSB0cnVlOworCWRsbjItPmdwaW8uc2V0ID0gZGxuMl9ncGlvX3NldDsKKwlkbG4yLT5ncGlvLmdldCA9IGRsbjJfZ3Bpb19nZXQ7CisJZGxuMi0+Z3Bpby5yZXF1ZXN0ID0gZGxuMl9ncGlvX3JlcXVlc3Q7CisJZGxuMi0+Z3Bpby5mcmVlID0gZGxuMl9ncGlvX2ZyZWU7CisJZGxuMi0+Z3Bpby5nZXRfZGlyZWN0aW9uID0gZGxuMl9ncGlvX2dldF9kaXJlY3Rpb247CisJZGxuMi0+Z3Bpby5kaXJlY3Rpb25faW5wdXQgPSBkbG4yX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCWRsbjItPmdwaW8uZGlyZWN0aW9uX291dHB1dCA9IGRsbjJfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0OworCWRsbjItPmdwaW8uc2V0X2RlYm91bmNlID0gZGxuMl9ncGlvX3NldF9kZWJvdW5jZTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRsbjIpOworCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZkbG4yLT5ncGlvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgZ3BpbyBjaGlwOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gZ3Bpb2NoaXBfaXJxY2hpcF9hZGQoJmRsbjItPmdwaW8sICZkbG4yX2dwaW9faXJxY2hpcCwgMCwKKwkJCQkgICBoYW5kbGVfc2ltcGxlX2lycSwgSVJRX1RZUEVfTk9ORSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIGlycSBjaGlwOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfZ3Bpb2NoaXBfcmVtb3ZlOworCX0KKworCXJldCA9IGRsbjJfcmVnaXN0ZXJfZXZlbnRfY2IocGRldiwgRExOMl9HUElPX0NPTkRJVElPTl9NRVRfRVYsCisJCQkJICAgICBkbG4yX2dwaW9fZXZlbnQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgZXZlbnQgY2I6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dF9ncGlvY2hpcF9yZW1vdmU7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9ncGlvY2hpcF9yZW1vdmU6CisJZ3Bpb2NoaXBfcmVtb3ZlKCZkbG4yLT5ncGlvKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRsbjJfZ3Bpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGxuMl9ncGlvICpkbG4yID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwlkbG4yX3VucmVnaXN0ZXJfZXZlbnRfY2IocGRldiwgRExOMl9HUElPX0NPTkRJVElPTl9NRVRfRVYpOworCWZvciAoaSA9IDA7IGkgPCBkbG4yLT5ncGlvLm5ncGlvOyBpKyspCisJCWZsdXNoX3dvcmsoJmRsbjItPmlycV93b3JrW2ldLndvcmspOworCWdwaW9jaGlwX3JlbW92ZSgmZGxuMi0+Z3Bpbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGxuMl9ncGlvX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUJPSAiZGxuMi1ncGlvIiwKKwkucHJvYmUJCT0gZGxuMl9ncGlvX3Byb2JlLAorCS5yZW1vdmUJCT0gZGxuMl9ncGlvX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZGxuMl9ncGlvX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkRhbmllbCBCYWx1dGEgPGRhbmllbC5iYWx1dGFAaW50ZWwuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIERpb2xhbiBETE4yIEdQSU8gaW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmRsbjItZ3BpbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jCmluZGV4IDQxNTY4MmYuLjNkNmI0NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMKQEAgLTEyNTksNyArMTI1OSw3IEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIAotI2lmIGRlZmluZWQoQ09ORklHX1BNX1JVTlRJTUUpCisjaWYgZGVmaW5lZChDT05GSUdfUE0pCiBzdGF0aWMgdm9pZCBvbWFwX2dwaW9fcmVzdG9yZV9jb250ZXh0KHN0cnVjdCBncGlvX2JhbmsgKmJhbmspOwogCiBzdGF0aWMgaW50IG9tYXBfZ3Bpb19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTQ0MCw3ICsxNDQwLDcgQEAKIAogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIHZvaWQgb21hcDJfZ3Bpb19wcmVwYXJlX2Zvcl9pZGxlKGludCBwd3JfbW9kZSkKIHsKQEAgLTE0NjgsNyArMTQ2OCw3IEBACiAJfQogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUE1fUlVOVElNRSkKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkKIHN0YXRpYyB2b2lkIG9tYXBfZ3Bpb19pbml0X2NvbnRleHQoc3RydWN0IGdwaW9fYmFuayAqcCkKIHsKIAlzdHJ1Y3Qgb21hcF9ncGlvX3JlZ19vZmZzICpyZWdzID0gcC0+cmVnczsKQEAgLTE1MjUsNyArMTUyNSw3IEBACiAJd3JpdGVsX3JlbGF4ZWQoYmFuay0+Y29udGV4dC5pcnFlbmFibGUyLAogCQkJCWJhbmstPmJhc2UgKyBiYW5rLT5yZWdzLT5pcnFlbmFibGUyKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworI2VuZGlmIC8qIENPTkZJR19QTSAqLwogI2Vsc2UKICNkZWZpbmUgb21hcF9ncGlvX3J1bnRpbWVfc3VzcGVuZCBOVUxMCiAjZGVmaW5lIG9tYXBfZ3Bpb19ydW50aW1lX3Jlc3VtZSBOVUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1zY2guYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXNjaC5jCmluZGV4IDQxZTkxZDcuLjk5NzIwYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXNjaC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXNjaC5jCkBAIC0yOSw4NCArMjksMTI5IEBACiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3Bpb19sb2NrKTsKKyNkZWZpbmUgR0VOCTB4MDAKKyNkZWZpbmUgR0lPCTB4MDQKKyNkZWZpbmUgR0xWCTB4MDgKIAotI2RlZmluZSBDR0VOCSgweDAwKQotI2RlZmluZSBDR0lPCSgweDA0KQotI2RlZmluZSBDR0xWCSgweDA4KQorc3RydWN0IHNjaF9ncGlvIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIHNob3J0IGlvYmFzZTsKKwl1bnNpZ25lZCBzaG9ydCBjb3JlX2Jhc2U7CisJdW5zaWduZWQgc2hvcnQgcmVzdW1lX2Jhc2U7Cit9OwogCi0jZGVmaW5lIFJHRU4JKDB4MjApCi0jZGVmaW5lIFJHSU8JKDB4MjQpCi0jZGVmaW5lIFJHTFYJKDB4MjgpCisjZGVmaW5lIHRvX3NjaF9ncGlvKGMpCWNvbnRhaW5lcl9vZihjLCBzdHJ1Y3Qgc2NoX2dwaW8sIGNoaXApCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBncGlvX2JhOwotCi1zdGF0aWMgaW50IHNjaF9ncGlvX2NvcmVfZGlyZWN0aW9uX2luKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCAgZ3Bpb19udW0pCitzdGF0aWMgdW5zaWduZWQgc2NoX2dwaW9fb2Zmc2V0KHN0cnVjdCBzY2hfZ3BpbyAqc2NoLCB1bnNpZ25lZCBncGlvLAorCQkJCXVuc2lnbmVkIHJlZykKIHsKKwl1bnNpZ25lZCBiYXNlID0gMDsKKworCWlmIChncGlvID49IHNjaC0+cmVzdW1lX2Jhc2UpIHsKKwkJZ3BpbyAtPSBzY2gtPnJlc3VtZV9iYXNlOworCQliYXNlICs9IDB4MjA7CisJfQorCisJcmV0dXJuIGJhc2UgKyByZWcgKyBncGlvIC8gODsKK30KKworc3RhdGljIHVuc2lnbmVkIHNjaF9ncGlvX2JpdChzdHJ1Y3Qgc2NoX2dwaW8gKnNjaCwgdW5zaWduZWQgZ3BpbykKK3sKKwlpZiAoZ3BpbyA+PSBzY2gtPnJlc3VtZV9iYXNlKQorCQlncGlvIC09IHNjaC0+cmVzdW1lX2Jhc2U7CisJcmV0dXJuIGdwaW8gJSA4OworfQorCitzdGF0aWMgdm9pZCBzY2hfZ3Bpb19lbmFibGUoc3RydWN0IHNjaF9ncGlvICpzY2gsIHVuc2lnbmVkIGdwaW8pCit7CisJdW5zaWduZWQgc2hvcnQgb2Zmc2V0LCBiaXQ7CisJdTggZW5hYmxlOworCisJc3Bpbl9sb2NrKCZzY2gtPmxvY2spOworCisJb2Zmc2V0ID0gc2NoX2dwaW9fb2Zmc2V0KHNjaCwgZ3BpbywgR0VOKTsKKwliaXQgPSBzY2hfZ3Bpb19iaXQoc2NoLCBncGlvKTsKKworCWVuYWJsZSA9IGluYihzY2gtPmlvYmFzZSArIG9mZnNldCk7CisJaWYgKCEoZW5hYmxlICYgKDEgPDwgYml0KSkpCisJCW91dGIoZW5hYmxlIHwgKDEgPDwgYml0KSwgc2NoLT5pb2Jhc2UgKyBvZmZzZXQpOworCisJc3Bpbl91bmxvY2soJnNjaC0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc2NoX2dwaW9fZGlyZWN0aW9uX2luKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCAgZ3Bpb19udW0pCit7CisJc3RydWN0IHNjaF9ncGlvICpzY2ggPSB0b19zY2hfZ3BpbyhnYyk7CiAJdTggY3Vycl9kaXJzOwogCXVuc2lnbmVkIHNob3J0IG9mZnNldCwgYml0OwogCi0Jc3Bpbl9sb2NrKCZncGlvX2xvY2spOworCXNwaW5fbG9jaygmc2NoLT5sb2NrKTsKIAotCW9mZnNldCA9IENHSU8gKyBncGlvX251bSAvIDg7Ci0JYml0ID0gZ3Bpb19udW0gJSA4OworCW9mZnNldCA9IHNjaF9ncGlvX29mZnNldChzY2gsIGdwaW9fbnVtLCBHSU8pOworCWJpdCA9IHNjaF9ncGlvX2JpdChzY2gsIGdwaW9fbnVtKTsKIAotCWN1cnJfZGlycyA9IGluYihncGlvX2JhICsgb2Zmc2V0KTsKKwljdXJyX2RpcnMgPSBpbmIoc2NoLT5pb2Jhc2UgKyBvZmZzZXQpOwogCiAJaWYgKCEoY3Vycl9kaXJzICYgKDEgPDwgYml0KSkpCi0JCW91dGIoY3Vycl9kaXJzIHwgKDEgPDwgYml0KSwgZ3Bpb19iYSArIG9mZnNldCk7CisJCW91dGIoY3Vycl9kaXJzIHwgKDEgPDwgYml0KSwgc2NoLT5pb2Jhc2UgKyBvZmZzZXQpOwogCi0Jc3Bpbl91bmxvY2soJmdwaW9fbG9jayk7CisJc3Bpbl91bmxvY2soJnNjaC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2NoX2dwaW9fY29yZV9nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW9fbnVtKQorc3RhdGljIGludCBzY2hfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW9fbnVtKQogeworCXN0cnVjdCBzY2hfZ3BpbyAqc2NoID0gdG9fc2NoX2dwaW8oZ2MpOwogCWludCByZXM7CiAJdW5zaWduZWQgc2hvcnQgb2Zmc2V0LCBiaXQ7CiAKLQlvZmZzZXQgPSBDR0xWICsgZ3Bpb19udW0gLyA4OwotCWJpdCA9IGdwaW9fbnVtICUgODsKKwlvZmZzZXQgPSBzY2hfZ3Bpb19vZmZzZXQoc2NoLCBncGlvX251bSwgR0xWKTsKKwliaXQgPSBzY2hfZ3Bpb19iaXQoc2NoLCBncGlvX251bSk7CiAKLQlyZXMgPSAhIShpbmIoZ3Bpb19iYSArIG9mZnNldCkgJiAoMSA8PCBiaXQpKTsKKwlyZXMgPSAhIShpbmIoc2NoLT5pb2Jhc2UgKyBvZmZzZXQpICYgKDEgPDwgYml0KSk7CisKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCBzY2hfZ3Bpb19jb3JlX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3Bpb19udW0sIGludCB2YWwpCitzdGF0aWMgdm9pZCBzY2hfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW9fbnVtLCBpbnQgdmFsKQogeworCXN0cnVjdCBzY2hfZ3BpbyAqc2NoID0gdG9fc2NoX2dwaW8oZ2MpOwogCXU4IGN1cnJfdmFsczsKIAl1bnNpZ25lZCBzaG9ydCBvZmZzZXQsIGJpdDsKIAotCXNwaW5fbG9jaygmZ3Bpb19sb2NrKTsKKwlzcGluX2xvY2soJnNjaC0+bG9jayk7CiAKLQlvZmZzZXQgPSBDR0xWICsgZ3Bpb19udW0gLyA4OwotCWJpdCA9IGdwaW9fbnVtICUgODsKKwlvZmZzZXQgPSBzY2hfZ3Bpb19vZmZzZXQoc2NoLCBncGlvX251bSwgR0xWKTsKKwliaXQgPSBzY2hfZ3Bpb19iaXQoc2NoLCBncGlvX251bSk7CiAKLQljdXJyX3ZhbHMgPSBpbmIoZ3Bpb19iYSArIG9mZnNldCk7CisJY3Vycl92YWxzID0gaW5iKHNjaC0+aW9iYXNlICsgb2Zmc2V0KTsKIAogCWlmICh2YWwpCi0JCW91dGIoY3Vycl92YWxzIHwgKDEgPDwgYml0KSwgZ3Bpb19iYSArIG9mZnNldCk7CisJCW91dGIoY3Vycl92YWxzIHwgKDEgPDwgYml0KSwgc2NoLT5pb2Jhc2UgKyBvZmZzZXQpOwogCWVsc2UKLQkJb3V0YigoY3Vycl92YWxzICYgfigxIDw8IGJpdCkpLCBncGlvX2JhICsgb2Zmc2V0KTsKLQlzcGluX3VubG9jaygmZ3Bpb19sb2NrKTsKKwkJb3V0YigoY3Vycl92YWxzICYgfigxIDw8IGJpdCkpLCBzY2gtPmlvYmFzZSArIG9mZnNldCk7CisKKwlzcGluX3VubG9jaygmc2NoLT5sb2NrKTsKIH0KIAotc3RhdGljIGludCBzY2hfZ3Bpb19jb3JlX2RpcmVjdGlvbl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsCi0JCQkJCXVuc2lnbmVkIGdwaW9fbnVtLCBpbnQgdmFsKQorc3RhdGljIGludCBzY2hfZ3Bpb19kaXJlY3Rpb25fb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBncGlvX251bSwKKwkJCQkgIGludCB2YWwpCiB7CisJc3RydWN0IHNjaF9ncGlvICpzY2ggPSB0b19zY2hfZ3BpbyhnYyk7CiAJdTggY3Vycl9kaXJzOwogCXVuc2lnbmVkIHNob3J0IG9mZnNldCwgYml0OwogCi0Jc3Bpbl9sb2NrKCZncGlvX2xvY2spOworCXNwaW5fbG9jaygmc2NoLT5sb2NrKTsKIAotCW9mZnNldCA9IENHSU8gKyBncGlvX251bSAvIDg7Ci0JYml0ID0gZ3Bpb19udW0gJSA4OworCW9mZnNldCA9IHNjaF9ncGlvX29mZnNldChzY2gsIGdwaW9fbnVtLCBHSU8pOworCWJpdCA9IHNjaF9ncGlvX2JpdChzY2gsIGdwaW9fbnVtKTsKIAotCWN1cnJfZGlycyA9IGluYihncGlvX2JhICsgb2Zmc2V0KTsKKwljdXJyX2RpcnMgPSBpbmIoc2NoLT5pb2Jhc2UgKyBvZmZzZXQpOwogCWlmIChjdXJyX2RpcnMgJiAoMSA8PCBiaXQpKQotCQlvdXRiKGN1cnJfZGlycyAmIH4oMSA8PCBiaXQpLCBncGlvX2JhICsgb2Zmc2V0KTsKKwkJb3V0YihjdXJyX2RpcnMgJiB+KDEgPDwgYml0KSwgc2NoLT5pb2Jhc2UgKyBvZmZzZXQpOwogCi0Jc3Bpbl91bmxvY2soJmdwaW9fbG9jayk7CisJc3Bpbl91bmxvY2soJnNjaC0+bG9jayk7CiAKIAkvKgogCSAqIGFjY29yZGluZyB0byB0aGUgZGF0YXNoZWV0LCB3cml0aW5nIHRvIHRoZSBsZXZlbCByZWdpc3RlciBoYXMgbm8KQEAgLTExNywyMDIgKzE2Miw4OCBAQAogCSAqIEJ1dCB3ZSBjYW5ub3QgcHJldmVudCBhIHNob3J0IGxvdyBwdWxzZSBpZiBkaXJlY3Rpb24gaXMgc2V0IHRvIGhpZ2gKIAkgKiBhbmQgYW4gZXh0ZXJuYWwgcHVsbC11cCBpcyBjb25uZWN0ZWQuCiAJICovCi0Jc2NoX2dwaW9fY29yZV9zZXQoZ2MsIGdwaW9fbnVtLCB2YWwpOworCXNjaF9ncGlvX3NldChnYywgZ3Bpb19udW0sIHZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHNjaF9ncGlvX2NvcmUgPSB7Ci0JLmxhYmVsCQkJPSAic2NoX2dwaW9fY29yZSIsCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBzY2hfZ3Bpb19jaGlwID0geworCS5sYWJlbAkJCT0gInNjaF9ncGlvIiwKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5kaXJlY3Rpb25faW5wdXQJPSBzY2hfZ3Bpb19jb3JlX2RpcmVjdGlvbl9pbiwKLQkuZ2V0CQkJPSBzY2hfZ3Bpb19jb3JlX2dldCwKLQkuZGlyZWN0aW9uX291dHB1dAk9IHNjaF9ncGlvX2NvcmVfZGlyZWN0aW9uX291dCwKLQkuc2V0CQkJPSBzY2hfZ3Bpb19jb3JlX3NldCwKLX07Ci0KLXN0YXRpYyBpbnQgc2NoX2dwaW9fcmVzdW1lX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKLQkJCQkJdW5zaWduZWQgZ3Bpb19udW0pCi17Ci0JdTggY3Vycl9kaXJzOwotCXVuc2lnbmVkIHNob3J0IG9mZnNldCwgYml0OwotCi0Jc3Bpbl9sb2NrKCZncGlvX2xvY2spOwotCi0Jb2Zmc2V0ID0gUkdJTyArIGdwaW9fbnVtIC8gODsKLQliaXQgPSBncGlvX251bSAlIDg7Ci0KLQljdXJyX2RpcnMgPSBpbmIoZ3Bpb19iYSArIG9mZnNldCk7Ci0KLQlpZiAoIShjdXJyX2RpcnMgJiAoMSA8PCBiaXQpKSkKLQkJb3V0YihjdXJyX2RpcnMgfCAoMSA8PCBiaXQpLCBncGlvX2JhICsgb2Zmc2V0KTsKLQotCXNwaW5fdW5sb2NrKCZncGlvX2xvY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNjaF9ncGlvX3Jlc3VtZV9nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW9fbnVtKQotewotCXVuc2lnbmVkIHNob3J0IG9mZnNldCwgYml0OwotCi0Jb2Zmc2V0ID0gUkdMViArIGdwaW9fbnVtIC8gODsKLQliaXQgPSBncGlvX251bSAlIDg7Ci0KLQlyZXR1cm4gISEoaW5iKGdwaW9fYmEgKyBvZmZzZXQpICYgKDEgPDwgYml0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjaF9ncGlvX3Jlc3VtZV9zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsCi0JCQkJdW5zaWduZWQgZ3Bpb19udW0sIGludCB2YWwpCi17Ci0JdTggY3Vycl92YWxzOwotCXVuc2lnbmVkIHNob3J0IG9mZnNldCwgYml0OwotCi0Jc3Bpbl9sb2NrKCZncGlvX2xvY2spOwotCi0Jb2Zmc2V0ID0gUkdMViArIGdwaW9fbnVtIC8gODsKLQliaXQgPSBncGlvX251bSAlIDg7Ci0KLQljdXJyX3ZhbHMgPSBpbmIoZ3Bpb19iYSArIG9mZnNldCk7Ci0KLQlpZiAodmFsKQotCQlvdXRiKGN1cnJfdmFscyB8ICgxIDw8IGJpdCksIGdwaW9fYmEgKyBvZmZzZXQpOwotCWVsc2UKLQkJb3V0YigoY3Vycl92YWxzICYgfigxIDw8IGJpdCkpLCBncGlvX2JhICsgb2Zmc2V0KTsKLQotCXNwaW5fdW5sb2NrKCZncGlvX2xvY2spOwotfQotCi1zdGF0aWMgaW50IHNjaF9ncGlvX3Jlc3VtZV9kaXJlY3Rpb25fb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLAotCQkJCQl1bnNpZ25lZCBncGlvX251bSwgaW50IHZhbCkKLXsKLQl1OCBjdXJyX2RpcnM7Ci0JdW5zaWduZWQgc2hvcnQgb2Zmc2V0LCBiaXQ7Ci0KLQlvZmZzZXQgPSBSR0lPICsgZ3Bpb19udW0gLyA4OwotCWJpdCA9IGdwaW9fbnVtICUgODsKLQotCXNwaW5fbG9jaygmZ3Bpb19sb2NrKTsKLQotCWN1cnJfZGlycyA9IGluYihncGlvX2JhICsgb2Zmc2V0KTsKLQlpZiAoY3Vycl9kaXJzICYgKDEgPDwgYml0KSkKLQkJb3V0YihjdXJyX2RpcnMgJiB+KDEgPDwgYml0KSwgZ3Bpb19iYSArIG9mZnNldCk7Ci0KLQlzcGluX3VubG9jaygmZ3Bpb19sb2NrKTsKLQotCS8qCi0JKiBhY2NvcmRpbmcgdG8gdGhlIGRhdGFzaGVldCwgd3JpdGluZyB0byB0aGUgbGV2ZWwgcmVnaXN0ZXIgaGFzIG5vCi0JKiBlZmZlY3Qgd2hlbiBHUElPIGlzIHByb2dyYW1tZWQgYXMgaW5wdXQuCi0JKiBBY3R1YWxseSB0aGUgdGhlIGxldmVsIHJlZ2lzdGVyIGlzIHJlYWQtb25seSB3aGVuIGNvbmZpZ3VyZWQgYXMgaW5wdXQuCi0JKiBUaHVzIHByZXNldHRpbmcgdGhlIG91dHB1dCBsZXZlbCBiZWZvcmUgc3dpdGNoaW5nIHRvIG91dHB1dCBpcyBfTk9UXyBwb3NzaWJsZS4KLQkqIEhlbmNlIHdlIHNldCB0aGUgbGV2ZWwgYWZ0ZXIgY29uZmlndXJpbmcgdGhlIEdQSU8gYXMgb3V0cHV0LgotCSogQnV0IHdlIGNhbm5vdCBwcmV2ZW50IGEgc2hvcnQgbG93IHB1bHNlIGlmIGRpcmVjdGlvbiBpcyBzZXQgdG8gaGlnaAotCSogYW5kIGFuIGV4dGVybmFsIHB1bGwtdXAgaXMgY29ubmVjdGVkLgotCSovCi0Jc2NoX2dwaW9fcmVzdW1lX3NldChnYywgZ3Bpb19udW0sIHZhbCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHNjaF9ncGlvX3Jlc3VtZSA9IHsKLQkubGFiZWwJCQk9ICJzY2hfZ3Bpb19yZXN1bWUiLAotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLmRpcmVjdGlvbl9pbnB1dAk9IHNjaF9ncGlvX3Jlc3VtZV9kaXJlY3Rpb25faW4sCi0JLmdldAkJCT0gc2NoX2dwaW9fcmVzdW1lX2dldCwKLQkuZGlyZWN0aW9uX291dHB1dAk9IHNjaF9ncGlvX3Jlc3VtZV9kaXJlY3Rpb25fb3V0LAotCS5zZXQJCQk9IHNjaF9ncGlvX3Jlc3VtZV9zZXQsCisJLmRpcmVjdGlvbl9pbnB1dAk9IHNjaF9ncGlvX2RpcmVjdGlvbl9pbiwKKwkuZ2V0CQkJPSBzY2hfZ3Bpb19nZXQsCisJLmRpcmVjdGlvbl9vdXRwdXQJPSBzY2hfZ3Bpb19kaXJlY3Rpb25fb3V0LAorCS5zZXQJCQk9IHNjaF9ncGlvX3NldCwKIH07CiAKIHN0YXRpYyBpbnQgc2NoX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3Qgc2NoX2dwaW8gKnNjaDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlpbnQgZXJyLCBpZDsKIAotCWlkID0gcGRldi0+aWQ7Ci0JaWYgKCFpZCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJc2NoID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqc2NoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzY2gpCisJCXJldHVybiAtRU5PTUVNOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwogCWlmICghcmVzKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKQorCWlmICghZGV2bV9yZXF1ZXN0X3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCisJCQkJIHBkZXYtPm5hbWUpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JZ3Bpb19iYSA9IHJlcy0+c3RhcnQ7CisJc3Bpbl9sb2NrX2luaXQoJnNjaC0+bG9jayk7CisJc2NoLT5pb2Jhc2UgPSByZXMtPnN0YXJ0OworCXNjaC0+Y2hpcCA9IHNjaF9ncGlvX2NoaXA7CisJc2NoLT5jaGlwLmxhYmVsID0gZGV2X25hbWUoJnBkZXYtPmRldik7CisJc2NoLT5jaGlwLmRldiA9ICZwZGV2LT5kZXY7CiAKLQlzd2l0Y2ggKGlkKSB7CisJc3dpdGNoIChwZGV2LT5pZCkgewogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9TQ0hfTFBDOgotCQlzY2hfZ3Bpb19jb3JlLmJhc2UgPSAwOwotCQlzY2hfZ3Bpb19jb3JlLm5ncGlvID0gMTA7Ci0JCXNjaF9ncGlvX3Jlc3VtZS5iYXNlID0gMTA7Ci0JCXNjaF9ncGlvX3Jlc3VtZS5uZ3BpbyA9IDQ7CisJCXNjaC0+Y29yZV9iYXNlID0gMDsKKwkJc2NoLT5yZXN1bWVfYmFzZSA9IDEwOworCQlzY2gtPmNoaXAubmdwaW8gPSAxNDsKKwogCQkvKgogCQkgKiBHUElPWzY6MF0gZW5hYmxlZCBieSBkZWZhdWx0CiAJCSAqIEdQSU83IGlzIGNvbmZpZ3VyZWQgYnkgdGhlIENNQyBhcyBTTFBJT1ZSCiAJCSAqIEVuYWJsZSBHUElPWzk6OF0gY29yZSBwb3dlcmVkIGdwaW9zIGV4cGxpY2l0bHkKIAkJICovCi0JCW91dGIoMHgzLCBncGlvX2JhICsgQ0dFTiArIDEpOworCQlzY2hfZ3Bpb19lbmFibGUoc2NoLCA4KTsKKwkJc2NoX2dwaW9fZW5hYmxlKHNjaCwgOSk7CiAJCS8qCiAJCSAqIFNVU19HUElPWzI6MF0gZW5hYmxlZCBieSBkZWZhdWx0CiAJCSAqIEVuYWJsZSBTVVNfR1BJTzMgcmVzdW1lIHBvd2VyZWQgZ3BpbyBleHBsaWNpdGx5CiAJCSAqLwotCQlvdXRiKDB4OCwgZ3Bpb19iYSArIFJHRU4pOworCQlzY2hfZ3Bpb19lbmFibGUoc2NoLCAxMyk7CiAJCWJyZWFrOwogCiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lUQ19MUEM6Ci0JCXNjaF9ncGlvX2NvcmUuYmFzZSA9IDA7Ci0JCXNjaF9ncGlvX2NvcmUubmdwaW8gPSA1OwotCQlzY2hfZ3Bpb19yZXN1bWUuYmFzZSA9IDU7Ci0JCXNjaF9ncGlvX3Jlc3VtZS5uZ3BpbyA9IDk7CisJCXNjaC0+Y29yZV9iYXNlID0gMDsKKwkJc2NoLT5yZXN1bWVfYmFzZSA9IDU7CisJCXNjaC0+Y2hpcC5uZ3BpbyA9IDE0OwogCQlicmVhazsKIAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9DRU5URVJUT05fSUxCOgotCQlzY2hfZ3Bpb19jb3JlLmJhc2UgPSAwOwotCQlzY2hfZ3Bpb19jb3JlLm5ncGlvID0gMjE7Ci0JCXNjaF9ncGlvX3Jlc3VtZS5iYXNlID0gMjE7Ci0JCXNjaF9ncGlvX3Jlc3VtZS5uZ3BpbyA9IDk7CisJCXNjaC0+Y29yZV9iYXNlID0gMDsKKwkJc2NoLT5yZXN1bWVfYmFzZSA9IDIxOworCQlzY2gtPmNoaXAubmdwaW8gPSAzMDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycl9zY2hfZ3Bpb19jb3JlOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlzY2hfZ3Bpb19jb3JlLmRldiA9ICZwZGV2LT5kZXY7Ci0Jc2NoX2dwaW9fcmVzdW1lLmRldiA9ICZwZGV2LT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2NoKTsKIAotCWVyciA9IGdwaW9jaGlwX2FkZCgmc2NoX2dwaW9fY29yZSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyX3NjaF9ncGlvX2NvcmU7Ci0KLQllcnIgPSBncGlvY2hpcF9hZGQoJnNjaF9ncGlvX3Jlc3VtZSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyX3NjaF9ncGlvX3Jlc3VtZTsKLQotCXJldHVybiAwOwotCi1lcnJfc2NoX2dwaW9fcmVzdW1lOgotCWdwaW9jaGlwX3JlbW92ZSgmc2NoX2dwaW9fY29yZSk7Ci0KLWVycl9zY2hfZ3Bpb19jb3JlOgotCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0JZ3Bpb19iYSA9IDA7Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBncGlvY2hpcF9hZGQoJnNjaC0+Y2hpcCk7CiB9CiAKIHN0YXRpYyBpbnQgc2NoX2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaWYgKGdwaW9fYmEpIHsKKwlzdHJ1Y3Qgc2NoX2dwaW8gKnNjaCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JCWdwaW9jaGlwX3JlbW92ZSgmc2NoX2dwaW9fY29yZSk7Ci0JCWdwaW9jaGlwX3JlbW92ZSgmc2NoX2dwaW9fcmVzdW1lKTsKLQotCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7Ci0KLQkJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLQkJZ3Bpb19iYSA9IDA7Ci0JfQotCisJZ3Bpb2NoaXBfcmVtb3ZlKCZzY2gtPmNoaXApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby10YzM1ODl4LmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby10YzM1ODl4LmMKaW5kZXggYWUwZjY0Ni4uYWJkY2Y1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tdGMzNTg5eC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXRjMzU4OXguYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJdGMzNTg5eF9ncGlvLT5jaGlwID0gdGVtcGxhdGVfY2hpcDsKIAl0YzM1ODl4X2dwaW8tPmNoaXAubmdwaW8gPSB0YzM1ODl4LT5udW1fZ3BpbzsKIAl0YzM1ODl4X2dwaW8tPmNoaXAuZGV2ID0gJnBkZXYtPmRldjsKLQl0YzM1ODl4X2dwaW8tPmNoaXAuYmFzZSA9IChwZGF0YSkgPyBwZGF0YS0+Z3Bpb19iYXNlIDogLTE7CisJdGMzNTg5eF9ncGlvLT5jaGlwLmJhc2UgPSAtMTsKIAogI2lmZGVmIENPTkZJR19PRl9HUElPCiAJdGMzNTg5eF9ncGlvLT5jaGlwLm9mX25vZGUgPSBucDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXp5bnEuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXp5bnEuYwppbmRleCA3NGNkNDgwLi4xODRjNGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby16eW5xLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tenlucS5jCkBAIC01NzgsNyArNTc4LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHp5bnFfZ3Bpb19kZXZfcG1fb3BzID0gewogCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHp5bnFfZ3Bpb19zdXNwZW5kLCB6eW5xX2dwaW9fcmVzdW1lKQotCVNFVF9QTV9SVU5USU1FX1BNX09QUyh6eW5xX2dwaW9fcnVudGltZV9zdXNwZW5kLAorCVNFVF9SVU5USU1FX1BNX09QUyh6eW5xX2dwaW9fcnVudGltZV9zdXNwZW5kLAogCQkJenlucV9ncGlvX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWItYWNwaS5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWItYWNwaS5jCmluZGV4IDA1YzYyNzUuLmJhOThiYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLWFjcGkuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1hY3BpLmMKQEAgLTI4Nyw5ICsyODcsNDUgQEAKIAl9CiB9CiAKK2ludCBhY3BpX2Rldl9hZGRfZHJpdmVyX2dwaW9zKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBhY3BpX2dwaW9fbWFwcGluZyAqZ3Bpb3MpCit7CisJaWYgKGFkZXYgJiYgZ3Bpb3MpIHsKKwkJYWRldi0+ZHJpdmVyX2dwaW9zID0gZ3Bpb3M7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFjcGlfZGV2X2FkZF9kcml2ZXJfZ3Bpb3MpOworCitzdGF0aWMgYm9vbCBhY3BpX2dldF9kcml2ZXJfZ3Bpb19kYXRhKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwKKwkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgaW5kZXgsCisJCQkJICAgICAgc3RydWN0IGFjcGlfcmVmZXJlbmNlX2FyZ3MgKmFyZ3MpCit7CisJY29uc3Qgc3RydWN0IGFjcGlfZ3Bpb19tYXBwaW5nICpnbTsKKworCWlmICghYWRldi0+ZHJpdmVyX2dwaW9zKQorCQlyZXR1cm4gZmFsc2U7CisKKwlmb3IgKGdtID0gYWRldi0+ZHJpdmVyX2dwaW9zOyBnbS0+bmFtZTsgZ20rKykKKwkJaWYgKCFzdHJjbXAobmFtZSwgZ20tPm5hbWUpICYmIGdtLT5kYXRhICYmIGluZGV4IDwgZ20tPnNpemUpIHsKKwkJCWNvbnN0IHN0cnVjdCBhY3BpX2dwaW9fcGFyYW1zICpwYXIgPSBnbS0+ZGF0YSArIGluZGV4OworCisJCQlhcmdzLT5hZGV2ID0gYWRldjsKKwkJCWFyZ3MtPmFyZ3NbMF0gPSBwYXItPmNyc19lbnRyeV9pbmRleDsKKwkJCWFyZ3MtPmFyZ3NbMV0gPSBwYXItPmxpbmVfaW5kZXg7CisJCQlhcmdzLT5hcmdzWzJdID0gcGFyLT5hY3RpdmVfbG93OworCQkJYXJncy0+bmFyZ3MgPSAzOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogc3RydWN0IGFjcGlfZ3Bpb19sb29rdXAgewogCXN0cnVjdCBhY3BpX2dwaW9faW5mbyBpbmZvOwogCWludCBpbmRleDsKKwlpbnQgcGluX2luZGV4OwogCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2M7CiAJaW50IG47CiB9OwpAQCAtMzAzLDEzICszMzksMjQgQEAKIAogCWlmIChsb29rdXAtPm4rKyA9PSBsb29rdXAtPmluZGV4ICYmICFsb29rdXAtPmRlc2MpIHsKIAkJY29uc3Qgc3RydWN0IGFjcGlfcmVzb3VyY2VfZ3BpbyAqYWdwaW8gPSAmYXJlcy0+ZGF0YS5ncGlvOworCQlpbnQgcGluX2luZGV4ID0gbG9va3VwLT5waW5faW5kZXg7CisKKwkJaWYgKHBpbl9pbmRleCA+PSBhZ3Bpby0+cGluX3RhYmxlX2xlbmd0aCkKKwkJCXJldHVybiAxOwogCiAJCWxvb2t1cC0+ZGVzYyA9IGFjcGlfZ2V0X2dwaW9kKGFncGlvLT5yZXNvdXJjZV9zb3VyY2Uuc3RyaW5nX3B0ciwKLQkJCQkJICAgICAgYWdwaW8tPnBpbl90YWJsZVswXSk7CisJCQkJCSAgICAgIGFncGlvLT5waW5fdGFibGVbcGluX2luZGV4XSk7CiAJCWxvb2t1cC0+aW5mby5ncGlvaW50ID0KIAkJCWFncGlvLT5jb25uZWN0aW9uX3R5cGUgPT0gQUNQSV9SRVNPVVJDRV9HUElPX1RZUEVfSU5UOwotCQlsb29rdXAtPmluZm8uYWN0aXZlX2xvdyA9Ci0JCQlhZ3Bpby0+cG9sYXJpdHkgPT0gQUNQSV9BQ1RJVkVfTE9XOworCisJCS8qCisJCSAqIEFjdGl2ZUxvdyBpcyBvbmx5IHNwZWNpZmllZCBmb3IgR3Bpb0ludCByZXNvdXJjZS4gSWYKKwkJICogR3Bpb0lvIGlzIHVzZWQgdGhlbiB0aGUgb25seSB3YXkgdG8gc2V0IHRoZSBmbGFnIGlzCisJCSAqIHRvIHVzZSBfRFNEICJncGlvcyIgcHJvcGVydHkuCisJCSAqLworCQlpZiAobG9va3VwLT5pbmZvLmdwaW9pbnQpCisJCQlsb29rdXAtPmluZm8uYWN0aXZlX2xvdyA9CisJCQkJYWdwaW8tPnBvbGFyaXR5ID09IEFDUElfQUNUSVZFX0xPVzsKIAl9CiAKIAlyZXR1cm4gMTsKQEAgLTMxNyw0MCArMzY0LDc5IEBACiAKIC8qKgogICogYWNwaV9nZXRfZ3Bpb2RfYnlfaW5kZXgoKSAtIGdldCBhIEdQSU8gZGVzY3JpcHRvciBmcm9tIGRldmljZSByZXNvdXJjZXMKLSAqIEBkZXY6IHBvaW50ZXIgdG8gYSBkZXZpY2UgdG8gZ2V0IEdQSU8gZnJvbQorICogQGFkZXY6IHBvaW50ZXIgdG8gYSBBQ1BJIGRldmljZSB0byBnZXQgR1BJTyBmcm9tCisgKiBAcHJvcG5hbWU6IFByb3BlcnR5IG5hbWUgb2YgdGhlIEdQSU8gKG9wdGlvbmFsKQogICogQGluZGV4OiBpbmRleCBvZiBHcGlvSW8vR3Bpb0ludCByZXNvdXJjZSAoc3RhcnRpbmcgZnJvbSAlMCkKICAqIEBpbmZvOiBpbmZvIHBvaW50ZXIgdG8gZmlsbCBpbiAob3B0aW9uYWwpCiAgKgotICogRnVuY3Rpb24gZ29lcyB0aHJvdWdoIEFDUEkgcmVzb3VyY2VzIGZvciBAZGV2IGFuZCBiYXNlZCBvbiBAaW5kZXggbG9va3MKKyAqIEZ1bmN0aW9uIGdvZXMgdGhyb3VnaCBBQ1BJIHJlc291cmNlcyBmb3IgQGFkZXYgYW5kIGJhc2VkIG9uIEBpbmRleCBsb29rcwogICogdXAgYSBHcGlvSW8vR3Bpb0ludCByZXNvdXJjZSwgdHJhbnNsYXRlcyBpdCB0byB0aGUgTGludXggR1BJTyBkZXNjcmlwdG9yLAogICogYW5kIHJldHVybnMgaXQuIEBpbmRleCBtYXRjaGVzIEdwaW9Jby9HcGlvSW50IHJlc291cmNlcyBvbmx5IHNvIGlmIHRoZXJlCiAgKiBhcmUgdG90YWwgJTMgR1BJTyByZXNvdXJjZXMsIHRoZSBpbmRleCBnb2VzIGZyb20gJTAgdG8gJTIuCiAgKgorICogSWYgQHByb3BuYW1lIGlzIHNwZWNpZmllZCB0aGUgR1BJTyBpcyBsb29rZWQgdXNpbmcgZGV2aWNlIHByb3BlcnR5LiBJbgorICogdGhhdCBjYXNlIEBpbmRleCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgR1BJTyBlbnRyeSBpbiB0aGUgcHJvcGVydHkgdmFsdWUKKyAqIChpbiBjYXNlIG9mIG11bHRpcGxlKS4KKyAqCiAgKiBJZiB0aGUgR1BJTyBjYW5ub3QgYmUgdHJhbnNsYXRlZCBvciB0aGVyZSBpcyBhbiBlcnJvciBhbiBFUlJfUFRSIGlzCiAgKiByZXR1cm5lZC4KICAqCiAgKiBOb3RlOiBpZiB0aGUgR1BJTyByZXNvdXJjZSBoYXMgbXVsdGlwbGUgZW50cmllcyBpbiB0aGUgcGluIGxpc3QsIHRoaXMKICAqIGZ1bmN0aW9uIG9ubHkgcmV0dXJucyB0aGUgZmlyc3QuCiAgKi8KLXN0cnVjdCBncGlvX2Rlc2MgKmFjcGlfZ2V0X2dwaW9kX2J5X2luZGV4KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGluZGV4LAorc3RydWN0IGdwaW9fZGVzYyAqYWNwaV9nZXRfZ3Bpb2RfYnlfaW5kZXgoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAorCQkJCQkgIGNvbnN0IGNoYXIgKnByb3BuYW1lLCBpbnQgaW5kZXgsCiAJCQkJCSAgc3RydWN0IGFjcGlfZ3Bpb19pbmZvICppbmZvKQogewogCXN0cnVjdCBhY3BpX2dwaW9fbG9va3VwIGxvb2t1cDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlX2xpc3Q7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICphZGV2OwotCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwlib29sIGFjdGl2ZV9sb3cgPSBmYWxzZTsKIAlpbnQgcmV0OwogCi0JaWYgKCFkZXYpCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCi0JaGFuZGxlID0gQUNQSV9IQU5ETEUoZGV2KTsKLQlpZiAoIWhhbmRsZSB8fCBhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmFkZXYpKQorCWlmICghYWRldikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiAKIAltZW1zZXQoJmxvb2t1cCwgMCwgc2l6ZW9mKGxvb2t1cCkpOwogCWxvb2t1cC5pbmRleCA9IGluZGV4OwogCisJaWYgKHByb3BuYW1lKSB7CisJCXN0cnVjdCBhY3BpX3JlZmVyZW5jZV9hcmdzIGFyZ3M7CisKKwkJZGV2X2RiZygmYWRldi0+ZGV2LCAiR1BJTzogbG9va2luZyB1cCAlc1xuIiwgcHJvcG5hbWUpOworCisJCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwkJcmV0ID0gYWNwaV9kZXZfZ2V0X3Byb3BlcnR5X3JlZmVyZW5jZShhZGV2LCBwcm9wbmFtZSwKKwkJCQkJCSAgICAgIGluZGV4LCAmYXJncyk7CisJCWlmIChyZXQpIHsKKwkJCWJvb2wgZm91bmQgPSBhY3BpX2dldF9kcml2ZXJfZ3Bpb19kYXRhKGFkZXYsIHByb3BuYW1lLAorCQkJCQkJCSAgICAgICBpbmRleCwgJmFyZ3MpOworCQkJaWYgKCFmb3VuZCkKKwkJCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCQl9CisKKwkJLyoKKwkJICogVGhlIHByb3BlcnR5IHdhcyBmb3VuZCBhbmQgcmVzb2x2ZWQgc28gbmVlZCB0bworCQkgKiBsb29rdXAgdGhlIEdQSU8gYmFzZWQgb24gcmV0dXJuZWQgYXJncyBpbnN0ZWFkLgorCQkgKi8KKwkJYWRldiA9IGFyZ3MuYWRldjsKKwkJaWYgKGFyZ3MubmFyZ3MgPj0gMikgeworCQkJbG9va3VwLmluZGV4ID0gYXJncy5hcmdzWzBdOworCQkJbG9va3VwLnBpbl9pbmRleCA9IGFyZ3MuYXJnc1sxXTsKKwkJCS8qCisJCQkgKiAzcmQgYXJndW1lbnQsIGlmIHByZXNlbnQgaXMgdXNlZCB0bworCQkJICogc3BlY2lmeSBhY3RpdmVfbG93LgorCQkJICovCisJCQlpZiAoYXJncy5uYXJncyA+PSAzKQorCQkJCWFjdGl2ZV9sb3cgPSAhIWFyZ3MuYXJnc1syXTsKKwkJfQorCisJCWRldl9kYmcoJmFkZXYtPmRldiwgIkdQSU86IF9EU0QgcmV0dXJuZWQgJXMgJXpkICVsbHUgJWxsdSAlbGx1XG4iLAorCQkJZGV2X25hbWUoJmFkZXYtPmRldiksIGFyZ3MubmFyZ3MsCisJCQlhcmdzLmFyZ3NbMF0sIGFyZ3MuYXJnc1sxXSwgYXJncy5hcmdzWzJdKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKCZhZGV2LT5kZXYsICJHUElPOiBsb29raW5nIHVwICVkIGluIF9DUlNcbiIsIGluZGV4KTsKKwl9CisKIAlJTklUX0xJU1RfSEVBRCgmcmVzb3VyY2VfbGlzdCk7CiAJcmV0ID0gYWNwaV9kZXZfZ2V0X3Jlc291cmNlcyhhZGV2LCAmcmVzb3VyY2VfbGlzdCwgYWNwaV9maW5kX2dwaW8sCiAJCQkJICAgICAmbG9va3VwKTsKQEAgLTM1OSw4ICs0NDUsMTEgQEAKIAogCWFjcGlfZGV2X2ZyZWVfcmVzb3VyY2VfbGlzdCgmcmVzb3VyY2VfbGlzdCk7CiAKLQlpZiAobG9va3VwLmRlc2MgJiYgaW5mbykKKwlpZiAobG9va3VwLmRlc2MgJiYgaW5mbykgewogCQkqaW5mbyA9IGxvb2t1cC5pbmZvOworCQlpZiAoYWN0aXZlX2xvdykKKwkJCWluZm8tPmFjdGl2ZV9sb3cgPSBhY3RpdmVfbG93OworCX0KIAogCXJldHVybiBsb29rdXAuZGVzYyA/IGxvb2t1cC5kZXNjIDogRVJSX1BUUigtRU5PRU5UKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IGU4ZTk4Y2EuLjU4NjU5ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtMTUwNSwxNCArMTUwNSwzNiBAQAogCQkJCQl1bnNpZ25lZCBpbnQgaWR4LAogCQkJCQllbnVtIGdwaW9fbG9va3VwX2ZsYWdzICpmbGFncykKIHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN1ZmZpeGVzW10gPSB7ICJncGlvcyIsICJncGlvIiB9OworCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldiA9IEFDUElfQ09NUEFOSU9OKGRldik7CiAJc3RydWN0IGFjcGlfZ3Bpb19pbmZvIGluZm87CiAJc3RydWN0IGdwaW9fZGVzYyAqZGVzYzsKKwljaGFyIHByb3BuYW1lWzMyXTsKKwlpbnQgaTsKIAotCWRlc2MgPSBhY3BpX2dldF9ncGlvZF9ieV9pbmRleChkZXYsIGlkeCwgJmluZm8pOwotCWlmIChJU19FUlIoZGVzYykpCi0JCXJldHVybiBkZXNjOworCS8qIFRyeSBmaXJzdCBmcm9tIF9EU0QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdWZmaXhlcyk7IGkrKykgeworCQlpZiAoY29uX2lkICYmIHN0cmNtcChjb25faWQsICJncGlvcyIpKSB7CisJCQlzbnByaW50Zihwcm9wbmFtZSwgc2l6ZW9mKHByb3BuYW1lKSwgIiVzLSVzIiwKKwkJCQkgY29uX2lkLCBzdWZmaXhlc1tpXSk7CisJCX0gZWxzZSB7CisJCQlzbnByaW50Zihwcm9wbmFtZSwgc2l6ZW9mKHByb3BuYW1lKSwgIiVzIiwKKwkJCQkgc3VmZml4ZXNbaV0pOworCQl9CiAKLQlpZiAoaW5mby5ncGlvaW50ICYmIGluZm8uYWN0aXZlX2xvdykKKwkJZGVzYyA9IGFjcGlfZ2V0X2dwaW9kX2J5X2luZGV4KGFkZXYsIHByb3BuYW1lLCBpZHgsICZpbmZvKTsKKwkJaWYgKCFJU19FUlIoZGVzYykgfHwgKFBUUl9FUlIoZGVzYykgPT0gLUVQUk9CRV9ERUZFUikpCisJCQlicmVhazsKKwl9CisKKwkvKiBUaGVuIGZyb20gcGxhaW4gX0NSUyBHUElPcyAqLworCWlmIChJU19FUlIoZGVzYykpIHsKKwkJZGVzYyA9IGFjcGlfZ2V0X2dwaW9kX2J5X2luZGV4KGFkZXYsIE5VTEwsIGlkeCwgJmluZm8pOworCQlpZiAoSVNfRVJSKGRlc2MpKQorCQkJcmV0dXJuIGRlc2M7CisJfQorCisJaWYgKGluZm8uYWN0aXZlX2xvdykKIAkJKmZsYWdzIHw9IEdQSU9fQUNUSVZFX0xPVzsKIAogCXJldHVybiBkZXNjOwpAQCAtMTcxMyw2ICsxNzM1LDYxIEBACiBFWFBPUlRfU1lNQk9MX0dQTChfX2dwaW9kX2dldF9pbmRleCk7CiAKIC8qKgorICogZndub2RlX2dldF9uYW1lZF9ncGlvZCAtIG9idGFpbiBhIEdQSU8gZnJvbSBmaXJtd2FyZSBub2RlCisgKiBAZndub2RlOgloYW5kbGUgb2YgdGhlIGZpcm13YXJlIG5vZGUKKyAqIEBwcm9wbmFtZToJbmFtZSBvZiB0aGUgZmlybXdhcmUgcHJvcGVydHkgcmVwcmVzZW50aW5nIHRoZSBHUElPCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBmb3IgZHJpdmVycyB0aGF0IGdldCB0aGVpciBjb25maWd1cmF0aW9uCisgKiBmcm9tIGZpcm13YXJlLgorICoKKyAqIEZ1bmN0aW9uIHByb3Blcmx5IGZpbmRzIHRoZSBjb3JyZXNwb25kaW5nIEdQSU8gdXNpbmcgd2hhdGV2ZXIgaXMgdGhlCisgKiB1bmRlcmx5aW5nIGZpcm13YXJlIGludGVyZmFjZSBhbmQgdGhlbiBtYWtlcyBzdXJlIHRoYXQgdGhlIEdQSU8KKyAqIGRlc2NyaXB0b3IgaXMgcmVxdWVzdGVkIGJlZm9yZSBpdCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorICoKKyAqIEluIGNhc2Ugb2YgZXJyb3IgYW4gRVJSX1BUUigpIGlzIHJldHVybmVkLgorICovCitzdHJ1Y3QgZ3Bpb19kZXNjICpmd25vZGVfZ2V0X25hbWVkX2dwaW9kKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCisJCQkJCSBjb25zdCBjaGFyICpwcm9wbmFtZSkKK3sKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjID0gRVJSX1BUUigtRU5PREVWKTsKKwlib29sIGFjdGl2ZV9sb3cgPSBmYWxzZTsKKwlpbnQgcmV0OworCisJaWYgKCFmd25vZGUpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJaWYgKGlzX29mX25vZGUoZndub2RlKSkgeworCQllbnVtIG9mX2dwaW9fZmxhZ3MgZmxhZ3M7CisKKwkJZGVzYyA9IG9mX2dldF9uYW1lZF9ncGlvZF9mbGFncyhvZl9ub2RlKGZ3bm9kZSksIHByb3BuYW1lLCAwLAorCQkJCQkJJmZsYWdzKTsKKwkJaWYgKCFJU19FUlIoZGVzYykpCisJCQlhY3RpdmVfbG93ID0gZmxhZ3MgJiBPRl9HUElPX0FDVElWRV9MT1c7CisJfSBlbHNlIGlmIChpc19hY3BpX25vZGUoZndub2RlKSkgeworCQlzdHJ1Y3QgYWNwaV9ncGlvX2luZm8gaW5mbzsKKworCQlkZXNjID0gYWNwaV9nZXRfZ3Bpb2RfYnlfaW5kZXgoYWNwaV9ub2RlKGZ3bm9kZSksIHByb3BuYW1lLCAwLAorCQkJCQkgICAgICAgJmluZm8pOworCQlpZiAoIUlTX0VSUihkZXNjKSkKKwkJCWFjdGl2ZV9sb3cgPSBpbmZvLmFjdGl2ZV9sb3c7CisJfQorCisJaWYgKElTX0VSUihkZXNjKSkKKwkJcmV0dXJuIGRlc2M7CisKKwlyZXQgPSBncGlvZF9yZXF1ZXN0KGRlc2MsIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwkvKiBPbmx5IHZhbHVlIGZsYWcgY2FuIGJlIHNldCBmcm9tIGJvdGggRFQgYW5kIEFDUEkgaXMgYWN0aXZlX2xvdyAqLworCWlmIChhY3RpdmVfbG93KQorCQlzZXRfYml0KEZMQUdfQUNUSVZFX0xPVywgJmRlc2MtPmZsYWdzKTsKKworCXJldHVybiBkZXNjOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZndub2RlX2dldF9uYW1lZF9ncGlvZCk7CisKKy8qKgogICogZ3Bpb2RfZ2V0X2luZGV4X29wdGlvbmFsIC0gb2J0YWluIGFuIG9wdGlvbmFsIEdQSU8gZnJvbSBhIG11bHRpLWluZGV4IEdQSU8KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uCiAgKiBAZGV2OiBHUElPIGNvbnN1bWVyLCBjYW4gYmUgTlVMTCBmb3Igc3lzdGVtLWdsb2JhbCBHUElPcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWIuaCBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmgKaW5kZXggOWRiMmI2YS4uZTNhNTIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWIuaAorKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5oCkBAIC0zNCw3ICszNCw4IEBACiB2b2lkIGFjcGlfZ3Bpb2NoaXBfcmVxdWVzdF9pbnRlcnJ1cHRzKHN0cnVjdCBncGlvX2NoaXAgKmNoaXApOwogdm9pZCBhY3BpX2dwaW9jaGlwX2ZyZWVfaW50ZXJydXB0cyhzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKTsKIAotc3RydWN0IGdwaW9fZGVzYyAqYWNwaV9nZXRfZ3Bpb2RfYnlfaW5kZXgoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaW5kZXgsCitzdHJ1Y3QgZ3Bpb19kZXNjICphY3BpX2dldF9ncGlvZF9ieV9pbmRleChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYsCisJCQkJCSAgY29uc3QgY2hhciAqcHJvcG5hbWUsIGludCBpbmRleCwKIAkJCQkJICBzdHJ1Y3QgYWNwaV9ncGlvX2luZm8gKmluZm8pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2dwaW9jaGlwX2FkZChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKSB7IH0KQEAgLTQ3LDggKzQ4LDggQEAKIGFjcGlfZ3Bpb2NoaXBfZnJlZV9pbnRlcnJ1cHRzKHN0cnVjdCBncGlvX2NoaXAgKmNoaXApIHsgfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBncGlvX2Rlc2MgKgotYWNwaV9nZXRfZ3Bpb2RfYnlfaW5kZXgoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaW5kZXgsCi0JCQlzdHJ1Y3QgYWNwaV9ncGlvX2luZm8gKmluZm8pCithY3BpX2dldF9ncGlvZF9ieV9pbmRleChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYsIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJaW50IGluZGV4LCBzdHJ1Y3QgYWNwaV9ncGlvX2luZm8gKmluZm8pCiB7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtYWRhL2FybWFkYV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJtYWRhX2dlbS5jCmluZGV4IDc0OTZmNTUuLmVmNWZlZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJtYWRhX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJtYWRhX2dlbS5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAogCW9iai0+ZGV2X2FkZHIgPSBETUFfRVJST1JfQ09ERTsKIAotCW1hcHBpbmcgPSBvYmotPm9iai5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CisJbWFwcGluZyA9IGZpbGVfaW5vZGUob2JqLT5vYmouZmlscCktPmlfbWFwcGluZzsKIAltYXBwaW5nX3NldF9nZnBfbWFzayhtYXBwaW5nLCBHRlBfSElHSFVTRVIgfCBfX0dGUF9SRUNMQUlNQUJMRSk7CiAKIAlEUk1fREVCVUdfRFJJVkVSKCJhbGxvYyBvYmogJXAgc2l6ZSAlenVcbiIsIG9iaiwgc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZmltYy5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2ZpbWMuYwppbmRleCA2OGQzOGViLi44MzViNmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZmltYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9maW1jLmMKQEAgLTE4MTcsNyArMTgxNyw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGZpbWNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHggPSBnZXRfZmltY19jb250ZXh0KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMKaW5kZXggNmZmODU5OS4uODFhMjUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYwpAQCAtMTU0MCw3ICsxNTQwLDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgZzJkX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGcyZF9kYXRhICpnMmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nc2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nc2MuYwppbmRleCBjNmEwMTNmLi4wMjYxNDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ3NjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dzYy5jCkBAIC0xNzY0LDcgKzE3NjQsNyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBnc2NfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2NfY29udGV4dChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX3JvdGF0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9yb3RhdG9yLmMKaW5kZXggYjZhMzdkNC4uNDI1ZTcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX3JvdGF0b3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fcm90YXRvci5jCkBAIC04MjIsNyArODIyLDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgcm90YXRvcl9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCByb3RfY29udGV4dCAqcm90ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggOGJjZGI5OC4uOWNiNWM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtNDMyNSw3ICs0MzI1LDYgQEAKIAkJaXJvbmxha2VfZmRpX2Rpc2FibGUoY3J0Yyk7CiAKIAkJaXJvbmxha2VfZGlzYWJsZV9wY2hfdHJhbnNjb2RlcihkZXZfcHJpdiwgcGlwZSk7Ci0JCWludGVsX3NldF9wY2hfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2LCBwaXBlLCB0cnVlKTsKIAogCQlpZiAoSEFTX1BDSF9DUFQoZGV2KSkgewogCQkJLyogZGlzYWJsZSBUUkFOU19EUF9DVEwgKi8KQEAgLTQzODksNyArNDM4OCw2IEBACiAKIAlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLmhhc19wY2hfZW5jb2RlcikgewogCQlscHRfZGlzYWJsZV9wY2hfdHJhbnNjb2RlcihkZXZfcHJpdik7Ci0JCWludGVsX3NldF9wY2hfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2LCBUUkFOU0NPREVSX0EsIHRydWUpOwogCQlpbnRlbF9kZGlfZmRpX2Rpc2FibGUoY3J0Yyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggYTZiZDE0Mi4uYzBiYmYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtODk5LDYgKzg5OSwxNyBAQAogCWludCBwaXBlOwogCXU4IHBpbjsKIAorCS8qCisJICogVW5sb2NrIHJlZ2lzdGVycyBhbmQganVzdCBsZWF2ZSB0aGVtIHVubG9ja2VkLiBEbyB0aGlzIGJlZm9yZQorCSAqIGNoZWNraW5nIHF1aXJrIGxpc3RzIHRvIGF2b2lkIGJvZ3VzIFdBUk5JTkdzLgorCSAqLworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKKwkJSTkxNV9XUklURShQQ0hfUFBfQ09OVFJPTCwKKwkJCSAgIEk5MTVfUkVBRChQQ0hfUFBfQ09OVFJPTCkgfCBQQU5FTF9VTkxPQ0tfUkVHUyk7CisJfSBlbHNlIHsKKwkJSTkxNV9XUklURShQUF9DT05UUk9MLAorCQkJICAgSTkxNV9SRUFEKFBQX0NPTlRST0wpIHwgUEFORUxfVU5MT0NLX1JFR1MpOworCX0KIAlpZiAoIWludGVsX2x2ZHNfc3VwcG9ydGVkKGRldikpCiAJCXJldHVybjsKIApAQCAtMTA5NywxNyArMTEwOCw2IEBACiAJbHZkc19lbmNvZGVyLT5hM19wb3dlciA9IEk5MTVfUkVBRChsdmRzX2VuY29kZXItPnJlZykgJgogCQkJCSBMVkRTX0EzX1BPV0VSX01BU0s7CiAKLQkvKgotCSAqIFVubG9jayByZWdpc3RlcnMgYW5kIGp1c3QKLQkgKiBsZWF2ZSB0aGVtIHVubG9ja2VkCi0JICovCi0JaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewotCQlJOTE1X1dSSVRFKFBDSF9QUF9DT05UUk9MLAotCQkJICAgSTkxNV9SRUFEKFBDSF9QUF9DT05UUk9MKSB8IFBBTkVMX1VOTE9DS19SRUdTKTsKLQl9IGVsc2UgewotCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsCi0JCQkgICBJOTE1X1JFQUQoUFBfQ09OVFJPTCkgfCBQQU5FTF9VTkxPQ0tfUkVHUyk7Ci0JfQogCWx2ZHNfY29ubmVjdG9yLT5saWRfbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IGludGVsX2xpZF9ub3RpZnk7CiAJaWYgKGFjcGlfbGlkX25vdGlmaWVyX3JlZ2lzdGVyKCZsdmRzX2Nvbm5lY3Rvci0+bGlkX25vdGlmaWVyKSkgewogCQlEUk1fREVCVUdfS01TKCJsaWQgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9kZXZpY2UvbnZjMC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZGV2aWNlL252YzAuYwppbmRleCBjZDA1Njc3Li43MmE0MGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9kZXZpY2UvbnZjMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2RldmljZS9udmMwLmMKQEAgLTIxOCw3ICsyMTgsNiBAQAogCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfQlNQICAgIF0gPSAmbnZjMF9ic3Bfb2NsYXNzOwogCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfUFBQICAgIF0gPSAmbnZjMF9wcHBfb2NsYXNzOwogCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfQ09QWTAgIF0gPSAmbnZjMF9jb3B5MF9vY2xhc3M7Ci0JCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9DT1BZMSAgXSA9ICZudmMwX2NvcHkxX29jbGFzczsKIAkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5FX0RJU1AgICBdID0gIG52YTNfZGlzcF9vY2xhc3M7CiAJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lORV9QRVJGTU9OXSA9ICZudmMwX3BlcmZtb25fb2NsYXNzOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2NvcmUvZW5naW5lL2ZpZm8vbnYwNC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZmlmby9udjA0LmMKaW5kZXggNWFlNmE0My4uMTkzMTA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZmlmby9udjA0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZmlmby9udjA0LmMKQEAgLTU1MSw4ICs1NTEsOCBAQAogCQkJfQogCiAJCQlpZiAoc3RhdHVzICYgMHg0MDAwMDAwMCkgewotCQkJCW5vdXZlYXVfZmlmb191ZXZlbnQoJnByaXYtPmJhc2UpOwogCQkJCW52X3dyMzIocHJpdiwgMHgwMDIxMDAsIDB4NDAwMDAwMDApOworCQkJCW5vdXZlYXVfZmlmb191ZXZlbnQoJnByaXYtPmJhc2UpOwogCQkJCXN0YXR1cyAmPSB+MHg0MDAwMDAwMDsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZmlmby9udmMwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9maWZvL252YzAuYwppbmRleCAxZmUxZjhmLi4wNzRkNDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9maWZvL252YzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9maWZvL252YzAuYwpAQCAtNzQwLDYgKzc0MCw4IEBACiAJdTMyIGludGUgPSBudl9yZDMyKHByaXYsIDB4MDAyNjI4KTsKIAl1MzIgdW5rbjsKIAorCW52X3dyMzIocHJpdiwgMHgwMDI1YTggKyAoZW5nbiAqIDB4MDQpLCBpbnRyKTsKKwogCWZvciAodW5rbiA9IDA7IHVua24gPCA4OyB1bmtuKyspIHsKIAkJdTMyIGludHMgPSAoaW50ciA+PiAodW5rbiAqIDB4MDQpKSAmIGludGU7CiAJCWlmIChpbnRzICYgMHgxKSB7CkBAIC03NTEsOCArNzUzLDYgQEAKIAkJCW52X21hc2socHJpdiwgMHgwMDI2MjgsIGludHMsIDApOwogCQl9CiAJfQotCi0JbnZfd3IzMihwcml2LCAweDAwMjVhOCArIChlbmduICogMHgwNCksIGludHIpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZmlmby9udmUwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9jb3JlL2VuZ2luZS9maWZvL252ZTAuYwppbmRleCBkMmYwZmQzOS4uZjg3MzRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZmlmby9udmUwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvY29yZS9lbmdpbmUvZmlmby9udmUwLmMKQEAgLTk1Miw4ICs5NTIsOCBAQAogCX0KIAogCWlmIChzdGF0ICYgMHg4MDAwMDAwMCkgewotCQludmUwX2ZpZm9faW50cl9lbmdpbmUocHJpdik7CiAJCW52X3dyMzIocHJpdiwgMHgwMDIxMDAsIDB4ODAwMDAwMDApOworCQludmUwX2ZpZm9faW50cl9lbmdpbmUocHJpdik7CiAJCXN0YXQgJj0gfjB4ODAwMDAwMDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYwppbmRleCA1NzIzODA3Li42MmI5N2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMKQEAgLTYyOSw3ICs2MjksNiBAQAogCiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXBjaV9pZ25vcmVfaG90cGx1ZyhwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CiAJcmV0dXJuIDA7CiB9CkBAIC05MzMsNiArOTMyLDcgQEAKIAlyZXQgPSBub3V2ZWF1X2RvX3N1c3BlbmQoZHJtX2RldiwgdHJ1ZSk7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9pZ25vcmVfaG90cGx1ZyhwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2NvbGQpOwogCWRybV9kZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9XRVJfRFlOQU1JQ19PRkY7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuYwppbmRleCA1MTVjZDlhLi5mMzJhNDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jCkBAIC01MiwyMCArNTIsMjQgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGZlbmNlLT5iYXNlLmxvY2ssIHN0cnVjdCBub3V2ZWF1X2ZlbmNlX2NoYW4sIGxvY2spOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogbm91dmVhdV9mZW5jZV9zaWduYWwoc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlKQogeworCWludCBkcm9wID0gMDsKKwogCWZlbmNlX3NpZ25hbF9sb2NrZWQoJmZlbmNlLT5iYXNlKTsKIAlsaXN0X2RlbCgmZmVuY2UtPmhlYWQpOworCXJjdV9hc3NpZ25fcG9pbnRlcihmZW5jZS0+Y2hhbm5lbCwgTlVMTCk7CiAKIAlpZiAodGVzdF9iaXQoRkVOQ0VfRkxBR19VU0VSX0JJVFMsICZmZW5jZS0+YmFzZS5mbGFncykpIHsKIAkJc3RydWN0IG5vdXZlYXVfZmVuY2VfY2hhbiAqZmN0eCA9IG5vdXZlYXVfZmN0eChmZW5jZSk7CiAKIAkJaWYgKCEtLWZjdHgtPm5vdGlmeV9yZWYpCi0JCQludmlmX25vdGlmeV9wdXQoJmZjdHgtPm5vdGlmeSk7CisJCQlkcm9wID0gMTsKIAl9CiAKIAlmZW5jZV9wdXQoJmZlbmNlLT5iYXNlKTsKKwlyZXR1cm4gZHJvcDsKIH0KIAogc3RhdGljIHN0cnVjdCBub3V2ZWF1X2ZlbmNlICoKQEAgLTg4LDE2ICs5MiwyMyBAQAogewogCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZTsKIAotCW52aWZfbm90aWZ5X2ZpbmkoJmZjdHgtPm5vdGlmeSk7Ci0KIAlzcGluX2xvY2tfaXJxKCZmY3R4LT5sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmZjdHgtPnBlbmRpbmcpKSB7CiAJCWZlbmNlID0gbGlzdF9lbnRyeShmY3R4LT5wZW5kaW5nLm5leHQsIHR5cGVvZigqZmVuY2UpLCBoZWFkKTsKIAotCQlub3V2ZWF1X2ZlbmNlX3NpZ25hbChmZW5jZSk7Ci0JCWZlbmNlLT5jaGFubmVsID0gTlVMTDsKKwkJaWYgKG5vdXZlYXVfZmVuY2Vfc2lnbmFsKGZlbmNlKSkKKwkJCW52aWZfbm90aWZ5X3B1dCgmZmN0eC0+bm90aWZ5KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZmY3R4LT5sb2NrKTsKKworCW52aWZfbm90aWZ5X2ZpbmkoJmZjdHgtPm5vdGlmeSk7CisJZmN0eC0+ZGVhZCA9IDE7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IGFsbCBhY2Nlc3NlcyB0byBmZW5jZS0+Y2hhbm5lbCBjb21wbGV0ZSBiZWZvcmUgZnJlZWluZworCSAqIHRoZSBjaGFubmVsLgorCSAqLworCXN5bmNocm9uaXplX3JjdSgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTEyLDIxICsxMjMsMjMgQEAKIAlrcmVmX3B1dCgmZmN0eC0+ZmVuY2VfcmVmLCBub3V2ZWF1X2ZlbmNlX2NvbnRleHRfcHV0KTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIG5vdXZlYXVfZmVuY2VfdXBkYXRlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBub3V2ZWF1X2ZlbmNlX2NoYW4gKmZjdHgpCiB7CiAJc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlOwotCisJaW50IGRyb3AgPSAwOwogCXUzMiBzZXEgPSBmY3R4LT5yZWFkKGNoYW4pOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZmY3R4LT5wZW5kaW5nKSkgewogCQlmZW5jZSA9IGxpc3RfZW50cnkoZmN0eC0+cGVuZGluZy5uZXh0LCB0eXBlb2YoKmZlbmNlKSwgaGVhZCk7CiAKIAkJaWYgKChpbnQpKHNlcSAtIGZlbmNlLT5iYXNlLnNlcW5vKSA8IDApCi0JCQlyZXR1cm47CisJCQlicmVhazsKIAotCQlub3V2ZWF1X2ZlbmNlX3NpZ25hbChmZW5jZSk7CisJCWRyb3AgfD0gbm91dmVhdV9mZW5jZV9zaWduYWwoZmVuY2UpOwogCX0KKworCXJldHVybiBkcm9wOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMzUsMTggKzE0OCwyMSBAQAogCXN0cnVjdCBub3V2ZWF1X2ZlbmNlX2NoYW4gKmZjdHggPQogCQljb250YWluZXJfb2Yobm90aWZ5LCB0eXBlb2YoKmZjdHgpLCBub3RpZnkpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IE5WSUZfTk9USUZZX0tFRVA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZmN0eC0+bG9jaywgZmxhZ3MpOwogCWlmICghbGlzdF9lbXB0eSgmZmN0eC0+cGVuZGluZykpIHsKIAkJc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlOworCQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOwogCiAJCWZlbmNlID0gbGlzdF9lbnRyeShmY3R4LT5wZW5kaW5nLm5leHQsIHR5cGVvZigqZmVuY2UpLCBoZWFkKTsKLQkJbm91dmVhdV9mZW5jZV91cGRhdGUoZmVuY2UtPmNoYW5uZWwsIGZjdHgpOworCQljaGFuID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChmZW5jZS0+Y2hhbm5lbCwgbG9ja2RlcF9pc19oZWxkKCZmY3R4LT5sb2NrKSk7CisJCWlmIChub3V2ZWF1X2ZlbmNlX3VwZGF0ZShmZW5jZS0+Y2hhbm5lbCwgZmN0eCkpCisJCQlyZXQgPSBOVklGX05PVElGWV9EUk9QOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmY3R4LT5sb2NrLCBmbGFncyk7CiAKLQkvKiBBbHdheXMgcmV0dXJuIGtlZXAgaGVyZS4gTlZJRiByZWZjb3VudCBpcyBoYW5kbGVkIHdpdGggbm91dmVhdV9mZW5jZV91cGRhdGUgKi8KLQlyZXR1cm4gTlZJRl9OT1RJRllfS0VFUDsKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkCkBAIC0yNjIsNyArMjc4LDEwIEBACiAJaWYgKCFyZXQpIHsKIAkJZmVuY2VfZ2V0KCZmZW5jZS0+YmFzZSk7CiAJCXNwaW5fbG9ja19pcnEoJmZjdHgtPmxvY2spOwotCQlub3V2ZWF1X2ZlbmNlX3VwZGF0ZShjaGFuLCBmY3R4KTsKKworCQlpZiAobm91dmVhdV9mZW5jZV91cGRhdGUoY2hhbiwgZmN0eCkpCisJCQludmlmX25vdGlmeV9wdXQoJmZjdHgtPm5vdGlmeSk7CisKIAkJbGlzdF9hZGRfdGFpbCgmZmVuY2UtPmhlYWQsICZmY3R4LT5wZW5kaW5nKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZmY3R4LT5sb2NrKTsKIAl9CkBAIC0yNzYsMTMgKzI5NSwxNiBAQAogCWlmIChmZW5jZS0+YmFzZS5vcHMgPT0gJm5vdXZlYXVfZmVuY2Vfb3BzX2xlZ2FjeSB8fAogCSAgICBmZW5jZS0+YmFzZS5vcHMgPT0gJm5vdXZlYXVfZmVuY2Vfb3BzX3VldmVudCkgewogCQlzdHJ1Y3Qgbm91dmVhdV9mZW5jZV9jaGFuICpmY3R4ID0gbm91dmVhdV9mY3R4KGZlbmNlKTsKKwkJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbjsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlpZiAodGVzdF9iaXQoRkVOQ0VfRkxBR19TSUdOQUxFRF9CSVQsICZmZW5jZS0+YmFzZS5mbGFncykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmN0eC0+bG9jaywgZmxhZ3MpOwotCQlub3V2ZWF1X2ZlbmNlX3VwZGF0ZShmZW5jZS0+Y2hhbm5lbCwgZmN0eCk7CisJCWNoYW4gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGZlbmNlLT5jaGFubmVsLCBsb2NrZGVwX2lzX2hlbGQoJmZjdHgtPmxvY2spKTsKKwkJaWYgKGNoYW4gJiYgbm91dmVhdV9mZW5jZV91cGRhdGUoY2hhbiwgZmN0eCkpCisJCQludmlmX25vdGlmeV9wdXQoJmZjdHgtPm5vdGlmeSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZjdHgtPmxvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIGZlbmNlX2lzX3NpZ25hbGVkKCZmZW5jZS0+YmFzZSk7CkBAIC0zODcsMTIgKzQwOSwxOCBAQAogCiAJaWYgKGZlbmNlICYmICghZXhjbHVzaXZlIHx8ICFmb2JqIHx8ICFmb2JqLT5zaGFyZWRfY291bnQpKSB7CiAJCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKnByZXYgPSBOVUxMOworCQlib29sIG11c3Rfd2FpdCA9IHRydWU7CiAKIAkJZiA9IG5vdXZlYXVfbG9jYWxfZmVuY2UoZmVuY2UsIGNoYW4tPmRybSk7Ci0JCWlmIChmKQotCQkJcHJldiA9IGYtPmNoYW5uZWw7CisJCWlmIChmKSB7CisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQlwcmV2ID0gcmN1X2RlcmVmZXJlbmNlKGYtPmNoYW5uZWwpOworCQkJaWYgKHByZXYgJiYgKHByZXYgPT0gY2hhbiB8fCBmY3R4LT5zeW5jKGYsIHByZXYsIGNoYW4pID09IDApKQorCQkJCW11c3Rfd2FpdCA9IGZhbHNlOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCX0KIAotCQlpZiAoIXByZXYgfHwgKHByZXYgIT0gY2hhbiAmJiAocmV0ID0gZmN0eC0+c3luYyhmLCBwcmV2LCBjaGFuKSkpKQorCQlpZiAobXVzdF93YWl0KQogCQkJcmV0ID0gZmVuY2Vfd2FpdChmZW5jZSwgaW50cik7CiAKIAkJcmV0dXJuIHJldDsKQEAgLTQwMywxOSArNDMxLDIyIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZm9iai0+c2hhcmVkX2NvdW50ICYmICFyZXQ7ICsraSkgewogCQlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpwcmV2ID0gTlVMTDsKKwkJYm9vbCBtdXN0X3dhaXQgPSB0cnVlOwogCiAJCWZlbmNlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChmb2JqLT5zaGFyZWRbaV0sCiAJCQkJCQlyZXNlcnZhdGlvbl9vYmplY3RfaGVsZChyZXN2KSk7CiAKIAkJZiA9IG5vdXZlYXVfbG9jYWxfZmVuY2UoZmVuY2UsIGNoYW4tPmRybSk7Ci0JCWlmIChmKQotCQkJcHJldiA9IGYtPmNoYW5uZWw7CisJCWlmIChmKSB7CisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQlwcmV2ID0gcmN1X2RlcmVmZXJlbmNlKGYtPmNoYW5uZWwpOworCQkJaWYgKHByZXYgJiYgKHByZXYgPT0gY2hhbiB8fCBmY3R4LT5zeW5jKGYsIHByZXYsIGNoYW4pID09IDApKQorCQkJCW11c3Rfd2FpdCA9IGZhbHNlOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCX0KIAotCQlpZiAoIXByZXYgfHwgKHByZXYgIT0gY2hhbiAmJiAocmV0ID0gZmN0eC0+c3luYyhmLCBwcmV2LCBjaGFuKSkpKQorCQlpZiAobXVzdF93YWl0KQogCQkJcmV0ID0gZmVuY2Vfd2FpdChmZW5jZSwgaW50cik7Ci0KLQkJaWYgKHJldCkKLQkJCWJyZWFrOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC00NjMsNyArNDk0LDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UgPSBmcm9tX2ZlbmNlKGYpOwogCXN0cnVjdCBub3V2ZWF1X2ZlbmNlX2NoYW4gKmZjdHggPSBub3V2ZWF1X2ZjdHgoZmVuY2UpOwogCi0JcmV0dXJuIGZlbmNlLT5jaGFubmVsID8gZmN0eC0+bmFtZSA6ICJkZWFkIGNoYW5uZWwiOworCXJldHVybiAhZmN0eC0+ZGVhZCA/IGZjdHgtPm5hbWUgOiAiZGVhZCBjaGFubmVsIjsKIH0KIAogLyoKQEAgLTQ3Niw5ICs1MDcsMTYgQEAKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UgPSBmcm9tX2ZlbmNlKGYpOwogCXN0cnVjdCBub3V2ZWF1X2ZlbmNlX2NoYW4gKmZjdHggPSBub3V2ZWF1X2ZjdHgoZmVuY2UpOwotCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBmZW5jZS0+Y2hhbm5lbDsKKwlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOworCWJvb2wgcmV0ID0gZmFsc2U7CiAKLQlyZXR1cm4gKGludCkoZmN0eC0+cmVhZChjaGFuKSAtIGZlbmNlLT5iYXNlLnNlcW5vKSA+PSAwOworCXJjdV9yZWFkX2xvY2soKTsKKwljaGFuID0gcmN1X2RlcmVmZXJlbmNlKGZlbmNlLT5jaGFubmVsKTsKKwlpZiAoY2hhbikKKwkJcmV0ID0gKGludCkoZmN0eC0+cmVhZChjaGFuKSAtIGZlbmNlLT5iYXNlLnNlcW5vKSA+PSAwOworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGJvb2wgbm91dmVhdV9mZW5jZV9ub19zaWduYWxpbmcoc3RydWN0IGZlbmNlICpmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5oCmluZGV4IDk0M2IwYjEuLjk2ZTQ2MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmgKQEAgLTE0LDcgKzE0LDcgQEAKIAogCWJvb2wgc3lzbWVtOwogCi0Jc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsIF9fcmN1ICpjaGFubmVsOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIH07CiAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAljaGFyIG5hbWVbMzJdOwogCiAJc3RydWN0IG52aWZfbm90aWZ5IG5vdGlmeTsKLQlpbnQgbm90aWZ5X3JlZjsKKwlpbnQgbm90aWZ5X3JlZiwgZGVhZDsKIH07CiAKIHN0cnVjdCBub3V2ZWF1X2ZlbmNlX3ByaXYgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKaW5kZXggYTNlN2FlZC4uNmYzNzdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCkBAIC0yNTEsMjIgKzI1MSwxOSBAQAogCiBzdGF0aWMgaW50IHJhZGVvbl9jc19zeW5jX3JpbmdzKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQogewotCWludCBpLCByID0gMDsKKwlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKKwlpbnQgcjsKIAotCWZvciAoaSA9IDA7IGkgPCBwLT5ucmVsb2NzOyBpKyspIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlbG9jLCAmcC0+dmFsaWRhdGVkLCB0di5oZWFkKSB7CiAJCXN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnJlc3Y7CiAKLQkJaWYgKCFwLT5yZWxvY3NbaV0ucm9iaikKLQkJCWNvbnRpbnVlOwotCi0JCXJlc3YgPSBwLT5yZWxvY3NbaV0ucm9iai0+dGJvLnJlc3Y7CisJCXJlc3YgPSByZWxvYy0+cm9iai0+dGJvLnJlc3Y7CiAJCXIgPSByYWRlb25fc2VtYXBob3JlX3N5bmNfcmVzdihwLT5yZGV2LCBwLT5pYi5zZW1hcGhvcmUsIHJlc3YsCi0JCQkJCSAgICAgICBwLT5yZWxvY3NbaV0udHYuc2hhcmVkKTsKLQorCQkJCQkgICAgICAgcmVsb2MtPnR2LnNoYXJlZCk7CiAJCWlmIChyKQotCQkJYnJlYWs7CisJCQlyZXR1cm4gcjsKIAl9Ci0JcmV0dXJuIHI7CisJcmV0dXJuIDA7CiB9CiAKIC8qIFhYWDogbm90ZSB0aGF0IHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGxlZ2FjeSBVTVMgQ1MgaW9jdGwgYXMgd2VsbCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCA4MzA5YjExLi4wMzU4Njc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwpAQCAtNzk1LDYgKzc5NSw4IEBACiAKIAkvKiBHZXQgYXNzb2NpYXRlZCBkcm1fY3J0YzogKi8KIAlkcm1jcnRjID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjXS0+YmFzZTsKKwlpZiAoIWRybWNydGMpCisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogSGVscGVyIHJvdXRpbmUgaW4gRFJNIGNvcmUgZG9lcyBhbGwgdGhlIHdvcms6ICovCiAJcmV0dXJuIGRybV9jYWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRwb3MoZGV2LCBjcnRjLCBtYXhfZXJyb3IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCmluZGV4IDk5YTk2MGEuLjRjMGQ3ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCkBAIC0yMTMsNiArMjEzLDEzIEBACiAJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkpCiAJCWJvLT5mbGFncyAmPSB+KFJBREVPTl9HRU1fR1RUX1dDIHwgUkFERU9OX0dFTV9HVFRfVUMpOwogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qIFhYWDogV3JpdGUtY29tYmluZWQgQ1BVIG1hcHBpbmdzIG9mIEdUVCBzZWVtIGJyb2tlbiBvbiAzMi1iaXQKKwkgKiBTZWUgaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ2MjcKKwkgKi8KKwliby0+ZmxhZ3MgJj0gflJBREVPTl9HRU1fR1RUX1dDOworI2VuZGlmCisKIAlyYWRlb25fdHRtX3BsYWNlbWVudF9mcm9tX2RvbWFpbihibywgZG9tYWluKTsKIAkvKiBLZXJuZWwgYWxsb2NhdGlvbiBhcmUgdW5pbnRlcnJ1cHRpYmxlICovCiAJZG93bl9yZWFkKCZyZGV2LT5wbS5tY2xrX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXNlbnNvci1odWIuYyBiL2RyaXZlcnMvaGlkL2hpZC1zZW5zb3ItaHViLmMKaW5kZXggZTZkOGUxOC4uNmE1OGI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXNlbnNvci1odWIuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc2Vuc29yLWh1Yi5jCkBAIC02NDEsOSArNjQxLDYgQEAKIAkJCQkJZ290byBlcnJfc3RvcF9odzsKIAkJCX0KIAkJCXNkLT5oaWRfc2Vuc29yX2h1Yl9jbGllbnRfZGV2c1sKLQkJCQlzZC0+aGlkX3NlbnNvcl9jbGllbnRfY250XS5pZCA9Ci0JCQkJCQkJUExBVEZPUk1fREVWSURfQVVUTzsKLQkJCXNkLT5oaWRfc2Vuc29yX2h1Yl9jbGllbnRfZGV2c1sKIAkJCQlzZC0+aGlkX3NlbnNvcl9jbGllbnRfY250XS5uYW1lID0gbmFtZTsKIAkJCXNkLT5oaWRfc2Vuc29yX2h1Yl9jbGllbnRfZGV2c1sKIAkJCQlzZC0+aGlkX3NlbnNvcl9jbGllbnRfY250XS5wbGF0Zm9ybV9kYXRhID0KQEAgLTY1OSw4ICs2NTYsOSBAQAogCWlmIChsYXN0X2hzZGV2KQogCQlsYXN0X2hzZGV2LT5lbmRfY29sbGVjdGlvbl9pbmRleCA9IGk7CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMoJmhkZXYtPmRldiwgMCwgc2QtPmhpZF9zZW5zb3JfaHViX2NsaWVudF9kZXZzLAotCQlzZC0+aGlkX3NlbnNvcl9jbGllbnRfY250LCBOVUxMLCAwLCBOVUxMKTsKKwlyZXQgPSBtZmRfYWRkX2hvdHBsdWdfZGV2aWNlcygmaGRldi0+ZGV2LAorCQkJc2QtPmhpZF9zZW5zb3JfaHViX2NsaWVudF9kZXZzLAorCQkJc2QtPmhpZF9zZW5zb3JfY2xpZW50X2NudCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3N0b3BfaHc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC5jIGIvZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLmMKaW5kZXggNzQ3ZDU0NC4uZjA5ZTcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLmMKKysrIGIvZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLmMKQEAgLTEwOTUsNyArMTA5NSw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGkyY19oaWRfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2kuYyBiL2RyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpLmMKaW5kZXggYmYwZWFjZS4uNGQ1YjY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2kuYworKysgYi9kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaS5jCkBAIC01NTUsNyArNTU1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IG9tYXBfc3NpX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGhzaV9jb250cm9sbGVyICpzc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYyBiL2RyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX3BvcnQuYwppbmRleCA0YzBiNTgyLi5kODM2Y2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9wb3J0LmMKKysrIGIvZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfcG9ydC5jCkBAIC0xMjYwLDcgKzEyNjAsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc3NpX3NhdmVfcG9ydF9jdHgoc3RydWN0IG9tYXBfc3NpX3BvcnQgKm9tYXBfcG9ydCkKIHsKIAlzdHJ1Y3QgaHNpX3BvcnQgKnBvcnQgPSB0b19oc2lfcG9ydChvbWFwX3BvcnQtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNTI4NmQ3Yy4uNjUyOWMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtMTAyOCwxMSArMTAyOCwxMSBAQAogCSAgd2lsbCBiZSBjYWxsZWQgbG05My4KIAogY29uZmlnIFNFTlNPUlNfTE05NTIzNAotCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTUyMzQiCisJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05NTIzNCBhbmQgY29tcGF0aWJsZXMiCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIExNOTUyMzQgdGVtcGVyYXR1cmUKLQkgIHNlbnNvci4KKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgTE05NTIzMyBhbmQgTE05NTIzNAorCSAgdGVtcGVyYXR1cmUgc2Vuc29yIGNoaXBzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTk1MjM0LgpAQCAtMTA0OCwxMCArMTA0OCwxMSBAQAogCSAgd2lsbCBiZSBjYWxsZWQgbG05NTI0MS4KIAogY29uZmlnIFNFTlNPUlNfTE05NTI0NQotCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTUyNDUgc2Vuc29yIGNoaXAiCisJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05NTI0NSBhbmQgY29tcGF0aWJsZXMiCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTE05NTI0NSBzZW5zb3IgY2hpcC4KKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBMTTk1MjM1IGFuZCBMTTk1MjQ1CisJICB0ZW1wZXJhdHVyZSBzZW5zb3IgY2hpcHMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGxtOTUyNDUuCkBAIC0xMTE3LDEyICsxMTE4LDIzIEBACiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSBtb25pdG9yaW5nCiAJICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBOdXZvdG9uIE5DVDYxMDZELCBOQ1Q2Nzc1RiwgTkNUNjc3NkYsIE5DVDY3NzlELAotCSAgTkNUNjc5MUQgYW5kIGNvbXBhdGlibGUgU3VwZXItSS9PIGNoaXBzLiBUaGlzIGRyaXZlciByZXBsYWNlcyB0aGUKLQkgIHc4MzYyN2VoZiBkcml2ZXIgZm9yIE5DVDY3NzVGIGFuZCBOQ1Q2Nzc2Ri4KKwkgIE5DVDY3OTFELCBOQ1Q2NzkyRCBhbmQgY29tcGF0aWJsZSBTdXBlci1JL08gY2hpcHMuIFRoaXMgZHJpdmVyCisJICByZXBsYWNlcyB0aGUgdzgzNjI3ZWhmIGRyaXZlciBmb3IgTkNUNjc3NUYgYW5kIE5DVDY3NzZGLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBuY3Q2Nzc1LgogCitjb25maWcgU0VOU09SU19OQ1Q3ODAyCisJdHJpc3RhdGUgIk51dm90b24gTkNUNzgwMlkiCisJZGVwZW5kcyBvbiBJMkMKKwlzZWxlY3QgUkVHTUFQX0kyQworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgTnV2b3RvbiBOQ1Q3ODAyWQorCSAgaGFyZHdhcmUgbW9uaXRvcmluZyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBuY3Q3ODAyLgorCiBjb25maWcgU0VOU09SU19QQ0Y4NTkxCiAJdHJpc3RhdGUgIlBoaWxpcHMgUENGODU5MSBBREMvREFDIgogCWRlcGVuZHMgb24gSTJDCkBAIC0xNDU0LDcgKzE0NjYsNyBAQAogCWRlcGVuZHMgb24gSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIFRleGFzIEluc3RydW1lbnRzIFRNUDQwMSwKLQkgIFRNUDQxMSwgVE1QNDMxLCBhbmQgVE1QNDMyIHRlbXBlcmF0dXJlIHNlbnNvciBjaGlwcy4KKwkgIFRNUDQxMSwgVE1QNDMxLCBUTVA0MzIgYW5kIFRNUDQzNSB0ZW1wZXJhdHVyZSBzZW5zb3IgY2hpcHMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHRtcDQwMS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IGM5MGE3NjEuLjY3MjgwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtMTE4LDYgKzExOCw3IEBACiBvYmotJChDT05GSUdfU0VOU09SU19NRU5GMjFCTUNfSFdNT04pICs9IG1lbmYyMWJtY19od21vbi5vCiBvYmotJChDT05GSUdfU0VOU09SU19OQ1Q2NjgzKQkrPSBuY3Q2NjgzLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX05DVDY3NzUpCSs9IG5jdDY3NzUubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTkNUNzgwMikJKz0gbmN0NzgwMi5vCiBvYmotJChDT05GSUdfU0VOU09SU19OVENfVEhFUk1JU1RPUikJKz0gbnRjX3RoZXJtaXN0b3Iubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfUEM4NzM2MCkJKz0gcGM4NzM2MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19QQzg3NDI3KQkrPSBwYzg3NDI3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZ3Bpby1mYW4uYyBiL2RyaXZlcnMvaHdtb24vZ3Bpby1mYW4uYwppbmRleCA0ZWZhMTczLi4zNmFiZjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2dwaW8tZmFuLmMKKysrIGIvZHJpdmVycy9od21vbi9ncGlvLWZhbi5jCkBAIC03OSw3ICs3OSw3IEBACiB7CiAJc3RydWN0IGdwaW9fZmFuX2RhdGEgKmZhbl9kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGdwaW9fZmFuX2FsYXJtICphbGFybSA9IGZhbl9kYXRhLT5hbGFybTsKLQlpbnQgdmFsdWUgPSBncGlvX2dldF92YWx1ZShhbGFybS0+Z3Bpbyk7CisJaW50IHZhbHVlID0gZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoYWxhcm0tPmdwaW8pOwogCiAJaWYgKGFsYXJtLT5hY3RpdmVfbG93KQogCQl2YWx1ZSA9ICF2YWx1ZTsKQEAgLTEzMSw3ICsxMzEsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGZhbl9kYXRhLT5udW1fY3RybDsgaSsrKQotCQlncGlvX3NldF92YWx1ZShmYW5fZGF0YS0+Y3RybFtpXSwgKGN0cmxfdmFsID4+IGkpICYgMSk7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGZhbl9kYXRhLT5jdHJsW2ldLCAoY3RybF92YWwgPj4gaSkgJiAxKTsKIH0KIAogc3RhdGljIGludCBfX2dldF9mYW5fY3RybChzdHJ1Y3QgZ3Bpb19mYW5fZGF0YSAqZmFuX2RhdGEpCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZmFuX2RhdGEtPm51bV9jdHJsOyBpKyspIHsKIAkJaW50IHZhbHVlOwogCi0JCXZhbHVlID0gZ3Bpb19nZXRfdmFsdWUoZmFuX2RhdGEtPmN0cmxbaV0pOworCQl2YWx1ZSA9IGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKGZhbl9kYXRhLT5jdHJsW2ldKTsKIAkJY3RybF92YWwgfD0gKHZhbHVlIDw8IGkpOwogCX0KIAlyZXR1cm4gY3RybF92YWw7CkBAIC0zNjksNyArMzY5LDggQEAKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKLQkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGN0cmxbaV0sIGdwaW9fZ2V0X3ZhbHVlKGN0cmxbaV0pKTsKKwkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGN0cmxbaV0sCisJCQkJCSAgICBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChjdHJsW2ldKSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTU0OSw2ICs1NTAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZ3Bpb19mYW5fc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZ3Bpb19mYW5fZGF0YSAqZmFuX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlpZiAoZmFuX2RhdGEtPmN0cmwpCisJCXNldF9mYW5fc3BlZWQoZmFuX2RhdGEsIDApOworfQorCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IGdwaW9fZmFuX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNTgwLDYgKzU4OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdwaW9fZmFuX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gZ3Bpb19mYW5fcHJvYmUsCisJLnNodXRkb3duCT0gZ3Bpb19mYW5fc2h1dGRvd24sCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJPSAiZ3Bpby1mYW4iLAogCQkucG0JPSBHUElPX0ZBTl9QTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaWJtcG93ZXJudi5jIGIvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKaW5kZXggNmEzMGVlZS4uN2MyYzdiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKKysrIGIvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKQEAgLTc0LDkgKzc0LDYgQEAKIAl1MzIgc2Vuc29yc19jb3VudDsgLyogVG90YWwgY291bnQgb2Ygc2Vuc29ycyBmcm9tIGVhY2ggZ3JvdXAgKi8KIH07CiAKLS8qIFBsYXRmb3JtIGRldmljZSByZXByZXNlbnRpbmcgYWxsIHRoZSBpYm1wb3dlcm52IHNlbnNvcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2aWNlOwotCiBzdGF0aWMgc3NpemVfdCBzaG93X3NlbnNvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAogCQkJICAgY2hhciAqYnVmKQogewpAQCAtOTksNyArOTYsNyBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB4KTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZ2V0X3NlbnNvcl9pbmRleF9hdHRyKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiAqaW5kZXgsCitzdGF0aWMgaW50IGdldF9zZW5zb3JfaW5kZXhfYXR0cihjb25zdCBjaGFyICpuYW1lLCB1MzIgKmluZGV4LAogCQkJCQljaGFyICphdHRyKQogewogCWNoYXIgKmhhc2hfcG9zID0gc3RyY2hyKG5hbWUsICcjJyk7CkBAIC0xMzYsNyArMTMzLDcgQEAKICAqIHdoaWNoIG5lZWQgdG8gYmUgbWFwcGVkIGFzIGZhbjJfaW5wdXQsIHRlbXAxX21heCByZXNwZWN0aXZlbHkgYmVmb3JlCiAgKiBwb3B1bGF0aW5nIHRoZW0gaW5zaWRlIGh3bW9uIGRldmljZSBjbGFzcy4KICAqLwotc3RhdGljIGludCBfX2luaXQgY3JlYXRlX2h3bW9uX2F0dHJfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gc2Vuc29ycyB0eXBlLAorc3RhdGljIGludCBjcmVhdGVfaHdtb25fYXR0cl9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBzZW5zb3JzIHR5cGUsCiAJCQkJCSBjb25zdCBjaGFyICpub2RlX25hbWUsCiAJCQkJCSBjaGFyICpod21vbl9hdHRyX25hbWUpCiB7CkBAIC0xNzIsNyArMTY5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcG9wdWxhdGVfYXR0cl9ncm91cHMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgcG9wdWxhdGVfYXR0cl9ncm91cHMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqcGdyb3VwcyA9IHBkYXRhLT5hdHRyX2dyb3VwczsKQEAgLTE4MCwxMSArMTc3LDYgQEAKIAllbnVtIHNlbnNvcnMgdHlwZTsKIAogCW9wYWwgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2libSxvcGFsL3NlbnNvcnMiKTsKLQlpZiAoIW9wYWwpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiT3BhbCBub2RlICdzZW5zb3JzJyBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG9wYWwsIG5wKSB7CiAJCWlmIChucC0+bmFtZSA9PSBOVUxMKQogCQkJY29udGludWU7CkBAIC0yMjEsNyArMjEzLDcgQEAKICAqIHRvIHRoZSBuYW1lIHJlcXVpcmVkIGJ5IHRoZSBoaWdoZXIgJ2h3bW9uJyBkcml2ZXIgbGlrZSBmYW4xX2lucHV0LCB0ZW1wMV9tYXgKICAqIGV0Yy4uCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9kZXZpY2VfYXR0cnMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgY3JlYXRlX2RldmljZV9hdHRycyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipwZ3JvdXBzID0gcGRhdGEtPmF0dHJfZ3JvdXBzOwpAQCAtMjgwLDcgKzI3Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaWJtcG93ZXJudl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBpYm1wb3dlcm52X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKQEAgLTMwOSw1NyArMzAxLDI1IEBACiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhod21vbl9kZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBvcGFsX3NlbnNvcl9kcml2ZXJfaWRzW10gPSB7CisJeworCQkubmFtZSA9ICJvcGFsLXNlbnNvciIsCisJfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBvcGFsX3NlbnNvcl9kcml2ZXJfaWRzKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaWJtcG93ZXJudl9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5uYW1lID0gRFJWTkFNRSwKKwkucHJvYmUJCT0gaWJtcG93ZXJudl9wcm9iZSwKKwkuaWRfdGFibGUJPSBvcGFsX3NlbnNvcl9kcml2ZXJfaWRzLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBEUlZOQU1FLAogCX0sCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpYm1wb3dlcm52X2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JcGRldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZOQU1FLCAwKTsKLQlpZiAoIXBkZXZpY2UpIHsKLQkJcHJfZXJyKCJEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2aWNlKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiRGV2aWNlIGFkZGl0aW9uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKLQl9Ci0KLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmlibXBvd2VybnZfZHJpdmVyLCBpYm1wb3dlcm52X3Byb2JlKTsKLQlpZiAoZXJyKSB7Ci0JCWlmIChlcnIgIT0gLUVOT0RFVikKLQkJCXByX2VycigiUGxhdGZvcm0gZHJpdmVyIHByb2JlIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCi0JCWdvdG8gZXhpdF9kZXZpY2VfZGVsOwotCX0KLQotCXJldHVybiAwOwotCi1leGl0X2RldmljZV9kZWw6Ci0JcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2aWNlKTsKLWV4aXRfZGV2aWNlX3B1dDoKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXZpY2UpOwotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaWJtcG93ZXJudl9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlibXBvd2VybnZfZHJpdmVyKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2aWNlKTsKLX0KK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaWJtcG93ZXJudl9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJOZWVsZXNoIEd1cHRhIDxuZWVsZWd1cEBsaW51eC52bmV0LmlibS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklCTSBQT1dFUk5WIHBsYXRmb3JtIHNlbnNvcnMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX2luaXQoaWJtcG93ZXJudl9pbml0KTsKLW1vZHVsZV9leGl0KGlibXBvd2VybnZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2lpb19od21vbi5jIGIvZHJpdmVycy9od21vbi9paW9faHdtb24uYwppbmRleCAxNGM4MmRhLi45ODAxNzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2lpb19od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vaWlvX2h3bW9uLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAlzdHJ1Y3QgaWlvX2h3bW9uX3N0YXRlICpzdDsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmE7CiAJaW50IHJldCwgaTsKLQlpbnQgaW5faSA9IDEsIHRlbXBfaSA9IDEsIGN1cnJfaSA9IDE7CisJaW50IGluX2kgPSAxLCB0ZW1wX2kgPSAxLCBjdXJyX2kgPSAxLCBodW1pZGl0eV9pID0gMTsKIAllbnVtIGlpb19jaGFuX3R5cGUgdHlwZTsKIAlzdHJ1Y3QgaWlvX2NoYW5uZWwgKmNoYW5uZWxzOwogCWNvbnN0IGNoYXIgKm5hbWUgPSAiaWlvX2h3bW9uIjsKQEAgLTEyMyw2ICsxMjMsMTEgQEAKIAkJCQkJCQkgICJjdXJyJWRfaW5wdXQiLAogCQkJCQkJCSAgY3Vycl9pKyspOwogCQkJYnJlYWs7CisJCWNhc2UgSUlPX0hVTUlESVRZUkVMQVRJVkU6CisJCQlhLT5kZXZfYXR0ci5hdHRyLm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKKwkJCQkJCQkgICJodW1pZGl0eSVkX2lucHV0IiwKKwkJCQkJCQkgIGh1bWlkaXR5X2krKyk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycm9yX3JlbGVhc2VfY2hhbm5lbHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2luYTJ4eC5jIGIvZHJpdmVycy9od21vbi9pbmEyeHguYwppbmRleCBiZmQzZjNlLi5lMDFmZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2luYTJ4eC5jCisrKyBiL2RyaXZlcnMvaHdtb24vaW5hMnh4LmMKQEAgLTIyMyw2ICsyMjMsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKIAlsb25nIHNodW50ID0gMTAwMDA7IC8qIGRlZmF1bHQgc2h1bnQgdmFsdWUgMTBtT2htcyAqLwogCXUzMiB2YWw7CisJaW50IHJldDsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yNDcsMTIgKzI0OCwyNSBAQAogCWRhdGEtPmNvbmZpZyA9ICZpbmEyeHhfY29uZmlnW2RhdGEtPmtpbmRdOwogCiAJLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KLQlpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgSU5BMlhYX0NPTkZJRywKLQkJCQkgICAgIGRhdGEtPmNvbmZpZy0+Y29uZmlnX2RlZmF1bHQpOwotCS8qIHNldCBjdXJyZW50IExTQiB0byAxbUEsIHNodW50IGlzIGluIHVPaG1zICovCi0JLyogKGVxdWF0aW9uIDEzIGluIGRhdGFzaGVldCkgKi8KLQlpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgSU5BMlhYX0NBTElCUkFUSU9OLAotCQkJCSAgICAgZGF0YS0+Y29uZmlnLT5jYWxpYnJhdGlvbl9mYWN0b3IgLyBzaHVudCk7CisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfc3dhcHBlZChjbGllbnQsIElOQTJYWF9DT05GSUcsCisJCQkJCSAgIGRhdGEtPmNvbmZpZy0+Y29uZmlnX2RlZmF1bHQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LAorCQkJImVycm9yIHdyaXRpbmcgdG8gdGhlIGNvbmZpZyByZWdpc3RlcjogJWQiLCByZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIFNldCBjdXJyZW50IExTQiB0byAxbUEsIHNodW50IGlzIGluIHVPaG1zCisJICogKGVxdWF0aW9uIDEzIGluIGRhdGFzaGVldCkuCisJICovCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfc3dhcHBlZChjbGllbnQsIElOQTJYWF9DQUxJQlJBVElPTiwKKwkJCQlkYXRhLT5jb25maWctPmNhbGlicmF0aW9uX2ZhY3RvciAvIHNodW50KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJlcnJvciB3cml0aW5nIHRvIHRoZSBjYWxpYnJhdGlvbiByZWdpc3RlcjogJWQiLCByZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc1LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwppbmRleCBkMTZkYmIzLi42NzUzZmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwpAQCAtNDQsNiArNDQsNyBAQAogCWc3NTEsCiAJbG03NSwKIAlsbTc1YSwKKwlsbTc1YiwKIAltYXg2NjI1LAogCW1heDY2MjYsCiAJbWNwOTgweCwKQEAgLTIzMyw2ICsyMzQsMTAgQEAKIAkJZGF0YS0+cmVzb2x1dGlvbiA9IDk7CiAJCWRhdGEtPnNhbXBsZV90aW1lID0gSFogLyAyOwogCQlicmVhazsKKwljYXNlIGxtNzViOgorCQlkYXRhLT5yZXNvbHV0aW9uID0gMTE7CisJCWRhdGEtPnNhbXBsZV90aW1lID0gSFogLyA0OworCQlicmVhazsKIAljYXNlIG1heDY2MjU6CiAJCWRhdGEtPnJlc29sdXRpb24gPSA5OwogCQlkYXRhLT5zYW1wbGVfdGltZSA9IEhaIC8gNDsKQEAgLTMyMiw2ICszMjcsNyBAQAogCXsgImc3NTEiLCBnNzUxLCB9LAogCXsgImxtNzUiLCBsbTc1LCB9LAogCXsgImxtNzVhIiwgbG03NWEsIH0sCisJeyAibG03NWIiLCBsbTc1YiwgfSwKIAl7ICJtYXg2NjI1IiwgbWF4NjYyNSwgfSwKIAl7ICJtYXg2NjI2IiwgbWF4NjYyNiwgfSwKIAl7ICJtY3A5ODB4IiwgbWNwOTgweCwgfSwKQEAgLTQwOSw2ICs0MTUsMTIgQEAKIAkJIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCA3KSAhPSBvcykKIAkJCXJldHVybiAtRU5PREVWOwogCX0KKwkvKgorCSAqIEl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdCB0aGlzIGlzIGEgTE03NSBpZiBib3RoCisJICogaHlzdGVyZXNpcyBhbmQgdGVtcGVyYXR1cmUgbGltaXQgcmVnaXN0ZXJzIGFyZSAwLgorCSAqLworCWlmIChoeXN0ID09IDAgJiYgb3MgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBBZGRyZXNzZXMgY3ljbGluZyAqLwogCWZvciAoaSA9IDg7IGkgPD0gMjQ4OyBpICs9IDQwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTUyMzQuYyBiL2RyaXZlcnMvaHdtb24vbG05NTIzNC5jCmluZGV4IDQxMTIwMmIuLjg3OTZkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05NTIzNC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05NTIzNC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgLyBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTUyMzQKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTMgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDEzLCAyMDE0IEd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4KICAqCiAgKiBEZXJpdmVkIGZyb20gbG05NTI0MS5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgRGF2aWRlIFJpenpvIDxlbHBhLnJpenpvQGdtYWlsLmNvbT4KQEAgLTMwLDcgKzMwLDEwIEBACiAKICNkZWZpbmUgRFJWTkFNRSAibG05NTIzNCIKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgxOCwgMHg0ZCwgMHg0ZSwgSTJDX0NMSUVOVF9FTkQgfTsKK2VudW0gY2hpcHMgeyBsbTk1MjMzLCBsbTk1MjM0IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHgxOCwgMHgyYSwgMHgyYiwgMHg0ZCwgMHg0ZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogTE05NTIzNCByZWdpc3RlcnMgKi8KICNkZWZpbmUgTE05NTIzNF9SRUdfTUFOX0lECQkweEZFCkBAIC01MywxMSArNTYsMTMgQEAKICNkZWZpbmUgTE05NTIzNF9SRUdfVENSSVRfSFlTVAkJMHg1YQogCiAjZGVmaW5lIE5BVFNFTUlfTUFOX0lECQkJMHgwMQorI2RlZmluZSBMTTk1MjMzX0NISVBfSUQJCQkweDg5CiAjZGVmaW5lIExNOTUyMzRfQ0hJUF9JRAkJCTB4NzkKIAogLyogQ2xpZW50IGRhdGEgKGVhY2ggY2xpZW50IGdldHMgaXRzIG93bikgKi8KIHN0cnVjdCBsbTk1MjM0X2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JvdXBzWzNdOwogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZCwgaW50ZXJ2YWw7CS8qIGluIGppZmZpZXMgKi8KIAlib29sIHZhbGlkOwkJLyogZmFsc2UgdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KQEAgLTU2NCwzNSArNTY5LDIzIEBACiBzdGF0aWMgREVWSUNFX0FUVFIodXBkYXRlX2ludGVydmFsLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbnRlcnZhbCwKIAkJICAgc2V0X2ludGVydmFsKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtOTUyMzRfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsbTk1MjM0X2NvbW1vbl9hdHRyc1tdID0gewogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9mYXVsdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfZmF1bHQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X2ZhdWx0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9mYXVsdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfdHlwZS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfdHlwZS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heF9oeXN0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXRfaHlzdC5kZXZfYXR0ci5hdHRyLApAQCAtNjAxLDE4ICs1OTQsNDQgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X29mZnNldC5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl91cGRhdGVfaW50ZXJ2YWwuYXR0ciwKIAlOVUxMCiB9OwotQVRUUklCVVRFX0dST1VQUyhsbTk1MjM0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG05NTIzNF9jb21tb25fZ3JvdXAgPSB7CisJLmF0dHJzID0gbG05NTIzNF9jb21tb25fYXR0cnMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG05NTIzNF9hdHRyc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X3R5cGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X3R5cGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X29mZnNldC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxtOTUyMzRfZ3JvdXAgPSB7CisJLmF0dHJzID0gbG05NTIzNF9hdHRycywKK307CiAKIHN0YXRpYyBpbnQgbG05NTIzNF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IGNsaWVudC0+YWRkcjsKKwl1OCBjb25maWdfbWFzaywgbW9kZWxfbWFzazsKIAlpbnQgbWZnX2lkLCBjaGlwX2lkLCB2YWw7CisJY29uc3QgY2hhciAqbmFtZTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MjIsMTUgKzY0MSwzMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNoaXBfaWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjM0X1JFR19DSElQX0lEKTsKLQlpZiAoY2hpcF9pZCAhPSBMTTk1MjM0X0NISVBfSUQpCisJc3dpdGNoIChjaGlwX2lkKSB7CisJY2FzZSBMTTk1MjMzX0NISVBfSUQ6CisJCWlmIChhZGRyZXNzICE9IDB4MTggJiYgYWRkcmVzcyAhPSAweDJhICYmIGFkZHJlc3MgIT0gMHgyYikKKwkJCXJldHVybiAtRU5PREVWOworCQljb25maWdfbWFzayA9IDB4YmY7CisJCW1vZGVsX21hc2sgPSAweGY5OworCQluYW1lID0gImxtOTUyMzMiOworCQlicmVhazsKKwljYXNlIExNOTUyMzRfQ0hJUF9JRDoKKwkJaWYgKGFkZHJlc3MgIT0gMHgxOCAmJiBhZGRyZXNzICE9IDB4NGQgJiYgYWRkcmVzcyAhPSAweDRlKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWNvbmZpZ19tYXNrID0gMHhiYzsKKwkJbW9kZWxfbWFzayA9IDB4ZTE7CisJCW5hbWUgPSAibG05NTIzNCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNOTUyMzRfUkVHX1NUQVRVUyk7CiAJaWYgKHZhbCAmIDB4MzApCiAJCXJldHVybiAtRU5PREVWOwogCiAJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTIzNF9SRUdfQ09ORklHKTsKLQlpZiAodmFsICYgMHhiYykKKwlpZiAodmFsICYgY29uZmlnX21hc2spCiAJCXJldHVybiAtRU5PREVWOwogCiAJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTIzNF9SRUdfQ09OVlJBVEUpOwpAQCAtNjM4LDE0ICs2NzMsMTQgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjM0X1JFR19SRU1fTU9ERUwpOwotCWlmICh2YWwgJiAweGUxKQorCWlmICh2YWwgJiBtb2RlbF9tYXNrKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNOTUyMzRfUkVHX1JFTV9NT0RFTF9TVFMpOwotCWlmICh2YWwgJiAweGUxKQorCWlmICh2YWwgJiBtb2RlbF9tYXNrKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN0cmxjcHkoaW5mby0+dHlwZSwgImxtOTUyMzQiLCBJMkNfTkFNRV9TSVpFKTsKKwlzdHJsY3B5KGluZm8tPnR5cGUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOwogCXJldHVybiAwOwogfQogCkBAIC02OTgsMTUgKzczMywxOSBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCisJZGF0YS0+Z3JvdXBzWzBdID0gJmxtOTUyMzRfY29tbW9uX2dyb3VwOworCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gbG05NTIzNCkKKwkJZGF0YS0+Z3JvdXBzWzFdID0gJmxtOTUyMzRfZ3JvdXA7CisKIAlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhkZXYsIGNsaWVudC0+bmFtZSwKLQkJCQkJCQkgICBkYXRhLAotCQkJCQkJCSAgIGxtOTUyMzRfZ3JvdXBzKTsKKwkJCQkJCQkgICBkYXRhLCBkYXRhLT5ncm91cHMpOwogCXJldHVybiBQVFJfRVJSX09SX1pFUk8oaHdtb25fZGV2KTsKIH0KIAogLyogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTk1MjM0X2lkW10gPSB7Ci0JeyAibG05NTIzNCIsIDAgfSwKKwl7ICJsbTk1MjMzIiwgbG05NTIzMyB9LAorCXsgImxtOTUyMzQiLCBsbTk1MjM0IH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtOTUyMzRfaWQpOwpAQCAtNzI1LDUgKzc2NCw1IEBACiBtb2R1bGVfaTJjX2RyaXZlcihsbTk1MjM0X2RyaXZlcik7CiAKIE1PRFVMRV9BVVRIT1IoIkd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTE05NTIzNCBzZW5zb3IgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxNOTUyMzMvTE05NTIzNCBzZW5zb3IgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTUyNDUuYyBiL2RyaXZlcnMvaHdtb24vbG05NTI0NS5jCmluZGV4IDBhZTBkZmQuLmU3YWVmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05NTI0NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05NTI0NS5jCkBAIC0xLDEwICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWxleGFuZGVyIFN0ZWluIDxhbGV4YW5kZXIuc3RlaW5Ac3lzdGVjLWVsZWN0cm9uaWMuY29tPgogICoKLSAqIFRoZSBMTTk1MjQ1IGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBOYXRpb25hbCBTZW1pY29uZHVjdG9ycy4KKyAqIFRoZSBMTTk1MjQ1IGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBUSSAvIE5hdGlvbmFsIFNlbWljb25kdWN0b3IuCiAgKiBJdCByZXBvcnRzIHVwIHRvIHR3byB0ZW1wZXJhdHVyZXMgKGl0cyBvd24gcGx1cyBhbiBleHRlcm5hbCBvbmUpLgotICogQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIE5hdGlvbmFsJ3Mgd2Vic2l0ZSBhdDoKLSAqICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vZHMuY2dpL0xNL0xNOTUyNDUucGRmCiAgKgogICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gbG05NTI0MS5jCiAgKgpAQCAtMzQsOCArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAotI2RlZmluZSBERVZOQU1FICJsbTk1MjQ1IgotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewogCTB4MTgsIDB4MTksIDB4MjksIDB4NGMsIDB4NGQsIEkyQ19DTElFTlRfRU5EIH07CiAKQEAgLTk4LDcgKzk0LDggQEAKICNkZWZpbmUgU1RBVFVTMV9MT0MJCTB4MDEKIAogI2RlZmluZSBNQU5VRkFDVFVSRVJfSUQJCTB4MDEKLSNkZWZpbmUgREVGQVVMVF9SRVZJU0lPTgkweEIzCisjZGVmaW5lIExNOTUyMzVfUkVWSVNJT04JMHhCMQorI2RlZmluZSBMTTk1MjQ1X1JFVklTSU9OCTB4QjMKIAogc3RhdGljIGNvbnN0IHU4IGxtOTUyNDVfcmVnX2FkZHJlc3NbXSA9IHsKIAlMTTk1MjQ1X1JFR19SX0xPQ0FMX1RFTVBIX1MsCkBAIC00MjcsMTcgKzQyNCwzMiBAQAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IG5ld19jbGllbnQtPmFkZHI7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgcmV2LCBpZDsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDVfUkVHX1JfTUFOX0lEKQotCQkJIT0gTUFOVUZBQ1RVUkVSX0lECi0JCXx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCBMTTk1MjQ1X1JFR19SX0NISVBfSUQpCi0JCQkhPSBERUZBVUxUX1JFVklTSU9OKQorCWlkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDVfUkVHX1JfTUFOX0lEKTsKKwlpZiAoaWQgIT0gTUFOVUZBQ1RVUkVSX0lEKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN0cmxjcHkoaW5mby0+dHlwZSwgREVWTkFNRSwgSTJDX05BTUVfU0laRSk7CisJcmV2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDVfUkVHX1JfQ0hJUF9JRCk7CisJc3dpdGNoIChyZXYpIHsKKwljYXNlIExNOTUyMzVfUkVWSVNJT046CisJCWlmIChhZGRyZXNzICE9IDB4MTggJiYgYWRkcmVzcyAhPSAweDI5ICYmIGFkZHJlc3MgIT0gMHg0YykKKwkJCXJldHVybiAtRU5PREVWOworCQluYW1lID0gImxtOTUyMzUiOworCQlicmVhazsKKwljYXNlIExNOTUyNDVfUkVWSVNJT046CisJCW5hbWUgPSAibG05NTI0NSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN0cmxjcHkoaW5mby0+dHlwZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4NCw3ICs0OTYsOCBAQAogCiAvKiBEcml2ZXIgZGF0YSAoY29tbW9uIHRvIGFsbCBjbGllbnRzKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtOTUyNDVfaWRbXSA9IHsKLQl7IERFVk5BTUUsIDAgfSwKKwl7ICJsbTk1MjM1IiwgMCB9LAorCXsgImxtOTUyNDUiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtOTUyNDVfaWQpOwpAQCAtNDkyLDcgKzUwNSw3IEBACiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG05NTI0NV9kcml2ZXIgPSB7CiAJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewotCQkubmFtZQk9IERFVk5BTUUsCisJCS5uYW1lCT0gImxtOTUyNDUiLAogCX0sCiAJLnByb2JlCQk9IGxtOTUyNDVfcHJvYmUsCiAJLmlkX3RhYmxlCT0gbG05NTI0NV9pZCwKQEAgLTUwMyw1ICs1MTYsNSBAQAogbW9kdWxlX2kyY19kcml2ZXIobG05NTI0NV9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJBbGV4YW5kZXIgU3RlaW4gPGFsZXhhbmRlci5zdGVpbkBzeXN0ZWMtZWxlY3Ryb25pYy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkxNOTUyNDUgc2Vuc29yIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMTTk1MjM1L0xNOTUyNDUgc2Vuc29yIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9uY3Q2Nzc1LmMgYi9kcml2ZXJzL2h3bW9uL25jdDY3NzUuYwppbmRleCA1MDRjYmRkLi5kYzBkZjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL25jdDY3NzUuYworKysgYi9kcml2ZXJzL2h3bW9uL25jdDY3NzUuYwpAQCAtMzgsNiArMzgsNyBAQAogICogbmN0Njc3NmYgICAgIDkgICAgICA1ICAgICAgIDMgICAgICAgNiszICAgIDB4YzMzMCAweGMxICAgIDB4NWNhMwogICogbmN0Njc3OWQgICAgMTUgICAgICA1ICAgICAgIDUgICAgICAgMis2ICAgIDB4YzU2MCAweGMxICAgIDB4NWNhMwogICogbmN0Njc5MWQgICAgMTUgICAgICA2ICAgICAgIDYgICAgICAgMis2ICAgIDB4YzgwMCAweGMxICAgIDB4NWNhMworICogbmN0Njc5MmQgICAgMTUgICAgICA2ICAgICAgIDYgICAgICAgMis2ICAgIDB4YzkxMCAweGMxICAgIDB4NWNhMwogICoKICAqICN0ZW1wIGxpc3RzIHRoZSBudW1iZXIgb2YgbW9uaXRvcmVkIHRlbXBlcmF0dXJlIHNvdXJjZXMgKGZpcnN0IHZhbHVlKSBwbHVzCiAgKiB0aGUgbnVtYmVyIG9mIGRpcmVjdGx5IGNvbm5lY3RhYmxlIHRlbXBlcmF0dXJlIHNlbnNvcnMgKHNlY29uZCB2YWx1ZSkuCkBAIC02MSw3ICs2Miw3IEBACiAKICNkZWZpbmUgVVNFX0FMVEVSTkFURQogCi1lbnVtIGtpbmRzIHsgbmN0NjEwNiwgbmN0Njc3NSwgbmN0Njc3NiwgbmN0Njc3OSwgbmN0Njc5MSB9OworZW51bSBraW5kcyB7IG5jdDYxMDYsIG5jdDY3NzUsIG5jdDY3NzYsIG5jdDY3NzksIG5jdDY3OTEsIG5jdDY3OTIgfTsKIAogLyogdXNlZCB0byBzZXQgZGF0YS0+bmFtZSA9IG5jdDY3NzVfZGV2aWNlX25hbWVzW2RhdGEtPnNpb19raW5kXSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuY3Q2Nzc1X2RldmljZV9uYW1lc1tdID0gewpAQCAtNzAsNiArNzEsNyBAQAogCSJuY3Q2Nzc2IiwKIAkibmN0Njc3OSIsCiAJIm5jdDY3OTEiLAorCSJuY3Q2NzkyIiwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBmb3JjZV9pZDsKQEAgLTEwMCw2ICsxMDIsNyBAQAogI2RlZmluZSBTSU9fTkNUNjc3Nl9JRAkJMHhjMzMwCiAjZGVmaW5lIFNJT19OQ1Q2Nzc5X0lECQkweGM1NjAKICNkZWZpbmUgU0lPX05DVDY3OTFfSUQJCTB4YzgwMAorI2RlZmluZSBTSU9fTkNUNjc5Ml9JRAkJMHhjOTEwCiAjZGVmaW5lIFNJT19JRF9NQVNLCQkweEZGRjAKIAogZW51bSBwd21fZW5hYmxlIHsgb2ZmLCBtYW51YWwsIHRoZXJtYWxfY3J1aXNlLCBzcGVlZF9jcnVpc2UsIHNmMywgc2Y0IH07CkBAIC01MjksNiArNTMyLDEyIEBACiAJNCwgNSwgMTMsIC0xLCAtMSwgLTEsCQkvKiB0ZW1wMS4udGVtcDYgKi8KIAkxMiwgOSB9OwkJCS8qIGludHJ1c2lvbjAsIGludHJ1c2lvbjEgKi8KIAorLyogTkNUNjc5MiBzcGVjaWZpYyBkYXRhICovCisKK3N0YXRpYyBjb25zdCB1MTYgTkNUNjc5Ml9SRUdfVEVNUF9NT05bXSA9IHsKKwkweDczLCAweDc1LCAweDc3LCAweDc5LCAweDdiLCAweDdkIH07CitzdGF0aWMgY29uc3QgdTE2IE5DVDY3OTJfUkVHX0JFRVBbTlVNX1JFR19CRUVQXSA9IHsKKwkweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGJmIH07CiAKIC8qIE5DVDYxMDJEL05DVDYxMDZEIHNwZWNpZmljIGRhdGEgKi8KIApAQCAtMTA0MywxMyArMTA1MiwxNCBAQAogCQkgIHJlZyA9PSAweDczIHx8IHJlZyA9PSAweDc1IHx8IHJlZyA9PSAweDc3OwogCWNhc2UgbmN0Njc3OToKIAljYXNlIG5jdDY3OTE6CisJY2FzZSBuY3Q2NzkyOgogCQlyZXR1cm4gcmVnID09IDB4MTUwIHx8IHJlZyA9PSAweDE1MyB8fCByZWcgPT0gMHgxNTUgfHwKIAkJICAoKHJlZyAmIDB4ZmZmMCkgPT0gMHg0YjAgJiYgKHJlZyAmIDB4MDAwZikgPCAweDBiKSB8fAogCQkgIHJlZyA9PSAweDQwMiB8fAogCQkgIHJlZyA9PSAweDYzYSB8fCByZWcgPT0gMHg2M2MgfHwgcmVnID09IDB4NjNlIHx8CiAJCSAgcmVnID09IDB4NjQwIHx8IHJlZyA9PSAweDY0MiB8fAogCQkgIHJlZyA9PSAweDczIHx8IHJlZyA9PSAweDc1IHx8IHJlZyA9PSAweDc3IHx8IHJlZyA9PSAweDc5IHx8Ci0JCSAgcmVnID09IDB4N2I7CisJCSAgcmVnID09IDB4N2IgfHwgcmVnID09IDB4N2Q7CiAJfQogCXJldHVybiBmYWxzZTsKIH0KQEAgLTEwNjMsNiArMTA3Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbmN0Njc3NV9zZXRfYmFuayhzdHJ1Y3QgbmN0Njc3NV9kYXRhICpkYXRhLCB1MTYgcmVnKQogewogCXU4IGJhbmsgPSByZWcgPj4gODsKKwogCWlmIChkYXRhLT5iYW5rICE9IGJhbmspIHsKIAkJb3V0Yl9wKE5DVDY3NzVfUkVHX0JBTkssIGRhdGEtPmFkZHIgKyBBRERSX1JFR19PRkZTRVQpOwogCQlvdXRiX3AoYmFuaywgZGF0YS0+YWRkciArIERBVEFfUkVHX09GRlNFVCk7CkBAIC0xMzAwLDYgKzEzMTEsNyBAQAogCQlpZiAoIWRhdGEtPnRhcmdldF9zcGVlZF90b2xlcmFuY2VbaV0gfHwKIAkJICAgIGRhdGEtPnB3bV9lbmFibGVbaV0gPT0gc3BlZWRfY3J1aXNlKSB7CiAJCQl1OCB0ID0gZmFubW9kZWNmZyAmIDB4MGY7CisKIAkJCWlmIChkYXRhLT5SRUdfVE9MRVJBTkNFX0gpIHsKIAkJCQl0IHw9IChuY3Q2Nzc1X3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkgICAgICBkYXRhLT5SRUdfVE9MRVJBTkNFX0hbaV0pICYgMHg3MCkgPj4gMTsKQEAgLTEzOTEsNiArMTQwMyw3IEBACiAJCWNhc2UgbmN0NjEwNjoKIAkJY2FzZSBuY3Q2Nzc5OgogCQljYXNlIG5jdDY3OTE6CisJCWNhc2UgbmN0Njc5MjoKIAkJCXJlZyA9IG5jdDY3NzVfcmVhZF92YWx1ZShkYXRhLAogCQkJCQlkYXRhLT5SRUdfQ1JJVElDQUxfUFdNX0VOQUJMRVtpXSk7CiAJCQlpZiAocmVnICYgZGF0YS0+Q1JJVElDQUxfUFdNX0VOQUJMRV9NQVNLKQpAQCAtMTQ3Myw2ICsxNDg2LDcgQEAKIAkJZGF0YS0+YWxhcm1zID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IE5VTV9SRUdfQUxBUk07IGkrKykgewogCQkJdTggYWxhcm07CisKIAkJCWlmICghZGF0YS0+UkVHX0FMQVJNW2ldKQogCQkJCWNvbnRpbnVlOwogCQkJYWxhcm0gPSBuY3Q2Nzc1X3JlYWRfdmFsdWUoZGF0YSwgZGF0YS0+UkVHX0FMQVJNW2ldKTsKQEAgLTE0ODIsNiArMTQ5Niw3IEBACiAJCWRhdGEtPmJlZXBzID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IE5VTV9SRUdfQkVFUDsgaSsrKSB7CiAJCQl1OCBiZWVwOworCiAJCQlpZiAoIWRhdGEtPlJFR19CRUVQW2ldKQogCQkJCWNvbnRpbnVlOwogCQkJYmVlcCA9IG5jdDY3NzVfcmVhZF92YWx1ZShkYXRhLCBkYXRhLT5SRUdfQkVFUFtpXSk7CkBAIC0xNTA0LDggKzE1MTksOSBAQAogewogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBuY3Q2Nzc1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKLQlpbnQgbnIgPSBzYXR0ci0+bnI7CiAJaW50IGluZGV4ID0gc2F0dHItPmluZGV4OworCWludCBuciA9IHNhdHRyLT5ucjsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgaW5fZnJvbV9yZWcoZGF0YS0+aW5bbnJdW2luZGV4XSwgbnIpKTsKIH0KIApAQCAtMTUxNSwxMCArMTUzMSwxMiBAQAogewogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKLQlpbnQgbnIgPSBzYXR0ci0+bnI7CiAJaW50IGluZGV4ID0gc2F0dHItPmluZGV4OworCWludCBuciA9IHNhdHRyLT5ucjsKIAl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaW50IGVycjsKKworCWVyciA9IGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTE1MzUsNiArMTU1Myw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gZGF0YS0+QUxBUk1fQklUU1tzYXR0ci0+aW5kZXhdOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsCiAJCSAgICAgICAodW5zaWduZWQgaW50KSgoZGF0YS0+YWxhcm1zID4+IG5yKSAmIDB4MDEpKTsKIH0KQEAgLTE1NzAsNiArMTU4OSw3IEBACiAJbnIgPSBmaW5kX3RlbXBfc291cmNlKGRhdGEsIHNhdHRyLT5pbmRleCwgZGF0YS0+bnVtX3RlbXBfYWxhcm1zKTsKIAlpZiAobnIgPj0gMCkgewogCQlpbnQgYml0ID0gZGF0YS0+QUxBUk1fQklUU1tuciArIFRFTVBfQUxBUk1fQkFTRV07CisKIAkJYWxhcm0gPSAoZGF0YS0+YWxhcm1zID4+IGJpdCkgJiAweDAxOwogCX0KIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYWxhcm0pOwpAQCAtMTU5NSw4ICsxNjE1LDkgQEAKIAlpbnQgbnIgPSBkYXRhLT5CRUVQX0JJVFNbc2F0dHItPmluZGV4XTsKIAlpbnQgcmVnaW5kZXggPSBuciA+PiAzOwogCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBlcnI7CiAKLQlpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJaWYgKHZhbCA+IDEpCkBAIC0xNjI5LDYgKzE2NTAsNyBAQAogCW5yID0gZmluZF90ZW1wX3NvdXJjZShkYXRhLCBzYXR0ci0+aW5kZXgsIGRhdGEtPm51bV90ZW1wX2JlZXBzKTsKIAlpZiAobnIgPj0gMCkgewogCQlpbnQgYml0ID0gZGF0YS0+QkVFUF9CSVRTW25yICsgVEVNUF9BTEFSTV9CQVNFXTsKKwogCQliZWVwID0gKGRhdGEtPmJlZXBzID4+IGJpdCkgJiAweDAxOwogCX0KIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYmVlcCk7CkBAIC0xNjQyLDggKzE2NjQsOSBAQAogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgbnIsIGJpdCwgcmVnaW5kZXg7CiAJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGVycjsKIAotCWludCBlcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwllcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlpZiAodmFsID4gMSkKQEAgLTE3MTUsNiArMTczOCw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnJwbVtucl0pOwogfQogCkBAIC0xNzI0LDYgKzE3NDgsNyBAQAogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBuY3Q2Nzc1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwogCWludCBuciA9IHNhdHRyLT5pbmRleDsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAogCQkgICAgICAgZGF0YS0+ZmFuX2Zyb21fcmVnX21pbihkYXRhLT5mYW5fbWluW25yXSwKIAkJCQkJICAgICAgZGF0YS0+ZmFuX2Rpdltucl0pKTsKQEAgLTE3MzUsNiArMTc2MCw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRpdl9mcm9tX3JlZyhkYXRhLT5mYW5fZGl2W25yXSkpOwogfQogCkBAIC0xNzQ2LDkgKzE3NzIsOSBAQAogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OwogCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCBlcnI7CiAJdW5zaWduZWQgaW50IHJlZzsKIAl1OCBuZXdfZGl2OworCWludCBlcnI7CiAKIAllcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE5MzIsNiArMTk1OCw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPnRlbXBfbGFiZWxbZGF0YS0+dGVtcF9zcmNbbnJdXSk7CiB9CiAKQEAgLTIwMDgsNiArMjAzNSw3IEBACiAJc3RydWN0IG5jdDY3NzVfZGF0YSAqZGF0YSA9IG5jdDY3NzVfdXBkYXRlX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2F0dHItPmluZGV4OworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpZGF0YS0+dGVtcF90eXBlW25yXSk7CiB9CiAKQEAgLTI3OTAsNiArMjgxOCw3IEBACiAJCWNhc2UgbmN0NjEwNjoKIAkJY2FzZSBuY3Q2Nzc5OgogCQljYXNlIG5jdDY3OTE6CisJCWNhc2UgbmN0Njc5MjoKIAkJCW5jdDY3NzVfd3JpdGVfdmFsdWUoZGF0YSwgZGF0YS0+UkVHX0NSSVRJQ0FMX1BXTVtucl0sCiAJCQkJCSAgICB2YWwpOwogCQkJcmVnID0gbmN0Njc3NV9yZWFkX3ZhbHVlKGRhdGEsCkBAIC0yOTk3LDYgKzMwMjYsNyBAQAogc2hvd192aWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuY3Q2Nzc1X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2aWRfZnJvbV9yZWcoZGF0YS0+dmlkLCBkYXRhLT52cm0pKTsKIH0KIApAQCAtMzIwMiw3ICszMjMyLDcgQEAKIAkJcHdtNHBpbiA9IGZhbHNlOwogCQlwd201cGluID0gZmFsc2U7CiAJCXB3bTZwaW4gPSBmYWxzZTsKLQl9IGVsc2UgewkvKiBOQ1Q2Nzc5RCBvciBOQ1Q2NzkxRCAqLworCX0gZWxzZSB7CS8qIE5DVDY3NzlELCBOQ1Q2NzkxRCwgb3IgTkNUNjc5MkQgKi8KIAkJcmVndmFsID0gc3VwZXJpb19pbmIoc2lvcmVnLCAweDFjKTsKIAogCQlmYW4zcGluID0gIShyZWd2YWwgJiAoMSA8PCA1KSk7CkBAIC0zMjE1LDcgKzMyNDUsNyBAQAogCiAJCWZhbjRtaW4gPSBmYW40cGluOwogCi0JCWlmIChkYXRhLT5raW5kID09IG5jdDY3OTEpIHsKKwkJaWYgKGRhdGEtPmtpbmQgPT0gbmN0Njc5MSB8fCBkYXRhLT5raW5kID09IG5jdDY3OTIpIHsKIAkJCXJlZ3ZhbCA9IHN1cGVyaW9faW5iKHNpb3JlZywgMHgyZCk7CiAJCQlmYW42cGluID0gKHJlZ3ZhbCAmICgxIDw8IDEpKTsKIAkJCXB3bTZwaW4gPSAocmVndmFsICYgKDEgPDwgMCkpOwpAQCAtMzU4OCw2ICszNjE4LDcgQEAKIAogCQlicmVhazsKIAljYXNlIG5jdDY3OTE6CisJY2FzZSBuY3Q2NzkyOgogCQlkYXRhLT5pbl9udW0gPSAxNTsKIAkJZGF0YS0+cHdtX251bSA9IDY7CiAJCWRhdGEtPmF1dG9fcHdtX251bSA9IDQ7CkBAIC0zNjUwLDEyICszNjgxLDIwIEBACiAJCWRhdGEtPlJFR19XRUlHSFRfVEVNUFsxXSA9IE5DVDY3OTFfUkVHX1dFSUdIVF9URU1QX1NURVBfVE9MOwogCQlkYXRhLT5SRUdfV0VJR0hUX1RFTVBbMl0gPSBOQ1Q2NzkxX1JFR19XRUlHSFRfVEVNUF9CQVNFOwogCQlkYXRhLT5SRUdfQUxBUk0gPSBOQ1Q2NzkxX1JFR19BTEFSTTsKLQkJZGF0YS0+UkVHX0JFRVAgPSBOQ1Q2Nzc2X1JFR19CRUVQOworCQlpZiAoZGF0YS0+a2luZCA9PSBuY3Q2NzkxKQorCQkJZGF0YS0+UkVHX0JFRVAgPSBOQ1Q2Nzc2X1JFR19CRUVQOworCQllbHNlCisJCQlkYXRhLT5SRUdfQkVFUCA9IE5DVDY3OTJfUkVHX0JFRVA7CiAKIAkJcmVnX3RlbXAgPSBOQ1Q2Nzc5X1JFR19URU1QOwotCQlyZWdfdGVtcF9tb24gPSBOQ1Q2Nzc5X1JFR19URU1QX01PTjsKIAkJbnVtX3JlZ190ZW1wID0gQVJSQVlfU0laRShOQ1Q2Nzc5X1JFR19URU1QKTsKLQkJbnVtX3JlZ190ZW1wX21vbiA9IEFSUkFZX1NJWkUoTkNUNjc3OV9SRUdfVEVNUF9NT04pOworCQlpZiAoZGF0YS0+a2luZCA9PSBuY3Q2NzkxKSB7CisJCQlyZWdfdGVtcF9tb24gPSBOQ1Q2Nzc5X1JFR19URU1QX01PTjsKKwkJCW51bV9yZWdfdGVtcF9tb24gPSBBUlJBWV9TSVpFKE5DVDY3NzlfUkVHX1RFTVBfTU9OKTsKKwkJfSBlbHNlIHsKKwkJCXJlZ190ZW1wX21vbiA9IE5DVDY3OTJfUkVHX1RFTVBfTU9OOworCQkJbnVtX3JlZ190ZW1wX21vbiA9IEFSUkFZX1NJWkUoTkNUNjc5Ml9SRUdfVEVNUF9NT04pOworCQl9CiAJCXJlZ190ZW1wX292ZXIgPSBOQ1Q2Nzc5X1JFR19URU1QX09WRVI7CiAJCXJlZ190ZW1wX2h5c3QgPSBOQ1Q2Nzc5X1JFR19URU1QX0hZU1Q7CiAJCXJlZ190ZW1wX2NvbmZpZyA9IE5DVDY3NzlfUkVHX1RFTVBfQ09ORklHOwpAQCAtMzg1NCw2ICszODkzLDcgQEAKIAljYXNlIG5jdDYxMDY6CiAJY2FzZSBuY3Q2Nzc5OgogCWNhc2UgbmN0Njc5MToKKwljYXNlIG5jdDY3OTI6CiAJCWJyZWFrOwogCX0KIApAQCAtMzg4NSw2ICszOTI1LDcgQEAKIAkJCXRtcCB8PSAweDNlOwogCQkJYnJlYWs7CiAJCWNhc2UgbmN0Njc5MToKKwkJY2FzZSBuY3Q2NzkyOgogCQkJdG1wIHw9IDB4N2U7CiAJCQlicmVhazsKIAkJfQpAQCAtMzk3Miw3ICs0MDEzLDcgQEAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+YmFuayA9IDB4ZmY7CQkvKiBGb3JjZSBpbml0aWFsIGJhbmsgc2VsZWN0aW9uICovCiAKLQlpZiAoZGF0YS0+a2luZCA9PSBuY3Q2NzkxKSB7CisJaWYgKGRhdGEtPmtpbmQgPT0gbmN0Njc5MSB8fCBkYXRhLT5raW5kID09IG5jdDY3OTIpIHsKIAkJZXJyID0gc3VwZXJpb19lbnRlcihkYXRhLT5zaW9yZWcpOwogCQlpZiAoZXJyKQogCQkJZ290byBhYm9ydDsKQEAgLTQwNTIsNiArNDA5Myw3IEBACiAJIk5DVDY3NzZEL0YiLAogCSJOQ1Q2Nzc5RCIsCiAJIk5DVDY3OTFEIiwKKwkiTkNUNjc5MkQiLAogfTsKIAogLyogbmN0Njc3NV9maW5kKCkgbG9va3MgZm9yIGEgJzYyNyBpbiB0aGUgU3VwZXItSS9PIGNvbmZpZyBzcGFjZSAqLwpAQCAtNDA4Niw2ICs0MTI4LDkgQEAKIAljYXNlIFNJT19OQ1Q2NzkxX0lEOgogCQlzaW9fZGF0YS0+a2luZCA9IG5jdDY3OTE7CiAJCWJyZWFrOworCWNhc2UgU0lPX05DVDY3OTJfSUQ6CisJCXNpb19kYXRhLT5raW5kID0gbmN0Njc5MjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKHZhbCAhPSAweGZmZmYpCiAJCQlwcl9kZWJ1ZygidW5zdXBwb3J0ZWQgY2hpcCBJRDogMHglMDR4XG4iLCB2YWwpOwpAQCAtNDExMSw3ICs0MTU2LDcgQEAKIAkJc3VwZXJpb19vdXRiKHNpb2FkZHIsIFNJT19SRUdfRU5BQkxFLCB2YWwgfCAweDAxKTsKIAl9CiAKLQlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gbmN0Njc5MSkKKwlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gbmN0Njc5MSB8fCBzaW9fZGF0YS0+a2luZCA9PSBuY3Q2NzkyKQogCQluY3Q2NzkxX2VuYWJsZV9pb19tYXBwaW5nKHNpb2FkZHIpOwogCiAJc3VwZXJpb19leGl0KHNpb2FkZHIpOwpAQCAtNDIyMSw3ICs0MjY2LDcgQEAKIH0KIAogTU9EVUxFX0FVVEhPUigiR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJOQ1Q2MTA2RC9OQ1Q2Nzc1Ri9OQ1Q2Nzc2Ri9OQ1Q2Nzc5RC9OQ1Q2NzkxRCBkcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTkNUNjEwNkQvTkNUNjc3NUYvTkNUNjc3NkYvTkNUNjc3OUQvTkNUNjc5MUQvTkNUNjc5MkQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHNlbnNvcnNfbmN0Njc3NV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbmN0NzgwMi5jIGIvZHJpdmVycy9od21vbi9uY3Q3ODAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1Njc4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vbmN0NzgwMi5jCkBAIC0wLDAgKzEsODYwIEBACisvKgorICogbmN0NzgwMiAtIERyaXZlciBmb3IgTnV2b3RvbiBOQ1Q3ODAyWQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCAgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBEUlZOQU1FICJuY3Q3ODAyIgorCitzdGF0aWMgY29uc3QgdTggUkVHX1ZPTFRBR0VbNV0gPSB7IDB4MDksIDB4MGEsIDB4MGMsIDB4MGQsIDB4MGUgfTsKKworc3RhdGljIGNvbnN0IHU4IFJFR19WT0xUQUdFX0xJTUlUX0xTQlsyXVs1XSA9IHsKKwl7IDB4NDAsIDB4MDAsIDB4NDIsIDB4NDQsIDB4NDYgfSwKKwl7IDB4M2YsIDB4MDAsIDB4NDEsIDB4NDMsIDB4NDUgfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBSRUdfVk9MVEFHRV9MSU1JVF9NU0JbNV0gPSB7IDB4NDgsIDB4MDAsIDB4NDcsIDB4NDcsIDB4NDggfTsKKworc3RhdGljIGNvbnN0IHU4IFJFR19WT0xUQUdFX0xJTUlUX01TQl9TSElGVFsyXVs1XSA9IHsKKwl7IDAsIDAsIDQsIDAsIDQgfSwKKwl7IDIsIDAsIDYsIDIsIDYgfSwKK307CisKKyNkZWZpbmUgUkVHX0JBTksJCTB4MDAKKyNkZWZpbmUgUkVHX1RFTVBfTFNCCQkweDA1CisjZGVmaW5lIFJFR19URU1QX1BFQ0lfTFNCCTB4MDgKKyNkZWZpbmUgUkVHX1ZPTFRBR0VfTE9XCQkweDBmCisjZGVmaW5lIFJFR19GQU5DT1VOVF9MT1cJMHgxMworI2RlZmluZSBSRUdfU1RBUlQJCTB4MjEKKyNkZWZpbmUgUkVHX01PREUJCTB4MjIKKyNkZWZpbmUgUkVHX1BFQ0lfRU5BQkxFCQkweDIzCisjZGVmaW5lIFJFR19GQU5fRU5BQkxFCQkweDI0CisjZGVmaW5lIFJFR19WTU9OX0VOQUJMRQkJMHgyNQorI2RlZmluZSBSRUdfVkVORE9SX0lECQkweGZkCisjZGVmaW5lIFJFR19DSElQX0lECQkweGZlCisjZGVmaW5lIFJFR19WRVJTSU9OX0lECQkweGZmCisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZXMgYW5kIG1hbmlwdWxhdGlvbiB0aGVyZW9mCisgKi8KKworc3RydWN0IG5jdDc4MDJfZGF0YSB7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCBtdXRleCBhY2Nlc3NfbG9jazsgLyogZm9yIG11bHRpLWJ5dGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyAqLworfTsKKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfdGVtcChzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLAorCQkJICAgICB1OCByZWdfdGVtcCwgdTggcmVnX3RlbXBfbG93LCBpbnQgKnRlbXApCit7CisJdW5zaWduZWQgaW50IHQxLCB0MiA9IDA7CisJaW50IGVycjsKKworCSp0ZW1wID0gMDsKKworCW11dGV4X2xvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIHJlZ190ZW1wLCAmdDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGFib3J0OworCXQxIDw8PSA4OworCWlmIChyZWdfdGVtcF9sb3cpIHsJLyogMTEgYml0IGRhdGEgKi8KKwkJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCByZWdfdGVtcF9sb3csICZ0Mik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBhYm9ydDsKKwl9CisJdDEgfD0gdDIgJiAweGUwOworCSp0ZW1wID0gKHMxNil0MSAvIDMyICogMTI1OworYWJvcnQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfZmFuKHN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEsIHU4IHJlZ19mYW4pCit7CisJdW5zaWduZWQgaW50IGYxLCBmMjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+YWNjZXNzX2xvY2spOworCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgcmVnX2ZhbiwgJmYxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBhYm9ydDsKKwlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19GQU5DT1VOVF9MT1csICZmMik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYWJvcnQ7CisJcmV0ID0gKGYxIDw8IDUpIHwgKGYyID4+IDMpOworCS8qIGNvbnZlcnQgZmFuIGNvdW50IHRvIHJwbSAqLworCWlmIChyZXQgPT0gMHgxZmZmKQkvKiBtYXhpbXVtIHZhbHVlLCBhc3N1bWUgZmFuIGlzIHN0b3BwZWQgKi8KKwkJcmV0ID0gMDsKKwllbHNlIGlmIChyZXQpCisJCXJldCA9IERJVl9ST1VORF9DTE9TRVNUKDEzNTAwMDBVLCByZXQpOworYWJvcnQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfZmFuX21pbihzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCB1OCByZWdfZmFuX2xvdywKKwkJCQl1OCByZWdfZmFuX2hpZ2gpCit7CisJdW5zaWduZWQgaW50IGYxLCBmMjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+YWNjZXNzX2xvY2spOworCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgcmVnX2Zhbl9sb3csICZmMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYWJvcnQ7CisJcmV0ID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCByZWdfZmFuX2hpZ2gsICZmMik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYWJvcnQ7CisJcmV0ID0gZjEgfCAoKGYyICYgMHhmOCkgPDwgNSk7CisJLyogY29udmVydCBmYW4gY291bnQgdG8gcnBtICovCisJaWYgKHJldCA9PSAweDFmZmYpCS8qIG1heGltdW0gdmFsdWUsIGFzc3VtZSBubyBsaW1pdCAqLworCQlyZXQgPSAwOworCWVsc2UgaWYgKHJldCkKKwkJcmV0ID0gRElWX1JPVU5EX0NMT1NFU1QoMTM1MDAwMFUsIHJldCk7CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5jdDc4MDJfd3JpdGVfZmFuX21pbihzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCB1OCByZWdfZmFuX2xvdywKKwkJCQkgdTggcmVnX2Zhbl9oaWdoLCB1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJaW50IGVycjsKKworCWlmIChsaW1pdCkKKwkJbGltaXQgPSBESVZfUk9VTkRfQ0xPU0VTVCgxMzUwMDAwVSwgbGltaXQpOworCWVsc2UKKwkJbGltaXQgPSAweDFmZmY7CisJbGltaXQgPSBjbGFtcF92YWwobGltaXQsIDAsIDB4MWZmZik7CisKKwltdXRleF9sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJZXJyID0gcmVnbWFwX3dyaXRlKGRhdGEtPnJlZ21hcCwgcmVnX2Zhbl9sb3csIGxpbWl0ICYgMHhmZik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gYWJvcnQ7CisKKwllcnIgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCByZWdfZmFuX2hpZ2gsIChsaW1pdCAmIDB4MWYwMCkgPj4gNSk7CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdTggbmN0NzgwMl92bXVsW10gPSB7IDQsIDIsIDIsIDIsIDIgfTsKKworc3RhdGljIGludCBuY3Q3ODAyX3JlYWRfdm9sdGFnZShzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCBpbnQgbnIsIGludCBpbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgdjEsIHYyOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT5hY2Nlc3NfbG9jayk7CisJaWYgKGluZGV4ID09IDApIHsJLyogdm9sdGFnZSAqLworCQlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19WT0xUQUdFW25yXSwgJnYxKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGFib3J0OworCQlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19WT0xUQUdFX0xPVywgJnYyKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGFib3J0OworCQlyZXQgPSAoKHYxIDw8IDIpIHwgKHYyID4+IDYpKSAqIG5jdDc4MDJfdm11bFtucl07CisJfSAgZWxzZSB7CS8qIGxpbWl0ICovCisJCWludCBzaGlmdCA9IDggLSBSRUdfVk9MVEFHRV9MSU1JVF9NU0JfU0hJRlRbaW5kZXggLSAxXVtucl07CisKKwkJcmV0ID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLAorCQkJCSAgUkVHX1ZPTFRBR0VfTElNSVRfTFNCW2luZGV4IC0gMV1bbnJdLCAmdjEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gYWJvcnQ7CisJCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgUkVHX1ZPTFRBR0VfTElNSVRfTVNCW25yXSwKKwkJCQkgICZ2Mik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBhYm9ydDsKKwkJcmV0ID0gKHYxIHwgKCh2MiA8PCBzaGlmdCkgJiAweDMwMCkpICogbmN0NzgwMl92bXVsW25yXTsKKwl9CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5jdDc4MDJfd3JpdGVfdm9sdGFnZShzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhLCBpbnQgbnIsIGludCBpbmRleCwKKwkJCQkgdW5zaWduZWQgaW50IHZvbHRhZ2UpCit7CisJaW50IHNoaWZ0ID0gOCAtIFJFR19WT0xUQUdFX0xJTUlUX01TQl9TSElGVFtpbmRleCAtIDFdW25yXTsKKwlpbnQgZXJyOworCisJdm9sdGFnZSA9IERJVl9ST1VORF9DTE9TRVNUKHZvbHRhZ2UsIG5jdDc4MDJfdm11bFtucl0pOworCXZvbHRhZ2UgPSBjbGFtcF92YWwodm9sdGFnZSwgMCwgMHgzZmYpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+YWNjZXNzX2xvY2spOworCWVyciA9IHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsCisJCQkgICBSRUdfVk9MVEFHRV9MSU1JVF9MU0JbaW5kZXggLSAxXVtucl0sCisJCQkgICB2b2x0YWdlICYgMHhmZik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gYWJvcnQ7CisKKwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGF0YS0+cmVnbWFwLCBSRUdfVk9MVEFHRV9MSU1JVF9NU0JbbnJdLAorCQkJCSAweDAzMDAgPj4gc2hpZnQsICh2b2x0YWdlICYgMHgwMzAwKSA+PiBzaGlmdCk7CithYm9ydDoKKwltdXRleF91bmxvY2soJmRhdGEtPmFjY2Vzc19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCB2b2x0YWdlOworCisJdm9sdGFnZSA9IG5jdDc4MDJfcmVhZF92b2x0YWdlKGRhdGEsIHNhdHRyLT5uciwgc2F0dHItPmluZGV4KTsKKwlpZiAodm9sdGFnZSA8IDApCisJCXJldHVybiB2b2x0YWdlOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZvbHRhZ2UpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpbmRleCA9IHNhdHRyLT5pbmRleDsKKwlpbnQgbnIgPSBzYXR0ci0+bnI7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGVycjsKKworCWVyciA9IGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbmN0NzgwMl93cml0ZV92b2x0YWdlKGRhdGEsIG5yLCBpbmRleCwgdmFsKTsKKwlyZXR1cm4gZXJyID8gOiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgZXJyLCB0ZW1wOworCisJZXJyID0gbmN0NzgwMl9yZWFkX3RlbXAoZGF0YSwgc2F0dHItPm5yLCBzYXR0ci0+aW5kZXgsICZ0ZW1wKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IG5yID0gc2F0dHItPm5yOworCWxvbmcgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBrc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJdmFsID0gY2xhbXBfdmFsKERJVl9ST1VORF9DTE9TRVNUKHZhbCwgMTAwMCksIC0xMjgsIDEyNyk7CisKKwllcnIgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBuciwgdmFsICYgMHhmZik7CisJcmV0dXJuIGVyciA/IDogY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHNwZWVkOworCisJc3BlZWQgPSBuY3Q3ODAyX3JlYWRfZmFuKGRhdGEsIHNhdHRyLT5pbmRleCk7CisJaWYgKHNwZWVkIDwgMCkKKwkJcmV0dXJuIHNwZWVkOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHNwZWVkKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgc3BlZWQ7CisKKwlzcGVlZCA9IG5jdDc4MDJfcmVhZF9mYW5fbWluKGRhdGEsIHNhdHRyLT5uciwgc2F0dHItPmluZGV4KTsKKwlpZiAoc3BlZWQgPCAwKQorCQlyZXR1cm4gc3BlZWQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3BlZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZXJyOworCisJZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBuY3Q3ODAyX3dyaXRlX2Zhbl9taW4oZGF0YSwgc2F0dHItPm5yLCBzYXR0ci0+aW5kZXgsIHZhbCk7CisJcmV0dXJuIGVyciA/IDogY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgYml0ID0gc2F0dHItPmluZGV4OworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgc2F0dHItPm5yLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhISh2YWwgJiAoMSA8PCBiaXQpKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X2JlZXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgcmVndmFsOworCWludCBlcnI7CisKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIHNhdHRyLT5uciwgJnJlZ3ZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShyZWd2YWwgJiAoMSA8PCBzYXR0ci0+aW5kZXgpKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV9iZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNhdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAodmFsID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGF0YS0+cmVnbWFwLCBzYXR0ci0+bnIsIDEgPDwgc2F0dHItPmluZGV4LAorCQkJCSB2YWwgPyAxIDw8IHNhdHRyLT5pbmRleCA6IDApOworCXJldHVybiBlcnIgPyA6IGNvdW50OworfQorCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwMSwKKwkJCSAgICBSRUdfVEVNUF9MU0IpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDMxLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAsCisJCQkgICAgc3RvcmVfdGVtcCwgMHgzMCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfY3JpdCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDNhLCAwKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDB4MDIsCisJCQkgICAgUkVHX1RFTVBfTFNCKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9taW4sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAsCisJCQkgICAgc3RvcmVfdGVtcCwgMHgzMywgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzIsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX2NyaXQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAsCisJCQkgICAgc3RvcmVfdGVtcCwgMHgzYiwgMCk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAweDAzLAorCQkJICAgIFJFR19URU1QX0xTQik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzUsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDM0LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4M2MsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwNCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzcsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA0X21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDM2LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNF9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4M2QsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwNiwKKwkJCSAgICBSRUdfVEVNUF9QRUNJX0xTQik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4MzksIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA1X21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwKKwkJCSAgICBzdG9yZV90ZW1wLCAweDM4LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNV9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wLAorCQkJICAgIHN0b3JlX3RlbXAsIDB4M2UsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDZfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMHgwNywKKwkJCSAgICBSRUdfVEVNUF9QRUNJX0xTQik7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxOCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTgsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDE4LCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNF9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxOCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTgsIDQpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTksIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDE5LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxOSwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MTksIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA1X21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDE5LCA0KTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxYiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDFiLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDB4MWIsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA0X2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMHgxYiwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDVfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAweDFiLCA0KTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAweDE3LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMHgxNywgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDNfZmF1bHQsIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MTcsIDIpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwKKwkJCSAgICBzdG9yZV9iZWVwLCAweDVjLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLAorCQkJICAgIHN0b3JlX2JlZXAsIDB4NWMsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2JlZXAsCisJCQkgICAgc3RvcmVfYmVlcCwgMHg1YywgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDRfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwKKwkJCSAgICBzdG9yZV9iZWVwLCAweDVjLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNV9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLAorCQkJICAgIHN0b3JlX2JlZXAsIDB4NWMsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA2X2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2JlZXAsCisJCQkgICAgc3RvcmVfYmVlcCwgMHg1YywgNSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpuY3Q3ODAyX3RlbXBfYXR0cnNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9iZWVwLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyLmF0dHIsCQkvKiA5ICovCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9iZWVwLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCQkvKiAxOCAqLworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9pbnB1dC5kZXZfYXR0ci5hdHRyLAkJLyogMjcgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAkJLyogMzUgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9pbnB1dC5kZXZfYXR0ci5hdHRyLAkJLyogNDMgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA2X2JlZXAuZGV2X2F0dHIuYXR0ciwKKworCU5VTEwKK307CisKK3N0YXRpYyB1bW9kZV90IG5jdDc4MDJfdGVtcF9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBuY3Q3ODAyX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCBlcnI7CisKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19NT0RFLCAmcmVnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW5kZXggPCA5ICYmCisJICAgIChyZWcgJiAwMykgIT0gMHgwMSAmJiAocmVnICYgMHgwMykgIT0gMHgwMikJCS8qIFJEMSAqLworCQlyZXR1cm4gMDsKKwlpZiAoaW5kZXggPj0gOSAmJiBpbmRleCA8IDE4ICYmCisJICAgIChyZWcgJiAweDBjKSAhPSAweDA0ICYmIChyZWcgJiAweDBjKSAhPSAweDA4KQkvKiBSRDIgKi8KKwkJcmV0dXJuIDA7CisJaWYgKGluZGV4ID49IDE4ICYmIGluZGV4IDwgMjcgJiYgKHJlZyAmIDB4MzApICE9IDB4MTApCS8qIFJEMyAqLworCQlyZXR1cm4gMDsKKwlpZiAoaW5kZXggPj0gMjcgJiYgaW5kZXggPCAzNSkJCQkJLyogbG9jYWwgKi8KKwkJcmV0dXJuIGF0dHItPm1vZGU7CisKKwllcnIgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIFJFR19QRUNJX0VOQUJMRSwgJnJlZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAwOworCisJaWYgKGluZGV4ID49IDM1ICYmIGluZGV4IDwgNDMgJiYgIShyZWcgJiAweDAxKSkJCS8qIFBFQ0kgMCAqLworCQlyZXR1cm4gMDsKKworCWlmIChpbmRleCA+PSAweDQzICYmICghKHJlZyAmIDB4MDIpKSkJCQkvKiBQRUNJIDEgKi8KKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXR0ci0+bW9kZTsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmN0NzgwMl90ZW1wX2dyb3VwID0geworCS5hdHRycyA9IG5jdDc4MDJfdGVtcF9hdHRycywKKwkuaXNfdmlzaWJsZSA9IG5jdDc4MDJfdGVtcF9pc192aXNpYmxlLAorfTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4wX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaW4sIHN0b3JlX2luLAorCQkJICAgIDAsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2luLCBzdG9yZV9pbiwKKwkJCSAgICAwLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjBfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWUsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLCBzdG9yZV9iZWVwLAorCQkJICAgIDB4NWEsIDMpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAxLCAwKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4yX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaW4sIHN0b3JlX2luLAorCQkJICAgIDIsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2luLCBzdG9yZV9pbiwKKwkJCSAgICAyLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWUsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9iZWVwLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19iZWVwLCBzdG9yZV9iZWVwLAorCQkJICAgIDB4NWEsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAzLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19pbiwgc3RvcmVfaW4sCisJCQkgICAgMywgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaW4sIHN0b3JlX2luLAorCQkJICAgIDMsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMHgxZSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2JlZXAsIHN0b3JlX2JlZXAsCisJCQkgICAgMHg1YSwgMSk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDQsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluNF9taW4sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2luLCBzdG9yZV9pbiwKKwkJCSAgICA0LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19pbiwgc3RvcmVfaW4sCisJCQkgICAgNCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW40X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAweDFlLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDVhLCAyKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5jdDc4MDJfaW5fYXR0cnNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwJLyogNSAqLworCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwJLyogNiAqLworCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfaW5wdXQuZGV2X2F0dHIuYXR0ciwJLyogMTEgKi8KKwkmc2Vuc29yX2Rldl9hdHRyX2luM19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2JlZXAuZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfaW40X2lucHV0LmRldl9hdHRyLmF0dHIsCS8qIDE3ICovCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9iZWVwLmRldl9hdHRyLmF0dHIsCisKKwlOVUxMLAorfTsKKworc3RhdGljIHVtb2RlX3QgbmN0NzgwMl9pbl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHJlZzsKKwlpbnQgZXJyOworCisJaWYgKGluZGV4IDwgNikJCQkJCQkvKiBWQ0MsIFZDT1JFICovCisJCXJldHVybiBhdHRyLT5tb2RlOworCisJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCBSRUdfTU9ERSwgJnJlZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAwOworCisJaWYgKGluZGV4ID49IDYgJiYgaW5kZXggPCAxMSAmJiAocmVnICYgMHgwMykgIT0gMHgwMykJLyogVlNFTjEgKi8KKwkJcmV0dXJuIDA7CisJaWYgKGluZGV4ID49IDExICYmIGluZGV4IDwgMTcgJiYgKHJlZyAmIDB4MGMpICE9IDB4MGMpCS8qIFZTRU4yICovCisJCXJldHVybiAwOworCWlmIChpbmRleCA+PSAxNyAmJiAocmVnICYgMHgzMCkgIT0gMHgzMCkJCS8qIFZTRU4zICovCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0dHItPm1vZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG5jdDc4MDJfaW5fZ3JvdXAgPSB7CisJLmF0dHJzID0gbmN0NzgwMl9pbl9hdHRycywKKwkuaXNfdmlzaWJsZSA9IG5jdDc4MDJfaW5faXNfdmlzaWJsZSwKK307CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDB4MTApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjFfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19mYW5fbWluLAorCQkJICAgIHN0b3JlX2Zhbl9taW4sIDB4NDksIDB4NGMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjFfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWEsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjFfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDViLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDB4MTEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjJfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19mYW5fbWluLAorCQkJICAgIHN0b3JlX2Zhbl9taW4sIDB4NGEsIDB4NGQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWEsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjJfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDViLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDB4MTIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19mYW5fbWluLAorCQkJICAgIHN0b3JlX2Zhbl9taW4sIDB4NGIsIDB4NGUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjNfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MWEsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGZhbjNfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmVlcCwgc3RvcmVfYmVlcCwKKwkJCSAgICAweDViLCAyKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5jdDc4MDJfZmFuX2F0dHJzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19iZWVwLmRldl9hdHRyLmF0dHIsCisKKwlOVUxMCit9OworCitzdGF0aWMgdW1vZGVfdCBuY3Q3ODAyX2Zhbl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBmYW4gPSBpbmRleCAvIDQ7CS8qIDQgYXR0cmlidXRlcyBwZXIgZmFuICovCisJdW5zaWduZWQgaW50IHJlZzsKKwlpbnQgZXJyOworCisJZXJyID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCBSRUdfRkFOX0VOQUJMRSwgJnJlZyk7CisJaWYgKGVyciA8IDAgfHwgIShyZWcgJiAoMSA8PCBmYW4pKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXR0ci0+bW9kZTsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmN0NzgwMl9mYW5fZ3JvdXAgPSB7CisJLmF0dHJzID0gbmN0NzgwMl9mYW5fYXR0cnMsCisJLmlzX3Zpc2libGUgPSBuY3Q3ODAyX2Zhbl9pc192aXNpYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm5jdDc4MDJfZ3JvdXBzW10gPSB7CisJJm5jdDc4MDJfdGVtcF9ncm91cCwKKwkmbmN0NzgwMl9pbl9ncm91cCwKKwkmbmN0NzgwMl9mYW5fZ3JvdXAsCisJTlVMTAorfTsKKworc3RhdGljIGludCBuY3Q3ODAyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit7CisJaW50IHJlZzsKKworCS8qCisJICogQ2hpcCBpZGVudGlmaWNhdGlvbiByZWdpc3RlcnMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIGJhbmsgMCwKKwkgKiBzbyBvbmx5IGF0dGVtcHQgY2hpcCBkZXRlY3Rpb24gaWYgYmFuayAwIGlzIHNlbGVjdGVkCisJICovCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0JBTkspOworCWlmIChyZWcgIT0gMHgwMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBSRUdfVkVORE9SX0lEKTsKKwlpZiAocmVnICE9IDB4NTApCisJCXJldHVybiAtRU5PREVWOworCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0NISVBfSUQpOworCWlmIChyZWcgIT0gMHhjMykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBSRUdfVkVSU0lPTl9JRCk7CisJaWYgKHJlZyA8IDAgfHwgKHJlZyAmIDB4ZjApICE9IDB4MjApCisJCXJldHVybiAtRU5PREVWOworCisJLyogQWxzbyB2YWxpZGF0ZSBsb3dlciBiaXRzIG9mIHZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlIHJlZ2lzdGVycyAqLworCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFJFR19URU1QX0xTQik7CisJaWYgKHJlZyA8IDAgfHwgKHJlZyAmIDB4MWYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFJFR19URU1QX1BFQ0lfTFNCKTsKKwlpZiAocmVnIDwgMCB8fCAocmVnICYgMHgzZikpCisJCXJldHVybiAtRU5PREVWOworCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1ZPTFRBR0VfTE9XKTsKKwlpZiAocmVnIDwgMCB8fCAocmVnICYgMHgzZikpCisJCXJldHVybiAtRU5PREVWOworCisJc3RybGNweShpbmZvLT50eXBlLCAibmN0NzgwMiIsIEkyQ19OQU1FX1NJWkUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBuY3Q3ODAyX3JlZ21hcF9pc192b2xhdGlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlZyAhPSBSRUdfQkFOSyAmJiByZWcgPD0gMHgyMDsKK30KKworc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIG5jdDc4MDJfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDgsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9SQlRSRUUsCisJLnZvbGF0aWxlX3JlZyA9IG5jdDc4MDJfcmVnbWFwX2lzX3ZvbGF0aWxlLAorfTsKKworc3RhdGljIGludCBuY3Q3ODAyX2luaXRfY2hpcChzdHJ1Y3QgbmN0NzgwMl9kYXRhICpkYXRhKQoreworCWludCBlcnI7CisKKwkvKiBFbmFibGUgQURDICovCisJZXJyID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGRhdGEtPnJlZ21hcCwgUkVHX1NUQVJULCAweDAxLCAweDAxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRW5hYmxlIGxvY2FsIHRlbXBlcmF0dXJlIHNlbnNvciAqLworCWVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhkYXRhLT5yZWdtYXAsIFJFR19NT0RFLCAweDQwLCAweDQwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRW5hYmxlIFZjb3JlIGFuZCBWQ0Mgdm9sdGFnZSBtb25pdG9yaW5nICovCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhkYXRhLT5yZWdtYXAsIFJFR19WTU9OX0VOQUJMRSwgMHgwMywgMHgwMyk7Cit9CisKK3N0YXRpYyBpbnQgbmN0NzgwMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CisJc3RydWN0IG5jdDc4MDJfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJaW50IHJldDsKKworCWRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgJm5jdDc4MDJfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihkYXRhLT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhLT5yZWdtYXApOworCisJbXV0ZXhfaW5pdCgmZGF0YS0+YWNjZXNzX2xvY2spOworCisJcmV0ID0gbmN0NzgwMl9pbml0X2NoaXAoZGF0YSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhkZXYsIGNsaWVudC0+bmFtZSwKKwkJCQkJCQkgICBkYXRhLAorCQkJCQkJCSAgIG5jdDc4MDJfZ3JvdXBzKTsKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGh3bW9uX2Rldik7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBuY3Q3ODAyX2FkZHJlc3NfbGlzdFtdID0geworCTB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5ECit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbmN0NzgwMl9pZHRhYmxlW10gPSB7CisJeyAibmN0NzgwMiIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbmN0NzgwMl9pZHRhYmxlKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG5jdDc4MDJfZHJpdmVyID0geworCS5jbGFzcyA9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSVk5BTUUsCisJfSwKKwkuZGV0ZWN0ID0gbmN0NzgwMl9kZXRlY3QsCisJLnByb2JlID0gbmN0NzgwMl9wcm9iZSwKKwkuaWRfdGFibGUgPSBuY3Q3ODAyX2lkdGFibGUsCisJLmFkZHJlc3NfbGlzdCA9IG5jdDc4MDJfYWRkcmVzc19saXN0LAorfTsKKworbW9kdWxlX2kyY19kcml2ZXIobmN0NzgwMl9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5DVDc4MDJZIEhhcmR3YXJlIE1vbml0b3JpbmcgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL0tjb25maWcKaW5kZXggNmUxZTQ5My4uYTY3NGNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wbWJ1cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvS2NvbmZpZwpAQCAtNDcsMTUgKzQ3LDIyIEBACiAJICBiZSBjYWxsZWQgbG0yNTA2Ni4KIAogY29uZmlnIFNFTlNPUlNfTFRDMjk3OAotCXRyaXN0YXRlICJMaW5lYXIgVGVjaG5vbG9naWVzIExUQzI5NzQsIExUQzI5NzgsIExUQzM4ODAsIGFuZCBMVEMzODgzIgorCXRyaXN0YXRlICJMaW5lYXIgVGVjaG5vbG9naWVzIExUQzI5NzggYW5kIGNvbXBhdGlibGVzIgogCWRlZmF1bHQgbgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQgZm9yIExpbmVhcgotCSAgVGVjaG5vbG9neSBMVEMyOTc0LCBMVEMyOTc4LCBMVEMzODgwLCBhbmQgTFRDMzg4My4KKwkgIFRlY2hub2xvZ3kgTFRDMjk3NCwgTFRDMjk3NywgTFRDMjk3OCwgTFRDMzg4MCwgTFRDMzg4MywgYW5kIExUTTQ2NzYuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgbHRjMjk3OC4KIAorY29uZmlnIFNFTlNPUlNfTFRDMjk3OF9SRUdVTEFUT1IKKwlib29sZWFuICJSZWd1bGF0b3Igc3VwcG9ydCBmb3IgTFRDMjk3OCBhbmQgY29tcGF0aWJsZXMiCisJZGVwZW5kcyBvbiBTRU5TT1JTX0xUQzI5NzggJiYgUkVHVUxBVE9SCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHJlZ3VsYXRvciBzdXBwb3J0IGZvciBMaW5lYXIKKwkgIFRlY2hub2xvZ3kgTFRDMjk3NCwgTFRDMjk3NywgTFRDMjk3OCwgTFRDMzg4MCwgTFRDMzg4MywgYW5kIExUTTQ2NzYuCisKIGNvbmZpZyBTRU5TT1JTX01BWDE2MDY0CiAJdHJpc3RhdGUgIk1heGltIE1BWDE2MDY0IgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wbWJ1cy9sdGMyOTc4LmMgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL2x0YzI5NzguYwppbmRleCBlMjRlZDUyLi4wODM1MDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3BtYnVzL2x0YzI5NzguYworKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL2x0YzI5NzguYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CiAjaW5jbHVkZSAicG1idXMuaCIKIAogZW51bSBjaGlwcyB7IGx0YzI5NzQsIGx0YzI5NzcsIGx0YzI5NzgsIGx0YzM4ODAsIGx0YzM4ODMsIGx0bTQ2NzYgfTsKQEAgLTM3NCw2ICszNzUsMTkgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbHRjMjk3OF9pZCk7CiAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TRU5TT1JTX0xUQzI5NzhfUkVHVUxBVE9SKQorc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBsdGMyOTc4X3JlZ19kZXNjW10gPSB7CisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMCksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMSksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMiksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgMyksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNCksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNSksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNiksCisJUE1CVVNfUkVHVUxBVE9SKCJ2b3V0IiwgNyksCit9OworI2VuZGlmIC8qIENPTkZJR19TRU5TT1JTX0xUQzI5NzhfUkVHVUxBVE9SICovCisKIHN0YXRpYyBpbnQgbHRjMjk3OF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTQ4NywxMyArNTAxLDM2IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU0VOU09SU19MVEMyOTc4X1JFR1VMQVRPUikKKwlpbmZvLT5udW1fcmVndWxhdG9ycyA9IGluZm8tPnBhZ2VzOworCWluZm8tPnJlZ19kZXNjID0gbHRjMjk3OF9yZWdfZGVzYzsKKwlpZiAoaW5mby0+bnVtX3JlZ3VsYXRvcnMgPiBBUlJBWV9TSVpFKGx0YzI5NzhfcmVnX2Rlc2MpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibnVtX3JlZ3VsYXRvcnMgdG9vIGxhcmdlISIpOworCQlpbmZvLT5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUobHRjMjk3OF9yZWdfZGVzYyk7CisJfQorI2VuZGlmCisKIAlyZXR1cm4gcG1idXNfZG9fcHJvYmUoY2xpZW50LCBpZCwgaW5mbyk7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGx0YzI5Nzhfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMjk3NCIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMjk3NyIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMjk3OCIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMzg4MCIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRjMzg4MyIgfSwKKwl7IC5jb21wYXRpYmxlID0gImxsdGMsbHRtNDY3NiIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBsdGMyOTc4X29mX21hdGNoKTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHRjMjk3OF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJICAgLm5hbWUgPSAibHRjMjk3OCIsCisJCSAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihsdGMyOTc4X29mX21hdGNoKSwKIAkJICAgfSwKIAkucHJvYmUgPSBsdGMyOTc4X3Byb2JlLAogCS5yZW1vdmUgPSBwbWJ1c19kb19yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzL3BtYnVzLmggYi9kcml2ZXJzL2h3bW9uL3BtYnVzL3BtYnVzLmgKaW5kZXggZmE5YmViMy4uODlhMjNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wbWJ1cy9wbWJ1cy5oCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXMuaApAQCAtMTksNiArMTksOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKwogI2lmbmRlZiBQTUJVU19ICiAjZGVmaW5lIFBNQlVTX0gKIApAQCAtMTg2LDYgKzE4OCwxMSBAQAogI2RlZmluZSBQTUJVU19WSVJUX1NUQVRVU19WTU9OCQkoUE1CVVNfVklSVF9CQVNFICsgMzUpCiAKIC8qCisgKiBPUEVSQVRJT04KKyAqLworI2RlZmluZSBQQl9PUEVSQVRJT05fQ09OVFJPTF9PTgkJKDE8PDcpCisKKy8qCiAgKiBDQVBBQklMSVRZCiAgKi8KICNkZWZpbmUgUEJfQ0FQQUJJTElUWV9TTUJBTEVSVAkJKDE8PDQpCkBAIC0zNjUsOCArMzcyLDI3IEBACiAJICovCiAJaW50ICgqaWRlbnRpZnkpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQlzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKmluZm8pOworCisJLyogUmVndWxhdG9yIGZ1bmN0aW9uYWxpdHksIGlmIHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgZHJpdmVyLiAqLworCWludCBudW1fcmVndWxhdG9yczsKKwljb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKnJlZ19kZXNjOwogfTsKIAorLyogUmVndWxhdG9yIG9wcyAqLworCitleHRlcm4gc3RydWN0IHJlZ3VsYXRvcl9vcHMgcG1idXNfcmVndWxhdG9yX29wczsKKworLyogTWFjcm8gZm9yIGZpbGxpbmcgaW4gYXJyYXkgb2Ygc3RydWN0IHJlZ3VsYXRvcl9kZXNjICovCisjZGVmaW5lIFBNQlVTX1JFR1VMQVRPUihfbmFtZSwgX2lkKQkJCQlcCisJW19pZF0gPSB7CQkJCQkJXAorCQkubmFtZSA9IChfbmFtZSAjIF9pZCksCQkJCVwKKwkJLmlkID0gKF9pZCksCQkJCQlcCisJCS5vZl9tYXRjaCA9IG9mX21hdGNoX3B0cihfbmFtZSAjIF9pZCksCQlcCisJCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJXAorCQkub3BzID0gJnBtYnVzX3JlZ3VsYXRvcl9vcHMsCQkJXAorCQkub3duZXIgPSBUSElTX01PRFVMRSwJCQkJXAorCX0KKwogLyogRnVuY3Rpb24gZGVjbGFyYXRpb25zICovCiAKIHZvaWQgcG1idXNfY2xlYXJfY2FjaGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CkBAIC0zNzUsNiArNDAxLDEwIEBACiBpbnQgcG1idXNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHBhZ2UsIHU4IHJlZywgdTE2IHdvcmQpOwogaW50IHBtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCB1OCByZWcpOwogaW50IHBtYnVzX3dyaXRlX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHZhbHVlKTsKK2ludCBwbWJ1c193cml0ZV9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHJlZywKKwkJCSAgdTggdmFsdWUpOworaW50IHBtYnVzX3VwZGF0ZV9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHJlZywKKwkJCSAgIHU4IG1hc2ssIHU4IHZhbHVlKTsKIHZvaWQgcG1idXNfY2xlYXJfZmF1bHRzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogYm9vbCBwbWJ1c19jaGVja19ieXRlX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKTsKIGJvb2wgcG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgaW50IHJlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzL3BtYnVzX2NvcmUuYyBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCmluZGV4IDI5MWQxMWYuLmYyZTQ3YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3BtYnVzLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSAicG1idXMuaCIKIAogLyoKQEAgLTI1Myw2ICsyNTUsMzcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX3JlYWRfYnl0ZV9kYXRhKTsKIAoraW50IHBtYnVzX3dyaXRlX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlpbnQgcnY7CisKKwlydiA9IHBtYnVzX3NldF9wYWdlKGNsaWVudCwgcGFnZSk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX3dyaXRlX2J5dGVfZGF0YSk7CisKK2ludCBwbWJ1c191cGRhdGVfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCB1OCByZWcsCisJCQkgICB1OCBtYXNrLCB1OCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCWludCBydjsKKworCXJ2ID0gcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLCByZWcpOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKKworCXRtcCA9IChydiAmIH5tYXNrKSB8ICh2YWx1ZSAmIG1hc2spOworCisJaWYgKHRtcCAhPSBydikKKwkJcnYgPSBwbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLCByZWcsIHRtcCk7CisKKwlyZXR1cm4gcnY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbWJ1c191cGRhdGVfYnl0ZV9kYXRhKTsKKwogLyoKICAqIF9wbWJ1c19yZWFkX2J5dGVfZGF0YSgpIGlzIHNpbWlsYXIgdG8gcG1idXNfcmVhZF9ieXRlX2RhdGEoKSwgYnV0IGNoZWNrcyBpZgogICogYSBkZXZpY2Ugc3BlY2lmaWMgbWFwcGluZyBmdW5jdGlvbiBleGlzdHMgYW5kIGNhbGxzIGl0IGlmIG5lY2Vzc2FyeS4KQEAgLTE3MjcsNiArMTc2MCw4NCBAQAogCXJldHVybiAwOwogfQogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfUkVHVUxBVE9SKQorc3RhdGljIGludCBwbWJ1c19yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByZGV2X2dldF9kZXYocmRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2LT5wYXJlbnQpOworCXU4IHBhZ2UgPSByZGV2X2dldF9pZChyZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLCBQTUJVU19PUEVSQVRJT04pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuICEhKHJldCAmIFBCX09QRVJBVElPTl9DT05UUk9MX09OKTsKK30KKworc3RhdGljIGludCBfcG1idXNfcmVndWxhdG9yX29uX29mZihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcmRldl9nZXRfZGV2KHJkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldi0+cGFyZW50KTsKKwl1OCBwYWdlID0gcmRldl9nZXRfaWQocmRldik7CisKKwlyZXR1cm4gcG1idXNfdXBkYXRlX2J5dGVfZGF0YShjbGllbnQsIHBhZ2UsIFBNQlVTX09QRVJBVElPTiwKKwkJCQkgICAgICBQQl9PUEVSQVRJT05fQ09OVFJPTF9PTiwKKwkJCQkgICAgICBlbmFibGUgPyBQQl9PUEVSQVRJT05fQ09OVFJPTF9PTiA6IDApOworfQorCitzdGF0aWMgaW50IHBtYnVzX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJcmV0dXJuIF9wbWJ1c19yZWd1bGF0b3Jfb25fb2ZmKHJkZXYsIDEpOworfQorCitzdGF0aWMgaW50IHBtYnVzX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXJldHVybiBfcG1idXNfcmVndWxhdG9yX29uX29mZihyZGV2LCAwKTsKK30KKworc3RydWN0IHJlZ3VsYXRvcl9vcHMgcG1idXNfcmVndWxhdG9yX29wcyA9IHsKKwkuZW5hYmxlID0gcG1idXNfcmVndWxhdG9yX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHBtYnVzX3JlZ3VsYXRvcl9kaXNhYmxlLAorCS5pc19lbmFibGVkID0gcG1idXNfcmVndWxhdG9yX2lzX2VuYWJsZWQsCit9OworRVhQT1JUX1NZTUJPTF9HUEwocG1idXNfcmVndWxhdG9yX29wcyk7CisKK3N0YXRpYyBpbnQgcG1idXNfcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCBwbWJ1c19kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGEtPmRldjsKKwljb25zdCBzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKmluZm8gPSBkYXRhLT5pbmZvOworCWNvbnN0IHN0cnVjdCBwbWJ1c19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fcmVndWxhdG9yczsgaSsrKSB7CisJCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKKworCQljb25maWcuZGV2ID0gZGV2OworCQljb25maWcuZHJpdmVyX2RhdGEgPSBkYXRhOworCisJCWlmIChwZGF0YSAmJiBwZGF0YS0+cmVnX2luaXRfZGF0YSkKKwkJCWNvbmZpZy5pbml0X2RhdGEgPSAmcGRhdGEtPnJlZ19pbml0X2RhdGFbaV07CisKKwkJcmRldiA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKGRldiwgJmluZm8tPnJlZ19kZXNjW2ldLAorCQkJCQkgICAgICAgJmNvbmZpZyk7CisJCWlmIChJU19FUlIocmRldikpIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyICVzIHJlZ3VsYXRvclxuIiwKKwkJCQlpbmZvLT5yZWdfZGVzY1tpXS5uYW1lKTsKKwkJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGludCBwbWJ1c19yZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogaW50IHBtYnVzX2RvX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCwKIAkJICAgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvKQogewpAQCAtMTc4MSw4ICsxODkyLDE1IEBACiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZVxuIik7CiAJCWdvdG8gb3V0X2tmcmVlOwogCX0KKworCXJldCA9IHBtYnVzX3JlZ3VsYXRvcl9yZWdpc3RlcihkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnJlZ2lzdGVyOworCiAJcmV0dXJuIDA7CiAKK291dF91bnJlZ2lzdGVyOgorCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiBvdXRfa2ZyZWU6CiAJa2ZyZWUoZGF0YS0+Z3JvdXAuYXR0cnMpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3RtcDQwMS5jIGIvZHJpdmVycy9od21vbi90bXA0MDEuYwppbmRleCA3ZmE2ZTdkLi45OTY2NGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3RtcDQwMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdG1wNDAxLmMKQEAgLTQ0LDkgKzQ0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NGMsIDB4NGQsIDB4NGUsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM3LCAweDQ4LCAweDQ5LCAweDRhLCAweDRjLCAweDRkLAorCTB4NGUsIDB4NGYsIEkyQ19DTElFTlRfRU5EIH07CiAKLWVudW0gY2hpcHMgeyB0bXA0MDEsIHRtcDQxMSwgdG1wNDMxLCB0bXA0MzIgfTsKK2VudW0gY2hpcHMgeyB0bXA0MDEsIHRtcDQxMSwgdG1wNDMxLCB0bXA0MzIsIHRtcDQzNSB9OwogCiAvKgogICogVGhlIFRNUDQwMSByZWdpc3RlcnMsIG5vdGUgc29tZSByZWdpc3RlcnMgaGF2ZSBkaWZmZXJlbnQgYWRkcmVzc2VzIGZvcgpAQCAtMTM2LDYgKzEzNyw3IEBACiAjZGVmaW5lIFRNUDQxMUNfREVWSUNFX0lECQkJMHgxMAogI2RlZmluZSBUTVA0MzFfREVWSUNFX0lECQkJMHgzMQogI2RlZmluZSBUTVA0MzJfREVWSUNFX0lECQkJMHgzMgorI2RlZmluZSBUTVA0MzVfREVWSUNFX0lECQkJMHgzNQogCiAvKgogICogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykKQEAgLTE0Niw2ICsxNDgsNyBAQAogCXsgInRtcDQxMSIsIHRtcDQxMSB9LAogCXsgInRtcDQzMSIsIHRtcDQzMSB9LAogCXsgInRtcDQzMiIsIHRtcDQzMiB9LAorCXsgInRtcDQzNSIsIHRtcDQzNSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0bXA0MDFfaWQpOwpAQCAtNjEzLDEwICs2MTYsMTAgQEAKICAqIEJlZ2luIG5vbiBzeXNmcyBjYWxsYmFjayBjb2RlIChha2EgUmVhbCBjb2RlKQogICovCiAKLXN0YXRpYyB2b2lkIHRtcDQwMV9pbml0X2NsaWVudChzdHJ1Y3QgdG1wNDAxX2RhdGEgKmRhdGEsCi0JCQkgICAgICAgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdG1wNDAxX2luaXRfY2xpZW50KHN0cnVjdCB0bXA0MDFfZGF0YSAqZGF0YSwKKwkJCSAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaW50IGNvbmZpZywgY29uZmlnX29yaWc7CisJaW50IGNvbmZpZywgY29uZmlnX29yaWcsIHN0YXR1cyA9IDA7CiAKIAkvKiBTZXQgdGhlIGNvbnZlcnNpb24gcmF0ZSB0byAyIEh6ICovCiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFRNUDQwMV9DT05WRVJTSU9OX1JBVEVfV1JJVEUsIDUpOwpAQCAtNjI0LDE2ICs2MjcsMTggQEAKIAogCS8qIFN0YXJ0IGNvbnZlcnNpb25zIChkaXNhYmxlIHNodXRkb3duIGlmIG5lY2Vzc2FyeSkgKi8KIAljb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBUTVA0MDFfQ09ORklHX1JFQUQpOwotCWlmIChjb25maWcgPCAwKSB7Ci0JCWRldl93YXJuKCZjbGllbnQtPmRldiwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCFcbiIpOwotCQlyZXR1cm47Ci0JfQorCWlmIChjb25maWcgPCAwKQorCQlyZXR1cm4gY29uZmlnOwogCiAJY29uZmlnX29yaWcgPSBjb25maWc7CiAJY29uZmlnICY9IH5UTVA0MDFfQ09ORklHX1NIVVRET1dOOwogCiAJaWYgKGNvbmZpZyAhPSBjb25maWdfb3JpZykKLQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFRNUDQwMV9DT05GSUdfV1JJVEUsIGNvbmZpZyk7CisJCXN0YXR1cyA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJICAgVE1QNDAxX0NPTkZJR19XUklURSwKKwkJCQkJCSAgIGNvbmZpZyk7CisKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50IHRtcDQwMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKQEAgLTY3NSwxNSArNjgwLDE4IEBACiAJCWtpbmQgPSB0bXA0MTE7CiAJCWJyZWFrOwogCWNhc2UgVE1QNDMxX0RFVklDRV9JRDoKLQkJaWYgKGNsaWVudC0+YWRkciA9PSAweDRlKQorCQlpZiAoY2xpZW50LT5hZGRyICE9IDB4NGMgJiYgY2xpZW50LT5hZGRyICE9IDB4NGQpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJa2luZCA9IHRtcDQzMTsKIAkJYnJlYWs7CiAJY2FzZSBUTVA0MzJfREVWSUNFX0lEOgotCQlpZiAoY2xpZW50LT5hZGRyID09IDB4NGUpCisJCWlmIChjbGllbnQtPmFkZHIgIT0gMHg0YyAmJiBjbGllbnQtPmFkZHIgIT0gMHg0ZCkKIAkJCXJldHVybiAtRU5PREVWOwogCQlraW5kID0gdG1wNDMyOwogCQlicmVhazsKKwljYXNlIFRNUDQzNV9ERVZJQ0VfSUQ6CisJCWtpbmQgPSB0bXA0MzU7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTcwNSwxMSArNzEzLDEzIEBACiBzdGF0aWMgaW50IHRtcDQwMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJUTVA0MDEiLCAiVE1QNDExIiwgIlRNUDQzMSIsICJUTVA0MzIiIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lc1tdID0geworCQkiVE1QNDAxIiwgIlRNUDQxMSIsICJUTVA0MzEiLCAiVE1QNDMyIiwgIlRNUDQzNSIKKwl9OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiAJc3RydWN0IHRtcDQwMV9kYXRhICpkYXRhOwotCWludCBncm91cHMgPSAwOworCWludCBncm91cHMgPSAwLCBzdGF0dXM7CiAKIAlkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCB0bXA0MDFfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKQEAgLTcyMCw3ICs3MzAsOSBAQAogCWRhdGEtPmtpbmQgPSBpZC0+ZHJpdmVyX2RhdGE7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBUTVA0MDEgY2hpcCAqLwotCXRtcDQwMV9pbml0X2NsaWVudChkYXRhLCBjbGllbnQpOworCXN0YXR1cyA9IHRtcDQwMV9pbml0X2NsaWVudChkYXRhLCBjbGllbnQpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KIAlkYXRhLT5ncm91cHNbZ3JvdXBzKytdID0gJnRtcDQwMV9ncm91cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggOTE3YzM1OC4uYjRkMTM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTg4MSw2ICs4ODEsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1kaW9sYW4tdTJjLgogCitjb25maWcgSTJDX0RMTjIKKyAgICAgICB0cmlzdGF0ZSAiRGlvbGFuIERMTi0yIFVTQiBJMkMgYWRhcHRlciIKKyAgICAgICBkZXBlbmRzIG9uIE1GRF9ETE4yCisgICAgICAgaGVscAorCSBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciBEaW9sYW4KKwkgRExOMiwgYSBVU0IgdG8gSTJDIGludGVyZmFjZS4KKworCSBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJIHdpbGwgYmUgY2FsbGVkIGkyYy1kbG4yLgorCiBjb25maWcgSTJDX1BBUlBPUlQKIAl0cmlzdGF0ZSAiUGFyYWxsZWwgcG9ydCBhZGFwdGVyIgogCWRlcGVuZHMgb24gUEFSUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IDc4ZDU2YzUuLmNkYWM3ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTg3LDYgKzg3LDcgQEAKIAogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiBvYmotJChDT05GSUdfSTJDX0RJT0xBTl9VMkMpCSs9IGkyYy1kaW9sYW4tdTJjLm8KK29iai0kKENPTkZJR19JMkNfRExOMikJCSs9IGkyYy1kbG4yLm8KIG9iai0kKENPTkZJR19JMkNfUEFSUE9SVCkJKz0gaTJjLXBhcnBvcnQubwogb2JqLSQoQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUKQkrPSBpMmMtcGFycG9ydC1saWdodC5vCiBvYmotJChDT05GSUdfSTJDX1JPQk9URlVaWl9PU0lGKQkrPSBpMmMtcm9ib3RmdXp6LW9zaWYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1jYWRlbmNlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWNhZGVuY2UuYwppbmRleCA2M2YzZjAzLi5jNjA0ZjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWNhZGVuY2UuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWNhZGVuY2UuYwpAQCAtMTExLDYgKzExMSw4IEBACiAjZGVmaW5lIENETlNfSTJDX0RJVkFfTUFYCTQKICNkZWZpbmUgQ0ROU19JMkNfRElWQl9NQVgJNjQKIAorI2RlZmluZSBDRE5TX0kyQ19USU1FT1VUX01BWAkweEZGCisKICNkZWZpbmUgY2Ruc19pMmNfcmVhZHJlZyhvZmZzZXQpICAgICAgIHJlYWRsX3JlbGF4ZWQoaWQtPm1lbWJhc2UgKyBvZmZzZXQpCiAjZGVmaW5lIGNkbnNfaTJjX3dyaXRlcmVnKHZhbCwgb2Zmc2V0KSB3cml0ZWxfcmVsYXhlZCh2YWwsIGlkLT5tZW1iYXNlICsgb2Zmc2V0KQogCkBAIC04NTIsNiArODU0LDE1IEBACiAJCWdvdG8gZXJyX2Nsa19kaXM7CiAJfQogCisJLyoKKwkgKiBDYWRlbmNlIEkyQyBjb250cm9sbGVyIGhhcyBhIGJ1ZyB3aGVyZWluIGl0IGdlbmVyYXRlcworCSAqIGludmFsaWQgcmVhZCB0cmFuc2FjdGlvbiBhZnRlciBIVyB0aW1lb3V0IGluIG1hc3RlciByZWNlaXZlciBtb2RlLgorCSAqIEhXIHRpbWVvdXQgaXMgbm90IHVzZWQgYnkgdGhpcyBkcml2ZXIgYW5kIHRoZSBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisJICogQnV0IHRoZSBmZWF0dXJlIGl0c2VsZiBjYW5ub3QgYmUgZGlzYWJsZWQuIEhlbmNlIG1heGltdW0gdmFsdWUKKwkgKiBpcyB3cml0dGVuIHRvIHRoaXMgcmVnaXN0ZXIgdG8gcmVkdWNlIHRoZSBjaGFuY2VzIG9mIGVycm9yLgorCSAqLworCWNkbnNfaTJjX3dyaXRlcmVnKENETlNfSTJDX1RJTUVPVVRfTUFYLCBDRE5TX0kyQ19USU1FX09VVF9PRkZTRVQpOworCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIiV1IGtIeiBtbWlvICUwOGx4IGlycSAlZFxuIiwKIAkJIGlkLT5pMmNfY2xrIC8gMTAwMCwgKHVuc2lnbmVkIGxvbmcpcl9tZW0tPnN0YXJ0LCBpZC0+aXJxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kYXZpbmNpLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYwppbmRleCBkMTViN2M5Li4wMWYwY2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYwpAQCAtNDA3LDExICs0MDcsOSBAQAogCWlmIChkZXYtPmNtZF9lcnIgJiBEQVZJTkNJX0kyQ19TVFJfTkFDSykgewogCQlpZiAobXNnLT5mbGFncyAmIEkyQ19NX0lHTk9SRV9OQUspCiAJCQlyZXR1cm4gbXNnLT5sZW47Ci0JCWlmIChzdG9wKSB7Ci0JCQl3ID0gZGF2aW5jaV9pMmNfcmVhZF9yZWcoZGV2LCBEQVZJTkNJX0kyQ19NRFJfUkVHKTsKLQkJCXcgfD0gREFWSU5DSV9JMkNfTURSX1NUUDsKLQkJCWRhdmluY2lfaTJjX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfSTJDX01EUl9SRUcsIHcpOwotCQl9CisJCXcgPSBkYXZpbmNpX2kyY19yZWFkX3JlZyhkZXYsIERBVklOQ0lfSTJDX01EUl9SRUcpOworCQl3IHw9IERBVklOQ0lfSTJDX01EUl9TVFA7CisJCWRhdmluY2lfaTJjX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfSTJDX01EUl9SRUcsIHcpOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAl9CiAJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUtY29yZS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLWNvcmUuYwppbmRleCBlZGNhOTlkLi4yMzYyOGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1jb3JlLmMKQEAgLTM1OSw3ICszNTksNyBAQAogCX0KIAogCS8qIENvbmZpZ3VyZSBUeC9SeCBGSUZPIHRocmVzaG9sZCBsZXZlbHMgKi8KLQlkd193cml0ZWwoZGV2LCBkZXYtPnR4X2ZpZm9fZGVwdGggLSAxLCBEV19JQ19UWF9UTCk7CisJZHdfd3JpdGVsKGRldiwgZGV2LT50eF9maWZvX2RlcHRoIC8gMiwgRFdfSUNfVFhfVEwpOwogCWR3X3dyaXRlbChkZXYsIDAsIERXX0lDX1JYX1RMKTsKIAogCS8qIGNvbmZpZ3VyZSB0aGUgaTJjIG1hc3RlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kbG4yLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRsbjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ZiODZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kbG4yLmMKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBEaW9sYW4gRExOLTIgVVNCLUkyQyBhZGFwdGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogRGVyaXZlZCBmcm9tOgorICogIGkyYy1kaW9sYW4tdTJjLmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBFcmljc3NvbiBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGxuMi5oPgorCisjZGVmaW5lIERMTjJfSTJDX01PRFVMRV9JRAkJMHgwMworI2RlZmluZSBETE4yX0kyQ19DTUQoY21kKQkJRExOMl9DTUQoY21kLCBETE4yX0kyQ19NT0RVTEVfSUQpCisKKy8qIEkyQyBjb21tYW5kcyAqLworI2RlZmluZSBETE4yX0kyQ19HRVRfUE9SVF9DT1VOVAkJRExOMl9JMkNfQ01EKDB4MDApCisjZGVmaW5lIERMTjJfSTJDX0VOQUJMRQkJCURMTjJfSTJDX0NNRCgweDAxKQorI2RlZmluZSBETE4yX0kyQ19ESVNBQkxFCQlETE4yX0kyQ19DTUQoMHgwMikKKyNkZWZpbmUgRExOMl9JMkNfSVNfRU5BQkxFRAkJRExOMl9JMkNfQ01EKDB4MDMpCisjZGVmaW5lIERMTjJfSTJDX1dSSVRFCQkJRExOMl9JMkNfQ01EKDB4MDYpCisjZGVmaW5lIERMTjJfSTJDX1JFQUQJCQlETE4yX0kyQ19DTUQoMHgwNykKKyNkZWZpbmUgRExOMl9JMkNfU0NBTl9ERVZJQ0VTCQlETE4yX0kyQ19DTUQoMHgwOCkKKyNkZWZpbmUgRExOMl9JMkNfUFVMTFVQX0VOQUJMRQkJRExOMl9JMkNfQ01EKDB4MDkpCisjZGVmaW5lIERMTjJfSTJDX1BVTExVUF9ESVNBQkxFCQlETE4yX0kyQ19DTUQoMHgwQSkKKyNkZWZpbmUgRExOMl9JMkNfUFVMTFVQX0lTX0VOQUJMRUQJRExOMl9JMkNfQ01EKDB4MEIpCisjZGVmaW5lIERMTjJfSTJDX1RSQU5TRkVSCQlETE4yX0kyQ19DTUQoMHgwQykKKyNkZWZpbmUgRExOMl9JMkNfU0VUX01BWF9SRVBMWV9DT1VOVAlETE4yX0kyQ19DTUQoMHgwRCkKKyNkZWZpbmUgRExOMl9JMkNfR0VUX01BWF9SRVBMWV9DT1VOVAlETE4yX0kyQ19DTUQoMHgwRSkKKworI2RlZmluZSBETE4yX0kyQ19NQVhfWEZFUl9TSVpFCQkyNTYKKyNkZWZpbmUgRExOMl9JMkNfQlVGX1NJWkUJCShETE4yX0kyQ19NQVhfWEZFUl9TSVpFICsgMTYpCisKK3N0cnVjdCBkbG4yX2kyYyB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcHRlcjsKKwl1OCBwb3J0OworCS8qCisJICogQnVmZmVyIHRvIGhvbGQgdGhlIHBhY2tldCBmb3IgcmVhZCBvciB3cml0ZSB0cmFuc2ZlcnMuIE9uZSBpcyBlbm91Z2gKKwkgKiBzaW5jZSB3ZSBjYW4ndCBoYXZlIG11bHRpcGxlIHRyYW5zZmVycyBpbiBwYXJhbGxlbCBvbiB0aGUgaTJjIGJ1cy4KKwkgKi8KKwl2b2lkICpidWY7Cit9OworCitzdGF0aWMgaW50IGRsbjJfaTJjX2VuYWJsZShzdHJ1Y3QgZGxuMl9pMmMgKmRsbjIsIGJvb2wgZW5hYmxlKQoreworCXUxNiBjbWQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwl9IHR4OworCisJdHgucG9ydCA9IGRsbjItPnBvcnQ7CisKKwlpZiAoZW5hYmxlKQorCQljbWQgPSBETE4yX0kyQ19FTkFCTEU7CisJZWxzZQorCQljbWQgPSBETE4yX0kyQ19ESVNBQkxFOworCisJcmV0dXJuIGRsbjJfdHJhbnNmZXJfdHgoZGxuMi0+cGRldiwgY21kLCAmdHgsIHNpemVvZih0eCkpOworfQorCitzdGF0aWMgaW50IGRsbjJfaTJjX3dyaXRlKHN0cnVjdCBkbG4yX2kyYyAqZGxuMiwgdTggYWRkciwKKwkJCSAgdTggKmRhdGEsIHUxNiBkYXRhX2xlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB7CisJCXU4IHBvcnQ7CisJCXU4IGFkZHI7CisJCXU4IG1lbV9hZGRyX2xlbjsKKwkJX19sZTMyIG1lbV9hZGRyOworCQlfX2xlMTYgYnVmX2xlbjsKKwkJdTggYnVmW0RMTjJfSTJDX01BWF9YRkVSX1NJWkVdOworCX0gX19wYWNrZWQgKnR4ID0gZGxuMi0+YnVmOworCXVuc2lnbmVkIGxlbjsKKworCUJVSUxEX0JVR19PTihzaXplb2YoKnR4KSA+IERMTjJfSTJDX0JVRl9TSVpFKTsKKworCXR4LT5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC0+YWRkciA9IGFkZHI7CisJdHgtPm1lbV9hZGRyX2xlbiA9IDA7CisJdHgtPm1lbV9hZGRyID0gMDsKKwl0eC0+YnVmX2xlbiA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKwltZW1jcHkodHgtPmJ1ZiwgZGF0YSwgZGF0YV9sZW4pOworCisJbGVuID0gc2l6ZW9mKCp0eCkgKyBkYXRhX2xlbiAtIERMTjJfSTJDX01BWF9YRkVSX1NJWkU7CisJcmV0ID0gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX0kyQ19XUklURSwgdHgsIGxlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZGF0YV9sZW47Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9pMmNfcmVhZChzdHJ1Y3QgZGxuMl9pMmMgKmRsbjIsIHUxNiBhZGRyLCB1OCAqZGF0YSwKKwkJCSB1MTYgZGF0YV9sZW4pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgeworCQl1OCBwb3J0OworCQl1OCBhZGRyOworCQl1OCBtZW1fYWRkcl9sZW47CisJCV9fbGUzMiBtZW1fYWRkcjsKKwkJX19sZTE2IGJ1Zl9sZW47CisJfSBfX3BhY2tlZCB0eDsKKwlzdHJ1Y3QgeworCQlfX2xlMTYgYnVmX2xlbjsKKwkJdTggYnVmW0RMTjJfSTJDX01BWF9YRkVSX1NJWkVdOworCX0gX19wYWNrZWQgKnJ4ID0gZGxuMi0+YnVmOworCXVuc2lnbmVkIHJ4X2xlbiA9IHNpemVvZigqcngpOworCisJQlVJTERfQlVHX09OKHNpemVvZigqcngpID4gRExOMl9JMkNfQlVGX1NJWkUpOworCisJdHgucG9ydCA9IGRsbjItPnBvcnQ7CisJdHguYWRkciA9IGFkZHI7CisJdHgubWVtX2FkZHJfbGVuID0gMDsKKwl0eC5tZW1fYWRkciA9IDA7CisJdHguYnVmX2xlbiA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9JMkNfUkVBRCwgJnR4LCBzaXplb2YodHgpLAorCQkJICAgIHJ4LCAmcnhfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocnhfbGVuIDwgc2l6ZW9mKHJ4LT5idWZfbGVuKSArIGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKwlpZiAobGUxNl90b19jcHUocngtPmJ1Zl9sZW4pICE9IGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCW1lbWNweShkYXRhLCByeC0+YnVmLCBkYXRhX2xlbik7CisKKwlyZXR1cm4gZGF0YV9sZW47Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJc3RydWN0IGRsbjJfaTJjICpkbG4yID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgaTJjX21zZyAqcG1zZzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGxuMi0+YWRhcHRlci5kZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaW50IHJldDsKKworCQlwbXNnID0gJm1zZ3NbaV07CisKKwkJaWYgKHBtc2ctPmxlbiA+IERMTjJfSTJDX01BWF9YRkVSX1NJWkUpIHsKKwkJCWRldl93YXJuKGRldiwgIm1heGltdW0gdHJhbnNmZXIgc2l6ZSBleGNlZWRlZFxuIik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKworCQlpZiAocG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJcmV0ID0gZGxuMl9pMmNfcmVhZChkbG4yLCBwbXNnLT5hZGRyLCBwbXNnLT5idWYsCisJCQkJCSAgICBwbXNnLT5sZW4pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKworCQkJcG1zZy0+bGVuID0gcmV0OworCQl9IGVsc2UgeworCQkJcmV0ID0gZGxuMl9pMmNfd3JpdGUoZGxuMiwgcG1zZy0+YWRkciwgcG1zZy0+YnVmLAorCQkJCQkgICAgIHBtc2ctPmxlbik7CisJCQlpZiAocmV0ICE9IHBtc2ctPmxlbikKKwkJCQlyZXR1cm4gLUVQUk9UTzsKKwkJfQorCX0KKworCXJldHVybiBudW07Cit9CisKK3N0YXRpYyB1MzIgZGxuMl9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmEpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0JZVEUgfCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfAorCQlJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfCBJMkNfRlVOQ19TTUJVU19CTE9DS19QUk9DX0NBTEwgfAorCQlJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0s7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBkbG4yX2kyY191c2JfYWxnb3JpdGhtID0geworCS5tYXN0ZXJfeGZlciA9IGRsbjJfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBkbG4yX2kyY19mdW5jLAorfTsKKworc3RhdGljIGludCBkbG4yX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IGRsbjJfaTJjICpkbG4yOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRsbjJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCisJZGxuMiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGxuMiksIEdGUF9LRVJORUwpOworCWlmICghZGxuMikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkbG4yLT5idWYgPSBkZXZtX2ttYWxsb2MoZGV2LCBETE4yX0kyQ19CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbG4yLT5idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGxuMi0+cGRldiA9IHBkZXY7CisJZGxuMi0+cG9ydCA9IHBkYXRhLT5wb3J0OworCisJLyogc2V0dXAgaTJjIGFkYXB0ZXIgZGVzY3JpcHRpb24gKi8KKwlkbG4yLT5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7CisJZGxuMi0+YWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKKwlkbG4yLT5hZGFwdGVyLmFsZ28gPSAmZGxuMl9pMmNfdXNiX2FsZ29yaXRobTsKKwlkbG4yLT5hZGFwdGVyLmRldi5wYXJlbnQgPSBkZXY7CisJaTJjX3NldF9hZGFwZGF0YSgmZGxuMi0+YWRhcHRlciwgZGxuMik7CisJc25wcmludGYoZGxuMi0+YWRhcHRlci5uYW1lLCBzaXplb2YoZGxuMi0+YWRhcHRlci5uYW1lKSwgIiVzLSVzLSVkIiwKKwkJICJkbG4yLWkyYyIsIGRldl9uYW1lKHBkZXYtPmRldi5wYXJlbnQpLCBkbG4yLT5wb3J0KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRsbjIpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgaTJjIGludGVyZmFjZSAqLworCXJldCA9IGRsbjJfaTJjX2VuYWJsZShkbG4yLCB0cnVlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGFkYXB0ZXI6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGFuZCBmaW5hbGx5IGF0dGFjaCB0byBpMmMgbGF5ZXIgKi8KKwlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJmRsbjItPmFkYXB0ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBJMkMgYWRhcHRlcjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X2Rpc2FibGU7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9kaXNhYmxlOgorCWRsbjJfaTJjX2VuYWJsZShkbG4yLCBmYWxzZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRsbjJfaTJjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkbG4yX2kyYyAqZGxuMiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaTJjX2RlbF9hZGFwdGVyKCZkbG4yLT5hZGFwdGVyKTsKKwlkbG4yX2kyY19lbmFibGUoZGxuMiwgZmFsc2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRsbjJfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUJPSAiZGxuMi1pMmMiLAorCS5wcm9iZQkJPSBkbG4yX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IGRsbjJfaTJjX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZGxuMl9pMmNfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBEaW9sYW4gRExOMiBJMkMgbWFzdGVyIGludGVyZmFjZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpkbG4yLWkyYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oaXg1aGQyLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWhpeDVoZDIuYwppbmRleCA5NDkwZDBmLi44ZmU3OGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWhpeDVoZDIuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWhpeDVoZDIuYwpAQCAtNTI4LDcgKzUyOCw3IEBACiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGhpeDVoZDJfaTJjX3BtX29wcyA9IHsKLQlTRVRfUE1fUlVOVElNRV9QTV9PUFMoaGl4NWhkMl9pMmNfcnVudGltZV9zdXNwZW5kLAorCVNFVF9SVU5USU1FX1BNX09QUyhoaXg1aGQyX2kyY19ydW50aW1lX3N1c3BlbmQsCiAJCQkgICAgICBoaXg1aGQyX2kyY19ydW50aW1lX3Jlc3VtZSwKIAkJCSAgICAgIE5VTEwpCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1ub21hZGlrLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYwppbmRleCA5YWQwMzhkLi45Nzk5ODk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYwpAQCAtOTMyLDcgKzkzMiw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBubWtfaTJjX3BtID0gewogCVNFVF9MQVRFX1NZU1RFTV9TTEVFUF9QTV9PUFMobm1rX2kyY19zdXNwZW5kX2xhdGUsIG5ta19pMmNfcmVzdW1lX2Vhcmx5KQotCVNFVF9QTV9SVU5USU1FX1BNX09QUyhubWtfaTJjX3J1bnRpbWVfc3VzcGVuZCwKKwlTRVRfUlVOVElNRV9QTV9PUFMobm1rX2kyY19ydW50aW1lX3N1c3BlbmQsCiAJCQlubWtfaTJjX3J1bnRpbWVfcmVzdW1lLAogCQkJTlVMTCkKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCmluZGV4IDI2OTQyYzEuLjBlNjUwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCkBAIC05MjIsMTQgKzkyMiwxMiBAQAogCQlpZiAoc3RhdCAmIE9NQVBfSTJDX1NUQVRfTkFDSykgewogCQkJZXJyIHw9IE9NQVBfSTJDX1NUQVRfTkFDSzsKIAkJCW9tYXBfaTJjX2Fja19zdGF0KGRldiwgT01BUF9JMkNfU1RBVF9OQUNLKTsKLQkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKHN0YXQgJiBPTUFQX0kyQ19TVEFUX0FMKSB7CiAJCQlkZXZfZXJyKGRldi0+ZGV2LCAiQXJiaXRyYXRpb24gbG9zdFxuIik7CiAJCQllcnIgfD0gT01BUF9JMkNfU1RBVF9BTDsKIAkJCW9tYXBfaTJjX2Fja19zdGF0KGRldiwgT01BUF9JMkNfU1RBVF9BTCk7Ci0JCQlicmVhazsKIAkJfQogCiAJCS8qCkBAIC05NTQsMTEgKzk1MiwxMyBAQAogCQkJaWYgKGRldi0+Zmlmb19zaXplKQogCQkJCW51bV9ieXRlcyA9IGRldi0+YnVmX2xlbjsKIAotCQkJb21hcF9pMmNfcmVjZWl2ZV9kYXRhKGRldiwgbnVtX2J5dGVzLCB0cnVlKTsKLQotCQkJaWYgKGRldi0+ZXJyYXRhICYgSTJDX09NQVBfRVJSQVRBX0kyMDcpCisJCQlpZiAoZGV2LT5lcnJhdGEgJiBJMkNfT01BUF9FUlJBVEFfSTIwNykgewogCQkJCWkyY19vbWFwX2VycmF0YV9pMjA3KGRldiwgc3RhdCk7CisJCQkJbnVtX2J5dGVzID0gKG9tYXBfaTJjX3JlYWRfcmVnKGRldiwKKwkJCQkJT01BUF9JMkNfQlVGU1RBVF9SRUcpID4+IDgpICYgMHgzRjsKKwkJCX0KIAorCQkJb21hcF9pMmNfcmVjZWl2ZV9kYXRhKGRldiwgbnVtX2J5dGVzLCB0cnVlKTsKIAkJCW9tYXBfaTJjX2Fja19zdGF0KGRldiwgT01BUF9JMkNfU1RBVF9SRFIpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTEyODAsNyArMTI4MCw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogc3RhdGljIGludCBvbWFwX2kyY19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKQEAgLTEzMTgsNyArMTMxNyw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogCiBzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgb21hcF9pMmNfcG1fb3BzID0gewogCVNFVF9SVU5USU1FX1BNX09QUyhvbWFwX2kyY19ydW50aW1lX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwppbmRleCBmNDNiNGUxLi42OGFlYjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKQEAgLTQwMyw2ICs0MDMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlhY3BpX3dhbGtfZGVwX2RldmljZV9saXN0KGhhbmRsZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMgYi9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jCmluZGV4IDliN2VlN2UuLjljY2VhY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMKKysrIGIvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYwpAQCAtMTI4LDI4ICsxMjgsMjggQEAKIAl7CiAJCS5uYW1lID0gIkMxLU5ITSIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MDAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDApLAogCQkuZXhpdF9sYXRlbmN5ID0gMywKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSA2LAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzFFLU5ITSIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MDEiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMSkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDEpLAogCQkuZXhpdF9sYXRlbmN5ID0gMTAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMjAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDMy1OSE0iLAogCQkuZGVzYyA9ICJNV0FJVCAweDEwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MTApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDEwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDIwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDgwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzYtTkhNIiwKIAkJLmRlc2MgPSAiTVdBSVQgMHgyMCIsCi0JCS5mbGFncyA9IE1XQUlUMmZsZygweDIwKSB8IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAorCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgyMCkgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCiAJCS5leGl0X2xhdGVuY3kgPSAyMDAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gODAwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LApAQCAtMTYxLDM1ICsxNjEsMzUgQEAKIAl7CiAJCS5uYW1lID0gIkMxLVNOQiIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MDAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDApLAogCQkuZXhpdF9sYXRlbmN5ID0gMiwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSAyLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzFFLVNOQiIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MDEiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMSkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDEpLAogCQkuZXhpdF9sYXRlbmN5ID0gMTAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMjAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDMy1TTkIiLAogCQkuZGVzYyA9ICJNV0FJVCAweDEwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MTApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDEwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDgwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDIxMSwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM2LVNOQiIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MjAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgyMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MjApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMTA0LAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDM0NSwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM3LVNOQiIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MzAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgzMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MzApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMTA5LAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDM0NSwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKQEAgLTIwMSw0MiArMjAxLDQyIEBACiAJewogCQkubmFtZSA9ICJDMS1CWVQiLAogCQkuZGVzYyA9ICJNV0FJVCAweDAwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDAwKSwKIAkJLmV4aXRfbGF0ZW5jeSA9IDEsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMSwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkMxRS1CWVQiLAogCQkuZGVzYyA9ICJNV0FJVCAweDAxIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDEpIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDAxKSwKIAkJLmV4aXRfbGF0ZW5jeSA9IDE1LAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDMwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzZOLUJZVCIsCiAJCS5kZXNjID0gIk1XQUlUIDB4NTgiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHg1OCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NTgpIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gNDAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMjc1LAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzZTLUJZVCIsCiAJCS5kZXNjID0gIk1XQUlUIDB4NTIiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHg1MikgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NTIpIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMTQwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDU2MCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM3LUJZVCIsCiAJCS5kZXNjID0gIk1XQUlUIDB4NjAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHg2MCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NjApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMTIwMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSAxNTAwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzdTLUJZVCIsCiAJCS5kZXNjID0gIk1XQUlUIDB4NjQiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHg2NCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NjQpIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMTAwMDAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMjAwMDAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCkBAIC0yNDgsMzUgKzI0OCwzNSBAQAogCXsKIAkJLm5hbWUgPSAiQzEtSVZCIiwKIAkJLmRlc2MgPSAiTVdBSVQgMHgwMCIsCi0JCS5mbGFncyA9IE1XQUlUMmZsZygweDAwKSB8IENQVUlETEVfRkxBR19USU1FX1ZBTElELAorCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMCksCiAJCS5leGl0X2xhdGVuY3kgPSAxLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDEsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDMUUtSVZCIiwKIAkJLmRlc2MgPSAiTVdBSVQgMHgwMSIsCi0JCS5mbGFncyA9IE1XQUlUMmZsZygweDAxKSB8IENQVUlETEVfRkxBR19USU1FX1ZBTElELAorCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMSksCiAJCS5leGl0X2xhdGVuY3kgPSAxMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSAyMCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkMzLUlWQiIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MTAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgxMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MTApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gNTksCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMTU2LAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzYtSVZCIiwKIAkJLmRlc2MgPSAiTVdBSVQgMHgyMCIsCi0JCS5mbGFncyA9IE1XQUlUMmZsZygweDIwKSB8IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAorCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgyMCkgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCiAJCS5leGl0X2xhdGVuY3kgPSA4MCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSAzMDAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDNy1JVkIiLAogCQkuZGVzYyA9ICJNV0FJVCAweDMwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MzApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDMwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDg3LAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDMwMCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKQEAgLTI4OCwyOCArMjg4LDI4IEBACiAJewogCQkubmFtZSA9ICJDMS1JVlQiLAogCQkuZGVzYyA9ICJNV0FJVCAweDAwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDAwKSwKIAkJLmV4aXRfbGF0ZW5jeSA9IDEsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMSwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkMxRS1JVlQiLAogCQkuZGVzYyA9ICJNV0FJVCAweDAxIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDEpIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDAxKSwKIAkJLmV4aXRfbGF0ZW5jeSA9IDEwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDgwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzMtSVZUIiwKIAkJLmRlc2MgPSAiTVdBSVQgMHgxMCIsCi0JCS5mbGFncyA9IE1XQUlUMmZsZygweDEwKSB8IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAorCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgxMCkgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCiAJCS5leGl0X2xhdGVuY3kgPSA1OSwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSAxNTYsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDNi1JVlQiLAogCQkuZGVzYyA9ICJNV0FJVCAweDIwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MjApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDIwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDgyLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDMwMCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKQEAgLTMyMSwyOCArMzIxLDI4IEBACiAJewogCQkubmFtZSA9ICJDMS1JVlQtNFMiLAogCQkuZGVzYyA9ICJNV0FJVCAweDAwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDAwKSwKIAkJLmV4aXRfbGF0ZW5jeSA9IDEsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMSwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkMxRS1JVlQtNFMiLAogCQkuZGVzYyA9ICJNV0FJVCAweDAxIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDEpIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDAxKSwKIAkJLmV4aXRfbGF0ZW5jeSA9IDEwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDI1MCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkMzLUlWVC00UyIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MTAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgxMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MTApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gNTksCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMzAwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzYtSVZULTRTIiwKIAkJLmRlc2MgPSAiTVdBSVQgMHgyMCIsCi0JCS5mbGFncyA9IE1XQUlUMmZsZygweDIwKSB8IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAorCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgyMCkgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCiAJCS5leGl0X2xhdGVuY3kgPSA4NCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSA0MDAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCkBAIC0zNTQsMjggKzM1NCwyOCBAQAogCXsKIAkJLm5hbWUgPSAiQzEtSVZULThTIiwKIAkJLmRlc2MgPSAiTVdBSVQgMHgwMCIsCi0JCS5mbGFncyA9IE1XQUlUMmZsZygweDAwKSB8IENQVUlETEVfRkxBR19USU1FX1ZBTElELAorCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMCksCiAJCS5leGl0X2xhdGVuY3kgPSAxLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDEsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDMUUtSVZULThTIiwKIAkJLmRlc2MgPSAiTVdBSVQgMHgwMSIsCi0JCS5mbGFncyA9IE1XQUlUMmZsZygweDAxKSB8IENQVUlETEVfRkxBR19USU1FX1ZBTElELAorCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMSksCiAJCS5leGl0X2xhdGVuY3kgPSAxMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSA1MDAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDMy1JVlQtOFMiLAogCQkuZGVzYyA9ICJNV0FJVCAweDEwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MTApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDEwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDU5LAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDYwMCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM2LUlWVC04UyIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MjAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgyMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MjApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gODgsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gNzAwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LApAQCAtMzg3LDU2ICszODcsNTYgQEAKIAl7CiAJCS5uYW1lID0gIkMxLUhTVyIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MDAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDApLAogCQkuZXhpdF9sYXRlbmN5ID0gMiwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSAyLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzFFLUhTVyIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MDEiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMSkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDEpLAogCQkuZXhpdF9sYXRlbmN5ID0gMTAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMjAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDMy1IU1ciLAogCQkuZGVzYyA9ICJNV0FJVCAweDEwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MTApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDEwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDMzLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDEwMCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM2LUhTVyIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MjAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgyMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MjApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMTMzLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDQwMCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM3cy1IU1ciLAogCQkuZGVzYyA9ICJNV0FJVCAweDMyIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MzIpIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDMyKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDE2NiwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSA1MDAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDOC1IU1ciLAogCQkuZGVzYyA9ICJNV0FJVCAweDQwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NDApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDQwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDMwMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSA5MDAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDOS1IU1ciLAogCQkuZGVzYyA9ICJNV0FJVCAweDUwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NTApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDUwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDYwMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSAxODAwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzEwLUhTVyIsCiAJCS5kZXNjID0gIk1XQUlUIDB4NjAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHg2MCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NjApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMjYwMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSA3NzAwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LApAQCAtNDQ3LDU2ICs0NDcsNTYgQEAKIAl7CiAJCS5uYW1lID0gIkMxLUJEVyIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MDAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDApLAogCQkuZXhpdF9sYXRlbmN5ID0gMiwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSAyLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzFFLUJEVyIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MDEiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgwMSkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDEpLAogCQkuZXhpdF9sYXRlbmN5ID0gMTAsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMjAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDMy1CRFciLAogCQkuZGVzYyA9ICJNV0FJVCAweDEwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MTApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDEwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDQwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDEwMCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM2LUJEVyIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MjAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgyMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MjApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMTMzLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDQwMCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM3cy1CRFciLAogCQkuZGVzYyA9ICJNV0FJVCAweDMyIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MzIpIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDMyKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDE2NiwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSA1MDAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDOC1CRFciLAogCQkuZGVzYyA9ICJNV0FJVCAweDQwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NDApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDQwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDMwMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSA5MDAsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCiAJewogCQkubmFtZSA9ICJDOS1CRFciLAogCQkuZGVzYyA9ICJNV0FJVCAweDUwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NTApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfCBDUFVJRExFX0ZMQUdfVExCX0ZMVVNIRUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDUwKSB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKIAkJLmV4aXRfbGF0ZW5jeSA9IDYwMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSAxODAwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzEwLUJEVyIsCiAJCS5kZXNjID0gIk1XQUlUIDB4NjAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHg2MCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NjApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMjYwMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSA3NzAwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LApAQCAtNTA4LDI4ICs1MDgsMjggQEAKIAl7CiAJCS5uYW1lID0gIkMxRS1BVE0iLAogCQkuZGVzYyA9ICJNV0FJVCAweDAwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDAwKSwKIAkJLmV4aXRfbGF0ZW5jeSA9IDEwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDIwLAogCQkuZW50ZXIgPSAmaW50ZWxfaWRsZSB9LAogCXsKIAkJLm5hbWUgPSAiQzItQVRNIiwKIAkJLmRlc2MgPSAiTVdBSVQgMHgxMCIsCi0JCS5mbGFncyA9IE1XQUlUMmZsZygweDEwKSB8IENQVUlETEVfRkxBR19USU1FX1ZBTElELAorCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgxMCksCiAJCS5leGl0X2xhdGVuY3kgPSAyMCwKIAkJLnRhcmdldF9yZXNpZGVuY3kgPSA4MCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM0LUFUTSIsCiAJCS5kZXNjID0gIk1XQUlUIDB4MzAiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHgzMCkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MzApIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMTAwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDQwMCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM2LUFUTSIsCiAJCS5kZXNjID0gIk1XQUlUIDB4NTIiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHg1MikgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NTIpIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMTQwLAogCQkudGFyZ2V0X3Jlc2lkZW5jeSA9IDU2MCwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKQEAgLTU0MCwxNCArNTQwLDE0IEBACiAJewogCQkubmFtZSA9ICJDMS1BVk4iLAogCQkuZGVzYyA9ICJNV0FJVCAweDAwIiwKLQkJLmZsYWdzID0gTVdBSVQyZmxnKDB4MDApIHwgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQsCisJCS5mbGFncyA9IE1XQUlUMmZsZygweDAwKSwKIAkJLmV4aXRfbGF0ZW5jeSA9IDIsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gMiwKIAkJLmVudGVyID0gJmludGVsX2lkbGUgfSwKIAl7CiAJCS5uYW1lID0gIkM2LUFWTiIsCiAJCS5kZXNjID0gIk1XQUlUIDB4NTEiLAotCQkuZmxhZ3MgPSBNV0FJVDJmbGcoMHg1MSkgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8IENQVUlETEVfRkxBR19UTEJfRkxVU0hFRCwKKwkJLmZsYWdzID0gTVdBSVQyZmxnKDB4NTEpIHwgQ1BVSURMRV9GTEFHX1RMQl9GTFVTSEVELAogCQkuZXhpdF9sYXRlbmN5ID0gMTUsCiAJCS50YXJnZXRfcmVzaWRlbmN5ID0gNDUsCiAJCS5lbnRlciA9ICZpbnRlbF9pZGxlIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hY2NlbC9ibWMxNTAtYWNjZWwuYyBiL2RyaXZlcnMvaWlvL2FjY2VsL2JtYzE1MC1hY2NlbC5jCmluZGV4IDUxM2JkNmQuLjA2NmQwYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2FjY2VsL2JtYzE1MC1hY2NlbC5jCisrKyBiL2RyaXZlcnMvaWlvL2FjY2VsL2JtYzE1MC1hY2NlbC5jCkBAIC01MTMsNyArNTEzLDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGJtYzE1MF9hY2NlbF9nZXRfc3RhcnR1cF90aW1lcyhzdHJ1Y3QgYm1jMTUwX2FjY2VsX2RhdGEgKmRhdGEpCiB7CiAJaW50IGk7CkBAIC0xMzcxLDcgKzEzNzEsNyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBibWMxNTBfYWNjZWxfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKHRvX2kyY19jbGllbnQoZGV2KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hY2NlbC9reGNqay0xMDEzLmMgYi9kcml2ZXJzL2lpby9hY2NlbC9reGNqay0xMDEzLmMKaW5kZXggMzIwYWE3Mi4uZGEyZmU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWNjZWwva3hjamstMTAxMy5jCisrKyBiL2RyaXZlcnMvaWlvL2FjY2VsL2t4Y2prLTEwMTMuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBreGNqazEwMTNfZ2V0X3N0YXJ0dXBfdGltZXMoc3RydWN0IGt4Y2prMTAxM19kYXRhICpkYXRhKQogewogCWludCBpOwpAQCAtMTM1OSw3ICsxMzU5LDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQga3hjamsxMDEzX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGkyY19nZXRfY2xpZW50ZGF0YSh0b19pMmNfY2xpZW50KGRldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWRjL0tjb25maWcgYi9kcml2ZXJzL2lpby9hZGMvS2NvbmZpZwppbmRleCA4OGJkYzhmLi5iYzRlNzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9hZGMvS2NvbmZpZworKysgYi9kcml2ZXJzL2lpby9hZGMvS2NvbmZpZwpAQCAtMTI3LDYgKzEyNywxNCBAQAogCWhlbHAKIAkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBdG1lbCBBVDkxIEFEQy4KIAorY29uZmlnIEFYUDI4OF9BREMKKwl0cmlzdGF0ZSAiWC1Qb3dlcnMgQVhQMjg4IEFEQyBkcml2ZXIiCisJZGVwZW5kcyBvbiBNRkRfQVhQMjBYCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGhhdmUgc3VwcG9ydCBmb3IgWC1Qb3dlcnMgcG93ZXIgbWFuYWdlbWVudCBJQyAoUE1JQykgQURDCisJICBkZXZpY2UuIERlcGVuZGluZyBvbiBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLCB0aGlzIGdlbmVyYWwgcHVycG9zZSBBREMgY2FuCisJICBiZSB1c2VkIGZvciBzYW1wbGluZyBzZW5zb3JzIHN1Y2ggYXMgdGhlcm1hbCByZXNpc3RvcnMuCisKIGNvbmZpZyBFWFlOT1NfQURDCiAJdHJpc3RhdGUgIkV4eW5vcyBBREMgZHJpdmVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX0VYWU5PUyB8fCBBUkNIX1MzQzI0WFggfHwgQVJDSF9TM0M2NFhYIHx8IChPRiAmJiBDT01QSUxFX1RFU1QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvTWFrZWZpbGUgYi9kcml2ZXJzL2lpby9hZGMvTWFrZWZpbGUKaW5kZXggY2I4OGE2YS4uZjMwMDkzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaWlvL2FkYy9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQAogb2JqLSQoQ09ORklHX0FENzg4NykgKz0gYWQ3ODg3Lm8KIG9iai0kKENPTkZJR19BRDc5OVgpICs9IGFkNzk5eC5vCiBvYmotJChDT05GSUdfQVQ5MV9BREMpICs9IGF0OTFfYWRjLm8KK29iai0kKENPTkZJR19BWFAyODhfQURDKSArPSBheHAyODhfYWRjLm8KIG9iai0kKENPTkZJR19FWFlOT1NfQURDKSArPSBleHlub3NfYWRjLm8KIG9iai0kKENPTkZJR19MUDg3ODhfQURDKSArPSBscDg3ODhfYWRjLm8KIG9iai0kKENPTkZJR19NQVgxMDI3KSArPSBtYXgxMDI3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9heHAyODhfYWRjLmMgYi9kcml2ZXJzL2lpby9hZGMvYXhwMjg4X2FkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YmNmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lpby9hZGMvYXhwMjg4X2FkYy5jCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogYXhwMjg4X2FkYy5jIC0gWC1Qb3dlcnMgQVhQMjg4IFBNSUMgQURDIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2F4cDIweC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvaWlvL2lpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lpby9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvaWlvL2RyaXZlci5oPgorCisjZGVmaW5lIEFYUDI4OF9BRENfRU5fTUFTSwkJMHhGMQorI2RlZmluZSBBWFAyODhfQURDX1RTX1BJTl9HUEFEQwkJMHhGMgorI2RlZmluZSBBWFAyODhfQURDX1RTX1BJTl9PTgkJMHhGMworCitlbnVtIGF4cDI4OF9hZGNfaWQgeworCUFYUDI4OF9BRENfVFMsCisJQVhQMjg4X0FEQ19QTUlDLAorCUFYUDI4OF9BRENfR1AsCisJQVhQMjg4X0FEQ19CQVRUX0NIUkdfSSwKKwlBWFAyODhfQURDX0JBVFRfRElTQ0hSR19JLAorCUFYUDI4OF9BRENfQkFUVF9WLAorCUFYUDI4OF9BRENfTlJfQ0hBTiwKK307CisKK3N0cnVjdCBheHAyODhfYWRjX2luZm8geworCWludCBpcnE7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0IGF4cDI4OF9hZGNfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS5pbmRleGVkID0gMSwKKwkJLnR5cGUgPSBJSU9fVEVNUCwKKwkJLmNoYW5uZWwgPSAwLAorCQkuYWRkcmVzcyA9IEFYUDI4OF9UU19BRENfSCwKKwkJLmRhdGFzaGVldF9uYW1lID0gIlRTX1BJTiIsCisJfSwgeworCQkuaW5kZXhlZCA9IDEsCisJCS50eXBlID0gSUlPX1RFTVAsCisJCS5jaGFubmVsID0gMSwKKwkJLmFkZHJlc3MgPSBBWFAyODhfUE1JQ19BRENfSCwKKwkJLmRhdGFzaGVldF9uYW1lID0gIlBNSUNfVEVNUCIsCisJfSwgeworCQkuaW5kZXhlZCA9IDEsCisJCS50eXBlID0gSUlPX1RFTVAsCisJCS5jaGFubmVsID0gMiwKKwkJLmFkZHJlc3MgPSBBWFAyODhfR1BfQURDX0gsCisJCS5kYXRhc2hlZXRfbmFtZSA9ICJHUEFEQyIsCisJfSwgeworCQkuaW5kZXhlZCA9IDEsCisJCS50eXBlID0gSUlPX0NVUlJFTlQsCisJCS5jaGFubmVsID0gMywKKwkJLmFkZHJlc3MgPSBBWFAyMFhfQkFUVF9DSFJHX0lfSCwKKwkJLmRhdGFzaGVldF9uYW1lID0gIkJBVFRfQ0hHX0kiLAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUFJPQ0VTU0VEKSwKKwl9LCB7CisJCS5pbmRleGVkID0gMSwKKwkJLnR5cGUgPSBJSU9fQ1VSUkVOVCwKKwkJLmNoYW5uZWwgPSA0LAorCQkuYWRkcmVzcyA9IEFYUDIwWF9CQVRUX0RJU0NIUkdfSV9ILAorCQkuZGF0YXNoZWV0X25hbWUgPSAiQkFUVF9ESVNDSFJHX0kiLAorCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUFJPQ0VTU0VEKSwKKwl9LCB7CisJCS5pbmRleGVkID0gMSwKKwkJLnR5cGUgPSBJSU9fVk9MVEFHRSwKKwkJLmNoYW5uZWwgPSA1LAorCQkuYWRkcmVzcyA9IEFYUDIwWF9CQVRUX1ZfSCwKKwkJLmRhdGFzaGVldF9uYW1lID0gIkJBVFRfViIsCisJCS5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0NIQU5fSU5GT19QUk9DRVNTRUQpLAorCX0sCit9OworCisjZGVmaW5lIEFYUDI4OF9BRENfTUFQKF9hZGNfY2hhbm5lbF9sYWJlbCwgX2NvbnN1bWVyX2Rldl9uYW1lLAlcCisJCV9jb25zdW1lcl9jaGFubmVsKQkJCQlcCisJewkJCQkJCQlcCisJCS5hZGNfY2hhbm5lbF9sYWJlbCA9IF9hZGNfY2hhbm5lbF9sYWJlbCwJXAorCQkuY29uc3VtZXJfZGV2X25hbWUgPSBfY29uc3VtZXJfZGV2X25hbWUsCVwKKwkJLmNvbnN1bWVyX2NoYW5uZWwgPSBfY29uc3VtZXJfY2hhbm5lbCwJCVwKKwl9CisKKy8qIGZvciBjb25zdW1lciBkcml2ZXJzICovCitzdGF0aWMgc3RydWN0IGlpb19tYXAgYXhwMjg4X2FkY19kZWZhdWx0X21hcHNbXSA9IHsKKwlBWFAyODhfQURDX01BUCgiVFNfUElOIiwgImF4cDI4OC1iYXR0IiwgImF4cDI4OC1iYXR0LXRlbXAiKSwKKwlBWFAyODhfQURDX01BUCgiUE1JQ19URU1QIiwgImF4cDI4OC1wbWljIiwgImF4cDI4OC1wbWljLXRlbXAiKSwKKwlBWFAyODhfQURDX01BUCgiR1BBREMiLCAiYXhwMjg4LWdwYWRjIiwgImF4cDI4OC1zeXN0ZW0tdGVtcCIpLAorCUFYUDI4OF9BRENfTUFQKCJCQVRUX0NIR19JIiwgImF4cDI4OC1jaHJnIiwgImF4cDI4OC1jaHJnLWN1cnIiKSwKKwlBWFAyODhfQURDX01BUCgiQkFUVF9ESVNDSFJHX0kiLCAiYXhwMjg4LWNocmciLCAiYXhwMjg4LWNocmctZC1jdXJyIiksCisJQVhQMjg4X0FEQ19NQVAoIkJBVFRfViIsICJheHAyODgtYmF0dCIsICJheHAyODgtYmF0dC12b2x0IiksCisJe30sCit9OworCitzdGF0aWMgaW50IGF4cDI4OF9hZGNfcmVhZF9jaGFubmVsKGludCAqdmFsLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJc3RydWN0IHJlZ21hcCAqcmVnbWFwKQoreworCXU4IGJ1ZlsyXTsKKworCWlmIChyZWdtYXBfYnVsa19yZWFkKHJlZ21hcCwgYWRkcmVzcywgYnVmLCAyKSkKKwkJcmV0dXJuIC1FSU87CisJKnZhbCA9IChidWZbMF0gPDwgNCkgKyAoKGJ1ZlsxXSA+PiA0KSAmIDB4MEYpOworCisJcmV0dXJuIElJT19WQUxfSU5UOworfQorCitzdGF0aWMgaW50IGF4cDI4OF9hZGNfc2V0X3RzKHN0cnVjdCByZWdtYXAgKnJlZ21hcCwgdW5zaWduZWQgaW50IG1vZGUsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCS8qIGNoYW5uZWxzIG90aGVyIHRoYW4gR1BBREMgZG8gbm90IG5lZWQgdG8gc3dpdGNoIFRTIHBpbiAqLworCWlmIChhZGRyZXNzICE9IEFYUDI4OF9HUF9BRENfSCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcmVnbWFwX3dyaXRlKHJlZ21hcCwgQVhQMjg4X0FEQ19UU19QSU5fQ1RSTCwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgYXhwMjg4X2FkY19yZWFkX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQlpbnQgKnZhbCwgaW50ICp2YWwyLCBsb25nIG1hc2spCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXhwMjg4X2FkY19pbmZvICppbmZvID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKworCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCXN3aXRjaCAobWFzaykgeworCWNhc2UgSUlPX0NIQU5fSU5GT19SQVc6CisJCWlmIChheHAyODhfYWRjX3NldF90cyhpbmZvLT5yZWdtYXAsIEFYUDI4OF9BRENfVFNfUElOX0dQQURDLAorCQkJCQljaGFuLT5hZGRyZXNzKSkgeworCQkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJHUEFEQyBtb2RlXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBheHAyODhfYWRjX3JlYWRfY2hhbm5lbCh2YWwsIGNoYW4tPmFkZHJlc3MsIGluZm8tPnJlZ21hcCk7CisJCWlmIChheHAyODhfYWRjX3NldF90cyhpbmZvLT5yZWdtYXAsIEFYUDI4OF9BRENfVFNfUElOX09OLAorCQkJCQkJY2hhbi0+YWRkcmVzcykpCisJCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIlRTIHBpbiByZXN0b3JlXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBJSU9fQ0hBTl9JTkZPX1BST0NFU1NFRDoKKwkJcmV0ID0gYXhwMjg4X2FkY19yZWFkX2NoYW5uZWwodmFsLCBjaGFuLT5hZGRyZXNzLCBpbmZvLT5yZWdtYXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKwltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBheHAyODhfYWRjX3NldF9zdGF0ZShzdHJ1Y3QgcmVnbWFwICpyZWdtYXApCit7CisJLyogQURDIHNob3VsZCBiZSBhbHdheXMgZW5hYmxlZCBmb3IgaW50ZXJuYWwgRkcgdG8gZnVuY3Rpb24gKi8KKwlpZiAocmVnbWFwX3dyaXRlKHJlZ21hcCwgQVhQMjg4X0FEQ19UU19QSU5fQ1RSTCwgQVhQMjg4X0FEQ19UU19QSU5fT04pKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiByZWdtYXBfd3JpdGUocmVnbWFwLCBBWFAyMFhfQURDX0VOMSwgQVhQMjg4X0FEQ19FTl9NQVNLKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBheHAyODhfYWRjX2lpb19pbmZvID0geworCS5yZWFkX3JhdyA9ICZheHAyODhfYWRjX3JlYWRfcmF3LAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IGF4cDI4OF9hZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBheHAyODhfYWRjX2luZm8gKmluZm87CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKKwlzdHJ1Y3QgYXhwMjB4X2RldiAqYXhwMjB4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCisJaW5kaW9fZGV2ID0gZGV2bV9paW9fZGV2aWNlX2FsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaW5mbykpOworCWlmICghaW5kaW9fZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluZm8gPSBpaW9fcHJpdihpbmRpb19kZXYpOworCWluZm8tPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGluZm8tPmlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIHJlc291cmNlP1xuIik7CisJCXJldHVybiBpbmZvLT5pcnE7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZGlvX2Rldik7CisJaW5mby0+cmVnbWFwID0gYXhwMjB4LT5yZWdtYXA7CisJLyoKKwkgKiBTZXQgQURDIHRvIGVuYWJsZWQgc3RhdGUgYXQgYWxsIHRpbWUsIGluY2x1ZGluZyBzeXN0ZW0gc3VzcGVuZC4KKwkgKiBvdGhlcndpc2UgaW50ZXJuYWwgZnVlbCBnYXVnZSBmdW5jdGlvbmFsaXR5IG1heSBiZSBhZmZlY3RlZC4KKwkgKi8KKwlyZXQgPSBheHAyODhfYWRjX3NldF9zdGF0ZShheHAyMHgtPnJlZ21hcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIEFEQyBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJaW5kaW9fZGV2LT5uYW1lID0gcGRldi0+bmFtZTsKKwlpbmRpb19kZXYtPmNoYW5uZWxzID0gYXhwMjg4X2FkY19jaGFubmVsczsKKwlpbmRpb19kZXYtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUoYXhwMjg4X2FkY19jaGFubmVscyk7CisJaW5kaW9fZGV2LT5pbmZvID0gJmF4cDI4OF9hZGNfaWlvX2luZm87CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCXJldCA9IGlpb19tYXBfYXJyYXlfcmVnaXN0ZXIoaW5kaW9fZGV2LCBheHAyODhfYWRjX2RlZmF1bHRfbWFwcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIGlpbyBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9hcnJheV91bnJlZ2lzdGVyOworCX0KKwlyZXR1cm4gMDsKKworZXJyX2FycmF5X3VucmVnaXN0ZXI6CisJaWlvX21hcF9hcnJheV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF4cDI4OF9hZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJaWlvX21hcF9hcnJheV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgYXhwMjg4X2FkY19pZF90YWJsZVtdID0geworCXsgLm5hbWUgPSAiYXhwMjg4X2FkYyIgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF4cDI4OF9hZGNfZHJpdmVyID0geworCS5wcm9iZSA9IGF4cDI4OF9hZGNfcHJvYmUsCisJLnJlbW92ZSA9IGF4cDI4OF9hZGNfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGF4cDI4OF9hZGNfaWRfdGFibGUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYXhwMjg4X2FkYyIsCisJfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIGF4cDI4OF9hZGNfaWRfdGFibGUpOworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF4cDI4OF9hZGNfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiSmFjb2IgUGFuIDxqYWNvYi5qdW4ucGFuQGxpbnV4LmludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWC1Qb3dlcnMgQVhQMjg4IEFEQyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2d5cm8vYm1nMTYwLmMgYi9kcml2ZXJzL2lpby9neXJvL2JtZzE2MC5jCmluZGV4IGQyZmE1MjYuLjYwNDUxYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2d5cm8vYm1nMTYwLmMKKysrIGIvZHJpdmVycy9paW8vZ3lyby9ibWcxNjAuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiAKIHN0YXRpYyBpbnQgYm1nMTYwX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgYm1nMTYwX2RhdGEgKmRhdGEsIGJvb2wgb24pCiB7Ci0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAlpbnQgcmV0OwogCiAJaWYgKG9uKQpAQCAtMTIwMiw3ICsxMjAyLDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYm1nMTYwX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGkyY19nZXRfY2xpZW50ZGF0YSh0b19pMmNfY2xpZW50KGRldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggZjQyYWIxNC4uMjBjYTZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC05MTEsNyArOTExLDcgQEAKIAkubW9kdWxlICAgICAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5uYW1lICAgICAgICAgICAgICAgICAgID0gImlTQ1NJIEluaXRpYXRvciBvdmVyIGlTRVIiLAogCS5xdWV1ZWNvbW1hbmQgICAgICAgICAgID0gaXNjc2lfcXVldWVjb21tYW5kLAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5zZ190YWJsZXNpemUgICAgICAgICAgID0gSVNDU0lfSVNFUl9TR19UQUJMRVNJWkUsCiAJLm1heF9zZWN0b3JzCQk9IDEwMjQsCiAJLmNtZF9wZXJfbHVuICAgICAgICAgICAgPSBJU0VSX0RFRl9DTURfUEVSX0xVTiwKQEAgLTkyMiw2ICs5MjIsNyBAQAogCS51c2VfY2x1c3RlcmluZyAgICAgICAgID0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS5wcm9jX25hbWUgICAgICAgICAgICAgID0gImlzY3NpX2lzZXIiLAogCS50aGlzX2lkICAgICAgICAgICAgICAgID0gLTEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGlzY3NpX2lzZXJfdHJhbnNwb3J0ID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwppbmRleCA2MmQyYTE4Li41NDYxOTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtMTIzLDEwICsxMjMsMTUgQEAKIAkJICIgaWYgZmFzdF9pb19mYWlsX3RtbyBoYXMgbm90IGJlZW4gc2V0LiBcIm9mZlwiIG1lYW5zIHRoYXQiCiAJCSAiIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZC4iKTsKIAorc3RhdGljIHVuc2lnbmVkIGNoX2NvdW50OworbW9kdWxlX3BhcmFtKGNoX2NvdW50LCB1aW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY2hfY291bnQsCisJCSAiTnVtYmVyIG9mIFJETUEgY2hhbm5lbHMgdG8gdXNlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYW4gU1JQIHRhcmdldC4gVXNpbmcgbW9yZSB0aGFuIG9uZSBjaGFubmVsIGltcHJvdmVzIHBlcmZvcm1hbmNlIGlmIHRoZSBIQ0Egc3VwcG9ydHMgbXVsdGlwbGUgY29tcGxldGlvbiB2ZWN0b3JzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgbWluaW11bSBvZiBmb3VyIHRpbWVzIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVSBzb2NrZXRzIGFuZCB0aGUgbnVtYmVyIG9mIGNvbXBsZXRpb24gdmVjdG9ycyBzdXBwb3J0ZWQgYnkgdGhlIEhDQS4iKTsKKwogc3RhdGljIHZvaWQgc3JwX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyB2b2lkIHNycF9yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7Ci1zdGF0aWMgdm9pZCBzcnBfcmVjdl9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKnRhcmdldF9wdHIpOwotc3RhdGljIHZvaWQgc3JwX3NlbmRfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICp0YXJnZXRfcHRyKTsKK3N0YXRpYyB2b2lkIHNycF9yZWN2X2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY2hfcHRyKTsKK3N0YXRpYyB2b2lkIHNycF9zZW5kX2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY2hfcHRyKTsKIHN0YXRpYyBpbnQgc3JwX2NtX2hhbmRsZXIoc3RydWN0IGliX2NtX2lkICpjbV9pZCwgc3RydWN0IGliX2NtX2V2ZW50ICpldmVudCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKmliX3NycF90cmFuc3BvcnRfdGVtcGxhdGU7CkBAIC0yNjIsNyArMjY3LDcgQEAKIAogCXJldCA9IGliX2ZpbmRfcGtleSh0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYsCiAJCQkgICB0YXJnZXQtPnNycF9ob3N0LT5wb3J0LAotCQkJICAgYmUxNl90b19jcHUodGFyZ2V0LT5wYXRoLnBrZXkpLAorCQkJICAgYmUxNl90b19jcHUodGFyZ2V0LT5wa2V5KSwKIAkJCSAgICZhdHRyLT5wa2V5X2luZGV4KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKQEAgLTI4MywxOCArMjg4LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzcnBfbmV3X2NtX2lkKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKK3N0YXRpYyBpbnQgc3JwX25ld19jbV9pZChzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IGliX2NtX2lkICpuZXdfY21faWQ7CiAKIAluZXdfY21faWQgPSBpYl9jcmVhdGVfY21faWQodGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2LAotCQkJCSAgICBzcnBfY21faGFuZGxlciwgdGFyZ2V0KTsKKwkJCQkgICAgc3JwX2NtX2hhbmRsZXIsIGNoKTsKIAlpZiAoSVNfRVJSKG5ld19jbV9pZCkpCiAJCXJldHVybiBQVFJfRVJSKG5ld19jbV9pZCk7CiAKLQlpZiAodGFyZ2V0LT5jbV9pZCkKLQkJaWJfZGVzdHJveV9jbV9pZCh0YXJnZXQtPmNtX2lkKTsKLQl0YXJnZXQtPmNtX2lkID0gbmV3X2NtX2lkOworCWlmIChjaC0+Y21faWQpCisJCWliX2Rlc3Ryb3lfY21faWQoY2gtPmNtX2lkKTsKKwljaC0+Y21faWQgPSBuZXdfY21faWQ7CisJY2gtPnBhdGguc2dpZCA9IHRhcmdldC0+c2dpZDsKKwljaC0+cGF0aC5kZ2lkID0gdGFyZ2V0LT5vcmlnX2RnaWQ7CisJY2gtPnBhdGgucGtleSA9IHRhcmdldC0+cGtleTsKKwljaC0+cGF0aC5zZXJ2aWNlX2lkID0gdGFyZ2V0LT5zZXJ2aWNlX2lkOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDMsOCArNDUzLDQ0IEBACiAJCQkJICBkZXYtPm1heF9wYWdlc19wZXJfbXIpOwogfQogCi1zdGF0aWMgaW50IHNycF9jcmVhdGVfdGFyZ2V0X2liKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKKy8qKgorICogc3JwX2Rlc3Ryb3lfcXAoKSAtIGRlc3Ryb3kgYW4gUkRNQSBxdWV1ZSBwYWlyCisgKiBAY2g6IFNSUCBSRE1BIGNoYW5uZWwuCisgKgorICogQ2hhbmdlIGEgcXVldWUgcGFpciBpbnRvIHRoZSBlcnJvciBzdGF0ZSBhbmQgd2FpdCB1bnRpbCBhbGwgcmVjZWl2ZQorICogY29tcGxldGlvbnMgaGF2ZSBiZWVuIHByb2Nlc3NlZCBiZWZvcmUgZGVzdHJveWluZyBpdC4gVGhpcyBhdm9pZHMgdGhhdAorICogdGhlIHJlY2VpdmUgY29tcGxldGlvbiBoYW5kbGVyIGNhbiBhY2Nlc3MgdGhlIHF1ZXVlIHBhaXIgd2hpbGUgaXQgaXMKKyAqIGJlaW5nIGRlc3Ryb3llZC4KKyAqLworc3RhdGljIHZvaWQgc3JwX2Rlc3Ryb3lfcXAoc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OworCXN0YXRpYyBzdHJ1Y3QgaWJfcXBfYXR0ciBhdHRyID0geyAucXBfc3RhdGUgPSBJQl9RUFNfRVJSIH07CisJc3RhdGljIHN0cnVjdCBpYl9yZWN2X3dyIHdyID0geyAud3JfaWQgPSBTUlBfTEFTVF9XUl9JRCB9OworCXN0cnVjdCBpYl9yZWN2X3dyICpiYWRfd3I7CisJaW50IHJldDsKKworCS8qIERlc3Ryb3lpbmcgYSBRUCBhbmQgcmV1c2luZyBjaC0+ZG9uZSBpcyBvbmx5IHNhZmUgaWYgbm90IGNvbm5lY3RlZCAqLworCVdBUk5fT05fT05DRSh0YXJnZXQtPmNvbm5lY3RlZCk7CisKKwlyZXQgPSBpYl9tb2RpZnlfcXAoY2gtPnFwLCAmYXR0ciwgSUJfUVBfU1RBVEUpOworCVdBUk5fT05DRShyZXQsICJpYl9jbV9pbml0X3FwX2F0dHIoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWluaXRfY29tcGxldGlvbigmY2gtPmRvbmUpOworCXJldCA9IGliX3Bvc3RfcmVjdihjaC0+cXAsICZ3ciwgJmJhZF93cik7CisJV0FSTl9PTkNFKHJldCwgImliX3Bvc3RfcmVjdigpIHJldHVybmVkICVkXG4iLCByZXQpOworCWlmIChyZXQgPT0gMCkKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmY2gtPmRvbmUpOworCitvdXQ6CisJaWJfZGVzdHJveV9xcChjaC0+cXApOworfQorCitzdGF0aWMgaW50IHNycF9jcmVhdGVfY2hfaWIoc3RydWN0IHNycF9yZG1hX2NoICpjaCkKK3sKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBzcnBfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2OwogCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKmluaXRfYXR0cjsKIAlzdHJ1Y3QgaWJfY3EgKnJlY3ZfY3EsICpzZW5kX2NxOwpAQCAtNDU4LDE1ICs1MDQsMTYgQEAKIAlpZiAoIWluaXRfYXR0cikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZWN2X2NxID0gaWJfY3JlYXRlX2NxKGRldi0+ZGV2LCBzcnBfcmVjdl9jb21wbGV0aW9uLCBOVUxMLCB0YXJnZXQsCi0JCQkgICAgICAgdGFyZ2V0LT5xdWV1ZV9zaXplLCB0YXJnZXQtPmNvbXBfdmVjdG9yKTsKKwkvKiArIDEgZm9yIFNSUF9MQVNUX1dSX0lEICovCisJcmVjdl9jcSA9IGliX2NyZWF0ZV9jcShkZXYtPmRldiwgc3JwX3JlY3ZfY29tcGxldGlvbiwgTlVMTCwgY2gsCisJCQkgICAgICAgdGFyZ2V0LT5xdWV1ZV9zaXplICsgMSwgY2gtPmNvbXBfdmVjdG9yKTsKIAlpZiAoSVNfRVJSKHJlY3ZfY3EpKSB7CiAJCXJldCA9IFBUUl9FUlIocmVjdl9jcSk7CiAJCWdvdG8gZXJyOwogCX0KIAotCXNlbmRfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LT5kZXYsIHNycF9zZW5kX2NvbXBsZXRpb24sIE5VTEwsIHRhcmdldCwKLQkJCSAgICAgICBtICogdGFyZ2V0LT5xdWV1ZV9zaXplLCB0YXJnZXQtPmNvbXBfdmVjdG9yKTsKKwlzZW5kX2NxID0gaWJfY3JlYXRlX2NxKGRldi0+ZGV2LCBzcnBfc2VuZF9jb21wbGV0aW9uLCBOVUxMLCBjaCwKKwkJCSAgICAgICBtICogdGFyZ2V0LT5xdWV1ZV9zaXplLCBjaC0+Y29tcF92ZWN0b3IpOwogCWlmIChJU19FUlIoc2VuZF9jcSkpIHsKIAkJcmV0ID0gUFRSX0VSUihzZW5kX2NxKTsKIAkJZ290byBlcnJfcmVjdl9jcTsKQEAgLTQ3Niw3ICs1MjMsNyBAQAogCiAJaW5pdF9hdHRyLT5ldmVudF9oYW5kbGVyICAgICAgID0gc3JwX3FwX2V2ZW50OwogCWluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3dyICAgICA9IG0gKiB0YXJnZXQtPnF1ZXVlX3NpemU7Ci0JaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgICAgID0gdGFyZ2V0LT5xdWV1ZV9zaXplOworCWluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3dyICAgICA9IHRhcmdldC0+cXVldWVfc2l6ZSArIDE7CiAJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlICAgID0gMTsKIAlpbml0X2F0dHItPmNhcC5tYXhfc2VuZF9zZ2UgICAgPSAxOwogCWluaXRfYXR0ci0+c3Ffc2lnX3R5cGUgICAgICAgICA9IElCX1NJR05BTF9SRVFfV1I7CkBAIC01MDIsOSArNTQ5LDkgQEAKIAkJCQkgICAgICJGUiBwb29sIGFsbG9jYXRpb24gZmFpbGVkICglZClcbiIsIHJldCk7CiAJCQlnb3RvIGVycl9xcDsKIAkJfQotCQlpZiAodGFyZ2V0LT5mcl9wb29sKQotCQkJc3JwX2Rlc3Ryb3lfZnJfcG9vbCh0YXJnZXQtPmZyX3Bvb2wpOwotCQl0YXJnZXQtPmZyX3Bvb2wgPSBmcl9wb29sOworCQlpZiAoY2gtPmZyX3Bvb2wpCisJCQlzcnBfZGVzdHJveV9mcl9wb29sKGNoLT5mcl9wb29sKTsKKwkJY2gtPmZyX3Bvb2wgPSBmcl9wb29sOwogCX0gZWxzZSBpZiAoIWRldi0+dXNlX2Zhc3RfcmVnICYmIGRldi0+aGFzX2ZtcikgewogCQlmbXJfcG9vbCA9IHNycF9hbGxvY19mbXJfcG9vbCh0YXJnZXQpOwogCQlpZiAoSVNfRVJSKGZtcl9wb29sKSkgewpAQCAtNTEzLDIxICs1NjAsMjEgQEAKIAkJCQkgICAgICJGTVIgcG9vbCBhbGxvY2F0aW9uIGZhaWxlZCAoJWQpXG4iLCByZXQpOwogCQkJZ290byBlcnJfcXA7CiAJCX0KLQkJaWYgKHRhcmdldC0+Zm1yX3Bvb2wpCi0JCQlpYl9kZXN0cm95X2Ztcl9wb29sKHRhcmdldC0+Zm1yX3Bvb2wpOwotCQl0YXJnZXQtPmZtcl9wb29sID0gZm1yX3Bvb2w7CisJCWlmIChjaC0+Zm1yX3Bvb2wpCisJCQlpYl9kZXN0cm95X2Ztcl9wb29sKGNoLT5mbXJfcG9vbCk7CisJCWNoLT5mbXJfcG9vbCA9IGZtcl9wb29sOwogCX0KIAotCWlmICh0YXJnZXQtPnFwKQotCQlpYl9kZXN0cm95X3FwKHRhcmdldC0+cXApOwotCWlmICh0YXJnZXQtPnJlY3ZfY3EpCi0JCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5yZWN2X2NxKTsKLQlpZiAodGFyZ2V0LT5zZW5kX2NxKQotCQlpYl9kZXN0cm95X2NxKHRhcmdldC0+c2VuZF9jcSk7CisJaWYgKGNoLT5xcCkKKwkJc3JwX2Rlc3Ryb3lfcXAoY2gpOworCWlmIChjaC0+cmVjdl9jcSkKKwkJaWJfZGVzdHJveV9jcShjaC0+cmVjdl9jcSk7CisJaWYgKGNoLT5zZW5kX2NxKQorCQlpYl9kZXN0cm95X2NxKGNoLT5zZW5kX2NxKTsKIAotCXRhcmdldC0+cXAgPSBxcDsKLQl0YXJnZXQtPnJlY3ZfY3EgPSByZWN2X2NxOwotCXRhcmdldC0+c2VuZF9jcSA9IHNlbmRfY3E7CisJY2gtPnFwID0gcXA7CisJY2gtPnJlY3ZfY3EgPSByZWN2X2NxOworCWNoLT5zZW5kX2NxID0gc2VuZF9jcTsKIAogCWtmcmVlKGluaXRfYXR0cik7CiAJcmV0dXJuIDA7CkBAIC01NDgsOTMgKzU5NSwxMTcgQEAKIAogLyoKICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCB3aXRob3V0IHNycF9hbGxvY19pdV9idWZzKCkgaGF2aW5nIGJlZW4KLSAqIGludm9rZWQuIEhlbmNlIHRoZSB0YXJnZXQtPltydF14X3JpbmcgY2hlY2tzLgorICogaW52b2tlZC4gSGVuY2UgdGhlIGNoLT5bcnRdeF9yaW5nIGNoZWNrcy4KICAqLwotc3RhdGljIHZvaWQgc3JwX2ZyZWVfdGFyZ2V0X2liKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKK3N0YXRpYyB2b2lkIHNycF9mcmVlX2NoX2liKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKKwkJCSAgIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CiAJc3RydWN0IHNycF9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXY7CiAJaW50IGk7CiAKKwlpZiAoIWNoLT50YXJnZXQpCisJCXJldHVybjsKKworCWlmIChjaC0+Y21faWQpIHsKKwkJaWJfZGVzdHJveV9jbV9pZChjaC0+Y21faWQpOworCQljaC0+Y21faWQgPSBOVUxMOworCX0KKworCS8qIElmIHNycF9uZXdfY21faWQoKSBzdWNjZWVkZWQgYnV0IHNycF9jcmVhdGVfY2hfaWIoKSBub3QsIHJldHVybi4gKi8KKwlpZiAoIWNoLT5xcCkKKwkJcmV0dXJuOworCiAJaWYgKGRldi0+dXNlX2Zhc3RfcmVnKSB7Ci0JCWlmICh0YXJnZXQtPmZyX3Bvb2wpCi0JCQlzcnBfZGVzdHJveV9mcl9wb29sKHRhcmdldC0+ZnJfcG9vbCk7CisJCWlmIChjaC0+ZnJfcG9vbCkKKwkJCXNycF9kZXN0cm95X2ZyX3Bvb2woY2gtPmZyX3Bvb2wpOwogCX0gZWxzZSB7Ci0JCWlmICh0YXJnZXQtPmZtcl9wb29sKQotCQkJaWJfZGVzdHJveV9mbXJfcG9vbCh0YXJnZXQtPmZtcl9wb29sKTsKKwkJaWYgKGNoLT5mbXJfcG9vbCkKKwkJCWliX2Rlc3Ryb3lfZm1yX3Bvb2woY2gtPmZtcl9wb29sKTsKIAl9Ci0JaWJfZGVzdHJveV9xcCh0YXJnZXQtPnFwKTsKLQlpYl9kZXN0cm95X2NxKHRhcmdldC0+c2VuZF9jcSk7Ci0JaWJfZGVzdHJveV9jcSh0YXJnZXQtPnJlY3ZfY3EpOworCXNycF9kZXN0cm95X3FwKGNoKTsKKwlpYl9kZXN0cm95X2NxKGNoLT5zZW5kX2NxKTsKKwlpYl9kZXN0cm95X2NxKGNoLT5yZWN2X2NxKTsKIAotCXRhcmdldC0+cXAgPSBOVUxMOwotCXRhcmdldC0+c2VuZF9jcSA9IHRhcmdldC0+cmVjdl9jcSA9IE5VTEw7CisJLyoKKwkgKiBBdm9pZCB0aGF0IHRoZSBTQ1NJIGVycm9yIGhhbmRsZXIgdHJpZXMgdG8gdXNlIHRoaXMgY2hhbm5lbCBhZnRlcgorCSAqIGl0IGhhcyBiZWVuIGZyZWVkLiBUaGUgU0NTSSBlcnJvciBoYW5kbGVyIGNhbiBuYW1lbHkgY29udGludWUKKwkgKiB0cnlpbmcgdG8gcGVyZm9ybSByZWNvdmVyeSBhY3Rpb25zIGFmdGVyIHNjc2lfcmVtb3ZlX2hvc3QoKQorCSAqIHJldHVybmVkLgorCSAqLworCWNoLT50YXJnZXQgPSBOVUxMOwogCi0JaWYgKHRhcmdldC0+cnhfcmluZykgeworCWNoLT5xcCA9IE5VTEw7CisJY2gtPnNlbmRfY3EgPSBjaC0+cmVjdl9jcSA9IE5VTEw7CisKKwlpZiAoY2gtPnJ4X3JpbmcpIHsKIAkJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cXVldWVfc2l6ZTsgKytpKQotCQkJc3JwX2ZyZWVfaXUodGFyZ2V0LT5zcnBfaG9zdCwgdGFyZ2V0LT5yeF9yaW5nW2ldKTsKLQkJa2ZyZWUodGFyZ2V0LT5yeF9yaW5nKTsKLQkJdGFyZ2V0LT5yeF9yaW5nID0gTlVMTDsKKwkJCXNycF9mcmVlX2l1KHRhcmdldC0+c3JwX2hvc3QsIGNoLT5yeF9yaW5nW2ldKTsKKwkJa2ZyZWUoY2gtPnJ4X3JpbmcpOworCQljaC0+cnhfcmluZyA9IE5VTEw7CiAJfQotCWlmICh0YXJnZXQtPnR4X3JpbmcpIHsKKwlpZiAoY2gtPnR4X3JpbmcpIHsKIAkJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cXVldWVfc2l6ZTsgKytpKQotCQkJc3JwX2ZyZWVfaXUodGFyZ2V0LT5zcnBfaG9zdCwgdGFyZ2V0LT50eF9yaW5nW2ldKTsKLQkJa2ZyZWUodGFyZ2V0LT50eF9yaW5nKTsKLQkJdGFyZ2V0LT50eF9yaW5nID0gTlVMTDsKKwkJCXNycF9mcmVlX2l1KHRhcmdldC0+c3JwX2hvc3QsIGNoLT50eF9yaW5nW2ldKTsKKwkJa2ZyZWUoY2gtPnR4X3JpbmcpOworCQljaC0+dHhfcmluZyA9IE5VTEw7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBzcnBfcGF0aF9yZWNfY29tcGxldGlvbihpbnQgc3RhdHVzLAogCQkJCSAgICBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnBhdGhyZWMsCi0JCQkJICAgIHZvaWQgKnRhcmdldF9wdHIpCisJCQkJICAgIHZvaWQgKmNoX3B0cikKIHsKLQlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSB0YXJnZXRfcHRyOworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2ggPSBjaF9wdHI7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAotCXRhcmdldC0+c3RhdHVzID0gc3RhdHVzOworCWNoLT5zdGF0dXMgPSBzdGF0dXM7CiAJaWYgKHN0YXR1cykKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwKIAkJCSAgICAgUEZYICJHb3QgZmFpbGVkIHBhdGggcmVjIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAllbHNlCi0JCXRhcmdldC0+cGF0aCA9ICpwYXRocmVjOwotCWNvbXBsZXRlKCZ0YXJnZXQtPmRvbmUpOworCQljaC0+cGF0aCA9ICpwYXRocmVjOworCWNvbXBsZXRlKCZjaC0+ZG9uZSk7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX2xvb2t1cF9wYXRoKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKK3N0YXRpYyBpbnQgc3JwX2xvb2t1cF9wYXRoKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlpbnQgcmV0OwogCi0JdGFyZ2V0LT5wYXRoLm51bWJfcGF0aCA9IDE7CisJY2gtPnBhdGgubnVtYl9wYXRoID0gMTsKIAotCWluaXRfY29tcGxldGlvbigmdGFyZ2V0LT5kb25lKTsKKwlpbml0X2NvbXBsZXRpb24oJmNoLT5kb25lKTsKIAotCXRhcmdldC0+cGF0aF9xdWVyeV9pZCA9IGliX3NhX3BhdGhfcmVjX2dldCgmc3JwX3NhX2NsaWVudCwKLQkJCQkJCSAgIHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldiwKLQkJCQkJCSAgIHRhcmdldC0+c3JwX2hvc3QtPnBvcnQsCi0JCQkJCQkgICAmdGFyZ2V0LT5wYXRoLAotCQkJCQkJICAgSUJfU0FfUEFUSF9SRUNfU0VSVklDRV9JRAl8Ci0JCQkJCQkgICBJQl9TQV9QQVRIX1JFQ19ER0lECQl8Ci0JCQkJCQkgICBJQl9TQV9QQVRIX1JFQ19TR0lECQl8Ci0JCQkJCQkgICBJQl9TQV9QQVRIX1JFQ19OVU1CX1BBVEgJfAotCQkJCQkJICAgSUJfU0FfUEFUSF9SRUNfUEtFWSwKLQkJCQkJCSAgIFNSUF9QQVRIX1JFQ19USU1FT1VUX01TLAotCQkJCQkJICAgR0ZQX0tFUk5FTCwKLQkJCQkJCSAgIHNycF9wYXRoX3JlY19jb21wbGV0aW9uLAotCQkJCQkJICAgdGFyZ2V0LCAmdGFyZ2V0LT5wYXRoX3F1ZXJ5KTsKLQlpZiAodGFyZ2V0LT5wYXRoX3F1ZXJ5X2lkIDwgMCkKLQkJcmV0dXJuIHRhcmdldC0+cGF0aF9xdWVyeV9pZDsKKwljaC0+cGF0aF9xdWVyeV9pZCA9IGliX3NhX3BhdGhfcmVjX2dldCgmc3JwX3NhX2NsaWVudCwKKwkJCQkJICAgICAgIHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldiwKKwkJCQkJICAgICAgIHRhcmdldC0+c3JwX2hvc3QtPnBvcnQsCisJCQkJCSAgICAgICAmY2gtPnBhdGgsCisJCQkJCSAgICAgICBJQl9TQV9QQVRIX1JFQ19TRVJWSUNFX0lEIHwKKwkJCQkJICAgICAgIElCX1NBX1BBVEhfUkVDX0RHSUQJIHwKKwkJCQkJICAgICAgIElCX1NBX1BBVEhfUkVDX1NHSUQJIHwKKwkJCQkJICAgICAgIElCX1NBX1BBVEhfUkVDX05VTUJfUEFUSAkgfAorCQkJCQkgICAgICAgSUJfU0FfUEFUSF9SRUNfUEtFWSwKKwkJCQkJICAgICAgIFNSUF9QQVRIX1JFQ19USU1FT1VUX01TLAorCQkJCQkgICAgICAgR0ZQX0tFUk5FTCwKKwkJCQkJICAgICAgIHNycF9wYXRoX3JlY19jb21wbGV0aW9uLAorCQkJCQkgICAgICAgY2gsICZjaC0+cGF0aF9xdWVyeSk7CisJaWYgKGNoLT5wYXRoX3F1ZXJ5X2lkIDwgMCkKKwkJcmV0dXJuIGNoLT5wYXRoX3F1ZXJ5X2lkOwogCi0JcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZ0YXJnZXQtPmRvbmUpOworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY2gtPmRvbmUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKHRhcmdldC0+c3RhdHVzIDwgMCkKKwlpZiAoY2gtPnN0YXR1cyA8IDApCiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHRhcmdldC0+c2NzaV9ob3N0LAogCQkJICAgICBQRlggIlBhdGggcmVjb3JkIHF1ZXJ5IGZhaWxlZFxuIik7CiAKLQlyZXR1cm4gdGFyZ2V0LT5zdGF0dXM7CisJcmV0dXJuIGNoLT5zdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX3NlbmRfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKK3N0YXRpYyBpbnQgc3JwX3NlbmRfcmVxKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIGJvb2wgbXVsdGljaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCB7CiAJCXN0cnVjdCBpYl9jbV9yZXFfcGFyYW0gcGFyYW07CiAJCXN0cnVjdCBzcnBfbG9naW5fcmVxICAgcHJpdjsKQEAgLTY0NSwxMSArNzE2LDExIEBACiAJaWYgKCFyZXEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmVxLT5wYXJhbS5wcmltYXJ5X3BhdGggCSAgICAgID0gJnRhcmdldC0+cGF0aDsKKwlyZXEtPnBhcmFtLnByaW1hcnlfcGF0aAkJICAgICAgPSAmY2gtPnBhdGg7CiAJcmVxLT5wYXJhbS5hbHRlcm5hdGVfcGF0aCAJICAgICAgPSBOVUxMOwogCXJlcS0+cGFyYW0uc2VydmljZV9pZCAJCSAgICAgID0gdGFyZ2V0LT5zZXJ2aWNlX2lkOwotCXJlcS0+cGFyYW0ucXBfbnVtIAkJICAgICAgPSB0YXJnZXQtPnFwLT5xcF9udW07Ci0JcmVxLT5wYXJhbS5xcF90eXBlIAkJICAgICAgPSB0YXJnZXQtPnFwLT5xcF90eXBlOworCXJlcS0+cGFyYW0ucXBfbnVtCQkgICAgICA9IGNoLT5xcC0+cXBfbnVtOworCXJlcS0+cGFyYW0ucXBfdHlwZQkJICAgICAgPSBjaC0+cXAtPnFwX3R5cGU7CiAJcmVxLT5wYXJhbS5wcml2YXRlX2RhdGEgCSAgICAgID0gJnJlcS0+cHJpdjsKIAlyZXEtPnBhcmFtLnByaXZhdGVfZGF0YV9sZW4gCSAgICAgID0gc2l6ZW9mIHJlcS0+cHJpdjsKIAlyZXEtPnBhcmFtLmZsb3dfY29udHJvbCAJICAgICAgPSAxOwpAQCAtNjczLDYgKzc0NCw4IEBACiAJcmVxLT5wcml2LnJlcV9pdF9pdV9sZW4gPSBjcHVfdG9fYmUzMih0YXJnZXQtPm1heF9pdV9sZW4pOwogCXJlcS0+cHJpdi5yZXFfYnVmX2ZtdCAJPSBjcHVfdG9fYmUxNihTUlBfQlVGX0ZPUk1BVF9ESVJFQ1QgfAogCQkJCQkgICAgICBTUlBfQlVGX0ZPUk1BVF9JTkRJUkVDVCk7CisJcmVxLT5wcml2LnJlcV9mbGFncwk9IChtdWx0aWNoID8gU1JQX01VTFRJQ0hBTl9NVUxUSSA6CisJCQkJICAgU1JQX01VTFRJQ0hBTl9TSU5HTEUpOwogCS8qCiAJICogSW4gdGhlIHB1Ymxpc2hlZCBTUlAgc3BlY2lmaWNhdGlvbiAoZHJhZnQgcmV2LiAxNmEpLCB0aGUKIAkgKiBwb3J0IGlkZW50aWZpZXIgZm9ybWF0IGlzIDggYnl0ZXMgb2YgSUQgZXh0ZW5zaW9uIGZvbGxvd2VkCkBAIC02ODQsNyArNzU3LDcgQEAKIAkgKi8KIAlpZiAodGFyZ2V0LT5pb19jbGFzcyA9PSBTUlBfUkVWMTBfSUJfSU9fQ0xBU1MpIHsKIAkJbWVtY3B5KHJlcS0+cHJpdi5pbml0aWF0b3JfcG9ydF9pZCwKLQkJICAgICAgICZ0YXJnZXQtPnBhdGguc2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkLCA4KTsKKwkJICAgICAgICZ0YXJnZXQtPnNnaWQuZ2xvYmFsLmludGVyZmFjZV9pZCwgOCk7CiAJCW1lbWNweShyZXEtPnByaXYuaW5pdGlhdG9yX3BvcnRfaWQgKyA4LAogCQkgICAgICAgJnRhcmdldC0+aW5pdGlhdG9yX2V4dCwgOCk7CiAJCW1lbWNweShyZXEtPnByaXYudGFyZ2V0X3BvcnRfaWQsICAgICAmdGFyZ2V0LT5pb2NfZ3VpZCwgOCk7CkBAIC02OTMsNyArNzY2LDcgQEAKIAkJbWVtY3B5KHJlcS0+cHJpdi5pbml0aWF0b3JfcG9ydF9pZCwKIAkJICAgICAgICZ0YXJnZXQtPmluaXRpYXRvcl9leHQsIDgpOwogCQltZW1jcHkocmVxLT5wcml2LmluaXRpYXRvcl9wb3J0X2lkICsgOCwKLQkJICAgICAgICZ0YXJnZXQtPnBhdGguc2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkLCA4KTsKKwkJICAgICAgICZ0YXJnZXQtPnNnaWQuZ2xvYmFsLmludGVyZmFjZV9pZCwgOCk7CiAJCW1lbWNweShyZXEtPnByaXYudGFyZ2V0X3BvcnRfaWQsICAgICAmdGFyZ2V0LT5pZF9leHQsIDgpOwogCQltZW1jcHkocmVxLT5wcml2LnRhcmdldF9wb3J0X2lkICsgOCwgJnRhcmdldC0+aW9jX2d1aWQsIDgpOwogCX0KQEAgLTcxMyw3ICs3ODYsNyBAQAogCQkgICAgICAgJnRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldi0+bm9kZV9ndWlkLCA4KTsKIAl9CiAKLQlzdGF0dXMgPSBpYl9zZW5kX2NtX3JlcSh0YXJnZXQtPmNtX2lkLCAmcmVxLT5wYXJhbSk7CisJc3RhdHVzID0gaWJfc2VuZF9jbV9yZXEoY2gtPmNtX2lkLCAmcmVxLT5wYXJhbSk7CiAKIAlrZnJlZShyZXEpOwogCkBAIC03NTQsMjggKzgyNywzNSBAQAogCiBzdGF0aWMgdm9pZCBzcnBfZGlzY29ubmVjdF90YXJnZXQoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQogeworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2g7CisJaW50IGk7CisKIAlpZiAoc3JwX2NoYW5nZV9jb25uX3N0YXRlKHRhcmdldCwgZmFsc2UpKSB7CiAJCS8qIFhYWCBzaG91bGQgc2VuZCBTUlBfSV9MT0dPVVQgcmVxdWVzdCAqLwogCi0JCWlmIChpYl9zZW5kX2NtX2RyZXEodGFyZ2V0LT5jbV9pZCwgTlVMTCwgMCkpIHsKLQkJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCB0YXJnZXQtPnNjc2lfaG9zdCwKLQkJCQkgICAgIFBGWCAiU2VuZGluZyBDTSBEUkVRIGZhaWxlZFxuIik7CisJCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJCWNoID0gJnRhcmdldC0+Y2hbaV07CisJCQlpZiAoY2gtPmNtX2lkICYmIGliX3NlbmRfY21fZHJlcShjaC0+Y21faWQsIE5VTEwsIDApKSB7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIHRhcmdldC0+c2NzaV9ob3N0LAorCQkJCQkgICAgIFBGWCAiU2VuZGluZyBDTSBEUkVRIGZhaWxlZFxuIik7CisJCQl9CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNycF9mcmVlX3JlcV9kYXRhKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKK3N0YXRpYyB2b2lkIHNycF9mcmVlX3JlcV9kYXRhKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKKwkJCSAgICAgIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CiAJc3RydWN0IHNycF9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXY7CiAJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBkZXYtPmRldjsKIAlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcTsKIAlpbnQgaTsKIAotCWlmICghdGFyZ2V0LT5yZXFfcmluZykKKwlpZiAoIWNoLT50YXJnZXQgfHwgIWNoLT5yZXFfcmluZykKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cmVxX3Jpbmdfc2l6ZTsgKytpKSB7Ci0JCXJlcSA9ICZ0YXJnZXQtPnJlcV9yaW5nW2ldOworCQlyZXEgPSAmY2gtPnJlcV9yaW5nW2ldOwogCQlpZiAoZGV2LT51c2VfZmFzdF9yZWcpCiAJCQlrZnJlZShyZXEtPmZyX2xpc3QpOwogCQllbHNlCkBAIC03ODksMTIgKzg2OSwxMyBAQAogCQlrZnJlZShyZXEtPmluZGlyZWN0X2Rlc2MpOwogCX0KIAotCWtmcmVlKHRhcmdldC0+cmVxX3JpbmcpOwotCXRhcmdldC0+cmVxX3JpbmcgPSBOVUxMOworCWtmcmVlKGNoLT5yZXFfcmluZyk7CisJY2gtPnJlcV9yaW5nID0gTlVMTDsKIH0KIAotc3RhdGljIGludCBzcnBfYWxsb2NfcmVxX2RhdGEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorc3RhdGljIGludCBzcnBfYWxsb2NfcmVxX2RhdGEoc3RydWN0IHNycF9yZG1hX2NoICpjaCkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBzcnBfZGV2aWNlICpzcnBfZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2RldjsKIAlzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiA9IHNycF9kZXYtPmRldjsKIAlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcTsKQEAgLTgwMiwxNSArODgzLDEzIEBACiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlpbnQgaSwgcmV0ID0gLUVOT01FTTsKIAotCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPmZyZWVfcmVxcyk7Ci0KLQl0YXJnZXQtPnJlcV9yaW5nID0ga3phbGxvYyh0YXJnZXQtPnJlcV9yaW5nX3NpemUgKgotCQkJCSAgIHNpemVvZigqdGFyZ2V0LT5yZXFfcmluZyksIEdGUF9LRVJORUwpOwotCWlmICghdGFyZ2V0LT5yZXFfcmluZykKKwljaC0+cmVxX3JpbmcgPSBrY2FsbG9jKHRhcmdldC0+cmVxX3Jpbmdfc2l6ZSwgc2l6ZW9mKCpjaC0+cmVxX3JpbmcpLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghY2gtPnJlcV9yaW5nKQogCQlnb3RvIG91dDsKIAogCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnJlcV9yaW5nX3NpemU7ICsraSkgewotCQlyZXEgPSAmdGFyZ2V0LT5yZXFfcmluZ1tpXTsKKwkJcmVxID0gJmNoLT5yZXFfcmluZ1tpXTsKIAkJbXJfbGlzdCA9IGttYWxsb2ModGFyZ2V0LT5jbWRfc2dfY250ICogc2l6ZW9mKHZvaWQgKiksCiAJCQkJICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFtcl9saXN0KQpAQCAtODM0LDggKzkxMyw2IEBACiAJCQlnb3RvIG91dDsKIAogCQlyZXEtPmluZGlyZWN0X2RtYV9hZGRyID0gZG1hX2FkZHI7Ci0JCXJlcS0+aW5kZXggPSBpOwotCQlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZ0YXJnZXQtPmZyZWVfcmVxcyk7CiAJfQogCXJldCA9IDA7CiAKQEAgLTg2MCw2ICs5MzcsOSBAQAogCiBzdGF0aWMgdm9pZCBzcnBfcmVtb3ZlX3RhcmdldChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCiB7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaDsKKwlpbnQgaTsKKwogCVdBUk5fT05fT05DRSh0YXJnZXQtPnN0YXRlICE9IFNSUF9UQVJHRVRfUkVNT1ZFRCk7CiAKIAlzcnBfZGVsX3Njc2lfaG9zdF9hdHRyKHRhcmdldC0+c2NzaV9ob3N0KTsKQEAgLTg2OCwxMSArOTQ4LDE4IEBACiAJc2NzaV9yZW1vdmVfaG9zdCh0YXJnZXQtPnNjc2lfaG9zdCk7CiAJc3JwX3N0b3BfcnBvcnRfdGltZXJzKHRhcmdldC0+cnBvcnQpOwogCXNycF9kaXNjb25uZWN0X3RhcmdldCh0YXJnZXQpOwotCWliX2Rlc3Ryb3lfY21faWQodGFyZ2V0LT5jbV9pZCk7Ci0Jc3JwX2ZyZWVfdGFyZ2V0X2liKHRhcmdldCk7CisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCQlzcnBfZnJlZV9jaF9pYih0YXJnZXQsIGNoKTsKKwl9CiAJY2FuY2VsX3dvcmtfc3luYygmdGFyZ2V0LT50bF9lcnJfd29yayk7CiAJc3JwX3Jwb3J0X3B1dCh0YXJnZXQtPnJwb3J0KTsKLQlzcnBfZnJlZV9yZXFfZGF0YSh0YXJnZXQpOworCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKwkJc3JwX2ZyZWVfcmVxX2RhdGEodGFyZ2V0LCBjaCk7CisJfQorCWtmcmVlKHRhcmdldC0+Y2gpOworCXRhcmdldC0+Y2ggPSBOVUxMOwogCiAJc3Bpbl9sb2NrKCZ0YXJnZXQtPnNycF9ob3N0LT50YXJnZXRfbG9jayk7CiAJbGlzdF9kZWwoJnRhcmdldC0+bGlzdCk7CkBAIC04OTgsMjUgKzk4NSwyNSBAQAogCXNycF9xdWV1ZV9yZW1vdmVfd29yayh0YXJnZXQpOwogfQogCi1zdGF0aWMgaW50IHNycF9jb25uZWN0X3RhcmdldChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCitzdGF0aWMgaW50IHNycF9jb25uZWN0X2NoKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIGJvb2wgbXVsdGljaCkKIHsKLQlpbnQgcmV0cmllcyA9IDM7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlpbnQgcmV0OwogCi0JV0FSTl9PTl9PTkNFKHRhcmdldC0+Y29ubmVjdGVkKTsKKwlXQVJOX09OX09OQ0UoIW11bHRpY2ggJiYgdGFyZ2V0LT5jb25uZWN0ZWQpOwogCiAJdGFyZ2V0LT5xcF9pbl9lcnJvciA9IGZhbHNlOwogCi0JcmV0ID0gc3JwX2xvb2t1cF9wYXRoKHRhcmdldCk7CisJcmV0ID0gc3JwX2xvb2t1cF9wYXRoKGNoKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJd2hpbGUgKDEpIHsKLQkJaW5pdF9jb21wbGV0aW9uKCZ0YXJnZXQtPmRvbmUpOwotCQlyZXQgPSBzcnBfc2VuZF9yZXEodGFyZ2V0KTsKKwkJaW5pdF9jb21wbGV0aW9uKCZjaC0+ZG9uZSk7CisJCXJldCA9IHNycF9zZW5kX3JlcShjaCwgbXVsdGljaCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJnRhcmdldC0+ZG9uZSk7CisJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY2gtPmRvbmUpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTkyNiwxMyArMTAxMywxMyBAQAogCQkgKiBiYWNrLCBvciBTUlBfRExJRF9SRURJUkVDVCBpZiB3ZSBnZXQgYSBsaWQvcXAKIAkJICogcmVkaXJlY3QgUkVKIGJhY2suCiAJCSAqLwotCQlzd2l0Y2ggKHRhcmdldC0+c3RhdHVzKSB7CisJCXN3aXRjaCAoY2gtPnN0YXR1cykgewogCQljYXNlIDA6CiAJCQlzcnBfY2hhbmdlX2Nvbm5fc3RhdGUodGFyZ2V0LCB0cnVlKTsKIAkJCXJldHVybiAwOwogCiAJCWNhc2UgU1JQX1BPUlRfUkVESVJFQ1Q6Ci0JCQlyZXQgPSBzcnBfbG9va3VwX3BhdGgodGFyZ2V0KTsKKwkJCXJldCA9IHNycF9sb29rdXBfcGF0aChjaCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAJCQlicmVhazsKQEAgLTk0MSwyNyArMTAyOCwxOCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBTUlBfU1RBTEVfQ09OTjoKLQkJCS8qIE91ciBjdXJyZW50IENNIGlkIHdhcyBzdGFsZSwgYW5kIGlzIG5vdyBpbiB0aW1ld2FpdC4KLQkJCSAqIFRyeSB0byByZWNvbm5lY3Qgd2l0aCBhIG5ldyBvbmUuCi0JCQkgKi8KLQkJCWlmICghcmV0cmllcy0tIHx8IHNycF9uZXdfY21faWQodGFyZ2V0KSkgewotCQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAotCQkJCQkgICAgICJnaXZpbmcgdXAgb24gc3RhbGUgY29ubmVjdGlvblxuIik7Ci0JCQkJdGFyZ2V0LT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKLQkJCQlyZXR1cm4gdGFyZ2V0LT5zdGF0dXM7Ci0JCQl9Ci0KIAkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAotCQkJCSAgICAgInJldHJ5aW5nIHN0YWxlIGNvbm5lY3Rpb25cbiIpOwotCQkJYnJlYWs7CisJCQkJICAgICAiZ2l2aW5nIHVwIG9uIHN0YWxlIGNvbm5lY3Rpb25cbiIpOworCQkJY2gtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCQkJcmV0dXJuIGNoLT5zdGF0dXM7CiAKIAkJZGVmYXVsdDoKLQkJCXJldHVybiB0YXJnZXQtPnN0YXR1czsKKwkJCXJldHVybiBjaC0+c3RhdHVzOwogCQl9CiAJfQogfQogCi1zdGF0aWMgaW50IHNycF9pbnZfcmtleShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHUzMiBya2V5KQorc3RhdGljIGludCBzcnBfaW52X3JrZXkoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgdTMyIHJrZXkpCiB7CiAJc3RydWN0IGliX3NlbmRfd3IgKmJhZF93cjsKIAlzdHJ1Y3QgaWJfc2VuZF93ciB3ciA9IHsKQEAgLTk3MywxMyArMTA1MSwxNCBAQAogCQkuZXguaW52YWxpZGF0ZV9ya2V5ID0gcmtleSwKIAl9OwogCi0JcmV0dXJuIGliX3Bvc3Rfc2VuZCh0YXJnZXQtPnFwLCAmd3IsICZiYWRfd3IpOworCXJldHVybiBpYl9wb3N0X3NlbmQoY2gtPnFwLCAmd3IsICZiYWRfd3IpOwogfQogCiBzdGF0aWMgdm9pZCBzcnBfdW5tYXBfZGF0YShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCwKLQkJCSAgIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKKwkJCSAgIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsCiAJCQkgICBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBzcnBfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2OwogCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gZGV2LT5kZXY7CiAJaW50IGksIHJlczsKQEAgLTk5Myw3ICsxMDcyLDcgQEAKIAkJc3RydWN0IHNycF9mcl9kZXNjICoqcGZyOwogCiAJCWZvciAoaSA9IHJlcS0+bm1kZXNjLCBwZnIgPSByZXEtPmZyX2xpc3Q7IGkgPiAwOyBpLS0sIHBmcisrKSB7Ci0JCQlyZXMgPSBzcnBfaW52X3JrZXkodGFyZ2V0LCAoKnBmciktPm1yLT5ya2V5KTsKKwkJCXJlcyA9IHNycF9pbnZfcmtleShjaCwgKCpwZnIpLT5tci0+cmtleSk7CiAJCQlpZiAocmVzIDwgMCkgewogCQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAogCQkJCSAgIlF1ZXVlaW5nIElOViBXUiBmb3IgcmtleSAlI3ggZmFpbGVkICglZClcbiIsCkBAIC0xMDAzLDcgKzEwODIsNyBAQAogCQkJfQogCQl9CiAJCWlmIChyZXEtPm5tZGVzYykKLQkJCXNycF9mcl9wb29sX3B1dCh0YXJnZXQtPmZyX3Bvb2wsIHJlcS0+ZnJfbGlzdCwKKwkJCXNycF9mcl9wb29sX3B1dChjaC0+ZnJfcG9vbCwgcmVxLT5mcl9saXN0LAogCQkJCQlyZXEtPm5tZGVzYyk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGliX3Bvb2xfZm1yICoqcGZtcjsKQEAgLTEwMTgsNyArMTA5Nyw3IEBACiAKIC8qKgogICogc3JwX2NsYWltX3JlcSAtIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBzY21uZCBhc3NvY2lhdGVkIHdpdGggYSByZXF1ZXN0LgotICogQHRhcmdldDogU1JQIHRhcmdldCBwb3J0LgorICogQGNoOiBTUlAgUkRNQSBjaGFubmVsLgogICogQHJlcTogU1JQIHJlcXVlc3QuCiAgKiBAc2RldjogSWYgbm90IE5VTEwsIG9ubHkgdGFrZSBvd25lcnNoaXAgZm9yIHRoaXMgU0NTSSBkZXZpY2UuCiAgKiBAc2NtbmQ6IElmIE5VTEwsIHRha2Ugb3duZXJzaGlwIG9mIEByZXEtPnNjbW5kLiBJZiBub3QgTlVMTCwgb25seSB0YWtlCkBAIC0xMDI3LDE0ICsxMTA2LDE0IEBACiAgKiBSZXR1cm4gdmFsdWU6CiAgKiBFaXRoZXIgTlVMTCBvciBhIHBvaW50ZXIgdG8gdGhlIFNDU0kgY29tbWFuZCB0aGUgY2FsbGVyIGJlY2FtZSBvd25lciBvZi4KICAqLwotc3RhdGljIHN0cnVjdCBzY3NpX2NtbmQgKnNycF9jbGFpbV9yZXEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorc3RhdGljIHN0cnVjdCBzY3NpX2NtbmQgKnNycF9jbGFpbV9yZXEoc3RydWN0IHNycF9yZG1hX2NoICpjaCwKIAkJCQkgICAgICAgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEsCiAJCQkJICAgICAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKIAkJCQkgICAgICAgc3RydWN0IHNjc2lfY21uZCAqc2NtbmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKIAlpZiAocmVxLT5zY21uZCAmJgogCSAgICAoIXNkZXYgfHwgcmVxLT5zY21uZC0+ZGV2aWNlID09IHNkZXYpICYmCiAJICAgICghc2NtbmQgfHwgcmVxLT5zY21uZCA9PSBzY21uZCkpIHsKQEAgLTEwNDMsNDAgKzExMjIsMzcgQEAKIAl9IGVsc2UgewogCQlzY21uZCA9IE5VTEw7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gc2NtbmQ7CiB9CiAKIC8qKgogICogc3JwX2ZyZWVfcmVxKCkgLSBVbm1hcCBkYXRhIGFuZCBhZGQgcmVxdWVzdCB0byB0aGUgZnJlZSByZXF1ZXN0IGxpc3QuCi0gKiBAdGFyZ2V0OiBTUlAgdGFyZ2V0IHBvcnQuCisgKiBAY2g6ICAgICBTUlAgUkRNQSBjaGFubmVsLgogICogQHJlcTogICAgUmVxdWVzdCB0byBiZSBmcmVlZC4KICAqIEBzY21uZDogIFNDU0kgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGggQHJlcS4KICAqIEByZXFfbGltX2RlbHRhOiBBbW91bnQgdG8gYmUgYWRkZWQgdG8gQHRhcmdldC0+cmVxX2xpbS4KICAqLwotc3RhdGljIHZvaWQgc3JwX2ZyZWVfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKLQkJCSBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwgc3RydWN0IHNjc2lfY21uZCAqc2NtbmQsCi0JCQkgczMyIHJlcV9saW1fZGVsdGEpCitzdGF0aWMgdm9pZCBzcnBfZnJlZV9yZXEoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEsCisJCQkgc3RydWN0IHNjc2lfY21uZCAqc2NtbmQsIHMzMiByZXFfbGltX2RlbHRhKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcnBfdW5tYXBfZGF0YShzY21uZCwgdGFyZ2V0LCByZXEpOworCXNycF91bm1hcF9kYXRhKHNjbW5kLCBjaCwgcmVxKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKLQl0YXJnZXQtPnJlcV9saW0gKz0gcmVxX2xpbV9kZWx0YTsKLQlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZ0YXJnZXQtPmZyZWVfcmVxcyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBmbGFncyk7CisJY2gtPnJlcV9saW0gKz0gcmVxX2xpbV9kZWx0YTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBzcnBfZmluaXNoX3JlcShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCi0JCQkgICBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJICAgaW50IHJlc3VsdCkKK3N0YXRpYyB2b2lkIHNycF9maW5pc2hfcmVxKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxLAorCQkJICAgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcmVzdWx0KQogewotCXN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kID0gc3JwX2NsYWltX3JlcSh0YXJnZXQsIHJlcSwgc2RldiwgTlVMTCk7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtbmQgPSBzcnBfY2xhaW1fcmVxKGNoLCByZXEsIHNkZXYsIE5VTEwpOwogCiAJaWYgKHNjbW5kKSB7Ci0JCXNycF9mcmVlX3JlcSh0YXJnZXQsIHJlcSwgc2NtbmQsIDApOworCQlzcnBfZnJlZV9yZXEoY2gsIHJlcSwgc2NtbmQsIDApOwogCQlzY21uZC0+cmVzdWx0ID0gcmVzdWx0OwogCQlzY21uZC0+c2NzaV9kb25lKHNjbW5kKTsKIAl9CkBAIC0xMDg1LDkgKzExNjEsMTAgQEAKIHN0YXRpYyB2b2lkIHNycF90ZXJtaW5hdGVfaW8oc3RydWN0IHNycF9ycG9ydCAqcnBvcnQpCiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gcnBvcnQtPmxsZF9kYXRhOworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2g7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0YXJnZXQtPnNjc2lfaG9zdDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7Ci0JaW50IGk7CisJaW50IGksIGo7CiAKIAkvKgogCSAqIEludm9raW5nIHNycF90ZXJtaW5hdGVfaW8oKSB3aGlsZSBzcnBfcXVldWVjb21tYW5kKCkgaXMgcnVubmluZwpAQCAtMTA5Niw5ICsxMTczLDE1IEBACiAJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIHNob3N0KQogCQlXQVJOX09OX09OQ0Uoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cmVxdWVzdF9mbl9hY3RpdmUpOwogCi0JZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cmVxX3Jpbmdfc2l6ZTsgKytpKSB7Ci0JCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxID0gJnRhcmdldC0+cmVxX3JpbmdbaV07Ci0JCXNycF9maW5pc2hfcmVxKHRhcmdldCwgcmVxLCBOVUxMLCBESURfVFJBTlNQT1JUX0ZBSUxGQVNUIDw8IDE2KTsKKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCWNoID0gJnRhcmdldC0+Y2hbaV07CisKKwkJZm9yIChqID0gMDsgaiA8IHRhcmdldC0+cmVxX3Jpbmdfc2l6ZTsgKytqKSB7CisJCQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSA9ICZjaC0+cmVxX3Jpbmdbal07CisKKwkJCXNycF9maW5pc2hfcmVxKGNoLCByZXEsIE5VTEwsCisJCQkJICAgICAgIERJRF9UUkFOU1BPUlRfRkFJTEZBU1QgPDwgMTYpOworCQl9CiAJfQogfQogCkBAIC0xMTE0LDM0ICsxMTk3LDYxIEBACiBzdGF0aWMgaW50IHNycF9ycG9ydF9yZWNvbm5lY3Qoc3RydWN0IHNycF9ycG9ydCAqcnBvcnQpCiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gcnBvcnQtPmxsZF9kYXRhOwotCWludCBpLCByZXQ7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaDsKKwlpbnQgaSwgaiwgcmV0ID0gMDsKKwlib29sIG11bHRpY2ggPSBmYWxzZTsKIAogCXNycF9kaXNjb25uZWN0X3RhcmdldCh0YXJnZXQpOworCisJaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9TQ0FOTklORykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAkvKgogCSAqIE5vdyBnZXQgYSBuZXcgbG9jYWwgQ00gSUQgc28gdGhhdCB3ZSBhdm9pZCBjb25mdXNpbmcgdGhlIHRhcmdldCBpbgogCSAqIGNhc2UgdGhpbmdzIGFyZSByZWFsbHkgZm91bGVkIHVwLiBEb2luZyBzbyBhbHNvIGVuc3VyZXMgdGhhdCBhbGwgQ00KIAkgKiBjYWxsYmFja3Mgd2lsbCBoYXZlIGZpbmlzaGVkIGJlZm9yZSBhIG5ldyBRUCBpcyBhbGxvY2F0ZWQuCiAJICovCi0JcmV0ID0gc3JwX25ld19jbV9pZCh0YXJnZXQpOwotCi0JZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cmVxX3Jpbmdfc2l6ZTsgKytpKSB7Ci0JCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxID0gJnRhcmdldC0+cmVxX3JpbmdbaV07Ci0JCXNycF9maW5pc2hfcmVxKHRhcmdldCwgcmVxLCBOVUxMLCBESURfUkVTRVQgPDwgMTYpOworCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKwkJaWYgKCFjaC0+dGFyZ2V0KQorCQkJYnJlYWs7CisJCXJldCArPSBzcnBfbmV3X2NtX2lkKGNoKTsKIAl9CisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+Y2hfY291bnQ7IGkrKykgeworCQljaCA9ICZ0YXJnZXQtPmNoW2ldOworCQlpZiAoIWNoLT50YXJnZXQpCisJCQlicmVhazsKKwkJZm9yIChqID0gMDsgaiA8IHRhcmdldC0+cmVxX3Jpbmdfc2l6ZTsgKytqKSB7CisJCQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSA9ICZjaC0+cmVxX3Jpbmdbal07CiAKLQkvKgotCSAqIFdoZXRoZXIgb3Igbm90IGNyZWF0aW5nIGEgbmV3IENNIElEIHN1Y2NlZWRlZCwgY3JlYXRlIGEgbmV3Ci0JICogUVAuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFsbCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBvbGQgUVAgaGF2ZQotCSAqIGZpbmlzaGVkIGJlZm9yZSBhbnkgc2VuZCByZXF1ZXN0cyBhcmUgcG9zdGVkIG9uIHRoZSBuZXcgUVAuCi0JICovCi0JcmV0ICs9IHNycF9jcmVhdGVfdGFyZ2V0X2liKHRhcmdldCk7CisJCQlzcnBfZmluaXNoX3JlcShjaCwgcmVxLCBOVUxMLCBESURfUkVTRVQgPDwgMTYpOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKwkJaWYgKCFjaC0+dGFyZ2V0KQorCQkJYnJlYWs7CisJCS8qCisJCSAqIFdoZXRoZXIgb3Igbm90IGNyZWF0aW5nIGEgbmV3IENNIElEIHN1Y2NlZWRlZCwgY3JlYXRlIGEgbmV3CisJCSAqIFFQLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBhbGwgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbgorCQkgKiBpbnZvY2F0aW9ucyBoYXZlIGZpbmlzaGVkIGJlZm9yZSByZXF1ZXN0IHJlc2V0dGluZyBzdGFydHMuCisJCSAqLworCQlyZXQgKz0gc3JwX2NyZWF0ZV9jaF9pYihjaCk7CiAKLQlJTklUX0xJU1RfSEVBRCgmdGFyZ2V0LT5mcmVlX3R4KTsKLQlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5xdWV1ZV9zaXplOyArK2kpCi0JCWxpc3RfYWRkKCZ0YXJnZXQtPnR4X3JpbmdbaV0tPmxpc3QsICZ0YXJnZXQtPmZyZWVfdHgpOwotCi0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBzcnBfY29ubmVjdF90YXJnZXQodGFyZ2V0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmNoLT5mcmVlX3R4KTsKKwkJZm9yIChqID0gMDsgaiA8IHRhcmdldC0+cXVldWVfc2l6ZTsgKytqKQorCQkJbGlzdF9hZGQoJmNoLT50eF9yaW5nW2pdLT5saXN0LCAmY2gtPmZyZWVfdHgpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCWNoID0gJnRhcmdldC0+Y2hbaV07CisJCWlmIChyZXQgfHwgIWNoLT50YXJnZXQpIHsKKwkJCWlmIChpID4gMSkKKwkJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gc3JwX2Nvbm5lY3RfY2goY2gsIG11bHRpY2gpOworCQltdWx0aWNoID0gdHJ1ZTsKKwl9CiAKIAlpZiAocmV0ID09IDApCiAJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHRhcmdldC0+c2NzaV9ob3N0LApAQCAtMTE2NSwxMiArMTI3NSwxMiBAQAogfQogCiBzdGF0aWMgaW50IHNycF9tYXBfZmluaXNoX2ZtcihzdHJ1Y3Qgc3JwX21hcF9zdGF0ZSAqc3RhdGUsCi0JCQkgICAgICBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCisJCQkgICAgICBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogewogCXN0cnVjdCBpYl9wb29sX2ZtciAqZm1yOwogCXU2NCBpb19hZGRyID0gMDsKIAotCWZtciA9IGliX2Ztcl9wb29sX21hcF9waHlzKHRhcmdldC0+Zm1yX3Bvb2wsIHN0YXRlLT5wYWdlcywKKwlmbXIgPSBpYl9mbXJfcG9vbF9tYXBfcGh5cyhjaC0+Zm1yX3Bvb2wsIHN0YXRlLT5wYWdlcywKIAkJCQkgICBzdGF0ZS0+bnBhZ2VzLCBpb19hZGRyKTsKIAlpZiAoSVNfRVJSKGZtcikpCiAJCXJldHVybiBQVFJfRVJSKGZtcik7CkBAIC0xMTg0LDE1ICsxMjk0LDE2IEBACiB9CiAKIHN0YXRpYyBpbnQgc3JwX21hcF9maW5pc2hfZnIoc3RydWN0IHNycF9tYXBfc3RhdGUgKnN0YXRlLAotCQkJICAgICBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCisJCQkgICAgIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2RldjsKIAlzdHJ1Y3QgaWJfc2VuZF93ciAqYmFkX3dyOwogCXN0cnVjdCBpYl9zZW5kX3dyIHdyOwogCXN0cnVjdCBzcnBfZnJfZGVzYyAqZGVzYzsKIAl1MzIgcmtleTsKIAotCWRlc2MgPSBzcnBfZnJfcG9vbF9nZXQodGFyZ2V0LT5mcl9wb29sKTsKKwlkZXNjID0gc3JwX2ZyX3Bvb2xfZ2V0KGNoLT5mcl9wb29sKTsKIAlpZiAoIWRlc2MpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMjIxLDEyICsxMzMyLDEzIEBACiAJc3JwX21hcF9kZXNjKHN0YXRlLCBzdGF0ZS0+YmFzZV9kbWFfYWRkciwgc3RhdGUtPmRtYV9sZW4sCiAJCSAgICAgZGVzYy0+bXItPnJrZXkpOwogCi0JcmV0dXJuIGliX3Bvc3Rfc2VuZCh0YXJnZXQtPnFwLCAmd3IsICZiYWRfd3IpOworCXJldHVybiBpYl9wb3N0X3NlbmQoY2gtPnFwLCAmd3IsICZiYWRfd3IpOwogfQogCiBzdGF0aWMgaW50IHNycF9maW5pc2hfbWFwcGluZyhzdHJ1Y3Qgc3JwX21hcF9zdGF0ZSAqc3RhdGUsCi0JCQkgICAgICBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCisJCQkgICAgICBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoc3RhdGUtPm5wYWdlcyA9PSAwKQpAQCAtMTIzNyw4ICsxMzQ5LDggQEAKIAkJCSAgICAgdGFyZ2V0LT5ya2V5KTsKIAllbHNlCiAJCXJldCA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPnVzZV9mYXN0X3JlZyA/Ci0JCQlzcnBfbWFwX2ZpbmlzaF9mcihzdGF0ZSwgdGFyZ2V0KSA6Ci0JCQlzcnBfbWFwX2ZpbmlzaF9mbXIoc3RhdGUsIHRhcmdldCk7CisJCQlzcnBfbWFwX2ZpbmlzaF9mcihzdGF0ZSwgY2gpIDoKKwkJCXNycF9tYXBfZmluaXNoX2ZtcihzdGF0ZSwgY2gpOwogCiAJaWYgKHJldCA9PSAwKSB7CiAJCXN0YXRlLT5ucGFnZXMgPSAwOwpAQCAtMTI1OCwxMCArMTM3MCwxMSBAQAogfQogCiBzdGF0aWMgaW50IHNycF9tYXBfc2dfZW50cnkoc3RydWN0IHNycF9tYXBfc3RhdGUgKnN0YXRlLAotCQkJICAgIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKKwkJCSAgICBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLAogCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBzZ19pbmRleCwKIAkJCSAgICBib29sIHVzZV9tcikKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBzcnBfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2OwogCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gZGV2LT5kZXY7CiAJZG1hX2FkZHJfdCBkbWFfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCBzZyk7CkBAIC0xMjkwLDcgKzE0MDMsNyBAQAogCSAqLwogCWlmICgoIWRldi0+dXNlX2Zhc3RfcmVnICYmIGRtYV9hZGRyICYgfmRldi0+bXJfcGFnZV9tYXNrKSB8fAogCSAgICBkbWFfbGVuID4gZGV2LT5tcl9tYXhfc2l6ZSkgewotCQlyZXQgPSBzcnBfZmluaXNoX21hcHBpbmcoc3RhdGUsIHRhcmdldCk7CisJCXJldCA9IHNycF9maW5pc2hfbWFwcGluZyhzdGF0ZSwgY2gpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIApAQCAtMTMxMSw3ICsxNDI0LDcgQEAKIAl3aGlsZSAoZG1hX2xlbikgewogCQl1bnNpZ25lZCBvZmZzZXQgPSBkbWFfYWRkciAmIH5kZXYtPm1yX3BhZ2VfbWFzazsKIAkJaWYgKHN0YXRlLT5ucGFnZXMgPT0gZGV2LT5tYXhfcGFnZXNfcGVyX21yIHx8IG9mZnNldCAhPSAwKSB7Ci0JCQlyZXQgPSBzcnBfZmluaXNoX21hcHBpbmcoc3RhdGUsIHRhcmdldCk7CisJCQlyZXQgPSBzcnBfZmluaXNoX21hcHBpbmcoc3RhdGUsIGNoKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIApAQCAtMTMzNSwxNyArMTQ0OCwxOCBAQAogCSAqLwogCXJldCA9IDA7CiAJaWYgKGxlbiAhPSBkZXYtPm1yX3BhZ2Vfc2l6ZSkgewotCQlyZXQgPSBzcnBfZmluaXNoX21hcHBpbmcoc3RhdGUsIHRhcmdldCk7CisJCXJldCA9IHNycF9maW5pc2hfbWFwcGluZyhzdGF0ZSwgY2gpOwogCQlpZiAoIXJldCkKIAkJCXNycF9tYXBfdXBkYXRlX3N0YXJ0KHN0YXRlLCBOVUxMLCAwLCAwKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzcnBfbWFwX3NnKHN0cnVjdCBzcnBfbWFwX3N0YXRlICpzdGF0ZSwKLQkJICAgICAgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwKLQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0LCBpbnQgY291bnQpCitzdGF0aWMgaW50IHNycF9tYXBfc2coc3RydWN0IHNycF9tYXBfc3RhdGUgKnN0YXRlLCBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLAorCQkgICAgICBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0LAorCQkgICAgICBpbnQgY291bnQpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2RldjsKIAlzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiA9IGRldi0+ZGV2OwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CkBAIC0xMzU2LDE0ICsxNDcwLDE0IEBACiAJc3RhdGUtPnBhZ2VzCT0gcmVxLT5tYXBfcGFnZTsKIAlpZiAoZGV2LT51c2VfZmFzdF9yZWcpIHsKIAkJc3RhdGUtPm5leHRfZnIgPSByZXEtPmZyX2xpc3Q7Ci0JCXVzZV9tciA9ICEhdGFyZ2V0LT5mcl9wb29sOworCQl1c2VfbXIgPSAhIWNoLT5mcl9wb29sOwogCX0gZWxzZSB7CiAJCXN0YXRlLT5uZXh0X2ZtciA9IHJlcS0+Zm1yX2xpc3Q7Ci0JCXVzZV9tciA9ICEhdGFyZ2V0LT5mbXJfcG9vbDsKKwkJdXNlX21yID0gISFjaC0+Zm1yX3Bvb2w7CiAJfQogCiAJZm9yX2VhY2hfc2coc2NhdCwgc2csIGNvdW50LCBpKSB7Ci0JCWlmIChzcnBfbWFwX3NnX2VudHJ5KHN0YXRlLCB0YXJnZXQsIHNnLCBpLCB1c2VfbXIpKSB7CisJCWlmIChzcnBfbWFwX3NnX2VudHJ5KHN0YXRlLCBjaCwgc2csIGksIHVzZV9tcikpIHsKIAkJCS8qCiAJCQkgKiBNZW1vcnkgcmVnaXN0cmF0aW9uIGZhaWxlZCwgc28gYmFja3RyYWNrIHRvIHRoZQogCQkJICogZmlyc3QgdW5tYXBwZWQgZW50cnkgYW5kIGNvbnRpbnVlIG9uIHdpdGhvdXQgdXNpbmcKQEAgLTEzODUsNyArMTQ5OSw3IEBACiAJCX0KIAl9CiAKLQlpZiAodXNlX21yICYmIHNycF9maW5pc2hfbWFwcGluZyhzdGF0ZSwgdGFyZ2V0KSkKKwlpZiAodXNlX21yICYmIHNycF9maW5pc2hfbWFwcGluZyhzdGF0ZSwgY2gpKQogCQlnb3RvIGJhY2t0cmFjazsKIAogCXJlcS0+bm1kZXNjID0gc3RhdGUtPm5tZGVzYzsKQEAgLTEzOTMsOSArMTUwNywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNycF9tYXBfZGF0YShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCwgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorc3RhdGljIGludCBzcnBfbWFwX2RhdGEoc3RydWN0IHNjc2lfY21uZCAqc2NtbmQsIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsCiAJCQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdDsKIAlzdHJ1Y3Qgc3JwX2NtZCAqY21kID0gcmVxLT5jbWQtPmJ1ZjsKIAlpbnQgbGVuLCBuZW50cywgY291bnQ7CkBAIC0xNDU3LDcgKzE1NzIsNyBAQAogCQkJCSAgIHRhcmdldC0+aW5kaXJlY3Rfc2l6ZSwgRE1BX1RPX0RFVklDRSk7CiAKIAltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKLQlzcnBfbWFwX3NnKCZzdGF0ZSwgdGFyZ2V0LCByZXEsIHNjYXQsIGNvdW50KTsKKwlzcnBfbWFwX3NnKCZzdGF0ZSwgY2gsIHJlcSwgc2NhdCwgY291bnQpOwogCiAJLyogV2UndmUgbWFwcGVkIHRoZSByZXF1ZXN0LCBub3cgcHVsbCBhcyBtdWNoIG9mIHRoZSBpbmRpcmVjdAogCSAqIGRlc2NyaXB0b3IgdGFibGUgYXMgd2UgY2FuIGludG8gdGhlIGNvbW1hbmQgYnVmZmVyLiBJZiB0aGlzCkBAIC0xNTE4LDIwICsxNjMzLDIwIEBACiAvKgogICogUmV0dXJuIGFuIElVIGFuZCBwb3NzaWJsZSBjcmVkaXQgdG8gdGhlIGZyZWUgcG9vbAogICovCi1zdGF0aWMgdm9pZCBzcnBfcHV0X3R4X2l1KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9pdSAqaXUsCitzdGF0aWMgdm9pZCBzcnBfcHV0X3R4X2l1KHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIHN0cnVjdCBzcnBfaXUgKml1LAogCQkJICBlbnVtIHNycF9pdV90eXBlIGl1X3R5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZCgmaXUtPmxpc3QsICZ0YXJnZXQtPmZyZWVfdHgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZpdS0+bGlzdCwgJmNoLT5mcmVlX3R4KTsKIAlpZiAoaXVfdHlwZSAhPSBTUlBfSVVfUlNQKQotCQkrK3RhcmdldC0+cmVxX2xpbTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKKwkJKytjaC0+cmVxX2xpbTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0YXJnZXQtPmxvY2sgaGVsZCB0byBwcm90ZWN0IHJlcV9saW0gYW5kIGZyZWVfdHguCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNoLT5sb2NrIGhlbGQgdG8gcHJvdGVjdCByZXFfbGltIGFuZCBmcmVlX3R4LgogICogSWYgSVUgaXMgbm90IHNlbnQsIGl0IG11c3QgYmUgcmV0dXJuZWQgdXNpbmcgc3JwX3B1dF90eF9pdSgpLgogICoKICAqIE5vdGU6CkBAIC0xNTQzLDM1ICsxNjU4LDM2IEBACiAgKiAtIFNSUF9JVV9SU1A6IDEsIHNpbmNlIGEgY29uZm9ybWluZyBTUlAgdGFyZ2V0IG5ldmVyIHNlbmRzIG1vcmUgdGhhbgogICogICBvbmUgdW5hbnN3ZXJlZCBTUlAgcmVxdWVzdCB0byBhbiBpbml0aWF0b3IuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3JwX2l1ICpfX3NycF9nZXRfdHhfaXUoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorc3RhdGljIHN0cnVjdCBzcnBfaXUgKl9fc3JwX2dldF90eF9pdShzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLAogCQkJCSAgICAgIGVudW0gc3JwX2l1X3R5cGUgaXVfdHlwZSkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXMzMiByc3YgPSAoaXVfdHlwZSA9PSBTUlBfSVVfVFNLX01HTVQpID8gMCA6IFNSUF9UU0tfTUdNVF9TUV9TSVpFOwogCXN0cnVjdCBzcnBfaXUgKml1OwogCi0Jc3JwX3NlbmRfY29tcGxldGlvbih0YXJnZXQtPnNlbmRfY3EsIHRhcmdldCk7CisJc3JwX3NlbmRfY29tcGxldGlvbihjaC0+c2VuZF9jcSwgY2gpOwogCi0JaWYgKGxpc3RfZW1wdHkoJnRhcmdldC0+ZnJlZV90eCkpCisJaWYgKGxpc3RfZW1wdHkoJmNoLT5mcmVlX3R4KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBJbml0aWF0b3IgcmVzcG9uc2VzIHRvIHRhcmdldCByZXF1ZXN0cyBkbyBub3QgY29uc3VtZSBjcmVkaXRzICovCiAJaWYgKGl1X3R5cGUgIT0gU1JQX0lVX1JTUCkgewotCQlpZiAodGFyZ2V0LT5yZXFfbGltIDw9IHJzdikgeworCQlpZiAoY2gtPnJlcV9saW0gPD0gcnN2KSB7CiAJCQkrK3RhcmdldC0+emVyb19yZXFfbGltOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAotCQktLXRhcmdldC0+cmVxX2xpbTsKKwkJLS1jaC0+cmVxX2xpbTsKIAl9CiAKLQlpdSA9IGxpc3RfZmlyc3RfZW50cnkoJnRhcmdldC0+ZnJlZV90eCwgc3RydWN0IHNycF9pdSwgbGlzdCk7CisJaXUgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjaC0+ZnJlZV90eCwgc3RydWN0IHNycF9pdSwgbGlzdCk7CiAJbGlzdF9kZWwoJml1LT5saXN0KTsKIAlyZXR1cm4gaXU7CiB9CiAKLXN0YXRpYyBpbnQgc3JwX3Bvc3Rfc2VuZChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCi0JCQkgc3RydWN0IHNycF9pdSAqaXUsIGludCBsZW4pCitzdGF0aWMgaW50IHNycF9wb3N0X3NlbmQoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgc3RydWN0IHNycF9pdSAqaXUsIGludCBsZW4pCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3QgaWJfc2dlIGxpc3Q7CiAJc3RydWN0IGliX3NlbmRfd3Igd3IsICpiYWRfd3I7CiAKQEAgLTE1ODYsMTEgKzE3MDIsMTIgQEAKIAl3ci5vcGNvZGUgICAgID0gSUJfV1JfU0VORDsKIAl3ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKIAotCXJldHVybiBpYl9wb3N0X3NlbmQodGFyZ2V0LT5xcCwgJndyLCAmYmFkX3dyKTsKKwlyZXR1cm4gaWJfcG9zdF9zZW5kKGNoLT5xcCwgJndyLCAmYmFkX3dyKTsKIH0KIAotc3RhdGljIGludCBzcnBfcG9zdF9yZWN2KHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9pdSAqaXUpCitzdGF0aWMgaW50IHNycF9wb3N0X3JlY3Yoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgc3RydWN0IHNycF9pdSAqaXUpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3QgaWJfcmVjdl93ciB3ciwgKmJhZF93cjsKIAlzdHJ1Y3QgaWJfc2dlIGxpc3Q7CiAKQEAgLTE2MDMsMzUgKzE3MjAsMzkgQEAKIAl3ci5zZ19saXN0ICA9ICZsaXN0OwogCXdyLm51bV9zZ2UgID0gMTsKIAotCXJldHVybiBpYl9wb3N0X3JlY3YodGFyZ2V0LT5xcCwgJndyLCAmYmFkX3dyKTsKKwlyZXR1cm4gaWJfcG9zdF9yZWN2KGNoLT5xcCwgJndyLCAmYmFkX3dyKTsKIH0KIAotc3RhdGljIHZvaWQgc3JwX3Byb2Nlc3NfcnNwKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9yc3AgKnJzcCkKK3N0YXRpYyB2b2lkIHNycF9wcm9jZXNzX3JzcChzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCBzdHJ1Y3Qgc3JwX3JzcCAqcnNwKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtbmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICh1bmxpa2VseShyc3AtPnRhZyAmIFNSUF9UQUdfVFNLX01HTVQpKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKLQkJdGFyZ2V0LT5yZXFfbGltICs9IGJlMzJfdG9fY3B1KHJzcC0+cmVxX2xpbV9kZWx0YSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKKwkJY2gtPnJlcV9saW0gKz0gYmUzMl90b19jcHUocnNwLT5yZXFfbGltX2RlbHRhKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIAotCQl0YXJnZXQtPnRza19tZ210X3N0YXR1cyA9IC0xOworCQljaC0+dHNrX21nbXRfc3RhdHVzID0gLTE7CiAJCWlmIChiZTMyX3RvX2NwdShyc3AtPnJlc3BfZGF0YV9sZW4pID49IDQpCi0JCQl0YXJnZXQtPnRza19tZ210X3N0YXR1cyA9IHJzcC0+ZGF0YVszXTsKLQkJY29tcGxldGUoJnRhcmdldC0+dHNrX21nbXRfZG9uZSk7CisJCQljaC0+dHNrX21nbXRfc3RhdHVzID0gcnNwLT5kYXRhWzNdOworCQljb21wbGV0ZSgmY2gtPnRza19tZ210X2RvbmUpOwogCX0gZWxzZSB7Ci0JCXJlcSA9ICZ0YXJnZXQtPnJlcV9yaW5nW3JzcC0+dGFnXTsKLQkJc2NtbmQgPSBzcnBfY2xhaW1fcmVxKHRhcmdldCwgcmVxLCBOVUxMLCBOVUxMKTsKKwkJc2NtbmQgPSBzY3NpX2hvc3RfZmluZF90YWcodGFyZ2V0LT5zY3NpX2hvc3QsIHJzcC0+dGFnKTsKKwkJaWYgKHNjbW5kKSB7CisJCQlyZXEgPSAodm9pZCAqKXNjbW5kLT5ob3N0X3NjcmliYmxlOworCQkJc2NtbmQgPSBzcnBfY2xhaW1fcmVxKGNoLCByZXEsIE5VTEwsIHNjbW5kKTsKKwkJfQogCQlpZiAoIXNjbW5kKSB7CiAJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LAotCQkJCSAgICAgIk51bGwgc2NtbmQgZm9yIFJTUCB3L3RhZyAlMDE2bGx4XG4iLAotCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcnNwLT50YWcpOworCQkJCSAgICAgIk51bGwgc2NtbmQgZm9yIFJTUCB3L3RhZyAlIzAxNmxseCByZWNlaXZlZCBvbiBjaCAldGQgLyBRUCAlI3hcbiIsCisJCQkJICAgICByc3AtPnRhZywgY2ggLSB0YXJnZXQtPmNoLCBjaC0+cXAtPnFwX251bSk7CiAKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKLQkJCXRhcmdldC0+cmVxX2xpbSArPSBiZTMyX3RvX2NwdShyc3AtPnJlcV9saW1fZGVsdGEpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKKwkJCWNoLT5yZXFfbGltICs9IGJlMzJfdG9fY3B1KHJzcC0+cmVxX2xpbV9kZWx0YSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOwogCiAJCQlyZXR1cm47CiAJCX0KQEAgLTE2NTMsNyArMTc3NCw3IEBACiAJCWVsc2UgaWYgKHVubGlrZWx5KHJzcC0+ZmxhZ3MgJiBTUlBfUlNQX0ZMQUdfRE9PVkVSKSkKIAkJCXNjc2lfc2V0X3Jlc2lkKHNjbW5kLCAtYmUzMl90b19jcHUocnNwLT5kYXRhX291dF9yZXNfY250KSk7CiAKLQkJc3JwX2ZyZWVfcmVxKHRhcmdldCwgcmVxLCBzY21uZCwKKwkJc3JwX2ZyZWVfcmVxKGNoLCByZXEsIHNjbW5kLAogCQkJICAgICBiZTMyX3RvX2NwdShyc3AtPnJlcV9saW1fZGVsdGEpKTsKIAogCQlzY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CkBAIC0xNjYxLDE4ICsxNzgyLDE5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNycF9yZXNwb25zZV9jb21tb24oc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzMzIgcmVxX2RlbHRhLAorc3RhdGljIGludCBzcnBfcmVzcG9uc2VfY29tbW9uKHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gsIHMzMiByZXFfZGVsdGEsCiAJCQkgICAgICAgdm9pZCAqcnNwLCBpbnQgbGVuKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IGliX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNycF9pdSAqaXU7CiAJaW50IGVycjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKLQl0YXJnZXQtPnJlcV9saW0gKz0gcmVxX2RlbHRhOwotCWl1ID0gX19zcnBfZ2V0X3R4X2l1KHRhcmdldCwgU1JQX0lVX1JTUCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBmbGFncyk7CisJY2gtPnJlcV9saW0gKz0gcmVxX2RlbHRhOworCWl1ID0gX19zcnBfZ2V0X3R4X2l1KGNoLCBTUlBfSVVfUlNQKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCFpdSkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKQEAgLTE2ODQsMTcgKzE4MDYsMTcgQEAKIAltZW1jcHkoaXUtPmJ1ZiwgcnNwLCBsZW4pOwogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgaXUtPmRtYSwgbGVuLCBETUFfVE9fREVWSUNFKTsKIAotCWVyciA9IHNycF9wb3N0X3NlbmQodGFyZ2V0LCBpdSwgbGVuKTsKKwllcnIgPSBzcnBfcG9zdF9zZW5kKGNoLCBpdSwgbGVuKTsKIAlpZiAoZXJyKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAogCQkJICAgICAidW5hYmxlIHRvIHBvc3QgcmVzcG9uc2U6ICVkXG4iLCBlcnIpOwotCQlzcnBfcHV0X3R4X2l1KHRhcmdldCwgaXUsIFNSUF9JVV9SU1ApOworCQlzcnBfcHV0X3R4X2l1KGNoLCBpdSwgU1JQX0lVX1JTUCk7CiAJfQogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgc3JwX3Byb2Nlc3NfY3JlZF9yZXEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LAorc3RhdGljIHZvaWQgc3JwX3Byb2Nlc3NfY3JlZF9yZXEoc3RydWN0IHNycF9yZG1hX2NoICpjaCwKIAkJCQkgc3RydWN0IHNycF9jcmVkX3JlcSAqcmVxKQogewogCXN0cnVjdCBzcnBfY3JlZF9yc3AgcnNwID0gewpAQCAtMTcwMywxNCArMTgyNSwxNSBAQAogCX07CiAJczMyIGRlbHRhID0gYmUzMl90b19jcHUocmVxLT5yZXFfbGltX2RlbHRhKTsKIAotCWlmIChzcnBfcmVzcG9uc2VfY29tbW9uKHRhcmdldCwgZGVsdGEsICZyc3AsIHNpemVvZiByc3ApKQotCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKKwlpZiAoc3JwX3Jlc3BvbnNlX2NvbW1vbihjaCwgZGVsdGEsICZyc3AsIHNpemVvZihyc3ApKSkKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBjaC0+dGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAogCQkJICAgICAicHJvYmxlbXMgcHJvY2Vzc2luZyBTUlBfQ1JFRF9SRVFcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBzcnBfcHJvY2Vzc19hZXJfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwKK3N0YXRpYyB2b2lkIHNycF9wcm9jZXNzX2Flcl9yZXEoc3RydWN0IHNycF9yZG1hX2NoICpjaCwKIAkJCQlzdHJ1Y3Qgc3JwX2Flcl9yZXEgKnJlcSkKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBzcnBfYWVyX3JzcCByc3AgPSB7CiAJCS5vcGNvZGUgPSBTUlBfQUVSX1JTUCwKIAkJLnRhZyA9IHJlcS0+dGFnLApAQCAtMTcyMCwxOSArMTg0MywyMCBAQAogCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAogCQkgICAgICJpZ25vcmluZyBBRVIgZm9yIExVTiAlbGx1XG4iLCBiZTY0X3RvX2NwdShyZXEtPmx1bikpOwogCi0JaWYgKHNycF9yZXNwb25zZV9jb21tb24odGFyZ2V0LCBkZWx0YSwgJnJzcCwgc2l6ZW9mIHJzcCkpCisJaWYgKHNycF9yZXNwb25zZV9jb21tb24oY2gsIGRlbHRhLCAmcnNwLCBzaXplb2YocnNwKSkpCiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAogCQkJICAgICAicHJvYmxlbXMgcHJvY2Vzc2luZyBTUlBfQUVSX1JFUVxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNycF9oYW5kbGVfcmVjdihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBpYl93YyAqd2MpCitzdGF0aWMgdm9pZCBzcnBfaGFuZGxlX3JlY3Yoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgc3RydWN0IGliX3djICp3YykKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldjsKIAlzdHJ1Y3Qgc3JwX2l1ICppdSA9IChzdHJ1Y3Qgc3JwX2l1ICopICh1aW50cHRyX3QpIHdjLT53cl9pZDsKIAlpbnQgcmVzOwogCXU4IG9wY29kZTsKIAotCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgaXUtPmRtYSwgdGFyZ2V0LT5tYXhfdGlfaXVfbGVuLAorCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgaXUtPmRtYSwgY2gtPm1heF90aV9pdV9sZW4sCiAJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKIAogCW9wY29kZSA9ICoodTggKikgaXUtPmJ1ZjsKQEAgLTE3NDYsMTUgKzE4NzAsMTUgQEAKIAogCXN3aXRjaCAob3Bjb2RlKSB7CiAJY2FzZSBTUlBfUlNQOgotCQlzcnBfcHJvY2Vzc19yc3AodGFyZ2V0LCBpdS0+YnVmKTsKKwkJc3JwX3Byb2Nlc3NfcnNwKGNoLCBpdS0+YnVmKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNSUF9DUkVEX1JFUToKLQkJc3JwX3Byb2Nlc3NfY3JlZF9yZXEodGFyZ2V0LCBpdS0+YnVmKTsKKwkJc3JwX3Byb2Nlc3NfY3JlZF9yZXEoY2gsIGl1LT5idWYpOwogCQlicmVhazsKIAogCWNhc2UgU1JQX0FFUl9SRVE6Ci0JCXNycF9wcm9jZXNzX2Flcl9yZXEodGFyZ2V0LCBpdS0+YnVmKTsKKwkJc3JwX3Byb2Nlc3NfYWVyX3JlcShjaCwgaXUtPmJ1Zik7CiAJCWJyZWFrOwogCiAJY2FzZSBTUlBfVF9MT0dPVVQ6CkBAIC0xNzY5LDEwICsxODkzLDEwIEBACiAJCWJyZWFrOwogCX0KIAotCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgaXUtPmRtYSwgdGFyZ2V0LT5tYXhfdGlfaXVfbGVuLAorCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgaXUtPmRtYSwgY2gtPm1heF90aV9pdV9sZW4sCiAJCQkJICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAotCXJlcyA9IHNycF9wb3N0X3JlY3YodGFyZ2V0LCBpdSk7CisJcmVzID0gc3JwX3Bvc3RfcmVjdihjaCwgaXUpOwogCWlmIChyZXMgIT0gMCkKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwKIAkJCSAgICAgUEZYICJSZWN2IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJlcyk7CkBAIC0xNzk1LDggKzE5MTksMTUgQEAKIH0KIAogc3RhdGljIHZvaWQgc3JwX2hhbmRsZV9xcF9lcnIodTY0IHdyX2lkLCBlbnVtIGliX3djX3N0YXR1cyB3Y19zdGF0dXMsCi0JCQkgICAgICBib29sIHNlbmRfZXJyLCBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCisJCQkgICAgICBib29sIHNlbmRfZXJyLCBzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CisKKwlpZiAod3JfaWQgPT0gU1JQX0xBU1RfV1JfSUQpIHsKKwkJY29tcGxldGUoJmNoLT5kb25lKTsKKwkJcmV0dXJuOworCX0KKwogCWlmICh0YXJnZXQtPmNvbm5lY3RlZCAmJiAhdGFyZ2V0LT5xcF9pbl9lcnJvcikgewogCQlpZiAod3JfaWQgJiBMT0NBTF9JTlZfV1JfSURfTUFTSykgewogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCkBAIC0xODE3LDMzICsxOTQ4LDMzIEBACiAJdGFyZ2V0LT5xcF9pbl9lcnJvciA9IHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIHNycF9yZWN2X2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqdGFyZ2V0X3B0cikKK3N0YXRpYyB2b2lkIHNycF9yZWN2X2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY2hfcHRyKQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IHRhcmdldF9wdHI7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaCA9IGNoX3B0cjsKIAlzdHJ1Y3QgaWJfd2Mgd2M7CiAKIAlpYl9yZXFfbm90aWZ5X2NxKGNxLCBJQl9DUV9ORVhUX0NPTVApOwogCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgewogCQlpZiAobGlrZWx5KHdjLnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSkgewotCQkJc3JwX2hhbmRsZV9yZWN2KHRhcmdldCwgJndjKTsKKwkJCXNycF9oYW5kbGVfcmVjdihjaCwgJndjKTsKIAkJfSBlbHNlIHsKLQkJCXNycF9oYW5kbGVfcXBfZXJyKHdjLndyX2lkLCB3Yy5zdGF0dXMsIGZhbHNlLCB0YXJnZXQpOworCQkJc3JwX2hhbmRsZV9xcF9lcnIod2Mud3JfaWQsIHdjLnN0YXR1cywgZmFsc2UsIGNoKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgc3JwX3NlbmRfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICp0YXJnZXRfcHRyKQorc3RhdGljIHZvaWQgc3JwX3NlbmRfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjaF9wdHIpCiB7Ci0Jc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gdGFyZ2V0X3B0cjsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoID0gY2hfcHRyOwogCXN0cnVjdCBpYl93YyB3YzsKIAlzdHJ1Y3Qgc3JwX2l1ICppdTsKIAogCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgewogCQlpZiAobGlrZWx5KHdjLnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSkgewogCQkJaXUgPSAoc3RydWN0IHNycF9pdSAqKSAodWludHB0cl90KSB3Yy53cl9pZDsKLQkJCWxpc3RfYWRkKCZpdS0+bGlzdCwgJnRhcmdldC0+ZnJlZV90eCk7CisJCQlsaXN0X2FkZCgmaXUtPmxpc3QsICZjaC0+ZnJlZV90eCk7CiAJCX0gZWxzZSB7Ci0JCQlzcnBfaGFuZGxlX3FwX2Vycih3Yy53cl9pZCwgd2Muc3RhdHVzLCB0cnVlLCB0YXJnZXQpOworCQkJc3JwX2hhbmRsZV9xcF9lcnIod2Mud3JfaWQsIHdjLnN0YXR1cywgdHJ1ZSwgY2gpOwogCQl9CiAJfQogfQpAQCAtMTg1MiwxMSArMTk4MywxNCBAQAogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KHNob3N0KTsKIAlzdHJ1Y3Qgc3JwX3Jwb3J0ICpycG9ydCA9IHRhcmdldC0+cnBvcnQ7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaDsKIAlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3Qgc3JwX2l1ICppdTsKIAlzdHJ1Y3Qgc3JwX2NtZCAqY21kOwogCXN0cnVjdCBpYl9kZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB0YWc7CisJdTE2IGlkeDsKIAlpbnQgbGVuLCByZXQ7CiAJY29uc3QgYm9vbCBpbl9zY3NpX2VoID0gIWluX2ludGVycnVwdCgpICYmIGN1cnJlbnQgPT0gc2hvc3QtPmVoYW5kbGVyOwogCkBAIC0xODczLDE1ICsyMDA3LDIyIEBACiAJaWYgKHVubGlrZWx5KHNjbW5kLT5yZXN1bHQpKQogCQlnb3RvIGVycjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKLQlpdSA9IF9fc3JwX2dldF90eF9pdSh0YXJnZXQsIFNSUF9JVV9DTUQpOworCVdBUk5fT05fT05DRShzY21uZC0+cmVxdWVzdC0+dGFnIDwgMCk7CisJdGFnID0gYmxrX21xX3VuaXF1ZV90YWcoc2NtbmQtPnJlcXVlc3QpOworCWNoID0gJnRhcmdldC0+Y2hbYmxrX21xX3VuaXF1ZV90YWdfdG9faHdxKHRhZyldOworCWlkeCA9IGJsa19tcV91bmlxdWVfdGFnX3RvX3RhZyh0YWcpOworCVdBUk5fT05DRShpZHggPj0gdGFyZ2V0LT5yZXFfcmluZ19zaXplLCAiJXM6IHRhZyAlI3g6IGlkeCAlZCA+PSAlZFxuIiwKKwkJICBkZXZfbmFtZSgmc2hvc3QtPnNob3N0X2dlbmRldiksIHRhZywgaWR4LAorCQkgIHRhcmdldC0+cmVxX3Jpbmdfc2l6ZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKKwlpdSA9IF9fc3JwX2dldF90eF9pdShjaCwgU1JQX0lVX0NNRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKKwogCWlmICghaXUpCi0JCWdvdG8gZXJyX3VubG9jazsKKwkJZ290byBlcnI7CiAKLQlyZXEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0YXJnZXQtPmZyZWVfcmVxcywgc3RydWN0IHNycF9yZXF1ZXN0LCBsaXN0KTsKLQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXJnZXQtPmxvY2ssIGZsYWdzKTsKLQorCXJlcSA9ICZjaC0+cmVxX3JpbmdbaWR4XTsKIAlkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXY7CiAJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBpdS0+ZG1hLCB0YXJnZXQtPm1heF9pdV9sZW4sCiAJCQkJICAgRE1BX1RPX0RFVklDRSk7CkBAIC0xODkzLDEzICsyMDM0LDEzIEBACiAKIAljbWQtPm9wY29kZSA9IFNSUF9DTUQ7CiAJY21kLT5sdW4gICAgPSBjcHVfdG9fYmU2NCgodTY0KSBzY21uZC0+ZGV2aWNlLT5sdW4gPDwgNDgpOwotCWNtZC0+dGFnICAgID0gcmVxLT5pbmRleDsKKwljbWQtPnRhZyAgICA9IHRhZzsKIAltZW1jcHkoY21kLT5jZGIsIHNjbW5kLT5jbW5kLCBzY21uZC0+Y21kX2xlbik7CiAKIAlyZXEtPnNjbW5kICAgID0gc2NtbmQ7CiAJcmVxLT5jbWQgICAgICA9IGl1OwogCi0JbGVuID0gc3JwX21hcF9kYXRhKHNjbW5kLCB0YXJnZXQsIHJlcSk7CisJbGVuID0gc3JwX21hcF9kYXRhKHNjbW5kLCBjaCwgcmVxKTsKIAlpZiAobGVuIDwgMCkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LAogCQkJICAgICBQRlggIkZhaWxlZCB0byBtYXAgZGF0YSAoJWQpXG4iLCBsZW4pOwpAQCAtMTkxNyw3ICsyMDU4LDcgQEAKIAlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGl1LT5kbWEsIHRhcmdldC0+bWF4X2l1X2xlbiwKIAkJCQkgICAgICBETUFfVE9fREVWSUNFKTsKIAotCWlmIChzcnBfcG9zdF9zZW5kKHRhcmdldCwgaXUsIGxlbikpIHsKKwlpZiAoc3JwX3Bvc3Rfc2VuZChjaCwgaXUsIGxlbikpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYICJTZW5kIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX3VubWFwOwogCX0KQEAgLTE5MzEsMTAgKzIwNzIsMTAgQEAKIAlyZXR1cm4gcmV0OwogCiBlcnJfdW5tYXA6Ci0Jc3JwX3VubWFwX2RhdGEoc2NtbmQsIHRhcmdldCwgcmVxKTsKKwlzcnBfdW5tYXBfZGF0YShzY21uZCwgY2gsIHJlcSk7CiAKIGVycl9pdToKLQlzcnBfcHV0X3R4X2l1KHRhcmdldCwgaXUsIFNSUF9JVV9DTUQpOworCXNycF9wdXRfdHhfaXUoY2gsIGl1LCBTUlBfSVVfQ01EKTsKIAogCS8qCiAJICogQXZvaWQgdGhhdCB0aGUgbG9vcHMgdGhhdCBpdGVyYXRlIG92ZXIgdGhlIHJlcXVlc3QgcmluZyBjYW4KQEAgLTE5NDIsMTIgKzIwODMsNiBAQAogCSAqLwogCXJlcS0+c2NtbmQgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldC0+bG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZ0YXJnZXQtPmZyZWVfcmVxcyk7Ci0KLWVycl91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0LT5sb2NrLCBmbGFncyk7Ci0KIGVycjoKIAlpZiAoc2NtbmQtPnJlc3VsdCkgewogCQlzY21uZC0+c2NzaV9kb25lKHNjbW5kKTsKQEAgLTE5NjEsNTMgKzIwOTYsNTQgQEAKIAogLyoKICAqIE5vdGU6IHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIGluIHRoaXMgZnVuY3Rpb24gYXJlIGZyZWVkIGluCi0gKiBzcnBfZnJlZV90YXJnZXRfaWIoKS4KKyAqIHNycF9mcmVlX2NoX2liKCkuCiAgKi8KLXN0YXRpYyBpbnQgc3JwX2FsbG9jX2l1X2J1ZnMoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorc3RhdGljIGludCBzcnBfYWxsb2NfaXVfYnVmcyhzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoKQogeworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJaW50IGk7CiAKLQl0YXJnZXQtPnJ4X3JpbmcgPSBremFsbG9jKHRhcmdldC0+cXVldWVfc2l6ZSAqIHNpemVvZigqdGFyZ2V0LT5yeF9yaW5nKSwKLQkJCQkgIEdGUF9LRVJORUwpOwotCWlmICghdGFyZ2V0LT5yeF9yaW5nKQorCWNoLT5yeF9yaW5nID0ga2NhbGxvYyh0YXJnZXQtPnF1ZXVlX3NpemUsIHNpemVvZigqY2gtPnJ4X3JpbmcpLAorCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaC0+cnhfcmluZykKIAkJZ290byBlcnJfbm9fcmluZzsKLQl0YXJnZXQtPnR4X3JpbmcgPSBremFsbG9jKHRhcmdldC0+cXVldWVfc2l6ZSAqIHNpemVvZigqdGFyZ2V0LT50eF9yaW5nKSwKLQkJCQkgIEdGUF9LRVJORUwpOwotCWlmICghdGFyZ2V0LT50eF9yaW5nKQorCWNoLT50eF9yaW5nID0ga2NhbGxvYyh0YXJnZXQtPnF1ZXVlX3NpemUsIHNpemVvZigqY2gtPnR4X3JpbmcpLAorCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaC0+dHhfcmluZykKIAkJZ290byBlcnJfbm9fcmluZzsKIAogCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnF1ZXVlX3NpemU7ICsraSkgewotCQl0YXJnZXQtPnJ4X3JpbmdbaV0gPSBzcnBfYWxsb2NfaXUodGFyZ2V0LT5zcnBfaG9zdCwKLQkJCQkJCSAgdGFyZ2V0LT5tYXhfdGlfaXVfbGVuLAotCQkJCQkJICBHRlBfS0VSTkVMLCBETUFfRlJPTV9ERVZJQ0UpOwotCQlpZiAoIXRhcmdldC0+cnhfcmluZ1tpXSkKKwkJY2gtPnJ4X3JpbmdbaV0gPSBzcnBfYWxsb2NfaXUodGFyZ2V0LT5zcnBfaG9zdCwKKwkJCQkJICAgICAgY2gtPm1heF90aV9pdV9sZW4sCisJCQkJCSAgICAgIEdGUF9LRVJORUwsIERNQV9GUk9NX0RFVklDRSk7CisJCWlmICghY2gtPnJ4X3JpbmdbaV0pCiAJCQlnb3RvIGVycjsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5xdWV1ZV9zaXplOyArK2kpIHsKLQkJdGFyZ2V0LT50eF9yaW5nW2ldID0gc3JwX2FsbG9jX2l1KHRhcmdldC0+c3JwX2hvc3QsCi0JCQkJCQkgIHRhcmdldC0+bWF4X2l1X2xlbiwKLQkJCQkJCSAgR0ZQX0tFUk5FTCwgRE1BX1RPX0RFVklDRSk7Ci0JCWlmICghdGFyZ2V0LT50eF9yaW5nW2ldKQorCQljaC0+dHhfcmluZ1tpXSA9IHNycF9hbGxvY19pdSh0YXJnZXQtPnNycF9ob3N0LAorCQkJCQkgICAgICB0YXJnZXQtPm1heF9pdV9sZW4sCisJCQkJCSAgICAgIEdGUF9LRVJORUwsIERNQV9UT19ERVZJQ0UpOworCQlpZiAoIWNoLT50eF9yaW5nW2ldKQogCQkJZ290byBlcnI7CiAKLQkJbGlzdF9hZGQoJnRhcmdldC0+dHhfcmluZ1tpXS0+bGlzdCwgJnRhcmdldC0+ZnJlZV90eCk7CisJCWxpc3RfYWRkKCZjaC0+dHhfcmluZ1tpXS0+bGlzdCwgJmNoLT5mcmVlX3R4KTsKIAl9CiAKIAlyZXR1cm4gMDsKIAogZXJyOgogCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnF1ZXVlX3NpemU7ICsraSkgewotCQlzcnBfZnJlZV9pdSh0YXJnZXQtPnNycF9ob3N0LCB0YXJnZXQtPnJ4X3JpbmdbaV0pOwotCQlzcnBfZnJlZV9pdSh0YXJnZXQtPnNycF9ob3N0LCB0YXJnZXQtPnR4X3JpbmdbaV0pOworCQlzcnBfZnJlZV9pdSh0YXJnZXQtPnNycF9ob3N0LCBjaC0+cnhfcmluZ1tpXSk7CisJCXNycF9mcmVlX2l1KHRhcmdldC0+c3JwX2hvc3QsIGNoLT50eF9yaW5nW2ldKTsKIAl9CiAKIAogZXJyX25vX3Jpbmc6Ci0Ja2ZyZWUodGFyZ2V0LT50eF9yaW5nKTsKLQl0YXJnZXQtPnR4X3JpbmcgPSBOVUxMOwotCWtmcmVlKHRhcmdldC0+cnhfcmluZyk7Ci0JdGFyZ2V0LT5yeF9yaW5nID0gTlVMTDsKKwlrZnJlZShjaC0+dHhfcmluZyk7CisJY2gtPnR4X3JpbmcgPSBOVUxMOworCWtmcmVlKGNoLT5yeF9yaW5nKTsKKwljaC0+cnhfcmluZyA9IE5VTEw7CiAKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTIwNDEsMjMgKzIxNzcsMjQgQEAKIAogc3RhdGljIHZvaWQgc3JwX2NtX3JlcF9oYW5kbGVyKHN0cnVjdCBpYl9jbV9pZCAqY21faWQsCiAJCQkgICAgICAgc3RydWN0IHNycF9sb2dpbl9yc3AgKmxyc3AsCi0JCQkgICAgICAgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorCQkJICAgICAgIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0ciA9IE5VTEw7CiAJaW50IGF0dHJfbWFzayA9IDA7CiAJaW50IHJldDsKIAlpbnQgaTsKIAogCWlmIChscnNwLT5vcGNvZGUgPT0gU1JQX0xPR0lOX1JTUCkgewotCQl0YXJnZXQtPm1heF90aV9pdV9sZW4gPSBiZTMyX3RvX2NwdShscnNwLT5tYXhfdGlfaXVfbGVuKTsKLQkJdGFyZ2V0LT5yZXFfbGltICAgICAgID0gYmUzMl90b19jcHUobHJzcC0+cmVxX2xpbV9kZWx0YSk7CisJCWNoLT5tYXhfdGlfaXVfbGVuID0gYmUzMl90b19jcHUobHJzcC0+bWF4X3RpX2l1X2xlbik7CisJCWNoLT5yZXFfbGltICAgICAgID0gYmUzMl90b19jcHUobHJzcC0+cmVxX2xpbV9kZWx0YSk7CiAKIAkJLyoKIAkJICogUmVzZXJ2ZSBjcmVkaXRzIGZvciB0YXNrIG1hbmFnZW1lbnQgc28gd2UgZG9uJ3QKIAkJICogYm91bmNlIHJlcXVlc3RzIGJhY2sgdG8gdGhlIFNDU0kgbWlkLWxheWVyLgogCQkgKi8KIAkJdGFyZ2V0LT5zY3NpX2hvc3QtPmNhbl9xdWV1ZQotCQkJPSBtaW4odGFyZ2V0LT5yZXFfbGltIC0gU1JQX1RTS19NR01UX1NRX1NJWkUsCisJCQk9IG1pbihjaC0+cmVxX2xpbSAtIFNSUF9UU0tfTUdNVF9TUV9TSVpFLAogCQkJICAgICAgdGFyZ2V0LT5zY3NpX2hvc3QtPmNhbl9xdWV1ZSk7CiAJCXRhcmdldC0+c2NzaV9ob3N0LT5jbWRfcGVyX2x1bgogCQkJPSBtaW5fdChpbnQsIHRhcmdldC0+c2NzaV9ob3N0LT5jYW5fcXVldWUsCkBAIC0yMDY5LDggKzIyMDYsOCBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmICghdGFyZ2V0LT5yeF9yaW5nKSB7Ci0JCXJldCA9IHNycF9hbGxvY19pdV9idWZzKHRhcmdldCk7CisJaWYgKCFjaC0+cnhfcmluZykgeworCQlyZXQgPSBzcnBfYWxsb2NfaXVfYnVmcyhjaCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yOwogCX0KQEAgLTIwODUsMTMgKzIyMjIsMTQgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX2ZyZWU7CiAKLQlyZXQgPSBpYl9tb2RpZnlfcXAodGFyZ2V0LT5xcCwgcXBfYXR0ciwgYXR0cl9tYXNrKTsKKwlyZXQgPSBpYl9tb2RpZnlfcXAoY2gtPnFwLCBxcF9hdHRyLCBhdHRyX21hc2spOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZnJlZTsKIAogCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPnF1ZXVlX3NpemU7IGkrKykgewotCQlzdHJ1Y3Qgc3JwX2l1ICppdSA9IHRhcmdldC0+cnhfcmluZ1tpXTsKLQkJcmV0ID0gc3JwX3Bvc3RfcmVjdih0YXJnZXQsIGl1KTsKKwkJc3RydWN0IHNycF9pdSAqaXUgPSBjaC0+cnhfcmluZ1tpXTsKKworCQlyZXQgPSBzcnBfcG9zdF9yZWN2KGNoLCBpdSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX2ZyZWU7CiAJfQpAQCAtMjEwMyw3ICsyMjQxLDcgQEAKIAogCXRhcmdldC0+cnFfdG1vX2ppZmZpZXMgPSBzcnBfY29tcHV0ZV9ycV90bW8ocXBfYXR0ciwgYXR0cl9tYXNrKTsKIAotCXJldCA9IGliX21vZGlmeV9xcCh0YXJnZXQtPnFwLCBxcF9hdHRyLCBhdHRyX21hc2spOworCXJldCA9IGliX21vZGlmeV9xcChjaC0+cXAsIHFwX2F0dHIsIGF0dHJfbWFzayk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlOwogCkBAIC0yMTEzLDEzICsyMjUxLDE0IEBACiAJa2ZyZWUocXBfYXR0cik7CiAKIGVycm9yOgotCXRhcmdldC0+c3RhdHVzID0gcmV0OworCWNoLT5zdGF0dXMgPSByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNycF9jbV9yZWpfaGFuZGxlcihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLAogCQkJICAgICAgIHN0cnVjdCBpYl9jbV9ldmVudCAqZXZlbnQsCi0JCQkgICAgICAgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQorCQkJICAgICAgIHN0cnVjdCBzcnBfcmRtYV9jaCAqY2gpCiB7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY2gtPnRhcmdldDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRhcmdldC0+c2NzaV9ob3N0OwogCXN0cnVjdCBpYl9jbGFzc19wb3J0X2luZm8gKmNwaTsKIAlpbnQgb3Bjb2RlOwpAQCAtMjEyNywxMiArMjI2NiwxMiBAQAogCXN3aXRjaCAoZXZlbnQtPnBhcmFtLnJlal9yY3ZkLnJlYXNvbikgewogCWNhc2UgSUJfQ01fUkVKX1BPUlRfQ01fUkVESVJFQ1Q6CiAJCWNwaSA9IGV2ZW50LT5wYXJhbS5yZWpfcmN2ZC5hcmk7Ci0JCXRhcmdldC0+cGF0aC5kbGlkID0gY3BpLT5yZWRpcmVjdF9saWQ7Ci0JCXRhcmdldC0+cGF0aC5wa2V5ID0gY3BpLT5yZWRpcmVjdF9wa2V5OworCQljaC0+cGF0aC5kbGlkID0gY3BpLT5yZWRpcmVjdF9saWQ7CisJCWNoLT5wYXRoLnBrZXkgPSBjcGktPnJlZGlyZWN0X3BrZXk7CiAJCWNtX2lkLT5yZW1vdGVfY21fcXBuID0gYmUzMl90b19jcHUoY3BpLT5yZWRpcmVjdF9xcCkgJiAweDAwZmZmZmZmOwotCQltZW1jcHkodGFyZ2V0LT5wYXRoLmRnaWQucmF3LCBjcGktPnJlZGlyZWN0X2dpZCwgMTYpOworCQltZW1jcHkoY2gtPnBhdGguZGdpZC5yYXcsIGNwaS0+cmVkaXJlY3RfZ2lkLCAxNik7CiAKLQkJdGFyZ2V0LT5zdGF0dXMgPSB0YXJnZXQtPnBhdGguZGxpZCA/CisJCWNoLT5zdGF0dXMgPSBjaC0+cGF0aC5kbGlkID8KIAkJCVNSUF9ETElEX1JFRElSRUNUIDogU1JQX1BPUlRfUkVESVJFQ1Q7CiAJCWJyZWFrOwogCkBAIC0yMTQzLDI2ICsyMjgyLDI2IEBACiAJCQkgKiByZWplY3QgcmVhc29uIGNvZGUgMjUgd2hlbiB0aGV5IG1lYW4gMjQKIAkJCSAqIChwb3J0IHJlZGlyZWN0KS4KIAkJCSAqLwotCQkJbWVtY3B5KHRhcmdldC0+cGF0aC5kZ2lkLnJhdywKKwkJCW1lbWNweShjaC0+cGF0aC5kZ2lkLnJhdywKIAkJCSAgICAgICBldmVudC0+cGFyYW0ucmVqX3JjdmQuYXJpLCAxNik7CiAKIAkJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBzaG9zdCwKIAkJCQkgICAgIFBGWCAiVG9wc3Bpbi9DaXNjbyByZWRpcmVjdCB0byB0YXJnZXQgcG9ydCBHSUQgJTAxNmxseCUwMTZsbHhcbiIsCi0JCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBiZTY0X3RvX2NwdSh0YXJnZXQtPnBhdGguZGdpZC5nbG9iYWwuc3VibmV0X3ByZWZpeCksCi0JCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBiZTY0X3RvX2NwdSh0YXJnZXQtPnBhdGguZGdpZC5nbG9iYWwuaW50ZXJmYWNlX2lkKSk7CisJCQkJICAgICBiZTY0X3RvX2NwdShjaC0+cGF0aC5kZ2lkLmdsb2JhbC5zdWJuZXRfcHJlZml4KSwKKwkJCQkgICAgIGJlNjRfdG9fY3B1KGNoLT5wYXRoLmRnaWQuZ2xvYmFsLmludGVyZmFjZV9pZCkpOwogCi0JCQl0YXJnZXQtPnN0YXR1cyA9IFNSUF9QT1JUX1JFRElSRUNUOworCQkJY2gtPnN0YXR1cyA9IFNSUF9QT1JUX1JFRElSRUNUOwogCQl9IGVsc2UgewogCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgc2hvc3QsCiAJCQkJICAgICAiICBSRUogcmVhc29uOiBJQl9DTV9SRUpfUE9SVF9SRURJUkVDVFxuIik7Ci0JCQl0YXJnZXQtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCQkJY2gtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBJQl9DTV9SRUpfRFVQTElDQVRFX0xPQ0FMX0NPTU1fSUQ6CiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNob3N0LAogCQkJICAgICIgIFJFSiByZWFzb246IElCX0NNX1JFSl9EVVBMSUNBVEVfTE9DQUxfQ09NTV9JRFxuIik7Ci0JCXRhcmdldC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCWNoLT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKIAkJYnJlYWs7CiAKIAljYXNlIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVEOgpAQCAtMjE3NywzMCArMjMxNiwzMSBAQAogCQkJZWxzZQogCQkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNob3N0LCBQRlgKIAkJCQkJICAgICAiU1JQIExPR0lOIGZyb20gJXBJNiB0byAlcEk2IFJFSkVDVEVELCByZWFzb24gMHglMDh4XG4iLAotCQkJCQkgICAgIHRhcmdldC0+cGF0aC5zZ2lkLnJhdywKLQkJCQkJICAgICB0YXJnZXQtPm9yaWdfZGdpZCwgcmVhc29uKTsKKwkJCQkJICAgICB0YXJnZXQtPnNnaWQucmF3LAorCQkJCQkgICAgIHRhcmdldC0+b3JpZ19kZ2lkLnJhdywgcmVhc29uKTsKIAkJfSBlbHNlCiAJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBzaG9zdCwKIAkJCQkgICAgICIgIFJFSiByZWFzb246IElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVELCIKIAkJCQkgICAgICIgb3Bjb2RlIDB4JTAyeFxuIiwgb3Bjb2RlKTsKLQkJdGFyZ2V0LT5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKKwkJY2gtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOwogCQlicmVhazsKIAogCWNhc2UgSUJfQ01fUkVKX1NUQUxFX0NPTk46CiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNob3N0LCAiICBSRUogcmVhc29uOiBzdGFsZSBjb25uZWN0aW9uXG4iKTsKLQkJdGFyZ2V0LT5zdGF0dXMgPSBTUlBfU1RBTEVfQ09OTjsKKwkJY2gtPnN0YXR1cyA9IFNSUF9TVEFMRV9DT05OOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNob3N0LCAiICBSRUogcmVhc29uIDB4JXhcbiIsCiAJCQkgICAgIGV2ZW50LT5wYXJhbS5yZWpfcmN2ZC5yZWFzb24pOwotCQl0YXJnZXQtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCQljaC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CiAJfQogfQogCiBzdGF0aWMgaW50IHNycF9jbV9oYW5kbGVyKHN0cnVjdCBpYl9jbV9pZCAqY21faWQsIHN0cnVjdCBpYl9jbV9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gY21faWQtPmNvbnRleHQ7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaCA9IGNtX2lkLT5jb250ZXh0OworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJaW50IGNvbXAgPSAwOwogCiAJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKQEAgLTIyMDgsMTkgKzIzNDgsMTkgQEAKIAkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIHRhcmdldC0+c2NzaV9ob3N0LAogCQkJICAgICBQRlggIlNlbmRpbmcgQ00gUkVRIGZhaWxlZFxuIik7CiAJCWNvbXAgPSAxOwotCQl0YXJnZXQtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCQljaC0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CiAJCWJyZWFrOwogCiAJY2FzZSBJQl9DTV9SRVBfUkVDRUlWRUQ6CiAJCWNvbXAgPSAxOwotCQlzcnBfY21fcmVwX2hhbmRsZXIoY21faWQsIGV2ZW50LT5wcml2YXRlX2RhdGEsIHRhcmdldCk7CisJCXNycF9jbV9yZXBfaGFuZGxlcihjbV9pZCwgZXZlbnQtPnByaXZhdGVfZGF0YSwgY2gpOwogCQlicmVhazsKIAogCWNhc2UgSUJfQ01fUkVKX1JFQ0VJVkVEOgogCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWCAiUkVKIHJlY2VpdmVkXG4iKTsKIAkJY29tcCA9IDE7CiAKLQkJc3JwX2NtX3Jlal9oYW5kbGVyKGNtX2lkLCBldmVudCwgdGFyZ2V0KTsKKwkJc3JwX2NtX3Jlal9oYW5kbGVyKGNtX2lkLCBldmVudCwgY2gpOwogCQlicmVhazsKIAogCWNhc2UgSUJfQ01fRFJFUV9SRUNFSVZFRDoKQEAgLTIyMzgsNyArMjM3OCw3IEBACiAJCQkgICAgIFBGWCAiY29ubmVjdGlvbiBjbG9zZWRcbiIpOwogCQljb21wID0gMTsKIAotCQl0YXJnZXQtPnN0YXR1cyA9IDA7CisJCWNoLT5zdGF0dXMgPSAwOwogCQlicmVhazsKIAogCWNhc2UgSUJfQ01fTVJBX1JFQ0VJVkVEOgpAQCAtMjI1Myw2NSArMjM5MywzMCBAQAogCX0KIAogCWlmIChjb21wKQotCQljb21wbGV0ZSgmdGFyZ2V0LT5kb25lKTsKKwkJY29tcGxldGUoJmNoLT5kb25lKTsKIAogCXJldHVybiAwOwogfQogCiAvKioKLSAqIHNycF9jaGFuZ2VfcXVldWVfdHlwZSAtIGNoYW5naW5nIGRldmljZSBxdWV1ZSB0YWcgdHlwZQotICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAotICogQHRhZ190eXBlOiByZXF1ZXN0ZWQgdGFnIHR5cGUKLSAqCi0gKiBSZXR1cm5zIHF1ZXVlIHRhZyB0eXBlLgotICovCi1zdGF0aWMgaW50Ci1zcnBfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnX3R5cGUpCi17Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOwotCQlpZiAodGFnX3R5cGUpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQl0YWdfdHlwZSA9IDA7Ci0KLQlyZXR1cm4gdGFnX3R5cGU7Ci19Ci0KLS8qKgogICogc3JwX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIHNldHRpbmcgZGV2aWNlIHF1ZXVlIGRlcHRoCiAgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CiAgKiBAcWRlcHRoOiByZXF1ZXN0ZWQgcXVldWUgZGVwdGgKLSAqIEByZWFzb246IFNDU0lfUURFUFRIX0RFRkFVTFQvU0NTSV9RREVQVEhfUUZVTEwvU0NTSV9RREVQVEhfUkFNUF9VUAotICogKHNlZSBpbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggZm9yIGRlZmluaXRpb24pCiAgKgogICogUmV0dXJucyBxdWV1ZSBkZXB0aC4KICAqLwogc3RhdGljIGludAotc3JwX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsIGludCByZWFzb24pCitzcnBfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7Ci0JaW50IG1heF9kZXB0aDsKLQlpZiAocmVhc29uID09IFNDU0lfUURFUFRIX0RFRkFVTFQgfHwgcmVhc29uID09IFNDU0lfUURFUFRIX1JBTVBfVVApIHsKLQkJbWF4X2RlcHRoID0gc2hvc3QtPmNhbl9xdWV1ZTsKLQkJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQkJbWF4X2RlcHRoID0gMTsKLQkJaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKLQkJCXFkZXB0aCA9IG1heF9kZXB0aDsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7Ci0JfSBlbHNlIGlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfUUZVTEwpCi0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpOwotCWVsc2UKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOworCWlmICghc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKKwkJcWRlcHRoID0gMTsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKIH0KIAotc3RhdGljIGludCBzcnBfc2VuZF90c2tfbWdtdChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCi0JCQkgICAgIHU2NCByZXFfdGFnLCB1bnNpZ25lZCBpbnQgbHVuLCB1OCBmdW5jKQorc3RhdGljIGludCBzcnBfc2VuZF90c2tfbWdtdChzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoLCB1NjQgcmVxX3RhZywKKwkJCSAgICAgdW5zaWduZWQgaW50IGx1biwgdTggZnVuYykKIHsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBjaC0+dGFyZ2V0OwogCXN0cnVjdCBzcnBfcnBvcnQgKnJwb3J0ID0gdGFyZ2V0LT5ycG9ydDsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXY7CiAJc3RydWN0IHNycF9pdSAqaXU7CkBAIC0yMzIwLDE2ICsyNDI1LDE2IEBACiAJaWYgKCF0YXJnZXQtPmNvbm5lY3RlZCB8fCB0YXJnZXQtPnFwX2luX2Vycm9yKQogCQlyZXR1cm4gLTE7CiAKLQlpbml0X2NvbXBsZXRpb24oJnRhcmdldC0+dHNrX21nbXRfZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZjaC0+dHNrX21nbXRfZG9uZSk7CiAKIAkvKgotCSAqIExvY2sgdGhlIHJwb3J0IG11dGV4IHRvIGF2b2lkIHRoYXQgc3JwX2NyZWF0ZV90YXJnZXRfaWIoKSBpcworCSAqIExvY2sgdGhlIHJwb3J0IG11dGV4IHRvIGF2b2lkIHRoYXQgc3JwX2NyZWF0ZV9jaF9pYigpIGlzCiAJICogaW52b2tlZCB3aGlsZSBhIHRhc2sgbWFuYWdlbWVudCBmdW5jdGlvbiBpcyBiZWluZyBzZW50LgogCSAqLwogCW11dGV4X2xvY2soJnJwb3J0LT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycSgmdGFyZ2V0LT5sb2NrKTsKLQlpdSA9IF9fc3JwX2dldF90eF9pdSh0YXJnZXQsIFNSUF9JVV9UU0tfTUdNVCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZ0YXJnZXQtPmxvY2spOworCXNwaW5fbG9ja19pcnEoJmNoLT5sb2NrKTsKKwlpdSA9IF9fc3JwX2dldF90eF9pdShjaCwgU1JQX0lVX1RTS19NR01UKTsKKwlzcGluX3VubG9ja19pcnEoJmNoLT5sb2NrKTsKIAogCWlmICghaXUpIHsKIAkJbXV0ZXhfdW5sb2NrKCZycG9ydC0+bXV0ZXgpOwpAQCAtMjM1MCwxNSArMjQ1NSwxNSBAQAogCiAJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBpdS0+ZG1hLCBzaXplb2YgKnRza19tZ210LAogCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwotCWlmIChzcnBfcG9zdF9zZW5kKHRhcmdldCwgaXUsIHNpemVvZiAqdHNrX21nbXQpKSB7Ci0JCXNycF9wdXRfdHhfaXUodGFyZ2V0LCBpdSwgU1JQX0lVX1RTS19NR01UKTsKKwlpZiAoc3JwX3Bvc3Rfc2VuZChjaCwgaXUsIHNpemVvZigqdHNrX21nbXQpKSkgeworCQlzcnBfcHV0X3R4X2l1KGNoLCBpdSwgU1JQX0lVX1RTS19NR01UKTsKIAkJbXV0ZXhfdW5sb2NrKCZycG9ydC0+bXV0ZXgpOwogCiAJCXJldHVybiAtMTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZycG9ydC0+bXV0ZXgpOwogCi0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnRhcmdldC0+dHNrX21nbXRfZG9uZSwKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY2gtPnRza19tZ210X2RvbmUsCiAJCQkJCSBtc2Vjc190b19qaWZmaWVzKFNSUF9BQk9SVF9USU1FT1VUX01TKSkpCiAJCXJldHVybiAtMTsKIApAQCAtMjM2OSwyMCArMjQ3NCwzMiBAQAogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KHNjbW5kLT5kZXZpY2UtPmhvc3QpOwogCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxID0gKHN0cnVjdCBzcnBfcmVxdWVzdCAqKSBzY21uZC0+aG9zdF9zY3JpYmJsZTsKKwl1MzIgdGFnOworCXUxNiBjaF9pZHg7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaDsKIAlpbnQgcmV0OwogCiAJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgIlNSUCBhYm9ydCBjYWxsZWRcbiIpOwogCi0JaWYgKCFyZXEgfHwgIXNycF9jbGFpbV9yZXEodGFyZ2V0LCByZXEsIE5VTEwsIHNjbW5kKSkKKwlpZiAoIXJlcSkKIAkJcmV0dXJuIFNVQ0NFU1M7Ci0JaWYgKHNycF9zZW5kX3Rza19tZ210KHRhcmdldCwgcmVxLT5pbmRleCwgc2NtbmQtPmRldmljZS0+bHVuLAorCXRhZyA9IGJsa19tcV91bmlxdWVfdGFnKHNjbW5kLT5yZXF1ZXN0KTsKKwljaF9pZHggPSBibGtfbXFfdW5pcXVlX3RhZ190b19od3EodGFnKTsKKwlpZiAoV0FSTl9PTl9PTkNFKGNoX2lkeCA+PSB0YXJnZXQtPmNoX2NvdW50KSkKKwkJcmV0dXJuIFNVQ0NFU1M7CisJY2ggPSAmdGFyZ2V0LT5jaFtjaF9pZHhdOworCWlmICghc3JwX2NsYWltX3JlcShjaCwgcmVxLCBOVUxMLCBzY21uZCkpCisJCXJldHVybiBTVUNDRVNTOworCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCisJCSAgICAgIlNlbmRpbmcgU1JQIGFib3J0IGZvciB0YWcgJSN4XG4iLCB0YWcpOworCWlmIChzcnBfc2VuZF90c2tfbWdtdChjaCwgdGFnLCBzY21uZC0+ZGV2aWNlLT5sdW4sCiAJCQkgICAgICBTUlBfVFNLX0FCT1JUX1RBU0spID09IDApCiAJCXJldCA9IFNVQ0NFU1M7CiAJZWxzZSBpZiAodGFyZ2V0LT5ycG9ydC0+c3RhdGUgPT0gU1JQX1JQT1JUX0xPU1QpCiAJCXJldCA9IEZBU1RfSU9fRkFJTDsKIAllbHNlCiAJCXJldCA9IEZBSUxFRDsKLQlzcnBfZnJlZV9yZXEodGFyZ2V0LCByZXEsIHNjbW5kLCAwKTsKKwlzcnBfZnJlZV9yZXEoY2gsIHJlcSwgc2NtbmQsIDApOwogCXNjbW5kLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CiAJc2NtbmQtPnNjc2lfZG9uZShzY21uZCk7CiAKQEAgLTIzOTIsMTkgKzI1MDksMjUgQEAKIHN0YXRpYyBpbnQgc3JwX3Jlc2V0X2RldmljZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCkKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChzY21uZC0+ZGV2aWNlLT5ob3N0KTsKKwlzdHJ1Y3Qgc3JwX3JkbWFfY2ggKmNoOwogCWludCBpOwogCiAJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgIlNSUCByZXNldF9kZXZpY2UgY2FsbGVkXG4iKTsKIAotCWlmIChzcnBfc2VuZF90c2tfbWdtdCh0YXJnZXQsIFNSUF9UQUdfTk9fUkVRLCBzY21uZC0+ZGV2aWNlLT5sdW4sCisJY2ggPSAmdGFyZ2V0LT5jaFswXTsKKwlpZiAoc3JwX3NlbmRfdHNrX21nbXQoY2gsIFNSUF9UQUdfTk9fUkVRLCBzY21uZC0+ZGV2aWNlLT5sdW4sCiAJCQkgICAgICBTUlBfVFNLX0xVTl9SRVNFVCkpCiAJCXJldHVybiBGQUlMRUQ7Ci0JaWYgKHRhcmdldC0+dHNrX21nbXRfc3RhdHVzKQorCWlmIChjaC0+dHNrX21nbXRfc3RhdHVzKQogCQlyZXR1cm4gRkFJTEVEOwogCi0JZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cmVxX3Jpbmdfc2l6ZTsgKytpKSB7Ci0JCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxID0gJnRhcmdldC0+cmVxX3JpbmdbaV07Ci0JCXNycF9maW5pc2hfcmVxKHRhcmdldCwgcmVxLCBzY21uZC0+ZGV2aWNlLCBESURfUkVTRVQgPDwgMTYpOworCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKwkJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+cmVxX3Jpbmdfc2l6ZTsgKytpKSB7CisJCQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSA9ICZjaC0+cmVxX3JpbmdbaV07CisKKwkJCXNycF9maW5pc2hfcmVxKGNoLCByZXEsIHNjbW5kLT5kZXZpY2UsIERJRF9SRVNFVCA8PCAxNik7CisJCX0KIAl9CiAKIAlyZXR1cm4gU1VDQ0VTUzsKQEAgLTI0NjYsNyArMjU4OSw3IEBACiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwNHhcbiIsIGJlMTZfdG9fY3B1KHRhcmdldC0+cGF0aC5wa2V5KSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDR4XG4iLCBiZTE2X3RvX2NwdSh0YXJnZXQtPnBrZXkpKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19zZ2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yNDc0LDE1ICsyNTk3LDE2IEBACiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlcEk2XG4iLCB0YXJnZXQtPnBhdGguc2dpZC5yYXcpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVwSTZcbiIsIHRhcmdldC0+c2dpZC5yYXcpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2RnaWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaCA9ICZ0YXJnZXQtPmNoWzBdOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXBJNlxuIiwgdGFyZ2V0LT5wYXRoLmRnaWQucmF3KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlcEk2XG4iLCBjaC0+cGF0aC5kZ2lkLnJhdyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfb3JpZ19kZ2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTI0OTAsMTUgKzI2MTQsMjEgQEAKIHsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVwSTZcbiIsIHRhcmdldC0+b3JpZ19kZ2lkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlcEk2XG4iLCB0YXJnZXQtPm9yaWdfZGdpZC5yYXcpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3JlcV9saW0oc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CisJc3RydWN0IHNycF9yZG1hX2NoICpjaDsKKwlpbnQgaSwgcmVxX2xpbSA9IElOVF9NQVg7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGFyZ2V0LT5yZXFfbGltKTsKKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5jaF9jb3VudDsgaSsrKSB7CisJCWNoID0gJnRhcmdldC0+Y2hbaV07CisJCXJlcV9saW0gPSBtaW4ocmVxX2xpbSwgY2gtPnJlcV9saW0pOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmVxX2xpbSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfemVyb19yZXFfbGltKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTI1MjUsNiArMjY1NSwxNCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYtPm5hbWUpOwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X2NoX2NvdW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0YXJnZXQtPmNoX2NvdW50KTsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd19jb21wX3ZlY3RvcihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTI1NjgsNiArMjcwNiw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoemVyb19yZXFfbGltLCAgICBTX0lSVUdPLCBzaG93X3plcm9fcmVxX2xpbSwJICAgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobG9jYWxfaWJfcG9ydCwgICBTX0lSVUdPLCBzaG93X2xvY2FsX2liX3BvcnQsICAgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobG9jYWxfaWJfZGV2aWNlLCBTX0lSVUdPLCBzaG93X2xvY2FsX2liX2RldmljZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoY2hfY291bnQsICAgICAgICBTX0lSVUdPLCBzaG93X2NoX2NvdW50LCAgICAgICAgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoY29tcF92ZWN0b3IsICAgICBTX0lSVUdPLCBzaG93X2NvbXBfdmVjdG9yLCAgICAgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIodGxfcmV0cnlfY291bnQsICBTX0lSVUdPLCBzaG93X3RsX3JldHJ5X2NvdW50LCAgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoY21kX3NnX2VudHJpZXMsICBTX0lSVUdPLCBzaG93X2NtZF9zZ19lbnRyaWVzLCAgTlVMTCk7CkBAIC0yNTg1LDYgKzI3MjQsNyBAQAogCSZkZXZfYXR0cl96ZXJvX3JlcV9saW0sCiAJJmRldl9hdHRyX2xvY2FsX2liX3BvcnQsCiAJJmRldl9hdHRyX2xvY2FsX2liX2RldmljZSwKKwkmZGV2X2F0dHJfY2hfY291bnQsCiAJJmRldl9hdHRyX2NvbXBfdmVjdG9yLAogCSZkZXZfYXR0cl90bF9yZXRyeV9jb3VudCwKIAkmZGV2X2F0dHJfY21kX3NnX2VudHJpZXMsCkBAIC0yNjAwLDcgKzI3NDAsNyBAQAogCS5pbmZvCQkJCT0gc3JwX3RhcmdldF9pbmZvLAogCS5xdWV1ZWNvbW1hbmQJCQk9IHNycF9xdWV1ZWNvbW1hbmQsCiAJLmNoYW5nZV9xdWV1ZV9kZXB0aCAgICAgICAgICAgICA9IHNycF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlICAgICAgICAgICAgICA9IHNycF9jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX3R5cGUgICAgICAgICAgICAgID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBzcnBfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyCT0gc3JwX3Jlc2V0X2RldmljZSwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCQk9IHNycF9yZXNldF9ob3N0LApAQCAtMjYxMCwxNCArMjc1MCwyOCBAQAogCS50aGlzX2lkCQkJPSAtMSwKIAkuY21kX3Blcl9sdW4JCQk9IFNSUF9ERUZBVUxUX0NNRF9TUV9TSVpFLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCi0JLnNob3N0X2F0dHJzCQkJPSBzcnBfaG9zdF9hdHRycworCS5zaG9zdF9hdHRycwkJCT0gc3JwX2hvc3RfYXR0cnMsCisJLnVzZV9ibGtfdGFncwkJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJCT0gMSwKIH07CiAKK3N0YXRpYyBpbnQgc3JwX3NkZXZfY291bnQoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJaW50IGMgPSAwOworCisJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIGhvc3QpCisJCWMrKzsKKworCXJldHVybiBjOworfQorCiBzdGF0aWMgaW50IHNycF9hZGRfdGFyZ2V0KHN0cnVjdCBzcnBfaG9zdCAqaG9zdCwgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQogewogCXN0cnVjdCBzcnBfcnBvcnRfaWRlbnRpZmllcnMgaWRzOwogCXN0cnVjdCBzcnBfcnBvcnQgKnJwb3J0OwogCisJdGFyZ2V0LT5zdGF0ZSA9IFNSUF9UQVJHRVRfU0NBTk5JTkc7CiAJc3ByaW50Zih0YXJnZXQtPnRhcmdldF9uYW1lLCAiU1JQLlQxMDolMDE2bGxYIiwKIAkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGJlNjRfdG9fY3B1KHRhcmdldC0+aWRfZXh0KSk7CiAKQEAgLTI2NDAsMTEgKzI3OTQsMjYgQEAKIAlsaXN0X2FkZF90YWlsKCZ0YXJnZXQtPmxpc3QsICZob3N0LT50YXJnZXRfbGlzdCk7CiAJc3Bpbl91bmxvY2soJmhvc3QtPnRhcmdldF9sb2NrKTsKIAotCXRhcmdldC0+c3RhdGUgPSBTUlBfVEFSR0VUX0xJVkU7Ci0KIAlzY3NpX3NjYW5fdGFyZ2V0KCZ0YXJnZXQtPnNjc2lfaG9zdC0+c2hvc3RfZ2VuZGV2LAogCQkJIDAsIHRhcmdldC0+c2NzaV9pZCwgU0NBTl9XSUxEX0NBUkQsIDApOwogCisJaWYgKCF0YXJnZXQtPmNvbm5lY3RlZCB8fCB0YXJnZXQtPnFwX2luX2Vycm9yKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHRhcmdldC0+c2NzaV9ob3N0LAorCQkJICAgICBQRlggIlNDU0kgc2NhbiBmYWlsZWQgLSByZW1vdmluZyBTQ1NJIGhvc3RcbiIpOworCQlzcnBfcXVldWVfcmVtb3ZlX3dvcmsodGFyZ2V0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJfZGVidWcoUEZYICIlczogU0NTSSBzY2FuIHN1Y2NlZWRlZCAtIGRldGVjdGVkICVkIExVTnNcbiIsCisJCSBkZXZfbmFtZSgmdGFyZ2V0LT5zY3NpX2hvc3QtPnNob3N0X2dlbmRldiksCisJCSBzcnBfc2Rldl9jb3VudCh0YXJnZXQtPnNjc2lfaG9zdCkpOworCisJc3Bpbl9sb2NrX2lycSgmdGFyZ2V0LT5sb2NrKTsKKwlpZiAodGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX1NDQU5OSU5HKQorCQl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9MSVZFOworCXNwaW5fdW5sb2NrX2lycSgmdGFyZ2V0LT5sb2NrKTsKKworb3V0OgogCXJldHVybiAwOwogfQogCkBAIC0yODAxLDExICsyOTcwLDE1IEBACiAJCQl9CiAKIAkJCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7Ci0JCQkJc3RybGNweShkZ2lkLCBwICsgaSAqIDIsIDMpOwotCQkJCXRhcmdldC0+cGF0aC5kZ2lkLnJhd1tpXSA9IHNpbXBsZV9zdHJ0b3VsKGRnaWQsIE5VTEwsIDE2KTsKKwkJCQlzdHJsY3B5KGRnaWQsIHAgKyBpICogMiwgc2l6ZW9mKGRnaWQpKTsKKwkJCQlpZiAoc3NjYW5mKGRnaWQsICIlaGh4IiwKKwkJCQkJICAgJnRhcmdldC0+b3JpZ19kZ2lkLnJhd1tpXSkgPCAxKSB7CisJCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJCWtmcmVlKHApOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CiAJCQl9CiAJCQlrZnJlZShwKTsKLQkJCW1lbWNweSh0YXJnZXQtPm9yaWdfZGdpZCwgdGFyZ2V0LT5wYXRoLmRnaWQucmF3LCAxNik7CiAJCQlicmVhazsKIAogCQljYXNlIFNSUF9PUFRfUEtFWToKQEAgLTI4MTMsNyArMjk4Niw3IEBACiAJCQkJcHJfd2FybigiYmFkIFBfS2V5IHBhcmFtZXRlciAnJXMnXG4iLCBwKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCXRhcmdldC0+cGF0aC5wa2V5ID0gY3B1X3RvX2JlMTYodG9rZW4pOworCQkJdGFyZ2V0LT5wa2V5ID0gY3B1X3RvX2JlMTYodG9rZW4pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTUlBfT1BUX1NFUlZJQ0VfSUQ6CkBAIC0yODIzLDcgKzI5OTYsNiBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJdGFyZ2V0LT5zZXJ2aWNlX2lkID0gY3B1X3RvX2JlNjQoc2ltcGxlX3N0cnRvdWxsKHAsIE5VTEwsIDE2KSk7Ci0JCQl0YXJnZXQtPnBhdGguc2VydmljZV9pZCA9IHRhcmdldC0+c2VydmljZV9pZDsKIAkJCWtmcmVlKHApOwogCQkJYnJlYWs7CiAKQEAgLTI5NjAsOSArMzEzMiwxMSBAQAogCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGRldik7CiAJc3RydWN0IFNjc2lfSG9zdCAqdGFyZ2V0X2hvc3Q7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0OworCXN0cnVjdCBzcnBfcmRtYV9jaCAqY2g7CiAJc3RydWN0IHNycF9kZXZpY2UgKnNycF9kZXYgPSBob3N0LT5zcnBfZGV2OwogCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gc3JwX2Rldi0+ZGV2OwotCWludCByZXQ7CisJaW50IHJldCwgbm9kZV9pZHgsIG5vZGUsIGNwdSwgaTsKKwlib29sIG11bHRpY2ggPSBmYWxzZTsKIAogCXRhcmdldF9ob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZzcnBfdGVtcGxhdGUsCiAJCQkJICAgICAgc2l6ZW9mIChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0KSk7CkBAIC0yOTg4LDEyICszMTYyLDIyIEBACiAJdGFyZ2V0LT50bF9yZXRyeV9jb3VudAk9IDc7CiAJdGFyZ2V0LT5xdWV1ZV9zaXplCT0gU1JQX0RFRkFVTFRfUVVFVUVfU0laRTsKIAorCS8qCisJICogQXZvaWQgdGhhdCB0aGUgU0NTSSBob3N0IGNhbiBiZSByZW1vdmVkIGJ5IHNycF9yZW1vdmVfdGFyZ2V0KCkKKwkgKiBiZWZvcmUgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgorCSAqLworCXNjc2lfaG9zdF9nZXQodGFyZ2V0LT5zY3NpX2hvc3QpOworCiAJbXV0ZXhfbG9jaygmaG9zdC0+YWRkX3RhcmdldF9tdXRleCk7CiAKIAlyZXQgPSBzcnBfcGFyc2Vfb3B0aW9ucyhidWYsIHRhcmdldCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKKwlyZXQgPSBzY3NpX2luaXRfc2hhcmVkX3RhZ19tYXAodGFyZ2V0X2hvc3QsIHRhcmdldF9ob3N0LT5jYW5fcXVldWUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCiAJdGFyZ2V0LT5yZXFfcmluZ19zaXplID0gdGFyZ2V0LT5xdWV1ZV9zaXplIC0gU1JQX1RTS19NR01UX1NRX1NJWkU7CiAKIAlpZiAoIXNycF9jb25uX3VuaXF1ZSh0YXJnZXQtPnNycF9ob3N0LCB0YXJnZXQpKSB7CkBAIC0zMDIyLDU5ICszMjA2LDExNSBAQAogCUlOSVRfV09SSygmdGFyZ2V0LT50bF9lcnJfd29yaywgc3JwX3RsX2Vycl93b3JrKTsKIAlJTklUX1dPUksoJnRhcmdldC0+cmVtb3ZlX3dvcmssIHNycF9yZW1vdmVfd29yayk7CiAJc3Bpbl9sb2NrX2luaXQoJnRhcmdldC0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+ZnJlZV90eCk7Ci0JcmV0ID0gc3JwX2FsbG9jX3JlcV9kYXRhKHRhcmdldCk7CisJcmV0ID0gaWJfcXVlcnlfZ2lkKGliZGV2LCBob3N0LT5wb3J0LCAwLCAmdGFyZ2V0LT5zZ2lkKTsKIAlpZiAocmV0KQotCQlnb3RvIGVycl9mcmVlX21lbTsKKwkJZ290byBlcnI7CiAKLQlyZXQgPSBpYl9xdWVyeV9naWQoaWJkZXYsIGhvc3QtPnBvcnQsIDAsICZ0YXJnZXQtPnBhdGguc2dpZCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfZnJlZV9tZW07CisJcmV0ID0gLUVOT01FTTsKKwl0YXJnZXQtPmNoX2NvdW50ID0gbWF4X3QodW5zaWduZWQsIG51bV9vbmxpbmVfbm9kZXMoKSwKKwkJCQkgbWluKGNoX2NvdW50ID8gOgorCQkJCSAgICAgbWluKDQgKiBudW1fb25saW5lX25vZGVzKCksCisJCQkJCSBpYmRldi0+bnVtX2NvbXBfdmVjdG9ycyksCisJCQkJICAgICBudW1fb25saW5lX2NwdXMoKSkpOworCXRhcmdldC0+Y2ggPSBrY2FsbG9jKHRhcmdldC0+Y2hfY291bnQsIHNpemVvZigqdGFyZ2V0LT5jaCksCisJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghdGFyZ2V0LT5jaCkKKwkJZ290byBlcnI7CiAKLQlyZXQgPSBzcnBfY3JlYXRlX3RhcmdldF9pYih0YXJnZXQpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX2ZyZWVfbWVtOworCW5vZGVfaWR4ID0gMDsKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCWNvbnN0IGludCBjaF9zdGFydCA9IChub2RlX2lkeCAqIHRhcmdldC0+Y2hfY291bnQgLworCQkJCSAgICAgIG51bV9vbmxpbmVfbm9kZXMoKSk7CisJCWNvbnN0IGludCBjaF9lbmQgPSAoKG5vZGVfaWR4ICsgMSkgKiB0YXJnZXQtPmNoX2NvdW50IC8KKwkJCQkgICAgbnVtX29ubGluZV9ub2RlcygpKTsKKwkJY29uc3QgaW50IGN2X3N0YXJ0ID0gKG5vZGVfaWR4ICogaWJkZXYtPm51bV9jb21wX3ZlY3RvcnMgLworCQkJCSAgICAgIG51bV9vbmxpbmVfbm9kZXMoKSArIHRhcmdldC0+Y29tcF92ZWN0b3IpCisJCQkJICAgICAlIGliZGV2LT5udW1fY29tcF92ZWN0b3JzOworCQljb25zdCBpbnQgY3ZfZW5kID0gKChub2RlX2lkeCArIDEpICogaWJkZXYtPm51bV9jb21wX3ZlY3RvcnMgLworCQkJCSAgICBudW1fb25saW5lX25vZGVzKCkgKyB0YXJnZXQtPmNvbXBfdmVjdG9yKQorCQkJCSAgICUgaWJkZXYtPm51bV9jb21wX3ZlY3RvcnM7CisJCWludCBjcHVfaWR4ID0gMDsKIAotCXJldCA9IHNycF9uZXdfY21faWQodGFyZ2V0KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9mcmVlX2liOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQkJaWYgKGNwdV90b19ub2RlKGNwdSkgIT0gbm9kZSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChjaF9zdGFydCArIGNwdV9pZHggPj0gY2hfZW5kKQorCQkJCWNvbnRpbnVlOworCQkJY2ggPSAmdGFyZ2V0LT5jaFtjaF9zdGFydCArIGNwdV9pZHhdOworCQkJY2gtPnRhcmdldCA9IHRhcmdldDsKKwkJCWNoLT5jb21wX3ZlY3RvciA9IGN2X3N0YXJ0ID09IGN2X2VuZCA/IGN2X3N0YXJ0IDoKKwkJCQljdl9zdGFydCArIGNwdV9pZHggJSAoY3ZfZW5kIC0gY3Zfc3RhcnQpOworCQkJc3Bpbl9sb2NrX2luaXQoJmNoLT5sb2NrKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZjaC0+ZnJlZV90eCk7CisJCQlyZXQgPSBzcnBfbmV3X2NtX2lkKGNoKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnJfZGlzY29ubmVjdDsKIAotCXJldCA9IHNycF9jb25uZWN0X3RhcmdldCh0YXJnZXQpOwotCWlmIChyZXQpIHsKLQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwKLQkJCSAgICAgUEZYICJDb25uZWN0aW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyX2NtX2lkOworCQkJcmV0ID0gc3JwX2NyZWF0ZV9jaF9pYihjaCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX2Rpc2Nvbm5lY3Q7CisKKwkJCXJldCA9IHNycF9hbGxvY19yZXFfZGF0YShjaCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX2Rpc2Nvbm5lY3Q7CisKKwkJCXJldCA9IHNycF9jb25uZWN0X2NoKGNoLCBtdWx0aWNoKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LAorCQkJCQkgICAgIFBGWCAiQ29ubmVjdGlvbiAlZC8lZCBmYWlsZWRcbiIsCisJCQkJCSAgICAgY2hfc3RhcnQgKyBjcHVfaWR4LAorCQkJCQkgICAgIHRhcmdldC0+Y2hfY291bnQpOworCQkJCWlmIChub2RlX2lkeCA9PSAwICYmIGNwdV9pZHggPT0gMCkgeworCQkJCQlnb3RvIGVycl9kaXNjb25uZWN0OworCQkJCX0gZWxzZSB7CisJCQkJCXNycF9mcmVlX2NoX2liKHRhcmdldCwgY2gpOworCQkJCQlzcnBfZnJlZV9yZXFfZGF0YSh0YXJnZXQsIGNoKTsKKwkJCQkJdGFyZ2V0LT5jaF9jb3VudCA9IGNoIC0gdGFyZ2V0LT5jaDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQltdWx0aWNoID0gdHJ1ZTsKKwkJCWNwdV9pZHgrKzsKKwkJfQorCQlub2RlX2lkeCsrOwogCX0KIAorCXRhcmdldC0+c2NzaV9ob3N0LT5ucl9od19xdWV1ZXMgPSB0YXJnZXQtPmNoX2NvdW50OworCiAJcmV0ID0gc3JwX2FkZF90YXJnZXQoaG9zdCwgdGFyZ2V0KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9kaXNjb25uZWN0OwogCi0Jc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKLQkJICAgICAibmV3IHRhcmdldDogaWRfZXh0ICUwMTZsbHggaW9jX2d1aWQgJTAxNmxseCBwa2V5ICUwNHggc2VydmljZV9pZCAlMDE2bGx4IHNnaWQgJXBJNiBkZ2lkICVwSTZcbiIsCi0JCSAgICAgYmU2NF90b19jcHUodGFyZ2V0LT5pZF9leHQpLAotCQkgICAgIGJlNjRfdG9fY3B1KHRhcmdldC0+aW9jX2d1aWQpLAotCQkgICAgIGJlMTZfdG9fY3B1KHRhcmdldC0+cGF0aC5wa2V5KSwKLQkJICAgICBiZTY0X3RvX2NwdSh0YXJnZXQtPnNlcnZpY2VfaWQpLAotCQkgICAgIHRhcmdldC0+cGF0aC5zZ2lkLnJhdywgdGFyZ2V0LT5wYXRoLmRnaWQucmF3KTsKKwlpZiAodGFyZ2V0LT5zdGF0ZSAhPSBTUlBfVEFSR0VUX1JFTU9WRUQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIHRhcmdldC0+c2NzaV9ob3N0LCBQRlgKKwkJCSAgICAgIm5ldyB0YXJnZXQ6IGlkX2V4dCAlMDE2bGx4IGlvY19ndWlkICUwMTZsbHggcGtleSAlMDR4IHNlcnZpY2VfaWQgJTAxNmxseCBzZ2lkICVwSTYgZGdpZCAlcEk2XG4iLAorCQkJICAgICBiZTY0X3RvX2NwdSh0YXJnZXQtPmlkX2V4dCksCisJCQkgICAgIGJlNjRfdG9fY3B1KHRhcmdldC0+aW9jX2d1aWQpLAorCQkJICAgICBiZTE2X3RvX2NwdSh0YXJnZXQtPnBrZXkpLAorCQkJICAgICBiZTY0X3RvX2NwdSh0YXJnZXQtPnNlcnZpY2VfaWQpLAorCQkJICAgICB0YXJnZXQtPnNnaWQucmF3LCB0YXJnZXQtPm9yaWdfZGdpZC5yYXcpOworCX0KIAogCXJldCA9IGNvdW50OwogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZob3N0LT5hZGRfdGFyZ2V0X211dGV4KTsKKworCXNjc2lfaG9zdF9wdXQodGFyZ2V0LT5zY3NpX2hvc3QpOworCiAJcmV0dXJuIHJldDsKIAogZXJyX2Rpc2Nvbm5lY3Q6CiAJc3JwX2Rpc2Nvbm5lY3RfdGFyZ2V0KHRhcmdldCk7CiAKLWVycl9jbV9pZDoKLQlpYl9kZXN0cm95X2NtX2lkKHRhcmdldC0+Y21faWQpOworCWZvciAoaSA9IDA7IGkgPCB0YXJnZXQtPmNoX2NvdW50OyBpKyspIHsKKwkJY2ggPSAmdGFyZ2V0LT5jaFtpXTsKKwkJc3JwX2ZyZWVfY2hfaWIodGFyZ2V0LCBjaCk7CisJCXNycF9mcmVlX3JlcV9kYXRhKHRhcmdldCwgY2gpOworCX0KIAotZXJyX2ZyZWVfaWI6Ci0Jc3JwX2ZyZWVfdGFyZ2V0X2liKHRhcmdldCk7Ci0KLWVycl9mcmVlX21lbToKLQlzcnBfZnJlZV9yZXFfZGF0YSh0YXJnZXQpOworCWtmcmVlKHRhcmdldC0+Y2gpOwogCiBlcnI6CiAJc2NzaV9ob3N0X3B1dCh0YXJnZXRfaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oCmluZGV4IGU0NmVjYjEuLmE2MTE1NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oCkBAIC03MCw5ICs3MCwxMiBAQAogCiAJTE9DQUxfSU5WX1dSX0lEX01BU0sJPSAxLAogCUZBU1RfUkVHX1dSX0lEX01BU0sJPSAyLAorCisJU1JQX0xBU1RfV1JfSUQJCT0gMHhmZmZmZmZmY1UsCiB9OwogCiBlbnVtIHNycF90YXJnZXRfc3RhdGUgeworCVNSUF9UQVJHRVRfU0NBTk5JTkcsCiAJU1JQX1RBUkdFVF9MSVZFLAogCVNSUF9UQVJHRVRfUkVNT1ZFRCwKIH07CkBAIC0xMTUsNyArMTE4LDYgQEAKIH07CiAKIHN0cnVjdCBzcnBfcmVxdWVzdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXN0cnVjdCBzY3NpX2NtbmQgICAgICAgKnNjbW5kOwogCXN0cnVjdCBzcnBfaXUJICAgICAgICpjbWQ7CiAJdW5pb24gewpAQCAtMTI2LDI0ICsxMjgsNjIgQEAKIAlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgICppbmRpcmVjdF9kZXNjOwogCWRtYV9hZGRyX3QJCWluZGlyZWN0X2RtYV9hZGRyOwogCXNob3J0CQkJbm1kZXNjOwotCXNob3J0CQkJaW5kZXg7CiB9OwogCi1zdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0IHsKKy8qKgorICogc3RydWN0IHNycF9yZG1hX2NoCisgKiBAY29tcF92ZWN0b3I6IENvbXBsZXRpb24gdmVjdG9yIHVzZWQgYnkgdGhpcyBSRE1BIGNoYW5uZWwuCisgKi8KK3N0cnVjdCBzcnBfcmRtYV9jaCB7CiAJLyogVGhlc2UgYXJlIFJXIGluIHRoZSBob3QgcGF0aCwgYW5kIGNvbW1vbmx5IHVzZWQgdG9nZXRoZXIgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfdHg7Ci0Jc3RydWN0IGxpc3RfaGVhZAlmcmVlX3JlcXM7CiAJc3BpbmxvY2tfdAkJbG9jazsKIAlzMzIJCQlyZXFfbGltOwogCiAJLyogVGhlc2UgYXJlIHJlYWQtb25seSBpbiB0aGUgaG90IHBhdGggKi8KLQlzdHJ1Y3QgaWJfY3EJICAgICAgICpzZW5kX2NxIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisJc3RydWN0IGliX2NxCSAgICAgICAqc2VuZF9jcTsKIAlzdHJ1Y3QgaWJfY3EJICAgICAgICpyZWN2X2NxOwogCXN0cnVjdCBpYl9xcAkgICAgICAgKnFwOwogCXVuaW9uIHsKIAkJc3RydWN0IGliX2Ztcl9wb29sICAgICAqZm1yX3Bvb2w7CiAJCXN0cnVjdCBzcnBfZnJfcG9vbCAgICAgKmZyX3Bvb2w7CiAJfTsKKworCS8qIEV2ZXJ5dGhpbmcgYWJvdmUgdGhpcyBwb2ludCBpcyB1c2VkIGluIHRoZSBob3QgcGF0aCBvZgorCSAqIGNvbW1hbmQgcHJvY2Vzc2luZy4gVHJ5IHRvIGtlZXAgdGhlbSBwYWNrZWQgaW50byBjYWNoZWxpbmVzLgorCSAqLworCisJc3RydWN0IGNvbXBsZXRpb24JZG9uZTsKKwlpbnQJCQlzdGF0dXM7CisKKwlzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMJcGF0aDsKKwlzdHJ1Y3QgaWJfc2FfcXVlcnkgICAgICpwYXRoX3F1ZXJ5OworCWludAkJCXBhdGhfcXVlcnlfaWQ7CisKKwlzdHJ1Y3QgaWJfY21faWQJICAgICAgICpjbV9pZDsKKwlzdHJ1Y3Qgc3JwX2l1CSAgICAgICoqdHhfcmluZzsKKwlzdHJ1Y3Qgc3JwX2l1CSAgICAgICoqcnhfcmluZzsKKwlzdHJ1Y3Qgc3JwX3JlcXVlc3QgICAgICpyZXFfcmluZzsKKwlpbnQJCQltYXhfdGlfaXVfbGVuOworCWludAkJCWNvbXBfdmVjdG9yOworCisJc3RydWN0IGNvbXBsZXRpb24JdHNrX21nbXRfZG9uZTsKKwl1OAkJCXRza19tZ210X3N0YXR1czsKK307CisKKy8qKgorICogc3RydWN0IHNycF90YXJnZXRfcG9ydAorICogQGNvbXBfdmVjdG9yOiBDb21wbGV0aW9uIHZlY3RvciB1c2VkIGJ5IHRoZSBmaXJzdCBSRE1BIGNoYW5uZWwgY3JlYXRlZCBmb3IKKyAqICAgdGhpcyB0YXJnZXQgcG9ydC4KKyAqLworc3RydWN0IHNycF90YXJnZXRfcG9ydCB7CisJLyogcmVhZCBhbmQgd3JpdHRlbiBpbiB0aGUgaG90IHBhdGggKi8KKwlzcGlubG9ja190CQlsb2NrOworCisJLyogcmVhZCBvbmx5IGluIHRoZSBob3QgcGF0aCAqLworCXN0cnVjdCBzcnBfcmRtYV9jaAkqY2g7CisJdTMyCQkJY2hfY291bnQ7CiAJdTMyCQkJbGtleTsKIAl1MzIJCQlya2V5OwogCWVudW0gc3JwX3RhcmdldF9zdGF0ZQlzdGF0ZTsKQEAgLTE1MiwxMCArMTkyLDggQEAKIAl1bnNpZ25lZCBpbnQJCWluZGlyZWN0X3NpemU7CiAJYm9vbAkJCWFsbG93X2V4dF9zZzsKIAotCS8qIEV2ZXJ5dGhpbmcgYWJvdmUgdGhpcyBwb2ludCBpcyB1c2VkIGluIHRoZSBob3QgcGF0aCBvZgotCSAqIGNvbW1hbmQgcHJvY2Vzc2luZy4gVHJ5IHRvIGtlZXAgdGhlbSBwYWNrZWQgaW50byBjYWNoZWxpbmVzLgotCSAqLwotCisJLyogb3RoZXIgbWVtYmVyIHZhcmlhYmxlcyAqLworCXVuaW9uIGliX2dpZAkJc2dpZDsKIAlfX2JlNjQJCQlpZF9leHQ7CiAJX19iZTY0CQkJaW9jX2d1aWQ7CiAJX19iZTY0CQkJc2VydmljZV9pZDsKQEAgLTE3MiwzNCArMjEwLDE5IEBACiAJaW50CQkJY29tcF92ZWN0b3I7CiAJaW50CQkJdGxfcmV0cnlfY291bnQ7CiAKLQlzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMJcGF0aDsKLQlfX2JlMTYJCQlvcmlnX2RnaWRbOF07Ci0Jc3RydWN0IGliX3NhX3F1ZXJ5ICAgICAqcGF0aF9xdWVyeTsKLQlpbnQJCQlwYXRoX3F1ZXJ5X2lkOworCXVuaW9uIGliX2dpZAkJb3JpZ19kZ2lkOworCV9fYmUxNgkJCXBrZXk7CiAKIAl1MzIJCQlycV90bW9famlmZmllczsKIAlib29sCQkJY29ubmVjdGVkOwogCi0Jc3RydWN0IGliX2NtX2lkCSAgICAgICAqY21faWQ7Ci0KLQlpbnQJCQltYXhfdGlfaXVfbGVuOwotCiAJaW50CQkJemVyb19yZXFfbGltOwogCi0Jc3RydWN0IHNycF9pdQkgICAgICAgKip0eF9yaW5nOwotCXN0cnVjdCBzcnBfaXUJICAgICAgICoqcnhfcmluZzsKLQlzdHJ1Y3Qgc3JwX3JlcXVlc3QJKnJlcV9yaW5nOwotCiAJc3RydWN0IHdvcmtfc3RydWN0CXRsX2Vycl93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdAlyZW1vdmVfd29yazsKIAogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQlzdHJ1Y3QgY29tcGxldGlvbglkb25lOwotCWludAkJCXN0YXR1czsKIAlib29sCQkJcXBfaW5fZXJyb3I7Ci0KLQlzdHJ1Y3QgY29tcGxldGlvbgl0c2tfbWdtdF9kb25lOwotCXU4CQkJdHNrX21nbXRfc3RhdHVzOwogfTsKIAogc3RydWN0IHNycF9pdSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggYmMyMDM0OC4uOGFmYTI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtNDIxLDcgKzQyMSw3IEBACiAKICBlcnJfZnJlZV9jbGllbnQ6CiAJZXZkZXZfZGV0YWNoX2NsaWVudChldmRldiwgY2xpZW50KTsKLQlrZnJlZShjbGllbnQpOworCWt2ZnJlZShjbGllbnQpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXNfcG9sbGVkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5c19wb2xsZWQuYwppbmRleCA0MzJkMzYzLi5jOWMxYzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5c19wb2xsZWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5c19wb2xsZWQuYwpAQCAtMjMsMTAgKzIzLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkiZ3Bpby1rZXlzLXBvbGxlZCIKIApAQCAtNTEsMTUgKzUwLDE0IEBACiAJaW50IHN0YXRlOwogCiAJaWYgKGJkYXRhLT5jYW5fc2xlZXApCi0JCXN0YXRlID0gISFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChidXR0b24tPmdwaW8pOworCQlzdGF0ZSA9ICEhZ3Bpb2RfZ2V0X3ZhbHVlX2NhbnNsZWVwKGJ1dHRvbi0+Z3Bpb2QpOwogCWVsc2UKLQkJc3RhdGUgPSAhIWdwaW9fZ2V0X3ZhbHVlKGJ1dHRvbi0+Z3Bpbyk7CisJCXN0YXRlID0gISFncGlvZF9nZXRfdmFsdWUoYnV0dG9uLT5ncGlvZCk7CiAKIAlpZiAoc3RhdGUgIT0gYmRhdGEtPmxhc3Rfc3RhdGUpIHsKIAkJdW5zaWduZWQgaW50IHR5cGUgPSBidXR0b24tPnR5cGUgPzogRVZfS0VZOwogCi0JCWlucHV0X2V2ZW50KGlucHV0LCB0eXBlLCBidXR0b24tPmNvZGUsCi0JCQkgICAgISEoc3RhdGUgXiBidXR0b24tPmFjdGl2ZV9sb3cpKTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIHR5cGUsIGJ1dHRvbi0+Y29kZSwgc3RhdGUpOwogCQlpbnB1dF9zeW5jKGlucHV0KTsKIAkJYmRhdGEtPmNvdW50ID0gMDsKIAkJYmRhdGEtPmxhc3Rfc3RhdGUgPSBzdGF0ZTsKQEAgLTEwMiwyMSArMTAwLDE1IEBACiAJCXBkYXRhLT5kaXNhYmxlKGJkZXYtPmRldik7CiB9CiAKLSNpZmRlZiBDT05GSUdfT0YKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgKmdwaW9fa2V5c19wb2xsZWRfZ2V0X2RldnRyZWVfcGRhdGEoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgKnBwOwogCXN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbjsKKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQ7CiAJaW50IGVycm9yOwogCWludCBuYnV0dG9uczsKLQlpbnQgaTsKIAotCW5vZGUgPSBkZXYtPm9mX25vZGU7Ci0JaWYgKCFub2RlKQotCQlyZXR1cm4gTlVMTDsKLQotCW5idXR0b25zID0gb2ZfZ2V0X2NoaWxkX2NvdW50KG5vZGUpOworCW5idXR0b25zID0gZGV2aWNlX2dldF9jaGlsZF9ub2RlX2NvdW50KGRldik7CiAJaWYgKG5idXR0b25zID09IDApCiAJCXJldHVybiBOVUxMOwogCkBAIC0xMjYsNTIgKzExOCw0NCBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCXBkYXRhLT5idXR0b25zID0gKHN0cnVjdCBncGlvX2tleXNfYnV0dG9uICopKHBkYXRhICsgMSk7Ci0JcGRhdGEtPm5idXR0b25zID0gbmJ1dHRvbnM7CiAKLQlwZGF0YS0+cmVwID0gISFvZl9nZXRfcHJvcGVydHkobm9kZSwgImF1dG9yZXBlYXQiLCBOVUxMKTsKLQlvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicG9sbC1pbnRlcnZhbCIsICZwZGF0YS0+cG9sbF9pbnRlcnZhbCk7CisJcGRhdGEtPnJlcCA9IGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KGRldiwgImF1dG9yZXBlYXQiKTsKKwlkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAicG9sbC1pbnRlcnZhbCIsICZwZGF0YS0+cG9sbF9pbnRlcnZhbCk7CiAKLQlpID0gMDsKLQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5vZGUsIHBwKSB7Ci0JCWludCBncGlvOwotCQllbnVtIG9mX2dwaW9fZmxhZ3MgZmxhZ3M7CisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGUoZGV2LCBjaGlsZCkgeworCQlzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjOwogCi0JCWlmICghb2ZfZmluZF9wcm9wZXJ0eShwcCwgImdwaW9zIiwgTlVMTCkpIHsKLQkJCXBkYXRhLT5uYnV0dG9ucy0tOwotCQkJZGV2X3dhcm4oZGV2LCAiRm91bmQgYnV0dG9uIHdpdGhvdXQgZ3Bpb3NcbiIpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlncGlvID0gb2ZfZ2V0X2dwaW9fZmxhZ3MocHAsIDAsICZmbGFncyk7Ci0JCWlmIChncGlvIDwgMCkgewotCQkJZXJyb3IgPSBncGlvOworCQlkZXNjID0gZGV2bV9nZXRfZ3Bpb2RfZnJvbV9jaGlsZChkZXYsIGNoaWxkKTsKKwkJaWYgKElTX0VSUihkZXNjKSkgeworCQkJZXJyb3IgPSBQVFJfRVJSKGRlc2MpOwogCQkJaWYgKGVycm9yICE9IC1FUFJPQkVfREVGRVIpCiAJCQkJZGV2X2VycihkZXYsCiAJCQkJCSJGYWlsZWQgdG8gZ2V0IGdwaW8gZmxhZ3MsIGVycm9yOiAlZFxuIiwKIAkJCQkJZXJyb3IpOworCQkJZndub2RlX2hhbmRsZV9wdXQoY2hpbGQpOwogCQkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCQl9CiAKLQkJYnV0dG9uID0gJnBkYXRhLT5idXR0b25zW2krK107CisJCWJ1dHRvbiA9ICZwZGF0YS0+YnV0dG9uc1twZGF0YS0+bmJ1dHRvbnMrK107CisJCWJ1dHRvbi0+Z3Bpb2QgPSBkZXNjOwogCi0JCWJ1dHRvbi0+Z3BpbyA9IGdwaW87Ci0JCWJ1dHRvbi0+YWN0aXZlX2xvdyA9IGZsYWdzICYgT0ZfR1BJT19BQ1RJVkVfTE9XOwotCi0JCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwcCwgImxpbnV4LGNvZGUiLCAmYnV0dG9uLT5jb2RlKSkgewotCQkJZGV2X2VycihkZXYsICJCdXR0b24gd2l0aG91dCBrZXljb2RlOiAweCV4XG4iLAotCQkJCWJ1dHRvbi0+Z3Bpbyk7CisJCWlmIChmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJsaW51eCxjb2RlIiwgJmJ1dHRvbi0+Y29kZSkpIHsKKwkJCWRldl9lcnIoZGV2LCAiQnV0dG9uIHdpdGhvdXQga2V5Y29kZTogJWRcbiIsCisJCQkJcGRhdGEtPm5idXR0b25zIC0gMSk7CisJCQlmd25vZGVfaGFuZGxlX3B1dChjaGlsZCk7CiAJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAkJfQogCi0JCWJ1dHRvbi0+ZGVzYyA9IG9mX2dldF9wcm9wZXJ0eShwcCwgImxhYmVsIiwgTlVMTCk7CisJCWZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyhjaGlsZCwgImxhYmVsIiwgJmJ1dHRvbi0+ZGVzYyk7CiAKLQkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBwLCAibGludXgsaW5wdXQtdHlwZSIsICZidXR0b24tPnR5cGUpKQorCQlpZiAoZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAibGludXgsaW5wdXQtdHlwZSIsCisJCQkJCSAgICAgJmJ1dHRvbi0+dHlwZSkpCiAJCQlidXR0b24tPnR5cGUgPSBFVl9LRVk7CiAKLQkJYnV0dG9uLT53YWtldXAgPSAhIW9mX2dldF9wcm9wZXJ0eShwcCwgImdwaW8ta2V5LHdha2V1cCIsIE5VTEwpOworCQlidXR0b24tPndha2V1cCA9IGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGNoaWxkLCAiZ3Bpby1rZXksd2FrZXVwIik7CiAKLQkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBwLCAiZGVib3VuY2UtaW50ZXJ2YWwiLAotCQkJCQkgJmJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpKQorCQlpZiAoZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAiZGVib3VuY2UtaW50ZXJ2YWwiLAorCQkJCQkgICAgICZidXR0b24tPmRlYm91bmNlX2ludGVydmFsKSkKIAkJCWJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwgPSA1OwogCX0KIApAQCAtMTg3LDE1ICsxNzEsNiBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGdwaW9fa2V5c19wb2xsZWRfb2ZfbWF0Y2gpOwogCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSAqCi1ncGlvX2tleXNfcG9sbGVkX2dldF9kZXZ0cmVlX3BkYXRhKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IGdwaW9fa2V5c19wb2xsZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwpAQCAtMjU5LDcgKzIzNCw2IEBACiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5uYnV0dG9uczsgaSsrKSB7CiAJCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uICpidXR0b24gPSAmcGRhdGEtPmJ1dHRvbnNbaV07CiAJCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uX2RhdGEgKmJkYXRhID0gJmJkZXYtPmRhdGFbaV07Ci0JCXVuc2lnbmVkIGludCBncGlvID0gYnV0dG9uLT5ncGlvOwogCQl1bnNpZ25lZCBpbnQgdHlwZSA9IGJ1dHRvbi0+dHlwZSA/OiBFVl9LRVk7CiAKIAkJaWYgKGJ1dHRvbi0+d2FrZXVwKSB7CkBAIC0yNjcsMTUgKzI0MSwzMSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQllcnJvciA9IGRldm1fZ3Bpb19yZXF1ZXN0X29uZSgmcGRldi0+ZGV2LCBncGlvLCBHUElPRl9JTiwKLQkJCQkJICAgICAgYnV0dG9uLT5kZXNjID8gOiBEUlZfTkFNRSk7Ci0JCWlmIChlcnJvcikgewotCQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gY2xhaW0gZ3BpbyAldSwgZXJyPSVkXG4iLAotCQkJCWdwaW8sIGVycm9yKTsKLQkJCXJldHVybiBlcnJvcjsKKwkJLyoKKwkJICogTGVnYWN5IEdQSU8gbnVtYmVyIHNvIHJlcXVlc3QgdGhlIEdQSU8gaGVyZSBhbmQKKwkJICogY29udmVydCBpdCB0byBkZXNjcmlwdG9yLgorCQkgKi8KKwkJaWYgKCFidXR0b24tPmdwaW9kICYmIGdwaW9faXNfdmFsaWQoYnV0dG9uLT5ncGlvKSkgeworCQkJdW5zaWduZWQgZmxhZ3MgPSAwOworCisJCQlpZiAoYnV0dG9uLT5hY3RpdmVfbG93KQorCQkJCWZsYWdzIHw9IEdQSU9GX0FDVElWRV9MT1c7CisKKwkJCWVycm9yID0gZGV2bV9ncGlvX3JlcXVlc3Rfb25lKCZwZGV2LT5kZXYsIGJ1dHRvbi0+Z3BpbywKKwkJCQkJZmxhZ3MsIGJ1dHRvbi0+ZGVzYyA/IDogRFJWX05BTUUpOworCQkJaWYgKGVycm9yKSB7CisJCQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gY2xhaW0gZ3BpbyAldSwgZXJyPSVkXG4iLAorCQkJCQlidXR0b24tPmdwaW8sIGVycm9yKTsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CisKKwkJCWJ1dHRvbi0+Z3Bpb2QgPSBncGlvX3RvX2Rlc2MoYnV0dG9uLT5ncGlvKTsKIAkJfQogCi0JCWJkYXRhLT5jYW5fc2xlZXAgPSBncGlvX2NhbnNsZWVwKGdwaW8pOworCQlpZiAoSVNfRVJSKGJ1dHRvbi0+Z3Bpb2QpKQorCQkJcmV0dXJuIFBUUl9FUlIoYnV0dG9uLT5ncGlvZCk7CisKKwkJYmRhdGEtPmNhbl9zbGVlcCA9IGdwaW9kX2NhbnNsZWVwKGJ1dHRvbi0+Z3Bpb2QpOwogCQliZGF0YS0+bGFzdF9zdGF0ZSA9IC0xOwogCQliZGF0YS0+dGhyZXNob2xkID0gRElWX1JPVU5EX1VQKGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwsCiAJCQkJCQlwZGF0YS0+cG9sbF9pbnRlcnZhbCk7CkBAIC0zMDgsNyArMjk4LDcgQEAKIAkuZHJpdmVyCT0gewogCQkubmFtZQk9IERSVl9OQU1FLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGdwaW9fa2V5c19wb2xsZWRfb2ZfbWF0Y2gpLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBncGlvX2tleXNfcG9sbGVkX29mX21hdGNoLAogCX0sCiB9OwogbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihncGlvX2tleXNfcG9sbGVkX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NhbXN1bmcta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NhbXN1bmcta2V5cGFkLmMKaW5kZXggNWU4MGZiZi4uYzk5NGUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zYW1zdW5nLWtleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2Ftc3VuZy1rZXlwYWQuYwpAQCAtNDYzLDcgKzQ2Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzYW1zdW5nX2tleXBhZF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY3l0dHNwNF9jb3JlLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2N5dHRzcDRfY29yZS5jCmluZGV4IGEwMzVhMzkuLjU2OGEzZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY3l0dHNwNF9jb3JlLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jeXR0c3A0X2NvcmUuYwpAQCAtMTcxNiw3ICsxNzE2LDcgQEAKIAlrZnJlZShzaS0+YnRuX3JlY19kYXRhKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSB8fCBkZWZpbmVkKENPTkZJR19QTV9SVU5USU1FKQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBjeXR0c3A0X2NvcmVfc2xlZXAoc3RydWN0IGN5dHRzcDQgKmNkKQogewogCWludCByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvS2NvbmZpZyBiL2RyaXZlcnMvaW9tbXUvS2NvbmZpZwppbmRleCBkZDUxMTIyLi42ZGJmYmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L0tjb25maWcKKysrIGIvZHJpdmVycy9pb21tdS9LY29uZmlnCkBAIC0xNjMsMTQgKzE2MywxNCBAQAogCSAgaGFyZHdhcmUgaW5jbHVkZWQgb24gVGVncmEgU29Dcy4KIAogY29uZmlnIFRFR1JBX0lPTU1VX1NNTVUKLQlib29sICJUZWdyYSBTTU1VIElPTU1VIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX1RFR1JBICYmIFRFR1JBX0FIQgorCWJvb2wgIk5WSURJQSBUZWdyYSBTTU1VIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX1RFR1JBCisJZGVwZW5kcyBvbiBURUdSQV9BSEIKKwlkZXBlbmRzIG9uIFRFR1JBX01DCiAJc2VsZWN0IElPTU1VX0FQSQogCWhlbHAKLQkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgcmVtYXBwaW5nIGRpc2NvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5Ci0JICBzaGFyZWQgd2l0aCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbnRvIGNvbnRpZ3VvdXMgSS9PIHZpcnR1YWwKLQkgIHNwYWNlIHRocm91Z2ggdGhlIFNNTVUgKFN5c3RlbSBNZW1vcnkgTWFuYWdlbWVudCBVbml0KQotCSAgaGFyZHdhcmUgaW5jbHVkZWQgb24gVGVncmEgU29Dcy4KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBJT01NVSBoYXJkd2FyZSAoU01NVSkgZm91bmQgb24gTlZJRElBIFRlZ3JhCisJICBTb0NzIChUZWdyYTMwIHVwIHRvIFRlZ3JhMTI0KS4KIAogY29uZmlnIEVYWU5PU19JT01NVQogCWJvb2wgIkV4eW5vcyBJT01NVSBTdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWRfaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMKaW5kZXggNTA1YTlhZC4uMmQ4NGM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9hbWRfaW9tbXUuYworKysgYi9kcml2ZXJzL2lvbW11L2FtZF9pb21tdS5jCkBAIC0zNDI0LDYgKzM0MjQsNyBAQAogCS5kZXRhY2hfZGV2ID0gYW1kX2lvbW11X2RldGFjaF9kZXZpY2UsCiAJLm1hcCA9IGFtZF9pb21tdV9tYXAsCiAJLnVubWFwID0gYW1kX2lvbW11X3VubWFwLAorCS5tYXBfc2cgPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkuaW92YV90b19waHlzID0gYW1kX2lvbW11X2lvdmFfdG9fcGh5cywKIAkucGdzaXplX2JpdG1hcAk9IEFNRF9JT01NVV9QR1NJWkVTLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYwppbmRleCA2MDU1OGY3Li5lMzkzYWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2FybS1zbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9hcm0tc21tdS5jCkBAIC0xNjUyLDYgKzE2NTIsNyBAQAogCS5kZXRhY2hfZGV2CT0gYXJtX3NtbXVfZGV0YWNoX2RldiwKIAkubWFwCQk9IGFybV9zbW11X21hcCwKIAkudW5tYXAJCT0gYXJtX3NtbXVfdW5tYXAsCisJLm1hcF9zZwkJPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkuaW92YV90b19waHlzCT0gYXJtX3NtbXVfaW92YV90b19waHlzLAogCS5hZGRfZGV2aWNlCT0gYXJtX3NtbXVfYWRkX2RldmljZSwKIAkucmVtb3ZlX2RldmljZQk9IGFybV9zbW11X3JlbW92ZV9kZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2V4eW5vcy1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9leHlub3MtaW9tbXUuYwppbmRleCA3NDIzMzE4Li4yODM3MmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2V4eW5vcy1pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvZXh5bm9zLWlvbW11LmMKQEAgLTExNzgsNiArMTE3OCw3IEBACiAJLmRldGFjaF9kZXYgPSBleHlub3NfaW9tbXVfZGV0YWNoX2RldmljZSwKIAkubWFwID0gZXh5bm9zX2lvbW11X21hcCwKIAkudW5tYXAgPSBleHlub3NfaW9tbXVfdW5tYXAsCisJLm1hcF9zZyA9IGRlZmF1bHRfaW9tbXVfbWFwX3NnLAogCS5pb3ZhX3RvX3BoeXMgPSBleHlub3NfaW9tbXVfaW92YV90b19waHlzLAogCS5hZGRfZGV2aWNlID0gZXh5bm9zX2lvbW11X2FkZF9kZXZpY2UsCiAJLnJlbW92ZV9kZXZpY2UgPSBleHlub3NfaW9tbXVfcmVtb3ZlX2RldmljZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYwppbmRleCBhMjdkNmNiLi4wMmNkMjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jCkBAIC00NDY3LDYgKzQ0NjcsNyBAQAogCS5kZXRhY2hfZGV2CT0gaW50ZWxfaW9tbXVfZGV0YWNoX2RldmljZSwKIAkubWFwCQk9IGludGVsX2lvbW11X21hcCwKIAkudW5tYXAJCT0gaW50ZWxfaW9tbXVfdW5tYXAsCisJLm1hcF9zZwkJPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkuaW92YV90b19waHlzCT0gaW50ZWxfaW9tbXVfaW92YV90b19waHlzLAogCS5hZGRfZGV2aWNlCT0gaW50ZWxfaW9tbXVfYWRkX2RldmljZSwKIAkucmVtb3ZlX2RldmljZQk9IGludGVsX2lvbW11X3JlbW92ZV9kZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2lvbW11LmMKaW5kZXggZWQ4YjA0OC4uMDJlNDMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUuYwpAQCAtODE4LDcgKzgxOCwxNSBAQAogCQlrZnJlZShuYik7CiAJCXJldHVybiBlcnI7CiAJfQotCXJldHVybiBidXNfZm9yX2VhY2hfZGV2KGJ1cywgTlVMTCwgJmNiLCBhZGRfaW9tbXVfZ3JvdXApOworCisJZXJyID0gYnVzX2Zvcl9lYWNoX2RldihidXMsIE5VTEwsICZjYiwgYWRkX2lvbW11X2dyb3VwKTsKKwlpZiAoZXJyKSB7CisJCWJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKGJ1cywgbmIpOworCQlrZnJlZShuYik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtODM2LDEzICs4NDQsMTkgQEAKICAqLwogaW50IGJ1c19zZXRfaW9tbXUoc3RydWN0IGJ1c190eXBlICpidXMsIGNvbnN0IHN0cnVjdCBpb21tdV9vcHMgKm9wcykKIHsKKwlpbnQgZXJyOworCiAJaWYgKGJ1cy0+aW9tbXVfb3BzICE9IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlidXMtPmlvbW11X29wcyA9IG9wczsKIAogCS8qIERvIElPTU1VIHNwZWNpZmljIHNldHVwIGZvciB0aGlzIGJ1cy10eXBlICovCi0JcmV0dXJuIGlvbW11X2J1c19pbml0KGJ1cywgb3BzKTsKKwllcnIgPSBpb21tdV9idXNfaW5pdChidXMsIG9wcyk7CisJaWYgKGVycikKKwkJYnVzLT5pb21tdV9vcHMgPSBOVUxMOworCisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJ1c19zZXRfaW9tbXUpOwogCkBAIC0xMTI0LDYgKzExMzgsMzggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbW11X3VubWFwKTsKIAorc2l6ZV90IGRlZmF1bHRfaW9tbXVfbWFwX3NnKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAorCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cywgaW50IHByb3QpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCXNpemVfdCBtYXBwZWQgPSAwOworCXVuc2lnbmVkIGludCBpOworCWludCByZXQ7CisKKwlmb3JfZWFjaF9zZyhzZywgcywgbmVudHMsIGkpIHsKKwkJcGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhzZ19wYWdlKHMpKTsKKworCQkvKiBXZSBhcmUgbWFwcGluZyBvbiBwYWdlIGJvdW5kYXJ5cywgc28gb2Zmc2V0IG11c3QgYmUgMCAqLworCQlpZiAocy0+b2Zmc2V0KQorCQkJZ290byBvdXRfZXJyOworCisJCXJldCA9IGlvbW11X21hcChkb21haW4sIGlvdmEgKyBtYXBwZWQsIHBoeXMsIHMtPmxlbmd0aCwgcHJvdCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9lcnI7CisKKwkJbWFwcGVkICs9IHMtPmxlbmd0aDsKKwl9CisKKwlyZXR1cm4gbWFwcGVkOworCitvdXRfZXJyOgorCS8qIHVuZG8gbWFwcGluZ3MgYWxyZWFkeSBkb25lICovCisJaW9tbXVfdW5tYXAoZG9tYWluLCBpb3ZhLCBtYXBwZWQpOworCisJcmV0dXJuIDA7CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRlZmF1bHRfaW9tbXVfbWFwX3NnKTsKIAogaW50IGlvbW11X2RvbWFpbl93aW5kb3dfZW5hYmxlKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdTMyIHduZF9uciwKIAkJCSAgICAgICBwaHlzX2FkZHJfdCBwYWRkciwgdTY0IHNpemUsIGludCBwcm90KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pcG1tdS12bXNhLmMgYi9kcml2ZXJzL2lvbW11L2lwbW11LXZtc2EuYwppbmRleCA3ZGFiNWNiLi5lNTA5YzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2lwbW11LXZtc2EuYworKysgYi9kcml2ZXJzL2lvbW11L2lwbW11LXZtc2EuYwpAQCAtMTEyNyw2ICsxMTI3LDcgQEAKIAkuZGV0YWNoX2RldiA9IGlwbW11X2RldGFjaF9kZXZpY2UsCiAJLm1hcCA9IGlwbW11X21hcCwKIAkudW5tYXAgPSBpcG1tdV91bm1hcCwKKwkubWFwX3NnID0gZGVmYXVsdF9pb21tdV9tYXBfc2csCiAJLmlvdmFfdG9fcGh5cyA9IGlwbW11X2lvdmFfdG9fcGh5cywKIAkuYWRkX2RldmljZSA9IGlwbW11X2FkZF9kZXZpY2UsCiAJLnJlbW92ZV9kZXZpY2UgPSBpcG1tdV9yZW1vdmVfZGV2aWNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pcnFfcmVtYXBwaW5nLmMgYi9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuYwppbmRleCA3NGExNzY3Li4yYzNmNWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuYworKysgYi9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuYwpAQCAtNTYsMTkgKzU2LDEzIEBACiAJdW5zaWduZWQgaW50IGlycTsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKm1zaWRlc2M7CiAKLQlXQVJOX09OKCFsaXN0X2lzX3Npbmd1bGFyKCZkZXYtPm1zaV9saXN0KSk7CiAJbXNpZGVzYyA9IGxpc3RfZW50cnkoZGV2LT5tc2lfbGlzdC5uZXh0LCBzdHJ1Y3QgbXNpX2Rlc2MsIGxpc3QpOwotCVdBUk5fT04obXNpZGVzYy0+aXJxKTsKLQlXQVJOX09OKG1zaWRlc2MtPm1zaV9hdHRyaWIubXVsdGlwbGUpOwotCVdBUk5fT04obXNpZGVzYy0+bnZlY191c2VkKTsKIAogCWlycSA9IGlycV9hbGxvY19od2lycXMobnZlYywgZGV2X3RvX25vZGUoJmRldi0+ZGV2KSk7CiAJaWYgKGlycSA9PSAwKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCW52ZWNfcG93MiA9IF9fcm91bmR1cF9wb3dfb2ZfdHdvKG52ZWMpOwotCW1zaWRlc2MtPm52ZWNfdXNlZCA9IG52ZWM7Ci0JbXNpZGVzYy0+bXNpX2F0dHJpYi5tdWx0aXBsZSA9IGlsb2cyKG52ZWNfcG93Mik7CiAJZm9yIChzdWJfaGFuZGxlID0gMDsgc3ViX2hhbmRsZSA8IG52ZWM7IHN1Yl9oYW5kbGUrKykgewogCQlpZiAoIXN1Yl9oYW5kbGUpIHsKIAkJCWluZGV4ID0gbXNpX2FsbG9jX3JlbWFwcGVkX2lycShkZXYsIGlycSwgbnZlY19wb3cyKTsKQEAgLTk2LDggKzkwLDYgQEAKIAkgKiBJUlFzIGZyb20gdGVhcmluZyBkb3duIGFnYWluIGluIGRlZmF1bHRfdGVhcmRvd25fbXNpX2lycXMoKQogCSAqLwogCW1zaWRlc2MtPmlycSA9IDA7Ci0JbXNpZGVzYy0+bnZlY191c2VkID0gMDsKLQltc2lkZXNjLT5tc2lfYXR0cmliLm11bHRpcGxlID0gMDsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L21zbV9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9tc21faW9tbXUuYwppbmRleCA2ZTNkY2MyOC4uMWM3Yjc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9tc21faW9tbXUuYworKysgYi9kcml2ZXJzL2lvbW11L21zbV9pb21tdS5jCkBAIC02ODEsNiArNjgxLDcgQEAKIAkuZGV0YWNoX2RldiA9IG1zbV9pb21tdV9kZXRhY2hfZGV2LAogCS5tYXAgPSBtc21faW9tbXVfbWFwLAogCS51bm1hcCA9IG1zbV9pb21tdV91bm1hcCwKKwkubWFwX3NnID0gZGVmYXVsdF9pb21tdV9tYXBfc2csCiAJLmlvdmFfdG9fcGh5cyA9IG1zbV9pb21tdV9pb3ZhX3RvX3BoeXMsCiAJLnBnc2l6ZV9iaXRtYXAgPSBNU01fSU9NTVVfUEdTSVpFUywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L29tYXAtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvb21hcC1pb21tdS5jCmluZGV4IDM2Mjc4ODcuLjE4MDAzYzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L29tYXAtaW9tbXUuYworKysgYi9kcml2ZXJzL2lvbW11L29tYXAtaW9tbXUuYwpAQCAtMTI4OCw2ICsxMjg4LDcgQEAKIAkuZGV0YWNoX2Rldgk9IG9tYXBfaW9tbXVfZGV0YWNoX2RldiwKIAkubWFwCQk9IG9tYXBfaW9tbXVfbWFwLAogCS51bm1hcAkJPSBvbWFwX2lvbW11X3VubWFwLAorCS5tYXBfc2cJCT0gZGVmYXVsdF9pb21tdV9tYXBfc2csCiAJLmlvdmFfdG9fcGh5cwk9IG9tYXBfaW9tbXVfaW92YV90b19waHlzLAogCS5hZGRfZGV2aWNlCT0gb21hcF9pb21tdV9hZGRfZGV2aWNlLAogCS5yZW1vdmVfZGV2aWNlCT0gb21hcF9pb21tdV9yZW1vdmVfZGV2aWNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9zaG1vYmlsZS1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9zaG1vYmlsZS1pb21tdS5jCmluZGV4IDEzMzNlNmZiLi5mMWIwMDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L3NobW9iaWxlLWlvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9zaG1vYmlsZS1pb21tdS5jCkBAIC0zNjEsNiArMzYxLDcgQEAKIAkuZGV0YWNoX2RldiA9IHNobW9iaWxlX2lvbW11X2RldGFjaF9kZXZpY2UsCiAJLm1hcCA9IHNobW9iaWxlX2lvbW11X21hcCwKIAkudW5tYXAgPSBzaG1vYmlsZV9pb21tdV91bm1hcCwKKwkubWFwX3NnID0gZGVmYXVsdF9pb21tdV9tYXBfc2csCiAJLmlvdmFfdG9fcGh5cyA9IHNobW9iaWxlX2lvbW11X2lvdmFfdG9fcGh5cywKIAkuYWRkX2RldmljZSA9IHNobW9iaWxlX2lvbW11X2FkZF9kZXZpY2UsCiAJLnBnc2l6ZV9iaXRtYXAgPSBTWl8xTSB8IFNaXzY0SyB8IFNaXzRLLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS90ZWdyYS1zbW11LmMgYi9kcml2ZXJzL2lvbW11L3RlZ3JhLXNtbXUuYwppbmRleCAzYWZkZjQzLi42ZTEzNGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L3RlZ3JhLXNtbXUuYworKysgYi9kcml2ZXJzL2lvbW11L3RlZ3JhLXNtbXUuYwpAQCAtMSwxMjk1ICsxLDczMiBAQAogLyoKLSAqIElPTU1VIEFQSSBmb3IgU01NVSBpbiBUZWdyYTMwCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEzLCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNkZWZpbmUgcHJfZm10KGZtdCkJIiVzKCk6ICIgZm10LCBfX2Z1bmNfXwotCiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfaW9tbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzb2MvdGVncmEvYWhiLmg+CisjaW5jbHVkZSA8c29jL3RlZ3JhL21jLmg+CiAKLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CitzdHJ1Y3QgdGVncmFfc21tdSB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotZW51bSBzbW11X2h3Z3JwIHsKLQlIV0dSUF9BRkksCi0JSFdHUlBfQVZQQywKLQlIV0dSUF9EQywKLQlIV0dSUF9EQ0IsCi0JSFdHUlBfRVBQLAotCUhXR1JQX0cyLAotCUhXR1JQX0hDLAotCUhXR1JQX0hEQSwKLQlIV0dSUF9JU1AsCi0JSFdHUlBfTVBFLAotCUhXR1JQX05WLAotCUhXR1JQX05WMiwKLQlIV0dSUF9QUENTLAotCUhXR1JQX1NBVEEsCi0JSFdHUlBfVkRFLAotCUhXR1JQX1ZJLAorCXN0cnVjdCB0ZWdyYV9tYyAqbWM7CisJY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc29jICpzb2M7CiAKLQlIV0dSUF9DT1VOVCwKKwl1bnNpZ25lZCBsb25nICphc2lkczsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAotCUhXR1JQX0VORCA9IH4wLAorCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLSNkZWZpbmUgSFdHX0FGSQkJKDEgPDwgSFdHUlBfQUZJKQotI2RlZmluZSBIV0dfQVZQQwkoMSA8PCBIV0dSUF9BVlBDKQotI2RlZmluZSBIV0dfREMJCSgxIDw8IEhXR1JQX0RDKQotI2RlZmluZSBIV0dfRENCCQkoMSA8PCBIV0dSUF9EQ0IpCi0jZGVmaW5lIEhXR19FUFAJCSgxIDw8IEhXR1JQX0VQUCkKLSNkZWZpbmUgSFdHX0cyCQkoMSA8PCBIV0dSUF9HMikKLSNkZWZpbmUgSFdHX0hDCQkoMSA8PCBIV0dSUF9IQykKLSNkZWZpbmUgSFdHX0hEQQkJKDEgPDwgSFdHUlBfSERBKQotI2RlZmluZSBIV0dfSVNQCQkoMSA8PCBIV0dSUF9JU1ApCi0jZGVmaW5lIEhXR19NUEUJCSgxIDw8IEhXR1JQX01QRSkKLSNkZWZpbmUgSFdHX05WCQkoMSA8PCBIV0dSUF9OVikKLSNkZWZpbmUgSFdHX05WMgkJKDEgPDwgSFdHUlBfTlYyKQotI2RlZmluZSBIV0dfUFBDUwkoMSA8PCBIV0dSUF9QUENTKQotI2RlZmluZSBIV0dfU0FUQQkoMSA8PCBIV0dSUF9TQVRBKQotI2RlZmluZSBIV0dfVkRFCQkoMSA8PCBIV0dSUF9WREUpCi0jZGVmaW5lIEhXR19WSQkJKDEgPDwgSFdHUlBfVkkpCi0KLS8qIGJpdG1hcCBvZiB0aGUgcGFnZSBzaXplcyBjdXJyZW50bHkgc3VwcG9ydGVkICovCi0jZGVmaW5lIFNNTVVfSU9NTVVfUEdTSVpFUwkoU1pfNEspCi0KLSNkZWZpbmUgU01NVV9DT05GSUcJCQkJMHgxMAotI2RlZmluZSBTTU1VX0NPTkZJR19ESVNBQkxFCQkJMAotI2RlZmluZSBTTU1VX0NPTkZJR19FTkFCTEUJCQkxCi0KLS8qIFJFVklTSVQ6IFRvIHN1cHBvcnQgbXVsdGlwbGUgTUNzICovCi1lbnVtIHsKLQlfTUMgPSAwLAorc3RydWN0IHRlZ3JhX3NtbXVfYXMgeworCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKKwlzdHJ1Y3QgdGVncmFfc21tdSAqc21tdTsKKwl1bnNpZ25lZCBpbnQgdXNlX2NvdW50OworCXN0cnVjdCBwYWdlICpjb3VudDsKKwlzdHJ1Y3QgcGFnZSAqcGQ7CisJdW5zaWduZWQgaWQ7CisJdTMyIGF0dHI7CiB9OwogCi1lbnVtIHsKLQlfVExCID0gMCwKLQlfUFRDLAotfTsKLQotI2RlZmluZSBTTU1VX0NBQ0hFX0NPTkZJR19CQVNFCQkJMHgxNAotI2RlZmluZSBfX1NNTVVfQ0FDSEVfQ09ORklHKG1jLCBjYWNoZSkJCShTTU1VX0NBQ0hFX0NPTkZJR19CQVNFICsgNCAqIGNhY2hlKQotI2RlZmluZSBTTU1VX0NBQ0hFX0NPTkZJRyhjYWNoZSkJCV9fU01NVV9DQUNIRV9DT05GSUcoX01DLCBjYWNoZSkKLQotI2RlZmluZSBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19TSElGVAkJMzEKLSNkZWZpbmUgU01NVV9DQUNIRV9DT05GSUdfU1RBVFNfRU5BQkxFCQkoMSA8PCBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19TSElGVCkKLSNkZWZpbmUgU01NVV9DQUNIRV9DT05GSUdfU1RBVFNfVEVTVF9TSElGVAkzMAotI2RlZmluZSBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19URVNUCQkoMSA8PCBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19URVNUX1NISUZUKQotCi0jZGVmaW5lIFNNTVVfVExCX0NPTkZJR19ISVRfVU5ERVJfTUlTU19fRU5BQkxFCSgxIDw8IDI5KQotI2RlZmluZSBTTU1VX1RMQl9DT05GSUdfQUNUSVZFX0xJTkVTX19WQUxVRQkweDEwCi0jZGVmaW5lIFNNTVVfVExCX0NPTkZJR19SRVNFVF9WQUwJCTB4MjAwMDAwMTAKLQotI2RlZmluZSBTTU1VX1BUQ19DT05GSUdfQ0FDSEVfX0VOQUJMRQkJKDEgPDwgMjkpCi0jZGVmaW5lIFNNTVVfUFRDX0NPTkZJR19JTkRFWF9NQVBfX1BBVFRFUk4JMHgzZgotI2RlZmluZSBTTU1VX1BUQ19DT05GSUdfUkVTRVRfVkFMCQkweDIwMDAwMDNmCi0KLSNkZWZpbmUgU01NVV9QVEJfQVNJRAkJCQkweDFjCi0jZGVmaW5lIFNNTVVfUFRCX0FTSURfQ1VSUkVOVF9TSElGVAkJMAotCi0jZGVmaW5lIFNNTVVfUFRCX0RBVEEJCQkJMHgyMAotI2RlZmluZSBTTU1VX1BUQl9EQVRBX1JFU0VUX1ZBTAkJCTAKLSNkZWZpbmUgU01NVV9QVEJfREFUQV9BU0lEX05PTlNFQ1VSRV9TSElGVAkyOQotI2RlZmluZSBTTU1VX1BUQl9EQVRBX0FTSURfV1JJVEFCTEVfU0hJRlQJMzAKLSNkZWZpbmUgU01NVV9QVEJfREFUQV9BU0lEX1JFQURBQkxFX1NISUZUCTMxCi0KLSNkZWZpbmUgU01NVV9UTEJfRkxVU0gJCQkJMHgzMAotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9BTEwJCTAKLSNkZWZpbmUgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfU0VDVElPTgkJMgotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9HUk9VUAkJMwotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9BU0lEX1NISUZUCQkyOQotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX0RJU0FCTEUJMAotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX0VOQUJMRQkxCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfU0hJRlQJCTMxCi0KLSNkZWZpbmUgU01NVV9QVENfRkxVU0gJCQkJMHgzNAotI2RlZmluZSBTTU1VX1BUQ19GTFVTSF9UWVBFX0FMTAkJCTAKLSNkZWZpbmUgU01NVV9QVENfRkxVU0hfVFlQRV9BRFIJCQkxCi0jZGVmaW5lIFNNTVVfUFRDX0ZMVVNIX0FEUl9TSElGVAkJNAotCi0jZGVmaW5lIFNNTVVfQVNJRF9TRUNVUklUWQkJCTB4MzgKLQotI2RlZmluZSBTTU1VX1NUQVRTX0NBQ0hFX0NPVU5UX0JBU0UJCTB4MWYwCi0KLSNkZWZpbmUgU01NVV9TVEFUU19DQUNIRV9DT1VOVChtYywgY2FjaGUsIGhpdG1pc3MpCQlcCi0JKFNNTVVfU1RBVFNfQ0FDSEVfQ09VTlRfQkFTRSArIDggKiBjYWNoZSArIDQgKiBoaXRtaXNzKQotCi0jZGVmaW5lIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzAJCTB4MjI4Ci0jZGVmaW5lIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzEJCTB4MjJjCi0jZGVmaW5lIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzIJCTB4MjMwCi0KLSNkZWZpbmUgU01NVV9BRklfQVNJRAkweDIzOCAgIC8qIFBDSUUgKi8KLSNkZWZpbmUgU01NVV9BVlBDX0FTSUQJMHgyM2MgICAvKiBBVlAgKi8KLSNkZWZpbmUgU01NVV9EQ19BU0lECTB4MjQwICAgLyogRGlzcGxheSBjb250cm9sbGVyICovCi0jZGVmaW5lIFNNTVVfRENCX0FTSUQJMHgyNDQgICAvKiBEaXNwbGF5IGNvbnRyb2xsZXIgQiAqLwotI2RlZmluZSBTTU1VX0VQUF9BU0lECTB4MjQ4ICAgLyogRW5jb2RlciBwcmUtcHJvY2Vzc29yICovCi0jZGVmaW5lIFNNTVVfRzJfQVNJRAkweDI0YyAgIC8qIDJEIGVuZ2luZSAqLwotI2RlZmluZSBTTU1VX0hDX0FTSUQJMHgyNTAgICAvKiBIb3N0MXggKi8KLSNkZWZpbmUgU01NVV9IREFfQVNJRAkweDI1NCAgIC8qIEhpZ2gtZGVmIGF1ZGlvICovCi0jZGVmaW5lIFNNTVVfSVNQX0FTSUQJMHgyNTggICAvKiBJbWFnZSBzaWduYWwgcHJvY2Vzc29yICovCi0jZGVmaW5lIFNNTVVfTVBFX0FTSUQJMHgyNjQgICAvKiBNUEVHIGVuY29kZXIgKi8KLSNkZWZpbmUgU01NVV9OVl9BU0lECTB4MjY4ICAgLyogKDNEKSAqLwotI2RlZmluZSBTTU1VX05WMl9BU0lECTB4MjZjICAgLyogKDNEKSAqLwotI2RlZmluZSBTTU1VX1BQQ1NfQVNJRAkweDI3MCAgIC8qIEFIQiAqLwotI2RlZmluZSBTTU1VX1NBVEFfQVNJRAkweDI3OCAgIC8qIFNBVEEgKi8KLSNkZWZpbmUgU01NVV9WREVfQVNJRAkweDI3YyAgIC8qIFZpZGVvIGRlY29kZXIgKi8KLSNkZWZpbmUgU01NVV9WSV9BU0lECTB4MjgwICAgLyogVmlkZW8gaW5wdXQgKi8KLQotI2RlZmluZSBTTU1VX1BERV9ORVhUX1NISUZUCQkyOAotCi0jZGVmaW5lIFNNTVVfVExCX0ZMVVNIX1ZBX1NFQ1RJT05fX01BU0sJCTB4ZmZjMDAwMDAKLSNkZWZpbmUgU01NVV9UTEJfRkxVU0hfVkFfU0VDVElPTl9fU0hJRlQJMTIgLyogcmlnaHQgc2hpZnQgKi8KLSNkZWZpbmUgU01NVV9UTEJfRkxVU0hfVkFfR1JPVVBfX01BU0sJCTB4ZmZmZmMwMDAKLSNkZWZpbmUgU01NVV9UTEJfRkxVU0hfVkFfR1JPVVBfX1NISUZUCQkxMiAvKiByaWdodCBzaGlmdCAqLwotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9WQShpb3ZhLCB3aGljaCkJXAotCSgoKChpb3ZhKSAmIFNNTVVfVExCX0ZMVVNIX1ZBXyMjd2hpY2gjI19fTUFTSykgPj4gXAotCQlTTU1VX1RMQl9GTFVTSF9WQV8jI3doaWNoIyNfX1NISUZUKSB8CVwKLQlTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF8jI3doaWNoKQotI2RlZmluZSBTTU1VX1BUQl9BU0lEX0NVUihuKQlcCi0JCSgobikgPDwgU01NVV9QVEJfQVNJRF9DVVJSRU5UX1NISUZUKQotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX2Rpc2FibGUJCVwKLQkJKFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfRElTQUJMRSA8PAlcCi0JCQlTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX1NISUZUKQotI2RlZmluZSBTTU1VX1RMQl9GTFVTSF9BU0lEX01BVENIX19FTkFCTEUJCVwKLQkJKFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfRU5BQkxFIDw8CVwKLQkJCVNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfU0hJRlQpCi0KLSNkZWZpbmUgU01NVV9QQUdFX1NISUZUIDEyCi0jZGVmaW5lIFNNTVVfUEFHRV9TSVpFCSgxIDw8IFNNTVVfUEFHRV9TSElGVCkKLSNkZWZpbmUgU01NVV9QQUdFX01BU0sJKCgxIDw8IFNNTVVfUEFHRV9TSElGVCkgLSAxKQotCi0jZGVmaW5lIFNNTVVfUERJUl9DT1VOVAkxMDI0Ci0jZGVmaW5lIFNNTVVfUERJUl9TSVpFCShzaXplb2YodW5zaWduZWQgbG9uZykgKiBTTU1VX1BESVJfQ09VTlQpCi0jZGVmaW5lIFNNTVVfUFRCTF9DT1VOVAkxMDI0Ci0jZGVmaW5lIFNNTVVfUFRCTF9TSVpFCShzaXplb2YodW5zaWduZWQgbG9uZykgKiBTTU1VX1BUQkxfQ09VTlQpCi0jZGVmaW5lIFNNTVVfUERJUl9TSElGVAkxMgotI2RlZmluZSBTTU1VX1BERV9TSElGVAkxMgotI2RlZmluZSBTTU1VX1BURV9TSElGVAkxMgotI2RlZmluZSBTTU1VX1BGTl9NQVNLCTB4MDAwZmZmZmYKLQotI2RlZmluZSBTTU1VX0FERFJfVE9fUEZOKGFkZHIpCSgoYWRkcikgPj4gMTIpCi0jZGVmaW5lIFNNTVVfQUREUl9UT19QRE4oYWRkcikJKChhZGRyKSA+PiAyMikKLSNkZWZpbmUgU01NVV9QRE5fVE9fQUREUihwZG4pCSgocGRuKSA8PCAyMikKLQotI2RlZmluZSBfUkVBREFCTEUJKDEgPDwgU01NVV9QVEJfREFUQV9BU0lEX1JFQURBQkxFX1NISUZUKQotI2RlZmluZSBfV1JJVEFCTEUJKDEgPDwgU01NVV9QVEJfREFUQV9BU0lEX1dSSVRBQkxFX1NISUZUKQotI2RlZmluZSBfTk9OU0VDVVJFCSgxIDw8IFNNTVVfUFRCX0RBVEFfQVNJRF9OT05TRUNVUkVfU0hJRlQpCi0jZGVmaW5lIF9QREVfTkVYVAkoMSA8PCBTTU1VX1BERV9ORVhUX1NISUZUKQotI2RlZmluZSBfTUFTS19BVFRSCShfUkVBREFCTEUgfCBfV1JJVEFCTEUgfCBfTk9OU0VDVVJFKQotCi0jZGVmaW5lIF9QRElSX0FUVFIJKF9SRUFEQUJMRSB8IF9XUklUQUJMRSB8IF9OT05TRUNVUkUpCi0KLSNkZWZpbmUgX1BERV9BVFRSCShfUkVBREFCTEUgfCBfV1JJVEFCTEUgfCBfTk9OU0VDVVJFKQotI2RlZmluZSBfUERFX0FUVFJfTgkoX1BERV9BVFRSIHwgX1BERV9ORVhUKQotI2RlZmluZSBfUERFX1ZBQ0FOVChwZG4pCSgoKHBkbikgPDwgMTApIHwgX1BERV9BVFRSKQotCi0jZGVmaW5lIF9QVEVfQVRUUgkoX1JFQURBQkxFIHwgX1dSSVRBQkxFIHwgX05PTlNFQ1VSRSkKLSNkZWZpbmUgX1BURV9WQUNBTlQoYWRkcikJKCgoYWRkcikgPj4gU01NVV9QQUdFX1NISUZUKSB8IF9QVEVfQVRUUikKLQotI2RlZmluZSBTTU1VX01LX1BESVIocGFnZSwgYXR0cikJXAotCQkoKHBhZ2VfdG9fcGh5cyhwYWdlKSA+PiBTTU1VX1BESVJfU0hJRlQpIHwgKGF0dHIpKQotI2RlZmluZSBTTU1VX01LX1BERShwYWdlLCBhdHRyKQkJXAotCQkodW5zaWduZWQgbG9uZykoKHBhZ2VfdG9fcGh5cyhwYWdlKSA+PiBTTU1VX1BERV9TSElGVCkgfCAoYXR0cikpCi0jZGVmaW5lIFNNTVVfRVhfUFRCTF9QQUdFKHBkZSkJCVwKLQkJcGZuX3RvX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHBkZSkgJiBTTU1VX1BGTl9NQVNLKQotI2RlZmluZSBTTU1VX1BGTl9UT19QVEUocGZuLCBhdHRyKQkodW5zaWduZWQgbG9uZykoKHBmbikgfCAoYXR0cikpCi0KLSNkZWZpbmUgU01NVV9BU0lEX0VOQUJMRShhc2lkKQkoKGFzaWQpIHwgKDEgPDwgMzEpKQotI2RlZmluZSBTTU1VX0FTSURfRElTQUJMRQkwCi0jZGVmaW5lIFNNTVVfQVNJRF9BU0lEKG4pCSgobikgJiB+U01NVV9BU0lEX0VOQUJMRSgwKSkKLQotI2RlZmluZSBOVU1fU01NVV9SRUdfQkFOS1MJMwotCi0jZGVmaW5lIHNtbXVfY2xpZW50X2VuYWJsZV9od2dycChjLCBtKQlzbW11X2NsaWVudF9zZXRfaHdncnAoYywgbSwgMSkKLSNkZWZpbmUgc21tdV9jbGllbnRfZGlzYWJsZV9od2dycChjKQlzbW11X2NsaWVudF9zZXRfaHdncnAoYywgMCwgMCkKLSNkZWZpbmUgX19zbW11X2NsaWVudF9lbmFibGVfaHdncnAoYywgbSkgX19zbW11X2NsaWVudF9zZXRfaHdncnAoYywgbSwgMSkKLSNkZWZpbmUgX19zbW11X2NsaWVudF9kaXNhYmxlX2h3Z3JwKGMpCV9fc21tdV9jbGllbnRfc2V0X2h3Z3JwKGMsIDAsIDApCi0KLSNkZWZpbmUgSFdHUlBfSU5JVChjbGllbnQpIFtIV0dSUF8jI2NsaWVudF0gPSBTTU1VXyMjY2xpZW50IyNfQVNJRAotCi1zdGF0aWMgY29uc3QgdTMyIHNtbXVfaHdncnBfYXNpZF9yZWdbXSA9IHsKLQlIV0dSUF9JTklUKEFGSSksCi0JSFdHUlBfSU5JVChBVlBDKSwKLQlIV0dSUF9JTklUKERDKSwKLQlIV0dSUF9JTklUKERDQiksCi0JSFdHUlBfSU5JVChFUFApLAotCUhXR1JQX0lOSVQoRzIpLAotCUhXR1JQX0lOSVQoSEMpLAotCUhXR1JQX0lOSVQoSERBKSwKLQlIV0dSUF9JTklUKElTUCksCi0JSFdHUlBfSU5JVChNUEUpLAotCUhXR1JQX0lOSVQoTlYpLAotCUhXR1JQX0lOSVQoTlYyKSwKLQlIV0dSUF9JTklUKFBQQ1MpLAotCUhXR1JQX0lOSVQoU0FUQSksCi0JSFdHUlBfSU5JVChWREUpLAotCUhXR1JQX0lOSVQoVkkpLAotfTsKLSNkZWZpbmUgSFdHUlBfQVNJRF9SRUcoeCkgKHNtbXVfaHdncnBfYXNpZF9yZWdbeF0pCi0KLS8qCi0gKiBQZXIgY2xpZW50IGZvciBhZGRyZXNzIHNwYWNlCi0gKi8KLXN0cnVjdCBzbW11X2NsaWVudCB7Ci0Jc3RydWN0IGRldmljZQkJKmRldjsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0Jc3RydWN0IHNtbXVfYXMJCSphczsKLQl1MzIJCQlod2dycDsKLX07Ci0KLS8qCi0gKiBQZXIgYWRkcmVzcyBzcGFjZQotICovCi1zdHJ1Y3Qgc21tdV9hcyB7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlCSpzbW11OwkvKiBiYWNrIHBvaW50ZXIgdG8gY29udGFpbmVyICovCi0JdW5zaWduZWQgaW50CQlhc2lkOwotCXNwaW5sb2NrX3QJCWxvY2s7CS8qIGZvciBwYWdldGFibGUgKi8KLQlzdHJ1Y3QgcGFnZQkJKnBkaXJfcGFnZTsKLQl1bnNpZ25lZCBsb25nCQlwZGlyX2F0dHI7Ci0JdW5zaWduZWQgbG9uZwkJcGRlX2F0dHI7Ci0JdW5zaWduZWQgbG9uZwkJcHRlX2F0dHI7Ci0JdW5zaWduZWQgaW50CQkqcHRlX2NvdW50OwotCi0Jc3RydWN0IGxpc3RfaGVhZAljbGllbnQ7Ci0Jc3BpbmxvY2tfdAkJY2xpZW50X2xvY2s7IC8qIGZvciBjbGllbnQgbGlzdCAqLwotfTsKLQotc3RydWN0IHNtbXVfZGVidWdmc19pbmZvIHsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXU7Ci0JaW50IG1jOwotCWludCBjYWNoZTsKLX07Ci0KLS8qCi0gKiBQZXIgU01NVSBkZXZpY2UgLSBJT01NVSBkZXZpY2UKLSAqLwotc3RydWN0IHNtbXVfZGV2aWNlIHsKLQl2b2lkIF9faW9tZW0JKnJlZ2Jhc2U7CS8qIHJlZ2lzdGVyIG9mZnNldCBiYXNlICovCi0Jdm9pZCBfX2lvbWVtCSoqcmVnczsJCS8qIHJlZ2lzdGVyIGJsb2NrIHN0YXJ0IGFkZHJlc3MgYXJyYXkgKi8KLQl2b2lkIF9faW9tZW0JKipyZWdlOwkJLyogcmVnaXN0ZXIgYmxvY2sgZW5kIGFkZHJlc3MgYXJyYXkgKi8KLQlpbnQJCW5yZWdzOwkJLyogbnVtYmVyIG9mIHJlZ2lzdGVyIGJsb2NrcyAqLwotCi0JdW5zaWduZWQgbG9uZwlpb3ZtbV9iYXNlOwkvKiByZW1hcHBhYmxlIGJhc2UgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcJcGFnZV9jb3VudDsJLyogdG90YWwgcmVtYXBwYWJsZSBzaXplICovCi0Jc3BpbmxvY2tfdAlsb2NrOwotCWNoYXIJCSpuYW1lOwotCXN0cnVjdCBkZXZpY2UJKmRldjsKLQlzdHJ1Y3QgcGFnZSAqYXZwX3ZlY3Rvcl9wYWdlOwkvKiBkdW1teSBwYWdlIHNoYXJlZCBieSBhbGwgQVMncyAqLwotCi0JLyoKLQkgKiBSZWdpc3RlciBpbWFnZSBzYXZlcnMgZm9yIHN1c3BlbmQvcmVzdW1lCi0JICovCi0JdW5zaWduZWQgbG9uZyB0cmFuc2xhdGlvbl9lbmFibGVfMDsKLQl1bnNpZ25lZCBsb25nIHRyYW5zbGF0aW9uX2VuYWJsZV8xOwotCXVuc2lnbmVkIGxvbmcgdHJhbnNsYXRpb25fZW5hYmxlXzI7Ci0JdW5zaWduZWQgbG9uZyBhc2lkX3NlY3VyaXR5OwotCi0Jc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290OwotCXN0cnVjdCBzbW11X2RlYnVnZnNfaW5mbyAqZGVidWdmc19pbmZvOwotCi0Jc3RydWN0IGRldmljZV9ub2RlICphaGI7Ci0KLQlpbnQJCW51bV9hczsKLQlzdHJ1Y3Qgc21tdV9hcwlhc1swXTsJCS8qIFJ1bi10aW1lIGFsbG9jYXRlZCBhcnJheSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBzbW11X2RldmljZSAqc21tdV9oYW5kbGU7IC8qIHVuaXF1ZSBmb3IgYSBzeXN0ZW0gKi8KLQotLyoKLSAqCVNNTVUgcmVnaXN0ZXIgYWNjZXNzb3JzCi0gKi8KLXN0YXRpYyBib29sIGlubGluZSBzbW11X3ZhbGlkX3JlZyhzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUsCi0JCQkJICB2b2lkIF9faW9tZW0gKmFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgc21tdV93cml0ZWwoc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsIHUzMiB2YWx1ZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzbW11LT5ucmVnczsgaSsrKSB7Ci0JCWlmIChhZGRyIDwgc21tdS0+cmVnc1tpXSkKLQkJCWJyZWFrOwotCQlpZiAoYWRkciA8PSBzbW11LT5yZWdlW2ldKQotCQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOworCXdyaXRlbCh2YWx1ZSwgc21tdS0+cmVncyArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIHNtbXVfcmVhZChzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUsIHNpemVfdCBvZmZzKQorc3RhdGljIGlubGluZSB1MzIgc21tdV9yZWFkbChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gc21tdS0+cmVnYmFzZSArIG9mZnM7Ci0KLQlCVUdfT04oIXNtbXVfdmFsaWRfcmVnKHNtbXUsIGFkZHIpKTsKLQotCXJldHVybiByZWFkbChhZGRyKTsKKwlyZXR1cm4gcmVhZGwoc21tdS0+cmVncyArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbW11X3dyaXRlKHN0cnVjdCBzbW11X2RldmljZSAqc21tdSwgdTMyIHZhbCwgc2l6ZV90IG9mZnMpCisjZGVmaW5lIFNNTVVfQ09ORklHIDB4MDEwCisjZGVmaW5lICBTTU1VX0NPTkZJR19FTkFCTEUgKDEgPDwgMCkKKworI2RlZmluZSBTTU1VX1RMQl9DT05GSUcgMHgxNAorI2RlZmluZSAgU01NVV9UTEJfQ09ORklHX0hJVF9VTkRFUl9NSVNTICgxIDw8IDI5KQorI2RlZmluZSAgU01NVV9UTEJfQ09ORklHX1JPVU5EX1JPQklOX0FSQklUUkFUSU9OICgxIDw8IDI4KQorI2RlZmluZSAgU01NVV9UTEJfQ09ORklHX0FDVElWRV9MSU5FUyh4KSAoKHgpICYgMHgzZikKKworI2RlZmluZSBTTU1VX1BUQ19DT05GSUcgMHgxOAorI2RlZmluZSAgU01NVV9QVENfQ09ORklHX0VOQUJMRSAoMSA8PCAyOSkKKyNkZWZpbmUgIFNNTVVfUFRDX0NPTkZJR19SRVFfTElNSVQoeCkgKCgoeCkgJiAweDBmKSA8PCAyNCkKKyNkZWZpbmUgIFNNTVVfUFRDX0NPTkZJR19JTkRFWF9NQVAoeCkgKCh4KSAmIDB4M2YpCisKKyNkZWZpbmUgU01NVV9QVEJfQVNJRCAweDAxYworI2RlZmluZSAgU01NVV9QVEJfQVNJRF9WQUxVRSh4KSAoKHgpICYgMHg3ZikKKworI2RlZmluZSBTTU1VX1BUQl9EQVRBIDB4MDIwCisjZGVmaW5lICBTTU1VX1BUQl9EQVRBX1ZBTFVFKHBhZ2UsIGF0dHIpIChwYWdlX3RvX3BoeXMocGFnZSkgPj4gMTIgfCAoYXR0cikpCisKKyNkZWZpbmUgU01NVV9NS19QREUocGFnZSwgYXR0cikgKHBhZ2VfdG9fcGh5cyhwYWdlKSA+PiBTTU1VX1BURV9TSElGVCB8IChhdHRyKSkKKworI2RlZmluZSBTTU1VX1RMQl9GTFVTSCAweDAzMAorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfQUxMICAgICAoMCA8PCAwKQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfU0VDVElPTiAoMiA8PCAwKQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfR1JPVVAgICAoMyA8PCAwKQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfQVNJRCh4KSAgICAgICAgICAoKCh4KSAmIDB4N2YpIDw8IDI0KQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfVkFfU0VDVElPTihhZGRyKSAoKCgoYWRkcikgJiAweGZmYzAwMDAwKSA+PiAxMikgfCBcCisJCQkJCSAgU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfU0VDVElPTikKKyNkZWZpbmUgIFNNTVVfVExCX0ZMVVNIX1ZBX0dST1VQKGFkZHIpICAgKCgoKGFkZHIpICYgMHhmZmZmYzAwMCkgPj4gMTIpIHwgXAorCQkJCQkgIFNNTVVfVExCX0ZMVVNIX1ZBX01BVENIX0dST1VQKQorI2RlZmluZSAgU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSCAgICAgICAoMSA8PCAzMSkKKworI2RlZmluZSBTTU1VX1BUQ19GTFVTSCAweDAzNAorI2RlZmluZSAgU01NVV9QVENfRkxVU0hfVFlQRV9BTEwgKDAgPDwgMCkKKyNkZWZpbmUgIFNNTVVfUFRDX0ZMVVNIX1RZUEVfQURSICgxIDw8IDApCisKKyNkZWZpbmUgU01NVV9QVENfRkxVU0hfSEkgMHg5YjgKKyNkZWZpbmUgIFNNTVVfUFRDX0ZMVVNIX0hJX01BU0sgMHgzCisKKy8qIHBlci1TV0dST1VQIFNNTVVfKl9BU0lEIHJlZ2lzdGVyICovCisjZGVmaW5lIFNNTVVfQVNJRF9FTkFCTEUgKDEgPDwgMzEpCisjZGVmaW5lIFNNTVVfQVNJRF9NQVNLIDB4N2YKKyNkZWZpbmUgU01NVV9BU0lEX1ZBTFVFKHgpICgoeCkgJiBTTU1VX0FTSURfTUFTSykKKworLyogcGFnZSB0YWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBTTU1VX05VTV9QREUgMTAyNAorI2RlZmluZSBTTU1VX05VTV9QVEUgMTAyNAorCisjZGVmaW5lIFNNTVVfU0laRV9QRCAoU01NVV9OVU1fUERFICogNCkKKyNkZWZpbmUgU01NVV9TSVpFX1BUIChTTU1VX05VTV9QVEUgKiA0KQorCisjZGVmaW5lIFNNTVVfUERFX1NISUZUIDIyCisjZGVmaW5lIFNNTVVfUFRFX1NISUZUIDEyCisKKyNkZWZpbmUgU01NVV9QRk5fTUFTSyAweDAwMGZmZmZmCisKKyNkZWZpbmUgU01NVV9QRF9SRUFEQUJMRQkoMSA8PCAzMSkKKyNkZWZpbmUgU01NVV9QRF9XUklUQUJMRQkoMSA8PCAzMCkKKyNkZWZpbmUgU01NVV9QRF9OT05TRUNVUkUJKDEgPDwgMjkpCisKKyNkZWZpbmUgU01NVV9QREVfUkVBREFCTEUJKDEgPDwgMzEpCisjZGVmaW5lIFNNTVVfUERFX1dSSVRBQkxFCSgxIDw8IDMwKQorI2RlZmluZSBTTU1VX1BERV9OT05TRUNVUkUJKDEgPDwgMjkpCisjZGVmaW5lIFNNTVVfUERFX05FWFQJCSgxIDw8IDI4KQorCisjZGVmaW5lIFNNTVVfUFRFX1JFQURBQkxFCSgxIDw8IDMxKQorI2RlZmluZSBTTU1VX1BURV9XUklUQUJMRQkoMSA8PCAzMCkKKyNkZWZpbmUgU01NVV9QVEVfTk9OU0VDVVJFCSgxIDw8IDI5KQorCisjZGVmaW5lIFNNTVVfUERFX0FUVFIJCShTTU1VX1BERV9SRUFEQUJMRSB8IFNNTVVfUERFX1dSSVRBQkxFIHwgXAorCQkJCSBTTU1VX1BERV9OT05TRUNVUkUpCisjZGVmaW5lIFNNTVVfUFRFX0FUVFIJCShTTU1VX1BURV9SRUFEQUJMRSB8IFNNTVVfUFRFX1dSSVRBQkxFIHwgXAorCQkJCSBTTU1VX1BURV9OT05TRUNVUkUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbW11X2ZsdXNoX3B0YyhzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzbW11LT5yZWdiYXNlICsgb2ZmczsKKwlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZSA/IHBhZ2VfdG9fcGh5cyhwYWdlKSA6IDA7CisJdTMyIHZhbHVlOwogCi0JQlVHX09OKCFzbW11X3ZhbGlkX3JlZyhzbW11LCBhZGRyKSk7CisJaWYgKHBhZ2UpIHsKKwkJb2Zmc2V0ICY9IH4oc21tdS0+bWMtPnNvYy0+YXRvbV9zaXplIC0gMSk7CiAKLQl3cml0ZWwodmFsLCBhZGRyKTsKLX0KLQotI2RlZmluZSBWQV9QQUdFX1RPX1BBKHZhLCBwYWdlKQlcCi0JKHBhZ2VfdG9fcGh5cyhwYWdlKSArICgodW5zaWduZWQgbG9uZykodmEpICYgflBBR0VfTUFTSykpCi0KLSNkZWZpbmUgRkxVU0hfQ1BVX0RDQUNIRSh2YSwgcGFnZSwgc2l6ZSkJXAotCWRvIHsJXAotCQl1bnNpZ25lZCBsb25nIF9wYV8gPSBWQV9QQUdFX1RPX1BBKHZhLCBwYWdlKTsJCVwKLQkJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKCh2b2lkICopKHZhKSwgKHNpemVfdCkoc2l6ZSkpOwlcCi0JCW91dGVyX2ZsdXNoX3JhbmdlKF9wYV8sIF9wYV8rKHNpemVfdCkoc2l6ZSkpOwkJXAotCX0gd2hpbGUgKDApCi0KLS8qCi0gKiBBbnkgaW50ZXJhY3Rpb24gYmV0d2VlbiBhbnkgYmxvY2sgb24gUFBTQiBhbmQgYSBibG9jayBvbiBBUEIgb3IgQUhCCi0gKiBtdXN0IGhhdmUgdGhlc2UgcmVhZC1iYWNrIGJhcnJpZXJzIHRvIGVuc3VyZSB0aGUgQVBCL0FIQiBidXMKLSAqIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlIGJlZm9yZSBpbml0aWF0aW5nIGFjdGl2aXR5IG9uIHRoZSBQUFNCCi0gKiBibG9jay4KLSAqLwotI2RlZmluZSBGTFVTSF9TTU1VX1JFR1Moc21tdSkJc21tdV9yZWFkKHNtbXUsIFNNTVVfQ09ORklHKQotCi0jZGVmaW5lIHNtbXVfY2xpZW50X2h3Z3JwKGMpICh1MzIpKChjKS0+ZGV2LT5wbGF0Zm9ybV9kYXRhKQotCi1zdGF0aWMgaW50IF9fc21tdV9jbGllbnRfc2V0X2h3Z3JwKHN0cnVjdCBzbW11X2NsaWVudCAqYywKLQkJCQkgICB1bnNpZ25lZCBsb25nIG1hcCwgaW50IG9uKQotewotCWludCBpOwotCXN0cnVjdCBzbW11X2FzICphcyA9IGMtPmFzOwotCXUzMiB2YWwsIG9mZnMsIG1hc2sgPSBTTU1VX0FTSURfRU5BQkxFKGFzLT5hc2lkKTsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBhcy0+c21tdTsKLQotCVdBUk5fT04oIW9uICYmIG1hcCk7Ci0JaWYgKG9uICYmICFtYXApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghb24pCi0JCW1hcCA9IHNtbXVfY2xpZW50X2h3Z3JwKGMpOwotCi0JZm9yX2VhY2hfc2V0X2JpdChpLCAmbWFwLCBIV0dSUF9DT1VOVCkgewotCQlvZmZzID0gSFdHUlBfQVNJRF9SRUcoaSk7Ci0JCXZhbCA9IHNtbXVfcmVhZChzbW11LCBvZmZzKTsKLQkJaWYgKG9uKSB7Ci0JCQlpZiAoV0FSTl9PTih2YWwgJiBtYXNrKSkKLQkJCQlnb3RvIGVycl9od19idXN5OwotCQkJdmFsIHw9IG1hc2s7Ci0JCX0gZWxzZSB7Ci0JCQlXQVJOX09OKCh2YWwgJiBtYXNrKSA9PSBtYXNrKTsKLQkJCXZhbCAmPSB+bWFzazsKLQkJfQotCQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgb2Zmcyk7Ci0JfQotCUZMVVNIX1NNTVVfUkVHUyhzbW11KTsKLQljLT5od2dycCA9IG1hcDsKLQlyZXR1cm4gMDsKLQotZXJyX2h3X2J1c3k6Ci0JZm9yX2VhY2hfc2V0X2JpdChpLCAmbWFwLCBIV0dSUF9DT1VOVCkgewotCQlvZmZzID0gSFdHUlBfQVNJRF9SRUcoaSk7Ci0JCXZhbCA9IHNtbXVfcmVhZChzbW11LCBvZmZzKTsKLQkJdmFsICY9IH5tYXNrOwotCQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgb2Zmcyk7Ci0JfQotCXJldHVybiAtRUJVU1k7Ci19Ci0KLXN0YXRpYyBpbnQgc21tdV9jbGllbnRfc2V0X2h3Z3JwKHN0cnVjdCBzbW11X2NsaWVudCAqYywgdTMyIG1hcCwgaW50IG9uKQotewotCXUzMiB2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc21tdV9hcyAqYXMgPSBjLT5hczsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBhcy0+c21tdTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzbW11LT5sb2NrLCBmbGFncyk7Ci0JdmFsID0gX19zbW11X2NsaWVudF9zZXRfaHdncnAoYywgbWFwLCBvbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21tdS0+bG9jaywgZmxhZ3MpOwotCXJldHVybiB2YWw7Ci19Ci0KLS8qCi0gKiBGbHVzaCBhbGwgVExCIGVudHJpZXMgYW5kIGFsbCBQVEMgZW50cmllcwotICogQ2FsbGVyIG11c3QgbG9jayBzbW11Ci0gKi8KLXN0YXRpYyB2b2lkIHNtbXVfZmx1c2hfcmVncyhzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUsIGludCBlbmFibGUpCi17Ci0JdTMyIHZhbDsKLQotCXNtbXVfd3JpdGUoc21tdSwgU01NVV9QVENfRkxVU0hfVFlQRV9BTEwsIFNNTVVfUFRDX0ZMVVNIKTsKLQlGTFVTSF9TTU1VX1JFR1Moc21tdSk7Ci0JdmFsID0gU01NVV9UTEJfRkxVU0hfVkFfTUFUQ0hfQUxMIHwKLQkJU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSF9kaXNhYmxlOwotCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBTTU1VX1RMQl9GTFVTSCk7Ci0KLQlpZiAoZW5hYmxlKQotCQlzbW11X3dyaXRlKHNtbXUsIFNNTVVfQ09ORklHX0VOQUJMRSwgU01NVV9DT05GSUcpOwotCUZMVVNIX1NNTVVfUkVHUyhzbW11KTsKLX0KLQotc3RhdGljIGludCBzbW11X3NldHVwX3JlZ3Moc3RydWN0IHNtbXVfZGV2aWNlICpzbW11KQotewotCWludCBpOwotCXUzMiB2YWw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc21tdS0+bnVtX2FzOyBpKyspIHsKLQkJc3RydWN0IHNtbXVfYXMgKmFzID0gJnNtbXUtPmFzW2ldOwotCQlzdHJ1Y3Qgc21tdV9jbGllbnQgKmM7Ci0KLQkJc21tdV93cml0ZShzbW11LCBTTU1VX1BUQl9BU0lEX0NVUihhcy0+YXNpZCksIFNNTVVfUFRCX0FTSUQpOwotCQl2YWwgPSBhcy0+cGRpcl9wYWdlID8KLQkJCVNNTVVfTUtfUERJUihhcy0+cGRpcl9wYWdlLCBhcy0+cGRpcl9hdHRyKSA6Ci0JCQlTTU1VX1BUQl9EQVRBX1JFU0VUX1ZBTDsKLQkJc21tdV93cml0ZShzbW11LCB2YWwsIFNNTVVfUFRCX0RBVEEpOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmFzLT5jbGllbnQsIGxpc3QpCi0JCQlfX3NtbXVfY2xpZW50X3NldF9od2dycChjLCBjLT5od2dycCwgMSk7Ci0JfQotCi0Jc21tdV93cml0ZShzbW11LCBzbW11LT50cmFuc2xhdGlvbl9lbmFibGVfMCwgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMCk7Ci0Jc21tdV93cml0ZShzbW11LCBzbW11LT50cmFuc2xhdGlvbl9lbmFibGVfMSwgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMSk7Ci0Jc21tdV93cml0ZShzbW11LCBzbW11LT50cmFuc2xhdGlvbl9lbmFibGVfMiwgU01NVV9UUkFOU0xBVElPTl9FTkFCTEVfMik7Ci0Jc21tdV93cml0ZShzbW11LCBzbW11LT5hc2lkX3NlY3VyaXR5LCBTTU1VX0FTSURfU0VDVVJJVFkpOwotCXNtbXVfd3JpdGUoc21tdSwgU01NVV9UTEJfQ09ORklHX1JFU0VUX1ZBTCwgU01NVV9DQUNIRV9DT05GSUcoX1RMQikpOwotCXNtbXVfd3JpdGUoc21tdSwgU01NVV9QVENfQ09ORklHX1JFU0VUX1ZBTCwgU01NVV9DQUNIRV9DT05GSUcoX1BUQykpOwotCi0Jc21tdV9mbHVzaF9yZWdzKHNtbXUsIDEpOwotCi0JcmV0dXJuIHRlZ3JhX2FoYl9lbmFibGVfc21tdShzbW11LT5haGIpOwotfQotCi1zdGF0aWMgdm9pZCBmbHVzaF9wdGNfYW5kX3RsYihzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUsCi0JCSAgICAgIHN0cnVjdCBzbW11X2FzICphcywgZG1hX2FkZHJfdCBpb3ZhLAotCQkgICAgICB1bnNpZ25lZCBsb25nICpwdGUsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgaXNfcGRlKQotewotCXUzMiB2YWw7Ci0JdW5zaWduZWQgbG9uZyB0bGJfZmx1c2hfdmEgPSBpc19wZGUKLQkJPyAgU01NVV9UTEJfRkxVU0hfVkEoaW92YSwgU0VDVElPTikKLQkJOiAgU01NVV9UTEJfRkxVU0hfVkEoaW92YSwgR1JPVVApOwotCi0JdmFsID0gU01NVV9QVENfRkxVU0hfVFlQRV9BRFIgfCBWQV9QQUdFX1RPX1BBKHB0ZSwgcGFnZSk7Ci0Jc21tdV93cml0ZShzbW11LCB2YWwsIFNNTVVfUFRDX0ZMVVNIKTsKLQlGTFVTSF9TTU1VX1JFR1Moc21tdSk7Ci0JdmFsID0gdGxiX2ZsdXNoX3ZhIHwKLQkJU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSF9fRU5BQkxFIHwKLQkJKGFzLT5hc2lkIDw8IFNNTVVfVExCX0ZMVVNIX0FTSURfU0hJRlQpOwotCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBTTU1VX1RMQl9GTFVTSCk7Ci0JRkxVU0hfU01NVV9SRUdTKHNtbXUpOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX3B0Ymwoc3RydWN0IHNtbXVfYXMgKmFzLCBkbWFfYWRkcl90IGlvdmEpCi17Ci0JdW5zaWduZWQgbG9uZyBwZG4gPSBTTU1VX0FERFJfVE9fUEROKGlvdmEpOwotCXVuc2lnbmVkIGxvbmcgKnBkaXIgPSAodW5zaWduZWQgbG9uZyAqKXBhZ2VfYWRkcmVzcyhhcy0+cGRpcl9wYWdlKTsKLQotCWlmIChwZGlyW3Bkbl0gIT0gX1BERV9WQUNBTlQocGRuKSkgewotCQlkZXZfZGJnKGFzLT5zbW11LT5kZXYsICJwZG46ICVseFxuIiwgcGRuKTsKLQotCQlDbGVhclBhZ2VSZXNlcnZlZChTTU1VX0VYX1BUQkxfUEFHRShwZGlyW3Bkbl0pKTsKLQkJX19mcmVlX3BhZ2UoU01NVV9FWF9QVEJMX1BBR0UocGRpcltwZG5dKSk7Ci0JCXBkaXJbcGRuXSA9IF9QREVfVkFDQU5UKHBkbik7Ci0JCUZMVVNIX0NQVV9EQ0FDSEUoJnBkaXJbcGRuXSwgYXMtPnBkaXJfcGFnZSwgc2l6ZW9mIHBkaXJbcGRuXSk7Ci0JCWZsdXNoX3B0Y19hbmRfdGxiKGFzLT5zbW11LCBhcywgaW92YSwgJnBkaXJbcGRuXSwKLQkJCQkgIGFzLT5wZGlyX3BhZ2UsIDEpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZnJlZV9wZGlyKHN0cnVjdCBzbW11X2FzICphcykKLXsKLQl1bnNpZ25lZCBhZGRyOwotCWludCBjb3VudDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcy0+c21tdS0+ZGV2OwotCi0JaWYgKCFhcy0+cGRpcl9wYWdlKQotCQlyZXR1cm47Ci0KLQlhZGRyID0gYXMtPnNtbXUtPmlvdm1tX2Jhc2U7Ci0JY291bnQgPSBhcy0+c21tdS0+cGFnZV9jb3VudDsKLQl3aGlsZSAoY291bnQtLSA+IDApIHsKLQkJZnJlZV9wdGJsKGFzLCBhZGRyKTsKLQkJYWRkciArPSBTTU1VX1BBR0VfU0laRSAqIFNNTVVfUFRCTF9DT1VOVDsKLQl9Ci0JQ2xlYXJQYWdlUmVzZXJ2ZWQoYXMtPnBkaXJfcGFnZSk7Ci0JX19mcmVlX3BhZ2UoYXMtPnBkaXJfcGFnZSk7Ci0JYXMtPnBkaXJfcGFnZSA9IE5VTEw7Ci0JZGV2bV9rZnJlZShkZXYsIGFzLT5wdGVfY291bnQpOwotCWFzLT5wdGVfY291bnQgPSBOVUxMOwotfQotCi0vKgotICogTWFwcyBQVEJMIGZvciBnaXZlbiBpb3ZhIGFuZCByZXR1cm5zIHRoZSBQVEUgYWRkcmVzcwotICogQ2FsbGVyIG11c3QgdW5tYXAgdGhlIG1hcHBlZCBQVEJMIHJldHVybmVkIGluICpwdGJsX3BhZ2VfcAotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAqbG9jYXRlX3B0ZShzdHJ1Y3Qgc21tdV9hcyAqYXMsCi0JCQkJIGRtYV9hZGRyX3QgaW92YSwgYm9vbCBhbGxvY2F0ZSwKLQkJCQkgc3RydWN0IHBhZ2UgKipwdGJsX3BhZ2VfcCwKLQkJCQkgdW5zaWduZWQgaW50ICoqY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyBwdG4gPSBTTU1VX0FERFJfVE9fUEZOKGlvdmEpOwotCXVuc2lnbmVkIGxvbmcgcGRuID0gU01NVV9BRERSX1RPX1BETihpb3ZhKTsKLQl1bnNpZ25lZCBsb25nICpwZGlyID0gcGFnZV9hZGRyZXNzKGFzLT5wZGlyX3BhZ2UpOwotCXVuc2lnbmVkIGxvbmcgKnB0Ymw7Ci0KLQlpZiAocGRpcltwZG5dICE9IF9QREVfVkFDQU5UKHBkbikpIHsKLQkJLyogTWFwcGVkIGVudHJ5IHRhYmxlIGFscmVhZHkgZXhpc3RzICovCi0JCSpwdGJsX3BhZ2VfcCA9IFNNTVVfRVhfUFRCTF9QQUdFKHBkaXJbcGRuXSk7Ci0JCXB0YmwgPSBwYWdlX2FkZHJlc3MoKnB0YmxfcGFnZV9wKTsKLQl9IGVsc2UgaWYgKCFhbGxvY2F0ZSkgewotCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgewotCQlpbnQgcG47Ci0JCXVuc2lnbmVkIGxvbmcgYWRkciA9IFNNTVVfUEROX1RPX0FERFIocGRuKTsKLQotCQkvKiBWYWNhbnQgLSBhbGxvY2F0ZSBhIG5ldyBwYWdlIHRhYmxlICovCi0JCWRldl9kYmcoYXMtPnNtbXUtPmRldiwgIk5ldyBQVEJMIHBkbjogJWx4XG4iLCBwZG4pOwotCi0JCSpwdGJsX3BhZ2VfcCA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JCWlmICghKnB0YmxfcGFnZV9wKSB7Ci0JCQlkZXZfZXJyKGFzLT5zbW11LT5kZXYsCi0JCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBzbW11X2RldmljZSBwYWdlIHRhYmxlXG4iKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCVNldFBhZ2VSZXNlcnZlZCgqcHRibF9wYWdlX3ApOwotCQlwdGJsID0gKHVuc2lnbmVkIGxvbmcgKilwYWdlX2FkZHJlc3MoKnB0YmxfcGFnZV9wKTsKLQkJZm9yIChwbiA9IDA7IHBuIDwgU01NVV9QVEJMX0NPVU5UOwotCQkgICAgIHBuKyssIGFkZHIgKz0gU01NVV9QQUdFX1NJWkUpIHsKLQkJCXB0YmxbcG5dID0gX1BURV9WQUNBTlQoYWRkcik7Ci0JCX0KLQkJRkxVU0hfQ1BVX0RDQUNIRShwdGJsLCAqcHRibF9wYWdlX3AsIFNNTVVfUFRCTF9TSVpFKTsKLQkJcGRpcltwZG5dID0gU01NVV9NS19QREUoKnB0YmxfcGFnZV9wLAotCQkJCQlhcy0+cGRlX2F0dHIgfCBfUERFX05FWFQpOwotCQlGTFVTSF9DUFVfRENBQ0hFKCZwZGlyW3Bkbl0sIGFzLT5wZGlyX3BhZ2UsIHNpemVvZiBwZGlyW3Bkbl0pOwotCQlmbHVzaF9wdGNfYW5kX3RsYihhcy0+c21tdSwgYXMsIGlvdmEsICZwZGlyW3Bkbl0sCi0JCQkJICBhcy0+cGRpcl9wYWdlLCAxKTsKLQl9Ci0JKmNvdW50ID0gJmFzLT5wdGVfY291bnRbcGRuXTsKLQotCXJldHVybiAmcHRibFtwdG4gJSBTTU1VX1BUQkxfQ09VTlRdOwotfQotCi0jaWZkZWYgQ09ORklHX1NNTVVfU0lHX0RFQlVHCi1zdGF0aWMgdm9pZCBwdXRfc2lnbmF0dXJlKHN0cnVjdCBzbW11X2FzICphcywKLQkJCSAgZG1hX2FkZHJfdCBpb3ZhLCB1bnNpZ25lZCBsb25nIHBmbikKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nICp2YWRkcjsKLQotCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCXZhZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwotCWlmICghdmFkZHIpCi0JCXJldHVybjsKLQotCXZhZGRyWzBdID0gaW92YTsKLQl2YWRkclsxXSA9IHBmbiA8PCBQQUdFX1NISUZUOwotCUZMVVNIX0NQVV9EQ0FDSEUodmFkZHIsIHBhZ2UsIHNpemVvZih2YWRkclswXSkgKiAyKTsKLX0KKwkJaWYgKHNtbXUtPm1jLT5zb2MtPm51bV9hZGRyZXNzX2JpdHMgPiAzMikgeworI2lmZGVmIENPTkZJR19QSFlTX0FERFJfVF82NEJJVAorCQkJdmFsdWUgPSAocGh5cyA+PiAzMikgJiBTTU1VX1BUQ19GTFVTSF9ISV9NQVNLOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc2lnbmF0dXJlKHN0cnVjdCBzbW11X2FzICphcywKLQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbikKLXsKLX0KKwkJCXZhbHVlID0gMDsKICNlbmRpZgorCQkJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIFNNTVVfUFRDX0ZMVVNIX0hJKTsKKwkJfQogCi0vKgotICogQ2FsbGVyIG11c3Qgbm90IGhvbGQgYXMtPmxvY2sKLSAqLwotc3RhdGljIGludCBhbGxvY19wZGlyKHN0cnVjdCBzbW11X2FzICphcykKLXsKLQl1bnNpZ25lZCBsb25nICpwZGlyLCBmbGFnczsKLQlpbnQgcGRuLCBlcnIgPSAwOwotCXUzMiB2YWw7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gYXMtPnNtbXU7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgaW50ICpjbnQ7Ci0KLQkvKgotCSAqIGRvIHRoZSBhbGxvY2F0aW9uLCB0aGVuIGdyYWIgYXMtPmxvY2sKLQkgKi8KLQljbnQgPSBkZXZtX2t6YWxsb2Moc21tdS0+ZGV2LAotCQkJICAgc2l6ZW9mKGNudFswXSkgKiBTTU1VX1BESVJfQ09VTlQsCi0JCQkgICBHRlBfS0VSTkVMKTsKLQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfRE1BKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGFzLT5wZGlyX3BhZ2UpIHsKLQkJLyogV2UgcmFjZWQsIGZyZWUgdGhlIHJlZHVuZGFudCAqLwotCQllcnIgPSAtRUFHQUlOOwotCQlnb3RvIGVycl9vdXQ7CisJCXZhbHVlID0gKHBoeXMgKyBvZmZzZXQpIHwgU01NVV9QVENfRkxVU0hfVFlQRV9BRFI7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSBTTU1VX1BUQ19GTFVTSF9UWVBFX0FMTDsKIAl9CiAKLQlpZiAoIXBhZ2UgfHwgIWNudCkgewotCQlkZXZfZXJyKHNtbXUtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBhdCAlc1xuIiwgX19mdW5jX18pOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9vdXQ7CisJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIFNNTVVfUFRDX0ZMVVNIKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtbXVfZmx1c2hfdGxiKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11KQoreworCXNtbXVfd3JpdGVsKHNtbXUsIFNNTVVfVExCX0ZMVVNIX1ZBX01BVENIX0FMTCwgU01NVV9UTEJfRkxVU0gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21tdV9mbHVzaF90bGJfYXNpZChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhc2lkKQoreworCXUzMiB2YWx1ZTsKKworCXZhbHVlID0gU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSCB8IFNNTVVfVExCX0ZMVVNIX0FTSUQoYXNpZCkgfAorCQlTTU1VX1RMQl9GTFVTSF9WQV9NQVRDSF9BTEw7CisJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIFNNTVVfVExCX0ZMVVNIKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtbXVfZmx1c2hfdGxiX3NlY3Rpb24oc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhc2lkLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgaW92YSkKK3sKKwl1MzIgdmFsdWU7CisKKwl2YWx1ZSA9IFNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0ggfCBTTU1VX1RMQl9GTFVTSF9BU0lEKGFzaWQpIHwKKwkJU01NVV9UTEJfRkxVU0hfVkFfU0VDVElPTihpb3ZhKTsKKwlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9UTEJfRkxVU0gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21tdV9mbHVzaF90bGJfZ3JvdXAoc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsCisJCQkJCXVuc2lnbmVkIGxvbmcgYXNpZCwKKwkJCQkJdW5zaWduZWQgbG9uZyBpb3ZhKQoreworCXUzMiB2YWx1ZTsKKworCXZhbHVlID0gU01NVV9UTEJfRkxVU0hfQVNJRF9NQVRDSCB8IFNNTVVfVExCX0ZMVVNIX0FTSUQoYXNpZCkgfAorCQlTTU1VX1RMQl9GTFVTSF9WQV9HUk9VUChpb3ZhKTsKKwlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9UTEJfRkxVU0gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21tdV9mbHVzaChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSkKK3sKKwlzbW11X3JlYWRsKHNtbXUsIFNNTVVfQ09ORklHKTsKK30KKworc3RhdGljIGludCB0ZWdyYV9zbW11X2FsbG9jX2FzaWQoc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUsIHVuc2lnbmVkIGludCAqaWRwKQoreworCXVuc2lnbmVkIGxvbmcgaWQ7CisKKwltdXRleF9sb2NrKCZzbW11LT5sb2NrKTsKKworCWlkID0gZmluZF9maXJzdF96ZXJvX2JpdChzbW11LT5hc2lkcywgc21tdS0+c29jLT5udW1fYXNpZHMpOworCWlmIChpZCA+PSBzbW11LT5zb2MtPm51bV9hc2lkcykgeworCQltdXRleF91bmxvY2soJnNtbXUtPmxvY2spOworCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQlhcy0+cGRpcl9wYWdlID0gcGFnZTsKLQlhcy0+cHRlX2NvdW50ID0gY250OworCXNldF9iaXQoaWQsIHNtbXUtPmFzaWRzKTsKKwkqaWRwID0gaWQ7CiAKLQlTZXRQYWdlUmVzZXJ2ZWQoYXMtPnBkaXJfcGFnZSk7Ci0JcGRpciA9IHBhZ2VfYWRkcmVzcyhhcy0+cGRpcl9wYWdlKTsKLQotCWZvciAocGRuID0gMDsgcGRuIDwgU01NVV9QRElSX0NPVU5UOyBwZG4rKykKLQkJcGRpcltwZG5dID0gX1BERV9WQUNBTlQocGRuKTsKLQlGTFVTSF9DUFVfRENBQ0hFKHBkaXIsIGFzLT5wZGlyX3BhZ2UsIFNNTVVfUERJUl9TSVpFKTsKLQl2YWwgPSBTTU1VX1BUQ19GTFVTSF9UWVBFX0FEUiB8IFZBX1BBR0VfVE9fUEEocGRpciwgYXMtPnBkaXJfcGFnZSk7Ci0Jc21tdV93cml0ZShzbW11LCB2YWwsIFNNTVVfUFRDX0ZMVVNIKTsKLQlGTFVTSF9TTU1VX1JFR1MoYXMtPnNtbXUpOwotCXZhbCA9IFNNTVVfVExCX0ZMVVNIX1ZBX01BVENIX0FMTCB8Ci0JCVNNTVVfVExCX0ZMVVNIX0FTSURfTUFUQ0hfX0VOQUJMRSB8Ci0JCShhcy0+YXNpZCA8PCBTTU1VX1RMQl9GTFVTSF9BU0lEX1NISUZUKTsKLQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgU01NVV9UTEJfRkxVU0gpOwotCUZMVVNIX1NNTVVfUkVHUyhhcy0+c21tdSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQotCWRldm1fa2ZyZWUoc21tdS0+ZGV2LCBjbnQpOwotCWlmIChwYWdlKQotCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX3NtbXVfaW9tbXVfdW5tYXAoc3RydWN0IHNtbXVfYXMgKmFzLCBkbWFfYWRkcl90IGlvdmEpCi17Ci0JdW5zaWduZWQgbG9uZyAqcHRlOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGludCAqY291bnQ7Ci0KLQlwdGUgPSBsb2NhdGVfcHRlKGFzLCBpb3ZhLCBmYWxzZSwgJnBhZ2UsICZjb3VudCk7Ci0JaWYgKFdBUk5fT04oIXB0ZSkpCi0JCXJldHVybjsKLQotCWlmIChXQVJOX09OKCpwdGUgPT0gX1BURV9WQUNBTlQoaW92YSkpKQotCQlyZXR1cm47Ci0KLQkqcHRlID0gX1BURV9WQUNBTlQoaW92YSk7Ci0JRkxVU0hfQ1BVX0RDQUNIRShwdGUsIHBhZ2UsIHNpemVvZigqcHRlKSk7Ci0JZmx1c2hfcHRjX2FuZF90bGIoYXMtPnNtbXUsIGFzLCBpb3ZhLCBwdGUsIHBhZ2UsIDApOwotCWlmICghLS0oKmNvdW50KSkKLQkJZnJlZV9wdGJsKGFzLCBpb3ZhKTsKLX0KLQotc3RhdGljIHZvaWQgX19zbW11X2lvbW11X21hcF9wZm4oc3RydWN0IHNtbXVfYXMgKmFzLCBkbWFfYWRkcl90IGlvdmEsCi0JCQkJIHVuc2lnbmVkIGxvbmcgcGZuKQotewotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGFzLT5zbW11OwotCXVuc2lnbmVkIGxvbmcgKnB0ZTsKLQl1bnNpZ25lZCBpbnQgKmNvdW50OwotCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JcHRlID0gbG9jYXRlX3B0ZShhcywgaW92YSwgdHJ1ZSwgJnBhZ2UsICZjb3VudCk7Ci0JaWYgKFdBUk5fT04oIXB0ZSkpCi0JCXJldHVybjsKLQotCWlmICgqcHRlID09IF9QVEVfVkFDQU5UKGlvdmEpKQotCQkoKmNvdW50KSsrOwotCSpwdGUgPSBTTU1VX1BGTl9UT19QVEUocGZuLCBhcy0+cHRlX2F0dHIpOwotCWlmICh1bmxpa2VseSgoKnB0ZSA9PSBfUFRFX1ZBQ0FOVChpb3ZhKSkpKQotCQkoKmNvdW50KS0tOwotCUZMVVNIX0NQVV9EQ0FDSEUocHRlLCBwYWdlLCBzaXplb2YoKnB0ZSkpOwotCWZsdXNoX3B0Y19hbmRfdGxiKHNtbXUsIGFzLCBpb3ZhLCBwdGUsIHBhZ2UsIDApOwotCXB1dF9zaWduYXR1cmUoYXMsIGlvdmEsIHBmbik7Ci19Ci0KLXN0YXRpYyBpbnQgc21tdV9pb21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCi0JCQkgIHBoeXNfYWRkcl90IHBhLCBzaXplX3QgYnl0ZXMsIGludCBwcm90KQotewotCXN0cnVjdCBzbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IF9fcGh5c190b19wZm4ocGEpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkZXZfZGJnKGFzLT5zbW11LT5kZXYsICJbJWRdICUwOGx4OiVwYVxuIiwgYXMtPmFzaWQsIGlvdmEsICZwYSk7Ci0KLQlpZiAoIXBmbl92YWxpZChwZm4pKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCV9fc21tdV9pb21tdV9tYXBfcGZuKGFzLCBpb3ZhLCBwZm4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzbW11LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNpemVfdCBzbW11X2lvbW11X3VubWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAotCQkJICAgICAgIHNpemVfdCBieXRlcykKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfZnJlZV9hc2lkKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LCB1bnNpZ25lZCBpbnQgaWQpCiB7Ci0Jc3RydWN0IHNtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkZXZfZGJnKGFzLT5zbW11LT5kZXYsICJbJWRdICUwOGx4XG4iLCBhcy0+YXNpZCwgaW92YSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQlfX3NtbXVfaW9tbXVfdW5tYXAoYXMsIGlvdmEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIFNNTVVfUEFHRV9TSVpFOworCW11dGV4X2xvY2soJnNtbXUtPmxvY2spOworCWNsZWFyX2JpdChpZCwgc21tdS0+YXNpZHMpOworCW11dGV4X3VubG9jaygmc21tdS0+bG9jayk7CiB9CiAKLXN0YXRpYyBwaHlzX2FkZHJfdCBzbW11X2lvbW11X2lvdmFfdG9fcGh5cyhzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCi0JCQkJCSAgIGRtYV9hZGRyX3QgaW92YSkKLXsKLQlzdHJ1Y3Qgc21tdV9hcyAqYXMgPSBkb21haW4tPnByaXY7Ci0JdW5zaWduZWQgbG9uZyAqcHRlOwotCXVuc2lnbmVkIGludCAqY291bnQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCi0JcHRlID0gbG9jYXRlX3B0ZShhcywgaW92YSwgdHJ1ZSwgJnBhZ2UsICZjb3VudCk7Ci0JcGZuID0gKnB0ZSAmIFNNTVVfUEZOX01BU0s7Ci0JV0FSTl9PTighcGZuX3ZhbGlkKHBmbikpOwotCWRldl9kYmcoYXMtPnNtbXUtPmRldiwKLQkJImlvdmE6JTA4bGx4IHBmbjolMDhseCBhc2lkOiVkXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWlvdmEsCi0JCSBwZm4sIGFzLT5hc2lkKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIFBGTl9QSFlTKHBmbik7Ci19Ci0KLXN0YXRpYyBib29sIHNtbXVfaW9tbXVfY2FwYWJsZShlbnVtIGlvbW11X2NhcCBjYXApCitzdGF0aWMgYm9vbCB0ZWdyYV9zbW11X2NhcGFibGUoZW51bSBpb21tdV9jYXAgY2FwKQogewogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBzbW11X2lvbW11X2F0dGFjaF9kZXYoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAotCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHRlZ3JhX3NtbXVfZG9tYWluX2luaXQoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQogewotCXN0cnVjdCBzbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBhcy0+c21tdTsKLQlzdHJ1Y3Qgc21tdV9jbGllbnQgKmNsaWVudCwgKmM7Ci0JdTMyIG1hcDsKLQlpbnQgZXJyOworCXN0cnVjdCB0ZWdyYV9zbW11X2FzICphczsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1aW50MzJfdCAqcGQ7CiAKLQljbGllbnQgPSBkZXZtX2t6YWxsb2Moc21tdS0+ZGV2LCBzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKKwlhcyA9IGt6YWxsb2Moc2l6ZW9mKCphcyksIEdGUF9LRVJORUwpOworCWlmICghYXMpCiAJCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+ZGV2ID0gZGV2OwotCWNsaWVudC0+YXMgPSBhczsKLQltYXAgPSAodW5zaWduZWQgbG9uZylkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JaWYgKCFtYXApCi0JCXJldHVybiAtRUlOVkFMOwogCi0JZXJyID0gc21tdV9jbGllbnRfZW5hYmxlX2h3Z3JwKGNsaWVudCwgbWFwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9od2dycDsKKwlhcy0+YXR0ciA9IFNNTVVfUERfUkVBREFCTEUgfCBTTU1VX1BEX1dSSVRBQkxFIHwgU01NVV9QRF9OT05TRUNVUkU7CisJYXMtPmRvbWFpbiA9IGRvbWFpbjsKIAotCXNwaW5fbG9jaygmYXMtPmNsaWVudF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZhcy0+Y2xpZW50LCBsaXN0KSB7Ci0JCWlmIChjLT5kZXYgPT0gZGV2KSB7Ci0JCQlkZXZfZXJyKHNtbXUtPmRldiwKLQkJCQkiJXMgaXMgYWxyZWFkeSBhdHRhY2hlZFxuIiwgZGV2X25hbWUoYy0+ZGV2KSk7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBlcnJfY2xpZW50OwotCQl9Ci0JfQotCWxpc3RfYWRkKCZjbGllbnQtPmxpc3QsICZhcy0+Y2xpZW50KTsKLQlzcGluX3VubG9jaygmYXMtPmNsaWVudF9sb2NrKTsKLQotCS8qCi0JICogUmVzZXJ2ZSAicGFnZSB6ZXJvIiBmb3IgQVZQIHZlY3RvcnMgdXNpbmcgYSBjb21tb24gZHVtbXkKLQkgKiBwYWdlLgotCSAqLwotCWlmIChtYXAgJiBIV0dfQVZQQykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQlwYWdlID0gYXMtPnNtbXUtPmF2cF92ZWN0b3JfcGFnZTsKLQkJX19zbW11X2lvbW11X21hcF9wZm4oYXMsIDAsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKLQotCQlwcl9pbmZvKCJSZXNlcnZlIFwicGFnZSB6ZXJvXCIgZm9yIEFWUCB2ZWN0b3JzIHVzaW5nIGEgY29tbW9uIGR1bW15XG4iKTsKKwlhcy0+cGQgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9ETUEpOworCWlmICghYXMtPnBkKSB7CisJCWtmcmVlKGFzKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZGV2X2RiZyhzbW11LT5kZXYsICIlcyBpcyBhdHRhY2hlZFxuIiwgZGV2X25hbWUoZGV2KSk7Ci0JcmV0dXJuIDA7Ci0KLWVycl9jbGllbnQ6Ci0Jc21tdV9jbGllbnRfZGlzYWJsZV9od2dycChjbGllbnQpOwotCXNwaW5fdW5sb2NrKCZhcy0+Y2xpZW50X2xvY2spOwotZXJyX2h3Z3JwOgotCWRldm1fa2ZyZWUoc21tdS0+ZGV2LCBjbGllbnQpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHNtbXVfaW9tbXVfZGV0YWNoX2RldihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCi0JCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHNtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OwotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGFzLT5zbW11OwotCXN0cnVjdCBzbW11X2NsaWVudCAqYzsKLQotCXNwaW5fbG9jaygmYXMtPmNsaWVudF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmFzLT5jbGllbnQsIGxpc3QpIHsKLQkJaWYgKGMtPmRldiA9PSBkZXYpIHsKLQkJCXNtbXVfY2xpZW50X2Rpc2FibGVfaHdncnAoYyk7Ci0JCQlsaXN0X2RlbCgmYy0+bGlzdCk7Ci0JCQlkZXZtX2tmcmVlKHNtbXUtPmRldiwgYyk7Ci0JCQljLT5hcyA9IE5VTEw7Ci0JCQlkZXZfZGJnKHNtbXUtPmRldiwKLQkJCQkiJXMgaXMgZGV0YWNoZWRcbiIsIGRldl9uYW1lKGMtPmRldikpOwotCQkJZ290byBvdXQ7Ci0JCX0KKwlhcy0+Y291bnQgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCWlmICghYXMtPmNvdW50KSB7CisJCV9fZnJlZV9wYWdlKGFzLT5wZCk7CisJCWtmcmVlKGFzKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWRldl9lcnIoc21tdS0+ZGV2LCAiQ291bGRuJ3QgZmluZCAlc1xuIiwgZGV2X25hbWUoZGV2KSk7Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2soJmFzLT5jbGllbnRfbG9jayk7Ci19CiAKLXN0YXRpYyBpbnQgc21tdV9pb21tdV9kb21haW5faW5pdChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCi17Ci0JaW50IGksIGVyciA9IC1FQUdBSU47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc21tdV9hcyAqYXM7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gc21tdV9oYW5kbGU7CisJLyogY2xlYXIgUERFcyAqLworCXBkID0gcGFnZV9hZGRyZXNzKGFzLT5wZCk7CisJU2V0UGFnZVJlc2VydmVkKGFzLT5wZCk7CiAKLQkvKiBMb29rIGZvciBhIGZyZWUgQVMgd2l0aCBsb2NrIGhlbGQgKi8KLQlmb3IgIChpID0gMDsgaSA8IHNtbXUtPm51bV9hczsgaSsrKSB7Ci0JCWFzID0gJnNtbXUtPmFzW2ldOworCWZvciAoaSA9IDA7IGkgPCBTTU1VX05VTV9QREU7IGkrKykKKwkJcGRbaV0gPSAwOwogCi0JCWlmIChhcy0+cGRpcl9wYWdlKQotCQkJY29udGludWU7CisJLyogY2xlYXIgUERFIHVzYWdlIGNvdW50ZXJzICovCisJcGQgPSBwYWdlX2FkZHJlc3MoYXMtPmNvdW50KTsKKwlTZXRQYWdlUmVzZXJ2ZWQoYXMtPmNvdW50KTsKIAotCQllcnIgPSBhbGxvY19wZGlyKGFzKTsKLQkJaWYgKCFlcnIpCi0JCQlnb3RvIGZvdW5kOwotCi0JCWlmIChlcnIgIT0gLUVBR0FJTikKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBzbW11LT5udW1fYXMpCi0JCWRldl9lcnIoc21tdS0+ZGV2LCAgIm5vIGZyZWUgQVNcbiIpOwotCXJldHVybiBlcnI7Ci0KLWZvdW5kOgotCXNwaW5fbG9ja19pcnFzYXZlKCZzbW11LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBVcGRhdGUgUERJUiByZWdpc3RlciAqLwotCXNtbXVfd3JpdGUoc21tdSwgU01NVV9QVEJfQVNJRF9DVVIoYXMtPmFzaWQpLCBTTU1VX1BUQl9BU0lEKTsKLQlzbW11X3dyaXRlKHNtbXUsCi0JCSAgIFNNTVVfTUtfUERJUihhcy0+cGRpcl9wYWdlLCBhcy0+cGRpcl9hdHRyKSwgU01NVV9QVEJfREFUQSk7Ci0JRkxVU0hfU01NVV9SRUdTKHNtbXUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21tdS0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBTTU1VX05VTV9QREU7IGkrKykKKwkJcGRbaV0gPSAwOwogCiAJZG9tYWluLT5wcml2ID0gYXM7CiAKLQlkb21haW4tPmdlb21ldHJ5LmFwZXJ0dXJlX3N0YXJ0ID0gc21tdS0+aW92bW1fYmFzZTsKLQlkb21haW4tPmdlb21ldHJ5LmFwZXJ0dXJlX2VuZCAgID0gc21tdS0+aW92bW1fYmFzZSArCi0JCXNtbXUtPnBhZ2VfY291bnQgKiBTTU1VX1BBR0VfU0laRSAtIDE7Ci0JZG9tYWluLT5nZW9tZXRyeS5mb3JjZV9hcGVydHVyZSA9IHRydWU7Ci0KLQlkZXZfZGJnKHNtbXUtPmRldiwgInNtbXVfYXNAJXBcbiIsIGFzKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzbW11X2lvbW11X2RvbWFpbl9kZXN0cm95KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfZG9tYWluX2Rlc3Ryb3koc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQogewotCXN0cnVjdCBzbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBhcy0+c21tdTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0ZWdyYV9zbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCS8qIFRPRE86IGZyZWUgcGFnZSBkaXJlY3RvcnkgYW5kIHBhZ2UgdGFibGVzICovCisJQ2xlYXJQYWdlUmVzZXJ2ZWQoYXMtPnBkKTsKIAotCWlmIChhcy0+cGRpcl9wYWdlKSB7Ci0JCXNwaW5fbG9jaygmc21tdS0+bG9jayk7Ci0JCXNtbXVfd3JpdGUoc21tdSwgU01NVV9QVEJfQVNJRF9DVVIoYXMtPmFzaWQpLCBTTU1VX1BUQl9BU0lEKTsKLQkJc21tdV93cml0ZShzbW11LCBTTU1VX1BUQl9EQVRBX1JFU0VUX1ZBTCwgU01NVV9QVEJfREFUQSk7Ci0JCUZMVVNIX1NNTVVfUkVHUyhzbW11KTsKLQkJc3Bpbl91bmxvY2soJnNtbXUtPmxvY2spOwotCi0JCWZyZWVfcGRpcihhcyk7Ci0JfQotCi0JaWYgKCFsaXN0X2VtcHR5KCZhcy0+Y2xpZW50KSkgewotCQlzdHJ1Y3Qgc21tdV9jbGllbnQgKmM7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmYXMtPmNsaWVudCwgbGlzdCkKLQkJCXNtbXVfaW9tbXVfZGV0YWNoX2Rldihkb21haW4sIGMtPmRldik7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQotCWRvbWFpbi0+cHJpdiA9IE5VTEw7Ci0JZGV2X2RiZyhzbW11LT5kZXYsICJzbW11X2FzQCVwXG4iLCBhcyk7CisJa2ZyZWUoYXMpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X29wcyBzbW11X2lvbW11X29wcyA9IHsKLQkuY2FwYWJsZQk9IHNtbXVfaW9tbXVfY2FwYWJsZSwKLQkuZG9tYWluX2luaXQJPSBzbW11X2lvbW11X2RvbWFpbl9pbml0LAotCS5kb21haW5fZGVzdHJveQk9IHNtbXVfaW9tbXVfZG9tYWluX2Rlc3Ryb3ksCi0JLmF0dGFjaF9kZXYJPSBzbW11X2lvbW11X2F0dGFjaF9kZXYsCi0JLmRldGFjaF9kZXYJPSBzbW11X2lvbW11X2RldGFjaF9kZXYsCi0JLm1hcAkJPSBzbW11X2lvbW11X21hcCwKLQkudW5tYXAJCT0gc21tdV9pb21tdV91bm1hcCwKLQkuaW92YV90b19waHlzCT0gc21tdV9pb21tdV9pb3ZhX3RvX3BoeXMsCi0JLnBnc2l6ZV9iaXRtYXAJPSBTTU1VX0lPTU1VX1BHU0laRVMsCi19OwotCi0vKiBTaG91bGQgYmUgaW4gdGhlIG9yZGVyIG9mIGVudW0gKi8KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc21tdV9kZWJ1Z2ZzX21jW10gPSB7ICJtYyIsIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNtbXVfZGVidWdmc19jYWNoZVtdID0geyAgInRsYiIsICJwdGMiLCB9OwotCi1zdGF0aWMgc3NpemVfdCBzbW11X2RlYnVnZnNfc3RhdHNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc3dncm91cCAqCit0ZWdyYV9zbW11X2ZpbmRfc3dncm91cChzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwgdW5zaWduZWQgaW50IHN3Z3JvdXApCiB7Ci0Jc3RydWN0IHNtbXVfZGVidWdmc19pbmZvICppbmZvOwotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdTsKLQlpbnQgaTsKLQllbnVtIHsKLQkJX09GRiA9IDAsCi0JCV9PTiwKLQkJX1JFU0VULAotCX07Ci0JY29uc3QgY2hhciAqIGNvbnN0IGNvbW1hbmRbXSA9IHsKLQkJW19PRkZdCQk9ICJvZmYiLAotCQlbX09OXQkJPSAib24iLAotCQlbX1JFU0VUXQk9ICJyZXNldCIsCi0JfTsKLQljaGFyIHN0cltdID0gInJlc2V0IjsKLQl1MzIgdmFsOwotCXNpemVfdCBvZmZzOworCWNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgKmdyb3VwID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgc2l6ZW9mKHN0cikpOwotCWlmIChjb3B5X2Zyb21fdXNlcihzdHIsIGJ1ZmZlciwgY291bnQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmQpOyBpKyspCi0JCWlmIChzdHJuY21wKHN0ciwgY29tbWFuZFtpXSwKLQkJCSAgICBzdHJsZW4oY29tbWFuZFtpXSkpID09IDApCisJZm9yIChpID0gMDsgaSA8IHNtbXUtPnNvYy0+bnVtX3N3Z3JvdXBzOyBpKyspIHsKKwkJaWYgKHNtbXUtPnNvYy0+c3dncm91cHNbaV0uc3dncm91cCA9PSBzd2dyb3VwKSB7CisJCQlncm91cCA9ICZzbW11LT5zb2MtPnN3Z3JvdXBzW2ldOwogCQkJYnJlYWs7Ci0KLQlpZiAoaSA9PSBBUlJBWV9TSVpFKGNvbW1hbmQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWluZm8gPSBmaWxlX2lub2RlKGZpbGUpLT5pX3ByaXZhdGU7Ci0Jc21tdSA9IGluZm8tPnNtbXU7Ci0KLQlvZmZzID0gU01NVV9DQUNIRV9DT05GSUcoaW5mby0+Y2FjaGUpOwotCXZhbCA9IHNtbXVfcmVhZChzbW11LCBvZmZzKTsKLQlzd2l0Y2ggKGkpIHsKLQljYXNlIF9PRkY6Ci0JCXZhbCAmPSB+U01NVV9DQUNIRV9DT05GSUdfU1RBVFNfRU5BQkxFOwotCQl2YWwgJj0gflNNTVVfQ0FDSEVfQ09ORklHX1NUQVRTX1RFU1Q7Ci0JCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBvZmZzKTsKLQkJYnJlYWs7Ci0JY2FzZSBfT046Ci0JCXZhbCB8PSBTTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19FTkFCTEU7Ci0JCXZhbCAmPSB+U01NVV9DQUNIRV9DT05GSUdfU1RBVFNfVEVTVDsKLQkJc21tdV93cml0ZShzbW11LCB2YWwsIG9mZnMpOwotCQlicmVhazsKLQljYXNlIF9SRVNFVDoKLQkJdmFsIHw9IFNNTVVfQ0FDSEVfQ09ORklHX1NUQVRTX1RFU1Q7Ci0JCXNtbXVfd3JpdGUoc21tdSwgdmFsLCBvZmZzKTsKLQkJdmFsICY9IH5TTU1VX0NBQ0hFX0NPTkZJR19TVEFUU19URVNUOwotCQlzbW11X3dyaXRlKHNtbXUsIHZhbCwgb2Zmcyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlicmVhazsKLQl9Ci0KLQlkZXZfZGJnKHNtbXUtPmRldiwgIiVzKCkgJTA4eCwgJTA4eCBAJTA4eFxuIiwgX19mdW5jX18sCi0JCXZhbCwgc21tdV9yZWFkKHNtbXUsIG9mZnMpLCBvZmZzKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGludCBzbW11X2RlYnVnZnNfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNtbXVfZGVidWdmc19pbmZvICppbmZvID0gcy0+cHJpdmF0ZTsKLQlzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUgPSBpbmZvLT5zbW11OwotCWludCBpOwotCWNvbnN0IGNoYXIgKiBjb25zdCBzdGF0c1tdID0geyAiaGl0IiwgIm1pc3MiLCB9OwotCi0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGF0cyk7IGkrKykgewotCQl1MzIgdmFsOwotCQlzaXplX3Qgb2ZmczsKLQotCQlvZmZzID0gU01NVV9TVEFUU19DQUNIRV9DT1VOVChpbmZvLT5tYywgaW5mby0+Y2FjaGUsIGkpOwotCQl2YWwgPSBzbW11X3JlYWQoc21tdSwgb2Zmcyk7Ci0JCXNlcV9wcmludGYocywgIiVzOiUwOHggIiwgc3RhdHNbaV0sIHZhbCk7Ci0KLQkJZGV2X2RiZyhzbW11LT5kZXYsICIlcygpICVzICUwOHggQCUwOHhcbiIsIF9fZnVuY19fLAotCQkJc3RhdHNbaV0sIHZhbCwgb2Zmcyk7Ci0JfQotCXNlcV9wcmludGYocywgIlxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc21tdV9kZWJ1Z2ZzX3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNtbXVfZGVidWdmc19zdGF0c19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc21tdV9kZWJ1Z2ZzX3N0YXRzX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gc21tdV9kZWJ1Z2ZzX3N0YXRzX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLQkud3JpdGUJCT0gc21tdV9kZWJ1Z2ZzX3N0YXRzX3dyaXRlLAotfTsKLQotc3RhdGljIHZvaWQgc21tdV9kZWJ1Z2ZzX2RlbGV0ZShzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUpCi17Ci0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHNtbXUtPmRlYnVnZnNfcm9vdCk7Ci0Ja2ZyZWUoc21tdS0+ZGVidWdmc19pbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgc21tdV9kZWJ1Z2ZzX2NyZWF0ZShzdHJ1Y3Qgc21tdV9kZXZpY2UgKnNtbXUpCi17Ci0JaW50IGk7Ci0Jc2l6ZV90IGJ5dGVzOwotCXN0cnVjdCBkZW50cnkgKnJvb3Q7Ci0KLQlieXRlcyA9IEFSUkFZX1NJWkUoc21tdV9kZWJ1Z2ZzX21jKSAqIEFSUkFZX1NJWkUoc21tdV9kZWJ1Z2ZzX2NhY2hlKSAqCi0JCXNpemVvZigqc21tdS0+ZGVidWdmc19pbmZvKTsKLQlzbW11LT5kZWJ1Z2ZzX2luZm8gPSBrbWFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNtbXUtPmRlYnVnZnNfaW5mbykKLQkJcmV0dXJuOwotCi0Jcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZShzbW11LT5kZXYpLCBOVUxMKTsKLQlpZiAoIXJvb3QpCi0JCWdvdG8gZXJyX291dDsKLQlzbW11LT5kZWJ1Z2ZzX3Jvb3QgPSByb290OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc21tdV9kZWJ1Z2ZzX21jKTsgaSsrKSB7Ci0JCWludCBqOwotCQlzdHJ1Y3QgZGVudHJ5ICptYzsKLQotCQltYyA9IGRlYnVnZnNfY3JlYXRlX2RpcihzbW11X2RlYnVnZnNfbWNbaV0sIHJvb3QpOwotCQlpZiAoIW1jKQotCQkJZ290byBlcnJfb3V0OwotCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNtbXVfZGVidWdmc19jYWNoZSk7IGorKykgewotCQkJc3RydWN0IGRlbnRyeSAqY2FjaGU7Ci0JCQlzdHJ1Y3Qgc21tdV9kZWJ1Z2ZzX2luZm8gKmluZm87Ci0KLQkJCWluZm8gPSBzbW11LT5kZWJ1Z2ZzX2luZm87Ci0JCQlpbmZvICs9IGkgKiBBUlJBWV9TSVpFKHNtbXVfZGVidWdmc19tYykgKyBqOwotCQkJaW5mby0+c21tdSA9IHNtbXU7Ci0JCQlpbmZvLT5tYyA9IGk7Ci0JCQlpbmZvLT5jYWNoZSA9IGo7Ci0KLQkJCWNhY2hlID0gZGVidWdmc19jcmVhdGVfZmlsZShzbW11X2RlYnVnZnNfY2FjaGVbal0sCi0JCQkJCQkgICAgU19JV1VHTyB8IFNfSVJVR08sIG1jLAotCQkJCQkJICAgICh2b2lkICopaW5mbywKLQkJCQkJCSAgICAmc21tdV9kZWJ1Z2ZzX3N0YXRzX2ZvcHMpOwotCQkJaWYgKCFjYWNoZSkKLQkJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAl9CiAKLQlyZXR1cm47Ci0KLWVycl9vdXQ6Ci0Jc21tdV9kZWJ1Z2ZzX2RlbGV0ZShzbW11KTsKKwlyZXR1cm4gZ3JvdXA7CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfc21tdV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfZW5hYmxlKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LCB1bnNpZ25lZCBpbnQgc3dncm91cCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBhc2lkKQogewotCXN0cnVjdCBzbW11X2RldmljZSAqc21tdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgKmdyb3VwOworCXVuc2lnbmVkIGludCBpOworCXUzMiB2YWx1ZTsKIAotCXNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8wID0gc21tdV9yZWFkKHNtbXUsIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzApOwotCXNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8xID0gc21tdV9yZWFkKHNtbXUsIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzEpOwotCXNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8yID0gc21tdV9yZWFkKHNtbXUsIFNNTVVfVFJBTlNMQVRJT05fRU5BQkxFXzIpOwotCXNtbXUtPmFzaWRfc2VjdXJpdHkgPSBzbW11X3JlYWQoc21tdSwgU01NVV9BU0lEX1NFQ1VSSVRZKTsKLQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc21tdS0+c29jLT5udW1fY2xpZW50czsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCB0ZWdyYV9tY19jbGllbnQgKmNsaWVudCA9ICZzbW11LT5zb2MtPmNsaWVudHNbaV07CisKKwkJaWYgKGNsaWVudC0+c3dncm91cCAhPSBzd2dyb3VwKQorCQkJY29udGludWU7CisKKwkJdmFsdWUgPSBzbW11X3JlYWRsKHNtbXUsIGNsaWVudC0+c21tdS5yZWcpOworCQl2YWx1ZSB8PSBCSVQoY2xpZW50LT5zbW11LmJpdCk7CisJCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBjbGllbnQtPnNtbXUucmVnKTsKKwl9CisKKwlncm91cCA9IHRlZ3JhX3NtbXVfZmluZF9zd2dyb3VwKHNtbXUsIHN3Z3JvdXApOworCWlmIChncm91cCkgeworCQl2YWx1ZSA9IHNtbXVfcmVhZGwoc21tdSwgZ3JvdXAtPnJlZyk7CisJCXZhbHVlICY9IH5TTU1VX0FTSURfTUFTSzsKKwkJdmFsdWUgfD0gU01NVV9BU0lEX1ZBTFVFKGFzaWQpOworCQl2YWx1ZSB8PSBTTU1VX0FTSURfRU5BQkxFOworCQlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgZ3JvdXAtPnJlZyk7CisJfQogfQogCi1zdGF0aWMgaW50IHRlZ3JhX3NtbXVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfZGlzYWJsZShzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwgdW5zaWduZWQgaW50IHN3Z3JvdXAsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGFzaWQpCiB7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zd2dyb3VwICpncm91cDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdmFsdWU7CisKKwlncm91cCA9IHRlZ3JhX3NtbXVfZmluZF9zd2dyb3VwKHNtbXUsIHN3Z3JvdXApOworCWlmIChncm91cCkgeworCQl2YWx1ZSA9IHNtbXVfcmVhZGwoc21tdSwgZ3JvdXAtPnJlZyk7CisJCXZhbHVlICY9IH5TTU1VX0FTSURfTUFTSzsKKwkJdmFsdWUgfD0gU01NVV9BU0lEX1ZBTFVFKGFzaWQpOworCQl2YWx1ZSAmPSB+U01NVV9BU0lEX0VOQUJMRTsKKwkJc21tdV93cml0ZWwoc21tdSwgdmFsdWUsIGdyb3VwLT5yZWcpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzbW11LT5zb2MtPm51bV9jbGllbnRzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHRlZ3JhX21jX2NsaWVudCAqY2xpZW50ID0gJnNtbXUtPnNvYy0+Y2xpZW50c1tpXTsKKworCQlpZiAoY2xpZW50LT5zd2dyb3VwICE9IHN3Z3JvdXApCisJCQljb250aW51ZTsKKworCQl2YWx1ZSA9IHNtbXVfcmVhZGwoc21tdSwgY2xpZW50LT5zbW11LnJlZyk7CisJCXZhbHVlICY9IH5CSVQoY2xpZW50LT5zbW11LmJpdCk7CisJCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBjbGllbnQtPnNtbXUucmVnKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfc21tdV9hc19wcmVwYXJlKHN0cnVjdCB0ZWdyYV9zbW11ICpzbW11LAorCQkJCSBzdHJ1Y3QgdGVncmFfc21tdV9hcyAqYXMpCit7CisJdTMyIHZhbHVlOwogCWludCBlcnI7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc21tdS0+bG9jaywgZmxhZ3MpOwotCWVyciA9IHNtbXVfc2V0dXBfcmVncyhzbW11KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbW11LT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCB0ZWdyYV9zbW11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0JaW50IGksIGFzaWRzLCBlcnIgPSAwOwotCWRtYV9hZGRyX3QgdW5pbml0aWFsaXplZF92YXIoYmFzZSk7Ci0Jc2l6ZV90IGJ5dGVzLCB1bmluaXRpYWxpemVkX3ZhcihzaXplKTsKLQotCWlmIChzbW11X2hhbmRsZSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlCVUlMRF9CVUdfT04oUEFHRV9TSElGVCAhPSBTTU1VX1BBR0VfU0hJRlQpOwotCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm52aWRpYSwjYXNpZHMiLCAmYXNpZHMpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWJ5dGVzID0gc2l6ZW9mKCpzbW11KSArIGFzaWRzICogc2l6ZW9mKCpzbW11LT5hcyk7Ci0Jc21tdSA9IGRldm1fa3phbGxvYyhkZXYsIGJ5dGVzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNtbXUpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgc21tdV9kZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoYXMtPnVzZV9jb3VudCA+IDApIHsKKwkJYXMtPnVzZV9jb3VudCsrOworCQlyZXR1cm4gMDsKIAl9CiAKLQlzbW11LT5ucmVncyA9IHBkZXYtPm51bV9yZXNvdXJjZXM7Ci0Jc21tdS0+cmVncyA9IGRldm1fa3phbGxvYyhkZXYsIDIgKiBzbW11LT5ucmVncyAqIHNpemVvZigqc21tdS0+cmVncyksCi0JCQkJICBHRlBfS0VSTkVMKTsKLQlzbW11LT5yZWdlID0gc21tdS0+cmVncyArIHNtbXUtPm5yZWdzOwotCWlmICghc21tdS0+cmVncykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZm9yIChpID0gMDsgaSA8IHNtbXUtPm5yZWdzOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKLQkJc21tdS0+cmVnc1tpXSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwotCQlpZiAoSVNfRVJSKHNtbXUtPnJlZ3NbaV0pKQotCQkJcmV0dXJuIFBUUl9FUlIoc21tdS0+cmVnc1tpXSk7Ci0JCXNtbXUtPnJlZ2VbaV0gPSBzbW11LT5yZWdzW2ldICsgcmVzb3VyY2Vfc2l6ZShyZXMpIC0gMTsKLQl9Ci0JLyogU2FtZSBhcyAibWMiIDFzdCByZWdpdGVyIGJsb2NrIHN0YXJ0IGFkZHJlc3MgKi8KLQlzbW11LT5yZWdiYXNlID0gKHZvaWQgX19pb21lbSAqKSgodTMyKXNtbXUtPnJlZ3NbMF0gJiBQQUdFX01BU0spOwotCi0JZXJyID0gb2ZfZ2V0X2RtYV93aW5kb3coZGV2LT5vZl9ub2RlLCBOVUxMLCAwLCBOVUxMLCAmYmFzZSwgJnNpemUpOwotCWlmIChlcnIpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKHNpemUgJiBTTU1VX1BBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzaXplID4+PSBTTU1VX1BBR0VfU0hJRlQ7Ci0JaWYgKCFzaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNtbXUtPmFoYiA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAibnZpZGlhLGFoYiIsIDApOwotCWlmICghc21tdS0+YWhiKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXNtbXUtPmRldiA9IGRldjsKLQlzbW11LT5udW1fYXMgPSBhc2lkczsKLQlzbW11LT5pb3ZtbV9iYXNlID0gYmFzZTsKLQlzbW11LT5wYWdlX2NvdW50ID0gc2l6ZTsKLQotCXNtbXUtPnRyYW5zbGF0aW9uX2VuYWJsZV8wID0gfjA7Ci0Jc21tdS0+dHJhbnNsYXRpb25fZW5hYmxlXzEgPSB+MDsKLQlzbW11LT50cmFuc2xhdGlvbl9lbmFibGVfMiA9IH4wOwotCXNtbXUtPmFzaWRfc2VjdXJpdHkgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IHNtbXUtPm51bV9hczsgaSsrKSB7Ci0JCXN0cnVjdCBzbW11X2FzICphcyA9ICZzbW11LT5hc1tpXTsKLQotCQlhcy0+c21tdSA9IHNtbXU7Ci0JCWFzLT5hc2lkID0gaTsKLQkJYXMtPnBkaXJfYXR0ciA9IF9QRElSX0FUVFI7Ci0JCWFzLT5wZGVfYXR0ciA9IF9QREVfQVRUUjsKLQkJYXMtPnB0ZV9hdHRyID0gX1BURV9BVFRSOwotCi0JCXNwaW5fbG9ja19pbml0KCZhcy0+bG9jayk7Ci0JCXNwaW5fbG9ja19pbml0KCZhcy0+Y2xpZW50X2xvY2spOwotCQlJTklUX0xJU1RfSEVBRCgmYXMtPmNsaWVudCk7Ci0JfQotCXNwaW5fbG9ja19pbml0KCZzbW11LT5sb2NrKTsKLQllcnIgPSBzbW11X3NldHVwX3JlZ3Moc21tdSk7Ci0JaWYgKGVycikKKwllcnIgPSB0ZWdyYV9zbW11X2FsbG9jX2FzaWQoc21tdSwgJmFzLT5pZCk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc21tdSk7CiAKLQlzbW11LT5hdnBfdmVjdG9yX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCWlmICghc21tdS0+YXZwX3ZlY3Rvcl9wYWdlKQorCXNtbXUtPnNvYy0+b3BzLT5mbHVzaF9kY2FjaGUoYXMtPnBkLCAwLCBTTU1VX1NJWkVfUEQpOworCXNtbXVfZmx1c2hfcHRjKHNtbXUsIGFzLT5wZCwgMCk7CisJc21tdV9mbHVzaF90bGJfYXNpZChzbW11LCBhcy0+aWQpOworCisJc21tdV93cml0ZWwoc21tdSwgYXMtPmlkICYgMHg3ZiwgU01NVV9QVEJfQVNJRCk7CisJdmFsdWUgPSBTTU1VX1BUQl9EQVRBX1ZBTFVFKGFzLT5wZCwgYXMtPmF0dHIpOworCXNtbXVfd3JpdGVsKHNtbXUsIHZhbHVlLCBTTU1VX1BUQl9EQVRBKTsKKwlzbW11X2ZsdXNoKHNtbXUpOworCisJYXMtPnNtbXUgPSBzbW11OworCWFzLT51c2VfY291bnQrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9zbW11X2FzX3VucHJlcGFyZShzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSwKKwkJCQkgICAgc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzKQoreworCWlmICgtLWFzLT51c2VfY291bnQgPiAwKQorCQlyZXR1cm47CisKKwl0ZWdyYV9zbW11X2ZyZWVfYXNpZChzbW11LCBhcy0+aWQpOworCWFzLT5zbW11ID0gTlVMTDsKK30KKworc3RhdGljIGludCB0ZWdyYV9zbW11X2F0dGFjaF9kZXYoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUgPSBkZXYtPmFyY2hkYXRhLmlvbW11OworCXN0cnVjdCB0ZWdyYV9zbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgYXJnczsKKwl1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworCWludCBlcnIgPSAwOworCisJd2hpbGUgKCFvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyhucCwgImlvbW11cyIsICIjaW9tbXUtY2VsbHMiLCBpbmRleCwKKwkJCQkJICAgJmFyZ3MpKSB7CisJCXVuc2lnbmVkIGludCBzd2dyb3VwID0gYXJncy5hcmdzWzBdOworCisJCWlmIChhcmdzLm5wICE9IHNtbXUtPmRldi0+b2Zfbm9kZSkgeworCQkJb2Zfbm9kZV9wdXQoYXJncy5ucCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW9mX25vZGVfcHV0KGFyZ3MubnApOworCisJCWVyciA9IHRlZ3JhX3NtbXVfYXNfcHJlcGFyZShzbW11LCBhcyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCQl0ZWdyYV9zbW11X2VuYWJsZShzbW11LCBzd2dyb3VwLCBhcy0+aWQpOworCQlpbmRleCsrOworCX0KKworCWlmIChpbmRleCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9zbW11X2RldGFjaF9kZXYoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXUgPSBhcy0+c21tdTsKKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7CisJdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKworCXdoaWxlICghb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MobnAsICJpb21tdXMiLCAiI2lvbW11LWNlbGxzIiwgaW5kZXgsCisJCQkJCSAgICZhcmdzKSkgeworCQl1bnNpZ25lZCBpbnQgc3dncm91cCA9IGFyZ3MuYXJnc1swXTsKKworCQlpZiAoYXJncy5ucCAhPSBzbW11LT5kZXYtPm9mX25vZGUpIHsKKwkJCW9mX25vZGVfcHV0KGFyZ3MubnApOworCQkJY29udGludWU7CisJCX0KKworCQlvZl9ub2RlX3B1dChhcmdzLm5wKTsKKworCQl0ZWdyYV9zbW11X2Rpc2FibGUoc21tdSwgc3dncm91cCwgYXMtPmlkKTsKKwkJdGVncmFfc21tdV9hc191bnByZXBhcmUoc21tdSwgYXMpOworCQlpbmRleCsrOworCX0KK30KKworc3RhdGljIHUzMiAqYXNfZ2V0X3B0ZShzdHJ1Y3QgdGVncmFfc21tdV9hcyAqYXMsIGRtYV9hZGRyX3QgaW92YSwKKwkJICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXApCit7CisJdTMyICpwZCA9IHBhZ2VfYWRkcmVzcyhhcy0+cGQpLCAqcHQsICpjb3VudDsKKwl1MzIgcGRlID0gKGlvdmEgPj4gU01NVV9QREVfU0hJRlQpICYgMHgzZmY7CisJdTMyIHB0ZSA9IChpb3ZhID4+IFNNTVVfUFRFX1NISUZUKSAmIDB4M2ZmOworCXN0cnVjdCB0ZWdyYV9zbW11ICpzbW11ID0gYXMtPnNtbXU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAocGRbcGRlXSA9PSAwKSB7CisJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9ETUEpOworCQlpZiAoIXBhZ2UpCisJCQlyZXR1cm4gTlVMTDsKKworCQlwdCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOworCisJCWZvciAoaSA9IDA7IGkgPCBTTU1VX05VTV9QVEU7IGkrKykKKwkJCXB0W2ldID0gMDsKKworCQlzbW11LT5zb2MtPm9wcy0+Zmx1c2hfZGNhY2hlKHBhZ2UsIDAsIFNNTVVfU0laRV9QVCk7CisKKwkJcGRbcGRlXSA9IFNNTVVfTUtfUERFKHBhZ2UsIFNNTVVfUERFX0FUVFIgfCBTTU1VX1BERV9ORVhUKTsKKworCQlzbW11LT5zb2MtPm9wcy0+Zmx1c2hfZGNhY2hlKGFzLT5wZCwgcGRlIDw8IDIsIDQpOworCQlzbW11X2ZsdXNoX3B0YyhzbW11LCBhcy0+cGQsIHBkZSA8PCAyKTsKKwkJc21tdV9mbHVzaF90bGJfc2VjdGlvbihzbW11LCBhcy0+aWQsIGlvdmEpOworCQlzbW11X2ZsdXNoKHNtbXUpOworCX0gZWxzZSB7CisJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZFtwZGVdICYgU01NVV9QRk5fTUFTSyk7CisJCXB0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCX0KKworCSpwYWdlcCA9IHBhZ2U7CisKKwkvKiBLZWVwIHRyYWNrIG9mIGVudHJpZXMgaW4gdGhpcyBwYWdlIHRhYmxlLiAqLworCWNvdW50ID0gcGFnZV9hZGRyZXNzKGFzLT5jb3VudCk7CisJaWYgKHB0W3B0ZV0gPT0gMCkKKwkJY291bnRbcGRlXSsrOworCisJcmV0dXJuICZwdFtwdGVdOworfQorCitzdGF0aWMgdm9pZCBhc19wdXRfcHRlKHN0cnVjdCB0ZWdyYV9zbW11X2FzICphcywgZG1hX2FkZHJfdCBpb3ZhKQoreworCXUzMiBwZGUgPSAoaW92YSA+PiBTTU1VX1BERV9TSElGVCkgJiAweDNmZjsKKwl1MzIgcHRlID0gKGlvdmEgPj4gU01NVV9QVEVfU0hJRlQpICYgMHgzZmY7CisJdTMyICpjb3VudCA9IHBhZ2VfYWRkcmVzcyhhcy0+Y291bnQpOworCXUzMiAqcGQgPSBwYWdlX2FkZHJlc3MoYXMtPnBkKSwgKnB0OworCXN0cnVjdCBwYWdlICpwYWdlOworCisJcGFnZSA9IHBmbl90b19wYWdlKHBkW3BkZV0gJiBTTU1VX1BGTl9NQVNLKTsKKwlwdCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKworCS8qCisJICogV2hlbiBubyBlbnRyaWVzIGluIHRoaXMgcGFnZSB0YWJsZSBhcmUgdXNlZCBhbnltb3JlLCByZXR1cm4gdGhlCisJICogbWVtb3J5IHBhZ2UgdG8gdGhlIHN5c3RlbS4KKwkgKi8KKwlpZiAocHRbcHRlXSAhPSAwKSB7CisJCWlmICgtLWNvdW50W3BkZV0gPT0gMCkgeworCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7CisJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJCXBkW3BkZV0gPSAwOworCQl9CisKKwkJcHRbcHRlXSA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IHRlZ3JhX3NtbXVfbWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAorCQkJICBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBwcm90KQoreworCXN0cnVjdCB0ZWdyYV9zbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKKwlzdHJ1Y3QgdGVncmFfc21tdSAqc21tdSA9IGFzLT5zbW11OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXN0cnVjdCBwYWdlICpwYWdlOworCXUzMiAqcHRlOworCisJcHRlID0gYXNfZ2V0X3B0ZShhcywgaW92YSwgJnBhZ2UpOworCWlmICghcHRlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNtbXVfZGVidWdmc19jcmVhdGUoc21tdSk7Ci0Jc21tdV9oYW5kbGUgPSBzbW11OwotCWJ1c19zZXRfaW9tbXUoJnBsYXRmb3JtX2J1c190eXBlLCAmc21tdV9pb21tdV9vcHMpOworCSpwdGUgPSBfX3BoeXNfdG9fcGZuKHBhZGRyKSB8IFNNTVVfUFRFX0FUVFI7CisJb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocHRlKTsKKworCXNtbXUtPnNvYy0+b3BzLT5mbHVzaF9kY2FjaGUocGFnZSwgb2Zmc2V0LCA0KTsKKwlzbW11X2ZsdXNoX3B0YyhzbW11LCBwYWdlLCBvZmZzZXQpOworCXNtbXVfZmx1c2hfdGxiX2dyb3VwKHNtbXUsIGFzLT5pZCwgaW92YSk7CisJc21tdV9mbHVzaChzbW11KTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlZ3JhX3NtbXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgc2l6ZV90IHRlZ3JhX3NtbXVfdW5tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCisJCQkgICAgICAgc2l6ZV90IHNpemUpCiB7Ci0Jc3RydWN0IHNtbXVfZGV2aWNlICpzbW11ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IGk7CisJc3RydWN0IHRlZ3JhX3NtbXVfYXMgKmFzID0gZG9tYWluLT5wcml2OworCXN0cnVjdCB0ZWdyYV9zbW11ICpzbW11ID0gYXMtPnNtbXU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdTMyICpwdGU7CiAKLQlzbW11X2RlYnVnZnNfZGVsZXRlKHNtbXUpOworCXB0ZSA9IGFzX2dldF9wdGUoYXMsIGlvdmEsICZwYWdlKTsKKwlpZiAoIXB0ZSkKKwkJcmV0dXJuIDA7CiAKLQlzbW11X3dyaXRlKHNtbXUsIFNNTVVfQ09ORklHX0RJU0FCTEUsIFNNTVVfQ09ORklHKTsKLQlmb3IgKGkgPSAwOyBpIDwgc21tdS0+bnVtX2FzOyBpKyspCi0JCWZyZWVfcGRpcigmc21tdS0+YXNbaV0pOwotCV9fZnJlZV9wYWdlKHNtbXUtPmF2cF92ZWN0b3JfcGFnZSk7Ci0Jc21tdV9oYW5kbGUgPSBOVUxMOworCW9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHB0ZSk7CisJYXNfcHV0X3B0ZShhcywgaW92YSk7CisKKwlzbW11LT5zb2MtPm9wcy0+Zmx1c2hfZGNhY2hlKHBhZ2UsIG9mZnNldCwgNCk7CisJc21tdV9mbHVzaF9wdGMoc21tdSwgcGFnZSwgb2Zmc2V0KTsKKwlzbW11X2ZsdXNoX3RsYl9ncm91cChzbW11LCBhcy0+aWQsIGlvdmEpOworCXNtbXVfZmx1c2goc21tdSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHBoeXNfYWRkcl90IHRlZ3JhX3NtbXVfaW92YV90b19waHlzKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCQkJICAgZG1hX2FkZHJfdCBpb3ZhKQoreworCXN0cnVjdCB0ZWdyYV9zbW11X2FzICphcyA9IGRvbWFpbi0+cHJpdjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBsb25nIHBmbjsKKwl1MzIgKnB0ZTsKKworCXB0ZSA9IGFzX2dldF9wdGUoYXMsIGlvdmEsICZwYWdlKTsKKwlwZm4gPSAqcHRlICYgU01NVV9QRk5fTUFTSzsKKworCXJldHVybiBQRk5fUEhZUyhwZm4pOworfQorCitzdGF0aWMgc3RydWN0IHRlZ3JhX3NtbXUgKnRlZ3JhX3NtbXVfZmluZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHRlZ3JhX21jICptYzsKKworCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5wKTsKKwlpZiAoIXBkZXYpCisJCXJldHVybiBOVUxMOworCisJbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIW1jKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBtYy0+c21tdTsKK30KKworc3RhdGljIGludCB0ZWdyYV9zbW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmdzOworCXVuc2lnbmVkIGludCBpbmRleCA9IDA7CisKKwl3aGlsZSAob2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MobnAsICJpb21tdXMiLCAiI2lvbW11LWNlbGxzIiwgaW5kZXgsCisJCQkJCSAgJmFyZ3MpID09IDApIHsKKwkJc3RydWN0IHRlZ3JhX3NtbXUgKnNtbXU7CisKKwkJc21tdSA9IHRlZ3JhX3NtbXVfZmluZChhcmdzLm5wKTsKKwkJaWYgKHNtbXUpIHsKKwkJCS8qCisJCQkgKiBPbmx5IGEgc2luZ2xlIElPTU1VIG1hc3RlciBpbnRlcmZhY2UgaXMgY3VycmVudGx5CisJCQkgKiBzdXBwb3J0ZWQgYnkgdGhlIExpbnV4IGtlcm5lbCwgc28gYWJvcnQgYWZ0ZXIgdGhlCisJCQkgKiBmaXJzdCBtYXRjaC4KKwkJCSAqLworCQkJZGV2LT5hcmNoZGF0YS5pb21tdSA9IHNtbXU7CisJCQlicmVhazsKKwkJfQorCisJCWluZGV4Kys7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0ZWdyYV9zbW11X3BtX29wcyA9IHsKLQkuc3VzcGVuZAk9IHRlZ3JhX3NtbXVfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHRlZ3JhX3NtbXVfcmVzdW1lLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGVncmFfc21tdV9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMzAtc21tdSIsIH0sCi0JeyB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRlZ3JhX3NtbXVfb2ZfbWF0Y2gpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV9zbW11X2RyaXZlciA9IHsKLQkucHJvYmUJCT0gdGVncmFfc21tdV9wcm9iZSwKLQkucmVtb3ZlCQk9IHRlZ3JhX3NtbXVfcmVtb3ZlLAotCS5kcml2ZXIgPSB7Ci0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJ0ZWdyYS1zbW11IiwKLQkJLnBtCT0gJnRlZ3JhX3NtbXVfcG1fb3BzLAotCQkub2ZfbWF0Y2hfdGFibGUgPSB0ZWdyYV9zbW11X29mX21hdGNoLAotCX0sCi19OwotCi1zdGF0aWMgaW50IHRlZ3JhX3NtbXVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgdGVncmFfc21tdV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0ZWdyYV9zbW11X2RyaXZlcik7CisJZGV2LT5hcmNoZGF0YS5pb21tdSA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB0ZWdyYV9zbW11X2V4aXQodm9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIHRlZ3JhX3NtbXVfb3BzID0geworCS5jYXBhYmxlID0gdGVncmFfc21tdV9jYXBhYmxlLAorCS5kb21haW5faW5pdCA9IHRlZ3JhX3NtbXVfZG9tYWluX2luaXQsCisJLmRvbWFpbl9kZXN0cm95ID0gdGVncmFfc21tdV9kb21haW5fZGVzdHJveSwKKwkuYXR0YWNoX2RldiA9IHRlZ3JhX3NtbXVfYXR0YWNoX2RldiwKKwkuZGV0YWNoX2RldiA9IHRlZ3JhX3NtbXVfZGV0YWNoX2RldiwKKwkuYWRkX2RldmljZSA9IHRlZ3JhX3NtbXVfYWRkX2RldmljZSwKKwkucmVtb3ZlX2RldmljZSA9IHRlZ3JhX3NtbXVfcmVtb3ZlX2RldmljZSwKKwkubWFwID0gdGVncmFfc21tdV9tYXAsCisJLnVubWFwID0gdGVncmFfc21tdV91bm1hcCwKKwkubWFwX3NnID0gZGVmYXVsdF9pb21tdV9tYXBfc2csCisJLmlvdmFfdG9fcGh5cyA9IHRlZ3JhX3NtbXVfaW92YV90b19waHlzLAorCisJLnBnc2l6ZV9iaXRtYXAgPSBTWl80SywKK307CisKK3N0YXRpYyB2b2lkIHRlZ3JhX3NtbXVfYWhiX2VuYWJsZSh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9zbW11X2RyaXZlcik7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWhiX21hdGNoW10gPSB7CisJCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMzAtYWhiIiwgfSwKKwkJeyB9CisJfTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFoYjsKKworCWFoYiA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBhaGJfbWF0Y2gpOworCWlmIChhaGIpIHsKKwkJdGVncmFfYWhiX2VuYWJsZV9zbW11KGFoYik7CisJCW9mX25vZGVfcHV0KGFoYik7CisJfQogfQogCi1zdWJzeXNfaW5pdGNhbGwodGVncmFfc21tdV9pbml0KTsKLW1vZHVsZV9leGl0KHRlZ3JhX3NtbXVfZXhpdCk7CitzdHJ1Y3QgdGVncmFfc21tdSAqdGVncmFfc21tdV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3NvYyAqc29jLAorCQkJCSAgICBzdHJ1Y3QgdGVncmFfbWMgKm1jKQoreworCXN0cnVjdCB0ZWdyYV9zbW11ICpzbW11OworCXNpemVfdCBzaXplOworCXUzMiB2YWx1ZTsKKwlpbnQgZXJyOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oIklPTU1VIEFQSSBmb3IgU01NVSBpbiBUZWdyYTMwIik7Ci1NT0RVTEVfQVVUSE9SKCJIaXJvc2hpIERPWVUgPGhkb3l1QG52aWRpYS5jb20+Iik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOnRlZ3JhLXNtbXUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKwkvKiBUaGlzIGNhbiBoYXBwZW4gb24gVGVncmEyMCB3aGljaCBkb2Vzbid0IGhhdmUgYW4gU01NVSAqLworCWlmICghc29jKQorCQlyZXR1cm4gTlVMTDsKKworCXNtbXUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnNtbXUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNtbXUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJLyoKKwkgKiBUaGlzIGlzIGEgYml0IG9mIGEgaGFjay4gSWRlYWxseSB3ZSdkIHdhbnQgdG8gc2ltcGx5IHJldHVybiB0aGlzCisJICogdmFsdWUuIEhvd2V2ZXIgdGhlIElPTU1VIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpbGwgYXR0ZW1wdCB0byBhZGQKKwkgKiBhbGwgZGV2aWNlcyB0byB0aGUgSU9NTVUgd2hlbiBidXNfc2V0X2lvbW11KCkgaXMgY2FsbGVkLiBJbiBvcmRlcgorCSAqIG5vdCB0byByZWx5IG9uIGdsb2JhbCB2YXJpYWJsZXMgdG8gdHJhY2sgdGhlIElPTU1VIGluc3RhbmNlLCB3ZQorCSAqIHNldCBpdCBoZXJlIHNvIHRoYXQgaXQgY2FuIGJlIGxvb2tlZCB1cCBmcm9tIHRoZSAuYWRkX2RldmljZSgpCisJICogY2FsbGJhY2sgdmlhIHRoZSBJT01NVSBkZXZpY2UncyAuZHJ2ZGF0YSBmaWVsZC4KKwkgKi8KKwltYy0+c21tdSA9IHNtbXU7CisKKwlzaXplID0gQklUU19UT19MT05HUyhzb2MtPm51bV9hc2lkcykgKiBzaXplb2YobG9uZyk7CisKKwlzbW11LT5hc2lkcyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemUsIEdGUF9LRVJORUwpOworCWlmICghc21tdS0+YXNpZHMpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbXV0ZXhfaW5pdCgmc21tdS0+bG9jayk7CisKKwlzbW11LT5yZWdzID0gbWMtPnJlZ3M7CisJc21tdS0+c29jID0gc29jOworCXNtbXUtPmRldiA9IGRldjsKKwlzbW11LT5tYyA9IG1jOworCisJdmFsdWUgPSBTTU1VX1BUQ19DT05GSUdfRU5BQkxFIHwgU01NVV9QVENfQ09ORklHX0lOREVYX01BUCgweDNmKTsKKworCWlmIChzb2MtPnN1cHBvcnRzX3JlcXVlc3RfbGltaXQpCisJCXZhbHVlIHw9IFNNTVVfUFRDX0NPTkZJR19SRVFfTElNSVQoOCk7CisKKwlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9QVENfQ09ORklHKTsKKworCXZhbHVlID0gU01NVV9UTEJfQ09ORklHX0hJVF9VTkRFUl9NSVNTIHwKKwkJU01NVV9UTEJfQ09ORklHX0FDVElWRV9MSU5FUygweDIwKTsKKworCWlmIChzb2MtPnN1cHBvcnRzX3JvdW5kX3JvYmluX2FyYml0cmF0aW9uKQorCQl2YWx1ZSB8PSBTTU1VX1RMQl9DT05GSUdfUk9VTkRfUk9CSU5fQVJCSVRSQVRJT047CisKKwlzbW11X3dyaXRlbChzbW11LCB2YWx1ZSwgU01NVV9UTEJfQ09ORklHKTsKKworCXNtbXVfZmx1c2hfcHRjKHNtbXUsIE5VTEwsIDApOworCXNtbXVfZmx1c2hfdGxiKHNtbXUpOworCXNtbXVfd3JpdGVsKHNtbXUsIFNNTVVfQ09ORklHX0VOQUJMRSwgU01NVV9DT05GSUcpOworCXNtbXVfZmx1c2goc21tdSk7CisKKwl0ZWdyYV9zbW11X2FoYl9lbmFibGUoKTsKKworCWVyciA9IGJ1c19zZXRfaW9tbXUoJnBsYXRmb3JtX2J1c190eXBlLCAmdGVncmFfc21tdV9vcHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJcmV0dXJuIHNtbXU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvS2NvbmZpZyBiL2RyaXZlcnMvaXJxY2hpcC9LY29uZmlnCmluZGV4IGIyMWYxMmYuLjllZmU1ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9LY29uZmlnCkBAIC00OCwxNCArNDgsMTkgQEAKIAlzZWxlY3QgTVVMVElfSVJRX0hBTkRMRVIKIAlzZWxlY3QgU1BBUlNFX0lSUQogCitjb25maWcgQkNNNzEyMF9MMl9JUlEKKwlib29sCisJc2VsZWN0IEdFTkVSSUNfSVJRX0NISVAKKwlzZWxlY3QgSVJRX0RPTUFJTgorCiBjb25maWcgQlJDTVNUQl9MMl9JUlEKIAlib29sCi0JZGVwZW5kcyBvbiBBUk0KIAlzZWxlY3QgR0VORVJJQ19JUlFfQ0hJUAogCXNlbGVjdCBJUlFfRE9NQUlOCiAKIGNvbmZpZyBEV19BUEJfSUNUTAogCWJvb2wKKwlzZWxlY3QgR0VORVJJQ19JUlFfQ0hJUAogCXNlbGVjdCBJUlFfRE9NQUlOCiAKIGNvbmZpZyBJTUdQRENfSVJRCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUgYi9kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUKaW5kZXggMTczYmI1Zi4uZjA5MDlkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZQpAQCAtMzUsNiArMzUsNiBAQAogb2JqLSQoQ09ORklHX1hURU5TQSkJCQkrPSBpcnEteHRlbnNhLXBpYy5vCiBvYmotJChDT05GSUdfWFRFTlNBX01YKQkJCSs9IGlycS14dGVuc2EtbXgubwogb2JqLSQoQ09ORklHX0lSUV9DUk9TU0JBUikJCSs9IGlycS1jcm9zc2Jhci5vCi1vYmotJChDT05GSUdfQlJDTVNUQl9MMl9JUlEpCQkrPSBpcnEtYnJjbXN0Yi1sMi5vIFwKLQkJCQkJICAgaXJxLWJjbTcxMjAtbDIubworb2JqLSQoQ09ORklHX0JDTTcxMjBfTDJfSVJRKQkJKz0gaXJxLWJjbTcxMjAtbDIubworb2JqLSQoQ09ORklHX0JSQ01TVEJfTDJfSVJRKQkJKz0gaXJxLWJyY21zdGItbDIubwogb2JqLSQoQ09ORklHX0tFWVNUT05FX0lSUSkJCSs9IGlycS1rZXlzdG9uZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWFybWFkYS0zNzAteHAuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXJtYWRhLTM3MC14cC5jCmluZGV4IDZhMmUxNjguLjQ2M2MyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXJtYWRhLTM3MC14cC5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXJtYWRhLTM3MC14cC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9leGNlcHRpb24uaD4KQEAgLTY3LDYgKzY4LDcgQEAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnBlcl9jcHVfaW50X2Jhc2U7CiBzdGF0aWMgdm9pZCBfX2lvbWVtICptYWluX2ludF9iYXNlOwogc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluICphcm1hZGFfMzcwX3hwX21waWNfZG9tYWluOworc3RhdGljIHUzMiBkb29yYmVsbF9tYXNrX3JlZzsKICNpZmRlZiBDT05GSUdfUENJX01TSQogc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluICphcm1hZGFfMzcwX3hwX21zaV9kb21haW47CiBzdGF0aWMgREVDTEFSRV9CSVRNQVAobXNpX3VzZWQsIFBDSV9NU0lfRE9PUkJFTExfTlIpOwpAQCAtMTMwLDcgKzEzMiw3IEBACiAJbXV0ZXhfdW5sb2NrKCZtc2lfdXNlZF9sb2NrKTsKIH0KIAotc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX3NldHVwX21zaV9pcnEoc3RydWN0IG1zaV9jaGlwICpjaGlwLAorc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX3NldHVwX21zaV9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAogCQkJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgICAgc3RydWN0IG1zaV9kZXNjICpkZXNjKQogewpAQCAtMTU3LDExICsxNTksMTEgQEAKIAltc2cuYWRkcmVzc19oaSA9IDA7CiAJbXNnLmRhdGEgPSAweGYwMCB8IChod2lycSArIDE2KTsKIAotCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFybWFkYV8zNzBfeHBfdGVhcmRvd25fbXNpX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsCitzdGF0aWMgdm9pZCBhcm1hZGFfMzcwX3hwX3RlYXJkb3duX21zaV9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAogCQkJCQkgICB1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBpcnFfZGF0YSAqZCA9IGlycV9nZXRfaXJxX2RhdGEoaXJxKTsKQEAgLTE3MywxMCArMTc1LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYXJtYWRhXzM3MF94cF9tc2lfaXJxX2NoaXAgPSB7CiAJLm5hbWUgPSAiYXJtYWRhXzM3MF94cF9tc2lfaXJxIiwKLQkuaXJxX2VuYWJsZSA9IHVubWFza19tc2lfaXJxLAotCS5pcnFfZGlzYWJsZSA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX21hc2sgPSBtYXNrX21zaV9pcnEsCi0JLmlycV91bm1hc2sgPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX2VuYWJsZSA9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2Rpc2FibGUgPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfbWFzayA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBwY2lfbXNpX3VubWFza19pcnEsCiB9OwogCiBzdGF0aWMgaW50IGFybWFkYV8zNzBfeHBfbXNpX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwKQEAgLTE5Niw3ICsxOTgsNyBAQAogc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX21zaV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIAkJCQkgIHBoeXNfYWRkcl90IG1haW5faW50X3BoeXNfYmFzZSkKIHsKLQlzdHJ1Y3QgbXNpX2NoaXAgKm1zaV9jaGlwOworCXN0cnVjdCBtc2lfY29udHJvbGxlciAqbXNpX2NoaXA7CiAJdTMyIHJlZzsKIAlpbnQgcmV0OwogCkBAIC0yNjYsNyArMjY4LDcgQEAKIAl3cml0ZWwocmVnLCBtYWluX2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTlRfU09VUkNFX0NUTChod2lycSkpOwogCXJhd19zcGluX3VubG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gSVJRX1NFVF9NQVNLX09LOwogfQogI2VuZGlmCiAKQEAgLTQ4NSw2ICs0ODcsNTQgQEAKIAl9IHdoaWxlICgxKTsKIH0KIAorc3RhdGljIGludCBhcm1hZGFfMzcwX3hwX21waWNfc3VzcGVuZCh2b2lkKQoreworCWRvb3JiZWxsX21hc2tfcmVnID0gcmVhZGwocGVyX2NwdV9pbnRfYmFzZSArCisJCQkJICBBUk1BREFfMzcwX1hQX0lOX0RSQkVMX01TS19PRkZTKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXJtYWRhXzM3MF94cF9tcGljX3Jlc3VtZSh2b2lkKQoreworCWludCBuaXJxczsKKwlpcnFfaHdfbnVtYmVyX3QgaXJxOworCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMgKi8KKwluaXJxcyA9IChyZWFkbChtYWluX2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTlRfQ09OVFJPTCkgPj4gMikgJiAweDNmZjsKKwlmb3IgKGlycSA9IDA7IGlycSA8IG5pcnFzOyBpcnErKykgeworCQlzdHJ1Y3QgaXJxX2RhdGEgKmRhdGE7CisJCWludCB2aXJxOworCisJCXZpcnEgPSBpcnFfbGluZWFyX3Jldm1hcChhcm1hZGFfMzcwX3hwX21waWNfZG9tYWluLCBpcnEpOworCQlpZiAodmlycSA9PSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKGlycSAhPSBBUk1BREFfMzcwX1hQX1RJTUVSMF9QRVJfQ1BVX0lSUSkKKwkJCXdyaXRlbChpcnEsIHBlcl9jcHVfaW50X2Jhc2UgKworCQkJICAgICAgIEFSTUFEQV8zNzBfWFBfSU5UX0NMRUFSX01BU0tfT0ZGUyk7CisJCWVsc2UKKwkJCXdyaXRlbChpcnEsIG1haW5faW50X2Jhc2UgKworCQkJICAgICAgIEFSTUFEQV8zNzBfWFBfSU5UX1NFVF9FTkFCTEVfT0ZGUyk7CisKKwkJZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEodmlycSk7CisJCWlmICghaXJxZF9pcnFfZGlzYWJsZWQoZGF0YSkpCisJCQlhcm1hZGFfMzcwX3hwX2lycV91bm1hc2soZGF0YSk7CisJfQorCisJLyogUmVjb25maWd1cmUgZG9vcmJlbGxzIGZvciBJUElzIGFuZCBNU0lzICovCisJd3JpdGVsKGRvb3JiZWxsX21hc2tfcmVnLAorCSAgICAgICBwZXJfY3B1X2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTl9EUkJFTF9NU0tfT0ZGUyk7CisJaWYgKGRvb3JiZWxsX21hc2tfcmVnICYgSVBJX0RPT1JCRUxMX01BU0spCisJCXdyaXRlbCgwLCBwZXJfY3B1X2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTlRfQ0xFQVJfTUFTS19PRkZTKTsKKwlpZiAoZG9vcmJlbGxfbWFza19yZWcgJiBQQ0lfTVNJX0RPT1JCRUxMX01BU0spCisJCXdyaXRlbCgxLCBwZXJfY3B1X2ludF9iYXNlICsgQVJNQURBXzM3MF9YUF9JTlRfQ0xFQVJfTUFTS19PRkZTKTsKK30KKworc3RydWN0IHN5c2NvcmVfb3BzIGFybWFkYV8zNzBfeHBfbXBpY19zeXNjb3JlX29wcyA9IHsKKwkuc3VzcGVuZAk9IGFybWFkYV8zNzBfeHBfbXBpY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXJtYWRhXzM3MF94cF9tcGljX3Jlc3VtZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGFybWFkYV8zNzBfeHBfbXBpY19vZl9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIAkJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCkKIHsKQEAgLTU0MSw2ICs1OTEsOCBAQAogCQkJCQlhcm1hZGFfMzcwX3hwX21waWNfaGFuZGxlX2Nhc2NhZGVfaXJxKTsKIAl9CiAKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmYXJtYWRhXzM3MF94cF9tcGljX3N5c2NvcmVfb3BzKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy1jb21tb24uYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5jCmluZGV4IGNjNGY5ZDguLmQxMTFhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5jCkBAIC0xNjcsNiArMTY3LDMyIEBACiAJaW91bm1hcChyZWdzKTsKIH0KIAorI2RlZmluZSBBVDkxX1JUVF9NUgkJMHgwMAkJCS8qIFJlYWwtdGltZSBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfUlRUX0FMTUlFTgkJKDEgPDwgMTYpCQkvKiBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfUlRUX1JUVElOQ0lFTgkoMSA8PCAxNykJCS8qIFJlYWwgVGltZSBUaW1lciBJbmNyZW1lbnQgSW50ZXJydXB0IEVuYWJsZSAqLworCit2b2lkIF9faW5pdCBhaWNfY29tbW9uX3J0dF9pcnFfZml4dXAoc3RydWN0IGRldmljZV9ub2RlICpyb290KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJLyoKKwkgKiBUaGUgYXQ5MXNhbTkyNjMgU29DIGhhcyAyIGluc3RhbmNlcyBvZiB0aGUgUlRUIGJsb2NrLCBoZW5jZSB3ZQorCSAqIGl0ZXJhdGUgb3ZlciB0aGUgRFQgdG8gZmluZCBlYWNoIG9jY3VycmVuY2UuCisJICovCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiYXRtZWwsYXQ5MXNhbTkyNjAtcnR0IikgeworCQlyZWdzID0gb2ZfaW9tYXAobnAsIDApOworCQlpZiAoIXJlZ3MpCisJCQljb250aW51ZTsKKworCQl3cml0ZWwocmVhZGwocmVncyArIEFUOTFfUlRUX01SKSAmCisJCSAgICAgICB+KEFUOTFfUlRUX0FMTUlFTiB8IEFUOTFfUlRUX1JUVElOQ0lFTiksCisJCSAgICAgICByZWdzICsgQVQ5MV9SVFRfTVIpOworCisJCWlvdW5tYXAocmVncyk7CisJfQorfQorCiB2b2lkIF9faW5pdCBhaWNfY29tbW9uX2lycV9maXh1cChjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy1jb21tb24uaCBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5oCmluZGV4IDkwYWEwMGUuLjYwM2YwYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLWNvbW1vbi5oCkBAIC0zNCw2ICszNCw4IEBACiAKIHZvaWQgX19pbml0IGFpY19jb21tb25fcnRjX2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpOwogCit2b2lkIF9faW5pdCBhaWNfY29tbW9uX3J0dF9pcnFfZml4dXAoc3RydWN0IGRldmljZV9ub2RlICpyb290KTsKKwogdm9pZCBfX2luaXQgYWljX2NvbW1vbl9pcnFfZml4dXAoY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcyk7CiAKICNlbmRpZiAvKiBfX0lSUV9BVE1FTF9BSUNfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYy5jCmluZGV4IDlhMmNmM2MuLmRhZTM2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYXRtZWwtYWljLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWMuYwpAQCAtNjUsMTEgKzY1LDExIEBACiAJdTMyIGlycW5yOwogCXUzMiBpcnFzdGF0OwogCi0JaXJxbnIgPSBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX0lWUik7Ci0JaXJxc3RhdCA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSVNSKTsKKwlpcnFuciA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDX0lWUik7CisJaXJxc3RhdCA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDX0lTUik7CiAKIAlpZiAoIWlycXN0YXQpCi0JCWlycV9yZWdfd3JpdGVsKDAsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX0VPSUNSKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIDAsIEFUOTFfQUlDX0VPSUNSKTsKIAllbHNlCiAJCWhhbmRsZV9kb21haW5faXJxKGFpY19kb21haW4sIGlycW5yLCByZWdzKTsKIH0KQEAgLTgwLDcgKzgwLDcgQEAKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHQgb24gQUlDNSAqLwogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChkLT5tYXNrLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JU0NSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZC0+bWFzaywgQVQ5MV9BSUNfSVNDUik7CiAJaXJxX2djX3VubG9jayhnYyk7CiAKIAlyZXR1cm4gMDsKQEAgLTkyLDEyICs5MiwxMiBAQAogCXVuc2lnbmVkIGludCBzbXI7CiAJaW50IHJldDsKIAotCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfU01SKGQtPmh3aXJxKSk7CisJc21yID0gaXJxX3JlZ19yZWFkbChnYywgQVQ5MV9BSUNfU01SKGQtPmh3aXJxKSk7CiAJcmV0ID0gYWljX2NvbW1vbl9zZXRfdHlwZShkLCB0eXBlLCAmc21yKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaXJxX3JlZ193cml0ZWwoc21yLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19TTVIoZC0+aHdpcnEpKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgc21yLCBBVDkxX0FJQ19TTVIoZC0+aHdpcnEpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA4LDggKzEwOCw4IEBACiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoZ2MtPm1hc2tfY2FjaGUsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDX0lEQ1IpOwotCWlycV9yZWdfd3JpdGVsKGdjLT53YWtlX2FjdGl2ZSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSUVDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT5tYXNrX2NhY2hlLCBBVDkxX0FJQ19JRENSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZ2MtPndha2VfYWN0aXZlLCBBVDkxX0FJQ19JRUNSKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtMTE4LDggKzExOCw4IEBACiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoZ2MtPndha2VfYWN0aXZlLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19JRENSKTsKLQlpcnFfcmVnX3dyaXRlbChnYy0+bWFza19jYWNoZSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSUVDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT53YWtlX2FjdGl2ZSwgQVQ5MV9BSUNfSURDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT5tYXNrX2NhY2hlLCBBVDkxX0FJQ19JRUNSKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtMTI4LDggKzEyOCw4IEBACiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoMHhmZmZmZmZmZiwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSURDUik7Ci0JaXJxX3JlZ193cml0ZWwoMHhmZmZmZmZmZiwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSUNDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDB4ZmZmZmZmZmYsIEFUOTFfQUlDX0lEQ1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCAweGZmZmZmZmZmLCBBVDkxX0FJQ19JQ0NSKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KICNlbHNlCkBAIC0xNDgsMjQgKzE0OCwyNCBAQAogCSAqIHdpbGwgbm90IExvY2sgb3V0IG5JUlEKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlpcnFfcmVnX3dyaXRlbCgwLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19FT0lDUik7CisJCWlycV9yZWdfd3JpdGVsKGdjLCAwLCBBVDkxX0FJQ19FT0lDUik7CiAKIAkvKgogCSAqIFNwdXJpb3VzIEludGVycnVwdCBJRCBpbiBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIuCiAJICogV2hlbiB0aGVyZSBpcyBubyBjdXJyZW50IGludGVycnVwdCwgdGhlIElSUSBWZWN0b3IgUmVnaXN0ZXIKIAkgKiByZWFkcyB0aGUgdmFsdWUgc3RvcmVkIGluIEFJQ19TUFUKIAkgKi8KLQlpcnFfcmVnX3dyaXRlbCgweGZmZmZmZmZmLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19TUFUpOworCWlycV9yZWdfd3JpdGVsKGdjLCAweGZmZmZmZmZmLCBBVDkxX0FJQ19TUFUpOwogCiAJLyogTm8gZGVidWdnaW5nIGluIEFJQzogRGVidWcgKFByb3RlY3QpIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlpcnFfcmVnX3dyaXRlbCgwLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19EQ1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCAwLCBBVDkxX0FJQ19EQ1IpOwogCiAJLyogRGlzYWJsZSBhbmQgY2xlYXIgYWxsIGludGVycnVwdHMgaW5pdGlhbGx5ICovCi0JaXJxX3JlZ193cml0ZWwoMHhmZmZmZmZmZiwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSURDUik7Ci0JaXJxX3JlZ193cml0ZWwoMHhmZmZmZmZmZiwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfSUNDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDB4ZmZmZmZmZmYsIEFUOTFfQUlDX0lEQ1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCAweGZmZmZmZmZmLCBBVDkxX0FJQ19JQ0NSKTsKIAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCQlpcnFfcmVnX3dyaXRlbChpLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19TVlIoaSkpOworCQlpcnFfcmVnX3dyaXRlbChnYywgaSwgQVQ5MV9BSUNfU1ZSKGkpKTsKIH0KIAogc3RhdGljIGludCBhaWNfaXJxX2RvbWFpbl94bGF0ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwKQEAgLTE5NSwxMCArMTk1LDEwIEBACiAJZ2MgPSBkZ2MtPmdjW2lkeF07CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0Jc21yID0gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQ19TTVIoKm91dF9od2lycSkpOworCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDX1NNUigqb3V0X2h3aXJxKSk7CiAJcmV0ID0gYWljX2NvbW1vbl9zZXRfcHJpb3JpdHkoaW50c3BlY1syXSwgJnNtcik7CiAJaWYgKCFyZXQpCi0JCWlycV9yZWdfd3JpdGVsKHNtciwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUNfU01SKCpvdXRfaHdpcnEpKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIHNtciwgQVQ5MV9BSUNfU01SKCpvdXRfaHdpcnEpKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIAogCXJldHVybiByZXQ7CkBAIC0yMDksMTYgKzIwOSwzMiBAQAogCS54bGF0ZQk9IGFpY19pcnFfZG9tYWluX3hsYXRlLAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05X2FpY19pcnFfZml4dXAoc3RydWN0IGRldmljZV9ub2RlICpyb290KQorc3RhdGljIHZvaWQgX19pbml0IGF0OTFybTkyMDBfYWljX2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpCiB7CiAJYWljX2NvbW1vbl9ydGNfaXJxX2ZpeHVwKHJvb3QpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjBfYWljX2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpCit7CisJYWljX2NvbW1vbl9ydHRfaXJxX2ZpeHVwKHJvb3QpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfYWljX2lycV9maXh1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QpCit7CisJYWljX2NvbW1vbl9ydGNfaXJxX2ZpeHVwKHJvb3QpOworCWFpY19jb21tb25fcnR0X2lycV9maXh1cChyb290KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBhaWNfaXJxX2ZpeHVwc1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTlnNDUiLCAuZGF0YSA9IGF0OTFzYW05X2FpY19pcnFfZml4dXAgfSwKLQl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05bjEyIiwgLmRhdGEgPSBhdDkxc2FtOV9haWNfaXJxX2ZpeHVwIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXJsIiwgLmRhdGEgPSBhdDkxc2FtOV9haWNfaXJxX2ZpeHVwIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1IiwgLmRhdGEgPSBhdDkxc2FtOV9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwIiwgLmRhdGEgPSBhdDkxcm05MjAwX2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05ZzQ1IiwgLmRhdGEgPSBhdDkxc2FtOWc0NV9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOW4xMiIsIC5kYXRhID0gYXQ5MXJtOTIwMF9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXJsIiwgLmRhdGEgPSBhdDkxc2FtOWc0NV9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOXg1IiwgLmRhdGEgPSBhdDkxcm05MjAwX2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwIiwgLmRhdGEgPSBhdDkxc2FtOTI2MF9haWNfaXJxX2ZpeHVwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MSIsIC5kYXRhID0gYXQ5MXNhbTkyNjBfYWljX2lycV9maXh1cCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjMiLCAuZGF0YSA9IGF0OTFzYW05MjYwX2FpY19pcnFfZml4dXAgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05ZzIwIiwgLmRhdGEgPSBhdDkxc2FtOTI2MF9haWNfaXJxX2ZpeHVwIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1hdG1lbC1haWM1LmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYzUuYwppbmRleCBhMTFhYWU4Li5hMmU4YzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYzUuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWF0bWVsLWFpYzUuYwpAQCAtNzUsMTEgKzc1LDExIEBACiAJdTMyIGlycW5yOwogCXUzMiBpcnFzdGF0OwogCi0JaXJxbnIgPSBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JVlIpOwotCWlycXN0YXQgPSBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JU1IpOworCWlycW5yID0gaXJxX3JlZ19yZWFkbChnYywgQVQ5MV9BSUM1X0lWUik7CisJaXJxc3RhdCA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDNV9JU1IpOwogCiAJaWYgKCFpcnFzdGF0KQotCQlpcnFfcmVnX3dyaXRlbCgwLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfRU9JQ1IpOworCQlpcnFfcmVnX3dyaXRlbChnYywgMCwgQVQ5MV9BSUM1X0VPSUNSKTsKIAllbHNlCiAJCWhhbmRsZV9kb21haW5faXJxKGFpYzVfZG9tYWluLCBpcnFuciwgcmVncyk7CiB9CkBAIC05Miw4ICs5Miw4IEBACiAKIAkvKiBEaXNhYmxlIGludGVycnVwdCBvbiBBSUM1ICovCiAJaXJxX2djX2xvY2soZ2MpOwotCWlycV9yZWdfd3JpdGVsKGQtPmh3aXJxLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKLQlpcnFfcmVnX3dyaXRlbCgxLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfSURDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGQtPmh3aXJxLCBBVDkxX0FJQzVfU1NSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgMSwgQVQ5MV9BSUM1X0lEQ1IpOwogCWdjLT5tYXNrX2NhY2hlICY9IH5kLT5tYXNrOwogCWlycV9nY191bmxvY2soZ2MpOwogfQpAQCAtMTA2LDggKzEwNiw4IEBACiAKIAkvKiBFbmFibGUgaW50ZXJydXB0IG9uIEFJQzUgKi8KIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoZC0+aHdpcnEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOwotCWlycV9yZWdfd3JpdGVsKDEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRUNSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgZC0+aHdpcnEsIEFUOTFfQUlDNV9TU1IpOworCWlycV9yZWdfd3JpdGVsKGdjLCAxLCBBVDkxX0FJQzVfSUVDUik7CiAJZ2MtPm1hc2tfY2FjaGUgfD0gZC0+bWFzazsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KQEAgLTEyMCw4ICsxMjAsOCBAQAogCiAJLyogRW5hYmxlIGludGVycnVwdCBvbiBBSUM1ICovCiAJaXJxX2djX2xvY2soZ2MpOwotCWlycV9yZWdfd3JpdGVsKGQtPmh3aXJxLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKLQlpcnFfcmVnX3dyaXRlbCgxLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfSVNDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGQtPmh3aXJxLCBBVDkxX0FJQzVfU1NSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgMSwgQVQ5MV9BSUM1X0lTQ1IpOwogCWlycV9nY191bmxvY2soZ2MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogCWludCByZXQ7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwoZC0+aHdpcnEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOwotCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NNUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGQtPmh3aXJxLCBBVDkxX0FJQzVfU1NSKTsKKwlzbXIgPSBpcnFfcmVnX3JlYWRsKGdjLCBBVDkxX0FJQzVfU01SKTsKIAlyZXQgPSBhaWNfY29tbW9uX3NldF90eXBlKGQsIHR5cGUsICZzbXIpOwogCWlmICghcmV0KQotCQlpcnFfcmVnX3dyaXRlbChzbXIsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TTVIpOworCQlpcnFfcmVnX3dyaXRlbChnYywgc21yLCBBVDkxX0FJQzVfU01SKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIAogCXJldHVybiByZXQ7CkBAIC0xNjIsMTIgKzE2MiwxMSBAQAogCQlpZiAoKG1hc2sgJiBnYy0+bWFza19jYWNoZSkgPT0gKG1hc2sgJiBnYy0+d2FrZV9hY3RpdmUpKQogCQkJY29udGludWU7CiAKLQkJaXJxX3JlZ193cml0ZWwoaSArIGdjLT5pcnFfYmFzZSwKLQkJCSAgICAgICBiZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NTUik7CisJCWlycV9yZWdfd3JpdGVsKGJnYywgaSArIGdjLT5pcnFfYmFzZSwgQVQ5MV9BSUM1X1NTUik7CiAJCWlmIChtYXNrICYgZ2MtPndha2VfYWN0aXZlKQotCQkJaXJxX3JlZ193cml0ZWwoMSwgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRUNSKTsKKwkJCWlycV9yZWdfd3JpdGVsKGJnYywgMSwgQVQ5MV9BSUM1X0lFQ1IpOwogCQllbHNlCi0JCQlpcnFfcmVnX3dyaXRlbCgxLCBiZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lEQ1IpOworCQkJaXJxX3JlZ193cml0ZWwoYmdjLCAxLCBBVDkxX0FJQzVfSURDUik7CiAJfQogCWlycV9nY191bmxvY2soYmdjKTsKIH0KQEAgLTE4NywxMiArMTg2LDExIEBACiAJCWlmICgobWFzayAmIGdjLT5tYXNrX2NhY2hlKSA9PSAobWFzayAmIGdjLT53YWtlX2FjdGl2ZSkpCiAJCQljb250aW51ZTsKIAotCQlpcnFfcmVnX3dyaXRlbChpICsgZ2MtPmlycV9iYXNlLAotCQkJICAgICAgIGJnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKKwkJaXJxX3JlZ193cml0ZWwoYmdjLCBpICsgZ2MtPmlycV9iYXNlLCBBVDkxX0FJQzVfU1NSKTsKIAkJaWYgKG1hc2sgJiBnYy0+bWFza19jYWNoZSkKLQkJCWlycV9yZWdfd3JpdGVsKDEsIGJnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfSUVDUik7CisJCQlpcnFfcmVnX3dyaXRlbChiZ2MsIDEsIEFUOTFfQUlDNV9JRUNSKTsKIAkJZWxzZQotCQkJaXJxX3JlZ193cml0ZWwoMSwgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRENSKTsKKwkJCWlycV9yZWdfd3JpdGVsKGJnYywgMSwgQVQ5MV9BSUM1X0lEQ1IpOwogCX0KIAlpcnFfZ2NfdW5sb2NrKGJnYyk7CiB9CkBAIC0yMDcsMTAgKzIwNSw5IEBACiAKIAlpcnFfZ2NfbG9jayhiZ2MpOwogCWZvciAoaSA9IDA7IGkgPCBkZ2MtPmlycXNfcGVyX2NoaXA7IGkrKykgewotCQlpcnFfcmVnX3dyaXRlbChpICsgZ2MtPmlycV9iYXNlLAotCQkJICAgICAgIGJnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKLQkJaXJxX3JlZ193cml0ZWwoMSwgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRENSKTsKLQkJaXJxX3JlZ193cml0ZWwoMSwgYmdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JQ0NSKTsKKwkJaXJxX3JlZ193cml0ZWwoYmdjLCBpICsgZ2MtPmlycV9iYXNlLCBBVDkxX0FJQzVfU1NSKTsKKwkJaXJxX3JlZ193cml0ZWwoYmdjLCAxLCBBVDkxX0FJQzVfSURDUik7CisJCWlycV9yZWdfd3JpdGVsKGJnYywgMSwgQVQ5MV9BSUM1X0lDQ1IpOwogCX0KIAlpcnFfZ2NfdW5sb2NrKGJnYyk7CiB9CkBAIC0yMzAsMjQgKzIyNywyNCBAQAogCSAqIHdpbGwgbm90IExvY2sgb3V0IG5JUlEKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlpcnFfcmVnX3dyaXRlbCgwLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfRU9JQ1IpOworCQlpcnFfcmVnX3dyaXRlbChnYywgMCwgQVQ5MV9BSUM1X0VPSUNSKTsKIAogCS8qCiAJICogU3B1cmlvdXMgSW50ZXJydXB0IElEIGluIFNwdXJpb3VzIFZlY3RvciBSZWdpc3Rlci4KIAkgKiBXaGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW50ZXJydXB0LCB0aGUgSVJRIFZlY3RvciBSZWdpc3RlcgogCSAqIHJlYWRzIHRoZSB2YWx1ZSBzdG9yZWQgaW4gQUlDX1NQVQogCSAqLwotCWlycV9yZWdfd3JpdGVsKDB4ZmZmZmZmZmYsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TUFUpOworCWlycV9yZWdfd3JpdGVsKGdjLCAweGZmZmZmZmZmLCBBVDkxX0FJQzVfU1BVKTsKIAogCS8qIE5vIGRlYnVnZ2luZyBpbiBBSUM6IERlYnVnIChQcm90ZWN0KSBDb250cm9sIFJlZ2lzdGVyICovCi0JaXJxX3JlZ193cml0ZWwoMCwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0RDUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsIDAsIEFUOTFfQUlDNV9EQ1IpOwogCiAJLyogRGlzYWJsZSBhbmQgY2xlYXIgYWxsIGludGVycnVwdHMgaW5pdGlhbGx5ICovCiAJZm9yIChpID0gMDsgaSA8IGRvbWFpbi0+cmV2bWFwX3NpemU7IGkrKykgewotCQlpcnFfcmVnX3dyaXRlbChpLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU1NSKTsKLQkJaXJxX3JlZ193cml0ZWwoaSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NWUik7Ci0JCWlycV9yZWdfd3JpdGVsKDEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9JRENSKTsKLQkJaXJxX3JlZ193cml0ZWwoMSwgZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X0lDQ1IpOworCQlpcnFfcmVnX3dyaXRlbChnYywgaSwgQVQ5MV9BSUM1X1NTUik7CisJCWlycV9yZWdfd3JpdGVsKGdjLCBpLCBBVDkxX0FJQzVfU1ZSKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIDEsIEFUOTFfQUlDNV9JRENSKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIDEsIEFUOTFfQUlDNV9JQ0NSKTsKIAl9CiB9CiAKQEAgLTI3MywxMSArMjcwLDExIEBACiAJZ2MgPSBkZ2MtPmdjWzBdOwogCiAJaXJxX2djX2xvY2soZ2MpOwotCWlycV9yZWdfd3JpdGVsKCpvdXRfaHdpcnEsIGdjLT5yZWdfYmFzZSArIEFUOTFfQUlDNV9TU1IpOwotCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgQVQ5MV9BSUM1X1NNUik7CisJaXJxX3JlZ193cml0ZWwoZ2MsICpvdXRfaHdpcnEsIEFUOTFfQUlDNV9TU1IpOworCXNtciA9IGlycV9yZWdfcmVhZGwoZ2MsIEFUOTFfQUlDNV9TTVIpOwogCXJldCA9IGFpY19jb21tb25fc2V0X3ByaW9yaXR5KGludHNwZWNbMl0sICZzbXIpOwogCWlmICghcmV0KQotCQlpcnFfcmVnX3dyaXRlbChpbnRzcGVjWzJdIHwgc21yLCBnYy0+cmVnX2Jhc2UgKyBBVDkxX0FJQzVfU01SKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIGludHNwZWNbMl0gfCBzbXIsIEFUOTFfQUlDNV9TTVIpOwogCWlycV9nY191bmxvY2soZ2MpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYmNtNzEyMC1sMi5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1iY203MTIwLWwyLmMKaW5kZXggNWZiMzhhMi4uOGVlYzhlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1iY203MTIwLWwyLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1iY203MTIwLWwyLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tjb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgpAQCAtMjMsNDcgKzI0LDUyIEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRfaXJxLmg+CiAKICNpbmNsdWRlICJpcnFjaGlwLmgiCiAKLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQogLyogUmVnaXN0ZXIgb2Zmc2V0IGluIHRoZSBMMiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwogI2RlZmluZSBJUlFFTgkJMHgwMAogI2RlZmluZSBJUlFTVEFUCQkweDA0CiAKKyNkZWZpbmUgTUFYX1dPUkRTCTQKKyNkZWZpbmUgSVJRU19QRVJfV09SRAkzMgorCiBzdHJ1Y3QgYmNtNzEyMF9sMl9pbnRjX2RhdGEgewotCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1bnNpZ25lZCBpbnQgbl93b3JkczsKKwl2b2lkIF9faW9tZW0gKmJhc2VbTUFYX1dPUkRTXTsKIAlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOwogCWJvb2wgY2FuX3dha2U7Ci0JdTMyIGlycV9md2RfbWFzazsKLQl1MzIgaXJxX21hcF9tYXNrOwotCXUzMiBzYXZlZF9tYXNrOworCXUzMiBpcnFfZndkX21hc2tbTUFYX1dPUkRTXTsKKwl1MzIgaXJxX21hcF9tYXNrW01BWF9XT1JEU107CiB9OwogCiBzdGF0aWMgdm9pZCBiY203MTIwX2wyX2ludGNfaXJxX2hhbmRsZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGJjbTcxMjBfbDJfaW50Y19kYXRhICpiID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKLQl1MzIgc3RhdHVzOworCXVuc2lnbmVkIGludCBpZHg7CiAKIAljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNjKTsKIAotCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGItPmJhc2UgKyBJUlFTVEFUKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGItPm5fd29yZHM7IGlkeCsrKSB7CisJCWludCBiYXNlID0gaWR4ICogSVJRU19QRVJfV09SRDsKKwkJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0KKwkJCWlycV9nZXRfZG9tYWluX2dlbmVyaWNfY2hpcChiLT5kb21haW4sIGJhc2UpOworCQl1bnNpZ25lZCBsb25nIHBlbmRpbmc7CisJCWludCBod2lycTsKIAotCWlmIChzdGF0dXMgPT0gMCkgewotCQlkb19iYWRfSVJRKGlycSwgZGVzYyk7Ci0JCWdvdG8gb3V0OworCQlpcnFfZ2NfbG9jayhnYyk7CisJCXBlbmRpbmcgPSBpcnFfcmVnX3JlYWRsKGdjLCBJUlFTVEFUKSAmIGdjLT5tYXNrX2NhY2hlOworCQlpcnFfZ2NfdW5sb2NrKGdjKTsKKworCQlmb3JfZWFjaF9zZXRfYml0KGh3aXJxLCAmcGVuZGluZywgSVJRU19QRVJfV09SRCkgeworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYi0+ZG9tYWluLAorCQkJCQkgICBiYXNlICsgaHdpcnEpKTsKKwkJfQogCX0KIAotCWRvIHsKLQkJaXJxID0gZmZzKHN0YXR1cykgLSAxOwotCQlzdGF0dXMgJj0gfigxIDw8IGlycSk7Ci0JCWdlbmVyaWNfaGFuZGxlX2lycShpcnFfZmluZF9tYXBwaW5nKGItPmRvbWFpbiwgaXJxKSk7Ci0JfSB3aGlsZSAoc3RhdHVzKTsKLQotb3V0OgogCWNoYWluZWRfaXJxX2V4aXQoY2hpcCwgZGVzYyk7CiB9CiAKQEAgLTcxLDI2ICs3NywyMCBAQAogewogCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXN0cnVjdCBiY203MTIwX2wyX2ludGNfZGF0YSAqYiA9IGdjLT5wcml2YXRlOwotCXUzMiByZWc7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JLyogU2F2ZSB0aGUgY3VycmVudCBtYXNrIGFuZCB0aGUgaW50ZXJydXB0IGZvcndhcmQgbWFzayAqLwotCWItPnNhdmVkX21hc2sgPSBfX3Jhd19yZWFkbChiLT5iYXNlKSB8IGItPmlycV9md2RfbWFzazsKLQlpZiAoYi0+Y2FuX3dha2UpIHsKLQkJcmVnID0gYi0+c2F2ZWRfbWFzayB8IGdjLT53YWtlX2FjdGl2ZTsKLQkJX19yYXdfd3JpdGVsKHJlZywgYi0+YmFzZSk7Ci0JfQorCWlmIChiLT5jYW5fd2FrZSkKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT5tYXNrX2NhY2hlIHwgZ2MtPndha2VfYWN0aXZlLCBJUlFFTik7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJjbTcxMjBfbDJfaW50Y19yZXN1bWUoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXN0cnVjdCBiY203MTIwX2wyX2ludGNfZGF0YSAqYiA9IGdjLT5wcml2YXRlOwogCiAJLyogUmVzdG9yZSB0aGUgc2F2ZWQgbWFzayAqLwogCWlycV9nY19sb2NrKGdjKTsKLQlfX3Jhd193cml0ZWwoYi0+c2F2ZWRfbWFzaywgYi0+YmFzZSk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT5tYXNrX2NhY2hlLCBJUlFFTik7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiAKQEAgLTk5LDYgKzk5LDcgQEAKIAkJCQkJaW50IGlycSwgY29uc3QgX19iZTMyICptYXBfbWFzaykKIHsKIAlpbnQgcGFyZW50X2lycTsKKwl1bnNpZ25lZCBpbnQgaWR4OwogCiAJcGFyZW50X2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRuLCBpcnEpOwogCWlmICghcGFyZW50X2lycSkgewpAQCAtMTA2LDcgKzEwNywxMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkYXRhLT5pcnFfbWFwX21hc2sgfD0gYmUzMl90b19jcHVwKG1hcF9tYXNrICsgaXJxKTsKKwkvKiBGb3IgbXVsdGlwbGUgcGFyZW50IElSUXMgd2l0aCBtdWx0aXBsZSB3b3JkcywgdGhpcyBsb29rcyBsaWtlOgorCSAqIDxpcnEwX3cwIGlycTBfdzEgaXJxMV93MCBpcnExX3cxIC4uLj4KKwkgKi8KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGRhdGEtPm5fd29yZHM7IGlkeCsrKQorCQlkYXRhLT5pcnFfbWFwX21hc2tbaWR4XSB8PQorCQkJYmUzMl90b19jcHVwKG1hcF9tYXNrICsgaXJxICogZGF0YS0+bl93b3JkcyArIGlkeCk7CiAKIAlpcnFfc2V0X2hhbmRsZXJfZGF0YShwYXJlbnRfaXJxLCBkYXRhKTsKIAlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihwYXJlbnRfaXJxLCBiY203MTIwX2wyX2ludGNfaXJxX2hhbmRsZSk7CkBAIC0xMjMsMjYgKzEyOSw0MSBAQAogCXN0cnVjdCBpcnFfY2hpcF90eXBlICpjdDsKIAljb25zdCBfX2JlMzIgKm1hcF9tYXNrOwogCWludCBudW1fcGFyZW50X2lycXM7Ci0JaW50IHJldCA9IDAsIGxlbiwgaXJxOworCWludCByZXQgPSAwLCBsZW47CisJdW5zaWduZWQgaW50IGlkeCwgaXJxLCBmbGFnczsKIAogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkYXRhLT5iYXNlID0gb2ZfaW9tYXAoZG4sIDApOwotCWlmICghZGF0YS0+YmFzZSkgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgTUFYX1dPUkRTOyBpZHgrKykgeworCQlkYXRhLT5iYXNlW2lkeF0gPSBvZl9pb21hcChkbiwgaWR4KTsKKwkJaWYgKCFkYXRhLT5iYXNlW2lkeF0pCisJCQlicmVhazsKKwkJZGF0YS0+bl93b3JkcyA9IGlkeCArIDE7CisJfQorCWlmICghZGF0YS0+bl93b3JkcykgewogCQlwcl9lcnIoImZhaWxlZCB0byByZW1hcCBpbnRjIEwyIHJlZ2lzdGVyc1xuIik7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7CisJCWdvdG8gb3V0X3VubWFwOwogCX0KIAotCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihkbiwgImJyY20saW50LWZ3ZC1tYXNrIiwgJmRhdGEtPmlycV9md2RfbWFzaykpCi0JCWRhdGEtPmlycV9md2RfbWFzayA9IDA7Ci0KLQkvKiBFbmFibGUgYWxsIGludGVycnVwdCBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBmb3J3YXJkIG1hc2sgYW5kIGhhdmUKLQkgKiB0aGUgb3RoZXIgZGlzYWJsZWQKKwkvKiBFbmFibGUgYWxsIGludGVycnVwdHMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZm9yd2FyZCBtYXNrOworCSAqIGRpc2FibGUgYWxsIG90aGVycy4gIElmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0ICgtRUlOVkFMKSwKKwkgKiBhc3N1bWUgYWxsIHplcm9lcy4KIAkgKi8KLQlfX3Jhd193cml0ZWwoZGF0YS0+aXJxX2Z3ZF9tYXNrLCBkYXRhLT5iYXNlICsgSVJRRU4pOworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KGRuLCAiYnJjbSxpbnQtZndkLW1hc2siLAorCQkJCQkgZGF0YS0+aXJxX2Z3ZF9tYXNrLCBkYXRhLT5uX3dvcmRzKTsKKwlpZiAocmV0ID09IDAgfHwgcmV0ID09IC1FSU5WQUwpIHsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBkYXRhLT5uX3dvcmRzOyBpZHgrKykKKwkJCV9fcmF3X3dyaXRlbChkYXRhLT5pcnFfZndkX21hc2tbaWR4XSwKKwkJCQkgICAgIGRhdGEtPmJhc2VbaWR4XSArIElSUUVOKTsKKwl9IGVsc2UgeworCQkvKiBwcm9wZXJ0eSBleGlzdHMgYnV0IGhhcyB0aGUgd3JvbmcgbnVtYmVyIG9mIHdvcmRzICovCisJCXByX2VycigiaW52YWxpZCBpbnQtZndkLW1hc2sgcHJvcGVydHlcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF91bm1hcDsKKwl9CiAKIAludW1fcGFyZW50X2lycXMgPSBvZl9pcnFfY291bnQoZG4pOwogCWlmIChudW1fcGFyZW50X2lycXMgPD0gMCkgewpAQCAtMTUyLDcgKzE3Myw4IEBACiAJfQogCiAJbWFwX21hc2sgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJicmNtLGludC1tYXAtbWFzayIsICZsZW4pOwotCWlmICghbWFwX21hc2sgfHwgKGxlbiAhPSAoc2l6ZW9mKCptYXBfbWFzaykgKiBudW1fcGFyZW50X2lycXMpKSkgeworCWlmICghbWFwX21hc2sgfHwKKwkgICAgKGxlbiAhPSAoc2l6ZW9mKCptYXBfbWFzaykgKiBudW1fcGFyZW50X2lycXMgKiBkYXRhLT5uX3dvcmRzKSkpIHsKIAkJcHJfZXJyKCJpbnZhbGlkIGJyY20saW50LW1hcC1tYXNrIHByb3BlcnR5XG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5tYXA7CkBAIC0xNjQsNTYgKzE4Niw3MCBAQAogCQkJZ290byBvdXRfdW5tYXA7CiAJfQogCi0JZGF0YS0+ZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKGRuLCAzMiwKLQkJCQkJJmlycV9nZW5lcmljX2NoaXBfb3BzLCBOVUxMKTsKKwlkYXRhLT5kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIoZG4sIElSUVNfUEVSX1dPUkQgKiBkYXRhLT5uX3dvcmRzLAorCQkJCQkgICAgICZpcnFfZ2VuZXJpY19jaGlwX29wcywgTlVMTCk7CiAJaWYgKCFkYXRhLT5kb21haW4pIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfdW5tYXA7CiAJfQogCi0JcmV0ID0gaXJxX2FsbG9jX2RvbWFpbl9nZW5lcmljX2NoaXBzKGRhdGEtPmRvbWFpbiwgMzIsIDEsCi0JCQkJZG4tPmZ1bGxfbmFtZSwgaGFuZGxlX2xldmVsX2lycSwgY2xyLCAwLAotCQkJCUlSUV9HQ19JTklUX01BU0tfQ0FDSEUpOworCS8qIE1JUFMgY2hpcHMgc3RyYXBwZWQgZm9yIEJFIHdpbGwgYXV0b21hZ2ljYWxseSBjb25maWd1cmUgdGhlCisJICogcGVyaXBoZXJhbCByZWdpc3RlcnMgZm9yIENQVS1uYXRpdmUgYnl0ZSBvcmRlci4KKwkgKi8KKwlmbGFncyA9IElSUV9HQ19JTklUX01BU0tfQ0FDSEU7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX01JUFMpICYmIElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSkKKwkJZmxhZ3MgfD0gSVJRX0dDX0JFX0lPOworCisJcmV0ID0gaXJxX2FsbG9jX2RvbWFpbl9nZW5lcmljX2NoaXBzKGRhdGEtPmRvbWFpbiwgSVJRU19QRVJfV09SRCwgMSwKKwkJCQlkbi0+ZnVsbF9uYW1lLCBoYW5kbGVfbGV2ZWxfaXJxLCBjbHIsIDAsIGZsYWdzKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIGdlbmVyaWMgaXJxIGNoaXBcbiIpOwogCQlnb3RvIG91dF9mcmVlX2RvbWFpbjsKIAl9CiAKLQlnYyA9IGlycV9nZXRfZG9tYWluX2dlbmVyaWNfY2hpcChkYXRhLT5kb21haW4sIDApOwotCWdjLT51bnVzZWQgPSAweGZmZmZmZmYgJiB+ZGF0YS0+aXJxX21hcF9tYXNrOwotCWdjLT5yZWdfYmFzZSA9IGRhdGEtPmJhc2U7Ci0JZ2MtPnByaXZhdGUgPSBkYXRhOwotCWN0ID0gZ2MtPmNoaXBfdHlwZXM7Ci0KLQljdC0+cmVncy5tYXNrID0gSVJRRU47Ci0JY3QtPmNoaXAuaXJxX21hc2sgPSBpcnFfZ2NfbWFza19jbHJfYml0OwotCWN0LT5jaGlwLmlycV91bm1hc2sgPSBpcnFfZ2NfbWFza19zZXRfYml0OwotCWN0LT5jaGlwLmlycV9hY2sgPSBpcnFfZ2Nfbm9vcDsKLQljdC0+Y2hpcC5pcnFfc3VzcGVuZCA9IGJjbTcxMjBfbDJfaW50Y19zdXNwZW5kOwotCWN0LT5jaGlwLmlycV9yZXN1bWUgPSBiY203MTIwX2wyX2ludGNfcmVzdW1lOwotCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkbiwgImJyY20saXJxLWNhbi13YWtlIikpIHsKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGRuLCAiYnJjbSxpcnEtY2FuLXdha2UiKSkKIAkJZGF0YS0+Y2FuX3dha2UgPSB0cnVlOwotCQkvKiBUaGlzIElSUSBjaGlwIGNhbiB3YWtlIHRoZSBzeXN0ZW0sIHNldCBhbGwgcmVsZXZhbnQgY2hpbGQKLQkJICogaW50ZXJ1cHRzIGluIHdha2VfZW5hYmxlZCBtYXNrCi0JCSAqLwotCQlnYy0+d2FrZV9lbmFibGVkID0gMHhmZmZmZmZmZjsKLQkJZ2MtPndha2VfZW5hYmxlZCAmPSB+Z2MtPnVudXNlZDsKLQkJY3QtPmNoaXAuaXJxX3NldF93YWtlID0gaXJxX2djX3NldF93YWtlOworCisJZm9yIChpZHggPSAwOyBpZHggPCBkYXRhLT5uX3dvcmRzOyBpZHgrKykgeworCQlpcnEgPSBpZHggKiBJUlFTX1BFUl9XT1JEOworCQlnYyA9IGlycV9nZXRfZG9tYWluX2dlbmVyaWNfY2hpcChkYXRhLT5kb21haW4sIGlycSk7CisKKwkJZ2MtPnVudXNlZCA9IDB4ZmZmZmZmZmYgJiB+ZGF0YS0+aXJxX21hcF9tYXNrW2lkeF07CisJCWdjLT5yZWdfYmFzZSA9IGRhdGEtPmJhc2VbaWR4XTsKKwkJZ2MtPnByaXZhdGUgPSBkYXRhOworCQljdCA9IGdjLT5jaGlwX3R5cGVzOworCisJCWN0LT5yZWdzLm1hc2sgPSBJUlFFTjsKKwkJY3QtPmNoaXAuaXJxX21hc2sgPSBpcnFfZ2NfbWFza19jbHJfYml0OworCQljdC0+Y2hpcC5pcnFfdW5tYXNrID0gaXJxX2djX21hc2tfc2V0X2JpdDsKKwkJY3QtPmNoaXAuaXJxX2FjayA9IGlycV9nY19ub29wOworCQljdC0+Y2hpcC5pcnFfc3VzcGVuZCA9IGJjbTcxMjBfbDJfaW50Y19zdXNwZW5kOworCQljdC0+Y2hpcC5pcnFfcmVzdW1lID0gYmNtNzEyMF9sMl9pbnRjX3Jlc3VtZTsKKworCQlpZiAoZGF0YS0+Y2FuX3dha2UpIHsKKwkJCS8qIFRoaXMgSVJRIGNoaXAgY2FuIHdha2UgdGhlIHN5c3RlbSwgc2V0IGFsbAorCQkJICogcmVsZXZhbnQgY2hpbGQgaW50ZXJ1cHRzIGluIHdha2VfZW5hYmxlZCBtYXNrCisJCQkgKi8KKwkJCWdjLT53YWtlX2VuYWJsZWQgPSAweGZmZmZmZmZmOworCQkJZ2MtPndha2VfZW5hYmxlZCAmPSB+Z2MtPnVudXNlZDsKKwkJCWN0LT5jaGlwLmlycV9zZXRfd2FrZSA9IGlycV9nY19zZXRfd2FrZTsKKwkJfQogCX0KIAogCXByX2luZm8oInJlZ2lzdGVyZWQgQkNNNzEyMCBMMiBpbnRjIChtZW06IDB4JXAsIHBhcmVudCBJUlEocyk6ICVkKVxuIiwKLQkJCWRhdGEtPmJhc2UsIG51bV9wYXJlbnRfaXJxcyk7CisJCQlkYXRhLT5iYXNlWzBdLCBudW1fcGFyZW50X2lycXMpOwogCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX2RvbWFpbjoKIAlpcnFfZG9tYWluX3JlbW92ZShkYXRhLT5kb21haW4pOwogb3V0X3VubWFwOgotCWlvdW5tYXAoZGF0YS0+YmFzZSk7Ci1vdXRfZnJlZToKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9XT1JEUzsgaWR4KyspIHsKKwkJaWYgKGRhdGEtPmJhc2VbaWR4XSkKKwkJCWlvdW5tYXAoZGF0YS0+YmFzZVtpZHhdKTsKKwl9CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHJldDsKIH0KLUlSUUNISVBfREVDTEFSRShicmNtc3RiX2wyX2ludGMsICJicmNtLGJjbTcxMjAtbDItaW50YyIsCitJUlFDSElQX0RFQ0xBUkUoYmNtNzEyMF9sMl9pbnRjLCAiYnJjbSxiY203MTIwLWwyLWludGMiLAogCQliY203MTIwX2wyX2ludGNfb2ZfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWJyY21zdGItbDIuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYnJjbXN0Yi1sMi5jCmluZGV4IDE0NjkxYTQuLjMxM2MyYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtYnJjbXN0Yi1sMi5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtYnJjbXN0Yi1sMi5jCkBAIC0xOCw3ICsxOCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KQEAgLTMwLDggKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcnFjaGlwLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9jaGFpbmVkX2lycS5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KICNpbmNsdWRlICJpcnFjaGlwLmgiCiAKIC8qIFJlZ2lzdGVyIG9mZnNldHMgaW4gdGhlIEwyIGludGVycnVwdCBjb250cm9sbGVyICovCkBAIC01NCwyMyArNTQsMjYgQEAKIHN0YXRpYyB2b2lkIGJyY21zdGJfbDJfaW50Y19pcnFfaGFuZGxlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgYnJjbXN0Yl9sMl9pbnRjX2RhdGEgKmIgPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9nZXRfZG9tYWluX2dlbmVyaWNfY2hpcChiLT5kb21haW4sIDApOwogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOwogCXUzMiBzdGF0dXM7CiAKIAljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNjKTsKIAotCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGItPmJhc2UgKyBDUFVfU1RBVFVTKSAmCi0JCX4oX19yYXdfcmVhZGwoYi0+YmFzZSArIENQVV9NQVNLX1NUQVRVUykpOworCXN0YXR1cyA9IGlycV9yZWdfcmVhZGwoZ2MsIENQVV9TVEFUVVMpICYKKwkJfihpcnFfcmVnX3JlYWRsKGdjLCBDUFVfTUFTS19TVEFUVVMpKTsKIAogCWlmIChzdGF0dXMgPT0gMCkgewotCQlkb19iYWRfSVJRKGlycSwgZGVzYyk7CisJCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOworCQloYW5kbGVfYmFkX2lycShpcnEsIGRlc2MpOworCQlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCQlnb3RvIG91dDsKIAl9CiAKIAlkbyB7CiAJCWlycSA9IGZmcyhzdGF0dXMpIC0gMTsKIAkJLyogYWNrIGF0IG91ciBsZXZlbCAqLwotCQlfX3Jhd193cml0ZWwoMSA8PCBpcnEsIGItPmJhc2UgKyBDUFVfQ0xFQVIpOworCQlpcnFfcmVnX3dyaXRlbChnYywgMSA8PCBpcnEsIENQVV9DTEVBUik7CiAJCXN0YXR1cyAmPSB+KDEgPDwgaXJxKTsKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcoYi0+ZG9tYWluLCBpcnEpKTsKIAl9IHdoaWxlIChzdGF0dXMpOwpAQCAtODUsMTIgKzg4LDEyIEBACiAKIAlpcnFfZ2NfbG9jayhnYyk7CiAJLyogU2F2ZSB0aGUgY3VycmVudCBtYXNrICovCi0JYi0+c2F2ZWRfbWFzayA9IF9fcmF3X3JlYWRsKGItPmJhc2UgKyBDUFVfTUFTS19TVEFUVVMpOworCWItPnNhdmVkX21hc2sgPSBpcnFfcmVnX3JlYWRsKGdjLCBDUFVfTUFTS19TVEFUVVMpOwogCiAJaWYgKGItPmNhbl93YWtlKSB7CiAJCS8qIFByb2dyYW0gdGhlIHdha2V1cCBtYXNrICovCi0JCV9fcmF3X3dyaXRlbCh+Z2MtPndha2VfYWN0aXZlLCBiLT5iYXNlICsgQ1BVX01BU0tfU0VUKTsKLQkJX19yYXdfd3JpdGVsKGdjLT53YWtlX2FjdGl2ZSwgYi0+YmFzZSArIENQVV9NQVNLX0NMRUFSKTsKKwkJaXJxX3JlZ193cml0ZWwoZ2MsIH5nYy0+d2FrZV9hY3RpdmUsIENQVV9NQVNLX1NFVCk7CisJCWlycV9yZWdfd3JpdGVsKGdjLCBnYy0+d2FrZV9hY3RpdmUsIENQVV9NQVNLX0NMRUFSKTsKIAl9CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CkBAIC0xMDIsMTEgKzEwNSwxMSBAQAogCiAJaXJxX2djX2xvY2soZ2MpOwogCS8qIENsZWFyIHVubWFza2VkIG5vbi13YWtldXAgaW50ZXJydXB0cyAqLwotCV9fcmF3X3dyaXRlbCh+Yi0+c2F2ZWRfbWFzayAmIH5nYy0+d2FrZV9hY3RpdmUsIGItPmJhc2UgKyBDUFVfQ0xFQVIpOworCWlycV9yZWdfd3JpdGVsKGdjLCB+Yi0+c2F2ZWRfbWFzayAmIH5nYy0+d2FrZV9hY3RpdmUsIENQVV9DTEVBUik7CiAKIAkvKiBSZXN0b3JlIHRoZSBzYXZlZCBtYXNrICovCi0JX19yYXdfd3JpdGVsKGItPnNhdmVkX21hc2ssIGItPmJhc2UgKyBDUFVfTUFTS19TRVQpOwotCV9fcmF3X3dyaXRlbCh+Yi0+c2F2ZWRfbWFzaywgYi0+YmFzZSArIENQVV9NQVNLX0NMRUFSKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgYi0+c2F2ZWRfbWFzaywgQ1BVX01BU0tfU0VUKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgfmItPnNhdmVkX21hc2ssIENQVV9NQVNLX0NMRUFSKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtMTE4LDYgKzEyMSw3IEBACiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjOwogCXN0cnVjdCBpcnFfY2hpcF90eXBlICpjdDsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGludCBmbGFnczsKIAogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKQEAgLTEzMSw4ICsxMzUsOCBAQAogCX0KIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgYnkgZGVmYXVsdCAqLwotCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBkYXRhLT5iYXNlICsgQ1BVX01BU0tfU0VUKTsKLQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgZGF0YS0+YmFzZSArIENQVV9DTEVBUik7CisJd3JpdGVsKDB4ZmZmZmZmZmYsIGRhdGEtPmJhc2UgKyBDUFVfTUFTS19TRVQpOworCXdyaXRlbCgweGZmZmZmZmZmLCBkYXRhLT5iYXNlICsgQ1BVX0NMRUFSKTsKIAogCWRhdGEtPnBhcmVudF9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CiAJaWYgKCFkYXRhLT5wYXJlbnRfaXJxKSB7CkBAIC0xNDgsOSArMTUyLDE2IEBACiAJCWdvdG8gb3V0X3VubWFwOwogCX0KIAorCS8qIE1JUFMgY2hpcHMgc3RyYXBwZWQgZm9yIEJFIHdpbGwgYXV0b21hZ2ljYWxseSBjb25maWd1cmUgdGhlCisJICogcGVyaXBoZXJhbCByZWdpc3RlcnMgZm9yIENQVS1uYXRpdmUgYnl0ZSBvcmRlci4KKwkgKi8KKwlmbGFncyA9IDA7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX01JUFMpICYmIElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSkKKwkJZmxhZ3MgfD0gSVJRX0dDX0JFX0lPOworCiAJLyogQWxsb2NhdGUgYSBzaW5nbGUgR2VuZXJpYyBJUlEgY2hpcCBmb3IgdGhpcyBub2RlICovCiAJcmV0ID0gaXJxX2FsbG9jX2RvbWFpbl9nZW5lcmljX2NoaXBzKGRhdGEtPmRvbWFpbiwgMzIsIDEsCi0JCQkJbnAtPmZ1bGxfbmFtZSwgaGFuZGxlX2VkZ2VfaXJxLCBjbHIsIDAsIDApOworCQkJCW5wLT5mdWxsX25hbWUsIGhhbmRsZV9lZGdlX2lycSwgY2xyLCAwLCBmbGFncyk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBnZW5lcmljIGlycSBjaGlwXG4iKTsKIAkJZ290byBvdXRfZnJlZV9kb21haW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWR3LWFwYi1pY3RsLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWR3LWFwYi1pY3RsLmMKaW5kZXggMzFlMjMxZS4uNTNiYjczMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1kdy1hcGItaWN0bC5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtZHctYXBiLWljdGwuYwpAQCAtNTAsNiArNTAsMjEgQEAKIAljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgdm9pZCBkd19hcGJfaWN0bF9yZXN1bWUoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBpcnFfY2hpcF90eXBlICpjdCA9IGlycV9kYXRhX2dldF9jaGlwX3R5cGUoZCk7CisKKwlpcnFfZ2NfbG9jayhnYyk7CisJd3JpdGVsX3JlbGF4ZWQofjAsIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLmVuYWJsZSk7CisJd3JpdGVsX3JlbGF4ZWQoKmN0LT5tYXNrX2NhY2hlLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5tYXNrKTsKKwlpcnFfZ2NfdW5sb2NrKGdjKTsKK30KKyNlbHNlCisjZGVmaW5lIGR3X2FwYl9pY3RsX3Jlc3VtZQlOVUxMCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIHN0YXRpYyBpbnQgX19pbml0IGR3X2FwYl9pY3RsX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCkKIHsKQEAgLTk0LDE2ICsxMDksMTYgQEAKIAkgKi8KIAogCS8qIG1hc2sgYW5kIGVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotCXdyaXRlbCh+MCwgaW9iYXNlICsgQVBCX0lOVF9NQVNLX0wpOwotCXdyaXRlbCh+MCwgaW9iYXNlICsgQVBCX0lOVF9NQVNLX0gpOwotCXdyaXRlbCh+MCwgaW9iYXNlICsgQVBCX0lOVF9FTkFCTEVfTCk7Ci0Jd3JpdGVsKH4wLCBpb2Jhc2UgKyBBUEJfSU5UX0VOQUJMRV9IKTsKKwl3cml0ZWxfcmVsYXhlZCh+MCwgaW9iYXNlICsgQVBCX0lOVF9NQVNLX0wpOworCXdyaXRlbF9yZWxheGVkKH4wLCBpb2Jhc2UgKyBBUEJfSU5UX01BU0tfSCk7CisJd3JpdGVsX3JlbGF4ZWQofjAsIGlvYmFzZSArIEFQQl9JTlRfRU5BQkxFX0wpOworCXdyaXRlbF9yZWxheGVkKH4wLCBpb2Jhc2UgKyBBUEJfSU5UX0VOQUJMRV9IKTsKIAotCXJlZyA9IHJlYWRsKGlvYmFzZSArIEFQQl9JTlRfRU5BQkxFX0gpOworCXJlZyA9IHJlYWRsX3JlbGF4ZWQoaW9iYXNlICsgQVBCX0lOVF9FTkFCTEVfSCk7CiAJaWYgKHJlZykKIAkJbnJpcnFzID0gMzIgKyBmbHMocmVnKTsKIAllbHNlCi0JCW5yaXJxcyA9IGZscyhyZWFkbChpb2Jhc2UgKyBBUEJfSU5UX0VOQUJMRV9MKSk7CisJCW5yaXJxcyA9IGZscyhyZWFkbF9yZWxheGVkKGlvYmFzZSArIEFQQl9JTlRfRU5BQkxFX0wpKTsKIAogCWRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihucCwgbnJpcnFzLAogCQkJCSAgICAgICAmaXJxX2dlbmVyaWNfY2hpcF9vcHMsIE5VTEwpOwpAQCAtMTE1LDYgKzEzMCw3IEBACiAKIAlyZXQgPSBpcnFfYWxsb2NfZG9tYWluX2dlbmVyaWNfY2hpcHMoZG9tYWluLCAzMiwgKG5yaXJxcyA+IDMyKSA/IDIgOiAxLAogCQkJCQkgICAgIG5wLT5uYW1lLCBoYW5kbGVfbGV2ZWxfaXJxLCBjbHIsIDAsCisJCQkJCSAgICAgSVJRX0dDX01BU0tfQ0FDSEVfUEVSX1RZUEUgfAogCQkJCQkgICAgIElSUV9HQ19JTklUX01BU0tfQ0FDSEUpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCIlczogdW5hYmxlIHRvIGFsbG9jIGlycSBkb21haW4gZ2NcbiIsIG5wLT5mdWxsX25hbWUpOwpAQCAtMTI2LDEzICsxNDIsMTcgQEAKIAlnYy0+cmVnX2Jhc2UgPSBpb2Jhc2U7CiAKIAlnYy0+Y2hpcF90eXBlc1swXS5yZWdzLm1hc2sgPSBBUEJfSU5UX01BU0tfTDsKKwlnYy0+Y2hpcF90eXBlc1swXS5yZWdzLmVuYWJsZSA9IEFQQl9JTlRfRU5BQkxFX0w7CiAJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX3NldF9iaXQ7CiAJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfdW5tYXNrID0gaXJxX2djX21hc2tfY2xyX2JpdDsKKwlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9yZXN1bWUgPSBkd19hcGJfaWN0bF9yZXN1bWU7CiAKIAlpZiAobnJpcnFzID4gMzIpIHsKIAkJZ2MtPmNoaXBfdHlwZXNbMV0ucmVncy5tYXNrID0gQVBCX0lOVF9NQVNLX0g7CisJCWdjLT5jaGlwX3R5cGVzWzFdLnJlZ3MuZW5hYmxlID0gQVBCX0lOVF9FTkFCTEVfSDsKIAkJZ2MtPmNoaXBfdHlwZXNbMV0uY2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX3NldF9iaXQ7CiAJCWdjLT5jaGlwX3R5cGVzWzFdLmNoaXAuaXJxX3VubWFzayA9IGlycV9nY19tYXNrX2Nscl9iaXQ7CisJCWdjLT5jaGlwX3R5cGVzWzFdLmNoaXAuaXJxX3Jlc3VtZSA9IGR3X2FwYl9pY3RsX3Jlc3VtZTsKIAl9CiAKIAlpcnFfc2V0X2hhbmRsZXJfZGF0YShpcnEsIGdjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy5jCmluZGV4IDM4NDkzZmYuLjdmOWJlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1naWMuYwpAQCAtMTA0MSw2ICsxMDQxLDggQEAKIAlyZXR1cm4gMDsKIH0KIElSUUNISVBfREVDTEFSRShnaWNfNDAwLCAiYXJtLGdpYy00MDAiLCBnaWNfb2ZfaW5pdCk7CitJUlFDSElQX0RFQ0xBUkUoYXJtMTFtcF9naWMsICJhcm0sYXJtMTFtcC1naWMiLCBnaWNfb2ZfaW5pdCk7CitJUlFDSElQX0RFQ0xBUkUoYXJtMTE3Nmp6Zl9kY19naWMsICJhcm0sYXJtMTE3Nmp6Zi1kZXZjaGlwLWdpYyIsIGdpY19vZl9pbml0KTsKIElSUUNISVBfREVDTEFSRShjb3J0ZXhfYTE1X2dpYywgImFybSxjb3J0ZXgtYTE1LWdpYyIsIGdpY19vZl9pbml0KTsKIElSUUNISVBfREVDTEFSRShjb3J0ZXhfYTlfZ2ljLCAiYXJtLGNvcnRleC1hOS1naWMiLCBnaWNfb2ZfaW5pdCk7CiBJUlFDSElQX0RFQ0xBUkUoY29ydGV4X2E3X2dpYywgImFybSxjb3J0ZXgtYTctZ2ljIiwgZ2ljX29mX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1oaXAwNC5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1oaXAwNC5jCmluZGV4IDljOGY4MzM1Li4yOWI4ZjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWhpcDA0LmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1oaXAwNC5jCkBAIC0xNzYsOCArMTc2LDcgQEAKIAkJaXJxbnIgPSBpcnFzdGF0ICYgR0lDQ19JQVJfSU5UX0lEX01BU0s7CiAKIAkJaWYgKGxpa2VseShpcnFuciA+IDE1ICYmIGlycW5yIDw9IEhJUDA0X01BWF9JUlFTKSkgewotCQkJaXJxbnIgPSBpcnFfZmluZF9tYXBwaW5nKGhpcDA0X2RhdGEuZG9tYWluLCBpcnFucik7Ci0JCQloYW5kbGVfSVJRKGlycW5yLCByZWdzKTsKKwkJCWhhbmRsZV9kb21haW5faXJxKGhpcDA0X2RhdGEuZG9tYWluLCBpcnFuciwgcmVncyk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoaXJxbnIgPCAxNikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1zdW54aS1ubWkuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtc3VueGktbm1pLmMKaW5kZXggMTJmNTQ3YS4uNGE5Y2U1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS1zdW54aS1ubWkuYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLXN1bnhpLW5taS5jCkBAIC01MCwxMiArNTAsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdW54aV9zY19ubWlfd3JpdGUoc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjLCB1MzIgb2ZmLAogCQkJCSAgICAgIHUzMiB2YWwpCiB7Ci0JaXJxX3JlZ193cml0ZWwodmFsLCBnYy0+cmVnX2Jhc2UgKyBvZmYpOworCWlycV9yZWdfd3JpdGVsKGdjLCB2YWwsIG9mZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIHN1bnhpX3NjX25taV9yZWFkKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywgdTMyIG9mZikKIHsKLQlyZXR1cm4gaXJxX3JlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyBvZmYpOworCXJldHVybiBpcnFfcmVnX3JlYWRsKGdjLCBvZmYpOwogfQogCiBzdGF0aWMgdm9pZCBzdW54aV9zY19ubWlfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLXRiMTB4LmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLXRiMTB4LmMKaW5kZXggN2M0NGM5OS4uYWNjYzIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS10YjEweC5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtdGIxMHguYwpAQCAtNDMsMTIgKzQzLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYWJfaXJxY3RsX3dyaXRlcmVnKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywgdTMyIHJlZywKIAl1MzIgdmFsKQogewotCWlycV9yZWdfd3JpdGVsKHZhbCwgZ2MtPnJlZ19iYXNlICsgcmVnKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgdmFsLCByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBhYl9pcnFjdGxfcmVhZHJlZyhzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MsIHUzMiByZWcpCiB7Ci0JcmV0dXJuIGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgcmVnKTsKKwlyZXR1cm4gaXJxX3JlZ19yZWFkbChnYywgcmVnKTsKIH0KIAogc3RhdGljIGludCB0YjEweF9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtZ3Bpby5jIGIvZHJpdmVycy9sZWRzL2xlZHMtZ3Bpby5jCmluZGV4IGI0NTE4YzguLjVmYjQ0NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMKQEAgLTEyLDI1ICsxMiwyMyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9wZXJ0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogc3RydWN0IGdwaW9fbGVkX2RhdGEgewogCXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKLQl1bnNpZ25lZCBncGlvOworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXU4IG5ld19sZXZlbDsKIAl1OCBjYW5fc2xlZXA7Ci0JdTggYWN0aXZlX2xvdzsKIAl1OCBibGlua2luZzsKLQlpbnQgKCpwbGF0Zm9ybV9ncGlvX2JsaW5rX3NldCkodW5zaWduZWQgZ3BpbywgaW50IHN0YXRlLAorCWludCAoKnBsYXRmb3JtX2dwaW9fYmxpbmtfc2V0KShzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCBpbnQgc3RhdGUsCiAJCQl1bnNpZ25lZCBsb25nICpkZWxheV9vbiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKTsKIH07CiAKQEAgLTQwLDEyICszOCwxMSBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGdwaW9fbGVkX2RhdGEsIHdvcmspOwogCiAJaWYgKGxlZF9kYXQtPmJsaW5raW5nKSB7Ci0JCWxlZF9kYXQtPnBsYXRmb3JtX2dwaW9fYmxpbmtfc2V0KGxlZF9kYXQtPmdwaW8sCi0JCQkJCQkgbGVkX2RhdC0+bmV3X2xldmVsLAotCQkJCQkJIE5VTEwsIE5VTEwpOworCQlsZWRfZGF0LT5wbGF0Zm9ybV9ncGlvX2JsaW5rX3NldChsZWRfZGF0LT5ncGlvZCwKKwkJCQkJbGVkX2RhdC0+bmV3X2xldmVsLCBOVUxMLCBOVUxMKTsKIAkJbGVkX2RhdC0+YmxpbmtpbmcgPSAwOwogCX0gZWxzZQotCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChsZWRfZGF0LT5ncGlvLCBsZWRfZGF0LT5uZXdfbGV2ZWwpOworCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobGVkX2RhdC0+Z3Bpb2QsIGxlZF9kYXQtPm5ld19sZXZlbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGdwaW9fbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKQEAgLTYwLDkgKzU3LDYgQEAKIAllbHNlCiAJCWxldmVsID0gMTsKIAotCWlmIChsZWRfZGF0LT5hY3RpdmVfbG93KQotCQlsZXZlbCA9ICFsZXZlbDsKLQogCS8qIFNldHRpbmcgR1BJT3Mgd2l0aCBJMkMvZXRjIHJlcXVpcmVzIGEgdGFzayBjb250ZXh0LCBhbmQgd2UgZG9uJ3QKIAkgKiBzZWVtIHRvIGhhdmUgYSByZWxpYWJsZSB3YXkgdG8ga25vdyBpZiB3ZSdyZSBhbHJlYWR5IGluIG9uZTsgc28KIAkgKiBsZXQncyBqdXN0IGFzc3VtZSB0aGUgd29yc3QuCkBAIC03MiwxMSArNjYsMTEgQEAKIAkJc2NoZWR1bGVfd29yaygmbGVkX2RhdC0+d29yayk7CiAJfSBlbHNlIHsKIAkJaWYgKGxlZF9kYXQtPmJsaW5raW5nKSB7Ci0JCQlsZWRfZGF0LT5wbGF0Zm9ybV9ncGlvX2JsaW5rX3NldChsZWRfZGF0LT5ncGlvLCBsZXZlbCwKKwkJCWxlZF9kYXQtPnBsYXRmb3JtX2dwaW9fYmxpbmtfc2V0KGxlZF9kYXQtPmdwaW9kLCBsZXZlbCwKIAkJCQkJCQkgTlVMTCwgTlVMTCk7CiAJCQlsZWRfZGF0LT5ibGlua2luZyA9IDA7CiAJCX0gZWxzZQotCQkJZ3Bpb19zZXRfdmFsdWUobGVkX2RhdC0+Z3BpbywgbGV2ZWwpOworCQkJZ3Bpb2Rfc2V0X3ZhbHVlKGxlZF9kYXQtPmdwaW9kLCBsZXZlbCk7CiAJfQogfQogCkBAIC04NywzNCArODEsNDkgQEAKIAkJY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgZ3Bpb19sZWRfZGF0YSwgY2Rldik7CiAKIAlsZWRfZGF0LT5ibGlua2luZyA9IDE7Ci0JcmV0dXJuIGxlZF9kYXQtPnBsYXRmb3JtX2dwaW9fYmxpbmtfc2V0KGxlZF9kYXQtPmdwaW8sIEdQSU9fTEVEX0JMSU5LLAorCXJldHVybiBsZWRfZGF0LT5wbGF0Zm9ybV9ncGlvX2JsaW5rX3NldChsZWRfZGF0LT5ncGlvZCwgR1BJT19MRURfQkxJTkssCiAJCQkJCQlkZWxheV9vbiwgZGVsYXlfb2ZmKTsKIH0KIAogc3RhdGljIGludCBjcmVhdGVfZ3Bpb19sZWQoY29uc3Qgc3RydWN0IGdwaW9fbGVkICp0ZW1wbGF0ZSwKIAlzdHJ1Y3QgZ3Bpb19sZWRfZGF0YSAqbGVkX2RhdCwgc3RydWN0IGRldmljZSAqcGFyZW50LAotCWludCAoKmJsaW5rX3NldCkodW5zaWduZWQsIGludCwgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopKQorCWludCAoKmJsaW5rX3NldCkoc3RydWN0IGdwaW9fZGVzYyAqLCBpbnQsIHVuc2lnbmVkIGxvbmcgKiwKKwkJCSB1bnNpZ25lZCBsb25nICopKQogewogCWludCByZXQsIHN0YXRlOwogCi0JbGVkX2RhdC0+Z3BpbyA9IC0xOworCWxlZF9kYXQtPmdwaW9kID0gdGVtcGxhdGUtPmdwaW9kOworCWlmICghbGVkX2RhdC0+Z3Bpb2QpIHsKKwkJLyoKKwkJICogVGhpcyBpcyB0aGUgbGVnYWN5IGNvZGUgcGF0aCBmb3IgcGxhdGZvcm0gY29kZSB0aGF0CisJCSAqIHN0aWxsIHVzZXMgR1BJTyBudW1iZXJzLiBVbHRpbWF0ZWx5IHdlIHdvdWxkIGxpa2UgdG8gZ2V0CisJCSAqIHJpZCBvZiB0aGlzIGJsb2NrIGNvbXBsZXRlbHkuCisJCSAqLworCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAotCS8qIHNraXAgbGVkcyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgKi8KLQlpZiAoIWdwaW9faXNfdmFsaWQodGVtcGxhdGUtPmdwaW8pKSB7Ci0JCWRldl9pbmZvKHBhcmVudCwgIlNraXBwaW5nIHVuYXZhaWxhYmxlIExFRCBncGlvICVkICglcylcbiIsCi0JCQkJdGVtcGxhdGUtPmdwaW8sIHRlbXBsYXRlLT5uYW1lKTsKLQkJcmV0dXJuIDA7CisJCS8qIHNraXAgbGVkcyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgKi8KKwkJaWYgKCFncGlvX2lzX3ZhbGlkKHRlbXBsYXRlLT5ncGlvKSkgeworCQkJZGV2X2luZm8ocGFyZW50LCAiU2tpcHBpbmcgdW5hdmFpbGFibGUgTEVEIGdwaW8gJWQgKCVzKVxuIiwKKwkJCQkJdGVtcGxhdGUtPmdwaW8sIHRlbXBsYXRlLT5uYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKHRlbXBsYXRlLT5hY3RpdmVfbG93KQorCQkJZmxhZ3MgfD0gR1BJT0ZfQUNUSVZFX0xPVzsKKworCQlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdF9vbmUocGFyZW50LCB0ZW1wbGF0ZS0+Z3BpbywgZmxhZ3MsCisJCQkJCSAgICB0ZW1wbGF0ZS0+bmFtZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlsZWRfZGF0LT5ncGlvZCA9IGdwaW9fdG9fZGVzYyh0ZW1wbGF0ZS0+Z3Bpbyk7CisJCWlmIChJU19FUlIobGVkX2RhdC0+Z3Bpb2QpKQorCQkJcmV0dXJuIFBUUl9FUlIobGVkX2RhdC0+Z3Bpb2QpOwogCX0KIAotCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0KHBhcmVudCwgdGVtcGxhdGUtPmdwaW8sIHRlbXBsYXRlLT5uYW1lKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCWxlZF9kYXQtPmNkZXYubmFtZSA9IHRlbXBsYXRlLT5uYW1lOwogCWxlZF9kYXQtPmNkZXYuZGVmYXVsdF90cmlnZ2VyID0gdGVtcGxhdGUtPmRlZmF1bHRfdHJpZ2dlcjsKLQlsZWRfZGF0LT5ncGlvID0gdGVtcGxhdGUtPmdwaW87Ci0JbGVkX2RhdC0+Y2FuX3NsZWVwID0gZ3Bpb19jYW5zbGVlcCh0ZW1wbGF0ZS0+Z3Bpbyk7Ci0JbGVkX2RhdC0+YWN0aXZlX2xvdyA9IHRlbXBsYXRlLT5hY3RpdmVfbG93OworCWxlZF9kYXQtPmNhbl9zbGVlcCA9IGdwaW9kX2NhbnNsZWVwKGxlZF9kYXQtPmdwaW9kKTsKIAlsZWRfZGF0LT5ibGlua2luZyA9IDA7CiAJaWYgKGJsaW5rX3NldCkgewogCQlsZWRfZGF0LT5wbGF0Zm9ybV9ncGlvX2JsaW5rX3NldCA9IGJsaW5rX3NldDsKQEAgLTEyMiwzMCArMTMxLDI0IEBACiAJfQogCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBncGlvX2xlZF9zZXQ7CiAJaWYgKHRlbXBsYXRlLT5kZWZhdWx0X3N0YXRlID09IExFRFNfR1BJT19ERUZTVEFURV9LRUVQKQotCQlzdGF0ZSA9ICEhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobGVkX2RhdC0+Z3BpbykgXiBsZWRfZGF0LT5hY3RpdmVfbG93OworCQlzdGF0ZSA9ICEhZ3Bpb2RfZ2V0X3ZhbHVlX2NhbnNsZWVwKGxlZF9kYXQtPmdwaW9kKTsKIAllbHNlCiAJCXN0YXRlID0gKHRlbXBsYXRlLT5kZWZhdWx0X3N0YXRlID09IExFRFNfR1BJT19ERUZTVEFURV9PTik7CiAJbGVkX2RhdC0+Y2Rldi5icmlnaHRuZXNzID0gc3RhdGUgPyBMRURfRlVMTCA6IExFRF9PRkY7CiAJaWYgKCF0ZW1wbGF0ZS0+cmV0YWluX3N0YXRlX3N1c3BlbmRlZCkKIAkJbGVkX2RhdC0+Y2Rldi5mbGFncyB8PSBMRURfQ09SRV9TVVNQRU5EUkVTVU1FOwogCi0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGxlZF9kYXQtPmdwaW8sIGxlZF9kYXQtPmFjdGl2ZV9sb3cgXiBzdGF0ZSk7CisJcmV0ID0gZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChsZWRfZGF0LT5ncGlvZCwgc3RhdGUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJSU5JVF9XT1JLKCZsZWRfZGF0LT53b3JrLCBncGlvX2xlZF93b3JrKTsKIAotCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihwYXJlbnQsICZsZWRfZGF0LT5jZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOworCXJldHVybiBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIocGFyZW50LCAmbGVkX2RhdC0+Y2Rldik7CiB9CiAKIHN0YXRpYyB2b2lkIGRlbGV0ZV9ncGlvX2xlZChzdHJ1Y3QgZ3Bpb19sZWRfZGF0YSAqbGVkKQogewotCWlmICghZ3Bpb19pc192YWxpZChsZWQtPmdwaW8pKQotCQlyZXR1cm47CiAJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+Y2Rldik7CiAJY2FuY2VsX3dvcmtfc3luYygmbGVkLT53b3JrKTsKIH0KQEAgLTE2MSw0MCArMTY0LDQ3IEBACiAJCShzaXplb2Yoc3RydWN0IGdwaW9fbGVkX2RhdGEpICogbnVtX2xlZHMpOwogfQogCi0vKiBDb2RlIHRvIGNyZWF0ZSBmcm9tIE9wZW5GaXJtd2FyZSBwbGF0Zm9ybSBkZXZpY2VzICovCi0jaWZkZWYgQ09ORklHX09GX0dQSU8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRzX3ByaXYgKmdwaW9fbGVkc19jcmVhdGVfb2Yoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRzX3ByaXYgKmdwaW9fbGVkc19jcmVhdGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGUsICpjaGlsZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBmd25vZGVfaGFuZGxlICpjaGlsZDsKIAlzdHJ1Y3QgZ3Bpb19sZWRzX3ByaXYgKnByaXY7CiAJaW50IGNvdW50LCByZXQ7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAotCS8qIGNvdW50IExFRHMgaW4gdGhpcyBkZXZpY2UsIHNvIHdlIGtub3cgaG93IG11Y2ggdG8gYWxsb2NhdGUgKi8KLQljb3VudCA9IG9mX2dldF9hdmFpbGFibGVfY2hpbGRfY291bnQobnApOworCWNvdW50ID0gZGV2aWNlX2dldF9jaGlsZF9ub2RlX2NvdW50KGRldik7CiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiAKLQlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpCi0JCWlmIChvZl9nZXRfZ3BpbyhjaGlsZCwgMCkgPT0gLUVQUk9CRV9ERUZFUikKLQkJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwotCi0JcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2ZfZ3Bpb19sZWRzX3ByaXYoY291bnQpLAotCQkJR0ZQX0tFUk5FTCk7CisJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZl9ncGlvX2xlZHNfcHJpdihjb3VudCksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsKKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZShkZXYsIGNoaWxkKSB7CiAJCXN0cnVjdCBncGlvX2xlZCBsZWQgPSB7fTsKLQkJZW51bSBvZl9ncGlvX2ZsYWdzIGZsYWdzOwotCQljb25zdCBjaGFyICpzdGF0ZTsKKwkJY29uc3QgY2hhciAqc3RhdGUgPSBOVUxMOwogCi0JCWxlZC5ncGlvID0gb2ZfZ2V0X2dwaW9fZmxhZ3MoY2hpbGQsIDAsICZmbGFncyk7Ci0JCWxlZC5hY3RpdmVfbG93ID0gZmxhZ3MgJiBPRl9HUElPX0FDVElWRV9MT1c7Ci0JCWxlZC5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAibGFiZWwiLCBOVUxMKSA/IDogY2hpbGQtPm5hbWU7Ci0JCWxlZC5kZWZhdWx0X3RyaWdnZXIgPQotCQkJb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAibGludXgsZGVmYXVsdC10cmlnZ2VyIiwgTlVMTCk7Ci0JCXN0YXRlID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAiZGVmYXVsdC1zdGF0ZSIsIE5VTEwpOwotCQlpZiAoc3RhdGUpIHsKKwkJbGVkLmdwaW9kID0gZGV2bV9nZXRfZ3Bpb2RfZnJvbV9jaGlsZChkZXYsIGNoaWxkKTsKKwkJaWYgKElTX0VSUihsZWQuZ3Bpb2QpKSB7CisJCQlmd25vZGVfaGFuZGxlX3B1dChjaGlsZCk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCW5wID0gb2Zfbm9kZShjaGlsZCk7CisKKwkJaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGNoaWxkLCAibGFiZWwiKSkgeworCQkJZndub2RlX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGNoaWxkLCAibGFiZWwiLCAmbGVkLm5hbWUpOworCQl9IGVsc2UgeworCQkJaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiAhbGVkLm5hbWUgJiYgbnApCisJCQkJbGVkLm5hbWUgPSBucC0+bmFtZTsKKwkJCWlmICghbGVkLm5hbWUpCisJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJCX0KKwkJZndub2RlX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGNoaWxkLCAibGludXgsZGVmYXVsdC10cmlnZ2VyIiwKKwkJCQkJICAgICZsZWQuZGVmYXVsdF90cmlnZ2VyKTsKKworCQlpZiAoIWZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyhjaGlsZCwgImRlZmF1bHQtc3RhdGUiLAorCQkJCQkJICZzdGF0ZSkpIHsKIAkJCWlmICghc3RyY21wKHN0YXRlLCAia2VlcCIpKQogCQkJCWxlZC5kZWZhdWx0X3N0YXRlID0gTEVEU19HUElPX0RFRlNUQVRFX0tFRVA7CiAJCQllbHNlIGlmICghc3RyY21wKHN0YXRlLCAib24iKSkKQEAgLTIwMywxMyArMjEzLDEzIEBACiAJCQkJbGVkLmRlZmF1bHRfc3RhdGUgPSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGOwogCQl9CiAKLQkJaWYgKG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgInJldGFpbi1zdGF0ZS1zdXNwZW5kZWQiLCBOVUxMKSkKKwkJaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGNoaWxkLCAicmV0YWluLXN0YXRlLXN1c3BlbmRlZCIpKQogCQkJbGVkLnJldGFpbl9zdGF0ZV9zdXNwZW5kZWQgPSAxOwogCiAJCXJldCA9IGNyZWF0ZV9ncGlvX2xlZCgmbGVkLCAmcHJpdi0+bGVkc1twcml2LT5udW1fbGVkcysrXSwKLQkJCQkgICAgICAmcGRldi0+ZGV2LCBOVUxMKTsKKwkJCQkgICAgICBkZXYsIE5VTEwpOwogCQlpZiAocmV0IDwgMCkgewotCQkJb2Zfbm9kZV9wdXQoY2hpbGQpOworCQkJZndub2RlX2hhbmRsZV9wdXQoY2hpbGQpOwogCQkJZ290byBlcnI7CiAJCX0KIAl9CkBAIC0yMjgsMTIgKzIzOCw2IEBACiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9ncGlvX2xlZHNfbWF0Y2gpOwotI2Vsc2UgLyogQ09ORklHX09GX0dQSU8gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRzX3ByaXYgKmdwaW9fbGVkc19jcmVhdGVfb2Yoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfT0ZfR1BJTyAqLwogCiBzdGF0aWMgaW50IGdwaW9fbGVkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC0yNjEsNyArMjY1LDcgQEAKIAkJCX0KIAkJfQogCX0gZWxzZSB7Ci0JCXByaXYgPSBncGlvX2xlZHNfY3JlYXRlX29mKHBkZXYpOworCQlwcml2ID0gZ3Bpb19sZWRzX2NyZWF0ZShwZGV2KTsKIAkJaWYgKElTX0VSUihwcml2KSkKIAkJCXJldHVybiBQVFJfRVJSKHByaXYpOwogCX0KQEAgLTI4OCw3ICsyOTIsNyBAQAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJsZWRzLWdwaW8iLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9mX2dwaW9fbGVkc19tYXRjaCksCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX2dwaW9fbGVkc19tYXRjaCwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1iaW8tcHJpc29uLmMgYi9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uYwppbmRleCBmNzUyZDEyLi5iZTA2NTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uYworKysgYi9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uYwpAQCAtMTQsNjggKzE0LDM4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0cnVjdCBidWNrZXQgewotCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCBjZWxsczsKLX07CisjZGVmaW5lIE1JTl9DRUxMUyAxMDI0CiAKIHN0cnVjdCBkbV9iaW9fcHJpc29uIHsKKwlzcGlubG9ja190IGxvY2s7CiAJbWVtcG9vbF90ICpjZWxsX3Bvb2w7Ci0KLQl1bnNpZ25lZCBucl9idWNrZXRzOwotCXVuc2lnbmVkIGhhc2hfbWFzazsKLQlzdHJ1Y3QgYnVja2V0ICpidWNrZXRzOworCXN0cnVjdCByYl9yb290IGNlbGxzOwogfTsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHVpbnQzMl90IGNhbGNfbnJfYnVja2V0cyh1bnNpZ25lZCBucl9jZWxscykKLXsKLQl1aW50MzJfdCBuID0gMTI4OwotCi0JbnJfY2VsbHMgLz0gNDsKLQlucl9jZWxscyA9IG1pbihucl9jZWxscywgODE5MnUpOwotCi0Jd2hpbGUgKG4gPCBucl9jZWxscykKLQkJbiA8PD0gMTsKLQotCXJldHVybiBuOwotfQotCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKl9jZWxsX2NhY2hlOwogCi1zdGF0aWMgdm9pZCBpbml0X2J1Y2tldChzdHJ1Y3QgYnVja2V0ICpiKQotewotCXNwaW5fbG9ja19pbml0KCZiLT5sb2NrKTsKLQlJTklUX0hMSVNUX0hFQUQoJmItPmNlbGxzKTsKLX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCiAgKiBAbnJfY2VsbHMgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgY2VsbHMgeW91IHdhbnQgaW4gdXNlIF9jb25jdXJyZW50bHlfLgogICogRG9uJ3QgY29uZnVzZSBpdCB3aXRoIHRoZSBudW1iZXIgb2YgZGlzdGluY3Qga2V5cy4KICAqLwotc3RydWN0IGRtX2Jpb19wcmlzb24gKmRtX2Jpb19wcmlzb25fY3JlYXRlKHVuc2lnbmVkIG5yX2NlbGxzKQorc3RydWN0IGRtX2Jpb19wcmlzb24gKmRtX2Jpb19wcmlzb25fY3JlYXRlKHZvaWQpCiB7Ci0JdW5zaWduZWQgaTsKLQl1aW50MzJfdCBucl9idWNrZXRzID0gY2FsY19ucl9idWNrZXRzKG5yX2NlbGxzKTsKLQlzaXplX3QgbGVuID0gc2l6ZW9mKHN0cnVjdCBkbV9iaW9fcHJpc29uKSArCi0JCShzaXplb2Yoc3RydWN0IGJ1Y2tldCkgKiBucl9idWNrZXRzKTsKLQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCXN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24gPSBrbWFsbG9jKHNpemVvZigqcHJpc29uKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXByaXNvbikKIAkJcmV0dXJuIE5VTEw7CiAKLQlwcmlzb24tPmNlbGxfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChucl9jZWxscywgX2NlbGxfY2FjaGUpOworCXNwaW5fbG9ja19pbml0KCZwcmlzb24tPmxvY2spOworCisJcHJpc29uLT5jZWxsX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woTUlOX0NFTExTLCBfY2VsbF9jYWNoZSk7CiAJaWYgKCFwcmlzb24tPmNlbGxfcG9vbCkgewogCQlrZnJlZShwcmlzb24pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlwcmlzb24tPm5yX2J1Y2tldHMgPSBucl9idWNrZXRzOwotCXByaXNvbi0+aGFzaF9tYXNrID0gbnJfYnVja2V0cyAtIDE7Ci0JcHJpc29uLT5idWNrZXRzID0gKHN0cnVjdCBidWNrZXQgKikgKHByaXNvbiArIDEpOwotCWZvciAoaSA9IDA7IGkgPCBucl9idWNrZXRzOyBpKyspCi0JCWluaXRfYnVja2V0KHByaXNvbi0+YnVja2V0cyArIGkpOworCXByaXNvbi0+Y2VsbHMgPSBSQl9ST09UOwogCiAJcmV0dXJuIHByaXNvbjsKIH0KQEAgLTEwMSw2OCArNzEsNzMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX2Jpb19wcmlzb25fZnJlZV9jZWxsKTsKIAotc3RhdGljIHVpbnQzMl90IGhhc2hfa2V5KHN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24sIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5KQotewotCWNvbnN0IHVuc2lnbmVkIGxvbmcgQklHX1BSSU1FID0gNDI5NDk2NzI5MVVMOwotCXVpbnQ2NF90IGhhc2ggPSBrZXktPmJsb2NrICogQklHX1BSSU1FOwotCi0JcmV0dXJuICh1aW50MzJfdCkgKGhhc2ggJiBwcmlzb24tPmhhc2hfbWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQga2V5c19lcXVhbChzdHJ1Y3QgZG1fY2VsbF9rZXkgKmxocywgc3RydWN0IGRtX2NlbGxfa2V5ICpyaHMpCi17Ci0JICAgICAgIHJldHVybiAobGhzLT52aXJ0dWFsID09IHJocy0+dmlydHVhbCkgJiYKLQkJICAgICAgIChsaHMtPmRldiA9PSByaHMtPmRldikgJiYKLQkJICAgICAgIChsaHMtPmJsb2NrID09IHJocy0+YmxvY2spOwotfQotCi1zdGF0aWMgc3RydWN0IGJ1Y2tldCAqZ2V0X2J1Y2tldChzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uLAotCQkJCSBzdHJ1Y3QgZG1fY2VsbF9rZXkgKmtleSkKLXsKLQlyZXR1cm4gcHJpc29uLT5idWNrZXRzICsgaGFzaF9rZXkocHJpc29uLCBrZXkpOwotfQotCi1zdGF0aWMgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqX19zZWFyY2hfYnVja2V0KHN0cnVjdCBidWNrZXQgKmIsCi0JCQkJCQkgIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5KQotewotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGw7Ci0KLQlobGlzdF9mb3JfZWFjaF9lbnRyeShjZWxsLCAmYi0+Y2VsbHMsIGxpc3QpCi0JCWlmIChrZXlzX2VxdWFsKCZjZWxsLT5rZXksIGtleSkpCi0JCQlyZXR1cm4gY2VsbDsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBfX3NldHVwX25ld19jZWxsKHN0cnVjdCBidWNrZXQgKmIsCi0JCQkgICAgIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5LAorc3RhdGljIHZvaWQgX19zZXR1cF9uZXdfY2VsbChzdHJ1Y3QgZG1fY2VsbF9rZXkgKmtleSwKIAkJCSAgICAgc3RydWN0IGJpbyAqaG9sZGVyLAogCQkJICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQogewotCW1lbWNweSgmY2VsbC0+a2V5LCBrZXksIHNpemVvZihjZWxsLT5rZXkpKTsKLQljZWxsLT5ob2xkZXIgPSBob2xkZXI7Ci0JYmlvX2xpc3RfaW5pdCgmY2VsbC0+Ymlvcyk7Ci0JaGxpc3RfYWRkX2hlYWQoJmNlbGwtPmxpc3QsICZiLT5jZWxscyk7CisgICAgICAgbWVtY3B5KCZjZWxsLT5rZXksIGtleSwgc2l6ZW9mKGNlbGwtPmtleSkpOworICAgICAgIGNlbGwtPmhvbGRlciA9IGhvbGRlcjsKKyAgICAgICBiaW9fbGlzdF9pbml0KCZjZWxsLT5iaW9zKTsKIH0KIAotc3RhdGljIGludCBfX2Jpb19kZXRhaW4oc3RydWN0IGJ1Y2tldCAqYiwKK3N0YXRpYyBpbnQgY21wX2tleXMoc3RydWN0IGRtX2NlbGxfa2V5ICpsaHMsCisJCSAgICBzdHJ1Y3QgZG1fY2VsbF9rZXkgKnJocykKK3sKKwlpZiAobGhzLT52aXJ0dWFsIDwgcmhzLT52aXJ0dWFsKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobGhzLT52aXJ0dWFsID4gcmhzLT52aXJ0dWFsKQorCQlyZXR1cm4gMTsKKworCWlmIChsaHMtPmRldiA8IHJocy0+ZGV2KQorCQlyZXR1cm4gLTE7CisKKwlpZiAobGhzLT5kZXYgPiByaHMtPmRldikKKwkJcmV0dXJuIDE7CisKKwlpZiAobGhzLT5ibG9ja19lbmQgPD0gcmhzLT5ibG9ja19iZWdpbikKKwkJcmV0dXJuIC0xOworCisJaWYgKGxocy0+YmxvY2tfYmVnaW4gPj0gcmhzLT5ibG9ja19lbmQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19iaW9fZGV0YWluKHN0cnVjdCBkbV9iaW9fcHJpc29uICpwcmlzb24sCiAJCQlzdHJ1Y3QgZG1fY2VsbF9rZXkgKmtleSwKIAkJCXN0cnVjdCBiaW8gKmlubWF0ZSwKIAkJCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGxfcHJlYWxsb2MsCiAJCQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqY2VsbF9yZXN1bHQpCiB7Ci0Jc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbDsKKwlpbnQgcjsKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICZwcmlzb24tPmNlbGxzLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOwogCi0JY2VsbCA9IF9fc2VhcmNoX2J1Y2tldChiLCBrZXkpOwotCWlmIChjZWxsKSB7Ci0JCWlmIChpbm1hdGUpCi0JCQliaW9fbGlzdF9hZGQoJmNlbGwtPmJpb3MsIGlubWF0ZSk7Ci0JCSpjZWxsX3Jlc3VsdCA9IGNlbGw7Ci0JCXJldHVybiAxOworCXdoaWxlICgqbmV3KSB7CisJCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwgPQorCQkJY29udGFpbmVyX29mKCpuZXcsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwsIG5vZGUpOworCisJCXIgPSBjbXBfa2V5cyhrZXksICZjZWxsLT5rZXkpOworCisJCXBhcmVudCA9ICpuZXc7CisJCWlmIChyIDwgMCkKKwkJCW5ldyA9ICYoKCpuZXcpLT5yYl9sZWZ0KTsKKwkJZWxzZSBpZiAociA+IDApCisJCQluZXcgPSAmKCgqbmV3KS0+cmJfcmlnaHQpOworCQllbHNlIHsKKwkJCWlmIChpbm1hdGUpCisJCQkJYmlvX2xpc3RfYWRkKCZjZWxsLT5iaW9zLCBpbm1hdGUpOworCQkJKmNlbGxfcmVzdWx0ID0gY2VsbDsKKwkJCXJldHVybiAxOworCQl9CiAJfQogCi0JX19zZXR1cF9uZXdfY2VsbChiLCBrZXksIGlubWF0ZSwgY2VsbF9wcmVhbGxvYyk7CisJX19zZXR1cF9uZXdfY2VsbChrZXksIGlubWF0ZSwgY2VsbF9wcmVhbGxvYyk7CiAJKmNlbGxfcmVzdWx0ID0gY2VsbF9wcmVhbGxvYzsKKworCXJiX2xpbmtfbm9kZSgmY2VsbF9wcmVhbGxvYy0+bm9kZSwgcGFyZW50LCBuZXcpOworCXJiX2luc2VydF9jb2xvcigmY2VsbF9wcmVhbGxvYy0+bm9kZSwgJnByaXNvbi0+Y2VsbHMpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3NCwxMSArMTQ5LDEwIEBACiB7CiAJaW50IHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYnVja2V0ICpiID0gZ2V0X2J1Y2tldChwcmlzb24sIGtleSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYi0+bG9jaywgZmxhZ3MpOwotCXIgPSBfX2Jpb19kZXRhaW4oYiwga2V5LCBpbm1hdGUsIGNlbGxfcHJlYWxsb2MsIGNlbGxfcmVzdWx0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOworCXIgPSBfX2Jpb19kZXRhaW4ocHJpc29uLCBrZXksIGlubWF0ZSwgY2VsbF9wcmVhbGxvYywgY2VsbF9yZXN1bHQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0yMDUsMTAgKzE3OSwxMSBAQAogLyoKICAqIEBpbm1hdGVzIG11c3QgaGF2ZSBiZWVuIGluaXRpYWxpc2VkIHByaW9yIHRvIHRoaXMgY2FsbAogICovCi1zdGF0aWMgdm9pZCBfX2NlbGxfcmVsZWFzZShzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsLAorc3RhdGljIHZvaWQgX19jZWxsX3JlbGVhc2Uoc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbiwKKwkJCSAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCiAJCQkgICBzdHJ1Y3QgYmlvX2xpc3QgKmlubWF0ZXMpCiB7Ci0JaGxpc3RfZGVsKCZjZWxsLT5saXN0KTsKKwlyYl9lcmFzZSgmY2VsbC0+bm9kZSwgJnByaXNvbi0+Y2VsbHMpOwogCiAJaWYgKGlubWF0ZXMpIHsKIAkJaWYgKGNlbGwtPmhvbGRlcikKQEAgLTIyMiwyMSArMTk3LDIxIEBACiAJCSAgICAgc3RydWN0IGJpb19saXN0ICpiaW9zKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGJ1Y2tldCAqYiA9IGdldF9idWNrZXQocHJpc29uLCAmY2VsbC0+a2V5KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiLT5sb2NrLCBmbGFncyk7Ci0JX19jZWxsX3JlbGVhc2UoY2VsbCwgYmlvcyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcmlzb24tPmxvY2ssIGZsYWdzKTsKKwlfX2NlbGxfcmVsZWFzZShwcmlzb24sIGNlbGwsIGJpb3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fY2VsbF9yZWxlYXNlKTsKIAogLyoKICAqIFNvbWV0aW1lcyB3ZSBkb24ndCB3YW50IHRoZSBob2xkZXIsIGp1c3QgdGhlIGFkZGl0aW9uYWwgYmlvcy4KICAqLwotc3RhdGljIHZvaWQgX19jZWxsX3JlbGVhc2Vfbm9faG9sZGVyKHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCitzdGF0aWMgdm9pZCBfX2NlbGxfcmVsZWFzZV9ub19ob2xkZXIoc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbiwKKwkJCQkgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCiAJCQkJICAgICBzdHJ1Y3QgYmlvX2xpc3QgKmlubWF0ZXMpCiB7Ci0JaGxpc3RfZGVsKCZjZWxsLT5saXN0KTsKKwlyYl9lcmFzZSgmY2VsbC0+bm9kZSwgJnByaXNvbi0+Y2VsbHMpOwogCWJpb19saXN0X21lcmdlKGlubWF0ZXMsICZjZWxsLT5iaW9zKTsKIH0KIApAQCAtMjQ1LDExICsyMjAsMTAgQEAKIAkJCSAgICAgICBzdHJ1Y3QgYmlvX2xpc3QgKmlubWF0ZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYnVja2V0ICpiID0gZ2V0X2J1Y2tldChwcmlzb24sICZjZWxsLT5rZXkpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmItPmxvY2ssIGZsYWdzKTsKLQlfX2NlbGxfcmVsZWFzZV9ub19ob2xkZXIoY2VsbCwgaW5tYXRlcyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcmlzb24tPmxvY2ssIGZsYWdzKTsKKwlfX2NlbGxfcmVsZWFzZV9ub19ob2xkZXIocHJpc29uLCBjZWxsLCBpbm1hdGVzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcmlzb24tPmxvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX2NlbGxfcmVsZWFzZV9ub19ob2xkZXIpOwogCkBAIC0yNjcsNiArMjQxLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbV9jZWxsX2Vycm9yKTsKIAordm9pZCBkbV9jZWxsX3Zpc2l0X3JlbGVhc2Uoc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbiwKKwkJCSAgIHZvaWQgKCp2aXNpdF9mbikodm9pZCAqLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICopLAorCQkJICAgdm9pZCAqY29udGV4dCwKKwkJCSAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcmlzb24tPmxvY2ssIGZsYWdzKTsKKwl2aXNpdF9mbihjb250ZXh0LCBjZWxsKTsKKwlyYl9lcmFzZSgmY2VsbC0+bm9kZSwgJnByaXNvbi0+Y2VsbHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXNvbi0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1fY2VsbF92aXNpdF9yZWxlYXNlKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2RlZmluZSBERUZFUlJFRF9TRVRfU0laRSA2NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1iaW8tcHJpc29uLmggYi9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uaAppbmRleCA2ODA1YTE0Li43NGNmMDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uaAorKysgYi9kcml2ZXJzL21kL2RtLWJpby1wcmlzb24uaApAQCAtMTAsOCArMTAsOCBAQAogI2luY2x1ZGUgInBlcnNpc3RlbnQtZGF0YS9kbS1ibG9jay1tYW5hZ2VyLmgiIC8qIEZJWE1FOiBmb3IgZG1fYmxvY2tfdCAqLwogI2luY2x1ZGUgImRtLXRoaW4tbWV0YWRhdGEuaCIgLyogRklYTUU6IGZvciBkbV90aGluX2lkICovCiAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTIzLDExICsyMywxNCBAQAogICovCiBzdHJ1Y3QgZG1fYmlvX3ByaXNvbjsKIAotLyogRklYTUU6IHRoaXMgbmVlZHMgdG8gYmUgbW9yZSBhYnN0cmFjdCAqLworLyoKKyAqIEtleXMgZGVmaW5lIGEgcmFuZ2Ugb2YgYmxvY2tzIHdpdGhpbiBlaXRoZXIgYSB2aXJ0dWFsIG9yIHBoeXNpY2FsCisgKiBkZXZpY2UuCisgKi8KIHN0cnVjdCBkbV9jZWxsX2tleSB7CiAJaW50IHZpcnR1YWw7CiAJZG1fdGhpbl9pZCBkZXY7Ci0JZG1fYmxvY2tfdCBibG9jazsKKwlkbV9ibG9ja190IGJsb2NrX2JlZ2luLCBibG9ja19lbmQ7CiB9OwogCiAvKgpAQCAtMzUsMTMgKzM4LDE1IEBACiAgKiB0aGVtc2VsdmVzLgogICovCiBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgdXNlcl9saXN0OwkvKiBmb3IgY2xpZW50IHVzZSAqLworCXN0cnVjdCByYl9ub2RlIG5vZGU7CisKIAlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5OwogCXN0cnVjdCBiaW8gKmhvbGRlcjsKIAlzdHJ1Y3QgYmlvX2xpc3QgYmlvczsKIH07CiAKLXN0cnVjdCBkbV9iaW9fcHJpc29uICpkbV9iaW9fcHJpc29uX2NyZWF0ZSh1bnNpZ25lZCBucl9jZWxscyk7CitzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqZG1fYmlvX3ByaXNvbl9jcmVhdGUodm9pZCk7CiB2b2lkIGRtX2Jpb19wcmlzb25fZGVzdHJveShzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uKTsKIAogLyoKQEAgLTU3LDcgKzYyLDcgQEAKIAkJCSAgICAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCk7CiAKIC8qCi0gKiBDcmVhdGVzLCBvciByZXRyaWV2ZXMgYSBjZWxsIGZvciB0aGUgZ2l2ZW4ga2V5LgorICogQ3JlYXRlcywgb3IgcmV0cmlldmVzIGEgY2VsbCB0aGF0IG92ZXJsYXBzIHRoZSBnaXZlbiBrZXkuCiAgKgogICogUmV0dXJucyAxIGlmIHByZS1leGlzdGluZyBjZWxsIHJldHVybmVkLCB6ZXJvIGlmIG5ldyBjZWxsIGNyZWF0ZWQgdXNpbmcKICAqIEBjZWxsX3ByZWFsbG9jLgpAQCAtNjgsNyArNzMsOCBAQAogCQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqY2VsbF9yZXN1bHQpOwogCiAvKgotICogQW4gYXRvbWljIG9wIHRoYXQgY29tYmluZXMgcmV0cmlldmluZyBhIGNlbGwsIGFuZCBhZGRpbmcgYSBiaW8gdG8gaXQuCisgKiBBbiBhdG9taWMgb3AgdGhhdCBjb21iaW5lcyByZXRyaWV2aW5nIG9yIGNyZWF0aW5nIGEgY2VsbCwgYW5kIGFkZGluZyBhCisgKiBiaW8gdG8gaXQuCiAgKgogICogUmV0dXJucyAxIGlmIHRoZSBjZWxsIHdhcyBhbHJlYWR5IGhlbGQsIDAgaWYgQGlubWF0ZSBpcyB0aGUgbmV3IGhvbGRlci4KICAqLwpAQCAtODcsNiArOTMsMTQgQEAKIHZvaWQgZG1fY2VsbF9lcnJvcihzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uLAogCQkgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsLCBpbnQgZXJyb3IpOwogCisvKgorICogVmlzaXRzIHRoZSBjZWxsIGFuZCB0aGVuIHJlbGVhc2VzLiAgR3VhcmFudGVlcyBubyBuZXcgaW5tYXRlcyBhcmUKKyAqIGluc2VydGVkIGJldHdlZW4gdGhlIHZpc2l0IGFuZCByZWxlYXNlLgorICovCit2b2lkIGRtX2NlbGxfdmlzaXRfcmVsZWFzZShzdHJ1Y3QgZG1fYmlvX3ByaXNvbiAqcHJpc29uLAorCQkJICAgdm9pZCAoKnZpc2l0X2ZuKSh2b2lkICosIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKiksCisJCQkgICB2b2lkICpjb250ZXh0LCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tYnVmaW8uYyBiL2RyaXZlcnMvbWQvZG0tYnVmaW8uYwppbmRleCBhZmU3OTcxLi5jMzNiNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWJ1ZmlvLmMKKysrIGIvZHJpdmVycy9tZC9kbS1idWZpby5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Nocmlua2VyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAiYnVmaW8iCiAKQEAgLTM0LDEyICszNSwxNyBAQAogLyoKICAqIENoZWNrIGJ1ZmZlciBhZ2VzIGluIHRoaXMgaW50ZXJ2YWwgKHNlY29uZHMpCiAgKi8KLSNkZWZpbmUgRE1fQlVGSU9fV09SS19USU1FUl9TRUNTCTEwCisjZGVmaW5lIERNX0JVRklPX1dPUktfVElNRVJfU0VDUwkzMAogCiAvKgogICogRnJlZSBidWZmZXJzIHdoZW4gdGhleSBhcmUgb2xkZXIgdGhhbiB0aGlzIChzZWNvbmRzKQogICovCi0jZGVmaW5lIERNX0JVRklPX0RFRkFVTFRfQUdFX1NFQ1MJNjAKKyNkZWZpbmUgRE1fQlVGSU9fREVGQVVMVF9BR0VfU0VDUwkzMDAKKworLyoKKyAqIFRoZSBuciBvZiBieXRlcyBvZiBjYWNoZWQgZGF0YSB0byBrZWVwIGFyb3VuZC4KKyAqLworI2RlZmluZSBETV9CVUZJT19ERUZBVUxUX1JFVEFJTl9CWVRFUyAgICgyNTYgKiAxMDI0KQogCiAvKgogICogVGhlIG51bWJlciBvZiBidmVjIGVudHJpZXMgdGhhdCBhcmUgZW1iZWRkZWQgZGlyZWN0bHkgaW4gdGhlIGJ1ZmZlci4KQEAgLTQ4LDE0ICs1NCw2IEBACiAjZGVmaW5lIERNX0JVRklPX0lOTElORV9WRUNTCQkxNgogCiAvKgotICogQnVmZmVyIGhhc2gKLSAqLwotI2RlZmluZSBETV9CVUZJT19IQVNIX0JJVFMJMjAKLSNkZWZpbmUgRE1fQlVGSU9fSEFTSChibG9jaykgXAotCSgoKChibG9jaykgPj4gRE1fQlVGSU9fSEFTSF9CSVRTKSBeIChibG9jaykpICYgXAotCSAoKDEgPDwgRE1fQlVGSU9fSEFTSF9CSVRTKSAtIDEpKQotCi0vKgogICogRG9uJ3QgdHJ5IHRvIHVzZSBrbWVtX2NhY2hlX2FsbG9jIGZvciBibG9ja3MgbGFyZ2VyIHRoYW4gdGhpcy4KICAqIEZvciBleHBsYW5hdGlvbiwgc2VlIGFsbG9jX2J1ZmZlcl9kYXRhIGJlbG93LgogICovCkBAIC0xMDYsNyArMTA0LDcgQEAKIAogCXVuc2lnbmVkIG1pbmltdW1fYnVmZmVyczsKIAotCXN0cnVjdCBobGlzdF9oZWFkICpjYWNoZV9oYXNoOworCXN0cnVjdCByYl9yb290IGJ1ZmZlcl90cmVlOwogCXdhaXRfcXVldWVfaGVhZF90IGZyZWVfYnVmZmVyX3dhaXQ7CiAKIAlpbnQgYXN5bmNfd3JpdGVfZXJyb3I7CkBAIC0xMzUsNyArMTMzLDcgQEAKIH07CiAKIHN0cnVjdCBkbV9idWZmZXIgewotCXN0cnVjdCBobGlzdF9ub2RlIGhhc2hfbGlzdDsKKwlzdHJ1Y3QgcmJfbm9kZSBub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1X2xpc3Q7CiAJc2VjdG9yX3QgYmxvY2s7CiAJdm9pZCAqZGF0YTsKQEAgLTIyMyw2ICsyMjEsNyBAQAogICogQnVmZmVycyBhcmUgZnJlZWQgYWZ0ZXIgdGhpcyB0aW1lb3V0CiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBkbV9idWZpb19tYXhfYWdlID0gRE1fQlVGSU9fREVGQVVMVF9BR0VfU0VDUzsKK3N0YXRpYyB1bnNpZ25lZCBkbV9idWZpb19yZXRhaW5fYnl0ZXMgPSBETV9CVUZJT19ERUZBVUxUX1JFVEFJTl9CWVRFUzsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZG1fYnVmaW9fcGVha19hbGxvY2F0ZWQ7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkbV9idWZpb19hbGxvY2F0ZWRfa21lbV9jYWNoZTsKQEAgLTI1Myw2ICsyNTIsNTMgQEAKICAqLwogc3RhdGljIERFRklORV9NVVRFWChkbV9idWZpb19jbGllbnRzX2xvY2spOwogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEEgcmVkL2JsYWNrIHRyZWUgYWN0cyBhcyBhbiBpbmRleCBmb3IgYWxsIHRoZSBidWZmZXJzLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IGRtX2J1ZmZlciAqX19maW5kKHN0cnVjdCBkbV9idWZpb19jbGllbnQgKmMsIHNlY3Rvcl90IGJsb2NrKQoreworCXN0cnVjdCByYl9ub2RlICpuID0gYy0+YnVmZmVyX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgZG1fYnVmZmVyICpiOworCisJd2hpbGUgKG4pIHsKKwkJYiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZG1fYnVmZmVyLCBub2RlKTsKKworCQlpZiAoYi0+YmxvY2sgPT0gYmxvY2spCisJCQlyZXR1cm4gYjsKKworCQluID0gKGItPmJsb2NrIDwgYmxvY2spID8gbi0+cmJfbGVmdCA6IG4tPnJiX3JpZ2h0OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBfX2luc2VydChzdHJ1Y3QgZG1fYnVmaW9fY2xpZW50ICpjLCBzdHJ1Y3QgZG1fYnVmZmVyICpiKQoreworCXN0cnVjdCByYl9ub2RlICoqbmV3ID0gJmMtPmJ1ZmZlcl90cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBkbV9idWZmZXIgKmZvdW5kOworCisJd2hpbGUgKCpuZXcpIHsKKwkJZm91bmQgPSBjb250YWluZXJfb2YoKm5ldywgc3RydWN0IGRtX2J1ZmZlciwgbm9kZSk7CisKKwkJaWYgKGZvdW5kLT5ibG9jayA9PSBiLT5ibG9jaykgeworCQkJQlVHX09OKGZvdW5kICE9IGIpOworCQkJcmV0dXJuOworCQl9CisKKwkJcGFyZW50ID0gKm5ldzsKKwkJbmV3ID0gKGZvdW5kLT5ibG9jayA8IGItPmJsb2NrKSA/CisJCQkmKCgqbmV3KS0+cmJfbGVmdCkgOiAmKCgqbmV3KS0+cmJfcmlnaHQpOworCX0KKworCXJiX2xpbmtfbm9kZSgmYi0+bm9kZSwgcGFyZW50LCBuZXcpOworCXJiX2luc2VydF9jb2xvcigmYi0+bm9kZSwgJmMtPmJ1ZmZlcl90cmVlKTsKK30KKworc3RhdGljIHZvaWQgX19yZW1vdmUoc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYywgc3RydWN0IGRtX2J1ZmZlciAqYikKK3sKKwlyYl9lcmFzZSgmYi0+bm9kZSwgJmMtPmJ1ZmZlcl90cmVlKTsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQgYWRqdXN0X3RvdGFsX2FsbG9jYXRlZChlbnVtIGRhdGFfbW9kZSBkYXRhX21vZGUsIGxvbmcgZGlmZikKQEAgLTQzNCw3ICs0ODAsNyBAQAogCWItPmJsb2NrID0gYmxvY2s7CiAJYi0+bGlzdF9tb2RlID0gZGlydHk7CiAJbGlzdF9hZGQoJmItPmxydV9saXN0LCAmYy0+bHJ1W2RpcnR5XSk7Ci0JaGxpc3RfYWRkX2hlYWQoJmItPmhhc2hfbGlzdCwgJmMtPmNhY2hlX2hhc2hbRE1fQlVGSU9fSEFTSChibG9jayldKTsKKwlfX2luc2VydChiLT5jLCBiKTsKIAliLT5sYXN0X2FjY2Vzc2VkID0gamlmZmllczsKIH0KIApAQCAtNDQ4LDcgKzQ5NCw3IEBACiAJQlVHX09OKCFjLT5uX2J1ZmZlcnNbYi0+bGlzdF9tb2RlXSk7CiAKIAljLT5uX2J1ZmZlcnNbYi0+bGlzdF9tb2RlXS0tOwotCWhsaXN0X2RlbCgmYi0+aGFzaF9saXN0KTsKKwlfX3JlbW92ZShiLT5jLCBiKTsKIAlsaXN0X2RlbCgmYi0+bHJ1X2xpc3QpOwogfQogCkBAIC01MzIsNiArNTc4LDE5IEBACiAJCWVuZF9pbygmYi0+YmlvLCByKTsKIH0KIAorc3RhdGljIHZvaWQgaW5saW5lX2VuZGlvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycm9yKQoreworCWJpb19lbmRfaW9fdCAqZW5kX2ZuID0gYmlvLT5iaV9wcml2YXRlOworCisJLyoKKwkgKiBSZXNldCB0aGUgYmlvIHRvIGZyZWUgYW55IGF0dGFjaGVkIHJlc291cmNlcworCSAqIChlLmcuIGJpbyBpbnRlZ3JpdHkgcHJvZmlsZXMpLgorCSAqLworCWJpb19yZXNldChiaW8pOworCisJZW5kX2ZuKGJpbywgZXJyb3IpOworfQorCiBzdGF0aWMgdm9pZCB1c2VfaW5saW5lX2JpbyhzdHJ1Y3QgZG1fYnVmZmVyICpiLCBpbnQgcncsIHNlY3Rvcl90IGJsb2NrLAogCQkJICAgYmlvX2VuZF9pb190ICplbmRfaW8pCiB7CkBAIC01NDMsNyArNjAyLDEyIEBACiAJYi0+YmlvLmJpX21heF92ZWNzID0gRE1fQlVGSU9fSU5MSU5FX1ZFQ1M7CiAJYi0+YmlvLmJpX2l0ZXIuYmlfc2VjdG9yID0gYmxvY2sgPDwgYi0+Yy0+c2VjdG9yc19wZXJfYmxvY2tfYml0czsKIAliLT5iaW8uYmlfYmRldiA9IGItPmMtPmJkZXY7Ci0JYi0+YmlvLmJpX2VuZF9pbyA9IGVuZF9pbzsKKwliLT5iaW8uYmlfZW5kX2lvID0gaW5saW5lX2VuZGlvOworCS8qCisJICogVXNlIG9mIC5iaV9wcml2YXRlIGlzbid0IGEgcHJvYmxlbSBoZXJlIGJlY2F1c2UKKwkgKiB0aGUgZG1fYnVmZmVyJ3MgaW5saW5lIGJpbyBpcyBsb2NhbCB0byBidWZpby4KKwkgKi8KKwliLT5iaW8uYmlfcHJpdmF0ZSA9IGVuZF9pbzsKIAogCS8qCiAJICogV2UgYXNzdW1lIHRoYXQgaWYgbGVuID49IFBBR0VfU0laRSBwdHIgaXMgcGFnZS1hbGlnbmVkLgpAQCAtODg3LDIzICs5NTEsNiBAQAogCQlfX3dyaXRlX2RpcnR5X2J1ZmZlcnNfYXN5bmMoYywgMSwgd3JpdGVfbGlzdCk7CiB9CiAKLS8qCi0gKiBGaW5kIGEgYnVmZmVyIGluIHRoZSBoYXNoLgotICovCi1zdGF0aWMgc3RydWN0IGRtX2J1ZmZlciAqX19maW5kKHN0cnVjdCBkbV9idWZpb19jbGllbnQgKmMsIHNlY3Rvcl90IGJsb2NrKQotewotCXN0cnVjdCBkbV9idWZmZXIgKmI7Ci0KLQlobGlzdF9mb3JfZWFjaF9lbnRyeShiLCAmYy0+Y2FjaGVfaGFzaFtETV9CVUZJT19IQVNIKGJsb2NrKV0sCi0JCQkgICAgIGhhc2hfbGlzdCkgewotCQlkbV9idWZpb19jb25kX3Jlc2NoZWQoKTsKLQkJaWYgKGItPmJsb2NrID09IGJsb2NrKQotCQkJcmV0dXJuIGI7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogR2V0dGluZyBhIGJ1ZmZlcgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDMzLDQ1ICsxNDgwLDUyIEBACiB9CiAKIC8qCi0gKiBUZXN0IGlmIHRoZSBidWZmZXIgaXMgdW51c2VkIGFuZCB0b28gb2xkLCBhbmQgY29tbWl0IGl0LgorICogV2UgbWF5IG5vdCBiZSBhYmxlIHRvIGV2aWN0IHRoaXMgYnVmZmVyIGlmIElPIHBlbmRpbmcgb3IgdGhlIGNsaWVudAorICogaXMgc3RpbGwgdXNpbmcgaXQuICBDYWxsZXIgaXMgZXhwZWN0ZWQgdG8ga25vdyBidWZmZXIgaXMgdG9vIG9sZC4KKyAqCiAgKiBBbmQgaWYgR0ZQX05PRlMgaXMgdXNlZCwgd2UgbXVzdCBub3QgZG8gYW55IEkvTyBiZWNhdXNlIHdlIGhvbGQKICAqIGRtX2J1ZmlvX2NsaWVudHNfbG9jayBhbmQgd2Ugd291bGQgcmlzayBkZWFkbG9jayBpZiB0aGUgSS9PIGdldHMKICAqIHJlcm91dGVkIHRvIGRpZmZlcmVudCBidWZpbyBjbGllbnQuCiAgKi8KLXN0YXRpYyBpbnQgX19jbGVhbnVwX29sZF9idWZmZXIoc3RydWN0IGRtX2J1ZmZlciAqYiwgZ2ZwX3QgZ2ZwLAotCQkJCXVuc2lnbmVkIGxvbmcgbWF4X2ppZmZpZXMpCitzdGF0aWMgYm9vbCBfX3RyeV9ldmljdF9idWZmZXIoc3RydWN0IGRtX2J1ZmZlciAqYiwgZ2ZwX3QgZ2ZwKQogewotCWlmIChqaWZmaWVzIC0gYi0+bGFzdF9hY2Nlc3NlZCA8IG1heF9qaWZmaWVzKQotCQlyZXR1cm4gMDsKLQogCWlmICghKGdmcCAmIF9fR0ZQX0ZTKSkgewogCQlpZiAodGVzdF9iaXQoQl9SRUFESU5HLCAmYi0+c3RhdGUpIHx8CiAJCSAgICB0ZXN0X2JpdChCX1dSSVRJTkcsICZiLT5zdGF0ZSkgfHwKIAkJICAgIHRlc3RfYml0KEJfRElSVFksICZiLT5zdGF0ZSkpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlpZiAoYi0+aG9sZF9jb3VudCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCV9fbWFrZV9idWZmZXJfY2xlYW4oYik7CiAJX191bmxpbmtfYnVmZmVyKGIpOwogCV9fZnJlZV9idWZmZXJfd2FrZShiKTsKIAotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgbG9uZyBfX3NjYW4oc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYywgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLAotCQkgICBnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyB1bnNpZ25lZCBnZXRfcmV0YWluX2J1ZmZlcnMoc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYykKK3sKKyAgICAgICAgdW5zaWduZWQgcmV0YWluX2J5dGVzID0gQUNDRVNTX09OQ0UoZG1fYnVmaW9fcmV0YWluX2J5dGVzKTsKKyAgICAgICAgcmV0dXJuIHJldGFpbl9ieXRlcyAvIGMtPmJsb2NrX3NpemU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fc2NhbihzdHJ1Y3QgZG1fYnVmaW9fY2xpZW50ICpjLCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCisJCQkgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaW50IGw7CiAJc3RydWN0IGRtX2J1ZmZlciAqYiwgKnRtcDsKLQlsb25nIGZyZWVkID0gMDsKKwl1bnNpZ25lZCBsb25nIGZyZWVkID0gMDsKKwl1bnNpZ25lZCBsb25nIGNvdW50ID0gbnJfdG9fc2NhbjsKKwl1bnNpZ25lZCByZXRhaW5fdGFyZ2V0ID0gZ2V0X3JldGFpbl9idWZmZXJzKGMpOwogCiAJZm9yIChsID0gMDsgbCA8IExJU1RfU0laRTsgbCsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGIsIHRtcCwgJmMtPmxydVtsXSwgbHJ1X2xpc3QpIHsKLQkJCWZyZWVkICs9IF9fY2xlYW51cF9vbGRfYnVmZmVyKGIsIGdmcF9tYXNrLCAwKTsKLQkJCWlmICghLS1ucl90b19zY2FuKQorCQkJaWYgKF9fdHJ5X2V2aWN0X2J1ZmZlcihiLCBnZnBfbWFzaykpCisJCQkJZnJlZWQrKzsKKwkJCWlmICghLS1ucl90b19zY2FuIHx8ICgoY291bnQgLSBmcmVlZCkgPD0gcmV0YWluX3RhcmdldCkpCiAJCQkJcmV0dXJuIGZyZWVkOwogCQkJZG1fYnVmaW9fY29uZF9yZXNjaGVkKCk7CiAJCX0KQEAgLTE1MzMsMTEgKzE1ODcsNyBAQAogCQlyID0gLUVOT01FTTsKIAkJZ290byBiYWRfY2xpZW50OwogCX0KLQljLT5jYWNoZV9oYXNoID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpIDw8IERNX0JVRklPX0hBU0hfQklUUyk7Ci0JaWYgKCFjLT5jYWNoZV9oYXNoKSB7Ci0JCXIgPSAtRU5PTUVNOwotCQlnb3RvIGJhZF9oYXNoOwotCX0KKwljLT5idWZmZXJfdHJlZSA9IFJCX1JPT1Q7CiAKIAljLT5iZGV2ID0gYmRldjsKIAljLT5ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKQEAgLTE1NTYsOSArMTYwNiw2IEBACiAJCWMtPm5fYnVmZmVyc1tpXSA9IDA7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IDEgPDwgRE1fQlVGSU9fSEFTSF9CSVRTOyBpKyspCi0JCUlOSVRfSExJU1RfSEVBRCgmYy0+Y2FjaGVfaGFzaFtpXSk7Ci0KIAltdXRleF9pbml0KCZjLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYy0+cmVzZXJ2ZWRfYnVmZmVycyk7CiAJYy0+bmVlZF9yZXNlcnZlZF9idWZmZXJzID0gcmVzZXJ2ZWRfYnVmZmVyczsKQEAgLTE2MzIsOCArMTY3OSw2IEBACiAJfQogCWRtX2lvX2NsaWVudF9kZXN0cm95KGMtPmRtX2lvKTsKIGJhZF9kbV9pbzoKLQl2ZnJlZShjLT5jYWNoZV9oYXNoKTsKLWJhZF9oYXNoOgogCWtmcmVlKGMpOwogYmFkX2NsaWVudDoKIAlyZXR1cm4gRVJSX1BUUihyKTsKQEAgLTE2NjAsOSArMTcwNSw3IEBACiAKIAltdXRleF91bmxvY2soJmRtX2J1ZmlvX2NsaWVudHNfbG9jayk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMSA8PCBETV9CVUZJT19IQVNIX0JJVFM7IGkrKykKLQkJQlVHX09OKCFobGlzdF9lbXB0eSgmYy0+Y2FjaGVfaGFzaFtpXSkpOwotCisJQlVHX09OKCFSQl9FTVBUWV9ST09UKCZjLT5idWZmZXJfdHJlZSkpOwogCUJVR19PTihjLT5uZWVkX3Jlc2VydmVkX2J1ZmZlcnMpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZjLT5yZXNlcnZlZF9idWZmZXJzKSkgewpAQCAtMTY4MCwzNiArMTcyMyw2MCBAQAogCQlCVUdfT04oYy0+bl9idWZmZXJzW2ldKTsKIAogCWRtX2lvX2NsaWVudF9kZXN0cm95KGMtPmRtX2lvKTsKLQl2ZnJlZShjLT5jYWNoZV9oYXNoKTsKIAlrZnJlZShjKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX2J1ZmlvX2NsaWVudF9kZXN0cm95KTsKIAotc3RhdGljIHZvaWQgY2xlYW51cF9vbGRfYnVmZmVycyh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGdldF9tYXhfYWdlX2h6KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXhfYWdlID0gQUNDRVNTX09OQ0UoZG1fYnVmaW9fbWF4X2FnZSk7Ci0Jc3RydWN0IGRtX2J1ZmlvX2NsaWVudCAqYzsKKwl1bnNpZ25lZCBtYXhfYWdlID0gQUNDRVNTX09OQ0UoZG1fYnVmaW9fbWF4X2FnZSk7CiAKLQlpZiAobWF4X2FnZSA+IFVMT05HX01BWCAvIEhaKQotCQltYXhfYWdlID0gVUxPTkdfTUFYIC8gSFo7CisJaWYgKG1heF9hZ2UgPiBVSU5UX01BWCAvIEhaKQorCQltYXhfYWdlID0gVUlOVF9NQVggLyBIWjsKIAotCW11dGV4X2xvY2soJmRtX2J1ZmlvX2NsaWVudHNfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmZG1fYnVmaW9fYWxsX2NsaWVudHMsIGNsaWVudF9saXN0KSB7Ci0JCWlmICghZG1fYnVmaW9fdHJ5bG9jayhjKSkKLQkJCWNvbnRpbnVlOworCXJldHVybiBtYXhfYWdlICogSFo7Cit9CiAKLQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZjLT5scnVbTElTVF9DTEVBTl0pKSB7Ci0JCQlzdHJ1Y3QgZG1fYnVmZmVyICpiOwotCQkJYiA9IGxpc3RfZW50cnkoYy0+bHJ1W0xJU1RfQ0xFQU5dLnByZXYsCi0JCQkJICAgICAgIHN0cnVjdCBkbV9idWZmZXIsIGxydV9saXN0KTsKLQkJCWlmICghX19jbGVhbnVwX29sZF9idWZmZXIoYiwgMCwgbWF4X2FnZSAqIEhaKSkKLQkJCQlicmVhazsKLQkJCWRtX2J1ZmlvX2NvbmRfcmVzY2hlZCgpOwotCQl9CitzdGF0aWMgYm9vbCBvbGRlcl90aGFuKHN0cnVjdCBkbV9idWZmZXIgKmIsIHVuc2lnbmVkIGxvbmcgYWdlX2h6KQoreworCXJldHVybiAoamlmZmllcyAtIGItPmxhc3RfYWNjZXNzZWQpID49IGFnZV9oejsKK30KIAotCQlkbV9idWZpb191bmxvY2soYyk7CitzdGF0aWMgdm9pZCBfX2V2aWN0X29sZF9idWZmZXJzKHN0cnVjdCBkbV9idWZpb19jbGllbnQgKmMsIHVuc2lnbmVkIGxvbmcgYWdlX2h6KQoreworCXN0cnVjdCBkbV9idWZmZXIgKmIsICp0bXA7CisJdW5zaWduZWQgcmV0YWluX3RhcmdldCA9IGdldF9yZXRhaW5fYnVmZmVycyhjKTsKKwl1bnNpZ25lZCBjb3VudDsKKworCWRtX2J1ZmlvX2xvY2soYyk7CisKKwljb3VudCA9IGMtPm5fYnVmZmVyc1tMSVNUX0NMRUFOXSArIGMtPm5fYnVmZmVyc1tMSVNUX0RJUlRZXTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShiLCB0bXAsICZjLT5scnVbTElTVF9DTEVBTl0sIGxydV9saXN0KSB7CisJCWlmIChjb3VudCA8PSByZXRhaW5fdGFyZ2V0KQorCQkJYnJlYWs7CisKKwkJaWYgKCFvbGRlcl90aGFuKGIsIGFnZV9oeikpCisJCQlicmVhazsKKworCQlpZiAoX190cnlfZXZpY3RfYnVmZmVyKGIsIDApKQorCQkJY291bnQtLTsKKwogCQlkbV9idWZpb19jb25kX3Jlc2NoZWQoKTsKIAl9CisKKwlkbV9idWZpb191bmxvY2soYyk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfb2xkX2J1ZmZlcnModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1heF9hZ2VfaHogPSBnZXRfbWF4X2FnZV9oeigpOworCXN0cnVjdCBkbV9idWZpb19jbGllbnQgKmM7CisKKwltdXRleF9sb2NrKCZkbV9idWZpb19jbGllbnRzX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmZG1fYnVmaW9fYWxsX2NsaWVudHMsIGNsaWVudF9saXN0KQorCQlfX2V2aWN0X29sZF9idWZmZXJzKGMsIG1heF9hZ2VfaHopOworCiAJbXV0ZXhfdW5sb2NrKCZkbV9idWZpb19jbGllbnRzX2xvY2spOwogfQogCkBAIC0xODM0LDYgKzE5MDEsOSBAQAogbW9kdWxlX3BhcmFtX25hbWVkKG1heF9hZ2Vfc2Vjb25kcywgZG1fYnVmaW9fbWF4X2FnZSwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfYWdlX3NlY29uZHMsICJNYXggYWdlIG9mIGEgYnVmZmVyIGluIHNlY29uZHMiKTsKIAorbW9kdWxlX3BhcmFtX25hbWVkKHJldGFpbl9ieXRlcywgZG1fYnVmaW9fcmV0YWluX2J5dGVzLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHJldGFpbl9ieXRlcywgIlRyeSB0byBrZWVwIGF0IGxlYXN0IHRoaXMgbWFueSBieXRlcyBjYWNoZWQgaW4gbWVtb3J5Iik7CisKIG1vZHVsZV9wYXJhbV9uYW1lZChwZWFrX2FsbG9jYXRlZF9ieXRlcywgZG1fYnVmaW9fcGVha19hbGxvY2F0ZWQsIHVsb25nLCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHBlYWtfYWxsb2NhdGVkX2J5dGVzLCAiVHJhY2tzIHRoZSBtYXhpbXVtIGFsbG9jYXRlZCBtZW1vcnkiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jYWNoZS1ibG9jay10eXBlcy5oIGIvZHJpdmVycy9tZC9kbS1jYWNoZS1ibG9jay10eXBlcy5oCmluZGV4IGFhYzBlMmQuLmJlZDRhZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY2FjaGUtYmxvY2stdHlwZXMuaAorKysgYi9kcml2ZXJzL21kL2RtLWNhY2hlLWJsb2NrLXR5cGVzLmgKQEAgLTE5LDYgKzE5LDcgQEAKIAogdHlwZWRlZiBkbV9ibG9ja190IF9fYml0d2lzZV9fIGRtX29ibG9ja190OwogdHlwZWRlZiB1aW50MzJfdCBfX2JpdHdpc2VfXyBkbV9jYmxvY2tfdDsKK3R5cGVkZWYgZG1fYmxvY2tfdCBfX2JpdHdpc2VfXyBkbV9kYmxvY2tfdDsKIAogc3RhdGljIGlubGluZSBkbV9vYmxvY2tfdCB0b19vYmxvY2soZG1fYmxvY2tfdCBiKQogewpAQCAtNDAsNCArNDEsMTQgQEAKIAlyZXR1cm4gKF9fZm9yY2UgdWludDMyX3QpIGI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgZG1fZGJsb2NrX3QgdG9fZGJsb2NrKGRtX2Jsb2NrX3QgYikKK3sKKwlyZXR1cm4gKF9fZm9yY2UgZG1fZGJsb2NrX3QpIGI7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1fYmxvY2tfdCBmcm9tX2RibG9jayhkbV9kYmxvY2tfdCBiKQoreworCXJldHVybiAoX19mb3JjZSBkbV9ibG9ja190KSBiOworfQorCiAjZW5kaWYgLyogRE1fQ0FDSEVfQkxPQ0tfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5jIGIvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5jCmluZGV4IDA2NzA5MjUuLjlmYzYxNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY2FjaGUtbWV0YWRhdGEuYworKysgYi9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCWRtX2Jsb2NrX3QgZGlzY2FyZF9yb290OwogCiAJc2VjdG9yX3QgZGlzY2FyZF9ibG9ja19zaXplOwotCWRtX29ibG9ja190IGRpc2NhcmRfbnJfYmxvY2tzOworCWRtX2RibG9ja190IGRpc2NhcmRfbnJfYmxvY2tzOwogCiAJc2VjdG9yX3QgZGF0YV9ibG9ja19zaXplOwogCWRtX2NibG9ja190IGNhY2hlX2Jsb2NrczsKQEAgLTMyOSw3ICszMjksNyBAQAogCWRpc2tfc3VwZXItPmhpbnRfcm9vdCA9IGNwdV90b19sZTY0KGNtZC0+aGludF9yb290KTsKIAlkaXNrX3N1cGVyLT5kaXNjYXJkX3Jvb3QgPSBjcHVfdG9fbGU2NChjbWQtPmRpc2NhcmRfcm9vdCk7CiAJZGlza19zdXBlci0+ZGlzY2FyZF9ibG9ja19zaXplID0gY3B1X3RvX2xlNjQoY21kLT5kaXNjYXJkX2Jsb2NrX3NpemUpOwotCWRpc2tfc3VwZXItPmRpc2NhcmRfbnJfYmxvY2tzID0gY3B1X3RvX2xlNjQoZnJvbV9vYmxvY2soY21kLT5kaXNjYXJkX25yX2Jsb2NrcykpOworCWRpc2tfc3VwZXItPmRpc2NhcmRfbnJfYmxvY2tzID0gY3B1X3RvX2xlNjQoZnJvbV9kYmxvY2soY21kLT5kaXNjYXJkX25yX2Jsb2NrcykpOwogCWRpc2tfc3VwZXItPm1ldGFkYXRhX2Jsb2NrX3NpemUgPSBjcHVfdG9fbGUzMihETV9DQUNIRV9NRVRBREFUQV9CTE9DS19TSVpFKTsKIAlkaXNrX3N1cGVyLT5kYXRhX2Jsb2NrX3NpemUgPSBjcHVfdG9fbGUzMihjbWQtPmRhdGFfYmxvY2tfc2l6ZSk7CiAJZGlza19zdXBlci0+Y2FjaGVfYmxvY2tzID0gY3B1X3RvX2xlMzIoMCk7CkBAIC01MjgsNyArNTI4LDcgQEAKIAljbWQtPmhpbnRfcm9vdCA9IGxlNjRfdG9fY3B1KGRpc2tfc3VwZXItPmhpbnRfcm9vdCk7CiAJY21kLT5kaXNjYXJkX3Jvb3QgPSBsZTY0X3RvX2NwdShkaXNrX3N1cGVyLT5kaXNjYXJkX3Jvb3QpOwogCWNtZC0+ZGlzY2FyZF9ibG9ja19zaXplID0gbGU2NF90b19jcHUoZGlza19zdXBlci0+ZGlzY2FyZF9ibG9ja19zaXplKTsKLQljbWQtPmRpc2NhcmRfbnJfYmxvY2tzID0gdG9fb2Jsb2NrKGxlNjRfdG9fY3B1KGRpc2tfc3VwZXItPmRpc2NhcmRfbnJfYmxvY2tzKSk7CisJY21kLT5kaXNjYXJkX25yX2Jsb2NrcyA9IHRvX2RibG9jayhsZTY0X3RvX2NwdShkaXNrX3N1cGVyLT5kaXNjYXJkX25yX2Jsb2NrcykpOwogCWNtZC0+ZGF0YV9ibG9ja19zaXplID0gbGUzMl90b19jcHUoZGlza19zdXBlci0+ZGF0YV9ibG9ja19zaXplKTsKIAljbWQtPmNhY2hlX2Jsb2NrcyA9IHRvX2NibG9jayhsZTMyX3RvX2NwdShkaXNrX3N1cGVyLT5jYWNoZV9ibG9ja3MpKTsKIAlzdHJuY3B5KGNtZC0+cG9saWN5X25hbWUsIGRpc2tfc3VwZXItPnBvbGljeV9uYW1lLCBzaXplb2YoY21kLT5wb2xpY3lfbmFtZSkpOwpAQCAtNjI2LDcgKzYyNiw3IEBACiAJZGlza19zdXBlci0+aGludF9yb290ID0gY3B1X3RvX2xlNjQoY21kLT5oaW50X3Jvb3QpOwogCWRpc2tfc3VwZXItPmRpc2NhcmRfcm9vdCA9IGNwdV90b19sZTY0KGNtZC0+ZGlzY2FyZF9yb290KTsKIAlkaXNrX3N1cGVyLT5kaXNjYXJkX2Jsb2NrX3NpemUgPSBjcHVfdG9fbGU2NChjbWQtPmRpc2NhcmRfYmxvY2tfc2l6ZSk7Ci0JZGlza19zdXBlci0+ZGlzY2FyZF9ucl9ibG9ja3MgPSBjcHVfdG9fbGU2NChmcm9tX29ibG9jayhjbWQtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CisJZGlza19zdXBlci0+ZGlzY2FyZF9ucl9ibG9ja3MgPSBjcHVfdG9fbGU2NChmcm9tX2RibG9jayhjbWQtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CiAJZGlza19zdXBlci0+Y2FjaGVfYmxvY2tzID0gY3B1X3RvX2xlMzIoZnJvbV9jYmxvY2soY21kLT5jYWNoZV9ibG9ja3MpKTsKIAlzdHJuY3B5KGRpc2tfc3VwZXItPnBvbGljeV9uYW1lLCBjbWQtPnBvbGljeV9uYW1lLCBzaXplb2YoZGlza19zdXBlci0+cG9saWN5X25hbWUpKTsKIAlkaXNrX3N1cGVyLT5wb2xpY3lfdmVyc2lvblswXSA9IGNwdV90b19sZTMyKGNtZC0+cG9saWN5X3ZlcnNpb25bMF0pOwpAQCAtNzk3LDE1ICs3OTcsMTUgQEAKIAogaW50IGRtX2NhY2hlX2Rpc2NhcmRfYml0c2V0X3Jlc2l6ZShzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwKIAkJCQkgICBzZWN0b3JfdCBkaXNjYXJkX2Jsb2NrX3NpemUsCi0JCQkJICAgZG1fb2Jsb2NrX3QgbmV3X25yX2VudHJpZXMpCisJCQkJICAgZG1fZGJsb2NrX3QgbmV3X25yX2VudHJpZXMpCiB7CiAJaW50IHI7CiAKIAlkb3duX3dyaXRlKCZjbWQtPnJvb3RfbG9jayk7CiAJciA9IGRtX2JpdHNldF9yZXNpemUoJmNtZC0+ZGlzY2FyZF9pbmZvLAogCQkJICAgICBjbWQtPmRpc2NhcmRfcm9vdCwKLQkJCSAgICAgZnJvbV9vYmxvY2soY21kLT5kaXNjYXJkX25yX2Jsb2NrcyksCi0JCQkgICAgIGZyb21fb2Jsb2NrKG5ld19ucl9lbnRyaWVzKSwKKwkJCSAgICAgZnJvbV9kYmxvY2soY21kLT5kaXNjYXJkX25yX2Jsb2NrcyksCisJCQkgICAgIGZyb21fZGJsb2NrKG5ld19ucl9lbnRyaWVzKSwKIAkJCSAgICAgZmFsc2UsICZjbWQtPmRpc2NhcmRfcm9vdCk7CiAJaWYgKCFyKSB7CiAJCWNtZC0+ZGlzY2FyZF9ibG9ja19zaXplID0gZGlzY2FyZF9ibG9ja19zaXplOwpAQCAtODE4LDI4ICs4MTgsMjggQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIGludCBfX3NldF9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9vYmxvY2tfdCBiKQorc3RhdGljIGludCBfX3NldF9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9kYmxvY2tfdCBiKQogewogCXJldHVybiBkbV9iaXRzZXRfc2V0X2JpdCgmY21kLT5kaXNjYXJkX2luZm8sIGNtZC0+ZGlzY2FyZF9yb290LAotCQkJCSBmcm9tX29ibG9jayhiKSwgJmNtZC0+ZGlzY2FyZF9yb290KTsKKwkJCQkgZnJvbV9kYmxvY2soYiksICZjbWQtPmRpc2NhcmRfcm9vdCk7CiB9CiAKLXN0YXRpYyBpbnQgX19jbGVhcl9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9vYmxvY2tfdCBiKQorc3RhdGljIGludCBfX2NsZWFyX2Rpc2NhcmQoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsIGRtX2RibG9ja190IGIpCiB7CiAJcmV0dXJuIGRtX2JpdHNldF9jbGVhcl9iaXQoJmNtZC0+ZGlzY2FyZF9pbmZvLCBjbWQtPmRpc2NhcmRfcm9vdCwKLQkJCQkgICBmcm9tX29ibG9jayhiKSwgJmNtZC0+ZGlzY2FyZF9yb290KTsKKwkJCQkgICBmcm9tX2RibG9jayhiKSwgJmNtZC0+ZGlzY2FyZF9yb290KTsKIH0KIAotc3RhdGljIGludCBfX2lzX2Rpc2NhcmRlZChzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwgZG1fb2Jsb2NrX3QgYiwKK3N0YXRpYyBpbnQgX19pc19kaXNjYXJkZWQoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsIGRtX2RibG9ja190IGIsCiAJCQkgIGJvb2wgKmlzX2Rpc2NhcmRlZCkKIHsKIAlyZXR1cm4gZG1fYml0c2V0X3Rlc3RfYml0KCZjbWQtPmRpc2NhcmRfaW5mbywgY21kLT5kaXNjYXJkX3Jvb3QsCi0JCQkJICBmcm9tX29ibG9jayhiKSwgJmNtZC0+ZGlzY2FyZF9yb290LAorCQkJCSAgZnJvbV9kYmxvY2soYiksICZjbWQtPmRpc2NhcmRfcm9vdCwKIAkJCQkgIGlzX2Rpc2NhcmRlZCk7CiB9CiAKIHN0YXRpYyBpbnQgX19kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLAotCQkgICAgIGRtX29ibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKQorCQkgICAgIGRtX2RibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKQogewogCWludCByOwogCkBAIC04NTIsNyArODUyLDcgQEAKIH0KIAogaW50IGRtX2NhY2hlX3NldF9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLAotCQkJIGRtX29ibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKQorCQkJIGRtX2RibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKQogewogCWludCByOwogCkBAIC04NzAsOCArODcwLDggQEAKIAlkbV9ibG9ja190IGI7CiAJYm9vbCBkaXNjYXJkOwogCi0JZm9yIChiID0gMDsgYiA8IGZyb21fb2Jsb2NrKGNtZC0+ZGlzY2FyZF9ucl9ibG9ja3MpOyBiKyspIHsKLQkJZG1fb2Jsb2NrX3QgZGJsb2NrID0gdG9fb2Jsb2NrKGIpOworCWZvciAoYiA9IDA7IGIgPCBmcm9tX2RibG9jayhjbWQtPmRpc2NhcmRfbnJfYmxvY2tzKTsgYisrKSB7CisJCWRtX2RibG9ja190IGRibG9jayA9IHRvX2RibG9jayhiKTsKIAogCQlpZiAoY21kLT5jbGVhbl93aGVuX29wZW5lZCkgewogCQkJciA9IF9faXNfZGlzY2FyZGVkKGNtZCwgZGJsb2NrLCAmZGlzY2FyZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmggYi9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmgKaW5kZXggNzM4M2M5MC4uNGVjYzQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5oCisrKyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtbWV0YWRhdGEuaApAQCAtNzAsMTQgKzcwLDE0IEBACiAKIGludCBkbV9jYWNoZV9kaXNjYXJkX2JpdHNldF9yZXNpemUoc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQsCiAJCQkJICAgc2VjdG9yX3QgZGlzY2FyZF9ibG9ja19zaXplLAotCQkJCSAgIGRtX29ibG9ja190IG5ld19ucl9lbnRyaWVzKTsKKwkJCQkgICBkbV9kYmxvY2tfdCBuZXdfbnJfZW50cmllcyk7CiAKIHR5cGVkZWYgaW50ICgqbG9hZF9kaXNjYXJkX2ZuKSh2b2lkICpjb250ZXh0LCBzZWN0b3JfdCBkaXNjYXJkX2Jsb2NrX3NpemUsCi0JCQkgICAgICAgZG1fb2Jsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmRlZCk7CisJCQkgICAgICAgZG1fZGJsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmRlZCk7CiBpbnQgZG1fY2FjaGVfbG9hZF9kaXNjYXJkcyhzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwKIAkJCSAgIGxvYWRfZGlzY2FyZF9mbiBmbiwgdm9pZCAqY29udGV4dCk7CiAKLWludCBkbV9jYWNoZV9zZXRfZGlzY2FyZChzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwgZG1fb2Jsb2NrX3QgZGJsb2NrLCBib29sIGRpc2NhcmQpOworaW50IGRtX2NhY2hlX3NldF9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9tZXRhZGF0YSAqY21kLCBkbV9kYmxvY2tfdCBkYmxvY2ssIGJvb2wgZGlzY2FyZCk7CiAKIGludCBkbV9jYWNoZV9yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwgZG1fY2Jsb2NrX3QgY2Jsb2NrKTsKIGludCBkbV9jYWNoZV9pbnNlcnRfbWFwcGluZyhzdHJ1Y3QgZG1fY2FjaGVfbWV0YWRhdGEgKmNtZCwgZG1fY2Jsb2NrX3QgY2Jsb2NrLCBkbV9vYmxvY2tfdCBvYmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jYWNoZS1wb2xpY3ktbXEuYyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtcG9saWN5LW1xLmMKaW5kZXggMGUzODVlNC4uMTNmNTQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jYWNoZS1wb2xpY3ktbXEuYworKysgYi9kcml2ZXJzL21kL2RtLWNhY2hlLXBvbGljeS1tcS5jCkBAIC0xODEsMjYgKzE4MSwzMiBAQAogICogR2l2ZXMgdXMgdGhlIG9sZGVzdCBlbnRyeSBvZiB0aGUgbG93ZXN0IHBvcG91bGF0ZWQgbGV2ZWwuICBJZiB0aGUgZmlyc3QKICAqIGxldmVsIGlzIGVtcHRpZWQgdGhlbiB3ZSBzaGlmdCBkb3duIG9uZSBsZXZlbC4KICAqLwotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKnF1ZXVlX3BvcChzdHJ1Y3QgcXVldWUgKnEpCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqcXVldWVfcGVlayhzdHJ1Y3QgcXVldWUgKnEpCiB7CiAJdW5zaWduZWQgbGV2ZWw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcjsKIAogCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IE5SX1FVRVVFX0xFVkVMUzsgbGV2ZWwrKykKLQkJaWYgKCFsaXN0X2VtcHR5KHEtPnFzICsgbGV2ZWwpKSB7Ci0JCQlyID0gcS0+cXNbbGV2ZWxdLm5leHQ7Ci0JCQlsaXN0X2RlbChyKTsKLQotCQkJLyogaGF2ZSB3ZSBqdXN0IGVtcHRpZWQgdGhlIGJvdHRvbSBsZXZlbD8gKi8KLQkJCWlmIChsZXZlbCA9PSAwICYmIGxpc3RfZW1wdHkocS0+cXMpKQotCQkJCXF1ZXVlX3NoaWZ0X2Rvd24ocSk7Ci0KLQkJCXJldHVybiByOwotCQl9CisJCWlmICghbGlzdF9lbXB0eShxLT5xcyArIGxldmVsKSkKKwkJCXJldHVybiBxLT5xc1tsZXZlbF0ubmV4dDsKIAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqcXVldWVfcG9wKHN0cnVjdCBxdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyID0gcXVldWVfcGVlayhxKTsKKworCWlmIChyKSB7CisJCWxpc3RfZGVsKHIpOworCisJCS8qIGhhdmUgd2UganVzdCBlbXB0aWVkIHRoZSBib3R0b20gbGV2ZWw/ICovCisJCWlmIChsaXN0X2VtcHR5KHEtPnFzKSkKKwkJCXF1ZXVlX3NoaWZ0X2Rvd24ocSk7CisJfQorCisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3BvcChzdHJ1Y3QgbGlzdF9oZWFkICpsaCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpyID0gbGgtPm5leHQ7CkBAIC0zODMsMTMgKzM4OSw2IEBACiAJdW5zaWduZWQgZ2VuZXJhdGlvbjsKIAl1bnNpZ25lZCBnZW5lcmF0aW9uX3BlcmlvZDsgLyogaW4gbG9va3VwcyAod2lsbCBwcm9iYWJseSBjaGFuZ2UpICovCiAKLQkvKgotCSAqIEVudHJpZXMgaW4gdGhlIHByZV9jYWNoZSB3aG9zZSBoaXQgY291bnQgcGFzc2VzIHRoZSBwcm9tb3Rpb24KLQkgKiB0aHJlc2hvbGQgbW92ZSB0byB0aGUgY2FjaGUgcHJvcGVyLiAgV29ya2luZyBvdXQgdGhlIGNvcnJlY3QKLQkgKiB2YWx1ZSBmb3IgdGhlIHByb21vdGlvbl90aHJlc2hvbGQgaXMgY3J1Y2lhbCB0byB0aGlzIHBvbGljeS4KLQkgKi8KLQl1bnNpZ25lZCBwcm9tb3RlX3RocmVzaG9sZDsKLQogCXVuc2lnbmVkIGRpc2NhcmRfcHJvbW90ZV9hZGp1c3RtZW50OwogCXVuc2lnbmVkIHJlYWRfcHJvbW90ZV9hZGp1c3RtZW50OwogCXVuc2lnbmVkIHdyaXRlX3Byb21vdGVfYWRqdXN0bWVudDsKQEAgLTQwNiw2ICs0MDUsNyBAQAogI2RlZmluZSBERUZBVUxUX0RJU0NBUkRfUFJPTU9URV9BREpVU1RNRU5UIDEKICNkZWZpbmUgREVGQVVMVF9SRUFEX1BST01PVEVfQURKVVNUTUVOVCA0CiAjZGVmaW5lIERFRkFVTFRfV1JJVEVfUFJPTU9URV9BREpVU1RNRU5UIDgKKyNkZWZpbmUgRElTQ09VUkFHRV9ERU1PVElOR19ESVJUWV9USFJFU0hPTEQgMTI4CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTUxOCw2ICs1MTgsMTIgQEAKIAlyZXR1cm4gZTsKIH0KIAorc3RhdGljIHN0cnVjdCBlbnRyeSAqcGVlayhzdHJ1Y3QgcXVldWUgKnEpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaCA9IHF1ZXVlX3BlZWsocSk7CisJcmV0dXJuIGggPyBjb250YWluZXJfb2YoaCwgc3RydWN0IGVudHJ5LCBsaXN0KSA6IE5VTEw7Cit9CisKIC8qCiAgKiBIYXMgdGhpcyBlbnRyeSBhbHJlYWR5IGJlZW4gdXBkYXRlZD8KICAqLwpAQCAtNTcwLDEwICs1NzYsNiBAQAogCQkJCQlicmVhazsKIAkJCX0KIAkJfQotCi0JCW1xLT5wcm9tb3RlX3RocmVzaG9sZCA9IG5yID8gdG90YWwgLyBuciA6IDE7Ci0JCWlmIChtcS0+cHJvbW90ZV90aHJlc2hvbGQgKiBuciA8IHRvdGFsKQotCQkJbXEtPnByb21vdGVfdGhyZXNob2xkKys7CiAJfQogfQogCkBAIC02NDEsNiArNjQzLDMwIEBACiB9CiAKIC8qCisgKiBFbnRyaWVzIGluIHRoZSBwcmVfY2FjaGUgd2hvc2UgaGl0IGNvdW50IHBhc3NlcyB0aGUgcHJvbW90aW9uCisgKiB0aHJlc2hvbGQgbW92ZSB0byB0aGUgY2FjaGUgcHJvcGVyLiAgV29ya2luZyBvdXQgdGhlIGNvcnJlY3QKKyAqIHZhbHVlIGZvciB0aGUgcHJvbW90aW9uX3RocmVzaG9sZCBpcyBjcnVjaWFsIHRvIHRoaXMgcG9saWN5LgorICovCitzdGF0aWMgdW5zaWduZWQgcHJvbW90ZV90aHJlc2hvbGQoc3RydWN0IG1xX3BvbGljeSAqbXEpCit7CisJc3RydWN0IGVudHJ5ICplOworCisJaWYgKGFueV9mcmVlX2NibG9ja3MobXEpKQorCQlyZXR1cm4gMDsKKworCWUgPSBwZWVrKCZtcS0+Y2FjaGVfY2xlYW4pOworCWlmIChlKQorCQlyZXR1cm4gZS0+aGl0X2NvdW50OworCisJZSA9IHBlZWsoJm1xLT5jYWNoZV9kaXJ0eSk7CisJaWYgKGUpCisJCXJldHVybiBlLT5oaXRfY291bnQgKyBESVNDT1VSQUdFX0RFTU9USU5HX0RJUlRZX1RIUkVTSE9MRDsKKworCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCXJldHVybiAwOworfQorCisvKgogICogV2UgbW9kaWZ5IHRoZSBiYXNpYyBwcm9tb3Rpb25fdGhyZXNob2xkIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgaW8uCiAgKgogICogSWYgdGhlIG9yaWdpbiBibG9jayBoYXMgYmVlbiBkaXNjYXJkZWQgdGhlbiB0aGVyZSdzIG5vIGNvc3QgdG8gY29weSBpdApAQCAtNjUzLDcgKzY3OSw3IEBACiAJCQkJCSAgIGJvb2wgZGlzY2FyZGVkX29ibG9jaywgaW50IGRhdGFfZGlyKQogewogCWlmIChkYXRhX2RpciA9PSBSRUFEKQotCQlyZXR1cm4gbXEtPnByb21vdGVfdGhyZXNob2xkICsgbXEtPnJlYWRfcHJvbW90ZV9hZGp1c3RtZW50OworCQlyZXR1cm4gcHJvbW90ZV90aHJlc2hvbGQobXEpICsgbXEtPnJlYWRfcHJvbW90ZV9hZGp1c3RtZW50OwogCiAJaWYgKGRpc2NhcmRlZF9vYmxvY2sgJiYgKGFueV9mcmVlX2NibG9ja3MobXEpIHx8IGFueV9jbGVhbl9jYmxvY2tzKG1xKSkpIHsKIAkJLyoKQEAgLTY2Myw3ICs2ODksNyBAQAogCQlyZXR1cm4gbXEtPmRpc2NhcmRfcHJvbW90ZV9hZGp1c3RtZW50OwogCX0KIAotCXJldHVybiBtcS0+cHJvbW90ZV90aHJlc2hvbGQgKyBtcS0+d3JpdGVfcHJvbW90ZV9hZGp1c3RtZW50OworCXJldHVybiBwcm9tb3RlX3RocmVzaG9sZChtcSkgKyBtcS0+d3JpdGVfcHJvbW90ZV9hZGp1c3RtZW50OwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRfcHJvbW90ZShzdHJ1Y3QgbXFfcG9saWN5ICptcSwgc3RydWN0IGVudHJ5ICplLApAQCAtODM5LDcgKzg2NSw4IEBACiAJaWYgKGUgJiYgaW5fY2FjaGUobXEsIGUpKQogCQlyID0gY2FjaGVfZW50cnlfZm91bmQobXEsIGUsIHJlc3VsdCk7CiAKLQllbHNlIGlmIChpb3RfcGF0dGVybigmbXEtPnRyYWNrZXIpID09IFBBVFRFUk5fU0VRVUVOVElBTCkKKwllbHNlIGlmIChtcS0+dHJhY2tlci50aHJlc2hvbGRzW1BBVFRFUk5fU0VRVUVOVElBTF0gJiYKKwkJIGlvdF9wYXR0ZXJuKCZtcS0+dHJhY2tlcikgPT0gUEFUVEVSTl9TRVFVRU5USUFMKQogCQlyZXN1bHQtPm9wID0gUE9MSUNZX01JU1M7CiAKIAllbHNlIGlmIChlKQpAQCAtMTIzMCw3ICsxMjU3LDYgQEAKIAltcS0+dGljayA9IDA7CiAJbXEtPmhpdF9jb3VudCA9IDA7CiAJbXEtPmdlbmVyYXRpb24gPSAwOwotCW1xLT5wcm9tb3RlX3RocmVzaG9sZCA9IDA7CiAJbXEtPmRpc2NhcmRfcHJvbW90ZV9hZGp1c3RtZW50ID0gREVGQVVMVF9ESVNDQVJEX1BST01PVEVfQURKVVNUTUVOVDsKIAltcS0+cmVhZF9wcm9tb3RlX2FkanVzdG1lbnQgPSBERUZBVUxUX1JFQURfUFJPTU9URV9BREpVU1RNRU5UOwogCW1xLT53cml0ZV9wcm9tb3RlX2FkanVzdG1lbnQgPSBERUZBVUxUX1dSSVRFX1BST01PVEVfQURKVVNUTUVOVDsKQEAgLTEyNjUsNyArMTI5MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZG1fY2FjaGVfcG9saWN5X3R5cGUgbXFfcG9saWN5X3R5cGUgPSB7CiAJLm5hbWUgPSAibXEiLAotCS52ZXJzaW9uID0gezEsIDIsIDB9LAorCS52ZXJzaW9uID0gezEsIDMsIDB9LAogCS5oaW50X3NpemUgPSA0LAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5jcmVhdGUgPSBtcV9jcmVhdGUKQEAgLTEyNzMsNyArMTI5OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZG1fY2FjaGVfcG9saWN5X3R5cGUgZGVmYXVsdF9wb2xpY3lfdHlwZSA9IHsKIAkubmFtZSA9ICJkZWZhdWx0IiwKLQkudmVyc2lvbiA9IHsxLCAyLCAwfSwKKwkudmVyc2lvbiA9IHsxLCAzLCAwfSwKIAkuaGludF9zaXplID0gNCwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuY3JlYXRlID0gbXFfY3JlYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jYWNoZS10YXJnZXQuYyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtdGFyZ2V0LmMKaW5kZXggNzEzMDUwNS4uMWU5NmQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jYWNoZS10YXJnZXQuYworKysgYi9kcml2ZXJzL21kL2RtLWNhY2hlLXRhcmdldC5jCkBAIC05NSw3ICs5NSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNkZWZpbmUgUFJJU09OX0NFTExTIDEwMjQKICNkZWZpbmUgTUlHUkFUSU9OX1BPT0xfU0laRSAxMjgKICNkZWZpbmUgQ09NTUlUX1BFUklPRCBIWgogI2RlZmluZSBNSUdSQVRJT05fQ09VTlRfV0lORE9XIDEwCkBAIC0yMzcsOCArMjM2LDkgQEAKIAkvKgogCSAqIG9yaWdpbl9ibG9ja3MgZW50cmllcywgZGlzY2FyZGVkIGlmIHNldC4KIAkgKi8KLQlkbV9vYmxvY2tfdCBkaXNjYXJkX25yX2Jsb2NrczsKKwlkbV9kYmxvY2tfdCBkaXNjYXJkX25yX2Jsb2NrczsKIAl1bnNpZ25lZCBsb25nICpkaXNjYXJkX2JpdHNldDsKKwl1aW50MzJfdCBkaXNjYXJkX2Jsb2NrX3NpemU7IC8qIGEgcG93ZXIgb2YgMiB0aW1lcyBzZWN0b3JzIHBlciBibG9jayAqLwogCiAJLyoKIAkgKiBSYXRoZXIgdGhhbiByZWNvbnN0cnVjdGluZyB0aGUgdGFibGUgbGluZSBmb3IgdGhlIHN0YXR1cyB3ZSBqdXN0CkBAIC0zMTAsNiArMzEwLDcgQEAKIAlkbV9jYmxvY2tfdCBjYmxvY2s7CiAKIAlib29sIGVycjoxOworCWJvb2wgZGlzY2FyZDoxOwogCWJvb2wgd3JpdGViYWNrOjE7CiAJYm9vbCBkZW1vdGU6MTsKIAlib29sIHByb21vdGU6MTsKQEAgLTQzMywxMSArNDM0LDEyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIGJ1aWxkX2tleShkbV9vYmxvY2tfdCBvYmxvY2ssIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5KQorc3RhdGljIHZvaWQgYnVpbGRfa2V5KGRtX29ibG9ja190IGJlZ2luLCBkbV9vYmxvY2tfdCBlbmQsIHN0cnVjdCBkbV9jZWxsX2tleSAqa2V5KQogewogCWtleS0+dmlydHVhbCA9IDA7CiAJa2V5LT5kZXYgPSAwOwotCWtleS0+YmxvY2sgPSBmcm9tX29ibG9jayhvYmxvY2spOworCWtleS0+YmxvY2tfYmVnaW4gPSBmcm9tX29ibG9jayhiZWdpbik7CisJa2V5LT5ibG9ja19lbmQgPSBmcm9tX29ibG9jayhlbmQpOwogfQogCiAvKgpAQCAtNDQ3LDE1ICs0NDksMTUgQEAKICAqLwogdHlwZWRlZiB2b2lkICgqY2VsbF9mcmVlX2ZuKSh2b2lkICpjb250ZXh0LCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKTsKIAotc3RhdGljIGludCBiaW9fZGV0YWluKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX29ibG9ja190IG9ibG9jaywKLQkJICAgICAgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsX3ByZWFsbG9jLAotCQkgICAgICBjZWxsX2ZyZWVfZm4gZnJlZV9mbiwgdm9pZCAqZnJlZV9jb250ZXh0LAotCQkgICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqY2VsbF9yZXN1bHQpCitzdGF0aWMgaW50IGJpb19kZXRhaW5fcmFuZ2Uoc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fb2Jsb2NrX3Qgb2Jsb2NrX2JlZ2luLCBkbV9vYmxvY2tfdCBvYmxvY2tfZW5kLAorCQkJICAgIHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbF9wcmVhbGxvYywKKwkJCSAgICBjZWxsX2ZyZWVfZm4gZnJlZV9mbiwgdm9pZCAqZnJlZV9jb250ZXh0LAorCQkJICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKipjZWxsX3Jlc3VsdCkKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5OwogCi0JYnVpbGRfa2V5KG9ibG9jaywgJmtleSk7CisJYnVpbGRfa2V5KG9ibG9ja19iZWdpbiwgb2Jsb2NrX2VuZCwgJmtleSk7CiAJciA9IGRtX2Jpb19kZXRhaW4oY2FjaGUtPnByaXNvbiwgJmtleSwgYmlvLCBjZWxsX3ByZWFsbG9jLCBjZWxsX3Jlc3VsdCk7CiAJaWYgKHIpCiAJCWZyZWVfZm4oZnJlZV9jb250ZXh0LCBjZWxsX3ByZWFsbG9jKTsKQEAgLTQ2Myw2ICs0NjUsMTYgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIGludCBiaW9fZGV0YWluKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX29ibG9ja190IG9ibG9jaywKKwkJICAgICAgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsX3ByZWFsbG9jLAorCQkgICAgICBjZWxsX2ZyZWVfZm4gZnJlZV9mbiwgdm9pZCAqZnJlZV9jb250ZXh0LAorCQkgICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqY2VsbF9yZXN1bHQpCit7CisJZG1fb2Jsb2NrX3QgZW5kID0gdG9fb2Jsb2NrKGZyb21fb2Jsb2NrKG9ibG9jaykgKyAxVUxMKTsKKwlyZXR1cm4gYmlvX2RldGFpbl9yYW5nZShjYWNoZSwgb2Jsb2NrLCBlbmQsIGJpbywKKwkJCQljZWxsX3ByZWFsbG9jLCBmcmVlX2ZuLCBmcmVlX2NvbnRleHQsIGNlbGxfcmVzdWx0KTsKK30KKwogc3RhdGljIGludCBnZXRfY2VsbChzdHJ1Y3QgY2FjaGUgKmNhY2hlLAogCQkgICAgZG1fb2Jsb2NrX3Qgb2Jsb2NrLAogCQkgICAgc3RydWN0IHByZWFsbG9jICpzdHJ1Y3RzLApAQCAtNDc0LDcgKzQ4Niw3IEBACiAKIAljZWxsX3ByZWFsbG9jID0gcHJlYWxsb2NfZ2V0X2NlbGwoc3RydWN0cyk7CiAKLQlidWlsZF9rZXkob2Jsb2NrLCAma2V5KTsKKwlidWlsZF9rZXkob2Jsb2NrLCB0b19vYmxvY2soZnJvbV9vYmxvY2sob2Jsb2NrKSArIDFVTEwpLCAma2V5KTsKIAlyID0gZG1fZ2V0X2NlbGwoY2FjaGUtPnByaXNvbiwgJmtleSwgY2VsbF9wcmVhbGxvYywgY2VsbF9yZXN1bHQpOwogCWlmIChyKQogCQlwcmVhbGxvY19wdXRfY2VsbChzdHJ1Y3RzLCBjZWxsX3ByZWFsbG9jKTsKQEAgLTUyNCwzMyArNTM2LDU3IEBACiAJcmV0dXJuIGI7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9kaXNjYXJkKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX29ibG9ja190IGIpCitzdGF0aWMgZG1fYmxvY2tfdCBvYmxvY2tzX3Blcl9kYmxvY2soc3RydWN0IGNhY2hlICpjYWNoZSkKK3sKKwlkbV9ibG9ja190IG9ibG9ja3MgPSBjYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplOworCisJaWYgKGJsb2NrX3NpemVfaXNfcG93ZXJfb2ZfdHdvKGNhY2hlKSkKKwkJb2Jsb2NrcyA+Pj0gY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrX3NoaWZ0OworCWVsc2UKKwkJb2Jsb2NrcyA9IGJsb2NrX2RpdihvYmxvY2tzLCBjYWNoZS0+c2VjdG9yc19wZXJfYmxvY2spOworCisJcmV0dXJuIG9ibG9ja3M7Cit9CisKK3N0YXRpYyBkbV9kYmxvY2tfdCBvYmxvY2tfdG9fZGJsb2NrKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX29ibG9ja190IG9ibG9jaykKK3sKKwlyZXR1cm4gdG9fZGJsb2NrKGJsb2NrX2Rpdihmcm9tX29ibG9jayhvYmxvY2spLAorCQkJCSAgIG9ibG9ja3NfcGVyX2RibG9jayhjYWNoZSkpKTsKK30KKworc3RhdGljIGRtX29ibG9ja190IGRibG9ja190b19vYmxvY2soc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fZGJsb2NrX3QgZGJsb2NrKQoreworCXJldHVybiB0b19vYmxvY2soZnJvbV9kYmxvY2soZGJsb2NrKSAqIG9ibG9ja3NfcGVyX2RibG9jayhjYWNoZSkpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGlzY2FyZChzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBkbV9kYmxvY2tfdCBiKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlCVUdfT04oZnJvbV9kYmxvY2soYikgPj0gZnJvbV9kYmxvY2soY2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CiAJYXRvbWljX2luYygmY2FjaGUtPnN0YXRzLmRpc2NhcmRfY291bnQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7Ci0Jc2V0X2JpdChmcm9tX29ibG9jayhiKSwgY2FjaGUtPmRpc2NhcmRfYml0c2V0KTsKKwlzZXRfYml0KGZyb21fZGJsb2NrKGIpLCBjYWNoZS0+ZGlzY2FyZF9iaXRzZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFyX2Rpc2NhcmQoc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fb2Jsb2NrX3QgYikKK3N0YXRpYyB2b2lkIGNsZWFyX2Rpc2NhcmQoc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fZGJsb2NrX3QgYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7Ci0JY2xlYXJfYml0KGZyb21fb2Jsb2NrKGIpLCBjYWNoZS0+ZGlzY2FyZF9iaXRzZXQpOworCWNsZWFyX2JpdChmcm9tX2RibG9jayhiKSwgY2FjaGUtPmRpc2NhcmRfYml0c2V0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYWNoZS0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgYm9vbCBpc19kaXNjYXJkZWQoc3RydWN0IGNhY2hlICpjYWNoZSwgZG1fb2Jsb2NrX3QgYikKK3N0YXRpYyBib29sIGlzX2Rpc2NhcmRlZChzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBkbV9kYmxvY2tfdCBiKQogewogCWludCByOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FjaGUtPmxvY2ssIGZsYWdzKTsKLQlyID0gdGVzdF9iaXQoZnJvbV9vYmxvY2soYiksIGNhY2hlLT5kaXNjYXJkX2JpdHNldCk7CisJciA9IHRlc3RfYml0KGZyb21fZGJsb2NrKGIpLCBjYWNoZS0+ZGlzY2FyZF9iaXRzZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcjsKQEAgLTU2Miw3ICs1OTgsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FjaGUtPmxvY2ssIGZsYWdzKTsKLQlyID0gdGVzdF9iaXQoZnJvbV9vYmxvY2soYiksIGNhY2hlLT5kaXNjYXJkX2JpdHNldCk7CisJciA9IHRlc3RfYml0KGZyb21fZGJsb2NrKG9ibG9ja190b19kYmxvY2soY2FjaGUsIGIpKSwKKwkJICAgICBjYWNoZS0+ZGlzY2FyZF9iaXRzZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhY2hlLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcjsKQEAgLTY4Nyw3ICs3MjQsNyBAQAogCWNoZWNrX2lmX3RpY2tfYmlvX25lZWRlZChjYWNoZSwgYmlvKTsKIAlyZW1hcF90b19vcmlnaW4oY2FjaGUsIGJpbyk7CiAJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKQotCQljbGVhcl9kaXNjYXJkKGNhY2hlLCBvYmxvY2spOworCQljbGVhcl9kaXNjYXJkKGNhY2hlLCBvYmxvY2tfdG9fZGJsb2NrKGNhY2hlLCBvYmxvY2spKTsKIH0KIAogc3RhdGljIHZvaWQgcmVtYXBfdG9fY2FjaGVfZGlydHkoc3RydWN0IGNhY2hlICpjYWNoZSwgc3RydWN0IGJpbyAqYmlvLApAQCAtNjk3LDcgKzczNCw3IEBACiAJcmVtYXBfdG9fY2FjaGUoY2FjaGUsIGJpbywgY2Jsb2NrKTsKIAlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKIAkJc2V0X2RpcnR5KGNhY2hlLCBvYmxvY2ssIGNibG9jayk7Ci0JCWNsZWFyX2Rpc2NhcmQoY2FjaGUsIG9ibG9jayk7CisJCWNsZWFyX2Rpc2NhcmQoY2FjaGUsIG9ibG9ja190b19kYmxvY2soY2FjaGUsIG9ibG9jaykpOwogCX0KIH0KIApAQCAtOTUxLDEwICs5ODgsMTQgQEAKIAkJfQogCiAJfSBlbHNlIHsKLQkJY2xlYXJfZGlydHkoY2FjaGUsIG1nLT5uZXdfb2Jsb2NrLCBtZy0+Y2Jsb2NrKTsKLQkJaWYgKG1nLT5yZXF1ZXVlX2hvbGRlcikKKwkJaWYgKG1nLT5yZXF1ZXVlX2hvbGRlcikgeworCQkJY2xlYXJfZGlydHkoY2FjaGUsIG1nLT5uZXdfb2Jsb2NrLCBtZy0+Y2Jsb2NrKTsKIAkJCWNlbGxfZGVmZXIoY2FjaGUsIG1nLT5uZXdfb2NlbGwsIHRydWUpOwotCQllbHNlIHsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGUgYmxvY2sgd2FzIHByb21vdGVkIHZpYSBhbiBvdmVyd3JpdGUsIHNvIGl0J3MgZGlydHkuCisJCQkgKi8KKwkJCXNldF9kaXJ0eShjYWNoZSwgbWctPm5ld19vYmxvY2ssIG1nLT5jYmxvY2spOwogCQkJYmlvX2VuZGlvKG1nLT5uZXdfb2NlbGwtPmhvbGRlciwgMCk7CiAJCQljZWxsX2RlZmVyKGNhY2hlLCBtZy0+bmV3X29jZWxsLCBmYWxzZSk7CiAJCX0KQEAgLTk3OCw3ICsxMDE5LDcgQEAKIAl3YWtlX3dvcmtlcihjYWNoZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlzc3VlX2NvcHlfcmVhbChzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKK3N0YXRpYyB2b2lkIGlzc3VlX2NvcHkoc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcpCiB7CiAJaW50IHI7CiAJc3RydWN0IGRtX2lvX3JlZ2lvbiBvX3JlZ2lvbiwgY19yZWdpb247CkBAIC0xMDU3LDExICsxMDk4LDQ2IEBACiAJbWlncmF0aW9uX3N1Y2Nlc3NfcHJlX2NvbW1pdChtZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGlzc3VlX2NvcHkoc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcpCitzdGF0aWMgdm9pZCBjYWxjX2Rpc2NhcmRfYmxvY2tfcmFuZ2Uoc3RydWN0IGNhY2hlICpjYWNoZSwgc3RydWN0IGJpbyAqYmlvLAorCQkJCSAgICAgZG1fZGJsb2NrX3QgKmIsIGRtX2RibG9ja190ICplKQoreworCXNlY3Rvcl90IHNiID0gYmlvLT5iaV9pdGVyLmJpX3NlY3RvcjsKKwlzZWN0b3JfdCBzZSA9IGJpb19lbmRfc2VjdG9yKGJpbyk7CisKKwkqYiA9IHRvX2RibG9jayhkbV9zZWN0b3JfZGl2X3VwKHNiLCBjYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplKSk7CisKKwlpZiAoc2UgLSBzYiA8IGNhY2hlLT5kaXNjYXJkX2Jsb2NrX3NpemUpCisJCSplID0gKmI7CisJZWxzZQorCQkqZSA9IHRvX2RibG9jayhibG9ja19kaXYoc2UsIGNhY2hlLT5kaXNjYXJkX2Jsb2NrX3NpemUpKTsKK30KKworc3RhdGljIHZvaWQgaXNzdWVfZGlzY2FyZChzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKK3sKKwlkbV9kYmxvY2tfdCBiLCBlOworCXN0cnVjdCBiaW8gKmJpbyA9IG1nLT5uZXdfb2NlbGwtPmhvbGRlcjsKKworCWNhbGNfZGlzY2FyZF9ibG9ja19yYW5nZShtZy0+Y2FjaGUsIGJpbywgJmIsICZlKTsKKwl3aGlsZSAoYiAhPSBlKSB7CisJCXNldF9kaXNjYXJkKG1nLT5jYWNoZSwgYik7CisJCWIgPSB0b19kYmxvY2soZnJvbV9kYmxvY2soYikgKyAxKTsKKwl9CisKKwliaW9fZW5kaW8oYmlvLCAwKTsKKwljZWxsX2RlZmVyKG1nLT5jYWNoZSwgbWctPm5ld19vY2VsbCwgZmFsc2UpOworCWZyZWVfbWlncmF0aW9uKG1nKTsKK30KKworc3RhdGljIHZvaWQgaXNzdWVfY29weV9vcl9kaXNjYXJkKHN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nKQogewogCWJvb2wgYXZvaWQ7CiAJc3RydWN0IGNhY2hlICpjYWNoZSA9IG1nLT5jYWNoZTsKIAorCWlmIChtZy0+ZGlzY2FyZCkgeworCQlpc3N1ZV9kaXNjYXJkKG1nKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChtZy0+d3JpdGViYWNrIHx8IG1nLT5kZW1vdGUpCiAJCWF2b2lkID0gIWlzX2RpcnR5KGNhY2hlLCBtZy0+Y2Jsb2NrKSB8fAogCQkJaXNfZGlzY2FyZGVkX29ibG9jayhjYWNoZSwgbWctPm9sZF9vYmxvY2spOwpAQCAtMTA3MCwxMyArMTE0NiwxNCBAQAogCiAJCWF2b2lkID0gaXNfZGlzY2FyZGVkX29ibG9jayhjYWNoZSwgbWctPm5ld19vYmxvY2spOwogCi0JCWlmICghYXZvaWQgJiYgYmlvX3dyaXRlc19jb21wbGV0ZV9ibG9jayhjYWNoZSwgYmlvKSkgeworCQlpZiAod3JpdGViYWNrX21vZGUoJmNhY2hlLT5mZWF0dXJlcykgJiYKKwkJICAgICFhdm9pZCAmJiBiaW9fd3JpdGVzX2NvbXBsZXRlX2Jsb2NrKGNhY2hlLCBiaW8pKSB7CiAJCQlpc3N1ZV9vdmVyd3JpdGUobWcsIGJpbyk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKLQlhdm9pZCA/IGF2b2lkX2NvcHkobWcpIDogaXNzdWVfY29weV9yZWFsKG1nKTsKKwlhdm9pZCA/IGF2b2lkX2NvcHkobWcpIDogaXNzdWVfY29weShtZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbXBsZXRlX21pZ3JhdGlvbihzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZykKQEAgLTExNjEsNiArMTIzOCw3IEBACiAJc3RydWN0IGRtX2NhY2hlX21pZ3JhdGlvbiAqbWcgPSBwcmVhbGxvY19nZXRfbWlncmF0aW9uKHN0cnVjdHMpOwogCiAJbWctPmVyciA9IGZhbHNlOworCW1nLT5kaXNjYXJkID0gZmFsc2U7CiAJbWctPndyaXRlYmFjayA9IGZhbHNlOwogCW1nLT5kZW1vdGUgPSBmYWxzZTsKIAltZy0+cHJvbW90ZSA9IHRydWU7CkBAIC0xMTg0LDYgKzEyNjIsNyBAQAogCXN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nID0gcHJlYWxsb2NfZ2V0X21pZ3JhdGlvbihzdHJ1Y3RzKTsKIAogCW1nLT5lcnIgPSBmYWxzZTsKKwltZy0+ZGlzY2FyZCA9IGZhbHNlOwogCW1nLT53cml0ZWJhY2sgPSB0cnVlOwogCW1nLT5kZW1vdGUgPSBmYWxzZTsKIAltZy0+cHJvbW90ZSA9IGZhbHNlOwpAQCAtMTIwOSw2ICsxMjg4LDcgQEAKIAlzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZyA9IHByZWFsbG9jX2dldF9taWdyYXRpb24oc3RydWN0cyk7CiAKIAltZy0+ZXJyID0gZmFsc2U7CisJbWctPmRpc2NhcmQgPSBmYWxzZTsKIAltZy0+d3JpdGViYWNrID0gZmFsc2U7CiAJbWctPmRlbW90ZSA9IHRydWU7CiAJbWctPnByb21vdGUgPSB0cnVlOwpAQCAtMTIzNyw2ICsxMzE3LDcgQEAKIAlzdHJ1Y3QgZG1fY2FjaGVfbWlncmF0aW9uICptZyA9IHByZWFsbG9jX2dldF9taWdyYXRpb24oc3RydWN0cyk7CiAKIAltZy0+ZXJyID0gZmFsc2U7CisJbWctPmRpc2NhcmQgPSBmYWxzZTsKIAltZy0+d3JpdGViYWNrID0gZmFsc2U7CiAJbWctPmRlbW90ZSA9IHRydWU7CiAJbWctPnByb21vdGUgPSBmYWxzZTsKQEAgLTEyNTMsNiArMTMzNCwyNiBAQAogCXF1aWVzY2VfbWlncmF0aW9uKG1nKTsKIH0KIAorc3RhdGljIHZvaWQgZGlzY2FyZChzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgcHJlYWxsb2MgKnN0cnVjdHMsCisJCSAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCXN0cnVjdCBkbV9jYWNoZV9taWdyYXRpb24gKm1nID0gcHJlYWxsb2NfZ2V0X21pZ3JhdGlvbihzdHJ1Y3RzKTsKKworCW1nLT5lcnIgPSBmYWxzZTsKKwltZy0+ZGlzY2FyZCA9IHRydWU7CisJbWctPndyaXRlYmFjayA9IGZhbHNlOworCW1nLT5kZW1vdGUgPSBmYWxzZTsKKwltZy0+cHJvbW90ZSA9IGZhbHNlOworCW1nLT5yZXF1ZXVlX2hvbGRlciA9IGZhbHNlOworCW1nLT5pbnZhbGlkYXRlID0gZmFsc2U7CisJbWctPmNhY2hlID0gY2FjaGU7CisJbWctPm9sZF9vY2VsbCA9IE5VTEw7CisJbWctPm5ld19vY2VsbCA9IGNlbGw7CisJbWctPnN0YXJ0X2ppZmZpZXMgPSBqaWZmaWVzOworCisJcXVpZXNjZV9taWdyYXRpb24obWcpOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIGJpbyBwcm9jZXNzaW5nCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyODYsMzEgKzEzODcsMjcgQEAKIAlpc3N1ZShjYWNoZSwgYmlvKTsKIH0KIAotLyoKLSAqIFBlb3BsZSBnZW5lcmFsbHkgZGlzY2FyZCBsYXJnZSBwYXJ0cyBvZiBhIGRldmljZSwgZWcsIHRoZSB3aG9sZSBkZXZpY2UKLSAqIHdoZW4gZm9ybWF0dGluZy4gIFNwbGl0dGluZyB0aGVzZSBsYXJnZSBkaXNjYXJkcyB1cCBpbnRvIGNhY2hlIGJsb2NrCi0gKiBzaXplZCBpb3MgYW5kIHRoZW4gcXVpZXNjaW5nIChhbHdheXMgbmVjY2Vzc2FyeSBmb3IgZGlzY2FyZCkgdGFrZXMgdG9vCi0gKiBsb25nLgotICoKLSAqIFdlIGtlZXAgaXQgc2ltcGxlLCBhbmQgYWxsb3cgYW55IHNpemUgb2YgZGlzY2FyZCB0byBjb21lIGluLCBhbmQganVzdAotICogbWFyayBvZmYgYmxvY2tzIG9uIHRoZSBkaXNjYXJkIGJpdHNldC4gIE5vIHBhc3Nkb3duIG9jY3VycyEKLSAqCi0gKiBUbyBpbXBsZW1lbnQgcGFzc2Rvd24gd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGJpb19wcmlzb24gc3VjaCB0aGF0IGEgY2VsbAotICogY2FuIGhhdmUgYSBrZXkgdGhhdCBzcGFucyBtYW55IGJsb2Nrcy4KLSAqLwotc3RhdGljIHZvaWQgcHJvY2Vzc19kaXNjYXJkX2JpbyhzdHJ1Y3QgY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgdm9pZCBwcm9jZXNzX2Rpc2NhcmRfYmlvKHN0cnVjdCBjYWNoZSAqY2FjaGUsIHN0cnVjdCBwcmVhbGxvYyAqc3RydWN0cywKKwkJCQlzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JZG1fYmxvY2tfdCBzdGFydF9ibG9jayA9IGRtX3NlY3Rvcl9kaXZfdXAoYmlvLT5iaV9pdGVyLmJpX3NlY3RvciwKLQkJCQkJCSAgY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrKTsKLQlkbV9ibG9ja190IGVuZF9ibG9jayA9IGJpb19lbmRfc2VjdG9yKGJpbyk7Ci0JZG1fYmxvY2tfdCBiOworCWludCByOworCWRtX2RibG9ja190IGIsIGU7CisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbF9wcmVhbGxvYywgKm5ld19vY2VsbDsKIAotCWVuZF9ibG9jayA9IGJsb2NrX2RpdihlbmRfYmxvY2ssIGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9jayk7CisJY2FsY19kaXNjYXJkX2Jsb2NrX3JhbmdlKGNhY2hlLCBiaW8sICZiLCAmZSk7CisJaWYgKGIgPT0gZSkgeworCQliaW9fZW5kaW8oYmlvLCAwKTsKKwkJcmV0dXJuOworCX0KIAotCWZvciAoYiA9IHN0YXJ0X2Jsb2NrOyBiIDwgZW5kX2Jsb2NrOyBiKyspCi0JCXNldF9kaXNjYXJkKGNhY2hlLCB0b19vYmxvY2soYikpOworCWNlbGxfcHJlYWxsb2MgPSBwcmVhbGxvY19nZXRfY2VsbChzdHJ1Y3RzKTsKKwlyID0gYmlvX2RldGFpbl9yYW5nZShjYWNoZSwgZGJsb2NrX3RvX29ibG9jayhjYWNoZSwgYiksIGRibG9ja190b19vYmxvY2soY2FjaGUsIGUpLCBiaW8sIGNlbGxfcHJlYWxsb2MsCisJCQkgICAgIChjZWxsX2ZyZWVfZm4pIHByZWFsbG9jX3B1dF9jZWxsLAorCQkJICAgICBzdHJ1Y3RzLCAmbmV3X29jZWxsKTsKKwlpZiAociA+IDApCisJCXJldHVybjsKIAotCWJpb19lbmRpbyhiaW8sIDApOworCWRpc2NhcmQoY2FjaGUsIHN0cnVjdHMsIG5ld19vY2VsbCk7CiB9CiAKIHN0YXRpYyBib29sIHNwYXJlX21pZ3JhdGlvbl9iYW5kd2lkdGgoc3RydWN0IGNhY2hlICpjYWNoZSkKQEAgLTEzNDAsOSArMTQzNyw4IEBACiAJZG1fb2Jsb2NrX3QgYmxvY2sgPSBnZXRfYmlvX2Jsb2NrKGNhY2hlLCBiaW8pOwogCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGxfcHJlYWxsb2MsICpvbGRfb2NlbGwsICpuZXdfb2NlbGw7CiAJc3RydWN0IHBvbGljeV9yZXN1bHQgbG9va3VwX3Jlc3VsdDsKLQlib29sIGRpc2NhcmRlZF9ibG9jayA9IGlzX2Rpc2NhcmRlZF9vYmxvY2soY2FjaGUsIGJsb2NrKTsKIAlib29sIHBhc3N0aHJvdWdoID0gcGFzc3Rocm91Z2hfbW9kZSgmY2FjaGUtPmZlYXR1cmVzKTsKLQlib29sIGNhbl9taWdyYXRlID0gIXBhc3N0aHJvdWdoICYmIChkaXNjYXJkZWRfYmxvY2sgfHwgc3BhcmVfbWlncmF0aW9uX2JhbmR3aWR0aChjYWNoZSkpOworCWJvb2wgZGlzY2FyZGVkX2Jsb2NrLCBjYW5fbWlncmF0ZTsKIAogCS8qCiAJICogQ2hlY2sgdG8gc2VlIGlmIHRoYXQgYmxvY2sgaXMgY3VycmVudGx5IG1pZ3JhdGluZy4KQEAgLTEzNTQsNiArMTQ1MCw5IEBACiAJaWYgKHIgPiAwKQogCQlyZXR1cm47CiAKKwlkaXNjYXJkZWRfYmxvY2sgPSBpc19kaXNjYXJkZWRfb2Jsb2NrKGNhY2hlLCBibG9jayk7CisJY2FuX21pZ3JhdGUgPSAhcGFzc3Rocm91Z2ggJiYgKGRpc2NhcmRlZF9ibG9jayB8fCBzcGFyZV9taWdyYXRpb25fYmFuZHdpZHRoKGNhY2hlKSk7CisKIAlyID0gcG9saWN5X21hcChjYWNoZS0+cG9saWN5LCBibG9jaywgdHJ1ZSwgY2FuX21pZ3JhdGUsIGRpc2NhcmRlZF9ibG9jaywKIAkJICAgICAgIGJpbywgJmxvb2t1cF9yZXN1bHQpOwogCkBAIC0xNTAwLDcgKzE1OTksNyBAQAogCQlpZiAoYmlvLT5iaV9ydyAmIFJFUV9GTFVTSCkKIAkJCXByb2Nlc3NfZmx1c2hfYmlvKGNhY2hlLCBiaW8pOwogCQllbHNlIGlmIChiaW8tPmJpX3J3ICYgUkVRX0RJU0NBUkQpCi0JCQlwcm9jZXNzX2Rpc2NhcmRfYmlvKGNhY2hlLCBiaW8pOworCQkJcHJvY2Vzc19kaXNjYXJkX2JpbyhjYWNoZSwgJnN0cnVjdHMsIGJpbyk7CiAJCWVsc2UKIAkJCXByb2Nlc3NfYmlvKGNhY2hlLCAmc3RydWN0cywgYmlvKTsKIAl9CkBAIC0xNzE1LDcgKzE4MTQsNyBAQAogCQkJcHJvY2Vzc19pbnZhbGlkYXRpb25fcmVxdWVzdHMoY2FjaGUpOwogCQl9CiAKLQkJcHJvY2Vzc19taWdyYXRpb25zKGNhY2hlLCAmY2FjaGUtPnF1aWVzY2VkX21pZ3JhdGlvbnMsIGlzc3VlX2NvcHkpOworCQlwcm9jZXNzX21pZ3JhdGlvbnMoY2FjaGUsICZjYWNoZS0+cXVpZXNjZWRfbWlncmF0aW9ucywgaXNzdWVfY29weV9vcl9kaXNjYXJkKTsKIAkJcHJvY2Vzc19taWdyYXRpb25zKGNhY2hlLCAmY2FjaGUtPmNvbXBsZXRlZF9taWdyYXRpb25zLCBjb21wbGV0ZV9taWdyYXRpb24pOwogCiAJCWlmIChjb21taXRfaWZfbmVlZGVkKGNhY2hlKSkgewpAQCAtMjE4MCw2ICsyMjc5LDQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBXZSB3YW50IHRoZSBkaXNjYXJkIGJsb2NrIHNpemUgdG8gYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGNhY2hlCisgKiBibG9jayBzaXplIGFuZCBoYXZlIG5vIG1vcmUgdGhhbiAyXjE0IGRpc2NhcmQgYmxvY2tzIGFjcm9zcyB0aGUgb3JpZ2luLgorICovCisjZGVmaW5lIE1BWF9ESVNDQVJEX0JMT0NLUyAoMSA8PCAxNCkKKworc3RhdGljIGJvb2wgdG9vX21hbnlfZGlzY2FyZF9ibG9ja3Moc2VjdG9yX3QgZGlzY2FyZF9ibG9ja19zaXplLAorCQkJCSAgICBzZWN0b3JfdCBvcmlnaW5fc2l6ZSkKK3sKKwkodm9pZCkgc2VjdG9yX2RpdihvcmlnaW5fc2l6ZSwgZGlzY2FyZF9ibG9ja19zaXplKTsKKworCXJldHVybiBvcmlnaW5fc2l6ZSA+IE1BWF9ESVNDQVJEX0JMT0NLUzsKK30KKworc3RhdGljIHNlY3Rvcl90IGNhbGN1bGF0ZV9kaXNjYXJkX2Jsb2NrX3NpemUoc2VjdG9yX3QgY2FjaGVfYmxvY2tfc2l6ZSwKKwkJCQkJICAgICBzZWN0b3JfdCBvcmlnaW5fc2l6ZSkKK3sKKwlzZWN0b3JfdCBkaXNjYXJkX2Jsb2NrX3NpemUgPSBjYWNoZV9ibG9ja19zaXplOworCisJaWYgKG9yaWdpbl9zaXplKQorCQl3aGlsZSAodG9vX21hbnlfZGlzY2FyZF9ibG9ja3MoZGlzY2FyZF9ibG9ja19zaXplLCBvcmlnaW5fc2l6ZSkpCisJCQlkaXNjYXJkX2Jsb2NrX3NpemUgKj0gMjsKKworCXJldHVybiBkaXNjYXJkX2Jsb2NrX3NpemU7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jYWNoZV9zaXplKHN0cnVjdCBjYWNoZSAqY2FjaGUsIGRtX2NibG9ja190IHNpemUpCit7CisJZG1fYmxvY2tfdCBucl9ibG9ja3MgPSBmcm9tX2NibG9jayhzaXplKTsKKworCWlmIChucl9ibG9ja3MgPiAoMSA8PCAyMCkgJiYgY2FjaGUtPmNhY2hlX3NpemUgIT0gc2l6ZSkKKwkJRE1XQVJOX0xJTUlUKCJZb3UgaGF2ZSBjcmVhdGVkIGEgY2FjaGUgZGV2aWNlIHdpdGggYSBsb3Qgb2YgaW5kaXZpZHVhbCBjYWNoZSBibG9ja3MgKCVsbHUpXG4iCisJCQkgICAgICJBbGwgdGhlc2UgbWFwcGluZ3MgY2FuIGNvbnN1bWUgYSBsb3Qgb2Yga2VybmVsIG1lbW9yeSwgYW5kIHRha2Ugc29tZSB0aW1lIHRvIHJlYWQvd3JpdGUuXG4iCisJCQkgICAgICJQbGVhc2UgY29uc2lkZXIgaW5jcmVhc2luZyB0aGUgY2FjaGUgYmxvY2sgc2l6ZSB0byByZWR1Y2UgdGhlIG92ZXJhbGwgY2FjaGUgYmxvY2sgY291bnQuIiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbnJfYmxvY2tzKTsKKworCWNhY2hlLT5jYWNoZV9zaXplID0gc2l6ZTsKK30KKwogI2RlZmluZSBERUZBVUxUX01JR1JBVElPTl9USFJFU0hPTEQgMjA0OAogCiBzdGF0aWMgaW50IGNhY2hlX2NyZWF0ZShzdHJ1Y3QgY2FjaGVfYXJncyAqY2EsIHN0cnVjdCBjYWNoZSAqKnJlc3VsdCkKQEAgLTIyMDQsOCArMjM0Miw3IEBACiAJdGktPm51bV9kaXNjYXJkX2Jpb3MgPSAxOwogCXRpLT5kaXNjYXJkc19zdXBwb3J0ZWQgPSB0cnVlOwogCXRpLT5kaXNjYXJkX3plcm9lc19kYXRhX3Vuc3VwcG9ydGVkID0gdHJ1ZTsKLQkvKiBEaXNjYXJkIGJpb3MgbXVzdCBiZSBzcGxpdCBvbiBhIGJsb2NrIGJvdW5kYXJ5ICovCi0JdGktPnNwbGl0X2Rpc2NhcmRfYmlvcyA9IHRydWU7CisJdGktPnNwbGl0X2Rpc2NhcmRfYmlvcyA9IGZhbHNlOwogCiAJY2FjaGUtPmZlYXR1cmVzID0gY2EtPmZlYXR1cmVzOwogCXRpLT5wZXJfYmlvX2RhdGFfc2l6ZSA9IGdldF9wZXJfYmlvX2RhdGFfc2l6ZShjYWNoZSk7CkBAIC0yMjM1LDEwICsyMzcyLDEwIEBACiAKIAkJY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrX3NoaWZ0ID0gLTE7CiAJCWNhY2hlX3NpemUgPSBibG9ja19kaXYoY2FjaGVfc2l6ZSwgY2EtPmJsb2NrX3NpemUpOwotCQljYWNoZS0+Y2FjaGVfc2l6ZSA9IHRvX2NibG9jayhjYWNoZV9zaXplKTsKKwkJc2V0X2NhY2hlX3NpemUoY2FjaGUsIHRvX2NibG9jayhjYWNoZV9zaXplKSk7CiAJfSBlbHNlIHsKIAkJY2FjaGUtPnNlY3RvcnNfcGVyX2Jsb2NrX3NoaWZ0ID0gX19mZnMoY2EtPmJsb2NrX3NpemUpOwotCQljYWNoZS0+Y2FjaGVfc2l6ZSA9IHRvX2NibG9jayhjYS0+Y2FjaGVfc2VjdG9ycyA+PiBjYWNoZS0+c2VjdG9yc19wZXJfYmxvY2tfc2hpZnQpOworCQlzZXRfY2FjaGVfc2l6ZShjYWNoZSwgdG9fY2Jsb2NrKGNhLT5jYWNoZV9zZWN0b3JzID4+IGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9ja19zaGlmdCkpOwogCX0KIAogCXIgPSBjcmVhdGVfY2FjaGVfcG9saWN5KGNhY2hlLCBjYSwgZXJyb3IpOwpAQCAtMjMwMywxMyArMjQ0MCwxNyBAQAogCX0KIAljbGVhcl9iaXRzZXQoY2FjaGUtPmRpcnR5X2JpdHNldCwgZnJvbV9jYmxvY2soY2FjaGUtPmNhY2hlX3NpemUpKTsKIAotCWNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcyA9IGNhY2hlLT5vcmlnaW5fYmxvY2tzOwotCWNhY2hlLT5kaXNjYXJkX2JpdHNldCA9IGFsbG9jX2JpdHNldChmcm9tX29ibG9jayhjYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MpKTsKKwljYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplID0KKwkJY2FsY3VsYXRlX2Rpc2NhcmRfYmxvY2tfc2l6ZShjYWNoZS0+c2VjdG9yc19wZXJfYmxvY2ssCisJCQkJCSAgICAgY2FjaGUtPm9yaWdpbl9zZWN0b3JzKTsKKwljYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MgPSB0b19kYmxvY2soZG1fc2VjdG9yX2Rpdl91cChjYWNoZS0+b3JpZ2luX3NlY3RvcnMsCisJCQkJCQkJICAgICAgY2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSkpOworCWNhY2hlLT5kaXNjYXJkX2JpdHNldCA9IGFsbG9jX2JpdHNldChmcm9tX2RibG9jayhjYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MpKTsKIAlpZiAoIWNhY2hlLT5kaXNjYXJkX2JpdHNldCkgewogCQkqZXJyb3IgPSAiY291bGQgbm90IGFsbG9jYXRlIGRpc2NhcmQgYml0c2V0IjsKIAkJZ290byBiYWQ7CiAJfQotCWNsZWFyX2JpdHNldChjYWNoZS0+ZGlzY2FyZF9iaXRzZXQsIGZyb21fb2Jsb2NrKGNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcykpOworCWNsZWFyX2JpdHNldChjYWNoZS0+ZGlzY2FyZF9iaXRzZXQsIGZyb21fZGJsb2NrKGNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcykpOwogCiAJY2FjaGUtPmNvcGllciA9IGRtX2tjb3B5ZF9jbGllbnRfY3JlYXRlKCZkbV9rY29weWRfdGhyb3R0bGUpOwogCWlmIChJU19FUlIoY2FjaGUtPmNvcGllcikpIHsKQEAgLTIzMjcsNyArMjQ2OCw3IEBACiAJSU5JVF9ERUxBWUVEX1dPUksoJmNhY2hlLT53YWtlciwgZG9fd2FrZXIpOwogCWNhY2hlLT5sYXN0X2NvbW1pdF9qaWZmaWVzID0gamlmZmllczsKIAotCWNhY2hlLT5wcmlzb24gPSBkbV9iaW9fcHJpc29uX2NyZWF0ZShQUklTT05fQ0VMTFMpOworCWNhY2hlLT5wcmlzb24gPSBkbV9iaW9fcHJpc29uX2NyZWF0ZSgpOwogCWlmICghY2FjaGUtPnByaXNvbikgewogCQkqZXJyb3IgPSAiY291bGQgbm90IGNyZWF0ZSBiaW8gcHJpc29uIjsKIAkJZ290byBiYWQ7CkBAIC0yNTQ5LDExICsyNjkwLDExIEBACiBzdGF0aWMgaW50IGNhY2hlX21hcChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvKQogewogCWludCByOwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGw7CisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCA9IE5VTEw7CiAJc3RydWN0IGNhY2hlICpjYWNoZSA9IHRpLT5wcml2YXRlOwogCiAJciA9IF9fY2FjaGVfbWFwKGNhY2hlLCBiaW8sICZjZWxsKTsKLQlpZiAociA9PSBETV9NQVBJT19SRU1BUFBFRCkgeworCWlmIChyID09IERNX01BUElPX1JFTUFQUEVEICYmIGNlbGwpIHsKIAkJaW5jX2RzKGNhY2hlLCBiaW8sIGNlbGwpOwogCQljZWxsX2RlZmVyKGNhY2hlLCBjZWxsLCBmYWxzZSk7CiAJfQpAQCAtMjU5OSwxNiArMjc0MCwxNiBAQAogewogCXVuc2lnbmVkIGksIHI7CiAKLQlyID0gZG1fY2FjaGVfZGlzY2FyZF9iaXRzZXRfcmVzaXplKGNhY2hlLT5jbWQsIGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9jaywKLQkJCQkJICAgY2FjaGUtPm9yaWdpbl9ibG9ja3MpOworCXIgPSBkbV9jYWNoZV9kaXNjYXJkX2JpdHNldF9yZXNpemUoY2FjaGUtPmNtZCwgY2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSwKKwkJCQkJICAgY2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKTsKIAlpZiAocikgewogCQlETUVSUigiY291bGQgbm90IHJlc2l6ZSBvbi1kaXNrIGRpc2NhcmQgYml0c2V0Iik7CiAJCXJldHVybiByOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBmcm9tX29ibG9jayhjYWNoZS0+ZGlzY2FyZF9ucl9ibG9ja3MpOyBpKyspIHsKLQkJciA9IGRtX2NhY2hlX3NldF9kaXNjYXJkKGNhY2hlLT5jbWQsIHRvX29ibG9jayhpKSwKLQkJCQkJIGlzX2Rpc2NhcmRlZChjYWNoZSwgdG9fb2Jsb2NrKGkpKSk7CisJZm9yIChpID0gMDsgaSA8IGZyb21fZGJsb2NrKGNhY2hlLT5kaXNjYXJkX25yX2Jsb2Nrcyk7IGkrKykgeworCQlyID0gZG1fY2FjaGVfc2V0X2Rpc2NhcmQoY2FjaGUtPmNtZCwgdG9fZGJsb2NrKGkpLAorCQkJCQkgaXNfZGlzY2FyZGVkKGNhY2hlLCB0b19kYmxvY2soaSkpKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAl9CkBAIC0yNjgwLDE1ICsyODIxLDg2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbG9hZF9kaXNjYXJkKHZvaWQgKmNvbnRleHQsIHNlY3Rvcl90IGRpc2NhcmRfYmxvY2tfc2l6ZSwKLQkJCWRtX29ibG9ja190IG9ibG9jaywgYm9vbCBkaXNjYXJkKQotewotCXN0cnVjdCBjYWNoZSAqY2FjaGUgPSBjb250ZXh0OworLyoKKyAqIFRoZSBkaXNjYXJkIGJsb2NrIHNpemUgaW4gdGhlIG9uIGRpc2sgbWV0YWRhdGEgaXMgbm90CisgKiBuZWNjZXNzYXJpbHkgdGhlIHNhbWUgYXMgd2UncmUgY3VycmVudGx5IHVzaW5nLiAgU28gd2UgaGF2ZSB0bworICogYmUgY2FyZWZ1bCB0byBvbmx5IHNldCB0aGUgZGlzY2FyZGVkIGF0dHJpYnV0ZSBpZiB3ZSBrbm93IGl0CisgKiBjb3ZlcnMgYSBjb21wbGV0ZSBibG9jayBvZiB0aGUgbmV3IHNpemUuCisgKi8KK3N0cnVjdCBkaXNjYXJkX2xvYWRfaW5mbyB7CisJc3RydWN0IGNhY2hlICpjYWNoZTsKIAotCWlmIChkaXNjYXJkKQotCQlzZXRfZGlzY2FyZChjYWNoZSwgb2Jsb2NrKTsKLQllbHNlCi0JCWNsZWFyX2Rpc2NhcmQoY2FjaGUsIG9ibG9jayk7CisJLyoKKwkgKiBUaGVzZSBibG9ja3MgYXJlIHNpemVkIHVzaW5nIHRoZSBvbiBkaXNrIGRibG9jayBzaXplLCByYXRoZXIKKwkgKiB0aGFuIHRoZSBjdXJyZW50IG9uZS4KKwkgKi8KKwlkbV9ibG9ja190IGJsb2NrX3NpemU7CisJZG1fYmxvY2tfdCBkaXNjYXJkX2JlZ2luLCBkaXNjYXJkX2VuZDsKK307CisKK3N0YXRpYyB2b2lkIGRpc2NhcmRfbG9hZF9pbmZvX2luaXQoc3RydWN0IGNhY2hlICpjYWNoZSwKKwkJCQkgICBzdHJ1Y3QgZGlzY2FyZF9sb2FkX2luZm8gKmxpKQoreworCWxpLT5jYWNoZSA9IGNhY2hlOworCWxpLT5kaXNjYXJkX2JlZ2luID0gbGktPmRpc2NhcmRfZW5kID0gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X2Rpc2NhcmRfcmFuZ2Uoc3RydWN0IGRpc2NhcmRfbG9hZF9pbmZvICpsaSkKK3sKKwlzZWN0b3JfdCBiLCBlOworCisJaWYgKGxpLT5kaXNjYXJkX2JlZ2luID09IGxpLT5kaXNjYXJkX2VuZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDb252ZXJ0IHRvIHNlY3RvcnMuCisJICovCisJYiA9IGxpLT5kaXNjYXJkX2JlZ2luICogbGktPmJsb2NrX3NpemU7CisJZSA9IGxpLT5kaXNjYXJkX2VuZCAqIGxpLT5ibG9ja19zaXplOworCisJLyoKKwkgKiBUaGVuIGNvbnZlcnQgYmFjayB0byB0aGUgY3VycmVudCBkYmxvY2sgc2l6ZS4KKwkgKi8KKwliID0gZG1fc2VjdG9yX2Rpdl91cChiLCBsaS0+Y2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSk7CisJc2VjdG9yX2RpdihlLCBsaS0+Y2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSk7CisKKwkvKgorCSAqIFRoZSBvcmlnaW4gbWF5IGhhdmUgc2hydW5rLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIHdlJ3JlIHN0aWxsIGluCisJICogYm91bmRzLgorCSAqLworCWlmIChlID4gZnJvbV9kYmxvY2sobGktPmNhY2hlLT5kaXNjYXJkX25yX2Jsb2NrcykpCisJCWUgPSBmcm9tX2RibG9jayhsaS0+Y2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKTsKKworCWZvciAoOyBiIDwgZTsgYisrKQorCQlzZXRfZGlzY2FyZChsaS0+Y2FjaGUsIHRvX2RibG9jayhiKSk7Cit9CisKK3N0YXRpYyBpbnQgbG9hZF9kaXNjYXJkKHZvaWQgKmNvbnRleHQsIHNlY3Rvcl90IGRpc2NhcmRfYmxvY2tfc2l6ZSwKKwkJCWRtX2RibG9ja190IGRibG9jaywgYm9vbCBkaXNjYXJkKQoreworCXN0cnVjdCBkaXNjYXJkX2xvYWRfaW5mbyAqbGkgPSBjb250ZXh0OworCisJbGktPmJsb2NrX3NpemUgPSBkaXNjYXJkX2Jsb2NrX3NpemU7CisKKwlpZiAoZGlzY2FyZCkgeworCQlpZiAoZnJvbV9kYmxvY2soZGJsb2NrKSA9PSBsaS0+ZGlzY2FyZF9lbmQpCisJCQkvKgorCQkJICogV2UncmUgYWxyZWFkeSBpbiBhIGRpc2NhcmQgcmFuZ2UsIGp1c3QgZXh0ZW5kIGl0LgorCQkJICovCisJCQlsaS0+ZGlzY2FyZF9lbmQgPSBsaS0+ZGlzY2FyZF9lbmQgKyAxVUxMOworCisJCWVsc2UgeworCQkJLyoKKwkJCSAqIEVtaXQgdGhlIG9sZCByYW5nZSBhbmQgc3RhcnQgYSBuZXcgb25lLgorCQkJICovCisJCQlzZXRfZGlzY2FyZF9yYW5nZShsaSk7CisJCQlsaS0+ZGlzY2FyZF9iZWdpbiA9IGZyb21fZGJsb2NrKGRibG9jayk7CisJCQlsaS0+ZGlzY2FyZF9lbmQgPSBsaS0+ZGlzY2FyZF9iZWdpbiArIDFVTEw7CisJCX0KKwl9IGVsc2UgeworCQlzZXRfZGlzY2FyZF9yYW5nZShsaSk7CisJCWxpLT5kaXNjYXJkX2JlZ2luID0gbGktPmRpc2NhcmRfZW5kID0gMDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3MzAsNyArMjk0Miw3IEBACiAJCXJldHVybiByOwogCX0KIAotCWNhY2hlLT5jYWNoZV9zaXplID0gbmV3X3NpemU7CisJc2V0X2NhY2hlX3NpemUoY2FjaGUsIG5ld19zaXplKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjc3MiwxMSArMjk4NCwyMiBAQAogCX0KIAogCWlmICghY2FjaGUtPmxvYWRlZF9kaXNjYXJkcykgewotCQlyID0gZG1fY2FjaGVfbG9hZF9kaXNjYXJkcyhjYWNoZS0+Y21kLCBsb2FkX2Rpc2NhcmQsIGNhY2hlKTsKKwkJc3RydWN0IGRpc2NhcmRfbG9hZF9pbmZvIGxpOworCisJCS8qCisJCSAqIFRoZSBkaXNjYXJkIGJpdHNldCBjb3VsZCBoYXZlIGJlZW4gcmVzaXplZCwgb3IgdGhlCisJCSAqIGRpc2NhcmQgYmxvY2sgc2l6ZSBjaGFuZ2VkLiAgVG8gYmUgc2FmZSB3ZSBzdGFydCBieQorCQkgKiBzZXR0aW5nIGV2ZXJ5IGRibG9jayB0byBub3QgZGlzY2FyZGVkLgorCQkgKi8KKwkJY2xlYXJfYml0c2V0KGNhY2hlLT5kaXNjYXJkX2JpdHNldCwgZnJvbV9kYmxvY2soY2FjaGUtPmRpc2NhcmRfbnJfYmxvY2tzKSk7CisKKwkJZGlzY2FyZF9sb2FkX2luZm9faW5pdChjYWNoZSwgJmxpKTsKKwkJciA9IGRtX2NhY2hlX2xvYWRfZGlzY2FyZHMoY2FjaGUtPmNtZCwgbG9hZF9kaXNjYXJkLCAmbGkpOwogCQlpZiAocikgewogCQkJRE1FUlIoImNvdWxkIG5vdCBsb2FkIG9yaWdpbiBkaXNjYXJkcyIpOwogCQkJcmV0dXJuIHI7CiAJCX0KKwkJc2V0X2Rpc2NhcmRfcmFuZ2UoJmxpKTsKIAogCQljYWNoZS0+bG9hZGVkX2Rpc2NhcmRzID0gdHJ1ZTsKIAl9CkBAIC0zMDc5LDggKzMzMDIsOSBAQAogCS8qCiAJICogRklYTUU6IHRoZXNlIGxpbWl0cyBtYXkgYmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIGNhY2hlIGRldmljZQogCSAqLwotCWxpbWl0cy0+bWF4X2Rpc2NhcmRfc2VjdG9ycyA9IGNhY2hlLT5zZWN0b3JzX3Blcl9ibG9jazsKLQlsaW1pdHMtPmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSBjYWNoZS0+c2VjdG9yc19wZXJfYmxvY2sgPDwgU0VDVE9SX1NISUZUOworCWxpbWl0cy0+bWF4X2Rpc2NhcmRfc2VjdG9ycyA9IG1pbl90KHNlY3Rvcl90LCBjYWNoZS0+ZGlzY2FyZF9ibG9ja19zaXplICogMTAyNCwKKwkJCQkJICAgIGNhY2hlLT5vcmlnaW5fc2VjdG9ycyk7CisJbGltaXRzLT5kaXNjYXJkX2dyYW51bGFyaXR5ID0gY2FjaGUtPmRpc2NhcmRfYmxvY2tfc2l6ZSA8PCBTRUNUT1JfU0hJRlQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNhY2hlX2lvX2hpbnRzKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1pdHMpCkBAIC0zMTA0LDcgKzMzMjgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIGNhY2hlX3RhcmdldCA9IHsKIAkubmFtZSA9ICJjYWNoZSIsCi0JLnZlcnNpb24gPSB7MSwgNSwgMH0sCisJLnZlcnNpb24gPSB7MSwgNiwgMH0sCiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogCS5jdHIgPSBjYWNoZV9jdHIsCiAJLmR0ciA9IGNhY2hlX2R0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwppbmRleCBmYzkzYjkzLi4wODk4MWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMKKysrIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCkBAIC03MDUsNyArNzA1LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgKCgxIDw8IFNFQ1RPUl9TSElGVCkgLyA4KTsgaSsrKQogCQljcnlwdG9feG9yKGRhdGEgKyBpICogOCwgYnVmLCA4KTsKIG91dDoKLQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJbWVtemVyb19leHBsaWNpdChidWYsIHNpemVvZihidWYpKTsKIAlyZXR1cm4gcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCmluZGV4IDBiZTkzODEuLjczZjc5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYworKysgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKQEAgLTY4NCwxMSArNjg0LDE0IEBACiAJaW50IHNyY3VfaWR4OwogCiAJcGFyYW0tPmZsYWdzICY9IH4oRE1fU1VTUEVORF9GTEFHIHwgRE1fUkVBRE9OTFlfRkxBRyB8Ci0JCQkgIERNX0FDVElWRV9QUkVTRU5UX0ZMQUcpOworCQkJICBETV9BQ1RJVkVfUFJFU0VOVF9GTEFHIHwgRE1fSU5URVJOQUxfU1VTUEVORF9GTEFHKTsKIAogCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKQogCQlwYXJhbS0+ZmxhZ3MgfD0gRE1fU1VTUEVORF9GTEFHOwogCisJaWYgKGRtX3N1c3BlbmRlZF9pbnRlcm5hbGx5X21kKG1kKSkKKwkJcGFyYW0tPmZsYWdzIHw9IERNX0lOVEVSTkFMX1NVU1BFTkRfRkxBRzsKKwogCWlmIChkbV90ZXN0X2RlZmVycmVkX3JlbW92ZV9mbGFnKG1kKSkKIAkJcGFyYW0tPmZsYWdzIHw9IERNX0RFRkVSUkVEX1JFTU9WRTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zdGF0cy5jIGIvZHJpdmVycy9tZC9kbS1zdGF0cy5jCmluZGV4IDg3Zjg2YzcuLmY0NzhhNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc3RhdHMuYworKysgYi9kcml2ZXJzL21kL2RtLXN0YXRzLmMKQEAgLTgyNCw3ICs4MjQsNyBAQAogCQlyZXR1cm4gMTsKIAogCWlkID0gZG1fc3RhdHNfY3JlYXRlKGRtX2dldF9zdGF0cyhtZCksIHN0YXJ0LCBlbmQsIHN0ZXAsIHByb2dyYW1faWQsIGF1eF9kYXRhLAotCQkJICAgICBkbV9pbnRlcm5hbF9zdXNwZW5kLCBkbV9pbnRlcm5hbF9yZXN1bWUsIG1kKTsKKwkJCSAgICAgZG1faW50ZXJuYWxfc3VzcGVuZF9mYXN0LCBkbV9pbnRlcm5hbF9yZXN1bWVfZmFzdCwgbWQpOwogCWlmIChpZCA8IDApCiAJCXJldHVybiBpZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10YWJsZS5jIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCmluZGV4IGIyYmQxZWIuLjNhZmFlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYworKysgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKQEAgLTE1MjEsMTggKzE1MjEsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1fdGFibGVfZ2V0X21vZGUpOwogCi1zdGF0aWMgdm9pZCBzdXNwZW5kX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0LCB1bnNpZ25lZCBwb3N0c3VzcGVuZCkKK2VudW0gc3VzcGVuZF9tb2RlIHsKKwlQUkVTVVNQRU5ELAorCVBSRVNVU1BFTkRfVU5ETywKKwlQT1NUU1VTUEVORCwKK307CisKK3N0YXRpYyB2b2lkIHN1c3BlbmRfdGFyZ2V0cyhzdHJ1Y3QgZG1fdGFibGUgKnQsIGVudW0gc3VzcGVuZF9tb2RlIG1vZGUpCiB7CiAJaW50IGkgPSB0LT5udW1fdGFyZ2V0czsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSA9IHQtPnRhcmdldHM7CiAKIAl3aGlsZSAoaS0tKSB7Ci0JCWlmIChwb3N0c3VzcGVuZCkgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBQUkVTVVNQRU5EOgorCQkJaWYgKHRpLT50eXBlLT5wcmVzdXNwZW5kKQorCQkJCXRpLT50eXBlLT5wcmVzdXNwZW5kKHRpKTsKKwkJCWJyZWFrOworCQljYXNlIFBSRVNVU1BFTkRfVU5ETzoKKwkJCWlmICh0aS0+dHlwZS0+cHJlc3VzcGVuZF91bmRvKQorCQkJCXRpLT50eXBlLT5wcmVzdXNwZW5kX3VuZG8odGkpOworCQkJYnJlYWs7CisJCWNhc2UgUE9TVFNVU1BFTkQ6CiAJCQlpZiAodGktPnR5cGUtPnBvc3RzdXNwZW5kKQogCQkJCXRpLT50eXBlLT5wb3N0c3VzcGVuZCh0aSk7Ci0JCX0gZWxzZSBpZiAodGktPnR5cGUtPnByZXN1c3BlbmQpCi0JCQl0aS0+dHlwZS0+cHJlc3VzcGVuZCh0aSk7Ci0KKwkJCWJyZWFrOworCQl9CiAJCXRpKys7CiAJfQogfQpAQCAtMTU0Miw3ICsxNTU2LDE1IEBACiAJaWYgKCF0KQogCQlyZXR1cm47CiAKLQlzdXNwZW5kX3RhcmdldHModCwgMCk7CisJc3VzcGVuZF90YXJnZXRzKHQsIFBSRVNVU1BFTkQpOworfQorCit2b2lkIGRtX3RhYmxlX3ByZXN1c3BlbmRfdW5kb190YXJnZXRzKHN0cnVjdCBkbV90YWJsZSAqdCkKK3sKKwlpZiAoIXQpCisJCXJldHVybjsKKworCXN1c3BlbmRfdGFyZ2V0cyh0LCBQUkVTVVNQRU5EX1VORE8pOwogfQogCiB2b2lkIGRtX3RhYmxlX3Bvc3RzdXNwZW5kX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0KQpAQCAtMTU1MCw3ICsxNTcyLDcgQEAKIAlpZiAoIXQpCiAJCXJldHVybjsKIAotCXN1c3BlbmRfdGFyZ2V0cyh0LCAxKTsKKwlzdXNwZW5kX3RhcmdldHModCwgUE9TVFNVU1BFTkQpOwogfQogCiBpbnQgZG1fdGFibGVfcmVzdW1lX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmMgYi9kcml2ZXJzL21kL2RtLXRoaW4tbWV0YWRhdGEuYwppbmRleCBlOWQzM2FkLi40M2FkYmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRoaW4tbWV0YWRhdGEuYworKysgYi9kcml2ZXJzL21kL2RtLXRoaW4tbWV0YWRhdGEuYwpAQCAtMTM4NCw0MiArMTM4NCwzOCBAQAogfQogCiBpbnQgZG1fdGhpbl9maW5kX2Jsb2NrKHN0cnVjdCBkbV90aGluX2RldmljZSAqdGQsIGRtX2Jsb2NrX3QgYmxvY2ssCi0JCSAgICAgICBpbnQgY2FuX2Jsb2NrLCBzdHJ1Y3QgZG1fdGhpbl9sb29rdXBfcmVzdWx0ICpyZXN1bHQpCisJCSAgICAgICBpbnQgY2FuX2lzc3VlX2lvLCBzdHJ1Y3QgZG1fdGhpbl9sb29rdXBfcmVzdWx0ICpyZXN1bHQpCiB7Ci0JaW50IHIgPSAtRUlOVkFMOwotCXVpbnQ2NF90IGJsb2NrX3RpbWUgPSAwOworCWludCByOwogCV9fbGU2NCB2YWx1ZTsKIAlzdHJ1Y3QgZG1fcG9vbF9tZXRhZGF0YSAqcG1kID0gdGQtPnBtZDsKIAlkbV9ibG9ja190IGtleXNbMl0gPSB7IHRkLT5pZCwgYmxvY2sgfTsKIAlzdHJ1Y3QgZG1fYnRyZWVfaW5mbyAqaW5mbzsKIAotCWlmIChjYW5fYmxvY2spIHsKLQkJZG93bl9yZWFkKCZwbWQtPnJvb3RfbG9jayk7Ci0JCWluZm8gPSAmcG1kLT5pbmZvOwotCX0gZWxzZSBpZiAoZG93bl9yZWFkX3RyeWxvY2soJnBtZC0+cm9vdF9sb2NrKSkKLQkJaW5mbyA9ICZwbWQtPm5iX2luZm87Ci0JZWxzZQotCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCiAJaWYgKHBtZC0+ZmFpbF9pbykKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRUlOVkFMOworCisJZG93bl9yZWFkKCZwbWQtPnJvb3RfbG9jayk7CisKKwlpZiAoY2FuX2lzc3VlX2lvKSB7CisJCWluZm8gPSAmcG1kLT5pbmZvOworCX0gZWxzZQorCQlpbmZvID0gJnBtZC0+bmJfaW5mbzsKIAogCXIgPSBkbV9idHJlZV9sb29rdXAoaW5mbywgcG1kLT5yb290LCBrZXlzLCAmdmFsdWUpOwotCWlmICghcikKLQkJYmxvY2tfdGltZSA9IGxlNjRfdG9fY3B1KHZhbHVlKTsKLQotb3V0OgotCXVwX3JlYWQoJnBtZC0+cm9vdF9sb2NrKTsKLQogCWlmICghcikgeworCQl1aW50NjRfdCBibG9ja190aW1lID0gMDsKIAkJZG1fYmxvY2tfdCBleGNlcHRpb25fYmxvY2s7CiAJCXVpbnQzMl90IGV4Y2VwdGlvbl90aW1lOworCisJCWJsb2NrX3RpbWUgPSBsZTY0X3RvX2NwdSh2YWx1ZSk7CiAJCXVucGFja19ibG9ja190aW1lKGJsb2NrX3RpbWUsICZleGNlcHRpb25fYmxvY2ssCiAJCQkJICAmZXhjZXB0aW9uX3RpbWUpOwogCQlyZXN1bHQtPmJsb2NrID0gZXhjZXB0aW9uX2Jsb2NrOwogCQlyZXN1bHQtPnNoYXJlZCA9IF9fc25hcHNob3R0ZWRfc2luY2UodGQsIGV4Y2VwdGlvbl90aW1lKTsKIAl9CiAKKwl1cF9yZWFkKCZwbWQtPnJvb3RfbG9jayk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE4MTMsMyArMTgwOSw4IEBACiAKIAlyZXR1cm4gbmVlZHNfY2hlY2s7CiB9CisKK3ZvaWQgZG1fcG9vbF9pc3N1ZV9wcmVmZXRjaGVzKHN0cnVjdCBkbV9wb29sX21ldGFkYXRhICpwbWQpCit7CisJZG1fdG1faXNzdWVfcHJlZmV0Y2hlcyhwbWQtPnRtKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGhpbi1tZXRhZGF0YS5oIGIvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmgKaW5kZXggZTNjODU3ZC4uOTIxZDE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmgKKysrIGIvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmgKQEAgLTEzOSwxMiArMTM5LDEyIEBACiAKIC8qCiAgKiBSZXR1cm5zOgotICogICAtRVdPVUxEQkxPQ0sgaWZmIEBjYW5fYmxvY2sgaXMgc2V0IGFuZCB3b3VsZCBibG9jay4KKyAqICAgLUVXT1VMREJMT0NLIGlmZiBAY2FuX2lzc3VlX2lvIGlzIHNldCBhbmQgd291bGQgaXNzdWUgSU8KICAqICAgLUVOT0RBVEEgaWZmIHRoYXQgbWFwcGluZyBpcyBub3QgcHJlc2VudC4KICAqICAgMCBzdWNjZXNzCiAgKi8KIGludCBkbV90aGluX2ZpbmRfYmxvY2soc3RydWN0IGRtX3RoaW5fZGV2aWNlICp0ZCwgZG1fYmxvY2tfdCBibG9jaywKLQkJICAgICAgIGludCBjYW5fYmxvY2ssIHN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgKnJlc3VsdCk7CisJCSAgICAgICBpbnQgY2FuX2lzc3VlX2lvLCBzdHJ1Y3QgZG1fdGhpbl9sb29rdXBfcmVzdWx0ICpyZXN1bHQpOwogCiAvKgogICogT2J0YWluIGFuIHVudXNlZCBibG9jay4KQEAgLTIxMyw2ICsyMTMsMTEgQEAKIGludCBkbV9wb29sX21ldGFkYXRhX3NldF9uZWVkc19jaGVjayhzdHJ1Y3QgZG1fcG9vbF9tZXRhZGF0YSAqcG1kKTsKIGJvb2wgZG1fcG9vbF9tZXRhZGF0YV9uZWVkc19jaGVjayhzdHJ1Y3QgZG1fcG9vbF9tZXRhZGF0YSAqcG1kKTsKIAorLyoKKyAqIElzc3VlIGFueSBwcmVmZXRjaGVzIHRoYXQgbWF5IGJlIHVzZWZ1bC4KKyAqLwordm9pZCBkbV9wb29sX2lzc3VlX3ByZWZldGNoZXMoc3RydWN0IGRtX3Bvb2xfbWV0YWRhdGEgKnBtZCk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10aGluLmMgYi9kcml2ZXJzL21kL2RtLXRoaW4uYwppbmRleCAwZjg2ZDgwLi44NzM1NTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRoaW4uYworKysgYi9kcml2ZXJzL21kL2RtLXRoaW4uYwpAQCAtMTEsMTEgKzExLDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWlvLmg+CiAjaW5jbHVkZSA8bGludXgvZG0ta2NvcHlkLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAKICNkZWZpbmUJRE1fTVNHX1BSRUZJWAkidGhpbiIKQEAgLTI1LDcgKzI3LDYgQEAKICAqLwogI2RlZmluZSBFTkRJT19IT09LX1BPT0xfU0laRSAxMDI0CiAjZGVmaW5lIE1BUFBJTkdfUE9PTF9TSVpFIDEwMjQKLSNkZWZpbmUgUFJJU09OX0NFTExTIDEwMjQKICNkZWZpbmUgQ09NTUlUX1BFUklPRCBIWgogI2RlZmluZSBOT19TUEFDRV9USU1FT1VUX1NFQ1MgNjAKIApAQCAtMTE0LDcgKzExNSw4IEBACiB7CiAJa2V5LT52aXJ0dWFsID0gMDsKIAlrZXktPmRldiA9IGRtX3RoaW5fZGV2X2lkKHRkKTsKLQlrZXktPmJsb2NrID0gYjsKKwlrZXktPmJsb2NrX2JlZ2luID0gYjsKKwlrZXktPmJsb2NrX2VuZCA9IGIgKyAxVUxMOwogfQogCiBzdGF0aWMgdm9pZCBidWlsZF92aXJ0dWFsX2tleShzdHJ1Y3QgZG1fdGhpbl9kZXZpY2UgKnRkLCBkbV9ibG9ja190IGIsCkBAIC0xMjIsNyArMTI0LDU1IEBACiB7CiAJa2V5LT52aXJ0dWFsID0gMTsKIAlrZXktPmRldiA9IGRtX3RoaW5fZGV2X2lkKHRkKTsKLQlrZXktPmJsb2NrID0gYjsKKwlrZXktPmJsb2NrX2JlZ2luID0gYjsKKwlrZXktPmJsb2NrX2VuZCA9IGIgKyAxVUxMOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFRIUk9UVExFX1RIUkVTSE9MRCAoMSAqIEhaKQorCitzdHJ1Y3QgdGhyb3R0bGUgeworCXN0cnVjdCByd19zZW1hcGhvcmUgbG9jazsKKwl1bnNpZ25lZCBsb25nIHRocmVzaG9sZDsKKwlib29sIHRocm90dGxlX2FwcGxpZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0aHJvdHRsZV9pbml0KHN0cnVjdCB0aHJvdHRsZSAqdCkKK3sKKwlpbml0X3J3c2VtKCZ0LT5sb2NrKTsKKwl0LT50aHJvdHRsZV9hcHBsaWVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX3dvcmtfc3RhcnQoc3RydWN0IHRocm90dGxlICp0KQoreworCXQtPnRocmVzaG9sZCA9IGppZmZpZXMgKyBUSFJPVFRMRV9USFJFU0hPTEQ7Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX3dvcmtfdXBkYXRlKHN0cnVjdCB0aHJvdHRsZSAqdCkKK3sKKwlpZiAoIXQtPnRocm90dGxlX2FwcGxpZWQgJiYgamlmZmllcyA+IHQtPnRocmVzaG9sZCkgeworCQlkb3duX3dyaXRlKCZ0LT5sb2NrKTsKKwkJdC0+dGhyb3R0bGVfYXBwbGllZCA9IHRydWU7CisJfQorfQorCitzdGF0aWMgdm9pZCB0aHJvdHRsZV93b3JrX2NvbXBsZXRlKHN0cnVjdCB0aHJvdHRsZSAqdCkKK3sKKwlpZiAodC0+dGhyb3R0bGVfYXBwbGllZCkgeworCQl0LT50aHJvdHRsZV9hcHBsaWVkID0gZmFsc2U7CisJCXVwX3dyaXRlKCZ0LT5sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX2xvY2soc3RydWN0IHRocm90dGxlICp0KQoreworCWRvd25fcmVhZCgmdC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHRocm90dGxlX3VubG9jayhzdHJ1Y3QgdGhyb3R0bGUgKnQpCit7CisJdXBfcmVhZCgmdC0+bG9jayk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNTUsOCArMjA1LDExIEBACiAKIHN0cnVjdCB0aGluX2M7CiB0eXBlZGVmIHZvaWQgKCpwcm9jZXNzX2Jpb19mbikoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbyk7Cit0eXBlZGVmIHZvaWQgKCpwcm9jZXNzX2NlbGxfZm4pKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKTsKIHR5cGVkZWYgdm9pZCAoKnByb2Nlc3NfbWFwcGluZ19mbikoc3RydWN0IGRtX3RoaW5fbmV3X21hcHBpbmcgKm0pOwogCisjZGVmaW5lIENFTExfU09SVF9BUlJBWV9TSVpFIDgxOTIKKwogc3RydWN0IHBvb2wgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aTsJLyogT25seSBzZXQgaWYgYSBwb29sIHRhcmdldCBpcyBib3VuZCAqLwpAQCAtMTcxLDExICsyMjQsMTMgQEAKIAogCXN0cnVjdCBwb29sX2ZlYXR1cmVzIHBmOwogCWJvb2wgbG93X3dhdGVyX3RyaWdnZXJlZDoxOwkvKiBBIGRtIGV2ZW50IGhhcyBiZWVuIHNlbnQgKi8KKwlib29sIHN1c3BlbmRlZDoxOwogCiAJc3RydWN0IGRtX2Jpb19wcmlzb24gKnByaXNvbjsKIAlzdHJ1Y3QgZG1fa2NvcHlkX2NsaWVudCAqY29waWVyOwogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOworCXN0cnVjdCB0aHJvdHRsZSB0aHJvdHRsZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya2VyOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgd2FrZXI7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBub19zcGFjZV90aW1lb3V0OwpAQCAtMTk4LDggKzI1MywxMyBAQAogCXByb2Nlc3NfYmlvX2ZuIHByb2Nlc3NfYmlvOwogCXByb2Nlc3NfYmlvX2ZuIHByb2Nlc3NfZGlzY2FyZDsKIAorCXByb2Nlc3NfY2VsbF9mbiBwcm9jZXNzX2NlbGw7CisJcHJvY2Vzc19jZWxsX2ZuIHByb2Nlc3NfZGlzY2FyZF9jZWxsOworCiAJcHJvY2Vzc19tYXBwaW5nX2ZuIHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZzsKIAlwcm9jZXNzX21hcHBpbmdfZm4gcHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkOworCisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbF9zb3J0X2FycmF5W0NFTExfU09SVF9BUlJBWV9TSVpFXTsKIH07CiAKIHN0YXRpYyBlbnVtIHBvb2xfbW9kZSBnZXRfcG9vbF9tb2RlKHN0cnVjdCBwb29sICpwb29sKTsKQEAgLTIzMiw4ICsyOTIsMTEgQEAKIAogCXN0cnVjdCBwb29sICpwb29sOwogCXN0cnVjdCBkbV90aGluX2RldmljZSAqdGQ7CisJc3RydWN0IG1hcHBlZF9kZXZpY2UgKnRoaW5fbWQ7CisKIAlib29sIHJlcXVldWVfbW9kZToxOwogCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkX2NlbGxzOwogCXN0cnVjdCBiaW9fbGlzdCBkZWZlcnJlZF9iaW9fbGlzdDsKIAlzdHJ1Y3QgYmlvX2xpc3QgcmV0cnlfb25fcmVzdW1lX2xpc3Q7CiAJc3RydWN0IHJiX3Jvb3Qgc29ydF9iaW9fbGlzdDsgLyogc29ydGVkIGxpc3Qgb2YgZGVmZXJyZWQgYmlvcyAqLwpAQCAtMjkwLDYgKzM1MywxNSBAQAogCWRtX2Jpb19wcmlzb25fZnJlZV9jZWxsKHBvb2wtPnByaXNvbiwgY2VsbCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNlbGxfdmlzaXRfcmVsZWFzZShzdHJ1Y3QgcG9vbCAqcG9vbCwKKwkJCSAgICAgICB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqKSwKKwkJCSAgICAgICB2b2lkICpjb250ZXh0LAorCQkJICAgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJZG1fY2VsbF92aXNpdF9yZWxlYXNlKHBvb2wtPnByaXNvbiwgZm4sIGNvbnRleHQsIGNlbGwpOworCWRtX2Jpb19wcmlzb25fZnJlZV9jZWxsKHBvb2wtPnByaXNvbiwgY2VsbCk7Cit9CisKIHN0YXRpYyB2b2lkIGNlbGxfcmVsZWFzZV9ub19ob2xkZXIoc3RydWN0IHBvb2wgKnBvb2wsCiAJCQkJICAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCwKIAkJCQkgICBzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MpCkBAIC0yOTgsMTkgKzM3MCw2IEBACiAJZG1fYmlvX3ByaXNvbl9mcmVlX2NlbGwocG9vbC0+cHJpc29uLCBjZWxsKTsKIH0KIAotc3RhdGljIHZvaWQgY2VsbF9kZWZlcl9ub19ob2xkZXJfbm9fZnJlZShzdHJ1Y3QgdGhpbl9jICp0YywKLQkJCQkJIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCi17Ci0Jc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0JZG1fY2VsbF9yZWxlYXNlX25vX2hvbGRlcihwb29sLT5wcmlzb24sIGNlbGwsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0KLQl3YWtlX3dvcmtlcihwb29sKTsKLX0KLQogc3RhdGljIHZvaWQgY2VsbF9lcnJvcl93aXRoX2NvZGUoc3RydWN0IHBvb2wgKnBvb2wsCiAJCQkJIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsIGludCBlcnJvcl9jb2RlKQogewpAQCAtMzIzLDYgKzM4MiwxNiBAQAogCWNlbGxfZXJyb3Jfd2l0aF9jb2RlKHBvb2wsIGNlbGwsIC1FSU8pOwogfQogCitzdGF0aWMgdm9pZCBjZWxsX3N1Y2Nlc3Moc3RydWN0IHBvb2wgKnBvb2wsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJY2VsbF9lcnJvcl93aXRoX2NvZGUocG9vbCwgY2VsbCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNlbGxfcmVxdWV1ZShzdHJ1Y3QgcG9vbCAqcG9vbCwgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKK3sKKwljZWxsX2Vycm9yX3dpdGhfY29kZShwb29sLCBjZWxsLCBETV9FTkRJT19SRVFVRVVFKTsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKQEAgLTM5Myw0NCArNDYyLDY1IEBACiAJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsKIH07CiAKLXN0YXRpYyB2b2lkIHJlcXVldWVfYmlvX2xpc3Qoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW9fbGlzdCAqbWFzdGVyKQorc3RhdGljIHZvaWQgX19tZXJnZV9iaW9fbGlzdChzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MsIHN0cnVjdCBiaW9fbGlzdCAqbWFzdGVyKQoreworCWJpb19saXN0X21lcmdlKGJpb3MsIG1hc3Rlcik7CisJYmlvX2xpc3RfaW5pdChtYXN0ZXIpOworfQorCitzdGF0aWMgdm9pZCBlcnJvcl9iaW9fbGlzdChzdHJ1Y3QgYmlvX2xpc3QgKmJpb3MsIGludCBlcnJvcikKIHsKIAlzdHJ1Y3QgYmlvICpiaW87CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChiaW9zKSkpCisJCWJpb19lbmRpbyhiaW8sIGVycm9yKTsKK30KKworc3RhdGljIHZvaWQgZXJyb3JfdGhpbl9iaW9fbGlzdChzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpb19saXN0ICptYXN0ZXIsIGludCBlcnJvcikKK3sKIAlzdHJ1Y3QgYmlvX2xpc3QgYmlvczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYmlvX2xpc3RfaW5pdCgmYmlvcyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGMtPmxvY2ssIGZsYWdzKTsKLQliaW9fbGlzdF9tZXJnZSgmYmlvcywgbWFzdGVyKTsKLQliaW9fbGlzdF9pbml0KG1hc3Rlcik7CisJX19tZXJnZV9iaW9fbGlzdCgmYmlvcywgbWFzdGVyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+bG9jaywgZmxhZ3MpOwogCi0Jd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmJpb3MpKSkKLQkJYmlvX2VuZGlvKGJpbywgRE1fRU5ESU9fUkVRVUVVRSk7CisJZXJyb3JfYmlvX2xpc3QoJmJpb3MsIGVycm9yKTsKK30KKworc3RhdGljIHZvaWQgcmVxdWV1ZV9kZWZlcnJlZF9jZWxscyhzdHJ1Y3QgdGhpbl9jICp0YykKK3sKKwlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCBjZWxsczsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsLCAqdG1wOworCisJSU5JVF9MSVNUX0hFQUQoJmNlbGxzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0Yy0+bG9jaywgZmxhZ3MpOworCWxpc3Rfc3BsaWNlX2luaXQoJnRjLT5kZWZlcnJlZF9jZWxscywgJmNlbGxzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNlbGwsIHRtcCwgJmNlbGxzLCB1c2VyX2xpc3QpCisJCWNlbGxfcmVxdWV1ZShwb29sLCBjZWxsKTsKIH0KIAogc3RhdGljIHZvaWQgcmVxdWV1ZV9pbyhzdHJ1Y3QgdGhpbl9jICp0YykKIHsKLQlyZXF1ZXVlX2Jpb19saXN0KHRjLCAmdGMtPmRlZmVycmVkX2Jpb19saXN0KTsKLQlyZXF1ZXVlX2Jpb19saXN0KHRjLCAmdGMtPnJldHJ5X29uX3Jlc3VtZV9saXN0KTsKLX0KLQotc3RhdGljIHZvaWQgZXJyb3JfdGhpbl9yZXRyeV9saXN0KHN0cnVjdCB0aGluX2MgKnRjKQotewotCXN0cnVjdCBiaW8gKmJpbzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBiaW9fbGlzdCBiaW9zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAliaW9fbGlzdF9pbml0KCZiaW9zKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0Yy0+bG9jaywgZmxhZ3MpOwotCWJpb19saXN0X21lcmdlKCZiaW9zLCAmdGMtPnJldHJ5X29uX3Jlc3VtZV9saXN0KTsKLQliaW9fbGlzdF9pbml0KCZ0Yy0+cmV0cnlfb25fcmVzdW1lX2xpc3QpOworCV9fbWVyZ2VfYmlvX2xpc3QoJmJpb3MsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOworCV9fbWVyZ2VfYmlvX2xpc3QoJmJpb3MsICZ0Yy0+cmV0cnlfb25fcmVzdW1lX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7CiAKLQl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmYmlvcykpKQotCQliaW9faW9fZXJyb3IoYmlvKTsKKwllcnJvcl9iaW9fbGlzdCgmYmlvcywgRE1fRU5ESU9fUkVRVUVVRSk7CisJcmVxdWV1ZV9kZWZlcnJlZF9jZWxscyh0Yyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVycm9yX3JldHJ5X2xpc3Qoc3RydWN0IHBvb2wgKnBvb2wpCkBAIC00MzksNyArNTI5LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0YywgJnBvb2wtPmFjdGl2ZV90aGlucywgbGlzdCkKLQkJZXJyb3JfdGhpbl9yZXRyeV9saXN0KHRjKTsKKwkJZXJyb3JfdGhpbl9iaW9fbGlzdCh0YywgJnRjLT5yZXRyeV9vbl9yZXN1bWVfbGlzdCwgLUVJTyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTYyOSwyMiArNzE5LDggQEAKICAqLwogCiAvKgotICogVGhpcyBzZW5kcyB0aGUgYmlvcyBpbiB0aGUgY2VsbCBiYWNrIHRvIHRoZSBkZWZlcnJlZF9iaW9zIGxpc3QuCi0gKi8KLXN0YXRpYyB2b2lkIGNlbGxfZGVmZXIoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCi17Ci0Jc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0JY2VsbF9yZWxlYXNlKHBvb2wsIGNlbGwsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7Ci0KLQl3YWtlX3dvcmtlcihwb29sKTsKLX0KLQotLyoKLSAqIFNhbWUgYXMgY2VsbF9kZWZlciBhYm92ZSwgZXhjZXB0IGl0IG9taXRzIHRoZSBvcmlnaW5hbCBob2xkZXIgb2YgdGhlIGNlbGwuCisgKiBUaGlzIHNlbmRzIHRoZSBiaW9zIGluIHRoZSBjZWxsLCBleGNlcHQgdGhlIG9yaWdpbmFsIGhvbGRlciwgYmFjaworICogdG8gdGhlIGRlZmVycmVkX2Jpb3MgbGlzdC4KICAqLwogc3RhdGljIHZvaWQgY2VsbF9kZWZlcl9ub19ob2xkZXIoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCiB7CkBAIC02NTgsNiArNzM0LDYyIEBACiAJd2FrZV93b3JrZXIocG9vbCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRoaW5fZGVmZXJfYmlvKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pOworCitzdHJ1Y3QgcmVtYXBfaW5mbyB7CisJc3RydWN0IHRoaW5fYyAqdGM7CisJc3RydWN0IGJpb19saXN0IGRlZmVyX2Jpb3M7CisJc3RydWN0IGJpb19saXN0IGlzc3VlX2Jpb3M7Cit9OworCitzdGF0aWMgdm9pZCBfX2luY19yZW1hcF9hbmRfaXNzdWVfY2VsbCh2b2lkICpjb250ZXh0LAorCQkJCSAgICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCXN0cnVjdCByZW1hcF9pbmZvICppbmZvID0gY29udGV4dDsKKwlzdHJ1Y3QgYmlvICpiaW87CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmY2VsbC0+YmlvcykpKSB7CisJCWlmIChiaW8tPmJpX3J3ICYgKFJFUV9ESVNDQVJEIHwgUkVRX0ZMVVNIIHwgUkVRX0ZVQSkpCisJCQliaW9fbGlzdF9hZGQoJmluZm8tPmRlZmVyX2Jpb3MsIGJpbyk7CisJCWVsc2UgeworCQkJaW5jX2FsbF9pb19lbnRyeShpbmZvLT50Yy0+cG9vbCwgYmlvKTsKKworCQkJLyoKKwkJCSAqIFdlIGNhbid0IGlzc3VlIHRoZSBiaW9zIHdpdGggdGhlIGJpbyBwcmlzb24gbG9jaworCQkJICogaGVsZCwgc28gd2UgYWRkIHRoZW0gdG8gYSBsaXN0IHRvIGlzc3VlIG9uCisJCQkgKiByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgorCQkJICovCisJCQliaW9fbGlzdF9hZGQoJmluZm8tPmlzc3VlX2Jpb3MsIGJpbyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluY19yZW1hcF9hbmRfaXNzdWVfY2VsbChzdHJ1Y3QgdGhpbl9jICp0YywKKwkJCQkgICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsCisJCQkJICAgICBkbV9ibG9ja190IGJsb2NrKQoreworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgcmVtYXBfaW5mbyBpbmZvOworCisJaW5mby50YyA9IHRjOworCWJpb19saXN0X2luaXQoJmluZm8uZGVmZXJfYmlvcyk7CisJYmlvX2xpc3RfaW5pdCgmaW5mby5pc3N1ZV9iaW9zKTsKKworCS8qCisJICogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIGluYyBhbnkgYmlvcyB3ZSdyZSBhYm91dCB0byBpc3N1ZQorCSAqIGJlZm9yZSB0aGUgY2VsbCBpcyByZWxlYXNlZCwgYW5kIGF2b2lkIGEgcmFjZSB3aXRoIG5ldyBiaW9zCisJICogYmVpbmcgYWRkZWQgdG8gdGhlIGNlbGwuCisJICovCisJY2VsbF92aXNpdF9yZWxlYXNlKHRjLT5wb29sLCBfX2luY19yZW1hcF9hbmRfaXNzdWVfY2VsbCwKKwkJCSAgICZpbmZvLCBjZWxsKTsKKworCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZpbmZvLmRlZmVyX2Jpb3MpKSkKKwkJdGhpbl9kZWZlcl9iaW8odGMsIGJpbyk7CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmaW5mby5pc3N1ZV9iaW9zKSkpCisJCXJlbWFwX2FuZF9pc3N1ZShpbmZvLnRjLCBiaW8sIGJsb2NrKTsKK30KKwogc3RhdGljIHZvaWQgcHJvY2Vzc19wcmVwYXJlZF9tYXBwaW5nX2ZhaWwoc3RydWN0IGRtX3RoaW5fbmV3X21hcHBpbmcgKm0pCiB7CiAJaWYgKG0tPmJpbykgewpAQCAtNzA2LDEwICs4MzgsMTMgQEAKIAkgKiB0aGUgYmlvcyBpbiB0aGUgY2VsbC4KIAkgKi8KIAlpZiAoYmlvKSB7Ci0JCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBtLT5jZWxsKTsKKwkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBtLT5jZWxsLCBtLT5kYXRhX2Jsb2NrKTsKIAkJYmlvX2VuZGlvKGJpbywgMCk7Ci0JfSBlbHNlCi0JCWNlbGxfZGVmZXIodGMsIG0tPmNlbGwpOworCX0gZWxzZSB7CisJCWluY19hbGxfaW9fZW50cnkodGMtPnBvb2wsIG0tPmNlbGwtPmhvbGRlcik7CisJCXJlbWFwX2FuZF9pc3N1ZSh0YywgbS0+Y2VsbC0+aG9sZGVyLCBtLT5kYXRhX2Jsb2NrKTsKKwkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBtLT5jZWxsLCBtLT5kYXRhX2Jsb2NrKTsKKwl9CiAKIG91dDoKIAlsaXN0X2RlbCgmbS0+bGlzdCk7CkBAIC04NDIsNiArOTc3LDIwIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCByZW1hcF9hbmRfaXNzdWVfb3ZlcndyaXRlKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkJICAgICAgZG1fYmxvY2tfdCBkYXRhX2Jsb2NrLAorCQkJCSAgICAgIHN0cnVjdCBkbV90aGluX25ld19tYXBwaW5nICptKQoreworCXN0cnVjdCBwb29sICpwb29sID0gdGMtPnBvb2w7CisJc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vayAqaCA9IGRtX3Blcl9iaW9fZGF0YShiaW8sIHNpemVvZihzdHJ1Y3QgZG1fdGhpbl9lbmRpb19ob29rKSk7CisKKwloLT5vdmVyd3JpdGVfbWFwcGluZyA9IG07CisJbS0+YmlvID0gYmlvOworCXNhdmVfYW5kX3NldF9lbmRpbyhiaW8sICZtLT5zYXZlZF9iaV9lbmRfaW8sIG92ZXJ3cml0ZV9lbmRpbyk7CisJaW5jX2FsbF9pb19lbnRyeShwb29sLCBiaW8pOworCXJlbWFwX2FuZF9pc3N1ZSh0YywgYmlvLCBkYXRhX2Jsb2NrKTsKK30KKwogLyoKICAqIEEgcGFydGlhbCBjb3B5IGFsc28gbmVlZHMgdG8gemVybyB0aGUgdW5jb3BpZWQgcmVnaW9uLgogICovCkBAIC04NzYsMTUgKzEwMjUsOSBAQAogCSAqIElmIHRoZSB3aG9sZSBibG9jayBvZiBkYXRhIGlzIGJlaW5nIG92ZXJ3cml0dGVuLCB3ZSBjYW4gaXNzdWUgdGhlCiAJICogYmlvIGltbWVkaWF0ZWx5LiBPdGhlcndpc2Ugd2UgdXNlIGtjb3B5ZCB0byBjbG9uZSB0aGUgZGF0YSBmaXJzdC4KIAkgKi8KLQlpZiAoaW9fb3ZlcndyaXRlc19ibG9jayhwb29sLCBiaW8pKSB7Ci0JCXN0cnVjdCBkbV90aGluX2VuZGlvX2hvb2sgKmggPSBkbV9wZXJfYmlvX2RhdGEoYmlvLCBzaXplb2Yoc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vaykpOwotCi0JCWgtPm92ZXJ3cml0ZV9tYXBwaW5nID0gbTsKLQkJbS0+YmlvID0gYmlvOwotCQlzYXZlX2FuZF9zZXRfZW5kaW8oYmlvLCAmbS0+c2F2ZWRfYmlfZW5kX2lvLCBvdmVyd3JpdGVfZW5kaW8pOwotCQlpbmNfYWxsX2lvX2VudHJ5KHBvb2wsIGJpbyk7Ci0JCXJlbWFwX2FuZF9pc3N1ZSh0YywgYmlvLCBkYXRhX2Rlc3QpOwotCX0gZWxzZSB7CisJaWYgKGlvX292ZXJ3cml0ZXNfYmxvY2socG9vbCwgYmlvKSkKKwkJcmVtYXBfYW5kX2lzc3VlX292ZXJ3cml0ZSh0YywgYmlvLCBkYXRhX2Rlc3QsIG0pOworCWVsc2UgewogCQlzdHJ1Y3QgZG1faW9fcmVnaW9uIGZyb20sIHRvOwogCiAJCWZyb20uYmRldiA9IG9yaWdpbi0+YmRldjsKQEAgLTk1MywxNiArMTA5NiwxMCBAQAogCWlmICghcG9vbC0+cGYuemVyb19uZXdfYmxvY2tzKQogCQlwcm9jZXNzX3ByZXBhcmVkX21hcHBpbmcobSk7CiAKLQllbHNlIGlmIChpb19vdmVyd3JpdGVzX2Jsb2NrKHBvb2wsIGJpbykpIHsKLQkJc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vayAqaCA9IGRtX3Blcl9iaW9fZGF0YShiaW8sIHNpemVvZihzdHJ1Y3QgZG1fdGhpbl9lbmRpb19ob29rKSk7CisJZWxzZSBpZiAoaW9fb3ZlcndyaXRlc19ibG9jayhwb29sLCBiaW8pKQorCQlyZW1hcF9hbmRfaXNzdWVfb3ZlcndyaXRlKHRjLCBiaW8sIGRhdGFfYmxvY2ssIG0pOwogCi0JCWgtPm92ZXJ3cml0ZV9tYXBwaW5nID0gbTsKLQkJbS0+YmlvID0gYmlvOwotCQlzYXZlX2FuZF9zZXRfZW5kaW8oYmlvLCAmbS0+c2F2ZWRfYmlfZW5kX2lvLCBvdmVyd3JpdGVfZW5kaW8pOwotCQlpbmNfYWxsX2lvX2VudHJ5KHBvb2wsIGJpbyk7Ci0JCXJlbWFwX2FuZF9pc3N1ZSh0YywgYmlvLCBkYXRhX2Jsb2NrKTsKLQotCX0gZWxzZQorCWVsc2UKIAkJbGxfemVybyh0YywgbSwKIAkJCWRhdGFfYmxvY2sgKiBwb29sLT5zZWN0b3JzX3Blcl9ibG9jaywKIAkJCShkYXRhX2Jsb2NrICsgMSkgKiBwb29sLT5zZWN0b3JzX3Blcl9ibG9jayk7CkBAIC0xMTM0LDI5ICsxMjcxLDI1IEBACiAJYmlvX2xpc3RfaW5pdCgmYmlvcyk7CiAJY2VsbF9yZWxlYXNlKHBvb2wsIGNlbGwsICZiaW9zKTsKIAotCWVycm9yID0gc2hvdWxkX2Vycm9yX3Vuc2VydmljZWFibGVfYmlvKHBvb2wpOwotCWlmIChlcnJvcikKLQkJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmJpb3MpKSkKLQkJCWJpb19lbmRpbyhiaW8sIGVycm9yKTsKLQllbHNlCi0JCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZiaW9zKSkpCi0JCQlyZXRyeV9vbl9yZXN1bWUoYmlvKTsKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmYmlvcykpKQorCQlyZXRyeV9vbl9yZXN1bWUoYmlvKTsKIH0KIAotc3RhdGljIHZvaWQgcHJvY2Vzc19kaXNjYXJkKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgdm9pZCBwcm9jZXNzX2Rpc2NhcmRfY2VsbChzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKIHsKIAlpbnQgcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiaW8gKmJpbyA9IGNlbGwtPmhvbGRlcjsKIAlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsICpjZWxsMjsKLQlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5LCBrZXkyOworCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwyOworCXN0cnVjdCBkbV9jZWxsX2tleSBrZXkyOwogCWRtX2Jsb2NrX3QgYmxvY2sgPSBnZXRfYmlvX2Jsb2NrKHRjLCBiaW8pOwogCXN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgbG9va3VwX3Jlc3VsdDsKIAlzdHJ1Y3QgZG1fdGhpbl9uZXdfbWFwcGluZyAqbTsKIAotCWJ1aWxkX3ZpcnR1YWxfa2V5KHRjLT50ZCwgYmxvY2ssICZrZXkpOwotCWlmIChiaW9fZGV0YWluKHRjLT5wb29sLCAma2V5LCBiaW8sICZjZWxsKSkKKwlpZiAodGMtPnJlcXVldWVfbW9kZSkgeworCQljZWxsX3JlcXVldWUocG9vbCwgY2VsbCk7CiAJCXJldHVybjsKKwl9CiAKIAlyID0gZG1fdGhpbl9maW5kX2Jsb2NrKHRjLT50ZCwgYmxvY2ssIDEsICZsb29rdXBfcmVzdWx0KTsKIAlzd2l0Y2ggKHIpIHsKQEAgLTExODcsMTIgKzEzMjAsOSBAQAogCQkJbS0+Y2VsbDIgPSBjZWxsMjsKIAkJCW0tPmJpbyA9IGJpbzsKIAotCQkJaWYgKCFkbV9kZWZlcnJlZF9zZXRfYWRkX3dvcmsocG9vbC0+YWxsX2lvX2RzLCAmbS0+bGlzdCkpIHsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bG9jaywgZmxhZ3MpOwotCQkJCWxpc3RfYWRkX3RhaWwoJm0tPmxpc3QsICZwb29sLT5wcmVwYXJlZF9kaXNjYXJkcyk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bG9jaywgZmxhZ3MpOwotCQkJCXdha2Vfd29ya2VyKHBvb2wpOwotCQkJfQorCQkJaWYgKCFkbV9kZWZlcnJlZF9zZXRfYWRkX3dvcmsocG9vbC0+YWxsX2lvX2RzLCAmbS0+bGlzdCkpCisJCQkJcG9vbC0+cHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkKG0pOworCiAJCX0gZWxzZSB7CiAJCQlpbmNfYWxsX2lvX2VudHJ5KHBvb2wsIGJpbyk7CiAJCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7CkBAIC0xMjI3LDYgKzEzNTcsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZGlzY2FyZF9iaW8oc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsOworCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CisJZG1fYmxvY2tfdCBibG9jayA9IGdldF9iaW9fYmxvY2sodGMsIGJpbyk7CisKKwlidWlsZF92aXJ0dWFsX2tleSh0Yy0+dGQsIGJsb2NrLCAma2V5KTsKKwlpZiAoYmlvX2RldGFpbih0Yy0+cG9vbCwgJmtleSwgYmlvLCAmY2VsbCkpCisJCXJldHVybjsKKworCXByb2Nlc3NfZGlzY2FyZF9jZWxsKHRjLCBjZWxsKTsKK30KKwogc3RhdGljIHZvaWQgYnJlYWtfc2hhcmluZyhzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpbyAqYmlvLCBkbV9ibG9ja190IGJsb2NrLAogCQkJICBzdHJ1Y3QgZG1fY2VsbF9rZXkgKmtleSwKIAkJCSAgc3RydWN0IGRtX3RoaW5fbG9va3VwX3Jlc3VsdCAqbG9va3VwX3Jlc3VsdCwKQEAgLTEyNTUsMTEgKzEzOTgsNTMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9fcmVtYXBfYW5kX2lzc3VlX3NoYXJlZF9jZWxsKHZvaWQgKmNvbnRleHQsCisJCQkJCSAgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKK3sKKwlzdHJ1Y3QgcmVtYXBfaW5mbyAqaW5mbyA9IGNvbnRleHQ7CisJc3RydWN0IGJpbyAqYmlvOworCisJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmNlbGwtPmJpb3MpKSkgeworCQlpZiAoKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB8fAorCQkgICAgKGJpby0+YmlfcncgJiAoUkVRX0RJU0NBUkQgfCBSRVFfRkxVU0ggfCBSRVFfRlVBKSkpCisJCQliaW9fbGlzdF9hZGQoJmluZm8tPmRlZmVyX2Jpb3MsIGJpbyk7CisJCWVsc2UgeworCQkJc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vayAqaCA9IGRtX3Blcl9iaW9fZGF0YShiaW8sIHNpemVvZihzdHJ1Y3QgZG1fdGhpbl9lbmRpb19ob29rKSk7OworCisJCQloLT5zaGFyZWRfcmVhZF9lbnRyeSA9IGRtX2RlZmVycmVkX2VudHJ5X2luYyhpbmZvLT50Yy0+cG9vbC0+c2hhcmVkX3JlYWRfZHMpOworCQkJaW5jX2FsbF9pb19lbnRyeShpbmZvLT50Yy0+cG9vbCwgYmlvKTsKKwkJCWJpb19saXN0X2FkZCgmaW5mby0+aXNzdWVfYmlvcywgYmlvKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcmVtYXBfYW5kX2lzc3VlX3NoYXJlZF9jZWxsKHN0cnVjdCB0aGluX2MgKnRjLAorCQkJCQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsLAorCQkJCQlkbV9ibG9ja190IGJsb2NrKQoreworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgcmVtYXBfaW5mbyBpbmZvOworCisJaW5mby50YyA9IHRjOworCWJpb19saXN0X2luaXQoJmluZm8uZGVmZXJfYmlvcyk7CisJYmlvX2xpc3RfaW5pdCgmaW5mby5pc3N1ZV9iaW9zKTsKKworCWNlbGxfdmlzaXRfcmVsZWFzZSh0Yy0+cG9vbCwgX19yZW1hcF9hbmRfaXNzdWVfc2hhcmVkX2NlbGwsCisJCQkgICAmaW5mbywgY2VsbCk7CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmaW5mby5kZWZlcl9iaW9zKSkpCisJCXRoaW5fZGVmZXJfYmlvKHRjLCBiaW8pOworCisJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmluZm8uaXNzdWVfYmlvcykpKQorCQlyZW1hcF9hbmRfaXNzdWUodGMsIGJpbywgYmxvY2spOworfQorCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3NoYXJlZF9iaW8oc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbywKIAkJCSAgICAgICBkbV9ibG9ja190IGJsb2NrLAotCQkJICAgICAgIHN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgKmxvb2t1cF9yZXN1bHQpCisJCQkgICAgICAgc3RydWN0IGRtX3RoaW5fbG9va3VwX3Jlc3VsdCAqbG9va3VwX3Jlc3VsdCwKKwkJCSAgICAgICBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICp2aXJ0X2NlbGwpCiB7Ci0Jc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbDsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpkYXRhX2NlbGw7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKIAlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5OwogCkBAIC0xMjY4LDE5ICsxNDUzLDIzIEBACiAJICogb2YgYmVpbmcgYnJva2VuIHNvIHdlIGhhdmUgbm90aGluZyBmdXJ0aGVyIHRvIGRvIGhlcmUuCiAJICovCiAJYnVpbGRfZGF0YV9rZXkodGMtPnRkLCBsb29rdXBfcmVzdWx0LT5ibG9jaywgJmtleSk7Ci0JaWYgKGJpb19kZXRhaW4ocG9vbCwgJmtleSwgYmlvLCAmY2VsbCkpCisJaWYgKGJpb19kZXRhaW4ocG9vbCwgJmtleSwgYmlvLCAmZGF0YV9jZWxsKSkgeworCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgdmlydF9jZWxsKTsKIAkJcmV0dXJuOworCX0KIAotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSAmJiBiaW8tPmJpX2l0ZXIuYmlfc2l6ZSkKLQkJYnJlYWtfc2hhcmluZyh0YywgYmlvLCBibG9jaywgJmtleSwgbG9va3VwX3Jlc3VsdCwgY2VsbCk7Ci0JZWxzZSB7CisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFICYmIGJpby0+YmlfaXRlci5iaV9zaXplKSB7CisJCWJyZWFrX3NoYXJpbmcodGMsIGJpbywgYmxvY2ssICZrZXksIGxvb2t1cF9yZXN1bHQsIGRhdGFfY2VsbCk7CisJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCB2aXJ0X2NlbGwpOworCX0gZWxzZSB7CiAJCXN0cnVjdCBkbV90aGluX2VuZGlvX2hvb2sgKmggPSBkbV9wZXJfYmlvX2RhdGEoYmlvLCBzaXplb2Yoc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vaykpOwogCiAJCWgtPnNoYXJlZF9yZWFkX2VudHJ5ID0gZG1fZGVmZXJyZWRfZW50cnlfaW5jKHBvb2wtPnNoYXJlZF9yZWFkX2RzKTsKIAkJaW5jX2FsbF9pb19lbnRyeShwb29sLCBiaW8pOwotCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7Ci0KIAkJcmVtYXBfYW5kX2lzc3VlKHRjLCBiaW8sIGxvb2t1cF9yZXN1bHQtPmJsb2NrKTsKKworCQlyZW1hcF9hbmRfaXNzdWVfc2hhcmVkX2NlbGwodGMsIGRhdGFfY2VsbCwgbG9va3VwX3Jlc3VsdC0+YmxvY2spOworCQlyZW1hcF9hbmRfaXNzdWVfc2hhcmVkX2NlbGwodGMsIHZpcnRfY2VsbCwgbG9va3VwX3Jlc3VsdC0+YmxvY2spOwogCX0KIH0KIApAQCAtMTMzMywzNCArMTUyMiwyOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcHJvY2Vzc19iaW8oc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY2VsbChzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbCkKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHRjLT5wb29sOworCXN0cnVjdCBiaW8gKmJpbyA9IGNlbGwtPmhvbGRlcjsKIAlkbV9ibG9ja190IGJsb2NrID0gZ2V0X2Jpb19ibG9jayh0YywgYmlvKTsKLQlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsOwotCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CiAJc3RydWN0IGRtX3RoaW5fbG9va3VwX3Jlc3VsdCBsb29rdXBfcmVzdWx0OwogCi0JLyoKLQkgKiBJZiBjZWxsIGlzIGFscmVhZHkgb2NjdXBpZWQsIHRoZW4gdGhlIGJsb2NrIGlzIGFscmVhZHkKLQkgKiBiZWluZyBwcm92aXNpb25lZCBzbyB3ZSBoYXZlIG5vdGhpbmcgZnVydGhlciB0byBkbyBoZXJlLgotCSAqLwotCWJ1aWxkX3ZpcnR1YWxfa2V5KHRjLT50ZCwgYmxvY2ssICZrZXkpOwotCWlmIChiaW9fZGV0YWluKHBvb2wsICZrZXksIGJpbywgJmNlbGwpKQorCWlmICh0Yy0+cmVxdWV1ZV9tb2RlKSB7CisJCWNlbGxfcmVxdWV1ZShwb29sLCBjZWxsKTsKIAkJcmV0dXJuOworCX0KIAogCXIgPSBkbV90aGluX2ZpbmRfYmxvY2sodGMtPnRkLCBibG9jaywgMSwgJmxvb2t1cF9yZXN1bHQpOwogCXN3aXRjaCAocikgewogCWNhc2UgMDoKLQkJaWYgKGxvb2t1cF9yZXN1bHQuc2hhcmVkKSB7Ci0JCQlwcm9jZXNzX3NoYXJlZF9iaW8odGMsIGJpbywgYmxvY2ssICZsb29rdXBfcmVzdWx0KTsKLQkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBjZWxsKTsgLyogRklYTUU6IHBhc3MgdGhpcyBjZWxsIGludG8gcHJvY2Vzc19zaGFyZWQ/ICovCi0JCX0gZWxzZSB7CisJCWlmIChsb29rdXBfcmVzdWx0LnNoYXJlZCkKKwkJCXByb2Nlc3Nfc2hhcmVkX2Jpbyh0YywgYmlvLCBibG9jaywgJmxvb2t1cF9yZXN1bHQsIGNlbGwpOworCQllbHNlIHsKIAkJCWluY19hbGxfaW9fZW50cnkocG9vbCwgYmlvKTsKLQkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBjZWxsKTsKLQogCQkJcmVtYXBfYW5kX2lzc3VlKHRjLCBiaW8sIGxvb2t1cF9yZXN1bHQuYmxvY2spOworCQkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBjZWxsLCBsb29rdXBfcmVzdWx0LmJsb2NrKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTM5NCw3ICsxNTc3LDI2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBwcm9jZXNzX2Jpb19yZWFkX29ubHkoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYmlvKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKwlkbV9ibG9ja190IGJsb2NrID0gZ2V0X2Jpb19ibG9jayh0YywgYmlvKTsKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsOworCXN0cnVjdCBkbV9jZWxsX2tleSBrZXk7CisKKwkvKgorCSAqIElmIGNlbGwgaXMgYWxyZWFkeSBvY2N1cGllZCwgdGhlbiB0aGUgYmxvY2sgaXMgYWxyZWFkeQorCSAqIGJlaW5nIHByb3Zpc2lvbmVkIHNvIHdlIGhhdmUgbm90aGluZyBmdXJ0aGVyIHRvIGRvIGhlcmUuCisJICovCisJYnVpbGRfdmlydHVhbF9rZXkodGMtPnRkLCBibG9jaywgJmtleSk7CisJaWYgKGJpb19kZXRhaW4ocG9vbCwgJmtleSwgYmlvLCAmY2VsbCkpCisJCXJldHVybjsKKworCXByb2Nlc3NfY2VsbCh0YywgY2VsbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fcHJvY2Vzc19iaW9fcmVhZF9vbmx5KHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkJICAgIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCiB7CiAJaW50IHI7CiAJaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7CkBAIC0xNDA0LDE1ICsxNjA2LDIxIEBACiAJciA9IGRtX3RoaW5fZmluZF9ibG9jayh0Yy0+dGQsIGJsb2NrLCAxLCAmbG9va3VwX3Jlc3VsdCk7CiAJc3dpdGNoIChyKSB7CiAJY2FzZSAwOgotCQlpZiAobG9va3VwX3Jlc3VsdC5zaGFyZWQgJiYgKHJ3ID09IFdSSVRFKSAmJiBiaW8tPmJpX2l0ZXIuYmlfc2l6ZSkKKwkJaWYgKGxvb2t1cF9yZXN1bHQuc2hhcmVkICYmIChydyA9PSBXUklURSkgJiYgYmlvLT5iaV9pdGVyLmJpX3NpemUpIHsKIAkJCWhhbmRsZV91bnNlcnZpY2VhYmxlX2Jpbyh0Yy0+cG9vbCwgYmlvKTsKLQkJZWxzZSB7CisJCQlpZiAoY2VsbCkKKwkJCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7CisJCX0gZWxzZSB7CiAJCQlpbmNfYWxsX2lvX2VudHJ5KHRjLT5wb29sLCBiaW8pOwogCQkJcmVtYXBfYW5kX2lzc3VlKHRjLCBiaW8sIGxvb2t1cF9yZXN1bHQuYmxvY2spOworCQkJaWYgKGNlbGwpCisJCQkJaW5jX3JlbWFwX2FuZF9pc3N1ZV9jZWxsKHRjLCBjZWxsLCBsb29rdXBfcmVzdWx0LmJsb2NrKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgLUVOT0RBVEE6CisJCWlmIChjZWxsKQorCQkJY2VsbF9kZWZlcl9ub19ob2xkZXIodGMsIGNlbGwpOwogCQlpZiAocncgIT0gUkVBRCkgewogCQkJaGFuZGxlX3Vuc2VydmljZWFibGVfYmlvKHRjLT5wb29sLCBiaW8pOwogCQkJYnJlYWs7CkBAIC0xNDMxLDExICsxNjM5LDIzIEBACiAJZGVmYXVsdDoKIAkJRE1FUlJfTElNSVQoIiVzOiBkbV90aGluX2ZpbmRfYmxvY2soKSBmYWlsZWQ6IGVycm9yID0gJWQiLAogCQkJICAgIF9fZnVuY19fLCByKTsKKwkJaWYgKGNlbGwpCisJCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgY2VsbCk7CiAJCWJpb19pb19lcnJvcihiaW8pOwogCQlicmVhazsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYmlvX3JlYWRfb25seShzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpbyAqYmlvKQoreworCV9fcHJvY2Vzc19iaW9fcmVhZF9vbmx5KHRjLCBiaW8sIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NlbGxfcmVhZF9vbmx5KHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCV9fcHJvY2Vzc19iaW9fcmVhZF9vbmx5KHRjLCBjZWxsLT5ob2xkZXIsIGNlbGwpOworfQorCiBzdGF0aWMgdm9pZCBwcm9jZXNzX2Jpb19zdWNjZXNzKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJYmlvX2VuZGlvKGJpbywgMCk7CkBAIC0xNDQ2LDYgKzE2NjYsMTYgQEAKIAliaW9faW9fZXJyb3IoYmlvKTsKIH0KIAorc3RhdGljIHZvaWQgcHJvY2Vzc19jZWxsX3N1Y2Nlc3Moc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJY2VsbF9zdWNjZXNzKHRjLT5wb29sLCBjZWxsKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19jZWxsX2ZhaWwoc3RydWN0IHRoaW5fYyAqdGMsIHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwpCit7CisJY2VsbF9lcnJvcih0Yy0+cG9vbCwgY2VsbCk7Cit9CisKIC8qCiAgKiBGSVhNRTogc2hvdWxkIHdlIGFsc28gY29tbWl0IGR1ZSB0byBzaXplIG9mIHRyYW5zYWN0aW9uLCBtZWFzdXJlZCBpbgogICogbWV0YWRhdGEgYmxvY2tzPwpAQCAtMTUyNyw5ICsxNzU3LDEwIEBACiAJc3RydWN0IGJpbyAqYmlvOwogCXN0cnVjdCBiaW9fbGlzdCBiaW9zOwogCXN0cnVjdCBibGtfcGx1ZyBwbHVnOworCXVuc2lnbmVkIGNvdW50ID0gMDsKIAogCWlmICh0Yy0+cmVxdWV1ZV9tb2RlKSB7Ci0JCXJlcXVldWVfYmlvX2xpc3QodGMsICZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOworCQllcnJvcl90aGluX2Jpb19saXN0KHRjLCAmdGMtPmRlZmVycmVkX2Jpb19saXN0LCBETV9FTkRJT19SRVFVRVVFKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTU2OCwxMCArMTc5OSw5NyBAQAogCQkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkKHRjLCBiaW8pOwogCQllbHNlCiAJCQlwb29sLT5wcm9jZXNzX2Jpbyh0YywgYmlvKTsKKworCQlpZiAoKGNvdW50KysgJiAxMjcpID09IDApIHsKKwkJCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CisJCQlkbV9wb29sX2lzc3VlX3ByZWZldGNoZXMocG9vbC0+cG1kKTsKKwkJfQogCX0KIAlibGtfZmluaXNoX3BsdWcoJnBsdWcpOwogfQogCitzdGF0aWMgaW50IGNtcF9jZWxscyhjb25zdCB2b2lkICpsaHMsIGNvbnN0IHZvaWQgKnJocykKK3sKKwlzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpsaHNfY2VsbCA9ICooKHN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKiopIGxocyk7CisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqcmhzX2NlbGwgPSAqKChzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICoqKSByaHMpOworCisJQlVHX09OKCFsaHNfY2VsbC0+aG9sZGVyKTsKKwlCVUdfT04oIXJoc19jZWxsLT5ob2xkZXIpOworCisJaWYgKGxoc19jZWxsLT5ob2xkZXItPmJpX2l0ZXIuYmlfc2VjdG9yIDwgcmhzX2NlbGwtPmhvbGRlci0+YmlfaXRlci5iaV9zZWN0b3IpCisJCXJldHVybiAtMTsKKworCWlmIChsaHNfY2VsbC0+aG9sZGVyLT5iaV9pdGVyLmJpX3NlY3RvciA+IHJoc19jZWxsLT5ob2xkZXItPmJpX2l0ZXIuYmlfc2VjdG9yKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgc29ydF9jZWxscyhzdHJ1Y3QgcG9vbCAqcG9vbCwgc3RydWN0IGxpc3RfaGVhZCAqY2VsbHMpCit7CisJdW5zaWduZWQgY291bnQgPSAwOworCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGwsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2VsbCwgdG1wLCBjZWxscywgdXNlcl9saXN0KSB7CisJCWlmIChjb3VudCA+PSBDRUxMX1NPUlRfQVJSQVlfU0laRSkKKwkJCWJyZWFrOworCisJCXBvb2wtPmNlbGxfc29ydF9hcnJheVtjb3VudCsrXSA9IGNlbGw7CisJCWxpc3RfZGVsKCZjZWxsLT51c2VyX2xpc3QpOworCX0KKworCXNvcnQocG9vbC0+Y2VsbF9zb3J0X2FycmF5LCBjb3VudCwgc2l6ZW9mKGNlbGwpLCBjbXBfY2VsbHMsIE5VTEwpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3RoaW5fZGVmZXJyZWRfY2VsbHMoc3RydWN0IHRoaW5fYyAqdGMpCit7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgY2VsbHM7CisJc3RydWN0IGRtX2Jpb19wcmlzb25fY2VsbCAqY2VsbDsKKwl1bnNpZ25lZCBpLCBqLCBjb3VudDsKKworCUlOSVRfTElTVF9IRUFEKCZjZWxscyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV9pbml0KCZ0Yy0+ZGVmZXJyZWRfY2VsbHMsICZjZWxscyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChsaXN0X2VtcHR5KCZjZWxscykpCisJCXJldHVybjsKKworCWRvIHsKKwkJY291bnQgPSBzb3J0X2NlbGxzKHRjLT5wb29sLCAmY2VsbHMpOworCisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQljZWxsID0gcG9vbC0+Y2VsbF9zb3J0X2FycmF5W2ldOworCQkJQlVHX09OKCFjZWxsLT5ob2xkZXIpOworCisJCQkvKgorCQkJICogSWYgd2UndmUgZ290IG5vIGZyZWUgbmV3X21hcHBpbmcgc3RydWN0cywgYW5kIHByb2Nlc3NpbmcKKwkJCSAqIHRoaXMgYmlvIG1pZ2h0IHJlcXVpcmUgb25lLCB3ZSBwYXVzZSB1bnRpbCB0aGVyZSBhcmUgc29tZQorCQkJICogcHJlcGFyZWQgbWFwcGluZ3MgdG8gcHJvY2Vzcy4KKwkJCSAqLworCQkJaWYgKGVuc3VyZV9uZXh0X21hcHBpbmcocG9vbCkpIHsKKwkJCQlmb3IgKGogPSBpOyBqIDwgY291bnQ7IGorKykKKwkJCQkJbGlzdF9hZGQoJnBvb2wtPmNlbGxfc29ydF9hcnJheVtqXS0+dXNlcl9saXN0LCAmY2VsbHMpOworCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRjLT5sb2NrLCBmbGFncyk7CisJCQkJbGlzdF9zcGxpY2UoJmNlbGxzLCAmdGMtPmRlZmVycmVkX2NlbGxzKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+bG9jaywgZmxhZ3MpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKGNlbGwtPmhvbGRlci0+YmlfcncgJiBSRVFfRElTQ0FSRCkKKwkJCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmRfY2VsbCh0YywgY2VsbCk7CisJCQllbHNlCisJCQkJcG9vbC0+cHJvY2Vzc19jZWxsKHRjLCBjZWxsKTsKKwkJfQorCX0gd2hpbGUgKCFsaXN0X2VtcHR5KCZjZWxscykpOworfQorCiBzdGF0aWMgdm9pZCB0aGluX2dldChzdHJ1Y3QgdGhpbl9jICp0Yyk7CiBzdGF0aWMgdm9pZCB0aGluX3B1dChzdHJ1Y3QgdGhpbl9jICp0Yyk7CiAKQEAgLTE2MjAsNiArMTkzOCw3IEBACiAKIAl0YyA9IGdldF9maXJzdF90aGluKHBvb2wpOwogCXdoaWxlICh0YykgeworCQlwcm9jZXNzX3RoaW5fZGVmZXJyZWRfY2VsbHModGMpOwogCQlwcm9jZXNzX3RoaW5fZGVmZXJyZWRfYmlvcyh0Yyk7CiAJCXRjID0gZ2V0X25leHRfdGhpbihwb29sLCB0Yyk7CiAJfQpAQCAtMTY1Myw5ICsxOTcyLDE1IEBACiB7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCBwb29sLCB3b3JrZXIpOwogCisJdGhyb3R0bGVfd29ya19zdGFydCgmcG9vbC0+dGhyb3R0bGUpOworCWRtX3Bvb2xfaXNzdWVfcHJlZmV0Y2hlcyhwb29sLT5wbWQpOworCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CiAJcHJvY2Vzc19wcmVwYXJlZChwb29sLCAmcG9vbC0+cHJlcGFyZWRfbWFwcGluZ3MsICZwb29sLT5wcm9jZXNzX3ByZXBhcmVkX21hcHBpbmcpOworCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CiAJcHJvY2Vzc19wcmVwYXJlZChwb29sLCAmcG9vbC0+cHJlcGFyZWRfZGlzY2FyZHMsICZwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQpOworCXRocm90dGxlX3dvcmtfdXBkYXRlKCZwb29sLT50aHJvdHRsZSk7CiAJcHJvY2Vzc19kZWZlcnJlZF9iaW9zKHBvb2wpOworCXRocm90dGxlX3dvcmtfY29tcGxldGUoJnBvb2wtPnRocm90dGxlKTsKIH0KIAogLyoKQEAgLTE3OTIsNiArMjExNyw4IEBACiAJCWRtX3Bvb2xfbWV0YWRhdGFfcmVhZF9vbmx5KHBvb2wtPnBtZCk7CiAJCXBvb2wtPnByb2Nlc3NfYmlvID0gcHJvY2Vzc19iaW9fZmFpbDsKIAkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkID0gcHJvY2Vzc19iaW9fZmFpbDsKKwkJcG9vbC0+cHJvY2Vzc19jZWxsID0gcHJvY2Vzc19jZWxsX2ZhaWw7CisJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZF9jZWxsID0gcHJvY2Vzc19jZWxsX2ZhaWw7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZyA9IHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZ19mYWlsOwogCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQgPSBwcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmRfZmFpbDsKIApAQCAtMTgwNCw2ICsyMTMxLDggQEAKIAkJZG1fcG9vbF9tZXRhZGF0YV9yZWFkX29ubHkocG9vbC0+cG1kKTsKIAkJcG9vbC0+cHJvY2Vzc19iaW8gPSBwcm9jZXNzX2Jpb19yZWFkX29ubHk7CiAJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZCA9IHByb2Nlc3NfYmlvX3N1Y2Nlc3M7CisJCXBvb2wtPnByb2Nlc3NfY2VsbCA9IHByb2Nlc3NfY2VsbF9yZWFkX29ubHk7CisJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZF9jZWxsID0gcHJvY2Vzc19jZWxsX3N1Y2Nlc3M7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZyA9IHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZ19mYWlsOwogCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmQgPSBwcm9jZXNzX3ByZXBhcmVkX2Rpc2NhcmRfcGFzc2Rvd247CiAKQEAgLTE4MjIsNyArMjE1MSw5IEBACiAJCWlmIChvbGRfbW9kZSAhPSBuZXdfbW9kZSkKIAkJCW5vdGlmeV9vZl9wb29sX21vZGVfY2hhbmdlKHBvb2wsICJvdXQtb2YtZGF0YS1zcGFjZSIpOwogCQlwb29sLT5wcm9jZXNzX2JpbyA9IHByb2Nlc3NfYmlvX3JlYWRfb25seTsKLQkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkID0gcHJvY2Vzc19kaXNjYXJkOworCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmQgPSBwcm9jZXNzX2Rpc2NhcmRfYmlvOworCQlwb29sLT5wcm9jZXNzX2NlbGwgPSBwcm9jZXNzX2NlbGxfcmVhZF9vbmx5OworCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmRfY2VsbCA9IHByb2Nlc3NfZGlzY2FyZF9jZWxsOwogCQlwb29sLT5wcm9jZXNzX3ByZXBhcmVkX21hcHBpbmcgPSBwcm9jZXNzX3ByZXBhcmVkX21hcHBpbmc7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfZGlzY2FyZCA9IHByb2Nlc3NfcHJlcGFyZWRfZGlzY2FyZF9wYXNzZG93bjsKIApAQCAtMTgzNSw3ICsyMTY2LDkgQEAKIAkJCW5vdGlmeV9vZl9wb29sX21vZGVfY2hhbmdlKHBvb2wsICJ3cml0ZSIpOwogCQlkbV9wb29sX21ldGFkYXRhX3JlYWRfd3JpdGUocG9vbC0+cG1kKTsKIAkJcG9vbC0+cHJvY2Vzc19iaW8gPSBwcm9jZXNzX2JpbzsKLQkJcG9vbC0+cHJvY2Vzc19kaXNjYXJkID0gcHJvY2Vzc19kaXNjYXJkOworCQlwb29sLT5wcm9jZXNzX2Rpc2NhcmQgPSBwcm9jZXNzX2Rpc2NhcmRfYmlvOworCQlwb29sLT5wcm9jZXNzX2NlbGwgPSBwcm9jZXNzX2NlbGw7CisJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZF9jZWxsID0gcHJvY2Vzc19kaXNjYXJkX2NlbGw7CiAJCXBvb2wtPnByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZyA9IHByb2Nlc3NfcHJlcGFyZWRfbWFwcGluZzsKIAkJcG9vbC0+cHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkID0gcHJvY2Vzc19wcmVwYXJlZF9kaXNjYXJkOwogCQlicmVhazsKQEAgLTE4OTUsNiArMjIyOCwyOSBAQAogCXdha2Vfd29ya2VyKHBvb2wpOwogfQogCitzdGF0aWMgdm9pZCB0aGluX2RlZmVyX2Jpb193aXRoX3Rocm90dGxlKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKworCXRocm90dGxlX2xvY2soJnBvb2wtPnRocm90dGxlKTsKKwl0aGluX2RlZmVyX2Jpbyh0YywgYmlvKTsKKwl0aHJvdHRsZV91bmxvY2soJnBvb2wtPnRocm90dGxlKTsKK30KKworc3RhdGljIHZvaWQgdGhpbl9kZWZlcl9jZWxsKHN0cnVjdCB0aGluX2MgKnRjLCBzdHJ1Y3QgZG1fYmlvX3ByaXNvbl9jZWxsICpjZWxsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBvb2wgKnBvb2wgPSB0Yy0+cG9vbDsKKworCXRocm90dGxlX2xvY2soJnBvb2wtPnRocm90dGxlKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjZWxsLT51c2VyX2xpc3QsICZ0Yy0+ZGVmZXJyZWRfY2VsbHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5sb2NrLCBmbGFncyk7CisJdGhyb3R0bGVfdW5sb2NrKCZwb29sLT50aHJvdHRsZSk7CisKKwl3YWtlX3dvcmtlcihwb29sKTsKK30KKwogc3RhdGljIHZvaWQgdGhpbl9ob29rX2JpbyhzdHJ1Y3QgdGhpbl9jICp0Yywgc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBkbV90aGluX2VuZGlvX2hvb2sgKmggPSBkbV9wZXJfYmlvX2RhdGEoYmlvLCBzaXplb2Yoc3RydWN0IGRtX3RoaW5fZW5kaW9faG9vaykpOwpAQCAtMTkxNSw4ICsyMjcxLDcgQEAKIAlkbV9ibG9ja190IGJsb2NrID0gZ2V0X2Jpb19ibG9jayh0YywgYmlvKTsKIAlzdHJ1Y3QgZG1fdGhpbl9kZXZpY2UgKnRkID0gdGMtPnRkOwogCXN0cnVjdCBkbV90aGluX2xvb2t1cF9yZXN1bHQgcmVzdWx0OwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgY2VsbDEsIGNlbGwyOwotCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKmNlbGxfcmVzdWx0OworCXN0cnVjdCBkbV9iaW9fcHJpc29uX2NlbGwgKnZpcnRfY2VsbCwgKmRhdGFfY2VsbDsKIAlzdHJ1Y3QgZG1fY2VsbF9rZXkga2V5OwogCiAJdGhpbl9ob29rX2Jpbyh0YywgYmlvKTsKQEAgLTE5MzIsNyArMjI4Nyw3IEBACiAJfQogCiAJaWYgKGJpby0+YmlfcncgJiAoUkVRX0RJU0NBUkQgfCBSRVFfRkxVU0ggfCBSRVFfRlVBKSkgewotCQl0aGluX2RlZmVyX2Jpbyh0YywgYmlvKTsKKwkJdGhpbl9kZWZlcl9iaW9fd2l0aF90aHJvdHRsZSh0YywgYmlvKTsKIAkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAl9CiAKQEAgLTE5NDEsNyArMjI5Niw3IEBACiAJICogdGhlcmUncyBhIHJhY2Ugd2l0aCBkaXNjYXJkLgogCSAqLwogCWJ1aWxkX3ZpcnR1YWxfa2V5KHRjLT50ZCwgYmxvY2ssICZrZXkpOwotCWlmIChkbV9iaW9fZGV0YWluKHRjLT5wb29sLT5wcmlzb24sICZrZXksIGJpbywgJmNlbGwxLCAmY2VsbF9yZXN1bHQpKQorCWlmIChiaW9fZGV0YWluKHRjLT5wb29sLCAma2V5LCBiaW8sICZ2aXJ0X2NlbGwpKQogCQlyZXR1cm4gRE1fTUFQSU9fU1VCTUlUVEVEOwogCiAJciA9IGRtX3RoaW5fZmluZF9ibG9jayh0ZCwgYmxvY2ssIDAsICZyZXN1bHQpOwpAQCAtMTk2NiwyMCArMjMyMSwxOSBAQAogCQkJICogTW9yZSBkaXN0YW50IGFuY2VzdG9ycyBhcmUgaXJyZWxldmFudC4gVGhlCiAJCQkgKiBzaGFyZWQgZmxhZyB3aWxsIGJlIHNldCBpbiB0aGVpciBjYXNlLgogCQkJICovCi0JCQl0aGluX2RlZmVyX2Jpbyh0YywgYmlvKTsKLQkJCWNlbGxfZGVmZXJfbm9faG9sZGVyX25vX2ZyZWUodGMsICZjZWxsMSk7CisJCQl0aGluX2RlZmVyX2NlbGwodGMsIHZpcnRfY2VsbCk7CiAJCQlyZXR1cm4gRE1fTUFQSU9fU1VCTUlUVEVEOwogCQl9CiAKIAkJYnVpbGRfZGF0YV9rZXkodGMtPnRkLCByZXN1bHQuYmxvY2ssICZrZXkpOwotCQlpZiAoZG1fYmlvX2RldGFpbih0Yy0+cG9vbC0+cHJpc29uLCAma2V5LCBiaW8sICZjZWxsMiwgJmNlbGxfcmVzdWx0KSkgewotCQkJY2VsbF9kZWZlcl9ub19ob2xkZXJfbm9fZnJlZSh0YywgJmNlbGwxKTsKKwkJaWYgKGJpb19kZXRhaW4odGMtPnBvb2wsICZrZXksIGJpbywgJmRhdGFfY2VsbCkpIHsKKwkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCB2aXJ0X2NlbGwpOwogCQkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAkJfQogCiAJCWluY19hbGxfaW9fZW50cnkodGMtPnBvb2wsIGJpbyk7Ci0JCWNlbGxfZGVmZXJfbm9faG9sZGVyX25vX2ZyZWUodGMsICZjZWxsMik7Ci0JCWNlbGxfZGVmZXJfbm9faG9sZGVyX25vX2ZyZWUodGMsICZjZWxsMSk7CisJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCBkYXRhX2NlbGwpOworCQljZWxsX2RlZmVyX25vX2hvbGRlcih0YywgdmlydF9jZWxsKTsKIAogCQlyZW1hcCh0YywgYmlvLCByZXN1bHQuYmxvY2spOwogCQlyZXR1cm4gRE1fTUFQSU9fUkVNQVBQRUQ7CkBAIC0xOTkxLDE4ICsyMzQ1LDEzIEBACiAJCQkgKiBvZiBkb2luZyBzby4KIAkJCSAqLwogCQkJaGFuZGxlX3Vuc2VydmljZWFibGVfYmlvKHRjLT5wb29sLCBiaW8pOwotCQkJY2VsbF9kZWZlcl9ub19ob2xkZXJfbm9fZnJlZSh0YywgJmNlbGwxKTsKKwkJCWNlbGxfZGVmZXJfbm9faG9sZGVyKHRjLCB2aXJ0X2NlbGwpOwogCQkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAkJfQogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAogCWNhc2UgLUVXT1VMREJMT0NLOgotCQkvKgotCQkgKiBJbiBmdXR1cmUsIHRoZSBmYWlsZWQgZG1fdGhpbl9maW5kX2Jsb2NrIGFib3ZlIGNvdWxkCi0JCSAqIHByb3ZpZGUgdGhlIGhpbnQgdG8gbG9hZCB0aGUgbWV0YWRhdGEgaW50byBjYWNoZS4KLQkJICovCi0JCXRoaW5fZGVmZXJfYmlvKHRjLCBiaW8pOwotCQljZWxsX2RlZmVyX25vX2hvbGRlcl9ub19mcmVlKHRjLCAmY2VsbDEpOworCQl0aGluX2RlZmVyX2NlbGwodGMsIHZpcnRfY2VsbCk7CiAJCXJldHVybiBETV9NQVBJT19TVUJNSVRURUQ7CiAKIAlkZWZhdWx0OgpAQCAtMjAxMiw3ICsyMzYxLDcgQEAKIAkJICogcG9vbCBpcyBzd2l0Y2hlZCB0byBmYWlsLWlvIG1vZGUuCiAJCSAqLwogCQliaW9faW9fZXJyb3IoYmlvKTsKLQkJY2VsbF9kZWZlcl9ub19ob2xkZXJfbm9fZnJlZSh0YywgJmNlbGwxKTsKKwkJY2VsbF9kZWZlcl9ub19ob2xkZXIodGMsIHZpcnRfY2VsbCk7CiAJCXJldHVybiBETV9NQVBJT19TVUJNSVRURUQ7CiAJfQogfQpAQCAtMjE5Myw3ICsyNTQyLDcgQEAKIAkJcG9vbC0+c2VjdG9yc19wZXJfYmxvY2tfc2hpZnQgPSBfX2ZmcyhibG9ja19zaXplKTsKIAlwb29sLT5sb3dfd2F0ZXJfYmxvY2tzID0gMDsKIAlwb29sX2ZlYXR1cmVzX2luaXQoJnBvb2wtPnBmKTsKLQlwb29sLT5wcmlzb24gPSBkbV9iaW9fcHJpc29uX2NyZWF0ZShQUklTT05fQ0VMTFMpOworCXBvb2wtPnByaXNvbiA9IGRtX2Jpb19wcmlzb25fY3JlYXRlKCk7CiAJaWYgKCFwb29sLT5wcmlzb24pIHsKIAkJKmVycm9yID0gIkVycm9yIGNyZWF0aW5nIHBvb2wncyBiaW8gcHJpc29uIjsKIAkJZXJyX3AgPSBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMjIxOSw2ICsyNTY4LDcgQEAKIAkJZ290byBiYWRfd3E7CiAJfQogCisJdGhyb3R0bGVfaW5pdCgmcG9vbC0+dGhyb3R0bGUpOwogCUlOSVRfV09SSygmcG9vbC0+d29ya2VyLCBkb193b3JrZXIpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwb29sLT53YWtlciwgZG9fd2FrZXIpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwb29sLT5ub19zcGFjZV90aW1lb3V0LCBkb19ub19zcGFjZV90aW1lb3V0KTsKQEAgLTIyMjgsNiArMjU3OCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPnByZXBhcmVkX2Rpc2NhcmRzKTsKIAlJTklUX0xJU1RfSEVBRCgmcG9vbC0+YWN0aXZlX3RoaW5zKTsKIAlwb29sLT5sb3dfd2F0ZXJfdHJpZ2dlcmVkID0gZmFsc2U7CisJcG9vbC0+c3VzcGVuZGVkID0gdHJ1ZTsKIAogCXBvb2wtPnNoYXJlZF9yZWFkX2RzID0gZG1fZGVmZXJyZWRfc2V0X2NyZWF0ZSgpOwogCWlmICghcG9vbC0+c2hhcmVkX3JlYWRfZHMpIHsKQEAgLTI3NjQsMjAgKzMxMTUsNzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcG9vbF9zdXNwZW5kX2FjdGl2ZV90aGlucyhzdHJ1Y3QgcG9vbCAqcG9vbCkKK3sKKwlzdHJ1Y3QgdGhpbl9jICp0YzsKKworCS8qIFN1c3BlbmQgYWxsIGFjdGl2ZSB0aGluIGRldmljZXMgKi8KKwl0YyA9IGdldF9maXJzdF90aGluKHBvb2wpOworCXdoaWxlICh0YykgeworCQlkbV9pbnRlcm5hbF9zdXNwZW5kX25vZmx1c2godGMtPnRoaW5fbWQpOworCQl0YyA9IGdldF9uZXh0X3RoaW4ocG9vbCwgdGMpOworCX0KK30KKworc3RhdGljIHZvaWQgcG9vbF9yZXN1bWVfYWN0aXZlX3RoaW5zKHN0cnVjdCBwb29sICpwb29sKQoreworCXN0cnVjdCB0aGluX2MgKnRjOworCisJLyogUmVzdW1lIGFsbCBhY3RpdmUgdGhpbiBkZXZpY2VzICovCisJdGMgPSBnZXRfZmlyc3RfdGhpbihwb29sKTsKKwl3aGlsZSAodGMpIHsKKwkJZG1faW50ZXJuYWxfcmVzdW1lKHRjLT50aGluX21kKTsKKwkJdGMgPSBnZXRfbmV4dF90aGluKHBvb2wsIHRjKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHBvb2xfcmVzdW1lKHN0cnVjdCBkbV90YXJnZXQgKnRpKQogewogCXN0cnVjdCBwb29sX2MgKnB0ID0gdGktPnByaXZhdGU7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSBwdC0+cG9vbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJLyoKKwkgKiBNdXN0IHJlcXVldWUgYWN0aXZlX3RoaW5zJyBiaW9zIGFuZCB0aGVuIHJlc3VtZQorCSAqIGFjdGl2ZV90aGlucyBfYmVmb3JlXyBjbGVhcmluZyAnc3VzcGVuZCcgZmxhZy4KKwkgKi8KKwlyZXF1ZXVlX2Jpb3MocG9vbCk7CisJcG9vbF9yZXN1bWVfYWN0aXZlX3RoaW5zKHBvb2wpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKIAlwb29sLT5sb3dfd2F0ZXJfdHJpZ2dlcmVkID0gZmFsc2U7CisJcG9vbC0+c3VzcGVuZGVkID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bG9jaywgZmxhZ3MpOwotCXJlcXVldWVfYmlvcyhwb29sKTsKIAogCWRvX3dha2VyKCZwb29sLT53YWtlci53b3JrKTsKIH0KIAorc3RhdGljIHZvaWQgcG9vbF9wcmVzdXNwZW5kKHN0cnVjdCBkbV90YXJnZXQgKnRpKQoreworCXN0cnVjdCBwb29sX2MgKnB0ID0gdGktPnByaXZhdGU7CisJc3RydWN0IHBvb2wgKnBvb2wgPSBwdC0+cG9vbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKKwlwb29sLT5zdXNwZW5kZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKKworCXBvb2xfc3VzcGVuZF9hY3RpdmVfdGhpbnMocG9vbCk7Cit9CisKK3N0YXRpYyB2b2lkIHBvb2xfcHJlc3VzcGVuZF91bmRvKHN0cnVjdCBkbV90YXJnZXQgKnRpKQoreworCXN0cnVjdCBwb29sX2MgKnB0ID0gdGktPnByaXZhdGU7CisJc3RydWN0IHBvb2wgKnBvb2wgPSBwdC0+cG9vbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcG9vbF9yZXN1bWVfYWN0aXZlX3RoaW5zKHBvb2wpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKKwlwb29sLT5zdXNwZW5kZWQgPSBmYWxzZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIHBvb2xfcG9zdHN1c3BlbmQoc3RydWN0IGRtX3RhcmdldCAqdGkpCiB7CiAJc3RydWN0IHBvb2xfYyAqcHQgPSB0aS0+cHJpdmF0ZTsKQEAgLTI5NDksNyArMzM1Nyw2IEBACiAgKiAgIGNyZWF0ZV90aGluCTxkZXZfaWQ+CiAgKiAgIGNyZWF0ZV9zbmFwCTxkZXZfaWQ+IDxvcmlnaW5faWQ+CiAgKiAgIGRlbGV0ZQkJPGRldl9pZD4KLSAqICAgdHJpbQkJPGRldl9pZD4gPG5ld19zaXplX2luX3NlY3RvcnM+CiAgKiAgIHNldF90cmFuc2FjdGlvbl9pZCA8Y3VycmVudF90cmFuc19pZD4gPG5ld190cmFuc19pZD4KICAqICAgcmVzZXJ2ZV9tZXRhZGF0YV9zbmFwCiAgKiAgIHJlbGVhc2VfbWV0YWRhdGFfc25hcApAQCAtMzE3NywxNSArMzU4NCwzNSBAQAogewogCXN0cnVjdCBwb29sX2MgKnB0ID0gdGktPnByaXZhdGU7CiAJc3RydWN0IHBvb2wgKnBvb2wgPSBwdC0+cG9vbDsKLQl1aW50NjRfdCBpb19vcHRfc2VjdG9ycyA9IGxpbWl0cy0+aW9fb3B0ID4+IFNFQ1RPUl9TSElGVDsKKwlzZWN0b3JfdCBpb19vcHRfc2VjdG9ycyA9IGxpbWl0cy0+aW9fb3B0ID4+IFNFQ1RPUl9TSElGVDsKKworCS8qCisJICogSWYgbWF4X3NlY3RvcnMgaXMgc21hbGxlciB0aGFuIHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrIGFkanVzdCBpdAorCSAqIHRvIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHBvd2VyLW9mLTIgZmFjdG9yIG9mIHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrLgorCSAqIFRoaXMgaXMgZXNwZWNpYWxseSBiZW5lZmljaWFsIHdoZW4gdGhlIHBvb2wncyBkYXRhIGRldmljZSBpcyBhIFJBSUQKKwkgKiBkZXZpY2UgdGhhdCBoYXMgYSBmdWxsIHN0cmlwZSB3aWR0aCB0aGF0IG1hdGNoZXMgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2sKKwkgKiAtLSBiZWNhdXNlIGV2ZW4gdGhvdWdoIHBhcnRpYWwgUkFJRCBzdHJpcGUtc2l6ZWQgSU9zIHdpbGwgYmUgaXNzdWVkIHRvIGEKKwkgKiAgICBzaW5nbGUgUkFJRCBzdHJpcGU7IHdoZW4gYWdncmVnYXRlZCB0aGV5IHdpbGwgZW5kIG9uIGEgZnVsbCBSQUlEIHN0cmlwZQorCSAqICAgIGJvdW5kYXJ5Li4gd2hpY2ggYXZvaWRzIGFkZGl0aW9uYWwgcGFydGlhbCBSQUlEIHN0cmlwZSB3cml0ZXMgY2FzY2FkaW5nCisJICovCisJaWYgKGxpbWl0cy0+bWF4X3NlY3RvcnMgPCBwb29sLT5zZWN0b3JzX3Blcl9ibG9jaykgeworCQl3aGlsZSAoIWlzX2ZhY3Rvcihwb29sLT5zZWN0b3JzX3Blcl9ibG9jaywgbGltaXRzLT5tYXhfc2VjdG9ycykpIHsKKwkJCWlmICgobGltaXRzLT5tYXhfc2VjdG9ycyAmIChsaW1pdHMtPm1heF9zZWN0b3JzIC0gMSkpID09IDApCisJCQkJbGltaXRzLT5tYXhfc2VjdG9ycy0tOworCQkJbGltaXRzLT5tYXhfc2VjdG9ycyA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKGxpbWl0cy0+bWF4X3NlY3RvcnMpOworCQl9CisJfQogCiAJLyoKIAkgKiBJZiB0aGUgc3lzdGVtLWRldGVybWluZWQgc3RhY2tlZCBsaW1pdHMgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUKIAkgKiBwb29sJ3MgYmxvY2tzaXplIChpb19vcHQgaXMgYSBmYWN0b3IpIGRvIG5vdCBvdmVycmlkZSB0aGVtLgogCSAqLwogCWlmIChpb19vcHRfc2VjdG9ycyA8IHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrIHx8Ci0JICAgIGRvX2Rpdihpb19vcHRfc2VjdG9ycywgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2spKSB7Ci0JCWJsa19saW1pdHNfaW9fbWluKGxpbWl0cywgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2sgPDwgU0VDVE9SX1NISUZUKTsKKwkgICAgIWlzX2ZhY3Rvcihpb19vcHRfc2VjdG9ycywgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2spKSB7CisJCWlmIChpc19mYWN0b3IocG9vbC0+c2VjdG9yc19wZXJfYmxvY2ssIGxpbWl0cy0+bWF4X3NlY3RvcnMpKQorCQkJYmxrX2xpbWl0c19pb19taW4obGltaXRzLCBsaW1pdHMtPm1heF9zZWN0b3JzIDw8IFNFQ1RPUl9TSElGVCk7CisJCWVsc2UKKwkJCWJsa19saW1pdHNfaW9fbWluKGxpbWl0cywgcG9vbC0+c2VjdG9yc19wZXJfYmxvY2sgPDwgU0VDVE9SX1NISUZUKTsKIAkJYmxrX2xpbWl0c19pb19vcHQobGltaXRzLCBwb29sLT5zZWN0b3JzX3Blcl9ibG9jayA8PCBTRUNUT1JfU0hJRlQpOwogCX0KIApAQCAtMzIxNCwxMSArMzY0MSwxMyBAQAogCS5uYW1lID0gInRoaW4tcG9vbCIsCiAJLmZlYXR1cmVzID0gRE1fVEFSR0VUX1NJTkdMRVRPTiB8IERNX1RBUkdFVF9BTFdBWVNfV1JJVEVBQkxFIHwKIAkJICAgIERNX1RBUkdFVF9JTU1VVEFCTEUsCi0JLnZlcnNpb24gPSB7MSwgMTMsIDB9LAorCS52ZXJzaW9uID0gezEsIDE0LCAwfSwKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiAJLmN0ciA9IHBvb2xfY3RyLAogCS5kdHIgPSBwb29sX2R0ciwKIAkubWFwID0gcG9vbF9tYXAsCisJLnByZXN1c3BlbmQgPSBwb29sX3ByZXN1c3BlbmQsCisJLnByZXN1c3BlbmRfdW5kbyA9IHBvb2xfcHJlc3VzcGVuZF91bmRvLAogCS5wb3N0c3VzcGVuZCA9IHBvb2xfcG9zdHN1c3BlbmQsCiAJLnByZXJlc3VtZSA9IHBvb2xfcHJlcmVzdW1lLAogCS5yZXN1bWUgPSBwb29sX3Jlc3VtZSwKQEAgLTMyNDgsMTQgKzM2NzcsMTQgQEAKIAlzdHJ1Y3QgdGhpbl9jICp0YyA9IHRpLT5wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQl0aGluX3B1dCh0Yyk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmdGMtPmNhbl9kZXN0cm95KTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZ0Yy0+cG9vbC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsX3JjdSgmdGMtPmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5wb29sLT5sb2NrLCBmbGFncyk7CiAJc3luY2hyb25pemVfcmN1KCk7CiAKKwl0aGluX3B1dCh0Yyk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmdGMtPmNhbl9kZXN0cm95KTsKKwogCW11dGV4X2xvY2soJmRtX3RoaW5fcG9vbF90YWJsZS5tdXRleCk7CiAKIAlfX3Bvb2xfZGVjKHRjLT5wb29sKTsKQEAgLTMzMDIsNyArMzczMSw5IEBACiAJCXIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQorCXRjLT50aGluX21kID0gZG1fdGFibGVfZ2V0X21kKHRpLT50YWJsZSk7CiAJc3Bpbl9sb2NrX2luaXQoJnRjLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdGMtPmRlZmVycmVkX2NlbGxzKTsKIAliaW9fbGlzdF9pbml0KCZ0Yy0+ZGVmZXJyZWRfYmlvX2xpc3QpOwogCWJpb19saXN0X2luaXQoJnRjLT5yZXRyeV9vbl9yZXN1bWVfbGlzdCk7CiAJdGMtPnNvcnRfYmlvX2xpc3QgPSBSQl9ST09UOwpAQCAtMzM0NywxOCArMzc3OCwxOCBAQAogCWlmIChnZXRfcG9vbF9tb2RlKHRjLT5wb29sKSA9PSBQTV9GQUlMKSB7CiAJCXRpLT5lcnJvciA9ICJDb3VsZG4ndCBvcGVuIHRoaW4gZGV2aWNlLCBQb29sIGlzIGluIGZhaWwgbW9kZSI7CiAJCXIgPSAtRUlOVkFMOwotCQlnb3RvIGJhZF90aGluX29wZW47CisJCWdvdG8gYmFkX3Bvb2w7CiAJfQogCiAJciA9IGRtX3Bvb2xfb3Blbl90aGluX2RldmljZSh0Yy0+cG9vbC0+cG1kLCB0Yy0+ZGV2X2lkLCAmdGMtPnRkKTsKIAlpZiAocikgewogCQl0aS0+ZXJyb3IgPSAiQ291bGRuJ3Qgb3BlbiB0aGluIGludGVybmFsIGRldmljZSI7Ci0JCWdvdG8gYmFkX3RoaW5fb3BlbjsKKwkJZ290byBiYWRfcG9vbDsKIAl9CiAKIAlyID0gZG1fc2V0X3RhcmdldF9tYXhfaW9fbGVuKHRpLCB0Yy0+cG9vbC0+c2VjdG9yc19wZXJfYmxvY2spOwogCWlmIChyKQotCQlnb3RvIGJhZF90YXJnZXRfbWF4X2lvX2xlbjsKKwkJZ290byBiYWQ7CiAKIAl0aS0+bnVtX2ZsdXNoX2Jpb3MgPSAxOwogCXRpLT5mbHVzaF9zdXBwb3J0ZWQgPSB0cnVlOwpAQCAtMzM3MywxNCArMzgwNCwxNiBAQAogCQl0aS0+c3BsaXRfZGlzY2FyZF9iaW9zID0gdHJ1ZTsKIAl9CiAKLQlkbV9wdXQocG9vbF9tZCk7Ci0KIAltdXRleF91bmxvY2soJmRtX3RoaW5fcG9vbF90YWJsZS5tdXRleCk7CiAKLQlhdG9taWNfc2V0KCZ0Yy0+cmVmY291bnQsIDEpOwotCWluaXRfY29tcGxldGlvbigmdGMtPmNhbl9kZXN0cm95KTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZ0Yy0+cG9vbC0+bG9jaywgZmxhZ3MpOworCWlmICh0Yy0+cG9vbC0+c3VzcGVuZGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjLT5wb29sLT5sb2NrLCBmbGFncyk7CisJCW11dGV4X2xvY2soJmRtX3RoaW5fcG9vbF90YWJsZS5tdXRleCk7IC8qIHJlYWNxdWlyZSBmb3IgX19wb29sX2RlYyAqLworCQl0aS0+ZXJyb3IgPSAiVW5hYmxlIHRvIGFjdGl2YXRlIHRoaW4gZGV2aWNlIHdoaWxlIHBvb2wgaXMgc3VzcGVuZGVkIjsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gYmFkOworCX0KIAlsaXN0X2FkZF90YWlsX3JjdSgmdGMtPmxpc3QsICZ0Yy0+cG9vbC0+YWN0aXZlX3RoaW5zKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Yy0+cG9vbC0+bG9jaywgZmxhZ3MpOwogCS8qCkBAIC0zMzkxLDExICszODI0LDE2IEBACiAJICovCiAJc3luY2hyb25pemVfcmN1KCk7CiAKKwlkbV9wdXQocG9vbF9tZCk7CisKKwlhdG9taWNfc2V0KCZ0Yy0+cmVmY291bnQsIDEpOworCWluaXRfY29tcGxldGlvbigmdGMtPmNhbl9kZXN0cm95KTsKKwogCXJldHVybiAwOwogCi1iYWRfdGFyZ2V0X21heF9pb19sZW46CitiYWQ6CiAJZG1fcG9vbF9jbG9zZV90aGluX2RldmljZSh0Yy0+dGQpOwotYmFkX3RoaW5fb3BlbjoKK2JhZF9wb29sOgogCV9fcG9vbF9kZWModGMtPnBvb2wpOwogYmFkX3Bvb2xfbG9va3VwOgogCWRtX3B1dChwb29sX21kKTsKQEAgLTM1NDEsNiArMzk3OSwyMSBAQAogCURNRU1JVCgiRXJyb3IiKTsKIH0KIAorc3RhdGljIGludCB0aGluX21lcmdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYnZlY19tZXJnZV9kYXRhICpidm0sCisJCSAgICAgIHN0cnVjdCBiaW9fdmVjICpiaW92ZWMsIGludCBtYXhfc2l6ZSkKK3sKKwlzdHJ1Y3QgdGhpbl9jICp0YyA9IHRpLT5wcml2YXRlOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUodGMtPnBvb2xfZGV2LT5iZGV2KTsKKworCWlmICghcS0+bWVyZ2VfYnZlY19mbikKKwkJcmV0dXJuIG1heF9zaXplOworCisJYnZtLT5iaV9iZGV2ID0gdGMtPnBvb2xfZGV2LT5iZGV2OworCWJ2bS0+Ymlfc2VjdG9yID0gZG1fdGFyZ2V0X29mZnNldCh0aSwgYnZtLT5iaV9zZWN0b3IpOworCisJcmV0dXJuIG1pbihtYXhfc2l6ZSwgcS0+bWVyZ2VfYnZlY19mbihxLCBidm0sIGJpb3ZlYykpOworfQorCiBzdGF0aWMgaW50IHRoaW5faXRlcmF0ZV9kZXZpY2VzKHN0cnVjdCBkbV90YXJnZXQgKnRpLAogCQkJCWl0ZXJhdGVfZGV2aWNlc19jYWxsb3V0X2ZuIGZuLCB2b2lkICpkYXRhKQogewpAQCAtMzU2NSw3ICs0MDE4LDcgQEAKIAogc3RhdGljIHN0cnVjdCB0YXJnZXRfdHlwZSB0aGluX3RhcmdldCA9IHsKIAkubmFtZSA9ICJ0aGluIiwKLQkudmVyc2lvbiA9IHsxLCAxMywgMH0sCisJLnZlcnNpb24gPSB7MSwgMTQsIDB9LAogCS5tb2R1bGUJPSBUSElTX01PRFVMRSwKIAkuY3RyID0gdGhpbl9jdHIsCiAJLmR0ciA9IHRoaW5fZHRyLApAQCAtMzU3NSw2ICs0MDI4LDcgQEAKIAkucHJlc3VzcGVuZCA9IHRoaW5fcHJlc3VzcGVuZCwKIAkucG9zdHN1c3BlbmQgPSB0aGluX3Bvc3RzdXNwZW5kLAogCS5zdGF0dXMgPSB0aGluX3N0YXR1cywKKwkubWVyZ2UgPSB0aGluX21lcmdlLAogCS5pdGVyYXRlX2RldmljZXMgPSB0aGluX2l0ZXJhdGVfZGV2aWNlcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCA1OGYzOTI3Li44ZjM3ZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9ibG9jay5oPgogCkBAIC0xMTcsNiArMTE4LDcgQEAKICNkZWZpbmUgRE1GX05PRkxVU0hfU1VTUEVORElORyA1CiAjZGVmaW5lIERNRl9NRVJHRV9JU19PUFRJT05BTCA2CiAjZGVmaW5lIERNRl9ERUZFUlJFRF9SRU1PVkUgNworI2RlZmluZSBETUZfU1VTUEVOREVEX0lOVEVSTkFMTFkgOAogCiAvKgogICogQSBkdW1teSBkZWZpbml0aW9uIHRvIG1ha2UgUkNVIGhhcHB5LgpAQCAtMTQwLDcgKzE0Miw3IEBACiAJICogVXNlIGRtX2dldF9saXZlX3RhYmxle19mYXN0fSBvciB0YWtlIHN1c3BlbmRfbG9jayBmb3IKIAkgKiBkZXJlZmVyZW5jZS4KIAkgKi8KLQlzdHJ1Y3QgZG1fdGFibGUgKm1hcDsKKwlzdHJ1Y3QgZG1fdGFibGUgX19yY3UgKm1hcDsKIAogCXN0cnVjdCBsaXN0X2hlYWQgdGFibGVfZGV2aWNlczsKIAlzdHJ1Y3QgbXV0ZXggdGFibGVfZGV2aWNlc19sb2NrOwpAQCAtNTI1LDE0ICs1MjcsMTUgQEAKIAkJZ290byBvdXQ7CiAKIAl0Z3QgPSBkbV90YWJsZV9nZXRfdGFyZ2V0KG1hcCwgMCk7CisJaWYgKCF0Z3QtPnR5cGUtPmlvY3RsKQorCQlnb3RvIG91dDsKIAogCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKSB7CiAJCXIgPSAtRUFHQUlOOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodGd0LT50eXBlLT5pb2N0bCkKLQkJciA9IHRndC0+dHlwZS0+aW9jdGwodGd0LCBjbWQsIGFyZyk7CisJciA9IHRndC0+dHlwZS0+aW9jdGwodGd0LCBjbWQsIGFyZyk7CiAKIG91dDoKIAlkbV9wdXRfbGl2ZV90YWJsZShtZCwgc3JjdV9pZHgpOwpAQCAtMTYwNyw5ICsxNjEwLDkgQEAKIAkgKiBGaW5kIG1heGltdW0gYW1vdW50IG9mIEkvTyB0aGF0IHdvbid0IG5lZWQgc3BsaXR0aW5nCiAJICovCiAJbWF4X3NlY3RvcnMgPSBtaW4obWF4X2lvX2xlbihidm0tPmJpX3NlY3RvciwgdGkpLAotCQkJICAoc2VjdG9yX3QpIEJJT19NQVhfU0VDVE9SUyk7CisJCQkgIChzZWN0b3JfdCkgcXVldWVfbWF4X3NlY3RvcnMocSkpOwogCW1heF9zaXplID0gKG1heF9zZWN0b3JzIDw8IFNFQ1RPUl9TSElGVCkgLSBidm0tPmJpX3NpemU7Ci0JaWYgKG1heF9zaXplIDwgMCkKKwlpZiAodW5saWtlbHkobWF4X3NpemUgPCAwKSkgLyogdGhpcyBzaG91bGRuJ3QgX2V2ZXJfIGhhcHBlbiAqLwogCQltYXhfc2l6ZSA9IDA7CiAKIAkvKgpAQCAtMTYyMSwxMCArMTYyNCwxMCBAQAogCQltYXhfc2l6ZSA9IHRpLT50eXBlLT5tZXJnZSh0aSwgYnZtLCBiaW92ZWMsIG1heF9zaXplKTsKIAkvKgogCSAqIElmIHRoZSB0YXJnZXQgZG9lc24ndCBzdXBwb3J0IG1lcmdlIG1ldGhvZCBhbmQgc29tZSBvZiB0aGUgZGV2aWNlcwotCSAqIHByb3ZpZGVkIHRoZWlyIG1lcmdlX2J2ZWMgbWV0aG9kICh3ZSBrbm93IHRoaXMgYnkgbG9va2luZyBhdAotCSAqIHF1ZXVlX21heF9od19zZWN0b3JzKSwgdGhlbiB3ZSBjYW4ndCBhbGxvdyBiaW9zIHdpdGggbXVsdGlwbGUgdmVjdG9yCi0JICogZW50cmllcy4gIFNvIGFsd2F5cyBzZXQgbWF4X3NpemUgdG8gMCwgYW5kIHRoZSBjb2RlIGJlbG93IGFsbG93cwotCSAqIGp1c3Qgb25lIHBhZ2UuCisJICogcHJvdmlkZWQgdGhlaXIgbWVyZ2VfYnZlYyBtZXRob2QgKHdlIGtub3cgdGhpcyBieSBsb29raW5nIGZvciB0aGUKKwkgKiBtYXhfaHdfc2VjdG9ycyB0aGF0IGRtX3NldF9kZXZpY2VfbGltaXRzIG1heSBzZXQpLCB0aGVuIHdlIGNhbid0CisJICogYWxsb3cgYmlvcyB3aXRoIG11bHRpcGxlIHZlY3RvciBlbnRyaWVzLiAgU28gYWx3YXlzIHNldCBtYXhfc2l6ZQorCSAqIHRvIDAsIGFuZCB0aGUgY29kZSBiZWxvdyBhbGxvd3MganVzdCBvbmUgcGFnZS4KIAkgKi8KIAllbHNlIGlmIChxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKSA8PSBQQUdFX1NJWkUgPj4gOSkKIAkJbWF4X3NpemUgPSAwOwpAQCAtMjMzMiw3ICsyMzM1LDcgQEAKIAogCW1lcmdlX2lzX29wdGlvbmFsID0gZG1fdGFibGVfbWVyZ2VfaXNfb3B0aW9uYWwodCk7CiAKLQlvbGRfbWFwID0gbWQtPm1hcDsKKwlvbGRfbWFwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZC0+bWFwLCBsb2NrZGVwX2lzX2hlbGQoJm1kLT5zdXNwZW5kX2xvY2spKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobWQtPm1hcCwgdCk7CiAJbWQtPmltbXV0YWJsZV90YXJnZXRfdHlwZSA9IGRtX3RhYmxlX2dldF9pbW11dGFibGVfdGFyZ2V0X3R5cGUodCk7CiAKQEAgLTIzNDEsNyArMjM0NCw4IEBACiAJCXNldF9iaXQoRE1GX01FUkdFX0lTX09QVElPTkFMLCAmbWQtPmZsYWdzKTsKIAllbHNlCiAJCWNsZWFyX2JpdChETUZfTUVSR0VfSVNfT1BUSU9OQUwsICZtZC0+ZmxhZ3MpOwotCWRtX3N5bmNfdGFibGUobWQpOworCWlmIChvbGRfbWFwKQorCQlkbV9zeW5jX3RhYmxlKG1kKTsKIAogCXJldHVybiBvbGRfbWFwOwogfQpAQCAtMjM1MSw3ICsyMzU1LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBkbV90YWJsZSAqX191bmJpbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gbWQtPm1hcDsKKwlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobWQtPm1hcCwgMSk7CiAKIAlpZiAoIW1hcCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNzE2LDYgKzI3MjAsOTkgQEAKIH0KIAogLyoKKyAqIElmIF9fZG1fc3VzcGVuZCByZXR1cm5zIDAsIHRoZSBkZXZpY2UgaXMgY29tcGxldGVseSBxdWllc2NlbnQKKyAqIG5vdy4gVGhlcmUgaXMgbm8gcmVxdWVzdC1wcm9jZXNzaW5nIGFjdGl2aXR5LiBBbGwgbmV3IHJlcXVlc3RzCisgKiBhcmUgYmVpbmcgYWRkZWQgdG8gbWQtPmRlZmVycmVkIGxpc3QuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBtZC0+c3VzcGVuZF9sb2NrCisgKi8KK3N0YXRpYyBpbnQgX19kbV9zdXNwZW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IGRtX3RhYmxlICptYXAsCisJCQl1bnNpZ25lZCBzdXNwZW5kX2ZsYWdzLCBpbnQgaW50ZXJydXB0aWJsZSkKK3sKKwlib29sIGRvX2xvY2tmcyA9IHN1c3BlbmRfZmxhZ3MgJiBETV9TVVNQRU5EX0xPQ0tGU19GTEFHOworCWJvb2wgbm9mbHVzaCA9IHN1c3BlbmRfZmxhZ3MgJiBETV9TVVNQRU5EX05PRkxVU0hfRkxBRzsKKwlpbnQgcjsKKworCS8qCisJICogRE1GX05PRkxVU0hfU1VTUEVORElORyBtdXN0IGJlIHNldCBiZWZvcmUgcHJlc3VzcGVuZC4KKwkgKiBUaGlzIGZsYWcgaXMgY2xlYXJlZCBiZWZvcmUgZG1fc3VzcGVuZCByZXR1cm5zLgorCSAqLworCWlmIChub2ZsdXNoKQorCQlzZXRfYml0KERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcsICZtZC0+ZmxhZ3MpOworCisJLyoKKwkgKiBUaGlzIGdldHMgcmV2ZXJ0ZWQgaWYgdGhlcmUncyBhbiBlcnJvciBsYXRlciBhbmQgdGhlIHRhcmdldHMKKwkgKiBwcm92aWRlIHRoZSAucHJlc3VzcGVuZF91bmRvIGhvb2suCisJICovCisJZG1fdGFibGVfcHJlc3VzcGVuZF90YXJnZXRzKG1hcCk7CisKKwkvKgorCSAqIEZsdXNoIEkvTyB0byB0aGUgZGV2aWNlLgorCSAqIEFueSBJL08gc3VibWl0dGVkIGFmdGVyIGxvY2tfZnMoKSBtYXkgbm90IGJlIGZsdXNoZWQuCisJICogbm9mbHVzaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZG9fbG9ja2ZzLgorCSAqIChsb2NrX2ZzKCkgZmx1c2hlcyBJL09zIGFuZCB3YWl0cyBmb3IgdGhlbSB0byBjb21wbGV0ZS4pCisJICovCisJaWYgKCFub2ZsdXNoICYmIGRvX2xvY2tmcykgeworCQlyID0gbG9ja19mcyhtZCk7CisJCWlmIChyKSB7CisJCQlkbV90YWJsZV9wcmVzdXNwZW5kX3VuZG9fdGFyZ2V0cyhtYXApOworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisKKwkvKgorCSAqIEhlcmUgd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBubyBwcm9jZXNzZXMgYXJlIHN1Ym1pdHRpbmcgcmVxdWVzdHMKKwkgKiB0byB0YXJnZXQgZHJpdmVycyBpLmUuIG5vIG9uZSBtYXkgYmUgZXhlY3V0aW5nCisJICogX19zcGxpdF9hbmRfcHJvY2Vzc19iaW8uIFRoaXMgaXMgY2FsbGVkIGZyb20gZG1fcmVxdWVzdCBhbmQKKwkgKiBkbV93cV93b3JrLgorCSAqCisJICogVG8gZ2V0IGFsbCBwcm9jZXNzZXMgb3V0IG9mIF9fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvIGluIGRtX3JlcXVlc3QsCisJICogd2UgdGFrZSB0aGUgd3JpdGUgbG9jay4gVG8gcHJldmVudCBhbnkgcHJvY2VzcyBmcm9tIHJlZW50ZXJpbmcKKwkgKiBfX3NwbGl0X2FuZF9wcm9jZXNzX2JpbyBmcm9tIGRtX3JlcXVlc3QgYW5kIHF1aWVzY2UgdGhlIHRocmVhZAorCSAqIChkbV93cV93b3JrKSwgd2Ugc2V0IEJNRl9CTE9DS19JT19GT1JfU1VTUEVORCBhbmQgY2FsbAorCSAqIGZsdXNoX3dvcmtxdWV1ZShtZC0+d3EpLgorCSAqLworCXNldF9iaXQoRE1GX0JMT0NLX0lPX0ZPUl9TVVNQRU5ELCAmbWQtPmZsYWdzKTsKKwlpZiAobWFwKQorCQlzeW5jaHJvbml6ZV9zcmN1KCZtZC0+aW9fYmFycmllcik7CisKKwkvKgorCSAqIFN0b3AgbWQtPnF1ZXVlIGJlZm9yZSBmbHVzaGluZyBtZC0+d3EgaW4gY2FzZSByZXF1ZXN0LWJhc2VkCisJICogZG0gZGVmZXJzIHJlcXVlc3RzIHRvIG1kLT53cSBmcm9tIG1kLT5xdWV1ZS4KKwkgKi8KKwlpZiAoZG1fcmVxdWVzdF9iYXNlZChtZCkpCisJCXN0b3BfcXVldWUobWQtPnF1ZXVlKTsKKworCWZsdXNoX3dvcmtxdWV1ZShtZC0+d3EpOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IG5vIG1vcmUgcmVxdWVzdHMgYXJlIGVudGVyaW5nIHRhcmdldCByZXF1ZXN0IHJvdXRpbmVzLgorCSAqIFdlIGNhbGwgZG1fd2FpdF9mb3JfY29tcGxldGlvbiB0byB3YWl0IGZvciBhbGwgZXhpc3RpbmcgcmVxdWVzdHMKKwkgKiB0byBmaW5pc2guCisJICovCisJciA9IGRtX3dhaXRfZm9yX2NvbXBsZXRpb24obWQsIGludGVycnVwdGlibGUpOworCisJaWYgKG5vZmx1c2gpCisJCWNsZWFyX2JpdChETUZfTk9GTFVTSF9TVVNQRU5ESU5HLCAmbWQtPmZsYWdzKTsKKwlpZiAobWFwKQorCQlzeW5jaHJvbml6ZV9zcmN1KCZtZC0+aW9fYmFycmllcik7CisKKwkvKiB3ZXJlIHdlIGludGVycnVwdGVkID8gKi8KKwlpZiAociA8IDApIHsKKwkJZG1fcXVldWVfZmx1c2gobWQpOworCisJCWlmIChkbV9yZXF1ZXN0X2Jhc2VkKG1kKSkKKwkJCXN0YXJ0X3F1ZXVlKG1kLT5xdWV1ZSk7CisKKwkJdW5sb2NrX2ZzKG1kKTsKKwkJZG1fdGFibGVfcHJlc3VzcGVuZF91bmRvX3RhcmdldHMobWFwKTsKKwkJLyogcHVzaGJhY2sgbGlzdCBpcyBhbHJlYWR5IGZsdXNoZWQsIHNvIHNraXAgZmx1c2ggKi8KKwl9CisKKwlyZXR1cm4gcjsKK30KKworLyoKICAqIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjaGFuZ2UgYSBtYXBwaW5nIHRhYmxlIHVuZGVyIGEgbW91bnRlZAogICogZmlsZXN5c3RlbS4gIEZvciBleGFtcGxlIHdlIG1pZ2h0IHdhbnQgdG8gbW92ZSBzb21lIGRhdGEgaW4KICAqIHRoZSBiYWNrZ3JvdW5kLiAgQmVmb3JlIHRoZSB0YWJsZSBjYW4gYmUgc3dhcHBlZCB3aXRoCkBAIC0yNzM1LDkxICsyODMyLDI5IEBACiB7CiAJc3RydWN0IGRtX3RhYmxlICptYXAgPSBOVUxMOwogCWludCByID0gMDsKLQlpbnQgZG9fbG9ja2ZzID0gc3VzcGVuZF9mbGFncyAmIERNX1NVU1BFTkRfTE9DS0ZTX0ZMQUcgPyAxIDogMDsKLQlpbnQgbm9mbHVzaCA9IHN1c3BlbmRfZmxhZ3MgJiBETV9TVVNQRU5EX05PRkxVU0hfRkxBRyA/IDEgOiAwOwogCi0JbXV0ZXhfbG9jaygmbWQtPnN1c3BlbmRfbG9jayk7CityZXRyeToKKwltdXRleF9sb2NrX25lc3RlZCgmbWQtPnN1c3BlbmRfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiAJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpIHsKIAkJciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQltYXAgPSBtZC0+bWFwOwotCi0JLyoKLQkgKiBETUZfTk9GTFVTSF9TVVNQRU5ESU5HIG11c3QgYmUgc2V0IGJlZm9yZSBwcmVzdXNwZW5kLgotCSAqIFRoaXMgZmxhZyBpcyBjbGVhcmVkIGJlZm9yZSBkbV9zdXNwZW5kIHJldHVybnMuCi0JICovCi0JaWYgKG5vZmx1c2gpCi0JCXNldF9iaXQoRE1GX05PRkxVU0hfU1VTUEVORElORywgJm1kLT5mbGFncyk7Ci0KLQkvKiBUaGlzIGRvZXMgbm90IGdldCByZXZlcnRlZCBpZiB0aGVyZSdzIGFuIGVycm9yIGxhdGVyLiAqLwotCWRtX3RhYmxlX3ByZXN1c3BlbmRfdGFyZ2V0cyhtYXApOwotCi0JLyoKLQkgKiBGbHVzaCBJL08gdG8gdGhlIGRldmljZS4KLQkgKiBBbnkgSS9PIHN1Ym1pdHRlZCBhZnRlciBsb2NrX2ZzKCkgbWF5IG5vdCBiZSBmbHVzaGVkLgotCSAqIG5vZmx1c2ggdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGRvX2xvY2tmcy4KLQkgKiAobG9ja19mcygpIGZsdXNoZXMgSS9PcyBhbmQgd2FpdHMgZm9yIHRoZW0gdG8gY29tcGxldGUuKQotCSAqLwotCWlmICghbm9mbHVzaCAmJiBkb19sb2NrZnMpIHsKLQkJciA9IGxvY2tfZnMobWQpOworCWlmIChkbV9zdXNwZW5kZWRfaW50ZXJuYWxseV9tZChtZCkpIHsKKwkJLyogYWxyZWFkeSBpbnRlcm5hbGx5IHN1c3BlbmRlZCwgd2FpdCBmb3IgaW50ZXJuYWwgcmVzdW1lICovCisJCW11dGV4X3VubG9jaygmbWQtPnN1c3BlbmRfbG9jayk7CisJCXIgPSB3YWl0X29uX2JpdCgmbWQtPmZsYWdzLCBETUZfU1VTUEVOREVEX0lOVEVSTkFMTFksIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmIChyKQotCQkJZ290byBvdXRfdW5sb2NrOworCQkJcmV0dXJuIHI7CisJCWdvdG8gcmV0cnk7CiAJfQogCi0JLyoKLQkgKiBIZXJlIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgbm8gcHJvY2Vzc2VzIGFyZSBzdWJtaXR0aW5nIHJlcXVlc3RzCi0JICogdG8gdGFyZ2V0IGRyaXZlcnMgaS5lLiBubyBvbmUgbWF5IGJlIGV4ZWN1dGluZwotCSAqIF9fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvLiBUaGlzIGlzIGNhbGxlZCBmcm9tIGRtX3JlcXVlc3QgYW5kCi0JICogZG1fd3Ffd29yay4KLQkgKgotCSAqIFRvIGdldCBhbGwgcHJvY2Vzc2VzIG91dCBvZiBfX3NwbGl0X2FuZF9wcm9jZXNzX2JpbyBpbiBkbV9yZXF1ZXN0LAotCSAqIHdlIHRha2UgdGhlIHdyaXRlIGxvY2suIFRvIHByZXZlbnQgYW55IHByb2Nlc3MgZnJvbSByZWVudGVyaW5nCi0JICogX19zcGxpdF9hbmRfcHJvY2Vzc19iaW8gZnJvbSBkbV9yZXF1ZXN0IGFuZCBxdWllc2NlIHRoZSB0aHJlYWQKLQkgKiAoZG1fd3Ffd29yayksIHdlIHNldCBCTUZfQkxPQ0tfSU9fRk9SX1NVU1BFTkQgYW5kIGNhbGwKLQkgKiBmbHVzaF93b3JrcXVldWUobWQtPndxKS4KLQkgKi8KLQlzZXRfYml0KERNRl9CTE9DS19JT19GT1JfU1VTUEVORCwgJm1kLT5mbGFncyk7Ci0Jc3luY2hyb25pemVfc3JjdSgmbWQtPmlvX2JhcnJpZXIpOworCW1hcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobWQtPm1hcCwgbG9ja2RlcF9pc19oZWxkKCZtZC0+c3VzcGVuZF9sb2NrKSk7CiAKLQkvKgotCSAqIFN0b3AgbWQtPnF1ZXVlIGJlZm9yZSBmbHVzaGluZyBtZC0+d3EgaW4gY2FzZSByZXF1ZXN0LWJhc2VkCi0JICogZG0gZGVmZXJzIHJlcXVlc3RzIHRvIG1kLT53cSBmcm9tIG1kLT5xdWV1ZS4KLQkgKi8KLQlpZiAoZG1fcmVxdWVzdF9iYXNlZChtZCkpCi0JCXN0b3BfcXVldWUobWQtPnF1ZXVlKTsKLQotCWZsdXNoX3dvcmtxdWV1ZShtZC0+d3EpOwotCi0JLyoKLQkgKiBBdCB0aGlzIHBvaW50IG5vIG1vcmUgcmVxdWVzdHMgYXJlIGVudGVyaW5nIHRhcmdldCByZXF1ZXN0IHJvdXRpbmVzLgotCSAqIFdlIGNhbGwgZG1fd2FpdF9mb3JfY29tcGxldGlvbiB0byB3YWl0IGZvciBhbGwgZXhpc3RpbmcgcmVxdWVzdHMKLQkgKiB0byBmaW5pc2guCi0JICovCi0JciA9IGRtX3dhaXRfZm9yX2NvbXBsZXRpb24obWQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KLQlpZiAobm9mbHVzaCkKLQkJY2xlYXJfYml0KERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcsICZtZC0+ZmxhZ3MpOwotCXN5bmNocm9uaXplX3NyY3UoJm1kLT5pb19iYXJyaWVyKTsKLQotCS8qIHdlcmUgd2UgaW50ZXJydXB0ZWQgPyAqLwotCWlmIChyIDwgMCkgewotCQlkbV9xdWV1ZV9mbHVzaChtZCk7Ci0KLQkJaWYgKGRtX3JlcXVlc3RfYmFzZWQobWQpKQotCQkJc3RhcnRfcXVldWUobWQtPnF1ZXVlKTsKLQotCQl1bmxvY2tfZnMobWQpOwotCQlnb3RvIG91dF91bmxvY2s7IC8qIHB1c2hiYWNrIGxpc3QgaXMgYWxyZWFkeSBmbHVzaGVkLCBzbyBza2lwIGZsdXNoICovCi0JfQotCi0JLyoKLQkgKiBJZiBkbV93YWl0X2Zvcl9jb21wbGV0aW9uIHJldHVybmVkIDAsIHRoZSBkZXZpY2UgaXMgY29tcGxldGVseQotCSAqIHF1aWVzY2VudCBub3cuIFRoZXJlIGlzIG5vIHJlcXVlc3QtcHJvY2Vzc2luZyBhY3Rpdml0eS4gQWxsIG5ldwotCSAqIHJlcXVlc3RzIGFyZSBiZWluZyBhZGRlZCB0byBtZC0+ZGVmZXJyZWQgbGlzdC4KLQkgKi8KKwlyID0gX19kbV9zdXNwZW5kKG1kLCBtYXAsIHN1c3BlbmRfZmxhZ3MsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJaWYgKHIpCisJCWdvdG8gb3V0X3VubG9jazsKIAogCXNldF9iaXQoRE1GX1NVU1BFTkRFRCwgJm1kLT5mbGFncyk7CiAKQEAgLTI4MzAsMjIgKzI4NjUsMTMgQEAKIAlyZXR1cm4gcjsKIH0KIAotaW50IGRtX3Jlc3VtZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCitzdGF0aWMgaW50IF9fZG1fcmVzdW1lKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IGRtX3RhYmxlICptYXApCiB7Ci0JaW50IHIgPSAtRUlOVkFMOwotCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gTlVMTDsKLQotCW11dGV4X2xvY2soJm1kLT5zdXNwZW5kX2xvY2spOwotCWlmICghZG1fc3VzcGVuZGVkX21kKG1kKSkKLQkJZ290byBvdXQ7Ci0KLQltYXAgPSBtZC0+bWFwOwotCWlmICghbWFwIHx8ICFkbV90YWJsZV9nZXRfc2l6ZShtYXApKQotCQlnb3RvIG91dDsKLQotCXIgPSBkbV90YWJsZV9yZXN1bWVfdGFyZ2V0cyhtYXApOwotCWlmIChyKQotCQlnb3RvIG91dDsKKwlpZiAobWFwKSB7CisJCWludCByID0gZG1fdGFibGVfcmVzdW1lX3RhcmdldHMobWFwKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CiAKIAlkbV9xdWV1ZV9mbHVzaChtZCk7CiAKQEAgLTI4NTksNiArMjg4NSwzNyBAQAogCiAJdW5sb2NrX2ZzKG1kKTsKIAorCXJldHVybiAwOworfQorCitpbnQgZG1fcmVzdW1lKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3sKKwlpbnQgciA9IC1FSU5WQUw7CisJc3RydWN0IGRtX3RhYmxlICptYXAgPSBOVUxMOworCityZXRyeToKKwltdXRleF9sb2NrX25lc3RlZCgmbWQtPnN1c3BlbmRfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCisJaWYgKCFkbV9zdXNwZW5kZWRfbWQobWQpKQorCQlnb3RvIG91dDsKKworCWlmIChkbV9zdXNwZW5kZWRfaW50ZXJuYWxseV9tZChtZCkpIHsKKwkJLyogYWxyZWFkeSBpbnRlcm5hbGx5IHN1c3BlbmRlZCwgd2FpdCBmb3IgaW50ZXJuYWwgcmVzdW1lICovCisJCW11dGV4X3VubG9jaygmbWQtPnN1c3BlbmRfbG9jayk7CisJCXIgPSB3YWl0X29uX2JpdCgmbWQtPmZsYWdzLCBETUZfU1VTUEVOREVEX0lOVEVSTkFMTFksIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCWdvdG8gcmV0cnk7CisJfQorCisJbWFwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZC0+bWFwLCBsb2NrZGVwX2lzX2hlbGQoJm1kLT5zdXNwZW5kX2xvY2spKTsKKwlpZiAoIW1hcCB8fCAhZG1fdGFibGVfZ2V0X3NpemUobWFwKSkKKwkJZ290byBvdXQ7CisKKwlyID0gX19kbV9yZXN1bWUobWQsIG1hcCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCiAJY2xlYXJfYml0KERNRl9TVVNQRU5ERUQsICZtZC0+ZmxhZ3MpOwogCiAJciA9IDA7CkBAIC0yODcyLDE1ICsyOTI5LDgwIEBACiAgKiBJbnRlcm5hbCBzdXNwZW5kL3Jlc3VtZSB3b3JrcyBsaWtlIHVzZXJzcGFjZS1kcml2ZW4gc3VzcGVuZC4gSXQgd2FpdHMKICAqIHVudGlsIGFsbCBiaW9zIGZpbmlzaCBhbmQgcHJldmVudHMgaXNzdWluZyBuZXcgYmlvcyB0byB0aGUgdGFyZ2V0IGRyaXZlcnMuCiAgKiBJdCBtYXkgYmUgdXNlZCBvbmx5IGZyb20gdGhlIGtlcm5lbC4KLSAqCi0gKiBJbnRlcm5hbCBzdXNwZW5kIGhvbGRzIG1kLT5zdXNwZW5kX2xvY2ssIHdoaWNoIHByZXZlbnRzIGludGVyYWN0aW9uIHdpdGgKLSAqIHVzZXJzcGFjZS1kcml2ZW4gc3VzcGVuZC4KICAqLwogCi12b2lkIGRtX2ludGVybmFsX3N1c3BlbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQorc3RhdGljIHZvaWQgX19kbV9pbnRlcm5hbF9zdXNwZW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgdW5zaWduZWQgc3VzcGVuZF9mbGFncykKK3sKKwlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IE5VTEw7CisKKwlpZiAoZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQobWQpKQorCQlyZXR1cm47IC8qIG5lc3RlZCBpbnRlcm5hbCBzdXNwZW5kICovCisKKwlpZiAoZG1fc3VzcGVuZGVkX21kKG1kKSkgeworCQlzZXRfYml0KERNRl9TVVNQRU5ERURfSU5URVJOQUxMWSwgJm1kLT5mbGFncyk7CisJCXJldHVybjsgLyogbmVzdCBzdXNwZW5kICovCisJfQorCisJbWFwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtZC0+bWFwLCBsb2NrZGVwX2lzX2hlbGQoJm1kLT5zdXNwZW5kX2xvY2spKTsKKworCS8qCisJICogVXNpbmcgVEFTS19VTklOVEVSUlVQVElCTEUgYmVjYXVzZSBvbmx5IE5PRkxVU0ggaW50ZXJuYWwgc3VzcGVuZCBpcworCSAqIHN1cHBvcnRlZC4gIFByb3Blcmx5IHN1cHBvcnRpbmcgYSBUQVNLX0lOVEVSUlVQVElCTEUgaW50ZXJuYWwgc3VzcGVuZAorCSAqIHdvdWxkIHJlcXVpcmUgY2hhbmdpbmcgLnByZXN1c3BlbmQgdG8gcmV0dXJuIGFuIGVycm9yIC0tIGF2b2lkIHRoaXMKKwkgKiB1bnRpbCB0aGVyZSBpcyBhIG5lZWQgZm9yIG1vcmUgZWxhYm9yYXRlIHZhcmlhbnRzIG9mIGludGVybmFsIHN1c3BlbmQuCisJICovCisJKHZvaWQpIF9fZG1fc3VzcGVuZChtZCwgbWFwLCBzdXNwZW5kX2ZsYWdzLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKKwlzZXRfYml0KERNRl9TVVNQRU5ERURfSU5URVJOQUxMWSwgJm1kLT5mbGFncyk7CisKKwlkbV90YWJsZV9wb3N0c3VzcGVuZF90YXJnZXRzKG1hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZG1faW50ZXJuYWxfcmVzdW1lKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3sKKwlpZiAoIWRtX3N1c3BlbmRlZF9pbnRlcm5hbGx5X21kKG1kKSkKKwkJcmV0dXJuOyAvKiByZXN1bWUgZnJvbSBuZXN0ZWQgaW50ZXJuYWwgc3VzcGVuZCAqLworCisJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpCisJCWdvdG8gZG9uZTsgLyogcmVzdW1lIGZyb20gbmVzdGVkIHN1c3BlbmQgKi8KKworCS8qCisJICogTk9URTogZXhpc3RpbmcgY2FsbGVycyBkb24ndCBuZWVkIHRvIGNhbGwgZG1fdGFibGVfcmVzdW1lX3RhcmdldHMKKwkgKiAod2hpY2ggbWF5IGZhaWwgLS0gc28gYmVzdCB0byBhdm9pZCBpdCBmb3Igbm93IGJ5IHBhc3NpbmcgTlVMTCBtYXApCisJICovCisJKHZvaWQpIF9fZG1fcmVzdW1lKG1kLCBOVUxMKTsKKworZG9uZToKKwljbGVhcl9iaXQoRE1GX1NVU1BFTkRFRF9JTlRFUk5BTExZLCAmbWQtPmZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOworCXdha2VfdXBfYml0KCZtZC0+ZmxhZ3MsIERNRl9TVVNQRU5ERURfSU5URVJOQUxMWSk7Cit9CisKK3ZvaWQgZG1faW50ZXJuYWxfc3VzcGVuZF9ub2ZsdXNoKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKIHsKIAltdXRleF9sb2NrKCZtZC0+c3VzcGVuZF9sb2NrKTsKLQlpZiAoZG1fc3VzcGVuZGVkX21kKG1kKSkKKwlfX2RtX2ludGVybmFsX3N1c3BlbmQobWQsIERNX1NVU1BFTkRfTk9GTFVTSF9GTEFHKTsKKwltdXRleF91bmxvY2soJm1kLT5zdXNwZW5kX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1faW50ZXJuYWxfc3VzcGVuZF9ub2ZsdXNoKTsKKwordm9pZCBkbV9pbnRlcm5hbF9yZXN1bWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQoreworCW11dGV4X2xvY2soJm1kLT5zdXNwZW5kX2xvY2spOworCV9fZG1faW50ZXJuYWxfcmVzdW1lKG1kKTsKKwltdXRleF91bmxvY2soJm1kLT5zdXNwZW5kX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1faW50ZXJuYWxfcmVzdW1lKTsKKworLyoKKyAqIEZhc3QgdmFyaWFudHMgb2YgaW50ZXJuYWwgc3VzcGVuZC9yZXN1bWUgaG9sZCBtZC0+c3VzcGVuZF9sb2NrLAorICogd2hpY2ggcHJldmVudHMgaW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2UtZHJpdmVuIHN1c3BlbmQuCisgKi8KKwordm9pZCBkbV9pbnRlcm5hbF9zdXNwZW5kX2Zhc3Qoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQoreworCW11dGV4X2xvY2soJm1kLT5zdXNwZW5kX2xvY2spOworCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpIHx8IGRtX3N1c3BlbmRlZF9pbnRlcm5hbGx5X21kKG1kKSkKIAkJcmV0dXJuOwogCiAJc2V0X2JpdChETUZfQkxPQ0tfSU9fRk9SX1NVU1BFTkQsICZtZC0+ZmxhZ3MpOwpAQCAtMjg4OSw5ICszMDExLDkgQEAKIAlkbV93YWl0X2Zvcl9jb21wbGV0aW9uKG1kLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiB9CiAKLXZvaWQgZG1faW50ZXJuYWxfcmVzdW1lKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3ZvaWQgZG1faW50ZXJuYWxfcmVzdW1lX2Zhc3Qoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKQorCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpIHx8IGRtX3N1c3BlbmRlZF9pbnRlcm5hbGx5X21kKG1kKSkKIAkJZ290byBkb25lOwogCiAJZG1fcXVldWVfZmx1c2gobWQpOwpAQCAtMjk3Nyw2ICszMDk5LDExIEBACiAJcmV0dXJuIHRlc3RfYml0KERNRl9TVVNQRU5ERUQsICZtZC0+ZmxhZ3MpOwogfQogCitpbnQgZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQoreworCXJldHVybiB0ZXN0X2JpdChETUZfU1VTUEVOREVEX0lOVEVSTkFMTFksICZtZC0+ZmxhZ3MpOworfQorCiBpbnQgZG1fdGVzdF9kZWZlcnJlZF9yZW1vdmVfZmxhZyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7CiAJcmV0dXJuIHRlc3RfYml0KERNRl9ERUZFUlJFRF9SRU1PVkUsICZtZC0+ZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5oIGIvZHJpdmVycy9tZC9kbS5oCmluZGV4IDk4OGM3ZmIuLjg0YjBmOWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmgKKysrIGIvZHJpdmVycy9tZC9kbS5oCkBAIC02NSw2ICs2NSw3IEBACiAJCQkgICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltaXRzKTsKIHN0cnVjdCBsaXN0X2hlYWQgKmRtX3RhYmxlX2dldF9kZXZpY2VzKHN0cnVjdCBkbV90YWJsZSAqdCk7CiB2b2lkIGRtX3RhYmxlX3ByZXN1c3BlbmRfdGFyZ2V0cyhzdHJ1Y3QgZG1fdGFibGUgKnQpOwordm9pZCBkbV90YWJsZV9wcmVzdXNwZW5kX3VuZG9fdGFyZ2V0cyhzdHJ1Y3QgZG1fdGFibGUgKnQpOwogdm9pZCBkbV90YWJsZV9wb3N0c3VzcGVuZF90YXJnZXRzKHN0cnVjdCBkbV90YWJsZSAqdCk7CiBpbnQgZG1fdGFibGVfcmVzdW1lX3RhcmdldHMoc3RydWN0IGRtX3RhYmxlICp0KTsKIGludCBkbV90YWJsZV9hbnlfY29uZ2VzdGVkKHN0cnVjdCBkbV90YWJsZSAqdCwgaW50IGJkaV9iaXRzKTsKQEAgLTEyOSw2ICsxMzAsMTUgQEAKIGludCBkbV9zdXNwZW5kZWRfbWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKIAogLyoKKyAqIEludGVybmFsIHN1c3BlbmQgYW5kIHJlc3VtZSBtZXRob2RzLgorICovCitpbnQgZG1fc3VzcGVuZGVkX2ludGVybmFsbHlfbWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKK3ZvaWQgZG1faW50ZXJuYWxfc3VzcGVuZF9mYXN0KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7Cit2b2lkIGRtX2ludGVybmFsX3Jlc3VtZV9mYXN0KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7Cit2b2lkIGRtX2ludGVybmFsX3N1c3BlbmRfbm9mbHVzaChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOwordm9pZCBkbV9pbnRlcm5hbF9yZXN1bWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKKworLyoKICAqIFRlc3QgaWYgdGhlIGRldmljZSBpcyBzY2hlZHVsZWQgZm9yIGRlZmVycmVkIHJlbW92ZS4KICAqLwogaW50IGRtX3Rlc3RfZGVmZXJyZWRfcmVtb3ZlX2ZsYWcoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWFycmF5LmMgYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1hcnJheS5jCmluZGV4IDFkNzViMWQuLmU2NGI2MWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1hcnJheS5jCisrKyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWFycmF5LmMKQEAgLTY0NSw4ICs2NDUsMTAgQEAKIAlpbnQgcjsKIAlzdHJ1Y3QgcmVzaXplIHJlc2l6ZTsKIAotCWlmIChvbGRfc2l6ZSA9PSBuZXdfc2l6ZSkKKwlpZiAob2xkX3NpemUgPT0gbmV3X3NpemUpIHsKKwkJKm5ld19yb290ID0gcm9vdDsKIAkJcmV0dXJuIDA7CisJfQogCiAJcmVzaXplLmluZm8gPSBpbmZvOwogCXJlc2l6ZS5yb290ID0gcm9vdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXNwYWNlLW1hcC1tZXRhZGF0YS5jIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tc3BhY2UtbWFwLW1ldGFkYXRhLmMKaW5kZXggNzg2YjY4OS4uZThhOTA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tc3BhY2UtbWFwLW1ldGFkYXRhLmMKKysrIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tc3BhY2UtbWFwLW1ldGFkYXRhLmMKQEAgLTU2NCw3ICs1NjQsOSBAQAogewogCXN0cnVjdCBzbV9tZXRhZGF0YSAqc21tID0gY29udGFpbmVyX29mKHNtLCBzdHJ1Y3Qgc21fbWV0YWRhdGEsIHNtKTsKIAotCXJldHVybiBzbW0tPmxsLm5yX2Jsb2NrczsKKwkqY291bnQgPSBzbW0tPmxsLm5yX2Jsb2NrczsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNtX2Jvb3RzdHJhcF9nZXRfbnJfZnJlZShzdHJ1Y3QgZG1fc3BhY2VfbWFwICpzbSwgZG1fYmxvY2tfdCAqY291bnQpCkBAIC01ODEsNyArNTgzLDkgQEAKIHsKIAlzdHJ1Y3Qgc21fbWV0YWRhdGEgKnNtbSA9IGNvbnRhaW5lcl9vZihzbSwgc3RydWN0IHNtX21ldGFkYXRhLCBzbSk7CiAKLQlyZXR1cm4gYiA8IHNtbS0+YmVnaW4gPyAxIDogMDsKKwkqcmVzdWx0ID0gKGIgPCBzbW0tPmJlZ2luKSA/IDEgOiAwOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc21fYm9vdHN0cmFwX2NvdW50X2lzX21vcmVfdGhhbl9vbmUoc3RydWN0IGRtX3NwYWNlX21hcCAqc20sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS10cmFuc2FjdGlvbi1tYW5hZ2VyLmMgYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS10cmFuc2FjdGlvbi1tYW5hZ2VyLmMKaW5kZXggM2JjMzBhMC4uOWNiNzk3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tdHJhbnNhY3Rpb24tbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXRyYW5zYWN0aW9uLW1hbmFnZXIuYwpAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgImRtLXBlcnNpc3RlbnQtZGF0YS1pbnRlcm5hbC5oIgogCiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KIApAQCAtMTcsNiArMTksNjEgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2RlZmluZSBQUkVGRVRDSF9TSVpFIDEyOAorI2RlZmluZSBQUkVGRVRDSF9CSVRTIDcKKyNkZWZpbmUgUFJFRkVUQ0hfU0VOVElORUwgKChkbV9ibG9ja190KSAtMVVMTCkKKworc3RydWN0IHByZWZldGNoX3NldCB7CisJc3RydWN0IG11dGV4IGxvY2s7CisJZG1fYmxvY2tfdCBibG9ja3NbUFJFRkVUQ0hfU0laRV07Cit9OworCitzdGF0aWMgdW5zaWduZWQgcHJlZmV0Y2hfaGFzaChkbV9ibG9ja190IGIpCit7CisJcmV0dXJuIGhhc2hfNjQoYiwgUFJFRkVUQ0hfQklUUyk7Cit9CisKK3N0YXRpYyB2b2lkIHByZWZldGNoX3dpcGUoc3RydWN0IHByZWZldGNoX3NldCAqcCkKK3sKKwl1bnNpZ25lZCBpOworCWZvciAoaSA9IDA7IGkgPCBQUkVGRVRDSF9TSVpFOyBpKyspCisJCXAtPmJsb2Nrc1tpXSA9IFBSRUZFVENIX1NFTlRJTkVMOworfQorCitzdGF0aWMgdm9pZCBwcmVmZXRjaF9pbml0KHN0cnVjdCBwcmVmZXRjaF9zZXQgKnApCit7CisJbXV0ZXhfaW5pdCgmcC0+bG9jayk7CisJcHJlZmV0Y2hfd2lwZShwKTsKK30KKworc3RhdGljIHZvaWQgcHJlZmV0Y2hfYWRkKHN0cnVjdCBwcmVmZXRjaF9zZXQgKnAsIGRtX2Jsb2NrX3QgYikKK3sKKwl1bnNpZ25lZCBoID0gcHJlZmV0Y2hfaGFzaChiKTsKKworCW11dGV4X2xvY2soJnAtPmxvY2spOworCWlmIChwLT5ibG9ja3NbaF0gPT0gUFJFRkVUQ0hfU0VOVElORUwpCisJCXAtPmJsb2Nrc1toXSA9IGI7CisKKwltdXRleF91bmxvY2soJnAtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBwcmVmZXRjaF9pc3N1ZShzdHJ1Y3QgcHJlZmV0Y2hfc2V0ICpwLCBzdHJ1Y3QgZG1fYmxvY2tfbWFuYWdlciAqYm0pCit7CisJdW5zaWduZWQgaTsKKworCW11dGV4X2xvY2soJnAtPmxvY2spOworCisJZm9yIChpID0gMDsgaSA8IFBSRUZFVENIX1NJWkU7IGkrKykKKwkJaWYgKHAtPmJsb2Nrc1tpXSAhPSBQUkVGRVRDSF9TRU5USU5FTCkgeworCQkJZG1fYm1fcHJlZmV0Y2goYm0sIHAtPmJsb2Nrc1tpXSk7CisJCQlwLT5ibG9ja3NbaV0gPSBQUkVGRVRDSF9TRU5USU5FTDsKKwkJfQorCisJbXV0ZXhfdW5sb2NrKCZwLT5sb2NrKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RydWN0IHNoYWRvd19pbmZvIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKIAlkbV9ibG9ja190IHdoZXJlOwpAQCAtMzcsNiArOTQsOCBAQAogCiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBobGlzdF9oZWFkIGJ1Y2tldHNbRE1fSEFTSF9TSVpFXTsKKworCXN0cnVjdCBwcmVmZXRjaF9zZXQgcHJlZmV0Y2hlczsKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMTcsNiArMTc2LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgRE1fSEFTSF9TSVpFOyBpKyspCiAJCUlOSVRfSExJU1RfSEVBRCh0bS0+YnVja2V0cyArIGkpOwogCisJcHJlZmV0Y2hfaW5pdCgmdG0tPnByZWZldGNoZXMpOworCiAJcmV0dXJuIHRtOwogfQogCkBAIC0yNjgsOCArMzI5LDE0IEBACiAJCSAgICBzdHJ1Y3QgZG1fYmxvY2tfdmFsaWRhdG9yICp2LAogCQkgICAgc3RydWN0IGRtX2Jsb2NrICoqYmxrKQogewotCWlmICh0bS0+aXNfY2xvbmUpCi0JCXJldHVybiBkbV9ibV9yZWFkX3RyeV9sb2NrKHRtLT5yZWFsLT5ibSwgYiwgdiwgYmxrKTsKKwlpZiAodG0tPmlzX2Nsb25lKSB7CisJCWludCByID0gZG1fYm1fcmVhZF90cnlfbG9jayh0bS0+cmVhbC0+Ym0sIGIsIHYsIGJsayk7CisKKwkJaWYgKHIgPT0gLUVXT1VMREJMT0NLKQorCQkJcHJlZmV0Y2hfYWRkKCZ0bS0+cmVhbC0+cHJlZmV0Y2hlcywgYik7CisKKwkJcmV0dXJuIHI7CisJfQogCiAJcmV0dXJuIGRtX2JtX3JlYWRfbG9jayh0bS0+Ym0sIGIsIHYsIGJsayk7CiB9CkBAIC0zMTcsNiArMzg0LDEyIEBACiAJcmV0dXJuIHRtLT5ibTsKIH0KIAordm9pZCBkbV90bV9pc3N1ZV9wcmVmZXRjaGVzKHN0cnVjdCBkbV90cmFuc2FjdGlvbl9tYW5hZ2VyICp0bSkKK3sKKwlwcmVmZXRjaF9pc3N1ZSgmdG0tPnByZWZldGNoZXMsIHRtLT5ibSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV90bV9pc3N1ZV9wcmVmZXRjaGVzKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBkbV90bV9jcmVhdGVfaW50ZXJuYWwoc3RydWN0IGRtX2Jsb2NrX21hbmFnZXIgKmJtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tdHJhbnNhY3Rpb24tbWFuYWdlci5oIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tdHJhbnNhY3Rpb24tbWFuYWdlci5oCmluZGV4IDI3NzJlZDIuLjJlMGQ0ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXRyYW5zYWN0aW9uLW1hbmFnZXIuaAorKysgYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS10cmFuc2FjdGlvbi1tYW5hZ2VyLmgKQEAgLTEwOSw2ICsxMDksMTMgQEAKIHN0cnVjdCBkbV9ibG9ja19tYW5hZ2VyICpkbV90bV9nZXRfYm0oc3RydWN0IGRtX3RyYW5zYWN0aW9uX21hbmFnZXIgKnRtKTsKIAogLyoKKyAqIElmIHlvdSdyZSB1c2luZyBhIG5vbi1ibG9ja2luZyBjbG9uZSB0aGUgdG0gd2lsbCBidWlsZCB1cCBhIGxpc3Qgb2YKKyAqIHJlcXVlc3RlZCBibG9ja3MgdGhhdCB3ZXJlbid0IGluIGNvcmUuICBUaGlzIGNhbGwgd2lsbCByZXF1ZXN0IHRob3NlCisgKiBibG9ja3MgdG8gYmUgcHJlZmV0Y2hlZC4KKyAqLwordm9pZCBkbV90bV9pc3N1ZV9wcmVmZXRjaGVzKHN0cnVjdCBkbV90cmFuc2FjdGlvbl9tYW5hZ2VyICp0bSk7CisKKy8qCiAgKiBBIGxpdHRsZSB1dGlsaXR5IHRoYXQgdGllcyB0aGUga25vdCBieSBwcm9kdWNpbmcgYSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgKiB0aGF0IGhhcyBhIHNwYWNlIG1hcCBtYW5hZ2VkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyLi4uCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLWNvcmUuYwppbmRleCA5MzJlZDliLi5iMTBhYWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLWNvcmUuYwpAQCAtMjE5MCw3ICsyMTkwLDcgQEAKIAkJcmV0ID0gc21pYXBwX3NldF9jb21wb3NlKHN1YmRldiwgZmgsIHNlbCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUJVRygpOworCQlyZXQgPSAtRUlOVkFMOwogCX0KIAogCW11dGV4X3VubG9jaygmc2Vuc29yLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWNvcmUuYwppbmRleCAzMzFlZGRhLi4zYmQzODZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKQEAgLTEwNzgsNyArMTA3OCw3IEBACiAJZm9yIChsaW5lID0gMDsgbGluZSA8IGxpbmVzOyBsaW5lKyspIHsKIAkJd2hpbGUgKG9mZnNldCAmJiBvZmZzZXQgPj0gc2dfZG1hX2xlbihzZykpIHsKIAkJCW9mZnNldCAtPSBzZ19kbWFfbGVuKHNnKTsKLQkJCXNnKys7CisJCQlzZyA9IHNnX25leHQoc2cpOwogCQl9CiAKIAkJaWYgKGxwaSAmJiBsaW5lID4gMCAmJiAhKGxpbmUgJSBscGkpKQpAQCAtMTEwMSwxNCArMTEwMSwxNCBAQAogCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCiAJCQl0b2RvIC09IChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpOwogCQkJb2Zmc2V0ID0gMDsKLQkJCXNnKys7CisJCQlzZyA9IHNnX25leHQoc2cpOwogCQkJd2hpbGUgKHRvZG8gPiBzZ19kbWFfbGVuKHNnKSkgewogCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfAogCQkJCQkJICAgIHNnX2RtYV9sZW4oc2cpKTsKIAkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KIAkJCQl0b2RvIC09IHNnX2RtYV9sZW4oc2cpOwotCQkJCXNnKys7CisJCQkJc2cgPSBzZ19uZXh0KHNnKTsKIAkJCX0KIAkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfRU9MfHRvZG8pOwogCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1jb3JlLmMKaW5kZXggMTcyNTgzZC4uOGNiZTZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL3NvbG82eDEwL3NvbG82eDEwLWNvcmUuYwpAQCAtMTA1LDExICsxMDUsOCBAQAogCWlmICghc3RhdHVzKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlpZiAoc3RhdHVzICYgfnNvbG9fZGV2LT5pcnFfbWFzaykgewotCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JUlFfU1RBVCwKLQkJCSAgICAgICBzdGF0dXMgJiB+c29sb19kZXYtPmlycV9tYXNrKTsKLQkJc3RhdHVzICY9IHNvbG9fZGV2LT5pcnFfbWFzazsKLQl9CisJLyogQWNrbm93bGVkZ2UgYWxsIGludGVycnVwdHMgaW1tZWRpYXRlbHkgKi8KKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JUlFfU1RBVCwgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgJiBTT0xPX0lSUV9QQ0lfRVJSKQogCQlzb2xvX3AybV9lcnJvcl9pc3Ioc29sb19kZXYpOwpAQCAtMTMyLDkgKzEyOSw2IEBACiAJaWYgKHN0YXR1cyAmIFNPTE9fSVJRX0c3MjMpCiAJCXNvbG9fZzcyM19pc3Ioc29sb19kZXYpOwogCi0JLyogQ2xlYXIgYWxsIGludGVycnVwdHMgaGFuZGxlZCAqLwotCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9TVEFULCBzdGF0dXMpOwotCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS96b3Jhbi96b3Jhbl9wcm9jZnMuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL3pvcmFuL3pvcmFuX3Byb2Nmcy5jCmluZGV4IGY3Y2VlZTAuLjQzNzY1MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL3pvcmFuL3pvcmFuX3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL3pvcmFuL3pvcmFuX3Byb2Nmcy5jCkBAIC0xNTcsOCArMTU3LDggQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCXN0cmluZ1tjb3VudF0gPSAwOwotCWRwcmludGsoNCwgS0VSTl9JTkZPICIlczogd3JpdGVfcHJvYzogbmFtZT0lcyBjb3VudD0lenUgenI9JXBcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSwgY291bnQsIHpyKTsKKwlkcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6IHdyaXRlX3Byb2M6IG5hbWU9JXBEIGNvdW50PSV6dSB6cj0lcFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIGZpbGUsIGNvdW50LCB6cik7CiAJbGRlbGltID0gIiBcdFxuIjsKIAl0ZGVsaW0gPSAiPSI7CiAJbGluZSA9IHN0cnBicmsoc3AsIGxkZWxpbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25maWcKaW5kZXggM2FhYzg4Zi4uMTQxMmMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vS2NvbmZpZwpAQCAtMTEyLDcgKzExMiw3IEBACiBjb25maWcgVklERU9fUzNDX0NBTUlGCiAJdHJpc3RhdGUgIlNhbXN1bmcgUzNDMjRYWC9TM0M2NFhYIFNvQyBDYW1lcmEgSW50ZXJmYWNlIGRyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIFZJREVPX1Y0TDJfU1VCREVWX0FQSQotCWRlcGVuZHMgb24gUE1fUlVOVElNRQorCWRlcGVuZHMgb24gUE0KIAlkZXBlbmRzIG9uIEFSQ0hfUzNDNjRYWCB8fCBQTEFUX1MzQzI0WFggfHwgQ09NUElMRV9URVNUCiAJZGVwZW5kcyBvbiBIQVNfRE1BCiAJc2VsZWN0IFZJREVPQlVGMl9ETUFfQ09OVElHCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NvZGEvY29kYS1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY29kYS9jb2RhLWNvbW1vbi5jCmluZGV4IGNlZDQ3NjAuLjVmMGNkNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY29kYS9jb2RhLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY29kYS9jb2RhLWNvbW1vbi5jCkBAIC0xOTgwLDcgKzE5ODAsNyBAQAogCiAJLyoKIAkgKiBTdGFydCBhY3RpdmF0ZWQgc28gd2UgY2FuIGRpcmVjdGx5IGNhbGwgY29kYV9od19pbml0IGluCi0JICogY29kYV9md19jYWxsYmFjayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgQ09ORklHX1BNX1JVTlRJTUUgaXMKKwkgKiBjb2RhX2Z3X2NhbGxiYWNrIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBDT05GSUdfUE0gaXMKIAkgKiBlbmFibGVkIG9yIHdoZXRoZXIgdGhlIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGggYSBQTSBkb21haW4uCiAJICovCiAJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJnBkZXYtPmRldik7CkBAIC0yMDEzLDcgKzIwMTMsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgY29kYV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNvZGFfZGV2ICpjZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2V4eW5vczQtaXMvZmltYy1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2V4eW5vczQtaXMvZmltYy1jb3JlLmMKaW5kZXggYWVlOTJkOS4uZjVkODU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9leHlub3M0LWlzL2ZpbWMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zNC1pcy9maW1jLWNvcmUuYwpAQCAtODMyLDcgKzgzMiw3IEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1BNX1JVTlRJTUUpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBmaW1jX20ybV9zdXNwZW5kKHN0cnVjdCBmaW1jX2RldiAqZmltYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODcxLDcgKzg3MSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSB8fCBDT05GSUdfUE1fU0xFRVAgKi8KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZmltY19vZl9tYXRjaFtdOwogCkBAIC0xMDM5LDcgKzEwMzksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBmaW1jX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmltY19kZXYgKmZpbWMgPQlkZXZfZ2V0X2RydmRhdGEoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zNC1pcy9maW1jLWlzLWkyYy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9leHlub3M0LWlzL2ZpbWMtaXMtaTJjLmMKaW5kZXggMzcxY2FkNC4uZDgzMDMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9leHlub3M0LWlzL2ZpbWMtaXMtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9leHlub3M0LWlzL2ZpbWMtaXMtaTJjLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1BNX1JVTlRJTUUpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBmaW1jX2lzX2kyY19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBmaW1jX2lzX2kyYyAqaXNwX2kyYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9leHlub3M0LWlzL2ZpbWMtbGl0ZS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9leHlub3M0LWlzL2ZpbWMtbGl0ZS5jCmluZGV4IGE5N2QyMzUuLjZjMWViMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zNC1pcy9maW1jLWxpdGUuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2V4eW5vczQtaXMvZmltYy1saXRlLmMKQEAgLTE1ODgsNyArMTU4OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGZpbWNfbGl0ZV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZpbWNfbGl0ZSAqZmltYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9leHlub3M0LWlzL21pcGktY3Npcy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9leHlub3M0LWlzL21pcGktY3Npcy5jCmluZGV4IGRiNmZkMTQuLmJlNWQ2ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zNC1pcy9taXBpLWNzaXMuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2V4eW5vczQtaXMvbWlwaS1jc2lzLmMKQEAgLTk3OCw3ICs5NzgsNyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzNXBjc2lzX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHM1cGNzaXNfcG1fc3VzcGVuZChkZXYsIHRydWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtanBlZy9qcGVnLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLWpwZWcvanBlZy1jb3JlLmMKaW5kZXggNmZjYzdmMC4uZmUyNzI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtanBlZy9qcGVnLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC1qcGVnL2pwZWctY29yZS5jCkBAIC0yNjMyLDcgKzI2MzIsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUE1fUlVOVElNRSkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHM1cF9qcGVnX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHM1cF9qcGVnICpqcGVnID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC0yNjgyLDcgKzI2ODIsNyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgfHwgQ09ORklHX1BNX1NMRUVQICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgczVwX2pwZWdfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC1tZmMvczVwX21mYy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtbWZjL3M1cF9tZmMuYwppbmRleCAxNjViYzg2Li4zNjNmZDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC1tZmMvczVwX21mYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLW1mYy9zNXBfbWZjLmMKQEAgLTEzMDIsNyArMTMwMiw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHM1cF9tZmNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC1tZmMvczVwX21mY19wbS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtbWZjL3M1cF9tZmNfcG0uYwppbmRleCA4MjZjNDg5Li41Zjk3YTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC1tZmMvczVwX21mY19wbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLW1mYy9zNXBfbWZjX3BtLmMKQEAgLTEzLDkgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KLSNlbmRpZgogI2luY2x1ZGUgInM1cF9tZmNfY29tbW9uLmgiCiAjaW5jbHVkZSAiczVwX21mY19kZWJ1Zy5oIgogI2luY2x1ZGUgInM1cF9tZmNfcG0uaCIKQEAgLTY3LDcgKzY1LDcgQEAKIAl9CiAKIAlhdG9taWNfc2V0KCZwbS0+cG93ZXIsIDApOwotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAJcG0tPmRldmljZSA9ICZkZXYtPnBsYXRfZGV2LT5kZXY7CiAJcG1fcnVudGltZV9lbmFibGUocG0tPmRldmljZSk7CiAjZW5kaWYKQEAgLTkzLDcgKzkxLDcgQEAKIAl9CiAJY2xrX3VucHJlcGFyZShwbS0+Y2xvY2tfZ2F0ZSk7CiAJY2xrX3B1dChwbS0+Y2xvY2tfZ2F0ZSk7Ci0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAlwbV9ydW50aW1lX2Rpc2FibGUocG0tPmRldmljZSk7CiAjZW5kaWYKIH0KQEAgLTEyMCw3ICsxMTgsNyBAQAogCiBpbnQgczVwX21mY19wb3dlcl9vbih2b2lkKQogewotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAJcmV0dXJuIHBtX3J1bnRpbWVfZ2V0X3N5bmMocG0tPmRldmljZSk7CiAjZWxzZQogCWF0b21pY19zZXQoJnBtLT5wb3dlciwgMSk7CkBAIC0xMzAsNyArMTI4LDcgQEAKIAogaW50IHM1cF9tZmNfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAlyZXR1cm4gcG1fcnVudGltZV9wdXRfc3luYyhwbS0+ZGV2aWNlKTsKICNlbHNlCiAJYXRvbWljX3NldCgmcG0tPnBvd2VyLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLXR2L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC10di9LY29uZmlnCmluZGV4IGJlYjE4MGUuLjVhMTgzNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLXR2L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtdHYvS2NvbmZpZwpAQCAtOCw3ICs4LDcgQEAKIAogY29uZmlnIFZJREVPX1NBTVNVTkdfUzVQX1RWCiAJYm9vbCAiU2Ftc3VuZyBUViBkcml2ZXIgZm9yIFM1UCBwbGF0Zm9ybSIKLQlkZXBlbmRzIG9uIFBNX1JVTlRJTUUKKwlkZXBlbmRzIG9uIFBNCiAJZGVwZW5kcyBvbiBBUkNIX1M1UFYyMTAgfHwgQVJDSF9FWFlOT1MgfHwgQ09NUElMRV9URVNUCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pci1yYzYtZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1yYzYtZGVjb2Rlci5jCmluZGV4IGYxZjA5OGUuLmQxNmJjNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvaXItcmM2LWRlY29kZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2lyLXJjNi1kZWNvZGVyLmMKQEAgLTI1OSw4ICsyNTksOCBAQAogCQkJY2FzZSAzMjoKIAkJCQlpZiAoKHNjYW5jb2RlICYgUkM2XzZBX0xDQ19NQVNLKSA9PSBSQzZfNkFfTUNFX0NDKSB7CiAJCQkJCXByb3RvY29sID0gUkNfVFlQRV9SQzZfTUNFOwotCQkJCQlzY2FuY29kZSAmPSB+UkM2XzZBX01DRV9UT0dHTEVfTUFTSzsKIAkJCQkJdG9nZ2xlID0gISEoc2NhbmNvZGUgJiBSQzZfNkFfTUNFX1RPR0dMRV9NQVNLKTsKKwkJCQkJc2NhbmNvZGUgJj0gflJDNl82QV9NQ0VfVE9HR0xFX01BU0s7CiAJCQkJfSBlbHNlIHsKIAkJCQkJcHJvdG9jb2wgPSBSQ19CSVRfUkM2XzZBXzMyOwogCQkJCQl0b2dnbGUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvczIyNTUvczIyNTVkcnYuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3MyMjU1L3MyMjU1ZHJ2LmMKaW5kZXggY2NjMDAwOS4uMWMwZGJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvczIyNTUvczIyNTVkcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9zMjI1NS9zMjI1NWRydi5jCkBAIC02MzIsNyArNjMyLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfUElYX0ZNVF9KUEVHOgogCQljYXNlIFY0TDJfUElYX0ZNVF9NSlBFRzoKLQkJCWJ1Zi0+dmIudjRsMl9idWYubGVuZ3RoID0ganBnc2l6ZTsKKwkJCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCgmYnVmLT52YiwgMCwganBnc2l6ZSk7CiAJCQltZW1jcHkodmJ1ZiwgdG1wYnVmLCBqcGdzaXplKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1vcnkvS2NvbmZpZyBiL2RyaXZlcnMvbWVtb3J5L0tjb25maWcKaW5kZXggNmQ5MWMyNy4uMTkxMzgzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtb3J5L0tjb25maWcKKysrIGIvZHJpdmVycy9tZW1vcnkvS2NvbmZpZwpAQCAtNDEsNiArNDEsMTQgQEAKIAkgIHBhcmFtZXRlcnMgYW5kIG90aGVyIHNldHRpbmdzIGR1cmluZyBmcmVxdWVuY3ksIHZvbHRhZ2UgYW5kCiAJICB0ZW1wZXJhdHVyZSBjaGFuZ2VzCiAKK2NvbmZpZyBPTUFQX0dQTUMKKwlib29sCisJaGVscAorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBHZW5lcmFsIFB1cnBvc2UgTWVtb3J5IENvbnRyb2xsZXIgKEdQTUMpCisJICBwcmVzZW50IG9uIFRleGFzIEluc3RydW1lbnRzIFNvQ3MgKGUuZy4gT01BUDIrKS4gR1BNQyBhbGxvd3MKKwkgIGludGVyZmFjaW5nIHRvIGEgdmFyaWV0eSBvZiBhc3luY2hyb25vdXMgYXMgd2VsbCBhcyBzeW5jaHJvbm91cworCSAgbWVtb3J5IGRyaXZlcyBsaWtlIE5PUiwgTkFORCwgT25lTkFORCwgU1JBTS4KKwogY29uZmlnIE1WRUJVX0RFVkJVUwogCWJvb2wgIk1hcnZlbGwgRUJVIERldmljZSBCdXMgQ29udHJvbGxlciIKIAlkZWZhdWx0IHkKQEAgLTYxLDE2ICs2OSw2IEBACiAJICBhbmFseXNpcywgZXNwZWNpYWxseSBmb3IgSU9NTVUvR0FSVChHcmFwaGljcyBBZGRyZXNzCiAJICBSZWxvY2F0aW9uIFRhYmxlKSBtb2R1bGUuCiAKLWNvbmZpZyBURUdSQTMwX01DCi0JYm9vbCAiVGVncmEzMCBNZW1vcnkgQ29udHJvbGxlcihNQykgZHJpdmVyIgotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gQVJDSF9URUdSQV8zeF9TT0MKLQloZWxwCi0JICBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIE1lbW9yeSBDb250cm9sbGVyKE1DKSBtb2R1bGUgYXZhaWxhYmxlCi0JICBpbiBUZWdyYTMwIFNvQ3MsIG1haW5seSBmb3IgYSBhZGRyZXNzIHRyYW5zbGF0aW9uIGZhdWx0Ci0JICBhbmFseXNpcywgZXNwZWNpYWxseSBmb3IgSU9NTVUvU01NVShTeXN0ZW0gTWVtb3J5IE1hbmFnZW1lbnQKLQkgIFVuaXQpIG1vZHVsZS4KLQogY29uZmlnIEZTTF9DT1JFTkVUX0NGCiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBDb3JlTmV0IEVycm9yIFJlcG9ydGluZyIKIAlkZXBlbmRzIG9uIEZTTF9TT0NfQk9PS0UKQEAgLTg1LDQgKzgzLDYgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBGU0xfU09DCiAKK3NvdXJjZSAiZHJpdmVycy9tZW1vcnkvdGVncmEvS2NvbmZpZyIKKwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L01ha2VmaWxlIGIvZHJpdmVycy9tZW1vcnkvTWFrZWZpbGUKaW5kZXggYzMyZDMxOS4uNmI2NTQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1vcnkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZW1vcnkvTWFrZWZpbGUKQEAgLTgsOCArOCwxMCBAQAogb2JqLSQoQ09ORklHX0FUTUVMX1NEUkFNQykJKz0gYXRtZWwtc2RyYW1jLm8KIG9iai0kKENPTkZJR19USV9BRU1JRikJCSs9IHRpLWFlbWlmLm8KIG9iai0kKENPTkZJR19USV9FTUlGKQkJKz0gZW1pZi5vCitvYmotJChDT05GSUdfT01BUF9HUE1DKQkJKz0gb21hcC1ncG1jLm8KIG9iai0kKENPTkZJR19GU0xfQ09SRU5FVF9DRikJKz0gZnNsLWNvcmVuZXQtY2Yubwogb2JqLSQoQ09ORklHX0ZTTF9JRkMpCQkrPSBmc2xfaWZjLm8KIG9iai0kKENPTkZJR19NVkVCVV9ERVZCVVMpCSs9IG12ZWJ1LWRldmJ1cy5vCiBvYmotJChDT05GSUdfVEVHUkEyMF9NQykJKz0gdGVncmEyMC1tYy5vCi1vYmotJChDT05GSUdfVEVHUkEzMF9NQykJKz0gdGVncmEzMC1tYy5vCisKK29iai0kKENPTkZJR19URUdSQV9NQykJCSs9IHRlZ3JhLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMgYi9kcml2ZXJzL21lbW9yeS9vbWFwLWdwbWMuYwpzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwpyZW5hbWUgdG8gZHJpdmVycy9tZW1vcnkvb21hcC1ncG1jLmMKaW5kZXggNWZhMzc1NS4uZmZjNWU2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvZHJpdmVycy9tZW1vcnkvb21hcC1ncG1jLmMKQEAgLTI5LDIwICsyOSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbXRkLW5hbmQtb21hcDIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL210ZC1vbmVuYW5kLW9tYXAyLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAib21hcF9kZXZpY2UuaCIKLSNpbmNsdWRlICJncG1jLmgiCi0jaW5jbHVkZSAiZ3BtYy1uYW5kLmgiCi0jaW5jbHVkZSAiZ3BtYy1vbmVuYW5kLmgiCi0KICNkZWZpbmUJREVWSUNFX05BTUUJCSJvbWFwLWdwbWMiCiAKIC8qIEdQTUMgcmVnaXN0ZXIgb2Zmc2V0cyAqLwpAQCAtODUsNiArODAsOCBAQAogI2RlZmluZSBHUE1DX0VDQ19DVFJMX0VDQ1JFRzgJCTB4MDA4CiAjZGVmaW5lIEdQTUNfRUNDX0NUUkxfRUNDUkVHOQkJMHgwMDkKIAorI2RlZmluZSBHUE1DX0NPTkZJR19MSU1JVEVEQUREUkVTUwkJQklUKDEpCisKICNkZWZpbmUJR1BNQ19DT05GSUcyX0NTRVhUUkFERUxBWQkJQklUKDcpCiAjZGVmaW5lCUdQTUNfQ09ORklHM19BRFZFWFRSQURFTEFZCQlCSVQoNykKICNkZWZpbmUJR1BNQ19DT05GSUc0X09FRVhUUkFERUxBWQkJQklUKDcpCkBAIC0xMTQsMTAgKzExMSw3MyBAQAogCiAjZGVmaW5lIEdQTUNfTlJfV0FJVFBJTlMJCTQKIAorI2RlZmluZSBHUE1DX0NTX0NPTkZJRzEJCTB4MDAKKyNkZWZpbmUgR1BNQ19DU19DT05GSUcyCQkweDA0CisjZGVmaW5lIEdQTUNfQ1NfQ09ORklHMwkJMHgwOAorI2RlZmluZSBHUE1DX0NTX0NPTkZJRzQJCTB4MGMKKyNkZWZpbmUgR1BNQ19DU19DT05GSUc1CQkweDEwCisjZGVmaW5lIEdQTUNfQ1NfQ09ORklHNgkJMHgxNAorI2RlZmluZSBHUE1DX0NTX0NPTkZJRzcJCTB4MTgKKyNkZWZpbmUgR1BNQ19DU19OQU5EX0NPTU1BTkQJMHgxYworI2RlZmluZSBHUE1DX0NTX05BTkRfQUREUkVTUwkweDIwCisjZGVmaW5lIEdQTUNfQ1NfTkFORF9EQVRBCTB4MjQKKworLyogQ29udHJvbCBDb21tYW5kcyAqLworI2RlZmluZSBHUE1DX0NPTkZJR19SRFlfQlNZCTB4MDAwMDAwMDEKKyNkZWZpbmUgR1BNQ19DT05GSUdfREVWX1NJWkUJMHgwMDAwMDAwMgorI2RlZmluZSBHUE1DX0NPTkZJR19ERVZfVFlQRQkweDAwMDAwMDAzCisjZGVmaW5lIEdQTUNfU0VUX0lSUV9TVEFUVVMJMHgwMDAwMDAwNAorCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XUkFQQlVSU1RfU1VQUCAgICAgKDEgPDwgMzEpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9SRUFETVVMVElQTEVfU1VQUCAgKDEgPDwgMzApCisjZGVmaW5lIEdQTUNfQ09ORklHMV9SRUFEVFlQRV9BU1lOQyAgICAgKDAgPDwgMjkpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9SRUFEVFlQRV9TWU5DICAgICAgKDEgPDwgMjkpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XUklURU1VTFRJUExFX1NVUFAgKDEgPDwgMjgpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XUklURVRZUEVfQVNZTkMgICAgKDAgPDwgMjcpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XUklURVRZUEVfU1lOQyAgICAgKDEgPDwgMjcpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9DTEtBQ1RJVkFUSU9OVElNRSh2YWwpICgodmFsICYgMykgPDwgMjUpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9QQUdFX0xFTih2YWwpICAgICAgKCh2YWwgJiAzKSA8PCAyMykKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1dBSVRfUkVBRF9NT04gICAgICAoMSA8PCAyMikKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1dBSVRfV1JJVEVfTU9OICAgICAoMSA8PCAyMSkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1dBSVRfTU9OX0lJTUUodmFsKSAoKHZhbCAmIDMpIDw8IDE4KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfV0FJVF9QSU5fU0VMKHZhbCkgICgodmFsICYgMykgPDwgMTYpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VTSVpFKHZhbCkgICAgKCh2YWwgJiAzKSA8PCAxMikKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVNJWkVfMTYgICAgICBHUE1DX0NPTkZJRzFfREVWSUNFU0laRSgxKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRSh2YWwpICAgICgodmFsICYgMykgPDwgMTApCisjZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFX05PUiAgICAgR1BNQ19DT05GSUcxX0RFVklDRVRZUEUoMCkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX01VWFRZUEUodmFsKSAgICAgICAoKHZhbCAmIDMpIDw8IDgpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9USU1FX1BBUkFfR1JBTiAgICAgKDEgPDwgNCkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0ZDTEtfRElWKHZhbCkgICAgICAodmFsICYgMykKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0ZDTEtfRElWMiAgICAgICAgICAoR1BNQ19DT05GSUcxX0ZDTEtfRElWKDEpKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfRkNMS19ESVYzICAgICAgICAgIChHUE1DX0NPTkZJRzFfRkNMS19ESVYoMikpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVjQgICAgICAgICAgKEdQTUNfQ09ORklHMV9GQ0xLX0RJVigzKSkKKyNkZWZpbmUgR1BNQ19DT05GSUc3X0NTVkFMSUQJCSgxIDw8IDYpCisKKyNkZWZpbmUgR1BNQ19ERVZJQ0VUWVBFX05PUgkJMAorI2RlZmluZSBHUE1DX0RFVklDRVRZUEVfTkFORAkJMgorI2RlZmluZSBHUE1DX0NPTkZJR19XUklURVBST1RFQ1QJMHgwMDAwMDAxMAorI2RlZmluZSBXUl9SRF9QSU5fTU9OSVRPUklORwkJMHgwMDYwMDAwMAorCisjZGVmaW5lIEdQTUNfRU5BQkxFX0lSUQkJMHgwMDAwMDAwZAorCisvKiBFQ0MgY29tbWFuZHMgKi8KKyNkZWZpbmUgR1BNQ19FQ0NfUkVBRAkJMCAvKiBSZXNldCBIYXJkd2FyZSBFQ0MgZm9yIHJlYWQgKi8KKyNkZWZpbmUgR1BNQ19FQ0NfV1JJVEUJCTEgLyogUmVzZXQgSGFyZHdhcmUgRUNDIGZvciB3cml0ZSAqLworI2RlZmluZSBHUE1DX0VDQ19SRUFEU1lOCTIgLyogUmVzZXQgYmVmb3JlIHN5bmRyb20gaXMgcmVhZCBiYWNrICovCisKIC8qIFhYWDogT25seSBOQU5EIGlycSBoYXMgYmVlbiBjb25zaWRlcmVkLGN1cnJlbnRseSB0aGVzZSBhcmUgdGhlIG9ubHkgb25lcyB1c2VkCiAgKi8KICNkZWZpbmUJR1BNQ19OUl9JUlEJCTIKIAorc3RydWN0IGdwbWNfY3NfZGF0YSB7CisJY29uc3QgY2hhciAqbmFtZTsKKworI2RlZmluZSBHUE1DX0NTX1JFU0VSVkVECSgxIDw8IDApCisJdTMyIGZsYWdzOworCisJc3RydWN0IHJlc291cmNlIG1lbTsKK307CisKIHN0cnVjdCBncG1jX2NsaWVudF9pcnEJewogCXVuc2lnbmVkCQlpcnE7CiAJdTMyCQkJYml0bWFzazsKQEAgLTE1NSwxMCArMjE1LDkgQEAKIHN0YXRpYyBpbnQgZ3BtY19pcnFfc3RhcnQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UJZ3BtY19tZW1fcm9vdDsKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UJZ3BtY19jc19tZW1bR1BNQ19DU19OVU1dOworc3RhdGljIHN0cnVjdCBncG1jX2NzX2RhdGEgZ3BtY19jc1tHUE1DX0NTX05VTV07CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwbWNfbWVtX2xvY2spOwogLyogRGVmaW5lIGNoaXAtc2VsZWN0cyBhcyByZXNlcnZlZCBieSBkZWZhdWx0IHVudGlsIHByb2JlIGNvbXBsZXRlcyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBncG1jX2NzX21hcCA9ICgoMSA8PCBHUE1DX0NTX05VTSkgLSAxKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3BtY19jc19udW0gPSBHUE1DX0NTX05VTTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3BtY19ucl93YWl0cGluczsKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpncG1jX2RldjsKQEAgLTIwMiwxMSArMjYxLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoZ3BtY19sM19jbGspOwogCi0JaWYgKHJhdGUgPT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJncG1jX2wzX2NsayBub3QgZW5hYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQogCXJhdGUgLz0gMTAwMDsKIAlyYXRlID0gMTAwMDAwMDAwMCAvIHJhdGU7CS8qIEluIHBpY29zZWNvbmRzICovCiAKQEAgLTI4NCwxMiArMzM4LDEzMCBAQAogfQogCiAjaWZkZWYgREVCVUcKK3N0YXRpYyBpbnQgZ2V0X2dwbWNfdGltaW5nX3JlZyhpbnQgY3MsIGludCByZWcsIGludCBzdF9iaXQsIGludCBlbmRfYml0LAorCQkJICAgICAgIGJvb2wgcmF3LCBib29sIG5vdmFsLCBpbnQgc2hpZnQsCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1MzIgbDsKKwlpbnQgbnJfYml0cywgbWF4X3ZhbHVlLCBtYXNrOworCisJbCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIHJlZyk7CisJbnJfYml0cyA9IGVuZF9iaXQgLSBzdF9iaXQgKyAxOworCW1heF92YWx1ZSA9ICgxIDw8IG5yX2JpdHMpIC0gMTsKKwltYXNrID0gbWF4X3ZhbHVlIDw8IHN0X2JpdDsKKwlsID0gKGwgJiBtYXNrKSA+PiBzdF9iaXQ7CisJaWYgKHNoaWZ0KQorCQlsID0gKHNoaWZ0IDw8IGwpOworCWlmIChub3ZhbCAmJiAobCA9PSAwKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFyYXcpIHsKKwkJdW5zaWduZWQgaW50IHRpbWVfbnNfbWluLCB0aW1lX25zLCB0aW1lX25zX21heDsKKworCQl0aW1lX25zX21pbiA9IGdwbWNfdGlja3NfdG9fbnMobCA/IGwgLSAxIDogMCk7CisJCXRpbWVfbnMgPSBncG1jX3RpY2tzX3RvX25zKGwpOworCQl0aW1lX25zX21heCA9IGdwbWNfdGlja3NfdG9fbnMobCArIDEgPiBtYXhfdmFsdWUgPworCQkJCQkgICAgICAgbWF4X3ZhbHVlIDogbCArIDEpOworCQlwcl9pbmZvKCJncG1jLCVzID0gPCV1PiAoJXUgLSAldSBucywgJWkgdGlja3MpXG4iLAorCQkJbmFtZSwgdGltZV9ucywgdGltZV9uc19taW4sIHRpbWVfbnNfbWF4LCBsKTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCJncG1jLCVzID0gPCV1PlxuIiwgbmFtZSwgbCk7CisJfQorCisJcmV0dXJuIGw7Cit9CisKKyNkZWZpbmUgR1BNQ19QUklOVF9DT05GSUcoY3MsIGNvbmZpZykgXAorCXByX2luZm8oImNzJWkgJXM6IDB4JTA4eFxuIiwgY3MsICNjb25maWcsIFwKKwkJZ3BtY19jc19yZWFkX3JlZyhjcywgY29uZmlnKSkKKyNkZWZpbmUgR1BNQ19HRVRfUkFXKHJlZywgc3QsIGVuZCwgZmllbGQpIFwKKwlnZXRfZ3BtY190aW1pbmdfcmVnKGNzLCAocmVnKSwgKHN0KSwgKGVuZCksIDEsIDAsIDAsIGZpZWxkKQorI2RlZmluZSBHUE1DX0dFVF9SQVdfQk9PTChyZWcsIHN0LCBlbmQsIGZpZWxkKSBcCisJZ2V0X2dwbWNfdGltaW5nX3JlZyhjcywgKHJlZyksIChzdCksIChlbmQpLCAxLCAxLCAwLCBmaWVsZCkKKyNkZWZpbmUgR1BNQ19HRVRfUkFXX1NISUZUKHJlZywgc3QsIGVuZCwgc2hpZnQsIGZpZWxkKSBcCisJZ2V0X2dwbWNfdGltaW5nX3JlZyhjcywgKHJlZyksIChzdCksIChlbmQpLCAxLCAxLCAoc2hpZnQpLCBmaWVsZCkKKyNkZWZpbmUgR1BNQ19HRVRfVElDS1MocmVnLCBzdCwgZW5kLCBmaWVsZCkgXAorCWdldF9ncG1jX3RpbWluZ19yZWcoY3MsIChyZWcpLCAoc3QpLCAoZW5kKSwgMCwgMCwgMCwgZmllbGQpCisKK3N0YXRpYyB2b2lkIGdwbWNfc2hvd19yZWdzKGludCBjcywgY29uc3QgY2hhciAqZGVzYykKK3sKKwlwcl9pbmZvKCJncG1jIGNzJWkgJXM6XG4iLCBjcywgZGVzYyk7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHMSk7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHMik7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHMyk7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHNCk7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHNSk7CisJR1BNQ19QUklOVF9DT05GSUcoY3MsIEdQTUNfQ1NfQ09ORklHNik7Cit9CisKKy8qCisgKiBOb3RlIHRoYXQgZ3BtYyx3YWl0LXBpbiBoYW5kaW5nIHdyb25nbHkgYXNzdW1lcyBiaXQgOCBpcyBhdmFpbGFibGUsCisgKiBzZWUgY29tbWl0IGM5ZmI4MDkuCisgKi8KK3N0YXRpYyB2b2lkIGdwbWNfY3Nfc2hvd190aW1pbmdzKGludCBjcywgY29uc3QgY2hhciAqZGVzYykKK3sKKwlncG1jX3Nob3dfcmVncyhjcywgZGVzYyk7CisKKwlwcl9pbmZvKCJncG1jIGNzJWkgYWNjZXNzIGNvbmZpZ3VyYXRpb246XG4iLCBjcyk7CisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUcxLCAgNCwgIDQsICJ0aW1lLXBhcmEtZ3JhbnVsYXJpdHkiKTsKKwlHUE1DX0dFVF9SQVcoR1BNQ19DU19DT05GSUcxLCAgOCwgIDksICJtdXgtYWRkLWRhdGEiKTsKKwlHUE1DX0dFVF9SQVcoR1BNQ19DU19DT05GSUcxLCAxMiwgMTMsICJkZXZpY2Utd2lkdGgiKTsKKwlHUE1DX0dFVF9SQVcoR1BNQ19DU19DT05GSUcxLCAxNiwgMTcsICJ3YWl0LXBpbiIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMSwgMjEsIDIxLCAid2FpdC1vbi13cml0ZSIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMSwgMjIsIDIyLCAid2FpdC1vbi1yZWFkIik7CisJR1BNQ19HRVRfUkFXX1NISUZUKEdQTUNfQ1NfQ09ORklHMSwgMjMsIDI0LCA0LCAiYnVyc3QtbGVuZ3RoIik7CisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUcxLCAyNywgMjcsICJzeW5jLXdyaXRlIik7CisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUcxLCAyOCwgMjgsICJidXJzdC13cml0ZSIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMSwgMjksIDI5LCAiZ3BtYyxzeW5jLXJlYWQiKTsKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzEsIDMwLCAzMCwgImJ1cnN0LXJlYWQiKTsKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzEsIDMxLCAzMSwgImJ1cnN0LXdyYXAiKTsKKworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMiwgIDcsICA3LCAiY3MtZXh0cmEtZGVsYXkiKTsKKworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHMywgIDcsICA3LCAiYWR2LWV4dHJhLWRlbGF5Iik7CisKKwlHUE1DX0dFVF9SQVdfQk9PTChHUE1DX0NTX0NPTkZJRzQsIDIzLCAyMywgIndlLWV4dHJhLWRlbGF5Iik7CisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUc0LCAgNywgIDcsICJvZS1leHRyYS1kZWxheSIpOworCisJR1BNQ19HRVRfUkFXX0JPT0woR1BNQ19DU19DT05GSUc2LCAgNywgIDcsICJjeWNsZTJjeWNsZS1zYW1lY3NlbiIpOworCUdQTUNfR0VUX1JBV19CT09MKEdQTUNfQ1NfQ09ORklHNiwgIDYsICA2LCAiY3ljbGUyY3ljbGUtZGlmZmNzZW4iKTsKKworCXByX2luZm8oImdwbWMgY3MlaSB0aW1pbmdzIGNvbmZpZ3VyYXRpb246XG4iLCBjcyk7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUcyLCAgMCwgIDMsICJjcy1vbi1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHMiwgIDgsIDEyLCAiY3MtcmQtb2ZmLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUcyLCAxNiwgMjAsICJjcy13ci1vZmYtbnMiKTsKKworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHMywgIDAsICAzLCAiYWR2LW9uLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUczLCAgOCwgMTIsICJhZHYtcmQtb2ZmLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUczLCAxNiwgMjAsICJhZHYtd3Itb2ZmLW5zIik7CisKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzQsICAwLCAgMywgIm9lLW9uLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc0LCAgOCwgMTIsICJvZS1vZmYtbnMiKTsKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzQsIDE2LCAxOSwgIndlLW9uLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc0LCAyNCwgMjgsICJ3ZS1vZmYtbnMiKTsKKworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNSwgIDAsICA0LCAicmQtY3ljbGUtbnMiKTsKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzUsICA4LCAxMiwgIndyLWN5Y2xlLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc1LCAxNiwgMjAsICJhY2Nlc3MtbnMiKTsKKworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNSwgMjQsIDI3LCAicGFnZS1idXJzdC1hY2Nlc3MtbnMiKTsKKworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNiwgMCwgMywgImJ1cy10dXJuYXJvdW5kLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc2LCA4LCAxMSwgImN5Y2xlMmN5Y2xlLWRlbGF5LW5zIik7CisKKwlHUE1DX0dFVF9USUNLUyhHUE1DX0NTX0NPTkZJRzEsIDE4LCAxOSwgIndhaXQtbW9uaXRvcmluZy1ucyIpOworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHMSwgMjUsIDI2LCAiY2xrLWFjdGl2YXRpb24tbnMiKTsKKworCUdQTUNfR0VUX1RJQ0tTKEdQTUNfQ1NfQ09ORklHNiwgMTYsIDE5LCAid3ItZGF0YS1tdXgtYnVzLW5zIik7CisJR1BNQ19HRVRfVElDS1MoR1BNQ19DU19DT05GSUc2LCAyNCwgMjgsICJ3ci1hY2Nlc3MtbnMiKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZ3BtY19jc19zaG93X3RpbWluZ3MoaW50IGNzLCBjb25zdCBjaGFyICpkZXNjKQoreworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgc2V0X2dwbWNfdGltaW5nX3JlZyhpbnQgY3MsIGludCByZWcsIGludCBzdF9iaXQsIGludCBlbmRfYml0LAogCQkJICAgICAgIGludCB0aW1lLCBjb25zdCBjaGFyICpuYW1lKQotI2Vsc2UKLXN0YXRpYyBpbnQgc2V0X2dwbWNfdGltaW5nX3JlZyhpbnQgY3MsIGludCByZWcsIGludCBzdF9iaXQsIGludCBlbmRfYml0LAotCQkJICAgICAgIGludCB0aW1lKQotI2VuZGlmCiB7CiAJdTMyIGw7CiAJaW50IHRpY2tzLCBtYXNrLCBucl9iaXRzOwpAQCAtMjk5LDE1ICs0NzEsMTUgQEAKIAllbHNlCiAJCXRpY2tzID0gZ3BtY19uc190b190aWNrcyh0aW1lKTsKIAlucl9iaXRzID0gZW5kX2JpdCAtIHN0X2JpdCArIDE7Ci0JaWYgKHRpY2tzID49IDEgPDwgbnJfYml0cykgewotI2lmZGVmIERFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIkdQTUMgQ1MlZDogJS0xMHMqICUzZCBucywgJTNkIHRpY2tzID49ICVkXG4iLAotCQkJCWNzLCBuYW1lLCB0aW1lLCB0aWNrcywgMSA8PCBucl9iaXRzKTsKLSNlbmRpZgorCW1hc2sgPSAoMSA8PCBucl9iaXRzKSAtIDE7CisKKwlpZiAodGlja3MgPiBtYXNrKSB7CisJCXByX2VycigiJXM6IEdQTUMgZXJyb3IhIENTJWQ6ICVzOiAlZCBucywgJWQgdGlja3MgPiAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBjcywgbmFtZSwgdGltZSwgdGlja3MsIG1hc2spOworCiAJCXJldHVybiAtMTsKIAl9CiAKLQltYXNrID0gKDEgPDwgbnJfYml0cykgLSAxOwogCWwgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCByZWcpOwogI2lmZGVmIERFQlVHCiAJcHJpbnRrKEtFUk5fSU5GTwpAQCAtMzIyLDE2ICs0OTQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIERFQlVHCiAjZGVmaW5lIEdQTUNfU0VUX09ORShyZWcsIHN0LCBlbmQsIGZpZWxkKSBcCiAJaWYgKHNldF9ncG1jX3RpbWluZ19yZWcoY3MsIChyZWcpLCAoc3QpLCAoZW5kKSwJCVwKIAkJCXQtPmZpZWxkLCAjZmllbGQpIDwgMCkJCQlcCiAJCXJldHVybiAtMQotI2Vsc2UKLSNkZWZpbmUgR1BNQ19TRVRfT05FKHJlZywgc3QsIGVuZCwgZmllbGQpIFwKLQlpZiAoc2V0X2dwbWNfdGltaW5nX3JlZyhjcywgKHJlZyksIChzdCksIChlbmQpLCB0LT5maWVsZCkgPCAwKSBcCi0JCXJldHVybiAtMQotI2VuZGlmCiAKIGludCBncG1jX2NhbGNfZGl2aWRlcih1bnNpZ25lZCBpbnQgc3luY19jbGspCiB7CkBAIC0zNTMsNiArNTE5LDcgQEAKIAlpbnQgZGl2OwogCXUzMiBsOwogCisJZ3BtY19jc19zaG93X3RpbWluZ3MoY3MsICJiZWZvcmUgZ3BtY19jc19zZXRfdGltaW5ncyIpOwogCWRpdiA9IGdwbWNfY2FsY19kaXZpZGVyKHQtPnN5bmNfY2xrKTsKIAlpZiAoZGl2IDwgMCkKIAkJcmV0dXJuIGRpdjsKQEAgLTQwMiwxMSArNTY5LDEyIEBACiAJfQogCiAJZ3BtY19jc19ib29sX3RpbWluZ3MoY3MsICZ0LT5ib29sX3RpbWluZ3MpOworCWdwbWNfY3Nfc2hvd190aW1pbmdzKGNzLCAiYWZ0ZXIgZ3BtY19jc19zZXRfdGltaW5ncyIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ3BtY19jc19lbmFibGVfbWVtKGludCBjcywgdTMyIGJhc2UsIHUzMiBzaXplKQorc3RhdGljIGludCBncG1jX2NzX3NldF9tZW1jb25mKGludCBjcywgdTMyIGJhc2UsIHUzMiBzaXplKQogewogCXUzMiBsOwogCXUzMiBtYXNrOwpAQCAtNDMwLDYgKzU5OCwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBncG1jX2NzX2VuYWJsZV9tZW0oaW50IGNzKQoreworCXUzMiBsOworCisJbCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHNyk7CisJbCB8PSBHUE1DX0NPTkZJRzdfQ1NWQUxJRDsKKwlncG1jX2NzX3dyaXRlX3JlZyhjcywgR1BNQ19DU19DT05GSUc3LCBsKTsKK30KKwogc3RhdGljIHZvaWQgZ3BtY19jc19kaXNhYmxlX21lbShpbnQgY3MpCiB7CiAJdTMyIGw7CkBAIC00NjAsMTMgKzYzNywzMCBAQAogCiBzdGF0aWMgdm9pZCBncG1jX2NzX3NldF9yZXNlcnZlZChpbnQgY3MsIGludCByZXNlcnZlZCkKIHsKLQlncG1jX2NzX21hcCAmPSB+KDEgPDwgY3MpOwotCWdwbWNfY3NfbWFwIHw9IChyZXNlcnZlZCA/IDEgOiAwKSA8PCBjczsKKwlzdHJ1Y3QgZ3BtY19jc19kYXRhICpncG1jID0gJmdwbWNfY3NbY3NdOworCisJZ3BtYy0+ZmxhZ3MgfD0gR1BNQ19DU19SRVNFUlZFRDsKIH0KIAogc3RhdGljIGJvb2wgZ3BtY19jc19yZXNlcnZlZChpbnQgY3MpCiB7Ci0JcmV0dXJuIGdwbWNfY3NfbWFwICYgKDEgPDwgY3MpOworCXN0cnVjdCBncG1jX2NzX2RhdGEgKmdwbWMgPSAmZ3BtY19jc1tjc107CisKKwlyZXR1cm4gZ3BtYy0+ZmxhZ3MgJiBHUE1DX0NTX1JFU0VSVkVEOworfQorCitzdGF0aWMgdm9pZCBncG1jX2NzX3NldF9uYW1lKGludCBjcywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZ3BtY19jc19kYXRhICpncG1jID0gJmdwbWNfY3NbY3NdOworCisJZ3BtYy0+bmFtZSA9IG5hbWU7Cit9CisKK2NvbnN0IGNoYXIgKmdwbWNfY3NfZ2V0X25hbWUoaW50IGNzKQoreworCXN0cnVjdCBncG1jX2NzX2RhdGEgKmdwbWMgPSAmZ3BtY19jc1tjc107CisKKwlyZXR1cm4gZ3BtYy0+bmFtZTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3BtY19tZW1fYWxpZ24odW5zaWduZWQgbG9uZyBzaXplKQpAQCAtNDg1LDcgKzY3OSw4IEBACiAKIHN0YXRpYyBpbnQgZ3BtY19jc19pbnNlcnRfbWVtKGludCBjcywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0Jc3RydWN0IHJlc291cmNlCSpyZXMgPSAmZ3BtY19jc19tZW1bY3NdOworCXN0cnVjdCBncG1jX2NzX2RhdGEgKmdwbWMgPSAmZ3BtY19jc1tjc107CisJc3RydWN0IHJlc291cmNlICpyZXMgPSAmZ3BtYy0+bWVtOwogCWludCByOwogCiAJc2l6ZSA9IGdwbWNfbWVtX2FsaWduKHNpemUpOwpAQCAtNTAwLDcgKzY5NSw4IEBACiAKIHN0YXRpYyBpbnQgZ3BtY19jc19kZWxldGVfbWVtKGludCBjcykKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UJKnJlcyA9ICZncG1jX2NzX21lbVtjc107CisJc3RydWN0IGdwbWNfY3NfZGF0YSAqZ3BtYyA9ICZncG1jX2NzW2NzXTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZncG1jLT5tZW07CiAJaW50IHI7CiAKIAlzcGluX2xvY2soJmdwbWNfbWVtX2xvY2spOwpAQCAtNTQxLDIzICs3MzcsMjQgQEAKIAlncG1jX2NzX2dldF9tZW1jb25mKGNzLCAmb2xkX2Jhc2UsICZzaXplKTsKIAlpZiAoYmFzZSA9PSBvbGRfYmFzZSkKIAkJcmV0dXJuIDA7Ci0JZ3BtY19jc19kaXNhYmxlX21lbShjcyk7CisKIAlyZXQgPSBncG1jX2NzX2RlbGV0ZV9tZW0oY3MpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OworCiAJcmV0ID0gZ3BtY19jc19pbnNlcnRfbWVtKGNzLCBiYXNlLCBzaXplKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXQgPSBncG1jX2NzX2VuYWJsZV9tZW0oY3MsIGJhc2UsIHNpemUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIDA7CisJcmV0ID0gZ3BtY19jc19zZXRfbWVtY29uZihjcywgYmFzZSwgc2l6ZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgZ3BtY19jc19yZXF1ZXN0KGludCBjcywgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICpiYXNlKQogewotCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmdwbWNfY3NfbWVtW2NzXTsKKwlzdHJ1Y3QgZ3BtY19jc19kYXRhICpncG1jID0gJmdwbWNfY3NbY3NdOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmdwbWMtPm1lbTsKIAlpbnQgciA9IC0xOwogCiAJaWYgKGNzID4gZ3BtY19jc19udW0pIHsKQEAgLTU4MSwxMiArNzc4LDE3IEBACiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAotCXIgPSBncG1jX2NzX2VuYWJsZV9tZW0oY3MsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJLyogRGlzYWJsZSBDUyB3aGlsZSBjaGFuZ2luZyBiYXNlIGFkZHJlc3MgYW5kIHNpemUgbWFzayAqLworCWdwbWNfY3NfZGlzYWJsZV9tZW0oY3MpOworCisJciA9IGdwbWNfY3Nfc2V0X21lbWNvbmYoY3MsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKHIgPCAwKSB7CiAJCXJlbGVhc2VfcmVzb3VyY2UocmVzKTsKIAkJZ290byBvdXQ7CiAJfQogCisJLyogRW5hYmxlIENTICovCisJZ3BtY19jc19lbmFibGVfbWVtKGNzKTsKIAkqYmFzZSA9IHJlcy0+c3RhcnQ7CiAJZ3BtY19jc19zZXRfcmVzZXJ2ZWQoY3MsIDEpOwogb3V0OgpAQCAtNTk3LDcgKzc5OSw4IEBACiAKIHZvaWQgZ3BtY19jc19mcmVlKGludCBjcykKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UJKnJlcyA9ICZncG1jX2NzX21lbVtjc107CisJc3RydWN0IGdwbWNfY3NfZGF0YSAqZ3BtYyA9ICZncG1jX2NzW2NzXTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZncG1jLT5tZW07CiAKIAlzcGluX2xvY2soJmdwbWNfbWVtX2xvY2spOwogCWlmIChjcyA+PSBncG1jX2NzX251bSB8fCBjcyA8IDAgfHwgIWdwbWNfY3NfcmVzZXJ2ZWQoY3MpKSB7CkBAIC0xMzk0LDggKzE1OTcsNiBAQAogCWlmIChncG1jX25hbmRfZGF0YS0+ZWxtX29mX25vZGUgPT0gTlVMTCkKIAkJZ3BtY19uYW5kX2RhdGEtPmVsbV9vZl9ub2RlID0KIAkJCQkJb2ZfcGFyc2VfcGhhbmRsZShjaGlsZCwgImVsbV9pZCIsIDApOwotCWlmIChncG1jX25hbmRfZGF0YS0+ZWxtX29mX25vZGUgPT0gTlVMTCkKLQkJcHJfd2FybigiJXM6IHRpLGVsbS1pZCBwcm9wZXJ0eSBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKIAogCS8qIHNlbGVjdCBlY2Mtc2NoZW1lIGZvciBOQU5EICovCiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGNoaWxkLCAidGksbmFuZC1lY2Mtb3B0IiwgJnMpKSB7CkBAIC0xNTExLDcgKzE3MTIsOSBAQAogCXN0cnVjdCBncG1jX3RpbWluZ3MgZ3BtY190OwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJdW5zaWduZWQgbG9uZyBiYXNlOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IHJldCwgY3M7CisJdTMyIHZhbDsKIAogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgInJlZyIsICZjcykgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIGhhcyBubyAncmVnJyBwcm9wZXJ0eVxuIiwKQEAgLTE1MjUsMjggKzE3MjgsNDEgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBkZXZpY2UKKwkgKiBvbiBhIHNpbmdsZSBjaGlwIHNlbGVjdC4gSWYgc28sIHVzZSB0aGUgYWxyZWFkeSBpbml0aWFsaXplZAorCSAqIHRpbWluZ3MuCisJICovCisJbmFtZSA9IGdwbWNfY3NfZ2V0X25hbWUoY3MpOworCWlmIChuYW1lICYmIGNoaWxkLT5uYW1lICYmIG9mX25vZGVfY21wKGNoaWxkLT5uYW1lLCBuYW1lKSA9PSAwKQorCQkJZ290byBub190aW1pbmdzOworCiAJcmV0ID0gZ3BtY19jc19yZXF1ZXN0KGNzLCByZXNvdXJjZV9zaXplKCZyZXMpLCAmYmFzZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgR1BNQyBDUyAlZFxuIiwgY3MpOwogCQlyZXR1cm4gcmV0OwogCX0KKwlncG1jX2NzX3NldF9uYW1lKGNzLCBjaGlsZC0+bmFtZSk7CisKKwlncG1jX3JlYWRfc2V0dGluZ3NfZHQoY2hpbGQsICZncG1jX3MpOworCWdwbWNfcmVhZF90aW1pbmdzX2R0KGNoaWxkLCAmZ3BtY190KTsKIAogCS8qCiAJICogRm9yIHNvbWUgR1BNQyBkZXZpY2VzIHdlIHN0aWxsIG5lZWQgdG8gcmVseSBvbiB0aGUgYm9vdGxvYWRlcgotCSAqIHRpbWluZ3MgYmVjYXVzZSB0aGUgZGV2aWNlcyBjYW4gYmUgY29ubmVjdGVkIHZpYSBGUEdBLiBTbyBmYXIKLQkgKiB0aGUgbGlzdCBpcyBzbWM5MXggb24gdGhlIG9tYXAyIFNEUCBib2FyZHMsIGFuZCA4MjUwIG9uIHpvb21zLgotCSAqIFJFVklTSVQ6IEFkZCB0aW1pbmcgc3VwcG9ydCBmcm9tIHNsbHM2NDRnLnBkZiBhbmQgZnJvbSB0aGUKLQkgKiBsYW45MWM5NiBtYW51YWwuCisJICogdGltaW5ncyBiZWNhdXNlIHRoZSBkZXZpY2VzIGNhbiBiZSBjb25uZWN0ZWQgdmlhIEZQR0EuCisJICogUkVWSVNJVDogQWRkIHRpbWluZyBzdXBwb3J0IGZyb20gc2xsczY0NGcucGRmLgogCSAqLwotCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgIm5zMTY1NTBhIikgfHwKLQkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsICJzbXNjLGxhbjkxYzk0IikgfHwKLQkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsICJzbXNjLGxhbjkxYzExMSIpKSB7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsCi0JCQkgIiVzIHVzaW5nIGJvb3Rsb2FkZXIgdGltaW5ncyBvbiBDUyVkXG4iLAotCQkJIGNoaWxkLT5uYW1lLCBjcyk7CisJaWYgKCFncG1jX3QuY3NfcmRfb2ZmKSB7CisJCVdBUk4oMSwgImVuYWJsZSBHUE1DIGRlYnVnIHRvIGNvbmZpZ3VyZSAuZHRzIHRpbWluZ3MgZm9yIENTJWlcbiIsCisJCQljcyk7CisJCWdwbWNfY3Nfc2hvd190aW1pbmdzKGNzLAorCQkJCSAgICAgInBsZWFzZSBhZGQgR1BNQyBib290bG9hZGVyIHRpbWluZ3MgdG8gLmR0cyIpOwogCQlnb3RvIG5vX3RpbWluZ3M7CiAJfQogCisJLyogQ1MgbXVzdCBiZSBkaXNhYmxlZCB3aGlsZSBtYWtpbmcgY2hhbmdlcyB0byBncG1jIGNvbmZpZ3VyYXRpb24gKi8KKwlncG1jX2NzX2Rpc2FibGVfbWVtKGNzKTsKKwogCS8qCiAJICogRklYTUU6IGdwbWNfY3NfcmVxdWVzdCgpIHdpbGwgbWFwIHRoZSBDUyB0byBhbiBhcmJpdGFyeQogCSAqIGxvY2F0aW9uIGluIHRoZSBncG1jIGFkZHJlc3Mgc3BhY2UuIFdoZW4gYm9vdGluZyB3aXRoCkBAIC0xNTYyLDggKzE3NzgsNiBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlncG1jX3JlYWRfc2V0dGluZ3NfZHQoY2hpbGQsICZncG1jX3MpOwotCiAJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJiYW5rLXdpZHRoIiwgJmdwbWNfcy5kZXZpY2Vfd2lkdGgpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKQEAgLTE1NzIsOCArMTc4NiwyMCBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKIAotCWdwbWNfcmVhZF90aW1pbmdzX2R0KGNoaWxkLCAmZ3BtY190KTsKLQlncG1jX2NzX3NldF90aW1pbmdzKGNzLCAmZ3BtY190KTsKKwlyZXQgPSBncG1jX2NzX3NldF90aW1pbmdzKGNzLCAmZ3BtY190KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzZXQgZ3BtYyB0aW1pbmdzIGZvcjogJXNcbiIsCisJCQljaGlsZC0+bmFtZSk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIENsZWFyIGxpbWl0ZWQgYWRkcmVzcyBpLmUuIGVuYWJsZSBBMjYtQTExICovCisJdmFsID0gZ3BtY19yZWFkX3JlZyhHUE1DX0NPTkZJRyk7CisJdmFsICY9IH5HUE1DX0NPTkZJR19MSU1JVEVEQUREUkVTUzsKKwlncG1jX3dyaXRlX3JlZyhHUE1DX0NPTkZJRywgdmFsKTsKKworCS8qIEVuYWJsZSBDUyByZWdpb24gKi8KKwlncG1jX2NzX2VuYWJsZV9tZW0oY3MpOwogCiBub190aW1pbmdzOgogCWlmIChvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKGNoaWxkLCBOVUxMLCAmcGRldi0+ZGV2KSkKQEAgLTE2NzAsMTMgKzE4OTYsMTggQEAKIAllbHNlCiAJCWdwbWNfaXJxID0gcmVzLT5zdGFydDsKIAotCWdwbWNfbDNfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJZ3BtY19sM19jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOwogCWlmIChJU19FUlIoZ3BtY19sM19jbGspKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yOiBjbGtfZ2V0XG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBHUE1DIGZja1xuIik7CiAJCWdwbWNfaXJxID0gMDsKIAkJcmV0dXJuIFBUUl9FUlIoZ3BtY19sM19jbGspOwogCX0KIAorCWlmICghY2xrX2dldF9yYXRlKGdwbWNfbDNfY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIEdQTUMgZmNrIGNsb2NrIHJhdGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOwogCkBAIC0xNzA4LDkgKzE5MzksNiBAQAogCWlmIChncG1jX3NldHVwX2lycSgpIDwgMCkKIAkJZGV2X3dhcm4oZ3BtY19kZXYsICJncG1jX3NldHVwX2lycSBmYWlsZWRcbiIpOwogCi0JLyogTm93IHRoZSBHUE1DIGlzIGluaXRpYWxpc2VkLCB1bnJlc2VydmUgdGhlIGNoaXAtc2VsZWN0cyAqLwotCWdwbWNfY3NfbWFwID0gMDsKLQogCWlmICghcGRldi0+ZGV2Lm9mX25vZGUpIHsKIAkJZ3BtY19jc19udW0JID0gR1BNQ19DU19OVU07CiAJCWdwbWNfbnJfd2FpdHBpbnMgPSBHUE1DX05SX1dBSVRQSU5TOwpAQCAtMTcxOSw3ICsxOTQ3LDYgQEAKIAlyYyA9IGdwbWNfcHJvYmVfZHQocGRldik7CiAJaWYgKHJjIDwgMCkgewogCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZwZGV2LT5kZXYpOwotCQljbGtfcHV0KGdwbWNfbDNfY2xrKTsKIAkJZGV2X2VycihncG1jX2RldiwgImZhaWxlZCB0byBwcm9iZSBEVCBwYXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTE3NzcsMzUgKzIwMDQsOSBAQAogCiB9CiAKLW9tYXBfcG9zdGNvcmVfaW5pdGNhbGwoZ3BtY19pbml0KTsKK3Bvc3Rjb3JlX2luaXRjYWxsKGdwbWNfaW5pdCk7CiBtb2R1bGVfZXhpdChncG1jX2V4aXQpOwogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2dwbWNfaW5pdCh2b2lkKQotewotCXN0cnVjdCBvbWFwX2h3bW9kICpvaDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCWNoYXIgKm9oX25hbWUgPSAiZ3BtYyI7Ci0KLQkvKgotCSAqIGlmIHRoZSBib2FyZCBib290cyB1cCB3aXRoIGEgcG9wdWxhdGVkIERULCBkbyBub3QKLQkgKiBtYW51YWxseSBhZGQgdGhlIGRldmljZSBmcm9tIHRoaXMgaW5pdGNhbGwKLQkgKi8KLQlpZiAob2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlvaCA9IG9tYXBfaHdtb2RfbG9va3VwKG9oX25hbWUpOwotCWlmICghb2gpIHsKLQkJcHJfZXJyKCJDb3VsZCBub3QgbG9vayB1cCAlc1xuIiwgb2hfbmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXBkZXYgPSBvbWFwX2RldmljZV9idWlsZChERVZJQ0VfTkFNRSwgLTEsIG9oLCBOVUxMLCAwKTsKLQlXQVJOKElTX0VSUihwZGV2KSwgImNvdWxkIG5vdCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXNcbiIsIG9oX25hbWUpOwotCi0JcmV0dXJuIFBUUl9SRVQocGRldik7Ci19Ci1vbWFwX3Bvc3Rjb3JlX2luaXRjYWxsKG9tYXBfZ3BtY19pbml0KTsKLQogc3RhdGljIGlycXJldHVybl90IGdwbWNfaGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS90ZWdyYS9LY29uZmlnIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzEwODc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvS2NvbmZpZwpAQCAtMCwwICsxLDcgQEAKK2NvbmZpZyBURUdSQV9NQworCWJvb2wgIk5WSURJQSBUZWdyYSBNZW1vcnkgQ29udHJvbGxlciBzdXBwb3J0IgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQVJDSF9URUdSQQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNZW1vcnkgQ29udHJvbGxlciAoTUMpIGhhcmR3YXJlIGZvdW5kIG9uCisJICBOVklESUEgVGVncmEgU29Dcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL01ha2VmaWxlIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5ZjQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAordGVncmEtbWMteSA6PSBtYy5vCisKK3RlZ3JhLW1jLSQoQ09ORklHX0FSQ0hfVEVHUkFfM3hfU09DKSAgKz0gdGVncmEzMC5vCit0ZWdyYS1tYy0kKENPTkZJR19BUkNIX1RFR1JBXzExNF9TT0MpICs9IHRlZ3JhMTE0Lm8KK3RlZ3JhLW1jLSQoQ09ORklHX0FSQ0hfVEVHUkFfMTI0X1NPQykgKz0gdGVncmExMjQubworCitvYmotJChDT05GSUdfVEVHUkFfTUMpICs9IHRlZ3JhLW1jLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL21jLmMgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS9tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlM2M0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS9tYy5jCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJtYy5oIgorCisjZGVmaW5lIE1DX0lOVFNUQVRVUyAweDAwMAorI2RlZmluZSAgTUNfSU5UX0RFQ0VSUl9NVFMgKDEgPDwgMTYpCisjZGVmaW5lICBNQ19JTlRfU0VDRVJSX1NFQyAoMSA8PCAxMykKKyNkZWZpbmUgIE1DX0lOVF9ERUNFUlJfVlBSICgxIDw8IDEyKQorI2RlZmluZSAgTUNfSU5UX0lOVkFMSURfQVBCX0FTSURfVVBEQVRFICgxIDw8IDExKQorI2RlZmluZSAgTUNfSU5UX0lOVkFMSURfU01NVV9QQUdFICgxIDw8IDEwKQorI2RlZmluZSAgTUNfSU5UX0FSQklUUkFUSU9OX0VNRU0gKDEgPDwgOSkKKyNkZWZpbmUgIE1DX0lOVF9TRUNVUklUWV9WSU9MQVRJT04gKDEgPDwgOCkKKyNkZWZpbmUgIE1DX0lOVF9ERUNFUlJfRU1FTSAoMSA8PCA2KQorCisjZGVmaW5lIE1DX0lOVE1BU0sgMHgwMDQKKworI2RlZmluZSBNQ19FUlJfU1RBVFVTIDB4MDgKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfVFlQRV9TSElGVCAyOAorI2RlZmluZSAgTUNfRVJSX1NUQVRVU19UWVBFX0lOVkFMSURfU01NVV9QQUdFICg2IDw8IE1DX0VSUl9TVEFUVVNfVFlQRV9TSElGVCkKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfVFlQRV9NQVNLICgweDcgPDwgTUNfRVJSX1NUQVRVU19UWVBFX1NISUZUKQorI2RlZmluZSAgTUNfRVJSX1NUQVRVU19SRUFEQUJMRSAoMSA8PCAyNykKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfV1JJVEFCTEUgKDEgPDwgMjYpCisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX05PTlNFQ1VSRSAoMSA8PCAyNSkKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfQURSX0hJX1NISUZUIDIwCisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX0FEUl9ISV9NQVNLIDB4MworI2RlZmluZSAgTUNfRVJSX1NUQVRVU19TRUNVUklUWSAoMSA8PCAxNykKKyNkZWZpbmUgIE1DX0VSUl9TVEFUVVNfUlcgKDEgPDwgMTYpCisjZGVmaW5lICBNQ19FUlJfU1RBVFVTX0NMSUVOVF9NQVNLIDB4N2YKKworI2RlZmluZSBNQ19FUlJfQURSIDB4MGMKKworI2RlZmluZSBNQ19FTUVNX0FSQl9DRkcgMHg5MAorI2RlZmluZSAgTUNfRU1FTV9BUkJfQ0ZHX0NZQ0xFU19QRVJfVVBEQVRFKHgpCSgoKHgpICYgMHgxZmYpIDw8IDApCisjZGVmaW5lICBNQ19FTUVNX0FSQl9DRkdfQ1lDTEVTX1BFUl9VUERBVEVfTUFTSwkweDFmZgorI2RlZmluZSBNQ19FTUVNX0FSQl9NSVNDMCAweGQ4CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRlZ3JhX21jX29mX21hdGNoW10gPSB7CisjaWZkZWYgQ09ORklHX0FSQ0hfVEVHUkFfM3hfU09DCisJeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEzMC1tYyIsIC5kYXRhID0gJnRlZ3JhMzBfbWNfc29jIH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9URUdSQV8xMTRfU09DCisJeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmExMTQtbWMiLCAuZGF0YSA9ICZ0ZWdyYTExNF9tY19zb2MgfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX1RFR1JBXzEyNF9TT0MKKwl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTEyNC1tYyIsIC5kYXRhID0gJnRlZ3JhMTI0X21jX3NvYyB9LAorI2VuZGlmCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGVncmFfbWNfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IHRlZ3JhX21jX3NldHVwX2xhdGVuY3lfYWxsb3dhbmNlKHN0cnVjdCB0ZWdyYV9tYyAqbWMpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHRpY2s7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHZhbHVlOworCisJLyogY29tcHV0ZSB0aGUgbnVtYmVyIG9mIE1DIGNsb2NrIGN5Y2xlcyBwZXIgdGljayAqLworCXRpY2sgPSBtYy0+dGljayAqIGNsa19nZXRfcmF0ZShtYy0+Y2xrKTsKKwlkb19kaXYodGljaywgTlNFQ19QRVJfU0VDKTsKKworCXZhbHVlID0gcmVhZGwobWMtPnJlZ3MgKyBNQ19FTUVNX0FSQl9DRkcpOworCXZhbHVlICY9IH5NQ19FTUVNX0FSQl9DRkdfQ1lDTEVTX1BFUl9VUERBVEVfTUFTSzsKKwl2YWx1ZSB8PSBNQ19FTUVNX0FSQl9DRkdfQ1lDTEVTX1BFUl9VUERBVEUodGljayk7CisJd3JpdGVsKHZhbHVlLCBtYy0+cmVncyArIE1DX0VNRU1fQVJCX0NGRyk7CisKKwkvKiB3cml0ZSBsYXRlbmN5IGFsbG93YW5jZSBkZWZhdWx0cyAqLworCWZvciAoaSA9IDA7IGkgPCBtYy0+c29jLT5udW1fY2xpZW50czsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCB0ZWdyYV9tY19sYSAqbGEgPSAmbWMtPnNvYy0+Y2xpZW50c1tpXS5sYTsKKwkJdTMyIHZhbHVlOworCisJCXZhbHVlID0gcmVhZGwobWMtPnJlZ3MgKyBsYS0+cmVnKTsKKwkJdmFsdWUgJj0gfihsYS0+bWFzayA8PCBsYS0+c2hpZnQpOworCQl2YWx1ZSB8PSAobGEtPmRlZiAmIGxhLT5tYXNrKSA8PCBsYS0+c2hpZnQ7CisJCXdyaXRlbCh2YWx1ZSwgbWMtPnJlZ3MgKyBsYS0+cmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YXR1c19uYW1lc1szMl0gPSB7CisJWyAxXSA9ICJFeHRlcm5hbCBpbnRlcnJ1cHQiLAorCVsgNl0gPSAiRU1FTSBhZGRyZXNzIGRlY29kZSBlcnJvciIsCisJWyA4XSA9ICJTZWN1cml0eSB2aW9sYXRpb24iLAorCVsgOV0gPSAiRU1FTSBhcmJpdHJhdGlvbiBlcnJvciIsCisJWzEwXSA9ICJQYWdlIGZhdWx0IiwKKwlbMTFdID0gIkludmFsaWQgQVBCIEFTSUQgdXBkYXRlIiwKKwlbMTJdID0gIlZQUiB2aW9sYXRpb24iLAorCVsxM10gPSAiU2VjdXJlIGNhcnZlb3V0IHZpb2xhdGlvbiIsCisJWzE2XSA9ICJNVFMgY2FydmVvdXQgdmlvbGF0aW9uIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlcnJvcl9uYW1lc1s4XSA9IHsKKwlbMl0gPSAiRU1FTSBkZWNvZGUgZXJyb3IiLAorCVszXSA9ICJUcnVzdFpvbmUgdmlvbGF0aW9uIiwKKwlbNF0gPSAiQ2FydmVvdXQgdmlvbGF0aW9uIiwKKwlbNl0gPSAiU01NVSB0cmFuc2xhdGlvbiBlcnJvciIsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgdGVncmFfbWNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHRlZ3JhX21jICptYyA9IGRhdGE7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMsIG1hc2s7CisJdW5zaWduZWQgaW50IGJpdDsKKworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgdG8gYXZvaWQgZmxvb2RpbmcgKi8KKwlzdGF0dXMgPSBtY19yZWFkbChtYywgTUNfSU5UU1RBVFVTKTsKKwltYXNrID0gbWNfcmVhZGwobWMsIE1DX0lOVE1BU0spOworCisJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZzdGF0dXMsIDMyKSB7CisJCWNvbnN0IGNoYXIgKmVycm9yID0gc3RhdHVzX25hbWVzW2JpdF0gPzogInVua25vd24iOworCQljb25zdCBjaGFyICpjbGllbnQgPSAidW5rbm93biIsICpkZXNjOworCQljb25zdCBjaGFyICpkaXJlY3Rpb24sICpzZWN1cmU7CisJCXBoeXNfYWRkcl90IGFkZHIgPSAwOworCQl1bnNpZ25lZCBpbnQgaTsKKwkJY2hhciBwZXJtWzddOworCQl1OCBpZCwgdHlwZTsKKwkJdTMyIHZhbHVlOworCisJCXZhbHVlID0gbWNfcmVhZGwobWMsIE1DX0VSUl9TVEFUVVMpOworCisjaWZkZWYgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUCisJCWlmIChtYy0+c29jLT5udW1fYWRkcmVzc19iaXRzID4gMzIpIHsKKwkJCWFkZHIgPSAoKHZhbHVlID4+IE1DX0VSUl9TVEFUVVNfQURSX0hJX1NISUZUKSAmCisJCQkJTUNfRVJSX1NUQVRVU19BRFJfSElfTUFTSyk7CisJCQlhZGRyIDw8PSAzMjsKKwkJfQorI2VuZGlmCisKKwkJaWYgKHZhbHVlICYgTUNfRVJSX1NUQVRVU19SVykKKwkJCWRpcmVjdGlvbiA9ICJ3cml0ZSI7CisJCWVsc2UKKwkJCWRpcmVjdGlvbiA9ICJyZWFkIjsKKworCQlpZiAodmFsdWUgJiBNQ19FUlJfU1RBVFVTX1NFQ1VSSVRZKQorCQkJc2VjdXJlID0gInNlY3VyZSAiOworCQllbHNlCisJCQlzZWN1cmUgPSAiIjsKKworCQlpZCA9IHZhbHVlICYgTUNfRVJSX1NUQVRVU19DTElFTlRfTUFTSzsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWMtPnNvYy0+bnVtX2NsaWVudHM7IGkrKykgeworCQkJaWYgKG1jLT5zb2MtPmNsaWVudHNbaV0uaWQgPT0gaWQpIHsKKwkJCQljbGllbnQgPSBtYy0+c29jLT5jbGllbnRzW2ldLm5hbWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQl0eXBlID0gKHZhbHVlICYgTUNfRVJSX1NUQVRVU19UWVBFX01BU0spID4+CisJCSAgICAgICBNQ19FUlJfU1RBVFVTX1RZUEVfU0hJRlQ7CisJCWRlc2MgPSBlcnJvcl9uYW1lc1t0eXBlXTsKKworCQlzd2l0Y2ggKHZhbHVlICYgTUNfRVJSX1NUQVRVU19UWVBFX01BU0spIHsKKwkJY2FzZSBNQ19FUlJfU1RBVFVTX1RZUEVfSU5WQUxJRF9TTU1VX1BBR0U6CisJCQlwZXJtWzBdID0gJyAnOworCQkJcGVybVsxXSA9ICdbJzsKKworCQkJaWYgKHZhbHVlICYgTUNfRVJSX1NUQVRVU19SRUFEQUJMRSkKKwkJCQlwZXJtWzJdID0gJ1InOworCQkJZWxzZQorCQkJCXBlcm1bMl0gPSAnLSc7CisKKwkJCWlmICh2YWx1ZSAmIE1DX0VSUl9TVEFUVVNfV1JJVEFCTEUpCisJCQkJcGVybVszXSA9ICdXJzsKKwkJCWVsc2UKKwkJCQlwZXJtWzNdID0gJy0nOworCisJCQlpZiAodmFsdWUgJiBNQ19FUlJfU1RBVFVTX05PTlNFQ1VSRSkKKwkJCQlwZXJtWzRdID0gJy0nOworCQkJZWxzZQorCQkJCXBlcm1bNF0gPSAnUyc7CisKKwkJCXBlcm1bNV0gPSAnXSc7CisJCQlwZXJtWzZdID0gJ1wwJzsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwZXJtWzBdID0gJ1wwJzsKKwkJCWJyZWFrOworCQl9CisKKwkJdmFsdWUgPSBtY19yZWFkbChtYywgTUNfRVJSX0FEUik7CisJCWFkZHIgfD0gdmFsdWU7CisKKwkJZGV2X2Vycl9yYXRlbGltaXRlZChtYy0+ZGV2LCAiJXM6ICVzJXMgQCVwYTogJXMgKCVzJXMpXG4iLAorCQkJCSAgICBjbGllbnQsIHNlY3VyZSwgZGlyZWN0aW9uLCAmYWRkciwgZXJyb3IsCisJCQkJICAgIGRlc2MsIHBlcm0pOworCX0KKworCS8qIGNsZWFyIGludGVycnVwdHMgKi8KKwltY193cml0ZWwobWMsIHN0YXR1cywgTUNfSU5UU1RBVFVTKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB0ZWdyYV9tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCB0ZWdyYV9tYyAqbWM7CisJdTMyIHZhbHVlOworCWludCBlcnI7CisKKwltYXRjaCA9IG9mX21hdGNoX25vZGUodGVncmFfbWNfb2ZfbWF0Y2gsIHBkZXYtPmRldi5vZl9ub2RlKTsKKwlpZiAoIW1hdGNoKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1jID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTsKKwltYy0+c29jID0gbWF0Y2gtPmRhdGE7CisJbWMtPmRldiA9ICZwZGV2LT5kZXY7CisKKwkvKiBsZW5ndGggb2YgTUMgdGljayBpbiBuYW5vc2Vjb25kcyAqLworCW1jLT50aWNrID0gMzA7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1jLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihtYy0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKG1jLT5yZWdzKTsKKworCW1jLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgIm1jIik7CisJaWYgKElTX0VSUihtYy0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IE1DIGNsb2NrOiAlbGRcbiIsCisJCQlQVFJfRVJSKG1jLT5jbGspKTsKKwkJcmV0dXJuIFBUUl9FUlIobWMtPmNsayk7CisJfQorCisJZXJyID0gdGVncmFfbWNfc2V0dXBfbGF0ZW5jeV9hbGxvd2FuY2UobWMpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzZXR1cCBsYXRlbmN5IGFsbG93YW5jZTogJWRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChJU19FTkFCTEVEKENPTkZJR19URUdSQV9JT01NVV9TTU1VKSkgeworCQltYy0+c21tdSA9IHRlZ3JhX3NtbXVfcHJvYmUoJnBkZXYtPmRldiwgbWMtPnNvYy0+c21tdSwgbWMpOworCQlpZiAoSVNfRVJSKG1jLT5zbW11KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHByb2JlIFNNTVU6ICVsZFxuIiwKKwkJCQlQVFJfRVJSKG1jLT5zbW11KSk7CisJCQlyZXR1cm4gUFRSX0VSUihtYy0+c21tdSk7CisJCX0KKwl9CisKKwltYy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAobWMtPmlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW50ZXJydXB0IG5vdCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gbWMtPmlycTsKKwl9CisKKwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIG1jLT5pcnEsIHRlZ3JhX21jX2lycSwgSVJRRl9TSEFSRUQsCisJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIG1jKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJUlEjJXU6ICVkXG4iLCBtYy0+aXJxLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl2YWx1ZSA9IE1DX0lOVF9ERUNFUlJfTVRTIHwgTUNfSU5UX1NFQ0VSUl9TRUMgfCBNQ19JTlRfREVDRVJSX1ZQUiB8CisJCU1DX0lOVF9JTlZBTElEX0FQQl9BU0lEX1VQREFURSB8IE1DX0lOVF9JTlZBTElEX1NNTVVfUEFHRSB8CisJCU1DX0lOVF9BUkJJVFJBVElPTl9FTUVNIHwgTUNfSU5UX1NFQ1VSSVRZX1ZJT0xBVElPTiB8CisJCU1DX0lOVF9ERUNFUlJfRU1FTTsKKwltY193cml0ZWwobWMsIHZhbHVlLCBNQ19JTlRNQVNLKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV9tY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGVncmEtbWMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0ZWdyYV9tY19vZl9tYXRjaCwKKwkJLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLAorCX0sCisJLnByZXZlbnRfZGVmZXJyZWRfcHJvYmUgPSB0cnVlLAorCS5wcm9iZSA9IHRlZ3JhX21jX3Byb2JlLAorfTsKKworc3RhdGljIGludCB0ZWdyYV9tY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGVncmFfbWNfZHJpdmVyKTsKK30KK2FyY2hfaW5pdGNhbGwodGVncmFfbWNfaW5pdCk7CisKK01PRFVMRV9BVVRIT1IoIlRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5WSURJQSBUZWdyYSBNZW1vcnkgQ29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL21jLmggYi9kcml2ZXJzL21lbW9yeS90ZWdyYS9tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDIxMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS9tYy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgTUVNT1JZX1RFR1JBX01DX0gKKyNkZWZpbmUgTUVNT1JZX1RFR1JBX01DX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPHNvYy90ZWdyYS9tYy5oPgorCitzdGF0aWMgaW5saW5lIHUzMiBtY19yZWFkbChzdHJ1Y3QgdGVncmFfbWMgKm1jLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwobWMtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWNfd3JpdGVsKHN0cnVjdCB0ZWdyYV9tYyAqbWMsIHUzMiB2YWx1ZSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJd3JpdGVsKHZhbHVlLCBtYy0+cmVncyArIG9mZnNldCk7Cit9CisKKyNpZmRlZiBDT05GSUdfQVJDSF9URUdSQV8zeF9TT0MKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGVncmFfbWNfc29jIHRlZ3JhMzBfbWNfc29jOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9URUdSQV8xMTRfU09DCitleHRlcm4gY29uc3Qgc3RydWN0IHRlZ3JhX21jX3NvYyB0ZWdyYTExNF9tY19zb2M7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX1RFR1JBXzEyNF9TT0MKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGVncmFfbWNfc29jIHRlZ3JhMTI0X21jX3NvYzsKKyNlbmRpZgorCisjZW5kaWYgLyogTUVNT1JZX1RFR1JBX01DX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMTE0LmMgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTExNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMWU5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTExNC5jCkBAIC0wLDAgKzEsOTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTExNC1tYy5oPgorCisjaW5jbHVkZSAibWMuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9tY19jbGllbnQgdGVncmExMTRfbWNfY2xpZW50c1tdID0geworCXsKKwkJLmlkID0gMHgwMCwKKwkJLm5hbWUgPSAicHRjciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QVEMsCisJfSwgeworCQkuaWQgPSAweDAxLAorCQkubmFtZSA9ICJkaXNwbGF5MGEiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDIsCisJCS5uYW1lID0gImRpc3BsYXkwYWIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDAzLAorCQkubmFtZSA9ICJkaXNwbGF5MGIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA0LAorCQkubmFtZSA9ICJkaXNwbGF5MGJiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDUsCisJCS5uYW1lID0gImRpc3BsYXkwYyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmVjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwNiwKKwkJLm5hbWUgPSAiZGlzcGxheTBjYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDksCisJCS5uYW1lID0gImVwcHVwIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzAwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDMzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwYSwKKwkJLm5hbWUgPSAiZzJwciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9HMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwOSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGIsCisJCS5uYW1lID0gImcyc3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDExLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwZiwKKwkJLm5hbWUgPSAiYXZwY2FybTdyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDEwLAorCQkubmFtZSA9ICJkaXNwbGF5aGMiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NjgsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDExLAorCQkubmFtZSA9ICJkaXNwbGF5aGNiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg2OCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTIsCisJCS5uYW1lID0gImZkY2RyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMzNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTMsCisJCS5uYW1lID0gImZkY2RyZDIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzM2MsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE0LAorCQkubmFtZSA9ICJnMmRyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0cyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzBjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNSwKKwkJLm5hbWUgPSAiaGRhciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IREEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDIxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE2LAorCQkubmFtZSA9ICJob3N0MXhkbWFyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzEwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNywKKwkJLm5hbWUgPSAiaG9zdDF4ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YTUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE4LAorCQkubmFtZSA9ICJpZHhzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMzQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBiLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxYywKKwkJLm5hbWUgPSAibXNlbmNzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVNFTkMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDFkLAorCQkubmFtZSA9ICJwcGNzYWhiZG1hciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZSwKKwkJLm5hbWUgPSAicHBjc2FoYnNsdnIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMzAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0NCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZTgsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDIwLAorCQkubmFtZSA9ICJ0ZXhsMnNyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzM4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBjLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMiwKKwkJLm5hbWUgPSAidmRlYnNldnIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDIzLAorCQkubmFtZSA9ICJ2ZGVtYmVyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjQsCisJCS5uYW1lID0gInZkZW1jZXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSA0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YjgsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI1LAorCQkubmFtZSA9ICJ2ZGV0cGVyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhlZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjYsCisJCS5uYW1lID0gIm1wY29yZWxwciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkVMUCwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyNywKKwkJLm5hbWUgPSAibXBjb3JlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkUsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjgsCisJCS5uYW1lID0gImVwcHUiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSA4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDMzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyOSwKKwkJLm5hbWUgPSAiZXBwdiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9FUFAsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDksCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg2YywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmEsCisJCS5uYW1lID0gImVwcHkiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzA0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg2YywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmIsCisJCS5uYW1lID0gIm1zZW5jc3dyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01TRU5DLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmMsCisJCS5uYW1lID0gInZpd3NiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzY0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQ3LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyZCwKKwkJLm5hbWUgPSAidml3dSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmUsCisJCS5uYW1lID0gInZpd3YiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyZiwKKwkJLm5hbWUgPSAidml3eSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0NywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzAsCisJCS5uYW1lID0gImcyZHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMGMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMyLAorCQkubmFtZSA9ICJhdnBjYXJtN3ciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQVZQQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMzLAorCQkubmFtZSA9ICJmZGNkd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMzgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNCwKKwkJLm5hbWUgPSAiZmRjd3IyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNSwKKwkJLm5hbWUgPSAiaGRhdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IREEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDIxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNiwKKwkJLm5hbWUgPSAiaG9zdDF4dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgyNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzcsCisJCS5uYW1lID0gImlzcHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzFjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzOCwKKwkJLm5hbWUgPSAibXBjb3JlbHB3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QQ09SRUxQLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzOSwKKwkJLm5hbWUgPSAibXBjb3JldyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkUsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNiLAorCQkubmFtZSA9ICJwcGNzYWhiZG1hdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGE1LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzYywKKwkJLm5hbWUgPSAicHBjc2FoYnNsdnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZTgsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNlLAorCQkubmFtZSA9ICJ2ZGVic2V2dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNWMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNmLAorCQkubmFtZSA9ICJ2ZGVkYmd3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMzEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1YywKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDQwLAorCQkubmFtZSA9ICJ2ZGVtYmV3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzYwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDg5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0MSwKKwkJLm5hbWUgPSAidmRldHBtdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2MCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDRhLAorCQkubmFtZSA9ICJ4dXNiX2hvc3RyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfSE9TVCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM3YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhhNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGIsCisJCS5uYW1lID0gInh1c2JfaG9zdHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfWFVTQl9IT1NULAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzdjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhhNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGMsCisJCS5uYW1lID0gInh1c2JfZGV2ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0RFViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhhNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGQsCisJCS5uYW1lID0gInh1c2JfZGV2dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0RFViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4MCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YTUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDRlLAorCQkubmFtZSA9ICJmZGNkd3IzIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4Mzg4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0ZiwKKwkJLm5hbWUgPSAiZmRjZHJkMyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwYywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTAsCisJCS5uYW1lID0gImZkY3dyNCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDUxLAorCQkubmFtZSA9ICJmZGNyZDQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDE3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzODQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBjLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1MiwKKwkJLm5hbWUgPSAiZW11Y2lmciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9FTVVDSUYsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTMsCisJCS5uYW1lID0gImVtdWNpZnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRU1VQ0lGLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzOGMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1NCwKKwkJLm5hbWUgPSAidHNlY3NyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9UU0VDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAyMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzkwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1NSwKKwkJLm5hbWUgPSAidHNlY3N3ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9UU0VDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAyMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzkwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgdGVncmExMTRfc3dncm91cHNbXSA9IHsKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywgICAgICAgIC5yZWcgPSAweDI0MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwgICAgICAgLnJlZyA9IDB4MjQ0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLCAgICAgICAucmVnID0gMHgyNDggfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9HMiwgICAgICAgIC5yZWcgPSAweDI0YyB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsICAgICAgLnJlZyA9IDB4MjNjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsICAgICAgICAucmVnID0gMHgyNjggfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IREEsICAgICAgIC5yZWcgPSAweDI1NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLCAgICAgICAgLnJlZyA9IDB4MjUwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVNFTkMsICAgICAucmVnID0gMHgyNjQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLCAgICAgIC5yZWcgPSAweDI3MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwgICAgICAgLnJlZyA9IDB4MjdjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksICAgICAgICAucmVnID0gMHgyODAgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9JU1AsICAgICAgIC5yZWcgPSAweDI1OCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfSE9TVCwgLnJlZyA9IDB4Mjg4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfWFVTQl9ERVYsICAucmVnID0gMHgyOGMgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9UU0VDLCAgICAgIC5yZWcgPSAweDI5NCB9LAorfTsKKworc3RhdGljIHZvaWQgdGVncmExMTRfZmx1c2hfZGNhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgIHNpemVfdCBzaXplKQoreworCXBoeXNfYWRkcl90IHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CisJdm9pZCAqdmlydCA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKworCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYSh2aXJ0LCBzaXplKTsKKwlvdXRlcl9mbHVzaF9yYW5nZShwaHlzLCBwaHlzICsgc2l6ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9vcHMgdGVncmExMTRfc21tdV9vcHMgPSB7CisJLmZsdXNoX2RjYWNoZSA9IHRlZ3JhMTE0X2ZsdXNoX2RjYWNoZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9zb2MgdGVncmExMTRfc21tdV9zb2MgPSB7CisJLmNsaWVudHMgPSB0ZWdyYTExNF9tY19jbGllbnRzLAorCS5udW1fY2xpZW50cyA9IEFSUkFZX1NJWkUodGVncmExMTRfbWNfY2xpZW50cyksCisJLnN3Z3JvdXBzID0gdGVncmExMTRfc3dncm91cHMsCisJLm51bV9zd2dyb3VwcyA9IEFSUkFZX1NJWkUodGVncmExMTRfc3dncm91cHMpLAorCS5zdXBwb3J0c19yb3VuZF9yb2Jpbl9hcmJpdHJhdGlvbiA9IGZhbHNlLAorCS5zdXBwb3J0c19yZXF1ZXN0X2xpbWl0ID0gZmFsc2UsCisJLm51bV9hc2lkcyA9IDQsCisJLm9wcyA9ICZ0ZWdyYTExNF9zbW11X29wcywKK307CisKK2NvbnN0IHN0cnVjdCB0ZWdyYV9tY19zb2MgdGVncmExMTRfbWNfc29jID0geworCS5jbGllbnRzID0gdGVncmExMTRfbWNfY2xpZW50cywKKwkubnVtX2NsaWVudHMgPSBBUlJBWV9TSVpFKHRlZ3JhMTE0X21jX2NsaWVudHMpLAorCS5udW1fYWRkcmVzc19iaXRzID0gMzIsCisJLmF0b21fc2l6ZSA9IDMyLAorCS5zbW11ID0gJnRlZ3JhMTE0X3NtbXVfc29jLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMTI0LmMgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTEyNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OGQ0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTEyNC5jCkBAIC0wLDAgKzEsOTk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTEyNC1tYy5oPgorCisjaW5jbHVkZSAibWMuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9tY19jbGllbnQgdGVncmExMjRfbWNfY2xpZW50c1tdID0geworCXsKKwkJLmlkID0gMHgwMCwKKwkJLm5hbWUgPSAicHRjciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QVEMsCisJfSwgeworCQkuaWQgPSAweDAxLAorCQkubmFtZSA9ICJkaXNwbGF5MGEiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhjMiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDIsCisJCS5uYW1lID0gImRpc3BsYXkwYWIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4YzYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDAzLAorCQkubmFtZSA9ICJkaXNwbGF5MGIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA0LAorCQkubmFtZSA9ICJkaXNwbGF5MGJiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDUsCisJCS5uYW1lID0gImRpc3BsYXkwYyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmVjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwNiwKKwkJLm5hbWUgPSAiZGlzcGxheTBjYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGUsCisJCS5uYW1lID0gImFmaXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQUZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmUwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwZiwKKwkJLm5hbWUgPSAiYXZwY2FybTdyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDEwLAorCQkubmFtZSA9ICJkaXNwbGF5aGMiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDExLAorCQkubmFtZSA9ICJkaXNwbGF5aGNiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTUsCisJCS5uYW1lID0gImhkYXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzE4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDI0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNiwKKwkJLm5hbWUgPSAiaG9zdDF4ZG1hciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTcsCisJCS5uYW1lID0gImhvc3QxeHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDIzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxYywKKwkJLm5hbWUgPSAibXNlbmNzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVNFTkMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MjMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDFkLAorCQkubmFtZSA9ICJwcGNzYWhiZG1hciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQ5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZSwKKwkJLm5hbWUgPSAicHBjc2FoYnNsdnIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMzAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0NCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MWEsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDFmLAorCQkubmFtZSA9ICJzYXRhciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TQVRBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAzMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzUwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDY1LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMiwKKwkJLm5hbWUgPSAidmRlYnNldnIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDIzLAorCQkubmFtZSA9ICJ2ZGVtYmVyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgzZCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjQsCisJCS5uYW1lID0gInZkZW1jZXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSA0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NjYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI1LAorCQkubmFtZSA9ICJ2ZGV0cGVyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhhNSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjYsCisJCS5uYW1lID0gIm1wY29yZWxwciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkVMUCwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA0LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyNywKKwkJLm5hbWUgPSAibXBjb3JlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUENPUkUsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmIsCisJCS5uYW1lID0gIm1zZW5jc3dyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01TRU5DLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzI4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzEsCisJCS5uYW1lID0gImFmaXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQUZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmUwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzIsCisJCS5uYW1lID0gImF2cGNhcm03dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BVlBDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmU0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzUsCisJCS5uYW1lID0gImhkYXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzE4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzYsCisJCS5uYW1lID0gImhvc3QxeHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDIyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM4LAorCQkubmFtZSA9ICJtcGNvcmVscHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFTFAsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM5LAorCQkubmFtZSA9ICJtcGNvcmV3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QQ09SRSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzIwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2IsCisJCS5uYW1lID0gInBwY3NhaGJkbWF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDI3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNjLAorCQkubmFtZSA9ICJwcGNzYWhic2x2dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2QsCisJCS5uYW1lID0gInNhdGF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NBVEEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDI5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDY1LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzZSwKKwkJLm5hbWUgPSAidmRlYnNldnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAzMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzVjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzZiwKKwkJLm5hbWUgPSAidmRlZGJndyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNWMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0MCwKKwkJLm5hbWUgPSAidmRlbWJldyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NDEsCisJCS5uYW1lID0gInZkZXRwbXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0NCwKKwkJLm5hbWUgPSAiaXNwcmEiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzcwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDE4LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0NiwKKwkJLm5hbWUgPSAiaXNwd2EiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4Mzc0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0NywKKwkJLm5hbWUgPSAiaXNwd2IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4Mzc0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGEsCisJCS5uYW1lID0gInh1c2JfaG9zdHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfWFVTQl9IT1NULAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzdjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDM5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0YiwKKwkJLm5hbWUgPSAieHVzYl9ob3N0dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0hPU1QsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDExLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzN2MsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0YywKKwkJLm5hbWUgPSAieHVzYl9kZXZyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfREVWLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzgwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDM5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0ZCwKKwkJLm5hbWUgPSAieHVzYl9kZXZ3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfREVWLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzgwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NGUsCisJCS5uYW1lID0gImlzcHJhYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9JU1AyQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTQsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxOCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTAsCisJCS5uYW1lID0gImlzcHdhYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9JU1AyQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NTEsCisJCS5uYW1lID0gImlzcHdiYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9JU1AyQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMTcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM4OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDU0LAorCQkubmFtZSA9ICJ0c2Vjc3JkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1RTRUMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDIwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzOTAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4OWIsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDU1LAorCQkubmFtZSA9ICJ0c2Vjc3dyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1RTRUMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDIxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzOTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1NiwKKwkJLm5hbWUgPSAiYTlhdnBzY3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQTlBVlAsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDIyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDU3LAorCQkubmFtZSA9ICJhOWF2cHNjdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BOUFWUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzAsCisJCQkuYml0ID0gMjMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDNhNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDU4LAorCQkubmFtZSA9ICJncHVzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfR1BVLAorCQkuc21tdSA9IHsKKwkJCS8qIHJlYWQtb25seSAqLworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDI0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYzgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MWEsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDU5LAorCQkubmFtZSA9ICJncHVzd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfR1BVLAorCQkuc21tdSA9IHsKKwkJCS8qIHJlYWQtb25seSAqLworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDI1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYzgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg1YSwKKwkJLm5hbWUgPSAiZGlzcGxheXQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDI2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2MCwKKwkJLm5hbWUgPSAic2RtbWNyYSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzFBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSAwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NDksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDYxLAorCQkubmFtZSA9ICJzZG1tY3JhYSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzJBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYmMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NDksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDYyLAorCQkubmFtZSA9ICJzZG1tY3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMzQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2MwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQ5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2MywKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NETU1DNEEsCisJCS5uYW1lID0gInNkbW1jcmFiIiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2M0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQ5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2NCwKKwkJLm5hbWUgPSAic2RtbWN3YSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzFBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSA0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYjgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2NSwKKwkJLm5hbWUgPSAic2RtbWN3YWEiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMyQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gNSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2JjLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NjYsCisJCS5uYW1lID0gInNkbW1jdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzNBLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSA2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzYzAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDgwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg2NywKKwkJLm5hbWUgPSAic2RtbWN3YWIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUM0QSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2M0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NmMsCisJCS5uYW1lID0gInZpY3NyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSUMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjM0LAorCQkJLmJpdCA9IDEyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzOTQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MWEsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDZkLAorCQkubmFtZSA9ICJ2aWNzd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVklDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSAxMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4Mzk0LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NzIsCisJCS5uYW1lID0gInZpdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMzQsCisJCQkuYml0ID0gMTgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM5OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg4MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NzMsCisJCS5uYW1lID0gImRpc3BsYXlkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzNCwKKwkJCS5iaXQgPSAxOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4M2M4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDUwLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc3dncm91cCB0ZWdyYTEyNF9zd2dyb3Vwc1tdID0geworCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLCAgICAgICAgLnJlZyA9IDB4MjQwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLCAgICAgICAucmVnID0gMHgyNDQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BRkksICAgICAgIC5yZWcgPSAweDIzOCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FWUEMsICAgICAgLnJlZyA9IDB4MjNjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLCAgICAgICAucmVnID0gMHgyNTQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywgICAgICAgIC5yZWcgPSAweDI1MCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01TRU5DLCAgICAgLnJlZyA9IDB4MjY0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywgICAgICAucmVnID0gMHgyNzAgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TQVRBLCAgICAgIC5yZWcgPSAweDI3NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwgICAgICAgLnJlZyA9IDB4MjdjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMiwgICAgICAucmVnID0gMHgyNTggfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9YVVNCX0hPU1QsIC5yZWcgPSAweDI4OCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1hVU0JfREVWLCAgLnJlZyA9IDB4MjhjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQMkIsICAgICAucmVnID0gMHhhYTQgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9UU0VDLCAgICAgIC5yZWcgPSAweDI5NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0E5QVZQLCAgICAgLnJlZyA9IDB4MjkwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfR1BVLCAgICAgICAucmVnID0gMHhhYWMgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzFBLCAgIC5yZWcgPSAweGE5NCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NETU1DMkEsICAgLnJlZyA9IDB4YTk4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0RNTUMzQSwgICAucmVnID0gMHhhOWMgfSwKKwl7IC5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9TRE1NQzRBLCAgIC5yZWcgPSAweGFhMCB9LAorCXsgLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJQywgICAgICAgLnJlZyA9IDB4Mjg0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksICAgICAgICAucmVnID0gMHgyODAgfSwKK307CisKKyNpZmRlZiBDT05GSUdfQVJDSF9URUdSQV8xMjRfU09DCitzdGF0aWMgdm9pZCB0ZWdyYTEyNF9mbHVzaF9kY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSAgc2l6ZV90IHNpemUpCit7CisJcGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKKwl2b2lkICp2aXJ0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0OworCisJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKHZpcnQsIHNpemUpOworCW91dGVyX2ZsdXNoX3JhbmdlKHBoeXMsIHBoeXMgKyBzaXplKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X29wcyB0ZWdyYTEyNF9zbW11X29wcyA9IHsKKwkuZmx1c2hfZGNhY2hlID0gdGVncmExMjRfZmx1c2hfZGNhY2hlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3NvYyB0ZWdyYTEyNF9zbW11X3NvYyA9IHsKKwkuY2xpZW50cyA9IHRlZ3JhMTI0X21jX2NsaWVudHMsCisJLm51bV9jbGllbnRzID0gQVJSQVlfU0laRSh0ZWdyYTEyNF9tY19jbGllbnRzKSwKKwkuc3dncm91cHMgPSB0ZWdyYTEyNF9zd2dyb3VwcywKKwkubnVtX3N3Z3JvdXBzID0gQVJSQVlfU0laRSh0ZWdyYTEyNF9zd2dyb3VwcyksCisJLnN1cHBvcnRzX3JvdW5kX3JvYmluX2FyYml0cmF0aW9uID0gdHJ1ZSwKKwkuc3VwcG9ydHNfcmVxdWVzdF9saW1pdCA9IHRydWUsCisJLm51bV9hc2lkcyA9IDEyOCwKKwkub3BzID0gJnRlZ3JhMTI0X3NtbXVfb3BzLAorfTsKKworY29uc3Qgc3RydWN0IHRlZ3JhX21jX3NvYyB0ZWdyYTEyNF9tY19zb2MgPSB7CisJLmNsaWVudHMgPSB0ZWdyYTEyNF9tY19jbGllbnRzLAorCS5udW1fY2xpZW50cyA9IEFSUkFZX1NJWkUodGVncmExMjRfbWNfY2xpZW50cyksCisJLm51bV9hZGRyZXNzX2JpdHMgPSAzNCwKKwkuYXRvbV9zaXplID0gMzIsCisJLnNtbXUgPSAmdGVncmExMjRfc21tdV9zb2MsCit9OworI2VuZGlmIC8qIENPTkZJR19BUkNIX1RFR1JBXzEyNF9TT0MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMzAuYyBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWZlOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmEzMC5jCkBAIC0wLDAgKzEsOTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTMwLW1jLmg+CisKKyNpbmNsdWRlICJtYy5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX21jX2NsaWVudCB0ZWdyYTMwX21jX2NsaWVudHNbXSA9IHsKKwl7CisJCS5pZCA9IDB4MDAsCisJCS5uYW1lID0gInB0Y3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFRDLAorCX0sIHsKKwkJLmlkID0gMHgwMSwKKwkJLm5hbWUgPSAiZGlzcGxheTBhIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDAyLAorCQkubmFtZSA9ICJkaXNwbGF5MGFiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwMywKKwkJLm5hbWUgPSAiZGlzcGxheTBiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDRlLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwNCwKKwkJLm5hbWUgPSAiZGlzcGxheTBiYiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQ0IsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDQsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA1LAorCQkubmFtZSA9ICJkaXNwbGF5MGMiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlYywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDYsCisJCS5uYW1lID0gImRpc3BsYXkwY2IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSA2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZjgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA3LAorCQkubmFtZSA9ICJkaXNwbGF5MWIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlYywKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDA4LAorCQkubmFtZSA9ICJkaXNwbGF5MWJiIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0RDQiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmY4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0ZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MDksCisJCS5uYW1lID0gImVwcHVwIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gOSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzAwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDE3LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwYSwKKwkJLm5hbWUgPSAiZzJwciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9HMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwOSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGIsCisJCS5uYW1lID0gImcyc3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDExLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA5LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwYywKKwkJLm5hbWUgPSAibXBldW5pZmJyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QRSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTIsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyOCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg1MCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MGQsCisJCS5uYW1lID0gInZpcnV2IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZJLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxMywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzY0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDJjLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgwZSwKKwkJLm5hbWUgPSAiYWZpciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9BRkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgyZTAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDBmLAorCQkubmFtZSA9ICJhdnBjYXJtN3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQVZQQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTAsCisJCS5uYW1lID0gImRpc3BsYXloYyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9EQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMTYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJmMCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MTEsCisJCS5uYW1lID0gImRpc3BsYXloY2IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MmZjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxMiwKKwkJLm5hbWUgPSAiZmRjZHJkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAxOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzM0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxMywKKwkJLm5hbWUgPSAiZmRjZHJkMiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OVjIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDE5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzM2MsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGEsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE0LAorCQkubmFtZSA9ICJnMmRyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0cyLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzBjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNSwKKwkJLm5hbWUgPSAiaGRhciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IREEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDIxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMTgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE2LAorCQkubmFtZSA9ICJob3N0MXhkbWFyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzEwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDA1LAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxNywKKwkJLm5hbWUgPSAiaG9zdDF4ciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9IQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDE4LAorCQkubmFtZSA9ICJpZHhzcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMzQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxOSwKKwkJLm5hbWUgPSAiaWR4c3JkMiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OVjIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI1LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzM2MsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxYSwKKwkJLm5hbWUgPSAibXBlX2lwcmVkIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QRSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjYsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ODAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDFiLAorCQkubmFtZSA9ICJtcGVhbWVtcmQiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyOCwKKwkJCS5iaXQgPSAyNywKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzJjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDQyLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxYywKKwkJLm5hbWUgPSAibXBlY3NyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9NUEUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDI4LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMmMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZCwKKwkJLm5hbWUgPSAicHBjc2FoYmRtYXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMjksCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0NCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MWUsCisJCS5uYW1lID0gInBwY3NhaGJzbHZyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjI4LAorCQkJLmJpdCA9IDMwLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEyLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgxZiwKKwkJLm5hbWUgPSAic2F0YXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0FUQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMjgsCisJCQkuYml0ID0gMzEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgzMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjAsCisJCS5uYW1lID0gInRleHNyZCIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OViwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzM4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMSwKKwkJLm5hbWUgPSAidGV4c3JkMiIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9OVjIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjIsCisJCS5uYW1lID0gInZkZWJzZXZyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyMywKKwkJLm5hbWUgPSAidmRlbWJlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1NCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZDAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI0LAorCQkubmFtZSA9ICJ2ZGVtY2VyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1ZERSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gNCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzU4LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDJhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyNSwKKwkJLm5hbWUgPSAidmRldHBlciIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM1OCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NzQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI2LAorCQkubmFtZSA9ICJtcGNvcmVscHIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFTFAsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyNCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNCwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjcsCisJCS5uYW1lID0gIm1wY29yZXIiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFLAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMjAsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MDQsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDI4LAorCQkubmFtZSA9ICJlcHB1IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzAwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg2YywKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MjksCisJCS5uYW1lID0gImVwcHYiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSA5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMDQsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NmMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDJhLAorCQkubmFtZSA9ICJlcHB5IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0VQUCwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMwNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4NmMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDJiLAorCQkubmFtZSA9ICJtcGV1bmlmYnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAxMSwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzMwLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyYywKKwkJLm5hbWUgPSAidml3c2IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDEyLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjQsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEyLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyZCwKKwkJLm5hbWUgPSAidml3dSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTMsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2OCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhiMiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MmUsCisJCS5uYW1lID0gInZpd3YiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE0LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGIyLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgyZiwKKwkJLm5hbWUgPSAidml3eSIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTUsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2YywKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgxMiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4MzAsCisJCS5uYW1lID0gImcyZHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE2LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMGMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDksCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMxLAorCQkubmFtZSA9ICJhZml3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0FGSSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTcsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlMCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGMsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMyLAorCQkubmFtZSA9ICJhdnBjYXJtN3ciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQVZQQywKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMTgsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDJlNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDMzLAorCQkubmFtZSA9ICJmZGNkd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDE5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMzgsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDBhLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNCwKKwkJLm5hbWUgPSAiZmRjd3IyIiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX05WMiwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM0MCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGEsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM1LAorCQkubmFtZSA9ICJoZGF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hEQSwKKwkJLnNtbXUgPSB7CisJCQkucmVnID0gMHgyMmMsCisJCQkuYml0ID0gMjEsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMxOCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM2LAorCQkubmFtZSA9ICJob3N0MXh3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX0hDLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyMiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzE0LAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDEwLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzNywKKwkJLm5hbWUgPSAiaXNwdyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9JU1AsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDIzLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzMWMsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4ZmYsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM4LAorCQkubmFtZSA9ICJtcGNvcmVscHciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBDT1JFTFAsCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDMyNCwKKwkJCS5zaGlmdCA9IDE2LAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MGUsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDM5LAorCQkubmFtZSA9ICJtcGNvcmV3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX01QQ09SRSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzIwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwZSwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2EsCisJCS5uYW1lID0gIm1wZWNzd3IiLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyNiwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzMwLAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHhmZiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2IsCisJCS5uYW1lID0gInBwY3NhaGJkbWF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1BQQ1MsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDI3LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNDgsCisJCQkuc2hpZnQgPSAwLAorCQkJLm1hc2sgPSAweGZmLAorCQkJLmRlZiA9IDB4MTAsCisJCX0sCisJfSwgeworCQkuaWQgPSAweDNjLAorCQkubmFtZSA9ICJwcGNzYWhic2x2dyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9QUENTLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAyOCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzQ4LAorCQkJLnNoaWZ0ID0gMTYsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHgwNiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4M2QsCisJCS5uYW1lID0gInNhdGF3IiwKKwkJLnN3Z3JvdXAgPSBURUdSQV9TV0dST1VQX1NBVEEsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDI5LAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNTAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDMzLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzZSwKKwkJLm5hbWUgPSAidmRlYnNldnciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIyYywKKwkJCS5iaXQgPSAzMCwKKwkJfSwKKwkJLmxhID0geworCQkJLnJlZyA9IDB4MzVjLAorCQkJLnNoaWZ0ID0gMCwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHgzZiwKKwkJLm5hbWUgPSAidmRlZGJndyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjJjLAorCQkJLmJpdCA9IDMxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNWMsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweGZmLAorCQl9LAorCX0sIHsKKwkJLmlkID0gMHg0MCwKKwkJLm5hbWUgPSAidmRlbWJldyIsCisJCS5zd2dyb3VwID0gVEVHUkFfU1dHUk9VUF9WREUsCisJCS5zbW11ID0geworCQkJLnJlZyA9IDB4MjMwLAorCQkJLmJpdCA9IDAsCisJCX0sCisJCS5sYSA9IHsKKwkJCS5yZWcgPSAweDM2MCwKKwkJCS5zaGlmdCA9IDAsCisJCQkubWFzayA9IDB4ZmYsCisJCQkuZGVmID0gMHg0MiwKKwkJfSwKKwl9LCB7CisJCS5pZCA9IDB4NDEsCisJCS5uYW1lID0gInZkZXRwbXciLAorCQkuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLAorCQkuc21tdSA9IHsKKwkJCS5yZWcgPSAweDIzMCwKKwkJCS5iaXQgPSAxLAorCQl9LAorCQkubGEgPSB7CisJCQkucmVnID0gMHgzNjAsCisJCQkuc2hpZnQgPSAxNiwKKwkJCS5tYXNrID0gMHhmZiwKKwkJCS5kZWYgPSAweDJhLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc3dncm91cCB0ZWdyYTMwX3N3Z3JvdXBzW10gPSB7CisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfREMsICAgLnJlZyA9IDB4MjQwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRENCLCAgLnJlZyA9IDB4MjQ0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRVBQLCAgLnJlZyA9IDB4MjQ4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfRzIsICAgLnJlZyA9IDB4MjRjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTVBFLCAgLnJlZyA9IDB4MjY0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkksICAgLnJlZyA9IDB4MjgwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQUZJLCAgLnJlZyA9IDB4MjM4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfQVZQQywgLnJlZyA9IDB4MjNjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYsICAgLnJlZyA9IDB4MjY4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfTlYyLCAgLnJlZyA9IDB4MjZjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSERBLCAgLnJlZyA9IDB4MjU0IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSEMsICAgLnJlZyA9IDB4MjUwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfUFBDUywgLnJlZyA9IDB4MjcwIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfU0FUQSwgLnJlZyA9IDB4Mjc4IH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfVkRFLCAgLnJlZyA9IDB4MjdjIH0sCisJeyAuc3dncm91cCA9IFRFR1JBX1NXR1JPVVBfSVNQLCAgLnJlZyA9IDB4MjU4IH0sCit9OworCitzdGF0aWMgdm9pZCB0ZWdyYTMwX2ZsdXNoX2RjYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJIHNpemVfdCBzaXplKQoreworCXBoeXNfYWRkcl90IHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CisJdm9pZCAqdmlydCA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKworCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYSh2aXJ0LCBzaXplKTsKKwlvdXRlcl9mbHVzaF9yYW5nZShwaHlzLCBwaHlzICsgc2l6ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9vcHMgdGVncmEzMF9zbW11X29wcyA9IHsKKwkuZmx1c2hfZGNhY2hlID0gdGVncmEzMF9mbHVzaF9kY2FjaGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc29jIHRlZ3JhMzBfc21tdV9zb2MgPSB7CisJLmNsaWVudHMgPSB0ZWdyYTMwX21jX2NsaWVudHMsCisJLm51bV9jbGllbnRzID0gQVJSQVlfU0laRSh0ZWdyYTMwX21jX2NsaWVudHMpLAorCS5zd2dyb3VwcyA9IHRlZ3JhMzBfc3dncm91cHMsCisJLm51bV9zd2dyb3VwcyA9IEFSUkFZX1NJWkUodGVncmEzMF9zd2dyb3VwcyksCisJLnN1cHBvcnRzX3JvdW5kX3JvYmluX2FyYml0cmF0aW9uID0gZmFsc2UsCisJLnN1cHBvcnRzX3JlcXVlc3RfbGltaXQgPSBmYWxzZSwKKwkubnVtX2FzaWRzID0gNCwKKwkub3BzID0gJnRlZ3JhMzBfc21tdV9vcHMsCit9OworCitjb25zdCBzdHJ1Y3QgdGVncmFfbWNfc29jIHRlZ3JhMzBfbWNfc29jID0geworCS5jbGllbnRzID0gdGVncmEzMF9tY19jbGllbnRzLAorCS5udW1fY2xpZW50cyA9IEFSUkFZX1NJWkUodGVncmEzMF9tY19jbGllbnRzKSwKKwkubnVtX2FkZHJlc3NfYml0cyA9IDMyLAorCS5hdG9tX3NpemUgPSAxNiwKKwkuc21tdSA9ICZ0ZWdyYTMwX3NtbXVfc29jLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L3RlZ3JhMzAtbWMuYyBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhMzAtbWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY3OTM0NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lbW9yeS90ZWdyYTMwLW1jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotLyoKLSAqIFRlZ3JhMzAgTWVtb3J5IENvbnRyb2xsZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2RlZmluZSBEUlZfTkFNRSAidGVncmEzMC1tYyIKLQotI2RlZmluZSBNQ19JTlRTVEFUVVMJCQkweDAKLSNkZWZpbmUgTUNfSU5UTUFTSwkJCTB4NAotCi0jZGVmaW5lIE1DX0lOVF9FUlJfU0hJRlQJCTYKLSNkZWZpbmUgTUNfSU5UX0VSUl9NQVNLCQkJKDB4MWYgPDwgTUNfSU5UX0VSUl9TSElGVCkKLSNkZWZpbmUgTUNfSU5UX0RFQ0VSUl9FTUVNCQlCSVQoTUNfSU5UX0VSUl9TSElGVCkKLSNkZWZpbmUgTUNfSU5UX1NFQ1VSSVRZX1ZJT0xBVElPTglCSVQoTUNfSU5UX0VSUl9TSElGVCArIDIpCi0jZGVmaW5lIE1DX0lOVF9BUkJJVFJBVElPTl9FTUVNCQlCSVQoTUNfSU5UX0VSUl9TSElGVCArIDMpCi0jZGVmaW5lIE1DX0lOVF9JTlZBTElEX1NNTVVfUEFHRQlCSVQoTUNfSU5UX0VSUl9TSElGVCArIDQpCi0KLSNkZWZpbmUgTUNfRVJSX1NUQVRVUwkJCTB4OAotI2RlZmluZSBNQ19FUlJfQURSCQkJMHhjCi0KLSNkZWZpbmUgTUNfRVJSX1RZUEVfU0hJRlQJCTI4Ci0jZGVmaW5lIE1DX0VSUl9UWVBFX01BU0sJCSg3IDw8IE1DX0VSUl9UWVBFX1NISUZUKQotI2RlZmluZSBNQ19FUlJfVFlQRV9ERUNFUlJfRU1FTQkJMgotI2RlZmluZSBNQ19FUlJfVFlQRV9TRUNVUklUWV9UUlVTVFpPTkUJMwotI2RlZmluZSBNQ19FUlJfVFlQRV9TRUNVUklUWV9DQVJWRU9VVAk0Ci0jZGVmaW5lIE1DX0VSUl9UWVBFX0lOVkFMSURfU01NVV9QQUdFCTYKLQotI2RlZmluZSBNQ19FUlJfSU5WQUxJRF9TTU1VX1BBR0VfU0hJRlQJMjUKLSNkZWZpbmUgTUNfRVJSX0lOVkFMSURfU01NVV9QQUdFX01BU0sJKDcgPDwgTUNfRVJSX0lOVkFMSURfU01NVV9QQUdFX1NISUZUKQotI2RlZmluZSBNQ19FUlJfUldfU0hJRlQJCQkxNgotI2RlZmluZSBNQ19FUlJfUlcJCQlCSVQoTUNfRVJSX1JXX1NISUZUKQotI2RlZmluZSBNQ19FUlJfU0VDVVJJVFkJCQlCSVQoTUNfRVJSX1JXX1NISUZUICsgMSkKLQotI2RlZmluZSBTRUNVUklUWV9WSU9MQVRJT05fVFlQRQkJQklUKDMwKQkvKiAwPVRSVVNUWk9ORSwgMT1DQVJWRU9VVCAqLwotCi0jZGVmaW5lIE1DX0VNRU1fQVJCX0NGRwkJCTB4OTAKLSNkZWZpbmUgTUNfRU1FTV9BUkJfT1VUU1RBTkRJTkdfUkVRCTB4OTQKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1JDRAkJMHg5OAotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfUlAJCTB4OWMKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1JDCQkweGEwCi0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19SQVMJCTB4YTQKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX0ZBVwkJMHhhOAotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfUlJECQkweGFjCi0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19SQVAyUFJFCTB4YjAKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1dBUDJQUkUJMHhiNAotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfUjJSCQkweGI4Ci0jZGVmaW5lIE1DX0VNRU1fQVJCX1RJTUlOR19XMlcJCTB4YmMKLSNkZWZpbmUgTUNfRU1FTV9BUkJfVElNSU5HX1IyVwkJMHhjMAotI2RlZmluZSBNQ19FTUVNX0FSQl9USU1JTkdfVzJSCQkweGM0Ci0KLSNkZWZpbmUgTUNfRU1FTV9BUkJfREFfVFVSTlMJCTB4ZDAKLSNkZWZpbmUgTUNfRU1FTV9BUkJfREFfQ09WRVJTCQkweGQ0Ci0jZGVmaW5lIE1DX0VNRU1fQVJCX01JU0MwCQkweGQ4Ci0jZGVmaW5lIE1DX0VNRU1fQVJCX01JU0MxCQkweGRjCi0KLSNkZWZpbmUgTUNfRU1FTV9BUkJfUklORzNfVEhST1RUTEUJMHhlNAotI2RlZmluZSBNQ19FTUVNX0FSQl9PVkVSUklERQkJMHhlOAotCi0jZGVmaW5lIE1DX1RJTUlOR19DT05UUk9MCQkweGZjCi0KLSNkZWZpbmUgTUNfQ0xJRU5UX0lEX01BU0sJCTB4N2YKLQotI2RlZmluZSBOVU1fTUNfUkVHX0JBTktTCQk0Ci0KLXN0cnVjdCB0ZWdyYTMwX21jIHsKLQl2b2lkIF9faW9tZW0gKnJlZ3NbTlVNX01DX1JFR19CQU5LU107Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXUzMiBjdHhbMF07Ci19OwotCi1zdGF0aWMgaW5saW5lIHUzMiBtY19yZWFkbChzdHJ1Y3QgdGVncmEzMF9tYyAqbWMsIHUzMiBvZmZzKQotewotCXUzMiB2YWwgPSAwOwotCi0JaWYgKG9mZnMgPCAweDEwKQotCQl2YWwgPSByZWFkbChtYy0+cmVnc1swXSArIG9mZnMpOwotCWVsc2UgaWYgKG9mZnMgPCAweDFmMCkKLQkJdmFsID0gcmVhZGwobWMtPnJlZ3NbMV0gKyBvZmZzIC0gMHgzYyk7Ci0JZWxzZSBpZiAob2ZmcyA8IDB4MjI4KQotCQl2YWwgPSByZWFkbChtYy0+cmVnc1syXSArIG9mZnMgLSAweDIwMCk7Ci0JZWxzZSBpZiAob2ZmcyA8IDB4NDAwKQotCQl2YWwgPSByZWFkbChtYy0+cmVnc1szXSArIG9mZnMgLSAweDI4NCk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWNfd3JpdGVsKHN0cnVjdCB0ZWdyYTMwX21jICptYywgdTMyIHZhbCwgdTMyIG9mZnMpCi17Ci0JaWYgKG9mZnMgPCAweDEwKQotCQl3cml0ZWwodmFsLCBtYy0+cmVnc1swXSArIG9mZnMpOwotCWVsc2UgaWYgKG9mZnMgPCAweDFmMCkKLQkJd3JpdGVsKHZhbCwgbWMtPnJlZ3NbMV0gKyBvZmZzIC0gMHgzYyk7Ci0JZWxzZSBpZiAob2ZmcyA8IDB4MjI4KQotCQl3cml0ZWwodmFsLCBtYy0+cmVnc1syXSArIG9mZnMgLSAweDIwMCk7Ci0JZWxzZSBpZiAob2ZmcyA8IDB4NDAwKQotCQl3cml0ZWwodmFsLCBtYy0+cmVnc1szXSArIG9mZnMgLSAweDI4NCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVncmEzMF9tY19jbGllbnRbXSA9IHsKLQkiY3NyX3B0Y3IiLAotCSJjYnJfZGlzcGxheTBhIiwKLQkiY2JyX2Rpc3BsYXkwYWIiLAotCSJjYnJfZGlzcGxheTBiIiwKLQkiY2JyX2Rpc3BsYXkwYmIiLAotCSJjYnJfZGlzcGxheTBjIiwKLQkiY2JyX2Rpc3BsYXkwY2IiLAotCSJjYnJfZGlzcGxheTFiIiwKLQkiY2JyX2Rpc3BsYXkxYmIiLAotCSJjYnJfZXBwdXAiLAotCSJjYnJfZzJwciIsCi0JImNicl9nMnNyIiwKLQkiY2JyX21wZXVuaWZiciIsCi0JImNicl92aXJ1diIsCi0JImNzcl9hZmlyIiwKLQkiY3NyX2F2cGNhcm03ciIsCi0JImNzcl9kaXNwbGF5aGMiLAotCSJjc3JfZGlzcGxheWhjYiIsCi0JImNzcl9mZGNkcmQiLAotCSJjc3JfZmRjZHJkMiIsCi0JImNzcl9nMmRyIiwKLQkiY3NyX2hkYXIiLAotCSJjc3JfaG9zdDF4ZG1hciIsCi0JImNzcl9ob3N0MXhyIiwKLQkiY3NyX2lkeHNyZCIsCi0JImNzcl9pZHhzcmQyIiwKLQkiY3NyX21wZV9pcHJlZCIsCi0JImNzcl9tcGVhbWVtcmQiLAotCSJjc3JfbXBlY3NyZCIsCi0JImNzcl9wcGNzYWhiZG1hciIsCi0JImNzcl9wcGNzYWhic2x2ciIsCi0JImNzcl9zYXRhciIsCi0JImNzcl90ZXhzcmQiLAotCSJjc3JfdGV4c3JkMiIsCi0JImNzcl92ZGVic2V2ciIsCi0JImNzcl92ZGVtYmVyIiwKLQkiY3NyX3ZkZW1jZXIiLAotCSJjc3JfdmRldHBlciIsCi0JImNzcl9tcGNvcmVscHIiLAotCSJjc3JfbXBjb3JlciIsCi0JImNid19lcHB1IiwKLQkiY2J3X2VwcHYiLAotCSJjYndfZXBweSIsCi0JImNid19tcGV1bmlmYnciLAotCSJjYndfdml3c2IiLAotCSJjYndfdml3dSIsCi0JImNid192aXd2IiwKLQkiY2J3X3Zpd3kiLAotCSJjY3dfZzJkdyIsCi0JImNzd19hZml3IiwKLQkiY3N3X2F2cGNhcm03dyIsCi0JImNzd19mZGNkd3IiLAotCSJjc3dfZmRjZHdyMiIsCi0JImNzd19oZGF3IiwKLQkiY3N3X2hvc3QxeHciLAotCSJjc3dfaXNwdyIsCi0JImNzd19tcGNvcmVscHciLAotCSJjc3dfbXBjb3JldyIsCi0JImNzd19tcGVjc3dyIiwKLQkiY3N3X3BwY3NhaGJkbWF3IiwKLQkiY3N3X3BwY3NhaGJzbHZ3IiwKLQkiY3N3X3NhdGF3IiwKLQkiY3N3X3ZkZWJzZXZ3IiwKLQkiY3N3X3ZkZWRiZ3ciLAotCSJjc3dfdmRlbWJldyIsCi0JImNzd192ZGV0cG13IiwKLX07Ci0KLXN0YXRpYyB2b2lkIHRlZ3JhMzBfbWNfZGVjb2RlKHN0cnVjdCB0ZWdyYTMwX21jICptYywgaW50IG4pCi17Ci0JdTMyIGVyciwgYWRkcjsKLQljb25zdCBjaGFyICogY29uc3QgbWNfaW50X2VycltdID0gewotCQkiTUNfREVDRVJSIiwKLQkJIlVua25vd24iLAotCQkiTUNfU0VDVVJJVFlfRVJSIiwKLQkJIk1DX0FSQklUUkFUSU9OX0VNRU0iLAotCQkiTUNfU01NVV9FUlIiLAotCX07Ci0JY29uc3QgY2hhciAqIGNvbnN0IGVycl90eXBlW10gPSB7Ci0JCSJVbmtub3duIiwKLQkJIlVua25vd24iLAotCQkiREVDRVJSX0VNRU0iLAotCQkiU0VDVVJJVFlfVFJVU1RaT05FIiwKLQkJIlNFQ1VSSVRZX0NBUlZFT1VUIiwKLQkJIlVua25vd24iLAotCQkiSU5WQUxJRF9TTU1VX1BBR0UiLAotCQkiVW5rbm93biIsCi0JfTsKLQljaGFyIGF0dHJbNl07Ci0JaW50IGNpZCwgcGVybSwgdHlwZSwgaWR4OwotCWNvbnN0IGNoYXIgKmNsaWVudCA9ICJVbmtub3duIjsKLQotCWlkeCA9IG4gLSBNQ19JTlRfRVJSX1NISUZUOwotCWlmICgoaWR4IDwgMCkgfHwgKGlkeCA+PSBBUlJBWV9TSVpFKG1jX2ludF9lcnIpKSB8fCAoaWR4ID09IDEpKSB7Ci0JCWRldl9lcnJfcmF0ZWxpbWl0ZWQobWMtPmRldiwgIlVua25vd24gaW50ZXJydXB0IHN0YXR1cyAlMDhseFxuIiwKLQkJCQkgICAgQklUKG4pKTsKLQkJcmV0dXJuOwotCX0KLQotCWVyciA9IG1jX3JlYWRsKG1jLCBNQ19FUlJfU1RBVFVTKTsKLQotCXR5cGUgPSAoZXJyICYgTUNfRVJSX1RZUEVfTUFTSykgPj4gTUNfRVJSX1RZUEVfU0hJRlQ7Ci0JcGVybSA9IChlcnIgJiBNQ19FUlJfSU5WQUxJRF9TTU1VX1BBR0VfTUFTSykgPj4KLQkJTUNfRVJSX0lOVkFMSURfU01NVV9QQUdFX1NISUZUOwotCWlmICh0eXBlID09IE1DX0VSUl9UWVBFX0lOVkFMSURfU01NVV9QQUdFKQotCQlzcHJpbnRmKGF0dHIsICIlYy0lYy0lYyIsCi0JCQkocGVybSAmIEJJVCgyKSkgPyAnUicgOiAnLScsCi0JCQkocGVybSAmIEJJVCgxKSkgPyAnVycgOiAnLScsCi0JCQkocGVybSAmIEJJVCgwKSkgPyAnUycgOiAnLScpOwotCWVsc2UKLQkJYXR0clswXSA9ICdcMCc7Ci0KLQljaWQgPSBlcnIgJiBNQ19DTElFTlRfSURfTUFTSzsKLQlpZiAoY2lkIDwgQVJSQVlfU0laRSh0ZWdyYTMwX21jX2NsaWVudCkpCi0JCWNsaWVudCA9IHRlZ3JhMzBfbWNfY2xpZW50W2NpZF07Ci0KLQlhZGRyID0gbWNfcmVhZGwobWMsIE1DX0VSUl9BRFIpOwotCi0JZGV2X2Vycl9yYXRlbGltaXRlZChtYy0+ZGV2LCAiJXMgKDB4JTA4eCk6IDB4JTA4eCAlcyAoJXMgJXMgJXMgJXMpXG4iLAotCQkJICAgbWNfaW50X2VycltpZHhdLCBlcnIsIGFkZHIsIGNsaWVudCwKLQkJCSAgIChlcnIgJiBNQ19FUlJfU0VDVVJJVFkpID8gInNlY3VyZSIgOiAibm9uLXNlY3VyZSIsCi0JCQkgICAoZXJyICYgTUNfRVJSX1JXKSA/ICJ3cml0ZSIgOiAicmVhZCIsCi0JCQkgICBlcnJfdHlwZVt0eXBlXSwgYXR0cik7Ci19Ci0KLXN0YXRpYyBjb25zdCB1MzIgdGVncmEzMF9tY19jdHhbXSA9IHsKLQlNQ19FTUVNX0FSQl9DRkcsCi0JTUNfRU1FTV9BUkJfT1VUU1RBTkRJTkdfUkVRLAotCU1DX0VNRU1fQVJCX1RJTUlOR19SQ0QsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1JQLAotCU1DX0VNRU1fQVJCX1RJTUlOR19SQywKLQlNQ19FTUVNX0FSQl9USU1JTkdfUkFTLAotCU1DX0VNRU1fQVJCX1RJTUlOR19GQVcsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1JSRCwKLQlNQ19FTUVNX0FSQl9USU1JTkdfUkFQMlBSRSwKLQlNQ19FTUVNX0FSQl9USU1JTkdfV0FQMlBSRSwKLQlNQ19FTUVNX0FSQl9USU1JTkdfUjJSLAotCU1DX0VNRU1fQVJCX1RJTUlOR19XMlcsCi0JTUNfRU1FTV9BUkJfVElNSU5HX1IyVywKLQlNQ19FTUVNX0FSQl9USU1JTkdfVzJSLAotCU1DX0VNRU1fQVJCX0RBX1RVUk5TLAotCU1DX0VNRU1fQVJCX0RBX0NPVkVSUywKLQlNQ19FTUVNX0FSQl9NSVNDMCwKLQlNQ19FTUVNX0FSQl9NSVNDMSwKLQlNQ19FTUVNX0FSQl9SSU5HM19USFJPVFRMRSwKLQlNQ19FTUVNX0FSQl9PVkVSUklERSwKLQlNQ19JTlRNQVNLLAotfTsKLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCB0ZWdyYTMwX21jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBpOwotCXN0cnVjdCB0ZWdyYTMwX21jICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVncmEzMF9tY19jdHgpOyBpKyspCi0JCW1jLT5jdHhbaV0gPSBtY19yZWFkbChtYywgdGVncmEzMF9tY19jdHhbaV0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRlZ3JhMzBfbWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgdGVncmEzMF9tYyAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhMzBfbWNfY3R4KTsgaSsrKQotCQltY193cml0ZWwobWMsIG1jLT5jdHhbaV0sIHRlZ3JhMzBfbWNfY3R4W2ldKTsKLQotCW1jX3dyaXRlbChtYywgMSwgTUNfVElNSU5HX0NPTlRST0wpOwotCS8qIFJlYWQtYmFjayB0byBlbnN1cmUgdGhhdCB3cml0ZSByZWFjaGVkICovCi0JbWNfcmVhZGwobWMsIE1DX1RJTUlOR19DT05UUk9MKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgVU5JVkVSU0FMX0RFVl9QTV9PUFModGVncmEzMF9tY19wbSwKLQkJCSAgICB0ZWdyYTMwX21jX3N1c3BlbmQsCi0JCQkgICAgdGVncmEzMF9tY19yZXN1bWUsIE5VTEwpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0ZWdyYTMwX21jX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEzMC1tYyIsIH0sCi0Je30sCi19OwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgdGVncmEzMF9tY19pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQl1MzIgc3RhdCwgbWFzaywgYml0OwotCXN0cnVjdCB0ZWdyYTMwX21jICptYyA9IGRhdGE7Ci0KLQlzdGF0ID0gbWNfcmVhZGwobWMsIE1DX0lOVFNUQVRVUyk7Ci0JbWFzayA9IG1jX3JlYWRsKG1jLCBNQ19JTlRNQVNLKTsKLQltYXNrICY9IHN0YXQ7Ci0JaWYgKCFtYXNrKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0Jd2hpbGUgKChiaXQgPSBmZnMobWFzaykpICE9IDApIHsKLQkJdGVncmEzMF9tY19kZWNvZGUobWMsIGJpdCAtIDEpOwotCQltYXNrICY9IH5CSVQoYml0IC0gMSk7Ci0JfQotCi0JbWNfd3JpdGVsKG1jLCBzdGF0LCBNQ19JTlRTVEFUVVMpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCB0ZWdyYTMwX21jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHJlc291cmNlICppcnE7Ci0Jc3RydWN0IHRlZ3JhMzBfbWMgKm1jOwotCXNpemVfdCBieXRlczsKLQlpbnQgZXJyLCBpOwotCXUzMiBpbnRtYXNrOwotCi0JYnl0ZXMgPSBzaXplb2YoKm1jKSArIHNpemVvZih1MzIpICogQVJSQVlfU0laRSh0ZWdyYTMwX21jX2N0eCk7Ci0JbWMgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgYnl0ZXMsIEdGUF9LRVJORUwpOwotCWlmICghbWMpCi0JCXJldHVybiAtRU5PTUVNOwotCW1jLT5kZXYgPSAmcGRldi0+ZGV2OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWMtPnJlZ3MpOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKLQkJbWMtPnJlZ3NbaV0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKLQkJaWYgKElTX0VSUihtYy0+cmVnc1tpXSkpCi0JCQlyZXR1cm4gUFRSX0VSUihtYy0+cmVnc1tpXSk7Ci0JfQotCi0JaXJxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKLQlpZiAoIWlycSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEtPnN0YXJ0LCB0ZWdyYTMwX21jX2lzciwKLQkJCSAgICAgICBJUlFGX1NIQVJFRCwgZGV2X25hbWUoJnBkZXYtPmRldiksIG1jKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTsKLQotCWludG1hc2sgPSBNQ19JTlRfSU5WQUxJRF9TTU1VX1BBR0UgfAotCQlNQ19JTlRfREVDRVJSX0VNRU0gfCBNQ19JTlRfU0VDVVJJVFlfVklPTEFUSU9OOwotCW1jX3dyaXRlbChtYywgaW50bWFzaywgTUNfSU5UTUFTSyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRlZ3JhMzBfbWNfZHJpdmVyID0gewotCS5wcm9iZSA9IHRlZ3JhMzBfbWNfcHJvYmUsCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSBEUlZfTkFNRSwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5vZl9tYXRjaF90YWJsZSA9IHRlZ3JhMzBfbWNfb2ZfbWF0Y2gsCi0JCS5wbSA9ICZ0ZWdyYTMwX21jX3BtLAotCX0sCi19OwotbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih0ZWdyYTMwX21jX2RyaXZlcik7Ci0KLU1PRFVMRV9BVVRIT1IoIkhpcm9zaGkgRE9ZVSA8aGRveXVAbnZpZGlhLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiVGVncmEzMCBNQyBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCAwNzA3ZmEyLi41YmRhYWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKQEAgLTE5OTQsNiArMTk5NCw3IEBACiAJLmNtZF9wZXJfbHVuCQkJPSA3LAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQkJPSBtcHRzY3NpaF9ob3N0X2F0dHJzLAorCS51c2VfYmxrX3RhZ3MJCQk9IDEsCiB9OwogCiBzdGF0aWMgaW50IG1wdHNhc19nZXRfbGlua2Vycm9ycyhzdHJ1Y3Qgc2FzX3BoeSAqcGh5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IGU3ZGNiMjUuLjZjOWZjMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTIzMTEsMjYgKzIzMTEsMjEgQEAKICAqCW1wdHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYSBkZXZpY2VzIHF1ZXVlIGRlcHRoCiAgKglAc2RldjogcGVyIHNjc2lfZGV2aWNlIHBvaW50ZXIKICAqCUBxZGVwdGg6IHJlcXVlc3RlZCBxdWV1ZSBkZXB0aAotICoJQHJlYXNvbjogY2FsbGluZyBjb250ZXh0CiAgKgogICoJQWRkaW5nIHN1cHBvcnQgZm9yIG5ldyAnY2hhbmdlX3F1ZXVlX2RlcHRoJyBhcGkuCiAqLwogaW50Ci1tcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLCBpbnQgcmVhc29uKQorbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCkKIHsKIAlNUFRfU0NTSV9IT1NUCQkqaGQgPSBzaG9zdF9wcml2KHNkZXYtPmhvc3QpOwogCVZpcnRUYXJnZXQgCQkqdnRhcmdldDsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgCSpzdGFyZ2V0OwogCWludAkJCW1heF9kZXB0aDsKLQlpbnQJCQl0YWdnZWQ7CiAJTVBUX0FEQVBURVIJCSppb2MgPSBoZC0+aW9jOwogCiAJc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOwogCXZ0YXJnZXQgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKIAotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU1BJKSB7CiAJCWlmICghKHZ0YXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVMpKQogCQkJbWF4X2RlcHRoID0gMTsKQEAgLTIzNDcsMTMgKzIzNDIsOCBAQAogCiAJaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKIAkJcWRlcHRoID0gbWF4X2RlcHRoOwotCWlmIChxZGVwdGggPT0gMSkKLQkJdGFnZ2VkID0gMDsKLQllbHNlCi0JCXRhZ2dlZCA9IE1TR19TSU1QTEVfVEFHOwogCi0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgdGFnZ2VkLCBxZGVwdGgpOwotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKIH0KIAogLyoKQEAgLTIzOTcsMTIgKzIzODcsMTAgQEAKIAkJICAgIGlvYy0+bmFtZSwgdnRhcmdldC0+bmVnb0ZsYWdzLCB2dGFyZ2V0LT5tYXhPZmZzZXQsCiAJCSAgICB2dGFyZ2V0LT5taW5TeW5jRmFjdG9yKSk7CiAKLQltcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgTVBUX1NDU0lfQ01EX1BFUl9ERVZfSElHSCwKLQkJCQkgICAgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIE1QVF9TQ1NJX0NNRF9QRVJfREVWX0hJR0gpOwogCWRzcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCi0JCSJ0YWdnZWQgJWQsIHNpbXBsZSAlZCwgb3JkZXJlZCAlZFxuIiwKLQkJaW9jLT5uYW1lLHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQsIHNkZXYtPnNpbXBsZV90YWdzLAotCQlzZGV2LT5vcmRlcmVkX3RhZ3MpKTsKKwkJInRhZ2dlZCAlZCwgc2ltcGxlICVkXG4iLAorCQlpb2MtPm5hbWUsc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCwgc2Rldi0+c2ltcGxlX3RhZ3MpKTsKIAogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50IChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA1MTIgLSAxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCmluZGV4IGUxYjFhMTkuLjJiYWVlZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKQEAgLTEyOCw4ICsxMjgsNyBAQAogZXh0ZXJuIGludCBtcHRzY3NpaF9zY2FuZHZfY29tcGxldGUoTVBUX0FEQVBURVIgKmlvYywgTVBUX0ZSQU1FX0hEUiAqbWYsIE1QVF9GUkFNRV9IRFIgKnIpOwogZXh0ZXJuIGludCBtcHRzY3NpaF9ldmVudF9wcm9jZXNzKE1QVF9BREFQVEVSICppb2MsIEV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqcEV2UmVwbHkpOwogZXh0ZXJuIGludCBtcHRzY3NpaF9pb2NfcmVzZXQoTVBUX0FEQVBURVIgKmlvYywgaW50IHBvc3RfcmVzZXQpOwotZXh0ZXJuIGludCBtcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLAotCQkJCSAgICAgICBpbnQgcmVhc29uKTsKK2V4dGVybiBpbnQgbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCk7CiBleHRlcm4gdTggbXB0c2NzaWhfcmFpZF9pZF90b19udW0oTVBUX0FEQVBURVIgKmlvYywgdTggY2hhbm5lbCwgdTggaWQpOwogZXh0ZXJuIGludCBtcHRzY3NpaF9pc19waHlzX2Rpc2soTVBUX0FEQVBURVIgKmlvYywgdTggY2hhbm5lbCwgdTggaWQpOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptcHRzY3NpaF9ob3N0X2F0dHJzW107CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCAxNDU2ZWE3Li4yZTZiNzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTU5LDYgKzU5LDE3IEBACiAJICBhZGRpdGlvbmFsIGRyaXZlcnMgbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyIHRvIHVzZSB0aGUKIAkgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRldmljZS4KIAorY29uZmlnIE1GRF9BVE1FTF9ITENEQworCXRyaXN0YXRlICJBdG1lbCBITENEQyAoSGlnaC1lbmQgTENEIENvbnRyb2xsZXIpIgorCXNlbGVjdCBNRkRfQ09SRQorCXNlbGVjdCBSRUdNQVBfTU1JTworCWRlcGVuZHMgb24gT0YKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIEhMQ0RDIGJsb2NrLgorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlLAorCSAgYWRkaXRpb25hbCBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgdGhlCisJICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkZXZpY2UuCisKIGNvbmZpZyBNRkRfQkNNNTkwWFgKIAl0cmlzdGF0ZSAiQnJvYWRjb20gQkNNNTkweHggUE1VcyIKIAlzZWxlY3QgTUZEX0NPUkUKQEAgLTc0LDcgKzg1LDggQEAKIAlzZWxlY3QgUkVHTUFQX0lSUQogCWRlcGVuZHMgb24gSTJDPXkKIAloZWxwCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBWFAyMDIgYW5kIEFYUDIwOS4KKwkgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFgtUG93ZXJzIEFYUDIwMiwgQVhQMjA5IGFuZAorCSAgQVhQMjg4IHBvd2VyIG1hbmFnZW1lbnQgSUMgKFBNSUMpLgogCSAgVGhpcyBkcml2ZXIgaW5jbHVkZSBvbmx5IHRoZSBjb3JlIEFQSXMuIFlvdSBoYXZlIHRvIHNlbGVjdCBpbmRpdmlkdWFsCiAJICBjb21wb25lbnRzIGxpa2UgcmVndWxhdG9ycyBvciB0aGUgUEVLIChQb3dlciBFbmFibGUgS2V5KSB1bmRlciB0aGUKIAkgIGNvcnJlc3BvbmRpbmcgbWVudXMuCkBAIC0xODMsNiArMTk1LDE2IEBACiAJICBBZGRpdGlvbmFsIGRyaXZlcnMgbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyIHRvIHVzZSB0aGUgZnVuY3Rpb25hbGl0eQogCSAgb2YgdGhlIGRldmljZS4KIAorY29uZmlnIE1GRF9ETE4yCisJdHJpc3RhdGUgIkRpb2xhbiBETE4yIHN1cHBvcnQiCisJc2VsZWN0IE1GRF9DT1JFCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRGlvbGFuIFVTQi1JMkMvU1BJL0dQSU8gTWFzdGVyIEFkYXB0ZXIKKwkgIERMTi0yLiBBZGRpdGlvbmFsIGRyaXZlcnMgc3VjaCBhcyBJMkNfRExOMiwgR1BJT19ETE4yLAorCSAgZXRjLiBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mCisJICB0aGUgZGV2aWNlLgorCiBjb25maWcgTUZEX01DMTNYWFgKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gKFNQSV9NQVNURVIgfHwgSTJDKQpAQCAtNjU1LDcgKzY3Nyw2IEBACiAJc2VsZWN0IE1GRF9DT1JFCiAJc2VsZWN0IFJFR01BUF9JMkMKIAlzZWxlY3QgUkVHTUFQX0lSUQotCXNlbGVjdCBSRUdVTEFUT1IKIAloZWxwCiAJIFN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIEVsZWN0cm9uaWNzIE1GRCBzZXJpZXMuCiAJIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBhY2Nlc3NpbmcgdGhlIGRldmljZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggOGJkNTRiMS4uNTM0NjdlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTEzLDcgKzEzLDcgQEAKIG9iai0kKENPTkZJR19NRkRfQ1JPU19FQ19JMkMpCSs9IGNyb3NfZWNfaTJjLm8KIG9iai0kKENPTkZJR19NRkRfQ1JPU19FQ19TUEkpCSs9IGNyb3NfZWNfc3BpLm8KIAotcnRzeF9wY2ktb2JqcwkJCTo9IHJ0c3hfcGNyLm8gcnRzNTIwOS5vIHJ0czUyMjkubyBydGw4NDExLm8gcnRzNTIyNy5vIHJ0czUyNDkubworcnRzeF9wY2ktb2JqcwkJCTo9IHJ0c3hfcGNyLm8gcnRzeF9nb3BzLm8gcnRzNTIwOS5vIHJ0czUyMjkubyBydGw4NDExLm8gcnRzNTIyNy5vIHJ0czUyNDkubwogb2JqLSQoQ09ORklHX01GRF9SVFNYX1BDSSkJKz0gcnRzeF9wY2kubwogb2JqLSQoQ09ORklHX01GRF9SVFNYX1VTQikJKz0gcnRzeF91c2IubwogCkBAIC0xNTcsNiArMTU3LDcgQEAKIG9iai0kKENPTkZJR19UUFM2NTkxMV9DT01QQVJBVE9SKQkrPSB0cHM2NTkxMS1jb21wYXJhdG9yLm8KIG9iai0kKENPTkZJR19NRkRfVFBTNjUwOTApCSs9IHRwczY1MDkwLm8KIG9iai0kKENPTkZJR19NRkRfQUFUMjg3MF9DT1JFKQkrPSBhYXQyODcwLWNvcmUubworb2JqLSQoQ09ORklHX01GRF9BVE1FTF9ITENEQykJKz0gYXRtZWwtaGxjZGMubwogb2JqLSQoQ09ORklHX01GRF9JTlRFTF9NU0lDKQkrPSBpbnRlbF9tc2ljLm8KIG9iai0kKENPTkZJR19NRkRfUEFMTUFTKQkrPSBwYWxtYXMubwogb2JqLSQoQ09ORklHX01GRF9WSVBFUkJPQVJEKSAgICArPSB2aXBlcmJvYXJkLm8KQEAgLTE3NCw2ICsxNzUsNyBAQAogb2JqLSQoQ09ORklHX01GRF9JUEFRX01JQ1JPKQkrPSBpcGFxLW1pY3JvLm8KIG9iai0kKENPTkZJR19NRkRfTUVORjIxQk1DKQkrPSBtZW5mMjFibWMubwogb2JqLSQoQ09ORklHX01GRF9ISTY0MjFfUE1JQykJKz0gaGk2NDIxLXBtaWMtY29yZS5vCitvYmotJChDT05GSUdfTUZEX0RMTjIpCQkrPSBkbG4yLm8KIAogaW50ZWwtc29jLXBtaWMtb2JqcwkJOj0gaW50ZWxfc29jX3BtaWNfY29yZS5vIGludGVsX3NvY19wbWljX2NyYy5vCiBvYmotJChDT05GSUdfSU5URUxfU09DX1BNSUMpCSs9IGludGVsLXNvYy1wbWljLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FiODUwMC1ncGFkYy5jIGIvZHJpdmVycy9tZmQvYWI4NTAwLWdwYWRjLmMKaW5kZXggMzYwMDBmOS4uOGUzMTY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYWI4NTAwLWdwYWRjLmMKKysrIGIvZHJpdmVycy9tZmQvYWI4NTAwLWdwYWRjLmMKQEAgLTg2Nyw3ICs4NjcsNyBAQAogCQlncGFkYy0+Y2FsX2RhdGFbQURDX0lOUFVUX1ZCQVRdLm9mZnNldCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBhYjg1MDBfZ3BhZGNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWI4NTAwX2dwYWRjICpncGFkYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWI4NTAwLXN5c2N0cmwuYyBiL2RyaXZlcnMvbWZkL2FiODUwMC1zeXNjdHJsLmMKaW5kZXggOGUwZGFlNS4uOTRkYmNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYWI4NTAwLXN5c2N0cmwuYworKysgYi9kcml2ZXJzL21mZC9hYjg1MDAtc3lzY3RybC5jCkBAIC04NSw2MyArODUsNiBAQAogCX0KIH0KIAotLyoKLSAqIFVzZSB0aGUgQUIgV0QgdG8gcmVzZXQgdGhlIHBsYXRmb3JtLiBJdCB3aWxsIHBlcmZvcm0gYSBoYXJkCi0gKiByZXNldCBpbnN0ZWFkIG9mIGEgc29mdCByZXNldC4gV3JpdGUgdGhlIHJlc2V0IHJlYXNvbiB0bwotICogdGhlIEFCIGJlZm9yZSByZXNldCwgd2hpY2ggY2FuIGJlIHJlYWQgdXBvbiByZXN0YXJ0LgotICovCi12b2lkIGFiODUwMF9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQotewotCXN0cnVjdCBhYjg1MDBfcGxhdGZvcm1fZGF0YSAqcGxhdDsKLQlzdHJ1Y3QgYWI4NTAwX3N5c2N0cmxfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0JdTE2IHJlYXNvbiA9IDA7Ci0JdTggdmFsOwotCi0JaWYgKHN5c2N0cmxfZGV2ID09IE5VTEwpIHsKLQkJcHJfZXJyKCIlczogc3lzY3RybCBub3QgaW5pdGlhbGl6ZWRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCXBsYXQgPSBkZXZfZ2V0X3BsYXRkYXRhKHN5c2N0cmxfZGV2LT5wYXJlbnQpOwotCXBkYXRhID0gcGxhdC0+c3lzY3RybDsKLQlpZiAocGRhdGEgJiYgcGRhdGEtPnJlYm9vdF9yZWFzb25fY29kZSkKLQkJcmVhc29uID0gcGRhdGEtPnJlYm9vdF9yZWFzb25fY29kZShjbWQpOwotCWVsc2UKLQkJcHJfd2FybigiWyVzXSBObyByZWJvb3QgcmVhc29uIHNldC4gRGVmYXVsdCByZWFzb24gJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmVhc29uKTsKLQotCS8qCi0JICogRGlzYWJsZSBSVEMgYWxhcm0sIGp1c3QgYSBwcmVjYXV0aW9uIHNvIHRoYXQgbm8gYWxhcm0KLQkgKiBpcyBydW5uaW5nIHdoZW4gV0QgcmVzZXQgaXMgZXhlY3V0ZWQuCi0JICovCi0JYWJ4NTAwX2dldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKHN5c2N0cmxfZGV2LCBBQjg1MDBfUlRDLAotCQlSVENfQ1RSTCAsICZ2YWwpOwotCWFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShzeXNjdHJsX2RldiwgQUI4NTAwX1JUQywKLQkJUlRDX0NUUkwgLCAodmFsICYgflJUQ19BTEFSTV9FTkFCTEUpKTsKLQotCS8qCi0JICogQW5kcm9pZCBpcyBub3QgdXNpbmcgdGhlIFJUQyBhbGFybSByZWdpc3RlcnMgZHVyaW5nIHJlYm9vdAotCSAqIHNvIHdlIGJvcnJvdyB0aGVtIGZvciB3cml0aW5nIHRoZSByZWFzb24gb2YgcmVzZXQKLQkgKi8KLQotCS8qIHJlYXNvbls4IExTQl0gKi8KLQl2YWwgPSByZWFzb24gJiAweEZGOwotCWFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShzeXNjdHJsX2RldiwgQUI4NTAwX1JUQywKLQkJQUI4NTAwX0FMQVJNX01JTl9MT1cgLCB2YWwpOwotCi0JLyogcmVhc29uWzggTVNCXSAqLwotCXZhbCA9IChyZWFzb24+PjgpICYgMHhGRjsKLQlhYng1MDBfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoc3lzY3RybF9kZXYsIEFCODUwMF9SVEMsCi0JCUFCODUwMF9BTEFSTV9NSU5fTUlEICwgdmFsKTsKLQotCS8qIFNldHRpbmcgV0QgdGltZW91dCB0byAwICovCi0JYWI4NTAwX3N5c2N0cmxfd3JpdGUoQUI4NTAwX01BSU5XRE9HVElNRVIsIDB4RkYsIDB4MCk7Ci0KLQkvKiBTZXR0aW5nIHRoZSBwYXJhbWV0ZXJzIHRvIEFCODUwMCBXRCovCi0JYWI4NTAwX3N5c2N0cmxfd3JpdGUoQUI4NTAwX01BSU5XRE9HQ1RSTCwgMHhGRiwgKEFCODUwMF9FTkFCTEVfV0QgfAotCQlBQjg1MDBfV0RfUkVTVEFSVF9PTl9FWFBJUkUgfCBBQjg1MDBfS0lDS19XRCkpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgdmFsaWRfYmFuayh1OCBiYW5rKQogewogCXJldHVybiAoKGJhbmsgPT0gQUI4NTAwX1NZU19DVFJMMV9CTE9DSykgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FyaXpvbmEtY29yZS5jIGIvZHJpdmVycy9tZmQvYXJpem9uYS1jb3JlLmMKaW5kZXggYmNlN2MwNy4uMDliYThmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYXJpem9uYS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvYXJpem9uYS1jb3JlLmMKQEAgLTMzMCw3ICszMzAsNyBAQAogCQlyZXR1cm4gZXJyOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYXJpem9uYV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTEwMjQsNyArMTAyNCw3IEBACiAJCWdvdG8gZXJyX2lycTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogCXJlZ3VsYXRvcl9kaXNhYmxlKGFyaXpvbmEtPmRjdmRkKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hcml6b25hLXNwaS5jIGIvZHJpdmVycy9tZmQvYXJpem9uYS1zcGkuYwppbmRleCA1MTQ1ZDc4Li44ZWY1OGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hcml6b25hLXNwaS5jCisrKyBiL2RyaXZlcnMvbWZkL2FyaXpvbmEtc3BpLmMKQEAgLTc1LDcgKzc1LDkgQEAKIHN0YXRpYyBpbnQgYXJpem9uYV9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKwogCWFyaXpvbmFfZGV2X2V4aXQoYXJpem9uYSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYXRtZWwtaGxjZGMuYyBiL2RyaXZlcnMvbWZkL2F0bWVsLWhsY2RjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkNThmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL2F0bWVsLWhsY2RjLmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBFbGVjdHJvbnMKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBdG1lbAorICoKKyAqIEF1dGhvcjogQm9yaXMgQlJFWklMTE9OIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9hdG1lbC1obGNkYy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNkZWZpbmUgQVRNRUxfSExDRENfUkVHX01BWAkJKDB4NDAwMCAtIDB4NCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBhdG1lbF9obGNkY19jZWxsc1tdID0geworCXsKKwkJLm5hbWUgPSAiYXRtZWwtaGxjZGMtcHdtIiwKKwkJLm9mX2NvbXBhdGlibGUgPSAiYXRtZWwsaGxjZGMtcHdtIiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXRtZWwtaGxjZGMtZGMiLAorCQkub2ZfY29tcGF0aWJsZSA9ICJhdG1lbCxobGNkYy1kaXNwbGF5LWNvbnRyb2xsZXIiLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYXRtZWxfaGxjZGNfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSAzMiwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQsCisJLm1heF9yZWdpc3RlciA9IEFUTUVMX0hMQ0RDX1JFR19NQVgsCit9OworCitzdGF0aWMgaW50IGF0bWVsX2hsY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgYXRtZWxfaGxjZGMgKmhsY2RjOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqcmVnczsKKworCWhsY2RjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpobGNkYyksIEdGUF9LRVJORUwpOworCWlmICghaGxjZGMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsKKworCWhsY2RjLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChobGNkYy0+aXJxIDwgMCkKKwkJcmV0dXJuIGhsY2RjLT5pcnE7CisKKwlobGNkYy0+cGVyaXBoX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJwZXJpcGhfY2xrIik7CisJaWYgKElTX0VSUihobGNkYy0+cGVyaXBoX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHBlcmlwaGVyYWwgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihobGNkYy0+cGVyaXBoX2Nsayk7CisJfQorCisJaGxjZGMtPnN5c19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAic3lzX2NsayIpOworCWlmIChJU19FUlIoaGxjZGMtPnN5c19jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBzeXN0ZW0gY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihobGNkYy0+c3lzX2Nsayk7CisJfQorCisJaGxjZGMtPnNsb3dfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInNsb3dfY2xrIik7CisJaWYgKElTX0VSUihobGNkYy0+c2xvd19jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBzbG93IGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaGxjZGMtPnNsb3dfY2xrKTsKKwl9CisKKwlobGNkYy0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgcmVncywKKwkJCQkJICAgICAgJmF0bWVsX2hsY2RjX3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIoaGxjZGMtPnJlZ21hcCkpCisJCXJldHVybiBQVFJfRVJSKGhsY2RjLT5yZWdtYXApOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgaGxjZGMpOworCisJcmV0dXJuIG1mZF9hZGRfZGV2aWNlcyhkZXYsIC0xLCBhdG1lbF9obGNkY19jZWxscywKKwkJCSAgICAgICBBUlJBWV9TSVpFKGF0bWVsX2hsY2RjX2NlbGxzKSwKKwkJCSAgICAgICBOVUxMLCAwLCBOVUxMKTsKK30KKworc3RhdGljIGludCBhdG1lbF9obGNkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwltZmRfcmVtb3ZlX2RldmljZXMoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRtZWxfaGxjZGNfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDMtaGxjZGMiIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfaGxjZGNfZHJpdmVyID0geworCS5wcm9iZSA9IGF0bWVsX2hsY2RjX3Byb2JlLAorCS5yZW1vdmUgPSBhdG1lbF9obGNkY19yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYXRtZWwtaGxjZGMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBhdG1lbF9obGNkY19tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXRtZWxfaGxjZGNfZHJpdmVyKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdG1lbC1obGNkYyIpOworTU9EVUxFX0FVVEhPUigiQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdG1lbCBITENEQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2F4cDIweC5jIGIvZHJpdmVycy9tZmQvYXhwMjB4LmMKaW5kZXggNjIzMWFkYi4uYjFiNTgwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYXhwMjB4LmMKKysrIGIvZHJpdmVycy9tZmQvYXhwMjB4LmMKQEAgLTEsOSArMSw5IEBACiAvKgotICogYXhwMjB4LmMgLSBNRkQgY29yZSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycyBBWFAyMDIgYW5kIEFYUDIwOQorICogYXhwMjB4LmMgLSBNRkQgY29yZSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycycgUG93ZXIgTWFuYWdlbWVudCBJQ3MKICAqCi0gKiBBWFAyMHggY29tcHJpc2VzIGFuIGFkYXB0aXZlIFVTQi1Db21wYXRpYmxlIFBXTSBjaGFyZ2VyLCAyIEJVQ0sgREMtREMKLSAqIGNvbnZlcnRlcnMsIDUgTERPcywgbXVsdGlwbGUgMTItYml0IEFEQ3Mgb2Ygdm9sdGFnZSwgY3VycmVudCBhbmQgdGVtcGVyYXR1cmUKLSAqIGFzIHdlbGwgYXMgNCBjb25maWd1cmFibGUgR1BJT3MuCisgKiBBWFAyMHggdHlwaWNhbGx5IGNvbXByaXNlcyBhbiBhZGFwdGl2ZSBVU0ItQ29tcGF0aWJsZSBQV00gY2hhcmdlciwgQlVDSyBEQy1EQworICogY29udmVydGVycywgTERPcywgbXVsdGlwbGUgMTItYml0IEFEQ3Mgb2Ygdm9sdGFnZSwgY3VycmVudCBhbmQgdGVtcGVyYXR1cmUKKyAqIGFzIHdlbGwgYXMgY29uZmlndXJhYmxlIEdQSU9zLgogICoKICAqIEF1dGhvcjogQ2FybG8gQ2Fpb25lIDxjYXJsb0BjYWlvbmUub3JnPgogICoKQEAgLTI1LDkgKzI1LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAKICNkZWZpbmUgQVhQMjBYX09GRgkweDgwCiAKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnN0ICpheHAyMHhfbW9kZWxfbmFtZXNbXSA9IHsKKwkiQVhQMjAyIiwKKwkiQVhQMjA5IiwKKwkiQVhQMjg4IiwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGF4cDIweF93cml0ZWFibGVfcmFuZ2VzW10gPSB7CiAJcmVnbWFwX3JlZ19yYW5nZShBWFAyMFhfREFUQUNBQ0hFKDApLCBBWFAyMFhfSVJRNV9TVEFURSksCiAJcmVnbWFwX3JlZ19yYW5nZShBWFAyMFhfRENEQ19NT0RFLCBBWFAyMFhfRkdfUkVTKSwKQEAgLTQ3LDYgKzU0LDI1IEBACiAJLm5feWVzX3Jhbmdlcwk9IEFSUkFZX1NJWkUoYXhwMjB4X3ZvbGF0aWxlX3JhbmdlcyksCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBheHAyODhfd3JpdGVhYmxlX3Jhbmdlc1tdID0geworCXJlZ21hcF9yZWdfcmFuZ2UoQVhQMjBYX0RBVEFDQUNIRSgwKSwgQVhQMjBYX0lSUTZfU1RBVEUpLAorCXJlZ21hcF9yZWdfcmFuZ2UoQVhQMjBYX0RDRENfTU9ERSwgQVhQMjg4X0ZHX1RVTkU1KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGF4cDI4OF92b2xhdGlsZV9yYW5nZXNbXSA9IHsKKwlyZWdtYXBfcmVnX3JhbmdlKEFYUDIwWF9JUlExX0VOLCBBWFAyMFhfSVBTT1VUX1ZfSElHSF9MKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSBheHAyODhfd3JpdGVhYmxlX3RhYmxlID0geworCS55ZXNfcmFuZ2VzCT0gYXhwMjg4X3dyaXRlYWJsZV9yYW5nZXMsCisJLm5feWVzX3Jhbmdlcwk9IEFSUkFZX1NJWkUoYXhwMjg4X3dyaXRlYWJsZV9yYW5nZXMpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIGF4cDI4OF92b2xhdGlsZV90YWJsZSA9IHsKKwkueWVzX3Jhbmdlcwk9IGF4cDI4OF92b2xhdGlsZV9yYW5nZXMsCisJLm5feWVzX3Jhbmdlcwk9IEFSUkFZX1NJWkUoYXhwMjg4X3ZvbGF0aWxlX3JhbmdlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGF4cDIweF9wZWtfcmVzb3VyY2VzW10gPSB7CiAJewogCQkubmFtZQk9ICJQRUtfREJSIiwKQEAgLTYxLDYgKzg3LDM5IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXhwMjg4X2JhdHRlcnlfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1FXQlRVLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1FXQlRVLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9XQlRVLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1dCVFUsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1FXQlRPLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1FXQlRPLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9XQlRPLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1dCVE8sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1dMMiwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9XTDIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1dMMSwKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9XTDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYXhwMjB4X3JlZ21hcF9jb25maWcgPSB7CiAJLnJlZ19iaXRzCT0gOCwKIAkudmFsX2JpdHMJPSA4LApAQCAtNzAsNDcgKzEyOSw5NiBAQAogCS5jYWNoZV90eXBlCT0gUkVHQ0FDSEVfUkJUUkVFLAogfTsKIAotI2RlZmluZSBBWFAyMFhfSVJRKF9pcnEsIF9vZmYsIF9tYXNrKSBcCi0JW0FYUDIwWF9JUlFfIyNfaXJxXSA9IHsgLnJlZ19vZmZzZXQgPSAoX29mZiksIC5tYXNrID0gQklUKF9tYXNrKSB9CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYXhwMjg4X3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzCT0gOCwKKwkudmFsX2JpdHMJPSA4LAorCS53cl90YWJsZQk9ICZheHAyODhfd3JpdGVhYmxlX3RhYmxlLAorCS52b2xhdGlsZV90YWJsZQk9ICZheHAyODhfdm9sYXRpbGVfdGFibGUsCisJLm1heF9yZWdpc3Rlcgk9IEFYUDI4OF9GR19UVU5FNSwKKwkuY2FjaGVfdHlwZQk9IFJFR0NBQ0hFX1JCVFJFRSwKK307CisKKyNkZWZpbmUgSU5JVF9SRUdNQVBfSVJRKF92YXJpYW50LCBfaXJxLCBfb2ZmLCBfbWFzaykJCQlcCisJW192YXJpYW50IyNfSVJRXyMjX2lycV0gPSB7IC5yZWdfb2Zmc2V0ID0gKF9vZmYpLCAubWFzayA9IEJJVChfbWFzaykgfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9pcnEgYXhwMjB4X3JlZ21hcF9pcnFzW10gPSB7Ci0JQVhQMjBYX0lSUShBQ0lOX09WRVJfViwJCTAsIDcpLAotCUFYUDIwWF9JUlEoQUNJTl9QTFVHSU4sCQkwLCA2KSwKLQlBWFAyMFhfSVJRKEFDSU5fUkVNT1ZBTCwJMCwgNSksCi0JQVhQMjBYX0lSUShWQlVTX09WRVJfViwJCTAsIDQpLAotCUFYUDIwWF9JUlEoVkJVU19QTFVHSU4sCQkwLCAzKSwKLQlBWFAyMFhfSVJRKFZCVVNfUkVNT1ZBTCwJMCwgMiksCi0JQVhQMjBYX0lSUShWQlVTX1ZfTE9XLAkJMCwgMSksCi0JQVhQMjBYX0lSUShCQVRUX1BMVUdJTiwJCTEsIDcpLAotCUFYUDIwWF9JUlEoQkFUVF9SRU1PVkFMLAkxLCA2KSwKLQlBWFAyMFhfSVJRKEJBVFRfRU5UX0FDVF9NT0RFLAkxLCA1KSwKLQlBWFAyMFhfSVJRKEJBVFRfRVhJVF9BQ1RfTU9ERSwJMSwgNCksCi0JQVhQMjBYX0lSUShDSEFSRywJCTEsIDMpLAotCUFYUDIwWF9JUlEoQ0hBUkdfRE9ORSwJCTEsIDIpLAotCUFYUDIwWF9JUlEoQkFUVF9URU1QX0hJR0gsCTEsIDEpLAotCUFYUDIwWF9JUlEoQkFUVF9URU1QX0xPVywJMSwgMCksCi0JQVhQMjBYX0lSUShESUVfVEVNUF9ISUdILAkyLCA3KSwKLQlBWFAyMFhfSVJRKENIQVJHX0lfTE9XLAkJMiwgNiksCi0JQVhQMjBYX0lSUShEQ0RDMV9WX0xPTkcsCTIsIDUpLAotCUFYUDIwWF9JUlEoRENEQzJfVl9MT05HLAkyLCA0KSwKLQlBWFAyMFhfSVJRKERDREMzX1ZfTE9ORywJMiwgMyksCi0JQVhQMjBYX0lSUShQRUtfU0hPUlQsCQkyLCAxKSwKLQlBWFAyMFhfSVJRKFBFS19MT05HLAkJMiwgMCksCi0JQVhQMjBYX0lSUShOX09FX1BXUl9PTiwJCTMsIDcpLAotCUFYUDIwWF9JUlEoTl9PRV9QV1JfT0ZGLAkzLCA2KSwKLQlBWFAyMFhfSVJRKFZCVVNfVkFMSUQsCQkzLCA1KSwKLQlBWFAyMFhfSVJRKFZCVVNfTk9UX1ZBTElELAkzLCA0KSwKLQlBWFAyMFhfSVJRKFZCVVNfU0VTU19WQUxJRCwJMywgMyksCi0JQVhQMjBYX0lSUShWQlVTX1NFU1NfRU5ELAkzLCAyKSwKLQlBWFAyMFhfSVJRKExPV19QV1JfTFZMMSwJMywgMSksCi0JQVhQMjBYX0lSUShMT1dfUFdSX0xWTDIsCTMsIDApLAotCUFYUDIwWF9JUlEoVElNRVIsCQk0LCA3KSwKLQlBWFAyMFhfSVJRKFBFS19SSVNfRURHRSwJNCwgNiksCi0JQVhQMjBYX0lSUShQRUtfRkFMX0VER0UsCTQsIDUpLAotCUFYUDIwWF9JUlEoR1BJTzNfSU5QVVQsCQk0LCAzKSwKLQlBWFAyMFhfSVJRKEdQSU8yX0lOUFVULAkJNCwgMiksCi0JQVhQMjBYX0lSUShHUElPMV9JTlBVVCwJCTQsIDEpLAotCUFYUDIwWF9JUlEoR1BJTzBfSU5QVVQsCQk0LCAwKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBBQ0lOX09WRVJfViwJCTAsIDcpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEFDSU5fUExVR0lOLAkJMCwgNiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQUNJTl9SRU1PVkFMLAkgICAgICAgIDAsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFZCVVNfT1ZFUl9WLAkJMCwgNCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19QTFVHSU4sCQkwLCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBWQlVTX1JFTU9WQUwsCSAgICAgICAgMCwgMiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19WX0xPVywJCTAsIDEpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEJBVFRfUExVR0lOLAkJMSwgNyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQkFUVF9SRU1PVkFMLAkgICAgICAgIDEsIDYpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEJBVFRfRU5UX0FDVF9NT0RFLAkxLCA1KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBCQVRUX0VYSVRfQUNUX01PREUsCTEsIDQpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIENIQVJHLAkJICAgICAgICAxLCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBDSEFSR19ET05FLAkJMSwgMiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQkFUVF9URU1QX0hJR0gsCSAgICAgICAgMSwgMSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgQkFUVF9URU1QX0xPVywJICAgICAgICAxLCAwKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBESUVfVEVNUF9ISUdILAkgICAgICAgIDIsIDcpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIENIQVJHX0lfTE9XLAkJMiwgNiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgRENEQzFfVl9MT05HLAkgICAgICAgIDIsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIERDREMyX1ZfTE9ORywJICAgICAgICAyLCA0KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBEQ0RDM19WX0xPTkcsCSAgICAgICAgMiwgMyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgUEVLX1NIT1JULAkJMiwgMSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgUEVLX0xPTkcsCQkyLCAwKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBOX09FX1BXUl9PTiwJCTMsIDcpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIE5fT0VfUFdSX09GRiwJICAgICAgICAzLCA2KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBWQlVTX1ZBTElELAkJMywgNSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19OT1RfVkFMSUQsCSAgICAgICAgMywgNCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVkJVU19TRVNTX1ZBTElELAkzLCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBWQlVTX1NFU1NfRU5ELAkgICAgICAgIDMsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIExPV19QV1JfTFZMMSwJICAgICAgICAzLCAxKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBMT1dfUFdSX0xWTDIsCSAgICAgICAgMywgMCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgVElNRVIsCQkgICAgICAgIDQsIDcpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIFBFS19SSVNfRURHRSwJICAgICAgICA0LCA2KSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBQRUtfRkFMX0VER0UsCSAgICAgICAgNCwgNSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgR1BJTzNfSU5QVVQsCQk0LCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjBYLCBHUElPMl9JTlBVVCwJCTQsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyMFgsIEdQSU8xX0lOUFVULAkJNCwgMSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDIwWCwgR1BJTzBfSU5QVVQsCQk0LCAwKSwKK307CisKKy8qIHNvbWUgSVJRcyBhcmUgY29tcGF0aWJsZSB3aXRoIGF4cDIweCBtb2RlbHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycSBheHAyODhfcmVnbWFwX2lycXNbXSA9IHsKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBWQlVTX0ZBTEwsICAgICAgICAgICAgICAwLCAyKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBWQlVTX1JJU0UsICAgICAgICAgICAgICAwLCAzKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBPViwgICAgICAgICAgICAgICAgICAgICAwLCA0KSwKKworCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIERPTkUsICAgICAgICAgICAgICAgICAgIDEsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIENIQVJHSU5HLCAgICAgICAgICAgICAgIDEsIDMpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFNBRkVfUVVJVCwgICAgICAgICAgICAgIDEsIDQpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFNBRkVfRU5URVIsICAgICAgICAgICAgIDEsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIEFCU0VOVCwgICAgICAgICAgICAgICAgIDEsIDYpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIEFQUEVORCwgICAgICAgICAgICAgICAgIDEsIDcpLAorCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgUVdCVFUsICAgICAgICAgICAgICAgICAgMiwgMCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgV0JUVSwgICAgICAgICAgICAgICAgICAgMiwgMSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgUVdCVE8sICAgICAgICAgICAgICAgICAgMiwgMiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgV0JUTywgICAgICAgICAgICAgICAgICAgMiwgMyksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgUUNCVFUsICAgICAgICAgICAgICAgICAgMiwgNCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgQ0JUVSwgICAgICAgICAgICAgICAgICAgMiwgNSksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgUUNCVE8sICAgICAgICAgICAgICAgICAgMiwgNiksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgQ0JUTywgICAgICAgICAgICAgICAgICAgMiwgNyksCisKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBXTDIsICAgICAgICAgICAgICAgICAgICAzLCAwKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBXTDEsICAgICAgICAgICAgICAgICAgICAzLCAxKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBHUEFEQywgICAgICAgICAgICAgICAgICAzLCAyKSwKKwlJTklUX1JFR01BUF9JUlEoQVhQMjg4LCBPVCwgICAgICAgICAgICAgICAgICAgICAzLCA3KSwKKworCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIEdQSU8wLCAgICAgICAgICAgICAgICAgIDQsIDApLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIEdQSU8xLCAgICAgICAgICAgICAgICAgIDQsIDEpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFBPS08sICAgICAgICAgICAgICAgICAgIDQsIDIpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFBPS0wsICAgICAgICAgICAgICAgICAgIDQsIDMpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFBPS1MsICAgICAgICAgICAgICAgICAgIDQsIDQpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFBPS04sICAgICAgICAgICAgICAgICAgIDQsIDUpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFBPS1AsICAgICAgICAgICAgICAgICAgIDQsIDYpLAorCUlOSVRfUkVHTUFQX0lSUShBWFAyODgsIFRJTUVSLCAgICAgICAgICAgICAgICAgIDQsIDcpLAorCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgTVZfQ0hORywgICAgICAgICAgICAgICAgNSwgMCksCisJSU5JVF9SRUdNQVBfSVJRKEFYUDI4OCwgQkNfVVNCX0NITkcsICAgICAgICAgICAgNSwgMSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheHAyMHhfb2ZfbWF0Y2hbXSA9IHsKQEAgLTEyOCwxNiArMjM2LDM5IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGF4cDIweF9pMmNfaWQpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGF4cDIweF9hY3BpX21hdGNoW10gPSB7CisJeworCQkuaWQgPSAiSU5UMzNGNCIsCisJCS5kcml2ZXJfZGF0YSA9IEFYUDI4OF9JRCwKKwl9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGF4cDIweF9hY3BpX21hdGNoKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfaXJxX2NoaXAgYXhwMjB4X3JlZ21hcF9pcnFfY2hpcCA9IHsKIAkubmFtZQkJCT0gImF4cDIweF9pcnFfY2hpcCIsCiAJLnN0YXR1c19iYXNlCQk9IEFYUDIwWF9JUlExX1NUQVRFLAogCS5hY2tfYmFzZQkJPSBBWFAyMFhfSVJRMV9TVEFURSwKIAkubWFza19iYXNlCQk9IEFYUDIwWF9JUlExX0VOLAotCS5udW1fcmVncwkJPSA1LAotCS5pcnFzCQkJPSBheHAyMHhfcmVnbWFwX2lycXMsCi0JLm51bV9pcnFzCQk9IEFSUkFZX1NJWkUoYXhwMjB4X3JlZ21hcF9pcnFzKSwKIAkubWFza19pbnZlcnQJCT0gdHJ1ZSwKIAkuaW5pdF9hY2tfbWFza2VkCT0gdHJ1ZSwKKwkuaXJxcwkJCT0gYXhwMjB4X3JlZ21hcF9pcnFzLAorCS5udW1faXJxcwkJPSBBUlJBWV9TSVpFKGF4cDIweF9yZWdtYXBfaXJxcyksCisJLm51bV9yZWdzCQk9IDUsCisKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycV9jaGlwIGF4cDI4OF9yZWdtYXBfaXJxX2NoaXAgPSB7CisJLm5hbWUJCQk9ICJheHAyODhfaXJxX2NoaXAiLAorCS5zdGF0dXNfYmFzZQkJPSBBWFAyMFhfSVJRMV9TVEFURSwKKwkuYWNrX2Jhc2UJCT0gQVhQMjBYX0lSUTFfU1RBVEUsCisJLm1hc2tfYmFzZQkJPSBBWFAyMFhfSVJRMV9FTiwKKwkubWFza19pbnZlcnQJCT0gdHJ1ZSwKKwkuaW5pdF9hY2tfbWFza2VkCT0gdHJ1ZSwKKwkuaXJxcwkJCT0gYXhwMjg4X3JlZ21hcF9pcnFzLAorCS5udW1faXJxcwkJPSBBUlJBWV9TSVpFKGF4cDI4OF9yZWdtYXBfaXJxcyksCisJLm51bV9yZWdzCQk9IDYsCisKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgYXhwMjB4X2NlbGxzW10gPSB7CkBAIC0xNTAsMzYgKzI4MSwxNTggQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBheHAyODhfYWRjX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUgID0gIkdQQURDIiwKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9HUEFEQywKKwkJLmVuZCAgID0gQVhQMjg4X0lSUV9HUEFEQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXhwMjg4X2NoYXJnZXJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX09WLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX09WLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9ET05FLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX0RPTkUsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX0NIQVJHSU5HLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX0NIQVJHSU5HLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9TQUZFX1FVSVQsCisJCS5lbmQgICA9IEFYUDI4OF9JUlFfU0FGRV9RVUlULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9TQUZFX0VOVEVSLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1NBRkVfRU5URVIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1FDQlRVLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1FDQlRVLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9DQlRVLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX0NCVFUsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBBWFAyODhfSVJRX1FDQlRPLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX1FDQlRPLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQVhQMjg4X0lSUV9DQlRPLAorCQkuZW5kICAgPSBBWFAyODhfSVJRX0NCVE8sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIGF4cDI4OF9jZWxsc1tdID0geworCXsKKwkJLm5hbWUgPSAiYXhwMjg4X2FkYyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShheHAyODhfYWRjX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSBheHAyODhfYWRjX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXhwMjg4X2NoYXJnZXIiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYXhwMjg4X2NoYXJnZXJfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IGF4cDI4OF9jaGFyZ2VyX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXhwMjg4X2JhdHRlcnkiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYXhwMjg4X2JhdHRlcnlfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IGF4cDI4OF9iYXR0ZXJ5X3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXhwMjg4X3BtaWNfYWNwaSIsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYXhwMjB4X2RldiAqYXhwMjB4X3BtX3Bvd2VyX29mZjsKIHN0YXRpYyB2b2lkIGF4cDIweF9wb3dlcl9vZmYodm9pZCkKIHsKKwlpZiAoYXhwMjB4X3BtX3Bvd2VyX29mZi0+dmFyaWFudCA9PSBBWFAyODhfSUQpCisJCXJldHVybjsKKwogCXJlZ21hcF93cml0ZShheHAyMHhfcG1fcG93ZXJfb2ZmLT5yZWdtYXAsIEFYUDIwWF9PRkZfQ1RSTCwKIAkJICAgICBBWFAyMFhfT0ZGKTsKIH0KIAorc3RhdGljIGludCBheHAyMHhfbWF0Y2hfZGV2aWNlKHN0cnVjdCBheHAyMHhfZGV2ICpheHAyMHgsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKmFjcGlfaWQ7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CisKKwlpZiAoZGV2LT5vZl9ub2RlKSB7CisJCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKGF4cDIweF9vZl9tYXRjaCwgZGV2KTsKKwkJaWYgKCFvZl9pZCkgeworCQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gbWF0Y2ggT0YgSURcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJYXhwMjB4LT52YXJpYW50ID0gKGxvbmcpIG9mX2lkLT5kYXRhOworCX0gZWxzZSB7CisJCWFjcGlfaWQgPSBhY3BpX21hdGNoX2RldmljZShkZXYtPmRyaXZlci0+YWNwaV9tYXRjaF90YWJsZSwgZGV2KTsKKwkJaWYgKCFhY3BpX2lkIHx8ICFhY3BpX2lkLT5kcml2ZXJfZGF0YSkgeworCQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gbWF0Y2ggQUNQSSBJRCBhbmQgZGF0YVxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlheHAyMHgtPnZhcmlhbnQgPSAobG9uZykgYWNwaV9pZC0+ZHJpdmVyX2RhdGE7CisJfQorCisJc3dpdGNoIChheHAyMHgtPnZhcmlhbnQpIHsKKwljYXNlIEFYUDIwMl9JRDoKKwljYXNlIEFYUDIwOV9JRDoKKwkJYXhwMjB4LT5ucl9jZWxscyA9IEFSUkFZX1NJWkUoYXhwMjB4X2NlbGxzKTsKKwkJYXhwMjB4LT5jZWxscyA9IGF4cDIweF9jZWxsczsKKwkJYXhwMjB4LT5yZWdtYXBfY2ZnID0gJmF4cDIweF9yZWdtYXBfY29uZmlnOworCQlheHAyMHgtPnJlZ21hcF9pcnFfY2hpcCA9ICZheHAyMHhfcmVnbWFwX2lycV9jaGlwOworCQlicmVhazsKKwljYXNlIEFYUDI4OF9JRDoKKwkJYXhwMjB4LT5jZWxscyA9IGF4cDI4OF9jZWxsczsKKwkJYXhwMjB4LT5ucl9jZWxscyA9IEFSUkFZX1NJWkUoYXhwMjg4X2NlbGxzKTsKKwkJYXhwMjB4LT5yZWdtYXBfY2ZnID0gJmF4cDI4OF9yZWdtYXBfY29uZmlnOworCQlheHAyMHgtPnJlZ21hcF9pcnFfY2hpcCA9ICZheHAyODhfcmVnbWFwX2lycV9jaGlwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgInVuc3VwcG9ydGVkIEFYUDIwWCBJRCAlbHVcbiIsIGF4cDIweC0+dmFyaWFudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZfaW5mbyhkZXYsICJBWFAyMHggdmFyaWFudCAlcyBmb3VuZFxuIiwKKwkJYXhwMjB4X21vZGVsX25hbWVzW2F4cDIweC0+dmFyaWFudF0pOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYXhwMjB4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgYXhwMjB4X2RldiAqYXhwMjB4OwotCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOwogCWludCByZXQ7CiAKIAlheHAyMHggPSBkZXZtX2t6YWxsb2MoJmkyYy0+ZGV2LCBzaXplb2YoKmF4cDIweCksIEdGUF9LRVJORUwpOwogCWlmICghYXhwMjB4KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKGF4cDIweF9vZl9tYXRjaCwgJmkyYy0+ZGV2KTsKLQlpZiAoIW9mX2lkKSB7Ci0JCWRldl9lcnIoJmkyYy0+ZGV2LCAiVW5hYmxlIHRvIHNldHVwIEFYUDIwWCBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWF4cDIweC0+dmFyaWFudCA9IChsb25nKSBvZl9pZC0+ZGF0YTsKKwlyZXQgPSBheHAyMHhfbWF0Y2hfZGV2aWNlKGF4cDIweCwgJmkyYy0+ZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJYXhwMjB4LT5pMmNfY2xpZW50ID0gaTJjOwogCWF4cDIweC0+ZGV2ID0gJmkyYy0+ZGV2OwogCWRldl9zZXRfZHJ2ZGF0YShheHAyMHgtPmRldiwgYXhwMjB4KTsKIAotCWF4cDIweC0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCAmYXhwMjB4X3JlZ21hcF9jb25maWcpOworCWF4cDIweC0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCBheHAyMHgtPnJlZ21hcF9jZmcpOwogCWlmIChJU19FUlIoYXhwMjB4LT5yZWdtYXApKSB7CiAJCXJldCA9IFBUUl9FUlIoYXhwMjB4LT5yZWdtYXApOwogCQlkZXZfZXJyKCZpMmMtPmRldiwgInJlZ21hcCBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CkBAIC0xODgsMTUgKzQ0MSwxNSBAQAogCiAJcmV0ID0gcmVnbWFwX2FkZF9pcnFfY2hpcChheHAyMHgtPnJlZ21hcCwgaTJjLT5pcnEsCiAJCQkJICBJUlFGX09ORVNIT1QgfCBJUlFGX1NIQVJFRCwgLTEsCi0JCQkJICAmYXhwMjB4X3JlZ21hcF9pcnFfY2hpcCwKKwkJCQkgIGF4cDIweC0+cmVnbWFwX2lycV9jaGlwLAogCQkJCSAgJmF4cDIweC0+cmVnbWFwX2lycWMpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmaTJjLT5kZXYsICJmYWlsZWQgdG8gYWRkIGlycSBjaGlwOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMoYXhwMjB4LT5kZXYsIC0xLCBheHAyMHhfY2VsbHMsCi0JCQkgICAgICBBUlJBWV9TSVpFKGF4cDIweF9jZWxscyksIE5VTEwsIDAsIE5VTEwpOworCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhheHAyMHgtPmRldiwgLTEsIGF4cDIweC0+Y2VsbHMsCisJCQlheHAyMHgtPm5yX2NlbGxzLCBOVUxMLCAwLCBOVUxMKTsKIAogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmaTJjLT5kZXYsICJmYWlsZWQgdG8gYWRkIE1GRCBkZXZpY2VzOiAlZFxuIiwgcmV0KTsKQEAgLTIzNCw2ICs0ODcsNyBAQAogCQkubmFtZQk9ICJheHAyMHgiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm9mX21hdGNoX3RhYmxlCT0gb2ZfbWF0Y2hfcHRyKGF4cDIweF9vZl9tYXRjaCksCisJCS5hY3BpX21hdGNoX3RhYmxlID0gQUNQSV9QVFIoYXhwMjB4X2FjcGlfbWF0Y2gpLAogCX0sCiAJLnByb2JlCQk9IGF4cDIweF9pMmNfcHJvYmUsCiAJLnJlbW92ZQkJPSBheHAyMHhfaTJjX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RhOTA2My1jb3JlLmMgYi9kcml2ZXJzL21mZC9kYTkwNjMtY29yZS5jCmluZGV4IDkzZGI4YmIuLmYzOGJjOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2RhOTA2My1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvZGE5MDYzLWNvcmUuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCWRhOTA2My0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CiAJfSBlbHNlIHsKIAkJZGE5MDYzLT5mbGFncyA9IDA7Ci0JCWRhOTA2My0+aXJxX2Jhc2UgPSAwOworCQlkYTkwNjMtPmlycV9iYXNlID0gLTE7CiAJfQogCWRhOTA2My0+Y2hpcF9pcnEgPSBpcnE7CiAKQEAgLTE2OCw2ICsxNjgsOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCWRhOTA2My0+aXJxX2Jhc2UgPSByZWdtYXBfaXJxX2NoaXBfZ2V0X2Jhc2UoZGE5MDYzLT5yZWdtYXBfaXJxKTsKKwogCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhkYTkwNjMtPmRldiwgLTEsIGRhOTA2M19kZXZzLAogCQkJICAgICAgQVJSQVlfU0laRShkYTkwNjNfZGV2cyksIE5VTEwsIGRhOTA2My0+aXJxX2Jhc2UsCiAJCQkgICAgICBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RiODUwMC1wcmNtdS5jIGIvZHJpdmVycy9tZmQvZGI4NTAwLXByY211LmMKaW5kZXggMTkzY2YxNi4uYTgyMDQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvZGI4NTAwLXByY211LmMKKysrIGIvZHJpdmVycy9tZmQvZGI4NTAwLXByY211LmMKQEAgLTMxNTAsMjMgKzMxNTAsMjggQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicHJjbXUiKTsKIAlpZiAoIXJlcykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwcmNtdSBtZW1vcnkgcmVnaW9uIHByb3ZpZGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlwcmNtdV9iYXNlID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFwcmNtdV9iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJmYWlsZWQgdG8gaW9yZW1hcCBwcmNtdSByZWdpc3RlciBtZW1vcnlcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWluaXRfcHJjbV9yZWdpc3RlcnMoKTsKIAlkYng1MDBfZndfdmVyc2lvbl9pbml0KHBkZXYsIHBkYXRhLT52ZXJzaW9uX29mZnNldCk7CiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInByY211LXRjZG0iKTsKIAlpZiAoIXJlcykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwcmNtdSB0Y2RtIHJlZ2lvbiBwcm92aWRlZFxuIik7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJdGNkbV9iYXNlID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCiAJCQlyZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghdGNkbV9iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gaW9yZW1hcCBwcmNtdS10Y2RtIHJlZ2lzdGVyIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCS8qIENsZWFuIHVwIHRoZSBtYWlsYm94IGludGVycnVwdHMgYWZ0ZXIgcHJlLWtlcm5lbCBjb2RlLiAqLwogCXdyaXRlbChBTExfTUJPWF9CSVRTLCBQUkNNX0FSTV9JVDFfQ0xSKTsKQEAgLTMxNzQsMTUgKzMxNzksMTQgQEAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChpcnEgPD0gMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwcmNtdSBpcnEgcHJvdmlkZWRcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0dXJuIGlycTsKIAl9CiAKIAllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsIHByY211X2lycV9oYW5kbGVyLAogCSAgICAgICAgcHJjbXVfaXJxX3RocmVhZF9mbiwgSVJRRl9OT19TVVNQRU5ELCAicHJjbXUiLCBOVUxMKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcl9lcnIoInByY211OiBGYWlsZWQgdG8gYWxsb2NhdGUgSVJRX0RCODUwMF9QUkNNVTEuXG4iKTsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIG5vX2lycV9yZXR1cm47CisJCXJldHVybiBlcnI7CiAJfQogCiAJZGI4NTAwX2lycV9pbml0KG5wKTsKQEAgLTMyMDYsNyArMzIxMCw3IEBACiAJCWlmIChlcnIpIHsKIAkJCW1mZF9yZW1vdmVfZGV2aWNlcygmcGRldi0+ZGV2KTsKIAkJCXByX2VycigicHJjbXU6IEZhaWxlZCB0byBhZGQgc3ViZGV2aWNlc1xuIik7Ci0JCQlnb3RvIG5vX2lycV9yZXR1cm47CisJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQogCkBAIC0zMjE0LDEyICszMjE4LDEwIEBACiAJaWYgKGVycikgewogCQltZmRfcmVtb3ZlX2RldmljZXMoJnBkZXYtPmRldik7CiAJCXByX2VycigicHJjbXU6IEZhaWxlZCB0byBhZGQgYWI4NTAwIHN1YmRldmljZVxuIik7Ci0JCWdvdG8gbm9faXJxX3JldHVybjsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlwcl9pbmZvKCJEQjg1MDAgUFJDTVUgaW5pdGlhbGl6ZWRcbiIpOwotCi1ub19pcnFfcmV0dXJuOgogCXJldHVybiBlcnI7CiB9CiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkYjg1MDBfcHJjbXVfbWF0Y2hbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RsbjIuYyBiL2RyaXZlcnMvbWZkL2RsbjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDQ5Njg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvZGxuMi5jCkBAIC0wLDAgKzEsNzgxIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgRGlvbGFuIERMTi0yIFVTQiBhZGFwdGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogRGVyaXZlZCBmcm9tOgorICogIGkyYy1kaW9sYW4tdTJjLmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBFcmljc3NvbiBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2RsbjIuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisKK3N0cnVjdCBkbG4yX2hlYWRlciB7CisJX19sZTE2IHNpemU7CisJX19sZTE2IGlkOworCV9fbGUxNiBlY2hvOworCV9fbGUxNiBoYW5kbGU7Cit9OworCitzdHJ1Y3QgZGxuMl9yZXNwb25zZSB7CisJc3RydWN0IGRsbjJfaGVhZGVyIGhkcjsKKwlfX2xlMTYgcmVzdWx0OworfTsKKworI2RlZmluZSBETE4yX0dFTkVSSUNfTU9EVUxFX0lECQkweDAwCisjZGVmaW5lIERMTjJfR0VORVJJQ19DTUQoY21kKQkJRExOMl9DTUQoY21kLCBETE4yX0dFTkVSSUNfTU9EVUxFX0lEKQorI2RlZmluZSBDTURfR0VUX0RFVklDRV9WRVIJCURMTjJfR0VORVJJQ19DTUQoMHgzMCkKKyNkZWZpbmUgQ01EX0dFVF9ERVZJQ0VfU04JCURMTjJfR0VORVJJQ19DTUQoMHgzMSkKKworI2RlZmluZSBETE4yX0hXX0lECQkJMHgyMDAKKyNkZWZpbmUgRExOMl9VU0JfVElNRU9VVAkJMjAwCS8qIGluIG1zICovCisjZGVmaW5lIERMTjJfTUFYX1JYX1NMT1RTCQkxNgorI2RlZmluZSBETE4yX01BWF9VUkJTCQkJMTYKKyNkZWZpbmUgRExOMl9SWF9CVUZfU0laRQkJNTEyCisKK2VudW0gZGxuMl9oYW5kbGUgeworCURMTjJfSEFORExFX0VWRU5UID0gMCwJCS8qIGRvbid0IGNoYW5nZSwgaGFyZHdhcmUgZGVmaW5lZCAqLworCURMTjJfSEFORExFX0NUUkwsCisJRExOMl9IQU5ETEVfR1BJTywKKwlETE4yX0hBTkRMRV9JMkMsCisJRExOMl9IQU5ETEVfU1BJLAorCURMTjJfSEFORExFUworfTsKKworLyoKKyAqIFJlY2VpdmUgY29udGV4dCB1c2VkIGJldHdlZW4gdGhlIHJlY2VpdmUgZGVtdWx0aXBsZXhlciBhbmQgdGhlIHRyYW5zZmVyCisgKiByb3V0aW5lLiBXaGlsZSBzZW5kaW5nIGEgcmVxdWVzdCB0aGUgdHJhbnNmZXIgcm91dGluZSB3aWxsIGxvb2sgZm9yIGEgZnJlZQorICogcmVjZWl2ZSBjb250ZXh0IGFuZCB1c2UgaXQgdG8gd2FpdCBmb3IgYSByZXNwb25zZSBhbmQgdG8gcmVjZWl2ZSB0aGUgVVJCIGFuZAorICogdGh1cyB0aGUgcmVzcG9uc2UgZGF0YS4KKyAqLworc3RydWN0IGRsbjJfcnhfY29udGV4dCB7CisJLyogY29tcGxldGlvbiB1c2VkIHRvIHdhaXQgZm9yIGEgcmVzcG9uc2UgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCisJLyogaWYgbm9uLU5VTEwgdGhlIFVSQiBjb250YWlucyB0aGUgcmVzcG9uc2UgKi8KKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwkvKiBpZiB0cnVlIHRoZW4gdGhpcyBjb250ZXh0IGlzIHVzZWQgdG8gd2FpdCBmb3IgYSByZXNwb25zZSAqLworCWJvb2wgaW5fdXNlOworfTsKKworLyoKKyAqIFJlY2VpdmUgY29udGV4dHMgZm9yIGEgcGFydGljdWxhciBETE4yIG1vZHVsZSAoaTJjLCBncGlvLCBldGMuKS4gV2UgdXNlIHRoZQorICogaGFuZGxlIGhlYWRlciBmaWVsZCB0byBpZGVudGlmeSB0aGUgbW9kdWxlIGluIGRsbjJfZGV2Lm1vZF9yeF9zbG90cyBhbmQgdGhlbgorICogdGhlIGVjaG8gaGVhZGVyIGZpZWxkIHRvIGluZGV4IHRoZSBzbG90cyBmaWVsZCBhbmQgZmluZCB0aGUgcmVjZWl2ZSBjb250ZXh0CisgKiBmb3IgYSBwYXJ0aWN1bGFyIHJlcXVlc3QuCisgKi8KK3N0cnVjdCBkbG4yX21vZF9yeF9zbG90cyB7CisJLyogUlggc2xvdHMgYml0bWFwICovCisJREVDTEFSRV9CSVRNQVAoYm1hcCwgRExOMl9NQVhfUlhfU0xPVFMpOworCisJLyogdXNlZCB0byB3YWl0IGZvciBhIGZyZWUgUlggc2xvdCAqLworCXdhaXRfcXVldWVfaGVhZF90IHdxOworCisJLyogdXNlZCB0byB3YWl0IGZvciBhbiBSWCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwlzdHJ1Y3QgZGxuMl9yeF9jb250ZXh0IHNsb3RzW0RMTjJfTUFYX1JYX1NMT1RTXTsKKworCS8qIGF2b2lkIHJhY2VzIGJldHdlZW4gYWxsb2MvZnJlZV9yeF9zbG90IGFuZCBkbG4yX3J4X3RyYW5zZmVyICovCisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RydWN0IGRsbjJfZGV2IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXU4IGVwX2luOworCXU4IGVwX291dDsKKworCXN0cnVjdCB1cmIgKnJ4X3VyYltETE4yX01BWF9VUkJTXTsKKwl2b2lkICpyeF9idWZbRExOMl9NQVhfVVJCU107CisKKwlzdHJ1Y3QgZGxuMl9tb2Rfcnhfc2xvdHMgbW9kX3J4X3Nsb3RzW0RMTjJfSEFORExFU107CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2NiX2xpc3Q7CisJc3BpbmxvY2tfdCBldmVudF9jYl9sb2NrOworCisJYm9vbCBkaXNjb25uZWN0OworCWludCBhY3RpdmVfdHJhbnNmZXJzOworCXdhaXRfcXVldWVfaGVhZF90IGRpc2Nvbm5lY3Rfd3E7CisJc3BpbmxvY2tfdCBkaXNjb25uZWN0X2xvY2s7Cit9OworCitzdHJ1Y3QgZGxuMl9ldmVudF9jYl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXUxNiBpZDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWRsbjJfZXZlbnRfY2JfdCBjYWxsYmFjazsKK307CisKK2ludCBkbG4yX3JlZ2lzdGVyX2V2ZW50X2NiKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBpZCwKKwkJCSAgIGRsbjJfZXZlbnRfY2JfdCBldmVudF9jYikKK3sKKwlzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGRsbjJfZXZlbnRfY2JfZW50cnkgKmksICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVudHJ5LT5pZCA9IGlkOworCWVudHJ5LT5jYWxsYmFjayA9IGV2ZW50X2NiOworCWVudHJ5LT5wZGV2ID0gcGRldjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkbG4yLT5ldmVudF9jYl9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZkbG4yLT5ldmVudF9jYl9saXN0LCBsaXN0KSB7CisJCWlmIChpLT5pZCA9PSBpZCkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXJldCkKKwkJbGlzdF9hZGRfcmN1KCZlbnRyeS0+bGlzdCwgJmRsbjItPmV2ZW50X2NiX2xpc3QpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGxuMi0+ZXZlbnRfY2JfbG9jaywgZmxhZ3MpOworCisJaWYgKHJldCkKKwkJa2ZyZWUoZW50cnkpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZGxuMl9yZWdpc3Rlcl9ldmVudF9jYik7CisKK3ZvaWQgZGxuMl91bnJlZ2lzdGVyX2V2ZW50X2NiKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBpZCkKK3sKKwlzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGRsbjJfZXZlbnRfY2JfZW50cnkgKmk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGxuMi0+ZXZlbnRfY2JfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmZGxuMi0+ZXZlbnRfY2JfbGlzdCwgbGlzdCkgeworCQlpZiAoaS0+aWQgPT0gaWQpIHsKKwkJCWxpc3RfZGVsX3JjdSgmaS0+bGlzdCk7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRsbjItPmV2ZW50X2NiX2xvY2ssIGZsYWdzKTsKKworCWlmIChmb3VuZCkgeworCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJa2ZyZWUoaSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChkbG4yX3VucmVnaXN0ZXJfZXZlbnRfY2IpOworCisvKgorICogUmV0dXJucyB0cnVlIGlmIGEgdmFsaWQgdHJhbnNmZXIgc2xvdCBpcyBmb3VuZC4gSW4gdGhpcyBjYXNlIHRoZSBVUkIgbXVzdCBub3QKKyAqIGJlIHJlc3VibWl0dGVkIGltbWVkaWF0ZWx5IGluIGRsbjJfcnggYXMgd2UgbmVlZCB0aGUgZGF0YSB3aGVuIGRsbjJfdHJhbnNmZXIKKyAqIGlzIHdva2UgdXAuIEl0IHdpbGwgYmUgcmVzdWJtaXR0ZWQgdGhlcmUuCisgKi8KK3N0YXRpYyBib29sIGRsbjJfdHJhbnNmZXJfY29tcGxldGUoc3RydWN0IGRsbjJfZGV2ICpkbG4yLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkJICAgdTE2IGhhbmRsZSwgdTE2IHJ4X3Nsb3QpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRsbjItPmludGVyZmFjZS0+ZGV2OworCXN0cnVjdCBkbG4yX21vZF9yeF9zbG90cyAqcnhzID0gJmRsbjItPm1vZF9yeF9zbG90c1toYW5kbGVdOworCXN0cnVjdCBkbG4yX3J4X2NvbnRleHQgKnJ4YzsKKwlib29sIHZhbGlkX3Nsb3QgPSBmYWxzZTsKKworCWlmIChyeF9zbG90ID49IERMTjJfTUFYX1JYX1NMT1RTKQorCQlnb3RvIG91dDsKKworCXJ4YyA9ICZyeHMtPnNsb3RzW3J4X3Nsb3RdOworCisJLyoKKwkgKiBObyBuZWVkIHRvIGRpc2FibGUgaW50ZXJydXB0cyBhcyB0aGlzIGxvY2sgaXMgbm90IHRha2VuIGluIGludGVycnVwdAorCSAqIGNvbnRleHQgZWxzZXdoZXJlIGluIHRoaXMgZHJpdmVyLiBUaGlzIGZ1bmN0aW9uIChvciBpdHMgY2FsbGVycykgYXJlCisJICogYWxzbyBub3QgZXhwb3J0ZWQgdG8gb3RoZXIgbW9kdWxlcy4KKwkgKi8KKwlzcGluX2xvY2soJnJ4cy0+bG9jayk7CisJaWYgKHJ4Yy0+aW5fdXNlICYmICFyeGMtPnVyYikgeworCQlyeGMtPnVyYiA9IHVyYjsKKwkJY29tcGxldGUoJnJ4Yy0+ZG9uZSk7CisJCXZhbGlkX3Nsb3QgPSB0cnVlOworCX0KKwlzcGluX3VubG9jaygmcnhzLT5sb2NrKTsKKworb3V0OgorCWlmICghdmFsaWRfc2xvdCkKKwkJZGV2X3dhcm4oZGV2LCAiYmFkL2xhdGUgcmVzcG9uc2UgJWQvJWRcbiIsIGhhbmRsZSwgcnhfc2xvdCk7CisKKwlyZXR1cm4gdmFsaWRfc2xvdDsKK30KKworc3RhdGljIHZvaWQgZGxuMl9ydW5fZXZlbnRfY2FsbGJhY2tzKHN0cnVjdCBkbG4yX2RldiAqZGxuMiwgdTE2IGlkLCB1MTYgZWNobywKKwkJCQkgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IGRsbjJfZXZlbnRfY2JfZW50cnkgKmk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpLCAmZGxuMi0+ZXZlbnRfY2JfbGlzdCwgbGlzdCkgeworCQlpZiAoaS0+aWQgPT0gaWQpIHsKKwkJCWktPmNhbGxiYWNrKGktPnBkZXYsIGVjaG8sIGRhdGEsIGxlbik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgdm9pZCBkbG4yX3J4KHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGRsbjJfaGVhZGVyICpoZHIgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGxuMi0+aW50ZXJmYWNlLT5kZXY7CisJdTE2IGlkLCBlY2hvLCBoYW5kbGUsIHNpemU7CisJdTggKmRhdGE7CisJaW50IGxlbjsKKwlpbnQgZXJyOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJY2FzZSAtRVBJUEU6CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRldl9kYmcoZGV2LCAidXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRldl9kYmcoZGV2LCAibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCBzaXplb2Yoc3RydWN0IGRsbjJfaGVhZGVyKSkgeworCQlkZXZfZXJyKGRldiwgInNob3J0IHJlc3BvbnNlOiAlZFxuIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ290byBvdXQ7CisJfQorCisJaGFuZGxlID0gbGUxNl90b19jcHUoaGRyLT5oYW5kbGUpOworCWlkID0gbGUxNl90b19jcHUoaGRyLT5pZCk7CisJZWNobyA9IGxlMTZfdG9fY3B1KGhkci0+ZWNobyk7CisJc2l6ZSA9IGxlMTZfdG9fY3B1KGhkci0+c2l6ZSk7CisKKwlpZiAoc2l6ZSAhPSB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJZGV2X2VycihkZXYsICJzaXplIG1pc21hdGNoOiBoYW5kbGUgJXggY21kICV4IGVjaG8gJXggc2l6ZSAlZCBhY3R1YWwgJWRcbiIsCisJCQloYW5kbGUsIGlkLCBlY2hvLCBzaXplLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaGFuZGxlID49IERMTjJfSEFORExFUykgeworCQlkZXZfd2FybihkZXYsICJpbnZhbGlkIGhhbmRsZSAlZFxuIiwgaGFuZGxlKTsKKwkJZ290byBvdXQ7CisJfQorCisJZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCBkbG4yX2hlYWRlcik7CisJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBkbG4yX2hlYWRlcik7CisKKwlpZiAoaGFuZGxlID09IERMTjJfSEFORExFX0VWRU5UKSB7CisJCWRsbjJfcnVuX2V2ZW50X2NhbGxiYWNrcyhkbG4yLCBpZCwgZWNobywgZGF0YSwgbGVuKTsKKwl9IGVsc2UgeworCQkvKiBVUkIgd2lsbCBiZSByZS1zdWJtaXR0ZWQgaW4gX2RsbjJfdHJhbnNmZXIgKGZyZWVfcnhfc2xvdCkgKi8KKwkJaWYgKGRsbjJfdHJhbnNmZXJfY29tcGxldGUoZGxuMiwgdXJiLCBoYW5kbGUsIGVjaG8pKQorCQkJcmV0dXJuOworCX0KKworb3V0OgorCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlc3VibWl0IFJYIFVSQjogJWRcbiIsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkICpkbG4yX3ByZXBfYnVmKHUxNiBoYW5kbGUsIHUxNiBjbWQsIHUxNiBlY2hvLCBjb25zdCB2b2lkICpvYnVmLAorCQkJICAgaW50ICpvYnVmX2xlbiwgZ2ZwX3QgZ2ZwKQoreworCWludCBsZW47CisJdm9pZCAqYnVmOworCXN0cnVjdCBkbG4yX2hlYWRlciAqaGRyOworCisJbGVuID0gKm9idWZfbGVuICsgc2l6ZW9mKCpoZHIpOworCWJ1ZiA9IGttYWxsb2MobGVuLCBnZnApOworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKworCWhkciA9IChzdHJ1Y3QgZGxuMl9oZWFkZXIgKilidWY7CisJaGRyLT5pZCA9IGNwdV90b19sZTE2KGNtZCk7CisJaGRyLT5zaXplID0gY3B1X3RvX2xlMTYobGVuKTsKKwloZHItPmVjaG8gPSBjcHVfdG9fbGUxNihlY2hvKTsKKwloZHItPmhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CisKKwltZW1jcHkoYnVmICsgc2l6ZW9mKCpoZHIpLCBvYnVmLCAqb2J1Zl9sZW4pOworCisJKm9idWZfbGVuID0gbGVuOworCisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIGludCBkbG4yX3NlbmRfd2FpdChzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsIHUxNiBoYW5kbGUsIHUxNiBjbWQsIHUxNiBlY2hvLAorCQkJICBjb25zdCB2b2lkICpvYnVmLCBpbnQgb2J1Zl9sZW4pCit7CisJaW50IHJldCA9IDA7CisJaW50IGxlbiA9IG9idWZfbGVuOworCXZvaWQgKmJ1ZjsKKwlpbnQgYWN0dWFsOworCisJYnVmID0gZGxuMl9wcmVwX2J1ZihoYW5kbGUsIGNtZCwgZWNobywgb2J1ZiwgJmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2J1bGtfbXNnKGRsbjItPnVzYl9kZXYsCisJCQkgICB1c2Jfc25kYnVsa3BpcGUoZGxuMi0+dXNiX2RldiwgZGxuMi0+ZXBfb3V0KSwKKwkJCSAgIGJ1ZiwgbGVuLCAmYWN0dWFsLCBETE4yX1VTQl9USU1FT1VUKTsKKworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBmaW5kX2ZyZWVfc2xvdChzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsIHUxNiBoYW5kbGUsIGludCAqc2xvdCkKK3sKKwlzdHJ1Y3QgZGxuMl9tb2Rfcnhfc2xvdHMgKnJ4czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRsbjItPmRpc2Nvbm5lY3QpIHsKKwkJKnNsb3QgPSAtRU5PREVWOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyeHMgPSAmZGxuMi0+bW9kX3J4X3Nsb3RzW2hhbmRsZV07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnhzLT5sb2NrLCBmbGFncyk7CisKKwkqc2xvdCA9IGZpbmRfZmlyc3RfemVyb19iaXQocnhzLT5ibWFwLCBETE4yX01BWF9SWF9TTE9UUyk7CisKKwlpZiAoKnNsb3QgPCBETE4yX01BWF9SWF9TTE9UUykgeworCQlzdHJ1Y3QgZGxuMl9yeF9jb250ZXh0ICpyeGMgPSAmcnhzLT5zbG90c1sqc2xvdF07CisKKwkJc2V0X2JpdCgqc2xvdCwgcnhzLT5ibWFwKTsKKwkJcnhjLT5pbl91c2UgPSB0cnVlOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuICpzbG90IDwgRExOMl9NQVhfUlhfU0xPVFM7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2Nfcnhfc2xvdChzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsIHUxNiBoYW5kbGUpCit7CisJaW50IHJldDsKKwlpbnQgc2xvdDsKKworCS8qCisJICogTm8gbmVlZCB0byB0aW1lb3V0IGhlcmUsIHRoZSB3YWl0IGlzIGJvdW5kZWQgYnkgdGhlIHRpbWVvdXQgaW4KKwkgKiBfZGxuMl90cmFuc2Zlci4KKwkgKi8KKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGxuMi0+bW9kX3J4X3Nsb3RzW2hhbmRsZV0ud3EsCisJCQkJICAgICAgIGZpbmRfZnJlZV9zbG90KGRsbjIsIGhhbmRsZSwgJnNsb3QpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzbG90OworfQorCitzdGF0aWMgdm9pZCBmcmVlX3J4X3Nsb3Qoc3RydWN0IGRsbjJfZGV2ICpkbG4yLCB1MTYgaGFuZGxlLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgZGxuMl9tb2Rfcnhfc2xvdHMgKnJ4czsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGRsbjJfcnhfY29udGV4dCAqcnhjOworCisJcnhzID0gJmRsbjItPm1vZF9yeF9zbG90c1toYW5kbGVdOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cy0+bG9jaywgZmxhZ3MpOworCisJY2xlYXJfYml0KHNsb3QsIHJ4cy0+Ym1hcCk7CisKKwlyeGMgPSAmcnhzLT5zbG90c1tzbG90XTsKKwlyeGMtPmluX3VzZSA9IGZhbHNlOworCXVyYiA9IHJ4Yy0+dXJiOworCXJ4Yy0+dXJiID0gTlVMTDsKKwlyZWluaXRfY29tcGxldGlvbigmcnhjLT5kb25lKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cy0+bG9jaywgZmxhZ3MpOworCisJaWYgKHVyYikgeworCQlpbnQgZXJyOworCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGxuMi0+aW50ZXJmYWNlLT5kZXY7CisKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVyciA8IDApCisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXN1Ym1pdCBSWCBVUkI6ICVkXG4iLCBlcnIpOworCX0KKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcnhzLT53cSk7Cit9CisKK3N0YXRpYyBpbnQgX2RsbjJfdHJhbnNmZXIoc3RydWN0IGRsbjJfZGV2ICpkbG4yLCB1MTYgaGFuZGxlLCB1MTYgY21kLAorCQkJICBjb25zdCB2b2lkICpvYnVmLCB1bnNpZ25lZCBvYnVmX2xlbiwKKwkJCSAgdm9pZCAqaWJ1ZiwgdW5zaWduZWQgKmlidWZfbGVuKQoreworCWludCByZXQgPSAwOworCWludCByeF9zbG90OworCXN0cnVjdCBkbG4yX3Jlc3BvbnNlICpyc3A7CisJc3RydWN0IGRsbjJfcnhfY29udGV4dCAqcnhjOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkbG4yLT5pbnRlcmZhY2UtPmRldjsKKwljb25zdCB1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBETE4yX1VTQl9USU1FT1VUICogSFogLyAxMDAwOworCXN0cnVjdCBkbG4yX21vZF9yeF9zbG90cyAqcnhzID0gJmRsbjItPm1vZF9yeF9zbG90c1toYW5kbGVdOworCWludCBzaXplOworCisJc3Bpbl9sb2NrKCZkbG4yLT5kaXNjb25uZWN0X2xvY2spOworCWlmICghZGxuMi0+ZGlzY29ubmVjdCkKKwkJZGxuMi0+YWN0aXZlX3RyYW5zZmVycysrOworCWVsc2UKKwkJcmV0ID0gLUVOT0RFVjsKKwlzcGluX3VubG9jaygmZGxuMi0+ZGlzY29ubmVjdF9sb2NrKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyeF9zbG90ID0gYWxsb2Nfcnhfc2xvdChkbG4yLCBoYW5kbGUpOworCWlmIChyeF9zbG90IDwgMCkgeworCQlyZXQgPSByeF9zbG90OworCQlnb3RvIG91dF9kZWNyOworCX0KKworCXJldCA9IGRsbjJfc2VuZF93YWl0KGRsbjIsIGhhbmRsZSwgY21kLCByeF9zbG90LCBvYnVmLCBvYnVmX2xlbik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJVU0Igd3JpdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfZnJlZV9yeF9zbG90OworCX0KKworCXJ4YyA9ICZyeHMtPnNsb3RzW3J4X3Nsb3RdOworCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJnJ4Yy0+ZG9uZSwgdGltZW91dCk7CisJaWYgKHJldCA8PSAwKSB7CisJCWlmICghcmV0KQorCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byBvdXRfZnJlZV9yeF9zbG90OworCX0gZWxzZSB7CisJCXJldCA9IDA7CisJfQorCisJaWYgKGRsbjItPmRpc2Nvbm5lY3QpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZV9yeF9zbG90OworCX0KKworCS8qIGlmIHdlIGdvdCBoZXJlIHdlIGtub3cgdGhhdCB0aGUgcmVzcG9uc2UgaGVhZGVyIGhhcyBiZWVuIGNoZWNrZWQgKi8KKwlyc3AgPSByeGMtPnVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXNpemUgPSBsZTE2X3RvX2NwdShyc3AtPmhkci5zaXplKTsKKworCWlmIChzaXplIDwgc2l6ZW9mKCpyc3ApKSB7CisJCXJldCA9IC1FUFJPVE87CisJCWdvdG8gb3V0X2ZyZWVfcnhfc2xvdDsKKwl9CisKKwlpZiAobGUxNl90b19jcHUocnNwLT5yZXN1bHQpID4gMHg4MCkgeworCQlkZXZfZGJnKGRldiwgIiVkIHJlY2VpdmVkIHJlc3BvbnNlIHdpdGggZXJyb3IgJWRcbiIsCisJCQloYW5kbGUsIGxlMTZfdG9fY3B1KHJzcC0+cmVzdWx0KSk7CisJCXJldCA9IC1FUkVNT1RFSU87CisJCWdvdG8gb3V0X2ZyZWVfcnhfc2xvdDsKKwl9CisKKwlpZiAoIWlidWYpCisJCWdvdG8gb3V0X2ZyZWVfcnhfc2xvdDsKKworCWlmICgqaWJ1Zl9sZW4gPiBzaXplIC0gc2l6ZW9mKCpyc3ApKQorCQkqaWJ1Zl9sZW4gPSBzaXplIC0gc2l6ZW9mKCpyc3ApOworCisJbWVtY3B5KGlidWYsIHJzcCArIDEsICppYnVmX2xlbik7CisKK291dF9mcmVlX3J4X3Nsb3Q6CisJZnJlZV9yeF9zbG90KGRsbjIsIGhhbmRsZSwgcnhfc2xvdCk7CitvdXRfZGVjcjoKKwlzcGluX2xvY2soJmRsbjItPmRpc2Nvbm5lY3RfbG9jayk7CisJZGxuMi0+YWN0aXZlX3RyYW5zZmVycy0tOworCXNwaW5fdW5sb2NrKCZkbG4yLT5kaXNjb25uZWN0X2xvY2spOworCWlmIChkbG4yLT5kaXNjb25uZWN0KQorCQl3YWtlX3VwKCZkbG4yLT5kaXNjb25uZWN0X3dxKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBkbG4yX3RyYW5zZmVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBjbWQsCisJCSAgY29uc3Qgdm9pZCAqb2J1ZiwgdW5zaWduZWQgb2J1Zl9sZW4sCisJCSAgdm9pZCAqaWJ1ZiwgdW5zaWduZWQgKmlidWZfbGVuKQoreworCXN0cnVjdCBkbG4yX3BsYXRmb3JtX2RhdGEgKmRsbjJfcGRhdGE7CisJc3RydWN0IGRsbjJfZGV2ICpkbG4yOworCXUxNiBoYW5kbGU7CisKKwlkbG4yID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCWRsbjJfcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCWhhbmRsZSA9IGRsbjJfcGRhdGEtPmhhbmRsZTsKKworCXJldHVybiBfZGxuMl90cmFuc2ZlcihkbG4yLCBoYW5kbGUsIGNtZCwgb2J1Ziwgb2J1Zl9sZW4sIGlidWYsCisJCQkgICAgICBpYnVmX2xlbik7Cit9CitFWFBPUlRfU1lNQk9MKGRsbjJfdHJhbnNmZXIpOworCitzdGF0aWMgaW50IGRsbjJfY2hlY2tfaHcoc3RydWN0IGRsbjJfZGV2ICpkbG4yKQoreworCWludCByZXQ7CisJX19sZTMyIGh3X3R5cGU7CisJaW50IGxlbiA9IHNpemVvZihod190eXBlKTsKKworCXJldCA9IF9kbG4yX3RyYW5zZmVyKGRsbjIsIERMTjJfSEFORExFX0NUUkwsIENNRF9HRVRfREVWSUNFX1ZFUiwKKwkJCSAgICAgTlVMTCwgMCwgJmh3X3R5cGUsICZsZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChsZW4gPCBzaXplb2YoaHdfdHlwZSkpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJaWYgKGxlMzJfdG9fY3B1KGh3X3R5cGUpICE9IERMTjJfSFdfSUQpIHsKKwkJZGV2X2VycigmZGxuMi0+aW50ZXJmYWNlLT5kZXYsICJEZXZpY2UgSUQgMHgleCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJbGUzMl90b19jcHUoaHdfdHlwZSkpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbG4yX3ByaW50X3NlcmlhbG5vKHN0cnVjdCBkbG4yX2RldiAqZGxuMikKK3sKKwlpbnQgcmV0OworCV9fbGUzMiBzZXJpYWxfbm87CisJaW50IGxlbiA9IHNpemVvZihzZXJpYWxfbm8pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkbG4yLT5pbnRlcmZhY2UtPmRldjsKKworCXJldCA9IF9kbG4yX3RyYW5zZmVyKGRsbjIsIERMTjJfSEFORExFX0NUUkwsIENNRF9HRVRfREVWSUNFX1NOLCBOVUxMLCAwLAorCQkJICAgICAmc2VyaWFsX25vLCAmbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAobGVuIDwgc2l6ZW9mKHNlcmlhbF9ubykpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJZGV2X2luZm8oZGV2LCAiRGlvbGFuIERMTjIgc2VyaWFsICV1XG4iLCBsZTMyX3RvX2NwdShzZXJpYWxfbm8pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsbjJfaHdfaW5pdChzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIpCit7CisJaW50IHJldDsKKworCXJldCA9IGRsbjJfY2hlY2tfaHcoZGxuMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZGxuMl9wcmludF9zZXJpYWxubyhkbG4yKTsKK30KKworc3RhdGljIHZvaWQgZGxuMl9mcmVlX3J4X3VyYnMoc3RydWN0IGRsbjJfZGV2ICpkbG4yKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IERMTjJfTUFYX1VSQlM7IGkrKykgeworCQl1c2Jfa2lsbF91cmIoZGxuMi0+cnhfdXJiW2ldKTsKKwkJdXNiX2ZyZWVfdXJiKGRsbjItPnJ4X3VyYltpXSk7CisJCWtmcmVlKGRsbjItPnJ4X2J1ZltpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkbG4yX2ZyZWUoc3RydWN0IGRsbjJfZGV2ICpkbG4yKQoreworCWRsbjJfZnJlZV9yeF91cmJzKGRsbjIpOworCXVzYl9wdXRfZGV2KGRsbjItPnVzYl9kZXYpOworCWtmcmVlKGRsbjIpOworfQorCitzdGF0aWMgaW50IGRsbjJfc2V0dXBfcnhfdXJicyhzdHJ1Y3QgZGxuMl9kZXYgKmRsbjIsCisJCQkgICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpob3N0aWYpCit7CisJaW50IGk7CisJaW50IHJldDsKKwljb25zdCBpbnQgcnhfbWF4X3NpemUgPSBETE4yX1JYX0JVRl9TSVpFOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkbG4yLT5pbnRlcmZhY2UtPmRldjsKKworCWZvciAoaSA9IDA7IGkgPCBETE4yX01BWF9VUkJTOyBpKyspIHsKKwkJZGxuMi0+cnhfYnVmW2ldID0ga21hbGxvYyhyeF9tYXhfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZGxuMi0+cnhfYnVmW2ldKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZGxuMi0+cnhfdXJiW2ldID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkbG4yLT5yeF91cmJbaV0pCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl1c2JfZmlsbF9idWxrX3VyYihkbG4yLT5yeF91cmJbaV0sIGRsbjItPnVzYl9kZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoZGxuMi0+dXNiX2RldiwgZGxuMi0+ZXBfaW4pLAorCQkJCSAgZGxuMi0+cnhfYnVmW2ldLCByeF9tYXhfc2l6ZSwgZGxuMl9yeCwgZGxuMik7CisKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGxuMi0+cnhfdXJiW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHN1Ym1pdCBSWCBVUkI6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRsbjJfcGxhdGZvcm1fZGF0YSBkbG4yX3BkYXRhX2dwaW8gPSB7CisJLmhhbmRsZSA9IERMTjJfSEFORExFX0dQSU8sCit9OworCisvKiBPbmx5IG9uZSBJMkMgcG9ydCBzZWVtcyB0byBiZSBzdXBwb3J0ZWQgb24gY3VycmVudCBoYXJkd2FyZSAqLworc3RhdGljIHN0cnVjdCBkbG4yX3BsYXRmb3JtX2RhdGEgZGxuMl9wZGF0YV9pMmMgPSB7CisJLmhhbmRsZSA9IERMTjJfSEFORExFX0kyQywKKwkucG9ydCA9IDAsCit9OworCisvKiBPbmx5IG9uZSBTUEkgcG9ydCBzdXBwb3J0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgZGxuMl9wbGF0Zm9ybV9kYXRhIGRsbjJfcGRhdGFfc3BpID0geworCS5oYW5kbGUgPSBETE4yX0hBTkRMRV9TUEksCisJLnBvcnQgPSAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBkbG4yX2RldnNbXSA9IHsKKwl7CisJCS5uYW1lID0gImRsbjItZ3BpbyIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmRsbjJfcGRhdGFfZ3BpbywKKwkJLnBkYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGRsbjJfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gImRsbjItaTJjIiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGxuMl9wZGF0YV9pMmMsCisJCS5wZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkbG4yX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJkbG4yLXNwaSIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmRsbjJfcGRhdGFfc3BpLAorCQkucGRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZGxuMl9wbGF0Zm9ybV9kYXRhKSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgZGxuMl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGRsbjJfZGV2ICpkbG4yID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCBpLCBqOworCisJLyogZG9uJ3QgYWxsb3cgc3RhcnRpbmcgbmV3IHRyYW5zZmVycyAqLworCXNwaW5fbG9jaygmZGxuMi0+ZGlzY29ubmVjdF9sb2NrKTsKKwlkbG4yLT5kaXNjb25uZWN0ID0gdHJ1ZTsKKwlzcGluX3VubG9jaygmZGxuMi0+ZGlzY29ubmVjdF9sb2NrKTsKKworCS8qIGNhbmNlbCBpbiBwcm9ncmVzcyB0cmFuc2ZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRExOMl9IQU5ETEVTOyBpKyspIHsKKwkJc3RydWN0IGRsbjJfbW9kX3J4X3Nsb3RzICpyeHMgPSAmZGxuMi0+bW9kX3J4X3Nsb3RzW2ldOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZyeHMtPmxvY2ssIGZsYWdzKTsKKworCQkvKiBjYW5jZWwgYWxsIHJlc3BvbnNlIHdhaXRlcnMgKi8KKwkJZm9yIChqID0gMDsgaiA8IERMTjJfTUFYX1JYX1NMT1RTOyBqKyspIHsKKwkJCXN0cnVjdCBkbG4yX3J4X2NvbnRleHQgKnJ4YyA9ICZyeHMtPnNsb3RzW2pdOworCisJCQlpZiAocnhjLT5pbl91c2UpCisJCQkJY29tcGxldGUoJnJ4Yy0+ZG9uZSk7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHMtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiB3YWl0IGZvciB0cmFuc2ZlcnMgdG8gZW5kICovCisJd2FpdF9ldmVudChkbG4yLT5kaXNjb25uZWN0X3dxLCAhZGxuMi0+YWN0aXZlX3RyYW5zZmVycyk7CisKKwltZmRfcmVtb3ZlX2RldmljZXMoJmludGVyZmFjZS0+ZGV2KTsKKworCWRsbjJfZnJlZShkbG4yKTsKK30KKworc3RhdGljIGludCBkbG4yX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICp1c2JfaWQpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdGlmID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW50ZXJmYWNlLT5kZXY7CisJc3RydWN0IGRsbjJfZGV2ICpkbG4yOworCWludCByZXQ7CisJaW50IGksIGo7CisKKwlpZiAoaG9zdGlmLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCB8fAorCSAgICBob3N0aWYtPmRlc2MuYk51bUVuZHBvaW50cyA8IDIpCisJCXJldHVybiAtRU5PREVWOworCisJZGxuMiA9IGt6YWxsb2Moc2l6ZW9mKCpkbG4yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbG4yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRsbjItPmVwX291dCA9IGhvc3RpZi0+ZW5kcG9pbnRbMF0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWRsbjItPmVwX2luID0gaG9zdGlmLT5lbmRwb2ludFsxXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJZGxuMi0+dXNiX2RldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisJZGxuMi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkbG4yKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbG4yLT5kaXNjb25uZWN0X3dxKTsKKworCWZvciAoaSA9IDA7IGkgPCBETE4yX0hBTkRMRVM7IGkrKykgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbG4yLT5tb2Rfcnhfc2xvdHNbaV0ud3EpOworCQlzcGluX2xvY2tfaW5pdCgmZGxuMi0+bW9kX3J4X3Nsb3RzW2ldLmxvY2spOworCQlmb3IgKGogPSAwOyBqIDwgRExOMl9NQVhfUlhfU0xPVFM7IGorKykKKwkJCWluaXRfY29tcGxldGlvbigmZGxuMi0+bW9kX3J4X3Nsb3RzW2ldLnNsb3RzW2pdLmRvbmUpOworCX0KKworCXNwaW5fbG9ja19pbml0KCZkbG4yLT5ldmVudF9jYl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGxuMi0+ZGlzY29ubmVjdF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZGxuMi0+ZXZlbnRfY2JfbGlzdCk7CisKKwlyZXQgPSBkbG4yX3NldHVwX3J4X3VyYnMoZGxuMiwgaG9zdGlmKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9jbGVhbnVwOworCisJcmV0ID0gZGxuMl9od19pbml0KGRsbjIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgaGFyZHdhcmVcbiIpOworCQlnb3RvIG91dF9jbGVhbnVwOworCX0KKworCXJldCA9IG1mZF9hZGRfaG90cGx1Z19kZXZpY2VzKGRldiwgZGxuMl9kZXZzLCBBUlJBWV9TSVpFKGRsbjJfZGV2cykpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgbWZkIGRldmljZXMgdG8gY29yZVxuIik7CisJCWdvdG8gb3V0X2NsZWFudXA7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9jbGVhbnVwOgorCWRsbjJfZnJlZShkbG4yKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkbG4yX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKDB4YTI1NywgMHgyMDEzKSB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRsbjJfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGxuMl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZGxuMiIsCisJLnByb2JlID0gZGxuMl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGRsbjJfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBkbG4yX3RhYmxlLAorfTsKKworbW9kdWxlX3VzYl9kcml2ZXIoZGxuMl9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJPY3RhdmlhbiBQdXJkaWxhIDxvY3Rhdmlhbi5wdXJkaWxhQGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29yZSBkcml2ZXIgZm9yIHRoZSBEaW9sYW4gRExOMiBpbnRlcmZhY2UgYWRhcHRlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvaW50ZWxfc29jX3BtaWNfY3JjLmMgYi9kcml2ZXJzL21mZC9pbnRlbF9zb2NfcG1pY19jcmMuYwppbmRleCA3MTA3Y2FiLi5jODVlMmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9pbnRlbF9zb2NfcG1pY19jcmMuYworKysgYi9kcml2ZXJzL21mZC9pbnRlbF9zb2NfcG1pY19jcmMuYwpAQCAtMTA2LDYgKzEwNiw5IEBACiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShncGlvX3Jlc291cmNlcyksCiAJCS5yZXNvdXJjZXMgPSBncGlvX3Jlc291cmNlcywKIAl9LAorCXsKKwkJLm5hbWUgPSAiY3J5c3RhbF9jb3ZlX3BtaWMiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgY3J5c3RhbF9jb3ZlX3JlZ21hcF9jb25maWcgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9scGNfc2NoLmMgYi9kcml2ZXJzL21mZC9scGNfc2NoLmMKaW5kZXggYzk4MGRhNC4uNWMzOGRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvbHBjX3NjaC5jCisrKyBiL2RyaXZlcnMvbWZkL2xwY19zY2guYwpAQCAtMTkzLDExICsxOTMsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAwLCBscGNfc2NoX2NlbGxzLCBjZWxscywgTlVMTCwgMCwgTlVMTCk7Ci0JaWYgKHJldCkKLQkJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAwLCBscGNfc2NoX2NlbGxzLCBjZWxscywgTlVMTCwgMCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGxwY19zY2hfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tYXgxNDU3Ny5jIGIvZHJpdmVycy9tZmQvbWF4MTQ1NzcuYwppbmRleCBkZTk2YjdmLi4zYmY4ZGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tYXgxNDU3Ny5jCisrKyBiL2RyaXZlcnMvbWZkL21heDE0NTc3LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogbWF4MTQ1NzcuYyAtIG1mZCBjb3JlIGRyaXZlciBmb3IgdGhlIE1heGltIDE0NTc3Lzc3ODM2CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Rybm9pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKiBDaGFud29vIENob2kgPGN3MDAuY2hvaUBzYW1zdW5nLmNvbT4KICAqIEtyenlzenRvZiBLb3psb3dza2kgPGsua296bG93c2tpQHNhbXN1bmcuY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21heDc3NjkzLmMgYi9kcml2ZXJzL21mZC9tYXg3NzY5My5jCmluZGV4IDcxMTc3M2UuLmExNTk1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21heDc3NjkzLmMKKysrIGIvZHJpdmVycy9tZmQvbWF4Nzc2OTMuYwpAQCAtNDMsOSArNDMsMTUgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBtYXg3NzY5M19kZXZzW10gPSB7CiAJeyAubmFtZSA9ICJtYXg3NzY5My1wbWljIiwgfSwKLQl7IC5uYW1lID0gIm1heDc3NjkzLWNoYXJnZXIiLCB9LAorCXsKKwkJLm5hbWUgPSAibWF4Nzc2OTMtY2hhcmdlciIsCisJCS5vZl9jb21wYXRpYmxlID0gIm1heGltLG1heDc3NjkzLWNoYXJnZXIiLAorCX0sCiAJeyAubmFtZSA9ICJtYXg3NzY5My1tdWljIiwgfSwKLQl7IC5uYW1lID0gIm1heDc3NjkzLWhhcHRpYyIsIH0sCisJeworCQkubmFtZSA9ICJtYXg3NzY5My1oYXB0aWMiLAorCQkub2ZfY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3NzY5My1oYXB0aWMiLAorCX0sCiAJewogCQkubmFtZSA9ICJtYXg3NzY5My1mbGFzaCIsCiAJCS5vZl9jb21wYXRpYmxlID0gIm1heGltLG1heDc3NjkzLWZsYXNoIiwKQEAgLTE0Nyw2ICsxNTMsMTIgQEAKIAkubnVtX2lycXMJCT0gQVJSQVlfU0laRShtYXg3NzY5M19tdWljX2lycXMpLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1heDc3NjkzX3JlZ21hcF9oYXB0aWNfY29uZmlnID0geworCS5yZWdfYml0cyA9IDgsCisJLnZhbF9iaXRzID0gOCwKKwkubWF4X3JlZ2lzdGVyID0gTUFYNzc2OTNfSEFQVElDX1JFR19FTkQsCit9OworCiBzdGF0aWMgaW50IG1heDc3NjkzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewpAQCAtMTk2LDYgKzIwOCwxNSBAQAogCX0KIAlpMmNfc2V0X2NsaWVudGRhdGEobWF4Nzc2OTMtPmhhcHRpYywgbWF4Nzc2OTMpOwogCisJbWF4Nzc2OTMtPnJlZ21hcF9oYXB0aWMgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhtYXg3NzY5My0+aGFwdGljLAorCQkJCQkmbWF4Nzc2OTNfcmVnbWFwX2hhcHRpY19jb25maWcpOworCWlmIChJU19FUlIobWF4Nzc2OTMtPnJlZ21hcF9oYXB0aWMpKSB7CisJCXJldCA9IFBUUl9FUlIobWF4Nzc2OTMtPnJlZ21hcF9oYXB0aWMpOworCQlkZXZfZXJyKG1heDc3NjkzLT5kZXYsCisJCQkiZmFpbGVkIHRvIGluaXRpYWxpemUgaGFwdGljIHJlZ2lzdGVyIG1hcDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZ21hcDsKKwl9CisKIAkvKgogCSAqIEluaXRpYWxpemUgcmVnaXN0ZXIgbWFwIGZvciBNVUlDIGRldmljZSBiZWNhdXNlIHVzZSByZWdtYXAtbXVpYwogCSAqIGluc3RhbmNlIG9mIE1VSUMgZGV2aWNlIHdoZW4gaXJxIG9mIG1heDc3NjkzIGlzIGluaXRpYWxpemVkCkBAIC0yMDcsNyArMjI4LDcgQEAKIAkJcmV0ID0gUFRSX0VSUihtYXg3NzY5My0+cmVnbWFwX211aWMpOwogCQlkZXZfZXJyKG1heDc3NjkzLT5kZXYsCiAJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIHJlZ2lzdGVyIG1hcDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX3JlZ21hcF9tdWljOworCQlnb3RvIGVycl9yZWdtYXA7CiAJfQogCiAJcmV0ID0gcmVnbWFwX2FkZF9pcnFfY2hpcChtYXg3NzY5My0+cmVnbWFwLCBtYXg3NzY5My0+aXJxLApAQCAtMjE3LDcgKzIzOCw3IEBACiAJCQkJJm1heDc3NjkzLT5pcnFfZGF0YV9sZWQpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihtYXg3NzY5My0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBpcnEgY2hpcDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX3JlZ21hcF9tdWljOworCQlnb3RvIGVycl9yZWdtYXA7CiAJfQogCiAJcmV0ID0gcmVnbWFwX2FkZF9pcnFfY2hpcChtYXg3NzY5My0+cmVnbWFwLCBtYXg3NzY5My0+aXJxLApAQCAtMjgwLDcgKzMwMSw3IEBACiAJcmVnbWFwX2RlbF9pcnFfY2hpcChtYXg3NzY5My0+aXJxLCBtYXg3NzY5My0+aXJxX2RhdGFfdG9wc3lzKTsKIGVycl9pcnFfdG9wc3lzOgogCXJlZ21hcF9kZWxfaXJxX2NoaXAobWF4Nzc2OTMtPmlycSwgbWF4Nzc2OTMtPmlycV9kYXRhX2xlZCk7Ci1lcnJfcmVnbWFwX211aWM6CitlcnJfcmVnbWFwOgogCWkyY191bnJlZ2lzdGVyX2RldmljZShtYXg3NzY5My0+aGFwdGljKTsKIGVycl9pMmNfaGFwdGljOgogCWkyY191bnJlZ2lzdGVyX2RldmljZShtYXg3NzY5My0+bXVpYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tZmQtY29yZS5jIGIvZHJpdmVycy9tZmQvbWZkLWNvcmUuYwppbmRleCBmMzMzOGZlLi4yYTg3ZjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tZmQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKQEAgLTEyNSw5ICsxMjUsMTUgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOwogCWludCByZXQgPSAtRU5PTUVNOworCWludCBwbGF0Zm9ybV9pZDsKIAlpbnQgcjsKIAotCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoY2VsbC0+bmFtZSwgaWQgKyBjZWxsLT5pZCk7CisJaWYgKGlkIDwgMCkKKwkJcGxhdGZvcm1faWQgPSBpZDsKKwllbHNlCisJCXBsYXRmb3JtX2lkID0gaWQgKyBjZWxsLT5pZDsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoY2VsbC0+bmFtZSwgcGxhdGZvcm1faWQpOwogCWlmICghcGRldikKIAkJZ290byBmYWlsX2FsbG9jOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9ydHM1MjI3LmMgYi9kcml2ZXJzL21mZC9ydHM1MjI3LmMKaW5kZXggOWM4ZWVjOC4uMzI0MDc0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvcnRzNTIyNy5jCisrKyBiL2RyaXZlcnMvbWZkL3J0czUyMjcuYwpAQCAtMTMwLDYgKzEzMCwxMiBAQAogCiBzdGF0aWMgaW50IHJ0czUyMjdfb3B0aW1pemVfcGh5KHN0cnVjdCBydHN4X3BjciAqcGNyKQogeworCWludCBlcnI7CisKKwllcnIgPSBydHN4X2dvcHNfcG1fcmVzZXQocGNyKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCS8qIE9wdGltaXplIFJYIHNlbnNpdGl2aXR5ICovCiAJcmV0dXJuIHJ0c3hfcGNpX3dyaXRlX3BoeV9yZWdpc3RlcihwY3IsIDB4MDAsIDB4QkE0Mik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9ydHM1MjQ5LmMgYi9kcml2ZXJzL21mZC9ydHM1MjQ5LmMKaW5kZXggNTczZGU3Yi4uY2Y0MjVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvcnRzNTI0OS5jCisrKyBiL2RyaXZlcnMvbWZkL3J0czUyNDkuYwpAQCAtMTMwLDYgKzEzMCwxMCBAQAogewogCWludCBlcnI7CiAKKwllcnIgPSBydHN4X2dvcHNfcG1fcmVzZXQocGNyKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCWVyciA9IHJ0c3hfcGNpX3dyaXRlX3BoeV9yZWdpc3RlcihwY3IsIFBIWV9SRUdfUkVWLAogCQkJUEhZX1JFR19SRVZfUkVTViB8IFBIWV9SRUdfUkVWX1JYSURMRV9MQVRDSEVEIHwKIAkJCVBIWV9SRUdfUkVWX1AxX0VOIHwgUEhZX1JFR19SRVZfUlhJRExFX0VOIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3J0c3hfZ29wcy5jIGIvZHJpdmVycy9tZmQvcnRzeF9nb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhOThjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3J0c3hfZ29wcy5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qIERyaXZlciBmb3IgUmVhbHRlayBQQ0ktRXhwcmVzcyBjYXJkIHJlYWRlcgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqIEF1dGhvcjoKKyAqICAgTWlja3kgQ2hpbmcgPG1pY2t5X2NoaW5nQHJlYWxzaWwuY29tLmNuPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tZmQvcnRzeF9wY2kuaD4KKyNpbmNsdWRlICJydHN4X3Bjci5oIgorCitpbnQgcnRzeF9nb3BzX3BtX3Jlc2V0KHN0cnVjdCBydHN4X3BjciAqcGNyKQoreworCWludCBlcnI7CisKKwkvKiBpbml0IGFzcG0gKi8KKwlydHN4X3BjaV93cml0ZV9yZWdpc3RlcihwY3IsIEFTUE1fRk9SQ0VfQ1RMLCAweEZGLCAweDAwKTsKKwllcnIgPSBydHN4X3BjaV91cGRhdGVfY2ZnX2J5dGUocGNyLCBMQ1RMUiwgfkxDVExSX0FTUE1fQ1RMX01BU0ssIDB4MDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogcmVzZXQgUE1fQ1RSTDMgYmVmb3JlIHNlbmQgYnVmZmVyIGNtZCAqLworCXJldHVybiBydHN4X3BjaV93cml0ZV9yZWdpc3RlcihwY3IsIFBNX0NUUkwzLCBEM19ERUxJTktfTU9ERV9FTiwgMHgwMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9ydHN4X3Bjci5oIGIvZHJpdmVycy9tZmQvcnRzeF9wY3IuaAppbmRleCAwN2U0YzJlLi5mZTJiYmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9ydHN4X3Bjci5oCisrKyBiL2RyaXZlcnMvbWZkL3J0c3hfcGNyLmgKQEAgLTcyLDQgKzcyLDcgQEAKIAlwY3ItPm1zX3B1bGxfY3RsX2Rpc2FibGVfdGJsID0gX19kZXZpY2UjI19tc19wdWxsX2N0bF9kaXNhYmxlX3RibDsgXAogfSB3aGlsZSAoMCkKIAorLyogZ2VuZXJpYyBvcGVyYXRpb25zICovCitpbnQgcnRzeF9nb3BzX3BtX3Jlc2V0KHN0cnVjdCBydHN4X3BjciAqcGNyKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9ydHN4X3VzYi5jIGIvZHJpdmVycy9tZmQvcnRzeF91c2IuYwppbmRleCA5Y2Y5OGQxLi5kYmRkMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9ydHN4X3VzYi5jCisrKyBiL2RyaXZlcnMvbWZkL3J0c3hfdXNiLmMKQEAgLTY0Nyw4ICs2NDcsOCBAQAogCS8qIGluaXRpYWxpemUgVVNCIFNHIHRyYW5zZmVyIHRpbWVyICovCiAJc2V0dXBfdGltZXIoJnVjci0+c2dfdGltZXIsIHJ0c3hfdXNiX3NnX3RpbWVkX291dCwgKHVuc2lnbmVkIGxvbmcpIHVjcik7CiAKLQlyZXQgPSBtZmRfYWRkX2RldmljZXMoJmludGYtPmRldiwgdXNiX2Rldi0+ZGV2bnVtLCBydHN4X3VzYl9jZWxscywKLQkJCUFSUkFZX1NJWkUocnRzeF91c2JfY2VsbHMpLCBOVUxMLCAwLCBOVUxMKTsKKwlyZXQgPSBtZmRfYWRkX2hvdHBsdWdfZGV2aWNlcygmaW50Zi0+ZGV2LCBydHN4X3VzYl9jZWxscywKKwkJCQkgICAgICBBUlJBWV9TSVpFKHJ0c3hfdXNiX2NlbGxzKSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfaW5pdF9mYWlsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zZWMtY29yZS5jIGIvZHJpdmVycy9tZmQvc2VjLWNvcmUuYwppbmRleCBkYmE3ZTJiLi4wYTdiYzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zZWMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3NlYy1jb3JlLmMKQEAgLTI3LDExICsyNywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBhMDEuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wczExLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBzMTQuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wdTAyLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczVtODc2My5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3M1bTg3NjcuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1mZF9jZWxsIHM1bTg3NTFfZGV2c1tdID0gewpAQCAtNzQsNiArNzQsMTUgQEAKIAl9CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG1mZF9jZWxsIHMybXBzMTNfZGV2c1tdID0geworCXsgLm5hbWUgPSAiczJtcHMxMy1wbWljIiwgfSwKKwl7IC5uYW1lID0gInMybXBzMTMtcnRjIiwgfSwKKwl7CisJCS5uYW1lID0gInMybXBzMTMtY2xrIiwKKwkJLm9mX2NvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczEzLWNsayIsCisJfSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgczJtcHMxNF9kZXZzW10gPSB7CiAJewogCQkubmFtZSA9ICJzMm1wczE0LXBtaWMiLApAQCAtMTA4LDYgKzExNyw5IEBACiAJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsczJtcHMxMS1wbWljIiwKIAkJLmRhdGEgPSAodm9pZCAqKVMyTVBTMTFYLAogCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxzMm1wczEzLXBtaWMiLAorCQkuZGF0YSA9ICh2b2lkICopUzJNUFMxM1gsCisJfSwgewogCQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMybXBzMTQtcG1pYyIsCiAJCS5kYXRhID0gKHZvaWQgKilTMk1QUzE0WCwKIAl9LCB7CkBAIC0xOTQsNiArMjA2LDE1IEBACiAJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9GTEFULAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHMybXBzMTNfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDgsCisKKwkubWF4X3JlZ2lzdGVyID0gUzJNUFMxM19SRUdfTERPRFNDSDUsCisJLnZvbGF0aWxlX3JlZyA9IHMybXBzMTFfdm9sYXRpbGUsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9GTEFULAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHMybXBzMTRfcmVnbWFwX2NvbmZpZyA9IHsKIAkucmVnX2JpdHMgPSA4LAogCS52YWxfYml0cyA9IDgsCkBAIC0zMjUsNiArMzQ2LDkgQEAKIAljYXNlIFMyTVBTMTFYOgogCQlyZWdtYXAgPSAmczJtcHMxMV9yZWdtYXBfY29uZmlnOwogCQlicmVhazsKKwljYXNlIFMyTVBTMTNYOgorCQlyZWdtYXAgPSAmczJtcHMxM19yZWdtYXBfY29uZmlnOworCQlicmVhazsKIAljYXNlIFMyTVBTMTRYOgogCQlyZWdtYXAgPSAmczJtcHMxNF9yZWdtYXBfY29uZmlnOwogCQlicmVhazsKQEAgLTM3OCw2ICs0MDIsMTAgQEAKIAkJc2VjX2RldnMgPSBzMm1wczExX2RldnM7CiAJCW51bV9zZWNfZGV2cyA9IEFSUkFZX1NJWkUoczJtcHMxMV9kZXZzKTsKIAkJYnJlYWs7CisJY2FzZSBTMk1QUzEzWDoKKwkJc2VjX2RldnMgPSBzMm1wczEzX2RldnM7CisJCW51bV9zZWNfZGV2cyA9IEFSUkFZX1NJWkUoczJtcHMxM19kZXZzKTsKKwkJYnJlYWs7CiAJY2FzZSBTMk1QUzE0WDoKIAkJc2VjX2RldnMgPSBzMm1wczE0X2RldnM7CiAJCW51bV9zZWNfZGV2cyA9IEFSUkFZX1NJWkUoczJtcHMxNF9kZXZzKTsKQEAgLTQzMiwxNSArNDYwLDYgQEAKIAkgKi8KIAlkaXNhYmxlX2lycShzZWNfcG1pYy0+aXJxKTsKIAotCXN3aXRjaCAoc2VjX3BtaWMtPmRldmljZV90eXBlKSB7Ci0JY2FzZSBTMk1QUzE0WDoKLQljYXNlIFMyTVBVMDI6Ci0JCXJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmUoUE1fU1VTUEVORF9NRU0pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc2VjLWlycS5jIGIvZHJpdmVycy9tZmQvc2VjLWlycS5jCmluZGV4IGY5YTU3ODYuLmJhODZhOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3NlYy1pcnEuYworKysgYi9kcml2ZXJzL21mZC9zZWMtaXJxLmMKQEAgLTM4OSwxNCArMzg5LDIyIEBACiAJLmFja19iYXNlID0gUzJNUFMxMV9SRUdfSU5UMSwKIH07CiAKKyNkZWZpbmUgUzJNUFMxWF9JUlFfQ0hJUF9DT01NT05fREFUQQkJXAorCS5pcnFzID0gczJtcHMxNF9pcnFzLAkJCVwKKwkubnVtX2lycXMgPSBBUlJBWV9TSVpFKHMybXBzMTRfaXJxcyksCVwKKwkubnVtX3JlZ3MgPSAzLAkJCQlcCisJLnN0YXR1c19iYXNlID0gUzJNUFMxNF9SRUdfSU5UMSwJXAorCS5tYXNrX2Jhc2UgPSBTMk1QUzE0X1JFR19JTlQxTSwJCVwKKwkuYWNrX2Jhc2UgPSBTMk1QUzE0X1JFR19JTlQxCQlcCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycV9jaGlwIHMybXBzMTNfaXJxX2NoaXAgPSB7CisJLm5hbWUgPSAiczJtcHMxMyIsCisJUzJNUFMxWF9JUlFfQ0hJUF9DT01NT05fREFUQSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycV9jaGlwIHMybXBzMTRfaXJxX2NoaXAgPSB7CiAJLm5hbWUgPSAiczJtcHMxNCIsCi0JLmlycXMgPSBzMm1wczE0X2lycXMsCi0JLm51bV9pcnFzID0gQVJSQVlfU0laRShzMm1wczE0X2lycXMpLAotCS5udW1fcmVncyA9IDMsCi0JLnN0YXR1c19iYXNlID0gUzJNUFMxNF9SRUdfSU5UMSwKLQkubWFza19iYXNlID0gUzJNUFMxNF9SRUdfSU5UMU0sCi0JLmFja19iYXNlID0gUzJNUFMxNF9SRUdfSU5UMSwKKwlTMk1QUzFYX0lSUV9DSElQX0NPTU1PTl9EQVRBLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfaXJxX2NoaXAgczJtcHUwMl9pcnFfY2hpcCA9IHsKQEAgLTQ1Miw2ICs0NjAsOSBAQAogCWNhc2UgUzJNUFMxMVg6CiAJCXNlY19pcnFfY2hpcCA9ICZzMm1wczExX2lycV9jaGlwOwogCQlicmVhazsKKwljYXNlIFMyTVBTMTNYOgorCQlzZWNfaXJxX2NoaXAgPSAmczJtcHMxM19pcnFfY2hpcDsKKwkJYnJlYWs7CiAJY2FzZSBTMk1QUzE0WDoKIAkJc2VjX2lycV9jaGlwID0gJnMybXBzMTRfaXJxX2NoaXA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc3lzY29uLmMgYi9kcml2ZXJzL21mZC9zeXNjb24uYwppbmRleCBjYTE1ODc4Li43MjM3M2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zeXNjb24uYworKysgYi9kcml2ZXJzL21mZC9zeXNjb24uYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CkBAIC0yMiwzMSArMjMsOTQgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzeXNjb25fZHJpdmVyOwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5c2Nvbl9saXN0X3Nsb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoc3lzY29uX2xpc3QpOworCiBzdHJ1Y3Qgc3lzY29uIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCi1zdGF0aWMgaW50IHN5c2Nvbl9tYXRjaF9ub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBzeXNjb25fcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSAzMiwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQsCit9OwogCi0JcmV0dXJuIChkZXYtPm9mX25vZGUgPT0gZG4pID8gMSA6IDA7CitzdGF0aWMgc3RydWN0IHN5c2NvbiAqb2Zfc3lzY29uX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IHN5c2NvbiAqc3lzY29uOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBzeXNjb25fY29uZmlnID0gc3lzY29uX3JlZ21hcF9jb25maWc7CisKKwlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAic3lzY29uIikpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJc3lzY29uID0ga3phbGxvYyhzaXplb2YoKnN5c2NvbiksIEdGUF9LRVJORUwpOworCWlmICghc3lzY29uKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWJhc2UgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFiYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX21hcDsKKwl9CisKKwkvKiBQYXJzZSB0aGUgZGV2aWNlJ3MgRFQgbm9kZSBmb3IgYW4gZW5kaWFubmVzcyBzcGVjaWZpY2F0aW9uICovCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImJpZy1lbmRpYW4iKSkKKwkJc3lzY29uX2NvbmZpZy52YWxfZm9ybWF0X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fQklHOworCSBlbHNlIGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJsaXR0bGUtZW5kaWFuIikpCisJCXN5c2Nvbl9jb25maWcudmFsX2Zvcm1hdF9lbmRpYW4gPSBSRUdNQVBfRU5ESUFOX0xJVFRMRTsKKworCXJlZ21hcCA9IHJlZ21hcF9pbml0X21taW8oTlVMTCwgYmFzZSwgJnN5c2Nvbl9jb25maWcpOworCWlmIChJU19FUlIocmVnbWFwKSkgeworCQlwcl9lcnIoInJlZ21hcCBpbml0IGZhaWxlZFxuIik7CisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwkJZ290byBlcnJfcmVnbWFwOworCX0KKworCXN5c2Nvbi0+cmVnbWFwID0gcmVnbWFwOworCXN5c2Nvbi0+bnAgPSBucDsKKworCXNwaW5fbG9jaygmc3lzY29uX2xpc3Rfc2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnN5c2Nvbi0+bGlzdCwgJnN5c2Nvbl9saXN0KTsKKwlzcGluX3VubG9jaygmc3lzY29uX2xpc3Rfc2xvY2spOworCisJcmV0dXJuIHN5c2NvbjsKKworZXJyX3JlZ21hcDoKKwlpb3VubWFwKGJhc2UpOworZXJyX21hcDoKKwlrZnJlZShzeXNjb24pOworCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKIHN0cnVjdCByZWdtYXAgKnN5c2Nvbl9ub2RlX3RvX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewotCXN0cnVjdCBzeXNjb24gKnN5c2NvbjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHN5c2NvbiAqZW50cnksICpzeXNjb24gPSBOVUxMOwogCi0JZGV2ID0gZHJpdmVyX2ZpbmRfZGV2aWNlKCZzeXNjb25fZHJpdmVyLmRyaXZlciwgTlVMTCwgbnAsCi0JCQkJIHN5c2Nvbl9tYXRjaF9ub2RlKTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CisJc3Bpbl9sb2NrKCZzeXNjb25fbGlzdF9zbG9jayk7CiAKLQlzeXNjb24gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmc3lzY29uX2xpc3QsIGxpc3QpCisJCWlmIChlbnRyeS0+bnAgPT0gbnApIHsKKwkJCXN5c2NvbiA9IGVudHJ5OworCQkJYnJlYWs7CisJCX0KKworCXNwaW5fdW5sb2NrKCZzeXNjb25fbGlzdF9zbG9jayk7CisKKwlpZiAoIXN5c2NvbikKKwkJc3lzY29uID0gb2Zfc3lzY29uX3JlZ2lzdGVyKG5wKTsKKworCWlmIChJU19FUlIoc3lzY29uKSkKKwkJcmV0dXJuIEVSUl9DQVNUKHN5c2Nvbik7CiAKIAlyZXR1cm4gc3lzY29uLT5yZWdtYXA7CiB9CkBAIC0xMTAsMTcgKzE3NCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2Zfc3lzY29uX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJzeXNjb24iLCB9LAotCXsgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBzeXNjb25fcmVnbWFwX2NvbmZpZyA9IHsKLQkucmVnX2JpdHMgPSAzMiwKLQkudmFsX2JpdHMgPSAzMiwKLQkucmVnX3N0cmlkZSA9IDQsCi19OwotCiBzdGF0aWMgaW50IHN5c2Nvbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CkBAIC0xNjcsNyArMjIwLDYgQEAKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJzeXNjb24iLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkJLm9mX21hdGNoX3RhYmxlID0gb2Zfc3lzY29uX21hdGNoLAogCX0sCiAJLnByb2JlCQk9IHN5c2Nvbl9wcm9iZSwKIAkuaWRfdGFibGUJPSBzeXNjb25faWRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jIGIvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCmluZGV4IDllMDRhNzQuLjQzOWQ5MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3Q3bDY2eGIuYworKysgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGRldl9jdGw7CiAKLQljbGtfZW5hYmxlKHQ3bDY2eGItPmNsazMyayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKHQ3bDY2eGItPmNsazMyayk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdDdsNjZ4Yi0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQ3bDY2eGItPmxvY2ssIGZsYWdzKTsKIAotCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazMyayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHQ3bDY2eGItPmNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4NSw3ICsyODUsNyBAQAogCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5zdXNwZW5kKQogCQlwZGF0YS0+c3VzcGVuZChkZXYpOwotCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazQ4bSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHQ3bDY2eGItPmNsazQ4bSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5NSw3ICsyOTUsNyBAQAogCXN0cnVjdCB0N2w2NnhiICp0N2w2NnhiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJmRldi0+ZGV2KTsKIAotCWNsa19lbmFibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKKwljbGtfcHJlcGFyZV9lbmFibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnJlc3VtZSkKIAkJcGRhdGEtPnJlc3VtZShkZXYpOwogCkBAIC0zNjksNyArMzY5LDcgQEAKIAkJZ290byBlcnJfaW9yZW1hcDsKIAl9CiAKLQljbGtfZW5hYmxlKHQ3bDY2eGItPmNsazQ4bSk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKHQ3bDY2eGItPmNsazQ4bSk7CiAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmVuYWJsZSkKIAkJcGRhdGEtPmVuYWJsZShkZXYpOwpAQCAtNDE0LDkgKzQxNCw5IEBACiAJaW50IHJldDsKIAogCXJldCA9IHBkYXRhLT5kaXNhYmxlKGRldik7Ci0JY2xrX2Rpc2FibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodDdsNjZ4Yi0+Y2xrNDhtKTsKIAljbGtfcHV0KHQ3bDY2eGItPmNsazQ4bSk7Ci0JY2xrX2Rpc2FibGUodDdsNjZ4Yi0+Y2xrMzJrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodDdsNjZ4Yi0+Y2xrMzJrKTsKIAljbGtfcHV0KHQ3bDY2eGItPmNsazMyayk7CiAJdDdsNjZ4Yl9kZXRhY2hfaXJxKGRldik7CiAJaW91bm1hcCh0N2w2NnhiLT5zY3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGMzNTg5eC5jIGIvZHJpdmVycy9tZmQvdGMzNTg5eC5jCmluZGV4IDAwNzJlNjYuLmFhY2IzNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RjMzU4OXguYworKysgYi9kcml2ZXJzL21mZC90YzM1ODl4LmMKQEAgLTI0MSwxMCArMjQxLDggQEAKIAogc3RhdGljIGludCB0YzM1ODl4X2lycV9pbml0KHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewotCWludCBiYXNlID0gdGMzNTg5eC0+aXJxX2Jhc2U7Ci0KIAl0YzM1ODl4LT5kb21haW4gPSBpcnFfZG9tYWluX2FkZF9zaW1wbGUoCi0JCW5wLCBUQzM1ODl4X05SX0lOVEVSTkFMX0lSUVMsIGJhc2UsCisJCW5wLCBUQzM1ODl4X05SX0lOVEVSTkFMX0lSUVMsIDAsCiAJCSZ0YzM1ODl4X2lycV9vcHMsIHRjMzU4OXgpOwogCiAJaWYgKCF0YzM1ODl4LT5kb21haW4pIHsKQEAgLTI5OCw3ICsyOTYsNyBAQAogCWlmIChibG9ja3MgJiBUQzM1ODl4X0JMT0NLX0dQSU8pIHsKIAkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHRjMzU4OXgtPmRldiwgLTEsIHRjMzU4OXhfZGV2X2dwaW8sCiAJCQkJICAgICAgQVJSQVlfU0laRSh0YzM1ODl4X2Rldl9ncGlvKSwgTlVMTCwKLQkJCQkgICAgICB0YzM1ODl4LT5pcnFfYmFzZSwgdGMzNTg5eC0+ZG9tYWluKTsKKwkJCQkgICAgICAwLCB0YzM1ODl4LT5kb21haW4pOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKHRjMzU4OXgtPmRldiwgImZhaWxlZCB0byBhZGQgZ3BpbyBjaGlsZFxuIik7CiAJCQlyZXR1cm4gcmV0OwpAQCAtMzA5LDcgKzMwNyw3IEBACiAJaWYgKGJsb2NrcyAmIFRDMzU4OXhfQkxPQ0tfS0VZUEFEKSB7CiAJCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh0YzM1ODl4LT5kZXYsIC0xLCB0YzM1ODl4X2Rldl9rZXlwYWQsCiAJCQkJICAgICAgQVJSQVlfU0laRSh0YzM1ODl4X2Rldl9rZXlwYWQpLCBOVUxMLAotCQkJCSAgICAgIHRjMzU4OXgtPmlycV9iYXNlLCB0YzM1ODl4LT5kb21haW4pOworCQkJCSAgICAgIDAsIHRjMzU4OXgtPmRvbWFpbik7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIodGMzNTg5eC0+ZGV2LCAiZmFpbGVkIHRvIGtleXBhZCBjaGlsZFxuIik7CiAJCQlyZXR1cm4gcmV0OwpAQCAtNDA0LDcgKzQwMiw2IEBACiAJdGMzNTg5eC0+ZGV2ID0gJmkyYy0+ZGV2OwogCXRjMzU4OXgtPmkyYyA9IGkyYzsKIAl0YzM1ODl4LT5wZGF0YSA9IHBkYXRhOwotCXRjMzU4OXgtPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOwogCiAJc3dpdGNoICh2ZXJzaW9uKSB7CiAJY2FzZSBUQzM1ODlYX1RDMzU4OTM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90YzYzODd4Yi5jIGIvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYwppbmRleCBlNzFmODgwLi44NWZhYjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90YzYzODd4Yi5jCisrKyBiL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+c3VzcGVuZCkKIAkJcGRhdGEtPnN1c3BlbmQoZGV2KTsKLQljbGtfZGlzYWJsZSh0YzYzODd4Yi0+Y2xrMzJrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodGM2Mzg3eGItPmNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYyLDcgKzYyLDcgQEAKIAlzdHJ1Y3QgdGM2Mzg3eGIgKnRjNjM4N3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZkZXYtPmRldik7CiAKLQljbGtfZW5hYmxlKHRjNjM4N3hiLT5jbGszMmspOworCWNsa19wcmVwYXJlX2VuYWJsZSh0YzYzODd4Yi0+Y2xrMzJrKTsKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnJlc3VtZSkKIAkJcGRhdGEtPnJlc3VtZShkZXYpOwogCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgICAgICA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwogCXN0cnVjdCB0YzYzODd4YiAqdGM2Mzg3eGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JY2xrX2VuYWJsZSh0YzYzODd4Yi0+Y2xrMzJrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUodGM2Mzg3eGItPmNsazMyayk7CiAKIAl0bWlvX2NvcmVfbW1jX2VuYWJsZSh0YzYzODd4Yi0+c2NyICsgMHgyMDAsIDAsCiAJCXRjNjM4N3hiX21tY19yZXNvdXJjZXNbMF0uc3RhcnQgJiAweGZmZmUpOwpAQCAtMTEzLDcgKzExMyw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ICAgICAgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgdGM2Mzg3eGIgKnRjNjM4N3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWNsa19kaXNhYmxlKHRjNjM4N3hiLT5jbGszMmspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0YzYzODd4Yi0+Y2xrMzJrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjE0LDcgKzIxNCw3IEBACiAJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7CiAJaW91bm1hcCh0YzYzODd4Yi0+c2NyKTsKIAlyZWxlYXNlX3Jlc291cmNlKCZ0YzYzODd4Yi0+cnNjcik7Ci0JY2xrX2Rpc2FibGUodGM2Mzg3eGItPmNsazMyayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRjNjM4N3hiLT5jbGszMmspOwogCWNsa19wdXQodGM2Mzg3eGItPmNsazMyayk7CiAJa2ZyZWUodGM2Mzg3eGIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90YzYzOTN4Yi5jIGIvZHJpdmVycy9tZmQvdGM2MzkzeGIuYwppbmRleCA0ZmFjMTZiLi5kMzVmMTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCisrKyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKQEAgLTI2Myw2ICsyNjMsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0YzYzOTN4Yl9vaGNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhICp0Y3BkID0gZGV2X2dldF9wbGF0ZGF0YShkZXYtPmRldi5wYXJlbnQpOworCisJLyogV2UgY2FuJ3QgcHJvcGVybHkgc3RvcmUvcmVzdG9yZSBPSENJIHN0YXRlLCBzbyBmYWlsIGhlcmUgKi8KKwlpZiAodGNwZC0+cmVzdW1lX3Jlc3RvcmUpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gdGM2MzkzeGJfb2hjaV9kaXNhYmxlKGRldik7Cit9CisKIHN0YXRpYyBpbnQgdGM2MzkzeGJfZmJfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CkBAIC00MDMsNyArNDE0LDcgQEAKIAkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzKSwKIAkJLnJlc291cmNlcyA9IHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzLAogCQkuZW5hYmxlID0gdGM2MzkzeGJfb2hjaV9lbmFibGUsCi0JCS5zdXNwZW5kID0gdGM2MzkzeGJfb2hjaV9kaXNhYmxlLAorCQkuc3VzcGVuZCA9IHRjNjM5M3hiX29oY2lfc3VzcGVuZCwKIAkJLnJlc3VtZSA9IHRjNjM5M3hiX29oY2lfZW5hYmxlLAogCQkuZGlzYWJsZSA9IHRjNjM5M3hiX29oY2lfZGlzYWJsZSwKIAl9LApAQCAtNjU0LDcgKzY2NSw3IEBACiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCi0JcmV0ID0gY2xrX2VuYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUodGM2MzkzeGItPmNsayk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfY2xrX2VuYWJsZTsKIApAQCAtNzE3LDcgKzcyOCw3IEBACiAJCWdwaW9jaGlwX3JlbW92ZSgmdGM2MzkzeGItPmdwaW8pOwogCXRjcGQtPmRpc2FibGUoZGV2KTsKIGVycl9lbmFibGU6Ci0JY2xrX2Rpc2FibGUodGM2MzkzeGItPmNsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRjNjM5M3hiLT5jbGspOwogZXJyX2Nsa19lbmFibGU6CiAJaW91bm1hcCh0YzYzOTN4Yi0+c2NyKTsKIGVycl9pb3JlbWFwOgpAQCAtNzQ4LDcgKzc1OSw3IEBACiAJCWdwaW9jaGlwX3JlbW92ZSgmdGM2MzkzeGItPmdwaW8pOwogCiAJcmV0ID0gdGNwZC0+ZGlzYWJsZShkZXYpOwotCWNsa19kaXNhYmxlKHRjNjM5M3hiLT5jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0YzYzOTN4Yi0+Y2xrKTsKIAlpb3VubWFwKHRjNjM5M3hiLT5zY3IpOwogCXJlbGVhc2VfcmVzb3VyY2UoJnRjNjM5M3hiLT5yc2NyKTsKIAljbGtfcHV0KHRjNjM5M3hiLT5jbGspOwpAQCAtNzc2LDcgKzc4Nyw3IEBACiAJCQlpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BJX0JDUihpKSk7CiAJfQogCXJldCA9IHRjcGQtPnN1c3BlbmQoZGV2KTsKLQljbGtfZGlzYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodGM2MzkzeGItPmNsayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzg4LDcgKzc5OSw3IEBACiAJaW50IHJldDsKIAlpbnQgaTsKIAotCWNsa19lbmFibGUodGM2MzkzeGItPmNsayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKHRjNjM5M3hiLT5jbGspOwogCiAJcmV0ID0gdGNwZC0+cmVzdW1lKGRldik7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1MDkwLmMgYi9kcml2ZXJzL21mZC90cHM2NTA5MC5jCmluZGV4IDFjM2U2ZTIuLjE0YjYyZTExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHBzNjUwOTAuYworKysgYi9kcml2ZXJzL21mZC90cHM2NTA5MC5jCkBAIC03Niw1OCArNzYsNTggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2lycSB0cHM2NTA5MF9pcnFzW10gPSB7CiAJLyogSU5UMSBJUlFzKi8KIAlbVFBTNjUwOTBfSVJRX1ZBQ19TVEFUVVNfQ0hBTkdFXSA9IHsKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX1ZBQ19TVEFUVVNfQ0hBTkdFLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19WQUNfU1RBVFVTX0NIQU5HRSwKIAl9LAogCVtUUFM2NTA5MF9JUlFfVlNZU19TVEFUVVNfQ0hBTkdFXSA9IHsKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX1ZTWVNfU1RBVFVTX0NIQU5HRSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfVlNZU19TVEFUVVNfQ0hBTkdFLAogCX0sCiAJW1RQUzY1MDkwX0lSUV9CQVRfU1RBVFVTX0NIQU5HRV0gPSB7Ci0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19CQVRfU1RBVFVTX0NIQU5HRSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfQkFUX1NUQVRVU19DSEFOR0UsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX0NIQVJHSU5HX1NUQVRVU19DSEFOR0VdID0gewotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfQ0hBUkdJTkdfU1RBVFVTX0NIQU5HRSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfQ0hBUkdJTkdfU1RBVFVTX0NIQU5HRSwKIAl9LAogCVtUUFM2NTA5MF9JUlFfQ0hBUkdJTkdfQ09NUExFVEVdID0gewotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfQ0hBUkdJTkdfQ09NUExFVEUsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX0NIQVJHSU5HX0NPTVBMRVRFLAogCX0sCiAJW1RQUzY1MDkwX0lSUV9PVkVSTE9BRF9EQ0RDMV0gPSB7Ci0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19PVkVSTE9BRF9EQ0RDMSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQxX01BU0tfT1ZFUkxPQURfRENEQzEsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX09WRVJMT0FEX0RDREMyXSA9IHsKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMV9NQVNLX09WRVJMT0FEX0RDREMyLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDFfTUFTS19PVkVSTE9BRF9EQ0RDMiwKIAl9LAogCS8qIElOVDIgSVJRcyovCiAJW1RQUzY1MDkwX0lSUV9PVkVSTE9BRF9EQ0RDM10gPSB7Ci0JCQkucmVnX29mZnNldCA9IDEsCi0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9EQ0RDMywKKwkJLnJlZ19vZmZzZXQgPSAxLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9EQ0RDMywKIAl9LAogCVtUUFM2NTA5MF9JUlFfT1ZFUkxPQURfRkVUMV0gPSB7Ci0JCQkucmVnX29mZnNldCA9IDEsCi0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQxLAorCQkucmVnX29mZnNldCA9IDEsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDEsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX09WRVJMT0FEX0ZFVDJdID0gewotCQkJLnJlZ19vZmZzZXQgPSAxLAotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUMiwKKwkJLnJlZ19vZmZzZXQgPSAxLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQyLAogCX0sCiAJW1RQUzY1MDkwX0lSUV9PVkVSTE9BRF9GRVQzXSA9IHsKLQkJCS5yZWdfb2Zmc2V0ID0gMSwKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDMsCisJCS5yZWdfb2Zmc2V0ID0gMSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUMywKIAl9LAogCVtUUFM2NTA5MF9JUlFfT1ZFUkxPQURfRkVUNF0gPSB7Ci0JCQkucmVnX29mZnNldCA9IDEsCi0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQ0LAorCQkucmVnX29mZnNldCA9IDEsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDQsCiAJfSwKIAlbVFBTNjUwOTBfSVJRX09WRVJMT0FEX0ZFVDVdID0gewotCQkJLnJlZ19vZmZzZXQgPSAxLAotCQkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUNSwKKwkJLnJlZ19vZmZzZXQgPSAxLAorCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQ1LAogCX0sCiAJW1RQUzY1MDkwX0lSUV9PVkVSTE9BRF9GRVQ2XSA9IHsKLQkJCS5yZWdfb2Zmc2V0ID0gMSwKLQkJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDYsCisJCS5yZWdfb2Zmc2V0ID0gMSwKKwkJLm1hc2sgPSBUUFM2NTA5MF9JTlQyX01BU0tfT1ZFUkxPQURfRkVUNiwKIAl9LAogCVtUUFM2NTA5MF9JUlFfT1ZFUkxPQURfRkVUN10gPSB7Ci0JCQkucmVnX29mZnNldCA9IDEsCi0JCQkubWFzayA9IFRQUzY1MDkwX0lOVDJfTUFTS19PVkVSTE9BRF9GRVQ3LAorCQkucmVnX29mZnNldCA9IDEsCisJCS5tYXNrID0gVFBTNjUwOTBfSU5UMl9NQVNLX09WRVJMT0FEX0ZFVDcsCiAJfSwKIH07CiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBpbnQgdHBzNjUwOTBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdHBzNjUwOTBfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZjbGllbnQtPmRldik7CiAJaW50IGlycV9iYXNlID0gMDsKQEAgLTIxMCwxMSArMjEwLDExIEBACiAKIAlpZiAoY2xpZW50LT5pcnEpIHsKIAkJcmV0ID0gcmVnbWFwX2FkZF9pcnFfY2hpcCh0cHM2NTA5MC0+cm1hcCwgY2xpZW50LT5pcnEsCi0JCQlJUlFGX09ORVNIT1QgfCBJUlFGX1RSSUdHRVJfTE9XLCBpcnFfYmFzZSwKLQkJCSZ0cHM2NTA5MF9pcnFfY2hpcCwgJnRwczY1MDkwLT5pcnFfZGF0YSk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkJCSJJUlEgaW5pdCBmYWlsZWQgd2l0aCBlcnI6ICVkXG4iLCByZXQpOworCQkJCQkgIElSUUZfT05FU0hPVCB8IElSUUZfVFJJR0dFUl9MT1csIGlycV9iYXNlLAorCQkJCQkgICZ0cHM2NTA5MF9pcnFfY2hpcCwgJnRwczY1MDkwLT5pcnFfZGF0YSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCSJJUlEgaW5pdCBmYWlsZWQgd2l0aCBlcnI6ICVkXG4iLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0gZWxzZSB7CkBAIC0yMjMsOCArMjIzLDggQEAKIAl9CiAKIAlyZXQgPSBtZmRfYWRkX2RldmljZXModHBzNjUwOTAtPmRldiwgLTEsIHRwczY1MDkwcywKLQkJQVJSQVlfU0laRSh0cHM2NTA5MHMpLCBOVUxMLAotCQkwLCByZWdtYXBfaXJxX2dldF9kb21haW4odHBzNjUwOTAtPmlycV9kYXRhKSk7CisJCQkgICAgICBBUlJBWV9TSVpFKHRwczY1MDkwcyksIE5VTEwsCisJCQkgICAgICAwLCByZWdtYXBfaXJxX2dldF9kb21haW4odHBzNjUwOTAtPmlycV9kYXRhKSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImFkZCBtZmQgZGV2aWNlcyBmYWlsZWQgd2l0aCBlcnI6ICVkXG4iLAogCQkJcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1MjE3LmMgYi9kcml2ZXJzL21mZC90cHM2NTIxNy5jCmluZGV4IGE4ZWU1MmMuLjgwYTkxOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RwczY1MjE3LmMKKysrIGIvZHJpdmVycy9tZmQvdHBzNjUyMTcuYwpAQCAtMzMsOSArMzMsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgdHBzNjUyMTdzW10gPSB7CiAJewogCQkubmFtZSA9ICJ0cHM2NTIxNy1wbWljIiwKKwkJLm9mX2NvbXBhdGlibGUgPSAidGksdHBzNjUyMTctcG1pYyIsCiAJfSwKIAl7CiAJCS5uYW1lID0gInRwczY1MjE3LWJsIiwKKwkJLm9mX2NvbXBhdGlibGUgPSAidGksdHBzNjUyMTctYmwiLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKaW5kZXggNTBmOTA5MS4uN2Q2M2UzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYwpAQCAtODMxLDYgKzgzMSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHR3bDQwMzBfcG93ZXJfb2ZfbWF0Y2hbXSA9IHsKIAl7CisJCS5jb21wYXRpYmxlID0gInRpLHR3bDQwMzAtcG93ZXIiLAorCX0sCisJewogCQkuY29tcGF0aWJsZSA9ICJ0aSx0d2w0MDMwLXBvd2VyLXJlc2V0IiwKIAkJLmRhdGEgPSAmb21hcDNfcmVzZXQsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3ZpcGVyYm9hcmQuYyBiL2RyaXZlcnMvbWZkL3ZpcGVyYm9hcmQuYwppbmRleCAzYzJiOGY5Li5lNmIzYzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC92aXBlcmJvYXJkLmMKKysrIGIvZHJpdmVycy9tZmQvdmlwZXJib2FyZC5jCkBAIC05Myw5ICs5Myw4IEBACiAJCSB2ZXJzaW9uID4+IDgsIHZlcnNpb24gJiAweGZmLAogCQkgdmItPnVzYl9kZXYtPmJ1cy0+YnVzbnVtLCB2Yi0+dXNiX2Rldi0+ZGV2bnVtKTsKIAotCXJldCA9IG1mZF9hZGRfZGV2aWNlcygmaW50ZXJmYWNlLT5kZXYsIFBMQVRGT1JNX0RFVklEX0FVVE8sCi0JCQkJdnByYnJkX2RldnMsIEFSUkFZX1NJWkUodnByYnJkX2RldnMpLCBOVUxMLCAwLAotCQkJCU5VTEwpOworCXJldCA9IG1mZF9hZGRfaG90cGx1Z19kZXZpY2VzKCZpbnRlcmZhY2UtPmRldiwgdnByYnJkX2RldnMsCisJCQkJICAgICAgQVJSQVlfU0laRSh2cHJicmRfZGV2cykpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkZhaWxlZCB0byBhZGQgbWZkIGRldmljZXMgdG8gY29yZS4iKTsKIAkJZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtNTEwMi10YWJsZXMuYyBiL2RyaXZlcnMvbWZkL3dtNTEwMi10YWJsZXMuYwppbmRleCBkNmYzNWJiLi5iMzI2YTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTUxMDItdGFibGVzLmMKKysrIGIvZHJpdmVycy9tZmQvd201MTAyLXRhYmxlcy5jCkBAIC0zMzYsOCArMzM2LDYgQEAKIAl7IDB4MDAwMDAyMTgsIDB4MDFBNiB9LCAgIC8qIFI1MzYgICAtIE1pYyBCaWFzIEN0cmwgMSAqLyAKIAl7IDB4MDAwMDAyMTksIDB4MDFBNiB9LCAgIC8qIFI1MzcgICAtIE1pYyBCaWFzIEN0cmwgMiAqLyAKIAl7IDB4MDAwMDAyMUEsIDB4MDFBNiB9LCAgIC8qIFI1MzggICAtIE1pYyBCaWFzIEN0cmwgMyAqLyAKLQl7IDB4MDAwMDAyMjUsIDB4MDQwMCB9LCAgIC8qIFI1NDkgICAtIEhQIEN0cmwgMUwgKi8KLQl7IDB4MDAwMDAyMjYsIDB4MDQwMCB9LCAgIC8qIFI1NTAgICAtIEhQIEN0cmwgMVIgKi8KIAl7IDB4MDAwMDAyOTMsIDB4MDAwMCB9LCAgIC8qIFI2NTkgICAtIEFjY2Vzc29yeSBEZXRlY3QgTW9kZSAxICovIAogCXsgMHgwMDAwMDI5QiwgMHgwMDIwIH0sICAgLyogUjY2NyAgIC0gSGVhZHBob25lIERldGVjdCAxICovIAogCXsgMHgwMDAwMDI5QywgMHgwMDAwIH0sICAgLyogUjY2OCAgIC0gSGVhZHBob25lIERldGVjdCAyICovCkBAIC0xMTEyLDYgKzExMTAsOCBAQAogCWNhc2UgQVJJWk9OQV9NSUNfQklBU19DVFJMXzE6CiAJY2FzZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMjoKIAljYXNlIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8zOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFMOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFSOgogCWNhc2UgQVJJWk9OQV9BQ0NFU1NPUllfREVURUNUX01PREVfMToKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8xOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzI6CkBAIC0xOTQ5LDYgKzE5NDksOCBAQAogCWNhc2UgQVJJWk9OQV9EU1AxX1NDUkFUQ0hfMToKIAljYXNlIEFSSVpPTkFfRFNQMV9TQ1JBVENIXzI6CiAJY2FzZSBBUklaT05BX0RTUDFfU0NSQVRDSF8zOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFMOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFSOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzI6CiAJY2FzZSBBUklaT05BX0hQX0RBQ1ZBTDoKIAljYXNlIEFSSVpPTkFfTUlDX0RFVEVDVF8zOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd201MTEwLXRhYmxlcy5jIGIvZHJpdmVycy9tZmQvd201MTEwLXRhYmxlcy5jCmluZGV4IDQ2NDJiNWIuLjEyY2FkOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtNTExMC10YWJsZXMuYworKysgYi9kcml2ZXJzL21mZC93bTUxMTAtdGFibGVzLmMKQEAgLTg5NSw4ICs4OTUsMTYgQEAKIAl7IDB4MDAwMDA1NDgsIDB4MTgxOCB9LCAgICAvKiBSMTM1MiAgLSBBSUYyIEZyYW1lIEN0cmwgMiAqLwogCXsgMHgwMDAwMDU0OSwgMHgwMDAwIH0sICAgIC8qIFIxMzUzICAtIEFJRjIgRnJhbWUgQ3RybCAzICovCiAJeyAweDAwMDAwNTRBLCAweDAwMDEgfSwgICAgLyogUjEzNTQgIC0gQUlGMiBGcmFtZSBDdHJsIDQgKi8KKwl7IDB4MDAwMDA1NEIsIDB4MDAwMiB9LCAgICAvKiBSMTM1NSAgLSBBSUYyIEZyYW1lIEN0cmwgNSAqLworCXsgMHgwMDAwMDU0QywgMHgwMDAzIH0sICAgIC8qIFIxMzU2ICAtIEFJRjIgRnJhbWUgQ3RybCA2ICovCisJeyAweDAwMDAwNTRELCAweDAwMDQgfSwgICAgLyogUjEzNTcgIC0gQUlGMiBGcmFtZSBDdHJsIDcgKi8KKwl7IDB4MDAwMDA1NEUsIDB4MDAwNSB9LCAgICAvKiBSMTM1OCAgLSBBSUYyIEZyYW1lIEN0cmwgOCAqLwogCXsgMHgwMDAwMDU1MSwgMHgwMDAwIH0sICAgIC8qIFIxMzYxICAtIEFJRjIgRnJhbWUgQ3RybCAxMSAqLwogCXsgMHgwMDAwMDU1MiwgMHgwMDAxIH0sICAgIC8qIFIxMzYyICAtIEFJRjIgRnJhbWUgQ3RybCAxMiAqLworCXsgMHgwMDAwMDU1MywgMHgwMDAyIH0sICAgIC8qIFIxMzYzICAtIEFJRjIgRnJhbWUgQ3RybCAxMyAqLworCXsgMHgwMDAwMDU1NCwgMHgwMDAzIH0sICAgIC8qIFIxMzY0ICAtIEFJRjIgRnJhbWUgQ3RybCAxNCAqLworCXsgMHgwMDAwMDU1NSwgMHgwMDA0IH0sICAgIC8qIFIxMzY1ICAtIEFJRjIgRnJhbWUgQ3RybCAxNSAqLworCXsgMHgwMDAwMDU1NiwgMHgwMDA1IH0sICAgIC8qIFIxMzY2ICAtIEFJRjIgRnJhbWUgQ3RybCAxNiAqLwogCXsgMHgwMDAwMDU1OSwgMHgwMDAwIH0sICAgIC8qIFIxMzY5ICAtIEFJRjIgVHggRW5hYmxlcyAqLwogCXsgMHgwMDAwMDU1QSwgMHgwMDAwIH0sICAgIC8qIFIxMzcwICAtIEFJRjIgUnggRW5hYmxlcyAqLwogCXsgMHgwMDAwMDU4MCwgMHgwMDBDIH0sICAgIC8qIFIxNDA4ICAtIEFJRjMgQkNMSyBDdHJsICovCkBAIC0xNzkwLDYgKzE3OTgsOCBAQAogCWNhc2UgQVJJWk9OQV9NSUNfQklBU19DVFJMXzE6CiAJY2FzZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMjoKIAljYXNlIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8zOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFMOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFSOgogCWNhc2UgQVJJWk9OQV9BQ0NFU1NPUllfREVURUNUX01PREVfMToKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8xOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzI6CkBAIC0xOTM0LDggKzE5NDQsMTYgQEAKIAljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzI6CiAJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8zOgogCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfNDoKKwljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzU6CisJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF82OgorCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfNzoKKwljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzg6CiAJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xMToKIAljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzEyOgorCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTM6CisJY2FzZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xNDoKKwljYXNlIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzE1OgorCWNhc2UgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTY6CiAJY2FzZSBBUklaT05BX0FJRjJfVFhfRU5BQkxFUzoKIAljYXNlIEFSSVpPTkFfQUlGMl9SWF9FTkFCTEVTOgogCWNhc2UgQVJJWk9OQV9BSUYzX0JDTEtfQ1RSTDoKQEAgLTI4MjUsNiArMjg0Myw4IEBACiAJY2FzZSBBUklaT05BX0FTWU5DX1NBTVBMRV9SQVRFXzFfU1RBVFVTOgogCWNhc2UgQVJJWk9OQV9BU1lOQ19TQU1QTEVfUkFURV8yX1NUQVRVUzoKIAljYXNlIEFSSVpPTkFfTUlDX0RFVEVDVF8zOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFMOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFSOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzI6CiAJY2FzZSBBUklaT05BX0lOUFVUX0VOQUJMRVNfU1RBVFVTOgogCWNhc2UgQVJJWk9OQV9PVVRQVVRfU1RBVFVTXzE6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jIGIvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYwppbmRleCA0YWI1MjdmLi5mNTEyNGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKQEAgLTMwOCw3ICszMDgsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQltb2RlID0gaWQyICYgV004MzUwX0NPTkZfU1RTX01BU0sgPj4gMTA7CisJbW9kZSA9IChpZDIgJiBXTTgzNTBfQ09ORl9TVFNfTUFTSykgPj4gMTA7CiAJY3VzdF9pZCA9IGlkMiAmIFdNODM1MF9DVVNUX0lEX01BU0s7CiAJY2hpcF9yZXYgPSAoaWQyICYgV004MzUwX0NISVBfUkVWX01BU0spID4+IDEyOwogCWRldl9pbmZvKHdtODM1MC0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204OTk0LWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMKaW5kZXggZTZmYWI5NC4uNmNhOWQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204OTk0LWNvcmUuYworKysgYi9kcml2ZXJzL21mZC93bTg5OTQtY29yZS5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkiU1BLVkREMiIsCiB9OwogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgd204OTk0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCB3bTg5OTQgKndtODk5NCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204OTk3LXRhYmxlcy5jIGIvZHJpdmVycy9tZmQvd204OTk3LXRhYmxlcy5jCmluZGV4IDUxMGRhM2IuLmMwYzI1ZDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTg5OTctdGFibGVzLmMKKysrIGIvZHJpdmVycy9tZmQvd204OTk3LXRhYmxlcy5jCkBAIC02NzAsNiArNjcwLDcgQEAKIAl7IDB4MDAwMDBDMjMsIDB4MDAwMCB9LCAgICAvKiBSMzEwNyAgLSBNaXNjIFBhZCBDdHJsIDQgKi8KIAl7IDB4MDAwMDBDMjQsIDB4MDAwMCB9LCAgICAvKiBSMzEwOCAgLSBNaXNjIFBhZCBDdHJsIDUgKi8KIAl7IDB4MDAwMDBEMDgsIDB4RkZGRiB9LCAgICAvKiBSMzMzNiAgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgTWFzayAqLworCXsgMHgwMDAwMEQwOSwgMHhGRkZGIH0sICAgIC8qIFIzMzM3ICAtIEludGVycnVwdCBTdGF0dXMgMiBNYXNrICovCiAJeyAweDAwMDAwRDBBLCAweEZGRkYgfSwgICAgLyogUjMzMzggIC0gSW50ZXJydXB0IFN0YXR1cyAzIE1hc2sgKi8KIAl7IDB4MDAwMDBEMEIsIDB4RkZGRiB9LCAgICAvKiBSMzMzOSAgLSBJbnRlcnJ1cHQgU3RhdHVzIDQgTWFzayAqLwogCXsgMHgwMDAwMEQwQywgMHhGRUZGIH0sICAgIC8qIFIzMzQwICAtIEludGVycnVwdCBTdGF0dXMgNSBNYXNrICovCkBAIC04ODYsNiArODg3LDggQEAKIAljYXNlIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8xOgogCWNhc2UgQVJJWk9OQV9NSUNfQklBU19DVFJMXzI6CiAJY2FzZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMzoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xTDoKKwljYXNlIEFSSVpPTkFfSFBfQ1RSTF8xUjoKIAljYXNlIEFSSVpPTkFfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzE6CiAJY2FzZSBBUklaT05BX0hFQURQSE9ORV9ERVRFQ1RfMToKIAljYXNlIEFSSVpPTkFfSEVBRFBIT05FX0RFVEVDVF8yOgpAQCAtMTMyOCw2ICsxMzMxLDcgQEAKIAljYXNlIEFSSVpPTkFfSU5URVJSVVBUX1NUQVRVU180OgogCWNhc2UgQVJJWk9OQV9JTlRFUlJVUFRfU1RBVFVTXzU6CiAJY2FzZSBBUklaT05BX0lOVEVSUlVQVF9TVEFUVVNfMV9NQVNLOgorCWNhc2UgQVJJWk9OQV9JTlRFUlJVUFRfU1RBVFVTXzJfTUFTSzoKIAljYXNlIEFSSVpPTkFfSU5URVJSVVBUX1NUQVRVU18zX01BU0s6CiAJY2FzZSBBUklaT05BX0lOVEVSUlVQVF9TVEFUVVNfNF9NQVNLOgogCWNhc2UgQVJJWk9OQV9JTlRFUlJVUFRfU1RBVFVTXzVfTUFTSzoKQEAgLTE0NzcsNiArMTQ4MSw4IEBACiAJY2FzZSBBUklaT05BX1NBTVBMRV9SQVRFXzNfU1RBVFVTOgogCWNhc2UgQVJJWk9OQV9BU1lOQ19TQU1QTEVfUkFURV8xX1NUQVRVUzoKIAljYXNlIEFSSVpPTkFfTUlDX0RFVEVDVF8zOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFMOgorCWNhc2UgQVJJWk9OQV9IUF9DVFJMXzFSOgogCWNhc2UgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzI6CiAJY2FzZSBBUklaT05BX0lOUFVUX0VOQUJMRVNfU1RBVFVTOgogCWNhc2UgQVJJWk9OQV9PVVRQVVRfU1RBVFVTXzE6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IGJiZWI0NTEuLjAwNjI0MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC03NSw3ICs3NSw3IEBACiBjb25maWcgQVRNRUxfVENCX0NMS1NSQ19CTE9DSwogCWludAogCWRlcGVuZHMgb24gQVRNRUxfVENCX0NMS1NSQwotCXByb21wdCAiVEMgQmxvY2siIGlmIEFSQ0hfQVQ5MVJNOTIwMCB8fCBBUkNIX0FUOTFTQU05MjYwIHx8IENQVV9BVDMyQVA3MDBYCisJcHJvbXB0ICJUQyBCbG9jayIgaWYgQ1BVX0FUMzJBUDcwMFgKIAlkZWZhdWx0IDAKIAlyYW5nZSAwIDEKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvYXBkczk5MHguYyBiL2RyaXZlcnMvbWlzYy9hcGRzOTkweC5jCmluZGV4IDg2OGEzMGEuLjM3MzlmZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9hcGRzOTkweC5jCisrKyBiL2RyaXZlcnMvbWlzYy9hcGRzOTkweC5jCkBAIC02MDksNyArNjA5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUE0pIHx8IGRlZmluZWQoQ09ORklHX1BNX1JVTlRJTUUpCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGFwZHM5OTB4X2NoaXBfb24oc3RydWN0IGFwZHM5OTB4X2NoaXAgKmNoaXApCiB7CiAJaW50IGVycgkgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShjaGlwLT5yZWdzKSwKQEAgLTEyMzcsNyArMTIzNyw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGFwZHM5OTB4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBpMmNfY2xpZW50LCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jIGIvZHJpdmVycy9taXNjL2JoMTc3MGdsYy5jCmluZGV4IDdiNTVmOGEuLmI3NTYzODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9iaDE3NzBnbGMuYworKysgYi9kcml2ZXJzL21pc2MvYmgxNzcwZ2xjLmMKQEAgLTEzNTgsNyArMTM1OCw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGJoMTc3MF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNS5jIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKaW5kZXggNjM0ZjcyOS4uMGExYWY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKKysrIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvZWVwcm9tLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9wZXJ0eS5oPgogCiAvKgogICogTk9URTogdGhpcyBpcyBhbiAqRUVQUk9NKiBkcml2ZXIuICBUaGUgdmFnYXJpZXMgb2YgcHJvZHVjdCBuYW1pbmcKQEAgLTMwMSwzNSArMzAxLDMzIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgYXQyNV9ucF90b19jaGlwKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkgICBzdHJ1Y3Qgc3BpX2VlcHJvbSAqY2hpcCkKK3N0YXRpYyBpbnQgYXQyNV9md190b19jaGlwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNwaV9lZXByb20gKmNoaXApCiB7CiAJdTMyIHZhbDsKIAogCW1lbXNldChjaGlwLCAwLCBzaXplb2YoKmNoaXApKTsKLQlzdHJuY3B5KGNoaXAtPm5hbWUsIG5wLT5uYW1lLCBzaXplb2YoY2hpcC0+bmFtZSkpOworCXN0cm5jcHkoY2hpcC0+bmFtZSwgImF0MjUiLCBzaXplb2YoY2hpcC0+bmFtZSkpOwogCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAic2l6ZSIsICZ2YWwpID09IDAgfHwKLQkgICAgb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhdDI1LGJ5dGUtbGVuIiwgJnZhbCkgPT0gMCkgeworCWlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAic2l6ZSIsICZ2YWwpID09IDAgfHwKKwkgICAgZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImF0MjUsYnl0ZS1sZW4iLCAmdmFsKSA9PSAwKSB7CiAJCWNoaXAtPmJ5dGVfbGVuID0gdmFsOwogCX0gZWxzZSB7CiAJCWRldl9lcnIoZGV2LCAiRXJyb3I6IG1pc3NpbmcgXCJzaXplXCIgcHJvcGVydHlcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJwYWdlc2l6ZSIsICZ2YWwpID09IDAgfHwKLQkgICAgb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhdDI1LHBhZ2Utc2l6ZSIsICZ2YWwpID09IDApIHsKKwlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgInBhZ2VzaXplIiwgJnZhbCkgPT0gMCB8fAorCSAgICBkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAiYXQyNSxwYWdlLXNpemUiLCAmdmFsKSA9PSAwKSB7CiAJCWNoaXAtPnBhZ2Vfc2l6ZSA9ICh1MTYpdmFsOwogCX0gZWxzZSB7CiAJCWRldl9lcnIoZGV2LCAiRXJyb3I6IG1pc3NpbmcgXCJwYWdlc2l6ZVwiIHByb3BlcnR5XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYXQyNSxhZGRyLW1vZGUiLCAmdmFsKSA9PSAwKSB7CisJaWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICJhdDI1LGFkZHItbW9kZSIsICZ2YWwpID09IDApIHsKIAkJY2hpcC0+ZmxhZ3MgPSAodTE2KXZhbDsKIAl9IGVsc2UgewotCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhZGRyZXNzLXdpZHRoIiwgJnZhbCkpIHsKKwkJaWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICJhZGRyZXNzLXdpZHRoIiwgJnZhbCkpIHsKIAkJCWRldl9lcnIoZGV2LAogCQkJCSJFcnJvcjogbWlzc2luZyBcImFkZHJlc3Mtd2lkdGhcIiBwcm9wZXJ0eVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM1MCw3ICszNDgsNyBAQAogCQkJCXZhbCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgInJlYWQtb25seSIsIE5VTEwpKQorCQlpZiAoZGV2aWNlX3Byb3BlcnR5X3ByZXNlbnQoZGV2LCAicmVhZC1vbmx5IikpCiAJCQljaGlwLT5mbGFncyB8PSBFRV9SRUFET05MWTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zNjAsMjEgKzM1OCwxNSBAQAogewogCXN0cnVjdCBhdDI1X2RhdGEJKmF0MjUgPSBOVUxMOwogCXN0cnVjdCBzcGlfZWVwcm9tCWNoaXA7Ci0Jc3RydWN0IGRldmljZV9ub2RlCSpucCA9IHNwaS0+ZGV2Lm9mX25vZGU7CiAJaW50CQkJZXJyOwogCWludAkJCXNyOwogCWludAkJCWFkZHJsZW47CiAKIAkvKiBDaGlwIGRlc2NyaXB0aW9uICovCiAJaWYgKCFzcGktPmRldi5wbGF0Zm9ybV9kYXRhKSB7Ci0JCWlmIChucCkgewotCQkJZXJyID0gYXQyNV9ucF90b19jaGlwKCZzcGktPmRldiwgbnAsICZjaGlwKTsKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfSBlbHNlIHsKLQkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiRXJyb3I6IG5vIGNoaXAgZGVzY3JpcHRpb25cbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KKwkJZXJyID0gYXQyNV9md190b19jaGlwKCZzcGktPmRldiwgJmNoaXApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAl9IGVsc2UKIAkJY2hpcCA9ICooc3RydWN0IHNwaV9lZXByb20gKilzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZWVwcm9tL2VlcHJvbV85M2N4Ni5jIGIvZHJpdmVycy9taXNjL2VlcHJvbS9lZXByb21fOTNjeDYuYwppbmRleCAwZmY0YjAyLi4wY2YyYzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvZWVwcm9tL2VlcHJvbV85M2N4Ni5jCisrKyBiL2RyaXZlcnMvbWlzYy9lZXByb20vZWVwcm9tXzkzY3g2LmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogfQogCiAvKioKLSAqIGVlcHJvbV85M2N4Nl9yZWFkIC0gUmVhZCBtdWx0aXBsZSB3b3JkcyBmcm9tIGVlcHJvbQorICogZWVwcm9tXzkzY3g2X3JlYWQgLSBSZWFkIGEgd29yZCBmcm9tIGVlcHJvbQogICogQGVlcHJvbTogUG9pbnRlciB0byBlZXByb20gc3RydWN0dXJlCiAgKiBAd29yZDogV29yZCBpbmRleCBmcm9tIHdoZXJlIHdlIHNob3VsZCBzdGFydCByZWFkaW5nCiAgKiBAZGF0YTogdGFyZ2V0IHBvaW50ZXIgd2hlcmUgdGhlIGluZm9ybWF0aW9uIHdpbGwgaGF2ZSB0byBiZSBzdG9yZWQKQEAgLTIzNSw2ICsyMzUsNjYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGVlcHJvbV85M2N4Nl9tdWx0aXJlYWQpOwogCiAvKioKKyAqIGVlcHJvbV85M2N4Nl9yZWFkYiAtIFJlYWQgYSBieXRlIGZyb20gZWVwcm9tCisgKiBAZWVwcm9tOiBQb2ludGVyIHRvIGVlcHJvbSBzdHJ1Y3R1cmUKKyAqIEB3b3JkOiBCeXRlIGluZGV4IGZyb20gd2hlcmUgd2Ugc2hvdWxkIHN0YXJ0IHJlYWRpbmcKKyAqIEBkYXRhOiB0YXJnZXQgcG9pbnRlciB3aGVyZSB0aGUgaW5mb3JtYXRpb24gd2lsbCBoYXZlIHRvIGJlIHN0b3JlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGEgYnl0ZSBvZiB0aGUgZWVwcm9tIGRhdGEKKyAqIGludG8gdGhlIGdpdmVuIGRhdGEgcG9pbnRlci4KKyAqLwordm9pZCBlZXByb21fOTNjeDZfcmVhZGIoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tLCBjb25zdCB1OCBieXRlLAorCXU4ICpkYXRhKQoreworCXUxNiBjb21tYW5kOworCXUxNiB0bXA7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGVlcHJvbSByZWdpc3RlcgorCSAqLworCWVlcHJvbV85M2N4Nl9zdGFydHVwKGVlcHJvbSk7CisKKwkvKgorCSAqIFNlbGVjdCB0aGUgcmVhZCBvcGNvZGUgYW5kIHRoZSBieXRlIHRvIGJlIHJlYWQuCisJICovCisJY29tbWFuZCA9IChQQ0lfRUVQUk9NX1JFQURfT1BDT0RFIDw8IChlZXByb20tPndpZHRoICsgMSkpIHwgYnl0ZTsKKwllZXByb21fOTNjeDZfd3JpdGVfYml0cyhlZXByb20sIGNvbW1hbmQsCisJCVBDSV9FRVBST01fV0lEVEhfT1BDT0RFICsgZWVwcm9tLT53aWR0aCArIDEpOworCisJLyoKKwkgKiBSZWFkIHRoZSByZXF1ZXN0ZWQgOCBiaXRzLgorCSAqLworCWVlcHJvbV85M2N4Nl9yZWFkX2JpdHMoZWVwcm9tLCAmdG1wLCA4KTsKKwkqZGF0YSA9IHRtcCAmIDB4ZmY7CisKKwkvKgorCSAqIENsZWFudXAgZWVwcm9tIHJlZ2lzdGVyLgorCSAqLworCWVlcHJvbV85M2N4Nl9jbGVhbnVwKGVlcHJvbSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlZXByb21fOTNjeDZfcmVhZGIpOworCisvKioKKyAqIGVlcHJvbV85M2N4Nl9tdWx0aXJlYWRiIC0gUmVhZCBtdWx0aXBsZSBieXRlcyBmcm9tIGVlcHJvbQorICogQGVlcHJvbTogUG9pbnRlciB0byBlZXByb20gc3RydWN0dXJlCisgKiBAYnl0ZTogSW5kZXggZnJvbSB3aGVyZSB3ZSBzaG91bGQgc3RhcnQgcmVhZGluZworICogQGRhdGE6IHRhcmdldCBwb2ludGVyIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGhhdmUgdG8gYmUgc3RvcmVkCisgKiBAd29yZHM6IE51bWJlciBvZiBieXRlcyB0aGF0IHNob3VsZCBiZSByZWFkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGFsbCByZXF1ZXN0ZWQgYnl0ZXMgZnJvbSB0aGUgZWVwcm9tLAorICogdGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcgZWVwcm9tXzkzY3g2X3JlYWRiKCkgbXVsdGlwbGUgdGltZXMuCisgKi8KK3ZvaWQgZWVwcm9tXzkzY3g2X211bHRpcmVhZGIoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tLCBjb25zdCB1OCBieXRlLAorCXU4ICpkYXRhLCBjb25zdCB1MTYgYnl0ZXMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykKKwkJZWVwcm9tXzkzY3g2X3JlYWRiKGVlcHJvbSwgYnl0ZSArIGksICZkYXRhW2ldKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGVlcHJvbV85M2N4Nl9tdWx0aXJlYWRiKTsKKworLyoqCiAgKiBlZXByb21fOTNjeDZfd3JlbiAtIHNldCB0aGUgd3JpdGUgZW5hYmxlIHN0YXRlCiAgKiBAZWVwcm9tOiBQb2ludGVyIHRvIGVlcHJvbSBzdHJ1Y3R1cmUKICAqIEBlbmFibGU6IHRydWUgdG8gZW5hYmxlIHdyaXRlcywgb3RoZXJ3aXNlIGRpc2FibGUgd3JpdGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMgYi9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKaW5kZXggMmNmMmJiYzAuLjE4MGE1NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYworKysgYi9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKQEAgLTE4Nyw2ICsxODcsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZW5jbG9zdXJlX3VucmVnaXN0ZXIpOwogCiAjZGVmaW5lIEVOQ0xPU1VSRV9OQU1FX1NJWkUJNjQKKyNkZWZpbmUgQ09NUE9ORU5UX05BTUVfU0laRQk2NAogCiBzdGF0aWMgdm9pZCBlbmNsb3N1cmVfbGlua19uYW1lKHN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICpjZGV2LCBjaGFyICpuYW1lKQogewpAQCAtMjQ2LDYgKzI0NywyOSBAQAogCXB1dF9kZXZpY2UoZGV2LT5wYXJlbnQpOwogfQogCitzdGF0aWMgc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKgorZW5jbG9zdXJlX2NvbXBvbmVudF9maW5kX2J5X25hbWUoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYsCisJCQkJY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpjbmFtZTsKKwlzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXA7CisKKwlpZiAoIWVkZXYgfHwgIW5hbWUgfHwgIW5hbWVbMF0pCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IGVkZXYtPmNvbXBvbmVudHM7IGkrKykgeworCQllY29tcCA9ICZlZGV2LT5jb21wb25lbnRbaV07CisJCWNuYW1lID0gZGV2X25hbWUoJmVjb21wLT5jZGV2KTsKKwkJaWYgKGVjb21wLT5udW1iZXIgIT0gLTEgJiYKKwkJICAgIGNuYW1lICYmIGNuYW1lWzBdICYmCisJCSAgICAhc3RyY21wKGNuYW1lLCBuYW1lKSkKKwkJCXJldHVybiBlY29tcDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmVuY2xvc3VyZV9jb21wb25lbnRfZ3JvdXBzW107CiAKIC8qKgpAQCAtMjY5LDcgKzI5Myw4IEBACiB7CiAJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wOwogCXN0cnVjdCBkZXZpY2UgKmNkZXY7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpOworCWNoYXIgbmV3bmFtZVtDT01QT05FTlRfTkFNRV9TSVpFXTsKIAogCWlmIChudW1iZXIgPj0gZWRldi0+Y29tcG9uZW50cykKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC0yODMsOSArMzA4LDIwIEBACiAJZWNvbXAtPm51bWJlciA9IG51bWJlcjsKIAljZGV2ID0gJmVjb21wLT5jZGV2OwogCWNkZXYtPnBhcmVudCA9IGdldF9kZXZpY2UoJmVkZXYtPmVkZXYpOwotCWlmIChuYW1lICYmIG5hbWVbMF0pCi0JCWRldl9zZXRfbmFtZShjZGV2LCAiJXMiLCBuYW1lKTsKLQllbHNlCisKKwlpZiAobmFtZSAmJiBuYW1lWzBdKSB7CisJCS8qIFNvbWUgaGFyZHdhcmUgKGUuZy4gZW5jbG9zdXJlIGluIFJYMzAwIFM2KSBoYXMgY29tcG9uZW50cworCQkgKiB3aXRoIG5vbiB1bmlxdWUgbmFtZXMuIFJlZ2lzdGVyaW5nIGR1cGxpY2F0ZXMgaW4gc3lzZnMKKwkJICogd2lsbCBsZWFkIHRvIHdhcm5pbmdzIGR1cmluZyBib290dXAuIFNvIG1ha2UgdGhlIG5hbWVzCisJCSAqIHVuaXF1ZSBieSBhcHBlbmRpbmcgY29uc2VjdXRpdmUgbnVtYmVycyAtMSwgLTIsIC4uLiAqLworCQlpID0gMTsKKwkJc25wcmludGYobmV3bmFtZSwgQ09NUE9ORU5UX05BTUVfU0laRSwKKwkJCSAiJXMiLCBuYW1lKTsKKwkJd2hpbGUgKGVuY2xvc3VyZV9jb21wb25lbnRfZmluZF9ieV9uYW1lKGVkZXYsIG5ld25hbWUpKQorCQkJc25wcmludGYobmV3bmFtZSwgQ09NUE9ORU5UX05BTUVfU0laRSwKKwkJCQkgIiVzLSVpIiwgbmFtZSwgaSsrKTsKKwkJZGV2X3NldF9uYW1lKGNkZXYsICIlcyIsIG5ld25hbWUpOworCX0gZWxzZQogCQlkZXZfc2V0X25hbWUoY2RldiwgIiV1IiwgbnVtYmVyKTsKIAogCWNkZXYtPnJlbGVhc2UgPSBlbmNsb3N1cmVfY29tcG9uZW50X3JlbGVhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfZGV2LmMgYi9kcml2ZXJzL21pc2MvZ2Vud3FlL2NhcmRfZGV2LmMKaW5kZXggNTkxODU4Ni4uYzQ5ZDI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2dlbndxZS9jYXJkX2Rldi5jCisrKyBiL2RyaXZlcnMvbWlzYy9nZW53cWUvY2FyZF9kZXYuYwpAQCAtMzk1LDcgKzM5NSw3IEBACiBzdGF0aWMgdm9pZCBnZW53cWVfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXVuc2lnbmVkIGxvbmcgdnNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUodm1hLT52bV9maWxlKTsKIAlzdHJ1Y3QgZG1hX21hcHBpbmcgKmRtYV9tYXA7CiAJc3RydWN0IGdlbndxZV9kZXYgKmNkID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBnZW53cWVfZGV2LAogCQkJCQkgICAgY2Rldl9nZW53cWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2xpczNsdjAyZC9saXMzbHYwMmRfaTJjLmMgYi9kcml2ZXJzL21pc2MvbGlzM2x2MDJkL2xpczNsdjAyZF9pMmMuYwppbmRleCBkMzI0ZjhhLi42M2ZlMDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbGlzM2x2MDJkL2xpczNsdjAyZF9pMmMuYworKysgYi9kcml2ZXJzL21pc2MvbGlzM2x2MDJkL2xpczNsdjAyZF9pMmMuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBsaXMzX2kyY19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KTsKQEAgLTI1Myw3ICsyNTMsNyBAQAogCWxpczNsdjAyZF9wb3dlcm9uKGxpczMpOwogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsaXMzbHYwMmRfaWRbXSA9IHsKIAl7ImxpczNsdjAyZCIsIExJUzNMVjAyRH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbWVpL21laV9kZXYuaCBiL2RyaXZlcnMvbWlzYy9tZWkvbWVpX2Rldi5oCmluZGV4IDcxNzQ0YjEuLjYxYjA0ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tZWkvbWVpX2Rldi5oCisrKyBiL2RyaXZlcnMvbWlzYy9tZWkvbWVpX2Rldi5oCkBAIC01MzAsOSArNTMwLDkgQEAKIAkgKiBQb3dlciBHYXRpbmcgc3VwcG9ydAogCSAqLwogCWVudW0gbWVpX3BnX2V2ZW50IHBnX2V2ZW50OwotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAJc3RydWN0IGRldl9wbV9kb21haW4gcGdfZG9tYWluOwotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIAl1bnNpZ25lZCBjaGFyIHJkX21zZ19idWZbTUVJX1JEX01TR19CVUZfU0laRV07CiAJdTMyIHJkX21zZ19oZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbWVpL3BjaS1tZS5jIGIvZHJpdmVycy9taXNjL21laS9wY2ktbWUuYwppbmRleCBmMzIyNWIxLi5jZjIwZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbWVpL3BjaS1tZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9tZWkvcGNpLW1lLmMKQEAgLTg5LDEzICs4OSwxMyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWVpX21lX3BjaV90YmwpOwogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZWlfbWVfc2V0X3BtX2RvbWFpbihzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZWlfbWVfdW5zZXRfcG1fZG9tYWluKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZWlfbWVfc2V0X3BtX2RvbWFpbihzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KSB7fQogc3RhdGljIGlubGluZSB2b2lkIG1laV9tZV91bnNldF9wbV9kb21haW4oc3RydWN0IG1laV9kZXZpY2UgKmRldikge30KLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAvKioKICAqIG1laV9tZV9xdWlya19wcm9iZSAtIHByb2JlIGZvciBkZXZpY2VzIHRoYXQgZG9lc24ndCB2YWxpZCBNRSBpbnRlcmZhY2UKQEAgLTM1Nyw3ICszNTcsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgbWVpX21lX3BtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7CkBAIC00NTMsOSArNDUzLDcgQEAKIAkvKiBzdG9wIHVzaW5nIHBtIGNhbGxiYWNrcyBpZiBhbnkgKi8KIAlkZXYtPmRldi0+cG1fZG9tYWluID0gTlVMTDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogCi0jaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbWVpX21lX3BtX29wcyA9IHsKIAlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhtZWlfbWVfcGNpX3N1c3BlbmQsCiAJCQkJbWVpX21lX3BjaV9yZXN1bWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbWVpL3BjaS10eGUuYyBiL2RyaXZlcnMvbWlzYy9tZWkvcGNpLXR4ZS5jCmluZGV4IGJlZTFjNmZiLi4xZjU3MmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbWVpL3BjaS10eGUuYworKysgYi9kcml2ZXJzL21pc2MvbWVpL3BjaS10eGUuYwpAQCAtNDIsMTMgKzQyLDEzIEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1laV90eGVfcGNpX3RibCk7CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGlubGluZSB2b2lkIG1laV90eGVfc2V0X3BtX2RvbWFpbihzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZWlfdHhlX3Vuc2V0X3BtX2RvbWFpbihzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVpX3R4ZV9zZXRfcG1fZG9tYWluKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbWVpX3R4ZV91bnNldF9wbV9kb21haW4oc3RydWN0IG1laV9kZXZpY2UgKmRldikge30KLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiBzdGF0aWMgdm9pZCBtZWlfdHhlX3BjaV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgbWVpX3R4ZV9odyAqaHcpCiB7CkBAIC0yOTUsNyArMjk1LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IG1laV90eGVfcG1fcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKQEAgLTQwMSw5ICs0MDEsNyBAQAogCS8qIHN0b3AgdXNpbmcgcG0gY2FsbGJhY2tzIGlmIGFueSAqLwogCWRldi0+ZGV2LT5wbV9kb21haW4gPSBOVUxMOwogfQotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCiAKLSNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtZWlfdHhlX3BtX29wcyA9IHsKIAlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhtZWlfdHhlX3BjaV9zdXNwZW5kLAogCQkJCW1laV90eGVfcGNpX3Jlc3VtZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy92ZXhwcmVzcy1zeXNjZmcuYyBiL2RyaXZlcnMvbWlzYy92ZXhwcmVzcy1zeXNjZmcuYwppbmRleCBiM2E4MTIzLi5jMzQ0NDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvdmV4cHJlc3Mtc3lzY2ZnLmMKKysrIGIvZHJpdmVycy9taXNjL3ZleHByZXNzLXN5c2NmZy5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVnbWFwICp2ZXhwcmVzc19zeXNjZmdfcmVnbWFwX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAogCQl2b2lkICpjb250ZXh0KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlpbnQgZXJyOwogCXN0cnVjdCB2ZXhwcmVzc19zeXNjZmcgKnN5c2NmZyA9IGNvbnRleHQ7CiAJc3RydWN0IHZleHByZXNzX3N5c2NmZ19mdW5jICpmdW5jOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKQEAgLTE1NSwzMiArMTU1LDE4IEBACiAJdTMyIHNpdGUsIHBvc2l0aW9uLCBkY2M7CiAJaW50IGk7CiAKLQlpZiAoZGV2LT5vZl9ub2RlKSB7Ci0JCWludCBlcnIgPSB2ZXhwcmVzc19jb25maWdfZ2V0X3RvcG8oZGV2LT5vZl9ub2RlLCAmc2l0ZSwKKwllcnIgPSB2ZXhwcmVzc19jb25maWdfZ2V0X3RvcG8oZGV2LT5vZl9ub2RlLCAmc2l0ZSwKIAkJCQkmcG9zaXRpb24sICZkY2MpOworCWlmIChlcnIpCisJCXJldHVybiBFUlJfUFRSKGVycik7CiAKLQkJaWYgKGVycikKLQkJCXJldHVybiBFUlJfUFRSKGVycik7CisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZGV2LT5vZl9ub2RlLAorCQkJImFybSx2ZXhwcmVzcy1zeXNyZWcsZnVuYyIsIE5VTEwpOworCWlmICghcHJvcCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQkJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZGV2LT5vZl9ub2RlLAotCQkJCSJhcm0sdmV4cHJlc3Mtc3lzcmVnLGZ1bmMiLCBOVUxMKTsKLQkJaWYgKCFwcm9wKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0KLQkJbnVtID0gcHJvcC0+bGVuZ3RoIC8gc2l6ZW9mKHUzMikgLyAyOwotCQl2YWwgPSBwcm9wLT52YWx1ZTsKLQl9IGVsc2UgewotCQlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAxIHx8Ci0JCQkJcGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9CVVMpCi0JCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKLQotCQlzaXRlID0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7Ci0JCWlmIChzaXRlID09IFZFWFBSRVNTX1NJVEVfTUFTVEVSKQotCQkJc2l0ZSA9IHZleHByZXNzX2NvbmZpZ19nZXRfbWFzdGVyKCk7Ci0JCXBvc2l0aW9uID0gMDsKLQkJZGNjID0gMDsKLQkJbnVtID0gMTsKLQl9CisJbnVtID0gcHJvcC0+bGVuZ3RoIC8gc2l6ZW9mKHUzMikgLyAyOworCXZhbCA9IHByb3AtPnZhbHVlOwogCiAJLyoKIAkgKiAiYXJtLHZleHByZXNzLWVuZXJneSIgZnVuY3Rpb24gdXNlZCB0byBiZSBkZXNjcmliZWQKQEAgLTIwNywxMyArMTkzLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKIAkJdTMyIGZ1bmN0aW9uLCBkZXZpY2U7CiAKLQkJaWYgKGRldi0+b2Zfbm9kZSkgewotCQkJZnVuY3Rpb24gPSBiZTMyX3RvX2NwdXAodmFsKyspOwotCQkJZGV2aWNlID0gYmUzMl90b19jcHVwKHZhbCsrKTsKLQkJfSBlbHNlIHsKLQkJCWZ1bmN0aW9uID0gcGRldi0+cmVzb3VyY2VbMF0uZW5kOwotCQkJZGV2aWNlID0gcGRldi0+aWQ7Ci0JCX0KKwkJZnVuY3Rpb24gPSBiZTMyX3RvX2NwdXAodmFsKyspOworCQlkZXZpY2UgPSBiZTMyX3RvX2NwdXAodmFsKyspOwogCiAJCWRldl9kYmcoZGV2LCAiZnVuYyAlcDogJXUvJXUvJXUvJXUvJXVcbiIsCiAJCQkJZnVuYywgc2l0ZSwgcG9zaXRpb24sIGRjYywKQEAgLTI2NSwxNyArMjQ2LDYgQEAKIH07CiAKIAotLyogTm9uLURUIGhhY2ssIHRvIGJlIGdvbmUuLi4gKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICp2ZXhwcmVzc19zeXNjZmdfYnJpZGdlOwotCi1pbnQgdmV4cHJlc3Nfc3lzY2ZnX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXBkZXYtPmRldi5wYXJlbnQgPSB2ZXhwcmVzc19zeXNjZmdfYnJpZGdlOwotCi0JcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKLX0KLQotCiBzdGF0aWMgaW50IHZleHByZXNzX3N5c2NmZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB2ZXhwcmVzc19zeXNjZmcgKnN5c2NmZzsKQEAgLTMwMywxMCArMjczLDYgQEAKIAlpZiAoSVNfRVJSKGJyaWRnZSkpCiAJCXJldHVybiBQVFJfRVJSKGJyaWRnZSk7CiAKLQkvKiBOb24tRFQgY2FzZSAqLwotCWlmICghcGRldi0+ZGV2Lm9mX25vZGUpCi0JCXZleHByZXNzX3N5c2NmZ19icmlkZ2UgPSBicmlkZ2U7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCmluZGV4IDFmYTRjODAuLjQ0MDlkNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKQEAgLTc4LDEzICs3OCwxNiBAQAogCiAvKgogICogV2UndmUgb25seSBnb3Qgb25lIG1ham9yLCBzbyBudW1iZXIgb2YgbW1jYmxrIGRldmljZXMgaXMKLSAqIGxpbWl0ZWQgdG8gMjU2IC8gbnVtYmVyIG9mIG1pbm9ycyBwZXIgZGV2aWNlLgorICogbGltaXRlZCB0byAoMSA8PCAyMCkgLyBudW1iZXIgb2YgbWlub3JzIHBlciBkZXZpY2UuICBJdCBpcyBhbHNvCisgKiBjdXJyZW50bHkgbGltaXRlZCBieSB0aGUgc2l6ZSBvZiB0aGUgc3RhdGljIGJpdG1hcHMgYmVsb3cuCiAgKi8KIHN0YXRpYyBpbnQgbWF4X2RldmljZXM7CiAKLS8qIDI1NiBtaW5vcnMsIHNvIGF0IG1vc3QgMjU2IHNlcGFyYXRlIGRldmljZXMgKi8KLXN0YXRpYyBERUNMQVJFX0JJVE1BUChkZXZfdXNlLCAyNTYpOwotc3RhdGljIERFQ0xBUkVfQklUTUFQKG5hbWVfdXNlLCAyNTYpOworI2RlZmluZSBNQVhfREVWSUNFUyAyNTYKKworLyogVE9ETzogUmVwbGFjZSB0aGVzZSB3aXRoIHN0cnVjdCBpZGEgKi8KK3N0YXRpYyBERUNMQVJFX0JJVE1BUChkZXZfdXNlLCBNQVhfREVWSUNFUyk7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAobmFtZV91c2UsIE1BWF9ERVZJQ0VTKTsKIAogLyoKICAqIFRoZXJlIGlzIG9uZSBtbWNfYmxrX2RhdGEgcGVyIHNsb3QuCkBAIC0xMTIsNyArMTE1LDcgQEAKIAogCS8qCiAJICogT25seSBzZXQgaW4gbWFpbiBtbWNfYmxrX2RhdGEgYXNzb2NpYXRlZAotCSAqIHdpdGggbW1jX2NhcmQgd2l0aCBtbWNfc2V0X2RydmRhdGEsIGFuZCBrZWVwcworCSAqIHdpdGggbW1jX2NhcmQgd2l0aCBkZXZfc2V0X2RydmRhdGEsIGFuZCBrZWVwcwogCSAqIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGVkIGRldmljZSBwYXJ0aXRpb24uCiAJICovCiAJdW5zaWduZWQgaW50CXBhcnRfY3VycjsKQEAgLTI2MCw3ICsyNjMsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IG1tY19ibGtfZGF0YSAqbWQgPSBtbWNfYmxrX2dldChkZXZfdG9fZGlzayhkZXYpKTsKIAotCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWQiLAorCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCiAJCSAgICAgICBnZXRfZGlza19ybyhkZXZfdG9fZGlzayhkZXYpKSBeCiAJCSAgICAgICBtZC0+cmVhZF9vbmx5KTsKIAltbWNfYmxrX3B1dChtZCk7CkBAIC02NDIsNyArNjQ1LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1haW5fbWQgPSBtbWNfZ2V0X2RydmRhdGEoY2FyZCk7CisJc3RydWN0IG1tY19ibGtfZGF0YSAqbWFpbl9tZCA9IGRldl9nZXRfZHJ2ZGF0YSgmY2FyZC0+ZGV2KTsKIAogCWlmIChtYWluX21kLT5wYXJ0X2N1cnIgPT0gbWQtPnBhcnRfdHlwZSkKIAkJcmV0dXJuIDA7CkBAIC0xMDA0LDcgKzEwMDcsOCBAQAogCWVyciA9IG1tY19od19yZXNldChob3N0KTsKIAkvKiBFbnN1cmUgd2Ugc3dpdGNoIGJhY2sgdG8gdGhlIGNvcnJlY3QgcGFydGl0aW9uICovCiAJaWYgKGVyciAhPSAtRU9QTk9UU1VQUCkgewotCQlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptYWluX21kID0gbW1jX2dldF9kcnZkYXRhKGhvc3QtPmNhcmQpOworCQlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptYWluX21kID0KKwkJCWRldl9nZXRfZHJ2ZGF0YSgmaG9zdC0+Y2FyZC0+ZGV2KTsKIAkJaW50IHBhcnRfZXJyOwogCiAJCW1haW5fbWQtPnBhcnRfY3VyciA9IG1haW5fbWQtPnBhcnRfdHlwZTsKQEAgLTEzMDgsMTkgKzEzMTIsMTEgQEAKIAl9CiAKIAlpZiAoc3RhdHVzICYgUjFfRVhDRVBUSU9OX0VWRU5UKSB7Ci0JCWV4dF9jc2QgPSBremFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZXh0X2NzZCkgewotCQkJcHJfZXJyKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZXh0X2NzZFxuIiwKLQkJCSAgICAgICByZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCWVyciA9IG1tY19zZW5kX2V4dF9jc2QoY2FyZCwgZXh0X2NzZCk7CisJCWVyciA9IG1tY19nZXRfZXh0X2NzZChjYXJkLCAmZXh0X2NzZCk7CiAJCWlmIChlcnIpIHsKIAkJCXByX2VycigiJXM6IGVycm9yICVkIHNlbmRpbmcgZXh0X2NzZFxuIiwKIAkJCSAgICAgICByZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSwgZXJyKTsKLQkJCWNoZWNrID0gTU1DX0JMS19BQk9SVDsKLQkJCWdvdG8gZnJlZTsKKwkJCXJldHVybiBNTUNfQkxLX0FCT1JUOwogCQl9CiAKIAkJaWYgKChleHRfY3NkW0VYVF9DU0RfRVhQX0VWRU5UU19TVEFUVVNdICYKQEAgLTEzMzgsNyArMTMzNCw2IEBACiAJCQkgICAgICAgcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUsIHBhY2tlZC0+bnJfZW50cmllcywKIAkJCSAgICAgICBwYWNrZWQtPmJsb2NrcywgcGFja2VkLT5pZHhfZmFpbHVyZSk7CiAJCX0KLWZyZWU6CiAJCWtmcmVlKGV4dF9jc2QpOwogCX0KIApAQCAtMjA5Myw3ICsyMDg4LDcgQEAKIAogCS8qCiAJICogIXN1Ym5hbWUgaW1wbGllcyB3ZSBhcmUgY3JlYXRpbmcgbWFpbiBtbWNfYmxrX2RhdGEgdGhhdCB3aWxsIGJlCi0JICogYXNzb2NpYXRlZCB3aXRoIG1tY19jYXJkIHdpdGggbW1jX3NldF9kcnZkYXRhLiBEdWUgdG8gZGV2aWNlCisJICogYXNzb2NpYXRlZCB3aXRoIG1tY19jYXJkIHdpdGggZGV2X3NldF9kcnZkYXRhLiBEdWUgdG8gZGV2aWNlCiAJICogcGFydGl0aW9ucywgZGV2aWR4IHdpbGwgbm90IGNvaW5jaWRlIHdpdGggYSBwZXItcGh5c2ljYWwgY2FyZAogCSAqIGluZGV4IGFueW1vcmUgc28gd2Uga2VlcCB0cmFjayBvZiBhIG5hbWUgaW5kZXguCiAJICovCkBAIC0yNDI1LDggKzI0MjAsOSBAQAogCUVORF9GSVhVUAogfTsKIAotc3RhdGljIGludCBtbWNfYmxrX3Byb2JlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyBpbnQgbW1jX2Jsa19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG1tY19jYXJkICpjYXJkID0gbW1jX2Rldl90b19jYXJkKGRldik7CiAJc3RydWN0IG1tY19ibGtfZGF0YSAqbWQsICpwYXJ0X21kOwogCWNoYXIgY2FwX3N0clsxMF07CiAKQEAgLTI0NTEsNyArMjQ0Nyw3IEBACiAJaWYgKG1tY19ibGtfYWxsb2NfcGFydHMoY2FyZCwgbWQpKQogCQlnb3RvIG91dDsKIAotCW1tY19zZXRfZHJ2ZGF0YShjYXJkLCBtZCk7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgbWQpOwogCiAJaWYgKG1tY19hZGRfZGlzayhtZCkpCiAJCWdvdG8gb3V0OwpAQCAtMjQ4MSw5ICsyNDc3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1tY19ibGtfcmVtb3ZlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyBpbnQgbW1jX2Jsa19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gbW1jX2dldF9kcnZkYXRhKGNhcmQpOworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOworCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAltbWNfYmxrX3JlbW92ZV9wYXJ0cyhjYXJkLCBtZCk7CiAJcG1fcnVudGltZV9nZXRfc3luYygmY2FyZC0+ZGV2KTsKQEAgLTI0OTQsMTMgKzI0OTEsMTUgQEAKIAkJcG1fcnVudGltZV9kaXNhYmxlKCZjYXJkLT5kZXYpOwogCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmY2FyZC0+ZGV2KTsKIAltbWNfYmxrX3JlbW92ZV9yZXEobWQpOwotCW1tY19zZXRfZHJ2ZGF0YShjYXJkLCBOVUxMKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9tbWNfYmxrX3N1c3BlbmQoc3RydWN0IG1tY19jYXJkICpjYXJkKQorc3RhdGljIGludCBfbW1jX2Jsa19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbW1jX2Jsa19kYXRhICpwYXJ0X21kOwotCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gbW1jX2dldF9kcnZkYXRhKGNhcmQpOworCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobWQpIHsKIAkJbW1jX3F1ZXVlX3N1c3BlbmQoJm1kLT5xdWV1ZSk7CkBAIC0yNTExLDIxICsyNTEwLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1tY19ibGtfc2h1dGRvd24oc3RydWN0IG1tY19jYXJkICpjYXJkKQorc3RhdGljIHZvaWQgbW1jX2Jsa19zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JX21tY19ibGtfc3VzcGVuZChjYXJkKTsKKwlfbW1jX2Jsa19zdXNwZW5kKGRldik7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgbW1jX2Jsa19zdXNwZW5kKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgbW1jX2Jsa19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gX21tY19ibGtfc3VzcGVuZChjYXJkKTsKKwlyZXR1cm4gX21tY19ibGtfc3VzcGVuZChkZXYpOwogfQogCi1zdGF0aWMgaW50IG1tY19ibGtfcmVzdW1lKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyBpbnQgbW1jX2Jsa19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtbWNfYmxrX2RhdGEgKnBhcnRfbWQ7Ci0Jc3RydWN0IG1tY19ibGtfZGF0YSAqbWQgPSBtbWNfZ2V0X2RydmRhdGEoY2FyZCk7CisJc3RydWN0IG1tY19ibGtfZGF0YSAqbWQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChtZCkgewogCQkvKgpAQCAtMjU0MCwxOSArMjUzOSwxNSBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lCW1tY19ibGtfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIG1tY19ibGtfcmVzdW1lCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IG1tY19kcml2ZXIgbW1jX2RyaXZlciA9IHsKLQkuZHJ2CQk9IHsKLQkJLm5hbWUJPSAibW1jYmxrIiwKLQl9LAorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG1tY19ibGtfcG1fb3BzLCBtbWNfYmxrX3N1c3BlbmQsIG1tY19ibGtfcmVzdW1lKTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1tY19kcml2ZXIgPSB7CisJLm5hbWUJCT0gIm1tY2JsayIsCisJLnBtCQk9ICZtbWNfYmxrX3BtX29wcywKIAkucHJvYmUJCT0gbW1jX2Jsa19wcm9iZSwKIAkucmVtb3ZlCQk9IG1tY19ibGtfcmVtb3ZlLAotCS5zdXNwZW5kCT0gbW1jX2Jsa19zdXNwZW5kLAotCS5yZXN1bWUJCT0gbW1jX2Jsa19yZXN1bWUsCiAJLnNodXRkb3duCT0gbW1jX2Jsa19zaHV0ZG93biwKIH07CiAKQEAgLTI1NjMsNyArMjU1OCw3IEBACiAJaWYgKHBlcmRldl9taW5vcnMgIT0gQ09ORklHX01NQ19CTE9DS19NSU5PUlMpCiAJCXByX2luZm8oIm1tY2JsazogdXNpbmcgJWQgbWlub3JzIHBlciBkZXZpY2VcbiIsIHBlcmRldl9taW5vcnMpOwogCi0JbWF4X2RldmljZXMgPSAyNTYgLyBwZXJkZXZfbWlub3JzOworCW1heF9kZXZpY2VzID0gbWluKE1BWF9ERVZJQ0VTLCAoMSA8PCBNSU5PUkJJVFMpIC8gcGVyZGV2X21pbm9ycyk7CiAKIAlyZXMgPSByZWdpc3Rlcl9ibGtkZXYoTU1DX0JMT0NLX01BSk9SLCAibW1jIik7CiAJaWYgKHJlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYyBiL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYwppbmRleCAwYzBmYzUyLi4wYTc0MzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CQkvKiBGb3IgbnJfZnJlZV9idWZmZXJfcGFnZXMoKSAqLwpAQCAtMzIsNiArMzMsOCBAQAogI2RlZmluZSBCVUZGRVJfT1JERVIJCTIKICNkZWZpbmUgQlVGRkVSX1NJWkUJCShQQUdFX1NJWkUgPDwgQlVGRkVSX09SREVSKQogCisjZGVmaW5lIFRFU1RfQUxJR05fRU5ECQk4CisKIC8qCiAgKiBMaW1pdCB0aGUgdGVzdCBhcmVhIHNpemUgdG8gdGhlIG1heGltdW0gTU1DIEhDIGVyYXNlIGdyb3VwIHNpemUuICBOb3RlIHRoYXQKICAqIHRoZSBtYXhpbXVtIFNEIGFsbG9jYXRpb24gdW5pdCBzaXplIGlzIGp1c3QgNE1pQi4KQEAgLTExNzQsNyArMTE3Nyw3IEBACiAJaW50IHJldCwgaTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAKLQlmb3IgKGkgPSAxO2kgPCA0O2krKykgeworCWZvciAoaSA9IDE7IGkgPCBURVNUX0FMSUdOX0VORDsgaSsrKSB7CiAJCXNnX2luaXRfb25lKCZzZywgdGVzdC0+YnVmZmVyICsgaSwgNTEyKTsKIAkJcmV0ID0gbW1jX3Rlc3RfdHJhbnNmZXIodGVzdCwgJnNnLCAxLCAwLCAxLCA1MTIsIDEpOwogCQlpZiAocmV0KQpAQCAtMTE4OSw3ICsxMTkyLDcgQEAKIAlpbnQgcmV0LCBpOwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKIAotCWZvciAoaSA9IDE7aSA8IDQ7aSsrKSB7CisJZm9yIChpID0gMTsgaSA8IFRFU1RfQUxJR05fRU5EOyBpKyspIHsKIAkJc2dfaW5pdF9vbmUoJnNnLCB0ZXN0LT5idWZmZXIgKyBpLCA1MTIpOwogCQlyZXQgPSBtbWNfdGVzdF90cmFuc2Zlcih0ZXN0LCAmc2csIDEsIDAsIDEsIDUxMiwgMCk7CiAJCWlmIChyZXQpCkBAIC0xMjE2LDcgKzEyMTksNyBAQAogCWlmIChzaXplIDwgMTAyNCkKIAkJcmV0dXJuIFJFU1VMVF9VTlNVUF9IT1NUOwogCi0JZm9yIChpID0gMTtpIDwgNDtpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDwgVEVTVF9BTElHTl9FTkQ7IGkrKykgewogCQlzZ19pbml0X29uZSgmc2csIHRlc3QtPmJ1ZmZlciArIGksIHNpemUpOwogCQlyZXQgPSBtbWNfdGVzdF90cmFuc2Zlcih0ZXN0LCAmc2csIDEsIDAsIHNpemUvNTEyLCA1MTIsIDEpOwogCQlpZiAocmV0KQpAQCAtMTI0Myw3ICsxMjQ2LDcgQEAKIAlpZiAoc2l6ZSA8IDEwMjQpCiAJCXJldHVybiBSRVNVTFRfVU5TVVBfSE9TVDsKIAotCWZvciAoaSA9IDE7aSA8IDQ7aSsrKSB7CisJZm9yIChpID0gMTsgaSA8IFRFU1RfQUxJR05fRU5EOyBpKyspIHsKIAkJc2dfaW5pdF9vbmUoJnNnLCB0ZXN0LT5idWZmZXIgKyBpLCBzaXplKTsKIAkJcmV0ID0gbW1jX3Rlc3RfdHJhbnNmZXIodGVzdCwgJnNnLCAxLCAwLCBzaXplLzUxMiwgNTEyLCAwKTsKIAkJaWYgKHJldCkKQEAgLTI5OTcsOCArMzAwMCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtbWNfdGVzdF9wcm9iZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCitzdGF0aWMgaW50IG1tY190ZXN0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWNfZGV2X3RvX2NhcmQoZGV2KTsKIAlpbnQgcmV0OwogCiAJaWYgKCFtbWNfY2FyZF9tbWMoY2FyZCkgJiYgIW1tY19jYXJkX3NkKGNhcmQpKQpAQCAtMzAxMywyMCArMzAxNywyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtbWNfdGVzdF9yZW1vdmUoc3RydWN0IG1tY19jYXJkICpjYXJkKQorc3RhdGljIGludCBtbWNfdGVzdF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOworCiAJbW1jX3Rlc3RfZnJlZV9yZXN1bHQoY2FyZCk7CiAJbW1jX3Rlc3RfZnJlZV9kYmdmc19maWxlKGNhcmQpOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1tY190ZXN0X3NodXRkb3duKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyB2b2lkIG1tY190ZXN0X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIH0KIAotc3RhdGljIHN0cnVjdCBtbWNfZHJpdmVyIG1tY19kcml2ZXIgPSB7Ci0JLmRydgkJPSB7Ci0JCS5uYW1lCT0gIm1tY190ZXN0IiwKLQl9LAorc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1tY19kcml2ZXIgPSB7CisJLm5hbWUJPSAibW1jX3Rlc3QiLAogCS5wcm9iZQkJPSBtbWNfdGVzdF9wcm9iZSwKIAkucmVtb3ZlCQk9IG1tY190ZXN0X3JlbW92ZSwKIAkuc2h1dGRvd24JPSBtbWNfdGVzdF9zaHV0ZG93biwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYyBiL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYwppbmRleCBjZmE2MTEwLi4yMzZkMTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCkBAIC0yMzIsMTMgKzIzMiwxNSBAQAogCQkJaWYgKCFtcXJxX2N1ci0+Ym91bmNlX2J1ZikgewogCQkJCXByX3dhcm4oIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgYm91bmNlIGN1ciBidWZmZXJcbiIsCiAJCQkJCW1tY19jYXJkX25hbWUoY2FyZCkpOwotCQkJfQotCQkJbXFycV9wcmV2LT5ib3VuY2VfYnVmID0ga21hbGxvYyhib3VuY2VzeiwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIW1xcnFfcHJldi0+Ym91bmNlX2J1ZikgewotCQkJCXByX3dhcm4oIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgYm91bmNlIHByZXYgYnVmZmVyXG4iLAotCQkJCQltbWNfY2FyZF9uYW1lKGNhcmQpKTsKLQkJCQlrZnJlZShtcXJxX2N1ci0+Ym91bmNlX2J1Zik7Ci0JCQkJbXFycV9jdXItPmJvdW5jZV9idWYgPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQltcXJxX3ByZXYtPmJvdW5jZV9idWYgPQorCQkJCQkJa21hbGxvYyhib3VuY2VzeiwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFtcXJxX3ByZXYtPmJvdW5jZV9idWYpIHsKKwkJCQkJcHJfd2FybigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBib3VuY2UgcHJldiBidWZmZXJcbiIsCisJCQkJCQltbWNfY2FyZF9uYW1lKGNhcmQpKTsKKwkJCQkJa2ZyZWUobXFycV9jdXItPmJvdW5jZV9idWYpOworCQkJCQltcXJxX2N1ci0+Ym91bmNlX2J1ZiA9IE5VTEw7CisJCQkJfQogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCmluZGV4IDhhMWYxMjQuLjg2ZDI3MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9idXMuYwpAQCAtMjUsOCArMjUsNiBAQAogI2luY2x1ZGUgInNkaW9fY2lzLmgiCiAjaW5jbHVkZSAiYnVzLmgiCiAKLSNkZWZpbmUgdG9fbW1jX2RyaXZlcihkKQljb250YWluZXJfb2YoZCwgc3RydWN0IG1tY19kcml2ZXIsIGRydikKLQogc3RhdGljIHNzaXplX3QgdHlwZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMTA2LDMzICsxMDQsMTQgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IG1tY19idXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBtbWNfZHJpdmVyICpkcnYgPSB0b19tbWNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWNfZGV2X3RvX2NhcmQoZGV2KTsKLQotCXJldHVybiBkcnYtPnByb2JlKGNhcmQpOwotfQotCi1zdGF0aWMgaW50IG1tY19idXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbW1jX2RyaXZlciAqZHJ2ID0gdG9fbW1jX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0Jc3RydWN0IG1tY19jYXJkICpjYXJkID0gbW1jX2Rldl90b19jYXJkKGRldik7Ci0KLQlkcnYtPnJlbW92ZShjYXJkKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBtbWNfYnVzX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2RyaXZlciAqZHJ2ID0gdG9fbW1jX2RyaXZlcihkZXYtPmRyaXZlcik7CiAJc3RydWN0IG1tY19jYXJkICpjYXJkID0gbW1jX2Rldl90b19jYXJkKGRldik7CiAJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gY2FyZC0+aG9zdDsKIAlpbnQgcmV0OwogCi0JaWYgKGRldi0+ZHJpdmVyICYmIGRydi0+c2h1dGRvd24pCi0JCWRydi0+c2h1dGRvd24oY2FyZCk7CisJaWYgKGRldi0+ZHJpdmVyICYmIGRldi0+ZHJpdmVyLT5zaHV0ZG93bikKKwkJZGV2LT5kcml2ZXItPnNodXRkb3duKGRldik7CiAKIAlpZiAoaG9zdC0+YnVzX29wcy0+c2h1dGRvd24pIHsKIAkJcmV0ID0gaG9zdC0+YnVzX29wcy0+c2h1dGRvd24oaG9zdCk7CkBAIC0xNDUsMTYgKzEyNCwxMyBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBtbWNfYnVzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfZHJpdmVyICpkcnYgPSB0b19tbWNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWNfZGV2X3RvX2NhcmQoZGV2KTsKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OwogCWludCByZXQ7CiAKLQlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5zdXNwZW5kKSB7Ci0JCXJldCA9IGRydi0+c3VzcGVuZChjYXJkKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQorCXJldCA9IHBtX2dlbmVyaWNfc3VzcGVuZChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBob3N0LT5idXNfb3BzLT5zdXNwZW5kKGhvc3QpOwogCXJldHVybiByZXQ7CkBAIC0xNjIsNyArMTM4LDYgQEAKIAogc3RhdGljIGludCBtbWNfYnVzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19kcml2ZXIgKmRydiA9IHRvX21tY19kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOwogCXN0cnVjdCBtbWNfaG9zdCAqaG9zdCA9IGNhcmQtPmhvc3Q7CiAJaW50IHJldDsKQEAgLTE3MiwxNCArMTQ3LDEyIEBACiAJCXByX3dhcm4oIiVzOiBlcnJvciAlZCBkdXJpbmcgcmVzdW1lIChjYXJkIHdhcyByZW1vdmVkPylcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdCksIHJldCk7CiAKLQlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5yZXN1bWUpCi0JCXJldCA9IGRydi0+cmVzdW1lKGNhcmQpOwotCisJcmV0ID0gcG1fZ2VuZXJpY19yZXN1bWUoZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBtbWNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWNfZGV2X3RvX2NhcmQoZGV2KTsKQEAgLTE5NSw3ICsxNjgsNyBAQAogCiAJcmV0dXJuIGhvc3QtPmJ1c19vcHMtPnJ1bnRpbWVfcmVzdW1lKGhvc3QpOwogfQotI2VuZGlmIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLworI2VuZGlmIC8qICFDT05GSUdfUE0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG1tY19idXNfcG1fb3BzID0gewogCVNFVF9SVU5USU1FX1BNX09QUyhtbWNfcnVudGltZV9zdXNwZW5kLCBtbWNfcnVudGltZV9yZXN1bWUsIE5VTEwpCkBAIC0yMDcsOCArMTgwLDYgQEAKIAkuZGV2X2dyb3Vwcwk9IG1tY19kZXZfZ3JvdXBzLAogCS5tYXRjaAkJPSBtbWNfYnVzX21hdGNoLAogCS51ZXZlbnQJCT0gbW1jX2J1c191ZXZlbnQsCi0JLnByb2JlCQk9IG1tY19idXNfcHJvYmUsCi0JLnJlbW92ZQkJPSBtbWNfYnVzX3JlbW92ZSwKIAkuc2h1dGRvd24JPSBtbWNfYnVzX3NodXRkb3duLAogCS5wbQkJPSAmbW1jX2J1c19wbV9vcHMsCiB9OwpAQCAtMjI3LDI0ICsxOTgsMjIgQEAKICAqCW1tY19yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIG1lZGlhIGRyaXZlcgogICoJQGRydjogTU1DIG1lZGlhIGRyaXZlcgogICovCi1pbnQgbW1jX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgbW1jX2RyaXZlciAqZHJ2KQoraW50IG1tY19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKLQlkcnYtPmRydi5idXMgPSAmbW1jX2J1c190eXBlOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJ2KTsKKwlkcnYtPmJ1cyA9ICZtbWNfYnVzX3R5cGU7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcihkcnYpOwogfQotCiBFWFBPUlRfU1lNQk9MKG1tY19yZWdpc3Rlcl9kcml2ZXIpOwogCiAvKioKICAqCW1tY191bnJlZ2lzdGVyX2RyaXZlciAtIHVucmVnaXN0ZXIgYSBtZWRpYSBkcml2ZXIKICAqCUBkcnY6IE1NQyBtZWRpYSBkcml2ZXIKICAqLwotdm9pZCBtbWNfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1tY19kcml2ZXIgKmRydikKK3ZvaWQgbW1jX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7Ci0JZHJ2LT5kcnYuYnVzID0gJm1tY19idXNfdHlwZTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcnYpOworCWRydi0+YnVzID0gJm1tY19idXNfdHlwZTsKKwlkcml2ZXJfdW5yZWdpc3RlcihkcnYpOwogfQotCiBFWFBPUlRfU1lNQk9MKG1tY191bnJlZ2lzdGVyX2RyaXZlcik7CiAKIHN0YXRpYyB2b2lkIG1tY19yZWxlYXNlX2NhcmQoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYwppbmRleCBmMjZhNWYxLi45NTg0YmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYwpAQCAtMTQ5LDYgKzE0OSwxNCBAQAogCiAJCWxlZF90cmlnZ2VyX2V2ZW50KGhvc3QtPmxlZCwgTEVEX09GRik7CiAKKwkJaWYgKG1ycS0+c2JjKSB7CisJCQlwcl9kZWJ1ZygiJXM6IHJlcSBkb25lIDxDTUQldT46ICVkOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAorCQkJCW1tY19ob3N0bmFtZShob3N0KSwgbXJxLT5zYmMtPm9wY29kZSwKKwkJCQltcnEtPnNiYy0+ZXJyb3IsCisJCQkJbXJxLT5zYmMtPnJlc3BbMF0sIG1ycS0+c2JjLT5yZXNwWzFdLAorCQkJCW1ycS0+c2JjLT5yZXNwWzJdLCBtcnEtPnNiYy0+cmVzcFszXSk7CisJCX0KKwogCQlwcl9kZWJ1ZygiJXM6IHJlcSBkb25lIChDTUQldSk6ICVkOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAogCQkJbW1jX2hvc3RuYW1lKGhvc3QpLCBjbWQtPm9wY29kZSwgZXJyLAogCQkJY21kLT5yZXNwWzBdLCBjbWQtPnJlc3BbMV0sCkBAIC0yMTQsNiArMjIyLDEwIEBACiAKIAltcnEtPmNtZC0+ZXJyb3IgPSAwOwogCW1ycS0+Y21kLT5tcnEgPSBtcnE7CisJaWYgKG1ycS0+c2JjKSB7CisJCW1ycS0+c2JjLT5lcnJvciA9IDA7CisJCW1ycS0+c2JjLT5tcnEgPSBtcnE7CisJfQogCWlmIChtcnEtPmRhdGEpIHsKIAkJQlVHX09OKG1ycS0+ZGF0YS0+Ymxrc3ogPiBob3N0LT5tYXhfYmxrX3NpemUpOwogCQlCVUdfT04obXJxLT5kYXRhLT5ibG9ja3MgPiBob3N0LT5tYXhfYmxrX2NvdW50KTsKQEAgLTUzOCw4ICs1NTAsMTggQEAKIAkJaWYgKGhvc3QtPmNhcmQgJiYgbW1jX2NhcmRfbW1jKGhvc3QtPmNhcmQpICYmCiAJCSAgICAoKG1tY19yZXNwX3R5cGUoaG9zdC0+YXJlcS0+bXJxLT5jbWQpID09IE1NQ19SU1BfUjEpIHx8CiAJCSAgICAgKG1tY19yZXNwX3R5cGUoaG9zdC0+YXJlcS0+bXJxLT5jbWQpID09IE1NQ19SU1BfUjFCKSkgJiYKLQkJICAgIChob3N0LT5hcmVxLT5tcnEtPmNtZC0+cmVzcFswXSAmIFIxX0VYQ0VQVElPTl9FVkVOVCkpCisJCSAgICAoaG9zdC0+YXJlcS0+bXJxLT5jbWQtPnJlc3BbMF0gJiBSMV9FWENFUFRJT05fRVZFTlQpKSB7CisKKwkJCS8qIENhbmNlbCB0aGUgcHJlcGFyZWQgcmVxdWVzdCAqLworCQkJaWYgKGFyZXEpCisJCQkJbW1jX3Bvc3RfcmVxKGhvc3QsIGFyZXEtPm1ycSwgLUVJTlZBTCk7CisKIAkJCW1tY19zdGFydF9ia29wcyhob3N0LT5jYXJkLCB0cnVlKTsKKworCQkJLyogcHJlcGFyZSB0aGUgcmVxdWVzdCBhZ2FpbiAqLworCQkJaWYgKGFyZXEpCisJCQkJbW1jX3ByZV9yZXEoaG9zdCwgYXJlcS0+bXJxLCAhaG9zdC0+YXJlcSk7CisJCX0KIAl9CiAKIAlpZiAoIWVyciAmJiBhcmVxKQpAQCAtNzA5LDI3ICs3MzEsMTYgQEAKIAlpbnQgZXJyOwogCXU4ICpleHRfY3NkOwogCi0JLyoKLQkgKiBJbiBmdXR1cmUgd29yaywgd2Ugc2hvdWxkIGNvbnNpZGVyIHN0b3JpbmcgdGhlIGVudGlyZSBleHRfY3NkLgotCSAqLwotCWV4dF9jc2QgPSBrbWFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFleHRfY3NkKSB7Ci0JCXByX2VycigiJXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZXh0X2NzZC5cbiIsCi0JCSAgICAgICBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCkpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KIAltbWNfY2xhaW1faG9zdChjYXJkLT5ob3N0KTsKLQllcnIgPSBtbWNfc2VuZF9leHRfY3NkKGNhcmQsIGV4dF9jc2QpOworCWVyciA9IG1tY19nZXRfZXh0X2NzZChjYXJkLCAmZXh0X2NzZCk7CiAJbW1jX3JlbGVhc2VfaG9zdChjYXJkLT5ob3N0KTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIGVycjsKIAogCWNhcmQtPmV4dF9jc2QucmF3X2Jrb3BzX3N0YXR1cyA9IGV4dF9jc2RbRVhUX0NTRF9CS09QU19TVEFUVVNdOwogCWNhcmQtPmV4dF9jc2QucmF3X2V4Y2VwdGlvbl9zdGF0dXMgPSBleHRfY3NkW0VYVF9DU0RfRVhQX0VWRU5UU19TVEFUVVNdOwotb3V0OgogCWtmcmVlKGV4dF9jc2QpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG1tY19yZWFkX2Jrb3BzX3N0YXR1cyk7CiAKQEAgLTEwODgsNiArMTA5OSwyMiBAQAogCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogfQogCisvKgorICogU2V0IGluaXRpYWwgc3RhdGUgYWZ0ZXIgYSBwb3dlciBjeWNsZSBvciBhIGh3X3Jlc2V0LgorICovCit2b2lkIG1tY19zZXRfaW5pdGlhbF9zdGF0ZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJaWYgKG1tY19ob3N0X2lzX3NwaShob3N0KSkKKwkJaG9zdC0+aW9zLmNoaXBfc2VsZWN0ID0gTU1DX0NTX0hJR0g7CisJZWxzZQorCQlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfRE9OVENBUkU7CisJaG9zdC0+aW9zLmJ1c19tb2RlID0gTU1DX0JVU01PREVfUFVTSFBVTEw7CisJaG9zdC0+aW9zLmJ1c193aWR0aCA9IE1NQ19CVVNfV0lEVEhfMTsKKwlob3N0LT5pb3MudGltaW5nID0gTU1DX1RJTUlOR19MRUdBQ1k7CisKKwltbWNfc2V0X2lvcyhob3N0KTsKK30KKwogLyoqCiAgKiBtbWNfdmRkX3RvX29jcmJpdG51bSAtIENvbnZlcnQgYSB2b2x0YWdlIHRvIHRoZSBPQ1IgYml0IG51bWJlcgogICogQHZkZDoJdm9sdGFnZSAobVYpCkBAIC0xNDIwLDE4ICsxNDQ3LDIwIEBACiAJCXByX3dhcm4oIiVzOiBjYW5ub3QgdmVyaWZ5IHNpZ25hbCB2b2x0YWdlIHN3aXRjaFxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0KSk7CiAKKwltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKKwogCWNtZC5vcGNvZGUgPSBTRF9TV0lUQ0hfVk9MVEFHRTsKIAljbWQuYXJnID0gMDsKIAljbWQuZmxhZ3MgPSBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BQzsKIAogCWVyciA9IG1tY193YWl0X2Zvcl9jbWQoaG9zdCwgJmNtZCwgMCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfY29tbWFuZDsKIAotCWlmICghbW1jX2hvc3RfaXNfc3BpKGhvc3QpICYmIChjbWQucmVzcFswXSAmIFIxX0VSUk9SKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKKwlpZiAoIW1tY19ob3N0X2lzX3NwaShob3N0KSAmJiAoY21kLnJlc3BbMF0gJiBSMV9FUlJPUikpIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfY29tbWFuZDsKKwl9CiAJLyoKIAkgKiBUaGUgY2FyZCBzaG91bGQgZHJpdmUgY21kIGFuZCBkYXRbMDozXSBsb3cgaW1tZWRpYXRlbHkKIAkgKiBhZnRlciB0aGUgcmVzcG9uc2Ugb2YgY21kMTEsIGJ1dCB3YWl0IDEgbXMgdG8gYmUgc3VyZQpAQCAtMTQ4MCw2ICsxNTA5LDcgQEAKIAkJbW1jX3Bvd2VyX2N5Y2xlKGhvc3QsIG9jcik7CiAJfQogCitlcnJfY29tbWFuZDoKIAltbWNfaG9zdF9jbGtfcmVsZWFzZShob3N0KTsKIAogCXJldHVybiBlcnI7CkBAIC0xNTI2LDE1ICsxNTU2LDkgQEAKIAltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKIAogCWhvc3QtPmlvcy52ZGQgPSBmbHMob2NyKSAtIDE7Ci0JaWYgKG1tY19ob3N0X2lzX3NwaShob3N0KSkKLQkJaG9zdC0+aW9zLmNoaXBfc2VsZWN0ID0gTU1DX0NTX0hJR0g7Ci0JZWxzZQotCQlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfRE9OVENBUkU7Ci0JaG9zdC0+aW9zLmJ1c19tb2RlID0gTU1DX0JVU01PREVfUFVTSFBVTEw7CiAJaG9zdC0+aW9zLnBvd2VyX21vZGUgPSBNTUNfUE9XRVJfVVA7Ci0JaG9zdC0+aW9zLmJ1c193aWR0aCA9IE1NQ19CVVNfV0lEVEhfMTsKLQlob3N0LT5pb3MudGltaW5nID0gTU1DX1RJTUlOR19MRUdBQ1k7Ci0JbW1jX3NldF9pb3MoaG9zdCk7CisJLyogU2V0IGluaXRpYWwgc3RhdGUgYW5kIGNhbGwgbW1jX3NldF9pb3MgKi8KKwltbWNfc2V0X2luaXRpYWxfc3RhdGUoaG9zdCk7CiAKIAkvKiBUcnkgdG8gc2V0IHNpZ25hbCB2b2x0YWdlIHRvIDMuM1YgYnV0IGZhbGwgYmFjayB0byAxLjh2IG9yIDEuMnYgKi8KIAlpZiAoX19tbWNfc2V0X3NpZ25hbF92b2x0YWdlKGhvc3QsIE1NQ19TSUdOQUxfVk9MVEFHRV8zMzApID09IDApCkBAIC0xNTc0LDE0ICsxNTk4LDkgQEAKIAlob3N0LT5pb3MuY2xvY2sgPSAwOwogCWhvc3QtPmlvcy52ZGQgPSAwOwogCi0JaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKLQkJaG9zdC0+aW9zLmJ1c19tb2RlID0gTU1DX0JVU01PREVfT1BFTkRSQUlOOwotCQlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfRE9OVENBUkU7Ci0JfQogCWhvc3QtPmlvcy5wb3dlcl9tb2RlID0gTU1DX1BPV0VSX09GRjsKLQlob3N0LT5pb3MuYnVzX3dpZHRoID0gTU1DX0JVU19XSURUSF8xOwotCWhvc3QtPmlvcy50aW1pbmcgPSBNTUNfVElNSU5HX0xFR0FDWTsKLQltbWNfc2V0X2lvcyhob3N0KTsKKwkvKiBTZXQgaW5pdGlhbCBzdGF0ZSBhbmQgY2FsbCBtbWNfc2V0X2lvcyAqLworCW1tY19zZXRfaW5pdGlhbF9zdGF0ZShob3N0KTsKIAogCS8qCiAJICogU29tZSBjb25maWd1cmF0aW9ucywgc3VjaCBhcyB0aGUgODAyLjExIFNESU8gY2FyZCBpbiB0aGUgT0xQQwpAQCAtMjI1OSwzMCArMjI3OCwxNiBAQAogCiAJLyogSWYgdGhlIHJlc2V0IGhhcyBoYXBwZW5lZCwgdGhlbiBhIHN0YXR1cyBjb21tYW5kIHdpbGwgZmFpbCAqLwogCWlmIChjaGVjaykgewotCQlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kID0gezB9OwotCQlpbnQgZXJyOworCQl1MzIgc3RhdHVzOwogCi0JCWNtZC5vcGNvZGUgPSBNTUNfU0VORF9TVEFUVVM7Ci0JCWlmICghbW1jX2hvc3RfaXNfc3BpKGNhcmQtPmhvc3QpKQotCQkJY21kLmFyZyA9IGNhcmQtPnJjYSA8PCAxNjsKLQkJY21kLmZsYWdzID0gTU1DX1JTUF9TUElfUjIgfCBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BQzsKLQkJZXJyID0gbW1jX3dhaXRfZm9yX2NtZChjYXJkLT5ob3N0LCAmY21kLCAwKTsKLQkJaWYgKCFlcnIpIHsKKwkJaWYgKCFtbWNfc2VuZF9zdGF0dXMoY2FyZCwgJnN0YXR1cykpIHsKIAkJCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogCQkJcmV0dXJuIC1FTk9TWVM7CiAJCX0KIAl9CiAKLQlpZiAobW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7Ci0JCWhvc3QtPmlvcy5jaGlwX3NlbGVjdCA9IE1NQ19DU19ISUdIOwotCQlob3N0LT5pb3MuYnVzX21vZGUgPSBNTUNfQlVTTU9ERV9QVVNIUFVMTDsKLQl9IGVsc2UgewotCQlob3N0LT5pb3MuY2hpcF9zZWxlY3QgPSBNTUNfQ1NfRE9OVENBUkU7Ci0JCWhvc3QtPmlvcy5idXNfbW9kZSA9IE1NQ19CVVNNT0RFX09QRU5EUkFJTjsKLQl9Ci0JaG9zdC0+aW9zLmJ1c193aWR0aCA9IE1NQ19CVVNfV0lEVEhfMTsKLQlob3N0LT5pb3MudGltaW5nID0gTU1DX1RJTUlOR19MRUdBQ1k7Ci0JbW1jX3NldF9pb3MoaG9zdCk7CisJLyogU2V0IGluaXRpYWwgc3RhdGUgYW5kIGNhbGwgbW1jX3NldF9pb3MgKi8KKwltbWNfc2V0X2luaXRpYWxfc3RhdGUoaG9zdCk7CiAKIAltbWNfaG9zdF9jbGtfcmVsZWFzZShob3N0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmggYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaAppbmRleCA0NDNhNTg0Li5kNzY1OTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaAorKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaApAQCAtNDksNiArNDksNyBAQAogdm9pZCBtbWNfcG93ZXJfdXAoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyKTsKIHZvaWQgbW1jX3Bvd2VyX29mZihzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogdm9pZCBtbWNfcG93ZXJfY3ljbGUoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyKTsKK3ZvaWQgbW1jX3NldF9pbml0aWFsX3N0YXRlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWNfZGVsYXkodW5zaWduZWQgaW50IG1zKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYwppbmRleCA5MWViMTYyLi5lOTE0MjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYwpAQCAtMjkxLDE0ICsyOTEsOCBAQAogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWV4dF9jc2QgPSBrbWFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFleHRfY3NkKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCiAJbW1jX2dldF9jYXJkKGNhcmQpOwotCWVyciA9IG1tY19zZW5kX2V4dF9jc2QoY2FyZCwgZXh0X2NzZCk7CisJZXJyID0gbW1jX2dldF9leHRfY3NkKGNhcmQsICZleHRfY3NkKTsKIAltbWNfcHV0X2NhcmQoY2FyZCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZTsKQEAgLTMxNCw3ICszMDgsNiBAQAogCiBvdXRfZnJlZToKIAlrZnJlZShidWYpOwotCWtmcmVlKGV4dF9jc2QpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCmluZGV4IGEzMDFhNzguLjAyYWQ3OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwpAQCAtMTc3LDY1ICsxNzcsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogUmVhZCBleHRlbmRlZCBDU0QuCi0gKi8KLXN0YXRpYyBpbnQgbW1jX2dldF9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKipuZXdfZXh0X2NzZCkKLXsKLQlpbnQgZXJyOwotCXU4ICpleHRfY3NkOwotCi0JQlVHX09OKCFjYXJkKTsKLQlCVUdfT04oIW5ld19leHRfY3NkKTsKLQotCSpuZXdfZXh0X2NzZCA9IE5VTEw7Ci0KLQlpZiAoY2FyZC0+Y3NkLm1tY2FfdnNuIDwgQ1NEX1NQRUNfVkVSXzQpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBBcyB0aGUgZXh0X2NzZCBpcyBzbyBsYXJnZSBhbmQgbW9zdGx5IHVudXNlZCwgd2UgZG9uJ3Qgc3RvcmUgdGhlCi0JICogcmF3IGJsb2NrIGluIG1tY19jYXJkLgotCSAqLwotCWV4dF9jc2QgPSBrbWFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFleHRfY3NkKSB7Ci0JCXByX2VycigiJXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBhIGJ1ZmZlciB0byAiCi0JCQkicmVjZWl2ZSB0aGUgZXh0X2NzZC5cbiIsIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWVyciA9IG1tY19zZW5kX2V4dF9jc2QoY2FyZCwgZXh0X2NzZCk7Ci0JaWYgKGVycikgewotCQlrZnJlZShleHRfY3NkKTsKLQkJKm5ld19leHRfY3NkID0gTlVMTDsKLQotCQkvKiBJZiB0aGUgaG9zdCBvciB0aGUgY2FyZCBjYW4ndCBkbyB0aGUgc3dpdGNoLAotCQkgKiBmYWlsIG1vcmUgZ3JhY2VmdWxseS4gKi8KLQkJaWYgKChlcnIgIT0gLUVJTlZBTCkKLQkJICYmIChlcnIgIT0gLUVOT1NZUykKLQkJICYmIChlcnIgIT0gLUVGQVVMVCkpCi0JCQlyZXR1cm4gZXJyOwotCi0JCS8qCi0JCSAqIEhpZ2ggY2FwYWNpdHkgY2FyZHMgc2hvdWxkIGhhdmUgdGhpcyAibWFnaWMiIHNpemUKLQkJICogc3RvcmVkIGluIHRoZWlyIENTRC4KLQkJICovCi0JCWlmIChjYXJkLT5jc2QuY2FwYWNpdHkgPT0gKDQwOTYgKiA1MTIpKSB7Ci0JCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gcmVhZCBFWFRfQ1NEICIKLQkJCQkib24gYSBwb3NzaWJsZSBoaWdoIGNhcGFjaXR5IGNhcmQuICIKLQkJCQkiQ2FyZCB3aWxsIGJlIGlnbm9yZWQuXG4iLAotCQkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7Ci0JCX0gZWxzZSB7Ci0JCQlwcl93YXJuKCIlczogdW5hYmxlIHRvIHJlYWQgRVhUX0NTRCwgcGVyZm9ybWFuY2UgbWlnaHQgc3VmZmVyXG4iLAotCQkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7Ci0JCQllcnIgPSAwOwotCQl9Ci0JfSBlbHNlCi0JCSpuZXdfZXh0X2NzZCA9IGV4dF9jc2Q7Ci0KLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgdm9pZCBtbWNfc2VsZWN0X2NhcmRfdHlwZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gY2FyZC0+aG9zdDsKQEAgLTM5MSwxNiArMzMyLDExIEBACiAvKgogICogRGVjb2RlIGV4dGVuZGVkIENTRC4KICAqLwotc3RhdGljIGludCBtbWNfcmVhZF9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKmV4dF9jc2QpCitzdGF0aWMgaW50IG1tY19kZWNvZGVfZXh0X2NzZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHU4ICpleHRfY3NkKQogewogCWludCBlcnIgPSAwLCBpZHg7CiAJdW5zaWduZWQgaW50IHBhcnRfc2l6ZTsKIAotCUJVR19PTighY2FyZCk7Ci0KLQlpZiAoIWV4dF9jc2QpCi0JCXJldHVybiAwOwotCiAJLyogVmVyc2lvbiBpcyBjb2RlZCBpbiB0aGUgQ1NEX1NUUlVDVFVSRSBieXRlIGluIHRoZSBFWFRfQ1NEIHJlZ2lzdGVyICovCiAJY2FyZC0+ZXh0X2NzZC5yYXdfZXh0X2NzZF9zdHJ1Y3R1cmUgPSBleHRfY3NkW0VYVF9DU0RfU1RSVUNUVVJFXTsKIAlpZiAoY2FyZC0+Y3NkLnN0cnVjdHVyZSA9PSAzKSB7CkBAIC02MjgsMTUgKzU2NCw1NSBAQAogCQljYXJkLT5leHRfY3NkLmRhdGFfc2VjdG9yX3NpemUgPSA1MTI7CiAJfQogCisJLyogZU1NQyB2NSBvciBsYXRlciAqLworCWlmIChjYXJkLT5leHRfY3NkLnJldiA+PSA3KSB7CisJCW1lbWNweShjYXJkLT5leHRfY3NkLmZ3cmV2LCAmZXh0X2NzZFtFWFRfQ1NEX0ZJUk1XQVJFX1ZFUlNJT05dLAorCQkgICAgICAgTU1DX0ZJUk1XQVJFX0xFTik7CisJCWNhcmQtPmV4dF9jc2QuZmZ1X2NhcGFibGUgPQorCQkJKGV4dF9jc2RbRVhUX0NTRF9TVVBQT1JURURfTU9ERV0gJiAweDEpICYmCisJCQkhKGV4dF9jc2RbRVhUX0NTRF9GV19DT05GSUddICYgMHgxKTsKKwl9CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1tY19mcmVlX2V4dF9jc2QodTggKmV4dF9jc2QpCitzdGF0aWMgaW50IG1tY19yZWFkX2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkKQogewotCWtmcmVlKGV4dF9jc2QpOwotfQorCXU4ICpleHRfY3NkOworCWludCBlcnI7CiAKKwlpZiAoIW1tY19jYW5fZXh0X2NzZChjYXJkKSkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBtbWNfZ2V0X2V4dF9jc2QoY2FyZCwgJmV4dF9jc2QpOworCWlmIChlcnIpIHsKKwkJLyogSWYgdGhlIGhvc3Qgb3IgdGhlIGNhcmQgY2FuJ3QgZG8gdGhlIHN3aXRjaCwKKwkJICogZmFpbCBtb3JlIGdyYWNlZnVsbHkuICovCisJCWlmICgoZXJyICE9IC1FSU5WQUwpCisJCSAmJiAoZXJyICE9IC1FTk9TWVMpCisJCSAmJiAoZXJyICE9IC1FRkFVTFQpKQorCQkJcmV0dXJuIGVycjsKKworCQkvKgorCQkgKiBIaWdoIGNhcGFjaXR5IGNhcmRzIHNob3VsZCBoYXZlIHRoaXMgIm1hZ2ljIiBzaXplCisJCSAqIHN0b3JlZCBpbiB0aGVpciBDU0QuCisJCSAqLworCQlpZiAoY2FyZC0+Y3NkLmNhcGFjaXR5ID09ICg0MDk2ICogNTEyKSkgeworCQkJcHJfZXJyKCIlczogdW5hYmxlIHRvIHJlYWQgRVhUX0NTRCBvbiBhIHBvc3NpYmxlIGhpZ2ggY2FwYWNpdHkgY2FyZC4gQ2FyZCB3aWxsIGJlIGlnbm9yZWQuXG4iLAorCQkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7CisJCX0gZWxzZSB7CisJCQlwcl93YXJuKCIlczogdW5hYmxlIHRvIHJlYWQgRVhUX0NTRCwgcGVyZm9ybWFuY2UgbWlnaHQgc3VmZmVyXG4iLAorCQkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7CisJCQllcnIgPSAwOworCQl9CisKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBtbWNfZGVjb2RlX2V4dF9jc2QoY2FyZCwgZXh0X2NzZCk7CisJa2ZyZWUoZXh0X2NzZCk7CisJcmV0dXJuIGVycjsKK30KIAogc3RhdGljIGludCBtbWNfY29tcGFyZV9leHRfY3NkcyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGJ1c193aWR0aCkKIHsKQEAgLTY0NywxMSArNjIzLDggQEAKIAkJcmV0dXJuIDA7CiAKIAllcnIgPSBtbWNfZ2V0X2V4dF9jc2QoY2FyZCwgJmJ3X2V4dF9jc2QpOwotCi0JaWYgKGVyciB8fCBid19leHRfY3NkID09IE5VTEwpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAkvKiBvbmx5IGNvbXBhcmUgcmVhZCBvbmx5IGZpZWxkcyAqLwogCWVyciA9ICEoKGNhcmQtPmV4dF9jc2QucmF3X3BhcnRpdGlvbl9zdXBwb3J0ID09CkBAIC03MTAsOCArNjgzLDcgQEAKIAlpZiAoZXJyKQogCQllcnIgPSAtRUlOVkFMOwogCi1vdXQ6Ci0JbW1jX2ZyZWVfZXh0X2NzZChid19leHRfY3NkKTsKKwlrZnJlZShid19leHRfY3NkKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MjIsNyArNjk0LDcgQEAKIE1NQ19ERVZfQVRUUihkYXRlLCAiJTAyZC8lMDRkXG4iLCBjYXJkLT5jaWQubW9udGgsIGNhcmQtPmNpZC55ZWFyKTsKIE1NQ19ERVZfQVRUUihlcmFzZV9zaXplLCAiJXVcbiIsIGNhcmQtPmVyYXNlX3NpemUgPDwgOSk7CiBNTUNfREVWX0FUVFIocHJlZmVycmVkX2VyYXNlX3NpemUsICIldVxuIiwgY2FyZC0+cHJlZl9lcmFzZSA8PCA5KTsKLU1NQ19ERVZfQVRUUihmd3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5md3Jldik7CitNTUNfREVWX0FUVFIoZmZ1X2NhcGFibGUsICIlZFxuIiwgY2FyZC0+ZXh0X2NzZC5mZnVfY2FwYWJsZSk7CiBNTUNfREVWX0FUVFIoaHdyZXYsICIweCV4XG4iLCBjYXJkLT5jaWQuaHdyZXYpOwogTU1DX0RFVl9BVFRSKG1hbmZpZCwgIjB4JTA2eFxuIiwgY2FyZC0+Y2lkLm1hbmZpZCk7CiBNTUNfREVWX0FUVFIobmFtZSwgIiVzXG4iLCBjYXJkLT5jaWQucHJvZF9uYW1lKTsKQEAgLTczNSw2ICs3MDcsMjIgQEAKIE1NQ19ERVZfQVRUUihyYXdfcnBtYl9zaXplX211bHQsICIlI3hcbiIsIGNhcmQtPmV4dF9jc2QucmF3X3JwbWJfc2l6ZV9tdWx0KTsKIE1NQ19ERVZfQVRUUihyZWxfc2VjdG9ycywgIiUjeFxuIiwgY2FyZC0+ZXh0X2NzZC5yZWxfc2VjdG9ycyk7CiAKK3N0YXRpYyBzc2l6ZV90IG1tY19md3Jldl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tY19kZXZfdG9fY2FyZChkZXYpOworCisJaWYgKGNhcmQtPmV4dF9jc2QucmV2IDwgNykgeworCQlyZXR1cm4gc3ByaW50ZihidWYsICIweCV4XG4iLCBjYXJkLT5jaWQuZndyZXYpOworCX0gZWxzZSB7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JSpwaE5cbiIsIE1NQ19GSVJNV0FSRV9MRU4sCisJCQkgICAgICAgY2FyZC0+ZXh0X2NzZC5md3Jldik7CisJfQorfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZndyZXYsIFNfSVJVR08sIG1tY19md3Jldl9zaG93LCBOVUxMKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1tY19zdGRfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfY2lkLmF0dHIsCiAJJmRldl9hdHRyX2NzZC5hdHRyLApAQCAtNzQyLDYgKzczMCw3IEBACiAJJmRldl9hdHRyX2VyYXNlX3NpemUuYXR0ciwKIAkmZGV2X2F0dHJfcHJlZmVycmVkX2VyYXNlX3NpemUuYXR0ciwKIAkmZGV2X2F0dHJfZndyZXYuYXR0ciwKKwkmZGV2X2F0dHJfZmZ1X2NhcGFibGUuYXR0ciwKIAkmZGV2X2F0dHJfaHdyZXYuYXR0ciwKIAkmZGV2X2F0dHJfbWFuZmlkLmF0dHIsCiAJJmRldl9hdHRyX25hbWUuYXR0ciwKQEAgLTc3NCwxNCArNzYzLDYgQEAKIAl1bnNpZ25lZCBpbnQgcHdyY2xhc3NfdmFsID0gMDsKIAlpbnQgZXJyID0gMDsKIAotCS8qIFBvd2VyIGNsYXNzIHNlbGVjdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIHZlcnNpb25zID49IDQuMCAqLwotCWlmIChjYXJkLT5jc2QubW1jYV92c24gPCBDU0RfU1BFQ19WRVJfNCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBQb3dlciBjbGFzcyB2YWx1ZXMgYXJlIGRlZmluZWQgb25seSBmb3IgNC84IGJpdCBidXMgKi8KLQlpZiAoYnVzX3dpZHRoID09IEVYVF9DU0RfQlVTX1dJRFRIXzEpCi0JCXJldHVybiAwOwotCiAJc3dpdGNoICgxIDw8IGhvc3QtPmlvcy52ZGQpIHsKIAljYXNlIE1NQ19WRERfMTY1XzE5NToKIAkJaWYgKGhvc3QtPmlvcy5jbG9jayA8PSBNTUNfSElHSF8yNl9NQVhfRFRSKQpAQCAtODQ0LDcgKzgyNSw3IEBACiAJaW50IGVyciwgZGRyOwogCiAJLyogUG93ZXIgY2xhc3Mgc2VsZWN0aW9uIGlzIHN1cHBvcnRlZCBmb3IgdmVyc2lvbnMgPj0gNC4wICovCi0JaWYgKGNhcmQtPmNzZC5tbWNhX3ZzbiA8IENTRF9TUEVDX1ZFUl80KQorCWlmICghbW1jX2Nhbl9leHRfY3NkKGNhcmQpKQogCQlyZXR1cm4gMDsKIAogCWJ1c193aWR0aCA9IGhvc3QtPmlvcy5idXNfd2lkdGg7CkBAIC05MDUsNyArODg2LDcgQEAKIAl1bnNpZ25lZCBpZHgsIGJ1c193aWR0aCA9IDA7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoKGNhcmQtPmNzZC5tbWNhX3ZzbiA8IENTRF9TUEVDX1ZFUl80KSAmJgorCWlmICghbW1jX2Nhbl9leHRfY3NkKGNhcmQpICYmCiAJICAgICEoaG9zdC0+Y2FwcyAmIChNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQXzhfQklUX0RBVEEpKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTk5OCw3ICs5NzksNyBAQAogCQkJZXh0X2NzZF9iaXRzLAogCQkJY2FyZC0+ZXh0X2NzZC5nZW5lcmljX2NtZDZfdGltZSk7CiAJaWYgKGVycikgewotCQlwcl93YXJuKCIlczogc3dpdGNoIHRvIGJ1cyB3aWR0aCAlZCBkZHIgZmFpbGVkXG4iLAorCQlwcl9lcnIoIiVzOiBzd2l0Y2ggdG8gYnVzIHdpZHRoICVkIGRkciBmYWlsZWRcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdCksIDEgPDwgYnVzX3dpZHRoKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMDY5LDcgKzEwNTAsNyBAQAogCQkJICAgY2FyZC0+ZXh0X2NzZC5nZW5lcmljX2NtZDZfdGltZSwKIAkJCSAgIHRydWUsIHRydWUsIHRydWUpOwogCWlmIChlcnIpIHsKLQkJcHJfd2FybigiJXM6IHN3aXRjaCB0byBoaWdoLXNwZWVkIGZyb20gaHMyMDAgZmFpbGVkLCBlcnI6JWRcbiIsCisJCXByX2VycigiJXM6IHN3aXRjaCB0byBoaWdoLXNwZWVkIGZyb20gaHMyMDAgZmFpbGVkLCBlcnI6JWRcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdCksIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTA3OSw3ICsxMDYwLDcgQEAKIAkJCSBFWFRfQ1NEX0REUl9CVVNfV0lEVEhfOCwKIAkJCSBjYXJkLT5leHRfY3NkLmdlbmVyaWNfY21kNl90aW1lKTsKIAlpZiAoZXJyKSB7Ci0JCXByX3dhcm4oIiVzOiBzd2l0Y2ggdG8gYnVzIHdpZHRoIGZvciBoczQwMCBmYWlsZWQsIGVycjolZFxuIiwKKwkJcHJfZXJyKCIlczogc3dpdGNoIHRvIGJ1cyB3aWR0aCBmb3IgaHM0MDAgZmFpbGVkLCBlcnI6JWRcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdCksIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTA4OSw3ICsxMDcwLDcgQEAKIAkJCSAgIGNhcmQtPmV4dF9jc2QuZ2VuZXJpY19jbWQ2X3RpbWUsCiAJCQkgICB0cnVlLCB0cnVlLCB0cnVlKTsKIAlpZiAoZXJyKSB7Ci0JCXByX3dhcm4oIiVzOiBzd2l0Y2ggdG8gaHM0MDAgZmFpbGVkLCBlcnI6JWRcbiIsCisJCXByX2VycigiJXM6IHN3aXRjaCB0byBoczQwMCBmYWlsZWQsIGVycjolZFxuIiwKIAkJCSBtbWNfaG9zdG5hbWUoaG9zdCksIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTE0Niw4ICsxMTI3LDcgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCWlmICgoY2FyZC0+Y3NkLm1tY2FfdnNuIDwgQ1NEX1NQRUNfVkVSXzQgJiYKLQkgICAgIGNhcmQtPmV4dF9jc2QuaHNfbWF4X2R0ciA9PSAwKSkKKwlpZiAoIW1tY19jYW5fZXh0X2NzZChjYXJkKSkKIAkJZ290byBidXNfc3BlZWQ7CiAKIAlpZiAoY2FyZC0+bW1jX2F2YWlsX3R5cGUgJiBFWFRfQ1NEX0NBUkRfVFlQRV9IUzIwMCkKQEAgLTEyMzIsNyArMTIxMiw3IEBACiAJCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogCiAJCWlmIChlcnIpCi0JCQlwcl93YXJuKCIlczogdHVuaW5nIGV4ZWN1dGlvbiBmYWlsZWRcbiIsCisJCQlwcl9lcnIoIiVzOiB0dW5pbmcgZXhlY3V0aW9uIGZhaWxlZFxuIiwKIAkJCQltbWNfaG9zdG5hbWUoaG9zdCkpOwogCX0KIApAQCAtMTI1Miw3ICsxMjMyLDYgQEAKIAlpbnQgZXJyOwogCXUzMiBjaWRbNF07CiAJdTMyIHJvY3I7Ci0JdTggKmV4dF9jc2QgPSBOVUxMOwogCiAJQlVHX09OKCFob3N0KTsKIAlXQVJOX09OKCFob3N0LT5jbGFpbWVkKTsKQEAgLTEzNjEsMTQgKzEzNDAsOCBAQAogCX0KIAogCWlmICghb2xkY2FyZCkgewotCQkvKgotCQkgKiBGZXRjaCBhbmQgcHJvY2VzcyBleHRlbmRlZCBDU0QuCi0JCSAqLwotCi0JCWVyciA9IG1tY19nZXRfZXh0X2NzZChjYXJkLCAmZXh0X2NzZCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGZyZWVfY2FyZDsKLQkJZXJyID0gbW1jX3JlYWRfZXh0X2NzZChjYXJkLCBleHRfY3NkKTsKKwkJLyogUmVhZCBleHRlbmRlZCBDU0QuICovCisJCWVyciA9IG1tY19yZWFkX2V4dF9jc2QoY2FyZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGZyZWVfY2FyZDsKIApAQCAtMTQ1OCwxOCArMTQzMSwxOCBAQAogCWlmIChtbWNfY2FyZF9oczIwMChjYXJkKSkgewogCQllcnIgPSBtbWNfaHMyMDBfdHVuaW5nKGNhcmQpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGZyZWVfY2FyZDsKIAogCQllcnIgPSBtbWNfc2VsZWN0X2hzNDAwKGNhcmQpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGZyZWVfY2FyZDsKIAl9IGVsc2UgaWYgKG1tY19jYXJkX2hzKGNhcmQpKSB7CiAJCS8qIFNlbGVjdCB0aGUgZGVzaXJlZCBidXMgd2lkdGggb3B0aW9uYWxseSAqLwogCQllcnIgPSBtbWNfc2VsZWN0X2J1c193aWR0aChjYXJkKTsKIAkJaWYgKCFJU19FUlJfVkFMVUUoZXJyKSkgewogCQkJZXJyID0gbW1jX3NlbGVjdF9oc19kZHIoY2FyZCk7CiAJCQlpZiAoZXJyKQotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZnJlZV9jYXJkOwogCQl9CiAJfQogCkBAIC0xNTQ1LDE1ICsxNTE4LDEyIEBACiAJaWYgKCFvbGRjYXJkKQogCQlob3N0LT5jYXJkID0gY2FyZDsKIAotCW1tY19mcmVlX2V4dF9jc2QoZXh0X2NzZCk7CiAJcmV0dXJuIDA7CiAKIGZyZWVfY2FyZDoKIAlpZiAoIW9sZGNhcmQpCiAJCW1tY19yZW1vdmVfY2FyZChjYXJkKTsKIGVycjoKLQltbWNfZnJlZV9leHRfY3NkKGV4dF9jc2QpOwotCiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYwppbmRleCA3OTExZTA1Li4zYjA0NGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYwpAQCAtMjY0LDIwICsyNjQsNiBAQAogCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQgPSB7MH07CiAJc3RydWN0IG1tY19kYXRhIGRhdGEgPSB7MH07CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwotCXZvaWQgKmRhdGFfYnVmOwotCWludCBpc19vbl9zdGFjazsKLQotCWlzX29uX3N0YWNrID0gb2JqZWN0X2lzX29uX3N0YWNrKGJ1Zik7Ci0JaWYgKGlzX29uX3N0YWNrKSB7Ci0JCS8qCi0JCSAqIGRtYSBvbnRvIHN0YWNrIGlzIHVuc2FmZS9ub25wb3J0YWJsZSwgYnV0IGNhbGxlcnMgdG8gdGhpcwotCQkgKiByb3V0aW5lIG5vcm1hbGx5IHByb3ZpZGUgdGVtcG9yYXJ5IG9uLXN0YWNrIGJ1ZmZlcnMgLi4uCi0JCSAqLwotCQlkYXRhX2J1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFkYXRhX2J1ZikKLQkJCXJldHVybiAtRU5PTUVNOwotCX0gZWxzZQotCQlkYXRhX2J1ZiA9IGJ1ZjsKIAogCW1ycS5jbWQgPSAmY21kOwogCW1ycS5kYXRhID0gJmRhdGE7CkBAIC0yOTgsNyArMjg0LDcgQEAKIAlkYXRhLnNnID0gJnNnOwogCWRhdGEuc2dfbGVuID0gMTsKIAotCXNnX2luaXRfb25lKCZzZywgZGF0YV9idWYsIGxlbik7CisJc2dfaW5pdF9vbmUoJnNnLCBidWYsIGxlbik7CiAKIAlpZiAob3Bjb2RlID09IE1NQ19TRU5EX0NTRCB8fCBvcGNvZGUgPT0gTU1DX1NFTkRfQ0lEKSB7CiAJCS8qCkBAIC0zMTIsMTEgKzI5OCw2IEBACiAKIAltbWNfd2FpdF9mb3JfcmVxKGhvc3QsICZtcnEpOwogCi0JaWYgKGlzX29uX3N0YWNrKSB7Ci0JCW1lbWNweShidWYsIGRhdGFfYnVmLCBsZW4pOwotCQlrZnJlZShkYXRhX2J1Zik7Ci0JfQotCiAJaWYgKGNtZC5lcnJvcikKIAkJcmV0dXJuIGNtZC5lcnJvcjsKIAlpZiAoZGF0YS5lcnJvcikKQEAgLTMzNCw3ICszMTUsNyBAQAogCQlyZXR1cm4gbW1jX3NlbmRfY3hkX25hdGl2ZShjYXJkLT5ob3N0LCBjYXJkLT5yY2EgPDwgMTYsCiAJCQkJY3NkLCBNTUNfU0VORF9DU0QpOwogCi0JY3NkX3RtcCA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOworCWNzZF90bXAgPSBremFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNzZF90bXApCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zNjIsNyArMzQzLDcgQEAKIAkJCQljaWQsIE1NQ19TRU5EX0NJRCk7CiAJfQogCi0JY2lkX3RtcCA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOworCWNpZF90bXAgPSBremFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNpZF90bXApCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zNzgsMTIgKzM1OSwzNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBtbWNfc2VuZF9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKmV4dF9jc2QpCitpbnQgbW1jX2dldF9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKipuZXdfZXh0X2NzZCkKIHsKLQlyZXR1cm4gbW1jX3NlbmRfY3hkX2RhdGEoY2FyZCwgY2FyZC0+aG9zdCwgTU1DX1NFTkRfRVhUX0NTRCwKLQkJCWV4dF9jc2QsIDUxMik7CisJaW50IGVycjsKKwl1OCAqZXh0X2NzZDsKKworCWlmICghY2FyZCB8fCAhbmV3X2V4dF9jc2QpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFtbWNfY2FuX2V4dF9jc2QoY2FyZCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qCisJICogQXMgdGhlIGV4dF9jc2QgaXMgc28gbGFyZ2UgYW5kIG1vc3RseSB1bnVzZWQsIHdlIGRvbid0IHN0b3JlIHRoZQorCSAqIHJhdyBibG9jayBpbiBtbWNfY2FyZC4KKwkgKi8KKwlleHRfY3NkID0ga3phbGxvYyg1MTIsIEdGUF9LRVJORUwpOworCWlmICghZXh0X2NzZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBtbWNfc2VuZF9jeGRfZGF0YShjYXJkLCBjYXJkLT5ob3N0LCBNTUNfU0VORF9FWFRfQ1NELCBleHRfY3NkLAorCQkJCTUxMik7CisJaWYgKGVycikKKwkJa2ZyZWUoZXh0X2NzZCk7CisJZWxzZQorCQkqbmV3X2V4dF9jc2QgPSBleHRfY3NkOworCisJcmV0dXJuIGVycjsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKG1tY19zZW5kX2V4dF9jc2QpOworRVhQT1JUX1NZTUJPTF9HUEwobW1jX2dldF9leHRfY3NkKTsKIAogaW50IG1tY19zcGlfcmVhZF9vY3Ioc3RydWN0IG1tY19ob3N0ICpob3N0LCBpbnQgaGlnaGNhcCwgdTMyICpvY3JwKQogewpAQCAtNTQzLDYgKzU0Nyw3NSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobW1jX3N3aXRjaCk7CiAKK2ludCBtbWNfc2VuZF90dW5pbmcoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfcmVxdWVzdCBtcnEgPSB7TlVMTH07CisJc3RydWN0IG1tY19jb21tYW5kIGNtZCA9IHswfTsKKwlzdHJ1Y3QgbW1jX2RhdGEgZGF0YSA9IHswfTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJc3RydWN0IG1tY19pb3MgKmlvcyA9ICZob3N0LT5pb3M7CisJY29uc3QgdTggKnR1bmluZ19ibG9ja19wYXR0ZXJuOworCWludCBzaXplLCBlcnIgPSAwOworCXU4ICpkYXRhX2J1ZjsKKwl1MzIgb3Bjb2RlOworCisJaWYgKGlvcy0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfOCkgeworCQl0dW5pbmdfYmxvY2tfcGF0dGVybiA9IHR1bmluZ19ibGtfcGF0dGVybl84Yml0OworCQlzaXplID0gc2l6ZW9mKHR1bmluZ19ibGtfcGF0dGVybl84Yml0KTsKKwkJb3Bjb2RlID0gTU1DX1NFTkRfVFVOSU5HX0JMT0NLX0hTMjAwOworCX0gZWxzZSBpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KSB7CisJCXR1bmluZ19ibG9ja19wYXR0ZXJuID0gdHVuaW5nX2Jsa19wYXR0ZXJuXzRiaXQ7CisJCXNpemUgPSBzaXplb2YodHVuaW5nX2Jsa19wYXR0ZXJuXzRiaXQpOworCQlvcGNvZGUgPSBNTUNfU0VORF9UVU5JTkdfQkxPQ0s7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YV9idWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YV9idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJbXJxLmNtZCA9ICZjbWQ7CisJbXJxLmRhdGEgPSAmZGF0YTsKKworCWNtZC5vcGNvZGUgPSBvcGNvZGU7CisJY21kLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQURUQzsKKworCWRhdGEuYmxrc3ogPSBzaXplOworCWRhdGEuYmxvY2tzID0gMTsKKwlkYXRhLmZsYWdzID0gTU1DX0RBVEFfUkVBRDsKKworCS8qCisJICogQWNjb3JkaW5nIHRvIHRoZSB0dW5pbmcgc3BlY3MsIFR1bmluZyBwcm9jZXNzCisJICogaXMgbm9ybWFsbHkgc2hvcnRlciA0MCBleGVjdXRpb25zIG9mIENNRDE5LAorCSAqIGFuZCB0aW1lb3V0IHZhbHVlIHNob3VsZCBiZSBzaG9ydGVyIHRoYW4gMTUwIG1zCisJICovCisJZGF0YS50aW1lb3V0X25zID0gMTUwICogTlNFQ19QRVJfTVNFQzsKKworCWRhdGEuc2cgPSAmc2c7CisJZGF0YS5zZ19sZW4gPSAxOworCXNnX2luaXRfb25lKCZzZywgZGF0YV9idWYsIHNpemUpOworCisJbW1jX3dhaXRfZm9yX3JlcShob3N0LCAmbXJxKTsKKworCWlmIChjbWQuZXJyb3IpIHsKKwkJZXJyID0gY21kLmVycm9yOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGF0YS5lcnJvcikgeworCQllcnIgPSBkYXRhLmVycm9yOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobWVtY21wKGRhdGFfYnVmLCB0dW5pbmdfYmxvY2tfcGF0dGVybiwgc2l6ZSkpCisJCWVyciA9IC1FSU87CisKK291dDoKKwlrZnJlZShkYXRhX2J1Zik7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1tY19zZW5kX3R1bmluZyk7CisKIHN0YXRpYyBpbnQKIG1tY19zZW5kX2J1c190ZXN0KHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgc3RydWN0IG1tY19ob3N0ICpob3N0LCB1OCBvcGNvZGUsCiAJCSAgdTggbGVuKQpAQCAtNjc1LDMgKzc0OCw4IEBACiAKIAlyZXR1cm4gMDsKIH0KKworaW50IG1tY19jYW5fZXh0X2NzZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCit7CisJcmV0dXJuIChjYXJkICYmIGNhcmQtPmNzZC5tbWNhX3ZzbiA+IENTRF9TUEVDX1ZFUl8zKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5oIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmgKaW5kZXggMzkwZGFjNi4uNmY0YjAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmgKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmgKQEAgLTIwLDEzICsyMCwxMyBAQAogaW50IG1tY19hbGxfc2VuZF9jaWQoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgKmNpZCk7CiBpbnQgbW1jX3NldF9yZWxhdGl2ZV9hZGRyKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CiBpbnQgbW1jX3NlbmRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTMyICpjc2QpOwotaW50IG1tY19zZW5kX2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCAqZXh0X2NzZCk7CiBpbnQgbW1jX3NlbmRfc3RhdHVzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTMyICpzdGF0dXMpOwogaW50IG1tY19zZW5kX2NpZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiAqY2lkKTsKIGludCBtbWNfc3BpX3JlYWRfb2NyKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IGhpZ2hjYXAsIHUzMiAqb2NycCk7CiBpbnQgbW1jX3NwaV9zZXRfY3JjKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IHVzZV9jcmMpOwogaW50IG1tY19idXNfdGVzdChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHU4IGJ1c193aWR0aCk7CiBpbnQgbW1jX3NlbmRfaHBpX2NtZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHUzMiAqc3RhdHVzKTsKK2ludCBtbWNfY2FuX2V4dF9jc2Qoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKaW5kZXggMjQzOWU3MS4uZmQwNzUwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKQEAgLTk4MCw4ICs5ODAsMTIgQEAKIAlpZiAobW1jX2NhcmRfaXNfcmVtb3ZhYmxlKGhvc3QpIHx8ICFtbWNfY2FyZF9rZWVwX3Bvd2VyKGhvc3QpKSB7CiAJCXNkaW9fcmVzZXQoaG9zdCk7CiAJCW1tY19nb19pZGxlKGhvc3QpOwotCQllcnIgPSBtbWNfc2Rpb19pbml0X2NhcmQoaG9zdCwgaG9zdC0+Y2FyZC0+b2NyLCBob3N0LT5jYXJkLAotCQkJCQltbWNfY2FyZF9rZWVwX3Bvd2VyKGhvc3QpKTsKKwkJbW1jX3NlbmRfaWZfY29uZChob3N0LCBob3N0LT5jYXJkLT5vY3IpOworCQllcnIgPSBtbWNfc2VuZF9pb19vcF9jb25kKGhvc3QsIDAsIE5VTEwpOworCQlpZiAoIWVycikKKwkJCWVyciA9IG1tY19zZGlvX2luaXRfY2FyZChob3N0LCBob3N0LT5jYXJkLT5vY3IsCisJCQkJCQkgaG9zdC0+Y2FyZCwKKwkJCQkJCSBtbWNfY2FyZF9rZWVwX3Bvd2VyKGhvc3QpKTsKIAl9IGVsc2UgaWYgKG1tY19jYXJkX2tlZXBfcG93ZXIoaG9zdCkgJiYgbW1jX2NhcmRfd2FrZV9zZGlvX2lycShob3N0KSkgewogCQkvKiBXZSBtYXkgaGF2ZSBzd2l0Y2hlZCB0byAxLWJpdCBtb2RlIGR1cmluZyBzdXNwZW5kICovCiAJCWVyciA9IHNkaW9fZW5hYmxlXzRiaXRfYnVzKGhvc3QtPmNhcmQpOwpAQCAtMTAzNSw3ICsxMDM5LDcgQEAKIAogCXNkaW9fcmVzZXQoaG9zdCk7CiAJbW1jX2dvX2lkbGUoaG9zdCk7Ci0JbW1jX3NlbmRfaWZfY29uZChob3N0LCBob3N0LT5vY3JfYXZhaWwpOworCW1tY19zZW5kX2lmX2NvbmQoaG9zdCwgaG9zdC0+Y2FyZC0+b2NyKTsKIAogCXJldCA9IG1tY19zZW5kX2lvX29wX2NvbmQoaG9zdCwgMCwgTlVMTCk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYwppbmRleCA2ZGE5N2IxLi42MDg4NTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAic2Rpb19jaXMuaCIKICNpbmNsdWRlICJzZGlvX2J1cy5oIgogCisjZGVmaW5lIHRvX3NkaW9fZHJpdmVyKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2Rpb19kcml2ZXIsIGRydikKKwogLyogc2hvdyBjb25maWd1cmF0aW9uIGZpZWxkcyAqLwogI2RlZmluZSBzZGlvX2NvbmZpZ19hdHRyKGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXApAQCAtMTk2LDggKzE5OCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19QTQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2Rpb19idXNfcG1fb3BzID0gewogCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHBtX2dlbmVyaWNfc3VzcGVuZCwgcG1fZ2VuZXJpY19yZXN1bWUpCiAJU0VUX1JVTlRJTUVfUE1fT1BTKApAQCAtMjA3LDE0ICsyMDcsNiBAQAogCSkKIH07CiAKLSNkZWZpbmUgU0RJT19QTV9PUFNfUFRSCSgmc2Rpb19idXNfcG1fb3BzKQotCi0jZWxzZSAvKiAhQ09ORklHX1BNICovCi0KLSNkZWZpbmUgU0RJT19QTV9PUFNfUFRSCU5VTEwKLQotI2VuZGlmIC8qICFDT05GSUdfUE0gKi8KLQogc3RhdGljIHN0cnVjdCBidXNfdHlwZSBzZGlvX2J1c190eXBlID0gewogCS5uYW1lCQk9ICJzZGlvIiwKIAkuZGV2X2dyb3Vwcwk9IHNkaW9fZGV2X2dyb3VwcywKQEAgLTIyMiw3ICsyMTQsNyBAQAogCS51ZXZlbnQJCT0gc2Rpb19idXNfdWV2ZW50LAogCS5wcm9iZQkJPSBzZGlvX2J1c19wcm9iZSwKIAkucmVtb3ZlCQk9IHNkaW9fYnVzX3JlbW92ZSwKLQkucG0JCT0gU0RJT19QTV9PUFNfUFRSLAorCS5wbQkJPSAmc2Rpb19idXNfcG1fb3BzLAogfTsKIAogaW50IHNkaW9fcmVnaXN0ZXJfYnVzKHZvaWQpCkBAIC0yOTUsNyArMjg3LDcgQEAKIHN0YXRpYyB2b2lkIHNkaW9fYWNwaV9zZXRfaGFuZGxlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCiB7CiAJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gZnVuYy0+Y2FyZC0+aG9zdDsKLQl1NjQgYWRkciA9IChob3N0LT5zbG90bm8gPDwgMTYpIHwgZnVuYy0+bnVtOworCXU2NCBhZGRyID0gKCh1NjQpaG9zdC0+c2xvdG5vIDw8IDE2KSB8IGZ1bmMtPm51bTsKIAogCWFjcGlfcHJlc2V0X2NvbXBhbmlvbigmZnVuYy0+ZGV2LCBBQ1BJX0NPTVBBTklPTihob3N0LT5wYXJlbnQpLCBhZGRyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCAxMzg2MDY1Li4yZDZmYmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC01ODAsNyArNTgwLDcgQEAKIGNvbmZpZyBNTUNfRFcKIAl0cmlzdGF0ZSAiU3lub3BzeXMgRGVzaWduV2FyZSBNZW1vcnkgQ2FyZCBJbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBIQVNfRE1BCi0JZGVwZW5kcyBvbiBBUkMgfHwgQVJNIHx8IE1JUFMgfHwgQ09NUElMRV9URVNUCisJZGVwZW5kcyBvbiBBUkMgfHwgQVJNIHx8IEFSTTY0IHx8IE1JUFMgfHwgQ09NUElMRV9URVNUCiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIE1vYmlsZSBTdG9yYWdlIElQCiAJICBibG9jaywgdGhpcyBwcm92aWRlcyBob3N0IHN1cHBvcnQgZm9yIFNEIGFuZCBNTUMgaW50ZXJmYWNlcywgaW4gYm90aApAQCAtNzQ4LDMgKzc0OCw4IEBACiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIHRoZSBTRC9NTUMgSG9zdCBDb250cm9sbGVyIG9uCiAJICBBbGx3aW5uZXIgc3VueGkgU29Dcy4KKworY29uZmlnIE1NQ19UT1NISUJBX1BDSQorCXRyaXN0YXRlICJUb3NoaWJhIFR5cGUgQSBTRC9NTUMgQ2FyZCBJbnRlcmZhY2UgRHJpdmVyIgorCWRlcGVuZHMgb24gUENJCisJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKaW5kZXggYjA5ZWNmYi4uZjdiMGE3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCkBAIC01NSw2ICs1NSw3IEBACiBvYmotJChDT05GSUdfTU1DX01PWEFSVCkJKz0gbW94YXJ0LW1tYy5vCiBvYmotJChDT05GSUdfTU1DX1NVTlhJKQkJKz0gc3VueGktbW1jLm8KIG9iai0kKENPTkZJR19NTUNfVVNESEk2Uk9MMCkJKz0gdXNkaGk2cm9sMC5vCitvYmotJChDT05GSUdfTU1DX1RPU0hJQkFfUENJKQkrPSB0b3Noc2QubwogCiBvYmotJChDT05GSUdfTU1DX1JFQUxURUtfUENJKQkrPSBydHN4X3BjaV9zZG1tYy5vCiBvYmotJChDT05GSUdfTU1DX1JFQUxURUtfVVNCKQkrPSBydHN4X3VzYl9zZG1tYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwppbmRleCA3NzI1MGQ0Li4wM2Q3Yzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKQEAgLTMwLDEzICszMCwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXRtZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL21tYy1hdG1lbC1tY2kuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3NkaW8uaD4KIAotI2luY2x1ZGUgPG1hY2gvYXRtZWwtbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZWwtbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZWxfcGRjLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTQ0LDYgKzQ3LDggQEAKIAogI2luY2x1ZGUgImF0bWVsLW1jaS1yZWdzLmgiCiAKKyNkZWZpbmUgQVVUT1NVU1BFTkRfREVMQVkJNTAKKwogI2RlZmluZSBBVE1DSV9EQVRBX0VSUk9SX0ZMQUdTCShBVE1DSV9EQ1JDRSB8IEFUTUNJX0RUT0UgfCBBVE1DSV9PVlJFIHwgQVRNQ0lfVU5SRSkKICNkZWZpbmUgQVRNQ0lfRE1BX1RIUkVTSE9MRAkxNgogCkBAIC0zODYsMjAgKzM5MSwxOSBAQAogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmhvc3QtPnBkZXYtPmRldik7CisKIAkvKgogCSAqIEdyYWIgYSBtb3JlIG9yIGxlc3MgY29uc2lzdGVudCBzbmFwc2hvdC4gTm90ZSB0aGF0IHdlJ3JlCiAJICogbm90IGRpc2FibGluZyBpbnRlcnJ1cHRzLCBzbyBJTVIgYW5kIFNSIG1heSBub3QgYmUKIAkgKiBjb25zaXN0ZW50LgogCSAqLwotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShob3N0LT5tY2spOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCiAJc3Bpbl9sb2NrX2JoKCZob3N0LT5sb2NrKTsKIAltZW1jcHlfZnJvbWlvKGJ1ZiwgaG9zdC0+cmVncywgQVRNQ0lfUkVHU19TSVpFKTsKIAlzcGluX3VubG9ja19iaCgmaG9zdC0+bG9jayk7CiAKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+bWNrKTsKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KCZob3N0LT5wZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKCZob3N0LT5wZGV2LT5kZXYpOwogCiAJc2VxX3ByaW50ZihzLCAiTVI6XHQweCUwOHglcyVzICIsCiAJCQlidWZbQVRNQ0lfTVIgLyA0XSwKQEAgLTQ0OSw3ICs0NTMsNiBAQAogCQkJCXZhbCAmIEFUTUNJX0NGR19MU1lOQyA/ICIgTFNZTkMiIDogIiIpOwogCX0KIAotb3V0OgogCWtmcmVlKGJ1Zik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNTYwLDYgKzU2Myw5IEBACiAJCXBkYXRhLT5zbG90W3Nsb3RfaWRdLmRldGVjdF9pc19hY3RpdmVfaGlnaCA9CiAJCQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY25wLCAiY2QtaW52ZXJ0ZWQiKTsKIAorCQlwZGF0YS0+c2xvdFtzbG90X2lkXS5ub25fcmVtb3ZhYmxlID0KKwkJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChjbnAsICJub24tcmVtb3ZhYmxlIik7CisKIAkJcGRhdGEtPnNsb3Rbc2xvdF9pZF0ud3BfcGluID0KIAkJCW9mX2dldF9uYW1lZF9ncGlvKGNucCwgIndwLWdwaW9zIiwgMCk7CiAJfQpAQCAtMTI1Miw2ICsxMjU4LDggQEAKIAlXQVJOX09OKHNsb3QtPm1ycSk7CiAJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiTVJROiBjbWQgJXVcbiIsIG1ycS0+Y21kLT5vcGNvZGUpOwogCisJcG1fcnVudGltZV9nZXRfc3luYygmaG9zdC0+cGRldi0+ZGV2KTsKKwogCS8qCiAJICogV2UgbWF5ICJrbm93IiB0aGUgY2FyZCBpcyBnb25lIGV2ZW4gdGhvdWdoIHRoZXJlJ3Mgc3RpbGwgYW4KIAkgKiBlbGVjdHJpY2FsIGNvbm5lY3Rpb24uIElmIHNvLCB3ZSByZWFsbHkgbmVlZCB0byBjb21tdW5pY2F0ZQpAQCAtMTI4MSw3ICsxMjg5LDggQEAKIAlzdHJ1Y3QgYXRtZWxfbWNpX3Nsb3QJKnNsb3QgPSBtbWNfcHJpdihtbWMpOwogCXN0cnVjdCBhdG1lbF9tY2kJKmhvc3QgPSBzbG90LT5ob3N0OwogCXVuc2lnbmVkIGludAkJaTsKLQlib29sCQkJdW5wcmVwYXJlX2NsazsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmhvc3QtPnBkZXYtPmRldik7CiAKIAlzbG90LT5zZGNfcmVnICY9IH5BVE1DSV9TRENCVVNfTUFTSzsKIAlzd2l0Y2ggKGlvcy0+YnVzX3dpZHRoKSB7CkBAIC0xMjk3LDEzICsxMzA2LDggQEAKIAkJdW5zaWduZWQgaW50IGNsb2NrX21pbiA9IH4wVTsKIAkJdTMyIGNsa2RpdjsKIAotCQljbGtfcHJlcGFyZShob3N0LT5tY2spOwotCQl1bnByZXBhcmVfY2xrID0gdHJ1ZTsKLQogCQlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOwogCQlpZiAoIWhvc3QtPm1vZGVfcmVnKSB7Ci0JCQljbGtfZW5hYmxlKGhvc3QtPm1jayk7Ci0JCQl1bnByZXBhcmVfY2xrID0gZmFsc2U7CiAJCQlhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfQ1IsIEFUTUNJX0NSX1NXUlNUKTsKIAkJCWF0bWNpX3dyaXRlbChob3N0LCBBVE1DSV9DUiwgQVRNQ0lfQ1JfTUNJRU4pOwogCQkJaWYgKGhvc3QtPmNhcHMuaGFzX2NmZ19yZWcpCkBAIC0xMzcxLDggKzEzNzUsNiBAQAogCX0gZWxzZSB7CiAJCWJvb2wgYW55X3Nsb3RfYWN0aXZlID0gZmFsc2U7CiAKLQkJdW5wcmVwYXJlX2NsayA9IGZhbHNlOwotCiAJCXNwaW5fbG9ja19iaCgmaG9zdC0+bG9jayk7CiAJCXNsb3QtPmNsb2NrID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IEFUTUNJX01BWF9OUl9TTE9UUzsgaSsrKSB7CkBAIC0xMzg1LDE3ICsxMzg3LDEyIEBACiAJCQlhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfQ1IsIEFUTUNJX0NSX01DSURJUyk7CiAJCQlpZiAoaG9zdC0+bW9kZV9yZWcpIHsKIAkJCQlhdG1jaV9yZWFkbChob3N0LCBBVE1DSV9NUik7Ci0JCQkJY2xrX2Rpc2FibGUoaG9zdC0+bWNrKTsKLQkJCQl1bnByZXBhcmVfY2xrID0gdHJ1ZTsKIAkJCX0KIAkJCWhvc3QtPm1vZGVfcmVnID0gMDsKIAkJfQogCQlzcGluX3VubG9ja19iaCgmaG9zdC0+bG9jayk7CiAJfQogCi0JaWYgKHVucHJlcGFyZV9jbGspCi0JCWNsa191bnByZXBhcmUoaG9zdC0+bWNrKTsKLQogCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CiAJY2FzZSBNTUNfUE9XRVJfT0ZGOgogCQlpZiAoIUlTX0VSUihtbWMtPnN1cHBseS52bW1jKSkKQEAgLTE0MjEsNiArMTQxOCw5IEBACiAJCSAqLwogCQlicmVhazsKIAl9CisKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KCZob3N0LT5wZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKCZob3N0LT5wZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGF0bWNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKQEAgLTE1MTIsNiArMTUxMiw5IEBACiAJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOwogCW1tY19yZXF1ZXN0X2RvbmUocHJldl9tbWMsIG1ycSk7CiAJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koJmhvc3QtPnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoJmhvc3QtPnBkZXYtPmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGF0bWNpX2NvbW1hbmRfY29tcGxldGUoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwKQEAgLTIxMzcsNyArMjE0MCw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBhdG1jaV9pbml0X3Nsb3Qoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwKK3N0YXRpYyBpbnQgYXRtY2lfaW5pdF9zbG90KHN0cnVjdCBhdG1lbF9tY2kgKmhvc3QsCiAJCXN0cnVjdCBtY2lfc2xvdF9wZGF0YSAqc2xvdF9kYXRhLCB1bnNpZ25lZCBpbnQgaWQsCiAJCXUzMiBzZGNfcmVnLCB1MzIgc2Rpb19pcnEpCiB7CkBAIC0yMjA2LDggKzIyMDksMTIgQEAKIAkJfQogCX0KIAotCWlmICghZ3Bpb19pc192YWxpZChzbG90LT5kZXRlY3RfcGluKSkKLQkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKKwlpZiAoIWdwaW9faXNfdmFsaWQoc2xvdC0+ZGV0ZWN0X3BpbikpIHsKKwkJaWYgKHNsb3RfZGF0YS0+bm9uX3JlbW92YWJsZSkKKwkJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX05PTlJFTU9WQUJMRTsKKwkJZWxzZQorCQkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKKwl9CiAKIAlpZiAoZ3Bpb19pc192YWxpZChzbG90LT53cF9waW4pKSB7CiAJCWlmIChkZXZtX2dwaW9fcmVxdWVzdCgmaG9zdC0+cGRldi0+ZGV2LCBzbG90LT53cF9waW4sCkBAIC0yMjY1LDU1ICsyMjcyLDI1IEBACiAJbW1jX2ZyZWVfaG9zdChzbG90LT5tbWMpOwogfQogCi1zdGF0aWMgYm9vbCBhdG1jaV9maWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpwZGF0YSkKK3N0YXRpYyBpbnQgYXRtY2lfY29uZmlndXJlX2RtYShzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KQogewotCXN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqc2xfcGRhdGEgPSBwZGF0YTsKLQlzdHJ1Y3QgbWNpX2RtYV9kYXRhICpzbDsKKwlob3N0LT5kbWEuY2hhbiA9IGRtYV9yZXF1ZXN0X3NsYXZlX2NoYW5uZWxfcmVhc29uKCZob3N0LT5wZGV2LT5kZXYsCisJCQkJCQkJInJ4dHgiKTsKKwlpZiAoSVNfRVJSKGhvc3QtPmRtYS5jaGFuKSkKKwkJcmV0dXJuIFBUUl9FUlIoaG9zdC0+ZG1hLmNoYW4pOwogCi0JaWYgKCFzbF9wZGF0YSkKLQkJcmV0dXJuIGZhbHNlOworCWRldl9pbmZvKCZob3N0LT5wZGV2LT5kZXYsICJ1c2luZyAlcyBmb3IgRE1BIHRyYW5zZmVyc1xuIiwKKwkJIGRtYV9jaGFuX25hbWUoaG9zdC0+ZG1hLmNoYW4pKTsKIAotCXNsID0gc2xfcGRhdGEtPmRtYV9zbGF2ZTsKLQlpZiAoc2wgJiYgZmluZF9zbGF2ZV9kZXYoc2wpID09IGNoYW4tPmRldmljZS0+ZGV2KSB7Ci0JCWNoYW4tPnByaXZhdGUgPSBzbGF2ZV9kYXRhX3B0cihzbCk7Ci0JCXJldHVybiB0cnVlOwotCX0gZWxzZSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19CisJaG9zdC0+ZG1hX2NvbmYuc3JjX2FkZHIgPSBob3N0LT5tYXBiYXNlICsgQVRNQ0lfUkRSOworCWhvc3QtPmRtYV9jb25mLnNyY19hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7CisJaG9zdC0+ZG1hX2NvbmYuc3JjX21heGJ1cnN0ID0gMTsKKwlob3N0LT5kbWFfY29uZi5kc3RfYWRkciA9IGhvc3QtPm1hcGJhc2UgKyBBVE1DSV9URFI7CisJaG9zdC0+ZG1hX2NvbmYuZHN0X2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKKwlob3N0LT5kbWFfY29uZi5kc3RfbWF4YnVyc3QgPSAxOworCWhvc3QtPmRtYV9jb25mLmRldmljZV9mYyA9IGZhbHNlOwogCi1zdGF0aWMgYm9vbCBhdG1jaV9jb25maWd1cmVfZG1hKHN0cnVjdCBhdG1lbF9tY2kgKmhvc3QpCi17Ci0Jc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKLQlkbWFfY2FwX21hc2tfdCBtYXNrOwotCi0JaWYgKGhvc3QgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcGRhdGEgPSBob3N0LT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQotCWRtYV9jYXBfemVybyhtYXNrKTsKLQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOwotCi0JaG9zdC0+ZG1hLmNoYW4gPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsX2NvbXBhdChtYXNrLCBhdG1jaV9maWx0ZXIsIHBkYXRhLAotCQkJCQkJCSAgJmhvc3QtPnBkZXYtPmRldiwgInJ4dHgiKTsKLQlpZiAoIWhvc3QtPmRtYS5jaGFuKSB7Ci0JCWRldl93YXJuKCZob3N0LT5wZGV2LT5kZXYsICJubyBETUEgY2hhbm5lbCBhdmFpbGFibGVcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJZGV2X2luZm8oJmhvc3QtPnBkZXYtPmRldiwKLQkJCQkJInVzaW5nICVzIGZvciBETUEgdHJhbnNmZXJzXG4iLAotCQkJCQlkbWFfY2hhbl9uYW1lKGhvc3QtPmRtYS5jaGFuKSk7Ci0KLQkJaG9zdC0+ZG1hX2NvbmYuc3JjX2FkZHIgPSBob3N0LT5tYXBiYXNlICsgQVRNQ0lfUkRSOwotCQlob3N0LT5kbWFfY29uZi5zcmNfYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOwotCQlob3N0LT5kbWFfY29uZi5zcmNfbWF4YnVyc3QgPSAxOwotCQlob3N0LT5kbWFfY29uZi5kc3RfYWRkciA9IGhvc3QtPm1hcGJhc2UgKyBBVE1DSV9URFI7Ci0JCWhvc3QtPmRtYV9jb25mLmRzdF9hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7Ci0JCWhvc3QtPmRtYV9jb25mLmRzdF9tYXhidXJzdCA9IDE7Ci0JCWhvc3QtPmRtYV9jb25mLmRldmljZV9mYyA9IGZhbHNlOwotCQlyZXR1cm4gdHJ1ZTsKLQl9CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0yMzIxLDcgKzIyOTgsNyBAQAogICogSFNNQ0kgcHJvdmlkZXMgRE1BIHN1cHBvcnQgYW5kIGEgbmV3IGNvbmZpZyByZWdpc3RlciBidXQgbm8gbW9yZSBzdXBwb3J0cwogICogUERDLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgYXRtY2lfZ2V0X2NhcChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KQorc3RhdGljIHZvaWQgYXRtY2lfZ2V0X2NhcChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KQogewogCXVuc2lnbmVkIGludCB2ZXJzaW9uOwogCkBAIC0yMzcwLDcgKzIzNDcsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgYXRtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgYXRtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEJKnBkYXRhOwogCXN0cnVjdCBhdG1lbF9tY2kJCSpob3N0OwpAQCAtMjQxNywxOSArMjM5NCwyMyBAQAogCiAJYXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0NSLCBBVE1DSV9DUl9TV1JTVCk7CiAJaG9zdC0+YnVzX2h6ID0gY2xrX2dldF9yYXRlKGhvc3QtPm1jayk7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPm1jayk7CiAKIAlob3N0LT5tYXBiYXNlID0gcmVncy0+c3RhcnQ7CiAKIAl0YXNrbGV0X2luaXQoJmhvc3QtPnRhc2tsZXQsIGF0bWNpX3Rhc2tsZXRfZnVuYywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0bWNpX2ludGVycnVwdCwgMCwgZGV2X25hbWUoJnBkZXYtPmRldiksIGhvc3QpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+bWNrKTsKIAkJcmV0dXJuIHJldDsKKwl9CiAKIAkvKiBHZXQgTUNJIGNhcGFiaWxpdGllcyBhbmQgc2V0IG9wZXJhdGlvbnMgYWNjb3JkaW5nIHRvIGl0ICovCiAJYXRtY2lfZ2V0X2NhcChob3N0KTsKLQlpZiAoYXRtY2lfY29uZmlndXJlX2RtYShob3N0KSkgeworCXJldCA9IGF0bWNpX2NvbmZpZ3VyZV9kbWEoaG9zdCk7CisJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKQorCQlnb3RvIGVycl9kbWFfcHJvYmVfZGVmZXI7CisJaWYgKHJldCA9PSAwKSB7CiAJCWhvc3QtPnByZXBhcmVfZGF0YSA9ICZhdG1jaV9wcmVwYXJlX2RhdGFfZG1hOwogCQlob3N0LT5zdWJtaXRfZGF0YSA9ICZhdG1jaV9zdWJtaXRfZGF0YV9kbWE7CiAJCWhvc3QtPnN0b3BfdHJhbnNmZXIgPSAmYXRtY2lfc3RvcF90cmFuc2Zlcl9kbWE7CkBAIC0yNDQ5LDYgKzI0MzAsMTIgQEAKIAogCXNldHVwX3RpbWVyKCZob3N0LT50aW1lciwgYXRtY2lfdGltZW91dF90aW1lciwgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CiAKKwlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnBkZXYtPmRldiwgQVVUT1NVU1BFTkRfREVMQVkpOworCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCiAJLyogV2UgbmVlZCBhdCBsZWFzdCBvbmUgc2xvdCB0byBzdWNjZWVkICovCiAJbnJfc2xvdHMgPSAwOwogCXJldCA9IC1FTk9ERVY7CkBAIC0yNDkxLDYgKzI0NzgsOSBAQAogCQkJIkF0bWVsIE1DSSBjb250cm9sbGVyIGF0IDB4JTA4bHggaXJxICVkLCAldSBzbG90c1xuIiwKIAkJCWhvc3QtPm1hcGJhc2UsIGlycSwgbnJfc2xvdHMpOwogCisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeSgmaG9zdC0+cGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZCgmcGRldi0+ZGV2KTsKKwogCXJldHVybiAwOwogCiBlcnJfZG1hX2FsbG9jOgpAQCAtMjQ5OSwxOCArMjQ4OSwyNiBAQAogCQkJYXRtY2lfY2xlYW51cF9zbG90KGhvc3QtPnNsb3RbaV0sIGkpOwogCX0KIGVycl9pbml0X3Nsb3Q6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPm1jayk7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOworCiAJZGVsX3RpbWVyX3N5bmMoJmhvc3QtPnRpbWVyKTsKLQlpZiAoaG9zdC0+ZG1hLmNoYW4pCisJaWYgKCFJU19FUlIoaG9zdC0+ZG1hLmNoYW4pKQogCQlkbWFfcmVsZWFzZV9jaGFubmVsKGhvc3QtPmRtYS5jaGFuKTsKK2Vycl9kbWFfcHJvYmVfZGVmZXI6CiAJZnJlZV9pcnEoaXJxLCBob3N0KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBhdG1jaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgYXRtY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGF0bWVsX21jaQkqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXVuc2lnbmVkIGludAkJaTsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CisKIAlpZiAoaG9zdC0+YnVmZmVyKQogCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBob3N0LT5idWZfc2l6ZSwKIAkJICAgICAgICAgICAgICAgICAgaG9zdC0+YnVmZmVyLCBob3N0LT5idWZfcGh5c19hZGRyKTsKQEAgLTI1MjAsNDEgKzI1MTgsNjIgQEAKIAkJCWF0bWNpX2NsZWFudXBfc2xvdChob3N0LT5zbG90W2ldLCBpKTsKIAl9CiAKLQljbGtfcHJlcGFyZV9lbmFibGUoaG9zdC0+bWNrKTsKIAlhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfSURSLCB+MFVMKTsKIAlhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfQ1IsIEFUTUNJX0NSX01DSURJUyk7CiAJYXRtY2lfcmVhZGwoaG9zdCwgQVRNQ0lfU1IpOwotCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5tY2spOwogCiAJZGVsX3RpbWVyX3N5bmMoJmhvc3QtPnRpbWVyKTsKLQlpZiAoaG9zdC0+ZG1hLmNoYW4pCisJaWYgKCFJU19FUlIoaG9zdC0+ZG1hLmNoYW4pKQogCQlkbWFfcmVsZWFzZV9jaGFubmVsKGhvc3QtPmRtYS5jaGFuKTsKIAogCWZyZWVfaXJxKHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIGhvc3QpOwogCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPm1jayk7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYXRtY2lfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXRtZWxfbWNpICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+bWNrKTsKKworCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1jaV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF0bWVsX21jaSAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcGluY3RybF9wbV9zZWxlY3RfZGVmYXVsdF9zdGF0ZShkZXYpOworCisJcmV0dXJuIGNsa19wcmVwYXJlX2VuYWJsZShob3N0LT5tY2spOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBhdG1jaV9kZXZfcG1fb3BzID0geworCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZCwKKwkJCQlwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSkKKwlTRVRfUlVOVElNRV9QTV9PUFMoYXRtY2lfcnVudGltZV9zdXNwZW5kLCBhdG1jaV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWNpX2RyaXZlciA9IHsKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKGF0bWNpX3JlbW92ZSksCisJLnByb2JlCQk9IGF0bWNpX3Byb2JlLAorCS5yZW1vdmUJCT0gYXRtY2lfcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAiYXRtZWxfbWNpIiwKIAkJLm9mX21hdGNoX3RhYmxlCT0gb2ZfbWF0Y2hfcHRyKGF0bWNpX2R0X2lkcyksCisJCS5wbQkJPSAmYXRtY2lfZGV2X3BtX29wcywKIAl9LAogfTsKLQotc3RhdGljIGludCBfX2luaXQgYXRtY2lfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0bWNpX2RyaXZlciwgYXRtY2lfcHJvYmUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXRtY2lfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1jaV9kcml2ZXIpOwotfQotCi1sYXRlX2luaXRjYWxsKGF0bWNpX2luaXQpOyAvKiB0cnkgdG8gbG9hZCBhZnRlciBkbWEgZHJpdmVyIHdoZW4gYnVpbHQtaW4gKi8KLW1vZHVsZV9leGl0KGF0bWNpX2V4aXQpOworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhdG1jaV9kcml2ZXIpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkF0bWVsIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gKEF0bWVsKSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtZXh5bm9zLmMgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1leHlub3MuYwppbmRleCAwZmJjNTNhLi41MDkzNjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1leHlub3MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1leHlub3MuYwpAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBOVU1fUElOUyh4KQkJCSh4ICsgMikKIAogI2RlZmluZSBTRE1NQ19DTEtTRUwJCQkweDA5QworI2RlZmluZSBTRE1NQ19DTEtTRUw2NAkJCTB4MEE4CiAjZGVmaW5lIFNETU1DX0NMS1NFTF9DQ0xLX1NBTVBMRSh4KQkoKCh4KSAmIDcpIDw8IDApCiAjZGVmaW5lIFNETU1DX0NMS1NFTF9DQ0xLX0RSSVZFKHgpCSgoKHgpICYgNykgPDwgMTYpCiAjZGVmaW5lIFNETU1DX0NMS1NFTF9DQ0xLX0RJVklERVIoeCkJKCgoeCkgJiA3KSA8PCAyNCkKQEAgLTY1LDYgKzY2LDggQEAKIAlEV19NQ0lfVFlQRV9FWFlOT1M1MjUwLAogCURXX01DSV9UWVBFX0VYWU5PUzU0MjAsCiAJRFdfTUNJX1RZUEVfRVhZTk9TNTQyMF9TTVUsCisJRFdfTUNJX1RZUEVfRVhZTk9TNywKKwlEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSwKIH07CiAKIC8qIEV4eW5vcyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBkcml2ZXIgcHJpdmF0ZSBkYXRhICovCkBAIC05NSw2ICs5OCwxMiBAQAogCX0sIHsKIAkJLmNvbXBhdGlibGUJPSAic2Ftc3VuZyxleHlub3M1NDIwLWR3LW1zaGMtc211IiwKIAkJLmN0cmxfdHlwZQk9IERXX01DSV9UWVBFX0VYWU5PUzU0MjBfU01VLAorCX0sIHsKKwkJLmNvbXBhdGlibGUJPSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMiLAorCQkuY3RybF90eXBlCT0gRFdfTUNJX1RZUEVfRVhZTk9TNywKKwl9LCB7CisJCS5jb21wYXRpYmxlCT0gInNhbXN1bmcsZXh5bm9zNy1kdy1tc2hjLXNtdSIsCisJCS5jdHJsX3R5cGUJPSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSwKIAl9LAogfTsKIApAQCAtMTAyLDcgKzExMSw4IEBACiB7CiAJc3RydWN0IGR3X21jaV9leHlub3NfcHJpdl9kYXRhICpwcml2ID0gaG9zdC0+cHJpdjsKIAotCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNTQyMF9TTVUpIHsKKwlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzU0MjBfU01VIHx8CisJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkgewogCQltY2lfd3JpdGVsKGhvc3QsIE1QU0JFR0lOMCwgMCk7CiAJCW1jaV93cml0ZWwoaG9zdCwgTVBTRU5EMCwgRFdNQ0lfQkxPQ0tfTlVNKTsKIAkJbWNpX3dyaXRlbChob3N0LCBNUFNDVFJMMCwgRFdNQ0lfTVBTQ1RSTF9TRUNVUkVfV1JJVEVfQklUIHwKQEAgLTE1MywxMSArMTYzLDIyIEBACiBzdGF0aWMgaW50IGR3X21jaV9leHlub3NfcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGR3X21jaV9leHlub3NfcHJpdl9kYXRhICpwcml2ID0gaG9zdC0+cHJpdjsKIAl1MzIgY2xrc2VsOwogCi0JY2xrc2VsID0gbWNpX3JlYWRsKGhvc3QsIENMS1NFTCk7Ci0JaWYgKGNsa3NlbCAmIFNETU1DX0NMS1NFTF9XQUtFVVBfSU5UKQotCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgY2xrc2VsKTsKKwlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzcgfHwKKwkJcHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzdfU01VKQorCQljbGtzZWwgPSBtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMNjQpOworCWVsc2UKKwkJY2xrc2VsID0gbWNpX3JlYWRsKGhvc3QsIENMS1NFTCk7CisKKwlpZiAoY2xrc2VsICYgU0RNTUNfQ0xLU0VMX1dBS0VVUF9JTlQpIHsKKwkJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3IHx8CisJCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpCisJCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTDY0LCBjbGtzZWwpOworCQllbHNlCisJCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgY2xrc2VsKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OSw2ICsxOTAsNyBAQAogCiBzdGF0aWMgdm9pZCBkd19tY2lfZXh5bm9zX3ByZXBhcmVfY29tbWFuZChzdHJ1Y3QgZHdfbWNpICpob3N0LCB1MzIgKmNtZHIpCiB7CisJc3RydWN0IGR3X21jaV9leHlub3NfcHJpdl9kYXRhICpwcml2ID0gaG9zdC0+cHJpdjsKIAkvKgogCSAqIEV4eW5vczQ0MTIgYW5kIEV4eW5vczUyNTAgZXh0ZW5kcyB0aGUgdXNlIG9mIENNRCByZWdpc3RlciB3aXRoIHRoZQogCSAqIHVzZSBvZiBiaXQgMjkgKHdoaWNoIGlzIHJlc2VydmVkIG9uIHN0YW5kYXJkIE1TSEMgY29udHJvbGxlcnMpIGZvcgpAQCAtMTc2LDggKzE5OCwxNCBAQAogCSAqIEhPTEQgcmVnaXN0ZXIgc2hvdWxkIGJlIGJ5cGFzc2VkIGluIGNhc2UgdGhlcmUgaXMgbm8gcGhhc2Ugc2hpZnQKIAkgKiBhcHBsaWVkIG9uIENNRC9EQVRBIHRoYXQgaXMgc2VudCB0byB0aGUgY2FyZC4KIAkgKi8KLQlpZiAoU0RNTUNfQ0xLU0VMX0dFVF9EUlZfV0QzKG1jaV9yZWFkbChob3N0LCBDTEtTRUwpKSkKLQkJKmNtZHIgfD0gU0RNTUNfQ01EX1VTRV9IT0xEX1JFRzsKKwlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzcgfHwKKwkJcHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzdfU01VKSB7CisJCWlmIChTRE1NQ19DTEtTRUxfR0VUX0RSVl9XRDMobWNpX3JlYWRsKGhvc3QsIENMS1NFTDY0KSkpCisJCQkqY21kciB8PSBTRE1NQ19DTURfVVNFX0hPTERfUkVHOworCSB9IGVsc2UgeworCQlpZiAoU0RNTUNfQ0xLU0VMX0dFVF9EUlZfV0QzKG1jaV9yZWFkbChob3N0LCBDTEtTRUwpKSkKKwkJCSpjbWRyIHw9IFNETU1DX0NNRF9VU0VfSE9MRF9SRUc7CisJfQogfQogCiBzdGF0aWMgdm9pZCBkd19tY2lfZXh5bm9zX3NldF9pb3Moc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19pb3MgKmlvcykKQEAgLTE4OCwxMiArMjE2LDIwIEBACiAJdTggZGl2ID0gcHJpdi0+Y2l1X2RpdiArIDE7CiAKIAlpZiAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfRERSNTIpIHsKLQkJbWNpX3dyaXRlbChob3N0LCBDTEtTRUwsIHByaXYtPmRkcl90aW1pbmcpOworCQlpZiAocHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzcgfHwKKwkJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkKKwkJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMNjQsIHByaXYtPmRkcl90aW1pbmcpOworCQllbHNlCisJCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgcHJpdi0+ZGRyX3RpbWluZyk7CiAJCS8qIFNob3VsZCBiZSBkb3VibGUgcmF0ZSBmb3IgRERSIG1vZGUgKi8KIAkJaWYgKGlvcy0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfOCkKIAkJCXdhbnRlZCA8PD0gMTsKIAl9IGVsc2UgewotCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgcHJpdi0+c2RyX3RpbWluZyk7CisJCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQkJcHJpdi0+Y3RybF90eXBlID09IERXX01DSV9UWVBFX0VYWU5PUzdfU01VKQorCQkJbWNpX3dyaXRlbChob3N0LCBDTEtTRUw2NCwgcHJpdi0+c2RyX3RpbWluZyk7CisJCWVsc2UKKwkJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBwcml2LT5zZHJfdGltaW5nKTsKIAl9CiAKIAkvKiBEb24ndCBjYXJlIGlmIHdhbnRlZCBjbG9jayBpcyB6ZXJvICovCkBAIC0yNjUsMjYgKzMwMSw1MSBAQAogCiBzdGF0aWMgaW5saW5lIHU4IGR3X21jaV9leHlub3NfZ2V0X2Nsa3NtcGwoc3RydWN0IGR3X21jaSAqaG9zdCkKIHsKLQlyZXR1cm4gU0RNTUNfQ0xLU0VMX0NDTEtfU0FNUExFKG1jaV9yZWFkbChob3N0LCBDTEtTRUwpKTsKKwlzdHJ1Y3QgZHdfbWNpX2V4eW5vc19wcml2X2RhdGEgKnByaXYgPSBob3N0LT5wcml2OworCisJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3IHx8CisJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkKKwkJcmV0dXJuIFNETU1DX0NMS1NFTF9DQ0xLX1NBTVBMRShtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMNjQpKTsKKwllbHNlCisJCXJldHVybiBTRE1NQ19DTEtTRUxfQ0NMS19TQU1QTEUobWNpX3JlYWRsKGhvc3QsIENMS1NFTCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHdfbWNpX2V4eW5vc19zZXRfY2xrc21wbChzdHJ1Y3QgZHdfbWNpICpob3N0LCB1OCBzYW1wbGUpCiB7CiAJdTMyIGNsa3NlbDsKLQljbGtzZWwgPSBtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMKTsKKwlzdHJ1Y3QgZHdfbWNpX2V4eW5vc19wcml2X2RhdGEgKnByaXYgPSBob3N0LT5wcml2OworCisJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3IHx8CisJCXByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M3X1NNVSkKKwkJY2xrc2VsID0gbWNpX3JlYWRsKGhvc3QsIENMS1NFTDY0KTsKKwllbHNlCisJCWNsa3NlbCA9IG1jaV9yZWFkbChob3N0LCBDTEtTRUwpOwogCWNsa3NlbCA9IChjbGtzZWwgJiB+MHg3KSB8IFNETU1DX0NMS1NFTF9DQ0xLX1NBTVBMRShzYW1wbGUpOwotCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBjbGtzZWwpOworCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpCisJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMNjQsIGNsa3NlbCk7CisJZWxzZQorCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgY2xrc2VsKTsKIH0KIAogc3RhdGljIGlubGluZSB1OCBkd19tY2lfZXh5bm9zX21vdmVfbmV4dF9jbGtzbXBsKHN0cnVjdCBkd19tY2kgKmhvc3QpCiB7CisJc3RydWN0IGR3X21jaV9leHlub3NfcHJpdl9kYXRhICpwcml2ID0gaG9zdC0+cHJpdjsKIAl1MzIgY2xrc2VsOwogCXU4IHNhbXBsZTsKIAotCWNsa3NlbCA9IG1jaV9yZWFkbChob3N0LCBDTEtTRUwpOworCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpCisJCWNsa3NlbCA9IG1jaV9yZWFkbChob3N0LCBDTEtTRUw2NCk7CisJZWxzZQorCQljbGtzZWwgPSBtY2lfcmVhZGwoaG9zdCwgQ0xLU0VMKTsKIAlzYW1wbGUgPSAoY2xrc2VsICsgMSkgJiAweDc7CiAJY2xrc2VsID0gKGNsa3NlbCAmIH4weDcpIHwgc2FtcGxlOwotCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBjbGtzZWwpOworCWlmIChwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TNyB8fAorCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpCisJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMNjQsIGNsa3NlbCk7CisJZWxzZQorCQltY2lfd3JpdGVsKGhvc3QsIENMS1NFTCwgY2xrc2VsKTsKIAlyZXR1cm4gc2FtcGxlOwogfQogCkBAIC00MTEsNiArNDcyLDEwIEBACiAJCQkuZGF0YSA9ICZleHlub3NfZHJ2X2RhdGEsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MjAtZHctbXNoYy1zbXUiLAogCQkJLmRhdGEgPSAmZXh5bm9zX2Rydl9kYXRhLCB9LAorCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMiLAorCQkJLmRhdGEgPSAmZXh5bm9zX2Rydl9kYXRhLCB9LAorCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M3LWR3LW1zaGMtc211IiwKKwkJCS5kYXRhID0gJmV4eW5vc19kcnZfZGF0YSwgfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkd19tY2lfZXh5bm9zX21hdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXBsdGZtLmMgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1wbHRmbS5jCmluZGV4IDhiNjU3MjEuLmVjNmRiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXBsdGZtLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcGx0Zm0uYwpAQCAtMzUsNiArMzUsMTAgQEAKIAkucHJlcGFyZV9jb21tYW5kCT0gZHdfbWNpX3BsdGZtX3ByZXBhcmVfY29tbWFuZCwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHdfbWNpX2Rydl9kYXRhIHBpc3RhY2hpb19kcnZfZGF0YSA9IHsKKwkucHJlcGFyZV9jb21tYW5kCT0gZHdfbWNpX3BsdGZtX3ByZXBhcmVfY29tbWFuZCwKK307CisKIGludCBkd19tY2lfcGx0Zm1fcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCSAgY29uc3Qgc3RydWN0IGR3X21jaV9kcnZfZGF0YSAqZHJ2X2RhdGEpCiB7CkBAIC05MCw2ICs5NCw4IEBACiAJeyAuY29tcGF0aWJsZSA9ICJzbnBzLGR3LW1zaGMiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLWR3LW1zaGMiLAogCQkuZGF0YSA9ICZzb2NmcGdhX2Rydl9kYXRhIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpbWcscGlzdGFjaGlvLWR3LW1zaGMiLAorCQkuZGF0YSA9ICZwaXN0YWNoaW9fZHJ2X2RhdGEgfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkd19tY2lfcGx0Zm1fbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMKaW5kZXggZjBjMmNiMS4uNTY1MGFjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1yb2NrY2hpcC5jCkBAIC0zNyw2ICszNyw5IEBACiAJdW5zaWduZWQgaW50IGNjbGtpbjsKIAl1MzIgYnVzX2h6OwogCisJaWYgKGlvcy0+Y2xvY2sgPT0gMCkKKwkJcmV0dXJuOworCiAJLyoKIAkgKiBjY2xraW46IHNvdXJjZSBjbG9jayBvZiBtbWMgY29udHJvbGxlcgogCSAqIGJ1c19oejogY2FyZCBpbnRlcmZhY2UgY2xvY2sgZ2VuZXJhdGVkIGJ5IENMS0dFTgpAQCAtNjUsMTQgKzY4LDI0IEBACiAJfQogfQogCitzdGF0aWMgaW50IGR3X21jaV9yb2NrY2hpcF9pbml0KHN0cnVjdCBkd19tY2kgKmhvc3QpCit7CisJLyogSXQgaXMgc2xvdCA4IG9uIFJvY2tjaGlwIFNvQ3MgKi8KKwlob3N0LT5zZGlvX2lkMCA9IDg7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgcmsyOTI4X2Rydl9kYXRhID0gewogCS5wcmVwYXJlX2NvbW1hbmQgICAgICAgID0gZHdfbWNpX3JvY2tjaGlwX3ByZXBhcmVfY29tbWFuZCwKKwkuaW5pdAkJCT0gZHdfbWNpX3JvY2tjaGlwX2luaXQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGR3X21jaV9kcnZfZGF0YSByazMyODhfZHJ2X2RhdGEgPSB7CiAJLnByZXBhcmVfY29tbWFuZCAgICAgICAgPSBkd19tY2lfcm9ja2NoaXBfcHJlcGFyZV9jb21tYW5kLAogCS5zZXRfaW9zCQk9IGR3X21jaV9yazMyODhfc2V0X2lvcywKIAkuc2V0dXBfY2xvY2sgICAgPSBkd19tY2lfcmszMjg4X3NldHVwX2Nsb2NrLAorCS5pbml0CQkJPSBkd19tY2lfcm9ja2NoaXBfaW5pdCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3X21jaV9yb2NrY2hpcF9tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMKaW5kZXggNjlmMGNjNi4uNjdjMDQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2R3X21tYy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zbG90LWdwaW8uaD4KQEAgLTYyLDYgKzYxLDI0IEBACiAJCQkJIFNETU1DX0lETUFDX0lOVF9GQkUgfCBTRE1NQ19JRE1BQ19JTlRfUkkgfCBcCiAJCQkJIFNETU1DX0lETUFDX0lOVF9USSkKIAorc3RydWN0IGlkbWFjX2Rlc2NfNjRhZGRyIHsKKwl1MzIJCWRlczA7CS8qIENvbnRyb2wgRGVzY3JpcHRvciAqLworCisJdTMyCQlkZXMxOwkvKiBSZXNlcnZlZCAqLworCisJdTMyCQlkZXMyOwkvKkJ1ZmZlciBzaXplcyAqLworI2RlZmluZSBJRE1BQ182NEFERFJfU0VUX0JVRkZFUjFfU0laRShkLCBzKSBcCisJKChkKS0+ZGVzMiA9ICgoZCktPmRlczIgJiAweDAzZmZlMDAwKSB8ICgocykgJiAweDFmZmYpKQorCisJdTMyCQlkZXMzOwkvKiBSZXNlcnZlZCAqLworCisJdTMyCQlkZXM0OwkvKiBMb3dlciAzMi1iaXRzIG9mIEJ1ZmZlciBBZGRyZXNzIFBvaW50ZXIgMSovCisJdTMyCQlkZXM1OwkvKiBVcHBlciAzMi1iaXRzIG9mIEJ1ZmZlciBBZGRyZXNzIFBvaW50ZXIgMSovCisKKwl1MzIJCWRlczY7CS8qIExvd2VyIDMyLWJpdHMgb2YgTmV4dCBEZXNjcmlwdG9yIEFkZHJlc3MgKi8KKwl1MzIJCWRlczc7CS8qIFVwcGVyIDMyLWJpdHMgb2YgTmV4dCBEZXNjcmlwdG9yIEFkZHJlc3MgKi8KK307CisKIHN0cnVjdCBpZG1hY19kZXNjIHsKIAl1MzIJCWRlczA7CS8qIENvbnRyb2wgRGVzY3JpcHRvciAqLwogI2RlZmluZSBJRE1BQ19ERVMwX0RJQwlCSVQoMSkKQEAgLTgzLDYgKzEwMCw3IEBACiAjZW5kaWYgLyogQ09ORklHX01NQ19EV19JRE1BQyAqLwogCiBzdGF0aWMgYm9vbCBkd19tY2lfcmVzZXQoc3RydWN0IGR3X21jaSAqaG9zdCk7CitzdGF0aWMgYm9vbCBkd19tY2lfY3RybF9yZXNldChzdHJ1Y3QgZHdfbWNpICpob3N0LCB1MzIgcmVzZXQpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiBzdGF0aWMgaW50IGR3X21jaV9yZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCkBAIC00MTQsMzEgKzQzMiw2NyBAQAogCQkJCSAgICB1bnNpZ25lZCBpbnQgc2dfbGVuKQogewogCWludCBpOwotCXN0cnVjdCBpZG1hY19kZXNjICpkZXNjID0gaG9zdC0+c2dfY3B1OworCWlmIChob3N0LT5kbWFfNjRiaXRfYWRkcmVzcyA9PSAxKSB7CisJCXN0cnVjdCBpZG1hY19kZXNjXzY0YWRkciAqZGVzYyA9IGhvc3QtPnNnX2NwdTsKIAotCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKywgZGVzYysrKSB7Ci0JCXVuc2lnbmVkIGludCBsZW5ndGggPSBzZ19kbWFfbGVuKCZkYXRhLT5zZ1tpXSk7Ci0JCXUzMiBtZW1fYWRkciA9IHNnX2RtYV9hZGRyZXNzKCZkYXRhLT5zZ1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKywgZGVzYysrKSB7CisJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gc2dfZG1hX2xlbigmZGF0YS0+c2dbaV0pOworCQkJdTY0IG1lbV9hZGRyID0gc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnW2ldKTsKIAotCQkvKiBTZXQgdGhlIE9XTiBiaXQgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXNjcmlwdG9yICovCi0JCWRlc2MtPmRlczAgPSBJRE1BQ19ERVMwX09XTiB8IElETUFDX0RFUzBfRElDIHwgSURNQUNfREVTMF9DSDsKKwkJCS8qCisJCQkgKiBTZXQgdGhlIE9XTiBiaXQgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcworCQkJICogZGVzY3JpcHRvcgorCQkJICovCisJCQlkZXNjLT5kZXMwID0gSURNQUNfREVTMF9PV04gfCBJRE1BQ19ERVMwX0RJQyB8CisJCQkJCQlJRE1BQ19ERVMwX0NIOworCQkJLyogQnVmZmVyIGxlbmd0aCAqLworCQkJSURNQUNfNjRBRERSX1NFVF9CVUZGRVIxX1NJWkUoZGVzYywgbGVuZ3RoKTsKIAotCQkvKiBCdWZmZXIgbGVuZ3RoICovCi0JCUlETUFDX1NFVF9CVUZGRVIxX1NJWkUoZGVzYywgbGVuZ3RoKTsKKwkJCS8qIFBoeXNpY2FsIGFkZHJlc3MgdG8gRE1BIHRvL2Zyb20gKi8KKwkJCWRlc2MtPmRlczQgPSBtZW1fYWRkciAmIDB4ZmZmZmZmZmY7CisJCQlkZXNjLT5kZXM1ID0gbWVtX2FkZHIgPj4gMzI7CisJCX0KIAotCQkvKiBQaHlzaWNhbCBhZGRyZXNzIHRvIERNQSB0by9mcm9tICovCi0JCWRlc2MtPmRlczIgPSBtZW1fYWRkcjsKKwkJLyogU2V0IGZpcnN0IGRlc2NyaXB0b3IgKi8KKwkJZGVzYyA9IGhvc3QtPnNnX2NwdTsKKwkJZGVzYy0+ZGVzMCB8PSBJRE1BQ19ERVMwX0ZEOworCisJCS8qIFNldCBsYXN0IGRlc2NyaXB0b3IgKi8KKwkJZGVzYyA9IGhvc3QtPnNnX2NwdSArIChpIC0gMSkgKgorCQkJCXNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzY182NGFkZHIpOworCQlkZXNjLT5kZXMwICY9IH4oSURNQUNfREVTMF9DSCB8IElETUFDX0RFUzBfRElDKTsKKwkJZGVzYy0+ZGVzMCB8PSBJRE1BQ19ERVMwX0xEOworCisJfSBlbHNlIHsKKwkJc3RydWN0IGlkbWFjX2Rlc2MgKmRlc2MgPSBob3N0LT5zZ19jcHU7CisKKwkJZm9yIChpID0gMDsgaSA8IHNnX2xlbjsgaSsrLCBkZXNjKyspIHsKKwkJCXVuc2lnbmVkIGludCBsZW5ndGggPSBzZ19kbWFfbGVuKCZkYXRhLT5zZ1tpXSk7CisJCQl1MzIgbWVtX2FkZHIgPSBzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbaV0pOworCisJCQkvKgorCQkJICogU2V0IHRoZSBPV04gYml0IGFuZCBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoaXMKKwkJCSAqIGRlc2NyaXB0b3IKKwkJCSAqLworCQkJZGVzYy0+ZGVzMCA9IElETUFDX0RFUzBfT1dOIHwgSURNQUNfREVTMF9ESUMgfAorCQkJCQkJSURNQUNfREVTMF9DSDsKKwkJCS8qIEJ1ZmZlciBsZW5ndGggKi8KKwkJCUlETUFDX1NFVF9CVUZGRVIxX1NJWkUoZGVzYywgbGVuZ3RoKTsKKworCQkJLyogUGh5c2ljYWwgYWRkcmVzcyB0byBETUEgdG8vZnJvbSAqLworCQkJZGVzYy0+ZGVzMiA9IG1lbV9hZGRyOworCQl9CisKKwkJLyogU2V0IGZpcnN0IGRlc2NyaXB0b3IgKi8KKwkJZGVzYyA9IGhvc3QtPnNnX2NwdTsKKwkJZGVzYy0+ZGVzMCB8PSBJRE1BQ19ERVMwX0ZEOworCisJCS8qIFNldCBsYXN0IGRlc2NyaXB0b3IgKi8KKwkJZGVzYyA9IGhvc3QtPnNnX2NwdSArIChpIC0gMSkgKiBzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2MpOworCQlkZXNjLT5kZXMwICY9IH4oSURNQUNfREVTMF9DSCB8IElETUFDX0RFUzBfRElDKTsKKwkJZGVzYy0+ZGVzMCB8PSBJRE1BQ19ERVMwX0xEOwogCX0KIAotCS8qIFNldCBmaXJzdCBkZXNjcmlwdG9yICovCi0JZGVzYyA9IGhvc3QtPnNnX2NwdTsKLQlkZXNjLT5kZXMwIHw9IElETUFDX0RFUzBfRkQ7Ci0KLQkvKiBTZXQgbGFzdCBkZXNjcmlwdG9yICovCi0JZGVzYyA9IGhvc3QtPnNnX2NwdSArIChpIC0gMSkgKiBzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2MpOwotCWRlc2MtPmRlczAgJj0gfihJRE1BQ19ERVMwX0NIIHwgSURNQUNfREVTMF9ESUMpOwotCWRlc2MtPmRlczAgfD0gSURNQUNfREVTMF9MRDsKLQogCXdtYigpOwogfQogCkBAIC00NDgsNiArNTAyLDEwIEBACiAKIAlkd19tY2lfdHJhbnNsYXRlX3NnbGlzdChob3N0LCBob3N0LT5kYXRhLCBzZ19sZW4pOwogCisJLyogTWFrZSBzdXJlIHRvIHJlc2V0IERNQSBpbiBjYXNlIHdlIGRpZCBQSU8gYmVmb3JlIHRoaXMgKi8KKwlkd19tY2lfY3RybF9yZXNldChob3N0LCBTRE1NQ19DVFJMX0RNQV9SRVNFVCk7CisJZHdfbWNpX2lkbWFjX3Jlc2V0KGhvc3QpOworCiAJLyogU2VsZWN0IElETUFDIGludGVyZmFjZSAqLwogCXRlbXAgPSBtY2lfcmVhZGwoaG9zdCwgQ1RSTCk7CiAJdGVtcCB8PSBTRE1NQ19DVFJMX1VTRV9JRE1BQzsKQEAgLTQ2NiwyOSArNTI0LDcxIEBACiAKIHN0YXRpYyBpbnQgZHdfbWNpX2lkbWFjX2luaXQoc3RydWN0IGR3X21jaSAqaG9zdCkKIHsKLQlzdHJ1Y3QgaWRtYWNfZGVzYyAqcDsKIAlpbnQgaTsKIAotCS8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgcmluZyBidWZmZXIgKi8KLQlob3N0LT5yaW5nX3NpemUgPSBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2MpOworCWlmIChob3N0LT5kbWFfNjRiaXRfYWRkcmVzcyA9PSAxKSB7CisJCXN0cnVjdCBpZG1hY19kZXNjXzY0YWRkciAqcDsKKwkJLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSByaW5nIGJ1ZmZlciAqLworCQlob3N0LT5yaW5nX3NpemUgPSBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2NfNjRhZGRyKTsKIAotCS8qIEZvcndhcmQgbGluayB0aGUgZGVzY3JpcHRvciBsaXN0ICovCi0JZm9yIChpID0gMCwgcCA9IGhvc3QtPnNnX2NwdTsgaSA8IGhvc3QtPnJpbmdfc2l6ZSAtIDE7IGkrKywgcCsrKQotCQlwLT5kZXMzID0gaG9zdC0+c2dfZG1hICsgKHNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzYykgKiAoaSArIDEpKTsKKwkJLyogRm9yd2FyZCBsaW5rIHRoZSBkZXNjcmlwdG9yIGxpc3QgKi8KKwkJZm9yIChpID0gMCwgcCA9IGhvc3QtPnNnX2NwdTsgaSA8IGhvc3QtPnJpbmdfc2l6ZSAtIDE7CisJCQkJCQkJCWkrKywgcCsrKSB7CisJCQlwLT5kZXM2ID0gKGhvc3QtPnNnX2RtYSArCisJCQkJCShzaXplb2Yoc3RydWN0IGlkbWFjX2Rlc2NfNjRhZGRyKSAqCisJCQkJCQkJKGkgKyAxKSkpICYgMHhmZmZmZmZmZjsKIAotCS8qIFNldCB0aGUgbGFzdCBkZXNjcmlwdG9yIGFzIHRoZSBlbmQtb2YtcmluZyBkZXNjcmlwdG9yICovCi0JcC0+ZGVzMyA9IGhvc3QtPnNnX2RtYTsKLQlwLT5kZXMwID0gSURNQUNfREVTMF9FUjsKKwkJCXAtPmRlczcgPSAodTY0KShob3N0LT5zZ19kbWEgKworCQkJCQkoc2l6ZW9mKHN0cnVjdCBpZG1hY19kZXNjXzY0YWRkcikgKgorCQkJCQkJCShpICsgMSkpKSA+PiAzMjsKKwkJCS8qIEluaXRpYWxpemUgcmVzZXJ2ZWQgYW5kIGJ1ZmZlciBzaXplIGZpZWxkcyB0byAiMCIgKi8KKwkJCXAtPmRlczEgPSAwOworCQkJcC0+ZGVzMiA9IDA7CisJCQlwLT5kZXMzID0gMDsKKwkJfQorCisJCS8qIFNldCB0aGUgbGFzdCBkZXNjcmlwdG9yIGFzIHRoZSBlbmQtb2YtcmluZyBkZXNjcmlwdG9yICovCisJCXAtPmRlczYgPSBob3N0LT5zZ19kbWEgJiAweGZmZmZmZmZmOworCQlwLT5kZXM3ID0gKHU2NClob3N0LT5zZ19kbWEgPj4gMzI7CisJCXAtPmRlczAgPSBJRE1BQ19ERVMwX0VSOworCisJfSBlbHNlIHsKKwkJc3RydWN0IGlkbWFjX2Rlc2MgKnA7CisJCS8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgcmluZyBidWZmZXIgKi8KKwkJaG9zdC0+cmluZ19zaXplID0gUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBpZG1hY19kZXNjKTsKKworCQkvKiBGb3J3YXJkIGxpbmsgdGhlIGRlc2NyaXB0b3IgbGlzdCAqLworCQlmb3IgKGkgPSAwLCBwID0gaG9zdC0+c2dfY3B1OyBpIDwgaG9zdC0+cmluZ19zaXplIC0gMTsgaSsrLCBwKyspCisJCQlwLT5kZXMzID0gaG9zdC0+c2dfZG1hICsgKHNpemVvZihzdHJ1Y3QgaWRtYWNfZGVzYykgKgorCQkJCQkJCQkoaSArIDEpKTsKKworCQkvKiBTZXQgdGhlIGxhc3QgZGVzY3JpcHRvciBhcyB0aGUgZW5kLW9mLXJpbmcgZGVzY3JpcHRvciAqLworCQlwLT5kZXMzID0gaG9zdC0+c2dfZG1hOworCQlwLT5kZXMwID0gSURNQUNfREVTMF9FUjsKKwl9CiAKIAlkd19tY2lfaWRtYWNfcmVzZXQoaG9zdCk7CiAKLQkvKiBNYXNrIG91dCBpbnRlcnJ1cHRzIC0gZ2V0IFR4ICYgUnggY29tcGxldGUgb25seSAqLwotCW1jaV93cml0ZWwoaG9zdCwgSURTVFMsIElETUFDX0lOVF9DTFIpOwotCW1jaV93cml0ZWwoaG9zdCwgSURJTlRFTiwgU0RNTUNfSURNQUNfSU5UX05JIHwgU0RNTUNfSURNQUNfSU5UX1JJIHwKLQkJICAgU0RNTUNfSURNQUNfSU5UX1RJKTsKKwlpZiAoaG9zdC0+ZG1hXzY0Yml0X2FkZHJlc3MgPT0gMSkgeworCQkvKiBNYXNrIG91dCBpbnRlcnJ1cHRzIC0gZ2V0IFR4ICYgUnggY29tcGxldGUgb25seSAqLworCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTNjQsIElETUFDX0lOVF9DTFIpOworCQltY2lfd3JpdGVsKGhvc3QsIElESU5URU42NCwgU0RNTUNfSURNQUNfSU5UX05JIHwKKwkJCQlTRE1NQ19JRE1BQ19JTlRfUkkgfCBTRE1NQ19JRE1BQ19JTlRfVEkpOwogCi0JLyogU2V0IHRoZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLwotCW1jaV93cml0ZWwoaG9zdCwgREJBRERSLCBob3N0LT5zZ19kbWEpOworCQkvKiBTZXQgdGhlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJCW1jaV93cml0ZWwoaG9zdCwgREJBRERSTCwgaG9zdC0+c2dfZG1hICYgMHhmZmZmZmZmZik7CisJCW1jaV93cml0ZWwoaG9zdCwgREJBRERSVSwgKHU2NClob3N0LT5zZ19kbWEgPj4gMzIpOworCisJfSBlbHNlIHsKKwkJLyogTWFzayBvdXQgaW50ZXJydXB0cyAtIGdldCBUeCAmIFJ4IGNvbXBsZXRlIG9ubHkgKi8KKwkJbWNpX3dyaXRlbChob3N0LCBJRFNUUywgSURNQUNfSU5UX0NMUik7CisJCW1jaV93cml0ZWwoaG9zdCwgSURJTlRFTiwgU0RNTUNfSURNQUNfSU5UX05JIHwKKwkJCQlTRE1NQ19JRE1BQ19JTlRfUkkgfCBTRE1NQ19JRE1BQ19JTlRfVEkpOworCisJCS8qIFNldCB0aGUgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwkJbWNpX3dyaXRlbChob3N0LCBEQkFERFIsIGhvc3QtPnNnX2RtYSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyNiw2ICs3MjYsMTMgQEAKIAogCVdBUk5fT04oIShkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpKTsKIAorCS8qCisJICogQ0RUSFJDVEwgZG9lc24ndCBleGlzdCBwcmlvciB0byAyNDBBIChpbiBmYWN0IHRoYXQgcmVnaXN0ZXIgb2Zmc2V0IGlzCisJICogaW4gdGhlIEZJRk8gcmVnaW9uLCBzbyB3ZSByZWFsbHkgc2hvdWxkbid0IGFjY2VzcyBpdCkuCisJICovCisJaWYgKGhvc3QtPnZlcmlkIDwgRFdfTU1DXzI0MEEpCisJCXJldHVybjsKKwogCWlmIChob3N0LT50aW1pbmcgIT0gTU1DX1RJTUlOR19NTUNfSFMyMDAgJiYKIAkgICAgaG9zdC0+dGltaW5nICE9IE1NQ19USU1JTkdfVUhTX1NEUjEwNCkKIAkJZ290byBkaXNhYmxlOwpAQCAtODE5LDcgKzkyNiw3IEBACiAKIAkJLyogZW5hYmxlIGNsb2NrOyBvbmx5IGxvdyBwb3dlciBpZiBubyBTRElPICovCiAJCWNsa19lbl9hID0gU0RNTUNfQ0xLRU5fRU5BQkxFIDw8IHNsb3QtPmlkOwotCQlpZiAoIShtY2lfcmVhZGwoaG9zdCwgSU5UTUFTSykgJiBTRE1NQ19JTlRfU0RJTyhzbG90LT5pZCkpKQorCQlpZiAoIShtY2lfcmVhZGwoaG9zdCwgSU5UTUFTSykgJiBTRE1NQ19JTlRfU0RJTyhzbG90LT5zZGlvX2lkKSkpCiAJCQljbGtfZW5fYSB8PSBTRE1NQ19DTEtFTl9MT1dfUFdSIDw8IHNsb3QtPmlkOwogCQltY2lfd3JpdGVsKGhvc3QsIENMS0VOQSwgY2xrX2VuX2EpOwogCkBAIC0xMDc1LDcgKzExODIsNyBAQAogCQlyZXQgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UobW1jLT5zdXBwbHkudnFtbWMsIG1pbl91diwgbWF4X3V2KTsKIAogCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKCZtbWMtPmNsYXNzX2RldiwKKwkJCWRldl9kYmcoJm1tYy0+Y2xhc3NfZGV2LAogCQkJCQkgIlJlZ3VsYXRvciBzZXQgZXJyb3IgJWQ6ICVkIC0gJWRcbiIsCiAJCQkJCSByZXQsIG1pbl91diwgbWF4X3V2KTsKIAkJCXJldHVybiByZXQ7CkBAIC0xMTgwLDEwICsxMjg3LDEwIEBACiAJCWR3X21jaV9kaXNhYmxlX2xvd19wb3dlcihzbG90KTsKIAogCQltY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssCi0JCQkgICAoaW50X21hc2sgfCBTRE1NQ19JTlRfU0RJTyhzbG90LT5pZCkpKTsKKwkJCSAgIChpbnRfbWFzayB8IFNETU1DX0lOVF9TRElPKHNsb3QtPnNkaW9faWQpKSk7CiAJfSBlbHNlIHsKIAkJbWNpX3dyaXRlbChob3N0LCBJTlRNQVNLLAotCQkJICAgKGludF9tYXNrICYgflNETU1DX0lOVF9TRElPKHNsb3QtPmlkKSkpOworCQkJICAgKGludF9tYXNrICYgflNETU1DX0lOVF9TRElPKHNsb3QtPnNkaW9faWQpKSk7CiAJfQogfQogCkBAIC0xOTU0LDYgKzIwNjEsMjMgQEAKIAl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50YXNrbGV0KTsKIH0KIAorc3RhdGljIHZvaWQgZHdfbWNpX2hhbmRsZV9jZChzdHJ1Y3QgZHdfbWNpICpob3N0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm51bV9zbG90czsgaSsrKSB7CisJCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IGhvc3QtPnNsb3RbaV07CisKKwkJaWYgKCFzbG90KQorCQkJY29udGludWU7CisKKwkJaWYgKHNsb3QtPm1tYy0+b3BzLT5jYXJkX2V2ZW50KQorCQkJc2xvdC0+bW1jLT5vcHMtPmNhcmRfZXZlbnQoc2xvdC0+bW1jKTsKKwkJbW1jX2RldGVjdF9jaGFuZ2Uoc2xvdC0+bW1jLAorCQkJbXNlY3NfdG9famlmZmllcyhob3N0LT5wZGF0YS0+ZGV0ZWN0X2RlbGF5X21zKSk7CisJfQorfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgZHdfbWNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGR3X21jaSAqaG9zdCA9IGRldl9pZDsKQEAgLTIwMjksMTQgKzIxNTMsMTUgQEAKIAogCQlpZiAocGVuZGluZyAmIFNETU1DX0lOVF9DRCkgewogCQkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLCBTRE1NQ19JTlRfQ0QpOwotCQkJcXVldWVfd29yayhob3N0LT5jYXJkX3dvcmtxdWV1ZSwgJmhvc3QtPmNhcmRfd29yayk7CisJCQlkd19tY2lfaGFuZGxlX2NkKGhvc3QpOwogCQl9CiAKIAkJLyogSGFuZGxlIFNESU8gSW50ZXJydXB0cyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bnVtX3Nsb3RzOyBpKyspIHsKIAkJCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IGhvc3QtPnNsb3RbaV07Ci0JCQlpZiAocGVuZGluZyAmIFNETU1DX0lOVF9TRElPKGkpKSB7Ci0JCQkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLCBTRE1NQ19JTlRfU0RJTyhpKSk7CisJCQlpZiAocGVuZGluZyAmIFNETU1DX0lOVF9TRElPKHNsb3QtPnNkaW9faWQpKSB7CisJCQkJbWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLAorCQkJCQkgICBTRE1NQ19JTlRfU0RJTyhzbG90LT5zZGlvX2lkKSk7CiAJCQkJbW1jX3NpZ25hbF9zZGlvX2lycShzbG90LT5tbWMpOwogCQkJfQogCQl9CkBAIC0yMDQ1LDk5ICsyMTcwLDI4IEBACiAKICNpZmRlZiBDT05GSUdfTU1DX0RXX0lETUFDCiAJLyogSGFuZGxlIERNQSBpbnRlcnJ1cHRzICovCi0JcGVuZGluZyA9IG1jaV9yZWFkbChob3N0LCBJRFNUUyk7Ci0JaWYgKHBlbmRpbmcgJiAoU0RNTUNfSURNQUNfSU5UX1RJIHwgU0RNTUNfSURNQUNfSU5UX1JJKSkgewotCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTLCBTRE1NQ19JRE1BQ19JTlRfVEkgfCBTRE1NQ19JRE1BQ19JTlRfUkkpOwotCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTLCBTRE1NQ19JRE1BQ19JTlRfTkkpOwotCQlob3N0LT5kbWFfb3BzLT5jb21wbGV0ZShob3N0KTsKKwlpZiAoaG9zdC0+ZG1hXzY0Yml0X2FkZHJlc3MgPT0gMSkgeworCQlwZW5kaW5nID0gbWNpX3JlYWRsKGhvc3QsIElEU1RTNjQpOworCQlpZiAocGVuZGluZyAmIChTRE1NQ19JRE1BQ19JTlRfVEkgfCBTRE1NQ19JRE1BQ19JTlRfUkkpKSB7CisJCQltY2lfd3JpdGVsKGhvc3QsIElEU1RTNjQsIFNETU1DX0lETUFDX0lOVF9USSB8CisJCQkJCQkJU0RNTUNfSURNQUNfSU5UX1JJKTsKKwkJCW1jaV93cml0ZWwoaG9zdCwgSURTVFM2NCwgU0RNTUNfSURNQUNfSU5UX05JKTsKKwkJCWhvc3QtPmRtYV9vcHMtPmNvbXBsZXRlKGhvc3QpOworCQl9CisJfSBlbHNlIHsKKwkJcGVuZGluZyA9IG1jaV9yZWFkbChob3N0LCBJRFNUUyk7CisJCWlmIChwZW5kaW5nICYgKFNETU1DX0lETUFDX0lOVF9USSB8IFNETU1DX0lETUFDX0lOVF9SSSkpIHsKKwkJCW1jaV93cml0ZWwoaG9zdCwgSURTVFMsIFNETU1DX0lETUFDX0lOVF9USSB8CisJCQkJCQkJU0RNTUNfSURNQUNfSU5UX1JJKTsKKwkJCW1jaV93cml0ZWwoaG9zdCwgSURTVFMsIFNETU1DX0lETUFDX0lOVF9OSSk7CisJCQlob3N0LT5kbWFfb3BzLT5jb21wbGV0ZShob3N0KTsKKwkJfQogCX0KICNlbmRpZgogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgdm9pZCBkd19tY2lfd29ya19yb3V0aW5lX2NhcmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBkd19tY2kgKmhvc3QgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGR3X21jaSwgY2FyZF93b3JrKTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBob3N0LT5udW1fc2xvdHM7IGkrKykgewotCQlzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBob3N0LT5zbG90W2ldOwotCQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHNsb3QtPm1tYzsKLQkJc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7Ci0JCWludCBwcmVzZW50OwotCi0JCXByZXNlbnQgPSBkd19tY2lfZ2V0X2NkKG1tYyk7Ci0JCXdoaWxlIChwcmVzZW50ICE9IHNsb3QtPmxhc3RfZGV0ZWN0X3N0YXRlKSB7Ci0JCQlkZXZfZGJnKCZzbG90LT5tbWMtPmNsYXNzX2RldiwgImNhcmQgJXNcbiIsCi0JCQkJcHJlc2VudCA/ICJpbnNlcnRlZCIgOiAicmVtb3ZlZCIpOwotCi0JCQlzcGluX2xvY2tfYmgoJmhvc3QtPmxvY2spOwotCi0JCQkvKiBDYXJkIGNoYW5nZSBkZXRlY3RlZCAqLwotCQkJc2xvdC0+bGFzdF9kZXRlY3Rfc3RhdGUgPSBwcmVzZW50OwotCi0JCQkvKiBDbGVhbiB1cCBxdWV1ZSBpZiBwcmVzZW50ICovCi0JCQltcnEgPSBzbG90LT5tcnE7Ci0JCQlpZiAobXJxKSB7Ci0JCQkJaWYgKG1ycSA9PSBob3N0LT5tcnEpIHsKLQkJCQkJaG9zdC0+ZGF0YSA9IE5VTEw7Ci0JCQkJCWhvc3QtPmNtZCA9IE5VTEw7Ci0KLQkJCQkJc3dpdGNoIChob3N0LT5zdGF0ZSkgewotCQkJCQljYXNlIFNUQVRFX0lETEU6Ci0JCQkJCWNhc2UgU1RBVEVfV0FJVElOR19DTUQxMV9ET05FOgotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgU1RBVEVfU0VORElOR19DTUQxMToKLQkJCQkJY2FzZSBTVEFURV9TRU5ESU5HX0NNRDoKLQkJCQkJCW1ycS0+Y21kLT5lcnJvciA9IC1FTk9NRURJVU07Ci0JCQkJCQlpZiAoIW1ycS0+ZGF0YSkKLQkJCQkJCQlicmVhazsKLQkJCQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQkJCQljYXNlIFNUQVRFX1NFTkRJTkdfREFUQToKLQkJCQkJCW1ycS0+ZGF0YS0+ZXJyb3IgPSAtRU5PTUVESVVNOwotCQkJCQkJZHdfbWNpX3N0b3BfZG1hKGhvc3QpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgU1RBVEVfREFUQV9CVVNZOgotCQkJCQljYXNlIFNUQVRFX0RBVEFfRVJST1I6Ci0JCQkJCQlpZiAobXJxLT5kYXRhLT5lcnJvciA9PSAtRUlOUFJPR1JFU1MpCi0JCQkJCQkJbXJxLT5kYXRhLT5lcnJvciA9IC1FTk9NRURJVU07Ci0JCQkJCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJCQkJY2FzZSBTVEFURV9TRU5ESU5HX1NUT1A6Ci0JCQkJCQlpZiAobXJxLT5zdG9wKQotCQkJCQkJCW1ycS0+c3RvcC0+ZXJyb3IgPSAtRU5PTUVESVVNOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQotCQkJCQlkd19tY2lfcmVxdWVzdF9lbmQoaG9zdCwgbXJxKTsKLQkJCQl9IGVsc2UgewotCQkJCQlsaXN0X2RlbCgmc2xvdC0+cXVldWVfbm9kZSk7Ci0JCQkJCW1ycS0+Y21kLT5lcnJvciA9IC1FTk9NRURJVU07Ci0JCQkJCWlmIChtcnEtPmRhdGEpCi0JCQkJCQltcnEtPmRhdGEtPmVycm9yID0gLUVOT01FRElVTTsKLQkJCQkJaWYgKG1ycS0+c3RvcCkKLQkJCQkJCW1ycS0+c3RvcC0+ZXJyb3IgPSAtRU5PTUVESVVNOwotCi0JCQkJCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKLQkJCQkJbW1jX3JlcXVlc3RfZG9uZShzbG90LT5tbWMsIG1ycSk7Ci0JCQkJCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7Ci0JCQkJfQotCQkJfQotCi0JCQkvKiBQb3dlciBkb3duIHNsb3QgKi8KLQkJCWlmIChwcmVzZW50ID09IDApCi0JCQkJZHdfbWNpX3Jlc2V0KGhvc3QpOwotCi0JCQlzcGluX3VubG9ja19iaCgmaG9zdC0+bG9jayk7Ci0KLQkJCXByZXNlbnQgPSBkd19tY2lfZ2V0X2NkKG1tYyk7Ci0JCX0KLQotCQltbWNfZGV0ZWN0X2NoYW5nZShzbG90LT5tbWMsCi0JCQltc2Vjc190b19qaWZmaWVzKGhvc3QtPnBkYXRhLT5kZXRlY3RfZGVsYXlfbXMpKTsKLQl9Ci19Ci0KICNpZmRlZiBDT05GSUdfT0YKIC8qIGdpdmVuIGEgc2xvdCBpZCwgZmluZCBvdXQgdGhlIGRldmljZSBub2RlIHJlcHJlc2VudGluZyB0aGF0IHNsb3QgKi8KIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmR3X21jaV9vZl9maW5kX3Nsb3Rfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4IHNsb3QpCkBAIC0yMjA2LDYgKzIyNjAsNyBAQAogCiAJc2xvdCA9IG1tY19wcml2KG1tYyk7CiAJc2xvdC0+aWQgPSBpZDsKKwlzbG90LT5zZGlvX2lkID0gaG9zdC0+c2Rpb19pZDAgKyBpZDsKIAlzbG90LT5tbWMgPSBtbWM7CiAJc2xvdC0+aG9zdCA9IGhvc3Q7CiAJaG9zdC0+c2xvdFtpZF0gPSBzbG90OwpAQCAtMjI4OSw5ICsyMzQ0LDYgQEAKIAlkd19tY2lfaW5pdF9kZWJ1Z2ZzKHNsb3QpOwogI2VuZGlmCiAKLQkvKiBDYXJkIGluaXRpYWxseSB1bmRldGVjdGVkICovCi0Jc2xvdC0+bGFzdF9kZXRlY3Rfc3RhdGUgPSAwOwotCiAJcmV0dXJuIDA7CiAKIGVycl9ob3N0X2FsbG9jYXRlZDoKQEAgLTIzMDksNiArMjM2MSwyMiBAQAogCiBzdGF0aWMgdm9pZCBkd19tY2lfaW5pdF9kbWEoc3RydWN0IGR3X21jaSAqaG9zdCkKIHsKKwlpbnQgYWRkcl9jb25maWc7CisJLyogQ2hlY2sgQUREUl9DT05GSUcgYml0IGluIEhDT04gdG8gZmluZCBJRE1BQyBhZGRyZXNzIGJ1cyB3aWR0aCAqLworCWFkZHJfY29uZmlnID0gKG1jaV9yZWFkbChob3N0LCBIQ09OKSA+PiAyNykgJiAweDAxOworCisJaWYgKGFkZHJfY29uZmlnID09IDEpIHsKKwkJLyogaG9zdCBzdXBwb3J0cyBJRE1BQyBpbiA2NC1iaXQgYWRkcmVzcyBtb2RlICovCisJCWhvc3QtPmRtYV82NGJpdF9hZGRyZXNzID0gMTsKKwkJZGV2X2luZm8oaG9zdC0+ZGV2LCAiSURNQUMgc3VwcG9ydHMgNjQtYml0IGFkZHJlc3MgbW9kZS5cbiIpOworCQlpZiAoIWRtYV9zZXRfbWFzayhob3N0LT5kZXYsIERNQV9CSVRfTUFTSyg2NCkpKQorCQkJZG1hX3NldF9jb2hlcmVudF9tYXNrKGhvc3QtPmRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJfSBlbHNlIHsKKwkJLyogaG9zdCBzdXBwb3J0cyBJRE1BQyBpbiAzMi1iaXQgYWRkcmVzcyBtb2RlICovCisJCWhvc3QtPmRtYV82NGJpdF9hZGRyZXNzID0gMDsKKwkJZGV2X2luZm8oaG9zdC0+ZGV2LCAiSURNQUMgc3VwcG9ydHMgMzItYml0IGFkZHJlc3MgbW9kZS5cbiIpOworCX0KKwogCS8qIEFsbG9jIG1lbW9yeSBmb3Igc2cgdHJhbnNsYXRpb24gKi8KIAlob3N0LT5zZ19jcHUgPSBkbWFtX2FsbG9jX2NvaGVyZW50KGhvc3QtPmRldiwgUEFHRV9TSVpFLAogCQkJCQkgICZob3N0LT5zZ19kbWEsIEdGUF9LRVJORUwpOwpAQCAtMjY3MiwxNyArMjc0MCwxMCBAQAogCQlob3N0LT5kYXRhX29mZnNldCA9IERBVEFfMjQwQV9PRkZTRVQ7CiAKIAl0YXNrbGV0X2luaXQoJmhvc3QtPnRhc2tsZXQsIGR3X21jaV90YXNrbGV0X2Z1bmMsICh1bnNpZ25lZCBsb25nKWhvc3QpOwotCWhvc3QtPmNhcmRfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJkdy1tY2ktY2FyZCIsCi0JCQlXUV9NRU1fUkVDTEFJTSwgMSk7Ci0JaWYgKCFob3N0LT5jYXJkX3dvcmtxdWV1ZSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9kbWF1bm1hcDsKLQl9Ci0JSU5JVF9XT1JLKCZob3N0LT5jYXJkX3dvcmssIGR3X21jaV93b3JrX3JvdXRpbmVfY2FyZCk7CiAJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShob3N0LT5kZXYsIGhvc3QtPmlycSwgZHdfbWNpX2ludGVycnVwdCwKIAkJCSAgICAgICBob3N0LT5pcnFfZmxhZ3MsICJkdy1tY2kiLCBob3N0KTsKIAlpZiAocmV0KQotCQlnb3RvIGVycl93b3JrcXVldWU7CisJCWdvdG8gZXJyX2RtYXVubWFwOwogCiAJaWYgKGhvc3QtPnBkYXRhLT5udW1fc2xvdHMpCiAJCWhvc3QtPm51bV9zbG90cyA9IGhvc3QtPnBkYXRhLT5udW1fc2xvdHM7CkBAIC0yNzE4LDcgKzI3NzksNyBAQAogCX0gZWxzZSB7CiAJCWRldl9kYmcoaG9zdC0+ZGV2LCAiYXR0ZW1wdGVkIHRvIGluaXRpYWxpemUgJWQgc2xvdHMsICIKIAkJCQkJImJ1dCBmYWlsZWQgb24gYWxsXG4iLCBob3N0LT5udW1fc2xvdHMpOwotCQlnb3RvIGVycl93b3JrcXVldWU7CisJCWdvdG8gZXJyX2RtYXVubWFwOwogCX0KIAogCWlmIChob3N0LT5xdWlya3MgJiBEV19NQ0lfUVVJUktfSURNQUNfRFRPKQpAQCAtMjcyNiw5ICsyNzg3LDYgQEAKIAogCXJldHVybiAwOwogCi1lcnJfd29ya3F1ZXVlOgotCWRlc3Ryb3lfd29ya3F1ZXVlKGhvc3QtPmNhcmRfd29ya3F1ZXVlKTsKLQogZXJyX2RtYXVubWFwOgogCWlmIChob3N0LT51c2VfZG1hICYmIGhvc3QtPmRtYV9vcHMtPmV4aXQpCiAJCWhvc3QtPmRtYV9vcHMtPmV4aXQoaG9zdCk7CkBAIC0yNzYyLDggKzI4MjAsNiBAQAogCW1jaV93cml0ZWwoaG9zdCwgQ0xLRU5BLCAwKTsKIAltY2lfd3JpdGVsKGhvc3QsIENMS1NSQywgMCk7CiAKLQlkZXN0cm95X3dvcmtxdWV1ZShob3N0LT5jYXJkX3dvcmtxdWV1ZSk7Ci0KIAlpZiAoaG9zdC0+dXNlX2RtYSAmJiBob3N0LT5kbWFfb3BzLT5leGl0KQogCQlob3N0LT5kbWFfb3BzLT5leGl0KGhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaAppbmRleCAwMWI5OWU4Li4wZDBmN2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmgKQEAgLTU1LDYgKzU1LDE3IEBACiAjZGVmaW5lIFNETU1DX0JVRkFERFIJCTB4MDk4CiAjZGVmaW5lIFNETU1DX0NEVEhSQ1RMCQkweDEwMAogI2RlZmluZSBTRE1NQ19EQVRBKHgpCQkoeCkKKy8qCisqIFJlZ2lzdGVycyB0byBzdXBwb3J0IGlkbWFjIDY0LWJpdCBhZGRyZXNzIG1vZGUKKyovCisjZGVmaW5lIFNETU1DX0RCQUREUkwJCTB4MDg4CisjZGVmaW5lIFNETU1DX0RCQUREUlUJCTB4MDhjCisjZGVmaW5lIFNETU1DX0lEU1RTNjQJCTB4MDkwCisjZGVmaW5lIFNETU1DX0lESU5URU42NAkJMHgwOTQKKyNkZWZpbmUgU0RNTUNfRFNDQUREUkwJCTB4MDk4CisjZGVmaW5lIFNETU1DX0RTQ0FERFJVCQkweDA5YworI2RlZmluZSBTRE1NQ19CVUZBRERSTAkJMHgwQTAKKyNkZWZpbmUgU0RNTUNfQlVGQUREUlUJCTB4MEE0CiAKIC8qCiAgKiBEYXRhIG9mZnNldCBpcyBkaWZmZXJlbmNlIGFjY29yZGluZyB0byBWZXJzaW9uCkBAIC0yMTQsNyArMjI1LDcgQEAKICAqCXdpdGggQ09ORklHX01NQ19DTEtHQVRFLgogICogQGZsYWdzOiBSYW5kb20gc3RhdGUgYml0cyBhc3NvY2lhdGVkIHdpdGggdGhlIHNsb3QuCiAgKiBAaWQ6IE51bWJlciBvZiB0aGlzIHNsb3QuCi0gKiBAbGFzdF9kZXRlY3Rfc3RhdGU6IE1vc3QgcmVjZW50bHkgb2JzZXJ2ZWQgY2FyZCBkZXRlY3Qgc3RhdGUuCisgKiBAc2Rpb19pZDogTnVtYmVyIG9mIHRoaXMgc2xvdCBpbiB0aGUgU0RJTyBpbnRlcnJ1cHQgcmVnaXN0ZXJzLgogICovCiBzdHJ1Y3QgZHdfbWNpX3Nsb3QgewogCXN0cnVjdCBtbWNfaG9zdAkJKm1tYzsKQEAgLTIzNCw3ICsyNDUsNyBAQAogI2RlZmluZSBEV19NTUNfQ0FSRF9QUkVTRU5UCTAKICNkZWZpbmUgRFdfTU1DX0NBUkRfTkVFRF9JTklUCTEKIAlpbnQJCQlpZDsKLQlpbnQJCQlsYXN0X2RldGVjdF9zdGF0ZTsKKwlpbnQJCQlzZGlvX2lkOwogfTsKIAogc3RydWN0IGR3X21jaV90dW5pbmdfZGF0YSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDQzYWY3OTEuLjgyMzJlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC03MzYsOCArNzM2LDE1IEBACiAJCQljaGFuID0gaG9zdC0+ZG1hX3R4X2NoYW5uZWw7CiAJCWRtYWVuZ2luZV90ZXJtaW5hdGVfYWxsKGNoYW4pOwogCisJCWlmIChob3N0LT5kbWFfZGVzY19jdXJyZW50ID09IG5leHQtPmRtYV9kZXNjKQorCQkJaG9zdC0+ZG1hX2Rlc2NfY3VycmVudCA9IE5VTEw7CisKKwkJaWYgKGhvc3QtPmRtYV9jdXJyZW50ID09IG5leHQtPmRtYV9jaGFuKQorCQkJaG9zdC0+ZG1hX2N1cnJlbnQgPSBOVUxMOworCiAJCW5leHQtPmRtYV9kZXNjID0gTlVMTDsKIAkJbmV4dC0+ZG1hX2NoYW4gPSBOVUxMOworCQlkYXRhLT5ob3N0X2Nvb2tpZSA9IDA7CiAJfQogfQogCkBAIC0xODQzLDcgKzE4NTAsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG1tY2lfZGV2X3BtX29wcyA9IHsKIAlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQsCiAJCQkJcG1fcnVudGltZV9mb3JjZV9yZXN1bWUpCi0JU0VUX1BNX1JVTlRJTUVfUE1fT1BTKG1tY2lfcnVudGltZV9zdXNwZW5kLCBtbWNpX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQorCVNFVF9SVU5USU1FX1BNX09QUyhtbWNpX3J1bnRpbWVfc3VzcGVuZCwgbW1jaV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9pZCBtbWNpX2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCmluZGV4IDk0MDVlY2QuLjkwYzYwZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKQEAgLTEzNjAsNyArMTM2MCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBjbWRfaXJxX2ZyZWU7CiAKLQltbWNfc2V0X2RydmRhdGEocGRldiwgbW1jKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtbWMpOwogCW1tY19hZGRfaG9zdChtbWMpOwogCiAJcHJfaW5mbygiJXM6IFF1YWxjb21tIE1TTSBTRENDIGF0IDB4JTAxNmxseCBpcnEgJWQsJWQgZG1hICVkXG4iLApAQCAtMTQxOSw3ICsxNDE5LDcgQEAKIHN0YXRpYyBpbnQKIG1zbXNkY2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IG1tY19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChtbWMpIHsKIAkJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CkBAIC0xNDM3LDcgKzE0MzcsNyBAQAogc3RhdGljIGludAogbXNtc2RjY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gbW1jX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKG1tYykgewogCQlzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmMgYi9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5jCmluZGV4IDZiNGM1YWQzLi40Zjg2MThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmMKQEAgLTExMSwxMCArMTExLDE1IEBACiAJbXZzZF93cml0ZShNVlNEX0JMS19DT1VOVCwgZGF0YS0+YmxvY2tzKTsKIAltdnNkX3dyaXRlKE1WU0RfQkxLX1NJWkUsIGRhdGEtPmJsa3N6KTsKIAotCWlmIChub2RtYSB8fCAoZGF0YS0+Ymxrc3ogfCBkYXRhLT5zZy0+b2Zmc2V0KSAmIDMpIHsKKwlpZiAobm9kbWEgfHwgKGRhdGEtPmJsa3N6IHwgZGF0YS0+c2ctPm9mZnNldCkgJiAzIHx8CisJICAgICgoIShkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpICYmIGRhdGEtPnNnLT5vZmZzZXQgJiAweDNmKSkpIHsKIAkJLyoKIAkJICogV2UgY2Fubm90IGRvIERNQSBvbiBhIGJ1ZmZlciB3aGljaCBvZmZzZXQgb3Igc2l6ZQogCQkgKiBpcyBub3QgYWxpZ25lZCBvbiBhIDQtYnl0ZSBib3VuZGFyeS4KKwkJICoKKwkJICogSXQgYWxzbyBhcHBlYXJzIHRoZSBob3N0IHRvIGNhcmQgRE1BIGNhbiBjb3JydXB0CisJCSAqIGRhdGEgd2hlbiB0aGUgYnVmZmVyIGlzIG5vdCBhbGlnbmVkIG9uIGEgNjQgYnl0ZQorCQkgKiBib3VuZGFyeS4KIAkJICovCiAJCWhvc3QtPnBpb19zaXplID0gZGF0YS0+YmxvY2tzICogZGF0YS0+Ymxrc3o7CiAJCWhvc3QtPnBpb19wdHIgPSBzZ192aXJ0KGRhdGEtPnNnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCmluZGV4IGFkMTExNDIuLjUzMTZkOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwpAQCAtMzczLDEzICszNzMsOSBAQAogCWRlbF90aW1lcigmaG9zdC0+d2F0Y2hkb2cpOwogCiAJc3RhdCA9IG14Y21jaV9yZWFkbChob3N0LCBNTUNfUkVHX1NUQVRVUyk7Ci0JbXhjbWNpX3dyaXRlbChob3N0LCBzdGF0ICYgflNUQVRVU19EQVRBX1RSQU5TX0RPTkUsIE1NQ19SRUdfU1RBVFVTKTsKIAogCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiJXM6IDB4JTA4eFxuIiwgX19mdW5jX18sIHN0YXQpOwogCi0JaWYgKHN0YXQgJiBTVEFUVVNfUkVBRF9PUF9ET05FKQotCQlteGNtY2lfd3JpdGVsKGhvc3QsIFNUQVRVU19SRUFEX09QX0RPTkUsIE1NQ19SRUdfU1RBVFVTKTsKLQogCW14Y21jaV9kYXRhX2RvbmUoaG9zdCwgc3RhdCk7CiB9CiAKQEAgLTc0MywxMCArNzM5LDggQEAKIAlzZGlvX2lycSA9IChzdGF0ICYgU1RBVFVTX1NESU9fSU5UX0FDVElWRSkgJiYgaG9zdC0+dXNlX3NkaW87CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKG14Y21jaV91c2VfZG1hKGhvc3QpICYmCi0JICAgIChzdGF0ICYgKFNUQVRVU19SRUFEX09QX0RPTkUgfCBTVEFUVVNfV1JJVEVfT1BfRE9ORSkpKQotCQlteGNtY2lfd3JpdGVsKGhvc3QsIFNUQVRVU19SRUFEX09QX0RPTkUgfCBTVEFUVVNfV1JJVEVfT1BfRE9ORSwKLQkJCU1NQ19SRUdfU1RBVFVTKTsKKwlpZiAobXhjbWNpX3VzZV9kbWEoaG9zdCkgJiYgKHN0YXQgJiAoU1RBVFVTX1dSSVRFX09QX0RPTkUpKSkKKwkJbXhjbWNpX3dyaXRlbChob3N0LCBTVEFUVVNfV1JJVEVfT1BfRE9ORSwgTU1DX1JFR19TVEFUVVMpOwogCiAJaWYgKHNkaW9faXJxKSB7CiAJCW14Y21jaV93cml0ZWwoaG9zdCwgU1RBVFVTX1NESU9fSU5UX0FDVElWRSwgTU1DX1JFR19TVEFUVVMpOwpAQCAtNzU2LDggKzc1MCw3IEBACiAJaWYgKHN0YXQgJiBTVEFUVVNfRU5EX0NNRF9SRVNQKQogCQlteGNtY2lfY21kX2RvbmUoaG9zdCwgc3RhdCk7CiAKLQlpZiAobXhjbWNpX3VzZV9kbWEoaG9zdCkgJiYKLQkJICAoc3RhdCAmIChTVEFUVVNfREFUQV9UUkFOU19ET05FIHwgU1RBVFVTX1dSSVRFX09QX0RPTkUpKSkgeworCWlmIChteGNtY2lfdXNlX2RtYShob3N0KSAmJiAoc3RhdCAmIFNUQVRVU19XUklURV9PUF9ET05FKSkgewogCQlkZWxfdGltZXIoJmhvc3QtPndhdGNoZG9nKTsKIAkJbXhjbWNpX2RhdGFfZG9uZShob3N0LCBzdGF0KTsKIAl9CkBAIC0xMDg0LDEyICsxMDc3LDE0IEBACiAJCWRhdDNfY2FyZF9kZXRlY3QgPSB0cnVlOwogCiAJcmV0ID0gbW1jX3JlZ3VsYXRvcl9nZXRfc3VwcGx5KG1tYyk7Ci0JaWYgKHJldCkgewotCQlpZiAocGRhdGEgJiYgcmV0ICE9IC1FUFJPQkVfREVGRVIpCi0JCQltbWMtPm9jcl9hdmFpbCA9IHBkYXRhLT5vY3JfYXZhaWwgPyA6Ci0JCQkJTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7CisJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKQorCQlnb3RvIG91dF9mcmVlOworCisJaWYgKCFtbWMtPm9jcl9hdmFpbCkgeworCQlpZiAocGRhdGEgJiYgcGRhdGEtPm9jcl9hdmFpbCkKKwkJCW1tYy0+b2NyX2F2YWlsID0gcGRhdGEtPm9jcl9hdmFpbDsKIAkJZWxzZQotCQkJZ290byBvdXRfZnJlZTsKKwkJCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7CiAJfQogCiAJaWYgKGRhdDNfY2FyZF9kZXRlY3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L214cy1tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbXhzLW1tYy5jCmluZGV4IGNkNzRlNTEuLjYwYzRjYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXhzLW1tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXhzLW1tYy5jCkBAIC01ODEsMTAgKzU4MSw5IEBACiAJc3RydWN0IHJlZ3VsYXRvciAqcmVnX3ZtbWM7CiAJc3RydWN0IG14c19zc3AgKnNzcDsKIAotCWlvcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnFfZXJyID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIWlvcmVzIHx8IGlycV9lcnIgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaXJxX2VyciA8IDApCisJCXJldHVybiBpcnFfZXJyOwogCiAJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBteHNfbW1jX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykKQEAgLTU5Myw2ICs1OTIsNyBAQAogCWhvc3QgPSBtbWNfcHJpdihtbWMpOwogCXNzcCA9ICZob3N0LT5zc3A7CiAJc3NwLT5kZXYgPSAmcGRldi0+ZGV2OworCWlvcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlzc3AtPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgaW9yZXMpOwogCWlmIChJU19FUlIoc3NwLT5iYXNlKSkgewogCQlyZXQgPSBQVFJfRVJSKHNzcC0+YmFzZSk7CkBAIC02MTksNyArNjE5LDkgQEAKIAkJcmV0ID0gUFRSX0VSUihzc3AtPmNsayk7CiAJCWdvdG8gb3V0X21tY19mcmVlOwogCX0KLQljbGtfcHJlcGFyZV9lbmFibGUoc3NwLT5jbGspOworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShzc3AtPmNsayk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfbW1jX2ZyZWU7CiAKIAlyZXQgPSBteHNfbW1jX3Jlc2V0KGhvc3QpOwogCWlmIChyZXQpIHsKQEAgLTY2MCw3ICs2NjIsNyBAQAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7CiAKIAlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycV9lcnIsIG14c19tbWNfaXJxX2hhbmRsZXIsIDAsCi0JCQkgICAgICAgRFJJVkVSX05BTUUsIGhvc3QpOworCQkJICAgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBob3N0KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlX2RtYTsKIApAQCAtNzAyLDcgKzcwNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgbXhzX21tY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtNzE5LDI1ICs3MjEsMTkgQEAKIAlzdHJ1Y3QgbXhzX21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlzdHJ1Y3QgbXhzX3NzcCAqc3NwID0gJmhvc3QtPnNzcDsKIAotCWNsa19wcmVwYXJlX2VuYWJsZShzc3AtPmNsayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGNsa19wcmVwYXJlX2VuYWJsZShzc3AtPmNsayk7CiB9Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBteHNfbW1jX3BtX29wcyA9IHsKLQkuc3VzcGVuZAk9IG14c19tbWNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IG14c19tbWNfcmVzdW1lLAotfTsKICNlbmRpZgogCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobXhzX21tY19wbV9vcHMsIG14c19tbWNfc3VzcGVuZCwgbXhzX21tY19yZXN1bWUpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteHNfbW1jX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gbXhzX21tY19wcm9iZSwKIAkucmVtb3ZlCQk9IG14c19tbWNfcmVtb3ZlLAogCS5pZF90YWJsZQk9IG14c19zc3BfaWRzLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9IERSSVZFUl9OQU1FLAotI2lmZGVmIENPTkZJR19QTQogCQkucG0JPSAmbXhzX21tY19wbV9vcHMsCi0jZW5kaWYKIAkJLm9mX21hdGNoX3RhYmxlID0gbXhzX21tY19kdF9pZHMsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCmluZGV4IGRmMjdiYjQuLjdjNzFkY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9oc21tYy1vbWFwLmg+CiAKIC8qIE9NQVAgSFNNTUMgSG9zdCBDb250cm9sbGVyIFJlZ2lzdGVycyAqLwogI2RlZmluZSBPTUFQX0hTTU1DX1NZU1NUQVRVUwkweDAwMTQKQEAgLTE1NSw3ICsxNTUsNyBAQAogICogb21hcC5jIGNvbnRyb2xsZXIgZHJpdmVyLiBMdWNraWx5IHRoaXMgaXMgbm90IGN1cnJlbnRseSBkb25lIG9uIGFueSBrbm93bgogICogb21hcF9oc21tYy5jIGRldmljZS4KICAqLwotI2RlZmluZSBtbWNfc2xvdChob3N0KQkJKGhvc3QtPnBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXSkKKyNkZWZpbmUgbW1jX3BkYXRhKGhvc3QpCQlob3N0LT5wZGF0YQogCiAvKgogICogTU1DIEhvc3QgY29udHJvbGxlciByZWFkL3dyaXRlIEFQSSdzCkBAIC0yMDcsNyArMjA3LDYgQEAKIAlpbnQJCQl1c2VfZG1hLCBkbWFfY2g7CiAJc3RydWN0IGRtYV9jaGFuCQkqdHhfY2hhbjsKIAlzdHJ1Y3QgZG1hX2NoYW4JCSpyeF9jaGFuOwotCWludAkJCXNsb3RfaWQ7CiAJaW50CQkJcmVzcG9uc2VfYnVzeTsKIAlpbnQJCQljb250ZXh0X2xvc3M7CiAJaW50CQkJcHJvdGVjdF9jYXJkOwpAQCAtMjIwLDcgKzIxOSwyNiBAQAogI2RlZmluZSBIU01NQ19TRElPX0lSUV9FTkFCTEVECSgxIDw8IDEpICAgICAgICAvKiBTRElPIGlycSBlbmFibGVkICovCiAjZGVmaW5lIEhTTU1DX1dBS0VfSVJRX0VOQUJMRUQJKDEgPDwgMikKIAlzdHJ1Y3Qgb21hcF9oc21tY19uZXh0CW5leHRfZGF0YTsKLQlzdHJ1Y3QJb21hcF9tbWNfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CisJc3RydWN0CW9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CisKKwkvKiBUbyBoYW5kbGUgYm9hcmQgcmVsYXRlZCBzdXNwZW5kL3Jlc3VtZSBmdW5jdGlvbmFsaXR5IGZvciBNTUMgKi8KKwlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCWludCAoKnJlc3VtZSkoc3RydWN0IGRldmljZSAqZGV2KTsKKworCS8qIHJldHVybiBNTUMgY292ZXIgc3dpdGNoIHN0YXRlLCBjYW4gYmUgTlVMTCBpZiBub3Qgc3VwcG9ydGVkLgorCSAqCisJICogcG9zc2libGUgcmV0dXJuIHZhbHVlczoKKwkgKiAgIDAgLSBjbG9zZWQKKwkgKiAgIDEgLSBvcGVuCisJICovCisJaW50ICgqZ2V0X2NvdmVyX3N0YXRlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisJLyogQ2FyZCBkZXRlY3Rpb24gSVJRcyAqLworCWludCBjYXJkX2RldGVjdF9pcnE7CisKKwlpbnQgKCpjYXJkX2RldGVjdCkoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgKCpnZXRfcm8pKHN0cnVjdCBkZXZpY2UgKmRldik7CisKIH07CiAKIHN0cnVjdCBvbWFwX21tY19vZl9kYXRhIHsKQEAgLTIzMCw1MCArMjQ4LDQ4IEBACiAKIHN0YXRpYyB2b2lkIG9tYXBfaHNtbWNfc3RhcnRfZG1hX3RyYW5zZmVyKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpOwogCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfY2FyZF9kZXRlY3Qoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3N0YXRpYyBpbnQgb21hcF9oc21tY19jYXJkX2RldGVjdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBob3N0LT5wZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBob3N0LT5wZGF0YTsKIAogCS8qIE5PVEU6IGFzc3VtZXMgY2FyZCBkZXRlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1sb3cgKi8KLQlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnN3aXRjaF9waW4pOwogfQogCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfZ2V0X3dwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfZ2V0X3dwKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhvc3QtPnBkYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhvc3QtPnBkYXRhOwogCiAJLyogTk9URTogYXNzdW1lcyB3cml0ZSBwcm90ZWN0IHNpZ25hbCBpcyBhY3RpdmUtaGlnaCAqLwotCXJldHVybiBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnNsb3RzWzBdLmdwaW9fd3ApOworCXJldHVybiBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPmdwaW9fd3ApOwogfQogCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfZ2V0X2NvdmVyX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfZ2V0X2NvdmVyX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhvc3QtPnBkYXRhOworCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhvc3QtPnBkYXRhOwogCiAJLyogTk9URTogYXNzdW1lcyBjYXJkIGRldGVjdCBzaWduYWwgaXMgYWN0aXZlLWxvdyAqLwotCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c3dpdGNoX3Bpbik7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBvbWFwX2hzbW1jX3N1c3BlbmRfY2RpcnEoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3N0YXRpYyBpbnQgb21hcF9oc21tY19zdXNwZW5kX2NkaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhvc3QtPnBkYXRhOwogCi0JZGlzYWJsZV9pcnEobW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEpOworCWRpc2FibGVfaXJxKGhvc3QtPmNhcmRfZGV0ZWN0X2lycSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9oc21tY19yZXN1bWVfY2RpcnEoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3N0YXRpYyBpbnQgb21hcF9oc21tY19yZXN1bWVfY2RpcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaG9zdC0+cGRhdGE7CiAKLQllbmFibGVfaXJxKG1tYy0+c2xvdHNbMF0uY2FyZF9kZXRlY3RfaXJxKTsKKwllbmFibGVfaXJxKGhvc3QtPmNhcmRfZGV0ZWN0X2lycSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4Niw4ICszMDIsNyBAQAogCiAjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgogCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKLQkJCQkgICBpbnQgdmRkKQorc3RhdGljIGludCBvbWFwX2hzbW1jX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCkKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0KIAkJcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOwpAQCAtMzAwLDggKzMxNSw4IEBACiAJaWYgKCFob3N0LT52Y2MpCiAJCXJldHVybiAwOwogCi0JaWYgKG1tY19zbG90KGhvc3QpLmJlZm9yZV9zZXRfcmVnKQotCQltbWNfc2xvdChob3N0KS5iZWZvcmVfc2V0X3JlZyhkZXYsIHNsb3QsIHBvd2VyX29uLCB2ZGQpOworCWlmIChtbWNfcGRhdGEoaG9zdCktPmJlZm9yZV9zZXRfcmVnKQorCQltbWNfcGRhdGEoaG9zdCktPmJlZm9yZV9zZXRfcmVnKGRldiwgcG93ZXJfb24sIHZkZCk7CiAKIAlpZiAoaG9zdC0+cGJpYXMpIHsKIAkJaWYgKGhvc3QtPnBiaWFzX2VuYWJsZWQgPT0gMSkgewpAQCAtMzYzLDggKzM3OCw4IEBACiAJCX0KIAl9CiAKLQlpZiAobW1jX3Nsb3QoaG9zdCkuYWZ0ZXJfc2V0X3JlZykKLQkJbW1jX3Nsb3QoaG9zdCkuYWZ0ZXJfc2V0X3JlZyhkZXYsIHNsb3QsIHBvd2VyX29uLCB2ZGQpOworCWlmIChtbWNfcGRhdGEoaG9zdCktPmFmdGVyX3NldF9yZWcpCisJCW1tY19wZGF0YShob3N0KS0+YWZ0ZXJfc2V0X3JlZyhkZXYsIHBvd2VyX29uLCB2ZGQpOwogCiBlcnJvcl9zZXRfcG93ZXI6CiAJcmV0dXJuIHJldDsKQEAgLTM4MywxOCArMzk4LDE4IEBACiAJfSBlbHNlIHsKIAkJaG9zdC0+dmNjID0gcmVnOwogCQlvY3JfdmFsdWUgPSBtbWNfcmVndWxhdG9yX2dldF9vY3JtYXNrKHJlZyk7Ci0JCWlmICghbW1jX3Nsb3QoaG9zdCkub2NyX21hc2spIHsKLQkJCW1tY19zbG90KGhvc3QpLm9jcl9tYXNrID0gb2NyX3ZhbHVlOworCQlpZiAoIW1tY19wZGF0YShob3N0KS0+b2NyX21hc2spIHsKKwkJCW1tY19wZGF0YShob3N0KS0+b2NyX21hc2sgPSBvY3JfdmFsdWU7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoIShtbWNfc2xvdChob3N0KS5vY3JfbWFzayAmIG9jcl92YWx1ZSkpIHsKKwkJCWlmICghKG1tY19wZGF0YShob3N0KS0+b2NyX21hc2sgJiBvY3JfdmFsdWUpKSB7CiAJCQkJZGV2X2Vycihob3N0LT5kZXYsICJvY3JtYXNrICV4IGlzIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkJCW1tY19zbG90KGhvc3QpLm9jcl9tYXNrKTsKLQkJCQltbWNfc2xvdChob3N0KS5vY3JfbWFzayA9IDA7CisJCQkJCW1tY19wZGF0YShob3N0KS0+b2NyX21hc2spOworCQkJCW1tY19wZGF0YShob3N0KS0+b2NyX21hc2sgPSAwOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQl9CiAJfQotCW1tY19zbG90KGhvc3QpLnNldF9wb3dlciA9IG9tYXBfaHNtbWNfc2V0X3Bvd2VyOworCW1tY19wZGF0YShob3N0KS0+c2V0X3Bvd2VyID0gb21hcF9oc21tY19zZXRfcG93ZXI7CiAKIAkvKiBBbGxvdyBhbiBhdXggcmVndWxhdG9yICovCiAJcmVnID0gZGV2bV9yZWd1bGF0b3JfZ2V0X29wdGlvbmFsKGhvc3QtPmRldiwgInZtbWNfYXV4Iik7CkBAIC00MDQsNyArNDE5LDcgQEAKIAlob3N0LT5wYmlhcyA9IElTX0VSUihyZWcpID8gTlVMTCA6IHJlZzsKIAogCS8qIEZvciBlTU1DIGRvIG5vdCBwb3dlciBvZmYgd2hlbiBub3QgaW4gc2xlZXAgc3RhdGUgKi8KLQlpZiAobW1jX3Nsb3QoaG9zdCkubm9fcmVndWxhdG9yX29mZl9pbml0KQorCWlmIChtbWNfcGRhdGEoaG9zdCktPm5vX3JlZ3VsYXRvcl9vZmZfaW5pdCkKIAkJcmV0dXJuIDA7CiAJLyoKIAkgKiBUbyBkaXNhYmxlIGJvb3Rfb24gcmVndWxhdG9yLCBlbmFibGUgcmVndWxhdG9yCkBAIC00MTIsMTAgKzQyNywxMCBAQAogCSAqLwogCWlmICgoaG9zdC0+dmNjICYmIHJlZ3VsYXRvcl9pc19lbmFibGVkKGhvc3QtPnZjYykgPiAwKSB8fAogCSAgICAoaG9zdC0+dmNjX2F1eCAmJiByZWd1bGF0b3JfaXNfZW5hYmxlZChob3N0LT52Y2NfYXV4KSkpIHsKLQkJaW50IHZkZCA9IGZmcyhtbWNfc2xvdChob3N0KS5vY3JfbWFzaykgLSAxOworCQlpbnQgdmRkID0gZmZzKG1tY19wZGF0YShob3N0KS0+b2NyX21hc2spIC0gMTsKIAotCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLCAxLCB2ZGQpOwotCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLCAwLCAwKTsKKwkJbW1jX3BkYXRhKGhvc3QpLT5zZXRfcG93ZXIoaG9zdC0+ZGV2LCAxLCB2ZGQpOworCQltbWNfcGRhdGEoaG9zdCktPnNldF9wb3dlcihob3N0LT5kZXYsIDAsIDApOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDIzLDcgKzQzOCw3IEBACiAKIHN0YXRpYyB2b2lkIG9tYXBfaHNtbWNfcmVnX3B1dChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQogewotCW1tY19zbG90KGhvc3QpLnNldF9wb3dlciA9IE5VTEw7CisJbW1jX3BkYXRhKGhvc3QpLT5zZXRfcG93ZXIgPSBOVUxMOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBvbWFwX2hzbW1jX2hhdmVfcmVnKHZvaWQpCkBAIC00NDksNTUgKzQ2NCw1OSBAQAogCiAjZW5kaWYKIAotc3RhdGljIGludCBvbWFwX2hzbW1jX2dwaW9faW5pdChzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfZ3Bpb19pbml0KHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QsCisJCQkJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7CiAJaW50IHJldDsKIAotCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluKSkgewotCQlpZiAocGRhdGEtPnNsb3RzWzBdLmNvdmVyKQotCQkJcGRhdGEtPnNsb3RzWzBdLmdldF9jb3Zlcl9zdGF0ZSA9Ci0JCQkJCW9tYXBfaHNtbWNfZ2V0X2NvdmVyX3N0YXRlOworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zd2l0Y2hfcGluKSkgeworCQlpZiAocGRhdGEtPmNvdmVyKQorCQkJaG9zdC0+Z2V0X2NvdmVyX3N0YXRlID0KKwkJCQlvbWFwX2hzbW1jX2dldF9jb3Zlcl9zdGF0ZTsKIAkJZWxzZQotCQkJcGRhdGEtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0ID0gb21hcF9oc21tY19jYXJkX2RldGVjdDsKLQkJcGRhdGEtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSA9Ci0JCQkJZ3Bpb190b19pcnEocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pOwotCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4sICJtbWNfY2QiKTsKKwkJCWhvc3QtPmNhcmRfZGV0ZWN0ID0gb21hcF9oc21tY19jYXJkX2RldGVjdDsKKwkJaG9zdC0+Y2FyZF9kZXRlY3RfaXJxID0KKwkJCQlncGlvX3RvX2lycShwZGF0YS0+c3dpdGNoX3Bpbik7CisJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+c3dpdGNoX3BpbiwgIm1tY19jZCIpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pOworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChwZGF0YS0+c3dpdGNoX3Bpbik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycl9mcmVlX3NwOwotCX0gZWxzZQotCQlwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3BpbiA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcGRhdGEtPnN3aXRjaF9waW4gPSAtRUlOVkFMOworCX0KIAotCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zbG90c1swXS5ncGlvX3dwKSkgewotCQlwZGF0YS0+c2xvdHNbMF0uZ2V0X3JvID0gb21hcF9oc21tY19nZXRfd3A7Ci0JCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCwgIm1tY193cCIpOworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX3dwKSkgeworCQlob3N0LT5nZXRfcm8gPSBvbWFwX2hzbW1jX2dldF93cDsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX3dwLCAibW1jX3dwIik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycl9mcmVlX2NkOwotCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCk7CisJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBkYXRhLT5ncGlvX3dwKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyX2ZyZWVfd3A7Ci0JfSBlbHNlCi0JCXBkYXRhLT5zbG90c1swXS5ncGlvX3dwID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlwZGF0YS0+Z3Bpb193cCA9IC1FSU5WQUw7CisJfQogCiAJcmV0dXJuIDA7CiAKIGVycl9mcmVlX3dwOgotCWdwaW9fZnJlZShwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCk7CisJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX3dwKTsKIGVycl9mcmVlX2NkOgotCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluKSkKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c3dpdGNoX3BpbikpCiBlcnJfZnJlZV9zcDoKLQkJZ3Bpb19mcmVlKHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKKwkJZ3Bpb19mcmVlKHBkYXRhLT5zd2l0Y2hfcGluKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2dwaW9fZnJlZShzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2dwaW9fZnJlZShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LAorCQkJCSBzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKIHsKLQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCkpCi0JCWdwaW9fZnJlZShwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCk7Ci0JaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pKQotCQlncGlvX2ZyZWUocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pOworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX3dwKSkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX3dwKTsKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c3dpdGNoX3BpbikpCisJCWdwaW9fZnJlZShwZGF0YS0+c3dpdGNoX3Bpbik7CiB9CiAKIC8qCkBAIC02MDcsOCArNjI2LDkgQEAKIAkgKgkgIGluIGNhcGFiaWxpdGllcyByZWdpc3RlcgogCSAqCS0gTU1DL1NEIGNsb2NrIGNvbWluZyBvdXQgb2YgY29udHJvbGxlciA+IDI1TUh6CiAJICovCi0JaWYgKChtbWNfc2xvdChob3N0KS5mZWF0dXJlcyAmIEhTTU1DX0hBU19IU1BFX1NVUFBPUlQpICYmCisJaWYgKChtbWNfcGRhdGEoaG9zdCktPmZlYXR1cmVzICYgSFNNTUNfSEFTX0hTUEVfU1VQUE9SVCkgJiYKIAkgICAgKGlvcy0+dGltaW5nICE9IE1NQ19USU1JTkdfTU1DX0REUjUyKSAmJgorCSAgICAoaW9zLT50aW1pbmcgIT0gTU1DX1RJTUlOR19VSFNfRERSNTApICYmCiAJICAgICgoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENBUEEpICYgSFNTKSA9PSBIU1MpKSB7CiAJCXJlZ3ZhbCA9IE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKTsKIAkJaWYgKGNsa2RpdiAmJiAoY2xrX2dldF9yYXRlKGhvc3QtPmZjbGspL2Nsa2RpdikgPiAyNTAwMDAwMCkKQEAgLTYyOCw3ICs2NDgsOCBAQAogCXUzMiBjb247CiAKIAljb24gPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ09OKTsKLQlpZiAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfRERSNTIpCisJaWYgKGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfTU1DX0REUjUyIHx8CisJICAgIGlvcy0+dGltaW5nID09IE1NQ19USU1JTkdfVUhTX0REUjUwKQogCQljb24gfD0gRERSOwkvKiBjb25maWd1cmUgaW4gRERSIG1vZGUgKi8KIAllbHNlCiAJCWNvbiAmPSB+RERSOwpAQCAtNzkxLDggKzgxMiw4IEBACiB7CiAJaW50IHIgPSAxOwogCi0JaWYgKG1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZSkKLQkJciA9IG1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZShob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQpOworCWlmIChob3N0LT5nZXRfY292ZXJfc3RhdGUpCisJCXIgPSBob3N0LT5nZXRfY292ZXJfc3RhdGUoaG9zdC0+ZGV2KTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtODE2LDcgKzgzNyw3IEBACiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbW1jX2hvc3QsIGNsYXNzX2Rldik7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgbW1jX3Nsb3QoaG9zdCkubmFtZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1tY19wZGF0YShob3N0KS0+bmFtZSk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihzbG90X25hbWUsIFNfSVJVR08sIG9tYXBfaHNtbWNfc2hvd19zbG90X25hbWUsIE5VTEwpOwpAQCAtMTA2MSw3ICsxMDgyLDcgQEAKIAkgKiBPTUFQNCBFUzIgYW5kIGdyZWF0ZXIgaGFzIGFuIHVwZGF0ZWQgcmVzZXQgbG9naWMuCiAJICogTW9uaXRvciBhIDAtPjEgdHJhbnNpdGlvbiBmaXJzdAogCSAqLwotCWlmIChtbWNfc2xvdChob3N0KS5mZWF0dXJlcyAmIEhTTU1DX0hBU19VUERBVEVEX1JFU0VUKSB7CisJaWYgKG1tY19wZGF0YShob3N0KS0+ZmVhdHVyZXMgJiBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVCkgewogCQl3aGlsZSAoKCEoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NUTCkgJiBiaXQpKQogCQkJCQkmJiAoaSsrIDwgbGltaXQpKQogCQkJdWRlbGF5KDEpOwpAQCAtMTIxMCwxMiArMTIzMSwxMSBAQAogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+ZGJjbGspOwogCiAJLyogVHVybiB0aGUgcG93ZXIgb2ZmICovCi0JcmV0ID0gbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCwgMCwgMCk7CisJcmV0ID0gbW1jX3BkYXRhKGhvc3QpLT5zZXRfcG93ZXIoaG9zdC0+ZGV2LCAwLCAwKTsKIAogCS8qIFR1cm4gdGhlIHBvd2VyIE9OIHdpdGggZ2l2ZW4gVkREIDEuOCBvciAzLjB2ICovCiAJaWYgKCFyZXQpCi0JCXJldCA9IG1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDEsCi0JCQkJCSAgICAgICB2ZGQpOworCQlyZXQgPSBtbWNfcGRhdGEoaG9zdCktPnNldF9wb3dlcihob3N0LT5kZXYsIDEsIHZkZCk7CiAJcG1fcnVudGltZV9nZXRfc3luYyhob3N0LT5kZXYpOwogCWlmIChob3N0LT5kYmNsaykKIAkJY2xrX3ByZXBhcmVfZW5hYmxlKGhvc3QtPmRiY2xrKTsKQEAgLTEyNTksMTEgKzEyNzksMTEgQEAKIC8qIFByb3RlY3QgdGhlIGNhcmQgd2hpbGUgdGhlIGNvdmVyIGlzIG9wZW4gKi8KIHN0YXRpYyB2b2lkIG9tYXBfaHNtbWNfcHJvdGVjdF9jYXJkKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCiB7Ci0JaWYgKCFtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUpCisJaWYgKCFob3N0LT5nZXRfY292ZXJfc3RhdGUpCiAJCXJldHVybjsKIAogCWhvc3QtPnJlcXNfYmxvY2tlZCA9IDA7Ci0JaWYgKG1tY19zbG90KGhvc3QpLmdldF9jb3Zlcl9zdGF0ZShob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQpKSB7CisJaWYgKGhvc3QtPmdldF9jb3Zlcl9zdGF0ZShob3N0LT5kZXYpKSB7CiAJCWlmIChob3N0LT5wcm90ZWN0X2NhcmQpIHsKIAkJCWRldl9pbmZvKGhvc3QtPmRldiwgIiVzOiBjb3ZlciBpcyBjbG9zZWQsICIKIAkJCQkJICJjYXJkIGlzIG5vdyBhY2Nlc3NpYmxlXG4iLApAQCAtMTI4NiwxMyArMTMwNiwxMiBAQAogc3RhdGljIGlycXJldHVybl90IG9tYXBfaHNtbWNfZGV0ZWN0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2lkOwotCXN0cnVjdCBvbWFwX21tY19zbG90X2RhdGEgKnNsb3QgPSAmbW1jX3Nsb3QoaG9zdCk7CiAJaW50IGNhcmRkZXRlY3Q7CiAKIAlzeXNmc19ub3RpZnkoJmhvc3QtPm1tYy0+Y2xhc3NfZGV2LmtvYmosIE5VTEwsICJjb3Zlcl9zd2l0Y2giKTsKIAotCWlmIChzbG90LT5jYXJkX2RldGVjdCkKLQkJY2FyZGRldGVjdCA9IHNsb3QtPmNhcmRfZGV0ZWN0KGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCk7CisJaWYgKGhvc3QtPmNhcmRfZGV0ZWN0KQorCQljYXJkZGV0ZWN0ID0gaG9zdC0+Y2FyZF9kZXRlY3QoaG9zdC0+ZGV2KTsKIAllbHNlIHsKIAkJb21hcF9oc21tY19wcm90ZWN0X2NhcmQoaG9zdCk7CiAJCWNhcmRkZXRlY3QgPSAtRU5PU1lTOwpAQCAtMTYxOCwxMiArMTYzNywxMCBAQAogCWlmIChpb3MtPnBvd2VyX21vZGUgIT0gaG9zdC0+cG93ZXJfbW9kZSkgewogCQlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgewogCQljYXNlIE1NQ19QT1dFUl9PRkY6Ci0JCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLAotCQkJCQkJIDAsIDApOworCQkJbW1jX3BkYXRhKGhvc3QpLT5zZXRfcG93ZXIoaG9zdC0+ZGV2LCAwLCAwKTsKIAkJCWJyZWFrOwogCQljYXNlIE1NQ19QT1dFUl9VUDoKLQkJCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsCi0JCQkJCQkgMSwgaW9zLT52ZGQpOworCQkJbW1jX3BkYXRhKGhvc3QpLT5zZXRfcG93ZXIoaG9zdC0+ZGV2LCAxLCBpb3MtPnZkZCk7CiAJCQlicmVhazsKIAkJY2FzZSBNTUNfUE9XRVJfT046CiAJCQlkb19zZW5kX2luaXRfc3RyZWFtID0gMTsKQEAgLTE2NjgsMjYgKzE2ODUsMjYgQEAKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAotCWlmICghbW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QpCisJaWYgKCFob3N0LT5jYXJkX2RldGVjdCkKIAkJcmV0dXJuIC1FTk9TWVM7Ci0JcmV0dXJuIG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0KGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCk7CisJcmV0dXJuIGhvc3QtPmNhcmRfZGV0ZWN0KGhvc3QtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKLQlpZiAoIW1tY19zbG90KGhvc3QpLmdldF9ybykKKwlpZiAoIWhvc3QtPmdldF9ybykKIAkJcmV0dXJuIC1FTk9TWVM7Ci0JcmV0dXJuIG1tY19zbG90KGhvc3QpLmdldF9ybyhob3N0LT5kZXYsIDApOworCXJldHVybiBob3N0LT5nZXRfcm8oaG9zdC0+ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgb21hcF9oc21tY19pbml0X2NhcmQoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAotCWlmIChtbWNfc2xvdChob3N0KS5pbml0X2NhcmQpCi0JCW1tY19zbG90KGhvc3QpLmluaXRfY2FyZChjYXJkKTsKKwlpZiAobW1jX3BkYXRhKGhvc3QpLT5pbml0X2NhcmQpCisJCW1tY19wZGF0YShob3N0KS0+aW5pdF9jYXJkKGNhcmQpOwogfQogCiBzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSkKQEAgLTE5NTcsOSArMTk3NCw5IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb21hcF9tbWNfb2ZfbWF0Y2gpOwogCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm9mX2dldF9oc21tY19wZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqb2ZfZ2V0X2hzbW1jX3BkYXRhKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKIAl1MzIgYnVzX3dpZHRoLCBtYXhfZnJlcTsKIAlpbnQgY2RfZ3Bpbywgd3BfZ3BpbzsKQEAgLTE5NzYsNDAgKzE5OTMsMzggQEAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgInRpLGR1YWwtdm9sdCIsIE5VTEwpKQogCQlwZGF0YS0+Y29udHJvbGxlcl9mbGFncyB8PSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVDsKIAotCS8qIFRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgMSBzbG90ICovCi0JcGRhdGEtPm5yX3Nsb3RzID0gMTsKLQlwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3BpbiA9IGNkX2dwaW87Ci0JcGRhdGEtPnNsb3RzWzBdLmdwaW9fd3AgPSB3cF9ncGlvOworCXBkYXRhLT5zd2l0Y2hfcGluID0gY2RfZ3BpbzsKKwlwZGF0YS0+Z3Bpb193cCA9IHdwX2dwaW87CiAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgInRpLG5vbi1yZW1vdmFibGUiLCBOVUxMKSkgewotCQlwZGF0YS0+c2xvdHNbMF0ubm9ucmVtb3ZhYmxlID0gdHJ1ZTsKLQkJcGRhdGEtPnNsb3RzWzBdLm5vX3JlZ3VsYXRvcl9vZmZfaW5pdCA9IHRydWU7CisJCXBkYXRhLT5ub25yZW1vdmFibGUgPSB0cnVlOworCQlwZGF0YS0+bm9fcmVndWxhdG9yX29mZl9pbml0ID0gdHJ1ZTsKIAl9CiAJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJidXMtd2lkdGgiLCAmYnVzX3dpZHRoKTsKIAlpZiAoYnVzX3dpZHRoID09IDQpCi0JCXBkYXRhLT5zbG90c1swXS5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKKwkJcGRhdGEtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwogCWVsc2UgaWYgKGJ1c193aWR0aCA9PSA4KQotCQlwZGF0YS0+c2xvdHNbMF0uY2FwcyB8PSBNTUNfQ0FQXzhfQklUX0RBVEE7CisJCXBkYXRhLT5jYXBzIHw9IE1NQ19DQVBfOF9CSVRfREFUQTsKIAogCWlmIChvZl9maW5kX3Byb3BlcnR5KG5wLCAidGksbmVlZHMtc3BlY2lhbC1yZXNldCIsIE5VTEwpKQotCQlwZGF0YS0+c2xvdHNbMF0uZmVhdHVyZXMgfD0gSFNNTUNfSEFTX1VQREFURURfUkVTRVQ7CisJCXBkYXRhLT5mZWF0dXJlcyB8PSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVDsKIAogCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJtYXgtZnJlcXVlbmN5IiwgJm1heF9mcmVxKSkKIAkJcGRhdGEtPm1heF9mcmVxID0gbWF4X2ZyZXE7CiAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgInRpLG5lZWRzLXNwZWNpYWwtaHMtaGFuZGxpbmciLCBOVUxMKSkKLQkJcGRhdGEtPnNsb3RzWzBdLmZlYXR1cmVzIHw9IEhTTU1DX0hBU19IU1BFX1NVUFBPUlQ7CisJCXBkYXRhLT5mZWF0dXJlcyB8PSBIU01NQ19IQVNfSFNQRV9TVVBQT1JUOwogCiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkobnAsICJrZWVwLXBvd2VyLWluLXN1c3BlbmQiLCBOVUxMKSkKLQkJcGRhdGEtPnNsb3RzWzBdLnBtX2NhcHMgfD0gTU1DX1BNX0tFRVBfUE9XRVI7CisJCXBkYXRhLT5wbV9jYXBzIHw9IE1NQ19QTV9LRUVQX1BPV0VSOwogCiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkobnAsICJlbmFibGUtc2Rpby13YWtldXAiLCBOVUxMKSkKLQkJcGRhdGEtPnNsb3RzWzBdLnBtX2NhcHMgfD0gTU1DX1BNX1dBS0VfU0RJT19JUlE7CisJCXBkYXRhLT5wbV9jYXBzIHw9IE1NQ19QTV9XQUtFX1NESU9fSVJROwogCiAJcmV0dXJuIHBkYXRhOwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YQogCQkJKm9mX2dldF9oc21tY19wZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC0yMDE4LDcgKzIwMzMsNyBAQAogCiBzdGF0aWMgaW50IG9tYXBfaHNtbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtMjA0OCwxMSArMjA2Myw2IEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JaWYgKHBkYXRhLT5ucl9zbG90cyA9PSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIFNsb3RzXG4iKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMIHx8IGlycSA8IDApCkBAIC0yMDYyLDE0ICsyMDcyLDEwIEBACiAJaWYgKElTX0VSUihiYXNlKSkKIAkJcmV0dXJuIFBUUl9FUlIoYmFzZSk7CiAKLQlyZXQgPSBvbWFwX2hzbW1jX2dwaW9faW5pdChwZGF0YSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KIAltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCksICZwZGV2LT5kZXYpOwogCWlmICghbW1jKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2FsbG9jOworCQlnb3RvIGVycjsKIAl9CiAKIAlob3N0CQk9IG1tY19wcml2KG1tYyk7CkBAIC0yMDc5LDEzICsyMDg1LDE2IEBACiAJaG9zdC0+dXNlX2RtYQk9IDE7CiAJaG9zdC0+ZG1hX2NoCT0gLTE7CiAJaG9zdC0+aXJxCT0gaXJxOwotCWhvc3QtPnNsb3RfaWQJPSAwOwogCWhvc3QtPm1hcGJhc2UJPSByZXMtPnN0YXJ0ICsgcGRhdGEtPnJlZ19vZmZzZXQ7CiAJaG9zdC0+YmFzZQk9IGJhc2UgKyBwZGF0YS0+cmVnX29mZnNldDsKIAlob3N0LT5wb3dlcl9tb2RlID0gTU1DX1BPV0VSX09GRjsKIAlob3N0LT5uZXh0X2RhdGEuY29va2llID0gMTsKIAlob3N0LT5wYmlhc19lbmFibGVkID0gMDsKIAorCXJldCA9IG9tYXBfaHNtbWNfZ3Bpb19pbml0KGhvc3QsIHBkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9ncGlvOworCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CiAKIAlpZiAocGRldi0+ZGV2Lm9mX25vZGUpCkBAIC0yMTQ0LDE0ICsyMTUzLDE0IEBACiAJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVEIHwKIAkJICAgICBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWSB8IE1NQ19DQVBfRVJBU0U7CiAKLQltbWMtPmNhcHMgfD0gbW1jX3Nsb3QoaG9zdCkuY2FwczsKKwltbWMtPmNhcHMgfD0gbW1jX3BkYXRhKGhvc3QpLT5jYXBzOwogCWlmIChtbWMtPmNhcHMgJiBNTUNfQ0FQXzhfQklUX0RBVEEpCiAJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAKLQlpZiAobW1jX3Nsb3QoaG9zdCkubm9ucmVtb3ZhYmxlKQorCWlmIChtbWNfcGRhdGEoaG9zdCktPm5vbnJlbW92YWJsZSkKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTk9OUkVNT1ZBQkxFOwogCi0JbW1jLT5wbV9jYXBzID0gbW1jX3Nsb3QoaG9zdCkucG1fY2FwczsKKwltbWMtPnBtX2NhcHMgPSBtbWNfcGRhdGEoaG9zdCktPnBtX2NhcHM7CiAKIAlvbWFwX2hzbW1jX2NvbmZfYnVzX3Bvd2VyKGhvc3QpOwogCkBAIC0yMjA0LDI3ICsyMjEzLDE5IEBACiAJCWdvdG8gZXJyX2lycTsKIAl9CiAKLQlpZiAocGRhdGEtPmluaXQgIT0gTlVMTCkgewotCQlpZiAocGRhdGEtPmluaXQoJnBkZXYtPmRldikgIT0gMCkgewotCQkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksCi0JCQkJIlVuYWJsZSB0byBjb25maWd1cmUgTU1DIElSUXNcbiIpOwotCQkJZ290byBlcnJfaXJxOwotCQl9Ci0JfQotCi0JaWYgKG9tYXBfaHNtbWNfaGF2ZV9yZWcoKSAmJiAhbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyKSB7CisJaWYgKG9tYXBfaHNtbWNfaGF2ZV9yZWcoKSAmJiAhbW1jX3BkYXRhKGhvc3QpLT5zZXRfcG93ZXIpIHsKIAkJcmV0ID0gb21hcF9oc21tY19yZWdfZ2V0KGhvc3QpOwogCQlpZiAocmV0KQotCQkJZ290byBlcnJfcmVnOworCQkJZ290byBlcnJfaXJxOwogCQlob3N0LT51c2VfcmVnID0gMTsKIAl9CiAKLQltbWMtPm9jcl9hdmFpbCA9IG1tY19zbG90KGhvc3QpLm9jcl9tYXNrOworCW1tYy0+b2NyX2F2YWlsID0gbW1jX3BkYXRhKGhvc3QpLT5vY3JfbWFzazsKIAogCS8qIFJlcXVlc3QgSVJRIGZvciBjYXJkIGRldGVjdCAqLwotCWlmICgobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxKSkgeworCWlmIChob3N0LT5jYXJkX2RldGVjdF9pcnEpIHsKIAkJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmcGRldi0+ZGV2LAotCQkJCQkJbW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxLAorCQkJCQkJaG9zdC0+Y2FyZF9kZXRlY3RfaXJxLAogCQkJCQkJTlVMTCwgb21hcF9oc21tY19kZXRlY3QsCiAJCQkJCSAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfT05FU0hPVCwKIAkJCQkJICAgbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QpOwpAQCAtMjIzMyw4ICsyMjM0LDggQEAKIAkJCQkiVW5hYmxlIHRvIGdyYWIgTU1DIENEIElSUVxuIik7CiAJCQlnb3RvIGVycl9pcnFfY2Q7CiAJCX0KLQkJcGRhdGEtPnN1c3BlbmQgPSBvbWFwX2hzbW1jX3N1c3BlbmRfY2RpcnE7Ci0JCXBkYXRhLT5yZXN1bWUgPSBvbWFwX2hzbW1jX3Jlc3VtZV9jZGlycTsKKwkJaG9zdC0+c3VzcGVuZCA9IG9tYXBfaHNtbWNfc3VzcGVuZF9jZGlycTsKKwkJaG9zdC0+cmVzdW1lID0gb21hcF9oc21tY19yZXN1bWVfY2RpcnE7CiAJfQogCiAJb21hcF9oc21tY19kaXNhYmxlX2lycShob3N0KTsKQEAgLTIyNTUsMTIgKzIyNTYsMTIgQEAKIAogCW1tY19hZGRfaG9zdChtbWMpOwogCi0JaWYgKG1tY19zbG90KGhvc3QpLm5hbWUgIT0gTlVMTCkgeworCWlmIChtbWNfcGRhdGEoaG9zdCktPm5hbWUgIT0gTlVMTCkgewogCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1tYy0+Y2xhc3NfZGV2LCAmZGV2X2F0dHJfc2xvdF9uYW1lKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9zbG90X25hbWU7CiAJfQotCWlmIChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEgJiYgbW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlKSB7CisJaWYgKGhvc3QtPmNhcmRfZGV0ZWN0X2lycSAmJiBob3N0LT5nZXRfY292ZXJfc3RhdGUpIHsKIAkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZtbWMtPmNsYXNzX2RldiwKIAkJCQkJJmRldl9hdHRyX2NvdmVyX3N3aXRjaCk7CiAJCWlmIChyZXQgPCAwKQpAQCAtMjI3OCw5ICsyMjc5LDYgQEAKIGVycl9pcnFfY2Q6CiAJaWYgKGhvc3QtPnVzZV9yZWcpCiAJCW9tYXBfaHNtbWNfcmVnX3B1dChob3N0KTsKLWVycl9yZWc6Ci0JaWYgKGhvc3QtPnBkYXRhLT5jbGVhbnVwKQotCQlob3N0LT5wZGF0YS0+Y2xlYW51cCgmcGRldi0+ZGV2KTsKIGVycl9pcnE6CiAJaWYgKGhvc3QtPnR4X2NoYW4pCiAJCWRtYV9yZWxlYXNlX2NoYW5uZWwoaG9zdC0+dHhfY2hhbik7CkBAIC0yMjkxLDkgKzIyODksOSBAQAogCWlmIChob3N0LT5kYmNsaykKIAkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPmRiY2xrKTsKIGVycjE6CisJb21hcF9oc21tY19ncGlvX2ZyZWUoaG9zdCwgcGRhdGEpOworZXJyX2dwaW86CiAJbW1jX2ZyZWVfaG9zdChtbWMpOwotZXJyX2FsbG9jOgotCW9tYXBfaHNtbWNfZ3Bpb19mcmVlKHBkYXRhKTsKIGVycjoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjMwNiw4ICsyMzA0LDYgQEAKIAltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKIAlpZiAoaG9zdC0+dXNlX3JlZykKIAkJb21hcF9oc21tY19yZWdfcHV0KGhvc3QpOwotCWlmIChob3N0LT5wZGF0YS0+Y2xlYW51cCkKLQkJaG9zdC0+cGRhdGEtPmNsZWFudXAoJnBkZXYtPmRldik7CiAKIAlpZiAoaG9zdC0+dHhfY2hhbikKIAkJZG1hX3JlbGVhc2VfY2hhbm5lbChob3N0LT50eF9jaGFuKTsKQEAgLTIzMTksNyArMjMxNSw3IEBACiAJaWYgKGhvc3QtPmRiY2xrKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+ZGJjbGspOwogCi0Jb21hcF9oc21tY19ncGlvX2ZyZWUoaG9zdC0+cGRhdGEpOworCW9tYXBfaHNtbWNfZ3Bpb19mcmVlKGhvc3QsIGhvc3QtPnBkYXRhKTsKIAltbWNfZnJlZV9ob3N0KGhvc3QtPm1tYyk7CiAKIAlyZXR1cm4gMDsKQEAgLTIzMzAsOCArMjMyNiw4IEBACiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKGhvc3QtPnBkYXRhLT5zdXNwZW5kKQotCQlyZXR1cm4gaG9zdC0+cGRhdGEtPnN1c3BlbmQoZGV2LCBob3N0LT5zbG90X2lkKTsKKwlpZiAoaG9zdC0+c3VzcGVuZCkKKwkJcmV0dXJuIGhvc3QtPnN1c3BlbmQoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjM0MCw4ICsyMzM2LDggQEAKIHsKIAlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoaG9zdC0+cGRhdGEtPnJlc3VtZSkKLQkJaG9zdC0+cGRhdGEtPnJlc3VtZShkZXYsIGhvc3QtPnNsb3RfaWQpOworCWlmIChob3N0LT5yZXN1bWUpCisJCWhvc3QtPnJlc3VtZShkZXYpOwogCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1hY3BpLmMKaW5kZXggOWNjY2MwZS4uYzAxZWFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1hY3BpLmMKQEAgLTc2LDYgKzc2LDcgQEAKIAljb25zdCBzdHJ1Y3Qgc2RoY2lfYWNwaV9zbG90CSpzbG90OwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OwogCWJvb2wJCQkJdXNlX3J1bnRpbWVfcG07CisJYm9vbAkJCQlkbWFfc2V0dXA7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2RoY2lfYWNwaV9mbGFnKHN0cnVjdCBzZGhjaV9hY3BpX2hvc3QgKmMsIHVuc2lnbmVkIGludCBmbGFnKQpAQCAtODUsNyArODYsMjkgQEAKIAogc3RhdGljIGludCBzZGhjaV9hY3BpX2VuYWJsZV9kbWEoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7Ci0JcmV0dXJuIDA7CisJc3RydWN0IHNkaGNpX2FjcGlfaG9zdCAqYyA9IHNkaGNpX3ByaXYoaG9zdCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmMtPnBkZXYtPmRldjsKKwlpbnQgZXJyID0gLTE7CisKKwlpZiAoYy0+ZG1hX3NldHVwKQorCQlyZXR1cm4gMDsKKworCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV82NF9CSVRfRE1BKSB7CisJCWlmIChob3N0LT5xdWlya3MyICYgU0RIQ0lfUVVJUksyX0JST0tFTl82NF9CSVRfRE1BKSB7CisJCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFXzY0X0JJVF9ETUE7CisJCX0gZWxzZSB7CisJCQllcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJCQlpZiAoZXJyKQorCQkJCWRldl93YXJuKGRldiwgIkZhaWxlZCB0byBzZXQgNjQtYml0IERNQSBtYXNrXG4iKTsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCWVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soMzIpKTsKKworCWMtPmRtYV9zZXR1cCA9ICFlcnI7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBzZGhjaV9hY3BpX2ludF9od19yZXNldChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKQEAgLTE4MCwxNyArMjAzLDIxIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX2FjcGlfc2xvdCBzZGhjaV9hY3BpX3Nsb3RfaW50X2VtbWMgPSB7CiAJLmNoaXAgICAgPSAmc2RoY2lfYWNwaV9jaGlwX2ludCwKIAkuY2FwcyAgICA9IE1NQ19DQVBfOF9CSVRfREFUQSB8IE1NQ19DQVBfTk9OUkVNT1ZBQkxFIHwKLQkJICAgTU1DX0NBUF9IV19SRVNFVCB8IE1NQ19DQVBfMV84Vl9ERFIsCisJCSAgIE1NQ19DQVBfSFdfUkVTRVQgfCBNTUNfQ0FQXzFfOFZfRERSIHwKKwkJICAgTU1DX0NBUF9CVVNfV0lEVEhfVEVTVCB8IE1NQ19DQVBfV0FJVF9XSElMRV9CVVNZLAogCS5jYXBzMiAgID0gTU1DX0NBUDJfSENfRVJBU0VfU1osCiAJLmZsYWdzICAgPSBTREhDSV9BQ1BJX1JVTlRJTUVfUE0sCisJLnF1aXJrcyAgPSBTREhDSV9RVUlSS19OT19FTkRBVFRSX0lOX05PUERFU0MsCiAJLnF1aXJrczIgPSBTREhDSV9RVUlSSzJfUFJFU0VUX1ZBTFVFX0JST0tFTiB8IFNESENJX1FVSVJLMl9TVE9QX1dJVEhfVEMsCiAJLnByb2JlX3Nsb3QJPSBzZGhjaV9hY3BpX2VtbWNfcHJvYmVfc2xvdCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RoY2lfYWNwaV9zbG90IHNkaGNpX2FjcGlfc2xvdF9pbnRfc2RpbyA9IHsKLQkucXVpcmtzICA9IFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTiwKKwkucXVpcmtzICA9IFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTiB8CisJCSAgIFNESENJX1FVSVJLX05PX0VOREFUVFJfSU5fTk9QREVTQywKIAkucXVpcmtzMiA9IFNESENJX1FVSVJLMl9IT1NUX09GRl9DQVJEX09OLAotCS5jYXBzICAgID0gTU1DX0NBUF9OT05SRU1PVkFCTEUgfCBNTUNfQ0FQX1BPV0VSX09GRl9DQVJELAorCS5jYXBzICAgID0gTU1DX0NBUF9OT05SRU1PVkFCTEUgfCBNTUNfQ0FQX1BPV0VSX09GRl9DQVJEIHwKKwkJICAgTU1DX0NBUF9CVVNfV0lEVEhfVEVTVCB8IE1NQ19DQVBfV0FJVF9XSElMRV9CVVNZLAogCS5mbGFncyAgID0gU0RIQ0lfQUNQSV9SVU5USU1FX1BNLAogCS5wbV9jYXBzID0gTU1DX1BNX0tFRVBfUE9XRVIsCiAJLnByb2JlX3Nsb3QJPSBzZGhjaV9hY3BpX3NkaW9fcHJvYmVfc2xvdCwKQEAgLTE5OSw4ICsyMjYsMTAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RoY2lfYWNwaV9zbG90IHNkaGNpX2FjcGlfc2xvdF9pbnRfc2QgPSB7CiAJLmZsYWdzICAgPSBTREhDSV9BQ1BJX1NEX0NEIHwgU0RIQ0lfQUNQSV9TRF9DRF9PVkVSUklERV9MRVZFTCB8CiAJCSAgIFNESENJX0FDUElfUlVOVElNRV9QTSwKKwkucXVpcmtzICA9IFNESENJX1FVSVJLX05PX0VOREFUVFJfSU5fTk9QREVTQywKIAkucXVpcmtzMiA9IFNESENJX1FVSVJLMl9DQVJEX09OX05FRURTX0JVU19PTiB8CiAJCSAgIFNESENJX1FVSVJLMl9TVE9QX1dJVEhfVEMsCisJLmNhcHMgICAgPSBNTUNfQ0FQX0JVU19XSURUSF9URVNUIHwgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1ksCiAJLnByb2JlX3Nsb3QJPSBzZGhjaV9hY3BpX3NkX3Byb2JlX3Nsb3QsCiB9OwogCkBAIC0zMDUsMjEgKzMzNCw2IEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCi0JaWYgKCFkZXYtPmRtYV9tYXNrKSB7Ci0JCXU2NCBkbWFfbWFzazsKLQotCQlpZiAoc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfQ0FQQUJJTElUSUVTKSAmIFNESENJX0NBTl82NEJJVCkgewotCQkJLyogNjQtYml0IERNQSBpcyBub3Qgc3VwcG9ydGVkIGF0IHByZXNlbnQgKi8KLQkJCWRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQkJfSBlbHNlIHsKLQkJCWRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQkJfQotCi0JCWVyciA9IGRtYV9jb2VyY2VfbWFza19hbmRfY29oZXJlbnQoZGV2LCBkbWFfbWFzayk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9mcmVlOwotCX0KLQogCWlmIChjLT5zbG90KSB7CiAJCWlmIChjLT5zbG90LT5wcm9iZV9zbG90KSB7CiAJCQllcnIgPSBjLT5zbG90LT5wcm9iZV9zbG90KHBkZXYsIGhpZCwgdWlkKTsKQEAgLTQxNiw3ICs0MzAsNyBAQAogCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAKIHN0YXRpYyBpbnQgc2RoY2lfYWNwaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMtaW14LmMKaW5kZXggNTg3ZWUwZS4uYWYxZjdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLWlteC5jCkBAIC02NSw4ICs2NSw2IEBACiAvKiBOT1RFOiB0aGUgbWluaW11bSB2YWxpZCB0dW5pbmcgc3RhcnQgdGFwIGZvciBteDZzbCBpcyAxICovCiAjZGVmaW5lIEVTREhDX1RVTklOR19TVEFSVF9UQVAJCTB4MQogCi0jZGVmaW5lIEVTREhDX1RVTklOR19CTE9DS19QQVRURVJOX0xFTgk2NAotCiAvKiBwaW5jdHJsIHN0YXRlICovCiAjZGVmaW5lIEVTREhDX1BJTkNUUkxfU1RBVEVfMTAwTUhaCSJzdGF0ZV8xMDBtaHoiCiAjZGVmaW5lIEVTREhDX1BJTkNUUkxfU1RBVEVfMjAwTUhaCSJzdGF0ZV8yMDBtaHoiCkBAIC02OTIsOCArNjkwLDYgQEAKIAkvKiBGSVhNRTogZGVsYXkgYSBiaXQgZm9yIGNhcmQgdG8gYmUgcmVhZHkgZm9yIG5leHQgdHVuaW5nIGR1ZSB0byBlcnJvcnMgKi8KIAltZGVsYXkoMSk7CiAKLQkvKiBUaGlzIGlzIGJhbGFuY2VkIGJ5IHRoZSBydW50aW1lIHB1dCBpbiBzZGhjaV90YXNrbGV0X2ZpbmlzaCAqLwotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaG9zdC0+bW1jLT5wYXJlbnQpOwogCXJlZyA9IHJlYWRsKGhvc3QtPmlvYWRkciArIEVTREhDX01JWF9DVFJMKTsKIAlyZWcgfD0gRVNESENfTUlYX0NUUkxfRVhFX1RVTkUgfCBFU0RIQ19NSVhfQ1RSTF9TTVBDTEtfU0VMIHwKIAkJCUVTREhDX01JWF9DVFJMX0ZCQ0xLX1NFTDsKQEAgLTcwNCw1NCArNzAwLDYgQEAKIAkJCXZhbCwgcmVhZGwoaG9zdC0+aW9hZGRyICsgRVNESENfVFVORV9DVFJMX1NUQVRVUykpOwogfQogCi1zdGF0aWMgdm9pZCBlc2RoY19yZXF1ZXN0X2RvbmUoc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCi17Ci0JY29tcGxldGUoJm1ycS0+Y29tcGxldGlvbik7Ci19Ci0KLXN0YXRpYyBpbnQgZXNkaGNfc2VuZF90dW5pbmdfY21kKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgb3Bjb2RlLAotCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQotewotCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQgPSB7MH07Ci0Jc3RydWN0IG1tY19yZXF1ZXN0IG1ycSA9IHtOVUxMfTsKLQlzdHJ1Y3QgbW1jX2RhdGEgZGF0YSA9IHswfTsKLQotCWNtZC5vcGNvZGUgPSBvcGNvZGU7Ci0JY21kLmFyZyA9IDA7Ci0JY21kLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQURUQzsKLQotCWRhdGEuYmxrc3ogPSBFU0RIQ19UVU5JTkdfQkxPQ0tfUEFUVEVSTl9MRU47Ci0JZGF0YS5ibG9ja3MgPSAxOwotCWRhdGEuZmxhZ3MgPSBNTUNfREFUQV9SRUFEOwotCWRhdGEuc2cgPSBzZzsKLQlkYXRhLnNnX2xlbiA9IDE7Ci0KLQltcnEuY21kID0gJmNtZDsKLQltcnEuY21kLT5tcnEgPSAmbXJxOwotCW1ycS5kYXRhID0gJmRhdGE7Ci0JbXJxLmRhdGEtPm1ycSA9ICZtcnE7Ci0JbXJxLmNtZC0+ZGF0YSA9IG1ycS5kYXRhOwotCi0JbXJxLmRvbmUgPSBlc2RoY19yZXF1ZXN0X2RvbmU7Ci0JaW5pdF9jb21wbGV0aW9uKCYobXJxLmNvbXBsZXRpb24pKTsKLQotCXNwaW5fbG9ja19pcnEoJmhvc3QtPmxvY2spOwotCWhvc3QtPm1ycSA9ICZtcnE7Ci0KLQlzZGhjaV9zZW5kX2NvbW1hbmQoaG9zdCwgbXJxLmNtZCk7Ci0KLQlzcGluX3VubG9ja19pcnEoJmhvc3QtPmxvY2spOwotCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmbXJxLmNvbXBsZXRpb24pOwotCi0JaWYgKGNtZC5lcnJvcikKLQkJcmV0dXJuIGNtZC5lcnJvcjsKLQlpZiAoZGF0YS5lcnJvcikKLQkJcmV0dXJuIGRhdGEuZXJyb3I7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgZXNkaGNfcG9zdF90dW5pbmcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7CiAJdTMyIHJlZzsKQEAgLTc2MywyMSArNzExLDEzIEBACiAKIHN0YXRpYyBpbnQgZXNkaGNfZXhlY3V0aW5nX3R1bmluZyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIG9wY29kZSkKIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7Ci0JY2hhciAqdHVuaW5nX3BhdHRlcm47CiAJaW50IG1pbiwgbWF4LCBhdmcsIHJldDsKIAotCXR1bmluZ19wYXR0ZXJuID0ga21hbGxvYyhFU0RIQ19UVU5JTkdfQkxPQ0tfUEFUVEVSTl9MRU4sIEdGUF9LRVJORUwpOwotCWlmICghdHVuaW5nX3BhdHRlcm4pCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc2dfaW5pdF9vbmUoJnNnLCB0dW5pbmdfcGF0dGVybiwgRVNESENfVFVOSU5HX0JMT0NLX1BBVFRFUk5fTEVOKTsKLQogCS8qIGZpbmQgdGhlIG1pbmludW0gZGVsYXkgZmlyc3Qgd2hpY2ggY2FuIHBhc3MgdHVuaW5nICovCiAJbWluID0gRVNESENfVFVORV9DVFJMX01JTjsKIAl3aGlsZSAobWluIDwgRVNESENfVFVORV9DVFJMX01BWCkgewogCQllc2RoY19wcmVwYXJlX3R1bmluZyhob3N0LCBtaW4pOwotCQlpZiAoIWVzZGhjX3NlbmRfdHVuaW5nX2NtZChob3N0LCBvcGNvZGUsICZzZykpCisJCWlmICghbW1jX3NlbmRfdHVuaW5nKGhvc3QtPm1tYykpCiAJCQlicmVhazsKIAkJbWluICs9IEVTREhDX1RVTkVfQ1RSTF9TVEVQOwogCX0KQEAgLTc4Niw3ICs3MjYsNyBAQAogCW1heCA9IG1pbiArIEVTREhDX1RVTkVfQ1RSTF9TVEVQOwogCXdoaWxlIChtYXggPCBFU0RIQ19UVU5FX0NUUkxfTUFYKSB7CiAJCWVzZGhjX3ByZXBhcmVfdHVuaW5nKGhvc3QsIG1heCk7Ci0JCWlmIChlc2RoY19zZW5kX3R1bmluZ19jbWQoaG9zdCwgb3Bjb2RlLCAmc2cpKSB7CisJCWlmIChtbWNfc2VuZF90dW5pbmcoaG9zdC0+bW1jKSkgewogCQkJbWF4IC09IEVTREhDX1RVTkVfQ1RSTF9TVEVQOwogCQkJYnJlYWs7CiAJCX0KQEAgLTc5NiwxMSArNzM2LDkgQEAKIAkvKiB1c2UgYXZlcmFnZSBkZWxheSB0byBnZXQgdGhlIGJlc3QgdGltaW5nICovCiAJYXZnID0gKG1pbiArIG1heCkgLyAyOwogCWVzZGhjX3ByZXBhcmVfdHVuaW5nKGhvc3QsIGF2Zyk7Ci0JcmV0ID0gZXNkaGNfc2VuZF90dW5pbmdfY21kKGhvc3QsIG9wY29kZSwgJnNnKTsKKwlyZXQgPSBtbWNfc2VuZF90dW5pbmcoaG9zdC0+bW1jKTsKIAllc2RoY19wb3N0X3R1bmluZyhob3N0KTsKIAotCWtmcmVlKHR1bmluZ19wYXR0ZXJuKTsKLQogCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAidHVubmluZyAlcyBhdCAweCV4IHJldCAlZFxuIiwKIAkJcmV0ID8gImZhaWxlZCIgOiAicGFzc2VkIiwgYXZnLCByZXQpOwogCkBAIC0xMDMxLDExICs5NjksOCBAQAogCiAJaW14X2RhdGEtPnBpbnNfZGVmYXVsdCA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKGlteF9kYXRhLT5waW5jdHJsLAogCQkJCQkJUElOQ1RSTF9TVEFURV9ERUZBVUxUKTsKLQlpZiAoSVNfRVJSKGlteF9kYXRhLT5waW5zX2RlZmF1bHQpKSB7Ci0JCWVyciA9IFBUUl9FUlIoaW14X2RhdGEtPnBpbnNfZGVmYXVsdCk7Ci0JCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiY291bGQgbm90IGdldCBkZWZhdWx0IHN0YXRlXG4iKTsKLQkJZ290byBkaXNhYmxlX2NsazsKLQl9CisJaWYgKElTX0VSUihpbXhfZGF0YS0+cGluc19kZWZhdWx0KSkKKwkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiY291bGQgbm90IGdldCBkZWZhdWx0IHN0YXRlXG4iKTsKIAogCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19CUk9LRU5fVElNRU9VVF9WQUw7CiAKQEAgLTExMjMsNyArMTA1OCw4IEBACiAJfQogCiAJLyogc2RyNTAgYW5kIHNkcjEwNCBuZWVkcyB3b3JrIG9uIDEuOHYgc2lnbmFsIHZvbHRhZ2UgKi8KLQlpZiAoKGJvYXJkZGF0YS0+c3VwcG9ydF92c2VsKSAmJiBlc2RoY19pc191c2RoYyhpbXhfZGF0YSkpIHsKKwlpZiAoKGJvYXJkZGF0YS0+c3VwcG9ydF92c2VsKSAmJiBlc2RoY19pc191c2RoYyhpbXhfZGF0YSkgJiYKKwkgICAgIUlTX0VSUihpbXhfZGF0YS0+cGluc19kZWZhdWx0KSkgewogCQlpbXhfZGF0YS0+cGluc18xMDBtaHogPSBwaW5jdHJsX2xvb2t1cF9zdGF0ZShpbXhfZGF0YS0+cGluY3RybCwKIAkJCQkJCUVTREhDX1BJTkNUUkxfU1RBVEVfMTAwTUhaKTsKIAkJaW14X2RhdGEtPnBpbnNfMjAwbWh6ID0gcGluY3RybF9sb29rdXBfc3RhdGUoaW14X2RhdGEtPnBpbmN0cmwsCkBAIC0xMTcyLDcgKzExMDgsNyBAQAogCXBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCi0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19QTV9SVU5USU1FKSkgeworCWlmICghSVNfRU5BQkxFRChDT05GSUdfUE0pKSB7CiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbXhfZGF0YS0+Y2xrX3Blcik7CiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbXhfZGF0YS0+Y2xrX2lwZyk7CiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbXhfZGF0YS0+Y2xrX2FoYik7CkBAIC0xMTgzLDcgKzExMTksNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc2RoY2lfZXNkaGNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1tc20uYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktbXNtLmMKaW5kZXggMzA4MDQzODUuLjNkMzJjZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktbXNtLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1tc20uYwpAQCAtMzM5LDkgKzMzOSw3IEBACiBzdGF0aWMgaW50IHNkaGNpX21zbV9leGVjdXRlX3R1bmluZyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIG9wY29kZSkKIHsKIAlpbnQgdHVuaW5nX3NlcV9jbnQgPSAzOwotCXU4IHBoYXNlLCAqZGF0YV9idWYsIHR1bmVkX3BoYXNlc1sxNl0sIHR1bmVkX3BoYXNlX2NudCA9IDA7Ci0JY29uc3QgdTggKnR1bmluZ19ibG9ja19wYXR0ZXJuID0gdHVuaW5nX2Jsa19wYXR0ZXJuXzRiaXQ7Ci0JaW50IHNpemUgPSBzaXplb2YodHVuaW5nX2Jsa19wYXR0ZXJuXzRiaXQpOworCXU4IHBoYXNlLCB0dW5lZF9waGFzZXNbMTZdLCB0dW5lZF9waGFzZV9jbnQgPSAwOwogCWludCByYzsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGhvc3QtPm1tYzsKIAlzdHJ1Y3QgbW1jX2lvcyBpb3MgPSBob3N0LT5tbWMtPmlvczsKQEAgLTM1NSw1MyArMzUzLDIxIEBACiAJICAgICAgKGlvcy50aW1pbmcgPT0gTU1DX1RJTUlOR19VSFNfU0RSMTA0KSkpCiAJCXJldHVybiAwOwogCi0JaWYgKChvcGNvZGUgPT0gTU1DX1NFTkRfVFVOSU5HX0JMT0NLX0hTMjAwKSAmJgotCSAgICAobW1jLT5pb3MuYnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfOCkpIHsKLQkJdHVuaW5nX2Jsb2NrX3BhdHRlcm4gPSB0dW5pbmdfYmxrX3BhdHRlcm5fOGJpdDsKLQkJc2l6ZSA9IHNpemVvZih0dW5pbmdfYmxrX3BhdHRlcm5fOGJpdCk7Ci0JfQotCi0JZGF0YV9idWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YV9idWYpCi0JCXJldHVybiAtRU5PTUVNOwotCiByZXRyeToKIAkvKiBGaXJzdCBvZiBhbGwgcmVzZXQgdGhlIHR1bmluZyBibG9jayAqLwogCXJjID0gbXNtX2luaXRfY21fZGxsKGhvc3QpOwogCWlmIChyYykKLQkJZ290byBvdXQ7CisJCXJldHVybiByYzsKIAogCXBoYXNlID0gMDsKIAlkbyB7Ci0JCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsKLQkJc3RydWN0IG1tY19kYXRhIGRhdGEgPSB7IDAgfTsKLQkJc3RydWN0IG1tY19yZXF1ZXN0IG1ycSA9IHsKLQkJCS5jbWQgPSAmY21kLAotCQkJLmRhdGEgPSAmZGF0YQotCQl9OwotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7Ci0KIAkJLyogU2V0IHRoZSBwaGFzZSBpbiBkZWxheSBsaW5lIGh3IGJsb2NrICovCiAJCXJjID0gbXNtX2NvbmZpZ19jbV9kbGxfcGhhc2UoaG9zdCwgcGhhc2UpOwogCQlpZiAocmMpCi0JCQlnb3RvIG91dDsKKwkJCXJldHVybiByYzsKIAotCQljbWQub3Bjb2RlID0gb3Bjb2RlOwotCQljbWQuZmxhZ3MgPSBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BRFRDOwotCi0JCWRhdGEuYmxrc3ogPSBzaXplOwotCQlkYXRhLmJsb2NrcyA9IDE7Ci0JCWRhdGEuZmxhZ3MgPSBNTUNfREFUQV9SRUFEOwotCQlkYXRhLnRpbWVvdXRfbnMgPSBOU0VDX1BFUl9TRUM7CS8qIDEgc2Vjb25kICovCi0KLQkJZGF0YS5zZyA9ICZzZzsKLQkJZGF0YS5zZ19sZW4gPSAxOwotCQlzZ19pbml0X29uZSgmc2csIGRhdGFfYnVmLCBzaXplKTsKLQkJbWVtc2V0KGRhdGFfYnVmLCAwLCBzaXplKTsKLQkJbW1jX3dhaXRfZm9yX3JlcShtbWMsICZtcnEpOwotCi0JCWlmICghY21kLmVycm9yICYmICFkYXRhLmVycm9yICYmCi0JCSAgICAhbWVtY21wKGRhdGFfYnVmLCB0dW5pbmdfYmxvY2tfcGF0dGVybiwgc2l6ZSkpIHsKKwkJcmMgPSBtbWNfc2VuZF90dW5pbmcobW1jKTsKKwkJaWYgKCFyYykgewogCQkJLyogVHVuaW5nIGlzIHN1Y2Nlc3NmdWwgYXQgdGhpcyB0dW5pbmcgcG9pbnQgKi8KIAkJCXR1bmVkX3BoYXNlc1t0dW5lZF9waGFzZV9jbnQrK10gPSBwaGFzZTsKIAkJCWRldl9kYmcobW1jX2RldihtbWMpLCAiJXM6IEZvdW5kIGdvb2QgcGhhc2UgPSAlZFxuIiwKQEAgLTQxMyw3ICszNzksNyBAQAogCQlyYyA9IG1zbV9maW5kX21vc3RfYXBwcm9wcmlhdGVfcGhhc2UoaG9zdCwgdHVuZWRfcGhhc2VzLAogCQkJCQkJICAgICB0dW5lZF9waGFzZV9jbnQpOwogCQlpZiAocmMgPCAwKQotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gcmM7CiAJCWVsc2UKIAkJCXBoYXNlID0gcmM7CiAKQEAgLTQyMyw3ICszODksNyBAQAogCQkgKi8KIAkJcmMgPSBtc21fY29uZmlnX2NtX2RsbF9waGFzZShob3N0LCBwaGFzZSk7CiAJCWlmIChyYykKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIHJjOwogCQlkZXZfZGJnKG1tY19kZXYobW1jKSwgIiVzOiBTZXR0aW5nIHRoZSB0dW5pbmcgcGhhc2UgdG8gJWRcbiIsCiAJCQkgbW1jX2hvc3RuYW1lKG1tYyksIHBoYXNlKTsKIAl9IGVsc2UgewpAQCAtNDM1LDggKzQwMSw2IEBACiAJCXJjID0gLUVJTzsKIAl9CiAKLW91dDoKLQlrZnJlZShkYXRhX2J1Zik7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWFyYXNhbi5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1hcmFzYW4uYwppbmRleCA5ODFkNjZlLi5iY2I1MWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWFyYXNhbi5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtYXJhc2FuLmMKQEAgLTE2NSw3ICsxNjUsNiBAQAogCWhvc3QgPSBzZGhjaV9wbHRmbV9pbml0KHBkZXYsICZzZGhjaV9hcmFzYW5fcGRhdGEsIDApOwogCWlmIChJU19FUlIoaG9zdCkpIHsKIAkJcmV0ID0gUFRSX0VSUihob3N0KTsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm0gaW5pdCBmYWlsZWQgKCV1KVxuIiwgcmV0KTsKIAkJZ290byBjbGtfZGlzYWJsZV9hbGw7CiAJfQogCkBAIC0xNzUsMTAgKzE3NCw4IEBACiAJcGx0Zm1faG9zdC0+Y2xrID0gY2xrX3hpbjsKIAogCXJldCA9IHNkaGNpX2FkZF9ob3N0KGhvc3QpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm0gcmVnaXN0ZXIgZmFpbGVkICgldSlcbiIsIHJldCk7CisJaWYgKHJldCkKIAkJZ290byBlcnJfcGx0Zm1fZnJlZTsKLQl9CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2ktbzJtaWNyby5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2ktbzJtaWNyby5jCmluZGV4IDU2NzBlMzguLmUyZWMxMDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS1vMm1pY3JvLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2ktbzJtaWNyby5jCkBAIC0xMjcsOCArMTI3LDYgQEAKIAkJcmV0dXJuOwogCXNjcmF0Y2hfMzIgJj0gfigoMSA8PCAyMSkgfCAoMSA8PCAzMCkpOwogCi0JLyogU2V0IFJURDMgZnVuY3Rpb24gZGlzYWJsZWQgKi8KLQlzY3JhdGNoXzMyIHw9ICgoMSA8PCAyOSkgfCAoMSA8PCAyOCkpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoY2hpcC0+cGRldiwgTzJfU0RfRlVOQ19SRUczLCBzY3JhdGNoXzMyKTsKIAogCS8qIFNldCBMMSBFbnRyYW5jZSBUaW1lciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKaW5kZXggNjExOTI5Ny4uMDM0Mjc3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzZGhjaV9wY2lfc2RfY2QoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewpAQCAtMjY5LDcgKzI2OSw5IEBACiBzdGF0aWMgaW50IGJ5dF9lbW1jX3Byb2JlX3Nsb3Qoc3RydWN0IHNkaGNpX3BjaV9zbG90ICpzbG90KQogewogCXNsb3QtPmhvc3QtPm1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzhfQklUX0RBVEEgfCBNTUNfQ0FQX05PTlJFTU9WQUJMRSB8Ci0JCQkJIE1NQ19DQVBfSFdfUkVTRVQgfCBNTUNfQ0FQXzFfOFZfRERSOworCQkJCSBNTUNfQ0FQX0hXX1JFU0VUIHwgTU1DX0NBUF8xXzhWX0REUiB8CisJCQkJIE1NQ19DQVBfQlVTX1dJRFRIX1RFU1QgfAorCQkJCSBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWTsKIAlzbG90LT5ob3N0LT5tbWMtPmNhcHMyIHw9IE1NQ19DQVAyX0hDX0VSQVNFX1NaOwogCXNsb3QtPmh3X3Jlc2V0ID0gc2RoY2lfcGNpX2ludF9od19yZXNldDsKIAlpZiAoc2xvdC0+Y2hpcC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfQlNXX0VNTUMpCkBAIC0yNzksMTIgKzI4MSwxNiBAQAogCiBzdGF0aWMgaW50IGJ5dF9zZGlvX3Byb2JlX3Nsb3Qoc3RydWN0IHNkaGNpX3BjaV9zbG90ICpzbG90KQogewotCXNsb3QtPmhvc3QtPm1tYy0+Y2FwcyB8PSBNTUNfQ0FQX1BPV0VSX09GRl9DQVJEIHwgTU1DX0NBUF9OT05SRU1PVkFCTEU7CisJc2xvdC0+aG9zdC0+bW1jLT5jYXBzIHw9IE1NQ19DQVBfUE9XRVJfT0ZGX0NBUkQgfCBNTUNfQ0FQX05PTlJFTU9WQUJMRSB8CisJCQkJIE1NQ19DQVBfQlVTX1dJRFRIX1RFU1QgfAorCQkJCSBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBieXRfc2RfcHJvYmVfc2xvdChzdHJ1Y3Qgc2RoY2lfcGNpX3Nsb3QgKnNsb3QpCiB7CisJc2xvdC0+aG9zdC0+bW1jLT5jYXBzIHw9IE1NQ19DQVBfQlVTX1dJRFRIX1RFU1QgfAorCQkJCSBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWTsKIAlzbG90LT5jZF9jb25faWQgPSBOVUxMOwogCXNsb3QtPmNkX2lkeCA9IDA7CiAJc2xvdC0+Y2Rfb3ZlcnJpZGVfbGV2ZWwgPSB0cnVlOwpAQCAtMjk0LDExICszMDAsMTMgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RoY2lfcGNpX2ZpeGVzIHNkaGNpX2ludGVsX2J5dF9lbW1jID0gewogCS5hbGxvd19ydW50aW1lX3BtID0gdHJ1ZSwKIAkucHJvYmVfc2xvdAk9IGJ5dF9lbW1jX3Byb2JlX3Nsb3QsCisJLnF1aXJrcwkJPSBTREhDSV9RVUlSS19OT19FTkRBVFRSX0lOX05PUERFU0MsCiAJLnF1aXJrczIJPSBTREhDSV9RVUlSSzJfUFJFU0VUX1ZBTFVFX0JST0tFTiB8CiAJCQkgIFNESENJX1FVSVJLMl9TVE9QX1dJVEhfVEMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9pbnRlbF9ieXRfc2RpbyA9IHsKKwkucXVpcmtzCQk9IFNESENJX1FVSVJLX05PX0VOREFUVFJfSU5fTk9QREVTQywKIAkucXVpcmtzMgk9IFNESENJX1FVSVJLMl9IT1NUX09GRl9DQVJEX09OIHwKIAkJCVNESENJX1FVSVJLMl9QUkVTRVRfVkFMVUVfQlJPS0VOLAogCS5hbGxvd19ydW50aW1lX3BtID0gdHJ1ZSwKQEAgLTMwNiw2ICszMTQsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9wY2lfZml4ZXMgc2RoY2lfaW50ZWxfYnl0X3NkID0geworCS5xdWlya3MJCT0gU0RIQ0lfUVVJUktfTk9fRU5EQVRUUl9JTl9OT1BERVNDLAogCS5xdWlya3MyCT0gU0RIQ0lfUVVJUksyX0NBUkRfT05fTkVFRFNfQlVTX09OIHwKIAkJCSAgU0RIQ0lfUVVJUksyX1BSRVNFVF9WQUxVRV9CUk9LRU4gfAogCQkJICBTREhDSV9RVUlSSzJfU1RPUF9XSVRIX1RDLApAQCAtNjQ1LDYgKzY1NCwyNSBAQAogCS5wcm9iZV9zbG90CT0gcnRzeF9wcm9iZV9zbG90LAogfTsKIAorc3RhdGljIGludCBhbWRfcHJvYmUoc3RydWN0IHNkaGNpX3BjaV9jaGlwICpjaGlwKQoreworCXN0cnVjdCBwY2lfZGV2CSpzbWJ1c19kZXY7CisKKwlzbWJ1c19kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwKKwkJCVBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU01CVVMsIE5VTEwpOworCisJaWYgKHNtYnVzX2RldiAmJiAoc21idXNfZGV2LT5yZXZpc2lvbiA8IDB4NTEpKSB7CisJCWNoaXAtPnF1aXJrczIgfD0gU0RIQ0lfUVVJUksyX0NMRUFSX1RSQU5TRkVSTU9ERV9SRUdfQkVGT1JFX0NNRDsKKwkJY2hpcC0+cXVpcmtzMiB8PSBTREhDSV9RVUlSSzJfQlJPS0VOX0hTMjAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9hbWQgPSB7CisJLnByb2JlCQk9IGFtZF9wcm9iZSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfaWRzW10gPSB7CiAJewogCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUklDT0gsCkBAIC0xMDQ0LDcgKzEwNzIsMTUgQEAKIAkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCiAJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfbzIsCiAJfSwKLQorCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0FNRCwKKwkJLmRldmljZQkJPSBQQ0lfQU5ZX0lELAorCQkuY2xhc3MJCT0gUENJX0NMQVNTX1NZU1RFTV9TREhDSSA8PCA4LAorCQkuY2xhc3NfbWFzawk9IDB4RkZGRjAwLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfYW1kLAorCX0sCiAJewkvKiBHZW5lcmljIFNEIGhvc3QgY29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFX0NMQVNTKChQQ0lfQ0xBU1NfU1lTVEVNX1NESENJIDw8IDgpLCAweEZGRkYwMCkKIAl9LApAQCAtMTA2NCw3ICsxMTAwLDcgQEAKIHsKIAlzdHJ1Y3Qgc2RoY2lfcGNpX3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLTE7CiAKIAlzbG90ID0gc2RoY2lfcHJpdihob3N0KTsKIAlwZGV2ID0gc2xvdC0+Y2hpcC0+cGRldjsKQEAgLTEwNzYsNyArMTExMiwxNyBAQAogCQkJImRvZXNuJ3QgZnVsbHkgY2xhaW0gdG8gc3VwcG9ydCBpdC5cbiIpOwogCX0KIAotCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpIHsKKwkJaWYgKGhvc3QtPnF1aXJrczIgJiBTREhDSV9RVUlSSzJfQlJPS0VOXzY0X0JJVF9ETUEpIHsKKwkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9VU0VfNjRfQklUX0RNQTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJCQlpZiAocmV0KQorCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IDY0LWJpdCBETUEgbWFza1xuIik7CisJCX0KKwl9CisJaWYgKHJldCkKKwkJcmV0ID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMjMwLDE1ICsxMjc2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2Vsc2UgLyogQ09ORklHX1BNICovCi0KLSNkZWZpbmUgc2RoY2lfcGNpX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzZGhjaV9wY2lfcmVzdW1lIE5VTEwKLQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKLQogc3RhdGljIGludCBzZGhjaV9wY2lfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwY2lfZGV2LCBkZXYpOwpAQCAtMTMxMCw3ICsxMzQ3LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZgorI2Vsc2UgLyogQ09ORklHX1BNICovCisKKyNkZWZpbmUgc2RoY2lfcGNpX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzZGhjaV9wY2lfcmVzdW1lIE5VTEwKKworI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2RoY2lfcGNpX3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IHNkaGNpX3BjaV9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2Mi5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2Mi5jCmluZGV4IGI0YzIzZTkuLmY5ODAwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjIuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYyLmMKQEAgLTE2NywyMyArMTY3LDE3IEBACiAJc3RydWN0IHNkaGNpX3B4YV9wbGF0ZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gTlVMTDsKLQlzdHJ1Y3Qgc2RoY2lfcHhhICpweGEgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCiAJaW50IHJldDsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAKLQlweGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2RoY2lfcHhhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFweGEpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJaG9zdCA9IHNkaGNpX3BsdGZtX2luaXQocGRldiwgTlVMTCwgMCk7Ci0JaWYgKElTX0VSUihob3N0KSkgewotCQlrZnJlZShweGEpOworCWlmIChJU19FUlIoaG9zdCkpCiAJCXJldHVybiBQVFJfRVJSKGhvc3QpOwotCX0KKwogCXBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOwotCXBsdGZtX2hvc3QtPnByaXYgPSBweGE7CisJcGx0Zm1faG9zdC0+cHJpdiA9IE5VTEw7CiAKIAljbGsgPSBjbGtfZ2V0KGRldiwgIlBYQS1TREhDTEsiKTsKIAlpZiAoSVNfRVJSKGNsaykpIHsKQEAgLTIzOCw3ICsyMzIsNiBAQAogCWNsa19wdXQoY2xrKTsKIGVycl9jbGtfZ2V0OgogCXNkaGNpX3BsdGZtX2ZyZWUocGRldik7Ci0Ja2ZyZWUocHhhKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDYsMTQgKzIzOSwxMiBAQAogewogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNkaGNpX3BsdGZtX2hvc3QgKnBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOwotCXN0cnVjdCBzZGhjaV9weGEgKnB4YSA9IHBsdGZtX2hvc3QtPnByaXY7CiAKIAlzZGhjaV9yZW1vdmVfaG9zdChob3N0LCAxKTsKIAogCWNsa19kaXNhYmxlX3VucHJlcGFyZShwbHRmbV9ob3N0LT5jbGspOwogCWNsa19wdXQocGx0Zm1faG9zdC0+Y2xrKTsKIAlzZGhjaV9wbHRmbV9mcmVlKHBkZXYpOwotCWtmcmVlKHB4YSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYwppbmRleCA1MDM2ZDdkLi40NTIzODg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYzLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2My5jCkBAIC01OCw2ICs1OCwxMiBAQAogI2RlZmluZSBTRENFX01JU0NfSU5UCQkoMTw8MikKICNkZWZpbmUgU0RDRV9NSVNDX0lOVF9FTgkoMTw8MSkKIAorc3RydWN0IHNkaGNpX3B4YSB7CisJc3RydWN0IGNsayAqY2xrX2NvcmU7CisJc3RydWN0IGNsayAqY2xrX2lvOworCXU4CXBvd2VyX21vZGU7Cit9OworCiAvKgogICogVGhlc2UgcmVnaXN0ZXJzIGFyZSByZWxhdGl2ZSB0byB0aGUgc2Vjb25kIHJlZ2lzdGVyIHJlZ2lvbiwgZm9yIHRoZQogICogTUJ1cyBicmlkZ2UuCkBAIC0yMTEsNiArMjE3LDcgQEAKIAljYXNlIE1NQ19USU1JTkdfVUhTX1NEUjEwNDoKIAkJY3RybF8yIHw9IFNESENJX0NUUkxfVUhTX1NEUjEwNCB8IFNESENJX0NUUkxfVkREXzE4MDsKIAkJYnJlYWs7CisJY2FzZSBNTUNfVElNSU5HX01NQ19ERFI1MjoKIAljYXNlIE1NQ19USU1JTkdfVUhTX0REUjUwOgogCQljdHJsXzIgfD0gU0RIQ0lfQ1RSTF9VSFNfRERSNTAgfCBTREhDSV9DVFJMX1ZERF8xODA7CiAJCWJyZWFrOwpAQCAtMjgzLDkgKzI5MCw3IEBACiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCBzZGhjaV9weGEgKnB4YSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7Ci0KIAlpbnQgcmV0OwotCXN0cnVjdCBjbGsgKmNsazsKIAogCXB4YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHNkaGNpX3B4YSksIEdGUF9LRVJORUwpOwogCWlmICghcHhhKQpAQCAtMzA1LDE0ICszMTAsMjAgQEAKIAlwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKIAlwbHRmbV9ob3N0LT5wcml2ID0gcHhhOwogCi0JY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7Ci0JaWYgKElTX0VSUihjbGspKSB7CisJcHhhLT5jbGtfaW8gPSBkZXZtX2Nsa19nZXQoZGV2LCAiaW8iKTsKKwlpZiAoSVNfRVJSKHB4YS0+Y2xrX2lvKSkKKwkJcHhhLT5jbGtfaW8gPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHB4YS0+Y2xrX2lvKSkgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgaW8gY2xvY2tcbiIpOwotCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCXJldCA9IFBUUl9FUlIocHhhLT5jbGtfaW8pOwogCQlnb3RvIGVycl9jbGtfZ2V0OwogCX0KLQlwbHRmbV9ob3N0LT5jbGsgPSBjbGs7Ci0JY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7CisJcGx0Zm1faG9zdC0+Y2xrID0gcHhhLT5jbGtfaW87CisJY2xrX3ByZXBhcmVfZW5hYmxlKHB4YS0+Y2xrX2lvKTsKKworCXB4YS0+Y2xrX2NvcmUgPSBkZXZtX2Nsa19nZXQoZGV2LCAiY29yZSIpOworCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQorCQljbGtfcHJlcGFyZV9lbmFibGUocHhhLT5jbGtfY29yZSk7CiAKIAkvKiBlbmFibGUgMS84ViBERFIgY2FwYWJsZSAqLwogCWhvc3QtPm1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzFfOFZfRERSOwpAQCAtMzg1LDcgKzM5Niw5IEBACiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogZXJyX29mX3BhcnNlOgogZXJyX2NkX3JlcToKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfaW8pOworCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfY29yZSk7CiBlcnJfY2xrX2dldDoKIGVycl9tYnVzX3dpbjoKIAlzZGhjaV9wbHRmbV9mcmVlKHBkZXYpOwpAQCAtMzk2LDEyICs0MDksMTUgQEAKIHsKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzZGhjaV9wbHRmbV9ob3N0ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlzdHJ1Y3Qgc2RoY2lfcHhhICpweGEgPSBwbHRmbV9ob3N0LT5wcml2OwogCiAJcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKIAlzZGhjaV9yZW1vdmVfaG9zdChob3N0LCAxKTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAKLQljbGtfZGlzYWJsZV91bnByZXBhcmUocGx0Zm1faG9zdC0+Y2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfaW8pOworCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfY29yZSk7CiAKIAlzZGhjaV9wbHRmbV9mcmVlKHBkZXYpOwogCkBAIC00MzYsMjAgKzQ1MiwyMSBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzZGhjaV9weGF2M19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNkaGNpX3BsdGZtX2hvc3QgKnBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCXN0cnVjdCBzZGhjaV9weGEgKnB4YSA9IHBsdGZtX2hvc3QtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChwbHRmbV9ob3N0LT5jbGspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQkJaG9zdC0+cnVudGltZV9zdXNwZW5kZWQgPSB0cnVlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlob3N0LT5ydW50aW1lX3N1c3BlbmRlZCA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShwbHRmbV9ob3N0LT5jbGspOwotCX0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfaW8pOworCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHhhLT5jbGtfY29yZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1OCwxNSArNDc1LDE2IEBACiB7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2RoY2lfcGx0Zm1faG9zdCAqcGx0Zm1faG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CisJc3RydWN0IHNkaGNpX3B4YSAqcHhhID0gcGx0Zm1faG9zdC0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKHBsdGZtX2hvc3QtPmNsaykgewotCQljbGtfcHJlcGFyZV9lbmFibGUocGx0Zm1faG9zdC0+Y2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUocHhhLT5jbGtfaW8pOworCWlmICghSVNfRVJSKHB4YS0+Y2xrX2NvcmUpKQorCQljbGtfcHJlcGFyZV9lbmFibGUocHhhLT5jbGtfY29yZSk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQkJaG9zdC0+cnVudGltZV9zdXNwZW5kZWQgPSBmYWxzZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwotCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWhvc3QtPnJ1bnRpbWVfc3VzcGVuZGVkID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwppbmRleCAwY2U2ZWIxLi5jNDViODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKQEAgLTMwMCw2ICszMDAsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZvdXJob3N0LT5wZGV2LT5kZXY7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXUxNiBjbGsgPSAwOworCWludCByZXQ7CiAKIAlob3N0LT5tbWMtPmFjdHVhbF9jbG9jayA9IDA7CiAKQEAgLTMxMSw3ICszMTIsMTIgQEAKIAogCXNkaGNpX3MzY19zZXRfY2xvY2soaG9zdCwgY2xvY2spOwogCi0JY2xrX3NldF9yYXRlKG91cmhvc3QtPmNsa19idXNbb3VyaG9zdC0+Y3VyX2Nsa10sIGNsb2NrKTsKKwlyZXQgPSBjbGtfc2V0X3JhdGUob3VyaG9zdC0+Y2xrX2J1c1tvdXJob3N0LT5jdXJfY2xrXSwgY2xvY2spOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBmYWlsZWQgdG8gc2V0IGNsb2NrIHJhdGUgJXVIelxuIiwKKwkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBjbG9jayk7CisJCXJldHVybjsKKwl9CiAKIAljbGsgPSBTREhDSV9DTE9DS19JTlRfRU47CiAJc2RoY2lfd3JpdGV3KGhvc3QsIGNsaywgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CkBAIC02MDksNyArNjE1LDcgQEAKIAkJZ290byBlcnJfcmVxX3JlZ3M7CiAJfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAlpZiAocGRhdGEtPmNkX3R5cGUgIT0gUzNDX1NESENJX0NEX0lOVEVSTkFMKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoc2MtPmNsa19pbyk7CiAjZW5kaWYKQEAgLTYzNSw3ICs2NDEsNyBAQAogCWlmIChzYy0+ZXh0X2NkX2lycSkKIAkJZnJlZV9pcnEoc2MtPmV4dF9jZF9pcnEsIHNjKTsKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAJaWYgKHNjLT5wZGF0YS0+Y2RfdHlwZSAhPSBTM0NfU0RIQ0lfQ0RfSU5URVJOQUwpCiAJCWNsa19wcmVwYXJlX2VuYWJsZShzYy0+Y2xrX2lvKTsKICNlbmRpZgpAQCAtNjY3LDcgKzY3Myw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHNkaGNpX3MzY19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKaW5kZXggYWRhMWEzZS4uY2JiMjQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwpAQCAtNDQsOCArNDQsNiBAQAogCiAjZGVmaW5lIE1BWF9UVU5JTkdfTE9PUCA0MAogCi0jZGVmaW5lIEFETUFfU0laRQkoKDEyOCAqIDIgKyAxKSAqIDQpCi0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdfcXVpcmtzID0gMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdfcXVpcmtzMjsKIApAQCAtNTYsNyArNTQsNyBAQAogc3RhdGljIHZvaWQgc2RoY2lfdHVuaW5nX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgdm9pZCBzZGhjaV9lbmFibGVfcHJlc2V0X3ZhbHVlKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBib29sIGVuYWJsZSk7CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzZGhjaV9ydW50aW1lX3BtX2dldChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCk7CiBzdGF0aWMgaW50IHNkaGNpX3J1bnRpbWVfcG1fcHV0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KTsKIHN0YXRpYyB2b2lkIHNkaGNpX3J1bnRpbWVfcG1fYnVzX29uKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KTsKQEAgLTExOSwxMCArMTE3LDE3IEBACiAJcHJfZGVidWcoRFJJVkVSX05BTUUgIjogSG9zdCBjdGwyOiAweCUwOHhcbiIsCiAJCXNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTDIpKTsKIAotCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKQotCQlwcl9kZWJ1ZyhEUklWRVJfTkFNRSAiOiBBRE1BIEVycjogMHglMDh4IHwgQURNQSBQdHI6IDB4JTA4eFxuIiwKLQkJICAgICAgIHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0FETUFfRVJST1IpLAotCQkgICAgICAgcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQURNQV9BRERSRVNTKSk7CisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpIHsKKwkJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpCisJCQlwcl9kZWJ1ZyhEUklWRVJfTkFNRSAiOiBBRE1BIEVycjogMHglMDh4IHwgQURNQSBQdHI6IDB4JTA4eCUwOHhcbiIsCisJCQkJIHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0FETUFfRVJST1IpLAorCQkJCSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BRE1BX0FERFJFU1NfSEkpLAorCQkJCSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BRE1BX0FERFJFU1MpKTsKKwkJZWxzZQorCQkJcHJfZGVidWcoRFJJVkVSX05BTUUgIjogQURNQSBFcnI6IDB4JTA4eCB8IEFETUEgUHRyOiAweCUwOHhcbiIsCisJCQkJIHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0FETUFfRVJST1IpLAorCQkJCSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BRE1BX0FERFJFU1MpKTsKKwl9CiAKIAlwcl9kZWJ1ZyhEUklWRVJfTkFNRSAiOiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKIH0KQEAgLTQ0OCwxOCArNDUzLDI2IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoKmZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgc2RoY2lfc2V0X2FkbWFfZGVzYyh1OCAqZGVzYywgdTMyIGFkZHIsIGludCBsZW4sIHVuc2lnbmVkIGNtZCkKK3N0YXRpYyB2b2lkIHNkaGNpX2FkbWFfd3JpdGVfZGVzYyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdm9pZCAqZGVzYywKKwkJCQkgIGRtYV9hZGRyX3QgYWRkciwgaW50IGxlbiwgdW5zaWduZWQgY21kKQogewotCV9fbGUzMiAqZGF0YWRkciA9IChfX2xlMzIgX19mb3JjZSAqKShkZXNjICsgNCk7Ci0JX19sZTE2ICpjbWRsZW4gPSAoX19sZTE2IF9fZm9yY2UgKilkZXNjOworCXN0cnVjdCBzZGhjaV9hZG1hMl82NF9kZXNjICpkbWFfZGVzYyA9IGRlc2M7CiAKLQkvKiBTREhDSSBzcGVjaWZpY2F0aW9uIHNheXMgQURNQSBkZXNjcmlwdG9ycyBzaG91bGQgYmUgNCBieXRlCi0JICogYWxpZ25lZCwgc28gdXNpbmcgMTYgb3IgMzJiaXQgb3BlcmF0aW9ucyBzaG91bGQgYmUgc2FmZS4gKi8KKwkvKiAzMi1iaXQgYW5kIDY0LWJpdCBkZXNjcmlwdG9ycyBoYXZlIHRoZXNlIG1lbWJlcnMgaW4gc2FtZSBwb3NpdGlvbiAqLworCWRtYV9kZXNjLT5jbWQgPSBjcHVfdG9fbGUxNihjbWQpOworCWRtYV9kZXNjLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOworCWRtYV9kZXNjLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoKHUzMilhZGRyKTsKIAotCWNtZGxlblswXSA9IGNwdV90b19sZTE2KGNtZCk7Ci0JY21kbGVuWzFdID0gY3B1X3RvX2xlMTYobGVuKTsKKwlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkKKwkJZG1hX2Rlc2MtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMigodTY0KWFkZHIgPj4gMzIpOworfQogCi0JZGF0YWRkclswXSA9IGNwdV90b19sZTMyKGFkZHIpOworc3RhdGljIHZvaWQgc2RoY2lfYWRtYV9tYXJrX2VuZCh2b2lkICpkZXNjKQoreworCXN0cnVjdCBzZGhjaV9hZG1hMl82NF9kZXNjICpkbWFfZGVzYyA9IGRlc2M7CisKKwkvKiAzMi1iaXQgYW5kIDY0LWJpdCBkZXNjcmlwdG9ycyBoYXZlICdjbWQnIGluIHNhbWUgcG9zaXRpb24gKi8KKwlkbWFfZGVzYy0+Y21kIHw9IGNwdV90b19sZTE2KEFETUEyX0VORCk7CiB9CiAKIHN0YXRpYyBpbnQgc2RoY2lfYWRtYV90YWJsZV9wcmUoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsCkBAIC00NjcsOCArNDgwLDggQEAKIHsKIAlpbnQgZGlyZWN0aW9uOwogCi0JdTggKmRlc2M7Ci0JdTggKmFsaWduOworCXZvaWQgKmRlc2M7CisJdm9pZCAqYWxpZ247CiAJZG1hX2FkZHJfdCBhZGRyOwogCWRtYV9hZGRyX3QgYWxpZ25fYWRkcjsKIAlpbnQgbGVuLCBvZmZzZXQ7CkBAIC00ODksMTcgKzUwMiwxNyBAQAogCQlkaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOwogCiAJaG9zdC0+YWxpZ25fYWRkciA9IGRtYV9tYXBfc2luZ2xlKG1tY19kZXYoaG9zdC0+bW1jKSwKLQkJaG9zdC0+YWxpZ25fYnVmZmVyLCAxMjggKiA0LCBkaXJlY3Rpb24pOworCQlob3N0LT5hbGlnbl9idWZmZXIsIGhvc3QtPmFsaWduX2J1ZmZlcl9zeiwgZGlyZWN0aW9uKTsKIAlpZiAoZG1hX21hcHBpbmdfZXJyb3IobW1jX2Rldihob3N0LT5tbWMpLCBob3N0LT5hbGlnbl9hZGRyKSkKIAkJZ290byBmYWlsOwotCUJVR19PTihob3N0LT5hbGlnbl9hZGRyICYgMHgzKTsKKwlCVUdfT04oaG9zdC0+YWxpZ25fYWRkciAmIGhvc3QtPmFsaWduX21hc2spOwogCiAJaG9zdC0+c2dfY291bnQgPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwKIAkJZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwgZGlyZWN0aW9uKTsKIAlpZiAoaG9zdC0+c2dfY291bnQgPT0gMCkKIAkJZ290byB1bm1hcF9hbGlnbjsKIAotCWRlc2MgPSBob3N0LT5hZG1hX2Rlc2M7CisJZGVzYyA9IGhvc3QtPmFkbWFfdGFibGU7CiAJYWxpZ24gPSBob3N0LT5hbGlnbl9idWZmZXI7CiAKIAlhbGlnbl9hZGRyID0gaG9zdC0+YWxpZ25fYWRkcjsKQEAgLTUxNSwyNCArNTI4LDI3IEBACiAJCSAqIHRoZSAodXAgdG8gdGhyZWUpIGJ5dGVzIHRoYXQgc2NyZXcgdXAgdGhlCiAJCSAqIGFsaWdubWVudC4KIAkJICovCi0JCW9mZnNldCA9ICg0IC0gKGFkZHIgJiAweDMpKSAmIDB4MzsKKwkJb2Zmc2V0ID0gKGhvc3QtPmFsaWduX3N6IC0gKGFkZHIgJiBob3N0LT5hbGlnbl9tYXNrKSkgJgorCQkJIGhvc3QtPmFsaWduX21hc2s7CiAJCWlmIChvZmZzZXQpIHsKIAkJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSB7CiAJCQkJYnVmZmVyID0gc2RoY2lfa21hcF9hdG9taWMoc2csICZmbGFncyk7Ci0JCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgUEFHRV9NQVNLKSA+IChQQUdFX1NJWkUgLSAzKSk7CisJCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgKFBBR0VfU0laRSAtIDEpKSA+CisJCQkJCShQQUdFX1NJWkUgLSBvZmZzZXQpKTsKIAkJCQltZW1jcHkoYWxpZ24sIGJ1ZmZlciwgb2Zmc2V0KTsKIAkJCQlzZGhjaV9rdW5tYXBfYXRvbWljKGJ1ZmZlciwgJmZsYWdzKTsKIAkJCX0KIAogCQkJLyogdHJhbiwgdmFsaWQgKi8KLQkJCXNkaGNpX3NldF9hZG1hX2Rlc2MoZGVzYywgYWxpZ25fYWRkciwgb2Zmc2V0LCAweDIxKTsKKwkJCXNkaGNpX2FkbWFfd3JpdGVfZGVzYyhob3N0LCBkZXNjLCBhbGlnbl9hZGRyLCBvZmZzZXQsCisJCQkJCSAgICAgIEFETUEyX1RSQU5fVkFMSUQpOwogCiAJCQlCVUdfT04ob2Zmc2V0ID4gNjU1MzYpOwogCi0JCQlhbGlnbiArPSA0OwotCQkJYWxpZ25fYWRkciArPSA0OworCQkJYWxpZ24gKz0gaG9zdC0+YWxpZ25fc3o7CisJCQlhbGlnbl9hZGRyICs9IGhvc3QtPmFsaWduX3N6OwogCi0JCQlkZXNjICs9IDg7CisJCQlkZXNjICs9IGhvc3QtPmRlc2Nfc3o7CiAKIAkJCWFkZHIgKz0gb2Zmc2V0OwogCQkJbGVuIC09IG9mZnNldDsKQEAgLTU0MSwyMyArNTU3LDIzIEBACiAJCUJVR19PTihsZW4gPiA2NTUzNik7CiAKIAkJLyogdHJhbiwgdmFsaWQgKi8KLQkJc2RoY2lfc2V0X2FkbWFfZGVzYyhkZXNjLCBhZGRyLCBsZW4sIDB4MjEpOwotCQlkZXNjICs9IDg7CisJCXNkaGNpX2FkbWFfd3JpdGVfZGVzYyhob3N0LCBkZXNjLCBhZGRyLCBsZW4sIEFETUEyX1RSQU5fVkFMSUQpOworCQlkZXNjICs9IGhvc3QtPmRlc2Nfc3o7CiAKIAkJLyoKIAkJICogSWYgdGhpcyB0cmlnZ2VycyB0aGVuIHdlIGhhdmUgYSBjYWxjdWxhdGlvbiBidWcKIAkJICogc29tZXdoZXJlLiA6LwogCQkgKi8KLQkJV0FSTl9PTigoZGVzYyAtIGhvc3QtPmFkbWFfZGVzYykgPiBBRE1BX1NJWkUpOworCQlXQVJOX09OKChkZXNjIC0gaG9zdC0+YWRtYV90YWJsZSkgPj0gaG9zdC0+YWRtYV90YWJsZV9zeik7CiAJfQogCiAJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX05PX0VOREFUVFJfSU5fTk9QREVTQykgewogCQkvKgogCQkqIE1hcmsgdGhlIGxhc3QgZGVzY3JpcHRvciBhcyB0aGUgdGVybWluYXRpbmcgZGVzY3JpcHRvcgogCQkqLwotCQlpZiAoZGVzYyAhPSBob3N0LT5hZG1hX2Rlc2MpIHsKLQkJCWRlc2MgLT0gODsKLQkJCWRlc2NbMF0gfD0gMHgyOyAvKiBlbmQgKi8KKwkJaWYgKGRlc2MgIT0gaG9zdC0+YWRtYV90YWJsZSkgeworCQkJZGVzYyAtPSBob3N0LT5kZXNjX3N6OworCQkJc2RoY2lfYWRtYV9tYXJrX2VuZChkZXNjKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qCkBAIC01NjUsNyArNTgxLDcgQEAKIAkJKi8KIAogCQkvKiBub3AsIGVuZCwgdmFsaWQgKi8KLQkJc2RoY2lfc2V0X2FkbWFfZGVzYyhkZXNjLCAwLCAwLCAweDMpOworCQlzZGhjaV9hZG1hX3dyaXRlX2Rlc2MoaG9zdCwgZGVzYywgMCwgMCwgQURNQTJfTk9QX0VORF9WQUxJRCk7CiAJfQogCiAJLyoKQEAgLTU3MywxNCArNTg5LDE0IEBACiAJICovCiAJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpIHsKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UobW1jX2Rldihob3N0LT5tbWMpLAotCQkJaG9zdC0+YWxpZ25fYWRkciwgMTI4ICogNCwgZGlyZWN0aW9uKTsKKwkJCWhvc3QtPmFsaWduX2FkZHIsIGhvc3QtPmFsaWduX2J1ZmZlcl9zeiwgZGlyZWN0aW9uKTsKIAl9CiAKIAlyZXR1cm4gMDsKIAogdW5tYXBfYWxpZ246CiAJZG1hX3VubWFwX3NpbmdsZShtbWNfZGV2KGhvc3QtPm1tYyksIGhvc3QtPmFsaWduX2FkZHIsCi0JCTEyOCAqIDQsIGRpcmVjdGlvbik7CisJCWhvc3QtPmFsaWduX2J1ZmZlcl9zeiwgZGlyZWN0aW9uKTsKIGZhaWw6CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC01OTIsNyArNjA4LDcgQEAKIAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IGksIHNpemU7Ci0JdTggKmFsaWduOworCXZvaWQgKmFsaWduOwogCWNoYXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgaGFzX3VuYWxpZ25lZDsKQEAgLTYwMywxMiArNjE5LDEyIEBACiAJCWRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAKIAlkbWFfdW5tYXBfc2luZ2xlKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+YWxpZ25fYWRkciwKLQkJMTI4ICogNCwgZGlyZWN0aW9uKTsKKwkJaG9zdC0+YWxpZ25fYnVmZmVyX3N6LCBkaXJlY3Rpb24pOwogCiAJLyogRG8gYSBxdWljayBzY2FuIG9mIHRoZSBTRyBsaXN0IGZvciBhbnkgdW5hbGlnbmVkIG1hcHBpbmdzICovCiAJaGFzX3VuYWxpZ25lZCA9IGZhbHNlOwogCWZvcl9lYWNoX3NnKGRhdGEtPnNnLCBzZywgaG9zdC0+c2dfY291bnQsIGkpCi0JCWlmIChzZ19kbWFfYWRkcmVzcyhzZykgJiAzKSB7CisJCWlmIChzZ19kbWFfYWRkcmVzcyhzZykgJiBob3N0LT5hbGlnbl9tYXNrKSB7CiAJCQloYXNfdW5hbGlnbmVkID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CkBAIC02MjAsMTUgKzYzNiwxNyBAQAogCQlhbGlnbiA9IGhvc3QtPmFsaWduX2J1ZmZlcjsKIAogCQlmb3JfZWFjaF9zZyhkYXRhLT5zZywgc2csIGhvc3QtPnNnX2NvdW50LCBpKSB7Ci0JCQlpZiAoc2dfZG1hX2FkZHJlc3Moc2cpICYgMHgzKSB7Ci0JCQkJc2l6ZSA9IDQgLSAoc2dfZG1hX2FkZHJlc3Moc2cpICYgMHgzKTsKKwkJCWlmIChzZ19kbWFfYWRkcmVzcyhzZykgJiBob3N0LT5hbGlnbl9tYXNrKSB7CisJCQkJc2l6ZSA9IGhvc3QtPmFsaWduX3N6IC0KKwkJCQkgICAgICAgKHNnX2RtYV9hZGRyZXNzKHNnKSAmIGhvc3QtPmFsaWduX21hc2spOwogCiAJCQkJYnVmZmVyID0gc2RoY2lfa21hcF9hdG9taWMoc2csICZmbGFncyk7Ci0JCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgUEFHRV9NQVNLKSA+IChQQUdFX1NJWkUgLSAzKSk7CisJCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgKFBBR0VfU0laRSAtIDEpKSA+CisJCQkJCShQQUdFX1NJWkUgLSBzaXplKSk7CiAJCQkJbWVtY3B5KGJ1ZmZlciwgYWxpZ24sIHNpemUpOwogCQkJCXNkaGNpX2t1bm1hcF9hdG9taWMoYnVmZmVyLCAmZmxhZ3MpOwogCi0JCQkJYWxpZ24gKz0gNDsKKwkJCQlhbGlnbiArPSBob3N0LT5hbGlnbl9zejsKIAkJCX0KIAkJfQogCX0KQEAgLTgyMiw2ICs4NDAsMTAgQEAKIAkJCX0gZWxzZSB7CiAJCQkJc2RoY2lfd3JpdGVsKGhvc3QsIGhvc3QtPmFkbWFfYWRkciwKIAkJCQkJU0RIQ0lfQURNQV9BRERSRVNTKTsKKwkJCQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkKKwkJCQkJc2RoY2lfd3JpdGVsKGhvc3QsCisJCQkJCQkgICAgICh1NjQpaG9zdC0+YWRtYV9hZGRyID4+IDMyLAorCQkJCQkJICAgICBTREhDSV9BRE1BX0FERFJFU1NfSEkpOwogCQkJfQogCQl9IGVsc2UgewogCQkJaW50IHNnX2NudDsKQEAgLTg1NSwxMCArODc3LDE0IEBACiAJCWN0cmwgPSBzZGhjaV9yZWFkYihob3N0LCBTREhDSV9IT1NUX0NPTlRST0wpOwogCQljdHJsICY9IH5TREhDSV9DVFJMX0RNQV9NQVNLOwogCQlpZiAoKGhvc3QtPmZsYWdzICYgU0RIQ0lfUkVRX1VTRV9ETUEpICYmCi0JCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkpCi0JCQljdHJsIHw9IFNESENJX0NUUkxfQURNQTMyOwotCQllbHNlCisJCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkpIHsKKwkJCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV82NF9CSVRfRE1BKQorCQkJCWN0cmwgfD0gU0RIQ0lfQ1RSTF9BRE1BNjQ7CisJCQllbHNlCisJCQkJY3RybCB8PSBTREhDSV9DVFJMX0FETUEzMjsKKwkJfSBlbHNlIHsKIAkJCWN0cmwgfD0gU0RIQ0lfQ1RSTF9TRE1BOworCQl9CiAJCXNkaGNpX3dyaXRlYihob3N0LCBjdHJsLCBTREhDSV9IT1NUX0NPTlRST0wpOwogCX0KIApAQCAtODg5LDEwICs5MTUsMTUgQEAKIAlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBjbWQtPmRhdGE7CiAKIAlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWlmIChob3N0LT5xdWlya3MyICYKKwkJCVNESENJX1FVSVJLMl9DTEVBUl9UUkFOU0ZFUk1PREVfUkVHX0JFRk9SRV9DTUQpIHsKKwkJCXNkaGNpX3dyaXRldyhob3N0LCAweDAsIFNESENJX1RSQU5TRkVSX01PREUpOworCQl9IGVsc2UgewogCQkvKiBjbGVhciBBdXRvIENNRCBzZXR0aW5ncyBmb3Igbm8gZGF0YSBDTURzICovCi0JCW1vZGUgPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKLQkJc2RoY2lfd3JpdGV3KGhvc3QsIG1vZGUgJiB+KFNESENJX1RSTlNfQVVUT19DTUQxMiB8CisJCQltb2RlID0gc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfVFJBTlNGRVJfTU9ERSk7CisJCQlzZGhjaV93cml0ZXcoaG9zdCwgbW9kZSAmIH4oU0RIQ0lfVFJOU19BVVRPX0NNRDEyIHwKIAkJCQlTREhDSV9UUk5TX0FVVE9fQ01EMjMpLCBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKKwkJfQogCQlyZXR1cm47CiAJfQogCkBAIC0xMTE3LDYgKzExNDgsOSBAQAogCWNhc2UgTU1DX1RJTUlOR19VSFNfRERSNTA6CiAJCXByZXNldCA9IHNkaGNpX3JlYWR3KGhvc3QsIFNESENJX1BSRVNFVF9GT1JfRERSNTApOwogCQlicmVhazsKKwljYXNlIE1NQ19USU1JTkdfTU1DX0hTNDAwOgorCQlwcmVzZXQgPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9QUkVTRVRfRk9SX0hTNDAwKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfd2FybigiJXM6IEludmFsaWQgVUhTLUkgbW9kZSBzZWxlY3RlZFxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKQEAgLTE0NDQsNiArMTQ3OCw4IEBACiAJZWxzZSBpZiAoKHRpbWluZyA9PSBNTUNfVElNSU5HX1VIU19ERFI1MCkgfHwKIAkJICh0aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfRERSNTIpKQogCQljdHJsXzIgfD0gU0RIQ0lfQ1RSTF9VSFNfRERSNTA7CisJZWxzZSBpZiAodGltaW5nID09IE1NQ19USU1JTkdfTU1DX0hTNDAwKQorCQljdHJsXzIgfD0gU0RIQ0lfQ1RSTF9IUzQwMDsgLyogTm9uLXN0YW5kYXJkICovCiAJc2RoY2lfd3JpdGV3KGhvc3QsIGN0cmxfMiwgU0RIQ0lfSE9TVF9DT05UUk9MMik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzZGhjaV9zZXRfdWhzX3NpZ25hbGluZyk7CkBAIC0xNTE1LDcgKzE1NTEsOCBAQAogCQl1MTYgY2xrLCBjdHJsXzI7CiAKIAkJLyogSW4gY2FzZSBvZiBVSFMtSSBtb2Rlcywgc2V0IEhpZ2ggU3BlZWQgRW5hYmxlICovCi0JCWlmICgoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfSFMyMDApIHx8CisJCWlmICgoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfSFM0MDApIHx8CisJCSAgICAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfSFMyMDApIHx8CiAJCSAgICAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfRERSNTIpIHx8CiAJCSAgICAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19VSFNfU0RSNTApIHx8CiAJCSAgICAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19VSFNfU0RSMTA0KSB8fApAQCAtMTg2Miw2ICsxODk5LDcgQEAKIAkgKiB0dW5pbmcgZnVuY3Rpb24gaGFzIHRvIGJlIGV4ZWN1dGVkLgogCSAqLwogCXN3aXRjaCAoaG9zdC0+dGltaW5nKSB7CisJY2FzZSBNTUNfVElNSU5HX01NQ19IUzQwMDoKIAljYXNlIE1NQ19USU1JTkdfTU1DX0hTMjAwOgogCWNhc2UgTU1DX1RJTUlOR19VSFNfU0RSMTA0OgogCQlicmVhazsKQEAgLTIxNDQsOSArMjE4MiwxMCBAQAogCSAqLwogCWlmICghKGhvc3QtPmZsYWdzICYgU0RIQ0lfREVWSUNFX0RFQUQpICYmCiAJICAgICgobXJxLT5jbWQgJiYgbXJxLT5jbWQtPmVycm9yKSB8fAotCQkgKG1ycS0+ZGF0YSAmJiAobXJxLT5kYXRhLT5lcnJvciB8fAotCQkgIChtcnEtPmRhdGEtPnN0b3AgJiYgbXJxLT5kYXRhLT5zdG9wLT5lcnJvcikpKSB8fAotCQkgICAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfUkVTRVRfQUZURVJfUkVRVUVTVCkpKSB7CisJICAgICAobXJxLT5zYmMgJiYgbXJxLT5zYmMtPmVycm9yKSB8fAorCSAgICAgKG1ycS0+ZGF0YSAmJiAoKG1ycS0+ZGF0YS0+ZXJyb3IgJiYgIW1ycS0+ZGF0YS0+c3RvcCkgfHwKKwkJCSAgICAobXJxLT5kYXRhLT5zdG9wICYmIG1ycS0+ZGF0YS0+c3RvcC0+ZXJyb3IpKSkgfHwKKwkgICAgIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19SRVNFVF9BRlRFUl9SRVFVRVNUKSkpIHsKIAogCQkvKiBTb21lIGNvbnRyb2xsZXJzIG5lZWQgdGhpcyBraWNrIG9yIHJlc2V0IHdvbid0IHdvcmsgaGVyZSAqLwogCQlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfQ0xPQ0tfQkVGT1JFX1JFU0VUKQpAQCAtMjI4MiwzMiArMjMyMSwzNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX01NQ19ERUJVRwotc3RhdGljIHZvaWQgc2RoY2lfc2hvd19hZG1hX2Vycm9yKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgc2RoY2lfYWRtYV9zaG93X2Vycm9yKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQogewogCWNvbnN0IGNoYXIgKm5hbWUgPSBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKTsKLQl1OCAqZGVzYyA9IGhvc3QtPmFkbWFfZGVzYzsKLQlfX2xlMzIgKmRtYTsKLQlfX2xlMTYgKmxlbjsKLQl1OCBhdHRyOworCXZvaWQgKmRlc2MgPSBob3N0LT5hZG1hX3RhYmxlOwogCiAJc2RoY2lfZHVtcHJlZ3MoaG9zdCk7CiAKIAl3aGlsZSAodHJ1ZSkgewotCQlkbWEgPSAoX19sZTMyICopKGRlc2MgKyA0KTsKLQkJbGVuID0gKF9fbGUxNiAqKShkZXNjICsgMik7Ci0JCWF0dHIgPSAqZGVzYzsKKwkJc3RydWN0IHNkaGNpX2FkbWEyXzY0X2Rlc2MgKmRtYV9kZXNjID0gZGVzYzsKIAotCQlEQkcoIiVzOiAlcDogRE1BIDB4JTA4eCwgTEVOIDB4JTA0eCwgQXR0cj0weCUwMnhcbiIsCi0JCSAgICBuYW1lLCBkZXNjLCBsZTMyX3RvX2NwdSgqZG1hKSwgbGUxNl90b19jcHUoKmxlbiksIGF0dHIpOworCQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkKKwkJCURCRygiJXM6ICVwOiBETUEgMHglMDh4JTA4eCwgTEVOIDB4JTA0eCwgQXR0cj0weCUwMnhcbiIsCisJCQkgICAgbmFtZSwgZGVzYywgbGUzMl90b19jcHUoZG1hX2Rlc2MtPmFkZHJfaGkpLAorCQkJICAgIGxlMzJfdG9fY3B1KGRtYV9kZXNjLT5hZGRyX2xvKSwKKwkJCSAgICBsZTE2X3RvX2NwdShkbWFfZGVzYy0+bGVuKSwKKwkJCSAgICBsZTE2X3RvX2NwdShkbWFfZGVzYy0+Y21kKSk7CisJCWVsc2UKKwkJCURCRygiJXM6ICVwOiBETUEgMHglMDh4LCBMRU4gMHglMDR4LCBBdHRyPTB4JTAyeFxuIiwKKwkJCSAgICBuYW1lLCBkZXNjLCBsZTMyX3RvX2NwdShkbWFfZGVzYy0+YWRkcl9sbyksCisJCQkgICAgbGUxNl90b19jcHUoZG1hX2Rlc2MtPmxlbiksCisJCQkgICAgbGUxNl90b19jcHUoZG1hX2Rlc2MtPmNtZCkpOwogCi0JCWRlc2MgKz0gODsKKwkJZGVzYyArPSBob3N0LT5kZXNjX3N6OwogCi0JCWlmIChhdHRyICYgMikKKwkJaWYgKGRtYV9kZXNjLT5jbWQgJiBjcHVfdG9fbGUxNihBRE1BMl9FTkQpKQogCQkJYnJlYWs7CiAJfQogfQogI2Vsc2UKLXN0YXRpYyB2b2lkIHNkaGNpX3Nob3dfYWRtYV9lcnJvcihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkgeyB9CitzdGF0aWMgdm9pZCBzZGhjaV9hZG1hX3Nob3dfZXJyb3Ioc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpIHsgfQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHNkaGNpX2RhdGFfaXJxKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgaW50bWFzaykKQEAgLTIzNzAsNyArMjQxMyw3IEBACiAJCWhvc3QtPmRhdGEtPmVycm9yID0gLUVJTFNFUTsKIAllbHNlIGlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0FETUFfRVJST1IpIHsKIAkJcHJfZXJyKCIlczogQURNQSBlcnJvclxuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwotCQlzZGhjaV9zaG93X2FkbWFfZXJyb3IoaG9zdCk7CisJCXNkaGNpX2FkbWFfc2hvd19lcnJvcihob3N0KTsKIAkJaG9zdC0+ZGF0YS0+ZXJyb3IgPSAtRUlPOwogCQlpZiAoaG9zdC0+b3BzLT5hZG1hX3dvcmthcm91bmQpCiAJCQlob3N0LT5vcHMtPmFkbWFfd29ya2Fyb3VuZChob3N0LCBpbnRtYXNrKTsKQEAgLTI2NTQsOSArMjY5Nyw2IEBACiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHNkaGNpX3Jlc3VtZV9ob3N0KTsKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiAKIHN0YXRpYyBpbnQgc2RoY2lfcnVudGltZV9wbV9nZXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7CkBAIC0yNzU3LDcgKzI3OTcsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2RoY2lfcnVudGltZV9yZXN1bWVfaG9zdCk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTI4NDksNiArMjg4OSwxNiBAQAogCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFX0FETUE7CiAJfQogCisJLyoKKwkgKiBJdCBpcyBhc3N1bWVkIHRoYXQgYSA2NC1iaXQgY2FwYWJsZSBkZXZpY2UgaGFzIHNldCBhIDY0LWJpdCBETUEgbWFzaworCSAqIGFuZCAqbXVzdCogZG8gNjQtYml0IERNQS4gIEEgZHJpdmVyIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hhbmdlCisJICogdGhhdCBkdXJpbmcgdGhlIGZpcnN0IGNhbGwgdG8gLT5lbmFibGVfZG1hKCkuICBTaW1pbGFybHkKKwkgKiBTREhDSV9RVUlSSzJfQlJPS0VOXzY0X0JJVF9ETUEgbXVzdCBiZSBsZWZ0IHRvIHRoZSBkcml2ZXJzIHRvCisJICogaW1wbGVtZW50LgorCSAqLworCWlmIChzZGhjaV9yZWFkbChob3N0LCBTREhDSV9DQVBBQklMSVRJRVMpICYgU0RIQ0lfQ0FOXzY0QklUKQorCQlob3N0LT5mbGFncyB8PSBTREhDSV9VU0VfNjRfQklUX0RNQTsKKwogCWlmIChob3N0LT5mbGFncyAmIChTREhDSV9VU0VfU0RNQSB8IFNESENJX1VTRV9BRE1BKSkgewogCQlpZiAoaG9zdC0+b3BzLT5lbmFibGVfZG1hKSB7CiAJCQlpZiAoaG9zdC0+b3BzLT5lbmFibGVfZG1hKGhvc3QpKSB7CkBAIC0yODYwLDMzICsyOTEwLDU2IEBACiAJCX0KIAl9CiAKKwkvKiBTRE1BIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IERNQSAqLworCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV82NF9CSVRfRE1BKQorCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFX1NETUE7CisKIAlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkgewogCQkvKgotCQkgKiBXZSBuZWVkIHRvIGFsbG9jYXRlIGRlc2NyaXB0b3JzIGZvciBhbGwgc2cgZW50cmllcwotCQkgKiAoMTI4KSBhbmQgcG90ZW50aWFsbHkgb25lIGFsaWdubWVudCB0cmFuc2ZlciBmb3IKLQkJICogZWFjaCBvZiB0aG9zZSBlbnRyaWVzLgorCQkgKiBUaGUgRE1BIGRlc2NyaXB0b3IgdGFibGUgc2l6ZSBpcyBjYWxjdWxhdGVkIGFzIHRoZSBtYXhpbXVtCisJCSAqIG51bWJlciBvZiBzZWdtZW50cyB0aW1lcyAyLCB0byBhbGxvdyBmb3IgYW4gYWxpZ25tZW50CisJCSAqIGRlc2NyaXB0b3IgZm9yIGVhY2ggc2VnbWVudCwgcGx1cyAxIGZvciBhIG5vcCBlbmQgZGVzY3JpcHRvciwKKwkJICogYWxsIG11bHRpcGxlZCBieSB0aGUgZGVzY3JpcHRvciBzaXplLgogCQkgKi8KLQkJaG9zdC0+YWRtYV9kZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KG1tY19kZXYobW1jKSwKLQkJCQkJCSAgICAgQURNQV9TSVpFLCAmaG9zdC0+YWRtYV9hZGRyLAotCQkJCQkJICAgICBHRlBfS0VSTkVMKTsKLQkJaG9zdC0+YWxpZ25fYnVmZmVyID0ga21hbGxvYygxMjggKiA0LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFob3N0LT5hZG1hX2Rlc2MgfHwgIWhvc3QtPmFsaWduX2J1ZmZlcikgewotCQkJZG1hX2ZyZWVfY29oZXJlbnQobW1jX2RldihtbWMpLCBBRE1BX1NJWkUsCi0JCQkJCSAgaG9zdC0+YWRtYV9kZXNjLCBob3N0LT5hZG1hX2FkZHIpOworCQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfNjRfQklUX0RNQSkgeworCQkJaG9zdC0+YWRtYV90YWJsZV9zeiA9IChTREhDSV9NQVhfU0VHUyAqIDIgKyAxKSAqCisJCQkJCSAgICAgIFNESENJX0FETUEyXzY0X0RFU0NfU1o7CisJCQlob3N0LT5hbGlnbl9idWZmZXJfc3ogPSBTREhDSV9NQVhfU0VHUyAqCisJCQkJCQlTREhDSV9BRE1BMl82NF9BTElHTjsKKwkJCWhvc3QtPmRlc2Nfc3ogPSBTREhDSV9BRE1BMl82NF9ERVNDX1NaOworCQkJaG9zdC0+YWxpZ25fc3ogPSBTREhDSV9BRE1BMl82NF9BTElHTjsKKwkJCWhvc3QtPmFsaWduX21hc2sgPSBTREhDSV9BRE1BMl82NF9BTElHTiAtIDE7CisJCX0gZWxzZSB7CisJCQlob3N0LT5hZG1hX3RhYmxlX3N6ID0gKFNESENJX01BWF9TRUdTICogMiArIDEpICoKKwkJCQkJICAgICAgU0RIQ0lfQURNQTJfMzJfREVTQ19TWjsKKwkJCWhvc3QtPmFsaWduX2J1ZmZlcl9zeiA9IFNESENJX01BWF9TRUdTICoKKwkJCQkJCVNESENJX0FETUEyXzMyX0FMSUdOOworCQkJaG9zdC0+ZGVzY19zeiA9IFNESENJX0FETUEyXzMyX0RFU0NfU1o7CisJCQlob3N0LT5hbGlnbl9zeiA9IFNESENJX0FETUEyXzMyX0FMSUdOOworCQkJaG9zdC0+YWxpZ25fbWFzayA9IFNESENJX0FETUEyXzMyX0FMSUdOIC0gMTsKKwkJfQorCQlob3N0LT5hZG1hX3RhYmxlID0gZG1hX2FsbG9jX2NvaGVyZW50KG1tY19kZXYobW1jKSwKKwkJCQkJCSAgICAgIGhvc3QtPmFkbWFfdGFibGVfc3osCisJCQkJCQkgICAgICAmaG9zdC0+YWRtYV9hZGRyLAorCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWhvc3QtPmFsaWduX2J1ZmZlciA9IGttYWxsb2MoaG9zdC0+YWxpZ25fYnVmZmVyX3N6LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFob3N0LT5hZG1hX3RhYmxlIHx8ICFob3N0LT5hbGlnbl9idWZmZXIpIHsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KG1tY19kZXYobW1jKSwgaG9zdC0+YWRtYV90YWJsZV9zeiwKKwkJCQkJICBob3N0LT5hZG1hX3RhYmxlLCBob3N0LT5hZG1hX2FkZHIpOwogCQkJa2ZyZWUoaG9zdC0+YWxpZ25fYnVmZmVyKTsKIAkJCXByX3dhcm4oIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgQURNQSBidWZmZXJzIC0gZmFsbGluZyBiYWNrIHRvIHN0YW5kYXJkIERNQVxuIiwKIAkJCQltbWNfaG9zdG5hbWUobW1jKSk7CiAJCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfVVNFX0FETUE7Ci0JCQlob3N0LT5hZG1hX2Rlc2MgPSBOVUxMOworCQkJaG9zdC0+YWRtYV90YWJsZSA9IE5VTEw7CiAJCQlob3N0LT5hbGlnbl9idWZmZXIgPSBOVUxMOwotCQl9IGVsc2UgaWYgKGhvc3QtPmFkbWFfYWRkciAmIDMpIHsKKwkJfSBlbHNlIGlmIChob3N0LT5hZG1hX2FkZHIgJiBob3N0LT5hbGlnbl9tYXNrKSB7CiAJCQlwcl93YXJuKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGFsaWduZWQgQURNQSBkZXNjcmlwdG9yXG4iLAogCQkJCW1tY19ob3N0bmFtZShtbWMpKTsKIAkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9VU0VfQURNQTsKLQkJCWRtYV9mcmVlX2NvaGVyZW50KG1tY19kZXYobW1jKSwgQURNQV9TSVpFLAotCQkJCQkgIGhvc3QtPmFkbWFfZGVzYywgaG9zdC0+YWRtYV9hZGRyKTsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KG1tY19kZXYobW1jKSwgaG9zdC0+YWRtYV90YWJsZV9zeiwKKwkJCQkJICBob3N0LT5hZG1hX3RhYmxlLCBob3N0LT5hZG1hX2FkZHIpOwogCQkJa2ZyZWUoaG9zdC0+YWxpZ25fYnVmZmVyKTsKLQkJCWhvc3QtPmFkbWFfZGVzYyA9IE5VTEw7CisJCQlob3N0LT5hZG1hX3RhYmxlID0gTlVMTDsKIAkJCWhvc3QtPmFsaWduX2J1ZmZlciA9IE5VTEw7CiAJCX0KIAl9CkBAIC0zMDI3LDcgKzMxMDAsNyBAQAogCQlpZiAocmV0KSB7CiAJCQlwcl93YXJuKCIlczogRmFpbGVkIHRvIGVuYWJsZSB2cW1tYyByZWd1bGF0b3I6ICVkXG4iLAogCQkJCW1tY19ob3N0bmFtZShtbWMpLCByZXQpOwotCQkJbW1jLT5zdXBwbHkudnFtbWMgPSBOVUxMOworCQkJbW1jLT5zdXBwbHkudnFtbWMgPSBFUlJfUFRSKC1FSU5WQUwpOwogCQl9CiAJfQogCkBAIC0zMDQ2LDE2ICszMTE5LDIxIEBACiAJCS8qIFNEMy4wOiBTRFIxMDQgaXMgc3VwcG9ydGVkIHNvIChmb3IgZU1NQykgdGhlIGNhcHMyCiAJCSAqIGZpZWxkIGNhbiBiZSBwcm9tb3RlZCB0byBzdXBwb3J0IEhTMjAwLgogCQkgKi8KLQkJaWYgKCEoaG9zdC0+cXVpcmtzMiAmIFNESENJX1FVSVJLMl9CUk9LRU5fSFMyMDApKSB7CisJCWlmICghKGhvc3QtPnF1aXJrczIgJiBTREhDSV9RVUlSSzJfQlJPS0VOX0hTMjAwKSkKIAkJCW1tYy0+Y2FwczIgfD0gTU1DX0NBUDJfSFMyMDA7Ci0JCQlpZiAoSVNfRVJSKG1tYy0+c3VwcGx5LnZxbW1jKSB8fAotCQkJCQkhcmVndWxhdG9yX2lzX3N1cHBvcnRlZF92b2x0YWdlCi0JCQkJCShtbWMtPnN1cHBseS52cW1tYywgMTEwMDAwMCwgMTMwMDAwMCkpCi0JCQkJbW1jLT5jYXBzMiAmPSB+TU1DX0NBUDJfSFMyMDBfMV8yVl9TRFI7Ci0JCX0KIAl9IGVsc2UgaWYgKGNhcHNbMV0gJiBTREhDSV9TVVBQT1JUX1NEUjUwKQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9VSFNfU0RSNTA7CiAKKwlpZiAoaG9zdC0+cXVpcmtzMiAmIFNESENJX1FVSVJLMl9DQVBTX0JJVDYzX0ZPUl9IUzQwMCAmJgorCSAgICAoY2Fwc1sxXSAmIFNESENJX1NVUFBPUlRfSFM0MDApKQorCQltbWMtPmNhcHMyIHw9IE1NQ19DQVAyX0hTNDAwOworCisJaWYgKChtbWMtPmNhcHMyICYgTU1DX0NBUDJfSFNYMDBfMV8yVikgJiYKKwkgICAgKElTX0VSUihtbWMtPnN1cHBseS52cW1tYykgfHwKKwkgICAgICFyZWd1bGF0b3JfaXNfc3VwcG9ydGVkX3ZvbHRhZ2UobW1jLT5zdXBwbHkudnFtbWMsIDExMDAwMDAsCisJCQkJCSAgICAgMTMwMDAwMCkpKQorCQltbWMtPmNhcHMyICY9IH5NTUNfQ0FQMl9IU1gwMF8xXzJWOworCiAJaWYgKChjYXBzWzFdICYgU0RIQ0lfU1VQUE9SVF9ERFI1MCkgJiYKIAkJIShob3N0LT5xdWlya3MyICYgU0RIQ0lfUVVJUksyX0JST0tFTl9ERFI1MCkpCiAJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX1VIU19ERFI1MDsKQEAgLTMxNzUsMTEgKzMyNTMsMTEgQEAKIAkgKiBjYW4gZG8gc2NhdHRlci9nYXRoZXIgb3Igbm90LgogCSAqLwogCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKQotCQltbWMtPm1heF9zZWdzID0gMTI4OworCQltbWMtPm1heF9zZWdzID0gU0RIQ0lfTUFYX1NFR1M7CiAJZWxzZSBpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfU0RNQSkKIAkJbW1jLT5tYXhfc2VncyA9IDE7CiAJZWxzZSAvKiBQSU8gKi8KLQkJbW1jLT5tYXhfc2VncyA9IDEyODsKKwkJbW1jLT5tYXhfc2VncyA9IFNESENJX01BWF9TRUdTOwogCiAJLyoKIAkgKiBNYXhpbXVtIG51bWJlciBvZiBzZWN0b3JzIGluIG9uZSB0cmFuc2Zlci4gTGltaXRlZCBieSBETUEgYm91bmRhcnkKQEAgLTMyNzcsNyArMzM1NSw4IEBACiAKIAlwcl9pbmZvKCIlczogU0RIQ0kgY29udHJvbGxlciBvbiAlcyBbJXNdIHVzaW5nICVzXG4iLAogCQltbWNfaG9zdG5hbWUobW1jKSwgaG9zdC0+aHdfbmFtZSwgZGV2X25hbWUobW1jX2RldihtbWMpKSwKLQkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpID8gIkFETUEiIDoKKwkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpID8KKwkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFXzY0X0JJVF9ETUEpID8gIkFETUEgNjQtYml0IiA6ICJBRE1BIiA6CiAJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9TRE1BKSA/ICJETUEiIDogIlBJTyIpOwogCiAJc2RoY2lfZW5hYmxlX2NhcmRfZGV0ZWN0aW9uKGhvc3QpOwpAQCAtMzMzOSwxOCArMzQxOCwxNSBAQAogCiAJdGFza2xldF9raWxsKCZob3N0LT5maW5pc2hfdGFza2xldCk7CiAKLQlpZiAoIUlTX0VSUihtbWMtPnN1cHBseS52bW1jKSkKLQkJcmVndWxhdG9yX2Rpc2FibGUobW1jLT5zdXBwbHkudm1tYyk7Ci0KIAlpZiAoIUlTX0VSUihtbWMtPnN1cHBseS52cW1tYykpCiAJCXJlZ3VsYXRvcl9kaXNhYmxlKG1tYy0+c3VwcGx5LnZxbW1jKTsKIAotCWlmIChob3N0LT5hZG1hX2Rlc2MpCi0JCWRtYV9mcmVlX2NvaGVyZW50KG1tY19kZXYobW1jKSwgQURNQV9TSVpFLAotCQkJCSAgaG9zdC0+YWRtYV9kZXNjLCBob3N0LT5hZG1hX2FkZHIpOworCWlmIChob3N0LT5hZG1hX3RhYmxlKQorCQlkbWFfZnJlZV9jb2hlcmVudChtbWNfZGV2KG1tYyksIGhvc3QtPmFkbWFfdGFibGVfc3osCisJCQkJICBob3N0LT5hZG1hX3RhYmxlLCBob3N0LT5hZG1hX2FkZHIpOwogCWtmcmVlKGhvc3QtPmFsaWduX2J1ZmZlcik7CiAKLQlob3N0LT5hZG1hX2Rlc2MgPSBOVUxMOworCWhvc3QtPmFkbWFfdGFibGUgPSBOVUxMOwogCWhvc3QtPmFsaWduX2J1ZmZlciA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaAppbmRleCAzMTg5NmE3Li40MWEyYzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCkBAIC0xNjEsNyArMTYxLDcgQEAKICNkZWZpbmUgICBTREhDSV9DVFJMX1VIU19TRFI1MAkJMHgwMDAyCiAjZGVmaW5lICAgU0RIQ0lfQ1RSTF9VSFNfU0RSMTA0CQkweDAwMDMKICNkZWZpbmUgICBTREhDSV9DVFJMX1VIU19ERFI1MAkJMHgwMDA0Ci0jZGVmaW5lICAgU0RIQ0lfQ1RSTF9IU19TRFIyMDAJCTB4MDAwNSAvKiByZXNlcnZlZCB2YWx1ZSBpbiBTRElPIHNwZWMgKi8KKyNkZWZpbmUgICBTREhDSV9DVFJMX0hTNDAwCQkweDAwMDUgLyogTm9uLXN0YW5kYXJkICovCiAjZGVmaW5lICBTREhDSV9DVFJMX1ZERF8xODAJCTB4MDAwOAogI2RlZmluZSAgU0RIQ0lfQ1RSTF9EUlZfVFlQRV9NQVNLCTB4MDAzMAogI2RlZmluZSAgIFNESENJX0NUUkxfRFJWX1RZUEVfQgkJMHgwMDAwCkBAIC0yMDQsNiArMjA0LDcgQEAKICNkZWZpbmUgIFNESENJX1JFVFVOSU5HX01PREVfU0hJRlQJCTE0CiAjZGVmaW5lICBTREhDSV9DTE9DS19NVUxfTUFTSwkweDAwRkYwMDAwCiAjZGVmaW5lICBTREhDSV9DTE9DS19NVUxfU0hJRlQJMTYKKyNkZWZpbmUgIFNESENJX1NVUFBPUlRfSFM0MDAJMHg4MDAwMDAwMCAvKiBOb24tc3RhbmRhcmQgKi8KIAogI2RlZmluZSBTREhDSV9DQVBBQklMSVRJRVNfMQkweDQ0CiAKQEAgLTIyNyw2ICsyMjgsNyBAQAogLyogNTUtNTcgcmVzZXJ2ZWQgKi8KIAogI2RlZmluZSBTREhDSV9BRE1BX0FERFJFU1MJMHg1OAorI2RlZmluZSBTREhDSV9BRE1BX0FERFJFU1NfSEkJMHg1QwogCiAvKiA2MC1GQiByZXNlcnZlZCAqLwogCkBAIC0yMzUsNiArMjM3LDcgQEAKICNkZWZpbmUgU0RIQ0lfUFJFU0VUX0ZPUl9TRFI1MCAweDZBCiAjZGVmaW5lIFNESENJX1BSRVNFVF9GT1JfU0RSMTA0ICAgICAgICAweDZDCiAjZGVmaW5lIFNESENJX1BSRVNFVF9GT1JfRERSNTAgMHg2RQorI2RlZmluZSBTREhDSV9QUkVTRVRfRk9SX0hTNDAwIDB4NzQgLyogTm9uLXN0YW5kYXJkICovCiAjZGVmaW5lIFNESENJX1BSRVNFVF9EUlZfTUFTSyAgMHhDMDAwCiAjZGVmaW5lIFNESENJX1BSRVNFVF9EUlZfU0hJRlQgIDE0CiAjZGVmaW5lIFNESENJX1BSRVNFVF9DTEtHRU5fU0VMX01BU0sgICAweDQwMApAQCAtMjY2LDYgKzI2OSw0NiBAQAogI2RlZmluZSBTREhDSV9ERUZBVUxUX0JPVU5EQVJZX1NJWkUgICg1MTIgKiAxMDI0KQogI2RlZmluZSBTREhDSV9ERUZBVUxUX0JPVU5EQVJZX0FSRyAgIChpbG9nMihTREhDSV9ERUZBVUxUX0JPVU5EQVJZX1NJWkUpIC0gMTIpCiAKKy8qIEFETUEyIDMyLWJpdCBETUEgZGVzY3JpcHRvciBzaXplICovCisjZGVmaW5lIFNESENJX0FETUEyXzMyX0RFU0NfU1oJOAorCisvKiBBRE1BMiAzMi1iaXQgRE1BIGFsaWdubWVudCAqLworI2RlZmluZSBTREhDSV9BRE1BMl8zMl9BTElHTgk0CisKKy8qIEFETUEyIDMyLWJpdCBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2RoY2lfYWRtYTJfMzJfZGVzYyB7CisJX19sZTE2CWNtZDsKKwlfX2xlMTYJbGVuOworCV9fbGUzMglhZGRyOworfSAgX19wYWNrZWQgX19hbGlnbmVkKFNESENJX0FETUEyXzMyX0FMSUdOKTsKKworLyogQURNQTIgNjQtYml0IERNQSBkZXNjcmlwdG9yIHNpemUgKi8KKyNkZWZpbmUgU0RIQ0lfQURNQTJfNjRfREVTQ19TWgkxMgorCisvKiBBRE1BMiA2NC1iaXQgRE1BIGFsaWdubWVudCAqLworI2RlZmluZSBTREhDSV9BRE1BMl82NF9BTElHTgk4CisKKy8qCisgKiBBRE1BMiA2NC1iaXQgZGVzY3JpcHRvci4gTm90ZSAxMi1ieXRlIGRlc2NyaXB0b3IgY2FuJ3QgYWx3YXlzIGJlIDgtYnl0ZQorICogYWxpZ25lZC4KKyAqLworc3RydWN0IHNkaGNpX2FkbWEyXzY0X2Rlc2MgeworCV9fbGUxNgljbWQ7CisJX19sZTE2CWxlbjsKKwlfX2xlMzIJYWRkcl9sbzsKKwlfX2xlMzIJYWRkcl9oaTsKK30gIF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKKworI2RlZmluZSBBRE1BMl9UUkFOX1ZBTElECTB4MjEKKyNkZWZpbmUgQURNQTJfTk9QX0VORF9WQUxJRAkweDMKKyNkZWZpbmUgQURNQTJfRU5ECQkweDIKKworLyoKKyAqIE1heGltdW0gc2VnbWVudHMgYXNzdW1pbmcgYSA1MTJLaUIgbWF4aW11bSByZXF1aXNpdGlvbiBzaXplIGFuZCBhIG1pbmltdW0KKyAqIDRLaUIgcGFnZSBzaXplLgorICovCisjZGVmaW5lIFNESENJX01BWF9TRUdTCQkxMjgKKwogc3RydWN0IHNkaGNpX29wcyB7CiAjaWZkZWYgQ09ORklHX01NQ19TREhDSV9JT19BQ0NFU1NPUlMKIAl1MzIJCSgqcmVhZF9sKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZyk7CkBAIC00MTEsOSArNDU0LDYgQEAKIGV4dGVybiBpbnQgc2RoY2lfc3VzcGVuZF9ob3N0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KTsKIGV4dGVybiBpbnQgc2RoY2lfcmVzdW1lX2hvc3Qoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpOwogZXh0ZXJuIHZvaWQgc2RoY2lfZW5hYmxlX2lycV93YWtldXBzKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIGV4dGVybiBpbnQgc2RoY2lfcnVudGltZV9zdXNwZW5kX2hvc3Qoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpOwogZXh0ZXJuIGludCBzZGhjaV9ydW50aW1lX3Jlc3VtZV9ob3N0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zaF9tb2JpbGVfc2RoaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zaF9tb2JpbGVfc2RoaS5jCmluZGV4IGEyZTgxYTEuLjAwYzhlYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2hfbW9iaWxlX3NkaGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NoX21vYmlsZV9zZGhpLmMKQEAgLTM3NSw3ICszNzUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHRtaW9fbW1jX2Rldl9wbV9vcHMgPSB7CiAJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMocG1fcnVudGltZV9mb3JjZV9zdXNwZW5kLAogCQkJcG1fcnVudGltZV9mb3JjZV9yZXN1bWUpCi0JU0VUX1BNX1JVTlRJTUVfUE1fT1BTKHRtaW9fbW1jX2hvc3RfcnVudGltZV9zdXNwZW5kLAorCVNFVF9SVU5USU1FX1BNX09QUyh0bWlvX21tY19ob3N0X3J1bnRpbWVfc3VzcGVuZCwKIAkJCXRtaW9fbW1jX2hvc3RfcnVudGltZV9yZXN1bWUsCiAJCQlOVUxMKQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc3VueGktbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L3N1bnhpLW1tYy5jCmluZGV4IGQxNjYzYjMuLjE1Y2I4YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc3VueGktbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zdW54aS1tbWMuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLXByaXZhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsvc3VueGkuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYwppbmRleCA2NTkwMjhkLi4yNjE2ZmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHRtaW9fbW1jX2Rldl9wbV9vcHMgPSB7CiAJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFModG1pb19tbWNfc3VzcGVuZCwgdG1pb19tbWNfcmVzdW1lKQotCVNFVF9QTV9SVU5USU1FX1BNX09QUyh0bWlvX21tY19ob3N0X3J1bnRpbWVfc3VzcGVuZCwKKwlTRVRfUlVOVElNRV9QTV9PUFModG1pb19tbWNfaG9zdF9ydW50aW1lX3N1c3BlbmQsCiAJCQl0bWlvX21tY19ob3N0X3J1bnRpbWVfcmVzdW1lLAogCQkJTlVMTCkKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3Rvc2hzZC5jIGIvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjY2MjYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuYwpAQCAtMCwwICsxLDcxNyBAQAorLyoKKyAqICBUb3NoaWJhIFBDSSBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgT25kcmVqIFphcnkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUmljaGFyZCBCZXR0cywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKglCYXNlZCBvbiBhc2ljM19tbWMuYywgY29weXJpZ2h0IChjKSAyMDA1IFNERyBTeXN0ZW1zLCBMTEMgYW5kLAorICoJc2RoY2kuYywgY29weXJpZ2h0IChDKSAyMDA1LTIwMDYgUGllcnJlIE9zc21hbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CisKKyNpbmNsdWRlICJ0b3Noc2QuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAidG9zaHNkIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkc1tdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RPU0hJQkEsIDB4MDgwNSkgfSwKKwl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaV9pZHMpOworCitzdGF0aWMgdm9pZCB0b3Noc2RfaW5pdChzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QpCit7CisJLyogZW5hYmxlIGNsb2NrICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19DTEtTVE9QLAorCQkJCQlTRF9QQ0lDRkdfQ0xLU1RPUF9FTkFCTEVfQUxMKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX0NBUkRERVRFQ1QsIDIpOworCisJLyogcmVzZXQgKi8KKwlpb3dyaXRlMTYoMCwgaG9zdC0+aW9hZGRyICsgU0RfU09GVFdBUkVSRVNFVCk7IC8qIGFzc2VydCAqLworCW1kZWxheSgyKTsKKwlpb3dyaXRlMTYoMSwgaG9zdC0+aW9hZGRyICsgU0RfU09GVFdBUkVSRVNFVCk7IC8qIGRlYXNzZXJ0ICovCisJbWRlbGF5KDIpOworCisJLyogQ2xlYXIgY2FyZCByZWdpc3RlcnMgKi8KKwlpb3dyaXRlMTYoMCwgaG9zdC0+aW9hZGRyICsgU0RfQ0FSRENMT0NLQ1RSTCk7CisJaW93cml0ZTMyKDAsIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCWlvd3JpdGUzMigwLCBob3N0LT5pb2FkZHIgKyBTRF9FUlJPUlNUQVRVUzApOworCWlvd3JpdGUxNigwLCBob3N0LT5pb2FkZHIgKyBTRF9TVE9QSU5URVJOQUwpOworCisJLyogU0RJTyBjbG9jaz8gKi8KKwlpb3dyaXRlMTYoMHgxMDAsIGhvc3QtPmlvYWRkciArIFNESU9fQkFTRSArIFNESU9fQ0xPQ0tOV0FJVENUUkwpOworCisJLyogZW5hYmxlIExFRCAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShob3N0LT5wZGV2LCBTRF9QQ0lDRkdfU0RMRURfRU5BQkxFMSwKKwkJCQkJU0RfUENJQ0ZHX0xFRF9FTkFCTEUxX1NUQVJUKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX1NETEVEX0VOQUJMRTIsCisJCQkJCVNEX1BDSUNGR19MRURfRU5BQkxFMl9TVEFSVCk7CisKKwkvKiBzZXQgaW50ZXJydXB0IG1hc2tzICovCisJaW93cml0ZTMyKH4odTMyKShTRF9DQVJEX1JFU1BfRU5EIHwgU0RfQ0FSRF9SV19FTkQKKwkJCXwgU0RfQ0FSRF9DQVJEX1JFTU9WRURfMCB8IFNEX0NBUkRfQ0FSRF9JTlNFUlRFRF8wCisJCQl8IFNEX0JVRl9SRUFEX0VOQUJMRSB8IFNEX0JVRl9XUklURV9FTkFCTEUKKwkJCXwgU0RfQlVGX0NNRF9USU1FT1VUKSwKKwkJCWhvc3QtPmlvYWRkciArIFNEX0lOVE1BU0tDQVJEKTsKKworCWlvd3JpdGUxNigweDEwMDAsIGhvc3QtPmlvYWRkciArIFNEX1RSQU5TQUNUSU9OQ1RSTCk7Cit9CisKKy8qIFNldCBNTUMgY2xvY2sgLyBwb3dlci4KKyAqIE5vdGU6IFRoaXMgY29udHJvbGxlciB1c2VzIGEgc2ltcGxlIGRpdmlkZXIgc2NoZW1lIHRoZXJlZm9yZSBpdCBjYW5ub3QgcnVuCisgKiBTRC9NTUMgY2FyZHMgYXQgZnVsbCBzcGVlZCAoMjQvMjBNSHopLiBIQ0xLICg9MzNNSHogUENJIGNsb2NrPykgaXMgdG9vIGhpZ2gKKyAqIGFuZCB0aGUgbmV4dCBzbG93ZXN0IGlzIDE2TUh6IChkaXY9MikuCisgKi8KK3N0YXRpYyB2b2lkIF9fdG9zaHNkX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCWlmIChpb3MtPmNsb2NrKSB7CisJCXUxNiBjbGs7CisJCWludCBkaXYgPSAxOworCisJCXdoaWxlIChpb3MtPmNsb2NrIDwgSENMSyAvIGRpdikKKwkJCWRpdiAqPSAyOworCisJCWNsayA9IGRpdiA+PiAyOworCisJCWlmIChkaXYgPT0gMSkgeyAvKiBkaXNhYmxlIHRoZSBkaXZpZGVyICovCisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX0NMS01PREUsCisJCQkJCSAgICAgIFNEX1BDSUNGR19DTEtNT0RFX0RJVl9ESVNBQkxFKTsKKwkJCWNsayB8PSBTRF9DQVJEQ0xLX0RJVl9ESVNBQkxFOworCQl9IGVsc2UKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShob3N0LT5wZGV2LCBTRF9QQ0lDRkdfQ0xLTU9ERSwgMCk7CisKKwkJY2xrIHw9IFNEX0NBUkRDTEtfRU5BQkxFX0NMT0NLOworCQlpb3dyaXRlMTYoY2xrLCBob3N0LT5pb2FkZHIgKyBTRF9DQVJEQ0xPQ0tDVFJMKTsKKworCQltZGVsYXkoMTApOworCX0gZWxzZQorCQlpb3dyaXRlMTYoMCwgaG9zdC0+aW9hZGRyICsgU0RfQ0FSRENMT0NLQ1RSTCk7CisKKwlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgeworCWNhc2UgTU1DX1BPV0VSX09GRjoKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19QT1dFUjEsCisJCQkJCVNEX1BDSUNGR19QV1IxX09GRik7CisJCW1kZWxheSgxKTsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUE9XRVJfVVA6CisJCWJyZWFrOworCWNhc2UgTU1DX1BPV0VSX09OOgorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaG9zdC0+cGRldiwgU0RfUENJQ0ZHX1BPV0VSMSwKKwkJCQkJU0RfUENJQ0ZHX1BXUjFfMzNWKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19QT1dFUjIsCisJCQkJCVNEX1BDSUNGR19QV1IyX0FVVE8pOworCQltZGVsYXkoMjApOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGlvcy0+YnVzX3dpZHRoKSB7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzE6CisJCWlvd3JpdGUxNihTRF9DQVJET1BUX1JFUVVJUkVEIHwgU0RfQ0FSRE9QVF9EQVRBX1JFU1BfVElNRU9VVCgxNCkKKwkJCQl8IFNEX0NBUkRPUFRfQzJfTU9EVUxFX0FCU0VOVAorCQkJCXwgU0RfQ0FSRE9QVF9EQVRBX1hGUl9XSURUSF8xLAorCQkJCWhvc3QtPmlvYWRkciArIFNEX0NBUkRPUFRJT05TRVRVUCk7CisJCWJyZWFrOworCWNhc2UgTU1DX0JVU19XSURUSF80OgorCQlpb3dyaXRlMTYoU0RfQ0FSRE9QVF9SRVFVSVJFRCB8IFNEX0NBUkRPUFRfREFUQV9SRVNQX1RJTUVPVVQoMTQpCisJCQkJfCBTRF9DQVJET1BUX0MyX01PRFVMRV9BQlNFTlQKKwkJCQl8IFNEX0NBUkRPUFRfREFUQV9YRlJfV0lEVEhfNCwKKwkJCQlob3N0LT5pb2FkZHIgKyBTRF9DQVJET1BUSU9OU0VUVVApOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9zZXRfbGVkKHN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCwgdW5zaWduZWQgY2hhciBzdGF0ZSkKK3sKKwlpb3dyaXRlMTYoc3RhdGUsIGhvc3QtPmlvYWRkciArIFNESU9fQkFTRSArIFNESU9fTEVEQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9maW5pc2hfcmVxdWVzdChzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19yZXF1ZXN0ICptcnEgPSBob3N0LT5tcnE7CisKKwkvKiBXcml0ZSBzb21ldGhpbmcgdG8gZW5kIHRoZSBjb21tYW5kICovCisJaG9zdC0+bXJxID0gTlVMTDsKKwlob3N0LT5jbWQgPSBOVUxMOworCWhvc3QtPmRhdGEgPSBOVUxMOworCisJdG9zaHNkX3NldF9sZWQoaG9zdCwgMCk7CisJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0b3Noc2RfdGhyZWFkX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gZGV2X2lkOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmRhdGE7CisJc3RydWN0IHNnX21hcHBpbmdfaXRlciAqc2dfbWl0ZXIgPSAmaG9zdC0+c2dfbWl0ZXI7CisJdW5zaWduZWQgc2hvcnQgKmJ1ZjsKKwlpbnQgY291bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZGF0YSkgeworCQlkZXZfd2FybigmaG9zdC0+cGRldi0+ZGV2LCAiU3B1cmlvdXMgRGF0YSBJUlFcbiIpOworCQlpZiAoaG9zdC0+Y21kKSB7CisJCQlob3N0LT5jbWQtPmVycm9yID0gLUVJTzsKKwkJCXRvc2hzZF9maW5pc2hfcmVxdWVzdChob3N0KTsKKwkJfQorCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIXNnX21pdGVyX25leHQoc2dfbWl0ZXIpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJYnVmID0gc2dfbWl0ZXItPmFkZHI7CisKKwkvKiBFbnN1cmUgd2UgZG9udCByZWFkIG1vcmUgdGhhbiBvbmUgYmxvY2suIFRoZSBjaGlwIHdpbGwgaW50ZXJydXB0IHVzCisJICogV2hlbiB0aGUgbmV4dCBibG9jayBpcyBhdmFpbGFibGUuCisJICovCisJY291bnQgPSBzZ19taXRlci0+bGVuZ3RoOworCWlmIChjb3VudCA+IGRhdGEtPmJsa3N6KQorCQljb3VudCA9IGRhdGEtPmJsa3N6OworCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiY291bnQ6ICUwOHgsIGZsYWdzICUwOHhcbiIsIGNvdW50LAorCQlkYXRhLT5mbGFncyk7CisKKwkvKiBUcmFuc2ZlciB0aGUgZGF0YSAqLworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCWlvcmVhZDMyX3JlcChob3N0LT5pb2FkZHIgKyBTRF9EQVRBUE9SVCwgYnVmLCBjb3VudCA+PiAyKTsKKwllbHNlCisJCWlvd3JpdGUzMl9yZXAoaG9zdC0+aW9hZGRyICsgU0RfREFUQVBPUlQsIGJ1ZiwgY291bnQgPj4gMik7CisKKwlzZ19taXRlci0+Y29uc3VtZWQgPSBjb3VudDsKKwlzZ19taXRlcl9zdG9wKHNnX21pdGVyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgdG9zaHNkX2NtZF9pcnEoc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gaG9zdC0+Y21kOworCXU4ICpidWY7CisJdTE2IGRhdGE7CisKKwlpZiAoIWhvc3QtPmNtZCkgeworCQlkZXZfd2FybigmaG9zdC0+cGRldi0+ZGV2LCAiU3B1cmlvdXMgQ01EIGlycVxuIik7CisJCXJldHVybjsKKwl9CisJYnVmID0gKHU4ICopY21kLT5yZXNwOworCWhvc3QtPmNtZCA9IE5VTEw7CisKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCAmJiBjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpIHsKKwkJLyogUjIgKi8KKwkJYnVmWzEyXSA9IDB4ZmY7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTApOworCQlidWZbMTNdID0gZGF0YSAmIDB4ZmY7CisJCWJ1ZlsxNF0gPSBkYXRhID4+IDg7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTEpOworCQlidWZbMTVdID0gZGF0YSAmIDB4ZmY7CisJCWJ1Zls4XSA9IGRhdGEgPj4gODsKKwkJZGF0YSA9IGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX1JFU1BPTlNFMik7CisJCWJ1Zls5XSA9IGRhdGEgJiAweGZmOworCQlidWZbMTBdID0gZGF0YSA+PiA4OworCQlkYXRhID0gaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfUkVTUE9OU0UzKTsKKwkJYnVmWzExXSA9IGRhdGEgJiAweGZmOworCQlidWZbNF0gPSBkYXRhID4+IDg7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTQpOworCQlidWZbNV0gPSBkYXRhICYgMHhmZjsKKwkJYnVmWzZdID0gZGF0YSA+PiA4OworCQlkYXRhID0gaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfUkVTUE9OU0U1KTsKKwkJYnVmWzddID0gZGF0YSAmIDB4ZmY7CisJCWJ1ZlswXSA9IGRhdGEgPj4gODsKKwkJZGF0YSA9IGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX1JFU1BPTlNFNik7CisJCWJ1ZlsxXSA9IGRhdGEgJiAweGZmOworCQlidWZbMl0gPSBkYXRhID4+IDg7CisJCWRhdGEgPSBpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9SRVNQT05TRTcpOworCQlidWZbM10gPSBkYXRhICYgMHhmZjsKKwl9IGVsc2UgaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKKwkJLyogUjEsIFIxQiwgUjMsIFI2LCBSNyAqLworCQlkYXRhID0gaW9yZWFkMTYoaG9zdC0+aW9hZGRyICsgU0RfUkVTUE9OU0UwKTsKKwkJYnVmWzBdID0gZGF0YSAmIDB4ZmY7CisJCWJ1ZlsxXSA9IGRhdGEgPj4gODsKKwkJZGF0YSA9IGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX1JFU1BPTlNFMSk7CisJCWJ1ZlsyXSA9IGRhdGEgJiAweGZmOworCQlidWZbM10gPSBkYXRhID4+IDg7CisJfQorCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiQ29tbWFuZCBJUlEgY29tcGxldGUgJWQgJWQgJXhcbiIsCisJCWNtZC0+b3Bjb2RlLCBjbWQtPmVycm9yLCBjbWQtPmZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIGRhdGEgdG8gaGFuZGxlIHdlIHdpbGwKKwkgKiBmaW5pc2ggdGhlIHJlcXVlc3QgaW4gdGhlIG1tY19kYXRhX2VuZF9pcnEgaGFuZGxlci4qLworCWlmIChob3N0LT5kYXRhKQorCQlyZXR1cm47CisKKwl0b3Noc2RfZmluaXNoX3JlcXVlc3QoaG9zdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9kYXRhX2VuZF9pcnEoc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmRhdGE7CisKKwlob3N0LT5kYXRhID0gTlVMTDsKKworCWlmICghZGF0YSkgeworCQlkZXZfd2FybigmaG9zdC0+cGRldi0+ZGV2LCAiU3B1cmlvdXMgZGF0YSBlbmQgSVJRXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkYXRhLT5lcnJvciA9PSAwKQorCQlkYXRhLT5ieXRlc194ZmVyZWQgPSBkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzejsKKwllbHNlCisJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IDA7CisKKwlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICJDb21wbGV0ZWQgZGF0YSByZXF1ZXN0IHhmcj0lZFxuIiwKKwkJZGF0YS0+Ynl0ZXNfeGZlcmVkKTsKKworCWlvd3JpdGUxNigwLCBob3N0LT5pb2FkZHIgKyBTRF9TVE9QSU5URVJOQUwpOworCisJdG9zaHNkX2ZpbmlzaF9yZXF1ZXN0KGhvc3QpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdG9zaHNkX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gZGV2X2lkOworCXUzMiBpbnRfcmVnLCBpbnRfbWFzaywgaW50X3N0YXR1cywgZGV0YWlsOworCWludCBlcnJvciA9IDAsIHJldCA9IElSUV9IQU5ETEVEOworCisJc3Bpbl9sb2NrKCZob3N0LT5sb2NrKTsKKwlpbnRfc3RhdHVzID0gaW9yZWFkMzIoaG9zdC0+aW9hZGRyICsgU0RfQ0FSRFNUQVRVUyk7CisJaW50X21hc2sgPSBpb3JlYWQzMihob3N0LT5pb2FkZHIgKyBTRF9JTlRNQVNLQ0FSRCk7CisJaW50X3JlZyA9IGludF9zdGF0dXMgJiB+aW50X21hc2sgJiB+SVJRX0RPTlRfQ0FSRV9CSVRTOworCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiSVJRIHN0YXR1czoleCBtYXNrOiV4XG4iLAorCQlpbnRfc3RhdHVzLCBpbnRfbWFzayk7CisKKwkvKiBub3RoaW5nIHRvIGRvOiBpdCdzIG5vdCBvdXIgSVJRICovCisJaWYgKCFpbnRfcmVnKSB7CisJCXJldCA9IElSUV9OT05FOworCQlnb3RvIGlycV9lbmQ7CisJfQorCisJaWYgKGludF9yZWcgJiBTRF9CVUZfQ01EX1RJTUVPVVQpIHsKKwkJZXJyb3IgPSAtRVRJTUVET1VUOworCQlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICJUaW1lb3V0XG4iKTsKKwl9IGVsc2UgaWYgKGludF9yZWcgJiBTRF9CVUZfQ1JDX0VSUikgeworCQllcnJvciA9IC1FSUxTRVE7CisJCWRldl9lcnIoJmhvc3QtPnBkZXYtPmRldiwgIkJhZENSQ1xuIik7CisJfSBlbHNlIGlmIChpbnRfcmVnICYgKFNEX0JVRl9JTExFR0FMX0FDQ0VTUworCQkJCXwgU0RfQlVGX0NNRF9JTkRFWF9FUlIKKwkJCQl8IFNEX0JVRl9TVE9QX0JJVF9FTkRfRVJSCisJCQkJfCBTRF9CVUZfT1ZFUkZMT1cKKwkJCQl8IFNEX0JVRl9VTkRFUkZMT1cKKwkJCQl8IFNEX0JVRl9EQVRBX1RJTUVPVVQpKSB7CisJCWRldl9lcnIoJmhvc3QtPnBkZXYtPmRldiwgIkJ1ZmZlciBzdGF0dXMgZXJyb3I6IHsgJXMlcyVzJXMlcyVzfVxuIiwKKwkJCWludF9yZWcgJiBTRF9CVUZfSUxMRUdBTF9BQ0NFU1MgPyAiSUxMRUdBTF9BQ0MgIiA6ICIiLAorCQkJaW50X3JlZyAmIFNEX0JVRl9DTURfSU5ERVhfRVJSID8gIkNNRF9JTkRFWCAiIDogIiIsCisJCQlpbnRfcmVnICYgU0RfQlVGX1NUT1BfQklUX0VORF9FUlIgPyAiU1RPUEJJVF9FTkQgIiA6ICIiLAorCQkJaW50X3JlZyAmIFNEX0JVRl9PVkVSRkxPVyA/ICJPVkVSRkxPVyAiIDogIiIsCisJCQlpbnRfcmVnICYgU0RfQlVGX1VOREVSRkxPVyA/ICJVTkRFUkZMT1cgIiA6ICIiLAorCQkJaW50X3JlZyAmIFNEX0JVRl9EQVRBX1RJTUVPVVQgPyAiREFUQV9USU1FT1VUICIgOiAiIik7CisKKwkJZGV0YWlsID0gaW9yZWFkMzIoaG9zdC0+aW9hZGRyICsgU0RfRVJST1JTVEFUVVMwKTsKKwkJZGV2X2VycigmaG9zdC0+cGRldi0+ZGV2LCAiZGV0YWlsIGVycm9yIHN0YXR1cyB7ICVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzfVxuIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfUkVTUF9DTURfRVJSID8gIlJFU1BfQ01EICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfUkVTUF9OT05fQ01EMTJfRU5EX0JJVF9FUlIgPyAiUkVTUF9FTkRfQklUICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfUkVTUF9DTUQxMl9FTkRfQklUX0VSUiA/ICJSRVNQX0VORF9CSVQgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMF9SRUFEX0RBVEFfRU5EX0JJVF9FUlIgPyAiUkVBRF9EQVRBX0VORF9CSVQgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMF9XUklURV9DUkNfU1RBVFVTX0VORF9CSVRfRVJSID8gIldSSVRFX0NNRF9FTkRfQklUICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjBfUkVTUF9OT05fQ01EMTJfQ1JDX0VSUiA/ICJSRVNQX0NSQyAiIDogIiIsCisJCQlkZXRhaWwgJiBTRF9FUlIwX1JFU1BfQ01EMTJfQ1JDX0VSUiA/ICJSRVNQX0NSQyAiIDogIiIsCisJCQlkZXRhaWwgJiBTRF9FUlIwX1JFQURfREFUQV9DUkNfRVJSID8gIlJFQURfREFUQV9DUkMgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMF9XUklURV9DTURfQ1JDX0VSUiA/ICJXUklURV9DTURfQ1JDICIgOiAiIiwKKwkJCWRldGFpbCAmIFNEX0VSUjFfTk9fQ01EX1JFU1AgPyAiTk9fQ01EX1JFU1AgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMV9USU1FT1VUX1JFQURfREFUQSA/ICJSRUFEX0RBVEFfVElNRU9VVCAiIDogIiIsCisJCQlkZXRhaWwgJiBTRF9FUlIxX1RJTUVPVVRfQ1JTX1NUQVRVUyA/ICJDUlNfU1RBVFVTX1RJTUVPVVQgIiA6ICIiLAorCQkJZGV0YWlsICYgU0RfRVJSMV9USU1FT1VUX0NSQ19CVVNZID8gIkNSQ19CVVNZX1RJTUVPVVQgIiA6ICIiKTsKKwkJZXJyb3IgPSAtRUlPOworCX0KKworCWlmIChlcnJvcikgeworCQlpZiAoaG9zdC0+Y21kKQorCQkJaG9zdC0+Y21kLT5lcnJvciA9IGVycm9yOworCisJCWlmIChlcnJvciA9PSAtRVRJTUVET1VUKSB7CisJCQlpb3dyaXRlMzIoaW50X3N0YXR1cyAmCisJCQkJICB+KFNEX0JVRl9DTURfVElNRU9VVCB8IFNEX0NBUkRfUkVTUF9FTkQpLAorCQkJCSAgaG9zdC0+aW9hZGRyICsgU0RfQ0FSRFNUQVRVUyk7CisJCX0gZWxzZSB7CisJCQl0b3Noc2RfaW5pdChob3N0KTsKKwkJCV9fdG9zaHNkX3NldF9pb3MoaG9zdC0+bW1jLCAmaG9zdC0+bW1jLT5pb3MpOworCQkJZ290byBpcnFfZW5kOworCQl9CisJfQorCisJLyogQ2FyZCBpbnNlcnQvcmVtb3ZlLiBUaGUgbW1jIGNvbnRyb2xsaW5nIGNvZGUgaXMgc3RhdGVsZXNzLiAqLworCWlmIChpbnRfcmVnICYgKFNEX0NBUkRfQ0FSRF9JTlNFUlRFRF8wIHwgU0RfQ0FSRF9DQVJEX1JFTU9WRURfMCkpIHsKKwkJaW93cml0ZTMyKGludF9zdGF0dXMgJgorCQkJICB+KFNEX0NBUkRfQ0FSRF9SRU1PVkVEXzAgfCBTRF9DQVJEX0NBUkRfSU5TRVJURURfMCksCisJCQkgIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCisJCWlmIChpbnRfcmVnICYgU0RfQ0FSRF9DQVJEX0lOU0VSVEVEXzApCisJCQl0b3Noc2RfaW5pdChob3N0KTsKKworCQltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIDEpOworCX0KKworCS8qIERhdGEgdHJhbnNmZXIgKi8KKwlpZiAoaW50X3JlZyAmIChTRF9CVUZfUkVBRF9FTkFCTEUgfCBTRF9CVUZfV1JJVEVfRU5BQkxFKSkgeworCQlpb3dyaXRlMzIoaW50X3N0YXR1cyAmCisJCQkgIH4oU0RfQlVGX1dSSVRFX0VOQUJMRSB8IFNEX0JVRl9SRUFEX0VOQUJMRSksCisJCQkgIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCisJCXJldCA9IElSUV9XQUtFX1RIUkVBRDsKKwkJZ290byBpcnFfZW5kOworCX0KKworCS8qIENvbW1hbmQgY29tcGxldGlvbiAqLworCWlmIChpbnRfcmVnICYgU0RfQ0FSRF9SRVNQX0VORCkgeworCQlpb3dyaXRlMzIoaW50X3N0YXR1cyAmIH4oU0RfQ0FSRF9SRVNQX0VORCksCisJCQkgIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCQl0b3Noc2RfY21kX2lycShob3N0KTsKKwl9CisKKwkvKiBEYXRhIHRyYW5zZmVyIGNvbXBsZXRpb24gKi8KKwlpZiAoaW50X3JlZyAmIFNEX0NBUkRfUldfRU5EKSB7CisJCWlvd3JpdGUzMihpbnRfc3RhdHVzICYgfihTRF9DQVJEX1JXX0VORCksCisJCQkgIGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpOworCQl0b3Noc2RfZGF0YV9lbmRfaXJxKGhvc3QpOworCX0KK2lycV9lbmQ6CisJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9zdGFydF9jbWQoc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBob3N0LT5kYXRhOworCWludCBjID0gY21kLT5vcGNvZGU7CisKKwlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsICJDb21tYW5kIG9wY29kZTogJWRcbiIsIGNtZC0+b3Bjb2RlKTsKKworCWlmIChjbWQtPm9wY29kZSA9PSBNTUNfU1RPUF9UUkFOU01JU1NJT04pIHsKKwkJaW93cml0ZTE2KFNEX1NUT1BJTlRfSVNTVUVfQ01EMTIsCisJCQkgIGhvc3QtPmlvYWRkciArIFNEX1NUT1BJTlRFUk5BTCk7CisKKwkJY21kLT5yZXNwWzBdID0gY21kLT5vcGNvZGU7CisJCWNtZC0+cmVzcFsxXSA9IDA7CisJCWNtZC0+cmVzcFsyXSA9IDA7CisJCWNtZC0+cmVzcFszXSA9IDA7CisKKwkJdG9zaHNkX2ZpbmlzaF9yZXF1ZXN0KGhvc3QpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChtbWNfcmVzcF90eXBlKGNtZCkpIHsKKwljYXNlIE1NQ19SU1BfTk9ORToKKwkJYyB8PSBTRF9DTURfUkVTUF9UWVBFX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBNTUNfUlNQX1IxOgorCQljIHw9IFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IxOworCQlicmVhazsKKwljYXNlIE1NQ19SU1BfUjFCOgorCQljIHw9IFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IxQjsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUlNQX1IyOgorCQljIHw9IFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IyOworCQlicmVhazsKKwljYXNlIE1NQ19SU1BfUjM6CisJCWMgfD0gU0RfQ01EX1JFU1BfVFlQRV9FWFRfUjM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VycigmaG9zdC0+cGRldi0+ZGV2LCAiVW5rbm93biByZXNwb25zZSB0eXBlICVkXG4iLAorCQkJbW1jX3Jlc3BfdHlwZShjbWQpKTsKKwkJYnJlYWs7CisJfQorCisJaG9zdC0+Y21kID0gY21kOworCisJaWYgKGNtZC0+b3Bjb2RlID09IE1NQ19BUFBfQ01EKQorCQljIHw9IFNEX0NNRF9UWVBFX0FDTUQ7CisKKwlpZiAoY21kLT5vcGNvZGUgPT0gTU1DX0dPX0lETEVfU1RBVEUpCisJCWMgfD0gKDMgPDwgOCk7ICAvKiByZW1vdmVkIGZyb20gaXBhcS1hc2ljMy5oIGZvciBzb21lIHJlYXNvbiAqLworCisJaWYgKGRhdGEpIHsKKwkJYyB8PSBTRF9DTURfREFUQV9QUkVTRU5UOworCisJCWlmIChkYXRhLT5ibG9ja3MgPiAxKSB7CisJCQlpb3dyaXRlMTYoU0RfU1RPUElOVF9BVVRPX0lTU1VFX0NNRDEyLAorCQkJCSAgaG9zdC0+aW9hZGRyICsgU0RfU1RPUElOVEVSTkFMKTsKKwkJCWMgfD0gU0RfQ01EX01VTFRJX0JMT0NLOworCQl9CisKKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJCWMgfD0gU0RfQ01EX1RSQU5TRkVSX1JFQUQ7CisKKwkJLyogTU1DX0RBVEFfV1JJVEUgZG9lcyBub3QgcmVxdWlyZSBhIGJpdCB0byBiZSBzZXQgKi8KKwl9CisKKwkvKiBTZW5kIHRoZSBjb21tYW5kICovCisJaW93cml0ZTMyKGNtZC0+YXJnLCBob3N0LT5pb2FkZHIgKyBTRF9BUkcwKTsKKwlpb3dyaXRlMTYoYywgaG9zdC0+aW9hZGRyICsgU0RfQ01EKTsKK30KKworc3RhdGljIHZvaWQgdG9zaHNkX3N0YXJ0X2RhdGEoc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gU0dfTUlURVJfQVRPTUlDOworCisJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAic2V0dXAgZGF0YSB0cmFuc2ZlcjogYmxvY2tzaXplICUwOHggIG5yX2Jsb2NrcyAlZCwgb2Zmc2V0OiAlMDh4XG4iLAorCQlkYXRhLT5ibGtzeiwgZGF0YS0+YmxvY2tzLCBkYXRhLT5zZy0+b2Zmc2V0KTsKKworCWhvc3QtPmRhdGEgPSBkYXRhOworCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJZmxhZ3MgfD0gU0dfTUlURVJfVE9fU0c7CisJZWxzZQorCQlmbGFncyB8PSBTR19NSVRFUl9GUk9NX1NHOworCisJc2dfbWl0ZXJfc3RhcnQoJmhvc3QtPnNnX21pdGVyLCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLCBmbGFncyk7CisKKwkvKiBTZXQgdHJhbnNmZXIgbGVuZ3RoIGFuZCBibG9ja3NpemUgKi8KKwlpb3dyaXRlMTYoZGF0YS0+YmxvY2tzLCBob3N0LT5pb2FkZHIgKyBTRF9CTE9DS0NPVU5UKTsKKwlpb3dyaXRlMTYoZGF0YS0+Ymxrc3osIGhvc3QtPmlvYWRkciArIFNEX0NBUkRYRkVSREFUQUxFTik7Cit9CisKKy8qIFByb2Nlc3MgcmVxdWVzdHMgZnJvbSB0aGUgTU1DIGxheWVyICovCitzdGF0aWMgdm9pZCB0b3Noc2RfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogYWJvcnQgaWYgY2FyZCBub3QgcHJlc2VudCAqLworCWlmICghKGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpICYgU0RfQ0FSRF9QUkVTRU5UXzApKSB7CisJCW1ycS0+Y21kLT5lcnJvciA9IC1FTk9NRURJVU07CisJCW1tY19yZXF1ZXN0X2RvbmUobW1jLCBtcnEpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCVdBUk5fT04oaG9zdC0+bXJxICE9IE5VTEwpOworCisJaG9zdC0+bXJxID0gbXJxOworCisJaWYgKG1ycS0+ZGF0YSkKKwkJdG9zaHNkX3N0YXJ0X2RhdGEoaG9zdCwgbXJxLT5kYXRhKTsKKworCXRvc2hzZF9zZXRfbGVkKGhvc3QsIDEpOworCisJdG9zaHNkX3N0YXJ0X2NtZChob3N0LCBtcnEtPmNtZCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hzZF9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQoreworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJX190b3Noc2Rfc2V0X2lvcyhtbWMsIGlvcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHRvc2hzZF9nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCS8qIGFjdGl2ZSBsb3cgKi8KKwlyZXR1cm4gIShpb3JlYWQxNihob3N0LT5pb2FkZHIgKyBTRF9DQVJEU1RBVFVTKSAmIFNEX0NBUkRfV1JJVEVfUFJPVEVDVCk7Cit9CisKK3N0YXRpYyBpbnQgdG9zaHNkX2dldF9jZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJcmV0dXJuICEhKGlvcmVhZDE2KGhvc3QtPmlvYWRkciArIFNEX0NBUkRTVEFUVVMpICYgU0RfQ0FSRF9QUkVTRU5UXzApOworfQorCitzdGF0aWMgc3RydWN0IG1tY19ob3N0X29wcyB0b3Noc2Rfb3BzID0geworCS5yZXF1ZXN0ID0gdG9zaHNkX3JlcXVlc3QsCisJLnNldF9pb3MgPSB0b3Noc2Rfc2V0X2lvcywKKwkuZ2V0X3JvID0gdG9zaHNkX2dldF9ybywKKwkuZ2V0X2NkID0gdG9zaHNkX2dldF9jZCwKK307CisKKworc3RhdGljIHZvaWQgdG9zaHNkX3Bvd2VyZG93bihzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QpCit7CisJLyogbWFzayBhbGwgaW50ZXJydXB0cyAqLworCWlvd3JpdGUzMigweGZmZmZmZmZmLCBob3N0LT5pb2FkZHIgKyBTRF9JTlRNQVNLQ0FSRCk7CisJLyogZGlzYWJsZSBjYXJkIGNsb2NrICovCisJaW93cml0ZTE2KDB4MDAwLCBob3N0LT5pb2FkZHIgKyBTRElPX0JBU0UgKyBTRElPX0NMT0NLTldBSVRDVFJMKTsKKwlpb3dyaXRlMTYoMCwgaG9zdC0+aW9hZGRyICsgU0RfQ0FSRENMT0NLQ1RSTCk7CisJLyogcG93ZXIgZG93biBjYXJkICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhvc3QtPnBkZXYsIFNEX1BDSUNGR19QT1dFUjEsIFNEX1BDSUNGR19QV1IxX09GRik7CisJLyogZGlzYWJsZSBjbG9jayAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShob3N0LT5wZGV2LCBTRF9QQ0lDRkdfQ0xLU1RPUCwgMCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgdG9zaHNkX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCB0b3Noc2RfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXRvc2hzZF9wb3dlcmRvd24oaG9zdCk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9zaHNkX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRvc2hzZF9pbml0KGhvc3QpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisKK3N0YXRpYyBpbnQgdG9zaHNkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCByZXQ7CisJc3RydWN0IHRvc2hzZF9ob3N0ICpob3N0OworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXJlc291cmNlX3NpemVfdCBiYXNlOworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgdG9zaHNkX2hvc3QpLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW1tYykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlob3N0LT5tbWMgPSBtbWM7CisKKwlob3N0LT5wZGV2ID0gcGRldjsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWU7CisKKwlob3N0LT5pb2FkZHIgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisJaWYgKCFob3N0LT5pb2FkZHIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byByZWxlYXNlOworCX0KKworCS8qIFNldCBNTUMgaG9zdCBwYXJhbWV0ZXJzICovCisJbW1jLT5vcHMgPSAmdG9zaHNkX29wczsKKwltbWMtPmNhcHMgPSBNTUNfQ0FQXzRfQklUX0RBVEE7CisJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzOworCisJbW1jLT5mX21pbiA9IEhDTEsgLyA1MTI7CisJbW1jLT5mX21heCA9IEhDTEs7CisKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CisKKwl0b3Noc2RfaW5pdChob3N0KTsKKworCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHBkZXYtPmlycSwgdG9zaHNkX2lycSwgdG9zaHNkX3RocmVhZF9pcnEsCisJCQkJICAgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBob3N0KTsKKwlpZiAocmV0KQorCQlnb3RvIHVubWFwOworCisJbW1jX2FkZF9ob3N0KG1tYyk7CisKKwliYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWRldl9kYmcoJnBkZXYtPmRldiwgIk1NSU8gJXBhLCBJUlEgJWRcbiIsICZiYXNlLCBwZGV2LT5pcnEpOworCisJcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oJnBkZXYtPmRldiwgMSk7CisKKwlyZXR1cm4gMDsKKwordW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgaG9zdC0+aW9hZGRyKTsKK3JlbGVhc2U6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2ZyZWU6CisJbW1jX2ZyZWVfaG9zdChtbWMpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK2VycjoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdG9zaHNkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgdG9zaHNkX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKKwl0b3Noc2RfcG93ZXJkb3duKGhvc3QpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgaG9zdCk7CisJcGNpX2lvdW5tYXAocGRldiwgaG9zdC0+aW9hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCW1tY19mcmVlX2hvc3QoaG9zdC0+bW1jKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdG9zaHNkX3BtX29wcyA9IHsKKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyh0b3Noc2RfcG1fc3VzcGVuZCwgdG9zaHNkX3BtX3Jlc3VtZSkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0b3Noc2RfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gcGNpX2lkcywKKwkucHJvYmUgPSB0b3Noc2RfcHJvYmUsCisJLnJlbW92ZSA9IHRvc2hzZF9yZW1vdmUsCisJLmRyaXZlci5wbSA9ICZ0b3Noc2RfcG1fb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdG9zaHNkX2Rydl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnRvc2hzZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdG9zaHNkX2Rydl9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0b3Noc2RfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodG9zaHNkX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KHRvc2hzZF9kcnZfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk9uZHJlaiBaYXJ5LCBSaWNoYXJkIEJldHRzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRvc2hpYmEgUENJIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3Rvc2hzZC5oIGIvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmMwZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqICBUb3NoaWJhIFBDSSBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgT25kcmVqIFphcnkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUmljaGFyZCBCZXR0cywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgICAgIEJhc2VkIG9uIGFzaWMzX21tYy5jIENvcHlyaWdodCAoYykgMjAwNSBTREcgU3lzdGVtcywgTExDCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEhDTEsJMzMwMDAwMDAJLyogMzMgTUh6IChQQ0kgY2xvY2spICovCisKKyNkZWZpbmUgU0RfUENJQ0ZHX0NMS1NUT1AJMHg0MAkvKiAweDFmID0gY2xvY2sgY29udHJvbGxlciwgMCA9IHN0b3AgKi8KKyNkZWZpbmUgU0RfUENJQ0ZHX0dBVEVEQ0xLCTB4NDEJLyogR2F0ZWQgY2xvY2sgKi8KKyNkZWZpbmUgU0RfUENJQ0ZHX0NMS01PREUJMHg0MgkvKiBDb250cm9sIGNsb2NrIG9mIFNEIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgU0RfUENJQ0ZHX1BJTlNUQVRVUwkweDQ0CS8qIFIvTzogcmVhZCBzdGF0dXMgb2YgU0QgcGlucyAqLworI2RlZmluZSBTRF9QQ0lDRkdfUE9XRVIxCTB4NDgKKyNkZWZpbmUgU0RfUENJQ0ZHX1BPV0VSMgkweDQ5CisjZGVmaW5lIFNEX1BDSUNGR19QT1dFUjMJMHg0YQorI2RlZmluZSBTRF9QQ0lDRkdfQ0FSRERFVEVDVAkweDRjCisjZGVmaW5lIFNEX1BDSUNGR19TTE9UUwkJMHg1MAkvKiBSL086IGRlZmluZSBzdXBwb3J0IHNsb3QgbnVtYmVyICovCisjZGVmaW5lIFNEX1BDSUNGR19FWFRHQVRFQ0xLMQkweGYwCS8qIENvdWxkIGJlIHVzZWQgZm9yIGdhdGVkIGNsb2NrICovCisjZGVmaW5lIFNEX1BDSUNGR19FWFRHQVRFQ0xLMgkweGYxCS8qIENvdWxkIGJlIHVzZWQgZm9yIGdhdGVkIGNsb2NrICovCisjZGVmaW5lIFNEX1BDSUNGR19FWFRHQVRFQ0xLMwkweGY5CS8qIEJpdCAxOiBkb3VibGUgYnVmZmVyL3NpbmdsZSBidWZmZXIgKi8KKyNkZWZpbmUgU0RfUENJQ0ZHX1NETEVEX0VOQUJMRTEJMHhmYQorI2RlZmluZSBTRF9QQ0lDRkdfU0RMRURfRU5BQkxFMgkweGZlCisKKyNkZWZpbmUgU0RfUENJQ0ZHX0NMS01PREVfRElWX0RJU0FCTEUJQklUKDApCisjZGVmaW5lIFNEX1BDSUNGR19DTEtTVE9QX0VOQUJMRV9BTEwJMHgxZgorI2RlZmluZSBTRF9QQ0lDRkdfTEVEX0VOQUJMRTFfU1RBUlQJMHgxMgorI2RlZmluZSBTRF9QQ0lDRkdfTEVEX0VOQUJMRTJfU1RBUlQJMHg4MAorCisjZGVmaW5lIFNEX1BDSUNGR19QV1IxXzMzVgkweDA4CS8qIFNldCBmb3IgMy4zIHZvbHRzICovCisjZGVmaW5lIFNEX1BDSUNGR19QV1IxX09GRgkweDAwCS8qIFR1cm4gb2ZmIHBvd2VyICovCisjZGVmaW5lIFNEX1BDSUNGR19QV1IyX0FVVE8JMHgwMgorCisjZGVmaW5lIFNEX0NNRAkJCTB4MDAJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9BUkcwCQkJMHgwNAkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX0FSRzEJCQkweDA2CS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfU1RPUElOVEVSTkFMCQkweDA4CisjZGVmaW5lIFNEX0JMT0NLQ09VTlQJCTB4MGEJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTAJCTB4MGMJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTEJCTB4MGUJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTIJCTB4MTAJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTMJCTB4MTIJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTQJCTB4MTQJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTUJCTB4MTYJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTYJCTB4MTgJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9SRVNQT05TRTcJCTB4MWEJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9DQVJEU1RBVFVTCQkweDFjCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfQlVGRkVSQ1RSTAkJMHgxZQkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX0lOVE1BU0tDQVJECQkweDIwCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfSU5UTUFTS0JVRkZFUgkweDIyCS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfQ0FSRENMT0NLQ1RSTAkweDI0CisjZGVmaW5lIFNEX0NBUkRYRkVSREFUQUxFTgkweDI2CS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfQ0FSRE9QVElPTlNFVFVQCTB4MjgJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9FUlJPUlNUQVRVUzAJCTB4MmMJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9FUlJPUlNUQVRVUzEJCTB4MmUJLyogYWxzbyBmb3IgU0RJTyAqLworI2RlZmluZSBTRF9EQVRBUE9SVAkJMHgzMAkvKiBhbHNvIGZvciBTRElPICovCisjZGVmaW5lIFNEX1RSQU5TQUNUSU9OQ1RSTAkweDM0CS8qIGFsc28gZm9yIFNESU8gKi8KKyNkZWZpbmUgU0RfU09GVFdBUkVSRVNFVAkweGUwCS8qIGFsc28gZm9yIFNESU8gKi8KKworLyogcmVnaXN0ZXJzIGFib3ZlIG1hcmtlZCAiYWxzbyBmb3IgU0RJTyIgYW5kIGFsbCBTRElPIHJlZ2lzdGVycyBiZWxvdyBjYW4gYmUKKyAqIGFjY2Vzc2VkIGF0IFNESU9fQkFTRSArIHJlZyBhZGRyZXNzICovCisjZGVmaW5lIFNESU9fQkFTRQkgMHgxMDAKKworI2RlZmluZSBTRElPX0NBUkRQT1JUU0VMCTB4MDIKKyNkZWZpbmUgU0RJT19DQVJESU5UQ1RSTAkweDM2CisjZGVmaW5lIFNESU9fQ0xPQ0tOV0FJVENUUkwJMHgzOAorI2RlZmluZSBTRElPX0hPU1RJTkZPUk1BVElPTgkweDNhCisjZGVmaW5lIFNESU9fRVJST1JDVFJMCQkweDNjCisjZGVmaW5lIFNESU9fTEVEQ1RSTAkJMHgzZQorCisjZGVmaW5lIFNEX1RSQU5TQ1RMX1NFVAkJQklUKDgpCisKKyNkZWZpbmUgU0RfQ0FSRENMS19ESVZfRElTQUJMRQlCSVQoMTUpCisjZGVmaW5lIFNEX0NBUkRDTEtfRU5BQkxFX0NMT0NLCUJJVCg4KQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfNTEyCUJJVCg3KQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfMjU2CUJJVCg2KQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfMTI4CUJJVCg1KQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfNjQJQklUKDQpCisjZGVmaW5lIFNEX0NBUkRDTEtfQ0xLX0RJVl8zMglCSVQoMykKKyNkZWZpbmUgU0RfQ0FSRENMS19DTEtfRElWXzE2CUJJVCgyKQorI2RlZmluZSBTRF9DQVJEQ0xLX0NMS19ESVZfOAlCSVQoMSkKKyNkZWZpbmUgU0RfQ0FSRENMS19DTEtfRElWXzQJQklUKDApCisjZGVmaW5lIFNEX0NBUkRDTEtfQ0xLX0RJVl8yCTAKKworI2RlZmluZSBTRF9DQVJET1BUX1JFUVVJUkVECQkweDAwMGUKKyNkZWZpbmUgU0RfQ0FSRE9QVF9EQVRBX1JFU1BfVElNRU9VVCh4KQkoKCh4KSAmIDB4MGYpIDw8IDQpIC8qIDQgYml0cyAqLworI2RlZmluZSBTRF9DQVJET1BUX0MyX01PRFVMRV9BQlNFTlQJQklUKDE0KQorI2RlZmluZSBTRF9DQVJET1BUX0RBVEFfWEZSX1dJRFRIXzEJKDEgPDwgMTUpCisjZGVmaW5lIFNEX0NBUkRPUFRfREFUQV9YRlJfV0lEVEhfNAkoMCA8PCAxNSkKKworI2RlZmluZSBTRF9DTURfVFlQRV9DTUQJCQkoMCA8PCA2KQorI2RlZmluZSBTRF9DTURfVFlQRV9BQ01ECQkoMSA8PCA2KQorI2RlZmluZSBTRF9DTURfVFlQRV9BVVRIRU4JCSgyIDw8IDYpCisjZGVmaW5lIFNEX0NNRF9SRVNQX1RZUEVfTk9ORQkJKDMgPDwgOCkKKyNkZWZpbmUgU0RfQ01EX1JFU1BfVFlQRV9FWFRfUjEJCSg0IDw8IDgpCisjZGVmaW5lIFNEX0NNRF9SRVNQX1RZUEVfRVhUX1IxQgkoNSA8PCA4KQorI2RlZmluZSBTRF9DTURfUkVTUF9UWVBFX0VYVF9SMgkJKDYgPDwgOCkKKyNkZWZpbmUgU0RfQ01EX1JFU1BfVFlQRV9FWFRfUjMJCSg3IDw8IDgpCisjZGVmaW5lIFNEX0NNRF9SRVNQX1RZUEVfRVhUX1I2CQkoNCA8PCA4KQorI2RlZmluZSBTRF9DTURfUkVTUF9UWVBFX0VYVF9SNwkJKDQgPDwgOCkKKyNkZWZpbmUgU0RfQ01EX0RBVEFfUFJFU0VOVAkJQklUKDExKQorI2RlZmluZSBTRF9DTURfVFJBTlNGRVJfUkVBRAkJQklUKDEyKQorI2RlZmluZSBTRF9DTURfTVVMVElfQkxPQ0sJCUJJVCgxMykKKyNkZWZpbmUgU0RfQ01EX1NFQ1VSSVRZX0NNRAkJQklUKDE0KQorCisjZGVmaW5lIFNEX1NUT1BJTlRfSVNTVUVfQ01EMTIJCUJJVCgwKQorI2RlZmluZSBTRF9TVE9QSU5UX0FVVE9fSVNTVUVfQ01EMTIJQklUKDgpCisKKyNkZWZpbmUgU0RfQ0FSRF9SRVNQX0VORAlCSVQoMCkKKyNkZWZpbmUgU0RfQ0FSRF9SV19FTkQJCUJJVCgyKQorI2RlZmluZSBTRF9DQVJEX0NBUkRfUkVNT1ZFRF8wCUJJVCgzKQorI2RlZmluZSBTRF9DQVJEX0NBUkRfSU5TRVJURURfMAlCSVQoNCkKKyNkZWZpbmUgU0RfQ0FSRF9QUkVTRU5UXzAJQklUKDUpCisjZGVmaW5lIFNEX0NBUkRfVU5LNgkJQklUKDYpCisjZGVmaW5lIFNEX0NBUkRfV1JJVEVfUFJPVEVDVAlCSVQoNykKKyNkZWZpbmUgU0RfQ0FSRF9DQVJEX1JFTU9WRURfMwlCSVQoOCkKKyNkZWZpbmUgU0RfQ0FSRF9DQVJEX0lOU0VSVEVEXzMJQklUKDkpCisjZGVmaW5lIFNEX0NBUkRfUFJFU0VOVF8zCUJJVCgxMCkKKworI2RlZmluZSBTRF9CVUZfQ01EX0lOREVYX0VSUglCSVQoMTYpCisjZGVmaW5lIFNEX0JVRl9DUkNfRVJSCQlCSVQoMTcpCisjZGVmaW5lIFNEX0JVRl9TVE9QX0JJVF9FTkRfRVJSCUJJVCgxOCkKKyNkZWZpbmUgU0RfQlVGX0RBVEFfVElNRU9VVAlCSVQoMTkpCisjZGVmaW5lIFNEX0JVRl9PVkVSRkxPVwkJQklUKDIwKQorI2RlZmluZSBTRF9CVUZfVU5ERVJGTE9XCUJJVCgyMSkKKyNkZWZpbmUgU0RfQlVGX0NNRF9USU1FT1VUCUJJVCgyMikKKyNkZWZpbmUgU0RfQlVGX1VOSzcJCUJJVCgyMykKKyNkZWZpbmUgU0RfQlVGX1JFQURfRU5BQkxFCUJJVCgyNCkKKyNkZWZpbmUgU0RfQlVGX1dSSVRFX0VOQUJMRQlCSVQoMjUpCisjZGVmaW5lIFNEX0JVRl9JTExFR0FMX0ZVTkNUSU9OCUJJVCgyOSkKKyNkZWZpbmUgU0RfQlVGX0NNRF9CVVNZCQlCSVQoMzApCisjZGVmaW5lIFNEX0JVRl9JTExFR0FMX0FDQ0VTUwlCSVQoMzEpCisKKyNkZWZpbmUgU0RfRVJSMF9SRVNQX0NNRF9FUlIJCQlCSVQoMCkKKyNkZWZpbmUgU0RfRVJSMF9SRVNQX05PTl9DTUQxMl9FTkRfQklUX0VSUglCSVQoMikKKyNkZWZpbmUgU0RfRVJSMF9SRVNQX0NNRDEyX0VORF9CSVRfRVJSCQlCSVQoMykKKyNkZWZpbmUgU0RfRVJSMF9SRUFEX0RBVEFfRU5EX0JJVF9FUlIJCUJJVCg0KQorI2RlZmluZSBTRF9FUlIwX1dSSVRFX0NSQ19TVEFUVVNfRU5EX0JJVF9FUlIJQklUKDUpCisjZGVmaW5lIFNEX0VSUjBfUkVTUF9OT05fQ01EMTJfQ1JDX0VSUgkJQklUKDgpCisjZGVmaW5lIFNEX0VSUjBfUkVTUF9DTUQxMl9DUkNfRVJSCQlCSVQoOSkKKyNkZWZpbmUgU0RfRVJSMF9SRUFEX0RBVEFfQ1JDX0VSUgkJQklUKDEwKQorI2RlZmluZSBTRF9FUlIwX1dSSVRFX0NNRF9DUkNfRVJSCQlCSVQoMTEpCisKKyNkZWZpbmUgU0RfRVJSMV9OT19DTURfUkVTUAkJQklUKDE2KQorI2RlZmluZSBTRF9FUlIxX1RJTUVPVVRfUkVBRF9EQVRBCUJJVCgyMCkKKyNkZWZpbmUgU0RfRVJSMV9USU1FT1VUX0NSU19TVEFUVVMJQklUKDIxKQorI2RlZmluZSBTRF9FUlIxX1RJTUVPVVRfQ1JDX0JVU1kJQklUKDIyKQorCisjZGVmaW5lIElSUV9ET05UX0NBUkVfQklUUyAoU0RfQ0FSRF9QUkVTRU5UXzMgXAorCXwgU0RfQ0FSRF9XUklURV9QUk9URUNUIFwKKwl8IFNEX0NBUkRfVU5LNiBcCisJfCBTRF9DQVJEX1BSRVNFTlRfMCBcCisJfCBTRF9CVUZfVU5LNyBcCisJfCBTRF9CVUZfQ01EX0JVU1kpCisKK3N0cnVjdCB0b3Noc2RfaG9zdCB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisKKwlzcGlubG9ja190IGxvY2s7CisKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsvKiBDdXJyZW50IHJlcXVlc3QgKi8KKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZDsvKiBDdXJyZW50IGNvbW1hbmQgKi8KKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGE7CS8qIEN1cnJlbnQgZGF0YSByZXF1ZXN0ICovCisKKwlzdHJ1Y3Qgc2dfbWFwcGluZ19pdGVyIHNnX21pdGVyOyAvKiBmb3IgUElPICovCisKKwl2b2lkIF9faW9tZW0gKmlvYWRkcjsgLyogbWFwcGVkIGFkZHJlc3MgKi8KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYwppbmRleCBjMTNkODNlLi40NWYwOWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMKQEAgLTIyNSw3ICsyMjUsMTIgQEAKIAogCQlib25kX29wdGlvbl9hcnBfaXBfdGFyZ2V0c19jbGVhcihib25kKTsKIAkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBkYXRhW0lGTEFfQk9ORF9BUlBfSVBfVEFSR0VUXSwgcmVtKSB7Ci0JCQlfX2JlMzIgdGFyZ2V0ID0gbmxhX2dldF9iZTMyKGF0dHIpOworCQkJX19iZTMyIHRhcmdldDsKKworCQkJaWYgKG5sYV9sZW4oYXR0cikgPCBzaXplb2YodGFyZ2V0KSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJdGFyZ2V0ID0gbmxhX2dldF9iZTMyKGF0dHIpOwogCiAJCQlib25kX29wdF9pbml0dmFsKCZuZXd2YWwsIChfX2ZvcmNlIHU2NCl0YXJnZXQpOwogCQkJZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX1RBUkdFVFMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcKaW5kZXggOWUwODlkMi4uMzU2NGZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZwpAQCAtMjIsNyArMjIsNyBAQAogCiBjb25maWcgQVJNX0FUOTFfRVRIRVIKIAl0cmlzdGF0ZSAiQVQ5MVJNOTIwMCBFdGhlcm5ldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSEFTX0RNQSAmJiAoQVJDSF9BVDkxUk05MjAwIHx8IENPTVBJTEVfVEVTVCkKKwlkZXBlbmRzIG9uIEhBU19ETUEgJiYgKEFSQ0hfQVQ5MSB8fCBDT01QSUxFX1RFU1QpCiAJc2VsZWN0IE1BQ0IKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugd2lzaCB0byBjb21waWxlIGEga2VybmVsIGZvciB0aGUgQVQ5MVJNOTIwMCBhbmQgZW5hYmxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jCmluZGV4IDg1MjBkNTUuLjI3OTg3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jCkBAIC0yNDQyLDkgKzI0NDIsMTMgQEAKIAkJICAgICBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbCB8IFNVUFBPUlRFRF8xMDAwYmFzZUtYX0Z1bGwgfAogCQkgICAgIFNVUFBPUlRFRF8xMDAwMGJhc2VLWDRfRnVsbDsKIAllbHNlIGlmICh0eXBlID09IEZXX1BPUlRfVFlQRV9GSUJFUl9YRkkgfHwKLQkJIHR5cGUgPT0gRldfUE9SVF9UWVBFX0ZJQkVSX1hBVUkgfHwgdHlwZSA9PSBGV19QT1JUX1RZUEVfU0ZQKQorCQkgdHlwZSA9PSBGV19QT1JUX1RZUEVfRklCRVJfWEFVSSB8fCB0eXBlID09IEZXX1BPUlRfVFlQRV9TRlApIHsKIAkJdiB8PSBTVVBQT1JURURfRklCUkU7Ci0JZWxzZSBpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfQlA0MF9CQSkKKwkJaWYgKGNhcHMgJiBGV19QT1JUX0NBUF9TUEVFRF8xRykKKwkJCXYgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOworCQlpZiAoY2FwcyAmIEZXX1BPUlRfQ0FQX1NQRUVEXzEwRykKKwkJCXYgfD0gU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbDsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gRldfUE9SVF9UWVBFX0JQNDBfQkEpCiAJCXYgfD0gU1VQUE9SVEVEXzQwMDAwYmFzZVNSNF9GdWxsOwogCiAJaWYgKGNhcHMgJiBGV19QT1JUX0NBUF9BTkVHKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jCmluZGV4IDI0NzMzNWQuLjk1MmVmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTYzNzIsNyArNjM3Miw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogc3RhdGljIGludCBlMTAwMGVfcG1fcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKQEAgLTY0MzIsNyArNjQzMSw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiBzdGF0aWMgdm9pZCBlMTAwMF9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9tYWluLmMKaW5kZXggNDg3Y2Q5Yy4uYjg1ODgwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9tYWluLmMKQEAgLTE4NiwxMSArMTg2LDkgQEAKIHN0YXRpYyBpbnQgaWdiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqKTsKICNlbmRpZgogc3RhdGljIGludCBpZ2JfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKik7Ci0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIHN0YXRpYyBpbnQgaWdiX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpZ2JfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgaWdiX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotI2VuZGlmCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaWdiX3BtX29wcyA9IHsKIAlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhpZ2Jfc3VzcGVuZCwgaWdiX3Jlc3VtZSkKIAlTRVRfUlVOVElNRV9QTV9PUFMoaWdiX3J1bnRpbWVfc3VzcGVuZCwgaWdiX3J1bnRpbWVfcmVzdW1lLApAQCAtNzQ1MCw3ICs3NDQ4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiBzdGF0aWMgaW50IGlnYl9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwpAQCAtNzQ4Nyw4ICs3NDg0LDcgQEAKIHsKIAlyZXR1cm4gaWdiX3Jlc3VtZShkZXYpOwogfQotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogc3RhdGljIHZvaWQgaWdiX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMKaW5kZXggNjBlOWMyYy4uYjVkYjZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jCkBAIC05MTcsMjEgKzkxNywxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX1NITU9CSUxFKQogc3RhdGljIHZvaWQgc2hfZXRoX3NldF9yZWNlaXZlX2FsaWduKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHJlc2VydmU7CisJdWludHB0cl90IHJlc2VydmUgPSAodWludHB0cl90KXNrYi0+ZGF0YSAmIChTSF9FVEhfUlhfQUxJR04gLSAxKTsKIAotCXJlc2VydmUgPSBTSDRfU0tCX1JYX0FMSUdOIC0gKCh1MzIpc2tiLT5kYXRhICYgKFNINF9TS0JfUlhfQUxJR04gLSAxKSk7CiAJaWYgKHJlc2VydmUpCi0JCXNrYl9yZXNlcnZlKHNrYiwgcmVzZXJ2ZSk7CisJCXNrYl9yZXNlcnZlKHNrYiwgU0hfRVRIX1JYX0FMSUdOIC0gcmVzZXJ2ZSk7CiB9Ci0jZWxzZQotc3RhdGljIHZvaWQgc2hfZXRoX3NldF9yZWNlaXZlX2FsaWduKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc2tiX3Jlc2VydmUoc2tiLCBTSDJfU0gzX1NLQl9SWF9BTElHTik7Ci19Ci0jZW5kaWYKIAogCiAvKiBDUFUgPC0+IEVETUFDIGVuZGlhbiBjb252ZXJ0ICovCkBAIC0xMTE5LDYgKzExMTEsNyBAQAogCXN0cnVjdCBzaF9ldGhfdHhkZXNjICp0eGRlc2MgPSBOVUxMOwogCWludCByeF9yaW5nc2l6ZSA9IHNpemVvZigqcnhkZXNjKSAqIG1kcC0+bnVtX3J4X3Jpbmc7CiAJaW50IHR4X3JpbmdzaXplID0gc2l6ZW9mKCp0eGRlc2MpICogbWRwLT5udW1fdHhfcmluZzsKKwlpbnQgc2tidWZmX3NpemUgPSBtZHAtPnJ4X2J1Zl9zeiArIFNIX0VUSF9SWF9BTElHTiAtIDE7CiAKIAltZHAtPmN1cl9yeCA9IDA7CiAJbWRwLT5jdXJfdHggPSAwOwpAQCAtMTEzMSwyMSArMTEyNCwyMSBAQAogCWZvciAoaSA9IDA7IGkgPCBtZHAtPm51bV9yeF9yaW5nOyBpKyspIHsKIAkJLyogc2tiICovCiAJCW1kcC0+cnhfc2tidWZmW2ldID0gTlVMTDsKLQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBtZHAtPnJ4X2J1Zl9zeik7CisJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmRldiwgc2tidWZmX3NpemUpOwogCQltZHAtPnJ4X3NrYnVmZltpXSA9IHNrYjsKIAkJaWYgKHNrYiA9PSBOVUxMKQogCQkJYnJlYWs7Ci0JCWRtYV9tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHNrYi0+ZGF0YSwgbWRwLT5yeF9idWZfc3osCi0JCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAkJc2hfZXRoX3NldF9yZWNlaXZlX2FsaWduKHNrYik7CiAKIAkJLyogUlggZGVzY3JpcHRvciAqLwogCQlyeGRlc2MgPSAmbWRwLT5yeF9yaW5nW2ldOworCQkvKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIGEgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuICovCisJCXJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IEFMSUdOKG1kcC0+cnhfYnVmX3N6LCAxNik7CisJCWRtYV9tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHNrYi0+ZGF0YSwgcnhkZXNjLT5idWZmZXJfbGVuZ3RoLAorCQkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CiAJCXJ4ZGVzYy0+YWRkciA9IHZpcnRfdG9fcGh5cyhQVFJfQUxJR04oc2tiLT5kYXRhLCA0KSk7CiAJCXJ4ZGVzYy0+c3RhdHVzID0gY3B1X3RvX2VkbWFjKG1kcCwgUkRfUkFDVCB8IFJEX1JGUCk7CiAKLQkJLyogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyAxNiBieXRlIGJvdW5kYXJ5LiAqLwotCQlyeGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMTYpOwogCQkvKiBSeCBkZXNjcmlwdG9yIGFkZHJlc3Mgc2V0ICovCiAJCWlmIChpID09IDApIHsKIAkJCXNoX2V0aF93cml0ZShuZGV2LCBtZHAtPnJ4X2Rlc2NfZG1hLCBSRExBUik7CkBAIC0xMzk3LDYgKzEzOTAsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTE2IHBrdF9sZW4gPSAwOwogCXUzMiBkZXNjX3N0YXR1czsKKwlpbnQgc2tidWZmX3NpemUgPSBtZHAtPnJ4X2J1Zl9zeiArIFNIX0VUSF9SWF9BTElHTiAtIDE7CiAKIAlyeGRlc2MgPSAmbWRwLT5yeF9yaW5nW2VudHJ5XTsKIAl3aGlsZSAoIShyeGRlc2MtPnN0YXR1cyAmIGNwdV90b19lZG1hYyhtZHAsIFJEX1JBQ1QpKSkgewpAQCAtMTQ0OCw3ICsxNDQyLDcgQEAKIAkJCWlmIChtZHAtPmNkLT5ycGFkaXIpCiAJCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwogCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoJm5kZXYtPmRldiwgcnhkZXNjLT5hZGRyLAotCQkJCQkJbWRwLT5yeF9idWZfc3osCisJCQkJCQlBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMTYpLAogCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKIAkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpOwpAQCAtMTQ2OCwxMyArMTQ2MiwxMyBAQAogCQlyeGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMTYpOwogCiAJCWlmIChtZHAtPnJ4X3NrYnVmZltlbnRyeV0gPT0gTlVMTCkgewotCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZGV2LCBtZHAtPnJ4X2J1Zl9zeik7CisJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5kZXYsIHNrYnVmZl9zaXplKTsKIAkJCW1kcC0+cnhfc2tidWZmW2VudHJ5XSA9IHNrYjsKIAkJCWlmIChza2IgPT0gTlVMTCkKIAkJCQlicmVhazsJLyogQmV0dGVyIGx1Y2sgbmV4dCByb3VuZC4gKi8KLQkJCWRtYV9tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHNrYi0+ZGF0YSwgbWRwLT5yeF9idWZfc3osCi0JCQkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CiAJCQlzaF9ldGhfc2V0X3JlY2VpdmVfYWxpZ24oc2tiKTsKKwkJCWRtYV9tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwkJCQkgICAgICAgcnhkZXNjLT5idWZmZXJfbGVuZ3RoLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCQlza2JfY2hlY2tzdW1fbm9uZV9hc3NlcnQoc2tiKTsKIAkJCXJ4ZGVzYy0+YWRkciA9IHZpcnRfdG9fcGh5cyhQVFJfQUxJR04oc2tiLT5kYXRhLCA0KSk7CkBAIC0yMDQyLDYgKzIwMzYsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZyZWVfaXJxOwogCisJbWRwLT5pc19vcGVuZWQgPSAxOworCiAJcmV0dXJuIHJldDsKIAogb3V0X2ZyZWVfaXJxOgpAQCAtMjEzMSw2ICsyMTI3LDM2IEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzaF9ldGhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwlpZiAoc2hfZXRoX2lzX3J6X2Zhc3RfZXRoZXIobWRwKSkKKwkJcmV0dXJuICZuZGV2LT5zdGF0czsKKworCWlmICghbWRwLT5pc19vcGVuZWQpCisJCXJldHVybiAmbmRldi0+c3RhdHM7CisKKwluZGV2LT5zdGF0cy50eF9kcm9wcGVkICs9IHNoX2V0aF9yZWFkKG5kZXYsIFRST0NSKTsKKwlzaF9ldGhfd3JpdGUobmRldiwgMCwgVFJPQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCisJbmRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBzaF9ldGhfcmVhZChuZGV2LCBDRENSKTsKKwlzaF9ldGhfd3JpdGUobmRldiwgMCwgQ0RDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KKwluZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBzaF9ldGhfcmVhZChuZGV2LCBMQ0NSKTsKKwlzaF9ldGhfd3JpdGUobmRldiwgMCwgTENDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KKworCWlmIChzaF9ldGhfaXNfZ2V0aGVyKG1kcCkpIHsKKwkJbmRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gc2hfZXRoX3JlYWQobmRldiwgQ0VSQ1IpOworCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgQ0VSQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCisJCW5kZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IHNoX2V0aF9yZWFkKG5kZXYsIENFRUNSKTsKKwkJc2hfZXRoX3dyaXRlKG5kZXYsIDAsIENFRUNSKTsJLyogKHdyaXRlIGNsZWFyKSAqLworCX0gZWxzZSB7CisJCW5kZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IHNoX2V0aF9yZWFkKG5kZXYsIENORENSKTsKKwkJc2hfZXRoX3dyaXRlKG5kZXYsIDAsIENORENSKTsJLyogKHdyaXRlIGNsZWFyKSAqLworCX0KKworCXJldHVybiAmbmRldi0+c3RhdHM7Cit9CisKIC8qIGRldmljZSBjbG9zZSBmdW5jdGlvbiAqLwogc3RhdGljIGludCBzaF9ldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CkBAIC0yMTQ1LDYgKzIxNzEsNyBAQAogCXNoX2V0aF93cml0ZShuZGV2LCAwLCBFRFRSUik7CiAJc2hfZXRoX3dyaXRlKG5kZXYsIDAsIEVEUlJSKTsKIAorCXNoX2V0aF9nZXRfc3RhdHMobmRldik7CiAJLyogUEhZIERpc2Nvbm5lY3QgKi8KIAlpZiAobWRwLT5waHlkZXYpIHsKIAkJcGh5X3N0b3AobWRwLT5waHlkZXYpOwpAQCAtMjE2MywzOCArMjE5MCwxMSBAQAogCiAJcG1fcnVudGltZV9wdXRfc3luYygmbWRwLT5wZGV2LT5kZXYpOwogCisJbWRwLT5pc19vcGVuZWQgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2hfZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOwotCi0JaWYgKHNoX2V0aF9pc19yel9mYXN0X2V0aGVyKG1kcCkpCi0JCXJldHVybiAmbmRldi0+c3RhdHM7Ci0KLQlwbV9ydW50aW1lX2dldF9zeW5jKCZtZHAtPnBkZXYtPmRldik7Ci0KLQluZGV2LT5zdGF0cy50eF9kcm9wcGVkICs9IHNoX2V0aF9yZWFkKG5kZXYsIFRST0NSKTsKLQlzaF9ldGhfd3JpdGUobmRldiwgMCwgVFJPQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCi0JbmRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBzaF9ldGhfcmVhZChuZGV2LCBDRENSKTsKLQlzaF9ldGhfd3JpdGUobmRldiwgMCwgQ0RDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KLQluZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBzaF9ldGhfcmVhZChuZGV2LCBMQ0NSKTsKLQlzaF9ldGhfd3JpdGUobmRldiwgMCwgTENDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KLQlpZiAoc2hfZXRoX2lzX2dldGhlcihtZHApKSB7Ci0JCW5kZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IHNoX2V0aF9yZWFkKG5kZXYsIENFUkNSKTsKLQkJc2hfZXRoX3dyaXRlKG5kZXYsIDAsIENFUkNSKTsJLyogKHdyaXRlIGNsZWFyKSAqLwotCQluZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBzaF9ldGhfcmVhZChuZGV2LCBDRUVDUik7Ci0JCXNoX2V0aF93cml0ZShuZGV2LCAwLCBDRUVDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KLQl9IGVsc2UgewotCQluZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBzaF9ldGhfcmVhZChuZGV2LCBDTkRDUik7Ci0JCXNoX2V0aF93cml0ZShuZGV2LCAwLCBDTkRDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KLQl9Ci0JcG1fcnVudGltZV9wdXRfc3luYygmbWRwLT5wZGV2LT5kZXYpOwotCi0JcmV0dXJuICZuZGV2LT5zdGF0czsKLX0KLQogLyogaW9jdGwgdG8gZGV2aWNlIGZ1bmN0aW9uICovCiBzdGF0aWMgaW50IHNoX2V0aF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5oCmluZGV4IGIzN2M0MjcuLjIyMzAxYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguaApAQCAtMTYyLDkgKzE2Miw5IEBACiAKIC8qIERyaXZlcidzIHBhcmFtZXRlcnMgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX1NITU9CSUxFKQotI2RlZmluZSBTSDRfU0tCX1JYX0FMSUdOCTMyCisjZGVmaW5lIFNIX0VUSF9SWF9BTElHTgkJMzIKICNlbHNlCi0jZGVmaW5lIFNIMl9TSDNfU0tCX1JYX0FMSUdOCTIKKyNkZWZpbmUgU0hfRVRIX1JYX0FMSUdOCQkyCiAjZW5kaWYKIAogLyogUmVnaXN0ZXIncyBiaXRzCkBAIC01MjIsNiArNTIyLDcgQEAKIAogCXVuc2lnbmVkIG5vX2V0aGVyX2xpbms6MTsKIAl1bnNpZ25lZCBldGhlcl9saW5rX2FjdGl2ZV9sb3c6MTsKKwl1bnNpZ25lZCBpc19vcGVuZWQ6MTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF9ldGhfc29mdF9zd2FwKGNoYXIgKnNyYywgaW50IGxlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMKaW5kZXggNWIwZGEzOS4uNThhMWEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMKQEAgLTI2NSw2ICsyNjUsMTUgQEAKIAogCXBsYXRfZGF0ID0gZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKIAorCWlmICghcGxhdF9kYXQpCisJCXBsYXRfZGF0ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCisJCQkJCXNpemVvZihzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEpLAorCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXBsYXRfZGF0KSB7CisJCXByX2VycigiJXM6IEVSUk9SOiBubyBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAgLUVOT01FTTsKKwl9CisKIAkvKiBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgbXVsdGljYXN0IGhhc2ggYmlucyAqLwogCXBsYXRfZGF0LT5tdWx0aWNhc3RfZmlsdGVyX2JpbnMgPSBIQVNIX1RBQkxFX1NJWkU7CiAKQEAgLTI3MiwxNSArMjgxLDYgQEAKIAlwbGF0X2RhdC0+dW5pY2FzdF9maWx0ZXJfZW50cmllcyA9IDE7CiAKIAlpZiAocGRldi0+ZGV2Lm9mX25vZGUpIHsKLQkJaWYgKCFwbGF0X2RhdCkKLQkJCXBsYXRfZGF0ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCi0JCQkJCXNpemVvZihzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEpLAotCQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFwbGF0X2RhdCkgewotCQkJcHJfZXJyKCIlczogRVJST1I6IG5vIG1lbW9yeSIsIF9fZnVuY19fKTsKLQkJCXJldHVybiAgLUVOT01FTTsKLQkJfQotCiAJCXJldCA9IHN0bW1hY19wcm9iZV9jb25maWdfZHQocGRldiwgcGxhdF9kYXQsICZtYWMpOwogCQlpZiAocmV0KSB7CiAJCQlwcl9lcnIoIiVzOiBtYWluIGR0IHByb2JlIGZhaWxlZCIsIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggOWRkMzc0Ni4uNGQzMzJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTIyMjIsNyArMjIyMiw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludCB0dW5fY2hyX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpCitzdGF0aWMgdm9pZCB0dW5fY2hyX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpCiB7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKIAlzdHJ1Y3QgaWZyZXEgaWZyOwpAQCAtMjIzOCw3ICsyMjM4LDcgQEAKIAlpZiAodHVuKQogCQl0dW5fcHV0KHR1bik7CiAKLQlyZXR1cm4gc2VxX3ByaW50ZihtLCAiaWZmOlx0JXNcbiIsIGlmci5pZnJfbmFtZSk7CisJc2VxX3ByaW50ZihtLCAiaWZmOlx0JXNcbiIsIGlmci5pZnJfbmFtZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCBjY2E4NzEzLi5lY2U4ZDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtNDk2LDkgKzQ5Niw2IEBACiAJCWxlbiA9IHNrYl9mcmFnX3NpemUoZnJhZyk7CiAJCW9mZnNldCA9IGZyYWctPnBhZ2Vfb2Zmc2V0OwogCi0JCS8qIERhdGEgbXVzdCBub3QgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5LiAqLwotCQlCVUdfT04obGVuICsgb2Zmc2V0ID4gUEFHRV9TSVpFPDxjb21wb3VuZF9vcmRlcihwYWdlKSk7Ci0KIAkJLyogU2tpcCB1bnVzZWQgZnJhbWVzIGZyb20gc3RhcnQgb2YgcGFnZSAqLwogCQlwYWdlICs9IG9mZnNldCA+PiBQQUdFX1NISUZUOwogCQlvZmZzZXQgJj0gflBBR0VfTUFTSzsKQEAgLTUwNiw4ICs1MDMsNiBAQAogCQl3aGlsZSAobGVuID4gMCkgewogCQkJdW5zaWduZWQgbG9uZyBieXRlczsKIAotCQkJQlVHX09OKG9mZnNldCA+PSBQQUdFX1NJWkUpOwotCiAJCQlieXRlcyA9IFBBR0VfU0laRSAtIG9mZnNldDsKIAkJCWlmIChieXRlcyA+IGxlbikKIAkJCQlieXRlcyA9IGxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3RyZjc5NzBhLmMgYi9kcml2ZXJzL25mYy90cmY3OTcwYS5jCmluZGV4IGQyY2NkMjguLmFhNmEzMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3RyZjc5NzBhLmMKKysrIGIvZHJpdmVycy9uZmMvdHJmNzk3MGEuYwpAQCAtMjE1NCw3ICsyMTU0LDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgdHJmNzk3MGFfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNwaV9kZXZpY2UsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL251YnVzL251YnVzLmMgYi9kcml2ZXJzL251YnVzL251YnVzLmMKaW5kZXggNTA2NmE3ZS4uMzMxOWNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9udWJ1cy9udWJ1cy5jCisrKyBiL2RyaXZlcnMvbnVidXMvbnVidXMuYwpAQCAtOTIwLDE0ICs5MjAsMTAgQEAKIAlycCA9IG51YnVzX3JvbV9hZGRyKHNsb3QpOwkKIAlmb3IoaSA9IDQ7IGk7IGktLSkKIAl7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCWludCBjYXJkX3ByZXNlbnQ7CiAKIAkJcnAtLTsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQljYXJkX3ByZXNlbnQgPSBod3JlZ19wcmVzZW50KHJwKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCSAgICAgICAKIAkJaWYgKCFjYXJkX3ByZXNlbnQpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9iYXNlLmMgYi9kcml2ZXJzL29mL2Jhc2UuYwppbmRleCAzODIzZWRmLi40YzJjY2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2Jhc2UuYworKysgYi9kcml2ZXJzL29mL2Jhc2UuYwpAQCAtMTI1MCw2ICsxMjUwLDM5IEBACiBFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3U2NCk7CiAKIC8qKgorICogb2ZfcHJvcGVydHlfcmVhZF91NjRfYXJyYXkgLSBGaW5kIGFuZCByZWFkIGFuIGFycmF5IG9mIDY0IGJpdCBpbnRlZ2VycworICogZnJvbSBhIHByb3BlcnR5LgorICoKKyAqIEBucDoJCWRldmljZSBub2RlIGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IHZhbHVlIGlzIHRvIGJlIHJlYWQuCisgKiBAcHJvcG5hbWU6CW5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHNlYXJjaGVkLgorICogQG91dF92YWx1ZXM6CXBvaW50ZXIgdG8gcmV0dXJuIHZhbHVlLCBtb2RpZmllZCBvbmx5IGlmIHJldHVybiB2YWx1ZSBpcyAwLgorICogQHN6OgkJbnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIHRvIHJlYWQKKyAqCisgKiBTZWFyY2ggZm9yIGEgcHJvcGVydHkgaW4gYSBkZXZpY2Ugbm9kZSBhbmQgcmVhZCA2NC1iaXQgdmFsdWUocykgZnJvbQorICogaXQuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdCwKKyAqIC1FTk9EQVRBIGlmIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwgYW5kIC1FT1ZFUkZMT1cgaWYgdGhlCisgKiBwcm9wZXJ0eSBkYXRhIGlzbid0IGxhcmdlIGVub3VnaC4KKyAqCisgKiBUaGUgb3V0X3ZhbHVlcyBpcyBtb2RpZmllZCBvbmx5IGlmIGEgdmFsaWQgdTY0IHZhbHVlIGNhbiBiZSBkZWNvZGVkLgorICovCitpbnQgb2ZfcHJvcGVydHlfcmVhZF91NjRfYXJyYXkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpwcm9wbmFtZSwgdTY0ICpvdXRfdmFsdWVzLAorCQkJICAgICAgIHNpemVfdCBzeikKK3sKKwljb25zdCBfX2JlMzIgKnZhbCA9IG9mX2ZpbmRfcHJvcGVydHlfdmFsdWVfb2Zfc2l6ZShucCwgcHJvcG5hbWUsCisJCQkJCQkoc3ogKiBzaXplb2YoKm91dF92YWx1ZXMpKSk7CisKKwlpZiAoSVNfRVJSKHZhbCkpCisJCXJldHVybiBQVFJfRVJSKHZhbCk7CisKKwl3aGlsZSAoc3otLSkgeworCQkqb3V0X3ZhbHVlcysrID0gb2ZfcmVhZF9udW1iZXIodmFsLCAyKTsKKwkJdmFsICs9IDI7CisJfQorCXJldHVybiAwOworfQorCisvKioKICAqIG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nIC0gRmluZCBhbmQgcmVhZCBhIHN0cmluZyBmcm9tIGEgcHJvcGVydHkKICAqIEBucDoJCWRldmljZSBub2RlIGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IHZhbHVlIGlzIHRvIGJlIHJlYWQuCiAgKiBAcHJvcG5hbWU6CW5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHNlYXJjaGVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9mZHQuYyBiL2RyaXZlcnMvb2YvZmR0LmMKaW5kZXggMzBlOTdiYy4uZDEzNDcxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9mZHQuYworKysgYi9kcml2ZXJzL29mL2ZkdC5jCkBAIC05NjQsOCArOTY0LDYgQEAKIGludCBfX2luaXQgX193ZWFrIGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlfYXJjaChwaHlzX2FkZHJfdCBiYXNlLAogCQkJCQlwaHlzX2FkZHJfdCBzaXplLCBib29sIG5vbWFwKQogewotCWlmIChtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoYmFzZSwgc2l6ZSkpCi0JCXJldHVybiAtRUJVU1k7CiAJaWYgKG5vbWFwKQogCQlyZXR1cm4gbWVtYmxvY2tfcmVtb3ZlKGJhc2UsIHNpemUpOwogCXJldHVybiBtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9wY2kuYyBiL2RyaXZlcnMvb2Yvb2ZfcGNpLmMKaW5kZXggODg4MmI0Ni4uODg0NzFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9wY2kuYworKysgYi9kcml2ZXJzL29mL29mX3BjaS5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIHN0YXRpYyBMSVNUX0hFQUQob2ZfcGNpX21zaV9jaGlwX2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChvZl9wY2lfbXNpX2NoaXBfbXV0ZXgpOwogCi1pbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApCitpbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApCiB7CiAJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hpcC0+b2Zfbm9kZSwgIm1zaS1jb250cm9sbGVyIikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvZl9wY2lfbXNpX2NoaXBfYWRkKTsKIAotdm9pZCBvZl9wY2lfbXNpX2NoaXBfcmVtb3ZlKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCkKK3ZvaWQgb2ZfcGNpX21zaV9jaGlwX3JlbW92ZShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApCiB7CiAJbXV0ZXhfbG9jaygmb2ZfcGNpX21zaV9jaGlwX211dGV4KTsKIAlsaXN0X2RlbCgmY2hpcC0+bGlzdCk7CkBAIC0yNTcsOSArMjU3LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9mX3BjaV9tc2lfY2hpcF9yZW1vdmUpOwogCi1zdHJ1Y3QgbXNpX2NoaXAgKm9mX3BjaV9maW5kX21zaV9jaGlwX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQorc3RydWN0IG1zaV9jb250cm9sbGVyICpvZl9wY2lfZmluZF9tc2lfY2hpcF9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKIHsKLQlzdHJ1Y3QgbXNpX2NoaXAgKmM7CisJc3RydWN0IG1zaV9jb250cm9sbGVyICpjOwogCiAJbXV0ZXhfbG9jaygmb2ZfcGNpX21zaV9jaGlwX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZvZl9wY2lfbXNpX2NoaXBfbGlzdCwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggODkzNTAzZi4uY2NlZDg0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogY29uZmlnIFBDSV9NU0kKIAlib29sICJNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSBhbmQgTVNJLVgpIgogCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IEdFTkVSSUNfTVNJX0lSUQogCWhlbHAKIAkgICBUaGlzIGFsbG93cyBkZXZpY2UgZHJpdmVycyB0byBlbmFibGUgTVNJIChNZXNzYWdlIFNpZ25hbGVkCiAJICAgSW50ZXJydXB0cykuICBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgZW5hYmxlIGEgZGV2aWNlIHRvCkBAIC0xNiw2ICsxNywxMSBAQAogCiAJICAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS4KIAorY29uZmlnIFBDSV9NU0lfSVJRX0RPTUFJTgorCWJvb2wKKwlkZXBlbmRzIG9uIFBDSV9NU0kKKwlzZWxlY3QgR0VORVJJQ19NU0lfSVJRX0RPTUFJTgorCiBjb25maWcgUENJX0RFQlVHCiAJYm9vbCAiUENJIERlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIFBDSSAmJiBERUJVR19LRVJORUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2hvc3QvS2NvbmZpZwppbmRleCAzZGMyNWZhLi5jNGI2NTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9LY29uZmlnCkBAIC0zMiw3ICszMiwxMCBAQAogCiBjb25maWcgUENJX1RFR1JBCiAJYm9vbCAiTlZJRElBIFRlZ3JhIFBDSWUgY29udHJvbGxlciIKLQlkZXBlbmRzIG9uIEFSQ0hfVEVHUkEKKwlkZXBlbmRzIG9uIEFSQ0hfVEVHUkEgJiYgIUFSTTY0CisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgUENJZSBob3N0IGNvbnRyb2xsZXIgZm91bmQKKwkgIG9uIE5WSURJQSBUZWdyYSBTb0NzLgogCiBjb25maWcgUENJX1JDQVJfR0VOMgogCWJvb2wgIlJlbmVzYXMgUi1DYXIgR2VuMiBJbnRlcm5hbCBQQ0kgY29udHJvbGxlciIKQEAgLTkxLDQgKzk0LDEyIEBACiAJICBUaGVyZSBhcmUgNSBpbnRlcm5hbCBQQ0llIHBvcnRzIGF2YWlsYWJsZS4gRWFjaCBwb3J0IGlzIEdFTjMgY2FwYWJsZQogCSAgYW5kIGhhdmUgdmFyaWVkIGxhbmVzIGZyb20geDEgdG8geDguCiAKK2NvbmZpZyBQQ0lfTEFZRVJTQ0FQRQorCWJvb2wgIkZyZWVzY2FsZSBMYXllcnNjYXBlIFBDSWUgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIE9GICYmIEFSTQorCXNlbGVjdCBQQ0lFX0RXCisJc2VsZWN0IE1GRF9TWVNDT04KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uIExheWVyc2NhcGUgU29Dcy4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL2hvc3QvTWFrZWZpbGUKaW5kZXggMjZiMzQ2MS4uNDRjMjY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9ob3N0L01ha2VmaWxlCkBAIC0xMSwzICsxMSw0IEBACiBvYmotJChDT05GSUdfUENJX0tFWVNUT05FKSArPSBwY2kta2V5c3RvbmUtZHcubyBwY2kta2V5c3RvbmUubwogb2JqLSQoQ09ORklHX1BDSUVfWElMSU5YKSArPSBwY2llLXhpbGlueC5vCiBvYmotJChDT05GSUdfUENJX1hHRU5FKSArPSBwY2kteGdlbmUubworb2JqLSQoQ09ORklHX1BDSV9MQVlFUlNDQVBFKSArPSBwY2ktbGF5ZXJzY2FwZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1kcmE3eHguYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWRyYTd4eC5jCmluZGV4IDUyYjM0ZmUuLjhjNjk2OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWRyYTd4eC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWRyYTd4eC5jCkBAIC0yNzAsOCArMjcwLDggQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgYWRkX3BjaWVfcG9ydChzdHJ1Y3QgZHJhN3h4X3BjaWUgKmRyYTd4eCwKLQkJCSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19pbml0IGRyYTd4eF9hZGRfcGNpZV9wb3J0KHN0cnVjdCBkcmE3eHhfcGNpZSAqZHJhN3h4LAorCQkJCSAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQ7CiAJc3RydWN0IHBjaWVfcG9ydCAqcHA7CkBAIC0zOTgsNyArMzk4LDcgQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRyYTd4eCk7CiAKLQlyZXQgPSBhZGRfcGNpZV9wb3J0KGRyYTd4eCwgcGRldik7CisJcmV0ID0gZHJhN3h4X2FkZF9wY2llX3BvcnQoZHJhN3h4LCBwZGV2KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfYWRkX3BvcnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWV4eW5vcy5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktZXh5bm9zLmMKaW5kZXggYzVkMGNhMy4uODUwYzlmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktZXh5bm9zLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktZXh5bm9zLmMKQEAgLTMxMiw3ICszMTIsNiBAQAogCWlmIChleHlub3NfcGNpZS0+cmVzZXRfZ3BpbyA+PSAwKQogCQlkZXZtX2dwaW9fcmVxdWVzdF9vbmUocHAtPmRldiwgZXh5bm9zX3BjaWUtPnJlc2V0X2dwaW8sCiAJCQkJR1BJT0ZfT1VUX0lOSVRfSElHSCwgIlJFU0VUIik7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgaW50IGV4eW5vc19wY2llX2VzdGFibGlzaF9saW5rKHN0cnVjdCBwY2llX3BvcnQgKnBwKQpAQCAtMzg4LDcgKzM4Nyw2IEBACiAKIAl2YWwgPSBleHlub3NfZWxiX3JlYWRsKGV4eW5vc19wY2llLCBQQ0lFX0lSUV9QVUxTRSk7CiAJZXh5bm9zX2VsYl93cml0ZWwoZXh5bm9zX3BjaWUsIHZhbCwgUENJRV9JUlFfUFVMU0UpOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgZXh5bm9zX3BjaWVfZW5hYmxlX2lycV9wdWxzZShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkKQEAgLTQwMCw3ICszOTgsNiBAQAogCXZhbCA9IElSUV9JTlRBX0FTU0VSVCB8IElSUV9JTlRCX0FTU0VSVCB8CiAJCUlSUV9JTlRDX0FTU0VSVCB8IElSUV9JTlREX0FTU0VSVCwKIAlleHlub3NfZWxiX3dyaXRlbChleHlub3NfcGNpZSwgdmFsLCBQQ0lFX0lSUV9FTl9QVUxTRSk7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZXh5bm9zX3BjaWVfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQpAQCAtNDI5LDcgKzQyNiw2IEBACiAJdmFsID0gZXh5bm9zX2VsYl9yZWFkbChleHlub3NfcGNpZSwgUENJRV9JUlFfRU5fTEVWRUwpOwogCXZhbCB8PSBJUlFfTVNJX0VOQUJMRTsKIAlleHlub3NfZWxiX3dyaXRlbChleHlub3NfcGNpZSwgdmFsLCBQQ0lFX0lSUV9FTl9MRVZFTCk7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBleHlub3NfcGNpZV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkKQEAgLTQzOCw4ICs0MzQsNiBAQAogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BDSV9NU0kpKQogCQlleHlub3NfcGNpZV9tc2lfaW5pdChwcCk7Ci0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHlub3NfcGNpZV9yZWFkbF9yYyhzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwKQEAgLTQ0OCw3ICs0NDIsNiBAQAogCWV4eW5vc19wY2llX3NpZGViYW5kX2RiaV9yX21vZGUocHAsIHRydWUpOwogCSp2YWwgPSByZWFkbChkYmlfYmFzZSk7CiAJZXh5bm9zX3BjaWVfc2lkZWJhbmRfZGJpX3JfbW9kZShwcCwgZmFsc2UpOwotCXJldHVybjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGV4eW5vc19wY2llX3dyaXRlbF9yYyhzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwKQEAgLTQ1Nyw3ICs0NTAsNiBAQAogCWV4eW5vc19wY2llX3NpZGViYW5kX2RiaV93X21vZGUocHAsIHRydWUpOwogCXdyaXRlbCh2YWwsIGRiaV9iYXNlKTsKIAlleHlub3NfcGNpZV9zaWRlYmFuZF9kYmlfd19tb2RlKHBwLCBmYWxzZSk7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgaW50IGV4eW5vc19wY2llX3JkX293bl9jb25mKHN0cnVjdCBwY2llX3BvcnQgKnBwLCBpbnQgd2hlcmUsIGludCBzaXplLApAQCAtNTA5LDggKzUwMSw4IEBACiAJLmhvc3RfaW5pdCA9IGV4eW5vc19wY2llX2hvc3RfaW5pdCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGFkZF9wY2llX3BvcnQoc3RydWN0IHBjaWVfcG9ydCAqcHAsCi0JCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19pbml0IGV4eW5vc19hZGRfcGNpZV9wb3J0KHN0cnVjdCBwY2llX3BvcnQgKnBwLAorCQkJCSAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQ7CiAKQEAgLTYxNSw3ICs2MDcsNyBAQAogCQlnb3RvIGZhaWxfYnVzX2NsazsKIAl9CiAKLQlyZXQgPSBhZGRfcGNpZV9wb3J0KHBwLCBwZGV2KTsKKwlyZXQgPSBleHlub3NfYWRkX3BjaWVfcG9ydChwcCwgcGRldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZmFpbF9idXNfY2xrOwogCkBAIC02NTYsMTEgKzY0OCwxMSBAQAogCiAvKiBFeHlub3MgUENJZSBkcml2ZXIgZG9lcyBub3QgYWxsb3cgbW9kdWxlIHVubG9hZCAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBwY2llX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGV4eW5vc19wY2llX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZleHlub3NfcGNpZV9kcml2ZXIsIGV4eW5vc19wY2llX3Byb2JlKTsKIH0KLXN1YnN5c19pbml0Y2FsbChwY2llX2luaXQpOworc3Vic3lzX2luaXRjYWxsKGV4eW5vc19wY2llX2luaXQpOwogCiBNT0RVTEVfQVVUSE9SKCJKaW5nb28gSGFuIDxqZzEuaGFuQHNhbXN1bmcuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktaG9zdC1nZW5lcmljLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1ob3N0LWdlbmVyaWMuYwppbmRleCAzZDIwNzZmLi4xODk1OTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1ob3N0LWdlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1ob3N0LWdlbmVyaWMuYwpAQCAtMzIsNyArMzIsNyBAQAogCiBzdHJ1Y3QgZ2VuX3BjaV9jZmdfd2luZG93cyB7CiAJc3RydWN0IHJlc291cmNlCQkJCXJlczsKLQlzdHJ1Y3QgcmVzb3VyY2UJCQkJYnVzX3JhbmdlOworCXN0cnVjdCByZXNvdXJjZQkJCQkqYnVzX3JhbmdlOwogCXZvaWQgX19pb21lbQkJCQkqKndpbjsKIAogCWNvbnN0IHN0cnVjdCBnZW5fcGNpX2NmZ19idXNfb3BzCSpvcHM7CkBAIC01MCw3ICs1MCw3IEBACiB7CiAJc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzID0gYnVzLT5zeXNkYXRhOwogCXN0cnVjdCBnZW5fcGNpICpwY2kgPSBzeXMtPnByaXZhdGVfZGF0YTsKLQlyZXNvdXJjZV9zaXplX3QgaWR4ID0gYnVzLT5udW1iZXIgLSBwY2ktPmNmZy5idXNfcmFuZ2Uuc3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IGlkeCA9IGJ1cy0+bnVtYmVyIC0gcGNpLT5jZmcuYnVzX3JhbmdlLT5zdGFydDsKIAogCXJldHVybiBwY2ktPmNmZy53aW5baWR4XSArICgoZGV2Zm4gPDwgOCkgfCB3aGVyZSk7CiB9CkBAIC02Niw3ICs2Niw3IEBACiB7CiAJc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzID0gYnVzLT5zeXNkYXRhOwogCXN0cnVjdCBnZW5fcGNpICpwY2kgPSBzeXMtPnByaXZhdGVfZGF0YTsKLQlyZXNvdXJjZV9zaXplX3QgaWR4ID0gYnVzLT5udW1iZXIgLSBwY2ktPmNmZy5idXNfcmFuZ2Uuc3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IGlkeCA9IGJ1cy0+bnVtYmVyIC0gcGNpLT5jZmcuYnVzX3JhbmdlLT5zdGFydDsKIAogCXJldHVybiBwY2ktPmNmZy53aW5baWR4XSArICgoZGV2Zm4gPDwgMTIpIHwgd2hlcmUpOwogfQpAQCAtMTM4LDEwNiArMTM4LDUwIEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ2VuX3BjaV9vZl9tYXRjaCk7CiAKLXN0YXRpYyBpbnQgZ2VuX3BjaV9jYWxjX2lvX29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3Qgb2ZfcGNpX3JhbmdlICpyYW5nZSwKLQkJCQkgIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJCSAgcmVzb3VyY2Vfc2l6ZV90ICpvZmZzZXQpCi17Ci0Jc3RhdGljIGF0b21pY190IHdpbnMgPSBBVE9NSUNfSU5JVCgwKTsKLQlpbnQgZXJyLCBpZHgsIG1heF93aW47Ci0JdW5zaWduZWQgaW50IHdpbmRvdzsKLQotCWlmICghUEFHRV9BTElHTkVEKHJhbmdlLT5jcHVfYWRkcikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWF4X3dpbiA9IChJT19TUEFDRV9MSU1JVCArIDEpIC8gU1pfNjRLOwotCWlkeCA9IGF0b21pY19pbmNfcmV0dXJuKCZ3aW5zKTsKLQlpZiAoaWR4ID4gbWF4X3dpbikKLQkJcmV0dXJuIC1FTk9TUEM7Ci0KLQl3aW5kb3cgPSAoaWR4IC0gMSkgKiBTWl82NEs7Ci0JZXJyID0gcGNpX2lvcmVtYXBfaW8od2luZG93LCByYW5nZS0+Y3B1X2FkZHIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlvZl9wY2lfcmFuZ2VfdG9fcmVzb3VyY2UocmFuZ2UsIGRldi0+b2Zfbm9kZSwgcmVzKTsKLQlyZXMtPnN0YXJ0ID0gd2luZG93OwotCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIHJhbmdlLT5zaXplIC0gMTsKLQkqb2Zmc2V0ID0gd2luZG93IC0gcmFuZ2UtPnBjaV9hZGRyOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGdlbl9wY2lfY2FsY19tZW1fb2Zmc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3Qgb2ZfcGNpX3JhbmdlICpyYW5nZSwKLQkJCQkgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCQkgICByZXNvdXJjZV9zaXplX3QgKm9mZnNldCkKLXsKLQlvZl9wY2lfcmFuZ2VfdG9fcmVzb3VyY2UocmFuZ2UsIGRldi0+b2Zfbm9kZSwgcmVzKTsKLQkqb2Zmc2V0ID0gcmFuZ2UtPmNwdV9hZGRyIC0gcmFuZ2UtPnBjaV9hZGRyOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBnZW5fcGNpX3JlbGVhc2Vfb2ZfcGNpX3JhbmdlcyhzdHJ1Y3QgZ2VuX3BjaSAqcGNpKQogewotCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2Vfd2luZG93ICp3aW47Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdpbiwgJnBjaS0+cmVzb3VyY2VzLCBsaXN0KQotCQlyZWxlYXNlX3Jlc291cmNlKHdpbi0+cmVzKTsKLQogCXBjaV9mcmVlX3Jlc291cmNlX2xpc3QoJnBjaS0+cmVzb3VyY2VzKTsKIH0KIAogc3RhdGljIGludCBnZW5fcGNpX3BhcnNlX3JlcXVlc3Rfb2ZfcGNpX3JhbmdlcyhzdHJ1Y3QgZ2VuX3BjaSAqcGNpKQogewotCXN0cnVjdCBvZl9wY2lfcmFuZ2UgcmFuZ2U7Ci0Jc3RydWN0IG9mX3BjaV9yYW5nZV9wYXJzZXIgcGFyc2VyOwogCWludCBlcnIsIHJlc192YWxpZCA9IDA7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcGNpLT5ob3N0LmRldi5wYXJlbnQ7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlOworCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2Vfd2luZG93ICp3aW47CiAKLQlpZiAob2ZfcGNpX3JhbmdlX3BhcnNlcl9pbml0KCZwYXJzZXIsIG5wKSkgewotCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgXCJyYW5nZXNcIiBwcm9wZXJ0eVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwllcnIgPSBvZl9wY2lfZ2V0X2hvc3RfYnJpZGdlX3Jlc291cmNlcyhucCwgMCwgMHhmZiwgJnBjaS0+cmVzb3VyY2VzLAorCQkJCQkgICAgICAgJmlvYmFzZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCWZvcl9lYWNoX29mX3BjaV9yYW5nZSgmcGFyc2VyLCAmcmFuZ2UpIHsKLQkJc3RydWN0IHJlc291cmNlICpwYXJlbnQsICpyZXM7Ci0JCXJlc291cmNlX3NpemVfdCBvZmZzZXQ7Ci0JCXUzMiByZXN0eXBlID0gcmFuZ2UuZmxhZ3MgJiBJT1JFU09VUkNFX1RZUEVfQklUUzsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdpbiwgJnBjaS0+cmVzb3VyY2VzLCBsaXN0KSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcGFyZW50LCAqcmVzID0gd2luLT5yZXM7CiAKLQkJcmVzID0gZGV2bV9rbWFsbG9jKGRldiwgc2l6ZW9mKCpyZXMpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFyZXMpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9yZWxlYXNlX3JlczsKLQkJfQotCi0JCXN3aXRjaCAocmVzdHlwZSkgeworCQlzd2l0Y2ggKHJlc291cmNlX3R5cGUocmVzKSkgewogCQljYXNlIElPUkVTT1VSQ0VfSU86CiAJCQlwYXJlbnQgPSAmaW9wb3J0X3Jlc291cmNlOwotCQkJZXJyID0gZ2VuX3BjaV9jYWxjX2lvX29mZnNldChkZXYsICZyYW5nZSwgcmVzLCAmb2Zmc2V0KTsKKwkJCWVyciA9IHBjaV9yZW1hcF9pb3NwYWNlKHJlcywgaW9iYXNlKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlkZXZfd2FybihkZXYsICJlcnJvciAlZDogZmFpbGVkIHRvIG1hcCByZXNvdXJjZSAlcFJcbiIsCisJCQkJCSBlcnIsIHJlcyk7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBJT1JFU09VUkNFX01FTToKIAkJCXBhcmVudCA9ICZpb21lbV9yZXNvdXJjZTsKLQkJCWVyciA9IGdlbl9wY2lfY2FsY19tZW1fb2Zmc2V0KGRldiwgJnJhbmdlLCByZXMsICZvZmZzZXQpOwotCQkJcmVzX3ZhbGlkIHw9ICEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUFJFRkVUQ0ggfHwgZXJyKTsKKwkJCXJlc192YWxpZCB8PSAhKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKTsKIAkJCWJyZWFrOworCQljYXNlIElPUkVTT1VSQ0VfQlVTOgorCQkJcGNpLT5jZmcuYnVzX3JhbmdlID0gcmVzOwogCQlkZWZhdWx0OgotCQkJZXJyID0gLUVJTlZBTDsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKGVycikgewotCQkJZGV2X3dhcm4oZGV2LAotCQkJCSAiZXJyb3IgJWQ6IGZhaWxlZCB0byBhZGQgcmVzb3VyY2UgW3R5cGUgMHgleCwgJWxsZCBieXRlc11cbiIsCi0JCQkJIGVyciwgcmVzdHlwZSwgcmFuZ2Uuc2l6ZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWVyciA9IHJlcXVlc3RfcmVzb3VyY2UocGFyZW50LCByZXMpOworCQllcnIgPSBkZXZtX3JlcXVlc3RfcmVzb3VyY2UoZGV2LCBwYXJlbnQsIHJlcyk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9yZWxlYXNlX3JlczsKLQotCQlwY2lfYWRkX3Jlc291cmNlX29mZnNldCgmcGNpLT5yZXNvdXJjZXMsIHJlcywgb2Zmc2V0KTsKIAl9CiAKIAlpZiAoIXJlc192YWxpZCkgewpAQCAtMjYyLDM4ICsyMDYsMzAgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2ktPmhvc3QuZGV2LnBhcmVudDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwogCi0JaWYgKG9mX3BjaV9wYXJzZV9idXNfcmFuZ2UobnAsICZwY2ktPmNmZy5idXNfcmFuZ2UpKQotCQlwY2ktPmNmZy5idXNfcmFuZ2UgPSAoc3RydWN0IHJlc291cmNlKSB7Ci0JCQkubmFtZQk9IG5wLT5uYW1lLAotCQkJLnN0YXJ0CT0gMCwKLQkJCS5lbmQJPSAweGZmLAotCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVMsCi0JCX07Ci0KIAllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcGNpLT5jZmcucmVzKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoZGV2LCAibWlzc2luZyBcInJlZ1wiIHByb3BlcnR5XG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlwY2ktPmNmZy53aW4gPSBkZXZtX2tjYWxsb2MoZGV2LCByZXNvdXJjZV9zaXplKCZwY2ktPmNmZy5idXNfcmFuZ2UpLAorCS8qIExpbWl0IHRoZSBidXMtcmFuZ2UgdG8gZml0IHdpdGhpbiByZWcgKi8KKwlidXNfbWF4ID0gcGNpLT5jZmcuYnVzX3JhbmdlLT5zdGFydCArCisJCSAgKHJlc291cmNlX3NpemUoJnBjaS0+Y2ZnLnJlcykgPj4gcGNpLT5jZmcub3BzLT5idXNfc2hpZnQpIC0gMTsKKwlwY2ktPmNmZy5idXNfcmFuZ2UtPmVuZCA9IG1pbl90KHJlc291cmNlX3NpemVfdCwKKwkJCQkJcGNpLT5jZmcuYnVzX3JhbmdlLT5lbmQsIGJ1c19tYXgpOworCisJcGNpLT5jZmcud2luID0gZGV2bV9rY2FsbG9jKGRldiwgcmVzb3VyY2Vfc2l6ZShwY2ktPmNmZy5idXNfcmFuZ2UpLAogCQkJCSAgICBzaXplb2YoKnBjaS0+Y2ZnLndpbiksIEdGUF9LRVJORUwpOwogCWlmICghcGNpLT5jZmcud2luKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIExpbWl0IHRoZSBidXMtcmFuZ2UgdG8gZml0IHdpdGhpbiByZWcgKi8KLQlidXNfbWF4ID0gcGNpLT5jZmcuYnVzX3JhbmdlLnN0YXJ0ICsKLQkJICAocmVzb3VyY2Vfc2l6ZSgmcGNpLT5jZmcucmVzKSA+PiBwY2ktPmNmZy5vcHMtPmJ1c19zaGlmdCkgLSAxOwotCXBjaS0+Y2ZnLmJ1c19yYW5nZS5lbmQgPSBtaW5fdChyZXNvdXJjZV9zaXplX3QsIHBjaS0+Y2ZnLmJ1c19yYW5nZS5lbmQsCi0JCQkJICAgICAgIGJ1c19tYXgpOwotCiAJLyogTWFwIG91ciBDb25maWd1cmF0aW9uIFNwYWNlIHdpbmRvd3MgKi8KIAlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKGRldiwgcGNpLT5jZmcucmVzLnN0YXJ0LAogCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZSgmcGNpLT5jZmcucmVzKSwKIAkJCQkgICAgICJDb25maWd1cmF0aW9uIFNwYWNlIikpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYnVzX3JhbmdlID0gJnBjaS0+Y2ZnLmJ1c19yYW5nZTsKKwlidXNfcmFuZ2UgPSBwY2ktPmNmZy5idXNfcmFuZ2U7CiAJZm9yIChidXNuID0gYnVzX3JhbmdlLT5zdGFydDsgYnVzbiA8PSBidXNfcmFuZ2UtPmVuZDsgKytidXNuKSB7CiAJCXUzMiBpZHggPSBidXNuIC0gYnVzX3JhbmdlLT5zdGFydDsKIAkJdTMyIHN6ID0gMSA8PCBwY2ktPmNmZy5vcHMtPmJ1c19zaGlmdDsKQEAgLTMwNSw4ICsyNDEsNiBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JLyogUmVnaXN0ZXIgYnVzIHJlc291cmNlICovCi0JcGNpX2FkZF9yZXNvdXJjZSgmcGNpLT5yZXNvdXJjZXMsIGJ1c19yYW5nZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYwppbmRleCA2OTIwMmQxLi5kMWEyNmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktaW14Ni5jCkBAIC01MzMsOCArNTMzLDggQEAKIAkJfQogCiAJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgcHAtPm1zaV9pcnEsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgaW14Nl9wY2llX21zaV9oYW5kbGVyLAotCQkgICAgICAgICAgICAgICAgICAgICAgIElSUUZfU0hBUkVELCAibXg2LXBjaWUtbXNpIiwgcHApOworCQkJCSAgICAgICBpbXg2X3BjaWVfbXNpX2hhbmRsZXIsCisJCQkJICAgICAgIElSUUZfU0hBUkVELCAibXg2LXBjaWUtbXNpIiwgcHApOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBNU0kgaXJxXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2kta2V5c3RvbmUtZHcuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLWR3LmMKaW5kZXggMzQwODZjZS4uNjZkOGVhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2kta2V5c3RvbmUtZHcuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1rZXlzdG9uZS1kdy5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAkvKiBNYXNrIHRoZSBlbmQgcG9pbnQgaWYgUFZNIGltcGxlbWVudGVkICovCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BDSV9NU0kpKSB7CiAJCWlmIChtc2ktPm1zaV9hdHRyaWIubWFza2JpdCkKLQkJCW1hc2tfbXNpX2lycShkKTsKKwkJCXBjaV9tc2lfbWFza19pcnEoZCk7CiAJfQogCiAJa3NfZHdfcGNpZV9tc2lfY2xlYXJfaXJxKHBwLCBvZmZzZXQpOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJLyogTWFzayB0aGUgZW5kIHBvaW50IGlmIFBWTSBpbXBsZW1lbnRlZCAqLwogCWlmIChJU19FTkFCTEVEKENPTkZJR19QQ0lfTVNJKSkgewogCQlpZiAobXNpLT5tc2lfYXR0cmliLm1hc2tiaXQpCi0JCQl1bm1hc2tfbXNpX2lycShkKTsKKwkJCXBjaV9tc2lfdW5tYXNrX2lycShkKTsKIAl9CiAKIAlrc19kd19wY2llX21zaV9zZXRfaXJxKHBwLCBvZmZzZXQpOwpAQCAtMjAxLDExICsyMDEsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIGtzX2R3X3BjaWVfbXNpX2RvbWFpbl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIGtzX2R3X3BjaWVfbXNpX2RvbWFpbl9vcHMgPSB7CiAJLm1hcCA9IGtzX2R3X3BjaWVfbXNpX21hcCwKIH07CiAKLWludCBrc19kd19wY2llX21zaV9ob3N0X2luaXQoc3RydWN0IHBjaWVfcG9ydCAqcHAsIHN0cnVjdCBtc2lfY2hpcCAqY2hpcCkKK2ludCBrc19kd19wY2llX21zaV9ob3N0X2luaXQoc3RydWN0IHBjaWVfcG9ydCAqcHAsIHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCkKIHsKIAlzdHJ1Y3Qga2V5c3RvbmVfcGNpZSAqa3NfcGNpZSA9IHRvX2tleXN0b25lX3BjaWUocHApOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2kta2V5c3RvbmUuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLmMKaW5kZXggMWI4OTNiYy4uNjJiOTQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2kta2V5c3RvbmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1rZXlzdG9uZS5jCkBAIC0zNTMsMTAgKzM1Myw5IEBACiAKIAlrc19wY2llID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqa3NfcGNpZSksCiAJCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFrc19wY2llKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gbWVtb3J5IGZvciBrZXlzdG9uZSBwY2llXG4iKTsKKwlpZiAoIWtzX3BjaWUpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKwogCXBwID0gJmtzX3BjaWUtPnBwOwogCiAJLyogaW5pdGlhbGl6ZSBTZXJEZXMgUGh5IGlmIHByZXNlbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLmggYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1rZXlzdG9uZS5oCmluZGV4IDFmYzFmY2UuLjQ3OGQ5MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLmgKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2kta2V5c3RvbmUuaApAQCAtNTUsNCArNTUsNCBAQAogdm9pZCBrc19kd19wY2llX21zaV9jbGVhcl9pcnEoc3RydWN0IHBjaWVfcG9ydCAqcHAsIGludCBpcnEpOwogdm9pZCBrc19kd19wY2llX3YzXzY1X3NjYW5fYnVzKHN0cnVjdCBwY2llX3BvcnQgKnBwKTsKIGludCBrc19kd19wY2llX21zaV9ob3N0X2luaXQoc3RydWN0IHBjaWVfcG9ydCAqcHAsCi0JCXN0cnVjdCBtc2lfY2hpcCAqY2hpcCk7CisJCXN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1sYXllcnNjYXBlLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1sYXllcnNjYXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5N2IxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWxheWVyc2NhcGUuYwpAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZlciBmb3IgRnJlZXNjYWxlIExheWVyc2NhcGUgU29DcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyAqCisgICogQXV0aG9yOiBNaW5naHVhbiBMaWFuIDxNaW5naHVhbi5MaWFuQGZyZWVzY2FsZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgInBjaWUtZGVzaWdud2FyZS5oIgorCisvKiBQRVgxLzIgTWlzYyBQb3J0cyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0NGR19QRVhNU0NQT1JUU1IocGV4X2lkeCkJKDB4OTQgKyAocGV4X2lkeCkgKiA0KQorI2RlZmluZSBMVFNTTV9TVEFURV9TSElGVAkyMAorI2RlZmluZSBMVFNTTV9TVEFURV9NQVNLCTB4M2YKKyNkZWZpbmUgTFRTU01fUENJRV9MMAkJMHgxMSAvKiBMMCBzdGF0ZSAqLworCisvKiBTeW1ib2wgVGltZXIgUmVnaXN0ZXIgYW5kIEZpbHRlciBNYXNrIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUENJRV9TVFJGTVIxIDB4NzFjCisKK3N0cnVjdCBsc19wY2llIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBwY2lfYnVzICpidXM7CisJdm9pZCBfX2lvbWVtICpkYmk7CisJc3RydWN0IHJlZ21hcCAqc2NmZzsKKwlzdHJ1Y3QgcGNpZV9wb3J0IHBwOworCWludCBpbmRleDsKKwlpbnQgbXNpX2lycTsKK307CisKKyNkZWZpbmUgdG9fbHNfcGNpZSh4KQljb250YWluZXJfb2YoeCwgc3RydWN0IGxzX3BjaWUsIHBwKQorCitzdGF0aWMgaW50IGxzX3BjaWVfbGlua191cChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkKK3sKKwl1MzIgc3RhdGU7CisJc3RydWN0IGxzX3BjaWUgKnBjaWUgPSB0b19sc19wY2llKHBwKTsKKworCXJlZ21hcF9yZWFkKHBjaWUtPnNjZmcsIFNDRkdfUEVYTVNDUE9SVFNSKHBjaWUtPmluZGV4KSwgJnN0YXRlKTsKKwlzdGF0ZSA9IChzdGF0ZSA+PiBMVFNTTV9TVEFURV9TSElGVCkgJiBMVFNTTV9TVEFURV9NQVNLOworCisJaWYgKHN0YXRlIDwgTFRTU01fUENJRV9MMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbHNfcGNpZV9ob3N0X2luaXQoc3RydWN0IHBjaWVfcG9ydCAqcHApCit7CisJc3RydWN0IGxzX3BjaWUgKnBjaWUgPSB0b19sc19wY2llKHBwKTsKKwlpbnQgY291bnQgPSAwOworCXUzMiB2YWw7CisKKwlkd19wY2llX3NldHVwX3JjKHBwKTsKKworCXdoaWxlICghbHNfcGNpZV9saW5rX3VwKHBwKSkgeworCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKKwkJY291bnQrKzsKKwkJaWYgKGNvdW50ID49IDIwMCkgeworCQkJZGV2X2VycihwcC0+ZGV2LCAicGh5IGxpbmsgbmV2ZXIgY2FtZSB1cFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIExTMTAyMUEgV29ya2Fyb3VuZCBmb3IgaW50ZXJuYWwgVEtUMjI4NjIyCisJICogdG8gZml4IHRoZSBJTlR4IGhhbmcgaXNzdWUKKwkgKi8KKwl2YWwgPSBpb3JlYWQzMihwY2llLT5kYmkgKyBQQ0lFX1NUUkZNUjEpOworCXZhbCAmPSAweGZmZmY7CisJaW93cml0ZTMyKHZhbCwgcGNpZS0+ZGJpICsgUENJRV9TVFJGTVIxKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2llX2hvc3Rfb3BzIGxzX3BjaWVfaG9zdF9vcHMgPSB7CisJLmxpbmtfdXAgPSBsc19wY2llX2xpbmtfdXAsCisJLmhvc3RfaW5pdCA9IGxzX3BjaWVfaG9zdF9pbml0LAorfTsKKworc3RhdGljIGludCBsc19hZGRfcGNpZV9wb3J0KHN0cnVjdCBsc19wY2llICpwY2llKQoreworCXN0cnVjdCBwY2llX3BvcnQgKnBwOworCWludCByZXQ7CisKKwlwcCA9ICZwY2llLT5wcDsKKwlwcC0+ZGV2ID0gcGNpZS0+ZGV2OworCXBwLT5kYmlfYmFzZSA9IHBjaWUtPmRiaTsKKwlwcC0+cm9vdF9idXNfbnIgPSAtMTsKKwlwcC0+b3BzID0gJmxzX3BjaWVfaG9zdF9vcHM7CisKKwlyZXQgPSBkd19wY2llX2hvc3RfaW5pdChwcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHBwLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBob3N0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgbHNfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBsc19wY2llICpwY2llOworCXN0cnVjdCByZXNvdXJjZSAqZGJpX2Jhc2U7CisJdTMyIGluZGV4WzJdOworCWludCByZXQ7CisKKwlwY2llID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGNpZSksIEdGUF9LRVJORUwpOworCWlmICghcGNpZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwY2llLT5kZXYgPSAmcGRldi0+ZGV2OworCisJZGJpX2Jhc2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicmVncyIpOworCWlmICghZGJpX2Jhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyAqcmVncyogc3BhY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwY2llLT5kYmkgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgZGJpX2Jhc2UpOworCWlmIChJU19FUlIocGNpZS0+ZGJpKSkKKwkJcmV0dXJuIFBUUl9FUlIocGNpZS0+ZGJpKTsKKworCXBjaWUtPnNjZmcgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkJICAgICAiZnNsLHBjaWUtc2NmZyIpOworCWlmIChJU19FUlIocGNpZS0+c2NmZykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gc3lzY2ZnIHBoYW5kbGUgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGNpZS0+c2NmZyk7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCSAiZnNsLHBjaWUtc2NmZyIsIGluZGV4LCAyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXBjaWUtPmluZGV4ID0gaW5kZXhbMV07CisKKwlyZXQgPSBsc19hZGRfcGNpZV9wb3J0KHBjaWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGNpZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbHNfcGNpZV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLGxzMTAyMWEtcGNpZSIgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbHNfcGNpZV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxzX3BjaWVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImxheWVyc2NhcGUtcGNpZSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBsc19wY2llX29mX21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKGxzX3BjaWVfZHJpdmVyLCBsc19wY2llX3Byb2JlKTsKKworTU9EVUxFX0FVVEhPUigiTWluZ2h1YW4gTGlhbiA8TWluZ2h1YW4uTGlhbkBmcmVlc2NhbGUuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgTGF5ZXJzY2FwZSBQQ0llIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLW12ZWJ1LmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1tdmVidS5jCmluZGV4IGIxMzE1ZTEuLmZlZDNmYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLW12ZWJ1LmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktbXZlYnUuYwpAQCAtOTksNyArOTksNyBAQAogc3RydWN0IG12ZWJ1X3BjaWUgewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IG12ZWJ1X3BjaWVfcG9ydCAqcG9ydHM7Ci0Jc3RydWN0IG1zaV9jaGlwICptc2k7CisJc3RydWN0IG1zaV9jb250cm9sbGVyICptc2k7CiAJc3RydWN0IHJlc291cmNlIGlvOwogCWNoYXIgaW9fbmFtZVszMF07CiAJc3RydWN0IHJlc291cmNlIHJlYWxpbzsKQEAgLTYyMiw2ICs2MjIsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IHBjaWUtPm5wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBtdmVidV9wY2llX3BvcnQgKnBvcnQgPSAmcGNpZS0+cG9ydHNbaV07CisKIAkJaWYgKGJ1cy0+bnVtYmVyID09IDAgJiYgcG9ydC0+ZGV2Zm4gPT0gZGV2Zm4pCiAJCQlyZXR1cm4gcG9ydDsKIAkJaWYgKGJ1cy0+bnVtYmVyICE9IDAgJiYKQEAgLTc1MSw2ICs3NTIsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IHBjaWUtPm5wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBtdmVidV9wY2llX3BvcnQgKnBvcnQgPSAmcGNpZS0+cG9ydHNbaV07CisKIAkJaWYgKCFwb3J0LT5iYXNlKQogCQkJY29udGludWU7CiAJCW12ZWJ1X3BjaWVfc2V0dXBfaHcocG9ydCk7CkBAIC03NzQsMTIgKzc3Niw2IEBACiAJcmV0dXJuIGJ1czsKIH0KIAotc3RhdGljIHZvaWQgbXZlYnVfcGNpZV9hZGRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IG12ZWJ1X3BjaWUgKnBjaWUgPSBzeXNfdG9fcGNpZShidXMtPnN5c2RhdGEpOwotCWJ1cy0+bXNpID0gcGNpZS0+bXNpOwotfQotCiBzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IG12ZWJ1X3BjaWVfYWxpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkJCSBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCQkJCSByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCkBAIC04MTYsNiArODEyLDEwIEBACiAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAorI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaHcubXNpX2N0cmwgPSBwY2llLT5tc2k7CisjZW5kaWYKKwogCWh3Lm5yX2NvbnRyb2xsZXJzID0gMTsKIAlody5wcml2YXRlX2RhdGEgICA9ICh2b2lkICoqKSZwY2llOwogCWh3LnNldHVwICAgICAgICAgID0gbXZlYnVfcGNpZV9zZXR1cDsKQEAgLTgyMyw3ICs4MjMsNiBAQAogCWh3Lm1hcF9pcnEgICAgICAgID0gb2ZfaXJxX3BhcnNlX2FuZF9tYXBfcGNpOwogCWh3Lm9wcyAgICAgICAgICAgID0gJm12ZWJ1X3BjaWVfb3BzOwogCWh3LmFsaWduX3Jlc291cmNlID0gbXZlYnVfcGNpZV9hbGlnbl9yZXNvdXJjZTsKLQlody5hZGRfYnVzICAgICAgICA9IG12ZWJ1X3BjaWVfYWRkX2J1czsKIAogCXBjaV9jb21tb25faW5pdCgmaHcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktdGVncmEuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXRlZ3JhLmMKaW5kZXggM2Q0Mzg3NC4uZmVjY2ZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktdGVncmEuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS10ZWdyYS5jCkBAIC0yMzgsNyArMjM4LDcgQEAKIAkpCiAKIHN0cnVjdCB0ZWdyYV9tc2kgewotCXN0cnVjdCBtc2lfY2hpcCBjaGlwOworCXN0cnVjdCBtc2lfY29udHJvbGxlciBjaGlwOwogCURFQ0xBUkVfQklUTUFQKHVzZWQsIElOVF9QQ0lfTVNJX05SKTsKIAlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOwogCXVuc2lnbmVkIGxvbmcgcGFnZXM7CkBAIC0yNTksNyArMjU5LDcgQEAKIAlib29sIGhhc19nZW4yOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGVncmFfbXNpICp0b190ZWdyYV9tc2koc3RydWN0IG1zaV9jaGlwICpjaGlwKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGVncmFfbXNpICp0b190ZWdyYV9tc2koc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwKQogewogCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHRlZ3JhX21zaSwgY2hpcCk7CiB9CkBAIC0yNzYsNiArMjc2LDcgQEAKIAogCXN0cnVjdCByZXNvdXJjZSBhbGw7CiAJc3RydWN0IHJlc291cmNlIGlvOworCXN0cnVjdCByZXNvdXJjZSBwaW87CiAJc3RydWN0IHJlc291cmNlIG1lbTsKIAlzdHJ1Y3QgcmVzb3VyY2UgcHJlZmV0Y2g7CiAJc3RydWN0IHJlc291cmNlIGJ1c247CkBAIC02NTgsNyArNjU5LDYgQEAKIHsKIAlzdHJ1Y3QgdGVncmFfcGNpZSAqcGNpZSA9IHN5c190b19wY2llKHN5cyk7CiAJaW50IGVycjsKLQlwaHlzX2FkZHJfdCBpb19zdGFydDsKIAogCWVyciA9IGRldm1fcmVxdWVzdF9yZXNvdXJjZShwY2llLT5kZXYsICZwY2llLT5hbGwsICZwY2llLT5tZW0pOwogCWlmIChlcnIgPCAwKQpAQCAtNjY4LDE0ICs2NjgsMTIgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaW9fc3RhcnQgPSBwY2lfcGlvX3RvX2FkZHJlc3MocGNpZS0+aW8uc3RhcnQpOwotCiAJcGNpX2FkZF9yZXNvdXJjZV9vZmZzZXQoJnN5cy0+cmVzb3VyY2VzLCAmcGNpZS0+bWVtLCBzeXMtPm1lbV9vZmZzZXQpOwogCXBjaV9hZGRfcmVzb3VyY2Vfb2Zmc2V0KCZzeXMtPnJlc291cmNlcywgJnBjaWUtPnByZWZldGNoLAogCQkJCXN5cy0+bWVtX29mZnNldCk7CiAJcGNpX2FkZF9yZXNvdXJjZSgmc3lzLT5yZXNvdXJjZXMsICZwY2llLT5idXNuKTsKIAotCXBjaV9pb3JlbWFwX2lvKG5yICogU1pfNjRLLCBpb19zdGFydCk7CisJcGNpX2lvcmVtYXBfaW8ocGNpZS0+cGlvLnN0YXJ0LCBwY2llLT5pby5zdGFydCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTY5NCwxNSArNjkyLDYgQEAKIAlyZXR1cm4gaXJxOwogfQogCi1zdGF0aWMgdm9pZCB0ZWdyYV9wY2llX2FkZF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX01TSSkpIHsKLQkJc3RydWN0IHRlZ3JhX3BjaWUgKnBjaWUgPSBzeXNfdG9fcGNpZShidXMtPnN5c2RhdGEpOwotCi0JCWJ1cy0+bXNpID0gJnBjaWUtPm1zaS5jaGlwOwotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBwY2lfYnVzICp0ZWdyYV9wY2llX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQogewogCXN0cnVjdCB0ZWdyYV9wY2llICpwY2llID0gc3lzX3RvX3BjaWUoc3lzKTsKQEAgLTc4Niw3ICs3NzUsNiBAQAogc3RhdGljIHZvaWQgdGVncmFfcGNpZV9zZXR1cF90cmFuc2xhdGlvbnMoc3RydWN0IHRlZ3JhX3BjaWUgKnBjaWUpCiB7CiAJdTMyIGZwY2lfYmFyLCBzaXplLCBheGlfYWRkcmVzczsKLQlwaHlzX2FkZHJfdCBpb19zdGFydCA9IHBjaV9waW9fdG9fYWRkcmVzcyhwY2llLT5pby5zdGFydCk7CiAKIAkvKiBCYXIgMDogdHlwZSAxIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KIAlmcGNpX2JhciA9IDB4ZmUxMDAwMDA7CkBAIC03OTksNyArNzg3LDcgQEAKIAkvKiBCYXIgMTogZG93bnN0cmVhbSBJTyBiYXIgKi8KIAlmcGNpX2JhciA9IDB4ZmRmYzAwMDA7CiAJc2l6ZSA9IHJlc291cmNlX3NpemUoJnBjaWUtPmlvKTsKLQlheGlfYWRkcmVzcyA9IGlvX3N0YXJ0OworCWF4aV9hZGRyZXNzID0gcGNpZS0+aW8uc3RhcnQ7CiAJYWZpX3dyaXRlbChwY2llLCBheGlfYWRkcmVzcywgQUZJX0FYSV9CQVIxX1NUQVJUKTsKIAlhZmlfd3JpdGVsKHBjaWUsIHNpemUgPj4gMTIsIEFGSV9BWElfQkFSMV9TWik7CiAJYWZpX3dyaXRlbChwY2llLCBmcGNpX2JhciwgQUZJX0ZQQ0lfQkFSMSk7CkBAIC0xMjgzLDggKzEyNzEsOCBAQAogCXJldHVybiBwcm9jZXNzZWQgPiAwID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKIH0KIAotc3RhdGljIGludCB0ZWdyYV9tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkgICAgICAgc3RydWN0IG1zaV9kZXNjICpkZXNjKQorc3RhdGljIGludCB0ZWdyYV9tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwKKwkJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjKQogewogCXN0cnVjdCB0ZWdyYV9tc2kgKm1zaSA9IHRvX3RlZ3JhX21zaShjaGlwKTsKIAlzdHJ1Y3QgbXNpX21zZyBtc2c7CkBAIC0xMzA4LDEyICsxMjk2LDEzIEBACiAJbXNnLmFkZHJlc3NfaGkgPSAwOwogCW1zZy5kYXRhID0gaHdpcnE7CiAKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0ZWdyYV9tc2lfdGVhcmRvd25faXJxKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHRlZ3JhX21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAorCQkJCSAgIHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IHRlZ3JhX21zaSAqbXNpID0gdG9fdGVncmFfbXNpKGNoaXApOwogCXN0cnVjdCBpcnFfZGF0YSAqZCA9IGlycV9nZXRfaXJxX2RhdGEoaXJxKTsKQEAgLTEzMjUsMTAgKzEzMTQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0ZWdyYV9tc2lfaXJxX2NoaXAgPSB7CiAJLm5hbWUgPSAiVGVncmEgUENJZSBNU0kiLAotCS5pcnFfZW5hYmxlID0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9kaXNhYmxlID0gbWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAorCS5pcnFfZW5hYmxlID0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV9tYXNrID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKIH07CiAKIHN0YXRpYyBpbnQgdGVncmFfbXNpX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLApAQCAtMTY5MCw4ICsxNjc5LDIzIEBACiAKIAkJc3dpdGNoIChyZXMuZmxhZ3MgJiBJT1JFU09VUkNFX1RZUEVfQklUUykgewogCQljYXNlIElPUkVTT1VSQ0VfSU86Ci0JCQltZW1jcHkoJnBjaWUtPmlvLCAmcmVzLCBzaXplb2YocmVzKSk7Ci0JCQlwY2llLT5pby5uYW1lID0gbnAtPmZ1bGxfbmFtZTsKKwkJCW1lbWNweSgmcGNpZS0+cGlvLCAmcmVzLCBzaXplb2YocmVzKSk7CisJCQlwY2llLT5waW8ubmFtZSA9IG5wLT5mdWxsX25hbWU7CisKKwkJCS8qCisJCQkgKiBUaGUgVGVncmEgUENJZSBob3N0IGJyaWRnZSB1c2VzIHRoaXMgdG8gcHJvZ3JhbSB0aGUKKwkJCSAqIG1hcHBpbmcgb2YgdGhlIEkvTyBzcGFjZSB0byB0aGUgcGh5c2ljYWwgYWRkcmVzcywKKwkJCSAqIHNvIHdlIG92ZXJyaWRlIHRoZSAuc3RhcnQgYW5kIC5lbmQgZmllbGRzIGhlcmUgdGhhdAorCQkJICogb2ZfcGNpX3JhbmdlX3RvX3Jlc291cmNlKCkgY29udmVydGVkIHRvIEkvTyBzcGFjZS4KKwkJCSAqIFdlIGFsc28gc2V0IHRoZSBJT1JFU09VUkNFX01FTSB0eXBlIHRvIGNsYXJpZnkgdGhhdAorCQkJICogdGhlIHJlc291cmNlIGlzIGluIHRoZSBwaHlzaWNhbCBtZW1vcnkgc3BhY2UuCisJCQkgKi8KKwkJCXBjaWUtPmlvLnN0YXJ0ID0gcmFuZ2UuY3B1X2FkZHI7CisJCQlwY2llLT5pby5lbmQgPSByYW5nZS5jcHVfYWRkciArIHJhbmdlLnNpemUgLSAxOworCQkJcGNpZS0+aW8uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKwkJCXBjaWUtPmlvLm5hbWUgPSAiSS9PIjsKKworCQkJbWVtY3B5KCZyZXMsICZwY2llLT5pbywgc2l6ZW9mKHJlcykpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBJT1JFU09VUkNFX01FTToKQEAgLTE4ODEsMTEgKzE4ODUsMTQgQEAKIAogCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwogCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlody5tc2lfY3RybCA9ICZwY2llLT5tc2kuY2hpcDsKKyNlbmRpZgorCiAJaHcubnJfY29udHJvbGxlcnMgPSAxOwogCWh3LnByaXZhdGVfZGF0YSA9ICh2b2lkICoqKSZwY2llOwogCWh3LnNldHVwID0gdGVncmFfcGNpZV9zZXR1cDsKIAlody5tYXBfaXJxID0gdGVncmFfcGNpZV9tYXBfaXJxOwotCWh3LmFkZF9idXMgPSB0ZWdyYV9wY2llX2FkZF9idXM7CiAJaHcuc2NhbiA9IHRlZ3JhX3BjaWVfc2Nhbl9idXM7CiAJaHcub3BzID0gJnRlZ3JhX3BjaWVfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuYwppbmRleCBkZmVkMDBhLi5kZjc4MWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmMKQEAgLTE1MiwxMCArMTUyLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZHdfbXNpX2lycV9jaGlwID0gewogCS5uYW1lID0gIlBDSS1NU0kiLAotCS5pcnFfZW5hYmxlID0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9kaXNhYmxlID0gbWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAorCS5pcnFfZW5hYmxlID0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV9tYXNrID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKIH07CiAKIC8qIE1TSSBpbnQgaGFuZGxlciAqLwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKLXN0YXRpYyBpbnQgZHdfbXNpX3NldHVwX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorc3RhdGljIGludCBkd19tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCiB7CiAJaW50IGlycSwgcG9zOwpAQCAtMjk4LDEyICsyOTgsMTIgQEAKIAllbHNlCiAJCW1zZy5kYXRhID0gcG9zOwogCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHdfbXNpX3RlYXJkb3duX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBkd19tc2lfdGVhcmRvd25faXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwgdW5zaWduZWQgaW50IGlycSkKIHsKIAlzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKGlycSk7CiAJc3RydWN0IG1zaV9kZXNjICptc2kgPSBpcnFfZGF0YV9nZXRfbXNpKGRhdGEpOwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJY2xlYXJfaXJxX3JhbmdlKHBwLCBpcnEsIDEsIGRhdGEtPmh3aXJxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtc2lfY2hpcCBkd19wY2llX21zaV9jaGlwID0geworc3RhdGljIHN0cnVjdCBtc2lfY29udHJvbGxlciBkd19wY2llX21zaV9jaGlwID0gewogCS5zZXR1cF9pcnEgPSBkd19tc2lfc2V0dXBfaXJxLAogCS50ZWFyZG93bl9pcnEgPSBkd19tc2lfdGVhcmRvd25faXJxLAogfTsKQEAgLTM4MCw2ICszODAsNyBAQAogCS8qIEdldCB0aGUgSS9PIGFuZCBtZW1vcnkgcmFuZ2VzIGZyb20gRFQgKi8KIAlmb3JfZWFjaF9vZl9wY2lfcmFuZ2UoJnBhcnNlciwgJnJhbmdlKSB7CiAJCXVuc2lnbmVkIGxvbmcgcmVzdHlwZSA9IHJhbmdlLmZsYWdzICYgSU9SRVNPVVJDRV9UWVBFX0JJVFM7CisKIAkJaWYgKHJlc3R5cGUgPT0gSU9SRVNPVVJDRV9JTykgewogCQkJb2ZfcGNpX3JhbmdlX3RvX3Jlc291cmNlKCZyYW5nZSwgbnAsICZwcC0+aW8pOwogCQkJcHAtPmlvLm5hbWUgPSAiSS9PIjsKQEAgLTQ5OCw2ICs0OTksMTEgQEAKIAl2YWwgfD0gUE9SVF9MT0dJQ19TUEVFRF9DSEFOR0U7CiAJZHdfcGNpZV93cl9vd25fY29uZihwcCwgUENJRV9MSU5LX1dJRFRIX1NQRUVEX0NPTlRST0wsIDQsIHZhbCk7CiAKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWR3X3BjaWVfbXNpX2NoaXAuZGV2ID0gcHAtPmRldjsKKwlkd19wY2kubXNpX2N0cmwgPSAmZHdfcGNpZV9tc2lfY2hpcDsKKyNlbmRpZgorCiAJZHdfcGNpLm5yX2NvbnRyb2xsZXJzID0gMTsKIAlkd19wY2kucHJpdmF0ZV9kYXRhID0gKHZvaWQgKiopJnBwOwogCkBAIC03NDcsMjEgKzc1MywxMCBAQAogCXJldHVybiBpcnE7CiB9CiAKLXN0YXRpYyB2b2lkIGR3X3BjaWVfYWRkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCWlmIChJU19FTkFCTEVEKENPTkZJR19QQ0lfTVNJKSkgewotCQlzdHJ1Y3QgcGNpZV9wb3J0ICpwcCA9IHN5c190b19wY2llKGJ1cy0+c3lzZGF0YSk7Ci0KLQkJZHdfcGNpZV9tc2lfY2hpcC5kZXYgPSBwcC0+ZGV2OwotCQlidXMtPm1zaSA9ICZkd19wY2llX21zaV9jaGlwOwotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBod19wY2kgZHdfcGNpID0gewogCS5zZXR1cAkJPSBkd19wY2llX3NldHVwLAogCS5zY2FuCQk9IGR3X3BjaWVfc2Nhbl9idXMsCiAJLm1hcF9pcnEJPSBkd19wY2llX21hcF9pcnEsCi0JLmFkZF9idXMJPSBkd19wY2llX2FkZF9idXMsCiB9OwogCiB2b2lkIGR3X3BjaWVfc2V0dXBfcmMoc3RydWN0IHBjaWVfcG9ydCAqcHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5oIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuaAppbmRleCBjNjI1Njc1Li5kMGJiZDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5oCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmgKQEAgLTczLDcgKzczLDcgQEAKIAl1MzIgKCpnZXRfbXNpX2FkZHIpKHN0cnVjdCBwY2llX3BvcnQgKnBwKTsKIAl1MzIgKCpnZXRfbXNpX2RhdGEpKHN0cnVjdCBwY2llX3BvcnQgKnBwLCBpbnQgcG9zKTsKIAl2b2lkICgqc2Nhbl9idXMpKHN0cnVjdCBwY2llX3BvcnQgKnBwKTsKLQlpbnQgKCptc2lfaG9zdF9pbml0KShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwgc3RydWN0IG1zaV9jaGlwICpjaGlwKTsKKwlpbnQgKCptc2lfaG9zdF9pbml0KShzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwgc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwKTsKIH07CiAKIGludCBkd19wY2llX2NmZ19yZWFkKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXJjYXIuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1yY2FyLmMKaW5kZXggNjExNThlMC4uNTUxOWU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXJjYXIuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtcmNhci5jCkBAIC0xMTEsMTQgKzExMSwxNCBAQAogc3RydWN0IHJjYXJfbXNpIHsKIAlERUNMQVJFX0JJVE1BUCh1c2VkLCBJTlRfUENJX01TSV9OUik7CiAJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKLQlzdHJ1Y3QgbXNpX2NoaXAgY2hpcDsKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgY2hpcDsKIAl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCXN0cnVjdCBtdXRleCBsb2NrOwogCWludCBpcnExOwogCWludCBpcnEyOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmNhcl9tc2kgKnRvX3JjYXJfbXNpKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJjYXJfbXNpICp0b19yY2FyX21zaShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcmNhcl9tc2ksIGNoaXApOwogfQpAQCAtMzgwLDIwICszODAsMTAgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgcmNhcl9wY2llX2FkZF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUENJX01TSSkpIHsKLQkJc3RydWN0IHJjYXJfcGNpZSAqcGNpZSA9IHN5c190b19wY2llKGJ1cy0+c3lzZGF0YSk7Ci0KLQkJYnVzLT5tc2kgPSAmcGNpZS0+bXNpLmNoaXA7Ci0JfQotfQotCi1zdHJ1Y3QgaHdfcGNpIHJjYXJfcGNpID0geworc3RhdGljIHN0cnVjdCBod19wY2kgcmNhcl9wY2kgPSB7CiAJLnNldHVwICAgICAgICAgID0gcmNhcl9wY2llX3NldHVwLAogCS5tYXBfaXJxICAgICAgICA9IG9mX2lycV9wYXJzZV9hbmRfbWFwX3BjaSwKIAkub3BzICAgICAgICAgICAgPSAmcmNhcl9wY2llX29wcywKLQkuYWRkX2J1cyAgICAgICAgPSByY2FyX3BjaWVfYWRkX2J1cywKIH07CiAKIHN0YXRpYyB2b2lkIHJjYXJfcGNpZV9lbmFibGUoc3RydWN0IHJjYXJfcGNpZSAqcGNpZSkKQEAgLTQwMiw2ICszOTIsOSBAQAogCiAJcmNhcl9wY2kubnJfY29udHJvbGxlcnMgPSAxOwogCXJjYXJfcGNpLnByaXZhdGVfZGF0YSA9ICh2b2lkICoqKSZwY2llOworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJcmNhcl9wY2kubXNpX2N0cmwgPSAmcGNpZS0+bXNpLmNoaXA7CisjZW5kaWYKIAogCXBjaV9jb21tb25faW5pdF9kZXYoJnBkZXYtPmRldiwgJnJjYXJfcGNpKTsKICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKQEAgLTYyMiw3ICs2MTUsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCByY2FyX21zaV9zZXR1cF9pcnEoc3RydWN0IG1zaV9jaGlwICpjaGlwLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKK3N0YXRpYyBpbnQgcmNhcl9tc2lfc2V0dXBfaXJxKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkgICAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IHJjYXJfbXNpICptc2kgPSB0b19yY2FyX21zaShjaGlwKTsKQEAgLTY0NywxMiArNjQwLDEyIEBACiAJbXNnLmFkZHJlc3NfaGkgPSByY2FyX3BjaV9yZWFkX3JlZyhwY2llLCBQQ0lFTVNJQVVSKTsKIAltc2cuZGF0YSA9IGh3aXJxOwogCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXBjaV93cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmNhcl9tc2lfdGVhcmRvd25faXJxKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHJjYXJfbXNpX3RlYXJkb3duX2lycShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IHJjYXJfbXNpICptc2kgPSB0b19yY2FyX21zaShjaGlwKTsKIAlzdHJ1Y3QgaXJxX2RhdGEgKmQgPSBpcnFfZ2V0X2lycV9kYXRhKGlycSk7CkBAIC02NjIsMTAgKzY1NSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHJjYXJfbXNpX2lycV9jaGlwID0gewogCS5uYW1lID0gIlItQ2FyIFBDSWUgTVNJIiwKLQkuaXJxX2VuYWJsZSA9IHVubWFza19tc2lfaXJxLAotCS5pcnFfZGlzYWJsZSA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX21hc2sgPSBtYXNrX21zaV9pcnEsCi0JLmlycV91bm1hc2sgPSB1bm1hc2tfbXNpX2lycSwKKwkuaXJxX2VuYWJsZSA9IHBjaV9tc2lfdW5tYXNrX2lycSwKKwkuaXJxX2Rpc2FibGUgPSBwY2lfbXNpX21hc2tfaXJxLAorCS5pcnFfbWFzayA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBwY2lfbXNpX3VubWFza19pcnEsCiB9OwogCiBzdGF0aWMgaW50IHJjYXJfbXNpX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXNwZWFyMTN4eC5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLXNwZWFyMTN4eC5jCmluZGV4IDg1ZjU5NGUuLjJjYTEwY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1zcGVhcjEzeHguYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtc3BlYXIxM3h4LmMKQEAgLTI2OSw3ICsyNjksOCBAQAogCS5ob3N0X2luaXQgPSBzcGVhcjEzeHhfcGNpZV9ob3N0X2luaXQsCiB9OwogCi1zdGF0aWMgaW50IGFkZF9wY2llX3BvcnQoc3RydWN0IHBjaWVfcG9ydCAqcHAsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9faW5pdCBzcGVhcjEzeHhfYWRkX3BjaWVfcG9ydChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwKKwkJCQkJIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlpbnQgcmV0OwpAQCAtMzA4LDEwICszMDksOCBAQAogCWludCByZXQ7CiAKIAlzcGVhcjEzeHhfcGNpZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqc3BlYXIxM3h4X3BjaWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwZWFyMTN4eF9wY2llKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gbWVtb3J5IGZvciBTUEVBcjEzeHggcGNpZVxuIik7CisJaWYgKCFzcGVhcjEzeHhfcGNpZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJc3BlYXIxM3h4X3BjaWUtPnBoeSA9IGRldm1fcGh5X2dldChkZXYsICJwY2llLXBoeSIpOwogCWlmIChJU19FUlIoc3BlYXIxM3h4X3BjaWUtPnBoeSkpIHsKQEAgLTM1Miw3ICszNTEsNyBAQAogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJzdCxwY2llLWlzLWdlbjEiKSkKIAkJc3BlYXIxM3h4X3BjaWUtPmlzX2dlbjEgPSB0cnVlOwogCi0JcmV0ID0gYWRkX3BjaWVfcG9ydChwcCwgcGRldik7CisJcmV0ID0gc3BlYXIxM3h4X2FkZF9wY2llX3BvcnQocHAsIHBkZXYpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGZhaWxfY2xrOwogCkBAIC0zODIsMTEgKzM4MSwxMSBAQAogCiAvKiBTUEVBcjEzeHggUENJZSBkcml2ZXIgZG9lcyBub3QgYWxsb3cgbW9kdWxlIHVubG9hZCAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBwY2llX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNwZWFyMTN4eF9wY2llX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzcGVhcjEzeHhfcGNpZV9kcml2ZXIpOwogfQotbW9kdWxlX2luaXQocGNpZV9pbml0KTsKK21vZHVsZV9pbml0KHNwZWFyMTN4eF9wY2llX2luaXQpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNUIE1pY3JvZWxlY3Ryb25pY3MgU1BFQXIxM3h4IFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiUHJhdHl1c2ggQW5hbmQgPHByYXR5dXNoLmFuYW5kQHN0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS14aWxpbnguYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS14aWxpbnguYwppbmRleCBjY2M0OTZiLi4yZjUwZmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUteGlsaW54LmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLXhpbGlueC5jCkBAIC0zMzUsNyArMzM1LDggQEAKICAqIEBjaGlwOiBNU0kgQ2hpcCBkZXNjcmlwdG9yCiAgKiBAaXJxOiBNU0kgSVJRIHRvIGRlc3Ryb3kKICAqLwotc3RhdGljIHZvaWQgeGlsaW54X21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgeGlsaW54X21zaV90ZWFyZG93bl9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgaXJxKQogewogCXhpbGlueF9wY2llX2Rlc3Ryb3lfbXNpKGlycSk7CiB9CkBAIC0zNDgsNyArMzQ5LDcgQEAKICAqCiAgKiBSZXR1cm46ICcwJyBvbiBzdWNjZXNzIGFuZCBlcnJvciB2YWx1ZSBvbiBmYWlsdXJlCiAgKi8KLXN0YXRpYyBpbnQgeGlsaW54X3BjaWVfbXNpX3NldHVwX2lycShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAsCitzdGF0aWMgaW50IHhpbGlueF9wY2llX21zaV9zZXR1cF9pcnEoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLAogCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCiB7CkBAIC0zNzQsMTMgKzM3NSwxMyBAQAogCW1zZy5hZGRyZXNzX2xvID0gbXNnX2FkZHI7CiAJbXNnLmRhdGEgPSBpcnE7CiAKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAogCXJldHVybiAwOwogfQogCiAvKiBNU0kgQ2hpcCBEZXNjcmlwdG9yICovCi1zdGF0aWMgc3RydWN0IG1zaV9jaGlwIHhpbGlueF9wY2llX21zaV9jaGlwID0geworc3RhdGljIHN0cnVjdCBtc2lfY29udHJvbGxlciB4aWxpbnhfcGNpZV9tc2lfY2hpcCA9IHsKIAkuc2V0dXBfaXJxID0geGlsaW54X3BjaWVfbXNpX3NldHVwX2lycSwKIAkudGVhcmRvd25faXJxID0geGlsaW54X21zaV90ZWFyZG93bl9pcnEsCiB9OwpAQCAtMzg4LDEwICszODksMTAgQEAKIC8qIEhXIEludGVycnVwdCBDaGlwIERlc2NyaXB0b3IgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeGlsaW54X21zaV9pcnFfY2hpcCA9IHsKIAkubmFtZSA9ICJYaWxpbnggUENJZSBNU0kiLAotCS5pcnFfZW5hYmxlID0gdW5tYXNrX21zaV9pcnEsCi0JLmlycV9kaXNhYmxlID0gbWFza19tc2lfaXJxLAotCS5pcnFfbWFzayA9IG1hc2tfbXNpX2lycSwKLQkuaXJxX3VubWFzayA9IHVubWFza19tc2lfaXJxLAorCS5pcnFfZW5hYmxlID0gcGNpX21zaV91bm1hc2tfaXJxLAorCS5pcnFfZGlzYWJsZSA9IHBjaV9tc2lfbWFza19pcnEsCisJLmlycV9tYXNrID0gcGNpX21zaV9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IHBjaV9tc2lfdW5tYXNrX2lycSwKIH07CiAKIC8qKgpAQCAtNDMxLDIwICs0MzIsNiBAQAogCXBjaWVfd3JpdGUocG9ydCwgbXNnX2FkZHIsIFhJTElOWF9QQ0lFX1JFR19NU0lCQVNFMik7CiB9CiAKLS8qKgotICogeGlsaW54X3BjaWVfYWRkX2J1cyAtIEFkZCBNU0kgY2hpcCBpbmZvIHRvIFBDSWUgYnVzCi0gKiBAYnVzOiBQQ0llIGJ1cwotICovCi1zdGF0aWMgdm9pZCB4aWxpbnhfcGNpZV9hZGRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1BDSV9NU0kpKSB7Ci0JCXN0cnVjdCB4aWxpbnhfcGNpZV9wb3J0ICpwb3J0ID0gc3lzX3RvX3BjaWUoYnVzLT5zeXNkYXRhKTsKLQotCQl4aWxpbnhfcGNpZV9tc2lfY2hpcC5kZXYgPSBwb3J0LT5kZXY7Ci0JCWJ1cy0+bXNpID0gJnhpbGlueF9wY2llX21zaV9jaGlwOwotCX0KLX0KLQogLyogSU5UeCBGdW5jdGlvbnMgKi8KIAogLyoqCkBAIC05MjQsMTAgKzkxMSwxNCBAQAogCQkucHJpdmF0ZV9kYXRhCT0gKHZvaWQgKiopJnBvcnQsCiAJCS5zZXR1cAkJPSB4aWxpbnhfcGNpZV9zZXR1cCwKIAkJLm1hcF9pcnEJPSBvZl9pcnFfcGFyc2VfYW5kX21hcF9wY2ksCi0JCS5hZGRfYnVzCT0geGlsaW54X3BjaWVfYWRkX2J1cywKIAkJLnNjYW4JCT0geGlsaW54X3BjaWVfc2Nhbl9idXMsCiAJCS5vcHMJCT0gJnhpbGlueF9wY2llX29wcywKIAl9OworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwl4aWxpbnhfcGNpZV9tc2lfY2hpcC5kZXYgPSBwb3J0LT5kZXY7CisJaHcubXNpX2N0cmwgPSAmeGlsaW54X3BjaWVfbXNpX2NoaXA7CisjZW5kaWYKIAlwY2lfY29tbW9uX2luaXRfZGV2KGRldiwgJmh3KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcmVzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9yZXMuYwppbmRleCAyMTliYTgwLi5mMjc5MDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9yZXMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9yZXMuYwpAQCAtMzc2LDEwICszNzYsNyBAQAogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CiAJfQotCXJjID0gb25jZV9vdmVyICgpOyAgLyogVGhpcyBpcyB0byBhbGlnbiByYW5nZXMgKHNvIG5vIC0xKSAqLwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCXJldHVybiAwOworCXJldHVybiBvbmNlX292ZXIgKCk7CS8qIFRoaXMgaXMgdG8gYWxpZ24gcmFuZ2VzIChzbyBubyAtMSkgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pb3YuYyBiL2RyaXZlcnMvcGNpL2lvdi5jCmluZGV4IDRkMTA5YzAuLjRiM2E0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2lvdi5jCisrKyBiL2RyaXZlcnMvcGNpL2lvdi5jCkBAIC00NzksMjAgKzQ3OSwxNiBAQAogICogcGNpX2lvdl9yZXNvdXJjZV9iYXIgLSBnZXQgcG9zaXRpb24gb2YgdGhlIFNSLUlPViBCQVIKICAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlCiAgKiBAcmVzbm86IHRoZSByZXNvdXJjZSBudW1iZXIKLSAqIEB0eXBlOiB0aGUgQkFSIHR5cGUgdG8gYmUgZmlsbGVkIGluCiAgKgogICogUmV0dXJucyBwb3NpdGlvbiBvZiB0aGUgQkFSIGVuY2Fwc3VsYXRlZCBpbiB0aGUgU1ItSU9WIGNhcGFiaWxpdHkuCiAgKi8KLWludCBwY2lfaW92X3Jlc291cmNlX2JhcihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8sCi0JCQkgZW51bSBwY2lfYmFyX3R5cGUgKnR5cGUpCitpbnQgcGNpX2lvdl9yZXNvdXJjZV9iYXIoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKQogewogCWlmIChyZXNubyA8IFBDSV9JT1ZfUkVTT1VSQ0VTIHx8IHJlc25vID4gUENJX0lPVl9SRVNPVVJDRV9FTkQpCiAJCXJldHVybiAwOwogCiAJQlVHX09OKCFkZXYtPmlzX3BoeXNmbik7CiAKLQkqdHlwZSA9IHBjaV9iYXJfdW5rbm93bjsKLQogCXJldHVybiBkZXYtPnNyaW92LT5wb3MgKyBQQ0lfU1JJT1ZfQkFSICsKIAkJNCAqIChyZXNubyAtIFBDSV9JT1ZfUkVTT1VSQ0VTKTsKIH0KQEAgLTUxMCwxMyArNTA2LDEyIEBACiByZXNvdXJjZV9zaXplX3QgcGNpX3NyaW92X3Jlc291cmNlX2FsaWdubWVudChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pCiB7CiAJc3RydWN0IHJlc291cmNlIHRtcDsKLQllbnVtIHBjaV9iYXJfdHlwZSB0eXBlOwotCWludCByZWcgPSBwY2lfaW92X3Jlc291cmNlX2JhcihkZXYsIHJlc25vLCAmdHlwZSk7CisJaW50IHJlZyA9IHBjaV9pb3ZfcmVzb3VyY2VfYmFyKGRldiwgcmVzbm8pOwogCiAJaWYgKCFyZWcpCiAJCXJldHVybiAwOwogCi0JIF9fcGNpX3JlYWRfYmFzZShkZXYsIHR5cGUsICZ0bXAsIHJlZyk7CisJIF9fcGNpX3JlYWRfYmFzZShkZXYsIHBjaV9iYXJfdW5rbm93biwgJnRtcCwgcmVnKTsKIAlyZXR1cm4gcmVzb3VyY2VfYWxpZ25tZW50KCZ0bXApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IDA4NDU4N2QuLmZkNjA4MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC0xOSwxOSArMTksODIgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgogCiAjaW5jbHVkZSAicGNpLmgiCiAKIHN0YXRpYyBpbnQgcGNpX21zaV9lbmFibGUgPSAxOworaW50IHBjaV9tc2lfaWdub3JlX21hc2s7CiAKICNkZWZpbmUgbXNpeF90YWJsZV9zaXplKGZsYWdzKQkoKGZsYWdzICYgUENJX01TSVhfRkxBR1NfUVNJWkUpICsgMSkKIAorI2lmZGVmIENPTkZJR19QQ0lfTVNJX0lSUV9ET01BSU4KK3N0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbiAqcGNpX21zaV9kZWZhdWx0X2RvbWFpbjsKK3N0YXRpYyBERUZJTkVfTVVURVgocGNpX21zaV9kb21haW5fbG9jayk7CisKK3N0cnVjdCBpcnFfZG9tYWluICogX193ZWFrIGFyY2hfZ2V0X3BjaV9tc2lfZG9tYWluKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIHBjaV9tc2lfZGVmYXVsdF9kb21haW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbiAqcGNpX21zaV9nZXRfZG9tYWluKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiA9IE5VTEw7CisKKwlpZiAoZGV2LT5idXMtPm1zaSkKKwkJZG9tYWluID0gZGV2LT5idXMtPm1zaS0+ZG9tYWluOworCWlmICghZG9tYWluKQorCQlkb21haW4gPSBhcmNoX2dldF9wY2lfbXNpX2RvbWFpbihkZXYpOworCisJcmV0dXJuIGRvbWFpbjsKK30KKworc3RhdGljIGludCBwY2lfbXNpX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOworCisJZG9tYWluID0gcGNpX21zaV9nZXRfZG9tYWluKGRldik7CisJaWYgKGRvbWFpbikKKwkJcmV0dXJuIHBjaV9tc2lfZG9tYWluX2FsbG9jX2lycXMoZG9tYWluLCBkZXYsIG52ZWMsIHR5cGUpOworCisJcmV0dXJuIGFyY2hfc2V0dXBfbXNpX2lycXMoZGV2LCBudmVjLCB0eXBlKTsKK30KKworc3RhdGljIHZvaWQgcGNpX21zaV90ZWFyZG93bl9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CisKKwlkb21haW4gPSBwY2lfbXNpX2dldF9kb21haW4oZGV2KTsKKwlpZiAoZG9tYWluKQorCQlwY2lfbXNpX2RvbWFpbl9mcmVlX2lycXMoZG9tYWluLCBkZXYpOworCWVsc2UKKwkJYXJjaF90ZWFyZG93bl9tc2lfaXJxcyhkZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgcGNpX21zaV9zZXR1cF9tc2lfaXJxcwkJYXJjaF9zZXR1cF9tc2lfaXJxcworI2RlZmluZSBwY2lfbXNpX3RlYXJkb3duX21zaV9pcnFzCWFyY2hfdGVhcmRvd25fbXNpX2lycXMKKyNlbmRpZgogCiAvKiBBcmNoIGhvb2tzICovCiAKK3N0cnVjdCBtc2lfY29udHJvbGxlciAqIF9fd2VhayBwY2liaW9zX21zaV9jb250cm9sbGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKnBjaV9tc2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBtc2lfY29udHJvbGxlciAqbXNpX2N0cmwgPSBkZXYtPmJ1cy0+bXNpOworCisJaWYgKG1zaV9jdHJsKQorCQlyZXR1cm4gbXNpX2N0cmw7CisKKwlyZXR1cm4gcGNpYmlvc19tc2lfY29udHJvbGxlcihkZXYpOworfQorCiBpbnQgX193ZWFrIGFyY2hfc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IG1zaV9jaGlwICpjaGlwID0gZGV2LT5idXMtPm1zaTsKKwlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXAgPSBwY2lfbXNpX2NvbnRyb2xsZXIoZGV2KTsKIAlpbnQgZXJyOwogCiAJaWYgKCFjaGlwIHx8ICFjaGlwLT5zZXR1cF9pcnEpCkBAIC00OCw3ICsxMTEsNyBAQAogCiB2b2lkIF9fd2VhayBhcmNoX3RlYXJkb3duX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgbXNpX2NoaXAgKmNoaXAgPSBpcnFfZ2V0X2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCA9IGlycV9nZXRfY2hpcF9kYXRhKGlycSk7CiAKIAlpZiAoIWNoaXAgfHwgIWNoaXAtPnRlYXJkb3duX2lycSkKIAkJcmV0dXJuOwpAQCAtODUsMTkgKzE0OCwxMyBAQAogICovCiB2b2lkIGRlZmF1bHRfdGVhcmRvd25fbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKKwlpbnQgaTsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJaW50IGksIG52ZWM7Ci0JCWlmIChlbnRyeS0+aXJxID09IDApCi0JCQljb250aW51ZTsKLQkJaWYgKGVudHJ5LT5udmVjX3VzZWQpCi0JCQludmVjID0gZW50cnktPm52ZWNfdXNlZDsKLQkJZWxzZQotCQkJbnZlYyA9IDEgPDwgZW50cnktPm1zaV9hdHRyaWIubXVsdGlwbGU7Ci0JCWZvciAoaSA9IDA7IGkgPCBudmVjOyBpKyspCi0JCQlhcmNoX3RlYXJkb3duX21zaV9pcnEoZW50cnktPmlycSArIGkpOwotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkKKwkJaWYgKGVudHJ5LT5pcnEpCisJCQlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm52ZWNfdXNlZDsgaSsrKQorCQkJCWFyY2hfdGVhcmRvd25fbXNpX2lycShlbnRyeS0+aXJxICsgaSk7CiB9CiAKIHZvaWQgX193ZWFrIGFyY2hfdGVhcmRvd25fbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldikKQEAgLTEyMCw3ICsxNzcsNyBAQAogCX0KIAogCWlmIChlbnRyeSkKLQkJX193cml0ZV9tc2lfbXNnKGVudHJ5LCAmZW50cnktPm1zZyk7CisJCV9fcGNpX3dyaXRlX21zaV9tc2coZW50cnksICZlbnRyeS0+bXNnKTsKIH0KIAogdm9pZCBfX3dlYWsgYXJjaF9yZXN0b3JlX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0xNjMsMTEgKzIyMCwxMSBAQAogICogcmVsaWFibHkgYXMgZGV2aWNlcyB3aXRob3V0IGFuIElOVHggZGlzYWJsZSBiaXQgd2lsbCB0aGVuIGdlbmVyYXRlIGEKICAqIGxldmVsIElSUSB3aGljaCB3aWxsIG5ldmVyIGJlIGNsZWFyZWQuCiAgKi8KLXUzMiBkZWZhdWx0X21zaV9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZykKK3UzMiBfX3BjaV9tc2lfZGVzY19tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZykKIHsKIAl1MzIgbWFza19iaXRzID0gZGVzYy0+bWFza2VkOwogCi0JaWYgKCFkZXNjLT5tc2lfYXR0cmliLm1hc2tiaXQpCisJaWYgKHBjaV9tc2lfaWdub3JlX21hc2sgfHwgIWRlc2MtPm1zaV9hdHRyaWIubWFza2JpdCkKIAkJcmV0dXJuIDA7CiAKIAltYXNrX2JpdHMgJj0gfm1hc2s7CkBAIC0xNzcsMTQgKzIzNCw5IEBACiAJcmV0dXJuIG1hc2tfYml0czsKIH0KIAotX193ZWFrIHUzMiBhcmNoX21zaV9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZykKLXsKLQlyZXR1cm4gZGVmYXVsdF9tc2lfbWFza19pcnEoZGVzYywgbWFzaywgZmxhZyk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1zaV9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZykKIHsKLQlkZXNjLT5tYXNrZWQgPSBhcmNoX21zaV9tYXNrX2lycShkZXNjLCBtYXNrLCBmbGFnKTsKKwlkZXNjLT5tYXNrZWQgPSBfX3BjaV9tc2lfZGVzY19tYXNrX2lycShkZXNjLCBtYXNrLCBmbGFnKTsKIH0KIAogLyoKQEAgLTE5NCwxMSArMjQ2LDE1IEBACiAgKiBmaWxlLiAgVGhpcyBzYXZlcyBhIGZldyBtaWxsaXNlY29uZHMgd2hlbiBpbml0aWFsaXNpbmcgZGV2aWNlcyB3aXRoIGxvdHMKICAqIG9mIE1TSS1YIGludGVycnVwdHMuCiAgKi8KLXUzMiBkZWZhdWx0X21zaXhfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgZmxhZykKK3UzMiBfX3BjaV9tc2l4X2Rlc2NfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgZmxhZykKIHsKIAl1MzIgbWFza19iaXRzID0gZGVzYy0+bWFza2VkOwogCXVuc2lnbmVkIG9mZnNldCA9IGRlc2MtPm1zaV9hdHRyaWIuZW50cnlfbnIgKiBQQ0lfTVNJWF9FTlRSWV9TSVpFICsKIAkJCQkJCVBDSV9NU0lYX0VOVFJZX1ZFQ1RPUl9DVFJMOworCisJaWYgKHBjaV9tc2lfaWdub3JlX21hc2spCisJCXJldHVybiAwOworCiAJbWFza19iaXRzICY9IH5QQ0lfTVNJWF9FTlRSWV9DVFJMX01BU0tCSVQ7CiAJaWYgKGZsYWcpCiAJCW1hc2tfYml0cyB8PSBQQ0lfTVNJWF9FTlRSWV9DVFJMX01BU0tCSVQ7CkBAIC0yMDcsMTQgKzI2Myw5IEBACiAJcmV0dXJuIG1hc2tfYml0czsKIH0KIAotX193ZWFrIHUzMiBhcmNoX21zaXhfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgZmxhZykKLXsKLQlyZXR1cm4gZGVmYXVsdF9tc2l4X21hc2tfaXJxKGRlc2MsIGZsYWcpOwotfQotCiBzdGF0aWMgdm9pZCBtc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCiB7Ci0JZGVzYy0+bWFza2VkID0gYXJjaF9tc2l4X21hc2tfaXJxKGRlc2MsIGZsYWcpOworCWRlc2MtPm1hc2tlZCA9IF9fcGNpX21zaXhfZGVzY19tYXNrX2lycShkZXNjLCBmbGFnKTsKIH0KIAogc3RhdGljIHZvaWQgbXNpX3NldF9tYXNrX2JpdChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHUzMiBmbGFnKQpAQCAtMjMwLDEyICsyODEsMjAgQEAKIAl9CiB9CiAKLXZvaWQgbWFza19tc2lfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKKy8qKgorICogcGNpX21zaV9tYXNrX2lycSAtIEdlbmVyaWMgaXJxIGNoaXAgY2FsbGJhY2sgdG8gbWFzayBQQ0kvTVNJIGludGVycnVwdHMKKyAqIEBkYXRhOglwb2ludGVyIHRvIGlycWRhdGEgYXNzb2NpYXRlZCB0byB0aGF0IGludGVycnVwdAorICovCit2b2lkIHBjaV9tc2lfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewogCW1zaV9zZXRfbWFza19iaXQoZGF0YSwgMSk7CiB9CiAKLXZvaWQgdW5tYXNrX21zaV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQorLyoqCisgKiBwY2lfbXNpX3VubWFza19pcnEgLSBHZW5lcmljIGlycSBjaGlwIGNhbGxiYWNrIHRvIHVubWFzayBQQ0kvTVNJIGludGVycnVwdHMKKyAqIEBkYXRhOglwb2ludGVyIHRvIGlycWRhdGEgYXNzb2NpYXRlZCB0byB0aGF0IGludGVycnVwdAorICovCit2b2lkIHBjaV9tc2lfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CiAJbXNpX3NldF9tYXNrX2JpdChkYXRhLCAwKTsKIH0KQEAgLTI0NCwxMiArMzAzLDExIEBACiB7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpCiAJCWRlZmF1bHRfcmVzdG9yZV9tc2lfaXJxKGRldiwgZW50cnktPmlycSk7Ci0JfQogfQogCi12b2lkIF9fcmVhZF9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpCit2b2lkIF9fcGNpX3JlYWRfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQogewogCUJVR19PTihlbnRyeS0+ZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMCk7CiAKQEAgLTI3OSwzMiArMzM3LDcgQEAKIAl9CiB9CiAKLXZvaWQgcmVhZF9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCi17Ci0Jc3RydWN0IG1zaV9kZXNjICplbnRyeSA9IGlycV9nZXRfbXNpX2Rlc2MoaXJxKTsKLQotCV9fcmVhZF9tc2lfbXNnKGVudHJ5LCBtc2cpOwotfQotCi12b2lkIF9fZ2V0X2NhY2hlZF9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpCi17Ci0JLyogQXNzZXJ0IHRoYXQgdGhlIGNhY2hlIGlzIHZhbGlkLCBhc3N1bWluZyB0aGF0Ci0JICogdmFsaWQgbWVzc2FnZXMgYXJlIG5vdCBhbGwtemVyb2VzLiAqLwotCUJVR19PTighKGVudHJ5LT5tc2cuYWRkcmVzc19oaSB8IGVudHJ5LT5tc2cuYWRkcmVzc19sbyB8Ci0JCSBlbnRyeS0+bXNnLmRhdGEpKTsKLQotCSptc2cgPSBlbnRyeS0+bXNnOwotfQotCi12b2lkIGdldF9jYWNoZWRfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBpcnFfZ2V0X21zaV9kZXNjKGlycSk7Ci0KLQlfX2dldF9jYWNoZWRfbXNpX21zZyhlbnRyeSwgbXNnKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGdldF9jYWNoZWRfbXNpX21zZyk7Ci0KLXZvaWQgX193cml0ZV9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpCit2b2lkIF9fcGNpX3dyaXRlX21zaV9tc2coc3RydWN0IG1zaV9kZXNjICplbnRyeSwgc3RydWN0IG1zaV9tc2cgKm1zZykKIHsKIAlpZiAoZW50cnktPmRldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApIHsKIAkJLyogRG9uJ3QgdG91Y2ggdGhlIGhhcmR3YXJlIG5vdyAqLwpAQCAtMzQxLDM0ICszNzQsMjcgQEAKIAllbnRyeS0+bXNnID0gKm1zZzsKIH0KIAotdm9pZCB3cml0ZV9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit2b2lkIHBjaV93cml0ZV9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCiB7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeSA9IGlycV9nZXRfbXNpX2Rlc2MoaXJxKTsKIAotCV9fd3JpdGVfbXNpX21zZyhlbnRyeSwgbXNnKTsKKwlfX3BjaV93cml0ZV9tc2lfbXNnKGVudHJ5LCBtc2cpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwod3JpdGVfbXNpX21zZyk7CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfd3JpdGVfbXNpX21zZyk7CiAKIHN0YXRpYyB2b2lkIGZyZWVfbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCAqdG1wOwogCXN0cnVjdCBhdHRyaWJ1dGUgKiptc2lfYXR0cnM7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldl9hdHRyOwotCWludCBjb3VudCA9IDA7CisJaW50IGksIGNvdW50ID0gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWludCBpLCBudmVjOwotCQlpZiAoIWVudHJ5LT5pcnEpCi0JCQljb250aW51ZTsKLQkJaWYgKGVudHJ5LT5udmVjX3VzZWQpCi0JCQludmVjID0gZW50cnktPm52ZWNfdXNlZDsKLQkJZWxzZQotCQkJbnZlYyA9IDEgPDwgZW50cnktPm1zaV9hdHRyaWIubXVsdGlwbGU7Ci0JCWZvciAoaSA9IDA7IGkgPCBudmVjOyBpKyspCi0JCQlCVUdfT04oaXJxX2hhc19hY3Rpb24oZW50cnktPmlycSArIGkpKTsKLQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpCisJCWlmIChlbnRyeS0+aXJxKQorCQkJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udmVjX3VzZWQ7IGkrKykKKwkJCQlCVUdfT04oaXJxX2hhc19hY3Rpb24oZW50cnktPmlycSArIGkpKTsKIAotCWFyY2hfdGVhcmRvd25fbXNpX2lycXMoZGV2KTsKKwlwY2lfbXNpX3RlYXJkb3duX21zaV9pcnFzKGRldik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKIAkJaWYgKGVudHJ5LT5tc2lfYXR0cmliLmlzX21zaXgpIHsKQEAgLTQ1MSw5ICs0NzcsOCBAQAogCQkJCVBDSV9NU0lYX0ZMQUdTX0VOQUJMRSB8IFBDSV9NU0lYX0ZMQUdTX01BU0tBTEwpOwogCiAJYXJjaF9yZXN0b3JlX21zaV9pcnFzKGRldik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkKIAkJbXNpeF9tYXNrX2lycShlbnRyeSwgZW50cnktPm1hc2tlZCk7Ci0JfQogCiAJbXNpeF9jbGVhcl9hbmRfc2V0X2N0cmwoZGV2LCBQQ0lfTVNJWF9GTEFHU19NQVNLQUxMLCAwKTsKIH0KQEAgLTQ5Nyw5ICs1MjIsOCBAQAogCWludCBjb3VudCA9IDA7CiAKIAkvKiBEZXRlcm1pbmUgaG93IG1hbnkgbXNpIGVudHJpZXMgd2UgaGF2ZSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZwZGV2LT5tc2lfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZwZGV2LT5tc2lfbGlzdCwgbGlzdCkKIAkJKytudW1fbXNpOwotCX0KIAlpZiAoIW51bV9tc2kpCiAJCXJldHVybiAwOwogCkBAIC01NTksNyArNTgzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IG1zaV9kZXNjICptc2lfc2V0dXBfZW50cnkoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBzdHJ1Y3QgbXNpX2Rlc2MgKm1zaV9zZXR1cF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYykKIHsKIAl1MTYgY29udHJvbDsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwpAQCAtNTc3LDYgKzYwMSw4IEBACiAJZW50cnktPm1zaV9hdHRyaWIubWFza2JpdAk9ICEhKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTX01BU0tCSVQpOwogCWVudHJ5LT5tc2lfYXR0cmliLmRlZmF1bHRfaXJxCT0gZGV2LT5pcnE7CS8qIFNhdmUgSU9BUElDIElSUSAqLwogCWVudHJ5LT5tc2lfYXR0cmliLm11bHRpX2NhcAk9IChjb250cm9sICYgUENJX01TSV9GTEFHU19RTUFTSykgPj4gMTsKKwllbnRyeS0+bXNpX2F0dHJpYi5tdWx0aXBsZQk9IGlsb2cyKF9fcm91bmR1cF9wb3dfb2ZfdHdvKG52ZWMpKTsKKwllbnRyeS0+bnZlY191c2VkCQk9IG52ZWM7CiAKIAlpZiAoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfNjRCSVQpCiAJCWVudHJ5LT5tYXNrX3BvcyA9IGRldi0+bXNpX2NhcCArIFBDSV9NU0lfTUFTS182NDsKQEAgLTYyMyw3ICs2NDksNyBAQAogCiAJbXNpX3NldF9lbmFibGUoZGV2LCAwKTsJLyogRGlzYWJsZSBNU0kgZHVyaW5nIHNldCB1cCAqLwogCi0JZW50cnkgPSBtc2lfc2V0dXBfZW50cnkoZGV2KTsKKwllbnRyeSA9IG1zaV9zZXR1cF9lbnRyeShkZXYsIG52ZWMpOwogCWlmICghZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC02MzQsNyArNjYwLDcgQEAKIAlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmRldi0+bXNpX2xpc3QpOwogCiAJLyogQ29uZmlndXJlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSAqLwotCXJldCA9IGFyY2hfc2V0dXBfbXNpX2lycXMoZGV2LCBudmVjLCBQQ0lfQ0FQX0lEX01TSSk7CisJcmV0ID0gcGNpX21zaV9zZXR1cF9tc2lfaXJxcyhkZXYsIG52ZWMsIFBDSV9DQVBfSURfTVNJKTsKIAlpZiAocmV0KSB7CiAJCW1zaV9tYXNrX2lycShlbnRyeSwgbWFzaywgfm1hc2spOwogCQlmcmVlX21zaV9pcnFzKGRldik7CkBAIC03MDEsNiArNzI3LDcgQEAKIAkJZW50cnktPm1zaV9hdHRyaWIuZW50cnlfbnIJPSBlbnRyaWVzW2ldLmVudHJ5OwogCQllbnRyeS0+bXNpX2F0dHJpYi5kZWZhdWx0X2lycQk9IGRldi0+aXJxOwogCQllbnRyeS0+bWFza19iYXNlCQk9IGJhc2U7CisJCWVudHJ5LT5udmVjX3VzZWQJCT0gMTsKIAogCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmRldi0+bXNpX2xpc3QpOwogCX0KQEAgLTcxOSw3ICs3NDYsNiBAQAogCQkJCQkJUENJX01TSVhfRU5UUllfVkVDVE9SX0NUUkw7CiAKIAkJZW50cmllc1tpXS52ZWN0b3IgPSBlbnRyeS0+aXJxOwotCQlpcnFfc2V0X21zaV9kZXNjKGVudHJ5LT5pcnEsIGVudHJ5KTsKIAkJZW50cnktPm1hc2tlZCA9IHJlYWRsKGVudHJ5LT5tYXNrX2Jhc2UgKyBvZmZzZXQpOwogCQltc2l4X21hc2tfaXJxKGVudHJ5LCAxKTsKIAkJaSsrOwpAQCAtNzU2LDcgKzc4Miw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGFyY2hfc2V0dXBfbXNpX2lycXMoZGV2LCBudmVjLCBQQ0lfQ0FQX0lEX01TSVgpOworCXJldCA9IHBjaV9tc2lfc2V0dXBfbXNpX2lycXMoZGV2LCBudmVjLCBQQ0lfQ0FQX0lEX01TSVgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2F2YWlsOwogCkBAIC04OTUsNyArOTIxLDcgQEAKIAkvKiBSZXR1cm4gdGhlIGRldmljZSB3aXRoIE1TSSB1bm1hc2tlZCBhcyBpbml0aWFsIHN0YXRlcyAqLwogCW1hc2sgPSBtc2lfbWFzayhkZXNjLT5tc2lfYXR0cmliLm11bHRpX2NhcCk7CiAJLyogS2VlcCBjYWNoZWQgc3RhdGUgdG8gYmUgcmVzdG9yZWQgKi8KLQlhcmNoX21zaV9tYXNrX2lycShkZXNjLCBtYXNrLCB+bWFzayk7CisJX19wY2lfbXNpX2Rlc2NfbWFza19pcnEoZGVzYywgbWFzaywgfm1hc2spOwogCiAJLyogUmVzdG9yZSBkZXYtPmlycSB0byBpdHMgZGVmYXVsdCBwaW4tYXNzZXJ0aW9uIGlycSAqLwogCWRldi0+aXJxID0gZGVzYy0+bXNpX2F0dHJpYi5kZWZhdWx0X2lycTsKQEAgLTk5Myw3ICsxMDE5LDcgQEAKIAkvKiBSZXR1cm4gdGhlIGRldmljZSB3aXRoIE1TSS1YIG1hc2tlZCBhcyBpbml0aWFsIHN0YXRlcyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CiAJCS8qIEtlZXAgY2FjaGVkIHN0YXRlcyB0byBiZSByZXN0b3JlZCAqLwotCQlhcmNoX21zaXhfbWFza19pcnEoZW50cnksIDEpOworCQlfX3BjaV9tc2l4X2Rlc2NfbWFza19pcnEoZW50cnksIDEpOwogCX0KIAogCW1zaXhfY2xlYXJfYW5kX3NldF9jdHJsKGRldiwgUENJX01TSVhfRkxBR1NfRU5BQkxFLCAwKTsKQEAgLTExMzgsMyArMTE2NCwxOTcgQEAKIAlyZXR1cm4gbnZlYzsKIH0KIEVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9tc2l4X3JhbmdlKTsKKworI2lmZGVmIENPTkZJR19QQ0lfTVNJX0lSUV9ET01BSU4KKy8qKgorICogcGNpX21zaV9kb21haW5fd3JpdGVfbXNnIC0gSGVscGVyIHRvIHdyaXRlIE1TSSBtZXNzYWdlIHRvIFBDSSBjb25maWcgc3BhY2UKKyAqIEBpcnFfZGF0YToJUG9pbnRlciB0byBpbnRlcnJ1cHQgZGF0YSBvZiB0aGUgTVNJIGludGVycnVwdAorICogQG1zZzoJUG9pbnRlciB0byB0aGUgbWVzc2FnZQorICovCit2b2lkIHBjaV9tc2lfZG9tYWluX3dyaXRlX21zZyhzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBtc2lfZGVzYyAqZGVzYyA9IGlycV9kYXRhLT5tc2lfZGVzYzsKKworCS8qCisJICogRm9yIE1TSS1YIGRlc2MtPmlycSBpcyBhbHdheXMgZXF1YWwgdG8gaXJxX2RhdGEtPmlycS4gRm9yCisJICogTVNJIG9ubHkgdGhlIGZpcnN0IGludGVycnVwdCBvZiBNVUxUSSBNU0kgcGFzc2VzIHRoZSB0ZXN0LgorCSAqLworCWlmIChkZXNjLT5pcnEgPT0gaXJxX2RhdGEtPmlycSkKKwkJX19wY2lfd3JpdGVfbXNpX21zZyhkZXNjLCBtc2cpOworfQorCisvKioKKyAqIHBjaV9tc2lfZG9tYWluX2NhbGNfaHdpcnEgLSBHZW5lcmF0ZSBhIHVuaXF1ZSBJRCBmb3IgYW4gTVNJIHNvdXJjZQorICogQGRldjoJUG9pbnRlciB0byB0aGUgUENJIGRldmljZQorICogQGRlc2M6CVBvaW50ZXIgdG8gdGhlIG1zaSBkZXNjcmlwdG9yCisgKgorICogVGhlIElEIG51bWJlciBpcyBvbmx5IHVzZWQgd2l0aGluIHRoZSBpcnFkb21haW4uCisgKi8KK2lycV9od19udW1iZXJfdCBwY2lfbXNpX2RvbWFpbl9jYWxjX2h3aXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgc3RydWN0IG1zaV9kZXNjICpkZXNjKQoreworCXJldHVybiAoaXJxX2h3X251bWJlcl90KWRlc2MtPm1zaV9hdHRyaWIuZW50cnlfbnIgfAorCQlQQ0lfREVWSUQoZGV2LT5idXMtPm51bWJlciwgZGV2LT5kZXZmbikgPDwgMTEgfAorCQkocGNpX2RvbWFpbl9ucihkZXYtPmJ1cykgJiAweEZGRkZGRkZGKSA8PCAyNzsKK30KKworc3RhdGljIGlubGluZSBib29sIHBjaV9tc2lfZGVzY19pc19tdWx0aV9tc2koc3RydWN0IG1zaV9kZXNjICpkZXNjKQoreworCXJldHVybiAhZGVzYy0+bXNpX2F0dHJpYi5pc19tc2l4ICYmIGRlc2MtPm52ZWNfdXNlZCA+IDE7Cit9CisKKy8qKgorICogcGNpX21zaV9kb21haW5fY2hlY2tfY2FwIC0gVmVyaWZ5IHRoYXQgQGRvbWFpbiBzdXBwb3J0cyB0aGUgY2FwYWJpbGl0aWVzIGZvciBAZGV2CisgKiBAZG9tYWluOglUaGUgaW50ZXJydXB0IGRvbWFpbiB0byBjaGVjaworICogQGluZm86CVRoZSBkb21haW4gaW5mbyBmb3IgdmVyaWZpY2F0aW9uCisgKiBAZGV2OglUaGUgZGV2aWNlIHRvIGNoZWNrCisgKgorICogUmV0dXJuczoKKyAqICAwIGlmIHRoZSBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvcnRlZAorICogIDEgaWYgTXVsdGkgTVNJIGlzIHJlcXVlc3RlZCwgYnV0IHRoZSBkb21haW4gZG9lcyBub3Qgc3VwcG9ydCBpdAorICogIC1FTk9UU1VQUCBvdGhlcndpc2UKKyAqLworaW50IHBjaV9tc2lfZG9tYWluX2NoZWNrX2NhcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJICAgICBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1zaV9kZXNjICpkZXNjID0gZmlyc3RfcGNpX21zaV9lbnRyeSh0b19wY2lfZGV2KGRldikpOworCisJLyogU3BlY2lhbCBoYW5kbGluZyB0byBzdXBwb3J0IHBjaV9lbmFibGVfbXNpX3JhbmdlKCkgKi8KKwlpZiAocGNpX21zaV9kZXNjX2lzX211bHRpX21zaShkZXNjKSAmJgorCSAgICAhKGluZm8tPmZsYWdzICYgTVNJX0ZMQUdfTVVMVElfUENJX01TSSkpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGRlc2MtPm1zaV9hdHRyaWIuaXNfbXNpeCAmJiAhKGluZm8tPmZsYWdzICYgTVNJX0ZMQUdfUENJX01TSVgpKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpX21zaV9kb21haW5faGFuZGxlX2Vycm9yKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJICAgICAgIHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgaW50IGVycm9yKQoreworCS8qIFNwZWNpYWwgaGFuZGxpbmcgdG8gc3VwcG9ydCBwY2lfZW5hYmxlX21zaV9yYW5nZSgpICovCisJaWYgKHBjaV9tc2lfZGVzY19pc19tdWx0aV9tc2koZGVzYykgJiYgZXJyb3IgPT0gLUVOT1NQQykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKyNpZmRlZiBHRU5FUklDX01TSV9ET01BSU5fT1BTCitzdGF0aWMgdm9pZCBwY2lfbXNpX2RvbWFpbl9zZXRfZGVzYyhtc2lfYWxsb2NfaW5mb190ICphcmcsCisJCQkJICAgIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKK3sKKwlhcmctPmRlc2MgPSBkZXNjOworCWFyZy0+aHdpcnEgPSBwY2lfbXNpX2RvbWFpbl9jYWxjX2h3aXJxKG1zaV9kZXNjX3RvX3BjaV9kZXYoZGVzYyksCisJCQkJCSAgICAgICBkZXNjKTsKK30KKyNlbHNlCisjZGVmaW5lIHBjaV9tc2lfZG9tYWluX3NldF9kZXNjCQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBtc2lfZG9tYWluX29wcyBwY2lfbXNpX2RvbWFpbl9vcHNfZGVmYXVsdCA9IHsKKwkuc2V0X2Rlc2MJPSBwY2lfbXNpX2RvbWFpbl9zZXRfZGVzYywKKwkubXNpX2NoZWNrCT0gcGNpX21zaV9kb21haW5fY2hlY2tfY2FwLAorCS5oYW5kbGVfZXJyb3IJPSBwY2lfbXNpX2RvbWFpbl9oYW5kbGVfZXJyb3IsCit9OworCitzdGF0aWMgdm9pZCBwY2lfbXNpX2RvbWFpbl91cGRhdGVfZG9tX29wcyhzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvKQoreworCXN0cnVjdCBtc2lfZG9tYWluX29wcyAqb3BzID0gaW5mby0+b3BzOworCisJaWYgKG9wcyA9PSBOVUxMKSB7CisJCWluZm8tPm9wcyA9ICZwY2lfbXNpX2RvbWFpbl9vcHNfZGVmYXVsdDsKKwl9IGVsc2UgeworCQlpZiAob3BzLT5zZXRfZGVzYyA9PSBOVUxMKQorCQkJb3BzLT5zZXRfZGVzYyA9IHBjaV9tc2lfZG9tYWluX3NldF9kZXNjOworCQlpZiAob3BzLT5tc2lfY2hlY2sgPT0gTlVMTCkKKwkJCW9wcy0+bXNpX2NoZWNrID0gcGNpX21zaV9kb21haW5fY2hlY2tfY2FwOworCQlpZiAob3BzLT5oYW5kbGVfZXJyb3IgPT0gTlVMTCkKKwkJCW9wcy0+aGFuZGxlX2Vycm9yID0gcGNpX21zaV9kb21haW5faGFuZGxlX2Vycm9yOworCX0KK30KKworc3RhdGljIHZvaWQgcGNpX21zaV9kb21haW5fdXBkYXRlX2NoaXBfb3BzKHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8pCit7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaW5mby0+Y2hpcDsKKworCUJVR19PTighY2hpcCk7CisJaWYgKCFjaGlwLT5pcnFfd3JpdGVfbXNpX21zZykKKwkJY2hpcC0+aXJxX3dyaXRlX21zaV9tc2cgPSBwY2lfbXNpX2RvbWFpbl93cml0ZV9tc2c7Cit9CisKKy8qKgorICogcGNpX21zaV9jcmVhdGVfaXJxX2RvbWFpbiAtIENyZWF0IGEgTVNJIGludGVycnVwdCBkb21haW4KKyAqIEBub2RlOglPcHRpb25hbCBkZXZpY2UtdHJlZSBub2RlIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICogQGluZm86CU1TSSBkb21haW4gaW5mbworICogQHBhcmVudDoJUGFyZW50IGlycSBkb21haW4KKyAqCisgKiBVcGRhdGVzIHRoZSBkb21haW4gYW5kIGNoaXAgb3BzIGFuZCBjcmVhdGVzIGEgTVNJIGludGVycnVwdCBkb21haW4uCisgKgorICogUmV0dXJuczoKKyAqIEEgZG9tYWluIHBvaW50ZXIgb3IgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBpcnFfZG9tYWluICpwY2lfbXNpX2NyZWF0ZV9pcnFfZG9tYWluKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJCQkgICAgIHN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQpCit7CisJaWYgKGluZm8tPmZsYWdzICYgTVNJX0ZMQUdfVVNFX0RFRl9ET01fT1BTKQorCQlwY2lfbXNpX2RvbWFpbl91cGRhdGVfZG9tX29wcyhpbmZvKTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBNU0lfRkxBR19VU0VfREVGX0NISVBfT1BTKQorCQlwY2lfbXNpX2RvbWFpbl91cGRhdGVfY2hpcF9vcHMoaW5mbyk7CisKKwlyZXR1cm4gbXNpX2NyZWF0ZV9pcnFfZG9tYWluKG5vZGUsIGluZm8sIHBhcmVudCk7Cit9CisKKy8qKgorICogcGNpX21zaV9kb21haW5fYWxsb2NfaXJxcyAtIEFsbG9jYXRlIGludGVycnVwdHMgZm9yIEBkZXYgaW4gQGRvbWFpbgorICogQGRvbWFpbjoJVGhlIGludGVycnVwdCBkb21haW4gdG8gYWxsb2NhdGUgZnJvbQorICogQGRldjoJVGhlIGRldmljZSBmb3Igd2hpY2ggdG8gYWxsb2NhdGUKKyAqIEBudmVjOglUaGUgbnVtYmVyIG9mIGludGVycnVwdHMgdG8gYWxsb2NhdGUKKyAqIEB0eXBlOglVbnVzZWQgdG8gYWxsb3cgc2ltcGxlciBtaWdyYXRpb24gZnJvbSB0aGUgYXJjaF9YWFggaW50ZXJmYWNlcworICoKKyAqIFJldHVybnM6CisgKiBBIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlciBvciBhbiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorICovCitpbnQgcGNpX21zaV9kb21haW5fYWxsb2NfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJICAgICAgaW50IG52ZWMsIGludCB0eXBlKQoreworCXJldHVybiBtc2lfZG9tYWluX2FsbG9jX2lycXMoZG9tYWluLCAmZGV2LT5kZXYsIG52ZWMpOworfQorCisvKioKKyAqIHBjaV9tc2lfZG9tYWluX2ZyZWVfaXJxcyAtIEZyZWUgaW50ZXJydXB0cyBmb3IgQGRldiBpbiBAZG9tYWluCisgKiBAZG9tYWluOglUaGUgaW50ZXJydXB0IGRvbWFpbgorICogQGRldjoJVGhlIGRldmljZSBmb3Igd2hpY2ggdG8gZnJlZSBpbnRlcnJ1cHRzCisgKi8KK3ZvaWQgcGNpX21zaV9kb21haW5fZnJlZV9pcnFzKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJbXNpX2RvbWFpbl9mcmVlX2lycXMoZG9tYWluLCAmZGV2LT5kZXYpOworfQorCisvKioKKyAqIHBjaV9tc2lfY3JlYXRlX2RlZmF1bHRfaXJxX2RvbWFpbiAtIENyZWF0ZSBhIGRlZmF1bHQgTVNJIGludGVycnVwdCBkb21haW4KKyAqIEBub2RlOglPcHRpb25hbCBkZXZpY2UtdHJlZSBub2RlIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICogQGluZm86CU1TSSBkb21haW4gaW5mbworICogQHBhcmVudDoJUGFyZW50IGlycSBkb21haW4KKyAqCisgKiBSZXR1cm5zOiBBIGRvbWFpbiBwb2ludGVyIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLiBJZiBzdWNjZXNzZnVsCisgKiB0aGUgZGVmYXVsdCBQQ0kvTVNJIGlycWRvbWFpbiBwb2ludGVyIGlzIHVwZGF0ZWQuCisgKi8KK3N0cnVjdCBpcnFfZG9tYWluICpwY2lfbXNpX2NyZWF0ZV9kZWZhdWx0X2lycV9kb21haW4oc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQlzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLCBzdHJ1Y3QgaXJxX2RvbWFpbiAqcGFyZW50KQoreworCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CisKKwltdXRleF9sb2NrKCZwY2lfbXNpX2RvbWFpbl9sb2NrKTsKKwlpZiAocGNpX21zaV9kZWZhdWx0X2RvbWFpbikgeworCQlwcl9lcnIoIlBDSTogZGVmYXVsdCBpcnEgZG9tYWluIGZvciBQQ0kgTVNJIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC5cbiIpOworCQlkb21haW4gPSBOVUxMOworCX0gZWxzZSB7CisJCWRvbWFpbiA9IHBjaV9tc2lfY3JlYXRlX2lycV9kb21haW4obm9kZSwgaW5mbywgcGFyZW50KTsKKwkJcGNpX21zaV9kZWZhdWx0X2RvbWFpbiA9IGRvbWFpbjsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwY2lfbXNpX2RvbWFpbl9sb2NrKTsKKworCXJldHVybiBkb21haW47Cit9CisjZW5kaWYgLyogQ09ORklHX1BDSV9NU0lfSVJRX0RPTUFJTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWFjcGkuYyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKaW5kZXggNmViZjhlZC4uMzU0MjE1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWFjcGkuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCkBAIC0zMjIsOCArMzIyLDcgQEAKIAlwY2lfd2FrZXVwX2V2ZW50KHBjaV9kZXYpOwogCXBtX3J1bnRpbWVfcmVzdW1lKCZwY2lfZGV2LT5kZXYpOwogCi0JaWYgKHBjaV9kZXYtPnN1Ym9yZGluYXRlKQotCQlwY2lfcG1lX3dha2V1cF9idXMocGNpX2Rldi0+c3Vib3JkaW5hdGUpOworCXBjaV9wbWVfd2FrZXVwX2J1cyhwY2lfZGV2LT5zdWJvcmRpbmF0ZSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IDJiM2M4OTQuLjg4N2U2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTExMDQsNyArMTEwNCw3IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MgKi8KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAKIHN0YXRpYyBpbnQgcGNpX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xMjAwLDE2ICsxMjAwLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jZWxzZSAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KLQotI2RlZmluZSBwY2lfcG1fcnVudGltZV9zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcGNpX3BtX3J1bnRpbWVfcmVzdW1lCU5VTEwKLSNkZWZpbmUgcGNpX3BtX3J1bnRpbWVfaWRsZQlOVUxMCi0KLSNlbmRpZiAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KLQotI2lmZGVmIENPTkZJR19QTQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcGNpX2Rldl9wbV9vcHMgPSB7CiAJLnByZXBhcmUgPSBwY2lfcG1fcHJlcGFyZSwKIAkuc3VzcGVuZCA9IHBjaV9wbV9zdXNwZW5kLApAQCAtMTIzMSwxMSArMTIyMSwxNSBAQAogCiAjZGVmaW5lIFBDSV9QTV9PUFNfUFRSCSgmcGNpX2Rldl9wbV9vcHMpCiAKLSNlbHNlIC8qICFDT01GSUdfUE1fT1BTICovCisjZWxzZSAvKiAhQ09ORklHX1BNICovCisKKyNkZWZpbmUgcGNpX3BtX3J1bnRpbWVfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHBjaV9wbV9ydW50aW1lX3Jlc3VtZQlOVUxMCisjZGVmaW5lIHBjaV9wbV9ydW50aW1lX2lkbGUJTlVMTAogCiAjZGVmaW5lIFBDSV9QTV9PUFNfUFRSCU5VTEwKIAotI2VuZGlmIC8qICFDT01GSUdfUE1fT1BTICovCisjZW5kaWYgLyogIUNPTkZJR19QTSAqLwogCiAvKioKICAqIF9fcGNpX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IHBjaSBkcml2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggMmM2NjQzZi4uYTYyYWNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTIyMSwxMiArMjIxLDM3IEBACiBzdGF0aWMgREVWSUNFX0FUVFJfUlcoZW5hYmxlKTsKIAogI2lmZGVmIENPTkZJR19OVU1BCitzdGF0aWMgc3NpemVfdCBudW1hX25vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCWludCBub2RlLCByZXQ7CisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXQgPSBrc3RydG9pbnQoYnVmLCAwLCAmbm9kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghbm9kZV9vbmxpbmUobm9kZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJYWRkX3RhaW50KFRBSU5UX0ZJUk1XQVJFX1dPUktBUk9VTkQsIExPQ0tERVBfU1RJTExfT0spOworCWRldl9hbGVydCgmcGRldi0+ZGV2LCBGV19CVUcgIk92ZXJyaWRpbmcgTlVNQSBub2RlIHRvICVkLiAgQ29udGFjdCB5b3VyIHZlbmRvciBmb3IgdXBkYXRlcy4iLAorCQkgIG5vZGUpOworCisJZGV2LT5udW1hX25vZGUgPSBub2RlOworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIHNzaXplX3QgbnVtYV9ub2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGV2LT5udW1hX25vZGUpOwogfQotc3RhdGljIERFVklDRV9BVFRSX1JPKG51bWFfbm9kZSk7CitzdGF0aWMgREVWSUNFX0FUVFJfUlcobnVtYV9ub2RlKTsKICNlbmRpZgogCiBzdGF0aWMgc3NpemVfdCBkbWFfbWFza19iaXRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtMzg1LDcgKzQxMCw3IEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFIocmVzY2FuLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwgZGV2X2J1c19yZXNjYW5fc3RvcmUpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfUE1fUlVOVElNRSkgJiYgZGVmaW5lZChDT05GSUdfQUNQSSkKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfQUNQSSkKIHN0YXRpYyBzc2l6ZV90IGQzY29sZF9hbGxvd2VkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtNTY2LDcgKzU5MSw3IEBACiAJJmRldl9hdHRyX2VuYWJsZS5hdHRyLAogCSZkZXZfYXR0cl9icm9rZW5fcGFyaXR5X3N0YXR1cy5hdHRyLAogCSZkZXZfYXR0cl9tc2lfYnVzLmF0dHIsCi0jaWYgZGVmaW5lZChDT05GSUdfUE1fUlVOVElNRSkgJiYgZGVmaW5lZChDT05GSUdfQUNQSSkKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfQUNQSSkKIAkmZGV2X2F0dHJfZDNjb2xkX2FsbG93ZWQuYXR0ciwKICNlbmRpZgogI2lmZGVmIENPTkZJR19PRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA2MjVhNGFjLi5hN2FjNzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMTAxMiwxMSArMTAxMiw3IEBACiAJaWYgKGkgIT0gMCkKIAkJcmV0dXJuIGk7CiAKLQlpID0gcGNpX3NhdmVfdmNfc3RhdGUoZGV2KTsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gaTsKLQotCXJldHVybiAwOworCXJldHVybiBwY2lfc2F2ZV92Y19zdGF0ZShkZXYpOwogfQogRVhQT1JUX1NZTUJPTChwY2lfc2F2ZV9zdGF0ZSk7CiAKQEAgLTMxNDQsMTIgKzMxNDAsMTAgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXBjaV93YWl0X2Zvcl9wZW5kaW5nX3RyYW5zYWN0aW9uKGRldikpCi0JCWRldl9lcnIoJmRldi0+ZGV2LCAidHJhbnNhY3Rpb24gaXMgbm90IGNsZWFyZWQ7IHByb2NlZWRpbmcgd2l0aCByZXNldCBhbnl3YXlcbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgInRpbWVkIG91dCB3YWl0aW5nIGZvciBwZW5kaW5nIHRyYW5zYWN0aW9uOyBwZXJmb3JtaW5nIGZ1bmN0aW9uIGxldmVsIHJlc2V0IGFueXdheVxuIik7CiAKIAlwY2llX2NhcGFiaWxpdHlfc2V0X3dvcmQoZGV2LCBQQ0lfRVhQX0RFVkNUTCwgUENJX0VYUF9ERVZDVExfQkNSX0ZMUik7Ci0KIAltc2xlZXAoMTAwKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0zMTc0LDE2ICszMTY4LDEyIEBACiAJICogaXMgdXNlZCwgc28gd2UgdXNlIHRoZSBjb25yb2wgb2Zmc2V0IHJhdGhlciB0aGFuIHN0YXR1cyBhbmQgc2hpZnQKIAkgKiB0aGUgdGVzdCBiaXQgdG8gbWF0Y2guCiAJICovCi0JaWYgKHBjaV93YWl0X2Zvcl9wZW5kaW5nKGRldiwgcG9zICsgUENJX0FGX0NUUkwsCisJaWYgKCFwY2lfd2FpdF9mb3JfcGVuZGluZyhkZXYsIHBvcyArIFBDSV9BRl9DVFJMLAogCQkJCSBQQ0lfQUZfU1RBVFVTX1RQIDw8IDgpKQotCQlnb3RvIGNsZWFyOworCQlkZXZfZXJyKCZkZXYtPmRldiwgInRpbWVkIG91dCB3YWl0aW5nIGZvciBwZW5kaW5nIHRyYW5zYWN0aW9uOyBwZXJmb3JtaW5nIEFGIGZ1bmN0aW9uIGxldmVsIHJlc2V0IGFueXdheVxuIik7CiAKLQlkZXZfZXJyKCZkZXYtPmRldiwgInRyYW5zYWN0aW9uIGlzIG5vdCBjbGVhcmVkOyBwcm9jZWVkaW5nIHdpdGggcmVzZXQgYW55d2F5XG4iKTsKLQotY2xlYXI6CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgUENJX0FGX0NUUkwsIFBDSV9BRl9DVFJMX0ZMUik7CiAJbXNsZWVwKDEwMCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDE4MCw3ICs0MTcwLDggQEAKIAkJcmV0dXJuIGRldi0+cm9tX2Jhc2VfcmVnOwogCX0gZWxzZSBpZiAocmVzbm8gPCBQQ0lfQlJJREdFX1JFU09VUkNFUykgewogCQkvKiBkZXZpY2Ugc3BlY2lmaWMgcmVzb3VyY2UgKi8KLQkJcmVnID0gcGNpX2lvdl9yZXNvdXJjZV9iYXIoZGV2LCByZXNubywgdHlwZSk7CisJCSp0eXBlID0gcGNpX2Jhcl91bmtub3duOworCQlyZWcgPSBwY2lfaW92X3Jlc291cmNlX2JhcihkZXYsIHJlc25vKTsKIAkJaWYgKHJlZykKIAkJCXJldHVybiByZWc7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCA0YTM5MDJkLi44YWZmMjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMjUzLDggKzI1Myw3IEBACiAjaWZkZWYgQ09ORklHX1BDSV9JT1YKIGludCBwY2lfaW92X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaV9pb3ZfcmVsZWFzZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLWludCBwY2lfaW92X3Jlc291cmNlX2JhcihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8sCi0JCQkgZW51bSBwY2lfYmFyX3R5cGUgKnR5cGUpOworaW50IHBjaV9pb3ZfcmVzb3VyY2VfYmFyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubyk7CiByZXNvdXJjZV9zaXplX3QgcGNpX3NyaW92X3Jlc291cmNlX2FsaWdubWVudChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pOwogdm9pZCBwY2lfcmVzdG9yZV9pb3Zfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX2lvdl9idXNfcmFuZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cyk7CkBAIC0yNjgsOCArMjY3LDcgQEAKIAogewogfQotc3RhdGljIGlubGluZSBpbnQgcGNpX2lvdl9yZXNvdXJjZV9iYXIoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vLAotCQkJCSAgICAgICBlbnVtIHBjaV9iYXJfdHlwZSAqdHlwZSkKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9pb3ZfcmVzb3VyY2VfYmFyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubykKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZwppbmRleCA3OTU4ZTU5Li5lMjk0NzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCkBAIC03OSw0ICs3OSw0IEBACiAKIGNvbmZpZyBQQ0lFX1BNRQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFBDSUVQT1JUQlVTICYmIFBNX1JVTlRJTUUKKwlkZXBlbmRzIG9uIFBDSUVQT1JUQlVTICYmIFBNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCBjOGNhOThjLi4yMzIxMmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTg3LDggKzg3LDcgQEAKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cyA9IHRvX3BjaV9idXMoZGV2KTsKIAotCWlmIChwY2lfYnVzLT5icmlkZ2UpCi0JCXB1dF9kZXZpY2UocGNpX2J1cy0+YnJpZGdlKTsKKwlwdXRfZGV2aWNlKHBjaV9idXMtPmJyaWRnZSk7CiAJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKHBjaV9idXMpOwogCXBjaV9yZWxlYXNlX2J1c19vZl9ub2RlKHBjaV9idXMpOwogCWtmcmVlKHBjaV9idXMpOwpAQCAtMTc1LDcgKzE3NCw2IEBACiAJdTY0IGw2NCwgc3o2NCwgbWFzazY0OwogCXUxNiBvcmlnX2NtZDsKIAlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uLCBpbnZlcnRlZF9yZWdpb247Ci0JYm9vbCBiYXJfdG9vX2JpZyA9IGZhbHNlLCBiYXJfdG9vX2hpZ2ggPSBmYWxzZSwgYmFyX2ludmFsaWQgPSBmYWxzZTsKIAogCW1hc2sgPSB0eXBlID8gUENJX1JPTV9BRERSRVNTX01BU0sgOiB+MDsKIApAQCAtMjAxLDggKzE5OSw4IEBACiAJICogbWVtb3J5IEJBUiBvciBhIFJPTSwgYml0IDAgbXVzdCBiZSBjbGVhcjsgaWYgaXQncyBhbiBpbyBCQVIsIGJpdAogCSAqIDEgbXVzdCBiZSBjbGVhci4KIAkgKi8KLQlpZiAoIXN6IHx8IHN6ID09IDB4ZmZmZmZmZmYpCi0JCWdvdG8gZmFpbDsKKwlpZiAoc3ogPT0gMHhmZmZmZmZmZikKKwkJc3ogPSAwOwogCiAJLyoKIAkgKiBJIGRvbid0IGtub3cgaG93IGwgY2FuIGhhdmUgYWxsIGJpdHMgc2V0LiAgQ29waWVkIGZyb20gb2xkIGNvZGUuCkBAIC0yMTUsMjMgKzIxMywyMiBAQAogCQlyZXMtPmZsYWdzID0gZGVjb2RlX2JhcihkZXYsIGwpOwogCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfU0laRUFMSUdOOwogCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJCWwgJj0gUENJX0JBU0VfQUREUkVTU19JT19NQVNLOwotCQkJbWFzayA9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSyAmICh1MzIpIElPX1NQQUNFX0xJTUlUOworCQkJbDY0ID0gbCAmIFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKKwkJCXN6NjQgPSBzeiAmIFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKKwkJCW1hc2s2NCA9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSyAmICh1MzIpSU9fU1BBQ0VfTElNSVQ7CiAJCX0gZWxzZSB7Ci0JCQlsICY9IFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQltYXNrID0gKHUzMilQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOworCQkJbDY0ID0gbCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7CisJCQlzejY0ID0gc3ogJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOworCQkJbWFzazY0ID0gKHUzMilQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwogCQl9CiAJfSBlbHNlIHsKIAkJcmVzLT5mbGFncyB8PSAobCAmIElPUkVTT1VSQ0VfUk9NX0VOQUJMRSk7Ci0JCWwgJj0gUENJX1JPTV9BRERSRVNTX01BU0s7Ci0JCW1hc2sgPSAodTMyKVBDSV9ST01fQUREUkVTU19NQVNLOworCQlsNjQgPSBsICYgUENJX1JPTV9BRERSRVNTX01BU0s7CisJCXN6NjQgPSBzeiAmIFBDSV9ST01fQUREUkVTU19NQVNLOworCQltYXNrNjQgPSAodTMyKVBDSV9ST01fQUREUkVTU19NQVNLOwogCX0KIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fNjQpIHsKLQkJbDY0ID0gbDsKLQkJc3o2NCA9IHN6OwotCQltYXNrNjQgPSBtYXNrIHwgKHU2NCl+MCA8PCAzMjsKLQogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCAmbCk7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCB+MCk7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIDQsICZzeik7CkBAIC0yMzksMTggKzIzNiwzMCBAQAogCiAJCWw2NCB8PSAoKHU2NClsIDw8IDMyKTsKIAkJc3o2NCB8PSAoKHU2NClzeiA8PCAzMik7CisJCW1hc2s2NCB8PSAoKHU2NCl+MCA8PCAzMik7CisJfQogCi0JCXN6NjQgPSBwY2lfc2l6ZShsNjQsIHN6NjQsIG1hc2s2NCk7CisJaWYgKCFkZXYtPm1taW9fYWx3YXlzX29uICYmIChvcmlnX2NtZCAmIFBDSV9DT01NQU5EX0RFQ09ERV9FTkFCTEUpKQorCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgb3JpZ19jbWQpOwogCi0JCWlmICghc3o2NCkKLQkJCWdvdG8gZmFpbDsKKwlpZiAoIXN6NjQpCisJCWdvdG8gZmFpbDsKIAorCXN6NjQgPSBwY2lfc2l6ZShsNjQsIHN6NjQsIG1hc2s2NCk7CisJaWYgKCFzejY0KSB7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgRldfQlVHICJyZWcgMHgleDogaW52YWxpZCBCQVIgKGNhbid0IHNpemUpXG4iLAorCQkJIHBvcyk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNXzY0KSB7CiAJCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpIDwgOCB8fCBzaXplb2YocmVzb3VyY2Vfc2l6ZV90KSA8IDgpICYmCiAJCSAgICBzejY0ID4gMHgxMDAwMDAwMDBVTEwpIHsKIAkJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9VTlNFVCB8IElPUkVTT1VSQ0VfRElTQUJMRUQ7CiAJCQlyZXMtPnN0YXJ0ID0gMDsKIAkJCXJlcy0+ZW5kID0gMDsKLQkJCWJhcl90b29fYmlnID0gdHJ1ZTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAicmVnIDB4JXg6IGNhbid0IGhhbmRsZSBCQVIgbGFyZ2VyIHRoYW4gNEdCIChzaXplICUjMDEwbGx4KVxuIiwKKwkJCQlwb3MsICh1bnNpZ25lZCBsb25nIGxvbmcpc3o2NCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0yNTksMjIgKzI2OCwxNSBAQAogCQkJcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX1VOU0VUOwogCQkJcmVzLT5zdGFydCA9IDA7CiAJCQlyZXMtPmVuZCA9IHN6NjQ7Ci0JCQliYXJfdG9vX2hpZ2ggPSB0cnVlOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAicmVnIDB4JXg6IGNhbid0IGhhbmRsZSBCQVIgYWJvdmUgNEdCIChidXMgYWRkcmVzcyAlIzAxMGxseClcbiIsCisJCQkJIHBvcywgKHVuc2lnbmVkIGxvbmcgbG9uZylsNjQpOwogCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZWdpb24uc3RhcnQgPSBsNjQ7Ci0JCQlyZWdpb24uZW5kID0gbDY0ICsgc3o2NDsKIAkJfQotCX0gZWxzZSB7Ci0JCXN6ID0gcGNpX3NpemUobCwgc3osIG1hc2spOwotCi0JCWlmICghc3opCi0JCQlnb3RvIGZhaWw7Ci0KLQkJcmVnaW9uLnN0YXJ0ID0gbDsKLQkJcmVnaW9uLmVuZCA9IGwgKyBzejsKIAl9CiAKKwlyZWdpb24uc3RhcnQgPSBsNjQ7CisJcmVnaW9uLmVuZCA9IGw2NCArIHN6NjQ7CisKIAlwY2liaW9zX2J1c190b19yZXNvdXJjZShkZXYtPmJ1cywgcmVzLCAmcmVnaW9uKTsKIAlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhkZXYtPmJ1cywgJmludmVydGVkX3JlZ2lvbiwgcmVzKTsKIApAQCAtMjkzLDcgKzI5NSw4IEBACiAJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9VTlNFVDsKIAkJcmVzLT5zdGFydCA9IDA7CiAJCXJlcy0+ZW5kID0gcmVnaW9uLmVuZCAtIHJlZ2lvbi5zdGFydDsKLQkJYmFyX2ludmFsaWQgPSB0cnVlOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJyZWcgMHgleDogaW5pdGlhbCBCQVIgdmFsdWUgJSMwMTBsbHggaW52YWxpZFxuIiwKKwkJCSBwb3MsICh1bnNpZ25lZCBsb25nIGxvbmcpcmVnaW9uLnN0YXJ0KTsKIAl9CiAKIAlnb3RvIG91dDsKQEAgLTMwMiwxOSArMzA1LDYgQEAKIGZhaWw6CiAJcmVzLT5mbGFncyA9IDA7CiBvdXQ6Ci0JaWYgKCFkZXYtPm1taW9fYWx3YXlzX29uICYmCi0JICAgIChvcmlnX2NtZCAmIFBDSV9DT01NQU5EX0RFQ09ERV9FTkFCTEUpKQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgb3JpZ19jbWQpOwotCi0JaWYgKGJhcl90b29fYmlnKQotCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlZyAweCV4OiBjYW4ndCBoYW5kbGUgQkFSIGxhcmdlciB0aGFuIDRHQiAoc2l6ZSAlIzAxMGxseClcbiIsCi0JCQlwb3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHN6NjQpOwotCWlmIChiYXJfdG9vX2hpZ2gpCi0JCWRldl9pbmZvKCZkZXYtPmRldiwgInJlZyAweCV4OiBjYW4ndCBoYW5kbGUgQkFSIGFib3ZlIDRHIChidXMgYWRkcmVzcyAlIzAxMGxseClcbiIsCi0JCQkgcG9zLCAodW5zaWduZWQgbG9uZyBsb25nKSBsNjQpOwotCWlmIChiYXJfaW52YWxpZCkKLQkJZGV2X2luZm8oJmRldi0+ZGV2LCAicmVnIDB4JXg6IGluaXRpYWwgQkFSIHZhbHVlICUjMDEwbGx4IGludmFsaWRcbiIsCi0JCQkgcG9zLCAodW5zaWduZWQgbG9uZyBsb25nKSByZWdpb24uc3RhcnQpOwogCWlmIChyZXMtPmZsYWdzKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInJlZyAweCV4OiAlcFJcbiIsIHBvcywgcmVzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwppbmRleCBhODFmNDEzLi5hMjBjZTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZWFyY2guYworKysgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwpAQCAtMjcxLDggKzI3MSw3IEBACiAJCQkgICAgICBtYXRjaF9wY2lfZGV2X2J5X2lkKTsKIAlpZiAoZGV2KQogCQlwZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCWlmIChmcm9tKQotCQlwY2lfZGV2X3B1dChmcm9tKTsKKwlwY2lfZGV2X3B1dChmcm9tKTsKIAlyZXR1cm4gcGRldjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kveGVuLXBjaWZyb250LmMgYi9kcml2ZXJzL3BjaS94ZW4tcGNpZnJvbnQuYwppbmRleCAxMTZjYTM3Li5iMWZmZWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS94ZW4tcGNpZnJvbnQuYworKysgYi9kcml2ZXJzL3BjaS94ZW4tcGNpZnJvbnQuYwpAQCAtNTk2LDggKzU5Niw3IEBACiAJcGNpZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoYnVzLCBkZXZmbik7CiAJaWYgKCFwY2lkZXYgfHwgIXBjaWRldi0+ZHJpdmVyKSB7CiAJCWRldl9lcnIoJnBkZXYtPnhkZXYtPmRldiwgImRldmljZSBvciBBRVIgZHJpdmVyIGlzIE5VTExcbiIpOwotCQlpZiAocGNpZGV2KQotCQkJcGNpX2Rldl9wdXQocGNpZGV2KTsKKwkJcGNpX2Rldl9wdXQocGNpZGV2KTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAJcGRydiA9IHBjaWRldi0+ZHJpdmVyOwpAQCAtODY2LDYgKzg2NSwxMSBAQAogCQl4ZW5idXNfZGV2X2Vycm9yKHBkZXYtPnhkZXYsIGVyciwKIAkJCQkgIk5vIFBDSSBSb290cyBmb3VuZCwgdHJ5aW5nIDAwMDA6MDAiKTsKIAkJZXJyID0gcGNpZnJvbnRfc2Nhbl9yb290KHBkZXYsIDAsIDApOworCQlpZiAoZXJyKSB7CisJCQl4ZW5idXNfZGV2X2ZhdGFsKHBkZXYtPnhkZXYsIGVyciwKKwkJCQkJICJFcnJvciBzY2FubmluZyBQQ0kgcm9vdCAwMDAwOjAwIik7CisJCQlnb3RvIG91dDsKKwkJfQogCQludW1fcm9vdHMgPSAwOwogCX0gZWxzZSBpZiAoZXJyICE9IDEpIHsKIAkJaWYgKGVyciA9PSAwKQpAQCAtOTQ3LDYgKzk1MSwxMSBAQAogCQl4ZW5idXNfZGV2X2Vycm9yKHBkZXYtPnhkZXYsIGVyciwKIAkJCQkgIk5vIFBDSSBSb290cyBmb3VuZCwgdHJ5aW5nIDAwMDA6MDAiKTsKIAkJZXJyID0gcGNpZnJvbnRfcmVzY2FuX3Jvb3QocGRldiwgMCwgMCk7CisJCWlmIChlcnIpIHsKKwkJCXhlbmJ1c19kZXZfZmF0YWwocGRldi0+eGRldiwgZXJyLAorCQkJCQkgIkVycm9yIHNjYW5uaW5nIFBDSSByb290IDAwMDA6MDAiKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCW51bV9yb290cyA9IDA7CiAJfSBlbHNlIGlmIChlcnIgIT0gMSkgewogCQlpZiAoZXJyID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktb21hcC11c2IyLmMgYi9kcml2ZXJzL3BoeS9waHktb21hcC11c2IyLmMKaW5kZXggZjA5MTU3Ni4uNDg5OTBlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcGh5LW9tYXAtdXNiMi5jCisrKyBiL2RyaXZlcnMvcGh5L3BoeS1vbWFwLXVzYjIuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogCiBzdGF0aWMgaW50IG9tYXBfdXNiMl9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LXRpLXBpcGUzLmMgYi9kcml2ZXJzL3BoeS9waHktdGktcGlwZTMuYwppbmRleCBhYjFlMjJkLi43YzY2OTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9waHktdGktcGlwZTMuYworKysgYi9kcml2ZXJzL3BoeS9waHktdGktcGlwZTMuYwpAQCAtNDIzLDcgKzQyMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogCiBzdGF0aWMgaW50IHRpX3BpcGUzX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3BtMjMwMV9jaGFyZ2VyLmMgYi9kcml2ZXJzL3Bvd2VyL3BtMjMwMV9jaGFyZ2VyLmMKaW5kZXggNjJjMTVhZi4uNzc3MzI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9wbTIzMDFfY2hhcmdlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcG0yMzAxX2NoYXJnZXIuYwpAQCAtOTUxLDggKzk1MSw2IEBACiAKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKLQogc3RhdGljIGludCAgcG0yeHh4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKnBtMnh4eF9pMmNfY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwpAQCAtOTc3LDggKzk3NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZgotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcG0yeHh4X3BtX29wcyA9IHsKIAlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhwbTJ4eHhfd2FsbF9jaGFyZ2VyX3N1c3BlbmQsCiAJCXBtMnh4eF93YWxsX2NoYXJnZXJfcmVzdW1lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnIGIvZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnCmluZGV4IGY2NWZmNDkuLjAyOGU3NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWcKQEAgLTcxLDYgKzcxLDE1IEBACiAJaGVscAogCSAgUmVib290IHN1cHBvcnQgZm9yIEhpc2lsaWNvbiBib2FyZHMuCiAKK2NvbmZpZyBQT1dFUl9SRVNFVF9JTVgKKwlib29sICJJTVg2IHBvd2VyLW9mZiBkcml2ZXIiCisJZGVwZW5kcyBvbiBQT1dFUl9SRVNFVCAmJiBTT0NfSU1YNgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnQgcG93ZXIgb2ZmIGV4dGVybmFsIFBNSUMgYnkgUE1JQ19PTl9SRVEgb24gaS5teDYKKwkgIGJvYXJkcy5JZiB5b3Ugd2FudCB0byB1c2Ugb3RoZXIgcGluIHRvIGNvbnRyb2wgZXh0ZXJuYWwgcG93ZXIscGxlYXNlCisJICBzYXkgTiBoZXJlIG9yIGRpc2FibGUgaW4gZHRzIHRvIG1ha2Ugc3VyZSBwbV9wb3dlcl9vZmYgbmV2ZXIgYmUKKwkgIG92ZXJ3cm90ZSB3cm9uZ2x5IGJ5IHRoaXMgZHJpdmVyLgorCiBjb25maWcgUE9XRVJfUkVTRVRfTVNNCiAJYm9vbCAiUXVhbGNvbW0gTVNNIHBvd2VyLW9mZiBkcml2ZXIiCiAJZGVwZW5kcyBvbiBBUkNIX1FDT00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L01ha2VmaWxlCmluZGV4IDc2Y2UxYzUuLjFkNDgwNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKIG9iai0kKENPTkZJR19QT1dFUl9SRVNFVF9HUElPKSArPSBncGlvLXBvd2Vyb2ZmLm8KIG9iai0kKENPTkZJR19QT1dFUl9SRVNFVF9HUElPX1JFU1RBUlQpICs9IGdwaW8tcmVzdGFydC5vCiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfSElTSSkgKz0gaGlzaS1yZWJvb3Qubworb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX0lNWCkgKz0gaW14LXNudnMtcG93ZXJvZmYubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX01TTSkgKz0gbXNtLXBvd2Vyb2ZmLm8KIG9iai0kKENPTkZJR19QT1dFUl9SRVNFVF9MVEMyOTUyKSArPSBsdGMyOTUyLXBvd2Vyb2ZmLm8KIG9iai0kKENPTkZJR19QT1dFUl9SRVNFVF9RTkFQKSArPSBxbmFwLXBvd2Vyb2ZmLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXQ5MS1yZXNldC5jIGIvZHJpdmVycy9wb3dlci9yZXNldC9hdDkxLXJlc2V0LmMKaW5kZXggM2NiMzY2OS4uNjlhNzVkOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXQ5MS1yZXNldC5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXQ5MS1yZXNldC5jCkBAIC0xOSw4ICsxOSw4IEBACiAKICNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KIAotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfZGRyc2RyLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zZHJhbWMuaD4KKyNpbmNsdWRlIDxzb2MvYXQ5MS9hdDkxc2FtOV9kZHJzZHIuaD4KKyNpbmNsdWRlIDxzb2MvYXQ5MS9hdDkxc2FtOV9zZHJhbWMuaD4KIAogI2RlZmluZSBBVDkxX1JTVENfQ1IJMHgwMAkJLyogUmVzZXQgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIEFUOTFfUlNUQ19QUk9DUlNUCUJJVCgwKQkJLyogUHJvY2Vzc29yIFJlc2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2lteC1zbnZzLXBvd2Vyb2ZmLmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2lteC1zbnZzLXBvd2Vyb2ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2Y2U1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvaW14LXNudnMtcG93ZXJvZmYuYwpAQCAtMCwwICsxLDY2IEBACisvKiBQb3dlciBvZmYgZHJpdmVyIGZvciBpLm14NgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBGUkVFU0NBTEUgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIGJhc2VkIG9uIG1zbS1wb3dlcm9mZi5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzbnZzX2Jhc2U7CisKK3N0YXRpYyB2b2lkIGRvX2lteF9wb3dlcm9mZih2b2lkKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKHNudnNfYmFzZSk7CisKKwkvKiBzZXQgVE9QIGFuZCBEUF9FTiBiaXQgKi8KKwl3cml0ZWwodmFsdWUgfCAweDYwLCBzbnZzX2Jhc2UpOworfQorCitzdGF0aWMgaW50IGlteF9wb3dlcm9mZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXNudnNfYmFzZSA9IG9mX2lvbWFwKHBkZXYtPmRldi5vZl9ub2RlLCAwKTsKKwlpZiAoIXNudnNfYmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBtX3Bvd2VyX29mZiA9IGRvX2lteF9wb3dlcm9mZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfaW14X3Bvd2Vyb2ZmX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcG93ZXJvZmYiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX2lteF9wb3dlcm9mZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF9wb3dlcm9mZl9kcml2ZXIgPSB7CisJLnByb2JlID0gaW14X3Bvd2Vyb2ZmX3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImlteC1zbnZzLXBvd2Vyb2ZmIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9mX2lteF9wb3dlcm9mZl9tYXRjaCksCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlteF9wb3dlcm9mZl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW14X3Bvd2Vyb2ZmX2RyaXZlcik7Cit9CitkZXZpY2VfaW5pdGNhbGwoaW14X3Bvd2Vyb2ZmX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlcmNhcC9LY29uZmlnIGIvZHJpdmVycy9wb3dlcmNhcC9LY29uZmlnCmluZGV4IGE3YzgxYjUuLjg1NzI3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXJjYXAvS2NvbmZpZworKysgYi9kcml2ZXJzL3Bvd2VyY2FwL0tjb25maWcKQEAgLTE3LDcgKzE3LDcgQEAKICMgQ2xpZW50IGRyaXZlciBjb25maWd1cmF0aW9ucyBnbyBoZXJlLgogY29uZmlnIElOVEVMX1JBUEwKIAl0cmlzdGF0ZSAiSW50ZWwgUkFQTCBTdXBwb3J0IgotCWRlcGVuZHMgb24gWDg2CisJZGVwZW5kcyBvbiBYODYgJiYgSU9TRl9NQkkKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEludGVsIFJ1bm5pbmcgQXZlcmFnZSBQb3dlciBMaW1pdCAoUkFQTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXJjYXAvaW50ZWxfcmFwbC5jIGIvZHJpdmVycy9wb3dlcmNhcC9pbnRlbF9yYXBsLmMKaW5kZXggNDVlMDViMy4uYzcxNDQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlcmNhcC9pbnRlbF9yYXBsLmMKKysrIGIvZHJpdmVycy9wb3dlcmNhcC9pbnRlbF9yYXBsLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyY2FwLmg+CisjaW5jbHVkZSA8YXNtL2lvc2ZfbWJpLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2NwdV9kZXZpY2VfaWQuaD4KQEAgLTcwLDExICs3MSw2IEBACiAjZGVmaW5lIFJBUExfUFJJTUlUSVZFX0RFUklWRUQgICAgICAgQklUKDEpIC8qIG5vdCBmcm9tIHJhdyBkYXRhICovCiAjZGVmaW5lIFJBUExfUFJJTUlUSVZFX0RVTU1ZICAgICAgICAgQklUKDIpCiAKLS8qIHNjYWxlIFJBUEwgdW5pdHMgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgbWF0aCBpbnNpZGUga2VybmVsICovCi0jZGVmaW5lIFBPV0VSX1VOSVRfU0NBTEUgICAgICgxMDAwMDAwKQotI2RlZmluZSBFTkVSR1lfVU5JVF9TQ0FMRSAgICAoMTAwMDAwMCkKLSNkZWZpbmUgVElNRV9VTklUX1NDQUxFICAgICAgKDEwMDAwMDApCi0KICNkZWZpbmUgVElNRV9XSU5ET1dfTUFYX01TRUMgNDAwMDAKICNkZWZpbmUgVElNRV9XSU5ET1dfTUlOX01TRUMgMjUwCiAKQEAgLTE3NSw5ICsxNzEsOSBAQAogCXVuc2lnbmVkIGludCBpZDsgLyogcGh5c2ljYWwgcGFja2FnZS9zb2NrZXQgaWQgKi8KIAl1bnNpZ25lZCBpbnQgbnJfZG9tYWluczsKIAl1bnNpZ25lZCBsb25nIGRvbWFpbl9tYXA7IC8qIGJpdCBtYXAgb2YgYWN0aXZlIGRvbWFpbnMgKi8KLQl1bnNpZ25lZCBpbnQgcG93ZXJfdW5pdF9kaXZpc29yOwotCXVuc2lnbmVkIGludCBlbmVyZ3lfdW5pdF9kaXZpc29yOwotCXVuc2lnbmVkIGludCB0aW1lX3VuaXRfZGl2aXNvcjsKKwl1bnNpZ25lZCBpbnQgcG93ZXJfdW5pdDsKKwl1bnNpZ25lZCBpbnQgZW5lcmd5X3VuaXQ7CisJdW5zaWduZWQgaW50IHRpbWVfdW5pdDsKIAlzdHJ1Y3QgcmFwbF9kb21haW4gKmRvbWFpbnM7IC8qIGFycmF5IG9mIGRvbWFpbnMsIHNpemVkIGF0IHJ1bnRpbWUgKi8KIAlzdHJ1Y3QgcG93ZXJjYXBfem9uZSAqcG93ZXJfem9uZTsgLyoga2VlcCB0cmFjayBvZiBwYXJlbnQgem9uZSAqLwogCWludCBucl9jcHVzOyAvKiBhY3RpdmUgY3B1cyBvbiB0aGUgcGFja2FnZSwgdG9wb2xvZ3kgaW5mbyBpcyBsb3N0IGR1cmluZwpAQCAtMTg4LDYgKzE4NCwxOCBAQAogCQkJCQkqLwogCXN0cnVjdCBsaXN0X2hlYWQgcGxpc3Q7CiB9OworCitzdHJ1Y3QgcmFwbF9kZWZhdWx0cyB7CisJaW50ICgqY2hlY2tfdW5pdCkoc3RydWN0IHJhcGxfcGFja2FnZSAqcnAsIGludCBjcHUpOworCXZvaWQgKCpzZXRfZmxvb3JfZnJlcSkoc3RydWN0IHJhcGxfZG9tYWluICpyZCwgYm9vbCBtb2RlKTsKKwl1NjQgKCpjb21wdXRlX3RpbWVfd2luZG93KShzdHJ1Y3QgcmFwbF9wYWNrYWdlICpycCwgdTY0IHZhbCwKKwkJCQlib29sIHRvX3Jhdyk7Cit9Oworc3RhdGljIHN0cnVjdCByYXBsX2RlZmF1bHRzICpyYXBsX2RlZmF1bHRzOworCisvKiBTaWRlYmFuZCBNQkkgcmVnaXN0ZXJzICovCisjZGVmaW5lIElPU0ZfQ1BVX1BPV0VSX0JVREdFVF9DVEwgKDB4MikKKwogI2RlZmluZSBQQUNLQUdFX1BMTl9JTlRfU0FWRUQgICBCSVQoMCkKICNkZWZpbmUgTUFYX1BSSU1fTkFNRSAoMzIpCiAKQEAgLTMzOSwyMyArMzQ3LDEzIEBACiBzdGF0aWMgaW50IHNldF9kb21haW5fZW5hYmxlKHN0cnVjdCBwb3dlcmNhcF96b25lICpwb3dlcl96b25lLCBib29sIG1vZGUpCiB7CiAJc3RydWN0IHJhcGxfZG9tYWluICpyZCA9IHBvd2VyX3pvbmVfdG9fcmFwbF9kb21haW4ocG93ZXJfem9uZSk7Ci0JaW50IG5yX3Bvd2VybGltaXQ7CiAKIAlpZiAocmQtPnN0YXRlICYgRE9NQUlOX1NUQVRFX0JJT1NfTE9DS0VEKQogCQlyZXR1cm4gLUVBQ0NFUzsKKwogCWdldF9vbmxpbmVfY3B1cygpOwotCW5yX3Bvd2VybGltaXQgPSBmaW5kX25yX3Bvd2VyX2xpbWl0KHJkKTsKLQkvKiBoZXJlIHdlIGFjdGl2YXRlL2RlYWN0aXZhdGUgdGhlIGhhcmR3YXJlIGZvciBwb3dlciBsaW1pdGluZyAqLwogCXJhcGxfd3JpdGVfZGF0YV9yYXcocmQsIFBMMV9FTkFCTEUsIG1vZGUpOwotCS8qIGFsd2F5cyBlbmFibGUgY2xhbXAgc3VjaCB0aGF0IHAtc3RhdGUgY2FuIGdvIGJlbG93IE9TIHJlcXVlc3RlZAotCSAqIHJhbmdlLiBwb3dlciBjYXBwaW5nIHByaW9yaXR5IG92ZXIgZ3VyYW50ZWVkIGZyZXF1ZW5jeS4KLQkgKi8KLQlyYXBsX3dyaXRlX2RhdGFfcmF3KHJkLCBQTDFfQ0xBTVAsIG1vZGUpOwotCS8qIHNvbWUgZG9tYWlucyBoYXZlIHBsMiAqLwotCWlmIChucl9wb3dlcmxpbWl0ID4gMSkgewotCQlyYXBsX3dyaXRlX2RhdGFfcmF3KHJkLCBQTDJfRU5BQkxFLCBtb2RlKTsKLQkJcmFwbF93cml0ZV9kYXRhX3JhdyhyZCwgUEwyX0NMQU1QLCBtb2RlKTsKLQl9CisJcmFwbF9kZWZhdWx0cy0+c2V0X2Zsb29yX2ZyZXEocmQsIG1vZGUpOwogCXB1dF9vbmxpbmVfY3B1cygpOwogCiAJcmV0dXJuIDA7CkBAIC02NTMsOSArNjUxLDcgQEAKIHN0YXRpYyB1NjQgcmFwbF91bml0X3hsYXRlKGludCBwYWNrYWdlLCBlbnVtIHVuaXRfdHlwZSB0eXBlLCB1NjQgdmFsdWUsCiAJCQlpbnQgdG9fcmF3KQogewotCXU2NCBkaXZpc29yID0gMTsKLQlpbnQgc2NhbGUgPSAxOyAvKiBzY2FsZSB0byB1c2VyIGZyaWVuZGx5IGRhdGEgd2l0aG91dCBmbG9hdGluZyBwb2ludCAqLwotCXU2NCBmLCB5OyAvKiBmcmFjdGlvbiBhbmQgZXhwLiB1c2VkIGZvciB0aW1lIHVuaXQgKi8KKwl1NjQgdW5pdHMgPSAxOwogCXN0cnVjdCByYXBsX3BhY2thZ2UgKnJwOwogCiAJcnAgPSBmaW5kX3BhY2thZ2VfYnlfaWQocGFja2FnZSk7CkBAIC02NjQsNDIgKzY2MCwyNCBAQAogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBQT1dFUl9VTklUOgotCQlkaXZpc29yID0gcnAtPnBvd2VyX3VuaXRfZGl2aXNvcjsKLQkJc2NhbGUgPSBQT1dFUl9VTklUX1NDQUxFOworCQl1bml0cyA9IHJwLT5wb3dlcl91bml0OwogCQlicmVhazsKIAljYXNlIEVORVJHWV9VTklUOgotCQlzY2FsZSA9IEVORVJHWV9VTklUX1NDQUxFOwotCQlkaXZpc29yID0gcnAtPmVuZXJneV91bml0X2Rpdmlzb3I7CisJCXVuaXRzID0gcnAtPmVuZXJneV91bml0OwogCQlicmVhazsKIAljYXNlIFRJTUVfVU5JVDoKLQkJZGl2aXNvciA9IHJwLT50aW1lX3VuaXRfZGl2aXNvcjsKLQkJc2NhbGUgPSBUSU1FX1VOSVRfU0NBTEU7Ci0JCS8qIHNwZWNpYWwgcHJvY2Vzc2luZyBiYXNlZCBvbiAyXlkqKDErRikvNCA9IHZhbC9kaXZpc29yLCByZWZlcgotCQkgKiB0byBJbnRlbCBTb2Z0d2FyZSBEZXZlbG9wZXIncyBtYW51YWwgVm9sLiAzYSwgQ0ggMTQuNy40LgotCQkgKi8KLQkJaWYgKCF0b19yYXcpIHsKLQkJCWYgPSAodmFsdWUgJiAweDYwKSA+PiA1OwotCQkJeSA9IHZhbHVlICYgMHgxZjsKLQkJCXZhbHVlID0gKDEgPDwgeSkgKiAoNCArIGYpICogc2NhbGUgLyA0OwotCQkJcmV0dXJuIGRpdjY0X3U2NCh2YWx1ZSwgZGl2aXNvcik7Ci0JCX0gZWxzZSB7Ci0JCQlkb19kaXYodmFsdWUsIHNjYWxlKTsKLQkJCXZhbHVlICo9IGRpdmlzb3I7Ci0JCQl5ID0gaWxvZzIodmFsdWUpOwotCQkJZiA9IGRpdjY0X3U2NCg0ICogKHZhbHVlIC0gKDEgPDwgeSkpLCAxIDw8IHkpOwotCQkJdmFsdWUgPSAoeSAmIDB4MWYpIHwgKChmICYgMHgzKSA8PCA1KTsKLQkJCXJldHVybiB2YWx1ZTsKLQkJfQotCQlicmVhazsKKwkJcmV0dXJuIHJhcGxfZGVmYXVsdHMtPmNvbXB1dGVfdGltZV93aW5kb3cocnAsIHZhbHVlLCB0b19yYXcpOwogCWNhc2UgQVJCSVRSQVJZX1VOSVQ6CiAJZGVmYXVsdDoKIAkJcmV0dXJuIHZhbHVlOwogCX07CiAKIAlpZiAodG9fcmF3KQotCQlyZXR1cm4gZGl2NjRfdTY0KHZhbHVlICogZGl2aXNvciwgc2NhbGUpOwotCWVsc2UKLQkJcmV0dXJuIGRpdjY0X3U2NCh2YWx1ZSAqIHNjYWxlLCBkaXZpc29yKTsKKwkJcmV0dXJuIGRpdjY0X3U2NCh2YWx1ZSwgdW5pdHMpOworCisJdmFsdWUgKj0gdW5pdHM7CisKKwlyZXR1cm4gdmFsdWU7CiB9CiAKIC8qIGluIHRoZSBvcmRlciBvZiBlbnVtIHJhcGxfcHJpbWl0aXZlcyAqLwpAQCAtODMzLDEyICs4MTEsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIGVuZXJneV91bml0X3F1aXJrX2lkc1tdID0gewotCXsgWDg2X1ZFTkRPUl9JTlRFTCwgNiwgMHgzN30sLyogVmFsbGV5dmlldyAqLwotCXt9Ci19OwotCi1zdGF0aWMgaW50IHJhcGxfY2hlY2tfdW5pdChzdHJ1Y3QgcmFwbF9wYWNrYWdlICpycCwgaW50IGNwdSkKKy8qCisgKiBSYXcgUkFQTCBkYXRhIHN0b3JlZCBpbiBNU1JzIGFyZSBpbiBjZXJ0YWluIHNjYWxlcy4gV2UgbmVlZCB0bworICogY29udmVydCB0aGVtIGludG8gc3RhbmRhcmQgdW5pdHMgYmFzZWQgb24gdGhlIHVuaXRzIHJlcG9ydGVkIGluCisgKiB0aGUgUkFQTCB1bml0IE1TUnMuIFRoaXMgaXMgc3BlY2lmaWMgdG8gQ1BVcyBhcyB0aGUgbWV0aG9kIHRvCisgKiBjYWxjdWxhdGUgdW5pdHMgZGlmZmVyIG9uIGRpZmZlcmVudCBDUFVzLgorICogV2UgY29udmVydCB0aGUgdW5pdHMgdG8gYmVsb3cgZm9ybWF0IGJhc2VkIG9uIENQVXMuCisgKiBpLmUuCisgKiBlbmVyZ3kgdW5pdDogbWljcm9Kb3VsZXMgOiBSZXByZXNlbnRlZCBpbiBtaWNyb0pvdWxlcyBieSBkZWZhdWx0CisgKiBwb3dlciB1bml0IDogbWljcm9XYXR0cyAgOiBSZXByZXNlbnRlZCBpbiBtaWxsaVdhdHRzIGJ5IGRlZmF1bHQKKyAqIHRpbWUgdW5pdCAgOiBtaWNyb3NlY29uZHM6IFJlcHJlc2VudGVkIGluIHNlY29uZHMgYnkgZGVmYXVsdAorICovCitzdGF0aWMgaW50IHJhcGxfY2hlY2tfdW5pdF9jb3JlKHN0cnVjdCByYXBsX3BhY2thZ2UgKnJwLCBpbnQgY3B1KQogewogCXU2NCBtc3JfdmFsOwogCXUzMiB2YWx1ZTsKQEAgLTg0OSwzNiArODMzLDQ3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIFJhdyBSQVBMIGRhdGEgc3RvcmVkIGluIE1TUnMgYXJlIGluIGNlcnRhaW4gc2NhbGVzLiBXZSBuZWVkIHRvCi0JICogY29udmVydCB0aGVtIGludG8gc3RhbmRhcmQgdW5pdHMgYmFzZWQgb24gdGhlIGRpdmlzb3JzIHJlcG9ydGVkIGluCi0JICogdGhlIFJBUEwgdW5pdCBNU1JzLgotCSAqIGkuZS4KLQkgKiBlbmVyZ3kgdW5pdDogMS9lbmVyeV91bml0X2Rpdmlzb3IgSm91bGVzCi0JICogcG93ZXIgdW5pdDogMS9wb3dlcl91bml0X2Rpdmlzb3IgV2F0dHMKLQkgKiB0aW1lIHVuaXQ6IDEvdGltZV91bml0X2Rpdmlzb3IgU2Vjb25kcwotCSAqLwogCXZhbHVlID0gKG1zcl92YWwgJiBFTkVSR1lfVU5JVF9NQVNLKSA+PiBFTkVSR1lfVU5JVF9PRkZTRVQ7Ci0JLyogc29tZSBDUFVzIGhhdmUgZGlmZmVyZW50IHdheSB0byBjYWxjdWxhdGUgZW5lcmd5IHVuaXQgKi8KLQlpZiAoeDg2X21hdGNoX2NwdShlbmVyZ3lfdW5pdF9xdWlya19pZHMpKQotCQlycC0+ZW5lcmd5X3VuaXRfZGl2aXNvciA9IDEwMDAwMDAgLyAoMSA8PCB2YWx1ZSk7Ci0JZWxzZQotCQlycC0+ZW5lcmd5X3VuaXRfZGl2aXNvciA9IDEgPDwgdmFsdWU7CisJcnAtPmVuZXJneV91bml0ID0gMTAwMDAwMCAvICgxIDw8IHZhbHVlKTsKIAogCXZhbHVlID0gKG1zcl92YWwgJiBQT1dFUl9VTklUX01BU0spID4+IFBPV0VSX1VOSVRfT0ZGU0VUOwotCXJwLT5wb3dlcl91bml0X2Rpdmlzb3IgPSAxIDw8IHZhbHVlOworCXJwLT5wb3dlcl91bml0ID0gMTAwMDAwMCAvICgxIDw8IHZhbHVlKTsKIAogCXZhbHVlID0gKG1zcl92YWwgJiBUSU1FX1VOSVRfTUFTSykgPj4gVElNRV9VTklUX09GRlNFVDsKLQlycC0+dGltZV91bml0X2Rpdmlzb3IgPSAxIDw8IHZhbHVlOworCXJwLT50aW1lX3VuaXQgPSAxMDAwMDAwIC8gKDEgPDwgdmFsdWUpOwogCi0JcHJfZGVidWcoIlBoeXNpY2FsIHBhY2thZ2UgJWQgdW5pdHM6IGVuZXJneT0lZCwgdGltZT0lZCwgcG93ZXI9JWRcbiIsCi0JCXJwLT5pZCwKLQkJcnAtPmVuZXJneV91bml0X2Rpdmlzb3IsCi0JCXJwLT50aW1lX3VuaXRfZGl2aXNvciwKLQkJcnAtPnBvd2VyX3VuaXRfZGl2aXNvcik7CisJcHJfZGVidWcoIkNvcmUgQ1BVIHBhY2thZ2UgJWQgZW5lcmd5PSVkdUosIHRpbWU9JWR1cywgcG93ZXI9JWR1V1xuIiwKKwkJcnAtPmlkLCBycC0+ZW5lcmd5X3VuaXQsIHJwLT50aW1lX3VuaXQsIHJwLT5wb3dlcl91bml0KTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJhcGxfY2hlY2tfdW5pdF9hdG9tKHN0cnVjdCByYXBsX3BhY2thZ2UgKnJwLCBpbnQgY3B1KQoreworCXU2NCBtc3JfdmFsOworCXUzMiB2YWx1ZTsKKworCWlmIChyZG1zcmxfc2FmZV9vbl9jcHUoY3B1LCBNU1JfUkFQTF9QT1dFUl9VTklULCAmbXNyX3ZhbCkpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVhZCBwb3dlciB1bml0IE1TUiAweCV4IG9uIENQVSAlZCwgZXhpdC5cbiIsCisJCQlNU1JfUkFQTF9QT1dFUl9VTklULCBjcHUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJdmFsdWUgPSAobXNyX3ZhbCAmIEVORVJHWV9VTklUX01BU0spID4+IEVORVJHWV9VTklUX09GRlNFVDsKKwlycC0+ZW5lcmd5X3VuaXQgPSAxIDw8IHZhbHVlOworCisJdmFsdWUgPSAobXNyX3ZhbCAmIFBPV0VSX1VOSVRfTUFTSykgPj4gUE9XRVJfVU5JVF9PRkZTRVQ7CisJcnAtPnBvd2VyX3VuaXQgPSAoMSA8PCB2YWx1ZSkgKiAxMDAwOworCisJdmFsdWUgPSAobXNyX3ZhbCAmIFRJTUVfVU5JVF9NQVNLKSA+PiBUSU1FX1VOSVRfT0ZGU0VUOworCXJwLT50aW1lX3VuaXQgPSAxMDAwMDAwIC8gKDEgPDwgdmFsdWUpOworCisJcHJfZGVidWcoIkF0b20gcGFja2FnZSAlZCBlbmVyZ3k9JWR1SiwgdGltZT0lZHVzLCBwb3dlcj0lZHVXXG4iLAorCQlycC0+aWQsIHJwLT5lbmVyZ3lfdW5pdCwgcnAtPnRpbWVfdW5pdCwgcnAtPnBvd2VyX3VuaXQpOworCisJcmV0dXJuIDA7Cit9CisKKwogLyogUkVWSVNJVDoKICAqIFdoZW4gcGFja2FnZSBwb3dlciBsaW1pdCBpcyBzZXQgYXJ0aWZpY2lhbGx5IGxvdyBieSBSQVBMLCBMVlQKICAqIHRoZXJtYWwgaW50ZXJydXB0IGZvciBwYWNrYWdlIHBvd2VyIGxpbWl0IHNob3VsZCBiZSBpZ25vcmVkCkBAIC05NDYsMTYgKzk0MSwxMDcgQEAKIAl3cm1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9QQUNLQUdFX1RIRVJNX0lOVEVSUlVQVCwgbCwgaCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9mbG9vcl9mcmVxX2RlZmF1bHQoc3RydWN0IHJhcGxfZG9tYWluICpyZCwgYm9vbCBtb2RlKQoreworCWludCBucl9wb3dlcmxpbWl0ID0gZmluZF9ucl9wb3dlcl9saW1pdChyZCk7CisKKwkvKiBhbHdheXMgZW5hYmxlIGNsYW1wIHN1Y2ggdGhhdCBwLXN0YXRlIGNhbiBnbyBiZWxvdyBPUyByZXF1ZXN0ZWQKKwkgKiByYW5nZS4gcG93ZXIgY2FwcGluZyBwcmlvcml0eSBvdmVyIGd1cmFudGVlZCBmcmVxdWVuY3kuCisJICovCisJcmFwbF93cml0ZV9kYXRhX3JhdyhyZCwgUEwxX0NMQU1QLCBtb2RlKTsKKworCS8qIHNvbWUgZG9tYWlucyBoYXZlIHBsMiAqLworCWlmIChucl9wb3dlcmxpbWl0ID4gMSkgeworCQlyYXBsX3dyaXRlX2RhdGFfcmF3KHJkLCBQTDJfRU5BQkxFLCBtb2RlKTsKKwkJcmFwbF93cml0ZV9kYXRhX3JhdyhyZCwgUEwyX0NMQU1QLCBtb2RlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9mbG9vcl9mcmVxX2F0b20oc3RydWN0IHJhcGxfZG9tYWluICpyZCwgYm9vbCBlbmFibGUpCit7CisJc3RhdGljIHUzMiBwb3dlcl9jdHJsX29yaWdfdmFsOworCXUzMiBtZGF0YTsKKworCWlmICghcG93ZXJfY3RybF9vcmlnX3ZhbCkKKwkJaW9zZl9tYmlfcmVhZChCVF9NQklfVU5JVF9QTUMsIEJUX01CSV9QTUNfUkVBRCwKKwkJCUlPU0ZfQ1BVX1BPV0VSX0JVREdFVF9DVEwsICZwb3dlcl9jdHJsX29yaWdfdmFsKTsKKwltZGF0YSA9IHBvd2VyX2N0cmxfb3JpZ192YWw7CisJaWYgKGVuYWJsZSkgeworCQltZGF0YSAmPSB+KDB4N2YgPDwgOCk7CisJCW1kYXRhIHw9IDEgPDwgODsKKwl9CisJaW9zZl9tYmlfd3JpdGUoQlRfTUJJX1VOSVRfUE1DLCBCVF9NQklfUE1DX1dSSVRFLAorCQlJT1NGX0NQVV9QT1dFUl9CVURHRVRfQ1RMLCBtZGF0YSk7Cit9CisKK3N0YXRpYyB1NjQgcmFwbF9jb21wdXRlX3RpbWVfd2luZG93X2NvcmUoc3RydWN0IHJhcGxfcGFja2FnZSAqcnAsIHU2NCB2YWx1ZSwKKwkJCQkJYm9vbCB0b19yYXcpCit7CisJdTY0IGYsIHk7IC8qIGZyYWN0aW9uIGFuZCBleHAuIHVzZWQgZm9yIHRpbWUgdW5pdCAqLworCisJLyoKKwkgKiBTcGVjaWFsIHByb2Nlc3NpbmcgYmFzZWQgb24gMl5ZKigxK0YvNCksIHJlZmVyCisJICogdG8gSW50ZWwgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgbWFudWFsIFZvbC4zQjogQ0ggMTQuOS4zLgorCSAqLworCWlmICghdG9fcmF3KSB7CisJCWYgPSAodmFsdWUgJiAweDYwKSA+PiA1OworCQl5ID0gdmFsdWUgJiAweDFmOworCQl2YWx1ZSA9ICgxIDw8IHkpICogKDQgKyBmKSAqIHJwLT50aW1lX3VuaXQgLyA0OworCX0gZWxzZSB7CisJCWRvX2Rpdih2YWx1ZSwgcnAtPnRpbWVfdW5pdCk7CisJCXkgPSBpbG9nMih2YWx1ZSk7CisJCWYgPSBkaXY2NF91NjQoNCAqICh2YWx1ZSAtICgxIDw8IHkpKSwgMSA8PCB5KTsKKwkJdmFsdWUgPSAoeSAmIDB4MWYpIHwgKChmICYgMHgzKSA8PCA1KTsKKwl9CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdTY0IHJhcGxfY29tcHV0ZV90aW1lX3dpbmRvd19hdG9tKHN0cnVjdCByYXBsX3BhY2thZ2UgKnJwLCB1NjQgdmFsdWUsCisJCQkJCWJvb2wgdG9fcmF3KQoreworCS8qCisJICogQXRvbSB0aW1lIHVuaXQgZW5jb2RpbmcgaXMgc3RyYWlnaHQgZm9yd2FyZCB2YWwgKiB0aW1lX3VuaXQsCisJICogd2hlcmUgdGltZV91bml0IGlzIGRlZmF1bHQgdG8gMSBzZWMuIE5ldmVyIDAuCisJICovCisJaWYgKCF0b19yYXcpCisJCXJldHVybiAodmFsdWUpID8gdmFsdWUgKj0gcnAtPnRpbWVfdW5pdCA6IHJwLT50aW1lX3VuaXQ7CisJZWxzZQorCQl2YWx1ZSA9IGRpdjY0X3U2NCh2YWx1ZSwgcnAtPnRpbWVfdW5pdCk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmFwbF9kZWZhdWx0cyByYXBsX2RlZmF1bHRzX2NvcmUgPSB7CisJLmNoZWNrX3VuaXQgPSByYXBsX2NoZWNrX3VuaXRfY29yZSwKKwkuc2V0X2Zsb29yX2ZyZXEgPSBzZXRfZmxvb3JfZnJlcV9kZWZhdWx0LAorCS5jb21wdXRlX3RpbWVfd2luZG93ID0gcmFwbF9jb21wdXRlX3RpbWVfd2luZG93X2NvcmUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJhcGxfZGVmYXVsdHMgcmFwbF9kZWZhdWx0c19hdG9tID0geworCS5jaGVja191bml0ID0gcmFwbF9jaGVja191bml0X2F0b20sCisJLnNldF9mbG9vcl9mcmVxID0gc2V0X2Zsb29yX2ZyZXFfYXRvbSwKKwkuY29tcHV0ZV90aW1lX3dpbmRvdyA9IHJhcGxfY29tcHV0ZV90aW1lX3dpbmRvd19hdG9tLAorfTsKKworI2RlZmluZSBSQVBMX0NQVShfbW9kZWwsIF9vcHMpIHsJCQlcCisJCS52ZW5kb3IgPSBYODZfVkVORE9SX0lOVEVMLAkJXAorCQkuZmFtaWx5ID0gNiwJCQkJXAorCQkubW9kZWwgPSBfbW9kZWwsCQkJXAorCQkuZHJpdmVyX2RhdGEgPSAoa2VybmVsX3Vsb25nX3QpJl9vcHMsCVwKKwkJfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9jcHVfaWQgcmFwbF9pZHNbXSA9IHsKLQl7IFg4Nl9WRU5ET1JfSU5URUwsIDYsIDB4MmF9LC8qIFNhbmR5IEJyaWRnZSAqLwotCXsgWDg2X1ZFTkRPUl9JTlRFTCwgNiwgMHgyZH0sLyogU2FuZHkgQnJpZGdlIEVQICovCi0JeyBYODZfVkVORE9SX0lOVEVMLCA2LCAweDM3fSwvKiBWYWxsZXl2aWV3ICovCi0JeyBYODZfVkVORE9SX0lOVEVMLCA2LCAweDNhfSwvKiBJdnkgQnJpZGdlICovCi0JeyBYODZfVkVORE9SX0lOVEVMLCA2LCAweDNjfSwvKiBIYXN3ZWxsICovCi0JeyBYODZfVkVORE9SX0lOVEVMLCA2LCAweDNkfSwvKiBCcm9hZHdlbGwgKi8KLQl7IFg4Nl9WRU5ET1JfSU5URUwsIDYsIDB4M2Z9LC8qIEhhc3dlbGwgKi8KLQl7IFg4Nl9WRU5ET1JfSU5URUwsIDYsIDB4NDV9LC8qIEhhc3dlbGwgVUxUICovCi0JLyogVE9ETzogQWRkIG1vcmUgQ1BVIElEcyBhZnRlciB0ZXN0aW5nICovCisJUkFQTF9DUFUoMHgyYSwgcmFwbF9kZWZhdWx0c19jb3JlKSwvKiBTYW5keSBCcmlkZ2UgKi8KKwlSQVBMX0NQVSgweDJkLCByYXBsX2RlZmF1bHRzX2NvcmUpLC8qIFNhbmR5IEJyaWRnZSBFUCAqLworCVJBUExfQ1BVKDB4MzcsIHJhcGxfZGVmYXVsdHNfYXRvbSksLyogVmFsbGV5dmlldyAqLworCVJBUExfQ1BVKDB4M2EsIHJhcGxfZGVmYXVsdHNfY29yZSksLyogSXZ5IEJyaWRnZSAqLworCVJBUExfQ1BVKDB4M2MsIHJhcGxfZGVmYXVsdHNfY29yZSksLyogSGFzd2VsbCAqLworCVJBUExfQ1BVKDB4M2QsIHJhcGxfZGVmYXVsdHNfY29yZSksLyogQnJvYWR3ZWxsICovCisJUkFQTF9DUFUoMHgzZiwgcmFwbF9kZWZhdWx0c19jb3JlKSwvKiBIYXN3ZWxsICovCisJUkFQTF9DUFUoMHg0NSwgcmFwbF9kZWZhdWx0c19jb3JlKSwvKiBIYXN3ZWxsIFVMVCAqLworCVJBUExfQ1BVKDB4NEMsIHJhcGxfZGVmYXVsdHNfYXRvbSksLyogQnJhc3dlbGwgKi8KKwlSQVBMX0NQVSgweDRBLCByYXBsX2RlZmF1bHRzX2F0b20pLC8qIFRhbmdpZXIgKi8KKwlSQVBMX0NQVSgweDVBLCByYXBsX2RlZmF1bHRzX2F0b20pLC8qIEFubmlkYWxlICovCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHg4NmNwdSwgcmFwbF9pZHMpOwpAQCAtMTI0MSw3ICsxMzI3LDcgQEAKIAogCQkJLyogY2hlY2sgaWYgdGhlIHBhY2thZ2UgY29udGFpbnMgdmFsaWQgZG9tYWlucyAqLwogCQkJaWYgKHJhcGxfZGV0ZWN0X2RvbWFpbnMobmV3X3BhY2thZ2UsIGkpIHx8Ci0JCQkJcmFwbF9jaGVja191bml0KG5ld19wYWNrYWdlLCBpKSkgeworCQkJCXJhcGxfZGVmYXVsdHMtPmNoZWNrX3VuaXQobmV3X3BhY2thZ2UsIGkpKSB7CiAJCQkJa2ZyZWUobmV3X3BhY2thZ2UtPmRvbWFpbnMpOwogCQkJCWtmcmVlKG5ld19wYWNrYWdlKTsKIAkJCQkvKiBmcmVlIHVwIHRoZSBwYWNrYWdlcyBhbHJlYWR5IGluaXRpYWxpemVkICovCkBAIC0xMjk2LDcgKzEzODIsNyBAQAogCXJwLT5ucl9jcHVzID0gMTsKIAkvKiBjaGVjayBpZiB0aGUgcGFja2FnZSBjb250YWlucyB2YWxpZCBkb21haW5zICovCiAJaWYgKHJhcGxfZGV0ZWN0X2RvbWFpbnMocnAsIGNwdSkgfHwKLQkJcmFwbF9jaGVja191bml0KHJwLCBjcHUpKSB7CisJCXJhcGxfZGVmYXVsdHMtPmNoZWNrX3VuaXQocnAsIGNwdSkpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnJfZnJlZV9wYWNrYWdlOwogCX0KQEAgLTEzNTgsMTQgKzE0NDQsMTggQEAKIHN0YXRpYyBpbnQgX19pbml0IHJhcGxfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOworCWNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkICppZDsKIAotCWlmICgheDg2X21hdGNoX2NwdShyYXBsX2lkcykpIHsKKwlpZCA9IHg4Nl9tYXRjaF9jcHUocmFwbF9pZHMpOworCWlmICghaWQpIHsKIAkJcHJfZXJyKCJkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBDUFUgZmFtaWx5ICVkIG1vZGVsICVkXG4iLAogCQkJYm9vdF9jcHVfZGF0YS54ODYsIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsKTsKIAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlyYXBsX2RlZmF1bHRzID0gKHN0cnVjdCByYXBsX2RlZmF1bHRzICopaWQtPmRyaXZlcl9kYXRhOworCiAJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2JlZ2luKCk7CiAKIAkvKiBwcmV2ZW50IENQVSBob3RwbHVnIGR1cmluZyBkZXRlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci84OHBtODYwNy5jCmluZGV4IDZkNzdkY2QuLjNmZTQ3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvODhwbTg2MDcuYwpAQCAtMzMwLDcgKzMzMCw4IEBACiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucHJvb3QsIG5wKSB7CiAJCWlmICghb2Zfbm9kZV9jbXAobnAtPm5hbWUsIGluZm8tPmRlc2MubmFtZSkpIHsKIAkJCWNvbmZpZy0+aW5pdF9kYXRhID0KLQkJCQlvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmcGRldi0+ZGV2LCBucCk7CisJCQkJb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgbnAsCisJCQkJCQkJICAgJmluZm8tPmRlc2MpOwogCQkJY29uZmlnLT5vZl9ub2RlID0gbnA7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKaW5kZXggNTVkN2I3Yi4uYzNhNjBiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCkBAIC01MjEsNiArNTIxLDE0IEBACiAJaGVscAogCSAgU2F5IHkgaGVyZSB0byBzdXBwb3J0IHRoZSByZWd1bGF0b3JzIGZvdW5kIG9uIFJpY29oIFJONVQ2MTggUE1JQy4KIAorY29uZmlnIFJFR1VMQVRPUl9SVDUwMzMKKwl0cmlzdGF0ZSAiUmljaHRlayBSVDUwMzMgUmVndWxhdG9ycyIKKwlkZXBlbmRzIG9uIE1GRF9SVDUwMzMKKwloZWxwCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igdm9sdGFnZSBhbmQgY3VycmVudCByZWd1bGF0b3JzIGluIFJpY2h0ZWsKKwkgIFJUNTAzMyBQTUlDLiBUaGUgZGV2aWNlIHN1cHBvcnRzIG11bHRpcGxlIHJlZ3VsYXRvcnMgbGlrZQorCSAgY3VycmVudCBzb3VyY2UsIExETyBhbmQgQnVjay4KKwogY29uZmlnIFJFR1VMQVRPUl9TMk1QQTAxCiAJdHJpc3RhdGUgIlNhbXN1bmcgUzJNUEEwMSB2b2x0YWdlIHJlZ3VsYXRvciIKIAlkZXBlbmRzIG9uIE1GRF9TRUNfQ09SRQpAQCAtNTI5LDEzICs1MzcsMTMgQEAKIAkgdmlhIEkyQyBidXMuIFMyTVBBMDEgaGFzIDEwIEJ1Y2tzIGFuZCAyNiBMRE8gb3V0cHV0cy4KIAogY29uZmlnIFJFR1VMQVRPUl9TMk1QUzExCi0JdHJpc3RhdGUgIlNhbXN1bmcgUzJNUFMxMS9TMk1QUzE0L1MyTVBVMDIgdm9sdGFnZSByZWd1bGF0b3IiCisJdHJpc3RhdGUgIlNhbXN1bmcgUzJNUFMxMS9TMk1QUzEzL1MyTVBTMTQvUzJNUFUwMiB2b2x0YWdlIHJlZ3VsYXRvciIKIAlkZXBlbmRzIG9uIE1GRF9TRUNfQ09SRQogCWhlbHAKLQkgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYSBTYW1zdW5nIFMyTVBTMTEvUzJNUFMxNC9TMk1QVTAyIHZvbHRhZ2Ugb3V0cHV0Ci0JIHJlZ3VsYXRvciB2aWEgSTJDIGJ1cy4gVGhlIGNoaXAgaXMgY29tcHJpc2VkIG9mIGhpZ2ggZWZmaWNpZW50IEJ1Y2sKLQkgY29udmVydGVycyBpbmNsdWRpbmcgRHVhbC1QaGFzZSBCdWNrIGNvbnZlcnRlciwgQnVjay1Cb29zdCBjb252ZXJ0ZXIsCi0JIHZhcmlvdXMgTERPcy4KKwkgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYSBTYW1zdW5nIFMyTVBTMTEvUzJNUFMxMy9TMk1QUzE0L1MyTVBVMDIgdm9sdGFnZQorCSBvdXRwdXQgcmVndWxhdG9yIHZpYSBJMkMgYnVzLiBUaGUgY2hpcCBpcyBjb21wcmlzZWQgb2YgaGlnaCBlZmZpY2llbnQKKwkgQnVjayBjb252ZXJ0ZXJzIGluY2x1ZGluZyBEdWFsLVBoYXNlIEJ1Y2sgY29udmVydGVyLCBCdWNrLUJvb3N0CisJIGNvbnZlcnRlciwgdmFyaW91cyBMRE9zLgogCiBjb25maWcgUkVHVUxBVE9SX1M1TTg3NjcKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNU04NzY3QSB2b2x0YWdlIHJlZ3VsYXRvciIKQEAgLTU0Nyw3ICs1NTUsNyBAQAogCiBjb25maWcgUkVHVUxBVE9SX1NLWTgxNDUyCiAJdHJpc3RhdGUgIlNreXdvcmtzIFNvbHV0aW9ucyBTS1k4MTQ1MiB2b2x0YWdlIHJlZ3VsYXRvciIKLQlkZXBlbmRzIG9uIFNLWTgxNDUyCisJZGVwZW5kcyBvbiBNRkRfU0tZODE0NTIKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBTa3l3b3JrcyBTS1k4MTQ1MiB2b2x0YWdlIG91dHB1dCByZWd1bGF0b3IKIAkgIHZpYSBJMkMgYnVzLiBTS1k4MTQ1MiBoYXMgb25lIHZvbHRhZ2UgbGluZWFyIHJlZ3VsYXRvciBjYW4gYmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKaW5kZXggMTAyOWVkMy4uMWYyOGViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKQEAgLTY5LDYgKzY5LDcgQEAKIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUkM1VDU4MykgICs9IHJjNXQ1ODMtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUks4MDgpICAgKz0gcms4MDgtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUk41VDYxOCkgKz0gcm41dDYxOC1yZWd1bGF0b3Iubworb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9SVDUwMzMpCSs9IHJ0NTAzMy1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9TMk1QQTAxKSArPSBzMm1wYTAxLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUzJNUFMxMSkgKz0gczJtcHMxMS5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1M1TTg3NjcpICs9IHM1bTg3NjcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2FjdDg4NjUtcmVndWxhdG9yLmMKaW5kZXggYWZkMDZmOS4uOWVlYzQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYWN0ODg2NS1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9hY3Q4ODY1LXJlZ3VsYXRvci5jCkBAIC02MSw2ICs2MSw4IEBACiAjZGVmaW5lCUFDVDg4NDZfUkVHMTJfVlNFVAkweGEwCiAjZGVmaW5lCUFDVDg4NDZfUkVHMTJfQ1RSTAkweGExCiAjZGVmaW5lCUFDVDg4NDZfUkVHMTNfQ1RSTAkweGIxCisjZGVmaW5lCUFDVDg4NDZfR0xCX09GRl9DVFJMCTB4YzMKKyNkZWZpbmUJQUNUODg0Nl9PRkZfU1lTTUFTSwkweDE4CiAKIC8qCiAgKiBBQ1Q4ODY1IEdsb2JhbCBSZWdpc3RlciBNYXAuCkBAIC04NCw2ICs4Niw3IEBACiAjZGVmaW5lCUFDVDg4NjVfTERPM19DVFJMCTB4NjEKICNkZWZpbmUJQUNUODg2NV9MRE80X1ZTRVQJMHg2NAogI2RlZmluZQlBQ1Q4ODY1X0xETzRfQ1RSTAkweDY1CisjZGVmaW5lCUFDVDg4NjVfTVNUUk9GRgkJMHgyMAogCiAvKgogICogRmllbGQgRGVmaW5pdGlvbnMuCkBAIC05OCw2ICsxMDEsOCBAQAogCiBzdHJ1Y3QgYWN0ODg2NSB7CiAJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCWludCBvZmZfcmVnOworCWludCBvZmZfbWFzazsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBhY3Q4ODY1X3JlZ21hcF9jb25maWcgPSB7CkBAIC0yNzUsNiArMjgwLDE2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqYWN0ODg2NV9pMmNfY2xpZW50Oworc3RhdGljIHZvaWQgYWN0ODg2NV9wb3dlcl9vZmYodm9pZCkKK3sKKwlzdHJ1Y3QgYWN0ODg2NSAqYWN0ODg2NTsKKworCWFjdDg4NjUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYWN0ODg2NV9pMmNfY2xpZW50KTsKKwlyZWdtYXBfd3JpdGUoYWN0ODg2NS0+cmVnbWFwLCBhY3Q4ODY1LT5vZmZfcmVnLCBhY3Q4ODY1LT5vZmZfbWFzayk7CisJd2hpbGUgKDEpOworfQorCiBzdGF0aWMgaW50IGFjdDg4NjVfcG1pY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmkyY19pZCkKIHsKQEAgLTI4NSw2ICszMDAsNyBAQAogCWludCBpLCByZXQsIG51bV9yZWd1bGF0b3JzOwogCXN0cnVjdCBhY3Q4ODY1ICphY3Q4ODY1OwogCXVuc2lnbmVkIGxvbmcgdHlwZTsKKwlpbnQgb2ZmX3JlZywgb2ZmX21hc2s7CiAKIAlwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoZGV2KTsKIApAQCAtMzA0LDEwICszMjAsMTQgQEAKIAljYXNlIEFDVDg4NDY6CiAJCXJlZ3VsYXRvcnMgPSBhY3Q4ODQ2X3JlZ3VsYXRvcnM7CiAJCW51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShhY3Q4ODQ2X3JlZ3VsYXRvcnMpOworCQlvZmZfcmVnID0gQUNUODg0Nl9HTEJfT0ZGX0NUUkw7CisJCW9mZl9tYXNrID0gQUNUODg0Nl9PRkZfU1lTTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBBQ1Q4ODY1OgogCQlyZWd1bGF0b3JzID0gYWN0ODg2NV9yZWd1bGF0b3JzOwogCQludW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUoYWN0ODg2NV9yZWd1bGF0b3JzKTsKKwkJb2ZmX3JlZyA9IEFDVDg4NjVfU1lTX0NUUkw7CisJCW9mZl9tYXNrID0gQUNUODg2NV9NU1RST0ZGOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGRldiwgImludmFsaWQgZGV2aWNlIGlkICVsdVxuIiwgdHlwZSk7CkBAIC0zNDUsNiArMzY1LDE3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJaWYgKG9mX2RldmljZV9pc19zeXN0ZW1fcG93ZXJfY29udHJvbGxlcihkZXYtPm9mX25vZGUpKSB7CisJCWlmICghcG1fcG93ZXJfb2ZmKSB7CisJCQlhY3Q4ODY1X2kyY19jbGllbnQgPSBjbGllbnQ7CisJCQlhY3Q4ODY1LT5vZmZfcmVnID0gb2ZmX3JlZzsKKwkJCWFjdDg4NjUtPm9mZl9tYXNrID0gb2ZmX21hc2s7CisJCQlwbV9wb3dlcl9vZmYgPSBhY3Q4ODY1X3Bvd2VyX29mZjsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHNldCBwb3dlcm9mZiBjYXBhYmlsaXR5LCBhbHJlYWR5IGRlZmluZWRcbiIpOworCQl9CisJfQorCiAJLyogRmluYWxseSByZWdpc3RlciBkZXZpY2VzICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9yZWd1bGF0b3JzOyBpKyspIHsKIAkJY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjID0gJnJlZ3VsYXRvcnNbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9hbmF0b3AtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9hbmF0b3AtcmVndWxhdG9yLmMKaW5kZXggNGY3MzBhZi4uMzU4NjU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYW5hdG9wLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2FuYXRvcC1yZWd1bGF0b3IuYwpAQCAtMTg5LDE3ICsxODksMTggQEAKIAlpbnQgcmV0ID0gMDsKIAl1MzIgdmFsOwogCi0JaW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wKTsKIAlzcmVnID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzcmVnKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzcmVnKQogCQlyZXR1cm4gLUVOT01FTTsKLQlzcmVnLT5pbml0ZGF0YSA9IGluaXRkYXRhOwogCXNyZWctPm5hbWUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWd1bGF0b3ItbmFtZSIsIE5VTEwpOwogCXJkZXNjID0gJnNyZWctPnJkZXNjOwogCXJkZXNjLT5uYW1lID0gc3JlZy0+bmFtZTsKIAlyZGVzYy0+dHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFOwogCXJkZXNjLT5vd25lciA9IFRISVNfTU9EVUxFOwogCisJaW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wLCByZGVzYyk7CisJc3JlZy0+aW5pdGRhdGEgPSBpbml0ZGF0YTsKKwogCWFuYXRvcF9ucCA9IG9mX2dldF9wYXJlbnQobnApOwogCWlmICghYW5hdG9wX25wKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTI4Myw2ICsyODQsMTkgQEAKIAkJCXNyZWctPnNlbCA9IDA7CiAJCQlzcmVnLT5ieXBhc3MgPSB0cnVlOwogCQl9CisKKwkJLyoKKwkJICogSW4gY2FzZSB2ZGRwdSB3YXMgZGlzYWJsZWQgYnkgdGhlIGJvb3Rsb2FkZXIsIHdlIG5lZWQgdG8gc2V0CisJCSAqIGEgc2FuZSBkZWZhdWx0IHVudGlsIGlteDYtY3B1ZnJlcSB3YXMgcHJvYmVkIGFuZCBjaGFuZ2VzIHRoZQorCQkgKiB2b2x0YWdlIHRvIHRoZSBjb3JyZWN0IHZhbHVlLiBJbiB0aGlzIGNhc2Ugd2Ugc2V0IDEuMjVWLgorCQkgKi8KKwkJaWYgKCFzcmVnLT5zZWwgJiYgIXN0cmNtcChzcmVnLT5uYW1lLCAidmRkcHUiKSkKKwkJCXNyZWctPnNlbCA9IDIyOworCisJCWlmICghc3JlZy0+c2VsKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBhIHZhbGlkIGRlZmF1bHQgdm9sdGFnZSBzZWxlY3Rvci5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAl9IGVsc2UgewogCQlyZGVzYy0+b3BzID0gJmFuYXRvcF9yb3BzOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2FyaXpvbmEtbGRvMS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1sZG8xLmMKaW5kZXggNGM5ZGI1OC4uZDA3MWIyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1sZG8xLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1sZG8xLmMKQEAgLTE3OSw3ICsxNzksOCBAQAogfTsKIAogc3RhdGljIGludCBhcml6b25hX2xkbzFfb2ZfZ2V0X3BkYXRhKHN0cnVjdCBhcml6b25hICphcml6b25hLAotCQkJCSAgICAgc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgKmNvbmZpZykKKwkJCQkgICAgIHN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGFyaXpvbmFfcGRhdGEgKnBkYXRhID0gJmFyaXpvbmEtPnBkYXRhOwogCXN0cnVjdCBhcml6b25hX2xkbzEgKmxkbzEgPSBjb25maWctPmRyaXZlcl9kYXRhOwpAQCAtMTk0LDcgKzE5NSw4IEBACiAJaWYgKGluaXRfbm9kZSkgewogCQljb25maWctPm9mX25vZGUgPSBpbml0X25vZGU7CiAKLQkJaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoYXJpem9uYS0+ZGV2LCBpbml0X25vZGUpOworCQlpbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShhcml6b25hLT5kZXYsIGluaXRfbm9kZSwKKwkJCQkJCSAgICAgICBkZXNjKTsKIAogCQlpZiAoaW5pdF9kYXRhKSB7CiAJCQlpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzID0gJmxkbzEtPnN1cHBseTsKQEAgLTI1Nyw5ICsyNTksMTEgQEAKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19PRikpIHsKIAkJaWYgKCFkZXZfZ2V0X3BsYXRkYXRhKGFyaXpvbmEtPmRldikpIHsKLQkJCXJldCA9IGFyaXpvbmFfbGRvMV9vZl9nZXRfcGRhdGEoYXJpem9uYSwgJmNvbmZpZyk7CisJCQlyZXQgPSBhcml6b25hX2xkbzFfb2ZfZ2V0X3BkYXRhKGFyaXpvbmEsICZjb25maWcsIGRlc2MpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKKworCQkJY29uZmlnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYXJpem9uYS1taWNzdXBwLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9hcml6b25hLW1pY3N1cHAuYwppbmRleCBjZTlhY2E1Li5jMzEzZWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9hcml6b25hLW1pY3N1cHAuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9hcml6b25hLW1pY3N1cHAuYwpAQCAtMTk4LDcgKzE5OCw4IEBACiB9OwogCiBzdGF0aWMgaW50IGFyaXpvbmFfbWljc3VwcF9vZl9nZXRfcGRhdGEoc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEsCi0JCQkJCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcpCisJCQkJCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcsCisJCQkJCWNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgYXJpem9uYV9wZGF0YSAqcGRhdGEgPSAmYXJpem9uYS0+cGRhdGE7CiAJc3RydWN0IGFyaXpvbmFfbWljc3VwcCAqbWljc3VwcCA9IGNvbmZpZy0+ZHJpdmVyX2RhdGE7CkBAIC0yMTAsNyArMjExLDcgQEAKIAlpZiAobnApIHsKIAkJY29uZmlnLT5vZl9ub2RlID0gbnA7CiAKLQkJaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoYXJpem9uYS0+ZGV2LCBucCk7CisJCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGFyaXpvbmEtPmRldiwgbnAsIGRlc2MpOwogCiAJCWlmIChpbml0X2RhdGEpIHsKIAkJCWluaXRfZGF0YS0+Y29uc3VtZXJfc3VwcGxpZXMgPSAmbWljc3VwcC0+c3VwcGx5OwpAQCAtMjY0LDcgKzI2NSw4IEBACiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpKSB7CiAJCWlmICghZGV2X2dldF9wbGF0ZGF0YShhcml6b25hLT5kZXYpKSB7Ci0JCQlyZXQgPSBhcml6b25hX21pY3N1cHBfb2ZfZ2V0X3BkYXRhKGFyaXpvbmEsICZjb25maWcpOworCQkJcmV0ID0gYXJpem9uYV9taWNzdXBwX29mX2dldF9wZGF0YShhcml6b25hLCAmY29uZmlnLAorCQkJCQkJCSAgIGRlc2MpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IGNkODdjMGMuLmUyMjU3MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTgyOCw3ICs4MjgsNyBAQAogCWlmICghY291bnQpCiAJCXNwcmludGYoYnVmLCAibm8gcGFyYW1ldGVycyIpOwogCi0JcmRldl9pbmZvKHJkZXYsICIlc1xuIiwgYnVmKTsKKwlyZGV2X2RiZyhyZGV2LCAiJXNcbiIsIGJ1Zik7CiAKIAlpZiAoKGNvbnN0cmFpbnRzLT5taW5fdVYgIT0gY29uc3RyYWludHMtPm1heF91VikgJiYKIAkgICAgIShjb25zdHJhaW50cy0+dmFsaWRfb3BzX21hc2sgJiBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UpKQpAQCAtMTcxMyw2ICsxNzEzLDggQEAKIAkJCQlncGlvZF9wdXQocGluLT5ncGlvZCk7CiAJCQkJbGlzdF9kZWwoJnBpbi0+bGlzdCk7CiAJCQkJa2ZyZWUocGluKTsKKwkJCQlyZGV2LT5lbmFfcGluID0gTlVMTDsKKwkJCQlyZXR1cm47CiAJCQl9IGVsc2UgewogCQkJCXBpbi0+cmVxdWVzdF9jb3VudC0tOwogCQkJfQpAQCAtMTk3Niw5ICsxOTc4LDE4IEBACiAKIAkJLyogd2UgYXJlIGxhc3QgdXNlciAqLwogCQlpZiAoX3JlZ3VsYXRvcl9jYW5fY2hhbmdlX3N0YXR1cyhyZGV2KSkgeworCQkJcmV0ID0gX25vdGlmaWVyX2NhbGxfY2hhaW4ocmRldiwKKwkJCQkJCSAgIFJFR1VMQVRPUl9FVkVOVF9QUkVfRElTQUJMRSwKKwkJCQkJCSAgIE5VTEwpOworCQkJaWYgKHJldCAmIE5PVElGWV9TVE9QX01BU0spCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJCXJldCA9IF9yZWd1bGF0b3JfZG9fZGlzYWJsZShyZGV2KTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBkaXNhYmxlXG4iKTsKKwkJCQlfbm90aWZpZXJfY2FsbF9jaGFpbihyZGV2LAorCQkJCQkJUkVHVUxBVE9SX0VWRU5UX0FCT1JUX0RJU0FCTEUsCisJCQkJCQlOVUxMKTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQkJX25vdGlmaWVyX2NhbGxfY2hhaW4ocmRldiwgUkVHVUxBVE9SX0VWRU5UX0RJU0FCTEUsCkBAIC0yMDM1LDkgKzIwNDYsMTYgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAorCXJldCA9IF9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9GT1JDRV9ESVNBQkxFIHwKKwkJCVJFR1VMQVRPUl9FVkVOVF9QUkVfRElTQUJMRSwgTlVMTCk7CisJaWYgKHJldCAmIE5PVElGWV9TVE9QX01BU0spCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0ID0gX3JlZ3VsYXRvcl9kb19kaXNhYmxlKHJkZXYpOwogCWlmIChyZXQgPCAwKSB7CiAJCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gZm9yY2UgZGlzYWJsZVxuIik7CisJCV9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9GT1JDRV9ESVNBQkxFIHwKKwkJCQlSRUdVTEFUT1JfRVZFTlRfQUJPUlRfRElTQUJMRSwgTlVMTCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0zNjUwLDcgKzM2NjgsOCBAQAogCiAJZGV2X3NldF9kcnZkYXRhKCZyZGV2LT5kZXYsIHJkZXYpOwogCi0JaWYgKGNvbmZpZy0+ZW5hX2dwaW8gJiYgZ3Bpb19pc192YWxpZChjb25maWctPmVuYV9ncGlvKSkgeworCWlmICgoY29uZmlnLT5lbmFfZ3BpbyB8fCBjb25maWctPmVuYV9ncGlvX2luaXRpYWxpemVkKSAmJgorCSAgICBncGlvX2lzX3ZhbGlkKGNvbmZpZy0+ZW5hX2dwaW8pKSB7CiAJCXJldCA9IHJlZ3VsYXRvcl9lbmFfZ3Bpb19yZXF1ZXN0KHJkZXYsIGNvbmZpZyk7CiAJCWlmIChyZXQgIT0gMCkgewogCQkJcmRldl9lcnIocmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGVuYWJsZSBHUElPJWQ6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDUyLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDUyLXJlZ3VsYXRvci5jCmluZGV4IDAwMDMzNjIuLjM5NDVmMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTA1Mi1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwNTItcmVndWxhdG9yLmMKQEAgLTQzNiw3ICs0MzYsOCBAQAogCQkJaWYgKCFvZl9ub2RlX2NtcChucC0+bmFtZSwKIAkJCQkJIHJlZ3VsYXRvci0+aW5mby0+cmVnX2Rlc2MubmFtZSkpIHsKIAkJCQljb25maWcuaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoCi0JCQkJCSZwZGV2LT5kZXYsIG5wKTsKKwkJCQkJJnBkZXYtPmRldiwgbnAsCisJCQkJCSZyZWd1bGF0b3ItPmluZm8tPnJlZ19kZXNjKTsKIAkJCQljb25maWcub2Zfbm9kZSA9IG5wOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDYzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDYzLXJlZ3VsYXRvci5jCmluZGV4IDdjOTQ2MWQuLjM3ZGQ0MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTA2My1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwNjMtcmVndWxhdG9yLmMKQEAgLTg2NywxNyArODY3LDE0IEBACiAJCXJldHVybiBpcnE7CiAJfQogCi0JcmVndWxhdG9ycy0+aXJxX2xkb19saW0gPSByZWdtYXBfaXJxX2dldF92aXJxKGRhOTA2My0+cmVnbWFwX2lycSwgaXJxKTsKLQlpZiAocmVndWxhdG9ycy0+aXJxX2xkb19saW0gPj0gMCkgewotCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShyZWd1bGF0b3JzLT5pcnFfbGRvX2xpbSwKLQkJCQkJICAgTlVMTCwgZGE5MDYzX2xkb19saW1fZXZlbnQsCi0JCQkJCSAgIElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsCi0JCQkJCSAgICJMRE9fTElNIiwgcmVndWxhdG9ycyk7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkJIkZhaWxlZCB0byByZXF1ZXN0IExET19MSU0gSVJRLlxuIik7Ci0JCQlyZWd1bGF0b3JzLT5pcnFfbGRvX2xpbSA9IC1FTlhJTzsKLQkJfQorCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGlycSwKKwkJCQlOVUxMLCBkYTkwNjNfbGRvX2xpbV9ldmVudCwKKwkJCQlJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULAorCQkJCSJMRE9fTElNIiwgcmVndWxhdG9ycyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkZhaWxlZCB0byByZXF1ZXN0IExET19MSU0gSVJRLlxuIik7CisJCXJlZ3VsYXRvcnMtPmlycV9sZG9fbGltID0gLUVOWElPOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZGE5MjEwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MjEwLXJlZ3VsYXRvci5jCmluZGV4IDdhMzIwZGQuLmJjNjEwMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTIxMC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9kYTkyMTAtcmVndWxhdG9yLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCiAJY29uZmlnLmRldiA9ICZpMmMtPmRldjsKIAljb25maWcuaW5pdF9kYXRhID0gcGRhdGEgPyAmcGRhdGEtPmRhOTIxMF9jb25zdHJhaW50cyA6Ci0JCW9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgZGV2LT5vZl9ub2RlKTsKKwkJb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUsICZkYTkyMTBfcmVnKTsKIAljb25maWcuZHJpdmVyX2RhdGEgPSBjaGlwOwogCWNvbmZpZy5yZWdtYXAgPSBjaGlwLT5yZWdtYXA7CiAJY29uZmlnLm9mX25vZGUgPSBkZXYtPm9mX25vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9kdW1teS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZHVtbXkuYwppbmRleCAyNDM2ZGI5Li43YWVmOWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9kdW1teS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGR1bW15X29wczsKIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyBkdW1teV9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBkdW1teV9kZXNjID0gewogCS5uYW1lID0gInJlZ3VsYXRvci1kdW1teSIsCiAJLmlkID0gLTEsCiAJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2ZhbjUzNTU1LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9mYW41MzU1NS5jCmluZGV4IGY4ZTQyNTcuLjZjNDNhYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2ZhbjUzNTU1LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZmFuNTM1NTUuYwpAQCAtMzAyLDcgKzMwMiw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGZhbjUzNTU1X3BsYXRmb3JtX2RhdGEgKmZhbjUzNTU1X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQorCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGZhbjUzNTU1X3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCWludCByZXQ7CkBAIC0zMTIsNyArMzEzLDcgQEAKIAlpZiAoIXBkYXRhKQogCQlyZXR1cm4gTlVMTDsKIAotCXBkYXRhLT5yZWd1bGF0b3IgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wKTsKKwlwZGF0YS0+cmVndWxhdG9yID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBucCwgZGVzYyk7CiAKIAlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImZjcyxzdXNwZW5kLXZvbHRhZ2Utc2VsZWN0b3IiLAogCQkJCSAgICZ0bXApOwpAQCAtMzQ3LDIwICszNDgsMjAgQEAKIAl1bnNpZ25lZCBpbnQgdmFsOwogCWludCByZXQ7CiAKKwlkaSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZihzdHJ1Y3QgZmFuNTM1NTVfZGV2aWNlX2luZm8pLAorCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWRpKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmY2xpZW50LT5kZXYpOwogCWlmICghcGRhdGEpCi0JCXBkYXRhID0gZmFuNTM1NTVfcGFyc2VfZHQoJmNsaWVudC0+ZGV2LCBucCk7CisJCXBkYXRhID0gZmFuNTM1NTVfcGFyc2VfZHQoJmNsaWVudC0+ZGV2LCBucCwgJmRpLT5kZXNjKTsKIAogCWlmICghcGRhdGEgfHwgIXBkYXRhLT5yZWd1bGF0b3IpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJQbGF0Zm9ybSBkYXRhIG5vdCBmb3VuZCFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkaSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZihzdHJ1Y3QgZmFuNTM1NTVfZGV2aWNlX2luZm8pLAotCQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWRpKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCWRpLT5yZWd1bGF0b3IgPSBwZGF0YS0+cmVndWxhdG9yOwogCWlmIChjbGllbnQtPmRldi5vZl9ub2RlKSB7CiAJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKaW5kZXggMzU0MTA1ZS4uZDIxZGEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCkBAIC00MCwxMyArNDAsMTUgQEAKIC8qKgogICogb2ZfZ2V0X2ZpeGVkX3ZvbHRhZ2VfY29uZmlnIC0gZXh0cmFjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyBzdHJ1Y3R1cmUgaW5mbwogICogQGRldjogZGV2aWNlIHJlcXVlc3RpbmcgZm9yIGZpeGVkX3ZvbHRhZ2VfY29uZmlnCisgKiBAZGVzYzogcmVndWxhdG9yIGRlc2NyaXB0aW9uCiAgKgogICogUG9wdWxhdGVzIGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHN0cnVjdHVyZSBieSBleHRyYWN0aW5nIGRhdGEgZnJvbSBkZXZpY2UKICAqIHRyZWUgbm9kZSwgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBvcHVsYXRlZCBzdHJ1Y3R1cmUgb2YgTlVMTCBpZiBtZW1vcnkKICAqIGFsbG9jIGZhaWxzLgogICovCiBzdGF0aWMgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnICoKLW9mX2dldF9maXhlZF92b2x0YWdlX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYpCitvZl9nZXRfZml4ZWRfdm9sdGFnZV9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgKmNvbmZpZzsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwpAQCAtNTcsNyArNTksNyBAQAogCWlmICghY29uZmlnKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWNvbmZpZy0+aW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUpOworCWNvbmZpZy0+aW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUsIGRlc2MpOwogCWlmICghY29uZmlnLT5pbml0X2RhdGEpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCkBAIC0xMTIsOCArMTE0LDE0IEBACiAJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY2ZnID0geyB9OwogCWludCByZXQ7CiAKKwlkcnZkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9kYXRhKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRydmRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCiAJaWYgKHBkZXYtPmRldi5vZl9ub2RlKSB7Ci0JCWNvbmZpZyA9IG9mX2dldF9maXhlZF92b2x0YWdlX2NvbmZpZygmcGRldi0+ZGV2KTsKKwkJY29uZmlnID0gb2ZfZ2V0X2ZpeGVkX3ZvbHRhZ2VfY29uZmlnKCZwZGV2LT5kZXYsCisJCQkJCQkgICAgICZkcnZkYXRhLT5kZXNjKTsKIAkJaWYgKElTX0VSUihjb25maWcpKQogCQkJcmV0dXJuIFBUUl9FUlIoY29uZmlnKTsKIAl9IGVsc2UgewpAQCAtMTIzLDExICsxMzEsNiBAQAogCWlmICghY29uZmlnKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRydmRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBmaXhlZF92b2x0YWdlX2RhdGEpLAotCQkJICAgICAgIEdGUF9LRVJORUwpOwotCWlmICghZHJ2ZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAlkcnZkYXRhLT5kZXNjLm5hbWUgPSBkZXZtX2tzdHJkdXAoJnBkZXYtPmRldiwKIAkJCQkJICBjb25maWctPnN1cHBseV9uYW1lLAogCQkJCQkgIEdGUF9LRVJORUwpOwpAQCAtMTU3LDggKzE2MCwxMSBAQAogCiAJZHJ2ZGF0YS0+ZGVzYy5maXhlZF91ViA9IGNvbmZpZy0+bWljcm92b2x0czsKIAotCWlmIChjb25maWctPmdwaW8gPj0gMCkKKwlpZiAoZ3Bpb19pc192YWxpZChjb25maWctPmdwaW8pKSB7CiAJCWNmZy5lbmFfZ3BpbyA9IGNvbmZpZy0+Z3BpbzsKKwkJaWYgKHBkZXYtPmRldi5vZl9ub2RlKQorCQkJY2ZnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKKwl9CiAJY2ZnLmVuYV9ncGlvX2ludmVydCA9ICFjb25maWctPmVuYWJsZV9oaWdoOwogCWlmIChjb25maWctPmVuYWJsZWRfYXRfYm9vdCkgewogCQlpZiAoY29uZmlnLT5lbmFibGVfaGlnaCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2dwaW8tcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9ncGlvLXJlZ3VsYXRvci5jCmluZGV4IDk4OWIyM2IuLmM4ODhhOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2dwaW8tcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZ3Bpby1yZWd1bGF0b3IuYwpAQCAtMTMzLDcgKzEzMyw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGdwaW9fcmVndWxhdG9yX2NvbmZpZyAqCi1vZl9nZXRfZ3Bpb19yZWd1bGF0b3JfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK29mX2dldF9ncGlvX3JlZ3VsYXRvcl9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGdwaW9fcmVndWxhdG9yX2NvbmZpZyAqY29uZmlnOwogCWNvbnN0IGNoYXIgKnJlZ3R5cGU7CkBAIC0xNDYsNyArMTQ3LDcgQEAKIAlpZiAoIWNvbmZpZykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQljb25maWctPmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgbnApOworCWNvbmZpZy0+aW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBucCwgZGVzYyk7CiAJaWYgKCFjb25maWctPmluaXRfZGF0YSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKQEAgLTE2MiwzNCArMTYzLDQxIEBACiAKIAljb25maWctPmVuYWJsZV9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8obnAsICJlbmFibGUtZ3BpbyIsIDApOwogCi0JLyogRmV0Y2ggR1BJT3MuICovCi0JY29uZmlnLT5ucl9ncGlvcyA9IG9mX2dwaW9fY291bnQobnApOworCS8qIEZldGNoIEdQSU9zLiAtIG9wdGlvbmFsIHByb3BlcnR5Ki8KKwlyZXQgPSBvZl9ncGlvX2NvdW50KG5wKTsKKwlpZiAoKHJldCA8IDApICYmIChyZXQgIT0gLUVOT0VOVCkpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CiAKLQljb25maWctPmdwaW9zID0gZGV2bV9remFsbG9jKGRldiwKLQkJCQlzaXplb2Yoc3RydWN0IGdwaW8pICogY29uZmlnLT5ucl9ncGlvcywKLQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbmZpZy0+Z3Bpb3MpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWlmIChyZXQgPiAwKSB7CisJCWNvbmZpZy0+bnJfZ3Bpb3MgPSByZXQ7CisJCWNvbmZpZy0+Z3Bpb3MgPSBkZXZtX2t6YWxsb2MoZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IGdwaW8pICogY29uZmlnLT5ucl9ncGlvcywKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghY29uZmlnLT5ncGlvcykKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JcHJvcGxlbiA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhucCwgImdwaW9zLXN0YXRlcyIpOwotCS8qIG9wdGlvbmFsIHByb3BlcnR5ICovCi0JaWYgKHByb3BsZW4gPCAwKQotCQlwcm9wbGVuID0gMDsKKwkJcHJvcGxlbiA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhucCwgImdwaW9zLXN0YXRlcyIpOworCQkvKiBvcHRpb25hbCBwcm9wZXJ0eSAqLworCQlpZiAocHJvcGxlbiA8IDApCisJCQlwcm9wbGVuID0gMDsKIAotCWlmIChwcm9wbGVuID4gMCAmJiBwcm9wbGVuICE9IGNvbmZpZy0+bnJfZ3Bpb3MpIHsKLQkJZGV2X3dhcm4oZGV2LCAiZ3Bpb3MgPC0+IGdwaW9zLXN0YXRlcyBtaXNtYXRjaFxuIik7Ci0JCXByb3BsZW4gPSAwOwotCX0KKwkJaWYgKHByb3BsZW4gPiAwICYmIHByb3BsZW4gIT0gY29uZmlnLT5ucl9ncGlvcykgeworCQkJZGV2X3dhcm4oZGV2LCAiZ3Bpb3MgPC0+IGdwaW9zLXN0YXRlcyBtaXNtYXRjaFxuIik7CisJCQlwcm9wbGVuID0gMDsKKwkJfQogCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+bnJfZ3Bpb3M7IGkrKykgewotCQlncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8obnAsICJncGlvcyIsIGkpOwotCQlpZiAoZ3BpbyA8IDApCi0JCQlicmVhazsKLQkJY29uZmlnLT5ncGlvc1tpXS5ncGlvID0gZ3BpbzsKLQkJaWYgKHByb3BsZW4gPiAwKSB7Ci0JCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgImdwaW9zLXN0YXRlcyIsIGksICZyZXQpOwotCQkJaWYgKHJldCkKLQkJCQljb25maWctPmdwaW9zW2ldLmZsYWdzID0gR1BJT0ZfT1VUX0lOSVRfSElHSDsKKwkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+bnJfZ3Bpb3M7IGkrKykgeworCQkJZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG5wLCAiZ3Bpb3MiLCBpKTsKKwkJCWlmIChncGlvIDwgMCkKKwkJCQlicmVhazsKKwkJCWNvbmZpZy0+Z3Bpb3NbaV0uZ3BpbyA9IGdwaW87CisJCQlpZiAocHJvcGxlbiA+IDApIHsKKwkJCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgImdwaW9zLXN0YXRlcyIsCisJCQkJCQkJICAgaSwgJnJldCk7CisJCQkJaWYgKHJldCkKKwkJCQkJY29uZmlnLT5ncGlvc1tpXS5mbGFncyA9CisJCQkJCQkJICAgR1BJT0ZfT1VUX0lOSVRfSElHSDsKKwkJCX0KIAkJfQogCX0KIApAQCAtMjQzLDE3ICsyNTEsMTggQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyBjZmcgPSB7IH07CiAJaW50IHB0ciwgcmV0LCBzdGF0ZTsKIAotCWlmIChucCkgewotCQljb25maWcgPSBvZl9nZXRfZ3Bpb19yZWd1bGF0b3JfY29uZmlnKCZwZGV2LT5kZXYsIG5wKTsKLQkJaWYgKElTX0VSUihjb25maWcpKQotCQkJcmV0dXJuIFBUUl9FUlIoY29uZmlnKTsKLQl9Ci0KIAlkcnZkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZ3Bpb19yZWd1bGF0b3JfZGF0YSksCiAJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKGRydmRhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAobnApIHsKKwkJY29uZmlnID0gb2ZfZ2V0X2dwaW9fcmVndWxhdG9yX2NvbmZpZygmcGRldi0+ZGV2LCBucCwKKwkJCQkJCSAgICAgICZkcnZkYXRhLT5kZXNjKTsKKwkJaWYgKElTX0VSUihjb25maWcpKQorCQkJcmV0dXJuIFBUUl9FUlIoY29uZmlnKTsKKwl9CisKIAlkcnZkYXRhLT5kZXNjLm5hbWUgPSBrc3RyZHVwKGNvbmZpZy0+c3VwcGx5X25hbWUsIEdGUF9LRVJORUwpOwogCWlmIChkcnZkYXRhLT5kZXNjLm5hbWUgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc3VwcGx5IG5hbWVcbiIpOwpAQCAtMjYxLDEzICsyNzAsMjMgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JZHJ2ZGF0YS0+Z3Bpb3MgPSBrbWVtZHVwKGNvbmZpZy0+Z3Bpb3MsCi0JCQkJIGNvbmZpZy0+bnJfZ3Bpb3MgKiBzaXplb2Yoc3RydWN0IGdwaW8pLAotCQkJCSBHRlBfS0VSTkVMKTsKLQlpZiAoZHJ2ZGF0YS0+Z3Bpb3MgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgZ3BpbyBkYXRhXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfbmFtZTsKKwlpZiAoY29uZmlnLT5ucl9ncGlvcyAhPSAwKSB7CisJCWRydmRhdGEtPmdwaW9zID0ga21lbWR1cChjb25maWctPmdwaW9zLAorCQkJCQkgY29uZmlnLT5ucl9ncGlvcyAqIHNpemVvZihzdHJ1Y3QgZ3BpbyksCisJCQkJCSBHRlBfS0VSTkVMKTsKKwkJaWYgKGRydmRhdGEtPmdwaW9zID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBncGlvIGRhdGFcbiIpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX25hbWU7CisJCX0KKworCQlkcnZkYXRhLT5ucl9ncGlvcyA9IGNvbmZpZy0+bnJfZ3Bpb3M7CisJCXJldCA9IGdwaW9fcmVxdWVzdF9hcnJheShkcnZkYXRhLT5ncGlvcywgZHJ2ZGF0YS0+bnJfZ3Bpb3MpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiQ291bGQgbm90IG9idGFpbiByZWd1bGF0b3Igc2V0dGluZyBHUElPczogJWRcbiIsIHJldCk7CisJCQlnb3RvIGVycl9tZW1zdGF0ZTsKKwkJfQogCX0KIAogCWRydmRhdGEtPnN0YXRlcyA9IGttZW1kdXAoY29uZmlnLT5zdGF0ZXMsCkBAIC0zMDEsMTQgKzMyMCw2IEBACiAJCWdvdG8gZXJyX21lbWdwaW87CiAJfQogCi0JZHJ2ZGF0YS0+bnJfZ3Bpb3MgPSBjb25maWctPm5yX2dwaW9zOwotCXJldCA9IGdwaW9fcmVxdWVzdF9hcnJheShkcnZkYXRhLT5ncGlvcywgZHJ2ZGF0YS0+bnJfZ3Bpb3MpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkgICAiQ291bGQgbm90IG9idGFpbiByZWd1bGF0b3Igc2V0dGluZyBHUElPczogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX21lbXN0YXRlOwotCX0KLQogCS8qIGJ1aWxkIGluaXRpYWwgc3RhdGUgZnJvbSBncGlvIGluaXQgZGF0YS4gKi8KIAlzdGF0ZSA9IDA7CiAJZm9yIChwdHIgPSAwOyBwdHIgPCBkcnZkYXRhLT5ucl9ncGlvczsgcHRyKyspIHsKQEAgLTMyMiw4ICszMzMsMTAgQEAKIAljZmcuZHJpdmVyX2RhdGEgPSBkcnZkYXRhOwogCWNmZy5vZl9ub2RlID0gbnA7CiAKLQlpZiAoY29uZmlnLT5lbmFibGVfZ3BpbyA+PSAwKQorCWlmIChncGlvX2lzX3ZhbGlkKGNvbmZpZy0+ZW5hYmxlX2dwaW8pKSB7CiAJCWNmZy5lbmFfZ3BpbyA9IGNvbmZpZy0+ZW5hYmxlX2dwaW87CisJCWNmZy5lbmFfZ3Bpb19pbml0aWFsaXplZCA9IHRydWU7CisJfQogCWNmZy5lbmFfZ3Bpb19pbnZlcnQgPSAhY29uZmlnLT5lbmFibGVfaGlnaDsKIAlpZiAoY29uZmlnLT5lbmFibGVkX2F0X2Jvb3QpIHsKIAkJaWYgKGNvbmZpZy0+ZW5hYmxlX2hpZ2gpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY4Ni5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc2ODYuYwppbmRleCBmNjkzMjBlLi44NzFiOTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY4Ni5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDc3Njg2LmMKQEAgLTQ1LDYgKzQ1LDIzIEBACiAjZGVmaW5lIE1BWDc3Njg2X0RWU19NSU5VVgk2MDAwMDAKICNkZWZpbmUgTUFYNzc2ODZfRFZTX1VWU1RFUAkxMjUwMAogCisvKgorICogVmFsdWVzIHVzZWQgZm9yIGNvbmZpZ3VyaW5nIExET3MgYW5kIGJ1Y2tzLgorICogRm9yY2luZyBsb3cgcG93ZXIgbW9kZTogTERPMSwgMy01LCA5LCAxMywgMTctMjYKKyAqLworI2RlZmluZSBNQVg3NzY4Nl9MRE9fTE9XUE9XRVIJCTB4MQorLyoKKyAqIE9uL29mZiBjb250cm9sbGVkIGJ5IFBXUlJFUToKKyAqICAtIExETzIsIDYtOCwgMTAtMTIsIDE0LTE2CisgKiAgLSBidWNrWzEyMzRdCisgKi8KKyNkZWZpbmUgTUFYNzc2ODZfT0ZGX1BXUlJFUQkJMHgxCisvKiBMb3cgcG93ZXIgbW9kZSBjb250cm9sbGVkIGJ5IFBXUlJFUTogQWxsIExET3MgKi8KKyNkZWZpbmUgTUFYNzc2ODZfTERPX0xPV1BPV0VSX1BXUlJFUQkweDIKKy8qIEZvcmNpbmcgbG93IHBvd2VyIG1vZGU6IGJ1Y2tbMjM0XSAqLworI2RlZmluZSBNQVg3NzY4Nl9CVUNLX0xPV1BPV0VSCQkweDIKKyNkZWZpbmUgTUFYNzc2ODZfTk9STUFMCQkJMHgzCisKICNkZWZpbmUgTUFYNzc2ODZfT1BNT0RFX1NISUZUCTYKICNkZWZpbmUgTUFYNzc2ODZfT1BNT0RFX0JVQ0syMzRfU0hJRlQJNAogI2RlZmluZSBNQVg3NzY4Nl9PUE1PREVfTUFTSwkweDMKQEAgLTY1LDIzICs4MiwzNiBAQAogfTsKIAogc3RydWN0IG1heDc3Njg2X2RhdGEgeworCS8qIEFycmF5IGluZGV4ZWQgYnkgcmVndWxhdG9yIGlkICovCiAJdW5zaWduZWQgaW50IG9wbW9kZVtNQVg3NzY4Nl9SRUdVTEFUT1JTXTsKIH07CiAKLS8qIFNvbWUgQlVDS1Mgc3VwcG9ydHMgTm9ybWFsW09OL09GRl0gbW9kZSBkdXJpbmcgc3VzcGVuZCAqLwotc3RhdGljIGludCBtYXg3NzY4Nl9idWNrX3NldF9zdXNwZW5kX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCitzdGF0aWMgdW5zaWduZWQgaW50IG1heDc3Njg2X2dldF9vcG1vZGVfc2hpZnQoaW50IGlkKQogewotCXVuc2lnbmVkIGludCB2YWw7CisJc3dpdGNoIChpZCkgeworCWNhc2UgTUFYNzc2ODZfQlVDSzE6CisJY2FzZSBNQVg3NzY4Nl9CVUNLNSAuLi4gTUFYNzc2ODZfQlVDSzk6CisJCXJldHVybiAwOworCWNhc2UgTUFYNzc2ODZfQlVDSzIgLi4uIE1BWDc3Njg2X0JVQ0s0OgorCQlyZXR1cm4gTUFYNzc2ODZfT1BNT0RFX0JVQ0syMzRfU0hJRlQ7CisJZGVmYXVsdDoKKwkJLyogYWxsIExET3MgKi8KKwkJcmV0dXJuIE1BWDc3Njg2X09QTU9ERV9TSElGVDsKKwl9Cit9CisKKy8qIFNvbWUgQlVDS3MgYW5kIExET3Mgc3VwcG9ydHMgTm9ybWFsW09OL09GRl0gbW9kZSBkdXJpbmcgc3VzcGVuZCAqLworc3RhdGljIGludCBtYXg3NzY4Nl9zZXRfc3VzcGVuZF9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXVuc2lnbmVkIGludCB2YWwsIHNoaWZ0OwogCXN0cnVjdCBtYXg3NzY4Nl9kYXRhICptYXg3NzY4NiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJaW50IHJldCwgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKIAotCWlmIChpZCA9PSBNQVg3NzY4Nl9CVUNLMSkKLQkJdmFsID0gMHgxOwotCWVsc2UKLQkJdmFsID0gMHgxIDw8IE1BWDc3Njg2X09QTU9ERV9CVUNLMjM0X1NISUZUOworCXNoaWZ0ID0gbWF4Nzc2ODZfZ2V0X29wbW9kZV9zaGlmdChpZCk7CisJdmFsID0gTUFYNzc2ODZfT0ZGX1BXUlJFUTsKIAogCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcsCi0JCQkJIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLCB2YWwpOworCQkJCSByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywgdmFsIDw8IHNoaWZ0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMDMsMTAgKzEzMywxMCBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBSRUdVTEFUT1JfTU9ERV9JRExFOgkJCS8qIE9OIGluIExQIE1vZGUgKi8KLQkJdmFsID0gMHgyIDw8IE1BWDc3Njg2X09QTU9ERV9TSElGVDsKKwkJdmFsID0gTUFYNzc2ODZfTERPX0xPV1BPV0VSX1BXUlJFUTsKIAkJYnJlYWs7CiAJY2FzZSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw6CQkJLyogT04gaW4gTm9ybWFsIE1vZGUgKi8KLQkJdmFsID0gMHgzIDw8IE1BWDc3Njg2X09QTU9ERV9TSElGVDsKKwkJdmFsID0gTUFYNzc2ODZfTk9STUFMOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl93YXJuKCIlczogcmVndWxhdG9yX3N1c3BlbmRfbW9kZSA6IDB4JXggbm90IHN1cHBvcnRlZFxuIiwKQEAgLTExNSw3ICsxNDUsOCBAQAogCX0KIAogCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcsCi0JCQkJICByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywgdmFsKTsKKwkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLAorCQkJCSAgdmFsIDw8IE1BWDc3Njg2X09QTU9ERV9TSElGVCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTMzLDEzICsxNjQsMTMgQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToJCQkvKiBzd2l0Y2ggb2ZmICovCi0JCXZhbCA9IDB4MSA8PCBNQVg3NzY4Nl9PUE1PREVfU0hJRlQ7CisJCXZhbCA9IE1BWDc3Njg2X09GRl9QV1JSRVE7CiAJCWJyZWFrOwogCWNhc2UgUkVHVUxBVE9SX01PREVfSURMRToJCQkvKiBPTiBpbiBMUCBNb2RlICovCi0JCXZhbCA9IDB4MiA8PCBNQVg3NzY4Nl9PUE1PREVfU0hJRlQ7CisJCXZhbCA9IE1BWDc3Njg2X0xET19MT1dQT1dFUl9QV1JSRVE7CiAJCWJyZWFrOwogCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgkJCS8qIE9OIGluIE5vcm1hbCBNb2RlICovCi0JCXZhbCA9IDB4MyA8PCBNQVg3NzY4Nl9PUE1PREVfU0hJRlQ7CisJCXZhbCA9IE1BWDc3Njg2X05PUk1BTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfd2FybigiJXM6IHJlZ3VsYXRvcl9zdXNwZW5kX21vZGUgOiAweCV4IG5vdCBzdXBwb3J0ZWRcbiIsCkBAIC0xNDgsNyArMTc5LDggQEAKIAl9CiAKIAlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocmRldi0+cmVnbWFwLCByZGV2LT5kZXNjLT5lbmFibGVfcmVnLAotCQkJCSByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywgdmFsKTsKKwkJCQkgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2ssCisJCQkJIHZhbCA8PCBNQVg3NzY4Nl9PUE1PREVfU0hJRlQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTE1OSwxMCArMTkxLDE3IEBACiBzdGF0aWMgaW50IG1heDc3Njg2X2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgbWF4Nzc2ODZfZGF0YSAqbWF4Nzc2ODYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVuc2lnbmVkIGludCBzaGlmdDsKKwlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKworCXNoaWZ0ID0gbWF4Nzc2ODZfZ2V0X29wbW9kZV9zaGlmdChpZCk7CisKKwlpZiAobWF4Nzc2ODYtPm9wbW9kZVtpZF0gPT0gTUFYNzc2ODZfT0ZGX1BXUlJFUSkKKwkJbWF4Nzc2ODYtPm9wbW9kZVtpZF0gPSBNQVg3NzY4Nl9OT1JNQUw7CiAKIAlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywKIAkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLAotCQkJCSAgbWF4Nzc2ODYtPm9wbW9kZVtyZGV2X2dldF9pZChyZGV2KV0pOworCQkJCSAgbWF4Nzc2ODYtPm9wbW9kZVtpZF0gPDwgc2hpZnQpOwogfQogCiBzdGF0aWMgaW50IG1heDc3Njg2X3NldF9yYW1wX2RlbGF5KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgcmFtcF9kZWxheSkKQEAgLTIxMiw2ICsyNTEsNyBAQAogCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCiAJLnNldF9zdXNwZW5kX21vZGUJPSBtYXg3NzY4Nl9sZG9fc2V0X3N1c3BlbmRfbW9kZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3Njg2X3NldF9zdXNwZW5kX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWF4Nzc2ODZfYnVjazFfb3BzID0gewpAQCAtMjIzLDcgKzI2Myw3IEBACiAJLmdldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCi0JLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzY4Nl9idWNrX3NldF9zdXNwZW5kX2Rpc2FibGUsCisJLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzY4Nl9zZXRfc3VzcGVuZF9kaXNhYmxlLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1heDc3Njg2X2J1Y2tfZHZzX29wcyA9IHsKQEAgLTIzNiwxMSArMjc2LDEzIEBACiAJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKIAkuc2V0X3JhbXBfZGVsYXkJCT0gbWF4Nzc2ODZfc2V0X3JhbXBfZGVsYXksCi0JLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzY4Nl9idWNrX3NldF9zdXNwZW5kX2Rpc2FibGUsCisJLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzY4Nl9zZXRfc3VzcGVuZF9kaXNhYmxlLAogfTsKIAogI2RlZmluZSByZWd1bGF0b3JfZGVzY19sZG8obnVtKQkJewkJCQlcCiAJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJ2b2x0YWdlLXJlZ3VsYXRvcnMiKSwJXAogCS5pZAkJPSBNQVg3NzY4Nl9MRE8jI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X29wcywJCQkJXAogCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCkBAIC0yNTcsNiArMjk5LDggQEAKIH0KICNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfbHBtX2xkbyhudW0pCXsJCQkJXAogCS5uYW1lCQk9ICJMRE8iI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkxETyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigidm9sdGFnZS1yZWd1bGF0b3JzIiksCVwKIAkuaWQJCT0gTUFYNzc2ODZfTERPIyNudW0sCQkJCVwKIAkub3BzCQk9ICZtYXg3NzY4Nl9sZG9fb3BzLAkJCQlcCiAJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKQEAgLTI3Myw2ICszMTcsOCBAQAogfQogI2RlZmluZSByZWd1bGF0b3JfZGVzY19sZG9fbG93KG51bSkJCXsJCQlcCiAJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJ2b2x0YWdlLXJlZ3VsYXRvcnMiKSwJXAogCS5pZAkJPSBNQVg3NzY4Nl9MRE8jI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X2xkb19vcHMsCQkJCVwKIAkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXApAQCAtMjg5LDYgKzMzNSw4IEBACiB9CiAjZGVmaW5lIHJlZ3VsYXRvcl9kZXNjX2xkbzFfbG93KG51bSkJCXsJCQlcCiAJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJ2b2x0YWdlLXJlZ3VsYXRvcnMiKSwJXAogCS5pZAkJPSBNQVg3NzY4Nl9MRE8jI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X29wcywJCQkJXAogCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCkBAIC0zMDUsNiArMzUzLDggQEAKIH0KICNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfYnVjayhudW0pCQl7CQkJXAogCS5uYW1lCQk9ICJCVUNLIiNudW0sCQkJCQlcCisJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJCVUNLIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJ2b2x0YWdlLXJlZ3VsYXRvcnMiKSwJXAogCS5pZAkJPSBNQVg3NzY4Nl9CVUNLIyNudW0sCQkJCVwKIAkub3BzCQk9ICZtYXg3NzY4Nl9vcHMsCQkJCVwKIAkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXApAQCAtMzIwLDYgKzM3MCw4IEBACiB9CiAjZGVmaW5lIHJlZ3VsYXRvcl9kZXNjX2J1Y2sxKG51bSkJCXsJCQlcCiAJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkJVQ0siI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInZvbHRhZ2UtcmVndWxhdG9ycyIpLAlcCiAJLmlkCQk9IE1BWDc3Njg2X0JVQ0sjI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X2J1Y2sxX29wcywJCQkJXAogCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCkBAIC0zMzUsNiArMzg3LDggQEAKIH0KICNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfYnVja19kdnMobnVtKQkJewkJCVwKIAkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiQlVDSyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigidm9sdGFnZS1yZWd1bGF0b3JzIiksCVwKIAkuaWQJCT0gTUFYNzc2ODZfQlVDSyMjbnVtLAkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc2ODZfYnVja19kdnNfb3BzLAkJCVwKIAkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXApAQCAtMzUwLDcgKzQwNCw3IEBACiAJCQk8PCBNQVg3NzY4Nl9PUE1PREVfQlVDSzIzNF9TSElGVCwJCVwKIH0KIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyByZWd1bGF0b3JzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKIAlyZWd1bGF0b3JfZGVzY19sZG8xX2xvdygxKSwKIAlyZWd1bGF0b3JfZGVzY19sZG9fbG93KDIpLAogCXJlZ3VsYXRvcl9kZXNjX2xkbygzKSwKQEAgLTM4OCwxMDMgKzQ0MiwzNyBAQAogCXJlZ3VsYXRvcl9kZXNjX2J1Y2soOSksCiB9OwogCi0jaWZkZWYgQ09ORklHX09GCi1zdGF0aWMgaW50IG1heDc3Njg2X3BtaWNfZHRfcGFyc2VfcGRhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkJc3RydWN0IG1heDc3Njg2X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQotewotCXN0cnVjdCBtYXg3NzY4Nl9kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG1pY19ucCwgKnJlZ3VsYXRvcnNfbnA7Ci0Jc3RydWN0IG1heDc3Njg2X3JlZ3VsYXRvcl9kYXRhICpyZGF0YTsKLQlzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoIHJtYXRjaCA9IHsgfTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCXBtaWNfbnAgPSBpb2Rldi0+ZGV2LT5vZl9ub2RlOwotCXJlZ3VsYXRvcnNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwbWljX25wLCAidm9sdGFnZS1yZWd1bGF0b3JzIik7Ci0JaWYgKCFyZWd1bGF0b3JzX25wKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBmaW5kIHJlZ3VsYXRvcnMgc3ViLW5vZGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwZGF0YS0+bnVtX3JlZ3VsYXRvcnMgPSBBUlJBWV9TSVpFKHJlZ3VsYXRvcnMpOwotCXJkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcmRhdGEpICoKLQkJCSAgICAgcGRhdGEtPm51bV9yZWd1bGF0b3JzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJkYXRhKSB7Ci0JCW9mX25vZGVfcHV0KHJlZ3VsYXRvcnNfbnApOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZWd1bGF0b3JzOyBpKyspIHsKLQkJcm1hdGNoLm5hbWUgPSByZWd1bGF0b3JzW2ldLm5hbWU7Ci0JCXJtYXRjaC5pbml0X2RhdGEgPSBOVUxMOwotCQlybWF0Y2gub2Zfbm9kZSA9IE5VTEw7Ci0JCW9mX3JlZ3VsYXRvcl9tYXRjaCgmcGRldi0+ZGV2LCByZWd1bGF0b3JzX25wLCAmcm1hdGNoLCAxKTsKLQkJcmRhdGFbaV0uaW5pdGRhdGEgPSBybWF0Y2guaW5pdF9kYXRhOwotCQlyZGF0YVtpXS5vZl9ub2RlID0gcm1hdGNoLm9mX25vZGU7Ci0JfQotCi0JcGRhdGEtPnJlZ3VsYXRvcnMgPSByZGF0YTsKLQlvZl9ub2RlX3B1dChyZWd1bGF0b3JzX25wKTsKLQotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgbWF4Nzc2ODZfcG1pY19kdF9wYXJzZV9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQlzdHJ1Y3QgbWF4Nzc2ODZfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX09GICovCi0KIHN0YXRpYyBpbnQgbWF4Nzc2ODZfcG1pY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtYXg3NzY4Nl9kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBtYXg3NzY4Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoaW9kZXYtPmRldik7CiAJc3RydWN0IG1heDc3Njg2X2RhdGEgKm1heDc3Njg2OwotCWludCBpLCByZXQgPSAwOworCWludCBpOwogCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoIXBkYXRhKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGEgZm91bmQgZm9yIHJlZ3VsYXRvclxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmIChpb2Rldi0+ZGV2LT5vZl9ub2RlKSB7Ci0JCXJldCA9IG1heDc3Njg2X3BtaWNfZHRfcGFyc2VfcGRhdGEocGRldiwgcGRhdGEpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAocGRhdGEtPm51bV9yZWd1bGF0b3JzICE9IE1BWDc3Njg2X1JFR1VMQVRPUlMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJIkludmFsaWQgaW5pdGlhbCBkYXRhIGZvciByZWd1bGF0b3IncyBpbml0aWFsaWF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJbWF4Nzc2ODYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBtYXg3NzY4Nl9kYXRhKSwKIAkJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIW1heDc3Njg2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvbmZpZy5kZXYgPSAmcGRldi0+ZGV2OworCWNvbmZpZy5kZXYgPSBpb2Rldi0+ZGV2OwogCWNvbmZpZy5yZWdtYXAgPSBpb2Rldi0+cmVnbWFwOwogCWNvbmZpZy5kcml2ZXJfZGF0YSA9IG1heDc3Njg2OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1heDc3Njg2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVg3NzY4Nl9SRUdVTEFUT1JTOyBpKyspIHsKIAkJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CisJCWludCBpZCA9IHJlZ3VsYXRvcnNbaV0uaWQ7CiAKLQkJY29uZmlnLmluaXRfZGF0YSA9IHBkYXRhLT5yZWd1bGF0b3JzW2ldLmluaXRkYXRhOwotCQljb25maWcub2Zfbm9kZSA9IHBkYXRhLT5yZWd1bGF0b3JzW2ldLm9mX25vZGU7Ci0KLQkJbWF4Nzc2ODYtPm9wbW9kZVtpXSA9IHJlZ3VsYXRvcnNbaV0uZW5hYmxlX21hc2s7CisJCW1heDc3Njg2LT5vcG1vZGVbaWRdID0gTUFYNzc2ODZfTk9STUFMOwogCQlyZGV2ID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoJnBkZXYtPmRldiwKIAkJCQkJCSZyZWd1bGF0b3JzW2ldLCAmY29uZmlnKTsKIAkJaWYgKElTX0VSUihyZGV2KSkgeworCQkJaW50IHJldCA9IFBUUl9FUlIocmRldik7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJInJlZ3VsYXRvciBpbml0IGZhaWxlZCBmb3IgJWRcbiIsIGkpOwotCQkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJCQkJInJlZ3VsYXRvciBpbml0IGZhaWxlZCBmb3IgJWQ6ICVkXG4iLCBpLCByZXQpOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc2OTMuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDc3NjkzLmMKaW5kZXggZDE1OGY3MS4uN2I5NzU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc2OTMuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY5My5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAkuZW5hYmxlX21hc2sJPSBTQUZFT1VUX0NUUkxfRU5TQUZFT1VUIyNfbnVtIyNfTUFTSyAsCVwKIH0KIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyByZWd1bGF0b3JzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKIAlyZWd1bGF0b3JfZGVzY19lc2FmZW91dCgxKSwKIAlyZWd1bGF0b3JfZGVzY19lc2FmZW91dCgyKSwKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzgwMi5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc4MDIuYwppbmRleCA0NWZhMjQwLi4wNzY2NjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzgwMi5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDc3ODAyLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL21heDc3Njg2Lmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL21heDc3Njg2LXByaXZhdGUuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZWd1bGF0b3IvbWF4aW0sbWF4Nzc4MDIuaD4KIAogLyogRGVmYXVsdCByYW1wIGRlbGF5IGluIGNhc2UgaXQgaXMgbm90IG1hbnVhbGx5IHNldCAqLwogI2RlZmluZSBNQVg3NzgwMl9SQU1QX0RFTEFZCQkxMDAwMDAJCS8qIHVWL3VzICovCkBAIC00OSw2ICs1MCwxMCBAQAogI2RlZmluZSBNQVg3NzgwMl9SQU1QX1JBVEVfTUFTS180QklUCTB4RjAKICNkZWZpbmUgTUFYNzc4MDJfUkFNUF9SQVRFX1NISUZUXzRCSVQJNAogCisjZGVmaW5lIE1BWDc3ODAyX1NUQVRVU19PRkYJCTB4MAorI2RlZmluZSBNQVg3NzgwMl9PRkZfUFdSUkVRCQkweDEKKyNkZWZpbmUgTUFYNzc4MDJfTFBfUFdSUkVRCQkweDIKKwogLyogTUFYNzc4MDIgaGFzIHR3byByZWdpc3RlciBmb3JtYXRzOiAyLWJpdCBhbmQgNC1iaXQgKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmFtcF90YWJsZV83NzgwMl8yYml0W10gPSB7CiAJMTI1MDAsCkBAIC02NSw5ICs3MCwxNiBAQAogfTsKIAogc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYgeworCS8qIEFycmF5IGluZGV4ZWQgYnkgcmVndWxhdG9yIGlkICovCiAJdW5zaWduZWQgaW50IG9wbW9kZVtNQVg3NzgwMl9SRUdfTUFYXTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1heDc3ODAyX21hcF9tb2RlKHVuc2lnbmVkIGludCBtb2RlKQoreworCXJldHVybiBtb2RlID09IE1BWDc3ODAyX09QTU9ERV9OT1JNQUwgPworCQlSRUdVTEFUT1JfTU9ERV9OT1JNQUwgOiBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOworfQorCiBzdGF0aWMgaW50IG1heDc3ODAyX2dldF9vcG1vZGVfc2hpZnQoaW50IGlkKQogewogCWlmIChpZCA9PSBNQVg3NzgwMl9CVUNLMSB8fCAoaWQgPj0gTUFYNzc4MDJfQlVDSzUgJiYKQEAgLTgzLDE3ICs5NSwxNiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi0vKgotICogU29tZSBCVUNLUyBzdXBwb3J0cyBOb3JtYWxbT04vT0ZGXSBtb2RlIGR1cmluZyBzdXNwZW5kCisvKioKKyAqIG1heDc3ODAyX3NldF9zdXNwZW5kX2Rpc2FibGUgLSBEaXNhYmxlIHRoZSByZWd1bGF0b3IgZHVyaW5nIHN5c3RlbSBzdXNwZW5kCisgKiBAcmRldjogcmVndWxhdG9yIHRvIG1hcmsgYXMgZGlzYWJsZWQKICAqCi0gKiBCVUNLIDEsIDYsIDItNCwgNSwgNy0xMCAoYWxsKQotICoKLSAqIFRoZSBvdGhlciBtb2RlICgweDAyKSB3aWxsIG1ha2UgUFdSUkVRIHN3aXRjaCBiZXR3ZWVuIG5vcm1hbAotICogYW5kIGxvdyBwb3dlci4KKyAqIEFsbCByZWd1bGF0b3JzIGV4cGVjdCBMRE8gMSwgMywgMjAgYW5kIDIxIHN1cHBvcnQgT0ZGIGJ5IFBXUlJFUS4KKyAqIENvbmZpZ3VyZSB0aGUgcmVndWxhdG9yIHNvIHRoZSBQTUlDIHdpbGwgdHVybiBpdCBPRkYgZHVyaW5nIHN5c3RlbSBzdXNwZW5kLgogICovCi1zdGF0aWMgaW50IG1heDc3ODAyX2J1Y2tfc2V0X3N1c3BlbmRfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgbWF4Nzc4MDJfc2V0X3N1c3BlbmRfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKLQl1bnNpZ25lZCBpbnQgdmFsID0gTUFYNzc4MDJfT1BNT0RFX1NUQU5EQlk7CisJdW5zaWduZWQgaW50IHZhbCA9IE1BWDc3ODAyX09GRl9QV1JSRVE7CiAJc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYgKm1heDc3ODAyID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKIAlpbnQgc2hpZnQgPSBtYXg3NzgwMl9nZXRfb3Btb2RlX3NoaWZ0KGlkKTsKQEAgLTEwNCwxNCArMTE1LDExIEBACiB9CiAKIC8qCi0gKiBTb21lIExET3Mgc3VwcG9ydHMgTFBNLU9OL09GRi9Ob3JtYWwtT04gbW9kZSBkdXJpbmcgc3VzcGVuZCBzdGF0ZQotICogKEVuYWJsZSBDb250cm9sIExvZ2ljMSBieSBQV1JSRVEpCisgKiBTb21lIExET3Mgc3VwcG9ydCBMb3cgUG93ZXIgTW9kZSB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcuCiAgKgotICogTERPcyAyLCA0LTE5LCAyMi0zNS4KLSAqCisgKiBMRE9zIDEsIDMsIDIwLCAyMS4KICAqLwotc3RhdGljIGludCBtYXg3NzgwMl9sZG9fc2V0X3N1c3BlbmRfbW9kZV9sb2dpYzEoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJCQl1bnNpZ25lZCBpbnQgbW9kZSkKK3N0YXRpYyBpbnQgbWF4Nzc4MDJfc2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIGludCBtb2RlKQogewogCXN0cnVjdCBtYXg3NzgwMl9yZWd1bGF0b3JfcHJ2ICptYXg3NzgwMiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAJaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7CkBAIC0xMTksMTQgKzEyNywxMSBAQAogCWludCBzaGlmdCA9IG1heDc3ODAyX2dldF9vcG1vZGVfc2hpZnQoaWQpOwogCiAJc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBSRUdVTEFUT1JfTU9ERV9JRExFOgkJCS8qIE9OIGluIExQIE1vZGUgKi8KLQkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX0xQOworCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToKKwkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX0xQOwkvKiBPTiBpbiBMb3cgUG93ZXIgTW9kZSAqLwogCQlicmVhazsKLQljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoJCQkvKiBPTiBpbiBOb3JtYWwgTW9kZSAqLwotCQl2YWwgPSBNQVg3NzgwMl9PUE1PREVfTk9STUFMOwotCQlicmVhazsKLQljYXNlIFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk6CQkJLyogT04vT0ZGIGJ5IFBXUlJFUSAqLwotCQl2YWwgPSBNQVg3NzgwMl9PUE1PREVfU1RBTkRCWTsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoKKwkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTDsJLyogT04gaW4gTm9ybWFsIE1vZGUgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGV2X3dhcm4oJnJkZXYtPmRldiwgIiVzOiByZWd1bGF0b3IgbW9kZTogMHgleCBub3Qgc3VwcG9ydGVkXG4iLApAQCAtMTM5LDM1ICsxNDQsNzYgQEAKIAkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLCB2YWwgPDwgc2hpZnQpOwogfQogCi0vKgotICogTW9kZSAxIChPdXRwdXRbT04vT0ZGXSBieSBQV1JSRVEpIGlzIG5vdCBzdXBwb3J0ZWQgb24gc29tZSBMRE9zCi0gKiAoRW5hYmxlIENvbnRyb2wgTG9naWMyIGJ5IFBXUlJFUSkKK3N0YXRpYyB1bnNpZ25lZCBtYXg3NzgwMl9nZXRfbW9kZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4Nzc4MDJfcmVndWxhdG9yX3BydiAqbWF4Nzc4MDIgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCisJcmV0dXJuIG1heDc3ODAyX21hcF9tb2RlKG1heDc3ODAyLT5vcG1vZGVbaWRdKTsKK30KKworLyoqCisgKiBtYXg3NzgwMl9zZXRfc3VzcGVuZF9tb2RlIC0gc2V0IHJlZ3VsYXRvciBvcG1vZGUgd2hlbiB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZAorICogQHJkZXY6IHJlZ3VsYXRvciB0byBjaGFuZ2UgbW9kZQorICogQG1vZGU6IG9wZXJhdGluZyBtb2RlIHRvIGJlIHNldAogICoKLSAqIExET3MgMSwgMjAsIDIxLCBhbmQgMywKKyAqIFdpbGwgc2V0IHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHJlZ3VsYXRvcnMgZHVyaW5nIHN5c3RlbSBzdXNwZW5kLgorICogVGhpcyBmdW5jdGlvbiBpcyB2YWxpZCBmb3IgdGhlIHRocmVlIGRpZmZlcmVudCBlbmFibGUgY29udHJvbCBsb2dpY3M6CiAgKgorICogRW5hYmxlIENvbnRyb2wgTG9naWMxIGJ5IFBXUlJFUSAoQlVDSyAyLTQgYW5kIExET3MgMiwgNC0xOSwgMjItMzUpCisgKiBFbmFibGUgQ29udHJvbCBMb2dpYzIgYnkgUFdSUkVRIChMRE9zIDEsIDIwLCAyMSkKKyAqIEVuYWJsZSBDb250cm9sIExvZ2ljMyBieSBQV1JSRVEgKExETyAzKQorICoKKyAqIElmIHNldHRpbmcgdGhlIHJlZ3VsYXRvciBtb2RlIGZhaWxzLCB0aGUgZnVuY3Rpb24gb25seSB3YXJucyBidXQgZG9lcworICogbm90IHJldHVybiBhbiBlcnJvciBjb2RlIHRvIGF2b2lkIHRoZSByZWd1bGF0b3IgY29yZSB0byBzdG9wIHNldHRpbmcKKyAqIHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHJlbWFpbmluZyByZWd1bGF0b3JzLgogICovCi1zdGF0aWMgaW50IG1heDc3ODAyX2xkb19zZXRfc3VzcGVuZF9tb2RlX2xvZ2ljMihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQkJCQkJCXVuc2lnbmVkIGludCBtb2RlKQorc3RhdGljIGludCBtYXg3NzgwMl9zZXRfc3VzcGVuZF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCSAgICAgdW5zaWduZWQgaW50IG1vZGUpCiB7CiAJc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYgKm1heDc3ODAyID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCWludCBzaGlmdCA9IG1heDc3ODAyX2dldF9vcG1vZGVfc2hpZnQoaWQpOwogCisJLyoKKwkgKiBJZiB0aGUgcmVndWxhdG9yIGhhcyBiZWVuIGRpc2FibGVkIGZvciBzdXNwZW5kCisJICogdGhlbiBpcyBpbnZhbGlkIHRvIHRyeSBzZXR0aW5nIGEgc3VzcGVuZCBtb2RlLgorCSAqLworCWlmIChtYXg3NzgwMi0+b3Btb2RlW2lkXSA9PSBNQVg3NzgwMl9PRkZfUFdSUkVRKSB7CisJCWRldl93YXJuKCZyZGV2LT5kZXYsICIlczogaXMgZGlzYWJsZWQsIG1vZGU6IDB4JXggbm90IHNldFxuIiwKKwkJCSByZGV2LT5kZXNjLT5uYW1lLCBtb2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBSRUdVTEFUT1JfTU9ERV9JRExFOgkJCS8qIE9OIGluIExQIE1vZGUgKi8KLQkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX0xQOworCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToKKwkJLyoKKwkJICogSWYgdGhlIHJlZ3VsYXRvciBvcG1vZGUgaXMgbm9ybWFsIHRoZW4gZW5hYmxlCisJCSAqIE9OIGluIExvdyBQb3dlciBNb2RlIGJ5IFBXUlJFUS4gSWYgdGhlIG1vZGUgaXMKKwkJICogYWxyZWFkeSBMb3cgUG93ZXIgdGhlbiBubyBhY3Rpb24gaXMgcmVxdWlyZWQuCisJCSAqLworCQlpZiAobWF4Nzc4MDItPm9wbW9kZVtpZF0gPT0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTCkKKwkJCXZhbCA9IE1BWDc3ODAyX0xQX1BXUlJFUTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CiAJCWJyZWFrOwotCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgkJCS8qIE9OIGluIE5vcm1hbCBNb2RlICovCi0JCXZhbCA9IE1BWDc3ODAyX09QTU9ERV9OT1JNQUw7Ci0JCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgorCQkvKgorCQkgKiBJZiB0aGUgcmVndWxhdG9yIG9wZXJhdGluZyBtb2RlIGlzIExvdyBQb3dlciB0aGVuCisJCSAqIG5vcm1hbCBpcyBub3QgYSB2YWxpZCBvcG1vZGUgaW4gc3VzcGVuZC4gSWYgdGhlCisJCSAqIG1vZGUgaXMgYWxyZWFkeSBub3JtYWwgdGhlbiBubyBhY3Rpb24gaXMgcmVxdWlyZWQuCisJCSAqLworCQlpZiAobWF4Nzc4MDItPm9wbW9kZVtpZF0gPT0gTUFYNzc4MDJfT1BNT0RFX0xQKQorCQkJZGV2X3dhcm4oJnJkZXYtPmRldiwgIiVzOiBpbiBMb3cgUG93ZXI6IDB4JXggaW52YWxpZFxuIiwKKwkJCQkgcmRldi0+ZGVzYy0+bmFtZSwgbW9kZSk7CisJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCWRldl93YXJuKCZyZGV2LT5kZXYsICIlczogcmVndWxhdG9yIG1vZGU6IDB4JXggbm90IHN1cHBvcnRlZFxuIiwKIAkJCSByZGV2LT5kZXNjLT5uYW1lLCBtb2RlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbWF4Nzc4MDItPm9wbW9kZVtpZF0gPSB2YWw7CiAJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcsCiAJCQkJICByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywgdmFsIDw8IHNoaWZ0KTsKIH0KQEAgLTE3OCw2ICsyMjQsOSBAQAogCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwogCWludCBzaGlmdCA9IG1heDc3ODAyX2dldF9vcG1vZGVfc2hpZnQoaWQpOwogCisJaWYgKG1heDc3ODAyLT5vcG1vZGVbaWRdID09IE1BWDc3ODAyX09GRl9QV1JSRVEpCisJCW1heDc3ODAyLT5vcG1vZGVbaWRdID0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTDsKKwogCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocmRldi0+cmVnbWFwLCByZGV2LT5kZXNjLT5lbmFibGVfcmVnLAogCQkJCSAgcmRldi0+ZGVzYy0+ZW5hYmxlX21hc2ssCiAJCQkJICBtYXg3NzgwMi0+b3Btb2RlW2lkXSA8PCBzaGlmdCk7CkBAIC0yNDcsNyArMjk2LDggQEAKIAkuZ2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX2dldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKLQkuc2V0X3N1c3BlbmRfbW9kZQk9IG1heDc3ODAyX2xkb19zZXRfc3VzcGVuZF9tb2RlX2xvZ2ljMSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3ODAyX3NldF9zdXNwZW5kX2Rpc2FibGUsCisJLnNldF9zdXNwZW5kX21vZGUJPSBtYXg3NzgwMl9zZXRfc3VzcGVuZF9tb2RlLAogfTsKIAogLyoKQEAgLTI2Miw3ICszMTIsOSBAQAogCS5nZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkuc2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3RpbWVfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3RpbWVfc2VsLAotCS5zZXRfc3VzcGVuZF9tb2RlCT0gbWF4Nzc4MDJfbGRvX3NldF9zdXNwZW5kX21vZGVfbG9naWMyLAorCS5zZXRfbW9kZQkJPSBtYXg3NzgwMl9zZXRfbW9kZSwKKwkuZ2V0X21vZGUJCT0gbWF4Nzc4MDJfZ2V0X21vZGUsCisJLnNldF9zdXNwZW5kX21vZGUJPSBtYXg3NzgwMl9zZXRfc3VzcGVuZF9tb2RlLAogfTsKIAogLyogQlVDS1MgMSwgNiAqLwpAQCAtMjc2LDEwICszMjgsMjUgQEAKIAkuc2V0X3ZvbHRhZ2Vfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3NlbF9yZWdtYXAsCiAJLnNldF92b2x0YWdlX3RpbWVfc2VsCT0gcmVndWxhdG9yX3NldF92b2x0YWdlX3RpbWVfc2VsLAogCS5zZXRfcmFtcF9kZWxheQkJPSBtYXg3NzgwMl9zZXRfcmFtcF9kZWxheV80Yml0LAotCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gbWF4Nzc4MDJfYnVja19zZXRfc3VzcGVuZF9kaXNhYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gbWF4Nzc4MDJfc2V0X3N1c3BlbmRfZGlzYWJsZSwKIH07CiAKLS8qIEJVQ0tzIDItNCwgNSwgNy0xMCAqLworLyogQlVDS3MgMi00ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWF4Nzc4MDJfYnVja18yMzRfb3BzID0geworCS5saXN0X3ZvbHRhZ2UJCT0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXIsCisJLm1hcF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXIsCisJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5lbmFibGUJCQk9IG1heDc3ODAyX2VuYWJsZSwKKwkuZGlzYWJsZQkJPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCisJLmdldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKKwkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCisJLnNldF9yYW1wX2RlbGF5CQk9IG1heDc3ODAyX3NldF9yYW1wX2RlbGF5XzJiaXQsCisJLnNldF9zdXNwZW5kX2Rpc2FibGUJPSBtYXg3NzgwMl9zZXRfc3VzcGVuZF9kaXNhYmxlLAorCS5zZXRfc3VzcGVuZF9tb2RlCT0gbWF4Nzc4MDJfc2V0X3N1c3BlbmRfbW9kZSwKK307CisKKy8qIEJVQ0tzIDUsIDctMTAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYXg3NzgwMl9idWNrX2R2c19vcHMgPSB7CiAJLmxpc3Rfdm9sdGFnZQkJPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhciwKIAkubWFwX3ZvbHRhZ2UJCT0gcmVndWxhdG9yX21hcF92b2x0YWdlX2xpbmVhciwKQEAgLTI5MCwxMiArMzU3LDE0IEBACiAJLnNldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5zZXRfdm9sdGFnZV90aW1lX3NlbAk9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV90aW1lX3NlbCwKIAkuc2V0X3JhbXBfZGVsYXkJCT0gbWF4Nzc4MDJfc2V0X3JhbXBfZGVsYXlfMmJpdCwKLQkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3ODAyX2J1Y2tfc2V0X3N1c3BlbmRfZGlzYWJsZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IG1heDc3ODAyX3NldF9zdXNwZW5kX2Rpc2FibGUsCiB9OwogCiAvKiBMRE9zIDMtNywgOS0xNCwgMTgtMjYsIDI4LCAyOSwgMzItMzQgKi8KICNkZWZpbmUgcmVndWxhdG9yXzc3ODAyX2Rlc2NfcF9sZG8obnVtLCBzdXBwbHksIGxvZykJewkJXAogCS5uYW1lCQk9ICJMRE8iI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkxETyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigicmVndWxhdG9ycyIpLAkJXAogCS5pZAkJPSBNQVg3NzgwMl9MRE8jI251bSwJCQkJXAogCS5zdXBwbHlfbmFtZQk9ICJpbmwiI3N1cHBseSwJCQkJCVwKIAkub3BzCQk9ICZtYXg3NzgwMl9sZG9fb3BzX2xvZ2ljIyNsb2csCQkJXApAQCAtMzA5LDExICszNzgsMTQgQEAKIAkudnNlbF9tYXNrCT0gTUFYNzc4MDJfVlNFTF9NQVNLLAkJCQlcCiAJLmVuYWJsZV9yZWcJPSBNQVg3NzgwMl9SRUdfTERPMUNUUkwxICsgbnVtIC0gMSwJCVwKIAkuZW5hYmxlX21hc2sJPSBNQVg3NzgwMl9PUE1PREVfTUFTSyA8PCBNQVg3NzgwMl9PUE1PREVfU0hJRlRfTERPLCBcCisJLm9mX21hcF9tb2RlCT0gbWF4Nzc4MDJfbWFwX21vZGUsCQkJCVwKIH0KIAogLyogTERPcyAxLCAyLCA4LCAxNSwgMTcsIDI3LCAzMCwgMzUgKi8KICNkZWZpbmUgcmVndWxhdG9yXzc3ODAyX2Rlc2Nfbl9sZG8obnVtLCBzdXBwbHksIGxvZykgICB7CQlcCiAJLm5hbWUJCT0gIkxETyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCQlcCiAJLmlkCQk9IE1BWDc3ODAyX0xETyMjbnVtLAkJCQlcCiAJLnN1cHBseV9uYW1lCT0gImlubCIjc3VwcGx5LAkJCQkJXAogCS5vcHMJCT0gJm1heDc3ODAyX2xkb19vcHNfbG9naWMjI2xvZywJCQlcCkBAIC0zMjcsMTEgKzM5OSwxNCBAQAogCS52c2VsX21hc2sJPSBNQVg3NzgwMl9WU0VMX01BU0ssCQkJCVwKIAkuZW5hYmxlX3JlZwk9IE1BWDc3ODAyX1JFR19MRE8xQ1RSTDEgKyBudW0gLSAxLAkJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLIDw8IE1BWDc3ODAyX09QTU9ERV9TSElGVF9MRE8sIFwKKwkub2ZfbWFwX21vZGUJPSBtYXg3NzgwMl9tYXBfbW9kZSwJCQkJXAogfQogCiAvKiBCVUNLcyAxLCA2ICovCiAjZGVmaW5lIHJlZ3VsYXRvcl83NzgwMl9kZXNjXzE2X2J1Y2sobnVtKQl7CQlcCiAJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkJVQ0siI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJCVwKIAkuaWQJCT0gTUFYNzc4MDJfQlVDSyMjbnVtLAkJCQlcCiAJLnN1cHBseV9uYW1lCT0gImluYiIjbnVtLAkJCQkJXAogCS5vcHMJCT0gJm1heDc3ODAyX2J1Y2tfMTZfZHZzX29wcywJCQlcCkBAIC0zNDUsMTQgKzQyMCwxNyBAQAogCS52c2VsX21hc2sJPSBNQVg3NzgwMl9EVlNfVlNFTF9NQVNLLAkJCVwKIAkuZW5hYmxlX3JlZwk9IE1BWDc3ODAyX1JFR19CVUNLICMjIG51bSAjIyBDVFJMLAkJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLLAkJCQlcCisJLm9mX21hcF9tb2RlCT0gbWF4Nzc4MDJfbWFwX21vZGUsCQkJCVwKIH0KIAogLyogQlVDS1MgMi00ICovCiAjZGVmaW5lIHJlZ3VsYXRvcl83NzgwMl9kZXNjXzIzNF9idWNrKG51bSkJewkJXAogCS5uYW1lCQk9ICJCVUNLIiNudW0sCQkJCQlcCisJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJCVUNLIiNudW0pLAkJCVwKKwkucmVndWxhdG9yc19ub2RlCT0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCQlcCiAJLmlkCQk9IE1BWDc3ODAyX0JVQ0sjI251bSwJCQkJXAogCS5zdXBwbHlfbmFtZQk9ICJpbmIiI251bSwJCQkJCVwKLQkub3BzCQk9ICZtYXg3NzgwMl9idWNrX2R2c19vcHMsCQkJXAorCS5vcHMJCT0gJm1heDc3ODAyX2J1Y2tfMjM0X29wcywJCQlcCiAJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCQkJCQlcCiAJLm1pbl91VgkJPSA2MDAwMDAsCQkJCQlcCkBAIC0zNjQsMTEgKzQ0MiwxNCBAQAogCS5lbmFibGVfcmVnCT0gTUFYNzc4MDJfUkVHX0JVQ0sgIyMgbnVtICMjIENUUkwxLAkJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLIDw8CQkJXAogCQkJCU1BWDc3ODAyX09QTU9ERV9CVUNLMjM0X1NISUZULAkJXAorCS5vZl9tYXBfbW9kZQk9IG1heDc3ODAyX21hcF9tb2RlLAkJCQlcCiB9CiAKIC8qIEJVQ0sgNSAqLwogI2RlZmluZSByZWd1bGF0b3JfNzc4MDJfZGVzY19idWNrNShudW0pCQl7CQlcCiAJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJCVwKKwkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkJVQ0siI251bSksCQkJXAorCS5yZWd1bGF0b3JzX25vZGUJPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJCVwKIAkuaWQJCT0gTUFYNzc4MDJfQlVDSyMjbnVtLAkJCQlcCiAJLnN1cHBseV9uYW1lCT0gImluYiIjbnVtLAkJCQkJXAogCS5vcHMJCT0gJm1heDc3ODAyX2J1Y2tfZHZzX29wcywJCQlcCkBAIC0zODIsMTEgKzQ2MywxNCBAQAogCS52c2VsX21hc2sJPSBNQVg3NzgwMl9WU0VMX01BU0ssCQkJCVwKIAkuZW5hYmxlX3JlZwk9IE1BWDc3ODAyX1JFR19CVUNLNUNUUkwsCQkJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLLAkJCQlcCisJLm9mX21hcF9tb2RlCT0gbWF4Nzc4MDJfbWFwX21vZGUsCQkJCVwKIH0KIAogLyogQlVDS3MgNy0xMCAqLwogI2RlZmluZSByZWd1bGF0b3JfNzc4MDJfZGVzY19idWNrN18xMChudW0pCXsJCVwKIAkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQkJXAorCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiQlVDSyIjbnVtKSwJCQlcCisJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigicmVndWxhdG9ycyIpLAkJXAogCS5pZAkJPSBNQVg3NzgwMl9CVUNLIyNudW0sCQkJCVwKIAkuc3VwcGx5X25hbWUJPSAiaW5iIiNudW0sCQkJCQlcCiAJLm9wcwkJPSAmbWF4Nzc4MDJfYnVja19kdnNfb3BzLAkJCVwKQEAgLTQwMCw5ICs0ODQsMTAgQEAKIAkudnNlbF9tYXNrCT0gTUFYNzc4MDJfVlNFTF9NQVNLLAkJCQlcCiAJLmVuYWJsZV9yZWcJPSBNQVg3NzgwMl9SRUdfQlVDSzdDVFJMICsgKG51bSAtIDcpICogMywJXAogCS5lbmFibGVfbWFzawk9IE1BWDc3ODAyX09QTU9ERV9NQVNLLAkJCQlcCisJLm9mX21hcF9tb2RlCT0gbWF4Nzc4MDJfbWFwX21vZGUsCQkJCVwKIH0KIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyByZWd1bGF0b3JzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKIAlyZWd1bGF0b3JfNzc4MDJfZGVzY18xNl9idWNrKDEpLAogCXJlZ3VsYXRvcl83NzgwMl9kZXNjXzIzNF9idWNrKDIpLAogCXJlZ3VsYXRvcl83NzgwMl9kZXNjXzIzNF9idWNrKDMpLApAQCAtNDQ3LDg1ICs1MzIsMTkgQEAKIAlyZWd1bGF0b3JfNzc4MDJfZGVzY19uX2xkbygzNSwgMiwgMSksCiB9OwogCi0jaWZkZWYgQ09ORklHX09GCi1zdGF0aWMgaW50IG1heDc3ODAyX3BtaWNfZHRfcGFyc2VfcGRhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkJc3RydWN0IG1heDc3Njg2X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQotewotCXN0cnVjdCBtYXg3NzY4Nl9kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG1pY19ucCwgKnJlZ3VsYXRvcnNfbnA7Ci0Jc3RydWN0IG1heDc3Njg2X3JlZ3VsYXRvcl9kYXRhICpyZGF0YTsKLQlzdHJ1Y3Qgb2ZfcmVndWxhdG9yX21hdGNoIHJtYXRjaCA9IHsgfTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCXBtaWNfbnAgPSBpb2Rldi0+ZGV2LT5vZl9ub2RlOwotCXJlZ3VsYXRvcnNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwbWljX25wLCAicmVndWxhdG9ycyIpOwotCWlmICghcmVndWxhdG9yc19ucCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgZmluZCByZWd1bGF0b3JzIHN1Yi1ub2RlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGRhdGEtPm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShyZWd1bGF0b3JzKTsKLQlyZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnJkYXRhKSAqCi0JCQkgICAgIHBkYXRhLT5udW1fcmVndWxhdG9ycywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZGF0YSkgewotCQlvZl9ub2RlX3B1dChyZWd1bGF0b3JzX25wKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmVndWxhdG9yczsgaSsrKSB7Ci0JCXJtYXRjaC5uYW1lID0gcmVndWxhdG9yc1tpXS5uYW1lOwotCQlybWF0Y2guaW5pdF9kYXRhID0gTlVMTDsKLQkJcm1hdGNoLm9mX25vZGUgPSBOVUxMOwotCQlpZiAob2ZfcmVndWxhdG9yX21hdGNoKCZwZGV2LT5kZXYsIHJlZ3VsYXRvcnNfbnAsICZybWF0Y2gsCi0JCQkJICAgICAgIDEpICE9IDEpIHsKLQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJObyBtYXRjaGluZyByZWd1bGF0b3IgZm9yICclcydcbiIsCi0JCQkJIHJtYXRjaC5uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXJkYXRhW2ldLmluaXRkYXRhID0gcm1hdGNoLmluaXRfZGF0YTsKLQkJcmRhdGFbaV0ub2Zfbm9kZSA9IHJtYXRjaC5vZl9ub2RlOwotCQlyZGF0YVtpXS5pZCA9IHJlZ3VsYXRvcnNbaV0uaWQ7Ci0JfQotCi0JcGRhdGEtPnJlZ3VsYXRvcnMgPSByZGF0YTsKLQlvZl9ub2RlX3B1dChyZWd1bGF0b3JzX25wKTsKLQotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgbWF4Nzc4MDJfcG1pY19kdF9wYXJzZV9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQlzdHJ1Y3QgbWF4Nzc2ODZfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX09GICovCi0KIHN0YXRpYyBpbnQgbWF4Nzc4MDJfcG1pY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtYXg3NzY4Nl9kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBtYXg3NzY4Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoaW9kZXYtPmRldik7CiAJc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYgKm1heDc3ODAyOwotCWludCBpLCByZXQgPSAwLCB2YWw7CisJaW50IGksIHZhbDsKIAlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyBjb25maWcgPSB7IH07CiAKLQkvKiBUaGlzIGlzIGFsbG9jYXRlZCBieSB0aGUgTUZEIGRyaXZlciAqLwotCWlmICghcGRhdGEpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBmb3VuZCBmb3IgcmVndWxhdG9yXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJbWF4Nzc4MDIgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKIAkJCQlzaXplb2Yoc3RydWN0IG1heDc3ODAyX3JlZ3VsYXRvcl9wcnYpLAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghbWF4Nzc4MDIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGlvZGV2LT5kZXYtPm9mX25vZGUpIHsKLQkJcmV0ID0gbWF4Nzc4MDJfcG1pY19kdF9wYXJzZV9wZGF0YShwZGV2LCBwZGF0YSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQogCWNvbmZpZy5kZXYgPSBpb2Rldi0+ZGV2OwogCWNvbmZpZy5yZWdtYXAgPSBpb2Rldi0+cmVnbWFwOwogCWNvbmZpZy5kcml2ZXJfZGF0YSA9IG1heDc3ODAyOwpAQCAtNTMzLDIxICs1NTIsMjUgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBNQVg3NzgwMl9SRUdfTUFYOyBpKyspIHsKIAkJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7Ci0JCWludCBpZCA9IHBkYXRhLT5yZWd1bGF0b3JzW2ldLmlkOworCQlpbnQgaWQgPSByZWd1bGF0b3JzW2ldLmlkOwogCQlpbnQgc2hpZnQgPSBtYXg3NzgwMl9nZXRfb3Btb2RlX3NoaWZ0KGlkKTsKLQotCQljb25maWcuaW5pdF9kYXRhID0gcGRhdGEtPnJlZ3VsYXRvcnNbaV0uaW5pdGRhdGE7Ci0JCWNvbmZpZy5vZl9ub2RlID0gcGRhdGEtPnJlZ3VsYXRvcnNbaV0ub2Zfbm9kZTsKKwkJaW50IHJldDsKIAogCQlyZXQgPSByZWdtYXBfcmVhZChpb2Rldi0+cmVnbWFwLCByZWd1bGF0b3JzW2ldLmVuYWJsZV9yZWcsICZ2YWwpOwotCQl2YWwgPSB2YWwgPj4gc2hpZnQgJiBNQVg3NzgwMl9PUE1PREVfTUFTSzsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJImNhbm5vdCByZWFkIGN1cnJlbnQgbW9kZSBmb3IgJWRcbiIsIGkpOworCQkJdmFsID0gTUFYNzc4MDJfT1BNT0RFX05PUk1BTDsKKwkJfSBlbHNlIHsKKwkJCXZhbCA9IHZhbCA+PiBzaGlmdCAmIE1BWDc3ODAyX09QTU9ERV9NQVNLOworCQl9CiAKIAkJLyoKIAkJICogSWYgdGhlIHJlZ3VsYXRvciBpcyBkaXNhYmxlZCBhbmQgdGhlIHN5c3RlbSB3YXJtIHJlYm9vdGVkLAogCQkgKiB0aGUgaGFyZHdhcmUgcmVwb3J0cyBPRkYgYXMgdGhlIHJlZ3VsYXRvciBvcGVyYXRpbmcgbW9kZS4KIAkJICogRGVmYXVsdCB0byBvcGVyYXRpbmcgbW9kZSBOT1JNQUwgaW4gdGhhdCBjYXNlLgogCQkgKi8KLQkJaWYgKHZhbCA9PSBNQVg3NzgwMl9PUE1PREVfT0ZGKQorCQlpZiAodmFsID09IE1BWDc3ODAyX1NUQVRVU19PRkYpCiAJCQltYXg3NzgwMi0+b3Btb2RlW2lkXSA9IE1BWDc3ODAyX09QTU9ERV9OT1JNQUw7CiAJCWVsc2UKIAkJCW1heDc3ODAyLT5vcG1vZGVbaWRdID0gdmFsOwpAQCAtNTU1LDkgKzU3OCwxMCBAQAogCQlyZGV2ID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoJnBkZXYtPmRldiwKIAkJCQkJICAgICAgICZyZWd1bGF0b3JzW2ldLCAmY29uZmlnKTsKIAkJaWYgKElTX0VSUihyZGV2KSkgeworCQkJcmV0ID0gUFRSX0VSUihyZGV2KTsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkicmVndWxhdG9yIGluaXQgZmFpbGVkIGZvciAlZFxuIiwgaSk7Ci0JCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwkJCQkicmVndWxhdG9yIGluaXQgZmFpbGVkIGZvciAlZDogJWRcbiIsIGksIHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMKaW5kZXggZjdmOWVmYy4uMWFmOGY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk1Mi5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NTIuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibWF4ODk1MixyYW1wLXNwZWVkIiwgJnBkLT5yYW1wX3NwZWVkKSkKIAkJZGV2X3dhcm4oZGV2LCAibWF4ODk1MixyYW1wLXNwZWVkIHByb3BlcnR5IG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRpbmcgdG8gMzJtVi91c1xuIik7CiAKLQlwZC0+cmVnX2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wKTsKKwlwZC0+cmVnX2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIG5wLCAmcmVndWxhdG9yKTsKIAlpZiAoIXBkLT5yZWdfZGF0YSkgewogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBwYXJzZSByZWd1bGF0b3IgaW5pdCBkYXRhXG4iKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yMjUsNiArMjI1LDggQEAKIAljb25maWcub2Zfbm9kZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7CiAKIAljb25maWcuZW5hX2dwaW8gPSBwZGF0YS0+Z3Bpb19lbjsKKwlpZiAoY2xpZW50LT5kZXYub2Zfbm9kZSkKKwkJY29uZmlnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKIAlpZiAocGRhdGEtPnJlZ19kYXRhLT5jb25zdHJhaW50cy5ib290X29uKQogCQljb25maWcuZW5hX2dwaW9fZmxhZ3MgfD0gR1BJT0ZfT1VUX0lOSVRfSElHSDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk3My1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NzMtcmVndWxhdG9yLmMKaW5kZXggZGJlZGYxNy4uYzNkNTVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk3My1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTczLXJlZ3VsYXRvci5jCkBAIC00NTgsNyArNDU4LDggQEAKIAogCWNvbmZpZy5kZXYgPSAmY2xpZW50LT5kZXY7CiAJY29uZmlnLmluaXRfZGF0YSA9IHBkYXRhID8gcGRhdGEtPnJlZ19pbml0X2RhdGEgOgotCQlvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmY2xpZW50LT5kZXYsIGNsaWVudC0+ZGV2Lm9mX25vZGUpOworCQlvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmY2xpZW50LT5kZXYsIGNsaWVudC0+ZGV2Lm9mX25vZGUsCisJCQkJCSAgICZtYXgtPmRlc2MpOwogCWNvbmZpZy5kcml2ZXJfZGF0YSA9IG1heDsKIAljb25maWcub2Zfbm9kZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7CiAJY29uZmlnLnJlZ21hcCA9IG1heC0+cmVnbWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5Ny5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5Ny5jCmluZGV4IDljMzFlMjEuLjcyNmZkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg5OTcuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTk3LmMKQEAgLTk1Myw3ICs5NTMsOCBAQAogCiAJCXJkYXRhLT5pZCA9IGk7CiAJCXJkYXRhLT5pbml0ZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsCi0JCQkJCQkJICAgICByZWdfbnApOworCQkJCQkJCSAgICAgcmVnX25wLAorCQkJCQkJCSAgICAgJnJlZ3VsYXRvcnNbaV0pOwogCQlyZGF0YS0+cmVnX25vZGUgPSByZWdfbnA7CiAJCXJkYXRhKys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5OC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5OC5jCmluZGV4IDk2MTA5MWIuLjU5ZTM0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg5OTguYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTk4LmMKQEAgLTY4Niw4ICs2ODYsOSBAQAogCQkJY29udGludWU7CiAKIAkJcmRhdGEtPmlkID0gcmVndWxhdG9yc1tpXS5pZDsKLQkJcmRhdGEtPmluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoCi0JCQkJCQkJaW9kZXYtPmRldiwgcmVnX25wKTsKKwkJcmRhdGEtPmluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoaW9kZXYtPmRldiwKKwkJCQkJCQkgICAgIHJlZ19ucCwKKwkJCQkJCQkgICAgICZyZWd1bGF0b3JzW2ldKTsKIAkJcmRhdGEtPnJlZ19ub2RlID0gcmVnX25wOwogCQkrK3JkYXRhOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYwppbmRleCBhZmJhMDI0Li4wMjgxYzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzeHh4LXJlZ3VsYXRvci1jb3JlLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5jCkBAIC0xOTQsNyArMTk0LDggQEAKIAkJCQkJIHJlZ3VsYXRvcnNbaV0uZGVzYy5uYW1lKSkgewogCQkJCXAtPmlkID0gaTsKIAkJCQlwLT5pbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgKLQkJCQkJCQkmcGRldi0+ZGV2LCBjaGlsZCk7CisJCQkJCQkJJnBkZXYtPmRldiwgY2hpbGQsCisJCQkJCQkJJnJlZ3VsYXRvcnNbaV0uZGVzYyk7CiAJCQkJcC0+bm9kZSA9IGNoaWxkOwogCQkJCXArKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuYwppbmRleCA1YTFkNGFmLi45MWVhYWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuYwpAQCAtMTksMTIgKzE5LDIwIEBACiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcmVndWxhdG9yX3N0YXRlc1tQTV9TVVNQRU5EX01BWCArIDFdID0geworCVtQTV9TVVNQRU5EX01FTV0JPSAicmVndWxhdG9yLXN0YXRlLW1lbSIsCisJW1BNX1NVU1BFTkRfTUFYXQk9ICJyZWd1bGF0b3Itc3RhdGUtZGlzayIsCit9OworCiBzdGF0aWMgdm9pZCBvZl9nZXRfcmVndWxhdGlvbl9jb25zdHJhaW50cyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqKmluaXRfZGF0YSkKKwkJCQkJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKippbml0X2RhdGEsCisJCQkJCWNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAljb25zdCBfX2JlMzIgKm1pbl91ViwgKm1heF91VjsKIAlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHMgPSAmKCppbml0X2RhdGEpLT5jb25zdHJhaW50czsKLQlpbnQgcmV0OworCXN0cnVjdCByZWd1bGF0b3Jfc3RhdGUgKnN1c3BlbmRfc3RhdGU7CisJc3RydWN0IGRldmljZV9ub2RlICpzdXNwZW5kX25wOworCWludCByZXQsIGk7CiAJdTMyIHB2YWw7CiAKIAljb25zdHJhaW50cy0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZ3VsYXRvci1uYW1lIiwgTlVMTCk7CkBAIC03MywxOCArODEsODQgQEAKIAlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInJlZ3VsYXRvci1lbmFibGUtcmFtcC1kZWxheSIsICZwdmFsKTsKIAlpZiAoIXJldCkKIAkJY29uc3RyYWludHMtPmVuYWJsZV90aW1lID0gcHZhbDsKKworCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJyZWd1bGF0b3ItaW5pdGlhbC1tb2RlIiwgJnB2YWwpKSB7CisJCWlmIChkZXNjICYmIGRlc2MtPm9mX21hcF9tb2RlKSB7CisJCQlyZXQgPSBkZXNjLT5vZl9tYXBfbW9kZShwdmFsKTsKKwkJCWlmIChyZXQgPT0gLUVJTlZBTCkKKwkJCQlwcl9lcnIoIiVzOiBpbnZhbGlkIG1vZGUgJXVcbiIsIG5wLT5uYW1lLCBwdmFsKTsKKwkJCWVsc2UKKwkJCQljb25zdHJhaW50cy0+aW5pdGlhbF9tb2RlID0gcmV0OworCQl9IGVsc2UgeworCQkJcHJfd2FybigiJXM6IG1hcHBpbmcgZm9yIG1vZGUgJWQgbm90IGRlZmluZWRcbiIsCisJCQkJbnAtPm5hbWUsIHB2YWwpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVndWxhdG9yX3N0YXRlcyk7IGkrKykgeworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSBQTV9TVVNQRU5EX01FTToKKwkJCXN1c3BlbmRfc3RhdGUgPSAmY29uc3RyYWludHMtPnN0YXRlX21lbTsKKwkJCWJyZWFrOworCQljYXNlIFBNX1NVU1BFTkRfTUFYOgorCQkJc3VzcGVuZF9zdGF0ZSA9ICZjb25zdHJhaW50cy0+c3RhdGVfZGlzazsKKwkJCWJyZWFrOworCQljYXNlIFBNX1NVU1BFTkRfT046CisJCWNhc2UgUE1fU1VTUEVORF9GUkVFWkU6CisJCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCX07CisKKwkJc3VzcGVuZF9ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCByZWd1bGF0b3Jfc3RhdGVzW2ldKTsKKwkJaWYgKCFzdXNwZW5kX25wIHx8ICFzdXNwZW5kX3N0YXRlKQorCQkJY29udGludWU7CisKKwkJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihzdXNwZW5kX25wLCAicmVndWxhdG9yLW1vZGUiLAorCQkJCQkgICZwdmFsKSkgeworCQkJaWYgKGRlc2MgJiYgZGVzYy0+b2ZfbWFwX21vZGUpIHsKKwkJCQlyZXQgPSBkZXNjLT5vZl9tYXBfbW9kZShwdmFsKTsKKwkJCQlpZiAocmV0ID09IC1FSU5WQUwpCisJCQkJCXByX2VycigiJXM6IGludmFsaWQgbW9kZSAldVxuIiwKKwkJCQkJICAgICAgIG5wLT5uYW1lLCBwdmFsKTsKKwkJCQllbHNlCisJCQkJCXN1c3BlbmRfc3RhdGUtPm1vZGUgPSByZXQ7CisJCQl9IGVsc2UgeworCQkJCXByX3dhcm4oIiVzOiBtYXBwaW5nIGZvciBtb2RlICVkIG5vdCBkZWZpbmVkXG4iLAorCQkJCQlucC0+bmFtZSwgcHZhbCk7CisJCQl9CisJCX0KKworCQlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKHN1c3BlbmRfbnAsCisJCQkJCSJyZWd1bGF0b3Itb24taW4tc3VzcGVuZCIpKQorCQkJc3VzcGVuZF9zdGF0ZS0+ZW5hYmxlZCA9IHRydWU7CisJCWVsc2UgaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChzdXNwZW5kX25wLAorCQkJCQkicmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kIikpCisJCQlzdXNwZW5kX3N0YXRlLT5kaXNhYmxlZCA9IHRydWU7CisKKwkJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihzdXNwZW5kX25wLAorCQkJCQkicmVndWxhdG9yLXN1c3BlbmQtbWljcm92b2x0IiwgJnB2YWwpKQorCQkJc3VzcGVuZF9zdGF0ZS0+dVYgPSBwdmFsOworCisJCW9mX25vZGVfcHV0KHN1c3BlbmRfbnApOworCQlzdXNwZW5kX3N0YXRlID0gTlVMTDsKKwkJc3VzcGVuZF9ucCA9IE5VTEw7CisJfQogfQogCiAvKioKICAqIG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhIC0gZXh0cmFjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHN0cnVjdHVyZSBpbmZvCiAgKiBAZGV2OiBkZXZpY2UgcmVxdWVzdGluZyBmb3IgcmVndWxhdG9yX2luaXRfZGF0YQorICogQG5vZGU6IHJlZ3VsYXRvciBkZXZpY2Ugbm9kZQorICogQGRlc2M6IHJlZ3VsYXRvciBkZXNjcmlwdGlvbgogICoKICAqIFBvcHVsYXRlcyByZWd1bGF0b3JfaW5pdF9kYXRhIHN0cnVjdHVyZSBieSBleHRyYWN0aW5nIGRhdGEgZnJvbSBkZXZpY2UKICAqIHRyZWUgbm9kZSwgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBvcHVsYXRlZCBzdHJ1dHVyZSBvciBOVUxMIGlmIG1lbW9yeQogICogYWxsb2MgZmFpbHMuCiAgKi8KIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCisJCQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwogCkBAIC05NSw3ICsxNjksNyBAQAogCWlmICghaW5pdF9kYXRhKQogCQlyZXR1cm4gTlVMTDsgLyogT3V0IG9mIG1lbW9yeT8gKi8KIAotCW9mX2dldF9yZWd1bGF0aW9uX2NvbnN0cmFpbnRzKG5vZGUsICZpbml0X2RhdGEpOworCW9mX2dldF9yZWd1bGF0aW9uX2NvbnN0cmFpbnRzKG5vZGUsICZpbml0X2RhdGEsIGRlc2MpOwogCXJldHVybiBpbml0X2RhdGE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSk7CkBAIC0xNzYsNyArMjUwLDggQEAKIAkJCQljb250aW51ZTsKIAogCQkJbWF0Y2gtPmluaXRfZGF0YSA9Ci0JCQkJb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBjaGlsZCk7CisJCQkJb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBjaGlsZCwKKwkJCQkJCQkgICBtYXRjaC0+ZGVzYyk7CiAJCQlpZiAoIW1hdGNoLT5pbml0X2RhdGEpIHsKIAkJCQlkZXZfZXJyKGRldiwKIAkJCQkJImZhaWxlZCB0byBwYXJzZSBEVCBmb3IgcmVndWxhdG9yICVzXG4iLApAQCAtMjI0LDcgKzI5OSw3IEBACiAJCWlmIChzdHJjbXAoZGVzYy0+b2ZfbWF0Y2gsIG5hbWUpKQogCQkJY29udGludWU7CiAKLQkJaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBjaGlsZCk7CisJCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgY2hpbGQsIGRlc2MpOwogCQlpZiAoIWluaXRfZGF0YSkgewogCQkJZGV2X2VycihkZXYsCiAJCQkJImZhaWxlZCB0byBwYXJzZSBEVCBmb3IgcmVndWxhdG9yICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvcHdtLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcHdtLXJlZ3VsYXRvci5jCmluZGV4IGQzZjU1ZWEuLjkxZjM0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3B3bS1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9wd20tcmVndWxhdG9yLmMKQEAgLTE0OSw3ICsxNDksOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWNvbmZpZy5pbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmcGRldi0+ZGV2LCBucCk7CisJY29uZmlnLmluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIG5wLAorCQkJCQkJICAgICAgJmRydmRhdGEtPmRlc2MpOwogCWlmICghY29uZmlnLmluaXRfZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3Fjb21fcnBtLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcWNvbV9ycG0tcmVndWxhdG9yLmMKaW5kZXggYjU1Y2Q1Yi4uMTgzNTk4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcWNvbV9ycG0tcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvcWNvbV9ycG0tcmVndWxhdG9yLmMKQEAgLTE4Myw2ICsxODMsMTMgQEAKIAlSRUdVTEFUT1JfTElORUFSX1JBTkdFKDE1MDAwMDAsICA2NCwgMTAwLCA1MDAwMCksCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9saW5lYXJfcmFuZ2Ugc21iMjA4X3Jhbmdlc1tdID0geworCVJFR1VMQVRPUl9MSU5FQVJfUkFOR0UoIDM3NTAwMCwgICAwLCAgMjksIDEyNTAwKSwKKwlSRUdVTEFUT1JfTElORUFSX1JBTkdFKCA3NTAwMDAsICAzMCwgIDg5LCAxMjUwMCksCisJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSgxNTAwMDAwLCAgOTAsIDE1MywgMjUwMDApLAorCVJFR1VMQVRPUl9MSU5FQVJfUkFOR0UoMzEwMDAwMCwgMTU0LCAyMzQsIDI1MDAwKSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2xpbmVhcl9yYW5nZSBuY3BfcmFuZ2VzW10gPSB7CiAJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSgxNTAwMDAwLCAgIDAsICAzMSwgNTAwMDApLAogfTsKQEAgLTU1OSw2ICs1NjYsMTYgQEAKIAkucGFydHMgPSAmcnBtODk2MF9zd2l0Y2hfcGFydHMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHFjb21fcnBtX3JlZyBzbWIyMDhfc21wcyA9IHsKKwkuZGVzYy5saW5lYXJfcmFuZ2VzID0gc21iMjA4X3JhbmdlcywKKwkuZGVzYy5uX2xpbmVhcl9yYW5nZXMgPSBBUlJBWV9TSVpFKHNtYjIwOF9yYW5nZXMpLAorCS5kZXNjLm5fdm9sdGFnZXMgPSAyMzUsCisJLmRlc2Mub3BzID0gJnVWX29wcywKKwkucGFydHMgPSAmcnBtODk2MF9zbXBzX3BhcnRzLAorCS5zdXBwb3J0c19mb3JjZV9tb2RlX2F1dG8gPSBmYWxzZSwKKwkuc3VwcG9ydHNfZm9yY2VfbW9kZV9ieXBhc3MgPSBmYWxzZSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJwbV9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAicWNvbSxycG0tcG04MDU4LXBsZG8iLCAgICAgLmRhdGEgPSAmcG04MDU4X3BsZG8gfSwKIAl7IC5jb21wYXRpYmxlID0gInFjb20scnBtLXBtODA1OC1ubGRvIiwgICAgIC5kYXRhID0gJnBtODA1OF9ubGRvIH0sCkBAIC01NzgsNiArNTk1LDggQEAKIAl7IC5jb21wYXRpYmxlID0gInFjb20scnBtLXBtODkyMS1mdHNtcHMiLCAgIC5kYXRhID0gJnBtODkyMV9mdHNtcHMgfSwKIAl7IC5jb21wYXRpYmxlID0gInFjb20scnBtLXBtODkyMS1uY3AiLCAgICAgIC5kYXRhID0gJnBtODkyMV9uY3AgfSwKIAl7IC5jb21wYXRpYmxlID0gInFjb20scnBtLXBtODkyMS1zd2l0Y2giLCAgIC5kYXRhID0gJnBtODkyMV9zd2l0Y2ggfSwKKworCXsgLmNvbXBhdGlibGUgPSAicWNvbSxycG0tc21iMjA4IiwgLmRhdGEgPSAmc21iMjA4X3NtcHMgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBycG1fb2ZfbWF0Y2gpOwpAQCAtNjQzLDEwICs2NjIsNiBAQAogCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKHJwbV9vZl9tYXRjaCwgJnBkZXYtPmRldik7CiAJdGVtcGxhdGUgPSBtYXRjaC0+ZGF0YTsKIAotCWluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgcGRldi0+ZGV2Lm9mX25vZGUpOwotCWlmICghaW5pdGRhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJdnJlZyA9IGRldm1fa21hbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnZyZWcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZyZWcpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHZyZWdcbiIpOwpAQCAtNjY2LDYgKzY4MSwxMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpbml0ZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkgICAgICAmdnJlZy0+ZGVzYyk7CisJaWYgKCFpbml0ZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlrZXkgPSAicmVnIjsKIAlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwga2V5LCAmdmFsKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9yazgwOC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3JrODA4LXJlZ3VsYXRvci5jCmluZGV4IDE5NmE1YzguLmVhOWQwNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3JrODA4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3JrODA4LXJlZ3VsYXRvci5jCkBAIC0zNiw2ICszNiwxMiBAQAogI2RlZmluZSBSSzgwOF9SQU1QX1JBVEVfNk1WX1BFUl9VUwkoMiA8PCBSSzgwOF9SQU1QX1JBVEVfT0ZGU0VUKQogI2RlZmluZSBSSzgwOF9SQU1QX1JBVEVfMTBNVl9QRVJfVVMJKDMgPDwgUks4MDhfUkFNUF9SQVRFX09GRlNFVCkKIAorLyogT2Zmc2V0IGZyb20gWFhYX09OX1ZTRUwgdG8gWFhYX1NMUF9WU0VMICovCisjZGVmaW5lIFJLODA4X1NMUF9SRUdfT0ZGU0VUIDEKKworLyogT2Zmc2V0IGZyb20gWFhYX0VOX1JFRyB0byBTTEVFUF9TRVRfT0ZGX1hYWCAqLworI2RlZmluZSBSSzgwOF9TTFBfU0VUX09GRl9SRUdfT0ZGU0VUIDIKKwogc3RhdGljIGNvbnN0IGludCByazgwOF9idWNrX2NvbmZpZ19yZWdzW10gPSB7CiAJUks4MDhfQlVDSzFfQ09ORklHX1JFRywKIAlSSzgwOF9CVUNLMl9DT05GSUdfUkVHLApAQCAtOTEsNiArOTcsNDMgQEAKIAkJCQkgIFJLODA4X1JBTVBfUkFURV9NQVNLLCByYW1wX3ZhbHVlKTsKIH0KIAoraW50IHJrODA4X3NldF9zdXNwZW5kX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCB1dikKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCBzZWwgPSByZWd1bGF0b3JfbWFwX3ZvbHRhZ2VfbGluZWFyX3JhbmdlKHJkZXYsIHV2LCB1dik7CisKKwlpZiAoc2VsIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgPSByZGV2LT5kZXNjLT52c2VsX3JlZyArIFJLODA4X1NMUF9SRUdfT0ZGU0VUOworCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJlZywKKwkJCQkgIHJkZXYtPmRlc2MtPnZzZWxfbWFzaywKKwkJCQkgIHNlbCk7Cit9CisKK2ludCByazgwOF9zZXRfc3VzcGVuZF9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJkZXYtPmRlc2MtPmVuYWJsZV9yZWcgKyBSSzgwOF9TTFBfU0VUX09GRl9SRUdfT0ZGU0VUOworCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZGV2LT5yZWdtYXAsIHJlZywKKwkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLAorCQkJCSAgMCk7Cit9CisKK2ludCByazgwOF9zZXRfc3VzcGVuZF9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZGV2LT5kZXNjLT5lbmFibGVfcmVnICsgUks4MDhfU0xQX1NFVF9PRkZfUkVHX09GRlNFVDsKKworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocmRldi0+cmVnbWFwLCByZWcsCisJCQkJICByZGV2LT5kZXNjLT5lbmFibGVfbWFzaywKKwkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrKTsKK30KKwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHJrODA4X2J1Y2sxXzJfb3BzID0gewogCS5saXN0X3ZvbHRhZ2UJCT0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXJfcmFuZ2UsCiAJLm1hcF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXJfcmFuZ2UsCkBAIC0xMDAsNiArMTQzLDkgQEAKIAkuZGlzYWJsZQkJPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCiAJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAogCS5zZXRfcmFtcF9kZWxheQkJPSByazgwOF9zZXRfcmFtcF9kZWxheSwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZQk9IHJrODA4X3NldF9zdXNwZW5kX3ZvbHRhZ2UsCisJLnNldF9zdXNwZW5kX2VuYWJsZQk9IHJrODA4X3NldF9zdXNwZW5kX2VuYWJsZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IHJrODA4X3NldF9zdXNwZW5kX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcms4MDhfcmVnX29wcyA9IHsKQEAgLTExMCwxMiArMTU2LDE3IEBACiAJLmVuYWJsZQkJCT0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCiAJLmRpc2FibGUJCT0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAogCS5pc19lbmFibGVkCQk9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZQk9IHJrODA4X3NldF9zdXNwZW5kX3ZvbHRhZ2UsCisJLnNldF9zdXNwZW5kX2VuYWJsZQk9IHJrODA4X3NldF9zdXNwZW5kX2VuYWJsZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZQk9IHJrODA4X3NldF9zdXNwZW5kX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcms4MDhfc3dpdGNoX29wcyA9IHsKLQkuZW5hYmxlID0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCi0JLmRpc2FibGUgPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCi0JLmlzX2VuYWJsZWQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCisJLmVuYWJsZQkJCT0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCisJLmRpc2FibGUJCT0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorCS5pc19lbmFibGVkCQk9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKKwkuc2V0X3N1c3BlbmRfZW5hYmxlCT0gcms4MDhfc2V0X3N1c3BlbmRfZW5hYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gcms4MDhfc2V0X3N1c3BlbmRfZGlzYWJsZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2Mgcms4MDhfcmVnW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9ybjV0NjE4LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivcm41dDYxOC1yZWd1bGF0b3IuYwppbmRleCBlNThkNzlhLi5iODVjZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9ybjV0NjE4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3JuNXQ2MTgtcmVndWxhdG9yLmMKQEAgLTMxLDYgKzMxLDggQEAKICNkZWZpbmUgUkVHKHJpZCwgZXJlZywgZW1hc2ssIHZyZWcsIHZtYXNrLCBtaW4sIG1heCwgc3RlcCkJCVwKIAlbUk41VDYxOF8jI3JpZF0gPSB7CQkJCQkJXAogCQkubmFtZQkJPSAjcmlkLAkJCQkJXAorCQkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoI3JpZCksCQkJXAorCQkucmVndWxhdG9yc19ub2RlID0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCQlcCiAJCS5pZAkJPSBSTjVUNjE4XyMjcmlkLAkJCVwKIAkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJXAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCQkJCVwKQEAgLTYwLDYwICs2MiwxNSBAQAogCVJFRyhMRE9SVEMyLCBMRE9FTjIsIEJJVCg1KSwgTERPUlRDMkRBQywgMHg3ZiwgOTAwMDAwLCAzNTAwMDAwLCAyNTAwMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCBybjV0NjE4X21hdGNoZXNbXSA9IHsKLQlbUk41VDYxOF9EQ0RDMV0JCT0geyAubmFtZSA9ICJEQ0RDMSIgfSwKLQlbUk41VDYxOF9EQ0RDMl0JCT0geyAubmFtZSA9ICJEQ0RDMiIgfSwKLQlbUk41VDYxOF9EQ0RDM10JCT0geyAubmFtZSA9ICJEQ0RDMyIgfSwKLQlbUk41VDYxOF9MRE8xXQkJPSB7IC5uYW1lID0gIkxETzEiIH0sCi0JW1JONVQ2MThfTERPMl0JCT0geyAubmFtZSA9ICJMRE8yIiB9LAotCVtSTjVUNjE4X0xETzNdCQk9IHsgLm5hbWUgPSAiTERPMyIgfSwKLQlbUk41VDYxOF9MRE80XQkJPSB7IC5uYW1lID0gIkxETzQiIH0sCi0JW1JONVQ2MThfTERPNV0JCT0geyAubmFtZSA9ICJMRE81IiB9LAotCVtSTjVUNjE4X0xET1JUQzFdCT0geyAubmFtZSA9ICJMRE9SVEMxIiB9LAotCVtSTjVUNjE4X0xET1JUQzJdCT0geyAubmFtZSA9ICJMRE9SVEMyIiB9LAotfTsKLQotc3RhdGljIGludCBybjV0NjE4X3JlZ3VsYXRvcl9wYXJzZV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpyZWd1bGF0b3JzOwotCWludCByZXQ7Ci0KLQlucCA9IG9mX25vZGVfZ2V0KHBkZXYtPmRldi5wYXJlbnQtPm9mX25vZGUpOwotCWlmICghbnApCi0JCXJldHVybiAwOwotCi0JcmVndWxhdG9ycyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCAicmVndWxhdG9ycyIpOwotCWlmICghcmVndWxhdG9ycykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZWd1bGF0b3JzIG5vZGUgbm90IGZvdW5kXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0ID0gb2ZfcmVndWxhdG9yX21hdGNoKCZwZGV2LT5kZXYsIHJlZ3VsYXRvcnMsIHJuNXQ2MThfbWF0Y2hlcywKLQkJCQkgQVJSQVlfU0laRShybjV0NjE4X21hdGNoZXMpKTsKLQlvZl9ub2RlX3B1dChyZWd1bGF0b3JzKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciBwYXJzaW5nIHJlZ3VsYXRvciBpbml0IGRhdGE6ICVkXG4iLAotCQkJcmV0KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBybjV0NjE4X3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBybjV0NjE4ICpybjV0NjE4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQlpbnQgcmV0LCBpOwotCi0JcmV0ID0gcm41dDYxOF9yZWd1bGF0b3JfcGFyc2VfZHQocGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBSTjVUNjE4X1JFR19OVU07IGkrKykgewotCQljb25maWcuZGV2ID0gJnBkZXYtPmRldjsKLQkJY29uZmlnLmluaXRfZGF0YSA9IHJuNXQ2MThfbWF0Y2hlc1tpXS5pbml0X2RhdGE7Ci0JCWNvbmZpZy5vZl9ub2RlID0gcm41dDYxOF9tYXRjaGVzW2ldLm9mX25vZGU7CisJCWNvbmZpZy5kZXYgPSBwZGV2LT5kZXYucGFyZW50OwogCQljb25maWcucmVnbWFwID0gcm41dDYxOC0+cmVnbWFwOwogCiAJCXJkZXYgPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcigmcGRldi0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvcnQ1MDMzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcnQ1MDMzLXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MGNjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9ydDUwMzMtcmVndWxhdG9yLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBSZWd1bGF0b3IgZHJpdmVyIGZvciB0aGUgUmljaHRlayBSVDUwMzMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcywgQ28uLCBMdGQuCisgKiBBdXRob3I6IEJlb21obyBTZW8gPGJlb21oby5zZW9Ac2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3J0NTAzMy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9ydDUwMzMtcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuaD4KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHJ0NTAzM19zYWZlX2xkb19vcHMgPSB7CisJLmlzX2VuYWJsZWQJCT0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5lbmFibGUJCQk9IHJlZ3VsYXRvcl9lbmFibGVfcmVnbWFwLAorCS5kaXNhYmxlCQk9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKKwkubGlzdF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2VfbGluZWFyLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHJ0NTAzM19idWNrX29wcyA9IHsKKwkuaXNfZW5hYmxlZAkJPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCisJLmVuYWJsZQkJCT0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCisJLmRpc2FibGUJCT0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorCS5saXN0X3ZvbHRhZ2UJCT0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXIsCisJLm1hcF92b2x0YWdlCQk9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXIsCisJLmdldF92b2x0YWdlX3NlbAk9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorCS5zZXRfdm9sdGFnZV9zZWwJPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgcnQ1MDMzX3N1cHBvcnRlZF9yZWd1bGF0b3JzW10gPSB7CisJW1JUNTAzM19CVUNLXSA9IHsKKwkJLm5hbWUJCT0gIkJVQ0siLAorCQkuaWQJCT0gUlQ1MDMzX0JVQ0ssCisJCS5vcHMJCT0gJnJ0NTAzM19idWNrX29wcywKKwkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm5fdm9sdGFnZXMJPSBSVDUwMzNfUkVHVUxBVE9SX0JVQ0tfVk9MVEFHRV9TVEVQX05VTSwKKwkJLm1pbl91VgkJPSBSVDUwMzNfUkVHVUxBVE9SX0JVQ0tfVk9MVEFHRV9NSU4sCisJCS51Vl9zdGVwCT0gUlQ1MDMzX1JFR1VMQVRPUl9CVUNLX1ZPTFRBR0VfU1RFUCwKKwkJLmVuYWJsZV9yZWcJPSBSVDUwMzNfUkVHX0NUUkwsCisJCS5lbmFibGVfbWFzawk9IFJUNTAzM19DVFJMX0VOX0JVQ0tfTUFTSywKKwkJLnZzZWxfcmVnCT0gUlQ1MDMzX1JFR19CVUNLX0NUUkwsCisJCS52c2VsX21hc2sJPSBSVDUwMzNfQlVDS19DVFJMX01BU0ssCisJfSwKKwlbUlQ1MDMzX0xET10gPSB7CisJCS5uYW1lCQk9ICJMRE8iLAorCQkuaWQJCT0gUlQ1MDMzX0xETywKKwkJLm9wcwkJPSAmcnQ1MDMzX2J1Y2tfb3BzLAorCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubl92b2x0YWdlcwk9IFJUNTAzM19SRUdVTEFUT1JfTERPX1ZPTFRBR0VfU1RFUF9OVU0sCisJCS5taW5fdVYJCT0gUlQ1MDMzX1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9NSU4sCisJCS51Vl9zdGVwCT0gUlQ1MDMzX1JFR1VMQVRPUl9MRE9fVk9MVEFHRV9TVEVQLAorCQkuZW5hYmxlX3JlZwk9IFJUNTAzM19SRUdfQ1RSTCwKKwkJLmVuYWJsZV9tYXNrCT0gUlQ1MDMzX0NUUkxfRU5fTERPX01BU0ssCisJCS52c2VsX3JlZwk9IFJUNTAzM19SRUdfTERPX0NUUkwsCisJCS52c2VsX21hc2sJPSBSVDUwMzNfTERPX0NUUkxfTUFTSywKKwl9LAorCVtSVDUwMzNfU0FGRV9MRE9dID0geworCQkubmFtZQkJPSAiU0FGRV9MRE8iLAorCQkuaWQJCT0gUlQ1MDMzX1NBRkVfTERPLAorCQkub3BzCQk9ICZydDUwMzNfc2FmZV9sZG9fb3BzLAorCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubl92b2x0YWdlcwk9IDEsCisJCS5taW5fdVYJCT0gUlQ1MDMzX1JFR1VMQVRPUl9TQUZFX0xET19WT0xUQUdFLAorCQkuZW5hYmxlX3JlZwk9IFJUNTAzM19SRUdfQ1RSTCwKKwkJLmVuYWJsZV9tYXNrCT0gUlQ1MDMzX0NUUkxfRU5fU0FGRV9MRE9fTUFTSywKKwl9LAorfTsKKworc3RhdGljIGludCBydDUwMzNfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0NTAzM19kZXYgKnJ0NTAzMyA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlpbnQgcmV0LCBpOworCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHt9OworCisJY29uZmlnLmRldiA9ICZwZGV2LT5kZXY7CisJY29uZmlnLmRyaXZlcl9kYXRhID0gcnQ1MDMzOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnQ1MDMzX3N1cHBvcnRlZF9yZWd1bGF0b3JzKTsgaSsrKSB7CisJCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3I7CisKKwkJY29uZmlnLnJlZ21hcCA9IHJ0NTAzMy0+cmVnbWFwOworCisJCXJlZ3VsYXRvciA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsCisJCQkJJnJ0NTAzM19zdXBwb3J0ZWRfcmVndWxhdG9yc1tpXSwgJmNvbmZpZyk7CisJCWlmIChJU19FUlIocmVndWxhdG9yKSkgeworCQkJcmV0ID0gUFRSX0VSUihyZWd1bGF0b3IpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJSZWd1bGF0b3IgaW5pdCBmYWlsZWQgJWQ6IHdpdGggZXJyb3I6ICVkXG4iLAorCQkJCWksIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHJ0NTAzM19yZWd1bGF0b3JfaWRbXSA9IHsKKwl7ICJydDUwMzMtcmVndWxhdG9yIiwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBydDUwMzNfcmVndWxhdG9yX2lkKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnQ1MDMzX3JlZ3VsYXRvcl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicnQ1MDMzLXJlZ3VsYXRvciIsCisJfSwKKwkucHJvYmUJCT0gcnQ1MDMzX3JlZ3VsYXRvcl9wcm9iZSwKKwkuaWRfdGFibGUJPSBydDUwMzNfcmVndWxhdG9yX2lkLAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocnQ1MDMzX3JlZ3VsYXRvcl9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlJpY2h0ZWsgUlQ1MDMzIFJlZ3VsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkJlb21obyBTZW8gPGJlb21oby5zZW9Ac2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wYTAxLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wYTAxLmMKaW5kZXggNzYzM2I5Yi4uNWRiNGUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvczJtcGEwMS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBhMDEuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJLmVuYWJsZV9tYXNrCT0gUzJNUEEwMV9FTkFCTEVfTUFTSwkJCVwKIH0KIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyByZWd1bGF0b3JzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHJlZ3VsYXRvcnNbXSA9IHsKIAlyZWd1bGF0b3JfZGVzY19sZG8oMSwgU1RFUF8yNV9NViksCiAJcmVndWxhdG9yX2Rlc2NfbGRvKDIsIFNURVBfNTBfTVYpLAogCXJlZ3VsYXRvcl9kZXNjX2xkbygzLCBTVEVQXzUwX01WKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3MybXBzMTEuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBzMTEuYwppbmRleCBhZGFiODJkLi5iMzQ1Y2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvczJtcHMxMS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wczExLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zYW1zdW5nL3MybXBzMTQuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc2Ftc3VuZy9zMm1wdTAyLmg+CiAKQEAgLTQ1LDEwICs0NiwxMCBAQAogCWVudW0gc2VjX2RldmljZV90eXBlIGRldl90eXBlOwogCiAJLyoKLQkgKiBPbmUgYml0IGZvciBlYWNoIFMyTVBTMTQvUzJNUFUwMiByZWd1bGF0b3Igd2hldGhlciB0aGUgc3VzcGVuZCBtb2RlCi0JICogd2FzIGVuYWJsZWQuCisJICogT25lIGJpdCBmb3IgZWFjaCBTMk1QUzEzL1MyTVBTMTQvUzJNUFUwMiByZWd1bGF0b3Igd2hldGhlcgorCSAqIHRoZSBzdXNwZW5kIG1vZGUgd2FzIGVuYWJsZWQuCiAJICovCi0JdW5zaWduZWQgbG9uZyBsb25nIHMybXBzMTRfc3VzcGVuZF9zdGF0ZTozNTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgczJtcHMxNF9zdXNwZW5kX3N0YXRlOjUwOwogCiAJLyogQXJyYXkgb2Ygc2l6ZSByZGV2X251bSB3aXRoIEdQSU8tcyBmb3IgZXh0ZXJuYWwgc2xlZXAgY29udHJvbCAqLwogCWludCAqZXh0X2NvbnRyb2xfZ3BpbzsKQEAgLTM2OSwxMiArMzcwLDEwMSBAQAogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTFfYnVjazZfMTAoMTAsIE1JTl83NTBfTVYsIFNURVBfMTJfNV9NViksCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgczJtcHMxNF9yZWdfb3BzOworCisjZGVmaW5lIHJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKG51bSwgbWluLCBzdGVwLCBtaW5fc2VsKSB7CVwKKwkubmFtZQkJPSAiTERPIiNudW0sCQkJCVwKKwkuaWQJCT0gUzJNUFMxM19MRE8jI251bSwJCQlcCisJLm9wcwkJPSAmczJtcHMxNF9yZWdfb3BzLAkJCVwKKwkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAkJCQlcCisJLm1pbl91VgkJPSBtaW4sCQkJCQlcCisJLnVWX3N0ZXAJPSBzdGVwLAkJCQkJXAorCS5saW5lYXJfbWluX3NlbAk9IG1pbl9zZWwsCQkJCVwKKwkubl92b2x0YWdlcwk9IFMyTVBTMTRfTERPX05fVk9MVEFHRVMsCQlcCisJLnZzZWxfcmVnCT0gUzJNUFMxM19SRUdfTDFDVFJMICsgbnVtIC0gMSwJCVwKKwkudnNlbF9tYXNrCT0gUzJNUFMxNF9MRE9fVlNFTF9NQVNLLAkJXAorCS5lbmFibGVfcmVnCT0gUzJNUFMxM19SRUdfTDFDVFJMICsgbnVtIC0gMSwJCVwKKwkuZW5hYmxlX21hc2sJPSBTMk1QUzE0X0VOQUJMRV9NQVNLCQkJXAorfQorCisjZGVmaW5lIHJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayhudW0sIG1pbiwgc3RlcCwgbWluX3NlbCkgewlcCisJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJXAorCS5pZAkJPSBTMk1QUzEzX0JVQ0sjI251bSwJCQlcCisJLm9wcwkJPSAmczJtcHMxNF9yZWdfb3BzLAkJCVwKKwkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAkJCQlcCisJLm1pbl91VgkJPSBtaW4sCQkJCQlcCisJLnVWX3N0ZXAJPSBzdGVwLAkJCQkJXAorCS5saW5lYXJfbWluX3NlbAk9IG1pbl9zZWwsCQkJCVwKKwkubl92b2x0YWdlcwk9IFMyTVBTMTRfQlVDS19OX1ZPTFRBR0VTLAkJXAorCS5yYW1wX2RlbGF5CT0gUzJNUFMxM19CVUNLX1JBTVBfREVMQVksCQlcCisJLnZzZWxfcmVnCT0gUzJNUFMxM19SRUdfQjFPVVQgKyAobnVtIC0gMSkgKiAyLAlcCisJLnZzZWxfbWFzawk9IFMyTVBTMTRfQlVDS19WU0VMX01BU0ssCQlcCisJLmVuYWJsZV9yZWcJPSBTMk1QUzEzX1JFR19CMUNUUkwgKyAobnVtIC0gMSkgKiAyLAlcCisJLmVuYWJsZV9tYXNrCT0gUzJNUFMxNF9FTkFCTEVfTUFTSwkJCVwKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBzMm1wczEzX3JlZ3VsYXRvcnNbXSA9IHsKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxLCAgTUlOXzgwMF9NViwgIFNURVBfMTJfNV9NViwgMHgwMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMiwgIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDMsICBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbyg0LCAgTUlOXzgwMF9NViwgIFNURVBfMTJfNV9NViwgMHgwMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oNSwgIE1JTl84MDBfTVYsICBTVEVQXzEyXzVfTVYsIDB4MDApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDYsICBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbyg3LCAgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oOCwgIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDksICBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxMCwgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMTEsIE1JTl84MDBfTVYsICBTVEVQXzI1X01WLCAgIDB4MTApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDEyLCBNSU5fODAwX01WLCAgU1RFUF8yNV9NViwgICAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxMywgTUlOXzgwMF9NViwgIFNURVBfMjVfTVYsICAgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMTQsIE1JTl84MDBfTVYsICBTVEVQXzEyXzVfTVYsIDB4MDApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDE1LCBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxNiwgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMTcsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDE4LCBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygxOSwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjAsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDIxLCBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyMiwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjMsIE1JTl84MDBfTVYsICBTVEVQXzEyXzVfTVYsIDB4MDApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDI0LCBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyNSwgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjYsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDI3LCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyOCwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMjksIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDMwLCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzMSwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMzIsIE1JTl8xMDAwX01WLCBTVEVQXzI1X01WLCAgIDB4MDgpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDMzLCBNSU5fMTQwMF9NViwgU1RFUF81MF9NViwgICAweDBDKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzNCwgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMzUsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDM2LCBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygzNywgTUlOXzEwMDBfTVYsIFNURVBfMjVfTVYsICAgMHgwOCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19sZG8oMzgsIE1JTl8xNDAwX01WLCBTVEVQXzUwX01WLCAgIDB4MEMpLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDM5LCBNSU5fMTAwMF9NViwgU1RFUF8yNV9NViwgICAweDA4KSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbyg0MCwgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDEsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soMiwgIE1JTl81MDBfTVYsICBTVEVQXzZfMjVfTVYsIDB4MTApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjaygzLCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDQsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soNSwgIE1JTl81MDBfTVYsICBTVEVQXzZfMjVfTVYsIDB4MTApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg2LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDcsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKKwlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soOCwgIE1JTl8xMDAwX01WLCBTVEVQXzEyXzVfTVYsIDB4MjApLAorCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg5LCAgTUlOXzEwMDBfTVYsIFNURVBfMTJfNV9NViwgMHgyMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDEwLCBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKK307CisKIHN0YXRpYyBpbnQgczJtcHMxNF9yZWd1bGF0b3JfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCBzMm1wczExX2luZm8gKnMybXBzMTEgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXVuc2lnbmVkIGludCB2YWw7CiAKIAlzd2l0Y2ggKHMybXBzMTEtPmRldl90eXBlKSB7CisJY2FzZSBTMk1QUzEzWDoKIAljYXNlIFMyTVBTMTRYOgogCQlpZiAoczJtcHMxMS0+czJtcHMxNF9zdXNwZW5kX3N0YXRlICYgKDEgPDwgcmRldl9nZXRfaWQocmRldikpKQogCQkJdmFsID0gUzJNUFMxNF9FTkFCTEVfU1VTUEVORDsKQEAgLTQwNiw2ICs0OTYsNyBAQAogCiAJLyogQmVsb3cgTERPIHNob3VsZCBiZSBhbHdheXMgb24gb3IgZG9lcyBub3Qgc3VwcG9ydCBzdXNwZW5kIG1vZGUuICovCiAJc3dpdGNoIChzMm1wczExLT5kZXZfdHlwZSkgeworCWNhc2UgUzJNUFMxM1g6CiAJY2FzZSBTMk1QUzE0WDoKIAkJc3dpdGNoIChyZGV2X2lkKSB7CiAJCWNhc2UgUzJNUFMxNF9MRE8zOgpAQCAtODMxLDYgKzkyMiwxMCBAQAogCQlzMm1wczExLT5yZGV2X251bSA9IEFSUkFZX1NJWkUoczJtcHMxMV9yZWd1bGF0b3JzKTsKIAkJcmVndWxhdG9ycyA9IHMybXBzMTFfcmVndWxhdG9yczsKIAkJYnJlYWs7CisJY2FzZSBTMk1QUzEzWDoKKwkJczJtcHMxMS0+cmRldl9udW0gPSBBUlJBWV9TSVpFKHMybXBzMTNfcmVndWxhdG9ycyk7CisJCXJlZ3VsYXRvcnMgPSBzMm1wczEzX3JlZ3VsYXRvcnM7CisJCWJyZWFrOwogCWNhc2UgUzJNUFMxNFg6CiAJCXMybXBzMTEtPnJkZXZfbnVtID0gQVJSQVlfU0laRShzMm1wczE0X3JlZ3VsYXRvcnMpOwogCQlyZWd1bGF0b3JzID0gczJtcHMxNF9yZWd1bGF0b3JzOwpAQCAtODQ1LDcgKzk0MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX07CiAKLQlzMm1wczExLT5leHRfY29udHJvbF9ncGlvID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCisJczJtcHMxMS0+ZXh0X2NvbnRyb2xfZ3BpbyA9IGRldm1fa21hbGxvYygmcGRldi0+ZGV2LAogCQkJc2l6ZW9mKCpzMm1wczExLT5leHRfY29udHJvbF9ncGlvKSAqIHMybXBzMTEtPnJkZXZfbnVtLAogCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFzMm1wczExLT5leHRfY29udHJvbF9ncGlvKQpAQCAtODg2LDYgKzk4MSw3IEBACiAJY29uZmlnLnJlZ21hcCA9IGlvZGV2LT5yZWdtYXBfcG1pYzsKIAljb25maWcuZHJpdmVyX2RhdGEgPSBzMm1wczExOwogCWNvbmZpZy5lbmFfZ3Bpb19mbGFncyA9IEdQSU9GX09VVF9JTklUX0hJR0g7CisJY29uZmlnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKIAlmb3IgKGkgPSAwOyBpIDwgczJtcHMxMS0+cmRldl9udW07IGkrKykgewogCQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yOwogCkBAIC05MjcsNiArMTAyMyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHMybXBzMTFfcG1pY19pZFtdID0gewogCXsgInMybXBzMTEtcG1pYyIsIFMyTVBTMTFYfSwKKwl7ICJzMm1wczEzLXBtaWMiLCBTMk1QUzEzWH0sCiAJeyAiczJtcHMxNC1wbWljIiwgUzJNUFMxNFh9LAogCXsgInMybXB1MDItcG1pYyIsIFMyTVBVMDJ9LAogCXsgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3M1bTg3NjcuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3M1bTg3NjcuYwppbmRleCAwYWI1Y2JlLi5kYzEzMjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zNW04NzY3LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvczVtODc2Ny5jCkBAIC01ODEsNyArNTgxLDggQEAKIAogCQlyZGF0YS0+aWQgPSBpOwogCQlyZGF0YS0+aW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgKLQkJCQkJCSZwZGV2LT5kZXYsIHJlZ19ucCk7CisJCQkJCQkmcGRldi0+ZGV2LCByZWdfbnAsCisJCQkJCQkmcmVndWxhdG9yc1tpXSk7CiAJCXJkYXRhLT5yZWdfbm9kZSA9IHJlZ19ucDsKIAkJcmRhdGErKzsKIAkJcm1vZGUtPmlkID0gaTsKQEAgLTk1MCw2ICs5NTEsNyBAQAogCQljb25maWcub2Zfbm9kZSA9IHBkYXRhLT5yZWd1bGF0b3JzW2ldLnJlZ19ub2RlOwogCQljb25maWcuZW5hX2dwaW8gPSAtRUlOVkFMOwogCQljb25maWcuZW5hX2dwaW9fZmxhZ3MgPSAwOworCQljb25maWcuZW5hX2dwaW9faW5pdGlhbGl6ZWQgPSB0cnVlOwogCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+cmVndWxhdG9yc1tpXS5leHRfY29udHJvbF9ncGlvKSkKIAkJCXM1bTg3NjdfcmVndWxhdG9yX2NvbmZpZ19leHRfY29udHJvbChzNW04NzY3LAogCQkJCQkmcGRhdGEtPnJlZ3VsYXRvcnNbaV0sICZjb25maWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivc2t5ODE0NTItcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9za3k4MTQ1Mi1yZWd1bGF0b3IuYwppbmRleCA5N2FmZjBjLi42NDc4NjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9za3k4MTQ1Mi1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9za3k4MTQ1Mi1yZWd1bGF0b3IuYwpAQCAtNSw5ICs1LDggQEAKICAqIEF1dGhvciA6IEd5dW5nb2ggWW9vIDxqYWNrLnlvb0Bza3l3b3Jrc2luYy5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC01Miw2ICs1MSw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2Mgc2t5ODE0NTJfcmVnID0gewogCS5uYW1lID0gIkxPVVQiLAorCS5vZl9tYXRjaCA9IG9mX21hdGNoX3B0cigibG91dCIpLAorCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvciIpLAogCS5vcHMgPSAmc2t5ODE0NTJfcmVnX29wcywKIAkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNjQsMzAgKzY1LDYgQEAKIAkuZW5hYmxlX21hc2sgPSBTS1k4MTQ1Ml9MRU4sCiB9OwogCi0jaWZkZWYgQ09ORklHX09GCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKnNreTgxNDUyX3JlZ19wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtPnBhcmVudC0+b2Zfbm9kZSwgInJlZ3VsYXRvciIpOwotCWlmICh1bmxpa2VseSghbnApKSB7Ci0JCWRldl9lcnIoZGV2LCAicmVndWxhdG9yIG5vZGUgbm90IGZvdW5kIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKGRldiwgbnApOwotCi0Jb2Zfbm9kZV9wdXQobnApOwotCXJldHVybiBpbml0X2RhdGE7Ci19Ci0jZWxzZQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpza3k4MTQ1Ml9yZWdfcGFyc2VfZHQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc2t5ODE0NTJfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKQEAgLTk1LDIwICs3MiwxNiBAQAogCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKIAotCWlmICghaW5pdF9kYXRhKSB7Ci0JCWluaXRfZGF0YSA9IHNreTgxNDUyX3JlZ19wYXJzZV9kdChkZXYpOwotCQlpZiAoSVNfRVJSKGluaXRfZGF0YSkpCi0JCQlyZXR1cm4gUFRSX0VSUihpbml0X2RhdGEpOwotCX0KLQotCWNvbmZpZy5kZXYgPSBkZXY7CisJY29uZmlnLmRldiA9IGRldi0+cGFyZW50OwogCWNvbmZpZy5pbml0X2RhdGEgPSBpbml0X2RhdGE7CiAJY29uZmlnLm9mX25vZGUgPSBkZXYtPm9mX25vZGU7CiAJY29uZmlnLnJlZ21hcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7CiAKIAlyZGV2ID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoZGV2LCAmc2t5ODE0NTJfcmVnLCAmY29uZmlnKTsKLQlpZiAoSVNfRVJSKHJkZXYpKQorCWlmIChJU19FUlIocmRldikpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIuIGVycj0lbGRcbiIsIFBUUl9FUlIocmRldikpOwogCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCByZGV2KTsKIApAQCAtMTI2LDUgKzk5LDQgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTa3l3b3JrcyBTS1k4MTQ1MiBSZWd1bGF0b3IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJHeXVuZ29oIFlvbyA8amFjay55b29Ac2t5d29ya3NpbmMuY29tPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oIjEuMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivc3R3NDgxeC12bW1jLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9zdHc0ODF4LXZtbWMuYwppbmRleCBhN2UxNTI2Li5iNGYxNjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9zdHc0ODF4LXZtbWMuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9zdHc0ODF4LXZtbWMuYwpAQCAtNzIsNyArNzIsOCBAQAogCWNvbmZpZy5yZWdtYXAgPSBzdHc0ODF4LT5tYXA7CiAJY29uZmlnLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAljb25maWcuaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwKLQkJCQkJCSAgICAgIHBkZXYtPmRldi5vZl9ub2RlKTsKKwkJCQkJCSAgICAgIHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkJICAgICAgJnZtbWNfcmVndWxhdG9yKTsKIAogCXN0dzQ4MXgtPnZtbWNfcmVndWxhdG9yID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoJnBkZXYtPmRldiwKIAkJCQkJCSZ2bW1jX3JlZ3VsYXRvciwgJmNvbmZpZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90aS1hYmItcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90aS1hYmItcmVndWxhdG9yLmMKaW5kZXggYTJkYWJiNS4uMWVmNWFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdGktYWJiLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RpLWFiYi1yZWd1bGF0b3IuYwpAQCAtODM3LDcgKzgzNyw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluaXRkYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJaW5pdGRhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkgICAgICAmYWJiLT5yZGVzYyk7CiAJaWYgKCFpbml0ZGF0YSkgewogCQlkZXZfZXJyKGRldiwgIiVzOiBVbmFibGUgdG8gYWxsb2MgcmVndWxhdG9yIGluaXQgZGF0YVxuIiwKIAkJCV9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczUxNjMyLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNTE2MzItcmVndWxhdG9yLmMKaW5kZXggZjMxZjIyZS4uYzIxM2UzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNTE2MzItcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNTE2MzItcmVndWxhdG9yLmMKQEAgLTIyMSw3ICsyMjEsOCBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdHBzNTE2MzJfb2ZfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IHRwczUxNjMyX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhICoKLQlvZl9nZXRfdHBzNTE2MzJfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCisJb2ZfZ2V0X3RwczUxNjMyX3BsYXRmb3JtX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgdHBzNTE2MzJfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CkBAIC0yMzAsNyArMjMxLDggQEAKIAlpZiAoIXBkYXRhKQogCQlyZXR1cm4gTlVMTDsKIAotCXBkYXRhLT5yZWdfaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUpOworCXBkYXRhLT5yZWdfaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoZGV2LCBkZXYtPm9mX25vZGUsCisJCQkJCQkJICBkZXNjKTsKIAlpZiAoIXBkYXRhLT5yZWdfaW5pdF9kYXRhKSB7CiAJCWRldl9lcnIoZGV2LCAiTm90IGFibGUgdG8gZ2V0IE9GIHJlZ3VsYXRvciBpbml0IGRhdGFcbiIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTI0OCw3ICsyNTAsOCBAQAogfQogI2Vsc2UKIHN0YXRpYyBzdHJ1Y3QgdHBzNTE2MzJfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKgotCW9mX2dldF90cHM1MTYzMl9wbGF0Zm9ybV9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldikKKwlvZl9nZXRfdHBzNTE2MzJfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKQogewogCXJldHVybiBOVUxMOwogfQpAQCAtMjczLDkgKzI3NiwyNSBAQAogCQl9CiAJfQogCisJdHBzID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCp0cHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cHMtPmRldiA9ICZjbGllbnQtPmRldjsKKwl0cHMtPmRlc2MubmFtZSA9IGNsaWVudC0+bmFtZTsKKwl0cHMtPmRlc2MuaWQgPSAwOworCXRwcy0+ZGVzYy5yYW1wX2RlbGF5ID0gVFBTNTE2MzJfREVGQVVMVF9SQU1QX0RFTEFZOworCXRwcy0+ZGVzYy5taW5fdVYgPSBUUFM1MTYzMl9NSU5fVk9MVEFHRTsKKwl0cHMtPmRlc2MudVZfc3RlcCA9IFRQUzUxNjMyX1ZPTFRBR0VfU1RFUF8xMG1WOworCXRwcy0+ZGVzYy5saW5lYXJfbWluX3NlbCA9IFRQUzUxNjMyX01JTl9WU0VMOworCXRwcy0+ZGVzYy5uX3ZvbHRhZ2VzID0gVFBTNTE2MzJfTUFYX1ZTRUwgKyAxOworCXRwcy0+ZGVzYy5vcHMgPSAmdHBzNTE2MzJfZGNkY19vcHM7CisJdHBzLT5kZXNjLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRTsKKwl0cHMtPmRlc2Mub3duZXIgPSBUSElTX01PRFVMRTsKKwogCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmY2xpZW50LT5kZXYpOwogCWlmICghcGRhdGEgJiYgY2xpZW50LT5kZXYub2Zfbm9kZSkKLQkJcGRhdGEgPSBvZl9nZXRfdHBzNTE2MzJfcGxhdGZvcm1fZGF0YSgmY2xpZW50LT5kZXYpOworCQlwZGF0YSA9IG9mX2dldF90cHM1MTYzMl9wbGF0Zm9ybV9kYXRhKCZjbGllbnQtPmRldiwgJnRwcy0+ZGVzYyk7CiAJaWYgKCFwZGF0YSkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk5vIFBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI5NiwyMiArMzE1LDYgQEAKIAkJfQogCX0KIAotCXRwcyA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqdHBzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cHMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JdHBzLT5kZXYgPSAmY2xpZW50LT5kZXY7Ci0JdHBzLT5kZXNjLm5hbWUgPSBjbGllbnQtPm5hbWU7Ci0JdHBzLT5kZXNjLmlkID0gMDsKLQl0cHMtPmRlc2MucmFtcF9kZWxheSA9IFRQUzUxNjMyX0RFRkFVTFRfUkFNUF9ERUxBWTsKLQl0cHMtPmRlc2MubWluX3VWID0gVFBTNTE2MzJfTUlOX1ZPTFRBR0U7Ci0JdHBzLT5kZXNjLnVWX3N0ZXAgPSBUUFM1MTYzMl9WT0xUQUdFX1NURVBfMTBtVjsKLQl0cHMtPmRlc2MubGluZWFyX21pbl9zZWwgPSBUUFM1MTYzMl9NSU5fVlNFTDsKLQl0cHMtPmRlc2Mubl92b2x0YWdlcyA9IFRQUzUxNjMyX01BWF9WU0VMICsgMTsKLQl0cHMtPmRlc2Mub3BzID0gJnRwczUxNjMyX2RjZGNfb3BzOwotCXRwcy0+ZGVzYy50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0U7Ci0JdHBzLT5kZXNjLm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAlpZiAocGRhdGEtPmVuYWJsZV9wd21fZHZmcykKIAkJdHBzLT5kZXNjLnZzZWxfcmVnID0gVFBTNTE2MzJfVk9MVEFHRV9CQVNFX1JFRzsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2MjM2MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczYyMzYwLXJlZ3VsYXRvci5jCmluZGV4IGExNjcyMDQuLmExZmQ2MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczYyMzYwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczYyMzYwLXJlZ3VsYXRvci5jCkBAIC0yOTMsNyArMjkzLDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHBzNjIzNjBfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKgotCW9mX2dldF90cHM2MjM2MF9wbGF0Zm9ybV9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldikKKwlvZl9nZXRfdHBzNjIzNjBfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKQogewogCXN0cnVjdCB0cHM2MjM2MF9yZWd1bGF0b3JfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKQEAgLTMwMiw3ICszMDMsOCBAQAogCWlmICghcGRhdGEpCiAJCXJldHVybiBOVUxMOwogCi0JcGRhdGEtPnJlZ19pbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIGRldi0+b2Zfbm9kZSk7CisJcGRhdGEtPnJlZ19pbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YShkZXYsIGRldi0+b2Zfbm9kZSwKKwkJCQkJCQkgIGRlc2MpOwogCWlmICghcGRhdGEtPnJlZ19pbml0X2RhdGEpIHsKIAkJZGV2X2VycihkZXYsICJOb3QgYWJsZSB0byBnZXQgT0YgcmVndWxhdG9yIGluaXQgZGF0YVxuIik7CiAJCXJldHVybiBOVUxMOwpAQCAtMzUwLDYgKzM1MiwxNyBAQAogCiAJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZjbGllbnQtPmRldik7CiAKKwl0cHMgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKnRwcyksIEdGUF9LRVJORUwpOworCWlmICghdHBzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRwcy0+ZGVzYy5uYW1lID0gY2xpZW50LT5uYW1lOworCXRwcy0+ZGVzYy5pZCA9IDA7CisJdHBzLT5kZXNjLm9wcyA9ICZ0cHM2MjM2MF9kY2RjX29wczsKKwl0cHMtPmRlc2MudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFOworCXRwcy0+ZGVzYy5vd25lciA9IFRISVNfTU9EVUxFOworCXRwcy0+ZGVzYy51Vl9zdGVwID0gMTAwMDA7CisKIAlpZiAoY2xpZW50LT5kZXYub2Zfbm9kZSkgewogCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAkJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2Uob2ZfbWF0Y2hfcHRyKHRwczYyMzYwX29mX21hdGNoKSwKQEAgLTM2MCw3ICszNzMsOCBAQAogCQl9CiAJCWNoaXBfaWQgPSAoaW50KShsb25nKW1hdGNoLT5kYXRhOwogCQlpZiAoIXBkYXRhKQotCQkJcGRhdGEgPSBvZl9nZXRfdHBzNjIzNjBfcGxhdGZvcm1fZGF0YSgmY2xpZW50LT5kZXYpOworCQkJcGRhdGEgPSBvZl9nZXRfdHBzNjIzNjBfcGxhdGZvcm1fZGF0YSgmY2xpZW50LT5kZXYsCisJCQkJCQkJICAgICAgJnRwcy0+ZGVzYyk7CiAJfSBlbHNlIGlmIChpZCkgewogCQljaGlwX2lkID0gaWQtPmRyaXZlcl9kYXRhOwogCX0gZWxzZSB7CkBAIC0zNzQsMTAgKzM4OCw2IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCXRwcyA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqdHBzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cHMpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJdHBzLT5lbl9kaXNjaGFyZ2UgPSBwZGF0YS0+ZW5fZGlzY2hhcmdlOwogCXRwcy0+ZW5faW50ZXJuYWxfcHVsbGRuID0gcGRhdGEtPmVuX2ludGVybmFsX3B1bGxkbjsKIAl0cHMtPnZzZWwwX2dwaW8gPSBwZGF0YS0+dnNlbDBfZ3BpbzsKQEAgLTQwMSwxMyArNDExLDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JdHBzLT5kZXNjLm5hbWUgPSBjbGllbnQtPm5hbWU7Ci0JdHBzLT5kZXNjLmlkID0gMDsKLQl0cHMtPmRlc2Mub3BzID0gJnRwczYyMzYwX2RjZGNfb3BzOwotCXRwcy0+ZGVzYy50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0U7Ci0JdHBzLT5kZXNjLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JdHBzLT5kZXNjLnVWX3N0ZXAgPSAxMDAwMDsKLQogCXRwcy0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAmdHBzNjIzNjBfcmVnbWFwX2NvbmZpZyk7CiAJaWYgKElTX0VSUih0cHMtPnJlZ21hcCkpIHsKIAkJcmV0ID0gUFRSX0VSUih0cHMtPnJlZ21hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTA5MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDkwLXJlZ3VsYXRvci5jCmluZGV4IGQ1ZGYxZTkuLmYxZGY0NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDkwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDkwLXJlZ3VsYXRvci5jCkBAIC0zMTIsNyArMzEyLDExIEBACiAJCQlncGlvX2ZsYWcgPSBHUElPRl9PVVRfSU5JVF9ISUdIOwogCiAJCWNvbmZpZy0+ZW5hX2dwaW8gPSB0cHNfcGRhdGEtPmdwaW87CisJCWNvbmZpZy0+ZW5hX2dwaW9faW5pdGlhbGl6ZWQgPSB0cnVlOwogCQljb25maWctPmVuYV9ncGlvX2ZsYWdzID0gZ3Bpb19mbGFnOworCX0gZWxzZSB7CisJCWNvbmZpZy0+ZW5hX2dwaW8gPSAtRUlOVkFMOworCQljb25maWctPmVuYV9ncGlvX2luaXRpYWxpemVkID0gZmFsc2U7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTIxOC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjE4LXJlZ3VsYXRvci5jCmluZGV4IGYwYTQwMjguLjI2M2NjODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjE4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MjE4LXJlZ3VsYXRvci5jCkBAIC0yMzEsNyArMjMxLDggQEAKIAogCXRlbXBsYXRlID0gbWF0Y2gtPmRhdGE7CiAJaWQgPSB0ZW1wbGF0ZS0+aWQ7Ci0JaW5pdF9kYXRhID0gb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoJnBkZXYtPmRldiwgcGRldi0+ZGV2Lm9mX25vZGUpOworCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkgICAgICAgJnJlZ3VsYXRvcnNbaWRdKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHRwcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYwppbmRleCAwYjRmODY2Li5kZDcyN2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci90d2wtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHdsLXJlZ3VsYXRvci5jCkBAIC0xMTA0LDcgKzExMDQsOCBAQAogCQl0ZW1wbGF0ZSA9IG1hdGNoLT5kYXRhOwogCQlpZCA9IHRlbXBsYXRlLT5kZXNjLmlkOwogCQlpbml0ZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsCi0JCQkJCQkgICAgICBwZGV2LT5kZXYub2Zfbm9kZSk7CisJCQkJCQkgICAgICBwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJCSAgICAgICZ0ZW1wbGF0ZS0+ZGVzYyk7CiAJCWRydmRhdGEgPSBOVUxMOwogCX0gZWxzZSB7CiAJCWlkID0gcGRldi0+aWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci92ZXhwcmVzcy5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdmV4cHJlc3MuYwppbmRleCAwMmU3MjY3Li41ZTdjNzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci92ZXhwcmVzcy5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3ZleHByZXNzLmMKQEAgLTc0LDcgKzc0LDggQEAKIAlyZWctPmRlc2Mub3duZXIgPSBUSElTX01PRFVMRTsKIAlyZWctPmRlc2MuY29udGludW91c192b2x0YWdlX3JhbmdlID0gdHJ1ZTsKIAotCWluaXRfZGF0YSA9IG9mX2dldF9yZWd1bGF0b3JfaW5pdF9kYXRhKCZwZGV2LT5kZXYsIHBkZXYtPmRldi5vZl9ub2RlKTsKKwlpbml0X2RhdGEgPSBvZl9nZXRfcmVndWxhdG9yX2luaXRfZGF0YSgmcGRldi0+ZGV2LCBwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJICAgICAgICZyZWctPmRlc2MpOwogCWlmICghaW5pdF9kYXRhKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204OTk0LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204OTk0LXJlZ3VsYXRvci5jCmluZGV4IGMyNDM0NmQuLjg4ZjUwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODk5NC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg5OTQtcmVndWxhdG9yLmMKQEAgLTE0NSwxMCArMTQ1LDEyIEBACiAJY29uZmlnLmRyaXZlcl9kYXRhID0gbGRvOwogCWNvbmZpZy5yZWdtYXAgPSB3bTg5OTQtPnJlZ21hcDsKIAljb25maWcuaW5pdF9kYXRhID0gJmxkby0+aW5pdF9kYXRhOwotCWlmIChwZGF0YSkKKwlpZiAocGRhdGEpIHsKIAkJY29uZmlnLmVuYV9ncGlvID0gcGRhdGEtPmxkb1tpZF0uZW5hYmxlOwotCWVsc2UgaWYgKHdtODk5NC0+ZGV2LT5vZl9ub2RlKQorCX0gZWxzZSBpZiAod204OTk0LT5kZXYtPm9mX25vZGUpIHsKIAkJY29uZmlnLmVuYV9ncGlvID0gd204OTk0LT5wZGF0YS5sZG9baWRdLmVuYWJsZTsKKwkJY29uZmlnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gdHJ1ZTsKKwl9CiAKIAkvKiBVc2UgZGVmYXVsdCBjb25zdHJhaW50cyBpZiBub25lIHNldCB1cCAqLwogCWlmICghcGRhdGEgfHwgIXBkYXRhLT5sZG9baWRdLmluaXRfZGF0YSB8fCB3bTg5OTQtPmRldi0+b2Zfbm9kZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9NYWtlZmlsZSBiL2RyaXZlcnMvcmVzZXQvTWFrZWZpbGUKaW5kZXggNjBmZWQzZC4uMTU3ZDQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZXNldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Jlc2V0L01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogb2JqLSQoQ09ORklHX1JFU0VUX0NPTlRST0xMRVIpICs9IGNvcmUubwogb2JqLSQoQ09ORklHX0FSQ0hfU09DRlBHQSkgKz0gcmVzZXQtc29jZnBnYS5vCitvYmotJChDT05GSUdfQVJDSF9CRVJMSU4pICs9IHJlc2V0LWJlcmxpbi5vCiBvYmotJChDT05GSUdfQVJDSF9TVU5YSSkgKz0gcmVzZXQtc3VueGkubwogb2JqLSQoQ09ORklHX0FSQ0hfU1RJKSArPSBzdGkvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jlc2V0L2NvcmUuYyBiL2RyaXZlcnMvcmVzZXQvY29yZS5jCmluZGV4IGJhZWFmODIuLjc5NTVlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVzZXQvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVzZXQvY29yZS5jCkBAIC0xMjYsNiArMTI2LDIxIEBACiBFWFBPUlRfU1lNQk9MX0dQTChyZXNldF9jb250cm9sX2RlYXNzZXJ0KTsKIAogLyoqCisgKiByZXNldF9jb250cm9sX3N0YXR1cyAtIHJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyBpZiBub3Qgc3VwcG9ydGVkLCBhCisgKiBwb3NpdGl2ZSB2YWx1ZSBpZiB0aGUgcmVzZXQgbGluZSBpcyBhc3NlcnRlZCwgb3IgemVybyBpZiB0aGUgcmVzZXQKKyAqIGxpbmUgaXMgbm90IGFzc2VydGVkLgorICogQHJzdGM6IHJlc2V0IGNvbnRyb2xsZXIKKyAqLworaW50IHJlc2V0X2NvbnRyb2xfc3RhdHVzKHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKQoreworCWlmIChyc3RjLT5yY2Rldi0+b3BzLT5zdGF0dXMpCisJCXJldHVybiByc3RjLT5yY2Rldi0+b3BzLT5zdGF0dXMocnN0Yy0+cmNkZXYsIHJzdGMtPmlkKTsKKworCXJldHVybiAtRU5PU1lTOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVzZXRfY29udHJvbF9zdGF0dXMpOworCisvKioKICAqIG9mX3Jlc2V0X2NvbnRyb2xfZ2V0IC0gTG9va3VwIGFuZCBvYnRhaW4gYSByZWZlcmVuY2UgdG8gYSByZXNldCBjb250cm9sbGVyLgogICogQG5vZGU6IGRldmljZSB0byBiZSByZXNldCBieSB0aGUgY29udHJvbGxlcgogICogQGlkOiByZXNldCBsaW5lIG5hbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVzZXQvcmVzZXQtYmVybGluLmMgYi9kcml2ZXJzL3Jlc2V0L3Jlc2V0LWJlcmxpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YjQ4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Jlc2V0L3Jlc2V0LWJlcmxpbi5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1hcnZlbGwgVGVjaG5vbG9neSBHcm91cCBMdGQuCisgKgorICogQW50b2luZSBUZW5hcnQgPGFudG9pbmUudGVuYXJ0QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqIFNlYmFzdGlhbiBIZXNzZWxiYXJ0aCA8c2ViYXN0aWFuLmhlc3NlbGJhcnRoQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQtY29udHJvbGxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEJFUkxJTl9NQVhfUkVTRVRTCTMyCisKKyNkZWZpbmUgdG9fYmVybGluX3Jlc2V0X3ByaXYocCkJCVwKKwljb250YWluZXJfb2YoKHApLCBzdHJ1Y3QgYmVybGluX3Jlc2V0X3ByaXYsIHJjZGV2KQorCitzdHJ1Y3QgYmVybGluX3Jlc2V0X3ByaXYgeworCXZvaWQgX19pb21lbQkJCSpiYXNlOworCXVuc2lnbmVkIGludAkJCXNpemU7CisJc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2CXJjZGV2OworfTsKKworc3RhdGljIGludCBiZXJsaW5fcmVzZXRfcmVzZXQoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaWQpCit7CisJc3RydWN0IGJlcmxpbl9yZXNldF9wcml2ICpwcml2ID0gdG9fYmVybGluX3Jlc2V0X3ByaXYocmNkZXYpOworCWludCBvZmZzZXQgPSBpZCA+PiA4OworCWludCBtYXNrID0gQklUKGlkICYgMHgxZik7CisKKwl3cml0ZWwobWFzaywgcHJpdi0+YmFzZSArIG9mZnNldCk7CisKKwkvKiBsZXQgdGhlIHJlc2V0IGJlIGVmZmVjdGl2ZSAqLworCXVkZWxheSgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZXNldF9jb250cm9sX29wcyBiZXJsaW5fcmVzZXRfb3BzID0geworCS5yZXNldAk9IGJlcmxpbl9yZXNldF9yZXNldCwKK307CisKK3N0YXRpYyBpbnQgYmVybGluX3Jlc2V0X3hsYXRlKHN0cnVjdCByZXNldF9jb250cm9sbGVyX2RldiAqcmNkZXYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpyZXNldF9zcGVjKQoreworCXN0cnVjdCBiZXJsaW5fcmVzZXRfcHJpdiAqcHJpdiA9IHRvX2Jlcmxpbl9yZXNldF9wcml2KHJjZGV2KTsKKwl1bnNpZ25lZCBvZmZzZXQsIGJpdDsKKworCWlmIChXQVJOX09OKHJlc2V0X3NwZWMtPmFyZ3NfY291bnQgIT0gcmNkZXYtPm9mX3Jlc2V0X25fY2VsbHMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9mZnNldCA9IHJlc2V0X3NwZWMtPmFyZ3NbMF07CisJYml0ID0gcmVzZXRfc3BlYy0+YXJnc1sxXTsKKworCWlmIChvZmZzZXQgPj0gcHJpdi0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYml0ID49IEJFUkxJTl9NQVhfUkVTRVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAob2Zmc2V0IDw8IDgpIHwgYml0OworfQorCitzdGF0aWMgaW50IF9fYmVybGluX3Jlc2V0X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgYmVybGluX3Jlc2V0X3ByaXYgKnByaXY7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJc2l6ZSA9IHJlc291cmNlX3NpemUoJnJlcyk7CisJcHJpdi0+YmFzZSA9IGlvcmVtYXAocmVzLnN0YXJ0LCBzaXplKTsKKwlpZiAoIXByaXYtPmJhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCXByaXYtPnNpemUgPSBzaXplOworCisJcHJpdi0+cmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKKwlwcml2LT5yY2Rldi5vcHMgPSAmYmVybGluX3Jlc2V0X29wczsKKwlwcml2LT5yY2Rldi5vZl9ub2RlID0gbnA7CisJcHJpdi0+cmNkZXYub2ZfcmVzZXRfbl9jZWxscyA9IDI7CisJcHJpdi0+cmNkZXYub2ZfeGxhdGUgPSBiZXJsaW5fcmVzZXRfeGxhdGU7CisKKwlyZXNldF9jb250cm9sbGVyX3JlZ2lzdGVyKCZwcml2LT5yY2Rldik7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWtmcmVlKHByaXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJlcmxpbl9yZXNldF9vZl9tYXRjaFtdIF9faW5pdGNvbnN0ID0geworCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxiZXJsaW4yLWNoaXAtY3RybCIgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMmNkLWNoaXAtY3RybCIgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsYmVybGluMnEtY2hpcC1jdHJsIiB9LAorCXsgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJlcmxpbl9yZXNldF9pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgcmV0OworCisJZm9yX2VhY2hfbWF0Y2hpbmdfbm9kZShucCwgYmVybGluX3Jlc2V0X29mX21hdGNoKSB7CisJCXJldCA9IF9fYmVybGluX3Jlc2V0X2luaXQobnApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoYmVybGluX3Jlc2V0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9yZXNldC1zb2NmcGdhLmMgYi9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXNvY2ZwZ2EuYwppbmRleCA3OWMzMmNhLi40MDU4MjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXNvY2ZwZ2EuYworKysgYi9kcml2ZXJzL3Jlc2V0L3Jlc2V0LXNvY2ZwZ2EuYwpAQCAtNzYsOSArNzYsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzb2NmcGdhX3Jlc2V0X3N0YXR1cyhzdHJ1Y3QgcmVzZXRfY29udHJvbGxlcl9kZXYgKnJjZGV2LAorCQkJCXVuc2lnbmVkIGxvbmcgaWQpCit7CisJc3RydWN0IHNvY2ZwZ2FfcmVzZXRfZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZihyY2RldiwKKwkJCQkJCXN0cnVjdCBzb2NmcGdhX3Jlc2V0X2RhdGEsIHJjZGV2KTsKKwlpbnQgYmFuayA9IGlkIC8gQklUU19QRVJfTE9ORzsKKwlpbnQgb2Zmc2V0ID0gaWQgJSBCSVRTX1BFUl9MT05HOworCXUzMiByZWc7CisKKwlyZWcgPSByZWFkbChkYXRhLT5tZW1iYXNlICsgT0ZGU0VUX01PRFJTVCArIChiYW5rICogTlJfQkFOS1MpKTsKKworCXJldHVybiAhKHJlZyAmIEJJVChvZmZzZXQpKTsKK30KKwogc3RhdGljIHN0cnVjdCByZXNldF9jb250cm9sX29wcyBzb2NmcGdhX3Jlc2V0X29wcyA9IHsKIAkuYXNzZXJ0CQk9IHNvY2ZwZ2FfcmVzZXRfYXNzZXJ0LAogCS5kZWFzc2VydAk9IHNvY2ZwZ2FfcmVzZXRfZGVhc3NlcnQsCisJLnN0YXR1cwkJPSBzb2NmcGdhX3Jlc2V0X3N0YXR1cywKIH07CiAKIHN0YXRpYyBpbnQgc29jZnBnYV9yZXNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9zdGkvS2NvbmZpZyBiL2RyaXZlcnMvcmVzZXQvc3RpL0tjb25maWcKaW5kZXggODhkMmQwMy4uZjhjMTVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZXNldC9zdGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3Jlc2V0L3N0aS9LY29uZmlnCkBAIC0xMiw0ICsxMiw4IEBACiAJYm9vbAogCXNlbGVjdCBTVElfUkVTRVRfU1lTQ0ZHCiAKK2NvbmZpZyBTVElINDA3X1JFU0VUCisJYm9vbAorCXNlbGVjdCBTVElfUkVTRVRfU1lTQ0ZHCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jlc2V0L3N0aS9NYWtlZmlsZSBiL2RyaXZlcnMvcmVzZXQvc3RpL01ha2VmaWxlCmluZGV4IGJlMWM5NzY0Li5kYzg1ZGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jlc2V0L3N0aS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Jlc2V0L3N0aS9NYWtlZmlsZQpAQCAtMiwzICsyLDQgQEAKIAogb2JqLSQoQ09ORklHX1NUSUg0MTVfUkVTRVQpICs9IHJlc2V0LXN0aWg0MTUubwogb2JqLSQoQ09ORklHX1NUSUg0MTZfUkVTRVQpICs9IHJlc2V0LXN0aWg0MTYubworb2JqLSQoQ09ORklHX1NUSUg0MDdfUkVTRVQpICs9IHJlc2V0LXN0aWg0MDcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZXNldC9zdGkvcmVzZXQtc3RpaDQwNy5jIGIvZHJpdmVycy9yZXNldC9zdGkvcmVzZXQtc3RpaDQwNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4M2RiNWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZXNldC9zdGkvcmVzZXQtc3RpaDQwNy5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNUTWljcm9lbGVjdHJvbmljcyAoUiZEKSBMaW1pdGVkCisgKiBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQwNy1yZXNldHMuaD4KKyNpbmNsdWRlICJyZXNldC1zeXNjZmcuaCIKKworLyogU1RpSDQwNyBQZXJpcGhlcmFsIHBvd2VyZG93biBkZWZpbml0aW9ucy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyIHN0aWg0MDdfY29yZVtdID0gInN0LHN0aWg0MDctY29yZS1zeXNjZmciOworc3RhdGljIGNvbnN0IGNoYXIgc3RpaDQwN19zYmNfcmVnW10gPSAic3Qsc3RpaDQwNy1zYmMtcmVnLXN5c2NmZyI7CitzdGF0aWMgY29uc3QgY2hhciBzdGloNDA3X2xwbVtdID0gInN0LHN0aWg0MDctbHBtLXN5c2NmZyI7CisKKyNkZWZpbmUgU1RJSDQwN19QRE5fMChfYml0KSBcCisJX1NZU0NGR19SU1RfQ0goc3RpaDQwN19jb3JlLCBTWVNDRkdfNTAwMCwgX2JpdCwgU1lTU1RBVF81NTAwLCBfYml0KQorI2RlZmluZSBTVElINDA3X1BETl8xKF9iaXQpIFwKKwlfU1lTQ0ZHX1JTVF9DSChzdGloNDA3X2NvcmUsIFNZU0NGR181MDAxLCBfYml0LCBTWVNTVEFUXzU1MDEsIF9iaXQpCisjZGVmaW5lIFNUSUg0MDdfUEROX0VUSChfYml0LCBfc3RhdCkgXAorCV9TWVNDRkdfUlNUX0NIKHN0aWg0MDdfc2JjX3JlZywgU1lTQ0ZHXzQwMzIsIF9iaXQsIFNZU1NUQVRfNDUyMCwgX3N0YXQpCisKKy8qIFBvd2VyZG93biByZXF1ZXN0cyBjb250cm9sIDAgKi8KKyNkZWZpbmUgU1lTQ0ZHXzUwMDAJMHgwCisjZGVmaW5lIFNZU1NUQVRfNTUwMAkweDdkMAorLyogUG93ZXJkb3duIHJlcXVlc3RzIGNvbnRyb2wgMSAoSGlnaCBTcGVlZCBMaW5rcykgKi8KKyNkZWZpbmUgU1lTQ0ZHXzUwMDEJMHg0CisjZGVmaW5lIFNZU1NUQVRfNTUwMQkweDdkNAorCisvKiBFdGhlcm5ldCBwb3dlcmRvd24vc3RhdHVzL3Jlc2V0ICovCisjZGVmaW5lIFNZU0NGR180MDMyCTB4ODAKKyNkZWZpbmUgU1lTU1RBVF80NTIwCTB4ODIwCisjZGVmaW5lIFNZU0NGR180MDAyCTB4OAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NmZ19yZXNldF9jaGFubmVsX2RhdGEgc3RpaDQwN19wb3dlcmRvd25zW10gPSB7CisJW1NUSUg0MDdfRU1JU1NfUE9XRVJET1dOXSA9IFNUSUg0MDdfUEROXzAoMSksCisJW1NUSUg0MDdfTkFORF9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMCgwKSwKKwlbU1RJSDQwN19VU0IzX1BPV0VSRE9XTl0gPSBTVElINDA3X1BETl8xKDYpLAorCVtTVElINDA3X1VTQjJfUE9SVDFfUE9XRVJET1dOXSA9IFNUSUg0MDdfUEROXzEoNSksCisJW1NUSUg0MDdfVVNCMl9QT1JUMF9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSg0KSwKKwlbU1RJSDQwN19QQ0lFMV9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSgzKSwKKwlbU1RJSDQwN19QQ0lFMF9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSgyKSwKKwlbU1RJSDQwN19TQVRBMV9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSgxKSwKKwlbU1RJSDQwN19TQVRBMF9QT1dFUkRPV05dID0gU1RJSDQwN19QRE5fMSgwKSwKKwlbU1RJSDQwN19FVEgxX1BPV0VSRE9XTl0gPSBTVElINDA3X1BETl9FVEgoMCwgMiksCit9OworCisvKiBSZXNldCBHZW5lcmF0b3IgY29udHJvbCAwLzEgKi8KKyNkZWZpbmUgU1lTQ0ZHXzUxMzEJMHgyMGMKKyNkZWZpbmUgU1lTQ0ZHXzUxMzIJMHgyMTAKKworI2RlZmluZSBMUE1fU1lTQ0ZHXzEJMHg0CS8qIFNvZnRyZXNldCBJUkIgJiBTQkMgVUFSVCAqLworCisjZGVmaW5lIFNUSUg0MDdfU1JTVF9DT1JFKF9yZWcsIF9iaXQpIFwKKwlfU1lTQ0ZHX1JTVF9DSF9OT19BQ0soc3RpaDQwN19jb3JlLCBfcmVnLCBfYml0KQorCisjZGVmaW5lIFNUSUg0MDdfU1JTVF9TQkMoX3JlZywgX2JpdCkgXAorCV9TWVNDRkdfUlNUX0NIX05PX0FDSyhzdGloNDA3X3NiY19yZWcsIF9yZWcsIF9iaXQpCisKKyNkZWZpbmUgU1RJSDQwN19TUlNUX0xQTShfcmVnLCBfYml0KSBcCisJX1NZU0NGR19SU1RfQ0hfTk9fQUNLKHN0aWg0MDdfbHBtLCBfcmVnLCBfYml0KQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NmZ19yZXNldF9jaGFubmVsX2RhdGEgc3RpaDQwN19zb2Z0cmVzZXRzW10gPSB7CisJW1NUSUg0MDdfRVRIMV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX1NCQyhTWVNDRkdfNDAwMiwgNCksCisJW1NUSUg0MDdfTU1DMV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDMpLAorCVtTVElINDA3X1VTQjJfUE9SVDBfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCAyOCksCisJW1NUSUg0MDdfVVNCMl9QT1JUMV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDI5KSwKKwlbU1RJSDQwN19QSUNPUEhZX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgMzApLAorCVtTVElINDA3X0lSQl9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0xQTShMUE1fU1lTQ0ZHXzEsIDYpLAorCVtTVElINDA3X1BDSUUwX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgNiksCisJW1NUSUg0MDdfUENJRTFfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCAxNSksCisJW1NUSUg0MDdfU0FUQTBfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCA3KSwKKwlbU1RJSDQwN19TQVRBMV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDE2KSwKKwlbU1RJSDQwN19NSVBIWTBfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCA0KSwKKwlbU1RJSDQwN19NSVBIWTFfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCAxMyksCisJW1NUSUg0MDdfTUlQSFkyX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMiwgMjIpLAorCVtTVElINDA3X1NBVEEwX1BXUl9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDUpLAorCVtTVElINDA3X1NBVEExX1BXUl9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDE0KSwKKwlbU1RJSDQwN19ERUxUQV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDMpLAorCVtTVElINDA3X0JMSVRURVJfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMxLCAxMCksCisJW1NUSUg0MDdfSERUVk9VVF9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDExKSwKKwlbU1RJSDQwN19IRFFWRFBfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMxLCAxMiksCisJW1NUSUg0MDdfVkRQX0FVWF9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDE0KSwKKwlbU1RJSDQwN19DT01QT19TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDE1KSwKKwlbU1RJSDQwN19IRE1JX1RYX1BIWV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDIxKSwKKwlbU1RJSDQwN19KUEVHX0RFQ19TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDIzKSwKKwlbU1RJSDQwN19WUDhfREVDX1NPRlRSRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTEzMSwgMjQpLAorCVtTVElINDA3X0dQVV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzEsIDMwKSwKKwlbU1RJSDQwN19IVkFfU09GVFJFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MTMyLCAwKSwKKwlbU1RJSDQwN19FUkFNX0hWQV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUxMzIsIDEpLAorCVtTVElINDA3X0xQTV9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX1NCQyhTWVNDRkdfNDAwMiwgMiksCisJW1NUSUg0MDdfS0VZU0NBTl9TT0ZUUkVTRVRdID0gU1RJSDQwN19TUlNUX0xQTShMUE1fU1lTQ0ZHXzEsIDgpLAorfTsKKworLyogUGljb1BIWSByZXNldC9jb250cm9sICovCisjZGVmaW5lIFNZU0NGR181MDYxCTB4MGY0CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2ZnX3Jlc2V0X2NoYW5uZWxfZGF0YSBzdGloNDA3X3BpY29waHlyZXNldHNbXSA9IHsKKwlbU1RJSDQwN19QSUNPUEhZMF9SRVNFVF0gPSBTVElINDA3X1NSU1RfQ09SRShTWVNDRkdfNTA2MSwgNSksCisJW1NUSUg0MDdfUElDT1BIWTFfUkVTRVRdID0gU1RJSDQwN19TUlNUX0NPUkUoU1lTQ0ZHXzUwNjEsIDYpLAorCVtTVElINDA3X1BJQ09QSFkyX1JFU0VUXSA9IFNUSUg0MDdfU1JTVF9DT1JFKFNZU0NGR181MDYxLCA3KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2ZnX3Jlc2V0X2NvbnRyb2xsZXJfZGF0YSBzdGloNDA3X3Bvd2VyZG93bl9jb250cm9sbGVyID0geworCS53YWl0X2Zvcl9hY2sgPSB0cnVlLAorCS5ucl9jaGFubmVscyA9IEFSUkFZX1NJWkUoc3RpaDQwN19wb3dlcmRvd25zKSwKKwkuY2hhbm5lbHMgPSBzdGloNDA3X3Bvd2VyZG93bnMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NmZ19yZXNldF9jb250cm9sbGVyX2RhdGEgc3RpaDQwN19zb2Z0cmVzZXRfY29udHJvbGxlciA9IHsKKwkud2FpdF9mb3JfYWNrID0gZmFsc2UsCisJLmFjdGl2ZV9sb3cgPSB0cnVlLAorCS5ucl9jaGFubmVscyA9IEFSUkFZX1NJWkUoc3RpaDQwN19zb2Z0cmVzZXRzKSwKKwkuY2hhbm5lbHMgPSBzdGloNDA3X3NvZnRyZXNldHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NmZ19yZXNldF9jb250cm9sbGVyX2RhdGEgc3RpaDQwN19waWNvcGh5cmVzZXRfY29udHJvbGxlciA9IHsKKwkud2FpdF9mb3JfYWNrID0gZmFsc2UsCisJLm5yX2NoYW5uZWxzID0gQVJSQVlfU0laRShzdGloNDA3X3BpY29waHlyZXNldHMpLAorCS5jaGFubmVscyA9IHN0aWg0MDdfcGljb3BoeXJlc2V0cywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN0aWg0MDdfcmVzZXRfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInN0LHN0aWg0MDctcG93ZXJkb3duIiwKKwkJLmRhdGEgPSAmc3RpaDQwN19wb3dlcmRvd25fY29udHJvbGxlciwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy1zb2Z0cmVzZXQiLAorCQkuZGF0YSA9ICZzdGloNDA3X3NvZnRyZXNldF9jb250cm9sbGVyLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXBpY29waHlyZXNldCIsCisJCS5kYXRhID0gJnN0aWg0MDdfcGljb3BoeXJlc2V0X2NvbnRyb2xsZXIsCisJfSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdGloNDA3X3Jlc2V0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBzeXNjZmdfcmVzZXRfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicmVzZXQtc3RpaDQwNyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHN0aWg0MDdfcmVzZXRfbWF0Y2gsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN0aWg0MDdfcmVzZXRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnN0aWg0MDdfcmVzZXRfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzdGloNDA3X3Jlc2V0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggNmRkMTJkZC4uNDUxMWRkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0xOTIsNiArMTkyLDE0IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczEzNzQuCiAKK2NvbmZpZyBSVENfRFJWX0RTMTM3NF9XRFQKKwlib29sICJEYWxsYXMvTWF4aW0gRFMxMzc0IHdhdGNoZG9nIHRpbWVyIgorCWRlcGVuZHMgb24gUlRDX0RSVl9EUzEzNzQKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlCisJICB3YXRjaGRvZyB0aW1lciBpbiB0aGUgRGFsbGFzIFNlbWljb25kdWN0b3IgRFMxMzc0CisJICByZWFsLXRpbWUgY2xvY2sgY2hpcHMuCisKIGNvbmZpZyBSVENfRFJWX0RTMTY3MgogCXRyaXN0YXRlICJEYWxsYXMvTWF4aW0gRFMxNjcyIgogCWhlbHAKQEAgLTExMDksMzYgKzExMTcsNDIgQEAKIAkgIHRoaXMgaXMgcG93ZXJlZCBieSB0aGUgYmFja3VwIHBvd2VyIHN1cHBseS4KIAogY29uZmlnIFJUQ19EUlZfQVQ5MVNBTTkKLQl0cmlzdGF0ZSAiQVQ5MVNBTTl4L0FUOTFDQVA5IFJUVCBhcyBSVEMiCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIShBUkNIX0FUOTFSTTkyMDAgfHwgQVJDSF9BVDkxWDQwKQorCXRyaXN0YXRlICJBVDkxU0FNOSBSVFQgYXMgUlRDIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxCisJc2VsZWN0IE1GRF9TWVNDT04KIAloZWxwCi0JICBSVEMgZHJpdmVyIGZvciB0aGUgQXRtZWwgQVQ5MVNBTTl4IGFuZCBBVDkxQ0FQOSBpbnRlcm5hbCBSVFQKLQkgIChSZWFsIFRpbWUgVGltZXIpLiBUaGVzZSB0aW1lcnMgYXJlIHBvd2VyZWQgYnkgdGhlIGJhY2t1cCBwb3dlcgotCSAgc3VwcGx5IChzdWNoIGFzIGEgc21hbGwgY29pbiBjZWxsIGJhdHRlcnkpLCBidXQgZG8gbm90IG5lZWQgdG8KLQkgIGJlIHVzZWQgYXMgUlRDcy4KLQotCSAgKE9uIEFUOTFTQU05cmwgYW5kIEFUOTFTQU05RzQ1IGNoaXBzIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUKLQkgIGRlZGljYXRlZCBSVEMgbW9kdWxlIGFuZCBsZWF2ZSB0aGUgUlRUIGF2YWlsYWJsZSBmb3Igb3RoZXIgdXNlcy4pCisJICBTb21lIEFUOTFTQU05IFNvQ3MgcHJvdmlkZSBhbiBSVFQgKFJlYWwgVGltZSBUaW1lcikgYmxvY2sgd2hpY2gKKwkgIGNhbiBiZSB1c2VkIGFzIGFuIFJUQyB0aGFua3MgdG8gdGhlIGJhY2t1cCBwb3dlciBzdXBwbHkgKGUuZy4gYQorCSAgc21hbGwgY29pbiBjZWxsIGJhdHRlcnkpIHdoaWNoIGtlZXBzIHRoaXMgYmxvY2sgYW5kIHRoZSBHUEJSCisJICAoR2VuZXJhbCBQdXJwb3NlIEJhY2t1cCBSZWdpc3RlcnMpIGJsb2NrIHBvd2VyZWQgd2hlbiB0aGUgZGV2aWNlCisJICBpcyBzaHV0ZG93bi4KKwkgIFNvbWUgQVQ5MVNBTTkgU29DcyBwcm92aWRlIGEgcmVhbCBSVEMgYmxvY2ssIG9uIHRob3NlIG9uZXMgeW91J2QKKwkgIHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSByZWFsIFJUQyBibG9jayBpbnN0ZWFkIG9mIHRoZSAiUlRUIGFzIGFuCisJICBSVEMiIGRyaXZlci4KIAogY29uZmlnIFJUQ19EUlZfQVQ5MVNBTTlfUlRUCiAJaW50CiAJcmFuZ2UgMCAxCiAJZGVmYXVsdCAwCi0JcHJvbXB0ICJSVFQgbW9kdWxlIE51bWJlciIgaWYgQVJDSF9BVDkxU0FNOTI2MwogCWRlcGVuZHMgb24gUlRDX0RSVl9BVDkxU0FNOQogCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgZm9yIGxlZ2FjeSBib2FyZCBzdXBwb3J0IGFuZAorCSAgd29uJ3QgYmUgdXNlZCB3aGVuIGJvb3RpbmcgYSBEVCBib2FyZC4KKwogCSAgTW9yZSB0aGFuIG9uZSBSVFQgbW9kdWxlIGlzIGF2YWlsYWJsZS4gWW91IGNhbiBjaG9vc2Ugd2hpY2gKIAkgIG9uZSB3aWxsIGJlIHVzZWQgYXMgYW4gUlRDLiBUaGUgZGVmYXVsdCBvZiB6ZXJvIGlzIG5vcm1hbGx5CiAJICBPSyB0byB1c2UsIHRob3VnaCBzb21lIHN5c3RlbXMgdXNlIHRoYXQgZm9yIG5vbi1SVEMgcHVycG9zZXMuCiAKIGNvbmZpZyBSVENfRFJWX0FUOTFTQU05X0dQQlIKIAlpbnQKLQlyYW5nZSAwIDMgaWYgIUFSQ0hfQVQ5MVNBTTkyNjMKLQlyYW5nZSAwIDE1IGlmIEFSQ0hfQVQ5MVNBTTkyNjMKKwlyYW5nZSAwIDMKIAlkZWZhdWx0IDAKIAlwcm9tcHQgIkJhY2t1cCBSZWdpc3RlciBOdW1iZXIiCiAJZGVwZW5kcyBvbiBSVENfRFJWX0FUOTFTQU05CiAJaGVscAorCSAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBmb3IgbGVnYWN5IGJvYXJkIHN1cHBvcnQgYW5kCisJICB3b24ndCBiZSB1c2VkIHdoZW4gYm9vdGluZyBhIERUIGJvYXJkLgorCiAJICBUaGUgUlRDIGRyaXZlciBuZWVkcyB0byB1c2Ugb25lIG9mIHRoZSBHZW5lcmFsIFB1cnBvc2UgQmFja3VwCiAJICBSZWdpc3RlcnMgKEdQQlJzKSBhcyB3ZWxsIGFzIHRoZSBSVFQuIFlvdSBjYW4gY2hvb3NlIHdoaWNoIG9uZQogCSAgd2lsbCBiZSB1c2VkLiBUaGUgZGVmYXVsdCBvZiB6ZXJvIGlzIG5vcm1hbGx5IE9LIHRvIHVzZSwgYnV0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9jbGFzcy5jIGIvZHJpdmVycy9ydGMvY2xhc3MuYwppbmRleCAzOGUyNmJlLi40NzJhNWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9jbGFzcy5jCisrKyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKQEAgLTQ1LDE0ICs0NSwxNCBAQAogICogc3lzdGVtJ3Mgd2FsbCBjbG9jazsgcmVzdG9yZSBpdCBvbiByZXN1bWUoKS4KICAqLwogCi1zdGF0aWMgc3RydWN0IHRpbWVzcGVjIG9sZF9ydGMsIG9sZF9zeXN0ZW0sIG9sZF9kZWx0YTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWM2NCBvbGRfcnRjLCBvbGRfc3lzdGVtLCBvbGRfZGVsdGE7CiAKIAogc3RhdGljIGludCBydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YyA9IHRvX3J0Y19kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcnRjX3RpbWUJCXRtOwotCXN0cnVjdCB0aW1lc3BlYwkJZGVsdGEsIGRlbHRhX2RlbHRhOworCXN0cnVjdCB0aW1lc3BlYzY0CWRlbHRhLCBkZWx0YV9kZWx0YTsKIAlpbnQgZXJyOwogCiAJaWYgKGhhc19wZXJzaXN0ZW50X2Nsb2NrKCkpCkBAIC02OCw4ICs2OCw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWdldG5zdGltZW9mZGF5KCZvbGRfc3lzdGVtKTsKLQlydGNfdG1fdG9fdGltZSgmdG0sICZvbGRfcnRjLnR2X3NlYyk7CisJZ2V0bnN0aW1lb2ZkYXk2NCgmb2xkX3N5c3RlbSk7CisJb2xkX3J0Yy50dl9zZWMgPSBydGNfdG1fdG9fdGltZTY0KCZ0bSk7CiAKIAogCS8qCkBAIC03OCw4ICs3OCw4IEBACiAJICogdHJ5IHRvIGNvbXBlbnNhdGUgc28gdGhlIGRpZmZlcmVuY2UgaW4gc3lzdGVtIHRpbWUKIAkgKiBhbmQgcnRjIHRpbWUgc3RheXMgY2xvc2UgdG8gY29uc3RhbnQuCiAJICovCi0JZGVsdGEgPSB0aW1lc3BlY19zdWIob2xkX3N5c3RlbSwgb2xkX3J0Yyk7Ci0JZGVsdGFfZGVsdGEgPSB0aW1lc3BlY19zdWIoZGVsdGEsIG9sZF9kZWx0YSk7CisJZGVsdGEgPSB0aW1lc3BlYzY0X3N1YihvbGRfc3lzdGVtLCBvbGRfcnRjKTsKKwlkZWx0YV9kZWx0YSA9IHRpbWVzcGVjNjRfc3ViKGRlbHRhLCBvbGRfZGVsdGEpOwogCWlmIChkZWx0YV9kZWx0YS50dl9zZWMgPCAtMiB8fCBkZWx0YV9kZWx0YS50dl9zZWMgPj0gMikgewogCQkvKgogCQkgKiBpZiBkZWx0YV9kZWx0YSBpcyB0b28gbGFyZ2UsIGFzc3VtZSB0aW1lIGNvcnJlY3Rpb24KQEAgLTg4LDcgKzg4LDcgQEAKIAkJb2xkX2RlbHRhID0gZGVsdGE7CiAJfSBlbHNlIHsKIAkJLyogT3RoZXJ3aXNlIHRyeSB0byBhZGp1c3Qgb2xkX3N5c3RlbSB0byBjb21wZW5zYXRlICovCi0JCW9sZF9zeXN0ZW0gPSB0aW1lc3BlY19zdWIob2xkX3N5c3RlbSwgZGVsdGFfZGVsdGEpOworCQlvbGRfc3lzdGVtID0gdGltZXNwZWM2NF9zdWIob2xkX3N5c3RlbSwgZGVsdGFfZGVsdGEpOwogCX0KIAogCXJldHVybiAwOwpAQCAtOTgsOCArOTgsOCBAQAogewogCXN0cnVjdCBydGNfZGV2aWNlCSpydGMgPSB0b19ydGNfZGV2aWNlKGRldik7CiAJc3RydWN0IHJ0Y190aW1lCQl0bTsKLQlzdHJ1Y3QgdGltZXNwZWMJCW5ld19zeXN0ZW0sIG5ld19ydGM7Ci0Jc3RydWN0IHRpbWVzcGVjCQlzbGVlcF90aW1lOworCXN0cnVjdCB0aW1lc3BlYzY0CW5ld19zeXN0ZW0sIG5ld19ydGM7CisJc3RydWN0IHRpbWVzcGVjNjQJc2xlZXBfdGltZTsKIAlpbnQgZXJyOwogCiAJaWYgKGhhc19wZXJzaXN0ZW50X2Nsb2NrKCkpCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBzbmFwc2hvdCB0aGUgY3VycmVudCBydGMgYW5kIHN5c3RlbSB0aW1lIGF0IHJlc3VtZSAqLwotCWdldG5zdGltZW9mZGF5KCZuZXdfc3lzdGVtKTsKKwlnZXRuc3RpbWVvZmRheTY0KCZuZXdfc3lzdGVtKTsKIAllcnIgPSBydGNfcmVhZF90aW1lKHJ0YywgJnRtKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcl9kZWJ1ZygiJXM6ICBmYWlsIHRvIHJlYWQgcnRjIHRpbWVcbiIsIGRldl9uYW1lKCZydGMtPmRldikpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJCXByX2RlYnVnKCIlczogIGJvZ3VzIHJlc3VtZSB0aW1lXG4iLCBkZXZfbmFtZSgmcnRjLT5kZXYpKTsKIAkJcmV0dXJuIDA7CiAJfQotCXJ0Y190bV90b190aW1lKCZ0bSwgJm5ld19ydGMudHZfc2VjKTsKKwluZXdfcnRjLnR2X3NlYyA9IHJ0Y190bV90b190aW1lNjQoJnRtKTsKIAluZXdfcnRjLnR2X25zZWMgPSAwOwogCiAJaWYgKG5ld19ydGMudHZfc2VjIDwgb2xkX3J0Yy50dl9zZWMpIHsKQEAgLTEzMCw3ICsxMzAsNyBAQAogCX0KIAogCS8qIGNhbGN1bGF0ZSB0aGUgUlRDIHRpbWUgZGVsdGEgKHNsZWVwIHRpbWUpKi8KLQlzbGVlcF90aW1lID0gdGltZXNwZWNfc3ViKG5ld19ydGMsIG9sZF9ydGMpOworCXNsZWVwX3RpbWUgPSB0aW1lc3BlYzY0X3N1YihuZXdfcnRjLCBvbGRfcnRjKTsKIAogCS8qCiAJICogU2luY2UgdGhlc2UgUlRDIHN1c3BlbmQvcmVzdW1lIGhhbmRsZXJzIGFyZSBub3QgY2FsbGVkCkBAIC0xMzksMTEgKzEzOSwxMSBAQAogCSAqIHNvIHN1YnRyYWN0IGtlcm5lbCBydW4tdGltZSBiZXR3ZWVuIHJ0Y19zdXNwZW5kIHRvIHJ0Y19yZXN1bWUKIAkgKiB0byBrZWVwIHRoaW5ncyBhY2N1cmF0ZS4KIAkgKi8KLQlzbGVlcF90aW1lID0gdGltZXNwZWNfc3ViKHNsZWVwX3RpbWUsCi0JCQl0aW1lc3BlY19zdWIobmV3X3N5c3RlbSwgb2xkX3N5c3RlbSkpOworCXNsZWVwX3RpbWUgPSB0aW1lc3BlYzY0X3N1YihzbGVlcF90aW1lLAorCQkJdGltZXNwZWM2NF9zdWIobmV3X3N5c3RlbSwgb2xkX3N5c3RlbSkpOwogCiAJaWYgKHNsZWVwX3RpbWUudHZfc2VjID49IDApCi0JCXRpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUoJnNsZWVwX3RpbWUpOworCQl0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lNjQoJnNsZWVwX3RpbWUpOwogCXJ0Y19oY3Rvc3lzX3JldCA9IDA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCmluZGV4IDViMjcxN2YuLjQ1YmZjMjhlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDE0IEBACiAJZWxzZSB7CiAJCW1lbXNldCh0bSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOwogCQllcnIgPSBydGMtPm9wcy0+cmVhZF90aW1lKHJ0Yy0+ZGV2LnBhcmVudCwgdG0pOworCQlpZiAoZXJyIDwgMCkgeworCQkJZGV2X2VycigmcnRjLT5kZXYsICJyZWFkX3RpbWU6IGZhaWwgdG8gcmVhZFxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJZXJyID0gcnRjX3ZhbGlkX3RtKHRtKTsKKwkJaWYgKGVyciA8IDApCisJCQlkZXZfZXJyKCZydGMtPmRldiwgInJlYWRfdGltZTogcnRjX3RpbWUgaXNuJ3QgdmFsaWRcbiIpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpAQCAtODkxLDExICs4OTksMjQgQEAKIAlpZiAobmV4dCkgewogCQlzdHJ1Y3QgcnRjX3drYWxybSBhbGFybTsKIAkJaW50IGVycjsKKwkJaW50IHJldHJ5ID0gMzsKKwogCQlhbGFybS50aW1lID0gcnRjX2t0aW1lX3RvX3RtKG5leHQtPmV4cGlyZXMpOwogCQlhbGFybS5lbmFibGVkID0gMTsKK3JlcHJvZ3JhbToKIAkJZXJyID0gX19ydGNfc2V0X2FsYXJtKHJ0YywgJmFsYXJtKTsKIAkJaWYgKGVyciA9PSAtRVRJTUUpCiAJCQlnb3RvIGFnYWluOworCQllbHNlIGlmIChlcnIpIHsKKwkJCWlmIChyZXRyeS0tID4gMCkKKwkJCQlnb3RvIHJlcHJvZ3JhbTsKKworCQkJdGltZXIgPSBjb250YWluZXJfb2YobmV4dCwgc3RydWN0IHJ0Y190aW1lciwgbm9kZSk7CisJCQl0aW1lcnF1ZXVlX2RlbCgmcnRjLT50aW1lcnF1ZXVlLCAmdGltZXItPm5vZGUpOworCQkJdGltZXItPmVuYWJsZWQgPSAwOworCQkJZGV2X2VycigmcnRjLT5kZXYsICJfX3J0Y19zZXRfYWxhcm06IGVycj0lZFxuIiwgZXJyKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KIAl9IGVsc2UKIAkJcnRjX2FsYXJtX2Rpc2FibGUocnRjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWFiODUwMC5jIGIvZHJpdmVycy9ydGMvcnRjLWFiODUwMC5jCmluZGV4IDcyN2UyZjUuLjg2NmUwZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hYjg1MDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYWI4NTAwLmMKQEAgLTUwNCw2ICs1MDQsOCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCXJ0Yy0+dWllX3Vuc3VwcG9ydGVkID0gMTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCmluZGV4IDU5NjM3NDMuLmFiYWMzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCkBAIC0yMSwxMCArMjEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2F0bWVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvYXQ5MV9ydHQuaD4KLSNpbmNsdWRlIDxtYWNoL2NwdS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKIC8qCiAgKiBUaGlzIGRyaXZlciB1c2VzIHR3byBjb25maWd1cmFibGUgaGFyZHdhcmUgcmVzb3VyY2VzIHRoYXQgbGl2ZSBpbiB0aGUKQEAgLTQ3LDYgKzQ2LDIyIEBACiAgKiByZWdpc3RlcnMgYXZhaWxhYmxlLCBsaWtld2lzZSB1c2FibGUgZm9yIG1vcmUgdGhhbiAiUlRDIiBzdXBwb3J0LgogICovCiAKKyNkZWZpbmUgQVQ5MV9SVFRfTVIJCTB4MDAJCQkvKiBSZWFsLXRpbWUgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1JUVF9SVFBSRVMJCSgweGZmZmYgPDwgMCkJCS8qIFJlYWwtdGltZSBUaW1lciBQcmVzY2FsZXIgVmFsdWUgKi8KKyNkZWZpbmUgQVQ5MV9SVFRfQUxNSUVOCQkoMSA8PCAxNikJCS8qIEFsYXJtIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgQVQ5MV9SVFRfUlRUSU5DSUVOCSgxIDw8IDE3KQkJLyogUmVhbCBUaW1lIFRpbWVyIEluY3JlbWVudCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfUlRUX1JUVFJTVAkJKDEgPDwgMTgpCQkvKiBSZWFsIFRpbWUgVGltZXIgUmVzdGFydCAqLworCisjZGVmaW5lIEFUOTFfUlRUX0FSCQkweDA0CQkJLyogUmVhbC10aW1lIEFsYXJtIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfUlRUX0FMTVYJCSgweGZmZmZmZmZmKQkJLyogQWxhcm0gVmFsdWUgKi8KKworI2RlZmluZSBBVDkxX1JUVF9WUgkJMHgwOAkJCS8qIFJlYWwtdGltZSBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1JUVF9DUlRWCQkoMHhmZmZmZmZmZikJCS8qIEN1cnJlbnQgUmVhbC10aW1lIFZhbHVlICovCisKKyNkZWZpbmUgQVQ5MV9SVFRfU1IJCTB4MGMJCQkvKiBSZWFsLXRpbWUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfUlRUX0FMTVMJCSgxIDw8IDApCQkvKiBSZWFsLXRpbWUgQWxhcm0gU3RhdHVzICovCisjZGVmaW5lIEFUOTFfUlRUX1JUVElOQwkJKDEgPDwgMSkJCS8qIFJlYWwtdGltZSBUaW1lciBJbmNyZW1lbnQgKi8KKwogLyoKICAqIFdlIHN0b3JlIEFMQVJNX0RJU0FCTEVEIGluIEFMTVYgdG8gcmVjb3JkIHRoYXQgbm8gYWxhcm0gaXMgc2V0LgogICogSXQncyBhbHNvIHRoZSByZXNldCB2YWx1ZSBmb3IgdGhhdCBmaWVsZC4KQEAgLTU4LDE5ICs3MywzMCBAQAogCXZvaWQgX19pb21lbQkJKnJ0dDsKIAlzdHJ1Y3QgcnRjX2RldmljZQkqcnRjZGV2OwogCXUzMgkJCWltcjsKLQl2b2lkIF9faW9tZW0JCSpncGJyOworCXN0cnVjdCByZWdtYXAJCSpncGJyOworCXVuc2lnbmVkIGludAkJZ3Bicl9vZmZzZXQ7CiAJaW50IAkJCWlycTsKKwlzdHJ1Y3QgY2xrCQkqc2NsazsKIH07CiAKICNkZWZpbmUgcnR0X3JlYWRsKHJ0YywgZmllbGQpIFwKLQlfX3Jhd19yZWFkbCgocnRjKS0+cnR0ICsgQVQ5MV9SVFRfICMjIGZpZWxkKQorCXJlYWRsKChydGMpLT5ydHQgKyBBVDkxX1JUVF8gIyMgZmllbGQpCiAjZGVmaW5lIHJ0dF93cml0ZWwocnRjLCBmaWVsZCwgdmFsKSBcCi0JX19yYXdfd3JpdGVsKCh2YWwpLCAocnRjKS0+cnR0ICsgQVQ5MV9SVFRfICMjIGZpZWxkKQorCXdyaXRlbCgodmFsKSwgKHJ0YyktPnJ0dCArIEFUOTFfUlRUXyAjIyBmaWVsZCkKIAotI2RlZmluZSBncGJyX3JlYWRsKHJ0YykgXAotCV9fcmF3X3JlYWRsKChydGMpLT5ncGJyKQotI2RlZmluZSBncGJyX3dyaXRlbChydGMsIHZhbCkgXAotCV9fcmF3X3dyaXRlbCgodmFsKSwgKHJ0YyktPmdwYnIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBncGJyX3JlYWRsKHN0cnVjdCBzYW05X3J0YyAqcnRjKQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwlyZWdtYXBfcmVhZChydGMtPmdwYnIsIHJ0Yy0+Z3Bicl9vZmZzZXQsICZ2YWwpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwYnJfd3JpdGVsKHN0cnVjdCBzYW05X3J0YyAqcnRjLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXJlZ21hcF93cml0ZShydGMtPmdwYnIsIHJ0Yy0+Z3Bicl9vZmZzZXQsIHZhbCk7Cit9CiAKIC8qCiAgKiBSZWFkIGN1cnJlbnQgdGltZSBhbmQgZGF0ZSBpbiBSVEMKQEAgLTI4NywyMiArMzEzLDIyIEBACiAJLmFsYXJtX2lycV9lbmFibGUgPSBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAorc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIGdwYnJfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSAzMiwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQsCit9OworCiAvKgogICogSW5pdGlhbGl6ZSBhbmQgaW5zdGFsbCBSVEMgZHJpdmVyCiAgKi8KIHN0YXRpYyBpbnQgYXQ5MV9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UJKnIsICpyX2dwYnI7CisJc3RydWN0IHJlc291cmNlCSpyOwogCXN0cnVjdCBzYW05X3J0YwkqcnRjOwogCWludAkJcmV0LCBpcnE7CiAJdTMyCQltcjsKLQotCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJfZ3BiciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JaWYgKCFyIHx8ICFyX2dwYnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibmVlZCAyIHJlc3NvdXJjZXNcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJdW5zaWduZWQgaW50CXNjbGtfcmF0ZTsKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApIHsKQEAgLTMyMSwyNCArMzQ3LDY2IEBACiAJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7Ci0JcnRjLT5ydHQgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwotCWlmICghcnRjLT5ydHQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCByZWdpc3RlcnMsIGFib3J0aW5nLlxuIik7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlydGMtPnJ0dCA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByKTsKKwlpZiAoSVNfRVJSKHJ0Yy0+cnR0KSkKKwkJcmV0dXJuIFBUUl9FUlIocnRjLT5ydHQpOworCisJaWYgKCFwZGV2LT5kZXYub2Zfbm9kZSkgeworCQkvKgorCQkgKiBUT0RPOiBSZW1vdmUgdGhpcyBjb2RlIGNodW5rIHdoZW4gcmVtb3Zpbmcgbm9uIERUIGJvYXJkCisJCSAqIHN1cHBvcnQuIFJlbWVtYmVyIHRvIHJlbW92ZSB0aGUgZ3Bicl9yZWdtYXBfY29uZmlnCisJCSAqIHZhcmlhYmxlIHRvby4KKwkJICovCisJCXZvaWQgX19pb21lbSAqZ3BicjsKKworCQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwkJZ3BiciA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByKTsKKwkJaWYgKElTX0VSUihncGJyKSkKKwkJCXJldHVybiBQVFJfRVJSKGdwYnIpOworCisJCXJ0Yy0+Z3BiciA9IHJlZ21hcF9pbml0X21taW8oTlVMTCwgZ3BiciwKKwkJCQkJICAgICAmZ3Bicl9yZWdtYXBfY29uZmlnKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7CisKKwkJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2ZpeGVkX2FyZ3MocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCQkiYXRtZWwscnR0LXJ0Yy10aW1lLXJlZyIsIDEsIDAsCisJCQkJCQkmYXJncyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJ0Yy0+Z3BiciA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChhcmdzLm5wKTsKKwkJcnRjLT5ncGJyX29mZnNldCA9IGFyZ3MuYXJnc1swXTsKKwl9CisKKwlpZiAoSVNfRVJSKHJ0Yy0+Z3BicikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJldHJpZXZlIGdwYnIgcmVnbWFwLCBhYm9ydGluZy5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlydGMtPmdwYnIgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcl9ncGJyLT5zdGFydCwKLQkJCQlyZXNvdXJjZV9zaXplKHJfZ3BicikpOwotCWlmICghcnRjLT5ncGJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgZ3BiciByZWdpc3RlcnMsIGFib3J0aW5nLlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCXJ0Yy0+c2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHJ0Yy0+c2NsaykpCisJCXJldHVybiBQVFJfRVJSKHJ0Yy0+c2Nsayk7CisKKwlzY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocnRjLT5zY2xrKTsKKwlpZiAoIXNjbGtfcmF0ZSB8fCBzY2xrX3JhdGUgPiBBVDkxX1JUVF9SVFBSRVMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBzbG93IGNsb2NrIHJhdGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocnRjLT5zY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBlbmFibGUgc2xvdyBjbG9ja1xuIik7CisJCXJldHVybiByZXQ7CiAJfQogCiAJbXIgPSBydHRfcmVhZGwocnRjLCBNUik7CiAKIAkvKiB1bmxlc3MgUlRUIGlzIGNvdW50aW5nIGF0IDEgSHosIHJlLWluaXRpYWxpemUgaXQgKi8KLQlpZiAoKG1yICYgQVQ5MV9SVFRfUlRQUkVTKSAhPSBBVDkxX1NMT1dfQ0xPQ0spIHsKLQkJbXIgPSBBVDkxX1JUVF9SVFRSU1QgfCAoQVQ5MV9TTE9XX0NMT0NLICYgQVQ5MV9SVFRfUlRQUkVTKTsKKwlpZiAoKG1yICYgQVQ5MV9SVFRfUlRQUkVTKSAhPSBzY2xrX3JhdGUpIHsKKwkJbXIgPSBBVDkxX1JUVF9SVFRSU1QgfCAoc2Nsa19yYXRlICYgQVQ5MV9SVFRfUlRQUkVTKTsKIAkJZ3Bicl93cml0ZWwocnRjLCAwKTsKIAl9CiAKQEAgLTM4Myw2ICs0NTEsOSBAQAogCS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KIAlydHRfd3JpdGVsKHJ0YywgTVIsIG1yICYgfihBVDkxX1JUVF9BTE1JRU4gfCBBVDkxX1JUVF9SVFRJTkNJRU4pKTsKIAorCWlmICghSVNfRVJSKHJ0Yy0+c2NsaykpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShydGMtPnNjbGspOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0MCw2ICs1MTEsMTQgQEAKIAogc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGF0OTFfcnRjX3BtX29wcywgYXQ5MV9ydGNfc3VzcGVuZCwgYXQ5MV9ydGNfcmVzdW1lKTsKIAorI2lmZGVmIENPTkZJR19PRgorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXQ5MV9ydGNfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC1ydHQiIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXQ5MV9ydGNfZHRfaWRzKTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdDkxX3J0Y19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGF0OTFfcnRjX3Byb2JlLAogCS5yZW1vdmUJCT0gYXQ5MV9ydGNfcmVtb3ZlLApAQCAtNDQ4LDYgKzUyNyw3IEBACiAJCS5uYW1lCT0gInJ0Yy1hdDkxc2FtOSIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkucG0JPSAmYXQ5MV9ydGNfcG1fb3BzLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoYXQ5MV9ydGNfZHRfaWRzKSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCmluZGV4IGJiNDNjZjcuLjRmZmFiYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlkc18xMzg4LAogCWRzXzMyMzEsCiAJbTQxdDAwLAotCW1jcDc5NDF4LAorCW1jcDc5NHh4LAogCXJ4XzgwMjUsCiAJbGFzdF9kc190eXBlIC8qIGFsd2F5cyBsYXN0ICovCiAJLyogcnM1YzM3MiB0b28/ICBkaWZmZXJlbnQgYWRkcmVzcy4uLiAqLwpAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBEUzEzMDdfUkVHX1NFQ1MJCTB4MDAJLyogMDAtNTkgKi8KICMJZGVmaW5lIERTMTMwN19CSVRfQ0gJCTB4ODAKICMJZGVmaW5lIERTMTM0MF9CSVRfbkVPU0MJCTB4ODAKLSMJZGVmaW5lIE1DUDc5NDFYX0JJVF9TVAkJMHg4MAorIwlkZWZpbmUgTUNQNzk0WFhfQklUX1NUCQkweDgwCiAjZGVmaW5lIERTMTMwN19SRUdfTUlOCQkweDAxCS8qIDAwLTU5ICovCiAjZGVmaW5lIERTMTMwN19SRUdfSE9VUgkJMHgwMgkvKiAwMC0yMywgb3IgMS0xMnthbSxwbX0gKi8KICMJZGVmaW5lIERTMTMwN19CSVRfMTJIUgkJMHg0MAkvKiBpbiBSRUdfSE9VUiAqLwpAQCAtNTQsNyArNTQsNyBAQAogIwlkZWZpbmUgRFMxMzQwX0JJVF9DRU5UVVJZX0VOCTB4ODAJLyogaW4gUkVHX0hPVVIgKi8KICMJZGVmaW5lIERTMTM0MF9CSVRfQ0VOVFVSWQkweDQwCS8qIGluIFJFR19IT1VSICovCiAjZGVmaW5lIERTMTMwN19SRUdfV0RBWQkJMHgwMwkvKiAwMS0wNyAqLwotIwlkZWZpbmUgTUNQNzk0MVhfQklUX1ZCQVRFTgkweDA4CisjCWRlZmluZSBNQ1A3OTRYWF9CSVRfVkJBVEVOCTB4MDgKICNkZWZpbmUgRFMxMzA3X1JFR19NREFZCQkweDA0CS8qIDAxLTMxICovCiAjZGVmaW5lIERTMTMwN19SRUdfTU9OVEgJMHgwNQkvKiAwMS0xMiAqLwogIwlkZWZpbmUgRFMxMzM3X0JJVF9DRU5UVVJZCTB4ODAJLyogaW4gUkVHX01PTlRIICovCkBAIC0xNTksNyArMTU5LDcgQEAKIAlbZHNfMzIzMV0gPSB7CiAJCS5hbGFybQkJPSAxLAogCX0sCi0JW21jcDc5NDF4XSA9IHsKKwlbbWNwNzk0eHhdID0gewogCQkuYWxhcm0JCT0gMSwKIAkJLyogdGhpcyBpcyBiYXR0ZXJ5IGJhY2tlZCBTUkFNICovCiAJCS5udnJhbV9vZmZzZXQJPSAweDIwLApAQCAtMTc2LDcgKzE3Niw4IEBACiAJeyAiZHMxMzQwIiwgZHNfMTM0MCB9LAogCXsgImRzMzIzMSIsIGRzXzMyMzEgfSwKIAl7ICJtNDF0MDAiLCBtNDF0MDAgfSwKLQl7ICJtY3A3OTQxeCIsIG1jcDc5NDF4IH0sCisJeyAibWNwNzk0MHgiLCBtY3A3OTR4eCB9LAorCXsgIm1jcDc5NDF4IiwgbWNwNzk0eHggfSwKIAl7ICJwdDdjNDMzOCIsIGRzXzEzMDcgfSwKIAl7ICJyeDgwMjUiLCByeF84MDI1IH0sCiAJeyB9CkBAIC00MzksMTQgKzQ0MCwxNCBAQAogCQlidWZbRFMxMzA3X1JFR19IT1VSXSB8PSBEUzEzNDBfQklUX0NFTlRVUllfRU4KIAkJCQl8IERTMTM0MF9CSVRfQ0VOVFVSWTsKIAkJYnJlYWs7Ci0JY2FzZSBtY3A3OTQxeDoKKwljYXNlIG1jcDc5NHh4OgogCQkvKgogCQkgKiB0aGVzZSBiaXRzIHdlcmUgY2xlYXJlZCB3aGVuIHByZXBhcmluZyB0aGUgZGF0ZS90aW1lCiAJCSAqIHZhbHVlcyBhbmQgbmVlZCB0byBiZSBzZXQgYWdhaW4gYmVmb3JlIHdyaXRpbmcgdGhlCiAJCSAqIGJ1ZmZlciBvdXQgdG8gdGhlIGRldmljZS4KIAkJICovCi0JCWJ1ZltEUzEzMDdfUkVHX1NFQ1NdIHw9IE1DUDc5NDFYX0JJVF9TVDsKLQkJYnVmW0RTMTMwN19SRUdfV0RBWV0gfD0gTUNQNzk0MVhfQklUX1ZCQVRFTjsKKwkJYnVmW0RTMTMwN19SRUdfU0VDU10gfD0gTUNQNzk0WFhfQklUX1NUOworCQlidWZbRFMxMzA3X1JFR19XREFZXSB8PSBNQ1A3OTRYWF9CSVRfVkJBVEVOOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTYxNCwyNiArNjE1LDI2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgotICogQWxhcm0gc3VwcG9ydCBmb3IgbWNwNzk0MXggZGV2aWNlcy4KKyAqIEFsYXJtIHN1cHBvcnQgZm9yIG1jcDc5NHh4IGRldmljZXMuCiAgKi8KIAotI2RlZmluZSBNQ1A3OTQxWF9SRUdfQ09OVFJPTAkJMHgwNwotIwlkZWZpbmUgTUNQNzk0MVhfQklUX0FMTTBfRU4JMHgxMAotIwlkZWZpbmUgTUNQNzk0MVhfQklUX0FMTTFfRU4JMHgyMAotI2RlZmluZSBNQ1A3OTQxWF9SRUdfQUxBUk0wX0JBU0UJMHgwYQotI2RlZmluZSBNQ1A3OTQxWF9SRUdfQUxBUk0wX0NUUkwJMHgwZAotI2RlZmluZSBNQ1A3OTQxWF9SRUdfQUxBUk0xX0JBU0UJMHgxMQotI2RlZmluZSBNQ1A3OTQxWF9SRUdfQUxBUk0xX0NUUkwJMHgxNAotIwlkZWZpbmUgTUNQNzk0MVhfQklUX0FMTVhfSUYJKDEgPDwgMykKLSMJZGVmaW5lIE1DUDc5NDFYX0JJVF9BTE1YX0MwCSgxIDw8IDQpCi0jCWRlZmluZSBNQ1A3OTQxWF9CSVRfQUxNWF9DMQkoMSA8PCA1KQotIwlkZWZpbmUgTUNQNzk0MVhfQklUX0FMTVhfQzIJKDEgPDwgNikKLSMJZGVmaW5lIE1DUDc5NDFYX0JJVF9BTE1YX1BPTAkoMSA8PCA3KQotIwlkZWZpbmUgTUNQNzk0MVhfTVNLX0FMTVhfTUFUQ0gJKE1DUDc5NDFYX0JJVF9BTE1YX0MwIHwgXAotCQkJCQkgTUNQNzk0MVhfQklUX0FMTVhfQzEgfCBcCi0JCQkJCSBNQ1A3OTQxWF9CSVRfQUxNWF9DMikKKyNkZWZpbmUgTUNQNzk0WFhfUkVHX0NPTlRST0wJCTB4MDcKKyMJZGVmaW5lIE1DUDc5NFhYX0JJVF9BTE0wX0VOCTB4MTAKKyMJZGVmaW5lIE1DUDc5NFhYX0JJVF9BTE0xX0VOCTB4MjAKKyNkZWZpbmUgTUNQNzk0WFhfUkVHX0FMQVJNMF9CQVNFCTB4MGEKKyNkZWZpbmUgTUNQNzk0WFhfUkVHX0FMQVJNMF9DVFJMCTB4MGQKKyNkZWZpbmUgTUNQNzk0WFhfUkVHX0FMQVJNMV9CQVNFCTB4MTEKKyNkZWZpbmUgTUNQNzk0WFhfUkVHX0FMQVJNMV9DVFJMCTB4MTQKKyMJZGVmaW5lIE1DUDc5NFhYX0JJVF9BTE1YX0lGCSgxIDw8IDMpCisjCWRlZmluZSBNQ1A3OTRYWF9CSVRfQUxNWF9DMAkoMSA8PCA0KQorIwlkZWZpbmUgTUNQNzk0WFhfQklUX0FMTVhfQzEJKDEgPDwgNSkKKyMJZGVmaW5lIE1DUDc5NFhYX0JJVF9BTE1YX0MyCSgxIDw8IDYpCisjCWRlZmluZSBNQ1A3OTRYWF9CSVRfQUxNWF9QT0wJKDEgPDwgNykKKyMJZGVmaW5lIE1DUDc5NFhYX01TS19BTE1YX01BVENICShNQ1A3OTRYWF9CSVRfQUxNWF9DMCB8IFwKKwkJCQkJIE1DUDc5NFhYX0JJVF9BTE1YX0MxIHwgXAorCQkJCQkgTUNQNzk0WFhfQklUX0FMTVhfQzIpCiAKLXN0YXRpYyB2b2lkIG1jcDc5NDF4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgbWNwNzk0eHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGRzMTMwNyAqZHMxMzA3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkczEzMDcsIHdvcmspOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkczEzMDctPmNsaWVudDsKQEAgLTY0MiwyMiArNjQzLDIyIEBACiAJbXV0ZXhfbG9jaygmZHMxMzA3LT5ydGMtPm9wc19sb2NrKTsKIAogCS8qIENoZWNrIGFuZCBjbGVhciBhbGFybSAwIGludGVycnVwdCBmbGFnLiAqLwotCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1DUDc5NDFYX1JFR19BTEFSTTBfQ1RSTCk7CisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUNQNzk0WFhfUkVHX0FMQVJNMF9DVFJMKTsKIAlpZiAocmVnIDwgMCkKIAkJZ290byBvdXQ7Ci0JaWYgKCEocmVnICYgTUNQNzk0MVhfQklUX0FMTVhfSUYpKQorCWlmICghKHJlZyAmIE1DUDc5NFhYX0JJVF9BTE1YX0lGKSkKIAkJZ290byBvdXQ7Ci0JcmVnICY9IH5NQ1A3OTQxWF9CSVRfQUxNWF9JRjsKLQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTUNQNzk0MVhfUkVHX0FMQVJNMF9DVFJMLCByZWcpOworCXJlZyAmPSB+TUNQNzk0WFhfQklUX0FMTVhfSUY7CisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE1DUDc5NFhYX1JFR19BTEFSTTBfQ1RSTCwgcmVnKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKIAkvKiBEaXNhYmxlIGFsYXJtIDAuICovCi0JcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUNQNzk0MVhfUkVHX0NPTlRST0wpOworCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1DUDc5NFhYX1JFR19DT05UUk9MKTsKIAlpZiAocmVnIDwgMCkKIAkJZ290byBvdXQ7Ci0JcmVnICY9IH5NQ1A3OTQxWF9CSVRfQUxNMF9FTjsKLQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTUNQNzk0MVhfUkVHX0NPTlRST0wsIHJlZyk7CisJcmVnICY9IH5NQ1A3OTRYWF9CSVRfQUxNMF9FTjsKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTUNQNzk0WFhfUkVHX0NPTlRST0wsIHJlZyk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC02NjksNyArNjcwLDcgQEAKIAltdXRleF91bmxvY2soJmRzMTMwNy0+cnRjLT5vcHNfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgbWNwNzk0MXhfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICp0KQorc3RhdGljIGludCBtY3A3OTR4eF9yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKnQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgZHMxMzA3ICpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKQEAgLTY4MCwxMSArNjgxLDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogUmVhZCBjb250cm9sIGFuZCBhbGFybSAwIHJlZ2lzdGVycy4gKi8KLQlyZXQgPSBkczEzMDctPnJlYWRfYmxvY2tfZGF0YShjbGllbnQsIE1DUDc5NDFYX1JFR19DT05UUk9MLCAxMCwgcmVncyk7CisJcmV0ID0gZHMxMzA3LT5yZWFkX2Jsb2NrX2RhdGEoY2xpZW50LCBNQ1A3OTRYWF9SRUdfQ09OVFJPTCwgMTAsIHJlZ3MpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JdC0+ZW5hYmxlZCA9ICEhKHJlZ3NbMF0gJiBNQ1A3OTQxWF9CSVRfQUxNMF9FTik7CisJdC0+ZW5hYmxlZCA9ICEhKHJlZ3NbMF0gJiBNQ1A3OTRYWF9CSVRfQUxNMF9FTik7CiAKIAkvKiBSZXBvcnQgYWxhcm0gMCB0aW1lIGFzc3VtaW5nIDI0LWhvdXIgYW5kIGRheS1vZi1tb250aCBtb2Rlcy4gKi8KIAl0LT50aW1lLnRtX3NlYyA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzWzNdICYgMHg3Zik7CkBAIC03MDEsMTQgKzcwMiwxNCBAQAogCQkiZW5hYmxlZD0lZCBwb2xhcml0eT0lZCBpcnE9JWQgbWF0Y2g9JWRcbiIsIF9fZnVuY19fLAogCQl0LT50aW1lLnRtX3NlYywgdC0+dGltZS50bV9taW4sIHQtPnRpbWUudG1faG91ciwKIAkJdC0+dGltZS50bV93ZGF5LCB0LT50aW1lLnRtX21kYXksIHQtPnRpbWUudG1fbW9uLCB0LT5lbmFibGVkLAotCQkhIShkczEzMDctPnJlZ3NbNl0gJiBNQ1A3OTQxWF9CSVRfQUxNWF9QT0wpLAotCQkhIShkczEzMDctPnJlZ3NbNl0gJiBNQ1A3OTQxWF9CSVRfQUxNWF9JRiksCi0JCShkczEzMDctPnJlZ3NbNl0gJiBNQ1A3OTQxWF9NU0tfQUxNWF9NQVRDSCkgPj4gNCk7CisJCSEhKGRzMTMwNy0+cmVnc1s2XSAmIE1DUDc5NFhYX0JJVF9BTE1YX1BPTCksCisJCSEhKGRzMTMwNy0+cmVnc1s2XSAmIE1DUDc5NFhYX0JJVF9BTE1YX0lGKSwKKwkJKGRzMTMwNy0+cmVnc1s2XSAmIE1DUDc5NFhYX01TS19BTE1YX01BVENIKSA+PiA0KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1jcDc5NDF4X3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICp0KQorc3RhdGljIGludCBtY3A3OTR4eF9zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqdCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBkczEzMDcgKmRzMTMwNyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwpAQCAtNzI1LDcgKzcyNiw3IEBACiAJCXQtPmVuYWJsZWQsIHQtPnBlbmRpbmcpOwogCiAJLyogUmVhZCBjb250cm9sIGFuZCBhbGFybSAwIHJlZ2lzdGVycy4gKi8KLQlyZXQgPSBkczEzMDctPnJlYWRfYmxvY2tfZGF0YShjbGllbnQsIE1DUDc5NDFYX1JFR19DT05UUk9MLCAxMCwgcmVncyk7CisJcmV0ID0gZHMxMzA3LT5yZWFkX2Jsb2NrX2RhdGEoY2xpZW50LCBNQ1A3OTRYWF9SRUdfQ09OVFJPTCwgMTAsIHJlZ3MpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC03MzgsMjMgKzczOSwyMyBAQAogCXJlZ3NbOF0gPSBiaW4yYmNkKHQtPnRpbWUudG1fbW9uKSArIDE7CiAKIAkvKiBDbGVhciB0aGUgYWxhcm0gMCBpbnRlcnJ1cHQgZmxhZy4gKi8KLQlyZWdzWzZdICY9IH5NQ1A3OTQxWF9CSVRfQUxNWF9JRjsKKwlyZWdzWzZdICY9IH5NQ1A3OTRYWF9CSVRfQUxNWF9JRjsKIAkvKiBTZXQgYWxhcm0gbWF0Y2g6IHNlY29uZCwgbWludXRlLCBob3VyLCBkYXksIGRhdGUsIG1vbnRoLiAqLwotCXJlZ3NbNl0gfD0gTUNQNzk0MVhfTVNLX0FMTVhfTUFUQ0g7CisJcmVnc1s2XSB8PSBNQ1A3OTRYWF9NU0tfQUxNWF9NQVRDSDsKIAogCWlmICh0LT5lbmFibGVkKQotCQlyZWdzWzBdIHw9IE1DUDc5NDFYX0JJVF9BTE0wX0VOOworCQlyZWdzWzBdIHw9IE1DUDc5NFhYX0JJVF9BTE0wX0VOOwogCWVsc2UKLQkJcmVnc1swXSAmPSB+TUNQNzk0MVhfQklUX0FMTTBfRU47CisJCXJlZ3NbMF0gJj0gfk1DUDc5NFhYX0JJVF9BTE0wX0VOOwogCi0JcmV0ID0gZHMxMzA3LT53cml0ZV9ibG9ja19kYXRhKGNsaWVudCwgTUNQNzk0MVhfUkVHX0NPTlRST0wsIDEwLCByZWdzKTsKKwlyZXQgPSBkczEzMDctPndyaXRlX2Jsb2NrX2RhdGEoY2xpZW50LCBNQ1A3OTRYWF9SRUdfQ09OVFJPTCwgMTAsIHJlZ3MpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWNwNzk0MXhfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQorc3RhdGljIGludCBtY3A3OTR4eF9hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgZHMxMzA3ICpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKQEAgLTc2MywyNCArNzY0LDI0IEBACiAJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQ1A3OTQxWF9SRUdfQ09OVFJPTCk7CisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUNQNzk0WFhfUkVHX0NPTlRST0wpOwogCWlmIChyZWcgPCAwKQogCQlyZXR1cm4gcmVnOwogCiAJaWYgKGVuYWJsZWQpCi0JCXJlZyB8PSBNQ1A3OTQxWF9CSVRfQUxNMF9FTjsKKwkJcmVnIHw9IE1DUDc5NFhYX0JJVF9BTE0wX0VOOwogCWVsc2UKLQkJcmVnICY9IH5NQ1A3OTQxWF9CSVRfQUxNMF9FTjsKKwkJcmVnICY9IH5NQ1A3OTRYWF9CSVRfQUxNMF9FTjsKIAotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTUNQNzk0MVhfUkVHX0NPTlRST0wsIHJlZyk7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNQ1A3OTRYWF9SRUdfQ09OVFJPTCwgcmVnKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG1jcDc5NDF4X3J0Y19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbWNwNzk0eHhfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gZHMxMzA3X2dldF90aW1lLAogCS5zZXRfdGltZQk9IGRzMTMwN19zZXRfdGltZSwKLQkucmVhZF9hbGFybQk9IG1jcDc5NDF4X3JlYWRfYWxhcm0sCi0JLnNldF9hbGFybQk9IG1jcDc5NDF4X3NldF9hbGFybSwKLQkuYWxhcm1faXJxX2VuYWJsZSA9IG1jcDc5NDF4X2FsYXJtX2lycV9lbmFibGUsCisJLnJlYWRfYWxhcm0JPSBtY3A3OTR4eF9yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JPSBtY3A3OTR4eF9zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBtY3A3OTR4eF9hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEwNDksMTAgKzEwNTAsMTAgQEAKIAljYXNlIGRzXzEzODg6CiAJCWRzMTMwNy0+b2Zmc2V0ID0gMTsgLyogU2Vjb25kcyBzdGFydHMgYXQgMSAqLwogCQlicmVhazsKLQljYXNlIG1jcDc5NDF4OgotCQlydGNfb3BzID0gJm1jcDc5NDF4X3J0Y19vcHM7CisJY2FzZSBtY3A3OTR4eDoKKwkJcnRjX29wcyA9ICZtY3A3OTR4eF9ydGNfb3BzOwogCQlpZiAoZHMxMzA3LT5jbGllbnQtPmlycSA+IDAgJiYgY2hpcC0+YWxhcm0pIHsKLQkJCUlOSVRfV09SSygmZHMxMzA3LT53b3JrLCBtY3A3OTQxeF93b3JrKTsKKwkJCUlOSVRfV09SSygmZHMxMzA3LT53b3JrLCBtY3A3OTR4eF93b3JrKTsKIAkJCXdhbnRfaXJxID0gdHJ1ZTsKIAkJfQogCQlicmVhazsKQEAgLTExMTcsMTggKzExMTgsMTggQEAKIAkJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIlNFVCBUSU1FIVxuIik7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBtY3A3OTQxeDoKKwljYXNlIG1jcDc5NHh4OgogCQkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgYmFja3VwIGJhdHRlcnkgaXMgZW5hYmxlZCAqLwotCQlpZiAoIShkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19XREFZXSAmIE1DUDc5NDFYX0JJVF9WQkFURU4pKSB7CisJCWlmICghKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1dEQVldICYgTUNQNzk0WFhfQklUX1ZCQVRFTikpIHsKIAkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMDdfUkVHX1dEQVksCiAJCQkJCWRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1dEQVldCi0JCQkJCXwgTUNQNzk0MVhfQklUX1ZCQVRFTik7CisJCQkJCXwgTUNQNzk0WFhfQklUX1ZCQVRFTik7CiAJCX0KIAogCQkvKiBjbG9jayBoYWx0ZWQ/ICB0dXJuIGl0IG9uLCBzbyBjbG9jayBjYW4gdGljay4gKi8KLQkJaWYgKCEodG1wICYgTUNQNzk0MVhfQklUX1NUKSkgeworCQlpZiAoISh0bXAgJiBNQ1A3OTRYWF9CSVRfU1QpKSB7CiAJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzA3X1JFR19TRUNTLAotCQkJCQlNQ1A3OTQxWF9CSVRfU1QpOworCQkJCQlNQ1A3OTRYWF9CSVRfU1QpOwogCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiU0VUIFRJTUUhXG4iKTsKIAkJCWdvdG8gcmVhZF9ydGM7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwppbmRleCA5ZTZlMTRmLi44NjA1ZmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCkBAIC00LDYgKzQsNyBAQAogICogQmFzZWQgb24gY29kZSBieSBSYW5keSBWaW5zb24gPHJ2aW5zb25AbXZpc3RhLmNvbT4sCiAgKiB3aGljaCB3YXMgYmFzZWQgb24gdGhlIG00MXQwMC5jIGJ5IE1hcmsgR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPi4KICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUm9zZSBUZWNobm9sb2d5CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvcgogICoKICAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCkBAIC0yNiw2ICsyNywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2lmZGVmIENPTkZJR19SVENfRFJWX0RTMTM3NF9XRFQKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjZW5kaWYKIAogI2RlZmluZSBEUzEzNzRfUkVHX1RPRDAJCTB4MDAgLyogVGltZSBvZiBEYXkgKi8KICNkZWZpbmUgRFMxMzc0X1JFR19UT0QxCQkweDAxCkBAIC00OSw2ICs1NywxNCBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBkczEzNzRfaWQpOwogCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkczEzNzRfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHMxMzc0X29mX21hdGNoKTsKKyNlbmRpZgorCiBzdHJ1Y3QgZHMxMzc0IHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CkBAIC0xNjIsNiArMTc4LDcgQEAKIAlyZXR1cm4gZHMxMzc0X3dyaXRlX3J0YyhjbGllbnQsIGl0aW1lLCBEUzEzNzRfUkVHX1RPRDAsIDQpOwogfQogCisjaWZuZGVmIENPTkZJR19SVENfRFJWX0RTMTM3NF9XRFQKIC8qIFRoZSBkczEzNzQgaGFzIGEgZGVjcmVtZW50ZXIgZm9yIGFuIGFsYXJtLCByYXRoZXIgdGhhbiBhIGNvbXBhcmF0b3IuCiAgKiBJZiB0aGUgdGltZSBvZiBkYXkgaXMgY2hhbmdlZCwgdGhlbiB0aGUgYWxhcm0gd2lsbCBuZWVkIHRvIGJlCiAgKiByZXNldC4KQEAgLTI2Myw2ICsyODAsNyBAQAogCW11dGV4X3VubG9jaygmZHMxMzc0LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZHMxMzc0X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CkBAIC0zMDcsNiArMzI1LDcgQEAKIAltdXRleF91bmxvY2soJmRzMTM3NC0+bXV0ZXgpOwogfQogCisjaWZuZGVmIENPTkZJR19SVENfRFJWX0RTMTM3NF9XRFQKIHN0YXRpYyBpbnQgZHMxMzc0X2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwpAQCAtMzMxLDE1ICszNTAsMjYwIEBACiAJbXV0ZXhfdW5sb2NrKCZkczEzNzQtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQorI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczEzNzRfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lID0gZHMxMzc0X3JlYWRfdGltZSwKIAkuc2V0X3RpbWUgPSBkczEzNzRfc2V0X3RpbWUsCisjaWZuZGVmIENPTkZJR19SVENfRFJWX0RTMTM3NF9XRFQKIAkucmVhZF9hbGFybSA9IGRzMTM3NF9yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0gPSBkczEzNzRfc2V0X2FsYXJtLAogCS5hbGFybV9pcnFfZW5hYmxlID0gZHMxMzc0X2FsYXJtX2lycV9lbmFibGUsCisjZW5kaWYKIH07CiAKKyNpZmRlZiBDT05GSUdfUlRDX0RSVl9EUzEzNzRfV0RUCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogV2F0Y2hkb2cgRHJpdmVyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqc2F2ZV9jbGllbnQ7CisvKiBEZWZhdWx0IG1hcmdpbiAqLworI2RlZmluZSBXRF9USU1PIDEzMTc2MgorCisjZGVmaW5lIERSVl9OQU1FICJEUzEzNzQgV2F0Y2hkb2ciCisKK3N0YXRpYyBpbnQgd2R0X21hcmdpbiA9IFdEX1RJTU87CitzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfaXNfb3BlbjsKK21vZHVsZV9wYXJhbSh3ZHRfbWFyZ2luLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh3ZHRfbWFyZ2luLCAiV2F0Y2hkb2cgdGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0IDMycykiKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGRzMTM3NF93ZHRfaW5mbyA9IHsKKwkuaWRlbnRpdHkgICAgICAgPSAiRFMxMzc0IFdURCIsCisJLm9wdGlvbnMgICAgICAgID0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcgfAorCQkJCQkJV0RJT0ZfTUFHSUNDTE9TRSwKK307CisKK3N0YXRpYyBpbnQgZHMxMzc0X3dkdF9zZXR0aW1lb3V0KHVuc2lnbmVkIGludCB0aW1lb3V0KQoreworCWludCByZXQgPSAtRU5PSU9DVExDTUQ7CisJaW50IGNyOworCisJcmV0ID0gY3IgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIERTMTM3NF9SRUdfQ1IpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIERpc2FibGUgYW55IGV4aXN0aW5nIHdhdGNoZG9nL2FsYXJtIGJlZm9yZSBzZXR0aW5nIHRoZSBuZXcgb25lICovCisJY3IgJj0gfkRTMTM3NF9SRUdfQ1JfV0FDRTsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIERTMTM3NF9SRUdfQ1IsIGNyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBTZXQgbmV3IHdhdGNoZG9nIHRpbWUgKi8KKwlyZXQgPSBkczEzNzRfd3JpdGVfcnRjKHNhdmVfY2xpZW50LCB0aW1lb3V0LCBEUzEzNzRfUkVHX1dEQUxNMCwgMyk7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCJydGMtZHMxMzc0IC0gY291bGRuJ3Qgc2V0IG5ldyB3YXRjaGRvZyB0aW1lXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRW5hYmxlIHdhdGNoZG9nIHRpbWVyICovCisJY3IgfD0gRFMxMzc0X1JFR19DUl9XQUNFIHwgRFMxMzc0X1JFR19DUl9XREFMTTsKKwljciAmPSB+RFMxMzc0X1JFR19DUl9BSUU7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNhdmVfY2xpZW50LCBEUzEzNzRfUkVHX0NSLCBjcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0dXJuIDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogUmVsb2FkIHRoZSB3YXRjaGRvZyB0aW1lci4gIChpZSwgcGF0IHRoZSB3YXRjaGRvZykKKyAqLworc3RhdGljIHZvaWQgZHMxMzc0X3dkdF9waW5nKHZvaWQpCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGRzMTM3NF9yZWFkX3J0YyhzYXZlX2NsaWVudCwgJnZhbCwgRFMxMzc0X1JFR19XREFMTTAsIDMpOworCWlmIChyZXQpCisJCXByX2luZm8oIldEIFRJQ0sgRkFJTCEhISEhISEhISEgJWlcbiIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzMTM3NF93ZHRfZGlzYWJsZSh2b2lkKQoreworCWludCByZXQgPSAtRU5PSU9DVExDTUQ7CisJaW50IGNyOworCisJY3IgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIERTMTM3NF9SRUdfQ1IpOworCS8qIERpc2FibGUgd2F0Y2hkb2cgdGltZXIgKi8KKwljciAmPSB+RFMxMzc0X1JFR19DUl9XQUNFOworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgRFMxMzc0X1JFR19DUiwgY3IpOworfQorCisvKgorICogV2F0Y2hkb2cgZGV2aWNlIGlzIG9wZW5lZCwgYW5kIHdhdGNoZG9nIHN0YXJ0cyBydW5uaW5nLgorICovCitzdGF0aWMgaW50IGRzMTM3NF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHMxMzc0ICpkczEzNzQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoc2F2ZV9jbGllbnQpOworCisJaWYgKE1JTk9SKGlub2RlLT5pX3JkZXYpID09IFdBVENIRE9HX01JTk9SKSB7CisJCW11dGV4X2xvY2soJmRzMTM3NC0+bXV0ZXgpOworCQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmd2R0X2lzX29wZW4pKSB7CisJCQltdXRleF91bmxvY2soJmRzMTM3NC0+bXV0ZXgpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQkvKgorCQkgKiAgICAgIEFjdGl2YXRlCisJCSAqLworCQl3ZHRfaXNfb3BlbiA9IDE7CisJCW11dGV4X3VubG9jaygmZHMxMzc0LT5tdXRleCk7CisJCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qCisgKiBDbG9zZSB0aGUgd2F0Y2hkb2cgZGV2aWNlLgorICovCitzdGF0aWMgaW50IGRzMTM3NF93ZHRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoTUlOT1IoaW5vZGUtPmlfcmRldikgPT0gV0FUQ0hET0dfTUlOT1IpCisJCWNsZWFyX2JpdCgwLCAmd2R0X2lzX29wZW4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQYXQgdGhlIHdhdGNoZG9nIHdoZW5ldmVyIGRldmljZSBpcyB3cml0dGVuIHRvLgorICovCitzdGF0aWMgc3NpemVfdCBkczEzNzRfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCit7CisJaWYgKGxlbikgeworCQlkczEzNzRfd2R0X3BpbmcoKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkczEzNzRfd2R0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLAorCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhbmRsZSBjb21tYW5kcyBmcm9tIHVzZXItc3BhY2UuCisgKi8KK3N0YXRpYyBsb25nIGRzMTM3NF93ZHRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IG5ld19tYXJnaW4sIG9wdGlvbnM7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcigoc3RydWN0IHdhdGNoZG9nX2luZm8gX191c2VyICopYXJnLAorCQkmZHMxMzc0X3dkdF9pbmZvLCBzaXplb2YoZHMxMzc0X3dkdF9pbmZvKSkgPyAtRUZBVUxUIDogMDsKKworCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJcmV0dXJuIHB1dF91c2VyKDAsIChpbnQgX191c2VyICopYXJnKTsKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJZHMxMzc0X3dkdF9waW5nKCk7CisJCXJldHVybiAwOworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJaWYgKGdldF91c2VyKG5ld19tYXJnaW4sIChpbnQgX191c2VyICopYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChuZXdfbWFyZ2luIDwgMSB8fCBuZXdfbWFyZ2luID4gMTY3NzcyMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl3ZHRfbWFyZ2luID0gbmV3X21hcmdpbjsKKwkJZHMxMzc0X3dkdF9zZXR0aW1lb3V0KG5ld19tYXJnaW4pOworCQlkczEzNzRfd2R0X3BpbmcoKTsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisJCXJldHVybiBwdXRfdXNlcih3ZHRfbWFyZ2luLCAoaW50IF9fdXNlciAqKWFyZyk7CisJY2FzZSBXRElPQ19TRVRPUFRJT05TOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJm9wdGlvbnMsIChpbnQgX191c2VyICopYXJnLCBzaXplb2YoaW50KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAob3B0aW9ucyAmIFdESU9TX0RJU0FCTEVDQVJEKSB7CisJCQlwcl9pbmZvKCJydGMtZHMxMzc0OiBkaXNhYmxlIHdhdGNoZG9nXG4iKTsKKwkJCWRzMTM3NF93ZHRfZGlzYWJsZSgpOworCQl9CisKKwkJaWYgKG9wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSB7CisJCQlwcl9pbmZvKCJydGMtZHMxMzc0OiBlbmFibGUgd2F0Y2hkb2dcbiIpOworCQkJZHMxMzc0X3dkdF9zZXR0aW1lb3V0KHdkdF9tYXJnaW4pOworCQkJZHMxMzc0X3dkdF9waW5nKCk7CisJCX0KKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIC1FTk9UVFk7Cit9CisKK3N0YXRpYyBsb25nIGRzMTM3NF93ZHRfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBkczEzNzQgKmRzMTM3NCA9IGkyY19nZXRfY2xpZW50ZGF0YShzYXZlX2NsaWVudCk7CisKKwltdXRleF9sb2NrKCZkczEzNzQtPm11dGV4KTsKKwlyZXQgPSBkczEzNzRfd2R0X2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKKwltdXRleF91bmxvY2soJmRzMTM3NC0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkczEzNzRfd2R0X25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQkJdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCit7CisJaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkKKwkJLyogRGlzYWJsZSBXYXRjaGRvZyAqLworCQlkczEzNzRfd2R0X2Rpc2FibGUoKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRzMTM3NF93ZHRfZm9wcyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQkJPSBkczEzNzRfd2R0X3JlYWQsCisJLnVubG9ja2VkX2lvY3RsCQk9IGRzMTM3NF93ZHRfdW5sb2NrZWRfaW9jdGwsCisJLndyaXRlCQkJPSBkczEzNzRfd2R0X3dyaXRlLAorCS5vcGVuICAgICAgICAgICAgICAgICAgID0gZHMxMzc0X3dkdF9vcGVuLAorCS5yZWxlYXNlICAgICAgICAgICAgICAgID0gZHMxMzc0X3dkdF9yZWxlYXNlLAorCS5sbHNlZWsJCQk9IG5vX2xsc2VlaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBkczEzNzRfbWlzY2RldiA9IHsKKwkubWlub3IgICAgICAgICAgPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZSAgICAgICAgICAgPSAid2F0Y2hkb2ciLAorCS5mb3BzICAgICAgICAgICA9ICZkczEzNzRfd2R0X2ZvcHMsCit9OworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRzMTM3NF93ZHRfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBkczEzNzRfd2R0X25vdGlmeV9zeXMsCit9OworCisjZW5kaWYgLypDT05GSUdfUlRDX0RSVl9EUzEzNzRfV0RUKi8KKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglEcml2ZXIgSW50ZXJmYWNlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KIHN0YXRpYyBpbnQgZHMxMzc0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CkBAIC0zNzgsMTIgKzY0MiwzMyBAQAogCQlyZXR1cm4gUFRSX0VSUihkczEzNzQtPnJ0Yyk7CiAJfQogCisjaWZkZWYgQ09ORklHX1JUQ19EUlZfRFMxMzc0X1dEVAorCXNhdmVfY2xpZW50ID0gY2xpZW50OworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmRzMTM3NF9taXNjZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZHMxMzc0X3dkdF9ub3RpZmllcik7CisJaWYgKHJldCkgeworCQltaXNjX2RlcmVnaXN0ZXIoJmRzMTM3NF9taXNjZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHMxMzc0X3dkdF9zZXR0aW1lb3V0KDEzMTA3Mik7CisjZW5kaWYKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRzMTM3NF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgZHMxMzc0ICpkczEzNzQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKyNpZmRlZiBDT05GSUdfUlRDX0RSVl9EUzEzNzRfV0RUCisJaW50IHJlczsKKworCXJlcyA9IG1pc2NfZGVyZWdpc3RlcigmZHMxMzc0X21pc2NkZXYpOworCWlmICghcmVzKQorCQlkczEzNzRfbWlzY2Rldi5wYXJlbnQgPSBOVUxMOworCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZkczEzNzRfd2R0X25vdGlmaWVyKTsKKyNlbmRpZgogCiAJaWYgKGNsaWVudC0+aXJxID4gMCkgewogCQltdXRleF9sb2NrKCZkczEzNzQtPm11dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1pc2wxMjA1Ny5jIGIvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDU3LmMKaW5kZXggNDU1YjYwMS4uNmUxZmNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDU3LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDU3LmMKQEAgLTQxLDYgKzQxLDcgQEAKICNkZWZpbmUgSVNMMTIwNTdfUkVHX1JUQ19EVwkweDAzCS8qIERheSBvZiB0aGUgV2VlayAqLwogI2RlZmluZSBJU0wxMjA1N19SRUdfUlRDX0RUCTB4MDQJLyogRGF0ZSAqLwogI2RlZmluZSBJU0wxMjA1N19SRUdfUlRDX01PCTB4MDUJLyogTW9udGggKi8KKyNkZWZpbmUgSVNMMTIwNTdfUkVHX1JUQ19NT19DRU4JQklUKDcpCS8qIENlbnR1cnkgYml0ICovCiAjZGVmaW5lIElTTDEyMDU3X1JFR19SVENfWVIJMHgwNgkvKiBZZWFyICovCiAjZGVmaW5lIElTTDEyMDU3X1JUQ19TRUNfTEVOCTcKIApAQCAtODgsNyArODksNyBAQAogCXRtLT50bV9taW4gPSBiY2QyYmluKHJlZ3NbSVNMMTIwNTdfUkVHX1JUQ19NTl0pOwogCiAJaWYgKHJlZ3NbSVNMMTIwNTdfUkVHX1JUQ19IUl0gJiBJU0wxMjA1N19SRUdfUlRDX0hSX01JTCkgeyAvKiBBTS9QTSAqLwotCQl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVnc1tJU0wxMjA1N19SRUdfUlRDX0hSXSAmIDB4MGYpOworCQl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVnc1tJU0wxMjA1N19SRUdfUlRDX0hSXSAmIDB4MWYpOwogCQlpZiAocmVnc1tJU0wxMjA1N19SRUdfUlRDX0hSXSAmIElTTDEyMDU3X1JFR19SVENfSFJfUE0pCiAJCQl0bS0+dG1faG91ciArPSAxMjsKIAl9IGVsc2UgewkJCQkJICAgIC8qIDI0IGhvdXIgbW9kZSAqLwpAQCAtOTcsMjYgKzk4LDM3IEBACiAKIAl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocmVnc1tJU0wxMjA1N19SRUdfUlRDX0RUXSk7CiAJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJlZ3NbSVNMMTIwNTdfUkVHX1JUQ19EV10pIC0gMTsgLyogc3RhcnRzIGF0IDEgKi8KLQl0bS0+dG1fbW9uICA9IGJjZDJiaW4ocmVnc1tJU0wxMjA1N19SRUdfUlRDX01PXSkgLSAxOyAvKiBzdGFydHMgYXQgMSAqLworCXRtLT50bV9tb24gID0gYmNkMmJpbihyZWdzW0lTTDEyMDU3X1JFR19SVENfTU9dICYgMHgxZikgLSAxOyAvKiBkaXR0byAqLwogCXRtLT50bV95ZWFyID0gYmNkMmJpbihyZWdzW0lTTDEyMDU3X1JFR19SVENfWVJdKSArIDEwMDsKKworCS8qIENoZWNrIGlmIHllYXJzIHJlZ2lzdGVyIGhhcyBvdmVyZmxvd24gZnJvbSA5OSB0byAwMCAqLworCWlmIChyZWdzW0lTTDEyMDU3X1JFR19SVENfTU9dICYgSVNMMTIwNTdfUkVHX1JUQ19NT19DRU4pCisJCXRtLT50bV95ZWFyICs9IDEwMDsKIH0KIAogc3RhdGljIGludCBpc2wxMjA1N19ydGNfdG1fdG9fcmVncyh1OCAqcmVncywgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKKwl1OCBjZW50dXJ5X2JpdDsKKwogCS8qCiAJICogVGhlIGNsb2NrIGhhcyBhbiA4IGJpdCB3aWRlIGJjZC1jb2RlZCByZWdpc3RlciBmb3IgdGhlIHllYXIuCisJICogSXQgYWxzbyBoYXMgYSBjZW50dXJ5IGJpdCBlbmNvZGVkIGluIE1PIGZsYWcgd2hpY2ggcHJvdmlkZXMKKwkgKiBpbmZvcm1hdGlvbiBhYm91dCBvdmVyZmxvdyBvZiB5ZWFyIHJlZ2lzdGVyIGZyb20gOTkgdG8gMDAuCiAJICogdG1feWVhciBpcyBhbiBvZmZzZXQgZnJvbSAxOTAwIGFuZCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUKLQkgKiAyMDAwLTIwOTkgcmFuZ2UsIHNvIGFueSB2YWx1ZSBsZXNzIHRoYW4gMTAwIGlzIGludmFsaWQuCisJICogMjAwMC0yMTk5IHJhbmdlLCBzbyBhbnkgdmFsdWUgbGVzcyB0aGFuIDEwMCBvciBsYXJnZXIgdGhhbgorCSAqIDI5OSBpcyBpbnZhbGlkLgogCSAqLwotCWlmICh0bS0+dG1feWVhciA8IDEwMCkKKwlpZiAodG0tPnRtX3llYXIgPCAxMDAgfHwgdG0tPnRtX3llYXIgPiAyOTkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJY2VudHVyeV9iaXQgPSAodG0tPnRtX3llYXIgPiAxOTkpID8gSVNMMTIwNTdfUkVHX1JUQ19NT19DRU4gOiAwOworCiAJcmVnc1tJU0wxMjA1N19SRUdfUlRDX1NDXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CiAJcmVnc1tJU0wxMjA1N19SRUdfUlRDX01OXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CiAJcmVnc1tJU0wxMjA1N19SRUdfUlRDX0hSXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOyAvKiAyNC1ob3VyIGZvcm1hdCAqLwogCXJlZ3NbSVNMMTIwNTdfUkVHX1JUQ19EVF0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKLQlyZWdzW0lTTDEyMDU3X1JFR19SVENfTU9dID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7Ci0JcmVnc1tJU0wxMjA1N19SRUdfUlRDX1lSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgLSAxMDApOworCXJlZ3NbSVNMMTIwNTdfUkVHX1JUQ19NT10gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKSB8IGNlbnR1cnlfYml0OworCXJlZ3NbSVNMMTIwNTdfUkVHX1JUQ19ZUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAlyZWdzW0lTTDEyMDU3X1JFR19SVENfRFddID0gYmluMmJjZCh0bS0+dG1fd2RheSArIDEpOwogCiAJcmV0dXJuIDA7CkBAIC0xNTIsMTcgKzE2NCwzMyBAQAogewogCXN0cnVjdCBpc2wxMjA1N19ydGNfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXU4IHJlZ3NbSVNMMTIwNTdfUlRDX1NFQ19MRU5dOworCXVuc2lnbmVkIGludCBzcjsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJcmV0ID0gcmVnbWFwX3JlYWQoZGF0YS0+cmVnbWFwLCBJU0wxMjA1N19SRUdfU1IsICZzcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiB1bmFibGUgdG8gcmVhZCBvc2NpbGxhdG9yIHN0YXR1cyBmbGFnICglZClcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJaWYgKHNyICYgSVNMMTIwNTdfUkVHX1NSX09TRikgeworCQkJcmV0ID0gLUVOT0RBVEE7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwogCXJldCA9IHJlZ21hcF9idWxrX3JlYWQoZGF0YS0+cmVnbWFwLCBJU0wxMjA1N19SRUdfUlRDX1NDLCByZWdzLAogCQkJICAgICAgIElTTDEyMDU3X1JUQ19TRUNfTEVOKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgIiVzOiB1bmFibGUgdG8gcmVhZCBSVEMgdGltZSBzZWN0aW9uICglZClcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKworb3V0OgogCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiJXM6IFJUQyByZWFkIGZhaWxlZFxuIiwgX19mdW5jX18pOworCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0JfQogCiAJaXNsMTIwNTdfcnRjX3JlZ3NfdG9fdG0odG0sIHJlZ3MpOwogCkBAIC0xODIsMTAgKzIxMCwyNCBAQAogCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCXJldCA9IHJlZ21hcF9idWxrX3dyaXRlKGRhdGEtPnJlZ21hcCwgSVNMMTIwNTdfUkVHX1JUQ19TQywgcmVncywKIAkJCQlJU0wxMjA1N19SVENfU0VDX0xFTik7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IHVuYWJsZSB0byB3cml0ZSBSVEMgdGltZSBzZWN0aW9uICglZClcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfQogCi0JaWYgKHJldCkKLQkJZGV2X2VycihkZXYsICIlczogUlRDIHdyaXRlIGZhaWxlZFxuIiwgX19mdW5jX18pOworCS8qCisJICogTm93IHRoYXQgUlRDIHRpbWUgaGFzIGJlZW4gdXBkYXRlZCwgbGV0J3MgY2xlYXIgb3NjaWxsYXRvcgorCSAqIGZhaWx1cmUgZmxhZywgaWYgbmVlZGVkLgorCSAqLworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhkYXRhLT5yZWdtYXAsIElTTDEyMDU3X1JFR19TUiwKKwkJCQkgSVNMMTIwNTdfUkVHX1NSX09TRiwgMCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoZGV2LCAiJXM6IHVuYWJsZSB0byBjbGVhciBvc2MuIGZhaWx1cmUgYml0ICglZClcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKworb3V0OgorCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjAzLDE1ICsyNDUsOCBAQAogCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTTDEyMDU3X1JFR19JTlQsCiAJCQkJIElTTDEyMDU3X1JFR19JTlRfRU9TQywgMCk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZW5hYmxlIG9zY2lsbGF0b3JcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIENsZWFyIG9zY2lsbGF0b3IgZmFpbHVyZSBiaXQgaWYgbmVlZGVkICovCi0JcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNMMTIwNTdfUkVHX1NSLAotCQkJCSBJU0wxMjA1N19SRUdfU1JfT1NGLCAwKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBjbGVhciBvc2NpbGxhdG9yIGZhaWx1cmUgYml0XG4iKTsKKwkJZGV2X2VycihkZXYsICIlczogdW5hYmxlIHRvIGVuYWJsZSBvc2NpbGxhdG9yICglZClcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTIxOSw3ICsyNTQsOCBAQAogCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTTDEyMDU3X1JFR19TUiwKIAkJCQkgSVNMMTIwNTdfUkVHX1NSX0ExRiwgMCk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gY2xlYXIgYWxhcm0gYml0XG4iKTsKKwkJZGV2X2VycihkZXYsICIlczogdW5hYmxlIHRvIGNsZWFyIGFsYXJtIGJpdCAoJWQpXG4iLAorCQkJX19mdW5jX18sIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yNTMsNyArMjg5LDggQEAKIAlyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZpc2wxMjA1N19ydGNfcmVnbWFwX2NvbmZpZyk7CiAJaWYgKElTX0VSUihyZWdtYXApKSB7CiAJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKLQkJZGV2X2VycihkZXYsICJyZWdtYXAgYWxsb2NhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKGRldiwgIiVzOiByZWdtYXAgYWxsb2NhdGlvbiBmYWlsZWQgKCVkKVxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWxpYi5jIGIvZHJpdmVycy9ydGMvcnRjLWxpYi5jCmluZGV4IGM0Y2YwNTcuLmU2YmZiOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1saWIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbGliLmMKQEAgLTQ1LDE2ICs0NSwyMCBAQAogfQogRVhQT1JUX1NZTUJPTChydGNfeWVhcl9kYXlzKTsKIAorCiAvKgorICogcnRjX3RpbWVfdG9fdG02NCAtIENvbnZlcnRzIHRpbWU2NF90IHRvIHJ0Y190aW1lLgogICogQ29udmVydCBzZWNvbmRzIHNpbmNlIDAxLTAxLTE5NzAgMDA6MDA6MDAgdG8gR3JlZ29yaWFuIGRhdGUuCiAgKi8KLXZvaWQgcnRjX3RpbWVfdG9fdG0odW5zaWduZWQgbG9uZyB0aW1lLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQordm9pZCBydGNfdGltZTY0X3RvX3RtKHRpbWU2NF90IHRpbWUsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJdW5zaWduZWQgaW50IG1vbnRoLCB5ZWFyOworCXVuc2lnbmVkIGxvbmcgc2VjczsKIAlpbnQgZGF5czsKIAotCWRheXMgPSB0aW1lIC8gODY0MDA7Ci0JdGltZSAtPSAodW5zaWduZWQgaW50KSBkYXlzICogODY0MDA7CisJLyogdGltZSBtdXN0IGJlIHBvc2l0aXZlICovCisJZGF5cyA9IGRpdl9zNjQodGltZSwgODY0MDApOworCXNlY3MgPSB0aW1lIC0gKHVuc2lnbmVkIGludCkgZGF5cyAqIDg2NDAwOwogCiAJLyogZGF5IG9mIHRoZSB3ZWVrLCAxOTcwLTAxLTAxIHdhcyBhIFRodXJzZGF5ICovCiAJdG0tPnRtX3dkYXkgPSAoZGF5cyArIDQpICUgNzsKQEAgLTgxLDE0ICs4NSwxNCBAQAogCXRtLT50bV9tb24gPSBtb250aDsKIAl0bS0+dG1fbWRheSA9IGRheXMgKyAxOwogCi0JdG0tPnRtX2hvdXIgPSB0aW1lIC8gMzYwMDsKLQl0aW1lIC09IHRtLT50bV9ob3VyICogMzYwMDsKLQl0bS0+dG1fbWluID0gdGltZSAvIDYwOwotCXRtLT50bV9zZWMgPSB0aW1lIC0gdG0tPnRtX21pbiAqIDYwOworCXRtLT50bV9ob3VyID0gc2VjcyAvIDM2MDA7CisJc2VjcyAtPSB0bS0+dG1faG91ciAqIDM2MDA7CisJdG0tPnRtX21pbiA9IHNlY3MgLyA2MDsKKwl0bS0+dG1fc2VjID0gc2VjcyAtIHRtLT50bV9taW4gKiA2MDsKIAogCXRtLT50bV9pc2RzdCA9IDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHJ0Y190aW1lX3RvX3RtKTsKK0VYUE9SVF9TWU1CT0wocnRjX3RpbWU2NF90b190bSk7CiAKIC8qCiAgKiBEb2VzIHRoZSBydGNfdGltZSByZXByZXNlbnQgYSB2YWxpZCBkYXRlL3RpbWU/CkBAIC0xMDksMjQgKzExMywyMiBAQAogRVhQT1JUX1NZTUJPTChydGNfdmFsaWRfdG0pOwogCiAvKgorICogcnRjX3RtX3RvX3RpbWU2NCAtIENvbnZlcnRzIHJ0Y190aW1lIHRvIHRpbWU2NF90LgogICogQ29udmVydCBHcmVnb3JpYW4gZGF0ZSB0byBzZWNvbmRzIHNpbmNlIDAxLTAxLTE5NzAgMDA6MDA6MDAuCiAgKi8KLWludCBydGNfdG1fdG9fdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtLCB1bnNpZ25lZCBsb25nICp0aW1lKQordGltZTY0X3QgcnRjX3RtX3RvX3RpbWU2NChzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewotCSp0aW1lID0gbWt0aW1lKHRtLT50bV95ZWFyICsgMTkwMCwgdG0tPnRtX21vbiArIDEsIHRtLT50bV9tZGF5LAorCXJldHVybiBta3RpbWU2NCh0bS0+dG1feWVhciArIDE5MDAsIHRtLT50bV9tb24gKyAxLCB0bS0+dG1fbWRheSwKIAkJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjKTsKLQlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wocnRjX3RtX3RvX3RpbWUpOworRVhQT1JUX1NZTUJPTChydGNfdG1fdG9fdGltZTY0KTsKIAogLyoKICAqIENvbnZlcnQgcnRjX3RpbWUgdG8ga3RpbWUKICAqLwoga3RpbWVfdCBydGNfdG1fdG9fa3RpbWUoc3RydWN0IHJ0Y190aW1lIHRtKQogewotCXRpbWVfdCB0aW1lOwotCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUpOwotCXJldHVybiBrdGltZV9zZXQodGltZSwgMCk7CisJcmV0dXJuIGt0aW1lX3NldChydGNfdG1fdG9fdGltZTY0KCZ0bSksIDApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX3RtX3RvX2t0aW1lKTsKIApAQCAtMTM1LDE0ICsxMzcsMTQgQEAKICAqLwogc3RydWN0IHJ0Y190aW1lIHJ0Y19rdGltZV90b190bShrdGltZV90IGt0KQogewotCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKIAlzdHJ1Y3QgcnRjX3RpbWUgcmV0OwogCi0JdHMgPSBrdGltZV90b190aW1lc3BlYyhrdCk7CisJdHMgPSBrdGltZV90b190aW1lc3BlYzY0KGt0KTsKIAkvKiBSb3VuZCB1cCBhbnkgbnMgKi8KIAlpZiAodHMudHZfbnNlYykKIAkJdHMudHZfc2VjKys7Ci0JcnRjX3RpbWVfdG9fdG0odHMudHZfc2VjLCAmcmV0KTsKKwlydGNfdGltZTY0X3RvX3RtKHRzLnR2X3NlYywgJnJldCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19rdGltZV90b190bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCAyMTE0MmU2Li40ZjFjNmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTEsMTAgKzEsMTEgQEAKIC8qCi0gKiBUSSBPTUFQMSBSZWFsIFRpbWUgQ2xvY2sgaW50ZXJmYWNlIGZvciBMaW51eAorICogVEkgT01BUCBSZWFsIFRpbWUgQ2xvY2sgaW50ZXJmYWNlIGZvciBMaW51eAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMyBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKiBBdXRob3I6IEdlb3JnZSBHLiBEYXZpcyA8Z2RhdmlzQG12aXN0YS5jb20+IG9yIDxzb3VyY2VAbXZpc3RhLmNvbT4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgQnJvd25lbGwgKG5ldyBSVEMgZnJhbWV3b3JrKQorICogQ29weXJpZ2h0IChDKSAyMDE0IEpvaGFuIEhvdm9sZCA8am9oYW5Aa2VybmVsLm9yZz4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjUsNyArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0vKiBUaGUgT01BUDEgUlRDIGlzIGEgeWVhci9tb250aC9kYXkvaG91cnMvbWludXRlcy9zZWNvbmRzIEJDRCBjbG9jaworLyoKKyAqIFRoZSBPTUFQIFJUQyBpcyBhIHllYXIvbW9udGgvZGF5L2hvdXJzL21pbnV0ZXMvc2Vjb25kcyBCQ0QgY2xvY2sKICAqIHdpdGggY2VudHVyeS1yYW5nZSBhbGFybSBtYXRjaGluZywgZHJpdmVuIGJ5IHRoZSAzMmtIeiBjbG9jay4KICAqCiAgKiBUaGUgbWFpbiB1c2VyLXZpc2libGUgd2F5cyBpdCBkaWZmZXJzIGZyb20gUEMgUlRDcyBhcmUgYnkgb21pdHRpbmcKQEAgLTM5LDEwICs0MSw2IEBACiAgKiB0aGUgU29DKS4gU2VlIHRoZSBCT0FSRC1TUEVDSUZJQyBDVVNUT01JWkFUSU9OIGNvbW1lbnQuCiAgKi8KIAotI2RlZmluZQlEUklWRVJfTkFNRQkJCSJvbWFwX3J0YyIKLQotI2RlZmluZSBPTUFQX1JUQ19CQVNFCQkJMHhmZmZiNDgwMAotCiAvKiBSVEMgcmVnaXN0ZXJzICovCiAjZGVmaW5lIE9NQVBfUlRDX1NFQ09ORFNfUkVHCQkweDAwCiAjZGVmaW5lIE9NQVBfUlRDX01JTlVURVNfUkVHCQkweDA0CkBAIC03Miw2ICs3MCwxNSBAQAogCiAjZGVmaW5lIE9NQVBfUlRDX0lSUVdBS0VFTgkJMHg3YwogCisjZGVmaW5lIE9NQVBfUlRDX0FMQVJNMl9TRUNPTkRTX1JFRwkweDgwCisjZGVmaW5lIE9NQVBfUlRDX0FMQVJNMl9NSU5VVEVTX1JFRwkweDg0CisjZGVmaW5lIE9NQVBfUlRDX0FMQVJNMl9IT1VSU19SRUcJMHg4OAorI2RlZmluZSBPTUFQX1JUQ19BTEFSTTJfREFZU19SRUcJMHg4YworI2RlZmluZSBPTUFQX1JUQ19BTEFSTTJfTU9OVEhTX1JFRwkweDkwCisjZGVmaW5lIE9NQVBfUlRDX0FMQVJNMl9ZRUFSU19SRUcJMHg5NAorCisjZGVmaW5lIE9NQVBfUlRDX1BNSUNfUkVHCQkweDk4CisKIC8qIE9NQVBfUlRDX0NUUkxfUkVHIGJpdCBmaWVsZHM6ICovCiAjZGVmaW5lIE9NQVBfUlRDX0NUUkxfU1BMSVQJCUJJVCg3KQogI2RlZmluZSBPTUFQX1JUQ19DVFJMX0RJU0FCTEUJCUJJVCg2KQpAQCAtODQsNiArOTEsNyBAQAogCiAvKiBPTUFQX1JUQ19TVEFUVVNfUkVHIGJpdCBmaWVsZHM6ICovCiAjZGVmaW5lIE9NQVBfUlRDX1NUQVRVU19QT1dFUl9VUAlCSVQoNykKKyNkZWZpbmUgT01BUF9SVENfU1RBVFVTX0FMQVJNMgkJQklUKDcpCiAjZGVmaW5lIE9NQVBfUlRDX1NUQVRVU19BTEFSTQkJQklUKDYpCiAjZGVmaW5lIE9NQVBfUlRDX1NUQVRVU18xRF9FVkVOVAlCSVQoNSkKICNkZWZpbmUgT01BUF9SVENfU1RBVFVTXzFIX0VWRU5UCUJJVCg0KQpAQCAtOTMsNiArMTAxLDcgQEAKICNkZWZpbmUgT01BUF9SVENfU1RBVFVTX0JVU1kJCUJJVCgwKQogCiAvKiBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyBiaXQgZmllbGRzOiAqLworI2RlZmluZSBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNMglCSVQoNCkKICNkZWZpbmUgT01BUF9SVENfSU5URVJSVVBUU19JVF9BTEFSTQlCSVQoMykKICNkZWZpbmUgT01BUF9SVENfSU5URVJSVVBUU19JVF9USU1FUglCSVQoMikKIApAQCAtMTAyLDYxICsxMTEsODIgQEAKIC8qIE9NQVBfUlRDX0lSUVdBS0VFTiBiaXQgZmllbGRzOiAqLwogI2RlZmluZSBPTUFQX1JUQ19JUlFXQUtFRU5fQUxBUk1fV0FLRUVOCUJJVCgxKQogCisvKiBPTUFQX1JUQ19QTUlDIGJpdCBmaWVsZHM6ICovCisjZGVmaW5lIE9NQVBfUlRDX1BNSUNfUE9XRVJfRU5fRU4JQklUKDE2KQorCiAvKiBPTUFQX1JUQ19LSUNLRVIgdmFsdWVzICovCiAjZGVmaW5lCUtJQ0swX1ZBTFVFCQkJMHg4M2U3MGIxMwogI2RlZmluZQlLSUNLMV9WQUxVRQkJCTB4OTVhNGYxZTAKIAotI2RlZmluZQlPTUFQX1JUQ19IQVNfS0lDS0VSCQlCSVQoMCkKK3N0cnVjdCBvbWFwX3J0Y19kZXZpY2VfdHlwZSB7CisJYm9vbCBoYXNfMzJrY2xrX2VuOworCWJvb2wgaGFzX2tpY2tlcjsKKwlib29sIGhhc19pcnF3YWtlZW47CisJYm9vbCBoYXNfcG1pY19tb2RlOworCWJvb2wgaGFzX3Bvd2VyX3VwX3Jlc2V0OworfTsKKworc3RydWN0IG9tYXBfcnRjIHsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgaXJxX2FsYXJtOworCWludCBpcnFfdGltZXI7CisJdTggaW50ZXJydXB0c19yZWc7CisJYm9vbCBpc19wbWljX2NvbnRyb2xsZXI7CisJY29uc3Qgc3RydWN0IG9tYXBfcnRjX2RldmljZV90eXBlICp0eXBlOworfTsKKworc3RhdGljIGlubGluZSB1OCBydGNfcmVhZChzdHJ1Y3Qgb21hcF9ydGMgKnJ0YywgdW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZGIocnRjLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcnRjX3JlYWRsKHN0cnVjdCBvbWFwX3J0YyAqcnRjLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiByZWFkbChydGMtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRjX3dyaXRlKHN0cnVjdCBvbWFwX3J0YyAqcnRjLCB1bnNpZ25lZCBpbnQgcmVnLCB1OCB2YWwpCit7CisJd3JpdGViKHZhbCwgcnRjLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0Y193cml0ZWwoc3RydWN0IG9tYXBfcnRjICpydGMsIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWwpCit7CisJd3JpdGVsKHZhbCwgcnRjLT5iYXNlICsgcmVnKTsKK30KIAogLyoKLSAqIEZldyBSVEMgSVAgcmV2aXNpb25zIGhhcyBzcGVjaWFsIFdBS0UtRU4gUmVnaXN0ZXIgdG8gZW5hYmxlIFdha2V1cAotICogZ2VuZXJhdGlvbiBmb3IgZXZlbnQgQWxhcm0uCi0gKi8KLSNkZWZpbmUJT01BUF9SVENfSEFTX0lSUVdBS0VFTgkJQklUKDEpCi0KLS8qCi0gKiBTb21lIFJUQyBJUCByZXZpc2lvbnMgKGxpa2UgdGhvc2UgaW4gQU0zMzV4IGFuZCBEUkE3eCkgbmVlZAotICogdGhlIDMyS0h6IGNsb2NrIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZC4KLSAqLwotI2RlZmluZSBPTUFQX1JUQ19IQVNfMzJLQ0xLX0VOCQlCSVQoMikKLQotc3RhdGljIHZvaWQgX19pb21lbQkqcnRjX2Jhc2U7Ci0KLSNkZWZpbmUgcnRjX3JlYWQoYWRkcikJCXJlYWRiKHJ0Y19iYXNlICsgKGFkZHIpKQotI2RlZmluZSBydGNfd3JpdGUodmFsLCBhZGRyKQl3cml0ZWIodmFsLCBydGNfYmFzZSArIChhZGRyKSkKLQotI2RlZmluZSBydGNfd3JpdGVsKHZhbCwgYWRkcikJd3JpdGVsKHZhbCwgcnRjX2Jhc2UgKyAoYWRkcikpCi0KLQotLyogd2UgcmVseSBvbiB0aGUgcnRjIGZyYW1ld29yayB0byBoYW5kbGUgbG9ja2luZyAocnRjLT5vcHNfbG9jayksCisgKiBXZSByZWx5IG9uIHRoZSBydGMgZnJhbWV3b3JrIHRvIGhhbmRsZSBsb2NraW5nIChydGMtPm9wc19sb2NrKSwKICAqIHNvIHRoZSBvbmx5IG90aGVyIHJlcXVpcmVtZW50IGlzIHRoYXQgcmVnaXN0ZXIgYWNjZXNzZXMgd2hpY2gKICAqIHJlcXVpcmUgQlVTWSB0byBiZSBjbGVhciBhcmUgbWFkZSB3aXRoIElSUXMgbG9jYWxseSBkaXNhYmxlZAogICovCi1zdGF0aWMgdm9pZCBydGNfd2FpdF9ub3RfYnVzeSh2b2lkKQorc3RhdGljIHZvaWQgcnRjX3dhaXRfbm90X2J1c3koc3RydWN0IG9tYXBfcnRjICpydGMpCiB7Ci0JaW50CWNvdW50ID0gMDsKLQl1OAlzdGF0dXM7CisJaW50IGNvdW50OworCXU4IHN0YXR1czsKIAogCS8qIEJVU1kgbWF5IHN0YXkgYWN0aXZlIGZvciAxLzMyNzY4IHNlY29uZCAofjMwIHVzZWMpICovCiAJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgNTA7IGNvdW50KyspIHsKLQkJc3RhdHVzID0gcnRjX3JlYWQoT01BUF9SVENfU1RBVFVTX1JFRyk7Ci0JCWlmICgoc3RhdHVzICYgKHU4KU9NQVBfUlRDX1NUQVRVU19CVVNZKSA9PSAwKQorCQlzdGF0dXMgPSBydGNfcmVhZChydGMsIE9NQVBfUlRDX1NUQVRVU19SRUcpOworCQlpZiAoIShzdGF0dXMgJiBPTUFQX1JUQ19TVEFUVVNfQlVTWSkpCiAJCQlicmVhazsKIAkJdWRlbGF5KDEpOwogCX0KIAkvKiBub3cgd2UgaGF2ZSB+MTUgdXNlYyB0byByZWFkL3dyaXRlIHZhcmlvdXMgcmVnaXN0ZXJzICovCiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBydGNfaXJxKGludCBpcnEsIHZvaWQgKnJ0YykKK3N0YXRpYyBpcnFyZXR1cm5fdCBydGNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQl1bnNpZ25lZCBsb25nCQlldmVudHMgPSAwOwotCXU4CQkJaXJxX2RhdGE7CisJc3RydWN0IG9tYXBfcnRjCSpydGMgPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBldmVudHMgPSAwOworCXU4IGlycV9kYXRhOwogCi0JaXJxX2RhdGEgPSBydGNfcmVhZChPTUFQX1JUQ19TVEFUVVNfUkVHKTsKKwlpcnFfZGF0YSA9IHJ0Y19yZWFkKHJ0YywgT01BUF9SVENfU1RBVFVTX1JFRyk7CiAKIAkvKiBhbGFybSBpcnE/ICovCiAJaWYgKGlycV9kYXRhICYgT01BUF9SVENfU1RBVFVTX0FMQVJNKSB7Ci0JCXJ0Y193cml0ZShPTUFQX1JUQ19TVEFUVVNfQUxBUk0sIE9NQVBfUlRDX1NUQVRVU19SRUcpOworCQlydGNfd3JpdGUocnRjLCBPTUFQX1JUQ19TVEFUVVNfUkVHLCBPTUFQX1JUQ19TVEFUVVNfQUxBUk0pOwogCQlldmVudHMgfD0gUlRDX0lSUUYgfCBSVENfQUY7CiAJfQogCkBAIC0xNjQsMjMgKzE5NCwyMSBAQAogCWlmIChpcnFfZGF0YSAmIE9NQVBfUlRDX1NUQVRVU18xU19FVkVOVCkKIAkJZXZlbnRzIHw9IFJUQ19JUlFGIHwgUlRDX1VGOwogCi0JcnRjX3VwZGF0ZV9pcnEocnRjLCAxLCBldmVudHMpOworCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjLCAxLCBldmVudHMpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaW50IG9tYXBfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKKwlzdHJ1Y3Qgb21hcF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXU4IHJlZywgaXJxd2FrZV9yZWcgPSAwOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQljb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZF9lbnRyeSA9Ci0JCQkJCXBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldik7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCXJ0Y193YWl0X25vdF9idXN5KCk7Ci0JcmVnID0gcnRjX3JlYWQoT01BUF9SVENfSU5URVJSVVBUU19SRUcpOwotCWlmIChpZF9lbnRyeS0+ZHJpdmVyX2RhdGEgJiBPTUFQX1JUQ19IQVNfSVJRV0FLRUVOKQotCQlpcnF3YWtlX3JlZyA9IHJ0Y19yZWFkKE9NQVBfUlRDX0lSUVdBS0VFTik7CisJcnRjX3dhaXRfbm90X2J1c3kocnRjKTsKKwlyZWcgPSBydGNfcmVhZChydGMsIE9NQVBfUlRDX0lOVEVSUlVQVFNfUkVHKTsKKwlpZiAocnRjLT50eXBlLT5oYXNfaXJxd2FrZWVuKQorCQlpcnF3YWtlX3JlZyA9IHJ0Y19yZWFkKHJ0YywgT01BUF9SVENfSVJRV0FLRUVOKTsKIAogCWlmIChlbmFibGVkKSB7CiAJCXJlZyB8PSBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOwpAQCAtMTg5LDEwICsyMTcsMTAgQEAKIAkJcmVnICY9IH5PTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOwogCQlpcnF3YWtlX3JlZyAmPSB+T01BUF9SVENfSVJRV0FLRUVOX0FMQVJNX1dBS0VFTjsKIAl9Ci0JcnRjX3dhaXRfbm90X2J1c3koKTsKLQlydGNfd3JpdGUocmVnLCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7Ci0JaWYgKGlkX2VudHJ5LT5kcml2ZXJfZGF0YSAmIE9NQVBfUlRDX0hBU19JUlFXQUtFRU4pCi0JCXJ0Y193cml0ZShpcnF3YWtlX3JlZywgT01BUF9SVENfSVJRV0FLRUVOKTsKKwlydGNfd2FpdF9ub3RfYnVzeShydGMpOworCXJ0Y193cml0ZShydGMsIE9NQVBfUlRDX0lOVEVSUlVQVFNfUkVHLCByZWcpOworCWlmIChydGMtPnR5cGUtPmhhc19pcnF3YWtlZW4pCisJCXJ0Y193cml0ZShydGMsIE9NQVBfUlRDX0lSUVdBS0VFTiwgaXJxd2FrZV9yZWcpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCXJldHVybiAwOwpAQCAtMjMwLDM5ICsyNTgsNDcgQEAKIAl0bS0+dG1feWVhciA9IGJjZDJiaW4odG0tPnRtX3llYXIpICsgMTAwOwogfQogCitzdGF0aWMgdm9pZCBvbWFwX3J0Y19yZWFkX3RpbWVfcmF3KHN0cnVjdCBvbWFwX3J0YyAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXRtLT50bV9zZWMgPSBydGNfcmVhZChydGMsIE9NQVBfUlRDX1NFQ09ORFNfUkVHKTsKKwl0bS0+dG1fbWluID0gcnRjX3JlYWQocnRjLCBPTUFQX1JUQ19NSU5VVEVTX1JFRyk7CisJdG0tPnRtX2hvdXIgPSBydGNfcmVhZChydGMsIE9NQVBfUlRDX0hPVVJTX1JFRyk7CisJdG0tPnRtX21kYXkgPSBydGNfcmVhZChydGMsIE9NQVBfUlRDX0RBWVNfUkVHKTsKKwl0bS0+dG1fbW9uID0gcnRjX3JlYWQocnRjLCBPTUFQX1JUQ19NT05USFNfUkVHKTsKKwl0bS0+dG1feWVhciA9IHJ0Y19yZWFkKHJ0YywgT01BUF9SVENfWUVBUlNfUkVHKTsKK30KIAogc3RhdGljIGludCBvbWFwX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogeworCXN0cnVjdCBvbWFwX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKIAkvKiB3ZSBkb24ndCByZXBvcnQgd2RheS95ZGF5L2lzZHN0IC4uLiAqLwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JcnRjX3dhaXRfbm90X2J1c3koKTsKLQotCXRtLT50bV9zZWMgPSBydGNfcmVhZChPTUFQX1JUQ19TRUNPTkRTX1JFRyk7Ci0JdG0tPnRtX21pbiA9IHJ0Y19yZWFkKE9NQVBfUlRDX01JTlVURVNfUkVHKTsKLQl0bS0+dG1faG91ciA9IHJ0Y19yZWFkKE9NQVBfUlRDX0hPVVJTX1JFRyk7Ci0JdG0tPnRtX21kYXkgPSBydGNfcmVhZChPTUFQX1JUQ19EQVlTX1JFRyk7Ci0JdG0tPnRtX21vbiA9IHJ0Y19yZWFkKE9NQVBfUlRDX01PTlRIU19SRUcpOwotCXRtLT50bV95ZWFyID0gcnRjX3JlYWQoT01BUF9SVENfWUVBUlNfUkVHKTsKLQorCXJ0Y193YWl0X25vdF9idXN5KHJ0Yyk7CisJb21hcF9ydGNfcmVhZF90aW1lX3JhdyhydGMsIHRtKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAliY2QydG0odG0pOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogeworCXN0cnVjdCBvbWFwX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKIAlpZiAodG0yYmNkKHRtKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JcnRjX3dhaXRfbm90X2J1c3koKTsKIAotCXJ0Y193cml0ZSh0bS0+dG1feWVhciwgT01BUF9SVENfWUVBUlNfUkVHKTsKLQlydGNfd3JpdGUodG0tPnRtX21vbiwgT01BUF9SVENfTU9OVEhTX1JFRyk7Ci0JcnRjX3dyaXRlKHRtLT50bV9tZGF5LCBPTUFQX1JUQ19EQVlTX1JFRyk7Ci0JcnRjX3dyaXRlKHRtLT50bV9ob3VyLCBPTUFQX1JUQ19IT1VSU19SRUcpOwotCXJ0Y193cml0ZSh0bS0+dG1fbWluLCBPTUFQX1JUQ19NSU5VVEVTX1JFRyk7Ci0JcnRjX3dyaXRlKHRtLT50bV9zZWMsIE9NQVBfUlRDX1NFQ09ORFNfUkVHKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXJ0Y193YWl0X25vdF9idXN5KHJ0Yyk7CisKKwlydGNfd3JpdGUocnRjLCBPTUFQX1JUQ19ZRUFSU19SRUcsIHRtLT50bV95ZWFyKTsKKwlydGNfd3JpdGUocnRjLCBPTUFQX1JUQ19NT05USFNfUkVHLCB0bS0+dG1fbW9uKTsKKwlydGNfd3JpdGUocnRjLCBPTUFQX1JUQ19EQVlTX1JFRywgdG0tPnRtX21kYXkpOworCXJ0Y193cml0ZShydGMsIE9NQVBfUlRDX0hPVVJTX1JFRywgdG0tPnRtX2hvdXIpOworCXJ0Y193cml0ZShydGMsIE9NQVBfUlRDX01JTlVURVNfUkVHLCB0bS0+dG1fbWluKTsKKwlydGNfd3JpdGUocnRjLCBPTUFQX1JUQ19TRUNPTkRTX1JFRywgdG0tPnRtX3NlYyk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKQEAgLTI3MSw0OCArMzA3LDUwIEBACiAKIHN0YXRpYyBpbnQgb21hcF9ydGNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbG0pCiB7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlydGNfd2FpdF9ub3RfYnVzeSgpOworCXN0cnVjdCBvbWFwX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTggaW50ZXJydXB0czsKIAotCWFsbS0+dGltZS50bV9zZWMgPSBydGNfcmVhZChPTUFQX1JUQ19BTEFSTV9TRUNPTkRTX1JFRyk7Ci0JYWxtLT50aW1lLnRtX21pbiA9IHJ0Y19yZWFkKE9NQVBfUlRDX0FMQVJNX01JTlVURVNfUkVHKTsKLQlhbG0tPnRpbWUudG1faG91ciA9IHJ0Y19yZWFkKE9NQVBfUlRDX0FMQVJNX0hPVVJTX1JFRyk7Ci0JYWxtLT50aW1lLnRtX21kYXkgPSBydGNfcmVhZChPTUFQX1JUQ19BTEFSTV9EQVlTX1JFRyk7Ci0JYWxtLT50aW1lLnRtX21vbiA9IHJ0Y19yZWFkKE9NQVBfUlRDX0FMQVJNX01PTlRIU19SRUcpOwotCWFsbS0+dGltZS50bV95ZWFyID0gcnRjX3JlYWQoT01BUF9SVENfQUxBUk1fWUVBUlNfUkVHKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXJ0Y193YWl0X25vdF9idXN5KHJ0Yyk7CisKKwlhbG0tPnRpbWUudG1fc2VjID0gcnRjX3JlYWQocnRjLCBPTUFQX1JUQ19BTEFSTV9TRUNPTkRTX1JFRyk7CisJYWxtLT50aW1lLnRtX21pbiA9IHJ0Y19yZWFkKHJ0YywgT01BUF9SVENfQUxBUk1fTUlOVVRFU19SRUcpOworCWFsbS0+dGltZS50bV9ob3VyID0gcnRjX3JlYWQocnRjLCBPTUFQX1JUQ19BTEFSTV9IT1VSU19SRUcpOworCWFsbS0+dGltZS50bV9tZGF5ID0gcnRjX3JlYWQocnRjLCBPTUFQX1JUQ19BTEFSTV9EQVlTX1JFRyk7CisJYWxtLT50aW1lLnRtX21vbiA9IHJ0Y19yZWFkKHJ0YywgT01BUF9SVENfQUxBUk1fTU9OVEhTX1JFRyk7CisJYWxtLT50aW1lLnRtX3llYXIgPSBydGNfcmVhZChydGMsIE9NQVBfUlRDX0FMQVJNX1lFQVJTX1JFRyk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAliY2QydG0oJmFsbS0+dGltZSk7Ci0JYWxtLT5lbmFibGVkID0gISEocnRjX3JlYWQoT01BUF9SVENfSU5URVJSVVBUU19SRUcpCi0JCQkmIE9NQVBfUlRDX0lOVEVSUlVQVFNfSVRfQUxBUk0pOworCisJaW50ZXJydXB0cyA9IHJ0Y19yZWFkKHJ0YywgT01BUF9SVENfSU5URVJSVVBUU19SRUcpOworCWFsbS0+ZW5hYmxlZCA9ICEhKGludGVycnVwdHMgJiBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9tYXBfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbG0pCiB7CisJc3RydWN0IG9tYXBfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1OCByZWcsIGlycXdha2VfcmVnID0gMDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0JY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWRfZW50cnkgPQotCQkJCQlwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpOwogCiAJaWYgKHRtMmJjZCgmYWxtLT50aW1lKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlydGNfd2FpdF9ub3RfYnVzeSgpOworCXJ0Y193YWl0X25vdF9idXN5KHJ0Yyk7CiAKLQlydGNfd3JpdGUoYWxtLT50aW1lLnRtX3llYXIsIE9NQVBfUlRDX0FMQVJNX1lFQVJTX1JFRyk7Ci0JcnRjX3dyaXRlKGFsbS0+dGltZS50bV9tb24sIE9NQVBfUlRDX0FMQVJNX01PTlRIU19SRUcpOwotCXJ0Y193cml0ZShhbG0tPnRpbWUudG1fbWRheSwgT01BUF9SVENfQUxBUk1fREFZU19SRUcpOwotCXJ0Y193cml0ZShhbG0tPnRpbWUudG1faG91ciwgT01BUF9SVENfQUxBUk1fSE9VUlNfUkVHKTsKLQlydGNfd3JpdGUoYWxtLT50aW1lLnRtX21pbiwgT01BUF9SVENfQUxBUk1fTUlOVVRFU19SRUcpOwotCXJ0Y193cml0ZShhbG0tPnRpbWUudG1fc2VjLCBPTUFQX1JUQ19BTEFSTV9TRUNPTkRTX1JFRyk7CisJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfQUxBUk1fWUVBUlNfUkVHLCBhbG0tPnRpbWUudG1feWVhcik7CisJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfQUxBUk1fTU9OVEhTX1JFRywgYWxtLT50aW1lLnRtX21vbik7CisJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfQUxBUk1fREFZU19SRUcsIGFsbS0+dGltZS50bV9tZGF5KTsKKwlydGNfd3JpdGUocnRjLCBPTUFQX1JUQ19BTEFSTV9IT1VSU19SRUcsIGFsbS0+dGltZS50bV9ob3VyKTsKKwlydGNfd3JpdGUocnRjLCBPTUFQX1JUQ19BTEFSTV9NSU5VVEVTX1JFRywgYWxtLT50aW1lLnRtX21pbik7CisJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfQUxBUk1fU0VDT05EU19SRUcsIGFsbS0+dGltZS50bV9zZWMpOwogCi0JcmVnID0gcnRjX3JlYWQoT01BUF9SVENfSU5URVJSVVBUU19SRUcpOwotCWlmIChpZF9lbnRyeS0+ZHJpdmVyX2RhdGEgJiBPTUFQX1JUQ19IQVNfSVJRV0FLRUVOKQotCQlpcnF3YWtlX3JlZyA9IHJ0Y19yZWFkKE9NQVBfUlRDX0lSUVdBS0VFTik7CisJcmVnID0gcnRjX3JlYWQocnRjLCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJaWYgKHJ0Yy0+dHlwZS0+aGFzX2lycXdha2VlbikKKwkJaXJxd2FrZV9yZWcgPSBydGNfcmVhZChydGMsIE9NQVBfUlRDX0lSUVdBS0VFTik7CiAKIAlpZiAoYWxtLT5lbmFibGVkKSB7CiAJCXJlZyB8PSBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOwpAQCAtMzIxLDE1ICszNTksNzkgQEAKIAkJcmVnICY9IH5PTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOwogCQlpcnF3YWtlX3JlZyAmPSB+T01BUF9SVENfSVJRV0FLRUVOX0FMQVJNX1dBS0VFTjsKIAl9Ci0JcnRjX3dyaXRlKHJlZywgT01BUF9SVENfSU5URVJSVVBUU19SRUcpOwotCWlmIChpZF9lbnRyeS0+ZHJpdmVyX2RhdGEgJiBPTUFQX1JUQ19IQVNfSVJRV0FLRUVOKQotCQlydGNfd3JpdGUoaXJxd2FrZV9yZWcsIE9NQVBfUlRDX0lSUVdBS0VFTik7CisJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfSU5URVJSVVBUU19SRUcsIHJlZyk7CisJaWYgKHJ0Yy0+dHlwZS0+aGFzX2lycXdha2VlbikKKwkJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfSVJRV0FLRUVOLCBpcnF3YWtlX3JlZyk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBvbWFwX3J0YyAqb21hcF9ydGNfcG93ZXJfb2ZmX3J0YzsKKworLyoKKyAqIG9tYXBfcnRjX3Bvd2Vyb2ZmOiBSVEMtY29udHJvbGxlZCBwb3dlciBvZmYKKyAqCisgKiBUaGUgUlRDIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgYW4gZXh0ZXJuYWwgUE1JQyB2aWEgdGhlIHBtaWNfcG93ZXJfZW4gcGluLAorICogd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdHJhbnNpdGlvbiB0byBPRkYgb24gQUxBUk0yIGV2ZW50cy4KKyAqCisgKiBOb3RlczoKKyAqIFRoZSB0d28tc2Vjb25kIGFsYXJtIG9mZnNldCBpcyB0aGUgc2hvcnRlc3Qgb2Zmc2V0IHBvc3NpYmxlIGFzIHRoZSBhbGFybQorICogcmVnaXN0ZXJzIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgbmV4dCB0aW1lciB1cGRhdGUgYW5kIHRoZSBvZmZzZXQKKyAqIGNhbGN1bGF0aW9uIGlzIHRvbyBoZWF2eSBmb3IgZXZlcnl0aGluZyB0byBiZSBkb25lIHdpdGhpbiBhIHNpbmdsZSBhY2Nlc3MKKyAqIHBlcmlvZCAofjE1IHVzKS4KKyAqCisgKiBDYWxsZWQgd2l0aCBsb2NhbCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICovCitzdGF0aWMgdm9pZCBvbWFwX3J0Y19wb3dlcl9vZmYodm9pZCkKK3sKKwlzdHJ1Y3Qgb21hcF9ydGMgKnJ0YyA9IG9tYXBfcnRjX3Bvd2VyX29mZl9ydGM7CisJc3RydWN0IHJ0Y190aW1lIHRtOworCXVuc2lnbmVkIGxvbmcgbm93OworCXUzMiB2YWw7CisKKwkvKiBlbmFibGUgcG1pY19wb3dlcl9lbiBjb250cm9sICovCisJdmFsID0gcnRjX3JlYWRsKHJ0YywgT01BUF9SVENfUE1JQ19SRUcpOworCXJ0Y193cml0ZWwocnRjLCBPTUFQX1JUQ19QTUlDX1JFRywgdmFsIHwgT01BUF9SVENfUE1JQ19QT1dFUl9FTl9FTik7CisKKwkvKiBzZXQgYWxhcm0gdHdvIHNlY29uZHMgZnJvbSBub3cgKi8KKwlvbWFwX3J0Y19yZWFkX3RpbWVfcmF3KHJ0YywgJnRtKTsKKwliY2QydG0oJnRtKTsKKwlydGNfdG1fdG9fdGltZSgmdG0sICZub3cpOworCXJ0Y190aW1lX3RvX3RtKG5vdyArIDIsICZ0bSk7CisKKwlpZiAodG0yYmNkKCZ0bSkgPCAwKSB7CisJCWRldl9lcnIoJnJ0Yy0+cnRjLT5kZXYsICJwb3dlciBvZmYgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJ0Y193YWl0X25vdF9idXN5KHJ0Yyk7CisKKwlydGNfd3JpdGUocnRjLCBPTUFQX1JUQ19BTEFSTTJfU0VDT05EU19SRUcsIHRtLnRtX3NlYyk7CisJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfQUxBUk0yX01JTlVURVNfUkVHLCB0bS50bV9taW4pOworCXJ0Y193cml0ZShydGMsIE9NQVBfUlRDX0FMQVJNMl9IT1VSU19SRUcsIHRtLnRtX2hvdXIpOworCXJ0Y193cml0ZShydGMsIE9NQVBfUlRDX0FMQVJNMl9EQVlTX1JFRywgdG0udG1fbWRheSk7CisJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfQUxBUk0yX01PTlRIU19SRUcsIHRtLnRtX21vbik7CisJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfQUxBUk0yX1lFQVJTX1JFRywgdG0udG1feWVhcik7CisKKwkvKgorCSAqIGVuYWJsZSBBTEFSTTIgaW50ZXJydXB0CisJICoKKwkgKiBOT1RFOiB0aGlzIGZhaWxzIG9uIEFNMzM1MiBpZiBydGNfd3JpdGUgKHdyaXRlYikgaXMgdXNlZAorCSAqLworCXZhbCA9IHJ0Y19yZWFkKHJ0YywgT01BUF9SVENfSU5URVJSVVBUU19SRUcpOworCXJ0Y193cml0ZWwocnRjLCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRywKKwkJCXZhbCB8IE9NQVBfUlRDX0lOVEVSUlVQVFNfSVRfQUxBUk0yKTsKKworCS8qCisJICogV2FpdCBmb3IgYWxhcm0gdG8gdHJpZ2dlciAod2l0aGluIHR3byBzZWNvbmRzKSBhbmQgZXh0ZXJuYWwgUE1JQyB0bworCSAqIHBvd2VyIG9mZiB0aGUgc3lzdGVtLiBBZGQgYSA1MDAgbXMgbWFyZ2luIGZvciBleHRlcm5hbCBsYXRlbmNpZXMKKwkgKiAoZS5nLiBkZWJvdW5jZSBjaXJjdWl0cykuCisJICovCisJbWRlbGF5KDI1MDApOworfQorCiBzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgb21hcF9ydGNfb3BzID0gewogCS5yZWFkX3RpbWUJPSBvbWFwX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gb21hcF9ydGNfc2V0X3RpbWUsCkBAIC0zMzgsMTM3ICs0NDAsMTQwIEBACiAJLmFsYXJtX2lycV9lbmFibGUgPSBvbWFwX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAotc3RhdGljIGludCBvbWFwX3J0Y19hbGFybTsKLXN0YXRpYyBpbnQgb21hcF9ydGNfdGltZXI7Ci0KLSNkZWZpbmUJT01BUF9SVENfREFUQV9BTTMzNTJfSURYCTEKLSNkZWZpbmUJT01BUF9SVENfREFUQV9EQTgzMF9JRFgJCTIKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgb21hcF9ydGNfZGV2dHlwZVtdID0gewotCXsKLQkJLm5hbWUJPSBEUklWRVJfTkFNRSwKLQl9LAotCVtPTUFQX1JUQ19EQVRBX0FNMzM1Ml9JRFhdID0gewotCQkubmFtZQk9ICJhbTMzNTItcnRjIiwKLQkJLmRyaXZlcl9kYXRhID0gT01BUF9SVENfSEFTX0tJQ0tFUiB8IE9NQVBfUlRDX0hBU19JUlFXQUtFRU4gfAotCQkJICAgICAgIE9NQVBfUlRDX0hBU18zMktDTEtfRU4sCi0JfSwKLQlbT01BUF9SVENfREFUQV9EQTgzMF9JRFhdID0gewotCQkubmFtZQk9ICJkYTgzMC1ydGMiLAotCQkuZHJpdmVyX2RhdGEgPSBPTUFQX1JUQ19IQVNfS0lDS0VSLAotCX0sCi0Je30sCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfcnRjX2RldmljZV90eXBlIG9tYXBfcnRjX2RlZmF1bHRfdHlwZSA9IHsKKwkuaGFzX3Bvd2VyX3VwX3Jlc2V0ID0gdHJ1ZSwKIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBvbWFwX3J0Y19kZXZ0eXBlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX3J0Y19kZXZpY2VfdHlwZSBvbWFwX3J0Y19hbTMzNTJfdHlwZSA9IHsKKwkuaGFzXzMya2Nsa19lbgk9IHRydWUsCisJLmhhc19raWNrZXIJPSB0cnVlLAorCS5oYXNfaXJxd2FrZWVuCT0gdHJ1ZSwKKwkuaGFzX3BtaWNfbW9kZQk9IHRydWUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfcnRjX2RldmljZV90eXBlIG9tYXBfcnRjX2RhODMwX3R5cGUgPSB7CisJLmhhc19raWNrZXIJPSB0cnVlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgb21hcF9ydGNfaWRfdGFibGVbXSA9IHsKKwl7CisJCS5uYW1lCT0gIm9tYXBfcnRjIiwKKwkJLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSZvbWFwX3J0Y19kZWZhdWx0X3R5cGUsCisJfSwgeworCQkubmFtZQk9ICJhbTMzNTItcnRjIiwKKwkJLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSZvbWFwX3J0Y19hbTMzNTJfdHlwZSwKKwl9LCB7CisJCS5uYW1lCT0gImRhODMwLXJ0YyIsCisJCS5kcml2ZXJfZGF0YSA9IChrZXJuZWxfdWxvbmdfdCkmb21hcF9ydGNfZGE4MzBfdHlwZSwKKwl9LCB7CisJCS8qIHNlbnRpbmVsICovCisJfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIG9tYXBfcnRjX2lkX3RhYmxlKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb21hcF9ydGNfb2ZfbWF0Y2hbXSA9IHsKLQl7CS5jb21wYXRpYmxlCT0gInRpLGRhODMwLXJ0YyIsCi0JCS5kYXRhCQk9ICZvbWFwX3J0Y19kZXZ0eXBlW09NQVBfUlRDX0RBVEFfREE4MzBfSURYXSwKLQl9LAotCXsJLmNvbXBhdGlibGUJPSAidGksYW0zMzUyLXJ0YyIsCi0JCS5kYXRhCQk9ICZvbWFwX3J0Y19kZXZ0eXBlW09NQVBfUlRDX0RBVEFfQU0zMzUyX0lEWF0sCi0JfSwKLQl7fSwKKwl7CisJCS5jb21wYXRpYmxlCT0gInRpLGFtMzM1Mi1ydGMiLAorCQkuZGF0YQkJPSAmb21hcF9ydGNfYW0zMzUyX3R5cGUsCisJfSwgeworCQkuY29tcGF0aWJsZQk9ICJ0aSxkYTgzMC1ydGMiLAorCQkuZGF0YQkJPSAmb21hcF9ydGNfZGE4MzBfdHlwZSwKKwl9LCB7CisJCS8qIHNlbnRpbmVsICovCisJfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9tYXBfcnRjX29mX21hdGNoKTsKIAogc3RhdGljIGludCBfX2luaXQgb21hcF9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YzsKLQl1OAkJCXJlZywgbmV3X2N0cmw7CisJc3RydWN0IG9tYXBfcnRjCSpydGM7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisJdTggcmVnLCBtYXNrLCBuZXdfY3RybDsKIAljb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZF9lbnRyeTsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKwlpbnQgcmV0OworCisJcnRjID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFydGMpCisJCXJldHVybiAtRU5PTUVNOwogCiAJb2ZfaWQgPSBvZl9tYXRjaF9kZXZpY2Uob21hcF9ydGNfb2ZfbWF0Y2gsICZwZGV2LT5kZXYpOwotCWlmIChvZl9pZCkKLQkJcGRldi0+aWRfZW50cnkgPSBvZl9pZC0+ZGF0YTsKLQotCWlkX2VudHJ5ID0gcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KTsKLQlpZiAoIWlkX2VudHJ5KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1hdGNoaW5nIGRldmljZSBlbnRyeVxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCWlmIChvZl9pZCkgeworCQlydGMtPnR5cGUgPSBvZl9pZC0+ZGF0YTsKKwkJcnRjLT5pc19wbWljX2NvbnRyb2xsZXIgPSBydGMtPnR5cGUtPmhhc19wbWljX21vZGUgJiYKKwkJCQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCQkic3lzdGVtLXBvd2VyLWNvbnRyb2xsZXIiKTsKKwl9IGVsc2UgeworCQlpZF9lbnRyeSA9IHBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldik7CisJCXJ0Yy0+dHlwZSA9ICh2b2lkICopaWRfZW50cnktPmRyaXZlcl9kYXRhOwogCX0KIAotCW9tYXBfcnRjX3RpbWVyID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAob21hcF9ydGNfdGltZXIgPD0gMCkgewotCQlwcl9kZWJ1ZygiJXM6IG5vIHVwZGF0ZSBpcnE/XG4iLCBwZGV2LT5uYW1lKTsKKwlydGMtPmlycV90aW1lciA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHJ0Yy0+aXJxX3RpbWVyIDw9IDApCiAJCXJldHVybiAtRU5PRU5UOwotCX0KIAotCW9tYXBfcnRjX2FsYXJtID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKLQlpZiAob21hcF9ydGNfYWxhcm0gPD0gMCkgewotCQlwcl9kZWJ1ZygiJXM6IG5vIGFsYXJtIGlycT9cbiIsIHBkZXYtPm5hbWUpOworCXJ0Yy0+aXJxX2FsYXJtID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwlpZiAocnRjLT5pcnFfYWxhcm0gPD0gMCkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlydGNfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwotCWlmIChJU19FUlIocnRjX2Jhc2UpKQotCQlyZXR1cm4gUFRSX0VSUihydGNfYmFzZSk7CisJcnRjLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihydGMtPmJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihydGMtPmJhc2UpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKIAogCS8qIEVuYWJsZSB0aGUgY2xvY2svbW9kdWxlIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGUgcmVnaXN0ZXJzICovCiAJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKIAotCWlmIChpZF9lbnRyeS0+ZHJpdmVyX2RhdGEgJiBPTUFQX1JUQ19IQVNfS0lDS0VSKSB7Ci0JCXJ0Y193cml0ZWwoS0lDSzBfVkFMVUUsIE9NQVBfUlRDX0tJQ0swX1JFRyk7Ci0JCXJ0Y193cml0ZWwoS0lDSzFfVkFMVUUsIE9NQVBfUlRDX0tJQ0sxX1JFRyk7CisJaWYgKHJ0Yy0+dHlwZS0+aGFzX2tpY2tlcikgeworCQlydGNfd3JpdGVsKHJ0YywgT01BUF9SVENfS0lDSzBfUkVHLCBLSUNLMF9WQUxVRSk7CisJCXJ0Y193cml0ZWwocnRjLCBPTUFQX1JUQ19LSUNLMV9SRUcsIEtJQ0sxX1ZBTFVFKTsKIAl9CiAKLQlydGMgPSBkZXZtX3J0Y19kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgcGRldi0+bmFtZSwKLQkJCSZvbWFwX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJcHJfZGVidWcoIiVzOiBjYW4ndCByZWdpc3RlciBSVEMgZGV2aWNlLCBlcnIgJWxkXG4iLAotCQkJcGRldi0+bmFtZSwgUFRSX0VSUihydGMpKTsKLQkJZ290byBmYWlsMDsKLQl9Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKLQotCS8qIGNsZWFyIHBlbmRpbmcgaXJxcywgYW5kIHNldCAxL3NlY29uZCBwZXJpb2RpYywKLQkgKiB3aGljaCB3ZSdsbCB1c2UgaW5zdGVhZCBvZiB1cGRhdGUgaXJxcworCS8qCisJICogZGlzYWJsZSBpbnRlcnJ1cHRzCisJICoKKwkgKiBOT1RFOiBBTEFSTTIgaXMgbm90IGNsZWFyZWQgb24gQU0zMzUyIGlmIHJ0Y193cml0ZSAod3JpdGViKSBpcyB1c2VkCiAJICovCi0JcnRjX3dyaXRlKDAsIE9NQVBfUlRDX0lOVEVSUlVQVFNfUkVHKTsKKwlydGNfd3JpdGVsKHJ0YywgT01BUF9SVENfSU5URVJSVVBUU19SRUcsIDApOwogCiAJLyogZW5hYmxlIFJUQyBmdW5jdGlvbmFsIGNsb2NrICovCi0JaWYgKGlkX2VudHJ5LT5kcml2ZXJfZGF0YSAmIE9NQVBfUlRDX0hBU18zMktDTEtfRU4pCi0JCXJ0Y193cml0ZWwoT01BUF9SVENfT1NDXzMyS0NMS19FTiwgT01BUF9SVENfT1NDX1JFRyk7CisJaWYgKHJ0Yy0+dHlwZS0+aGFzXzMya2Nsa19lbikgeworCQlyZWcgPSBydGNfcmVhZChydGMsIE9NQVBfUlRDX09TQ19SRUcpOworCQlydGNfd3JpdGVsKHJ0YywgT01BUF9SVENfT1NDX1JFRywKKwkJCQlyZWcgfCBPTUFQX1JUQ19PU0NfMzJLQ0xLX0VOKTsKKwl9CiAKIAkvKiBjbGVhciBvbGQgc3RhdHVzICovCi0JcmVnID0gcnRjX3JlYWQoT01BUF9SVENfU1RBVFVTX1JFRyk7Ci0JaWYgKHJlZyAmICh1OCkgT01BUF9SVENfU1RBVFVTX1BPV0VSX1VQKSB7Ci0JCXByX2luZm8oIiVzOiBSVEMgcG93ZXIgdXAgcmVzZXQgZGV0ZWN0ZWRcbiIsCi0JCQlwZGV2LT5uYW1lKTsKLQkJcnRjX3dyaXRlKE9NQVBfUlRDX1NUQVRVU19QT1dFUl9VUCwgT01BUF9SVENfU1RBVFVTX1JFRyk7Ci0JfQotCWlmIChyZWcgJiAodTgpIE9NQVBfUlRDX1NUQVRVU19BTEFSTSkKLQkJcnRjX3dyaXRlKE9NQVBfUlRDX1NUQVRVU19BTEFSTSwgT01BUF9SVENfU1RBVFVTX1JFRyk7CisJcmVnID0gcnRjX3JlYWQocnRjLCBPTUFQX1JUQ19TVEFUVVNfUkVHKTsKIAotCS8qIGhhbmRsZSBwZXJpb2RpYyBhbmQgYWxhcm0gaXJxcyAqLwotCWlmIChkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIG9tYXBfcnRjX3RpbWVyLCBydGNfaXJxLCAwLAotCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKSkgewotCQlwcl9kZWJ1ZygiJXM6IFJUQyB0aW1lciBpbnRlcnJ1cHQgSVJRJWQgYWxyZWFkeSBjbGFpbWVkXG4iLAotCQkJcGRldi0+bmFtZSwgb21hcF9ydGNfdGltZXIpOwotCQlnb3RvIGZhaWwwOworCW1hc2sgPSBPTUFQX1JUQ19TVEFUVVNfQUxBUk07CisKKwlpZiAocnRjLT50eXBlLT5oYXNfcG1pY19tb2RlKQorCQltYXNrIHw9IE9NQVBfUlRDX1NUQVRVU19BTEFSTTI7CisKKwlpZiAocnRjLT50eXBlLT5oYXNfcG93ZXJfdXBfcmVzZXQpIHsKKwkJbWFzayB8PSBPTUFQX1JUQ19TVEFUVVNfUE9XRVJfVVA7CisJCWlmIChyZWcgJiBPTUFQX1JUQ19TVEFUVVNfUE9XRVJfVVApCisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiUlRDIHBvd2VyIHVwIHJlc2V0IGRldGVjdGVkXG4iKTsKIAl9Ci0JaWYgKChvbWFwX3J0Y190aW1lciAhPSBvbWFwX3J0Y19hbGFybSkgJiYKLQkJKGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgb21hcF9ydGNfYWxhcm0sIHJ0Y19pcnEsIDAsCi0JCQlkZXZfbmFtZSgmcnRjLT5kZXYpLCBydGMpKSkgewotCQlwcl9kZWJ1ZygiJXM6IFJUQyBhbGFybSBpbnRlcnJ1cHQgSVJRJWQgYWxyZWFkeSBjbGFpbWVkXG4iLAotCQkJcGRldi0+bmFtZSwgb21hcF9ydGNfYWxhcm0pOwotCQlnb3RvIGZhaWwwOwotCX0KKworCWlmIChyZWcgJiBtYXNrKQorCQlydGNfd3JpdGUocnRjLCBPTUFQX1JUQ19TVEFUVVNfUkVHLCByZWcgJiBtYXNrKTsKIAogCS8qIE9uIGJvYXJkcyB3aXRoIHNwbGl0IHBvd2VyLCBSVENfT05fTk9GRiB3b24ndCByZXNldCB0aGUgUlRDICovCi0JcmVnID0gcnRjX3JlYWQoT01BUF9SVENfQ1RSTF9SRUcpOwotCWlmIChyZWcgJiAodTgpIE9NQVBfUlRDX0NUUkxfU1RPUCkKLQkJcHJfaW5mbygiJXM6IGFscmVhZHkgcnVubmluZ1xuIiwgcGRldi0+bmFtZSk7CisJcmVnID0gcnRjX3JlYWQocnRjLCBPTUFQX1JUQ19DVFJMX1JFRyk7CisJaWYgKHJlZyAmIE9NQVBfUlRDX0NUUkxfU1RPUCkKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgImFscmVhZHkgcnVubmluZ1xuIik7CiAKIAkvKiBmb3JjZSB0byAyNCBob3VyIG1vZGUgKi8KLQluZXdfY3RybCA9IHJlZyAmIChPTUFQX1JUQ19DVFJMX1NQTElUfE9NQVBfUlRDX0NUUkxfQVVUT19DT01QKTsKKwluZXdfY3RybCA9IHJlZyAmIChPTUFQX1JUQ19DVFJMX1NQTElUIHwgT01BUF9SVENfQ1RSTF9BVVRPX0NPTVApOwogCW5ld19jdHJsIHw9IE9NQVBfUlRDX0NUUkxfU1RPUDsKIAotCS8qIEJPQVJELVNQRUNJRklDIENVU1RPTUlaQVRJT04gQ0FOIEdPIEhFUkU6CisJLyoKKwkgKiBCT0FSRC1TUEVDSUZJQyBDVVNUT01JWkFUSU9OIENBTiBHTyBIRVJFOgogCSAqCiAJICogIC0gRGV2aWNlIHdha2UtdXAgY2FwYWJpbGl0eSBzZXR0aW5nIHNob3VsZCBjb21lIHRocm91Z2ggY2hpcAogCSAqICAgIGluaXQgbG9naWMuIE9NQVAxIGJvYXJkcyBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgIndha2V1cCBjYXBhYmxlIgpAQCAtNDgyLDM2ICs1ODcsNzAgQEAKIAkgKiAgICBpcyB3cml0ZS1vbmx5LCBhbmQgYWx3YXlzIHJlYWRzIGFzIHplcm8uLi4pCiAJICovCiAKLQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgdHJ1ZSk7Ci0KLQlpZiAobmV3X2N0cmwgJiAodTgpIE9NQVBfUlRDX0NUUkxfU1BMSVQpCi0JCXByX2luZm8oIiVzOiBzcGxpdCBwb3dlciBtb2RlXG4iLCBwZGV2LT5uYW1lKTsKKwlpZiAobmV3X2N0cmwgJiBPTUFQX1JUQ19DVFJMX1NQTElUKQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAic3BsaXQgcG93ZXIgbW9kZVxuIik7CiAKIAlpZiAocmVnICE9IG5ld19jdHJsKQotCQlydGNfd3JpdGUobmV3X2N0cmwsIE9NQVBfUlRDX0NUUkxfUkVHKTsKKwkJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfQ1RSTF9SRUcsIG5ld19jdHJsKTsKKworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCB0cnVlKTsKKworCXJ0Yy0+cnRjID0gZGV2bV9ydGNfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHBkZXYtPm5hbWUsCisJCQkmb21hcF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMtPnJ0YykpIHsKKwkJcmV0ID0gUFRSX0VSUihydGMtPnJ0Yyk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIGhhbmRsZSBwZXJpb2RpYyBhbmQgYWxhcm0gaXJxcyAqLworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgcnRjLT5pcnFfdGltZXIsIHJ0Y19pcnEsIDAsCisJCQlkZXZfbmFtZSgmcnRjLT5ydGMtPmRldiksIHJ0Yyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlpZiAocnRjLT5pcnFfdGltZXIgIT0gcnRjLT5pcnFfYWxhcm0pIHsKKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBydGMtPmlycV9hbGFybSwgcnRjX2lycSwgMCwKKwkJCQlkZXZfbmFtZSgmcnRjLT5ydGMtPmRldiksIHJ0Yyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpZiAocnRjLT5pc19wbWljX2NvbnRyb2xsZXIpIHsKKwkJaWYgKCFwbV9wb3dlcl9vZmYpIHsKKwkJCW9tYXBfcnRjX3Bvd2VyX29mZl9ydGMgPSBydGM7CisJCQlwbV9wb3dlcl9vZmYgPSBvbWFwX3J0Y19wb3dlcl9vZmY7CisJCX0KKwl9CiAKIAlyZXR1cm4gMDsKIAotZmFpbDA6Ci0JaWYgKGlkX2VudHJ5LT5kcml2ZXJfZGF0YSAmIE9NQVBfUlRDX0hBU19LSUNLRVIpCi0JCXJ0Y193cml0ZWwoMCwgT01BUF9SVENfS0lDSzBfUkVHKTsKK2VycjoKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgZmFsc2UpOworCWlmIChydGMtPnR5cGUtPmhhc19raWNrZXIpCisJCXJ0Y193cml0ZWwocnRjLCBPTUFQX1JUQ19LSUNLMF9SRUcsIDApOwogCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwotCXJldHVybiAtRUlPOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2V4aXQgb21hcF9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWRfZW50cnkgPQotCQkJCXBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldik7CisJc3RydWN0IG9tYXBfcnRjICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChwbV9wb3dlcl9vZmYgPT0gb21hcF9ydGNfcG93ZXJfb2ZmICYmCisJCQlvbWFwX3J0Y19wb3dlcl9vZmZfcnRjID09IHJ0YykgeworCQlwbV9wb3dlcl9vZmYgPSBOVUxMOworCQlvbWFwX3J0Y19wb3dlcl9vZmZfcnRjID0gTlVMTDsKKwl9CiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMCk7CiAKIAkvKiBsZWF2ZSBydGMgcnVubmluZywgYnV0IGRpc2FibGUgaXJxcyAqLwotCXJ0Y193cml0ZSgwLCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJcnRjX3dyaXRlKHJ0YywgT01BUF9SVENfSU5URVJSVVBUU19SRUcsIDApOwogCi0JaWYgKGlkX2VudHJ5LT5kcml2ZXJfZGF0YSAmIE9NQVBfUlRDX0hBU19LSUNLRVIpCi0JCXJ0Y193cml0ZWwoMCwgT01BUF9SVENfS0lDSzBfUkVHKTsKKwlpZiAocnRjLT50eXBlLT5oYXNfa2lja2VyKQorCQlydGNfd3JpdGVsKHJ0YywgT01BUF9SVENfS0lDSzBfUkVHLCAwKTsKIAogCS8qIERpc2FibGUgdGhlIGNsb2NrL21vZHVsZSAqLwogCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CkBAIC01MjEsMjAgKzY2MCwyMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCi1zdGF0aWMgdTggaXJxc3RhdDsKLQogc3RhdGljIGludCBvbWFwX3J0Y19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpcnFzdGF0ID0gcnRjX3JlYWQoT01BUF9SVENfSU5URVJSVVBUU19SRUcpOworCXN0cnVjdCBvbWFwX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQkvKiBGSVhNRSB0aGUgUlRDIGFsYXJtIGlzIG5vdCBjdXJyZW50bHkgYWN0aW5nIGFzIGEgd2FrZXVwIGV2ZW50CisJcnRjLT5pbnRlcnJ1cHRzX3JlZyA9IHJ0Y19yZWFkKHJ0YywgT01BUF9SVENfSU5URVJSVVBUU19SRUcpOworCisJLyoKKwkgKiBGSVhNRTogdGhlIFJUQyBhbGFybSBpcyBub3QgY3VycmVudGx5IGFjdGluZyBhcyBhIHdha2V1cCBldmVudAogCSAqIHNvdXJjZSBvbiBzb21lIHBsYXRmb3JtcywgYW5kIGluIGZhY3QgdGhpcyBlbmFibGUoKSBjYWxsIGlzIGp1c3QKIAkgKiBzYXZpbmcgYSBmbGFnIHRoYXQncyBuZXZlciB1c2VkLi4uCiAJICovCiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCi0JCWVuYWJsZV9pcnFfd2FrZShvbWFwX3J0Y19hbGFybSk7CisJCWVuYWJsZV9pcnFfd2FrZShydGMtPmlycV9hbGFybSk7CiAJZWxzZQotCQlydGNfd3JpdGUoMCwgT01BUF9SVENfSU5URVJSVVBUU19SRUcpOworCQlydGNfd3JpdGUocnRjLCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRywgMCk7CiAKIAkvKiBEaXNhYmxlIHRoZSBjbG9jay9tb2R1bGUgKi8KIAlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CkBAIC01NDQsMTMgKzY4NCwxNSBAQAogCiBzdGF0aWMgaW50IG9tYXBfcnRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG9tYXBfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwogCS8qIEVuYWJsZSB0aGUgY2xvY2svbW9kdWxlIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGUgcmVnaXN0ZXJzICovCiAJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOwogCiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCi0JCWRpc2FibGVfaXJxX3dha2Uob21hcF9ydGNfYWxhcm0pOworCQlkaXNhYmxlX2lycV93YWtlKHJ0Yy0+aXJxX2FsYXJtKTsKIAllbHNlCi0JCXJ0Y193cml0ZShpcnFzdGF0LCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJCXJ0Y193cml0ZShydGMsIE9NQVBfUlRDX0lOVEVSUlVQVFNfUkVHLCBydGMtPmludGVycnVwdHNfcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTYwLDIzICs3MDIsMzIgQEAKIAogc3RhdGljIHZvaWQgb21hcF9ydGNfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlydGNfd3JpdGUoMCwgT01BUF9SVENfSU5URVJSVVBUU19SRUcpOworCXN0cnVjdCBvbWFwX3J0YyAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdTggbWFzazsKKworCS8qCisJICogS2VlcCB0aGUgQUxBUk0gaW50ZXJydXB0IGVuYWJsZWQgdG8gYWxsb3cgdGhlIHN5c3RlbSB0byBwb3dlciB1cCBvbgorCSAqIGFsYXJtIGV2ZW50cy4KKwkgKi8KKwltYXNrID0gcnRjX3JlYWQocnRjLCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJbWFzayAmPSBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOworCXJ0Y193cml0ZShydGMsIE9NQVBfUlRDX0lOVEVSUlVQVFNfUkVHLCBtYXNrKTsKIH0KIAotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpvbWFwX3J0YyIpOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9ydGNfZHJpdmVyID0gewogCS5yZW1vdmUJCT0gX19leGl0X3Aob21hcF9ydGNfcmVtb3ZlKSwKIAkuc2h1dGRvd24JPSBvbWFwX3J0Y19zaHV0ZG93biwKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkJLm5hbWUJPSAib21hcF9ydGMiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLnBtCT0gJm9tYXBfcnRjX3BtX29wcywKIAkJLm9mX21hdGNoX3RhYmxlID0gb21hcF9ydGNfb2ZfbWF0Y2gsCiAJfSwKLQkuaWRfdGFibGUJPSBvbWFwX3J0Y19kZXZ0eXBlLAorCS5pZF90YWJsZQk9IG9tYXBfcnRjX2lkX3RhYmxlLAogfTsKIAogbW9kdWxlX3BsYXRmb3JtX2RyaXZlcl9wcm9iZShvbWFwX3J0Y19kcml2ZXIsIG9tYXBfcnRjX3Byb2JlKTsKIAorTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpvbWFwX3J0YyIpOwogTU9EVUxFX0FVVEhPUigiR2VvcmdlIEcuIERhdmlzIChhbmQgb3RoZXJzKSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKaW5kZXggYzJlZjBhMi4uOTZmYjMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIFBDRjg1NjNfUkVHX1NUMgkJMHgwMQogI2RlZmluZSBQQ0Y4NTYzX0JJVF9BSUUJCSgxIDw8IDEpCiAjZGVmaW5lIFBDRjg1NjNfQklUX0FGCQkoMSA8PCAzKQorI2RlZmluZSBQQ0Y4NTYzX0JJVFNfU1QyX04JKDcgPDwgNSkKIAogI2RlZmluZSBQQ0Y4NTYzX1JFR19TQwkJMHgwMiAvKiBkYXRldGltZSAqLwogI2RlZmluZSBQQ0Y4NTYzX1JFR19NTgkJMHgwMwpAQCAtNDEsNiArNDIsMTMgQEAKIAogI2RlZmluZSBQQ0Y4NTYzX1JFR19DTEtPCTB4MEQgLyogY2xvY2sgb3V0ICovCiAjZGVmaW5lIFBDRjg1NjNfUkVHX1RNUkMJMHgwRSAvKiB0aW1lciBjb250cm9sICovCisjZGVmaW5lIFBDRjg1NjNfVE1SQ19FTkFCTEUJQklUKDcpCisjZGVmaW5lIFBDRjg1NjNfVE1SQ180MDk2CTAKKyNkZWZpbmUgUENGODU2M19UTVJDXzY0CQkxCisjZGVmaW5lIFBDRjg1NjNfVE1SQ18xCQkyCisjZGVmaW5lIFBDRjg1NjNfVE1SQ18xXzYwCTMKKyNkZWZpbmUgUENGODU2M19UTVJDX01BU0sJMworCiAjZGVmaW5lIFBDRjg1NjNfUkVHX1RNUgkJMHgwRiAvKiB0aW1lciAqLwogCiAjZGVmaW5lIFBDRjg1NjNfU0NfTFYJCTB4ODAgLyogbG93IHZvbHRhZ2UgKi8KQEAgLTExOCwyMiArMTI2LDIxIEBACiAKIHN0YXRpYyBpbnQgcGNmODU2M19zZXRfYWxhcm1fbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBib29sIG9uKQogewotCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCXVuc2lnbmVkIGNoYXIgYnVmOwogCWludCBlcnI7CiAKLQllcnIgPSBwY2Y4NTYzX3JlYWRfYmxvY2tfZGF0YShjbGllbnQsIFBDRjg1NjNfUkVHX1NUMiwgMSwgYnVmICsgMSk7CisJZXJyID0gcGNmODU2M19yZWFkX2Jsb2NrX2RhdGEoY2xpZW50LCBQQ0Y4NTYzX1JFR19TVDIsIDEsICZidWYpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJaWYgKG9uKQotCQlidWZbMV0gfD0gUENGODU2M19CSVRfQUlFOworCQlidWYgfD0gUENGODU2M19CSVRfQUlFOwogCWVsc2UKLQkJYnVmWzFdICY9IH5QQ0Y4NTYzX0JJVF9BSUU7CisJCWJ1ZiAmPSB+UENGODU2M19CSVRfQUlFOwogCi0JYnVmWzFdICY9IH5QQ0Y4NTYzX0JJVF9BRjsKLQlidWZbMF0gPSBQQ0Y4NTYzX1JFR19TVDI7CisJYnVmICY9IH4oUENGODU2M19CSVRfQUYgfCBQQ0Y4NTYzX0JJVFNfU1QyX04pOwogCi0JZXJyID0gcGNmODU2M193cml0ZV9ibG9ja19kYXRhKGNsaWVudCwgUENGODU2M19SRUdfU1QyLCAxLCBidWYgKyAxKTsKKwllcnIgPSBwY2Y4NTYzX3dyaXRlX2Jsb2NrX2RhdGEoY2xpZW50LCBQQ0Y4NTYzX1JFR19TVDIsIDEsICZidWYpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHdyaXRlIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlPOwpAQCAtMzM2LDggKzM0Myw4IEBACiAJCV9fZnVuY19fLCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10pOwogCiAJdG0tPnRpbWUudG1fbWluID0gYmNkMmJpbihidWZbMF0gJiAweDdGKTsKLQl0bS0+dGltZS50bV9ob3VyID0gYmNkMmJpbihidWZbMV0gJiAweDdGKTsKLQl0bS0+dGltZS50bV9tZGF5ID0gYmNkMmJpbihidWZbMl0gJiAweDFGKTsKKwl0bS0+dGltZS50bV9ob3VyID0gYmNkMmJpbihidWZbMV0gJiAweDNGKTsKKwl0bS0+dGltZS50bV9tZGF5ID0gYmNkMmJpbihidWZbMl0gJiAweDNGKTsKIAl0bS0+dGltZS50bV93ZGF5ID0gYmNkMmJpbihidWZbM10gJiAweDcpOwogCXRtLT50aW1lLnRtX21vbiA9IC0xOwogCXRtLT50aW1lLnRtX3llYXIgPSAtMTsKQEAgLTM2MSw2ICszNjgsMTQgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXVuc2lnbmVkIGNoYXIgYnVmWzRdOwogCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBhbGFybV90aW1lOworCisJLyogVGhlIGFsYXJtIGhhcyBubyBzZWNvbmRzLCByb3VuZCB1cCB0byBuZWFyZXN0IG1pbnV0ZSAqLworCWlmICh0bS0+dGltZS50bV9zZWMpIHsKKwkJcnRjX3RtX3RvX3RpbWUoJnRtLT50aW1lLCAmYWxhcm1fdGltZSk7CisJCWFsYXJtX3RpbWUgKz0gNjAtdG0tPnRpbWUudG1fc2VjOworCQlydGNfdGltZV90b190bShhbGFybV90aW1lLCAmdG0tPnRpbWUpOworCX0KIAogCWRldl9kYmcoZGV2LCAiJXMsIG1pbj0lZCBob3VyPSVkIHdkYXk9JWQgbWRheT0lZCAiCiAJCSJlbmFibGVkPSVkIHBlbmRpbmc9JWRcbiIsIF9fZnVuY19fLApAQCAtMzgxLDYgKzM5Niw3IEBACiAKIHN0YXRpYyBpbnQgcGNmODU2M19pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CisJZGV2X2RiZyhkZXYsICIlczogZW49JWRcbiIsIF9fZnVuY19fLCBlbmFibGVkKTsKIAlyZXR1cm4gcGNmODU2M19zZXRfYWxhcm1fbW9kZSh0b19pMmNfY2xpZW50KGRldiksICEhZW5hYmxlZCk7CiB9CiAKQEAgLTM5OCw2ICs0MTQsOCBAQAogewogCXN0cnVjdCBwY2Y4NTYzICpwY2Y4NTYzOwogCWludCBlcnI7CisJdW5zaWduZWQgY2hhciBidWY7CisJdW5zaWduZWQgY2hhciBhbG1fcGVuZGluZzsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIApAQCAtNDE1LDYgKzQzMywyMiBAQAogCXBjZjg1NjMtPmNsaWVudCA9IGNsaWVudDsKIAlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZjbGllbnQtPmRldiwgMSk7CiAKKwkvKiBTZXQgdGltZXIgdG8gbG93ZXN0IGZyZXF1ZW5jeSB0byBzYXZlIHBvd2VyIChyZWYgSGFveXUgZGF0YXNoZWV0KSAqLworCWJ1ZiA9IFBDRjg1NjNfVE1SQ18xXzYwOworCWVyciA9IHBjZjg1NjNfd3JpdGVfYmxvY2tfZGF0YShjbGllbnQsIFBDRjg1NjNfUkVHX1RNUkMsIDEsICZidWYpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHdyaXRlIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gcGNmODU2M19nZXRfYWxhcm1fbW9kZShjbGllbnQsIE5VTEwsICZhbG1fcGVuZGluZyk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVhZCBlcnJvclxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoYWxtX3BlbmRpbmcpCisJCXBjZjg1NjNfc2V0X2FsYXJtX21vZGUoY2xpZW50LCAwKTsKKwogCXBjZjg1NjMtPnJ0YyA9IGRldm1fcnRjX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYsCiAJCQkJcGNmODU2M19kcml2ZXIuZHJpdmVyLm5hbWUsCiAJCQkJJnBjZjg1NjNfcnRjX29wcywgVEhJU19NT0RVTEUpOwpAQCAtNDM1LDYgKzQ2OSw5IEBACiAKIAl9CiAKKwkvKiB0aGUgcGNmODU2MyBhbGFybSBvbmx5IHN1cHBvcnRzIGEgbWludXRlIGFjY3VyYWN5ICovCisJcGNmODU2My0+cnRjLT51aWVfdW5zdXBwb3J0ZWQgPSAxOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zaXJmc29jLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2lyZnNvYy5jCmluZGV4IDc2ZTM4MDA3Yi4uZDJhYzY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNpcmZzb2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2lyZnNvYy5jCkBAIC00Nyw2ICs0Nyw3IEBACiAJdW5zaWduZWQJCWlycV93YWtlOwogCS8qIE92ZXJmbG93IGZvciBldmVyeSA4IHllYXJzIGV4dHJhIHRpbWUgKi8KIAl1MzIJCQlvdmVyZmxvd19ydGM7CisJc3BpbmxvY2tfdAkJbG9jazsKICNpZmRlZiBDT05GSUdfUE0KIAl1MzIJCXNhdmVkX2NvdW50ZXI7CiAJdTMyCQlzYXZlZF9vdmVyZmxvd19ydGM7CkBAIC02MSw3ICs2Miw3IEBACiAKIAlydGNkcnYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc3Bpbl9sb2NrX2lycSgmcnRjZHJ2LT5sb2NrKTsKIAogCXJ0Y19jb3VudCA9IHNpcmZzb2NfcnRjX2lvYnJnX3JlYWRsKHJ0Y2Rydi0+cnRjX2Jhc2UgKyBSVENfQ04pOwogCkBAIC04NCw3ICs4NSw4IEBACiAJaWYgKHNpcmZzb2NfcnRjX2lvYnJnX3JlYWRsKAogCQkJcnRjZHJ2LT5ydGNfYmFzZSArIFJUQ19TVEFUVVMpICYgU0lSRlNPQ19SVENfQUwwRSkKIAkJYWxybS0+ZW5hYmxlZCA9IDE7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNkcnYtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05OSw3ICsxMDEsNyBAQAogCWlmIChhbHJtLT5lbmFibGVkKSB7CiAJCXJ0Y190bV90b190aW1lKCYoYWxybS0+dGltZSksICZydGNfYWxhcm0pOwogCi0JCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCXNwaW5fbG9ja19pcnEoJnJ0Y2Rydi0+bG9jayk7CiAKIAkJcnRjX3N0YXR1c19yZWcgPSBzaXJmc29jX3J0Y19pb2JyZ19yZWFkbCgKIAkJCQlydGNkcnYtPnJ0Y19iYXNlICsgUlRDX1NUQVRVUyk7CkBAIC0xMjMsMTQgKzEyNSwxNSBAQAogCQlydGNfc3RhdHVzX3JlZyB8PSBTSVJGU09DX1JUQ19BTDBFOwogCQlzaXJmc29jX3J0Y19pb2JyZ193cml0ZWwoCiAJCQlydGNfc3RhdHVzX3JlZywgcnRjZHJ2LT5ydGNfYmFzZSArIFJUQ19TVEFUVVMpOwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZydGNkcnYtPmxvY2spOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIGlmIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoIGVuYWJsZWQ9MAogCQkgKiB0aGVuIGl0IGNvdWxkIG1lYW4gdGhhdCB0aGUgYXBwbGljYXRpb24gaXMKIAkJICogdHJ5aW5nIHRvIGNhbmNlbCBhbiBvbmdvaW5nIGFsYXJtCiAJCSAqLwotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlzcGluX2xvY2tfaXJxKCZydGNkcnYtPmxvY2spOwogCiAJCXJ0Y19zdGF0dXNfcmVnID0gc2lyZnNvY19ydGNfaW9icmdfcmVhZGwoCiAJCQkJcnRjZHJ2LT5ydGNfYmFzZSArIFJUQ19TVEFUVVMpOwpAQCAtMTQ2LDcgKzE0OSw3IEBACiAJCQkJCXJ0Y2Rydi0+cnRjX2Jhc2UgKyBSVENfU1RBVFVTKTsKIAkJfQogCi0JCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZydGNkcnYtPmxvY2spOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjA5LDEyICsyMTIsMzggQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgc2lyZnNvY19ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXVuc2lnbmVkIGxvbmcgcnRjX3N0YXR1c19yZWcgPSAweDA7CisJc3RydWN0IHNpcmZzb2NfcnRjX2RydiAqcnRjZHJ2OworCisJcnRjZHJ2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzcGluX2xvY2tfaXJxKCZydGNkcnYtPmxvY2spOworCisJcnRjX3N0YXR1c19yZWcgPSBzaXJmc29jX3J0Y19pb2JyZ19yZWFkbCgKKwkJCQlydGNkcnYtPnJ0Y19iYXNlICsgUlRDX1NUQVRVUyk7CisJaWYgKGVuYWJsZWQpCisJCXJ0Y19zdGF0dXNfcmVnIHw9IFNJUkZTT0NfUlRDX0FMMEU7CisJZWxzZQorCQlydGNfc3RhdHVzX3JlZyAmPSB+U0lSRlNPQ19SVENfQUwwRTsKKworCXNpcmZzb2NfcnRjX2lvYnJnX3dyaXRlbChydGNfc3RhdHVzX3JlZywgcnRjZHJ2LT5ydGNfYmFzZSArIFJUQ19TVEFUVVMpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNkcnYtPmxvY2spOworCisJcmV0dXJuIDA7CisKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHNpcmZzb2NfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lID0gc2lyZnNvY19ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZSA9IHNpcmZzb2NfcnRjX3NldF90aW1lLAogCS5yZWFkX2FsYXJtID0gc2lyZnNvY19ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtID0gc2lyZnNvY19ydGNfc2V0X2FsYXJtLAotCS5pb2N0bCA9IHNpcmZzb2NfcnRjX2lvY3RsCisJLmlvY3RsID0gc2lyZnNvY19ydGNfaW9jdGwsCisJLmFsYXJtX2lycV9lbmFibGUgPSBzaXJmc29jX3J0Y19hbGFybV9pcnFfZW5hYmxlCiB9OwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2lyZnNvY19ydGNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcGRhdGEpCkBAIC0yMjMsNiArMjUyLDggQEAKIAl1bnNpZ25lZCBsb25nIHJ0Y19zdGF0dXNfcmVnID0gMHgwOwogCXVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMHgwOwogCisJc3Bpbl9sb2NrKCZydGNkcnYtPmxvY2spOworCiAJcnRjX3N0YXR1c19yZWcgPSBzaXJmc29jX3J0Y19pb2JyZ19yZWFkbChydGNkcnYtPnJ0Y19iYXNlICsgUlRDX1NUQVRVUyk7CiAJLyogdGhpcyBiaXQgd2lsbCBiZSBzZXQgT05MWSBpZiBhbiBhbGFybSB3YXMgYWN0aXZlCiAJICogYW5kIGl0IGV4cGlyZWQgTk9XCkBAIC0yNDAsNiArMjcxLDkgQEAKIAkJcnRjX3N0YXR1c19yZWcgJj0gfihTSVJGU09DX1JUQ19BTDBFKTsKIAl9CiAJc2lyZnNvY19ydGNfaW9icmdfd3JpdGVsKHJ0Y19zdGF0dXNfcmVnLCBydGNkcnYtPnJ0Y19iYXNlICsgUlRDX1NUQVRVUyk7CisKKwlzcGluX3VubG9jaygmcnRjZHJ2LT5sb2NrKTsKKwogCS8qIHRoaXMgc2hvdWxkIHdha2UgdXAgYW55IGFwcHMgcG9sbGluZy93YWl0aW5nIG9uIHRoZSByZWFkCiAJICogYWZ0ZXIgc2V0dGluZyB0aGUgYWxhcm0KIAkgKi8KQEAgLTI2Nyw2ICszMDEsOCBAQAogCWlmIChydGNkcnYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlzcGluX2xvY2tfaW5pdCgmcnRjZHJ2LT5sb2NrKTsKKwogCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicmVnIiwgJnJ0Y2Rydi0+cnRjX2Jhc2UpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGZpbmQgYmFzZSBhZGRyZXNzIG9mIHJ0YyBub2RlIGluIGR0YlxuIik7CkBAIC0yODYsMTQgKzMyMiw2IEBACiAJcnRjX2RpdiA9ICgoMzI3NjggLyBSVENfSFopIC8gMikgLSAxOwogCXNpcmZzb2NfcnRjX2lvYnJnX3dyaXRlbChydGNfZGl2LCBydGNkcnYtPnJ0Y19iYXNlICsgUlRDX0RJVik7CiAKLQlydGNkcnYtPnJ0YyA9IGRldm1fcnRjX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCBwZGV2LT5uYW1lLAotCQkJJnNpcmZzb2NfcnRjX29wcywgVEhJU19NT0RVTEUpOwotCWlmIChJU19FUlIocnRjZHJ2LT5ydGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIocnRjZHJ2LT5ydGMpOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZWdpc3RlciBSVEMgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KIAkvKiAweDMgLT4gUlRDX0NMSyAqLwogCXNpcmZzb2NfcnRjX2lvYnJnX3dyaXRlbChTSVJGU09DX1JUQ19DTEssCiAJCQlydGNkcnYtPnJ0Y19iYXNlICsgUlRDX0NMT0NLX1NXSVRDSCk7CkBAIC0zMDgsNiArMzM2LDE0IEBACiAJcnRjZHJ2LT5vdmVyZmxvd19ydGMgPQogCQlzaXJmc29jX3J0Y19pb2JyZ19yZWFkbChydGNkcnYtPnJ0Y19iYXNlICsgUlRDX1NXX1ZBTFVFKTsKIAorCXJ0Y2Rydi0+cnRjID0gZGV2bV9ydGNfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHBkZXYtPm5hbWUsCisJCQkmc2lyZnNvY19ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGNkcnYtPnJ0YykpIHsKKwkJZXJyID0gUFRSX0VSUihydGNkcnYtPnJ0Yyk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlZ2lzdGVyIFJUQyBkZXZpY2VcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwogCXJ0Y2Rydi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKAogCQkJJnBkZXYtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zbnZzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc252cy5jCmluZGV4IGZhMzg0ZmUuLjJjZDhmZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zbnZzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNudnMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAvKiBUaGVzZSByZWdpc3RlciBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byBMUCAoTG93IFBvd2VyKSByYW5nZSAqLwogI2RlZmluZSBTTlZTX0xQQ1IJCTB4MDQKQEAgLTM5LDYgKzQwLDcgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKIAlpbnQgaXJxOwogCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgY2xrICpjbGs7CiB9OwogCiBzdGF0aWMgdTMyIHJ0Y19yZWFkX2xwX2NvdW50ZXIodm9pZCBfX2lvbWVtICppb2FkZHIpCkBAIC0yNjAsNiArMjYyLDE4IEBACiAJaWYgKGRhdGEtPmlycSA8IDApCiAJCXJldHVybiBkYXRhLT5pcnE7CiAKKwlkYXRhLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInNudnMtcnRjIik7CisJaWYgKElTX0VSUihkYXRhLT5jbGspKSB7CisJCWRhdGEtPmNsayA9IE5VTEw7CisJfSBlbHNlIHsKKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRhdGEtPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiQ291bGQgbm90IHByZXBhcmUgb3IgZW5hYmxlIHRoZSBzbnZzIGNsb2NrXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAogCXNwaW5fbG9ja19pbml0KCZkYXRhLT5sb2NrKTsKQEAgLTI4MCw3ICsyOTQsNyBAQAogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxuIiwKIAkJCWRhdGEtPmlycSwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJvcl9ydGNfZGV2aWNlX3JlZ2lzdGVyOwogCX0KIAogCWRhdGEtPnJ0YyA9IGRldm1fcnRjX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCBwZGV2LT5uYW1lLApAQCAtMjg4LDEwICszMDIsMTYgQEAKIAlpZiAoSVNfRVJSKGRhdGEtPnJ0YykpIHsKIAkJcmV0ID0gUFRSX0VSUihkYXRhLT5ydGMpOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcnRjOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJvcl9ydGNfZGV2aWNlX3JlZ2lzdGVyOwogCX0KIAogCXJldHVybiAwOworCitlcnJvcl9ydGNfZGV2aWNlX3JlZ2lzdGVyOgorCWlmIChkYXRhLT5jbGspCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLT5jbGspOworCisJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUApAQCAtMzAyLDIxICszMjIsMzQgQEAKIAlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKIAkJZW5hYmxlX2lycV93YWtlKGRhdGEtPmlycSk7CiAKKwlpZiAoZGF0YS0+Y2xrKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZGF0YS0+Y2xrKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNudnNfcnRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNudnNfcnRjX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OwogCiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCWRpc2FibGVfaXJxX3dha2UoZGF0YS0+aXJxKTsKIAorCWlmIChkYXRhLT5jbGspIHsKKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRhdGEtPmNsayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwogCXJldHVybiAwOwogfQogI2VuZGlmCiAKLXN0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhzbnZzX3J0Y19wbV9vcHMsIHNudnNfcnRjX3N1c3BlbmQsIHNudnNfcnRjX3Jlc3VtZSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc252c19ydGNfcG1fb3BzID0geworCS5zdXNwZW5kX25vaXJxID0gc252c19ydGNfc3VzcGVuZCwKKwkucmVzdW1lX25vaXJxID0gc252c19ydGNfcmVzdW1lLAorfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc252c19kdF9pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1tb24tcnRjLWxwIiwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9kZXYuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9kZXYuYwppbmRleCAwYzUxNzYxLi40M2NlZTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZGV2LmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Rldi5jCkBAIC0xMzYsOCArMTM2LDcgQEAKIAlpZiAocmMpCiAJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCi0JcHJfZGVidWcoIm9wZW4gZmlsZSAnL2Rldi8lcycgd2l0aCByZXR1cm4gY29kZSAlZFxuIiwKLQkJIGZwLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUsIHJjKTsKKwlwcl9kZWJ1Zygib3BlbiBmaWxlICcvZGV2LyVwRCcgd2l0aCByZXR1cm4gY29kZSAlZFxuIiwgZnAsIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE0Niw3ICsxNDUsNyBAQAogICovCiBzdGF0aWMgaW50IGhtY2Rydl9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZnApCiB7Ci0JcHJfZGVidWcoImNsb3NpbmcgZmlsZSAnL2Rldi8lcydcbiIsIGZwLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCXByX2RlYnVnKCJjbG9zaW5nIGZpbGUgJy9kZXYvJXBEJ1xuIiwgZnApOwogCWtmcmVlKGZwLT5wcml2YXRlX2RhdGEpOwogCWZwLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCWhtY2Rydl9mdHBfc2h1dGRvd24oKTsKQEAgLTIzMSw4ICsyMzAsOCBAQAogCXJldGxlbiA9IGhtY2Rydl9kZXZfdHJhbnNmZXIoKGNoYXIgKikgZnAtPnByaXZhdGVfZGF0YSwKIAkJCQkgICAgICpwb3MsIHVidWYsIGxlbik7CiAKLQlwcl9kZWJ1ZygicmVhZCBmcm9tIGZpbGUgJy9kZXYvJXMnIGF0ICVsbGQgcmV0dXJucyAlemQvJXp1XG4iLAotCQkgZnAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwgKGxvbmcgbG9uZykgKnBvcywgcmV0bGVuLCBsZW4pOworCXByX2RlYnVnKCJyZWFkIGZyb20gZmlsZSAnL2Rldi8lcEQnIGF0ICVsbGQgcmV0dXJucyAlemQvJXp1XG4iLAorCQkgZnAsIChsb25nIGxvbmcpICpwb3MsIHJldGxlbiwgbGVuKTsKIAogCWlmIChyZXRsZW4gPiAwKQogCQkqcG9zICs9IHJldGxlbjsKQEAgLTI0OCw4ICsyNDcsOCBAQAogewogCXNzaXplX3QgcmV0bGVuOwogCi0JcHJfZGVidWcoIndyaXRpbmcgZmlsZSAnL2Rldi8lcycgYXQgcG9zLiAlbGxkIHdpdGggbGVuZ3RoICV6ZFxuIiwKLQkJIGZwLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUsIChsb25nIGxvbmcpICpwb3MsIGxlbik7CisJcHJfZGVidWcoIndyaXRpbmcgZmlsZSAnL2Rldi8lcEQnIGF0IHBvcy4gJWxsZCB3aXRoIGxlbmd0aCAlemRcbiIsCisJCSBmcCwgKGxvbmcgbG9uZykgKnBvcywgbGVuKTsKIAogCWlmICghZnAtPnByaXZhdGVfZGF0YSkgeyAvKiBmaXJzdCBleHBlY3QgYSBjbWQgd3JpdGUgKi8KIAkJZnAtPnByaXZhdGVfZGF0YSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CkBAIC0yNzIsOCArMjcxLDcgQEAKIAlpZiAocmV0bGVuID4gMCkKIAkJKnBvcyArPSByZXRsZW47CiAKLQlwcl9kZWJ1Zygid3JpdGUgdG8gZmlsZSAnL2Rldi8lcycgcmV0dXJuZWQgJXpkXG4iLAotCQkgZnAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwgcmV0bGVuKTsKKwlwcl9kZWJ1Zygid3JpdGUgdG8gZmlsZSAnL2Rldi8lcEQnIHJldHVybmVkICV6ZFxuIiwgZnAsIHJldGxlbik7CiAKIAlyZXR1cm4gcmV0bGVuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggODAwNGIwNy4uMDFhNzMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC0zNTMsOSArMzUzLDExIEBACiAJYWRhcHRlci0+Y2N3X2RldmljZSA9IGNjd19kZXZpY2U7CiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnN0YXRfd29yaywgX3pmY3Bfc3RhdHVzX3JlYWRfc2NoZWR1bGVyKTsKLQlJTklUX1dPUksoJmFkYXB0ZXItPnNjYW5fd29yaywgemZjcF9mY19zY2FuX3BvcnRzKTsKKwlJTklUX0RFTEFZRURfV09SSygmYWRhcHRlci0+c2Nhbl93b3JrLCB6ZmNwX2ZjX3NjYW5fcG9ydHMpOwogCUlOSVRfV09SSygmYWRhcHRlci0+bnNfdXBfd29yaywgemZjcF9mY19zeW1fbmFtZV91cGRhdGUpOwogCisJYWRhcHRlci0+bmV4dF9wb3J0X3NjYW4gPSBqaWZmaWVzOworCiAJaWYgKHpmY3BfcWRpb19zZXR1cChhZGFwdGVyKSkKIAkJZ290byBmYWlsZWQ7CiAKQEAgLTQyMCw3ICs0MjIsNyBAQAogewogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2ID0gYWRhcHRlci0+Y2N3X2RldmljZTsKIAotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNjYW5fd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhZGFwdGVyLT5zY2FuX3dvcmspOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnN0YXRfd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bnNfdXBfd29yayk7CiAJemZjcF9kZXN0cm95X2FkYXB0ZXJfd29ya19xdWV1ZShhZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IGY5ODc5ZDQuLjU0YzdiNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtNTYsOCArNTYsMjIgQEAKIAl6ZmNwX2VycF9zZXRfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpOwogCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAogCQkJCXRhZyk7CisKKwkvKgorCSAqIFdlIHdhbnQgdG8gc2NhbiBwb3J0cyBoZXJlLCB3aXRoIHNvbWUgcmFuZG9tIGJhY2tvZmYgYW5kIHdpdGhvdXQKKwkgKiByYXRlIGxpbWl0LiBSZWNvdmVyeSBoYXMgYWxyZWFkeSBzY2hlZHVsZWQgYSBwb3J0IHNjYW4gZm9yIHVzLAorCSAqIGJ1dCB3aXRoIGJvdGggcmFuZG9tIGRlbGF5IGFuZCByYXRlIGxpbWl0LiBOZXZlcnRoZWxlc3Mgd2UgZ2V0CisJICogd2hhdCB3ZSB3YW50IGhlcmUgYnkgZmx1c2hpbmcgdGhlIHNjaGVkdWxlZCB3b3JrIGFmdGVyIHNsZWVwaW5nCisJICogYW4gZXF1aXZhbGVudCByYW5kb20gdGltZS4KKwkgKiBMZXQgdGhlIHBvcnQgc2NhbiByYW5kb20gZGVsYXkgZWxhcHNlIGZpcnN0LiBJZiByZWNvdmVyeSBmaW5pc2hlcworCSAqIHVwIHRvIHRoYXQgcG9pbnQgaW4gdGltZSwgdGhhdCB3b3VsZCBiZSBwZXJmZWN0IGZvciBib3RoIHJlY292ZXJ5CisJICogYW5kIHBvcnQgc2Nhbi4gSWYgbm90LCBpLmUuIHJlY292ZXJ5IHRha2VzIGFnZXMsIHRoZXJlIHdhcyBubworCSAqIHBvaW50IGluIHdhaXRpbmcgYSByYW5kb20gZGVsYXkgb24gdG9wIG9mIHRoZSB0aW1lIGNvbnN1bWVkIGJ5CisJICogcmVjb3ZlcnkuCisJICovCisJbXNsZWVwKHpmY3BfZmNfcG9ydF9zY2FuX2JhY2tvZmYoKSk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKLQlmbHVzaF93b3JrKCZhZGFwdGVyLT5zY2FuX3dvcmspOyAvKiBvayB0byBjYWxsIGV2ZW4gaWYgbm90aGluZyBxdWV1ZWQgKi8KKwlmbHVzaF9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPnNjYW5fd29yayk7CiAKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIApAQCAtMTYyLDExICsxNzYsMTkgQEAKIAlhZGFwdGVyLT5yZXFfbm8gPSAwOwogCiAJemZjcF9jY3dfYWN0aXZhdGUoY2RldiwgMCwgImNjc29ubDEiKTsKLQkvKiBzY2FuIGZvciByZW1vdGUgcG9ydHMKLQkgICBlaXRoZXIgYXQgdGhlIGVuZCBvZiBhbnkgc3VjY2Vzc2Z1bCBhZGFwdGVyIHJlY292ZXJ5Ci0JICAgb3Igb25seSBhZnRlciB0aGUgYWRhcHRlciByZWNvdmVyeSBmb3Igc2V0dGluZyBhIGRldmljZSBvbmxpbmUgKi8KKworCS8qCisJICogV2Ugd2FudCB0byBzY2FuIHBvcnRzIGhlcmUsIGFsd2F5cywgd2l0aCBzb21lIHJhbmRvbSBkZWxheSBhbmQKKwkgKiB3aXRob3V0IHJhdGUgbGltaXQgLSBiYXNpY2FsbHkgd2hhdCB6ZmNwX2Njd19hY3RpdmF0ZSgpIGhhcworCSAqIGFjaGlldmVkIGZvciB1cy4gTm90IHF1aXRlISBUaGF0IHBvcnQgc2NhbiBkZXBlbmRlZCBvbgorCSAqICFub19hdXRvX3BvcnRfcmVzY2FuLiBTbyBsZXQncyBjb3ZlciB0aGUgbm9fYXV0b19wb3J0X3Jlc2NhbgorCSAqIGNhc2UgaGVyZSB0byBtYWtlIHN1cmUgYSBwb3J0IHNjYW4gaXMgZG9uZSB1bmNvbmRpdGlvbmFsbHkuCisJICogU2luY2UgemZjcF9jY3dfYWN0aXZhdGUoKSBoYXMgd2FpdGVkIHRoZSBkZXNpcmVkIHJhbmRvbSB0aW1lLAorCSAqIHdlIGNhbiBpbW1lZGlhdGVseSBzY2hlZHVsZSBhbmQgZmx1c2ggYSBwb3J0IHNjYW4gZm9yIHRoZQorCSAqIHJlbWFpbmluZyBjYXNlcy4KKwkgKi8KIAl6ZmNwX2ZjX2ludmVyc2VfY29uZGl0aW9uYWxfcG9ydF9zY2FuKGFkYXB0ZXIpOwotCWZsdXNoX3dvcmsoJmFkYXB0ZXItPnNjYW5fd29yayk7IC8qIG9rIHRvIGNhbGwgZXZlbiBpZiBub3RoaW5nIHF1ZXVlZCAqLworCWZsdXNoX2RlbGF5ZWRfd29yaygmYWRhcHRlci0+c2Nhbl93b3JrKTsKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IGQ5MTE3M2YuLmI4ZTg1M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtMTg2LDEyICsxODYsMTMgQEAKIAlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzICpmY19zdGF0czsKIAlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3BvcnQgKnN0YXRzX3Jlc2V0X2RhdGE7CiAJdW5zaWduZWQgbG9uZwkJc3RhdHNfcmVzZXQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXNjYW5fd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCXNjYW5fd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbnNfdXBfd29yazsKIAlzdHJ1Y3Qgc2VydmljZV9sZXZlbAlzZXJ2aWNlX2xldmVsOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrX3F1ZXVlOwogCXN0cnVjdCBkZXZpY2VfZG1hX3BhcmFtZXRlcnMgZG1hX3Bhcm1zOwogCXN0cnVjdCB6ZmNwX2ZjX2V2ZW50cyBldmVudHM7CisJdW5zaWduZWQgbG9uZwkJbmV4dF9wb3J0X3NjYW47CiB9OwogCiBzdHJ1Y3QgemZjcF9wb3J0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCmluZGV4IGM4MmZlNjUuLjJjNWQ0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwpAQCAtODIxLDExICs4MjEsNiBAQAogCXJldHVybiBaRkNQX0VSUF9DT05USU5VRVM7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xlYXJzdGF0aShzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQotewotCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVELCAmcG9ydC0+c3RhdHVzKTsKLX0KLQogc3RhdGljIGludCB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9zdHJhdGVneShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OwpAQCAtODMzLDcgKzgyOCw2IEBACiAKIAlzd2l0Y2ggKGVycF9hY3Rpb24tPnN0ZXApIHsKIAljYXNlIFpGQ1BfRVJQX1NURVBfVU5JTklUSUFMSVpFRDoKLQkJemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbGVhcnN0YXRpKHBvcnQpOwogCQlpZiAoKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX1BPUlRfUEhZU19PUEVOKSAmJgogCQkgICAgKHN0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKSkKIAkJCXJldHVybiB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9zdHJhdGVneV9jbG9zZShlcnBfYWN0aW9uKTsKQEAgLTkzMyw3ICs5MjcsNiBAQAogCiAJc3dpdGNoIChlcnBfYWN0aW9uLT5zdGVwKSB7CiAJY2FzZSBaRkNQX0VSUF9TVEVQX1VOSU5JVElBTElaRUQ6Ci0JCXpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xlYXJzdGF0aShwb3J0KTsKIAkJaWYgKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCiAJCQlyZXR1cm4gemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbG9zZShlcnBfYWN0aW9uKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAppbmRleCBhOWM1NzBhLi41YjUwMDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKQEAgLTg1LDYgKzg1LDcgQEAKIGV4dGVybiBpbnQgemZjcF9mY19leGVjX2JzZ19qb2Ioc3RydWN0IGZjX2JzZ19qb2IgKik7CiBleHRlcm4gaW50IHpmY3BfZmNfdGltZW91dF9ic2dfam9iKHN0cnVjdCBmY19ic2dfam9iICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19zeW1fbmFtZV91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICopOworZXh0ZXJuIHVuc2lnbmVkIGludCB6ZmNwX2ZjX3BvcnRfc2Nhbl9iYWNrb2ZmKHZvaWQpOwogZXh0ZXJuIHZvaWQgemZjcF9mY19jb25kaXRpb25hbF9wb3J0X3NjYW4oc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfaW52ZXJzZV9jb25kaXRpb25hbF9wb3J0X3NjYW4oc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCmluZGV4IGNhMjhlMWMuLjI1ZDQ5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8c2NzaS9mYy9mY19lbHMuaD4KICNpbmNsdWRlIDxzY3NpL2xpYmZjLmg+CiAjaW5jbHVkZSAiemZjcF9leHQuaCIKQEAgLTMxLDEyICszMiw1NCBAQAogTU9EVUxFX1BBUk1fREVTQyhub19hdXRvX3BvcnRfcmVzY2FuLAogCQkgIm5vIGF1dG9tYXRpYyBwb3J0X3Jlc2NhbiAoZGVmYXVsdCBvZmYpIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydF9zY2FuX2JhY2tvZmYgPSA1MDA7Cittb2R1bGVfcGFyYW0ocG9ydF9zY2FuX2JhY2tvZmYsIHVpbnQsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhwb3J0X3NjYW5fYmFja29mZiwKKwkidXBwZXIgbGltaXQgb2YgcG9ydCBzY2FuIHJhbmRvbSBiYWNrb2ZmIGluIG1zZWNzIChkZWZhdWx0IDUwMCkiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBwb3J0X3NjYW5fcmF0ZWxpbWl0ID0gNjAwMDA7Cittb2R1bGVfcGFyYW0ocG9ydF9zY2FuX3JhdGVsaW1pdCwgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnRfc2Nhbl9yYXRlbGltaXQsCisJIm1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBwb3J0IHNjYW5zIGluIG1zZWNzIChkZWZhdWx0IDYwMDAwKSIpOworCit1bnNpZ25lZCBpbnQgemZjcF9mY19wb3J0X3NjYW5fYmFja29mZih2b2lkKQoreworCWlmICghcG9ydF9zY2FuX2JhY2tvZmYpCisJCXJldHVybiAwOworCXJldHVybiBnZXRfcmFuZG9tX2ludCgpICUgcG9ydF9zY2FuX2JhY2tvZmY7Cit9CisKK3N0YXRpYyB2b2lkIHpmY3BfZmNfcG9ydF9zY2FuX3RpbWUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhwb3J0X3NjYW5fcmF0ZWxpbWl0KTsKKwl1bnNpZ25lZCBsb25nIGJhY2tvZmYgPSBtc2Vjc190b19qaWZmaWVzKHpmY3BfZmNfcG9ydF9zY2FuX2JhY2tvZmYoKSk7CisKKwlhZGFwdGVyLT5uZXh0X3BvcnRfc2NhbiA9IGppZmZpZXMgKyBpbnRlcnZhbCArIGJhY2tvZmY7Cit9CisKK3N0YXRpYyB2b2lkIHpmY3BfZmNfcG9ydF9zY2FuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgbmV4dCA9IGFkYXB0ZXItPm5leHRfcG9ydF9zY2FuOworCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwLCBtYXg7CisKKwkvKiBkZWxheSBvbmx5IG5lZWRlZCB3aXRoaW4gd2FpdGluZyBwZXJpb2QgKi8KKwlpZiAodGltZV9iZWZvcmUobm93LCBuZXh0KSkgeworCQlkZWxheSA9IG5leHQgLSBub3c7CisJCS8qIHBhcmFub2lhOiBuZXZlciBldmVyIGRlbGF5IHNjYW5zIGxvbmdlciB0aGFuIHNwZWNpZmllZCAqLworCQltYXggPSBtc2Vjc190b19qaWZmaWVzKHBvcnRfc2Nhbl9yYXRlbGltaXQgKyBwb3J0X3NjYW5fYmFja29mZik7CisJCWRlbGF5ID0gbWluKGRlbGF5LCBtYXgpOworCX0KKworCXF1ZXVlX2RlbGF5ZWRfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLCAmYWRhcHRlci0+c2Nhbl93b3JrLCBkZWxheSk7Cit9CisKIHZvaWQgemZjcF9mY19jb25kaXRpb25hbF9wb3J0X3NjYW4oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAobm9fYXV0b19wb3J0X3Jlc2NhbikKIAkJcmV0dXJuOwogCi0JcXVldWVfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLCAmYWRhcHRlci0+c2Nhbl93b3JrKTsKKwl6ZmNwX2ZjX3BvcnRfc2NhbihhZGFwdGVyKTsKIH0KIAogdm9pZCB6ZmNwX2ZjX2ludmVyc2VfY29uZGl0aW9uYWxfcG9ydF9zY2FuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC00NCw3ICs4Nyw3IEBACiAJaWYgKCFub19hdXRvX3BvcnRfcmVzY2FuKQogCQlyZXR1cm47CiAKLQlxdWV1ZV93b3JrKGFkYXB0ZXItPndvcmtfcXVldWUsICZhZGFwdGVyLT5zY2FuX3dvcmspOworCXpmY3BfZmNfcG9ydF9zY2FuKGFkYXB0ZXIpOwogfQogCiAvKioKQEAgLTY4MCwxMiArNzIzLDE1IEBACiAgKi8KIHZvaWQgemZjcF9mY19zY2FuX3BvcnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZmNwX2FkYXB0ZXIsCisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHcgPSB0b19kZWxheWVkX3dvcmsod29yayk7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZihkdywgc3RydWN0IHpmY3BfYWRhcHRlciwKIAkJCQkJCSAgICBzY2FuX3dvcmspOwogCWludCByZXQsIGk7CiAJc3RydWN0IHpmY3BfZmNfcmVxICpmY19yZXE7CiAJaW50IGNoYWluLCBtYXhfZW50cmllcywgYnVmX251bSwgbWF4X2J5dGVzOwogCisJemZjcF9mY19wb3J0X3NjYW5fdGltZShhZGFwdGVyKTsKKwogCWNoYWluID0gYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0VMU19DVF9DSEFJTkVEX1NCQUxTOwogCWJ1Zl9udW0gPSBjaGFpbiA/IFpGQ1BfRkNfR1BOX0ZUX05VTV9CVUZTIDogMTsKIAltYXhfZW50cmllcyA9IGNoYWluID8gWkZDUF9GQ19HUE5fRlRfTUFYX0VOVCA6IFpGQ1BfRkNfR1BOX0ZUX0VOVF9QQUdFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5oCmluZGV4IGIxZDIwMjQuLmRmMmI1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmgKQEAgLTIxMiw4ICsyMTIsNiBAQAogdm9pZCB6ZmNwX2ZjX3Njc2lfdG9fZmNwKHN0cnVjdCBmY3BfY21uZCAqZmNwLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpLAogCQkJIHU4IHRtX2ZsYWdzKQogewotCWNoYXIgdGFnWzJdOwotCiAJaW50X3RvX3Njc2lsdW4oc2NzaS0+ZGV2aWNlLT5sdW4sIChzdHJ1Y3Qgc2NzaV9sdW4gKikgJmZjcC0+ZmNfbHVuKTsKIAogCWlmICh1bmxpa2VseSh0bV9mbGFncykpIHsKQEAgLTIyMSwxNyArMjE5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coc2NzaSwgdGFnKSkgewotCQlzd2l0Y2ggKHRhZ1swXSkgewotCQljYXNlIE1TR19PUkRFUkVEX1RBRzoKLQkJCWZjcC0+ZmNfcHJpX3RhIHw9IEZDUF9QVEFfT1JERVJFRDsKLQkJCWJyZWFrOwotCQljYXNlIE1TR19TSU1QTEVfVEFHOgotCQkJZmNwLT5mY19wcmlfdGEgfD0gRkNQX1BUQV9TSU1QTEU7Ci0JCQlicmVhazsKLQkJfTsKLQl9IGVsc2UKLQkJZmNwLT5mY19wcmlfdGEgPSBGQ1BfUFRBX1NJTVBMRTsKKwlmY3AtPmZjX3ByaV90YSA9IEZDUF9QVEFfU0lNUExFOwogCiAJaWYgKHNjc2ktPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKIAkJZmNwLT5mY19mbGFncyB8PSBGQ1BfQ0ZMX1JEREFUQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IDBmZThkNWQuLjIxZWM1ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtMTM5Niw4ICsxMzk2LDcgQEAKIAkJcG9ydC0+aGFuZGxlID0gaGVhZGVyLT5wb3J0X2hhbmRsZTsKIAkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOIHwKIAkJCQlaRkNQX1NUQVRVU19QT1JUX1BIWVNfT1BFTiwgJnBvcnQtPnN0YXR1cyk7Ci0JCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVEIHwKLQkJICAgICAgICAgICAgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCwKKwkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCwKIAkJICAgICAgICAgICAgICAgICAgJnBvcnQtPnN0YXR1cyk7CiAJCS8qIGNoZWNrIHdoZXRoZXIgRF9JRCBoYXMgY2hhbmdlZCBkdXJpbmcgb3BlbiAqLwogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCA3YjM1MzY0Li43NWY0YmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtMzIsMjUgKzMyLDYgQEAKIG1vZHVsZV9wYXJhbShhbGxvd19sdW5fc2NhbiwgYm9vbCwgMDYwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFsbG93X2x1bl9zY2FuLCAiRm9yIE5QSVYsIHNjYW4gYW5kIGF0dGFjaCBhbGwgc3RvcmFnZSBMVU5zIik7CiAKLXN0YXRpYyBpbnQgemZjcF9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCwKLQkJCQkJaW50IHJlYXNvbikKLXsKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9RRlVMTDoKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIGRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgZGVwdGgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLQogc3RhdGljIHZvaWQgemZjcF9zY3NpX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCXN0cnVjdCB6ZmNwX3Njc2lfZGV2ICp6ZmNwX3NkZXYgPSBzZGV2X3RvX3pmY3Aoc2Rldik7CkBAIC02Niw5ICs0Nyw3IEBACiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCiB7CiAJaWYgKHNkcC0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RwLCBNU0dfU0lNUExFX1RBRywgZGVmYXVsdF9kZXB0aCk7Ci0JZWxzZQotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZHAsIDAsIDEpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZHAsIGRlZmF1bHRfZGVwdGgpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDcsNyArMjg2LDcgQEAKIAkuc2xhdmVfYWxsb2MJCSA9IHpmY3Bfc2NzaV9zbGF2ZV9hbGxvYywKIAkuc2xhdmVfY29uZmlndXJlCSA9IHpmY3Bfc2NzaV9zbGF2ZV9jb25maWd1cmUsCiAJLnNsYXZlX2Rlc3Ryb3kJCSA9IHpmY3Bfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJID0gemZjcF9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCSA9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5wcm9jX25hbWUJCSA9ICJ6ZmNwIiwKIAkuY2FuX3F1ZXVlCQkgPSA0MDk2LAogCS50aGlzX2lkCQkgPSAtMSwKQEAgLTMyMiw2ICszMDEsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJID0gMSwKIAkuc2hvc3RfYXR0cnMJCSA9IHpmY3Bfc3lzZnNfc2hvc3RfYXR0cnMsCiAJLnNkZXZfYXR0cnMJCSA9IHpmY3Bfc3lzZnNfc2Rldl9hdHRycywKKwkudHJhY2tfcXVldWVfZGVwdGgJID0gMSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCmluZGV4IDY3MmI1NzIuLjk2YTBiZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKQEAgLTczLDkgKzczLDcgQEAKIFpGQ1BfREVGSU5FX0FUVFIoemZjcF9wb3J0LCBwb3J0LCBpbl9yZWNvdmVyeSwgIiVkXG4iLAogCQkgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYKIAkJICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFKSAhPSAwKTsKLVpGQ1BfREVGSU5FX0FUVFIoemZjcF9wb3J0LCBwb3J0LCBhY2Nlc3NfZGVuaWVkLCAiJWRcbiIsCi0JCSAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJgotCQkgIFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVEKSAhPSAwKTsKK1pGQ1BfREVGSU5FX0FUVFJfQ09OU1QocG9ydCwgYWNjZXNzX2RlbmllZCwgIiVkXG4iLCAwKTsKIAogWkZDUF9ERUZJTkVfQVRUUih6ZmNwX3VuaXQsIHVuaXQsIHN0YXR1cywgIjB4JTA4eFxuIiwKIAkJIHpmY3BfdW5pdF9zZGV2X3N0YXR1cyh1bml0KSk7CkBAIC0yMjMsOSArMjIxLDEzIEBACiAJaWYgKCFhZGFwdGVyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIHN5bmMgdGhlIHVzZXItc3BhY2UtIHdpdGggdGhlIGtlcm5lbC1pbnZvY2F0aW9uIG9mIHNjYW5fd29yayAqLwotCXF1ZXVlX3dvcmsoYWRhcHRlci0+d29ya19xdWV1ZSwgJmFkYXB0ZXItPnNjYW5fd29yayk7Ci0JZmx1c2hfd29yaygmYWRhcHRlci0+c2Nhbl93b3JrKTsKKwkvKgorCSAqIFVzZXJzIHdpc2ggaXMgb3VyIGNvbW1hbmQ6IGltbWVkaWF0ZWx5IHNjaGVkdWxlIGFuZCBmbHVzaCBhCisJICogd29ya2VyIHRvIGNvbmR1Y3QgYSBzeW5jaHJvbm91cyBwb3J0IHNjYW4sIHRoYXQgaXMsIG5laXRoZXIKKwkgKiBhIHJhbmRvbSBkZWxheSBub3IgYSByYXRlIGxpbWl0IGlzIGFwcGxpZWQgaGVyZS4KKwkgKi8KKwlxdWV1ZV9kZWxheWVkX3dvcmsoYWRhcHRlci0+d29ya19xdWV1ZSwgJmFkYXB0ZXItPnNjYW5fd29yaywgMCk7CisJZmx1c2hfZGVsYXllZF93b3JrKCZhZGFwdGVyLT5zY2FuX3dvcmspOwogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwogCiAJcmV0dXJuIChzc2l6ZV90KSBjb3VudDsKQEAgLTQzOSwxNiArNDQxLDE1IEBACiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CQkJIFwKIAlzdHJ1Y3QgemZjcF9zY3NpX2RldiAqemZjcF9zZGV2ID0gc2Rldl90b196ZmNwKHNkZXYpOwkJIFwKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gemZjcF9zZGV2LT5wb3J0OwkJCSBcCiAJCQkJCQkJCQkgXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgX2Zvcm1hdCwgX3ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHN0YXRpYyBERVZJQ0VfQVRUUihfbmFtZSwgU19JUlVHTywgemZjcF9zeXNmc19zY3NpXyMjX25hbWUjI19zaG93LCBOVUxMKTsKIAogWkZDUF9ERUZJTkVfU0NTSV9BVFRSKGhiYV9pZCwgIiVzXG4iLAotCQkgICAgICBkZXZfbmFtZSgmcG9ydC0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7CisJCSAgICAgIGRldl9uYW1lKCZ6ZmNwX3NkZXYtPnBvcnQtPmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOwogWkZDUF9ERUZJTkVfU0NTSV9BVFRSKHd3cG4sICIweCUwMTZsbHhcbiIsCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBvcnQtPnd3cG4pOworCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB6ZmNwX3NkZXYtPnBvcnQtPnd3cG4pOwogCiBzdGF0aWMgc3NpemVfdCB6ZmNwX3N5c2ZzX3Njc2lfZmNwX2x1bl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNDYwLDYgKzQ2MSw0OSBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGZjcF9sdW4sIFNfSVJVR08sIHpmY3Bfc3lzZnNfc2NzaV9mY3BfbHVuX3Nob3csIE5VTEwpOwogCitaRkNQX0RFRklORV9TQ1NJX0FUVFIoemZjcF9hY2Nlc3NfZGVuaWVkLCAiJWRcbiIsCisJCSAgICAgIChhdG9taWNfcmVhZCgmemZjcF9zZGV2LT5zdGF0dXMpICYKKwkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVEKSAhPSAwKTsKKworc3RhdGljIHNzaXplX3QgemZjcF9zeXNmc19zY3NpX3pmY3BfZmFpbGVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IGF0b21pY19yZWFkKCZzZGV2X3RvX3pmY3Aoc2RldiktPnN0YXR1cyk7CisJdW5zaWduZWQgaW50IGZhaWxlZCA9IHN0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEID8gMSA6IDA7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZmFpbGVkKTsKK30KKworc3RhdGljIHNzaXplX3QgemZjcF9zeXNmc19zY3NpX3pmY3BfZmFpbGVkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChrc3RydG91bChidWYsIDAsICZ2YWwpIHx8IHZhbCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXpmY3BfZXJwX3NldF9sdW5fc3RhdHVzKHNkZXYsIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKTsKKwl6ZmNwX2VycF9sdW5fcmVvcGVuKHNkZXYsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAorCQkJICAgICJzeXVmYWkzIik7CisJemZjcF9lcnBfd2FpdChzZGV2X3RvX3pmY3Aoc2RldiktPnBvcnQtPmFkYXB0ZXIpOworCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKHpmY3BfZmFpbGVkLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgemZjcF9zeXNmc19zY3NpX3pmY3BfZmFpbGVkX3Nob3csCisJCSAgIHpmY3Bfc3lzZnNfc2NzaV96ZmNwX2ZhaWxlZF9zdG9yZSk7CisKK1pGQ1BfREVGSU5FX1NDU0lfQVRUUih6ZmNwX2luX3JlY292ZXJ5LCAiJWRcbiIsCisJCSAgICAgIChhdG9taWNfcmVhZCgmemZjcF9zZGV2LT5zdGF0dXMpICYKKwkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UpICE9IDApOworCitaRkNQX0RFRklORV9TQ1NJX0FUVFIoemZjcF9zdGF0dXMsICIweCUwOHhcbiIsCisJCSAgICAgIGF0b21pY19yZWFkKCZ6ZmNwX3NkZXYtPnN0YXR1cykpOworCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqemZjcF9zeXNmc19zZGV2X2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2ZjcF9sdW4sCiAJJmRldl9hdHRyX3d3cG4sCkBAIC00NjcsNiArNTExLDEwIEBACiAJJmRldl9hdHRyX3JlYWRfbGF0ZW5jeSwKIAkmZGV2X2F0dHJfd3JpdGVfbGF0ZW5jeSwKIAkmZGV2X2F0dHJfY21kX2xhdGVuY3ksCisJJmRldl9hdHRyX3pmY3BfYWNjZXNzX2RlbmllZCwKKwkmZGV2X2F0dHJfemZjcF9mYWlsZWQsCisJJmRldl9hdHRyX3pmY3BfaW5fcmVjb3ZlcnksCisJJmRldl9hdHRyX3pmY3Bfc3RhdHVzLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCmluZGV4IDBhNzMyNTMuLmNkNDEyOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKKysrIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwpAQCAtMTg5LDE5ICsxODksNiBAQAogCXJldHVybiBsZW47CiB9IC8qIEVuZCB0d2Ffc2hvd19zdGF0cygpICovCiAKLS8qIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYSBkZXZpY2VzIHF1ZXVlIGRlcHRoICovCi1zdGF0aWMgaW50IHR3YV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXVldWVfZGVwdGgsCi0JCQkJICBpbnQgcmVhc29uKQotewotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHF1ZXVlX2RlcHRoID4gVFdfUV9MRU5HVEgtMikKLQkJcXVldWVfZGVwdGggPSBUV19RX0xFTkdUSC0yOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywgcXVldWVfZGVwdGgpOwotCXJldHVybiBxdWV1ZV9kZXB0aDsKLX0gLyogRW5kIHR3YV9jaGFuZ2VfcXVldWVfZGVwdGgoKSAqLwotCiAvKiBDcmVhdGUgc3lzZnMgJ3N0YXRzJyBlbnRyeSAqLwogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHR3YV9ob3N0X3N0YXRzX2F0dHIgPSB7CiAJLmF0dHIgPSB7CkBAIC0yMDE2LDcgKzIwMDMsNyBAQAogCS5xdWV1ZWNvbW1hbmQJCT0gdHdhX3Njc2lfcXVldWUsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHR3YV9zY3NpX2VoX3Jlc2V0LAogCS5iaW9zX3BhcmFtCQk9IHR3YV9zY3NpX2Jpb3NwYXJhbSwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gdHdhX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLmNhbl9xdWV1ZQkJPSBUV19RX0xFTkdUSC0yLAogCS5zbGF2ZV9jb25maWd1cmUJPSB0d2Ffc2xhdmVfY29uZmlndXJlLAogCS50aGlzX2lkCQk9IC0xLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LXNhcy5jIGIvZHJpdmVycy9zY3NpLzN3LXNhcy5jCmluZGV4IDZkYTZjZWMuLjIzNjE3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy1zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvM3ctc2FzLmMKQEAgLTE5MSwxOSArMTkxLDYgQEAKIAlyZXR1cm4gbGVuOwogfSAvKiBFbmQgdHdsX3Nob3dfc3RhdHMoKSAqLwogCi0vKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGEgZGV2aWNlcyBxdWV1ZSBkZXB0aCAqLwotc3RhdGljIGludCB0d2xfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHF1ZXVlX2RlcHRoLAotCQkJCSAgaW50IHJlYXNvbikKLXsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChxdWV1ZV9kZXB0aCA+IFRXX1FfTEVOR1RILTIpCi0JCXF1ZXVlX2RlcHRoID0gVFdfUV9MRU5HVEgtMjsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfT1JERVJFRF9UQUcsIHF1ZXVlX2RlcHRoKTsKLQlyZXR1cm4gcXVldWVfZGVwdGg7Ci19IC8qIEVuZCB0d2xfY2hhbmdlX3F1ZXVlX2RlcHRoKCkgKi8KLQogLyogc3RhdHMgc3lzZnMgYXR0cmlidXRlIGluaXRpYWxpemVyICovCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdHdsX2hvc3Rfc3RhdHNfYXR0ciA9IHsKIAkuYXR0ciA9IHsKQEAgLTE1OTAsNyArMTU3Nyw3IEBACiAJLnF1ZXVlY29tbWFuZAkJPSB0d2xfc2NzaV9xdWV1ZSwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCT0gdHdsX3Njc2lfZWhfcmVzZXQsCiAJLmJpb3NfcGFyYW0JCT0gdHdsX3Njc2lfYmlvc3BhcmFtLAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSB0d2xfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuY2FuX3F1ZXVlCQk9IFRXX1FfTEVOR1RILTIsCiAJLnNsYXZlX2NvbmZpZ3VyZQk9IHR3bF9zbGF2ZV9jb25maWd1cmUsCiAJLnRoaXNfaWQJCT0gLTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3cteHh4eC5jIGIvZHJpdmVycy9zY3NpLzN3LXh4eHguYwppbmRleCA3NTI2MjRlLi5jNzVmMjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKQEAgLTUyMywxOSArNTIzLDYgQEAKIAlyZXR1cm4gbGVuOwogfSAvKiBFbmQgdHdfc2hvd19zdGF0cygpICovCiAKLS8qIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYSBkZXZpY2VzIHF1ZXVlIGRlcHRoICovCi1zdGF0aWMgaW50IHR3X2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxdWV1ZV9kZXB0aCwKLQkJCQkgaW50IHJlYXNvbikKLXsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChxdWV1ZV9kZXB0aCA+IFRXX1FfTEVOR1RILTIpCi0JCXF1ZXVlX2RlcHRoID0gVFdfUV9MRU5HVEgtMjsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfT1JERVJFRF9UQUcsIHF1ZXVlX2RlcHRoKTsKLQlyZXR1cm4gcXVldWVfZGVwdGg7Ci19IC8qIEVuZCB0d19jaGFuZ2VfcXVldWVfZGVwdGgoKSAqLwotCiAvKiBDcmVhdGUgc3lzZnMgJ3N0YXRzJyBlbnRyeSAqLwogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHR3X2hvc3Rfc3RhdHNfYXR0ciA9IHsKIAkuYXR0ciA9IHsKQEAgLTIyNzAsNyArMjI1Nyw3IEBACiAJLnF1ZXVlY29tbWFuZAkJPSB0d19zY3NpX3F1ZXVlLAogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSB0d19zY3NpX2VoX3Jlc2V0LAogCS5iaW9zX3BhcmFtCQk9IHR3X3Njc2lfYmlvc3BhcmFtLAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSB0d19jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5jYW5fcXVldWUJCT0gVFdfUV9MRU5HVEgtMiwKIAkuc2xhdmVfY29uZmlndXJlCT0gdHdfc2xhdmVfY29uZmlndXJlLAogCS50aGlzX2lkCQk9IC0xLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzUzYzcwMC5jIGIvZHJpdmVycy9zY3NpLzUzYzcwMC5jCmluZGV4IGZhYmQ0YmUuLmFhOTE1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS81M2M3MDAuYworKysgYi9kcml2ZXJzL3Njc2kvNTNjNzAwLmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogU1RBVElDIGludCBOQ1JfNzAwX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwbnQpOwogU1RBVElDIGludCBOQ1JfNzAwX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcG50KTsKIFNUQVRJQyB2b2lkIE5DUl83MDBfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcG50KTsKLXN0YXRpYyBpbnQgTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpTRHBudCwgaW50IGRlcHRoLCBpbnQgcmVhc29uKTsKK3N0YXRpYyBpbnQgTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpTRHBudCwgaW50IGRlcHRoKTsKIHN0YXRpYyBpbnQgTkNSXzcwMF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcG50LCBpbnQgZGVwdGgpOwogCiBTVEFUSUMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKk5DUl83MDBfZGV2X2F0dHJzW107CkBAIC0zMjcsNiArMzI3LDcgQEAKIAl0cG50LT5zbGF2ZV9hbGxvYyA9IE5DUl83MDBfc2xhdmVfYWxsb2M7CiAJdHBudC0+Y2hhbmdlX3F1ZXVlX2RlcHRoID0gTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGg7CiAJdHBudC0+Y2hhbmdlX3F1ZXVlX3R5cGUgPSBOQ1JfNzAwX2NoYW5nZV9xdWV1ZV90eXBlOworCXRwbnQtPnVzZV9ibGtfdGFncyA9IDE7CiAKIAlpZih0cG50LT5uYW1lID09IE5VTEwpCiAJCXRwbnQtPm5hbWUgPSAiNTNjNzAwIjsKQEAgLTU5MiwxOSArNTkzLDE0IEBACiAJaG9zdGRhdGEtPmNtZCA9IE5VTEw7CiAKIAlpZihTQ3AgIT0gTlVMTCkgewotCQlzdHJ1Y3QgTkNSXzcwMF9jb21tYW5kX3Nsb3QgKnNsb3QgPSAKKwkJc3RydWN0IE5DUl83MDBfY29tbWFuZF9zbG90ICpzbG90ID0KIAkJCShzdHJ1Y3QgTkNSXzcwMF9jb21tYW5kX3Nsb3QgKilTQ3AtPmhvc3Rfc2NyaWJibGU7Ci0JCQorCiAJCWRtYV91bm1hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwgc2xvdC0+cENtZCwKIAkJCQkgTUFYX0NPTU1BTkRfU0laRSwgRE1BX1RPX0RFVklDRSk7CiAJCWlmIChzbG90LT5mbGFncyA9PSBOQ1JfNzAwX0ZMQUdfQVVUT1NFTlNFKSB7CiAJCQljaGFyICpjbW5kID0gTkNSXzcwMF9nZXRfc2Vuc2VfY21uZChTQ3AtPmRldmljZSk7Ci0jaWZkZWYgTkNSXzcwMF9ERUJVRwotCQkJcHJpbnRrKCIgT1JJR0lOQUwgQ01EICVwIFJFVFVSTkVEICVkLCBuZXcgcmV0dXJuIGlzICVkIHNlbnNlIGlzXG4iLAotCQkJICAgICAgIFNDcCwgU0NwLT5jbW5kWzddLCByZXN1bHQpOwotCQkJc2NzaV9wcmludF9zZW5zZSgiNTNjNzAwIiwgU0NwKTsKIAotI2VuZGlmCiAJCQlkbWFfdW5tYXBfc2luZ2xlKGhvc3RkYXRhLT5kZXYsIHNsb3QtPmRtYV9oYW5kbGUsCiAJCQkJCSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAJCQkvKiByZXN0b3JlIHRoZSBvbGQgcmVzdWx0IGlmIHRoZSByZXF1ZXN0IHNlbnNlIHdhcwpAQCAtOTA2LDggKzkwMiwxMCBAQAogCQkJLyogd2UncmUgZG9uZSBuZWdvdGlhdGluZyAqLwogCQkJTkNSXzcwMF9zZXRfdGFnX25lZ19zdGF0ZShTQ3AtPmRldmljZSwgTkNSXzcwMF9GSU5JU0hFRF9UQUdfTkVHT1RJQVRJT04pOwogCQkJaG9zdGRhdGEtPnRhZ19uZWdvdGlhdGVkICY9IH4oMTw8c2NtZF9pZChTQ3ApKTsKKwogCQkJU0NwLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgPSAwOwotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShTQ3AtPmRldmljZSwgaG9zdC0+Y21kX3Blcl9sdW4pOworCQkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoU0NwLT5kZXZpY2UsIGhvc3QtPmNtZF9wZXJfbHVuKTsKKwkJCXNjc2lfc2V0X3RhZ190eXBlKFNDcC0+ZGV2aWNlLCAwKTsKIAkJfSBlbHNlIHsKIAkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhvc3QsCiAJCQkJIiglZDolZCkgVW5leHBlY3RlZCBSRUpFQ1QgTWVzc2FnZSAlc1xuIiwKQEAgLTE0MzIsNyArMTQzMCw3IEBACiAJaWYoKGhvc3RkYXRhLT50YWdfbmVnb3RpYXRlZCAmICgxPDxzY21kX2lkKFNDcCkpKQogCSAgICYmIChzbG90LT50YWcgIT0gU0NTSV9OT19UQUcgJiYgU0NwLT5jbW5kWzBdICE9IFJFUVVFU1RfU0VOU0UgJiYKIAkgICAgICAgc2xvdC0+ZmxhZ3MgIT0gTkNSXzcwMF9GTEFHX0FVVE9TRU5TRSkpIHsKLQkJY291bnQgKz0gc2NzaV9wb3B1bGF0ZV90YWdfbXNnKFNDcCwgJmhvc3RkYXRhLT5tc2dvdXRbY291bnRdKTsKKwkJY291bnQgKz0gc3BpX3BvcHVsYXRlX3RhZ19tc2coJmhvc3RkYXRhLT5tc2dvdXRbY291bnRdLCBTQ3ApOwogCX0KIAogCWlmKGhvc3RkYXRhLT5mYXN0ICYmCkBAIC0xNzcyLDcgKzE3NzAsNyBAQAogCSAqLwogCWlmKE5DUl83MDBfZ2V0X2RlcHRoKFNDcC0+ZGV2aWNlKSAhPSAwCiAJICAgJiYgKCEoaG9zdGRhdGEtPnRhZ19uZWdvdGlhdGVkICYgKDE8PHNjbWRfaWQoU0NwKSkpCi0JICAgICAgIHx8ICFibGtfcnFfdGFnZ2VkKFNDcC0+cmVxdWVzdCkpKSB7CisJICAgICAgIHx8ICEoU0NwLT5mbGFncyAmIFNDTURfVEFHR0VEKSkpIHsKIAkJQ0RFQlVHKEtFUk5fRVJSLCBTQ3AsICJoYXMgbm9uIHplcm8gZGVwdGggJWRcbiIsCiAJCSAgICAgICBOQ1JfNzAwX2dldF9kZXB0aChTQ3AtPmRldmljZSkpOwogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwpAQCAtMTgwMCw3ICsxNzk4LDcgQEAKIAlwcmludGsoIjUzYzcwMDogc2NzaSVkLCBjb21tYW5kICIsIFNDcC0+ZGV2aWNlLT5ob3N0LT5ob3N0X25vKTsKIAlzY3NpX3ByaW50X2NvbW1hbmQoU0NwKTsKICNlbmRpZgotCWlmKGJsa19ycV90YWdnZWQoU0NwLT5yZXF1ZXN0KQorCWlmICgoU0NwLT5mbGFncyAmIFNDTURfVEFHR0VEKQogCSAgICYmIChob3N0ZGF0YS0+dGFnX25lZ290aWF0ZWQgJigxPDxzY21kX2lkKFNDcCkpKSA9PSAwCiAJICAgJiYgTkNSXzcwMF9nZXRfdGFnX25lZ19zdGF0ZShTQ3AtPmRldmljZSkgPT0gTkNSXzcwMF9TVEFSVF9UQUdfTkVHT1RJQVRJT04pIHsKIAkJc2NtZF9wcmludGsoS0VSTl9FUlIsIFNDcCwgIkVuYWJsaW5nIFRhZyBDb21tYW5kIFF1ZXVpbmdcbiIpOwpAQCAtMTgxNCw3ICsxODEyLDcgQEAKIAkgKgogCSAqIEZJWE1FOiBUaGlzIHdpbGwgcm95YWxseSBzY3JldyB1cCBvbiBtdWx0aXBsZSBMVU4gZGV2aWNlcwogCSAqICovCi0JaWYoIWJsa19ycV90YWdnZWQoU0NwLT5yZXF1ZXN0KQorCWlmICghKFNDcC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkKIAkgICAmJiAoaG9zdGRhdGEtPnRhZ19uZWdvdGlhdGVkICYoMTw8c2NtZF9pZChTQ3ApKSkpIHsKIAkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ3AsICJEaXNhYmxpbmcgVGFnIENvbW1hbmQgUXVldWluZ1xuIik7CiAJCWhvc3RkYXRhLT50YWdfbmVnb3RpYXRlZCAmPSB+KDE8PHNjbWRfaWQoU0NwKSk7CkBAIC0xOTExLDkgKzE5MDksNyBAQAogewogCXN0cnVjdCBOQ1JfNzAwX2NvbW1hbmRfc2xvdCAqc2xvdDsKIAotCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwLAotCQkiTmV3IGVycm9yIGhhbmRsZXIgd2FudHMgdG8gYWJvcnQgY29tbWFuZFxuXHQiKTsKLQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcCwgImFib3J0IGNvbW1hbmRcbiIpOwogCiAJc2xvdCA9IChzdHJ1Y3QgTkNSXzcwMF9jb21tYW5kX3Nsb3QgKilTQ3AtPmhvc3Rfc2NyaWJibGU7CiAKQEAgLTIwNTYsMTMgKzIwNTIsMTAgQEAKIAogCS8qIHRvIGRvIGhlcmU6IGFsbG9jYXRlIG1lbW9yeTsgYnVpbGQgYSBxdWV1ZV9mdWxsIGxpc3QgKi8KIAlpZihTRHAtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoU0RwLCBNU0dfT1JERVJFRF9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShTRHAsIE5DUl83MDBfREVGQVVMVF9UQUdTKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoU0RwLCBOQ1JfNzAwX0RFRkFVTFRfVEFHUyk7CiAJCU5DUl83MDBfc2V0X3RhZ19uZWdfc3RhdGUoU0RwLCBOQ1JfNzAwX1NUQVJUX1RBR19ORUdPVElBVElPTik7Ci0JfSBlbHNlIHsKLQkJLyogaW5pdGlhbGlzZSB0byBkZWZhdWx0IGRlcHRoICovCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKFNEcCwgMCwgU0RwLT5ob3N0LT5jbWRfcGVyX2x1bik7CiAJfQorCiAJaWYoaG9zdGRhdGEtPmZhc3QpIHsKIAkJLyogRmluZCB0aGUgY29ycmVjdCBvZmZzZXQgYW5kIHBlcmlvZCB2aWEgZG9tYWluIHZhbGlkYXRpb24gKi8KIAkJaWYgKCFzcGlfaW5pdGlhbF9kdihTRHAtPnNkZXZfdGFyZ2V0KSkKQEAgLTIwODIsMTYgKzIwNzUsMTEgQEAKIH0KIAogc3RhdGljIGludAotTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpTRHAsIGludCBkZXB0aCwgaW50IHJlYXNvbikKK05DUl83MDBfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwLCBpbnQgZGVwdGgpCiB7Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAoZGVwdGggPiBOQ1JfNzAwX01BWF9UQUdTKQogCQlkZXB0aCA9IE5DUl83MDBfTUFYX1RBR1M7Ci0KLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChTRHAsIHNjc2lfZ2V0X3RhZ190eXBlKFNEcCksIGRlcHRoKTsKLQlyZXR1cm4gZGVwdGg7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKFNEcCwgZGVwdGgpOwogfQogCiBzdGF0aWMgaW50IE5DUl83MDBfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpTRHAsIGludCB0YWdfdHlwZSkKQEAgLTIxMDEsOCArMjA4OSw2IEBACiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IAogCQkoc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICopU0RwLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAotCXNjc2lfc2V0X3RhZ190eXBlKFNEcCwgdGFnX3R5cGUpOwotCiAJLyogV2UgaGF2ZSBhIGdsb2JhbCAocGVyIHRhcmdldCkgZmxhZyB0byB0cmFjayB3aGV0aGVyIFRDUSBpcwogCSAqIGVuYWJsZWQsIHNvIHdlJ2xsIGJlIHR1cm5pbmcgaXQgb2ZmIGZvciB0aGUgZW50aXJlIHRhcmdldCBoZXJlLgogCSAqIG91ciB0YWcgYWxnb3JpdGhtIHdpbGwgZmFpbCBpZiB3ZSBtaXggdGFnZ2VkIGFuZCB1bnRhZ2dlZCBjb21tYW5kcywKQEAgLTIxMTAsMTUgKzIwOTYsMTYgQEAKIAlpZiAoY2hhbmdlX3RhZykKIAkJc2NzaV90YXJnZXRfcXVpZXNjZShTRHAtPnNkZXZfdGFyZ2V0KTsKIAorCXNjc2lfc2V0X3RhZ190eXBlKFNEcCwgdGFnX3R5cGUpOwogCWlmICghdGFnX3R5cGUpIHsKIAkJLyogc2hpZnQgYmFjayB0byB0aGUgZGVmYXVsdCB1bnF1ZXVlZCBudW1iZXIgb2YgY29tbWFuZHMKIAkJICogKHRoZSB1c2VyIGNhbiBzdGlsbCByYWlzZSB0aGlzKSAqLwotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKFNEcCwgU0RwLT5ob3N0LT5jbWRfcGVyX2x1bik7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKFNEcCwgU0RwLT5ob3N0LT5jbWRfcGVyX2x1bik7CiAJCWhvc3RkYXRhLT50YWdfbmVnb3RpYXRlZCAmPSB+KDEgPDwgc2Rldl9pZChTRHApKTsKIAl9IGVsc2UgewogCQkvKiBIZXJlLCB3ZSBjbGVhcmVkIHRoZSBuZWdvdGlhdGlvbiBmbGFnIGFib3ZlLCBzbyB0aGlzCiAJCSAqIHdpbGwgZm9yY2UgdGhlIGRyaXZlciB0byByZW5lZ290aWF0ZSAqLwotCQlzY3NpX2FjdGl2YXRlX3RjcShTRHAsIFNEcC0+cXVldWVfZGVwdGgpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChTRHAsIFNEcC0+cXVldWVfZGVwdGgpOwogCQlpZiAoY2hhbmdlX3RhZykKIAkJCU5DUl83MDBfc2V0X3RhZ19uZWdfc3RhdGUoU0RwLCBOQ1JfNzAwX1NUQVJUX1RBR19ORUdPVElBVElPTik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0J1c0xvZ2ljLmMgYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYwppbmRleCA2NGM3NTE0Li44ZDY2YTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYworKysgYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYwpAQCAtMjMyNywxMiArMjMyNywxMiBAQAogCQlpZiAocWRlcHRoID09IDApCiAJCQlxZGVwdGggPSBCTE9HSUNfTUFYX0FVVE9fVEFHX0RFUFRIOwogCQlhZGFwdGVyLT5xZGVwdGhbdGd0X2lkXSA9IHFkZXB0aDsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCBNU0dfU0lNUExFX1RBRywgcWRlcHRoKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCBxZGVwdGgpOwogCX0gZWxzZSB7CiAJCWFkYXB0ZXItPnRhZ3Ffb2sgJj0gfigxIDw8IHRndF9pZCk7CiAJCXFkZXB0aCA9IGFkYXB0ZXItPnVudGFnX3FkZXB0aDsKIAkJYWRhcHRlci0+cWRlcHRoW3RndF9pZF0gPSBxZGVwdGg7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgMCwgcWRlcHRoKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCBxZGVwdGgpOwogCX0KIAlxZGVwdGggPSAwOwogCWZvciAodGd0X2lkID0gMDsgdGd0X2lkIDwgYWRhcHRlci0+bWF4ZGV2OyB0Z3RfaWQrKykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggM2E4MjBmNi4uODZjZjNkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTEzNDEsMTMgKzEzNDEsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRjMzk1eC4KIAotY29uZmlnIFNDU0lfREMzOTBUCi0JdHJpc3RhdGUgIlRla3JhbSBEQzM5MChUKSBhbmQgQW01My83OUM5NzQgU0NTSSBzdXBwb3J0IgorY29uZmlnIFNDU0lfQU01M0M5NzQKKwl0cmlzdGF0ZSAiVGVrcmFtIERDMzkwKFQpIGFuZCBBbTUzLzc5Qzk3NCBTQ1NJIHN1cHBvcnQgKG5ldyBkcml2ZXIpIgogCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBQQ0kgU0NTSSBob3N0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBBbTUzQzk3NEEKIAkgIGNoaXAsIGUuZy4gVGVrcmFtIERDMzkwKFQpLCBEYXdpQ29udHJvbCAyOTc0IGFuZCBzb21lIG9uYm9hcmQKIAkgIFBDc2NzaS9QQ25ldCAoQW01My83OUM5NzQpIHNvbHV0aW9ucy4KKwkgIFRoaXMgaXMgYSBuZXcgaW1wbGVtZW50YXRpb24gYmFzZSBvbiB0aGUgZ2VuZXJpYyBlc3Bfc2NzaSBkcml2ZXIuCiAKIAkgIERvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIDxmaWxlOkRvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dD4uCiAKQEAgLTEzNTUsNyArMTM1Nyw3IEBACiAJICBiYXNlZCBvbiBOQ1IvU3ltYmlvcyBjaGlwcy4gVXNlICJOQ1I1M0M4WFggU0NTSSBzdXBwb3J0IiBmb3IgdGhvc2UuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRtc2NzaW0uCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYW01M2M5NzQuCiAKIGNvbmZpZyBTQ1NJX1QxMjgKIAl0cmlzdGF0ZSAiVHJhbnRvciBUMTI4L1QxMjhGL1QyMjggU0NTSSBzdXBwb3J0IgpAQCAtMTQ1MSw2ICsxNDUzLDE0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBuc3AzMi4KIAorY29uZmlnIFNDU0lfV0Q3MTlYCisJdHJpc3RhdGUgIldlc3Rlcm4gRGlnaXRhbCBXRDcxOTMvNzE5Ny83Mjk2IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQorCXNlbGVjdCBFRVBST01fOTNDWDYKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBXZXN0ZXJuIERpZ2l0YWwgV0Q3MTkzLCBXRDcxOTcgYW5kIFdENzI5NiBQQ0kKKwkgIFNDU0kgY29udHJvbGxlcnMgKGJhc2VkIG9uIFdEMzNDMjk2QSBjaGlwKS4KKwogY29uZmlnIFNDU0lfREVCVUcKIAl0cmlzdGF0ZSAiU0NTSSBkZWJ1Z2dpbmcgaG9zdCBzaW11bGF0b3IiCiAJZGVwZW5kcyBvbiBTQ1NJCkBAIC0xNjE1LDcgKzE2MjUsNyBAQAogCSAgdGhhdCBsZWF2ZSB0aGUgZGV2aWNlcyB3aXRoIFNDU0kgb3BlcmF0aW9ucyBwYXJ0d2F5IGNvbXBsZXRlZC4KIAogY29uZmlnIE1BQ19TQ1NJCi0JYm9vbCAiTWFjaW50b3NoIE5DUjUzODAgU0NTSSIKKwl0cmlzdGF0ZSAiTWFjaW50b3NoIE5DUjUzODAgU0NTSSIKIAlkZXBlbmRzIG9uIE1BQyAmJiBTQ1NJPXkKIAlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggNTlmMWNlNi4uNTgxNThmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQpAQCAtMTAwLDcgKzEwMCw3IEBACiBvYmotJChDT05GSUdfU0NTSV83MDAwRkFTU1QpCSs9IHdkNzAwMC5vCiBvYmotJChDT05GSUdfU0NTSV9FQVRBKQkJKz0gZWF0YS5vCiBvYmotJChDT05GSUdfU0NTSV9EQzM5NXgpCSs9IGRjMzk1eC5vCi1vYmotJChDT05GSUdfU0NTSV9EQzM5MFQpCSs9IHRtc2NzaW0ubworb2JqLSQoQ09ORklHX1NDU0lfQU01M0M5NzQpCSs9IGVzcF9zY3NpLm8JYW01M2M5NzQubwogb2JqLSQoQ09ORklHX01FR0FSQUlEX0xFR0FDWSkJKz0gbWVnYXJhaWQubwogb2JqLSQoQ09ORklHX01FR0FSQUlEX05FV0dFTikJKz0gbWVnYXJhaWQvCiBvYmotJChDT05GSUdfTUVHQVJBSURfU0FTKQkrPSBtZWdhcmFpZC8KQEAgLTE0Myw2ICsxNDMsNyBAQAogb2JqLSQoQ09ORklHX1ZNV0FSRV9QVlNDU0kpCSs9IHZtd19wdnNjc2kubwogb2JqLSQoQ09ORklHX1hFTl9TQ1NJX0ZST05URU5EKQkrPSB4ZW4tc2NzaWZyb250Lm8KIG9iai0kKENPTkZJR19IWVBFUlZfU1RPUkFHRSkJKz0gaHZfc3RvcnZzYy5vCitvYmotJChDT05GSUdfU0NTSV9XRDcxOVgpCSs9IHdkNzE5eC5vCiAKIG9iai0kKENPTkZJR19BUk0pCQkrPSBhcm0vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jCmluZGV4IDQ1ZGEzYzguLjM2MjQ0ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL05DUjUzODAuYwpAQCAtMTEsOCArMTEsNiBAQAogICogICAgICBkcmV3QGNvbG9yYWRvLmVkdQogICogICAgICArMSAoMzAzKSA2NjYtNTgzNgogICoKLSAqIERJU1RSSUJVVElPTiBSRUxFQVNFIDYuIAotICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKICAqCiAgKiBOQ1IgNTM4MCBGYW1pbHkKQEAgLTI3OSw3ICsyNzcsNyBAQAogICoJU2V0IHVwIHRoZSBpbnRlcm5hbCBmaWVsZHMgaW4gdGhlIFNDU0kgY29tbWFuZC4KICAqLwogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGluaXRpYWxpemVfU0NwKFNjc2lfQ21uZCAqIGNtZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0aWFsaXplX1NDcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJLyogCiAJICogSW5pdGlhbGl6ZSB0aGUgU2NzaSBQb2ludGVyIGZpZWxkIHNvIHRoYXQgYWxsIG9mIHRoZSBjb21tYW5kcyBpbiB0aGUgCkBAIC01NzQsMTIgKzU3MiwxMiBAQAogCWludCB0cnlpbmdfaXJxcywgaSwgbWFzazsKIAlOQ1I1MzgwX3NldHVwKGluc3RhbmNlKTsKIAotCWZvciAodHJ5aW5nX2lycXMgPSBpID0gMCwgbWFzayA9IDE7IGkgPCAxNjsgKytpLCBtYXNrIDw8PSAxKQorCWZvciAodHJ5aW5nX2lycXMgPSAwLCBpID0gMSwgbWFzayA9IDI7IGkgPCAxNjsgKytpLCBtYXNrIDw8PSAxKQogCQlpZiAoKG1hc2sgJiBwb3NzaWJsZSkgJiYgKHJlcXVlc3RfaXJxKGksICZwcm9iZV9pbnRyLCAwLCAiTkNSLXByb2JlIiwgTlVMTCkgPT0gMCkpCiAJCQl0cnlpbmdfaXJxcyB8PSBtYXNrOwogCiAJdGltZW91dCA9IGppZmZpZXMgKyAoMjUwICogSFogLyAxMDAwKTsKLQlwcm9iZV9pcnEgPSBTQ1NJX0lSUV9OT05FOworCXByb2JlX2lycSA9IE5PX0lSUTsKIAogCS8qCiAJICogQSBpbnRlcnJ1cHQgaXMgdHJpZ2dlcmVkIHdoZW5ldmVyIEJTWSA9IGZhbHNlLCBTRUwgPSB0cnVlCkBAIC01OTYsMTMgKzU5NCwxMyBAQAogCU5DUjUzODBfd3JpdGUoT1VUUFVUX0RBVEFfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7CiAJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9EQVRBIHwgSUNSX0FTU0VSVF9TRUwpOwogCi0Jd2hpbGUgKHByb2JlX2lycSA9PSBTQ1NJX0lSUV9OT05FICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQorCXdoaWxlIChwcm9iZV9pcnEgPT0gTk9fSVJRICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKIAkKIAlOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCAwKTsKIAlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwogCi0JZm9yIChpID0gMCwgbWFzayA9IDE7IGkgPCAxNjsgKytpLCBtYXNrIDw8PSAxKQorCWZvciAoaSA9IDEsIG1hc2sgPSAyOyBpIDwgMTY7ICsraSwgbWFzayA8PD0gMSkKIAkJaWYgKHRyeWluZ19pcnFzICYgbWFzaykKIAkJCWZyZWVfaXJxKGksIE5VTEwpOwogCkBAIC02MTAsNTAgKzYwOCw3MCBAQAogfQogCiAvKioKLSAqCU5DUjU4MzgwX3ByaW50X29wdGlvbnMJLQlzaG93IG9wdGlvbnMKLSAqCUBpbnN0YW5jZTogdW51c2VkIGZvciBub3cKKyAqCU5DUjU4MzgwX2luZm8gLSByZXBvcnQgZHJpdmVyIGFuZCBob3N0IGluZm9ybWF0aW9uCisgKglAaW5zdGFuY2U6IHJlbGV2YW50IHNjc2kgaG9zdCBpbnN0YW5jZQogICoKLSAqCUNhbGxlZCBieSBwcm9iZSBjb2RlIGluZGljYXRpbmcgdGhlIE5DUjUzODAgZHJpdmVyIG9wdGlvbnMgdGhhdCAKLSAqCXdlcmUgc2VsZWN0ZWQuIEF0IHNvbWUgcG9pbnQgdGhpcyB3aWxsIHN3aXRjaCB0byBydW50aW1lIG9wdGlvbnMKLSAqCXJlYWQgZnJvbSB0aGUgYWRhcHRlciBpbiBxdWVzdGlvbgorICoJRm9yIHVzZSBhcyB0aGUgaG9zdCB0ZW1wbGF0ZSBpbmZvKCkgaGFuZGxlci4KICAqCiAgKglMb2Nrczogbm9uZQogICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZAotTkNSNTM4MF9wcmludF9vcHRpb25zKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorc3RhdGljIGNvbnN0IGNoYXIgKk5DUjUzODBfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKLQlwcmludGsoIiBnZW5lcmljIG9wdGlvbnMiCi0jaWZkZWYgQVVUT1BST0JFX0lSUQotCSAgICAgICAiIEFVVE9QUk9CRV9JUlEiCisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwlyZXR1cm4gaG9zdGRhdGEtPmluZm87Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKKworCXNucHJpbnRmKGhvc3RkYXRhLT5pbmZvLCBzaXplb2YoaG9zdGRhdGEtPmluZm8pLAorCSAgICAgICAgICIlcywgaW9fcG9ydCAweCVseCwgbl9pb19wb3J0ICVkLCAiCisJICAgICAgICAgImJhc2UgMHglbHgsIGlycSAlZCwgIgorCSAgICAgICAgICJjYW5fcXVldWUgJWQsIGNtZF9wZXJfbHVuICVkLCAiCisJICAgICAgICAgInNnX3RhYmxlc2l6ZSAlZCwgdGhpc19pZCAlZCwgIgorCSAgICAgICAgICJmbGFncyB7ICVzJXMlc30sICIKKyNpZiBkZWZpbmVkKFVTTEVFUF9QT0xMKSAmJiBkZWZpbmVkKFVTTEVFUF9XQUlUTE9ORykKKwkgICAgICAgICAiVVNMRUVQX1BPTEwgJWQsIFVTTEVFUF9XQUlUTE9ORyAlZCwgIgogI2VuZGlmCi0jaWZkZWYgQVVUT1NFTlNFCi0JICAgICAgICIgQVVUT1NFTlNFIgorCSAgICAgICAgICJvcHRpb25zIHsgJXN9ICIsCisJICAgICAgICAgaW5zdGFuY2UtPmhvc3R0LT5uYW1lLCBpbnN0YW5jZS0+aW9fcG9ydCwgaW5zdGFuY2UtPm5faW9fcG9ydCwKKwkgICAgICAgICBpbnN0YW5jZS0+YmFzZSwgaW5zdGFuY2UtPmlycSwKKwkgICAgICAgICBpbnN0YW5jZS0+Y2FuX3F1ZXVlLCBpbnN0YW5jZS0+Y21kX3Blcl9sdW4sCisJICAgICAgICAgaW5zdGFuY2UtPnNnX3RhYmxlc2l6ZSwgaW5zdGFuY2UtPnRoaXNfaWQsCisJICAgICAgICAgaG9zdGRhdGEtPmZsYWdzICYgRkxBR19OQ1I1M0M0MDAgICAgID8gIk5DUjUzQzQwMCAiICAgICA6ICIiLAorCSAgICAgICAgIGhvc3RkYXRhLT5mbGFncyAmIEZMQUdfRFRDMzE4MUUgICAgICA/ICJEVEMzMTgxRSAiICAgICAgOiAiIiwKKwkgICAgICAgICBob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX05PX1BTRVVET19ETUEgPyAiTk9fUFNFVURPX0RNQSAiIDogIiIsCisjaWYgZGVmaW5lZChVU0xFRVBfUE9MTCkgJiYgZGVmaW5lZChVU0xFRVBfV0FJVExPTkcpCisJICAgICAgICAgVVNMRUVQX1BPTEwsIFVTTEVFUF9XQUlUTE9ORywKKyNlbmRpZgorI2lmZGVmIEFVVE9QUk9CRV9JUlEKKwkgICAgICAgICAiQVVUT1BST0JFX0lSUSAiCiAjZW5kaWYKICNpZmRlZiBESUZGRVJFTlRJQUwKLQkgICAgICAgIiBESUZGRVJFTlRJQUwiCisJICAgICAgICAgIkRJRkZFUkVOVElBTCAiCiAjZW5kaWYKICNpZmRlZiBSRUFMX0RNQQotCSAgICAgICAiIFJFQUwgRE1BIgorCSAgICAgICAgICJSRUFMX0RNQSAiCiAjZW5kaWYKICNpZmRlZiBSRUFMX0RNQV9QT0xMCi0JICAgICAgICIgUkVBTCBETUEgUE9MTCIKKwkgICAgICAgICAiUkVBTF9ETUFfUE9MTCAiCiAjZW5kaWYKICNpZmRlZiBQQVJJVFkKLQkgICAgICAgIiBQQVJJVFkiCisJICAgICAgICAgIlBBUklUWSAiCiAjZW5kaWYKICNpZmRlZiBQU0VVRE9fRE1BCi0JICAgICAgICIgUFNFVURPIERNQSIKKwkgICAgICAgICAiUFNFVURPX0RNQSAiCiAjZW5kaWYKICNpZmRlZiBVTlNBRkUKLQkgICAgICAgIiBVTlNBRkUgIgorCSAgICAgICAgICJVTlNBRkUgIgogI2VuZGlmCi0JICAgICk7Ci0JcHJpbnRrKCIgVVNMRUVQLCBVU0xFRVBfUE9MTD0lZCBVU0xFRVBfU0xFRVA9JWQiLCBVU0xFRVBfUE9MTCwgVVNMRUVQX1NMRUVQKTsKLQlwcmludGsoIiBnZW5lcmljIHJlbGVhc2U9JWQiLCBOQ1I1MzgwX1BVQkxJQ19SRUxFQVNFKTsKLQlpZiAoKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKSBpbnN0YW5jZS0+aG9zdGRhdGEpLT5mbGFncyAmIEZMQUdfTkNSNTNDNDAwKSB7Ci0JCXByaW50aygiIG5jcjUzYzQwMCByZWxlYXNlPSVkIiwgTkNSNTNDNDAwX1BVQkxJQ19SRUxFQVNFKTsKLQl9CisjaWZkZWYgTkNSNTNDNDAwCisJICAgICAgICAgIk5DUjUzQzQwMCAiCisjZW5kaWYKKwkgICAgICAgICAiIik7CiB9CiAKIC8qKgpAQCAtNjcyLDYgKzY5MCw3IEBACiAJTkNSNTM4MF9kcHJpbnRfcGhhc2UoTkRFQlVHX0FOWSwgaW5zdGFuY2UpOwogfQogCisjaWZkZWYgUFNFVURPX0RNQQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiAvcHJvYy9zY3NpL1tkdGMgcGFzMTYgdDEyOCBnZW5lcmljXS9bMC1BU0NfTlVNX0JPQVJEX1NVUFBPUlRFRF0KQEAgLTY4OSwxOSArNzA4LDE4IEBACiBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIE5DUjUzODBfd3JpdGVfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKIAljaGFyICpidWZmZXIsIGludCBsZW5ndGgpCiB7Ci0jaWZkZWYgRFRDX1BVQkxJQ19SRUxFQVNFCi0JZHRjX3dtYXhpID0gZHRjX21heGkgPSAwOwotI2VuZGlmCi0jaWZkZWYgUEFTMTZfUFVCTElDX1JFTEVBU0UKLQlwYXNfd21heGkgPSBwYXNfbWF4aSA9IDA7Ci0jZW5kaWYKLQlyZXR1cm4gKC1FTk9TWVMpOwkvKiBDdXJyZW50bHkgdGhpcyBpcyBhIG5vLW9wICovCisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwlob3N0ZGF0YS0+c3Bpbl9tYXhfciA9IDA7CisJaG9zdGRhdGEtPnNwaW5fbWF4X3cgPSAwOworCXJldHVybiAwOwogfQorI2VuZGlmCiAKICN1bmRlZiBTUFJJTlRGCiAjZGVmaW5lIFNQUklOVEYoYXJncy4uLikgc2VxX3ByaW50ZihtLCAjIyBhcmdzKQogc3RhdGljCi12b2lkIGxwcmludF9TY3NpX0NtbmQoU2NzaV9DbW5kICogY21kLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOwordm9pZCBscHJpbnRfU2NzaV9DbW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgc3RydWN0IHNlcV9maWxlICptKTsKIHN0YXRpYwogdm9pZCBscHJpbnRfY29tbWFuZCh1bnNpZ25lZCBjaGFyICpjbWQsIHN0cnVjdCBzZXFfZmlsZSAqbSk7CiBzdGF0aWMKQEAgLTcxMSw1NiArNzI5LDMxIEBACiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCVNjc2lfQ21uZCAqcHRyOworCXN0cnVjdCBzY3NpX2NtbmQgKnB0cjsKIAogCWhvc3RkYXRhID0gKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopIGluc3RhbmNlLT5ob3N0ZGF0YTsKIAotCVNQUklOVEYoIk5DUjUzODAgY29yZSByZWxlYXNlPSVkLiAgICIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOwotCWlmICgoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopIGluc3RhbmNlLT5ob3N0ZGF0YSktPmZsYWdzICYgRkxBR19OQ1I1M0M0MDApCi0JCVNQUklOVEYoIm5jcjUzYzQwMCByZWxlYXNlPSVkLiAgIiwgTkNSNTNDNDAwX1BVQkxJQ19SRUxFQVNFKTsKLSNpZmRlZiBEVENfUFVCTElDX1JFTEVBU0UKLQlTUFJJTlRGKCJEVEMgMzE4MC8zMjgwIHJlbGVhc2UgJWQiLCBEVENfUFVCTElDX1JFTEVBU0UpOwotI2VuZGlmCi0jaWZkZWYgVDEyOF9QVUJMSUNfUkVMRUFTRQotCVNQUklOVEYoIlQxMjggcmVsZWFzZSAlZCIsIFQxMjhfUFVCTElDX1JFTEVBU0UpOwotI2VuZGlmCi0jaWZkZWYgR0VORVJJQ19OQ1I1MzgwX1BVQkxJQ19SRUxFQVNFCi0JU1BSSU5URigiR2VuZXJpYzUzODAgcmVsZWFzZSAlZCIsIEdFTkVSSUNfTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0jZW5kaWYKLSNpZmRlZiBQQVMxNl9QVUJMSUNfUkVMRUFTRQotCVNQUklOVEYoIlBBUzE2IHJlbGVhc2U9JWQiLCBQQVMxNl9QVUJMSUNfUkVMRUFTRSk7Ci0jZW5kaWYKLQotCVNQUklOVEYoIlxuQmFzZSBBZGRyOiAweCUwNWxYICAgICIsIChsb25nKSBpbnN0YW5jZS0+YmFzZSk7Ci0JU1BSSU5URigiaW9fcG9ydDogJTA0eCAgICAgICIsIChpbnQpIGluc3RhbmNlLT5pb19wb3J0KTsKLQlpZiAoaW5zdGFuY2UtPmlycSA9PSBTQ1NJX0lSUV9OT05FKQotCQlTUFJJTlRGKCJJUlE6IE5vbmUuXG4iKTsKLQllbHNlCi0JCVNQUklOVEYoIklSUTogJWQuXG4iLCBpbnN0YW5jZS0+aXJxKTsKLQotI2lmZGVmIERUQ19QVUJMSUNfUkVMRUFTRQotCVNQUklOVEYoIkhpZ2h3YXRlciBJL08gYnVzeV9zcGluX2NvdW50cyAtLSB3cml0ZTogJWQgIHJlYWQ6ICVkXG4iLCBkdGNfd21heGksIGR0Y19tYXhpKTsKLSNlbmRpZgotI2lmZGVmIFBBUzE2X1BVQkxJQ19SRUxFQVNFCi0JU1BSSU5URigiSGlnaHdhdGVyIEkvTyBidXN5X3NwaW5fY291bnRzIC0tIHdyaXRlOiAlZCAgcmVhZDogJWRcbiIsIHBhc193bWF4aSwgcGFzX21heGkpOworI2lmZGVmIFBTRVVET19ETUEKKwlTUFJJTlRGKCJIaWdod2F0ZXIgSS9PIGJ1c3kgc3BpbiBjb3VudHM6IHdyaXRlICVkLCByZWFkICVkXG4iLAorCSAgICAgICAgaG9zdGRhdGEtPnNwaW5fbWF4X3csIGhvc3RkYXRhLT5zcGluX21heF9yKTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnEoaW5zdGFuY2UtPmhvc3RfbG9jayk7CiAJaWYgKCFob3N0ZGF0YS0+Y29ubmVjdGVkKQogCQlTUFJJTlRGKCJzY3NpJWQ6IG5vIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCWVsc2UKLQkJbHByaW50X1Njc2lfQ21uZCgoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQsIG0pOworCQlscHJpbnRfU2NzaV9DbW5kKChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQsIG0pOwogCVNQUklOVEYoInNjc2klZDogaXNzdWVfcXVldWVcbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IChTY3NpX0NtbmQgKikgcHRyLT5ob3N0X3NjcmliYmxlKQorCWZvciAocHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHB0ci0+aG9zdF9zY3JpYmJsZSkKIAkJbHByaW50X1Njc2lfQ21uZChwdHIsIG0pOwogCiAJU1BSSU5URigic2NzaSVkOiBkaXNjb25uZWN0ZWRfcXVldWVcbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOyBwdHIgPSAoU2NzaV9DbW5kICopIHB0ci0+aG9zdF9zY3JpYmJsZSkKKwlmb3IgKHB0ciA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsgcHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgcHRyLT5ob3N0X3NjcmliYmxlKQogCQlscHJpbnRfU2NzaV9DbW5kKHB0ciwgbSk7CiAJc3Bpbl91bmxvY2tfaXJxKGluc3RhbmNlLT5ob3N0X2xvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBscHJpbnRfU2NzaV9DbW5kKFNjc2lfQ21uZCAqIGNtZCwgc3RydWN0IHNlcV9maWxlICptKQorc3RhdGljIHZvaWQgbHByaW50X1Njc2lfQ21uZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlTUFJJTlRGKCJzY3NpJWQgOiBkZXN0aW5hdGlvbiB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLCBjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKIAlTUFJJTlRGKCIgICAgICAgIGNvbW1hbmQgPSAiKTsKQEAgLTgzNiwxOCArODI5LDYgQEAKIAkKIAlJTklUX0RFTEFZRURfV09SSygmaG9zdGRhdGEtPmNvcm91dGluZSwgTkNSNTM4MF9tYWluKTsKIAkKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JZm9yIChpID0gMDsgaSA8IDg7ICsraSkgewotCQlob3N0ZGF0YS0+dGltZV9yZWFkW2ldID0gMDsKLQkJaG9zdGRhdGEtPnRpbWVfd3JpdGVbaV0gPSAwOwotCQlob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtpXSA9IDA7Ci0JCWhvc3RkYXRhLT5ieXRlc193cml0ZVtpXSA9IDA7Ci0JfQotCWhvc3RkYXRhLT50aW1lYmFzZSA9IDA7Ci0JaG9zdGRhdGEtPnBlbmRpbmd3ID0gMDsKLQlob3N0ZGF0YS0+cGVuZGluZ3IgPSAwOwotI2VuZGlmCi0KIAkvKiBUaGUgQ0hFQ0sgY29kZSBzZWVtcyB0byBicmVhayB0aGUgNTNDNDAwLiBXaWxsIGNoZWNrIGl0IGxhdGVyIG1heWJlICovCiAJaWYgKGZsYWdzICYgRkxBR19OQ1I1M0M0MDApCiAJCWhvc3RkYXRhLT5mbGFncyA9IEZMQUdfSEFTX0xBU1RfQllURV9TRU5UIHwgZmxhZ3M7CkBAIC04NTcsMTEgKzgzOCw3IEBACiAJaG9zdGRhdGEtPmhvc3QgPSBpbnN0YW5jZTsKIAlob3N0ZGF0YS0+dGltZV9leHBpcmVzID0gMDsKIAotI2lmbmRlZiBBVVRPU0VOU0UKLQlpZiAoKGluc3RhbmNlLT5jbWRfcGVyX2x1biA+IDEpIHx8IGluc3RhbmNlLT5jYW5fcXVldWUgPiAxKQotCQkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogV0FSTklORyA6IHN1cHBvcnQgZm9yIG11bHRpcGxlIG91dHN0YW5kaW5nIGNvbW1hbmRzIGVuYWJsZWRcbiIgIiAgICAgICAgIHdpdGhvdXQgQVVUT1NFTlNFIG9wdGlvbiwgY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbnMgbWF5XG4iCi0JCSAgICAJICAgIiAgICAgICAgIGJlIGluY29ycmVjdGx5IGNsZWFyZWQuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7Ci0jZW5kaWYJCQkJLyogZGVmIEFVVE9TRU5TRSAqLworCXByZXBhcmVfaW5mbyhpbnN0YW5jZSk7CiAKIAlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwogCU5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UpOwpAQCAtOTM1LDExICs5MTIsMTEgQEAKICAqCUxvY2tzOiBob3N0IGxvY2sgdGFrZW4gYnkgY2FsbGVyCiAgKi8KIAotc3RhdGljIGludCBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmRfbGNrKFNjc2lfQ21uZCAqIGNtZCwgdm9pZCAoKmRvbmUpIChTY3NpX0NtbmQgKikpCitzdGF0aWMgaW50IE5DUjUzODBfcXVldWVfY29tbWFuZF9sY2soc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKikpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSAoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgaW5zdGFuY2UtPmhvc3RkYXRhOwotCVNjc2lfQ21uZCAqdG1wOworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcDsKIAogI2lmIChOREVCVUcgJiBOREVCVUdfTk9fV1JJVEUpCiAJc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKQEAgLTk1MiwyNSArOTI5LDYgQEAKIAl9CiAjZW5kaWYJCQkJLyogKE5ERUJVRyAmIE5ERUJVR19OT19XUklURSkgKi8KIAotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQlzd2l0Y2ggKGNtZC0+Y21uZFswXSkgewotCQljYXNlIFdSSVRFOgotCQljYXNlIFdSSVRFXzY6Ci0JCWNhc2UgV1JJVEVfMTA6Ci0JCQlob3N0ZGF0YS0+dGltZV93cml0ZVtjbWQtPmRldmljZS0+aWRdIC09IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJCWhvc3RkYXRhLT5ieXRlc193cml0ZVtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOwotCQkJaG9zdGRhdGEtPnBlbmRpbmd3Kys7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUFEOgotCQljYXNlIFJFQURfNjoKLQkJY2FzZSBSRUFEXzEwOgotCQkJaG9zdGRhdGEtPnRpbWVfcmVhZFtjbWQtPmRldmljZS0+aWRdIC09IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJCWhvc3RkYXRhLT5ieXRlc19yZWFkW2NtZC0+ZGV2aWNlLT5pZF0gKz0gc2NzaV9idWZmbGVuKGNtZCk7Ci0JCQlob3N0ZGF0YS0+cGVuZGluZ3IrKzsKLQkJCWJyZWFrOwotCX0KLSNlbmRpZgotCiAJLyogCiAJICogV2UgdXNlIHRoZSBob3N0X3NjcmliYmxlIGZpZWxkIGFzIGEgcG9pbnRlciB0byB0aGUgbmV4dCBjb21tYW5kICAKIAkgKiBpbiBhIHF1ZXVlIApAQCAtOTkyLDcgKzk1MCw3IEBACiAJCWNtZC0+aG9zdF9zY3JpYmJsZSA9ICh1bnNpZ25lZCBjaGFyICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsKIAkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gY21kOwogCX0gZWxzZSB7Ci0JCWZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWU7IHRtcC0+aG9zdF9zY3JpYmJsZTsgdG1wID0gKFNjc2lfQ21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpOworCQlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgdG1wLT5ob3N0X3NjcmliYmxlOyB0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpOwogCQlMSVNUKGNtZCwgdG1wKTsKIAkJdG1wLT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKikgY21kOwogCX0KQEAgLTEwMjMsNyArOTgxLDcgQEAKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IE5DUjUzODBfaG9zdGRhdGEsIGNvcm91dGluZS53b3JrKTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGhvc3RkYXRhLT5ob3N0OwotCVNjc2lfQ21uZCAqdG1wLCAqcHJldjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXAsICpwcmV2OwogCWludCBkb25lOwogCQogCXNwaW5fbG9ja19pcnEoaW5zdGFuY2UtPmhvc3RfbG9jayk7CkBAIC0xMDM2LDcgKzk5NCw3IEBACiAJCQkgKiBTZWFyY2ggdGhyb3VnaCB0aGUgaXNzdWVfcXVldWUgZm9yIGEgY29tbWFuZCBkZXN0aW5lZAogCQkJICogZm9yIGEgdGFyZ2V0IHRoYXQncyBub3QgYnVzeS4KIAkJCSAqLwotCQkJZm9yICh0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwgcHJldiA9IE5VTEw7IHRtcDsgcHJldiA9IHRtcCwgdG1wID0gKFNjc2lfQ21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpIAorCQkJZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWUsIHByZXYgPSBOVUxMOyB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKIAkJCXsKIAkJCQlpZiAocHJldiAhPSB0bXApCiAJCQkJICAgIGRwcmludGsoTkRFQlVHX0xJU1RTLCAiTUFJTiB0bXA9JXAgICB0YXJnZXQ9JWQgICBidXN5PSVkIGx1bj0lbGx1XG4iLCB0bXAsIHRtcC0+ZGV2aWNlLT5pZCwgaG9zdGRhdGEtPmJ1c3lbdG1wLT5kZXZpY2UtPmlkXSwgdG1wLT5kZXZpY2UtPmx1bik7CkBAIC0xMDQ4LDcgKzEwMDYsNyBAQAogCQkJCQkJcHJldi0+aG9zdF9zY3JpYmJsZSA9IHRtcC0+aG9zdF9zY3JpYmJsZTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCVJFTU9WRSgtMSwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLCB0bXAsIHRtcC0+aG9zdF9zY3JpYmJsZSk7Ci0JCQkJCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKKwkJCQkJCWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKIAkJCQkJfQogCQkJCQl0bXAtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCkBAIC0xMDczLDE0ICsxMDMxLDE0IEBACiAJCQkJCWhvc3RkYXRhLT5zZWxlY3RpbmcgPSBOVUxMOwogCQkJCQkvKiBSdkM6IGhhdmUgdG8gcHJlc2V0IHRoaXMgdG8gaW5kaWNhdGUgYSBuZXcgY29tbWFuZCBpcyBiZWluZyBwZXJmb3JtZWQgKi8KIAotCQkJCQlpZiAoIU5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCB0bXAsCi0JCQkJCQkJICAgIC8qIAotCQkJCQkJCSAgICAgKiBSRVFVRVNUIFNFTlNFIGNvbW1hbmRzIGFyZSBpc3N1ZWQgd2l0aG91dCB0YWdnZWQKLQkJCQkJCQkgICAgICogcXVldWVpbmcsIGV2ZW4gb24gU0NTSS1JSSBkZXZpY2VzIGJlY2F1c2UgdGhlIAotCQkJCQkJCSAgICAgKiBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9uIGV4aXN0cyBmb3IgdGhlIAotCQkJCQkJCSAgICAgKiBlbnRpcmUgdW5pdC4KLQkJCQkJCQkgICAgICovCi0JCQkJCQkJICAgICh0bXAtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgPyBUQUdfTk9ORSA6IFRBR19ORVhUKSkgeworCQkJCQkvKgorCQkJCQkgKiBSRVFVRVNUIFNFTlNFIGNvbW1hbmRzIGFyZSBpc3N1ZWQgd2l0aG91dCB0YWdnZWQKKwkJCQkJICogcXVldWVpbmcsIGV2ZW4gb24gU0NTSS1JSSBkZXZpY2VzIGJlY2F1c2UgdGhlCisJCQkJCSAqIGNvbnRpbmdlbnQgYWxsZWdpYW5jZSBjb25kaXRpb24gZXhpc3RzIGZvciB0aGUKKwkJCQkJICogZW50aXJlIHVuaXQuCisJCQkJCSAqLworCisJCQkJCWlmICghTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIHRtcCkpIHsKIAkJCQkJCWJyZWFrOwogCQkJCQl9IGVsc2UgewogCQkJCQkJTElTVCh0bXAsIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSk7CkBAIC0xMDk1LDkgKzEwNTMsOSBAQAogCQkJLyogZXhpdGVkIGxvY2tlZCAqLwogCQl9CS8qIGlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkgKi8KIAkJaWYgKGhvc3RkYXRhLT5zZWxlY3RpbmcpIHsKLQkJCXRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPnNlbGVjdGluZzsKKwkJCXRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5zZWxlY3Rpbmc7CiAJCQkvKiBTZWxlY3Rpb24gd2lsbCBkcm9wIGFuZCByZXRha2UgdGhlIGxvY2sgKi8KLQkJCWlmICghTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIHRtcCwgKHRtcC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSA/IFRBR19OT05FIDogVEFHX05FWFQpKSB7CisJCQlpZiAoIU5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCB0bXApKSB7CiAJCQkJLyogT2sgPz8gKi8KIAkJCX0gZWxzZSB7CiAJCQkJLyogUnZDOiBkZXZpY2UgZmFpbGVkLCBzbyB3ZSB3YWl0IGEgbG9uZyB0aW1lCkBAIC0xMjE2LDQ3ICsxMTc0LDE2IEBACiAKICNlbmRpZiAKIAotLyoqCi0gKgljb2xsZWN0X3N0YXRzCQktCWNvbGxlY3Qgc3RhdHMgb24gYSBzY3NpIGNvbW1hbmQKLSAqCUBob3N0ZGF0YTogYWRhcHRlciAKLSAqCUBjbWQ6IGNvbW1hbmQgYmVpbmcgaXNzdWVkCi0gKgotICoJVXBkYXRlIHRoZSBzdGF0aXN0aWNhbCBkYXRhIGJ5IHBhcnNpbmcgdGhlIGNvbW1hbmQgaW4gcXVlc3Rpb24KLSAqLwotIAotc3RhdGljIHZvaWQgY29sbGVjdF9zdGF0cyhzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEsIFNjc2lfQ21uZCAqIGNtZCkgCi17Ci0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCXN3aXRjaCAoY21kLT5jbW5kWzBdKSB7Ci0JY2FzZSBXUklURToKLQljYXNlIFdSSVRFXzY6Ci0JY2FzZSBXUklURV8xMDoKLQkJaG9zdGRhdGEtPnRpbWVfd3JpdGVbc2NtZF9pZChjbWQpXSArPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCWhvc3RkYXRhLT5wZW5kaW5ndy0tOwotCQlicmVhazsKLQljYXNlIFJFQUQ6Ci0JY2FzZSBSRUFEXzY6Ci0JY2FzZSBSRUFEXzEwOgotCQlob3N0ZGF0YS0+dGltZV9yZWFkW3NjbWRfaWQoY21kKV0gKz0gKGppZmZpZXMgLSBob3N0ZGF0YS0+dGltZWJhc2UpOwotCQlob3N0ZGF0YS0+cGVuZGluZ3ItLTsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi19Ci0KLQogLyogCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3NlbGVjdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIFNjc2lfQ21uZCAqY21kLCAKLSAqICAgICAgaW50IHRhZyk7CisgKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKICAqCiAgKiBQdXJwb3NlIDogZXN0YWJsaXNoZXMgSV9UX0wgb3IgSV9UX0xfUSBuZXh1cyBmb3IgbmV3IG9yIGV4aXN0aW5nIGNvbW1hbmQsCiAgKiAgICAgIGluY2x1ZGluZyBBUkJJVFJBVElPTiwgU0VMRUNUSU9OLCBhbmQgaW5pdGlhbCBtZXNzYWdlIG91dCBmb3IgCiAgKiAgICAgIElERU5USUZZIGFuZCBxdWV1ZSBtZXNzYWdlcy4gCiAgKgogICogSW5wdXRzIDogaW5zdGFuY2UgLSBpbnN0YW50aWF0aW9uIG9mIHRoZSA1MzgwIGRyaXZlciBvbiB3aGljaCB0aGlzIAotICogICAgICB0YXJnZXQgbGl2ZXMsIGNtZCAtIFNDU0kgY29tbWFuZCB0byBleGVjdXRlLCB0YWcgLSBzZXQgdG8gVEFHX05FWFQgZm9yIAotICogICAgICBuZXcgdGFnLCBUQUdfTk9ORSBmb3IgdW50YWdnZWQgcXVldWVpbmcsIG90aGVyd2lzZSBzZXQgdG8gdGhlIHRhZyBmb3IgCi0gKiAgICAgIHRoZSBjb21tYW5kIHRoYXQgaXMgcHJlc2VudGx5IGNvbm5lY3RlZC4KKyAqICAgICAgdGFyZ2V0IGxpdmVzLCBjbWQgLSBTQ1NJIGNvbW1hbmQgdG8gZXhlY3V0ZS4KICAqIAogICogUmV0dXJucyA6IC0xIGlmIHNlbGVjdGlvbiBjb3VsZCBub3QgZXhlY3V0ZSBmb3Igc29tZSByZWFzb24sCiAgKiAgICAgIDAgaWYgc2VsZWN0aW9uIHN1Y2NlZWRlZCBvciBmYWlsZWQgYmVjYXVzZSB0aGUgdGFyZ2V0IApAQCAtMTI3OCw3ICsxMjA1LDcgQEAKICAqCUxvY2tzOiBjYWxsZXIgaG9sZHMgaG9zdGRhdGEgbG9jayBpbiBJUlEgbW9kZQogICovCiAgCi1zdGF0aWMgaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBTY3NpX0NtbmQgKiBjbWQsIGludCB0YWcpIAorc3RhdGljIGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwogCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKSBpbnN0YW5jZS0+aG9zdGRhdGE7CkBAIC0xNDc2LDcgKzE0MDMsNiBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWNtZC0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7Ci0JCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7CiAJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKIAkJZHByaW50ayhOREVCVUdfU0VMRUNUSU9OLCAic2NzaSVkIDogdGFyZ2V0IGRpZCBub3QgcmVzcG9uZCB3aXRoaW4gMjUwbXNcbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKQEAgLTE1MTMsNyArMTQzOSw3IEBACiAJfQogCiAJZHByaW50ayhOREVCVUdfU0VMRUNUSU9OLCAic2NzaSVkIDogdGFyZ2V0ICVkIHNlbGVjdGVkLCBnb2luZyBpbnRvIE1FU1NBR0UgT1VUIHBoYXNlLlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8sIGNtZC0+ZGV2aWNlLT5pZCk7Ci0JdG1wWzBdID0gSURFTlRJRlkoKChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpID8gMCA6IDEpLCBjbWQtPmRldmljZS0+bHVuKTsKKwl0bXBbMF0gPSBJREVOVElGWSgoKGluc3RhbmNlLT5pcnEgPT0gTk9fSVJRKSA/IDAgOiAxKSwgY21kLT5kZXZpY2UtPmx1bik7CiAKIAlsZW4gPSAxOwogCWNtZC0+dGFnID0gMDsKQEAgLTIwODYsNyArMjAxMiw3IEBACiAjZW5kaWYKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwogCXVuc2lnbmVkIGNoYXIgcGhhc2UsIHRtcCwgZXh0ZW5kZWRfbXNnWzEwXSwgb2xkX3BoYXNlID0gMHhmZjsKLQlTY3NpX0NtbmQgKmNtZCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZDsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkOwogCS8qIFJ2Qzogd2UgbmVlZCB0byBzZXQgdGhlIGVuZCBvZiB0aGUgcG9sbGluZyB0aW1lICovCiAJdW5zaWduZWQgbG9uZyBwb2xsX3RpbWUgPSBqaWZmaWVzICsgVVNMRUVQX1BPTEw7CiAKQEAgLTIyMjgsNyArMjE1NCw2IEBACiAJCQkJCWNtZC0+bmV4dF9saW5rLT50YWcgPSBjbWQtPnRhZzsKIAkJCQkJY21kLT5yZXN1bHQgPSBjbWQtPlNDcC5TdGF0dXMgfCAoY21kLT5TQ3AuTWVzc2FnZSA8PCA4KTsKIAkJCQkJZHByaW50ayhOREVCVUdfTElOS0VELCAic2NzaSVkIDogdGFyZ2V0ICVkIGx1biAlbGx1IGxpbmtlZCByZXF1ZXN0IGRvbmUsIGNhbGxpbmcgc2NzaV9kb25lKCkuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQkJCQkJY29sbGVjdF9zdGF0cyhob3N0ZGF0YSwgY21kKTsKIAkJCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKIAkJCQkJY21kID0gaG9zdGRhdGEtPmNvbm5lY3RlZDsKIAkJCQkJYnJlYWs7CkBAIC0yMjYzLDcgKzIxODgsNiBAQAogCQkJCQllbHNlIGlmIChzdGF0dXNfYnl0ZShjbWQtPlNDcC5TdGF0dXMpICE9IEdPT0QpCiAJCQkJCQljbWQtPnJlc3VsdCA9IChjbWQtPnJlc3VsdCAmIDB4MDBmZmZmKSB8IChESURfRVJST1IgPDwgMTYpOwogCi0jaWZkZWYgQVVUT1NFTlNFCiAJCQkJCWlmICgoY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpICYmCiAJCQkJCQlob3N0ZGF0YS0+c2VzLmNtZF9sZW4pIHsKIAkJCQkJCXNjc2lfZWhfcmVzdG9yZV9jbW5kKGNtZCwgJmhvc3RkYXRhLT5zZXMpOwpAQCAtMjI3OCwxMiArMjIwMiw5IEBACiAJCQkJCQlMSVNUKGNtZCwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKTsKIAkJCQkJCWNtZC0+aG9zdF9zY3JpYmJsZSA9ICh1bnNpZ25lZCBjaGFyICopCiAJCQkJCQkgICAgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOwotCQkJCQkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gKFNjc2lfQ21uZCAqKSBjbWQ7CisJCQkJCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBjbWQ7CiAJCQkJCQlkcHJpbnRrKE5ERUJVR19RVUVVRVMsICJzY3NpJWQgOiBSRVFVRVNUIFNFTlNFIGFkZGVkIHRvIGhlYWQgb2YgaXNzdWUgcXVldWVcbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLQkJCQkJfSBlbHNlCi0jZW5kaWYJCQkJLyogZGVmIEFVVE9TRU5TRSAqLwotCQkJCQl7Ci0JCQkJCQljb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOworCQkJCQl9IGVsc2UgewogCQkJCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKIAkJCQkJfQogCkBAIC0yNDMwLDcgKzIzNTEsNiBAQAogCQkJCQlob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICY9IH4oMSA8PCAoY21kLT5kZXZpY2UtPmx1biAmIDB4RkYpKTsKIAkJCQkJaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7CiAJCQkJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQkJCQljb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOwogCQkJCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQkJCQlOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7CiAJCQkJCXJldHVybjsKQEAgLTI0NzksNyArMjM5OSw3IEBACiAgKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9yZXNlbGVjdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiAgKgogICogUHVycG9zZSA6IGRvZXMgcmVzZWxlY3Rpb24sIGluaXRpYWxpemluZyB0aGUgaW5zdGFuY2UtPmNvbm5lY3RlZCAKLSAqICAgICAgZmllbGQgdG8gcG9pbnQgdG8gdGhlIFNjc2lfQ21uZCBmb3Igd2hpY2ggdGhlIElfVF9MIG9yIElfVF9MX1EgCisgKiAgICAgIGZpZWxkIHRvIHBvaW50IHRvIHRoZSBzY3NpX2NtbmQgZm9yIHdoaWNoIHRoZSBJX1RfTCBvciBJX1RfTF9RCiAgKiAgICAgIG5leHVzIGhhcyBiZWVuIHJlZXN0YWJsaXNoZWQsCiAgKiAgICAgIAogICogSW5wdXRzIDogaW5zdGFuY2UgLSB0aGlzIGluc3RhbmNlIG9mIHRoZSBOQ1I1MzgwLgpAQCAtMjQ5Niw3ICsyNDE2LDcgQEAKIAlpbnQgbGVuOwogCXVuc2lnbmVkIGNoYXIgbXNnWzNdOwogCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0JU2NzaV9DbW5kICp0bXAgPSBOVUxMLCAqcHJldjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXAgPSBOVUxMLCAqcHJldjsKIAlpbnQgYWJvcnQgPSAwOwogCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCkBAIC0yNTYyLDcgKzI0ODIsNyBAQAogCQkgKi8KIAogCi0JCWZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCBwcmV2ID0gTlVMTDsgdG1wOyBwcmV2ID0gdG1wLCB0bXAgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKKwkJZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCBwcmV2ID0gTlVMTDsgdG1wOyBwcmV2ID0gdG1wLCB0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpCiAJCQlpZiAoKHRhcmdldF9tYXNrID09ICgxIDw8IHRtcC0+ZGV2aWNlLT5pZCkpICYmIChsdW4gPT0gKHU4KXRtcC0+ZGV2aWNlLT5sdW4pCiAJCQkgICAgKSB7CiAJCQkJaWYgKHByZXYpIHsKQEAgLTI1NzAsNyArMjQ5MCw3IEBACiAJCQkJCXByZXYtPmhvc3Rfc2NyaWJibGUgPSB0bXAtPmhvc3Rfc2NyaWJibGU7CiAJCQkJfSBlbHNlIHsKIAkJCQkJUkVNT1ZFKC0xLCBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCB0bXAsIHRtcC0+aG9zdF9zY3JpYmJsZSk7Ci0JCQkJCWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKKwkJCQkJaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKIAkJCQl9CiAJCQkJdG1wLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAkJCQlicmVhazsKQEAgLTI2MDEsNyArMjUyMSw3IEBACiAgKgogICogSW5wdXRzIDogaW5zdGFuY2UgLSB0aGlzIGluc3RhbmNlIG9mIHRoZSBOQ1I1MzgwLgogICoKLSAqIFJldHVybnMgOiBwb2ludGVyIHRvIHRoZSBTY3NpX0NtbmQgc3RydWN0dXJlIGZvciB3aGljaCB0aGUgSV9UX0wKKyAqIFJldHVybnMgOiBwb2ludGVyIHRvIHRoZSBzY3NpX2NtbmQgc3RydWN0dXJlIGZvciB3aGljaCB0aGUgSV9UX0wKICAqICAgICAgbmV4dXMgaGFzIGJlZW4gcmVlc3RhYmxpc2hlZCwgb24gZmFpbHVyZSBOVUxMIGlzIHJldHVybmVkLgogICovCiAKQEAgLTI2NDMsMzIgKzI1NjMsMzIgQEAKICNlbmRpZgkJCQkvKiBkZWYgUkVBTF9ETUEgKi8KIAogLyoKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYWJvcnQgKFNjc2lfQ21uZCAqY21kKQorICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9hYm9ydCAoc3RydWN0IHNjc2lfY21uZCAqY21kKQogICoKICAqIFB1cnBvc2UgOiBhYm9ydCBhIGNvbW1hbmQKICAqCi0gKiBJbnB1dHMgOiBjbWQgLSB0aGUgU2NzaV9DbW5kIHRvIGFib3J0LCBjb2RlIC0gY29kZSB0byBzZXQgdGhlIAotICogICAgICBob3N0IGJ5dGUgb2YgdGhlIHJlc3VsdCBmaWVsZCB0bywgaWYgemVybyBESURfQUJPUlRFRCBpcyAKKyAqIElucHV0cyA6IGNtZCAtIHRoZSBzY3NpX2NtbmQgdG8gYWJvcnQsIGNvZGUgLSBjb2RlIHRvIHNldCB0aGUKKyAqICAgICAgaG9zdCBieXRlIG9mIHRoZSByZXN1bHQgZmllbGQgdG8sIGlmIHplcm8gRElEX0FCT1JURUQgaXMKICAqICAgICAgdXNlZC4KICAqCi0gKiBSZXR1cm5zIDogMCAtIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKiBSZXR1cm5zIDogU1VDQ0VTUyAtIHN1Y2Nlc3MsIEZBSUxFRCBvbiBmYWlsdXJlLgogICoKLSAqCVhYWCAtIHRoZXJlIGlzIG5vIHdheSB0byBhYm9ydCB0aGUgY29tbWFuZCB0aGF0IGlzIGN1cnJlbnRseSAKLSAqCWNvbm5lY3RlZCwgeW91IGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuICBJZiB0aGlzIGlzIAorICoJWFhYIC0gdGhlcmUgaXMgbm8gd2F5IHRvIGFib3J0IHRoZSBjb21tYW5kIHRoYXQgaXMgY3VycmVudGx5CisgKgljb25uZWN0ZWQsIHlvdSBoYXZlIHRvIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlLiAgSWYgdGhpcyBpcwogICoJYSBwcm9ibGVtLCB3ZSBjb3VsZCBpbXBsZW1lbnQgbG9uZ2ptcCgpIC8gc2V0am1wKCksIHNldGptcCgpCiAgKgljYWxsZWQgd2hlcmUgdGhlIGxvb3Agc3RhcnRlZCBpbiBOQ1I1MzgwX21haW4oKS4KICAqCiAgKiBMb2NrczogaG9zdCBsb2NrIHRha2VuIGJ5IGNhbGxlcgogICovCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9hYm9ydChTY3NpX0NtbmQgKiBjbWQpIHsKK3N0YXRpYyBpbnQgTkNSNTM4MF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CiAJTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCk7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSAoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgaW5zdGFuY2UtPmhvc3RkYXRhOwotCVNjc2lfQ21uZCAqdG1wLCAqKnByZXY7Ci0JCi0JcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogYWJvcnRpbmcgY29tbWFuZFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCXNjc2lfcHJpbnRfY29tbWFuZChjbWQpOworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcCwgKipwcmV2OworCisJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBjbWQsICJhYm9ydGluZyBjb21tYW5kXG4iKTsKIAogCU5DUjUzODBfcHJpbnRfc3RhdHVzKGluc3RhbmNlKTsKIApAQCAtMjcwNCw3ICsyNjI0LDcgQEAKICAqIGFib3J0ZWQgZmxhZyBhbmQgZ2V0IGJhY2sgaW50byBvdXIgbWFpbiBsb29wLgogICovCiAKLQkJcmV0dXJuIDA7CisJCXJldHVybiBTVUNDRVNTOwogCX0KICNlbmRpZgogCkBAIC0yNzE0LDEwICsyNjM0LDEwIEBACiAgKi8KICAKIAlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZCA6IGFib3J0IGdvaW5nIGludG8gbG9vcC5cbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLQlmb3IgKHByZXYgPSAoU2NzaV9DbW5kICoqKSAmIChob3N0ZGF0YS0+aXNzdWVfcXVldWUpLCB0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgdG1wOyBwcmV2ID0gKFNjc2lfQ21uZCAqKikgJiAodG1wLT5ob3N0X3NjcmliYmxlKSwgdG1wID0gKFNjc2lfQ21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpCisJZm9yIChwcmV2ID0gKHN0cnVjdCBzY3NpX2NtbmQgKiopICYoaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKSwgdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyB0bXA7IHByZXYgPSAoc3RydWN0IHNjc2lfY21uZCAqKikgJih0bXAtPmhvc3Rfc2NyaWJibGUpLCB0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGUpCiAJCWlmIChjbWQgPT0gdG1wKSB7CiAJCQlSRU1PVkUoNSwgKnByZXYsIHRtcCwgdG1wLT5ob3N0X3NjcmliYmxlKTsKLQkJCSgqcHJldikgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKKwkJCSgqcHJldikgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGU7CiAJCQl0bXAtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCQkJdG1wLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CiAJCQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZCA6IGFib3J0IHJlbW92ZWQgY29tbWFuZCBmcm9tIGlzc3VlIHF1ZXVlLlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwpAQCAtMjc3MCwyMCArMjY5MCwyMCBAQAogICogaXQgZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlLgogICovCiAKLQlmb3IgKHRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgdG1wOyB0bXAgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKKwlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHRtcDsgdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlKQogCQlpZiAoY21kID09IHRtcCkgewogCQkJZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQgOiBhYm9ydGluZyBkaXNjb25uZWN0ZWQgY29tbWFuZC5cbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKIAotCQkJaWYgKE5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCBjbWQsIChpbnQpIGNtZC0+dGFnKSkKKwkJCWlmIChOQ1I1MzgwX3NlbGVjdChpbnN0YW5jZSwgY21kKSkKIAkJCQlyZXR1cm4gRkFJTEVEOwogCQkJZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQgOiBuZXh1cyByZWVzdGFibGlzaGVkLlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCiAJCQlkb19hYm9ydChpbnN0YW5jZSk7CiAKLQkJCWZvciAocHJldiA9IChTY3NpX0NtbmQgKiopICYgKGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUpLCB0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHRtcDsgcHJldiA9IChTY3NpX0NtbmQgKiopICYgKHRtcC0+aG9zdF9zY3JpYmJsZSksIHRtcCA9IChTY3NpX0NtbmQgKikgdG1wLT5ob3N0X3NjcmliYmxlKQorCQkJZm9yIChwcmV2ID0gKHN0cnVjdCBzY3NpX2NtbmQgKiopICYoaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSksIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHRtcDsgcHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSAmKHRtcC0+aG9zdF9zY3JpYmJsZSksIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZSkKIAkJCQlpZiAoY21kID09IHRtcCkgewogCQkJCQlSRU1PVkUoNSwgKnByZXYsIHRtcCwgdG1wLT5ob3N0X3NjcmliYmxlKTsKLQkJCQkJKnByZXYgPSAoU2NzaV9DbW5kICopIHRtcC0+aG9zdF9zY3JpYmJsZTsKKwkJCQkJKnByZXYgPSAoc3RydWN0IHNjc2lfY21uZCAqKSB0bXAtPmhvc3Rfc2NyaWJibGU7CiAJCQkJCXRtcC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAJCQkJCXRtcC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQkJCQl0bXAtPnNjc2lfZG9uZSh0bXApOwpAQCAtMjgwNiw3ICsyNzI2LDcgQEAKIAogCiAvKiAKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYnVzX3Jlc2V0IChTY3NpX0NtbmQgKmNtZCkKKyAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYnVzX3Jlc2V0IChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiAgKiAKICAqIFB1cnBvc2UgOiByZXNldCB0aGUgU0NTSSBidXMuCiAgKgpAQCAtMjgxNSw3ICsyNzM1LDcgQEAKICAqIExvY2tzOiBob3N0IGxvY2sgdGFrZW4gYnkgY2FsbGVyCiAgKi8KIAotc3RhdGljIGludCBOQ1I1MzgwX2J1c19yZXNldChTY3NpX0NtbmQgKiBjbWQpCitzdGF0aWMgaW50IE5DUjUzODBfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5oIGIvZHJpdmVycy9zY3NpL05DUjUzODAuaAppbmRleCBjNzlkZGZhLi4xNjIxMTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5oCisrKyBiL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmgKQEAgLTcsOCArNyw2IEBACiAgKiAJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNjY2LTU4MzYKICAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSA3Ci0gKgogICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0IAogICoKICAqIE5DUiA1MzgwIEZhbWlseQpAQCAtMjUsMTMgKzIzLDcgQEAKICNkZWZpbmUgTkNSNTM4MF9ICiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotI2lmZGVmIEFVVE9TRU5TRQogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSA3Ci0jZGVmaW5lIE5DUjUzQzQwMF9QVUJMSUNfUkVMRUFTRSAyCiAKICNkZWZpbmUgTkRFQlVHX0FSQklUUkFUSU9OCTB4MQogI2RlZmluZSBOREVCVUdfQVVUT1NFTlNFCTB4MgpAQCAtMjI0LDMzICsyMTYsNDQgQEAKICNkZWZpbmUgRElTQ09OTkVDVF9MT05HCQkyCiAKIC8qIAotICogVGhlc2UgYXJlICJzcGVjaWFsIiB2YWx1ZXMgZm9yIHRoZSB0YWcgcGFyYW1ldGVyIHBhc3NlZCB0byBOQ1I1MzgwX3NlbGVjdC4KKyAqICJTcGVjaWFsIiB2YWx1ZSBmb3IgdGhlICh1bnNpZ25lZCBjaGFyKSBjb21tYW5kIHRhZywgdG8gaW5kaWNhdGUKKyAqIElfVF9MIG5leHVzIGluc3RlYWQgb2YgSV9UX0xfUS4KICAqLwogCi0jZGVmaW5lIFRBR19ORVhUCS0xCS8qIFVzZSBuZXh0IGZyZWUgdGFnICovCi0jZGVmaW5lIFRBR19OT05FCS0yCS8qIAotCQkJCSAqIEVzdGFibGlzaCBJX1RfTCBuZXh1cyBpbnN0ZWFkIG9mIElfVF9MX1EKLQkJCQkgKiBldmVuIG9uIFNDU0ktSUkgZGV2aWNlcy4KLQkJCQkgKi8KKyNkZWZpbmUgVEFHX05PTkUJMHhmZgogCiAvKgogICogVGhlc2UgYXJlICJzcGVjaWFsIiB2YWx1ZXMgZm9yIHRoZSBpcnEgYW5kIGRtYV9jaGFubmVsIGZpZWxkcyBvZiB0aGUgCiAgKiBTY3NpX0hvc3Qgc3RydWN0dXJlCiAgKi8KIAotI2RlZmluZSBTQ1NJX0lSUV9OT05FCTI1NQogI2RlZmluZSBETUFfTk9ORQkyNTUKICNkZWZpbmUgSVJRX0FVVE8JMjU0CiAjZGVmaW5lIERNQV9BVVRPCTI1NAogI2RlZmluZSBQT1JUX0FVVE8JMHhmZmZmCS8qIGF1dG9wcm9iZSBpbyBwb3J0IGZvciA1M2M0MDBhICovCiAKKyNpZm5kZWYgTk9fSVJRCisjZGVmaW5lIE5PX0lSUQkJMAorI2VuZGlmCisKICNkZWZpbmUgRkxBR19IQVNfTEFTVF9CWVRFX1NFTlQJCTEJLyogTkNSNTNjODEgb3IgYmV0dGVyICovCiAjZGVmaW5lIEZMQUdfQ0hFQ0tfTEFTVF9CWVRFX1NFTlQJMgkvKiBPbmx5IHRlc3Qgb25jZSAqLwogI2RlZmluZSBGTEFHX05DUjUzQzQwMAkJCTQJLyogTkNSNTNjNDAwICovCiAjZGVmaW5lIEZMQUdfTk9fUFNFVURPX0RNQQkJOAkvKiBJbmhpYml0IERNQSAqLwogI2RlZmluZSBGTEFHX0RUQzMxODFFCQkJMTYJLyogRFRDMzE4MUUgKi8KKyNkZWZpbmUgRkxBR19MQVRFX0RNQV9TRVRVUAkJMzIJLyogU2V0dXAgTkNSIGJlZm9yZSBETUEgSC9XICovCisjZGVmaW5lIEZMQUdfVEFHR0VEX1FVRVVJTkcJCTY0CS8qIGFzIFgzVDkuMiBzcGVsbGVkIGl0ICovCiAKICNpZm5kZWYgQVNNCisKKyNpZmRlZiBTVVBQT1JUX1RBR1MKK3N0cnVjdCB0YWdfYWxsb2MgeworCURFQ0xBUkVfQklUTUFQKGFsbG9jYXRlZCwgTUFYX1RBR1MpOworCWludCBucl9hbGxvY2F0ZWQ7CisJaW50IHF1ZXVlX3NpemU7Cit9OworI2VuZGlmCisKIHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhIHsKIAlOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkczsJCS8qIGltcGxlbWVudGF0aW9uIHNwZWNpZmljICovCiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsJCQkvKiBIb3N0IGJhY2twb2ludGVyICovCkBAIC0yNjMsOSArMjY2LDkgQEAKIAl2b2xhdGlsZSBpbnQgZG1hX2xlbjsJCQkvKiByZXF1ZXN0ZWQgbGVuZ3RoIG9mIERNQSAqLwogI2VuZGlmCiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBsYXN0X21lc3NhZ2U7CS8qIGxhc3QgbWVzc2FnZSBPVVQgKi8KLQl2b2xhdGlsZSBTY3NpX0NtbmQgKmNvbm5lY3RlZDsJCS8qIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZCAqLwotCXZvbGF0aWxlIFNjc2lfQ21uZCAqaXNzdWVfcXVldWU7CS8qIHdhaXRpbmcgdG8gYmUgaXNzdWVkICovCi0Jdm9sYXRpbGUgU2NzaV9DbW5kICpkaXNjb25uZWN0ZWRfcXVldWU7CS8qIHdhaXRpbmcgZm9yIHJlY29ubmVjdCAqLworCXZvbGF0aWxlIHN0cnVjdCBzY3NpX2NtbmQgKmNvbm5lY3RlZDsJLyogY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kICovCisJdm9sYXRpbGUgc3RydWN0IHNjc2lfY21uZCAqaXNzdWVfcXVldWU7CS8qIHdhaXRpbmcgdG8gYmUgaXNzdWVkICovCisJdm9sYXRpbGUgc3RydWN0IHNjc2lfY21uZCAqZGlzY29ubmVjdGVkX3F1ZXVlOwkvKiB3YWl0aW5nIGZvciByZWNvbm5lY3QgKi8KIAl2b2xhdGlsZSBpbnQgcmVzdGFydF9zZWxlY3Q7CQkvKiB3ZSBoYXZlIGRpc2Nvbm5lY3RlZCwKIAkJCQkJCSAgIHVzZWQgdG8gcmVzdGFydCAKIAkJCQkJCSAgIE5DUjUzODBfc2VsZWN0KCkgKi8KQEAgLTI3MywxOSArMjc2LDIxIEBACiAJaW50IGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdGltZV9leHBpcmVzOwkJLyogaW4gamlmZmllcywgc2V0IHByaW9yIHRvIHNsZWVwaW5nICovCiAJaW50IHNlbGVjdF90aW1lOwkJCS8qIHRpbWVyIGluIHNlbGVjdCBmb3IgdGFyZ2V0IHJlc3BvbnNlICovCi0Jdm9sYXRpbGUgU2NzaV9DbW5kICpzZWxlY3Rpbmc7CisJdm9sYXRpbGUgc3RydWN0IHNjc2lfY21uZCAqc2VsZWN0aW5nOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgY29yb3V0aW5lOwkJLyogb3VyIGNvLXJvdXRpbmUgKi8KLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JdW5zaWduZWQgdGltZWJhc2U7CQkJLyogQmFzZSBmb3IgdGltZSBjYWxjcyAqLwotCWxvbmcgdGltZV9yZWFkWzhdOwkJCS8qIHRpbWUgdG8gZG8gcmVhZHMgKi8KLQlsb25nIHRpbWVfd3JpdGVbOF07CQkJLyogdGltZSB0byBkbyB3cml0ZXMgKi8KLQl1bnNpZ25lZCBsb25nIGJ5dGVzX3JlYWRbOF07CQkvKiBieXRlcyByZWFkICovCi0JdW5zaWduZWQgbG9uZyBieXRlc193cml0ZVs4XTsJCS8qIGJ5dGVzIHdyaXR0ZW4gKi8KLQl1bnNpZ25lZCBwZW5kaW5ncjsKLQl1bnNpZ25lZCBwZW5kaW5ndzsKLSNlbmRpZgotI2lmZGVmIEFVVE9TRU5TRQogCXN0cnVjdCBzY3NpX2VoX3NhdmUgc2VzOworCWNoYXIgaW5mb1syNTZdOworCWludCByZWFkX292ZXJydW5zOyAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgdG8gY3V0IGZyb20gYQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0cmFuc2ZlciB0byBoYW5kbGUgY2hpcCBvdmVycnVucyAqLworCWludCByZXRhaW5fZG1hX2ludHI7CisJc3RydWN0IHdvcmtfc3RydWN0IG1haW5fdGFzazsKKwl2b2xhdGlsZSBpbnQgbWFpbl9ydW5uaW5nOworI2lmZGVmIFNVUFBPUlRfVEFHUworCXN0cnVjdCB0YWdfYWxsb2MgVGFnQWxsb2NbOF1bOF07CS8qIDggdGFyZ2V0cyBhbmQgOCBMVU5zICovCisjZW5kaWYKKyNpZmRlZiBQU0VVRE9fRE1BCisJdW5zaWduZWQgc3Bpbl9tYXhfcjsKKwl1bnNpZ25lZCBzcGluX21heF93OwogI2VuZGlmCiB9OwogCkBAIC0yOTYsNyArMzAxLDggQEAKICNlbmRpZgogCiAjZGVmaW5lIGRwcmludGsoZmxnLCBmbXQsIC4uLikgXAotCWRvIHsgaWYgKChOREVCVUcpICYgKGZsZykpIHByX2RlYnVnKGZtdCwgIyMgX19WQV9BUkdTX18pOyB9IHdoaWxlICgwKQorCWRvIHsgaWYgKChOREVCVUcpICYgKGZsZykpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgZm10LCAjIyBfX1ZBX0FSR1NfXyk7IH0gd2hpbGUgKDApCiAKICNpZiBOREVCVUcKICNkZWZpbmUgTkNSNTM4MF9kcHJpbnQoZmxnLCBhcmcpIFwKQEAgLTMyMCwxNyArMzI2LDkgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBOQ1I1MzgwX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKICNlbmRpZgogc3RhdGljIHZvaWQgTkNSNTM4MF9tYWluKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCBOQ1I1MzgwX3ByaW50X29wdGlvbnMoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpOwotc3RhdGljIGludCBOQ1I1MzgwX2Fib3J0KFNjc2lfQ21uZCAqIGNtZCk7Ci1zdGF0aWMgaW50IE5DUjUzODBfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqIGNtZCk7Ci1zdGF0aWMgaW50IE5DUjUzODBfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIE5DUjUzODBfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqLAotCXN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIE5DUjUzODBfd3JpdGVfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKLQljaGFyICpidWZmZXIsIGludCBsZW5ndGgpOwotCitzdGF0aWMgY29uc3QgY2hhciAqTkNSNTM4MF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKTsKIHN0YXRpYyB2b2lkIE5DUjUzODBfcmVzZWxlY3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpOwotc3RhdGljIGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgU2NzaV9DbW5kICogY21kLCBpbnQgdGFnKTsKK3N0YXRpYyBpbnQgTkNSNTM4MF9zZWxlY3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiAjaWYgZGVmaW5lZChQU0VVRE9fRE1BKSB8fCBkZWZpbmVkKFJFQUxfRE1BKSB8fCBkZWZpbmVkKFJFQUxfRE1BX1BPTEwpCiBzdGF0aWMgaW50IE5DUjUzODBfdHJhbnNmZXJfZG1hKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCB1bnNpZ25lZCBjaGFyICpwaGFzZSwgaW50ICpjb3VudCwgdW5zaWduZWQgY2hhciAqKmRhdGEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCmluZGV4IDY4MTQzNGUuLmIzMmU3N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCkBAIC0yMTgxLDcgKzIxODEsNyBAQAogCQkJICAoZnNhX2Rldl9wdHJbY2lkXS5zZW5zZV9kYXRhLnNlbnNlX2tleSA9PQogCQkJICAgTk9UX1JFQURZKSkgewogCQkJCXN3aXRjaCAoc2NzaWNtZC0+Y21uZFswXSkgewotCQkJCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisJCQkJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKIAkJCQkJaWYgKCEoZGV2LT5yYXdfaW9faW50ZXJmYWNlKSB8fAogCQkJCQkgICAgIShkZXYtPnJhd19pb182NCkgfHwKIAkJCQkJICAgICgoc2NzaWNtZC0+Y21uZFsxXSAmIDB4MWYpICE9IFNBSV9SRUFEX0NBUEFDSVRZXzE2KSkKQEAgLTIzMDksNyArMjMwOSw3IEBACiAJCXNjc2lfc2dfY29weV9mcm9tX2J1ZmZlcihzY3NpY21kLCAmaW5xX2RhdGEsIHNpemVvZihpbnFfZGF0YSkpOwogCQlyZXR1cm4gYWFjX2dldF9jb250YWluZXJfbmFtZShzY3NpY21kKTsKIAl9Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQlpZiAoIShkZXYtPnJhd19pb19pbnRlcmZhY2UpIHx8CiAJCSAgICAhKGRldi0+cmF3X2lvXzY0KSB8fAogCQkgICAgKChzY3NpY21kLT5jbW5kWzFdICYgMHgxZikgIT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKaW5kZXggYTc1OWNiMi4uZmRjZGY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCkBAIC00NjIsOSArNDYyLDkgQEAKIAkJCWRlcHRoID0gMjU2OwogCQllbHNlIGlmIChkZXB0aCA8IDIpCiAJCQlkZXB0aCA9IDI7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywgZGVwdGgpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBkZXB0aCk7CiAJfSBlbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIDEpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDc4LDEyICs0NzgsOCBAQAogICoJdG90YWwgY2FwYWNpdHkgYW5kIHRoZSBxdWV1ZSBkZXB0aCBzdXBwb3J0ZWQgYnkgdGhlIHRhcmdldCBkZXZpY2UuCiAgKi8KIAotc3RhdGljIGludCBhYWNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoLAotCQkJCSAgaW50IHJlYXNvbikKK3N0YXRpYyBpbnQgYWFjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKIHsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkICYmIChzZGV2LT50eXBlID09IFRZUEVfRElTSykgJiYKIAkgICAgKHNkZXZfY2hhbm5lbChzZGV2KSA9PSBDT05UQUlORVJfQ0hBTk5FTCkpIHsKIAkJc3RydWN0IHNjc2lfZGV2aWNlICogZGV2OwpAQCAtNTA0LDEwICs1MDAsMTAgQEAKIAkJCWRlcHRoID0gMjU2OwogCQllbHNlIGlmIChkZXB0aCA8IDIpCiAJCQlkZXB0aCA9IDI7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywgZGVwdGgpOwotCX0gZWxzZQotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCAxKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CisJCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBkZXB0aCk7CisJfQorCisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIDEpOwogfQogCiBzdGF0aWMgc3NpemVfdCBhYWNfc2hvd19yYWlkX2xldmVsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTU1NSw3ICs1NTEsNyBAQAogCQlBQUNfRFJJVkVSTkFNRSwKIAkJaG9zdC0+aG9zdF9ubywgc2Rldl9jaGFubmVsKGRldiksIHNkZXZfaWQoZGV2KSwgZGV2LT5sdW4pOwogCXN3aXRjaCAoY21kLT5jbW5kWzBdKSB7Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQlpZiAoIShhYWMtPnJhd19pb19pbnRlcmZhY2UpIHx8CiAJCSAgICAhKGFhYy0+cmF3X2lvXzY0KSB8fAogCQkgICAgKChjbWQtPmNtbmRbMV0gJiAweDFmKSAhPSBTQUlfUkVBRF9DQVBBQ0lUWV8xNikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCmluZGV4IDQzNzYxYzEuLjY3MTlhMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCkBAIC03NzA2LDcgKzc3MDYsNyBAQAogCQkJCWFzY19kdmMtPmNmZy0+Y2FuX3RhZ2dlZF9xbmcgfD0gdGlkX2JpdDsKIAkJCQlhc2NfZHZjLT51c2VfdGFnZ2VkX3FuZyB8PSB0aWRfYml0OwogCQkJfQotCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLAorCQkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgCiAJCQkJCQlhc2NfZHZjLT5tYXhfZHZjX3FuZ1tzZGV2LT5pZF0pOwogCQl9CiAJfSBlbHNlIHsKQEAgLTc3MTQsNyArNzcxNCw2IEBACiAJCQlhc2NfZHZjLT5jZmctPmNhbl90YWdnZWRfcW5nICY9IH50aWRfYml0OwogCQkJYXNjX2R2Yy0+dXNlX3RhZ2dlZF9xbmcgJj0gfnRpZF9iaXQ7CiAJCX0KLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOwogCX0KIAogCWlmICgoc2Rldi0+bHVuID09IDApICYmCkBAIC03ODQ4LDEyICs3ODQ3LDggQEAKIAkJfQogCX0KIAotCWlmICgoYWR2X2R2Yy0+dGFncW5nX2FibGUgJiB0aWRtYXNrKSAmJiBzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywKLQkJCQkJYWR2X2R2Yy0+bWF4X2R2Y19xbmcpOwotCX0gZWxzZSB7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKLQl9CisJaWYgKChhZHZfZHZjLT50YWdxbmdfYWJsZSAmIHRpZG1hc2spICYmIHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGFkdl9kdmMtPm1heF9kdmNfcW5nKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMgYi9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCmluZGV4IGU3N2I3MmYuLjJiOTYwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAgKgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIAorCiAgc2VlIERvY3VtZW50YXRpb24vc2NzaS9haGExNTJ4LnR4dCBmb3IgY29uZmlndXJhdGlvbiBkZXRhaWxzCiAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI3OSw0NSArMjc5LDExIEBACiAjZXJyb3IgZGVmaW5lIEFVVE9DT05GIG9yIFNFVFVQMAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0jZGVmaW5lIERFQlVHX0RFRkFVTFQgZGVidWdfZWgKLQotI2RlZmluZSBEUFJJTlRLKHdoZW4sbXNncy4uLikgXAotCWRvIHsgaWYoSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyAmICh3aGVuKSkgcHJpbnRrKG1zZ3MpOyB9IHdoaWxlKDApCi0KLSNkZWZpbmUgRE9fTE9DSyhmbGFncykJXAotCWRvIHsgXAotCQlpZihzcGluX2lzX2xvY2tlZCgmUUxPQ0spKSB7IFwKLQkJCURQUklOVEsoZGVidWdfaW50ciwgREVCVUdfTEVBRCAiKCVzOiVkKSBhbHJlYWR5IGxvY2tlZCBhdCAlczolZFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgX19mdW5jX18sIF9fTElORV9fLCBRTE9DS0VSLCBRTE9DS0VSTCk7IFwKLQkJfSBcCi0JCURQUklOVEsoZGVidWdfbG9ja2luZywgREVCVUdfTEVBRCAiKCVzOiVkKSBsb2NraW5nXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZRTE9DSyxmbGFncyk7IFwKLQkJRFBSSU5USyhkZWJ1Z19sb2NraW5nLCBERUJVR19MRUFEICIoJXM6JWQpIGxvY2tlZFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgX19mdW5jX18sIF9fTElORV9fKTsgXAotCQlRTE9DS0VSPV9fZnVuY19fOyBcCi0JCVFMT0NLRVJMPV9fTElORV9fOyBcCi0JfSB3aGlsZSgwKQotCi0jZGVmaW5lIERPX1VOTE9DSyhmbGFncykJXAotCWRvIHsgXAotCQlEUFJJTlRLKGRlYnVnX2xvY2tpbmcsIERFQlVHX0xFQUQgIiglczolZCkgdW5sb2NraW5nIChsb2NrZWQgYXQgJXM6JWQpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBfX2Z1bmNfXywgX19MSU5FX18sIFFMT0NLRVIsIFFMT0NLRVJMKTsgXAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZRTE9DSyxmbGFncyk7IFwKLQkJRFBSSU5USyhkZWJ1Z19sb2NraW5nLCBERUJVR19MRUFEICIoJXM6JWQpIHVubG9ja2VkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCi0JCVFMT0NLRVI9Iihub3QgbG9ja2VkKSI7IFwKLQkJUUxPQ0tFUkw9MDsgXAotCX0gd2hpbGUoMCkKLQotI2Vsc2UKLSNkZWZpbmUgRFBSSU5USyh3aGVuLG1zZ3MuLi4pCiAjZGVmaW5lCURPX0xPQ0soZmxhZ3MpCQlzcGluX2xvY2tfaXJxc2F2ZSgmUUxPQ0ssZmxhZ3MpCiAjZGVmaW5lCURPX1VOTE9DSyhmbGFncykJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUUxPQ0ssZmxhZ3MpCi0jZW5kaWYKIAogI2RlZmluZSBMRUFECQkiKHNjc2klZDolZDolZCkgIgotI2RlZmluZSBXQVJOX0xFQUQJS0VSTl9XQVJOSU5HCUxFQUQKICNkZWZpbmUgSU5GT19MRUFECUtFUk5fSU5GTwlMRUFECi0jZGVmaW5lIE5PVEVfTEVBRAlLRVJOX05PVElDRQlMRUFECi0jZGVmaW5lIEVSUl9MRUFECUtFUk5fRVJSCUxFQUQKLSNkZWZpbmUgREVCVUdfTEVBRAlLRVJOX0RFQlVHCUxFQUQKICNkZWZpbmUgQ01ESU5GTyhjbWQpIFwKIAkJCShjbWQpID8gKChjbWQpLT5kZXZpY2UtPmhvc3QtPmhvc3Rfbm8pIDogLTEsIFwKICAgICAgICAgICAgICAgICAgICAgICAgIChjbWQpID8gKChjbWQpLT5kZXZpY2UtPmlkICYgMHgwZikgOiAtMSwgXApAQCAtMzQ1LDEwICszMTEsMTAgQEAKIAogZW51bSB7CiAJbm90X2lzc3VlZAk9IDB4MDAwMSwJLyogY29tbWFuZCBub3QgeWV0IGlzc3VlZCAqLwotCXNlbGVjdGluZwk9IDB4MDAwMiwgCS8qIHRhcmdldCBpcyBiZWVpbmcgc2VsZWN0ZWQgKi8KKwlzZWxlY3RpbmcJPSAweDAwMDIsCS8qIHRhcmdldCBpcyBiZWluZyBzZWxlY3RlZCAqLwogCWlkZW50aWZpZWQJPSAweDAwMDQsCS8qIElERU5USUZZIHdhcyBzZW50ICovCiAJZGlzY29ubmVjdGVkCT0gMHgwMDA4LAkvKiB0YXJnZXQgZGlzY29ubmVjdGVkICovCi0JY29tcGxldGVkCT0gMHgwMDEwLAkvKiB0YXJnZXQgc2VudCBDT01NQU5EIENPTVBMRVRFICovIAorCWNvbXBsZXRlZAk9IDB4MDAxMCwJLyogdGFyZ2V0IHNlbnQgQ09NTUFORCBDT01QTEVURSAqLwogCWFib3J0ZWQJCT0gMHgwMDIwLAkvKiBBQk9SVCB3YXMgc2VudCAqLwogCXJlc2V0dGVkCT0gMHgwMDQwLAkvKiBCVVMgREVWSUNFIFJFU0VUIHdhcyBzZW50ICovCiAJc3Bpb3JkeQkJPSAweDAwODAsCS8qIHdhaXRpbmcgZm9yIFNQSU9SRFkgdG8gcmFpc2UgKi8KQEAgLTM5Niw3ICszNjIsNiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGV4dHRyYW5zLCBpbnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhleHR0cmFucywidXNlIGV4dGVuZGVkIHRyYW5zbGF0aW9uIik7CiAKLSNpZiAhZGVmaW5lZChBSEExNTJYX0RFQlVHKQogc3RhdGljIGludCBhaGExNTJ4W10gPSB7MCwgMTEsIDcsIDEsIDEsIDAsIERFTEFZX0RFRkFVTFQsIDB9OwogbW9kdWxlX3BhcmFtX2FycmF5KGFoYTE1MngsIGludCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFoYTE1MngsICJwYXJhbWV0ZXJzIGZvciBmaXJzdCBjb250cm9sbGVyIik7CkBAIC00MDQsMTkgKzM2OSw2IEBACiBzdGF0aWMgaW50IGFoYTE1MngxW10gPSB7MCwgMTEsIDcsIDEsIDEsIDAsIERFTEFZX0RFRkFVTFQsIDB9OwogbW9kdWxlX3BhcmFtX2FycmF5KGFoYTE1MngxLCBpbnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhhaGExNTJ4MSwgInBhcmFtZXRlcnMgZm9yIHNlY29uZCBjb250cm9sbGVyIik7Ci0jZWxzZQotc3RhdGljIGludCBkZWJ1Z1tdID0ge0RFQlVHX0RFRkFVTFQsIERFQlVHX0RFRkFVTFR9OwotbW9kdWxlX3BhcmFtX2FycmF5KGRlYnVnLCBpbnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImZsYWdzIGZvciBkcml2ZXIgZGVidWdnaW5nIik7Ci0KLXN0YXRpYyBpbnQgYWhhMTUyeFtdICAgPSB7MCwgMTEsIDcsIDEsIDEsIDEsIERFTEFZX0RFRkFVTFQsIDAsIERFQlVHX0RFRkFVTFR9OwotbW9kdWxlX3BhcmFtX2FycmF5KGFoYTE1MngsIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFoYTE1MngsICJwYXJhbWV0ZXJzIGZvciBmaXJzdCBjb250cm9sbGVyIik7Ci0KLXN0YXRpYyBpbnQgYWhhMTUyeDFbXSAgPSB7MCwgMTEsIDcsIDEsIDEsIDEsIERFTEFZX0RFRkFVTFQsIDAsIERFQlVHX0RFRkFVTFR9OwotbW9kdWxlX3BhcmFtX2FycmF5KGFoYTE1MngxLCBpbnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhhaGExNTJ4MSwgInBhcmFtZXRlcnMgZm9yIHNlY29uZCBjb250cm9sbGVyIik7Ci0jZW5kaWYgLyogIWRlZmluZWQoQUhBMTUyWF9ERUJVRykgKi8KICNlbmRpZiAvKiBNT0RVTEUgKi8KIAogI2lmZGVmIF9fSVNBUE5QX18KQEAgLTQ0Niw3ICszOTgsNyBAQAogLyoKICAqIGludGVybmFsIHN0YXRlcyBvZiB0aGUgaG9zdAogICoKLSAqLyAKKyAqLwogZW51bSBhaGExNTJ4X3N0YXRlIHsKIAlpZGxlPTAsCiAJdW5rbm93biwKQEAgLTQ4NSwyNCArNDM3LDE2IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCQkvKiBob3N0IGxvY2sgKi8KIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQljb25zdCBjaGFyICpsb2NrZXI7Ci0JCS8qIHdoaWNoIGZ1bmN0aW9uIGhhcyB0aGUgbG9jayAqLwotCWludCBsb2NrZXJsOwkvKiB3aGVyZSBkaWQgaXQgZ2V0IGl0ICovCi0KLQlpbnQgZGVidWc7CS8qIGN1cnJlbnQgZGVidWdnaW5nIHNldHRpbmcgKi8KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChBSEExNTJYX1NUQVQpCi0JaW50ICAgICAgICAgICB0b3RhbF9jb21tYW5kczsKKwlpbnQJICAgICAgdG90YWxfY29tbWFuZHM7CiAJaW50CSAgICAgIGRpc2Nvbm5lY3Rpb25zOwogCWludAkgICAgICBidXNmcmVlX3dpdGhvdXRfYW55X2FjdGlvbjsKIAlpbnQJICAgICAgYnVzZnJlZV93aXRob3V0X29sZF9jb21tYW5kOwogCWludAkgICAgICBidXNmcmVlX3dpdGhvdXRfbmV3X2NvbW1hbmQ7CiAJaW50CSAgICAgIGJ1c2ZyZWVfd2l0aG91dF9kb25lX2NvbW1hbmQ7CiAJaW50CSAgICAgIGJ1c2ZyZWVfd2l0aF9jaGVja19jb25kaXRpb247Ci0JaW50ICAgICAgICAgICBjb3VudFttYXhzdGF0ZV07Ci0JaW50ICAgICAgICAgICBjb3VudF90cmFuc1ttYXhzdGF0ZV07CisJaW50CSAgICAgIGNvdW50W21heHN0YXRlXTsKKwlpbnQJICAgICAgY291bnRfdHJhbnNbbWF4c3RhdGVdOwogCXVuc2lnbmVkIGxvbmcgdGltZVttYXhzdGF0ZV07CiAjZW5kaWYKIApAQCAtNTE0LDcgKzQ1OCw3IEBACiAJaW50IGRlbGF5OwkJLyogcmVzZXQgb3V0IGRlbGF5ICovCiAJaW50IGV4dF90cmFuczsJCS8qIGV4dGVuZGVkIHRyYW5zbGF0aW9uIGVuYWJsZWQgKi8KIAotCWludCBzd2ludDsgCQkvKiBzb2Z0d2FyZS1pbnRlcnJ1cHQgd2FzIGZpcmVkIGR1cmluZyBkZXRlY3QoKSAqLworCWludCBzd2ludDsJCS8qIHNvZnR3YXJlLWludGVycnVwdCB3YXMgZmlyZWQgZHVyaW5nIGRldGVjdCgpICovCiAJaW50IHNlcnZpY2U7CQkvKiBiaCBuZWVkcyB0byBiZSBydW4gKi8KIAlpbnQgaW5faW50cjsJCS8qIGJoIGlzIHJ1bm5pbmcgKi8KIApAQCAtNTQzLDcgKzQ4Nyw3IEBACiAJdW5zaWduZWQgY2hhciBtc2dpWzI1Nl07CiAJCS8qIHJlY2VpdmVkIG1lc3NhZ2UgYnl0ZXMgKi8KIAotCWludCBtc2dvX2ksIG1zZ29fbGVuOwkKKwlpbnQgbXNnb19pLCBtc2dvX2xlbjsKIAkJLyogbnVtYmVyIG9mIHNlbnQgYnl0ZXMgYW5kIGxlbmd0aCBvZiBjdXJyZW50IG1lc3NhZ2VzICovCiAJdW5zaWduZWQgY2hhciBtc2dvWzI1Nl07CiAJCS8qIHBlbmRpbmcgbWVzc2FnZXMgKi8KQEAgLTY4OSw3ICs2MzMsNiBAQAogc3RhdGljIHZvaWQgZG9uZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCwgaW50IGVycm9yKTsKIAogLyogZGlhZ25vc3RpY3MgKi8KLXN0YXRpYyB2b2lkIGRpc3BfcG9ydHMoc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpOwogc3RhdGljIHZvaWQgc2hvd19jb21tYW5kKFNjc2lfQ21uZCAqIHB0cik7CiBzdGF0aWMgdm9pZCBzaG93X3F1ZXVlcyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCk7CiBzdGF0aWMgdm9pZCBkaXNwX2VuaW50cihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCk7CkBAIC04MTIsMTAgKzc1NSw2IEBACiAJREVMQVkgICAgICAgPSBzZXR1cC0+ZGVsYXk7CiAJRVhUX1RSQU5TICAgPSBzZXR1cC0+ZXh0X3RyYW5zOwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCUhPU1REQVRBKHNocG50KS0+ZGVidWcgPSBzZXR1cC0+ZGVidWc7Ci0jZW5kaWYKLQogCVNFVFBPUlQoU0NTSUlELCBzZXR1cC0+c2NzaWlkIDw8IDQpOwogCXNocG50LT50aGlzX2lkID0gc2V0dXAtPnNjc2lpZDsKIApAQCAtOTQxLDMxICs4ODAsMjQgQEAKICAqIHNldHVwIGNvbnRyb2xsZXIgdG8gZ2VuZXJhdGUgaW50ZXJydXB0cyBkZXBlbmRpbmcKICAqIG9uIGN1cnJlbnQgc3RhdGUgKGxvY2sgaGFzIHRvIGJlIGFjcXVpcmVkKQogICoKLSAqLyAKKyAqLwogc3RhdGljIGludCBzZXR1cF9leHBlY3RlZF9pbnRlcnJ1cHRzKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewogCWlmKENVUlJFTlRfU0MpIHsKIAkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlIHw9IDEgPDwgMTY7Ci0JCisKIAkJaWYoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgc2VsZWN0aW5nKSB7Ci0JCQlEUFJJTlRLKGRlYnVnX2ludHIsIERFQlVHX0xFQUQgImV4cGVjdGluZzogKHNlbGRvKSAoc2VsdGltbykgKHNlbGRpKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CiAJCQlTRVRQT1JUKFNTVEFUMSwgU0VMVE8pOwogCQkJU0VUUE9SVChTSU1PREUwLCBFTlNFTERPIHwgKERJU0NPTk5FQ1RFRF9TQyA/IEVOU0VMREkgOiAwKSk7CiAJCQlTRVRQT1JUKFNJTU9ERTEsIEVOU0VMVElNTyk7CiAJCX0gZWxzZSB7Ci0JCQlEUFJJTlRLKGRlYnVnX2ludHIsIERFQlVHX0xFQUQgImV4cGVjdGluZzogKHBoYXNlIGNoYW5nZSkgKGJ1c2ZyZWUpICVzXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBzcGlvcmR5ID8gIihzcGlvcmR5KSIgOiAiIik7CiAJCQlTRVRQT1JUKFNJTU9ERTAsIChDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBzcGlvcmR5KSA/IEVOU1BJT1JEWSA6IDApOwotCQkJU0VUUE9SVChTSU1PREUxLCBFTlBIQVNFTUlTIHwgRU5TQ1NJUlNUIHwgRU5TQ1NJUEVSUiB8IEVOQlVTRlJFRSk7IAorCQkJU0VUUE9SVChTSU1PREUxLCBFTlBIQVNFTUlTIHwgRU5TQ1NJUlNUIHwgRU5TQ1NJUEVSUiB8IEVOQlVTRlJFRSk7CiAJCX0KIAl9IGVsc2UgaWYoU1RBVEU9PXNlbGRpKSB7Ci0JCURQUklOVEsoZGVidWdfaW50ciwgREVCVUdfTEVBRCAiZXhwZWN0aW5nOiAocGhhc2UgY2hhbmdlKSAoaWRlbnRpZnkpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKIAkJU0VUUE9SVChTSU1PREUwLCAwKTsKLQkJU0VUUE9SVChTSU1PREUxLCBFTlBIQVNFTUlTIHwgRU5TQ1NJUlNUIHwgRU5TQ1NJUEVSUiB8IEVOQlVTRlJFRSk7IAorCQlTRVRQT1JUKFNJTU9ERTEsIEVOUEhBU0VNSVMgfCBFTlNDU0lSU1QgfCBFTlNDU0lQRVJSIHwgRU5CVVNGUkVFKTsKIAl9IGVsc2UgewotCQlEUFJJTlRLKGRlYnVnX2ludHIsIERFQlVHX0xFQUQgImV4cGVjdGluZzogJXMgJXNcbiIsCi0JCQlDTURJTkZPKENVUlJFTlRfU0MpLAotCQkJRElTQ09OTkVDVEVEX1NDID8gIihyZXNlbGVjdGlvbikiIDogIiIsCi0JCQlJU1NVRV9TQyA/ICIoYnVzZnJlZSkiIDogIiIpOwogCQlTRVRQT1JUKFNJTU9ERTAsIERJU0NPTk5FQ1RFRF9TQyA/IEVOU0VMREkgOiAwKTsKIAkJU0VUUE9SVChTSU1PREUxLCBFTlNDU0lSU1QgfCAoIChJU1NVRV9TQ3x8RE9ORV9TQykgPyBFTkJVU0ZSRUUgOiAwKSk7CiAJfQpAQCAtOTc3LDcgKzkwOSw3IEBACiB9CiAKIAotLyogCisvKgogICogIFF1ZXVlIGEgY29tbWFuZCBhbmQgc2V0dXAgaW50ZXJydXB0cyBmb3IgYSBmcmVlIGJ1cy4KICAqLwogc3RhdGljIGludCBhaGExNTJ4X2ludGVybmFsX3F1ZXVlKFNjc2lfQ21uZCAqU0NwbnQsIHN0cnVjdCBjb21wbGV0aW9uICpjb21wbGV0ZSwKQEAgLTk4NiwxNSArOTE4LDYgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCA9IFNDcG50LT5kZXZpY2UtPmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlpZiAoSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyAmIGRlYnVnX3F1ZXVlKSB7Ci0JCXByaW50ayhJTkZPX0xFQUQgInF1ZXVlOiAlcDsgY21kX2xlbj0lZCBwaWVjZXM9JWQgc2l6ZT0ldSBjbW5kPSIsCi0JCSAgICAgICBDTURJTkZPKFNDcG50KSwgU0NwbnQsIFNDcG50LT5jbWRfbGVuLAotCQkgICAgICAgc2NzaV9zZ19jb3VudChTQ3BudCksIHNjc2lfYnVmZmxlbihTQ3BudCkpOwotCQlfX3Njc2lfcHJpbnRfY29tbWFuZChTQ3BudC0+Y21uZCk7Ci0JfQotI2VuZGlmCi0KIAlTQ3BudC0+c2NzaV9kb25lCT0gZG9uZTsKIAlTQ3BudC0+U0NwLnBoYXNlCT0gbm90X2lzc3VlZCB8IHBoYXNlOwogCVNDcG50LT5TQ3AuU3RhdHVzCT0gMHgxOyAvKiBJbGVnYWwgc3RhdHVzIGJ5IFNDU0kgc3RhbmRhcmQgKi8KQEAgLTEwMDQsMTMgKzkyNywxMyBAQAogCiAJaWYoU0NwbnQtPlNDcC5waGFzZSAmIChyZXNldHRpbmd8Y2hlY2tfY29uZGl0aW9uKSkgewogCQlpZiAoIVNDcG50LT5ob3N0X3NjcmliYmxlIHx8IFNDU0VNKFNDcG50KSB8fCBTQ05FWFQoU0NwbnQpKSB7Ci0JCQlwcmludGsoRVJSX0xFQUQgImNhbm5vdCByZXVzZSBjb21tYW5kXG4iLCBDTURJTkZPKFNDcG50KSk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgU0NwbnQsICJjYW5ub3QgcmV1c2UgY29tbWFuZFxuIik7CiAJCQlyZXR1cm4gRkFJTEVEOwogCQl9CiAJfSBlbHNlIHsKIAkJU0NwbnQtPmhvc3Rfc2NyaWJibGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWhhMTUyeF9zY2RhdGEpLCBHRlBfQVRPTUlDKTsKIAkJaWYoIVNDcG50LT5ob3N0X3NjcmliYmxlKSB7Ci0JCQlwcmludGsoRVJSX0xFQUQgImFsbG9jYXRpb24gZmFpbGVkXG4iLCBDTURJTkZPKFNDcG50KSk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgU0NwbnQsICJhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gRkFJTEVEOwogCQl9CiAJfQpAQCAtMTA2NiwxNSArOTg5LDYgQEAKICAqLwogc3RhdGljIGludCBhaGExNTJ4X3F1ZXVlX2xjayhTY3NpX0NtbmQgKlNDcG50LCB2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKQogewotI2lmIDAKLQlpZigqU0NwbnQtPmNtbmQgPT0gUkVRVUVTVF9TRU5TRSkgewotCQlTQ3BudC0+cmVzdWx0ID0gMDsKLQkJZG9uZShTQ3BudCk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotI2VuZGlmCi0KIAlyZXR1cm4gYWhhMTUyeF9pbnRlcm5hbF9xdWV1ZShTQ3BudCwgTlVMTCwgMCwgZG9uZSk7CiB9CiAKQEAgLTEwODIsMTUgKzk5NiwxMCBAQAogCiAKIC8qCi0gKiAgCiAgKgogICovCiBzdGF0aWMgdm9pZCByZXNldF9kb25lKFNjc2lfQ21uZCAqU0NwbnQpCiB7Ci0jaWYgMAotCXN0cnVjdCBTY3NpX0hvc3QgKnNocG50ID0gU0NwbnQtPmhvc3Q7Ci0JRFBSSU5USyhkZWJ1Z19laCwgSU5GT19MRUFEICJyZXNldF9kb25lIGNhbGxlZFxuIiwgQ01ESU5GTyhTQ3BudCkpOwotI2VuZGlmCiAJaWYoU0NTRU0oU0NwbnQpKSB7CiAJCWNvbXBsZXRlKFNDU0VNKFNDcG50KSk7CiAJfSBlbHNlIHsKQEAgLTExMDgsMjAgKzEwMTcsMTEgQEAKIAlTY3NpX0NtbmQgKnB0cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWlmKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19laCkgewotCQlwcmludGsoREVCVUdfTEVBRCAiYWJvcnQoJXApIiwgQ01ESU5GTyhTQ3BudCksIFNDcG50KTsKLQkJc2hvd19xdWV1ZXMoc2hwbnQpOwotCX0KLSNlbmRpZgotCiAJRE9fTE9DSyhmbGFncyk7CiAKIAlwdHI9cmVtb3ZlX1NDKCZJU1NVRV9TQywgU0NwbnQpOwogCiAJaWYocHRyKSB7Ci0JCURQUklOVEsoZGVidWdfZWgsIERFQlVHX0xFQUQgIm5vdCB5ZXQgaXNzdWVkIC0gU1VDQ0VTU1xuIiwgQ01ESU5GTyhTQ3BudCkpOwotCiAJCUhPU1REQVRBKHNocG50KS0+Y29tbWFuZHMtLTsKIAkJaWYgKCFIT1NUREFUQShzaHBudCktPmNvbW1hbmRzKQogCQkJU0VUUE9SVChQT1JUQSwgMCk7CkBAIC0xMTMxLDcgKzEwMzEsNyBAQAogCQlTQ3BudC0+aG9zdF9zY3JpYmJsZT1OVUxMOwogCiAJCXJldHVybiBTVUNDRVNTOwotCX0gCisJfQogCiAJRE9fVU5MT0NLKGZsYWdzKTsKIApAQCAtMTE0Miw3ICsxMDQyLDggQEAKIAkgKgogCSAqLwogCi0JcHJpbnRrKEVSUl9MRUFEICJjYW5ub3QgYWJvcnQgcnVubmluZyBvciBkaXNjb25uZWN0ZWQgY29tbWFuZFxuIiwgQ01ESU5GTyhTQ3BudCkpOworCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBTQ3BudCwKKwkJICAgICJjYW5ub3QgYWJvcnQgcnVubmluZyBvciBkaXNjb25uZWN0ZWQgY29tbWFuZFxuIik7CiAKIAlyZXR1cm4gRkFJTEVEOwogfQpAQCAtMTE2MCwxNSArMTA2MSw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWlmKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19laCkgewotCQlwcmludGsoSU5GT19MRUFEICJhaGExNTJ4X2RldmljZV9yZXNldCglcCkiLCBDTURJTkZPKFNDcG50KSwgU0NwbnQpOwotCQlzaG93X3F1ZXVlcyhzaHBudCk7Ci0JfQotI2VuZGlmCi0KIAlpZihDVVJSRU5UX1NDPT1TQ3BudCkgewotCQlwcmludGsoRVJSX0xFQUQgImNhbm5vdCByZXNldCBjdXJyZW50IGRldmljZVxuIiwgQ01ESU5GTyhTQ3BudCkpOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgU0NwbnQsICJjYW5ub3QgcmVzZXQgY3VycmVudCBkZXZpY2VcbiIpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIApAQCAtMTIwOCw3ICsxMTAyLDcgQEAKIAkJfSBlbHNlIGlmKGRpc2Nvbm5lY3RlZCkgewogCQkJYXBwZW5kX1NDKCZESVNDT05ORUNURURfU0MsIFNDcG50KTsKIAkJfQotCQorCiAJCXJldCA9IEZBSUxFRDsKIAl9CiAKQEAgLTEyMjcsMTIgKzExMjEsMTIgQEAKIAkJaWYoU0NEQVRBKHB0cikpIHsKIAkJCW5leHQgPSBTQ05FWFQocHRyKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhERUJVR19MRUFEICJxdWV1ZSBjb3JydXB0ZWQgYXQgJXBcbiIsIENNRElORk8ocHRyKSwgcHRyKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fREVCVUcsIHB0ciwKKwkJCQkgICAgInF1ZXVlIGNvcnJ1cHRlZCBhdCAlcFxuIiwgcHRyKTsKIAkJCW5leHQgPSBOVUxMOwogCQl9CiAKIAkJaWYgKCFwdHItPmRldmljZS0+c29mdF9yZXNldCkgewotCQkJRFBSSU5USyhkZWJ1Z19laCwgREVCVUdfTEVBRCAiZGlzY29ubmVjdGVkIGNvbW1hbmQgJXAgcmVtb3ZlZFxuIiwgQ01ESU5GTyhwdHIpLCBwdHIpOwogCQkJcmVtb3ZlX1NDKFNDcywgcHRyKTsKIAkJCUhPU1REQVRBKHNocG50KS0+Y29tbWFuZHMtLTsKIAkJCWtmcmVlKHB0ci0+aG9zdF9zY3JpYmJsZSk7CkBAIC0xMjUzLDI1ICsxMTQ3LDE0IEBACiAKIAlET19MT0NLKGZsYWdzKTsKIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlpZihIT1NUREFUQShzaHBudCktPmRlYnVnICYgZGVidWdfZWgpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogYnVzIHJlc2V0Iiwgc2hwbnQtPmhvc3Rfbm8pOwotCQlzaG93X3F1ZXVlcyhzaHBudCk7Ci0JfQotI2VuZGlmCi0KIAlmcmVlX2hhcmRfcmVzZXRfU0NzKHNocG50LCAmSVNTVUVfU0MpOwogCWZyZWVfaGFyZF9yZXNldF9TQ3Moc2hwbnQsICZESVNDT05ORUNURURfU0MpOwogCi0JRFBSSU5USyhkZWJ1Z19laCwgS0VSTl9ERUJVRyAic2NzaSVkOiByZXNldHRpbmcgYnVzXG4iLCBzaHBudC0+aG9zdF9ubyk7Ci0KIAlTRVRQT1JUKFNDU0lTRVEsIFNDU0lSU1RPKTsKIAltZGVsYXkoMjU2KTsKIAlTRVRQT1JUKFNDU0lTRVEsIDApOwogCW1kZWxheShERUxBWSk7CiAKLQlEUFJJTlRLKGRlYnVnX2VoLCBLRVJOX0RFQlVHICJzY3NpJWQ6IGJ1cyByZXNldHRlZFxuIiwgc2hwbnQtPmhvc3Rfbm8pOwotCiAJc2V0dXBfZXhwZWN0ZWRfaW50ZXJydXB0cyhzaHBudCk7CiAJaWYoSE9TVERBVEEoc2hwbnQpLT5jb21tYW5kcz09MCkKIAkJU0VUUE9SVChQT1JUQSwgMCk7CkBAIC0xMzMzLDExICsxMjE2LDcgQEAKICAqLwogaW50IGFoYTE1MnhfaG9zdF9yZXNldF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewotCURQUklOVEsoZGVidWdfZWgsIEtFUk5fREVCVUcgInNjc2klZDogaG9zdCByZXNldFxuIiwgc2hwbnQtPmhvc3Rfbm8pOwotCiAJYWhhMTUyeF9idXNfcmVzZXRfaG9zdChzaHBudCk7Ci0KLQlEUFJJTlRLKGRlYnVnX2VoLCBLRVJOX0RFQlVHICJzY3NpJWQ6IHJlc2V0dGluZyBwb3J0c1xuIiwgc2hwbnQtPmhvc3Rfbm8pOwogCXJlc2V0X3BvcnRzKHNocG50KTsKIAogCXJldHVybiBTVUNDRVNTOwpAQCAtMTM0NSw3ICsxMjI0LDcgQEAKIAogLyoKICAqIFJlc2V0IHRoZSBob3N0IChidXMgYW5kIGNvbnRyb2xsZXIpCi0gKiAKKyAqCiAgKi8KIHN0YXRpYyBpbnQgYWhhMTUyeF9ob3N0X3Jlc2V0KFNjc2lfQ21uZCAqU0NwbnQpCiB7CkBAIC0xNDExLDcgKzEyOTAsOSBAQAogewogCWlmIChDVVJSRU5UX1NDKSB7CiAJCWlmKERPTkVfU0MpCi0JCQlwcmludGsoRVJSX0xFQUQgInRoZXJlJ3MgYWxyZWFkeSBhIGNvbXBsZXRlZCBjb21tYW5kICVwIC0gd2lsbCBjYXVzZSBhYm9ydFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgRE9ORV9TQyk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCQkgICAgInRoZXJlJ3MgYWxyZWFkeSBhIGNvbXBsZXRlZCBjb21tYW5kICVwICIKKwkJCQkgICAgIi0gd2lsbCBjYXVzZSBhYm9ydFxuIiwgRE9ORV9TQyk7CiAKIAkJRE9ORV9TQyA9IENVUlJFTlRfU0M7CiAJCUNVUlJFTlRfU0MgPSBOVUxMOwpAQCAtMTQ2Niw3ICsxMzQ3LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYoIFRFU1RMTyhETUFTVEFULCBJTlRTVEFUKSApCi0JCXJldHVybiBJUlFfTk9ORTsJCisJCXJldHVybiBJUlFfTk9ORTsKIAogCS8qIG5vIG1vcmUgaW50ZXJydXB0cyBmcm9tIHRoZSBjb250cm9sbGVyLCB3aGlsZSB3ZSdyZSBidXN5LgogCSAgIElOVEVOIGlzIHJlc3RvcmVkIGJ5IHRoZSBCSCBoYW5kbGVyICovCkBAIC0xNTAxLDcgKzEzODIsNyBAQAogCVNFVFBPUlQoU1hGUkNUTDAsIENIMSk7CiAKIAlTRVRQT1JUKFNTVEFUMSwgQ0xSQlVTRlJFRSk7Ci0JCisKIAlpZihDVVJSRU5UX1NDKSB7CiAjaWYgZGVmaW5lZChBSEExNTJYX1NUQVQpCiAJCWFjdGlvbisrOwpAQCAtMTUxMywxOSArMTM5NCwxMyBAQAogCQkJZG9uZShzaHBudCwgKENVUlJFTlRfU0MtPlNDcC5TdGF0dXMgJiAweGZmKSB8ICgoQ1VSUkVOVF9TQy0+U0NwLk1lc3NhZ2UgJiAweGZmKSA8PCA4KSB8IChESURfT0sgPDwgMTYpKTsKIAogCQl9IGVsc2UgaWYoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgYWJvcnRlZCkgewotCQkJRFBSSU5USyhkZWJ1Z19laCwgREVCVUdfTEVBRCAiQUJPUlQgc2VudFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CiAJCQlkb25lKHNocG50LCAoQ1VSUkVOVF9TQy0+U0NwLlN0YXR1cyAmIDB4ZmYpIHwgKChDVVJSRU5UX1NDLT5TQ3AuTWVzc2FnZSAmIDB4ZmYpIDw8IDgpIHwgKERJRF9BQk9SVCA8PCAxNikpOwogCiAJCX0gZWxzZSBpZihDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiByZXNldHRlZCkgewotCQkJRFBSSU5USyhkZWJ1Z19laCwgREVCVUdfTEVBRCAiQlVTIERFVklDRSBSRVNFVCBzZW50XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKIAkJCWRvbmUoc2hwbnQsIChDVVJSRU5UX1NDLT5TQ3AuU3RhdHVzICYgMHhmZikgfCAoKENVUlJFTlRfU0MtPlNDcC5NZXNzYWdlICYgMHhmZikgPDwgOCkgfCAoRElEX1JFU0VUIDw8IDE2KSk7CiAKIAkJfSBlbHNlIGlmKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIGRpc2Nvbm5lY3RlZCkgewogCQkJLyogdGFyZ2V0IHNlbnQgRElTQ09OTkVDVCAqLwotCQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgInRhcmdldCBkaXNjb25uZWN0ZWQgYXQgJWQvJWRcbiIsCi0JCQkJQ01ESU5GTyhDVVJSRU5UX1NDKSwKLQkJCQlzY3NpX2dldF9yZXNpZChDVVJSRU5UX1NDKSwKLQkJCQlzY3NpX2J1ZmZsZW4oQ1VSUkVOVF9TQykpOwogI2lmIGRlZmluZWQoQUhBMTUyWF9TVEFUKQogCQkJSE9TVERBVEEoc2hwbnQpLT5kaXNjb25uZWN0aW9ucysrOwogI2VuZGlmCkBAIC0xNTUzLDEzICsxNDI4LDYgQEAKIAkJCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IEhPU1REQVRBKHNocG50KS0+ZG9uZV9TQzsKIAkJCXN0cnVjdCBhaGExNTJ4X3NjZGF0YSAqc2MgPSBTQ0RBVEEoY21kKTsKIAotI2lmIDAKLQkJCWlmKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19laCkgewotCQkJCXByaW50ayhFUlJfTEVBRCAicmVjZWl2ZWQgc2Vuc2U6ICIsIENNRElORk8oRE9ORV9TQykpOwotCQkJCXNjc2lfcHJpbnRfc2Vuc2UoImJoIiwgRE9ORV9TQyk7Ci0JCQl9Ci0jZW5kaWYKLQogCQkJc2NzaV9laF9yZXN0b3JlX2NtbmQoY21kLCAmc2MtPnNlcyk7CiAKIAkJCWNtZC0+U0NwLlN0YXR1cyA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKQEAgLTE1NzEsMTcgKzE0MzksMTEgQEAKICNpZiBkZWZpbmVkKEFIQTE1MlhfU1RBVCkKIAkJCUhPU1REQVRBKHNocG50KS0+YnVzZnJlZV93aXRoX2NoZWNrX2NvbmRpdGlvbisrOwogI2VuZGlmCi0jaWYgMAotCQkJRFBSSU5USyhkZWJ1Z19laCwgRVJSX0xFQUQgIkNIRUNLIENPTkRJVElPTiBmb3VuZFxuIiwgQ01ESU5GTyhET05FX1NDKSk7Ci0jZW5kaWYKIAogCQkJaWYoIShET05FX1NDLT5TQ3AucGhhc2UgJiBub3RfaXNzdWVkKSkgewogCQkJCXN0cnVjdCBhaGExNTJ4X3NjZGF0YSAqc2M7CiAJCQkJU2NzaV9DbW5kICpwdHIgPSBET05FX1NDOwogCQkJCURPTkVfU0M9TlVMTDsKLSNpZiAwCi0JCQkJRFBSSU5USyhkZWJ1Z19laCwgRVJSX0xFQUQgInJlcXVlc3Rpbmcgc2Vuc2VcbiIsIENNRElORk8ocHRyKSk7Ci0jZW5kaWYKIAogCQkJCXNjID0gU0NEQVRBKHB0cik7CiAJCQkJLyogSXQgd2FzIGFsbG9jYXRlZCBpbiBhaGExNTJ4X2ludGVybmFsX3F1ZXVlPyAqLwpAQCAtMTU5MSwxOSArMTQ1MywxMCBAQAogCQkJCURPX1VOTE9DSyhmbGFncyk7CiAJCQkJYWhhMTUyeF9pbnRlcm5hbF9xdWV1ZShwdHIsIE5VTEwsIGNoZWNrX2NvbmRpdGlvbiwgcHRyLT5zY3NpX2RvbmUpOwogCQkJCURPX0xPQ0soZmxhZ3MpOwotI2lmIDAKLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5USyhkZWJ1Z19laCwgRVJSX0xFQUQgImNvbW1hbmQgbm90IGlzc3VlZCAtIENIRUNLIENPTkRJVElPTiBpZ25vcmVkXG4iLCBDTURJTkZPKERPTkVfU0MpKTsKLSNlbmRpZgogCQkJfQogCQl9CiAKIAkJaWYoRE9ORV9TQyAmJiBET05FX1NDLT5zY3NpX2RvbmUpIHsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlpbnQgaG9zdG5vPURPTkVfU0MtPmRldmljZS0+aG9zdC0+aG9zdF9ubzsKLQkJCWludCBpZD1ET05FX1NDLT5kZXZpY2UtPmlkICYgMHhmOwotCQkJaW50IGx1bj0oKHU4KURPTkVfU0MtPmRldmljZS0+bHVuKSAmIDB4NzsKLSNlbmRpZgogCQkJU2NzaV9DbW5kICpwdHIgPSBET05FX1NDOwogCQkJRE9ORV9TQz1OVUxMOwogCkBAIC0xNjE4LDkgKzE0NzEsNyBAQAogCQkJfQogCiAJCQlET19VTkxPQ0soZmxhZ3MpOwotCQkJRFBSSU5USyhkZWJ1Z19kb25lLCBERUJVR19MRUFEICJjYWxsaW5nIHNjc2lfZG9uZSglcClcbiIsIGhvc3RubywgaWQsIGx1biwgcHRyKTsKLSAgICAgICAgICAgICAgICAJcHRyLT5zY3NpX2RvbmUocHRyKTsKLQkJCURQUklOVEsoZGVidWdfZG9uZSwgREVCVUdfTEVBRCAic2NzaV9kb25lKCVwKSByZXR1cm5lZFxuIiwgaG9zdG5vLCBpZCwgbHVuLCBwdHIpOworCQkJcHRyLT5zY3NpX2RvbmUocHRyKTsKIAkJCURPX0xPQ0soZmxhZ3MpOwogCQl9CiAKQEAgLTE2NDAsOSArMTQ5MSw3IEBACiAjaWYgZGVmaW5lZChBSEExNTJYX1NUQVQpCiAJCWFjdGlvbisrOwogI2VuZGlmCi0JICAgIAlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgfD0gc2VsZWN0aW5nOwotCi0JCURQUklOVEsoZGVidWdfc2VsZWN0aW9uLCBERUJVR19MRUFEICJzZWxlY3RpbmcgdGFyZ2V0XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlIHw9IHNlbGVjdGluZzsKIAogCQkvKiBjbGVhciBzZWxlY3Rpb24gdGltZW91dCAqLwogCQlTRVRQT1JUKFNTVEFUMSwgU0VMVE8pOwpAQCAtMTY3NCwxOCArMTUyMywxOSBAQAogCVNFVFBPUlQoU1NUQVQxLCBDTFJCVVNGUkVFKTsKIAlTRVRQT1JUKFNTVEFUMSwgQ0xSUEhBU0VDSEcpOwogCi0gICAgCUNVUlJFTlRfU0MtPlNDcC5waGFzZSAmPSB+KHNlbGVjdGluZ3xub3RfaXNzdWVkKTsKKwlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJj0gfihzZWxlY3Rpbmd8bm90X2lzc3VlZCk7CiAKIAlTRVRQT1JUKFNDU0lTRVEsIDApOwogCiAJaWYgKFRFU1RMTyhTU1RBVDAsIFNFTERPKSkgewotCQlwcmludGsoRVJSX0xFQUQgImFoYTE1Mng6IHBhc3NpbmcgYnVzIGZyZWUgY29uZGl0aW9uXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkgICAgImFoYTE1Mng6IHBhc3NpbmcgYnVzIGZyZWUgY29uZGl0aW9uXG4iKTsKIAkJZG9uZShzaHBudCwgRElEX05PX0NPTk5FQ1QgPDwgMTYpOwogCQlyZXR1cm47CiAJfQogCiAJU0VUUE9SVChTU1RBVDAsIENMUlNFTERPKTsKLQkKKwogCUFERE1TR08oSURFTlRJRlkoUkVDT05ORUNULCBDVVJSRU5UX1NDLT5kZXZpY2UtPmx1bikpOwogCiAJaWYgKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIGFib3J0aW5nKSB7CkBAIC0xNjkzLDcgKzE1NDMsNyBAQAogCX0gZWxzZSBpZiAoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgcmVzZXR0aW5nKSB7CiAJCUFERE1TR08oQlVTX0RFVklDRV9SRVNFVCk7CiAJfSBlbHNlIGlmIChTWU5DTkVHPT0wICYmIFNZTkNIUk9OT1VTKSB7Ci0gICAgCQlDVVJSRU5UX1NDLT5TQ3AucGhhc2UgfD0gc3luY25lZzsKKwkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlIHw9IHN5bmNuZWc7CiAJCU1TR09MRU4gKz0gc3BpX3BvcHVsYXRlX3N5bmNfbXNnKCZNU0dPKE1TR09MRU4pLCA1MCwgOCk7CiAJCVNZTkNORUc9MTsJCS8qIG5lZ290aWF0aW9uIGluIHByb2dyZXNzICovCiAJfQpAQCAtMTcwOCwyOSArMTU1OCwyMSBAQAogICovCiBzdGF0aWMgdm9pZCBzZWx0b19ydW4oc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7Ci0JU0VUUE9SVChTQ1NJU0VRLCAwKTsJCQorCVNFVFBPUlQoU0NTSVNFUSwgMCk7CiAJU0VUUE9SVChTU1RBVDEsIENMUlNFTFRJTU8pOwogCi0JRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgInNlbGVjdGlvbiB0aW1lb3V0XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQotCWlmKCFDVVJSRU5UX1NDKSB7Ci0JCURQUklOVEsoZGVidWdfc2VsZWN0aW9uLCBERUJVR19MRUFEICIhQ1VSUkVOVF9TQ1xuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJaWYgKCFDVVJSRU5UX1NDKQogCQlyZXR1cm47Ci0JfQogCi0gICAgCUNVUlJFTlRfU0MtPlNDcC5waGFzZSAmPSB+c2VsZWN0aW5nOworCUNVUlJFTlRfU0MtPlNDcC5waGFzZSAmPSB+c2VsZWN0aW5nOwogCi0JaWYgKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIGFib3J0ZWQpIHsKLQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgImFib3J0ZWRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCWlmIChDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBhYm9ydGVkKQogCQlkb25lKHNocG50LCBESURfQUJPUlQgPDwgMTYpOwotCX0gZWxzZSBpZiAoVEVTVExPKFNTVEFUMCwgU0VMSU5HTykpIHsKLQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIERFQlVHX0xFQUQgImFyYml0cmF0aW9uIG5vdCB3b25cbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCWVsc2UgaWYgKFRFU1RMTyhTU1RBVDAsIFNFTElOR08pKQogCQlkb25lKHNocG50LCBESURfQlVTX0JVU1kgPDwgMTYpOwotCX0gZWxzZSB7CisJZWxzZQogCQkvKiBBUkJJVFJBVElPTiB3b24sIGJ1dCBTRUxFQ1RJT04gZmFpbGVkICovCi0JCURQUklOVEsoZGVidWdfc2VsZWN0aW9uLCBERUJVR19MRUFEICJzZWxlY3Rpb24gZmFpbGVkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKIAkJZG9uZShzaHBudCwgRElEX05PX0NPTk5FQ1QgPDwgMTYpOwotCX0KIH0KIAogLyoKQEAgLTE3NTMsOSArMTU5NSw4IEBACiAKIAlpZihDVVJSRU5UX1NDKSB7CiAJCWlmKCEoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgbm90X2lzc3VlZCkpCi0JCQlwcmludGsoRVJSX0xFQUQgImNvbW1hbmQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gaXNzdWVkIHlldFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7Ci0KLQkJRFBSSU5USyhkZWJ1Z19zZWxlY3Rpb24sIEVSUl9MRUFEICJjb21tYW5kIHJlcXVldWVkIC0gcmVzZWxlY3Rpb25cbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkJICAgICJjb21tYW5kIHNob3VsZCBub3QgaGF2ZSBiZWVuIGlzc3VlZCB5ZXRcbiIpOwogCiAJCURPX0xPQ0soZmxhZ3MpOwogCQlhcHBlbmRfU0MoJklTU1VFX1NDLCBDVVJSRU5UX1NDKTsKQEAgLTE3NjQsMTcgKzE2MDUsMTYgQEAKIAkJQ1VSUkVOVF9TQyA9IE5VTEw7CiAJfQogCi0JaWYoIURJU0NPTk5FQ1RFRF9TQykgewotCQlEUFJJTlRLKGRlYnVnX3NlbGVjdGlvbiwgREVCVUdfTEVBRCAidW5leHBlY3RlZCBTRUxESSAiLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwlpZiAoIURJU0NPTk5FQ1RFRF9TQykKIAkJcmV0dXJuOwotCX0KIAogCVJFQ09OTl9UQVJHRVQ9LTE7CiAKIAlzZWxpZCA9IEdFVFBPUlQoU0VMSUQpICYgfigxIDw8IHNocG50LT50aGlzX2lkKTsKIAogCWlmIChzZWxpZD09MCkgewotCQlwcmludGsoImFoYTE1MnglZDogdGFyZ2V0IGlkIHVua25vd24gKCUwMngpXG4iLCBIT1NUTk8sIHNlbGlkKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hwbnQsCisJCQkgICAgICJ0YXJnZXQgaWQgdW5rbm93biAoJTAyeClcbiIsIHNlbGlkKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTc4Miw4ICsxNjIyLDggQEAKIAkJOwogCiAJaWYoc2VsaWQgJiB+KDEgPDwgdGFyZ2V0KSkgewotCQlwcmludGsoImFoYTE1MnglZDogbXVsdGlwbGUgdGFyZ2V0cyByZWNvbm5lY3RlZCAoJTAyeClcbiIsCi0JCSAgICAgICBIT1NUTk8sIHNlbGlkKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hwbnQsCisJCQkgICAgICJtdWx0aXBsZSB0YXJnZXRzIHJlY29ubmVjdGVkICglMDJ4KVxuIiwgc2VsaWQpOwogCX0KIAogCkBAIC0xNzkzLDcgKzE2MzMsNiBAQAogCVNFVFJBVEUoSE9TVERBVEEoc2hwbnQpLT5zeW5jcmF0ZVt0YXJnZXRdKTsKIAogCVJFQ09OTl9UQVJHRVQ9dGFyZ2V0OwotCURQUklOVEsoZGVidWdfc2VsZWN0aW9uLCBERUJVR19MRUFEICJ0YXJnZXQgJWQgcmVzZWxlY3RlZCAoJTAyeCkuXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCB0YXJnZXQsIHNlbGlkKTsKIH0KIAogLyoKQEAgLTE4MTcsMzEgKzE2NTYsMjQgQEAKIAkJaWYoc3N0YXQxICYgKFBIQVNFQ0hHfFBIQVNFTUlTfEJVU0ZSRUUpIHx8ICEoc3N0YXQxICYgUkVRSU5JVCkpCiAJCQlyZXR1cm47CiAKLQkJaWYoVEVTVExPKFNTVEFUMCxTUElPUkRZKSkgewotCQkJRFBSSU5USyhkZWJ1Z19tc2dpLCBERUJVR19MRUFEICIhU1BJT1JEWVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCWlmIChURVNUTE8oU1NUQVQwLCBTUElPUkRZKSkKIAkJCXJldHVybjsKLQkJfQkKIAogCQlBRERNU0dJKEdFVFBPUlQoU0NTSURBVCkpOwogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCQlpZiAoSE9TVERBVEEoc2hwbnQpLT5kZWJ1ZyAmIGRlYnVnX21zZ2kpIHsKLQkJCXByaW50ayhJTkZPX0xFQUQgImluYm91bmQgbWVzc2FnZSAlMDJ4ICIsIENNRElORk8oQ1VSUkVOVF9TQyksIE1TR0koMCkpOwotCQkJc3BpX3ByaW50X21zZygmTVNHSSgwKSk7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLSNlbmRpZgotCiAJCWlmKCFDVVJSRU5UX1NDKSB7CiAJCQlpZihMQVNUU1RBVEUhPXNlbGRpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJhaGExNTJ4JWQ6IG1lc3NhZ2UgaW4gdy9vIGN1cnJlbnQgY29tbWFuZCBub3QgYWZ0ZXIgcmVzZWxlY3Rpb25cbiIsIEhPU1ROTyk7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaHBudCwKKwkJCQkJICAgICAibWVzc2FnZSBpbiB3L28gY3VycmVudCBjb21tYW5kIgorCQkJCQkgICAgICIgbm90IGFmdGVyIHJlc2VsZWN0aW9uXG4iKTsKIAkJCX0KIAogCQkJLyoKLQkgCSAJICogSGFuZGxlIHJlc2VsZWN0aW9uCi0JIAkJICovCisJCQkgKiBIYW5kbGUgcmVzZWxlY3Rpb24KKwkJCSAqLwogCQkJaWYoIShNU0dJKDApICYgSURFTlRJRllfQkFTRSkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgImFoYTE1MnglZDogdGFyZ2V0IGRpZG4ndCBpZGVudGlmeSBhZnRlciByZXNlbGVjdGlvblxuIiwgSE9TVE5PKTsKKwkJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHNocG50LAorCQkJCQkgICAgICJ0YXJnZXQgZGlkbid0IGlkZW50aWZ5IGFmdGVyIHJlc2VsZWN0aW9uXG4iKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMTg0OSwxMiArMTY4MSwxMyBAQAogCiAJCQlpZiAoIUNVUlJFTlRfU0MpIHsKIAkJCQlzaG93X3F1ZXVlcyhzaHBudCk7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJhaGExNTJ4JWQ6IG5vIGRpc2Nvbm5lY3RlZCBjb21tYW5kIGZvciB0YXJnZXQgJWQvJWRcbiIsIEhPU1ROTywgUkVDT05OX1RBUkdFVCwgTVNHSSgwKSAmIDB4M2YpOworCQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgc2hwbnQsCisJCQkJCSAgICAgIm5vIGRpc2Nvbm5lY3RlZCBjb21tYW5kIgorCQkJCQkgICAgICIgZm9yIHRhcmdldCAlZC8lZFxuIiwKKwkJCQkJICAgICBSRUNPTk5fVEFSR0VULCBNU0dJKDApICYgMHgzZik7CiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCURQUklOVEsoZGVidWdfbXNnaSwgREVCVUdfTEVBRCAidGFyZ2V0IHJlY29ubmVjdGVkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQogCQkJQ1VSUkVOVF9TQy0+U0NwLk1lc3NhZ2UgPSBNU0dJKDApOwogCQkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICY9IH5kaXNjb25uZWN0ZWQ7CiAKQEAgLTE4NjIsMzEgKzE2OTUsMzIgQEAKIAogCQkJLyogbmV4dCBtZXNzYWdlIGlmIGFueSAqLwogCQkJY29udGludWU7Ci0JCX0gCisJCX0KIAogCQlDVVJSRU5UX1NDLT5TQ3AuTWVzc2FnZSA9IE1TR0koMCk7CiAKIAkJc3dpdGNoIChNU0dJKDApKSB7CiAJCWNhc2UgRElTQ09OTkVDVDoKIAkJCWlmICghUkVDT05ORUNUKQotCQkJCXByaW50ayhXQVJOX0xFQUQgInRhcmdldCB3YXMgbm90IGFsbG93ZWQgdG8gZGlzY29ubmVjdFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCQkJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBDVVJSRU5UX1NDLAorCQkJCQkgICAgInRhcmdldCB3YXMgbm90IGFsbG93ZWQgdG8gZGlzY29ubmVjdFxuIik7CiAKIAkJCUNVUlJFTlRfU0MtPlNDcC5waGFzZSB8PSBkaXNjb25uZWN0ZWQ7CiAJCQlicmVhazsKIAogCQljYXNlIENPTU1BTkRfQ09NUExFVEU6Ci0JCQlpZihDVVJSRU5UX1NDLT5TQ3AucGhhc2UgJiBjb21wbGV0ZWQpCi0JCQkJRFBSSU5USyhkZWJ1Z19tc2dpLCBERUJVR19MRUFEICJhZ2FpbiBDT01NQU5EIENPTVBMRVRFXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQogCQkJQ1VSUkVOVF9TQy0+U0NwLnBoYXNlIHw9IGNvbXBsZXRlZDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTUVTU0FHRV9SRUpFQ1Q6CiAJCQlpZiAoU1lOQ05FRz09MSkgewotCQkJCXByaW50ayhJTkZPX0xFQUQgIlN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCB3YXMgcmVqZWN0ZWRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgQ1VSUkVOVF9TQywKKwkJCQkJICAgICJTeW5jaHJvbm91cyBEYXRhIFRyYW5zZmVyIFJlcXVlc3QiCisJCQkJCSAgICAiIHdhcyByZWplY3RlZFxuIik7CiAJCQkJU1lOQ05FRz0yOwkvKiBuZWdvdGlhdGlvbiBjb21wbGV0ZWQgKi8KIAkJCX0gZWxzZQotCQkJCXByaW50ayhJTkZPX0xFQUQgImluYm91bmQgbWVzc2FnZSAoTUVTU0FHRSBSRUpFQ1QpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIENVUlJFTlRfU0MsCisJCQkJCSAgICAiaW5ib3VuZCBtZXNzYWdlIChNRVNTQUdFIFJFSkVDVClcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQVZFX1BPSU5URVJTOgpAQCAtMTkwNyw3ICsxNzQxLDggQEAKIAkJCQkJbG9uZyB0aWNrczsKIAogCQkJCQlpZiAoTVNHSSgxKSAhPSAzKSB7Ci0JCQkJCQlwcmludGsoRVJSX0xFQUQgIlNEVFIgbWVzc2FnZSBsZW5ndGghPTNcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkJCQkJICAgICJTRFRSIG1lc3NhZ2UgbGVuZ3RoIT0zXG4iKTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAKQEAgLTE5MjQsMTAgKzE3NTksMTIgQEAKIAkJCQkJCS8qIG5lZ290aWF0aW9uIGluIHByb2dyZXNzICovCiAJCQkJCQlpZiAodGlja3MgPiA5IHx8IE1TR0koNCkgPCAxIHx8IE1TR0koNCkgPiA4KSB7CiAJCQkJCQkJQURETVNHTyhNRVNTQUdFX1JFSkVDVCk7Ci0JCQkJCQkJcHJpbnRrKElORk9fTEVBRCAicmVjZWl2ZWQgU3luY2hyb25vdXMgRGF0YSBUcmFuc2ZlciBSZXF1ZXN0IGludmFsaWQgLSByZWplY3RlZFxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCQkJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLAorCQkJCQkJCQkgICAgQ1VSUkVOVF9TQywKKwkJCQkJCQkJICAgICJyZWNlaXZlZCBTeW5jaHJvbm91cyBEYXRhIFRyYW5zZmVyIFJlcXVlc3QgaW52YWxpZCAtIHJlamVjdGVkXG4iKTsKIAkJCQkJCQlicmVhazsKIAkJCQkJCX0KLQkJCQkJCQorCiAJCQkJCQlTWU5DUkFURSB8PSAoKHRpY2tzIC0gMikgPDwgNCkgKyBNU0dJKDQpOwogCQkJCQl9IGVsc2UgaWYgKHRpY2tzIDw9IDkgJiYgTVNHSSg0KSA+PSAxKSB7CiAJCQkJCQlBRERNU0dPKEVYVEVOREVEX01FU1NBR0UpOwpAQCAtMTk0NywxMSArMTc4NCwxNCBAQAogCQkJCQkJU1lOQ1JBVEUgfD0gKCh0aWNrcyAtIDIpIDw8IDQpICsgTVNHSSg0KTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCS8qIHJlcXVlc3RlZCBTRFRSIGlzIHRvbyBzbG93LCBkbyBpdCBhc3luY2hyb25vdXNseSAqLwotCQkJCQkJcHJpbnRrKElORk9fTEVBRCAiU3luY2hyb25vdXMgRGF0YSBUcmFuc2ZlciBSZXF1ZXN0IHRvbyBzbG93IC0gUmVqZWN0aW5nXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywKKwkJCQkJCQkgICAgQ1VSUkVOVF9TQywKKwkJCQkJCQkgICAgIlN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCB0b28gc2xvdyAtIFJlamVjdGluZ1xuIik7CiAJCQkJCQlBRERNU0dPKE1FU1NBR0VfUkVKRUNUKTsKIAkJCQkJfQogCi0JCQkJCVNZTkNORUc9MjsJCS8qIG5lZ290aWF0aW9uIGNvbXBsZXRlZCAqLworCQkJCQkvKiBuZWdvdGlhdGlvbiBjb21wbGV0ZWQgKi8KKwkJCQkJU1lOQ05FRz0yOwogCQkJCQlTRVRSQVRFKFNZTkNSQVRFKTsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0xOTg1LDEyICsxODI1LDEyIEBACiBzdGF0aWMgdm9pZCBtc2dpX2VuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKIAlpZihNU0dJTEVOPjApCi0JCXByaW50ayhXQVJOX0xFQUQgInRhcmdldCBsZWZ0IGJlZm9yZSBtZXNzYWdlIGNvbXBsZXRlZCAoJWQpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBNU0dJTEVOKTsKKwkJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBDVVJSRU5UX1NDLAorCQkJICAgICJ0YXJnZXQgbGVmdCBiZWZvcmUgbWVzc2FnZSBjb21wbGV0ZWQgKCVkKVxuIiwKKwkJCSAgICBNU0dJTEVOKTsKIAotCWlmIChNU0dPTEVOID4gMCAmJiAhKEdFVFBPUlQoU1NUQVQxKSAmIEJVU0ZSRUUpKSB7Ci0JCURQUklOVEsoZGVidWdfbXNnaSwgREVCVUdfTEVBRCAibXNnbyBwZW5kaW5nXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwlpZiAoTVNHT0xFTiA+IDAgJiYgIShHRVRQT1JUKFNTVEFUMSkgJiBCVVNGUkVFKSkKIAkJU0VUUE9SVChTQ1NJU0lHLCBQX01TR0kgfCBTSUdfQVROTyk7Ci0JfSAKIH0KIAogLyoKQEAgLTIwMDMsMjEgKzE4NDMsMTIgQEAKIAkJaWYoKENVUlJFTlRfU0MtPlNDcC5waGFzZSAmIHN5bmNuZWcpICYmIFNZTkNORUc9PTIgJiYgU1lOQ1JBVEU9PTApIHsKIAkJCUFERE1TR08oSURFTlRJRlkoUkVDT05ORUNULCBDVVJSRU5UX1NDLT5kZXZpY2UtPmx1bikpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKElORk9fTEVBRCAidW5leHBlY3RlZCBNRVNTQUdFIE9VVCBwaGFzZTsgcmVqZWN0aW5nXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgQ1VSUkVOVF9TQywKKwkJCQkgICAgInVuZXhwZWN0ZWQgTUVTU0FHRSBPVVQgcGhhc2U7IHJlamVjdGluZ1xuIik7CiAJCQlBRERNU0dPKE1FU1NBR0VfUkVKRUNUKTsKIAkJfQogCX0KIAotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlpZihIT1NUREFUQShzaHBudCktPmRlYnVnICYgZGVidWdfbXNnbykgewotCQlpbnQgaTsKLQotCQlwcmludGsoREVCVUdfTEVBRCAibWVzc2FnZXMoICIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCQlmb3IgKGk9MDsgaTxNU0dPTEVOOyBpKz1zcGlfcHJpbnRfbXNnKCZNU0dPKGkpKSwgcHJpbnRrKCIgIikpCi0JCQk7Ci0JCXByaW50aygiKVxuIik7Ci0JfQotI2VuZGlmCiB9CiAKIC8qCkBAIC0yMDI2LDE2ICsxODU3LDkgQEAKICAqLwogc3RhdGljIHZvaWQgbXNnb19ydW4oc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7Ci0JaWYoTVNHT19JPT1NU0dPTEVOKQotCQlEUFJJTlRLKGRlYnVnX21zZ28sIERFQlVHX0xFQUQgIm1lc3NhZ2VzIGFsbCBzZW50ICglZC8lZClcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIE1TR09fSSwgTVNHT0xFTik7Ci0KIAl3aGlsZShNU0dPX0k8TVNHT0xFTikgewotCQlEUFJJTlRLKGRlYnVnX21zZ28sIERFQlVHX0xFQUQgIm1lc3NhZ2UgYnl0ZSAlMDJ4ICglZC8lZClcbiIsIENNRElORk8oQ1VSUkVOVF9TQyksIE1TR08oTVNHT19JKSwgTVNHT19JLCBNU0dPTEVOKTsKLQotCQlpZihURVNUTE8oU1NUQVQwLCBTUElPUkRZKSkgewotCQkJRFBSSU5USyhkZWJ1Z19tc2dvLCBERUJVR19MRUFEICIhU1BJT1JEWVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJCWlmIChURVNUTE8oU1NUQVQwLCBTUElPUkRZKSkKIAkJCXJldHVybjsKLQkJfQogCiAJCWlmIChNU0dPX0k9PU1TR09MRU4tMSkgewogCQkJLyogTGVhdmUgTUVTU0FHRSBPVVQgYWZ0ZXIgdHJhbnNmZXIgKi8KQEAgLTIwNTksMzYgKzE4ODMsMzMgQEAKIHN0YXRpYyB2b2lkIG1zZ29fZW5kKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewogCWlmKE1TR09fSTxNU0dPTEVOKSB7Ci0JCXByaW50ayhFUlJfTEVBRCAibWVzc2FnZSBzZW50IGluY29tcGxldGVseSAoJWQvJWQpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBNU0dPX0ksIE1TR09MRU4pOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCSAgICAibWVzc2FnZSBzZW50IGluY29tcGxldGVseSAoJWQvJWQpXG4iLAorCQkJICAgIE1TR09fSSwgTVNHT0xFTik7CiAJCWlmKFNZTkNORUc9PTEpIHsKLQkJCXByaW50ayhJTkZPX0xFQUQgIlN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCB3YXMgcmVqZWN0ZWRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBDVVJSRU5UX1NDLAorCQkJCSAgICAiU3luY2hyb25vdXMgRGF0YSBUcmFuc2ZlciBSZXF1ZXN0IHdhcyByZWplY3RlZFxuIik7CiAJCQlTWU5DTkVHPTI7CiAJCX0KIAl9Ci0JCQorCiAJTVNHT19JICA9IDA7CiAJTVNHT0xFTiA9IDA7CiB9CiAKLS8qIAorLyoKICAqIGNvbW1hbmQgcGhhc2UKICAqCiAgKi8KIHN0YXRpYyB2b2lkIGNtZF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewogCWlmIChDVVJSRU5UX1NDLT5TQ3Auc2VudF9jb21tYW5kKSB7Ci0JCXByaW50ayhFUlJfTEVBRCAiY29tbWFuZCBhbHJlYWR5IHNlbnRcbiIsIENNRElORk8oQ1VSUkVOVF9TQykpOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCSAgICAiY29tbWFuZCBhbHJlYWR5IHNlbnRcbiIpOwogCQlkb25lKHNocG50LCBESURfRVJST1IgPDwgMTYpOwogCQlyZXR1cm47CiAJfQogCi0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWlmIChIT1NUREFUQShzaHBudCktPmRlYnVnICYgZGVidWdfY21kKSB7Ci0JCXByaW50ayhERUJVR19MRUFEICJjbWRfaW5pdDogIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7Ci0JCV9fc2NzaV9wcmludF9jb21tYW5kKENVUlJFTlRfU0MtPmNtbmQpOwotCX0KLSNlbmRpZgotCiAJQ01EX0k9MDsKIH0KIApAQCAtMjA5OCwxOCArMTkxOSw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNtZF9ydW4oc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7Ci0JaWYoQ01EX0k9PUNVUlJFTlRfU0MtPmNtZF9sZW4pIHsKLQkJRFBSSU5USyhkZWJ1Z19jbWQsIERFQlVHX0xFQUQgImNvbW1hbmQgYWxyZWFkeSBjb21wbGV0ZWx5IHNlbnQgKCVkLyVkKSIsIENNRElORk8oQ1VSUkVOVF9TQyksIENNRF9JLCBDVVJSRU5UX1NDLT5jbWRfbGVuKTsKLQkJZGlzcF9wb3J0cyhzaHBudCk7Ci0JfQotCiAJd2hpbGUoQ01EX0k8Q1VSUkVOVF9TQy0+Y21kX2xlbikgewotCQlEUFJJTlRLKGRlYnVnX2NtZCwgREVCVUdfTEVBRCAiY29tbWFuZCBieXRlICUwMnggKCVkLyVkKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgQ1VSUkVOVF9TQy0+Y21uZFtDTURfSV0sIENNRF9JLCBDVVJSRU5UX1NDLT5jbWRfbGVuKTsKLQotCQlpZihURVNUTE8oU1NUQVQwLCBTUElPUkRZKSkgewotCQkJRFBSSU5USyhkZWJ1Z19jbWQsIERFQlVHX0xFQUQgIiFTUElPUkRZXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwkJaWYgKFRFU1RMTyhTU1RBVDAsIFNQSU9SRFkpKQogCQkJcmV0dXJuOwotCQl9CiAKIAkJU0VUUE9SVChTQ1NJREFULCBDVVJSRU5UX1NDLT5jbW5kW0NNRF9JKytdKTsKIAl9CkBAIC0yMTE4LDcgKzE5MzAsOSBAQAogc3RhdGljIHZvaWQgY21kX2VuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKIAlpZihDTURfSTxDVVJSRU5UX1NDLT5jbWRfbGVuKQotCQlwcmludGsoRVJSX0xFQUQgImNvbW1hbmQgc2VudCBpbmNvbXBsZXRlbHkgKCVkLyVkKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgQ01EX0ksIENVUlJFTlRfU0MtPmNtZF9sZW4pOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCSAgICAiY29tbWFuZCBzZW50IGluY29tcGxldGVseSAoJWQvJWQpXG4iLAorCQkJICAgIENNRF9JLCBDVVJSRU5UX1NDLT5jbWRfbGVuKTsKIAllbHNlCiAJCUNVUlJFTlRfU0MtPlNDcC5zZW50X2NvbW1hbmQrKzsKIH0KQEAgLTIxMjksMjAgKzE5NDMsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgc3RhdHVzX3J1bihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKLQlpZihURVNUTE8oU1NUQVQwLFNQSU9SRFkpKSB7Ci0JCURQUklOVEsoZGVidWdfc3RhdHVzLCBERUJVR19MRUFEICIhU1BJT1JEWVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSk7CisJaWYgKFRFU1RMTyhTU1RBVDAsIFNQSU9SRFkpKQogCQlyZXR1cm47Ci0JfQogCiAJQ1VSUkVOVF9TQy0+U0NwLlN0YXR1cyA9IEdFVFBPUlQoU0NTSURBVCk7CiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JaWYgKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19zdGF0dXMpIHsKLQkJcHJpbnRrKERFQlVHX0xFQUQgImluYm91bmQgc3RhdHVzICUwMnggIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgQ1VSUkVOVF9TQy0+U0NwLlN0YXR1cyk7Ci0JCXNjc2lfcHJpbnRfc3RhdHVzKENVUlJFTlRfU0MtPlNDcC5TdGF0dXMpOwotCQlwcmludGsoIlxuIik7Ci0JfQotI2VuZGlmCiB9CiAKIC8qCkBAIC0yMTYxLDEwICsxOTY2LDYgQEAKIAlTRVRQT1JUKFNJTU9ERTEsIEVOU0NTSVBFUlIgfCBFTlNDU0lSU1QgfCBFTlBIQVNFTUlTIHwgRU5CVVNGUkVFKTsKIAogCURBVEFfTEVOPTA7Ci0JRFBSSU5USyhkZWJ1Z19kYXRhaSwKLQkJREVCVUdfTEVBRCAiZGF0YWlfaW5pdDogcmVxdWVzdF9idWZmbGVuPSVkIHJlc2lkPSVkXG4iLAotCQlDTURJTkZPKENVUlJFTlRfU0MpLCBzY3NpX2J1ZmZsZW4oQ1VSUkVOVF9TQyksCi0JCXNjc2lfZ2V0X3Jlc2lkKENVUlJFTlRfU0MpKTsKIH0KIAogc3RhdGljIHZvaWQgZGF0YWlfcnVuKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQpAQCAtMjE4Niw4ICsxOTg3LDcgQEAKIAkJCWJhcnJpZXIoKTsKIAogCQlpZihURVNUTE8oRE1BU1RBVCwgREZJRk9GVUxMfElOVFNUQVQpKSB7Ci0JCQlwcmludGsoRVJSX0xFQUQgImRhdGFpIHRpbWVvdXQiLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQkJCWRpc3BfcG9ydHMoc2hwbnQpOworCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsICJkYXRhaSB0aW1lb3V0XG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTIxOTksOCArMTk5OSw4IEBACiAJCQkJYmFycmllcigpOwogCiAJCQlpZihURVNUTE8oU1NUQVQyLCBTRU1QVFkpKSB7Ci0JCQkJcHJpbnRrKEVSUl9MRUFEICJkYXRhaSBzZW1wdHkgdGltZW91dCIsIENNRElORk8oQ1VSUkVOVF9TQykpOwotCQkJCWRpc3BfcG9ydHMoc2hwbnQpOworCQkJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLAorCQkJCQkgICAgImRhdGFpIHNlbXB0eSB0aW1lb3V0Iik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTIyMDksNDggKzIwMDksNDkgQEAKIAogCQlpZihDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbD4wKSB7CiAJCQl3aGlsZShmaWZvZGF0YT4wICYmIENVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsPjApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAlkYXRhX2NvdW50ID0gZmlmb2RhdGE+Q1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWwgPworCQkJCWRhdGFfY291bnQgPSBmaWZvZGF0YSA+IENVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsID8KIAkJCQkJCUNVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsIDoKIAkJCQkJCWZpZm9kYXRhOwogCQkJCWZpZm9kYXRhIC09IGRhdGFfY291bnQ7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIAlpZihkYXRhX2NvdW50ICYgMSkgewotCQkJCQlEUFJJTlRLKGRlYnVnX2RhdGFpLCBERUJVR19MRUFEICI4Yml0XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVNFVFBPUlQoRE1BQ05UUkwwLCBFTkRNQXxfOEJJVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkqQ1VSUkVOVF9TQy0+U0NwLnB0cisrID0gR0VUUE9SVChEQVRBUE9SVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbC0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJREFUQV9MRU4rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVNFVFBPUlQoRE1BQ05UUkwwLCBFTkRNQSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJfQotCQotICAgICAgICAgICAgICAgICAgICAgICAgCWlmKGRhdGFfY291bnQgPiAxKSB7Ci0JCQkJCURQUklOVEsoZGVidWdfZGF0YWksIERFQlVHX0xFQUQgIjE2Yml0KCVkKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgZGF0YV9jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlkYXRhX2NvdW50ID4+PSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJaW5zdyhEQVRBUE9SVCwgQ1VSUkVOVF9TQy0+U0NwLnB0ciwgZGF0YV9jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlDVVJSRU5UX1NDLT5TQ3AucHRyICAgICAgICAgICArPSAyICogZGF0YV9jb3VudDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCUNVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsIC09IDIgKiBkYXRhX2NvdW50OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJREFUQV9MRU4gICAgICAgICAgICAgICAgICAgICAgKz0gMiAqIGRhdGFfY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJfQotCQotICAgICAgICAgICAgICAgICAgICAgICAgCWlmKENVUlJFTlRfU0MtPlNDcC50aGlzX3Jlc2lkdWFsPT0wICYmIENVUlJFTlRfU0MtPlNDcC5idWZmZXJzX3Jlc2lkdWFsPjApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCS8qIGFkdmFuY2UgdG8gbmV4dCBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCUNVUlJFTlRfU0MtPlNDcC5idWZmZXJzX3Jlc2lkdWFsLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlDVVJSRU5UX1NDLT5TQ3AucHRyICAgICAgICAgICA9IFNHX0FERFJFU1MoQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCA9IENVUlJFTlRfU0MtPlNDcC5idWZmZXItPmxlbmd0aDsKLQkJCQl9IAotICAgICAgICAgICAgICAgIAl9Ci0JCX0gZWxzZSBpZihmaWZvZGF0YT4wKSB7IAotCQkJcHJpbnRrKEVSUl9MRUFEICJubyBidWZmZXJzIGxlZnQgZm9yICVkKCVkKSBieXRlcyAoZGF0YSBvdmVycnVuIT8pXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBmaWZvZGF0YSwgR0VUUE9SVChGSUZPU1RBVCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgU0VUUE9SVChETUFDTlRSTDAsIEVORE1BfF84QklUKTsKKwkJCQlpZiAoZGF0YV9jb3VudCAmIDEpIHsKKwkJCQkJU0VUUE9SVChETUFDTlRSTDAsIEVORE1BfF84QklUKTsKKwkJCQkJKkNVUlJFTlRfU0MtPlNDcC5wdHIrKyA9IEdFVFBPUlQoREFUQVBPUlQpOworCQkJCQlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbC0tOworCQkJCQlEQVRBX0xFTisrOworCQkJCQlTRVRQT1JUKERNQUNOVFJMMCwgRU5ETUEpOworCQkJCX0KKworCQkJCWlmIChkYXRhX2NvdW50ID4gMSkgeworCQkJCQlkYXRhX2NvdW50ID4+PSAxOworCQkJCQlpbnN3KERBVEFQT1JULCBDVVJSRU5UX1NDLT5TQ3AucHRyLCBkYXRhX2NvdW50KTsKKwkJCQkJQ1VSUkVOVF9TQy0+U0NwLnB0ciArPSAyICogZGF0YV9jb3VudDsKKwkJCQkJQ1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWwgLT0gMiAqIGRhdGFfY291bnQ7CisJCQkJCURBVEFfTEVOICs9IDIgKiBkYXRhX2NvdW50OworCQkJCX0KKworCQkJCWlmIChDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCA9PSAwICYmCisJCQkJICAgIENVUlJFTlRfU0MtPlNDcC5idWZmZXJzX3Jlc2lkdWFsID4gMCkgeworCQkJCQkvKiBhZHZhbmNlIHRvIG5leHQgYnVmZmVyICovCisJCQkJCUNVUlJFTlRfU0MtPlNDcC5idWZmZXJzX3Jlc2lkdWFsLS07CisJCQkJCUNVUlJFTlRfU0MtPlNDcC5idWZmZXIrKzsKKwkJCQkJQ1VSUkVOVF9TQy0+U0NwLnB0ciAgICAgICAgICAgPSBTR19BRERSRVNTKENVUlJFTlRfU0MtPlNDcC5idWZmZXIpOworCQkJCQlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCA9IENVUlJFTlRfU0MtPlNDcC5idWZmZXItPmxlbmd0aDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoZmlmb2RhdGEgPiAwKSB7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCQkgICAgIm5vIGJ1ZmZlcnMgbGVmdCBmb3IgJWQoJWQpIGJ5dGVzIgorCQkJCSAgICAiIChkYXRhIG92ZXJydW4hPylcbiIsCisJCQkJICAgIGZpZm9kYXRhLCBHRVRQT1JUKEZJRk9TVEFUKSk7CisJCQlTRVRQT1JUKERNQUNOVFJMMCwgRU5ETUF8XzhCSVQpOwogCQkJd2hpbGUoZmlmb2RhdGE+MCkgewogCQkJCWludCBkYXRhOwogCQkJCWRhdGE9R0VUUE9SVChEQVRBUE9SVCk7Ci0JCQkJRFBSSU5USyhkZWJ1Z19kYXRhaSwgREVCVUdfTEVBRCAiZGF0YT0lMDJ4XG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBkYXRhKTsKIAkJCQlmaWZvZGF0YS0tOwogCQkJCURBVEFfTEVOKys7CiAJCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICBTRVRQT1JUKERNQUNOVFJMMCwgRU5ETUF8XzhCSVQpOworCQkJU0VUUE9SVChETUFDTlRSTDAsIEVORE1BfF84QklUKTsKIAkJfQogCX0KIApAQCAtMjI1OCwxOSArMjA1OSwyMCBAQAogCSAgIFRFU1RMTyhETUFTVEFULCBERklGT0VNUCkgfHwKIAkgICBURVNUTE8oU1NUQVQyLCBTRU1QVFkpIHx8CiAJICAgR0VUUE9SVChGSUZPU1RBVCk+MCkgewotCSAgIAkvKgorCQkvKgogCQkgKiBzb21ldGhpbmcgd2VudCB3cm9uZywgaWYgdGhlcmUncyBzb21ldGhpbmcgbGVmdCBpbiB0aGUgZmlmb3MKIAkJICogb3IgdGhlIHBoYXNlIGRpZG4ndCBjaGFuZ2UKIAkJICovCi0JCXByaW50ayhFUlJfTEVBRCAiZmlmb3Mgc2hvdWxkIGJlIGVtcHR5IGFuZCBwaGFzZSBzaG91bGQgaGF2ZSBjaGFuZ2VkXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQkJZGlzcF9wb3J0cyhzaHBudCk7CisJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBDVVJSRU5UX1NDLAorCQkJICAgICJmaWZvcyBzaG91bGQgYmUgZW1wdHkgYW5kIHBoYXNlIHNob3VsZCBoYXZlIGNoYW5nZWRcbiIpOwogCX0KIAogCWlmKERBVEFfTEVOIT1HRVRTVENOVCgpKSB7Ci0JCXByaW50ayhFUlJfTEVBRAotCQkgICAgICAgIm1hbnVhbCB0cmFuc2ZlciBjb3VudCBkaWZmZXJzIGZyb20gYXV0b21hdGljIChjb3VudD0lZDtzdGNudD0lZDtkaWZmPSVkO2ZpZm9zdGF0PSVkKSIsCi0JCSAgICAgICBDTURJTkZPKENVUlJFTlRfU0MpLCBEQVRBX0xFTiwgR0VUU1RDTlQoKSwgR0VUU1RDTlQoKS1EQVRBX0xFTiwgR0VUUE9SVChGSUZPU1RBVCkpOwotCQlkaXNwX3BvcnRzKHNocG50KTsKKwkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkgICAgIm1hbnVhbCB0cmFuc2ZlciBjb3VudCBkaWZmZXJzIGZyb20gYXV0b21hdGljICIKKwkJCSAgICAiKGNvdW50PSVkO3N0Y250PSVkO2RpZmY9JWQ7Zmlmb3N0YXQ9JWQpIiwKKwkJCSAgICBEQVRBX0xFTiwgR0VUU1RDTlQoKSwgR0VUU1RDTlQoKS1EQVRBX0xFTiwKKwkJCSAgICBHRVRQT1JUKEZJRk9TVEFUKSk7CiAJCW1kZWxheSgxMDAwMCk7CiAJfQogfQpAQCAtMjI3OSwxMSArMjA4MSw2IEBACiB7CiAJQ01EX0lOQ19SRVNJRChDVVJSRU5UX1NDLCAtR0VUU1RDTlQoKSk7CiAKLQlEUFJJTlRLKGRlYnVnX2RhdGFpLAotCQlERUJVR19MRUFEICJkYXRhaV9lbmQ6IHJlcXVlc3RfYnVmZmxlbj0lZCByZXNpZD0lZCBzdGNudD0lZFxuIiwKLQkJQ01ESU5GTyhDVVJSRU5UX1NDKSwgc2NzaV9idWZmbGVuKENVUlJFTlRfU0MpLAotCQlzY3NpX2dldF9yZXNpZChDVVJSRU5UX1NDKSwgR0VUU1RDTlQoKSk7Ci0KIAlTRVRQT1JUKFNYRlJDVEwwLCBDSDF8Q0xSU1RDTlQpOwogCVNFVFBPUlQoRE1BQ05UUkwwLCAwKTsKIH0KQEAgLTIzMDQsMTEgKzIxMDEsNiBAQAogCVNFVFBPUlQoU0lNT0RFMSwgRU5TQ1NJUEVSUiB8IEVOU0NTSVJTVCB8IEVOUEhBU0VNSVMgfCBFTkJVU0ZSRUUgKTsKIAogCURBVEFfTEVOID0gc2NzaV9nZXRfcmVzaWQoQ1VSUkVOVF9TQyk7Ci0KLQlEUFJJTlRLKGRlYnVnX2RhdGFvLAotCQlERUJVR19MRUFEICJkYXRhb19pbml0OiByZXF1ZXN0X2J1ZmZsZW49JWQ7IHJlc2lkPSVkXG4iLAotCQlDTURJTkZPKENVUlJFTlRfU0MpLCBzY3NpX2J1ZmZsZW4oQ1VSUkVOVF9TQyksCi0JCXNjc2lfZ2V0X3Jlc2lkKENVUlJFTlRfU0MpKTsKIH0KIAogc3RhdGljIHZvaWQgZGF0YW9fcnVuKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQpAQCAtMjMyMyw4ICsyMTE1LDkgQEAKIAkJCWRhdGFfY291bnQ9Q1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWw7CiAKIAkJaWYoVEVTVExPKERNQVNUQVQsIERGSUZPRU1QKSkgewotCQkJcHJpbnRrKEVSUl9MRUFEICJkYXRhbyBmaWZvIG5vdCBlbXB0eSAoJWQpIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgR0VUUE9SVChGSUZPU1RBVCkpOwotCQkJZGlzcF9wb3J0cyhzaHBudCk7CisJCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywKKwkJCQkgICAgImRhdGFvIGZpZm8gbm90IGVtcHR5ICglZCkiLAorCQkJCSAgICBHRVRQT1JUKEZJRk9TVEFUKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0yMzQyLDcgKzIxMzUsNyBAQAogCQkJQ1VSUkVOVF9TQy0+U0NwLnB0ciAgICAgICAgICAgKz0gMiAqIGRhdGFfY291bnQ7CiAJCQlDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbCAtPSAyICogZGF0YV9jb3VudDsKIAkJCUNNRF9JTkNfUkVTSUQoQ1VSUkVOVF9TQywgLTIgKiBkYXRhX2NvdW50KTsKLQkgIAl9CisJCX0KIAogCQlpZihDVVJSRU5UX1NDLT5TQ3AudGhpc19yZXNpZHVhbD09MCAmJiBDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyc19yZXNpZHVhbD4wKSB7CiAJCQkvKiBhZHZhbmNlIHRvIG5leHQgYnVmZmVyICovCkBAIC0yMzU3LDggKzIxNTAsNyBAQAogCQkJYmFycmllcigpOwogCiAJCWlmKFRFU1RMTyhETUFTVEFULCBERklGT0VNUHxJTlRTVEFUKSkgewotCQkJcHJpbnRrKEVSUl9MRUFEICJkYXRhb3V0IHRpbWVvdXQiLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQkJCWRpc3BfcG9ydHMoc2hwbnQpOworCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsICJkYXRhb3V0IHRpbWVvdXRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yMzY4LDM1ICsyMTYwLDIzIEBACiB7CiAJaWYoVEVTVExPKERNQVNUQVQsIERGSUZPRU1QKSkgewogCQlpbnQgZGF0YV9jb3VudCA9IChEQVRBX0xFTiAtIHNjc2lfZ2V0X3Jlc2lkKENVUlJFTlRfU0MpKSAtCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRTVENOVCgpOwotCi0JCURQUklOVEsoZGVidWdfZGF0YW8sIERFQlVHX0xFQUQgImRhdGFvOiAlZCBieXRlcyB0byByZXNlbmQgKCVkIHdyaXR0ZW4sICVkIHRyYW5zZmVycmVkKVxuIiwKLQkJCUNNRElORk8oQ1VSUkVOVF9TQyksCi0JCQlkYXRhX2NvdW50LAotCQkJREFUQV9MRU4gLSBzY3NpX2dldF9yZXNpZChDVVJSRU5UX1NDKSwKLQkJCUdFVFNUQ05UKCkpOworCQkJR0VUU1RDTlQoKTsKIAogCQlDTURfSU5DX1JFU0lEKENVUlJFTlRfU0MsIGRhdGFfY291bnQpOwogCiAJCWRhdGFfY291bnQgLT0gQ1VSUkVOVF9TQy0+U0NwLnB0ciAtCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0dfQUREUkVTUyhDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyKTsKKwkJCVNHX0FERFJFU1MoQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcik7CiAJCXdoaWxlKGRhdGFfY291bnQ+MCkgewogCQkJQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlci0tOwogCQkJQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwrKzsKIAkJCWRhdGFfY291bnQgLT0gQ1VSUkVOVF9TQy0+U0NwLmJ1ZmZlci0+bGVuZ3RoOwogCQl9CiAJCUNVUlJFTlRfU0MtPlNDcC5wdHIgPSBTR19BRERSRVNTKENVUlJFTlRfU0MtPlNDcC5idWZmZXIpIC0KLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NvdW50OworCQkJZGF0YV9jb3VudDsKIAkJQ1VSUkVOVF9TQy0+U0NwLnRoaXNfcmVzaWR1YWwgPSBDVVJSRU5UX1NDLT5TQ3AuYnVmZmVyLT5sZW5ndGggKwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfY291bnQ7CisJCQlkYXRhX2NvdW50OwogCX0KIAotCURQUklOVEsoZGVidWdfZGF0YW8sIERFQlVHX0xFQUQgImRhdGFvX2VuZDogcmVxdWVzdF9idWZmbGVuPSVkOyByZXNpZD0lZDsgc3RjbnQ9JWRcbiIsCi0JCUNNRElORk8oQ1VSUkVOVF9TQyksCi0JCXNjc2lfYnVmZmxlbihDVVJSRU5UX1NDKSwKLQkJc2NzaV9nZXRfcmVzaWQoQ1VSUkVOVF9TQyksCi0JCUdFVFNUQ05UKCkpOwotCiAJU0VUUE9SVChTWEZSQ1RMMCwgQ0gxfENMUkNIMXxDTFJTVENOVCk7CiAJU0VUUE9SVChTWEZSQ1RMMCwgQ0gxKTsKIApAQCAtMjQyMCw3ICsyMjAwLDcgQEAKIAkJU1RBVEU9cnN0aTsKIAkJU0VUUE9SVChTQ1NJU0VRLDApOwogCQlTRVRQT1JUKFNTVEFUMSxTQ1NJUlNUSSk7Ci0gIAl9IGVsc2UgaWYoc3RhdDAgJiBTRUxESSAmJiBQUkVWU1RBVEU9PWJ1c2ZyZWUpIHsKKwl9IGVsc2UgaWYgKHN0YXQwICYgU0VMREkgJiYgUFJFVlNUQVRFID09IGJ1c2ZyZWUpIHsKIAkJU1RBVEU9c2VsZGk7CiAJfSBlbHNlIGlmKHN0YXQwICYgU0VMRE8gJiYgQ1VSUkVOVF9TQyAmJiAoQ1VSUkVOVF9TQy0+U0NwLnBoYXNlICYgc2VsZWN0aW5nKSkgewogCQlTVEFURT1zZWxkbzsKQEAgLTI0NDUsOCArMjIyNSw3IEBACiAJfQogCiAJaWYoKHN0YXQwICYgU0VMREkpICYmIFNUQVRFIT1zZWxkaSAmJiAhZGF0YXBoYXNlKSB7Ci0JCXByaW50ayhJTkZPX0xFQUQgInJlc2VsZWN0aW9uIG1pc3NlZD8iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKLQkJZGlzcF9wb3J0cyhzaHBudCk7CisJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgQ1VSUkVOVF9TQywgInJlc2VsZWN0aW9uIG1pc3NlZD8iKTsKIAl9CiAKIAlpZihTVEFURSE9UFJFVlNUQVRFKSB7CkBAIC0yNDY0LDcgKzIyNDMsNyBAQAogICovCiBzdGF0aWMgdm9pZCBwYXJlcnJfcnVuKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewotCXByaW50ayhFUlJfTEVBRCAicGFyaXR5IGVycm9yXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpKTsKKwlzY21kX3ByaW50ayhLRVJOX0VSUiwgQ1VSUkVOVF9TQywgInBhcml0eSBlcnJvclxuIik7CiAJZG9uZShzaHBudCwgRElEX1BBUklUWSA8PCAxNik7CiB9CiAKQEAgLTI0NzYsOCArMjI1NSw4IEBACiB7CiAJU2NzaV9DbW5kICpwdHI7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgImFoYTE1MnglZDogc2NzaSByZXNldCBpblxuIiwgSE9TVE5PKTsKLQkKKwlzaG9zdF9wcmludGsoS0VSTl9OT1RJQ0UsIHNocG50LCAic2NzaSByZXNldCBpblxuIik7CisKIAlwdHI9RElTQ09OTkVDVEVEX1NDOwogCXdoaWxlKHB0cikgewogCQlTY3NpX0NtbmQgKm5leHQgPSBTQ05FWFQocHRyKTsKQEAgLTI1MzksOCArMjMxOCw2IEBACiAKIAkJZGF0YXBoYXNlPXVwZGF0ZV9zdGF0ZShzaHBudCk7CiAKLQkJRFBSSU5USyhkZWJ1Z19waGFzZXMsIExFQUQgInN0YXJ0ICVzICVzKCVzKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgc3RhdGVzW1NUQVRFXS5uYW1lLCBzdGF0ZXNbUFJFVlNUQVRFXS5uYW1lLCBzdGF0ZXNbTEFTVFNUQVRFXS5uYW1lKTsKLQogCQkvKgogCQkgKiBlbmQgcHJldmlvdXMgc3RhdGUKIAkJICoKQEAgLTI1NjcsOSArMjM0NCw5IEBACiAJCWlmKGRhdGFwaGFzZSkgewogCQkJU0VUUE9SVChTU1RBVDAsIFJFUUlOSVQpOwogCQkJU0VUUE9SVChTQ1NJU0lHLCBHRVRQT1JUKFNDU0lTSUcpICYgUF9NQVNLKTsKLQkJCVNFVFBPUlQoU1NUQVQxLCBQSEFTRUNIRyk7ICAKKwkJCVNFVFBPUlQoU1NUQVQxLCBQSEFTRUNIRyk7CiAJCX0KLQkJCisKIAkJLyoKIAkJICogZW5hYmxlIFNQSU8gbW9kZSBpZiBwcmV2aW91cyBkaWRuJ3QgdXNlIGl0CiAJCSAqIGFuZCB0aGlzIG9uZSBkb2VzCkBAIC0yNTgxLDE0ICsyMzU4LDE0IEBACiAJCQlpZihDVVJSRU5UX1NDKQogCQkJCUNVUlJFTlRfU0MtPlNDcC5waGFzZSB8PSBzcGlvcmR5OwogCQl9Ci0JCQorCiAJCS8qCiAJCSAqIGluaXRpYWxpemUgZm9yIG5ldyBzdGF0ZQogCQkgKgogCQkgKi8KIAkJaWYoUFJFVlNUQVRFIT1TVEFURSAmJiBzdGF0ZXNbU1RBVEVdLmluaXQpCiAJCQlzdGF0ZXNbU1RBVEVdLmluaXQoc2hwbnQpOwotCQkKKwogCQkvKgogCQkgKiBoYW5kbGUgY3VycmVudCBzdGF0ZQogCQkgKgpAQCAtMjU5Niw4ICsyMzczLDkgQEAKIAkJaWYoc3RhdGVzW1NUQVRFXS5ydW4pCiAJCQlzdGF0ZXNbU1RBVEVdLnJ1bihzaHBudCk7CiAJCWVsc2UKLQkJCXByaW50ayhFUlJfTEVBRCAidW5leHBlY3RlZCBzdGF0ZSAoJXgpXG4iLCBDTURJTkZPKENVUlJFTlRfU0MpLCBTVEFURSk7Ci0JCQorCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIENVUlJFTlRfU0MsCisJCQkJICAgICJ1bmV4cGVjdGVkIHN0YXRlICgleClcbiIsIFNUQVRFKTsKKwogCQkvKgogCQkgKiBzZXR1cCBjb250cm9sbGVyIHRvIGludGVycnVwdCBvbgogCQkgKiB0aGUgbmV4dCBleHBlY3RlZCBjb25kaXRpb24gYW5kCkBAIC0yNjEzLDcgKzIzOTEsNiBAQAogCQlIT1NUREFUQShzaHBudCktPnRpbWVbU1RBVEVdICs9IGppZmZpZXMtc3RhcnQ7CiAjZW5kaWYKIAotCQlEUFJJTlRLKGRlYnVnX3BoYXNlcywgTEVBRCAiZW5kICVzICVzKCVzKVxuIiwgQ01ESU5GTyhDVVJSRU5UX1NDKSwgc3RhdGVzW1NUQVRFXS5uYW1lLCBzdGF0ZXNbUFJFVlNUQVRFXS5uYW1lLCBzdGF0ZXNbTEFTVFNUQVRFXS5uYW1lKTsKIAl9IHdoaWxlKHBlbmRpbmcpOwogCiAJLyoKQEAgLTI2MjYsMjg5ICsyNDAzLDQyIEBACiB9CiAKIAotLyogCisvKgogICogRHVtcCB0aGUgY3VycmVudCBkcml2ZXIgc3RhdHVzIGFuZCBwYW5pYwogICovCiBzdGF0aWMgdm9pZCBhaGExNTJ4X2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50LCBjaGFyICptc2cpCiB7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlxuYWhhMTUyeCVkOiAlc1xuIiwgSE9TVE5PLCBtc2cpOworCXNob3N0X3ByaW50ayhLRVJOX0VNRVJHLCBzaHBudCwgIiVzXG4iLCBtc2cpOwogCXNob3dfcXVldWVzKHNocG50KTsKIAlwYW5pYygiYWhhMTUyeCBwYW5pY1xuIik7CiB9CiAKIC8qCi0gKiBEaXNwbGF5IHJlZ2lzdGVycyBvZiBBSUMtNjI2MAotICovCi1zdGF0aWMgdm9pZCBkaXNwX3BvcnRzKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQotewotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlpbnQgczsKLQotCXByaW50aygiXG4lczogJXMoJXMpICIsCi0JCUNVUlJFTlRfU0MgPyAiYnVzeSIgOiAid2FpdGluZyIsCi0JCXN0YXRlc1tTVEFURV0ubmFtZSwKLQkJc3RhdGVzW1BSRVZTVEFURV0ubmFtZSk7Ci0KLQlzID0gR0VUUE9SVChTQ1NJU0VRKTsKLQlwcmludGsoIlNDU0lTRVEoICIpOwotCWlmIChzICYgVEVNT0RFTykKLQkJcHJpbnRrKCJUQVJHRVQgTU9ERSAiKTsKLQlpZiAocyAmIEVOU0VMTykKLQkJcHJpbnRrKCJTRUxPICIpOwotCWlmIChzICYgRU5TRUxJKQotCQlwcmludGsoIlNFTEkgIik7Ci0JaWYgKHMgJiBFTlJFU0VMSSkKLQkJcHJpbnRrKCJSRVNFTEkgIik7Ci0JaWYgKHMgJiBFTkFVVE9BVE5PKQotCQlwcmludGsoIkFVVE9BVE5PICIpOwotCWlmIChzICYgRU5BVVRPQVROSSkKLQkJcHJpbnRrKCJBVVRPQVROSSAiKTsKLQlpZiAocyAmIEVOQVVUT0FUTlApCi0JCXByaW50aygiQVVUT0FUTlAgIik7Ci0JaWYgKHMgJiBTQ1NJUlNUTykKLQkJcHJpbnRrKCJTQ1NJUlNUTyAiKTsKLQlwcmludGsoIik7Iik7Ci0KLQlwcmludGsoIiBTQ1NJU0lHKCIpOwotCXMgPSBHRVRQT1JUKFNDU0lTSUcpOwotCXN3aXRjaCAocyAmIFBfTUFTSykgewotCWNhc2UgUF9EQVRBTzoKLQkJcHJpbnRrKCJEQVRBIE9VVCIpOwotCQlicmVhazsKLQljYXNlIFBfREFUQUk6Ci0JCXByaW50aygiREFUQSBJTiIpOwotCQlicmVhazsKLQljYXNlIFBfQ01EOgotCQlwcmludGsoIkNPTU1BTkQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBQX1NUQVRVUzoKLQkJcHJpbnRrKCJTVEFUVVMiKTsKLQkJYnJlYWs7Ci0JY2FzZSBQX01TR086Ci0JCXByaW50aygiTUVTU0FHRSBPVVQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBQX01TR0k6Ci0JCXByaW50aygiTUVTU0FHRSBJTiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIippbnZhbGlkKiIpOwotCQlicmVhazsKLQl9Ci0KLQlwcmludGsoIik7ICIpOwotCi0JcHJpbnRrKCJJTlRTVEFUICglcyk7ICIsIFRFU1RISShETUFTVEFULCBJTlRTVEFUKSA/ICJoaSIgOiAibG8iKTsKLQotCXByaW50aygiU1NUQVQoICIpOwotCXMgPSBHRVRQT1JUKFNTVEFUMCk7Ci0JaWYgKHMgJiBUQVJHRVQpCi0JCXByaW50aygiVEFSR0VUICIpOwotCWlmIChzICYgU0VMRE8pCi0JCXByaW50aygiU0VMRE8gIik7Ci0JaWYgKHMgJiBTRUxESSkKLQkJcHJpbnRrKCJTRUxESSAiKTsKLQlpZiAocyAmIFNFTElOR08pCi0JCXByaW50aygiU0VMSU5HTyAiKTsKLQlpZiAocyAmIFNXUkFQKQotCQlwcmludGsoIlNXUkFQICIpOwotCWlmIChzICYgU0RPTkUpCi0JCXByaW50aygiU0RPTkUgIik7Ci0JaWYgKHMgJiBTUElPUkRZKQotCQlwcmludGsoIlNQSU9SRFkgIik7Ci0JaWYgKHMgJiBETUFET05FKQotCQlwcmludGsoIkRNQURPTkUgIik7Ci0KLQlzID0gR0VUUE9SVChTU1RBVDEpOwotCWlmIChzICYgU0VMVE8pCi0JCXByaW50aygiU0VMVE8gIik7Ci0JaWYgKHMgJiBBVE5UQVJHKQotCQlwcmludGsoIkFUTlRBUkcgIik7Ci0JaWYgKHMgJiBTQ1NJUlNUSSkKLQkJcHJpbnRrKCJTQ1NJUlNUSSAiKTsKLQlpZiAocyAmIFBIQVNFTUlTKQotCQlwcmludGsoIlBIQVNFTUlTICIpOwotCWlmIChzICYgQlVTRlJFRSkKLQkJcHJpbnRrKCJCVVNGUkVFICIpOwotCWlmIChzICYgU0NTSVBFUlIpCi0JCXByaW50aygiU0NTSVBFUlIgIik7Ci0JaWYgKHMgJiBQSEFTRUNIRykKLQkJcHJpbnRrKCJQSEFTRUNIRyAiKTsKLQlpZiAocyAmIFJFUUlOSVQpCi0JCXByaW50aygiUkVRSU5JVCAiKTsKLQlwcmludGsoIik7ICIpOwotCi0KLQlwcmludGsoIlNTVEFUKCAiKTsKLQotCXMgPSBHRVRQT1JUKFNTVEFUMCkgJiBHRVRQT1JUKFNJTU9ERTApOwotCi0JaWYgKHMgJiBUQVJHRVQpCi0JCXByaW50aygiVEFSR0VUICIpOwotCWlmIChzICYgU0VMRE8pCi0JCXByaW50aygiU0VMRE8gIik7Ci0JaWYgKHMgJiBTRUxESSkKLQkJcHJpbnRrKCJTRUxESSAiKTsKLQlpZiAocyAmIFNFTElOR08pCi0JCXByaW50aygiU0VMSU5HTyAiKTsKLQlpZiAocyAmIFNXUkFQKQotCQlwcmludGsoIlNXUkFQICIpOwotCWlmIChzICYgU0RPTkUpCi0JCXByaW50aygiU0RPTkUgIik7Ci0JaWYgKHMgJiBTUElPUkRZKQotCQlwcmludGsoIlNQSU9SRFkgIik7Ci0JaWYgKHMgJiBETUFET05FKQotCQlwcmludGsoIkRNQURPTkUgIik7Ci0KLQlzID0gR0VUUE9SVChTU1RBVDEpICYgR0VUUE9SVChTSU1PREUxKTsKLQotCWlmIChzICYgU0VMVE8pCi0JCXByaW50aygiU0VMVE8gIik7Ci0JaWYgKHMgJiBBVE5UQVJHKQotCQlwcmludGsoIkFUTlRBUkcgIik7Ci0JaWYgKHMgJiBTQ1NJUlNUSSkKLQkJcHJpbnRrKCJTQ1NJUlNUSSAiKTsKLQlpZiAocyAmIFBIQVNFTUlTKQotCQlwcmludGsoIlBIQVNFTUlTICIpOwotCWlmIChzICYgQlVTRlJFRSkKLQkJcHJpbnRrKCJCVVNGUkVFICIpOwotCWlmIChzICYgU0NTSVBFUlIpCi0JCXByaW50aygiU0NTSVBFUlIgIik7Ci0JaWYgKHMgJiBQSEFTRUNIRykKLQkJcHJpbnRrKCJQSEFTRUNIRyAiKTsKLQlpZiAocyAmIFJFUUlOSVQpCi0JCXByaW50aygiUkVRSU5JVCAiKTsKLQlwcmludGsoIik7ICIpOwotCi0JcHJpbnRrKCJTWEZSQ1RMMCggIik7Ci0KLQlzID0gR0VUUE9SVChTWEZSQ1RMMCk7Ci0JaWYgKHMgJiBTQ1NJRU4pCi0JCXByaW50aygiU0NTSUVOICIpOwotCWlmIChzICYgRE1BRU4pCi0JCXByaW50aygiRE1BRU4gIik7Ci0JaWYgKHMgJiBDSDEpCi0JCXByaW50aygiQ0gxICIpOwotCWlmIChzICYgQ0xSU1RDTlQpCi0JCXByaW50aygiQ0xSU1RDTlQgIik7Ci0JaWYgKHMgJiBTUElPRU4pCi0JCXByaW50aygiU1BJT0VOICIpOwotCWlmIChzICYgQ0xSQ0gxKQotCQlwcmludGsoIkNMUkNIMSAiKTsKLQlwcmludGsoIik7ICIpOwotCi0JcHJpbnRrKCJTSUdOQUwoICIpOwotCi0JcyA9IEdFVFBPUlQoU0NTSVNJRyk7Ci0JaWYgKHMgJiBTSUdfQVROSSkKLQkJcHJpbnRrKCJBVE5JICIpOwotCWlmIChzICYgU0lHX1NFTEkpCi0JCXByaW50aygiU0VMSSAiKTsKLQlpZiAocyAmIFNJR19CU1lJKQotCQlwcmludGsoIkJTWUkgIik7Ci0JaWYgKHMgJiBTSUdfUkVRSSkKLQkJcHJpbnRrKCJSRVFJICIpOwotCWlmIChzICYgU0lHX0FDS0kpCi0JCXByaW50aygiQUNLSSAiKTsKLQlwcmludGsoIik7ICIpOwotCi0JcHJpbnRrKCJTRUxJRCAoJTAyeCksICIsIEdFVFBPUlQoU0VMSUQpKTsKLQotCXByaW50aygiU1RDTlQgKCVkKSwgIiwgR0VUU1RDTlQoKSk7Ci0JCi0JcHJpbnRrKCJTU1RBVDIoICIpOwotCi0JcyA9IEdFVFBPUlQoU1NUQVQyKTsKLQlpZiAocyAmIFNPRkZTRVQpCi0JCXByaW50aygiU09GRlNFVCAiKTsKLQlpZiAocyAmIFNFTVBUWSkKLQkJcHJpbnRrKCJTRU1QVFkgIik7Ci0JaWYgKHMgJiBTRlVMTCkKLQkJcHJpbnRrKCJTRlVMTCAiKTsKLQlwcmludGsoIik7IFNGQ05UICglZCk7ICIsIHMgJiAoU0ZVTEwgfCBTRkNOVCkpOwotCi0JcyA9IEdFVFBPUlQoU1NUQVQzKTsKLQlwcmludGsoIlNDU0lDTlQgKCVkKSwgT0ZGQ05UKCVkKSwgIiwgKHMgJiAweGYwKSA+PiA0LCBzICYgMHgwZik7Ci0KLQlwcmludGsoIlNTVEFUNCggIik7Ci0JcyA9IEdFVFBPUlQoU1NUQVQ0KTsKLQlpZiAocyAmIFNZTkNFUlIpCi0JCXByaW50aygiU1lOQ0VSUiAiKTsKLQlpZiAocyAmIEZXRVJSKQotCQlwcmludGsoIkZXRVJSICIpOwotCWlmIChzICYgRlJFUlIpCi0JCXByaW50aygiRlJFUlIgIik7Ci0JcHJpbnRrKCIpOyAiKTsKLQotCXByaW50aygiRE1BQ05UUkwwKCAiKTsKLQlzID0gR0VUUE9SVChETUFDTlRSTDApOwotCXByaW50aygiJXMgIiwgcyAmIF84QklUID8gIjhCSVQiIDogIjE2QklUIik7Ci0JcHJpbnRrKCIlcyAiLCBzICYgRE1BID8gIkRNQSIgOiAiUElPIik7Ci0JcHJpbnRrKCIlcyAiLCBzICYgV1JJVEVfUkVBRCA/ICJXUklURSIgOiAiUkVBRCIpOwotCWlmIChzICYgRU5ETUEpCi0JCXByaW50aygiRU5ETUEgIik7Ci0JaWYgKHMgJiBJTlRFTikKLQkJcHJpbnRrKCJJTlRFTiAiKTsKLQlpZiAocyAmIFJTVEZJRk8pCi0JCXByaW50aygiUlNURklGTyAiKTsKLQlpZiAocyAmIFNXSU5UKQotCQlwcmludGsoIlNXSU5UICIpOwotCXByaW50aygiKTsgIik7Ci0KLQlwcmludGsoIkRNQVNUQVQoICIpOwotCXMgPSBHRVRQT1JUKERNQVNUQVQpOwotCWlmIChzICYgQVRET05FKQotCQlwcmludGsoIkFURE9ORSAiKTsKLQlpZiAocyAmIFdPUkRSRFkpCi0JCXByaW50aygiV09SRFJEWSAiKTsKLQlpZiAocyAmIERGSUZPRlVMTCkKLQkJcHJpbnRrKCJERklGT0ZVTEwgIik7Ci0JaWYgKHMgJiBERklGT0VNUCkKLQkJcHJpbnRrKCJERklGT0VNUCAiKTsKLQlwcmludGsoIilcbiIpOwotI2VuZGlmCi19Ci0KLS8qCiAgKiBkaXNwbGF5IGVuYWJsZWQgaW50ZXJydXB0cwogICovCiBzdGF0aWMgdm9pZCBkaXNwX2VuaW50cihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKLQlpbnQgczsKKwlpbnQgczAsIHMxOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgImVuYWJsZWQgaW50ZXJydXB0cyAoICIpOworCXMwID0gR0VUUE9SVChTSU1PREUwKTsKKwlzMSA9IEdFVFBPUlQoU0lNT0RFMSk7CiAKLQlzID0gR0VUUE9SVChTSU1PREUwKTsKLQlpZiAocyAmIEVOU0VMRE8pCi0JCXByaW50aygiRU5TRUxETyAiKTsKLQlpZiAocyAmIEVOU0VMREkpCi0JCXByaW50aygiRU5TRUxESSAiKTsKLQlpZiAocyAmIEVOU0VMSU5HTykKLQkJcHJpbnRrKCJFTlNFTElOR08gIik7Ci0JaWYgKHMgJiBFTlNXUkFQKQotCQlwcmludGsoIkVOU1dSQVAgIik7Ci0JaWYgKHMgJiBFTlNET05FKQotCQlwcmludGsoIkVOU0RPTkUgIik7Ci0JaWYgKHMgJiBFTlNQSU9SRFkpCi0JCXByaW50aygiRU5TUElPUkRZICIpOwotCWlmIChzICYgRU5ETUFET05FKQotCQlwcmludGsoIkVORE1BRE9ORSAiKTsKLQotCXMgPSBHRVRQT1JUKFNJTU9ERTEpOwotCWlmIChzICYgRU5TRUxUSU1PKQotCQlwcmludGsoIkVOU0VMVElNTyAiKTsKLQlpZiAocyAmIEVOQVROVEFSRykKLQkJcHJpbnRrKCJFTkFUTlRBUkcgIik7Ci0JaWYgKHMgJiBFTlBIQVNFTUlTKQotCQlwcmludGsoIkVOUEhBU0VNSVMgIik7Ci0JaWYgKHMgJiBFTkJVU0ZSRUUpCi0JCXByaW50aygiRU5CVVNGUkVFICIpOwotCWlmIChzICYgRU5TQ1NJUEVSUikKLQkJcHJpbnRrKCJFTlNDU0lQRVJSICIpOwotCWlmIChzICYgRU5QSEFTRUNIRykKLQkJcHJpbnRrKCJFTlBIQVNFQ0hHICIpOwotCWlmIChzICYgRU5SRVFJTklUKQotCQlwcmludGsoIkVOUkVRSU5JVCAiKTsKLQlwcmludGsoIilcbiIpOworCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBzaHBudCwKKwkJICAgICAiZW5hYmxlZCBpbnRlcnJ1cHRzICglcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzKVxuIiwKKwkJICAgICAoczAgJiBFTlNFTERPKSA/ICJFTlNFTERPICIgOiAiIiwKKwkJICAgICAoczAgJiBFTlNFTERJKSA/ICJFTlNFTERJICIgOiAiIiwKKwkJICAgICAoczAgJiBFTlNFTElOR08pID8gIkVOU0VMSU5HTyAiIDogIiIsCisJCSAgICAgKHMwICYgRU5TV1JBUCkgPyAiRU5TV1JBUCAiIDogIiIsCisJCSAgICAgKHMwICYgRU5TRE9ORSkgPyAiRU5TRE9ORSAiIDogIiIsCisJCSAgICAgKHMwICYgRU5TUElPUkRZKSA/ICJFTlNQSU9SRFkgIiA6ICIiLAorCQkgICAgIChzMCAmIEVORE1BRE9ORSkgPyAiRU5ETUFET05FICIgOiAiIiwKKwkJICAgICAoczEgJiBFTlNFTFRJTU8pID8gIkVOU0VMVElNTyAiIDogIiIsCisJCSAgICAgKHMxICYgRU5BVE5UQVJHKSA/ICJFTkFUTlRBUkcgIiA6ICIiLAorCQkgICAgIChzMSAmIEVOUEhBU0VNSVMpID8gIkVOUEhBU0VNSVMgIiA6ICIiLAorCQkgICAgIChzMSAmIEVOQlVTRlJFRSkgPyAiRU5CVVNGUkVFICIgOiAiIiwKKwkJICAgICAoczEgJiBFTlNDU0lQRVJSKSA/ICJFTlNDU0lQRVJSICIgOiAiIiwKKwkJICAgICAoczEgJiBFTlBIQVNFQ0hHKSA/ICJFTlBIQVNFQ0hHICIgOiAiIiwKKwkJICAgICAoczEgJiBFTlJFUUlOSVQpID8gIkVOUkVRSU5JVCAiIDogIiIpOwogfQogCiAvKgpAQCAtMjkxNiwzNiArMjQ0NiwyMSBAQAogICovCiBzdGF0aWMgdm9pZCBzaG93X2NvbW1hbmQoU2NzaV9DbW5kICpwdHIpCiB7Ci0Jc2NtZF9wcmludGsoS0VSTl9ERUJVRywgcHRyLCAiJXA6IGNtbmQ9KCIsIHB0cik7Ci0KLQlfX3Njc2lfcHJpbnRfY29tbWFuZChwdHItPmNtbmQpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIik7IHJlcXVlc3RfYnVmZmxlbj0lZDsgcmVzaWQ9JWQ7IHBoYXNlIHwiLAotCSAgICAgICBzY3NpX2J1ZmZsZW4ocHRyKSwgc2NzaV9nZXRfcmVzaWQocHRyKSk7Ci0KLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBub3RfaXNzdWVkKQotCQlwcmludGsoIm5vdCBpc3N1ZWR8Iik7Ci0JaWYgKHB0ci0+U0NwLnBoYXNlICYgc2VsZWN0aW5nKQotCQlwcmludGsoInNlbGVjdGluZ3wiKTsKLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBpZGVudGlmaWVkKQotCQlwcmludGsoImlkZW50aWZpZWR8Iik7Ci0JaWYgKHB0ci0+U0NwLnBoYXNlICYgZGlzY29ubmVjdGVkKQotCQlwcmludGsoImRpc2Nvbm5lY3RlZHwiKTsKLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBjb21wbGV0ZWQpCi0JCXByaW50aygiY29tcGxldGVkfCIpOwotCWlmIChwdHItPlNDcC5waGFzZSAmIHNwaW9yZHkpCi0JCXByaW50aygic3Bpb3JkeXwiKTsKLQlpZiAocHRyLT5TQ3AucGhhc2UgJiBzeW5jbmVnKQotCQlwcmludGsoInN5bmNuZWd8Iik7Ci0JaWYgKHB0ci0+U0NwLnBoYXNlICYgYWJvcnRlZCkKLQkJcHJpbnRrKCJhYm9ydGVkfCIpOwotCWlmIChwdHItPlNDcC5waGFzZSAmIHJlc2V0dGVkKQotCQlwcmludGsoInJlc2V0dGVkfCIpOwotCWlmKCBTQ0RBVEEocHRyKSApIHsKLQkJcHJpbnRrKCI7IG5leHQ9MHglcFxuIiwgU0NORVhUKHB0cikpOwotCX0gZWxzZSB7Ci0JCXByaW50aygiOyBuZXh0PShob3N0IHNjcmliYmxlIE5VTEwpXG4iKTsKLQl9CisJc2NzaV9wcmludF9jb21tYW5kKHB0cik7CisJc2NtZF9wcmludGsoS0VSTl9ERUJVRywgcHRyLAorCQkgICAgInJlcXVlc3RfYnVmZmxlbj0lZDsgcmVzaWQ9JWQ7ICIKKwkJICAgICJwaGFzZSB8JXMlcyVzJXMlcyVzJXMlcyVzOyBuZXh0PTB4JXAiLAorCQkgICAgc2NzaV9idWZmbGVuKHB0ciksIHNjc2lfZ2V0X3Jlc2lkKHB0ciksCisJCSAgICAocHRyLT5TQ3AucGhhc2UgJiBub3RfaXNzdWVkKSA/ICJub3QgaXNzdWVkfCIgOiAiIiwKKwkJICAgIChwdHItPlNDcC5waGFzZSAmIHNlbGVjdGluZykgPyAic2VsZWN0aW5nfCIgOiAiIiwKKwkJICAgIChwdHItPlNDcC5waGFzZSAmIGlkZW50aWZpZWQpID8gImlkZW50aWZpZWR8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgZGlzY29ubmVjdGVkKSA/ICJkaXNjb25uZWN0ZWR8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgY29tcGxldGVkKSA/ICJjb21wbGV0ZWR8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgc3Bpb3JkeSkgPyAic3Bpb3JkeXwiIDogIiIsCisJCSAgICAocHRyLT5TQ3AucGhhc2UgJiBzeW5jbmVnKSA/ICJzeW5jbmVnfCIgOiAiIiwKKwkJICAgIChwdHItPlNDcC5waGFzZSAmIGFib3J0ZWQpID8gImFib3J0ZWR8IiA6ICIiLAorCQkgICAgKHB0ci0+U0NwLnBoYXNlICYgcmVzZXR0ZWQpID8gInJlc2V0dGVkfCIgOiAiIiwKKwkJICAgIChTQ0RBVEEocHRyKSkgPyBTQ05FWFQocHRyKSA6IE5VTEwpOwogfQogCiAvKgpAQCAtMjk3Miw3ICsyNDg3LDYgQEAKIAlmb3IgKHB0ciA9IERJU0NPTk5FQ1RFRF9TQzsgcHRyOyBwdHIgPSBTQ0RBVEEocHRyKSA/IFNDTkVYVChwdHIpIDogTlVMTCkKIAkJc2hvd19jb21tYW5kKHB0cik7CiAKLQlkaXNwX3BvcnRzKHNocG50KTsKIAlkaXNwX2VuaW50cihzaHBudCk7CiB9CiAKQEAgLTMyNzYsMTUgKzI3OTAsNiBAQAogCWlmKCFzaHBudCB8fCAhYnVmZmVyIHx8IGxlbmd0aDw4IHx8IHN0cm5jbXAoImFoYTE1MnggIiwgYnVmZmVyLCA4KSE9MCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JaWYobGVuZ3RoPjE0ICYmIHN0cm5jbXAoImRlYnVnICIsIGJ1ZmZlcis4LCA2KT09MCkgewotCQlpbnQgZGVidWcgPSBIT1NUREFUQShzaHBudCktPmRlYnVnOwotCi0JCUhPU1REQVRBKHNocG50KS0+ZGVidWcgPSBzaW1wbGVfc3RydG91bChidWZmZXIrMTQsIE5VTEwsIDApOwotCi0JCXByaW50ayhLRVJOX0lORk8gImFoYTE1MnglZDogZGVidWdnaW5nIG9wdGlvbnMgc2V0IHRvIDB4JTA0eCAod2VyZSAweCUwNHgpXG4iLCBIT1NUTk8sIEhPU1REQVRBKHNocG50KS0+ZGVidWcsIGRlYnVnKTsKLQl9IGVsc2UKLSNlbmRpZgogI2lmIGRlZmluZWQoQUhBMTUyWF9TVEFUKQogCWlmKGxlbmd0aD4xMyAmJiBzdHJuY21wKCJyZXNldCIsIGJ1ZmZlcis4LCA1KT09MCkgewogCQlpbnQgaTsKQEAgLTMzMDIsNyArMjgwNyw3IEBACiAJCQlIT1NUREFUQShzaHBudCktPnRpbWVbaV09MDsKIAkJfQogCi0JCXByaW50ayhLRVJOX0lORk8gImFoYTE1MnglZDogc3RhdHMgcmVzZXRlZC5cbiIsIEhPU1ROTyk7CisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNocG50LCAiYWhhMTUyeDogc3RhdHMgcmVzZXQuXG4iKTsKIAogCX0gZWxzZQogI2VuZGlmCkBAIC0zMzQzLDI5ICsyODQ4LDYgQEAKIAkJCQkJKCgoSE9TVERBVEEoc2hwbnQpLT5zeW5jcmF0ZVtpXSAmIDB4NzApID4+IDQpICsgMikgKiA1MCwKIAkJCQkgICAgSE9TVERBVEEoc2hwbnQpLT5zeW5jcmF0ZVtpXSAmIDB4MGYpOwogCX0KLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0jZGVmaW5lIFBERUJVRyhmbGFncyx0eHQpIFwKLQlpZihIT1NUREFUQShzaHBudCktPmRlYnVnICYgZmxhZ3MpIFNQUklOVEYoIiglcykgIiwgdHh0KTsKLQotCVNQUklOVEYoImVuYWJsZWQgZGVidWdnaW5nIG9wdGlvbnM6ICIpOwotCi0JUERFQlVHKGRlYnVnX3Byb2NpbmZvLCAicHJvY2luZm8iKTsKLQlQREVCVUcoZGVidWdfcXVldWUsICJxdWV1ZSIpOwotCVBERUJVRyhkZWJ1Z19pbnRyLCAiaW50ZXJydXB0Iik7Ci0JUERFQlVHKGRlYnVnX3NlbGVjdGlvbiwgInNlbGVjdGlvbiIpOwotCVBERUJVRyhkZWJ1Z19tc2dvLCAibWVzc2FnZSBvdXQiKTsKLQlQREVCVUcoZGVidWdfbXNnaSwgIm1lc3NhZ2UgaW4iKTsKLQlQREVCVUcoZGVidWdfc3RhdHVzLCAic3RhdHVzIik7Ci0JUERFQlVHKGRlYnVnX2NtZCwgImNvbW1hbmQiKTsKLQlQREVCVUcoZGVidWdfZGF0YWksICJkYXRhIGluIik7Ci0JUERFQlVHKGRlYnVnX2RhdGFvLCAiZGF0YSBvdXQiKTsKLQlQREVCVUcoZGVidWdfZWgsICJlaCIpOwotCVBERUJVRyhkZWJ1Z19sb2NraW5nLCAibG9ja3MiKTsKLQlQREVCVUcoZGVidWdfcGhhc2VzLCAicGhhc2VzIik7Ci0KLQlTUFJJTlRGKCJcbiIpOwotI2VuZGlmCi0KIAlTUFJJTlRGKCJcbnF1ZXVlIHN0YXR1czpcbiIpOwogCURPX0xPQ0soZmxhZ3MpOwogCWlmIChJU1NVRV9TQykgewpAQCAtMzM5Myw4ICsyODc1LDggQEAKIAogI2lmIGRlZmluZWQoQUhBMTUyWF9TVEFUKQogCVNQUklOVEYoInN0YXRpc3RpY3M6XG4iCi0JICAgICAgICAidG90YWwgY29tbWFuZHM6ICAgICAgICAgICAgICAgJWRcbiIKLQkgICAgICAgICJkaXNjb25uZWN0aW9uczogICAgICAgICAgICAgICAlZFxuIgorCQkidG90YWwgY29tbWFuZHM6ICAgICAgICAgICAgICAgJWRcbiIKKwkJImRpc2Nvbm5lY3Rpb25zOiAgICAgICAgICAgICAgICVkXG4iCiAJCSJidXNmcmVlIHdpdGggY2hlY2sgY29uZGl0aW9uOiAlZFxuIgogCQkiYnVzZnJlZSB3aXRob3V0IG9sZCBjb21tYW5kOiAgJWRcbiIKIAkJImJ1c2ZyZWUgd2l0aG91dCBuZXcgY29tbWFuZDogICVkXG4iCkBAIC0zNDEzLDcgKzI4OTUsNyBAQAogCQlIT1NUREFUQShzaHBudCktPmJ1c2ZyZWVfd2l0aG91dF9hbnlfYWN0aW9uKTsKIAlmb3IoaT0wOyBpPG1heHN0YXRlOyBpKyspIHsKIAkJU1BSSU5URigiJS0xMHMgJS0xMmQgJS0xMmQgJS0xMmxkXG4iLAotCQkgICAgICAgIHN0YXRlc1tpXS5uYW1lLAorCQkJc3RhdGVzW2ldLm5hbWUsCiAJCQlIT1NUREFUQShzaHBudCktPmNvdW50X3RyYW5zW2ldLAogCQkJSE9TVERBVEEoc2hwbnQpLT5jb3VudFtpXSwKIAkJCUhPU1REQVRBKHNocG50KS0+dGltZVtpXSk7CkBAIC0zNjcxLDI1ICszMTUzLDE5IEBACiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uc3luY2hyb25vdXMgPSBhaGExNTJ4WzVdOwogCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlbGF5ICAgICAgID0gYWhhMTUyeFs2XTsKIAkJCXNldHVwW3NldHVwX2NvdW50XS5leHRfdHJhbnMgICA9IGFoYTE1MnhbN107Ci0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlYnVnICAgICAgID0gYWhhMTUyeFs4XTsKLSNlbmRpZgotCSAgCX0gZWxzZSBpZihpb1swXSE9MCB8fCBpcnFbMF0hPTApIHsKKwkJfSBlbHNlIGlmIChpb1swXSAhPSAwIHx8IGlycVswXSAhPSAwKSB7CiAJCQlpZihpb1swXSE9MCkgIHNldHVwW3NldHVwX2NvdW50XS5pb19wb3J0ID0gaW9bMF07CiAJCQlpZihpcnFbMF0hPTApIHNldHVwW3NldHVwX2NvdW50XS5pcnEgICAgID0gaXJxWzBdOwogCi0JICAgIAkJc2V0dXBbc2V0dXBfY291bnRdLnNjc2lpZCAgICAgID0gc2NzaWlkWzBdOwotCSAgICAJCXNldHVwW3NldHVwX2NvdW50XS5yZWNvbm5lY3QgICA9IHJlY29ubmVjdFswXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0ucGFyaXR5ICAgICAgPSBwYXJpdHlbMF07Ci0JICAgIAkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gc3luY1swXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgICAgICAgPSBkZWxheVswXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSBleHR0cmFuc1swXTsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVidWcgICAgICAgPSBkZWJ1Z1swXTsKLSNlbmRpZgorCQkJc2V0dXBbc2V0dXBfY291bnRdLnNjc2lpZCAgICAgID0gc2NzaWlkWzBdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnJlY29ubmVjdCAgID0gcmVjb25uZWN0WzBdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnBhcml0eSAgICAgID0gcGFyaXR5WzBdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gc3luY1swXTsKKwkJCXNldHVwW3NldHVwX2NvdW50XS5kZWxheSAgICAgICA9IGRlbGF5WzBdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLmV4dF90cmFucyAgID0gZXh0dHJhbnNbMF07CiAJCX0KIAotICAgICAgICAgIAlpZiAoY2hlY2tzZXR1cCgmc2V0dXBbc2V0dXBfY291bnRdKSkKKwkJaWYgKGNoZWNrc2V0dXAoJnNldHVwW3NldHVwX2NvdW50XSkpCiAJCQlzZXR1cF9jb3VudCsrOwogCQllbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgImFoYTE1Mng6IGludmFsaWQgbW9kdWxlIHBhcmFtcyBpbz0weCV4LCBpcnE9JWQsc2NzaWlkPSVkLHJlY29ubmVjdD0lZCxwYXJpdHk9JWQsc3luYz0lZCxkZWxheT0lZCxleHR0cmFucz0lZFxuIiwKQEAgLTM3MTQsMjIgKzMxOTAsMTYgQEAKIAkJCXNldHVwW3NldHVwX2NvdW50XS5zeW5jaHJvbm91cyA9IGFoYTE1MngxWzVdOwogCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlbGF5ICAgICAgID0gYWhhMTUyeDFbNl07CiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSBhaGExNTJ4MVs3XTsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVidWcgICAgICAgPSBhaGExNTJ4MVs4XTsKLSNlbmRpZgotCSAgCX0gZWxzZSBpZihpb1sxXSE9MCB8fCBpcnFbMV0hPTApIHsKKwkJfSBlbHNlIGlmIChpb1sxXSAhPSAwIHx8IGlycVsxXSAhPSAwKSB7CiAJCQlpZihpb1sxXSE9MCkgIHNldHVwW3NldHVwX2NvdW50XS5pb19wb3J0ID0gaW9bMV07CiAJCQlpZihpcnFbMV0hPTApIHNldHVwW3NldHVwX2NvdW50XS5pcnEgICAgID0gaXJxWzFdOwogCi0JICAgIAkJc2V0dXBbc2V0dXBfY291bnRdLnNjc2lpZCAgICAgID0gc2NzaWlkWzFdOwotCSAgICAJCXNldHVwW3NldHVwX2NvdW50XS5yZWNvbm5lY3QgICA9IHJlY29ubmVjdFsxXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0ucGFyaXR5ICAgICAgPSBwYXJpdHlbMV07Ci0JICAgIAkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gc3luY1sxXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgICAgICAgPSBkZWxheVsxXTsKLQkgICAgCQlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSBleHR0cmFuc1sxXTsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVidWcgICAgICAgPSBkZWJ1Z1sxXTsKLSNlbmRpZgorCQkJc2V0dXBbc2V0dXBfY291bnRdLnNjc2lpZCAgICAgID0gc2NzaWlkWzFdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnJlY29ubmVjdCAgID0gcmVjb25uZWN0WzFdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnBhcml0eSAgICAgID0gcGFyaXR5WzFdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gc3luY1sxXTsKKwkJCXNldHVwW3NldHVwX2NvdW50XS5kZWxheSAgICAgICA9IGRlbGF5WzFdOworCQkJc2V0dXBbc2V0dXBfY291bnRdLmV4dF90cmFucyAgID0gZXh0dHJhbnNbMV07CiAJCX0KIAkJaWYgKGNoZWNrc2V0dXAoJnNldHVwW3NldHVwX2NvdW50XSkpCiAJCQlzZXR1cF9jb3VudCsrOwpAQCAtMzc3Niw5ICszMjQ2LDYgQEAKIAkJCXNldHVwW3NldHVwX2NvdW50XS5zeW5jaHJvbm91cyA9IDE7CiAJCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgICAgICAgPSBERUxBWV9ERUZBVUxUOwogCQkJc2V0dXBbc2V0dXBfY291bnRdLmV4dF90cmFucyAgID0gMDsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0JCQlzZXR1cFtzZXR1cF9jb3VudF0uZGVidWcgICAgICAgPSBERUJVR19ERUZBVUxUOwotI2VuZGlmCiAjaWYgZGVmaW5lZChfX0lTQVBOUF9fKQogCQkJcG5wZGV2W3NldHVwX2NvdW50XSAgICAgICAgICAgID0gZGV2OwogI2VuZGlmCkBAIC0zODQ3LDkgKzMzMTQsNiBAQAogCQkJc2V0dXBbc2V0dXBfY291bnRdLnN5bmNocm9ub3VzID0gY29uZi5jZl9zeW5jbmVnOwogCQkJc2V0dXBbc2V0dXBfY291bnRdLmRlbGF5ID0gREVMQVlfREVGQVVMVDsKIAkJCXNldHVwW3NldHVwX2NvdW50XS5leHRfdHJhbnMgPSAwOwotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQkJCXNldHVwW3NldHVwX2NvdW50XS5kZWJ1ZyA9IERFQlVHX0RFRkFVTFQ7Ci0jZW5kaWYKIAkJCXNldHVwX2NvdW50Kys7CiAKIAkJfQpAQCAtMzkwMywxMSArMzM2Nyw4IEBACiAjaWYgIWRlZmluZWQoTU9EVUxFKQogc3RhdGljIGludCBfX2luaXQgYWhhMTUyeF9zZXR1cChjaGFyICpzdHIpCiB7Ci0jaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQotCWludCBpbnRzWzExXTsKLSNlbHNlCiAJaW50IGludHNbMTBdOwotI2VuZGlmCisKIAlnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOwogCiAJaWYoc2V0dXBfY291bnQ+PUFSUkFZX1NJWkUoc2V0dXApKSB7CkBAIC0zOTI0LDE2ICszMzg1LDkgQEAKIAlzZXR1cFtzZXR1cF9jb3VudF0uc3luY2hyb25vdXMgPSBpbnRzWzBdID49IDYgPyBpbnRzWzZdIDogMTsKIAlzZXR1cFtzZXR1cF9jb3VudF0uZGVsYXkgICAgICAgPSBpbnRzWzBdID49IDcgPyBpbnRzWzddIDogREVMQVlfREVGQVVMVDsKIAlzZXR1cFtzZXR1cF9jb3VudF0uZXh0X3RyYW5zICAgPSBpbnRzWzBdID49IDggPyBpbnRzWzhdIDogMDsKLSNpZiBkZWZpbmVkKEFIQTE1MlhfREVCVUcpCi0Jc2V0dXBbc2V0dXBfY291bnRdLmRlYnVnICAgICAgID0gaW50c1swXSA+PSA5ID8gaW50c1s5XSA6IERFQlVHX0RFRkFVTFQ7Ci0JaWYgKGludHNbMF0gPiA5KSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiYWhhMTUyeDogdXNhZ2U6IGFoYTE1Mng9PElPQkFTRT5bLDxJUlE+Wyw8U0NTSSBJRD4iCi0JCSAgICAgICAiWyw8UkVDT05ORUNUPlssPFBBUklUWT5bLDxTWU5DSFJPTk9VUz5bLDxERUxBWT5bLDxFWFRfVFJBTlM+Wyw8REVCVUc+XV1dXV1dXV1cbiIpOwotI2Vsc2UKIAlpZiAoaW50c1swXSA+IDgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKn0qLwogCQlwcmludGsoS0VSTl9OT1RJQ0UgImFoYTE1Mng6IHVzYWdlOiBhaGExNTJ4PTxJT0JBU0U+Wyw8SVJRPlssPFNDU0kgSUQ+IgogCQkgICAgICAgIlssPFJFQ09OTkVDVD5bLDxQQVJJVFk+Wyw8U1lOQ0hST05PVVM+Wyw8REVMQVk+Wyw8RVhUX1RSQU5TPl1dXV1dXV1cbiIpOwotI2VuZGlmCiAJfSBlbHNlIHsKIAkJc2V0dXBfY291bnQrKzsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhhMTc0MC5jIGIvZHJpdmVycy9zY3NpL2FoYTE3NDAuYwppbmRleCA1ZjMxMDE3Li4zMWFjZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhhMTc0MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGExNzQwLmMKQEAgLTUzMSw3ICs1MzEsNyBAQAogICogcXVpZXQgYXMgcG9zc2libGUuLi4KICAqLwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFoYTE3NDBfdGVtcGxhdGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwppbmRleCBlZDMzMzY2OS4uZDVjN2IxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCkBAIC05MjUsNiArOTI1LDcgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYWhkX2xpbnV4X3NsYXZlX2NvbmZpZ3VyZSwKIAkudGFyZ2V0X2FsbG9jCQk9IGFoZF9saW51eF90YXJnZXRfYWxsb2MsCiAJLnRhcmdldF9kZXN0cm95CQk9IGFoZF9saW51eF90YXJnZXRfZGVzdHJveSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQnVzIERNQSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTQ2OCwxMiArMTQ2OSw5IEBACiAKIAlzd2l0Y2ggKChkZXYtPmZsYWdzICYgKEFIRF9ERVZfUV9CQVNJQ3xBSERfREVWX1FfVEFHR0VEKSkpIHsKIAljYXNlIEFIRF9ERVZfUV9CQVNJQzoKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgTVNHX1NJTVBMRV9UQVNLKTsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKLQkJYnJlYWs7CiAJY2FzZSBBSERfREVWX1FfVEFHR0VEOgotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfT1JERVJFRF9UQVNLKTsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwKKwkJCQlkZXYtPm9wZW5pbmdzICsgZGV2LT5hY3RpdmUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKgpAQCAtMTQ4Miw3ICsxNDgwLDcgQEAKIAkJICogc2VyaWFsbHkgb24gdGhlIGNvbnRyb2xsZXIvZGV2aWNlLiAgVGhpcyBzaG91bGQKIAkJICogcmVtb3ZlIHNvbWUgbGF0ZW5jeS4KIAkJICovCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgMSk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIDEpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xNjE5LDE1ICsxNjE3LDYgQEAKIAl9CiAKIAlpZiAoKGRldi0+ZmxhZ3MgJiAoQUhEX0RFVl9RX1RBR0dFRHxBSERfREVWX1FfQkFTSUMpKSAhPSAwKSB7Ci0JCWludAltc2dfYnl0ZXM7Ci0JCXVpbnQ4X3QgdGFnX21zZ3NbMl07Ci0KLQkJbXNnX2J5dGVzID0gc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgdGFnX21zZ3MpOwotCQlpZiAobXNnX2J5dGVzICYmIHRhZ19tc2dzWzBdICE9IE1TR19TSU1QTEVfVEFTSykgewotCQkJaHNjYi0+Y29udHJvbCB8PSB0YWdfbXNnc1swXTsKLQkJCWlmICh0YWdfbXNnc1swXSA9PSBNU0dfT1JERVJFRF9UQVNLKQotCQkJCWRldi0+Y29tbWFuZHNfc2luY2VfaWRsZV9vcl9vdGFnID0gMDsKLQkJfSBlbHNlCiAJCWlmIChkZXYtPmNvbW1hbmRzX3NpbmNlX2lkbGVfb3Jfb3RhZyA9PSBBSERfT1RBR19USFJFU0gKIAkJICYmIChkZXYtPmZsYWdzICYgQUhEX0RFVl9RX1RBR0dFRCkgIT0gMCkgewogCQkJaHNjYi0+Y29udHJvbCB8PSBNU0dfT1JERVJFRF9UQVNLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKaW5kZXggZDJjOWJmMy4uODgzNjAxMTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKQEAgLTgxMiw2ICs4MTIsNyBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhaGNfbGludXhfc2xhdmVfY29uZmlndXJlLAogCS50YXJnZXRfYWxsb2MJCT0gYWhjX2xpbnV4X3RhcmdldF9hbGxvYywKIAkudGFyZ2V0X2Rlc3Ryb3kJCT0gYWhjX2xpbnV4X3RhcmdldF9kZXN0cm95LAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRhc2tsZXQgSGFuZGxlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMzM0LDEzICsxMzM1LDkgQEAKIAl9CiAJc3dpdGNoICgoZGV2LT5mbGFncyAmIChBSENfREVWX1FfQkFTSUN8QUhDX0RFVl9RX1RBR0dFRCkpKSB7CiAJY2FzZSBBSENfREVWX1FfQkFTSUM6Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIE1TR19TSU1QTEVfVEFHKTsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKLQkJYnJlYWs7CiAJY2FzZSBBSENfREVWX1FfVEFHR0VEOgotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfT1JERVJFRF9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBkZXYtPm9wZW5pbmdzICsgZGV2LT5hY3RpdmUpOwotCQlicmVhazsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwKKwkJCQlkZXYtPm9wZW5pbmdzICsgZGV2LT5hY3RpdmUpOwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIFdlIGFsbG93IHRoZSBPUyB0byBxdWV1ZSAyIHVudGFnZ2VkIHRyYW5zYWN0aW9ucyB0bwpAQCAtMTM0OCw3ICsxMzQ1LDcgQEAKIAkJICogc2VyaWFsbHkgb24gdGhlIGNvbnRyb2xsZXIvZGV2aWNlLiAgVGhpcyBzaG91bGQKIAkJICogcmVtb3ZlIHNvbWUgbGF0ZW5jeS4KIAkJICovCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgMik7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIDIpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xNDQ3LDcgKzE0NDQsNyBAQAogCSAqIHdlIGFyZSBzdG9yaW5nIGEgZnVsbCBidXN5IHRhcmdldCAqbHVuKgogCSAqIHRhYmxlIGluIFNDQiBzcGFjZS4KIAkgKi8KLQlpZiAoIWJsa19ycV90YWdnZWQoY21kLT5yZXF1ZXN0KQorCWlmICghKGNtZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkKIAkgICAgJiYgKGFoYy0+ZmVhdHVyZXMgJiBBSENfU0NCX0JUVCkgPT0gMCkgewogCQlpbnQgdGFyZ2V0X29mZnNldDsKIApAQCAtMTUwMSwxNSArMTQ5OCw3IEBACiAJfQogCiAJaWYgKChkZXYtPmZsYWdzICYgKEFIQ19ERVZfUV9UQUdHRUR8QUhDX0RFVl9RX0JBU0lDKSkgIT0gMCkgewotCQlpbnQJbXNnX2J5dGVzOwotCQl1aW50OF90IHRhZ19tc2dzWzJdOwotCQkKLQkJbXNnX2J5dGVzID0gc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgdGFnX21zZ3MpOwotCQlpZiAobXNnX2J5dGVzICYmIHRhZ19tc2dzWzBdICE9IE1TR19TSU1QTEVfVEFTSykgewotCQkJaHNjYi0+Y29udHJvbCB8PSB0YWdfbXNnc1swXTsKLQkJCWlmICh0YWdfbXNnc1swXSA9PSBNU0dfT1JERVJFRF9UQVNLKQotCQkJCWRldi0+Y29tbWFuZHNfc2luY2VfaWRsZV9vcl9vdGFnID0gMDsKLQkJfSBlbHNlIGlmIChkZXYtPmNvbW1hbmRzX3NpbmNlX2lkbGVfb3Jfb3RhZyA9PSBBSENfT1RBR19USFJFU0gKKwkJaWYgKGRldi0+Y29tbWFuZHNfc2luY2VfaWRsZV9vcl9vdGFnID09IEFIQ19PVEFHX1RIUkVTSAogCQkJCSYmIChkZXYtPmZsYWdzICYgQUhDX0RFVl9RX1RBR0dFRCkgIT0gMCkgewogCQkJaHNjYi0+Y29udHJvbCB8PSBNU0dfT1JERVJFRF9UQVNLOwogCQkJZGV2LT5jb21tYW5kc19zaW5jZV9pZGxlX29yX290YWcgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eC5oIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eC5oCmluZGV4IDY2Y2RhNjYuLjI2ZDRhZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHguaAorKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4LmgKQEAgLTc4LDcgKzc4LDcgQEAKIAogdm9pZCBhc2RfaW52YWxpZGF0ZV9lZGIoc3RydWN0IGFzZF9hc2NiICphc2NiLCBpbnQgZWRiX2lkKTsKIAotaW50ICBhc2RfZXhlY3V0ZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqLCBpbnQgbnVtLCBnZnBfdCBnZnBfZmxhZ3MpOworaW50ICBhc2RfZXhlY3V0ZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIAogdm9pZCBhc2Rfc2V0X2RtYW1vZGUoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaHdpLmMgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2h3aS5jCmluZGV4IDRkZjg2N2UuLjlmNjM2YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9od2kuYwpAQCAtMTIwMCw4ICsxMjAwLDcgQEAKICAqIENhc2UgQTogd2UgY2FuIHNlbmQgdGhlIHdob2xlIGJhdGNoIGF0IG9uY2UuICBJbmNyZW1lbnQgInBlbmRpbmciCiAgKiBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZnVuY3Rpb24sIHdoZW4gaXQgaXMgY2hlY2tlZCwgaW4gb3JkZXIgdG8KICAqIGVsaW1pbmF0ZSByYWNlcyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IG11bHRpcGxlIHByb2Nlc3Nlcy4KLSAqIENhc2UgQjogc2hvdWxkIG5ldmVyIGhhcHBlbiBpZiB0aGUgbWFuYWdpbmcgbGF5ZXIgY29uc2lkZXJzCi0gKiBsbGRkX3F1ZXVlX3NpemUuCisgKiBDYXNlIEI6IHNob3VsZCBuZXZlciBoYXBwZW4uCiAgKi8KIGludCBhc2RfcG9zdF9hc2NiX2xpc3Qoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgc3RydWN0IGFzZF9hc2NiICphc2NiLAogCQkgICAgICAgaW50IG51bSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9pbml0LmMKaW5kZXggYzU2NzQxZi4uMTRmYzAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9pbml0LmMKQEAgLTQ5LDE0ICs0OSw2IEBACiAJIlx0RW5hYmxlKDEpIG9yIGRpc2FibGUoMCkgdXNpbmcgUENJIE1TSS5cbiIKIAkiXHREZWZhdWx0OiAwIik7CiAKLXN0YXRpYyBpbnQgbGxkZF9tYXhfZXhlY3V0ZV9udW0gPSAwOwotbW9kdWxlX3BhcmFtX25hbWVkKGNvbGxlY3RvciwgbGxkZF9tYXhfZXhlY3V0ZV9udW0sIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNvbGxlY3RvciwgIlxuIgotCSJcdElmIGdyZWF0ZXIgdGhhbiBvbmUsIHRlbGxzIHRoZSBTQVMgTGF5ZXIgdG8gcnVuIGluIFRhc2sgQ29sbGVjdG9yXG4iCi0JIlx0TW9kZS4gIElmIDEgb3IgMCwgdGVsbHMgdGhlIFNBUyBMYXllciB0byBydW4gaW4gRGlyZWN0IE1vZGUuXG4iCi0JIlx0VGhlIGFpYzk0eHggU0FTIExMREQgc3VwcG9ydHMgYm90aCBtb2Rlcy5cbiIKLQkiXHREZWZhdWx0OiAwIChEaXJlY3QgTW9kZSkuXG4iKTsKLQogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqYWljOTR4eF90cmFuc3BvcnRfdGVtcGxhdGU7CiBzdGF0aWMgaW50IGFzZF9zY2FuX2ZpbmlzaGVkKHN0cnVjdCBTY3NpX0hvc3QgKiwgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBhc2Rfc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICopOwpAQCAtODMsNiArNzUsOCBAQAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IHNhc19laF9idXNfcmVzZXRfaGFuZGxlciwKIAkudGFyZ2V0X2Rlc3Ryb3kJCT0gc2FzX3RhcmdldF9kZXN0cm95LAogCS5pb2N0bAkJCT0gc2FzX2lvY3RsLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RhdGljIGludCBhc2RfbWFwX21lbWlvKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCkBAIC03MDksOSArNzAzLDYgQEAKIAlhc2RfaGEtPnNhc19oYS5zYXNfcG9ydD0gc2FzX3BvcnRzOwogCWFzZF9oYS0+c2FzX2hhLm51bV9waHlzPSBBU0RfTUFYX1BIWVM7CiAKLQlhc2RfaGEtPnNhc19oYS5sbGRkX3F1ZXVlX3NpemUgPSBhc2RfaGEtPnNlcS5jYW5fcXVldWU7Ci0JYXNkX2hhLT5zYXNfaGEubGxkZF9tYXhfZXhlY3V0ZV9udW0gPSBsbGRkX21heF9leGVjdXRlX251bTsKLQogCXJldHVybiBzYXNfcmVnaXN0ZXJfaGEoJmFzZF9oYS0+c2FzX2hhKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90YXNrLmMgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Rhc2suYwppbmRleCA1OWI4NmUyLi41ZmYxY2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Rhc2suYworKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Rhc2suYwpAQCAtNTQzLDggKzU0Myw3IEBACiAJcmV0dXJuIHJlczsKIH0KIAotaW50IGFzZF9leGVjdXRlX3Rhc2soc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLAotCQkgICAgIGdmcF90IGdmcF9mbGFncykKK2ludCBhc2RfZXhlY3V0ZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCWludCByZXMgPSAwOwogCUxJU1RfSEVBRChhbGlzdCk7CkBAIC01NTMsMTEgKzU1MiwxMSBAQAogCXN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEgPSB0YXNrLT5kZXYtPnBvcnQtPmhhLT5sbGRkX2hhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlyZXMgPSBhc2RfY2FuX3F1ZXVlKGFzZF9oYSwgbnVtKTsKKwlyZXMgPSBhc2RfY2FuX3F1ZXVlKGFzZF9oYSwgMSk7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAotCXJlcyA9IG51bTsKKwlyZXMgPSAxOwogCWFzY2IgPSBhc2RfYXNjYl9hbGxvY19saXN0KGFzZF9oYSwgJnJlcywgZ2ZwX2ZsYWdzKTsKIAlpZiAocmVzKSB7CiAJCXJlcyA9IC1FTk9NRU07CkBAIC01NjgsNyArNTY3LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsICZhbGlzdCwgbGlzdCkgewogCQlhLT51bGRkX3Rhc2sgPSB0OwogCQl0LT5sbGRkX3Rhc2sgPSBhOwotCQl0ID0gbGlzdF9lbnRyeSh0LT5saXN0Lm5leHQsIHN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CisJCWJyZWFrOwogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsICZhbGlzdCwgbGlzdCkgewogCQl0ID0gYS0+dWxkZF90YXNrOwpAQCAtNjAxLDcgKzYwMCw3IEBACiAJfQogCWxpc3RfZGVsX2luaXQoJmFsaXN0KTsKIAotCXJlcyA9IGFzZF9wb3N0X2FzY2JfbGlzdChhc2RfaGEsIGFzY2IsIG51bSk7CisJcmVzID0gYXNkX3Bvc3RfYXNjYl9saXN0KGFzZF9oYSwgYXNjYiwgMSk7CiAJaWYgKHVubGlrZWx5KHJlcykpIHsKIAkJYSA9IE5VTEw7CiAJCV9fbGlzdF9hZGQoJmFsaXN0LCBhc2NiLT5saXN0LnByZXYsICZhc2NiLT5saXN0KTsKQEAgLTYzOSw2ICs2MzgsNiBAQAogb3V0X2VycjoKIAlpZiAoYXNjYikKIAkJYXNkX2FzY2JfZnJlZV9saXN0KGFzY2IpOwotCWFzZF9jYW5fZGVxdWV1ZShhc2RfaGEsIG51bSk7CisJYXNkX2Nhbl9kZXF1ZXVlKGFzZF9oYSwgMSk7CiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hbTUzYzk3NC5jIGIvZHJpdmVycy9zY3NpL2FtNTNjOTc0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzZTJjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9hbTUzYzk3NC5jCkBAIC0wLDAgKzEsNTg2IEBACisvKgorICogQU1EIGFtNTNjOTc0IGRyaXZlci4KKyAqIENvcHlyaWdodCAoYykgMjAxNCBIYW5uZXMgUmVpbmVja2UsIFNVU0UgTGludXggR21iSAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisKKyNpbmNsdWRlICJlc3Bfc2NzaS5oIgorCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAiYW01M2M5NzQiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAiMS4wMCIKKworc3RhdGljIGJvb2wgYW01M2M5NzRfZGVidWc7CitzdGF0aWMgYm9vbCBhbTUzYzk3NF9mZW5hYiA9IHRydWU7CisKKyNkZWZpbmUgZXNwX2RtYV9sb2coZiwgYS4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoYW01M2M5NzRfZGVidWcpCQkJCQlcCisJCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgZXNwLT5ob3N0LCBmLCAjI2EpOwlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBFU1BfRE1BX0NNRCAweDEwCisjZGVmaW5lIEVTUF9ETUFfU1RDIDB4MTEKKyNkZWZpbmUgRVNQX0RNQV9TUEEgMHgxMgorI2RlZmluZSBFU1BfRE1BX1dCQyAweDEzCisjZGVmaW5lIEVTUF9ETUFfV0FDIDB4MTQKKyNkZWZpbmUgRVNQX0RNQV9TVEFUVVMgMHgxNQorI2RlZmluZSBFU1BfRE1BX1NNRExBIDB4MTYKKyNkZWZpbmUgRVNQX0RNQV9XTUFDIDB4MTcKKworI2RlZmluZSBFU1BfRE1BX0NNRF9JRExFIDB4MDAKKyNkZWZpbmUgRVNQX0RNQV9DTURfQkxBU1QgMHgwMQorI2RlZmluZSBFU1BfRE1BX0NNRF9BQk9SVCAweDAyCisjZGVmaW5lIEVTUF9ETUFfQ01EX1NUQVJUIDB4MDMKKyNkZWZpbmUgRVNQX0RNQV9DTURfTUFTSyAgMHgwMworI2RlZmluZSBFU1BfRE1BX0NNRF9ESUFHIDB4MDQKKyNkZWZpbmUgRVNQX0RNQV9DTURfTURMIDB4MTAKKyNkZWZpbmUgRVNQX0RNQV9DTURfSU5URV9QIDB4MjAKKyNkZWZpbmUgRVNQX0RNQV9DTURfSU5URV9EIDB4NDAKKyNkZWZpbmUgRVNQX0RNQV9DTURfRElSIDB4ODAKKworI2RlZmluZSBFU1BfRE1BX1NUQVRfUFdETiAweDAxCisjZGVmaW5lIEVTUF9ETUFfU1RBVF9FUlJPUiAweDAyCisjZGVmaW5lIEVTUF9ETUFfU1RBVF9BQk9SVCAweDA0CisjZGVmaW5lIEVTUF9ETUFfU1RBVF9ET05FIDB4MDgKKyNkZWZpbmUgRVNQX0RNQV9TVEFUX1NDU0lJTlQgMHgxMAorI2RlZmluZSBFU1BfRE1BX1NUQVRfQkNNUExUIDB4MjAKKworLyogRUVQUk9NIGlzIGFjY2Vzc2VkIHdpdGggMTYtYml0IHZhbHVlcyAqLworI2RlZmluZSBEQzM5MF9FRVBST01fUkVBRCAweDgwCisjZGVmaW5lIERDMzkwX0VFUFJPTV9MRU4gMHg0MAorCisvKgorICogREMzOTAgRUVQUk9NCisgKgorICogOCAqIDQgYnl0ZXMgb2YgcGVyLWRldmljZSBvcHRpb25zCisgKiBmb2xsb3dlZCBieSBIQkEgc3BlY2lmaWMgb3B0aW9ucworICovCisKKy8qIFBlci1kZXZpY2Ugb3B0aW9ucyAqLworI2RlZmluZSBEQzM5MF9FRV9NT0RFMSAweDAwCisjZGVmaW5lIERDMzkwX0VFX1NQRUVEIDB4MDEKKworLyogSEJBLXNwZWNpZmljIG9wdGlvbnMgKi8KKyNkZWZpbmUgREMzOTBfRUVfQURBUFRfU0NTSV9JRCAweDQwCisjZGVmaW5lIERDMzkwX0VFX01PREUyIDB4NDEKKyNkZWZpbmUgREMzOTBfRUVfREVMQVkgMHg0MgorI2RlZmluZSBEQzM5MF9FRV9UQUdfQ01EX05VTSAweDQzCisKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTFfUEFSSVRZX0NISyAgIDB4MDEKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTFfU1lOQ19ORUdPICAgIDB4MDIKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTFfRU5fRElTQyAgICAgIDB4MDQKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTFfU0VORF9TVEFSVCAgIDB4MDgKKyNkZWZpbmUgREMzOTBfRUVfTU9ERTFfVENRICAgICAgICAgIDB4MTAKKworI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9NT1JFXzJEUlYgICAgMHgwMQorI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9HUkVBVEVSXzFHICAgMHgwMgorI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9SU1RfU0NTSV9CVVMgMHgwNAorI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9BQ1RJVkVfTkVHQVRJT04gMHgwOAorI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9OT19TRUVLICAgICAgMHgxMAorI2RlZmluZSBEQzM5MF9FRV9NT0RFMl9MVU5fQ0hFQ0sgICAgMHgyMAorCitzdHJ1Y3QgcGNpX2VzcF9wcml2IHsKKwlzdHJ1Y3QgZXNwICplc3A7CisJdTggZG1hX3N0YXR1czsKK307CisKK3N0YXRpYyB2b2lkIHBjaV9lc3BfZG1hX2RyYWluKHN0cnVjdCBlc3AgKmVzcCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9lc3BfcHJpdiAqcGNpX2VzcF9nZXRfcHJpdihzdHJ1Y3QgZXNwICplc3ApCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBlc3AtPmRldjsKKworCXJldHVybiBwY2lfZ2V0X2RydmRhdGEocGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3Bfd3JpdGU4KHN0cnVjdCBlc3AgKmVzcCwgdTggdmFsLCB1bnNpZ25lZCBsb25nIHJlZykKK3sKKwlpb3dyaXRlOCh2YWwsIGVzcC0+cmVncyArIChyZWcgKiA0VUwpKTsKK30KKworc3RhdGljIHU4IHBjaV9lc3BfcmVhZDgoc3RydWN0IGVzcCAqZXNwLCB1bnNpZ25lZCBsb25nIHJlZykKK3sKKwlyZXR1cm4gaW9yZWFkOChlc3AtPnJlZ3MgKyAocmVnICogNFVMKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3Bfd3JpdGUzMihzdHJ1Y3QgZXNwICplc3AsIHUzMiB2YWwsIHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXJldHVybiBpb3dyaXRlMzIodmFsLCBlc3AtPnJlZ3MgKyAocmVnICogNFVMKSk7Cit9CisKK3N0YXRpYyBkbWFfYWRkcl90IHBjaV9lc3BfbWFwX3NpbmdsZShzdHJ1Y3QgZXNwICplc3AsIHZvaWQgKmJ1ZiwKKwkJCQkgICAgIHNpemVfdCBzeiwgaW50IGRpcikKK3sKKwlyZXR1cm4gcGNpX21hcF9zaW5nbGUoZXNwLT5kZXYsIGJ1Ziwgc3osIGRpcik7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2VzcF9tYXBfc2coc3RydWN0IGVzcCAqZXNwLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICBpbnQgbnVtX3NnLCBpbnQgZGlyKQoreworCXJldHVybiBwY2lfbWFwX3NnKGVzcC0+ZGV2LCBzZywgbnVtX3NnLCBkaXIpOworfQorCitzdGF0aWMgdm9pZCBwY2lfZXNwX3VubWFwX3NpbmdsZShzdHJ1Y3QgZXNwICplc3AsIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkgc2l6ZV90IHN6LCBpbnQgZGlyKQoreworCXBjaV91bm1hcF9zaW5nbGUoZXNwLT5kZXYsIGFkZHIsIHN6LCBkaXIpOworfQorCitzdGF0aWMgdm9pZCBwY2lfZXNwX3VubWFwX3NnKHN0cnVjdCBlc3AgKmVzcCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICAgaW50IG51bV9zZywgaW50IGRpcikKK3sKKwlwY2lfdW5tYXBfc2coZXNwLT5kZXYsIHNnLCBudW1fc2csIGRpcik7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2VzcF9pcnFfcGVuZGluZyhzdHJ1Y3QgZXNwICplc3ApCit7CisJc3RydWN0IHBjaV9lc3BfcHJpdiAqcGVwID0gcGNpX2VzcF9nZXRfcHJpdihlc3ApOworCisJcGVwLT5kbWFfc3RhdHVzID0gcGNpX2VzcF9yZWFkOChlc3AsIEVTUF9ETUFfU1RBVFVTKTsKKwllc3BfZG1hX2xvZygiZG1hIGludHIgZHJlZ1slMDJ4XVxuIiwgcGVwLT5kbWFfc3RhdHVzKTsKKworCWlmIChwZXAtPmRtYV9zdGF0dXMgJiAoRVNQX0RNQV9TVEFUX0VSUk9SIHwKKwkJCSAgICAgICBFU1BfRE1BX1NUQVRfQUJPUlQgfAorCQkJICAgICAgIEVTUF9ETUFfU1RBVF9ET05FIHwKKwkJCSAgICAgICBFU1BfRE1BX1NUQVRfU0NTSUlOVCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3BfcmVzZXRfZG1hKHN0cnVjdCBlc3AgKmVzcCkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvID8gKi8KK30KKworc3RhdGljIHZvaWQgcGNpX2VzcF9kbWFfZHJhaW4oc3RydWN0IGVzcCAqZXNwKQoreworCXU4IHJlc2lkOworCWludCBsaW0gPSAxMDAwOworCisKKwlpZiAoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSA9PSBFU1BfRE9QIHx8CisJICAgIChlc3AtPnNyZWcgJiBFU1BfU1RBVF9QTUFTSykgPT0gRVNQX0RJUCkKKwkJLyogRGF0YS1JbiBvciBEYXRhLU91dCwgbm90aGluZyB0byBiZSBkb25lICovCisJCXJldHVybjsKKworCXdoaWxlICgtLWxpbSA+IDApIHsKKwkJcmVzaWQgPSBwY2lfZXNwX3JlYWQ4KGVzcCwgRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTOworCQlpZiAocmVzaWQgPD0gMSkKKwkJCWJyZWFrOworCQljcHVfcmVsYXgoKTsKKwl9CisJaWYgKHJlc2lkID4gMSkgeworCQkvKiBGSUZPIG5vdCBjbGVhcmVkICovCisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCSAgICAgIkZJRk8gbm90IGNsZWFyZWQsICVkIGJ5dGVzIGxlZnRcbiIsCisJCQkgICAgIHJlc2lkKTsKKwl9CisKKwkvKgorCSAqIFdoZW4gdGhlcmUgaXMgYSByZXNpZHVhbCBCQ01QTFQgd2lsbCBuZXZlciBiZSBzZXQKKwkgKiAob2J2aW91c2x5KS4gQnV0IHdlIHN0aWxsIGhhdmUgdG8gaXNzdWUgdGhlIEJMQVNUCisJICogY29tbWFuZCwgb3RoZXJ3aXNlIHRoZSBkYXRhIHdpbGwgbm90IGJlaW5nIHRyYW5zZmVycmVkLgorCSAqIEJ1dCB3ZSdsbCBuZXZlciBrbm93IHdoZW4gdGhlIEJMQVNUIG9wZXJhdGlvbiBpcworCSAqIGZpbmlzaGVkLiBTbyBjaGVjayBmb3Igc29tZSB0aW1lIGFuZCBnaXZlIHVwIGV2ZW50dWFsbHkuCisJICovCisJbGltID0gMTAwMDsKKwlwY2lfZXNwX3dyaXRlOChlc3AsIEVTUF9ETUFfQ01EX0RJUiB8IEVTUF9ETUFfQ01EX0JMQVNULCBFU1BfRE1BX0NNRCk7CisJd2hpbGUgKHBjaV9lc3BfcmVhZDgoZXNwLCBFU1BfRE1BX1NUQVRVUykgJiBFU1BfRE1BX1NUQVRfQkNNUExUKSB7CisJCWlmICgtLWxpbSA9PSAwKQorCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCX0KKwlwY2lfZXNwX3dyaXRlOChlc3AsIEVTUF9ETUFfQ01EX0RJUiB8IEVTUF9ETUFfQ01EX0lETEUsIEVTUF9ETUFfQ01EKTsKKwllc3BfZG1hX2xvZygiRE1BIGJsYXN0IGRvbmUgKCVkIHRyaWVzLCAlZCBieXRlcyBsZWZ0KVxuIiwgbGltLCByZXNpZCk7CisJLyogQkxBU1QgcmVzaWR1YWwgaGFuZGxpbmcgaXMgY3VycmVudGx5IHVudGVzdGVkICovCisJaWYgKFdBUk5fT05fT05DRShyZXNpZCA9PSAxKSkgeworCQlzdHJ1Y3QgZXNwX2NtZF9lbnRyeSAqZW50ID0gZXNwLT5hY3RpdmVfY21kOworCisJCWVudC0+ZmxhZ3MgfD0gRVNQX0NNRF9GTEFHX1JFU0lEVUFMOworCX0KK30KKworc3RhdGljIHZvaWQgcGNpX2VzcF9kbWFfaW52YWxpZGF0ZShzdHJ1Y3QgZXNwICplc3ApCit7CisJc3RydWN0IHBjaV9lc3BfcHJpdiAqcGVwID0gcGNpX2VzcF9nZXRfcHJpdihlc3ApOworCisJZXNwX2RtYV9sb2coImludmFsaWRhdGUgRE1BXG4iKTsKKworCXBjaV9lc3Bfd3JpdGU4KGVzcCwgRVNQX0RNQV9DTURfSURMRSwgRVNQX0RNQV9DTUQpOworCXBlcC0+ZG1hX3N0YXR1cyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2VzcF9kbWFfZXJyb3Ioc3RydWN0IGVzcCAqZXNwKQoreworCXN0cnVjdCBwY2lfZXNwX3ByaXYgKnBlcCA9IHBjaV9lc3BfZ2V0X3ByaXYoZXNwKTsKKworCWlmIChwZXAtPmRtYV9zdGF0dXMgJiBFU1BfRE1BX1NUQVRfRVJST1IpIHsKKwkJdTggZG1hX2NtZCA9IHBjaV9lc3BfcmVhZDgoZXNwLCBFU1BfRE1BX0NNRCk7CisKKwkJaWYgKChkbWFfY21kICYgRVNQX0RNQV9DTURfTUFTSykgPT0gRVNQX0RNQV9DTURfU1RBUlQpCisJCQlwY2lfZXNwX3dyaXRlOChlc3AsIEVTUF9ETUFfQ01EX0FCT1JULCBFU1BfRE1BX0NNRCk7CisKKwkJcmV0dXJuIDE7CisJfQorCWlmIChwZXAtPmRtYV9zdGF0dXMgJiBFU1BfRE1BX1NUQVRfQUJPUlQpIHsKKwkJcGNpX2VzcF93cml0ZTgoZXNwLCBFU1BfRE1BX0NNRF9JRExFLCBFU1BfRE1BX0NNRCk7CisJCXBlcC0+ZG1hX3N0YXR1cyA9IHBjaV9lc3BfcmVhZDgoZXNwLCBFU1BfRE1BX0NNRCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpX2VzcF9zZW5kX2RtYV9jbWQoc3RydWN0IGVzcCAqZXNwLCB1MzIgYWRkciwgdTMyIGVzcF9jb3VudCwKKwkJCQkgdTMyIGRtYV9jb3VudCwgaW50IHdyaXRlLCB1OCBjbWQpCit7CisJc3RydWN0IHBjaV9lc3BfcHJpdiAqcGVwID0gcGNpX2VzcF9nZXRfcHJpdihlc3ApOworCXUzMiB2YWwgPSAwOworCisJQlVHX09OKCEoY21kICYgRVNQX0NNRF9ETUEpKTsKKworCXBlcC0+ZG1hX3N0YXR1cyA9IDA7CisKKwkvKiBTZXQgRE1BIGVuZ2luZSB0byBJRExFICovCisJaWYgKHdyaXRlKQorCQkvKiBETUEgd3JpdGUgZGlyZWN0aW9uIGxvZ2ljIGlzIGludmVydGVkICovCisJCXZhbCB8PSBFU1BfRE1BX0NNRF9ESVI7CisJcGNpX2VzcF93cml0ZTgoZXNwLCBFU1BfRE1BX0NNRF9JRExFIHwgdmFsLCBFU1BfRE1BX0NNRCk7CisKKwlwY2lfZXNwX3dyaXRlOChlc3AsIChlc3BfY291bnQgPj4gMCkgJiAweGZmLCBFU1BfVENMT1cpOworCXBjaV9lc3Bfd3JpdGU4KGVzcCwgKGVzcF9jb3VudCA+PiA4KSAmIDB4ZmYsIEVTUF9UQ01FRCk7CisJaWYgKGVzcC0+Y29uZmlnMiAmIEVTUF9DT05GSUcyX0ZFTkFCKQorCQlwY2lfZXNwX3dyaXRlOChlc3AsIChlc3BfY291bnQgPj4gMTYpICYgMHhmZiwgRVNQX1RDSEkpOworCisJcGNpX2VzcF93cml0ZTMyKGVzcCwgZXNwX2NvdW50LCBFU1BfRE1BX1NUQyk7CisJcGNpX2VzcF93cml0ZTMyKGVzcCwgYWRkciwgRVNQX0RNQV9TUEEpOworCisJZXNwX2RtYV9sb2coInN0YXJ0IGRtYSBhZGRyWyV4XSBjb3VudFslZDolZF1cbiIsCisJCSAgICBhZGRyLCBlc3BfY291bnQsIGRtYV9jb3VudCk7CisKKwlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOworCS8qIFNlbmQgRE1BIFN0YXJ0IGNvbW1hbmQgKi8KKwlwY2lfZXNwX3dyaXRlOChlc3AsIEVTUF9ETUFfQ01EX1NUQVJUIHwgdmFsLCBFU1BfRE1BX0NNRCk7Cit9CisKK3N0YXRpYyB1MzIgcGNpX2VzcF9kbWFfbGVuZ3RoX2xpbWl0KHN0cnVjdCBlc3AgKmVzcCwgdTMyIGRtYV9hZGRyLCB1MzIgZG1hX2xlbikKK3sKKwlpbnQgZG1hX2xpbWl0ID0gMTY7CisJdTMyIGJhc2UsIGVuZDsKKworCS8qCisJICogSWYgQ09ORklHMl9GRU5BQiBpcyBzZXQgd2UgY2FuCisJICogaGFuZGxlIHVwIHRvIDI0IGJpdCBhZGRyZXNzZXMKKwkgKi8KKwlpZiAoZXNwLT5jb25maWcyICYgRVNQX0NPTkZJRzJfRkVOQUIpCisJCWRtYV9saW1pdCA9IDI0OworCisJaWYgKGRtYV9sZW4gPiAoMVUgPDwgZG1hX2xpbWl0KSkKKwkJZG1hX2xlbiA9ICgxVSA8PCBkbWFfbGltaXQpOworCisJLyoKKwkgKiBQcmV2ZW50IGNyb3NzaW5nIGEgMjQtYml0IGFkZHJlc3MgYm91bmRhcnkuCisJICovCisJYmFzZSA9IGRtYV9hZGRyICYgKCgxVSA8PCAyNCkgLSAxVSk7CisJZW5kID0gYmFzZSArIGRtYV9sZW47CisJaWYgKGVuZCA+ICgxVSA8PCAyNCkpCisJCWVuZCA9ICgxVSA8PDI0KTsKKwlkbWFfbGVuID0gZW5kIC0gYmFzZTsKKworCXJldHVybiBkbWFfbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGVzcF9kcml2ZXJfb3BzIHBjaV9lc3Bfb3BzID0geworCS5lc3Bfd3JpdGU4CT0JcGNpX2VzcF93cml0ZTgsCisJLmVzcF9yZWFkOAk9CXBjaV9lc3BfcmVhZDgsCisJLm1hcF9zaW5nbGUJPQlwY2lfZXNwX21hcF9zaW5nbGUsCisJLm1hcF9zZwkJPQlwY2lfZXNwX21hcF9zZywKKwkudW5tYXBfc2luZ2xlCT0JcGNpX2VzcF91bm1hcF9zaW5nbGUsCisJLnVubWFwX3NnCT0JcGNpX2VzcF91bm1hcF9zZywKKwkuaXJxX3BlbmRpbmcJPQlwY2lfZXNwX2lycV9wZW5kaW5nLAorCS5yZXNldF9kbWEJPQlwY2lfZXNwX3Jlc2V0X2RtYSwKKwkuZG1hX2RyYWluCT0JcGNpX2VzcF9kbWFfZHJhaW4sCisJLmRtYV9pbnZhbGlkYXRlCT0JcGNpX2VzcF9kbWFfaW52YWxpZGF0ZSwKKwkuc2VuZF9kbWFfY21kCT0JcGNpX2VzcF9zZW5kX2RtYV9jbWQsCisJLmRtYV9lcnJvcgk9CXBjaV9lc3BfZG1hX2Vycm9yLAorCS5kbWFfbGVuZ3RoX2xpbWl0ID0JcGNpX2VzcF9kbWFfbGVuZ3RoX2xpbWl0LAorfTsKKworLyoKKyAqIFJlYWQgREMtMzkwIGVlcHJvbQorICovCitzdGF0aWMgdm9pZCBkYzM5MF9lZXByb21fcHJlcGFyZV9yZWFkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjbWQpCit7CisJdTggY2FycnlfZmxhZyA9IDEsIGogPSAweDgwLCBidmFsOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQlpZiAoY2FycnlfZmxhZykgeworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDB4NDApOworCQkJYnZhbCA9IDB4YzA7CisJCX0gZWxzZQorCQkJYnZhbCA9IDB4ODA7CisKKwkJdWRlbGF5KDE2MCk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCBidmFsKTsKKwkJdWRlbGF5KDE2MCk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAwKTsKKwkJdWRlbGF5KDE2MCk7CisKKwkJY2FycnlfZmxhZyA9IChjbWQgJiBqKSA/IDEgOiAwOworCQlqID4+PSAxOworCX0KK30KKworc3RhdGljIHUxNiBkYzM5MF9lZXByb21fZ2V0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGk7CisJdTE2IHd2YWwgPSAwOworCXU4IGJ2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQl3dmFsIDw8PSAxOworCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAweDgwKTsKKwkJdWRlbGF5KDE2MCk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAweDQwKTsKKwkJdWRlbGF5KDE2MCk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4MDAsICZidmFsKTsKKworCQlpZiAoYnZhbCA9PSAweDIyKQorCQkJd3ZhbCB8PSAxOworCX0KKworCXJldHVybiB3dmFsOworfQorCitzdGF0aWMgdm9pZCBkYzM5MF9yZWFkX2VlcHJvbShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2ICpwdHIpCit7CisJdTggY21kID0gREMzOTBfRUVQUk9NX1JFQUQsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgREMzOTBfRUVQUk9NX0xFTjsgaSsrKSB7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweGMwLCAwKTsKKwkJdWRlbGF5KDE2MCk7CisKKwkJZGMzOTBfZWVwcm9tX3ByZXBhcmVfcmVhZChwZGV2LCBjbWQrKyk7CisJCSpwdHIrKyA9IGRjMzkwX2VlcHJvbV9nZXRfZGF0YShwZGV2KTsKKworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4MCwgMCk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAwKTsKKwkJdWRlbGF5KDE2MCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkYzM5MF9jaGVja19lZXByb20oc3RydWN0IGVzcCAqZXNwKQoreworCXU4IEVFYnVmWzEyOF07CisJdTE2ICpwdHIgPSAodTE2ICopRUVidWYsIHd2YWwgPSAwOworCWludCBpOworCisJZGMzOTBfcmVhZF9lZXByb20oKHN0cnVjdCBwY2lfZGV2ICopZXNwLT5kZXYsIHB0cik7CisKKwlmb3IgKGkgPSAwOyBpIDwgREMzOTBfRUVQUk9NX0xFTjsgaSsrLCBwdHIrKykKKwkJd3ZhbCArPSAqcHRyOworCisJLyogbm8gVGVrcmFtIEVFcHJvbSBmb3VuZCAqLworCWlmICh3dmFsICE9IDB4MTIzNCkgeworCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGVzcC0+ZGV2OworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwKKwkJCSAgICJObyB2YWxpZCBUZWtyYW0gRUVwcm9tIGZvdW5kXG4iKTsKKwkJcmV0dXJuOworCX0KKwllc3AtPnNjc2lfaWQgPSBFRWJ1ZltEQzM5MF9FRV9BREFQVF9TQ1NJX0lEXTsKKwllc3AtPm51bV90YWdzID0gMiA8PCBFRWJ1ZltEQzM5MF9FRV9UQUdfQ01EX05VTV07CisJaWYgKEVFYnVmW0RDMzkwX0VFX01PREUyXSAmIERDMzkwX0VFX01PREUyX0FDVElWRV9ORUdBVElPTikKKwkJZXNwLT5jb25maWc0IHw9IEVTUF9DT05GSUc0X1JBREUgfCBFU1BfQ09ORklHNF9SQUU7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2VzcF9wcm9iZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdHQgPSAmc2NzaV9lc3BfdGVtcGxhdGU7CisJaW50IGVyciA9IC1FTk9ERVY7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IGVzcCAqZXNwOworCXN0cnVjdCBwY2lfZXNwX3ByaXYgKnBlcDsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwgImNhbm5vdCBlbmFibGUgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsCisJCQkgICAiZmFpbGVkIHRvIHNldCAzMmJpdCBETUEgbWFza1xuIik7CisJCWdvdG8gZmFpbF9kaXNhYmxlX2RldmljZTsKKwl9CisKKwlzaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyhob3N0dCwgc2l6ZW9mKHN0cnVjdCBlc3ApKTsKKwlpZiAoIXNob3N0KSB7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LAorCQkJICAgImZhaWxlZCB0byBhbGxvY2F0ZSBzY3NpIGhvc3RcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfZGlzYWJsZV9kZXZpY2U7CisJfQorCisJcGVwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9lc3BfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcGVwKSB7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LAorCQkJICAgImZhaWxlZCB0byBhbGxvY2F0ZSBlc3BfcHJpdlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9ob3N0X2FsbG9jOworCX0KKworCWVzcCA9IHNob3N0X3ByaXYoc2hvc3QpOworCWVzcC0+aG9zdCA9IHNob3N0OworCWVzcC0+ZGV2ID0gcGRldjsKKwllc3AtPm9wcyA9ICZwY2lfZXNwX29wczsKKwkvKgorCSAqIFRoZSBhbTUzYzk3NCBIQkEgaGFzIGEgZGVzaWduIGZsYXcgb2YgZ2VuZXJhdGluZworCSAqIHNwdXJpb3VzIERNQSBjb21wbGV0aW9uIGludGVycnVwdHMgd2hlbiB1c2luZworCSAqIERNQSBmb3IgY29tbWFuZCBzdWJtaXNzaW9uLgorCSAqLworCWVzcC0+ZmxhZ3MgfD0gRVNQX0ZMQUdfVVNFX0ZJRk87CisJLyoKKwkgKiBFbmFibGUgQ09ORklHMl9GRU5BQiB0byBhbGxvdyBmb3IgbGFyZ2UgRE1BIHRyYW5zZmVycworCSAqLworCWlmIChhbTUzYzk3NF9mZW5hYikKKwkJZXNwLT5jb25maWcyIHw9IEVTUF9DT05GSUcyX0ZFTkFCOworCisJcGVwLT5lc3AgPSBlc3A7CisKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkgICAicGNpIG1lbW9yeSBzZWxlY3Rpb24gZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsX3ByaXZfYWxsb2M7CisJfQorCisJZXNwLT5yZWdzID0gcGNpX2lvbWFwKHBkZXYsIDAsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOworCWlmICghZXNwLT5yZWdzKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsICJwY2kgSS9PIG1hcCBmYWlsZWRcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxfcmVsZWFzZV9yZWdpb25zOworCX0KKwllc3AtPmRtYV9yZWdzID0gZXNwLT5yZWdzOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwllc3AtPmNvbW1hbmRfYmxvY2sgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCAxNiwKKwkJCQkJCSAgJmVzcC0+Y29tbWFuZF9ibG9ja19kbWEpOworCWlmICghZXNwLT5jb21tYW5kX2Jsb2NrKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkgICAiZmFpbGVkIHRvIGFsbG9jYXRlIGNvbW1hbmQgYmxvY2tcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfdW5tYXBfcmVnczsKKwl9CisKKwllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNjc2lfZXNwX2ludHIsIElSUUZfU0hBUkVELAorCQkJICBEUlZfTU9EVUxFX05BTUUsIGVzcCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBJUlFcbiIpOworCQlnb3RvIGZhaWxfdW5tYXBfY29tbWFuZF9ibG9jazsKKwl9CisKKwllc3AtPnNjc2lfaWQgPSA3OworCWRjMzkwX2NoZWNrX2VlcHJvbShlc3ApOworCisJc2hvc3QtPnRoaXNfaWQgPSBlc3AtPnNjc2lfaWQ7CisJc2hvc3QtPm1heF9pZCA9IDg7CisJc2hvc3QtPmlycSA9IHBkZXYtPmlycTsKKwlzaG9zdC0+aW9fcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlzaG9zdC0+bl9pb19wb3J0ID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlzaG9zdC0+dW5pcXVlX2lkID0gc2hvc3QtPmlvX3BvcnQ7CisJZXNwLT5zY3NpX2lkX21hc2sgPSAoMSA8PCBlc3AtPnNjc2lfaWQpOworCS8qIEFzc3VtZSA0ME1IeiBjbG9jayAqLworCWVzcC0+Y2ZyZXEgPSA0MDAwMDAwMDsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwZXApOworCisJZXJyID0gc2NzaV9lc3BfcmVnaXN0ZXIoZXNwLCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfZnJlZV9pcnE7CisKKwlyZXR1cm4gMDsKKworZmFpbF9mcmVlX2lycToKKwlmcmVlX2lycShwZGV2LT5pcnEsIGVzcCk7CitmYWlsX3VubWFwX2NvbW1hbmRfYmxvY2s6CisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCAxNiwgZXNwLT5jb21tYW5kX2Jsb2NrLAorCQkJICAgIGVzcC0+Y29tbWFuZF9ibG9ja19kbWEpOworZmFpbF91bm1hcF9yZWdzOgorCXBjaV9pb3VubWFwKHBkZXYsIGVzcC0+cmVncyk7CitmYWlsX3JlbGVhc2VfcmVnaW9uczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZmFpbF9wcml2X2FsbG9jOgorCWtmcmVlKHBlcCk7CitmYWlsX2hvc3RfYWxsb2M6CisJc2NzaV9ob3N0X3B1dChzaG9zdCk7CitmYWlsX2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9lc3BfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcGNpX2VzcF9wcml2ICpwZXAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGVzcCAqZXNwID0gcGVwLT5lc3A7CisKKwlzY3NpX2VzcF91bnJlZ2lzdGVyKGVzcCk7CisJZnJlZV9pcnEocGRldi0+aXJxLCBlc3ApOworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgMTYsIGVzcC0+Y29tbWFuZF9ibG9jaywKKwkJCSAgICBlc3AtPmNvbW1hbmRfYmxvY2tfZG1hKTsKKwlwY2lfaW91bm1hcChwZGV2LCBlc3AtPnJlZ3MpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCWtmcmVlKHBlcCk7CisKKwlzY3NpX2hvc3RfcHV0KGVzcC0+aG9zdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbTUzYzk3NF9wY2lfdGJsW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0NTSSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbTUzYzk3NF9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtNTNjOTc0X2RyaXZlciA9IHsKKwkubmFtZSAgICAgICAgICAgPSBEUlZfTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgICAgID0gYW01M2M5NzRfcGNpX3RibCwKKwkucHJvYmUgICAgICAgICAgPSBwY2lfZXNwX3Byb2JlX29uZSwKKwkucmVtb3ZlICAgICAgICAgPSBwY2lfZXNwX3JlbW92ZV9vbmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbTUzYzk3NF9tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbTUzYzk3NF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYW01M2M5NzRfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFtNTNjOTc0X2RyaXZlcik7Cit9CisKK01PRFVMRV9ERVNDUklQVElPTigiQU01M0M5NzQgU0NTSSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkhhbm5lcyBSZWluZWNrZSA8aGFyZUBzdXNlLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKK01PRFVMRV9BTElBUygidG1zY3NpbSIpOworCittb2R1bGVfcGFyYW0oYW01M2M5NzRfZGVidWcsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhbTUzYzk3NF9kZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmciKTsKKworbW9kdWxlX3BhcmFtKGFtNTNjOTc0X2ZlbmFiLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYW01M2M5NzRfZmVuYWIsICJFbmFibGUgMjQtYml0IERNQSB0cmFuc2ZlciBzaXplcyIpOworCittb2R1bGVfaW5pdChhbTUzYzk3NF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChhbTUzYzk3NF9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCmluZGV4IDBiNDRmYjUuLjkxNGMzOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCkBAIC0xMTQsMTYgKzExNCwxMSBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmFyY21zcl9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgYXJjbXNyX2ludGVycnVwdChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKTsKIHN0YXRpYyB2b2lkIGFyY21zcl9mcmVlX2lycShzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKTsKLXN0YXRpYyBpbnQgYXJjbXNyX2FkanVzdF9kaXNrX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCQkJICBpbnQgcXVldWVfZGVwdGgsIGludCByZWFzb24pCitzdGF0aWMgaW50IGFyY21zcl9hZGp1c3RfZGlza19xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxdWV1ZV9kZXB0aCkKIHsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCWlmIChxdWV1ZV9kZXB0aCA+IEFSQ01TUl9NQVhfQ01EX1BFUkxVTikKIAkJcXVldWVfZGVwdGggPSBBUkNNU1JfTUFYX0NNRF9QRVJMVU47Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBxdWV1ZV9kZXB0aCk7Ci0JcmV0dXJuIHF1ZXVlX2RlcHRoOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxdWV1ZV9kZXB0aCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFyY21zcl9zY3NpX2hvc3RfdGVtcGxhdGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYwppbmRleCBkODliOWI0Li5kZWFhZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKQEAgLTg1MCwxMyArODUwLDEzIEBACiAJCQlicmVhazsKIAogCQkgICAgZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAic2NzaSVkLkg6IGluY29tcGxldGUgZGF0YSB0cmFuc2ZlciBkZXRlY3RlZDogcmVzdWx0PSUwOFggY29tbWFuZD0iLAotCQkJCWhvc3QtPmhvc3QtPmhvc3Rfbm8sIFNDcG50LT5yZXN1bHQpOwotCQkJX19zY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQtPmNtbmQpOworCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIFNDcG50LAorCQkJCSAgICAiaW5jb21wbGV0ZSBkYXRhIHRyYW5zZmVyIGRldGVjdGVkOiAiCisJCQkJICAgICJyZXN1bHQ9JTA4WCIsIFNDcG50LT5yZXN1bHQpOworCQkJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKIAkJCWFjb3Juc2NzaV9kdW1wZG1hKGhvc3QsICJkb25lIik7Ci0JCSAJYWNvcm5zY3NpX2R1bXBsb2coaG9zdCwgU0NwbnQtPmRldmljZS0+aWQpOwotCQkJU0NwbnQtPnJlc3VsdCAmPSAweGZmZmY7Ci0JCQlTQ3BudC0+cmVzdWx0IHw9IERJRF9FUlJPUiA8PCAxNjsKKwkJCWFjb3Juc2NzaV9kdW1wbG9nKGhvc3QsIFNDcG50LT5kZXZpY2UtPmlkKTsKKwkJCXNldF9ob3N0X2J5dGUoU0NwbnQsIERJRF9FUlJPUik7CiAJCSAgICB9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMKaW5kZXggOGVmODEwYS4uZDI4ZDZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzEuYwpAQCAtMTMsMTYgKzEzLDEyIEBACiAjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlICIuLi9zY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgogCi0jZGVmaW5lIEFVVE9TRU5TRQogI2RlZmluZSBQU0VVRE9fRE1BCiAKLSNkZWZpbmUgQ1VNQU5BU0NTSV9QVUJMSUNfUkVMRUFTRSAxCi0KICNkZWZpbmUgcHJpdihob3N0KQkJCSgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikoaG9zdCktPmhvc3RkYXRhKQogI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKQkJc3RydWN0IFNjc2lfSG9zdCAqX2luc3RhbmNlCiAjZGVmaW5lIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpCQlfaW5zdGFuY2UgPSBpbnN0YW5jZQpAQCAtMzAsNiArMjYsNyBAQAogI2RlZmluZSBOQ1I1MzgwX3dyaXRlKHJlZywgdmFsdWUpCWN1bWFuYXNjc2lfd3JpdGUoX2luc3RhbmNlLCByZWcsIHZhbHVlKQogI2RlZmluZSBOQ1I1MzgwX2ludHIJCQljdW1hbmFzY3NpX2ludHIKICNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kCQljdW1hbmFzY3NpX3F1ZXVlX2NvbW1hbmQKKyNkZWZpbmUgTkNSNTM4MF9pbmZvCQkJY3VtYW5hc2NzaV9pbmZvCiAKICNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMJXAogCXVuc2lnbmVkIGN0cmw7CQkJXApAQCAtNDIsMTEgKzM5LDYgQEAKIHsKIH0KIAotY29uc3QgY2hhciAqY3VtYW5hc2NzaV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKnNwbnQpCi17Ci0JcmV0dXJuICIiOwotfQotCiAjZGVmaW5lIENUUkwJMHgxNmZjCiAjZGVmaW5lIFNUQVQJMHgyMDA0CiAjZGVmaW5lIEwodikJKCgodik8PDE2KXwoKHYpICYgMHgwMDAwZmZmZikpCkBAIC0yNjcsMTQgKzI1OSw2IEBACiAJCWdvdG8gb3V0X3VubWFwOwogCX0KIAotCXByaW50aygic2NzaSVkOiBhdCBwb3J0IDB4JTA4bHggaXJxICVkIiwKLQkJaG9zdC0+aG9zdF9ubywgaG9zdC0+aW9fcG9ydCwgaG9zdC0+aXJxKTsKLQlwcmludGsoIiBvcHRpb25zIENBTl9RVUVVRT0lZCBDTURfUEVSX0xVTj0lZCByZWxlYXNlPSVkIiwKLQkJaG9zdC0+Y2FuX3F1ZXVlLCBob3N0LT5jbWRfcGVyX2x1biwgQ1VNQU5BU0NTSV9QVUJMSUNfUkVMRUFTRSk7Ci0JcHJpbnRrKCJcbnNjc2klZDoiLCBob3N0LT5ob3N0X25vKTsKLQlOQ1I1MzgwX3ByaW50X29wdGlvbnMoaG9zdCk7Ci0JcHJpbnRrKCJcbiIpOwotCiAJcmV0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmZWMtPmRldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZV9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jIGIvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYwppbmRleCA3MWNmYjFlLi5lNjRjM2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmMKQEAgLTMwOCw4ICszMDgsNyBAQAogCWZhczIxNl9kb19sb2coaW5mbywgJzAnICsgU0NwbnQtPmRldmljZS0+aWQsIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCi0JcHJpbnRrKCIgQ0RCOiAiKTsKLQlfX3Njc2lfcHJpbnRfY29tbWFuZChTQ3BudC0+Y21uZCk7CisJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIwNzksMTQgKzIwNzgsMTIgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgInNjc2klZC4lYzogaW5jb21wbGV0ZSBkYXRhIHRyYW5zZmVyICIKLQkJCQkiZGV0ZWN0ZWQ6IHJlcz0lMDhYIHB0cj0lcCBsZW49JVggQ0RCOiAiLAotCQkJCWluZm8tPmhvc3QtPmhvc3Rfbm8sICcwJyArIFNDcG50LT5kZXZpY2UtPmlkLAotCQkJCVNDcG50LT5yZXN1bHQsIGluZm8tPnNjc2kuU0NwLnB0ciwKLQkJCQlpbmZvLT5zY3NpLlNDcC50aGlzX3Jlc2lkdWFsKTsKLQkJCV9fc2NzaV9wcmludF9jb21tYW5kKFNDcG50LT5jbW5kKTsKLQkJCVNDcG50LT5yZXN1bHQgJj0gfigyNTUgPDwgMTYpOwotCQkJU0NwbnQtPnJlc3VsdCB8PSBESURfQkFEX1RBUkdFVCA8PCAxNjsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBTQ3BudCwKKwkJCQkgICAgImluY29tcGxldGUgZGF0YSB0cmFuc2ZlciBkZXRlY3RlZDogcmVzPSUwOFggcHRyPSVwIGxlbj0lWFxuIiwKKwkJCQkgICAgU0NwbnQtPnJlc3VsdCwgaW5mby0+c2NzaS5TQ3AucHRyLAorCQkJCSAgICBpbmZvLT5zY3NpLlNDcC50aGlzX3Jlc2lkdWFsKTsKKwkJCXNjc2lfcHJpbnRfY29tbWFuZChTQ3BudCk7CisJCQlzZXRfaG9zdF9ieXRlKFNDcG50LCBESURfRVJST1IpOwogCQkJZ290byByZXF1ZXN0X3NlbnNlOwogCQl9CiAJfQpAQCAtMjE1OCwxMiArMjE1NSwxMSBAQAogCSAqIHRvIHRyYW5zZmVyLCB3ZSBzaG91bGQgbm90IGhhdmUgYSB2YWxpZCBwb2ludGVyLgogCSAqLwogCWlmIChpbmZvLT5zY3NpLlNDcC5wdHIgJiYgaW5mby0+c2NzaS5TQ3AudGhpc19yZXNpZHVhbCA9PSAwKSB7Ci0JCXByaW50aygic2NzaSVkLiVjOiB6ZXJvIGJ5dGVzIGxlZnQgdG8gdHJhbnNmZXIsIGJ1dCAiCi0JCSAgICAgICAiYnVmZmVyIHBvaW50ZXIgc3RpbGwgdmFsaWQ6IHB0cj0lcCBsZW49JTA4eCBDREI6ICIsCi0JCSAgICAgICBpbmZvLT5ob3N0LT5ob3N0X25vLCAnMCcgKyBTQ3BudC0+ZGV2aWNlLT5pZCwKLQkJICAgICAgIGluZm8tPnNjc2kuU0NwLnB0ciwgaW5mby0+c2NzaS5TQ3AudGhpc19yZXNpZHVhbCk7CisJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsCisJCQkgICAgInplcm8gYnl0ZXMgbGVmdCB0byB0cmFuc2ZlciwgYnV0IGJ1ZmZlciBwb2ludGVyIHN0aWxsIHZhbGlkOiBwdHI9JXAgbGVuPSUwOHhcbiIsCisJCQkgICAgaW5mby0+c2NzaS5TQ3AucHRyLCBpbmZvLT5zY3NpLlNDcC50aGlzX3Jlc2lkdWFsKTsKIAkJaW5mby0+c2NzaS5TQ3AucHRyID0gTlVMTDsKLQkJX19zY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQtPmNtbmQpOworCQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOwogCX0KIAogCS8qCkBAIC0yNDI3LDE0ICsyNDIzLDExIEBACiAKIAlpbmZvLT5zdGF0cy5hYm9ydHMgKz0gMTsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZDogYWJvcnQgY29tbWFuZCAiLCBpbmZvLT5ob3N0LT5ob3N0X25vKTsKLQlfX3Njc2lfcHJpbnRfY29tbWFuZChTQ3BudC0+Y21uZCk7CisJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBTQ3BudCwgImFib3J0IGNvbW1hbmRcbiIpOwogCiAJcHJpbnRfZGVidWdfbGlzdCgpOwogCWZhczIxNl9kdW1wc3RhdGUoaW5mbyk7CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IGFib3J0ICVwICIsIGluZm8tPmhvc3QtPmhvc3Rfbm8sIFNDcG50KTsKLQogCXN3aXRjaCAoZmFzMjE2X2ZpbmRfY29tbWFuZChpbmZvLCBTQ3BudCkpIHsKIAkvKgogCSAqIFdlIGZvdW5kIHRoZSBjb21tYW5kLCBhbmQgY2xlYXJlZCBpdCBvdXQuICBFaXRoZXIKQEAgLTI0NDIsNyArMjQzNSw3IEBACiAJICogdGFyZ2V0LCBvciB0aGUgYnVzeWx1biBiaXQgaXMgbm90IHNldC4KIAkgKi8KIAljYXNlIHJlc19zdWNjZXNzOgotCQlwcmludGsoInN1Y2Nlc3NcbiIpOworCQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIFNDcG50LCAiYWJvcnQgJXAgc3VjY2Vzc1xuIiwgU0NwbnQpOwogCQlyZXN1bHQgPSBTVUNDRVNTOwogCQlicmVhazsKIApAQCAtMjQ1MiwxNCArMjQ0NSwxMyBAQAogCSAqIGlmIHRoZSBidXMgaXMgZnJlZS4KIAkgKi8KIAljYXNlIHJlc19od19hYm9ydDoKLQkJCiAKIAkvKgogCSAqIFdlIGFyZSB1bmFibGUgdG8gYWJvcnQgdGhlIGNvbW1hbmQgZm9yIHNvbWUgcmVhc29uLgogCSAqLwogCWRlZmF1bHQ6CiAJY2FzZSByZXNfZmFpbGVkOgotCQlwcmludGsoImZhaWxlZFxuIik7CisJCXNjbWRfcHJpbnRrKEtFUk5fV0FSTklORywgU0NwbnQsICJhYm9ydCAlcCBmYWlsZWRcbiIsIFNDcG50KTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNjY0LDggKzI2NTYsNyBAQAogCiAJZmFzMjE2X2NoZWNrbWFnaWMoaW5mbyk7CiAKLQlwcmludGsoInNjc2klZC4lYzogJXM6IHJlc2V0dGluZyBob3N0XG4iLAotCQlpbmZvLT5ob3N0LT5ob3N0X25vLCAnMCcgKyBTQ3BudC0+ZGV2aWNlLT5pZCwgX19mdW5jX18pOworCWZhczIxNl9sb2coaW5mbywgTE9HX0VSUk9SLCAicmVzZXR0aW5nIGhvc3QiKTsKIAogCS8qCiAJICogUmVzZXQgdGhlIFNDU0kgY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vb2FrLmMgYi9kcml2ZXJzL3Njc2kvYXJtL29hay5jCmluZGV4IDE4OGU3MzQuLjdjNmZhMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vb2FrLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9vYWsuYwpAQCAtMTQsMTMgKzE0LDkgQEAKICNpbmNsdWRlIDxhc20vZWNhcmQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgIi4uL3Njc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogCi0jZGVmaW5lIEFVVE9TRU5TRQogLyojZGVmaW5lIFBTRVVET19ETUEqLwotCi0jZGVmaW5lIE9BS1NDU0lfUFVCTElDX1JFTEVBU0UgMQogI2RlZmluZSBET05UX1VTRV9JTlRSCiAKICNkZWZpbmUgcHJpdihob3N0KQkJCSgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikoaG9zdCktPmhvc3RkYXRhKQpAQCAtMjksMTAgKzI1LDkgQEAKIAogI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKQkJcmVhZGIoX2Jhc2UgKyAoKHJlZykgPDwgMikpCiAjZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkJd3JpdGViKHZhbHVlLCBfYmFzZSArICgocmVnKSA8PCAyKSkKLSNkZWZpbmUgTkNSNTM4MF9pbnRyCQkJb2Frc2NzaV9pbnRyCiAjZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZAkJb2Frc2NzaV9xdWV1ZV9jb21tYW5kCisjZGVmaW5lIE5DUjUzODBfaW5mbwkJCW9ha3Njc2lfaW5mbwogI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbwkJb2Frc2NzaV9zaG93X2luZm8KLSNkZWZpbmUgTkNSNTM4MF93cml0ZV9pbmZvCQlvYWtzY3NpX3dyaXRlX2luZm8KIAogI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcwlcCiAJdm9pZCBfX2lvbWVtICpiYXNlCkBAIC00MiwxMSArMzcsNiBAQAogI3VuZGVmIFNUQVJUX0RNQV9JTklUSUFUT1JfUkVDRUlWRV9SRUcKICNkZWZpbmUgU1RBUlRfRE1BX0lOSVRJQVRPUl9SRUNFSVZFX1JFRwkoMTI4ICsgNykKIAotY29uc3QgY2hhciAqIG9ha3Njc2lfaW5mbyAoc3RydWN0IFNjc2lfSG9zdCAqc3BudCkKLXsKLQlyZXR1cm4gIiI7Ci19Ci0KICNkZWZpbmUgU1RBVAkoKDEyOCArIDE2KSA8PCAyKQogI2RlZmluZSBEQVRBCSgoMTI4ICsgOCkgPDwgMikKIApAQCAtMTE0LDcgKzEwNCw2IEBACiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBvYWtzY3NpX3RlbXBsYXRlID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5zaG93X2luZm8JCT0gb2Frc2NzaV9zaG93X2luZm8sCi0JLndyaXRlX2luZm8JCT0gb2Frc2NzaV93cml0ZV9pbmZvLAogCS5uYW1lCQkJPSAiT2FrIDE2LWJpdCBTQ1NJIiwKIAkuaW5mbwkJCT0gb2Frc2NzaV9pbmZvLAogCS5xdWV1ZWNvbW1hbmQJCT0gb2Frc2NzaV9xdWV1ZV9jb21tYW5kLApAQCAtMTUwLDE5ICsxMzksMTEgQEAKIAkJZ290byB1bnJlZzsKIAl9CiAKLQlob3N0LT5pcnEgPSBJUlFfTk9ORTsKKwlob3N0LT5pcnEgPSBOT19JUlE7CiAJaG9zdC0+bl9pb19wb3J0ID0gMjU1OwogCiAJTkNSNTM4MF9pbml0KGhvc3QsIDApOwogCi0JcHJpbnRrKCJzY3NpJWQ6IGF0IHBvcnQgMHglMDhseCBpcnFzIGRpc2FibGVkIiwKLQkJaG9zdC0+aG9zdF9ubywgaG9zdC0+aW9fcG9ydCk7Ci0JcHJpbnRrKCIgb3B0aW9ucyBDQU5fUVVFVUU9JWQgIENNRF9QRVJfTFVOPSVkIHJlbGVhc2U9JWQiLAotCQlob3N0LT5jYW5fcXVldWUsIGhvc3QtPmNtZF9wZXJfbHVuLCBPQUtTQ1NJX1BVQkxJQ19SRUxFQVNFKTsKLQlwcmludGsoIlxuc2NzaSVkOiIsIGhvc3QtPmhvc3Rfbm8pOwotCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhob3N0KTsKLQlwcmludGsoIlxuIik7Ci0KIAlyZXQgPSBzY3NpX2FkZF9ob3N0KGhvc3QsICZlYy0+ZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bm1hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCmluZGV4IDc5ZTZmMDQuLjZkYWVkNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwpAQCAtMTEsOCArMTEsNiBAQAogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqCSsxICgzMDMpIDY2Ni01ODM2CiAgKgotICogRElTVFJJQlVUSU9OIFJFTEVBU0UgNi4KLSAqCiAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQKICAqCiAgKiBOQ1IgNTM4MCBGYW1pbHkKQEAgLTczLDYgKzcxLDkgQEAKICAqIDEuICBUZXN0IGxpbmtlZCBjb21tYW5kIGhhbmRsaW5nIGNvZGUgYWZ0ZXIgRXJpYyBpcyByZWFkeSB3aXRoCiAgKiAgICAgdGhlIGhpZ2ggbGV2ZWwgY29kZS4KICAqLworCisvKiBBZGFwdGVkIGZvciB0aGUgc3VuMyBieSBTYW0gQ3JlYXNleS4gKi8KKwogI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oPgogCkBAIC0xMDMsMjcgKzEwNCw3IEBACiAKIC8qCiAgKiBEZXNpZ24KLSAqIElzc3VlcyA6CiAgKgotICogVGhlIG90aGVyIExpbnV4IFNDU0kgZHJpdmVycyB3ZXJlIHdyaXR0ZW4gd2hlbiBMaW51eCB3YXMgSW50ZWwgUEMtb25seSwKLSAqIGFuZCBzcGVjaWZpY2FsbHkgZm9yIGVhY2ggYm9hcmQgcmF0aGVyIHRoYW4gZWFjaCBjaGlwLiAgVGhpcyBtYWtlcyB0aGVpcgotICogYWRhcHRhdGlvbiB0byBwbGF0Zm9ybXMgbGlrZSB0aGUgTWFjIChTb21lIG9mIHdoaWNoIHVzZSBOQ1I1MzgwJ3MpCi0gKiBtb3JlIGRpZmZpY3VsdCB0aGFuIGl0IGhhcyB0byBiZS4KLSAqCi0gKiBBbHNvLCBtYW55IG9mIHRoZSBTQ1NJIGRyaXZlcnMgd2VyZSB3cml0dGVuIGJlZm9yZSB0aGUgY29tbWFuZCBxdWV1aW5nCi0gKiByb3V0aW5lcyB3ZXJlIGltcGxlbWVudGVkLCBtZWFuaW5nIHRoZWlyIGltcGxlbWVudGF0aW9ucyBvZiBxdWV1ZWQKLSAqIGNvbW1hbmRzIHdlcmUgaGFja2VkIG9uIHJhdGhlciB0aGFuIGRlc2lnbmVkIGluIGZyb20gdGhlIHN0YXJ0LgotICoKLSAqIFdoZW4gSSBkZXNpZ25lZCB0aGUgTGludXggU0NTSSBkcml2ZXJzIEkgZmlndXJlZCB0aGF0Ci0gKiB3aGlsZSBoYXZpbmcgdHdvIGRpZmZlcmVudCBTQ1NJIGJvYXJkcyBpbiBhIHN5c3RlbSBtaWdodCBiZSB1c2VmdWwKLSAqIGZvciBkZWJ1Z2dpbmcgdGhpbmdzLCB0d28gb2YgdGhlIHNhbWUgdHlwZSB3b3VsZG4ndCBiZSB1c2VkLgotICogV2VsbCwgSSB3YXMgd3JvbmcgYW5kIGEgbnVtYmVyIG9mIHVzZXJzIGhhdmUgbWFpbGVkIG1lIGFib3V0IHJ1bm5pbmcKLSAqIG11bHRpcGxlIGhpZ2gtcGVyZm9ybWFuY2UgU0NTSSBib2FyZHMgaW4gYSBzZXJ2ZXIuCi0gKgotICogRmluYWxseSwgd2hlbiBJIGdldCBxdWVzdGlvbnMgZnJvbSB1c2VycywgSSBoYXZlIG5vIGlkZWEgd2hhdAotICogcmV2aXNpb24gb2YgbXkgZHJpdmVyIHRoZXkgYXJlIHJ1bm5pbmcuCi0gKgotICogVGhpcyBkcml2ZXIgYXR0ZW1wdHMgdG8gYWRkcmVzcyB0aGVzZSBwcm9ibGVtcyA6CiAgKiBUaGlzIGlzIGEgZ2VuZXJpYyA1MzgwIGRyaXZlci4gIFRvIHVzZSBpdCBvbiBhIGRpZmZlcmVudCBwbGF0Zm9ybSwKICAqIG9uZSBzaW1wbHkgd3JpdGVzIGFwcHJvcHJpYXRlIHN5c3RlbSBzcGVjaWZpYyBtYWNyb3MgKGllLCBkYXRhCiAgKiB0cmFuc2ZlciAtIHNvbWUgUEMncyB3aWxsIHVzZSB0aGUgSS9PIGJ1cywgNjhLJ3MgbXVzdCB1c2UKQEAgLTEzOCwxNyArMTE5LDYgQEAKICAqIGFsbG93aW5nIG11bHRpcGxlIGNvbW1hbmRzIHRvIHByb3BhZ2F0ZSBhbGwgdGhlIHdheSB0byBhIFNDU0ktSUkgZGV2aWNlCiAgKiB3aGlsZSBhIGNvbW1hbmQgaXMgYWxyZWFkeSBleGVjdXRpbmcuCiAgKgotICogVG8gc29sdmUgdGhlIG11bHRpcGxlLWJvYXJkcy1pbi10aGUtc2FtZS1zeXN0ZW0gcHJvYmxlbSwKLSAqIHRoZXJlIGlzIGEgc2VwYXJhdGUgaW5zdGFuY2Ugc3RydWN0dXJlIGZvciBlYWNoIGluc3RhbmNlCi0gKiBvZiBhIDUzODAgaW4gdGhlIHN5c3RlbS4gIFNvLCBtdWx0aXBsZSBOQ1I1MzgwIGRyaXZlcnMgd2lsbAotICogYmUgYWJsZSB0byBjb2V4aXN0IHdpdGggYXBwcm9wcmlhdGUgY2hhbmdlcyB0byB0aGUgaGlnaCBsZXZlbAotICogU0NTSSBjb2RlLgotICoKLSAqIEEgTkNSNTM4MF9QVUJMSUNfUkVWSVNJT04gbWFjcm8gaXMgcHJvdmlkZWQsIHdpdGggdGhlIHJlbGVhc2UKLSAqIG51bWJlciAodXBkYXRlZCBmb3IgZWFjaCBwdWJsaWMgcmVsZWFzZSkgcHJpbnRlZCBieSB0aGUKLSAqIE5DUjUzODBfcHJpbnRfb3B0aW9ucyBjb21tYW5kLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlCi0gKiB3cmFwcGVyIGRldGVjdCBmdW5jdGlvbiwgc28gdGhhdCBJIGtub3cgd2hhdCByZWxlYXNlIG9mIHRoZSBkcml2ZXIKLSAqIHVzZXJzIGFyZSB1c2luZy4KICAqCiAgKiBJc3N1ZXMgc3BlY2lmaWMgdG8gdGhlIE5DUjUzODAgOgogICoKQEAgLTE3MywxOSArMTQzLDE3IEBACiAgKiBBcmNoaXRlY3R1cmUgOgogICoKICAqIEF0IHRoZSBoZWFydCBvZiB0aGUgZGVzaWduIGlzIGEgY29yb3V0aW5lLCBOQ1I1MzgwX21haW4sCi0gKiB3aGljaCBpcyBzdGFydGVkIHdoZW4gbm90IHJ1bm5pbmcgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyLAotICogdGltZXIsIGFuZCBxdWV1ZSBjb21tYW5kIGZ1bmN0aW9uLiAgSXQgYXR0ZW1wdHMgdG8gZXN0YWJsaXNoCi0gKiBJX1RfTCBvciBJX1RfTF9RIG5leHVzZXMgYnkgcmVtb3ZpbmcgdGhlIGNvbW1hbmRzIGZyb20gdGhlCi0gKiBpc3N1ZSBxdWV1ZSBhbmQgY2FsbGluZyBOQ1I1MzgwX3NlbGVjdCgpIGlmIGEgbmV4dXMKLSAqIGlzIG5vdCBlc3RhYmxpc2hlZC4KKyAqIHdoaWNoIGlzIHN0YXJ0ZWQgZnJvbSBhIHdvcmtxdWV1ZSBmb3IgZWFjaCBOQ1I1MzgwIGhvc3QgaW4gdGhlCisgKiBzeXN0ZW0uICBJdCBhdHRlbXB0cyB0byBlc3RhYmxpc2ggSV9UX0wgb3IgSV9UX0xfUSBuZXh1c2VzIGJ5CisgKiByZW1vdmluZyB0aGUgY29tbWFuZHMgZnJvbSB0aGUgaXNzdWUgcXVldWUgYW5kIGNhbGxpbmcKKyAqIE5DUjUzODBfc2VsZWN0KCkgaWYgYSBuZXh1cyBpcyBub3QgZXN0YWJsaXNoZWQuCiAgKgogICogT25jZSBhIG5leHVzIGlzIGVzdGFibGlzaGVkLCB0aGUgTkNSNTM4MF9pbmZvcm1hdGlvbl90cmFuc2ZlcigpCiAgKiBwaGFzZSBnb2VzIHRocm91Z2ggdGhlIHZhcmlvdXMgcGhhc2VzIGFzIGluc3RydWN0ZWQgYnkgdGhlIHRhcmdldC4KICAqIGlmIHRoZSB0YXJnZXQgZ29lcyBpbnRvIE1TRyBJTiBhbmQgc2VuZHMgYSBESVNDT05ORUNUIG1lc3NhZ2UsCiAgKiB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGludG8gdGhlIHBlciBpbnN0YW5jZSBkaXNjb25uZWN0ZWQKLSAqIHF1ZXVlLCBhbmQgTkNSNTM4MF9tYWluIHRyaWVzIHRvIGZpbmQgbW9yZSB3b3JrLiAgSWYgVVNMRUVQCi0gKiB3YXMgZGVmaW5lZCwgYW5kIHRoZSB0YXJnZXQgaXMgaWRsZSBmb3IgdG9vIGxvbmcsIHRoZSBzeXN0ZW0KLSAqIHdpbGwgdHJ5IHRvIHNsZWVwLgorICogcXVldWUsIGFuZCBOQ1I1MzgwX21haW4gdHJpZXMgdG8gZmluZCBtb3JlIHdvcmsuICBJZiB0aGUgdGFyZ2V0IGlzCisgKiBpZGxlIGZvciB0b28gbG9uZywgdGhlIHN5c3RlbSB3aWxsIHRyeSB0byBzbGVlcC4KICAqCiAgKiBJZiBhIGNvbW1hbmQgaGFzIGRpc2Nvbm5lY3RlZCwgZXZlbnR1YWxseSBhbiBpbnRlcnJ1cHQgd2lsbCB0cmlnZ2VyLAogICogY2FsbGluZyBOQ1I1MzgwX2ludHIoKSAgd2hpY2ggd2lsbCBpbiB0dXJuIGNhbGwgTkNSNTM4MF9yZXNlbGVjdApAQCAtMjExLDYgKzE3OSw5IEBACiAgKiBBVVRPU0VOU0UgLSBpZiBkZWZpbmVkLCBSRVFVRVNUIFNFTlNFIHdpbGwgYmUgcGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkKICAqCWZvciBjb21tYW5kcyB0aGF0IHJldHVybiB3aXRoIGEgQ0hFQ0sgQ09ORElUSU9OIHN0YXR1cy4KICAqCisgKiBESUZGRVJFTlRJQUwgLSBpZiBkZWZpbmVkLCBOQ1I1M2M4MSBjaGlwcyB3aWxsIHVzZSBleHRlcm5hbCBkaWZmZXJlbnRpYWwKKyAqCXRyYW5zY2VpdmVycy4KKyAqCiAgKiBMSU5LRUQgLSBpZiBkZWZpbmVkLCBsaW5rZWQgY29tbWFuZHMgYXJlIHN1cHBvcnRlZC4KICAqCiAgKiBSRUFMX0RNQSAtIGlmIGRlZmluZWQsIFJFQUwgRE1BIGlzIHVzZWQgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyIHBoYXNlcy4KQEAgLTIyMyw2ICsxOTQsOSBAQAogICoKICAqIE5DUjUzODBfd3JpdGUocmVnaXN0ZXIsIHZhbHVlKSAtIHdyaXRlIHRvIHRoZSBzcGVjaWZpYyByZWdpc3RlcgogICoKKyAqIE5DUjUzODBfaW1wbGVtZW50YXRpb25fZmllbGRzICAtIGFkZGl0aW9uYWwgZmllbGRzIG5lZWRlZCBmb3IgdGhpcworICogICAgICBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTkNSNTM4MAorICoKICAqIEVpdGhlciByZWFsIERNQSAqb3IqIHBzZXVkbyBETUEgbWF5IGJlIGltcGxlbWVudGVkCiAgKiBSRUFMIGZ1bmN0aW9ucyA6CiAgKiBOQ1I1MzgwX1JFQUxfRE1BIHNob3VsZCBiZSBkZWZpbmVkIGlmIHJlYWwgRE1BIGlzIHRvIGJlIHVzZWQuCkBAIC0yNDEsNDAgKzIxNSwyMSBAQAogICogTkNSNTM4MF9wd3JpdGUoaW5zdGFuY2UsIHNyYywgY291bnQpCiAgKiBOQ1I1MzgwX3ByZWFkKGluc3RhbmNlLCBkc3QsIGNvdW50KTsKICAqCi0gKiBJZiBub3RoaW5nIHNwZWNpZmljIHRvIHRoaXMgaW1wbGVtZW50YXRpb24gbmVlZHMgZG9pbmcgKGllLCB3aXRoIGV4dGVybmFsCi0gKiBoYXJkd2FyZSksIHlvdSBtdXN0IGFsc28gZGVmaW5lCi0gKgotICogTkNSNTM4MF9xdWV1ZV9jb21tYW5kCi0gKiBOQ1I1MzgwX3Jlc2V0Ci0gKiBOQ1I1MzgwX2Fib3J0Ci0gKiBOQ1I1MzgwX3Byb2NfaW5mbwotICoKLSAqIHRvIGJlIHRoZSBnbG9iYWwgZW50cnkgcG9pbnRzIGludG8gdGhlIHNwZWNpZmljIGRyaXZlciwgaWUKLSAqICNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kIHQxMjhfcXVldWVfY29tbWFuZC4KLSAqCi0gKiBJZiB0aGlzIGlzIG5vdCBkb25lLCB0aGUgcm91dGluZXMgd2lsbCBiZSBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMKLSAqIHdpdGggdGhlIE5DUjUzODAqIG5hbWVzIGFuZCB0aGUgdXNlciBtdXN0IHByb3ZpZGUgYSBnbG9iYWxseQotICogYWNjZXNzaWJsZSB3cmFwcGVyIGZ1bmN0aW9uLgotICoKICAqIFRoZSBnZW5lcmljIGRyaXZlciBpcyBpbml0aWFsaXplZCBieSBjYWxsaW5nIE5DUjUzODBfaW5pdChpbnN0YW5jZSksCiAgKiBhZnRlciBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBob3N0IHNwZWNpZmljIGZpZWxkcyBhbmQgSUQuICBJZiB0aGUKICAqIGRyaXZlciB3aXNoZXMgdG8gYXV0b3Byb2JlIGZvciBhbiBJUlEgbGluZSwgdGhlIE5DUjUzODBfcHJvYmVfaXJxKGluc3RhbmNlLAotICogcG9zc2libGUpIGZ1bmN0aW9uIG1heSBiZSB1c2VkLiAgQmVmb3JlIHRoZSBzcGVjaWZpYyBkcml2ZXIgaW5pdGlhbGl6YXRpb24KLSAqIGNvZGUgZmluaXNoZXMsIE5DUjUzODBfcHJpbnRfb3B0aW9ucyBzaG91bGQgYmUgY2FsbGVkLgorICogcG9zc2libGUpIGZ1bmN0aW9uIG1heSBiZSB1c2VkLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpmaXJzdF9pbnN0YW5jZSA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdGhlX3RlbXBsYXRlID0gTlVMTDsKLQogLyogTWFjcm9zIGVhc2UgbGlmZS4uLiA6LSkgKi8KICNkZWZpbmUJU0VUVVBfSE9TVERBVEEoaW4pCQkJCVwKICAgICBzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQkJCVwKIAkoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikoaW4pLT5ob3N0ZGF0YQogI2RlZmluZQlIT1NUREFUQShpbikgKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKShpbiktPmhvc3RkYXRhKQogCi0jZGVmaW5lCU5FWFQoY21kKQkJKChTY3NpX0NtbmQgKikoY21kKS0+aG9zdF9zY3JpYmJsZSkKKyNkZWZpbmUJTkVYVChjbWQpCQkoKHN0cnVjdCBzY3NpX2NtbmQgKikoY21kKS0+aG9zdF9zY3JpYmJsZSkKICNkZWZpbmUJU0VUX05FWFQoY21kLG5leHQpCSgoY21kKS0+aG9zdF9zY3JpYmJsZSA9ICh2b2lkICopKG5leHQpKQotI2RlZmluZQlORVhUQUREUihjbWQpCQkoKFNjc2lfQ21uZCAqKikmKGNtZCktPmhvc3Rfc2NyaWJibGUpCisjZGVmaW5lCU5FWFRBRERSKGNtZCkJCSgoc3RydWN0IHNjc2lfY21uZCAqKikmKGNtZCktPmhvc3Rfc2NyaWJibGUpCiAKICNkZWZpbmUJSE9TVE5PCQlpbnN0YW5jZS0+aG9zdF9ubwogI2RlZmluZQlIX05PKGNtZCkJKGNtZCktPmRldmljZS0+aG9zdC0+aG9zdF9ubwpAQCAtMzE2LDMwICsyNzEsMTcgQEAKICAqIGltcG9ydGFudDogdGhlIHRhZyBiaXQgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSAnbnJfYWxsb2NhdGVkJyBpcyBkZWNyZWFzZWQuCiAgKi8KIAotLyogLTEgZm9yIFRBR19OT05FIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHVuc2lnbmVkIGNoYXIgY21kLT50YWcgKi8KLSN1bmRlZiBUQUdfTk9ORQotI2RlZmluZSBUQUdfTk9ORSAweGZmCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlERUNMQVJFX0JJVE1BUChhbGxvY2F0ZWQsIE1BWF9UQUdTKTsKLQlpbnQgbnJfYWxsb2NhdGVkOwotCWludCBxdWV1ZV9zaXplOwotfSBUQUdfQUxMT0M7Ci0KLXN0YXRpYyBUQUdfQUxMT0MgVGFnQWxsb2NbOF1bOF07CS8qIDggdGFyZ2V0cyBhbmQgOCBMVU5zICovCi0KLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGFncyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGFncyhzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEpCiB7CiAJaW50IHRhcmdldCwgbHVuOwotCVRBR19BTExPQyAqdGE7CisJc3RydWN0IHRhZ19hbGxvYyAqdGE7CiAKLQlpZiAoIXNldHVwX3VzZV90YWdnZWRfcXVldWluZykKKwlpZiAoIShob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX1RBR0dFRF9RVUVVSU5HKSkKIAkJcmV0dXJuOwogCiAJZm9yICh0YXJnZXQgPSAwOyB0YXJnZXQgPCA4OyArK3RhcmdldCkgewogCQlmb3IgKGx1biA9IDA7IGx1biA8IDg7ICsrbHVuKSB7Ci0JCQl0YSA9ICZUYWdBbGxvY1t0YXJnZXRdW2x1bl07CisJCQl0YSA9ICZob3N0ZGF0YS0+VGFnQWxsb2NbdGFyZ2V0XVtsdW5dOwogCQkJYml0bWFwX3plcm8odGEtPmFsbG9jYXRlZCwgTUFYX1RBR1MpOwogCQkJdGEtPm5yX2FsbG9jYXRlZCA9IDA7CiAJCQkvKiBBdCB0aGUgYmVnaW5uaW5nLCBhc3N1bWUgdGhlIG1heGltdW0gcXVldWUgc2l6ZSB3ZSBjb3VsZApAQCAtMzU5LDcgKzMwMSw3IEBACiAgKiBjb25kaXRpb25zLgogICovCiAKLXN0YXRpYyBpbnQgaXNfbHVuX2J1c3koU2NzaV9DbW5kICpjbWQsIGludCBzaG91bGRfYmVfdGFnZ2VkKQorc3RhdGljIGludCBpc19sdW5fYnVzeShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCBzaG91bGRfYmVfdGFnZ2VkKQogewogCXU4IGx1biA9IGNtZC0+ZGV2aWNlLT5sdW47CiAJU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwpAQCAtMzY3LDEwICszMDksMTEgQEAKIAlpZiAoaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmICgxIDw8IGx1bikpCiAJCXJldHVybiAxOwogCWlmICghc2hvdWxkX2JlX3RhZ2dlZCB8fAotCSAgICAhc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nIHx8ICFjbWQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkKKwkgICAgIShob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX1RBR0dFRF9RVUVVSU5HKSB8fAorCSAgICAhY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpCiAJCXJldHVybiAwOwotCWlmIChUYWdBbGxvY1tjbWQtPmRldmljZS0+aWRdW2x1bl0ubnJfYWxsb2NhdGVkID49Ci0JICAgIFRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXS5xdWV1ZV9zaXplKSB7CisJaWYgKGhvc3RkYXRhLT5UYWdBbGxvY1tzY21kX2lkKGNtZCldW2x1bl0ubnJfYWxsb2NhdGVkID49CisJICAgIGhvc3RkYXRhLT5UYWdBbGxvY1tzY21kX2lkKGNtZCldW2x1bl0ucXVldWVfc2l6ZSkgewogCQlkcHJpbnRrKE5ERUJVR19UQUdTLCAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVkOiBubyBmcmVlIHRhZ3NcbiIsCiAJCQkgICBIX05PKGNtZCksIGNtZC0+ZGV2aWNlLT5pZCwgbHVuKTsKIAkJcmV0dXJuIDE7CkBAIC0zODQsNyArMzI3LDcgQEAKICAqIHVudGFnZ2VkLgogICovCiAKLXN0YXRpYyB2b2lkIGNtZF9nZXRfdGFnKFNjc2lfQ21uZCAqY21kLCBpbnQgc2hvdWxkX2JlX3RhZ2dlZCkKK3N0YXRpYyB2b2lkIGNtZF9nZXRfdGFnKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50IHNob3VsZF9iZV90YWdnZWQpCiB7CiAJdTggbHVuID0gY21kLT5kZXZpY2UtPmx1bjsKIAlTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7CkBAIC0zOTMsMTMgKzMzNiwxNCBAQAogCSAqIGFuIHVudGFnZ2VkIGNvbW1hbmQuCiAJICovCiAJaWYgKCFzaG91bGRfYmVfdGFnZ2VkIHx8Ci0JICAgICFzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgfHwgIWNtZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7CisJICAgICEoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19UQUdHRURfUVVFVUlORykgfHwKKwkgICAgIWNtZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7CiAJCWNtZC0+dGFnID0gVEFHX05PTkU7CiAJCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gfD0gKDEgPDwgbHVuKTsKIAkJZHByaW50ayhOREVCVUdfVEFHUywgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlZCBub3cgYWxsb2NhdGVkIGJ5IHVudGFnZ2VkICIKIAkJCSAgICJjb21tYW5kXG4iLCBIX05PKGNtZCksIGNtZC0+ZGV2aWNlLT5pZCwgbHVuKTsKIAl9IGVsc2UgewotCQlUQUdfQUxMT0MgKnRhID0gJlRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXTsKKwkJc3RydWN0IHRhZ19hbGxvYyAqdGEgPSAmaG9zdGRhdGEtPlRhZ0FsbG9jW3NjbWRfaWQoY21kKV1bbHVuXTsKIAogCQljbWQtPnRhZyA9IGZpbmRfZmlyc3RfemVyb19iaXQodGEtPmFsbG9jYXRlZCwgTUFYX1RBR1MpOwogCQlzZXRfYml0KGNtZC0+dGFnLCB0YS0+YWxsb2NhdGVkKTsKQEAgLTQxNiw3ICszNjAsNyBAQAogICogdW5sb2NrIHRoZSBMVU4uCiAgKi8KIAotc3RhdGljIHZvaWQgY21kX2ZyZWVfdGFnKFNjc2lfQ21uZCAqY21kKQorc3RhdGljIHZvaWQgY21kX2ZyZWVfdGFnKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAl1OCBsdW4gPSBjbWQtPmRldmljZS0+bHVuOwogCVNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKQEAgLTQyOSw3ICszNzMsNyBAQAogCQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogdHJ5aW5nIHRvIGZyZWUgYmFkIHRhZyAlZCFcbiIsCiAJCSAgICAgICBIX05PKGNtZCksIGNtZC0+dGFnKTsKIAl9IGVsc2UgewotCQlUQUdfQUxMT0MgKnRhID0gJlRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXTsKKwkJc3RydWN0IHRhZ19hbGxvYyAqdGEgPSAmaG9zdGRhdGEtPlRhZ0FsbG9jW3NjbWRfaWQoY21kKV1bbHVuXTsKIAkJY2xlYXJfYml0KGNtZC0+dGFnLCB0YS0+YWxsb2NhdGVkKTsKIAkJdGEtPm5yX2FsbG9jYXRlZC0tOwogCQlkcHJpbnRrKE5ERUJVR19UQUdTLCAic2NzaSVkOiBmcmVlZCB0YWcgJWQgZm9yIHRhcmdldCAlZCBsdW4gJWRcbiIsCkBAIC00MzgsMTcgKzM4MiwxNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGZyZWVfYWxsX3RhZ3Modm9pZCkKK3N0YXRpYyB2b2lkIGZyZWVfYWxsX3RhZ3Moc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhKQogewogCWludCB0YXJnZXQsIGx1bjsKLQlUQUdfQUxMT0MgKnRhOworCXN0cnVjdCB0YWdfYWxsb2MgKnRhOwogCi0JaWYgKCFzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcpCisJaWYgKCEoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19UQUdHRURfUVVFVUlORykpCiAJCXJldHVybjsKIAogCWZvciAodGFyZ2V0ID0gMDsgdGFyZ2V0IDwgODsgKyt0YXJnZXQpIHsKIAkJZm9yIChsdW4gPSAwOyBsdW4gPCA4OyArK2x1bikgewotCQkJdGEgPSAmVGFnQWxsb2NbdGFyZ2V0XVtsdW5dOworCQkJdGEgPSAmaG9zdGRhdGEtPlRhZ0FsbG9jW3RhcmdldF1bbHVuXTsKIAkJCWJpdG1hcF96ZXJvKHRhLT5hbGxvY2F0ZWQsIE1BWF9UQUdTKTsKIAkJCXRhLT5ucl9hbGxvY2F0ZWQgPSAwOwogCQl9CkBAIC00NTksMTkgKzQwMywyMCBAQAogCiAKIC8qCi0gKiBGdW5jdGlvbjogdm9pZCBtZXJnZV9jb250aWd1b3VzX2J1ZmZlcnMoIFNjc2lfQ21uZCAqY21kICkKKyAqIEZ1bmN0aW9uOiB2b2lkIG1lcmdlX2NvbnRpZ3VvdXNfYnVmZmVycyggc3RydWN0IHNjc2lfY21uZCAqY21kICkKICAqCiAgKiBQdXJwb3NlOiBUcnkgdG8gbWVyZ2Ugc2V2ZXJhbCBzY2F0dGVyLWdhdGhlciByZXF1ZXN0cyBpbnRvIG9uZSBETUEKICAqICAgIHRyYW5zZmVyLiBUaGlzIGlzIHBvc3NpYmxlIGlmIHRoZSBzY2F0dGVyIGJ1ZmZlcnMgbGllIG9uCiAgKiAgICBwaHlzaWNhbCBjb250aWd1b3VzIGFkZHJlc3Nlcy4KICAqCi0gKiBQYXJhbWV0ZXJzOiBTY3NpX0NtbmQgKmNtZAorICogUGFyYW1ldGVyczogc3RydWN0IHNjc2lfY21uZCAqY21kCiAgKiAgICBUaGUgY29tbWFuZCB0byB3b3JrIG9uLiBUaGUgZmlyc3Qgc2NhdHRlciBidWZmZXIncyBkYXRhIGFyZQogICogICAgYXNzdW1lZCB0byBiZSBhbHJlYWR5IHRyYW5zZmVycmVkIGludG8gcHRyL3RoaXNfcmVzaWR1YWwuCiAgKi8KIAotc3RhdGljIHZvaWQgbWVyZ2VfY29udGlndW91c19idWZmZXJzKFNjc2lfQ21uZCAqY21kKQorc3RhdGljIHZvaWQgbWVyZ2VfY29udGlndW91c19idWZmZXJzKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKKyNpZiAhZGVmaW5lZChDT05GSUdfU1VOMykKIAl1bnNpZ25lZCBsb25nIGVuZGFkZHI7CiAjaWYgKE5ERUJVRyAmIE5ERUJVR19NRVJHSU5HKQogCXVuc2lnbmVkIGxvbmcgb2xkbGVuID0gY21kLT5TQ3AudGhpc19yZXNpZHVhbDsKQEAgLTQ5NiwxOCArNDQxLDE3IEBACiAJCWRwcmludGsoTkRFQlVHX01FUkdJTkcsICJtZXJnZWQgJWQgYnVmZmVycyBmcm9tICVwLCBuZXcgbGVuZ3RoICUwOHhcbiIsCiAJCQkgICBjbnQsIGNtZC0+U0NwLnB0ciwgY21kLT5TQ3AudGhpc19yZXNpZHVhbCk7CiAjZW5kaWYKKyNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfU1VOMykgKi8KIH0KIAotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBpbml0aWFsaXplX1NDcChTY3NpX0NtbmQgKmNtZCkKKy8qKgorICogaW5pdGlhbGl6ZV9TQ3AgLSBpbml0IHRoZSBzY3NpIHBvaW50ZXIgZmllbGQKKyAqIEBjbWQ6IGNvbW1hbmQgYmxvY2sgdG8gc2V0IHVwCiAgKgotICogUHVycG9zZSA6IGluaXRpYWxpemUgdGhlIHNhdmVkIGRhdGEgcG9pbnRlcnMgZm9yIGNtZCB0byBwb2ludCB0byB0aGUKLSAqCXN0YXJ0IG9mIHRoZSBidWZmZXIuCi0gKgotICogSW5wdXRzIDogY21kIC0gU2NzaV9DbW5kIHN0cnVjdHVyZSB0byBoYXZlIHBvaW50ZXJzIHJlc2V0LgorICogU2V0IHVwIHRoZSBpbnRlcm5hbCBmaWVsZHMgaW4gdGhlIFNDU0kgY29tbWFuZC4KICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZV9TQ3AoU2NzaV9DbW5kICpjbWQpCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZV9TQ3Aoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgU2NzaSBQb2ludGVyIGZpZWxkIHNvIHRoYXQgYWxsIG9mIHRoZSBjb21tYW5kcyBpbiB0aGUKQEAgLTU1NywxMiArNTAxLDExIEBACiAJezAsIE5VTEx9CiB9OwogCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfcHJpbnQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCisvKioKKyAqIE5DUjUzODBfcHJpbnQgLSBwcmludCBzY3NpIGJ1cyBzaWduYWxzCisgKiBAaW5zdGFuY2U6IGFkYXB0ZXIgc3RhdGUgdG8gZHVtcAogICoKLSAqIFB1cnBvc2UgOiBwcmludCB0aGUgU0NTSSBidXMgc2lnbmFscyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCi0gKgotICogSW5wdXQgOiBpbnN0YW5jZSAtIHdoaWNoIE5DUjUzODAKKyAqIFByaW50IHRoZSBTQ1NJIGJ1cyBzaWduYWxzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKICAqLwogCiBzdGF0aWMgdm9pZCBOQ1I1MzgwX3ByaW50KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQpAQCAtNjA1LDEyICs1NDgsMTMgQEAKIAl7UEhBU0VfVU5LTk9XTiwgIlVOS05PV04ifQogfTsKIAotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX3ByaW50X3BoYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorLyoqCisgKiBOQ1I1MzgwX3ByaW50X3BoYXNlIC0gc2hvdyBTQ1NJIHBoYXNlCisgKiBAaW5zdGFuY2U6IGFkYXB0ZXIgdG8gZHVtcAogICoKLSAqIFB1cnBvc2UgOiBwcmludCB0aGUgY3VycmVudCBTQ1NJIHBoYXNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyAqIFByaW50IHRoZSBjdXJyZW50IFNDU0kgcGhhc2UgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcwogICoKLSAqIElucHV0IDogaW5zdGFuY2UgLSB3aGljaCBOQ1I1MzgwCisgKiBMb2Nrczogbm9uZQogICovCiAKIHN0YXRpYyB2b2lkIE5DUjUzODBfcHJpbnRfcGhhc2Uoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCkBAIC02NDgsNzEgKzU5Miw3NSBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCi1zdGF0aWMgdm9sYXRpbGUgaW50IG1haW5fcnVubmluZzsKLXN0YXRpYyBERUNMQVJFX1dPUksoTkNSNTM4MF90cXVldWUsIE5DUjUzODBfbWFpbik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9tYWluKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfbWFpbihzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEpCiB7Ci0JaWYgKCFtYWluX3J1bm5pbmcpIHsKKwlpZiAoIWhvc3RkYXRhLT5tYWluX3J1bm5pbmcpIHsKIAkJLyogSWYgaW4gaW50ZXJydXB0IGFuZCBOQ1I1MzgwX21haW4oKSBub3QgYWxyZWFkeSBydW5uaW5nLAogCQkgICBxdWV1ZSBpdCBvbiB0aGUgJ2ltbWVkaWF0ZScgdGFzayBxdWV1ZSwgdG8gYmUgcHJvY2Vzc2VkCiAJCSAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjdXJyZW50IGludGVycnVwdCBwcm9jZXNzaW5nIGhhcwogCQkgICBmaW5pc2hlZC4gKi8KLQkJc2NoZWR1bGVfd29yaygmTkNSNTM4MF90cXVldWUpOworCQlzY2hlZHVsZV93b3JrKCZob3N0ZGF0YS0+bWFpbl90YXNrKTsKIAl9CiAJLyogZWxzZTogbm90aGluZyB0byBkbzogdGhlIHJ1bm5pbmcgTkNSNTM4MF9tYWluKCkgd2lsbCBwaWNrIHVwCiAJICAgYW55IG5ld2x5IHF1ZXVlZCBjb21tYW5kLiAqLwogfQogCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBOQ1I1MzgwX2FsbF9pbml0KHZvaWQpCi17Ci0Jc3RhdGljIGludCBkb25lID0gMDsKLQlpZiAoIWRvbmUpIHsKLQkJZHByaW50ayhOREVCVUdfSU5JVCwgInNjc2kgOiBOQ1I1MzgwX2FsbF9pbml0KClcbiIpOwotCQlkb25lID0gMTsKLQl9Ci19Ci0KLQotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1ODM4MF9wcmludF9vcHRpb25zIChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKKy8qKgorICogTkNSNTgzODBfaW5mbyAtIHJlcG9ydCBkcml2ZXIgYW5kIGhvc3QgaW5mb3JtYXRpb24KKyAqIEBpbnN0YW5jZTogcmVsZXZhbnQgc2NzaSBob3N0IGluc3RhbmNlCiAgKgotICogUHVycG9zZSA6IGNhbGxlZCBieSBwcm9iZSBjb2RlIGluZGljYXRpbmcgdGhlIE5DUjUzODAgZHJpdmVyCi0gKgkgICAgIG9wdGlvbnMgdGhhdCB3ZXJlIHNlbGVjdGVkLgorICogRm9yIHVzZSBhcyB0aGUgaG9zdCB0ZW1wbGF0ZSBpbmZvKCkgaGFuZGxlci4KICAqCi0gKiBJbnB1dHMgOiBpbnN0YW5jZSwgcG9pbnRlciB0byB0aGlzIGluc3RhbmNlLiAgVW51c2VkLgorICogTG9ja3M6IG5vbmUKICAqLwogCi1zdGF0aWMgdm9pZCBfX2luaXQgTkNSNTM4MF9wcmludF9vcHRpb25zKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorc3RhdGljIGNvbnN0IGNoYXIgKk5DUjUzODBfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKLQlwcmludGsoIiBnZW5lcmljIG9wdGlvbnMiCi0jaWZkZWYgQVVUT1NFTlNFCi0JICAgICAgICIgQVVUT1NFTlNFIgorCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOworCisJcmV0dXJuIGhvc3RkYXRhLT5pbmZvOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCit7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwlzbnByaW50Zihob3N0ZGF0YS0+aW5mbywgc2l6ZW9mKGhvc3RkYXRhLT5pbmZvKSwKKwkgICAgICAgICAiJXMsIGlvX3BvcnQgMHglbHgsIG5faW9fcG9ydCAlZCwgIgorCSAgICAgICAgICJiYXNlIDB4JWx4LCBpcnEgJWQsICIKKwkgICAgICAgICAiY2FuX3F1ZXVlICVkLCBjbWRfcGVyX2x1biAlZCwgIgorCSAgICAgICAgICJzZ190YWJsZXNpemUgJWQsIHRoaXNfaWQgJWQsICIKKwkgICAgICAgICAiZmxhZ3MgeyAlc30sICIKKwkgICAgICAgICAib3B0aW9ucyB7ICVzfSAiLAorCSAgICAgICAgIGluc3RhbmNlLT5ob3N0dC0+bmFtZSwgaW5zdGFuY2UtPmlvX3BvcnQsIGluc3RhbmNlLT5uX2lvX3BvcnQsCisJICAgICAgICAgaW5zdGFuY2UtPmJhc2UsIGluc3RhbmNlLT5pcnEsCisJICAgICAgICAgaW5zdGFuY2UtPmNhbl9xdWV1ZSwgaW5zdGFuY2UtPmNtZF9wZXJfbHVuLAorCSAgICAgICAgIGluc3RhbmNlLT5zZ190YWJsZXNpemUsIGluc3RhbmNlLT50aGlzX2lkLAorCSAgICAgICAgIGhvc3RkYXRhLT5mbGFncyAmIEZMQUdfVEFHR0VEX1FVRVVJTkcgPyAiVEFHR0VEX1FVRVVJTkcgIiA6ICIiLAorI2lmZGVmIERJRkZFUkVOVElBTAorCSAgICAgICAgICJESUZGRVJFTlRJQUwgIgogI2VuZGlmCiAjaWZkZWYgUkVBTF9ETUEKLQkgICAgICAgIiBSRUFMIERNQSIKKwkgICAgICAgICAiUkVBTF9ETUEgIgogI2VuZGlmCiAjaWZkZWYgUEFSSVRZCi0JICAgICAgICIgUEFSSVRZIgorCSAgICAgICAgICJQQVJJVFkgIgogI2VuZGlmCiAjaWZkZWYgU1VQUE9SVF9UQUdTCi0JICAgICAgICIgU0NTSS0yIFRBR0dFRCBRVUVVSU5HIgorCSAgICAgICAgICJTVVBQT1JUX1RBR1MgIgogI2VuZGlmCi0JICAgICAgICk7Ci0JcHJpbnRrKCIgZ2VuZXJpYyByZWxlYXNlPSVkIiwgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7CisJICAgICAgICAgIiIpOwogfQogCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfcHJpbnRfc3RhdHVzIChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKKy8qKgorICogTkNSNTM4MF9wcmludF9zdGF0dXMgLSBkdW1wIGNvbnRyb2xsZXIgaW5mbworICogQGluc3RhbmNlOiBjb250cm9sbGVyIHRvIGR1bXAKICAqCi0gKiBQdXJwb3NlIDogcHJpbnQgY29tbWFuZHMgaW4gdGhlIHZhcmlvdXMgcXVldWVzLCBjYWxsZWQgZnJvbQotICoJTkNSNTM4MF9hYm9ydCBhbmQgTkNSNTM4MF9kZWJ1ZyB0byBhaWQgZGVidWdnaW5nLgotICoKLSAqIElucHV0cyA6IGluc3RhbmNlLCBwb2ludGVyIHRvIHRoaXMgaW5zdGFuY2UuCisgKiBQcmludCBjb21tYW5kcyBpbiB0aGUgdmFyaW91cyBxdWV1ZXMsIGNhbGxlZCBmcm9tIE5DUjUzODBfYWJvcnQKKyAqIHRvIGFpZCBkZWJ1Z2dpbmcuCiAgKi8KIAotc3RhdGljIHZvaWQgbHByaW50X1Njc2lfQ21uZChTY3NpX0NtbmQgKmNtZCkKK3N0YXRpYyB2b2lkIGxwcmludF9TY3NpX0NtbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCWludCBpLCBzOwogCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQ7CkBAIC03MjksNyArNjc3LDcgQEAKIHN0YXRpYyB2b2lkIE5DUjUzODBfcHJpbnRfc3RhdHVzKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQogewogCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQlTY3NpX0NtbmQgKnB0cjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpwdHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCU5DUjUzODBfZHByaW50KE5ERUJVR19BTlksIGluc3RhbmNlKTsKQEAgLTczNywyMCArNjg1LDE5IEBACiAKIAlob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YTsKIAotCXByaW50aygiXG5OQ1I1MzgwIGNvcmUgcmVsZWFzZT0lZC5cbiIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlwcmludGsoIk5DUjUzODA6IGNvcm91dGluZSBpcyVzIHJ1bm5pbmcuXG4iLAotCQltYWluX3J1bm5pbmcgPyAiIiA6ICJuJ3QiKTsKKwkJaG9zdGRhdGEtPm1haW5fcnVubmluZyA/ICIiIDogIm4ndCIpOwogCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkKIAkJcHJpbnRrKCJzY3NpJWQ6IG5vIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZFxuIiwgSE9TVE5PKTsKIAllbHNlCi0JCWxwcmludF9TY3NpX0NtbmQoKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkKTsKKwkJbHByaW50X1Njc2lfQ21uZCgoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkKTsKIAlwcmludGsoInNjc2klZDogaXNzdWVfcXVldWVcbiIsIEhPU1ROTyk7Ci0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IE5FWFQocHRyKSkKKwlmb3IgKHB0ciA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOyBwdHI7IHB0ciA9IE5FWFQocHRyKSkKIAkJbHByaW50X1Njc2lfQ21uZChwdHIpOwogCiAJcHJpbnRrKCJzY3NpJWQ6IGRpc2Nvbm5lY3RlZF9xdWV1ZVxuIiwgSE9TVE5PKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOworCWZvciAocHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOwogCSAgICAgcHRyID0gTkVYVChwdHIpKQogCQlscHJpbnRfU2NzaV9DbW5kKHB0cik7CiAKQEAgLTc1OCw3ICs3MDUsNyBAQAogCXByaW50aygiXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19TY3NpX0NtbmQoU2NzaV9DbW5kICpjbWQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKK3N0YXRpYyB2b2lkIHNob3dfU2NzaV9DbW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgc3RydWN0IHNlcV9maWxlICptKQogewogCWludCBpLCBzOwogCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQ7CkBAIC03NzIsMjggKzcxOSwyOCBAQAogCXNlcV9wcmludGYobSwgIlxuIik7CiB9CiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9zaG93X2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgTkNSNTM4MF9zaG93X2luZm8oc3RydWN0IHNlcV9maWxlICptLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JU2NzaV9DbW5kICpwdHI7CisJc3RydWN0IHNjc2lfY21uZCAqcHRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YTsKIAotCXNlcV9wcmludGYobSwgIk5DUjUzODAgY29yZSByZWxlYXNlPSVkLlxuIiwgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXNlcV9wcmludGYobSwgIk5DUjUzODA6IGNvcm91dGluZSBpcyVzIHJ1bm5pbmcuXG4iLAotCQltYWluX3J1bm5pbmcgPyAiIiA6ICJuJ3QiKTsKKwkJaG9zdGRhdGEtPm1haW5fcnVubmluZyA/ICIiIDogIm4ndCIpOwogCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkKIAkJc2VxX3ByaW50ZihtLCAic2NzaSVkOiBubyBjdXJyZW50bHkgY29ubmVjdGVkIGNvbW1hbmRcbiIsIEhPU1ROTyk7CiAJZWxzZQotCQlzaG93X1Njc2lfQ21uZCgoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQsIG0pOworCQlzaG93X1Njc2lfQ21uZCgoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkLCBtKTsKIAlzZXFfcHJpbnRmKG0sICJzY3NpJWQ6IGlzc3VlX3F1ZXVlXG4iLCBIT1NUTk8pOwotCWZvciAocHRyID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSBORVhUKHB0cikpCisJZm9yIChwdHIgPSAoc3RydWN0IHNjc2lfY21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSBORVhUKHB0cikpCiAJCXNob3dfU2NzaV9DbW5kKHB0ciwgbSk7CiAKIAlzZXFfcHJpbnRmKG0sICJzY3NpJWQ6IGRpc2Nvbm5lY3RlZF9xdWV1ZVxuIiwgSE9TVE5PKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOworCWZvciAocHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOwogCSAgICAgcHRyID0gTkVYVChwdHIpKQogCQlzaG93X1Njc2lfQ21uZChwdHIsIG0pOwogCkBAIC04MDEsMTYgKzc0OCwxOCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfaW5pdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCisvKioKKyAqIE5DUjUzODBfaW5pdCAtIGluaXRpYWxpc2UgYW4gTkNSNTM4MAorICogQGluc3RhbmNlOiBhZGFwdGVyIHRvIGNvbmZpZ3VyZQorICogQGZsYWdzOiBjb250cm9sIGZsYWdzCiAgKgotICogUHVycG9zZSA6IGluaXRpYWxpemVzICppbnN0YW5jZSBhbmQgY29ycmVzcG9uZGluZyA1MzgwIGNoaXAuCi0gKgotICogSW5wdXRzIDogaW5zdGFuY2UgLSBpbnN0YW50aWF0aW9uIG9mIHRoZSA1MzgwIGRyaXZlci4KKyAqIEluaXRpYWxpemVzICppbnN0YW5jZSBhbmQgY29ycmVzcG9uZGluZyA1MzgwIGNoaXAsCisgKiB3aXRoIGZsYWdzIE9SJ2QgaW50byB0aGUgaW5pdGlhbCBmbGFncyB2YWx1ZS4KICAqCiAgKiBOb3RlcyA6IEkgYXNzdW1lIHRoYXQgdGhlIGhvc3QsIGhvc3RubywgYW5kIGlkIGJpdHMgaGF2ZSBiZWVuCi0gKglzZXQgY29ycmVjdGx5LiAgSSBkb24ndCBjYXJlIGFib3V0IHRoZSBpcnEgYW5kIG90aGVyIGZpZWxkcy4KKyAqIHNldCBjb3JyZWN0bHkuIEkgZG9uJ3QgY2FyZSBhYm91dCB0aGUgaXJxIGFuZCBvdGhlciBmaWVsZHMuCiAgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzCiAgKi8KIAogc3RhdGljIGludCBfX2luaXQgTkNSNTM4MF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgZmxhZ3MpCkBAIC04MTgsOCArNzY3LDcgQEAKIAlpbnQgaTsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CiAKLQlOQ1I1MzgwX2FsbF9pbml0KCk7Ci0KKwlob3N0ZGF0YS0+aG9zdCA9IGluc3RhbmNlOwogCWhvc3RkYXRhLT5hYm9ydGVkID0gMDsKIAlob3N0ZGF0YS0+aWRfbWFzayA9IDEgPDwgaW5zdGFuY2UtPnRoaXNfaWQ7CiAJaG9zdGRhdGEtPmlkX2hpZ2hlcl9tYXNrID0gMDsKQEAgLTgyOSw3ICs3NzcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCiAJCWhvc3RkYXRhLT5idXN5W2ldID0gMDsKICNpZmRlZiBTVVBQT1JUX1RBR1MKLQlpbml0X3RhZ3MoKTsKKwlpbml0X3RhZ3MoaG9zdGRhdGEpOwogI2VuZGlmCiAjaWYgZGVmaW5lZCAoUkVBTF9ETUEpCiAJaG9zdGRhdGEtPmRtYV9sZW4gPSAwOwpAQCAtODM4LDE5ICs3ODYsMTEgQEAKIAlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKIAlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBOVUxMOwogCWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBOVUxMOwotCWhvc3RkYXRhLT5mbGFncyA9IEZMQUdfQ0hFQ0tfTEFTVF9CWVRFX1NFTlQ7CisJaG9zdGRhdGEtPmZsYWdzID0gZmxhZ3M7CiAKLQlpZiAoIXRoZV90ZW1wbGF0ZSkgewotCQl0aGVfdGVtcGxhdGUgPSBpbnN0YW5jZS0+aG9zdHQ7Ci0JCWZpcnN0X2luc3RhbmNlID0gaW5zdGFuY2U7Ci0JfQorCUlOSVRfV09SSygmaG9zdGRhdGEtPm1haW5fdGFzaywgTkNSNTM4MF9tYWluKTsKIAotI2lmbmRlZiBBVVRPU0VOU0UKLQlpZiAoKGluc3RhbmNlLT5jbWRfcGVyX2x1biA+IDEpIHx8IChpbnN0YW5jZS0+Y2FuX3F1ZXVlID4gMSkpCi0JCXByaW50aygic2NzaSVkOiBXQVJOSU5HIDogc3VwcG9ydCBmb3IgbXVsdGlwbGUgb3V0c3RhbmRpbmcgY29tbWFuZHMgZW5hYmxlZFxuIgotCQkgICAgICAgIiAgICAgICAgd2l0aG91dCBBVVRPU0VOU0Ugb3B0aW9uLCBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9ucyBtYXlcbiIKLQkJICAgICAgICIgICAgICAgIGJlIGluY29ycmVjdGx5IGNsZWFyZWQuXG4iLCBIT1NUTk8pOwotI2VuZGlmIC8qIGRlZiBBVVRPU0VOU0UgKi8KKwlwcmVwYXJlX2luZm8oaW5zdGFuY2UpOwogCiAJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKIAlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsKQEAgLTg2MCwzMyArODAwLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIE5DUjUzODBfZXhpdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLXsKLQkvKiBFbXB0eSwgYXMgd2UgZGlkbid0IHNjaGVkdWxlIGFueSBkZWxheWVkIHdvcmsgKi8KLX0KLQotLyoKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfcXVldWVfY29tbWFuZCAoU2NzaV9DbW5kICpjbWQsCi0gKgl2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKQorLyoqCisgKiBOQ1I1MzgwX2V4aXQgLSByZW1vdmUgYW4gTkNSNTM4MAorICogQGluc3RhbmNlOiBhZGFwdGVyIHRvIHJlbW92ZQogICoKLSAqIFB1cnBvc2UgOiAgZW5xdWV1ZXMgYSBTQ1NJIGNvbW1hbmQKLSAqCi0gKiBJbnB1dHMgOiBjbWQgLSBTQ1NJIGNvbW1hbmQsIGRvbmUgLSBmdW5jdGlvbiBjYWxsZWQgb24gY29tcGxldGlvbiwgd2l0aAotICoJYSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IuCi0gKgotICogUmV0dXJucyA6IDAKLSAqCi0gKiBTaWRlIGVmZmVjdHMgOgotICogICAgICBjbWQgaXMgYWRkZWQgdG8gdGhlIHBlciBpbnN0YW5jZSBpc3N1ZV9xdWV1ZSwgd2l0aCBtaW5vcgotICoJdHdpZGRsaW5nIGRvbmUgdG8gdGhlIGhvc3Qgc3BlY2lmaWMgZmllbGRzIG9mIGNtZC4gIElmIHRoZQotICoJbWFpbiBjb3JvdXRpbmUgaXMgbm90IHJ1bm5pbmcsIGl0IGlzIHJlc3RhcnRlZC4KLSAqCisgKiBBc3N1bWVzIHRoYXQgbm8gbW9yZSB3b3JrIGNhbiBiZSBxdWV1ZWQgKGUuZy4gYnkgTkNSNTM4MF9pbnRyKS4KICAqLwogCi1zdGF0aWMgaW50IE5DUjUzODBfcXVldWVfY29tbWFuZF9sY2soU2NzaV9DbW5kICpjbWQsIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpCitzdGF0aWMgdm9pZCBOQ1I1MzgwX2V4aXQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7Ci0JU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwotCVNjc2lfQ21uZCAqdG1wOworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOworCisJY2FuY2VsX3dvcmtfc3luYygmaG9zdGRhdGEtPm1haW5fdGFzayk7Cit9CisKKy8qKgorICogTkNSNTM4MF9xdWV1ZV9jb21tYW5kIC0gcXVldWUgYSBjb21tYW5kCisgKiBAaW5zdGFuY2U6IHRoZSByZWxldmFudCBTQ1NJIGFkYXB0ZXIKKyAqIEBjbWQ6IFNDU0kgY29tbWFuZAorICoKKyAqIGNtZCBpcyBhZGRlZCB0byB0aGUgcGVyIGluc3RhbmNlIGlzc3VlX3F1ZXVlLCB3aXRoIG1pbm9yCisgKiB0d2lkZGxpbmcgZG9uZSB0byB0aGUgaG9zdCBzcGVjaWZpYyBmaWVsZHMgb2YgY21kLiAgSWYgdGhlCisgKiBtYWluIGNvcm91dGluZSBpcyBub3QgcnVubmluZywgaXQgaXMgcmVzdGFydGVkLgorICovCisKK3N0YXRpYyBpbnQgTkNSNTM4MF9xdWV1ZV9jb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAjaWYgKE5ERUJVRyAmIE5ERUJVR19OT19XUklURSkKQEAgLTg5Niw0NyArODM4LDE3IEBACiAJCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBXUklURSBhdHRlbXB0ZWQgd2l0aCBOT19XUklURSBkZWJ1Z2dpbmcgZmxhZyBzZXRcbiIsCiAJCSAgICAgICBIX05PKGNtZCkpOwogCQljbWQtPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOwotCQlkb25lKGNtZCk7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCXJldHVybiAwOwogCX0KICNlbmRpZiAvKiAoTkRFQlVHICYgTkRFQlVHX05PX1dSSVRFKSAqLwogCi0jaWZkZWYgTkNSNTM4MF9TVEFUUwotIyBpZiAwCi0JaWYgKCFob3N0ZGF0YS0+Y29ubmVjdGVkICYmICFob3N0ZGF0YS0+aXNzdWVfcXVldWUgJiYKLQkgICAgIWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUpIHsKLQkJaG9zdGRhdGEtPnRpbWViYXNlID0gamlmZmllczsKLQl9Ci0jIGVuZGlmCi0jIGlmZGVmIE5DUjUzODBfU1RBVF9MSU1JVAotCWlmIChzY3NpX2J1ZmZsZW4oY21kKSA+IE5DUjUzODBfU1RBVF9MSU1JVCkKLSMgZW5kaWYKLQkJc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKLQkJY2FzZSBXUklURToKLQkJY2FzZSBXUklURV82OgotCQljYXNlIFdSSVRFXzEwOgotCQkJaG9zdGRhdGEtPnRpbWVfd3JpdGVbY21kLT5kZXZpY2UtPmlkXSAtPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCQlob3N0ZGF0YS0+Ynl0ZXNfd3JpdGVbY21kLT5kZXZpY2UtPmlkXSArPSBzY3NpX2J1ZmZsZW4oY21kKTsKLQkJCWhvc3RkYXRhLT5wZW5kaW5ndysrOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVBRDoKLQkJY2FzZSBSRUFEXzY6Ci0JCWNhc2UgUkVBRF8xMDoKLQkJCWhvc3RkYXRhLT50aW1lX3JlYWRbY21kLT5kZXZpY2UtPmlkXSAtPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCQlob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOwotCQkJaG9zdGRhdGEtPnBlbmRpbmdyKys7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCi0KIAkvKgogCSAqIFdlIHVzZSB0aGUgaG9zdF9zY3JpYmJsZSBmaWVsZCBhcyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgY29tbWFuZAogCSAqIGluIGEgcXVldWUKIAkgKi8KIAogCVNFVF9ORVhUKGNtZCwgTlVMTCk7Ci0JY21kLT5zY3NpX2RvbmUgPSBkb25lOwotCiAJY21kLT5yZXN1bHQgPSAwOwogCiAJLyoKQEAgLTk0Niw3ICs4NTgsNiBAQAogCSAqIHNlbnNlIGRhdGEgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIHdoaWxlIHRoZSBjb25kaXRpb24gZXhpc3RzLgogCSAqLwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCS8qICsrZ3VlbnRoZXI6IG5vdyB0aGF0IHRoZSBpc3N1ZSBxdWV1ZSBpcyBiZWluZyBzZXQgdXAsIHdlIGNhbiBsb2NrIFNULURNQS4KIAkgKiBPdGhlcndpc2UgYSBydW5uaW5nIE5DUjUzODBfbWFpbiBtYXkgc3RlYWwgdGhlIGxvY2suCiAJICogTG9jayBiZWZvcmUgYWN0dWFsbHkgaW5zZXJ0aW5nIGR1ZSB0byBmYWlybmVzcyByZWFzb25zIGV4cGxhaW5lZCBpbgpAQCAtOTU5LDE3ICs4NzAsMjQgQEAKIAkgKiBiZWNhdXNlIGFsc28gYSB0aW1lciBpbnQgY2FuIHRyaWdnZXIgYW4gYWJvcnQgb3IgcmVzZXQsIHdoaWNoIHdvdWxkCiAJICogYWx0ZXIgcXVldWVzIGFuZCB0b3VjaCB0aGUgbG9jay4KIAkgKi8KLQlpZiAoIUlTX0FfVFQoKSkgewotCQkvKiBwZXJoYXBzIHN0b3AgY29tbWFuZCB0aW1lciBoZXJlICovCi0JCWZhbGNvbl9nZXRfbG9jaygpOwotCQkvKiBwZXJoYXBzIHJlc3RhcnQgY29tbWFuZCB0aW1lciBoZXJlICovCi0JfQorCWlmICghTkNSNTM4MF9hY3F1aXJlX2RtYV9pcnEoaW5zdGFuY2UpKQorCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qCisJICogSW5zZXJ0IHRoZSBjbWQgaW50byB0aGUgaXNzdWUgcXVldWUuIE5vdGUgdGhhdCBSRVFVRVNUIFNFTlNFCisJICogY29tbWFuZHMgYXJlIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSBzaW5jZSBhbnkgY29tbWFuZCB3aWxsCisJICogY2xlYXIgdGhlIGNvbnRpbmdlbnQgYWxsZWdpYW5jZSBjb25kaXRpb24gdGhhdCBleGlzdHMgYW5kIHRoZQorCSAqIHNlbnNlIGRhdGEgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIHdoaWxlIHRoZSBjb25kaXRpb24gZXhpc3RzLgorCSAqLworCiAJaWYgKCEoaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKSB8fCAoY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpKSB7CiAJCUxJU1QoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwogCQlTRVRfTkVYVChjbWQsIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSk7CiAJCWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IGNtZDsKIAl9IGVsc2UgewotCQlmb3IgKHRtcCA9IChTY3NpX0NtbmQgKilob3N0ZGF0YS0+aXNzdWVfcXVldWU7CisJCWZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKilob3N0ZGF0YS0+aXNzdWVfcXVldWU7CiAJCSAgICAgTkVYVCh0bXApOyB0bXAgPSBORVhUKHRtcCkpCiAJCQk7CiAJCUxJU1QoY21kLCB0bXApOwpAQCAtOTg3LDMyICs5MDUsNDIgQEAKIAkgKiBJZiB3ZSdyZSBub3QgaW4gYW4gaW50ZXJydXB0LCB3ZSBjYW4gY2FsbCBOQ1I1MzgwX21haW4oKQogCSAqIHVuY29uZGl0aW9uYWxseSwgYmVjYXVzZSBpdCBjYW5ub3QgYmUgYWxyZWFkeSBydW5uaW5nLgogCSAqLwotCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCAoKGZsYWdzID4+IDgpICYgNykgPj0gNikKLQkJcXVldWVfbWFpbigpOworCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCBpcnFzX2Rpc2FibGVkKCkpCisJCXF1ZXVlX21haW4oaG9zdGRhdGEpOwogCWVsc2UKLQkJTkNSNTM4MF9tYWluKE5VTEwpOworCQlOQ1I1MzgwX21haW4oJmhvc3RkYXRhLT5tYWluX3Rhc2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgREVGX1NDU0lfUUNNRChOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQpCitzdGF0aWMgaW5saW5lIHZvaWQgbWF5YmVfcmVsZWFzZV9kbWFfaXJxKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQoreworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOwogCi0vKgotICogRnVuY3Rpb24gOiBOQ1I1MzgwX21haW4gKHZvaWQpCisJLyogQ2FsbGVyIGRvZXMgdGhlIGxvY2tpbmcgbmVlZGVkIHRvIHNldCAmIHRlc3QgdGhlc2UgZGF0YSBhdG9taWNhbGx5ICovCisJaWYgKCFob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlICYmCisJICAgICFob3N0ZGF0YS0+aXNzdWVfcXVldWUgJiYKKwkgICAgIWhvc3RkYXRhLT5jb25uZWN0ZWQgJiYKKwkgICAgIWhvc3RkYXRhLT5yZXRhaW5fZG1hX2ludHIpCisJCU5DUjUzODBfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKK30KKworLyoqCisgKiBOQ1I1MzgwX21haW4gLSBOQ1Igc3RhdGUgbWFjaGluZXMKICAqCi0gKiBQdXJwb3NlIDogTkNSNTM4MF9tYWluIGlzIGEgY29yb3V0aW5lIHRoYXQgcnVucyBhcyBsb25nIGFzIG1vcmUgd29yayBjYW4KLSAqCWJlIGRvbmUgb24gdGhlIE5DUjUzODAgaG9zdCBhZGFwdGVycyBpbiBhIHN5c3RlbS4gIEJvdGgKLSAqCU5DUjUzODBfcXVldWVfY29tbWFuZCgpIGFuZCBOQ1I1MzgwX2ludHIoKSB3aWxsIHRyeSB0byBzdGFydCBpdAotICoJaW4gY2FzZSBpdCBpcyBub3QgcnVubmluZy4KKyAqIE5DUjUzODBfbWFpbiBpcyBhIGNvcm91dGluZSB0aGF0IHJ1bnMgYXMgbG9uZyBhcyBtb3JlIHdvcmsgY2FuCisgKiBiZSBkb25lIG9uIHRoZSBOQ1I1MzgwIGhvc3QgYWRhcHRlcnMgaW4gYSBzeXN0ZW0uICBCb3RoCisgKiBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQoKSBhbmQgTkNSNTM4MF9pbnRyKCkgd2lsbCB0cnkgdG8gc3RhcnQgaXQKKyAqIGluIGNhc2UgaXQgaXMgbm90IHJ1bm5pbmcuCiAgKgotICogTk9URSA6IE5DUjUzODBfbWFpbiBleGl0cyB3aXRoIGludGVycnVwdHMgKmRpc2FibGVkKiwgdGhlIGNhbGxlciBzaG91bGQKLSAqICByZWVuYWJsZSB0aGVtLiAgVGhpcyBwcmV2ZW50cyByZWVudHJhbmN5IGFuZCBrZXJuZWwgc3RhY2sgb3ZlcmZsb3cuCisgKiBMb2NrczogY2FsbGVkIGFzIGl0cyBvd24gdGhyZWFkIHdpdGggbm8gbG9ja3MgaGVsZC4KICAqLwogCiBzdGF0aWMgdm9pZCBOQ1I1MzgwX21haW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCVNjc2lfQ21uZCAqdG1wLCAqcHJldjsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGZpcnN0X2luc3RhbmNlOwotCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IEhPU1REQVRBKGluc3RhbmNlKTsKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IE5DUjUzODBfaG9zdGRhdGEsIG1haW5fdGFzayk7CisJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBob3N0ZGF0YS0+aG9zdDsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICp0bXAsICpwcmV2OwogCWludCBkb25lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTEwMzcsOSArOTY1LDkgQEAKIAkgICAnbWFpbl9ydW5uaW5nJyBpcyBzZXQgaGVyZSwgYW5kIHF1ZXVlcy9leGVjdXRlcyBtYWluIHZpYSB0aGUKIAkgICB0YXNrIHF1ZXVlLCBpdCBkb2Vzbid0IGRvIGFueSBoYXJtLCBqdXN0IHRoaXMgaW5zdGFuY2Ugb2YgbWFpbgogCSAgIHdvbid0IGZpbmQgYW55IHdvcmsgbGVmdCB0byBkby4gKi8KLQlpZiAobWFpbl9ydW5uaW5nKQorCWlmIChob3N0ZGF0YS0+bWFpbl9ydW5uaW5nKQogCQlyZXR1cm47Ci0JbWFpbl9ydW5uaW5nID0gMTsKKwlob3N0ZGF0YS0+bWFpbl9ydW5uaW5nID0gMTsKIAogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCWRvIHsKQEAgLTEwNTMsNyArOTgxLDcgQEAKIAkJCSAqIGZvciBhIHRhcmdldCB0aGF0J3Mgbm90IGJ1c3kuCiAJCQkgKi8KICNpZiAoTkRFQlVHICYgTkRFQlVHX0xJU1RTKQotCQkJZm9yICh0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwgcHJldiA9IE5VTEw7CisJCQlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwgcHJldiA9IE5VTEw7CiAJCQkgICAgIHRtcCAmJiAodG1wICE9IHByZXYpOyBwcmV2ID0gdG1wLCB0bXAgPSBORVhUKHRtcCkpCiAJCQkJOwogCQkJLypwcmludGsoIiVwICAiLCB0bXApOyovCkBAIC0xMDYxLDE2ICs5ODksMTQgQEAKIAkJCQlwcmludGsoIiBMT09QXG4iKTsKIAkJCS8qIGVsc2UgcHJpbnRrKCJcbiIpOyAqLwogI2VuZGlmCi0JCQlmb3IgKHRtcCA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLAorCQkJZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWUsCiAJCQkgICAgIHByZXYgPSBOVUxMOyB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IE5FWFQodG1wKSkgewogCQkJCXU4IGx1biA9IHRtcC0+ZGV2aWNlLT5sdW47CiAKLSNpZiAoTkRFQlVHICYgTkRFQlVHX0xJU1RTKQotCQkJCWlmIChwcmV2ICE9IHRtcCkKLQkJCQkJcHJpbnRrKCJNQUlOIHRtcD0lcCAgIHRhcmdldD0lZCAgIGJ1c3k9JWQgbHVuPSVsbHVcbiIsCi0JCQkJCSAgICAgICB0bXAsIHRtcC0+ZGV2aWNlLT5pZCwgaG9zdGRhdGEtPmJ1c3lbdG1wLT5kZXZpY2UtPmlkXSwKLQkJCQkJICAgICAgIGx1bik7Ci0jZW5kaWYKKwkJCQlkcHJpbnRrKE5ERUJVR19MSVNUUywKKwkJCQkgICAgICAgICJNQUlOIHRtcD0lcCB0YXJnZXQ9JWQgYnVzeT0lZCBsdW49JWRcbiIsCisJCQkJICAgICAgICB0bXAsIHNjbWRfaWQodG1wKSwgaG9zdGRhdGEtPmJ1c3lbc2NtZF9pZCh0bXApXSwKKwkJCQkgICAgICAgIGx1bik7CiAJCQkJLyogIFdoZW4gd2UgZmluZCBvbmUsIHJlbW92ZSBpdCBmcm9tIHRoZSBpc3N1ZSBxdWV1ZS4gKi8KIAkJCQkvKiArK2d1ZW50aGVyOiBwb3NzaWJsZSByYWNlIHdpdGggRmFsY29uIGxvY2tpbmcgKi8KIAkJCQlpZiAoCkBAIC0xMDkwLDcgKzEwMTYsNyBAQAogCQkJCQkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gTkVYVCh0bXApOwogCQkJCQl9CiAJCQkJCVNFVF9ORVhUKHRtcCwgTlVMTCk7Ci0JCQkJCWZhbGNvbl9kb250X3JlbGVhc2UrKzsKKwkJCQkJaG9zdGRhdGEtPnJldGFpbl9kbWFfaW50cisrOwogCiAJCQkJCS8qIHJlZW5hYmxlIGludGVycnVwdHMgYWZ0ZXIgZmluZGluZyBvbmUgKi8KIAkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMTExNywxMiArMTA0MywxMiBAQAogI2lmZGVmIFNVUFBPUlRfVEFHUwogCQkJCQljbWRfZ2V0X3RhZyh0bXAsIHRtcC0+Y21uZFswXSAhPSBSRVFVRVNUX1NFTlNFKTsKICNlbmRpZgotCQkJCQlpZiAoIU5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCB0bXAsCi0JCQkJCSAgICAodG1wLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpID8gVEFHX05PTkUgOgotCQkJCQkgICAgVEFHX05FWFQpKSB7Ci0JCQkJCQlmYWxjb25fZG9udF9yZWxlYXNlLS07CisJCQkJCWlmICghTkNSNTM4MF9zZWxlY3QoaW5zdGFuY2UsIHRtcCkpIHsKKwkJCQkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCQkJCQlob3N0ZGF0YS0+cmV0YWluX2RtYV9pbnRyLS07CiAJCQkJCQkvKiByZWxlYXNlIGlmIHRhcmdldCBkaWQgbm90IHJlc3BvbnNlISAqLwotCQkJCQkJZmFsY29uX3JlbGVhc2VfbG9ja19pZl9wb3NzaWJsZShob3N0ZGF0YSk7CisJCQkJCQltYXliZV9yZWxlYXNlX2RtYV9pcnEoaW5zdGFuY2UpOworCQkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwpAQCAtMTEzMiw3ICsxMDU4LDcgQEAKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJCQkJCWNtZF9mcmVlX3RhZyh0bXApOwogI2VuZGlmCi0JCQkJCQlmYWxjb25fZG9udF9yZWxlYXNlLS07CisJCQkJCQlob3N0ZGF0YS0+cmV0YWluX2RtYV9pbnRyLS07CiAJCQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCQkJCQlkcHJpbnRrKE5ERUJVR19NQUlOLCAic2NzaSVkOiBtYWluKCk6IHNlbGVjdCgpIGZhaWxlZCwgIgogCQkJCQkJCSAgICAicmV0dXJuZWQgdG8gaXNzdWVfcXVldWVcbiIsIEhPU1ROTyk7CkBAIC0xMTYwLDcgKzEwODYsNyBAQAogCS8qIEJldHRlciBhbGxvdyBpbnRzIF9hZnRlcl8gJ21haW5fcnVubmluZycgaGFzIGJlZW4gY2xlYXJlZCwgZWxzZQogCSAgIGFuIGludGVycnVwdCBjb3VsZCBiZWxpZXZlIHdlJ2xsIHBpY2sgdXAgdGhlIHdvcmsgaXQgbGVmdCBmb3IKIAkgICB1cywgYnV0IHdlIHdvbid0IHNlZSBpdCBhbnltb3JlIGhlcmUuLi4gKi8KLQltYWluX3J1bm5pbmcgPSAwOworCWhvc3RkYXRhLT5tYWluX3J1bm5pbmcgPSAwOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMTE3OSw5ICsxMTA1LDExIEBACiBzdGF0aWMgdm9pZCBOQ1I1MzgwX2RtYV9jb21wbGV0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7Ci0JaW50IHRyYW5zZmVyZWQsIHNhdmVkX2RhdGEgPSAwLCBvdmVycnVuID0gMCwgY250LCB0b1BJTzsKLQl1bnNpZ25lZCBjaGFyICoqZGF0YSwgcDsKKwlpbnQgdHJhbnNmZXJyZWQ7CisJdW5zaWduZWQgY2hhciAqKmRhdGE7CiAJdm9sYXRpbGUgaW50ICpjb3VudDsKKwlpbnQgc2F2ZWRfZGF0YSA9IDAsIG92ZXJydW4gPSAwOworCXVuc2lnbmVkIGNoYXIgcDsKIAogCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IHJlY2VpdmVkIGVuZCBvZiBETUEgaW50ZXJydXB0IHdpdGggIgpAQCAtMTE4OSw3ICsxMTE3LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChhdGFyaV9yZWFkX292ZXJydW5zKSB7CisJaWYgKGhvc3RkYXRhLT5yZWFkX292ZXJydW5zKSB7CiAJCXAgPSBob3N0ZGF0YS0+Y29ubmVjdGVkLT5TQ3AucGhhc2U7CiAJCWlmIChwICYgU1JfSU8pIHsKIAkJCXVkZWxheSgxMCk7CkBAIC0xMjA3LDIxICsxMTM1LDQxIEBACiAJCSAgIEhPU1ROTywgTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRyksCiAJCSAgIE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TVU4zKQorCWlmICgoc3VuM3Njc2lfZG1hX2ZpbmlzaChycV9kYXRhX2Rpcihob3N0ZGF0YS0+Y29ubmVjdGVkLT5yZXF1ZXN0KSkpKSB7CisJCXByX2Vycigic2NzaSVkOiBvdmVycnVuIGluIFVEQyBjb3VudGVyIC0tIG5vdCBwcmVwYXJlZCB0byBkZWFsIHdpdGggdGhpcyFcbiIsCisJCSAgICAgICBpbnN0YW5jZS0+aG9zdF9ubyk7CisJCUJVRygpOworCX0KKworCS8qIG1ha2Ugc3VyZSB3ZSdyZSBub3Qgc3R1Y2sgaW4gYSBkYXRhIHBoYXNlICovCisJaWYgKChOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIChCQVNSX1BIQVNFX01BVENIIHwgQkFTUl9BQ0spKSA9PQorCSAgICAoQkFTUl9QSEFTRV9NQVRDSCB8IEJBU1JfQUNLKSkgeworCQlwcl9lcnIoInNjc2klZDogQkFTUiAlMDJ4XG4iLCBpbnN0YW5jZS0+aG9zdF9ubywKKwkJICAgICAgIE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpKTsKKwkJcHJfZXJyKCJzY3NpJWQ6IGJ1cyBzdHVjayBpbiBkYXRhIHBoYXNlIC0tIHByb2JhYmx5IGEgc2luZ2xlIGJ5dGUgb3ZlcnJ1biFcbiIsCisJCSAgICAgICBpbnN0YW5jZS0+aG9zdF9ubyk7CisJCUJVRygpOworCX0KKyNlbmRpZgorCiAJKHZvaWQpTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKIAlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsKIAlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwogCi0JdHJhbnNmZXJlZCA9IGhvc3RkYXRhLT5kbWFfbGVuIC0gTkNSNTM4MF9kbWFfcmVzaWR1YWwoaW5zdGFuY2UpOworCXRyYW5zZmVycmVkID0gaG9zdGRhdGEtPmRtYV9sZW4gLSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSk7CiAJaG9zdGRhdGEtPmRtYV9sZW4gPSAwOwogCiAJZGF0YSA9ICh1bnNpZ25lZCBjaGFyICoqKSZob3N0ZGF0YS0+Y29ubmVjdGVkLT5TQ3AucHRyOwogCWNvdW50ID0gJmhvc3RkYXRhLT5jb25uZWN0ZWQtPlNDcC50aGlzX3Jlc2lkdWFsOwotCSpkYXRhICs9IHRyYW5zZmVyZWQ7Ci0JKmNvdW50IC09IHRyYW5zZmVyZWQ7CisJKmRhdGEgKz0gdHJhbnNmZXJyZWQ7CisJKmNvdW50IC09IHRyYW5zZmVycmVkOwogCi0JaWYgKGF0YXJpX3JlYWRfb3ZlcnJ1bnMpIHsKKwlpZiAoaG9zdGRhdGEtPnJlYWRfb3ZlcnJ1bnMpIHsKKwkJaW50IGNudCwgdG9QSU87CisKIAkJaWYgKChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBQSEFTRV9NQVNLKSA9PSBwICYmIChwICYgU1JfSU8pKSB7Ci0JCQljbnQgPSB0b1BJTyA9IGF0YXJpX3JlYWRfb3ZlcnJ1bnM7CisJCQljbnQgPSB0b1BJTyA9IGhvc3RkYXRhLT5yZWFkX292ZXJydW5zOwogCQkJaWYgKG92ZXJydW4pIHsKIAkJCQlkcHJpbnRrKE5ERUJVR19ETUEsICJHb3QgYW4gaW5wdXQgb3ZlcnJ1biwgdXNpbmcgc2F2ZWQgYnl0ZVxuIik7CiAJCQkJKigqZGF0YSkrKyA9IHNhdmVkX2RhdGE7CkBAIC0xMjM4LDIwICsxMTg2LDE5IEBACiAjZW5kaWYgLyogUkVBTF9ETUEgKi8KIAogCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfaW50ciAoaW50IGlycSkKKy8qKgorICogTkNSNTM4MF9pbnRyIC0gZ2VuZXJpYyBOQ1I1MzgwIGlycSBoYW5kbGVyCisgKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCisgKiBAZGV2X2lkOiBkZXZpY2UgaW5mbwogICoKLSAqIFB1cnBvc2UgOiBoYW5kbGUgaW50ZXJydXB0cywgcmVlc3RhYmxpc2hpbmcgSV9UX0wgb3IgSV9UX0xfUSBuZXh1c2VzCi0gKglmcm9tIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUsIGFuZCByZXN0YXJ0aW5nIE5DUjUzODBfbWFpbigpCi0gKglhcyByZXF1aXJlZC4KLSAqCi0gKiBJbnB1dHMgOiBpbnQgaXJxLCBpcnEgdGhhdCBjYXVzZWQgdGhpcyBpbnRlcnJ1cHQuCi0gKgorICogSGFuZGxlIGludGVycnVwdHMsIHJlZXN0YWJsaXNoaW5nIElfVF9MIG9yIElfVF9MX1EgbmV4dXNlcworICogZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlLCBhbmQgcmVzdGFydGluZyBOQ1I1MzgwX21haW4oKQorICogYXMgcmVxdWlyZWQuCiAgKi8KIAogc3RhdGljIGlycXJldHVybl90IE5DUjUzODBfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBmaXJzdF9pbnN0YW5jZTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGRldl9pZDsKIAlpbnQgZG9uZSA9IDEsIGhhbmRsZWQgPSAwOwogCXVuc2lnbmVkIGNoYXIgYmFzcjsKIApAQCAtMTI2NSw3ICsxMjEyLDYgQEAKIAkJTkNSNTM4MF9kcHJpbnQoTkRFQlVHX0lOVFIsIGluc3RhbmNlKTsKIAkJaWYgKChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiAoU1JfU0VMfFNSX0lPKSkgPT0gKFNSX1NFTHxTUl9JTykpIHsKIAkJCWRvbmUgPSAwOwotCQkJRU5BQkxFX0lSUSgpOwogCQkJZHByaW50ayhOREVCVUdfSU5UUiwgInNjc2klZDogU0VMIGludGVycnVwdFxuIiwgSE9TVE5PKTsKIAkJCU5DUjUzODBfcmVzZWxlY3QoaW5zdGFuY2UpOwogCQkJKHZvaWQpTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKQEAgLTEyOTUsMTcgKzEyNDEsMTkgQEAKIAkJCQlkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBQSEFTRSBNSVNNIG9yIEVPUCBpbnRlcnJ1cHRcbiIsIEhPU1ROTyk7CiAJCQkJTkNSNTM4MF9kbWFfY29tcGxldGUoIGluc3RhbmNlICk7CiAJCQkJZG9uZSA9IDA7Ci0JCQkJRU5BQkxFX0lSUSgpOwogCQkJfSBlbHNlCiAjZW5kaWYgLyogUkVBTF9ETUEgKi8KIAkJCXsKIC8qIE1TOiBJZ25vcmUgdW5rbm93biBwaGFzZSBtaXNtYXRjaCBpbnRlcnJ1cHRzIChjYXVzZWQgYnkgRU9QIGludGVycnVwdCkgKi8KIAkJCQlpZiAoYmFzciAmIEJBU1JfUEhBU0VfTUFUQ0gpCi0JCQkJCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiB1bmtub3duIGludGVycnVwdCwgIgorCQkJCQlkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiB1bmtub3duIGludGVycnVwdCwgIgogCQkJCQkgICAgICAgIkJBU1IgMHgleCwgTVIgMHgleCwgU1IgMHgleFxuIiwKIAkJCQkJICAgICAgIEhPU1ROTywgYmFzciwgTkNSNTM4MF9yZWFkKE1PREVfUkVHKSwKIAkJCQkJICAgICAgIE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSk7CiAJCQkJKHZvaWQpTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJCQkJZHJlZ3MtPmNzciB8PSBDU1JfRE1BX0VOQUJMRTsKKyNlbmRpZgogCQkJfQogCQl9IC8qIGlmICEoU0VMRUNUSU9OIHx8IFBBUklUWSkgKi8KIAkJaGFuZGxlZCA9IDE7CkBAIC0xMzE0LDUzICsxMjYyLDI5IEBACiAJCSAgICAgICAiQkFTUiAweCVYLCBNUiAweCVYLCBTUiAweCV4XG4iLCBIT1NUTk8sIGJhc3IsCiAJCSAgICAgICBOQ1I1MzgwX3JlYWQoTU9ERV9SRUcpLCBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpOwogCQkodm9pZClOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOworI2lmZGVmIFNVTjNfU0NTSV9WTUUKKwkJZHJlZ3MtPmNzciB8PSBDU1JfRE1BX0VOQUJMRTsKKyNlbmRpZgogCX0KIAogCWlmICghZG9uZSkgewogCQlkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBpbiBpbnQgcm91dGluZSwgY2FsbGluZyBtYWluXG4iLCBIT1NUTk8pOwogCQkvKiBQdXQgYSBjYWxsIHRvIE5DUjUzODBfbWFpbigpIG9uIHRoZSBxdWV1ZS4uLiAqLwotCQlxdWV1ZV9tYWluKCk7CisJCXF1ZXVlX21haW4oc2hvc3RfcHJpdihpbnN0YW5jZSkpOwogCX0KIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAotI2lmZGVmIE5DUjUzODBfU1RBVFMKLXN0YXRpYyB2b2lkIGNvbGxlY3Rfc3RhdHMoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEqIGhvc3RkYXRhLCBTY3NpX0NtbmQgKmNtZCkKLXsKLSMgaWZkZWYgTkNSNTM4MF9TVEFUX0xJTUlUCi0JaWYgKHNjc2lfYnVmZmxlbihjbWQpID4gTkNSNTM4MF9TVEFUX0xJTUlUKQotIyBlbmRpZgotCQlzd2l0Y2ggKGNtZC0+Y21uZFswXSkgewotCQljYXNlIFdSSVRFOgotCQljYXNlIFdSSVRFXzY6Ci0JCWNhc2UgV1JJVEVfMTA6Ci0JCQlob3N0ZGF0YS0+dGltZV93cml0ZVtjbWQtPmRldmljZS0+aWRdICs9IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJCS8qaG9zdGRhdGEtPmJ5dGVzX3dyaXRlW2NtZC0+ZGV2aWNlLT5pZF0gKz0gc2NzaV9idWZmbGVuKGNtZCk7Ki8KLQkJCWhvc3RkYXRhLT5wZW5kaW5ndy0tOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVBRDoKLQkJY2FzZSBSRUFEXzY6Ci0JCWNhc2UgUkVBRF8xMDoKLQkJCWhvc3RkYXRhLT50aW1lX3JlYWRbY21kLT5kZXZpY2UtPmlkXSArPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCQkvKmhvc3RkYXRhLT5ieXRlc19yZWFkW2NtZC0+ZGV2aWNlLT5pZF0gKz0gc2NzaV9idWZmbGVuKGNtZCk7Ki8KLQkJCWhvc3RkYXRhLT5wZW5kaW5nci0tOwotCQkJYnJlYWs7Ci0JCX0KLX0KLSNlbmRpZgotCiAvKgotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9zZWxlY3QgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBTY3NpX0NtbmQgKmNtZCwKLSAqCWludCB0YWcpOworICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9zZWxlY3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiAgKgogICogUHVycG9zZSA6IGVzdGFibGlzaGVzIElfVF9MIG9yIElfVF9MX1EgbmV4dXMgZm9yIG5ldyBvciBleGlzdGluZyBjb21tYW5kLAogICoJaW5jbHVkaW5nIEFSQklUUkFUSU9OLCBTRUxFQ1RJT04sIGFuZCBpbml0aWFsIG1lc3NhZ2Ugb3V0IGZvcgogICoJSURFTlRJRlkgYW5kIHF1ZXVlIG1lc3NhZ2VzLgogICoKICAqIElucHV0cyA6IGluc3RhbmNlIC0gaW5zdGFudGlhdGlvbiBvZiB0aGUgNTM4MCBkcml2ZXIgb24gd2hpY2ggdGhpcwotICoJdGFyZ2V0IGxpdmVzLCBjbWQgLSBTQ1NJIGNvbW1hbmQgdG8gZXhlY3V0ZSwgdGFnIC0gc2V0IHRvIFRBR19ORVhUIGZvcgotICoJbmV3IHRhZywgVEFHX05PTkUgZm9yIHVudGFnZ2VkIHF1ZXVlaW5nLCBvdGhlcndpc2Ugc2V0IHRvIHRoZSB0YWcgZm9yCi0gKgl0aGUgY29tbWFuZCB0aGF0IGlzIHByZXNlbnRseSBjb25uZWN0ZWQuCisgKgl0YXJnZXQgbGl2ZXMsIGNtZCAtIFNDU0kgY29tbWFuZCB0byBleGVjdXRlLgogICoKICAqIFJldHVybnMgOiAtMSBpZiBzZWxlY3Rpb24gY291bGQgbm90IGV4ZWN1dGUgZm9yIHNvbWUgcmVhc29uLAogICoJMCBpZiBzZWxlY3Rpb24gc3VjY2VlZGVkIG9yIGZhaWxlZCBiZWNhdXNlIHRoZSB0YXJnZXQKQEAgLTEzODAsNyArMTMwNCw3IEBACiAgKgkJY21kLT5yZXN1bHQgaG9zdCBieXRlIHNldCB0byBESURfQkFEX1RBUkdFVC4KICAqLwogCi1zdGF0aWMgaW50IE5DUjUzODBfc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBTY3NpX0NtbmQgKmNtZCwgaW50IHRhZykKK3N0YXRpYyBpbnQgTkNSNTM4MF9zZWxlY3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CiAJdW5zaWduZWQgY2hhciB0bXBbM10sIHBoYXNlOwpAQCAtMTU2Miw3ICsxNDg2LDcgQEAKIAkgKiBzZWxlY3Rpb24uCiAJICovCiAKLQl0aW1lb3V0ID0gamlmZmllcyArIDI1OworCXRpbWVvdXQgPSBqaWZmaWVzICsgKDI1MCAqIEhaIC8gMTAwMCk7CiAKIAkvKgogCSAqIFhYWCB2ZXJ5IGludGVyZXN0aW5nIC0gd2UncmUgc2VlaW5nIGEgYm91bmNlIHdoZXJlIHRoZSBCU1kgd2UKQEAgLTE2MTYsOSArMTU0MCw2IEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJY21kLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7Ci0jZW5kaWYKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJY21kX2ZyZWVfdGFnKGNtZCk7CiAjZW5kaWYKQEAgLTE2NzYsNiArMTU5Nyw5IEBACiAjaWZuZGVmIFNVUFBPUlRfVEFHUwogCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gfD0gKDEgPDwgY21kLT5kZXZpY2UtPmx1bik7CiAjZW5kaWYKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJZHJlZ3MtPmNzciB8PSBDU1JfSU5UUjsKKyNlbmRpZgogCiAJaW5pdGlhbGl6ZV9TQ3AoY21kKTsKIApAQCAtMTgyNiw3ICsxNzUwLDcgQEAKICAqIFJldHVybnMgOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCiAgKi8KIAotc3RhdGljIGludCBkb19hYm9ydChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQorc3RhdGljIGludCBkb19hYm9ydChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAl1bnNpZ25lZCBjaGFyIHRtcCwgKm1zZ3B0ciwgcGhhc2U7CiAJaW50IGxlbjsKQEAgLTE4NjEsNyArMTc4NSw3IEBACiAJbXNncHRyID0gJnRtcDsKIAlsZW4gPSAxOwogCXBoYXNlID0gUEhBU0VfTVNHT1VUOwotCU5DUjUzODBfdHJhbnNmZXJfcGlvKGhvc3QsICZwaGFzZSwgJmxlbiwgJm1zZ3B0cik7CisJTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgJm1zZ3B0cik7CiAKIAkvKgogCSAqIElmIHdlIGdvdCBoZXJlLCBhbmQgdGhlIGNvbW1hbmQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwKQEAgLTE4OTksMTcgKzE4MjMsNjIgQEAKIAlTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7CiAJcmVnaXN0ZXIgaW50IGMgPSAqY291bnQ7CiAJcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBwID0gKnBoYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TVU4zKQorCS8qIHNhbml0eSBjaGVjayAqLworCWlmICghc3VuM19kbWFfc2V0dXBfZG9uZSkgeworCQlwcl9lcnIoInNjc2klZDogdHJhbnNmZXJfZG1hIHdpdGhvdXQgc2V0dXAhXG4iLAorCQkgICAgICAgaW5zdGFuY2UtPmhvc3Rfbm8pOworCQlCVUcoKTsKKwl9CisJaG9zdGRhdGEtPmRtYV9sZW4gPSBjOworCisJZHByaW50ayhOREVCVUdfRE1BLCAic2NzaSVkOiBpbml0aWFsaXppbmcgRE1BIGZvciAlcywgJWQgYnl0ZXMgJXMgJXBcbiIsCisJCWluc3RhbmNlLT5ob3N0X25vLCAocCAmIFNSX0lPKSA/ICJyZWFkaW5nIiA6ICJ3cml0aW5nIiwKKwkJYywgKHAgJiBTUl9JTykgPyAidG8iIDogImZyb20iLCAqZGF0YSk7CisKKwkvKiBuZXRic2QgdHVybnMgb2ZmIGludHMgaGVyZSwgd2h5IG5vdCBiZSBzYWZlIGFuZCBkbyBpdCB0b28gKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBzZW5kIHN0YXJ0IGNoYWluICovCisJc3VuM3Njc2lfZG1hX3N0YXJ0KGMsICpkYXRhKTsKKworCWlmIChwICYgU1JfSU8pIHsKKwkJTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDEpOworCQlOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOworCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgMCk7CisJCU5DUjUzODBfd3JpdGUoTU9ERV9SRUcsCisJCQkgICAgICAoTkNSNTM4MF9yZWFkKE1PREVfUkVHKSB8IE1SX0RNQV9NT0RFIHwgTVJfRU5BQkxFX0VPUF9JTlRSKSk7CisJCU5DUjUzODBfd3JpdGUoU1RBUlRfRE1BX0lOSVRJQVRPUl9SRUNFSVZFX1JFRywgMCk7CisJfSBlbHNlIHsKKwkJTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDApOworCQlOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOworCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0FTU0VSVF9EQVRBKTsKKwkJTkNSNTM4MF93cml0ZShNT0RFX1JFRywKKwkJCSAgICAgIChOQ1I1MzgwX3JlYWQoTU9ERV9SRUcpIHwgTVJfRE1BX01PREUgfCBNUl9FTkFCTEVfRU9QX0lOVFIpKTsKKwkJTkNSNTM4MF93cml0ZShTVEFSVF9ETUFfU0VORF9SRUcsIDApOworCX0KKworI2lmZGVmIFNVTjNfU0NTSV9WTUUKKwlkcmVncy0+Y3NyIHw9IENTUl9ETUFfRU5BQkxFOworI2VuZGlmCisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlzdW4zX2RtYV9hY3RpdmUgPSAxOworCisjZWxzZSAvKiAhZGVmaW5lZChDT05GSUdfU1VOMykgKi8KIAlyZWdpc3RlciB1bnNpZ25lZCBjaGFyICpkID0gKmRhdGE7CiAJdW5zaWduZWQgY2hhciB0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICgodG1wID0gKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFBIQVNFX01BU0spKSAhPSBwKSB7CiAJCSpwaGFzZSA9IHRtcDsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChhdGFyaV9yZWFkX292ZXJydW5zICYmIChwICYgU1JfSU8pKQotCQljIC09IGF0YXJpX3JlYWRfb3ZlcnJ1bnM7CisJaWYgKGhvc3RkYXRhLT5yZWFkX292ZXJydW5zICYmIChwICYgU1JfSU8pKQorCQljIC09IGhvc3RkYXRhLT5yZWFkX292ZXJydW5zOwogCiAJZHByaW50ayhOREVCVUdfRE1BLCAic2NzaSVkOiBpbml0aWFsaXppbmcgRE1BIGZvciAlcywgJWQgYnl0ZXMgJXMgJXBcbiIsCiAJCSAgIEhPU1ROTywgKHAgJiBTUl9JTykgPyAicmVhZGluZyIgOiAid3JpdGluZyIsCkBAIC0xOTIxLDcgKzE4OTAsNyBAQAogCU5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UgfCBNUl9ETUFfTU9ERSB8IE1SX0VOQUJMRV9FT1BfSU5UUiB8IE1SX01PTklUT1JfQlNZKTsKICNlbmRpZiAvKiBkZWYgUkVBTF9ETUEgICovCiAKLQlpZiAoSVNfQV9UVCgpKSB7CisJaWYgKCEoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19MQVRFX0RNQV9TRVRVUCkpIHsKIAkJLyogT24gdGhlIE1lZHVzYSwgaXQgaXMgYSBtdXN0IHRvIGluaXRpYWxpemUgdGhlIERNQSBiZWZvcmUKIAkJICogc3RhcnRpbmcgdGhlIE5DUi4gVGhpcyBpcyBhbHNvIHRoZSBjbGVhbmVyIHdheSBmb3IgdGhlIFRULgogCQkgKi8KQEAgLTE5MzksNyArMTkwOCw3IEBACiAJCU5DUjUzODBfd3JpdGUoU1RBUlRfRE1BX1NFTkRfUkVHLCAwKTsKIAl9CiAKLQlpZiAoIUlTX0FfVFQoKSkgeworCWlmIChob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX0xBVEVfRE1BX1NFVFVQKSB7CiAJCS8qIE9uIHRoZSBGYWxjb24sIHRoZSBETUEgc2V0dXAgbXVzdCBiZSBkb25lIGFmdGVyIHRoZSBsYXN0ICovCiAJCS8qIE5DUiBhY2Nlc3MsIGVsc2UgdGhlIERNQSBzZXR1cCBnZXRzIHRyYXNoZWQhCiAJCSAqLwpAQCAtMTk0OSw2ICsxOTE4LDggQEAKIAkJCU5DUjUzODBfZG1hX3dyaXRlX3NldHVwKGluc3RhbmNlLCBkLCBjKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KKyNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfU1VOMykgKi8KKwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIGRlZmluZWQoUkVBTF9ETUEpICovCkBAIC0xOTgyLDcgKzE5NTMsMTEgQEAKICNlbmRpZgogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CiAJdW5zaWduZWQgY2hhciBwaGFzZSwgdG1wLCBleHRlbmRlZF9tc2dbMTBdLCBvbGRfcGhhc2UgPSAweGZmOwotCVNjc2lfQ21uZCAqY21kID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkOworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQ7CisKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJZHJlZ3MtPmNzciB8PSBDU1JfSU5UUjsKKyNlbmRpZgogCiAJd2hpbGUgKDEpIHsKIAkJdG1wID0gTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpOwpAQCAtMTk5Myw2ICsxOTY4LDMzIEBACiAJCQkJb2xkX3BoYXNlID0gcGhhc2U7CiAJCQkJTkNSNTM4MF9kcHJpbnRfcGhhc2UoTkRFQlVHX0lORk9STUFUSU9OLCBpbnN0YW5jZSk7CiAJCQl9CisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykKKwkJCWlmIChwaGFzZSA9PSBQSEFTRV9DTURPVVQpIHsKKyNpZiBkZWZpbmVkKFJFQUxfRE1BKQorCQkJCXZvaWQgKmQ7CisJCQkJdW5zaWduZWQgbG9uZyBjb3VudDsKKworCQkJCWlmICghY21kLT5TQ3AudGhpc19yZXNpZHVhbCAmJiBjbWQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsKSB7CisJCQkJCWNvdW50ID0gY21kLT5TQ3AuYnVmZmVyLT5sZW5ndGg7CisJCQkJCWQgPSBzZ192aXJ0KGNtZC0+U0NwLmJ1ZmZlcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJY291bnQgPSBjbWQtPlNDcC50aGlzX3Jlc2lkdWFsOworCQkJCQlkID0gY21kLT5TQ3AucHRyOworCQkJCX0KKwkJCQkvKiB0aGlzIGNvbW1hbmQgc2V0dXAgZm9yIGRtYSB5ZXQ/ICovCisJCQkJaWYgKChjb3VudCA+PSBETUFfTUlOX1NJWkUpICYmIChzdW4zX2RtYV9zZXR1cF9kb25lICE9IGNtZCkpIHsKKwkJCQkJaWYgKGNtZC0+cmVxdWVzdC0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpIHsKKwkJCQkJCXN1bjNzY3NpX2RtYV9zZXR1cChkLCBjb3VudCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICBycV9kYXRhX2RpcihjbWQtPnJlcXVlc3QpKTsKKwkJCQkJCXN1bjNfZG1hX3NldHVwX2RvbmUgPSBjbWQ7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJCQkJZHJlZ3MtPmNzciB8PSBDU1JfSU5UUjsKKyNlbmRpZgorCQkJfQorI2VuZGlmIC8qIENPTkZJR19TVU4zICovCiAKIAkJCWlmIChzaW5rICYmIChwaGFzZSAhPSBQSEFTRV9NU0dPVVQpKSB7CiAJCQkJTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIFBIQVNFX1NSX1RPX1RDUih0bXApKTsKQEAgLTIwNTQsOCArMjA1NiwxMSBAQAogCQkJCSAqLwogCiAjaWYgZGVmaW5lZChSRUFMX0RNQSkKLQkJCQlpZiAoIWNtZC0+ZGV2aWNlLT5ib3JrZW4gJiYKLQkJCQkgICAgKHRyYW5zZmVyc2l6ZSA9IE5DUjUzODBfZG1hX3hmZXJfbGVuKGluc3RhbmNlLGNtZCxwaGFzZSkpID4gMzEpIHsKKwkJCQlpZiAoCisjaWYgIWRlZmluZWQoQ09ORklHX1NVTjMpCisJCQkJICAgICFjbWQtPmRldmljZS0+Ym9ya2VuICYmCisjZW5kaWYKKwkJCQkgICAgKHRyYW5zZmVyc2l6ZSA9IE5DUjUzODBfZG1hX3hmZXJfbGVuKGluc3RhbmNlLCBjbWQsIHBoYXNlKSkgPj0gRE1BX01JTl9TSVpFKSB7CiAJCQkJCWxlbiA9IHRyYW5zZmVyc2l6ZTsKIAkJCQkJY21kLT5TQ3AucGhhc2UgPSBwaGFzZTsKIAkJCQkJaWYgKE5DUjUzODBfdHJhbnNmZXJfZG1hKGluc3RhbmNlLCAmcGhhc2UsCkBAIC0yMDY0LDkgKzIwNjksOCBAQAogCQkJCQkJICogSWYgdGhlIHdhdGNoZG9nIHRpbWVyIGZpcmVzLCBhbGwgZnV0dXJlCiAJCQkJCQkgKiBhY2Nlc3NlcyB0byB0aGlzIGRldmljZSB3aWxsIHVzZSB0aGUKIAkJCQkJCSAqIHBvbGxlZC1JTy4gKi8KLQkJCQkJCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBzd2l0Y2hpbmcgdGFyZ2V0ICVkICIKLQkJCQkJCQkgICAibHVuICVsbHUgdG8gc2xvdyBoYW5kc2hha2VcbiIsIEhPU1ROTywKLQkJCQkJCQkgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOworCQkJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkJCQkJInN3aXRjaGluZyB0byBzbG93IGhhbmRzaGFrZVxuIik7CiAJCQkJCQljbWQtPmRldmljZS0+Ym9ya2VuID0gMTsKIAkJCQkJCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8CiAJCQkJCQkJSUNSX0FTU0VSVF9BVE4pOwpAQCAtMjA5Miw2ICsyMDk2LDExIEBACiAJCQkJCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsCiAJCQkJCQkJICAgICAoaW50ICopJmNtZC0+U0NwLnRoaXNfcmVzaWR1YWwsCiAJCQkJCQkJICAgICAodW5zaWduZWQgY2hhciAqKikmY21kLT5TQ3AucHRyKTsKKyNpZiBkZWZpbmVkKENPTkZJR19TVU4zKSAmJiBkZWZpbmVkKFJFQUxfRE1BKQorCQkJCS8qIGlmIHdlIGhhZCBpbnRlbmRlZCB0byBkbWEgdGhhdCBjb21tYW5kIGNsZWFyIGl0ICovCisJCQkJaWYgKHN1bjNfZG1hX3NldHVwX2RvbmUgPT0gY21kKQorCQkJCQlzdW4zX2RtYV9zZXR1cF9kb25lID0gTlVMTDsKKyNlbmRpZgogCQkJCWJyZWFrOwogCQkJY2FzZSBQSEFTRV9NU0dJTjoKIAkJCQlsZW4gPSAxOwpAQCAtMjE0NSw5ICsyMTU0LDYgQEAKIAkJCQkJZHByaW50ayhOREVCVUdfTElOS0VELCAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVsbHUgbGlua2VkIHJlcXVlc3QgIgogCQkJCQkJICAgImRvbmUsIGNhbGxpbmcgc2NzaV9kb25lKCkuXG4iLAogCQkJCQkJICAgSE9TVE5PLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQkJCQkJY29sbGVjdF9zdGF0cyhob3N0ZGF0YSwgY21kKTsKLSNlbmRpZgogCQkJCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQkJCQljbWQgPSBob3N0ZGF0YS0+Y29ubmVjdGVkOwogCQkJCQlicmVhazsKQEAgLTIxNTYsMTEgKzIxNjIsMTIgQEAKIAkJCQljYXNlIENPTU1BTkRfQ09NUExFVEU6CiAJCQkJCS8qIEFjY2VwdCBtZXNzYWdlIGJ5IGNsZWFyaW5nIEFDSyAqLwogCQkJCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCQkJCQkvKiArK2d1ZW50aGVyOiBwb3NzaWJsZSByYWNlIHdpdGggRmFsY29uIGxvY2tpbmcgKi8KLQkJCQkJZmFsY29uX2RvbnRfcmVsZWFzZSsrOwotCQkJCQlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKIAkJCQkJZHByaW50ayhOREVCVUdfUVVFVUVTLCAic2NzaSVkOiBjb21tYW5kIGZvciB0YXJnZXQgJWQsIGx1biAlbGx1ICIKIAkJCQkJCSAgImNvbXBsZXRlZFxuIiwgSE9TVE5PLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOworCisJCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCQkJaG9zdGRhdGEtPnJldGFpbl9kbWFfaW50cisrOworCQkJCQlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJCQkJY21kX2ZyZWVfdGFnKGNtZCk7CiAJCQkJCWlmIChzdGF0dXNfYnl0ZShjbWQtPlNDcC5TdGF0dXMpID09IFFVRVVFX0ZVTEwpIHsKQEAgLTIxNzIsNyArMjE3OSw3IEBACiAJCQkJCQkgKi8KIAkJCQkJCS8qICsrQW5kcmVhczogdGhlIG1pZCBsZXZlbCBjb2RlIGtub3dzIGFib3V0CiAJCQkJCQkgICBRVUVVRV9GVUxMIG5vdy4gKi8KLQkJCQkJCVRBR19BTExPQyAqdGEgPSAmVGFnQWxsb2NbY21kLT5kZXZpY2UtPmlkXVtjbWQtPmRldmljZS0+bHVuXTsKKwkJCQkJCXN0cnVjdCB0YWdfYWxsb2MgKnRhID0gJmhvc3RkYXRhLT5UYWdBbGxvY1tzY21kX2lkKGNtZCldW2NtZC0+ZGV2aWNlLT5sdW5dOwogCQkJCQkJZHByaW50ayhOREVCVUdfVEFHUywgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlbGx1IHJldHVybmVkICIKIAkJCQkJCQkgICAiUVVFVUVfRlVMTCBhZnRlciAlZCBjb21tYW5kc1xuIiwKIAkJCQkJCQkgICBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwKQEAgLTIyMDcsNyArMjIxNCw2IEBACiAJCQkJCWVsc2UgaWYgKHN0YXR1c19ieXRlKGNtZC0+U0NwLlN0YXR1cykgIT0gR09PRCkKIAkJCQkJCWNtZC0+cmVzdWx0ID0gKGNtZC0+cmVzdWx0ICYgMHgwMGZmZmYpIHwgKERJRF9FUlJPUiA8PCAxNik7CiAKLSNpZmRlZiBBVVRPU0VOU0UKIAkJCQkJaWYgKChjbWQtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgJiYKIAkJCQkJCWhvc3RkYXRhLT5zZXMuY21kX2xlbikgewogCQkJCQkJc2NzaV9laF9yZXN0b3JlX2NtbmQoY21kLCAmaG9zdGRhdGEtPnNlcyk7CkBAIC0yMjIwLDIyICsyMjI2LDE3IEBACiAKIAkJCQkJCWRwcmludGsoTkRFQlVHX0FVVE9TRU5TRSwgInNjc2klZDogcGVyZm9ybWluZyByZXF1ZXN0IHNlbnNlXG4iLCBIT1NUTk8pOwogCi0JCQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCQkJCQlMSVNUKGNtZCxob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwogCQkJCQkJU0VUX05FWFQoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCQkJCQkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gKFNjc2lfQ21uZCAqKSBjbWQ7Ci0JCQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQkJCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBjbWQ7CiAJCQkJCQlkcHJpbnRrKE5ERUJVR19RVUVVRVMsICJzY3NpJWQ6IFJFUVVFU1QgU0VOU0UgYWRkZWQgdG8gaGVhZCBvZiAiCiAJCQkJCQkJICAiaXNzdWUgcXVldWVcbiIsIEhfTk8oY21kKSk7Ci0JCQkJCX0gZWxzZQotI2VuZGlmIC8qIGRlZiBBVVRPU0VOU0UgKi8KLQkJCQkJewotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQkJCQkJCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7Ci0jZW5kaWYKKwkJCQkJfSBlbHNlIHsKIAkJCQkJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCQkJCX0KIAorCQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAkJCQkJTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwogCQkJCQkvKgogCQkJCQkgKiBSZXN0b3JlIHBoYXNlIGJpdHMgdG8gMCBzbyBhbiBpbnRlcnJ1cHRlZCBzZWxlY3Rpb24sCkBAIC0yMjQ2LDEyICsyMjQ3LDE0IEBACiAJCQkJCXdoaWxlICgoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfQlNZKSAmJiAhaG9zdGRhdGEtPmNvbm5lY3RlZCkKIAkJCQkJCWJhcnJpZXIoKTsKIAotCQkJCQlmYWxjb25fZG9udF9yZWxlYXNlLS07CisJCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCQkJaG9zdGRhdGEtPnJldGFpbl9kbWFfaW50ci0tOwogCQkJCQkvKiArK3JvbWFuOiBGb3IgRmFsY29uIFNDU0ksIHJlbGVhc2UgdGhlIGxvY2sgb24gdGhlCiAJCQkJCSAqIFNULURNQSBoZXJlIGlmIG5vIG90aGVyIGNvbW1hbmRzIGFyZSB3YWl0aW5nIG9uIHRoZQogCQkJCQkgKiBkaXNjb25uZWN0ZWQgcXVldWUuCiAJCQkJCSAqLwotCQkJCQlmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKGhvc3RkYXRhKTsKKwkJCQkJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKKwkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJCQlyZXR1cm47CiAJCQkJY2FzZSBNRVNTQUdFX1JFSkVDVDoKIAkJCQkJLyogQWNjZXB0IG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCkBAIC0yMzAzLDYgKzIzMDYsOSBAQAogCQkJCQkvKiBXYWl0IGZvciBidXMgZnJlZSB0byBhdm9pZCBuYXN0eSB0aW1lb3V0cyAqLwogCQkJCQl3aGlsZSAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX0JTWSkgJiYgIWhvc3RkYXRhLT5jb25uZWN0ZWQpCiAJCQkJCQliYXJyaWVyKCk7CisjaWZkZWYgU1VOM19TQ1NJX1ZNRQorCQkJCQlkcmVncy0+Y3NyIHw9IENTUl9ETUFfRU5BQkxFOworI2VuZGlmCiAJCQkJCXJldHVybjsKIAkJCQkJLyoKIAkJCQkJICogVGhlIFNDU0kgZGF0YSBwb2ludGVyIGlzICpJTVBMSUNJVExZKiBzYXZlZCBvbiBhIGRpc2Nvbm5lY3QKQEAgLTIzODQsMjAgKzIzOTAsMTggQEAKIAkJCQkJICovCiAJCQkJZGVmYXVsdDoKIAkJCQkJaWYgKCF0bXApIHsKLQkJCQkJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IHJlamVjdGluZyBtZXNzYWdlICIsIEhPU1ROTyk7CisJCQkJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQ6IHJlamVjdGluZyBtZXNzYWdlICIsCisJCQkJCQkgICAgICAgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCQkJCQkJc3BpX3ByaW50X21zZyhleHRlbmRlZF9tc2cpOwogCQkJCQkJcHJpbnRrKCJcbiIpOwogCQkJCQl9IGVsc2UgaWYgKHRtcCAhPSBFWFRFTkRFRF9NRVNTQUdFKQotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcmVqZWN0aW5nIHVua25vd24gIgotCQkJCQkJICAgICAgICJtZXNzYWdlICUwMnggZnJvbSB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLAotCQkJCQkJICAgICAgIEhPU1ROTywgdG1wLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOworCQkJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkJCQkgICAgICAgICAgICAicmVqZWN0aW5nIHVua25vd24gbWVzc2FnZSAlMDJ4XG4iLAorCQkJCQkJICAgICAgICAgICAgdG1wKTsKIAkJCQkJZWxzZQotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcmVqZWN0aW5nIHVua25vd24gIgotCQkJCQkJICAgICAgICJleHRlbmRlZCBtZXNzYWdlICIKLQkJCQkJCSAgICAgICAiY29kZSAlMDJ4LCBsZW5ndGggJWQgZnJvbSB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLAotCQkJCQkJICAgICAgIEhPU1ROTywgZXh0ZW5kZWRfbXNnWzFdLCBleHRlbmRlZF9tc2dbMF0sCi0JCQkJCQkgICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQorCQkJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkJCQkgICAgICAgICAgICAicmVqZWN0aW5nIHVua25vd24gZXh0ZW5kZWQgbWVzc2FnZSBjb2RlICUwMngsIGxlbmd0aCAlZFxuIiwKKwkJCQkJCSAgICAgICAgICAgIGV4dGVuZGVkX21zZ1sxXSwgZXh0ZW5kZWRfbXNnWzBdKTsKIAogCQkJCQltc2dvdXQgPSBNRVNTQUdFX1JFSkVDVDsKIAkJCQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9BVE4pOwpAQCAtMjQxMCw2ICsyNDE0LDcgQEAKIAkJCQlob3N0ZGF0YS0+bGFzdF9tZXNzYWdlID0gbXNnb3V0OwogCQkJCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKIAkJCQlpZiAobXNnb3V0ID09IEFCT1JUKSB7CisJCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJCQkJY21kX2ZyZWVfdGFnKGNtZCk7CiAjZWxzZQpAQCAtMjQxNywxMiArMjQyMiwxMCBAQAogI2VuZGlmCiAJCQkJCWhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwogCQkJCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JCQkJCWNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7Ci0jZW5kaWYKLQkJCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKIAkJCQkJTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkJCQlmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKGhvc3RkYXRhKTsKKwkJCQkJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKKwkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQkJCQlyZXR1cm47CiAJCQkJfQogCQkJCW1zZ291dCA9IE5PUDsKQEAgLTI0NTUsNyArMjQ1OCw3IEBACiAgKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9yZXNlbGVjdCAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiAgKgogICogUHVycG9zZSA6IGRvZXMgcmVzZWxlY3Rpb24sIGluaXRpYWxpemluZyB0aGUgaW5zdGFuY2UtPmNvbm5lY3RlZAotICoJZmllbGQgdG8gcG9pbnQgdG8gdGhlIFNjc2lfQ21uZCBmb3Igd2hpY2ggdGhlIElfVF9MIG9yIElfVF9MX1EKKyAqCWZpZWxkIHRvIHBvaW50IHRvIHRoZSBzY3NpX2NtbmQgZm9yIHdoaWNoIHRoZSBJX1RfTCBvciBJX1RfTF9RCiAgKgluZXh1cyBoYXMgYmVlbiByZWVzdGFibGlzaGVkLAogICoKICAqIElucHV0cyA6IGluc3RhbmNlIC0gdGhpcyBpbnN0YW5jZSBvZiB0aGUgTkNSNTM4MC4KQEAgLTI0NjMsMTkgKzI0NjYsMjEgQEAKICAqLwogCiAKKy8qIGl0IG1pZ2h0IGV2ZW50dWFsbHkgcHJvdmUgbmVjZXNzYXJ5IHRvIGRvIGEgZG1hIHNldHVwIG9uCisgICByZXNlbGVjdGlvbiwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBuZWVkZWQgbm93IC0tIHNhbSAqLworCiBzdGF0aWMgdm9pZCBOQ1I1MzgwX3Jlc2VsZWN0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQogewogCVNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKIAl1bnNpZ25lZCBjaGFyIHRhcmdldF9tYXNrOwotCXVuc2lnbmVkIGNoYXIgbHVuLCBwaGFzZTsKLQlpbnQgbGVuOworCXVuc2lnbmVkIGNoYXIgbHVuOwogI2lmZGVmIFNVUFBPUlRfVEFHUwogCXVuc2lnbmVkIGNoYXIgdGFnOwogI2VuZGlmCiAJdW5zaWduZWQgY2hhciBtc2dbM107Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLQlTY3NpX0NtbmQgKnRtcCA9IE5VTEwsICpwcmV2OwotLyoJdW5zaWduZWQgbG9uZyBmbGFnczsgKi8KKwlpbnQgX19tYXliZV91bnVzZWQgbGVuOworCXVuc2lnbmVkIGNoYXIgX19tYXliZV91bnVzZWQgKmRhdGEsIF9fbWF5YmVfdW51c2VkIHBoYXNlOworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcCA9IE5VTEwsICpwcmV2OwogCiAJLyoKIAkgKiBEaXNhYmxlIGFyYml0cmF0aW9uLCBldGMuIHNpbmNlIHRoZSBob3N0IGFkYXB0ZXIgb2J2aW91c2x5CkBAIC0yNTExLDEwICsyNTE2LDE4IEBACiAJd2hpbGUgKCEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSkKIAkJOwogCisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykgJiYgZGVmaW5lZChSRUFMX0RNQSkKKwkvKiBhY2tub3dsZWRnZSB0b2dnbGUgdG8gTVNHSU4gKi8KKwlOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywgUEhBU0VfU1JfVE9fVENSKFBIQVNFX01TR0lOKSk7CisKKwkvKiBwZWVrIGF0IHRoZSBieXRlIHdpdGhvdXQgcmVhbGx5IGhpdHRpbmcgdGhlIGJ1cyAqLworCW1zZ1swXSA9IE5DUjUzODBfcmVhZChDVVJSRU5UX1NDU0lfREFUQV9SRUcpOworI2Vsc2UKIAlsZW4gPSAxOwogCWRhdGEgPSBtc2c7CiAJcGhhc2UgPSBQSEFTRV9NU0dJTjsKIAlOQ1I1MzgwX3RyYW5zZmVyX3BpbyhpbnN0YW5jZSwgJnBoYXNlLCAmbGVuLCAmZGF0YSk7CisjZW5kaWYKIAogCWlmICghKG1zZ1swXSAmIDB4ODApKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IGV4cGVjdGluZyBJREVOVElGWSBtZXNzYWdlLCBnb3QgIiwgSE9TVE5PKTsKQEAgLTI1MjQsMTMgKzI1MzcsMTMgQEAKIAl9CiAJbHVuID0gKG1zZ1swXSAmIDB4MDcpOwogCi0jaWZkZWYgU1VQUE9SVF9UQUdTCisjaWYgZGVmaW5lZChTVVBQT1JUX1RBR1MpICYmICFkZWZpbmVkKENPTkZJR19TVU4zKQogCS8qIElmIHRoZSBwaGFzZSBpcyBzdGlsbCBNU0dJTiwgdGhlIHRhcmdldCB3YW50cyB0byBzZW5kIHNvbWUgbW9yZQogCSAqIG1lc3NhZ2VzLiBJbiBjYXNlIGl0IHN1cHBvcnRzIHRhZ2dlZCBxdWV1aW5nLCB0aGlzIGlzIHByb2JhYmx5IGEKIAkgKiBTSU1QTEVfUVVFVUVfVEFHIGZvciB0aGUgSV9UX0xfUSBuZXh1cy4KIAkgKi8KIAl0YWcgPSBUQUdfTk9ORTsKLQlpZiAocGhhc2UgPT0gUEhBU0VfTVNHSU4gJiYgc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nKSB7CisJaWYgKHBoYXNlID09IFBIQVNFX01TR0lOICYmIChob3N0ZGF0YS0+ZmxhZ3MgJiBGTEFHX1RBR0dFRF9RVUVVSU5HKSkgewogCQkvKiBBY2NlcHQgcHJldmlvdXMgSURFTlRJRlkgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KIAkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKIAkJbGVuID0gMjsKQEAgLTI1NDgsMTUgKzI1NjEsMTMgQEAKIAkgKiBqdXN0IHJlZXN0YWJsaXNoZWQsIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlLgogCSAqLwogCi0JZm9yICh0bXAgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUsIHByZXYgPSBOVUxMOworCWZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSwgcHJldiA9IE5VTEw7CiAJICAgICB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IE5FWFQodG1wKSkgewogCQlpZiAoKHRhcmdldF9tYXNrID09ICgxIDw8IHRtcC0+ZGV2aWNlLT5pZCkpICYmIChsdW4gPT0gdG1wLT5kZXZpY2UtPmx1bikKICNpZmRlZiBTVVBQT1JUX1RBR1MKIAkJICAgICYmICh0YWcgPT0gdG1wLT50YWcpCiAjZW5kaWYKIAkJICAgICkgewotCQkJLyogKytndWVudGhlcjogcHJldmVudCByYWNlIHdpdGggZmFsY29uX3JlbGVhc2VfbG9jayAqLwotCQkJZmFsY29uX2RvbnRfcmVsZWFzZSsrOwogCQkJaWYgKHByZXYpIHsKIAkJCQlSRU1PVkUocHJldiwgTkVYVChwcmV2KSwgdG1wLCBORVhUKHRtcCkpOwogCQkJCVNFVF9ORVhUKHByZXYsIE5FWFQodG1wKSk7CkBAIC0yNTg4LDI2ICsyNTk5LDY3IEBACiAJCXJldHVybjsKIAl9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TVU4zKSAmJiBkZWZpbmVkKFJFQUxfRE1BKQorCS8qIGVuZ2FnZSBkbWEgc2V0dXAgZm9yIHRoZSBjb21tYW5kIHdlIGp1c3Qgc2F3ICovCisJeworCQl2b2lkICpkOworCQl1bnNpZ25lZCBsb25nIGNvdW50OworCisJCWlmICghdG1wLT5TQ3AudGhpc19yZXNpZHVhbCAmJiB0bXAtPlNDcC5idWZmZXJzX3Jlc2lkdWFsKSB7CisJCQljb3VudCA9IHRtcC0+U0NwLmJ1ZmZlci0+bGVuZ3RoOworCQkJZCA9IHNnX3ZpcnQodG1wLT5TQ3AuYnVmZmVyKTsKKwkJfSBlbHNlIHsKKwkJCWNvdW50ID0gdG1wLT5TQ3AudGhpc19yZXNpZHVhbDsKKwkJCWQgPSB0bXAtPlNDcC5wdHI7CisJCX0KKwkJLyogc2V0dXAgdGhpcyBjb21tYW5kIGZvciBkbWEgaWYgbm90IGFscmVhZHkgKi8KKwkJaWYgKChjb3VudCA+PSBETUFfTUlOX1NJWkUpICYmIChzdW4zX2RtYV9zZXR1cF9kb25lICE9IHRtcCkpIHsKKwkJCXN1bjNzY3NpX2RtYV9zZXR1cChkLCBjb3VudCwgcnFfZGF0YV9kaXIodG1wLT5yZXF1ZXN0KSk7CisJCQlzdW4zX2RtYV9zZXR1cF9kb25lID0gdG1wOworCQl9CisJfQorCisJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9BQ0spOworI2VuZGlmCisKIAkvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KIAlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwogCisjaWYgZGVmaW5lZChTVVBQT1JUX1RBR1MpICYmIGRlZmluZWQoQ09ORklHX1NVTjMpCisJLyogSWYgdGhlIHBoYXNlIGlzIHN0aWxsIE1TR0lOLCB0aGUgdGFyZ2V0IHdhbnRzIHRvIHNlbmQgc29tZSBtb3JlCisJICogbWVzc2FnZXMuIEluIGNhc2UgaXQgc3VwcG9ydHMgdGFnZ2VkIHF1ZXVpbmcsIHRoaXMgaXMgcHJvYmFibHkgYQorCSAqIFNJTVBMRV9RVUVVRV9UQUcgZm9yIHRoZSBJX1RfTF9RIG5leHVzLgorCSAqLworCXRhZyA9IFRBR19OT05FOworCWlmIChwaGFzZSA9PSBQSEFTRV9NU0dJTiAmJiBzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcpIHsKKwkJLyogQWNjZXB0IHByZXZpb3VzIElERU5USUZZIG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCisJCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7CisJCWxlbiA9IDI7CisJCWRhdGEgPSBtc2cgKyAxOworCQlpZiAoIU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKSAmJgorCQkgICAgbXNnWzFdID09IFNJTVBMRV9RVUVVRV9UQUcpCisJCQl0YWcgPSBtc2dbMl07CisJCWRwcmludGsoTkRFQlVHX1RBR1MsICJzY3NpJWQ6IHRhcmdldCBtYXNrICUwMngsIGx1biAlZCBzZW50IHRhZyAlZCBhdCByZXNlbGVjdGlvblxuIgorCQkJSE9TVE5PLCB0YXJnZXRfbWFzaywgbHVuLCB0YWcpOworCX0KKyNlbmRpZgorCiAJaG9zdGRhdGEtPmNvbm5lY3RlZCA9IHRtcDsKIAlkcHJpbnRrKE5ERUJVR19SRVNFTEVDVElPTiwgInNjc2klZDogbmV4dXMgZXN0YWJsaXNoZWQsIHRhcmdldCA9ICVkLCBsdW4gPSAlbGx1LCB0YWcgPSAlZFxuIiwKIAkJICAgSE9TVE5PLCB0bXAtPmRldmljZS0+aWQsIHRtcC0+ZGV2aWNlLT5sdW4sIHRtcC0+dGFnKTsKLQlmYWxjb25fZG9udF9yZWxlYXNlLS07CiB9CiAKIAogLyoKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYWJvcnQgKFNjc2lfQ21uZCAqY21kKQorICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9hYm9ydCAoc3RydWN0IHNjc2lfY21uZCAqY21kKQogICoKICAqIFB1cnBvc2UgOiBhYm9ydCBhIGNvbW1hbmQKICAqCi0gKiBJbnB1dHMgOiBjbWQgLSB0aGUgU2NzaV9DbW5kIHRvIGFib3J0LCBjb2RlIC0gY29kZSB0byBzZXQgdGhlCisgKiBJbnB1dHMgOiBjbWQgLSB0aGUgc2NzaV9jbW5kIHRvIGFib3J0LCBjb2RlIC0gY29kZSB0byBzZXQgdGhlCiAgKglob3N0IGJ5dGUgb2YgdGhlIHJlc3VsdCBmaWVsZCB0bywgaWYgemVybyBESURfQUJPUlRFRCBpcwogICoJdXNlZC4KICAqCi0gKiBSZXR1cm5zIDogMCAtIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKiBSZXR1cm5zIDogU1VDQ0VTUyAtIHN1Y2Nlc3MsIEZBSUxFRCBvbiBmYWlsdXJlLgogICoKICAqIFhYWCAtIHRoZXJlIGlzIG5vIHdheSB0byBhYm9ydCB0aGUgY29tbWFuZCB0aGF0IGlzIGN1cnJlbnRseQogICoJIGNvbm5lY3RlZCwgeW91IGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuICBJZiB0aGlzIGlzCkBAIC0yNjE2LDI0ICsyNjY4LDE5IEBACiAgKi8KIAogc3RhdGljCi1pbnQgTkNSNTM4MF9hYm9ydChTY3NpX0NtbmQgKmNtZCkKK2ludCBOQ1I1MzgwX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCVNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKLQlTY3NpX0NtbmQgKnRtcCwgKipwcmV2OworCXN0cnVjdCBzY3NpX2NtbmQgKnRtcCwgKipwcmV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogYWJvcnRpbmcgY29tbWFuZFxuIiwgSE9TVE5PKTsKLQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKKwlzY21kX3ByaW50ayhLRVJOX05PVElDRSwgY21kLCAiYWJvcnRpbmcgY29tbWFuZFxuIik7CiAKIAlOQ1I1MzgwX3ByaW50X3N0YXR1cyhpbnN0YW5jZSk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQlpZiAoIUlTX0FfVFQoKSAmJiAhZmFsY29uX2dvdF9sb2NrKQotCQlwcmludGsoS0VSTl9FUlIgInNjc2klZDogISFCSU5HTyEhIEZhbGNvbiBoYXMgbm8gbG9jayBpbiBOQ1I1MzgwX2Fib3J0XG4iLAotCQkgICAgICAgSE9TVE5PKTsKLQogCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiBhYm9ydCBjYWxsZWQgYmFzciAweCUwMngsIHNyIDB4JTAyeFxuIiwgSE9TVE5PLAogCQkgICAgTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRyksCiAJCSAgICBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpOwpAQCAtMjY3NCwxMiArMjcyMSwxMiBAQAogI2Vsc2UKIAkJCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJj0gfigxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwogI2VuZGlmCisJCQltYXliZV9yZWxlYXNlX2RtYV9pcnEoaW5zdGFuY2UpOwogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKLQkJCWZhbGNvbl9yZWxlYXNlX2xvY2tfaWZfcG9zc2libGUoaG9zdGRhdGEpOwogCQkJcmV0dXJuIFNVQ0NFU1M7CiAJCX0gZWxzZSB7Ci0vKgkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgKi8KKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCXByaW50aygic2NzaSVkOiBhYm9ydCBvZiBjb25uZWN0ZWQgY29tbWFuZCBmYWlsZWQhXG4iLCBIT1NUTk8pOwogCQkJcmV0dXJuIEZBSUxFRDsKIAkJfQpAQCAtMjY5MCwyMSArMjczNywyMSBAQAogCSAqIENhc2UgMiA6IElmIHRoZSBjb21tYW5kIGhhc24ndCBiZWVuIGlzc3VlZCB5ZXQsIHdlIHNpbXBseSByZW1vdmUgaXQKIAkgKgkgICAgZnJvbSB0aGUgaXNzdWUgcXVldWUuCiAJICovCi0JZm9yIChwcmV2ID0gKFNjc2lfQ21uZCAqKikmKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSksCi0JICAgICB0bXAgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOworCWZvciAocHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSYoaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKSwKKwkgICAgIHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOwogCSAgICAgdG1wOyBwcmV2ID0gTkVYVEFERFIodG1wKSwgdG1wID0gTkVYVCh0bXApKSB7CiAJCWlmIChjbWQgPT0gdG1wKSB7CiAJCQlSRU1PVkUoNSwgKnByZXYsIHRtcCwgTkVYVCh0bXApKTsKIAkJCSgqcHJldikgPSBORVhUKHRtcCk7CiAJCQlTRVRfTkVYVCh0bXAsIE5VTEwpOwogCQkJdG1wLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CisJCQltYXliZV9yZWxlYXNlX2RtYV9pcnEoaW5zdGFuY2UpOwogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IGFib3J0IHJlbW92ZWQgY29tbWFuZCBmcm9tIGlzc3VlIHF1ZXVlLlxuIiwKIAkJCQkgICAgSE9TVE5PKTsKIAkJCS8qIFRhZ2dlZCBxdWV1aW5nIG5vdGU6IG5vIHRhZyB0byBmcmVlIGhlcmUsIGhhc24ndCBiZWVuIGFzc2lnbmVkCiAJCQkgKiB5ZXQuLi4gKi8KIAkJCXRtcC0+c2NzaV9kb25lKHRtcCk7Ci0JCQlmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKGhvc3RkYXRhKTsKIAkJCXJldHVybiBTVUNDRVNTOwogCQl9CiAJfQpAQCAtMjc1MSwxMyArMjc5OCwxMyBAQAogCSAqIGl0IGZyb20gdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZS4KIAkgKi8KIAotCWZvciAodG1wID0gKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOyB0bXA7CisJZm9yICh0bXAgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOyB0bXA7CiAJICAgICB0bXAgPSBORVhUKHRtcCkpIHsKIAkJaWYgKGNtZCA9PSB0bXApIHsKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiBhYm9ydGluZyBkaXNjb25uZWN0ZWQgY29tbWFuZC5cbiIsIEhPU1ROTyk7CiAKLQkJCWlmIChOQ1I1MzgwX3NlbGVjdChpbnN0YW5jZSwgY21kLCAoaW50KWNtZC0+dGFnKSkKKwkJCWlmIChOQ1I1MzgwX3NlbGVjdChpbnN0YW5jZSwgY21kKSkKIAkJCQlyZXR1cm4gRkFJTEVEOwogCiAJCQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogbmV4dXMgcmVlc3RhYmxpc2hlZC5cbiIsIEhPU1ROTyk7CkBAIC0yNzY1LDggKzI4MTIsOCBAQAogCQkJZG9fYWJvcnQoaW5zdGFuY2UpOwogCiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlmb3IgKHByZXYgPSAoU2NzaV9DbW5kICoqKSYoaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSksCi0JCQkgICAgIHRtcCA9IChTY3NpX0NtbmQgKilob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOworCQkJZm9yIChwcmV2ID0gKHN0cnVjdCBzY3NpX2NtbmQgKiopJihob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKSwKKwkJCSAgICAgdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKilob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOwogCQkJICAgICB0bXA7IHByZXYgPSBORVhUQUREUih0bXApLCB0bXAgPSBORVhUKHRtcCkpIHsKIAkJCQlpZiAoY21kID09IHRtcCkgewogCQkJCQlSRU1PVkUoNSwgKnByZXYsIHRtcCwgTkVYVCh0bXApKTsKQEAgLTI3ODIsMTUgKzI4MjksMjIgQEAKICNlbHNlCiAJCQkJCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJj0gfigxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwogI2VuZGlmCisJCQkJCW1heWJlX3JlbGVhc2VfZG1hX2lycShpbnN0YW5jZSk7CiAJCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCQkJdG1wLT5zY3NpX2RvbmUodG1wKTsKLQkJCQkJZmFsY29uX3JlbGVhc2VfbG9ja19pZl9wb3NzaWJsZShob3N0ZGF0YSk7CiAJCQkJCXJldHVybiBTVUNDRVNTOwogCQkJCX0KIAkJCX0KIAkJfQogCX0KIAorCS8qIE1heWJlIGl0IGlzIHN1ZmZpY2llbnQganVzdCB0byByZWxlYXNlIHRoZSBTVC1ETUEgbG9jay4uLiAoaWYKKwkgKiBwb3NzaWJsZSBhdCBhbGwpIEF0IGxlYXN0LCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGxvY2sgY291bGQgYmUKKwkgKiByZWxlYXNlZCBhZnRlciB0aGUgYWJvcnQsIGluIGNhc2UgaXQgaXMga2VwdCBkdWUgdG8gc29tZSBidWcuCisJICovCisJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAkvKgogCSAqIENhc2UgNSA6IElmIHdlIHJlYWNoZWQgdGhpcyBwb2ludCwgdGhlIGNvbW1hbmQgd2FzIG5vdCBmb3VuZCBpbiBhbnkgb2YKIAkgKgkgICAgdGhlIHF1ZXVlcy4KQEAgLTI4MDEsMjEgKzI4NTUsMTQgQEAKIAkgKiBicm9rZS4KIAkgKi8KIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQ6IHdhcm5pbmcgOiBTQ1NJIGNvbW1hbmQgcHJvYmFibHkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBiZWZvcmUgYWJvcnRpb25cbiIsIEhPU1ROTyk7CiAKLQkvKiBNYXliZSBpdCBpcyBzdWZmaWNpZW50IGp1c3QgdG8gcmVsZWFzZSB0aGUgU1QtRE1BIGxvY2suLi4gKGlmCi0JICogcG9zc2libGUgYXQgYWxsKSBBdCBsZWFzdCwgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBsb2NrIGNvdWxkIGJlCi0JICogcmVsZWFzZWQgYWZ0ZXIgdGhlIGFib3J0LCBpbiBjYXNlIGl0IGlzIGtlcHQgZHVlIHRvIHNvbWUgYnVnLgotCSAqLwotCWZhbGNvbl9yZWxlYXNlX2xvY2tfaWZfcG9zc2libGUoaG9zdGRhdGEpOwotCiAJcmV0dXJuIEZBSUxFRDsKIH0KIAogCiAvKgotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9yZXNldCAoU2NzaV9DbW5kICpjbWQpCisgKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3Jlc2V0IChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiAgKgogICogUHVycG9zZSA6IHJlc2V0IHRoZSBTQ1NJIGJ1cy4KICAqCkBAIC0yODIzLDIwICsyODcwLDE0IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgTkNSNTM4MF9idXNfcmVzZXQoU2NzaV9DbW5kICpjbWQpCitzdGF0aWMgaW50IE5DUjUzODBfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBjbWQtPmRldmljZS0+aG9zdDsKKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2lmIGRlZmluZWQoUkVTRVRfUlVOX0RPTkUpCi0JU2NzaV9DbW5kICpjb25uZWN0ZWQsICpkaXNjb25uZWN0ZWRfcXVldWU7Ci0jZW5kaWYKIAotCWlmICghSVNfQV9UVCgpICYmICFmYWxjb25fZ290X2xvY2spCi0JCXByaW50ayhLRVJOX0VSUiAic2NzaSVkOiAhIUJJTkdPISEgRmFsY29uIGhhcyBubyBsb2NrIGluIE5DUjUzODBfcmVzZXRcbiIsCi0JCSAgICAgICBIX05PKGNtZCkpOwotCi0JTkNSNTM4MF9wcmludF9zdGF0dXMoY21kLT5kZXZpY2UtPmhvc3QpOworCU5DUjUzODBfcHJpbnRfc3RhdHVzKGluc3RhbmNlKTsKIAogCS8qIGdldCBpbiBwaGFzZSAqLwogCU5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLApAQCAtMjg1Myw4OSArMjg5NCw2IEBACiAJICogdGhyb3VnaCBhbnltb3JlIC4uLiAqLwogCSh2b2lkKU5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7CiAKLQkvKiBNU2NoIDIwMTQwMTE1IC0gbG9va2luZyBhdCB0aGUgZ2VuZXJpYyBOQ1I1MzgwIGRyaXZlciwgYWxsIG9mIHRoaXMKLQkgKiBzaG91bGQgZ28uCi0JICogQ2F0Y2gtMjI6IGlmIHdlIGRvbid0IGNsZWFyIGFsbCBxdWV1ZXMsIHRoZSBTQ1NJIGRyaXZlciBsb2NrIHdpbGwKLQkgKiBub3QgYmUgcmVzZXQgYnkgYXRhcmlfc2NzaV9yZXNldCgpIQotCSAqLwotCi0jaWYgZGVmaW5lZChSRVNFVF9SVU5fRE9ORSkKLQkvKiBYWFggU2hvdWxkIG5vdyBiZSBkb25lIGJ5IG1pZGxldmVsIGNvZGUsIGJ1dCBpdCdzIGJyb2tlbiBYWFggKi8KLQkvKiBYWFggc2VlIGJlbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYWFggKi8KLQotCS8qIE1TY2g6IG9sZC1zdHlsZSByZXNldDogYWN0dWFsbHkgYWJvcnQgYWxsIGNvbW1hbmQgcHJvY2Vzc2luZyBoZXJlICovCi0KLQkvKiBBZnRlciB0aGUgcmVzZXQsIHRoZXJlIGFyZSBubyBtb3JlIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgY29tbWFuZHMKLQkgKiBhbmQgbm8gYnVzeSB1bml0czsgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCByZS1pbnNlcnRpbmcgdGhlIGNvbW1hbmRzCi0JICogaW50byB0aGUgaXNzdWVfcXVldWUgKHZpYSBzY3NpX2RvbmUoKSksIHRoZSBhYm9ydGVkIGNvbW1hbmRzIGFyZQotCSAqIHJlbWVtYmVyZWQgaW4gbG9jYWwgdmFyaWFibGVzIGZpcnN0LgotCSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljb25uZWN0ZWQgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmNvbm5lY3RlZDsKLQlob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLQlkaXNjb25uZWN0ZWRfcXVldWUgPSAoU2NzaV9DbW5kICopaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsKLQlob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlID0gTlVMTDsKLSNpZmRlZiBTVVBQT1JUX1RBR1MKLQlmcmVlX2FsbF90YWdzKCk7Ci0jZW5kaWYKLQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQotCQlob3N0ZGF0YS0+YnVzeVtpXSA9IDA7Ci0jaWZkZWYgUkVBTF9ETUEKLQlob3N0ZGF0YS0+ZG1hX2xlbiA9IDA7Ci0jZW5kaWYKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKiBJbiBvcmRlciB0byB0ZWxsIHRoZSBtaWQtbGV2ZWwgY29kZSB3aGljaCBjb21tYW5kcyB3ZXJlIGFib3J0ZWQsCi0JICogc2V0IHRoZSBjb21tYW5kIHN0YXR1cyB0byBESURfUkVTRVQgYW5kIGNhbGwgc2NzaV9kb25lKCkgISEhCi0JICogVGhpcyB1bHRpbWF0ZWx5IGFib3J0cyBwcm9jZXNzaW5nIG9mIHRoZXNlIGNvbW1hbmRzIGluIHRoZSBtaWQtbGV2ZWwuCi0JICovCi0KLQlpZiAoKGNtZCA9IGNvbm5lY3RlZCkpIHsKLQkJZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IHJlc2V0IGFib3J0ZWQgYSBjb25uZWN0ZWQgY29tbWFuZFxuIiwgSF9OTyhjbWQpKTsKLQkJY21kLT5yZXN1bHQgPSAoY21kLT5yZXN1bHQgJiAweGZmZmYpIHwgKERJRF9SRVNFVCA8PCAxNik7Ci0JCWNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JfQotCi0JZm9yIChpID0gMDsgKGNtZCA9IGRpc2Nvbm5lY3RlZF9xdWV1ZSk7ICsraSkgewotCQlkaXNjb25uZWN0ZWRfcXVldWUgPSBORVhUKGNtZCk7Ci0JCVNFVF9ORVhUKGNtZCwgTlVMTCk7Ci0JCWNtZC0+cmVzdWx0ID0gKGNtZC0+cmVzdWx0ICYgMHhmZmZmKSB8IChESURfUkVTRVQgPDwgMTYpOwotCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCX0KLQlpZiAoaSA+IDApCi0JCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaTogcmVzZXQgYWJvcnRlZCAlZCBkaXNjb25uZWN0ZWQgY29tbWFuZChzKVxuIiwgaSk7Ci0KLQkvKiBUaGUgRmFsY29uIGxvY2sgc2hvdWxkIGJlIHJlbGVhc2VkIGFmdGVyIGEgcmVzZXQuLi4KLQkgKi8KLQkvKiArK2d1ZW50aGVyOiBtb3ZlZCB0byBhdGFyaV9zY3NpX3Jlc2V0KCksIHRvIHByZXZlbnQgYSByYWNlIGJldHdlZW4KLQkgKiB1bmxvY2tpbmcgYW5kIGVuYWJsaW5nIGRtYSBpbnRlcnJ1cHQuCi0JICovCi0vKglmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKCBob3N0ZGF0YSApOyovCi0KLQkvKiBzaW5jZSBhbGwgY29tbWFuZHMgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgdGVybWluYXRlZCwgd2UgbmVlZCB0byB0ZWxsCi0JICogdGhlIG1pZGxldmVsIGNvZGUgdGhhdCB0aGUgcmVzZXQgd2FzIFNVQ0NFU1NGVUwsIGFuZCB0aGVyZSBpcyBubwotCSAqIG5lZWQgdG8gJ3dha2UgdXAnIHRoZSBjb21tYW5kcyBieSBhIHJlcXVlc3Rfc2Vuc2UKLQkgKi8KLQlyZXR1cm4gU1VDQ0VTUzsKLSNlbHNlIC8qIDEgKi8KLQotCS8qIE1TY2g6IG5ldy1zdHlsZSByZXNldCBoYW5kbGluZzogbGV0IHRoZSBtaWQtbGV2ZWwgZG8gd2hhdCBpdCBjYW4gKi8KLQotCS8qICsrZ3VlbnRoZXI6IE1JRC1MRVZFTCBJUyBTVElMTCBCUk9LRU4uCi0JICogTWlkLWxldmVsIGlzIHN1cHBvc2VkIHRvIHJlcXVldWUgYWxsIGNvbW1hbmRzIHRoYXQgd2VyZSBhY3RpdmUgb24gdGhlCi0JICogdmFyaW91cyBsb3ctbGV2ZWwgcXVldWVzLiBJbiBmYWN0IGl0IGRvZXMgdGhpcywgYnV0IHRoYXQncyBub3QgZW5vdWdoCi0JICogYmVjYXVzZSBhbGwgdGhlc2UgY29tbWFuZHMgYXJlIHN1YmplY3QgdG8gdGltZW91dC4gQW5kIGlmIGEgdGltZW91dAotCSAqIGhhcHBlbnMgZm9yIGFueSByZW1vdmVkIGNvbW1hbmQsICpfYWJvcnQoKSBpcyBjYWxsZWQgYnV0IGFsbCBxdWV1ZXMKLQkgKiBhcmUgbm93IGVtcHR5LiBBYm9ydCB0aGVuIGdpdmVzIHVwIHRoZSBmYWxjb24gbG9jaywgd2hpY2ggaXMgZmF0YWwsCi0JICogc2luY2UgdGhlIG1pZC1sZXZlbCB3aWxsIHF1ZXVlIG1vcmUgY29tbWFuZHMgYW5kIG11c3QgaGF2ZSB0aGUgbG9jawotCSAqIChpdCdzIGFsbCBoYXBwZW5pbmcgaW5zaWRlIHRpbWVyIGludGVycnVwdCBoYW5kbGVyISEpLgotCSAqIEV2ZW4gd29yc2UsIGFib3J0IHdpbGwgcmV0dXJuIE5PVF9SVU5OSU5HIGZvciBhbGwgdGhvc2UgY29tbWFuZHMgbm90Ci0JICogb24gYW55IHF1ZXVlLCBzbyB0aGV5IHdvbid0IGJlIHJldHJpZWQgLi4uCi0JICoKLQkgKiBDb25jbHVzaW9uOiBlaXRoZXIgc2NzaS5jIGRpc2FibGVzIHRpbWVvdXQgZm9yIGFsbCByZXNldHRlZCBjb21tYW5kcwotCSAqIGltbWVkaWF0ZWx5LCBvciB3ZSBsb3NlISAgQXMgb2YgbGludXgtMi4wLjIwIGl0IGRvZXNuJ3QuCi0JICovCi0KIAkvKiBBZnRlciB0aGUgcmVzZXQsIHRoZXJlIGFyZSBubyBtb3JlIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgY29tbWFuZHMKIAkgKiBhbmQgbm8gYnVzeSB1bml0czsgc28gY2xlYXIgdGhlIGxvdy1sZXZlbCBzdGF0dXMgaGVyZSB0byBhdm9pZAogCSAqIGNvbmZsaWN0cyB3aGVuIHRoZSBtaWQtbGV2ZWwgY29kZSB0cmllcyB0byB3YWtlIHVwIHRoZSBhZmZlY3RlZApAQCAtMjk1NCwxNiArMjkxMiwxNiBAQAogCWhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwogCWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBOVUxMOwogI2lmZGVmIFNVUFBPUlRfVEFHUwotCWZyZWVfYWxsX3RhZ3MoKTsKKwlmcmVlX2FsbF90YWdzKGhvc3RkYXRhKTsKICNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCiAJCWhvc3RkYXRhLT5idXN5W2ldID0gMDsKICNpZmRlZiBSRUFMX0RNQQogCWhvc3RkYXRhLT5kbWFfbGVuID0gMDsKICNlbmRpZgorCisJbWF5YmVfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQkvKiB3ZSBkaWQgbm8gY29tcGxldGUgcmVzZXQgb2YgYWxsIGNvbW1hbmRzLCBzbyBhIHdha2V1cCBpcyByZXF1aXJlZCAqLwogCXJldHVybiBTVUNDRVNTOwotI2VuZGlmIC8qIDEgKi8KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCmluZGV4IGI1MjIxMzQuLmQxYzM3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwpAQCAtNjQsNDUgKzY0LDU3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNkZWZpbmUgQVVUT1NFTlNFCi0vKiBGb3IgdGhlIEF0YXJpIHZlcnNpb24sIHVzZSBvbmx5IHBvbGxlZCBJTyBvciBSRUFMX0RNQSAqLwotI2RlZmluZQlSRUFMX0RNQQotLyogU3VwcG9ydCB0YWdnZWQgcXVldWluZz8gKG9uIGRldmljZXMgdGhhdCBhcmUgYWJsZSB0by4uLiA6LSkgKi8KLSNkZWZpbmUJU1VQUE9SVF9UQUdTCi0jZGVmaW5lCU1BWF9UQUdTIDMyCi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9udnJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+CiAjaW5jbHVkZSA8YXNtL2F0YXJpaW50cy5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3RyYXBzLmg+Ci0KLSNpbmNsdWRlICJzY3NpLmgiCi0jaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KLSNpbmNsdWRlICJhdGFyaV9zY3NpLmgiCi0jaW5jbHVkZSAiTkNSNTM4MC5oIgogI2luY2x1ZGUgPGFzbS9hdGFyaV9zdGRtYS5oPgogI2luY2x1ZGUgPGFzbS9hdGFyaV9zdHJhbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgY29yZSBOQ1I1MzgwIGRyaXZlci4gKi8KKworI2RlZmluZSBSRUFMX0RNQQorI2RlZmluZSBTVVBQT1JUX1RBR1MKKyNkZWZpbmUgTUFYX1RBR1MgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBETUFfTUlOX1NJWkUgICAgICAgICAgICAgICAgICAgIDMyCisKKyNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMgICAvKiBub25lICovCisKKyNkZWZpbmUgTkNSNTM4MF9yZWFkKHJlZykgICAgICAgICAgICAgICBhdGFyaV9zY3NpX3JlZ19yZWFkKHJlZykKKyNkZWZpbmUgTkNSNTM4MF93cml0ZShyZWcsIHZhbHVlKSAgICAgICBhdGFyaV9zY3NpX3JlZ193cml0ZShyZWcsIHZhbHVlKQorCisjZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZCAgICAgICAgICAgYXRhcmlfc2NzaV9xdWV1ZV9jb21tYW5kCisjZGVmaW5lIE5DUjUzODBfYWJvcnQgICAgICAgICAgICAgICAgICAgYXRhcmlfc2NzaV9hYm9ydAorI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyAgICAgICAgICAgICAgIGF0YXJpX3Njc2lfc2hvd19pbmZvCisjZGVmaW5lIE5DUjUzODBfaW5mbyAgICAgICAgICAgICAgICAgICAgYXRhcmlfc2NzaV9pbmZvCisKKyNkZWZpbmUgTkNSNTM4MF9kbWFfcmVhZF9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIFwKKyAgICAgICAgYXRhcmlfc2NzaV9kbWFfc2V0dXAoaW5zdGFuY2UsIGRhdGEsIGNvdW50LCAwKQorI2RlZmluZSBOQ1I1MzgwX2RtYV93cml0ZV9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIFwKKyAgICAgICAgYXRhcmlfc2NzaV9kbWFfc2V0dXAoaW5zdGFuY2UsIGRhdGEsIGNvdW50LCAxKQorI2RlZmluZSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSkgXAorICAgICAgICBhdGFyaV9zY3NpX2RtYV9yZXNpZHVhbChpbnN0YW5jZSkKKyNkZWZpbmUgTkNSNTM4MF9kbWFfeGZlcl9sZW4oaW5zdGFuY2UsIGNtZCwgcGhhc2UpIFwKKyAgICAgICAgYXRhcmlfZG1hX3hmZXJfbGVuKGNtZC0+U0NwLnRoaXNfcmVzaWR1YWwsIGNtZCwgISgocGhhc2UpICYgU1JfSU8pKQorCisjZGVmaW5lIE5DUjUzODBfYWNxdWlyZV9kbWFfaXJxKGluc3RhbmNlKSAgICAgIGZhbGNvbl9nZXRfbG9jayhpbnN0YW5jZSkKKyNkZWZpbmUgTkNSNTM4MF9yZWxlYXNlX2RtYV9pcnEoaW5zdGFuY2UpICAgICAgZmFsY29uX3JlbGVhc2VfbG9jaygpCisKKyNpbmNsdWRlICJOQ1I1MzgwLmgiCisKIAogI2RlZmluZQlJU19BX1RUKCkJQVRBUklIV19QUkVTRU5UKFRUX1NDU0kpCiAKQEAgLTE0OSwyMyArMTYxLDYgQEAKIAlyZXR1cm4gYWRyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgRU5BQkxFX0lSUSh2b2lkKQotewotCWlmIChJU19BX1RUKCkpCi0JCWF0YXJpX2VuYWJsZV9pcnEoSVJRX1RUX01GUF9TQ1NJKTsKLQllbHNlCi0JCWF0YXJpX2VuYWJsZV9pcnEoSVJRX01GUF9GU0NTSSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBESVNBQkxFX0lSUSh2b2lkKQotewotCWlmIChJU19BX1RUKCkpCi0JCWF0YXJpX2Rpc2FibGVfaXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0JZWxzZQotCQlhdGFyaV9kaXNhYmxlX2lycShJUlFfTUZQX0ZTQ1NJKTsKLX0KLQotCiAjZGVmaW5lIEhPU1REQVRBX0RNQUxFTgkJKCgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgXAogCQkJCShhdGFyaV9zY3NpX2hvc3QtPmhvc3RkYXRhKSktPmRtYV9sZW4pCiAKQEAgLTE3OCwzMCArMTczLDkgQEAKICNkZWZpbmUJQUZURVJfUkVTRVRfREVMQVkJKDUqSFovMikKICNlbmRpZgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogI2lmZGVmIFJFQUxfRE1BCi1zdGF0aWMgaW50IHNjc2lfZG1hX2lzX2lnbm9yZWRfYnVzZXJyKHVuc2lnbmVkIGNoYXIgZG1hX3N0YXQpOwogc3RhdGljIHZvaWQgYXRhcmlfc2NzaV9mZXRjaF9yZXN0Ynl0ZXModm9pZCk7Ci1zdGF0aWMgbG9uZyBhdGFyaV9zY3NpX2RtYV9yZXNpZHVhbChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSk7Ci1zdGF0aWMgaW50IGZhbGNvbl9jbGFzc2lmeV9jbWQoU2NzaV9DbW5kICpjbWQpOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYXRhcmlfZG1hX3hmZXJfbGVuKHVuc2lnbmVkIGxvbmcgd2FudGVkX2xlbiwKLQkJCQkJU2NzaV9DbW5kICpjbWQsIGludCB3cml0ZV9mbGFnKTsKICNlbmRpZgotc3RhdGljIGlycXJldHVybl90IHNjc2lfdHRfaW50cihpbnQgaXJxLCB2b2lkICpkdW1teSk7Ci1zdGF0aWMgaXJxcmV0dXJuX3Qgc2NzaV9mYWxjb25faW50cihpbnQgaXJxLCB2b2lkICpkdW1teSk7Ci1zdGF0aWMgdm9pZCBmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSk7Ci1zdGF0aWMgdm9pZCBmYWxjb25fZ2V0X2xvY2sodm9pZCk7Ci0jaWZkZWYgQ09ORklHX0FUQVJJX1NDU0lfUkVTRVRfQk9PVAotc3RhdGljIHZvaWQgYXRhcmlfc2NzaV9yZXNldF9ib290KHZvaWQpOwotI2VuZGlmCi1zdGF0aWMgdW5zaWduZWQgY2hhciBhdGFyaV9zY3NpX3R0X3JlZ19yZWFkKHVuc2lnbmVkIGNoYXIgcmVnKTsKLXN0YXRpYyB2b2lkIGF0YXJpX3Njc2lfdHRfcmVnX3dyaXRlKHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbHVlKTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGF0YXJpX3Njc2lfZmFsY29uX3JlZ19yZWFkKHVuc2lnbmVkIGNoYXIgcmVnKTsKLXN0YXRpYyB2b2lkIGF0YXJpX3Njc2lfZmFsY29uX3JlZ193cml0ZSh1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWx1ZSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvZiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiAKIHN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICphdGFyaV9zY3NpX2hvc3Q7CiBzdGF0aWMgdW5zaWduZWQgY2hhciAoKmF0YXJpX3Njc2lfcmVnX3JlYWQpKHVuc2lnbmVkIGNoYXIgcmVnKTsKQEAgLTIyNiw4ICsyMDAsNiBAQAogLyogbWFzayBmb3IgYWRkcmVzcyBiaXRzIHRoYXQgY2FuJ3QgYmUgdXNlZCB3aXRoIHRoZSBTVC1ETUEgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nCWF0YXJpX2RtYV9zdHJhbV9tYXNrOwogI2RlZmluZSBTVFJBTV9BRERSKGEpCSgoKGEpICYgYXRhcmlfZG1hX3N0cmFtX21hc2spID09IDApCi0vKiBudW1iZXIgb2YgYnl0ZXMgdG8gY3V0IGZyb20gYSB0cmFuc2ZlciB0byBoYW5kbGUgTkNSIG92ZXJydW5zICovCi1zdGF0aWMgaW50IGF0YXJpX3JlYWRfb3ZlcnJ1bnM7CiAjZW5kaWYKIAogc3RhdGljIGludCBzZXR1cF9jYW5fcXVldWUgPSAtMTsKQEAgLTM4NiwxMCArMzU4LDYgQEAKIAogCU5DUjUzODBfaW50cihpcnEsIGR1bW15KTsKIAotI2lmIDAKLQkvKiBUbyBiZSBzdXJlIHRoZSBpbnQgaXMgbm90IG1hc2tlZCAqLwotCWF0YXJpX2VuYWJsZV9pcnEoSVJRX1RUX01GUF9TQ1NJKTsKLSNlbmRpZgogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNDgwLDI1NyArNDQ4LDM1IEBACiAjZW5kaWYgLyogUkVBTF9ETUEgKi8KIAogCi1zdGF0aWMgaW50IGZhbGNvbl9nb3RfbG9jayA9IDA7Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoZmFsY29uX2ZhaXJuZXNzX3dhaXQpOwotc3RhdGljIGludCBmYWxjb25fdHJ5aW5nX2xvY2sgPSAwOwotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGZhbGNvbl90cnlfd2FpdCk7Ci1zdGF0aWMgaW50IGZhbGNvbl9kb250X3JlbGVhc2UgPSAwOwotCiAvKiBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBsb2NrIG9uIHRoZSBETUEgY2hpcCBpZiB0aGVyZSBpcyBubwotICogY29ubmVjdGVkIGNvbW1hbmQgYW5kIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUgaXMgZW1wdHkuIE9uCi0gKiByZWxlYXNpbmcsIGluc3RhbmNlcyBvZiBmYWxjb25fZ2V0X2xvY2sgYXJlIGF3b2tlbiwgdGhhdCBwdXQKLSAqIHRoZW1zZWx2ZXMgdG8gc2xlZXAgZm9yIGZhaXJuZXNzLiBUaGV5IGNhbiBub3cgdHJ5IHRvIGdldCB0aGUgbG9jawotICogYWdhaW4gKGJ1dCBvdGhlcnMgd2FpdGluZyBsb25nZXIgbW9yZSBwcm9iYWJseSB3aWxsIHdpbikuCisgKiBjb25uZWN0ZWQgY29tbWFuZCBhbmQgdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZSBpcyBlbXB0eS4KICAqLwogCi1zdGF0aWMgdm9pZCBmYWxjb25fcmVsZWFzZV9sb2NrX2lmX3Bvc3NpYmxlKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSkKK3N0YXRpYyB2b2lkIGZhbGNvbl9yZWxlYXNlX2xvY2sodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJaWYgKElTX0FfVFQoKSkKIAkJcmV0dXJuOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JaWYgKGZhbGNvbl9nb3RfbG9jayAmJiAhaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSAmJgotCSAgICAhaG9zdGRhdGEtPmlzc3VlX3F1ZXVlICYmICFob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0KLQkJaWYgKGZhbGNvbl9kb250X3JlbGVhc2UpIHsKLSNpZiAwCi0JCQlwcmludGsoIldBUk5JTkc6IExvY2sgcmVsZWFzZSBub3QgYWxsb3dlZC4gSWdub3JlZFxuIik7Ci0jZW5kaWYKLQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJCXJldHVybjsKLQkJfQotCQlmYWxjb25fZ290X2xvY2sgPSAwOworCWlmIChzdGRtYV9pc19sb2NrZWRfYnkoc2NzaV9mYWxjb25faW50cikpCiAJCXN0ZG1hX3JlbGVhc2UoKTsKLQkJd2FrZV91cCgmZmFsY29uX2ZhaXJuZXNzX3dhaXQpOwotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBtYW5hZ2VzIHRoZSBsb2NraW5nIG9mIHRoZSBTVC1ETUEuCiAgKiBJZiB0aGUgRE1BIGlzbid0IGxvY2tlZCBhbHJlYWR5IGZvciBTQ1NJLCBpdCB0cmllcyB0byBsb2NrIGl0IGJ5CiAgKiBjYWxsaW5nIHN0ZG1hX2xvY2soKS4gQnV0IGlmIHRoZSBETUEgaXMgbG9ja2VkIGJ5IHRoZSBTQ1NJIGNvZGUgYW5kCiAgKiB0aGVyZSBhcmUgb3RoZXIgZHJpdmVycyB3YWl0aW5nIGZvciB0aGUgY2hpcCwgd2UgZG8gbm90IGlzc3VlIHRoZQotICogY29tbWFuZCBpbW1lZGlhdGVseSBidXQgd2FpdCBvbiAnZmFsY29uX2ZhaXJuZXNzX3F1ZXVlJy4gV2Ugd2lsbCBiZQotICogd2FrZWQgdXAgd2hlbiB0aGUgRE1BIGlzIHVubG9ja2VkIGJ5IHNvbWUgU0NTSSBpbnRlcnJ1cHQuIEFmdGVyIHRoYXQKLSAqIHdlIHRyeSB0byBnZXQgdGhlIGxvY2sgYWdhaW4uCi0gKiBCdXQgd2UgbXVzdCBiZSBwcmVwYXJlZCB0aGF0IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YKLSAqIGZhbGNvbl9nZXRfbG9jaygpIGlzIHdhaXRpbmcgb24gdGhlIGZhaXJuZXNzIHF1ZXVlLiBUaGV5IHNob3VsZCBub3QKLSAqIHRyeSBhbGwgYXQgb25jZSB0byBjYWxsIHN0ZG1hX2xvY2soKSwgb25lIGlzIGVub3VnaCEgRm9yIHRoYXQsIHRoZQotICogZmlyc3Qgb25lIHNldHMgJ2ZhbGNvbl90cnlpbmdfbG9jaycsIG90aGVycyB0aGF0IHNlZSB0aGF0IHZhcmlhYmxlCi0gKiBzZXQgd2FpdCBvbiB0aGUgcXVldWUgJ2ZhbGNvbl90cnlfd2FpdCcuCi0gKiBDb21wbGljYXRlZCwgY29tcGxpY2F0ZWQuLi4uIFNpZ2guLi4KKyAqIGNvbW1hbmQgaW1tZWRpYXRlbHkgYnV0IHRlbGwgdGhlIFNDU0kgbWlkLWxheWVyIHRvIGRlZmVyLgogICovCiAKLXN0YXRpYyB2b2lkIGZhbGNvbl9nZXRfbG9jayh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoSVNfQV9UVCgpKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQl3YWl0X2V2ZW50X2NtZChmYWxjb25fZmFpcm5lc3Nfd2FpdCwKLQkJaW5faW50ZXJydXB0KCkgfHwgIWZhbGNvbl9nb3RfbG9jayB8fCAhc3RkbWFfb3RoZXJzX3dhaXRpbmcoKSwKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpLAotCQlsb2NhbF9pcnFfc2F2ZShmbGFncykpOwotCi0Jd2hpbGUgKCFmYWxjb25fZ290X2xvY2spIHsKLQkJaWYgKGluX2lycSgpKQotCQkJcGFuaWMoIkZhbGNvbiBTQ1NJIGhhc24ndCBTVC1ETUEgbG9jayBpbiBpbnRlcnJ1cHQiKTsKLQkJaWYgKCFmYWxjb25fdHJ5aW5nX2xvY2spIHsKLQkJCWZhbGNvbl90cnlpbmdfbG9jayA9IDE7Ci0JCQlzdGRtYV9sb2NrKHNjc2lfZmFsY29uX2ludHIsIE5VTEwpOwotCQkJZmFsY29uX2dvdF9sb2NrID0gMTsKLQkJCWZhbGNvbl90cnlpbmdfbG9jayA9IDA7Ci0JCQl3YWtlX3VwKCZmYWxjb25fdHJ5X3dhaXQpOwotCQl9IGVsc2UgewotCQkJd2FpdF9ldmVudF9jbWQoZmFsY29uX3RyeV93YWl0LAotCQkJCWZhbGNvbl9nb3RfbG9jayAmJiAhZmFsY29uX3RyeWluZ19sb2NrLAotCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKSwKLQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncykpOwotCQl9Ci0JfQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCWlmICghZmFsY29uX2dvdF9sb2NrKQotCQlwYW5pYygiRmFsY29uIFNDU0k6IHNvbWVvbmUgc3RvbGUgdGhlIGxvY2sgOi0oXG4iKTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBhdGFyaV9zY3NpX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0KQotewotCXN0YXRpYyBpbnQgY2FsbGVkID0gMDsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZTsKLQotCWlmICghTUFDSF9JU19BVEFSSSB8fAotCSAgICAoIUFUQVJJSFdfUFJFU0VOVChTVF9TQ1NJKSAmJiAhQVRBUklIV19QUkVTRU5UKFRUX1NDU0kpKSB8fAotCSAgICBjYWxsZWQpCi0JCXJldHVybiAwOwotCi0JaG9zdC0+cHJvY19uYW1lID0gIkF0YXJpIjsKLQotCWF0YXJpX3Njc2lfcmVnX3JlYWQgID0gSVNfQV9UVCgpID8gYXRhcmlfc2NzaV90dF9yZWdfcmVhZCA6Ci0JCQkJCSAgIGF0YXJpX3Njc2lfZmFsY29uX3JlZ19yZWFkOwotCWF0YXJpX3Njc2lfcmVnX3dyaXRlID0gSVNfQV9UVCgpID8gYXRhcmlfc2NzaV90dF9yZWdfd3JpdGUgOgotCQkJCQkgICBhdGFyaV9zY3NpX2ZhbGNvbl9yZWdfd3JpdGU7Ci0KLQkvKiBzZXR1cCB2YXJpYWJsZXMgKi8KLQlob3N0LT5jYW5fcXVldWUgPQotCQkoc2V0dXBfY2FuX3F1ZXVlID4gMCkgPyBzZXR1cF9jYW5fcXVldWUgOgotCQlJU19BX1RUKCkgPyBBVEFSSV9UVF9DQU5fUVVFVUUgOiBBVEFSSV9GQUxDT05fQ0FOX1FVRVVFOwotCWhvc3QtPmNtZF9wZXJfbHVuID0KLQkJKHNldHVwX2NtZF9wZXJfbHVuID4gMCkgPyBzZXR1cF9jbWRfcGVyX2x1biA6Ci0JCUlTX0FfVFQoKSA/IEFUQVJJX1RUX0NNRF9QRVJfTFVOIDogQVRBUklfRkFMQ09OX0NNRF9QRVJfTFVOOwotCS8qIEZvcmNlIHNnX3RhYmxlc2l6ZSB0byAwIG9uIGEgRmFsY29uISAqLwotCWhvc3QtPnNnX3RhYmxlc2l6ZSA9Ci0JCSFJU19BX1RUKCkgPyBBVEFSSV9GQUxDT05fU0dfVEFCTEVTSVpFIDoKLQkJKHNldHVwX3NnX3RhYmxlc2l6ZSA+PSAwKSA/IHNldHVwX3NnX3RhYmxlc2l6ZSA6IEFUQVJJX1RUX1NHX1RBQkxFU0laRTsKLQotCWlmIChzZXR1cF9ob3N0aWQgPj0gMCkKLQkJaG9zdC0+dGhpc19pZCA9IHNldHVwX2hvc3RpZDsKLQllbHNlIHsKLQkJLyogdXNlIDcgYXMgZGVmYXVsdCAqLwotCQlob3N0LT50aGlzX2lkID0gNzsKLQkJLyogVGVzdCBpZiBhIGhvc3QgaWQgaXMgc2V0IGluIHRoZSBOVlJhbSAqLwotCQlpZiAoQVRBUklIV19QUkVTRU5UKFRUX0NMSykgJiYgbnZyYW1fY2hlY2tfY2hlY2tzdW0oKSkgewotCQkJdW5zaWduZWQgY2hhciBiID0gbnZyYW1fcmVhZF9ieXRlKCAxNCApOwotCQkJLyogQXJiaXRyYXRpb24gZW5hYmxlZD8gKGZvciBUT1MpIElmIHllcywgdXNlIGNvbmZpZ3VyZWQgaG9zdCBJRCAqLwotCQkJaWYgKGIgJiAweDgwKQotCQkJCWhvc3QtPnRoaXNfaWQgPSBiICYgNzsKLQkJfQotCX0KLQotI2lmZGVmIFNVUFBPUlRfVEFHUwotCWlmIChzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPCAwKQotCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBERUZBVUxUX1VTRV9UQUdHRURfUVVFVUlORzsKLSNlbmRpZgotI2lmZGVmIFJFQUxfRE1BCi0JLyogSWYgcnVubmluZyBvbiBhIEZhbGNvbiBhbmQgaWYgdGhlcmUncyBUVC1SYW0gKGkuZS4sIG1vcmUgdGhhbiBvbmUKLQkgKiBtZW1vcnkgYmxvY2ssIHNpbmNlIHRoZXJlJ3MgYWx3YXlzIFNULVJhbSBpbiBhIEZhbGNvbiksIHRoZW4gYWxsb2NhdGUgYQotCSAqIFNUUkFNX0JVRkZFUl9TSVpFIGJ5dGUgZHJpYmJsZSBidWZmZXIgZm9yIHRyYW5zZmVycyBmcm9tL3RvIGFsdGVybmF0aXZlCi0JICogUmFtLgotCSAqLwotCWlmIChNQUNIX0lTX0FUQVJJICYmIEFUQVJJSFdfUFJFU0VOVChTVF9TQ1NJKSAmJgotCSAgICAhQVRBUklIV19QUkVTRU5UKEVYVERfRE1BKSAmJiBtNjhrX251bV9tZW1vcnkgPiAxKSB7Ci0JCWF0YXJpX2RtYV9idWZmZXIgPSBhdGFyaV9zdHJhbV9hbGxvYyhTVFJBTV9CVUZGRVJfU0laRSwgIlNDU0kiKTsKLQkJaWYgKCFhdGFyaV9kbWFfYnVmZmVyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImF0YXJpX3Njc2lfZGV0ZWN0OiBjYW4ndCBhbGxvY2F0ZSBTVC1SQU0gIgotCQkJCQkiZG91YmxlIGJ1ZmZlclxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlhdGFyaV9kbWFfcGh5c19idWZmZXIgPSBhdGFyaV9zdHJhbV90b19waHlzKGF0YXJpX2RtYV9idWZmZXIpOwotCQlhdGFyaV9kbWFfb3JpZ19hZGRyID0gMDsKLQl9Ci0jZW5kaWYKLQlpbnN0YW5jZSA9IHNjc2lfcmVnaXN0ZXIoaG9zdCwgc2l6ZW9mKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhKSk7Ci0JaWYgKGluc3RhbmNlID09IE5VTEwpIHsKLQkJYXRhcmlfc3RyYW1fZnJlZShhdGFyaV9kbWFfYnVmZmVyKTsKLQkJYXRhcmlfZG1hX2J1ZmZlciA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQlhdGFyaV9zY3NpX2hvc3QgPSBpbnN0YW5jZTsKLQkvKgotCSAqIFNldCBpcnEgdG8gMCwgdG8gYXZvaWQgdGhhdCB0aGUgbWlkLWxldmVsIGNvZGUgZGlzYWJsZXMgb3VyIGludGVycnVwdAotCSAqIGR1cmluZyBxdWV1ZV9jb21tYW5kIGNhbGxzLiBUaGlzIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnksIGFuZCBldmVuCi0JICogd29yc2UgY2F1c2VzIGJhZCBwcm9ibGVtcyBvbiB0aGUgRmFsY29uLCB3aGVyZSB0aGUgaW50IGlzIHNoYXJlZCB3aXRoCi0JICogSURFIGFuZCBmbG9wcHkhCi0JICovCi0gICAgICAgaW5zdGFuY2UtPmlycSA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfQVRBUklfU0NTSV9SRVNFVF9CT09UCi0JYXRhcmlfc2NzaV9yZXNldF9ib290KCk7Ci0jZW5kaWYKLQlOQ1I1MzgwX2luaXQoaW5zdGFuY2UsIDApOwotCi0JaWYgKElTX0FfVFQoKSkgewotCi0JCS8qIFRoaXMgaW50IGlzIGFjdHVhbGx5ICJwc2V1ZG8tc2xvdyIsIGkuZS4gaXQgYWN0cyBsaWtlIGEgc2xvdwotCQkgKiBpbnRlcnJ1cHQgYWZ0ZXIgaGF2aW5nIGNsZWFyZWQgdGhlIHBlbmRpbmcgZmxhZyBmb3IgdGhlIERNQQotCQkgKiBpbnRlcnJ1cHQuICovCi0JCWlmIChyZXF1ZXN0X2lycShJUlFfVFRfTUZQX1NDU0ksIHNjc2lfdHRfaW50ciwgSVJRX1RZUEVfU0xPVywKLQkJCQkgIlNDU0kgTkNSNTM4MCIsIGluc3RhbmNlKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJhdGFyaV9zY3NpX2RldGVjdDogY2Fubm90IGFsbG9jYXRlIGlycSAlZCwgYWJvcnRpbmciLElSUV9UVF9NRlBfU0NTSSk7Ci0JCQlzY3NpX3VucmVnaXN0ZXIoYXRhcmlfc2NzaV9ob3N0KTsKLQkJCWF0YXJpX3N0cmFtX2ZyZWUoYXRhcmlfZG1hX2J1ZmZlcik7Ci0JCQlhdGFyaV9kbWFfYnVmZmVyID0gMDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXR0X21mcC5hY3RpdmVfZWRnZSB8PSAweDgwOwkJLyogU0NTSSBpbnQgb24gTC0+SCAqLwotI2lmZGVmIFJFQUxfRE1BCi0JCXR0X3Njc2lfZG1hLmRtYV9jdHJsID0gMDsKLQkJYXRhcmlfZG1hX3Jlc2lkdWFsID0gMDsKLQotCQlpZiAoTUFDSF9JU19NRURVU0EpIHsKLQkJCS8qIFdoaWxlIHRoZSByZWFkIG92ZXJydW5zIChkZXNjcmliZWQgYnkgRHJldyBFY2toYXJkdCBpbgotCQkJICogTkNSNTM4MC5jKSBuZXZlciBoYXBwZW5lZCBvbiBUVHMsIHRoZXkgZG8gaW4gZmFjdCBvbiB0aGUgTWVkdXNhCi0JCQkgKiAoVGhpcyB3YXMgdGhlIGNhdXNlIHdoeSBTQ1NJIGRpZG4ndCB3b3JrIHJpZ2h0IGZvciBzbyBsb25nCi0JCQkgKiB0aGVyZS4pIFNpbmNlIGhhbmRsaW5nIHRoZSBvdmVycnVucyBzbG93cyBkb3duIGEgYml0LCBJIHR1cm5lZAotCQkJICogdGhlICNpZmRlZidzIGludG8gYSBydW50aW1lIGNvbmRpdGlvbi4KLQkJCSAqCi0JCQkgKiBJbiBwcmluY2lwbGUgaXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZG8gbWF4LiAxIGJ5dGUgd2l0aAotCQkJICogUElPLCBidXQgdGhlcmUgaXMgYW5vdGhlciBwcm9ibGVtIG9uIHRoZSBNZWR1c2Egd2l0aCB0aGUgRE1BCi0JCQkgKiByZXN0IGRhdGEgcmVnaXN0ZXIuIFNvICdhdGFyaV9yZWFkX292ZXJydW5zJyBpcyBjdXJyZW50bHkgc2V0Ci0JCQkgKiB0byA0IHRvIGF2b2lkIGhhdmluZyB0cmFuc2ZlcnMgdGhhdCBhcmVuJ3QgYSBtdWx0aXBsZSBvZiA0LiBJZgotCQkJICogdGhlIHJlc3QgZGF0YSBidWcgaXMgZml4ZWQsIHRoaXMgY2FuIGJlIGxvd2VyZWQgdG8gMS4KLQkJCSAqLwotCQkJYXRhcmlfcmVhZF9vdmVycnVucyA9IDQ7Ci0JCX0KLSNlbmRpZiAvKlJFQUxfRE1BKi8KLQl9IGVsc2UgeyAvKiAhIElTX0FfVFQgKi8KLQotCQkvKiBOb3RoaW5nIHRvIGRvIGZvciB0aGUgaW50ZXJydXB0OiB0aGUgU1QtRE1BIGlzIGluaXRpYWxpemVkCi0JCSAqIGFscmVhZHkgYnkgYXRhcmlfaW5pdF9JTlRTKCkKLQkJICovCi0KLSNpZmRlZiBSRUFMX0RNQQotCQlhdGFyaV9kbWFfcmVzaWR1YWwgPSAwOwotCQlhdGFyaV9kbWFfYWN0aXZlID0gMDsKLQkJYXRhcmlfZG1hX3N0cmFtX21hc2sgPSAoQVRBUklIV19QUkVTRU5UKEVYVERfRE1BKSA/IDB4MDAwMDAwMDAKLQkJCQkJOiAweGZmMDAwMDAwKTsKLSNlbmRpZgotCX0KLQotCXByaW50ayhLRVJOX0lORk8gInNjc2klZDogb3B0aW9ucyBDQU5fUVVFVUU9JWQgQ01EX1BFUl9MVU49JWQgU0NBVC1HQVQ9JWQgIgotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkJIlRBR0dFRC1RVUVVSU5HPSVzICIKLSNlbmRpZgotCQkJIkhPU1RJRD0lZCIsCi0JCQlpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmhvc3R0LT5jYW5fcXVldWUsCi0JCQlpbnN0YW5jZS0+aG9zdHQtPmNtZF9wZXJfbHVuLAotCQkJaW5zdGFuY2UtPmhvc3R0LT5zZ190YWJsZXNpemUsCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPyAieWVzIiA6ICJubyIsCi0jZW5kaWYKLQkJCWluc3RhbmNlLT5ob3N0dC0+dGhpc19pZCApOwotCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JcHJpbnRrKCJcbiIpOwotCi0JY2FsbGVkID0gMTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBhdGFyaV9zY3NpX3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqc2gpCitzdGF0aWMgaW50IGZhbGNvbl9nZXRfbG9jayhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKIHsKIAlpZiAoSVNfQV9UVCgpKQotCQlmcmVlX2lycShJUlFfVFRfTUZQX1NDU0ksIHNoKTsKLQlpZiAoYXRhcmlfZG1hX2J1ZmZlcikKLQkJYXRhcmlfc3RyYW1fZnJlZShhdGFyaV9kbWFfYnVmZmVyKTsKLQlOQ1I1MzgwX2V4aXQoc2gpOworCQlyZXR1cm4gMTsKKworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJcmV0dXJuIHN0ZG1hX3RyeV9sb2NrKHNjc2lfZmFsY29uX2ludHIsIGluc3RhbmNlKTsKKworCXN0ZG1hX2xvY2soc2NzaV9mYWxjb25faW50ciwgaW5zdGFuY2UpOwogCXJldHVybiAxOwogfQogCkBAIC03MzksNyArNDg1LDcgQEAKIHsKIAkvKiBGb3JtYXQgb2YgYXRhc2NzaSBwYXJhbWV0ZXIgaXM6CiAJICogICBhdGFzY3NpPTxjYW5fcXVldWU+LDxjbWRfcGVyX2x1bj4sPHNnX3RhYmxlc2l6ZT4sPGhvc3RpZD4sPHVzZV90YWdzPgotCSAqIERlZmF1bHRzIGRlcGVuZCBvbiBUVCBvciBGYWxjb24sIGhvc3RpZCBkZXRlcm1pbmVkIGF0IHJ1biB0aW1lLgorCSAqIERlZmF1bHRzIGRlcGVuZCBvbiBUVCBvciBGYWxjb24sIGRldGVybWluZWQgYXQgcnVuIHRpbWUuCiAJICogTmVnYXRpdmUgdmFsdWVzIG1lYW4gZG9uJ3QgY2hhbmdlLgogCSAqLwogCWludCBpbnRzWzZdOwpAQCAtNzUwLDM2ICs0OTYsMTcgQEAKIAkJcHJpbnRrKCJhdGFyaV9zY3NpX3NldHVwOiBubyBhcmd1bWVudHMhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCi0JaWYgKGludHNbMF0gPj0gMSkgewotCQlpZiAoaW50c1sxXSA+IDApCi0JCQkvKiBubyBsaW1pdHMgb24gdGhpcywganVzdCA+IDAgKi8KLQkJCXNldHVwX2Nhbl9xdWV1ZSA9IGludHNbMV07Ci0JfQotCWlmIChpbnRzWzBdID49IDIpIHsKLQkJaWYgKGludHNbMl0gPiAwKQotCQkJc2V0dXBfY21kX3Blcl9sdW4gPSBpbnRzWzJdOwotCX0KLQlpZiAoaW50c1swXSA+PSAzKSB7Ci0JCWlmIChpbnRzWzNdID49IDApIHsKLQkJCXNldHVwX3NnX3RhYmxlc2l6ZSA9IGludHNbM107Ci0JCQkvKiBNdXN0IGJlIDw9IFNHX0FMTCAoMjU1KSAqLwotCQkJaWYgKHNldHVwX3NnX3RhYmxlc2l6ZSA+IFNHX0FMTCkKLQkJCQlzZXR1cF9zZ190YWJsZXNpemUgPSBTR19BTEw7Ci0JCX0KLQl9Ci0JaWYgKGludHNbMF0gPj0gNCkgewotCQkvKiBNdXN0IGJlIGJldHdlZW4gMCBhbmQgNyAqLwotCQlpZiAoaW50c1s0XSA+PSAwICYmIGludHNbNF0gPD0gNykKLQkJCXNldHVwX2hvc3RpZCA9IGludHNbNF07Ci0JCWVsc2UgaWYgKGludHNbNF0gPiA3KQotCQkJcHJpbnRrKCJhdGFyaV9zY3NpX3NldHVwOiBpbnZhbGlkIGhvc3QgSUQgJWQgIVxuIiwgaW50c1s0XSk7Ci0JfQorCWlmIChpbnRzWzBdID49IDEpCisJCXNldHVwX2Nhbl9xdWV1ZSA9IGludHNbMV07CisJaWYgKGludHNbMF0gPj0gMikKKwkJc2V0dXBfY21kX3Blcl9sdW4gPSBpbnRzWzJdOworCWlmIChpbnRzWzBdID49IDMpCisJCXNldHVwX3NnX3RhYmxlc2l6ZSA9IGludHNbM107CisJaWYgKGludHNbMF0gPj0gNCkKKwkJc2V0dXBfaG9zdGlkID0gaW50c1s0XTsKICNpZmRlZiBTVVBQT1JUX1RBR1MKLQlpZiAoaW50c1swXSA+PSA1KSB7Ci0JCWlmIChpbnRzWzVdID49IDApCi0JCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSAhIWludHNbNV07Ci0JfQorCWlmIChpbnRzWzBdID49IDUpCisJCXNldHVwX3VzZV90YWdnZWRfcXVldWluZyA9IGludHNbNV07CiAjZW5kaWYKIAogCXJldHVybiAxOwpAQCAtNzg4LDQ1ICs1MTUsNiBAQAogX19zZXR1cCgiYXRhc2NzaT0iLCBhdGFyaV9zY3NpX3NldHVwKTsKICNlbmRpZiAvKiAhTU9EVUxFICovCiAKLXN0YXRpYyBpbnQgYXRhcmlfc2NzaV9idXNfcmVzZXQoU2NzaV9DbW5kICpjbWQpCi17Ci0JaW50IHJ2OwotCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9Ci0JCShzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQotCS8qIEZvciBkb2luZyB0aGUgcmVzZXQsIFNDU0kgaW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkIGZpcnN0LAotCSAqIHNpbmNlIHRoZSA1MzgwIHJhaXNlcyBpdHMgSVJRIGxpbmUgd2hpbGUgX1JTVCBpcyBhY3RpdmUgYW5kIHdlCi0JICogY2FuJ3QgZGlzYWJsZSBpbnRlcnJ1cHRzIGNvbXBsZXRlbHksIHNpbmNlIHdlIG5lZWQgdGhlIHRpbWVyLgotCSAqLwotCS8qIEFuZCBhYm9ydCBhIG1heWJlIGFjdGl2ZSBETUEgdHJhbnNmZXIgKi8KLQlpZiAoSVNfQV9UVCgpKSB7Ci0JCWF0YXJpX3R1cm5vZmZfaXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0jaWZkZWYgUkVBTF9ETUEKLQkJdHRfc2NzaV9kbWEuZG1hX2N0cmwgPSAwOwotI2VuZGlmIC8qIFJFQUxfRE1BICovCi0JfSBlbHNlIHsKLQkJYXRhcmlfdHVybm9mZl9pcnEoSVJRX01GUF9GU0NTSSk7Ci0jaWZkZWYgUkVBTF9ETUEKLQkJc3RfZG1hLmRtYV9tb2RlX3N0YXR1cyA9IDB4OTA7Ci0JCWF0YXJpX2RtYV9hY3RpdmUgPSAwOwotCQlhdGFyaV9kbWFfb3JpZ19hZGRyID0gTlVMTDsKLSNlbmRpZiAvKiBSRUFMX0RNQSAqLwotCX0KLQotCXJ2ID0gTkNSNTM4MF9idXNfcmVzZXQoY21kKTsKLQotCS8qIFJlLWVuYWJsZSBpbnRzICovCi0JaWYgKElTX0FfVFQoKSkgewotCQlhdGFyaV90dXJub25faXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0JfSBlbHNlIHsKLQkJYXRhcmlfdHVybm9uX2lycShJUlFfTUZQX0ZTQ1NJKTsKLQl9Ci0JaWYgKHJ2ID09IFNVQ0NFU1MpCi0JCWZhbGNvbl9yZWxlYXNlX2xvY2tfaWZfcG9zc2libGUoaG9zdGRhdGEpOwotCi0JcmV0dXJuIHJ2OwotfQotCiAKICNpZmRlZiBDT05GSUdfQVRBUklfU0NTSV9SRVNFVF9CT09UCiBzdGF0aWMgdm9pZCBfX2luaXQgYXRhcmlfc2NzaV9yZXNldF9ib290KHZvaWQpCkBAIC04NjAsMTUgKzU0OCw2IEBACiB9CiAjZW5kaWYKIAotCi1zdGF0aWMgY29uc3QgY2hhciAqYXRhcmlfc2NzaV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0JLyogYXRhcmlfc2NzaV9kZXRlY3QoKSBpcyB2ZXJib3NlIGVub3VnaC4uLiAqLwotCXN0YXRpYyBjb25zdCBjaGFyIHN0cmluZ1tdID0gIkF0YXJpIG5hdGl2ZSBTQ1NJIjsKLQlyZXR1cm4gc3RyaW5nOwotfQotCi0KICNpZiBkZWZpbmVkKFJFQUxfRE1BKQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhdGFyaV9zY3NpX2RtYV9zZXR1cChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKQEAgLTk0OSw3ICs2MjgsNyBAQAogI2RlZmluZQlDTURfU1VSRUxZX0JZVEVfTU9ERQkxCiAjZGVmaW5lCUNNRF9NT0RFX1VOS05PV04JCTIKIAotc3RhdGljIGludCBmYWxjb25fY2xhc3NpZnlfY21kKFNjc2lfQ21uZCAqY21kKQorc3RhdGljIGludCBmYWxjb25fY2xhc3NpZnlfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAl1bnNpZ25lZCBjaGFyIG9wY29kZSA9IGNtZC0+Y21uZFswXTsKIApAQCAtOTgxLDcgKzY2MCw3IEBACiAgKi8KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYXRhcmlfZG1hX3hmZXJfbGVuKHVuc2lnbmVkIGxvbmcgd2FudGVkX2xlbiwKLQkJCQkJU2NzaV9DbW5kICpjbWQsIGludCB3cml0ZV9mbGFnKQorCQkJCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCB3cml0ZV9mbGFnKQogewogCXVuc2lnbmVkIGxvbmcJcG9zc2libGVfbGVuLCBsaW1pdDsKIApAQCAtMTA5OSwyMyArNzc4LDI0NyBAQAogCiAjaW5jbHVkZSAiYXRhcmlfTkNSNTM4MC5jIgogCi1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgaW50IGF0YXJpX3Njc2lfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlpbnQgcnY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworI2lmZGVmIFJFQUxfRE1BCisJLyogQWJvcnQgYSBtYXliZSBhY3RpdmUgRE1BIHRyYW5zZmVyICovCisJaWYgKElTX0FfVFQoKSkgeworCQl0dF9zY3NpX2RtYS5kbWFfY3RybCA9IDA7CisJfSBlbHNlIHsKKwkJc3RfZG1hLmRtYV9tb2RlX3N0YXR1cyA9IDB4OTA7CisJCWF0YXJpX2RtYV9hY3RpdmUgPSAwOworCQlhdGFyaV9kbWFfb3JpZ19hZGRyID0gTlVMTDsKKwl9CisjZW5kaWYKKworCXJ2ID0gTkNSNTM4MF9idXNfcmVzZXQoY21kKTsKKworCS8qIFRoZSA1MzgwIHJhaXNlcyBpdHMgSVJRIGxpbmUgd2hpbGUgX1JTVCBpcyBhY3RpdmUgYnV0IHRoZSBTVCBETUEKKwkgKiAibG9jayIgaGFzIGJlZW4gcmVsZWFzZWQgc28gdGhpcyBpbnRlcnJ1cHQgbWF5IGVuZCB1cCBoYW5kbGVkIGJ5CisJICogZmxvcHB5IG9yIElERSBkcml2ZXIgKGlmIG9uZSBvZiB0aGVtIGhvbGRzIHRoZSBsb2NrKS4gVGhlIE5DUjUzODAKKwkgKiBpbnRlcnJ1cHQgZmxhZyBoYXMgYmVlbiBjbGVhcmVkIGFscmVhZHkuCisJICovCisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcnY7Cit9CisKKyNkZWZpbmUgRFJWX01PRFVMRV9OQU1FICAgICAgICAgImF0YXJpX3Njc2kiCisjZGVmaW5lIFBGWCAgICAgICAgICAgICAgICAgICAgIERSVl9NT0RVTEVfTkFNRSAiOiAiCisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGF0YXJpX3Njc2lfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCisJLnByb2NfbmFtZQkJPSBEUlZfTU9EVUxFX05BTUUsCiAJLnNob3dfaW5mbwkJPSBhdGFyaV9zY3NpX3Nob3dfaW5mbywKIAkubmFtZQkJCT0gIkF0YXJpIG5hdGl2ZSBTQ1NJIiwKLQkuZGV0ZWN0CQkJPSBhdGFyaV9zY3NpX2RldGVjdCwKLQkucmVsZWFzZQkJPSBhdGFyaV9zY3NpX3JlbGVhc2UsCiAJLmluZm8JCQk9IGF0YXJpX3Njc2lfaW5mbywKIAkucXVldWVjb21tYW5kCQk9IGF0YXJpX3Njc2lfcXVldWVfY29tbWFuZCwKIAkuZWhfYWJvcnRfaGFuZGxlcgk9IGF0YXJpX3Njc2lfYWJvcnQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyCT0gYXRhcmlfc2NzaV9idXNfcmVzZXQsCi0JLmNhbl9xdWV1ZQkJPSAwLCAvKiBpbml0aWFsaXplZCBhdCBydW4tdGltZSAqLwotCS50aGlzX2lkCQk9IDAsIC8qIGluaXRpYWxpemVkIGF0IHJ1bi10aW1lICovCi0JLnNnX3RhYmxlc2l6ZQkJPSAwLCAvKiBpbml0aWFsaXplZCBhdCBydW4tdGltZSAqLwotCS5jbWRfcGVyX2x1bgkJPSAwLCAvKiBpbml0aWFsaXplZCBhdCBydW4tdGltZSAqLworCS50aGlzX2lkCQk9IDcsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IERJU0FCTEVfQ0xVU1RFUklORwogfTsKIAorc3RhdGljIGludCBfX2luaXQgYXRhcmlfc2NzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOworCWludCBlcnJvcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlycTsKKwlpbnQgaG9zdF9mbGFncyA9IDA7CiAKLSNpbmNsdWRlICJzY3NpX21vZHVsZS5jIgorCWlycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcnEpCisJCXJldHVybiAtRU5PREVWOwogCisJaWYgKEFUQVJJSFdfUFJFU0VOVChUVF9TQ1NJKSkgeworCQlhdGFyaV9zY3NpX3JlZ19yZWFkICA9IGF0YXJpX3Njc2lfdHRfcmVnX3JlYWQ7CisJCWF0YXJpX3Njc2lfcmVnX3dyaXRlID0gYXRhcmlfc2NzaV90dF9yZWdfd3JpdGU7CisJfSBlbHNlIHsKKwkJYXRhcmlfc2NzaV9yZWdfcmVhZCAgPSBhdGFyaV9zY3NpX2ZhbGNvbl9yZWdfcmVhZDsKKwkJYXRhcmlfc2NzaV9yZWdfd3JpdGUgPSBhdGFyaV9zY3NpX2ZhbGNvbl9yZWdfd3JpdGU7CisJfQorCisJLyogVGhlIHZhbHVlcyBmb3IgQ01EX1BFUl9MVU4gYW5kIENBTl9RVUVVRSBhcmUgc29tZWhvdyBhcmJpdHJhcnkuCisJICogSGlnaGVyIHZhbHVlcyBzaG91bGQgd29yaywgdG9vOyB0cnkgaXQhCisJICogKEJ1dCBjbWRfcGVyX2x1biBjb3N0cyBtZW1vcnkhKQorCSAqCisJICogQnV0IHRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIHNvbWV3aGVyZSB0aGF0IHJlcXVpcmVzIENBTl9RVUVVRSB0byBiZQorCSAqIDIqQ01EX1BFUl9MVU4uIEF0IGxlYXN0IG9uIGEgVFQsIG5vIHNwdXJpb3VzIHRpbWVvdXRzIHNlZW4gc2luY2UKKwkgKiBjaGFuZ2VkIENNRF9QRVJfTFVOLi4uCisJICoKKwkgKiBOb3RlOiBUaGUgRmFsY29uIGN1cnJlbnRseSB1c2VzIDgvMSBzZXR0aW5nIGR1ZSB0byB1bnNvbHZlZCBwcm9ibGVtcworCSAqIHdpdGggY21kX3Blcl9sdW4gIT0gMQorCSAqLworCWlmIChBVEFSSUhXX1BSRVNFTlQoVFRfU0NTSSkpIHsKKwkJYXRhcmlfc2NzaV90ZW1wbGF0ZS5jYW5fcXVldWUgICAgPSAxNjsKKwkJYXRhcmlfc2NzaV90ZW1wbGF0ZS5jbWRfcGVyX2x1biAgPSA4OworCQlhdGFyaV9zY3NpX3RlbXBsYXRlLnNnX3RhYmxlc2l6ZSA9IFNHX0FMTDsKKwl9IGVsc2UgeworCQlhdGFyaV9zY3NpX3RlbXBsYXRlLmNhbl9xdWV1ZSAgICA9IDg7CisJCWF0YXJpX3Njc2lfdGVtcGxhdGUuY21kX3Blcl9sdW4gID0gMTsKKwkJYXRhcmlfc2NzaV90ZW1wbGF0ZS5zZ190YWJsZXNpemUgPSBTR19OT05FOworCX0KKworCWlmIChzZXR1cF9jYW5fcXVldWUgPiAwKQorCQlhdGFyaV9zY3NpX3RlbXBsYXRlLmNhbl9xdWV1ZSA9IHNldHVwX2Nhbl9xdWV1ZTsKKworCWlmIChzZXR1cF9jbWRfcGVyX2x1biA+IDApCisJCWF0YXJpX3Njc2lfdGVtcGxhdGUuY21kX3Blcl9sdW4gPSBzZXR1cF9jbWRfcGVyX2x1bjsKKworCS8qIExlYXZlIHNnX3RhYmxlc2l6ZSBhdCAwIG9uIGEgRmFsY29uISAqLworCWlmIChBVEFSSUhXX1BSRVNFTlQoVFRfU0NTSSkgJiYgc2V0dXBfc2dfdGFibGVzaXplID49IDApCisJCWF0YXJpX3Njc2lfdGVtcGxhdGUuc2dfdGFibGVzaXplID0gc2V0dXBfc2dfdGFibGVzaXplOworCisJaWYgKHNldHVwX2hvc3RpZCA+PSAwKSB7CisJCWF0YXJpX3Njc2lfdGVtcGxhdGUudGhpc19pZCA9IHNldHVwX2hvc3RpZCAmIDc7CisJfSBlbHNlIHsKKwkJLyogVGVzdCBpZiBhIGhvc3QgaWQgaXMgc2V0IGluIHRoZSBOVlJhbSAqLworCQlpZiAoQVRBUklIV19QUkVTRU5UKFRUX0NMSykgJiYgbnZyYW1fY2hlY2tfY2hlY2tzdW0oKSkgeworCQkJdW5zaWduZWQgY2hhciBiID0gbnZyYW1fcmVhZF9ieXRlKDE0KTsKKworCQkJLyogQXJiaXRyYXRpb24gZW5hYmxlZD8gKGZvciBUT1MpCisJCQkgKiBJZiB5ZXMsIHVzZSBjb25maWd1cmVkIGhvc3QgSUQKKwkJCSAqLworCQkJaWYgKGIgJiAweDgwKQorCQkJCWF0YXJpX3Njc2lfdGVtcGxhdGUudGhpc19pZCA9IGIgJiA3OworCQl9CisJfQorCisKKyNpZmRlZiBSRUFMX0RNQQorCS8qIElmIHJ1bm5pbmcgb24gYSBGYWxjb24gYW5kIGlmIHRoZXJlJ3MgVFQtUmFtIChpLmUuLCBtb3JlIHRoYW4gb25lCisJICogbWVtb3J5IGJsb2NrLCBzaW5jZSB0aGVyZSdzIGFsd2F5cyBTVC1SYW0gaW4gYSBGYWxjb24pLCB0aGVuCisJICogYWxsb2NhdGUgYSBTVFJBTV9CVUZGRVJfU0laRSBieXRlIGRyaWJibGUgYnVmZmVyIGZvciB0cmFuc2ZlcnMKKwkgKiBmcm9tL3RvIGFsdGVybmF0aXZlIFJhbS4KKwkgKi8KKwlpZiAoQVRBUklIV19QUkVTRU5UKFNUX1NDU0kpICYmICFBVEFSSUhXX1BSRVNFTlQoRVhURF9ETUEpICYmCisJICAgIG02OGtfbnVtX21lbW9yeSA+IDEpIHsKKwkJYXRhcmlfZG1hX2J1ZmZlciA9IGF0YXJpX3N0cmFtX2FsbG9jKFNUUkFNX0JVRkZFUl9TSVpFLCAiU0NTSSIpOworCQlpZiAoIWF0YXJpX2RtYV9idWZmZXIpIHsKKwkJCXByX2VycihQRlggImNhbid0IGFsbG9jYXRlIFNULVJBTSBkb3VibGUgYnVmZmVyXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWF0YXJpX2RtYV9waHlzX2J1ZmZlciA9IGF0YXJpX3N0cmFtX3RvX3BoeXMoYXRhcmlfZG1hX2J1ZmZlcik7CisJCWF0YXJpX2RtYV9vcmlnX2FkZHIgPSAwOworCX0KKyNlbmRpZgorCisJaW5zdGFuY2UgPSBzY3NpX2hvc3RfYWxsb2MoJmF0YXJpX3Njc2lfdGVtcGxhdGUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhKSk7CisJaWYgKCFpbnN0YW5jZSkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9hbGxvYzsKKwl9CisJYXRhcmlfc2NzaV9ob3N0ID0gaW5zdGFuY2U7CisKKyNpZmRlZiBDT05GSUdfQVRBUklfU0NTSV9SRVNFVF9CT09UCisJYXRhcmlfc2NzaV9yZXNldF9ib290KCk7CisjZW5kaWYKKworCWluc3RhbmNlLT5pcnEgPSBpcnEtPnN0YXJ0OworCisJaG9zdF9mbGFncyB8PSBJU19BX1RUKCkgPyAwIDogRkxBR19MQVRFX0RNQV9TRVRVUDsKKworI2lmZGVmIFNVUFBPUlRfVEFHUworCWhvc3RfZmxhZ3MgfD0gc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID4gMCA/IEZMQUdfVEFHR0VEX1FVRVVJTkcgOiAwOworI2VuZGlmCisKKwlOQ1I1MzgwX2luaXQoaW5zdGFuY2UsIGhvc3RfZmxhZ3MpOworCisJaWYgKElTX0FfVFQoKSkgeworCQllcnJvciA9IHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIHNjc2lfdHRfaW50ciwgMCwKKwkJICAgICAgICAgICAgICAgICAgICAiTkNSNTM4MCIsIGluc3RhbmNlKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoUEZYICJyZXF1ZXN0IGlycSAlZCBmYWlsZWQsIGFib3J0aW5nXG4iLAorCQkJICAgICAgIGluc3RhbmNlLT5pcnEpOworCQkJZ290byBmYWlsX2lycTsKKwkJfQorCQl0dF9tZnAuYWN0aXZlX2VkZ2UgfD0gMHg4MDsJLyogU0NTSSBpbnQgb24gTC0+SCAqLworI2lmZGVmIFJFQUxfRE1BCisJCXR0X3Njc2lfZG1hLmRtYV9jdHJsID0gMDsKKwkJYXRhcmlfZG1hX3Jlc2lkdWFsID0gMDsKKworCQkvKiBXaGlsZSB0aGUgcmVhZCBvdmVycnVucyAoZGVzY3JpYmVkIGJ5IERyZXcgRWNraGFyZHQgaW4KKwkJICogTkNSNTM4MC5jKSBuZXZlciBoYXBwZW5lZCBvbiBUVHMsIHRoZXkgZG8gaW4gZmFjdCBvbiB0aGUKKwkJICogTWVkdXNhIChUaGlzIHdhcyB0aGUgY2F1c2Ugd2h5IFNDU0kgZGlkbid0IHdvcmsgcmlnaHQgZm9yCisJCSAqIHNvIGxvbmcgdGhlcmUuKSBTaW5jZSBoYW5kbGluZyB0aGUgb3ZlcnJ1bnMgc2xvd3MgZG93bgorCQkgKiBhIGJpdCwgSSB0dXJuZWQgdGhlICNpZmRlZidzIGludG8gYSBydW50aW1lIGNvbmRpdGlvbi4KKwkJICoKKwkJICogSW4gcHJpbmNpcGxlIGl0IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGRvIG1heC4gMSBieXRlIHdpdGgKKwkJICogUElPLCBidXQgdGhlcmUgaXMgYW5vdGhlciBwcm9ibGVtIG9uIHRoZSBNZWR1c2Egd2l0aCB0aGUgRE1BCisJCSAqIHJlc3QgZGF0YSByZWdpc3Rlci4gU28gcmVhZF9vdmVycnVucyBpcyBjdXJyZW50bHkgc2V0CisJCSAqIHRvIDQgdG8gYXZvaWQgaGF2aW5nIHRyYW5zZmVycyB0aGF0IGFyZW4ndCBhIG11bHRpcGxlIG9mIDQuCisJCSAqIElmIHRoZSByZXN0IGRhdGEgYnVnIGlzIGZpeGVkLCB0aGlzIGNhbiBiZSBsb3dlcmVkIHRvIDEuCisJCSAqLworCQlpZiAoTUFDSF9JU19NRURVU0EpIHsKKwkJCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9CisJCQkJc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwkJCWhvc3RkYXRhLT5yZWFkX292ZXJydW5zID0gNDsKKwkJfQorI2VuZGlmCisJfSBlbHNlIHsKKwkJLyogTm90aGluZyB0byBkbyBmb3IgdGhlIGludGVycnVwdDogdGhlIFNULURNQSBpcyBpbml0aWFsaXplZAorCQkgKiBhbHJlYWR5LgorCQkgKi8KKyNpZmRlZiBSRUFMX0RNQQorCQlhdGFyaV9kbWFfcmVzaWR1YWwgPSAwOworCQlhdGFyaV9kbWFfYWN0aXZlID0gMDsKKwkJYXRhcmlfZG1hX3N0cmFtX21hc2sgPSAoQVRBUklIV19QUkVTRU5UKEVYVERfRE1BKSA/IDB4MDAwMDAwMDAKKwkJCQkJOiAweGZmMDAwMDAwKTsKKyNlbmRpZgorCX0KKworCWVycm9yID0gc2NzaV9hZGRfaG9zdChpbnN0YW5jZSwgTlVMTCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxfaG9zdDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluc3RhbmNlKTsKKworCXNjc2lfc2Nhbl9ob3N0KGluc3RhbmNlKTsKKwlyZXR1cm4gMDsKKworZmFpbF9ob3N0OgorCWlmIChJU19BX1RUKCkpCisJCWZyZWVfaXJxKGluc3RhbmNlLT5pcnEsIGluc3RhbmNlKTsKK2ZhaWxfaXJxOgorCU5DUjUzODBfZXhpdChpbnN0YW5jZSk7CisJc2NzaV9ob3N0X3B1dChpbnN0YW5jZSk7CitmYWlsX2FsbG9jOgorCWlmIChhdGFyaV9kbWFfYnVmZmVyKQorCQlhdGFyaV9zdHJhbV9mcmVlKGF0YXJpX2RtYV9idWZmZXIpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2V4aXQgYXRhcmlfc2NzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc2NzaV9yZW1vdmVfaG9zdChpbnN0YW5jZSk7CisJaWYgKElTX0FfVFQoKSkKKwkJZnJlZV9pcnEoaW5zdGFuY2UtPmlycSwgaW5zdGFuY2UpOworCU5DUjUzODBfZXhpdChpbnN0YW5jZSk7CisJc2NzaV9ob3N0X3B1dChpbnN0YW5jZSk7CisJaWYgKGF0YXJpX2RtYV9idWZmZXIpCisJCWF0YXJpX3N0cmFtX2ZyZWUoYXRhcmlfZG1hX2J1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0YXJpX3Njc2lfZHJpdmVyID0geworCS5yZW1vdmUgPSBfX2V4aXRfcChhdGFyaV9zY3NpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSBEUlZfTU9EVUxFX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKGF0YXJpX3Njc2lfZHJpdmVyLCBhdGFyaV9zY3NpX3Byb2JlKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9NT0RVTEVfTkFNRSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5oIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5OWQ5MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIGF0YXJpX3Njc2kuaCAtLSBIZWFkZXIgZmlsZSBmb3IgdGhlIEF0YXJpIG5hdGl2ZSBTQ1NJIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAxOTk0IFJvbWFuIEhvZGVrIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLSAqCi0gKiAoTG9vc2VseSBiYXNlZCBvbiB0aGUgd29yayBvZiBSb2JlcnQgRGUgVnJpZXMnIHRlYW0pCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0KLSNpZm5kZWYgQVRBUklfU0NTSV9ICi0jZGVmaW5lIEFUQVJJX1NDU0lfSAotCi0vKiAoSV9IQVZFX09WRVJSVU5TIHN0dWZmIHJlbW92ZWQpICovCi0KLSNpZm5kZWYgQVNNCi0vKiBUaGUgdmFsdWVzIGZvciBDTURfUEVSX0xVTiBhbmQgQ0FOX1FVRVVFIGFyZSBzb21laG93IGFyYml0cmFyeS4gSGlnaGVyCi0gKiB2YWx1ZXMgc2hvdWxkIHdvcmssIHRvbzsgdHJ5IGl0ISAoYnV0IGNtZF9wZXJfbHVuIGNvc3RzIG1lbW9yeSEpICovCi0KLS8qIEJ1dCB0aGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyBzb21ld2hlcmUgdGhhdCByZXF1aXJlcyBDQU5fUVVFVUUgdG8gYmUKLSAqIDIqQ01EX1BFUl9MVU4uIEF0IGxlYXN0IG9uIGEgVFQsIG5vIHNwdXJpb3VzIHRpbWVvdXRzIHNlZW4gc2luY2UKLSAqIGNoYW5nZWQgQ01EX1BFUl9MVU4uLi4gKi8KLQotLyogTm90ZTogVGhlIEZhbGNvbiBjdXJyZW50bHkgdXNlcyA4LzEgc2V0dGluZyBkdWUgdG8gdW5zb2x2ZWQgcHJvYmxlbXMgd2l0aAotICogY21kX3Blcl9sdW4gIT0gMSAqLwotCi0jZGVmaW5lIEFUQVJJX1RUX0NBTl9RVUVVRQkJMTYKLSNkZWZpbmUgQVRBUklfVFRfQ01EX1BFUl9MVU4JCTgKLSNkZWZpbmUgQVRBUklfVFRfU0dfVEFCTEVTSVpFCQlTR19BTEwKLQotI2RlZmluZSBBVEFSSV9GQUxDT05fQ0FOX1FVRVVFCQk4Ci0jZGVmaW5lIEFUQVJJX0ZBTENPTl9DTURfUEVSX0xVTgkxCi0jZGVmaW5lIEFUQVJJX0ZBTENPTl9TR19UQUJMRVNJWkUJU0dfTk9ORQotCi0jZGVmaW5lCURFRkFVTFRfVVNFX1RBR0dFRF9RVUVVSU5HCTAKLQotCi0jZGVmaW5lCU5DUjUzODBfaW1wbGVtZW50YXRpb25fZmllbGRzCS8qIG5vbmUgKi8KLQotI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKQkJICBhdGFyaV9zY3NpX3JlZ19yZWFkKCByZWcgKQotI2RlZmluZSBOQ1I1MzgwX3dyaXRlKHJlZywgdmFsdWUpIGF0YXJpX3Njc2lfcmVnX3dyaXRlKCByZWcsIHZhbHVlICkKLQotI2RlZmluZSBOQ1I1MzgwX2ludHIgYXRhcmlfc2NzaV9pbnRyCi0jZGVmaW5lIE5DUjUzODBfcXVldWVfY29tbWFuZCBhdGFyaV9zY3NpX3F1ZXVlX2NvbW1hbmQKLSNkZWZpbmUgTkNSNTM4MF9hYm9ydCBhdGFyaV9zY3NpX2Fib3J0Ci0jZGVmaW5lIE5DUjUzODBfc2hvd19pbmZvIGF0YXJpX3Njc2lfc2hvd19pbmZvCi0jZGVmaW5lIE5DUjUzODBfZG1hX3JlYWRfc2V0dXAoaW5zdCxkLGMpIGF0YXJpX3Njc2lfZG1hX3NldHVwIChpbnN0LCBkLCBjLCAwKQotI2RlZmluZSBOQ1I1MzgwX2RtYV93cml0ZV9zZXR1cChpbnN0LGQsYykgYXRhcmlfc2NzaV9kbWFfc2V0dXAgKGluc3QsIGQsIGMsIDEpCi0jZGVmaW5lIE5DUjUzODBfZG1hX3Jlc2lkdWFsKGluc3QpIGF0YXJpX3Njc2lfZG1hX3Jlc2lkdWFsKCBpbnN0ICkKLSNkZWZpbmUJTkNSNTM4MF9kbWFfeGZlcl9sZW4oaSxjbWQscGhhc2UpIFwKLQlhdGFyaV9kbWFfeGZlcl9sZW4oY21kLT5TQ3AudGhpc19yZXNpZHVhbCxjbWQsKChwaGFzZSkgJiBTUl9JTykgPyAwIDogMSkKLQotI2VuZGlmIC8qIG5kZWYgQVNNICovCi0jZW5kaWYgLyogQVRBUklfU0NTSV9IICovCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKaW5kZXggMzBkNzRhMC4uZjMxOTM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCkBAIC01NTYsNyArNTU2LDcgQEAKIAkubmFtZSA9ICJFbXVsZXggMTBHYmUgb3Blbi1pc2NzaSBJbml0aWF0b3IgRHJpdmVyIiwKIAkucHJvY19uYW1lID0gRFJWX05BTUUsCiAJLnF1ZXVlY29tbWFuZCA9IGlzY3NpX3F1ZXVlY29tbWFuZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuc2xhdmVfY29uZmlndXJlID0gYmVpc2NzaV9zbGF2ZV9jb25maWd1cmUsCiAJLnRhcmdldF9hbGxvYyA9IGlzY3NpX3RhcmdldF9hbGxvYywKIAkuZWhfYWJvcnRfaGFuZGxlciA9IGJlaXNjc2lfZWhfYWJvcnQsCkBAIC01NzAsNyArNTcwLDcgQEAKIAkuY21kX3Blcl9sdW4gPSBCRUlTQ1NJX0NNRF9QRVJfTFVOLAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS52ZW5kb3JfaWQgPSBTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IEJFX1ZFTkRPUl9JRCwKLQorCS50cmFja19xdWV1ZV9kZXB0aCA9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZWlzY3NpX3Njc2lfdHJhbnNwb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2RlYnVnZnMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kZWJ1Z2ZzLmMKaW5kZXggOGU4M2QwNC4uNzRhMzA3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZGVidWdmcy5jCkBAIC0yNjAsMTggKzI2MCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICprZXJuX2J1ZjsKIAotCWtlcm5fYnVmID0ga3phbGxvYyhuYnl0ZXMsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFrZXJuX2J1ZikgewotCQlwcmludGsoS0VSTl9JTkZPICJiZmFkWyVkXTogRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlclxuIiwKLQkJCQliZmFkLT5pbnN0X25vKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGtlcm5fYnVmLCAodm9pZCAgX191c2VyICopYnVmLCBuYnl0ZXMpKSB7Ci0JCWtmcmVlKGtlcm5fYnVmKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWtlcm5fYnVmID0gbWVtZHVwX3VzZXIoYnVmLCBuYnl0ZXMpOworCWlmIChJU19FUlIoa2Vybl9idWYpKQorCQlyZXR1cm4gUFRSX0VSUihrZXJuX2J1Zik7CiAKIAlyYyA9IHNzY2FuZihrZXJuX2J1ZiwgIiV4OiV4IiwgJmFkZHIsICZsZW4pOwogCWlmIChyYyA8IDIpIHsKQEAgLTMzNiwxOCArMzI3LDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgKmtlcm5fYnVmOwogCi0Ja2Vybl9idWYgPSBremFsbG9jKG5ieXRlcywgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWtlcm5fYnVmKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImJmYWRbJWRdOiBGYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyXG4iLAotCQkJCWJmYWQtPmluc3Rfbm8pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoa2Vybl9idWYsICh2b2lkICBfX3VzZXIgKilidWYsIG5ieXRlcykpIHsKLQkJa2ZyZWUoa2Vybl9idWYpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJa2Vybl9idWYgPSBtZW1kdXBfdXNlcihidWYsIG5ieXRlcyk7CisJaWYgKElTX0VSUihrZXJuX2J1ZikpCisJCXJldHVybiBQVFJfRVJSKGtlcm5fYnVmKTsKIAogCXJjID0gc3NjYW5mKGtlcm5fYnVmLCAiJXg6JXgiLCAmYWRkciwgJnZhbCk7CiAJaWYgKHJjIDwgMikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwppbmRleCBmMDY3MzMyLi43MjIzYjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwpAQCAtNzc2LDExICs3NzYsNyBAQAogc3RhdGljIGludAogYmZhZF9pbV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBiZmFfbHVuX3F1ZXVlX2RlcHRoKTsKLQllbHNlCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgYmZhX2x1bl9xdWV1ZV9kZXB0aCk7Ci0KKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBiZmFfbHVuX3F1ZXVlX2RlcHRoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODA0LDYgKzgwMCw3IEBACiAJLnNob3N0X2F0dHJzID0gYmZhZF9pbV9ob3N0X2F0dHJzLAogCS5tYXhfc2VjdG9ycyA9IEJGQURfTUFYX1NFQ1RPUlMsCiAJLnZlbmRvcl9pZCA9IEJGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsCisJLnVzZV9ibGtfdGFncyA9IDEsCiB9OwogCiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGJmYWRfaW1fdnBvcnRfdGVtcGxhdGUgPSB7CkBAIC04MjUsNiArODIyLDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuc2hvc3RfYXR0cnMgPSBiZmFkX2ltX3Zwb3J0X2F0dHJzLAogCS5tYXhfc2VjdG9ycyA9IEJGQURfTUFYX1NFQ1RPUlMsCisJLnVzZV9ibGtfdGFncyA9IDEsCiB9OwogCiBiZmFfc3RhdHVzX3QKQEAgLTg2OCwxNCArODY2LDggQEAKIAkJCWlmIChiZmFfbHVuX3F1ZXVlX2RlcHRoID4gdG1wX3NkZXYtPnF1ZXVlX2RlcHRoKSB7CiAJCQkJaWYgKHRtcF9zZGV2LT5pZCAhPSBzZGV2LT5pZCkKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKHRtcF9zZGV2LT5vcmRlcmVkX3RhZ3MpCi0JCQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHRtcF9zZGV2LAotCQkJCQkJTVNHX09SREVSRURfVEFHLAotCQkJCQkJdG1wX3NkZXYtPnF1ZXVlX2RlcHRoICsgMSk7Ci0JCQkJZWxzZQotCQkJCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCh0bXBfc2RldiwKLQkJCQkJCU1TR19TSU1QTEVfVEFHLAotCQkJCQkJdG1wX3NkZXYtPnF1ZXVlX2RlcHRoICsgMSk7CisJCQkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgodG1wX3NkZXYsCisJCQkJCXRtcF9zZGV2LT5xdWV1ZV9kZXB0aCArIDEpOwogCiAJCQkJaXRuaW0tPmxhc3RfcmFtcF91cF90aW1lID0gamlmZmllczsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYwppbmRleCA3MjUzM2M1Li5lODYxZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jCkBAIC0xMDg4LDcgKzEwODgsNyBAQAogCW11dGV4X3VubG9jaygmYm54MmZjX2Rldl9sb2NrKTsKIAlydG5sX3VubG9jaygpOwogCi0JaWYgKElTX0VSUih2bl9wb3J0KSkgeworCWlmICghdm5fcG9ydCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJibngyZmNfdnBvcnRfY3JlYXRlICglcykgZmFpbGVkXG4iLAogCQkJbmV0ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FSU87CkBAIC0yMjAyLDYgKzIyMDIsNyBAQAogCWludGVyZmFjZSA9IGJueDJmY19pbnRlcmZhY2VfY3JlYXRlKGhiYSwgbmV0ZGV2LCBmaXBfbW9kZSk7CiAJaWYgKCFpbnRlcmZhY2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYm54MmZjX2ludGVyZmFjZV9jcmVhdGUgZmFpbGVkXG4iKTsKKwkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGlmcHV0X2VycjsKIAl9CiAKQEAgLTI3OTAsMTMgKzI3OTEsMTUgQEAKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIgPSBibngyZmNfZWhfdGFyZ2V0X3Jlc2V0LCAvKiB0Z3QgcmVzZXQgKi8KIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCT0gZmNfZWhfaG9zdF9yZXNldCwKIAkuc2xhdmVfYWxsb2MJCT0gZmNfc2xhdmVfYWxsb2MsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJPSBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZAkJPSAtMSwKIAkuY21kX3Blcl9sdW4JCT0gMywKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNnX3RhYmxlc2l6ZQkJPSBCTlgyRkNfTUFYX0JEU19QRVJfQ01ELAogCS5tYXhfc2VjdG9ycwkJPSAxMDI0LAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBsaWJmY19mdW5jdGlvbl90ZW1wbGF0ZSBibngyZmNfbGliZmNfZmNuX3RlbXBsID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2lvLmMKaW5kZXggNWI5OTg0NC4uNGI1Njg1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jCkBAIC0xNzI1LDcgKzE3MjUsNiBAQAogCQkJCSAgc3RydWN0IGZjcF9jbW5kICpmY3BfY21uZCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY19jbWQgPSBpb19yZXEtPnNjX2NtZDsKLQljaGFyIHRhZ1syXTsKIAogCW1lbXNldChmY3BfY21uZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCkpOwogCkBAIC0xNzM5LDIxICsxNzM4LDEwIEBACiAJZmNwX2NtbmQtPmZjX3RtX2ZsYWdzID0gaW9fcmVxLT5tcF9yZXEudG1fZmxhZ3M7CiAJZmNwX2NtbmQtPmZjX2ZsYWdzID0gaW9fcmVxLT5pb19yZXFfZmxhZ3M7CiAKLQlpZiAoc2NzaV9wb3B1bGF0ZV90YWdfbXNnKHNjX2NtZCwgdGFnKSkgewotCQlzd2l0Y2ggKHRhZ1swXSkgewotCQljYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgotCQkJZmNwX2NtbmQtPmZjX3ByaV90YSA9IEZDUF9QVEFfSEVBRFE7Ci0JCQlicmVhazsKLQkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJCWZjcF9jbW5kLT5mY19wcmlfdGEgPSBGQ1BfUFRBX09SREVSRUQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWZjcF9jbW5kLT5mY19wcmlfdGEgPSBGQ1BfUFRBX1NJTVBMRTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKKwlpZiAoc2NfY21kLT5mbGFncyAmIFNDTURfVEFHR0VEKQorCQlmY3BfY21uZC0+ZmNfcHJpX3RhID0gRkNQX1BUQV9TSU1QTEU7CisJZWxzZQogCQlmY3BfY21uZC0+ZmNfcHJpX3RhID0gMDsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJmY19wYXJzZV9mY3BfcnNwKHN0cnVjdCBibngyZmNfY21kICppb19yZXEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCmluZGV4IDdhMzYzODguLmU1MzA3OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCkBAIC0yMjU5LDcgKzIyNTksNyBAQAogCS5laF9hYm9ydF9oYW5kbGVyCT0gaXNjc2lfZWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAogCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX3JlY292ZXJfdGFyZ2V0LAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS50YXJnZXRfYWxsb2MJCT0gaXNjc2lfdGFyZ2V0X2FsbG9jLAogCS5jYW5fcXVldWUJCT0gMjA0OCwKIAkubWF4X3NlY3RvcnMJCT0gMTI3LApAQCAtMjI2OCw2ICsyMjY4LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNnX3RhYmxlc2l6ZQkJPSBJU0NTSV9NQVhfQkRTX1BFUl9DTUQsCiAJLnNob3N0X2F0dHJzCQk9IGJueDJpX2Rldl9hdHRyaWJ1dGVzLAorCS50cmFja19xdWV1ZV9kZXB0aAk9IDEsCiB9OwogCiBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGJueDJpX2lzY3NpX3RyYW5zcG9ydCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jaC5jIGIvZHJpdmVycy9zY3NpL2NoLmMKaW5kZXggZWY1YWUwZC4uNmJhYzhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NoLmMKKysrIGIvZHJpdmVycy9zY3NpL2NoLmMKQEAgLTg1LDggKzg1LDcgQEAKIC8vIG1vZHVsZV9wYXJhbV9zdHJpbmdfYXJyYXkodmVuZG9yX2xhYmVscywgTlVMTCwgMDQ0NCk7CiAKICNkZWZpbmUgY2hfcHJpbnRrKHByZWZpeCwgY2gsIGZtdCwgYS4uLikgXAotCXNkZXZfcHJpbnRrKHByZWZpeCwgKGNoKS0+ZGV2aWNlLCAiWyVzXSAiIGZtdCwgXAotCQkgICAgKGNoKS0+bmFtZSwgIyNhKQorCXNkZXZfcHJlZml4X3ByaW50ayhwcmVmaXgsIChjaCktPmRldmljZSwgKGNoKS0+bmFtZSwgZm10LCAjI2EpCiAKICNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZy4uLikJCQkJCQlcCiBkbyB7CQkJCQkJCQkJXApAQCAtMTgzLDcgKzE4Miw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNoX2RvX3Njc2koc2NzaV9jaGFuZ2VyICpjaCwgdW5zaWduZWQgY2hhciAqY21kLAorY2hfZG9fc2NzaShzY3NpX2NoYW5nZXIgKmNoLCB1bnNpZ25lZCBjaGFyICpjbWQsIGludCBjbWRfbGVuLAogCSAgIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgYnVmbGVuZ3RoLAogCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKQEAgLTE5Nyw3ICsxOTYsNyBAQAogCWVycm5vID0gMDsKIAlpZiAoZGVidWcpIHsKIAkJRFBSSU5USygiY29tbWFuZDogIik7Ci0JCV9fc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CisJCV9fc2NzaV9wcmludF9jb21tYW5kKGNtZCwgY21kX2xlbik7CiAJfQogCiAJcmVzdWx0ID0gc2NzaV9leGVjdXRlX3JlcShjaC0+ZGV2aWNlLCBjbWQsIGRpcmVjdGlvbiwgYnVmZmVyLApAQCAtMjA3LDcgKzIwNiw3IEBACiAJRFBSSU5USygicmVzdWx0OiAweCV4XG4iLHJlc3VsdCk7CiAJaWYgKGRyaXZlcl9ieXRlKHJlc3VsdCkgJiBEUklWRVJfU0VOU0UpIHsKIAkJaWYgKGRlYnVnKQotCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoY2gtPm5hbWUsICZzc2hkcik7CisJCQlzY3NpX3ByaW50X3NlbnNlX2hkcihjaC0+ZGV2aWNlLCBjaC0+bmFtZSwgJnNzaGRyKTsKIAkJZXJybm8gPSBjaF9maW5kX2Vycm5vKCZzc2hkcik7CiAKIAkJc3dpdGNoKHNzaGRyLnNlbnNlX2tleSkgewpAQCAtMjU4LDcgKzI1Nyw4IEBACiAJY21kWzNdID0gZWxlbSAgICAgICAgJiAweGZmOwogCWNtZFs1XSA9IDE7CiAJY21kWzldID0gMjU1OwotCWlmICgwID09IChyZXN1bHQgPSBjaF9kb19zY3NpKGNoLCBjbWQsIGJ1ZmZlciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpKSkgeworCWlmICgwID09IChyZXN1bHQgPSBjaF9kb19zY3NpKGNoLCBjbWQsIDEyLAorCQkJCSAgICAgIGJ1ZmZlciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpKSkgewogCQlpZiAoKChidWZmZXJbMTZdIDw8IDgpIHwgYnVmZmVyWzE3XSkgIT0gZWxlbSkgewogCQkJRFBSSU5USygiYXNrZWQgZm9yIGVsZW1lbnQgMHglMDJ4LCBnb3QgMHglMDJ4XG4iLAogCQkJCWVsZW0sKGJ1ZmZlclsxNl0gPDwgOCkgfCBidWZmZXJbMTddKTsKQEAgLTI4OCw3ICsyODgsNyBAQAogCW1lbXNldChjbWQsMCxzaXplb2YoY21kKSk7CiAJY21kWzBdID0gSU5JVElBTElaRV9FTEVNRU5UX1NUQVRVUzsKIAljbWRbMV0gPSAoY2gtPmRldmljZS0+bHVuICYgMHg3KSA8PCA1OwotCWVyciA9IGNoX2RvX3Njc2koY2gsIGNtZCwgTlVMTCwgMCwgRE1BX05PTkUpOworCWVyciA9IGNoX2RvX3Njc2koY2gsIGNtZCwgNiwgTlVMTCwgMCwgRE1BX05PTkUpOwogCVZQUklOVEsoS0VSTl9JTkZPLCAiLi4uIGZpbmlzaGVkXG4iKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzEwLDEwICszMTAsMTAgQEAKIAljbWRbMV0gPSAoY2gtPmRldmljZS0+bHVuICYgMHg3KSA8PCA1OwogCWNtZFsyXSA9IDB4MWQ7CiAJY21kWzRdID0gMjU1OwotCXJlc3VsdCA9IGNoX2RvX3Njc2koY2gsIGNtZCwgYnVmZmVyLCAyNTUsIERNQV9GUk9NX0RFVklDRSk7CisJcmVzdWx0ID0gY2hfZG9fc2NzaShjaCwgY21kLCAxMCwgYnVmZmVyLCAyNTUsIERNQV9GUk9NX0RFVklDRSk7CiAJaWYgKDAgIT0gcmVzdWx0KSB7CiAJCWNtZFsxXSB8PSAoMTw8Myk7Ci0JCXJlc3VsdCAgPSBjaF9kb19zY3NpKGNoLCBjbWQsIGJ1ZmZlciwgMjU1LCBETUFfRlJPTV9ERVZJQ0UpOworCQlyZXN1bHQgID0gY2hfZG9fc2NzaShjaCwgY21kLCAxMCwgYnVmZmVyLCAyNTUsIERNQV9GUk9NX0RFVklDRSk7CiAJfQogCWlmICgwID09IHJlc3VsdCkgewogCQljaC0+Zmlyc3RzW0NIRVRfTVRdID0KQEAgLTQzOCw3ICs0MzgsNyBAQAogCWNtZFs0XSAgPSAoZWxlbSAgPj4gOCkgJiAweGZmOwogCWNtZFs1XSAgPSAgZWxlbSAgICAgICAgJiAweGZmOwogCWNtZFs4XSAgPSByb3RhdGUgPyAxIDogMDsKLQlyZXR1cm4gY2hfZG9fc2NzaShjaCwgY21kLCBOVUxMLCAwLCBETUFfTk9ORSk7CisJcmV0dXJuIGNoX2RvX3Njc2koY2gsIGNtZCwgMTAsIE5VTEwsIDAsIERNQV9OT05FKTsKIH0KIAogc3RhdGljIGludApAQCAtNDU5LDcgKzQ1OSw3IEBACiAJY21kWzZdICA9IChkZXN0ICA+PiA4KSAmIDB4ZmY7CiAJY21kWzddICA9ICBkZXN0ICAgICAgICAmIDB4ZmY7CiAJY21kWzEwXSA9IHJvdGF0ZSA/IDEgOiAwOwotCXJldHVybiBjaF9kb19zY3NpKGNoLCBjbWQsIE5VTEwsMCwgRE1BX05PTkUpOworCXJldHVybiBjaF9kb19zY3NpKGNoLCBjbWQsIDEyLCBOVUxMLDAsIERNQV9OT05FKTsKIH0KIAogc3RhdGljIGludApAQCAtNDg1LDcgKzQ4NSw3IEBACiAJY21kWzldICA9ICBkZXN0MiAgICAgICAmIDB4ZmY7CiAJY21kWzEwXSA9IChyb3RhdGUxID8gMSA6IDApIHwgKHJvdGF0ZTIgPyAyIDogMCk7CiAKLQlyZXR1cm4gY2hfZG9fc2NzaShjaCwgY21kLCBOVUxMLDAsIERNQV9OT05FKTsKKwlyZXR1cm4gY2hfZG9fc2NzaShjaCwgY21kLCAxMiwgTlVMTCwgMCwgRE1BX05PTkUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTM1LDcgKzUzNSw3IEBACiAJbWVtY3B5KGJ1ZmZlcix0YWcsMzIpOwogCWNoX2NoZWNrX3ZvbHRhZyhidWZmZXIpOwogCi0JcmVzdWx0ID0gY2hfZG9fc2NzaShjaCwgY21kLCBidWZmZXIsIDI1NiwgRE1BX1RPX0RFVklDRSk7CisJcmVzdWx0ID0gY2hfZG9fc2NzaShjaCwgY21kLCAxMiwgYnVmZmVyLCAyNTYsIERNQV9UT19ERVZJQ0UpOwogCWtmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYxNiw2ICs2MTYsMTEgQEAKIAlpbnQgcmV0dmFsOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCisJcmV0dmFsID0gc2NzaV9pb2N0bF9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKGNoLT5kZXZpY2UsIGNtZCwKKwkJCWZpbGUtPmZfZmxhZ3MgJiBPX05ERUxBWSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDSElPR1BBUkFNUzoKIAl7CkBAIC03NjYsNyArNzcxLDggQEAKIAkJY2hfY21kWzVdID0gMTsKIAkJY2hfY21kWzldID0gMjU1OwogCi0JCXJlc3VsdCA9IGNoX2RvX3Njc2koY2gsIGNoX2NtZCwgYnVmZmVyLCAyNTYsIERNQV9GUk9NX0RFVklDRSk7CisJCXJlc3VsdCA9IGNoX2RvX3Njc2koY2gsIGNoX2NtZCwgMTIsCisJCQkJICAgIGJ1ZmZlciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpOwogCQlpZiAoIXJlc3VsdCkgewogCQkJY2dlLmNnZV9zdGF0dXMgPSBidWZmZXJbMThdOwogCQkJY2dlLmNnZV9mbGFncyA9IDA7CkBAIC05NjYsOSArOTcyLDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2RyaXZlciBjaF90ZW1wbGF0ZSA9IHsKLQkub3duZXIgICAgIAk9IFRISVNfTU9EVUxFLAogCS5nZW5kcnYgICAgIAk9IHsKIAkJLm5hbWUJPSAiY2giLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLnByb2JlICA9IGNoX3Byb2JlLAogCQkucmVtb3ZlID0gY2hfcmVtb3ZlLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKaW5kZXggZDM1YTVkNi4uZTIwNjhhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwpAQCAtMjEsMTUgKzIxLDIxIEBACiAKIAogLyogQ29tbWFuZHMgd2l0aCBzZXJ2aWNlIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGNvbW1hbmQgbmFtZSAqLwotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTl8xMiAweGFiCi0jZGVmaW5lIFNFUlZJQ0VfQUNUSU9OX09VVF8xMiAweGE5Ci0jZGVmaW5lIFNFUlZJQ0VfQUNUSU9OX0JJRElSRUNUSU9OQUwgMHg5ZAotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTl8xNiAweDllCi0jZGVmaW5lIFNFUlZJQ0VfQUNUSU9OX09VVF8xNiAweDlmCiAjZGVmaW5lIFRISVJEX1BBUlRZX0NPUFlfT1VUIDB4ODMKICNkZWZpbmUgVEhJUkRfUEFSVFlfQ09QWV9JTiAweDg0CiAKKyNkZWZpbmUgVkVORE9SX1NQRUNJRklDX0NEQiAweGMwCiAKK3N0cnVjdCBzYV9uYW1lX2xpc3QgeworCWludCBvcGNvZGU7CisJY29uc3Qgc3RydWN0IHZhbHVlX25hbWVfcGFpciAqYXJyOworCWludCBhcnJfc3o7Cit9OworCitzdHJ1Y3QgdmFsdWVfbmFtZV9wYWlyIHsKKwlpbnQgdmFsdWU7CisJY29uc3QgY2hhciAqIG5hbWU7Cit9OwogCiAjaWZkZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTCiBzdGF0aWMgY29uc3QgY2hhciAqIGNkYl9ieXRlMF9uYW1lc1tdID0gewpAQCAtMTAyLDExICsxMDgsNiBAQAogICAgICAgICAgICAgIlZvbHVtZSBzZXQgKG91dCksIFNlbmQgRFZEIHN0cnVjdHVyZSIsCiB9OwogCi1zdHJ1Y3QgdmFsdWVfbmFtZV9wYWlyIHsKLQlpbnQgdmFsdWU7Ci0JY29uc3QgY2hhciAqIG5hbWU7Ci19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZhbHVlX25hbWVfcGFpciBtYWludF9pbl9hcnJbXSA9IHsKIAl7MHg1LCAiUmVwb3J0IGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIn0sCiAJezB4YSwgIlJlcG9ydCB0YXJnZXQgcG9ydCBncm91cHMifSwKQEAgLTI0NCwxNzAgKzI0NSwxMTkgQEAKIH07CiAjZGVmaW5lIFZBUklBQkxFX0xFTkdUSF9TWiBBUlJBWV9TSVpFKHZhcmlhYmxlX2xlbmd0aF9hcnIpCiAKLXN0YXRpYyBjb25zdCBjaGFyICogZ2V0X3NhX25hbWUoY29uc3Qgc3RydWN0IHZhbHVlX25hbWVfcGFpciAqIGFyciwKLQkJCSAgICAgICAgaW50IGFycl9zeiwgaW50IHNlcnZpY2VfYWN0aW9uKQorc3RhdGljIHN0cnVjdCBzYV9uYW1lX2xpc3Qgc2FfbmFtZXNfYXJyW10gPSB7CisJe1ZBUklBQkxFX0xFTkdUSF9DTUQsIHZhcmlhYmxlX2xlbmd0aF9hcnIsIFZBUklBQkxFX0xFTkdUSF9TWn0sCisJe01BSU5URU5BTkNFX0lOLCBtYWludF9pbl9hcnIsIE1BSU5UX0lOX1NafSwKKwl7TUFJTlRFTkFOQ0VfT1VULCBtYWludF9vdXRfYXJyLCBNQUlOVF9PVVRfU1p9LAorCXtQRVJTSVNURU5UX1JFU0VSVkVfSU4sIHByX2luX2FyciwgUFJfSU5fU1p9LAorCXtQRVJTSVNURU5UX1JFU0VSVkVfT1VULCBwcl9vdXRfYXJyLCBQUl9PVVRfU1p9LAorCXtTRVJWSUNFX0FDVElPTl9JTl8xMiwgc2Vydl9pbjEyX2FyciwgU0VSVl9JTjEyX1NafSwKKwl7U0VSVklDRV9BQ1RJT05fT1VUXzEyLCBzZXJ2X291dDEyX2FyciwgU0VSVl9PVVQxMl9TWn0sCisJe1NFUlZJQ0VfQUNUSU9OX0JJRElSRUNUSU9OQUwsIHNlcnZfYmlkaV9hcnIsIFNFUlZfQklESV9TWn0sCisJe1NFUlZJQ0VfQUNUSU9OX0lOXzE2LCBzZXJ2X2luMTZfYXJyLCBTRVJWX0lOMTZfU1p9LAorCXtTRVJWSUNFX0FDVElPTl9PVVRfMTYsIHNlcnZfb3V0MTZfYXJyLCBTRVJWX09VVDE2X1NafSwKKwl7VEhJUkRfUEFSVFlfQ09QWV9JTiwgdHBjX2luX2FyciwgVFBDX0lOX1NafSwKKwl7VEhJUkRfUEFSVFlfQ09QWV9PVVQsIHRwY19vdXRfYXJyLCBUUENfT1VUX1NafSwKKwl7MCwgTlVMTCwgMH0sCit9OworCisjZWxzZSAvKiBpZm5kZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTICovCitzdGF0aWMgY29uc3QgY2hhciAqY2RiX2J5dGUwX25hbWVzWzBdOworCitzdGF0aWMgc3RydWN0IHNhX25hbWVfbGlzdCBzYV9uYW1lc19hcnJbXSA9IHsKKwl7VkFSSUFCTEVfTEVOR1RIX0NNRCwgTlVMTCwgMH0sCisJe01BSU5URU5BTkNFX0lOLCBOVUxMLCAwfSwKKwl7TUFJTlRFTkFOQ0VfT1VULCBOVUxMLCAwfSwKKwl7UEVSU0lTVEVOVF9SRVNFUlZFX0lOLCBOVUxMLCAwfSwKKwl7UEVSU0lTVEVOVF9SRVNFUlZFX09VVCwgTlVMTCwgMH0sCisJe1NFUlZJQ0VfQUNUSU9OX0lOXzEyLCBOVUxMLCAwfSwKKwl7U0VSVklDRV9BQ1RJT05fT1VUXzEyLCBOVUxMLCAwfSwKKwl7U0VSVklDRV9BQ1RJT05fQklESVJFQ1RJT05BTCwgTlVMTCwgMH0sCisJe1NFUlZJQ0VfQUNUSU9OX0lOXzE2LCBOVUxMLCAwfSwKKwl7U0VSVklDRV9BQ1RJT05fT1VUXzE2LCBOVUxMLCAwfSwKKwl7VEhJUkRfUEFSVFlfQ09QWV9JTiwgTlVMTCwgMH0sCisJe1RISVJEX1BBUlRZX0NPUFlfT1VULCBOVUxMLCAwfSwKKwl7MCwgTlVMTCwgMH0sCit9OworI2VuZGlmIC8qIENPTkZJR19TQ1NJX0NPTlNUQU5UUyAqLworCitzdGF0aWMgYm9vbCBzY3NpX29wY29kZV9zYV9uYW1lKGludCBvcGNvZGUsIGludCBzZXJ2aWNlX2FjdGlvbiwKKwkJCQljb25zdCBjaGFyICoqY2RiX25hbWUsIGNvbnN0IGNoYXIgKipzYV9uYW1lKQogewotCWludCBrOworCXN0cnVjdCBzYV9uYW1lX2xpc3QgKnNhX25hbWVfcHRyOworCWNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgKmFyciA9IE5VTEw7CisJaW50IGFycl9zeiwgazsKKworCSpjZGJfbmFtZSA9IE5VTEw7CisJaWYgKG9wY29kZSA+PSBWRU5ET1JfU1BFQ0lGSUNfQ0RCKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAob3Bjb2RlIDwgQVJSQVlfU0laRShjZGJfYnl0ZTBfbmFtZXMpKQorCQkqY2RiX25hbWUgPSBjZGJfYnl0ZTBfbmFtZXNbb3Bjb2RlXTsKKworCWZvciAoc2FfbmFtZV9wdHIgPSBzYV9uYW1lc19hcnI7IHNhX25hbWVfcHRyLT5hcnI7ICsrc2FfbmFtZV9wdHIpIHsKKwkJaWYgKHNhX25hbWVfcHRyLT5vcGNvZGUgPT0gb3Bjb2RlKSB7CisJCQlhcnIgPSBzYV9uYW1lX3B0ci0+YXJyOworCQkJYXJyX3N6ID0gc2FfbmFtZV9wdHItPmFycl9zejsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghYXJyKQorCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGsgPSAwOyBrIDwgYXJyX3N6OyArK2ssICsrYXJyKSB7CiAJCWlmIChzZXJ2aWNlX2FjdGlvbiA9PSBhcnItPnZhbHVlKQogCQkJYnJlYWs7CiAJfQotCXJldHVybiAoayA8IGFycl9zeikgPyBhcnItPm5hbWUgOiBOVUxMOworCWlmIChrIDwgYXJyX3N6KQorCQkqc2FfbmFtZSA9IGFyci0+bmFtZTsKKworCXJldHVybiB0cnVlOwogfQogCi0vKiBhdHRlbXB0IHRvIGd1ZXNzIGNkYiBsZW5ndGggaWYgY2RiX2xlbj09MCAuIE5vIHRyYWlsaW5nIGxpbmVmZWVkLiAqLwotc3RhdGljIHZvaWQgcHJpbnRfb3Bjb2RlX25hbWUodW5zaWduZWQgY2hhciAqIGNkYnAsIGludCBjZGJfbGVuKQorc3RhdGljIHZvaWQgcHJpbnRfb3Bjb2RlX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqY2RicCwgc2l6ZV90IGNkYl9sZW4pCiB7Ci0JaW50IHNhLCBsZW4sIGNkYjA7Ci0JaW50IGZpbl9uYW1lID0gMDsKLQljb25zdCBjaGFyICogbmFtZTsKKwlpbnQgc2EsIGNkYjA7CisJY29uc3QgY2hhciAqY2RiX25hbWUgPSBOVUxMLCAqc2FfbmFtZSA9IE5VTEw7CiAKIAljZGIwID0gY2RicFswXTsKLQlzd2l0Y2goY2RiMCkgewotCWNhc2UgVkFSSUFCTEVfTEVOR1RIX0NNRDoKLQkJbGVuID0gc2NzaV92YXJsZW5fY2RiX2xlbmd0aChjZGJwKTsKLQkJaWYgKGxlbiA8IDEwKSB7Ci0JCQlwcmludGsoInNob3J0IHZhcmlhYmxlIGxlbmd0aCBjb21tYW5kLCAiCi0JCQkgICAgICAgImxlbj0lZCBleHRfbGVuPSVkIiwgbGVuLCBjZGJfbGVuKTsKLQkJCWJyZWFrOworCWlmIChjZGIwID09IFZBUklBQkxFX0xFTkdUSF9DTUQpIHsKKwkJaWYgKGNkYl9sZW4gPCAxMCkgeworCQkJcHJpbnRrKCJzaG9ydCB2YXJpYWJsZSBsZW5ndGggY29tbWFuZCwgbGVuPSV6dSIsCisJCQkgICAgICAgY2RiX2xlbik7CisJCQlyZXR1cm47CiAJCX0KIAkJc2EgPSAoY2RicFs4XSA8PCA4KSArIGNkYnBbOV07Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZSh2YXJpYWJsZV9sZW5ndGhfYXJyLCBWQVJJQUJMRV9MRU5HVEhfU1osCi0JCQkJICAgc2EpOwotCQlpZiAobmFtZSkKLQkJCXByaW50aygiJXMiLCBuYW1lKTsKLQkJZWxzZQotCQkJcHJpbnRrKCJjZGJbMF09MHgleCwgc2E9MHgleCIsIGNkYjAsIHNhKTsKKwl9IGVsc2UKKwkJc2EgPSBjZGJwWzFdICYgMHgxZjsKIAotCQlpZiAoKGNkYl9sZW4gPiAwKSAmJiAobGVuICE9IGNkYl9sZW4pKQotCQkJcHJpbnRrKCIsIGluX2NkYl9sZW49JWQsIGV4dF9sZW49JWQiLCBsZW4sIGNkYl9sZW4pOwotCi0JCWJyZWFrOwotCWNhc2UgTUFJTlRFTkFOQ0VfSU46Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShtYWludF9pbl9hcnIsIE1BSU5UX0lOX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBNQUlOVEVOQU5DRV9PVVQ6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShtYWludF9vdXRfYXJyLCBNQUlOVF9PVVRfU1osIHNhKTsKLQkJZmluX25hbWUgPSAxOwotCQlicmVhazsKLQljYXNlIFBFUlNJU1RFTlRfUkVTRVJWRV9JTjoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKHByX2luX2FyciwgUFJfSU5fU1osIHNhKTsKLQkJZmluX25hbWUgPSAxOwotCQlicmVhazsKLQljYXNlIFBFUlNJU1RFTlRfUkVTRVJWRV9PVVQ6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShwcl9vdXRfYXJyLCBQUl9PVVRfU1osIHNhKTsKLQkJZmluX25hbWUgPSAxOwotCQlicmVhazsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzEyOgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQluYW1lID0gZ2V0X3NhX25hbWUoc2Vydl9pbjEyX2FyciwgU0VSVl9JTjEyX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9PVVRfMTI6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShzZXJ2X291dDEyX2FyciwgU0VSVl9PVVQxMl9TWiwgc2EpOwotCQlmaW5fbmFtZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fQklESVJFQ1RJT05BTDoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKHNlcnZfYmlkaV9hcnIsIFNFUlZfQklESV9TWiwgc2EpOwotCQlmaW5fbmFtZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6Ci0JCXNhID0gY2RicFsxXSAmIDB4MWY7Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShzZXJ2X2luMTZfYXJyLCBTRVJWX0lOMTZfU1osIHNhKTsKLQkJZmluX25hbWUgPSAxOwotCQlicmVhazsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX09VVF8xNjoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKHNlcnZfb3V0MTZfYXJyLCBTRVJWX09VVDE2X1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBUSElSRF9QQVJUWV9DT1BZX0lOOgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQluYW1lID0gZ2V0X3NhX25hbWUodHBjX2luX2FyciwgVFBDX0lOX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBUSElSRF9QQVJUWV9DT1BZX09VVDoKLQkJc2EgPSBjZGJwWzFdICYgMHgxZjsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKHRwY19vdXRfYXJyLCBUUENfT1VUX1NaLCBzYSk7Ci0JCWZpbl9uYW1lID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKGNkYjAgPCAweGMwKSB7Ci0JCQluYW1lID0gY2RiX2J5dGUwX25hbWVzW2NkYjBdOwotCQkJaWYgKG5hbWUpCi0JCQkJcHJpbnRrKCIlcyIsIG5hbWUpOwotCQkJZWxzZQotCQkJCXByaW50aygiY2RiWzBdPTB4JXggKHJlc2VydmVkKSIsIGNkYjApOwotCQl9IGVsc2UKKwlpZiAoIXNjc2lfb3Bjb2RlX3NhX25hbWUoY2RiMCwgc2EsICZjZGJfbmFtZSwgJnNhX25hbWUpKSB7CisJCWlmIChjZGJfbmFtZSkKKwkJCXByaW50aygiJXMiLCBjZGJfbmFtZSk7CisJCWVsc2UgaWYgKGNkYjAgPj0gVkVORE9SX1NQRUNJRklDX0NEQikKIAkJCXByaW50aygiY2RiWzBdPTB4JXggKHZlbmRvcikiLCBjZGIwKTsKLQkJYnJlYWs7Ci0JfQotCWlmIChmaW5fbmFtZSkgewotCQlpZiAobmFtZSkKLQkJCXByaW50aygiJXMiLCBuYW1lKTsKKwkJZWxzZSBpZiAoY2RiMCA+PSAweDYwICYmIGNkYjAgPCAweDdlKQorCQkJcHJpbnRrKCJjZGJbMF09MHgleCAocmVzZXJ2ZWQpIiwgY2RiMCk7CiAJCWVsc2UKLQkJCXByaW50aygiY2RiWzBdPTB4JXgsIHNhPTB4JXgiLCBjZGIwLCBzYSk7Ci0JfQotfQotCi0jZWxzZSAvKiBpZm5kZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTICovCi0KLXN0YXRpYyB2b2lkIHByaW50X29wY29kZV9uYW1lKHVuc2lnbmVkIGNoYXIgKiBjZGJwLCBpbnQgY2RiX2xlbikKLXsKLQlpbnQgc2EsIGxlbiwgY2RiMDsKLQotCWNkYjAgPSBjZGJwWzBdOwotCXN3aXRjaChjZGIwKSB7Ci0JY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgotCQlsZW4gPSBzY3NpX3Zhcmxlbl9jZGJfbGVuZ3RoKGNkYnApOwotCQlpZiAobGVuIDwgMTApIHsKLQkJCXByaW50aygic2hvcnQgb3Bjb2RlPTB4JXggY29tbWFuZCwgbGVuPSVkICIKLQkJCSAgICAgICAiZXh0X2xlbj0lZCIsIGNkYjAsIGxlbiwgY2RiX2xlbik7Ci0JCQlicmVhazsKLQkJfQotCQlzYSA9IChjZGJwWzhdIDw8IDgpICsgY2RicFs5XTsKLQkJcHJpbnRrKCJjZGJbMF09MHgleCwgc2E9MHgleCIsIGNkYjAsIHNhKTsKLQkJaWYgKGxlbiAhPSBjZGJfbGVuKQotCQkJcHJpbnRrKCIsIGluX2NkYl9sZW49JWQsIGV4dF9sZW49JWQiLCBsZW4sIGNkYl9sZW4pOwotCQlicmVhazsKLQljYXNlIE1BSU5URU5BTkNFX0lOOgotCWNhc2UgTUFJTlRFTkFOQ0VfT1VUOgotCWNhc2UgUEVSU0lTVEVOVF9SRVNFUlZFX0lOOgotCWNhc2UgUEVSU0lTVEVOVF9SRVNFUlZFX09VVDoKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzEyOgotCWNhc2UgU0VSVklDRV9BQ1RJT05fT1VUXzEyOgotCWNhc2UgU0VSVklDRV9BQ1RJT05fQklESVJFQ1RJT05BTDoKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgotCWNhc2UgU0VSVklDRV9BQ1RJT05fT1VUXzE2OgotCWNhc2UgVEhJUkRfUEFSVFlfQ09QWV9JTjoKLQljYXNlIFRISVJEX1BBUlRZX0NPUFlfT1VUOgotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCQlwcmludGsoImNkYlswXT0weCV4LCBzYT0weCV4IiwgY2RiMCwgc2EpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAoY2RiMCA8IDB4YzApCiAJCQlwcmludGsoImNkYlswXT0weCV4IiwgY2RiMCk7CisJfSBlbHNlIHsKKwkJaWYgKHNhX25hbWUpCisJCQlwcmludGsoIiVzIiwgc2FfbmFtZSk7CisJCWVsc2UgaWYgKGNkYl9uYW1lKQorCQkJcHJpbnRrKCIlcywgc2E9MHgleCIsIGNkYl9uYW1lLCBzYSk7CiAJCWVsc2UKLQkJCXByaW50aygiY2RiWzBdPTB4JXggKHZlbmRvcikiLCBjZGIwKTsKLQkJYnJlYWs7CisJCQlwcmludGsoImNkYlswXT0weCV4LCBzYT0weCV4IiwgY2RiMCwgc2EpOwogCX0KIH0KLSNlbmRpZgogCi12b2lkIF9fc2NzaV9wcmludF9jb21tYW5kKHVuc2lnbmVkIGNoYXIgKmNkYikKK3ZvaWQgX19zY3NpX3ByaW50X2NvbW1hbmQoY29uc3QgdW5zaWduZWQgY2hhciAqY2RiLCBzaXplX3QgY2RiX2xlbikKIHsKIAlpbnQgaywgbGVuOwogCi0JcHJpbnRfb3Bjb2RlX25hbWUoY2RiLCAwKTsKKwlwcmludF9vcGNvZGVfbmFtZShjZGIsIGNkYl9sZW4pOwogCWxlbiA9IHNjc2lfY29tbWFuZF9zaXplKGNkYik7CisJaWYgKGNkYl9sZW4gPCBsZW4pCisJCWxlbiA9IGNkYl9sZW47CiAJLyogcHJpbnQgb3V0IGFsbCBieXRlcyBpbiBjZGIgKi8KIAlmb3IgKGsgPSAwOyBrIDwgbGVuOyArK2spCiAJCXByaW50aygiICUwMngiLCBjZGJba10pOwpAQCAtNDMzLDQxICszODMsNiBAQAogfQogRVhQT1JUX1NZTUJPTChzY3NpX3ByaW50X2NvbW1hbmQpOwogCi0vKioKLSAqCXNjc2lfcHJpbnRfc3RhdHVzIC0gcHJpbnQgc2NzaSBzdGF0dXMgZGVzY3JpcHRpb24KLSAqCUBzY3NpX3N0YXR1czogc2NzaSBzdGF0dXMgdmFsdWUKLSAqCi0gKglJZiB0aGUgc3RhdHVzIGlzIHJlY29nbml6ZWQsIHRoZSBkZXNjcmlwdGlvbiBpcyBwcmludGVkLgotICoJT3RoZXJ3aXNlICJVbmtub3duIHN0YXR1cyIgaXMgb3V0cHV0LiBObyB0cmFpbGluZyBzcGFjZS4KLSAqCUlmIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0LCB0aGVuIHByaW50IHN0YXR1cyBpbiBoZXgKLSAqCShlLmcuICIweDIiIGZvciBDaGVjayBDb25kaXRpb24pLgotICoqLwotdm9pZAotc2NzaV9wcmludF9zdGF0dXModW5zaWduZWQgY2hhciBzY3NpX3N0YXR1cykgewotI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUwotCWNvbnN0IGNoYXIgKiBjY3A7Ci0KLQlzd2l0Y2ggKHNjc2lfc3RhdHVzKSB7Ci0JY2FzZSAwOiAgICBjY3AgPSAiR29vZCI7IGJyZWFrOwotCWNhc2UgMHgyOiAgY2NwID0gIkNoZWNrIENvbmRpdGlvbiI7IGJyZWFrOwotCWNhc2UgMHg0OiAgY2NwID0gIkNvbmRpdGlvbiBNZXQiOyBicmVhazsKLQljYXNlIDB4ODogIGNjcCA9ICJCdXN5IjsgYnJlYWs7Ci0JY2FzZSAweDEwOiBjY3AgPSAiSW50ZXJtZWRpYXRlIjsgYnJlYWs7Ci0JY2FzZSAweDE0OiBjY3AgPSAiSW50ZXJtZWRpYXRlLUNvbmRpdGlvbiBNZXQiOyBicmVhazsKLQljYXNlIDB4MTg6IGNjcCA9ICJSZXNlcnZhdGlvbiBDb25mbGljdCI7IGJyZWFrOwotCWNhc2UgMHgyMjogY2NwID0gIkNvbW1hbmQgVGVybWluYXRlZCI7IGJyZWFrOwkvKiBvYnNvbGV0ZSAqLwotCWNhc2UgMHgyODogY2NwID0gIlRhc2sgc2V0IEZ1bGwiOyBicmVhazsJLyogd2FzOiBRdWV1ZSBGdWxsICovCi0JY2FzZSAweDMwOiBjY3AgPSAiQUNBIEFjdGl2ZSI7IGJyZWFrOwotCWNhc2UgMHg0MDogY2NwID0gIlRhc2sgQWJvcnRlZCI7IGJyZWFrOwotCWRlZmF1bHQ6ICAgY2NwID0gIlVua25vd24gc3RhdHVzIjsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCBjY3ApOwotI2Vsc2UKLQlwcmludGsoS0VSTl9JTkZPICIweCUweCIsIHNjc2lfc3RhdHVzKTsKLSNlbmRpZgotfQotRVhQT1JUX1NZTUJPTChzY3NpX3ByaW50X3N0YXR1cyk7Ci0KICNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKIAogc3RydWN0IGVycm9yX2luZm8gewpAQCAtMTI5MiwxOCArMTIwNywxOSBAQAogCiBzdHJ1Y3QgZXJyb3JfaW5mbzIgewogCXVuc2lnbmVkIGNoYXIgY29kZTEsIGNvZGUyX21pbiwgY29kZTJfbWF4OworCWNvbnN0IGNoYXIgKiBzdHI7CiAJY29uc3QgY2hhciAqIGZtdDsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXJyb3JfaW5mbzIgYWRkaXRpb25hbDJbXSA9CiB7Ci0JezB4NDAsIDB4MDAsIDB4N2YsICJSYW0gZmFpbHVyZSAoJXgpIn0sCi0JezB4NDAsIDB4ODAsIDB4ZmYsICJEaWFnbm9zdGljIGZhaWx1cmUgb24gY29tcG9uZW50ICgleCkifSwKLQl7MHg0MSwgMHgwMCwgMHhmZiwgIkRhdGEgcGF0aCBmYWlsdXJlICgleCkifSwKLQl7MHg0MiwgMHgwMCwgMHhmZiwgIlBvd2VyLW9uIG9yIHNlbGYtdGVzdCBmYWlsdXJlICgleCkifSwKLQl7MHg0RCwgMHgwMCwgMHhmZiwgIlRhZ2dlZCBvdmVybGFwcGVkIGNvbW1hbmRzICh0YXNrIHRhZyAleCkifSwKLQl7MHg3MCwgMHgwMCwgMHhmZiwgIkRlY29tcHJlc3Npb24gZXhjZXB0aW9uIHNob3J0IGFsZ29yaXRobSBpZCBvZiAleCJ9LAotCXswLCAwLCAwLCBOVUxMfQorCXsweDQwLCAweDAwLCAweDdmLCAiUmFtIGZhaWx1cmUiLCAiIn0sCisJezB4NDAsIDB4ODAsIDB4ZmYsICJEaWFnbm9zdGljIGZhaWx1cmUgb24gY29tcG9uZW50IiwgIiJ9LAorCXsweDQxLCAweDAwLCAweGZmLCAiRGF0YSBwYXRoIGZhaWx1cmUiLCAiIn0sCisJezB4NDIsIDB4MDAsIDB4ZmYsICJQb3dlci1vbiBvciBzZWxmLXRlc3QgZmFpbHVyZSIsICIifSwKKwl7MHg0RCwgMHgwMCwgMHhmZiwgIlRhZ2dlZCBvdmVybGFwcGVkIGNvbW1hbmRzIiwgInRhc2sgdGFnICJ9LAorCXsweDcwLCAweDAwLCAweGZmLCAiRGVjb21wcmVzc2lvbiBleGNlcHRpb24iLCAic2hvcnQgYWxnb3JpdGhtIGlkIG9mICJ9LAorCXswLCAwLCAwLCBOVUxMLCBOVUxMfQogfTsKIAogLyogZGVzY3JpcHRpb24gb2YgdGhlIHNlbnNlIGtleSB2YWx1ZXMgKi8KQEAgLTEzNDksNjkgKzEyNjUsNzkgQEAKICAqIFRoaXMgc3RyaW5nIG1heSBjb250YWluIGEgIiV4IiBhbmQgc2hvdWxkIGJlIHByaW50ZWQgd2l0aCBhc2NxIGFzIGFyZy4KICAqLwogY29uc3QgY2hhciAqCi1zY3NpX2V4dGRfc2Vuc2VfZm9ybWF0KHVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EpIHsKK3Njc2lfZXh0ZF9zZW5zZV9mb3JtYXQodW5zaWduZWQgY2hhciBhc2MsIHVuc2lnbmVkIGNoYXIgYXNjcSwgY29uc3QgY2hhciAqKmZtdCkKK3sKICNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKIAlpbnQgaTsKIAl1bnNpZ25lZCBzaG9ydCBjb2RlID0gKChhc2MgPDwgOCkgfCBhc2NxKTsKIAorCSpmbXQgPSBOVUxMOwogCWZvciAoaSA9IDA7IGFkZGl0aW9uYWxbaV0udGV4dDsgaSsrKQogCQlpZiAoYWRkaXRpb25hbFtpXS5jb2RlMTIgPT0gY29kZSkKIAkJCXJldHVybiBhZGRpdGlvbmFsW2ldLnRleHQ7CiAJZm9yIChpID0gMDsgYWRkaXRpb25hbDJbaV0uZm10OyBpKyspIHsKIAkJaWYgKGFkZGl0aW9uYWwyW2ldLmNvZGUxID09IGFzYyAmJgogCQkgICAgYXNjcSA+PSBhZGRpdGlvbmFsMltpXS5jb2RlMl9taW4gJiYKLQkJICAgIGFzY3EgPD0gYWRkaXRpb25hbDJbaV0uY29kZTJfbWF4KQotCQkJcmV0dXJuIGFkZGl0aW9uYWwyW2ldLmZtdDsKKwkJICAgIGFzY3EgPD0gYWRkaXRpb25hbDJbaV0uY29kZTJfbWF4KSB7CisJCQkqZm10ID0gYWRkaXRpb25hbDJbaV0uZm10OworCQkJcmV0dXJuIGFkZGl0aW9uYWwyW2ldLnN0cjsKKwkJfQogCX0KKyNlbHNlCisJKmZtdCA9IE5VTEw7CiAjZW5kaWYKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9leHRkX3NlbnNlX2Zvcm1hdCk7CiAKIHZvaWQKLXNjc2lfc2hvd19leHRkX3NlbnNlKHVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EpCitzY3NpX3Nob3dfZXh0ZF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgdW5zaWduZWQgY2hhciBhc2MsIHVuc2lnbmVkIGNoYXIgYXNjcSkKIHsKLSAgICAgICAgY29uc3QgY2hhciAqZXh0ZF9zZW5zZV9mbXQgPSBzY3NpX2V4dGRfc2Vuc2VfZm9ybWF0KGFzYywgYXNjcSk7CisJY29uc3QgY2hhciAqZXh0ZF9zZW5zZV9mbXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKmV4dGRfc2Vuc2Vfc3RyID0gc2NzaV9leHRkX3NlbnNlX2Zvcm1hdChhc2MsIGFzY3EsCisJCQkJCQkJICAgICZleHRkX3NlbnNlX2ZtdCk7CiAKLQlpZiAoZXh0ZF9zZW5zZV9mbXQpIHsKLQkJaWYgKHN0cnN0cihleHRkX3NlbnNlX2ZtdCwgIiV4IikpIHsKLQkJCXByaW50aygiQWRkLiBTZW5zZTogIik7Ci0JCQlwcmludGsoZXh0ZF9zZW5zZV9mbXQsIGFzY3EpOwotCQl9IGVsc2UKLQkJCXByaW50aygiQWRkLiBTZW5zZTogJXMiLCBleHRkX3NlbnNlX2ZtdCk7Ci0JfSBlbHNlIHsKLQkJaWYgKGFzYyA+PSAweDgwKQotCQkJcHJpbnRrKCI8PHZlbmRvcj4+IEFTQz0weCV4IEFTQ1E9MHgleCIsIGFzYywKLQkJCSAgICAgICBhc2NxKTsKLQkJaWYgKGFzY3EgPj0gMHg4MCkKLQkJCXByaW50aygiQVNDPTB4JXggPDx2ZW5kb3I+PiBBU0NRPTB4JXgiLCBhc2MsCi0JCQkgICAgICAgYXNjcSk7CisJaWYgKGV4dGRfc2Vuc2Vfc3RyKSB7CisJCWlmIChleHRkX3NlbnNlX2ZtdCkKKwkJCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCisJCQkJCSAgICJBZGQuIFNlbnNlOiAlcyAoJXMleCkiLAorCQkJCQkgICBleHRkX3NlbnNlX3N0ciwgZXh0ZF9zZW5zZV9mbXQsCisJCQkJCSAgIGFzY3EpOwogCQllbHNlCi0JCQlwcmludGsoIkFTQz0weCV4IEFTQ1E9MHgleCIsIGFzYywgYXNjcSk7Ci0JfQorCQkJc2Rldl9wcmVmaXhfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgbmFtZSwKKwkJCQkJICAgIkFkZC4gU2Vuc2U6ICVzIiwgZXh0ZF9zZW5zZV9zdHIpOwogCi0JcHJpbnRrKCJcbiIpOworCX0gZWxzZSB7CisJCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCisJCQkJICAgIiVzQVNDPTB4JXggJXNBU0NRPTB4JXhcbiIsCisJCQkJICAgYXNjID49IDB4ODAgPyAiPDx2ZW5kb3I+PiAiIDogIiIsIGFzYywKKwkJCQkgICBhc2NxID49IDB4ODAgPyAiPDx2ZW5kb3I+PiAiIDogIiIsIGFzY3EpOworCX0KIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9zaG93X2V4dGRfc2Vuc2UpOwogCiB2b2lkCi1zY3NpX3Nob3dfc2Vuc2VfaGRyKHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCitzY3NpX3Nob3dfc2Vuc2VfaGRyKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCiB7CiAJY29uc3QgY2hhciAqc2Vuc2VfdHh0OwogCiAJc2Vuc2VfdHh0ID0gc2NzaV9zZW5zZV9rZXlfc3RyaW5nKHNzaGRyLT5zZW5zZV9rZXkpOwogCWlmIChzZW5zZV90eHQpCi0JCXByaW50aygiU2Vuc2UgS2V5IDogJXMgIiwgc2Vuc2VfdHh0KTsKKwkJc2Rldl9wcmVmaXhfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgbmFtZSwKKwkJCQkgICAiU2Vuc2UgS2V5IDogJXMgWyVzXSVzXG4iLCBzZW5zZV90eHQsCisJCQkJICAgc2NzaV9zZW5zZV9pc19kZWZlcnJlZChzc2hkcikgPworCQkJCSAgICJkZWZlcnJlZCIgOiAiY3VycmVudCIsCisJCQkJICAgc3NoZHItPnJlc3BvbnNlX2NvZGUgPj0gMHg3MiA/CisJCQkJICAgIiBbZGVzY3JpcHRvcl0iIDogIiIpOwogCWVsc2UKLQkJcHJpbnRrKCJTZW5zZSBLZXkgOiAweCV4ICIsIHNzaGRyLT5zZW5zZV9rZXkpOwotCi0JcHJpbnRrKCIlcyIsIHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoc3NoZHIpID8gIltkZWZlcnJlZF0gIiA6Ci0JICAgICAgICJbY3VycmVudF0gIik7Ci0KLQlpZiAoc3NoZHItPnJlc3BvbnNlX2NvZGUgPj0gMHg3MikKLQkJcHJpbnRrKCJbZGVzY3JpcHRvcl0iKTsKLQotCXByaW50aygiXG4iKTsKKwkJc2Rldl9wcmVmaXhfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgbmFtZSwKKwkJCQkgICAiU2Vuc2UgS2V5IDogMHgleCBbJXNdJXMiLCBzc2hkci0+c2Vuc2Vfa2V5LAorCQkJCSAgIHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoc3NoZHIpID8KKwkJCQkgICAiZGVmZXJyZWQiIDogImN1cnJlbnQiLAorCQkJCSAgIHNzaGRyLT5yZXNwb25zZV9jb2RlID49IDB4NzIgPworCQkJCSAgICIgW2Rlc2NyaXB0b3JdIiA6ICIiKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9zaG93X3NlbnNlX2hkcik7CiAKQEAgLTE0MTksMTQxICsxMzQ1LDU1IEBACiAgKiBQcmludCBub3JtYWxpemVkIFNDU0kgc2Vuc2UgaGVhZGVyIHdpdGggYSBwcmVmaXguCiAgKi8KIHZvaWQKLXNjc2lfcHJpbnRfc2Vuc2VfaGRyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCitzY3NpX3ByaW50X3NlbnNlX2hkcihjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKIHsKLQlwcmludGsoS0VSTl9JTkZPICIlczogIiwgbmFtZSk7Ci0Jc2NzaV9zaG93X3NlbnNlX2hkcihzc2hkcik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIsIG5hbWUpOwotCXNjc2lfc2hvd19leHRkX3NlbnNlKHNzaGRyLT5hc2MsIHNzaGRyLT5hc2NxKTsKKwlzY3NpX3Nob3dfc2Vuc2VfaGRyKHNkZXYsIG5hbWUsIHNzaGRyKTsKKwlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzZGV2LCBuYW1lLCBzc2hkci0+YXNjLCBzc2hkci0+YXNjcSk7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfc2Vuc2VfaGRyKTsKIAotLyoKLSAqIFByaW50IG5vcm1hbGl6ZWQgU0NTSSBzZW5zZSBoZWFkZXIgd2l0aCBkZXZpY2UgaW5mb3JtYXRpb24gYW5kIGEgcHJlZml4LgotICovCi12b2lkCi1zY3NpX2NtZF9wcmludF9zZW5zZV9oZHIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgY29uc3QgY2hhciAqZGVzYywKLQkJCSAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKLXsKLQlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsICIlczogIiwgZGVzYyk7Ci0Jc2NzaV9zaG93X3NlbnNlX2hkcihzc2hkcik7Ci0Jc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLCAiJXM6ICIsIGRlc2MpOwotCXNjc2lfc2hvd19leHRkX3NlbnNlKHNzaGRyLT5hc2MsIHNzaGRyLT5hc2NxKTsKLX0KLUVYUE9SVF9TWU1CT0woc2NzaV9jbWRfcHJpbnRfc2Vuc2VfaGRyKTsKLQogc3RhdGljIHZvaWQKLXNjc2lfZGVjb2RlX3NlbnNlX2J1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzZW5zZV9idWZmZXIsIGludCBzZW5zZV9sZW4sCi0JCSAgICAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQorc2NzaV9kdW1wX3NlbnNlX2J1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzZW5zZV9idWZmZXIsIGludCBzZW5zZV9sZW4pCiB7Ci0JaW50IGssIG51bSwgcmVzOworCWludCBrLCBudW07CiAKLQlyZXMgPSBzY3NpX25vcm1hbGl6ZV9zZW5zZShzZW5zZV9idWZmZXIsIHNlbnNlX2xlbiwgc3NoZHIpOwotCWlmICgwID09IHJlcykgewotCQkvKiB0aGlzIG1heSBiZSBTQ1NJLTEgc2Vuc2UgZGF0YSAqLwotCQludW0gPSAoc2Vuc2VfbGVuIDwgMzIpID8gc2Vuc2VfbGVuIDogMzI7Ci0JCXByaW50aygiVW5yZWNvZ25pemVkIHNlbnNlIGRhdGEgKGluIGhleCk6Iik7Ci0JCWZvciAoayA9IDA7IGsgPCBudW07ICsraykgewotCQkJaWYgKDAgPT0gKGsgJSAxNikpIHsKLQkJCQlwcmludGsoIlxuIik7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgICAiKTsKLQkJCX0KLQkJCXByaW50aygiJTAyeCAiLCBzZW5zZV9idWZmZXJba10pOworCW51bSA9IChzZW5zZV9sZW4gPCAzMikgPyBzZW5zZV9sZW4gOiAzMjsKKwlwcmludGsoIlVucmVjb2duaXplZCBzZW5zZSBkYXRhIChpbiBoZXgpOiIpOworCWZvciAoayA9IDA7IGsgPCBudW07ICsraykgeworCQlpZiAoMCA9PSAoayAlIDE2KSkgeworCQkJcHJpbnRrKCJcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgICAiKTsKIAkJfQotCQlwcmludGsoIlxuIik7Ci0JCXJldHVybjsKKwkJcHJpbnRrKCIlMDJ4ICIsIHNlbnNlX2J1ZmZlcltrXSk7CiAJfQotfQotCi1zdGF0aWMgdm9pZAotc2NzaV9kZWNvZGVfc2Vuc2VfZXh0cmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwgaW50IHNlbnNlX2xlbiwKLQkJCSBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQotewotCWludCBrLCBudW0sIHJlczsKLQotCWlmIChzc2hkci0+cmVzcG9uc2VfY29kZSA8IDB4NzIpCi0JewotCQkvKiBvbmx5IGRlY29kZSBleHRyYXMgZm9yICJmaXhlZCIgZm9ybWF0IG5vdyAqLwotCQljaGFyIGJ1ZmZbODBdOwotCQlpbnQgYmxlbiwgZml4ZWRfdmFsaWQ7Ci0JCXVuc2lnbmVkIGludCBpbmZvOwotCi0JCWZpeGVkX3ZhbGlkID0gc2Vuc2VfYnVmZmVyWzBdICYgMHg4MDsKLQkJaW5mbyA9ICgoc2Vuc2VfYnVmZmVyWzNdIDw8IDI0KSB8IChzZW5zZV9idWZmZXJbNF0gPDwgMTYpIHwKLQkJCShzZW5zZV9idWZmZXJbNV0gPDwgOCkgfCBzZW5zZV9idWZmZXJbNl0pOwotCQlyZXMgPSAwOwotCQltZW1zZXQoYnVmZiwgMCwgc2l6ZW9mKGJ1ZmYpKTsKLQkJYmxlbiA9IHNpemVvZihidWZmKSAtIDE7Ci0JCWlmIChmaXhlZF92YWxpZCkKLQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLAotCQkJCQkiSW5mbyBmbGQ9MHgleCIsIGluZm8pOwotCQlpZiAoc2Vuc2VfYnVmZmVyWzJdICYgMHg4MCkgewotCQkJLyogY3VycmVudCBjb21tYW5kIGhhcyByZWFkIGEgZmlsZW1hcmsgKi8KLQkJCWlmIChyZXMgPiAwKQotCQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLCAiLCAiKTsKLQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLCAiRk1LIik7Ci0JCX0KLQkJaWYgKHNlbnNlX2J1ZmZlclsyXSAmIDB4NDApIHsKLQkJCS8qIGVuZC1vZi1tZWRpdW0gY29uZGl0aW9uIGV4aXN0cyAqLwotCQkJaWYgKHJlcyA+IDApCi0JCQkJcmVzICs9IHNucHJpbnRmKGJ1ZmYgKyByZXMsIGJsZW4gLSByZXMsICIsICIpOwotCQkJcmVzICs9IHNucHJpbnRmKGJ1ZmYgKyByZXMsIGJsZW4gLSByZXMsICJFT00iKTsKLQkJfQotCQlpZiAoc2Vuc2VfYnVmZmVyWzJdICYgMHgyMCkgewotCQkJLyogaW5jb3JyZWN0IGJsb2NrIGxlbmd0aCByZXF1ZXN0ZWQgKi8KLQkJCWlmIChyZXMgPiAwKQotCQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLCAiLCAiKTsKLQkJCXJlcyArPSBzbnByaW50ZihidWZmICsgcmVzLCBibGVuIC0gcmVzLCAiSUxJIik7Ci0JCX0KLQkJaWYgKHJlcyA+IDApCi0JCQlwcmludGsoIiVzXG4iLCBidWZmKTsKLQl9IGVsc2UgaWYgKHNzaGRyLT5hZGRpdGlvbmFsX2xlbmd0aCA+IDApIHsKLQkJLyogZGVzY3JpcHRvciBmb3JtYXQgd2l0aCBzZW5zZSBkZXNjcmlwdG9ycyAqLwotCQludW0gPSA4ICsgc3NoZHItPmFkZGl0aW9uYWxfbGVuZ3RoOwotCQludW0gPSAoc2Vuc2VfbGVuIDwgbnVtKSA/IHNlbnNlX2xlbiA6IG51bTsKLQkJcHJpbnRrKCJEZXNjcmlwdG9yIHNlbnNlIGRhdGEgd2l0aCBzZW5zZSBkZXNjcmlwdG9ycyAiCi0JCSAgICAgICAiKGluIGhleCk6Iik7Ci0JCWZvciAoayA9IDA7IGsgPCBudW07ICsraykgewotCQkJaWYgKDAgPT0gKGsgJSAxNikpIHsKLQkJCQlwcmludGsoIlxuIik7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgICAiKTsKLQkJCX0KLQkJCXByaW50aygiJTAyeCAiLCBzZW5zZV9idWZmZXJba10pOwotCQl9Ci0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLQorCXByaW50aygiXG4iKTsKKwlyZXR1cm47CiB9CiAKIC8qIE5vcm1hbGl6ZSBhbmQgcHJpbnQgc2Vuc2UgYnVmZmVyIHdpdGggbmFtZSBwcmVmaXggKi8KLXZvaWQgX19zY3NpX3ByaW50X3NlbnNlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwKLQkJCWludCBzZW5zZV9sZW4pCit2b2lkIF9fc2NzaV9wcmludF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZW5zZV9idWZmZXIsIGludCBzZW5zZV9sZW4pCiB7CiAJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIsIG5hbWUpOwotCXNjc2lfZGVjb2RlX3NlbnNlX2J1ZmZlcihzZW5zZV9idWZmZXIsIHNlbnNlX2xlbiwgJnNzaGRyKTsKLQlzY3NpX3Nob3dfc2Vuc2VfaGRyKCZzc2hkcik7Ci0Jc2NzaV9kZWNvZGVfc2Vuc2VfZXh0cmFzKHNlbnNlX2J1ZmZlciwgc2Vuc2VfbGVuLCAmc3NoZHIpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiAiLCBuYW1lKTsKLQlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzc2hkci5hc2MsIHNzaGRyLmFzY3EpOworCWlmICghc2NzaV9ub3JtYWxpemVfc2Vuc2Uoc2Vuc2VfYnVmZmVyLCBzZW5zZV9sZW4sICZzc2hkcikpIHsKKwkJc2NzaV9kdW1wX3NlbnNlX2J1ZmZlcihzZW5zZV9idWZmZXIsIHNlbnNlX2xlbik7CisJCXJldHVybjsKKwl9CisJc2NzaV9zaG93X3NlbnNlX2hkcihzZGV2LCBuYW1lLCAmc3NoZHIpOworCXNjc2lfc2hvd19leHRkX3NlbnNlKHNkZXYsIG5hbWUsIHNzaGRyLmFzYywgc3NoZHIuYXNjcSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fc2NzaV9wcmludF9zZW5zZSk7CiAKIC8qIE5vcm1hbGl6ZSBhbmQgcHJpbnQgc2Vuc2UgYnVmZmVyIGluIFNDU0kgY29tbWFuZCAqLwotdm9pZCBzY3NpX3ByaW50X3NlbnNlKGNoYXIgKm5hbWUsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3ZvaWQgc2NzaV9wcmludF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0Jc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gY21kLT5yZXF1ZXN0LT5ycV9kaXNrOworCWNvbnN0IGNoYXIgKmRpc2tfbmFtZSA9IGRpc2sgPyBkaXNrLT5kaXNrX25hbWUgOiBOVUxMOwogCi0Jc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsICIgIik7Ci0Jc2NzaV9kZWNvZGVfc2Vuc2VfYnVmZmVyKGNtZC0+c2Vuc2VfYnVmZmVyLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsCi0JCQkJICZzc2hkcik7Ci0Jc2NzaV9zaG93X3NlbnNlX2hkcigmc3NoZHIpOwotCXNjc2lfZGVjb2RlX3NlbnNlX2V4dHJhcyhjbWQtPnNlbnNlX2J1ZmZlciwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLAotCQkJCSAmc3NoZHIpOwotCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLCAiICIpOwotCXNjc2lfc2hvd19leHRkX3NlbnNlKHNzaGRyLmFzYywgc3NoZHIuYXNjcSk7CisJX19zY3NpX3ByaW50X3NlbnNlKGNtZC0+ZGV2aWNlLCBkaXNrX25hbWUsIGNtZC0+c2Vuc2VfYnVmZmVyLAorCQkJICAgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9wcmludF9zZW5zZSk7CiAKQEAgLTE1NjUsMzggKzE0MDUsODcgQEAKICJESURfUEFTU1RIUk9VR0giLCAiRElEX1NPRlRfRVJST1IiLCAiRElEX0lNTV9SRVRSWSIsICJESURfUkVRVUVVRSIsCiAiRElEX1RSQU5TUE9SVF9ESVNSVVBURUQiLCAiRElEX1RSQU5TUE9SVF9GQUlMRkFTVCIsICJESURfVEFSR0VUX0ZBSUxVUkUiLAogIkRJRF9ORVhVU19GQUlMVVJFIiB9OwotI2RlZmluZSBOVU1fSE9TVEJZVEVfU1RSUyBBUlJBWV9TSVpFKGhvc3RieXRlX3RhYmxlKQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRyaXZlcmJ5dGVfdGFibGVbXT17CiAiRFJJVkVSX09LIiwgIkRSSVZFUl9CVVNZIiwgIkRSSVZFUl9TT0ZUIiwgICJEUklWRVJfTUVESUEiLCAiRFJJVkVSX0VSUk9SIiwKICJEUklWRVJfSU5WQUxJRCIsICJEUklWRVJfVElNRU9VVCIsICJEUklWRVJfSEFSRCIsICJEUklWRVJfU0VOU0UifTsKLSNkZWZpbmUgTlVNX0RSSVZFUkJZVEVfU1RSUyBBUlJBWV9TSVpFKGRyaXZlcmJ5dGVfdGFibGUpCi0KLXZvaWQgc2NzaV9zaG93X3Jlc3VsdChpbnQgcmVzdWx0KQotewotCWludCBoYiA9IGhvc3RfYnl0ZShyZXN1bHQpOwotCWludCBkYiA9IGRyaXZlcl9ieXRlKHJlc3VsdCk7Ci0KLQlwcmludGsoIlJlc3VsdDogaG9zdGJ5dGU9JXMgZHJpdmVyYnl0ZT0lc1xuIiwKLQkgICAgICAgKGhiIDwgTlVNX0hPU1RCWVRFX1NUUlMgPyBob3N0Ynl0ZV90YWJsZVtoYl0gICAgIDogImludmFsaWQiKSwKLQkgICAgICAgKGRiIDwgTlVNX0RSSVZFUkJZVEVfU1RSUyA/IGRyaXZlcmJ5dGVfdGFibGVbZGJdIDogImludmFsaWQiKSk7Ci19Ci0KLSNlbHNlCi0KLXZvaWQgc2NzaV9zaG93X3Jlc3VsdChpbnQgcmVzdWx0KQotewotCXByaW50aygiUmVzdWx0OiBob3N0Ynl0ZT0weCUwMnggZHJpdmVyYnl0ZT0weCUwMnhcbiIsCi0JICAgICAgIGhvc3RfYnl0ZShyZXN1bHQpLCBkcml2ZXJfYnl0ZShyZXN1bHQpKTsKLX0KIAogI2VuZGlmCi1FWFBPUlRfU1lNQk9MKHNjc2lfc2hvd19yZXN1bHQpOwogCi0KLXZvaWQgc2NzaV9wcmludF9yZXN1bHQoc3RydWN0IHNjc2lfY21uZCAqY21kKQorY29uc3QgY2hhciAqc2NzaV9ob3N0Ynl0ZV9zdHJpbmcoaW50IHJlc3VsdCkKIHsKLQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIiAiKTsKLQlzY3NpX3Nob3dfcmVzdWx0KGNtZC0+cmVzdWx0KTsKKwljb25zdCBjaGFyICpoYl9zdHJpbmcgPSBOVUxMOworI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUworCWludCBoYiA9IGhvc3RfYnl0ZShyZXN1bHQpOworCisJaWYgKGhiIDwgQVJSQVlfU0laRShob3N0Ynl0ZV90YWJsZSkpCisJCWhiX3N0cmluZyA9IGhvc3RieXRlX3RhYmxlW2hiXTsKKyNlbmRpZgorCXJldHVybiBoYl9zdHJpbmc7Cit9CitFWFBPUlRfU1lNQk9MKHNjc2lfaG9zdGJ5dGVfc3RyaW5nKTsKKworY29uc3QgY2hhciAqc2NzaV9kcml2ZXJieXRlX3N0cmluZyhpbnQgcmVzdWx0KQoreworCWNvbnN0IGNoYXIgKmRiX3N0cmluZyA9IE5VTEw7CisjaWZkZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTCisJaW50IGRiID0gZHJpdmVyX2J5dGUocmVzdWx0KTsKKworCWlmIChkYiA8IEFSUkFZX1NJWkUoZHJpdmVyYnl0ZV90YWJsZSkpCisJCWRiX3N0cmluZyA9IGRyaXZlcmJ5dGVfdGFibGVbZGJdOworI2VuZGlmCisJcmV0dXJuIGRiX3N0cmluZzsKK30KK0VYUE9SVF9TWU1CT0woc2NzaV9kcml2ZXJieXRlX3N0cmluZyk7CisKKyNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKKyNkZWZpbmUgc2NzaV9tbHJldHVybl9uYW1lKHJlc3VsdCkJeyByZXN1bHQsICNyZXN1bHQgfQorc3RhdGljIGNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgc2NzaV9tbHJldHVybl9hcnJbXSA9IHsKKwlzY3NpX21scmV0dXJuX25hbWUoTkVFRFNfUkVUUlkpLAorCXNjc2lfbWxyZXR1cm5fbmFtZShTVUNDRVNTKSwKKwlzY3NpX21scmV0dXJuX25hbWUoRkFJTEVEKSwKKwlzY3NpX21scmV0dXJuX25hbWUoUVVFVUVEKSwKKwlzY3NpX21scmV0dXJuX25hbWUoU09GVF9FUlJPUiksCisJc2NzaV9tbHJldHVybl9uYW1lKEFERF9UT19NTFFVRVVFKSwKKwlzY3NpX21scmV0dXJuX25hbWUoVElNRU9VVF9FUlJPUiksCisJc2NzaV9tbHJldHVybl9uYW1lKFNDU0lfUkVUVVJOX05PVF9IQU5ETEVEKSwKKwlzY3NpX21scmV0dXJuX25hbWUoRkFTVF9JT19GQUlMKQorfTsKKyNlbmRpZgorCitjb25zdCBjaGFyICpzY3NpX21scmV0dXJuX3N0cmluZyhpbnQgcmVzdWx0KQoreworI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUworCWNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgKmFyciA9IHNjc2lfbWxyZXR1cm5fYXJyOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoc2NzaV9tbHJldHVybl9hcnIpOyArK2ssICsrYXJyKSB7CisJCWlmIChyZXN1bHQgPT0gYXJyLT52YWx1ZSkKKwkJCXJldHVybiBhcnItPm5hbWU7CisJfQorI2VuZGlmCisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHNjc2lfbWxyZXR1cm5fc3RyaW5nKTsKKwordm9pZCBzY3NpX3ByaW50X3Jlc3VsdChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGRpc3Bvc2l0aW9uKQoreworCWNvbnN0IGNoYXIgKm1scmV0X3N0cmluZyA9IHNjc2lfbWxyZXR1cm5fc3RyaW5nKGRpc3Bvc2l0aW9uKTsKKwljb25zdCBjaGFyICpoYl9zdHJpbmcgPSBzY3NpX2hvc3RieXRlX3N0cmluZyhjbWQtPnJlc3VsdCk7CisJY29uc3QgY2hhciAqZGJfc3RyaW5nID0gc2NzaV9kcml2ZXJieXRlX3N0cmluZyhjbWQtPnJlc3VsdCk7CisKKwlpZiAoaGJfc3RyaW5nIHx8IGRiX3N0cmluZykKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCisJCQkgICAgIiVzJXMgUmVzdWx0OiBob3N0Ynl0ZT0lcyBkcml2ZXJieXRlPSVzIiwKKwkJCSAgICBtc2cgPyBtc2cgOiAiIiwKKwkJCSAgICBtbHJldF9zdHJpbmcgPyBtbHJldF9zdHJpbmcgOiAiVU5LTk9XTiIsCisJCQkgICAgaGJfc3RyaW5nID8gaGJfc3RyaW5nIDogImludmFsaWQiLAorCQkJICAgIGRiX3N0cmluZyA/IGRiX3N0cmluZyA6ICJpbnZhbGlkIik7CisJZWxzZQorCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKKwkJCSAgICAiJXMlcyBSZXN1bHQ6IGhvc3RieXRlPTB4JTAyeCBkcml2ZXJieXRlPTB4JTAyeCIsCisJCQkgICAgbXNnID8gbXNnIDogIiIsCisJCQkgICAgbWxyZXRfc3RyaW5nID8gbWxyZXRfc3RyaW5nIDogIlVOS05PV04iLAorCQkJICAgIGhvc3RfYnl0ZShjbWQtPnJlc3VsdCksIGRyaXZlcl9ieXRlKGNtZC0+cmVzdWx0KSk7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX3Njc2kuYwppbmRleCA4NjEwM2M4Li40ZDBiNmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9fc2NzaS5jCkBAIC0xNTIsMjggKzE1Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotY3Npb19zY3NpX3RhZyhzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCwgdWludDhfdCAqdGFnLCB1aW50OF90IGhxLAotCSAgICAgIHVpbnQ4X3Qgb3EsIHVpbnQ4X3Qgc3EpCi17Ci0JY2hhciBzdGFnWzJdOwotCi0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY21uZCwgc3RhZykpIHsKLQkJc3dpdGNoIChzdGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQkqdGFnID0gaHE7Ci0JCQlicmVhazsKLQkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJCSp0YWcgPSBvcTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJKnRhZyA9IHNxOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UKLQkJKnRhZyA9IDA7Ci19Ci0KIC8qCiAgKiBjc2lvX3Njc2lfZmNwX2NtbmQgLSBGcmFtZSB0aGUgU0NTSSBGQ1AgY29tbWFuZCBwYXlsb2QuCiAgKiBAcmVxOiBJTyByZXEgc3RydWN0dXJlLgpAQCAtMTkyLDExICsxNzAsMTIgQEAKIAkJaW50X3RvX3Njc2lsdW4oc2NtbmQtPmRldmljZS0+bHVuLCAmZmNwX2NtbmQtPmZjX2x1bik7CiAJCWZjcF9jbW5kLT5mY190bV9mbGFncyA9IDA7CiAJCWZjcF9jbW5kLT5mY19jbWRyZWYgPSAwOwotCQlmY3BfY21uZC0+ZmNfcHJpX3RhID0gMDsKIAogCQltZW1jcHkoZmNwX2NtbmQtPmZjX2NkYiwgc2NtbmQtPmNtbmQsIDE2KTsKLQkJY3Npb19zY3NpX3RhZyhzY21uZCwgJmZjcF9jbW5kLT5mY19wcmlfdGEsCi0JCQkgICAgICBGQ1BfUFRBX0hFQURRLCBGQ1BfUFRBX09SREVSRUQsIEZDUF9QVEFfU0lNUExFKTsKKwkJaWYgKHNjbW5kLT5mbGFncyAmIFNDTURfVEFHR0VEKQorCQkJZmNwX2NtbmQtPmZjX3ByaV90YSA9IEZDUF9QVEFfU0lNUExFOworCQllbHNlCisJCQlmY3BfY21uZC0+ZmNfcHJpX3RhID0gMDsKIAkJZmNwX2NtbmQtPmZjX2RsID0gY3B1X3RvX2JlMzIoc2NzaV9idWZmbGVuKHNjbW5kKSk7CiAKIAkJaWYgKHJlcS0+bnNnZSkKQEAgLTIyNjIsMTEgKzIyNDEsNyBAQAogc3RhdGljIGludAogY3Npb19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBjc2lvX2x1bl9xZGVwdGgpOwotCWVsc2UKLQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBjc2lvX2x1bl9xZGVwdGgpOwotCisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgY3Npb19sdW5fcWRlcHRoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMxMSw2ICsyMjg2LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQk9IGNzaW9fZmNvZV9scG9ydF9hdHRycywKIAkubWF4X3NlY3RvcnMJCT0gQ1NJT19NQVhfU0VDVE9SX1NJWkUsCisJLnVzZV9ibGtfdGFncwkJPSAxLAogfTsKIAogc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBjc2lvX2Zjb2Vfc2hvc3RfdnBvcnRfdGVtcGxhdGUgPSB7CkBAIC0yMzMwLDYgKzIzMDYsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuc2hvc3RfYXR0cnMJCT0gY3Npb19mY29lX3Zwb3J0X2F0dHJzLAogCS5tYXhfc2VjdG9ycwkJPSBDU0lPX01BWF9TRUNUT1JfU0laRSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2IzaS9jeGdiM2kuYyBiL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmMKaW5kZXggNDk2OTJhMS4uM2RiNGM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2IzaS9jeGdiM2kuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjNpL2N4Z2IzaS5jCkBAIC04Niw3ICs4Niw3IEBACiAJLnByb2NfbmFtZQk9IERSVl9NT0RVTEVfTkFNRSwKIAkuY2FuX3F1ZXVlCT0gQ1hHQjNJX1NDU0lfSE9TVF9RREVQVEgsCiAJLnF1ZXVlY29tbWFuZAk9IGlzY3NpX3F1ZXVlY29tbWFuZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuc2dfdGFibGVzaXplCT0gU0dfQUxMLAogCS5tYXhfc2VjdG9ycwk9IDB4RkZGRiwKIAkuY21kX3Blcl9sdW4JPSBJU0NTSV9ERUZfQ01EX1BFUl9MVU4sCkBAIC05Niw2ICs5Niw3IEBACiAJLnRhcmdldF9hbGxvYwk9IGlzY3NpX3RhcmdldF9hbGxvYywKIAkudXNlX2NsdXN0ZXJpbmcJPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLnRoaXNfaWQJPSAtMSwKKwkudHJhY2tfcXVldWVfZGVwdGggPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgY3hnYjNpX2lzY3NpX3RyYW5zcG9ydCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiNGkvY3hnYjRpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jCmluZGV4IDE1MDgxMjUuLmU2YzNmNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiNGkvY3hnYjRpLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2I0aS9jeGdiNGkuYwpAQCAtODksNyArODksNyBAQAogCS5wcm9jX25hbWUJPSBEUlZfTU9EVUxFX05BTUUsCiAJLmNhbl9xdWV1ZQk9IENYR0I0SV9TQ1NJX0hPU1RfUURFUFRILAogCS5xdWV1ZWNvbW1hbmQJPSBpc2NzaV9xdWV1ZWNvbW1hbmQsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLnNnX3RhYmxlc2l6ZQk9IFNHX0FMTCwKIAkubWF4X3NlY3RvcnMJPSAweEZGRkYsCiAJLmNtZF9wZXJfbHVuCT0gSVNDU0lfREVGX0NNRF9QRVJfTFVOLApAQCAtOTksNiArOTksNyBAQAogCS50YXJnZXRfYWxsb2MJPSBpc2NzaV90YXJnZXRfYWxsb2MsCiAJLnVzZV9jbHVzdGVyaW5nCT0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS50aGlzX2lkCT0gLTEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoID0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGN4Z2I0aV9pc2NzaV90cmFuc3BvcnQgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYwppbmRleCAzM2U0MjJlLi4xZGJhNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKQEAgLTk4LDI3ICs5OCw1MSBAQAogc3RhdGljIGludCBzY3NpX2RoX2hhbmRsZXJfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKIAkJCQkgIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyICpzY3NpX2RoKQogewotCWludCBlcnIgPSAwOworCXN0cnVjdCBzY3NpX2RoX2RhdGEgKmQ7CiAKIAlpZiAoc2Rldi0+c2NzaV9kaF9kYXRhKSB7CiAJCWlmIChzZGV2LT5zY3NpX2RoX2RhdGEtPnNjc2lfZGggIT0gc2NzaV9kaCkKLQkJCWVyciA9IC1FQlVTWTsKLQkJZWxzZQotCQkJa3JlZl9nZXQoJnNkZXYtPnNjc2lfZGhfZGF0YS0+a3JlZik7Ci0JfSBlbHNlIGlmIChzY3NpX2RoLT5hdHRhY2gpIHsKLQkJZXJyID0gc2NzaV9kaC0+YXR0YWNoKHNkZXYpOwotCQlpZiAoIWVycikgewotCQkJa3JlZl9pbml0KCZzZGV2LT5zY3NpX2RoX2RhdGEtPmtyZWYpOwotCQkJc2Rldi0+c2NzaV9kaF9kYXRhLT5zZGV2ID0gc2RldjsKLQkJfQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlrcmVmX2dldCgmc2Rldi0+c2NzaV9kaF9kYXRhLT5rcmVmKTsKKwkJcmV0dXJuIDA7CiAJfQotCXJldHVybiBlcnI7CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHNjc2lfZGgtPm1vZHVsZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZCA9IHNjc2lfZGgtPmF0dGFjaChzZGV2KTsKKwlpZiAoSVNfRVJSKGQpKSB7CisJCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IEF0dGFjaCBmYWlsZWQgKCVsZClcbiIsCisJCQkgICAgc2NzaV9kaC0+bmFtZSwgUFRSX0VSUihkKSk7CisJCW1vZHVsZV9wdXQoc2NzaV9kaC0+bW9kdWxlKTsKKwkJcmV0dXJuIFBUUl9FUlIoZCk7CisJfQorCisJZC0+c2NzaV9kaCA9IHNjc2lfZGg7CisJa3JlZl9pbml0KCZkLT5rcmVmKTsKKwlkLT5zZGV2ID0gc2RldjsKKworCXNwaW5fbG9ja19pcnEoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jayk7CisJc2Rldi0+c2NzaV9kaF9kYXRhID0gZDsKKwlzcGluX3VubG9ja19pcnEoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV0YWNoX2hhbmRsZXIgKHN0cnVjdCBrcmVmICprcmVmKQogewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc2NzaV9kaF9kYXRhLCBrcmVmKTsKLQlzY3NpX2RoX2RhdGEtPnNjc2lfZGgtPmRldGFjaChzY3NpX2RoX2RhdGEtPnNkZXYpOworCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YSA9CisJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc2NzaV9kaF9kYXRhLCBrcmVmKTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciAqc2NzaV9kaCA9IHNjc2lfZGhfZGF0YS0+c2NzaV9kaDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBzY3NpX2RoX2RhdGEtPnNkZXY7CisKKwlzcGluX2xvY2tfaXJxKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOworCXNkZXYtPnNjc2lfZGhfZGF0YSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOworCisJc2NzaV9kaC0+ZGV0YWNoKHNkZXYpOworCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IERldGFjaGVkXG4iLCBzY3NpX2RoLT5uYW1lKTsKKwltb2R1bGVfcHV0KHNjc2lfZGgtPm1vZHVsZSk7CiB9CiAKIC8qCkBAIC0xNDEsNyArMTY1LDcgQEAKIAlpZiAoIXNjc2lfZGgpCiAJCXNjc2lfZGggPSBzZGV2LT5zY3NpX2RoX2RhdGEtPnNjc2lfZGg7CiAKLQlpZiAoc2NzaV9kaCAmJiBzY3NpX2RoLT5kZXRhY2gpCisJaWYgKHNjc2lfZGgpCiAJCWtyZWZfcHV0KCZzZGV2LT5zY3NpX2RoX2RhdGEtPmtyZWYsIF9fZGV0YWNoX2hhbmRsZXIpOwogfQogCkBAIC0zMzAsNiArMzU0LDkgQEAKIAlpZiAoZ2V0X2RldmljZV9oYW5kbGVyKHNjc2lfZGgtPm5hbWUpKQogCQlyZXR1cm4gLUVCVVNZOwogCisJaWYgKCFzY3NpX2RoLT5hdHRhY2ggfHwgIXNjc2lfZGgtPmRldGFjaCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzcGluX2xvY2soJmxpc3RfbG9jayk7CiAJbGlzdF9hZGQoJnNjc2lfZGgtPmxpc3QsICZzY3NpX2RoX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZsaXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCmluZGV4IGZkNzhiZGMuLjg1NGI1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKQEAgLTYyLDYgKzYyLDcgQEAKICNkZWZpbmUgQUxVQV9PUFRJTUlaRV9TVFBHCQkxCiAKIHN0cnVjdCBhbHVhX2RoX2RhdGEgeworCXN0cnVjdCBzY3NpX2RoX2RhdGEJZGhfZGF0YTsKIAlpbnQJCQlncm91cF9pZDsKIAlpbnQJCQlyZWxfcG9ydDsKIAlpbnQJCQl0cGdzOwpAQCAtODcsOSArODgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbHVhX2RoX2RhdGEgKmdldF9hbHVhX2RhdGEoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YSA9IHNkZXYtPnNjc2lfZGhfZGF0YTsKLQlCVUdfT04oc2NzaV9kaF9kYXRhID09IE5VTEwpOwotCXJldHVybiAoKHN0cnVjdCBhbHVhX2RoX2RhdGEgKikgc2NzaV9kaF9kYXRhLT5idWYpOworCXJldHVybiBjb250YWluZXJfb2Yoc2Rldi0+c2NzaV9kaF9kYXRhLCBzdHJ1Y3QgYWx1YV9kaF9kYXRhLCBkaF9kYXRhKTsKIH0KIAogc3RhdGljIGludCByZWFsbG9jX2J1ZmZlcihzdHJ1Y3QgYWx1YV9kaF9kYXRhICpoLCB1bnNpZ25lZCBsZW4pCkBAIC04MjUsOCArODI0LDQ5IEBACiAJcmV0dXJuIChzY3NpX2RldmljZV90cGdzKHNkZXYpICE9IDApOwogfQogCi1zdGF0aWMgaW50IGFsdWFfYnVzX2F0dGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwotc3RhdGljIHZvaWQgYWx1YV9idXNfZGV0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CisvKgorICogYWx1YV9idXNfYXR0YWNoIC0gQXR0YWNoIGRldmljZSBoYW5kbGVyCisgKiBAc2RldjogZGV2aWNlIHRvIGJlIGF0dGFjaGVkIHRvCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9kaF9kYXRhICphbHVhX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBhbHVhX2RoX2RhdGEgKmg7CisJaW50IGVycjsKKworCWggPSBremFsbG9jKHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWgtPnRwZ3MgPSBUUEdTX01PREVfVU5JTklUSUFMSVpFRDsKKwloLT5zdGF0ZSA9IFRQR1NfU1RBVEVfT1BUSU1JWkVEOworCWgtPmdyb3VwX2lkID0gLTE7CisJaC0+cmVsX3BvcnQgPSAtMTsKKwloLT5idWZmID0gaC0+aW5xOworCWgtPmJ1ZmZsZW4gPSBBTFVBX0lOUVVJUllfU0laRTsKKwloLT5zZGV2ID0gc2RldjsKKworCWVyciA9IGFsdWFfaW5pdGlhbGl6ZShzZGV2LCBoKTsKKwlpZiAoZXJyICE9IFNDU0lfREhfT0sgJiYgZXJyICE9IFNDU0lfREhfREVWX09GRkxJTkVEKQorCQlnb3RvIGZhaWxlZDsKKworCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IEF0dGFjaGVkXG4iLCBBTFVBX0RIX05BTUUpOworCXJldHVybiAmaC0+ZGhfZGF0YTsKK2ZhaWxlZDoKKwlrZnJlZShoKTsKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworLyoKKyAqIGFsdWFfYnVzX2RldGFjaCAtIERldGFjaCBkZXZpY2UgaGFuZGxlcgorICogQHNkZXY6IGRldmljZSB0byBiZSBkZXRhY2hlZCBmcm9tCisgKi8KK3N0YXRpYyB2b2lkIGFsdWFfYnVzX2RldGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IGFsdWFfZGhfZGF0YSAqaCA9IGdldF9hbHVhX2RhdGEoc2Rldik7CisKKwlpZiAoaC0+YnVmZiAmJiBoLT5pbnEgIT0gaC0+YnVmZikKKwkJa2ZyZWUoaC0+YnVmZik7CisJa2ZyZWUoaCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciBhbHVhX2RoID0gewogCS5uYW1lID0gQUxVQV9ESF9OQU1FLApAQCAtODQwLDc4ICs4ODAsNiBAQAogCS5tYXRjaCA9IGFsdWFfbWF0Y2gsCiB9OwogCi0vKgotICogYWx1YV9idXNfYXR0YWNoIC0gQXR0YWNoIGRldmljZSBoYW5kbGVyCi0gKiBAc2RldjogZGV2aWNlIHRvIGJlIGF0dGFjaGVkIHRvCi0gKi8KLXN0YXRpYyBpbnQgYWx1YV9idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGE7Ci0Jc3RydWN0IGFsdWFfZGhfZGF0YSAqaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSBTQ1NJX0RIX09LOwotCi0Jc2NzaV9kaF9kYXRhID0ga3phbGxvYyhzaXplb2YoKnNjc2lfZGhfZGF0YSkKLQkJCSAgICAgICArIHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNjc2lfZGhfZGF0YSkgewotCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBBdHRhY2ggZmFpbGVkXG4iLAotCQkJICAgIEFMVUFfREhfTkFNRSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNjc2lfZGhfZGF0YS0+c2NzaV9kaCA9ICZhbHVhX2RoOwotCWggPSAoc3RydWN0IGFsdWFfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1ZjsKLQloLT50cGdzID0gVFBHU19NT0RFX1VOSU5JVElBTElaRUQ7Ci0JaC0+c3RhdGUgPSBUUEdTX1NUQVRFX09QVElNSVpFRDsKLQloLT5ncm91cF9pZCA9IC0xOwotCWgtPnJlbF9wb3J0ID0gLTE7Ci0JaC0+YnVmZiA9IGgtPmlucTsKLQloLT5idWZmbGVuID0gQUxVQV9JTlFVSVJZX1NJWkU7Ci0JaC0+c2RldiA9IHNkZXY7Ci0KLQllcnIgPSBhbHVhX2luaXRpYWxpemUoc2RldiwgaCk7Ci0JaWYgKChlcnIgIT0gU0NTSV9ESF9PSykgJiYgKGVyciAhPSBTQ1NJX0RIX0RFVl9PRkZMSU5FRCkpCi0JCWdvdG8gZmFpbGVkOwotCi0JaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCi0JCWdvdG8gZmFpbGVkOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IHNjc2lfZGhfZGF0YTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlzZGV2X3ByaW50ayhLRVJOX05PVElDRSwgc2RldiwgIiVzOiBBdHRhY2hlZFxuIiwgQUxVQV9ESF9OQU1FKTsKLQotCXJldHVybiAwOwotCi1mYWlsZWQ6Ci0Ja2ZyZWUoc2NzaV9kaF9kYXRhKTsKLQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBub3QgYXR0YWNoZWRcbiIsIEFMVUFfREhfTkFNRSk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qCi0gKiBhbHVhX2J1c19kZXRhY2ggLSBEZXRhY2ggZGV2aWNlIGhhbmRsZXIKLSAqIEBzZGV2OiBkZXZpY2UgdG8gYmUgZGV0YWNoZWQgZnJvbQotICovCi1zdGF0aWMgdm9pZCBhbHVhX2J1c19kZXRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQotewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YTsKLQlzdHJ1Y3QgYWx1YV9kaF9kYXRhICpoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0Jc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KLQloID0gKHN0cnVjdCBhbHVhX2RoX2RhdGEgKikgc2NzaV9kaF9kYXRhLT5idWY7Ci0JaWYgKGgtPmJ1ZmYgJiYgaC0+aW5xICE9IGgtPmJ1ZmYpCi0JCWtmcmVlKGgtPmJ1ZmYpOwotCWtmcmVlKHNjc2lfZGhfZGF0YSk7Ci0JbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0Jc2Rldl9wcmludGsoS0VSTl9OT1RJQ0UsIHNkZXYsICIlczogRGV0YWNoZWRcbiIsIEFMVUFfREhfTkFNRSk7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGFsdWFfaW5pdCh2b2lkKQogewogCWludCByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwppbmRleCA4NDc2NTM4Li42ZWQxY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwpAQCAtNzIsNiArNzIsNyBAQAogfTsKIAogc3RydWN0IGNsYXJpaW9uX2RoX2RhdGEgeworCXN0cnVjdCBzY3NpX2RoX2RhdGEgZGhfZGF0YTsKIAkvKgogCSAqIEZsYWdzOgogCSAqICBDTEFSSUlPTl9TSE9SVF9UUkVTUEFTUwpAQCAtMTE2LDkgKzExNyw4IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGFyaWlvbl9kaF9kYXRhCiAJCQkqZ2V0X2NsYXJpaW9uX2RhdGEoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YSA9IHNkZXYtPnNjc2lfZGhfZGF0YTsKLQlCVUdfT04oc2NzaV9kaF9kYXRhID09IE5VTEwpOwotCXJldHVybiAoKHN0cnVjdCBjbGFyaWlvbl9kaF9kYXRhICopIHNjc2lfZGhfZGF0YS0+YnVmKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkZXYtPnNjc2lfZGhfZGF0YSwgc3RydWN0IGNsYXJpaW9uX2RoX2RhdGEsCisJCQlkaF9kYXRhKTsKIH0KIAogLyoKQEAgLTYyMiw3ICs2MjIsMTAgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNjc2lfZGhfZGV2bGlzdCBjbGFyaWlvbl9kZXZfbGlzdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY2hhciAqdmVuZG9yOworCWNoYXIgKm1vZGVsOworfSBjbGFyaWlvbl9kZXZfbGlzdFtdID0gewogCXsiREdDIiwgIlJBSUQifSwKIAl7IkRHQyIsICJESVNLIn0sCiAJeyJER0MiLCAiVlJBSUQifSwKQEAgLTY0NywzOSArNjUwLDE0IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IGNsYXJpaW9uX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKLXN0YXRpYyB2b2lkIGNsYXJpaW9uX2J1c19kZXRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKLQotc3RhdGljIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyIGNsYXJpaW9uX2RoID0gewotCS5uYW1lCQk9IENMQVJJSU9OX05BTUUsCi0JLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKLQkuZGV2bGlzdAk9IGNsYXJpaW9uX2Rldl9saXN0LAotCS5hdHRhY2gJCT0gY2xhcmlpb25fYnVzX2F0dGFjaCwKLQkuZGV0YWNoCQk9IGNsYXJpaW9uX2J1c19kZXRhY2gsCi0JLmNoZWNrX3NlbnNlCT0gY2xhcmlpb25fY2hlY2tfc2Vuc2UsCi0JLmFjdGl2YXRlCT0gY2xhcmlpb25fYWN0aXZhdGUsCi0JLnByZXBfZm4JPSBjbGFyaWlvbl9wcmVwX2ZuLAotCS5zZXRfcGFyYW1zCT0gY2xhcmlpb25fc2V0X3BhcmFtcywKLQkubWF0Y2gJCT0gY2xhcmlpb25fbWF0Y2gsCi19OwotCi1zdGF0aWMgaW50IGNsYXJpaW9uX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQorc3RhdGljIHN0cnVjdCBzY3NpX2RoX2RhdGEgKmNsYXJpaW9uX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YTsKIAlzdHJ1Y3QgY2xhcmlpb25fZGhfZGF0YSAqaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKLQlzY3NpX2RoX2RhdGEgPSBremFsbG9jKHNpemVvZigqc2NzaV9kaF9kYXRhKQotCQkJICAgICAgICsgc2l6ZW9mKCpoKSAsIEdGUF9LRVJORUwpOwotCWlmICghc2NzaV9kaF9kYXRhKSB7Ci0JCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IEF0dGFjaCBmYWlsZWRcbiIsCi0JCQkgICAgQ0xBUklJT05fTkFNRSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNjc2lfZGhfZGF0YS0+c2NzaV9kaCA9ICZjbGFyaWlvbl9kaDsKLQloID0gKHN0cnVjdCBjbGFyaWlvbl9kaF9kYXRhICopIHNjc2lfZGhfZGF0YS0+YnVmOworCWggPSBremFsbG9jKHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWgtPmx1bl9zdGF0ZSA9IENMQVJJSU9OX0xVTl9VTklOSVRJQUxJWkVEOwogCWgtPmRlZmF1bHRfc3AgPSBDTEFSSUlPTl9VTkJPVU5EX0xVOwogCWgtPmN1cnJlbnRfc3AgPSBDTEFSSUlPTl9VTkJPVU5EX0xVOwpAQCAtNjkyLDQ1ICs2NzAsMzcgQEAKIAlpZiAoZXJyICE9IFNDU0lfREhfT0spCiAJCWdvdG8gZmFpbGVkOwogCi0JaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCi0JCWdvdG8gZmFpbGVkOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IHNjc2lfZGhfZGF0YTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQogCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKIAkJICAgICIlczogY29ubmVjdGVkIHRvIFNQICVjIFBvcnQgJWQgKCVzLCBkZWZhdWx0IFNQICVjKVxuIiwKIAkJICAgIENMQVJJSU9OX05BTUUsIGgtPmN1cnJlbnRfc3AgKyAnQScsCiAJCSAgICBoLT5wb3J0LCBsdW5fc3RhdGVbaC0+bHVuX3N0YXRlXSwKIAkJICAgIGgtPmRlZmF1bHRfc3AgKyAnQScpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuICZoLT5kaF9kYXRhOwogCiBmYWlsZWQ6Ci0Ja2ZyZWUoc2NzaV9kaF9kYXRhKTsKLQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBub3QgYXR0YWNoZWRcbiIsCi0JCSAgICBDTEFSSUlPTl9OQU1FKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlrZnJlZShoKTsKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIAogc3RhdGljIHZvaWQgY2xhcmlpb25fYnVzX2RldGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNsYXJpaW9uX2RoX2RhdGEgKmggPSBnZXRfY2xhcmlpb25fZGF0YShzZGV2KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlzY3NpX2RoX2RhdGEgPSBzZGV2LT5zY3NpX2RoX2RhdGE7Ci0Jc2Rldi0+c2NzaV9kaF9kYXRhID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IERldGFjaGVkXG4iLAotCQkgICAgQ0xBUklJT05fTkFNRSk7Ci0KLQlrZnJlZShzY3NpX2RoX2RhdGEpOwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCWtmcmVlKGgpOwogfQogCitzdGF0aWMgc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgY2xhcmlpb25fZGggPSB7CisJLm5hbWUJCT0gQ0xBUklJT05fTkFNRSwKKwkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5hdHRhY2gJCT0gY2xhcmlpb25fYnVzX2F0dGFjaCwKKwkuZGV0YWNoCQk9IGNsYXJpaW9uX2J1c19kZXRhY2gsCisJLmNoZWNrX3NlbnNlCT0gY2xhcmlpb25fY2hlY2tfc2Vuc2UsCisJLmFjdGl2YXRlCT0gY2xhcmlpb25fYWN0aXZhdGUsCisJLnByZXBfZm4JPSBjbGFyaWlvbl9wcmVwX2ZuLAorCS5zZXRfcGFyYW1zCT0gY2xhcmlpb25fc2V0X3BhcmFtcywKKwkubWF0Y2gJCT0gY2xhcmlpb25fbWF0Y2gsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBjbGFyaWlvbl9pbml0KHZvaWQpCiB7CiAJaW50IHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfaHBfc3cuYwppbmRleCA0ZWUyNzU5Li40ODVkOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2hwX3N3LmMKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgSFBfU1dfUEFUSF9QQVNTSVZFCQkxCiAKIHN0cnVjdCBocF9zd19kaF9kYXRhIHsKKwlzdHJ1Y3Qgc2NzaV9kaF9kYXRhIGRoX2RhdGE7CiAJdW5zaWduZWQgY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwogCWludCBwYXRoX3N0YXRlOwogCWludCByZXRyaWVzOwpAQCAtNTEsOSArNTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBocF9zd19kaF9kYXRhICpnZXRfaHBfc3dfZGF0YShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCUJVR19PTihzY3NpX2RoX2RhdGEgPT0gTlVMTCk7Ci0JcmV0dXJuICgoc3RydWN0IGhwX3N3X2RoX2RhdGEgKikgc2NzaV9kaF9kYXRhLT5idWYpOworCXJldHVybiBjb250YWluZXJfb2Yoc2Rldi0+c2NzaV9kaF9kYXRhLCBzdHJ1Y3QgaHBfc3dfZGhfZGF0YSwgZGhfZGF0YSk7CiB9CiAKIC8qCkBAIC0zMTIsNyArMzExLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NzaV9kaF9kZXZsaXN0IGhwX3N3X2RoX2RhdGFfbGlzdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY2hhciAqdmVuZG9yOworCWNoYXIgKm1vZGVsOworfSBocF9zd19kaF9kYXRhX2xpc3RbXSA9IHsKIAl7IkNPTVBBUSIsICJNU0ExMDAwIFZPTFVNRSJ9LAogCXsiQ09NUEFRIiwgIkhTVjExMCJ9LAogCXsiSFAiLCAiSFNWMTAwIn0sCkBAIC0zMzgsMzcgKzM0MCwxNCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBocF9zd19idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci1zdGF0aWMgdm9pZCBocF9zd19idXNfZGV0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciBocF9zd19kaCA9IHsKLQkubmFtZQkJPSBIUF9TV19OQU1FLAotCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCi0JLmRldmxpc3QJPSBocF9zd19kaF9kYXRhX2xpc3QsCi0JLmF0dGFjaAkJPSBocF9zd19idXNfYXR0YWNoLAotCS5kZXRhY2gJCT0gaHBfc3dfYnVzX2RldGFjaCwKLQkuYWN0aXZhdGUJPSBocF9zd19hY3RpdmF0ZSwKLQkucHJlcF9mbgk9IGhwX3N3X3ByZXBfZm4sCi0JLm1hdGNoCQk9IGhwX3N3X21hdGNoLAotfTsKLQotc3RhdGljIGludCBocF9zd19idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpocF9zd19idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGE7CiAJc3RydWN0IGhwX3N3X2RoX2RhdGEgKmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0Jc2NzaV9kaF9kYXRhID0ga3phbGxvYyhzaXplb2YoKnNjc2lfZGhfZGF0YSkKLQkJCSAgICAgICArIHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNjc2lfZGhfZGF0YSkgewotCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBBdHRhY2ggRmFpbGVkXG4iLAotCQkJICAgIEhQX1NXX05BTUUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzY3NpX2RoX2RhdGEtPnNjc2lfZGggPSAmaHBfc3dfZGg7Ci0JaCA9IChzdHJ1Y3QgaHBfc3dfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1ZjsKKwloID0ga3phbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWgtPnBhdGhfc3RhdGUgPSBIUF9TV19QQVRIX1VOSU5JVElBTElaRUQ7CiAJaC0+cmV0cmllcyA9IEhQX1NXX1JFVFJJRVM7CiAJaC0+c2RldiA9IHNkZXY7CkBAIC0zNzcsNDIgKzM1NiwzMiBAQAogCWlmIChyZXQgIT0gU0NTSV9ESF9PSyB8fCBoLT5wYXRoX3N0YXRlID09IEhQX1NXX1BBVEhfVU5JTklUSUFMSVpFRCkKIAkJZ290byBmYWlsZWQ7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKLQkJZ290byBmYWlsZWQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0Jc2Rldi0+c2NzaV9kaF9kYXRhID0gc2NzaV9kaF9kYXRhOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCiAJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiJXM6IGF0dGFjaGVkIHRvICVzIHBhdGhcbiIsCiAJCSAgICBIUF9TV19OQU1FLCBoLT5wYXRoX3N0YXRlID09IEhQX1NXX1BBVEhfQUNUSVZFPwogCQkgICAgImFjdGl2ZSI6InBhc3NpdmUiKTsKLQotCXJldHVybiAwOwotCisJcmV0dXJuICZoLT5kaF9kYXRhOwogZmFpbGVkOgotCWtmcmVlKHNjc2lfZGhfZGF0YSk7Ci0Jc2Rldl9wcmludGsoS0VSTl9FUlIsIHNkZXYsICIlczogbm90IGF0dGFjaGVkXG4iLAotCQkgICAgSFBfU1dfTkFNRSk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJa2ZyZWUoaCk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhwX3N3X2J1c19kZXRhY2goIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiApCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGhwX3N3X2RoX2RhdGEgKmggPSBnZXRfaHBfc3dfZGF0YShzZGV2KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlzY3NpX2RoX2RhdGEgPSBzZGV2LT5zY3NpX2RoX2RhdGE7Ci0Jc2Rldi0+c2NzaV9kaF9kYXRhID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQotCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LCAiJXM6IERldGFjaGVkXG4iLCBIUF9TV19OQU1FKTsKLQotCWtmcmVlKHNjc2lfZGhfZGF0YSk7CisJa2ZyZWUoaCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciBocF9zd19kaCA9IHsKKwkubmFtZQkJPSBIUF9TV19OQU1FLAorCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmF0dGFjaAkJPSBocF9zd19idXNfYXR0YWNoLAorCS5kZXRhY2gJCT0gaHBfc3dfYnVzX2RldGFjaCwKKwkuYWN0aXZhdGUJPSBocF9zd19hY3RpdmF0ZSwKKwkucHJlcF9mbgk9IGhwX3N3X3ByZXBfZm4sCisJLm1hdGNoCQk9IGhwX3N3X21hdGNoLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaHBfc3dfaW5pdCh2b2lkKQogewogCXJldHVybiBzY3NpX3JlZ2lzdGVyX2RldmljZV9oYW5kbGVyKCZocF9zd19kaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKaW5kZXggMWI1YmM5Mi4uYjQ2YWNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwpAQCAtMTgxLDYgKzE4MSw3IEBACiB9OwogCiBzdHJ1Y3QgcmRhY19kaF9kYXRhIHsKKwlzdHJ1Y3Qgc2NzaV9kaF9kYXRhCWRoX2RhdGE7CiAJc3RydWN0IHJkYWNfY29udHJvbGxlcgkqY3RscjsKICNkZWZpbmUgVU5JTklUSUFMSVpFRF9MVU4JKDEgPDwgOCkKIAl1bnNpZ25lZAkJbHVuOwpAQCAtMjYxLDkgKzI2Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJkYWNfZGhfZGF0YSAqZ2V0X3JkYWNfZGF0YShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCUJVR19PTihzY3NpX2RoX2RhdGEgPT0gTlVMTCk7Ci0JcmV0dXJuICgoc3RydWN0IHJkYWNfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1Zik7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZGV2LT5zY3NpX2RoX2RhdGEsIHN0cnVjdCByZGFjX2RoX2RhdGEsIGRoX2RhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IHJlcXVlc3QgKmdldF9yZGFjX3JlcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCkBAIC03NzksNyArNzc4LDEwIEBACiAJcmV0dXJuIFNDU0lfUkVUVVJOX05PVF9IQU5ETEVEOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNjc2lfZGhfZGV2bGlzdCByZGFjX2Rldl9saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljaGFyICp2ZW5kb3I7CisJY2hhciAqbW9kZWw7Cit9IHJkYWNfZGV2X2xpc3RbXSA9IHsKIAl7IklCTSIsICIxNzIyIn0sCiAJeyJJQk0iLCAiMTcyNCJ9LAogCXsiSUJNIiwgIjE3MjYifSwKQEAgLTgyNSw0MCArODI3LDE2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IHJkYWNfYnVzX2F0dGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwotc3RhdGljIHZvaWQgcmRhY19idXNfZGV0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciByZGFjX2RoID0gewotCS5uYW1lID0gUkRBQ19OQU1FLAotCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKLQkuZGV2bGlzdCA9IHJkYWNfZGV2X2xpc3QsCi0JLnByZXBfZm4gPSByZGFjX3ByZXBfZm4sCi0JLmNoZWNrX3NlbnNlID0gcmRhY19jaGVja19zZW5zZSwKLQkuYXR0YWNoID0gcmRhY19idXNfYXR0YWNoLAotCS5kZXRhY2ggPSByZGFjX2J1c19kZXRhY2gsCi0JLmFjdGl2YXRlID0gcmRhY19hY3RpdmF0ZSwKLQkubWF0Y2ggPSByZGFjX21hdGNoLAotfTsKLQotc3RhdGljIGludCByZGFjX2J1c19hdHRhY2goc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQorc3RhdGljIHN0cnVjdCBzY3NpX2RoX2RhdGEgKnJkYWNfYnVzX2F0dGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhOwogCXN0cnVjdCByZGFjX2RoX2RhdGEgKmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCWNoYXIgYXJyYXlfbmFtZVtBUlJBWV9MQUJFTF9MRU5dOwogCWNoYXIgYXJyYXlfaWRbVU5JUVVFX0lEX0xFTl07CiAKLQlzY3NpX2RoX2RhdGEgPSBremFsbG9jKHNpemVvZigqc2NzaV9kaF9kYXRhKQotCQkJICAgICAgICsgc2l6ZW9mKCpoKSAsIEdGUF9LRVJORUwpOwotCWlmICghc2NzaV9kaF9kYXRhKSB7Ci0JCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IEF0dGFjaCBmYWlsZWRcbiIsCi0JCQkgICAgUkRBQ19OQU1FKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc2NzaV9kaF9kYXRhLT5zY3NpX2RoID0gJnJkYWNfZGg7Ci0JaCA9IChzdHJ1Y3QgcmRhY19kaF9kYXRhICopIHNjc2lfZGhfZGF0YS0+YnVmOworCWggPSBremFsbG9jKHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWgtPmx1biA9IFVOSU5JVElBTElaRURfTFVOOwogCWgtPnN0YXRlID0gUkRBQ19TVEFURV9BQ1RJVkU7CiAKQEAgLTg3OCwxOSArODU2LDEyIEBACiAJaWYgKGVyciAhPSBTQ1NJX0RIX09LKQogCQlnb3RvIGNsZWFuX2N0bHI7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKLQkJZ290byBjbGVhbl9jdGxyOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IHNjc2lfZGhfZGF0YTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQogCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LAogCQkgICAgIiVzOiBMVU4gJWQgKCVzKSAoJXMpXG4iLAogCQkgICAgUkRBQ19OQU1FLCBoLT5sdW4sIG1vZGVbKGludCloLT5tb2RlXSwKIAkJICAgIGx1bl9zdGF0ZVsoaW50KWgtPmx1bl9zdGF0ZV0pOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuICZoLT5kaF9kYXRhOwogCiBjbGVhbl9jdGxyOgogCXNwaW5fbG9jaygmbGlzdF9sb2NrKTsKQEAgLTg5OCwzNyArODY5LDM0IEBACiAJc3Bpbl91bmxvY2soJmxpc3RfbG9jayk7CiAKIGZhaWxlZDoKLQlrZnJlZShzY3NpX2RoX2RhdGEpOwotCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IG5vdCBhdHRhY2hlZFxuIiwKLQkJICAgIFJEQUNfTkFNRSk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJa2ZyZWUoaCk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJkYWNfYnVzX2RldGFjaCggc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ICkKIHsKLQlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGE7Ci0Jc3RydWN0IHJkYWNfZGhfZGF0YSAqaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZGFjX2RoX2RhdGEgKmggPSBnZXRfcmRhY19kYXRhKHNkZXYpOwogCi0Jc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwotCWggPSAoc3RydWN0IHJkYWNfZGhfZGF0YSAqKSBzY3NpX2RoX2RhdGEtPmJ1ZjsKIAlpZiAoaC0+Y3RsciAmJiBoLT5jdGxyLT5tc19xdWV1ZWQpCiAJCWZsdXNoX3dvcmtxdWV1ZShrbXBhdGhfcmRhY2QpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCXNkZXYtPnNjc2lfZGhfZGF0YSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KIAlzcGluX2xvY2soJmxpc3RfbG9jayk7CiAJaWYgKGgtPmN0bHIpCiAJCWtyZWZfcHV0KCZoLT5jdGxyLT5rcmVmLCByZWxlYXNlX2NvbnRyb2xsZXIpOwogCXNwaW5fdW5sb2NrKCZsaXN0X2xvY2spOwotCWtmcmVlKHNjc2lfZGhfZGF0YSk7Ci0JbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0Jc2Rldl9wcmludGsoS0VSTl9OT1RJQ0UsIHNkZXYsICIlczogRGV0YWNoZWRcbiIsIFJEQUNfTkFNRSk7CisJa2ZyZWUoaCk7CiB9CiAKLQorc3RhdGljIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyIHJkYWNfZGggPSB7CisJLm5hbWUgPSBSREFDX05BTUUsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5wcmVwX2ZuID0gcmRhY19wcmVwX2ZuLAorCS5jaGVja19zZW5zZSA9IHJkYWNfY2hlY2tfc2Vuc2UsCisJLmF0dGFjaCA9IHJkYWNfYnVzX2F0dGFjaCwKKwkuZGV0YWNoID0gcmRhY19idXNfZGV0YWNoLAorCS5hY3RpdmF0ZSA9IHJkYWNfYWN0aXZhdGUsCisJLm1hdGNoID0gcmRhY19tYXRjaCwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IHJkYWNfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RteDMxOTFkLmMgYi9kcml2ZXJzL3Njc2kvZG14MzE5MWQuYwppbmRleCA0YjBkZDhjLi4zZTA4ODEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZG14MzE5MWQuYworKysgYi9kcml2ZXJzL3Njc2kvZG14MzE5MWQuYwpAQCAtMzMsMjAgKzMzLDIwIEBACiAvKgogICogRGVmaW5pdGlvbnMgZm9yIHRoZSBnZW5lcmljIDUzODAgZHJpdmVyLgogICovCi0jZGVmaW5lIEFVVE9TRU5TRQorCisjZGVmaW5lIERPTlRfVVNFX0lOVFIKIAogI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKQkJaW5iKHBvcnQgKyByZWcpCiAjZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkJb3V0Yih2YWx1ZSwgcG9ydCArIHJlZykKIAotI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcwl1bnNpZ25lZCBpbnQgcG9ydAotI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKQkJTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMKKyNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMJLyogbm9uZSAqLworI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKQkJdW5zaWduZWQgaW50IHBvcnQKICNkZWZpbmUgTkNSNTM4MF9zZXR1cChpbnN0YW5jZSkJCXBvcnQgPSBpbnN0YW5jZS0+aW9fcG9ydAogCiAvKgogICogSW5jbHVkZXMgbmVlZGVkIGZvciBOQ1I1MzgwLltjaF0gKFhYWDogTW92ZSB0aGVtIHRvIE5DUjUzODAuaCkKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogI2luY2x1ZGUgIk5DUjUzODAuYyIKQEAgLTU4LDYgKzU4LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRteDMxOTFkX2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkucHJvY19uYW1lCQk9IERNWDMxOTFEX0RSSVZFUl9OQU1FLAogCS5uYW1lCQkJPSAiRG9tZXggRE1YMzE5MUQiLAorCS5pbmZvCQkJPSBOQ1I1MzgwX2luZm8sCiAJLnF1ZXVlY29tbWFuZAkJPSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQsCiAJLmVoX2Fib3J0X2hhbmRsZXIJPSBOQ1I1MzgwX2Fib3J0LAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IE5DUjUzODBfYnVzX3Jlc2V0LApAQCAtOTAsMzEgKzkxLDIzIEBACiAJaWYgKCFzaG9zdCkKIAkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247ICAgICAgIAogCXNob3N0LT5pb19wb3J0ID0gaW87Ci0Jc2hvc3QtPmlycSA9IHBkZXYtPmlycTsKKworCS8qIFRoaXMgY2FyZCBkb2VzIG5vdCBzZWVtIHRvIHJhaXNlIGFuIGludGVycnVwdCBvbiBwZGV2LT5pcnEuCisJICogU3RlYW0tcG93ZXJlZCBTQ1NJIGNvbnRyb2xsZXJzIHJ1biB3aXRob3V0IGFuIElSUSBhbnl3YXkuCisJICovCisJc2hvc3QtPmlycSA9IE5PX0lSUTsKIAogCU5DUjUzODBfaW5pdChzaG9zdCwgRkxBR19OT19QU0VVRE9fRE1BIHwgRkxBR19EVEMzMTgxRSk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBOQ1I1MzgwX2ludHIsIElSUUZfU0hBUkVELAotCQkJCURNWDMxOTFEX0RSSVZFUl9OQU1FLCBzaG9zdCkpIHsKLQkJLyoKLQkJICogU3RlYW0gcG93ZXJlZCBzY3NpIGNvbnRyb2xsZXJzIHJ1biB3aXRob3V0IGFuIElSUSBhbnl3YXkKLQkJICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImRteDMxOTE6IElSUSAlZCBub3QgYXZhaWxhYmxlIC0gIgotCQkJCSAgICAic3dpdGNoaW5nIHRvIHBvbGxlZCBtb2RlLlxuIiwgcGRldi0+aXJxKTsKLQkJc2hvc3QtPmlycSA9IFNDU0lfSVJRX05PTkU7Ci0JfQotCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHNob3N0KTsKIAogCWVycm9yID0gc2NzaV9hZGRfaG9zdChzaG9zdCwgJnBkZXYtPmRldik7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9mcmVlX2lycTsKKwkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247CiAKIAlzY3NpX3NjYW5faG9zdChzaG9zdCk7CiAJcmV0dXJuIDA7CiAKLSBvdXRfZnJlZV9pcnE6Ci0JZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogIG91dF9yZWxlYXNlX3JlZ2lvbjoKIAlyZWxlYXNlX3JlZ2lvbihpbywgRE1YMzE5MURfUkVHSU9OX0xFTik7CiAgb3V0X2Rpc2FibGVfZGV2aWNlOgpAQCAtMTMxLDggKzEyNCw2IEBACiAKIAlOQ1I1MzgwX2V4aXQoc2hvc3QpOwogCi0JaWYgKHNob3N0LT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKLQkJZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogCXJlbGVhc2VfcmVnaW9uKHNob3N0LT5pb19wb3J0LCBETVgzMTkxRF9SRUdJT05fTEVOKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IDA3MmYwZWMuLjBiZjk3NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtNDE1LDEwICs0MTUsOCBAQAogCXBIYmEgPSAoYWRwdF9oYmEgKikgaG9zdC0+aG9zdGRhdGFbMF07CiAKIAlpZiAoaG9zdC0+Y2FuX3F1ZXVlICYmIGRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXZpY2UsIE1TR19TSU1QTEVfVEFHLAorCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXZpY2UsCiAJCQkJaG9zdC0+Y2FuX3F1ZXVlIC0gMSk7Ci0JfSBlbHNlIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2aWNlLCAwLCAxKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHRjLmMgYi9kcml2ZXJzL3Njc2kvZHRjLmMKaW5kZXggMGE2NjdmZS4uNGM3NGM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2R0Yy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kdGMuYwpAQCAtMSw1ICsxLDQgQEAKIAotI2RlZmluZSBBVVRPU0VOU0UKICNkZWZpbmUgUFNFVURPX0RNQQogI2RlZmluZSBET05UX1VTRV9JTlRSCiAjZGVmaW5lIFVOU0FGRQkJCS8qIExlYXZlIGludGVycnVwdHMgZW5hYmxlZCBkdXJpbmcgcHNldWRvLWRtYSBJL08gKi8KQEAgLTE4LDI5ICsxNyw5IEBACiAgKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSAxLgotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSovCisgKi8KIAogLyoKLSAqIE9wdGlvbnMgOiAKLSAqIEFVVE9TRU5TRSAtIGlmIGRlZmluZWQsIFJFUVVFU1QgU0VOU0Ugd2lsbCBiZSBwZXJmb3JtZWQgYXV0b21hdGljYWxseQotICogICAgICBmb3IgY29tbWFuZHMgdGhhdCByZXR1cm4gd2l0aCBhIENIRUNLIENPTkRJVElPTiBzdGF0dXMuIAotICoKLSAqIFBTRVVET19ETUEgLSBlbmFibGVzIFBTRVVETy1ETUEgaGFyZHdhcmUsIHNob3VsZCBnaXZlIGEgMy00WCBwZXJmb3JtYW5jZQotICogaW5jcmVhc2UgY29tcGFyZWQgdG8gcG9sbGVkIEkvTy4KLSAqCi0gKiBQQVJJVFkgLSBlbmFibGUgcGFyaXR5IGNoZWNraW5nLiAgTm90IHN1cHBvcnRlZC4KLSAqCi0gKiBVTlNBRkUgLSBsZWF2ZSBpbnRlcnJ1cHRzIGVuYWJsZWQgZHVyaW5nIHBzZXVkby1ETUEgdHJhbnNmZXJzLiAKLSAqCQlZb3UgcHJvYmFibHkgd2FudCB0aGlzLgotICoKICAqIFRoZSBjYXJkIGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCBpbiBvbmUgb2Ygc2V2ZXJhbCB3YXlzIDogCiAgKiAxLiAgQXV0b3Byb2JlIChkZWZhdWx0KSAtIHNpbmNlIHRoZSBib2FyZCBpcyBtZW1vcnkgbWFwcGVkLCAKICAqICAgICBhIEJJT1Mgc2lnbmF0dXJlIGlzIHNjYW5uZWQgZm9yIHRvIGxvY2F0ZSB0aGUgcmVnaXN0ZXJzLgpAQCAtNzksMTUgKzU4LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAiZHRjLmgiCiAjZGVmaW5lIEFVVE9QUk9CRV9JUlEKICNpbmNsdWRlICJOQ1I1MzgwLmgiCiAKLQotI2RlZmluZSBEVENfUFVCTElDX1JFTEVBU0UgMgotCiAvKgogICogVGhlIERUQzMxODAgJiAzMjgwIGJvYXJkcyBhcmUgbWVtb3J5IG1hcHBlZC4KICAqIApAQCAtMTczLDEwICsxNDgsMTMgQEAKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IGR0Y19zZXR1cChjaGFyICpzdHIsIGludCAqaW50cykKK3N0YXRpYyBpbnQgX19pbml0IGR0Y19zZXR1cChjaGFyICpzdHIpCiB7CiAJc3RhdGljIGludCBjb21tYW5kbGluZV9jdXJyZW50ID0gMDsKIAlpbnQgaTsKKwlpbnQgaW50c1sxMF07CisKKwlnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOwogCWlmIChpbnRzWzBdICE9IDIpCiAJCXByaW50aygiZHRjX3NldHVwOiB1c2FnZSBkdGM9YWRkcmVzcyxpcnFcbiIpOwogCWVsc2UgaWYgKGNvbW1hbmRsaW5lX2N1cnJlbnQgPCBOT19PVkVSUklERVMpIHsKQEAgLTE4OSw3ICsxNjcsMTAgQEAKIAkJCX0KIAkJKytjb21tYW5kbGluZV9jdXJyZW50OwogCX0KKwlyZXR1cm4gMTsKIH0KKworX19zZXR1cCgiZHRjPSIsIGR0Y19zZXR1cCk7CiAjZW5kaWYKIAogLyogCkBAIC0yMTMsMTAgKzE5NCw2IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCBzaWcsIGNvdW50OwogCi0JdHBudC0+cHJvY19uYW1lID0gImR0YzN4ODAiOwotCXRwbnQtPnNob3dfaW5mbyA9IGR0Y19zaG93X2luZm87Ci0JdHBudC0+d3JpdGVfaW5mbyA9IGR0Y193cml0ZV9pbmZvOwotCiAJZm9yIChjb3VudCA9IDA7IGN1cnJlbnRfb3ZlcnJpZGUgPCBOT19PVkVSUklERVM7ICsrY3VycmVudF9vdmVycmlkZSkgewogCQlhZGRyID0gMDsKIAkJYmFzZSA9IE5VTEw7CkBAIC0yNzEsMzggKzI0OCwzMyBAQAogCQllbHNlCiAJCQlpbnN0YW5jZS0+aXJxID0gTkNSNTM4MF9wcm9iZV9pcnEoaW5zdGFuY2UsIERUQ19JUlFTKTsKIAorCQkvKiBDb21wYXRpYmlsaXR5IHdpdGggZG9jdW1lbnRlZCBOQ1I1MzgwIGtlcm5lbCBwYXJhbWV0ZXJzICovCisJCWlmIChpbnN0YW5jZS0+aXJxID09IDI1NSkKKwkJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CisKICNpZm5kZWYgRE9OVF9VU0VfSU5UUgogCQkvKiBXaXRoIGludGVycnVwdHMgZW5hYmxlZCwgaXQgd2lsbCBzb21ldGltZXMgaGFuZyB3aGVuIGRvaW5nIGhlYXZ5CiAJCSAqIHJlYWRzLiBTbyBiZXR0ZXIgbm90IGVuYWJsZSB0aGVtIHVudGlsIEkgZmluZ2VyIGl0IG91dC4gKi8KLQkJaWYgKGluc3RhbmNlLT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKKwkJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCQkJaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIGR0Y19pbnRyLCAwLAogCQkJCQkiZHRjIiwgaW5zdGFuY2UpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQgOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwotCQkJCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOworCQkJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CiAJCQl9CiAKLQkJaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkgeworCQlpZiAoaW5zdGFuY2UtPmlycSA9PSBOT19JUlEpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZCA6IGludGVycnVwdHMgbm90IGVuYWJsZWQuIGZvciBiZXR0ZXIgaW50ZXJhY3RpdmUgcGVyZm9ybWFuY2UsXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQgOiBwbGVhc2UganVtcGVyIHRoZSBib2FyZCBmb3IgYSBmcmVlIElSUS5cbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKIAkJfQogI2Vsc2UKLQkJaWYgKGluc3RhbmNlLT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKKwkJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogaW50ZXJydXB0cyBub3QgdXNlZC4gTWlnaHQgYXMgd2VsbCBub3QganVtcGVyIGl0LlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCQlpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKKwkJaW5zdGFuY2UtPmlycSA9IE5PX0lSUTsKICNlbmRpZgogI2lmIGRlZmluZWQoRFRDREVCVUcpICYmIChEVENERUJVRyAmIERUQ0RFQlVHX0lOSVQpCiAJCXByaW50aygic2NzaSVkIDogaXJxID0gJWRcbiIsIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKICNlbmRpZgogCi0JCXByaW50ayhLRVJOX0lORk8gInNjc2klZCA6IGF0IDB4JTA1WCIsIGluc3RhbmNlLT5ob3N0X25vLCAoaW50KSBpbnN0YW5jZS0+YmFzZSk7Ci0JCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCi0JCQlwcmludGsoIiBpbnRlcnJ1cHRzIGRpc2FibGVkIik7Ci0JCWVsc2UKLQkJCXByaW50aygiIGlycSAlZCIsIGluc3RhbmNlLT5pcnEpOwotCQlwcmludGsoIiBvcHRpb25zIENBTl9RVUVVRT0lZCAgQ01EX1BFUl9MVU49JWQgcmVsZWFzZT0lZCIsIENBTl9RVUVVRSwgQ01EX1BFUl9MVU4sIERUQ19QVUJMSUNfUkVMRUFTRSk7Ci0JCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JCXByaW50aygiXG4iKTsKLQogCQkrK2N1cnJlbnRfb3ZlcnJpZGU7CiAJCSsrY291bnQ7CiAJfQpAQCAtMzU0LDIwICszMjYsMTggQEAKICAqIAl0aW1lb3V0LgogKi8KIAotc3RhdGljIGludCBkdGNfbWF4aSA9IDA7Ci1zdGF0aWMgaW50IGR0Y193bWF4aSA9IDA7Ci0KIHN0YXRpYyBpbmxpbmUgaW50IE5DUjUzODBfcHJlYWQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBjaGFyICpkID0gZHN0OwogCWludCBpOwkJCS8qIEZvciBjb3VudGluZyB0aW1lIHNwZW50IGluIHRoZSBwb2xsLWxvb3AgKi8KKwlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKIAlOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKIAlOQ1I1MzgwX3NldHVwKGluc3RhbmNlKTsKIAogCWkgPSAwOwogCU5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7CiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfRU5BQkxFX0VPUF9JTlRSIHwgTVJfRE1BX01PREUpOwotCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCisJaWYgKGluc3RhbmNlLT5pcnEgPT0gTk9fSVJRKQogCQlOQ1I1MzgwX3dyaXRlKERUQ19DT05UUk9MX1JFRywgQ1NSX0RJUl9SRUFEKTsKIAllbHNlCiAJCU5DUjUzODBfd3JpdGUoRFRDX0NPTlRST0xfUkVHLCBDU1JfRElSX1JFQUQgfCBDU1JfSU5UX0JBU0UpOwpAQCAtMzkxLDggKzM2MSw4IEBACiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgMCk7CS8qIENsZWFyIHRoZSBvcGVyYXRpbmcgbW9kZSAqLwogCXJ0cmMoMCk7CiAJTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLQlpZiAoaSA+IGR0Y19tYXhpKQotCQlkdGNfbWF4aSA9IGk7CisJaWYgKGkgPiBob3N0ZGF0YS0+c3Bpbl9tYXhfcikKKwkJaG9zdGRhdGEtPnNwaW5fbWF4X3IgPSBpOwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTQxMiwxMyArMzgyLDE0IEBACiBzdGF0aWMgaW5saW5lIGludCBOQ1I1MzgwX3B3cml0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuKQogewogCWludCBpOworCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaW5zdGFuY2UpOwogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwogCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCiAJTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKIAlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9FTkFCTEVfRU9QX0lOVFIgfCBNUl9ETUFfTU9ERSk7CiAJLyogc2V0IGRpcmVjdGlvbiAod3JpdGUpICovCi0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkKKwlpZiAoaW5zdGFuY2UtPmlycSA9PSBOT19JUlEpCiAJCU5DUjUzODBfd3JpdGUoRFRDX0NPTlRST0xfUkVHLCAwKTsKIAllbHNlCiAJCU5DUjUzODBfd3JpdGUoRFRDX0NPTlRST0xfUkVHLCBDU1JfNTM4MF9JTlRSKTsKQEAgLTQ0NCw4ICs0MTUsOCBAQAogCS8qIENoZWNrIGZvciBwYXJpdHkgZXJyb3IgaGVyZS4gZml4bWUuICovCiAJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgMCk7CS8qIENsZWFyIHRoZSBvcGVyYXRpbmcgbW9kZSAqLwogCXJ0cmMoMCk7Ci0JaWYgKGkgPiBkdGNfd21heGkpCi0JCWR0Y193bWF4aSA9IGk7CisJaWYgKGkgPiBob3N0ZGF0YS0+c3Bpbl9tYXhfdykKKwkJaG9zdGRhdGEtPnNwaW5fbWF4X3cgPSBpOwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTQ1Nyw3ICs0MjgsNyBAQAogewogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwogCU5DUjUzODBfc2V0dXAoc2hvc3QpOwotCWlmIChzaG9zdC0+aXJxKQorCWlmIChzaG9zdC0+aXJxICE9IE5PX0lSUSkKIAkJZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogCU5DUjUzODBfZXhpdChzaG9zdCk7CiAJaWYgKHNob3N0LT5pb19wb3J0ICYmIHNob3N0LT5uX2lvX3BvcnQpCkBAIC00NzEsNiArNDQyLDEwIEBACiAJLm5hbWUJCQkJPSAiRFRDIDMxODAvMzI4MCAiLAogCS5kZXRlY3QJCQkJPSBkdGNfZGV0ZWN0LAogCS5yZWxlYXNlCQkJPSBkdGNfcmVsZWFzZSwKKwkucHJvY19uYW1lCQkJPSAiZHRjM3g4MCIsCisJLnNob3dfaW5mbwkJCT0gZHRjX3Nob3dfaW5mbywKKwkud3JpdGVfaW5mbwkJCT0gZHRjX3dyaXRlX2luZm8sCisJLmluZm8JCQkJPSBkdGNfaW5mbywKIAkucXVldWVjb21tYW5kCQkJPSBkdGNfcXVldWVfY29tbWFuZCwKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBkdGNfYWJvcnQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyCQk9IGR0Y19idXNfcmVzZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHRjLmggYi9kcml2ZXJzL3Njc2kvZHRjLmgKaW5kZXggOTJkN2NmYy4uNzhhMjMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2R0Yy5oCisrKyBiL2RyaXZlcnMvc2NzaS9kdGMuaApAQCAtNSwyNCArNSw2IEBACiAgKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSAyLiAKLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQgCi0gKgotICogCi0gKiAKLSAqIGFuZCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCiAjaWZuZGVmIERUQzMyODBfSApAQCAtMzIsMTMgKzE0LDYgQEAKICNkZWZpbmUgRFRDREVCVUdfSU5JVAkweDEKICNkZWZpbmUgRFRDREVCVUdfVFJBTlNGRVIgMHgyCiAKLXN0YXRpYyBpbnQgZHRjX2Fib3J0KFNjc2lfQ21uZCAqKTsKLXN0YXRpYyBpbnQgZHRjX2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgc3RydWN0IGJsb2NrX2RldmljZSAqLAotCQkgICAgICAgICBzZWN0b3JfdCwgaW50Kik7Ci1zdGF0aWMgaW50IGR0Y19kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKLXN0YXRpYyBpbnQgZHRjX3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCBkdGNfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqKTsKLQogI2lmbmRlZiBDTURfUEVSX0xVTgogI2RlZmluZSBDTURfUEVSX0xVTiAyCiAjZW5kaWYKQEAgLTg4LDYgKzYzLDcgQEAKICNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kCQlkdGNfcXVldWVfY29tbWFuZAogI2RlZmluZSBOQ1I1MzgwX2Fib3J0CQkJZHRjX2Fib3J0CiAjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0CQlkdGNfYnVzX3Jlc2V0CisjZGVmaW5lIE5DUjUzODBfaW5mbwkJCWR0Y19pbmZvCiAjZGVmaW5lIE5DUjUzODBfc2hvd19pbmZvCQlkdGNfc2hvd19pbmZvIAogI2RlZmluZSBOQ1I1MzgwX3dyaXRlX2luZm8JCWR0Y193cml0ZV9pbmZvIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZWF0YS5jIGIvZHJpdmVycy9zY3NpL2VhdGEuYwppbmRleCA5NDNhZDNhLi4yMjdkZDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZWF0YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lYXRhLmMKQEAgLTk0NiwyMCArOTQ2LDE4IEBACiAKIAlpZiAoVExERVYoZGV2LT50eXBlKSAmJiBkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKIAkJaWYgKHRhZ19tb2RlID09IFRBR19TSU1QTEUpIHsKLQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgTVNHX1NJTVBMRV9UQUcsIHRxZCk7CiAJCQl0YWdfc3VmZml4ID0gIiwgc2ltcGxlIHRhZ3MiOwogCQl9IGVsc2UgaWYgKHRhZ19tb2RlID09IFRBR19PUkRFUkVEKSB7Ci0JCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXYsIE1TR19PUkRFUkVEX1RBRywgdHFkKTsKIAkJCXRhZ19zdWZmaXggPSAiLCBvcmRlcmVkIHRhZ3MiOwogCQl9IGVsc2UgewotCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB0cWQpOwogCQkJdGFnX3N1ZmZpeCA9ICIsIG5vIHRhZ3MiOwogCQl9CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldiwgdHFkKTsKIAl9IGVsc2UgaWYgKFRMREVWKGRldi0+dHlwZSkgJiYgbGlua2VkX2NvbW0pIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB0cWQpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIHRxZCk7CiAJCXRhZ19zdWZmaXggPSAiLCB1bnRhZ2dlZCI7CiAJfSBlbHNlIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB1dHFkKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCB1dHFkKTsKIAkJdGFnX3N1ZmZpeCA9ICIiOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnIuaCBiL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyLmgKaW5kZXggM2ZkMzA1ZC4uYjYwMzBlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnIuaAorKysgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMyci5oCkBAIC05NzIsMTEgKzk3Miw2IEBACiAJCSAgICBzdHJ1Y3QgYXR0b19pb2N0bCAqaW9jdGxfaGJhKTsKIGludCBlc2FzMnJfcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiBpbnQgZXNhczJyX3Nob3dfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBTY3NpX0hvc3QgKnNoKTsKLWludCBlc2FzMnJfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpkZXYpOwotaW50IGVzYXMycl9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYpOwotdm9pZCBlc2FzMnJfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldik7Ci1pbnQgZXNhczJyX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGRlcHRoLCBpbnQgcmVhc29uKTsKLWludCBlc2FzMnJfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCB0eXBlKTsKIGxvbmcgZXNhczJyX3Byb2NfaW9jdGwoc3RydWN0IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKIC8qIFNDU0kgZXJyb3IgaGFuZGxlciAoZWgpIGZ1bmN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfaW9jdGwuYyBiL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyX2lvY3RsLmMKaW5kZXggZDg5YTAyNy4uYmFmOTEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfaW9jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9pb2N0bC5jCkBAIC0xMTcsOSArMTE3LDggQEAKIAogCXJxID0gZXNhczJyX2FsbG9jX3JlcXVlc3QoYSk7CiAJaWYgKHJxID09IE5VTEwpIHsKLQkJdXAoJmEtPmZtX2FwaV9zZW1hcGhvcmUpOwogCQlmaS0+c3RhdHVzID0gRklfU1RBVF9CVVNZOwotCQlyZXR1cm47CisJCWdvdG8gZnJlZV9zZW07CiAJfQogCiAJaWYgKGZpID09ICZhLT5maXJtd2FyZS5oZWFkZXIpIHsKQEAgLTEzNSw3ICsxMzQsNyBAQAogCQlpZiAoYS0+ZmlybXdhcmUuaGVhZGVyX2J1ZmYgPT0gTlVMTCkgewogCQkJZXNhczJyX2RlYnVnKCJmYWlsZWQgdG8gYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlciEiKTsKIAkJCWZpLT5zdGF0dXMgPSBGSV9TVEFUX0JVU1k7Ci0JCQlyZXR1cm47CisJCQlnb3RvIGZyZWVfcmVxOwogCQl9CiAKIAkJbWVtY3B5KGEtPmZpcm13YXJlLmhlYWRlcl9idWZmLCBmaSwKQEAgLTE3MSw5ICsxNzAsMTAgQEAKIAkJCQkgIGEtPmZpcm13YXJlLmhlYWRlcl9idWZmLAogCQkJCSAgKGRtYV9hZGRyX3QpYS0+ZmlybXdhcmUuaGVhZGVyX2J1ZmZfcGh5cyk7CiAJfQotCi0JdXAoJmEtPmZtX2FwaV9zZW1hcGhvcmUpOworZnJlZV9yZXE6CiAJZXNhczJyX2ZyZWVfcmVxdWVzdChhLCAoc3RydWN0IGVzYXMycl9yZXF1ZXN0ICopcnEpOworZnJlZV9zZW06CisJdXAoJmEtPmZtX2FwaV9zZW1hcGhvcmUpOwogCXJldHVybjsKIAogfQpAQCAtMTQyMCw5ICsxNDIwLDEwIEBACiAKIAkJcnEgPSBlc2FzMnJfYWxsb2NfcmVxdWVzdChhKTsKIAkJaWYgKHJxID09IE5VTEwpIHsKLQkJCXVwKCZhLT5udnJhbV9zZW1hcGhvcmUpOwotCQkJaW9jdGwtPmRhdGEucHJ3LmNvZGUgPSAwOwotCQkJYnJlYWs7CisJCQlrZnJlZShpb2N0bCk7CisJCQllc2FzMnJfbG9nKEVTQVMyUl9MT0dfV0FSTiwKKwkJCSAgICJjb3VsZCBub3QgYWxsb2NhdGUgYW4gaW50ZXJuYWwgcmVxdWVzdCIpOworCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAogCQljb2RlID0gZXNhczJyX3dyaXRlX3BhcmFtcyhhLCBycSwKQEAgLTE1MjMsOSArMTUyNCwxMiBAQAogCQljYXNlIC1FSU5WQUw6CiAJCQlpb2N0bC0+aGVhZGVyLnJldHVybl9jb2RlID0gSU9DVExfSU5WQUxJRF9QQVJBTTsKIAkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpb2N0bC0+aGVhZGVyLnJldHVybl9jb2RlID0gSU9DVExfR0VORVJBTF9FUlJPUjsKKwkJCWJyZWFrOwogCQl9CiAKLQkJaW9jdGwtPmhlYWRlci5yZXR1cm5fY29kZSA9IElPQ1RMX0dFTkVSQUxfRVJST1I7CiAJfQogCiAJLyogQWx3YXlzIGNvcHkgdGhlIGJ1ZmZlciBiYWNrLCBpZiBvbmx5IHRvIHBpY2sgdXAgdGhlIHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfbWFpbi5jIGIvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfbWFpbi5jCmluZGV4IDY1MDRhMTkuLjU5M2ZmOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9tYWluLmMKQEAgLTI1NCwxMiArMjU0LDEwIEBACiAJLnVzZV9jbHVzdGVyaW5nCQkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuZW11bGF0ZWQJCQk9IDAsCiAJLnByb2NfbmFtZQkJCT0gRVNBUzJSX0RSVlJfTkFNRSwKLQkuc2xhdmVfY29uZmlndXJlCQk9IGVzYXMycl9zbGF2ZV9jb25maWd1cmUsCi0JLnNsYXZlX2FsbG9jCQkJPSBlc2FzMnJfc2xhdmVfYWxsb2MsCi0JLnNsYXZlX2Rlc3Ryb3kJCQk9IGVzYXMycl9zbGF2ZV9kZXN0cm95LAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJCT0gZXNhczJyX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gZXNhczJyX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCQk9IHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUsCiAJLm1heF9zZWN0b3JzCQkJPSAweEZGRkYsCisJLnVzZV9ibGtfdGFncwkJCT0gMSwKIH07CiAKIGludCBzZ2xfcGFnZV9zaXplID0gNTEyOwpAQCAtMTA1Nyw3ICsxMDU1LDcgQEAKIAogCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCi0JCXJldHVybiAwOworCQlyZXR1cm4gU1VDQ0VTUzsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYS0+cXVldWVfbG9jaywgZmxhZ3MpOwpAQCAtMTI1OSw2MCArMTI1Nyw2IEBACiAJcmV0dXJuIGVzYXMycl9kZXZfdGFyZ19yZXNldChjbWQsIHRydWUpOwogfQogCi1pbnQgZXNhczJyX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGRlcHRoLCBpbnQgcmVhc29uKQotewotCWVzYXMycl9sb2coRVNBUzJSX0xPR19JTkZPLCAiY2hhbmdlX3F1ZXVlX2RlcHRoICVwLCAlZCIsIGRldiwgZGVwdGgpOwotCi0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCBzY3NpX2dldF90YWdfdHlwZShkZXYpLCBkZXB0aCk7Ci0KLQlyZXR1cm4gZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLQotaW50IGVzYXMycl9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IHR5cGUpCi17Ci0JZXNhczJyX2xvZyhFU0FTMlJfTE9HX0lORk8sICJjaGFuZ2VfcXVldWVfdHlwZSAlcCwgJWQiLCBkZXYsIHR5cGUpOwotCi0JaWYgKGRldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShkZXYsIHR5cGUpOwotCi0JCWlmICh0eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3EoZGV2LCBkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShkZXYsIGRldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZSB7Ci0JCXR5cGUgPSAwOwotCX0KLQotCXJldHVybiB0eXBlOwotfQotCi1pbnQgZXNhczJyX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2KQotewotCXJldHVybiAwOwotfQotCi1pbnQgZXNhczJyX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldikKLXsKLQllc2FzMnJfbG9nX2RldihFU0FTMlJfTE9HX0lORk8sICYoZGV2LT5zZGV2X2dlbmRldiksCi0JCSAgICAgICAiZXNhczJyX3NsYXZlX2NvbmZpZ3VyZSgpIik7Ci0KLQlpZiAoZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKGRldiwgTVNHX1NJTVBMRV9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShkZXYsIGNtZF9wZXJfbHVuKTsKLQl9IGVsc2UgewotCQlzY3NpX3NldF90YWdfdHlwZShkZXYsIDApOwotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKGRldiwgY21kX3Blcl9sdW4pOwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIGVzYXMycl9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2KQotewotCWVzYXMycl9sb2dfZGV2KEVTQVMyUl9MT0dfSU5GTywgJihkZXYtPnNkZXZfZ2VuZGV2KSwKLQkJICAgICAgICJlc2FzMnJfc2xhdmVfZGVzdHJveSgpIik7Ci19Ci0KIHZvaWQgZXNhczJyX2xvZ19yZXF1ZXN0X2ZhaWx1cmUoc3RydWN0IGVzYXMycl9hZGFwdGVyICphLAogCQkJCXN0cnVjdCBlc2FzMnJfcmVxdWVzdCAqcnEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCmluZGV4IDU1NTQ4ZGMuLmNlNWJkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCkBAIC00OSw1NSArNDksNjcgQEAKICNkZWZpbmUgRVNQX0RFQlVHX0RBVEFET05FCTB4MDAwMDAxMDAKICNkZWZpbmUgRVNQX0RFQlVHX1JFQ09OTkVDVAkweDAwMDAwMjAwCiAjZGVmaW5lIEVTUF9ERUJVR19BVVRPU0VOU0UJMHgwMDAwMDQwMAorI2RlZmluZSBFU1BfREVCVUdfRVZFTlQJCTB4MDAwMDA4MDAKKyNkZWZpbmUgRVNQX0RFQlVHX0NPTU1BTkQJMHgwMDAwMTAwMAogCiAjZGVmaW5lIGVzcF9sb2dfaW50cihmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfSU5UUikgXAotCQlwcmludGsoZiwgIyMgYSk7IFwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX2xvZ19yZXNldChmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfUkVTRVQpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfbXNnaW4oZiwgYS4uLikgXAogZG8gewlpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX01TR0lOKSBcCi0JCXByaW50ayhmLCAjIyBhKTsgXAorCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgZXNwLT5ob3N0LCBmLCAjIyBhKTsJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBlc3BfbG9nX21zZ291dChmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfTVNHT1VUKSBcCi0JCXByaW50ayhmLCAjIyBhKTsgXAorCQlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgZXNwLT5ob3N0LCBmLCAjIyBhKTsJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBlc3BfbG9nX2NtZGRvbmUoZiwgYS4uLikgXAogZG8gewlpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX0NNRERPTkUpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfZGlzY29ubmVjdChmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfRElTQ09OTkVDVCkgXAotCQlwcmludGsoZiwgIyMgYSk7IFwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX2xvZ19kYXRhc3RhcnQoZiwgYS4uLikgXAogZG8gewlpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX0RBVEFTVEFSVCkgXAotCQlwcmludGsoZiwgIyMgYSk7IFwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX2xvZ19kYXRhZG9uZShmLCBhLi4uKSBcCiBkbyB7CWlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfREFUQURPTkUpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfcmVjb25uZWN0KGYsIGEuLi4pIFwKIGRvIHsJaWYgKGVzcF9kZWJ1ZyAmIEVTUF9ERUJVR19SRUNPTk5FQ1QpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVzcF9sb2dfYXV0b3NlbnNlKGYsIGEuLi4pIFwKIGRvIHsJaWYgKGVzcF9kZWJ1ZyAmIEVTUF9ERUJVR19BVVRPU0VOU0UpIFwKLQkJcHJpbnRrKGYsICMjIGEpOyBcCisJCXNob3N0X3ByaW50ayhLRVJOX0RFQlVHLCBlc3AtPmhvc3QsIGYsICMjIGEpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGVzcF9sb2dfZXZlbnQoZiwgYS4uLikgXAorZG8geyAgIGlmIChlc3BfZGVidWcgJiBFU1BfREVCVUdfRVZFTlQpCVwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgZXNwX2xvZ19jb21tYW5kKGYsIGEuLi4pIFwKK2RvIHsgICBpZiAoZXNwX2RlYnVnICYgRVNQX0RFQlVHX0NPTU1BTkQpCVwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fREVCVUcsIGVzcC0+aG9zdCwgZiwgIyMgYSk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZXNwX3JlYWQ4KFJFRykJCWVzcC0+b3BzLT5lc3BfcmVhZDgoZXNwLCBSRUcpCkBAIC0xMjYsMTAgKzEzOCwyOSBAQAogCiAJZXNwLT5lc3BfZXZlbnRfY3VyID0gKGlkeCArIDEpICYgKEVTUF9FVkVOVF9MT0dfU1ogLSAxKTsKIAorCWVzcF9sb2dfY29tbWFuZCgiY21kWyUwMnhdXG4iLCB2YWwpOwogCWVzcF93cml0ZTgodmFsLCBFU1BfQ01EKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9lc3BfY21kKTsKIAorc3RhdGljIHZvaWQgZXNwX3NlbmRfZG1hX2NtZChzdHJ1Y3QgZXNwICplc3AsIGludCBsZW4sIGludCBtYXhfbGVuLCBpbnQgY21kKQoreworCWlmIChlc3AtPmZsYWdzICYgRVNQX0ZMQUdfVVNFX0ZJRk8pIHsKKwkJaW50IGk7CisKKwkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9GTFVTSCk7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCWVzcF93cml0ZTgoZXNwLT5jb21tYW5kX2Jsb2NrW2ldLCBFU1BfRkRBVEEpOworCQlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOworCX0gZWxzZSB7CisJCWlmIChlc3AtPnJldiA9PSBGQVNITUUpCisJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKKwkJY21kIHw9IEVTUF9DTURfRE1BOworCQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSwKKwkJCQkgICAgICAgbGVuLCBtYXhfbGVuLCAwLCBjbWQpOworCX0KK30KKwogc3RhdGljIHZvaWQgZXNwX2V2ZW50KHN0cnVjdCBlc3AgKmVzcCwgdTggdmFsKQogewogCXN0cnVjdCBlc3BfZXZlbnRfZW50ICpwOwpAQCAtMTUwLDE5ICsxODEsMTcgQEAKIAlpbnQgaWR4ID0gZXNwLT5lc3BfZXZlbnRfY3VyOwogCWludCBzdG9wID0gaWR4OwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggImVzcCVkOiBEdW1waW5nIGNvbW1hbmQgbG9nXG4iLAotCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LCAiRHVtcGluZyBjb21tYW5kIGxvZ1xuIik7CiAJZG8gewogCQlzdHJ1Y3QgZXNwX2V2ZW50X2VudCAqcCA9ICZlc3AtPmVzcF9ldmVudF9sb2dbaWR4XTsKIAotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZXNwJWQ6IGVudFslZF0gJXMgIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBpZHgsCi0JCSAgICAgICBwLT50eXBlID09IEVTUF9FVkVOVF9UWVBFX0NNRCA/ICJDTUQiIDogIkVWRU5UIik7Ci0KLQkJcHJpbnRrKCJ2YWxbJTAyeF0gc3JlZ1slMDJ4XSBzZXFyZWdbJTAyeF0gIgotCQkgICAgICAgInNyZWcyWyUwMnhdIGlyZWdbJTAyeF0gc3NbJTAyeF0gZXZlbnRbJTAyeF1cbiIsCi0JCSAgICAgICBwLT52YWwsIHAtPnNyZWcsIHAtPnNlcXJlZywKLQkJICAgICAgIHAtPnNyZWcyLCBwLT5pcmVnLCBwLT5zZWxlY3Rfc3RhdGUsIHAtPmV2ZW50KTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LAorCQkJICAgICAiZW50WyVkXSAlcyB2YWxbJTAyeF0gc3JlZ1slMDJ4XSBzZXFyZWdbJTAyeF0gIgorCQkJICAgICAic3JlZzJbJTAyeF0gaXJlZ1slMDJ4XSBzc1slMDJ4XSBldmVudFslMDJ4XVxuIiwKKwkJCSAgICAgaWR4LAorCQkJICAgICBwLT50eXBlID09IEVTUF9FVkVOVF9UWVBFX0NNRCA/ICJDTUQiIDogIkVWRU5UIiwKKwkJCSAgICAgcC0+dmFsLCBwLT5zcmVnLCBwLT5zZXFyZWcsCisJCQkgICAgIHAtPnNyZWcyLCBwLT5pcmVnLCBwLT5zZWxlY3Rfc3RhdGUsIHAtPmV2ZW50KTsKIAogCQlpZHggPSAoaWR4ICsgMSkgJiAoRVNQX0VWRU5UX0xPR19TWiAtIDEpOwogCX0gd2hpbGUgKGlkeCAhPSBzdG9wKTsKQEAgLTE3Niw5ICsyMDUsOCBAQAogCiAJCXdoaWxlIChlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTKSB7CiAJCQlpZiAoLS1saW0gPT0gMCkgewotCQkJCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiZXNwJWQ6IEVTUF9GRl9CWVRFUyAiCi0JCQkJICAgICAgICJ3aWxsIG5vdCBjbGVhciFcbiIsCi0JCQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkKTsKKwkJCQlzaG9zdF9wcmludGsoS0VSTl9BTEVSVCwgZXNwLT5ob3N0LAorCQkJCQkgICAgICJFU1BfRkZfQllURVMgd2lsbCBub3QgY2xlYXIhXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXVkZWxheSgxKTsKQEAgLTI0MCw2ICsyNjgsMTkgQEAKIAl9IGVsc2UgewogCQllc3AtPm1pbl9wZXJpb2QgPSAoKDUgKiBlc3AtPmNjeWNsZSkgLyAxMDAwKTsKIAl9CisJaWYgKGVzcC0+cmV2ID09IEZBUzIzNikgeworCQkvKgorCQkgKiBUaGUgQU01M2M5NzQgY2hpcCByZXR1cm5zIHRoZSBzYW1lIElEIGFzIEZBUzIzNjsKKwkJICogdHJ5IHRvIGNvbmZpZ3VyZSBnbGl0Y2ggZWF0ZXIuCisJCSAqLworCQl1OCBjb25maWc0ID0gRVNQX0NPTkZJRzRfR0UxOworCQllc3Bfd3JpdGU4KGNvbmZpZzQsIEVTUF9DRkc0KTsKKwkJY29uZmlnNCA9IGVzcF9yZWFkOChFU1BfQ0ZHNCk7CisJCWlmIChjb25maWc0ICYgRVNQX0NPTkZJRzRfR0UxKSB7CisJCQllc3AtPnJldiA9IFBDU0NTSTsKKwkJCWVzcF93cml0ZTgoZXNwLT5jb25maWc0LCBFU1BfQ0ZHNCk7CisJCX0KKwl9CiAJZXNwLT5tYXhfcGVyaW9kID0gKGVzcC0+bWF4X3BlcmlvZCArIDMpPj4yOwogCWVzcC0+bWluX3BlcmlvZCA9IChlc3AtPm1pbl9wZXJpb2QgKyAzKT4+MjsKIApAQCAtMjY1LDcgKzMwNiw4IEBACiAJCS8qIGZhbGx0aHJvdWdoLi4uICovCiAKIAljYXNlIEZBUzIzNjoKLQkJLyogRmFzdCAyMzYgb3IgSE1FICovCisJY2FzZSBQQ1NDU0k6CisJCS8qIEZhc3QgMjM2LCBBTTUzYzk3NCBvciBITUUgKi8KIAkJZXNwX3dyaXRlOChlc3AtPmNvbmZpZzIsIEVTUF9DRkcyKTsKIAkJaWYgKGVzcC0+cmV2ID09IEZBU0hNRSkgewogCQkJdTggY2ZnMyA9IGVzcC0+dGFyZ2V0WzBdLmVzcF9jb25maWczOwpAQCAtMzgzLDEyICs0MjUsMTEgQEAKIAlwLT5jdXJfcmVzaWR1ZSAtPSBsZW47CiAJcC0+dG90X3Jlc2lkdWUgLT0gbGVuOwogCWlmIChwLT5jdXJfcmVzaWR1ZSA8IDAgfHwgcC0+dG90X3Jlc2lkdWUgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBEYXRhIHRyYW5zZmVyIG92ZXJmbG93LlxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkKTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IGN1cl9yZXNpZHVlWyVkXSB0b3RfcmVzaWR1ZVslZF0gIgotCQkgICAgICAgImxlblsldV1cbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwKLQkJICAgICAgIHAtPmN1cl9yZXNpZHVlLCBwLT50b3RfcmVzaWR1ZSwgbGVuKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkgICAgICJEYXRhIHRyYW5zZmVyIG92ZXJmbG93LlxuIik7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiY3VyX3Jlc2lkdWVbJWRdIHRvdF9yZXNpZHVlWyVkXSBsZW5bJXVdXG4iLAorCQkJICAgICBwLT5jdXJfcmVzaWR1ZSwgcC0+dG90X3Jlc2lkdWUsIGxlbik7CiAJCXAtPmN1cl9yZXNpZHVlID0gMDsKIAkJcC0+dG90X3Jlc2lkdWUgPSAwOwogCX0KQEAgLTYwNCw5ICs2NDUsOCBAQAogCiAKIAlpZiAoIWVudC0+c2Vuc2VfcHRyKSB7Ci0JCWVzcF9sb2dfYXV0b3NlbnNlKCJlc3AlZDogRG9pbmcgYXV0by1zZW5zZSBmb3IgIgotCQkJCSAgInRndFslZF0gbHVuWyVkXVxuIiwKLQkJCQkgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCB0Z3QsIGx1bik7CisJCWVzcF9sb2dfYXV0b3NlbnNlKCJEb2luZyBhdXRvLXNlbnNlIGZvciB0Z3RbJWRdIGx1blslZF1cbiIsCisJCQkJICB0Z3QsIGx1bik7CiAKIAkJZW50LT5zZW5zZV9wdHIgPSBjbWQtPnNlbnNlX2J1ZmZlcjsKIAkJZW50LT5zZW5zZV9kbWEgPSBlc3AtPm9wcy0+bWFwX3NpbmdsZShlc3AsCkBAIC02NDIsMTAgKzY4Miw3IEBACiAKIAl2YWwgPSAocCAtIGVzcC0+Y29tbWFuZF9ibG9jayk7CiAKLQlpZiAoZXNwLT5yZXYgPT0gRkFTSE1FKQotCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKLQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSwKLQkJCSAgICAgICB2YWwsIDE2LCAwLCBFU1BfQ01EX0RNQSB8IEVTUF9DTURfU0VMQSk7CisJZXNwX3NlbmRfZG1hX2NtZChlc3AsIHZhbCwgMTYsIEVTUF9DTURfU0VMQSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXNwX2NtZF9lbnRyeSAqZmluZF9hbmRfcHJlcF9pc3N1YWJsZV9jb21tYW5kKHN0cnVjdCBlc3AgKmVzcCkKQEAgLTY2Myw3ICs3MDAsNyBAQAogCQkJcmV0dXJuIGVudDsKIAkJfQogCi0JCWlmICghc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgJmVudC0+dGFnWzBdKSkgeworCQlpZiAoIXNwaV9wb3B1bGF0ZV90YWdfbXNnKCZlbnQtPnRhZ1swXSwgY21kKSkgewogCQkJZW50LT50YWdbMF0gPSAwOwogCQkJZW50LT50YWdbMV0gPSAwOwogCQl9CkBAIC03ODEsMTIgKzgxOCwxMiBAQAogCX0KIAogCWlmICghKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ET0lOR19TTE9XQ01EKSkgewotCQlzdGFydF9jbWQgPSBFU1BfQ01EX0RNQSB8IEVTUF9DTURfU0VMQTsKKwkJc3RhcnRfY21kID0gRVNQX0NNRF9TRUxBOwogCQlpZiAoZW50LT50YWdbMF0pIHsKIAkJCSpwKysgPSBlbnQtPnRhZ1swXTsKIAkJCSpwKysgPSBlbnQtPnRhZ1sxXTsKIAotCQkJc3RhcnRfY21kID0gRVNQX0NNRF9ETUEgfCBFU1BfQ01EX1NBMzsKKwkJCXN0YXJ0X2NtZCA9IEVTUF9DTURfU0EzOwogCQl9CiAKIAkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y21kX2xlbjsgaSsrKQpAQCAtODA2LDcgKzg0Myw3IEBACiAJCQllc3AtPm1zZ19vdXRfbGVuICs9IDI7CiAJCX0KIAotCQlzdGFydF9jbWQgPSBFU1BfQ01EX0RNQSB8IEVTUF9DTURfU0VMQVM7CisJCXN0YXJ0X2NtZCA9IEVTUF9DTURfU0VMQVM7CiAJCWVzcC0+c2VsZWN0X3N0YXRlID0gRVNQX1NFTEVDVF9NU0dPVVQ7CiAJfQogCXZhbCA9IHRndDsKQEAgLTgyNiwxMCArODYzLDcgQEAKIAkJcHJpbnRrKCJdXG4iKTsKIAl9CiAKLQlpZiAoZXNwLT5yZXYgPT0gRkFTSE1FKQotCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKLQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSwKLQkJCSAgICAgICB2YWwsIDE2LCAwLCBzdGFydF9jbWQpOworCWVzcF9zZW5kX2RtYV9jbWQoZXNwLCB2YWwsIDE2LCBzdGFydF9jbWQpOwogfQogCiBzdGF0aWMgc3RydWN0IGVzcF9jbWRfZW50cnkgKmVzcF9nZXRfZW50KHN0cnVjdCBlc3AgKmVzcCkKQEAgLTk1Myw4ICs5ODcsOCBAQAogCQkgKiAtIERNQSBwcm9ncmFtbWVkIHdpdGggd3JvbmcgZGlyZWN0aW9uCiAJCSAqIC0gaW1wcm9wZXIgcGhhc2UgY2hhbmdlCiAJCSAqLwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJlc3AlZDogR3Jvc3MgZXJyb3Igc3JlZ1slMDJ4XVxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlc3AtPnNyZWcpOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwKKwkJCSAgICAgIkdyb3NzIGVycm9yIHNyZWdbJTAyeF1cbiIsIGVzcC0+c3JlZyk7CiAJCS8qIFhYWCBSZXNldCB0aGUgY2hpcC4gWFhYICovCiAJCXJldHVybiAxOwogCX0KQEAgLTk3NCw3ICsxMDA4LDYgQEAKIAogCWRlZmF1bHQ6CiAJCWlmICghKGVzcC0+c3JlZyAmIEVTUF9TVEFUX0lOVFIpKSB7Ci0JCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7CiAJCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfU1IpCiAJCQkJcmV0dXJuIDE7CiAKQEAgLTk4MiwxNCArMTAxNSwxMyBAQAogCQkJICogRVNQIGlzIG5vdCwgdGhlIG9ubHkgcG9zc2liaWxpdHkgaXMgYSBETUEgZXJyb3IuCiAJCQkgKi8KIAkJCWlmICghZXNwLT5vcHMtPmRtYV9lcnJvcihlc3ApKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFNwdXJpb3VzIGlycSwgIgotCQkJCSAgICAgICAic3JlZz0lMDJ4LlxuIiwKLQkJCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+c3JlZyk7CisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkJCSAgICAgIlNwdXJpb3VzIGlycSwgc3JlZz0lMDJ4LlxuIiwKKwkJCQkJICAgICBlc3AtPnNyZWcpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IERNQSBlcnJvclxuIiwKLQkJCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwgIkRNQSBlcnJvclxuIik7CiAKIAkJCS8qIFhYWCBSZXNldCB0aGUgY2hpcC4gWFhYICovCiAJCQlyZXR1cm4gLTE7CkBAIC0xMDAyLDcgKzEwMzQsNyBAQAogCiBzdGF0aWMgdm9pZCBlc3Bfc2NoZWR1bGVfcmVzZXQoc3RydWN0IGVzcCAqZXNwKQogewotCWVzcF9sb2dfcmVzZXQoIkVTUDogZXNwX3NjaGVkdWxlX3Jlc2V0KCkgZnJvbSAlcGZcbiIsCisJZXNwX2xvZ19yZXNldCgiZXNwX3NjaGVkdWxlX3Jlc2V0KCkgZnJvbSAlcGZcbiIsCiAJCSAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJZXNwLT5mbGFncyB8PSBFU1BfRkxBR19SRVNFVFRJTkc7CiAJZXNwX2V2ZW50KGVzcCwgRVNQX0VWRU5UX1JFU0VUKTsKQEAgLTEwMTksMjAgKzEwNTEsMjAgQEAKIAlpbnQgaTsKIAogCWlmICghbHAtPm51bV90YWdnZWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCB3L251bV90YWdnZWQ9PTBcbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0IHcvbnVtX3RhZ2dlZD09MFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWVzcF9sb2dfcmVjb25uZWN0KCJFU1A6IHJlY29ubmVjdCB0YWcsICIpOworCWVzcF9sb2dfcmVjb25uZWN0KCJyZWNvbm5lY3QgdGFnLCAiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBFU1BfUVVJQ0tJUlFfTElNSVQ7IGkrKykgewogCQlpZiAoZXNwLT5vcHMtPmlycV9wZW5kaW5nKGVzcCkpCiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gRVNQX1FVSUNLSVJRX0xJTUlUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBSZWNvbm5lY3QgSVJRMSB0aW1lb3V0XG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQpOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwKKwkJCSAgICAgIlJlY29ubmVjdCBJUlExIHRpbWVvdXRcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTEwNDMsMTQgKzEwNzUsMTQgQEAKIAkJCSAgaSwgZXNwLT5pcmVnLCBlc3AtPnNyZWcpOwogCiAJaWYgKGVzcC0+aXJlZyAmIEVTUF9JTlRSX0RDKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBSZWNvbm5lY3QsIGdvdCBkaXNjb25uZWN0LlxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkgICAgICJSZWNvbm5lY3QsIGdvdCBkaXNjb25uZWN0LlxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWlmICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9NSVApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCwgbm90IE1JUCBzcmVnWyUwMnhdLlxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlc3AtPnNyZWcpOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwKKwkJCSAgICAgIlJlY29ubmVjdCwgbm90IE1JUCBzcmVnWyUwMnhdLlxuIiwgZXNwLT5zcmVnKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xMDczLDggKzExMDUsNyBAQAogCQl1ZGVsYXkoMSk7CiAJfQogCWlmIChpID09IEVTUF9SRVNFTEVDVF9UQUdfTElNSVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCBJUlEyIHRpbWVvdXRcbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LCAiUmVjb25uZWN0IElSUTIgdGltZW91dFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAllc3AtPm9wcy0+ZG1hX2RyYWluKGVzcCk7CkBAIC0xMDg3LDE3ICsxMTE4LDE3IEBACiAKIAlpZiAoZXNwLT5jb21tYW5kX2Jsb2NrWzBdIDwgU0lNUExFX1FVRVVFX1RBRyB8fAogCSAgICBlc3AtPmNvbW1hbmRfYmxvY2tbMF0gPiBPUkRFUkVEX1FVRVVFX1RBRykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJlc3AlZDogUmVjb25uZWN0LCBiYWQgdGFnICIKLQkJICAgICAgICJ0eXBlICUwMnguXG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+Y29tbWFuZF9ibG9ja1swXSk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0LCBiYWQgdGFnIHR5cGUgJTAyeC5cbiIsCisJCQkgICAgIGVzcC0+Y29tbWFuZF9ibG9ja1swXSk7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWVudCA9IGxwLT50YWdnZWRfY21kc1tlc3AtPmNvbW1hbmRfYmxvY2tbMV1dOwogCWlmICghZW50KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBSZWNvbm5lY3QsIG5vIGVudHJ5IGZvciAiCi0JCSAgICAgICAidGFnICUwMnguXG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+Y29tbWFuZF9ibG9ja1sxXSk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0LCBubyBlbnRyeSBmb3IgdGFnICUwMnguXG4iLAorCQkJICAgICBlc3AtPmNvbW1hbmRfYmxvY2tbMV0pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTExNjMsOSArMTE5NCw5IEBACiAJdHAgPSAmZXNwLT50YXJnZXRbdGFyZ2V0XTsKIAlkZXYgPSBfX3Njc2lfZGV2aWNlX2xvb2t1cF9ieV90YXJnZXQodHAtPnN0YXJnZXQsIGx1bik7CiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IFJlY29ubmVjdCwgbm8gbHAgIgotCQkgICAgICAgInRndFsldV0gbHVuWyV1XVxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCB0YXJnZXQsIGx1bik7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJICAgICAiUmVjb25uZWN0LCBubyBscCB0Z3RbJXVdIGx1blsldV1cbiIsCisJCQkgICAgIHRhcmdldCwgbHVuKTsKIAkJZ290byBkb19yZXNldDsKIAl9CiAJbHAgPSBkZXYtPmhvc3RkYXRhOwpAQCAtMTI5MSw4ICsxMzIyLDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcHJpbnRrKCJFU1A6IFVuZXhwZWN0ZWQgc2VsZWN0aW9uIGNvbXBsZXRpb24gaXJlZ1sleF0uXG4iLAotCSAgICAgICBlc3AtPmlyZWcpOworCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJICAgICAiVW5leHBlY3RlZCBzZWxlY3Rpb24gY29tcGxldGlvbiBpcmVnWyV4XVxuIiwgZXNwLT5pcmVnKTsKIAllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMTIsMTEgKzEzNDMsNDIgQEAKIAkJCSAgKCgodW5zaWduZWQgaW50KWVzcF9yZWFkOChFU1BfVENNRUQpKSA8PCA4KSk7CiAJCWlmIChlc3AtPnJldiA9PSBGQVNITUUpCiAJCQllY291bnQgfD0gKCh1bnNpZ25lZCBpbnQpZXNwX3JlYWQ4KEZBU19STE8pKSA8PCAxNjsKKwkJaWYgKGVzcC0+cmV2ID09IFBDU0NTSSAmJiAoZXNwLT5jb25maWcyICYgRVNQX0NPTkZJRzJfRkVOQUIpKQorCQkJZWNvdW50IHw9ICgodW5zaWduZWQgaW50KWVzcF9yZWFkOChFU1BfVENISSkpIDw8IDE2OwogCX0KIAogCWJ5dGVzX3NlbnQgPSBlc3AtPmRhdGFfZG1hX2xlbjsKIAlieXRlc19zZW50IC09IGVjb3VudDsKIAorCS8qCisJICogVGhlIGFtNTNjOTc0IGhhcyBhIERNQSAncGVjdWxhcml0eScuIFRoZSBkb2Mgc3RhdGVzOgorCSAqIEluIHNvbWUgb2RkIGJ5dGUgY29uZGl0aW9ucywgb25lIHJlc2lkdWFsIGJ5dGUgd2lsbAorCSAqIGJlIGxlZnQgaW4gdGhlIFNDU0kgRklGTywgYW5kIHRoZSBGSUZPIEZsYWdzIHdpbGwKKwkgKiBuZXZlciBjb3VudCB0byAnMCAnLiBXaGVuIHRoaXMgaGFwcGVucywgdGhlIHJlc2lkdWFsCisJICogYnl0ZSBzaG91bGQgYmUgcmV0cmlldmVkIHZpYSBQSU8gZm9sbG93aW5nIGNvbXBsZXRpb24KKwkgKiBvZiB0aGUgQkxBU1Qgb3BlcmF0aW9uLgorCSAqLworCWlmIChmaWZvX2NudCA9PSAxICYmIGVudC0+ZmxhZ3MgJiBFU1BfQ01EX0ZMQUdfUkVTSURVQUwpIHsKKwkJc2l6ZV90IGNvdW50ID0gMTsKKwkJc2l6ZV90IG9mZnNldCA9IGJ5dGVzX3NlbnQ7CisJCXU4IGJ2YWwgPSBlc3BfcmVhZDgoRVNQX0ZEQVRBKTsKKworCQlpZiAoZW50LT5mbGFncyAmIEVTUF9DTURfRkxBR19BVVRPU0VOU0UpCisJCQllbnQtPnNlbnNlX3B0cltieXRlc19zZW50XSA9IGJ2YWw7CisJCWVsc2UgeworCQkJc3RydWN0IGVzcF9jbWRfcHJpdiAqcCA9IEVTUF9DTURfUFJJVihjbWQpOworCQkJdTggKnB0cjsKKworCQkJcHRyID0gc2NzaV9rbWFwX2F0b21pY19zZyhwLT5jdXJfc2csIHAtPnUubnVtX3NnLAorCQkJCQkJICAmb2Zmc2V0LCAmY291bnQpOworCQkJaWYgKGxpa2VseShwdHIpKSB7CisJCQkJKihwdHIgKyBvZmZzZXQpID0gYnZhbDsKKwkJCQlzY3NpX2t1bm1hcF9hdG9taWNfc2cocHRyKTsKKwkJCX0KKwkJfQorCQlieXRlc19zZW50ICs9IGZpZm9fY250OworCQllbnQtPmZsYWdzICY9IH5FU1BfQ01EX0ZMQUdfUkVTSURVQUw7CisJfQogCWlmICghKGVudC0+ZmxhZ3MgJiBFU1BfQ01EX0ZMQUdfV1JJVEUpKQogCQlieXRlc19zZW50IC09IGZpZm9fY250OwogCkBAIC0xNTU2LDggKzE2MTgsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JcHJpbnRrKCJFU1A6IFVuZXhwZWN0ZWQgZXh0ZW5kZWQgbXNnIHR5cGUgJXhcbiIsCi0JICAgICAgIGVzcC0+bXNnX2luWzJdKTsKKwlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCSAgICAgIlVuZXhwZWN0ZWQgZXh0ZW5kZWQgbXNnIHR5cGUgJXhcbiIsIGVzcC0+bXNnX2luWzJdKTsKIAogCWVzcC0+bXNnX291dFswXSA9IEFCT1JUX1RBU0tfU0VUOwogCWVzcC0+bXNnX291dF9sZW4gPSAxOwpAQCAtMTU3NCw3ICsxNjM2LDggQEAKIAogCWlmIChtc2cwICYgMHg4MCkgewogCQkvKiBJZGVudGlmeSAqLwotCQlwcmludGsoIkVTUDogVW5leHBlY3RlZCBtc2dpbiBpZGVudGlmeVxuIik7CisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCSAgICAgIlVuZXhwZWN0ZWQgbXNnaW4gaWRlbnRpZnlcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE2NDAsMTAgKzE3MDMsMTIgQEAKIAogc3RhdGljIGludCBlc3BfcHJvY2Vzc19ldmVudChzdHJ1Y3QgZXNwICplc3ApCiB7Ci0JaW50IHdyaXRlOworCWludCB3cml0ZSwgaTsKIAogYWdhaW46CiAJd3JpdGUgPSAwOworCWVzcF9sb2dfZXZlbnQoInByb2Nlc3MgZXZlbnQgJWQgcGhhc2UgJXhcbiIsCisJCSAgICAgIGVzcC0+ZXZlbnQsIGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKTsKIAlzd2l0Y2ggKGVzcC0+ZXZlbnQpIHsKIAljYXNlIEVTUF9FVkVOVF9DSEVDS19QSEFTRToKIAkJc3dpdGNoIChlc3AtPnNyZWcgJiBFU1BfU1RBVF9QTUFTSykgewpAQCAtMTY3Myw4ICsxNzM4LDkgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoIkVTUDogVW5leHBlY3RlZCBwaGFzZSwgc3JlZz0lMDJ4XG4iLAotCQkJICAgICAgIGVzcC0+c3JlZyk7CisJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCQkJICAgICAiVW5leHBlY3RlZCBwaGFzZSwgc3JlZz0lMDJ4XG4iLAorCQkJCSAgICAgZXNwLT5zcmVnKTsKIAkJCWVzcF9zY2hlZHVsZV9yZXNldChlc3ApOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE3MDgsMTggKzE3NzQsMTcgQEAKIAkJZXNwLT5kYXRhX2RtYV9sZW4gPSBkbWFfbGVuOwogCiAJCWlmICghZG1hX2xlbikgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IERNQSBsZW5ndGggaXMgemVybyFcbiIsCi0JCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQpOwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IGN1ciBhZHJbJTA4bGx4XSBsZW5bJTA4eF1cbiIsCi0JCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllc3BfY3VyX2RtYV9hZGRyKGVudCwgY21kKSwKLQkJCSAgICAgICBlc3BfY3VyX2RtYV9sZW4oZW50LCBjbWQpKTsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LAorCQkJCSAgICAgIkRNQSBsZW5ndGggaXMgemVybyFcbiIpOworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkJICAgICAiY3VyIGFkclslMDhsbHhdIGxlblslMDh4XVxuIiwKKwkJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZXNwX2N1cl9kbWFfYWRkcihlbnQsIGNtZCksCisJCQkJICAgICBlc3BfY3VyX2RtYV9sZW4oZW50LCBjbWQpKTsKIAkJCWVzcF9zY2hlZHVsZV9yZXNldChlc3ApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQllc3BfbG9nX2RhdGFzdGFydCgiRVNQOiBzdGFydCBkYXRhIGFkZHJbJTA4bGx4XSBsZW5bJXVdICIKLQkJCQkgICJ3cml0ZSglZClcbiIsCisJCWVzcF9sb2dfZGF0YXN0YXJ0KCJzdGFydCBkYXRhIGFkZHJbJTA4bGx4XSBsZW5bJXVdIHdyaXRlKCVkKVxuIiwKIAkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZG1hX2FkZHIsIGRtYV9sZW4sIHdyaXRlKTsKIAogCQllc3AtPm9wcy0+c2VuZF9kbWFfY21kKGVzcCwgZG1hX2FkZHIsIGRtYV9sZW4sIGRtYV9sZW4sCkBAIC0xNzMzLDcgKzE3OTgsOCBAQAogCQlpbnQgYnl0ZXNfc2VudDsKIAogCQlpZiAoZXNwLT5vcHMtPmRtYV9lcnJvcihlc3ApKSB7Ci0JCQlwcmludGsoIkVTUDogZGF0YSBkb25lLCBETUEgZXJyb3IsIHJlc2V0dGluZ1xuIik7CisJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCQkJICAgICAiZGF0YSBkb25lLCBETUEgZXJyb3IsIHJlc2V0dGluZ1xuIik7CiAJCQllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xNzQ5LDE0ICsxODE1LDE1IEBACiAJCQkvKiBXZSBzaG91bGQgYWx3YXlzIHNlZSBleGFjdGx5IGEgYnVzLXNlcnZpY2UKIAkJCSAqIGludGVycnVwdCBhdCB0aGUgZW5kIG9mIGEgc3VjY2Vzc2Z1bCB0cmFuc2Zlci4KIAkJCSAqLwotCQkJcHJpbnRrKCJFU1A6IGRhdGEgZG9uZSwgbm90IEJTRVJWLCByZXNldHRpbmdcbiIpOworCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LAorCQkJCSAgICAgImRhdGEgZG9uZSwgbm90IEJTRVJWLCByZXNldHRpbmdcbiIpOwogCQkJZXNwX3NjaGVkdWxlX3Jlc2V0KGVzcCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJCWJ5dGVzX3NlbnQgPSBlc3BfZGF0YV9ieXRlc19zZW50KGVzcCwgZW50LCBjbWQpOwogCi0JCWVzcF9sb2dfZGF0YWRvbmUoIkVTUDogZGF0YSBkb25lIGZsZ3NbJXhdIHNlbnRbJWRdXG4iLAorCQllc3BfbG9nX2RhdGFkb25lKCJkYXRhIGRvbmUgZmxnc1sleF0gc2VudFslZF1cbiIsCiAJCQkJIGVudC0+ZmxhZ3MsIGJ5dGVzX3NlbnQpOwogCiAJCWlmIChieXRlc19zZW50IDwgMCkgewpAQCAtMTc4NSw4ICsxODUyLDkgQEAKIAkJfQogCiAJCWlmIChlbnQtPm1lc3NhZ2UgIT0gQ09NTUFORF9DT01QTEVURSkgewotCQkJcHJpbnRrKCJFU1A6IFVuZXhwZWN0ZWQgbWVzc2FnZSAleCBpbiBzdGF0dXNcbiIsCi0JCQkgICAgICAgZW50LT5tZXNzYWdlKTsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCQkgICAgICJVbmV4cGVjdGVkIG1lc3NhZ2UgJXggaW4gc3RhdHVzXG4iLAorCQkJCSAgICAgZW50LT5tZXNzYWdlKTsKIAkJCWVzcF9zY2hlZHVsZV9yZXNldChlc3ApOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE4MDQsOCArMTg3Miw3IEBACiAJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0VTRUwpOwogCiAJCWlmIChlbnQtPm1lc3NhZ2UgPT0gQ09NTUFORF9DT01QTEVURSkgewotCQkJZXNwX2xvZ19jbWRkb25lKCJFU1A6IENvbW1hbmQgZG9uZSBzdGF0dXNbJXhdICIKLQkJCQkJIm1lc3NhZ2VbJXhdXG4iLAorCQkJZXNwX2xvZ19jbWRkb25lKCJDb21tYW5kIGRvbmUgc3RhdHVzWyV4XSBtZXNzYWdlWyV4XVxuIiwKIAkJCQkJZW50LT5zdGF0dXMsIGVudC0+bWVzc2FnZSk7CiAJCQlpZiAoZW50LT5zdGF0dXMgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCkKIAkJCQllc3BfZXZlbnRfcXVldWVfZnVsbChlc3AsIGVudCk7CkBAIC0xODIxLDE2ICsxODg4LDE2IEBACiAJCQkJCQkJICAgICAgIERJRF9PSykpOwogCQkJfQogCQl9IGVsc2UgaWYgKGVudC0+bWVzc2FnZSA9PSBESVNDT05ORUNUKSB7Ci0JCQllc3BfbG9nX2Rpc2Nvbm5lY3QoIkVTUDogRGlzY29ubmVjdGluZyB0Z3RbJWRdICIKLQkJCQkJICAgInRhZ1sleDoleF1cbiIsCisJCQllc3BfbG9nX2Rpc2Nvbm5lY3QoIkRpc2Nvbm5lY3RpbmcgdGd0WyVkXSB0YWdbJXg6JXhdXG4iLAogCQkJCQkgICBjbWQtPmRldmljZS0+aWQsCiAJCQkJCSAgIGVudC0+dGFnWzBdLCBlbnQtPnRhZ1sxXSk7CiAKIAkJCWVzcC0+YWN0aXZlX2NtZCA9IE5VTEw7CiAJCQllc3BfbWF5YmVfZXhlY3V0ZV9jb21tYW5kKGVzcCk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoIkVTUDogVW5leHBlY3RlZCBtZXNzYWdlICV4IGluIGZyZWVidXNcbiIsCi0JCQkgICAgICAgZW50LT5tZXNzYWdlKTsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCQkgICAgICJVbmV4cGVjdGVkIG1lc3NhZ2UgJXggaW4gZnJlZWJ1c1xuIiwKKwkJCQkgICAgIGVudC0+bWVzc2FnZSk7CiAJCQllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xODYyLDYgKzE5MjksMTAgQEAKIAkJCWlmIChlc3AtPm1zZ19vdXRfbGVuID09IDEpIHsKIAkJCQllc3Bfd3JpdGU4KGVzcC0+bXNnX291dFswXSwgRVNQX0ZEQVRBKTsKIAkJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX1RJKTsKKwkJCX0gZWxzZSBpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX1VTRV9GSUZPKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IGVzcC0+bXNnX291dF9sZW47IGkrKykKKwkJCQkJZXNwX3dyaXRlOChlc3AtPm1zZ19vdXRbaV0sIEVTUF9GREFUQSk7CisJCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9USSk7CiAJCQl9IGVsc2UgewogCQkJCS8qIFVzZSBETUEuICovCiAJCQkJbWVtY3B5KGVzcC0+Y29tbWFuZF9ibG9jaywKQEAgLTE5MTcsNyArMTk4OCw3IEBACiAJCQkJdmFsID0gZXNwX3JlYWQ4KEVTUF9GREFUQSk7CiAJCQllc3AtPm1zZ19pbltlc3AtPm1zZ19pbl9sZW4rK10gPSB2YWw7CiAKLQkJCWVzcF9sb2dfbXNnaW4oIkVTUDogR290IG1zZ2luIGJ5dGUgJXhcbiIsIHZhbCk7CisJCQllc3BfbG9nX21zZ2luKCJHb3QgbXNnaW4gYnl0ZSAleFxuIiwgdmFsKTsKIAogCQkJaWYgKCFlc3BfbXNnaW5fcHJvY2Vzcyhlc3ApKQogCQkJCWVzcC0+bXNnX2luX2xlbiA9IDA7CkBAIC0xOTMwLDcgKzIwMDEsOCBAQAogCQkJaWYgKGVzcC0+ZXZlbnQgIT0gRVNQX0VWRU5UX0ZSRUVfQlVTKQogCQkJCWVzcF9ldmVudChlc3AsIEVTUF9FVkVOVF9DSEVDS19QSEFTRSk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoIkVTUDogTVNHSU4gbmVpdGhlciBCU0VSViBub3QgRkRPTiwgcmVzZXR0aW5nIik7CisJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBlc3AtPmhvc3QsCisJCQkJICAgICAiTVNHSU4gbmVpdGhlciBCU0VSViBub3QgRkRPTiwgcmVzZXR0aW5nIik7CiAJCQllc3Bfc2NoZWR1bGVfcmVzZXQoZXNwKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xOTM4LDExICsyMDEwLDcgQEAKIAljYXNlIEVTUF9FVkVOVF9DTURfU1RBUlQ6CiAJCW1lbWNweShlc3AtPmNvbW1hbmRfYmxvY2ssIGVzcC0+Y21kX2J5dGVzX3B0ciwKIAkJICAgICAgIGVzcC0+Y21kX2J5dGVzX2xlZnQpOwotCQlpZiAoZXNwLT5yZXYgPT0gRkFTSE1FKQotCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9GTFVTSCk7Ci0JCWVzcC0+b3BzLT5zZW5kX2RtYV9jbWQoZXNwLCBlc3AtPmNvbW1hbmRfYmxvY2tfZG1hLAotCQkJCSAgICAgICBlc3AtPmNtZF9ieXRlc19sZWZ0LCAxNiwgMCwKLQkJCQkgICAgICAgRVNQX0NNRF9ETUEgfCBFU1BfQ01EX1RJKTsKKwkJZXNwX3NlbmRfZG1hX2NtZChlc3AsIGVzcC0+Y21kX2J5dGVzX2xlZnQsIDE2LCBFU1BfQ01EX1RJKTsKIAkJZXNwX2V2ZW50KGVzcCwgRVNQX0VWRU5UX0NNRF9ET05FKTsKIAkJZXNwLT5mbGFncyB8PSBFU1BfRkxBR19RVUlDS0lSUV9DSEVDSzsKIAkJYnJlYWs7CkBAIC0xOTYxLDggKzIwMjksOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50aygiRVNQOiBVbmV4cGVjdGVkIGV2ZW50ICV4LCByZXNldHRpbmdcbiIsCi0JCSAgICAgICBlc3AtPmV2ZW50KTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZXNwLT5ob3N0LAorCQkJICAgICAiVW5leHBlY3RlZCBldmVudCAleCwgcmVzZXR0aW5nXG4iLCBlc3AtPmV2ZW50KTsKIAkJZXNwX3NjaGVkdWxlX3Jlc2V0KGVzcCk7CiAJCXJldHVybiAwOwogCQlicmVhazsKQEAgLTIwNDQsNyArMjExMiwxMiBAQAogCWludCBmaW5pc2hfcmVzZXQsIGludHJfZG9uZTsKIAl1OCBwaGFzZTsKIAorICAgICAgIC8qCisJKiBPbmNlIElOVFJQVCBpcyByZWFkIFNUQVRVUyBhbmQgU1NURVAgYXJlIGNsZWFyZWQuCisJKi8KIAllc3AtPnNyZWcgPSBlc3BfcmVhZDgoRVNQX1NUQVRVUyk7CisJZXNwLT5zZXFyZWcgPSBlc3BfcmVhZDgoRVNQX1NTVEVQKTsKKwllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7CiAKIAlpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX1JFU0VUVElORykgewogCQlmaW5pc2hfcmVzZXQgPSAxOwpAQCAtMjA1Nyw4ICsyMTMwLDYgQEAKIAkJCXJldHVybjsKIAl9CiAKLQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7Ci0KIAlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfU1IpCiAJCWZpbmlzaF9yZXNldCA9IDE7CiAKQEAgLTIwODUsMTQgKzIxNTYsMTUgQEAKIAkJfQogCX0KIAotCWVzcF9sb2dfaW50cigiRVNQOiBpbnRyIHNyZWdbJTAyeF0gc2VxcmVnWyUwMnhdICIKKwllc3BfbG9nX2ludHIoImludHIgc3JlZ1slMDJ4XSBzZXFyZWdbJTAyeF0gIgogCQkgICAgICJzcmVnMlslMDJ4XSBpcmVnWyUwMnhdXG4iLAogCQkgICAgIGVzcC0+c3JlZywgZXNwLT5zZXFyZWcsIGVzcC0+c3JlZzIsIGVzcC0+aXJlZyk7CiAKIAlpbnRyX2RvbmUgPSAwOwogCiAJaWYgKGVzcC0+aXJlZyAmIChFU1BfSU5UUl9TIHwgRVNQX0lOVFJfU0FUTiB8IEVTUF9JTlRSX0lDKSkgewotCQlwcmludGsoIkVTUDogdW5leHBlY3RlZCBJUkVHICUwMnhcbiIsIGVzcC0+aXJlZyk7CisJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGVzcC0+aG9zdCwKKwkJCSAgICAgInVuZXhwZWN0ZWQgSVJFRyAlMDJ4XG4iLCBlc3AtPmlyZWcpOwogCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfSUMpCiAJCQllc3BfZHVtcF9jbWRfbG9nKGVzcCk7CiAKQEAgLTIxNDksNDYgKzIyMjEsNTAgQEAKIAl1OCB2YWw7CiAKIAllc3AtPmNvbmZpZzEgPSAoRVNQX0NPTkZJRzFfUEVOQUJMRSB8IChlc3AtPnNjc2lfaWQgJiA3KSk7Ci0JZXNwLT5jb25maWcyID0gKEVTUF9DT05GSUcyX1NDU0kyRU5BQiB8IEVTUF9DT05GSUcyX1JFR1BBUklUWSk7Ci0JZXNwX3dyaXRlOChlc3AtPmNvbmZpZzIsIEVTUF9DRkcyKTsKLQotCXZhbCA9IGVzcF9yZWFkOChFU1BfQ0ZHMik7Ci0JdmFsICY9IH5FU1BfQ09ORklHMl9NQUdJQzsKLQlpZiAodmFsICE9IChFU1BfQ09ORklHMl9TQ1NJMkVOQUIgfCBFU1BfQ09ORklHMl9SRUdQQVJJVFkpKSB7Ci0JCS8qIElmIHdoYXQgd2Ugd3JpdGUgdG8gY2ZnMiBkb2VzIG5vdCBjb21lIGJhY2ssIGNmZzIgaXMgbm90Ci0JCSAqIGltcGxlbWVudGVkLCB0aGVyZWZvcmUgdGhpcyBtdXN0IGJlIGEgcGxhaW4gZXNwMTAwLgotCQkgKi8KLQkJZXNwLT5yZXYgPSBFU1AxMDA7Ci0JfSBlbHNlIHsKLQkJZXNwLT5jb25maWcyID0gMDsKLQkJZXNwX3NldF9hbGxfY29uZmlnMyhlc3AsIDUpOwotCQllc3AtPnByZXZfY2ZnMyA9IDU7CisJaWYgKGVzcC0+Y29uZmlnMiA9PSAwKSB7CisJCWVzcC0+Y29uZmlnMiA9IChFU1BfQ09ORklHMl9TQ1NJMkVOQUIgfCBFU1BfQ09ORklHMl9SRUdQQVJJVFkpOwogCQllc3Bfd3JpdGU4KGVzcC0+Y29uZmlnMiwgRVNQX0NGRzIpOwotCQllc3Bfd3JpdGU4KDAsIEVTUF9DRkczKTsKKworCQl2YWwgPSBlc3BfcmVhZDgoRVNQX0NGRzIpOworCQl2YWwgJj0gfkVTUF9DT05GSUcyX01BR0lDOworCisJCWVzcC0+Y29uZmlnMiA9IDA7CisJCWlmICh2YWwgIT0gKEVTUF9DT05GSUcyX1NDU0kyRU5BQiB8IEVTUF9DT05GSUcyX1JFR1BBUklUWSkpIHsKKwkJCS8qCisJCQkgKiBJZiB3aGF0IHdlIHdyaXRlIHRvIGNmZzIgZG9lcyBub3QgY29tZSBiYWNrLAorCQkJICogY2ZnMiBpcyBub3QgaW1wbGVtZW50ZWQuCisJCQkgKiBUaGVyZWZvcmUgdGhpcyBtdXN0IGJlIGEgcGxhaW4gZXNwMTAwLgorCQkJICovCisJCQllc3AtPnJldiA9IEVTUDEwMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWVzcF9zZXRfYWxsX2NvbmZpZzMoZXNwLCA1KTsKKwllc3AtPnByZXZfY2ZnMyA9IDU7CisJZXNwX3dyaXRlOChlc3AtPmNvbmZpZzIsIEVTUF9DRkcyKTsKKwllc3Bfd3JpdGU4KDAsIEVTUF9DRkczKTsKKwllc3Bfd3JpdGU4KGVzcC0+cHJldl9jZmczLCBFU1BfQ0ZHMyk7CisKKwl2YWwgPSBlc3BfcmVhZDgoRVNQX0NGRzMpOworCWlmICh2YWwgIT0gNSkgeworCQkvKiBUaGUgY2ZnMiByZWdpc3RlciBpcyBpbXBsZW1lbnRlZCwgaG93ZXZlcgorCQkgKiBjZmczIGlzIG5vdCwgbXVzdCBiZSBlc3AxMDBhLgorCQkgKi8KKwkJZXNwLT5yZXYgPSBFU1AxMDBBOworCX0gZWxzZSB7CisJCWVzcF9zZXRfYWxsX2NvbmZpZzMoZXNwLCAwKTsKKwkJZXNwLT5wcmV2X2NmZzMgPSAwOwogCQllc3Bfd3JpdGU4KGVzcC0+cHJldl9jZmczLCBFU1BfQ0ZHMyk7CiAKLQkJdmFsID0gZXNwX3JlYWQ4KEVTUF9DRkczKTsKLQkJaWYgKHZhbCAhPSA1KSB7Ci0JCQkvKiBUaGUgY2ZnMiByZWdpc3RlciBpcyBpbXBsZW1lbnRlZCwgaG93ZXZlcgotCQkJICogY2ZnMyBpcyBub3QsIG11c3QgYmUgZXNwMTAwYS4KLQkJCSAqLwotCQkJZXNwLT5yZXYgPSBFU1AxMDBBOworCQkvKiBBbGwgb2YgY2ZnezEsMiwzfSBpbXBsZW1lbnRlZCwgbXVzdCBiZSBvbmUgb2YKKwkJICogdGhlIGZhcyB2YXJpYW50cywgZmlndXJlIG91dCB3aGljaCBvbmUuCisJCSAqLworCQlpZiAoZXNwLT5jZmFjdCA9PSAwIHx8IGVzcC0+Y2ZhY3QgPiBFU1BfQ0NGX0Y1KSB7CisJCQllc3AtPnJldiA9IEZBU1Q7CisJCQllc3AtPnN5bmNfZGVmcCA9IFNZTkNfREVGUF9GQVNUOwogCQl9IGVsc2UgewotCQkJZXNwX3NldF9hbGxfY29uZmlnMyhlc3AsIDApOwotCQkJZXNwLT5wcmV2X2NmZzMgPSAwOwotCQkJZXNwX3dyaXRlOChlc3AtPnByZXZfY2ZnMywgRVNQX0NGRzMpOwotCi0JCQkvKiBBbGwgb2YgY2ZnezEsMiwzfSBpbXBsZW1lbnRlZCwgbXVzdCBiZSBvbmUgb2YKLQkJCSAqIHRoZSBmYXMgdmFyaWFudHMsIGZpZ3VyZSBvdXQgd2hpY2ggb25lLgotCQkJICovCi0JCQlpZiAoZXNwLT5jZmFjdCA9PSAwIHx8IGVzcC0+Y2ZhY3QgPiBFU1BfQ0NGX0Y1KSB7Ci0JCQkJZXNwLT5yZXYgPSBGQVNUOwotCQkJCWVzcC0+c3luY19kZWZwID0gU1lOQ19ERUZQX0ZBU1Q7Ci0JCQl9IGVsc2UgewotCQkJCWVzcC0+cmV2ID0gRVNQMjM2OwotCQkJfQotCQkJZXNwLT5jb25maWcyID0gMDsKLQkJCWVzcF93cml0ZTgoZXNwLT5jb25maWcyLCBFU1BfQ0ZHMik7CisJCQllc3AtPnJldiA9IEVTUDIzNjsKIAkJfQogCX0KIH0KQEAgLTIzMDgsNiArMjM4NCw3IEBACiAJIkZBUzEwMEEiLAogCSJGQVNUIiwKIAkiRkFTSE1FIiwKKwkiQU01M0M5NzQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqZXNwX3RyYW5zcG9ydF90ZW1wbGF0ZTsKQEAgLTIzMTcsNiArMjM5NCwxMCBAQAogCXN0YXRpYyBpbnQgaW5zdGFuY2U7CiAJaW50IGVycjsKIAorCWlmICghZXNwLT5udW1fdGFncykKKwkJZXNwLT5udW1fdGFncyA9IEVTUF9ERUZBVUxUX1RBR1M7CisJZWxzZSBpZiAoZXNwLT5udW1fdGFncyA+PSBFU1BfTUFYX1RBRykKKwkJZXNwLT5udW1fdGFncyA9IEVTUF9NQVhfVEFHIC0gMTsKIAllc3AtPmhvc3QtPnRyYW5zcG9ydHQgPSBlc3BfdHJhbnNwb3J0X3RlbXBsYXRlOwogCWVzcC0+aG9zdC0+bWF4X2x1biA9IEVTUF9NQVhfTFVOOwogCWVzcC0+aG9zdC0+Y21kX3Blcl9sdW4gPSAyOwpAQCAtMjMzMCwxMiArMjQxMSwxMyBAQAogCiAJZXNwX2Jvb3R1cF9yZXNldChlc3ApOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggImVzcCV1LCByZWdzWyUxcDolMXBdIGlycVsldV1cbiIsCi0JICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlc3AtPnJlZ3MsIGVzcC0+ZG1hX3JlZ3MsCi0JICAgICAgIGVzcC0+aG9zdC0+aXJxKTsKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZXNwJXUgaXMgYSAlcywgJXUgTUh6IChjY2Y9JXUpLCBTQ1NJIElEICV1XG4iLAotCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwgZXNwX2NoaXBfbmFtZXNbZXNwLT5yZXZdLAotCSAgICAgICBlc3AtPmNmcmVxIC8gMTAwMDAwMCwgZXNwLT5jZmFjdCwgZXNwLT5zY3NpX2lkKTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgZGV2LCAiZXNwJXU6IHJlZ3NbJTFwOiUxcF0gaXJxWyV1XVxuIiwKKwkJICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+cmVncywgZXNwLT5kbWFfcmVncywKKwkJICAgZXNwLT5ob3N0LT5pcnEpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCBkZXYsCisJCSAgICJlc3AldTogaXMgYSAlcywgJXUgTUh6IChjY2Y9JXUpLCBTQ1NJIElEICV1XG4iLAorCQkgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwgZXNwX2NoaXBfbmFtZXNbZXNwLT5yZXZdLAorCQkgICBlc3AtPmNmcmVxIC8gMTAwMDAwMCwgZXNwLT5jZmFjdCwgZXNwLT5zY3NpX2lkKTsKIAogCS8qIExldCB0aGUgU0NTSSBidXMgcmVzZXQgc2V0dGxlLiAqLwogCXNzbGVlcChlc3BfYnVzX3Jlc2V0X3NldHRsZSk7CkBAIC0yNDAyLDI4ICsyNDg0LDEwIEBACiB7CiAJc3RydWN0IGVzcCAqZXNwID0gc2hvc3RfcHJpdihkZXYtPmhvc3QpOwogCXN0cnVjdCBlc3BfdGFyZ2V0X2RhdGEgKnRwID0gJmVzcC0+dGFyZ2V0W2Rldi0+aWRdOwotCWludCBnb2FsX3RhZ3MsIHF1ZXVlX2RlcHRoOwogCi0JZ29hbF90YWdzID0gMDsKKwlpZiAoZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIGVzcC0+bnVtX3RhZ3MpOwogCi0JaWYgKGRldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQkvKiBYWFggbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBzb21laG93IFhYWCAqLwotCQlnb2FsX3RhZ3MgPSBFU1BfREVGQVVMVF9UQUdTOwotCi0JCWlmIChnb2FsX3RhZ3MgPiBFU1BfTUFYX1RBRykKLQkJCWdvYWxfdGFncyA9IEVTUF9NQVhfVEFHOwotCX0KLQotCXF1ZXVlX2RlcHRoID0gZ29hbF90YWdzOwotCWlmIChxdWV1ZV9kZXB0aCA8IGRldi0+aG9zdC0+Y21kX3Blcl9sdW4pCi0JCXF1ZXVlX2RlcHRoID0gZGV2LT5ob3N0LT5jbWRfcGVyX2x1bjsKLQotCWlmIChnb2FsX3RhZ3MpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoZGV2LCBNU0dfT1JERVJFRF9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShkZXYsIHF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UgewotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKGRldiwgcXVldWVfZGVwdGgpOwotCX0KIAl0cC0+ZmxhZ3MgfD0gRVNQX1RHVF9ESVNDT05ORUNUOwogCiAJaWYgKCFzcGlfaW5pdGlhbF9kdihkZXYtPnNkZXZfdGFyZ2V0KSkKQEAgLTI0NTEsMTkgKzI1MTUsMjAgQEAKIAkgKiBYWFggbXVjaCBmb3IgdGhlIGZpbmFsIGRyaXZlci4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZShlc3AtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBBYm9ydGluZyBjb21tYW5kIFslcDolMDJ4XVxuIiwKLQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGNtZCwgY21kLT5jbW5kWzBdKTsKKwlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwgIkFib3J0aW5nIGNvbW1hbmQgWyVwOiUwMnhdXG4iLAorCQkgICAgIGNtZCwgY21kLT5jbW5kWzBdKTsKIAllbnQgPSBlc3AtPmFjdGl2ZV9jbWQ7CiAJaWYgKGVudCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IEN1cnJlbnQgY29tbWFuZCBbJXA6JTAyeF1cbiIsCi0JCSAgICAgICBlc3AtPmhvc3QtPnVuaXF1ZV9pZCwgZW50LT5jbWQsIGVudC0+Y21kLT5jbW5kWzBdKTsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBlc3AtPmhvc3QsCisJCQkgICAgICJDdXJyZW50IGNvbW1hbmQgWyVwOiUwMnhdXG4iLAorCQkJICAgICBlbnQtPmNtZCwgZW50LT5jbWQtPmNtbmRbMF0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50LCAmZXNwLT5xdWV1ZWRfY21kcywgbGlzdCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJlc3AlZDogUXVldWVkIGNvbW1hbmQgWyVwOiUwMnhdXG4iLAotCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVudC0+Y21kLCBlbnQtPmNtZC0+Y21uZFswXSk7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZXNwLT5ob3N0LCAiUXVldWVkIGNvbW1hbmQgWyVwOiUwMnhdXG4iLAorCQkJICAgICBlbnQtPmNtZCwgZW50LT5jbWQtPmNtbmRbMF0pOwogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudCwgJmVzcC0+YWN0aXZlX2NtZHMsIGxpc3QpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXNwJWQ6IEFjdGl2ZSBjb21tYW5kIFslcDolMDJ4XVxuIiwKLQkJICAgICAgIGVzcC0+aG9zdC0+dW5pcXVlX2lkLCBlbnQtPmNtZCwgZW50LT5jbWQtPmNtbmRbMF0pOworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGVzcC0+aG9zdCwgIiBBY3RpdmUgY29tbWFuZCBbJXA6JTAyeF1cbiIsCisJCQkgICAgIGVudC0+Y21kLCBlbnQtPmNtZC0+Y21uZFswXSk7CiAJfQogCWVzcF9kdW1wX2NtZF9sb2coZXNwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGVzcC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC0yNjMxLDYgKzI2OTYsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkubWF4X3NlY3RvcnMJCT0gMHhmZmZmLAogCS5za2lwX3NldHRsZV9kZWxheQk9IDEsCisJLnVzZV9ibGtfdGFncwkJPSAxLAogfTsKIEVYUE9SVF9TWU1CT0woc2NzaV9lc3BfdGVtcGxhdGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuaCBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5oCmluZGV4IGNkNjg4MDUuLjg0ZGNiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5oCkBAIC0xLDQgKzEsNCBAQAotLyogZXNwX3Njc2kuaDogRGVmaW5lcyBhbmQgc3RydWN0dXJlcyBmb3IgdGhlIEVTUCBkcmllci4KKy8qIGVzcF9zY3NpLmg6IERlZmluZXMgYW5kIHN0cnVjdHVyZXMgZm9yIHRoZSBFU1AgZHJpdmVyLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgRVNQX0NURVNUCTB4MGFVTAkJLyogd28gIENoaXAgdGVzdCByZWdpc3RlciAgICAgIDB4MjggICovCiAjZGVmaW5lIEVTUF9DRkcyCTB4MGJVTAkJLyogcncgIFNlY29uZCBjZmcgcmVnaXN0ZXIgICAgIDB4MmMgICovCiAjZGVmaW5lIEVTUF9DRkczCTB4MGNVTAkJLyogcncgIFRoaXJkIGNmZyByZWdpc3RlciAgICAgIDB4MzAgICovCisjZGVmaW5lIEVTUF9DRkc0CTB4MGRVTAkJLyogcncgIEZvdXJ0aCBjZmcgcmVnaXN0ZXIgICAgIDB4MzQgICovCiAjZGVmaW5lIEVTUF9UQ0hJCTB4MGVVTAkJLyogcncgIEhpZ2ggYml0cyB0cmFuc2YgY291bnQgIDB4MzggICovCiAjZGVmaW5lIEVTUF9VSUQJCUVTUF9UQ0hJCS8qIHJvICBVbmlxdWUgSUQgY29kZSAgICAgICAgICAweDM4ICAqLwogI2RlZmluZSBGQVNfUkxPCQlFU1BfVENISQkvKiBydyAgSE1FIGV4dGVuZGVkIGNvdW50ZXIgICAgMHgzOCAgKi8KQEAgLTc2LDYgKzc3LDE4IEBACiAjZGVmaW5lIEVTUF9DT05GSUczX0lNUyAgICAgICAweDgwICAgICAvKiBJRCBtc2cgY2hrJ25nICAgICAgICAoZXNwL2ZhczIzNikgICovCiAjZGVmaW5lIEVTUF9DT05GSUczX09CUFVTSCAgICAweDgwICAgICAvKiBQdXNoIG9kZC1ieXRlIHRvIGRtYSAoaG1lKSAgICAgICAgICovCiAKKy8qIEVTUCBjb25maWcgcmVnaXN0ZXIgNCByZWFkLXdyaXRlLCBmb3VuZCBvbmx5IG9uIGFtNTNjOTc0IGNoaXBzICovCisjZGVmaW5lIEVTUF9DT05GSUc0X1JBREUgICAgICAweDA0ICAgICAvKiBBY3RpdmUgbmVnYXRpb24gKi8KKyNkZWZpbmUgRVNQX0NPTkZJRzRfUkFFICAgICAgIDB4MDggICAgIC8qIEFjdGl2ZSBuZWdhdGlvbiBvbiBSRVEgYW5kIEFDSyAqLworI2RlZmluZSBFU1BfQ09ORklHNF9QV0QgICAgICAgMHgyMCAgICAgLyogUmVkdWNlZCBwb3dlciBmZWF0dXJlICovCisjZGVmaW5lIEVTUF9DT05GSUc0X0dFMCAgICAgICAweDQwICAgICAvKiBHbGl0Y2ggZWF0ZXIgYml0IDAgKi8KKyNkZWZpbmUgRVNQX0NPTkZJRzRfR0UxICAgICAgIDB4ODAgICAgIC8qIEdsaXRjaCBlYXRlciBiaXQgMSAqLworCisjZGVmaW5lIEVTUF9DT05GSUdfR0VfMTJOUyAgICAoMCkKKyNkZWZpbmUgRVNQX0NPTkZJR19HRV8yNU5TICAgIChFU1BfQ09ORklHX0dFMSkKKyNkZWZpbmUgRVNQX0NPTkZJR19HRV8zNU5TICAgIChFU1BfQ09ORklHX0dFMCkKKyNkZWZpbmUgRVNQX0NPTkZJR19HRV8wTlMgICAgIChFU1BfQ09ORklHX0dFMCB8IEVTUF9DT05GSUdfR0UxKQorCiAvKiBFU1AgY29tbWFuZCByZWdpc3RlciByZWFkLXdyaXRlICovCiAvKiBHcm91cCAxIGNvbW1hbmRzOiAgVGhlc2UgbWF5IGJlIHNlbnQgYXQgYW55IHBvaW50IGluIHRpbWUgdG8gdGhlIEVTUAogICogICAgICAgICAgICAgICAgICAgIGNoaXAuICBOb25lIG9mIHRoZW0gY2FuIGdlbmVyYXRlIGludGVycnVwdHMgJ2NlcHQKQEAgLTI1NCw2ICsyNjcsNyBAQAogCUZBUzEwMEEgICAgPSAweDA0LAogCUZBU1QgICAgICAgPSAweDA1LAogCUZBU0hNRSAgICAgPSAweDA2LAorCVBDU0NTSSAgICAgPSAweDA3LCAgLyogQU01M2M5NzQgKi8KIH07CiAKIHN0cnVjdCBlc3BfY21kX2VudHJ5IHsKQEAgLTI2OSw2ICsyODMsNyBAQAogI2RlZmluZSBFU1BfQ01EX0ZMQUdfV1JJVEUJMHgwMSAvKiBETUEgaXMgYSB3cml0ZSAqLwogI2RlZmluZSBFU1BfQ01EX0ZMQUdfQUJPUlQJMHgwMiAvKiBiZWluZyBhYm9ydGVkICovCiAjZGVmaW5lIEVTUF9DTURfRkxBR19BVVRPU0VOU0UJMHgwNCAvKiBEb2luZyBhdXRvbWF0aWMgUkVRVUVTVF9TRU5TRSAqLworI2RlZmluZSBFU1BfQ01EX0ZMQUdfUkVTSURVQUwJMHgwOCAvKiBBTTUzYzk3NCBCTEFTVCByZXNpZHVhbCAqLwogCiAJdTgJCQl0YWdbMl07CiAJdTgJCQlvcmlnX3RhZ1syXTsKQEAgLTI4Myw3ICsyOTgsNiBAQAogCXN0cnVjdCBjb21wbGV0aW9uCSplaF9kb25lOwogfTsKIAotLyogWFhYIG1ha2UgdGhpcyBjb25maWd1cmFibGUgc29tZWhvdyBYWFggKi8KICNkZWZpbmUgRVNQX0RFRkFVTFRfVEFHUwkxNgogCiAjZGVmaW5lIEVTUF9NQVhfVEFSR0VUCQkxNgpAQCAtNDQ1LDcgKzQ1OSw3IEBACiAJdTgJCQlwcmV2X3NvZmY7CiAJdTgJCQlwcmV2X3N0cDsKIAl1OAkJCXByZXZfY2ZnMzsKLQl1OAkJCV9fcGFkOworCXU4CQkJbnVtX3RhZ3M7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVzcF9jbWRfcG9vbDsKIApAQCAtNDY2LDYgKzQ4MCw3IEBACiAJdTgJCQlidXJzdHM7CiAJdTgJCQljb25maWcxOwogCXU4CQkJY29uZmlnMjsKKwl1OAkJCWNvbmZpZzQ7CiAKIAl1OAkJCXNjc2lfaWQ7CiAJdTMyCQkJc2NzaV9pZF9tYXNrOwpAQCAtNDc5LDYgKzQ5NCw3IEBACiAjZGVmaW5lIEVTUF9GTEFHX1dJREVfQ0FQQUJMRQkweDAwMDAwMDA4CiAjZGVmaW5lIEVTUF9GTEFHX1FVSUNLSVJRX0NIRUNLCTB4MDAwMDAwMTAKICNkZWZpbmUgRVNQX0ZMQUdfRElTQUJMRV9TWU5DCTB4MDAwMDAwMjAKKyNkZWZpbmUgRVNQX0ZMQUdfVVNFX0ZJRk8JMHgwMDAwMDA0MAogCiAJdTgJCQlzZWxlY3Rfc3RhdGU7CiAjZGVmaW5lIEVTUF9TRUxFQ1RfTk9ORQkJMHgwMCAvKiBOb3Qgc2VsZWN0aW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKaW5kZXggNGE4YWM3ZC4uMzA4YTAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYwpAQCAtMjgwLDE0ICsyODAsMTYgQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBmY19laF9kZXZpY2VfcmVzZXQsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlciA9IGZjX2VoX2hvc3RfcmVzZXQsCiAJLnNsYXZlX2FsbG9jID0gZmNfc2xhdmVfYWxsb2MsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUgPSBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZCA9IC0xLAogCS5jbWRfcGVyX2x1biA9IDMsCiAJLmNhbl9xdWV1ZSA9IEZDT0VfTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTLAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zZ190YWJsZXNpemUgPSBTR19BTEwsCiAJLm1heF9zZWN0b3JzID0gMHhmZmZmLAorCS51c2VfYmxrX3RhZ3MgPSAxLAorCS50cmFja19xdWV1ZV9kZXB0aCA9IDEsCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaCBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaAppbmRleCBiZjhkMzRjLi4zYjczYjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCkBAIC0zOSw3ICszOSw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJmbmljIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJDaXNjbyBGQ29FIEhCQSBEcml2ZXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS42LjAuMTEiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS42LjAuMTYiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKICNkZWZpbmUgREZYICAgICAgICAgICAgICAgICAgICAgRFJWX05BTUUgIiVkOiAiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX2Zjcy5jCmluZGV4IGYzOTg0YjQuLmJmMGJiZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19mY3MuYwpAQCAtMTM1LDYgKzEzNSwxMSBAQAogCQkJZm5pYy0+bHBvcnQtPmhvc3QtPmhvc3Rfbm8sIEZOSUNfRkNfTEUsCiAJCQkiTGluayBTdGF0dXM6IFVQX0RPV04iLAogCQkJc3RybGVuKCJMaW5rIFN0YXR1czogVVBfRE9XTiIpKTsKKwkJaWYgKGZuaWMtPmNvbmZpZy5mbGFncyAmIFZGQ0ZfRklQX0NBUEFCTEUpIHsKKwkJCUZOSUNfRkNTX0RCRyhLRVJOX0RFQlVHLCBmbmljLT5scG9ydC0+aG9zdCwKKwkJCQkiZGVsZXRpbmcgZmlwLXRpbWVyIGR1cmluZyBsaW5rLWRvd25cbiIpOworCQkJZGVsX3RpbWVyX3N5bmMoJmZuaWMtPmZpcF90aW1lcik7CisJCX0KIAkJZmNvZV9jdGxyX2xpbmtfZG93bigmZm5pYy0+Y3Rscik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCmluZGV4IDhjNTZmZGMuLjBjMWY4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCkBAIC05NSwxMiArOTUsMTAgQEAKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzZGV2KSk7CiAKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKLQogCWlmICghcnBvcnQgfHwgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpKQogCQlyZXR1cm4gLUVOWElPOwogCi0Jc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZm5pY19tYXhfcWRlcHRoKTsKKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBmbmljX21heF9xZGVwdGgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTIsOCArMTEwLDggQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBmbmljX2RldmljZV9yZXNldCwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyID0gZm5pY19ob3N0X3Jlc2V0LAogCS5zbGF2ZV9hbGxvYyA9IGZuaWNfc2xhdmVfYWxsb2MsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUgPSBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZCA9IC0xLAogCS5jbWRfcGVyX2x1biA9IDMsCiAJLmNhbl9xdWV1ZSA9IEZOSUNfREZMVF9JT19SRVEsCkBAIC0xMjEsNiArMTE5LDggQEAKIAkuc2dfdGFibGVzaXplID0gRk5JQ19NQVhfU0dfREVTQ19DTlQsCiAJLm1heF9zZWN0b3JzID0gMHhmZmZmLAogCS5zaG9zdF9hdHRycyA9IGZuaWNfYXR0cnMsCisJLnVzZV9ibGtfdGFncyA9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoID0gMSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC00MzgsMjEgKzQzOCwzMCBAQAogCXVuc2lnbmVkIGxvbmcgdGltZTsKIAlpbnQgZG9uZTsKIAlpbnQgZXJyOworCWludCBjb3VudDsKKworCWNvdW50ID0gMDsKIAogCWVyciA9IHN0YXJ0KHZkZXYsIGFyZyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qIFdhaXQgZm9yIGZ1bmMgdG8gY29tcGxldGUuLi4yIHNlY29uZHMgbWF4ICovCisJLyogV2FpdCBmb3IgZnVuYyB0byBjb21wbGV0ZS4KKwkqIFNvbWV0aW1lIHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlIHRha2UgbG9uZyB0aW1lCisJKiB0byB3YWtlIHVwIHNvIHdlIGRvIG5vdCByZXRyeSBhcyB3ZSBhcmUgb25seSB3YWl0aW5nIGZvcgorCSogMiBzZWNvbmRzIGluIHdoaWxlIGxvb3AuIEJ5IGFkZGluZyBjb3VudCwgd2UgbWFrZSBzdXJlCisJKiB3ZSB0cnkgYXRsZWFzdCB0aHJlZSB0aW1lcyBiZWZvcmUgcmV0dXJuaW5nIC1FVElNRURPVVQKKwkqLwogCXRpbWUgPSBqaWZmaWVzICsgKEhaICogMik7CiAJZG8gewogCQllcnIgPSBmaW5pc2hlZCh2ZGV2LCAmZG9uZSk7CisJCWNvdW50Kys7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlpZiAoZG9uZSkKIAkJCXJldHVybiAwOwogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWiAvIDEwKTsKLQl9IHdoaWxlICh0aW1lX2FmdGVyKHRpbWUsIGppZmZpZXMpKTsKKwl9IHdoaWxlICh0aW1lX2FmdGVyKHRpbWUsIGppZmZpZXMpIHx8IChjb3VudCA8IDMpKTsKIAogCXJldHVybiAtRVRJTUVET1VUOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYwppbmRleCA5NjFiZGY1Li4yMDk3ZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYwpAQCAtMzI1LDEzICszMjUsMTEgQEAKIAlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcnAgPSBycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaG9zdF9zZ19kZXNjICpkZXNjOwogCXN0cnVjdCBtaXNjX3N0YXRzICptaXNjX3N0YXRzID0gJmZuaWMtPmZuaWNfc3RhdHMubWlzY19zdGF0czsKLQl1OCBwcmlfdGFnID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGludHJfZmxhZ3M7CiAJaW50IGZsYWdzOwogCXU4IGV4Y2hfZmxhZ3M7CiAJc3RydWN0IHNjc2lfbHVuIGZjX2x1bjsKLQljaGFyIG1zZ1syXTsKIAogCWlmIChzZ19jb3VudCkgewogCQkvKiBGb3IgZWFjaCBTR0UsIGNyZWF0ZSBhIGRldmljZSBkZXNjIGVudHJ5ICovCkBAIC0zNTcsMTIgKzM1NSw2IEBACiAKIAlpbnRfdG9fc2NzaWx1bihzYy0+ZGV2aWNlLT5sdW4sICZmY19sdW4pOwogCi0JcHJpX3RhZyA9IEZDUElPX0lDTU5EX1BUQV9TSU1QTEU7Ci0JbXNnWzBdID0gTVNHX1NJTVBMRV9UQUc7Ci0Jc2NzaV9wb3B1bGF0ZV90YWdfbXNnKHNjLCBtc2cpOwotCWlmIChtc2dbMF0gPT0gTVNHX09SREVSRURfVEFHKQotCQlwcmlfdGFnID0gRkNQSU9fSUNNTkRfUFRBX09SREVSRUQ7Ci0KIAkvKiBFbnF1ZXVlIHRoZSBkZXNjcmlwdG9yIGluIHRoZSBDb3B5IFdRICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZuaWMtPndxX2NvcHlfbG9ja1swXSwgaW50cl9mbGFncyk7CiAKQEAgLTM5NCw3ICszODYsOCBAQAogCQkJCQkgaW9fcmVxLT5zZ2xfbGlzdF9wYSwKIAkJCQkJIGlvX3JlcS0+c2Vuc2VfYnVmX3BhLAogCQkJCQkgMCwgLyogc2NzaSBjbWQgcmVmLCBhbHdheXMgMCAqLwotCQkJCQkgcHJpX3RhZywgLyogc2NzaSBwcmkgYW5kIHRhZyAqLworCQkJCQkgRkNQSU9fSUNNTkRfUFRBX1NJTVBMRSwKKwkJCQkJIAkvKiBzY3NpIHByaSBhbmQgdGFnICovCiAJCQkJCSBmbGFncywJLyogY29tbWFuZCBmbGFncyAqLwogCQkJCQkgc2MtPmNtbmQsIHNjLT5jbWRfbGVuLAogCQkJCQkgc2NzaV9idWZmbGVuKHNjKSwKQEAgLTQyOCw4ICs0MjEsMTAgQEAKIAlpbnQgcmV0OwogCXU2NCBjbWRfdHJhY2U7CiAJaW50IHNnX2NvdW50ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgcHRyOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKKwlzcGlubG9ja190ICppb19sb2NrID0gTlVMTDsKIAogCWlmICh1bmxpa2VseShmbmljX2Noa19zdGF0ZV9mbGFnc19sb2NrZWQoZm5pYywgRk5JQ19GTEFHU19JT19CTE9DS0VEKSkpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwpAQCAtNDQzLDYgKzQzOCwxNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlyZGF0YSA9IGxwLT50dC5ycG9ydF9sb29rdXAobHAsIHJwb3J0LT5wb3J0X2lkKTsKKwlpZiAoIXJkYXRhIHx8IChyZGF0YS0+cnBfc3RhdGUgPT0gUlBPUlRfU1RfREVMRVRFKSkgeworCQlGTklDX1NDU0lfREJHKEtFUk5fREVCVUcsIGZuaWMtPmxwb3J0LT5ob3N0LAorCQkJInJldHVybmluZyBJTyBhcyBycG9ydCBpcyByZW1vdmVkXG4iKTsKKwkJYXRvbWljNjRfaW5jKCZmbmljX3N0YXRzLT5taXNjX3N0YXRzLnJwb3J0X25vdF9yZWFkeSk7CisJCXNjLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVDsKKwkJZG9uZShzYyk7CisJCXJldHVybiAwOworCX0KKwogCWlmIChscC0+c3RhdGUgIT0gTFBPUlRfU1RfUkVBRFkgfHwgIShscC0+bGlua191cCkpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCkBAIC01MDUsNiArNTEwLDEzIEBACiAJCX0KIAl9CiAKKwkvKgorCSogV2lsbCBhY3F1aXJlIGxvY2sgZGVmb3JlIHNldHRpbmcgdG8gSU8gaW5pdGlhbGl6ZWQuCisJKi8KKworCWlvX2xvY2sgPSBmbmljX2lvX2xvY2tfaGFzaChmbmljLCBzYyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoaW9fbG9jaywgZmxhZ3MpOworCiAJLyogaW5pdGlhbGl6ZSByZXN0IG9mIGlvX3JlcSAqLwogCWlvX3JlcS0+cG9ydF9pZCA9IHJwb3J0LT5wb3J0X2lkOwogCWlvX3JlcS0+c3RhcnRfdGltZSA9IGppZmZpZXM7CkBAIC01MjEsMTEgKzUzMyw5IEBACiAJCSAqIEluIGNhc2UgYW5vdGhlciB0aHJlYWQgY2FuY2VsbGVkIHRoZSByZXF1ZXN0LAogCQkgKiByZWZldGNoIHRoZSBwb2ludGVyIHVuZGVyIHRoZSBsb2NrLgogCQkgKi8KLQkJc3BpbmxvY2tfdCAqaW9fbG9jayA9IGZuaWNfaW9fbG9ja19oYXNoKGZuaWMsIHNjKTsKIAkJRk5JQ19UUkFDRShmbmljX3F1ZXVlY29tbWFuZCwgc2MtPmRldmljZS0+aG9zdC0+aG9zdF9ubywKIAkJCSAgc2MtPnJlcXVlc3QtPnRhZywgc2MsIDAsIDAsIDAsCiAJCQkgICgoKHU2NClDTURfRkxBR1Moc2MpIDw8IDMyKSB8IENNRF9TVEFURShzYykpKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoaW9fbG9jaywgZmxhZ3MpOwogCQlpb19yZXEgPSAoc3RydWN0IGZuaWNfaW9fcmVxICopQ01EX1NQKHNjKTsKIAkJQ01EX1NQKHNjKSA9IE5VTEw7CiAJCUNNRF9TVEFURShzYykgPSBGTklDX0lPUkVRX0NNRF9DT01QTEVURTsKQEAgLTUzNCw2ICs1NDQsMTAgQEAKIAkJCWZuaWNfcmVsZWFzZV9pb3JlcV9idWYoZm5pYywgaW9fcmVxLCBzYyk7CiAJCQltZW1wb29sX2ZyZWUoaW9fcmVxLCBmbmljLT5pb19yZXFfcG9vbCk7CiAJCX0KKwkJYXRvbWljX2RlYygmZm5pYy0+aW5fZmxpZ2h0KTsKKwkJLyogYWNxdWlyZSBob3N0IGxvY2sgYmVmb3JlIHJldHVybmluZyB0byBTQ1NJICovCisJCXNwaW5fbG9jayhscC0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewogCQlhdG9taWM2NF9pbmMoJmZuaWNfc3RhdHMtPmlvX3N0YXRzLmFjdGl2ZV9pb3MpOwogCQlhdG9taWM2NF9pbmMoJmZuaWNfc3RhdHMtPmlvX3N0YXRzLm51bV9pb3MpOwpAQCAtNTU1LDYgKzU2OSwxMSBAQAogCQkgIHNjLT5yZXF1ZXN0LT50YWcsIHNjLCBpb19yZXEsCiAJCSAgc2dfY291bnQsIGNtZF90cmFjZSwKIAkJICAoKCh1NjQpQ01EX0ZMQUdTKHNjKSA+PiAzMikgfCBDTURfU1RBVEUoc2MpKSk7CisKKwkvKiBpZiBvbmx5IHdlIGlzc3VlZCBJTywgd2lsbCB3ZSBoYXZlIHRoZSBpbyBsb2NrICovCisJaWYgKENNRF9GTEFHUyhzYykgJiBGTklDX0lPX0lOSVRJQUxJWkVEKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvX2xvY2ssIGZsYWdzKTsKKwogCWF0b21pY19kZWMoJmZuaWMtPmluX2ZsaWdodCk7CiAJLyogYWNxdWlyZSBob3N0IGxvY2sgYmVmb3JlIHJldHVybmluZyB0byBTQ1NJICovCiAJc3Bpbl9sb2NrKGxwLT5ob3N0LT5ob3N0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY190cmFjZS5jIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY190cmFjZS5jCmluZGV4IGFjZjFmOTUuLjY1YTliZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfdHJhY2UuYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3RyYWNlLmMKQEAgLTYyNCwxMiArNjI0LDEyIEBACiAJaWYgKGZyYW1lX3R5cGUgPT0gRk5JQ19GQ19SRUNWKSB7CiAJCWV0aF9mY29lX2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IGV0aGhkcikgKwogCQkJCQlzaXplb2Yoc3RydWN0IGZjb2VfaGRyKTsKLQkJZmNfdHJjX2ZyYW1lX2xlbiA9IGZjX3RyY19mcmFtZV9sZW4gKyBldGhfZmNvZV9oZHJfbGVuOwogCQltZW1zZXQoKGNoYXIgKilmY190cmFjZSwgMHhmZiwgZXRoX2Zjb2VfaGRyX2xlbik7CiAJCS8qIENvcHkgdGhlIHJlc3Qgb2YgZGF0YSBmcmFtZSAqLwogCQltZW1jcHkoKGNoYXIgKikoZmNfdHJhY2UgKyBldGhfZmNvZV9oZHJfbGVuKSwgKHZvaWQgKilmcmFtZSwKIAkJbWluX3QodTgsIGZjX3RyY19mcmFtZV9sZW4sCi0JCQkodTgpKEZDX1RSQ19TSVpFX0JZVEVTIC0gRkNfVFJDX0hFQURFUl9TSVpFKSkpOworCQkJKHU4KShGQ19UUkNfU0laRV9CWVRFUyAtIEZDX1RSQ19IRUFERVJfU0laRQorCQkJCQkJLSBldGhfZmNvZV9oZHJfbGVuKSkpOwogCX0gZWxzZSB7CiAJCW1lbWNweSgoY2hhciAqKWZjX3RyYWNlLCAodm9pZCAqKWZyYW1lLAogCQltaW5fdCh1OCwgZmNfdHJjX2ZyYW1lX2xlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYwppbmRleCBiMzMxMjcyLi5mMzU3OTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jCkBAIC0xOCwyMCArMTgsNiBAQAogICoKICAqIEFkZGVkIElTQVBOUCBzdXBwb3J0IGZvciBEVEM0MzYgYWRhcHRlcnMsCiAgKiBUaG9tYXMgU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2gKLSAqCi0gKiBBTFBIQSBSRUxFQVNFIDEuIAotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCiAvKiAKQEAgLTQwLDE0ICsyNiw2IEBACiAgKi8KIAogLyoKLSAqIE9wdGlvbnMgOgotICoKLSAqIFBBUklUWSAtIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcuICBOb3Qgc3VwcG9ydGVkLgotICoKLSAqIFNDU0kyIC0gZW5hYmxlIHN1cHBvcnQgZm9yIFNDU0ktSUkgdGFnZ2VkIHF1ZXVlaW5nLiAgVW50ZXN0ZWQuCi0gKgotICogVVNMRUVQIC0gZW5hYmxlIHN1cHBvcnQgZm9yIGRldmljZXMgdGhhdCBkb24ndCBkaXNjb25uZWN0LiAgVW50ZXN0ZWQuCi0gKgogICogVGhlIGNhcmQgaXMgZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVkIGluIG9uZSBvZiBzZXZlcmFsIHdheXMgOiAKICAqIDEuICBXaXRoIGNvbW1hbmQgbGluZSBvdmVycmlkZXMgLSBOQ1I1MzgwPXBvcnQsaXJxIG1heSBiZSAKICAqICAgICB1c2VkIG9uIHRoZSBMSUxPIGNvbW1hbmQgbGluZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuCkBAIC03OSwyNyArNTcsMjEgQEAKICAqLwogCiAvKiBzZXR0aW5ncyBmb3IgRFRDMzE4MUUgY2FyZCB3aXRoIG9ubHkgTXVzdGVrIHNjYW5uZXIgYXR0YWNoZWQgKi8KLSNkZWZpbmUgVVNMRUVQCiAjZGVmaW5lIFVTTEVFUF9QT0xMCTEKICNkZWZpbmUgVVNMRUVQX1NMRUVQCTIwCiAjZGVmaW5lIFVTTEVFUF9XQUlUTE9ORwk1MDAKIAogI2RlZmluZSBBVVRPUFJPQkVfSVJRCi0jZGVmaW5lIEFVVE9TRU5TRQotCiAKICNpZmRlZiBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzQzQwMAogI2RlZmluZSBOQ1I1M0M0MDBfUFNFVURPX0RNQSAxCiAjZGVmaW5lIFBTRVVET19ETUEKICNkZWZpbmUgTkNSNTNDNDAwCi0jZGVmaW5lIE5DUjUzODBfU1RBVFMKLSN1bmRlZiBOQ1I1MzgwX1NUQVRfTElNSVQKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAiZ19OQ1I1MzgwLmgiCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgpAQCAtMjc3LDcgKzI0OSw3IEBACiAgKglMb2Nrczogbm9uZQogICovCiAKLWludCBfX2luaXQgZ2VuZXJpY19OQ1I1MzgwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKK3N0YXRpYyBpbnQgX19pbml0IGdlbmVyaWNfTkNSNTM4MF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKIHsKIAlzdGF0aWMgaW50IGN1cnJlbnRfb3ZlcnJpZGUgPSAwOwogCWludCBjb3VudDsKQEAgLTMzNSw3ICszMDcsNyBAQAogCQkJaWYgKHBucF9pcnFfdmFsaWQoZGV2LCAwKSkKIAkJCQlvdmVycmlkZXNbY291bnRdLmlycSA9IHBucF9pcnEoZGV2LCAwKTsKIAkJCWVsc2UKLQkJCQlvdmVycmlkZXNbY291bnRdLmlycSA9IFNDU0lfSVJRX05PTkU7CisJCQkJb3ZlcnJpZGVzW2NvdW50XS5pcnEgPSBOT19JUlE7CiAJCQlpZiAocG5wX2RtYV92YWxpZChkZXYsIDApKQogCQkJCW92ZXJyaWRlc1tjb3VudF0uZG1hID0gcG5wX2RtYShkZXYsIDApOwogCQkJZWxzZQpAQCAtNDU1LDI3ICs0MjcsMjIgQEAKIAkJZWxzZQogCQkJaW5zdGFuY2UtPmlycSA9IE5DUjUzODBfcHJvYmVfaXJxKGluc3RhbmNlLCAweGZmZmYpOwogCi0JCWlmIChpbnN0YW5jZS0+aXJxICE9IFNDU0lfSVJRX05PTkUpCisJCS8qIENvbXBhdGliaWxpdHkgd2l0aCBkb2N1bWVudGVkIE5DUjUzODAga2VybmVsIHBhcmFtZXRlcnMgKi8KKwkJaWYgKGluc3RhbmNlLT5pcnEgPT0gMjU1KQorCQkJaW5zdGFuY2UtPmlycSA9IE5PX0lSUTsKKworCQlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCiAJCQlpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgZ2VuZXJpY19OQ1I1MzgwX2ludHIsCiAJCQkJCTAsICJOQ1I1MzgwIiwgaW5zdGFuY2UpKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogSVJRJWQgbm90IGZyZWUsIGludGVycnVwdHMgZGlzYWJsZWRcbiIsIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKLQkJCQlpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKKwkJCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROwogCQkJfQogCi0JCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpIHsKKwkJaWYgKGluc3RhbmNlLT5pcnEgPT0gTk9fSVJRKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQgOiBpbnRlcnJ1cHRzIG5vdCBlbmFibGVkLiBmb3IgYmV0dGVyIGludGVyYWN0aXZlIHBlcmZvcm1hbmNlLFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaSVkIDogcGxlYXNlIGp1bXBlciB0aGUgYm9hcmQgZm9yIGEgZnJlZSBJUlEuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJCX0KIAotCQlwcmludGsoS0VSTl9JTkZPICJzY3NpJWQgOiBhdCAiIFNUUlZBTChOQ1I1MzgwX21hcF9uYW1lKSAiIDB4JXgiLCBpbnN0YW5jZS0+aG9zdF9ubywgKHVuc2lnbmVkIGludCkgaW5zdGFuY2UtPk5DUjUzODBfaW5zdGFuY2VfbmFtZSk7Ci0JCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCi0JCQlwcmludGsoIiBpbnRlcnJ1cHRzIGRpc2FibGVkIik7Ci0JCWVsc2UKLQkJCXByaW50aygiIGlycSAlZCIsIGluc3RhbmNlLT5pcnEpOwotCQlwcmludGsoIiBvcHRpb25zIENBTl9RVUVVRT0lZCAgQ01EX1BFUl9MVU49JWQgcmVsZWFzZT0lZCIsIENBTl9RVUVVRSwgQ01EX1BFUl9MVU4sIEdFTkVSSUNfTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0JCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JCXByaW50aygiXG4iKTsKLQogCQkrK2N1cnJlbnRfb3ZlcnJpZGU7CiAJCSsrY291bnQ7CiAJfQpAQCAtNDgzLDE5ICs0NTAsNiBAQAogfQogCiAvKioKLSAqCWdlbmVyaWNfTkNSNTM4MF9pbmZvCS0JcmVwb3J0aW5nIHN0cmluZwotICoJQGhvc3Q6IE5DUjUzODAgdG8gcmVwb3J0IG9uCi0gKgotICoJUmVwb3J0IGRyaXZlciBpbmZvcm1hdGlvbiBmb3IgdGhlIE5DUjUzODAKLSAqLwotIAkKLWNvbnN0IGNoYXIgKmdlbmVyaWNfTkNSNTM4MF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgc3RyaW5nW10gPSAiR2VuZXJpYyBOQ1I1MzgwLzUzQzQwMCBEcml2ZXIiOwotCXJldHVybiBzdHJpbmc7Ci19Ci0KLS8qKgogICoJZ2VuZXJpY19OQ1I1MzgwX3JlbGVhc2VfcmVzb3VyY2VzCS0JZnJlZSByZXNvdXJjZXMKICAqCUBpbnN0YW5jZTogaG9zdCBhZGFwdGVyIHRvIGNsZWFuIHVwIAogICoKQEAgLTUwNCwxMiArNDU4LDEyIEBACiAgKglMb2Nrczogbm9uZQogICovCiAgCi1pbnQgZ2VuZXJpY19OQ1I1MzgwX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCk7CiAJTkNSNTM4MF9zZXR1cChpbnN0YW5jZSk7CiAJCi0JaWYgKGluc3RhbmNlLT5pcnEgIT0gU0NTSV9JUlFfTk9ORSkKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCiAJCWZyZWVfaXJxKGluc3RhbmNlLT5pcnEsIGluc3RhbmNlKTsKIAlOQ1I1MzgwX2V4aXQoaW5zdGFuY2UpOwogCkBAIC03NDEsMTYzICs2OTUsOSBAQAogIAogI2luY2x1ZGUgIk5DUjUzODAuYyIKIAotI2RlZmluZSBQUklOVFAoeCkgc2VxX3ByaW50ZihtLCB4KQotI2RlZmluZSBBTkRQICwKLQotc3RhdGljIHZvaWQgc3ByaW50X29wY29kZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBvcGNvZGUpCi17Ci0JUFJJTlRQKCIweCUwMnggIiBBTkRQIG9wY29kZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwcmludF9jb21tYW5kKHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgY2hhciAqY29tbWFuZCkKLXsKLQlpbnQgaSwgczsKLQlzcHJpbnRfb3Bjb2RlKG0sIGNvbW1hbmRbMF0pOwotCWZvciAoaSA9IDEsIHMgPSBDT01NQU5EX1NJWkUoY29tbWFuZFswXSk7IGkgPCBzOyArK2kpCi0JCVBSSU5UUCgiJTAyeCAiIEFORFAgY29tbWFuZFtpXSk7Ci0JUFJJTlRQKCJcbiIpOwotfQotCi0vKioKLSAqCXNwcmludGZfU2NzaV9DbW5kCS0JcHJpbnQgYSBzY3NpIGNvbW1hbmQKLSAqCUBtOiBzZXFfZmlsIHRvIHByaW50IGludG8KLSAqCUBjbWQ6IFNDU0kgY29tbWFuZCBibG9jawotICoJCi0gKglQcmludCBvdXQgdGhlIHRhcmdldCBhbmQgY29tbWFuZCBkYXRhIGluIGhleAotICovCi0KLXN0YXRpYyB2b2lkIHNwcmludF9TY3NpX0NtbmQoc3RydWN0IHNlcV9maWxlICptLCBTY3NpX0NtbmQgKiBjbWQpCi17Ci0JUFJJTlRQKCJob3N0IG51bWJlciAlZCBkZXN0aW5hdGlvbiB0YXJnZXQgJWQsIGx1biAlbGx1XG4iIEFORFAgY21kLT5kZXZpY2UtPmhvc3QtPmhvc3Rfbm8gQU5EUCBjbWQtPmRldmljZS0+aWQgQU5EUCBjbWQtPmRldmljZS0+bHVuKTsKLQlQUklOVFAoIiAgICAgICAgY29tbWFuZCA9ICIpOwotCXNwcmludF9jb21tYW5kKG0sIGNtZC0+Y21uZCk7Ci19Ci0KLS8qKgotICoJZ2VuZXJpY19OQ1I1MzgwX3Byb2NfaW5mbwktCS9wcm9jIGZvciBOQ1I1MzgwIGRyaXZlcgotICoJQGJ1ZmZlcjogYnVmZmVyIHRvIHByaW50IGludG8KLSAqCUBzdGFydDogc3RhcnQgcG9zaXRpb24KLSAqCUBvZmZzZXQ6IG9mZnNldCBpbnRvIGJ1ZmZlcgotICoJQGxlbjogbGVuZ3RoCi0gKglAaG9zdG5vOiBpbnN0YW5jZSB0byBhZmZlY3QKLSAqCUBpbm91dDogcmVhZC93cml0ZQotICoKLSAqCVByb3ZpZGUgdGhlIHByb2NmcyBpbmZvcm1hdGlvbiBmb3IgdGhlIDUzODAgY29udHJvbGxlci4gV2UgZmlsbAotICoJdGhpcyB3aXRoIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW5jbHVkaW5nIHRoZSBjb21tYW5kcwotICoJYmVpbmcgZXhlY3V0ZWQsIGRpc2Nvbm5lY3RlZCBjb21tYW5kIHF1ZXVlIGFuZCB0aGUgc3RhdGlzdGljYWwKLSAqCWRhdGEKLSAqCi0gKglMb2NrczogZ2xvYmFsIGNsaS9sb2NrIGZvciBxdWV1ZSB3YWxrCi0gKi8KLSAKLXN0YXRpYyBpbnQgZ2VuZXJpY19OQ1I1MzgwX3Nob3dfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfcHRyKQotewotCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciBzdGF0dXM7Ci0JaW50IGk7Ci0JU2NzaV9DbW5kICpwdHI7Ci0Jc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhOwotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldjsKLSNlbmRpZgotCi0JTkNSNTM4MF9zZXR1cChzY3NpX3B0cik7Ci0JaG9zdGRhdGEgPSAoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgc2NzaV9wdHItPmhvc3RkYXRhOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoc2NzaV9wdHItPmhvc3RfbG9jaywgZmxhZ3MpOwotCVBSSU5UUCgiU0NTSSBob3N0IG51bWJlciAlZCA6ICVzXG4iIEFORFAgc2NzaV9wdHItPmhvc3Rfbm8gQU5EUCBzY3NpX3B0ci0+aG9zdHQtPm5hbWUpOwotCVBSSU5UUCgiR2VuZXJpYyBOQ1I1MzgwIGRyaXZlciB2ZXJzaW9uICVkXG4iIEFORFAgR0VORVJJQ19OQ1I1MzgwX1BVQkxJQ19SRUxFQVNFKTsKLQlQUklOVFAoIk5DUjUzODAgY29yZSB2ZXJzaW9uICVkXG4iIEFORFAgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0jaWZkZWYgTkNSNTNDNDAwCi0JUFJJTlRQKCJOQ1I1M0M0MDAgZXh0ZW5zaW9uIHZlcnNpb24gJWRcbiIgQU5EUCBOQ1I1M0M0MDBfUFVCTElDX1JFTEVBU0UpOwotCVBSSU5UUCgiTkNSNTNDNDAwIGNhcmQlcyBkZXRlY3RlZFxuIiBBTkRQKCgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikgc2NzaV9wdHItPmhvc3RkYXRhKS0+ZmxhZ3MgJiBGTEFHX05DUjUzQzQwMCkgPyAiIiA6ICIgbm90Iik7Ci0jIGlmIE5DUjUzQzQwMF9QU0VVRE9fRE1BCi0JUFJJTlRQKCJOQ1I1M0M0MDAgcHNldWRvIERNQSB1c2VkXG4iKTsKLSMgZW5kaWYKLSNlbHNlCi0JUFJJTlRQKCJOTyBOQ1I1M0M0MDAgZHJpdmVyIGV4dGVuc2lvbnNcbiIpOwotI2VuZGlmCi0JUFJJTlRQKCJVc2luZyAlcyBtYXBwaW5nIGF0ICVzIDB4JWx4LCAiIEFORFAgU1RSVkFMKE5DUjUzODBfbWFwX2NvbmZpZykgQU5EUCBTVFJWQUwoTkNSNTM4MF9tYXBfbmFtZSkgQU5EUCBzY3NpX3B0ci0+TkNSNTM4MF9pbnN0YW5jZV9uYW1lKTsKLQlpZiAoc2NzaV9wdHItPmlycSA9PSBTQ1NJX0lSUV9OT05FKQotCQlQUklOVFAoIm5vIGludGVycnVwdFxuIik7Ci0JZWxzZQotCQlQUklOVFAoIm9uIGludGVycnVwdCAlZFxuIiBBTkRQIHNjc2lfcHRyLT5pcnEpOwotCi0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCWlmIChob3N0ZGF0YS0+Y29ubmVjdGVkIHx8IGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSB8fCBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKQotCQlQUklOVFAoIlRoZXJlIGFyZSBjb21tYW5kcyBwZW5kaW5nLCB0cmFuc2ZlciByYXRlcyBtYXkgYmUgY3J1ZFxuIik7Ci0JaWYgKGhvc3RkYXRhLT5wZW5kaW5ncikKLQkJUFJJTlRQKCIgICVkIHBlbmRpbmcgcmVhZHMiIEFORFAgaG9zdGRhdGEtPnBlbmRpbmdyKTsKLQlpZiAoaG9zdGRhdGEtPnBlbmRpbmd3KQotCQlQUklOVFAoIiAgJWQgcGVuZGluZyB3cml0ZXMiIEFORFAgaG9zdGRhdGEtPnBlbmRpbmd3KTsKLQlpZiAoaG9zdGRhdGEtPnBlbmRpbmdyIHx8IGhvc3RkYXRhLT5wZW5kaW5ndykKLQkJUFJJTlRQKCJcbiIpOwotCXNob3N0X2Zvcl9lYWNoX2RldmljZShkZXYsIHNjc2lfcHRyKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYnIgPSBob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtkZXYtPmlkXTsKLQkJdW5zaWduZWQgbG9uZyBidyA9IGhvc3RkYXRhLT5ieXRlc193cml0ZVtkZXYtPmlkXTsKLQkJbG9uZyB0ciA9IGhvc3RkYXRhLT50aW1lX3JlYWRbZGV2LT5pZF0gLyBIWjsKLQkJbG9uZyB0dyA9IGhvc3RkYXRhLT50aW1lX3dyaXRlW2Rldi0+aWRdIC8gSFo7Ci0KLQkJUFJJTlRQKCIgIFQ6JWQgJXMgIiBBTkRQIGRldi0+aWQgQU5EUCBzY3NpX2RldmljZV90eXBlKGRldi0+dHlwZSkpOwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQkJaWYgKGRldi0+dmVuZG9yW2ldID49IDB4MjApCi0JCQkJc2VxX3B1dGMobSwgZGV2LT52ZW5kb3JbaV0pOwotCQlzZXFfcHV0YyhtLCAnICcpOwotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJCWlmIChkZXYtPm1vZGVsW2ldID49IDB4MjApCi0JCQkJc2VxX3B1dGMobSwgZGV2LT5tb2RlbFtpXSk7Ci0JCXNlcV9wdXRjKG0sICcgJyk7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQlpZiAoZGV2LT5yZXZbaV0gPj0gMHgyMCkKLQkJCQlzZXFfcHV0YyhtLCBkZXYtPnJldltpXSk7Ci0JCXNlcV9wdXRjKG0sICcgJyk7Ci0KLQkJUFJJTlRQKCJcbiUxMGxkIGtiIHJlYWQgICAgaW4gJTVsZCBzZWNzIiBBTkRQIGJyIC8gMTAyNCBBTkRQIHRyKTsKLQkJaWYgKHRyKQotCQkJUFJJTlRQKCIgQCAlNWxkIGJwcyIgQU5EUCBiciAvIHRyKTsKLQotCQlQUklOVFAoIlxuJTEwbGQga2Igd3JpdHRlbiBpbiAlNWxkIHNlY3MiIEFORFAgYncgLyAxMDI0IEFORFAgdHcpOwotCQlpZiAodHcpCi0JCQlQUklOVFAoIiBAICU1bGQgYnBzIiBBTkRQIGJ3IC8gdHcpOwotCQlQUklOVFAoIlxuIik7Ci0JfQotI2VuZGlmCi0KLQlzdGF0dXMgPSBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRyk7Ci0JaWYgKCEoc3RhdHVzICYgU1JfUkVRKSkKLQkJUFJJTlRQKCJSRVEgbm90IGFzc2VydGVkLCBwaGFzZSB1bmtub3duLlxuIik7Ci0JZWxzZSB7Ci0JCWZvciAoaSA9IDA7IChwaGFzZXNbaV0udmFsdWUgIT0gUEhBU0VfVU5LTk9XTikgJiYgKHBoYXNlc1tpXS52YWx1ZSAhPSAoc3RhdHVzICYgUEhBU0VfTUFTSykpOyArK2kpOwotCQlQUklOVFAoIlBoYXNlICVzXG4iIEFORFAgcGhhc2VzW2ldLm5hbWUpOwotCX0KLQotCWlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCQlQUklOVFAoIk5vIGN1cnJlbnRseSBjb25uZWN0ZWQgY29tbWFuZFxuIik7Ci0JfSBlbHNlIHsKLQkJc3ByaW50X1Njc2lfQ21uZChtLCAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQpOwotCX0KLQotCVBSSU5UUCgiaXNzdWVfcXVldWVcbiIpOwotCi0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSAoU2NzaV9DbW5kICopIHB0ci0+aG9zdF9zY3JpYmJsZSkKLQkJc3ByaW50X1Njc2lfQ21uZChtLCBwdHIpOwotCi0JUFJJTlRQKCJkaXNjb25uZWN0ZWRfcXVldWVcbiIpOwotCi0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsgcHRyID0gKFNjc2lfQ21uZCAqKSBwdHItPmhvc3Rfc2NyaWJibGUpCi0JCXNwcmludF9TY3NpX0NtbmQobSwgcHRyKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NzaV9wdHItPmhvc3RfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0jdW5kZWYgUFJJTlRQCi0jdW5kZWYgQU5EUAotCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnNob3dfaW5mbyAgICAgIAk9IGdlbmVyaWNfTkNSNTM4MF9zaG93X2luZm8sCi0JLm5hbWUgICAgICAgICAgIAk9ICJHZW5lcmljIE5DUjUzODAvTkNSNTNDNDAwIFNjc2kgRHJpdmVyIiwKKwkubmFtZSAgICAgICAgICAgCT0gIkdlbmVyaWMgTkNSNTM4MC9OQ1I1M0M0MDAgU0NTSSIsCiAJLmRldGVjdCAgICAgICAgIAk9IGdlbmVyaWNfTkNSNTM4MF9kZXRlY3QsCiAJLnJlbGVhc2UgICAgICAgIAk9IGdlbmVyaWNfTkNSNTM4MF9yZWxlYXNlX3Jlc291cmNlcywKIAkuaW5mbyAgICAgICAgICAgCT0gZ2VuZXJpY19OQ1I1MzgwX2luZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmggYi9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmgKaW5kZXggNzAzYWRmNy4uYmVhMWEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuaApAQCAtOSwyOCArOSwxMSBAQAogICoKICAqIE5DUjUzQzQwMCBleHRlbnNpb25zIChjKSAxOTk0LDE5OTUsMTk5NiwgS2V2aW4gTGVudGluCiAgKiAgICBLLkxlbnRpbkBjcy5tb25hc2guZWR1LmF1Ci0gKgotICogQUxQSEEgUkVMRUFTRSAxLiAKLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQgCi0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0CiAgKi8KIAogI2lmbmRlZiBHRU5FUklDX05DUjUzODBfSAogI2RlZmluZSBHRU5FUklDX05DUjUzODBfSAogCi0KLSNkZWZpbmUgR0VORVJJQ19OQ1I1MzgwX1BVQkxJQ19SRUxFQVNFIDEKLQogI2lmZGVmIE5DUjUzQzQwMAogI2RlZmluZSBCSU9TUEFSQU0KICNkZWZpbmUgTkNSNTM4MF9CSU9TUEFSQU0gZ2VuZXJpY19OQ1I1MzgwX2Jpb3NwYXJhbQpAQCAtMzksMTIgKzIyLDYgQEAKICNlbmRpZgogCiAjaWZuZGVmIEFTTQotc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfYWJvcnQoU2NzaV9DbW5kICopOwotc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7Ci1zdGF0aWMgaW50IGdlbmVyaWNfTkNSNTM4MF9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IGdlbmVyaWNfTkNSNTM4MF9idXNfcmVzZXQoU2NzaV9DbW5kICopOwotc3RhdGljIGNvbnN0IGNoYXIqIGdlbmVyaWNfTkNSNTM4MF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKik7CiAKICNpZm5kZWYgQ01EX1BFUl9MVU4KICNkZWZpbmUgQ01EX1BFUl9MVU4gMgpAQCAtMTE4LDcgKzk1LDggQEAKICNkZWZpbmUgTkNSNTM4MF9idXNfcmVzZXQgZ2VuZXJpY19OQ1I1MzgwX2J1c19yZXNldAogI2RlZmluZSBOQ1I1MzgwX3ByZWFkIGdlbmVyaWNfTkNSNTM4MF9wcmVhZAogI2RlZmluZSBOQ1I1MzgwX3B3cml0ZSBnZW5lcmljX05DUjUzODBfcHdyaXRlCi0jZGVmaW5lIE5DUjUzODBfcHJvY19pbmZvIG5vdHlldF9nZW5lcmljX3Byb2NfaW5mbworI2RlZmluZSBOQ1I1MzgwX2luZm8gZ2VuZXJpY19OQ1I1MzgwX2luZm8KKyNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8gZ2VuZXJpY19OQ1I1MzgwX3Nob3dfaW5mbwogCiAjZGVmaW5lIEJPQVJEX05DUjUzODAJMAogI2RlZmluZSBCT0FSRF9OQ1I1M0M0MDAJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGguYyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKaW5kZXggMGYxYWUxMy4uNzFlMTM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dkdGguYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCkBAIC0yMTU5LDcgKzIxNTksNyBAQAogICAgICAgICAgICAgICBjYXNlIFZFUklGWToKICAgICAgICAgICAgICAgY2FzZSBTVEFSVF9TVE9QOgogICAgICAgICAgICAgICBjYXNlIE1PREVfU0VOU0U6Ci0gICAgICAgICAgICAgIGNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisgICAgICAgICAgICAgIGNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAgICAgICAgICAgICAgICAgVFJBQ0UoKCJjYWNoZSBjbWQgJXgvJXgvJXgvJXgvJXgvJXhcbiIsbnNjcC0+Y21uZFswXSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNjcC0+Y21uZFsxXSxuc2NwLT5jbW5kWzJdLG5zY3AtPmNtbmRbM10sCiAgICAgICAgICAgICAgICAgICAgICAgIG5zY3AtPmNtbmRbNF0sbnNjcC0+Y21uZFs1XSkpOwpAQCAtMjM5MSw3ICsyMzkxLDcgQEAKICAgICAgICAgZ2R0aF9jb3B5X2ludGVybmFsX2RhdGEoaGEsIHNjcCwgKGNoYXIqKSZyZGMsIHNpemVvZihnZHRoX3JkY2FwX2RhdGEpKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICAgIGNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisgICAgICBjYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogICAgICAgICBpZiAoKHNjcC0+Y21uZFsxXSAmIDB4MWYpID09IFNBSV9SRUFEX0NBUEFDSVRZXzE2ICYmCiAgICAgICAgICAgICAoaGEtPmNhY2hlX2ZlYXQgJiBHRFRfNjRCSVQpKSB7CiAgICAgICAgICAgICBnZHRoX3JkY2FwMTZfZGF0YSByZGMxNjsKQEAgLTQ2NjEsNyArNDY2MSw2IEBACiAvKiBjb25maWd1cmUgbHVuICovCiBzdGF0aWMgaW50IGdkdGhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLSAgICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBzZGV2LT5ob3N0LT5jbWRfcGVyX2x1bik7CiAgICAgc2Rldi0+c2tpcF9tc19wYWdlXzNmID0gMTsKICAgICBzZGV2LT5za2lwX21zX3BhZ2VfOCA9IDE7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IDZkZTgwZTMuLjhiYjE3M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC00MTgsNyArNDE4LDYgQEAKIAlzaG9zdC0+Y21kX3Blcl9sdW4gPSBzaHQtPmNtZF9wZXJfbHVuOwogCXNob3N0LT51bmNoZWNrZWRfaXNhX2RtYSA9IHNodC0+dW5jaGVja2VkX2lzYV9kbWE7CiAJc2hvc3QtPnVzZV9jbHVzdGVyaW5nID0gc2h0LT51c2VfY2x1c3RlcmluZzsKLQlzaG9zdC0+b3JkZXJlZF90YWcgPSBzaHQtPm9yZGVyZWRfdGFnOwogCXNob3N0LT5ub193cml0ZV9zYW1lID0gc2h0LT5ub193cml0ZV9zYW1lOwogCiAJaWYgKHNob3N0X2VoX2RlYWRsaW5lID09IC0xIHx8ICFzaHQtPmVoX2hvc3RfcmVzZXRfaGFuZGxlcikKQEAgLTQ4NSw4ICs0ODQsOCBAQAogCQkJCQkgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLAogCQkJCQkgICAxLCBzaG9zdC0+aG9zdF9ubyk7CiAJaWYgKCFzaG9zdC0+dG1mX3dvcmtfcSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IGZhaWxlZCB0byBjcmVhdGUgdG1mIHdvcmtxXG4iLAotCQkgICAgICAgc2hvc3QtPmhvc3Rfbm8pOworCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBzaG9zdCwKKwkJCSAgICAgImZhaWxlZCB0byBjcmVhdGUgdG1mIHdvcmtxXG4iKTsKIAkJZ290byBmYWlsX2t0aHJlYWQ7CiAJfQogCXNjc2lfcHJvY19ob3N0ZGlyX2FkZChzaG9zdC0+aG9zdHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2EuYyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKaW5kZXggY2VmNWQ0OS4uNmJiNDYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2EuYworKysgYi9kcml2ZXJzL3Njc2kvaHBzYS5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS1kZWZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSAiaHBzYV9jbWQuaCIKQEAgLTEwMyw3ICsxMDQsNiBAQAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTSCwgICAgIDB4MTAzQywgMHgxOTIyfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0gsICAgICAweDEwM0MsIDB4MTkyM30sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NILCAgICAgMHgxMDNDLCAweDE5MjR9LAotCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTSCwgICAgIDB4MTAzQywgMHgxOTI1fSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0gsICAgICAweDEwM0MsIDB4MTkyNn0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NILCAgICAgMHgxMDNDLCAweDE5Mjh9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTSCwgICAgIDB4MTAzQywgMHgxOTI5fSwKQEAgLTE0OSw2ICsxNDksNyBAQAogCXsweDMyNDkxMDNDLCAiU21hcnQgQXJyYXkgUDgxMiIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjRBMTAzQywgIlNtYXJ0IEFycmF5IFA3MTJtIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNEIxMDNDLCAiU21hcnQgQXJyYXkgUDcxMW0iLCAmU0E1X2FjY2Vzc30sCisJezB4MzIzMzEwM0MsICJIUCBTdG9yYWdlV29ya3MgMTIxMG0iLCAmU0E1X2FjY2Vzc30sIC8qIGFsaWFzIG9mIDMzM2YgKi8KIAl7MHgzMzUwMTAzQywgIlNtYXJ0IEFycmF5IFAyMjIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzM1MTEwM0MsICJTbWFydCBBcnJheSBQNDIwIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMzNTIxMDNDLCAiU21hcnQgQXJyYXkgUDQyMSIsICZTQTVfYWNjZXNzfSwKQEAgLTE5MywxMiArMTk0LDEzIEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHJfaW50eChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGlycXJldHVybl90IGRvX2hwc2FfaW50cl9tc2koaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyBpbnQgaHBzYV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKTsKK3N0YXRpYyBpbnQgaHBzYV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBzdGF0aWMgdm9pZCBsb2NrX2FuZF9zdGFydF9pbyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIHN0YXRpYyB2b2lkIHN0YXJ0X2lvKHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19DT01QQVQKLXN0YXRpYyBpbnQgaHBzYV9jb21wYXRfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLAorCXZvaWQgX191c2VyICphcmcpOwogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGNtZF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CkBAIC0yMTQsOCArMjE2LDYgQEAKIHN0YXRpYyB2b2lkIGhwc2Ffc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICopOwogc3RhdGljIGludCBocHNhX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2gsCiAJdW5zaWduZWQgbG9uZyBlbGFwc2VkX3RpbWUpOwotc3RhdGljIGludCBocHNhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JaW50IHFkZXB0aCwgaW50IHJlYXNvbik7CiAKIHN0YXRpYyBpbnQgaHBzYV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kKTsKIHN0YXRpYyBpbnQgaHBzYV9laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2ljbWQpOwpAQCAtMjc0LDEyICsyNzQsMTIgQEAKIAkJCSJkZXRlY3RlZCwgY29tbWFuZCByZXRyaWVkXG4iLCBoLT5jdGxyKTsKIAkJYnJlYWs7CiAJY2FzZSBMVU5fRkFJTEVEOgotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCBIUFNBICIlZDogTFVOIGZhaWx1cmUgIgotCQkJImRldGVjdGVkLCBhY3Rpb24gcmVxdWlyZWRcbiIsIGgtPmN0bHIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJSFBTQSAiJWQ6IExVTiBmYWlsdXJlIGRldGVjdGVkXG4iLCBoLT5jdGxyKTsKIAkJYnJlYWs7CiAJY2FzZSBSRVBPUlRfTFVOU19DSEFOR0VEOgotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCBIUFNBICIlZDogcmVwb3J0IExVTiBkYXRhICIKLQkJCSJjaGFuZ2VkLCBhY3Rpb24gcmVxdWlyZWRcbiIsIGgtPmN0bHIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJSFBTQSAiJWQ6IHJlcG9ydCBMVU4gZGF0YSBjaGFuZ2VkXG4iLCBoLT5jdGxyKTsKIAkvKgogCSAqIE5vdGU6IHRoaXMgUkVQT1JUX0xVTlNfQ0hBTkdFRCBjb25kaXRpb24gb25seSBvY2N1cnMgb24gdGhlIGV4dGVybmFsCiAJICogdGFyZ2V0IChhcnJheSkgZGV2aWNlcy4KQEAgLTM5Miw3ICszOTIsOCBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gc2hvc3RfdG9faGJhKHNob3N0KTsKIAotCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJWRcbiIsIGgtPmNvbW1hbmRzX291dHN0YW5kaW5nKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiVkXG4iLAorCQkJYXRvbWljX3JlYWQoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGhvc3Rfc2hvd190cmFuc3BvcnRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC02NzAsNyArNjcxLDcgQEAKIAkucXVldWVjb21tYW5kCQk9IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kLAogCS5zY2FuX3N0YXJ0CQk9IGhwc2Ffc2Nhbl9zdGFydCwKIAkuc2Nhbl9maW5pc2hlZAkJPSBocHNhX3NjYW5fZmluaXNoZWQsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGhwc2FfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkudGhpc19pZAkJPSAtMSwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLmVoX2Fib3J0X2hhbmRsZXIJPSBocHNhX2VoX2Fib3J0X2hhbmRsZXIsCkBAIC02OTgsNyArNjk5LDYgQEAKIHsKIAl1MzIgYTsKIAlzdHJ1Y3QgcmVwbHlfcXVldWVfYnVmZmVyICpycSA9ICZoLT5yZXBseV9xdWV1ZVtxXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGgtPnRyYW5zTWV0aG9kICYgQ0ZHVEJMX1RyYW5zX2lvX2FjY2VsMSkKIAkJcmV0dXJuIGgtPmFjY2Vzcy5jb21tYW5kX2NvbXBsZXRlZChoLCBxKTsKQEAgLTcwOSw5ICs3MDksNyBAQAogCWlmICgocnEtPmhlYWRbcnEtPmN1cnJlbnRfZW50cnldICYgMSkgPT0gcnEtPndyYXBhcm91bmQpIHsKIAkJYSA9IHJxLT5oZWFkW3JxLT5jdXJyZW50X2VudHJ5XTsKIAkJcnEtPmN1cnJlbnRfZW50cnkrKzsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmctLTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCQlhdG9taWNfZGVjKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAJfSBlbHNlIHsKIAkJYSA9IEZJRk9fRU1QVFk7CiAJfQpAQCAtMTUwMCwyMiArMTQ5OCwyMiBAQAogewogCXN0cnVjdCBTR0Rlc2NyaXB0b3IgKmNoYWluX3NnLCAqY2hhaW5fYmxvY2s7CiAJdTY0IHRlbXA2NDsKKwl1MzIgY2hhaW5fbGVuOwogCiAJY2hhaW5fc2cgPSAmYy0+U0dbaC0+bWF4X2NtZF9zZ19lbnRyaWVzIC0gMV07CiAJY2hhaW5fYmxvY2sgPSBoLT5jbWRfc2dfbGlzdFtjLT5jbWRpbmRleF07Ci0JY2hhaW5fc2ctPkV4dCA9IEhQU0FfU0dfQ0hBSU47Ci0JY2hhaW5fc2ctPkxlbiA9IHNpemVvZigqY2hhaW5fc2cpICoKKwljaGFpbl9zZy0+RXh0ID0gY3B1X3RvX2xlMzIoSFBTQV9TR19DSEFJTik7CisJY2hhaW5fbGVuID0gc2l6ZW9mKCpjaGFpbl9zZykgKgogCQkoYy0+SGVhZGVyLlNHVG90YWwgLSBoLT5tYXhfY21kX3NnX2VudHJpZXMpOwotCXRlbXA2NCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGNoYWluX2Jsb2NrLCBjaGFpbl9zZy0+TGVuLAorCWNoYWluX3NnLT5MZW4gPSBjcHVfdG9fbGUzMihjaGFpbl9sZW4pOworCXRlbXA2NCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGNoYWluX2Jsb2NrLCBjaGFpbl9sZW4sCiAJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZoLT5wZGV2LT5kZXYsIHRlbXA2NCkpIHsKIAkJLyogcHJldmVudCBzdWJzZXF1ZW50IHVubWFwcGluZyAqLwotCQljaGFpbl9zZy0+QWRkci5sb3dlciA9IDA7Ci0JCWNoYWluX3NnLT5BZGRyLnVwcGVyID0gMDsKKwkJY2hhaW5fc2ctPkFkZHIgPSBjcHVfdG9fbGU2NCgwKTsKIAkJcmV0dXJuIC0xOwogCX0KLQljaGFpbl9zZy0+QWRkci5sb3dlciA9ICh1MzIpICh0ZW1wNjQgJiAweDBGRkZGRkZGRlVMTCk7Ci0JY2hhaW5fc2ctPkFkZHIudXBwZXIgPSAodTMyKSAoKHRlbXA2NCA+PiAzMikgJiAweDBGRkZGRkZGRlVMTCk7CisJY2hhaW5fc2ctPkFkZHIgPSBjcHVfdG9fbGU2NCh0ZW1wNjQpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTIzLDE1ICsxNTIxLDEzIEBACiAJc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewogCXN0cnVjdCBTR0Rlc2NyaXB0b3IgKmNoYWluX3NnOwotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CiAKLQlpZiAoYy0+SGVhZGVyLlNHVG90YWwgPD0gaC0+bWF4X2NtZF9zZ19lbnRyaWVzKQorCWlmIChsZTE2X3RvX2NwdShjLT5IZWFkZXIuU0dUb3RhbCkgPD0gaC0+bWF4X2NtZF9zZ19lbnRyaWVzKQogCQlyZXR1cm47CiAKIAljaGFpbl9zZyA9ICZjLT5TR1toLT5tYXhfY21kX3NnX2VudHJpZXMgLSAxXTsKLQl0ZW1wNjQudmFsMzIubG93ZXIgPSBjaGFpbl9zZy0+QWRkci5sb3dlcjsKLQl0ZW1wNjQudmFsMzIudXBwZXIgPSBjaGFpbl9zZy0+QWRkci51cHBlcjsKLQlwY2lfdW5tYXBfc2luZ2xlKGgtPnBkZXYsIHRlbXA2NC52YWwsIGNoYWluX3NnLT5MZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCXBjaV91bm1hcF9zaW5nbGUoaC0+cGRldiwgbGU2NF90b19jcHUoY2hhaW5fc2ctPkFkZHIpLAorCQkJbGUzMl90b19jcHUoY2hhaW5fc2ctPkxlbiksIFBDSV9ETUFfVE9ERVZJQ0UpOwogfQogCiAKQEAgLTE3MzIsOCArMTcyOCw3IEBACiAJCXN0cnVjdCBpb19hY2NlbDFfY21kICpjID0gJmgtPmlvYWNjZWxfY21kX3Bvb2xbY3AtPmNtZGluZGV4XTsKIAkJY3AtPkhlYWRlci5TR0xpc3QgPSBjcC0+SGVhZGVyLlNHVG90YWwgPSBzY3NpX3NnX2NvdW50KGNtZCk7CiAJCWNwLT5SZXF1ZXN0LkNEQkxlbiA9IGMtPmlvX2ZsYWdzICYgSU9BQ0NFTDFfSU9GTEFHU19DREJMRU5fTUFTSzsKLQkJY3AtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5UYWcubG93ZXI7Ci0JCWNwLT5IZWFkZXIuVGFnLnVwcGVyID0gYy0+VGFnLnVwcGVyOworCQljcC0+SGVhZGVyLnRhZyA9IGMtPnRhZzsKIAkJbWVtY3B5KGNwLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgYy0+Q0lTU19MVU4sIDgpOwogCQltZW1jcHkoY3AtPlJlcXVlc3QuQ0RCLCBjLT5DREIsIGNwLT5SZXF1ZXN0LkNEQkxlbik7CiAKQEAgLTE3NjMsNzIgKzE3NTgsMTMgQEAKIAkJCS8qIEdldCBhZGRpdGlvbiBzZW5zZSBjb2RlIHF1YWxpZmllciAqLwogCQkJYXNjcSA9IGVpLT5TZW5zZUluZm9bMTNdOwogCQl9Ci0KIAkJaWYgKGVpLT5TY3NpU3RhdHVzID09IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikgewotCQkJaWYgKGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihoLCBjcCkpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoc2Vuc2Vfa2V5ID09IElMTEVHQUxfUkVRVUVTVCkgewotCQkJCS8qCi0JCQkJICogU0NTSSBSRVBPUlRfTFVOUyBpcyBjb21tb25seSB1bnN1cHBvcnRlZCBvbgotCQkJCSAqIFNtYXJ0IEFycmF5LiAgU3VwcHJlc3Mgbm9pc3kgY29tcGxhaW50LgotCQkJCSAqLwotCQkJCWlmIChjcC0+UmVxdWVzdC5DREJbMF0gPT0gUkVQT1JUX0xVTlMpCi0JCQkJCWJyZWFrOwotCi0JCQkJLyogSWYgQVNDL0FTQ1EgaW5kaWNhdGUgTG9naWNhbCBVbml0Ci0JCQkJICogTm90IFN1cHBvcnRlZCBjb25kaXRpb24sCi0JCQkJICovCi0JCQkJaWYgKChhc2MgPT0gMHgyNSkgJiYgKGFzY3EgPT0gMHgwKSkgewotCQkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgotCQkJCQkJImhhcyBjaGVjayBjb25kaXRpb25cbiIsIGNwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoc2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSkgewotCQkJCS8qIElmIFNlbnNlIGlzIE5vdCBSZWFkeSwgTG9naWNhbCBVbml0Ci0JCQkJICogTm90IHJlYWR5LCBNYW51YWwgSW50ZXJ2ZW50aW9uCi0JCQkJICogcmVxdWlyZWQKLQkJCQkgKi8KLQkJCQlpZiAoKGFzYyA9PSAweDA0KSAmJiAoYXNjcSA9PSAweDAzKSkgewotCQkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgotCQkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IHVuaXQgIgotCQkJCQkJIm5vdCByZWFkeSwgbWFudWFsICIKLQkJCQkJCSJpbnRlcnZlbnRpb24gcmVxdWlyZWRcbiIsIGNwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQogCQkJaWYgKHNlbnNlX2tleSA9PSBBQk9SVEVEX0NPTU1BTkQpIHsKLQkJCQkvKiBBYm9ydGVkIGNvbW1hbmQgaXMgcmV0cnlhYmxlICovCi0JCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwICIKLQkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IGFib3J0ZWQgY29tbWFuZDogIgotCQkJCQkiQVNDOiAweCV4LCBBU0NROiAweCV4XG4iLAotCQkJCQljcCwgYXNjLCBhc2NxKTsKIAkJCQljbWQtPnJlc3VsdCB8PSBESURfU09GVF9FUlJPUiA8PCAxNjsKIAkJCQlicmVhazsKIAkJCX0KLQkJCS8qIE11c3QgYmUgc29tZSBvdGhlciB0eXBlIG9mIGNoZWNrIGNvbmRpdGlvbiAqLwotCQkJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiY3AgJXAgaGFzIGNoZWNrIGNvbmRpdGlvbjogIgotCQkJCQkidW5rbm93biB0eXBlOiAiCi0JCQkJCSJTZW5zZTogMHgleCwgQVNDOiAweCV4LCBBU0NROiAweCV4LCAiCi0JCQkJCSJSZXR1cm5pbmcgcmVzdWx0OiAweCV4LCAiCi0JCQkJCSJjbWQ9WyUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCi0JCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCi0JCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhdXG4iLAotCQkJCQljcCwgc2Vuc2Vfa2V5LCBhc2MsIGFzY3EsCi0JCQkJCWNtZC0+cmVzdWx0LAotCQkJCQljbWQtPmNtbmRbMF0sIGNtZC0+Y21uZFsxXSwKLQkJCQkJY21kLT5jbW5kWzJdLCBjbWQtPmNtbmRbM10sCi0JCQkJCWNtZC0+Y21uZFs0XSwgY21kLT5jbW5kWzVdLAotCQkJCQljbWQtPmNtbmRbNl0sIGNtZC0+Y21uZFs3XSwKLQkJCQkJY21kLT5jbW5kWzhdLCBjbWQtPmNtbmRbOV0sCi0JCQkJCWNtZC0+Y21uZFsxMF0sIGNtZC0+Y21uZFsxMV0sCi0JCQkJCWNtZC0+Y21uZFsxMl0sIGNtZC0+Y21uZFsxM10sCi0JCQkJCWNtZC0+Y21uZFsxNF0sIGNtZC0+Y21uZFsxNV0pOwogCQkJYnJlYWs7CiAJCX0KLQotCiAJCS8qIFByb2JsZW0gd2FzIG5vdCBhIGNoZWNrIGNvbmRpdGlvbgogCQkgKiBQYXNzIGl0IHVwIHRvIHRoZSB1cHBlciBsYXllcnMuLi4KIAkJICovCkBAIC0xOTM0LDE0ICsxODcwLDExIEBACiAJc3RydWN0IENvbW1hbmRMaXN0ICpjLCBpbnQgc2dfdXNlZCwgaW50IGRhdGFfZGlyZWN0aW9uKQogewogCWludCBpOwotCXVuaW9uIHU2NGJpdCBhZGRyNjQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2dfdXNlZDsgaSsrKSB7Ci0JCWFkZHI2NC52YWwzMi5sb3dlciA9IGMtPlNHW2ldLkFkZHIubG93ZXI7Ci0JCWFkZHI2NC52YWwzMi51cHBlciA9IGMtPlNHW2ldLkFkZHIudXBwZXI7Ci0JCXBjaV91bm1hcF9zaW5nbGUocGRldiwgKGRtYV9hZGRyX3QpIGFkZHI2NC52YWwsIGMtPlNHW2ldLkxlbiwKLQkJCWRhdGFfZGlyZWN0aW9uKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IHNnX3VzZWQ7IGkrKykKKwkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCAoZG1hX2FkZHJfdCkgbGU2NF90b19jcHUoYy0+U0dbaV0uQWRkciksCisJCQkJbGUzMl90b19jcHUoYy0+U0dbaV0uTGVuKSwKKwkJCQlkYXRhX2RpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyBpbnQgaHBzYV9tYXBfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtMTk1NCwyNSArMTg4NywyMiBAQAogCiAJaWYgKGJ1ZmxlbiA9PSAwIHx8IGRhdGFfZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkgewogCQljcC0+SGVhZGVyLlNHTGlzdCA9IDA7Ci0JCWNwLT5IZWFkZXIuU0dUb3RhbCA9IDA7CisJCWNwLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KDApOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlhZGRyNjQgPSAodTY0KSBwY2lfbWFwX3NpbmdsZShwZGV2LCBidWYsIGJ1ZmxlbiwgZGF0YV9kaXJlY3Rpb24pOworCWFkZHI2NCA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIGJ1ZiwgYnVmbGVuLCBkYXRhX2RpcmVjdGlvbik7CiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZwZGV2LT5kZXYsIGFkZHI2NCkpIHsKIAkJLyogUHJldmVudCBzdWJzZXF1ZW50IHVubWFwIG9mIHNvbWV0aGluZyBuZXZlciBtYXBwZWQgKi8KIAkJY3AtPkhlYWRlci5TR0xpc3QgPSAwOwotCQljcC0+SGVhZGVyLlNHVG90YWwgPSAwOworCQljcC0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigwKTsKIAkJcmV0dXJuIC0xOwogCX0KLQljcC0+U0dbMF0uQWRkci5sb3dlciA9Ci0JICAodTMyKSAoYWRkcjY0ICYgKHU2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKLQljcC0+U0dbMF0uQWRkci51cHBlciA9Ci0JICAodTMyKSAoKGFkZHI2NCA+PiAzMikgJiAodTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwotCWNwLT5TR1swXS5MZW4gPSBidWZsZW47Ci0JY3AtPlNHWzBdLkV4dCA9IEhQU0FfU0dfTEFTVDsgLyogd2UgYXJlIG5vdCBjaGFpbmluZyAqLwotCWNwLT5IZWFkZXIuU0dMaXN0ID0gKHU4KSAxOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCi0JY3AtPkhlYWRlci5TR1RvdGFsID0gKHUxNikgMTsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KKwljcC0+U0dbMF0uQWRkciA9IGNwdV90b19sZTY0KGFkZHI2NCk7CisJY3AtPlNHWzBdLkxlbiA9IGNwdV90b19sZTMyKGJ1Zmxlbik7CisJY3AtPlNHWzBdLkV4dCA9IGNwdV90b19sZTMyKEhQU0FfU0dfTEFTVCk7IC8qIHdlIGFyZSBub3QgY2hhaW5pbmcgKi8KKwljcC0+SGVhZGVyLlNHTGlzdCA9IDE7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KKwljcC0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigxKTsgLyogdG90YWwgc2dzIGluIGNtZCBsaXN0ICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4MzAsOCArMjc2MCw4IEBACiAJaWYgKGQgPT0gTlVMTCkKIAkJcmV0dXJuIDA7IC8qIG5vIG1hdGNoICovCiAKLQlpdF9uZXh1cyA9IGNwdV90b19sZTMyKCh1MzIpIGQtPmlvYWNjZWxfaGFuZGxlKTsKLQlzY3NpX25leHVzID0gY3B1X3RvX2xlMzIoKHUzMikgYzJhLT5zY3NpX25leHVzKTsKKwlpdF9uZXh1cyA9IGNwdV90b19sZTMyKGQtPmlvYWNjZWxfaGFuZGxlKTsKKwlzY3NpX25leHVzID0gY3B1X3RvX2xlMzIoYzJhLT5zY3NpX25leHVzKTsKIAlmaW5kID0gYzJhLT5zY3NpX25leHVzOwogCiAJaWYgKGgtPnJhaWRfb2ZmbG9hZF9kZWJ1ZyA+IDApCkBAIC0yODkxLDcgKzI4MjEsNyBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGludCBocHNhX2dhdGhlcl9sdW5faW5mbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCWludCByZXBvcnRsdW5zaXplLAorCWludCByZXBvcnRwaHlzbHVuc2l6ZSwgaW50IHJlcG9ydGxvZ2x1bnNpemUsCiAJc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXYsIHUzMiAqbnBoeXNpY2FscywgaW50ICpwaHlzaWNhbF9tb2RlLAogCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXYsIHUzMiAqbmxvZ2ljYWxzKQogewpAQCAtMjkwNSw3ICsyODM1LDcgQEAKIAkJKnBoeXNpY2FsX21vZGUgPSBIUFNBX1JFUE9SVF9QSFlTX0VYVEVOREVEOwogCQlwaHlzaWNhbF9lbnRyeV9zaXplID0gMjQ7CiAJfQotCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X3BoeXNfbHVucyhoLCBwaHlzZGV2LCByZXBvcnRsdW5zaXplLAorCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X3BoeXNfbHVucyhoLCBwaHlzZGV2LCByZXBvcnRwaHlzbHVuc2l6ZSwKIAkJCQkJCQkqcGh5c2ljYWxfbW9kZSkpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IHBoeXNpY2FsIExVTnMgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtMTsKQEAgLTI5MTgsNyArMjg0OCw3IEBACiAJCQkqbnBoeXNpY2FscyAtIEhQU0FfTUFYX1BIWVNfTFVOKTsKIAkJKm5waHlzaWNhbHMgPSBIUFNBX01BWF9QSFlTX0xVTjsKIAl9Ci0JaWYgKGhwc2Ffc2NzaV9kb19yZXBvcnRfbG9nX2x1bnMoaCwgbG9nZGV2LCByZXBvcnRsdW5zaXplKSkgeworCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X2xvZ19sdW5zKGgsIGxvZ2RldiwgcmVwb3J0bG9nbHVuc2l6ZSkpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IGxvZ2ljYWwgTFVOcyBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTI5NDEsOCArMjg3MSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4ICpmaWd1cmVfbHVuYWRkcmJ5dGVzKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCByYWlkX2N0bHJfcG9zaXRpb24sIGludCBpLAotCWludCBucGh5c2ljYWxzLCBpbnQgbmxvZ2ljYWxzLAorc3RhdGljIHU4ICpmaWd1cmVfbHVuYWRkcmJ5dGVzKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCByYWlkX2N0bHJfcG9zaXRpb24sCisJaW50IGksIGludCBucGh5c2ljYWxzLCBpbnQgbmxvZ2ljYWxzLAogCXN0cnVjdCBSZXBvcnRFeHRlbmRlZExVTmRhdGEgKnBoeXNkZXZfbGlzdCwKIAlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqbG9nZGV2X2xpc3QpCiB7CkBAIC0zMDExLDE1ICsyOTQxLDE0IEBACiAJdTMyIG5kZXZfYWxsb2NhdGVkID0gMDsKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICoqY3VycmVudHNkLCAqdGhpc19kZXZpY2UsICp0bXBkZXZpY2U7CiAJaW50IG5jdXJyZW50ID0gMDsKLQlpbnQgcmVwb3J0bHVuc2l6ZSA9IHNpemVvZigqcGh5c2Rldl9saXN0KSArIEhQU0FfTUFYX1BIWVNfTFVOICogMjQ7CiAJaW50IGksIG5fZXh0X3RhcmdldF9kZXZzLCBuZGV2c190b19hbGxvY2F0ZTsKIAlpbnQgcmFpZF9jdGxyX3Bvc2l0aW9uOwogCWludCByZXNjYW5faGJhX21vZGU7CiAJREVDTEFSRV9CSVRNQVAobHVuemVyb2JpdHMsIE1BWF9FWFRfVEFSR0VUUyk7CiAKIAljdXJyZW50c2QgPSBremFsbG9jKHNpemVvZigqY3VycmVudHNkKSAqIEhQU0FfTUFYX0RFVklDRVMsIEdGUF9LRVJORUwpOwotCXBoeXNkZXZfbGlzdCA9IGt6YWxsb2MocmVwb3J0bHVuc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JbG9nZGV2X2xpc3QgPSBremFsbG9jKHJlcG9ydGx1bnNpemUsIEdGUF9LRVJORUwpOworCXBoeXNkZXZfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpwaHlzZGV2X2xpc3QpLCBHRlBfS0VSTkVMKTsKKwlsb2dkZXZfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpsb2dkZXZfbGlzdCksIEdGUF9LRVJORUwpOwogCXRtcGRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKCp0bXBkZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghY3VycmVudHNkIHx8ICFwaHlzZGV2X2xpc3QgfHwgIWxvZ2Rldl9saXN0IHx8ICF0bXBkZXZpY2UpIHsKQEAgLTMwMzksNyArMjk2OCw4IEBACiAKIAloLT5oYmFfbW9kZV9lbmFibGVkID0gcmVzY2FuX2hiYV9tb2RlOwogCi0JaWYgKGhwc2FfZ2F0aGVyX2x1bl9pbmZvKGgsIHJlcG9ydGx1bnNpemUsCisJaWYgKGhwc2FfZ2F0aGVyX2x1bl9pbmZvKGgsCisJCQlzaXplb2YoKnBoeXNkZXZfbGlzdCksIHNpemVvZigqbG9nZGV2X2xpc3QpLAogCQkJKHN0cnVjdCBSZXBvcnRMVU5kYXRhICopIHBoeXNkZXZfbGlzdCwgJm5waHlzaWNhbHMsCiAJCQkmcGh5c2ljYWxfbW9kZSwgbG9nZGV2X2xpc3QsICZubG9naWNhbHMpKQogCQlnb3RvIG91dDsKQEAgLTMyMTAsMTkgKzMxNDAsMTkgQEAKIAkJfQogCQlhZGRyNjQgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJCWxlbiAgPSBzZ19kbWFfbGVuKHNnKTsKLQkJY3Vycl9zZy0+QWRkci5sb3dlciA9ICh1MzIpIChhZGRyNjQgJiAweDBGRkZGRkZGRlVMTCk7Ci0JCWN1cnJfc2ctPkFkZHIudXBwZXIgPSAodTMyKSAoKGFkZHI2NCA+PiAzMikgJiAweDBGRkZGRkZGRlVMTCk7Ci0JCWN1cnJfc2ctPkxlbiA9IGxlbjsKLQkJY3Vycl9zZy0+RXh0ID0gKGkgPCBzY3NpX3NnX2NvdW50KGNtZCkgLSAxKSA/IDAgOiBIUFNBX1NHX0xBU1Q7CisJCWN1cnJfc2ctPkFkZHIgPSBjcHVfdG9fbGU2NChhZGRyNjQpOworCQljdXJyX3NnLT5MZW4gPSBjcHVfdG9fbGUzMihsZW4pOworCQljdXJyX3NnLT5FeHQgPSBjcHVfdG9fbGUzMigwKTsKIAkJY3Vycl9zZysrOwogCX0KKwkoLS1jdXJyX3NnKS0+RXh0ID0gY3B1X3RvX2xlMzIoSFBTQV9TR19MQVNUKTsKIAogCWlmICh1c2Vfc2cgKyBjaGFpbmVkID4gaC0+bWF4U0cpCiAJCWgtPm1heFNHID0gdXNlX3NnICsgY2hhaW5lZDsKIAogCWlmIChjaGFpbmVkKSB7CiAJCWNwLT5IZWFkZXIuU0dMaXN0ID0gaC0+bWF4X2NtZF9zZ19lbnRyaWVzOwotCQljcC0+SGVhZGVyLlNHVG90YWwgPSAodTE2KSAodXNlX3NnICsgMSk7CisJCWNwLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KHVzZV9zZyArIDEpOwogCQlpZiAoaHBzYV9tYXBfc2dfY2hhaW5fYmxvY2soaCwgY3ApKSB7CiAJCQlzY3NpX2RtYV91bm1hcChjbWQpOwogCQkJcmV0dXJuIC0xOwpAQCAtMzIzMyw3ICszMTYzLDcgQEAKIHNnbGlzdF9maW5pc2hlZDoKIAogCWNwLT5IZWFkZXIuU0dMaXN0ID0gKHU4KSB1c2Vfc2c7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KLQljcC0+SGVhZGVyLlNHVG90YWwgPSAodTE2KSB1c2Vfc2c7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCisJY3AtPkhlYWRlci5TR1RvdGFsID0gY3B1X3RvX2xlMTYodXNlX3NnKTsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMyNSwxNyArMzI1NSwxMiBAQAogCQkJYWRkcjY0ID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCQkJbGVuICA9IHNnX2RtYV9sZW4oc2cpOwogCQkJdG90YWxfbGVuICs9IGxlbjsKLQkJCWN1cnJfc2ctPkFkZHIubG93ZXIgPSAodTMyKSAoYWRkcjY0ICYgMHgwRkZGRkZGRkZVTEwpOwotCQkJY3Vycl9zZy0+QWRkci51cHBlciA9Ci0JCQkJKHUzMikgKChhZGRyNjQgPj4gMzIpICYgMHgwRkZGRkZGRkZVTEwpOwotCQkJY3Vycl9zZy0+TGVuID0gbGVuOwotCi0JCQlpZiAoaSA9PSAoc2NzaV9zZ19jb3VudChjbWQpIC0gMSkpCi0JCQkJY3Vycl9zZy0+RXh0ID0gSFBTQV9TR19MQVNUOwotCQkJZWxzZQotCQkJCWN1cnJfc2ctPkV4dCA9IDA7ICAvKiB3ZSBhcmUgbm90IGNoYWluaW5nICovCisJCQljdXJyX3NnLT5BZGRyID0gY3B1X3RvX2xlNjQoYWRkcjY0KTsKKwkJCWN1cnJfc2ctPkxlbiA9IGNwdV90b19sZTMyKGxlbik7CisJCQljdXJyX3NnLT5FeHQgPSBjcHVfdG9fbGUzMigwKTsKIAkJCWN1cnJfc2crKzsKIAkJfQorCQkoLS1jdXJyX3NnKS0+RXh0ID0gY3B1X3RvX2xlMzIoSFBTQV9TR19MQVNUKTsKIAogCQlzd2l0Y2ggKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pIHsKIAkJY2FzZSBETUFfVE9fREVWSUNFOgpAQCAtMzU5Miw3ICszNTE3LDcgQEAKIAljcC0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMih0b3RhbF9sZW4pOwogCWNwLT5lcnJfcHRyID0gY3B1X3RvX2xlNjQoYy0+YnVzYWRkciArCiAJCQlvZmZzZXRvZihzdHJ1Y3QgaW9fYWNjZWwyX2NtZCwgZXJyb3JfZGF0YSkpOwotCWNwLT5lcnJfbGVuID0gY3B1X3RvX2xlMzIoKHUzMikgc2l6ZW9mKGNwLT5lcnJvcl9kYXRhKSk7CisJY3AtPmVycl9sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YoY3AtPmVycm9yX2RhdGEpKTsKIAogCWVucXVldWVfY21kX2FuZF9zdGFydF9pbyhoLCBjKTsKIAlyZXR1cm4gMDsKQEAgLTM4MDksMTEgKzM3MzQsNiBAQAogCQlvZmZsb2FkX3RvX21pcnJvciA9CiAJCQkob2ZmbG9hZF90b19taXJyb3IgPj0gbWFwLT5sYXlvdXRfbWFwX2NvdW50IC0gMSkKIAkJCT8gMCA6IG9mZmxvYWRfdG9fbWlycm9yICsgMTsKLQkJLyogRklYTUU6IHJlbW92ZSBhZnRlciBkZWJ1Zy9kZXYgKi8KLQkJQlVHX09OKG9mZmxvYWRfdG9fbWlycm9yID49IG1hcC0+bGF5b3V0X21hcF9jb3VudCk7Ci0JCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCi0JCQkiREVCVUc6IFVzaW5nIHBoeXNpY2FsIGRpc2sgbWFwIGluZGV4ICVkIGZyb20gbWlycm9yIGdyb3VwICVkXG4iLAotCQkJbWFwX2luZGV4LCBvZmZsb2FkX3RvX21pcnJvcik7CiAJCWRldi0+b2ZmbG9hZF90b19taXJyb3IgPSBvZmZsb2FkX3RvX21pcnJvcjsKIAkJLyogQXZvaWQgZGlyZWN0IHVzZSBvZiBkZXYtPm9mZmxvYWRfdG9fbWlycm9yIHdpdGhpbiB0aGlzCiAJCSAqIGZ1bmN0aW9uIHNpbmNlIG11bHRpcGxlIHRocmVhZHMgbWlnaHQgc2ltdWx0YW5lb3VzbHkKQEAgLTM5NTksOCArMzg3OSwxMSBAQAogCQkJCQkJZGV2LT5zY3NpM2FkZHIpOwogfQogCi1zdGF0aWMgaW50IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0Jdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCisvKgorICogUnVubmluZyBpbiBzdHJ1Y3QgU2NzaV9Ib3N0LT5ob3N0X2xvY2sgbGVzcyBtb2RlIHVzaW5nIExMRCBpbnRlcm5hbAorICogc3RydWN0IGN0bHJfaW5mbyAqaC0+bG9jayB3LyBzcGluX2xvY2tfaXJxc2F2ZSgpIHByb3RlY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgaHBzYV9zY3NpX3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2gsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldjsKQEAgLTM5NzMsMTQgKzM4OTYsMTQgQEAKIAlkZXYgPSBjbWQtPmRldmljZS0+aG9zdGRhdGE7CiAJaWYgKCFkZXYpIHsKIAkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKLQkJZG9uZShjbWQpOworCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQlyZXR1cm4gMDsKIAl9CiAJbWVtY3B5KHNjc2kzYWRkciwgZGV2LT5zY3NpM2FkZHIsIHNpemVvZihzY3NpM2FkZHIpKTsKIAogCWlmICh1bmxpa2VseShsb2NrdXBfZGV0ZWN0ZWQoaCkpKSB7CiAJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQlkb25lKGNtZCk7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCXJldHVybiAwOwogCX0KIAljID0gY21kX2FsbG9jKGgpOwpAQCAtMzk5MCw5ICszOTEzLDYgQEAKIAl9CiAKIAkvKiBGaWxsIGluIHRoZSBjb21tYW5kIGxpc3QgaGVhZGVyICovCi0KLQljbWQtPnNjc2lfZG9uZSA9IGRvbmU7ICAgIC8qIHNhdmUgdGhpcyBmb3IgdXNlIGJ5IGNvbXBsZXRpb24gY29kZSAqLwotCiAJLyogc2F2ZSBjIGluIGNhc2Ugd2UgaGF2ZSB0byBhYm9ydCBpdCAgKi8KIAljbWQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSBjOwogCkBAIC00MDI2LDggKzM5NDYsOCBAQAogCiAJYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOyAgLyogdW51c2VkIGluIHNpbXBsZSBtb2RlICovCiAJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlc1swXSwgJnNjc2kzYWRkclswXSwgOCk7Ci0JYy0+SGVhZGVyLlRhZy5sb3dlciA9IChjLT5jbWRpbmRleCA8PCBESVJFQ1RfTE9PS1VQX1NISUZUKTsKLQljLT5IZWFkZXIuVGFnLmxvd2VyIHw9IERJUkVDVF9MT09LVVBfQklUOworCWMtPkhlYWRlci50YWcgPSBjcHVfdG9fbGU2NCgoYy0+Y21kaW5kZXggPDwgRElSRUNUX0xPT0tVUF9TSElGVCkgfAorCQkJCQlESVJFQ1RfTE9PS1VQX0JJVCk7CiAKIAkvKiBGaWxsIGluIHRoZSByZXF1ZXN0IGJsb2NrLi4uICovCiAKQEAgLTQwMzYsMTcgKzM5NTYsMTggQEAKIAlCVUdfT04oY21kLT5jbWRfbGVuID4gc2l6ZW9mKGMtPlJlcXVlc3QuQ0RCKSk7CiAJYy0+UmVxdWVzdC5DREJMZW4gPSBjbWQtPmNtZF9sZW47CiAJbWVtY3B5KGMtPlJlcXVlc3QuQ0RCLCBjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbik7Ci0JYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsKLQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CiAJc3dpdGNoIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uKSB7CiAJY2FzZSBETUFfVE9fREVWSUNFOgotCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCVRZUEVfQVRUUl9ESVIoVFlQRV9DTUQsIEFUVFJfU0lNUExFLCBYRkVSX1dSSVRFKTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfRlJPTV9ERVZJQ0U6Ci0JCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQlUWVBFX0FUVFJfRElSKFRZUEVfQ01ELCBBVFRSX1NJTVBMRSwgWEZFUl9SRUFEKTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfTk9ORToKLQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCVRZUEVfQVRUUl9ESVIoVFlQRV9DTUQsIEFUVFJfU0lNUExFLCBYRkVSX05PTkUpOwogCQlicmVhazsKIAljYXNlIERNQV9CSURJUkVDVElPTkFMOgogCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBidWdneSBhcHBsaWNhdGlvbiBkb2VzIGEgc2NzaSBwYXNzdGhydQpAQCAtNDA1NCw3ICszOTc1LDggQEAKIAkJICogLi4vc2NzaS9zY3NpX2lvY3RsLmM6c2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoKSApCiAJCSAqLwogCi0JCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JTVkQ7CisJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQlUWVBFX0FUVFJfRElSKFRZUEVfQ01ELCBBVFRSX1NJTVBMRSwgWEZFUl9SU1ZEKTsKIAkJLyogVGhpcyBpcyB0ZWNobmljYWxseSB3cm9uZywgYW5kIGhwc2EgY29udHJvbGxlcnMgc2hvdWxkCiAJCSAqIHJlamVjdCBpdCB3aXRoIENNRF9JTlZBTElELCB3aGljaCBpcyB0aGUgbW9zdCBjb3JyZWN0CiAJCSAqIHJlc3BvbnNlLCBidXQgbm9uLWZpYnJlIGJhY2tlbmRzIGFwcGVhciB0byBsZXQgaXQKQEAgLTQwODEsOCArNDAwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBERUZfU0NTSV9RQ01EKGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kKQotCiBzdGF0aWMgaW50IGRvX25vdF9zY2FuX2lmX2NvbnRyb2xsZXJfbG9ja2VkX3VwKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQxNTIsMjMgKzQwNzIsNiBAQAogCXJldHVybiBmaW5pc2hlZDsKIH0KIAotc3RhdGljIGludCBocHNhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gc2Rldl90b19oYmEoc2Rldik7Ci0KLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KLQlpZiAocWRlcHRoIDwgMSkKLQkJcWRlcHRoID0gMTsKLQllbHNlCi0JCWlmIChxZGVwdGggPiBoLT5ucl9jbWRzKQotCQkJcWRlcHRoID0gaC0+bnJfY21kczsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgcWRlcHRoKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci0KIHN0YXRpYyB2b2lkIGhwc2FfdW5yZWdpc3Rlcl9zY3NpKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJLyogd2UgYXJlIGJlaW5nIGZvcmNpYmx5IHVubG9hZGVkLCBhbmQgbWF5IG5vdCByZWZ1c2UuICovCkBAIC00MzI5LDggKzQyMzIsOCBAQAogCWlmIChjLT5jbWRfdHlwZSA9PSBDTURfSU9BQ0NFTDEpIHsKIAkJc3RydWN0IGlvX2FjY2VsMV9jbWQgKmNtMSA9IChzdHJ1Y3QgaW9fYWNjZWwxX2NtZCAqKQogCQkJJmgtPmlvYWNjZWxfY21kX3Bvb2xbYy0+Y21kaW5kZXhdOwotCQkqdGFndXBwZXIgPSBjbTEtPlRhZy51cHBlcjsKLQkJKnRhZ2xvd2VyID0gY20xLT5UYWcubG93ZXI7CisJCSp0YWd1cHBlciA9ICh1MzIpIChjbTEtPnRhZyA+PiAzMik7CisJCSp0YWdsb3dlciA9ICh1MzIpIChjbTEtPnRhZyAmIDB4MGZmZmZmZmZmVUxMKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX0lPQUNDRUwyKSB7CkBAIC00MzQxLDExICs0MjQ0LDEwIEBACiAJCSp0YWdsb3dlciA9IGNtMi0+VGFnOwogCQlyZXR1cm47CiAJfQotCSp0YWd1cHBlciA9IGMtPkhlYWRlci5UYWcudXBwZXI7Ci0JKnRhZ2xvd2VyID0gYy0+SGVhZGVyLlRhZy5sb3dlcjsKKwkqdGFndXBwZXIgPSAodTMyKSAoYy0+SGVhZGVyLnRhZyA+PiAzMik7CisJKnRhZ2xvd2VyID0gKHUzMikgKGMtPkhlYWRlci50YWcgJiAweDBmZmZmZmZmZlVMTCk7CiB9CiAKLQogc3RhdGljIGludCBocHNhX3NlbmRfYWJvcnQoc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYWJvcnQsIGludCBzd2l6emxlKQogewpAQCAtNDQxMCw3ICs0MzEyLDcgQEAKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMgPSBOVUxMOwkvKiBwdHIgaW50byBjbXBRICovCiAKIAlpZiAoIWZpbmQpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgcXVldWVfaGVhZCwgbGlzdCkgewogCQlpZiAoYy0+c2NzaV9jbWQgPT0gTlVMTCkgLyogZS5nLjogcGFzc3RocnUgaW9jdGwgKi8KQEAgLTQ0MzIsNyArNDMzNCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgcXVldWVfaGVhZCwgbGlzdCkgewotCQlpZiAobWVtY21wKCZjLT5IZWFkZXIuVGFnLCB0YWcsIDgpICE9IDApCisJCWlmIChtZW1jbXAoJmMtPkhlYWRlci50YWcsIHRhZywgOCkgIT0gMCkKIAkJCWNvbnRpbnVlOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiBjOwpAQCAtNDY4NiwxOSArNDU4OCwzMiBAQAogCWludCBpOwogCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CiAJZG1hX2FkZHJfdCBjbWRfZG1hX2hhbmRsZSwgZXJyX2RtYV9oYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbG9vcGNvdW50OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkvKiBUaGVyZSBpcyBzb21lICpleHRyZW1lbHkqIHNtYWxsIGJ1dCBub24temVybyBjaGFuY2UgdGhhdCB0aGF0CisJICogbXVsdGlwbGUgdGhyZWFkcyBjb3VsZCBnZXQgaW4gaGVyZSwgYW5kIG9uZSB0aHJlYWQgY291bGQKKwkgKiBiZSBzY2FubmluZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJpdHMgbG9va2luZyBmb3IgYSBmcmVlCisJICogb25lLCBidXQgdGhlIGZyZWUgb25lcyBhcmUgYWx3YXlzIGJlaGluZCBoaW0sIGFuZCBvdGhlcgorCSAqIHRocmVhZHMgc25lYWsgaW4gYmVoaW5kIGhpbSBhbmQgZWF0IHRoZW0gYmVmb3JlIGhlIGNhbgorCSAqIGdldCB0byB0aGVtLCBzbyB0aGF0IHdoaWxlIHRoZXJlIGlzIGFsd2F5cyBhIGZyZWUgb25lLCBhCisJICogdmVyeSB1bmx1Y2t5IHRocmVhZCBtaWdodCBiZSBzdGFydmVkIGFueXdheSwgbmV2ZXIgYWJsZSB0bworCSAqIGJlYXQgdGhlIG90aGVyIHRocmVhZHMuICBJbiByZWFsaXR5LCB0aGlzIGhhcHBlbnMgc28KKwkgKiBpbmZyZXF1ZW50bHkgYXMgdG8gYmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBuZXZlci4KKwkgKi8KKworCWxvb3Bjb3VudCA9IDA7CiAJZG8gewogCQlpID0gZmluZF9maXJzdF96ZXJvX2JpdChoLT5jbWRfcG9vbF9iaXRzLCBoLT5ucl9jbWRzKTsKLQkJaWYgKGkgPT0gaC0+bnJfY21kcykgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9IHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0Ci0JCSAoaSAmIChCSVRTX1BFUl9MT05HIC0gMSksCi0JCSAgaC0+Y21kX3Bvb2xfYml0cyArIChpIC8gQklUU19QRVJfTE9ORykpICE9IDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGkgPT0gaC0+bnJfY21kcykKKwkJCWkgPSAwOworCQlsb29wY291bnQrKzsKKwl9IHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAorCQkgIGgtPmNtZF9wb29sX2JpdHMgKyAoaSAvIEJJVFNfUEVSX0xPTkcpKSAhPSAwICYmCisJCWxvb3Bjb3VudCA8IDEwKTsKKworCS8qIFRocmVhZCBnb3Qgc3RhcnZlZD8gIFdlIGRvIG5vdCBleHBlY3QgdGhpcyB0byBldmVyIGhhcHBlbi4gKi8KKwlpZiAobG9vcGNvdW50ID49IDEwKQorCQlyZXR1cm4gTlVMTDsKIAogCWMgPSBoLT5jbWRfcG9vbCArIGk7CiAJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOwpAQCAtNDcxNCw5ICs0NjI5LDggQEAKIAlJTklUX0xJU1RfSEVBRCgmYy0+bGlzdCk7CiAJYy0+YnVzYWRkciA9ICh1MzIpIGNtZF9kbWFfaGFuZGxlOwogCXRlbXA2NC52YWwgPSAodTY0KSBlcnJfZG1hX2hhbmRsZTsKLQljLT5FcnJEZXNjLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7Ci0JYy0+RXJyRGVzYy5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwotCWMtPkVyckRlc2MuTGVuID0gc2l6ZW9mKCpjLT5lcnJfaW5mbyk7CisJYy0+RXJyRGVzYy5BZGRyID0gY3B1X3RvX2xlNjQoZXJyX2RtYV9oYW5kbGUpOworCWMtPkVyckRlc2MuTGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCpjLT5lcnJfaW5mbykpOwogCiAJYy0+aCA9IGg7CiAJcmV0dXJuIGM7CkBAIC00NzI5LDcgKzQ2NDMsNiBAQAogc3RhdGljIHN0cnVjdCBDb21tYW5kTGlzdCAqY21kX3NwZWNpYWxfYWxsb2Moc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7Ci0JdW5pb24gdTY0Yml0IHRlbXA2NDsKIAlkbWFfYWRkcl90IGNtZF9kbWFfaGFuZGxlLCBlcnJfZG1hX2hhbmRsZTsKIAogCWMgPSBwY2lfemFsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKCpjKSwgJmNtZF9kbWFfaGFuZGxlKTsKQEAgLTQ3NTAsMTAgKzQ2NjMsOCBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmMtPmxpc3QpOwogCWMtPmJ1c2FkZHIgPSAodTMyKSBjbWRfZG1hX2hhbmRsZTsKLQl0ZW1wNjQudmFsID0gKHU2NCkgZXJyX2RtYV9oYW5kbGU7Ci0JYy0+RXJyRGVzYy5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwotCWMtPkVyckRlc2MuQWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKLQljLT5FcnJEZXNjLkxlbiA9IHNpemVvZigqYy0+ZXJyX2luZm8pOworCWMtPkVyckRlc2MuQWRkciA9IGNwdV90b19sZTY0KGVycl9kbWFfaGFuZGxlKTsKKwljLT5FcnJEZXNjLkxlbiA9IGNwdV90b19sZTMyKHNpemVvZigqYy0+ZXJyX2luZm8pKTsKIAogCWMtPmggPSBoOwogCXJldHVybiBjOwpAQCAtNDc2MiwzMCArNDY3MywyNSBAQAogc3RhdGljIHZvaWQgY21kX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpID0gYyAtIGgtPmNtZF9wb29sOwotCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CiAJY2xlYXJfYml0KGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAogCQkgIGgtPmNtZF9wb29sX2JpdHMgKyAoaSAvIEJJVFNfUEVSX0xPTkcpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNtZF9zcGVjaWFsX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7Ci0KLQl0ZW1wNjQudmFsMzIubG93ZXIgPSBjLT5FcnJEZXNjLkFkZHIubG93ZXI7Ci0JdGVtcDY0LnZhbDMyLnVwcGVyID0gYy0+RXJyRGVzYy5BZGRyLnVwcGVyOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKCpjLT5lcnJfaW5mbyksCi0JCQkgICAgYy0+ZXJyX2luZm8sIChkbWFfYWRkcl90KSB0ZW1wNjQudmFsKTsKKwkJCSAgICBjLT5lcnJfaW5mbywKKwkJCSAgICAoZG1hX2FkZHJfdCkgbGU2NF90b19jcHUoYy0+RXJyRGVzYy5BZGRyKSk7CiAJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LCBzaXplb2YoKmMpLAogCQkJICAgIGMsIChkbWFfYWRkcl90KSAoYy0+YnVzYWRkciAmIERJUkVDVF9MT09LVVBfTUFTSykpOwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCi1zdGF0aWMgaW50IGhwc2FfaW9jdGwzMl9wYXNzdGhydShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBocHNhX2lvY3RsMzJfcGFzc3RocnUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsCisJdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlJT0NUTDMyX0NvbW1hbmRfc3RydWN0IF9fdXNlciAqYXJnMzIgPQogCSAgICAoSU9DVEwzMl9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKikgYXJnOwpAQCAtNDgxMCw3ICs0NzE2LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGhwc2FfaW9jdGwoZGV2LCBDQ0lTU19QQVNTVEhSVSwgKHZvaWQgKilwKTsKKwllcnIgPSBocHNhX2lvY3RsKGRldiwgQ0NJU1NfUEFTU1RIUlUsIHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZXJyIHw9IGNvcHlfaW5fdXNlcigmYXJnMzItPmVycm9yX2luZm8sICZwLT5lcnJvcl9pbmZvLApAQCAtNDgyMSw3ICs0NzI3LDcgQEAKIH0KIAogc3RhdGljIGludCBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LAotCWludCBjbWQsIHZvaWQgKmFyZykKKwlpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewogCUJJR19JT0NUTDMyX0NvbW1hbmRfc3RydWN0IF9fdXNlciAqYXJnMzIgPQogCSAgICAoQklHX0lPQ1RMMzJfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICopIGFyZzsKQEAgLTQ4NDgsNyArNDc1NCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBocHNhX2lvY3RsKGRldiwgQ0NJU1NfQklHX1BBU1NUSFJVLCAodm9pZCAqKXApOworCWVyciA9IGhwc2FfaW9jdGwoZGV2LCBDQ0lTU19CSUdfUEFTU1RIUlUsIHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZXJyIHw9IGNvcHlfaW5fdXNlcigmYXJnMzItPmVycm9yX2luZm8sICZwLT5lcnJvcl9pbmZvLApAQCAtNDg1OCw3ICs0NzY0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDQ0lTU19HRVRQQ0lJTkZPOgpAQCAtNDkzMiw3ICs0ODM4LDcgQEAKIAlJT0NUTF9Db21tYW5kX3N0cnVjdCBpb2NvbW1hbmQ7CiAJc3RydWN0IENvbW1hbmRMaXN0ICpjOwogCWNoYXIgKmJ1ZmYgPSBOVUxMOwotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisJdTY0IHRlbXA2NDsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKCFhcmdwKQpAQCAtNDk3MSwxNCArNDg3NywxNCBAQAogCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsgLyogdW51c2VkIGluIHNpbXBsZSBtb2RlICovCiAJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApIHsJLyogYnVmZmVyIHRvIGZpbGwgKi8KIAkJYy0+SGVhZGVyLlNHTGlzdCA9IDE7Ci0JCWMtPkhlYWRlci5TR1RvdGFsID0gMTsKKwkJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigxKTsKIAl9IGVsc2UJeyAvKiBubyBidWZmZXJzIHRvIGZpbGwgKi8KIAkJYy0+SGVhZGVyLlNHTGlzdCA9IDA7Ci0JCWMtPkhlYWRlci5TR1RvdGFsID0gMDsKKwkJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigwKTsKIAl9CiAJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLCAmaW9jb21tYW5kLkxVTl9pbmZvLCBzaXplb2YoYy0+SGVhZGVyLkxVTikpOwogCS8qIHVzZSB0aGUga2VybmVsIGFkZHJlc3MgdGhlIGNtZCBibG9jayBmb3IgdGFnICovCi0JYy0+SGVhZGVyLlRhZy5sb3dlciA9IGMtPmJ1c2FkZHI7CisJYy0+SGVhZGVyLnRhZyA9IGMtPmJ1c2FkZHI7CiAKIAkvKiBGaWxsIGluIFJlcXVlc3QgYmxvY2sgKi8KIAltZW1jcHkoJmMtPlJlcXVlc3QsICZpb2NvbW1hbmQuUmVxdWVzdCwKQEAgLTQ5ODYsMTkgKzQ4OTIsMTcgQEAKIAogCS8qIEZpbGwgaW4gdGhlIHNjYXR0ZXIgZ2F0aGVyIGluZm9ybWF0aW9uICovCiAJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApIHsKLQkJdGVtcDY0LnZhbCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGJ1ZmYsCisJCXRlbXA2NCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGJ1ZmYsCiAJCQlpb2NvbW1hbmQuYnVmX3NpemUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JCWlmIChkbWFfbWFwcGluZ19lcnJvcigmaC0+cGRldi0+ZGV2LCB0ZW1wNjQudmFsKSkgewotCQkJYy0+U0dbMF0uQWRkci5sb3dlciA9IDA7Ci0JCQljLT5TR1swXS5BZGRyLnVwcGVyID0gMDsKLQkJCWMtPlNHWzBdLkxlbiA9IDA7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmaC0+cGRldi0+ZGV2LCAoZG1hX2FkZHJfdCkgdGVtcDY0KSkgeworCQkJYy0+U0dbMF0uQWRkciA9IGNwdV90b19sZTY0KDApOworCQkJYy0+U0dbMF0uTGVuID0gY3B1X3RvX2xlMzIoMCk7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQotCQljLT5TR1swXS5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwotCQljLT5TR1swXS5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwotCQljLT5TR1swXS5MZW4gPSBpb2NvbW1hbmQuYnVmX3NpemU7Ci0JCWMtPlNHWzBdLkV4dCA9IEhQU0FfU0dfTEFTVDsgLyogd2UgYXJlIG5vdCBjaGFpbmluZyovCisJCWMtPlNHWzBdLkFkZHIgPSBjcHVfdG9fbGU2NCh0ZW1wNjQpOworCQljLT5TR1swXS5MZW4gPSBjcHVfdG9fbGUzMihpb2NvbW1hbmQuYnVmX3NpemUpOworCQljLT5TR1swXS5FeHQgPSBjcHVfdG9fbGUzMihIUFNBX1NHX0xBU1QpOyAvKiBub3QgY2hhaW5pbmcgKi8KIAl9CiAJaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfY29yZV9pZl9ub19sb2NrdXAoaCwgYyk7CiAJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApCkBAIC01MDMzLDcgKzQ5MzcsNyBAQAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKIAl1bnNpZ25lZCBjaGFyICoqYnVmZiA9IE5VTEw7CiAJaW50ICpidWZmX3NpemUgPSBOVUxMOwotCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisJdTY0IHRlbXA2NDsKIAlCWVRFIHNnX3VzZWQgPSAwOwogCWludCBzdGF0dXMgPSAwOwogCWludCBpOwpAQCAtNTEwNywyOSArNTAxMSwzMCBAQAogCX0KIAljLT5jbWRfdHlwZSA9IENNRF9JT0NUTF9QRU5EOwogCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsKLQljLT5IZWFkZXIuU0dMaXN0ID0gYy0+SGVhZGVyLlNHVG90YWwgPSBzZ191c2VkOworCWMtPkhlYWRlci5TR0xpc3QgPSAodTgpIHNnX3VzZWQ7CisJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNihzZ191c2VkKTsKIAltZW1jcHkoJmMtPkhlYWRlci5MVU4sICZpb2MtPkxVTl9pbmZvLCBzaXplb2YoYy0+SGVhZGVyLkxVTikpOwotCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOworCWMtPkhlYWRlci50YWcgPSBjLT5idXNhZGRyOwogCW1lbWNweSgmYy0+UmVxdWVzdCwgJmlvYy0+UmVxdWVzdCwgc2l6ZW9mKGMtPlJlcXVlc3QpKTsKIAlpZiAoaW9jLT5idWZfc2l6ZSA+IDApIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBzZ191c2VkOyBpKyspIHsKLQkJCXRlbXA2NC52YWwgPSBwY2lfbWFwX3NpbmdsZShoLT5wZGV2LCBidWZmW2ldLAorCQkJdGVtcDY0ID0gcGNpX21hcF9zaW5nbGUoaC0+cGRldiwgYnVmZltpXSwKIAkJCQkgICAgYnVmZl9zaXplW2ldLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZoLT5wZGV2LT5kZXYsIHRlbXA2NC52YWwpKSB7Ci0JCQkJYy0+U0dbaV0uQWRkci5sb3dlciA9IDA7Ci0JCQkJYy0+U0dbaV0uQWRkci51cHBlciA9IDA7Ci0JCQkJYy0+U0dbaV0uTGVuID0gMDsKKwkJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmaC0+cGRldi0+ZGV2LAorCQkJCQkJCShkbWFfYWRkcl90KSB0ZW1wNjQpKSB7CisJCQkJYy0+U0dbaV0uQWRkciA9IGNwdV90b19sZTY0KDApOworCQkJCWMtPlNHW2ldLkxlbiA9IGNwdV90b19sZTMyKDApOwogCQkJCWhwc2FfcGNpX3VubWFwKGgtPnBkZXYsIGMsIGksCiAJCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAJCQkJc3RhdHVzID0gLUVOT01FTTsKIAkJCQlnb3RvIGNsZWFudXAwOwogCQkJfQotCQkJYy0+U0dbaV0uQWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKLQkJCWMtPlNHW2ldLkFkZHIudXBwZXIgPSB0ZW1wNjQudmFsMzIudXBwZXI7Ci0JCQljLT5TR1tpXS5MZW4gPSBidWZmX3NpemVbaV07Ci0JCQljLT5TR1tpXS5FeHQgPSBpIDwgc2dfdXNlZCAtIDEgPyAwIDogSFBTQV9TR19MQVNUOworCQkJYy0+U0dbaV0uQWRkciA9IGNwdV90b19sZTY0KHRlbXA2NCk7CisJCQljLT5TR1tpXS5MZW4gPSBjcHVfdG9fbGUzMihidWZmX3NpemVbaV0pOworCQkJYy0+U0dbaV0uRXh0ID0gY3B1X3RvX2xlMzIoMCk7CiAJCX0KKwkJYy0+U0dbLS1pXS5FeHQgPSBjcHVfdG9fbGUzMihIUFNBX1NHX0xBU1QpOwogCX0KIAlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF9jb3JlX2lmX25vX2xvY2t1cChoLCBjKTsKIAlpZiAoc2dfdXNlZCkKQEAgLTUyMDYsNyArNTExMSw3IEBACiAvKgogICogaW9jdGwKICAqLwotc3RhdGljIGludCBocHNhX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGhwc2FfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCiB7CiAJc3RydWN0IGN0bHJfaW5mbyAqaDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKQEAgLTUyNjgsMjAgKzUxNzMsMjAgQEAKIHsKIAlpbnQgcGNpX2RpciA9IFhGRVJfTk9ORTsKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmE7IC8qIGZvciBjb21tYW5kcyB0byBiZSBhYm9ydGVkICovCisJdTMyIHR1cHBlciwgdGxvd2VyOwogCiAJYy0+Y21kX3R5cGUgPSBDTURfSU9DVExfUEVORDsKIAljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CiAJaWYgKGJ1ZmYgIT0gTlVMTCAmJiBzaXplID4gMCkgewogCQljLT5IZWFkZXIuU0dMaXN0ID0gMTsKLQkJYy0+SGVhZGVyLlNHVG90YWwgPSAxOworCQljLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KDEpOwogCX0gZWxzZSB7CiAJCWMtPkhlYWRlci5TR0xpc3QgPSAwOwotCQljLT5IZWFkZXIuU0dUb3RhbCA9IDA7CisJCWMtPkhlYWRlci5TR1RvdGFsID0gY3B1X3RvX2xlMTYoMCk7CiAJfQotCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOworCWMtPkhlYWRlci50YWcgPSBjLT5idXNhZGRyOwogCW1lbWNweShjLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgc2NzaTNhZGRyLCA4KTsKIAotCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gY21kX3R5cGU7CiAJaWYgKGNtZF90eXBlID09IFRZUEVfQ01EKSB7CiAJCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgSFBTQV9JTlFVSVJZOgpAQCAtNTI5MSw4ICs1MTk2LDggQEAKIAkJCQljLT5SZXF1ZXN0LkNEQlsyXSA9IChwYWdlX2NvZGUgJiAweGZmKTsKIAkJCX0KIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gNjsKLQkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKLQkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCQljLT5SZXF1ZXN0LnR5cGVfYXR0cl9kaXIgPQorCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsIEFUVFJfU0lNUExFLCBYRkVSX1JFQUQpOwogCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gSFBTQV9JTlFVSVJZOwogCQkJYy0+UmVxdWVzdC5DREJbNF0gPSBzaXplICYgMHhGRjsKQEAgLTUzMDMsOCArNTIwOCw4IEBACiAJCQkgICBtb2RlID0gMDAgdGFyZ2V0ID0gMC4gIE5vdGhpbmcgdG8gd3JpdGUuCiAJCQkgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTI7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9SRUFEOworCQkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCQlUWVBFX0FUVFJfRElSKGNtZF90eXBlLCBBVFRSX1NJTVBMRSwgWEZFUl9SRUFEKTsKIAkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CiAJCQljLT5SZXF1ZXN0LkNEQlswXSA9IGNtZDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzZdID0gKHNpemUgPj4gMjQpICYgMHhGRjsgLyogTVNCICovCkBAIC01MzE0LDggKzUyMTksOSBAQAogCQkJYnJlYWs7CiAJCWNhc2UgSFBTQV9DQUNIRV9GTFVTSDoKIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTI7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsCisJCQkJCQlBVFRSX1NJTVBMRSwgWEZFUl9XUklURSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBCTUlDX1dSSVRFOwogCQkJYy0+UmVxdWVzdC5DREJbNl0gPSBCTUlDX0NBQ0hFX0ZMVVNIOwpAQCAtNTMyNCwxNCArNTIzMCwxNCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgVEVTVF9VTklUX1JFQURZOgogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSA2OwotCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwotCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJVFlQRV9BVFRSX0RJUihjbWRfdHlwZSwgQVRUUl9TSU1QTEUsIFhGRVJfTk9ORSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgSFBTQV9HRVRfUkFJRF9NQVA6CiAJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEyOwotCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwotCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfUkVBRDsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJVFlQRV9BVFRSX0RJUihjbWRfdHlwZSwgQVRUUl9TSU1QTEUsIFhGRVJfUkVBRCk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBIUFNBX0NJU1NfUkVBRDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gY21kOwpAQCAtNTM0Miw4ICs1MjQ4LDggQEAKIAkJCWJyZWFrOwogCQljYXNlIEJNSUNfU0VOU0VfQ09OVFJPTExFUl9QQVJBTUVURVJTOgogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxMDsKLQkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKLQkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCQljLT5SZXF1ZXN0LnR5cGVfYXR0cl9kaXIgPQorCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsIEFUVFJfU0lNUExFLCBYRkVSX1JFQUQpOwogCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gQk1JQ19SRUFEOwogCQkJYy0+UmVxdWVzdC5DREJbNl0gPSBCTUlDX1NFTlNFX0NPTlRST0xMRVJfUEFSQU1FVEVSUzsKQEAgLTUzNjAsOSArNTI2Niw4IEBACiAKIAkJY2FzZSAgSFBTQV9ERVZJQ0VfUkVTRVRfTVNHOgogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxNjsKLQkJCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gIDE7IC8qIEl0IGlzIGEgTVNHIG5vdCBhIENNRCAqLwotCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwotCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJVFlQRV9BVFRSX0RJUihjbWRfdHlwZSwgQVRUUl9TSU1QTEUsIFhGRVJfTk9ORSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLwogCQkJbWVtc2V0KCZjLT5SZXF1ZXN0LkNEQlswXSwgMCwgc2l6ZW9mKGMtPlJlcXVlc3QuQ0RCKSk7CiAJCQljLT5SZXF1ZXN0LkNEQlswXSA9ICBjbWQ7CkBAIC01Mzc2LDI3ICs1MjgxLDI4IEBACiAJCQlicmVhazsKIAkJY2FzZSAgSFBTQV9BQk9SVF9NU0c6CiAJCQlhID0gYnVmZjsgICAgICAgLyogcG9pbnQgdG8gY29tbWFuZCB0byBiZSBhYm9ydGVkICovCi0JCQlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJBYm9ydCBUYWc6MHglMDh4OiUwOHggdXNpbmcgcmVxdWVzdCBUYWc6MHglMDh4OiUwOHhcbiIsCi0JCQkJYS0+SGVhZGVyLlRhZy51cHBlciwgYS0+SGVhZGVyLlRhZy5sb3dlciwKLQkJCQljLT5IZWFkZXIuVGFnLnVwcGVyLCBjLT5IZWFkZXIuVGFnLmxvd2VyKTsKKwkJCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIkFib3J0IFRhZzoweCUwMTZsbHggdXNpbmcgcmVxdWVzdCBUYWc6MHglMDE2bGx4IiwKKwkJCQlhLT5IZWFkZXIudGFnLCBjLT5IZWFkZXIudGFnKTsKKwkJCXRsb3dlciA9ICh1MzIpIChhLT5IZWFkZXIudGFnID4+IDMyKTsKKwkJCXR1cHBlciA9ICh1MzIpIChhLT5IZWFkZXIudGFnICYgMHgwZmZmZmZmZmZVTEwpOwogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxNjsKLQkJCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gVFlQRV9NU0c7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7Ci0JCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJCWMtPlJlcXVlc3QudHlwZV9hdHRyX2RpciA9CisJCQkJCVRZUEVfQVRUUl9ESVIoY21kX3R5cGUsCisJCQkJCQlBVFRSX1NJTVBMRSwgWEZFUl9XUklURSk7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBIUFNBX1RBU0tfTUFOQUdFTUVOVDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gSFBTQV9UTUZfQUJPUlRfVEFTSzsKIAkJCWMtPlJlcXVlc3QuQ0RCWzJdID0gMHgwMDsgLyogcmVzZXJ2ZWQgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCWzNdID0gMHgwMDsgLyogcmVzZXJ2ZWQgKi8KIAkJCS8qIFRhZyB0byBhYm9ydCBnb2VzIGluIENEQls0XS1DREJbMTFdICovCi0JCQljLT5SZXF1ZXN0LkNEQls0XSA9IGEtPkhlYWRlci5UYWcubG93ZXIgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbNV0gPSAoYS0+SGVhZGVyLlRhZy5sb3dlciA+PiA4KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQls2XSA9IChhLT5IZWFkZXIuVGFnLmxvd2VyID4+IDE2KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQls3XSA9IChhLT5IZWFkZXIuVGFnLmxvd2VyID4+IDI0KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQls4XSA9IGEtPkhlYWRlci5UYWcudXBwZXIgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbOV0gPSAoYS0+SGVhZGVyLlRhZy51cHBlciA+PiA4KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQlsxMF0gPSAoYS0+SGVhZGVyLlRhZy51cHBlciA+PiAxNikgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbMTFdID0gKGEtPkhlYWRlci5UYWcudXBwZXIgPj4gMjQpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzRdID0gdGxvd2VyICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzVdID0gKHRsb3dlciA+PiA4KSAmIDB4RkY7CisJCQljLT5SZXF1ZXN0LkNEQls2XSA9ICh0bG93ZXIgPj4gMTYpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzddID0gKHRsb3dlciA+PiAyNCkgJiAweEZGOworCQkJYy0+UmVxdWVzdC5DREJbOF0gPSB0dXBwZXIgJiAweEZGOworCQkJYy0+UmVxdWVzdC5DREJbOV0gPSAodHVwcGVyID4+IDgpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzEwXSA9ICh0dXBwZXIgPj4gMTYpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzExXSA9ICh0dXBwZXIgPj4gMjQpICYgMHhGRjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzEyXSA9IDB4MDA7IC8qIHJlc2VydmVkICovCiAJCQljLT5SZXF1ZXN0LkNEQlsxM10gPSAweDAwOyAvKiByZXNlcnZlZCAqLwogCQkJYy0+UmVxdWVzdC5DREJbMTRdID0gMHgwMDsgLyogcmVzZXJ2ZWQgKi8KQEAgLTU0MTIsNyArNTMxOCw3IEBACiAJCUJVRygpOwogCX0KIAotCXN3aXRjaCAoYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbikgeworCXN3aXRjaCAoR0VUX0RJUihjLT5SZXF1ZXN0LnR5cGVfYXR0cl9kaXIpKSB7CiAJY2FzZSBYRkVSX1JFQUQ6CiAJCXBjaV9kaXIgPSBQQ0lfRE1BX0ZST01ERVZJQ0U7CiAJCWJyZWFrOwpAQCAtNTQ2NywxNSArNTM3Myw5IEBACiAKIAkJLyogUHV0IGpvYiBvbnRvIHRoZSBjb21wbGV0ZWQgUSAqLwogCQlhZGRRKCZoLT5jbXBRLCBjKTsKLQotCQkvKiBNdXN0IGluY3JlbWVudCBjb21tYW5kc19vdXRzdGFuZGluZyBiZWZvcmUgdW5sb2NraW5nCi0JCSAqIGFuZCBzdWJtaXR0aW5nIHRvIGF2b2lkIHJhY2UgY2hlY2tpbmcgZm9yIGZpZm8gZnVsbAotCQkgKiBjb25kaXRpb24uCi0JCSAqLwotCQloLT5jb21tYW5kc19vdXRzdGFuZGluZysrOwotCi0JCS8qIFRlbGwgdGhlIGNvbnRyb2xsZXIgZXhlY3V0ZSBjb21tYW5kICovCisJCWF0b21pY19pbmMoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgKmZsYWdzKTsKKwkJLyogVGVsbCB0aGUgY29udHJvbGxlciBleGVjdXRlIGNvbW1hbmQgKi8KIAkJaC0+YWNjZXNzLnN1Ym1pdF9jb21tYW5kKGgsIGMpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgKmZsYWdzKTsKIAl9CkBAIC01NTIxLDYgKzU0MjEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGlvX21heV9iZV9zdGFsbGVkID0gMDsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gYy0+aDsKKwlpbnQgY291bnQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCXJlbW92ZVEoYyk7CkBAIC01NTQxLDExICs1NDQyLDEwIEBACiAJICogd2FudCB0byBnZXQgaW4gYSBjeWNsZSB3aGVyZSB3ZSBjYWxsIHN0YXJ0X2lvIGV2ZXJ5IHRpbWUKIAkgKiB0aHJvdWdoIGhlcmUuCiAJICovCi0JaWYgKHVubGlrZWx5KGgtPmZpZm9fcmVjZW50bHlfZnVsbCkgJiYKLQkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcgPCA1KQotCQlpb19tYXlfYmVfc3RhbGxlZCA9IDE7Ci0KKwljb3VudCA9IGF0b21pY19yZWFkKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCWlmICh1bmxpa2VseShoLT5maWZvX3JlY2VudGx5X2Z1bGwpICYmIGNvdW50IDwgNSkKKwkJaW9fbWF5X2JlX3N0YWxsZWQgPSAxOwogCiAJZGlhbF91cF9sb2NrdXBfZGV0ZWN0aW9uX29uX2Z3X2ZsYXNoX2NvbXBsZXRlKGMtPmgsIGMpOwogCWlmIChsaWtlbHkoYy0+Y21kX3R5cGUgPT0gQ01EX0lPQUNDRUwxIHx8IGMtPmNtZF90eXBlID09IENNRF9TQ1NJCkBAIC01NzY1LDIyICs1NjY1LDIwIEBACiAKIAljbWQtPkNvbW1hbmRIZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CiAJY21kLT5Db21tYW5kSGVhZGVyLlNHTGlzdCA9IDA7Ci0JY21kLT5Db21tYW5kSGVhZGVyLlNHVG90YWwgPSAwOwotCWNtZC0+Q29tbWFuZEhlYWRlci5UYWcubG93ZXIgPSBwYWRkcjMyOwotCWNtZC0+Q29tbWFuZEhlYWRlci5UYWcudXBwZXIgPSAwOworCWNtZC0+Q29tbWFuZEhlYWRlci5TR1RvdGFsID0gY3B1X3RvX2xlMTYoMCk7CisJY21kLT5Db21tYW5kSGVhZGVyLnRhZyA9IHBhZGRyMzI7CiAJbWVtc2V0KCZjbWQtPkNvbW1hbmRIZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgMCwgOCk7CiAKIAljbWQtPlJlcXVlc3QuQ0RCTGVuID0gMTY7Ci0JY21kLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IFRZUEVfTVNHOwotCWNtZC0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfSEVBRE9GUVVFVUU7Ci0JY21kLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9OT05FOworCWNtZC0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCVRZUEVfQVRUUl9ESVIoVFlQRV9NU0csIEFUVFJfSEVBRE9GUVVFVUUsIFhGRVJfTk9ORSk7CiAJY21kLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLwogCWNtZC0+UmVxdWVzdC5DREJbMF0gPSBvcGNvZGU7CiAJY21kLT5SZXF1ZXN0LkNEQlsxXSA9IHR5cGU7CiAJbWVtc2V0KCZjbWQtPlJlcXVlc3QuQ0RCWzJdLCAwLCAxNCk7IC8qIHJlc3Qgb2YgdGhlIENEQiBpcyByZXNlcnZlZCAqLwotCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkFkZHIubG93ZXIgPSBwYWRkcjMyICsgc2l6ZW9mKCpjbWQpOwotCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkFkZHIudXBwZXIgPSAwOwotCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkxlbiA9IHNpemVvZihzdHJ1Y3QgRXJyb3JJbmZvKTsKKwljbWQtPkVycm9yRGVzY3JpcHRvci5BZGRyID0KKwkJCWNwdV90b19sZTY0KChwYWRkcjMyICsgc2l6ZW9mKCpjbWQpKSk7CisJY21kLT5FcnJvckRlc2NyaXB0b3IuTGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pKTsKIAogCXdyaXRlbChwYWRkcjMyLCB2YWRkciArIFNBNV9SRVFVRVNUX1BPUlRfT0ZGU0VUKTsKIApAQCAtNTgxOCw3ICs1NzE2LDcgQEAKICNkZWZpbmUgaHBzYV9ub29wKHApIGhwc2FfbWVzc2FnZShwLCAzLCAwKQogCiBzdGF0aWMgaW50IGhwc2FfY29udHJvbGxlcl9oYXJkX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCXZvaWQgKiBfX2lvbWVtIHZhZGRyLCB1MzIgdXNlX2Rvb3JiZWxsKQorCXZvaWQgX19pb21lbSAqdmFkZHIsIHUzMiB1c2VfZG9vcmJlbGwpCiB7CiAJdTE2IHBtY3NyOwogCWludCBwb3M7CkBAIC02MDU2LDcgKzU5NTQsNyBAQAogICogICB0aGUgaW8gZnVuY3Rpb25zLgogICogICBUaGlzIGlzIGZvciBkZWJ1ZyBvbmx5LgogICovCi1zdGF0aWMgdm9pZCBwcmludF9jZmdfdGFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgQ2ZnVGFibGUgKnRiKQorc3RhdGljIHZvaWQgcHJpbnRfY2ZnX3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKnRiKQogewogI2lmZGVmIEhQU0FfREVCVUcKIAlpbnQgaTsKQEAgLTYzMjMsMTEgKzYyMjEsMTEgQEAKIAloLT5tYXhfY21kX3NnX2VudHJpZXMgPSAzMTsKIAlpZiAoaC0+bWF4c2dlbnRyaWVzID4gNTEyKSB7CiAJCWgtPm1heF9jbWRfc2dfZW50cmllcyA9IDMyOwotCQloLT5jaGFpbnNpemUgPSBoLT5tYXhzZ2VudHJpZXMgLSBoLT5tYXhfY21kX3NnX2VudHJpZXMgKyAxOworCQloLT5jaGFpbnNpemUgPSBoLT5tYXhzZ2VudHJpZXMgLSBoLT5tYXhfY21kX3NnX2VudHJpZXM7CiAJCWgtPm1heHNnZW50cmllcy0tOyAvKiBzYXZlIG9uZSBmb3IgY2hhaW4gcG9pbnRlciAqLwogCX0gZWxzZSB7Ci0JCWgtPm1heHNnZW50cmllcyA9IDMxOyAvKiBkZWZhdWx0IHRvIHRyYWRpdGlvbmFsIHZhbHVlcyAqLwogCQloLT5jaGFpbnNpemUgPSAwOworCQloLT5tYXhzZ2VudHJpZXMgPSAzMTsgLyogZGVmYXVsdCB0byB0cmFkaXRpb25hbCB2YWx1ZXMgKi8KIAl9CiAKIAkvKiBGaW5kIG91dCB3aGF0IHRhc2sgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZCBhbmQgY2FjaGUgKi8KQEAgLTY0NTYsMTUgKzYzNTQsMTUgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyAocGNpX2Rpc2FibGVfZGV2aWNlIG1heSBkaXNhYmxlIHRoaXMpICovCi0JcGNpX3NldF9tYXN0ZXIoaC0+cGRldik7Ci0KIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGgtPnBkZXYsIEhQU0EpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LAogCQkJImNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KKworCXBjaV9zZXRfbWFzdGVyKGgtPnBkZXYpOworCiAJaHBzYV9pbnRlcnJ1cHRfbW9kZShoKTsKIAllcnIgPSBocHNhX3BjaV9maW5kX21lbW9yeV9CQVIoaC0+cGRldiwgJmgtPnBhZGRyKTsKIAlpZiAoZXJyKQpAQCAtNjU0NCw3ICs2NDQyLDkgQEAKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgZGV2aWNlLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCiAJLyogUmVzZXQgdGhlIGNvbnRyb2xsZXIgd2l0aCBhIFBDSSBwb3dlci1jeWNsZSBvciB2aWEgZG9vcmJlbGwgKi8KIAlyYyA9IGhwc2Ffa2R1bXBfaGFyZF9yZXNldF9jb250cm9sbGVyKHBkZXYpOwogCkBAIC03NDMxLDEzICs3MzMxLDEyIEBACiAJCQljcC0+aG9zdF9jb250ZXh0X2ZsYWdzID0gSU9BQ0NFTDFfSENGTEFHU19DSVNTX0ZPUk1BVDsKIAkJCWNwLT50aW1lb3V0X3NlYyA9IDA7CiAJCQljcC0+UmVwbHlRdWV1ZSA9IDA7Ci0JCQljcC0+VGFnLmxvd2VyID0gKGkgPDwgRElSRUNUX0xPT0tVUF9TSElGVCkgfAotCQkJCQkJRElSRUNUX0xPT0tVUF9CSVQ7Ci0JCQljcC0+VGFnLnVwcGVyID0gMDsKLQkJCWNwLT5ob3N0X2FkZHIubG93ZXIgPQotCQkJCSh1MzIpIChoLT5pb2FjY2VsX2NtZF9wb29sX2RoYW5kbGUgKworCQkJY3AtPnRhZyA9CisJCQkJY3B1X3RvX2xlNjQoKGkgPDwgRElSRUNUX0xPT0tVUF9TSElGVCkgfAorCQkJCQkJRElSRUNUX0xPT0tVUF9CSVQpOworCQkJY3AtPmhvc3RfYWRkciA9CisJCQkJY3B1X3RvX2xlNjQoaC0+aW9hY2NlbF9jbWRfcG9vbF9kaGFuZGxlICsKIAkJCQkJKGkgKiBzaXplb2Yoc3RydWN0IGlvX2FjY2VsMV9jbWQpKSk7Ci0JCQljcC0+aG9zdF9hZGRyLnVwcGVyID0gMDsKIAkJfQogCX0gZWxzZSBpZiAodHJhbnNfc3VwcG9ydCAmIENGR1RCTF9UcmFuc19pb19hY2NlbDIpIHsKIAkJdTY0IGNmZ19vZmZzZXQsIGNmZ19iYXNlX2FkZHJfaW5kZXg7CkBAIC03NzExLDcgKzc2MTAsNyBAQAogCVZFUklGWV9PRkZTRVQodGltZW91dF9zZWMsIDB4NjIpOwogCVZFUklGWV9PRkZTRVQoUmVwbHlRdWV1ZSwgMHg2NCk7CiAJVkVSSUZZX09GRlNFVChyZXNlcnZlZDksIDB4NjUpOwotCVZFUklGWV9PRkZTRVQoVGFnLCAweDY4KTsKKwlWRVJJRllfT0ZGU0VUKHRhZywgMHg2OCk7CiAJVkVSSUZZX09GRlNFVChob3N0X2FkZHIsIDB4NzApOwogCVZFUklGWV9PRkZTRVQoQ0lTU19MVU4sIDB4NzgpOwogCVZFUklGWV9PRkZTRVQoU0csIDB4NzggKyA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhLmggYi9kcml2ZXJzL3Njc2kvaHBzYS5oCmluZGV4IDI0NDcyY2UuLjhlMDZkOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHNhLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuaApAQCAtMTE4LDcgKzExOCw3IEBACiAJc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKmNmZ3RhYmxlOwogCWludAlpbnRlcnJ1cHRzX2VuYWJsZWQ7CiAJaW50IAltYXhfY29tbWFuZHM7Ci0JaW50CWNvbW1hbmRzX291dHN0YW5kaW5nOworCWF0b21pY190IGNvbW1hbmRzX291dHN0YW5kaW5nOwogIwlkZWZpbmUgUEVSRl9NT0RFX0lOVAkwCiAjCWRlZmluZSBET09SQkVMTF9JTlQJMQogIwlkZWZpbmUgU0lNUExFX01PREVfSU5UCTIKQEAgLTE2NCw3ICsxNjQsNyBAQAogCSAqLwogCXUzMiB0cmFuc19zdXBwb3J0OwogCXUzMiB0cmFuc19vZmZzZXQ7Ci0Jc3RydWN0IFRyYW5zVGFibGVfc3RydWN0ICp0cmFuc3RhYmxlOworCXN0cnVjdCBUcmFuc1RhYmxlX3N0cnVjdCBfX2lvbWVtICp0cmFuc3RhYmxlOwogCXVuc2lnbmVkIGxvbmcgdHJhbnNNZXRob2Q7CiAKIAkvKiBjYXAgY29uY3VycmVudCBwYXNzdGhydXMgYXQgc29tZSByZWFzb25hYmxlIG1heGltdW0gKi8KQEAgLTE4MSw3ICsxODEsNyBAQAogCXUzMiAqYmxvY2tGZXRjaFRhYmxlOwogCXUzMiAqaW9hY2NlbDFfYmxvY2tGZXRjaFRhYmxlOwogCXUzMiAqaW9hY2NlbDJfYmxvY2tGZXRjaFRhYmxlOwotCXUzMiAqaW9hY2NlbDJfYmZ0Ml9yZWdzOworCXUzMiBfX2lvbWVtICppb2FjY2VsMl9iZnQyX3JlZ3M7CiAJdW5zaWduZWQgY2hhciAqaGJhX2lucXVpcnlfZGF0YTsKIAl1MzIgZHJpdmVyX3N1cHBvcnQ7CiAJdTMyIGZ3X3N1cHBvcnQ7CkBAIC0xOTIsNyArMTkyLDcgQEAKIAl1NjQgbGFzdF9oZWFydGJlYXRfdGltZXN0YW1wOwogCXUzMiBoZWFydGJlYXRfc2FtcGxlX2ludGVydmFsOwogCWF0b21pY190IGZpcm13YXJlX2ZsYXNoX2luX3Byb2dyZXNzOwotCXUzMiAqbG9ja3VwX2RldGVjdGVkOworCXUzMiBfX3BlcmNwdSAqbG9ja3VwX2RldGVjdGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgbW9uaXRvcl9jdGxyX3dvcms7CiAJaW50IHJlbW92ZV9pbl9wcm9ncmVzczsKIAl1MzIgZmlmb19yZWNlbnRseV9mdWxsOwpAQCAtMzk1LDcgKzM5NSw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfcGVyZm9ybWFudF9jb21wbGV0ZWQoc3RydWN0IGN0bHJfaW5mbyAqaCwgdTggcSkKIHsKIAlzdHJ1Y3QgcmVwbHlfcXVldWVfYnVmZmVyICpycSA9ICZoLT5yZXBseV9xdWV1ZVtxXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCByZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CiAKIAkvKiBtc2kgYXV0byBjbGVhcnMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdC4gKi8KIAlpZiAoIShoLT5tc2lfdmVjdG9yIHx8IGgtPm1zaXhfdmVjdG9yKSkgewpAQCAtNDEzLDkgKzQxMyw3IEBACiAJaWYgKChycS0+aGVhZFtycS0+Y3VycmVudF9lbnRyeV0gJiAxKSA9PSBycS0+d3JhcGFyb3VuZCkgewogCQlyZWdpc3Rlcl92YWx1ZSA9IHJxLT5oZWFkW3JxLT5jdXJyZW50X2VudHJ5XTsKIAkJcnEtPmN1cnJlbnRfZW50cnkrKzsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmctLTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCQlhdG9taWNfZGVjKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAJfSBlbHNlIHsKIAkJcmVnaXN0ZXJfdmFsdWUgPSBGSUZPX0VNUFRZOwogCX0KQEAgLTQzMywxMSArNDMxLDcgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgU0E1X2ZpZm9fZnVsbChzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewotCWlmIChoLT5jb21tYW5kc19vdXRzdGFuZGluZyA+PSBoLT5tYXhfY29tbWFuZHMpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci0KKwlyZXR1cm4gYXRvbWljX3JlYWQoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKSA+PSBoLT5tYXhfY29tbWFuZHM7CiB9CiAvKgogICogICByZXR1cm5zIHZhbHVlIHJlYWQgZnJvbSBoYXJkd2FyZS4KQEAgLTQ0OCwxMyArNDQyLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlCiAJCT0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfUkVQTFlfUE9SVF9PRkZTRVQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAocmVnaXN0ZXJfdmFsdWUgIT0gRklGT19FTVBUWSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7Ci0JfQorCWlmIChyZWdpc3Rlcl92YWx1ZSAhPSBGSUZPX0VNUFRZKQorCQlhdG9taWNfZGVjKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZyk7CiAKICNpZmRlZiBIUFNBX0RFQlVHCiAJaWYgKHJlZ2lzdGVyX3ZhbHVlICE9IEZJRk9fRU1QVFkpCkBAIC01MTAsNyArNTAwLDYgQEAKIHsKIAl1NjQgcmVnaXN0ZXJfdmFsdWU7CiAJc3RydWN0IHJlcGx5X3F1ZXVlX2J1ZmZlciAqcnEgPSAmaC0+cmVwbHlfcXVldWVbcV07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUJVR19PTihxID49IGgtPm5yZXBseV9xdWV1ZXMpOwogCkBAIC01MjgsOSArNTE3LDcgQEAKIAkJd21iKCk7CiAJCXdyaXRlbCgocSA8PCAyNCkgfCBycS0+Y3VycmVudF9lbnRyeSwgaC0+dmFkZHIgKwogCQkJCUlPQUNDRUxfTU9ERTFfQ09OU1VNRVJfSU5ERVgpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJCWF0b21pY19kZWMoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKTsKIAl9CiAJcmV0dXJuICh1bnNpZ25lZCBsb25nKSByZWdpc3Rlcl92YWx1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKaW5kZXggYjUxMjVkYy4uY2I5ODhjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKQEAgLTI1Miw3ICsyNTIsNyBAQAogCXU4IExVTkxpc3RMZW5ndGhbNF07CiAJdTggZXh0ZW5kZWRfcmVzcG9uc2VfZmxhZzsKIAl1OCByZXNlcnZlZFszXTsKLQlzdHJ1Y3QgZXh0X3JlcG9ydF9sdW5fZW50cnkgTFVOW0hQU0FfTUFYX0xVTl07CisJc3RydWN0IGV4dF9yZXBvcnRfbHVuX2VudHJ5IExVTltIUFNBX01BWF9QSFlTX0xVTl07CiB9OwogCiBzdHJ1Y3QgU2Vuc2VTdWJzeXN0ZW1faW5mbyB7CkBAIC0zMTQsMjggKzMxNCwzNiBAQAogCXU4ICAgICAgICAgICAgICBSZXBseVF1ZXVlOwogCXU4ICAgICAgICAgICAgICBTR0xpc3Q7CiAJdTE2ICAgICAgICAgICAgIFNHVG90YWw7Ci0Jc3RydWN0IHZhbHMzMiAgICAgVGFnOworCXU2NAkJdGFnOwogCXVuaW9uIExVTkFkZHIgICAgIExVTjsKIH07CiAKIHN0cnVjdCBSZXF1ZXN0QmxvY2sgewogCXU4ICAgQ0RCTGVuOwotCXN0cnVjdCB7Ci0JCXU4IFR5cGU6MzsKLQkJdTggQXR0cmlidXRlOjM7Ci0JCXU4IERpcmVjdGlvbjoyOwotCX0gVHlwZTsKKwkvKgorCSAqIHR5cGVfYXR0cl9kaXI6CisJICogdHlwZTogbG93IDMgYml0cworCSAqIGF0dHI6IG1pZGRsZSAzIGJpdHMKKwkgKiBkaXI6IGhpZ2ggMiBiaXRzCisJICovCisJdTgJdHlwZV9hdHRyX2RpcjsKKyNkZWZpbmUgVFlQRV9BVFRSX0RJUih0LCBhLCBkKSAoKCgoZCkgJiAweDAzKSA8PCA2KSB8XAorCQkJCSgoKGEpICYgMHgwNykgPDwgMykgfFwKKwkJCQkoKHQpICYgMHgwNykpCisjZGVmaW5lIEdFVF9UWVBFKHRhZCkgKCh0YWQpICYgMHgwNykKKyNkZWZpbmUgR0VUX0FUVFIodGFkKSAoKCh0YWQpID4+IDMpICYgMHgwNykKKyNkZWZpbmUgR0VUX0RJUih0YWQpICgoKHRhZCkgPj4gNikgJiAweDAzKQogCXUxNiAgVGltZW91dDsKIAl1OCAgIENEQlsxNl07CiB9OwogCiBzdHJ1Y3QgRXJyRGVzY3JpcHRvciB7Ci0Jc3RydWN0IHZhbHMzMiBBZGRyOworCXU2NCBBZGRyOwogCXUzMiAgTGVuOwogfTsKIAogc3RydWN0IFNHRGVzY3JpcHRvciB7Ci0Jc3RydWN0IHZhbHMzMiBBZGRyOworCXU2NCBBZGRyOwogCXUzMiAgTGVuOwogCXUzMiAgRXh0OwogfTsKQEAgLTQzNCw4ICs0NDIsOCBAQAogCXUxNiB0aW1lb3V0X3NlYzsJCS8qIDB4NjIgLSAweDYzICovCiAJdTggIFJlcGx5UXVldWU7CQkJLyogMHg2NCAqLwogCXU4ICByZXNlcnZlZDlbM107CQkvKiAweDY1IC0gMHg2NyAqLwotCXN0cnVjdCB2YWxzMzIgVGFnOwkJLyogMHg2OCAtIDB4NkYgKi8KLQlzdHJ1Y3QgdmFsczMyIGhvc3RfYWRkcjsJLyogMHg3MCAtIDB4NzcgKi8KKwl1NjQgdGFnOwkJCS8qIDB4NjggLSAweDZGICovCisJdTY0IGhvc3RfYWRkcjsJCQkvKiAweDcwIC0gMHg3NyAqLwogCXU4ICBDSVNTX0xVTls4XTsJCS8qIDB4NzggLSAweDdGICovCiAJc3RydWN0IFNHRGVzY3JpcHRvciBTR1tJT0FDQ0VMMV9NQVhTR0VOVFJJRVNdOwogfSBfX2FsaWduZWQoSU9BQ0NFTDFfQ09NTUFORExJU1RfQUxJR05NRU5UKTsKQEAgLTU1NSw4ICs1NjMsOCBAQAogCXU4IHJlc2VydmVkMTsJCS8qIGJ5dGUgMyBSZXNlcnZlZCAqLwogCXUzMiBpdF9uZXh1czsJCS8qIFNDU0kgSS1UIE5leHVzICovCiAJdTggbHVuX2lkWzhdOwkJLyogTFVOIElEIGZvciBUTUYgcmVxdWVzdCAqLwotCXN0cnVjdCB2YWxzMzIgVGFnOwkvKiBjY2lzcyB0YWcgYXNzb2NpYXRlZCB3LyByZXF1ZXN0ICovCi0Jc3RydWN0IHZhbHMzMiBhYm9ydF90YWc7LyogY2Npc3MgdGFnIG9mIFNDU0kgY21kIG9yIHRhc2sgdG8gYWJvcnQgKi8KKwl1NjQgdGFnOwkJLyogY2Npc3MgdGFnIGFzc29jaWF0ZWQgdy8gcmVxdWVzdCAqLworCXU2NCBhYm9ydF90YWc7CQkvKiBjY2lzcyB0YWcgb2YgU0NTSSBjbWQgb3IgdGFzayB0byBhYm9ydCAqLwogCXU2NCBlcnJvcl9wdHI7CQkvKiBFcnJvciBQb2ludGVyICovCiAJdTMyIGVycm9yX2xlbjsJCS8qIEVycm9yIExlbmd0aCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuYwppbmRleCBkZWRiNjJjLi5lOTk1MjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCkBAIC0xMTE4LDE3ICsxMTE4LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQgaHB0aW9wX2FkanVzdF9kaXNrX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCQkJICBpbnQgcXVldWVfZGVwdGgsIGludCByZWFzb24pCisJCQkJCSAgaW50IHF1ZXVlX2RlcHRoKQogewogCXN0cnVjdCBocHRpb3BfaGJhICpoYmEgPSAoc3RydWN0IGhwdGlvcF9oYmEgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKIAotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJaWYgKHF1ZXVlX2RlcHRoID4gaGJhLT5tYXhfcmVxdWVzdHMpCiAJCXF1ZXVlX2RlcHRoID0gaGJhLT5tYXhfcmVxdWVzdHM7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBxdWV1ZV9kZXB0aCk7Ci0JcmV0dXJuIHF1ZXVlX2RlcHRoOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxdWV1ZV9kZXB0aCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGhwdGlvcF9zaG93X3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCmluZGV4IDU5OGM0MmMuLmY1OGM2ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKQEAgLTE2NDMsMTkgKzE2NDMsOSBAQAogCWludF90b19zY3NpbHVuKGNtbmQtPmRldmljZS0+bHVuLCAmdmZjX2NtZC0+aXUubHVuKTsKIAltZW1jcHkodmZjX2NtZC0+aXUuY2RiLCBjbW5kLT5jbW5kLCBjbW5kLT5jbWRfbGVuKTsKIAotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21uZCwgdGFnKSkgewotCQl2ZmNfY21kLT50YXNrX3RhZyA9IGNwdV90b19iZTY0KHRhZ1sxXSk7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgTVNHX1NJTVBMRV9UQUc6Ci0JCQl2ZmNfY21kLT5pdS5wcmlfdGFza19hdHRyID0gSUJNVkZDX1NJTVBMRV9UQVNLOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX0hFQURfVEFHOgotCQkJdmZjX2NtZC0+aXUucHJpX3Rhc2tfYXR0ciA9IElCTVZGQ19IRUFEX09GX1FVRVVFOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX09SREVSRURfVEFHOgotCQkJdmZjX2NtZC0+aXUucHJpX3Rhc2tfYXR0ciA9IElCTVZGQ19PUkRFUkVEX1RBU0s7Ci0JCQlicmVhazsKLQkJfTsKKwlpZiAoY21uZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkgeworCQl2ZmNfY21kLT50YXNrX3RhZyA9IGNwdV90b19iZTY0KGNtbmQtPnRhZyk7CisJCXZmY19jbWQtPml1LnByaV90YXNrX2F0dHIgPSBJQk1WRkNfU0lNUExFX1RBU0s7CiAJfQogCiAJaWYgKGxpa2VseSghKHJjID0gaWJtdmZjX21hcF9zZ19kYXRhKGNtbmQsIGV2dCwgdmZjX2NtZCwgdmhvc3QtPmRldikpKSkKQEAgLTI4OTcsMTIgKzI4ODcsNiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX0RJU0spCiAJCXNkZXYtPmFsbG93X3Jlc3RhcnQgPSAxOwotCi0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgTVNHX1NJTVBMRV9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JfSBlbHNlCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtMjkxNiw0MCArMjkwMCwxMiBAQAogICogUmV0dXJuIHZhbHVlOgogICogCWFjdHVhbCBkZXB0aCBzZXQKICAqKi8KLXN0YXRpYyBpbnQgaWJtdmZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsCi0JCQkJICAgICBpbnQgcmVhc29uKQorc3RhdGljIGludCBpYm12ZmNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCkKIHsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCWlmIChxZGVwdGggPiBJQk1WRkNfTUFYX0NNRFNfUEVSX0xVTikKIAkJcWRlcHRoID0gSUJNVkZDX01BWF9DTURTX1BFUl9MVU47CiAKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBxZGVwdGgpOwotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLQotLyoqCi0gKiBpYm12ZmNfY2hhbmdlX3F1ZXVlX3R5cGUgLSBDaGFuZ2UgdGhlIGRldmljZSdzIHF1ZXVlIHR5cGUKLSAqIEBzZGV2OgkJc2NzaSBkZXZpY2Ugc3RydWN0Ci0gKiBAdGFnX3R5cGU6CXR5cGUgb2YgdGFncyB0byB1c2UKLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKiAJYWN0dWFsIHF1ZXVlIHR5cGUgc2V0Ci0gKiovCi1zdGF0aWMgaW50IGlibXZmY19jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKLXsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7Ci0KLQkJaWYgKHRhZ190eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnX3R5cGUgPSAwOwotCi0JcmV0dXJuIHRhZ190eXBlOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiBzdGF0aWMgc3NpemVfdCBpYm12ZmNfc2hvd19ob3N0X3BhcnRpdGlvbl9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTMxMzMsNyArMzA4OSw3IEBACiAJLnRhcmdldF9hbGxvYyA9IGlibXZmY190YXJnZXRfYWxsb2MsCiAJLnNjYW5fZmluaXNoZWQgPSBpYm12ZmNfc2Nhbl9maW5pc2hlZCwKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gaWJtdmZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUgPSBpYm12ZmNfY2hhbmdlX3F1ZXVlX3R5cGUsCisJLmNoYW5nZV9xdWV1ZV90eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkuY21kX3Blcl9sdW4gPSAxNiwKIAkuY2FuX3F1ZXVlID0gSUJNVkZDX01BWF9SRVFVRVNUU19ERUZBVUxULAogCS50aGlzX2lkID0gLTEsCkBAIC0zMTQxLDYgKzMwOTcsOCBAQAogCS5tYXhfc2VjdG9ycyA9IElCTVZGQ19NQVhfU0VDVE9SUywKIAkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuc2hvc3RfYXR0cnMgPSBpYm12ZmNfYXR0cnMsCisJLnVzZV9ibGtfdGFncyA9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoID0gMSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwppbmRleCA3YjIzZjIxLi5hY2VhNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwpAQCAtMTkyOSw3ICsxOTI5LDYgQEAKIAkJYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMTIwICogSFopOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNob3N0LT5jbWRfcGVyX2x1bik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NDIsMTcgKzE5NDEsMTEgQEAKICAqIFJldHVybiB2YWx1ZToKICAqIAlhY3R1YWwgZGVwdGggc2V0CiAgKiovCi1zdGF0aWMgaW50IGlibXZzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsCi0JCQkJICAgICAgIGludCByZWFzb24pCitzdGF0aWMgaW50IGlibXZzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAocWRlcHRoID4gSUJNVlNDU0lfTUFYX0NNRFNfUEVSX0xVTikKIAkJcWRlcHRoID0gSUJNVlNDU0lfTUFYX0NNRFNfUEVSX0xVTjsKLQotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHFkZXB0aCk7Ci0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCAyYTk1NzhjLi41NDAyOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC0zOTQyLDggKzM5NDIsOSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzZ2xpc3QtPm51bV9kbWFfc2cgPSBwY2lfbWFwX3NnKGlvYV9jZmctPnBkZXYsIHNnbGlzdC0+c2NhdHRlcmxpc3QsCi0JCQkJCXNnbGlzdC0+bnVtX3NnLCBETUFfVE9fREVWSUNFKTsKKwlzZ2xpc3QtPm51bV9kbWFfc2cgPSBkbWFfbWFwX3NnKCZpb2FfY2ZnLT5wZGV2LT5kZXYsCisJCQkJCXNnbGlzdC0+c2NhdHRlcmxpc3QsIHNnbGlzdC0+bnVtX3NnLAorCQkJCQlETUFfVE9fREVWSUNFKTsKIAogCWlmICghc2dsaXN0LT5udW1fZG1hX3NnKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKQEAgLTQzMjcsMTYgKzQzMjgsMTIgQEAKICAqIFJldHVybiB2YWx1ZToKICAqIAlhY3R1YWwgZGVwdGggc2V0CiAgKiovCi1zdGF0aWMgaW50IGlwcl9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLAotCQkJCSAgaW50IHJlYXNvbikKK3N0YXRpYyBpbnQgaXByX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gKHN0cnVjdCBpcHJfaW9hX2NmZyAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlczsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOwogCi0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCXJlcyA9IChzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICopc2Rldi0+aG9zdGRhdGE7CiAKQEAgLTQzNDQsNyArNDM0MSw3IEBACiAJCXFkZXB0aCA9IElQUl9NQVhfQ01EX1BFUl9BVEFfTFVOOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOworCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CiAJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwogfQogCkBAIC00MzY0LDI0ICs0MzYxLDEwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCXJlcyA9IChzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICopc2Rldi0+aG9zdGRhdGE7Ci0KLQlpZiAocmVzKSB7Ci0JCWlmIChpcHJfaXNfZ3Njc2kocmVzKSAmJiBzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCQkvKgotCQkJICogV2UgZG9uJ3QgYm90aGVyIHF1aWVzY2luZyB0aGUgZGV2aWNlIGhlcmUgc2luY2UgdGhlCi0JCQkgKiBhZGFwdGVyIGZpcm13YXJlIGRvZXMgaXQgZm9yIHVzLgotCQkJICovCi0JCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7Ci0KLQkJCWlmICh0YWdfdHlwZSkKLQkJCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCQllbHNlCi0JCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCX0gZWxzZQotCQkJdGFnX3R5cGUgPSAwOwotCX0gZWxzZQorCWlmIChyZXMgJiYgaXByX2lzX2dzY3NpKHJlcykpCisJCXRhZ190eXBlID0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZShzZGV2LCB0YWdfdHlwZSk7CisJZWxzZQogCQl0YWdfdHlwZSA9IDA7Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJcmV0dXJuIHRhZ190eXBlOwogfQpAQCAtNDc2NSwxMCArNDc0OCwxMCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAKIAkJaWYgKGFwKSB7Ci0JCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBJUFJfTUFYX0NNRF9QRVJfQVRBX0xVTik7CisJCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBJUFJfTUFYX0NNRF9QRVJfQVRBX0xVTik7CiAJCQlhdGFfc2FzX3NsYXZlX2NvbmZpZ3VyZShzZGV2LCBhcCk7Ci0JCX0gZWxzZQotCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOworCQl9CisKIAkJaWYgKGlvYV9jZmctPnNpczY0KQogCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiUmVzb3VyY2UgcGF0aDogJXNcbiIsCiAJCQkJICAgIGlwcl9mb3JtYXRfcmVzX3BhdGgoaW9hX2NmZywKQEAgLTU1ODUsNyArNTU2OCw3IEBACiAJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CiAJaWYgKG5zZWcgPCAwKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsICJwY2lfbWFwX3NnIGZhaWxlZCFcbiIpOworCQkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LCAic2NzaV9kbWFfbWFwIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC01NjM2LDcgKzU2MTksNyBAQAogCiAJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CiAJaWYgKG5zZWcgPCAwKSB7Ci0JCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgInBjaV9tYXBfc2cgZmFpbGVkIVxuIik7CisJCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgInNjc2lfZG1hX21hcCBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNTY3MywzNSArNTY1Niw2IEBACiB9CiAKIC8qKgotICogaXByX2dldF90YXNrX2F0dHJpYnV0ZXMgLSBUcmFuc2xhdGUgU1BJIFEtVGFnIHRvIHRhc2sgYXR0cmlidXRlcwotICogQHNjc2lfY21kOglzY3NpIGNvbW1hbmQgc3RydWN0Ci0gKgotICogUmV0dXJuIHZhbHVlOgotICogCXRhc2sgYXR0cmlidXRlcwotICoqLwotc3RhdGljIHU4IGlwcl9nZXRfdGFza19hdHRyaWJ1dGVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kKQotewotCXU4IHRhZ1syXTsKLQl1OCByYyA9IElQUl9GTEFHU19MT19VTlRBR0dFRF9UQVNLOwotCi0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY3NpX2NtZCwgdGFnKSkgewotCQlzd2l0Y2ggKHRhZ1swXSkgewotCQljYXNlIE1TR19TSU1QTEVfVEFHOgotCQkJcmMgPSBJUFJfRkxBR1NfTE9fU0lNUExFX1RBU0s7Ci0JCQlicmVhazsKLQkJY2FzZSBNU0dfSEVBRF9UQUc6Ci0JCQlyYyA9IElQUl9GTEFHU19MT19IRUFEX09GX1FfVEFTSzsKLQkJCWJyZWFrOwotCQljYXNlIE1TR19PUkRFUkVEX1RBRzoKLQkJCXJjID0gSVBSX0ZMQUdTX0xPX09SREVSRURfVEFTSzsKLQkJCWJyZWFrOwotCQl9OwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCiAgKiBpcHJfZXJwX2RvbmUgLSBQcm9jZXNzIGNvbXBsZXRpb24gb2YgRVJQIGZvciBhIGRldmljZQogICogQGlwcl9jbWQ6CQlpcHIgY29tbWFuZCBzdHJ1Y3QKICAqCkBAIC02MjM2LDcgKzYxOTAsMTAgQEAKIAkJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fREVMQVlfQUZURVJfUlNUOwogCQl9CiAJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fQUxJR05FRF9CRlI7Ci0JCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBpcHJfZ2V0X3Rhc2tfYXR0cmlidXRlcyhzY3NpX2NtZCk7CisJCWlmIChzY3NpX2NtZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkKKwkJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fU0lNUExFX1RBU0s7CisJCWVsc2UKKwkJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fVU5UQUdHRURfVEFTSzsKIAl9CiAKIAlpZiAoc2NzaV9jbWQtPmNtbmRbMF0gPj0gMHhDMCAmJgpAQCAtNjM1Nyw2ICs2MzE0LDcgQEAKIAkuc2Rldl9hdHRycyA9IGlwcl9kZXZfYXR0cnMsCiAJLnByb2NfbmFtZSA9IElQUl9OQU1FLAogCS5ub193cml0ZV9zYW1lID0gMSwKKwkudXNlX2Jsa190YWdzID0gMSwKIH07CiAKIC8qKgpAQCAtODQzMSw3ICs4Mzg5LDcgQEAKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSBpcHJfY21kLT5pb2FfY2ZnOwogCXN0cnVjdCBpcHJfc2dsaXN0ICpzZ2xpc3QgPSBpb2FfY2ZnLT51Y29kZV9zZ2xpc3Q7CiAKLQlwY2lfdW5tYXBfc2coaW9hX2NmZy0+cGRldiwgc2dsaXN0LT5zY2F0dGVybGlzdCwKKwlkbWFfdW5tYXBfc2coJmlvYV9jZmctPnBkZXYtPmRldiwgc2dsaXN0LT5zY2F0dGVybGlzdCwKIAkJICAgICBzZ2xpc3QtPm51bV9zZywgRE1BX1RPX0RFVklDRSk7CiAKIAlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9yZXNldF9hbGVydDsKQEAgLTg4NzEsNyArODgyOSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgSVBSX05VTV9DTURfQkxLUzsgaSsrKSB7CiAJCWlmIChpb2FfY2ZnLT5pcHJfY21uZF9saXN0W2ldKQotCQkJcGNpX3Bvb2xfZnJlZShpb2FfY2ZnLT5pcHJfY21kX3Bvb2wsCisJCQlkbWFfcG9vbF9mcmVlKGlvYV9jZmctPmlwcl9jbWRfcG9vbCwKIAkJCQkgICAgICBpb2FfY2ZnLT5pcHJfY21uZF9saXN0W2ldLAogCQkJCSAgICAgIGlvYV9jZmctPmlwcl9jbW5kX2xpc3RfZG1hW2ldKTsKIApAQCAtODg3OSw3ICs4ODM3LDcgQEAKIAl9CiAKIAlpZiAoaW9hX2NmZy0+aXByX2NtZF9wb29sKQotCQlwY2lfcG9vbF9kZXN0cm95KGlvYV9jZmctPmlwcl9jbWRfcG9vbCk7CisJCWRtYV9wb29sX2Rlc3Ryb3koaW9hX2NmZy0+aXByX2NtZF9wb29sKTsKIAogCWtmcmVlKGlvYV9jZmctPmlwcl9jbW5kX2xpc3QpOwogCWtmcmVlKGlvYV9jZmctPmlwcl9jbW5kX2xpc3RfZG1hKTsKQEAgLTg5MDAsMjUgKzg4NTgsMjQgQEAKIAlpbnQgaTsKIAogCWtmcmVlKGlvYV9jZmctPnJlc19lbnRyaWVzKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsIHNpemVvZihzdHJ1Y3QgaXByX21pc2NfY2JzKSwKLQkJCSAgICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmlvYV9jZmctPnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBpcHJfbWlzY19jYnMpLAorCQkJICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CiAJaXByX2ZyZWVfY21kX2Jsa3MoaW9hX2NmZyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaW9hX2NmZy0+aHJycV9udW07IGkrKykKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LAotCQkJCQlzaXplb2YodTMyKSAqIGlvYV9jZmctPmhycnFbaV0uc2l6ZSwKLQkJCQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycSwKLQkJCQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmaW9hX2NmZy0+cGRldi0+ZGV2LAorCQkJCSAgc2l6ZW9mKHUzMikgKiBpb2FfY2ZnLT5ocnJxW2ldLnNpemUsCisJCQkJICBpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxLAorCQkJCSAgaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOwogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKLQkJCSAgICBpb2FfY2ZnLT51LmNmZ190YWJsZSwKLQkJCSAgICBpb2FfY2ZnLT5jZmdfdGFibGVfZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmaW9hX2NmZy0+cGRldi0+ZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKKwkJCSAgaW9hX2NmZy0+dS5jZmdfdGFibGUsIGlvYV9jZmctPmNmZ190YWJsZV9kbWEpOwogCiAJZm9yIChpID0gMDsgaSA8IElQUl9OVU1fSENBTVM7IGkrKykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgaXByX2hvc3RyY2IpLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiW2ldLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiX2RtYVtpXSk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZpb2FfY2ZnLT5wZGV2LT5kZXYsCisJCQkJICBzaXplb2Yoc3RydWN0IGlwcl9ob3N0cmNiKSwKKwkJCQkgIGlvYV9jZmctPmhvc3RyY2JbaV0sCisJCQkJICBpb2FfY2ZnLT5ob3N0cmNiX2RtYVtpXSk7CiAJfQogCiAJaXByX2ZyZWVfZHVtcChpb2FfY2ZnKTsKQEAgLTg5NzksNyArODkzNiw3IEBACiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlpbnQgaSwgZW50cmllc19lYWNoX2hycnEsIGhycnFfaWQgPSAwOwogCi0JaW9hX2NmZy0+aXByX2NtZF9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKElQUl9OQU1FLCBpb2FfY2ZnLT5wZGV2LAorCWlvYV9jZmctPmlwcl9jbWRfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZShJUFJfTkFNRSwgJmlvYV9jZmctPnBkZXYtPmRldiwKIAkJCQkJCXNpemVvZihzdHJ1Y3QgaXByX2NtbmQpLCA1MTIsIDApOwogCiAJaWYgKCFpb2FfY2ZnLT5pcHJfY21kX3Bvb2wpCkBAIC05MDI5LDcgKzg5ODYsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBJUFJfTlVNX0NNRF9CTEtTOyBpKyspIHsKLQkJaXByX2NtZCA9IHBjaV9wb29sX2FsbG9jKGlvYV9jZmctPmlwcl9jbWRfcG9vbCwgR0ZQX0tFUk5FTCwgJmRtYV9hZGRyKTsKKwkJaXByX2NtZCA9IGRtYV9wb29sX2FsbG9jKGlvYV9jZmctPmlwcl9jbWRfcG9vbCwgR0ZQX0tFUk5FTCwgJmRtYV9hZGRyKTsKIAogCQlpZiAoIWlwcl9jbWQpIHsKIAkJCWlwcl9mcmVlX2NtZF9ibGtzKGlvYV9jZmcpOwpAQCAtOTEwMCw5ICs5MDU3LDEwIEBACiAJCWlvYV9jZmctPnJlc19lbnRyaWVzW2ldLmlvYV9jZmcgPSBpb2FfY2ZnOwogCX0KIAotCWlvYV9jZmctPnZwZF9jYnMgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBpcHJfbWlzY19jYnMpLAotCQkJCQkJJmlvYV9jZmctPnZwZF9jYnNfZG1hKTsKKwlpb2FfY2ZnLT52cGRfY2JzID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXByX21pc2NfY2JzKSwKKwkJCQkJICAgICAgJmlvYV9jZmctPnZwZF9jYnNfZG1hLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAogCWlmICghaW9hX2NmZy0+dnBkX2NicykKIAkJZ290byBvdXRfZnJlZV9yZXNfZW50cmllczsKQEAgLTkxMTEsMTMgKzkwNjksMTQgQEAKIAkJZ290byBvdXRfZnJlZV92cGRfY2JzOwogCiAJZm9yIChpID0gMDsgaSA8IGlvYV9jZmctPmhycnFfbnVtOyBpKyspIHsKLQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsCisJCWlvYV9jZmctPmhycnFbaV0uaG9zdF9ycnEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKIAkJCQkJc2l6ZW9mKHUzMikgKiBpb2FfY2ZnLT5ocnJxW2ldLnNpemUsCi0JCQkJCSZpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxX2RtYSk7CisJCQkJCSZpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxX2RtYSwKKwkJCQkJR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKCFpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxKSAgewogCQkJd2hpbGUgKC0taSA+IDApCi0JCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LAorCQkJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsCiAJCQkJCXNpemVvZih1MzIpICogaW9hX2NmZy0+aHJycVtpXS5zaXplLAogCQkJCQlpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxLAogCQkJCQlpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxX2RtYSk7CkBAIC05MTI2LDE3ICs5MDg1LDE5IEBACiAJCWlvYV9jZmctPmhycnFbaV0uaW9hX2NmZyA9IGlvYV9jZmc7CiAJfQogCi0JaW9hX2NmZy0+dS5jZmdfdGFibGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2FfY2ZnLT5wZGV2LAotCQkJCQkJICAgIGlvYV9jZmctPmNmZ190YWJsZV9zaXplLAotCQkJCQkJICAgICZpb2FfY2ZnLT5jZmdfdGFibGVfZG1hKTsKKwlpb2FfY2ZnLT51LmNmZ190YWJsZSA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJICBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKKwkJCQkJCSAgJmlvYV9jZmctPmNmZ190YWJsZV9kbWEsCisJCQkJCQkgIEdGUF9LRVJORUwpOwogCiAJaWYgKCFpb2FfY2ZnLT51LmNmZ190YWJsZSkKIAkJZ290byBvdXRfZnJlZV9ob3N0X3JycTsKIAogCWZvciAoaSA9IDA7IGkgPCBJUFJfTlVNX0hDQU1TOyBpKyspIHsKLQkJaW9hX2NmZy0+aG9zdHJjYltpXSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYV9jZmctPnBkZXYsCi0JCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBpcHJfaG9zdHJjYiksCi0JCQkJCQkJICAgJmlvYV9jZmctPmhvc3RyY2JfZG1hW2ldKTsKKwkJaW9hX2NmZy0+aG9zdHJjYltpXSA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJCSBzaXplb2Yoc3RydWN0IGlwcl9ob3N0cmNiKSwKKwkJCQkJCQkgJmlvYV9jZmctPmhvc3RyY2JfZG1hW2ldLAorCQkJCQkJCSBHRlBfS0VSTkVMKTsKIAogCQlpZiAoIWlvYV9jZmctPmhvc3RyY2JbaV0pCiAJCQlnb3RvIG91dF9mcmVlX2hvc3RyY2JfZG1hOwpAQCAtOTE2MCwyNSArOTEyMSwyNCBAQAogCiBvdXRfZnJlZV9ob3N0cmNiX2RtYToKIAl3aGlsZSAoaS0tID4gMCkgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgaXByX2hvc3RyY2IpLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiW2ldLAotCQkJCSAgICBpb2FfY2ZnLT5ob3N0cmNiX2RtYVtpXSk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgaXByX2hvc3RyY2IpLAorCQkJCSAgaW9hX2NmZy0+aG9zdHJjYltpXSwKKwkJCQkgIGlvYV9jZmctPmhvc3RyY2JfZG1hW2ldKTsKIAl9Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKLQkJCSAgICBpb2FfY2ZnLT51LmNmZ190YWJsZSwKLQkJCSAgICBpb2FfY2ZnLT5jZmdfdGFibGVfZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBpb2FfY2ZnLT5jZmdfdGFibGVfc2l6ZSwKKwkJCSAgaW9hX2NmZy0+dS5jZmdfdGFibGUsIGlvYV9jZmctPmNmZ190YWJsZV9kbWEpOwogb3V0X2ZyZWVfaG9zdF9ycnE6CiAJZm9yIChpID0gMDsgaSA8IGlvYV9jZmctPmhycnFfbnVtOyBpKyspIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LAotCQkJCXNpemVvZih1MzIpICogaW9hX2NmZy0+aHJycVtpXS5zaXplLAotCQkJCWlvYV9jZmctPmhycnFbaV0uaG9zdF9ycnEsCi0JCQkJaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCSAgc2l6ZW9mKHUzMikgKiBpb2FfY2ZnLT5ocnJxW2ldLnNpemUsCisJCQkJICBpb2FfY2ZnLT5ocnJxW2ldLmhvc3RfcnJxLAorCQkJCSAgaW9hX2NmZy0+aHJycVtpXS5ob3N0X3JycV9kbWEpOwogCX0KIG91dF9pcHJfZnJlZV9jbWRfYmxvY2tzOgogCWlwcl9mcmVlX2NtZF9ibGtzKGlvYV9jZmcpOwogb3V0X2ZyZWVfdnBkX2NiczoKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgaXByX21pc2NfY2JzKSwKLQkJCSAgICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBpcHJfbWlzY19jYnMpLAorCQkJICBpb2FfY2ZnLT52cGRfY2JzLCBpb2FfY2ZnLT52cGRfY2JzX2RtYSk7CiBvdXRfZnJlZV9yZXNfZW50cmllczoKIAlrZnJlZShpb2FfY2ZnLT5yZXNfZW50cmllcyk7CiAJZ290byBvdXQ7CkBAIC05NjE4LDE2ICs5NTc4LDE3IEBACiAJaXByX2luaXRfcmVncyhpb2FfY2ZnKTsKIAogCWlmIChpb2FfY2ZnLT5zaXM2NCkgewotCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJCXJjID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LCBETUFfQklUX01BU0soNjQpKTsKIAkJaWYgKHJjIDwgMCkgewotCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCA2NCBiaXQgUENJIERNQSBtYXNrXG4iKTsKLQkJCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgNjQgYml0IERNQSBtYXNrXG4iKTsKKwkJCXJjID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJICAgICAgIERNQV9CSVRfTUFTSygzMikpOwogCQl9CiAJfSBlbHNlCi0JCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJcmMgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOwogCiAJaWYgKHJjIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IFBDSSBETUEgbWFza1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgRE1BIG1hc2tcbiIpOwogCQlnb3RvIGNsZWFudXBfbm9tZW07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggZDAyMDFjZS4uOWViZGViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMTU0OSw3ICsxNTQ5LDcgQEAKIAlzdHJ1Y3QgaXByX21pc2NfY2JzICp2cGRfY2JzOwogCWRtYV9hZGRyX3QgdnBkX2Nic19kbWE7CiAKLQlzdHJ1Y3QgcGNpX3Bvb2wgKmlwcl9jbWRfcG9vbDsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKmlwcl9jbWRfcG9vbDsKIAogCXN0cnVjdCBpcHJfY21uZCAqcmVzZXRfY21kOwogCWludCAoKnJlc2V0KSAoc3RydWN0IGlwcl9jbW5kICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwcy5jIGIvZHJpdmVycy9zY3NpL2lwcy5jCmluZGV4IGU1YWZjMzguLmU1YzI4NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHMuYworKysgYi9kcml2ZXJzL3Njc2kvaXBzLmMKQEAgLTEyMTAsNyArMTIxMCw3IEBACiAJCW1pbiA9IGhhLT5tYXhfY21kcyAvIDI7CiAJCWlmIChoYS0+ZW5xLT51Y0xvZ0RyaXZlQ291bnQgPD0gMikKIAkJCW1pbiA9IGhhLT5tYXhfY21kcyAtIDE7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKFNEcHRyLCBNU0dfT1JERVJFRF9UQUcsIG1pbik7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKFNEcHRyLCBtaW4pOwogCX0KIAogCVNEcHRyLT5za2lwX21zX3BhZ2VfOCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjaS9pbml0LmMgYi9kcml2ZXJzL3Njc2kvaXNjaS9pbml0LmMKaW5kZXggMmU4OTBiMS4uNzI0YzYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY2kvaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NpL2luaXQuYwpAQCAtMTcyLDYgKzE3Miw4IEBACiAJLnRhcmdldF9kZXN0cm95CQkJPSBzYXNfdGFyZ2V0X2Rlc3Ryb3ksCiAJLmlvY3RsCQkJCT0gc2FzX2lvY3RsLAogCS5zaG9zdF9hdHRycwkJCT0gaXNjaV9ob3N0X2F0dHJzLAorCS51c2VfYmxrX3RhZ3MJCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCQk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNhc19kb21haW5fZnVuY3Rpb25fdGVtcGxhdGUgaXNjaV90cmFuc3BvcnRfb3BzICA9IHsKQEAgLTI1OCw4ICsyNjAsNiBAQAogCXNhc19oYS0+c2FzX3BvcnQgPSBzYXNfcG9ydHM7CiAJc2FzX2hhLT5udW1fcGh5cyA9IFNDSV9NQVhfUEhZUzsKIAotCXNhc19oYS0+bGxkZF9xdWV1ZV9zaXplID0gSVNDSV9DQU5fUVVFVUVfVkFMOwotCXNhc19oYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPSAxOwogCXNhc19oYS0+c3RyaWN0X3dpZGVfcG9ydHMgPSAxOwogCiAJc2FzX3JlZ2lzdGVyX2hhKHNhc19oYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjaS90YXNrLmMgYi9kcml2ZXJzL3Njc2kvaXNjaS90YXNrLmMKaW5kZXggNWQ2ZmRhNy4uM2Y2M2M2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY2kvdGFzay5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NpL3Rhc2suYwpAQCAtMTE3LDEwNCArMTE3LDk3IEBACiAgKiAgICBmdW5jdGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGxpYnNhcyB0byBzZW5kIGEgdGFzayBkb3duIHRvCiAgKiAgICBoYXJkd2FyZS4KICAqIEB0YXNrOiBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIFNBUyB0YXNrIHRvIHNlbmQuCi0gKiBAbnVtOiBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0YXNrcyB0byBxdWV1ZS4KICAqIEBnZnBfZmxhZ3M6IFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgY29udGV4dCBvZiB0aGlzIGNhbGwuCiAgKgogICogc3RhdHVzLCB6ZXJvIGluZGljYXRlcyBzdWNjZXNzLgogICovCi1pbnQgaXNjaV90YXNrX2V4ZWN1dGVfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGludCBudW0sIGdmcF90IGdmcF9mbGFncykKK2ludCBpc2NpX3Rhc2tfZXhlY3V0ZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBpc2NpX2hvc3QgKmlob3N0ID0gZGV2X3RvX2lob3N0KHRhc2stPmRldik7CiAJc3RydWN0IGlzY2lfcmVtb3RlX2RldmljZSAqaWRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWVudW0gc2NpX3N0YXR1cyBzdGF0dXMgPSBTQ0lfRkFJTFVSRTsKIAlib29sIGlvX3JlYWR5OwogCXUxNiB0YWc7CiAKLQlkZXZfZGJnKCZpaG9zdC0+cGRldi0+ZGV2LCAiJXM6IG51bT0lZFxuIiwgX19mdW5jX18sIG51bSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlob3N0LT5zY2ljX2xvY2ssIGZsYWdzKTsKKwlpZGV2ID0gaXNjaV9sb29rdXBfZGV2aWNlKHRhc2stPmRldik7CisJaW9fcmVhZHkgPSBpc2NpX2RldmljZV9pb19yZWFkeShpZGV2LCB0YXNrKTsKKwl0YWcgPSBpc2NpX2FsbG9jX3RhZyhpaG9zdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOwogCi0JZm9yX2VhY2hfc2FzX3Rhc2sobnVtLCB0YXNrKSB7Ci0JCWVudW0gc2NpX3N0YXR1cyBzdGF0dXMgPSBTQ0lfRkFJTFVSRTsKKwlkZXZfZGJnKCZpaG9zdC0+cGRldi0+ZGV2LAorCQkidGFzazogJXAsIGRldjogJXAgaWRldjogJXA6JSNseCBjbWQgPSAlcFxuIiwKKwkJdGFzaywgdGFzay0+ZGV2LCBpZGV2LCBpZGV2ID8gaWRldi0+ZmxhZ3MgOiAwLAorCQl0YXNrLT51bGRkX3Rhc2spOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpaG9zdC0+c2NpY19sb2NrLCBmbGFncyk7Ci0JCWlkZXYgPSBpc2NpX2xvb2t1cF9kZXZpY2UodGFzay0+ZGV2KTsKLQkJaW9fcmVhZHkgPSBpc2NpX2RldmljZV9pb19yZWFkeShpZGV2LCB0YXNrKTsKLQkJdGFnID0gaXNjaV9hbGxvY190YWcoaWhvc3QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpaG9zdC0+c2NpY19sb2NrLCBmbGFncyk7CisJaWYgKCFpZGV2KSB7CisJCWlzY2lfdGFza19yZWZ1c2UoaWhvc3QsIHRhc2ssIFNBU19UQVNLX1VOREVMSVZFUkVELAorCQkJCSBTQVNfREVWSUNFX1VOS05PV04pOworCX0gZWxzZSBpZiAoIWlvX3JlYWR5IHx8IHRhZyA9PSBTQ0lfQ09OVFJPTExFUl9JTlZBTElEX0lPX1RBRykgeworCQkvKiBJbmRpY2F0ZSBRVUVVRV9GVUxMIHNvIHRoYXQgdGhlIHNjc2kgbWlkbGF5ZXIKKwkJICogcmV0cmllcy4KKwkJICAqLworCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLCBTQVNfVEFTS19DT01QTEVURSwKKwkJCQkgU0FTX1FVRVVFX0ZVTEwpOworCX0gZWxzZSB7CisJCS8qIFRoZXJlIGlzIGEgZGV2aWNlIGFuZCBpdCdzIHJlYWR5IGZvciBJL08uICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAotCQlkZXZfZGJnKCZpaG9zdC0+cGRldi0+ZGV2LAotCQkJInRhc2s6ICVwLCBudW06ICVkIGRldjogJXAgaWRldjogJXA6JSNseCBjbWQgPSAlcFxuIiwKLQkJCXRhc2ssIG51bSwgdGFzay0+ZGV2LCBpZGV2LCBpZGV2ID8gaWRldi0+ZmxhZ3MgOiAwLAotCQkJdGFzay0+dWxkZF90YXNrKTsKKwkJaWYgKHRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9BQk9SVEVEKSB7CisJCQkvKiBUaGUgSS9PIHdhcyBhYm9ydGVkLiAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7CiAKLQkJaWYgKCFpZGV2KSB7Ci0JCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLCBTQVNfVEFTS19VTkRFTElWRVJFRCwKLQkJCQkJIFNBU19ERVZJQ0VfVU5LTk9XTik7Ci0JCX0gZWxzZSBpZiAoIWlvX3JlYWR5IHx8IHRhZyA9PSBTQ0lfQ09OVFJPTExFUl9JTlZBTElEX0lPX1RBRykgewotCQkJLyogSW5kaWNhdGUgUVVFVUVfRlVMTCBzbyB0aGF0IHRoZSBzY3NpIG1pZGxheWVyCi0JCQkgKiByZXRyaWVzLgotCQkJICAqLwotCQkJaXNjaV90YXNrX3JlZnVzZShpaG9zdCwgdGFzaywgU0FTX1RBU0tfQ09NUExFVEUsCi0JCQkJCSBTQVNfUVVFVUVfRlVMTCk7CisJCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLAorCQkJCQkgU0FTX1RBU0tfVU5ERUxJVkVSRUQsCisJCQkJCSBTQU1fU1RBVF9UQVNLX0FCT1JURUQpOwogCQl9IGVsc2UgewotCQkJLyogVGhlcmUgaXMgYSBkZXZpY2UgYW5kIGl0J3MgcmVhZHkgZm9yIEkvTy4gKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfQVRfSU5JVElBVE9SOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7CiAKLQkJCWlmICh0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICYgU0FTX1RBU0tfU1RBVEVfQUJPUlRFRCkgewotCQkJCS8qIFRoZSBJL08gd2FzIGFib3J0ZWQuICovCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLAotCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCS8qIGJ1aWxkIGFuZCBzZW5kIHRoZSByZXF1ZXN0LiAqLworCQkJc3RhdHVzID0gaXNjaV9yZXF1ZXN0X2V4ZWN1dGUoaWhvc3QsIGlkZXYsIHRhc2ssIHRhZyk7CiAKLQkJCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLAotCQkJCQkJIFNBU19UQVNLX1VOREVMSVZFUkVELAotCQkJCQkJIFNBTV9TVEFUX1RBU0tfQUJPUlRFRCk7Ci0JCQl9IGVsc2UgewotCQkJCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfQVRfSU5JVElBVE9SOworCQkJaWYgKHN0YXR1cyAhPSBTQ0lfU1VDQ0VTUykgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJCQkvKiBEaWQgbm90IHJlYWxseSBzdGFydCB0aGlzIGNvbW1hbmQuICovCisJCQkJdGFzay0+dGFza19zdGF0ZV9mbGFncyAmPSB+U0FTX1RBU0tfQVRfSU5JVElBVE9SOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwogCi0JCQkJLyogYnVpbGQgYW5kIHNlbmQgdGhlIHJlcXVlc3QuICovCi0JCQkJc3RhdHVzID0gaXNjaV9yZXF1ZXN0X2V4ZWN1dGUoaWhvc3QsIGlkZXYsIHRhc2ssIHRhZyk7Ci0KLQkJCQlpZiAoc3RhdHVzICE9IFNDSV9TVUNDRVNTKSB7Ci0KLQkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwotCQkJCQkvKiBEaWQgbm90IHJlYWxseSBzdGFydCB0aGlzIGNvbW1hbmQuICovCi0JCQkJCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJj0gflNBU19UQVNLX0FUX0lOSVRJQVRPUjsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7Ci0KLQkJCQkJaWYgKHRlc3RfYml0KElERVZfR09ORSwgJmlkZXYtPmZsYWdzKSkgewotCi0JCQkJCQkvKiBJbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2UKLQkJCQkJCSAqIGlzIGdvbmUuCi0JCQkJCQkgKi8KLQkJCQkJCWlzY2lfdGFza19yZWZ1c2UoaWhvc3QsIHRhc2ssCi0JCQkJCQkJU0FTX1RBU0tfVU5ERUxJVkVSRUQsCi0JCQkJCQkJU0FTX0RFVklDRV9VTktOT1dOKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8qIEluZGljYXRlIFFVRVVFX0ZVTEwgc28gdGhhdAotCQkJCQkJICogdGhlIHNjc2kgbWlkbGF5ZXIgcmV0cmllcy4KLQkJCQkJCSAqIElmIHRoZSByZXF1ZXN0IGZhaWxlZCBmb3IKLQkJCQkJCSAqIHJlbW90ZSBkZXZpY2UgcmVhc29ucywgaXQKLQkJCQkJCSAqIGdldHMgcmV0dXJuZWQgYXMKLQkJCQkJCSAqIFNBU19UQVNLX1VOREVMSVZFUkVEIG5leHQKLQkJCQkJCSAqIHRpbWUgdGhyb3VnaC4KLQkJCQkJCSAqLwotCQkJCQkJaXNjaV90YXNrX3JlZnVzZShpaG9zdCwgdGFzaywKLQkJCQkJCQlTQVNfVEFTS19DT01QTEVURSwKLQkJCQkJCQlTQVNfUVVFVUVfRlVMTCk7Ci0JCQkJCX0KKwkJCQlpZiAodGVzdF9iaXQoSURFVl9HT05FLCAmaWRldi0+ZmxhZ3MpKSB7CisJCQkJCS8qIEluZGljYXRlIHRoYXQgdGhlIGRldmljZQorCQkJCQkgKiBpcyBnb25lLgorCQkJCQkgKi8KKwkJCQkJaXNjaV90YXNrX3JlZnVzZShpaG9zdCwgdGFzaywKKwkJCQkJCVNBU19UQVNLX1VOREVMSVZFUkVELAorCQkJCQkJU0FTX0RFVklDRV9VTktOT1dOKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBJbmRpY2F0ZSBRVUVVRV9GVUxMIHNvIHRoYXQKKwkJCQkJICogdGhlIHNjc2kgbWlkbGF5ZXIgcmV0cmllcy4KKwkJCQkJICogSWYgdGhlIHJlcXVlc3QgZmFpbGVkIGZvcgorCQkJCQkgKiByZW1vdGUgZGV2aWNlIHJlYXNvbnMsIGl0CisJCQkJCSAqIGdldHMgcmV0dXJuZWQgYXMKKwkJCQkJICogU0FTX1RBU0tfVU5ERUxJVkVSRUQgbmV4dAorCQkJCQkgKiB0aW1lIHRocm91Z2guCisJCQkJCSAqLworCQkJCQlpc2NpX3Rhc2tfcmVmdXNlKGlob3N0LCB0YXNrLAorCQkJCQkJU0FTX1RBU0tfQ09NUExFVEUsCisJCQkJCQlTQVNfUVVFVUVfRlVMTCk7CiAJCQkJfQogCQkJfQogCQl9Ci0JCWlmIChzdGF0dXMgIT0gU0NJX1NVQ0NFU1MgJiYgdGFnICE9IFNDSV9DT05UUk9MTEVSX0lOVkFMSURfSU9fVEFHKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOwotCQkJLyogY29tbWFuZCBuZXZlciBoaXQgdGhlIGRldmljZSwgc28ganVzdCBmcmVlCi0JCQkgKiB0aGUgdGNpIGFuZCBza2lwIHRoZSBzZXF1ZW5jZSBpbmNyZW1lbnQKLQkJCSAqLwotCQkJaXNjaV90Y2lfZnJlZShpaG9zdCwgSVNDSV9UQUdfVENJKHRhZykpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOwotCQl9Ci0JCWlzY2lfcHV0X2RldmljZShpZGV2KTsKIAl9CisKKwlpZiAoc3RhdHVzICE9IFNDSV9TVUNDRVNTICYmIHRhZyAhPSBTQ0lfQ09OVFJPTExFUl9JTlZBTElEX0lPX1RBRykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWhvc3QtPnNjaWNfbG9jaywgZmxhZ3MpOworCQkvKiBjb21tYW5kIG5ldmVyIGhpdCB0aGUgZGV2aWNlLCBzbyBqdXN0IGZyZWUKKwkJICogdGhlIHRjaSBhbmQgc2tpcCB0aGUgc2VxdWVuY2UgaW5jcmVtZW50CisJCSAqLworCQlpc2NpX3RjaV9mcmVlKGlob3N0LCBJU0NJX1RBR19UQ0kodGFnKSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlob3N0LT5zY2ljX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlpc2NpX3B1dF9kZXZpY2UoaWRldik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NpL3Rhc2suaCBiL2RyaXZlcnMvc2NzaS9pc2NpL3Rhc2suaAppbmRleCA5YzA2Y2JhLi44ZjQ1MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjaS90YXNrLmgKKysrIGIvZHJpdmVycy9zY3NpL2lzY2kvdGFzay5oCkBAIC0xMzEsNyArMTMxLDYgQEAKIAogaW50IGlzY2lfdGFza19leGVjdXRlX3Rhc2soCiAJc3RydWN0IHNhc190YXNrICp0YXNrLAotCWludCBudW0sCiAJZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIAogaW50IGlzY2lfdGFza19hYm9ydF90YXNrKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCmluZGV4IDQyN2FmMGYuLjBiOGFmMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTk1Miw3ICs5NTIsNyBAQAogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSAiaVNDU0kgSW5pdGlhdG9yIG92ZXIgVENQL0lQIiwKIAkucXVldWVjb21tYW5kICAgICAgICAgICA9IGlzY3NpX3F1ZXVlY29tbWFuZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuY2FuX3F1ZXVlCQk9IElTQ1NJX0RFRl9YTUlUX0NNRFNfTUFYIC0gMSwKIAkuc2dfdGFibGVzaXplCQk9IDQwOTYsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKQEAgLTk2Niw2ICs5NjYsNyBAQAogCS50YXJnZXRfYWxsb2MJCT0gaXNjc2lfdGFyZ2V0X2FsbG9jLAogCS5wcm9jX25hbWUJCT0gImlzY3NpX3RjcCIsCiAJLnRoaXNfaWQJCT0gLTEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGlzY3NpX3N3X3RjcF90cmFuc3BvcnQgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKaW5kZXggMWQ3ZTc2ZS4uYzY3OTU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwpAQCAtMjE2MCw2MiArMjE2MCwxMiBAQAogCWlmICghcnBvcnQgfHwgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpKQogCQlyZXR1cm4gLUVOWElPOwogCi0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIEZDX0ZDUF9ERkxUX1FVRVVFX0RFUFRIKTsKLQllbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLAotCQkJCQlGQ19GQ1BfREZMVF9RVUVVRV9ERVBUSCk7Ci0KKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBGQ19GQ1BfREZMVF9RVUVVRV9ERVBUSCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX3NsYXZlX2FsbG9jKTsKIAogLyoqCi0gKiBmY19jaGFuZ2VfcXVldWVfZGVwdGgoKSAtIENoYW5nZSBhIGRldmljZSdzIHF1ZXVlIGRlcHRoCi0gKiBAc2RldjogICBUaGUgU0NTSSBkZXZpY2Ugd2hvc2UgcXVldWUgZGVwdGggaXMgdG8gY2hhbmdlCi0gKiBAcWRlcHRoOiBUaGUgbmV3IHF1ZXVlIGRlcHRoCi0gKiBAcmVhc29uOiBUaGUgcmVzYXNvbiBmb3IgdGhlIGNoYW5nZQotICovCi1pbnQgZmNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpOwotCQlicmVhazsKLQljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLUVYUE9SVF9TWU1CT0woZmNfY2hhbmdlX3F1ZXVlX2RlcHRoKTsKLQotLyoqCi0gKiBmY19jaGFuZ2VfcXVldWVfdHlwZSgpIC0gQ2hhbmdlIGEgZGV2aWNlJ3MgcXVldWUgdHlwZQotICogQHNkZXY6ICAgICBUaGUgU0NTSSBkZXZpY2Ugd2hvc2UgcXVldWUgZGVwdGggaXMgdG8gY2hhbmdlCi0gKiBAdGFnX3R5cGU6IElkZW50aWZpZXIgZm9yIHF1ZXVlIHR5cGUKLSAqLwotaW50IGZjX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZ190eXBlKQotewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIHRhZ190eXBlKTsKLQkJaWYgKHRhZ190eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnX3R5cGUgPSAwOwotCi0JcmV0dXJuIHRhZ190eXBlOwotfQotRVhQT1JUX1NZTUJPTChmY19jaGFuZ2VfcXVldWVfdHlwZSk7Ci0KLS8qKgogICogZmNfZmNwX2Rlc3RvcnkoKSAtIFRlYXIgZG93biB0aGUgRkNQIGxheWVyIGZvciBhIGdpdmVuIGxvY2FsIHBvcnQKICAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgdGhhdCBubyBsb25nZXIgbmVlZHMgdGhlIEZDUCBsYXllcgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IDBkOGJjNmMuLjgwNTNmMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC0xNzcxLDI1ICsxNzcxLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3F1ZXVlY29tbWFuZCk7CiAKLWludCBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgsIGludCByZWFzb24pCi17Ci0Jc3dpdGNoIChyZWFzb24pIHsKLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUkFNUF9VUDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgpOwotCiBpbnQgaXNjc2lfdGFyZ2V0X2FsbG9jKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKIAlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uID0gc3RhcmdldF90b19zZXNzaW9uKHN0YXJnZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYwppbmRleCA3NjYwOThhLi41Nzc3NzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYwpAQCAtMTcxLDcgKzE3MSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwogCiBxY19hbHJlYWR5X2dvbmU6Ci0JbGlzdF9kZWxfaW5pdCgmdGFzay0+bGlzdCk7CiAJc2FzX2ZyZWVfdGFzayh0YXNrKTsKIH0KIApAQCAtMjQ0LDEyICsyNDMsNyBAQAogCWlmIChxYy0+c2NzaWNtZCkKIAkJQVNTSUdOX1NBU19UQVNLKHFjLT5zY3NpY21kLCB0YXNrKTsKIAotCWlmIChzYXNfaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtIDwgMikKLQkJcmV0ID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCAxLCBHRlBfQVRPTUlDKTsKLQllbHNlCi0JCXJldCA9IHNhc19xdWV1ZV91cCh0YXNrKTsKLQotCS8qIEV4YW1pbmUgKi8KKwlyZXQgPSBpLT5kZnQtPmxsZGRfZXhlY3V0ZV90YXNrKHRhc2ssIEdGUF9BVE9NSUMpOwogCWlmIChyZXQpIHsKIAkJU0FTX0RQUklOVEsoImxsZGRfZXhlY3V0ZV90YXNrIHJldHVybmVkOiAlZFxuIiwgcmV0KTsKIApAQCAtNDg1LDcgKzQ3OSw2IEBACiAKIAlyZXR1cm47CiAgb3V0OgotCWxpc3RfZGVsX2luaXQoJnRhc2stPmxpc3QpOwogCXNhc19mcmVlX3Rhc2sodGFzayk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCmluZGV4IDBjYWM3ZDguLjAyMmJiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYwpAQCAtOTYsNyArOTYsNyBAQAogCQl0YXNrLT5zbG93X3Rhc2stPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgU01QX1RJTUVPVVQqSFo7CiAJCWFkZF90aW1lcigmdGFzay0+c2xvd190YXNrLT50aW1lcik7CiAKLQkJcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCAxLCBHRlBfS0VSTkVMKTsKKwkJcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAocmVzKSB7CiAJCQlkZWxfdGltZXIoJnRhc2stPnNsb3dfdGFzay0+dGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jCmluZGV4IGRiYzhhNzkuLjM2MmRhNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmMKQEAgLTQ1LDcgKzQ1LDYgQEAKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2sgPSBrbWVtX2NhY2hlX3phbGxvYyhzYXNfdGFza19jYWNoZSwgZmxhZ3MpOwogCiAJaWYgKHRhc2spIHsKLQkJSU5JVF9MSVNUX0hFQUQoJnRhc2stPmxpc3QpOwogCQlzcGluX2xvY2tfaW5pdCgmdGFzay0+dGFza19zdGF0ZV9sb2NrKTsKIAkJdGFzay0+dGFza19zdGF0ZV9mbGFncyA9IFNBU19UQVNLX1NUQVRFX1BFTkRJTkc7CiAJfQpAQCAtNzcsNyArNzYsNiBAQAogdm9pZCBzYXNfZnJlZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaykKIHsKIAlpZiAodGFzaykgewotCQlCVUdfT04oIWxpc3RfZW1wdHkoJnRhc2stPmxpc3QpKTsKIAkJa2ZyZWUodGFzay0+c2xvd190YXNrKTsKIAkJa21lbV9jYWNoZV9mcmVlKHNhc190YXNrX2NhY2hlLCB0YXNrKTsKIAl9CkBAIC0xMjcsMTEgKzEyNSw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJnNhc19oYS0+cGh5X3BvcnRfbG9jayk7CiAJc2FzX2hhc2hfYWRkcihzYXNfaGEtPmhhc2hlZF9zYXNfYWRkciwgc2FzX2hhLT5zYXNfYWRkcik7CiAKLQlpZiAoc2FzX2hhLT5sbGRkX3F1ZXVlX3NpemUgPT0gMCkKLQkJc2FzX2hhLT5sbGRkX3F1ZXVlX3NpemUgPSAxOwotCWVsc2UgaWYgKHNhc19oYS0+bGxkZF9xdWV1ZV9zaXplID09IC0xKQotCQlzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZSA9IDEyODsgLyogU2FuaXR5ICovCi0KIAlzZXRfYml0KFNBU19IQV9SRUdJU1RFUkVELCAmc2FzX2hhLT5zdGF0ZSk7CiAJc3Bpbl9sb2NrX2luaXQoJnNhc19oYS0+bG9jayk7CiAJbXV0ZXhfaW5pdCgmc2FzX2hhLT5kcmFpbl9tdXRleCk7CkBAIC0xNTcsMTUgKzE1MCw2IEBACiAJCWdvdG8gVW5kb19wb3J0czsKIAl9CiAKLQlpZiAoc2FzX2hhLT5sbGRkX21heF9leGVjdXRlX251bSA+IDEpIHsKLQkJZXJyb3IgPSBzYXNfaW5pdF9xdWV1ZShzYXNfaGEpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiY291bGRuJ3Qgc3RhcnQgcXVldWUgdGhyZWFkOiVkLCAiCi0JCQkgICAgICAgInJ1bm5pbmcgaW4gZGlyZWN0IG1vZGVcbiIsIGVycm9yKTsKLQkJCXNhc19oYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPSAxOwotCQl9Ci0JfQotCiAJSU5JVF9MSVNUX0hFQUQoJnNhc19oYS0+ZWhfZG9uZV9xKTsKIAlJTklUX0xJU1RfSEVBRCgmc2FzX2hhLT5laF9hdGFfcSk7CiAKQEAgLTIwMSwxMSArMTg1LDYgQEAKIAlfX3Nhc19kcmFpbl93b3JrKHNhc19oYSk7CiAJbXV0ZXhfdW5sb2NrKCZzYXNfaGEtPmRyYWluX211dGV4KTsKIAotCWlmIChzYXNfaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID4gMSkgewotCQlzYXNfc2h1dGRvd25fcXVldWUoc2FzX2hhKTsKLQkJc2FzX2hhLT5sbGRkX21heF9leGVjdXRlX251bSA9IDE7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmggYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbnRlcm5hbC5oCmluZGV4IDdlN2JhODMuLjljZjBiYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW50ZXJuYWwuaApAQCAtNjYsOSArNjYsNyBAQAogCiBlbnVtIGJsa19laF90aW1lcl9yZXR1cm4gc2FzX3Njc2lfdGltZWRfb3V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiAKLWludCAgc2FzX2luaXRfcXVldWUoc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhc19oYSk7CiBpbnQgIHNhc19pbml0X2V2ZW50cyhzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhKTsKLXZvaWQgc2FzX3NodXRkb3duX3F1ZXVlKHN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEpOwogdm9pZCBzYXNfZGlzYWJsZV9yZXZhbGlkYXRpb24oc3RydWN0IHNhc19oYV9zdHJ1Y3QgKmhhKTsKIHZvaWQgc2FzX2VuYWJsZV9yZXZhbGlkYXRpb24oc3RydWN0IHNhc19oYV9zdHJ1Y3QgKmhhKTsKIHZvaWQgX19zYXNfZHJhaW5fd29yayhzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqaGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwppbmRleCAyNGU0NzdkLi43MjkxOGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwpAQCAtMTEyLDcgKzExMiw2IEBACiAKIAlzYy0+cmVzdWx0ID0gKGhzIDw8IDE2KSB8IHN0YXQ7CiAJQVNTSUdOX1NBU19UQVNLKHNjLCBOVUxMKTsKLQlsaXN0X2RlbF9pbml0KCZ0YXNrLT5saXN0KTsKIAlzYXNfZnJlZV90YXNrKHRhc2spOwogfQogCkBAIC0xMzgsNyArMTM3LDYgQEAKIAogCWlmICh1bmxpa2VseSghc2MpKSB7CiAJCVNBU19EUFJJTlRLKCJ0YXNrX2RvbmUgY2FsbGVkIHdpdGggbm9uIGV4aXN0aW5nIFNDU0kgY21uZCFcbiIpOwotCQlsaXN0X2RlbF9pbml0KCZ0YXNrLT5saXN0KTsKIAkJc2FzX2ZyZWVfdGFzayh0YXNrKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE3OSwzMSArMTc3LDEwIEBACiAJcmV0dXJuIHRhc2s7CiB9CiAKLWludCBzYXNfcXVldWVfdXAoc3RydWN0IHNhc190YXNrICp0YXNrKQotewotCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSB0YXNrLT5kZXYtPnBvcnQtPmhhOwotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKGxpc3QpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmUtPnRhc2tfcXVldWVfbG9jaywgZmxhZ3MpOwotCWlmIChzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZSA8IGNvcmUtPnRhc2tfcXVldWVfc2l6ZSArIDEpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29yZS0+dGFza19xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtU0FTX1FVRVVFX0ZVTEw7Ci0JfQotCWxpc3RfYWRkX3RhaWwoJnRhc2stPmxpc3QsICZjb3JlLT50YXNrX3F1ZXVlKTsKLQljb3JlLT50YXNrX3F1ZXVlX3NpemUgKz0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQl3YWtlX3VwX3Byb2Nlc3MoY29yZS0+cXVldWVfdGhyZWFkKTsKLQotCXJldHVybiAwOwotfQotCiBpbnQgc2FzX3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IHNhc19pbnRlcm5hbCAqaSA9IHRvX3Nhc19pbnRlcm5hbChob3N0LT50cmFuc3BvcnR0KTsKIAlzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2ID0gY21kX3RvX2RvbWFpbl9kZXYoY21kKTsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gZGV2LT5wb3J0LT5oYTsKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2s7CiAJaW50IHJlcyA9IDA7CiAKQEAgLTIyNCwxMiArMjAxLDcgQEAKIAlpZiAoIXRhc2spCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCi0JLyogUXVldWUgdXAsIERpcmVjdCBNb2RlIG9yIFRhc2sgQ29sbGVjdG9yIE1vZGUuICovCi0JaWYgKHNhc19oYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPCAyKQotCQlyZXMgPSBpLT5kZnQtPmxsZGRfZXhlY3V0ZV90YXNrKHRhc2ssIDEsIEdGUF9BVE9NSUMpOwotCWVsc2UKLQkJcmVzID0gc2FzX3F1ZXVlX3VwKHRhc2spOwotCisJcmVzID0gaS0+ZGZ0LT5sbGRkX2V4ZWN1dGVfdGFzayh0YXNrLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzKQogCQlnb3RvIG91dF9mcmVlX3Rhc2s7CiAJcmV0dXJuIDA7CkBAIC0zMjMsMzcgKzI5NSwxNyBAQAogCVRBU0tfSVNfRE9ORSwKIAlUQVNLX0lTX0FCT1JURUQsCiAJVEFTS19JU19BVF9MVSwKLQlUQVNLX0lTX05PVF9BVF9IQSwKIAlUQVNLX0lTX05PVF9BVF9MVSwKIAlUQVNLX0FCT1JUX0ZBSUxFRCwKIH07CiAKIHN0YXRpYyBlbnVtIHRhc2tfZGlzcG9zaXRpb24gc2FzX3Njc2lfZmluZF90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqaGEgPSB0YXNrLT5kZXYtPnBvcnQtPmhhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIHJlczsKIAlzdHJ1Y3Qgc2FzX2ludGVybmFsICpzaSA9CiAJCXRvX3Nhc19pbnRlcm5hbCh0YXNrLT5kZXYtPnBvcnQtPmhhLT5jb3JlLnNob3N0LT50cmFuc3BvcnR0KTsKIAotCWlmIChoYS0+bGxkZF9tYXhfZXhlY3V0ZV9udW0gPiAxKSB7Ci0JCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmaGEtPmNvcmU7Ci0JCXN0cnVjdCBzYXNfdGFzayAqdCwgKm47Ci0KLQkJbXV0ZXhfbG9jaygmY29yZS0+dGFza19xdWV1ZV9mbHVzaCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHQsIG4sICZjb3JlLT50YXNrX3F1ZXVlLCBsaXN0KQotCQkJaWYgKHRhc2sgPT0gdCkgewotCQkJCWxpc3RfZGVsX2luaXQoJnQtPmxpc3QpOwotCQkJCWJyZWFrOwotCQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJbXV0ZXhfdW5sb2NrKCZjb3JlLT50YXNrX3F1ZXVlX2ZsdXNoKTsKLQotCQlpZiAodGFzayA9PSB0KQotCQkJcmV0dXJuIFRBU0tfSVNfTk9UX0FUX0hBOwotCX0KLQogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKIAkJU0FTX0RQUklOVEsoIiVzOiBhYm9ydGluZyB0YXNrIDB4JXBcbiIsIF9fZnVuY19fLCB0YXNrKTsKIAkJcmVzID0gc2ktPmRmdC0+bGxkZF9hYm9ydF90YXNrKHRhc2spOwpAQCAtNjY3LDE0ICs2MTksNiBAQAogCQljbWQtPmVoX2VmbGFncyA9IDA7CiAKIAkJc3dpdGNoIChyZXMpIHsKLQkJY2FzZSBUQVNLX0lTX05PVF9BVF9IQToKLQkJCVNBU19EUFJJTlRLKCIlczogdGFzayAweCVwIGlzIG5vdCBhdCBoYTogJXNcbiIsCi0JCQkJICAgIF9fZnVuY19fLCB0YXNrLAotCQkJCSAgICBjbWQtPnJldHJpZXMgPyAicmV0cnkiIDogImFib3J0ZWQiKTsKLQkJCWlmIChjbWQtPnJldHJpZXMpCi0JCQkJY21kLT5yZXRyaWVzLS07Ci0JCQlzYXNfZWhfZmluaXNoX2NtZChjbWQpOwotCQkJY29udGludWU7CiAJCWNhc2UgVEFTS19JU19ET05FOgogCQkJU0FTX0RQUklOVEsoIiVzOiB0YXNrIDB4JXAgaXMgZG9uZVxuIiwgX19mdW5jX18sCiAJCQkJICAgIHRhc2spOwpAQCAtODM2LDkgKzc4MCw2IEBACiAJCXNjc2lfZWhfcmVhZHlfZGV2cyhzaG9zdCwgJmVoX3dvcmtfcSwgJmhhLT5laF9kb25lX3EpOwogCiBvdXQ6Ci0JaWYgKGhhLT5sbGRkX21heF9leGVjdXRlX251bSA+IDEpCi0JCXdha2VfdXBfcHJvY2VzcyhoYS0+Y29yZS5xdWV1ZV90aHJlYWQpOwotCiAJc2FzX2VoX2hhbmRsZV9yZXNldHMoc2hvc3QpOwogCiAJLyogbm93IGxpbmsgaW50byBsaWJhdGEgZWggLS0tIGlmIHdlIGhhdmUgYW55IGF0YSBkZXZpY2VzICovCkBAIC05NDAsMTUgKzg4MSwxMiBAQAogCXNhc19yZWFkX3BvcnRfbW9kZV9wYWdlKHNjc2lfZGV2KTsKIAogCWlmIChzY3NpX2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzY3NpX2RldiwgTVNHX1NJTVBMRV9UQUcpOwotCQlzY3NpX2FjdGl2YXRlX3RjcShzY3NpX2RldiwgU0FTX0RFRl9RRCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBTQVNfREVGX1FEKTsKIAl9IGVsc2UgewogCQlTQVNfRFBSSU5USygiZGV2aWNlICVsbHgsIExVTiAlbGx4IGRvZXNuJ3Qgc3VwcG9ydCAiCiAJCQkgICAgIlRDUVxuIiwgU0FTX0FERFIoZGV2LT5zYXNfYWRkciksCiAJCQkgICAgc2NzaV9kZXYtPmx1bik7Ci0JCXNjc2lfZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMDsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2NzaV9kZXYsIDApOwotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNjc2lfZGV2LCAxKTsKKwkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2NzaV9kZXYsIDEpOwogCX0KIAogCXNjc2lfZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKQEAgLTk1Niw0NyArODk0LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoLCBpbnQgcmVhc29uKQoraW50IHNhc19jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCiB7CiAJc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHNkZXZfdG9fZG9tYWluX2RldihzZGV2KTsKIAogCWlmIChkZXZfaXNfc2F0YShkZXYpKQotCQlyZXR1cm4gX19hdGFfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldi0+c2F0YV9kZXYuYXAsIHNkZXYsIGRlcHRoLAotCQkJCQkJcmVhc29uKTsKKwkJcmV0dXJuIF9fYXRhX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYtPnNhdGFfZGV2LmFwLCBzZGV2LCBkZXB0aCk7CiAKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6Ci0JCWlmICghc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJCWRlcHRoID0gMTsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9RRlVMTDoKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIGRlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXJldHVybiBkZXB0aDsKKwlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCWRlcHRoID0gMTsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgZGVwdGgpOwogfQogCi1pbnQgc2FzX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCBxdCkKK2ludCBzYXNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldiwgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHNkZXZfdG9fZG9tYWluX2RldihzY3NpX2Rldik7Ci0KLQlpZiAoZGV2X2lzX3NhdGEoZGV2KSkKKwlpZiAoZGV2X2lzX3NhdGEoc2Rldl90b19kb21haW5fZGV2KHNjc2lfZGV2KSkpCiAJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFzY3NpX2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJcmV0dXJuIDA7Ci0KLQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNjc2lfZGV2LCAxKTsKLQotCXNjc2lfc2V0X3RhZ190eXBlKHNjc2lfZGV2LCBxdCk7Ci0Jc2NzaV9hY3RpdmF0ZV90Y3Eoc2NzaV9kZXYsIHNjc2lfZGV2LT5xdWV1ZV9kZXB0aCk7Ci0KLQlyZXR1cm4gcXQ7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUoc2NzaV9kZXYsIHR5cGUpOwogfQogCiBpbnQgc2FzX2Jpb3NfcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldiwKQEAgLTEwMTEsMTIxICs5MjUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tIFRhc2sgQ29sbGVjdG9yIFRocmVhZCBpbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tICovCi0KLXN0YXRpYyB2b2lkIHNhc19xdWV1ZShzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhKQotewotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKHEpOwotCWludCBjYW5fcXVldWU7Ci0JaW50IHJlczsKLQlzdHJ1Y3Qgc2FzX2ludGVybmFsICppID0gdG9fc2FzX2ludGVybmFsKGNvcmUtPnNob3N0LT50cmFuc3BvcnR0KTsKLQotCW11dGV4X2xvY2soJmNvcmUtPnRhc2tfcXVldWVfZmx1c2gpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJgotCSAgICAgICAhbGlzdF9lbXB0eSgmY29yZS0+dGFza19xdWV1ZSkgJiYKLQkgICAgICAgIXRlc3RfYml0KFNBU19IQV9GUk9aRU4sICZzYXNfaGEtPnN0YXRlKSkgewotCi0JCWNhbl9xdWV1ZSA9IHNhc19oYS0+bGxkZF9xdWV1ZV9zaXplIC0gY29yZS0+dGFza19xdWV1ZV9zaXplOwotCQlpZiAoY2FuX3F1ZXVlID49IDApIHsKLQkJCWNhbl9xdWV1ZSA9IGNvcmUtPnRhc2tfcXVldWVfc2l6ZTsKLQkJCWxpc3Rfc3BsaWNlX2luaXQoJmNvcmUtPnRhc2tfcXVldWUsICZxKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBsaXN0X2hlYWQgKmEsICpuOwotCi0JCQljYW5fcXVldWUgPSBzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZTsKLQkJCWxpc3RfZm9yX2VhY2hfc2FmZShhLCBuLCAmY29yZS0+dGFza19xdWV1ZSkgewotCQkJCWxpc3RfbW92ZV90YWlsKGEsICZxKTsKLQkJCQlpZiAoLS1jYW5fcXVldWUgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYW5fcXVldWUgPSBzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZTsKLQkJfQotCQljb3JlLT50YXNrX3F1ZXVlX3NpemUgLT0gY2FuX3F1ZXVlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJewotCQkJc3RydWN0IHNhc190YXNrICp0YXNrID0gbGlzdF9lbnRyeShxLm5leHQsCi0JCQkJCQkJICAgc3RydWN0IHNhc190YXNrLAotCQkJCQkJCSAgIGxpc3QpOwotCQkJbGlzdF9kZWxfaW5pdCgmcSk7Ci0JCQlyZXMgPSBpLT5kZnQtPmxsZGRfZXhlY3V0ZV90YXNrKHRhc2ssIGNhbl9xdWV1ZSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCWlmICh1bmxpa2VseShyZXMpKQotCQkJCV9fbGlzdF9hZGQoJnEsIHRhc2stPmxpc3QucHJldiwgJnRhc2stPmxpc3QpOwotCQl9Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHJlcykgewotCQkJbGlzdF9zcGxpY2VfaW5pdCgmcSwgJmNvcmUtPnRhc2tfcXVldWUpOyAvKmF0IGhlYWQqLwotCQkJY29yZS0+dGFza19xdWV1ZV9zaXplICs9IGNhbl9xdWV1ZTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJmNvcmUtPnRhc2tfcXVldWVfZmx1c2gpOwotfQotCi0vKioKLSAqIHNhc19xdWV1ZV90aHJlYWQgLS0gVGhlIFRhc2sgQ29sbGVjdG9yIHRocmVhZAotICogQF9zYXNfaGE6IHBvaW50ZXIgdG8gc3RydWN0IHNhc19oYQotICovCi1zdGF0aWMgaW50IHNhc19xdWV1ZV90aHJlYWQodm9pZCAqX3Nhc19oYSkKLXsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gX3Nhc19oYTsKLQotCXdoaWxlICgxKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlKCk7Ci0JCXNhc19xdWV1ZShzYXNfaGEpOwotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBzYXNfaW5pdF9xdWV1ZShzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhKQotewotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmNvcmUtPnRhc2tfcXVldWVfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmY29yZS0+dGFza19xdWV1ZV9mbHVzaCk7Ci0JY29yZS0+dGFza19xdWV1ZV9zaXplID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmY29yZS0+dGFza19xdWV1ZSk7Ci0KLQljb3JlLT5xdWV1ZV90aHJlYWQgPSBrdGhyZWFkX3J1bihzYXNfcXVldWVfdGhyZWFkLCBzYXNfaGEsCi0JCQkJCSAic2FzX3F1ZXVlXyVkIiwgY29yZS0+c2hvc3QtPmhvc3Rfbm8pOwotCWlmIChJU19FUlIoY29yZS0+cXVldWVfdGhyZWFkKSkKLQkJcmV0dXJuIFBUUl9FUlIoY29yZS0+cXVldWVfdGhyZWFkKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBzYXNfc2h1dGRvd25fcXVldWUoc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhc19oYSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwotCXN0cnVjdCBzYXNfdGFzayAqdGFzaywgKm47Ci0KLQlrdGhyZWFkX3N0b3AoY29yZS0+cXVldWVfdGhyZWFkKTsKLQotCWlmICghbGlzdF9lbXB0eSgmY29yZS0+dGFza19xdWV1ZSkpCi0JCVNBU19EUFJJTlRLKCJIQTogJWxseDogc2NzaSBjb3JlIHRhc2sgcXVldWUgaXMgTk9UIGVtcHR5IT9cbiIsCi0JCQkgICAgU0FTX0FERFIoc2FzX2hhLT5zYXNfYWRkcikpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmUtPnRhc2tfcXVldWVfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YXNrLCBuLCAmY29yZS0+dGFza19xdWV1ZSwgbGlzdCkgewotCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSB0YXNrLT51bGRkX3Rhc2s7Ci0KLQkJbGlzdF9kZWxfaW5pdCgmdGFzay0+bGlzdCk7Ci0KLQkJQVNTSUdOX1NBU19UQVNLKGNtZCwgTlVMTCk7Ci0JCXNhc19mcmVlX3Rhc2sodGFzayk7Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwotCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlLT50YXNrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLX0KLQogLyoKICAqIFRlbGwgYW4gdXBwZXIgbGF5ZXIgdGhhdCBpdCBuZWVkcyB0byBpbml0aWF0ZSBhbiBhYm9ydCBmb3IgYSBnaXZlbiB0YXNrLgogICogVGhpcyBzaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBieSBhbiBMTERELgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYwppbmRleCA3ODZhMmFmLi41NjMzZTdkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKQEAgLTk2OCw4ICs5NjgsOCBAQAogCQlnb3RvIG91dDsKIAogCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRhcnkgKi8KLQlwcmludGsoS0VSTl9FUlIJIjkwNjAgQkxLR1JEOiAlczogX2R1bXBfYnVmX2RpZj0weCVwIGZpbGU9JXNcbiIsCi0JCV9fZnVuY19fLCBfZHVtcF9idWZfZGlmLCBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCXByaW50ayhLRVJOX0VSUgkiOTA2MCBCTEtHUkQ6ICVzOiBfZHVtcF9idWZfZGlmPTB4JXAgZmlsZT0lcERcbiIsCisJCV9fZnVuY19fLCBfZHVtcF9idWZfZGlmLCBmaWxlKTsKIAlkZWJ1Zy0+YnVmZmVyID0gX2R1bXBfYnVmX2RpZjsKIAlpZiAoIWRlYnVnLT5idWZmZXIpIHsKIAkJa2ZyZWUoZGVidWcpOwpAQCAtMTAxMSw3ICsxMDExLDcgQEAKIGxwZmNfZGVidWdmc19kaWZfZXJyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnQgPSBmaWxlLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciBjYnVmWzMyXTsKIAl1aW50NjRfdCB0bXAgPSAwOwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIGxwZmNfZGVidWdmc19kaWZfZXJyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudCA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgZHN0YnVmWzMyXTsKIAl1aW50NjRfdCB0bXAgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCBiOTkzOTlmLi5mZDg1OTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtMjQzLDEyOCArMjQzLDYgQEAKIH0KIAogLyoqCi0gKiBscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudCAtIFBvc3RzIGEgcXVldWVkZXB0aCBjaGFuZ2UgZXZlbnQKLSAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KLSAqIEB2cG9ydDogUG9pbnRlciB0byB2cG9ydCBvYmplY3QuCi0gKiBAbmRscDogUG9pbnRlciB0byBGQyBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0LgotICogQGx1bjogTHVuIG51bWJlciBvZiB0aGUgc2NzaSBkZXZpY2UuCi0gKiBAb2xkX3ZhbDogT2xkIHZhbHVlIG9mIHRoZSBxdWV1ZSBkZXB0aC4KLSAqIEBuZXdfdmFsOiBOZXcgdmFsdWUgb2YgdGhlIHF1ZXVlIGRlcHRoLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYW4gZXZlbnQgdG8gdGhlIG1nbXQgYXBwbGljYXRpb24gaW5kaWNhdGluZwotICogdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoLgotICoqLwotc3RhdGljIHZvaWQKLWxwZmNfc2VuZF9zZGV2X3F1ZXVlZGVwdGhfY2hhbmdlX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKLQkJc3RydWN0IGxwZmNfdnBvcnQgICp2cG9ydCwKLQkJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCi0JCXVpbnQ2NF90IGx1biwKLQkJdWludDMyX3Qgb2xkX3ZhbCwKLQkJdWludDMyX3QgbmV3X3ZhbCkKLXsKLQlzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKmZhc3RfcGF0aF9ldnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWZhc3RfcGF0aF9ldnQgPSBscGZjX2FsbG9jX2Zhc3RfZXZ0KHBoYmEpOwotCWlmICghZmFzdF9wYXRoX2V2dCkKLQkJcmV0dXJuOwotCi0JZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQuZXZlbnRfdHlwZSA9Ci0JCUZDX1JFR19TQ1NJX0VWRU5UOwotCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50LnN1YmNhdGVnb3J5ID0KLQkJTFBGQ19FVkVOVF9WQVJRVUVERVBUSDsKLQotCS8qIFJlcG9ydCBhbGwgbHVucyB3aXRoIGNoYW5nZSBpbiBxdWV1ZSBkZXB0aCAqLwotCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50Lmx1biA9IGx1bjsKLQlpZiAobmRscCAmJiBOTFBfQ0hLX05PREVfQUNUKG5kbHApKSB7Ci0JCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQud3dwbiwKLQkJCSZuZGxwLT5ubHBfcG9ydG5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7Ci0JCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQud3dubiwKLQkJCSZuZGxwLT5ubHBfbm9kZW5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7Ci0JfQotCi0JZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0Lm9sZHZhbCA9IG9sZF92YWw7Ci0JZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0Lm5ld3ZhbCA9IG5ld192YWw7Ci0JZmFzdF9wYXRoX2V2dC0+dnBvcnQgPSB2cG9ydDsKLQotCWZhc3RfcGF0aF9ldnQtPndvcmtfZXZ0LmV2dCA9IExQRkNfRVZUX0ZBU1RQQVRIX01HTVRfRVZUOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmZmFzdF9wYXRoX2V2dC0+d29ya19ldnQuZXZ0X2xpc3RwLCAmcGhiYS0+d29ya19saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7Ci0JbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKLQotCXJldHVybjsKLX0KLQotLyoqCi0gKiBscGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIEFsdGVyIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoCi0gKiBAc2RldjogUG9pbnRlciB0aGUgc2NzaSBkZXZpY2Ugb24gd2hpY2ggdG8gY2hhbmdlIHRoZSBxdWV1ZSBkZXB0aC4KLSAqIEBxZGVwdGg6IE5ldyBxdWV1ZSBkZXB0aCB0byBzZXQgdGhlIHNkZXYgdG8uCi0gKiBAcmVhc29uOiBUaGUgcmVhc29uIGZvciB0aGUgcXVldWUgZGVwdGggY2hhbmdlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBtaWRsYXllciBhbmQgdGhlIExMRCB0byBhbHRlciB0aGUgcXVldWUKLSAqIGRlcHRoIGZvciBhIHNjc2kgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHF1ZXVlIGRlcHRoIHRvIHRoZSBuZXcKLSAqIHZhbHVlIGFuZCBzZW5kcyBhbiBldmVudCBvdXQgdG8gbG9nIHRoZSBxdWV1ZSBkZXB0aCBjaGFuZ2UuCi0gKiovCi1zdGF0aWMgaW50Ci1scGZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsIGludCByZWFzb24pCi17Ci0Jc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNkZXYtPmhvc3QtPmhvc3RkYXRhOwotCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7Ci0Jc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBuZXdfcXVldWVfZGVwdGgsIG9sZF9xdWV1ZV9kZXB0aDsKLQotCW9sZF9xdWV1ZV9kZXB0aCA9IHNkZXYtPnF1ZXVlX2RlcHRoOwotCi0Jc3dpdGNoIChyZWFzb24pIHsKLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JCS8qIGNoYW5nZSByZXF1ZXN0IGZyb20gc3lzZnMsIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU0NTSV9RREVQVEhfUkFNUF9VUDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCWlmIChzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKSA9PSAwKQotCQkJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotCi0JCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fV0FSTklORywgTE9HX0ZDUCwKLQkJCQkgIjA3MTEgZGV0ZWN0ZWQgcXVldWUgZnVsbCAtIGx1biBxdWV1ZSAiCi0JCQkJICJkZXB0aCBhZGp1c3RlZCB0byAlZC5cbiIsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCW5ld19xdWV1ZV9kZXB0aCA9IHNkZXYtPnF1ZXVlX2RlcHRoOwotCXJkYXRhID0gbHBmY19ycG9ydF9kYXRhX2Zyb21fc2NzaV9kZXZpY2Uoc2Rldik7Ci0JaWYgKHJkYXRhKQotCQlscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudChwaGJhLCB2cG9ydCwKLQkJCQkJCSAgICAgICByZGF0YS0+cG5vZGUsIHNkZXYtPmx1biwKLQkJCQkJCSAgICAgICBvbGRfcXVldWVfZGVwdGgsCi0JCQkJCQkgICAgICAgbmV3X3F1ZXVlX2RlcHRoKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci0KLS8qKgotICogbHBmY19jaGFuZ2VfcXVldWVfdHlwZSgpIC0gQ2hhbmdlIGEgZGV2aWNlJ3Mgc2NzaSB0YWcgcXVldWluZyB0eXBlCi0gKiBAc2RldjogUG9pbnRlciB0aGUgc2NzaSBkZXZpY2Ugd2hvc2UgcXVldWUgZGVwdGggaXMgdG8gY2hhbmdlCi0gKiBAdGFnX3R5cGU6IElkZW50aWZpZXIgZm9yIHF1ZXVlIHRhZyB0eXBlCi0gKi8KLXN0YXRpYyBpbnQKLWxwZmNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnX3R5cGUpCi17Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOwotCQlpZiAodGFnX3R5cGUpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQl0YWdfdHlwZSA9IDA7Ci0KLQlyZXR1cm4gdGFnX3R5cGU7Ci19Ci0KLS8qKgogICogbHBmY19yYW1wZG93bl9xdWV1ZV9kZXB0aCAtIFBvc3QgUkFNUF9ET1dOX1FVRVVFIGV2ZW50IHRvIHdvcmtlciB0aHJlYWQKICAqIEBwaGJhOiBUaGUgSGJhIGZvciB3aGljaCB0aGlzIGNhbGwgaXMgYmVpbmcgZXhlY3V0ZWQuCiAgKgpAQCAtNDQ5LDggKzMyNyw3IEBACiAJCQkJZWxzZQogCQkJCQluZXdfcXVldWVfZGVwdGggPSBzZGV2LT5xdWV1ZV9kZXB0aCAtCiAJCQkJCQkJCW5ld19xdWV1ZV9kZXB0aDsKLQkJCQlscGZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBuZXdfcXVldWVfZGVwdGgsCi0JCQkJCQkJU0NTSV9RREVQVEhfREVGQVVMVCk7CisJCQkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgbmV3X3F1ZXVlX2RlcHRoKTsKIAkJCX0KIAkJfQogCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CkBAIC00Mjg2LDcgKzQxNjMsNiBAQAogCUlPQ0JfdCAqaW9jYl9jbWQgPSAmbHBmY19jbWQtPmN1cl9pb2NicS5pb2NiOwogCXN0cnVjdCBscGZjX2lvY2JxICpwaW9jYnEgPSAmKGxwZmNfY21kLT5jdXJfaW9jYnEpOwogCWludCBkYXRhZGlyID0gc2NzaV9jbW5kLT5zY19kYXRhX2RpcmVjdGlvbjsKLQljaGFyIHRhZ1syXTsKIAl1aW50OF90ICpwdHI7CiAJYm9vbCBzbGk0OwogCXVpbnQzMl90IGZjcGRsOwpAQCAtNDMwOCwyMCArNDE4NCw3IEBACiAJCW1lbXNldChwdHIsIDAsIChMUEZDX0ZDUF9DREJfTEVOIC0gc2NzaV9jbW5kLT5jbWRfbGVuKSk7CiAJfQogCi0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY3NpX2NtbmQsIHRhZykpIHsKLQkJc3dpdGNoICh0YWdbMF0pIHsKLQkJY2FzZSBIRUFEX09GX1FVRVVFX1RBRzoKLQkJCWZjcF9jbW5kLT5mY3BDbnRsMSA9IEhFQURfT0ZfUTsKLQkJCWJyZWFrOwotCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkJZmNwX2NtbmQtPmZjcENudGwxID0gT1JERVJFRF9ROwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlmY3BfY21uZC0+ZmNwQ250bDEgPSBTSU1QTEVfUTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlCi0JCWZjcF9jbW5kLT5mY3BDbnRsMSA9IFNJTVBMRV9ROworCWZjcF9jbW5kLT5mY3BDbnRsMSA9IFNJTVBMRV9ROwogCiAJc2xpNCA9IChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpOwogCXBpb2NicS0+aW9jYi51bi5mY3BpLmZjcGlfWFJkeSA9IDA7CkBAIC01NjMyLDEwICs1NDk1LDcgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2Rldi0+aG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCB2cG9ydC0+Y2ZnX2x1bl9xdWV1ZV9kZXB0aCk7Ci0JZWxzZQotCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHZwb3J0LT5jZmdfbHVuX3F1ZXVlX2RlcHRoKTsKKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCB2cG9ydC0+Y2ZnX2x1bl9xdWV1ZV9kZXB0aCk7CiAKIAlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBFTkFCTEVfRkNQX1JJTkdfUE9MTElORykgewogCQlscGZjX3NsaV9oYW5kbGVfZmFzdF9yaW5nX2V2ZW50KHBoYmEsCkBAIC02MDE4LDggKzU4NzgsMTAgQEAKIAkuc2hvc3RfYXR0cnMJCT0gbHBmY19oYmFfYXR0cnMsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKIAkudmVuZG9yX2lkCQk9IExQRkNfTkxfVkVORE9SX0lELAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBscGZjX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJPSBscGZjX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX3R5cGUJPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBscGZjX3Zwb3J0X3RlbXBsYXRlID0gewpAQCAtNjA0MSw2ICs1OTAzLDggQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQk9IGxwZmNfdnBvcnRfYXR0cnMsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gbHBmY19jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlCT0gbHBmY19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWFjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCmluZGV4IDZhMDM5ZWIuLjk1M2ZkOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCkBAIC05LDY5ICs5LDYyIEBACiAgKiBHZW5lcmljIEdlbmVyaWMgTkNSNTM4MCBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgMTk5NSwgUnVzc2VsbCBLaW5nCi0gKgotICogQUxQSEEgUkVMRUFTRSAxLgotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAorI2luY2x1ZGUgPGFzbS9od3Rlc3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KLSNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCi0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0jaW5jbHVkZSAibWFjX3Njc2kuaCIKIAotLyogVGhlc2UgY29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBnZW5lcmljIDUzODAgY29yZSAqLwotI2RlZmluZSBBVVRPU0VOU0UKKy8qIERlZmluaXRpb25zIGZvciB0aGUgY29yZSBOQ1I1MzgwIGRyaXZlci4gKi8KKwogI2RlZmluZSBQU0VVRE9fRE1BCiAKKyNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMgICB1bnNpZ25lZCBjaGFyICpwZG1hX2Jhc2UKKyNkZWZpbmUgTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCkgICAgICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICpfaW5zdGFuY2UKKyNkZWZpbmUgTkNSNTM4MF9zZXR1cChpbnN0YW5jZSkgICAgICAgICBfaW5zdGFuY2UgPSBpbnN0YW5jZQorCisjZGVmaW5lIE5DUjUzODBfcmVhZChyZWcpICAgICAgICAgICAgICAgbWFjc2NzaV9yZWFkKF9pbnN0YW5jZSwgcmVnKQorI2RlZmluZSBOQ1I1MzgwX3dyaXRlKHJlZywgdmFsdWUpICAgICAgIG1hY3Njc2lfd3JpdGUoX2luc3RhbmNlLCByZWcsIHZhbHVlKQorCisjZGVmaW5lIE5DUjUzODBfcHJlYWQgICAgICAgICAgICAgICAgICAgbWFjc2NzaV9wcmVhZAorI2RlZmluZSBOQ1I1MzgwX3B3cml0ZSAgICAgICAgICAgICAgICAgIG1hY3Njc2lfcHdyaXRlCisKKyNkZWZpbmUgTkNSNTM4MF9pbnRyICAgICAgICAgICAgICAgICAgICBtYWNzY3NpX2ludHIKKyNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kICAgICAgICAgICBtYWNzY3NpX3F1ZXVlX2NvbW1hbmQKKyNkZWZpbmUgTkNSNTM4MF9hYm9ydCAgICAgICAgICAgICAgICAgICBtYWNzY3NpX2Fib3J0CisjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0ICAgICAgICAgICAgICAgbWFjc2NzaV9idXNfcmVzZXQKKyNkZWZpbmUgTkNSNTM4MF9pbmZvICAgICAgICAgICAgICAgICAgICBtYWNzY3NpX2luZm8KKyNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8gICAgICAgICAgICAgICBtYWNzY3NpX3Nob3dfaW5mbworI2RlZmluZSBOQ1I1MzgwX3dyaXRlX2luZm8gICAgICAgICAgICAgIG1hY3Njc2lfd3JpdGVfaW5mbworCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogCiAjZGVmaW5lIFJFU0VUX0JPT1QKLSNkZWZpbmUgRFJJVkVSX1NFVFVQCiAKLWV4dGVybiB2b2lkIHZpYV9zY3NpX2NsZWFyKHZvaWQpOwotCi0jaWZkZWYgUkVTRVRfQk9PVAotc3RhdGljIHZvaWQgbWFjX3Njc2lfcmVzZXRfYm9vdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSk7Ci0jZW5kaWYKLQotc3RhdGljIGludCBzZXR1cF9jYWxsZWQgPSAwOwogc3RhdGljIGludCBzZXR1cF9jYW5fcXVldWUgPSAtMTsKK21vZHVsZV9wYXJhbShzZXR1cF9jYW5fcXVldWUsIGludCwgMCk7CiBzdGF0aWMgaW50IHNldHVwX2NtZF9wZXJfbHVuID0gLTE7Cittb2R1bGVfcGFyYW0oc2V0dXBfY21kX3Blcl9sdW4sIGludCwgMCk7CiBzdGF0aWMgaW50IHNldHVwX3NnX3RhYmxlc2l6ZSA9IC0xOworbW9kdWxlX3BhcmFtKHNldHVwX3NnX3RhYmxlc2l6ZSwgaW50LCAwKTsKIHN0YXRpYyBpbnQgc2V0dXBfdXNlX3BkbWEgPSAtMTsKLSNpZmRlZiBTVVBQT1JUX1RBR1MKK21vZHVsZV9wYXJhbShzZXR1cF91c2VfcGRtYSwgaW50LCAwKTsKIHN0YXRpYyBpbnQgc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID0gLTE7Ci0jZW5kaWYKK21vZHVsZV9wYXJhbShzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcsIGludCwgMCk7CiBzdGF0aWMgaW50IHNldHVwX2hvc3RpZCA9IC0xOworbW9kdWxlX3BhcmFtKHNldHVwX2hvc3RpZCwgaW50LCAwKTsKIAogLyogVGltZSAoaW4gamlmZmllcykgdG8gd2FpdCBhZnRlciBhIHJlc2V0OyB0aGUgU0NTSSBzdGFuZGFyZCBjYWxscyBmb3IgMjUwbXMsCiAgKiB3ZSB1c3VhbGx5IGRvIDAuNXMgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4gQnV0IFRvc2hpYmEgQ0QtUk9NcyBvbmNlIG1vcmUKQEAgLTg0LDIzMiArNzcsNDggQEAKICNkZWZpbmUJQUZURVJfUkVTRVRfREVMQVkJKEhaLzIpCiAjZW5kaWYKIAotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKm1hY19zY3NpX3JlZ3AgPSBOVUxMOwotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKm1hY19zY3NpX2RycSAgPSBOVUxMOwotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKm1hY19zY3NpX25vZHJxID0gTlVMTDsKLQotCiAvKgogICogTkNSIDUzODAgcmVnaXN0ZXIgYWNjZXNzIGZ1bmN0aW9ucwogICovCiAKLSNpZiAwCi0vKiBEZWJ1ZyB2ZXJzaW9ucyAqLwotI2RlZmluZSBDVFJMKHAsdikgKCpjdHJsID0gKHYpKQotCi1zdGF0aWMgY2hhciBtYWNzY3NpX3JlYWQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIGludCByZWcpCitzdGF0aWMgaW5saW5lIGNoYXIgbWFjc2NzaV9yZWFkKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnKQogewotICBpbnQgaW9iYXNlID0gaW5zdGFuY2UtPmlvX3BvcnQ7Ci0gIGludCBpOwotICBpbnQgKmN0cmwgPSAmKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YSktPmN0cmw7Ci0KLSAgQ1RSTChpb2Jhc2UsIDApOwotICBpID0gaW5fOChpb2Jhc2UgKyAocmVnPDw0KSk7Ci0gIENUUkwoaW9iYXNlLCAweDQwKTsKLQotICByZXR1cm4gaTsKKwlyZXR1cm4gaW5fOChpbnN0YW5jZS0+YmFzZSArIChyZWcgPDwgNCkpOwogfQogCi1zdGF0aWMgdm9pZCBtYWNzY3NpX3dyaXRlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnLCBpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgbWFjc2NzaV93cml0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgaW50IHJlZywgaW50IHZhbHVlKQogewotICBpbnQgaW9iYXNlID0gaW5zdGFuY2UtPmlvX3BvcnQ7Ci0gIGludCAqY3RybCA9ICYoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopaW5zdGFuY2UtPmhvc3RkYXRhKS0+Y3RybDsKLQotICBDVFJMKGlvYmFzZSwgMCk7Ci0gIG91dF84KGlvYmFzZSArIChyZWc8PDQpLCB2YWx1ZSk7Ci0gIENUUkwoaW9iYXNlLCAweDQwKTsKLX0KLSNlbHNlCi0KLS8qIEZhc3QgdmVyc2lvbnMgKi8KLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgbWFjc2NzaV9yZWFkKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnKQotewotICByZXR1cm4gaW5fOChpbnN0YW5jZS0+aW9fcG9ydCArIChyZWc8PDQpKTsKKwlvdXRfOChpbnN0YW5jZS0+YmFzZSArIChyZWcgPDwgNCksIHZhbHVlKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBtYWNzY3NpX3dyaXRlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgcmVnLCBpbnQgdmFsdWUpCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBfX2luaXQgbWFjX3Njc2lfc2V0dXAoY2hhciAqc3RyKQogewotICBvdXRfOChpbnN0YW5jZS0+aW9fcG9ydCArIChyZWc8PDQpLCB2YWx1ZSk7Ci19Ci0jZW5kaWYKLQotCi0vKgotICogRnVuY3Rpb24gOiBtYWNfc2NzaV9zZXR1cChjaGFyICpzdHIpCi0gKgotICogUHVycG9zZSA6IGJvb3RlciBjb21tYW5kIGxpbmUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG92ZXJyaWRlcyBhcnJheSwKLSAqCi0gKiBJbnB1dHMgOiBzdHIgLSBjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBvcHRpb25zCi0gKgotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IG1hY19zY3NpX3NldHVwKGNoYXIgKnN0cikgewotI2lmZGVmIERSSVZFUl9TRVRVUAkKIAlpbnQgaW50c1s3XTsKLQkKLQkodm9pZClnZXRfb3B0aW9ucyggc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKLQkKLQlpZiAoc2V0dXBfY2FsbGVkKysgfHwgaW50c1swXSA8IDEgfHwgaW50c1swXSA+IDYpIHsKLQkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaTogPG1hYzUzODA+IgotCQkiIFVzYWdlOiBtYWM1MzgwPTxjYW5fcXVldWU+Wyw8Y21kX3Blcl9sdW4+LDxzZ190YWJsZXNpemU+LDxob3N0aWQ+LDx1c2VfdGFncz4sPHVzZV9wZG1hPl1cbiIpOwotCSAgICBwcmludGsoS0VSTl9BTEVSVCAic2NzaTogPG1hYzUzODA+IEJhZCBQZW5ndWluIHBhcmFtZXRlcnM/XG4iKTsKLQkgICAgcmV0dXJuIDA7CisKKwkodm9pZClnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOworCisJaWYgKGludHNbMF0gPCAxIHx8IGludHNbMF0gPiA2KSB7CisJCXByX2VycigiVXNhZ2U6IG1hYzUzODA9PGNhbl9xdWV1ZT5bLDxjbWRfcGVyX2x1bj5bLDxzZ190YWJsZXNpemU+Wyw8aG9zdGlkPlssPHVzZV90YWdzPlssPHVzZV9wZG1hPl1dXV1dXG4iKTsKKwkJcmV0dXJuIDA7CiAJfQotCSAgICAKLQlpZiAoaW50c1swXSA+PSAxKSB7Ci0JCWlmIChpbnRzWzFdID4gMCkKLQkJCS8qIG5vIGxpbWl0cyBvbiB0aGlzLCBqdXN0ID4gMCAqLwotCQkJc2V0dXBfY2FuX3F1ZXVlID0gaW50c1sxXTsKLQl9Ci0JaWYgKGludHNbMF0gPj0gMikgewotCQlpZiAoaW50c1syXSA+IDApCi0JCQlzZXR1cF9jbWRfcGVyX2x1biA9IGludHNbMl07Ci0JfQotCWlmIChpbnRzWzBdID49IDMpIHsKLQkJaWYgKGludHNbM10gPj0gMCkgewotCQkJc2V0dXBfc2dfdGFibGVzaXplID0gaW50c1szXTsKLQkJCS8qIE11c3QgYmUgPD0gU0dfQUxMICgyNTUpICovCi0JCQlpZiAoc2V0dXBfc2dfdGFibGVzaXplID4gU0dfQUxMKQotCQkJCXNldHVwX3NnX3RhYmxlc2l6ZSA9IFNHX0FMTDsKLQkJfQotCX0KLQlpZiAoaW50c1swXSA+PSA0KSB7Ci0JCS8qIE11c3QgYmUgYmV0d2VlbiAwIGFuZCA3ICovCi0JCWlmIChpbnRzWzRdID49IDAgJiYgaW50c1s0XSA8PSA3KQotCQkJc2V0dXBfaG9zdGlkID0gaW50c1s0XTsKLQkJZWxzZSBpZiAoaW50c1s0XSA+IDcpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYWNfc2NzaV9zZXR1cDogaW52YWxpZCBob3N0IElEICVkICFcbiIsIGludHNbNF0gKTsKLQl9Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCQotCWlmIChpbnRzWzBdID49IDUpIHsKLQkJaWYgKGludHNbNV0gPj0gMCkKLQkJCXNldHVwX3VzZV90YWdnZWRfcXVldWluZyA9ICEhaW50c1s1XTsKLQl9Ci0JCi0JaWYgKGludHNbMF0gPT0gNikgewotCSAgICBpZiAoaW50c1s2XSA+PSAwKQorCWlmIChpbnRzWzBdID49IDEpCisJCXNldHVwX2Nhbl9xdWV1ZSA9IGludHNbMV07CisJaWYgKGludHNbMF0gPj0gMikKKwkJc2V0dXBfY21kX3Blcl9sdW4gPSBpbnRzWzJdOworCWlmIChpbnRzWzBdID49IDMpCisJCXNldHVwX3NnX3RhYmxlc2l6ZSA9IGludHNbM107CisJaWYgKGludHNbMF0gPj0gNCkKKwkJc2V0dXBfaG9zdGlkID0gaW50c1s0XTsKKwlpZiAoaW50c1swXSA+PSA1KQorCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBpbnRzWzVdOworCWlmIChpbnRzWzBdID49IDYpCiAJCXNldHVwX3VzZV9wZG1hID0gaW50c1s2XTsKLQl9Ci0jZWxzZQotCWlmIChpbnRzWzBdID09IDUpIHsKLQkgICAgaWYgKGludHNbNV0gPj0gMCkKLQkJc2V0dXBfdXNlX3BkbWEgPSBpbnRzWzVdOwotCX0KLSNlbmRpZiAvKiBTVVBQT1JUX1RBR1MgKi8KLQkKLSNlbmRpZiAvKiBEUklWRVJfU0VUVVAgKi8KIAlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgibWFjNTM4MD0iLCBtYWNfc2NzaV9zZXR1cCk7Ci0KLS8qCi0gKiBGdW5jdGlvbiA6IGludCBtYWNzY3NpX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKLSAqCi0gKiBQdXJwb3NlIDogaW5pdGlhbGl6ZXMgbWFjIE5DUjUzODAgZHJpdmVyIGJhc2VkIG9uIHRoZQotICoJY29tbWFuZCBsaW5lIC8gY29tcGlsZSB0aW1lIHBvcnQgYW5kIGlycSBkZWZpbml0aW9ucy4KLSAqCi0gKiBJbnB1dHMgOiB0cG50IC0gdGVtcGxhdGUgZm9yIHRoaXMgU0NTSSBhZGFwdGVyLgotICoKLSAqIFJldHVybnMgOiAxIGlmIGEgaG9zdCBhZGFwdGVyIHdhcyBmb3VuZCwgMCBpZiBub3QuCi0gKgotICovCi0gCi1pbnQgX19pbml0IG1hY3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQotewotICAgIHN0YXRpYyBpbnQgY2FsbGVkID0gMDsKLSAgICBpbnQgZmxhZ3MgPSAwOwotICAgIHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOwotCi0gICAgaWYgKCFNQUNIX0lTX01BQyB8fCBjYWxsZWQpCi0JcmV0dXJuKCAwICk7Ci0KLSAgICBpZiAobWFjaW50b3NoX2NvbmZpZy0+c2NzaV90eXBlICE9IE1BQ19TQ1NJX09MRCkKLQlyZXR1cm4oIDAgKTsKLQotICAgIC8qIHNldHVwIHZhcmlhYmxlcyAqLwotICAgIHRwbnQtPmNhbl9xdWV1ZSA9Ci0JKHNldHVwX2Nhbl9xdWV1ZSA+IDApID8gc2V0dXBfY2FuX3F1ZXVlIDogQ0FOX1FVRVVFOwotICAgIHRwbnQtPmNtZF9wZXJfbHVuID0KLQkoc2V0dXBfY21kX3Blcl9sdW4gPiAwKSA/IHNldHVwX2NtZF9wZXJfbHVuIDogQ01EX1BFUl9MVU47Ci0gICAgdHBudC0+c2dfdGFibGVzaXplID0gCi0JKHNldHVwX3NnX3RhYmxlc2l6ZSA+PSAwKSA/IHNldHVwX3NnX3RhYmxlc2l6ZSA6IFNHX1RBQkxFU0laRTsKLQotICAgIGlmIChzZXR1cF9ob3N0aWQgPj0gMCkKLQl0cG50LT50aGlzX2lkID0gc2V0dXBfaG9zdGlkOwotICAgIGVsc2UgewotCS8qIHVzZSA3IGFzIGRlZmF1bHQgKi8KLQl0cG50LT50aGlzX2lkID0gNzsKLSAgICB9Ci0KLSNpZmRlZiBTVVBQT1JUX1RBR1MKLSAgICBpZiAoc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nIDwgMCkKLQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBVU0VfVEFHR0VEX1FVRVVJTkc7Ci0jZW5kaWYKLQotICAgIC8qIE9uY2Ugd2Ugc3VwcG9ydCBtdWx0aXBsZSA1MzgwcyAoZS5nLiBEdW9Eb2NrKSB3ZSdsbCBkbwotICAgICAgIHNvbWV0aGluZyBkaWZmZXJlbnQgaGVyZSAqLwotICAgIGluc3RhbmNlID0gc2NzaV9yZWdpc3RlciAodHBudCwgc2l6ZW9mKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhKSk7Ci0gICAgaWYgKGluc3RhbmNlID09IE5VTEwpCi0JcmV0dXJuIDA7Ci0KLSAgICBpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX0lJRlgpIHsKLQltYWNfc2NzaV9yZWdwICA9IHZpYTErMHg4MDAwOwotCW1hY19zY3NpX2RycSAgID0gdmlhMSsweEUwMDA7Ci0JbWFjX3Njc2lfbm9kcnEgPSB2aWExKzB4QzAwMDsKLQkvKiBUaGUgSUlGWCBzaG91bGQgYmUgYWJsZSB0byBkbyB0cnVlIERNQSwgYnV0IHBzZXVkby1kbWEgZG9lc24ndCB3b3JrICovCi0JZmxhZ3MgPSBGTEFHX05PX1BTRVVET19ETUE7Ci0gICAgfSBlbHNlIHsKLQltYWNfc2NzaV9yZWdwICA9IHZpYTErMHgxMDAwMDsKLQltYWNfc2NzaV9kcnEgICA9IHZpYTErMHg2MDAwOwotCW1hY19zY3NpX25vZHJxID0gdmlhMSsweDEyMDAwOwotICAgIH0KLQotICAgIGlmICghIHNldHVwX3VzZV9wZG1hKQotCWZsYWdzID0gRkxBR19OT19QU0VVRE9fRE1BOwotCQotICAgIGluc3RhbmNlLT5pb19wb3J0ID0gKHVuc2lnbmVkIGxvbmcpIG1hY19zY3NpX3JlZ3A7Ci0gICAgaW5zdGFuY2UtPmlycSA9IElSUV9NQUNfU0NTSTsKLQotI2lmZGVmIFJFU0VUX0JPT1QgICAKLSAgICBtYWNfc2NzaV9yZXNldF9ib290KGluc3RhbmNlKTsKLSNlbmRpZgotICAgIAotICAgIE5DUjUzODBfaW5pdChpbnN0YW5jZSwgZmxhZ3MpOwotCi0gICAgaW5zdGFuY2UtPm5faW9fcG9ydCA9IDI1NTsKLQotICAgICgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilpbnN0YW5jZS0+aG9zdGRhdGEpLT5jdHJsID0gMDsKLQotICAgIGlmIChpbnN0YW5jZS0+aXJxICE9IFNDU0lfSVJRX05PTkUpCi0JaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIE5DUjUzODBfaW50ciwgMCwgIm5jcjUzODAiLCBpbnN0YW5jZSkpIHsKLQkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwKLQkJICAgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwotCSAgICBpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKLQl9Ci0KLSAgICBwcmludGsoS0VSTl9JTkZPICJzY3NpJWQ6IGdlbmVyaWMgNTM4MCBhdCBwb3J0ICVsWCBpcnEiLCBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlvX3BvcnQpOwotICAgIGlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpCi0JcHJpbnRrIChLRVJOX0lORk8gInMgZGlzYWJsZWQiKTsKLSAgICBlbHNlCi0JcHJpbnRrIChLRVJOX0lORk8gIiAlZCIsIGluc3RhbmNlLT5pcnEpOwotICAgIHByaW50ayhLRVJOX0lORk8gIiBvcHRpb25zIENBTl9RVUVVRT0lZCBDTURfUEVSX0xVTj0lZCByZWxlYXNlPSVkIiwKLQkgICBpbnN0YW5jZS0+Y2FuX3F1ZXVlLCBpbnN0YW5jZS0+Y21kX3Blcl9sdW4sIE1BQ1NDU0lfUFVCTElDX1JFTEVBU0UpOwotICAgIHByaW50ayhLRVJOX0lORk8gIlxuc2NzaSVkOiIsIGluc3RhbmNlLT5ob3N0X25vKTsKLSAgICBOQ1I1MzgwX3ByaW50X29wdGlvbnMoaW5zdGFuY2UpOwotICAgIHByaW50aygiXG4iKTsKLSAgICBjYWxsZWQgPSAxOwotICAgIHJldHVybiAxOwotfQotCi1pbnQgbWFjc2NzaV9yZWxlYXNlIChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKLXsKLQlpZiAoc2hwbnQtPmlycSAhPSBTQ1NJX0lSUV9OT05FKQotCQlmcmVlX2lycShzaHBudC0+aXJxLCBzaHBudCk7Ci0JTkNSNTM4MF9leGl0KHNocG50KTsKLQotCXJldHVybiAwOwotfQorI2VuZGlmIC8qICFNT0RVTEUgKi8KIAogI2lmZGVmIFJFU0VUX0JPT1QKIC8qCkBAIC0zNDksMTAgKzE1OCw3IEBACiB9CiAjZW5kaWYKIAotY29uc3QgY2hhciAqIG1hY3Njc2lfaW5mbyAoc3RydWN0IFNjc2lfSG9zdCAqc3BudCkgewotCXJldHVybiAiIjsKLX0KLQorI2lmZGVmIFBTRVVET19ETUEKIC8qIAogICAgUHNldWRvLURNQTogKE92ZSBFZGx1bmQpCiAgICBUaGUgY29kZSBhdHRlbXB0cyB0byBjYXRjaCBidXMgZXJyb3JzIHRoYXQgb2NjdXIgaWYgb25lIGZvciBleGFtcGxlCkBAIC00MjIsMzggKzIyOCwzOSBAQAogICAgICA6ICIwIihzKSwgIjEiKGQpLCAiMiIobGVuKQkJCQlcCiAgICAgIDogImQwIikKIAotCi1zdGF0aWMgaW50IG1hY3Njc2lfcHJlYWQgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAotCQkJICB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4pCitzdGF0aWMgaW50IG1hY3Njc2lfcHJlYWQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuKQogewotICAgdW5zaWduZWQgY2hhciAqZDsKLSAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnM7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisJdW5zaWduZWQgY2hhciAqZDsKKwl1bnNpZ25lZCBjaGFyICpzOwogCi0gICBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKLSAgIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOworCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOworCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCi0gICBzID0gbWFjX3Njc2lfZHJxKzB4NjA7Ci0gICBkID0gZHN0OworCXMgPSBob3N0ZGF0YS0+cGRtYV9iYXNlICsgKElOUFVUX0RBVEFfUkVHIDw8IDQpOworCWQgPSBkc3Q7CiAKLS8qIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSBNYWNPUyAqLworCS8qIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSBNYWNPUyAqLwogCi0gICB3aGlsZSAoIShOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfRFJRKSAKLSAgICAgICAgICYmICEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSkKLSAgICAgIDsKLSAgIGlmICghKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9EUlEpIAotICAgICAgICAgJiYgKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9QSEFTRV9NQVRDSCkpIHsKLSAgICAgIHByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gbWFjc2NzaV9wcmVhZFxuIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICB9CisJd2hpbGUgKCEoTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykgJiBCQVNSX0RSUSkgJiYKKwkgICAgICAgIShOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9SRVEpKQorCQk7CiAKLSAgIENQX0lPX1RPX01FTShzLCBkLCBsZW4pOwotICAgCi0gICBpZiAobGVuICE9IDApIHsKLSAgICAgIHByaW50ayhLRVJOX05PVElDRSAiQnVzIGVycm9yIGluIG1hY3Njc2lfcHJlYWRcbiIpOwotICAgICAgcmV0dXJuIC0xOwotICAgfQotICAgCi0gICByZXR1cm4gMDsKKwlpZiAoIShOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfRFJRKSAmJgorCSAgICAoTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykgJiBCQVNSX1BIQVNFX01BVENIKSkgeworCQlwcl9lcnIoIkVycm9yIGluIG1hY3Njc2lfcHJlYWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJQ1BfSU9fVE9fTUVNKHMsIGQsIGxlbik7CisKKwlpZiAobGVuICE9IDApIHsKKwkJcHJfbm90aWNlKCJCdXMgZXJyb3IgaW4gbWFjc2NzaV9wcmVhZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC01MTUsNTkgKzMyMiwxNzIgQEAKICAgICAgOiAiMCIocyksICIxIihkKSwgIjIiKGxlbikJCQkJXAogICAgICA6ICJkMCIpCiAKLXN0YXRpYyBpbnQgbWFjc2NzaV9wd3JpdGUgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLAotCQkJCSAgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuKQorc3RhdGljIGludCBtYWNzY3NpX3B3cml0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuKQogewotICAgdW5zaWduZWQgY2hhciAqczsKLSAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmQ7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisJdW5zaWduZWQgY2hhciAqczsKKwl1bnNpZ25lZCBjaGFyICpkOwogCi0gICBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKLSAgIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOworCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOworCU5DUjUzODBfc2V0dXAoaW5zdGFuY2UpOwogCi0gICBzID0gc3JjOwotICAgZCA9IG1hY19zY3NpX2RycTsKLSAgIAotLyogVGhlc2UgY29uZGl0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIE1hY09TICovCisJcyA9IHNyYzsKKwlkID0gaG9zdGRhdGEtPnBkbWFfYmFzZSArIChPVVRQVVRfREFUQV9SRUcgPDwgNCk7CiAKLSAgIHdoaWxlICghKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9EUlEpIAotICAgICAgICAgJiYgKCEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSAKLSAgICAgICAgICAgIHx8IChOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfUEhBU0VfTUFUQ0gpKSkgCi0gICAgICA7Ci0gICBpZiAoIShOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfRFJRKSkgewotICAgICAgcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiBtYWNzY3NpX3B3cml0ZVxuIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICB9CisJLyogVGhlc2UgY29uZGl0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIE1hY09TICovCiAKLSAgIENQX01FTV9UT19JTyhzLCBkLCBsZW4pOyAgIAorCXdoaWxlICghKE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpICYgQkFTUl9EUlEpICYmCisJICAgICAgICghKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JFUSkgfHwKKwkgICAgICAgIChOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfUEhBU0VfTUFUQ0gpKSkKKwkJOwogCi0gICBpZiAobGVuICE9IDApIHsKLSAgICAgIHByaW50ayhLRVJOX05PVElDRSAiQnVzIGVycm9yIGluIG1hY3Njc2lfcHdyaXRlXG4iKTsKLSAgICAgIHJldHVybiAtMTsKLSAgIH0KLSAgIAotICAgcmV0dXJuIDA7CisJaWYgKCEoTkNSNTM4MF9yZWFkKEJVU19BTkRfU1RBVFVTX1JFRykgJiBCQVNSX0RSUSkpIHsKKwkJcHJfZXJyKCJFcnJvciBpbiBtYWNzY3NpX3B3cml0ZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlDUF9NRU1fVE9fSU8ocywgZCwgbGVuKTsKKworCWlmIChsZW4gIT0gMCkgeworCQlwcl9ub3RpY2UoIkJ1cyBlcnJvciBpbiBtYWNzY3NpX3B3cml0ZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KLQorI2VuZGlmCiAKICNpbmNsdWRlICJOQ1I1MzgwLmMiCiAKLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKLQkucHJvY19uYW1lCQkJPSAiTWFjNTM4MCIsCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAgICAgICAgICJtYWNfc2NzaSIKKyNkZWZpbmUgUEZYICAgICAgICAgICAgICAgICAgICAgRFJWX01PRFVMRV9OQU1FICI6ICIKKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbWFjX3Njc2lfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCQk9IFRISVNfTU9EVUxFLAorCS5wcm9jX25hbWUJCQk9IERSVl9NT0RVTEVfTkFNRSwKIAkuc2hvd19pbmZvCQkJPSBtYWNzY3NpX3Nob3dfaW5mbywKIAkud3JpdGVfaW5mbwkJCT0gbWFjc2NzaV93cml0ZV9pbmZvLAogCS5uYW1lCQkJCT0gIk1hY2ludG9zaCBOQ1I1MzgwIFNDU0kiLAotCS5kZXRlY3QJCQkJPSBtYWNzY3NpX2RldGVjdCwKLQkucmVsZWFzZQkJCT0gbWFjc2NzaV9yZWxlYXNlLAogCS5pbmZvCQkJCT0gbWFjc2NzaV9pbmZvLAogCS5xdWV1ZWNvbW1hbmQJCQk9IG1hY3Njc2lfcXVldWVfY29tbWFuZCwKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBtYWNzY3NpX2Fib3J0LAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgkJPSBtYWNzY3NpX2J1c19yZXNldCwKLQkuY2FuX3F1ZXVlCQkJPSBDQU5fUVVFVUUsCisJLmNhbl9xdWV1ZQkJCT0gMTYsCiAJLnRoaXNfaWQJCQk9IDcsCiAJLnNnX3RhYmxlc2l6ZQkJCT0gU0dfQUxMLAotCS5jbWRfcGVyX2x1bgkJCT0gQ01EX1BFUl9MVU4sCisJLmNtZF9wZXJfbHVuCQkJPSAyLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRElTQUJMRV9DTFVTVEVSSU5HCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBtYWNfc2NzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOworCWludCBlcnJvcjsKKwlpbnQgaG9zdF9mbGFncyA9IDA7CisJc3RydWN0IHJlc291cmNlICppcnEsICpwaW9fbWVtLCAqcGRtYV9tZW0gPSBOVUxMOwogCi0jaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKKwlwaW9fbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXBpb19tZW0pCisJCXJldHVybiAtRU5PREVWOworCisjaWZkZWYgUFNFVURPX0RNQQorCXBkbWFfbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKyNlbmRpZgorCisJaXJxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKworCWlmICghaHdyZWdfcHJlc2VudCgodW5zaWduZWQgY2hhciAqKXBpb19tZW0tPnN0YXJ0ICsKKwkgICAgICAgICAgICAgICAgICAgKFNUQVRVU19SRUcgPDwgNCkpKSB7CisJCXByX2luZm8oUEZYICJubyBkZXZpY2UgZGV0ZWN0ZWQgYXQgJXBhcFxuIiwgJnBpb19tZW0tPnN0YXJ0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHNldHVwX2Nhbl9xdWV1ZSA+IDApCisJCW1hY19zY3NpX3RlbXBsYXRlLmNhbl9xdWV1ZSA9IHNldHVwX2Nhbl9xdWV1ZTsKKwlpZiAoc2V0dXBfY21kX3Blcl9sdW4gPiAwKQorCQltYWNfc2NzaV90ZW1wbGF0ZS5jbWRfcGVyX2x1biA9IHNldHVwX2NtZF9wZXJfbHVuOworCWlmIChzZXR1cF9zZ190YWJsZXNpemUgPj0gMCkKKwkJbWFjX3Njc2lfdGVtcGxhdGUuc2dfdGFibGVzaXplID0gc2V0dXBfc2dfdGFibGVzaXplOworCWlmIChzZXR1cF9ob3N0aWQgPj0gMCkKKwkJbWFjX3Njc2lfdGVtcGxhdGUudGhpc19pZCA9IHNldHVwX2hvc3RpZCAmIDc7CisJaWYgKHNldHVwX3VzZV9wZG1hIDwgMCkKKwkJc2V0dXBfdXNlX3BkbWEgPSAwOworCisJaW5zdGFuY2UgPSBzY3NpX2hvc3RfYWxsb2MoJm1hY19zY3NpX3RlbXBsYXRlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSkpOworCWlmICghaW5zdGFuY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5zdGFuY2UtPmJhc2UgPSBwaW9fbWVtLT5zdGFydDsKKwlpZiAoaXJxKQorCQlpbnN0YW5jZS0+aXJxID0gaXJxLT5zdGFydDsKKwllbHNlCisJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CisKKwlpZiAocGRtYV9tZW0gJiYgc2V0dXBfdXNlX3BkbWEpIHsKKwkJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CisKKwkJaG9zdGRhdGEtPnBkbWFfYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopcGRtYV9tZW0tPnN0YXJ0OworCX0gZWxzZQorCQlob3N0X2ZsYWdzIHw9IEZMQUdfTk9fUFNFVURPX0RNQTsKKworI2lmZGVmIFJFU0VUX0JPT1QKKwltYWNfc2NzaV9yZXNldF9ib290KGluc3RhbmNlKTsKKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9UQUdTCisJaG9zdF9mbGFncyB8PSBzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPiAwID8gRkxBR19UQUdHRURfUVVFVUlORyA6IDA7CisjZW5kaWYKKworCU5DUjUzODBfaW5pdChpbnN0YW5jZSwgaG9zdF9mbGFncyk7CisKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpIHsKKwkJZXJyb3IgPSByZXF1ZXN0X2lycShpbnN0YW5jZS0+aXJxLCBtYWNzY3NpX2ludHIsIElSUUZfU0hBUkVELAorCQkgICAgICAgICAgICAgICAgICAgICJOQ1I1MzgwIiwgaW5zdGFuY2UpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGZhaWxfaXJxOworCX0KKworCWVycm9yID0gc2NzaV9hZGRfaG9zdChpbnN0YW5jZSwgTlVMTCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxfaG9zdDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluc3RhbmNlKTsKKworCXNjc2lfc2Nhbl9ob3N0KGluc3RhbmNlKTsKKwlyZXR1cm4gMDsKKworZmFpbF9ob3N0OgorCWlmIChpbnN0YW5jZS0+aXJxICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEoaW5zdGFuY2UtPmlycSwgaW5zdGFuY2UpOworZmFpbF9pcnE6CisJTkNSNTM4MF9leGl0KGluc3RhbmNlKTsKKwlzY3NpX2hvc3RfcHV0KGluc3RhbmNlKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IG1hY19zY3NpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzY3NpX3JlbW92ZV9ob3N0KGluc3RhbmNlKTsKKwlpZiAoaW5zdGFuY2UtPmlycSAhPSBOT19JUlEpCisJCWZyZWVfaXJxKGluc3RhbmNlLT5pcnEsIGluc3RhbmNlKTsKKwlOQ1I1MzgwX2V4aXQoaW5zdGFuY2UpOworCXNjc2lfaG9zdF9wdXQoaW5zdGFuY2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNfc2NzaV9kcml2ZXIgPSB7CisJLnJlbW92ZSA9IF9fZXhpdF9wKG1hY19zY3NpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSBEUlZfTU9EVUxFX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKG1hY19zY3NpX2RyaXZlciwgbWFjX3Njc2lfcHJvYmUpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX01PRFVMRV9OQU1FKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5oIGIvZHJpdmVycy9zY3NpL21hY19zY3NpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OTY5YjAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL21hY19zY3NpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ3VtYW5hIEdlbmVyaWMgTkNSNTM4MCBkcml2ZXIgZGVmaW5lcwotICoKLSAqIENvcHlyaWdodCAxOTkzLCBEcmV3IEVja2hhcmR0Ci0gKglWaXNpb25hcnkgQ29tcHV0aW5nCi0gKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQotICoJZHJld0Bjb2xvcmFkby5lZHUKLSAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBBTFBIQSBSRUxFQVNFIDEuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0Ci0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0Ci0gKi8KLQotI2lmbmRlZiBNQUNfTkNSNTM4MF9ICi0jZGVmaW5lIE1BQ19OQ1I1MzgwX0gKLQotI2RlZmluZSBNQUNTQ1NJX1BVQkxJQ19SRUxFQVNFIDIKLQotI2lmbmRlZiBBU00KLQotI2lmbmRlZiBDTURfUEVSX0xVTgotI2RlZmluZSBDTURfUEVSX0xVTiAyCi0jZW5kaWYKLQotI2lmbmRlZiBDQU5fUVVFVUUKLSNkZWZpbmUgQ0FOX1FVRVVFIDE2Ci0jZW5kaWYKLQotI2lmbmRlZiBTR19UQUJMRVNJWkUKLSNkZWZpbmUgU0dfVEFCTEVTSVpFIFNHX05PTkUKLSNlbmRpZgotCi0jaWZuZGVmIFVTRV9UQUdHRURfUVVFVUlORwotI2RlZmluZQlVU0VfVEFHR0VEX1FVRVVJTkcgMAotI2VuZGlmCi0KLSNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4KLQotI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcyBcCi0gICAgaW50IHBvcnQsIGN0cmwKLQotI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKSBcCi0gICAgICAgIHN0cnVjdCBTY3NpX0hvc3QgKl9pbnN0YW5jZQotCi0jZGVmaW5lIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpIFwKLSAgICAgICAgX2luc3RhbmNlID0gaW5zdGFuY2UKLQotI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKSBtYWNzY3NpX3JlYWQoX2luc3RhbmNlLCByZWcpCi0jZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkgbWFjc2NzaV93cml0ZShfaW5zdGFuY2UsIHJlZywgdmFsdWUpCi0KLSNkZWZpbmUgTkNSNTM4MF9wcmVhZCAJbWFjc2NzaV9wcmVhZAotI2RlZmluZSBOQ1I1MzgwX3B3cml0ZSAJbWFjc2NzaV9wd3JpdGUKLQkKLSNkZWZpbmUgTkNSNTM4MF9pbnRyIG1hY3Njc2lfaW50cgotI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgbWFjc2NzaV9xdWV1ZV9jb21tYW5kCi0jZGVmaW5lIE5DUjUzODBfYWJvcnQgbWFjc2NzaV9hYm9ydAotI2RlZmluZSBOQ1I1MzgwX2J1c19yZXNldCBtYWNzY3NpX2J1c19yZXNldAotI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyBtYWNzY3NpX3Nob3dfaW5mbwotI2RlZmluZSBOQ1I1MzgwX3dyaXRlX2luZm8gbWFjc2NzaV93cml0ZV9pbmZvCi0KLSNlbmRpZiAvKiBuZGVmIEFTTSAqLwotI2VuZGlmIC8qIE1BQ19OQ1I1MzgwX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwppbmRleCBhYzVkOTRjLi4yNDg1MjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwpAQCAtMTk0NSw3ICsxOTQ1LDcgQEAKIAkgICAgIGNtZC0+ZGV2aWNlLT5pZCwgKHUzMiljbWQtPmRldmljZS0+bHVuKTsKIAogCWlmKGxpc3RfZW1wdHkoJmFkYXB0ZXItPnBlbmRpbmdfbGlzdCkpCi0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIEZBSUxFRDsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsICZhZGFwdGVyLT5wZW5kaW5nX2xpc3QpIHsKIApAQCAtMTk2OCw3ICsxOTY4LDcgQEAKIAkJCQkJKGFvcj09U0NCX0FCT1JUKSA/ICJBQk9SVElORyI6IlJFU0VUIiwKIAkJCQkJc2NiLT5pZHgpOwogCi0JCQkJcmV0dXJuIEZBTFNFOworCQkJCXJldHVybiBGQUlMRUQ7CiAJCQl9CiAJCQllbHNlIHsKIApAQCAtMTk5MywxMiArMTk5MywxMiBAQAogCQkJCWxpc3RfYWRkX3RhaWwoU0NTSV9MSVNUKGNtZCksCiAJCQkJCQkmYWRhcHRlci0+Y29tcGxldGVkX2xpc3QpOwogCi0JCQkJcmV0dXJuIFRSVUU7CisJCQkJcmV0dXJuIFNVQ0NFU1M7CiAJCQl9CiAJCX0KIAl9CiAKLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIEZBSUxFRDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCmluZGV4IDUzMWRjZTQuLmYwOTg3ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwpAQCAtMzMyLDI3ICszMzIsNiBAQAogCU5VTEwsCiB9OwogCi0vKioKLSAqIG1lZ2FyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIENoYW5nZSB0aGUgZGV2aWNlJ3MgcXVldWUgZGVwdGgKLSAqIEBzZGV2OglzY3NpIGRldmljZSBzdHJ1Y3QKLSAqIEBxZGVwdGg6CWRlcHRoIHRvIHNldAotICogQHJlYXNvbjoJY2FsbGluZyBjb250ZXh0Ci0gKgotICogUmV0dXJuIHZhbHVlOgotICogCWFjdHVhbCBkZXB0aCBzZXQKLSAqLwotc3RhdGljIGludCBtZWdhcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLAotCQkJCSAgICAgICBpbnQgcmVhc29uKQotewotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHFkZXB0aCA+IE1CT1hfTUFYX1NDU0lfQ01EUykKLQkJcWRlcHRoID0gTUJPWF9NQVhfU0NTSV9DTURTOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHFkZXB0aCk7Ci0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCiAvKgogICogU2NzaSBob3N0IHRlbXBsYXRlIGZvciBtZWdhcmFpZCB1bmlmaWVkIGRyaXZlcgogICovCkBAIC0zNjUsNyArMzQ0LDcgQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIJPSBtZWdhcmFpZF9yZXNldF9oYW5kbGVyLAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgkJPSBtZWdhcmFpZF9yZXNldF9oYW5kbGVyLAogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJCT0gbWVnYXJhaWRfcmVzZXRfaGFuZGxlciwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCQk9IG1lZ2FyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCQk9IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLm5vX3dyaXRlX3NhbWUJCQk9IDEsCiAJLnNkZXZfYXR0cnMJCQk9IG1lZ2FyYWlkX3NkZXZfYXR0cnMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKaW5kZXggYTQ5OTE0ZC4uMGQ0NGQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaApAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycwogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMiAgTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwMy0yMDEzICBMU0kgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCAgQXZhZ28gVGVjaG5vbG9naWVzCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTQsMTcgKzE1LDE4IEBACiAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKgogICogIEZJTEU6IG1lZ2FyYWlkX3Nhcy5oCiAgKgotICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcnM6IEF2YWdvIFRlY2hub2xvZ2llcworICogICAgICAgICAgIEthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KKyAqICAgICAgICAgICBTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgogICoKLSAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICogIFNlbmQgZmVlZGJhY2sgdG86IG1lZ2FyYWlkbGludXgucGRsQGF2YWdvdGVjaC5jb20KICAqCi0gKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKLSAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqICBNYWlsIHRvOiBBdmFnbyBUZWNobm9sb2dpZXMsIDM1MCBXZXN0IFRyaW1ibGUgUm9hZCwgQnVpbGRpbmcgOTAsCisgKiAgU2FuIEpvc2UsIENhbGlmb3JuaWEgOTUxMzEKICAqLwogCiAjaWZuZGVmIExTSV9NRUdBUkFJRF9TQVNfSApAQCAtMzMsOSArMzUsNyBAQAogLyoKICAqIE1lZ2FSQUlEIFNBUyBEcml2ZXIgbWV0YSBkYXRhCiAgKi8KLSNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwNi44MDUuMDYuMDAtcmMxIgotI2RlZmluZSBNRUdBU0FTX1JFTERBVEUJCQkJIlNlcC4gNCwgMjAxNCIKLSNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJCSJUaHUuIFNlcC4gNCAxNzowMDowMCBQRFQgMjAxNCIKKyNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwNi44MDUuMDYuMDEtcmMxIgogCiAvKgogICogRGV2aWNlIElEcwpAQCAtMTkzMSw4ICsxOTMxLDcgQEAKIAlzdHJ1Y3QgTERfTE9BRF9CQUxBTkNFX0lORk8gKmxiSW5mbywgc3RydWN0IElPX1JFUVVFU1RfSU5GTyAqaW5faW5mbyk7CiB2b2lkIG1yX3VwZGF0ZV9sb2FkX2JhbGFuY2VfcGFyYW1zKHN0cnVjdCBNUl9EUlZfUkFJRF9NQVBfQUxMICptYXAsCiAJc3RydWN0IExEX0xPQURfQkFMQU5DRV9JTkZPICpsYkluZm8pOwotaW50IG1lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCi0Jc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvICpjdHJsX2luZm8pOworaW50IG1lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOwogaW50IG1lZ2FzYXNfc2V0X2NyYXNoX2R1bXBfcGFyYW1zKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKIAl1OCBjcmFzaF9idWZfc3RhdGUpOwogdm9pZCBtZWdhc2FzX2ZyZWVfaG9zdF9jcmFzaF9idWZmZXIoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMKaW5kZXggNTY0MGFkMS4uZjA1NTgwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMKQEAgLTEsNyArMSw4IEBACiAvKgogICogIExpbnV4IE1lZ2FSQUlEIGRyaXZlciBmb3IgU0FTIGJhc2VkIFJBSUQgY29udHJvbGxlcnMKICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTIgIExTSSBDb3Jwb3JhdGlvbi4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMyAgTFNJIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgIEF2YWdvIFRlY2hub2xvZ2llcwogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE0LDIyICsxNSwyMCBAQAogICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICoKLSAqICBGSUxFOiBtZWdhcmFpZF9zYXNfYmFzZS5jCi0gKiAgVmVyc2lvbiA6IDA2LjgwNS4wNi4wMC1yYzEKLSAqCi0gKiAgQXV0aG9yczogTFNJIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yczogQXZhZ28gVGVjaG5vbG9naWVzCiAgKiAgICAgICAgICAgU3JlZW5pdmFzIEJhZ2Fsa290ZQogICogICAgICAgICAgIFN1bWFudCBQYXRybwogICogICAgICAgICAgIEJvIFlhbmcKLSAqICAgICAgICAgICBBZGFtIFJhZGZvcmQgPGxpbnV4cmFpZEBsc2kuY29tPgorICogICAgICAgICAgIEFkYW0gUmFkZm9yZAorICogICAgICAgICAgIEthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KKyAqICAgICAgICAgICBTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgogICoKLSAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICogIFNlbmQgZmVlZGJhY2sgdG86IG1lZ2FyYWlkbGludXgucGRsQGF2YWdvdGVjaC5jb20KICAqCi0gKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKLSAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqICBNYWlsIHRvOiBBdmFnbyBUZWNobm9sb2dpZXMsIDM1MCBXZXN0IFRyaW1ibGUgUm9hZCwgQnVpbGRpbmcgOTAsCisgKiAgU2FuIEpvc2UsIENhbGlmb3JuaWEgOTUxMzEKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDA4LDcgKzEwMDcsNyBAQAogCQljcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGNtZF90b19hYm9ydC0+ZnJhbWVfcGh5c19hZGRyKSk7CiAKIAljbWQtPnN5bmNfY21kID0gMTsKLQljbWQtPmNtZF9zdGF0dXMgPSAweEZGOworCWNtZC0+Y21kX3N0YXR1cyA9IEVOT0RBVEE7CiAKIAlpbnN0YW5jZS0+aW5zdGFuY2V0LT5pc3N1ZV9kY21kKGluc3RhbmNlLCBjbWQpOwogCkBAIC0xNTcyLDYgKzE1NzEsMTIgQEAKIAlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKQogCSAgICBzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCisJaWYgKGluc3RhbmNlLT51bmxvYWQgPT0gMSkgeworCQlzY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJc2NtZC0+c2NzaV9kb25lKHNjbWQpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoaW5zdGFuY2UtPmlzc3VlcGVuZF9kb25lID09IDApCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCkBAIC0yNTg2LDIwICsyNTkxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbWVnYXNhc19jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJCSAgICAgIGludCBxdWV1ZV9kZXB0aCwgaW50IHJlYXNvbikKLXsKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChxdWV1ZV9kZXB0aCA+IHNkZXYtPmhvc3QtPmNhbl9xdWV1ZSkKLQkJcXVldWVfZGVwdGggPSBzZGV2LT5ob3N0LT5jYW5fcXVldWU7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksCi0JCQkJcXVldWVfZGVwdGgpOwotCi0JcmV0dXJuIHF1ZXVlX2RlcHRoOwotfQotCiBzdGF0aWMgc3NpemVfdAogbWVnYXNhc19md19jcmFzaF9idWZmZXJfc3RvcmUoc3RydWN0IGRldmljZSAqY2RldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0yNzY0LDcgKzI3NTUsNyBAQAogCS5zaG9zdF9hdHRycyA9IG1lZ2FyYWlkX2hvc3RfYXR0cnMsCiAJLmJpb3NfcGFyYW0gPSBtZWdhc2FzX2Jpb3NfcGFyYW0sCiAJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IG1lZ2FzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkubm9fd3JpdGVfc2FtZSA9IDEsCiB9OwogCkBAIC00MDI4LDI1ICs0MDE5LDgzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIG1lZ2FzYXNfdXBkYXRlX2V4dF92ZF9kZXRhaWxzIDogVXBkYXRlIGRldGFpbHMgdy5yLnQgRXh0ZW5kZWQgVkQKKyAqIGluc3RhbmNlCQkJIDogQ29udHJvbGxlcidzIGluc3RhbmNlCisqLworc3RhdGljIHZvaWQgbWVnYXNhc191cGRhdGVfZXh0X3ZkX2RldGFpbHMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCXUzMiBvbGRfbWFwX3N6OworCXUzMiBuZXdfbWFwX3N6OworCisJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKwkvKiBGb3IgTUZJIGJhc2VkIGNvbnRyb2xsZXJzIHJldHVybiBkdW1teSBzdWNjZXNzICovCisJaWYgKCFmdXNpb24pCisJCXJldHVybjsKKworCWluc3RhbmNlLT5zdXBwb3J0bWF4MjU2dmQgPQorCQlpbnN0YW5jZS0+Y3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczMuc3VwcG9ydE1heEV4dExEczsKKwkvKiBCZWxvdyBpcyBhZGRpdGlvbmFsIGNoZWNrIHRvIGFkZHJlc3MgZnV0dXJlIEZXIGVuaGFuY2VtZW50ICovCisJaWYgKGluc3RhbmNlLT5jdHJsX2luZm8tPm1heF9sZHMgPiA2NCkKKwkJaW5zdGFuY2UtPnN1cHBvcnRtYXgyNTZ2ZCA9IDE7CisKKwlpbnN0YW5jZS0+ZHJ2X3N1cHBvcnRlZF92ZF9jb3VudCA9IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTCisJCQkJCSogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3BkX2NvdW50ID0gTUVHQVNBU19NQVhfUERfQ0hBTk5FTFMKKwkJCQkJKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJaWYgKGluc3RhbmNlLT5zdXBwb3J0bWF4MjU2dmQpIHsKKwkJaW5zdGFuY2UtPmZ3X3N1cHBvcnRlZF92ZF9jb3VudCA9IE1BWF9MT0dJQ0FMX0RSSVZFU19FWFQ7CisJCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQgPSBNQVhfUEhZU0lDQUxfREVWSUNFUzsKKwl9IGVsc2UgeworCQlpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3ZkX2NvdW50ID0gTUFYX0xPR0lDQUxfRFJJVkVTOworCQlpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3BkX2NvdW50ID0gTUFYX1BIWVNJQ0FMX0RFVklDRVM7CisJfQorCWRldl9pbmZvKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiRmlybXdhcmUgc3VwcG9ydHMgJWQgVkQgJWQgUERcbiIsCisJCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQsCisJCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQpOworCWRldl9pbmZvKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiRHJpdmVyIHN1cHBvcnRzICVkIFZEICAlZCBQRFxuIiwKKwkJaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfdmRfY291bnQsCisJCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3BkX2NvdW50KTsKKworCW9sZF9tYXBfc3ogPSAgc2l6ZW9mKHN0cnVjdCBNUl9GV19SQUlEX01BUCkgKworCQkJCShzaXplb2Yoc3RydWN0IE1SX0xEX1NQQU5fTUFQKSAqCisJCQkJKGluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQgLSAxKSk7CisJbmV3X21hcF9zeiA9ICBzaXplb2Yoc3RydWN0IE1SX0ZXX1JBSURfTUFQX0VYVCk7CisJZnVzaW9uLT5kcnZfbWFwX3N6ID0gIHNpemVvZihzdHJ1Y3QgTVJfRFJWX1JBSURfTUFQKSArCisJCQkJKHNpemVvZihzdHJ1Y3QgTVJfTERfU1BBTl9NQVApICoKKwkJCQkoaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfdmRfY291bnQgLSAxKSk7CisKKwlmdXNpb24tPm1heF9tYXBfc3ogPSBtYXgob2xkX21hcF9zeiwgbmV3X21hcF9zeik7CisKKworCWlmIChpbnN0YW5jZS0+c3VwcG9ydG1heDI1NnZkKQorCQlmdXNpb24tPmN1cnJlbnRfbWFwX3N6ID0gbmV3X21hcF9zejsKKwllbHNlCisJCWZ1c2lvbi0+Y3VycmVudF9tYXBfc3ogPSBvbGRfbWFwX3N6OworCit9CisKIC8qKgogICogbWVnYXNhc19nZXRfY29udHJvbGxlcl9pbmZvIC0JUmV0dXJucyBGVydzIGNvbnRyb2xsZXIgc3RydWN0dXJlCiAgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICogQGN0cmxfaW5mbzoJCQkJQ29udHJvbGxlciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICAqCiAgKiBJc3N1ZXMgYW4gaW50ZXJuYWwgY29tbWFuZCAoRENNRCkgdG8gZ2V0IHRoZSBGVydzIGNvbnRyb2xsZXIgc3RydWN0dXJlLgogICogVGhpcyBpbmZvcm1hdGlvbiBpcyBtYWlubHkgdXNlZCB0byBmaW5kIG91dCB0aGUgbWF4aW11bSBJTyB0cmFuc2ZlciBwZXIKICAqIGNvbW1hbmQgc3VwcG9ydGVkIGJ5IHRoZSBGVy4KICAqLwogaW50Ci1tZWdhc2FzX2dldF9jdHJsX2luZm8oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQkgICAgICBzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmN0cmxfaW5mbykKK21lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CiAJc3RydWN0IG1lZ2FzYXNfZGNtZF9mcmFtZSAqZGNtZDsKIAlzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmNpOworCXN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyAqY3RybF9pbmZvOwogCWRtYV9hZGRyX3QgY2lfaCA9IDA7CiAKKwljdHJsX2luZm8gPSBpbnN0YW5jZS0+Y3RybF9pbmZvOworCiAJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKIAogCWlmICghY21kKSB7CkBAIC00MDg2LDggKzQxMzUsMTMgQEAKIAllbHNlCiAJCXJldCA9IG1lZ2FzYXNfaXNzdWVfcG9sbGVkKGluc3RhbmNlLCBjbWQpOwogCi0JaWYgKCFyZXQpCisJaWYgKCFyZXQpIHsKIAkJbWVtY3B5KGN0cmxfaW5mbywgY2ksIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pKTsKKwkJbGUzMl90b19jcHVzKCh1MzIgKikmY3RybF9pbmZvLT5wcm9wZXJ0aWVzLk9uT2ZmUHJvcGVydGllcyk7CisJCWxlMzJfdG9fY3B1cygodTMyICopJmN0cmxfaW5mby0+YWRhcHRlck9wZXJhdGlvbnMyKTsKKwkJbGUzMl90b19jcHVzKCh1MzIgKikmY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczMpOworCQltZWdhc2FzX3VwZGF0ZV9leHRfdmRfZGV0YWlscyhpbnN0YW5jZSk7CisJfQogCiAJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyksCiAJCQkgICAgY2ksIGNpX2gpOwpAQCAtNDI4OSw3ICs0MzQzLDcgQEAKIAlpZiAobWVnYXNhc19pc3N1ZV9pbml0X21maShpbnN0YW5jZSkpCiAJCWdvdG8gZmFpbF9md19pbml0OwogCi0JaWYgKG1lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhpbnN0YW5jZSwgaW5zdGFuY2UtPmN0cmxfaW5mbykpIHsKKwlpZiAobWVnYXNhc19nZXRfY3RybF9pbmZvKGluc3RhbmNlKSkgewogCQlkZXZfZXJyKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiKCVkKTogQ291bGQgZ2V0IGNvbnRyb2xsZXIgaW5mbyAiCiAJCQkiRmFpbCBmcm9tICVzICVkXG4iLCBpbnN0YW5jZS0+dW5pcXVlX2lkLAogCQkJX19mdW5jX18sIF9fTElORV9fKTsKQEAgLTQ1MjcsMTIgKzQ1ODEsOCBAQAogCQlkZXZfaW5mbygmaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJCSJDb250cm9sbGVyIHR5cGU6IGlNUlxuIik7CiAJfQotCS8qIE9uT2ZmUHJvcGVydGllcyBhcmUgY29udmVydGVkIGludG8gQ1BVIGFyY2gqLwotCWxlMzJfdG9fY3B1cygodTMyICopJmN0cmxfaW5mby0+cHJvcGVydGllcy5Pbk9mZlByb3BlcnRpZXMpOwogCWluc3RhbmNlLT5kaXNhYmxlT25saW5lQ3RybFJlc2V0ID0KIAljdHJsX2luZm8tPnByb3BlcnRpZXMuT25PZmZQcm9wZXJ0aWVzLmRpc2FibGVPbmxpbmVDdHJsUmVzZXQ7Ci0JLyogYWRhcHRlck9wZXJhdGlvbnMyIGFyZSBjb252ZXJ0ZWQgaW50byBDUFUgYXJjaCovCi0JbGUzMl90b19jcHVzKCh1MzIgKikmY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczIpOwogCWluc3RhbmNlLT5tcGlvID0gY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczIubXBpbzsKIAlpbnN0YW5jZS0+VW5ldmVuU3BhblN1cHBvcnQgPQogCQljdHJsX2luZm8tPmFkYXB0ZXJPcGVyYXRpb25zMi5zdXBwb3J0VW5ldmVuU3BhbnM7CkBAIC00NTYyLDcgKzQ2MTIsNiBAQAogCQkgICAgICAgInJlcXVlc3RvcklkICVkXG4iLCBpbnN0YW5jZS0+cmVxdWVzdG9ySWQpOwogCX0KIAotCWxlMzJfdG9fY3B1cygodTMyICopJmN0cmxfaW5mby0+YWRhcHRlck9wZXJhdGlvbnMzKTsKIAlpbnN0YW5jZS0+Y3Jhc2hfZHVtcF9md19zdXBwb3J0ID0KIAkJY3RybF9pbmZvLT5hZGFwdGVyT3BlcmF0aW9uczMuc3VwcG9ydENyYXNoRHVtcDsKIAlpbnN0YW5jZS0+Y3Jhc2hfZHVtcF9kcnZfc3VwcG9ydCA9CkBAIC00NTg3LDggKzQ2MzYsNiBAQAogCWlmICh0bXBfc2VjdG9ycyAmJiAoaW5zdGFuY2UtPm1heF9zZWN0b3JzX3Blcl9yZXEgPiB0bXBfc2VjdG9ycykpCiAJCWluc3RhbmNlLT5tYXhfc2VjdG9yc19wZXJfcmVxID0gdG1wX3NlY3RvcnM7CiAKLQlrZnJlZShjdHJsX2luZm8pOwotCiAJLyogQ2hlY2sgZm9yIHZhbGlkIHRocm90dGxlcXVldWVkZXB0aCBtb2R1bGUgcGFyYW1ldGVyICovCiAJaWYgKGluc3RhbmNlLT5pc19pbXIpIHsKIAkJaWYgKHRocm90dGxlcXVldWVkZXB0aCA+IChpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgLQpAQCAtNDk1NywxMCArNTAwNCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qCi0JICogVHJpZ2dlciBTQ1NJIHRvIHNjYW4gb3VyIGRyaXZlcwotCSAqLwotCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCXJldHVybiAwOwogfQogCkBAIC01MDgzLDYgKzUxMjYsOCBAQAogCQkJZ290byBmYWlsX2FsbG9jX2RtYV9idWY7CiAJCX0KIAkJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKwkJbWVtc2V0KGZ1c2lvbiwgMCwKKwkJCSgoMSA8PCBQQUdFX1NISUZUKSA8PCBpbnN0YW5jZS0+Y3RybF9jb250ZXh0X3BhZ2VzKSk7CiAJCUlOSVRfTElTVF9IRUFEKCZmdXNpb24tPmNtZF9wb29sKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmZ1c2lvbi0+bXB0X3Bvb2xfbG9jayk7CiAJCW1lbXNldChmdXNpb24tPmxvYWRfYmFsYW5jZV9pbmZvLCAwLApAQCAtNTI4OCw2ICs1MzMzLDEwIEBACiAJCWdvdG8gZmFpbF9pb19hdHRhY2g7CiAKIAlpbnN0YW5jZS0+dW5sb2FkID0gMDsKKwkvKgorCSAqIFRyaWdnZXIgU0NTSSB0byBzY2FuIG91ciBkcml2ZXMKKwkgKi8KKwlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCS8qCiAJICogSW5pdGlhdGUgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKQpAQCAtNjA1MSw2ICs2MTAwLDExIEBACiAJbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZChpbnN0YW5jZSwgY21kLCAwKTsKIAljbWQtPnN5bmNfY21kID0gMDsKIAorCWlmIChpbnN0YW5jZS0+dW5sb2FkID09IDEpIHsKKwkJZGV2X2luZm8oJmluc3RhbmNlLT5wZGV2LT5kZXYsICJEcml2ZXIgdW5sb2FkIGlzIGluIHByb2dyZXNzICIKKwkJCSJkb24ndCBzdWJtaXQgZGF0YSB0byBhcHBsaWNhdGlvblxuIik7CisJCWdvdG8gb3V0OworCX0KIAkvKgogCSAqIGNvcHkgb3V0IHRoZSBrZXJuZWwgYnVmZmVycyB0byB1c2VyIGJ1ZmZlcnMKIAkgKi8KQEAgLTY0MDAsMTYgKzY0NTQsNiBAQAogc3RhdGljIERSSVZFUl9BVFRSKHZlcnNpb24sIFNfSVJVR08sIG1lZ2FzYXNfc3lzZnNfc2hvd192ZXJzaW9uLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QKLW1lZ2FzYXNfc3lzZnNfc2hvd19yZWxlYXNlX2RhdGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRkLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNucHJpbnRmKGJ1Ziwgc3RybGVuKE1FR0FTQVNfUkVMREFURSkgKyAyLCAiJXNcbiIsCi0JCQlNRUdBU0FTX1JFTERBVEUpOwotfQotCi1zdGF0aWMgRFJJVkVSX0FUVFIocmVsZWFzZV9kYXRlLCBTX0lSVUdPLCBtZWdhc2FzX3N5c2ZzX3Nob3dfcmVsZWFzZV9kYXRlLAotCQkgICBOVUxMKTsKLQotc3RhdGljIHNzaXplX3QKIG1lZ2FzYXNfc3lzZnNfc2hvd19zdXBwb3J0X3BvbGxfZm9yX2V2ZW50KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZCwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBzdXBwb3J0X3BvbGxfZm9yX2V2ZW50KTsKQEAgLTY3MTIsOCArNjc1Niw3IEBACiAJLyoKIAkgKiBBbm5vdW5jZSBkcml2ZXIgdmVyc2lvbiBhbmQgb3RoZXIgaW5mb3JtYXRpb24KIAkgKi8KLQlwcmludGsoS0VSTl9JTkZPICJtZWdhc2FzOiAlcyAlc1xuIiwgTUVHQVNBU19WRVJTSU9OLAotCSAgICAgICBNRUdBU0FTX0VYVF9WRVJTSU9OKTsKKwlwcl9pbmZvKCJtZWdhc2FzOiAlc1xuIiwgTUVHQVNBU19WRVJTSU9OKTsKIAogCXNwaW5fbG9ja19pbml0KCZwb2xsX2Flbl9sb2NrKTsKIApAQCAtNjc0OCwxMCArNjc5MSw2IEBACiAJCQkJICAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CiAJaWYgKHJ2YWwpCiAJCWdvdG8gZXJyX2RjZl9hdHRyX3ZlcjsKLQlydmFsID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJCSAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7Ci0JaWYgKHJ2YWwpCi0JCWdvdG8gZXJyX2RjZl9yZWxfZGF0ZTsKIAogCXJ2YWwgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCiAJCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQpOwpAQCAtNjc3NSwxMiArNjgxNCw3IEBACiBlcnJfZGNmX2RiZ19sdmw6CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAogCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQpOwotCiBlcnJfZGNmX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQ6Ci0JZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJICAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7Ci0KLWVycl9kY2ZfcmVsX2RhdGU6CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CiBlcnJfZGNmX2F0dHJfdmVyOgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWVnYXNhc19wY2lfZHJpdmVyKTsKQEAgLTY4MDAsOCArNjgzNCw2IEBACiAJCQkmZHJpdmVyX2F0dHJfc3VwcG9ydF9wb2xsX2Zvcl9ldmVudCk7CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAogCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfZGV2aWNlX2NoYW5nZSk7Ci0JZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJICAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CiAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1lZ2FzYXNfcGNpX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2ZwLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2ZwLmMKaW5kZXggNjg1ZTZmMy4uNDYwYzZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnAuYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycwogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiAgTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEzICBMU0kgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCAgQXZhZ28gVGVjaG5vbG9naWVzCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTQsMjAgKzE1LDIxIEBACiAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKgogICogIEZJTEU6IG1lZ2FyYWlkX3Nhc19mcC5jCiAgKgotICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcnM6IEF2YWdvIFRlY2hub2xvZ2llcwogICogICAgICAgICAgIFN1bWFudCBQYXRybwogICogICAgICAgICAgIFZhcmFkIFRhbGFtYWNraQogICogICAgICAgICAgIE1hbm9qIEpvc2UKKyAqICAgICAgICAgICBLYXNoeWFwIERlc2FpIDxrYXNoeWFwLmRlc2FpQGF2YWdvdGVjaC5jb20+CisgKiAgICAgICAgICAgU3VtaXQgU2F4ZW5hIDxzdW1pdC5zYXhlbmFAYXZhZ290ZWNoLmNvbT4KICAqCi0gKiAgU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkbGludXhAbHNpLmNvbT4KKyAqICBTZW5kIGZlZWRiYWNrIHRvOiBtZWdhcmFpZGxpbnV4LnBkbEBhdmFnb3RlY2guY29tCiAgKgotICogIE1haWwgdG86IExTSSBDb3Jwb3JhdGlvbiwgMTYyMSBCYXJiZXIgTGFuZSwgTWlscGl0YXMsIENBIDk1MDM1Ci0gKiAgICAgQVRUTjogTGludXhyYWlkCisgKiAgTWFpbCB0bzogQXZhZ28gVGVjaG5vbG9naWVzLCAzNTAgV2VzdCBUcmltYmxlIFJvYWQsIEJ1aWxkaW5nIDkwLAorICogIFNhbiBKb3NlLCBDYWxpZm9ybmlhIDk1MTMxCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTgzLDE0ICsxODUsMTUgQEAKIAkJLyogTmV3IFJhaWQgbWFwIHdpbGwgbm90IHNldCB0b3RhbFNpemUsIHNvIGtlZXAgZXhwZWN0ZWQgdmFsdWUKIAkJICogZm9yIGxlZ2FjeSBjb2RlIGluIFZhbGlkYXRlTWFwSW5mbwogCQkgKi8KLQkJcERydlJhaWRNYXAtPnRvdGFsU2l6ZSA9IHNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfRVhUKTsKKwkJcERydlJhaWRNYXAtPnRvdGFsU2l6ZSA9CisJCQljcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IE1SX0ZXX1JBSURfTUFQX0VYVCkpOwogCX0gZWxzZSB7CiAJCWZ3X21hcF9vbGQgPSAoc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTCAqKQogCQkJZnVzaW9uLT5sZF9tYXBbKGluc3RhbmNlLT5tYXBfaWQgJiAxKV07CiAJCXBGd1JhaWRNYXAgPSAmZndfbWFwX29sZC0+cmFpZE1hcDsKIAogI2lmIFZEX0VYVF9ERUJVRwotCQlmb3IgKGkgPSAwOyBpIDwgcEZ3UmFpZE1hcC0+bGRDb3VudDsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwRndSYWlkTWFwLT5sZENvdW50KTsgaSsrKSB7CiAJCQlkZXZfZGJnKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiKCVkKSA6SW5kZXggMHgleCAiCiAJCQkJIlRhcmdldCBJZCAweCV4IFNlcSBOdW0gMHgleCBTaXplIDAvJWxseFxuIiwKIAkJCQlpbnN0YW5jZS0+dW5pcXVlX2lkLCBpLApAQCAtMjAyLDEyICsyMDUsMTIgQEAKIAogCQltZW1zZXQoZHJ2X21hcCwgMCwgZnVzaW9uLT5kcnZfbWFwX3N6KTsKIAkJcERydlJhaWRNYXAtPnRvdGFsU2l6ZSA9IHBGd1JhaWRNYXAtPnRvdGFsU2l6ZTsKLQkJcERydlJhaWRNYXAtPmxkQ291bnQgPSBwRndSYWlkTWFwLT5sZENvdW50OworCQlwRHJ2UmFpZE1hcC0+bGRDb3VudCA9IChfX2xlMTYpcEZ3UmFpZE1hcC0+bGRDb3VudDsKIAkJcERydlJhaWRNYXAtPmZwUGRJb1RpbWVvdXRTZWMgPSBwRndSYWlkTWFwLT5mcFBkSW9UaW1lb3V0U2VjOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1JBSURNQVBfTE9HSUNBTF9EUklWRVMgKyBNQVhfUkFJRE1BUF9WSUVXUzsgaSsrKQogCQkJcERydlJhaWRNYXAtPmxkVGd0SWRUb0xkW2ldID0KIAkJCQkodTgpcEZ3UmFpZE1hcC0+bGRUZ3RJZFRvTGRbaV07Ci0JCWZvciAoaSA9IDA7IGkgPCBwRHJ2UmFpZE1hcC0+bGRDb3VudDsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwRHJ2UmFpZE1hcC0+bGRDb3VudCk7IGkrKykgewogCQkJcERydlJhaWRNYXAtPmxkU3Bhbk1hcFtpXSA9IHBGd1JhaWRNYXAtPmxkU3Bhbk1hcFtpXTsKICNpZiBWRF9FWFRfREVCVUcKIAkJCWRldl9kYmcoJmluc3RhbmNlLT5wZGV2LT5kZXYsCkBAIC0yNjgsNyArMjcxLDcgQEAKIAllbHNlCiAJCWV4cGVjdGVkX3NpemUgPQogCQkJKHNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVApIC0gc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKwotCQkJKHNpemVvZihzdHJ1Y3QgTVJfTERfU1BBTl9NQVApICogbGUzMl90b19jcHUocERydlJhaWRNYXAtPmxkQ291bnQpKSk7CisJCQkoc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKiBsZTE2X3RvX2NwdShwRHJ2UmFpZE1hcC0+bGRDb3VudCkpKTsKIAogCWlmIChsZTMyX3RvX2NwdShwRHJ2UmFpZE1hcC0+dG90YWxTaXplKSAhPSBleHBlY3RlZF9zaXplKSB7CiAJCWRldl9lcnIoJmluc3RhbmNlLT5wZGV2LT5kZXYsICJtYXAgaW5mbyBzdHJ1Y3R1cmUgc2l6ZSAweCV4IGlzIG5vdCBtYXRjaGluZyB3aXRoIGxkIGNvdW50XG4iLApAQCAtMjg0LDcgKzI4Nyw3IEBACiAKIAltcl91cGRhdGVfbG9hZF9iYWxhbmNlX3BhcmFtcyhkcnZfbWFwLCBsYkluZm8pOwogCi0JbnVtX2xkcyA9IGxlMzJfdG9fY3B1KGRydl9tYXAtPnJhaWRNYXAubGRDb3VudCk7CisJbnVtX2xkcyA9IGxlMTZfdG9fY3B1KGRydl9tYXAtPnJhaWRNYXAubGRDb3VudCk7CiAKIAkvKkNvbnZlcnQgUmFpZCBjYXBhYmlsaXR5IHZhbHVlcyB0byBDUFUgYXJjaCAqLwogCWZvciAobGRDb3VudCA9IDA7IGxkQ291bnQgPCBudW1fbGRzOyBsZENvdW50KyspIHsKQEAgLTQ1Nyw3ICs0NjAsNyBAQAogCQkJCXF1YWQgPSAmbWFwLT5yYWlkTWFwLmxkU3Bhbk1hcFtsZF0uCiAJCQkJCXNwYW5CbG9ja1tzcGFuXS4KIAkJCQkJYmxvY2tfc3Bhbl9pbmZvLnF1YWRbaW5mb107Ci0JCQkJaWYgKGxlMzJfdG9fY3B1KHF1YWQtPmRpZmYgPT0gMCkpCisJCQkJaWYgKGxlMzJfdG9fY3B1KHF1YWQtPmRpZmYpID09IDApCiAJCQkJCXJldHVybiBTUEFOX0lOVkFMSUQ7CiAJCQkJaWYgKGxlNjRfdG9fY3B1KHF1YWQtPmxvZ1N0YXJ0KSA8PSByb3cgICYmCiAJCQkJCXJvdyA8PSBsZTY0X3RvX2NwdShxdWFkLT5sb2dFbmQpICAmJgpAQCAtNTIwLDcgKzUyMyw3IEBACiAJCQkJc3Bhbl9zZXQtPnNwYW5fcm93X2RhdGFfd2lkdGgpICogc3Bhbl9zZXQtPmRpZmY7CiAJCWZvciAoc3BhbiA9IDAsIHNwYW5fb2Zmc2V0ID0gMDsgc3BhbiA8IHJhaWQtPnNwYW5EZXB0aDsgc3BhbisrKQogCQkJaWYgKGxlMzJfdG9fY3B1KG1hcC0+cmFpZE1hcC5sZFNwYW5NYXBbbGRdLnNwYW5CbG9ja1tzcGFuXS4KLQkJCQlibG9ja19zcGFuX2luZm8ubm9FbGVtZW50cyA+PSBpbmZvKzEpKSB7CisJCQkJYmxvY2tfc3Bhbl9pbmZvLm5vRWxlbWVudHMpID49IGluZm8rMSkgewogCQkJCWlmIChzdHJpcF9vZmZzZXQgPj0KIAkJCQkJc3Bhbl9zZXQtPnN0cmlwX29mZnNldFtzcGFuXSkKIAkJCQkJc3Bhbl9vZmZzZXQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Z1c2lvbi5jCmluZGV4IGYzN2VlZDYuLjcxNTU3ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycwogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiAgTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEzICBMU0kgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCAgQXZhZ28gVGVjaG5vbG9naWVzCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTQsMTkgKzE1LDIwIEBACiAgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKgogICogIEZJTEU6IG1lZ2FyYWlkX3Nhc19mdXNpb24uYwogICoKLSAqICBBdXRob3JzOiBMU0kgQ29ycG9yYXRpb24KKyAqICBBdXRob3JzOiBBdmFnbyBUZWNobm9sb2dpZXMKICAqICAgICAgICAgICBTdW1hbnQgUGF0cm8KLSAqICAgICAgICAgICBBZGFtIFJhZGZvcmQgPGxpbnV4cmFpZEBsc2kuY29tPgorICogICAgICAgICAgIEFkYW0gUmFkZm9yZAorICogICAgICAgICAgIEthc2h5YXAgRGVzYWkgPGthc2h5YXAuZGVzYWlAYXZhZ290ZWNoLmNvbT4KKyAqICAgICAgICAgICBTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgogICoKLSAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICogIFNlbmQgZmVlZGJhY2sgdG86IG1lZ2FyYWlkbGludXgucGRsQGF2YWdvdGVjaC5jb20KICAqCi0gKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKLSAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqICBNYWlsIHRvOiBBdmFnbyBUZWNobm9sb2dpZXMsIDM1MCBXZXN0IFRyaW1ibGUgUm9hZCwgQnVpbGRpbmcgOTAsCisgKiAgU2FuIEpvc2UsIENhbGlmb3JuaWEgOTUxMzEKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC04ODAsNyArODgyLDcgQEAKIAogCW1hcCA9IGZ1c2lvbi0+bGRfZHJ2X21hcFtpbnN0YW5jZS0+bWFwX2lkICYgMV07CiAKLQludW1fbGRzID0gbGUzMl90b19jcHUobWFwLT5yYWlkTWFwLmxkQ291bnQpOworCW51bV9sZHMgPSBsZTE2X3RvX2NwdShtYXAtPnJhaWRNYXAubGRDb3VudCk7CiAKIAlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CiAKQEAgLTEwNjUsNDggKzEwNjcsMTYgQEAKIAkJZ290byBmYWlsX2lvY19pbml0OwogCiAJbWVnYXNhc19kaXNwbGF5X2ludGVsX2JyYW5kaW5nKGluc3RhbmNlKTsKLQlpZiAobWVnYXNhc19nZXRfY3RybF9pbmZvKGluc3RhbmNlLCBpbnN0YW5jZS0+Y3RybF9pbmZvKSkgeworCWlmIChtZWdhc2FzX2dldF9jdHJsX2luZm8oaW5zdGFuY2UpKSB7CiAJCWRldl9lcnIoJmluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkiQ291bGQgbm90IGdldCBjb250cm9sbGVyIGluZm8uIEZhaWwgZnJvbSAlcyAlZFxuIiwKIAkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCWdvdG8gZmFpbF9pb2NfaW5pdDsKIAl9CiAKLQlpbnN0YW5jZS0+c3VwcG9ydG1heDI1NnZkID0KLQkJaW5zdGFuY2UtPmN0cmxfaW5mby0+YWRhcHRlck9wZXJhdGlvbnMzLnN1cHBvcnRNYXhFeHRMRHM7Ci0JLyogQmVsb3cgaXMgYWRkaXRpb25hbCBjaGVjayB0byBhZGRyZXNzIGZ1dHVyZSBGVyBlbmhhbmNlbWVudCAqLwotCWlmIChpbnN0YW5jZS0+Y3RybF9pbmZvLT5tYXhfbGRzID4gNjQpCi0JCWluc3RhbmNlLT5zdXBwb3J0bWF4MjU2dmQgPSAxOwotCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3ZkX2NvdW50ID0gTUVHQVNBU19NQVhfTERfQ0hBTk5FTFMKLQkJCQkJKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7Ci0JaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfcGRfY291bnQgPSBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUwotCQkJCQkqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKLQlpZiAoaW5zdGFuY2UtPnN1cHBvcnRtYXgyNTZ2ZCkgewotCQlpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3ZkX2NvdW50ID0gTUFYX0xPR0lDQUxfRFJJVkVTX0VYVDsKLQkJaW5zdGFuY2UtPmZ3X3N1cHBvcnRlZF9wZF9jb3VudCA9IE1BWF9QSFlTSUNBTF9ERVZJQ0VTOwotCX0gZWxzZSB7Ci0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQgPSBNQVhfTE9HSUNBTF9EUklWRVM7Ci0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQgPSBNQVhfUEhZU0lDQUxfREVWSUNFUzsKLQl9Ci0JZGV2X2luZm8oJmluc3RhbmNlLT5wZGV2LT5kZXYsICJGaXJtd2FyZSBzdXBwb3J0cyAlZCBWRHMgJWQgUERzXG4iCi0JCSJEcml2ZXIgc3VwcG9ydHMgJWQgVkRzICAlZCBQRHNcbiIsCi0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQsCi0JCWluc3RhbmNlLT5md19zdXBwb3J0ZWRfcGRfY291bnQsCi0JCWluc3RhbmNlLT5kcnZfc3VwcG9ydGVkX3ZkX2NvdW50LAotCQlpbnN0YW5jZS0+ZHJ2X3N1cHBvcnRlZF9wZF9jb3VudCk7Ci0KIAlpbnN0YW5jZS0+ZmxhZ19pZWVlID0gMTsKIAlmdXNpb24tPmZhc3RfcGF0aF9pbyA9IDA7CiAKLQlmdXNpb24tPm9sZF9tYXBfc3ogPQotCQlzaXplb2Yoc3RydWN0IE1SX0ZXX1JBSURfTUFQKSArIChzaXplb2Yoc3RydWN0IE1SX0xEX1NQQU5fTUFQKSAqCi0JCShpbnN0YW5jZS0+Zndfc3VwcG9ydGVkX3ZkX2NvdW50IC0gMSkpOwotCWZ1c2lvbi0+bmV3X21hcF9zeiA9Ci0JCXNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfRVhUKTsKLQlmdXNpb24tPmRydl9tYXBfc3ogPQotCQlzaXplb2Yoc3RydWN0IE1SX0RSVl9SQUlEX01BUCkgKyAoc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKgotCQkoaW5zdGFuY2UtPmRydl9zdXBwb3J0ZWRfdmRfY291bnQgLSAxKSk7Ci0KIAlmdXNpb24tPmRydl9tYXBfcGFnZXMgPSBnZXRfb3JkZXIoZnVzaW9uLT5kcnZfbWFwX3N6KTsKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWZ1c2lvbi0+bGRfbWFwW2ldID0gTlVMTDsKQEAgLTExMjEsMTYgKzEwOTEsMTAgQEAKIAkJCQkJZnVzaW9uLT5kcnZfbWFwX3BhZ2VzKTsKIAkJCWdvdG8gZmFpbF9pb2NfaW5pdDsKIAkJfQorCQltZW1zZXQoZnVzaW9uLT5sZF9kcnZfbWFwW2ldLCAwLAorCQkJKCgxIDw8IFBBR0VfU0hJRlQpIDw8IGZ1c2lvbi0+ZHJ2X21hcF9wYWdlcykpOwogCX0KIAotCWZ1c2lvbi0+bWF4X21hcF9zeiA9IG1heChmdXNpb24tPm9sZF9tYXBfc3osIGZ1c2lvbi0+bmV3X21hcF9zeik7Ci0KLQlpZiAoaW5zdGFuY2UtPnN1cHBvcnRtYXgyNTZ2ZCkKLQkJZnVzaW9uLT5jdXJyZW50X21hcF9zeiA9IGZ1c2lvbi0+bmV3X21hcF9zejsKLQllbHNlCi0JCWZ1c2lvbi0+Y3VycmVudF9tYXBfc3ogPSBmdXNpb24tPm9sZF9tYXBfc3o7Ci0KLQogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJZnVzaW9uLT5sZF9tYXBbaV0gPSBkbWFfYWxsb2NfY29oZXJlbnQoJmluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkJCQkgICAgICAgZnVzaW9uLT5tYXhfbWFwX3N6LApAQCAtMTE3Myw5ICsxMTM3LDEwIEBACiAJCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKIHsKICNpZiBkZWZpbmVkKHdyaXRlcSkgJiYgZGVmaW5lZChDT05GSUdfNjRCSVQpCi0JdTY0IHJlcV9kYXRhID0gKCgodTY0KXJlcV9kZXNjX2hpIDw8IDMyKSB8ICh1MzIpcmVxX2Rlc2NfbG8pOworCXU2NCByZXFfZGF0YSA9ICgoKHU2NClsZTMyX3RvX2NwdShyZXFfZGVzY19oaSkgPDwgMzIpIHwKKwkJCWxlMzJfdG9fY3B1KHJlcV9kZXNjX2xvKSk7CiAKLQl3cml0ZXEobGU2NF90b19jcHUocmVxX2RhdGEpLCAmKHJlZ3MpLT5pbmJvdW5kX2xvd19xdWV1ZV9wb3J0KTsKKwl3cml0ZXEocmVxX2RhdGEsICYocmVncyktPmluYm91bmRfbG93X3F1ZXVlX3BvcnQpOwogI2Vsc2UKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMzczLDcgKzEzMzgsNyBAQAogCQkvKiBMb2dpY2FsIGJsb2NrIHJlZmVyZW5jZSB0YWcgKi8KIAkJaW9fcmVxdWVzdC0+Q0RCLkVFRFAzMi5QcmltYXJ5UmVmZXJlbmNlVGFnID0KIAkJCWNwdV90b19iZTMyKHJlZl90YWcpOwotCQlpb19yZXF1ZXN0LT5DREIuRUVEUDMyLlByaW1hcnlBcHBsaWNhdGlvblRhZ01hc2sgPSAweGZmZmY7CisJCWlvX3JlcXVlc3QtPkNEQi5FRURQMzIuUHJpbWFyeUFwcGxpY2F0aW9uVGFnTWFzayA9IGNwdV90b19iZTE2KDB4ZmZmZik7CiAJCWlvX3JlcXVlc3QtPklvRmxhZ3MgPSBjcHVfdG9fbGUxNigzMik7IC8qIFNwZWNpZnkgMzItYnl0ZSBjZGIgKi8KIAogCQkvKiBUcmFuc2ZlciBsZW5ndGggKi8KQEAgLTE3NjksNyArMTczNCw3IEBACiAKIAkJLyogc2V0IFJBSUQgY29udGV4dCB2YWx1ZXMgKi8KIAkJcFJBSURfQ29udGV4dC0+cmVnTG9ja0ZsYWdzICAgICA9IFJFR0lPTl9UWVBFX1NIQVJFRF9SRUFEOwotCQlwUkFJRF9Db250ZXh0LT50aW1lb3V0VmFsdWUgICAgID0gcmFpZC0+ZnBJb1RpbWVvdXRGb3JMZDsKKwkJcFJBSURfQ29udGV4dC0+dGltZW91dFZhbHVlICAgICA9IGNwdV90b19sZTE2KHJhaWQtPmZwSW9UaW1lb3V0Rm9yTGQpOwogCQlwUkFJRF9Db250ZXh0LT5WaXJ0dWFsRGlza1RndElkID0gY3B1X3RvX2xlMTYoZGV2aWNlX2lkKTsKIAkJcFJBSURfQ29udGV4dC0+cmVnTG9ja1Jvd0xCQSAgICA9IDA7CiAJCXBSQUlEX0NvbnRleHQtPnJlZ0xvY2tMZW5ndGggICAgPSAwOwpAQCAtMjI1NCw3ICsyMjE5LDcgQEAKIAkgKiBtZWdhc2FzX2NvbXBsZXRlX2NtZAogCSAqLwogCi0JaWYgKGZyYW1lX2hkci0+ZmxhZ3MgJiBNRklfRlJBTUVfRE9OVF9QT1NUX0lOX1JFUExZX1FVRVVFKQorCWlmIChmcmFtZV9oZHItPmZsYWdzICYgY3B1X3RvX2xlMTYoTUZJX0ZSQU1FX0RPTlRfUE9TVF9JTl9SRVBMWV9RVUVVRSkpCiAJCWNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRE9OVF9QT1NUX0lOX1JFUExZX1FVRVVFOwogCiAJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKQEAgLTIzODUsNiArMjM1MCw4IEBACiAJCQkJIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBhdCBpbmRleCAlZFxuIiwgaSk7CiAJCQlicmVhazsKIAkJfQorCQltZW1zZXQoaW5zdGFuY2UtPmNyYXNoX2J1ZltpXSwgMCwKKwkJCSgoMSA8PCBQQUdFX1NISUZUKSA8PCBpbnN0YW5jZS0+Y3Jhc2hfYnVmX3BhZ2VzKSk7CiAJfQogCWluc3RhbmNlLT5kcnZfYnVmX2FsbG9jID0gaTsKIH0KQEAgLTI4MzcsMTEgKzI4MDQsMTUgQEAKIAkJCQl9CiAJCQl9CiAKLQkJCWNsZWFyX2JpdChNRUdBU0FTX0ZVU0lPTl9JTl9SRVNFVCwKLQkJCQkgICZpbnN0YW5jZS0+cmVzZXRfZmxhZ3MpOwotCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZW5hYmxlX2ludHIoaW5zdGFuY2UpOwotCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUw7Ci0KKwkJCWlmIChtZWdhc2FzX2dldF9jdHJsX2luZm8oaW5zdGFuY2UpKSB7CisJCQkJZGV2X2luZm8oJmluc3RhbmNlLT5wZGV2LT5kZXYsCisJCQkJCSJGYWlsZWQgZnJvbSAlcyAlZFxuIiwKKwkJCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJCQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPQorCQkJCQlNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOworCQkJCW1lZ2FyYWlkX3Nhc19raWxsX2hiYShpbnN0YW5jZSk7CisJCQkJcmV0dmFsID0gRkFJTEVEOworCQkJfQogCQkJLyogUmVzZXQgbG9hZCBiYWxhbmNlIGluZm8gKi8KIAkJCW1lbXNldChmdXNpb24tPmxvYWRfYmFsYW5jZV9pbmZvLCAwLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgTERfTE9BRF9CQUxBTkNFX0lORk8pCkBAIC0yODUwLDYgKzI4MjEsMTEgQEAKIAkJCWlmICghbWVnYXNhc19nZXRfbWFwX2luZm8oaW5zdGFuY2UpKQogCQkJCW1lZ2FzYXNfc3luY19tYXBfaW5mbyhpbnN0YW5jZSk7CiAKKwkJCWNsZWFyX2JpdChNRUdBU0FTX0ZVU0lPTl9JTl9SRVNFVCwKKwkJCQkgICZpbnN0YW5jZS0+cmVzZXRfZmxhZ3MpOworCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZW5hYmxlX2ludHIoaW5zdGFuY2UpOworCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUw7CisKIAkJCS8qIFJlc3RhcnQgU1ItSU9WIGhlYXJ0YmVhdCAqLwogCQkJaWYgKGluc3RhbmNlLT5yZXF1ZXN0b3JJZCkgewogCQkJCWlmICghbWVnYXNhc19zcmlvdl9zdGFydF9oZWFydGJlYXQoaW5zdGFuY2UsIDApKQpAQCAtMjg2NiwxNCArMjg0MiwxNCBAQAogCQkJICAgICAgICJzdWNjZXNzZnVsIGZvciBzY3NpJWQuXG4iLAogCQkJCWluc3RhbmNlLT5ob3N0LT5ob3N0X25vKTsKIAotCQkJaWYgKGluc3RhbmNlLT5jcmFzaF9kdW1wX2Rydl9zdXBwb3J0KSB7Ci0JCQkJaWYgKGluc3RhbmNlLT5jcmFzaF9kdW1wX2FwcF9zdXBwb3J0KQotCQkJCQltZWdhc2FzX3NldF9jcmFzaF9kdW1wX3BhcmFtcyhpbnN0YW5jZSwKLQkJCQkJCU1SX0NSQVNIX0JVRl9UVVJOX09OKTsKLQkJCQllbHNlCi0JCQkJCW1lZ2FzYXNfc2V0X2NyYXNoX2R1bXBfcGFyYW1zKGluc3RhbmNlLAotCQkJCQkJTVJfQ1JBU0hfQlVGX1RVUk5fT0ZGKTsKLQkJCX0KKwkJCWlmIChpbnN0YW5jZS0+Y3Jhc2hfZHVtcF9kcnZfc3VwcG9ydCAmJgorCQkJCWluc3RhbmNlLT5jcmFzaF9kdW1wX2FwcF9zdXBwb3J0KQorCQkJCW1lZ2FzYXNfc2V0X2NyYXNoX2R1bXBfcGFyYW1zKGluc3RhbmNlLAorCQkJCQlNUl9DUkFTSF9CVUZfVFVSTl9PTik7CisJCQllbHNlCisJCQkJbWVnYXNhc19zZXRfY3Jhc2hfZHVtcF9wYXJhbXMoaW5zdGFuY2UsCisJCQkJCU1SX0NSQVNIX0JVRl9UVVJOX09GRik7CisKIAkJCXJldHZhbCA9IFNVQ0NFU1M7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmgKaW5kZXggMGQxODNkNS4uNWFiN2RhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Z1c2lvbi5oCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqICBMaW51eCBNZWdhUkFJRCBkcml2ZXIgZm9yIFNBUyBiYXNlZCBSQUlEIGNvbnRyb2xsZXJzCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEyICBMU0kgQ29ycG9yYXRpb24uCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTMgIExTSSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoYykgMjAxMy0yMDE0ICBBdmFnbyBUZWNobm9sb2dpZXMKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNCwxOSArMTUsMjAgQEAKICAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqCiAgKiAgRklMRTogbWVnYXJhaWRfc2FzX2Z1c2lvbi5oCiAgKgotICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcnM6IEF2YWdvIFRlY2hub2xvZ2llcwogICogICAgICAgICAgIE1hbm9qIEpvc2UKICAqICAgICAgICAgICBTdW1hbnQgUGF0cm8KKyAqICAgICAgICAgICBLYXNoeWFwIERlc2FpIDxrYXNoeWFwLmRlc2FpQGF2YWdvdGVjaC5jb20+CisgKiAgICAgICAgICAgU3VtaXQgU2F4ZW5hIDxzdW1pdC5zYXhlbmFAYXZhZ290ZWNoLmNvbT4KICAqCi0gKiAgU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkbGludXhAbHNpLmNvbT4KKyAqICBTZW5kIGZlZWRiYWNrIHRvOiBtZWdhcmFpZGxpbnV4LnBkbEBhdmFnb3RlY2guY29tCiAgKgotICogIE1haWwgdG86IExTSSBDb3Jwb3JhdGlvbiwgMTYyMSBCYXJiZXIgTGFuZSwgTWlscGl0YXMsIENBIDk1MDM1Ci0gKiAgICAgQVRUTjogTGludXhyYWlkCisgKiAgTWFpbCB0bzogQXZhZ28gVGVjaG5vbG9naWVzLCAzNTAgV2VzdCBUcmltYmxlIFJvYWQsIEJ1aWxkaW5nIDkwLAorICogIFNhbiBKb3NlLCBDYWxpZm9ybmlhIDk1MTMxCiAgKi8KIAogI2lmbmRlZiBfTUVHQVJBSURfU0FTX0ZVU0lPTl9IXwpAQCAtODM0LDggKzgzNiw2IEBACiAKIAl1MzIgbWF4X21hcF9zejsKIAl1MzIgY3VycmVudF9tYXBfc3o7Ci0JdTMyIG9sZF9tYXBfc3o7Ci0JdTMyIG5ld19tYXBfc3o7CiAJdTMyIGRydl9tYXBfc3o7CiAJdTMyIGRydl9tYXBfcGFnZXM7CiAJdTggZmFzdF9wYXRoX2lvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IGM4MGVkMDQuLjg0MzFlYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTExNzksMTUgKzExNzksMTQgQEAKIH0KIAogLyoqCi0gKiBfc2NzaWhfYWRqdXN0X3F1ZXVlX2RlcHRoIC0gc2V0dGluZyBkZXZpY2UgcXVldWUgZGVwdGgKKyAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAogICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCiAgKgotICoKLSAqIFJldHVybnMgbm90aGluZworICogUmV0dXJucyBxdWV1ZSBkZXB0aC4KICAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF9hZGp1c3RfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQorc3RhdGljIGludAorX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCWludCBtYXhfZGVwdGg7CkBAIC0xMjE3LDYzICsxMjE2LDExIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAogIG5vdF9zYXRhOgotCiAJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQogCQltYXhfZGVwdGggPSAxOwogCWlmIChxZGVwdGggPiBtYXhfZGVwdGgpCiAJCXFkZXB0aCA9IG1heF9kZXB0aDsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgcWRlcHRoKTsKLX0KLQotLyoqCi0gKiBfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gc2V0dGluZyBkZXZpY2UgcXVldWUgZGVwdGgKLSAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKLSAqIEBxZGVwdGg6IHJlcXVlc3RlZCBxdWV1ZSBkZXB0aAotICogQHJlYXNvbjogU0NTSV9RREVQVEhfREVGQVVMVC9TQ1NJX1FERVBUSF9RRlVMTC9TQ1NJX1FERVBUSF9SQU1QX1VQCi0gKiAoc2VlIGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBmb3IgZGVmaW5pdGlvbikKLSAqCi0gKiBSZXR1cm5zIHF1ZXVlIGRlcHRoLgotICovCi1zdGF0aWMgaW50Ci1fc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlpZiAocmVhc29uID09IFNDU0lfUURFUFRIX0RFRkFVTFQgfHwgcmVhc29uID09IFNDU0lfUURFUFRIX1JBTVBfVVApCi0JCV9zY3NpaF9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKLQllbHNlIGlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfUUZVTEwpCi0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpOwotCWVsc2UKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHNkZXYtPmlucXVpcnlfbGVuID4gNykKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAicWRlcHRoKCVkKSwgdGFnZ2VkKCVkKSwgIgotCQkic2ltcGxlKCVkKSwgb3JkZXJlZCglZCksIHNjc2lfbGV2ZWwoJWQpLCBjbWRfcXVlKCVkKVxuIiwKLQkJc2Rldi0+cXVldWVfZGVwdGgsIHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQsIHNkZXYtPnNpbXBsZV90YWdzLAotCQlzZGV2LT5vcmRlcmVkX3RhZ3MsIHNkZXYtPnNjc2lfbGV2ZWwsCi0JCShzZGV2LT5pbnF1aXJ5WzddICYgMikgPj4gMSk7Ci0KLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7Ci19Ci0KLS8qKgotICogX3Njc2loX2NoYW5nZV9xdWV1ZV90eXBlIC0gY2hhbmdpbmcgZGV2aWNlIHF1ZXVlIHRhZyB0eXBlCi0gKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0Ci0gKiBAdGFnX3R5cGU6IHJlcXVlc3RlZCB0YWcgdHlwZQotICoKLSAqIFJldHVybnMgcXVldWUgdGFnIHR5cGUuCi0gKi8KLXN0YXRpYyBpbnQKLV9zY3NpaF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKLXsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCB0YWdfdHlwZSk7Ci0JCWlmICh0YWdfdHlwZSkKLQkJCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JfSBlbHNlCi0JCXRhZ190eXBlID0gMDsKLQotCXJldHVybiB0YWdfdHlwZTsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKIH0KIAogLyoqCkBAIC0yMTA0LDcgKzIwNTEsNyBAQAogCQkJICAgIHJfbGV2ZWwsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyYWlkX2RldmljZS0+d3dpZCwKIAkJCSAgICByYWlkX2RldmljZS0+bnVtX3BkcywgZHMpOwotCQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJCV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKIAkJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLwogCQlpZiAoIWlvYy0+aXNfd2FycGRyaXZlKQogCQkJX3Njc2loX3NldF9sZXZlbChzZGV2LCByYWlkX2RldmljZS0+dm9sdW1lX3R5cGUpOwpAQCAtMjE2OSw3ICsyMTE2LDcgQEAKIAkJX3Njc2loX2Rpc3BsYXlfc2F0YV9jYXBhYmlsaXRpZXMoaW9jLCBoYW5kbGUsIHNkZXYpOwogCiAKLQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogCiAJaWYgKHNzcF90YXJnZXQpIHsKIAkJc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc2Rldik7CkBAIC0zOTY2LDE2ICszOTEzLDggQEAKIAkJbXBpX2NvbnRyb2wgPSBNUEkyX1NDU0lJT19DT05UUk9MX05PREFUQVRSQU5TRkVSOwogCiAJLyogc2V0IHRhZ3MgKi8KLQlpZiAoIShzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX0ZMQUdTX0lOSVQpKSB7Ci0JCWlmIChzY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJCWlmIChzY21kLT5kZXZpY2UtPm9yZGVyZWRfdGFncykKLQkJCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX09SREVSRURROwotCQkJZWxzZQotCQkJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQkJfSBlbHNlCi0JCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7Ci0JfSBlbHNlCi0JCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKKwltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7CisKIAkvKiBNYWtlIHN1cmUgRGV2aWNlIGlzIG5vdCByYWlkIHZvbHVtZS4KIAkgKiBXZSBkbyBub3QgZXhwb3NlIHJhaWQgZnVuY3Rpb25hbGl0eSB0byB1cHBlciBsYXllciBmb3Igd2FycGRyaXZlLgogCSAqLwpAQCAtNzY1Myw3ICs3NTkyLDcgQEAKIAkuc2Nhbl9maW5pc2hlZAkJCT0gX3Njc2loX3NjYW5fZmluaXNoZWQsCiAJLnNjYW5fc3RhcnQJCQk9IF9zY3NpaF9zY2FuX3N0YXJ0LAogCS5jaGFuZ2VfcXVldWVfZGVwdGggCQk9IF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlCQk9IF9zY3NpaF9jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBfc2NzaWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyCT0gX3Njc2loX2Rldl9yZXNldCwKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIJPSBfc2NzaWhfdGFyZ2V0X3Jlc2V0LApAQCAtNzY2Nyw2ICs3NjA2LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zaG9zdF9hdHRycwkJCT0gbXB0MnNhc19ob3N0X2F0dHJzLAogCS5zZGV2X2F0dHJzCQkJPSBtcHQyc2FzX2Rldl9hdHRycywKKwkudHJhY2tfcXVldWVfZGVwdGgJCT0gMSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19zY3NpaC5jCmluZGV4IDg1NzI3NmIuLmEyYjYwOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3Njc2loLmMKQEAgLTEwNTMsOSArMTA1MywxNSBAQAogCXJldHVybiBmb3VuZDsKIH0KIAotCi1zdGF0aWMgdm9pZAotX3Njc2loX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCisvKioKKyAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCisgKgorICogUmV0dXJucyBxdWV1ZSBkZXB0aC4KKyAqLworc3RhdGljIGludAorX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCWludCBtYXhfZGVwdGg7CkBAIC0xMDkwLDYyICsxMDk2LDEwIEBACiAJCW1heF9kZXB0aCA9IDE7CiAJaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKIAkJcWRlcHRoID0gbWF4X2RlcHRoOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiAvKioKLSAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAotICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAotICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCi0gKiBAcmVhc29uOiBTQ1NJX1FERVBUSF9ERUZBVUxUL1NDU0lfUURFUFRIX1FGVUxML1NDU0lfUURFUFRIX1JBTVBfVVAKLSAqIChzZWUgaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGZvciBkZWZpbml0aW9uKQotICoKLSAqIFJldHVybnMgcXVldWUgZGVwdGguCi0gKi8KLXN0YXRpYyBpbnQKLV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLCBpbnQgcmVhc29uKQotewotCWlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfREVGQVVMVCB8fCByZWFzb24gPT0gU0NTSV9RREVQVEhfUkFNUF9VUCkKLQkJX3Njc2loX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwotCWVsc2UgaWYgKHJlYXNvbiA9PSBTQ1NJX1FERVBUSF9RRlVMTCkKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIHFkZXB0aCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoc2Rldi0+aW5xdWlyeV9sZW4gPiA3KQotCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICJxZGVwdGgoJWQpLCB0YWdnZWQoJWQpLCAiIFwKLQkJInNpbXBsZSglZCksIG9yZGVyZWQoJWQpLCBzY3NpX2xldmVsKCVkKSwgY21kX3F1ZSglZClcbiIsCi0JCXNkZXYtPnF1ZXVlX2RlcHRoLCBzZGV2LT50YWdnZWRfc3VwcG9ydGVkLCBzZGV2LT5zaW1wbGVfdGFncywKLQkJc2Rldi0+b3JkZXJlZF90YWdzLCBzZGV2LT5zY3NpX2xldmVsLAotCQkoc2Rldi0+aW5xdWlyeVs3XSAmIDIpID4+IDEpOwotCi0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCi0vKioKLSAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfdHlwZSAtIGNoYW5naW5nIGRldmljZSBxdWV1ZSB0YWcgdHlwZQotICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAotICogQHRhZ190eXBlOiByZXF1ZXN0ZWQgdGFnIHR5cGUKLSAqCi0gKiBSZXR1cm5zIHF1ZXVlIHRhZyB0eXBlLgotICovCi1zdGF0aWMgaW50Ci1fc2NzaWhfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGFnX3R5cGUpCi17Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOwotCQlpZiAodGFnX3R5cGUpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQl0YWdfdHlwZSA9IDA7Ci0KLQlyZXR1cm4gdGFnX3R5cGU7Ci19Ci0KLQotLyoqCiAgKiBfc2NzaWhfdGFyZ2V0X2FsbG9jIC0gdGFyZ2V0IGFkZCByb3V0aW5lCiAgKiBAc3RhcmdldDogc2NzaSB0YXJnZXQgc3RydWN0CiAgKgpAQCAtMTc2Miw3ICsxNzE2LDcgQEAKIAkJCSByYWlkX2RldmljZS0+bnVtX3BkcywgZHMpOwogCiAKLQkJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgsIFNDU0lfUURFUFRIX0RFRkFVTFQpOworCQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CiAKIC8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KIAkJX3Njc2loX3NldF9sZXZlbChzZGV2LCByYWlkX2RldmljZS0+dm9sdW1lX3R5cGUpOwpAQCAtMTgyOCw3ICsxNzgyLDcgQEAKIAkJX3Njc2loX2Rpc3BsYXlfc2F0YV9jYXBhYmlsaXRpZXMoaW9jLCBoYW5kbGUsIHNkZXYpOwogCiAKLQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogCiAJaWYgKHNzcF90YXJnZXQpIHsKIAkJc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc2Rldik7CkBAIC0zNTg2LDE2ICszNTQwLDcgQEAKIAkJbXBpX2NvbnRyb2wgPSBNUEkyX1NDU0lJT19DT05UUk9MX05PREFUQVRSQU5TRkVSOwogCiAJLyogc2V0IHRhZ3MgKi8KLQlpZiAoIShzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX0ZMQUdTX0lOSVQpKSB7Ci0JCWlmIChzY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJCWlmIChzY21kLT5kZXZpY2UtPm9yZGVyZWRfdGFncykKLQkJCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX09SREVSRURROwotCQkJZWxzZQotCQkJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQkJfSBlbHNlCi0JCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7Ci0JfSBlbHNlCi0JCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKKwltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7CiAKIAlpZiAoKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSAmJgogCSAgICBzY21kLT5jbWRfbGVuICE9IDMyKQpAQCAtNzI4NCw3ICs3MjI5LDcgQEAKIAkuc2Nhbl9maW5pc2hlZAkJCT0gX3Njc2loX3NjYW5fZmluaXNoZWQsCiAJLnNjYW5fc3RhcnQJCQk9IF9zY3NpaF9zY2FuX3N0YXJ0LAogCS5jaGFuZ2VfcXVldWVfZGVwdGgJCT0gX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gX3Njc2loX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jaGFuZ2VfcXVldWVfdHlwZQkJPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlLAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IF9zY3NpaF9hYm9ydCwKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIJPSBfc2NzaWhfZGV2X3Jlc2V0LAogCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlcgk9IF9zY3NpaF90YXJnZXRfcmVzZXQsCkBAIC03Mjk4LDYgKzcyNDMsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQkJPSBtcHQzc2FzX2hvc3RfYXR0cnMsCiAJLnNkZXZfYXR0cnMJCQk9IG1wdDNzYXNfZGV2X2F0dHJzLAorCS50cmFja19xdWV1ZV9kZXB0aAkJPSAxLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jIGIvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYwppbmRleCBlYWNlZTQ4Li5mMTVkZjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKQEAgLTI2LDE4ICsyNiw5IEBACiAKICNpbmNsdWRlICJtdl9zYXMuaCIKIAotc3RhdGljIGludCBsbGRkX21heF9leGVjdXRlX251bSA9IDE7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoY29sbGVjdG9yLCBsbGRkX21heF9leGVjdXRlX251bSwgaW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoY29sbGVjdG9yLCAiXG4iCi0JIlx0SWYgZ3JlYXRlciB0aGFuIG9uZSwgdGVsbHMgdGhlIFNBUyBMYXllciB0byBydW4gaW4gVGFzayBDb2xsZWN0b3JcbiIKLQkiXHRNb2RlLiAgSWYgMSBvciAwLCB0ZWxscyB0aGUgU0FTIExheWVyIHRvIHJ1biBpbiBEaXJlY3QgTW9kZS5cbiIKLQkiXHRUaGUgbXZzYXMgU0FTIExMREQgc3VwcG9ydHMgYm90aCBtb2Rlcy5cbiIKLQkiXHREZWZhdWx0OiAxIChEaXJlY3QgTW9kZSkuXG4iKTsKLQogaW50IGludGVycnVwdF9jb2FsZXNjaW5nID0gMHg4MDsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbXZzX3N0dDsKLXN0cnVjdCBrbWVtX2NhY2hlICptdnNfdGFza19saXN0X2NhY2hlOwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdnNfY2hpcF9pbmZvIG12c19jaGlwc1tdID0gewogCVtjaGlwXzYzMjBdID0JeyAxLCAyLCAweDQwMCwgMTcsIDE2LCA2LCAgOSwgJm12c182NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzY0NDBdID0JeyAxLCA0LCAweDQwMCwgMTcsIDE2LCA2LCAgOSwgJm12c182NHh4X2Rpc3BhdGNoLCB9LApAQCAtNzYsNiArNjcsOCBAQAogCS50YXJnZXRfZGVzdHJveQkJPSBzYXNfdGFyZ2V0X2Rlc3Ryb3ksCiAJLmlvY3RsCQkJPSBzYXNfaW9jdGwsCiAJLnNob3N0X2F0dHJzCQk9IG12c3RfaG9zdF9hdHRycywKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FzX2RvbWFpbl9mdW5jdGlvbl90ZW1wbGF0ZSBtdnNfdHJhbnNwb3J0X29wcyA9IHsKQEAgLTUxMSwxNCArNTA0LDExIEBACiAKIAlzaGEtPm51bV9waHlzID0gbnJfY29yZSAqIGNoaXBfaW5mby0+bl9waHk7CiAKLQlzaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gbGxkZF9tYXhfZXhlY3V0ZV9udW07Ci0KIAlpZiAobXZpLT5mbGFncyAmIE1WRl9GTEFHX1NPQykKIAkJY2FuX3F1ZXVlID0gTVZTX1NPQ19DQU5fUVVFVUU7CiAJZWxzZQogCQljYW5fcXVldWUgPSBNVlNfQ0hJUF9TTE9UX1NaOwogCi0Jc2hhLT5sbGRkX3F1ZXVlX3NpemUgPSBjYW5fcXVldWU7CiAJc2hvc3QtPnNnX3RhYmxlc2l6ZSA9IG1pbl90KHUxNiwgU0dfQUxMLCBNVlNfTUFYX1NHKTsKIAlzaG9zdC0+Y2FuX3F1ZXVlID0gY2FuX3F1ZXVlOwogCW12aS0+c2hvc3QtPmNtZF9wZXJfbHVuID0gTVZTX1FVRVVFX1NJWkU7CkBAIC04MzEsMTYgKzgyMSw3IEBACiAJaWYgKCFtdnNfc3R0KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW12c190YXNrX2xpc3RfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibXZzX3Rhc2tfbGlzdCIsIHNpemVvZihzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCksCi0JCQkJCQkJIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7Ci0JaWYgKCFtdnNfdGFza19saXN0X2NhY2hlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJbXZfcHJpbnRrKCIlczogbXZzX3Rhc2tfbGlzdF9jYWNoZSBhbGxvYyBmYWlsZWQhIFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCiAJcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtdnNfcGNpX2RyaXZlcik7Ci0KIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dDsKIApAQCAtODU1LDcgKzgzNiw2IEBACiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtdnNfcGNpX2RyaXZlcik7CiAJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG12c19zdHQpOwotCWttZW1fY2FjaGVfZGVzdHJveShtdnNfdGFza19saXN0X2NhY2hlKTsKIH0KIAogc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm12c3RfaG9zdF9hdHRyc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jIGIvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jCmluZGV4IGFjNTJmN2MuLjg1ZDg2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmMKQEAgLTg1Miw0MyArODUyLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCAqbXZzX3Rhc2tfYWxsb2NfbGlzdChpbnQgKm51bSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCXN0cnVjdCBtdnNfdGFza19saXN0ICpmaXJzdCA9IE5VTEw7Ci0KLQlmb3IgKDsgKm51bSA+IDA7IC0tKm51bSkgewotCQlzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCAqbXZzX2xpc3QgPSBrbWVtX2NhY2hlX3phbGxvYyhtdnNfdGFza19saXN0X2NhY2hlLCBnZnBfZmxhZ3MpOwotCi0JCWlmICghbXZzX2xpc3QpCi0JCQlicmVhazsKLQotCQlJTklUX0xJU1RfSEVBRCgmbXZzX2xpc3QtPmxpc3QpOwotCQlpZiAoIWZpcnN0KQotCQkJZmlyc3QgPSBtdnNfbGlzdDsKLQkJZWxzZQotCQkJbGlzdF9hZGRfdGFpbCgmbXZzX2xpc3QtPmxpc3QsICZmaXJzdC0+bGlzdCk7Ci0KLQl9Ci0KLQlyZXR1cm4gZmlyc3Q7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtdnNfdGFza19mcmVlX2xpc3Qoc3RydWN0IG12c190YXNrX2xpc3QgKm12c19saXN0KQotewotCUxJU1RfSEVBRChsaXN0KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICphOwotCXN0cnVjdCBtdnNfdGFza19saXN0ICptbGlzdCA9IE5VTEw7Ci0KLQlfX2xpc3RfYWRkKCZsaXN0LCBtdnNfbGlzdC0+bGlzdC5wcmV2LCAmbXZzX2xpc3QtPmxpc3QpOwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgYSwgJmxpc3QpIHsKLQkJbGlzdF9kZWxfaW5pdChwb3MpOwotCQltbGlzdCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCwgbGlzdCk7Ci0JCWttZW1fY2FjaGVfZnJlZShtdnNfdGFza19saXN0X2NhY2hlLCBtbGlzdCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IG12c190YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLCBnZnBfdCBnZnBfZmxhZ3MsCitzdGF0aWMgaW50IG12c190YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLCBnZnBfdCBnZnBfZmxhZ3MsCiAJCQkJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb24sIGludCBpc190bWYsCiAJCQkJc3RydWN0IG12c190bWZfdGFzayAqdG1mKQogewpAQCAtOTEyLDc0ICs4NzYsOSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBtdnNfY29sbGVjdG9yX3Rhc2tfZXhlYyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sIGdmcF90IGdmcF9mbGFncywKLQkJCQlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGlvbiwgaW50IGlzX3RtZiwKLQkJCQlzdHJ1Y3QgbXZzX3RtZl90YXNrICp0bWYpCitpbnQgbXZzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNhc190YXNrICp0YXNrLCBnZnBfdCBnZnBfZmxhZ3MpCiB7Ci0Jc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHRhc2stPmRldjsKLQlzdHJ1Y3QgbXZzX3Bydl9pbmZvICptcGkgPSBkZXYtPnBvcnQtPmhhLT5sbGRkX2hhOwotCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gTlVMTDsKLQlzdHJ1Y3Qgc2FzX3Rhc2sgKnQgPSB0YXNrOwotCXN0cnVjdCBtdnNfdGFza19saXN0ICptdnNfbGlzdCA9IE5VTEwsICphOwotCUxJU1RfSEVBRChxKTsKLQlpbnQgcGFzc1syXSA9IHswfTsKLQl1MzIgcmMgPSAwOwotCXUzMiBuID0gbnVtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwotCi0JbXZzX2xpc3QgPSBtdnNfdGFza19hbGxvY19saXN0KCZuLCBnZnBfZmxhZ3MpOwotCWlmIChuKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG12cyBhbGxvYyBsaXN0IGZhaWxlZC5cbiIsIF9fZnVuY19fKTsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfbGlzdDsKLQl9Ci0KLQlfX2xpc3RfYWRkKCZxLCBtdnNfbGlzdC0+bGlzdC5wcmV2LCAmbXZzX2xpc3QtPmxpc3QpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShhLCAmcSwgbGlzdCkgewotCQlhLT50YXNrID0gdDsKLQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LCBzdHJ1Y3Qgc2FzX3Rhc2ssIGxpc3QpOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJnEgLCBsaXN0KSB7Ci0KLQkJdCA9IGEtPnRhc2s7Ci0JCW12aSA9ICgoc3RydWN0IG12c19kZXZpY2UgKil0LT5kZXYtPmxsZGRfZGV2KS0+bXZpX2luZm87Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm12aS0+bG9jaywgZmxhZ3MpOwotCQlyYyA9IG12c190YXNrX3ByZXAodCwgbXZpLCBpc190bWYsIHRtZiwgJnBhc3NbbXZpLT5pZF0pOwotCQlpZiAocmMpCi0JCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBtdmktPmRldiwgIm12c2FzIGV4ZWMgZmFpbGVkWyVkXSFcbiIsIHJjKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKGxpa2VseShwYXNzWzBdKSkKLQkJCU1WU19DSElQX0RJU1AtPnN0YXJ0X2RlbGl2ZXJ5KG1waS0+bXZpWzBdLAotCQkJCShtcGktPm12aVswXS0+dHhfcHJvZCAtIDEpICYgKE1WU19DSElQX1NMT1RfU1ogLSAxKSk7Ci0KLQlpZiAobGlrZWx5KHBhc3NbMV0pKQotCQkJTVZTX0NISVBfRElTUC0+c3RhcnRfZGVsaXZlcnkobXBpLT5tdmlbMV0sCi0JCQkJKG1waS0+bXZpWzFdLT50eF9wcm9kIC0gMSkgJiAoTVZTX0NISVBfU0xPVF9TWiAtIDEpKTsKLQotCWxpc3RfZGVsX2luaXQoJnEpOwotCi1mcmVlX2xpc3Q6Ci0JaWYgKG12c19saXN0KQotCQltdnNfdGFza19mcmVlX2xpc3QobXZzX2xpc3QpOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgbXZzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLAotCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCXN0cnVjdCBtdnNfZGV2aWNlICptdmlfZGV2ID0gdGFzay0+ZGV2LT5sbGRkX2RldjsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzID0gbXZpX2Rldi0+bXZpX2luZm8tPnNhczsKLQotCWlmIChzYXMtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtIDwgMikKLQkJcmV0dXJuIG12c190YXNrX2V4ZWModGFzaywgbnVtLCBnZnBfZmxhZ3MsIE5VTEwsIDAsIE5VTEwpOwotCWVsc2UKLQkJcmV0dXJuIG12c19jb2xsZWN0b3JfdGFza19leGVjKHRhc2ssIG51bSwgZ2ZwX2ZsYWdzLCBOVUxMLCAwLCBOVUxMKTsKKwlyZXR1cm4gbXZzX3Rhc2tfZXhlYyh0YXNrLCBnZnBfZmxhZ3MsIE5VTEwsIDAsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBtdnNfc2xvdF9mcmVlKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcnhfZGVzYykKQEAgLTE0MTEsNyArMTMxMCw3IEBACiAJCXRhc2stPnNsb3dfdGFzay0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBNVlNfVEFTS19USU1FT1VUKkhaOwogCQlhZGRfdGltZXIoJnRhc2stPnNsb3dfdGFzay0+dGltZXIpOwogCi0JCXJlcyA9IG12c190YXNrX2V4ZWModGFzaywgMSwgR0ZQX0tFUk5FTCwgTlVMTCwgMSwgdG1mKTsKKwkJcmVzID0gbXZzX3Rhc2tfZXhlYyh0YXNrLCBHRlBfS0VSTkVMLCBOVUxMLCAxLCB0bWYpOwogCiAJCWlmIChyZXMpIHsKIAkJCWRlbF90aW1lcigmdGFzay0+c2xvd190YXNrLT50aW1lcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmgKaW5kZXggZDZiMTlkYy4uZGM0MDljMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuaApAQCAtNjUsNyArNjUsNiBAQAogZXh0ZXJuIHN0cnVjdCBtdnNfaW5mbyAqdGd0X212aTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXZzX2Rpc3BhdGNoIG12c182NHh4X2Rpc3BhdGNoOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdnNfZGlzcGF0Y2ggbXZzXzk0eHhfZGlzcGF0Y2g7Ci1leHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKm12c190YXNrX2xpc3RfY2FjaGU7CiAKICNkZWZpbmUgREVWX0lTX0VYUEFOREVSKHR5cGUpCVwKIAkoKHR5cGUgPT0gU0FTX0VER0VfRVhQQU5ERVJfREVWSUNFKSB8fCAodHlwZSA9PSBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRSkpCkBAIC00NDAsMTIgKzQzOSw2IEBACiAJaW50IG5fZWxlbTsKIH07CiAKLXN0cnVjdCBtdnNfdGFza19saXN0IHsKLQlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotCiAvKioqKioqKioqKioqKioqKioqKiogZnVuY3Rpb24gcHJvdG90eXBlICoqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgbXZzX2dldF9zYXNfYWRkcih2b2lkICpidWYsIHUzMiBidWZsZW4pOwogdm9pZCBtdnNfdGFnX2NsZWFyKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgdGFnKTsKQEAgLTQ2Miw4ICs0NTUsNyBAQAogCQkgICAgICB1MzIgb2ZmX2hpLCB1NjQgc2FzX2FkZHIpOwogdm9pZCBtdnNfc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CiBpbnQgbXZzX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGxvbmcgdGltZSk7Ci1pbnQgbXZzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLAotCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKTsKK2ludCBtdnNfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGdmcF90IGdmcF9mbGFncyk7CiBpbnQgbXZzX2Fib3J0X3Rhc2soc3RydWN0IHNhc190YXNrICp0YXNrKTsKIGludCBtdnNfYWJvcnRfdGFza19zZXQoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiwgdTggKmx1bik7CiBpbnQgbXZzX2NsZWFyX2FjYShzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LCB1OCAqbHVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYyBiL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYwppbmRleCBhNzMwNWZmLi41YjkzZWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKKysrIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jCkBAIC03OTk3LDEwICs3OTk3LDcgQEAKIAlpZiAoZGVwdGhfdG9fdXNlID4gTUFYX1RBR1MpCiAJCWRlcHRoX3RvX3VzZSA9IE1BWF9UQUdTOwogCi0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2aWNlLAotCQkJCShkZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgPwotCQkJCSBNU0dfU0lNUExFX1RBRyA6IDApLAotCQkJCWRlcHRoX3RvX3VzZSk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2aWNlLCBkZXB0aF90b191c2UpOwogCiAJLyoKIAkqKglTaW5jZSB0aGUgcXVldWUgZGVwdGggaXMgbm90IHR1bmFibGUgdW5kZXIgTGludXgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NkL29zZF91bGQuYyBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX3VsZC5jCmluZGV4IDkyY2RkNGIuLjI0M2VhYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX3VsZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX3VsZC5jCkBAIC01NDAsOSArNTQwLDkgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IHNjc2lfZHJpdmVyIG9zZF9kcml2ZXIgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZ2VuZHJ2ID0gewogCQkubmFtZQkJPSBvc2RfbmFtZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucHJvYmUJCT0gb3NkX3Byb2JlLAogCQkucmVtb3ZlCQk9IG9zZF9yZW1vdmUsCiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zc3QuYyBiL2RyaXZlcnMvc2NzaS9vc3N0LmMKaW5kZXggZGZmMzdhMjUuLjUwMzMyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuYwpAQCAtMTcyLDkgKzE3Miw5IEBACiBzdGF0aWMgaW50IG9zc3RfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKik7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kcml2ZXIgb3NzdF90ZW1wbGF0ZSA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5nZW5kcnYgPSB7CiAJCS5uYW1lCQk9ICAib3NzdCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnByb2JlCQk9IG9zc3RfcHJvYmUsCiAJCS5yZW1vdmUJCT0gb3NzdF9yZW1vdmUsCiAJfQpAQCAtMjU5LDkgKzI1OSwxMCBAQAogCQkgICBTUnBudC0+Y21kWzBdLCBTUnBudC0+Y21kWzFdLCBTUnBudC0+Y21kWzJdLAogCQkgICBTUnBudC0+Y21kWzNdLCBTUnBudC0+Y21kWzRdLCBTUnBudC0+Y21kWzVdKTsKIAkJaWYgKHNjb2RlKSBwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBTZW5zZTogJTAyeCwgQVNDOiAlMDJ4LCBBU0NROiAlMDJ4XG4iLAotCQkJICAgICAgIAluYW1lLCBzY29kZSwgc2Vuc2VbMTJdLCBzZW5zZVsxM10pOworCQkJCSAgbmFtZSwgc2NvZGUsIHNlbnNlWzEyXSwgc2Vuc2VbMTNdKTsKIAkJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlKQotCQkJX19zY3NpX3ByaW50X3NlbnNlKCJvc3N0ICIsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCV9fc2NzaV9wcmludF9zZW5zZShTVHAtPmRldmljZSwgbmFtZSwKKwkJCQkJICAgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCX0KIAllbHNlCiAjZW5kaWYKQEAgLTI3NSw3ICsyNzYsOCBAQAogCQkgU1JwbnQtPmNtZFswXSAhPSBURVNUX1VOSVRfUkVBRFkpKSB7IC8qIEFibm9ybWFsIGNvbmRpdGlvbnMgZm9yIHRhcGUgKi8KIAkJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczpXOiBDb21tYW5kIHdpdGggc2Vuc2UgZGF0YTpcbiIsIG5hbWUpOwotCQkJX19zY3NpX3ByaW50X3NlbnNlKCJvc3N0ICIsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCV9fc2NzaV9wcmludF9zZW5zZShTVHAtPmRldmljZSwgbmFtZSwKKwkJCQkJICAgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQl9CiAJCWVsc2UgewogCQkJc3RhdGljCWludAlub3R5ZXRwcmludGVkID0gMTsKQEAgLTMzMjUsMTkgKzMzMjcsMTggQEAKIC8qIExvY2sgb3IgdW5sb2NrIHRoZSBkcml2ZSBkb29yLiBEb24ndCB1c2Ugd2hlbiBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0IGFsbG9jYXRlZC4gKi8KIHN0YXRpYyBpbnQgZG9fZG9vcl9sb2NrKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIGludCBkb19sb2NrKQogewotCWludCByZXR2YWwsIGNtZDsKKwlpbnQgcmV0dmFsOwogCi0JY21kID0gZG9fbG9jayA/IFNDU0lfSU9DVExfRE9PUkxPQ0sgOiBTQ1NJX0lPQ1RMX0RPT1JVTkxPQ0s7CiAjaWYgREVCVUcKIAlwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiAlc29ja2luZyBkcml2ZSBkb29yLlxuIiwgdGFwZV9uYW1lKFNUcCksIGRvX2xvY2sgPyAiTCIgOiAiVW5sIik7CiAjZW5kaWYKLQlyZXR2YWwgPSBzY3NpX2lvY3RsKFNUcC0+ZGV2aWNlLCBjbWQsIE5VTEwpOwotCWlmICghcmV0dmFsKSB7CisKKwlyZXR2YWwgPSBzY3NpX3NldF9tZWRpdW1fcmVtb3ZhbChTVHAtPmRldmljZSwKKwkJCWRvX2xvY2sgPyBTQ1NJX1JFTU9WQUxfUFJFVkVOVCA6IFNDU0lfUkVNT1ZBTF9BTExPVyk7CisJaWYgKCFyZXR2YWwpCiAJCVNUcC0+ZG9vcl9sb2NrZWQgPSBkb19sb2NrID8gU1RfTE9DS0VEX0VYUExJQ0lUIDogU1RfVU5MT0NLRUQ7Ci0JfQotCWVsc2UgeworCWVsc2UKIAkJU1RwLT5kb29yX2xvY2tlZCA9IFNUX0xPQ0tfRkFJTFM7Ci0JfQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQ5NjcsMTAgKzQ5NjgsMTAgQEAKIAkgKiBtYXkgdHJ5IGFuZCB0YWtlIHRoZSBkZXZpY2Ugb2ZmbGluZSwgaW4gd2hpY2ggY2FzZSBhbGwgZnVydGhlcgogCSAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHByb2hpYml0ZWQuCiAJICovCi0JaWYoICFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoU1RwLT5kZXZpY2UpICkgewotCQlyZXR2YWwgPSAoLUVOWElPKTsKKwlyZXR2YWwgPSBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoU1RwLT5kZXZpY2UsIGNtZF9pbiwKKwkJCWZpbGUtPmZfZmxhZ3MgJiBPX05ERUxBWSk7CisJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7Ci0JfQogCiAJY21kX3R5cGUgPSBfSU9DX1RZUEUoY21kX2luKTsKIAljbWRfbnIgICA9IF9JT0NfTlIoY21kX2luKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wYXMxNi5jIGIvZHJpdmVycy9zY3NpL3BhczE2LmMKaW5kZXggODBiYWNiNS4uZTgxZWFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BhczE2LmMKKysrIGIvZHJpdmVycy9zY3NpL3BhczE2LmMKQEAgLTEsNiArMSw0IEBACi0jZGVmaW5lIEFVVE9TRU5TRQogI2RlZmluZSBQU0VVRE9fRE1BCi0jZGVmaW5lIEZPTwogI2RlZmluZSBVTlNBRkUgIC8qIE5vdCB1bnNhZmUgZm9yIFBBUzE2IC0tIHVzZSBpdCAqLwogI2RlZmluZSBQREVCVUcgMAogCkBAIC0yNCw0NyArMjIsOSBAQAogICogTWVkaWEgVmlzaW9uCiAgKiAoNTEwKSA3NzAtODYwMAogICogKDgwMCkgMzQ4LTcxMTYKLSAqIAotICogYW5kIAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAogICovCiAKIC8qCi0gKiBPcHRpb25zIDogCi0gKiBBVVRPU0VOU0UgLSBpZiBkZWZpbmVkLCBSRVFVRVNUIFNFTlNFIHdpbGwgYmUgcGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkKLSAqICAgICAgZm9yIGNvbW1hbmRzIHRoYXQgcmV0dXJuIHdpdGggYSBDSEVDSyBDT05ESVRJT04gc3RhdHVzLiAKLSAqCi0gKiBMSU1JVF9UUkFOU0ZFUlNJWkUgLSBpZiBkZWZpbmVkLCBsaW1pdCB0aGUgcHNldWRvLWRtYSB0cmFuc2ZlcnMgdG8gNTEyCi0gKiAgICAgIGJ5dGVzIGF0IGEgdGltZS4gIFNpbmNlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgZHVyaW5nCi0gKiAgICAgIHRoZXNlIHRyYW5zZmVycywgd2UgbWlnaHQgbmVlZCB0aGlzIHRvIGdpdmUgcmVhc29uYWJsZSBpbnRlcnJ1cHQKLSAqICAgICAgc2VydmljZSB0aW1lIGlmIHRoZSB0cmFuc2ZlciBzaXplIGdldHMgdG9vIGxhcmdlLgotICoKLSAqIFBTRVVET19ETUEgLSBlbmFibGVzIFBTRVVETy1ETUEgaGFyZHdhcmUsIHNob3VsZCBnaXZlIGEgMy00WCBwZXJmb3JtYW5jZQotICogaW5jcmVhc2UgY29tcGFyZWQgdG8gcG9sbGVkIEkvTy4KLSAqCi0gKiBQQVJJVFkgLSBlbmFibGUgcGFyaXR5IGNoZWNraW5nLiAgTm90IHN1cHBvcnRlZC4KLSAqIAotICogU0NTSTIgLSBlbmFibGUgc3VwcG9ydCBmb3IgU0NTSS1JSSB0YWdnZWQgcXVldWVpbmcuICBVbnRlc3RlZC4KLSAqCi0gKiBVTlNBRkUgLSBsZWF2ZSBpbnRlcnJ1cHRzIGVuYWJsZWQgZHVyaW5nIHBzZXVkby1ETUEgdHJhbnNmZXJzLiAgVGhpcwotICoJICAgIHBhcmFtZXRlciBjb21lcyBmcm9tIHRoZSBOQ1I1MzgwIGNvZGUuICBJdCBpcyBOT1QgdW5zYWZlIHdpdGgKLSAqCSAgICB0aGUgUEFTMTYgYW5kIHlvdSBzaG91bGQgdXNlIGl0LiAgSWYgeW91IGRvbid0IHlvdSB3aWxsIGhhdmUKLSAqCSAgICBhIHByb2JsZW0gd2l0aCBkcm9wcGVkIGNoYXJhY3RlcnMgZHVyaW5nIGhpZ2ggc3BlZWQKLSAqCSAgICBjb21tdW5pY2F0aW9ucyBkdXJpbmcgU0NTSSB0cmFuc2ZlcnMuICBJZiB5b3UgcmVhbGx5IGRvbid0Ci0gKgkgICAgd2FudCB0byB1c2UgVU5TQUZFIHlvdSBjYW4gdHJ5IGRlZmluaW5nIExJTUlUX1RSQU5TRkVSU0laRSBvcgotICoJICAgIHR3aWRkbGUgd2l0aCB0aGUgdHJhbnNmZXIgc2l6ZSBpbiB0aGUgaGlnaCBsZXZlbCBjb2RlLgotICoKLSAqIFVTTEVFUCAtIGVuYWJsZSBzdXBwb3J0IGZvciBkZXZpY2VzIHRoYXQgZG9uJ3QgZGlzY29ubmVjdC4gIFVudGVzdGVkLgotICoKICAqIFRoZSBjYXJkIGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCBpbiBvbmUgb2Ygc2V2ZXJhbCB3YXlzIDogCiAgKiAxLiAgQXV0b3Byb2JlIChkZWZhdWx0KSAtIFRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBtb2RlbHMgb2YKICAqICAgICB0aGUgUHJvIEF1ZGlvIFNwZWN0cnVtL1N0dWRpbyAxNiwgYW5kIEkgb25seSBoYXZlIG9uZSBvZgpAQCAtMTAyLDEzICs2MiwxMSBAQAogICogICBJZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIHlvdXIgY2FyZCBub3QgYmVpbmcgcmVjb2duaXplZCwgdXNlCiAgKiAgIHRoZSBMSUxPIGNvbW1hbmQgbGluZSBvdmVycmlkZS4gIFRyeSB0byBnZXQgaXQgcmVjb2duaXplZCB3aXRob3V0CiAgKiAgIGludGVycnVwdHMuICBJZSwgZm9yIGEgYm9hcmQgYXQgdGhlIGRlZmF1bHQgMHgzODggYmFzZSBwb3J0LAotICogICBib290OiBsaW51eCBwYXMxNj0weDM4OCwyNTUKKyAqICAgYm9vdDogbGludXggcGFzMTY9MHgzODgsMAogICoKLSAqICAgU0NTSV9JUlFfTk9ORSAoMjU1KSBzaG91bGQgYmUgc3BlY2lmaWVkIGZvciBubyBpbnRlcnJ1cHQsCisgKiAgIE5PX0lSUSAoMCkgc2hvdWxkIGJlIHNwZWNpZmllZCBmb3Igbm8gaW50ZXJydXB0LAogICogICBJUlFfQVVUTyAoMjU0KSB0byBhdXRvcHJvYmUgZm9yIGFuIElSUSBsaW5lIGlmIG92ZXJyaWRkZW4KICAqICAgb24gdGhlIGNvbW1hbmQgbGluZS4KLSAqCi0gKiAgIChJUlFfQVVUTyA9PSAyNTQsIFNDU0lfSVJRX05PTkUgPT0gMjU1IGluIE5DUjUzODAuaCkKICAqLwogIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTIzLDE1ICs4MSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlICJwYXMxNi5oIgogI2RlZmluZSBBVVRPUFJPQkVfSVJRCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogCiAKLXN0YXRpYyBpbnQgcGFzX21heGkgPSAwOwotc3RhdGljIGludCBwYXNfd21heGkgPSAwOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHBhczE2X2FkZHIgPSAwOwogc3RhdGljIGludCBwYXMxNl9pcnEgPSAwOwogIApAQCAtMzM3LDYgKzI5Miw3IEBACiB9CiAKIAorI2lmbmRlZiBNT0RVTEUKIC8qCiAgKiBGdW5jdGlvbiA6IHBhczE2X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQogICoKQEAgLTM0NywxMCArMzAzLDEzIEBACiAgKgogICovCiAKLXZvaWQgX19pbml0IHBhczE2X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQorc3RhdGljIGludCBfX2luaXQgcGFzMTZfc2V0dXAoY2hhciAqc3RyKQogewogICAgIHN0YXRpYyBpbnQgY29tbWFuZGxpbmVfY3VycmVudCA9IDA7CiAgICAgaW50IGk7CisgICAgaW50IGludHNbMTBdOworCisgICAgZ2V0X29wdGlvbnMoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKICAgICBpZiAoaW50c1swXSAhPSAyKSAKIAlwcmludGsoInBhczE2X3NldHVwIDogdXNhZ2UgcGFzMTY9aW9fcG9ydCxpcnFcbiIpOwogICAgIGVsc2UgCkBAIC0zNjQsOCArMzIzLDEyIEBACiAJCX0KIAkgICAgKytjb21tYW5kbGluZV9jdXJyZW50OwogCX0KKyAgICByZXR1cm4gMTsKIH0KIAorX19zZXR1cCgicGFzMTY9IiwgcGFzMTZfc2V0dXApOworI2VuZGlmCisKIC8qIAogICogRnVuY3Rpb24gOiBpbnQgcGFzMTZfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogICoKQEAgLTM3OSw3ICszNDIsNyBAQAogICoKICAqLwogCi1pbnQgX19pbml0IHBhczE2X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKK3N0YXRpYyBpbnQgX19pbml0IHBhczE2X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQogewogICAgIHN0YXRpYyBpbnQgY3VycmVudF9vdmVycmlkZSA9IDA7CiAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGN1cnJlbnRfYmFzZSA9IDA7CkBAIC0zODcsMTAgKzM1MCw2IEBACiAgICAgdW5zaWduZWQgc2hvcnQgaW9fcG9ydDsKICAgICBpbnQgIGNvdW50OwogCi0gICAgdHBudC0+cHJvY19uYW1lID0gInBhczE2IjsKLSAgICB0cG50LT5zaG93X2luZm8gPSBwYXMxNl9zaG93X2luZm87Ci0gICAgdHBudC0+d3JpdGVfaW5mbyA9IHBhczE2X3dyaXRlX2luZm87Ci0KICAgICBpZiAocGFzMTZfYWRkciAhPSAwKSB7CiAJb3ZlcnJpZGVzWzBdLmlvX3BvcnQgPSBwYXMxNl9hZGRyOwogCS8qCkBAIC00NTIsMTUgKzQxMSwxOSBAQAogCWVsc2UgCiAJICAgIGluc3RhbmNlLT5pcnEgPSBOQ1I1MzgwX3Byb2JlX2lycShpbnN0YW5jZSwgUEFTMTZfSVJRUyk7CiAKLQlpZiAoaW5zdGFuY2UtPmlycSAhPSBTQ1NJX0lSUV9OT05FKSAKKwkvKiBDb21wYXRpYmlsaXR5IHdpdGggZG9jdW1lbnRlZCBOQ1I1MzgwIGtlcm5lbCBwYXJhbWV0ZXJzICovCisJaWYgKGluc3RhbmNlLT5pcnEgPT0gMjU1KQorCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROworCisJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCSAgICBpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgcGFzMTZfaW50ciwgMCwKIAkJCSAgICAicGFzMTYiLCBpbnN0YW5jZSkpIHsKIAkJcHJpbnRrKCJzY3NpJWQgOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwgCiAJCSAgICBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7Ci0JCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOworCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROwogCSAgICB9IAogCi0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkgeworCWlmIChpbnN0YW5jZS0+aXJxID09IE5PX0lSUSkgewogCSAgICBwcmludGsoInNjc2klZCA6IGludGVycnVwdHMgbm90IGVuYWJsZWQuIGZvciBiZXR0ZXIgaW50ZXJhY3RpdmUgcGVyZm9ybWFuY2UsXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJICAgIHByaW50aygic2NzaSVkIDogcGxlYXNlIGp1bXBlciB0aGUgYm9hcmQgZm9yIGEgZnJlZSBJUlEuXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJICAgIC8qIERpc2FibGUgNTM4MCBpbnRlcnJ1cHRzLCBsZWF2ZSBkcml2ZSBwYXJhbXMgdGhlIHNhbWUgKi8KQEAgLTQ3MiwxNyArNDM1LDYgQEAKIAlwcmludGsoInNjc2klZCA6IGlycSA9ICVkXG4iLCBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7CiAjZW5kaWYKIAotCXByaW50aygic2NzaSVkIDogYXQgMHglMDR4IiwgaW5zdGFuY2UtPmhvc3Rfbm8sIChpbnQpIAotCSAgICBpbnN0YW5jZS0+aW9fcG9ydCk7Ci0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkKLQkgICAgcHJpbnRrICgiIGludGVycnVwdHMgZGlzYWJsZWQiKTsKLQllbHNlIAotCSAgICBwcmludGsgKCIgaXJxICVkIiwgaW5zdGFuY2UtPmlycSk7Ci0JcHJpbnRrKCIgb3B0aW9ucyBDQU5fUVVFVUU9JWQgIENNRF9QRVJfTFVOPSVkIHJlbGVhc2U9JWQiLAotCSAgICBDQU5fUVVFVUUsIENNRF9QRVJfTFVOLCBQQVMxNl9QVUJMSUNfUkVMRUFTRSk7Ci0JTkNSNTM4MF9wcmludF9vcHRpb25zKGluc3RhbmNlKTsKLQlwcmludGsoIlxuIik7Ci0KIAkrK2N1cnJlbnRfb3ZlcnJpZGU7CiAJKytjb3VudDsKICAgICB9CkBAIC01MDksOCArNDYxLDggQEAKICAqIGFuZCBtYXRjaGluZyB0aGUgSF9DX1MgY29vcmRpbmF0ZXMgdG8gd2hhdCBET1MgdXNlcy4KICAqLwogCi1pbnQgcGFzMTZfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqZGV2LAotCQlzZWN0b3JfdCBjYXBhY2l0eSwgaW50ICogaXApCitzdGF0aWMgaW50IHBhczE2X2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgKmlwKQogewogICBpbnQgc2l6ZSA9IGNhcGFjaXR5OwogICBpcFswXSA9IDY0OwpAQCAtNTQ3LDYgKzQ5OSw3IEBACiAJUF9EQVRBX1JFR19PRkZTRVQpOwogICAgIHJlZ2lzdGVyIGludCBpID0gbGVuOwogICAgIGludCBpaSA9IDA7CisgICAgc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihpbnN0YW5jZSk7CiAKICAgICB3aGlsZSAoICEoaW5iKGluc3RhbmNlLT5pb19wb3J0ICsgUF9TVEFUVVNfUkVHX09GRlNFVCkgJiBQX1NUX1JEWSkgKQogCSArK2lpOwpAQCAtNTU5LDggKzUxMiw4IEBACiAJICAgIGluc3RhbmNlLT5ob3N0X25vKTsKIAlyZXR1cm4gLTE7CiAgICAgfQotICAgaWYgKGlpID4gcGFzX21heGkpCi0gICAgICBwYXNfbWF4aSA9IGlpOworICAgIGlmIChpaSA+IGhvc3RkYXRhLT5zcGluX21heF9yKQorICAgICAgICBob3N0ZGF0YS0+c3Bpbl9tYXhfciA9IGlpOwogICAgIHJldHVybiAwOwogfQogCkBAIC01ODMsNiArNTM2LDcgQEAKICAgICByZWdpc3RlciB1bnNpZ25lZCBzaG9ydCByZWcgPSAoaW5zdGFuY2UtPmlvX3BvcnQgKyBQX0RBVEFfUkVHX09GRlNFVCk7CiAgICAgcmVnaXN0ZXIgaW50IGkgPSBsZW47CiAgICAgaW50IGlpID0gMDsKKyAgICBzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGluc3RhbmNlKTsKIAogICAgIHdoaWxlICggISgoaW5iKGluc3RhbmNlLT5pb19wb3J0ICsgUF9TVEFUVVNfUkVHX09GRlNFVCkpICYgUF9TVF9SRFkpICkKIAkgKytpaTsKQEAgLTU5NSw4ICs1NDksOCBAQAogCSAgICBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoaWkgPiBwYXNfbWF4aSkKLQkgcGFzX3dtYXhpID0gaWk7CisgICAgaWYgKGlpID4gaG9zdGRhdGEtPnNwaW5fbWF4X3cpCisgICAgICAgIGhvc3RkYXRhLT5zcGluX21heF93ID0gaWk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTYwNCw3ICs1NTgsNyBAQAogCiBzdGF0aWMgaW50IHBhczE2X3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7Ci0JaWYgKHNob3N0LT5pcnEpCisJaWYgKHNob3N0LT5pcnEgIT0gTk9fSVJRKQogCQlmcmVlX2lycShzaG9zdC0+aXJxLCBzaG9zdCk7CiAJTkNSNTM4MF9leGl0KHNob3N0KTsKIAlpZiAoc2hvc3QtPmlvX3BvcnQgJiYgc2hvc3QtPm5faW9fcG9ydCkKQEAgLTYxNyw2ICs1NzEsMTAgQEAKIAkubmFtZSAgICAgICAgICAgPSAiUHJvIEF1ZGlvIFNwZWN0cnVtLTE2IFNDU0kiLAogCS5kZXRlY3QgICAgICAgICA9IHBhczE2X2RldGVjdCwKIAkucmVsZWFzZSAgICAgICAgPSBwYXMxNl9yZWxlYXNlLAorCS5wcm9jX25hbWUgICAgICA9ICJwYXMxNiIsCisJLnNob3dfaW5mbyAgICAgID0gcGFzMTZfc2hvd19pbmZvLAorCS53cml0ZV9pbmZvICAgICA9IHBhczE2X3dyaXRlX2luZm8sCisJLmluZm8gICAgICAgICAgID0gcGFzMTZfaW5mbywKIAkucXVldWVjb21tYW5kICAgPSBwYXMxNl9xdWV1ZV9jb21tYW5kLAogCS5laF9hYm9ydF9oYW5kbGVyID0gcGFzMTZfYWJvcnQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyID0gcGFzMTZfYnVzX3Jlc2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BhczE2LmggYi9kcml2ZXJzL3Njc2kvcGFzMTYuaAppbmRleCBhYTUyOGY1Li5jNjEwOWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGFzMTYuaAorKysgYi9kcml2ZXJzL3Njc2kvcGFzMTYuaApAQCAtMTgsMjYgKzE4LDEyIEBACiAgKiBNZWRpYSBWaXNpb24KICAqICg1MTApIDc3MC04NjAwCiAgKiAoODAwKSAzNDgtNzExNgotICogCi0gKiBhbmQgCi0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0CiAgKi8KIAogCiAjaWZuZGVmIFBBUzE2X0gKICNkZWZpbmUgUEFTMTZfSAogCi0jZGVmaW5lIFBBUzE2X1BVQkxJQ19SRUxFQVNFIDMKLQogI2RlZmluZSBQREVCVUdfSU5JVAkweDEKICNkZWZpbmUgUERFQlVHX1RSQU5TRkVSIDB4MgogCkBAIC0xMTQsMTIgKzEwMCw2IEBACiAKIAogI2lmbmRlZiBBU00KLXN0YXRpYyBpbnQgcGFzMTZfYWJvcnQoU2NzaV9DbW5kICopOwotc3RhdGljIGludCBwYXMxNl9iaW9zcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKLQkJCSAgIHNlY3Rvcl90LCBpbnQqKTsKLXN0YXRpYyBpbnQgcGFzMTZfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7Ci1zdGF0aWMgaW50IHBhczE2X3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCBwYXMxNl9idXNfcmVzZXQoU2NzaV9DbW5kICopOwogCiAjaWZuZGVmIENNRF9QRVJfTFVOCiAjZGVmaW5lIENNRF9QRVJfTFVOIDIKQEAgLTE2MSw2ICsxNDEsNyBAQAogI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgcGFzMTZfcXVldWVfY29tbWFuZAogI2RlZmluZSBOQ1I1MzgwX2Fib3J0IHBhczE2X2Fib3J0CiAjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0IHBhczE2X2J1c19yZXNldAorI2RlZmluZSBOQ1I1MzgwX2luZm8gcGFzMTZfaW5mbwogI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyBwYXMxNl9zaG93X2luZm8KICNkZWZpbmUgTkNSNTM4MF93cml0ZV9pbmZvIHBhczE2X3dyaXRlX2luZm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCmluZGV4IDY2NmJmNWEuLjMyOWFiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKQEAgLTg5LDYgKzg5LDggQEAKIAkudGFyZ2V0X2Rlc3Ryb3kJCT0gc2FzX3RhcmdldF9kZXN0cm95LAogCS5pb2N0bAkJCT0gc2FzX2lvY3RsLAogCS5zaG9zdF9hdHRycwkJPSBwbTgwMDFfaG9zdF9hdHRycywKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIC8qKgpAQCAtNTk5LDggKzYwMSw2IEBACiAJc2hhLT5sbGRkX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCXNoYS0+c2FzX2FkZHIgPSAmcG04MDAxX2hhLT5zYXNfYWRkclswXTsKIAlzaGEtPm51bV9waHlzID0gY2hpcF9pbmZvLT5uX3BoeTsKLQlzaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gMTsKLQlzaGEtPmxsZGRfcXVldWVfc2l6ZSA9IFBNODAwMV9DQU5fUVVFVUU7CiAJc2hhLT5jb3JlLnNob3N0ID0gc2hvc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKaW5kZXggNzY1NzBlNi4uYjkzZjI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogICAqLwogI2RlZmluZSBERVZfSVNfR09ORShwbTgwMDFfZGV2KQlcCiAJKCghcG04MDAxX2RldiB8fCAocG04MDAxX2Rldi0+ZGV2X3R5cGUgPT0gU0FTX1BIWV9VTlVTRUQpKSkKLXN0YXRpYyBpbnQgcG04MDAxX3Rhc2tfZXhlYyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sCitzdGF0aWMgaW50IHBtODAwMV90YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLAogCWdmcF90IGdmcF9mbGFncywgaW50IGlzX3RtZiwgc3RydWN0IHBtODAwMV90bWZfdGFzayAqdG1mKQogewogCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSB0YXNrLT5kZXY7CkBAIC0zNjAsNyArMzYwLDYgQEAKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnQgPSB0YXNrOwogCXN0cnVjdCBwbTgwMDFfY2NiX2luZm8gKmNjYjsKIAl1MzIgdGFnID0gMHhkZWFkYmVlZiwgcmMsIG5fZWxlbSA9IDA7Ci0JdTMyIG4gPSBudW07CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKIAlpZiAoIWRldi0+cG9ydCkgewpAQCAtMzg3LDE4ICszODYsMTIgQEAKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJCQl0LT50YXNrX2RvbmUodCk7CiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwotCQkJCWlmIChuID4gMSkKLQkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAotCQkJCQkJCXN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgewogCQkJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzID0gJnQtPnRhc2tfc3RhdHVzOwogCQkJCXRzLT5yZXNwID0gU0FTX1RBU0tfVU5ERUxJVkVSRUQ7CiAJCQkJdHMtPnN0YXQgPSBTQVNfUEhZX0RPV047CiAJCQkJdC0+dGFza19kb25lKHQpOwotCQkJCWlmIChuID4gMSkKLQkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAotCQkJCQkJCXN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KQEAgLTQ2MCw5ICs0NTMsNyBAQAogCQl0LT50YXNrX3N0YXRlX2ZsYWdzIHw9IFNBU19UQVNLX0FUX0lOSVRJQVRPUjsKIAkJc3Bpbl91bmxvY2soJnQtPnRhc2tfc3RhdGVfbG9jayk7CiAJCXBtODAwMV9kZXYtPnJ1bm5pbmdfcmVxKys7Ci0JCWlmIChuID4gMSkKLQkJCXQgPSBsaXN0X2VudHJ5KHQtPmxpc3QubmV4dCwgc3RydWN0IHNhc190YXNrLCBsaXN0KTsKLQl9IHdoaWxlICgtLW4pOworCX0gd2hpbGUgKDApOwogCXJjID0gMDsKIAlnb3RvIG91dF9kb25lOwogCkBAIC00ODMsMTQgKzQ3NCwxMSBAQAogICAqIHBtODAwMV9xdWV1ZV9jb21tYW5kIC0gcmVnaXN0ZXIgZm9yIHVwcGVyIGxheWVyIHVzZWQsIGFsbCBJTyBjb21tYW5kcyBzZW50CiAgICogdG8gSEJBIGFyZSBmcm9tIHRoaXMgaW50ZXJmYWNlLgogICAqIEB0YXNrOiB0aGUgdGFzayB0byBiZSBleGVjdXRlLgotICAqIEBudW06IGlmIGNhbl9xdWV1ZSBncmVhdCB0aGFuIDEsIHRoZSB0YXNrIGNhbiBiZSBxdWV1ZWQgdXAuIGZvciBTTVAgdGFzaywKLSAgKiB3ZSBhbHdheXMgZXhlY3V0ZSBvbmUgb25lIHRpbWUKICAgKiBAZ2ZwX2ZsYWdzOiBnZnBfZmxhZ3MKICAgKi8KLWludCBwbTgwMDFfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sCi0JCWdmcF90IGdmcF9mbGFncykKK2ludCBwbTgwMDFfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGdmcF90IGdmcF9mbGFncykKIHsKLQlyZXR1cm4gcG04MDAxX3Rhc2tfZXhlYyh0YXNrLCBudW0sIGdmcF9mbGFncywgMCwgTlVMTCk7CisJcmV0dXJuIHBtODAwMV90YXNrX2V4ZWModGFzaywgZ2ZwX2ZsYWdzLCAwLCBOVUxMKTsKIH0KIAogLyoqCkBAIC03MDgsNyArNjk2LDcgQEAKIAkJdGFzay0+c2xvd190YXNrLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIFBNODAwMV9UQVNLX1RJTUVPVVQqSFo7CiAJCWFkZF90aW1lcigmdGFzay0+c2xvd190YXNrLT50aW1lcik7CiAKLQkJcmVzID0gcG04MDAxX3Rhc2tfZXhlYyh0YXNrLCAxLCBHRlBfS0VSTkVMLCAxLCB0bWYpOworCQlyZXMgPSBwbTgwMDFfdGFza19leGVjKHRhc2ssIEdGUF9LRVJORUwsIDEsIHRtZik7CiAKIAkJaWYgKHJlcykgewogCQkJZGVsX3RpbWVyKCZ0YXNrLT5zbG93X3Rhc2stPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5oIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKaW5kZXggZjZiMmFjNS4uOGRkOGI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKQEAgLTYyMyw4ICs2MjMsNyBAQAogCXZvaWQgKmZ1bmNkYXRhKTsKIHZvaWQgcG04MDAxX3NjYW5fc3RhcnQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwogaW50IHBtODAwMV9zY2FuX2ZpbmlzaGVkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1bnNpZ25lZCBsb25nIHRpbWUpOwotaW50IHBtODAwMV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgY29uc3QgaW50IG51bSwKLQlnZnBfdCBnZnBfZmxhZ3MpOworaW50IHBtODAwMV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIGludCBwbTgwMDFfYWJvcnRfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spOwogaW50IHBtODAwMV9hYm9ydF90YXNrX3NldChzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LCB1OCAqbHVuKTsKIGludCBwbTgwMDFfY2xlYXJfYWNhKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYsIHU4ICpsdW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggYmNiNjRlYi4uYjFiMWY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC0yNDksMTUgKzI0OSwxMSBAQAogCQkJCSAgICAgIFBNQ1JBSURfVlNFVF9NQVhfU0VDVE9SUyk7CiAJfQogCi0JaWYgKHNjc2lfZGV2LT50YWdnZWRfc3VwcG9ydGVkICYmCi0JICAgIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpIHx8IFJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSkpIHsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2NzaV9kZXYsIHNjc2lfZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBNU0dfU0lNUExFX1RBRywKLQkJCQkJc2NzaV9kZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKLQl9IGVsc2UgewotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzY3NpX2RldiwgMCwKLQkJCQkJc2NzaV9kZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKLQl9CisJLyoKKwkgKiBXZSBuZXZlciB3YW50IHRvIHJlcG9ydCBUQ1Egc3VwcG9ydCBmb3IgdGhlc2UgdHlwZXMgb2YgZGV2aWNlcy4KKwkgKi8KKwlpZiAoIVJFU19JU19HU0NTSShyZXMtPmNmZ19lbnRyeSkgJiYgIVJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSkKKwkJc2NzaV9kZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODksNTUgKzI4NSwxOCBAQAogICogcG1jcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGggLSBDaGFuZ2UgdGhlIGRldmljZSdzIHF1ZXVlIGRlcHRoCiAgKiBAc2NzaV9kZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICogQGRlcHRoOiBkZXB0aCB0byBzZXQKLSAqIEByZWFzb246IGNhbGxpbmcgY29udGV4dAogICoKICAqIFJldHVybiB2YWx1ZQogICoJYWN0dWFsIGRlcHRoIHNldAogICovCi1zdGF0aWMgaW50IHBtY3JhaWRfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCBkZXB0aCwKLQkJCQkgICAgICBpbnQgcmVhc29uKQorc3RhdGljIGludCBwbWNyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2LCBpbnQgZGVwdGgpCiB7Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAoZGVwdGggPiBQTUNSQUlEX01BWF9DTURfUEVSX0xVTikKIAkJZGVwdGggPSBQTUNSQUlEX01BWF9DTURfUEVSX0xVTjsKLQotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBzY3NpX2dldF90YWdfdHlwZShzY3NpX2RldiksIGRlcHRoKTsKLQotCXJldHVybiBzY3NpX2Rldi0+cXVldWVfZGVwdGg7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBkZXB0aCk7CiB9CiAKIC8qKgotICogcG1jcmFpZF9jaGFuZ2VfcXVldWVfdHlwZSAtIENoYW5nZSB0aGUgZGV2aWNlJ3MgcXVldWUgdHlwZQotICogQHNjc2lfZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKLSAqIEB0YWc6IHR5cGUgb2YgdGFncyB0byB1c2UKLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKglhY3R1YWwgcXVldWUgdHlwZSBzZXQKLSAqLwotc3RhdGljIGludCBwbWNyYWlkX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCB0YWcpCi17Ci0Jc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKLQotCXJlcyA9IChzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqKXNjc2lfZGV2LT5ob3N0ZGF0YTsKLQotCWlmICgocmVzKSAmJiBzY3NpX2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCAmJgotCSAgICAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSB8fCBSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkpKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNjc2lfZGV2LCB0YWcpOwotCi0JCWlmICh0YWcpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzY3NpX2Rldiwgc2NzaV9kZXYtPnF1ZXVlX2RlcHRoKTsKLQkJZWxzZQotCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzY3NpX2Rldiwgc2NzaV9kZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnID0gMDsKLQotCXJldHVybiB0YWc7Ci19Ci0KLQotLyoqCiAgKiBwbWNyYWlkX2luaXRfY21kYmxrIC0gaW5pdGlhbGl6ZXMgYSBjb21tYW5kIGJsb2NrCiAgKgogICogQGNtZDogcG9pbnRlciB0byBzdHJ1Y3QgcG1jcmFpZF9jbWQgdG8gYmUgaW5pdGlhbGl6ZWQKQEAgLTMxNzUsMzYgKzMxMzQsNiBAQAogfQogCiAvKioKLSAqIHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzIC0gVHJhbnNsYXRlIFNQSSBRLVRhZ3MgdG8gdGFzayBhdHRyaWJ1dGVzCi0gKiBAc2NzaV9jbWQ6ICAgc2NzaSBjb21tYW5kIHN0cnVjdAotICoKLSAqIFJldHVybiB2YWx1ZQotICoJICBudW1iZXIgb2YgdGFncyBvciAwIGlmIHRoZSB0YXNrIGlzIG5vdCB0YWdnZWQKLSAqLwotc3RhdGljIHU4IHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kKQotewotCWNoYXIgdGFnWzJdOwotCXU4IHJjID0gMDsKLQotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coc2NzaV9jbWQsIHRhZykpIHsKLQkJc3dpdGNoICh0YWdbMF0pIHsKLQkJY2FzZSBNU0dfU0lNUExFX1RBRzoKLQkJCXJjID0gVEFTS19UQUdfU0lNUExFOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX0hFQURfVEFHOgotCQkJcmMgPSBUQVNLX1RBR19RVUVVRV9IRUFEOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX09SREVSRURfVEFHOgotCQkJcmMgPSBUQVNLX1RBR19PUkRFUkVEOwotCQkJYnJlYWs7Ci0JCX07Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0KLS8qKgogICogcG1jcmFpZF9pbml0X2lvYWRscyAtIGluaXRpYWxpemVzIElPQURMIHJlbGF0ZWQgZmllbGRzIGluIElPQVJDQgogICogQGNtZDogcG1jcmFpZCBjb21tYW5kIHN0cnVjdAogICogQHNnY291bnQ6IGNvdW50IG9mIHNjYXR0ZXItZ2F0aGVyIGVsZW1lbnRzCkBAIC0zNTU5LDcgKzM0ODgsOSBAQAogCQl9CiAKIAkJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCB8PSBOT19MSU5LX0RFU0NTOwotCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MxIHw9IHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzKHNjc2lfY21kKTsKKworCQlpZiAoc2NzaV9jbWQtPmZsYWdzICYgU0NNRF9UQUdHRUQpCisJCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MxIHw9IFRBU0tfVEFHX1NJTVBMRTsKIAogCQlpZiAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSkKIAkJCWlvYXJjYi0+cmVxdWVzdF9mbGFnczEgfD0gREVMQVlfQUZURVJfUkVTRVQ7CkBAIC00MzIwLDcgKzQyNTEsNyBAQAogCS5zbGF2ZV9jb25maWd1cmUgPSBwbWNyYWlkX3NsYXZlX2NvbmZpZ3VyZSwKIAkuc2xhdmVfZGVzdHJveSA9IHBtY3JhaWRfc2xhdmVfZGVzdHJveSwKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gcG1jcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlICA9IHBtY3JhaWRfY2hhbmdlX3F1ZXVlX3R5cGUsCisJLmNoYW5nZV9xdWV1ZV90eXBlICA9IHNjc2lfY2hhbmdlX3F1ZXVlX3R5cGUsCiAJLmNhbl9xdWV1ZSA9IFBNQ1JBSURfTUFYX0lPX0NNRCwKIAkudGhpc19pZCA9IC0xLAogCS5zZ190YWJsZXNpemUgPSBQTUNSQUlEX01BWF9JT0FETFMsCkBAIC00MzI5LDcgKzQyNjAsOCBAQAogCS5jbWRfcGVyX2x1biA9IFBNQ1JBSURfTUFYX0NNRF9QRVJfTFVOLAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5zaG9zdF9hdHRycyA9IHBtY3JhaWRfaG9zdF9hdHRycywKLQkucHJvY19uYW1lID0gUE1DUkFJRF9EUklWRVJfTkFNRQorCS5wcm9jX25hbWUgPSBQTUNSQUlEX0RSSVZFUl9OQU1FLAorCS51c2VfYmxrX3RhZ3MgPSAxLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wczNyb20uYyBiL2RyaXZlcnMvc2NzaS9wczNyb20uYwppbmRleCBlZjIzZmFiLi5iM2I0OGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcHMzcm9tLmMKKysrIGIvZHJpdmVycy9zY3NpL3BzM3JvbS5jCkBAIC0yMjAsMTAgKzIyMCw2IEBACiAJdW5zaWduZWQgY2hhciBvcGNvZGU7CiAJaW50IHJlczsKIAotI2lmZGVmIERFQlVHCi0Jc2NzaV9wcmludF9jb21tYW5kKGNtZCk7Ci0jZW5kaWYKLQogCXByaXYtPmN1cnJfY21kID0gY21kOwogCWNtZC0+c2NzaV9kb25lID0gZG9uZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggMTU4MDIwNS4uYzY4YTY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC0xMjI0LDEwICsxMjI0LDkgQEAKIAogCWlmIChkZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgJiYKIAkgICAgKGhhLT5idXNfc2V0dGluZ3NbYnVzXS5xdGFnX2VuYWJsZXMgJiAoQklUXzAgPDwgdGFyZ2V0KSkpIHsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2aWNlLCBNU0dfT1JERVJFRF9UQUcsCi0JCQkJCWhhLT5idXNfc2V0dGluZ3NbYnVzXS5oaXdhdCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldmljZSwgaGEtPmJ1c19zZXR0aW5nc1tidXNdLmhpd2F0KTsKIAl9IGVsc2UgewotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXZpY2UsIDAsIGRlZmF1bHRfZGVwdGgpOworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXZpY2UsIGRlZmF1bHRfZGVwdGgpOwogCX0KIAogCW52LT5idXNbYnVzXS50YXJnZXRbdGFyZ2V0XS5wYXJhbWV0ZXIuZW5hYmxlX3N5bmMgPSBkZXZpY2UtPnNkdHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKaW5kZXggYjE4NjVhNy4uNzY4NmJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaApAQCAtNzUyLDggKzc1Miw2IEBACiBleHRlcm4gaW50IHFsYTgwNDRfcmRfZGlyZWN0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIGNvbnN0IHVpbnQzMl90IGNyYl9yZWcpOwogZXh0ZXJuIHZvaWQgcWxhODA0NF93cl9kaXJlY3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwKIAkJCSAgICAgIGNvbnN0IHVpbnQzMl90IGNyYl9yZWcsIGNvbnN0IHVpbnQzMl90IHZhbHVlKTsKLWV4dGVybiBpbmxpbmUgdm9pZCBxbGE4MDQ0X3NldF9xc250X3JlYWR5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwotZXh0ZXJuIGlubGluZSB2b2lkIHFsYTgwNDRfbmVlZF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwogZXh0ZXJuIGludCBxbGE4MDQ0X2RldmljZV9zdGF0ZV9oYW5kbGVyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwogZXh0ZXJuIHZvaWQgcWxhODA0NF9jbGVhcl9xc250X3JlYWR5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpOwogZXh0ZXJuIHZvaWQgcWxhODA0NF9jbGVhcl9kcnZfYWN0aXZlKHN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCmluZGV4IGYwZWRiMDcuLmExYWIyNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwpAQCAtMzI1LDcgKzMyNSw2IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYTsKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwogCXN0cnVjdCByc3BfcXVlICpyc3A7Ci0JY2hhcgkJdGFnWzJdOwogCiAJLyogU2V0dXAgZGV2aWNlIHBvaW50ZXJzLiAqLwogCXJldCA9IDA7CkBAIC00MDQsMjYgKzQwMyw3IEBACiAJLyogU2V0IHRhcmdldCBJRCBhbmQgTFVOIG51bWJlciovCiAJU0VUX1RBUkdFVF9JRChoYSwgY21kX3BrdC0+dGFyZ2V0LCBzcC0+ZmNwb3J0LT5sb29wX2lkKTsKIAljbWRfcGt0LT5sdW4gPSBjcHVfdG9fbGUxNihjbWQtPmRldmljZS0+bHVuKTsKLQotCS8qIFVwZGF0ZSB0YWdnZWQgcXVldWluZyBtb2RpZmllciAqLwotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQljbWRfcGt0LT5jb250cm9sX2ZsYWdzID0KLQkJCSAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KENGX0hFQURfVEFHKTsKLQkJCWJyZWFrOwotCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkJY21kX3BrdC0+Y29udHJvbF9mbGFncyA9Ci0JCQkgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihDRl9PUkRFUkVEX1RBRyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNtZF9wa3QtPmNvbnRyb2xfZmxhZ3MgPQotCQkJICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0ZfU0lNUExFX1RBRyk7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWNtZF9wa3QtPmNvbnRyb2xfZmxhZ3MgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KENGX1NJTVBMRV9UQUcpOwotCX0KKwljbWRfcGt0LT5jb250cm9sX2ZsYWdzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihDRl9TSU1QTEVfVEFHKTsKIAogCS8qIExvYWQgU0NTSSBjb21tYW5kIHBhY2tldC4gKi8KIAltZW1jcHkoY21kX3BrdC0+c2NzaV9jZGIsIGNtZC0+Y21uZCwgY21kLT5jbWRfbGVuKTsKQEAgLTEyNjQsNyArMTI0NCw2IEBACiAJdWludDE2X3QJCWZjcF9jbW5kX2xlbjsKIAlzdHJ1Y3QgZmNwX2NtbmQJCSpmY3BfY21uZDsKIAlkbWFfYWRkcl90CQljcmNfY3R4X2RtYTsKLQljaGFyCQkJdGFnWzJdOwogCiAJY21kID0gR0VUX0NNRF9TUChzcCk7CiAKQEAgLTEzNTYsMjUgKzEzMzUsNyBAQAogCWNtZF9wa3QtPmZjcF9jbW5kX2RzZWdfYWRkcmVzc1sxXSA9IGNwdV90b19sZTMyKAogCSAgICBNU0QoY3JjX2N0eF9kbWEgKyBDUkNfQ09OVEVYVF9GQ1BDTU5EX09GRikpOwogCWZjcF9jbW5kLT50YXNrX21hbmFnZW1lbnQgPSAwOwotCi0JLyoKLQkgKiBVcGRhdGUgdGFnZ2VkIHF1ZXVpbmcgbW9kaWZpZXIgaWYgdXNpbmcgY29tbWFuZCB0YWcgcXVldWluZwotCSAqLwotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCSAgICBmY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgPSBUU0tfSEVBRF9PRl9RVUVVRTsKLQkJICAgIGJyZWFrOwotCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkgICAgZmNwX2NtbmQtPnRhc2tfYXR0cmlidXRlID0gVFNLX09SREVSRUQ7Ci0JCSAgICBicmVhazsKLQkJZGVmYXVsdDoKLQkJICAgIGZjcF9jbW5kLT50YXNrX2F0dHJpYnV0ZSA9IFRTS19TSU1QTEU7Ci0JCSAgICBicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWZjcF9jbW5kLT50YXNrX2F0dHJpYnV0ZSA9IFRTS19TSU1QTEU7Ci0JfQorCWZjcF9jbW5kLT50YXNrX2F0dHJpYnV0ZSA9IFRTS19TSU1QTEU7CiAKIAljbWRfcGt0LT5mY3BfcnNwX2RzZWdfbGVuID0gMDsgLyogTGV0IHJlc3BvbnNlIGNvbWUgaW4gc3RhdHVzIGlvY2IgKi8KIApAQCAtMTQ5NSw3ICsxNDU2LDYgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBHRVRfQ01EX1NQKHNwKTsKIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhID0gc3AtPmZjcG9ydC0+dmhhOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwotCWNoYXIJCXRhZ1syXTsKIAogCS8qIFNldHVwIGRldmljZSBwb2ludGVycy4gKi8KIAlyZXQgPSAwOwpAQCAtMTU3OCwyMiArMTUzOCw3IEBACiAJaW50X3RvX3Njc2lsdW4oY21kLT5kZXZpY2UtPmx1biwgJmNtZF9wa3QtPmx1bik7CiAJaG9zdF90b19mY3Bfc3dhcCgodWludDhfdCAqKSZjbWRfcGt0LT5sdW4sIHNpemVvZihjbWRfcGt0LT5sdW4pKTsKIAotCS8qIFVwZGF0ZSB0YWdnZWQgcXVldWluZyBtb2RpZmllciAtLSBkZWZhdWx0IGlzIFRTS19TSU1QTEUgKDApLiAqLwotCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQljbWRfcGt0LT50YXNrID0gVFNLX0hFQURfT0ZfUVVFVUU7Ci0JCQlicmVhazsKLQkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJCWNtZF9wa3QtPnRhc2sgPSBUU0tfT1JERVJFRDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkgICAgY21kX3BrdC0+dGFzayA9IFRTS19TSU1QTEU7Ci0JCSAgICBicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWNtZF9wa3QtPnRhc2sgPSBUU0tfU0lNUExFOwotCX0KKwljbWRfcGt0LT50YXNrID0gVFNLX1NJTVBMRTsKIAogCS8qIExvYWQgU0NTSSBjb21tYW5kIHBhY2tldC4gKi8KIAltZW1jcHkoY21kX3BrdC0+ZmNwX2NkYiwgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOwpAQCAtMjMxMCw3ICsyMjU1LDYgQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxID0gTlVMTDsKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwID0gTlVMTDsKLQljaGFyIHRhZ1syXTsKIAogCS8qIFNldHVwIGRldmljZSBwb2ludGVycy4gKi8KIAlyZXQgPSAwOwpAQCAtMjQ4OSwyMiArMjQzMyw2IEBACiAJCWVsc2UgaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQogCQkJY3R4LT5mY3BfY21uZC0+YWRkaXRpb25hbF9jZGJfbGVuIHw9IDI7CiAKLQkJLyoKLQkJICogVXBkYXRlIHRhZ2dlZCBxdWV1aW5nIG1vZGlmaWVyIC0tIGRlZmF1bHQgaXMgVFNLX1NJTVBMRSAoMCkuCi0JCSAqLwotCQlpZiAoc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgdGFnKSkgewotCQkJc3dpdGNoICh0YWdbMF0pIHsKLQkJCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQkJY3R4LT5mY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgPQotCQkJCSAgICBUU0tfSEVBRF9PRl9RVUVVRTsKLQkJCQlicmVhazsKLQkJCWNhc2UgT1JERVJFRF9RVUVVRV9UQUc6Ci0JCQkJY3R4LT5mY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgPQotCQkJCSAgICBUU0tfT1JERVJFRDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCiAJCS8qIFBvcHVsYXRlIHRoZSBGQ1BfUFJJTy4gKi8KIAkJaWYgKGhhLT5mbGFncy5mY3BfcHJpb19lbmFibGVkKQogCQkJY3R4LT5mY3BfY21uZC0+dGFza19hdHRyaWJ1dGUgfD0KQEAgLTI1NjUsMjAgKzI0OTMsNiBAQAogCQlob3N0X3RvX2ZjcF9zd2FwKCh1aW50OF90ICopJmNtZF9wa3QtPmx1biwKIAkJICAgIHNpemVvZihjbWRfcGt0LT5sdW4pKTsKIAotCQkvKgotCQkgKiBVcGRhdGUgdGFnZ2VkIHF1ZXVpbmcgbW9kaWZpZXIgLS0gZGVmYXVsdCBpcyBUU0tfU0lNUExFICgwKS4KLQkJICovCi0JCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coY21kLCB0YWcpKSB7Ci0JCQlzd2l0Y2ggKHRhZ1swXSkgewotCQkJY2FzZSBIRUFEX09GX1FVRVVFX1RBRzoKLQkJCQljbWRfcGt0LT50YXNrID0gVFNLX0hFQURfT0ZfUVVFVUU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgotCQkJCWNtZF9wa3QtPnRhc2sgPSBUU0tfT1JERVJFRDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCiAJCS8qIFBvcHVsYXRlIHRoZSBGQ1BfUFJJTy4gKi8KIAkJaWYgKGhhLT5mbGFncy5mY3BfcHJpb19lbmFibGVkKQogCQkJY21kX3BrdC0+dGFzayB8PSBzcC0+ZmNwb3J0LT5mY3BfcHJpbyA8PCAzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21yLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbXIuYwppbmRleCA4MDg2NzU5Li42ZDE5MGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbXIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbXIuYwpAQCAtMzA4Niw3ICszMDg2LDYgQEAKIAlzdHJ1Y3QgY21kX3R5cGVfN19meDAwICpjbWRfcGt0OwogCXN0cnVjdCBjbWRfdHlwZV83X2Z4MDAgbGNtZF9wa3Q7CiAJc3RydWN0IHNjc2lfbHVuIGxsdW47Ci0JY2hhcgkJdGFnWzJdOwogCiAJLyogU2V0dXAgZGV2aWNlIHBvaW50ZXJzLiAqLwogCXJldCA9IDA7CkBAIC0zMTU3LDE4ICszMTU2LDYgQEAKIAlob3N0X3RvX2FkYXAoKHVpbnQ4X3QgKikmbGx1biwgKHVpbnQ4X3QgKikmbGNtZF9wa3QubHVuLAogCSAgICBzaXplb2YobGNtZF9wa3QubHVuKSk7CiAKLQkvKiBVcGRhdGUgdGFnZ2VkIHF1ZXVpbmcgbW9kaWZpZXIgLS0gZGVmYXVsdCBpcyBUU0tfU0lNUExFICgwKS4gKi8KLQlpZiAoc2NzaV9wb3B1bGF0ZV90YWdfbXNnKGNtZCwgdGFnKSkgewotCQlzd2l0Y2ggKHRhZ1swXSkgewotCQljYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgotCQkJbGNtZF9wa3QudGFzayA9IFRTS19IRUFEX09GX1FVRVVFOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1JERVJFRF9RVUVVRV9UQUc6Ci0JCQlsY21kX3BrdC50YXNrID0gVFNLX09SREVSRUQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQogCS8qIExvYWQgU0NTSSBjb21tYW5kIHBhY2tldC4gKi8KIAlob3N0X3RvX2FkYXAoY21kLT5jbW5kLCBsY21kX3BrdC5mY3BfY2RiLCBzaXplb2YobGNtZF9wa3QuZmNwX2NkYikpOwogCWxjbWRfcGt0LmJ5dGVfY291bnQgPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2NzaV9idWZmbGVuKGNtZCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254Mi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254Mi5jCmluZGV4IDI0YTg1MjguLmVkNGQ2YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueDIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbngyLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCXJldHVybjsKIH0KIAotaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogcWxhODA0NF9zZXRfcXNudF9yZWFkeShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhKQogewogCXVpbnQzMl90IHFzbnRfc3RhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IGRiM2RiZDkuLjZiNGQ5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0yMzYsOCArMjM2LDYgQEAKIHN0YXRpYyBpbnQgcWxhMnh4eF9laF9idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqKTsKIHN0YXRpYyBpbnQgcWxhMnh4eF9laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiAKLXN0YXRpYyBpbnQgcWxhMngwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCwgaW50KTsKLXN0YXRpYyBpbnQgcWxhMngwMF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50KTsKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfY2xlYXJfZHJ2X2FjdGl2ZShzdHJ1Y3QgcWxhX2h3X2RhdGEgKik7CiBzdGF0aWMgdm9pZCBxbGEyeDAwX2ZyZWVfZGV2aWNlKHNjc2lfcWxhX2hvc3RfdCAqKTsKIHN0YXRpYyB2b2lkIHFsYTgzeHhfZGlzYWJsZV9sYXNlcihzY3NpX3FsYV9ob3N0X3QgKnZoYSk7CkBAIC0yNTksOCArMjU3LDggQEAKIAkuc2xhdmVfZGVzdHJveQkJPSBxbGEyeHh4X3NsYXZlX2Rlc3Ryb3ksCiAJLnNjYW5fZmluaXNoZWQJCT0gcWxhMnh4eF9zY2FuX2ZpbmlzaGVkLAogCS5zY2FuX3N0YXJ0CQk9IHFsYTJ4eHhfc2Nhbl9zdGFydCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gcWxhMngwMF9jaGFuZ2VfcXVldWVfZGVwdGgsCi0JLmNoYW5nZV9xdWV1ZV90eXBlCT0gcWxhMngwMF9jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkudGhpc19pZAkJPSAtMSwKIAkuY21kX3Blcl9sdW4JCT0gMywKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCkBAIC0yNzAsNiArMjY4LDggQEAKIAkuc2hvc3RfYXR0cnMJCT0gcWxhMngwMF9ob3N0X2F0dHJzLAogCiAJLnN1cHBvcnRlZF9tb2RlCQk9IE1PREVfSU5JVElBVE9SLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKKwkudHJhY2tfcXVldWVfZGVwdGgJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqcWxhMnh4eF90cmFuc3BvcnRfdGVtcGxhdGUgPSBOVUxMOwpAQCAtMTQwNSwxMCArMTQwNSw3IEBACiAJaWYgKElTX1QxMF9QSV9DQVBBQkxFKHZoYS0+aHcpKQogCQlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMHg3KTsKIAotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQotCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCByZXEtPm1heF9xX2RlcHRoKTsKLQllbHNlCi0JCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgcmVxLT5tYXhfcV9kZXB0aCk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcmVxLT5tYXhfcV9kZXB0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MTgsNzYgKzE0MTUsNiBAQAogCXNkZXYtPmhvc3RkYXRhID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgcWxhMngwMF9oYW5kbGVfcXVldWVfZnVsbChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCi17Ci0JZmNfcG9ydF90ICpmY3BvcnQgPSAoc3RydWN0IGZjX3BvcnQgKikgc2Rldi0+aG9zdGRhdGE7Ci0KLQlpZiAoIXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpKQotCQlyZXR1cm47Ci0KLQlxbF9kYmcocWxfZGJnX2lvLCBmY3BvcnQtPnZoYSwgMHgzMDI5LAotCSAgICAiUXVldWUgZGVwdGggYWRqdXN0ZWQtZG93biB0byAlZCBmb3IgbmV4dXM9JWxkOiVkOiVsbHUuXG4iLAotCSAgICBzZGV2LT5xdWV1ZV9kZXB0aCwgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwotfQotCi1zdGF0aWMgdm9pZCBxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCi17Ci0JZmNfcG9ydF90ICpmY3BvcnQgPSBzZGV2LT5ob3N0ZGF0YTsKLQlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhID0gZmNwb3J0LT52aGE7Ci0Jc3RydWN0IHJlcV9xdWUgKnJlcSA9IE5VTEw7Ci0KLQlyZXEgPSB2aGEtPnJlcTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuOwotCi0JaWYgKHJlcS0+bWF4X3FfZGVwdGggPD0gc2Rldi0+cXVldWVfZGVwdGggfHwgcmVxLT5tYXhfcV9kZXB0aCA8IHFkZXB0aCkKLQkJcmV0dXJuOwotCi0JaWYgKHNkZXYtPm9yZGVyZWRfdGFncykKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBxZGVwdGgpOwotCWVsc2UKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX1NJTVBMRV9UQUcsIHFkZXB0aCk7Ci0KLQlxbF9kYmcocWxfZGJnX2lvLCB2aGEsIDB4MzAyYSwKLQkgICAgIlF1ZXVlIGRlcHRoIGFkanVzdGVkLXVwIHRvICVkIGZvciBuZXh1cz0lbGQ6JWQ6JWxsdS5cbiIsCi0JICAgIHNkZXYtPnF1ZXVlX2RlcHRoLCBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc2Rldi0+aWQsIHNkZXYtPmx1bik7Ci19Ci0KLXN0YXRpYyBpbnQKLXFsYTJ4MDBfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKLXsKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXFsYTJ4MDBfaGFuZGxlX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQlxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cChzZGV2LCBxZGVwdGgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwotfQotCi1zdGF0aWMgaW50Ci1xbGEyeDAwX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZ190eXBlKQotewotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXNjc2lfc2V0X3RhZ190eXBlKHNkZXYsIHRhZ190eXBlKTsKLQkJaWYgKHRhZ190eXBlKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnX3R5cGUgPSAwOwotCi0JcmV0dXJuIHRhZ190eXBlOwotfQotCiAvKioKICAqIHFsYTJ4MDBfY29uZmlnX2RtYV9hZGRyZXNzaW5nKCkgLSBDb25maWd1cmUgT1MgRE1BIGFkZHJlc3NpbmcgbWV0aG9kLgogICogQGhhOiBIQSBjb250ZXh0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lvY2IuYwppbmRleCAwOGFiNmRhLi4xNzIyMmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pb2NiLmMKQEAgLTI4MCw3ICsyODAsNiBAQAogCXVpbnQxNl90IHJlcV9jbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50MzJfdCBpbmRleDsKLQljaGFyIHRhZ1syXTsKIAogCS8qIEdldCByZWFsIGx1biBhbmQgYWRhcHRlciAqLwogCWRkYl9lbnRyeSA9IHNyYi0+ZGRiOwpAQCAtMzUyLDE1ICszNTEsNiBAQAogCiAJLyogU2V0IHRhZ2dlZCBxdWV1ZWluZyBjb250cm9sIGZsYWdzICovCiAJY21kX2VudHJ5LT5jb250cm9sX2ZsYWdzIHw9IENGX1NJTVBMRV9UQUc7Ci0JaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhjbWQsIHRhZykpCi0JCXN3aXRjaCAodGFnWzBdKSB7Ci0JCWNhc2UgTVNHX0hFQURfVEFHOgotCQkJY21kX2VudHJ5LT5jb250cm9sX2ZsYWdzIHw9IENGX0hFQURfVEFHOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX09SREVSRURfVEFHOgotCQkJY21kX2VudHJ5LT5jb250cm9sX2ZsYWdzIHw9IENGX09SREVSRURfVEFHOwotCQkJYnJlYWs7Ci0JCX0KIAogCXFsYTR4eHhfYWR2YW5jZV9yZXFfcmluZ19wdHIoaGEpOwogCXFsYTR4eHhfYnVpbGRfc2NzaV9pb2NicyhzcmIsIGNtZF9lbnRyeSwgdG90X2RzZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCAxOTlmY2Y3Li42ZDI1ODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtMTYyLDEyICsxNjIsOCBAQAogc3RhdGljIGludCBxbGE0eHh4X2VoX3RhcmdldF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogc3RhdGljIGludCBxbGE0eHh4X2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIHN0YXRpYyBpbnQgcWxhNHh4eF9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZSk7Ci1zdGF0aWMgaW50IHFsYTR4eHhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyB2b2lkIHFsYTR4eHhfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwogc3RhdGljIHVtb2RlX3QgcWxhNF9hdHRyX2lzX3Zpc2libGUoaW50IHBhcmFtX3R5cGUsIGludCBwYXJhbSk7CiBzdGF0aWMgaW50IHFsYTR4eHhfaG9zdF9yZXNldChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgaW50IHJlc2V0X3R5cGUpOwotc3RhdGljIGludCBxbGE0eHh4X2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsCi0JCQkJICAgICAgaW50IHJlYXNvbik7CiAKIC8qCiAgKiBpU0NTSSBGbGFzaCBEREIgc3lzZnMgZW50cnkgcG9pbnRzCkBAIC0yMDQsMTAgKzIwMCw4IEBACiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHFsYTR4eHhfZWhfaG9zdF9yZXNldCwKIAkuZWhfdGltZWRfb3V0CQk9IHFsYTR4eHhfZWhfY21kX3RpbWVkX291dCwKIAotCS5zbGF2ZV9jb25maWd1cmUJPSBxbGE0eHh4X3NsYXZlX2NvbmZpZ3VyZSwKIAkuc2xhdmVfYWxsb2MJCT0gcWxhNHh4eF9zbGF2ZV9hbGxvYywKLQkuc2xhdmVfZGVzdHJveQkJPSBxbGE0eHh4X3NsYXZlX2Rlc3Ryb3ksCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHFsYTR4eHhfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAogCS50aGlzX2lkCQk9IC0xLAogCS5jbWRfcGVyX2x1bgkJPSAzLApAQCAtMjE4LDYgKzIxMiw3IEBACiAJLnNob3N0X2F0dHJzCQk9IHFsYTR4eHhfaG9zdF9hdHRycywKIAkuaG9zdF9yZXNldAkJPSBxbGE0eHh4X2hvc3RfcmVzZXQsCiAJLnZlbmRvcl9pZAkJPSBTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfUUxPR0lDLAorCS51c2VfYmxrX3RhZ3MJCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IHFsYTR4eHhfaXNjc2lfdHJhbnNwb3J0ID0gewpAQCAtOTA2MCwzNSArOTA1NSwxNCBAQAogCWRkYiA9IHNlc3MtPmRkX2RhdGE7CiAKIAlzZGV2LT5ob3N0ZGF0YSA9IGRkYjsKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKIAogCWlmIChxbDR4bWF4cWRlcHRoICE9IDAgJiYgcWw0eG1heHFkZXB0aCA8PSAweGZmZmZVKQogCQlxdWV1ZV9kZXB0aCA9IHFsNHhtYXhxZGVwdGg7CiAKLQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBxdWV1ZV9kZXB0aCk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcXVldWVfZGVwdGgpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHFsYTR4eHhfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcWxhNHh4eF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIDEpOwotfQotCi1zdGF0aWMgaW50IHFsYTR4eHhfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwKLQkJCQkgICAgICBpbnQgcmVhc29uKQotewotCWlmICghcWw0eHFmdWxsdHJhY2tpbmcpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXJldHVybiBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoLCByZWFzb24pOwotfQotCiAvKioKICAqIHFsYTR4eHhfZGVsX2Zyb21fYWN0aXZlX2FycmF5IC0gcmV0dXJucyBhbiBhY3RpdmUgc3JiCiAgKiBAaGE6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KQEAgLTk4ODgsNiArOTg2Miw5IEBACiB7CiAJaW50IHJldDsKIAorCWlmIChxbDR4cWZ1bGx0cmFja2luZykKKwkJcWxhNHh4eF9kcml2ZXJfdGVtcGxhdGUudHJhY2tfcXVldWVfZGVwdGggPSAxOworCiAJLyogQWxsb2NhdGUgY2FjaGUgZm9yIFNSQnMuICovCiAJc3JiX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJxbGE0eHh4X3NyYnMiLCBzaXplb2Yoc3RydWN0IHNyYiksIDAsCiAJCQkJICAgICAgIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCA3OWM3N2I0Li4xYWQwYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTUyNyw5ICs1MjcsOSBAQAogCSAqCiAJICogMTogbm90aGluZyAobWF0Y2ggY29tcGxldGlvbikKIAkgKgotCSAqIDI6IGxvZyBvcGNvZGUgKyBjb21tYW5kIG9mIGFsbCBjb21tYW5kcworCSAqIDI6IGxvZyBvcGNvZGUgKyBjb21tYW5kIG9mIGFsbCBjb21tYW5kcyArIGNtZCBhZGRyZXNzCiAJICoKLQkgKiAzOiBzYW1lIGFzIDIgcGx1cyBkdW1wIGNtZCBhZGRyZXNzCisJICogMzogc2FtZSBhcyAyCiAJICoKIAkgKiA0OiBzYW1lIGFzIDMgcGx1cyBkdW1wIGV4dHJhIGp1bmsKIAkgKi8KQEAgLTUzNywxMCArNTM3LDggQEAKIAkJbGV2ZWwgPSBTQ1NJX0xPR19MRVZFTChTQ1NJX0xPR19NTFFVRVVFX1NISUZULAogCQkJCSAgICAgICBTQ1NJX0xPR19NTFFVRVVFX0JJVFMpOwogCQlpZiAobGV2ZWwgPiAxKSB7Ci0JCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIlNlbmQ6ICIpOwotCQkJaWYgKGxldmVsID4gMikKLQkJCQlwcmludGsoIjB4JXAgIiwgY21kKTsKLQkJCXByaW50aygiXG4iKTsKKwkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAorCQkJCSAgICAiU2VuZDogc2NtZCAweCVwXG4iLCBjbWQpOwogCQkJc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CiAJCQlpZiAobGV2ZWwgPiAzKSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnVmZmVyID0gMHglcCwgYnVmZmxlbiA9ICVkLCIKQEAgLTU2NSw3ICs1NjMsNyBAQAogCSAqCiAJICogMjogc2FtZSBhcyAxIGJ1dCBmb3IgYWxsIGNvbW1hbmQgY29tcGxldGlvbnMuCiAJICoKLQkgKiAzOiBzYW1lIGFzIDIgcGx1cyBkdW1wIGNtZCBhZGRyZXNzCisJICogMzogc2FtZSBhcyAyCiAJICoKIAkgKiA0OiBzYW1lIGFzIDMgcGx1cyBkdW1wIGV4dHJhIGp1bmsKIAkgKi8KQEAgLTU3NCwzOSArNTcyLDEwIEBACiAJCQkJICAgICAgIFNDU0lfTE9HX01MQ09NUExFVEVfQklUUyk7CiAJCWlmICgoKGxldmVsID4gMCkgJiYgKGNtZC0+cmVzdWx0IHx8IGRpc3Bvc2l0aW9uICE9IFNVQ0NFU1MpKSB8fAogCQkgICAgKGxldmVsID4gMSkpIHsKLQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLCAiRG9uZTogIik7Ci0JCQlpZiAobGV2ZWwgPiAyKQotCQkJCXByaW50aygiMHglcCAiLCBjbWQpOwotCQkJLyoKLQkJCSAqIER1bXAgdHJ1bmNhdGVkIHZhbHVlcywgc28gd2UgdXN1YWxseSBmaXQgd2l0aGluCi0JCQkgKiA4MCBjaGFycy4KLQkJCSAqLwotCQkJc3dpdGNoIChkaXNwb3NpdGlvbikgewotCQkJY2FzZSBTVUNDRVNTOgotCQkJCXByaW50aygiU1VDQ0VTU1xuIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE5FRURTX1JFVFJZOgotCQkJCXByaW50aygiUkVUUllcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRERfVE9fTUxRVUVVRToKLQkJCQlwcmludGsoIk1MUVVFVUVcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGQUlMRUQ6Ci0JCQkJcHJpbnRrKCJGQUlMRURcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FT1VUX0VSUk9SOgotCQkJCS8qIAotCQkJCSAqIElmIGNhbGxlZCB2aWEgc2NzaV90aW1lc19vdXQuCi0JCQkJICovCi0JCQkJcHJpbnRrKCJUSU1FT1VUXG4iKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKCJVTktOT1dOXG4iKTsKLQkJCX0KLQkJCXNjc2lfcHJpbnRfcmVzdWx0KGNtZCk7CisJCQlzY3NpX3ByaW50X3Jlc3VsdChjbWQsICJEb25lOiAiLCBkaXNwb3NpdGlvbik7CiAJCQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKIAkJCWlmIChzdGF0dXNfYnl0ZShjbWQtPnJlc3VsdCkgJiBDSEVDS19DT05ESVRJT04pCi0JCQkJc2NzaV9wcmludF9zZW5zZSgiIiwgY21kKTsKKwkJCQlzY3NpX3ByaW50X3NlbnNlKGNtZCk7CiAJCQlpZiAobGV2ZWwgPiAzKQogCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAogCQkJCQkgICAgInNjc2kgaG9zdCBidXN5ICVkIGZhaWxlZCAlZFxuIiwKQEAgLTYzNCw4NyArNjAzLDYgQEAKIEVYUE9SVF9TWU1CT0woc2NzaV9jbWRfZ2V0X3NlcmlhbCk7CiAKIC8qKgotICogc2NzaV9kaXNwYXRjaF9jb21tYW5kIC0gRGlzcGF0Y2ggYSBjb21tYW5kIHRvIHRoZSBsb3ctbGV2ZWwgZHJpdmVyLgotICogQGNtZDogY29tbWFuZCBibG9jayB3ZSBhcmUgZGlzcGF0Y2hpbmcuCi0gKgotICogUmV0dXJuOiBub256ZXJvIHJldHVybiByZXF1ZXN0IHdhcyByZWplY3RlZCBhbmQgZGV2aWNlJ3MgcXVldWUgbmVlZHMgdG8gYmUKLSAqIHBsdWdnZWQuCi0gKi8KLWludCBzY3NpX2Rpc3BhdGNoX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwotCWludCBydG4gPSAwOwotCi0JYXRvbWljX2luYygmY21kLT5kZXZpY2UtPmlvcmVxdWVzdF9jbnQpOwotCi0JLyogY2hlY2sgaWYgdGhlIGRldmljZSBpcyBzdGlsbCB1c2FibGUgKi8KLQlpZiAodW5saWtlbHkoY21kLT5kZXZpY2UtPnNkZXZfc3RhdGUgPT0gU0RFVl9ERUwpKSB7Ci0JCS8qIGluIFNERVZfREVMIHdlIGVycm9yIGFsbCBjb21tYW5kcy4gRElEX05PX0NPTk5FQ1QKLQkJICogcmV0dXJucyBhbiBpbW1lZGlhdGUgZXJyb3IgdXB3YXJkcywgYW5kIHNpZ25hbHMKLQkJICogdGhhdCB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBwcmVzZW50ICovCi0JCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHNjc2kgbGxkIG1hZGUgdGhpcyBkZXZpY2UgYmxvY2tlZC4gKi8KLQlpZiAodW5saWtlbHkoc2NzaV9kZXZpY2VfYmxvY2tlZChjbWQtPmRldmljZSkpKSB7Ci0JCS8qCi0JCSAqIGluIGJsb2NrZWQgc3RhdGUsIHRoZSBjb21tYW5kIGlzIGp1c3QgcHV0IGJhY2sgb24KLQkJICogdGhlIGRldmljZSBxdWV1ZS4gIFRoZSBzdXNwZW5kIHN0YXRlIGhhcyBhbHJlYWR5Ci0JCSAqIGJsb2NrZWQgdGhlIHF1ZXVlIHNvIGZ1dHVyZSByZXF1ZXN0cyBzaG91bGQgbm90Ci0JCSAqIG9jY3VyIHVudGlsIHRoZSBkZXZpY2UgdHJhbnNpdGlvbnMgb3V0IG9mIHRoZQotCQkgKiBzdXNwZW5kIHN0YXRlLgotCQkgKi8KLQkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKLQkJCSJxdWV1ZWNvbW1hbmQgOiBkZXZpY2UgYmxvY2tlZFxuIikpOwotCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwotCX0KLQotCS8qIFN0b3JlIHRoZSBMVU4gdmFsdWUgaW4gY21uZCwgaWYgbmVlZGVkLiAqLwotCWlmIChjbWQtPmRldmljZS0+bHVuX2luX2NkYikKLQkJY21kLT5jbW5kWzFdID0gKGNtZC0+Y21uZFsxXSAmIDB4MWYpIHwKLQkJCSAgICAgICAoY21kLT5kZXZpY2UtPmx1biA8PCA1ICYgMHhlMCk7Ci0KLQlzY3NpX2xvZ19zZW5kKGNtZCk7Ci0KLQkvKgotCSAqIEJlZm9yZSB3ZSBxdWV1ZSB0aGlzIGNvbW1hbmQsIGNoZWNrIGlmIHRoZSBjb21tYW5kCi0JICogbGVuZ3RoIGV4Y2VlZHMgd2hhdCB0aGUgaG9zdCBhZGFwdGVyIGNhbiBoYW5kbGUuCi0JICovCi0JaWYgKGNtZC0+Y21kX2xlbiA+IGNtZC0+ZGV2aWNlLT5ob3N0LT5tYXhfY21kX2xlbikgewotCQlTQ1NJX0xPR19NTFFVRVVFKDMsIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAotCQkJICAgICAgICJxdWV1ZWNvbW1hbmQgOiBjb21tYW5kIHRvbyBsb25nLiAiCi0JCQkgICAgICAgImNkYl9zaXplPSVkIGhvc3QtPm1heF9jbWRfbGVuPSVkXG4iLAotCQkJICAgICAgIGNtZC0+Y21kX2xlbiwgY21kLT5kZXZpY2UtPmhvc3QtPm1heF9jbWRfbGVuKSk7Ci0JCWNtZC0+cmVzdWx0ID0gKERJRF9BQk9SVCA8PCAxNik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaG9zdC0+c2hvc3Rfc3RhdGUgPT0gU0hPU1RfREVMKSkgewotCQljbWQtPnJlc3VsdCA9IChESURfTk9fQ09OTkVDVCA8PCAxNik7Ci0JCWdvdG8gZG9uZTsKLQotCX0KLQotCXRyYWNlX3Njc2lfZGlzcGF0Y2hfY21kX3N0YXJ0KGNtZCk7Ci0JcnRuID0gaG9zdC0+aG9zdHQtPnF1ZXVlY29tbWFuZChob3N0LCBjbWQpOwotCWlmIChydG4pIHsKLQkJdHJhY2Vfc2NzaV9kaXNwYXRjaF9jbWRfZXJyb3IoY21kLCBydG4pOwotCQlpZiAocnRuICE9IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSAmJgotCQkgICAgcnRuICE9IFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWSkKLQkJCXJ0biA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0KLQkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKLQkJCSJxdWV1ZWNvbW1hbmQgOiByZXF1ZXN0IHJlamVjdGVkXG4iKSk7Ci0JfQotCi0JcmV0dXJuIHJ0bjsKLSBkb25lOgotCWNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogc2NzaV9maW5pc2hfY29tbWFuZCAtIGNsZWFudXAgYW5kIHBhc3MgY29tbWFuZCBiYWNrIHRvIHVwcGVyIGxheWVyCiAgKiBAY21kOiB0aGUgY29tbWFuZAogICoKQEAgLTc3MywzMiArNjYxLDE4IEBACiB9CiAKIC8qKgotICogc2NzaV9hZGp1c3RfcXVldWVfZGVwdGggLSBMZXQgbG93IGxldmVsIGRyaXZlcnMgY2hhbmdlIGEgZGV2aWNlJ3MgcXVldWUgZGVwdGgKKyAqIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoIC0gY2hhbmdlIGEgZGV2aWNlJ3MgcXVldWUgZGVwdGgKICAqIEBzZGV2OiBTQ1NJIERldmljZSBpbiBxdWVzdGlvbgotICogQHRhZ2dlZDogRG8gd2UgdXNlIHRhZ2dlZCBxdWV1ZWluZyAobm9uLTApIG9yIGRvIHdlIHRyZWF0Ci0gKiAgICAgICAgICB0aGlzIGRldmljZSBhcyBhbiB1bnRhZ2dlZCBkZXZpY2UgKDApCi0gKiBAdGFnczogTnVtYmVyIG9mIHRhZ3MgYWxsb3dlZCBpZiB0YWdnZWQgcXVldWVpbmcgZW5hYmxlZCwKLSAqICAgICAgICBvciBudW1iZXIgb2YgY29tbWFuZHMgdGhlIGxvdyBsZXZlbCBkcml2ZXIgY2FuCi0gKiAgICAgICAgcXVldWUgdXAgaW4gbm9uLXRhZ2dlZCBtb2RlIChhcyBwZXIgY21kX3Blcl9sdW4pLgorICogQGRlcHRoOiBudW1iZXIgb2YgY29tbWFuZHMgYWxsb3dlZCB0byBiZSBxdWV1ZWQgdG8gdGhlIGRyaXZlcgogICoKLSAqIFJldHVybnM6CU5vdGhpbmcKLSAqCi0gKiBMb2NrIFN0YXR1czoJTm9uZSBoZWxkIG9uIGVudHJ5Ci0gKgotICogTm90ZXM6CUxvdyBsZXZlbCBkcml2ZXJzIG1heSBjYWxsIHRoaXMgYXQgYW55IHRpbWUgYW5kIHdlIHdpbGwgZG8KLSAqIAkJdGhlIHJpZ2h0IHRoaW5nIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGlzCi0gKiAJCWN1cnJlbnRseSBhY3RpdmUgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGV2ZW4gaGFzIHRoZQotICogCQljb21tYW5kIGJsb2NrcyBidWlsdCB5ZXQuCisgKiBTZXRzIHRoZSBkZXZpY2UgcXVldWUgZGVwdGggYW5kIHJldHVybnMgdGhlIG5ldyB2YWx1ZS4KICAqLwotdm9pZCBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdnZWQsIGludCB0YWdzKQoraW50IHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKgotCSAqIHJlZnVzZSB0byBzZXQgdGFnZ2VkIGRlcHRoIHRvIGFuIHVud29ya2FibGUgc2l6ZQotCSAqLwotCWlmICh0YWdzIDw9IDApCi0JCXJldHVybjsKKwlpZiAoZGVwdGggPD0gMCkKKwkJZ290byBvdXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAKQEAgLTgxMywzNSArNjg3LDE3IEBACiAJICovCiAJaWYgKCFzaG9zdF91c2VfYmxrX21xKHNkZXYtPmhvc3QpICYmICFzZGV2LT5ob3N0LT5icXQpIHsKIAkJaWYgKGJsa19xdWV1ZV90YWdnZWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSkgJiYKLQkJICAgIGJsa19xdWV1ZV9yZXNpemVfdGFncyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCB0YWdzKSAhPSAwKQotCQkJZ290byBvdXQ7CisJCSAgICBibGtfcXVldWVfcmVzaXplX3RhZ3Moc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZGVwdGgpICE9IDApCisJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0Jc2Rldi0+cXVldWVfZGVwdGggPSB0YWdzOwotCXN3aXRjaCAodGFnZ2VkKSB7Ci0JCWNhc2UgMDoKLQkJCXNkZXYtPm9yZGVyZWRfdGFncyA9IDA7Ci0JCQlzZGV2LT5zaW1wbGVfdGFncyA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBNU0dfT1JERVJFRF9UQUc6Ci0JCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAxOwotCQkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVNHX1NJTVBMRV9UQUc6Ci0JCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAwOwotCQkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzZGV2LT5vcmRlcmVkX3RhZ3MgPSAwOwotCQkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAwOwotCQkJc2Rldl9wcmludGsoS0VSTl9XQVJOSU5HLCBzZGV2LAotCQkJCSAgICAic2NzaV9hZGp1c3RfcXVldWVfZGVwdGgsIGJhZCBxdWV1ZSB0eXBlLCAiCi0JCQkJICAgICJkaXNhYmxlZFxuIik7Ci0JfQotIG91dDoKKwlzZGV2LT5xdWV1ZV9kZXB0aCA9IGRlcHRoOworb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKK291dDoKKwlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CiB9Ci1FWFBPUlRfU1lNQk9MKHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKTsKK0VYUE9SVF9TWU1CT0woc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgpOwogCiAvKioKICAqIHNjc2lfdHJhY2tfcXVldWVfZnVsbCAtIHRyYWNrIFFVRVVFX0ZVTEwgZXZlbnRzIHRvIGFkanVzdCBxdWV1ZSBkZXB0aApAQCAtODg1LDE5ICs3NDEsMzIgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKHNkZXYtPmxhc3RfcXVldWVfZnVsbF9kZXB0aCA8IDgpIHsKIAkJLyogRHJvcCBiYWNrIHRvIHVudGFnZ2VkICovCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIDAsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKKwkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgMCk7CisJCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkKLQlpZiAoc2Rldi0+b3JkZXJlZF90YWdzKQotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfT1JERVJFRF9UQUcsIGRlcHRoKTsKLQllbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCBkZXB0aCk7Ci0JcmV0dXJuIGRlcHRoOworCisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoKTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV90cmFja19xdWV1ZV9mdWxsKTsKIAogLyoqCisgKiBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlKCkgLSBDaGFuZ2UgYSBkZXZpY2UncyBxdWV1ZSB0eXBlCisgKiBAc2RldjogICAgIFRoZSBTQ1NJIGRldmljZSB3aG9zZSBxdWV1ZSBkZXB0aCBpcyB0byBjaGFuZ2UKKyAqIEB0YWdfdHlwZTogSWRlbnRpZmllciBmb3IgcXVldWUgdHlwZQorICovCitpbnQgc2NzaV9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWdfdHlwZSkKK3sKKwlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCisJCXJldHVybiAwOworCisJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnX3R5cGUpOworCXJldHVybiB0YWdfdHlwZTsKKworfQorRVhQT1JUX1NZTUJPTChzY3NpX2NoYW5nZV9xdWV1ZV90eXBlKTsKKworLyoqCiAgKiBzY3NpX3ZwZF9pbnF1aXJ5IC0gUmVxdWVzdCBhIGRldmljZSBwcm92aWRlIHVzIHdpdGggYSBWUEQgcGFnZQogICogQHNkZXY6IFRoZSBkZXZpY2UgdG8gYXNrCiAgKiBAYnVmZmVyOiBXaGVyZSB0byBwdXQgdGhlIHJlc3VsdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggMjM4ZTA2Zi4uYWE0YjZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC02Myw4ICs2Myw4IEBACiAjaW5jbHVkZSAic2QuaCIKICNpbmNsdWRlICJzY3NpX2xvZ2dpbmcuaCIKIAotI2RlZmluZSBTQ1NJX0RFQlVHX1ZFUlNJT04gIjEuODQiCi1zdGF0aWMgY29uc3QgY2hhciAqc2NzaV9kZWJ1Z192ZXJzaW9uX2RhdGUgPSAiMjAxNDA3MDYiOworI2RlZmluZSBTQ1NJX0RFQlVHX1ZFUlNJT04gIjEuODUiCitzdGF0aWMgY29uc3QgY2hhciAqc2NzaV9kZWJ1Z192ZXJzaW9uX2RhdGUgPSAiMjAxNDEwMjIiOwogCiAjZGVmaW5lIE1ZX05BTUUgInNjc2lfZGVidWciCiAKQEAgLTc1LDE5ICs3NSwyMiBAQAogI2RlZmluZSBVTlJFQ09WRVJFRF9SRUFEX0VSUiAweDExCiAjZGVmaW5lIFBBUkFNRVRFUl9MSVNUX0xFTkdUSF9FUlIgMHgxYQogI2RlZmluZSBJTlZBTElEX09QQ09ERSAweDIwCi0jZGVmaW5lIEFERFJfT1VUX09GX1JBTkdFIDB4MjEKLSNkZWZpbmUgSU5WQUxJRF9DT01NQU5EX09QQ09ERSAweDIwCisjZGVmaW5lIExCQV9PVVRfT0ZfUkFOR0UgMHgyMQogI2RlZmluZSBJTlZBTElEX0ZJRUxEX0lOX0NEQiAweDI0CiAjZGVmaW5lIElOVkFMSURfRklFTERfSU5fUEFSQU1fTElTVCAweDI2CiAjZGVmaW5lIFVBX1JFU0VUX0FTQyAweDI5CiAjZGVmaW5lIFVBX0NIQU5HRURfQVNDIDB4MmEKKyNkZWZpbmUgSU5TVUZGX1JFU19BU0MgMHg1NQorI2RlZmluZSBJTlNVRkZfUkVTX0FTQ1EgMHgzCiAjZGVmaW5lIFBPV0VSX09OX1JFU0VUX0FTQ1EgMHgwCiAjZGVmaW5lIEJVU19SRVNFVF9BU0NRIDB4MgkvKiBzY3NpIGJ1cyByZXNldCBvY2N1cnJlZCAqLwogI2RlZmluZSBNT0RFX0NIQU5HRURfQVNDUSAweDEJLyogbW9kZSBwYXJhbWV0ZXJzIGNoYW5nZWQgKi8KKyNkZWZpbmUgQ0FQQUNJVFlfQ0hBTkdFRF9BU0NRIDB4OQogI2RlZmluZSBTQVZJTkdfUEFSQU1TX1VOU1VQIDB4MzkKICNkZWZpbmUgVFJBTlNQT1JUX1BST0JMRU0gMHg0YgogI2RlZmluZSBUSFJFU0hPTERfRVhDRUVERUQgMHg1ZAogI2RlZmluZSBMT1dfUE9XRVJfQ09ORF9PTiAweDVlCisjZGVmaW5lIE1JU0NPTVBBUkVfVkVSSUZZX0FTQyAweDFkCiAKIC8qIEFkZGl0aW9uYWwgU2Vuc2UgQ29kZSBRdWFsaWZpZXIgKEFTQ1EpICovCiAjZGVmaW5lIEFDS19OQUtfVE8gMHgzCkBAIC0xMzMsNiArMTM2LDcgQEAKICNkZWZpbmUgREVGX1ZJUlRVQUxfR0IgICAwCiAjZGVmaW5lIERFRl9WUERfVVNFX0hPU1ROTyAxCiAjZGVmaW5lIERFRl9XUklURVNBTUVfTEVOR1RIIDB4RkZGRgorI2RlZmluZSBERUZfU1RSSUNUIDAKICNkZWZpbmUgREVMQVlfT1ZFUlJJRERFTiAtOTk5OQogCiAvKiBiaXQgbWFzayB2YWx1ZXMgZm9yIHNjc2lfZGVidWdfb3B0cyAqLwpAQCAtMTc2LDExICsxODAsMTIgQEAKICNkZWZpbmUgU0RFQlVHX1VBX1BPUiAwCQkvKiBQb3dlciBvbiwgcmVzZXQsIG9yIGJ1cyBkZXZpY2UgcmVzZXQgKi8KICNkZWZpbmUgU0RFQlVHX1VBX0JVU19SRVNFVCAxCiAjZGVmaW5lIFNERUJVR19VQV9NT0RFX0NIQU5HRUQgMgotI2RlZmluZSBTREVCVUdfTlVNX1VBUyAzCisjZGVmaW5lIFNERUJVR19VQV9DQVBBQ0lUWV9DSEFOR0VEIDMKKyNkZWZpbmUgU0RFQlVHX05VTV9VQVMgNAogCiAvKiBmb3IgY2hlY2tfcmVhZGluZXNzKCkgKi8KLSNkZWZpbmUgVUFTX09OTFkgMQotI2RlZmluZSBVQVNfVFVSIDAKKyNkZWZpbmUgVUFTX09OTFkgMQkvKiBjaGVjayBmb3IgVUFzIG9ubHkgKi8KKyNkZWZpbmUgVUFTX1RVUiAwCS8qIGlmIG5vIFVBcyB0aGVuIGNoZWNrIGlmIG1lZGlhIGFjY2VzcyBwb3NzaWJsZSAqLwogCiAvKiB3aGVuIDE9PVNDU0lfREVCVUdfT1BUX01FRElVTV9FUlIsIGEgbWVkaXVtIGVycm9yIGlzIHNpbXVsYXRlZCBhdCB0aGlzCiAgKiBzZWN0b3Igb24gcmVhZCBjb21tYW5kczogKi8KQEAgLTIwNiw2ICsyMTEsMzAxIEBACiAjd2FybmluZyAiRXhwZWN0IERFRl9DTURfUEVSX0xVTiA8PSBTQ1NJX0RFQlVHX0NBTlFVRVVFIgogI2VuZGlmCiAKKy8qIFNDU0kgb3Bjb2RlcyAoZmlyc3QgYnl0ZSBvZiBjZGIpIG1hcHBlZCBvbnRvIHRoZXNlIGluZGV4ZXMgKi8KK2VudW0gc2RlYl9vcGNvZGVfaW5kZXggeworCVNERUJfSV9JTlZBTElEX09QQ09ERSA9CTAsCisJU0RFQl9JX0lOUVVJUlkgPSAxLAorCVNERUJfSV9SRVBPUlRfTFVOUyA9IDIsCisJU0RFQl9JX1JFUVVFU1RfU0VOU0UgPSAzLAorCVNERUJfSV9URVNUX1VOSVRfUkVBRFkgPSA0LAorCVNERUJfSV9NT0RFX1NFTlNFID0gNSwJCS8qIDYsIDEwICovCisJU0RFQl9JX01PREVfU0VMRUNUID0gNiwJCS8qIDYsIDEwICovCisJU0RFQl9JX0xPR19TRU5TRSA9IDcsCisJU0RFQl9JX1JFQURfQ0FQQUNJVFkgPSA4LAkvKiAxMDsgMTYgaXMgaW4gU0FfSU4oMTYpICovCisJU0RFQl9JX1JFQUQgPSA5LAkJLyogNiwgMTAsIDEyLCAxNiAqLworCVNERUJfSV9XUklURSA9IDEwLAkJLyogNiwgMTAsIDEyLCAxNiAqLworCVNERUJfSV9TVEFSVF9TVE9QID0gMTEsCisJU0RFQl9JX1NFUlZfQUNUX0lOID0gMTIsCS8qIDEyLCAxNiAqLworCVNERUJfSV9TRVJWX0FDVF9PVVQgPSAxMywJLyogMTIsIDE2ICovCisJU0RFQl9JX01BSU5UX0lOID0gMTQsCisJU0RFQl9JX01BSU5UX09VVCA9IDE1LAorCVNERUJfSV9WRVJJRlkgPSAxNiwJCS8qIDEwIG9ubHkgKi8KKwlTREVCX0lfVkFSSUFCTEVfTEVOID0gMTcsCisJU0RFQl9JX1JFU0VSVkUgPSAxOCwJCS8qIDYsIDEwICovCisJU0RFQl9JX1JFTEVBU0UgPSAxOSwJCS8qIDYsIDEwICovCisJU0RFQl9JX0FMTE9XX1JFTU9WQUwgPSAyMCwJLyogUFJFVkVOVCBBTExPVyBNRURJVU0gUkVNT1ZBTCAqLworCVNERUJfSV9SRVpFUk9fVU5JVCA9IDIxLAkvKiBSRVdJTkQgaW4gU1NDICovCisJU0RFQl9JX0FUQV9QVCA9IDIyLAkJLyogMTIsIDE2ICovCisJU0RFQl9JX1NFTkRfRElBRyA9IDIzLAorCVNERUJfSV9VTk1BUCA9IDI0LAorCVNERUJfSV9YRFdSSVRFUkVBRCA9IDI1LAkvKiAxMCBvbmx5ICovCisJU0RFQl9JX1dSSVRFX0JVRkZFUiA9IDI2LAorCVNERUJfSV9XUklURV9TQU1FID0gMjcsCQkvKiAxMCwgMTYgKi8KKwlTREVCX0lfU1lOQ19DQUNIRSA9IDI4LAkJLyogMTAgb25seSAqLworCVNERUJfSV9DT01QX1dSSVRFID0gMjksCisJU0RFQl9JX0xBU1RfRUxFTUVOVCA9IDMwLAkvKiBrZWVwIHRoaXMgbGFzdCAqLworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb3Bjb2RlX2luZF9hcnJbMjU2XSA9IHsKKy8qIDB4MDsgMHgwLT4weDFmOiA2IGJ5dGUgY2RicyAqLworCVNERUJfSV9URVNUX1VOSVRfUkVBRFksIFNERUJfSV9SRVpFUk9fVU5JVCwgMCwgU0RFQl9JX1JFUVVFU1RfU0VOU0UsCisJICAgIDAsIDAsIDAsIDAsCisJU0RFQl9JX1JFQUQsIDAsIFNERUJfSV9XUklURSwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCBTREVCX0lfSU5RVUlSWSwgMCwgMCwgU0RFQl9JX01PREVfU0VMRUNULCBTREVCX0lfUkVTRVJWRSwKKwkgICAgU0RFQl9JX1JFTEVBU0UsCisJMCwgMCwgU0RFQl9JX01PREVfU0VOU0UsIFNERUJfSV9TVEFSVF9TVE9QLCAwLCBTREVCX0lfU0VORF9ESUFHLAorCSAgICBTREVCX0lfQUxMT1dfUkVNT1ZBTCwgMCwKKy8qIDB4MjA7IDB4MjAtPjB4M2Y6IDEwIGJ5dGUgY2RicyAqLworCTAsIDAsIDAsIDAsIDAsIFNERUJfSV9SRUFEX0NBUEFDSVRZLCAwLCAwLAorCVNERUJfSV9SRUFELCAwLCBTREVCX0lfV1JJVEUsIDAsIDAsIDAsIDAsIFNERUJfSV9WRVJJRlksCisJMCwgMCwgMCwgMCwgMCwgU0RFQl9JX1NZTkNfQ0FDSEUsIDAsIDAsCisJMCwgMCwgMCwgU0RFQl9JX1dSSVRFX0JVRkZFUiwgMCwgMCwgMCwgMCwKKy8qIDB4NDA7IDB4NDAtPjB4NWY6IDEwIGJ5dGUgY2RicyAqLworCTAsIFNERUJfSV9XUklURV9TQU1FLCBTREVCX0lfVU5NQVAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgU0RFQl9JX0xPR19TRU5TRSwgMCwgMCwKKwkwLCAwLCAwLCBTREVCX0lfWERXUklURVJFQUQsIDAsIFNERUJfSV9NT0RFX1NFTEVDVCwgU0RFQl9JX1JFU0VSVkUsCisJICAgIFNERUJfSV9SRUxFQVNFLAorCTAsIDAsIFNERUJfSV9NT0RFX1NFTlNFLCAwLCAwLCAwLCAwLCAwLAorLyogMHg2MDsgMHg2MC0+MHg3ZCBhcmUgcmVzZXJ2ZWQgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgU0RFQl9JX1ZBUklBQkxFX0xFTiwKKy8qIDB4ODA7IDB4ODAtPjB4OWY6IDE2IGJ5dGUgY2RicyAqLworCTAsIDAsIDAsIDAsIDAsIFNERUJfSV9BVEFfUFQsIDAsIDAsCisJU0RFQl9JX1JFQUQsIFNERUJfSV9DT01QX1dSSVRFLCBTREVCX0lfV1JJVEUsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgU0RFQl9JX1dSSVRFX1NBTUUsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgU0RFQl9JX1NFUlZfQUNUX0lOLCBTREVCX0lfU0VSVl9BQ1RfT1VULAorLyogMHhhMDsgMHhhMC0+MHhiZjogMTIgYnl0ZSBjZGJzICovCisJU0RFQl9JX1JFUE9SVF9MVU5TLCBTREVCX0lfQVRBX1BULCAwLCBTREVCX0lfTUFJTlRfSU4sCisJICAgICBTREVCX0lfTUFJTlRfT1VULCAwLCAwLCAwLAorCVNERUJfSV9SRUFELCBTREVCX0lfU0VSVl9BQ1RfT1VULCBTREVCX0lfV1JJVEUsIFNERUJfSV9TRVJWX0FDVF9JTiwKKwkgICAgIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorLyogMHhjMDsgMHhjMC0+MHhmZjogdmVuZG9yIHNwZWNpZmljICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKK307CisKKyNkZWZpbmUgRl9EX0lOCQkJMQorI2RlZmluZSBGX0RfT1VUCQkJMgorI2RlZmluZSBGX0RfT1VUX01BWUJFCQk0CS8qIFdSSVRFIFNBTUUsIE5ET0IgYml0ICovCisjZGVmaW5lIEZfRF9VTktOCQk4CisjZGVmaW5lIEZfUkxfV0xVTl9PSwkJMHgxMAorI2RlZmluZSBGX1NLSVBfVUEJCTB4MjAKKyNkZWZpbmUgRl9ERUxBWV9PVkVSUgkJMHg0MAorI2RlZmluZSBGX1NBX0xPVwkJMHg4MAkvKiBjZGIgYnl0ZSAxLCBiaXRzIDQgdG8gMCAqLworI2RlZmluZSBGX1NBX0hJR0gJCTB4MTAwCS8qIGFzIHVzZWQgYnkgdmFyaWFibGUgbGVuZ3RoIGNkYnMgKi8KKyNkZWZpbmUgRl9JTlZfT1AJCTB4MjAwCisjZGVmaW5lIEZfRkFLRV9SVwkJMHg0MDAKKyNkZWZpbmUgRl9NX0FDQ0VTUwkJMHg4MDAJLyogbWVkaWEgYWNjZXNzICovCisKKyNkZWZpbmUgRkZfUkVTUE9ORCAoRl9STF9XTFVOX09LIHwgRl9TS0lQX1VBIHwgRl9ERUxBWV9PVkVSUikKKyNkZWZpbmUgRkZfRElSRUNUX0lPIChGX01fQUNDRVNTIHwgRl9GQUtFX1JXKQorI2RlZmluZSBGRl9TQSAoRl9TQV9ISUdIIHwgRl9TQV9MT1cpCisKK3N0cnVjdCBzZGVidWdfZGV2X2luZm87CitzdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3BfcmVwb3J0X2x1bnMoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3JlcXVlc3RzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbGVjdChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3BfbG9nX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZWFkY2FwKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZWFkX2R0MChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3Bfd3JpdGVfZHQwKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9zdGFydF9zdG9wKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZWFkY2FwMTYoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX2dldF9sYmFfc3RhdHVzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yZXBvcnRfdGd0cGdzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF91bm1hcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3BfcnN1cF9vcGNvZGVzKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9yc3VwX3RtZnMoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3dyaXRlX3NhbWVfMTAoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3dyaXRlX3NhbWVfMTYoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworc3RhdGljIGludCByZXNwX3hkd3JpdGVyZWFkXzEwKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKK3N0YXRpYyBpbnQgcmVzcF9jb21wX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKKworc3RydWN0IG9wY29kZV9pbmZvX3QgeworCXU4IG51bV9hdHRhY2hlZDsJLyogMCBpZiB0aGlzIGlzIGl0IChpLmUuIGEgbGVhZik7IHVzZSAweGZmCisJCQkJICogZm9yIHRlcm1pbmF0aW5nIGVsZW1lbnQgKi8KKwl1OCBvcGNvZGU7CQkvKiBpZiBudW1fYXR0YWNoZWQgPiAwLCBwcmVmZXJyZWQgKi8KKwl1MTYgc2E7CQkJLyogc2VydmljZSBhY3Rpb24gKi8KKwl1MzIgZmxhZ3M7CQkvKiBPUi1lZCBzZXQgb2YgU0RFQl9GXyogKi8KKwlpbnQgKCpwZnApKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKKwljb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCAqYXJycDsgIC8qIG51bV9hdHRhY2hlZCBlbGVtZW50cyBvciBOVUxMICovCisJdTggbGVuX21hc2tbMTZdOwkvKiBsZW49bGVuX21hc2tbMF0sIHRoZW4gbWFzayBmb3IgY2RiWzFdLi4uICovCisJCQkJLyogaWdub3JlIGNkYiBieXRlcyBhZnRlciBwb3NpdGlvbiAxNSAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190IG1zZW5zZV9pYXJyWzFdID0geworCXswLCAweDFhLCAwLCBGX0RfSU4sIE5VTEwsIE5VTEwsCisJICAgIHs2LCAgMHhlOCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCBtc2VsZWN0X2lhcnJbMV0gPSB7CisJezAsIDB4MTUsIDAsIEZfRF9PVVQsIE5VTEwsIE5VTEwsCisJICAgIHs2LCAgMHhmMSwgMCwgMCwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCByZWFkX2lhcnJbM10gPSB7CisJezAsIDB4MjgsIDAsIEZfRF9JTiB8IEZGX0RJUkVDVF9JTywgcmVzcF9yZWFkX2R0MCwgTlVMTCwvKiBSRUFEKDEwKSAqLworCSAgICB7MTAsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLAorCSAgICAgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHg4LCAwLCBGX0RfSU4gfCBGRl9ESVJFQ1RfSU8sIHJlc3BfcmVhZF9kdDAsIE5VTEwsIC8qIFJFQUQoNikgKi8KKwkgICAgezYsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweGE4LCAwLCBGX0RfSU4gfCBGRl9ESVJFQ1RfSU8sIHJlc3BfcmVhZF9kdDAsIE5VTEwsLyogUkVBRCgxMikgKi8KKwkgICAgezEyLCAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwKKwkgICAgIDB4YzcsIDAsIDAsIDAsIDB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3Qgd3JpdGVfaWFyclszXSA9IHsKKwl7MCwgMHgyYSwgMCwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF93cml0ZV9kdDAsIE5VTEwsICAgLyogMTAgKi8KKwkgICAgezEwLCAgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgxZiwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwKKwkgICAgIDAsIDAsIDAsIDB9IH0sCisJezAsIDB4YSwgMCwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF93cml0ZV9kdDAsIE5VTEwsICAgIC8qIDYgKi8KKwkgICAgezYsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweGFhLCAwLCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX3dyaXRlX2R0MCwgTlVMTCwgICAvKiAxMiAqLworCSAgICB7MTIsICAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDlmLAorCSAgICAgMHhjNywgMCwgMCwgMCwgMH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCBzYV9pbl9pYXJyWzFdID0geworCXswLCAweDllLCAweDEyLCBGX1NBX0xPVyB8IEZfRF9JTiwgcmVzcF9nZXRfbGJhX3N0YXR1cywgTlVMTCwKKwkgICAgezE2LCAgMHgxMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDB4Yzd9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgdmxfaWFyclsxXSA9IHsJLyogVkFSSUFCTEUgTEVOR1RIICovCisJezAsIDB4N2YsIDB4YiwgRl9TQV9ISUdIIHwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF93cml0ZV9kdDAsCisJICAgIE5VTEwsIHszMiwgIDB4YzcsIDAsIDAsIDAsIDAsIDB4MWYsIDB4MTgsIDB4MCwgMHhiLCAweGZhLAorCQkgICAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmfSB9LAkvKiBXUklURSgzMikgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCBtYWludF9pbl9pYXJyWzJdID0geworCXswLCAweGEzLCAweGMsIEZfU0FfTE9XIHwgRl9EX0lOLCByZXNwX3JzdXBfb3Bjb2RlcywgTlVMTCwKKwkgICAgezEyLCAgMHhjLCAweDg3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAwLAorCSAgICAgMHhjNywgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHhhMywgMHhkLCBGX1NBX0xPVyB8IEZfRF9JTiwgcmVzcF9yc3VwX3RtZnMsIE5VTEwsCisJICAgIHsxMiwgIDB4ZCwgMHg4MCwgMCwgMCwgMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMCwgMHhjNywgMCwgMCwKKwkgICAgIDAsIDB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3Qgd3JpdGVfc2FtZV9pYXJyWzFdID0geworCXswLCAweDkzLCAwLCBGX0RfT1VUX01BWUJFIHwgRkZfRElSRUNUX0lPLCByZXNwX3dyaXRlX3NhbWVfMTYsIE5VTEwsCisJICAgIHsxNiwgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJICAgICAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGM3fSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190IHJlc2VydmVfaWFyclsxXSA9IHsKKwl7MCwgMHgxNiwgMCwgRl9EX09VVCwgTlVMTCwgTlVMTCwJLyogUkVTRVJWRSg2KSAqLworCSAgICB7NiwgIDB4MWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgcmVsZWFzZV9pYXJyWzFdID0geworCXswLCAweDE3LCAwLCBGX0RfT1VULCBOVUxMLCBOVUxMLAkvKiBSRUxFQVNFKDYpICovCisJICAgIHs2LCAgMHgxZiwgMHhmZiwgMCwgMCwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKK307CisKKworLyogVGhpcyBhcnJheSBpcyBhY2Nlc3NlZCB2aWEgU0RFQl9JXyogdmFsdWVzLiBNYWtlIHN1cmUgYWxsIGFyZSBtYXBwZWQsCisgKiBwbHVzIHRoZSB0ZXJtaW5hdGluZyBlbGVtZW50cyBmb3IgbG9naWMgdGhhdCBzY2FucyB0aGlzIHRhYmxlIHN1Y2ggYXMKKyAqIFJFUE9SVCBTVVBQT1JURUQgT1BFUkFUSU9OIENPREVTLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190IG9wY29kZV9pbmZvX2FycltTREVCX0lfTEFTVF9FTEVNRU5UICsgMV0gPSB7CisvKiAwICovCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwKKwkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDEyLCAwLCBGRl9SRVNQT05EIHwgRl9EX0lOLCByZXNwX2lucXVpcnksIE5VTEwsCisJICAgIHs2LCAgMHhlMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHhhMCwgMCwgRkZfUkVTUE9ORCB8IEZfRF9JTiwgcmVzcF9yZXBvcnRfbHVucywgTlVMTCwKKwkgICAgezEyLCAgMHhlMywgMHhmZiwgMCwgMCwgMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMCwgMHhjNywgMCwgMCwKKwkgICAgIDAsIDB9IH0sCisJezAsIDB4MywgMCwgRkZfUkVTUE9ORCB8IEZfRF9JTiwgcmVzcF9yZXF1ZXN0cywgTlVMTCwKKwkgICAgezYsICAweGUxLCAwLCAwLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDAsIDAsIEZfTV9BQ0NFU1MgfCBGX1JMX1dMVU5fT0ssIE5VTEwsIE5VTEwsLyogVEVTVCBVTklUIFJFQURZICovCisJICAgIHs2LCAgMCwgMCwgMCwgMCwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MSwgMHg1YSwgMCwgRl9EX0lOLCByZXNwX21vZGVfc2Vuc2UsIG1zZW5zZV9pYXJyLAorCSAgICB7MTAsICAweGY4LCAweGZmLCAweGZmLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLAorCSAgICAgMH0gfSwKKwl7MSwgMHg1NSwgMCwgRl9EX09VVCwgcmVzcF9tb2RlX3NlbGVjdCwgbXNlbGVjdF9pYXJyLAorCSAgICB7MTAsICAweGYxLCAwLCAwLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDRkLCAwLCBGX0RfSU4sIHJlc3BfbG9nX3NlbnNlLCBOVUxMLAorCSAgICB7MTAsICAweGUzLCAweGZmLCAweGZmLCAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLAorCSAgICAgMCwgMCwgMH0gfSwKKwl7MCwgMHgyNSwgMCwgRl9EX0lOLCByZXNwX3JlYWRjYXAsIE5VTEwsCisJICAgIHsxMCwgIDB4ZTEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDAsIDB4MSwgMHhjNywgMCwgMCwgMCwgMCwKKwkgICAgIDAsIDB9IH0sCisJezMsIDB4ODgsIDAsIEZfRF9JTiB8IEZGX0RJUkVDVF9JTywgcmVzcF9yZWFkX2R0MCwgcmVhZF9pYXJyLAorCSAgICB7MTYsICAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCSAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwgMHhjN30gfSwJCS8qIFJFQUQoMTYpICovCisvKiAxMCAqLworCXszLCAweDhhLCAwLCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX3dyaXRlX2R0MCwgd3JpdGVfaWFyciwKKwkgICAgezE2LCAgMHhmYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OWYsIDB4Yzd9IH0sCQkvKiBXUklURSgxNikgKi8KKwl7MCwgMHgxYiwgMCwgMCwgcmVzcF9zdGFydF9zdG9wLCBOVUxMLAkJLyogU1RBUlQgU1RPUCBVTklUICovCisJICAgIHs2LCAgMHgxLCAwLCAweGYsIDB4ZjcsIDB4YzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezEsIDB4OWUsIDB4MTAsIEZfU0FfTE9XIHwgRl9EX0lOLCByZXNwX3JlYWRjYXAxNiwgc2FfaW5faWFyciwKKwkgICAgezE2LCAgMHgxMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MSwgMHhjN30gfSwJLyogUkVBRCBDQVBBQ0lUWSgxNikgKi8KKwl7MCwgMCwgMCwgRl9JTlZfT1AgfCBGRl9SRVNQT05ELCBOVUxMLCBOVUxMLCAvKiBTQSBPVVQgKi8KKwkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXsyLCAweGEzLCAweGEsIEZfU0FfTE9XIHwgRl9EX0lOLCByZXNwX3JlcG9ydF90Z3RwZ3MsIG1haW50X2luX2lhcnIsCisJICAgIHsxMiwgIDB4ZWEsIDAsIDAsIDAsIDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDB4YzcsIDAsIDAsIDAsCisJICAgICAwfSB9LAorCXswLCAwLCAwLCBGX0lOVl9PUCB8IEZGX1JFU1BPTkQsIE5VTEwsIE5VTEwsIC8qIE1BSU5UIE9VVCAqLworCSAgICB7MCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwgLyogVkVSSUZZICovCisJICAgIHswLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MSwgMHg3ZiwgMHg5LCBGX1NBX0hJR0ggfCBGX0RfSU4gfCBGRl9ESVJFQ1RfSU8sIHJlc3BfcmVhZF9kdDAsCisJICAgIHZsX2lhcnIsIHszMiwgIDB4YzcsIDAsIDAsIDAsIDAsIDB4MWYsIDB4MTgsIDB4MCwgMHg5LCAweGZlLCAwLAorCQkgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmfSB9LC8qIFZBUklBQkxFIExFTkdUSCwgUkVBRCgzMikgKi8KKwl7MSwgMHg1NiwgMCwgRl9EX09VVCwgTlVMTCwgcmVzZXJ2ZV9pYXJyLCAvKiBSRVNFUlZFKDEwKSAqLworCSAgICB7MTAsICAweGZmLCAweGZmLCAweGZmLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLAorCSAgICAgMH0gfSwKKwl7MSwgMHg1NywgMCwgRl9EX09VVCwgTlVMTCwgcmVsZWFzZV9pYXJyLCAvKiBSRUxFQVNFKDEwKSAqLworCSAgICB7MTAsICAweDEzLCAweGZmLCAweGZmLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLAorCSAgICAgMH0gfSwKKy8qIDIwICovCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwgLyogQUxMT1cgUkVNT1ZBTCAqLworCSAgICB7MCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezAsIDB4MSwgMCwgMCwgcmVzcF9zdGFydF9zdG9wLCBOVUxMLCAvKiBSRVdJTkQgPz8gKi8KKwkgICAgezYsICAweDEsIDAsIDAsIDAsIDB4YzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezAsIDAsIDAsIEZfSU5WX09QIHwgRkZfUkVTUE9ORCwgTlVMTCwgTlVMTCwgLyogQVRBX1BUICovCisJICAgIHswLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHgxZCwgRl9EX09VVCwgMCwgTlVMTCwgTlVMTCwJLyogU0VORCBESUFHTk9TVElDICovCisJICAgIHs2LCAgMHhmNywgMCwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHg0MiwgMCwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF91bm1hcCwgTlVMTCwgLyogVU5NQVAgKi8KKwkgICAgezEwLCAgMHgxLCAwLCAwLCAwLCAwLCAweDFmLCAweGZmLCAweGZmLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDUzLCAwLCBGX0RfSU4gfCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX3hkd3JpdGVyZWFkXzEwLAorCSAgICBOVUxMLCB7MTAsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLCAweGZmLCAweGM3LAorCQkgICAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAwLCAwLCBGX0lOVl9PUCB8IEZGX1JFU1BPTkQsIE5VTEwsIE5VTEwsIC8qIFdSSVRFX0JVRkZFUiAqLworCSAgICB7MCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezEsIDB4NDEsIDAsIEZfRF9PVVRfTUFZQkUgfCBGRl9ESVJFQ1RfSU8sIHJlc3Bfd3JpdGVfc2FtZV8xMCwKKwkgICAgd3JpdGVfc2FtZV9pYXJyLCB7MTAsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLAorCQkJICAgICAgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMH0gfSwKKwl7MCwgMHgzNSwgMCwgRl9ERUxBWV9PVkVSUiB8IEZGX0RJUkVDVF9JTywgTlVMTCwgTlVMTCwgLyogU1lOQ19DQUNIRSAqLworCSAgICB7MTAsICAweDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MWYsIDB4ZmYsIDB4ZmYsIDB4YzcsIDAsIDAsCisJICAgICAwLCAwLCAwLCAwfSB9LAorCXswLCAweDg5LCAwLCBGX0RfT1VUIHwgRkZfRElSRUNUX0lPLCByZXNwX2NvbXBfd3JpdGUsIE5VTEwsCisJICAgIHsxNiwgIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDAsCisJICAgICAwLCAweGZmLCAweDFmLCAweGM3fSB9LAkJLyogQ09NUEFSRSBBTkQgV1JJVEUgKi8KKworLyogMzAgKi8KKwl7MHhmZiwgMCwgMCwgMCwgTlVMTCwgTlVMTCwJCS8qIHRlcm1pbmF0aW5nIGVsZW1lbnQgKi8KKwkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorfTsKKworc3RydWN0IHNkZWJ1Z19zY21kX2V4dHJhX3QgeworCWJvb2wgaW5qX3JlY292ZXJlZDsKKwlib29sIGlual90cmFuc3BvcnQ7CisJYm9vbCBpbmpfZGlmOworCWJvb2wgaW5qX2RpeDsKKwlib29sIGlual9zaG9ydDsKK307CisKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19hZGRfaG9zdCA9IERFRl9OVU1fSE9TVDsKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19hdG8gPSBERUZfQVRPOwogc3RhdGljIGludCBzY3NpX2RlYnVnX2RlbGF5ID0gREVGX0RFTEFZOwpAQCAtMjQ1LDYgKzU0NSw4IEBACiBzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX3JlbW92YWJsZSA9IERFRl9SRU1PVkFCTEU7CiBzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX2NsdXN0ZXJpbmc7CiBzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX2hvc3RfbG9jayA9IERFRl9IT1NUX0xPQ0s7CitzdGF0aWMgYm9vbCBzY3NpX2RlYnVnX3N0cmljdCA9IERFRl9TVFJJQ1Q7CitzdGF0aWMgYm9vbCBzZGVidWdfYW55X2luamVjdGluZ19vcHQ7CiAKIHN0YXRpYyBhdG9taWNfdCBzZGVidWdfY21uZF9jb3VudDsKIHN0YXRpYyBhdG9taWNfdCBzZGVidWdfY29tcGxldGlvbnM7CkBAIC0yNzcsMTEgKzU3OSwxMCBAQAogCXVuc2lnbmVkIGludCB0YXJnZXQ7CiAJdTY0IGx1bjsKIAlzdHJ1Y3Qgc2RlYnVnX2hvc3RfaW5mbyAqc2RiZ19ob3N0OwotCXU2NCB3bHVuOwogCXVuc2lnbmVkIGxvbmcgdWFzX2JtWzFdOwogCWF0b21pY190IG51bV9pbl9xOwotCWNoYXIgc3RvcHBlZDsKLQljaGFyIHVzZWQ7CisJY2hhciBzdG9wcGVkOwkJLyogVE9ETzogc2hvdWxkIGJlIGF0b21pYyAqLworCWJvb2wgdXNlZDsKIH07CiAKIHN0cnVjdCBzZGVidWdfaG9zdF9pbmZvIHsKQEAgLTM5NCw2ICs2OTUsNTAgQEAKIAlzcGluX3VubG9jaygmc2RlYnVnX2hvc3RfbGlzdF9sb2NrKTsKIH0KIAorZW51bSBzZGViX2NtZF9kYXRhIHtTREVCX0lOX0RBVEEgPSAwLCBTREVCX0lOX0NEQiA9IDF9OworCisvKiBTZXQgaW5fYml0IHRvIC0xIHRvIGluZGljYXRlIG5vIGJpdCBwb3NpdGlvbiBvZiBpbnZhbGlkIGZpZWxkICovCitzdGF0aWMgdm9pZAorbWtfc2Vuc2VfaW52YWxpZF9mbGQoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBlbnVtIHNkZWJfY21kX2RhdGEgY19kLAorCQkgICAgIGludCBpbl9ieXRlLCBpbnQgaW5fYml0KQoreworCXVuc2lnbmVkIGNoYXIgKnNidWZmOworCXU4IHNrc1s0XTsKKwlpbnQgc2wsIGFzYzsKKworCXNidWZmID0gc2NwLT5zZW5zZV9idWZmZXI7CisJaWYgKCFzYnVmZikgeworCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NwLT5kZXZpY2UsCisJCQkgICAgIiVzOiBzZW5zZV9idWZmZXIgaXMgTlVMTFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWFzYyA9IGNfZCA/IElOVkFMSURfRklFTERfSU5fQ0RCIDogSU5WQUxJRF9GSUVMRF9JTl9QQVJBTV9MSVNUOworCW1lbXNldChzYnVmZiwgMCwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwlzY3NpX2J1aWxkX3NlbnNlX2J1ZmZlcihzY3NpX2RlYnVnX2RzZW5zZSwgc2J1ZmYsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQlhc2MsIDApOworCW1lbXNldChza3MsIDAsIHNpemVvZihza3MpKTsKKwlza3NbMF0gPSAweDgwOworCWlmIChjX2QpCisJCXNrc1swXSB8PSAweDQwOworCWlmIChpbl9iaXQgPj0gMCkgeworCQlza3NbMF0gfD0gMHg4OworCQlza3NbMF0gfD0gMHg3ICYgaW5fYml0OworCX0KKwlwdXRfdW5hbGlnbmVkX2JlMTYoaW5fYnl0ZSwgc2tzICsgMSk7CisJaWYgKHNjc2lfZGVidWdfZHNlbnNlKSB7CisJCXNsID0gc2J1ZmZbN10gKyA4OworCQlzYnVmZls3XSA9IHNsOworCQlzYnVmZltzbF0gPSAweDI7CisJCXNidWZmW3NsICsgMV0gPSAweDY7CisJCW1lbWNweShzYnVmZiArIHNsICsgNCwgc2tzLCAzKTsKKwl9IGVsc2UKKwkJbWVtY3B5KHNidWZmICsgMTUsIHNrcywgMyk7CisJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQorCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNjcC0+ZGV2aWNlLCAiJXM6ICBbc2Vuc2Vfa2V5LGFzYyxhc2NxIgorCQkJICAgICJdOiBbMHg1LDB4JXgsMHgwXSAlYyBieXRlPSVkLCBiaXQ9JWRcbiIsCisJCQkgICAgbXlfbmFtZSwgYXNjLCBjX2QgPyAnQycgOiAnRCcsIGluX2J5dGUsIGluX2JpdCk7Cit9CisKIHN0YXRpYyB2b2lkIG1rX3NlbnNlX2J1ZmZlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIGludCBrZXksIGludCBhc2MsIGludCBhc3EpCiB7CiAJdW5zaWduZWQgY2hhciAqc2J1ZmY7CkBAIC00MTQsNjMgKzc1OSwxMCBAQAogCQkJICAgIG15X25hbWUsIGtleSwgYXNjLCBhc3EpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKHVuc2lnbmVkIGNoYXIgKmNtZCwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKmxiYSwgdW5zaWduZWQgaW50ICpudW0sCi0JCQkJICAgdTMyICplaV9sYmEpCitzdGF0aWMgdm9pZAorbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc3RydWN0IHNjc2lfY21uZCAqc2NwKQogewotCSplaV9sYmEgPSAwOwotCi0Jc3dpdGNoICgqY21kKSB7Ci0JY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgotCQkqbGJhID0gKHU2NCljbWRbMTldIHwgKHU2NCljbWRbMThdIDw8IDggfAotCQkJKHU2NCljbWRbMTddIDw8IDE2IHwgKHU2NCljbWRbMTZdIDw8IDI0IHwKLQkJCSh1NjQpY21kWzE1XSA8PCAzMiB8ICh1NjQpY21kWzE0XSA8PCA0MCB8Ci0JCQkodTY0KWNtZFsxM10gPDwgNDggfCAodTY0KWNtZFsxMl0gPDwgNTY7Ci0KLQkJKmVpX2xiYSA9ICh1MzIpY21kWzIzXSB8ICh1MzIpY21kWzIyXSA8PCA4IHwKLQkJCSh1MzIpY21kWzIxXSA8PCAxNiB8ICh1MzIpY21kWzIwXSA8PCAyNDsKLQotCQkqbnVtID0gKHUzMiljbWRbMzFdIHwgKHUzMiljbWRbMzBdIDw8IDggfCAodTMyKWNtZFsyOV0gPDwgMTYgfAotCQkJKHUzMiljbWRbMjhdIDw8IDI0OwotCQlicmVhazsKLQotCWNhc2UgV1JJVEVfU0FNRV8xNjoKLQljYXNlIFdSSVRFXzE2OgotCWNhc2UgUkVBRF8xNjoKLQkJKmxiYSA9ICh1NjQpY21kWzldIHwgKHU2NCljbWRbOF0gPDwgOCB8Ci0JCQkodTY0KWNtZFs3XSA8PCAxNiB8ICh1NjQpY21kWzZdIDw8IDI0IHwKLQkJCSh1NjQpY21kWzVdIDw8IDMyIHwgKHU2NCljbWRbNF0gPDwgNDAgfAotCQkJKHU2NCljbWRbM10gPDwgNDggfCAodTY0KWNtZFsyXSA8PCA1NjsKLQotCQkqbnVtID0gKHUzMiljbWRbMTNdIHwgKHUzMiljbWRbMTJdIDw8IDggfCAodTMyKWNtZFsxMV0gPDwgMTYgfAotCQkJKHUzMiljbWRbMTBdIDw8IDI0OwotCQlicmVhazsKLQljYXNlIFdSSVRFXzEyOgotCWNhc2UgUkVBRF8xMjoKLQkJKmxiYSA9ICh1MzIpY21kWzVdIHwgKHUzMiljbWRbNF0gPDwgOCB8ICh1MzIpY21kWzNdIDw8IDE2IHwKLQkJCSh1MzIpY21kWzJdIDw8IDI0OwotCi0JCSpudW0gPSAodTMyKWNtZFs5XSB8ICh1MzIpY21kWzhdIDw8IDggfCAodTMyKWNtZFs3XSA8PCAxNiB8Ci0JCQkodTMyKWNtZFs2XSA8PCAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBXUklURV9TQU1FOgotCWNhc2UgV1JJVEVfMTA6Ci0JY2FzZSBSRUFEXzEwOgotCWNhc2UgWERXUklURVJFQURfMTA6Ci0JCSpsYmEgPSAodTMyKWNtZFs1XSB8ICh1MzIpY21kWzRdIDw8IDggfAkodTMyKWNtZFszXSA8PCAxNiB8Ci0JCQkodTMyKWNtZFsyXSA8PCAyNDsKLQotCQkqbnVtID0gKHUzMiljbWRbOF0gfCAodTMyKWNtZFs3XSA8PCA4OwotCQlicmVhazsKLQljYXNlIFdSSVRFXzY6Ci0JY2FzZSBSRUFEXzY6Ci0JCSpsYmEgPSAodTMyKWNtZFszXSB8ICh1MzIpY21kWzJdIDw8IDggfAotCQkJKHUzMikoY21kWzFdICYgMHgxZikgPDwgMTY7Ci0JCSpudW0gPSAoMCA9PSBjbWRbNF0pID8gMjU2IDogY21kWzRdOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX09QQ09ERSwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKQEAgLTUyMCw2ICs4MTIsMTEgQEAKIAkJCWlmIChkZWJ1ZykKIAkJCQljcCA9ICJtb2RlIHBhcmFtZXRlcnMgY2hhbmdlZCI7CiAJCQlicmVhazsKKwkJY2FzZSBTREVCVUdfVUFfQ0FQQUNJVFlfQ0hBTkdFRDoKKwkJCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgVU5JVF9BVFRFTlRJT04sCisJCQkJCVVBX0NIQU5HRURfQVNDLCBDQVBBQ0lUWV9DSEFOR0VEX0FTQ1EpOworCQkJaWYgKGRlYnVnKQorCQkJCWNwID0gImNhcGFjaXR5IGRhdGEgY2hhbmdlZCI7CiAJCWRlZmF1bHQ6CiAJCQlwcl93YXJuKCIlczogdW5leHBlY3RlZCB1bml0IGF0dGVudGlvbiBjb2RlPSVkXG4iLAogCQkJCV9fZnVuY19fLCBrKTsKQEAgLTkyNCwxOSArMTIyMSwyMCBAQAogI2RlZmluZSBTREVCVUdfTE9OR19JTlFfU1ogOTYKICNkZWZpbmUgU0RFQlVHX01BWF9JTlFfQVJSX1NaIDU4NAogCi1zdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIGludCB0YXJnZXQsCi0JCQlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQogewogCXVuc2lnbmVkIGNoYXIgcHFfcGR0OwogCXVuc2lnbmVkIGNoYXIgKiBhcnI7CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCWludCBhbGxvY19sZW4sIG4sIHJldDsKKwlib29sIGhhdmVfd2x1bjsKIAogCWFsbG9jX2xlbiA9IChjbWRbM10gPDwgOCkgKyBjbWRbNF07CiAJYXJyID0ga3phbGxvYyhTREVCVUdfTUFYX0lOUV9BUlJfU1osIEdGUF9BVE9NSUMpOwogCWlmICghIGFycikKIAkJcmV0dXJuIERJRF9SRVFVRVVFIDw8IDE2OwotCWlmIChkZXZpcC0+d2x1bikKKwloYXZlX3dsdW4gPSAoc2NwLT5kZXZpY2UtPmx1biA9PSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMpOworCWlmIChoYXZlX3dsdW4pCiAJCXBxX3BkdCA9IDB4MWU7CS8qIHByZXNlbnQsIHdsdW4gKi8KIAllbHNlIGlmIChzY3NpX2RlYnVnX25vX2x1bl8wICYmICgwID09IGRldmlwLT5sdW4pKQogCQlwcV9wZHQgPSAweDdmOwkvKiBub3QgcHJlc2VudCwgbm8gZGV2aWNlIHR5cGUgKi8KQEAgLTk0NCw4ICsxMjQyLDcgQEAKIAkJcHFfcGR0ID0gKHNjc2lfZGVidWdfcHR5cGUgJiAweDFmKTsKIAlhcnJbMF0gPSBwcV9wZHQ7CiAJaWYgKDB4MiAmIGNtZFsxXSkgeyAgLyogQ01ERFQgYml0IHNldCAqLwotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLAotCQkJICAgICAgIAkwKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgMSwgMSk7CiAJCWtmcmVlKGFycik7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0gZWxzZSBpZiAoMHgxICYgY21kWzFdKSB7ICAvKiBFVlBEIGJpdCBzZXQgKi8KQEAgLTk1Nyw3ICsxMjU0LDcgQEAKIAkJICAgIChkZXZpcC0+Y2hhbm5lbCAmIDB4N2YpOwogCQlpZiAoMCA9PSBzY3NpX2RlYnVnX3ZwZF91c2VfaG9zdG5vKQogCQkJaG9zdF9ubyA9IDA7Ci0JCWx1X2lkX251bSA9IGRldmlwLT53bHVuID8gLTEgOiAoKChob3N0X25vICsgMSkgKiAyMDAwKSArCisJCWx1X2lkX251bSA9IGhhdmVfd2x1biA/IC0xIDogKCgoaG9zdF9ubyArIDEpICogMjAwMCkgKwogCQkJICAgIChkZXZpcC0+dGFyZ2V0ICogMTAwMCkgKyBkZXZpcC0+bHVuKTsKIAkJdGFyZ2V0X2Rldl9pZCA9ICgoaG9zdF9ubyArIDEpICogMjAwMCkgKwogCQkJCSAoZGV2aXAtPnRhcmdldCAqIDEwMDApIC0gMzsKQEAgLTEwMjksOSArMTMyNiw3IEBACiAJCQlhcnJbMV0gPSBjbWRbMl07ICAgICAgICAvKnNhbml0eSAqLwogCQkJYXJyWzNdID0gaW5xdWlyeV9ldnBkX2IyKCZhcnJbNF0pOwogCQl9IGVsc2UgewotCQkJLyogSWxsZWdhbCByZXF1ZXN0LCBpbnZhbGlkIGZpZWxkIGluIGNkYiAqLwotCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAyLCAtMSk7CiAJCQlrZnJlZShhcnIpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KQEAgLTEwNzcsMTggKzEzNzIsMjAgQEAKIAl1bnNpZ25lZCBjaGFyICogc2J1ZmY7CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07Ci0JaW50IHdhbnRfZHNlbnNlOworCWJvb2wgZHNlbnNlLCB3YW50X2RzZW5zZTsKIAlpbnQgbGVuID0gMTg7CiAKIAltZW1zZXQoYXJyLCAwLCBzaXplb2YoYXJyKSk7Ci0Jd2FudF9kc2Vuc2UgPSAhIShjbWRbMV0gJiAxKSB8fCBzY3NpX2RlYnVnX2RzZW5zZTsKKwlkc2Vuc2UgPSAhIShjbWRbMV0gJiAxKTsKKwl3YW50X2RzZW5zZSA9IGRzZW5zZSB8fCBzY3NpX2RlYnVnX2RzZW5zZTsKIAlzYnVmZiA9IHNjcC0+c2Vuc2VfYnVmZmVyOwogCWlmICgoaWVjX21fcGdbMl0gJiAweDQpICYmICg2ID09IChpZWNfbV9wZ1szXSAmIDB4ZikpKSB7Ci0JCWlmICh3YW50X2RzZW5zZSkgeworCQlpZiAoZHNlbnNlKSB7CiAJCQlhcnJbMF0gPSAweDcyOwogCQkJYXJyWzFdID0gMHgwOwkJLyogTk9fU0VOU0UgaW4gc2Vuc2Vfa2V5ICovCiAJCQlhcnJbMl0gPSBUSFJFU0hPTERfRVhDRUVERUQ7CiAJCQlhcnJbM10gPSAweGZmOwkJLyogVEVTVCBzZXQgYW5kIE1SSUU9PTYgKi8KKwkJCWxlbiA9IDg7CiAJCX0gZWxzZSB7CiAJCQlhcnJbMF0gPSAweDcwOwogCQkJYXJyWzJdID0gMHgwOwkJLyogTk9fU0VOU0UgaW4gc2Vuc2Vfa2V5ICovCkBAIC0xMDk4LDE1ICsxMzk1LDM0IEBACiAJCX0KIAl9IGVsc2UgewogCQltZW1jcHkoYXJyLCBzYnVmZiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQkJaWYgKChjbWRbMV0gJiAxKSAmJiAoISBzY3NpX2RlYnVnX2RzZW5zZSkpIHsKLQkJCS8qIERFU0MgYml0IHNldCBhbmQgc2Vuc2VfYnVmZiBpbiBmaXhlZCBmb3JtYXQgKi8KLQkJCW1lbXNldChhcnIsIDAsIHNpemVvZihhcnIpKTsKKwkJaWYgKGFyclswXSA+PSAweDcwICYmIGRzZW5zZSA9PSBzY3NpX2RlYnVnX2RzZW5zZSkKKwkJCTsJLyogaGF2ZSBzZW5zZSBhbmQgZm9ybWF0cyBtYXRjaCAqLworCQllbHNlIGlmIChhcnJbMF0gPD0gMHg3MCkgeworCQkJaWYgKGRzZW5zZSkgeworCQkJCW1lbXNldChhcnIsIDAsIDgpOworCQkJCWFyclswXSA9IDB4NzI7CisJCQkJbGVuID0gODsKKwkJCX0gZWxzZSB7CisJCQkJbWVtc2V0KGFyciwgMCwgMTgpOworCQkJCWFyclswXSA9IDB4NzA7CisJCQkJYXJyWzddID0gMHhhOworCQkJfQorCQl9IGVsc2UgaWYgKGRzZW5zZSkgeworCQkJbWVtc2V0KGFyciwgMCwgOCk7CiAJCQlhcnJbMF0gPSAweDcyOwogCQkJYXJyWzFdID0gc2J1ZmZbMl07ICAgICAvKiBzZW5zZSBrZXkgKi8KIAkJCWFyclsyXSA9IHNidWZmWzEyXTsgICAgLyogYXNjICovCiAJCQlhcnJbM10gPSBzYnVmZlsxM107ICAgIC8qIGFzY3EgKi8KIAkJCWxlbiA9IDg7CisJCX0gZWxzZSB7CisJCQltZW1zZXQoYXJyLCAwLCAxOCk7CisJCQlhcnJbMF0gPSAweDcwOworCQkJYXJyWzJdID0gc2J1ZmZbMV07CisJCQlhcnJbN10gPSAweGE7CisJCQlhcnJbMTJdID0gc2J1ZmZbMV07CisJCQlhcnJbMTNdID0gc2J1ZmZbM107CiAJCX0KKwogCX0KIAlta19zZW5zZV9idWZmZXIoc2NwLCAwLCBOT19BRERJVElPTkFMX1NFTlNFLCAwKTsKIAlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsIGxlbik7CkBAIC0xMTE2LDE1ICsxNDMyLDExIEBACiAJCQkgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCiB7CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwotCWludCBwb3dlcl9jb25kLCBlcnJzdHMsIHN0YXJ0OworCWludCBwb3dlcl9jb25kLCBzdGFydDsKIAotCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhzY3AsIFVBU19PTkxZLCBkZXZpcCk7Ci0JaWYgKGVycnN0cykKLQkJcmV0dXJuIGVycnN0czsKIAlwb3dlcl9jb25kID0gKGNtZFs0XSAmIDB4ZjApID4+IDQ7CiAJaWYgKHBvd2VyX2NvbmQpIHsKLQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwKLQkJCSAgICAgICAJMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDQsIDcpOwogCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAl9CiAJc3RhcnQgPSBjbWRbNF0gJiAxOwpAQCAtMTE0OCwxMSArMTQ2MCw3IEBACiB7CiAJdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX1JFQURDQVBfQVJSX1NaXTsKIAl1bnNpZ25lZCBpbnQgY2FwYWM7Ci0JaW50IGVycnN0czsKIAotCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhzY3AsIFVBU19PTkxZLCBkZXZpcCk7Ci0JaWYgKGVycnN0cykKLQkJcmV0dXJuIGVycnN0czsKIAkvKiBmb2xsb3dpbmcganVzdCBpbiBjYXNlIHZpcnR1YWxfZ2IgY2hhbmdlZCAqLwogCXNkZWJ1Z19jYXBhY2l0eSA9IGdldF9zZGVidWdfY2FwYWNpdHkoKTsKIAltZW1zZXQoYXJyLCAwLCBTREVCVUdfUkVBRENBUF9BUlJfU1opOwpAQCAtMTE4MCwxMSArMTQ4OCw4IEBACiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NERUJVR19SRUFEQ0FQMTZfQVJSX1NaXTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgY2FwYWM7Ci0JaW50IGVycnN0cywgaywgYWxsb2NfbGVuOworCWludCBrLCBhbGxvY19sZW47CiAKLQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCBVQVNfT05MWSwgZGV2aXApOwotCWlmIChlcnJzdHMpCi0JCXJldHVybiBlcnJzdHM7CiAJYWxsb2NfbGVuID0gKChjbWRbMTBdIDw8IDI0KSArIChjbWRbMTFdIDw8IDE2KSArIChjbWRbMTJdIDw8IDgpCiAJCSAgICAgKyBjbWRbMTNdKTsKIAkvKiBmb2xsb3dpbmcganVzdCBpbiBjYXNlIHZpcnR1YWxfZ2IgY2hhbmdlZCAqLwpAQCAtMTMwMCw2ICsxNjA1LDE4NCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQKK3Jlc3BfcnN1cF9vcGNvZGVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCit7CisJYm9vbCByY3RkOworCXU4IHJlcG9ydGluZ19vcHRzLCByZXFfb3Bjb2RlLCBzZGViX2ksIHN1cHA7CisJdTE2IHJlcV9zYSwgdTsKKwl1MzIgYWxsb2NfbGVuLCBhX2xlbjsKKwlpbnQgaywgb2Zmc2V0LCBsZW4sIGVycnN0cywgY291bnQsIGJ1bXAsIG5hOworCWNvbnN0IHN0cnVjdCBvcGNvZGVfaW5mb190ICpvaXA7CisJY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgKnJfb2lwOworCXU4ICphcnI7CisJdTggKmNtZCA9IHNjcC0+Y21uZDsKKworCXJjdGQgPSAhIShjbWRbMl0gJiAweDgwKTsKKwlyZXBvcnRpbmdfb3B0cyA9IGNtZFsyXSAmIDB4NzsKKwlyZXFfb3Bjb2RlID0gY21kWzNdOworCXJlcV9zYSA9IGdldF91bmFsaWduZWRfYmUxNihjbWQgKyA0KTsKKwlhbGxvY19sZW4gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgNik7CisJaWYgKGFsbG9jX2xlbiA8IDQgJiYgYWxsb2NfbGVuID4gMHhmZmZmKSB7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDYsIC0xKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCWlmIChhbGxvY19sZW4gPiA4MTkyKQorCQlhX2xlbiA9IDgxOTI7CisJZWxzZQorCQlhX2xlbiA9IGFsbG9jX2xlbjsKKwlhcnIgPSBremFsbG9jKChhX2xlbiA8IDI1NikgPyAzMjAgOiBhX2xlbiArIDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBhcnIpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlNVRkZfUkVTX0FTQywKKwkJCQlJTlNVRkZfUkVTX0FTQ1EpOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJc3dpdGNoIChyZXBvcnRpbmdfb3B0cykgeworCWNhc2UgMDoJLyogYWxsIGNvbW1hbmRzICovCisJCS8qIGNvdW50IG51bWJlciBvZiBjb21tYW5kcyAqLworCQlmb3IgKGNvdW50ID0gMCwgb2lwID0gb3Bjb2RlX2luZm9fYXJyOworCQkgICAgIG9pcC0+bnVtX2F0dGFjaGVkICE9IDB4ZmY7ICsrb2lwKSB7CisJCQlpZiAoRl9JTlZfT1AgJiBvaXAtPmZsYWdzKQorCQkJCWNvbnRpbnVlOworCQkJY291bnQgKz0gKG9pcC0+bnVtX2F0dGFjaGVkICsgMSk7CisJCX0KKwkJYnVtcCA9IHJjdGQgPyAyMCA6IDg7CisJCXB1dF91bmFsaWduZWRfYmUzMihjb3VudCAqIGJ1bXAsIGFycik7CisJCWZvciAob2Zmc2V0ID0gNCwgb2lwID0gb3Bjb2RlX2luZm9fYXJyOworCQkgICAgIG9pcC0+bnVtX2F0dGFjaGVkICE9IDB4ZmYgJiYgb2Zmc2V0IDwgYV9sZW47ICsrb2lwKSB7CisJCQlpZiAoRl9JTlZfT1AgJiBvaXAtPmZsYWdzKQorCQkJCWNvbnRpbnVlOworCQkJbmEgPSBvaXAtPm51bV9hdHRhY2hlZDsKKwkJCWFycltvZmZzZXRdID0gb2lwLT5vcGNvZGU7CisJCQlwdXRfdW5hbGlnbmVkX2JlMTYob2lwLT5zYSwgYXJyICsgb2Zmc2V0ICsgMik7CisJCQlpZiAocmN0ZCkKKwkJCQlhcnJbb2Zmc2V0ICsgNV0gfD0gMHgyOworCQkJaWYgKEZGX1NBICYgb2lwLT5mbGFncykKKwkJCQlhcnJbb2Zmc2V0ICsgNV0gfD0gMHgxOworCQkJcHV0X3VuYWxpZ25lZF9iZTE2KG9pcC0+bGVuX21hc2tbMF0sIGFyciArIG9mZnNldCArIDYpOworCQkJaWYgKHJjdGQpCisJCQkJcHV0X3VuYWxpZ25lZF9iZTE2KDB4YSwgYXJyICsgb2Zmc2V0ICsgOCk7CisJCQlyX29pcCA9IG9pcDsKKwkJCWZvciAoayA9IDAsIG9pcCA9IG9pcC0+YXJycDsgayA8IG5hOyArK2ssICsrb2lwKSB7CisJCQkJaWYgKEZfSU5WX09QICYgb2lwLT5mbGFncykKKwkJCQkJY29udGludWU7CisJCQkJb2Zmc2V0ICs9IGJ1bXA7CisJCQkJYXJyW29mZnNldF0gPSBvaXAtPm9wY29kZTsKKwkJCQlwdXRfdW5hbGlnbmVkX2JlMTYob2lwLT5zYSwgYXJyICsgb2Zmc2V0ICsgMik7CisJCQkJaWYgKHJjdGQpCisJCQkJCWFycltvZmZzZXQgKyA1XSB8PSAweDI7CisJCQkJaWYgKEZGX1NBICYgb2lwLT5mbGFncykKKwkJCQkJYXJyW29mZnNldCArIDVdIHw9IDB4MTsKKwkJCQlwdXRfdW5hbGlnbmVkX2JlMTYob2lwLT5sZW5fbWFza1swXSwKKwkJCQkJCSAgIGFyciArIG9mZnNldCArIDYpOworCQkJCWlmIChyY3RkKQorCQkJCQlwdXRfdW5hbGlnbmVkX2JlMTYoMHhhLAorCQkJCQkJCSAgIGFyciArIG9mZnNldCArIDgpOworCQkJfQorCQkJb2lwID0gcl9vaXA7CisJCQlvZmZzZXQgKz0gYnVtcDsKKwkJfQorCQlicmVhazsKKwljYXNlIDE6CS8qIG9uZSBjb21tYW5kOiBvcGNvZGUgb25seSAqLworCWNhc2UgMjoJLyogb25lIGNvbW1hbmQ6IG9wY29kZSBwbHVzIHNlcnZpY2UgYWN0aW9uICovCisJY2FzZSAzOgkvKiBvbmUgY29tbWFuZDogaWYgc2E9PTAgdGhlbiBvcGNvZGUgb25seSBlbHNlIG9wY29kZStzYSAqLworCQlzZGViX2kgPSBvcGNvZGVfaW5kX2FycltyZXFfb3Bjb2RlXTsKKwkJb2lwID0gJm9wY29kZV9pbmZvX2FycltzZGViX2ldOworCQlpZiAoRl9JTlZfT1AgJiBvaXAtPmZsYWdzKSB7CisJCQlzdXBwID0gMTsKKwkJCW9mZnNldCA9IDQ7CisJCX0gZWxzZSB7CisJCQlpZiAoMSA9PSByZXBvcnRpbmdfb3B0cykgeworCQkJCWlmIChGRl9TQSAmIG9pcC0+ZmxhZ3MpIHsKKwkJCQkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwKKwkJCQkJCQkgICAgIDIsIDIpOworCQkJCQlrZnJlZShhcnIpOworCQkJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJCQl9CisJCQkJcmVxX3NhID0gMDsKKwkJCX0gZWxzZSBpZiAoMiA9PSByZXBvcnRpbmdfb3B0cyAmJgorCQkJCSAgIDAgPT0gKEZGX1NBICYgb2lwLT5mbGFncykpIHsKKwkJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA0LCAtMSk7CisJCQkJa2ZyZWUoYXJyKTsJLyogcG9pbnQgYXQgcmVxdWVzdGVkIHNhICovCisJCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCQl9CisJCQlpZiAoMCA9PSAoRkZfU0EgJiBvaXAtPmZsYWdzKSAmJgorCQkJICAgIHJlcV9vcGNvZGUgPT0gb2lwLT5vcGNvZGUpCisJCQkJc3VwcCA9IDM7CisJCQllbHNlIGlmICgwID09IChGRl9TQSAmIG9pcC0+ZmxhZ3MpKSB7CisJCQkJbmEgPSBvaXAtPm51bV9hdHRhY2hlZDsKKwkJCQlmb3IgKGsgPSAwLCBvaXAgPSBvaXAtPmFycnA7IGsgPCBuYTsKKwkJCQkgICAgICsraywgKytvaXApIHsKKwkJCQkJaWYgKHJlcV9vcGNvZGUgPT0gb2lwLT5vcGNvZGUpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc3VwcCA9IChrID49IG5hKSA/IDEgOiAzOworCQkJfSBlbHNlIGlmIChyZXFfc2EgIT0gb2lwLT5zYSkgeworCQkJCW5hID0gb2lwLT5udW1fYXR0YWNoZWQ7CisJCQkJZm9yIChrID0gMCwgb2lwID0gb2lwLT5hcnJwOyBrIDwgbmE7CisJCQkJICAgICArK2ssICsrb2lwKSB7CisJCQkJCWlmIChyZXFfc2EgPT0gb2lwLT5zYSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzdXBwID0gKGsgPj0gbmEpID8gMSA6IDM7CisJCQl9IGVsc2UKKwkJCQlzdXBwID0gMzsKKwkJCWlmICgzID09IHN1cHApIHsKKwkJCQl1ID0gb2lwLT5sZW5fbWFza1swXTsKKwkJCQlwdXRfdW5hbGlnbmVkX2JlMTYodSwgYXJyICsgMik7CisJCQkJYXJyWzRdID0gb2lwLT5vcGNvZGU7CisJCQkJZm9yIChrID0gMTsgayA8IHU7ICsraykKKwkJCQkJYXJyWzQgKyBrXSA9IChrIDwgMTYpID8KKwkJCQkJCSBvaXAtPmxlbl9tYXNrW2tdIDogMHhmZjsKKwkJCQlvZmZzZXQgPSA0ICsgdTsKKwkJCX0gZWxzZQorCQkJCW9mZnNldCA9IDQ7CisJCX0KKwkJYXJyWzFdID0gKHJjdGQgPyAweDgwIDogMCkgfCBzdXBwOworCQlpZiAocmN0ZCkgeworCQkJcHV0X3VuYWxpZ25lZF9iZTE2KDB4YSwgYXJyICsgb2Zmc2V0KTsKKwkJCW9mZnNldCArPSAxMjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAyLCAyKTsKKwkJa2ZyZWUoYXJyKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCW9mZnNldCA9IChvZmZzZXQgPCBhX2xlbikgPyBvZmZzZXQgOiBhX2xlbjsKKwlsZW4gPSAob2Zmc2V0IDwgYWxsb2NfbGVuKSA/IG9mZnNldCA6IGFsbG9jX2xlbjsKKwllcnJzdHMgPSBmaWxsX2Zyb21fZGV2X2J1ZmZlcihzY3AsIGFyciwgbGVuKTsKKwlrZnJlZShhcnIpOworCXJldHVybiBlcnJzdHM7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc3BfcnN1cF90bWZzKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCit7CisJYm9vbCByZXBkOworCXUzMiBhbGxvY19sZW4sIGxlbjsKKwl1OCBhcnJbMTZdOworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisKKwltZW1zZXQoYXJyLCAwLCBzaXplb2YoYXJyKSk7CisJcmVwZCA9ICEhKGNtZFsyXSAmIDB4ODApOworCWFsbG9jX2xlbiA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyA2KTsKKwlpZiAoYWxsb2NfbGVuIDwgNCkgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA2LCAtMSk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlhcnJbMF0gPSAweGM4OwkJLyogQVRTIHwgQVRTUyB8IExVUlMgKi8KKwlhcnJbMV0gPSAweDE7CQkvKiBJVE5SUyAqLworCWlmIChyZXBkKSB7CisJCWFyclszXSA9IDB4YzsKKwkJbGVuID0gMTY7CisJfSBlbHNlCisJCWxlbiA9IDQ7CisKKwlsZW4gPSAobGVuIDwgYWxsb2NfbGVuKSA/IGxlbiA6IGFsbG9jX2xlbjsKKwlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsIGxlbik7Cit9CisKIC8qIDw8Rm9sbG93aW5nIG1vZGUgcGFnZSBpbmZvIGNvcGllZCBmcm9tIFNUMzE4NDUxTFc+PiAqLwogCiBzdGF0aWMgaW50IHJlc3BfZXJyX3JlY292X3BnKHVuc2lnbmVkIGNoYXIgKiBwLCBpbnQgcGNvbnRyb2wsIGludCB0YXJnZXQpCkBAIC0xNDU5LDIwICsxOTQyLDE4IEBACiAKICNkZWZpbmUgU0RFQlVHX01BWF9NU0VOU0VfU1ogMjU2CiAKLXN0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsIGludCB0YXJnZXQsCi0JCQkgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50CityZXNwX21vZGVfc2Vuc2Uoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKIAl1bnNpZ25lZCBjaGFyIGRiZCwgbGxiYWE7CiAJaW50IHBjb250cm9sLCBwY29kZSwgc3VicGNvZGUsIGJkX2xlbjsKIAl1bnNpZ25lZCBjaGFyIGRldl9zcGVjOwotCWludCBrLCBhbGxvY19sZW4sIG1zZW5zZV82LCBvZmZzZXQsIGxlbiwgZXJyc3RzLCB0YXJnZXRfZGV2X2lkOworCWludCBrLCBhbGxvY19sZW4sIG1zZW5zZV82LCBvZmZzZXQsIGxlbiwgdGFyZ2V0X2Rldl9pZDsKKwlpbnQgdGFyZ2V0ID0gc2NwLT5kZXZpY2UtPmlkOwogCXVuc2lnbmVkIGNoYXIgKiBhcDsKIAl1bnNpZ25lZCBjaGFyIGFycltTREVCVUdfTUFYX01TRU5TRV9TWl07CiAJdW5zaWduZWQgY2hhciAqY21kID0gc2NwLT5jbW5kOwogCi0JZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKHNjcCwgVUFTX09OTFksIGRldmlwKTsKLQlpZiAoZXJyc3RzKQotCQlyZXR1cm4gZXJyc3RzOwogCWRiZCA9ICEhKGNtZFsxXSAmIDB4OCk7CiAJcGNvbnRyb2wgPSAoY21kWzJdICYgMHhjMCkgPj4gNjsKIAlwY29kZSA9IGNtZFsyXSAmIDB4M2Y7CkBAIC0xNTQyLDggKzIwMjMsNyBAQAogCiAJaWYgKChzdWJwY29kZSA+IDB4MCkgJiYgKHN1YnBjb2RlIDwgMHhmZikgJiYgKDB4MTkgIT0gcGNvZGUpKSB7CiAJCS8qIFRPRE86IENvbnRyb2wgRXh0ZW5zaW9uIHBhZ2UgKi8KLQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwKLQkJCSAgICAgICAJMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDMsIC0xKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCXN3aXRjaCAocGNvZGUpIHsKQEAgLTE1NjksOCArMjA0OSw3IEBACiAJCWJyZWFrOwogCWNhc2UgMHgxOToJLyogaWYgc3BjPT0xIHRoZW4gc2FzIHBoeSwgY29udHJvbCtkaXNjb3ZlciAqLwogCQlpZiAoKHN1YnBjb2RlID4gMHgyKSAmJiAoc3VicGNvZGUgPCAweGZmKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAzLCAtMSk7CiAJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAkgICAgICAgIH0KIAkJbGVuID0gMDsKQEAgLTE2MDIsMTUgKzIwODEsMTMgQEAKIAkJCX0KIAkJCWxlbiArPSByZXNwX2llY19tX3BnKGFwICsgbGVuLCBwY29udHJvbCwgdGFyZ2V0KTsKIAkJfSBlbHNlIHsKLQkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgMywgLTEpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAgICAgICAgICAgICAgICAgfQogCQlvZmZzZXQgKz0gbGVuOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLAotCQkJICAgICAgIAkwKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0NEQiwgMiwgNSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAlpZiAobXNlbnNlXzYpCkBAIC0xNjI0LDI0ICsyMTAxLDIxIEBACiAKICNkZWZpbmUgU0RFQlVHX01BWF9NU0VMRUNUX1NaIDUxMgogCi1zdGF0aWMgaW50IHJlc3BfbW9kZV9zZWxlY3Qoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwgaW50IG1zZWxlY3Q2LAotCQkJICAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCkKK3N0YXRpYyBpbnQKK3Jlc3BfbW9kZV9zZWxlY3Qoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKIAlpbnQgcGYsIHNwLCBwcywgbWRfbGVuLCBiZF9sZW4sIG9mZiwgc3BmLCBwZ19sZW47Ci0JaW50IHBhcmFtX2xlbiwgcmVzLCBlcnJzdHMsIG1wYWdlOworCWludCBwYXJhbV9sZW4sIHJlcywgbXBhZ2U7CiAJdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX01BWF9NU0VMRUNUX1NaXTsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSBzY3AtPmNtbmQ7CisJaW50IG1zZWxlY3Q2ID0gKE1PREVfU0VMRUNUID09IGNtZFswXSk7CiAKLQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCBVQVNfT05MWSwgZGV2aXApOwotCWlmIChlcnJzdHMpCi0JCXJldHVybiBlcnJzdHM7CiAJbWVtc2V0KGFyciwgMCwgc2l6ZW9mKGFycikpOwogCXBmID0gY21kWzFdICYgMHgxMDsKIAlzcCA9IGNtZFsxXSAmIDB4MTsKIAlwYXJhbV9sZW4gPSBtc2VsZWN0NiA/IGNtZFs0XSA6ICgoY21kWzddIDw8IDgpICsgY21kWzhdKTsKIAlpZiAoKDAgPT0gcGYpIHx8IHNwIHx8IChwYXJhbV9sZW4gPiBTREVCVUdfTUFYX01TRUxFQ1RfU1opKSB7Ci0JCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIG1zZWxlY3Q2ID8gNCA6IDcsIC0xKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogICAgICAgICByZXMgPSBmZXRjaF90b19kZXZfYnVmZmVyKHNjcCwgYXJyLCBwYXJhbV9sZW4pOwpAQCAtMTY1NSwxNiArMjEyOSwxNCBAQAogCW1kX2xlbiA9IG1zZWxlY3Q2ID8gKGFyclswXSArIDEpIDogKChhcnJbMF0gPDwgOCkgKyBhcnJbMV0gKyAyKTsKIAliZF9sZW4gPSBtc2VsZWN0NiA/IGFyclszXSA6ICgoYXJyWzZdIDw8IDgpICsgYXJyWzddKTsKIAlpZiAobWRfbGVuID4gMikgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJSU5WQUxJRF9GSUVMRF9JTl9QQVJBTV9MSVNULCAwKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9mbGQoc2NwLCBTREVCX0lOX0RBVEEsIDAsIC0xKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCW9mZiA9IGJkX2xlbiArIChtc2VsZWN0NiA/IDQgOiA4KTsKIAltcGFnZSA9IGFycltvZmZdICYgMHgzZjsKIAlwcyA9ICEhKGFycltvZmZdICYgMHg4MCk7CiAJaWYgKHBzKSB7Ci0JCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQlJTlZBTElEX0ZJRUxEX0lOX1BBUkFNX0xJU1QsIDApOworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fREFUQSwgb2ZmLCA3KTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCXNwZiA9ICEhKGFycltvZmZdICYgMHg0MCk7CkBAIC0xNzAxLDggKzIxNzMsNyBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQlJTlZBTElEX0ZJRUxEX0lOX1BBUkFNX0xJU1QsIDApOworCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9EQVRBLCBvZmYsIDUpOwogCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0Owogc2V0X21vZGVfY2hhbmdlZF91YToKIAlzZXRfYml0KFNERUJVR19VQV9NT0RFX0NIQU5HRUQsIGRldmlwLT51YXNfYm0pOwpAQCAtMTczNywxOSArMjIwOCwxNSBAQAogc3RhdGljIGludCByZXNwX2xvZ19zZW5zZShzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCiB7Ci0JaW50IHBwYywgc3AsIHBjb250cm9sLCBwY29kZSwgc3VicGNvZGUsIGFsbG9jX2xlbiwgZXJyc3RzLCBsZW4sIG47CisJaW50IHBwYywgc3AsIHBjb250cm9sLCBwY29kZSwgc3VicGNvZGUsIGFsbG9jX2xlbiwgbGVuLCBuOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NERUJVR19NQVhfTFNFTlNFX1NaXTsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSBzY3AtPmNtbmQ7CiAKLQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCBVQVNfT05MWSwgZGV2aXApOwotCWlmIChlcnJzdHMpCi0JCXJldHVybiBlcnJzdHM7CiAJbWVtc2V0KGFyciwgMCwgc2l6ZW9mKGFycikpOwogCXBwYyA9IGNtZFsxXSAmIDB4MjsKIAlzcCA9IGNtZFsxXSAmIDB4MTsKIAlpZiAocHBjIHx8IHNwKSB7Ci0JCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDEsIHBwYyA/IDEgOiAwKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCXBjb250cm9sID0gKGNtZFsyXSAmIDB4YzApID4+IDY7CkBAIC0xNzczLDggKzIyNDAsNyBAQAogCQkJYXJyWzNdID0gcmVzcF9pZV9sX3BnKGFyciArIDQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKKwkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDIsIDUpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KIAl9IGVsc2UgaWYgKDB4ZmYgPT0gc3VicGNvZGUpIHsKQEAgLTE4MDYsMTMgKzIyNzIsMTEgQEAKIAkJCWFyclszXSA9IG4gLSA0OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKKwkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDIsIDUpOwogCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KIAl9IGVsc2UgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAzLCAtMSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAlsZW4gPSBtaW4oKChhcnJbMl0gPDwgOCkgKyBhcnJbM10pICsgNCwgYWxsb2NfbGVuKTsKQEAgLTE4MjQsMTEgKzIyODgsMTIgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLCB1bnNpZ25lZCBpbnQgbnVtKQogewogCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKLQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBBRERSX09VVF9PRl9SQU5HRSwgMCk7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgTEJBX09VVF9PRl9SQU5HRSwgMCk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAkvKiB0cmFuc2ZlciBsZW5ndGggZXhjZXNzaXZlICh0aWUgaW4gdG8gYmxvY2sgbGltaXRzIFZQRCBwYWdlKSAqLwogCWlmIChudW0gPiBzZGVidWdfc3RvcmVfc2VjdG9ycykgeworCQkvKiBuZWVkcyB3b3JrIHRvIGZpbmQgd2hpY2ggY2RiIGJ5dGUgJ251bScgY29tZXMgZnJvbSAqLwogCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQpAQCAtMTgzNiwxNyArMjMwMSwxNyBAQAogfQogCiAvKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyBjb3BpZWQgb3IgLTEgaWYgZXJyb3IuICovCi1zdGF0aWMgaW50IGRvX2RldmljZV9hY2Nlc3Moc3RydWN0IHNjc2lfY21uZCAqc2NtZCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLCB1bnNpZ25lZCBpbnQgbnVtLCBpbnQgd3JpdGUpCitzdGF0aWMgaW50Citkb19kZXZpY2VfYWNjZXNzKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHU2NCBsYmEsIHUzMiBudW0sIGJvb2wgZG9fd3JpdGUpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssIHJlc3QgPSAwOworCXU2NCBibG9jaywgcmVzdCA9IDA7CiAJc3RydWN0IHNjc2lfZGF0YV9idWZmZXIgKnNkYjsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CiAJc2l6ZV90ICgqZnVuYykoc3RydWN0IHNjYXR0ZXJsaXN0ICosIHVuc2lnbmVkIGludCwgdm9pZCAqLCBzaXplX3QsCiAJCSAgICAgICBvZmZfdCk7CiAKLQlpZiAod3JpdGUpIHsKKwlpZiAoZG9fd3JpdGUpIHsKIAkJc2RiID0gc2NzaV9vdXQoc2NtZCk7CiAJCWRpciA9IERNQV9UT19ERVZJQ0U7CiAJCWZ1bmMgPSBzZ19wY29weV90b19idWZmZXI7CkBAIC0xODgwLDYgKzIzNDUsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBJZiBmYWtlX3N0b3JlKGxiYSxudW0pIGNvbXBhcmVzIGVxdWFsIHRvIGFycihudW0pLCB0aGVuIGNvcHkgdG9wIGhhbGYgb2YKKyAqIGFyciBpbnRvIGZha2Vfc3RvcmUobGJhLG51bSkgYW5kIHJldHVybiB0cnVlLiBJZiBjb21wYXJpc29uIGZhaWxzIHRoZW4KKyAqIHJldHVybiBmYWxzZS4gKi8KK3N0YXRpYyBib29sCitjb21wX3dyaXRlX3dvcmtlcih1NjQgbGJhLCB1MzIgbnVtLCBjb25zdCB1OCAqYXJyKQoreworCWJvb2wgcmVzOworCXU2NCBibG9jaywgcmVzdCA9IDA7CisJdTMyIHN0b3JlX2Jsa3MgPSBzZGVidWdfc3RvcmVfc2VjdG9yczsKKwl1MzIgbGJfc2l6ZSA9IHNjc2lfZGVidWdfc2VjdG9yX3NpemU7CisKKwlibG9jayA9IGRvX2RpdihsYmEsIHN0b3JlX2Jsa3MpOworCWlmIChibG9jayArIG51bSA+IHN0b3JlX2Jsa3MpCisJCXJlc3QgPSBibG9jayArIG51bSAtIHN0b3JlX2Jsa3M7CisKKwlyZXMgPSAhbWVtY21wKGZha2Vfc3RvcmVwICsgKGJsb2NrICogbGJfc2l6ZSksIGFyciwKKwkJICAgICAgKG51bSAtIHJlc3QpICogbGJfc2l6ZSk7CisJaWYgKCFyZXMpCisJCXJldHVybiByZXM7CisJaWYgKHJlc3QpCisJCXJlcyA9IG1lbWNtcChmYWtlX3N0b3JlcCwgYXJyICsgKChudW0gLSByZXN0KSAqIGxiX3NpemUpLAorCQkJICAgICByZXN0ICogbGJfc2l6ZSk7CisJaWYgKCFyZXMpCisJCXJldHVybiByZXM7CisJYXJyICs9IG51bSAqIGxiX3NpemU7CisJbWVtY3B5KGZha2Vfc3RvcmVwICsgKGJsb2NrICogbGJfc2l6ZSksIGFyciwgKG51bSAtIHJlc3QpICogbGJfc2l6ZSk7CisJaWYgKHJlc3QpCisJCW1lbWNweShmYWtlX3N0b3JlcCwgYXJyICsgKChudW0gLSByZXN0KSAqIGxiX3NpemUpLAorCQkgICAgICAgcmVzdCAqIGxiX3NpemUpOworCXJldHVybiByZXM7Cit9CisKIHN0YXRpYyBfX2JlMTYgZGlmX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWYsIGludCBsZW4pCiB7CiAJX19iZTE2IGNzdW07CkBAIC0xOTkyLDU1ICsyNDg5LDE0MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlc3BfcmVhZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKLQkJICAgICB1bnNpZ25lZCBpbnQgbnVtLCB1MzIgZWlfbGJhKQorc3RhdGljIGludAorcmVzcF9yZWFkX2R0MChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQogeworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisJdTY0IGxiYTsKKwl1MzIgbnVtOworCXUzMiBlaV9sYmE7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJaW50IHJldDsKKwlib29sIGNoZWNrX3Byb3Q7CiAKLQlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhTQ3BudCwgbGJhLCBudW0pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJc3dpdGNoIChjbWRbMF0pIHsKKwljYXNlIFJFQURfMTY6CisJCWVpX2xiYSA9IDA7CisJCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAyKTsKKwkJbnVtID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDEwKTsKKwkJY2hlY2tfcHJvdCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgUkVBRF8xMDoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFJFQURfNjoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gKHUzMiljbWRbM10gfCAodTMyKWNtZFsyXSA8PCA4IHwKKwkJICAgICAgKHUzMikoY21kWzFdICYgMHgxZikgPDwgMTY7CisJCW51bSA9ICgwID09IGNtZFs0XSkgPyAyNTYgOiBjbWRbNF07CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFJFQURfMTI6CisJCWVpX2xiYSA9IDA7CisJCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyKTsKKwkJbnVtID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDYpOworCQljaGVja19wcm90ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBYRFdSSVRFUkVBRF8xMDoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJCWNoZWNrX3Byb3QgPSBmYWxzZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoJLyogYXNzdW1lIFJFQUQoMzIpICovCisJCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAxMik7CisJCWVpX2xiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyMCk7CisJCW51bSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyOCk7CisJCWNoZWNrX3Byb3QgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCWlmIChjaGVja19wcm90KSB7CisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX29wY29kZShzY3ApOworCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0KKwkJaWYgKChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8fAorCQkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApID09IDApCisJCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NwLT5kZXZpY2UsICJVbnByb3RlY3RlZCBSRCAiCisJCQkJICAgICJ0byBESUYgZGV2aWNlXG4iKTsKKwl9CisJaWYgKHNkZWJ1Z19hbnlfaW5qZWN0aW5nX29wdCkgeworCQlzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCAqZXAgPSBzY3NpX2NtZF9wcml2KHNjcCk7CisKKwkJaWYgKGVwLT5pbmpfc2hvcnQpCisJCQludW0gLz0gMjsKKwl9CisKKwkvKiBpbmxpbmUgY2hlY2tfZGV2aWNlX2FjY2Vzc19wYXJhbXMoKSAqLworCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBMQkFfT1VUX09GX1JBTkdFLCAwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCS8qIHRyYW5zZmVyIGxlbmd0aCBleGNlc3NpdmUgKHRpZSBpbiB0byBibG9jayBsaW1pdHMgVlBEIHBhZ2UpICovCisJaWYgKG51bSA+IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKSB7CisJCS8qIG5lZWRzIHdvcmsgdG8gZmluZCB3aGljaCBjZGIgYnl0ZSAnbnVtJyBjb21lcyBmcm9tICovCisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CiAKIAlpZiAoKFNDU0lfREVCVUdfT1BUX01FRElVTV9FUlIgJiBzY3NpX2RlYnVnX29wdHMpICYmCiAJICAgIChsYmEgPD0gKE9QVF9NRURJVU1fRVJSX0FERFIgKyBPUFRfTUVESVVNX0VSUl9OVU0gLSAxKSkgJiYKIAkgICAgKChsYmEgKyBudW0pID4gT1BUX01FRElVTV9FUlJfQUREUikpIHsKIAkJLyogY2xhaW0gdW5yZWNvdmVyYWJsZSByZWFkIGVycm9yICovCi0JCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgTUVESVVNX0VSUk9SLCBVTlJFQ09WRVJFRF9SRUFEX0VSUiwgMCk7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIE1FRElVTV9FUlJPUiwgVU5SRUNPVkVSRURfUkVBRF9FUlIsIDApOwogCQkvKiBzZXQgaW5mbyBmaWVsZCBhbmQgdmFsaWQgYml0IGZvciBmaXhlZCBkZXNjcmlwdG9yICovCi0JCWlmICgweDcwID09IChTQ3BudC0+c2Vuc2VfYnVmZmVyWzBdICYgMHg3ZikpIHsKLQkJCVNDcG50LT5zZW5zZV9idWZmZXJbMF0gfD0gMHg4MDsJLyogVmFsaWQgYml0ICovCisJCWlmICgweDcwID09IChzY3AtPnNlbnNlX2J1ZmZlclswXSAmIDB4N2YpKSB7CisJCQlzY3AtPnNlbnNlX2J1ZmZlclswXSB8PSAweDgwOwkvKiBWYWxpZCBiaXQgKi8KIAkJCXJldCA9IChsYmEgPCBPUFRfTUVESVVNX0VSUl9BRERSKQogCQkJICAgICAgPyBPUFRfTUVESVVNX0VSUl9BRERSIDogKGludClsYmE7Ci0JCQlTQ3BudC0+c2Vuc2VfYnVmZmVyWzNdID0gKHJldCA+PiAyNCkgJiAweGZmOwotCQkJU0NwbnQtPnNlbnNlX2J1ZmZlcls0XSA9IChyZXQgPj4gMTYpICYgMHhmZjsKLQkJCVNDcG50LT5zZW5zZV9idWZmZXJbNV0gPSAocmV0ID4+IDgpICYgMHhmZjsKLQkJCVNDcG50LT5zZW5zZV9idWZmZXJbNl0gPSByZXQgJiAweGZmOworCQkJcHV0X3VuYWxpZ25lZF9iZTMyKHJldCwgc2NwLT5zZW5zZV9idWZmZXIgKyAzKTsKIAkJfQotCSAgICAgICAgc2NzaV9zZXRfcmVzaWQoU0NwbnQsIHNjc2lfYnVmZmxlbihTQ3BudCkpOworCQlzY3NpX3NldF9yZXNpZChzY3AsIHNjc2lfYnVmZmxlbihzY3ApKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCiAJcmVhZF9sb2NrX2lycXNhdmUoJmF0b21pY19ydywgaWZsYWdzKTsKIAogCS8qIERJWCArIFQxMCBESUYgKi8KLQlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkgewotCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV9yZWFkKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhKTsKKwlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KHNjcCkpIHsKKwkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfcmVhZChzY3AsIGxiYSwgbnVtLCBlaV9sYmEpOwogCiAJCWlmIChwcm90X3JldCkgewogCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBBQk9SVEVEX0NPTU1BTkQsIDB4MTAsIHByb3RfcmV0KTsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgcHJvdF9yZXQpOwogCQkJcmV0dXJuIGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKIAkJfQogCX0KIAotCXJldCA9IGRvX2RldmljZV9hY2Nlc3MoU0NwbnQsIGxiYSwgbnVtLCAwKTsKKwlyZXQgPSBkb19kZXZpY2VfYWNjZXNzKHNjcCwgbGJhLCBudW0sIGZhbHNlKTsKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfcncsIGlmbGFncyk7CiAJaWYgKHJldCA9PSAtMSkKIAkJcmV0dXJuIERJRF9FUlJPUiA8PCAxNjsKIAotCXNjc2lfaW4oU0NwbnQpLT5yZXNpZCA9IHNjc2lfYnVmZmxlbihTQ3BudCkgLSByZXQ7CisJc2NzaV9pbihzY3ApLT5yZXNpZCA9IHNjc2lfYnVmZmxlbihzY3ApIC0gcmV0OwogCisJaWYgKHNkZWJ1Z19hbnlfaW5qZWN0aW5nX29wdCkgeworCQlzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCAqZXAgPSBzY3NpX2NtZF9wcml2KHNjcCk7CisKKwkJaWYgKGVwLT5pbmpfcmVjb3ZlcmVkKSB7CisJCQlta19zZW5zZV9idWZmZXIoc2NwLCBSRUNPVkVSRURfRVJST1IsCisJCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7CisJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfSBlbHNlIGlmIChlcC0+aW5qX3RyYW5zcG9ydCkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgQUJPUlRFRF9DT01NQU5ELAorCQkJCQlUUkFOU1BPUlRfUFJPQkxFTSwgQUNLX05BS19UTyk7CisJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfSBlbHNlIGlmIChlcC0+aW5qX2RpZikgeworCQkJLyogTG9naWNhbCBibG9jayBndWFyZCBjaGVjayBmYWlsZWQgKi8KKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgMSk7CisJCQlyZXR1cm4gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UgaWYgKGVwLT5pbmpfZGl4KSB7CisJCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsIDEpOworCQkJcmV0dXJuIGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIyMywzMSArMjgwOCw5NSBAQAogCX0KIH0KIAotc3RhdGljIGludCByZXNwX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCB1MzIgZWlfbGJhKQorc3RhdGljIGludAorcmVzcF93cml0ZV9kdDAoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKKwl1OCAqY21kID0gc2NwLT5jbW5kOworCXU2NCBsYmE7CisJdTMyIG51bTsKKwl1MzIgZWlfbGJhOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCWludCByZXQ7CisJYm9vbCBjaGVja19wcm90OwogCi0JcmV0ID0gY2hlY2tfZGV2aWNlX2FjY2Vzc19wYXJhbXMoU0NwbnQsIGxiYSwgbnVtKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCXN3aXRjaCAoY21kWzBdKSB7CisJY2FzZSBXUklURV8xNjoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTY0KGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMTApOworCQljaGVja19wcm90ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV8xMDoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFdSSVRFXzY6CisJCWVpX2xiYSA9IDA7CisJCWxiYSA9ICh1MzIpY21kWzNdIHwgKHUzMiljbWRbMl0gPDwgOCB8CisJCSAgICAgICh1MzIpKGNtZFsxXSAmIDB4MWYpIDw8IDE2OworCQludW0gPSAoMCA9PSBjbWRbNF0pID8gMjU2IDogY21kWzRdOworCQljaGVja19wcm90ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV8xMjoKKwkJZWlfbGJhID0gMDsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCQludW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgNik7CisJCWNoZWNrX3Byb3QgPSB0cnVlOworCQlicmVhazsKKwljYXNlIDB4NTM6CS8qIFhEV1JJVEVSRUFEKDEwKSAqLworCQllaV9sYmEgPSAwOworCQlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMik7CisJCW51bSA9IGdldF91bmFsaWduZWRfYmUxNihjbWQgKyA3KTsKKwkJY2hlY2tfcHJvdCA9IGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0OgkvKiBhc3N1bWUgV1JJVEUoMzIpICovCisJCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAxMik7CisJCWVpX2xiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyMCk7CisJCW51bSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyOCk7CisJCWNoZWNrX3Byb3QgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCWlmIChjaGVja19wcm90KSB7CisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX29wY29kZShzY3ApOworCQkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0KKwkJaWYgKChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8fAorCQkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApID09IDApCisJCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NwLT5kZXZpY2UsICJVbnByb3RlY3RlZCBXUiAiCisJCQkJICAgICJ0byBESUYgZGV2aWNlXG4iKTsKKwl9CisKKwkvKiBpbmxpbmUgY2hlY2tfZGV2aWNlX2FjY2Vzc19wYXJhbXMoKSAqLworCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBMQkFfT1VUX09GX1JBTkdFLCAwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCS8qIHRyYW5zZmVyIGxlbmd0aCBleGNlc3NpdmUgKHRpZSBpbiB0byBibG9jayBsaW1pdHMgVlBEIHBhZ2UpICovCisJaWYgKG51bSA+IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKSB7CisJCS8qIG5lZWRzIHdvcmsgdG8gZmluZCB3aGljaCBjZGIgYnl0ZSAnbnVtJyBjb21lcyBmcm9tICovCisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmF0b21pY19ydywgaWZsYWdzKTsKIAogCS8qIERJWCArIFQxMCBESUYgKi8KLQlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkgewotCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV93cml0ZShTQ3BudCwgbGJhLCBudW0sIGVpX2xiYSk7CisJaWYgKHNjc2lfZGVidWdfZGl4ICYmIHNjc2lfcHJvdF9zZ19jb3VudChzY3ApKSB7CisJCWludCBwcm90X3JldCA9IHByb3RfdmVyaWZ5X3dyaXRlKHNjcCwgbGJhLCBudW0sIGVpX2xiYSk7CiAKIAkJaWYgKHByb3RfcmV0KSB7CiAJCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsCi0JCQkJCXByb3RfcmV0KTsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgcHJvdF9yZXQpOwogCQkJcmV0dXJuIGlsbGVnYWxfY29uZGl0aW9uX3Jlc3VsdDsKIAkJfQogCX0KIAotCXJldCA9IGRvX2RldmljZV9hY2Nlc3MoU0NwbnQsIGxiYSwgbnVtLCAxKTsKKwlyZXQgPSBkb19kZXZpY2VfYWNjZXNzKHNjcCwgbGJhLCBudW0sIHRydWUpOwogCWlmIChzY3NpX2RlYnVnX2xicCgpKQogCQltYXBfcmVnaW9uKGxiYSwgbnVtKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwpAQCAtMjI1NSwzMCArMjkwNCw0MSBAQAogCQlyZXR1cm4gKERJRF9FUlJPUiA8PCAxNik7CiAJZWxzZSBpZiAoKHJldCA8IChudW0gKiBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKSkgJiYKIAkJIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykpCi0JCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQtPmRldmljZSwKKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzY3AtPmRldmljZSwKIAkJCSAgICAiJXM6IHdyaXRlOiBjZGIgaW5kaWNhdGVkPSV1LCBJTyBzZW50PSVkIGJ5dGVzXG4iLAogCQkJICAgIG15X25hbWUsIG51bSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUsIHJldCk7CiAKKwlpZiAoc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0KSB7CisJCXN0cnVjdCBzZGVidWdfc2NtZF9leHRyYV90ICplcCA9IHNjc2lfY21kX3ByaXYoc2NwKTsKKworCQlpZiAoZXAtPmlual9yZWNvdmVyZWQpIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIFJFQ09WRVJFRF9FUlJPUiwKKwkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKKwkJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UgaWYgKGVwLT5pbmpfZGlmKSB7CisJCQkvKiBMb2dpY2FsIGJsb2NrIGd1YXJkIGNoZWNrIGZhaWxlZCAqLworCQkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgQUJPUlRFRF9DT01NQU5ELCAweDEwLCAxKTsKKwkJCXJldHVybiBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0gZWxzZSBpZiAoZXAtPmlual9kaXgpIHsKKwkJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgMSk7CisJCQlyZXR1cm4gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OworCQl9CisJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlc3Bfd3JpdGVfc2FtZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCB1MzIgZWlfbGJhLCB1bnNpZ25lZCBpbnQgdW5tYXApCitzdGF0aWMgaW50CityZXNwX3dyaXRlX3NhbWUoc3RydWN0IHNjc2lfY21uZCAqc2NwLCB1NjQgbGJhLCB1MzIgbnVtLCB1MzIgZWlfbGJhLAorCQlib29sIHVubWFwLCBib29sIG5kb2IpCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBsb25nIGk7CiAJaW50IHJldDsKIAotCXJldCA9IGNoZWNrX2RldmljZV9hY2Nlc3NfcGFyYW1zKHNjbWQsIGxiYSwgbnVtKTsKKwlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhzY3AsIGxiYSwgbnVtKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKG51bSA+IHNjc2lfZGVidWdfd3JpdGVfc2FtZV9sZW5ndGgpIHsKLQkJbWtfc2Vuc2VfYnVmZmVyKHNjbWQsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsCi0JCQkJMCk7Ci0JCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCX0KLQogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwogCiAJaWYgKHVubWFwICYmIHNjc2lfZGVidWdfbGJwKCkpIHsKQEAgLTIyODYsMTcgKzI5NDYsMjIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogRWxzZSBmZXRjaCBvbmUgbG9naWNhbCBibG9jayAqLwotCXJldCA9IGZldGNoX3RvX2Rldl9idWZmZXIoc2NtZCwKLQkJCQkgIGZha2Vfc3RvcmVwICsgKGxiYSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpLAotCQkJCSAgc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSk7CisJLyogaWYgbmRvYiB0aGVuIHplcm8gMSBsb2dpY2FsIGJsb2NrLCBlbHNlIGZldGNoIDEgbG9naWNhbCBibG9jayAqLworCWlmIChuZG9iKSB7CisJCW1lbXNldChmYWtlX3N0b3JlcCArIChsYmEgKiBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKSwgMCwKKwkJICAgICAgIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOworCQlyZXQgPSAwOworCX0gZWxzZQorCQlyZXQgPSBmZXRjaF90b19kZXZfYnVmZmVyKHNjcCwgZmFrZV9zdG9yZXAgKworCQkJCQkgICAgICAgKGxiYSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpLAorCQkJCQkgIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOwogCiAJaWYgKC0xID09IHJldCkgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwogCQlyZXR1cm4gKERJRF9FUlJPUiA8PCAxNik7CiAJfSBlbHNlIGlmICgocmV0IDwgKG51bSAqIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpKSAmJgogCQkgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKSkKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzY21kLT5kZXZpY2UsCisJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2NwLT5kZXZpY2UsCiAJCQkgICAgIiVzOiAlczogY2RiIGluZGljYXRlZD0ldSwgSU8gc2VudD0lZCBieXRlc1xuIiwKIAkJCSAgICBteV9uYW1lLCAid3JpdGUgc2FtZSIsCiAJCQkgICAgbnVtICogc2NzaV9kZWJ1Z19zZWN0b3Jfc2l6ZSwgcmV0KTsKQEAgLTIzMTUsMTMgKzI5ODAsMTQzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK3Jlc3Bfd3JpdGVfc2FtZV8xMChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQoreworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisJdTMyIGxiYTsKKwl1MTYgbnVtOworCXUzMiBlaV9sYmEgPSAwOworCWJvb2wgdW5tYXAgPSBmYWxzZTsKKworCWlmIChjbWRbMV0gJiAweDgpIHsKKwkJaWYgKHNjc2lfZGVidWdfbGJwd3MxMCA9PSAwKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAxLCAzKTsKKwkJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UKKwkJCXVubWFwID0gdHJ1ZTsKKwl9CisJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDIpOworCW51bSA9IGdldF91bmFsaWduZWRfYmUxNihjbWQgKyA3KTsKKwlpZiAobnVtID4gc2NzaV9kZWJ1Z193cml0ZV9zYW1lX2xlbmd0aCkgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA3LCAtMSk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlyZXR1cm4gcmVzcF93cml0ZV9zYW1lKHNjcCwgbGJhLCBudW0sIGVpX2xiYSwgdW5tYXAsIGZhbHNlKTsKK30KKworc3RhdGljIGludAorcmVzcF93cml0ZV9zYW1lXzE2KHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCit7CisJdTggKmNtZCA9IHNjcC0+Y21uZDsKKwl1NjQgbGJhOworCXUzMiBudW07CisJdTMyIGVpX2xiYSA9IDA7CisJYm9vbCB1bm1hcCA9IGZhbHNlOworCWJvb2wgbmRvYiA9IGZhbHNlOworCisJaWYgKGNtZFsxXSAmIDB4OCkgewkvKiBVTk1BUCAqLworCQlpZiAoc2NzaV9kZWJ1Z19sYnB3cyA9PSAwKSB7CisJCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCAxLCAzKTsKKwkJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UKKwkJCXVubWFwID0gdHJ1ZTsKKwl9CisJaWYgKGNtZFsxXSAmIDB4MSkgIC8qIE5ET0IgKG5vIGRhdGEtb3V0IGJ1ZmZlciwgYXNzdW1lcyB6ZXJvZXMpICovCisJCW5kb2IgPSB0cnVlOworCWxiYSA9IGdldF91bmFsaWduZWRfYmU2NChjbWQgKyAyKTsKKwludW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMTApOworCWlmIChudW0gPiBzY3NpX2RlYnVnX3dyaXRlX3NhbWVfbGVuZ3RoKSB7CisJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDEwLCAtMSk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlyZXR1cm4gcmVzcF93cml0ZV9zYW1lKHNjcCwgbGJhLCBudW0sIGVpX2xiYSwgdW5tYXAsIG5kb2IpOworfQorCitzdGF0aWMgaW50CityZXNwX2NvbXBfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKK3sKKwl1OCAqY21kID0gc2NwLT5jbW5kOworCXU4ICphcnI7CisJdTggKmZha2Vfc3RvcmVwX2hvbGQ7CisJdTY0IGxiYTsKKwl1MzIgZG51bTsKKwl1MzIgbGJfc2l6ZSA9IHNjc2lfZGVidWdfc2VjdG9yX3NpemU7CisJdTggbnVtOworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOworCWludCByZXQ7CisKKwlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlMzIoY21kICsgMik7CisJbnVtID0gY21kWzEzXTsJCS8qIDEgdG8gYSBtYXhpbXVtIG9mIDI1NSBsb2dpY2FsIGJsb2NrcyAqLworCWlmICgwID09IG51bSkKKwkJcmV0dXJuIDA7CS8qIGRlZ2VuZXJhdGUgY2FzZSwgbm90IGFuIGVycm9yICovCisJZG51bSA9IDIgKiBudW07CisJYXJyID0ga3phbGxvYyhkbnVtICogbGJfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKE5VTEwgPT0gYXJyKSB7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5TVUZGX1JFU19BU0MsCisJCQkJSU5TVUZGX1JFU19BU0NRKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCSAgICAoY21kWzFdICYgMHhlMCkpIHsKKwkJbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc2NwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCWlmICgoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gfHwKKwkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKKwkJc2Rldl9wcmludGsoS0VSTl9FUlIsIHNjcC0+ZGV2aWNlLCAiVW5wcm90ZWN0ZWQgV1IgIgorCQkJICAgICJ0byBESUYgZGV2aWNlXG4iKTsKKworCS8qIGlubGluZSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcygpICovCisJaWYgKGxiYSArIG51bSA+IHNkZWJ1Z19jYXBhY2l0eSkgeworCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIExCQV9PVVRfT0ZfUkFOR0UsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJLyogdHJhbnNmZXIgbGVuZ3RoIGV4Y2Vzc2l2ZSAodGllIGluIHRvIGJsb2NrIGxpbWl0cyBWUEQgcGFnZSkgKi8KKwlpZiAobnVtID4gc2RlYnVnX3N0b3JlX3NlY3RvcnMpIHsKKwkJLyogbmVlZHMgd29yayB0byBmaW5kIHdoaWNoIGNkYiBieXRlICdudW0nIGNvbWVzIGZyb20gKi8KKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYXRvbWljX3J3LCBpZmxhZ3MpOworCisJLyogdHJpY2sgZG9fZGV2aWNlX2FjY2VzcygpIHRvIGZldGNoIGJvdGggY29tcGFyZSBhbmQgd3JpdGUgYnVmZmVycworCSAqIGZyb20gZGF0YS1pbiBpbnRvIGFyci4gU2FmZSAoYXRvbWljKSBzaW5jZSB3cml0ZV9sb2NrIGhlbGQuICovCisJZmFrZV9zdG9yZXBfaG9sZCA9IGZha2Vfc3RvcmVwOworCWZha2Vfc3RvcmVwID0gYXJyOworCXJldCA9IGRvX2RldmljZV9hY2Nlc3Moc2NwLCAwLCBkbnVtLCB0cnVlKTsKKwlmYWtlX3N0b3JlcCA9IGZha2Vfc3RvcmVwX2hvbGQ7CisJaWYgKHJldCA9PSAtMSkgeworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOworCQlrZnJlZShhcnIpOworCQlyZXR1cm4gRElEX0VSUk9SIDw8IDE2OworCX0gZWxzZSBpZiAoKHJldCA8IChkbnVtICogbGJfc2l6ZSkpICYmCisJCSAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpKQorCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNjcC0+ZGV2aWNlLCAiJXM6IGNvbXBhcmVfd3JpdGU6IGNkYiAiCisJCQkgICAgImluZGljYXRlZD0ldSwgSU8gc2VudD0lZCBieXRlc1xuIiwgbXlfbmFtZSwKKwkJCSAgICBkbnVtICogbGJfc2l6ZSwgcmV0KTsKKwlpZiAoIWNvbXBfd3JpdGVfd29ya2VyKGxiYSwgbnVtLCBhcnIpKSB7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfcncsIGlmbGFncyk7CisJCWtmcmVlKGFycik7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIE1JU0NPTVBBUkUsIE1JU0NPTVBBUkVfVkVSSUZZX0FTQywgMCk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKwlpZiAoc2NzaV9kZWJ1Z19sYnAoKSkKKwkJbWFwX3JlZ2lvbihsYmEsIG51bSk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmF0b21pY19ydywgaWZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IHVubWFwX2Jsb2NrX2Rlc2MgewogCV9fYmU2NAlsYmE7CiAJX19iZTMyCWJsb2NrczsKIAlfX2JlMzIJX19yZXNlcnZlZDsKIH07CiAKLXN0YXRpYyBpbnQgcmVzcF91bm1hcChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NtZCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKQorc3RhdGljIGludAorcmVzcF91bm1hcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQogewogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAlzdHJ1Y3QgdW5tYXBfYmxvY2tfZGVzYyAqZGVzYzsKQEAgLTIzMjksMjAgKzMxMjQsMjYgQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCi0JcmV0ID0gY2hlY2tfcmVhZGluZXNzKHNjbWQsIFVBU19PTkxZLCBkZXZpcCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKIAotCXBheWxvYWRfbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZzY21kLT5jbW5kWzddKTsKLQlCVUdfT04oc2NzaV9idWZmbGVuKHNjbWQpICE9IHBheWxvYWRfbGVuKTsKKwlpZiAoIXNjc2lfZGVidWdfbGJwKCkpCisJCXJldHVybiAwOwkvKiBmaWIgYW5kIHNheSBpdHMgZG9uZSAqLworCXBheWxvYWRfbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTE2KHNjcC0+Y21uZCArIDcpOworCUJVR19PTihzY3NpX2J1ZmZsZW4oc2NwKSAhPSBwYXlsb2FkX2xlbik7CiAKIAlkZXNjcmlwdG9ycyA9IChwYXlsb2FkX2xlbiAtIDgpIC8gMTY7Ci0KLQlidWYgPSBrbWFsbG9jKHNjc2lfYnVmZmxlbihzY21kKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFidWYpCisJaWYgKGRlc2NyaXB0b3JzID4gc2NzaV9kZWJ1Z191bm1hcF9tYXhfZGVzYykgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCA3LCAtMSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KIAotCXNjc2lfc2dfY29weV90b19idWZmZXIoc2NtZCwgYnVmLCBzY3NpX2J1ZmZsZW4oc2NtZCkpOworCWJ1ZiA9IGttYWxsb2Moc2NzaV9idWZmbGVuKHNjcCksIEdGUF9BVE9NSUMpOworCWlmICghYnVmKSB7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5TVUZGX1JFU19BU0MsCisJCQkJSU5TVUZGX1JFU19BU0NRKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCisJc2NzaV9zZ19jb3B5X3RvX2J1ZmZlcihzY3AsIGJ1Ziwgc2NzaV9idWZmbGVuKHNjcCkpOwogCiAJQlVHX09OKGdldF91bmFsaWduZWRfYmUxNigmYnVmWzBdKSAhPSBwYXlsb2FkX2xlbiAtIDIpOwogCUJVR19PTihnZXRfdW5hbGlnbmVkX2JlMTYoJmJ1ZlsyXSkgIT0gZGVzY3JpcHRvcnMgKiAxNik7CkBAIC0yMzU1LDcgKzMxNTYsNyBAQAogCQl1bnNpZ25lZCBsb25nIGxvbmcgbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZkZXNjW2ldLmxiYSk7CiAJCXVuc2lnbmVkIGludCBudW0gPSBnZXRfdW5hbGlnbmVkX2JlMzIoJmRlc2NbaV0uYmxvY2tzKTsKIAotCQlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhzY21kLCBsYmEsIG51bSk7CisJCXJldCA9IGNoZWNrX2RldmljZV9hY2Nlc3NfcGFyYW1zKHNjcCwgbGJhLCBudW0pOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAKQEAgLTIzNzMsMzcgKzMxNzQsNDQgQEAKIAogI2RlZmluZSBTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOIDMyCiAKLXN0YXRpYyBpbnQgcmVzcF9nZXRfbGJhX3N0YXR1cyhzdHJ1Y3Qgc2NzaV9jbW5kICogc2NtZCwKLQkJCSAgICAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50CityZXNwX2dldF9sYmFfc3RhdHVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGxiYTsKLQl1bnNpZ25lZCBpbnQgYWxsb2NfbGVuLCBtYXBwZWQsIG51bTsKLQl1bnNpZ25lZCBjaGFyIGFycltTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOXTsKKwl1OCAqY21kID0gc2NwLT5jbW5kOworCXU2NCBsYmE7CisJdTMyIGFsbG9jX2xlbiwgbWFwcGVkLCBudW07CisJdTggYXJyW1NERUJVR19HRVRfTEJBX1NUQVRVU19MRU5dOwogCWludCByZXQ7CiAKLQlyZXQgPSBjaGVja19yZWFkaW5lc3Moc2NtZCwgVUFTX09OTFksIGRldmlwKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZzY21kLT5jbW5kWzJdKTsKLQlhbGxvY19sZW4gPSBnZXRfdW5hbGlnbmVkX2JlMzIoJnNjbWQtPmNtbmRbMTBdKTsKKwlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlNjQoY21kICsgMik7CisJYWxsb2NfbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGNtZCArIDEwKTsKIAogCWlmIChhbGxvY19sZW4gPCAyNCkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhzY21kLCBsYmEsIDEpOworCXJldCA9IGNoZWNrX2RldmljZV9hY2Nlc3NfcGFyYW1zKHNjcCwgbGJhLCAxKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbWFwcGVkID0gbWFwX3N0YXRlKGxiYSwgJm51bSk7CisJaWYgKHNjc2lfZGVidWdfbGJwKCkpCisJCW1hcHBlZCA9IG1hcF9zdGF0ZShsYmEsICZudW0pOworCWVsc2UgeworCQltYXBwZWQgPSAxOworCQkvKiBmb2xsb3dpbmcganVzdCBpbiBjYXNlIHZpcnR1YWxfZ2IgY2hhbmdlZCAqLworCQlzZGVidWdfY2FwYWNpdHkgPSBnZXRfc2RlYnVnX2NhcGFjaXR5KCk7CisJCWlmIChzZGVidWdfY2FwYWNpdHkgLSBsYmEgPD0gMHhmZmZmZmZmZikKKwkJCW51bSA9IHNkZWJ1Z19jYXBhY2l0eSAtIGxiYTsKKwkJZWxzZQorCQkJbnVtID0gMHhmZmZmZmZmZjsKKwl9CiAKIAltZW1zZXQoYXJyLCAwLCBTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOKTsKLQlwdXRfdW5hbGlnbmVkX2JlMzIoMjAsICZhcnJbMF0pOwkvKiBQYXJhbWV0ZXIgRGF0YSBMZW5ndGggKi8KLQlwdXRfdW5hbGlnbmVkX2JlNjQobGJhLCAmYXJyWzhdKTsJLyogTEJBICovCi0JcHV0X3VuYWxpZ25lZF9iZTMyKG51bSwgJmFyclsxNl0pOwkvKiBOdW1iZXIgb2YgYmxvY2tzICovCi0JYXJyWzIwXSA9ICFtYXBwZWQ7CQkJLyogbWFwcGVkID0gMCwgdW5tYXBwZWQgPSAxICovCisJcHV0X3VuYWxpZ25lZF9iZTMyKDIwLCBhcnIpOwkJLyogUGFyYW1ldGVyIERhdGEgTGVuZ3RoICovCisJcHV0X3VuYWxpZ25lZF9iZTY0KGxiYSwgYXJyICsgOCk7CS8qIExCQSAqLworCXB1dF91bmFsaWduZWRfYmUzMihudW0sIGFyciArIDE2KTsJLyogTnVtYmVyIG9mIGJsb2NrcyAqLworCWFyclsyMF0gPSAhbWFwcGVkOwkJLyogcHJvdl9zdGF0PTA6IG1hcHBlZDsgMTogZGVhbGxvYyAqLwogCi0JcmV0dXJuIGZpbGxfZnJvbV9kZXZfYnVmZmVyKHNjbWQsIGFyciwgU0RFQlVHX0dFVF9MQkFfU1RBVFVTX0xFTik7CisJcmV0dXJuIGZpbGxfZnJvbV9kZXZfYnVmZmVyKHNjcCwgYXJyLCBTREVCVUdfR0VUX0xCQV9TVEFUVVNfTEVOKTsKIH0KIAogI2RlZmluZSBTREVCVUdfUkxVTl9BUlJfU1ogMjU2CkBAIC0yNDEyLDggKzMyMjAsOCBAQAogCQkJICAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCkKIHsKIAl1bnNpZ25lZCBpbnQgYWxsb2NfbGVuOwotCWludCBsdW5fY250LCBpLCB1cHBlciwgbnVtLCBuOwotCXU2NCB3bHVuLCBsdW47CisJaW50IGx1bl9jbnQsIGksIHVwcGVyLCBudW0sIG4sIHdhbnRfd2x1biwgc2hvcnRpc2g7CisJdTY0IGx1bjsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSBzY3AtPmNtbmQ7CiAJaW50IHNlbGVjdF9yZXBvcnQgPSAoaW50KWNtZFsyXTsKIAlzdHJ1Y3Qgc2NzaV9sdW4gKm9uZV9sdW47CkBAIC0yNDIxLDkgKzMyMjksOSBAQAogCXVuc2lnbmVkIGNoYXIgKiBtYXhfYWRkcjsKIAogCWFsbG9jX2xlbiA9IGNtZFs5XSArIChjbWRbOF0gPDwgOCkgKyAoY21kWzddIDw8IDE2KSArIChjbWRbNl0gPDwgMjQpOwotCWlmICgoYWxsb2NfbGVuIDwgNCkgfHwgKHNlbGVjdF9yZXBvcnQgPiAyKSkgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLAotCQkJICAgICAgIAkwKTsKKwlzaG9ydGlzaCA9IChhbGxvY19sZW4gPCA0KTsKKwlpZiAoc2hvcnRpc2ggfHwgKHNlbGVjdF9yZXBvcnQgPiAyKSkgeworCQlta19zZW5zZV9pbnZhbGlkX2ZsZChzY3AsIFNERUJfSU5fQ0RCLCBzaG9ydGlzaCA/IDYgOiAyLCAtMSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAkvKiBjYW4gcHJvZHVjZSByZXNwb25zZSB3aXRoIHVwIHRvIDE2ayBsdW5zIChsdW4gMCB0byBsdW4gMTYzODMpICovCkBAIC0yNDMzLDE0ICszMjQxLDE0IEBACiAJCWx1bl9jbnQgPSAwOwogCWVsc2UgaWYgKHNjc2lfZGVidWdfbm9fbHVuXzAgJiYgKGx1bl9jbnQgPiAwKSkKIAkJLS1sdW5fY250OwotCXdsdW4gPSAoc2VsZWN0X3JlcG9ydCA+IDApID8gMSA6IDA7Ci0JbnVtID0gbHVuX2NudCArIHdsdW47CisJd2FudF93bHVuID0gKHNlbGVjdF9yZXBvcnQgPiAwKSA/IDEgOiAwOworCW51bSA9IGx1bl9jbnQgKyB3YW50X3dsdW47CiAJYXJyWzJdID0gKChzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSAqIG51bSkgPj4gOCkgJiAweGZmOwogCWFyclszXSA9IChzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSAqIG51bSkgJiAweGZmOwogCW4gPSBtaW4oKGludCkoKFNERUJVR19STFVOX0FSUl9TWiAtIDgpIC8KIAkJCSAgICBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSksIG51bSk7CiAJaWYgKG4gPCBudW0pIHsKLQkJd2x1biA9IDA7CisJCXdhbnRfd2x1biA9IDA7CiAJCWx1bl9jbnQgPSBuOwogCX0KIAlvbmVfbHVuID0gKHN0cnVjdCBzY3NpX2x1biAqKSAmYXJyWzhdOwpAQCAtMjQ1NCw3ICszMjYyLDcgQEAKIAkJCSAgICAodXBwZXIgfCAoU0FNMl9MVU5fQUREUkVTU19NRVRIT0QgPDwgNikpOwogCQlvbmVfbHVuW2ldLnNjc2lfbHVuWzFdID0gbHVuICYgMHhmZjsKIAl9Ci0JaWYgKHdsdW4pIHsKKwlpZiAod2FudF93bHVuKSB7CiAJCW9uZV9sdW5baV0uc2NzaV9sdW5bMF0gPSAoU0FNMl9XTFVOX1JFUE9SVF9MVU5TID4+IDgpICYgMHhmZjsKIAkJb25lX2x1bltpXS5zY3NpX2x1blsxXSA9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUyAmIDB4ZmY7CiAJCWkrKzsKQEAgLTI0NzYsOCArMzI4NCw4IEBACiAJLyogYmV0dGVyIG5vdCB0byB1c2UgdGVtcG9yYXJ5IGJ1ZmZlci4gKi8KIAlidWYgPSBrbWFsbG9jKHNjc2lfYnVmZmxlbihzY3ApLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZikgewotCQlta19zZW5zZV9idWZmZXIoc2NwLCBOT1RfUkVBRFksCi0JCQkJTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRSwgMCk7CisJCW1rX3NlbnNlX2J1ZmZlcihzY3AsIElMTEVHQUxfUkVRVUVTVCwgSU5TVUZGX1JFU19BU0MsCisJCQkJSU5TVUZGX1JFU19BU0NRKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCkBAIC0yNTAwLDYgKzMzMDgsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorcmVzcF94ZHdyaXRlcmVhZF8xMChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQoreworCXU4ICpjbWQgPSBzY3AtPmNtbmQ7CisJdTY0IGxiYTsKKwl1MzIgbnVtOworCWludCBlcnJzdHM7CisKKwlpZiAoIXNjc2lfYmlkaV9jbW5kKHNjcCkpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKHNjcCwgSUxMRUdBTF9SRVFVRVNULCBJTlNVRkZfUkVTX0FTQywKKwkJCQlJTlNVRkZfUkVTX0FTQ1EpOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJZXJyc3RzID0gcmVzcF9yZWFkX2R0MChzY3AsIGRldmlwKTsKKwlpZiAoZXJyc3RzKQorCQlyZXR1cm4gZXJyc3RzOworCWlmICghKGNtZFsxXSAmIDB4NCkpIHsJCS8qIERJU0FCTEVfV1JJVEUgaXMgbm90IHNldCAqLworCQllcnJzdHMgPSByZXNwX3dyaXRlX2R0MChzY3AsIGRldmlwKTsKKwkJaWYgKGVycnN0cykKKwkJCXJldHVybiBlcnJzdHM7CisJfQorCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMihjbWQgKyAyKTsKKwludW0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgNyk7CisJcmV0dXJuIHJlc3BfeGR3cml0ZXJlYWQoc2NwLCBsYmEsIG51bSwgZGV2aXApOworfQorCiAvKiBXaGVuIHRpbWVyIG9yIHRhc2tsZXQgZ29lcyBvZmYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICovCiBzdGF0aWMgdm9pZCBzZGVidWdfcV9jbWRfY29tcGxldGUodW5zaWduZWQgbG9uZyBpbmR4KQogewpAQCAtMjY3MiwxMCArMzUwNiw3IEBACiAJb3Blbl9kZXZpcC0+c2RiZ19ob3N0ID0gc2RiZ19ob3N0OwogCWF0b21pY19zZXQoJm9wZW5fZGV2aXAtPm51bV9pbl9xLCAwKTsKIAlzZXRfYml0KFNERUJVR19VQV9QT1IsIG9wZW5fZGV2aXAtPnVhc19ibSk7Ci0Jb3Blbl9kZXZpcC0+dXNlZCA9IDE7Ci0JaWYgKHNkZXYtPmx1biA9PSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMpCi0JCW9wZW5fZGV2aXAtPndsdW4gPSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMgJiAweGZmOwotCisJb3Blbl9kZXZpcC0+dXNlZCA9IHRydWU7CiAJcmV0dXJuIG9wZW5fZGV2aXA7CiB9CiAKQEAgLTI3MDEsMTAgKzM1MzIsNiBAQAogCWlmIChOVUxMID09IGRldmlwKQogCQlyZXR1cm4gMTsJLyogbm8gcmVzb3VyY2VzLCB3aWxsIGJlIG1hcmtlZCBvZmZsaW5lICovCiAJc2RwLT5ob3N0ZGF0YSA9IGRldmlwOwotCXNkcC0+dGFnZ2VkX3N1cHBvcnRlZCA9IDE7Ci0JaWYgKHNkcC0+aG9zdC0+Y21kX3Blcl9sdW4pCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkcCwgREVGX1RBR0dFRF9RVUVVSU5HLAotCQkJCQlERUZfQ01EX1BFUl9MVU4pOwogCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHNkcC0+cmVxdWVzdF9xdWV1ZSwgLTFVKTsKIAlpZiAoc2NzaV9kZWJ1Z19ub191bGQpCiAJCXNkcC0+bm9fdWxkX2F0dGFjaCA9IDE7CkBAIC0yNzIxLDcgKzM1NDgsNyBAQAogCQkgICAgICAgc2RwLT5ob3N0LT5ob3N0X25vLCBzZHAtPmNoYW5uZWwsIHNkcC0+aWQsIHNkcC0+bHVuKTsKIAlpZiAoZGV2aXApIHsKIAkJLyogbWFrZSB0aGlzIHNsb3QgYXZhaWxhYmxlIGZvciByZS11c2UgKi8KLQkJZGV2aXAtPnVzZWQgPSAwOworCQlkZXZpcC0+dXNlZCA9IGZhbHNlOwogCQlzZHAtPmhvc3RkYXRhID0gTlVMTDsKIAl9CiB9CkBAIC0zMTY2LDYgKzM5OTMsNyBAQAogbW9kdWxlX3BhcmFtX25hbWVkKHJlbW92YWJsZSwgc2NzaV9kZWJ1Z19yZW1vdmFibGUsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChzY3NpX2xldmVsLCBzY3NpX2RlYnVnX3Njc2lfbGV2ZWwsIGludCwgU19JUlVHTyk7CiBtb2R1bGVfcGFyYW1fbmFtZWQoc2VjdG9yX3NpemUsIHNjc2lfZGVidWdfc2VjdG9yX3NpemUsIGludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fbmFtZWQoc3RyaWN0LCBzY3NpX2RlYnVnX3N0cmljdCwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwogbW9kdWxlX3BhcmFtX25hbWVkKHVubWFwX2FsaWdubWVudCwgc2NzaV9kZWJ1Z191bm1hcF9hbGlnbm1lbnQsIGludCwgU19JUlVHTyk7CiBtb2R1bGVfcGFyYW1fbmFtZWQodW5tYXBfZ3JhbnVsYXJpdHksIHNjc2lfZGVidWdfdW5tYXBfZ3JhbnVsYXJpdHksIGludCwgU19JUlVHTyk7CiBtb2R1bGVfcGFyYW1fbmFtZWQodW5tYXBfbWF4X2Jsb2Nrcywgc2NzaV9kZWJ1Z191bm1hcF9tYXhfYmxvY2tzLCBpbnQsIFNfSVJVR08pOwpAQCAtMzE4NSw3ICs0MDEzLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoYXRvLCAiYXBwbGljYXRpb24gdGFnIG93bmVyc2hpcDogMD1kaXNrIDE9aG9zdCAoZGVmPTEpIik7CiBNT0RVTEVfUEFSTV9ERVNDKGNsdXN0ZXJpbmcsICJ3aGVuIHNldCBlbmFibGVzIGxhcmdlciB0cmFuc2ZlcnMgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkZWxheSwgInJlc3BvbnNlIGRlbGF5IChkZWY9MSBqaWZmeSk7IDA6aW1tLCAtMSwtMjp0aW55Iik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRldl9zaXplX21iLCAic2l6ZSBpbiBNQiBvZiByYW0gc2hhcmVkIGJ5IGRldnMoZGVmPTgpIik7CitNT0RVTEVfUEFSTV9ERVNDKGRldl9zaXplX21iLCAic2l6ZSBpbiBNaUIgb2YgcmFtIHNoYXJlZCBieSBkZXZzKGRlZj04KSIpOwogTU9EVUxFX1BBUk1fREVTQyhkaWYsICJkYXRhIGludGVncml0eSBmaWVsZCB0eXBlOiAwLTMgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkaXgsICJkYXRhIGludGVncml0eSBleHRlbnNpb25zIG1hc2sgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkc2Vuc2UsICJ1c2UgZGVzY3JpcHRvciBzZW5zZSBmb3JtYXQoZGVmPTAgLT4gZml4ZWQpIik7CkBAIC0zMjEyLDExICs0MDQwLDEyIEBACiBNT0RVTEVfUEFSTV9ERVNDKHJlbW92YWJsZSwgImNsYWltIHRvIGhhdmUgcmVtb3ZhYmxlIG1lZGlhIChkZWY9MCkiKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2NzaV9sZXZlbCwgIlNDU0kgbGV2ZWwgdG8gc2ltdWxhdGUoZGVmPTZbU1BDLTRdKSIpOwogTU9EVUxFX1BBUk1fREVTQyhzZWN0b3Jfc2l6ZSwgImxvZ2ljYWwgYmxvY2sgc2l6ZSBpbiBieXRlcyAoZGVmPTUxMikiKTsKK01PRFVMRV9QQVJNX0RFU0Moc3RyaWN0LCAic3RyaWN0ZXIgY2hlY2tzOiByZXNlcnZlZCBmaWVsZCBpbiBjZGIgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyh1bm1hcF9hbGlnbm1lbnQsICJsb3dlc3QgYWxpZ25lZCB0aGluIHByb3Zpc2lvbmluZyBsYmEgKGRlZj0wKSIpOwogTU9EVUxFX1BBUk1fREVTQyh1bm1hcF9ncmFudWxhcml0eSwgInRoaW4gcHJvdmlzaW9uaW5nIGdyYW51bGFyaXR5IGluIGJsb2NrcyAoZGVmPTEpIik7CiBNT0RVTEVfUEFSTV9ERVNDKHVubWFwX21heF9ibG9ja3MsICJtYXggIyBvZiBibG9ja3MgY2FuIGJlIHVubWFwcGVkIGluIG9uZSBjbWQgKGRlZj0weGZmZmZmZmZmKSIpOwogTU9EVUxFX1BBUk1fREVTQyh1bm1hcF9tYXhfZGVzYywgIm1heCAjIG9mIHJhbmdlcyB0aGF0IGNhbiBiZSB1bm1hcHBlZCBpbiBvbmUgY21kIChkZWY9MjU2KSIpOwotTU9EVUxFX1BBUk1fREVTQyh2aXJ0dWFsX2diLCAidmlydHVhbCBnaWdhYnl0ZSBzaXplIChkZWY9MCAtPiB1c2UgZGV2X3NpemVfbWIpIik7CitNT0RVTEVfUEFSTV9ERVNDKHZpcnR1YWxfZ2IsICJ2aXJ0dWFsIGdpZ2FieXRlIChHaUIpIHNpemUgKGRlZj0wIC0+IHVzZSBkZXZfc2l6ZV9tYikiKTsKIE1PRFVMRV9QQVJNX0RFU0ModnBkX3VzZV9ob3N0bm8sICIwIC0+IGRldiBpZHMgaWdub3JlIGhvc3RubyAoZGVmPTEgLT4gdW5pcXVlIGRldiBpZHMpIik7CiBNT0RVTEVfUEFSTV9ERVNDKHdyaXRlX3NhbWVfbGVuZ3RoLCAiTWF4aW11bSBibG9ja3MgcGVyIFdSSVRFIFNBTUUgY21kIChkZWY9MHhmZmZmKSIpOwogCkBAIC0zMzgyLDYgKzQyMTEsMTYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIG9wdHNfZG9uZToKIAlzY3NpX2RlYnVnX29wdHMgPSBvcHRzOworCWlmIChTQ1NJX0RFQlVHX09QVF9SRUNPVkVSRURfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9UUkFOU1BPUlRfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9ESUZfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9ESVhfRVJSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9TSE9SVF9UUkFOU0ZFUiAmIG9wdHMpCisJCXNkZWJ1Z19hbnlfaW5qZWN0aW5nX29wdCA9IHRydWU7CiAJYXRvbWljX3NldCgmc2RlYnVnX2NtbmRfY291bnQsIDApOwogCWF0b21pY19zZXQoJnNkZWJ1Z19hX3RzZiwgMCk7CiAJcmV0dXJuIGNvdW50OwpAQCAtMzU4OSwxMiArNDQyOCwyNSBAQAogCQkJCXNpemVfdCBjb3VudCkKIHsKICAgICAgICAgaW50IG47CisJYm9vbCBjaGFuZ2VkOwogCiAJaWYgKChjb3VudCA+IDApICYmICgxID09IHNzY2FuZihidWYsICIlZCIsICZuKSkgJiYgKG4gPj0gMCkpIHsKKwkJY2hhbmdlZCA9IChzY3NpX2RlYnVnX3ZpcnR1YWxfZ2IgIT0gbik7CiAJCXNjc2lfZGVidWdfdmlydHVhbF9nYiA9IG47Ci0KIAkJc2RlYnVnX2NhcGFjaXR5ID0gZ2V0X3NkZWJ1Z19jYXBhY2l0eSgpOworCQlpZiAoY2hhbmdlZCkgeworCQkJc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKnNkaHA7CisJCQlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkcDsKIAorCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGhwLCAmc2RlYnVnX2hvc3RfbGlzdCwKKwkJCQkJICAgIGhvc3RfbGlzdCkgeworCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHAsICZzZGhwLT5kZXZfaW5mb19saXN0LAorCQkJCQkJICAgIGRldl9saXN0KSB7CisJCQkJCXNldF9iaXQoU0RFQlVHX1VBX0NBUEFDSVRZX0NIQU5HRUQsCisJCQkJCQlkcC0+dWFzX2JtKTsKKwkJCQl9CisJCQl9CisJCX0KIAkJcmV0dXJuIGNvdW50OwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTM3NDAsNiArNDU5MiwyMyBAQAogfQogc3RhdGljIERSSVZFUl9BVFRSX1JXKGhvc3RfbG9jayk7CiAKK3N0YXRpYyBzc2l6ZV90IHN0cmljdF9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsICEhc2NzaV9kZWJ1Z19zdHJpY3QpOworfQorc3RhdGljIHNzaXplX3Qgc3RyaWN0X3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQpCit7CisJaW50IG47CisKKwlpZiAoKGNvdW50ID4gMCkgJiYgKDEgPT0gc3NjYW5mKGJ1ZiwgIiVkIiwgJm4pKSAmJiAobiA+PSAwKSkgeworCQlzY3NpX2RlYnVnX3N0cmljdCA9IChuID4gMCk7CisJCXJldHVybiBjb3VudDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgRFJJVkVSX0FUVFJfUlcoc3RyaWN0KTsKKwogCiAvKiBOb3RlOiBUaGUgZm9sbG93aW5nIGFycmF5IGNyZWF0ZXMgYXR0cmlidXRlIGZpbGVzIGluIHRoZQogICAgL3N5cy9idXMvcHNldWRvL2RyaXZlcnMvc2NzaV9kZWJ1ZyBkaXJlY3RvcnkuIFRoZSBhZHZhbnRhZ2Ugb2YgdGhlc2UKQEAgLTM3NzUsNiArNDY0NCw3IEBACiAJJmRyaXZlcl9hdHRyX3JlbW92YWJsZS5hdHRyLAogCSZkcml2ZXJfYXR0cl9ob3N0X2xvY2suYXR0ciwKIAkmZHJpdmVyX2F0dHJfbmRlbGF5LmF0dHIsCisJJmRyaXZlcl9hdHRyX3N0cmljdC5hdHRyLAogCU5VTEwsCiB9OwogQVRUUklCVVRFX0dST1VQUyhzZGVidWdfZHJ2KTsKQEAgLTQwODcsMzk2ICs0OTU3LDkgQEAKIH0KIAogc3RhdGljIGludAotc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCi17Ci0JdW5zaWduZWQgY2hhciAqY21kID0gU0NwbnQtPmNtbmQ7Ci0JaW50IGxlbiwgazsKLQl1bnNpZ25lZCBpbnQgbnVtOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBsYmE7Ci0JdTMyIGVpX2xiYTsKLQlpbnQgZXJyc3RzID0gMDsKLQlpbnQgdGFyZ2V0ID0gU0NwbnQtPmRldmljZS0+aWQ7Ci0Jc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXAgPSBOVUxMOwotCWludCBpbmpfcmVjb3ZlcmVkID0gMDsKLQlpbnQgaW5qX3RyYW5zcG9ydCA9IDA7Ci0JaW50IGlual9kaWYgPSAwOwotCWludCBpbmpfZGl4ID0gMDsKLQlpbnQgaW5qX3Nob3J0ID0gMDsKLQlpbnQgZGVsYXlfb3ZlcnJpZGUgPSAwOwotCWludCB1bm1hcCA9IDA7Ci0KLQlzY3NpX3NldF9yZXNpZChTQ3BudCwgMCk7Ci0JaWYgKChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykgJiYKLQkgICAgIShTQ1NJX0RFQlVHX09QVF9OT19DREJfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpKSB7Ci0JCWNoYXIgYlsxMjBdOwotCQlpbnQgbjsKLQotCQlsZW4gPSBTQ3BudC0+Y21kX2xlbjsKLQkJaWYgKGxlbiA+IDMyKQotCQkJc3RyY3B5KGIsICJ0b28gbG9uZywgb3ZlciAzMiBieXRlcyIpOwotCQllbHNlIHsKLQkJCWZvciAoayA9IDAsIG4gPSAwOyBrIDwgbGVuOyArK2spCi0JCQkJbiArPSBzY25wcmludGYoYiArIG4sIHNpemVvZihiKSAtIG4sICIlMDJ4ICIsCi0JCQkJCSAgICAgICAodW5zaWduZWQgaW50KWNtZFtrXSk7Ci0JCX0KLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBTQ3BudC0+ZGV2aWNlLCAiJXM6IGNtZCAlc1xuIiwgbXlfbmFtZSwKLQkJCSAgICBiKTsKLQl9Ci0KLQlpZiAoKFNDcG50LT5kZXZpY2UtPmx1biA+PSBzY3NpX2RlYnVnX21heF9sdW5zKSAmJgotCSAgICAoU0NwbnQtPmRldmljZS0+bHVuICE9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUykpCi0JCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBOVUxMLCBESURfTk9fQ09OTkVDVCA8PCAxNiwgMCk7Ci0JZGV2aXAgPSBkZXZJbmZvUmVnKFNDcG50LT5kZXZpY2UpOwotCWlmIChOVUxMID09IGRldmlwKQotCQlyZXR1cm4gc2NoZWR1bGVfcmVzcChTQ3BudCwgTlVMTCwgRElEX05PX0NPTk5FQ1QgPDwgMTYsIDApOwotCi0JaWYgKChzY3NpX2RlYnVnX2V2ZXJ5X250aCAhPSAwKSAmJgotCSAgICAoYXRvbWljX2luY19yZXR1cm4oJnNkZWJ1Z19jbW5kX2NvdW50KSA+PQotCSAgICAgYWJzKHNjc2lfZGVidWdfZXZlcnlfbnRoKSkpIHsKLQkJYXRvbWljX3NldCgmc2RlYnVnX2NtbmRfY291bnQsIDApOwotCQlpZiAoc2NzaV9kZWJ1Z19ldmVyeV9udGggPCAtMSkKLQkJCXNjc2lfZGVidWdfZXZlcnlfbnRoID0gLTE7Ci0JCWlmIChTQ1NJX0RFQlVHX09QVF9USU1FT1VUICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJcmV0dXJuIDA7IC8qIGlnbm9yZSBjb21tYW5kIGNhdXNpbmcgdGltZW91dCAqLwotCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9NQUNfVElNRU9VVCAmIHNjc2lfZGVidWdfb3B0cyAmJgotCQkJIHNjc2lfbWVkaXVtX2FjY2Vzc19jb21tYW5kKFNDcG50KSkKLQkJCXJldHVybiAwOyAvKiB0aW1lIG91dCByZWFkcyBhbmQgd3JpdGVzICovCi0JCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX1JFQ09WRVJFRF9FUlIgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlpbmpfcmVjb3ZlcmVkID0gMTsgLyogdG8gcmVhZHMgYW5kIHdyaXRlcyBiZWxvdyAqLwotCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9UUkFOU1BPUlRfRVJSICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJaW5qX3RyYW5zcG9ydCA9IDE7IC8qIHRvIHJlYWRzIGFuZCB3cml0ZXMgYmVsb3cgKi8KLQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfRElGX0VSUiAmIHNjc2lfZGVidWdfb3B0cykKLQkJCWlual9kaWYgPSAxOyAvKiB0byByZWFkcyBhbmQgd3JpdGVzIGJlbG93ICovCi0JCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJWF9FUlIgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlpbmpfZGl4ID0gMTsgLyogdG8gcmVhZHMgYW5kIHdyaXRlcyBiZWxvdyAqLwotCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9TSE9SVF9UUkFOU0ZFUiAmIHNjc2lfZGVidWdfb3B0cykKLQkJCWlual9zaG9ydCA9IDE7Ci0JfQotCi0JaWYgKGRldmlwLT53bHVuKSB7Ci0JCXN3aXRjaCAoKmNtZCkgewotCQljYXNlIElOUVVJUlk6Ci0JCWNhc2UgUkVRVUVTVF9TRU5TRToKLQkJY2FzZSBURVNUX1VOSVRfUkVBRFk6Ci0JCWNhc2UgUkVQT1JUX0xVTlM6Ci0JCQlicmVhazsgIC8qIG9ubHkgYWxsb3dhYmxlIHdsdW4gY29tbWFuZHMgKi8KLQkJZGVmYXVsdDoKLQkJCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKLQkJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBPcGNvZGU6IDB4JXggIgotCQkJCSAgICAgICAibm90IHN1cHBvcnRlZCBmb3Igd2x1blxuIiwgKmNtZCk7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9PUENPREUsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBkZXZpcCwgZXJyc3RzLCAwKTsKLQkJfQotCX0KLQotCXN3aXRjaCAoKmNtZCkgewotCWNhc2UgSU5RVUlSWTogICAgIC8qIG1hbmRhdG9yeSwgaWdub3JlIHVuaXQgYXR0ZW50aW9uICovCi0JCWRlbGF5X292ZXJyaWRlID0gMTsKLQkJZXJyc3RzID0gcmVzcF9pbnF1aXJ5KFNDcG50LCB0YXJnZXQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVFVRVNUX1NFTlNFOgkvKiBtYW5kYXRvcnksIGlnbm9yZSB1bml0IGF0dGVudGlvbiAqLwotCQlkZWxheV9vdmVycmlkZSA9IDE7Ci0JCWVycnN0cyA9IHJlc3BfcmVxdWVzdHMoU0NwbnQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVpFUk9fVU5JVDoJLyogYWN0dWFsbHkgdGhpcyBpcyBSRVdJTkQgZm9yIFNTQyAqLwotCWNhc2UgU1RBUlRfU1RPUDoKLQkJZXJyc3RzID0gcmVzcF9zdGFydF9zdG9wKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgQUxMT1dfTUVESVVNX1JFTU9WQUw6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX09OTFksIGRldmlwKTsKLQkJaWYgKGVycnN0cykKLQkJCWJyZWFrOwotCQlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBNZWRpdW0gcmVtb3ZhbCAlc1xuIiwKLQkJCSAgICAgICBjbWRbNF0gPyAiaW5oaWJpdGVkIiA6ICJlbmFibGVkIik7Ci0JCWJyZWFrOwotCWNhc2UgU0VORF9ESUFHTk9TVElDOiAgICAgLyogbWFuZGF0b3J5ICovCi0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX09OTFksIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBURVNUX1VOSVRfUkVBRFk6ICAgICAvKiBtYW5kYXRvcnkgKi8KLQkJLyogZGVsYXlfb3ZlcnJpZGUgPSAxOyAqLwotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19UVVIsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVNFUlZFOgotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19PTkxZLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgUkVTRVJWRV8xMDoKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCBVQVNfT05MWSwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFJFTEVBU0U6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX09OTFksIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRUxFQVNFXzEwOgotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19PTkxZLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgUkVBRF9DQVBBQ0lUWToKLQkJZXJyc3RzID0gcmVzcF9yZWFkY2FwKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46Ci0JCWlmIChjbWRbMV0gPT0gU0FJX1JFQURfQ0FQQUNJVFlfMTYpCi0JCQllcnJzdHMgPSByZXNwX3JlYWRjYXAxNihTQ3BudCwgZGV2aXApOwotCQllbHNlIGlmIChjbWRbMV0gPT0gU0FJX0dFVF9MQkFfU1RBVFVTKSB7Ci0KLQkJCWlmIChzY3NpX2RlYnVnX2xicCgpID09IDApIHsKLQkJCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJCUlOVkFMSURfQ09NTUFORF9PUENPREUsIDApOwotCQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQl9IGVsc2UKLQkJCQllcnJzdHMgPSByZXNwX2dldF9sYmFfc3RhdHVzKFNDcG50LCBkZXZpcCk7Ci0JCX0gZWxzZSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9PUENPREUsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJfQotCQlicmVhazsKLQljYXNlIE1BSU5URU5BTkNFX0lOOgotCQlpZiAoTUlfUkVQT1JUX1RBUkdFVF9QR1MgIT0gY21kWzFdKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9PUENPREUsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJCWJyZWFrOwotCQl9Ci0JCWVycnN0cyA9IHJlc3BfcmVwb3J0X3RndHBncyhTQ3BudCwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFJFQURfMTY6Ci0JY2FzZSBSRUFEXzEyOgotCWNhc2UgUkVBRF8xMDoKLQkJLyogUkVBRHsxMCwxMiwxNn0gYW5kIERJRiBUeXBlIDIgYXJlIG5hdHVyYWwgZW5lbWllcyAqLwotCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04gJiYKLQkJICAgIGNtZFsxXSAmIDB4ZTApIHsKLQkJCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX0NPTU1BTkRfT1BDT0RFLCAwKTsKLQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICgoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gfHwKLQkJICAgICBzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTikgJiYKLQkJICAgIChjbWRbMV0gJiAweGUwKSA9PSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJVbnByb3RlY3RlZCBSRC9XUiB0byBESUYgZGV2aWNlXG4iKTsKLQotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIFJFQURfNjoKLXJlYWQ6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOwotCi0JCWlmIChpbmpfc2hvcnQpCi0JCQludW0gLz0gMjsKLQotCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwotCQlpZiAoaW5qX3JlY292ZXJlZCAmJiAoMCA9PSBlcnJzdHMpKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIFJFQ09WRVJFRF9FUlJPUiwKLQkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKLQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCX0gZWxzZSBpZiAoaW5qX3RyYW5zcG9ydCAmJiAoMCA9PSBlcnJzdHMpKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIEFCT1JURURfQ09NTUFORCwKLQkJCQkJVFJBTlNQT1JUX1BST0JMRU0sIEFDS19OQUtfVE8pOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJfSBlbHNlIGlmIChpbmpfZGlmICYmICgwID09IGVycnN0cykpIHsKLQkJCS8qIExvZ2ljYWwgYmxvY2sgZ3VhcmQgY2hlY2sgZmFpbGVkICovCi0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgMSk7Ci0JCQllcnJzdHMgPSBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCX0gZWxzZSBpZiAoaW5qX2RpeCAmJiAoMCA9PSBlcnJzdHMpKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgMSk7Ci0JCQllcnJzdHMgPSBpbGxlZ2FsX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBSRVBPUlRfTFVOUzoJLyogbWFuZGF0b3J5LCBpZ25vcmUgdW5pdCBhdHRlbnRpb24gKi8KLQkJZGVsYXlfb3ZlcnJpZGUgPSAxOwotCQllcnJzdHMgPSByZXNwX3JlcG9ydF9sdW5zKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgVkVSSUZZOgkJLyogMTAgYnl0ZSBTQkMtMiBjb21tYW5kICovCi0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFdSSVRFXzE2OgotCWNhc2UgV1JJVEVfMTI6Ci0JY2FzZSBXUklURV8xMDoKLQkJLyogV1JJVEV7MTAsMTIsMTZ9IGFuZCBESUYgVHlwZSAyIGFyZSBuYXR1cmFsIGVuZW1pZXMgKi8KLQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCi0JCSAgICBjbWRbMV0gJiAweGUwKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OIHx8Ci0JCSAgICAgc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pICYmCi0JCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5wcm90ZWN0ZWQgUkQvV1IgdG8gRElGIGRldmljZVxuIik7Ci0KLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBXUklURV82Ogotd3JpdGU6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOwotCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhKTsKLQkJaWYgKGlual9yZWNvdmVyZWQgJiYgKDAgPT0gZXJyc3RzKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBSRUNPVkVSRURfRVJST1IsCi0JCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQl9IGVsc2UgaWYgKGlual9kaWYgJiYgKDAgPT0gZXJyc3RzKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBBQk9SVEVEX0NPTU1BTkQsIDB4MTAsIDEpOwotCQkJZXJyc3RzID0gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OwotCQl9IGVsc2UgaWYgKGlual9kaXggJiYgKDAgPT0gZXJyc3RzKSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsIDEpOwotCQkJZXJyc3RzID0gaWxsZWdhbF9jb25kaXRpb25fcmVzdWx0OwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgV1JJVEVfU0FNRV8xNjoKLQljYXNlIFdSSVRFX1NBTUU6Ci0JCWlmIChjbWRbMV0gJiAweDgpIHsKLQkJCWlmICgoKmNtZCA9PSBXUklURV9TQU1FXzE2ICYmIHNjc2lfZGVidWdfbGJwd3MgPT0gMCkgfHwKLQkJCSAgICAoKmNtZCA9PSBXUklURV9TQU1FICYmIHNjc2lfZGVidWdfbGJwd3MxMCA9PSAwKSkgewotCQkJCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOwotCQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQl9IGVsc2UKLQkJCQl1bm1hcCA9IDE7Ci0JCX0KLQkJaWYgKGVycnN0cykKLQkJCWJyZWFrOwotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIFVBU19UVVIsIGRldmlwKTsKLQkJaWYgKGVycnN0cykKLQkJCWJyZWFrOwotCQlpZiAoc2NzaV9kZWJ1Z19mYWtlX3J3KQotCQkJYnJlYWs7Ci0JCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtLCAmZWlfbGJhKTsKLQkJZXJyc3RzID0gcmVzcF93cml0ZV9zYW1lKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhLCB1bm1hcCk7Ci0JCWJyZWFrOwotCWNhc2UgVU5NQVA6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQotCQlpZiAoc2NzaV9kZWJ1Z191bm1hcF9tYXhfZGVzYyA9PSAwIHx8IHNjc2lfZGVidWdfbGJwdSA9PSAwKSB7Ci0JCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQl9IGVsc2UKLQkJCWVycnN0cyA9IHJlc3BfdW5tYXAoU0NwbnQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RFX1NFTlNFOgotCWNhc2UgTU9ERV9TRU5TRV8xMDoKLQkJZXJyc3RzID0gcmVzcF9tb2RlX3NlbnNlKFNDcG50LCB0YXJnZXQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RFX1NFTEVDVDoKLQkJZXJyc3RzID0gcmVzcF9tb2RlX3NlbGVjdChTQ3BudCwgMSwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIE1PREVfU0VMRUNUXzEwOgotCQllcnJzdHMgPSByZXNwX21vZGVfc2VsZWN0KFNDcG50LCAwLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgTE9HX1NFTlNFOgotCQllcnJzdHMgPSByZXNwX2xvZ19zZW5zZShTQ3BudCwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOgotCQlkZWxheV9vdmVycmlkZSA9IDE7Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFdSSVRFX0JVRkZFUjoKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCBVQVNfT05MWSwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFhEV1JJVEVSRUFEXzEwOgotCQlpZiAoIXNjc2lfYmlkaV9jbW5kKFNDcG50KSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKLQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgVUFTX1RVUiwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOwotCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWVycnN0cyA9IHJlc3BfeGR3cml0ZXJlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgVkFSSUFCTEVfTEVOR1RIX0NNRDoKLQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OKSB7Ci0KLQkJCWlmICgoY21kWzEwXSAmIDB4ZTApID09IDApCi0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJVbnByb3RlY3RlZCBSRC9XUiB0byBESUYgZGV2aWNlXG4iKTsKLQotCQkJaWYgKGNtZFs5XSA9PSBSRUFEXzMyKSB7Ci0JCQkJQlVHX09OKFNDcG50LT5jbWRfbGVuIDwgMzIpOwotCQkJCWdvdG8gcmVhZDsKLQkJCX0KLQotCQkJaWYgKGNtZFs5XSA9PSBXUklURV8zMikgewotCQkJCUJVR19PTihTQ3BudC0+Y21kX2xlbiA8IDMyKTsKLQkJCQlnb3RvIHdyaXRlOwotCQkJfQotCQl9Ci0KLQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOwotCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQlicmVhazsKLQljYXNlIDB4ODU6Ci0JCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKLQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQtPmRldmljZSwKLQkJCSIlczogQVRBIFBBU1MtVEhST1VHSCgxNikgbm90IHN1cHBvcnRlZFxuIiwgbXlfbmFtZSk7Ci0JCW1rX3NlbnNlX2J1ZmZlcihTQ3BudCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCUlOVkFMSURfT1BDT0RFLCAwKTsKLQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBTQ3BudC0+ZGV2aWNlLAotCQkJCSAgICAiJXM6IE9wY29kZTogMHgleCBub3Qgc3VwcG9ydGVkXG4iLAotCQkJCSAgICBteV9uYW1lLCAqY21kKTsKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCBVQVNfT05MWSwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7CS8qIFVuaXQgYXR0ZW50aW9uIHRha2VzIHByZWNlZGVuY2UgKi8KLQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfT1BDT0RFLCAwKTsKLQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBkZXZpcCwgZXJyc3RzLAotCQkJICAgICAoZGVsYXlfb3ZlcnJpZGUgPyAwIDogc2NzaV9kZWJ1Z19kZWxheSkpOwotfQotCi1zdGF0aWMgaW50Ci1zZGVidWdfcXVldWVjb21tYW5kX2xvY2tfb3Jfbm90KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0JaWYgKHNjc2lfZGVidWdfaG9zdF9sb2NrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwotCQlpbnQgcmM7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgaWZsYWdzKTsKLQkJcmMgPSBzY3NpX2RlYnVnX3F1ZXVlY29tbWFuZChjbWQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGlmbGFncyk7Ci0JCXJldHVybiByYzsKLQl9IGVsc2UKLQkJcmV0dXJuIHNjc2lfZGVidWdfcXVldWVjb21tYW5kKGNtZCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNkZWJ1Z19jaGFuZ2VfcWRlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbikKK3NkZWJ1Z19jaGFuZ2VfcWRlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCkKIHsKIAlpbnQgbnVtX2luX3EgPSAwOwotCWludCBiYWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwOwogCkBAIC00NDg4LDQzICs0OTcxLDE4IEBACiAJfQogCW51bV9pbl9xID0gYXRvbWljX3JlYWQoJmRldmlwLT5udW1faW5fcSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWVkX2Fycl9sb2NrLCBpZmxhZ3MpOwotCWlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfREVGQVVMVCB8fCByZWFzb24gPT0gU0NTSV9RREVQVEhfUkFNUF9VUCkgewotCQlpZiAocWRlcHRoIDwgMSkKLQkJCXFkZXB0aCA9IDE7Ci0JCS8qIGFsbG93IHRvIGV4Y2VlZCBtYXggaG9zdCBxdWV1ZWRfYXJyIGVsZW1lbnRzIGZvciB0ZXN0aW5nICovCi0JCWlmIChxZGVwdGggPiBTQ1NJX0RFQlVHX0NBTlFVRVVFICsgMTApCi0JCQlxZGVwdGggPSBTQ1NJX0RFQlVHX0NBTlFVRVVFICsgMTA7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOwotCX0gZWxzZSBpZiAocmVhc29uID09IFNDU0lfUURFUFRIX1FGVUxMKQotCQlzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKTsKLQllbHNlCi0JCWJhZCA9IDE7Ci0JaWYgKGJhZCkKLQkJc2Rldl9wcmludGsoS0VSTl9XQVJOSU5HLCBzZGV2LAotCQkJICAgICIlczogdW5rbm93biByZWFzb249MHgleFxuIiwgX19mdW5jX18sIHJlYXNvbik7Ci0JaWYgKFNDU0lfREVCVUdfT1BUX1FfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpIHsKLQkJaWYgKFNDU0lfUURFUFRIX1FGVUxMID09IHJlYXNvbikKLQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKLQkJCSAgICAiJXM6IC0+ICVkLCBudW1faW5fcT0lZCwgcmVhc29uOiBxdWV1ZSBmdWxsXG4iLAotCQkJCSAgICBfX2Z1bmNfXywgcWRlcHRoLCBudW1faW5fcSk7Ci0JCWVsc2UgewotCQkJY29uc3QgY2hhciAqY3A7CiAKLQkJCXN3aXRjaCAocmVhc29uKSB7Ci0JCQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JCQkJY3AgPSAiZGVmYXVsdCAoc3lzZnMgPykiOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQkJCWNwID0gInJhbXAgdXAiOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQljcCA9ICJ1bmtub3duIjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKLQkJCQkgICAgIiVzOiBxZGVwdGg9JWQsIG51bV9pbl9xPSVkLCByZWFzb246ICVzXG4iLAotCQkJCSAgICBfX2Z1bmNfXywgcWRlcHRoLCBudW1faW5fcSwgY3ApOwotCQl9CisJaWYgKHFkZXB0aCA8IDEpCisJCXFkZXB0aCA9IDE7CisJLyogYWxsb3cgdG8gZXhjZWVkIG1heCBob3N0IHF1ZXVlZF9hcnIgZWxlbWVudHMgZm9yIHRlc3RpbmcgKi8KKwlpZiAocWRlcHRoID4gU0NTSV9ERUJVR19DQU5RVUVVRSArIDEwKQorCQlxZGVwdGggPSBTQ1NJX0RFQlVHX0NBTlFVRVVFICsgMTA7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoKTsKKworCWlmIChTQ1NJX0RFQlVHX09QVF9RX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKSB7CisJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCSAgICAiJXM6IHFkZXB0aD0lZCwgbnVtX2luX3E9JWRcbiIsCisJCQkgICAgX19mdW5jX18sIHFkZXB0aCwgbnVtX2luX3EpOwogCX0KIAlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CiB9CkBAIC00NTMyLDE0ICs0OTkwLDcgQEAKIHN0YXRpYyBpbnQKIHNkZWJ1Z19jaGFuZ2VfcXR5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcXR5cGUpCiB7Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgcXR5cGUpOwotCQlpZiAocXR5cGUpCi0JCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCk7Ci0JCWVsc2UKLQkJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCX0gZWxzZQotCQlxdHlwZSA9IDA7CisJcXR5cGUgPSBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlKHNkZXYsIHF0eXBlKTsKIAlpZiAoU0NTSV9ERUJVR19PUFRfUV9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykgewogCQljb25zdCBjaGFyICpjcDsKIApAQCAtNDU2Miw2ICs1MDEzLDE5MyBAQAogCXJldHVybiBxdHlwZTsKIH0KIAorc3RhdGljIGludAorY2hlY2tfaW5qZWN0KHN0cnVjdCBzY3NpX2NtbmQgKnNjcCkKK3sKKwlzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCAqZXAgPSBzY3NpX2NtZF9wcml2KHNjcCk7CisKKwltZW1zZXQoZXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCkpOworCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzZGVidWdfY21uZF9jb3VudCkgPj0KKwkgICAgYWJzKHNjc2lfZGVidWdfZXZlcnlfbnRoKSkgeworCQlhdG9taWNfc2V0KCZzZGVidWdfY21uZF9jb3VudCwgMCk7CisJCWlmIChzY3NpX2RlYnVnX2V2ZXJ5X250aCA8IC0xKQorCQkJc2NzaV9kZWJ1Z19ldmVyeV9udGggPSAtMTsKKwkJaWYgKFNDU0lfREVCVUdfT1BUX1RJTUVPVVQgJiBzY3NpX2RlYnVnX29wdHMpCisJCQlyZXR1cm4gMTsgLyogaWdub3JlIGNvbW1hbmQgY2F1c2luZyB0aW1lb3V0ICovCisJCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX01BQ19USU1FT1VUICYgc2NzaV9kZWJ1Z19vcHRzICYmCisJCQkgc2NzaV9tZWRpdW1fYWNjZXNzX2NvbW1hbmQoc2NwKSkKKwkJCXJldHVybiAxOyAvKiB0aW1lIG91dCByZWFkcyBhbmQgd3JpdGVzICovCisJCWlmIChzZGVidWdfYW55X2luamVjdGluZ19vcHQpIHsKKwkJCWludCBvcHRzID0gc2NzaV9kZWJ1Z19vcHRzOworCisJCQlpZiAoU0NTSV9ERUJVR19PUFRfUkVDT1ZFUkVEX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual9yZWNvdmVyZWQgPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfVFJBTlNQT1JUX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual90cmFuc3BvcnQgPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfRElGX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual9kaWYgPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfRElYX0VSUiAmIG9wdHMpCisJCQkJZXAtPmlual9kaXggPSB0cnVlOworCQkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfU0hPUlRfVFJBTlNGRVIgJiBvcHRzKQorCQkJCWVwLT5pbmpfc2hvcnQgPSB0cnVlOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzY3NpX2RlYnVnX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3ApCit7CisJdTggc2RlYl9pOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2NwLT5kZXZpY2U7CisJY29uc3Qgc3RydWN0IG9wY29kZV9pbmZvX3QgKm9pcDsKKwljb25zdCBzdHJ1Y3Qgb3Bjb2RlX2luZm9fdCAqcl9vaXA7CisJc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXA7CisJdTggKmNtZCA9IHNjcC0+Y21uZDsKKwlpbnQgKCpyX3BmcCkoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopOworCWludCBrLCBuYTsKKwlpbnQgZXJyc3RzID0gMDsKKwlpbnQgZXJyc3RzX25vX2Nvbm5lY3QgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwl1MzIgZmxhZ3M7CisJdTE2IHNhOworCXU4IG9wY29kZSA9IGNtZFswXTsKKwlib29sIGhhc193bHVuX3JsOworCWJvb2wgZGVidWcgPSAhIShTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cyk7CisKKwlzY3NpX3NldF9yZXNpZChzY3AsIDApOworCWlmIChkZWJ1ZyAmJiAhKFNDU0lfREVCVUdfT1BUX05PX0NEQl9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykpIHsKKwkJY2hhciBiWzEyMF07CisJCWludCBuLCBsZW4sIHNiOworCisJCWxlbiA9IHNjcC0+Y21kX2xlbjsKKwkJc2IgPSAoaW50KXNpemVvZihiKTsKKwkJaWYgKGxlbiA+IDMyKQorCQkJc3RyY3B5KGIsICJ0b28gbG9uZywgb3ZlciAzMiBieXRlcyIpOworCQllbHNlIHsKKwkJCWZvciAoayA9IDAsIG4gPSAwOyBrIDwgbGVuICYmIG4gPCBzYjsgKytrKQorCQkJCW4gKz0gc2NucHJpbnRmKGIgKyBuLCBzYiAtIG4sICIlMDJ4ICIsCisJCQkJCSAgICAgICAodTMyKWNtZFtrXSk7CisJCX0KKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZHAsICIlczogY21kICVzXG4iLCBteV9uYW1lLCBiKTsKKwl9CisJaGFzX3dsdW5fcmwgPSAoc2RwLT5sdW4gPT0gU0FNMl9XTFVOX1JFUE9SVF9MVU5TKTsKKwlpZiAoKHNkcC0+bHVuID49IHNjc2lfZGVidWdfbWF4X2x1bnMpICYmICFoYXNfd2x1bl9ybCkKKwkJcmV0dXJuIHNjaGVkdWxlX3Jlc3Aoc2NwLCBOVUxMLCBlcnJzdHNfbm9fY29ubmVjdCwgMCk7CisKKwlzZGViX2kgPSBvcGNvZGVfaW5kX2FycltvcGNvZGVdOwkvKiBmdWxseSBtYXBwZWQgKi8KKwlvaXAgPSAmb3Bjb2RlX2luZm9fYXJyW3NkZWJfaV07CQkvKiBzYWZlIGlmIHRhYmxlIGNvbnNpc3RlbnQgKi8KKwlkZXZpcCA9IChzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopc2RwLT5ob3N0ZGF0YTsKKwlpZiAoIWRldmlwKSB7CisJCWRldmlwID0gZGV2SW5mb1JlZyhzZHApOworCQlpZiAoTlVMTCA9PSBkZXZpcCkKKwkJCXJldHVybiBzY2hlZHVsZV9yZXNwKHNjcCwgTlVMTCwgZXJyc3RzX25vX2Nvbm5lY3QsIDApOworCX0KKwluYSA9IG9pcC0+bnVtX2F0dGFjaGVkOworCXJfcGZwID0gb2lwLT5wZnA7CisJaWYgKG5hKSB7CS8qIG11bHRpcGxlIGNvbW1hbmRzIHdpdGggdGhpcyBvcGNvZGUgKi8KKwkJcl9vaXAgPSBvaXA7CisJCWlmIChGRl9TQSAmIHJfb2lwLT5mbGFncykgeworCQkJaWYgKEZfU0FfTE9XICYgb2lwLT5mbGFncykKKwkJCQlzYSA9IDB4MWYgJiBjbWRbMV07CisJCQllbHNlCisJCQkJc2EgPSBnZXRfdW5hbGlnbmVkX2JlMTYoY21kICsgOCk7CisJCQlmb3IgKGsgPSAwOyBrIDw9IG5hOyBvaXAgPSByX29pcC0+YXJycCArIGsrKykgeworCQkJCWlmIChvcGNvZGUgPT0gb2lwLT5vcGNvZGUgJiYgc2EgPT0gb2lwLT5zYSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7ICAgLyogc2luY2Ugbm8gc2VydmljZSBhY3Rpb24gb25seSBjaGVjayBvcGNvZGUgKi8KKwkJCWZvciAoayA9IDA7IGsgPD0gbmE7IG9pcCA9IHJfb2lwLT5hcnJwICsgaysrKSB7CisJCQkJaWYgKG9wY29kZSA9PSBvaXAtPm9wY29kZSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGsgPiBuYSkgeworCQkJaWYgKEZfU0FfTE9XICYgcl9vaXAtPmZsYWdzKQorCQkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDEsIDQpOworCQkJZWxzZSBpZiAoRl9TQV9ISUdIICYgcl9vaXAtPmZsYWdzKQorCQkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIDgsIDcpOworCQkJZWxzZQorCQkJCW1rX3NlbnNlX2ludmFsaWRfb3Bjb2RlKHNjcCk7CisJCQlnb3RvIGNoZWNrX2NvbmQ7CisJCX0KKwl9CS8qIGVsc2UgKHdoZW4gbmE9PTApIHdlIGFzc3VtZSB0aGUgb2lwIGlzIGEgbWF0Y2ggKi8KKwlmbGFncyA9IG9pcC0+ZmxhZ3M7CisJaWYgKEZfSU5WX09QICYgZmxhZ3MpIHsKKwkJbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc2NwKTsKKwkJZ290byBjaGVja19jb25kOworCX0KKwlpZiAoaGFzX3dsdW5fcmwgJiYgIShGX1JMX1dMVU5fT0sgJiBmbGFncykpIHsKKwkJaWYgKGRlYnVnKQorCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZHAsICJzY3NpX2RlYnVnOiBPcGNvZGU6ICIKKwkJCQkgICAgIjB4JXggbm90IHN1cHBvcnRlZCBmb3Igd2x1blxuIiwgb3Bjb2RlKTsKKwkJbWtfc2Vuc2VfaW52YWxpZF9vcGNvZGUoc2NwKTsKKwkJZ290byBjaGVja19jb25kOworCX0KKwlpZiAoc2NzaV9kZWJ1Z19zdHJpY3QpIHsJLyogY2hlY2sgY2RiIGFnYWluc3QgbWFzayAqLworCQl1OCByZW07CisJCWludCBqOworCisJCWZvciAoayA9IDE7IGsgPCBvaXAtPmxlbl9tYXNrWzBdICYmIGsgPCAxNjsgKytrKSB7CisJCQlyZW0gPSB+b2lwLT5sZW5fbWFza1trXSAmIGNtZFtrXTsKKwkJCWlmIChyZW0pIHsKKwkJCQlmb3IgKGogPSA3OyBqID49IDA7IC0taiwgcmVtIDw8PSAxKSB7CisJCQkJCWlmICgweDgwICYgcmVtKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1rX3NlbnNlX2ludmFsaWRfZmxkKHNjcCwgU0RFQl9JTl9DREIsIGssIGopOworCQkJCWdvdG8gY2hlY2tfY29uZDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIShGX1NLSVBfVUEgJiBmbGFncykgJiYKKwkgICAgU0RFQlVHX05VTV9VQVMgIT0gZmluZF9maXJzdF9iaXQoZGV2aXAtPnVhc19ibSwgU0RFQlVHX05VTV9VQVMpKSB7CisJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhzY3AsIFVBU19PTkxZLCBkZXZpcCk7CisJCWlmIChlcnJzdHMpCisJCQlnb3RvIGNoZWNrX2NvbmQ7CisJfQorCWlmICgoRl9NX0FDQ0VTUyAmIGZsYWdzKSAmJiBkZXZpcC0+c3RvcHBlZCkgeworCQlta19zZW5zZV9idWZmZXIoc2NwLCBOT1RfUkVBRFksIExPR0lDQUxfVU5JVF9OT1RfUkVBRFksIDB4Mik7CisJCWlmIChkZWJ1ZykKKwkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RwLCAiJXMgcmVwb3J0czogTm90IHJlYWR5OiAiCisJCQkJICAgICIlc1xuIiwgbXlfbmFtZSwgImluaXRpYWxpemluZyBjb21tYW5kICIKKwkJCQkgICAgInJlcXVpcmVkIik7CisJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCWdvdG8gZmluaTsKKwl9CisJaWYgKHNjc2lfZGVidWdfZmFrZV9ydyAmJiAoRl9GQUtFX1JXICYgZmxhZ3MpKQorCQlnb3RvIGZpbmk7CisJaWYgKHNjc2lfZGVidWdfZXZlcnlfbnRoKSB7CisJCWlmIChjaGVja19pbmplY3Qoc2NwKSkKKwkJCXJldHVybiAwOwkvKiBpZ25vcmUgY29tbWFuZDogbWFrZSB0cm91YmxlICovCisJfQorCWlmIChvaXAtPnBmcCkJLyogaWYgdGhpcyBjb21tYW5kIGhhcyBhIHJlc3BfKiBmdW5jdGlvbiwgY2FsbCBpdCAqLworCQllcnJzdHMgPSBvaXAtPnBmcChzY3AsIGRldmlwKTsKKwllbHNlIGlmIChyX3BmcCkJLyogaWYgbGVhZiBmdW5jdGlvbiBwdHIgTlVMTCwgdHJ5IHRoZSByb290J3MgKi8KKwkJZXJyc3RzID0gcl9wZnAoc2NwLCBkZXZpcCk7CisKK2Zpbmk6CisJcmV0dXJuIHNjaGVkdWxlX3Jlc3Aoc2NwLCBkZXZpcCwgZXJyc3RzLAorCQkJICAgICAoKEZfREVMQVlfT1ZFUlIgJiBmbGFncykgPyAwIDogc2NzaV9kZWJ1Z19kZWxheSkpOworY2hlY2tfY29uZDoKKwlyZXR1cm4gc2NoZWR1bGVfcmVzcChzY3AsIGRldmlwLCBjaGVja19jb25kaXRpb25fcmVzdWx0LCAwKTsKK30KKworc3RhdGljIGludAorc2RlYnVnX3F1ZXVlY29tbWFuZF9sb2NrX29yX25vdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCWlmIChzY3NpX2RlYnVnX2hvc3RfbG9jaykgeworCQl1bnNpZ25lZCBsb25nIGlmbGFnczsKKwkJaW50IHJjOworCisJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGlmbGFncyk7CisJCXJjID0gc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQoY21kKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBpZmxhZ3MpOworCQlyZXR1cm4gcmM7CisJfSBlbHNlCisJCXJldHVybiBzY3NpX2RlYnVnX3F1ZXVlY29tbWFuZChjbWQpOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzZGVidWdfZHJpdmVyX3RlbXBsYXRlID0gewogCS5zaG93X2luZm8gPQkJc2NzaV9kZWJ1Z19zaG93X2luZm8sCiAJLndyaXRlX2luZm8gPQkJc2NzaV9kZWJ1Z193cml0ZV9pbmZvLApAQCAtNDU4NywxMyArNTIyNSwxNiBAQAogCS5tYXhfc2VjdG9ycyA9CQktMVUsCiAJLnVzZV9jbHVzdGVyaW5nID0gCURJU0FCTEVfQ0xVU1RFUklORywKIAkubW9kdWxlID0JCVRISVNfTU9EVUxFLAorCS50cmFja19xdWV1ZV9kZXB0aCA9CTEsCisJLmNtZF9zaXplID0JCXNpemVvZihzdHJ1Y3Qgc2RlYnVnX3NjbWRfZXh0cmFfdCksCiB9OwogCiBzdGF0aWMgaW50IHNkZWJ1Z19kcml2ZXJfcHJvYmUoc3RydWN0IGRldmljZSAqIGRldikKIHsKLSAgICAgICAgaW50IGVycm9yID0gMDsKLSAgICAgICAgc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKnNkYmdfaG9zdDsKLSAgICAgICAgc3RydWN0IFNjc2lfSG9zdCAqaHBudDsKKwlpbnQgZXJyb3IgPSAwOworCWludCBvcHRzOworCXN0cnVjdCBzZGVidWdfaG9zdF9pbmZvICpzZGJnX2hvc3Q7CisJc3RydWN0IFNjc2lfSG9zdCAqaHBudDsKIAlpbnQgaG9zdF9wcm90OwogCiAJc2RiZ19ob3N0ID0gdG9fc2RlYnVnX2hvc3QoZGV2KTsKQEAgLTQ2MDMsNyArNTI0NCw3IEBACiAJCXNkZWJ1Z19kcml2ZXJfdGVtcGxhdGUudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORzsKIAlocG50ID0gc2NzaV9ob3N0X2FsbG9jKCZzZGVidWdfZHJpdmVyX3RlbXBsYXRlLCBzaXplb2Yoc2RiZ19ob3N0KSk7CiAJaWYgKE5VTEwgPT0gaHBudCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzY3NpX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlwcl9lcnIoIiVzOiBzY3NpX2hvc3RfYWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWVycm9yID0gLUVOT0RFVjsKIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTQ2NjAsNiArNTMwMSwxOCBAQAogCWVsc2UKIAkJc2NzaV9ob3N0X3NldF9ndWFyZChocG50LCBTSE9TVF9ESVhfR1VBUkRfQ1JDKTsKIAorCW9wdHMgPSBzY3NpX2RlYnVnX29wdHM7CisJaWYgKFNDU0lfREVCVUdfT1BUX1JFQ09WRVJFRF9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX1RSQU5TUE9SVF9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJRl9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX0RJWF9FUlIgJiBvcHRzKQorCQlzZGVidWdfYW55X2luamVjdGluZ19vcHQgPSB0cnVlOworCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX1NIT1JUX1RSQU5TRkVSICYgb3B0cykKKwkJc2RlYnVnX2FueV9pbmplY3Rpbmdfb3B0ID0gdHJ1ZTsKKwogICAgICAgICBlcnJvciA9IHNjc2lfYWRkX2hvc3QoaHBudCwgJnNkYmdfaG9zdC0+ZGV2KTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogc2NzaV9hZGRfaG9zdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IGJjNWZmNmYuLmU0MmZmZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9pb2N0bC5oPgorI2luY2x1ZGUgPHNjc2kvc2cuaD4KIAogI2luY2x1ZGUgInNjc2lfcHJpdi5oIgogI2luY2x1ZGUgInNjc2lfbG9nZ2luZy5oIgpAQCAtMTU3LDggKzE1OCw5IEBACiAJCX0gZWxzZSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAogCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKLQkJCQkJICAgICJzY21kICVwIGFib3J0IGZhaWxlZCwgcnRuICVkXG4iLAotCQkJCQkgICAgc2NtZCwgcnRuKSk7CisJCQkJCSAgICAic2NtZCAlcCBhYm9ydCAlc1xuIiwgc2NtZCwKKwkJCQkJICAgIChydG4gPT0gRkFTVF9JT19GQUlMKSA/CisJCQkJCSAgICAibm90IHNlbmQiIDogImZhaWxlZCIpKTsKIAkJfQogCX0KIApAQCAtMzU1LDcgKzM1Nyw3IEBACiAKIAkJaWYgKGNtZF9jYW5jZWwgfHwgY21kX2ZhaWxlZCkgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKLQkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCiAJCQkJCSAgICAiJXM6IGNtZHMgZmFpbGVkOiAlZCwgY2FuY2VsOiAlZFxuIiwKIAkJCQkJICAgIF9fZnVuY19fLCBjbWRfZmFpbGVkLAogCQkJCQkgICAgY21kX2NhbmNlbCkpOwpAQCAtNjA4LDcgKzYxMCw3IEBACiAJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0ID0gc2Rldi0+aG9zdC0+aG9zdHQ7CiAJc3RydWN0IHNjc2lfZGV2aWNlICp0bXBfc2RldjsKIAotCWlmICghc2h0LT5jaGFuZ2VfcXVldWVfZGVwdGggfHwKKwlpZiAoIXNodC0+dHJhY2tfcXVldWVfZGVwdGggfHwKIAkgICAgc2Rldi0+cXVldWVfZGVwdGggPj0gc2Rldi0+bWF4X3F1ZXVlX2RlcHRoKQogCQlyZXR1cm47CiAKQEAgLTYyOSwxMiArNjMxLDggQEAKIAkJICAgIHRtcF9zZGV2LT5pZCAhPSBzZGV2LT5pZCB8fAogCQkgICAgdG1wX3NkZXYtPnF1ZXVlX2RlcHRoID09IHNkZXYtPm1heF9xdWV1ZV9kZXB0aCkKIAkJCWNvbnRpbnVlOwotCQkvKgotCQkgKiBjYWxsIGJhY2sgaW50byBMTEQgdG8gaW5jcmVhc2UgcXVldWVfZGVwdGggYnkgb25lCi0JCSAqIHdpdGggcmFtcCB1cCByZWFzb24gY29kZS4KLQkJICovCi0JCXNodC0+Y2hhbmdlX3F1ZXVlX2RlcHRoKHRtcF9zZGV2LCB0bXBfc2Rldi0+cXVldWVfZGVwdGggKyAxLAotCQkJCQlTQ1NJX1FERVBUSF9SQU1QX1VQKTsKKworCQlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCh0bXBfc2RldiwgdG1wX3NkZXYtPnF1ZXVlX2RlcHRoICsgMSk7CiAJCXNkZXYtPmxhc3RfcXVldWVfcmFtcF91cCA9IGppZmZpZXM7CiAJfQogfQpAQCAtNjQ0LDcgKzY0Miw3IEBACiAJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0ID0gc2Rldi0+aG9zdC0+aG9zdHQ7CiAJc3RydWN0IHNjc2lfZGV2aWNlICp0bXBfc2RldjsKIAotCWlmICghc2h0LT5jaGFuZ2VfcXVldWVfZGVwdGgpCisJaWYgKCFzaHQtPnRyYWNrX3F1ZXVlX2RlcHRoKQogCQlyZXR1cm47CiAKIAlzaG9zdF9mb3JfZWFjaF9kZXZpY2UodG1wX3NkZXYsIHNkZXYtPmhvc3QpIHsKQEAgLTY1Niw4ICs2NTQsNyBAQAogCQkgKiB0aGUgZGV2aWNlIHdoZW4gd2UgZ290IHRoZSBxdWV1ZSBmdWxsIHNvIHdlIHN0YXJ0CiAJCSAqIGZyb20gdGhlIGhpZ2hlc3QgcG9zc2libGUgdmFsdWUgYW5kIHdvcmsgb3VyIHdheSBkb3duLgogCQkgKi8KLQkJc2h0LT5jaGFuZ2VfcXVldWVfZGVwdGgodG1wX3NkZXYsIHRtcF9zZGV2LT5xdWV1ZV9kZXB0aCAtIDEsCi0JCQkJCVNDU0lfUURFUFRIX1FGVUxMKTsKKwkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHRtcF9zZGV2LCB0bXBfc2Rldi0+cXVldWVfZGVwdGggLSAxKTsKIAl9CiB9CiAKQEAgLTg2OSw3ICs4NjYsMjQgQEAKIAlyZXR1cm4gcnRuOwogfQogCi1zdGF0aWMgaW50IHNjc2lfdHJ5X3RvX2Fib3J0X2NtZChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0dCwgc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKKy8qKgorICogc2NzaV90cnlfdG9fYWJvcnRfY21kIC0gQXNrIGhvc3QgdG8gYWJvcnQgYSBTQ1NJIGNvbW1hbmQKKyAqIEBzY21kOglTQ1NJIGNtZCB1c2VkIHRvIHNlbmQgYSB0YXJnZXQgcmVzZXQKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKglTVUNDRVNTLCBGQUlMRUQsIG9yIEZBU1RfSU9fRkFJTAorICoKKyAqIE5vdGVzOgorICogICAgU1VDQ0VTUyBkb2VzIG5vdCBuZWNlc3NhcmlseSBpbmRpY2F0ZSB0aGF0IHRoZSBjb21tYW5kCisgKiAgICBoYXMgYmVlbiBhYm9ydGVkOyBpdCBvbmx5IGluZGljYXRlcyB0aGF0IHRoZSBMTEREcworICogICAgaGFzIGNsZWFyZWQgYWxsIHJlZmVyZW5jZXMgdG8gdGhhdCBjb21tYW5kLgorICogICAgTExERHMgc2hvdWxkIHJldHVybiBGQUlMRUQgb25seSBpZiBhbiBhYm9ydCB3YXMgcmVxdWlyZWQKKyAqICAgIGJ1dCBjb3VsZCBub3QgYmUgZXhlY3V0ZWQuIExMRERzIHNob3VsZCByZXR1cm4gRkFTVF9JT19GQUlMCisgKiAgICBpZiB0aGUgZGV2aWNlIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIChlZyBkdWUgdG8gYQorICogICAgbGluayBkb3duIG9uIEZpYnJlQ2hhbm5lbCkKKyAqLworc3RhdGljIGludCBzY3NpX3RyeV90b19hYm9ydF9jbWQoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdHQsCisJCQkJIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7CiAJaWYgKCFob3N0dC0+ZWhfYWJvcnRfaGFuZGxlcikKIAkJcmV0dXJuIEZBSUxFRDsKQEAgLTExNTYsOSArMTE3MCw5IEBACiAJCXNob3N0ID0gc2NtZC0+ZGV2aWNlLT5ob3N0OwogCQlpZiAoc2NzaV9ob3N0X2VoX3Bhc3RfZGVhZGxpbmUoc2hvc3QpKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmVcbiIsCi0JCQkJCSAgICAgX19mdW5jX18pKTsKKwkJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCisJCQkJCSAgICAiJXM6IHNraXAgcmVxdWVzdCBzZW5zZSwgcGFzdCBlaCBkZWFkbGluZVxuIiwKKwkJCQkJICAgICBjdXJyZW50LT5jb21tKSk7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSAhPSBDSEVDS19DT05ESVRJT04pCkBAIC0xMTgwLDcgKzExOTQsNyBAQAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCiAJCQkic2Vuc2UgcmVxdWVzdGVkIGZvciAlcCByZXN1bHQgJXhcbiIsCiAJCQlzY21kLCBzY21kLT5yZXN1bHQpKTsKLQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywgc2NzaV9wcmludF9zZW5zZSgiYmgiLCBzY21kKSk7CisJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsIHNjc2lfcHJpbnRfc2Vuc2Uoc2NtZCkpOwogCiAJCXJ0biA9IHNjc2lfZGVjaWRlX2Rpc3Bvc2l0aW9uKHNjbWQpOwogCkBAIC0xMjY1LDkgKzEyNzksOSBAQAogCQkJCS8qIFB1c2ggaXRlbXMgYmFjayBvbnRvIHdvcmtfcSAqLwogCQkJCWxpc3Rfc3BsaWNlX2luaXQoY21kX2xpc3QsIHdvcmtfcSk7CiAJCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKLQkJCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2Rldi0+aG9zdCwKLQkJCQkJCSAgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmUiLAotCQkJCQkJICAgICBfX2Z1bmNfXykpOworCQkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJCQkgICAgIiVzOiBza2lwIHRlc3QgZGV2aWNlLCBwYXN0IGVoIGRlYWRsaW5lIiwKKwkJCQkJCSAgICBjdXJyZW50LT5jb21tKSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTEzMTgsMjEgKzEzMzIsMjAgQEAKIAkJaWYgKHNjc2lfaG9zdF9laF9wYXN0X2RlYWRsaW5lKHNob3N0KSkgewogCQkJbGlzdF9zcGxpY2VfaW5pdCgmY2hlY2tfbGlzdCwgd29ya19xKTsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJCSAgICAic2tpcCAlcywgcGFzdCBlaCBkZWFkbGluZVxuIiwKLQkJCQkJICAgICBfX2Z1bmNfXykpOworCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKKwkJCQkJICAgICIlczogc2tpcCBhYm9ydGluZyBjbWQsIHBhc3QgZWggZGVhZGxpbmVcbiIsCisJCQkJCSAgICBjdXJyZW50LT5jb21tKSk7CiAJCQlyZXR1cm4gbGlzdF9lbXB0eSh3b3JrX3EpOwogCQl9CiAJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaG9zdCwKLQkJCQkgICAgICIlczogYWJvcnRpbmcgY21kOiAweCVwXG4iLAotCQkJCSAgICAgY3VycmVudC0+Y29tbSwgc2NtZCkpOworCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAorCQkJCSAgICAgIiVzOiBhYm9ydGluZyBjbWRcbiIsIGN1cnJlbnQtPmNvbW0pKTsKIAkJcnRuID0gc2NzaV90cnlfdG9fYWJvcnRfY21kKHNob3N0LT5ob3N0dCwgc2NtZCk7CiAJCWlmIChydG4gPT0gRkFJTEVEKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgICIlczogYWJvcnRpbmcgY21kIGZhaWxlZDogMHglcFxuIiwKLQkJCQkJICAgICBjdXJyZW50LT5jb21tLCBzY21kKSk7CisJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAorCQkJCQkgICAgIiVzOiBhYm9ydGluZyBjbWQgZmFpbGVkXG4iLAorCQkJCQkgICAgIGN1cnJlbnQtPmNvbW0pKTsKIAkJCWxpc3Rfc3BsaWNlX2luaXQoJmNoZWNrX2xpc3QsIHdvcmtfcSk7CiAJCQlyZXR1cm4gbGlzdF9lbXB0eSh3b3JrX3EpOwogCQl9CkBAIC0xMzkwLDkgKzE0MDMsOSBAQAogCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkgewogCQlpZiAoc2NzaV9ob3N0X2VoX3Bhc3RfZGVhZGxpbmUoc2hvc3QpKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmVcbiIsCi0JCQkJCSAgICAgX19mdW5jX18pKTsKKwkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCisJCQkJCSAgICAiJXM6IHNraXAgU1RBUlRfVU5JVCwgcGFzdCBlaCBkZWFkbGluZVxuIiwKKwkJCQkJICAgIGN1cnJlbnQtPmNvbW0pKTsKIAkJCWJyZWFrOwogCQl9CiAJCXN0dV9zY21kID0gTlVMTDsKQEAgLTE0MDcsOSArMTQyMCw5IEBACiAJCQljb250aW51ZTsKIAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAotCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJICAgICAiJXM6IFNlbmRpbmcgU1RBUlRfVU5JVCB0byBzZGV2OiAweCVwXG4iLAotCQkJCSAgICAgY3VycmVudC0+Y29tbSwgc2RldikpOworCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAorCQkJCSAgICAgIiVzOiBTZW5kaW5nIFNUQVJUX1VOSVRcbiIsCisJCQkJICAgIGN1cnJlbnQtPmNvbW0pKTsKIAogCQlpZiAoIXNjc2lfZWhfdHJ5X3N0dShzdHVfc2NtZCkpIHsKIAkJCWlmICghc2NzaV9kZXZpY2Vfb25saW5lKHNkZXYpIHx8CkBAIC0xNDIzLDkgKzE0MzYsOSBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKLQkJCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaG9zdCwKLQkJCQkJICAgICAiJXM6IFNUQVJUX1VOSVQgZmFpbGVkIHRvIHNkZXY6IgotCQkJCQkgICAgICIgMHglcFxuIiwgY3VycmVudC0+Y29tbSwgc2RldikpOworCQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCQkJICAgICIlczogU1RBUlRfVU5JVCBmYWlsZWRcbiIsCisJCQkJCSAgICBjdXJyZW50LT5jb21tKSk7CiAJCX0KIAl9CiAKQEAgLTE0NTYsOSArMTQ2OSw5IEBACiAJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIHNob3N0KSB7CiAJCWlmIChzY3NpX2hvc3RfZWhfcGFzdF9kZWFkbGluZShzaG9zdCkpIHsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJCSAgICAic2tpcCAlcywgcGFzdCBlaCBkZWFkbGluZVxuIiwKLQkJCQkJICAgICBfX2Z1bmNfXykpOworCQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCQkJICAgICIlczogc2tpcCBCRFIsIHBhc3QgZWggZGVhZGxpbmVcbiIsCisJCQkJCSAgICAgY3VycmVudC0+Y29tbSkpOwogCQkJYnJlYWs7CiAJCX0KIAkJYmRyX3NjbWQgPSBOVUxMOwpAQCAtMTQ3Miw5ICsxNDg1LDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQlzaG9zdF9wcmludGsoS0VSTl9JTkZPLCBzaG9zdCwKLQkJCQkgICAgICIlczogU2VuZGluZyBCRFIgc2RldjogMHglcFxuIiwKLQkJCQkgICAgIGN1cnJlbnQtPmNvbW0sIHNkZXYpKTsKKwkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCQkgICAgICIlczogU2VuZGluZyBCRFJcbiIsIGN1cnJlbnQtPmNvbW0pKTsKIAkJcnRuID0gc2NzaV90cnlfYnVzX2RldmljZV9yZXNldChiZHJfc2NtZCk7CiAJCWlmIChydG4gPT0gU1VDQ0VTUyB8fCBydG4gPT0gRkFTVF9JT19GQUlMKSB7CiAJCQlpZiAoIXNjc2lfZGV2aWNlX29ubGluZShzZGV2KSB8fApAQCAtMTQ5MCw5ICsxNTAyLDggQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJCSAgICAgIiVzOiBCRFIgZmFpbGVkIHNkZXY6IDB4JXBcbiIsCi0JCQkJCSAgICAgY3VycmVudC0+Y29tbSwgc2RldikpOworCQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKKwkJCQkJICAgICIlczogQkRSIGZhaWxlZFxuIiwgY3VycmVudC0+Y29tbSkpOwogCQl9CiAJfQogCkBAIC0xNTI4LDggKzE1MzksOCBAQAogCQkJbGlzdF9zcGxpY2VfaW5pdCgmdG1wX2xpc3QsIHdvcmtfcSk7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAogCQkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNob3N0LAotCQkJCQkgICAgInNraXAgJXMsIHBhc3QgZWggZGVhZGxpbmVcbiIsCi0JCQkJCSAgICAgX19mdW5jX18pKTsKKwkJCQkJICAgICIlczogU2tpcCB0YXJnZXQgcmVzZXQsIHBhc3QgZWggZGVhZGxpbmVcbiIsCisJCQkJCSAgICAgY3VycmVudC0+Y29tbSkpOwogCQkJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIAkJfQogCkBAIC0xNTkxLDggKzE2MDIsOCBAQAogCQkJbGlzdF9zcGxpY2VfaW5pdCgmY2hlY2tfbGlzdCwgd29ya19xKTsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCiAJCQkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCi0JCQkJCSAgICAic2tpcCAlcywgcGFzdCBlaCBkZWFkbGluZVxuIiwKLQkJCQkJICAgICBfX2Z1bmNfXykpOworCQkJCQkgICAgIiVzOiBza2lwIEJSU1QsIHBhc3QgZWggZGVhZGxpbmVcbiIsCisJCQkJCSAgICAgY3VycmVudC0+Y29tbSkpOwogCQkJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIAkJfQogCkBAIC0yMTkzLDkgKzIyMDQsOSBAQAogCQkgKi8KIAkJaWYgKCFzaG9zdC0+ZWhfbm9yZXN1bWUgJiYgc2NzaV9hdXRvcG1fZ2V0X2hvc3Qoc2hvc3QpICE9IDApIHsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDEsCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBoYW5kbGVyIHNjc2lfZWhfJWQgIgotCQkJCQkJInVuYWJsZSB0byBhdXRvcmVzdW1lXG4iLAotCQkJCQkJc2hvc3QtPmhvc3Rfbm8pKTsKKwkJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHNob3N0LAorCQkJCQkgICAgICJzY3NpX2VoXyVkOiB1bmFibGUgdG8gYXV0b3Jlc3VtZVxuIiwKKwkJCQkJICAgICBzaG9zdC0+aG9zdF9ubykpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMjI5Niw0MiArMjMwNywzNCBAQAogewogfQogCi0vKgotICogRnVuY3Rpb246CXNjc2lfcmVzZXRfcHJvdmlkZXIKLSAqCi0gKiBQdXJwb3NlOglTZW5kIHJlcXVlc3RlZCByZXNldCB0byBhIGJ1cyBvciBkZXZpY2UgYXQgYW55IHBoYXNlLgotICoKLSAqIEFyZ3VtZW50czoJZGV2aWNlCS0gZGV2aWNlIHRvIHNlbmQgcmVzZXQgdG8KLSAqCQlmbGFnIC0gcmVzZXQgdHlwZSAoc2VlIHNjc2kuaCkKLSAqCi0gKiBSZXR1cm5zOglTVUNDRVNTL0ZBSUxVUkUuCi0gKgotICogTm90ZXM6CVRoaXMgaXMgdXNlZCBieSB0aGUgU0NTSSBHZW5lcmljIGRyaXZlciB0byBwcm92aWRlCi0gKgkJQnVzL0RldmljZSByZXNldCBjYXBhYmlsaXR5LgorLyoqCisgKiBzY3NpX2lvY3RsX3Jlc2V0OiBleHBsaWNpdGx5IHJlc2V0IGEgaG9zdC9idXMvdGFyZ2V0L2RldmljZQorICogQGRldjoJc2NzaV9kZXZpY2UgdG8gb3BlcmF0ZSBvbgorICogQGFyZzoJcmVzZXQgdHlwZSAoc2VlIHNnLmgpCiAgKi8KIGludAotc2NzaV9yZXNldF9wcm92aWRlcihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGZsYWcpCitzY3NpX2lvY3RsX3Jlc2V0KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgX191c2VyICphcmcpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldi0+aG9zdDsKIAlzdHJ1Y3QgcmVxdWVzdCByZXE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcnRuOworCWludCBlcnJvciA9IDAsIHJ0biwgdmFsOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8ICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCWVycm9yID0gZ2V0X3VzZXIodmFsLCBhcmcpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKHNjc2lfYXV0b3BtX2dldF9ob3N0KHNob3N0KSA8IDApCi0JCXJldHVybiBGQUlMRUQ7CisJCXJldHVybiAtRUlPOwogCi0JaWYgKCFnZXRfZGV2aWNlKCZkZXYtPnNkZXZfZ2VuZGV2KSkgewotCQlydG4gPSBGQUlMRUQ7Ci0JCWdvdG8gb3V0X3B1dF9hdXRvcG1faG9zdDsKLQl9Ci0KKwllcnJvciA9IC1FSU87CiAJc2NtZCA9IHNjc2lfZ2V0X2NvbW1hbmQoZGV2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNjbWQpIHsKLQkJcnRuID0gRkFJTEVEOwotCQlwdXRfZGV2aWNlKCZkZXYtPnNkZXZfZ2VuZGV2KTsKKwlpZiAoIXNjbWQpCiAJCWdvdG8gb3V0X3B1dF9hdXRvcG1faG9zdDsKLQl9CiAKIAlibGtfcnFfaW5pdChOVUxMLCAmcmVxKTsKIAlzY21kLT5yZXF1ZXN0ID0gJnJlcTsKQEAgLTIzNDksMjkgKzIzNTIsMzcgQEAKIAlzaG9zdC0+dG1mX2luX3Byb2dyZXNzID0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAotCXN3aXRjaCAoZmxhZykgewotCWNhc2UgU0NTSV9UUllfUkVTRVRfREVWSUNFOgotCQlydG4gPSBzY3NpX3RyeV9idXNfZGV2aWNlX3Jlc2V0KHNjbWQpOwotCQlpZiAocnRuID09IFNVQ0NFU1MpCi0JCQlicmVhazsKLQkJLyogRkFMTFRIUk9VR0ggKi8KLQljYXNlIFNDU0lfVFJZX1JFU0VUX1RBUkdFVDoKLQkJcnRuID0gc2NzaV90cnlfdGFyZ2V0X3Jlc2V0KHNjbWQpOwotCQlpZiAocnRuID09IFNVQ0NFU1MpCi0JCQlicmVhazsKLQkJLyogRkFMTFRIUk9VR0ggKi8KLQljYXNlIFNDU0lfVFJZX1JFU0VUX0JVUzoKLQkJcnRuID0gc2NzaV90cnlfYnVzX3Jlc2V0KHNjbWQpOwotCQlpZiAocnRuID09IFNVQ0NFU1MpCi0JCQlicmVhazsKLQkJLyogRkFMTFRIUk9VR0ggKi8KLQljYXNlIFNDU0lfVFJZX1JFU0VUX0hPU1Q6Ci0JCXJ0biA9IHNjc2lfdHJ5X2hvc3RfcmVzZXQoc2NtZCk7CisJc3dpdGNoICh2YWwgJiB+U0dfU0NTSV9SRVNFVF9OT19FU0NBTEFURSkgeworCWNhc2UgU0dfU0NTSV9SRVNFVF9OT1RISU5HOgorCQlydG4gPSBTVUNDRVNTOwogCQlicmVhazsKKwljYXNlIFNHX1NDU0lfUkVTRVRfREVWSUNFOgorCQlydG4gPSBzY3NpX3RyeV9idXNfZGV2aWNlX3Jlc2V0KHNjbWQpOworCQlpZiAocnRuID09IFNVQ0NFU1MgfHwgKHZhbCAmIFNHX1NDU0lfUkVTRVRfTk9fRVNDQUxBVEUpKQorCQkJYnJlYWs7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBTR19TQ1NJX1JFU0VUX1RBUkdFVDoKKwkJcnRuID0gc2NzaV90cnlfdGFyZ2V0X3Jlc2V0KHNjbWQpOworCQlpZiAocnRuID09IFNVQ0NFU1MgfHwgKHZhbCAmIFNHX1NDU0lfUkVTRVRfTk9fRVNDQUxBVEUpKQorCQkJYnJlYWs7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBTR19TQ1NJX1JFU0VUX0JVUzoKKwkJcnRuID0gc2NzaV90cnlfYnVzX3Jlc2V0KHNjbWQpOworCQlpZiAocnRuID09IFNVQ0NFU1MgfHwgKHZhbCAmIFNHX1NDU0lfUkVTRVRfTk9fRVNDQUxBVEUpKQorCQkJYnJlYWs7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBTR19TQ1NJX1JFU0VUX0hPU1Q6CisJCXJ0biA9IHNjc2lfdHJ5X2hvc3RfcmVzZXQoc2NtZCk7CisJCWlmIChydG4gPT0gU1VDQ0VTUykKKwkJCWJyZWFrOwogCWRlZmF1bHQ6CisJCS8qIEZBTExUSFJPVUdIICovCiAJCXJ0biA9IEZBSUxFRDsKKwkJYnJlYWs7CiAJfQogCisJZXJyb3IgPSAocnRuID09IFNVQ0NFU1MpID8gMCA6IC1FSU87CisKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJc2hvc3QtPnRtZl9pbl9wcm9ncmVzcyA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC0yMzg1LDE1ICsyMzk2LDE1IEBACiAJCQkgICAgICJ3YWtpbmcgdXAgaG9zdCB0byByZXN0YXJ0IGFmdGVyIFRNRlxuIikpOwogCiAJd2FrZV91cCgmc2hvc3QtPmhvc3Rfd2FpdCk7Ci0KIAlzY3NpX3J1bl9ob3N0X3F1ZXVlcyhzaG9zdCk7CiAKLQlzY3NpX25leHRfY29tbWFuZChzY21kKTsKKwlzY3NpX3B1dF9jb21tYW5kKHNjbWQpOworCiBvdXRfcHV0X2F1dG9wbV9ob3N0OgogCXNjc2lfYXV0b3BtX3B1dF9ob3N0KHNob3N0KTsKLQlyZXR1cm4gcnRuOworCXJldHVybiBlcnJvcjsKIH0KLUVYUE9SVF9TWU1CT0woc2NzaV9yZXNldF9wcm92aWRlcik7CitFWFBPUlRfU1lNQk9MKHNjc2lfaW9jdGxfcmVzZXQpOwogCiAvKioKICAqIHNjc2lfbm9ybWFsaXplX3NlbnNlIC0gbm9ybWFsaXplIG1haW4gZWxlbWVudHMgZnJvbSBlaXRoZXIgZml4ZWQgb3IKQEAgLTI0MTIsMjAgKzI0MjMsMjAgQEAKICAqCXJlc3BvbmRlZCB0byBhIFNDU0kgY29tbWFuZCB3aXRoIHRoZSBDSEVDS19DT05ESVRJT04gc3RhdHVzLgogICoKICAqIFJldHVybiB2YWx1ZToKLSAqCTEgaWYgdmFsaWQgc2Vuc2UgZGF0YSBpbmZvcm1hdGlvbiBmb3VuZCwgZWxzZSAwOworICoJdHJ1ZSBpZiB2YWxpZCBzZW5zZSBkYXRhIGluZm9ybWF0aW9uIGZvdW5kLCBlbHNlIGZhbHNlOwogICovCi1pbnQgc2NzaV9ub3JtYWxpemVfc2Vuc2UoY29uc3QgdTggKnNlbnNlX2J1ZmZlciwgaW50IHNiX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQorYm9vbCBzY3NpX25vcm1hbGl6ZV9zZW5zZShjb25zdCB1OCAqc2Vuc2VfYnVmZmVyLCBpbnQgc2JfbGVuLAorCQkJICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQogewogCWlmICghc2Vuc2VfYnVmZmVyIHx8ICFzYl9sZW4pCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAltZW1zZXQoc3NoZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIpKTsKIAogCXNzaGRyLT5yZXNwb25zZV9jb2RlID0gKHNlbnNlX2J1ZmZlclswXSAmIDB4N2YpOwogCiAJaWYgKCFzY3NpX3NlbnNlX3ZhbGlkKHNzaGRyKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWlmIChzc2hkci0+cmVzcG9uc2VfY29kZSA+PSAweDcyKSB7CiAJCS8qCkBAIC0yNDU1LDEyICsyNDY2LDEyIEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9ub3JtYWxpemVfc2Vuc2UpOwogCi1pbnQgc2NzaV9jb21tYW5kX25vcm1hbGl6ZV9zZW5zZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCQkJIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCitib29sIHNjc2lfY29tbWFuZF9ub3JtYWxpemVfc2Vuc2UoY29uc3Qgc3RydWN0IHNjc2lfY21uZCAqY21kLAorCQkJCSAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKIHsKIAlyZXR1cm4gc2NzaV9ub3JtYWxpemVfc2Vuc2UoY21kLT5zZW5zZV9idWZmZXIsCiAJCQlTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIHNzaGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCmluZGV4IDFhYWFmNDMuLmM0ZjdiNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCiAJCQkJICAgICJpb2N0bF9pbnRlcm5hbF9jb21tYW5kIHJldHVybiBjb2RlID0gJXhcbiIsCiAJCQkJICAgIHJlc3VsdCk7Ci0JCQlzY3NpX3ByaW50X3NlbnNlX2hkcigiICAgIiwgJnNzaGRyKTsKKwkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKHNkZXYsIE5VTEwsICZzc2hkcik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTIwMCwxOSArMjAwLDYgQEAKIHsKIAljaGFyIHNjc2lfY21kW01BWF9DT01NQU5EX1NJWkVdOwogCi0JLyogTm8gaWRlYSBob3cgdGhpcyBoYXBwZW5zLi4uLiAqLwotCWlmICghc2RldikKLQkJcmV0dXJuIC1FTlhJTzsKLQotCS8qCi0JICogSWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgZXJyb3IgcmVjb3ZlcnksIGRvbid0IGxldCBhbnlvbmUKLQkgKiBlbHNlIHRyeSBhbmQgdXNlIHRoaXMgZGV2aWNlLiAgQWxzbywgaWYgZXJyb3IgcmVjb3ZlcnkgZmFpbHMsIGl0Ci0JICogbWF5IHRyeSBhbmQgdGFrZSB0aGUgZGV2aWNlIG9mZmxpbmUsIGluIHdoaWNoIGNhc2UgYWxsIGZ1cnRoZXIKLQkgKiBhY2Nlc3MgdG8gdGhlIGRldmljZSBpcyBwcm9oaWJpdGVkLgotCSAqLwotCWlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCS8qIENoZWNrIGZvciBkZXByZWNhdGVkIGlvY3RscyAuLi4gYWxsIHRoZSBpb2N0bHMgd2hpY2ggZG9uJ3QKIAkgKiBmb2xsb3cgdGhlIG5ldyB1bmlxdWUgbnVtYmVyaW5nIHNjaGVtZSBhcmUgZGVwcmVjYXRlZCAqLwogCXN3aXRjaCAoY21kKSB7CkBAIC0yNzMsNiArMjYwLDggQEAKIAkJCQkgICAgIFNUQVJUX1NUT1BfVElNRU9VVCwgTk9STUFMX1JFVFJJRVMpOwogICAgICAgICBjYXNlIFNDU0lfSU9DVExfR0VUX1BDSToKICAgICAgICAgICAgICAgICByZXR1cm4gc2NzaV9pb2N0bF9nZXRfcGNpKHNkZXYsIGFyZyk7CisJY2FzZSBTR19TQ1NJX1JFU0VUOgorCQlyZXR1cm4gc2NzaV9pb2N0bF9yZXNldChzZGV2LCBhcmcpOwogCWRlZmF1bHQ6CiAJCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+aW9jdGwpCiAJCQlyZXR1cm4gc2Rldi0+aG9zdC0+aG9zdHQtPmlvY3RsKHNkZXYsIGNtZCwgYXJnKTsKQEAgLTI4MSw1NSArMjcwLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfaW9jdGwpOwogCi0vKioKLSAqIHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKCkgLSBIYW5kbGUgU0dfU0NTSV9SRVNFVAotICogQHNkZXY6IHNjc2kgZGV2aWNlIHJlY2VpdmluZyBpb2N0bAotICogQGNtZDogTXVzdCBiZSBTQ19TQ1NJX1JFU0VUCi0gKiBAYXJnOiBwb2ludGVyIHRvIGludCBjb250YWluaW5nIFNHX1NDU0lfUkVTRVRfe0RFVklDRSxCVVMsSE9TVH0KLSAqIEBuZGVsYXk6IGZpbGUgbW9kZSBPX05ERUxBWSBmbGFnCisvKgorICogV2UgY2FuIHByb2Nlc3MgYSByZXNldCBldmVuIHdoZW4gYSBkZXZpY2UgaXNuJ3QgZnVsbHkgb3BlcmFibGUuCiAgKi8KLWludCBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBjbWQsCi0JCQkgICAgdm9pZCBfX3VzZXIgKmFyZywgaW50IG5kZWxheSkKK2ludCBzY3NpX2lvY3RsX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgY21kLAorCQlib29sIG5kZWxheSkKIHsKLQlpbnQgdmFsLCByZXN1bHQ7Ci0KLQkvKiBUaGUgZmlyc3Qgc2V0IG9mIGlvY3RzIG1heSBiZSBleGVjdXRlZCBldmVuIGlmIHdlJ3JlIGRvaW5nCi0JICogZXJyb3IgcHJvY2Vzc2luZywgYXMgbG9uZyBhcyB0aGUgZGV2aWNlIHdhcyBvcGVuZWQKLQkgKiBub24tYmxvY2tpbmcgKi8KLQlpZiAobmRlbGF5KSB7CisJaWYgKGNtZCA9PSBTR19TQ1NJX1JFU0VUICYmIG5kZWxheSkgewogCQlpZiAoc2NzaV9ob3N0X2luX3JlY292ZXJ5KHNkZXYtPmhvc3QpKQorCQkJcmV0dXJuIC1FQUdBSU47CisJfSBlbHNlIHsKKwkJaWYgKCFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RldikpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQl9IGVsc2UgaWYgKCFzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc2RldikpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNHX1NDU0lfUkVTRVQ6Ci0JCXJlc3VsdCA9IGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpOwotCQlpZiAocmVzdWx0KQotCQkJcmV0dXJuIHJlc3VsdDsKLQkJaWYgKHZhbCA9PSBTR19TQ1NJX1JFU0VUX05PVEhJTkcpCi0JCQlyZXR1cm4gMDsKLQkJc3dpdGNoICh2YWwpIHsKLQkJY2FzZSBTR19TQ1NJX1JFU0VUX0RFVklDRToKLQkJCXZhbCA9IFNDU0lfVFJZX1JFU0VUX0RFVklDRTsKLQkJCWJyZWFrOwotCQljYXNlIFNHX1NDU0lfUkVTRVRfVEFSR0VUOgotCQkJdmFsID0gU0NTSV9UUllfUkVTRVRfVEFSR0VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0dfU0NTSV9SRVNFVF9CVVM6Ci0JCQl2YWwgPSBTQ1NJX1RSWV9SRVNFVF9CVVM7Ci0JCQlicmVhazsKLQkJY2FzZSBTR19TQ1NJX1JFU0VUX0hPU1Q6Ci0JCQl2YWwgPSBTQ1NJX1RSWV9SRVNFVF9IT1NUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0JCQlyZXR1cm4gLUVBQ0NFUzsKLQkJcmV0dXJuIChzY3NpX3Jlc2V0X3Byb3ZpZGVyKHNkZXYsIHZhbCkgPT0KLQkJCVNVQ0NFU1MpID8gMCA6IC1FSU87CiAJfQotCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHNjc2lfbm9uYmxvY2thYmxlX2lvY3RsKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNjc2lfaW9jdGxfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDUwYTZlMWEuLjdlM2Q5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrLW1xLmg+CisjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgpAQCAtNDcsNyArNDgsNyBAQAogCW1lbXBvb2xfdAkqcG9vbDsKIH07CiAKLSNkZWZpbmUgU1AoeCkgeyB4LCAic2dwb29sLSIgX19zdHJpbmdpZnkoeCkgfQorI2RlZmluZSBTUCh4KSB7IC5zaXplID0geCwgInNncG9vbC0iIF9fc3RyaW5naWZ5KHgpIH0KICNpZiAoU0NTSV9NQVhfU0dfU0VHTUVOVFMgPCAzMikKICNlcnJvciBTQ1NJX01BWF9TR19TRUdNRU5UUyBpcyB0b28gc21hbGwgKG11c3QgYmUgMzIgb3IgZ3JlYXRlcikKICNlbmRpZgpAQCAtNTQyLDE3ICs1NDMsNiBAQAogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIH0KIAotdm9pZCBzY3NpX25leHRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY21kLT5kZXZpY2U7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzZGV2LT5yZXF1ZXN0X3F1ZXVlOwotCi0Jc2NzaV9wdXRfY29tbWFuZChjbWQpOwotCXNjc2lfcnVuX3F1ZXVlKHEpOwotCi0JcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwotfQotCiB2b2lkIHNjc2lfcnVuX2hvc3RfcXVldWVzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKQEAgLTU5OCwxMCArNTg4LDEwIEBACiAJX19zZ19mcmVlX3RhYmxlKCZzZGItPnRhYmxlLCBTQ1NJX01BWF9TR19TRUdNRU5UUywgbXEsIHNjc2lfc2dfZnJlZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2NzaV9hbGxvY19zZ3RhYmxlKHN0cnVjdCBzY3NpX2RhdGFfYnVmZmVyICpzZGIsIGludCBuZW50cywKLQkJCSAgICAgIGdmcF90IGdmcF9tYXNrLCBib29sIG1xKQorc3RhdGljIGludCBzY3NpX2FsbG9jX3NndGFibGUoc3RydWN0IHNjc2lfZGF0YV9idWZmZXIgKnNkYiwgaW50IG5lbnRzLCBib29sIG1xKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqZmlyc3RfY2h1bmsgPSBOVUxMOworCWdmcF90IGdmcF9tYXNrID0gbXEgPyBHRlBfTk9JTyA6IEdGUF9BVE9NSUM7CiAJaW50IHJldDsKIAogCUJVR19PTighbmVudHMpOwpAQCAtNzMwLDggKzcyMCw2IEBACiAJCQlrYmxvY2tkX3NjaGVkdWxlX3dvcmsoJnNkZXYtPnJlcXVldWVfd29yayk7CiAJCWVsc2UKIAkJCWJsa19tcV9zdGFydF9zdG9wcGVkX2h3X3F1ZXVlcyhxLCB0cnVlKTsKLQotCQlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNzQzLDkgKzczMSwxMiBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAogCQlzY3NpX3JlbGVhc2VfYnVmZmVycyhjbWQpOwotCQlzY3NpX25leHRfY29tbWFuZChjbWQpOworCisJCXNjc2lfcHV0X2NvbW1hbmQoY21kKTsKKwkJc2NzaV9ydW5fcXVldWUocSk7CiAJfQogCisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXJldHVybiBmYWxzZTsKIH0KIApAQCAtODMxLDggKzgyMiw4IEBACiAJc3RydWN0IHJlcXVlc3QgKnJlcSA9IGNtZC0+cmVxdWVzdDsKIAlpbnQgZXJyb3IgPSAwOwogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKLQlpbnQgc2Vuc2VfdmFsaWQgPSAwOwotCWludCBzZW5zZV9kZWZlcnJlZCA9IDA7CisJYm9vbCBzZW5zZV92YWxpZCA9IGZhbHNlOworCWludCBzZW5zZV9kZWZlcnJlZCA9IDAsIGxldmVsID0gMDsKIAllbnVtIHtBQ1RJT05fRkFJTCwgQUNUSU9OX1JFUFJFUCwgQUNUSU9OX1JFVFJZLAogCSAgICAgIEFDVElPTl9ERUxBWUVEX1JFVFJZfSBhY3Rpb247CiAJdW5zaWduZWQgbG9uZyB3YWl0X2ZvciA9IChjbWQtPmFsbG93ZWQgKyAxKSAqIHJlcS0+dGltZW91dDsKQEAgLTkxMiw3ICs5MDMsNyBAQAogCQlpZiAoKHNzaGRyLmFzYyA9PSAweDApICYmIChzc2hkci5hc2NxID09IDB4MWQpKQogCQkJOwogCQllbHNlIGlmICghKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkKLQkJCXNjc2lfcHJpbnRfc2Vuc2UoIiIsIGNtZCk7CisJCQlzY3NpX3ByaW50X3NlbnNlKGNtZCk7CiAJCXJlc3VsdCA9IDA7CiAJCS8qIEJMT0NLX1BDIG1heSBoYXZlIHNldCBlcnJvciAqLwogCQllcnJvciA9IDA7CkBAIC0xMDM5LDEwICsxMDMwLDI0IEBACiAJY2FzZSBBQ1RJT05fRkFJTDoKIAkJLyogR2l2ZSB1cCBhbmQgZmFpbCB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXF1ZXN0ICovCiAJCWlmICghKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkgewotCQkJc2NzaV9wcmludF9yZXN1bHQoY21kKTsKLQkJCWlmIChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX1NFTlNFKQotCQkJCXNjc2lfcHJpbnRfc2Vuc2UoIiIsIGNtZCk7Ci0JCQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKKwkJCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKF9ycywKKwkJCQkJREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsCisJCQkJCURFRkFVTFRfUkFURUxJTUlUX0JVUlNUKTsKKworCQkJaWYgKHVubGlrZWx5KHNjc2lfbG9nZ2luZ19sZXZlbCkpCisJCQkJbGV2ZWwgPSBTQ1NJX0xPR19MRVZFTChTQ1NJX0xPR19NTENPTVBMRVRFX1NISUZULAorCQkJCQkJICAgICAgIFNDU0lfTE9HX01MQ09NUExFVEVfQklUUyk7CisKKwkJCS8qCisJCQkgKiBpZiBsb2dnaW5nIGlzIGVuYWJsZWQgdGhlIGZhaWx1cmUgd2lsbCBiZSBwcmludGVkCisJCQkgKiBpbiBzY3NpX2xvZ19jb21wbGV0aW9uKCksIHNvIGF2b2lkIGR1cGxpY2F0ZSBtZXNzYWdlcworCQkJICovCisJCQlpZiAoIWxldmVsICYmIF9fcmF0ZWxpbWl0KCZfcnMpKSB7CisJCQkJc2NzaV9wcmludF9yZXN1bHQoY21kLCBOVUxMLCBGQUlMRUQpOworCQkJCWlmIChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX1NFTlNFKQorCQkJCQlzY3NpX3ByaW50X3NlbnNlKGNtZCk7CisJCQkJc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CisJCQl9CiAJCX0KIAkJaWYgKCFzY3NpX2VuZF9yZXF1ZXN0KHJlcSwgZXJyb3IsIGJsa19ycV9lcnJfYnl0ZXMocmVxKSwgMCkpCiAJCQlyZXR1cm47CkBAIC0xMDcyLDggKzEwNzcsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBzY3NpX2luaXRfc2d0YWJsZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3Qgc2NzaV9kYXRhX2J1ZmZlciAqc2RiLAotCQkJICAgICBnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyBpbnQgc2NzaV9pbml0X3NndGFibGUoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IHNjc2lfZGF0YV9idWZmZXIgKnNkYikKIHsKIAlpbnQgY291bnQ7CiAKQEAgLTEwODEsNyArMTA4NSw3IEBACiAJICogSWYgc2cgdGFibGUgYWxsb2NhdGlvbiBmYWlscywgcmVxdWV1ZSByZXF1ZXN0IGxhdGVyLgogCSAqLwogCWlmICh1bmxpa2VseShzY3NpX2FsbG9jX3NndGFibGUoc2RiLCByZXEtPm5yX3BoeXNfc2VnbWVudHMsCi0JCQkJCWdmcF9tYXNrLCByZXEtPm1xX2N0eCAhPSBOVUxMKSkpCisJCQkJCXJlcS0+bXFfY3R4ICE9IE5VTEwpKSkKIAkJcmV0dXJuIEJMS1BSRVBfREVGRVI7CiAKIAkvKiAKQEAgLTExMDYsNyArMTExMCw3IEBACiAgKgkJQkxLUFJFUF9ERUZFUiBpZiB0aGUgZmFpbHVyZSBpcyByZXRyeWFibGUKICAqCQlCTEtQUkVQX0tJTEwgaWYgdGhlIGZhaWx1cmUgaXMgZmF0YWwKICAqLwotaW50IHNjc2lfaW5pdF9pbyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGdmcF90IGdmcF9tYXNrKQoraW50IHNjc2lfaW5pdF9pbyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY21kLT5kZXZpY2U7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gY21kLT5yZXF1ZXN0OwpAQCAtMTExNSw3ICsxMTE5LDcgQEAKIAogCUJVR19PTighcnEtPm5yX3BoeXNfc2VnbWVudHMpOwogCi0JZXJyb3IgPSBzY3NpX2luaXRfc2d0YWJsZShycSwgJmNtZC0+c2RiLCBnZnBfbWFzayk7CisJZXJyb3IgPSBzY3NpX2luaXRfc2d0YWJsZShycSwgJmNtZC0+c2RiKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyX2V4aXQ7CiAKQEAgLTExMzEsOCArMTEzNSw3IEBACiAJCQlycS0+bmV4dF9ycS0+c3BlY2lhbCA9IGJpZGlfc2RiOwogCQl9CiAKLQkJZXJyb3IgPSBzY3NpX2luaXRfc2d0YWJsZShycS0+bmV4dF9ycSwgcnEtPm5leHRfcnEtPnNwZWNpYWwsCi0JCQkJCSAgR0ZQX0FUT01JQyk7CisJCWVycm9yID0gc2NzaV9pbml0X3NndGFibGUocnEtPm5leHRfcnEsIHJxLT5uZXh0X3JxLT5zcGVjaWFsKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBlcnJfZXhpdDsKIAl9CkBAIC0xMTQ0LDcgKzExNDcsNyBAQAogCQlCVUdfT04ocHJvdF9zZGIgPT0gTlVMTCk7CiAJCWl2ZWNzID0gYmxrX3JxX2NvdW50X2ludGVncml0eV9zZyhycS0+cSwgcnEtPmJpbyk7CiAKLQkJaWYgKHNjc2lfYWxsb2Nfc2d0YWJsZShwcm90X3NkYiwgaXZlY3MsIGdmcF9tYXNrLCBpc19tcSkpIHsKKwkJaWYgKHNjc2lfYWxsb2Nfc2d0YWJsZShwcm90X3NkYiwgaXZlY3MsIGlzX21xKSkgewogCQkJZXJyb3IgPSBCTEtQUkVQX0RFRkVSOwogCQkJZ290byBlcnJfZXhpdDsKIAkJfQpAQCAtMTIxMyw3ICsxMjE2LDcgQEAKIAkgKiBzdWJtaXQgYSByZXF1ZXN0IHdpdGhvdXQgYW4gYXR0YWNoZWQgYmlvLgogCSAqLwogCWlmIChyZXEtPmJpbykgewotCQlpbnQgcmV0ID0gc2NzaV9pbml0X2lvKGNtZCwgR0ZQX0FUT01JQyk7CisJCWludCByZXQgPSBzY3NpX2luaXRfaW8oY21kKTsKIAkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CkBAIC0xNjM4LDYgKzE2NDEsODcgQEAKIH0KIAogLyoqCisgKiBzY3NpX2Rpc3BhdGNoX2NvbW1hbmQgLSBEaXNwYXRjaCBhIGNvbW1hbmQgdG8gdGhlIGxvdy1sZXZlbCBkcml2ZXIuCisgKiBAY21kOiBjb21tYW5kIGJsb2NrIHdlIGFyZSBkaXNwYXRjaGluZy4KKyAqCisgKiBSZXR1cm46IG5vbnplcm8gcmV0dXJuIHJlcXVlc3Qgd2FzIHJlamVjdGVkIGFuZCBkZXZpY2UncyBxdWV1ZSBuZWVkcyB0byBiZQorICogcGx1Z2dlZC4KKyAqLworc3RhdGljIGludCBzY3NpX2Rpc3BhdGNoX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OworCWludCBydG4gPSAwOworCisJYXRvbWljX2luYygmY21kLT5kZXZpY2UtPmlvcmVxdWVzdF9jbnQpOworCisJLyogY2hlY2sgaWYgdGhlIGRldmljZSBpcyBzdGlsbCB1c2FibGUgKi8KKwlpZiAodW5saWtlbHkoY21kLT5kZXZpY2UtPnNkZXZfc3RhdGUgPT0gU0RFVl9ERUwpKSB7CisJCS8qIGluIFNERVZfREVMIHdlIGVycm9yIGFsbCBjb21tYW5kcy4gRElEX05PX0NPTk5FQ1QKKwkJICogcmV0dXJucyBhbiBpbW1lZGlhdGUgZXJyb3IgdXB3YXJkcywgYW5kIHNpZ25hbHMKKwkJICogdGhhdCB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBwcmVzZW50ICovCisJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHNjc2kgbGxkIG1hZGUgdGhpcyBkZXZpY2UgYmxvY2tlZC4gKi8KKwlpZiAodW5saWtlbHkoc2NzaV9kZXZpY2VfYmxvY2tlZChjbWQtPmRldmljZSkpKSB7CisJCS8qCisJCSAqIGluIGJsb2NrZWQgc3RhdGUsIHRoZSBjb21tYW5kIGlzIGp1c3QgcHV0IGJhY2sgb24KKwkJICogdGhlIGRldmljZSBxdWV1ZS4gIFRoZSBzdXNwZW5kIHN0YXRlIGhhcyBhbHJlYWR5CisJCSAqIGJsb2NrZWQgdGhlIHF1ZXVlIHNvIGZ1dHVyZSByZXF1ZXN0cyBzaG91bGQgbm90CisJCSAqIG9jY3VyIHVudGlsIHRoZSBkZXZpY2UgdHJhbnNpdGlvbnMgb3V0IG9mIHRoZQorCQkgKiBzdXNwZW5kIHN0YXRlLgorCQkgKi8KKwkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKKwkJCSJxdWV1ZWNvbW1hbmQgOiBkZXZpY2UgYmxvY2tlZFxuIikpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOworCX0KKworCS8qIFN0b3JlIHRoZSBMVU4gdmFsdWUgaW4gY21uZCwgaWYgbmVlZGVkLiAqLworCWlmIChjbWQtPmRldmljZS0+bHVuX2luX2NkYikKKwkJY21kLT5jbW5kWzFdID0gKGNtZC0+Y21uZFsxXSAmIDB4MWYpIHwKKwkJCSAgICAgICAoY21kLT5kZXZpY2UtPmx1biA8PCA1ICYgMHhlMCk7CisKKwlzY3NpX2xvZ19zZW5kKGNtZCk7CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBxdWV1ZSB0aGlzIGNvbW1hbmQsIGNoZWNrIGlmIHRoZSBjb21tYW5kCisJICogbGVuZ3RoIGV4Y2VlZHMgd2hhdCB0aGUgaG9zdCBhZGFwdGVyIGNhbiBoYW5kbGUuCisJICovCisJaWYgKGNtZC0+Y21kX2xlbiA+IGNtZC0+ZGV2aWNlLT5ob3N0LT5tYXhfY21kX2xlbikgeworCQlTQ1NJX0xPR19NTFFVRVVFKDMsIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAorCQkJICAgICAgICJxdWV1ZWNvbW1hbmQgOiBjb21tYW5kIHRvbyBsb25nLiAiCisJCQkgICAgICAgImNkYl9zaXplPSVkIGhvc3QtPm1heF9jbWRfbGVuPSVkXG4iLAorCQkJICAgICAgIGNtZC0+Y21kX2xlbiwgY21kLT5kZXZpY2UtPmhvc3QtPm1heF9jbWRfbGVuKSk7CisJCWNtZC0+cmVzdWx0ID0gKERJRF9BQk9SVCA8PCAxNik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAodW5saWtlbHkoaG9zdC0+c2hvc3Rfc3RhdGUgPT0gU0hPU1RfREVMKSkgeworCQljbWQtPnJlc3VsdCA9IChESURfTk9fQ09OTkVDVCA8PCAxNik7CisJCWdvdG8gZG9uZTsKKworCX0KKworCXRyYWNlX3Njc2lfZGlzcGF0Y2hfY21kX3N0YXJ0KGNtZCk7CisJcnRuID0gaG9zdC0+aG9zdHQtPnF1ZXVlY29tbWFuZChob3N0LCBjbWQpOworCWlmIChydG4pIHsKKwkJdHJhY2Vfc2NzaV9kaXNwYXRjaF9jbWRfZXJyb3IoY21kLCBydG4pOworCQlpZiAocnRuICE9IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSAmJgorCQkgICAgcnRuICE9IFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWSkKKwkJCXJ0biA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisKKwkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKKwkJCSJxdWV1ZWNvbW1hbmQgOiByZXF1ZXN0IHJlamVjdGVkXG4iKSk7CisJfQorCisJcmV0dXJuIHJ0bjsKKyBkb25lOgorCWNtZC0+c2NzaV9kb25lKGNtZCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogc2NzaV9kb25lIC0gSW52b2tlIGNvbXBsZXRpb24gb24gZmluaXNoZWQgU0NTSSBjb21tYW5kLgogICogQGNtZDogVGhlIFNDU0kgQ29tbWFuZCBmb3Igd2hpY2ggYSBsb3ctbGV2ZWwgZGV2aWNlIGRyaXZlciAoTExERCkgZ2l2ZXMKICAqIG93bmVyc2hpcCBiYWNrIHRvIFNDU0kgQ29yZSAtLSBpLmUuIHRoZSBMTEREIGhhcyBmaW5pc2hlZCB3aXRoIGl0LgpAQCAtMTcyNSw3ICsxODA5LDcgQEAKIAkJICogd2UgYWRkIHRoZSBkZXYgdG8gdGhlIHN0YXJ2ZWQgbGlzdCBzbyBpdCBldmVudHVhbGx5IGdldHMKIAkJICogYSBydW4gd2hlbiBhIHRhZyBpcyBmcmVlZC4KIAkJICovCi0JCWlmIChibGtfcXVldWVfdGFnZ2VkKHEpICYmICFibGtfcnFfdGFnZ2VkKHJlcSkpIHsKKwkJaWYgKGJsa19xdWV1ZV90YWdnZWQocSkgJiYgIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUVVRUQpKSB7CiAJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkJaWYgKGxpc3RfZW1wdHkoJnNkZXYtPnN0YXJ2ZWRfZW50cnkpKQogCQkJCWxpc3RfYWRkX3RhaWwoJnNkZXYtPnN0YXJ2ZWRfZW50cnksCkBAIC0xNzM5LDYgKzE4MjMsMTEgQEAKIAogCQlpZiAoIXNjc2lfaG9zdF9xdWV1ZV9yZWFkeShxLCBzaG9zdCwgc2RldikpCiAJCQlnb3RvIGhvc3Rfbm90X3JlYWR5OworCQorCQlpZiAoc2Rldi0+c2ltcGxlX3RhZ3MpCisJCQljbWQtPmZsYWdzIHw9IFNDTURfVEFHR0VEOworCQllbHNlCisJCQljbWQtPmZsYWdzICY9IH5TQ01EX1RBR0dFRDsKIAogCQkvKgogCQkgKiBGaW5hbGx5LCBpbml0aWFsaXplIGFueSBlcnJvciBoYW5kbGluZyBwYXJhbWV0ZXJzLCBhbmQgc2V0IHVwCkBAIC0xODkzLDEwICsxOTgyLDEwIEBACiAJCWJsa19tcV9zdGFydF9yZXF1ZXN0KHJlcSk7CiAJfQogCi0JaWYgKGJsa19xdWV1ZV90YWdnZWQocSkpCi0JCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9RVUVVRUQ7CisJaWYgKHNkZXYtPnNpbXBsZV90YWdzKQorCQljbWQtPmZsYWdzIHw9IFNDTURfVEFHR0VEOwogCWVsc2UKLQkJcmVxLT5jbWRfZmxhZ3MgJj0gflJFUV9RVUVVRUQ7CisJCWNtZC0+ZmxhZ3MgJj0gflNDTURfVEFHR0VEOwogCiAJc2NzaV9pbml0X2NtZF9lcnJoKGNtZCk7CiAJY21kLT5zY3NpX2RvbmUgPSBzY3NpX21xX2RvbmU7CkBAIC0yMDkxLDcgKzIxODAsNyBAQAogCiAJbWVtc2V0KCZzaG9zdC0+dGFnX3NldCwgMCwgc2l6ZW9mKHNob3N0LT50YWdfc2V0KSk7CiAJc2hvc3QtPnRhZ19zZXQub3BzID0gJnNjc2lfbXFfb3BzOwotCXNob3N0LT50YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IDE7CisJc2hvc3QtPnRhZ19zZXQubnJfaHdfcXVldWVzID0gc2hvc3QtPm5yX2h3X3F1ZXVlcyA/IDogMTsKIAlzaG9zdC0+dGFnX3NldC5xdWV1ZV9kZXB0aCA9IHNob3N0LT5jYW5fcXVldWU7CiAJc2hvc3QtPnRhZ19zZXQuY21kX3NpemUgPSBjbWRfc2l6ZTsKIAlzaG9zdC0+dGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9sb2dnaW5nLmggYi9kcml2ZXJzL3Njc2kvc2NzaV9sb2dnaW5nLmgKaW5kZXggMWY2NTEzOS4uN2ZlNjRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbG9nZ2luZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xvZ2dpbmcuaApAQCAtNTEsNiArNTEsNyBAQAogCQl9IHdoaWxlICgwKTsJCQkJCVwKIH0gd2hpbGUgKDApCiAjZWxzZQorI2RlZmluZSBTQ1NJX0xPR19MRVZFTChTSElGVCwgQklUUykgMAogI2RlZmluZSBTQ1NJX0NIRUNLX0xPR0dJTkcoU0hJRlQsIEJJVFMsIExFVkVMLCBDTUQpCiAjZW5kaWYgLyogQ09ORklHX1NDU0lfTE9HR0lORyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9wbS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfcG0uYwppbmRleCA3NDU0NDk4Li45ZTQzYWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9wbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3BtLmMKQEAgLTIxMyw4ICsyMTMsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQotCiBzdGF0aWMgaW50IHNkZXZfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CkBAIC0zMzIsMTQgKzMzMCw2IEBACiAJcG1fcnVudGltZV9wdXRfc3luYygmc2hvc3QtPnNob3N0X2dlbmRldik7CiB9CiAKLSNlbHNlCi0KLSNkZWZpbmUgc2NzaV9ydW50aW1lX3N1c3BlbmQJTlVMTAotI2RlZmluZSBzY3NpX3J1bnRpbWVfcmVzdW1lCU5VTEwKLSNkZWZpbmUgc2NzaV9ydW50aW1lX2lkbGUJTlVMTAotCi0jZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KLQogY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2NzaV9idXNfcG1fb3BzID0gewogCS5wcmVwYXJlID0JCXNjc2lfYnVzX3ByZXBhcmUsCiAJLnN1c3BlbmQgPQkJc2NzaV9idXNfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAppbmRleCAxMmI4ZTFiLi5lMzkwMmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCkBAIC0yOSw3ICsyOSw2IEBACiBleHRlcm4gdm9pZCBzY3NpX2V4aXRfaG9zdHModm9pZCk7CiAKIC8qIHNjc2kuYyAqLwotZXh0ZXJuIGludCBzY3NpX2Rpc3BhdGNoX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogZXh0ZXJuIGludCBzY3NpX3NldHVwX2NvbW1hbmRfZnJlZWxpc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwogZXh0ZXJuIHZvaWQgc2NzaV9kZXN0cm95X2NvbW1hbmRfZnJlZWxpc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwogI2lmZGVmIENPTkZJR19TQ1NJX0xPR0dJTkcKQEAgLTg0LDcgKzgzLDYgQEAKIGV4dGVybiBpbnQgc2NzaV9tYXliZV91bmJsb2NrX2hvc3Qoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIGV4dGVybiB2b2lkIHNjc2lfZGV2aWNlX3VuYnVzeShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwogZXh0ZXJuIHZvaWQgc2NzaV9xdWV1ZV9pbnNlcnQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBpbnQgcmVhc29uKTsKLWV4dGVybiB2b2lkIHNjc2lfbmV4dF9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiBleHRlcm4gdm9pZCBzY3NpX2lvX2NvbXBsZXRpb24oc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2NzaV9ydW5faG9zdF9xdWV1ZXMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwogZXh0ZXJuIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpzY3NpX2FsbG9jX3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CkBAIC0xNTcsOCArMTU1LDcgQEAKIC8qIHNjc2lfcG0uYyAqLwogI2lmZGVmIENPTkZJR19QTQogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNjc2lfYnVzX3BtX29wczsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisKIGV4dGVybiB2b2lkIHNjc2lfYXV0b3BtX2dldF90YXJnZXQoc3RydWN0IHNjc2lfdGFyZ2V0ICopOwogZXh0ZXJuIHZvaWQgc2NzaV9hdXRvcG1fcHV0X3RhcmdldChzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CiBleHRlcm4gaW50IHNjc2lfYXV0b3BtX2dldF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKik7CkBAIC0xNjgsNyArMTY1LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2F1dG9wbV9wdXRfdGFyZ2V0KHN0cnVjdCBzY3NpX3RhcmdldCAqdCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHNjc2lfYXV0b3BtX2dldF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKmgpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2F1dG9wbV9wdXRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpoKSB7fQotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIGV4dGVybiBzdHJ1Y3QgYXN5bmNfZG9tYWluIHNjc2lfc2RfcG1fZG9tYWluOwogZXh0ZXJuIHN0cnVjdCBhc3luY19kb21haW4gc2NzaV9zZF9wcm9iZV9kb21haW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggYmEzZjFlOC4uOTgzYWVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtMjg2LDcgKzI4NiwxMyBAQAogCX0KIAlXQVJOX09OX09OQ0UoIWJsa19nZXRfcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSkpOwogCXNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlZGF0YSA9IHNkZXY7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgMCwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOworCisJaWYgKCFzaG9zdF91c2VfYmxrX21xKHNkZXYtPmhvc3QpICYmCisJICAgIChzaG9zdC0+YnF0IHx8IHNob3N0LT5ob3N0dC0+dXNlX2Jsa190YWdzKSkgeworCQlibGtfcXVldWVfaW5pdF90YWdzKHNkZXYtPnJlcXVlc3RfcXVldWUsCisJCQkJICAgIHNkZXYtPmhvc3QtPmNtZF9wZXJfbHVuLCBzaG9zdC0+YnF0KTsKKwl9CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2Rldiwgc2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOwogCiAJc2NzaV9zeXNmc19kZXZpY2VfaW5pdGlhbGl6ZShzZGV2KTsKIApAQCAtODc0LDggKzg4MCwxMCBAQAogCQkJKGlucV9yZXN1bHRbM10gJiAweDBmKSA9PSAxID8gIiBDQ1MiIDogIiIpOwogCiAJaWYgKChzZGV2LT5zY3NpX2xldmVsID49IFNDU0lfMikgJiYgKGlucV9yZXN1bHRbN10gJiAyKSAmJgotCSAgICAhKCpiZmxhZ3MgJiBCTElTVF9OT1RRKSkKKwkgICAgISgqYmZsYWdzICYgQkxJU1RfTk9UUSkpIHsKIAkJc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCA9IDE7CisJCXNkZXYtPnNpbXBsZV90YWdzID0gMTsKKwl9CiAKIAkvKgogCSAqIFNvbWUgZGV2aWNlcyAoVGV4ZWwgQ0QgUk9NIGRyaXZlcykgaGF2ZSBoYW5kc2hha2luZyBwcm9ibGVtcwpAQCAtMTIxNCw5ICsxMjIyLDkgQEAKIAkJc3BhcnNlX2x1biA9IDA7CiAKIAkvKgotCSAqIElmIGxlc3MgdGhhbiBTQ1NJXzFfQ1NTLCBhbmQgbm8gc3BlY2lhbCBsdW4gc2NhbmluZywgc3RvcAorCSAqIElmIGxlc3MgdGhhbiBTQ1NJXzFfQ0NTLCBhbmQgbm8gc3BlY2lhbCBsdW4gc2Nhbm5pbmcsIHN0b3AKIAkgKiBzY2FubmluZzsgdGhpcyBtYXRjaGVzIDIuNCBiZWhhdmlvdXIsIGJ1dCBjb3VsZCBqdXN0IGJlIGEgYnVnCi0JICogKHRvIGNvbnRpbnVlIHNjYW5uaW5nIGEgU0NTSV8xX0NTUyBkZXZpY2UpLgorCSAqICh0byBjb250aW51ZSBzY2FubmluZyBhIFNDU0lfMV9DQ1MgZGV2aWNlKS4KIAkgKgogCSAqIFRoaXMgdGVzdCBpcyBicm9rZW4uICBXZSBtaWdodCBub3QgaGF2ZSBhbnkgZGV2aWNlIG9uIGx1bjAgZm9yCiAJICogYSBzcGFyc2VsdW4gZGV2aWNlLCBhbmQgaWYgdGhhdCdzIHRoZSBjYXNlIHRoZW4gaG93IHdvdWxkIHdlCkBAIC0xNTg1LDE2ICsxNTkzLDE1IEBACiAKIHZvaWQgc2NzaV9yZXNjYW5fZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc2NzaV9kcml2ZXIgKmRydjsKLQkKIAlpZiAoIWRldi0+ZHJpdmVyKQogCQlyZXR1cm47CiAKLQlkcnYgPSB0b19zY3NpX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0JaWYgKHRyeV9tb2R1bGVfZ2V0KGRydi0+b3duZXIpKSB7CisJaWYgKHRyeV9tb2R1bGVfZ2V0KGRldi0+ZHJpdmVyLT5vd25lcikpIHsKKwkJc3RydWN0IHNjc2lfZHJpdmVyICpkcnYgPSB0b19zY3NpX2RyaXZlcihkZXYtPmRyaXZlcik7CisKIAkJaWYgKGRydi0+cmVzY2FuKQogCQkJZHJ2LT5yZXNjYW4oZGV2KTsKLQkJbW9kdWxlX3B1dChkcnYtPm93bmVyKTsKKwkJbW9kdWxlX3B1dChkZXYtPmRyaXZlci0+b3duZXIpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9yZXNjYW5fZGV2aWNlKTsKQEAgLTE3MjcsNyArMTczNCw3IEBACiAKIAlpZiAoKChjaGFubmVsICE9IFNDQU5fV0lMRF9DQVJEKSAmJiAoY2hhbm5lbCA+IHNob3N0LT5tYXhfY2hhbm5lbCkpIHx8CiAJICAgICgoaWQgIT0gU0NBTl9XSUxEX0NBUkQpICYmIChpZCA+PSBzaG9zdC0+bWF4X2lkKSkgfHwKLQkgICAgKChsdW4gIT0gU0NBTl9XSUxEX0NBUkQpICYmIChsdW4gPiBzaG9zdC0+bWF4X2x1bikpKQorCSAgICAoKGx1biAhPSBTQ0FOX1dJTERfQ0FSRCkgJiYgKGx1biA+PSBzaG9zdC0+bWF4X2x1bikpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJnNob3N0LT5zY2FuX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IGY0Y2I3YjMuLjFjYjY0YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtNzI3LDkgKzcyNyw3IEBACiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKIAljb25zdCBjaGFyICpuYW1lID0gIm5vbmUiOwogCi0JaWYgKHNkZXYtPm9yZGVyZWRfdGFncykKLQkJbmFtZSA9ICJvcmRlcmVkIjsKLQllbHNlIGlmIChzZGV2LT5zaW1wbGVfdGFncykKKwlpZiAoc2Rldi0+c2ltcGxlX3RhZ3MpCiAJCW5hbWUgPSAic2ltcGxlIjsKIAogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJXNcbiIsIG5hbWUpOwpAQCAtNzQ3LDkgKzc0NSwxMiBAQAogCWlmICghc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCB8fCAhc2h0LT5jaGFuZ2VfcXVldWVfdHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc3RybmNtcChidWYsICJvcmRlcmVkIiwgNykgPT0gMCkKLQkJdGFnX3R5cGUgPSBNU0dfT1JERVJFRF9UQUc7Ci0JZWxzZSBpZiAoc3RybmNtcChidWYsICJzaW1wbGUiLCA2KSA9PSAwKQorCS8qCisJICogV2UncmUgbmV2ZXIgaXNzdWVpbmcgb3JkZXIgdGFncyB0aGVzZSBkYXlzLCBidXQgYWxsb3cgdGhlIHZhbHVlCisJICogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCSAqLworCWlmIChzdHJuY21wKGJ1ZiwgIm9yZGVyZWQiLCA3KSA9PSAwIHx8CisJICAgIHN0cm5jbXAoYnVmLCAic2ltcGxlIiwgNikgPT0gMCkKIAkJdGFnX3R5cGUgPSBNU0dfU0lNUExFX1RBRzsKIAllbHNlIGlmIChzdHJuY21wKGJ1ZiwgIm5vbmUiLCA0KSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg3NiwxMSArODc3LDEwIEBACiAKIAlkZXB0aCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAKLQlpZiAoZGVwdGggPCAxKQorCWlmIChkZXB0aCA8IDEgfHwgZGVwdGggPiBzaHQtPmNhbl9xdWV1ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR2YWwgPSBzaHQtPmNoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBkZXB0aCwKLQkJCQkJIFNDU0lfUURFUFRIX0RFRkFVTFQpOworCXJldHZhbCA9IHNodC0+Y2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhY2UuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYWNlLmMKaW5kZXggNTAzNTk0ZS4uODJhZjI4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhY2UuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFjZS5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJcmV0dXJuIHNjc2lfdHJhY2VfcncxNihwLCBjZGIsIGxlbik7CiAJY2FzZSBVTk1BUDoKIAkJcmV0dXJuIHNjc2lfdHJhY2VfdW5tYXAocCwgY2RiLCBsZW4pOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKIAkJcmV0dXJuIHNjc2lfdHJhY2Vfc2VydmljZV9hY3Rpb25faW4ocCwgY2RiLCBsZW4pOwogCWNhc2UgVkFSSUFCTEVfTEVOR1RIX0NNRDoKIAkJcmV0dXJuIHNjc2lfdHJhY2VfdmFybGVuKHAsIGNkYiwgbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYwppbmRleCBjZjA4MDcxLi5mYTJhZWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaD4KIApAQCAtMTIwNyw2ICsxMjA4LDI4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcGlfcG9wdWxhdGVfcHByX21zZyk7CiAKKy8qKgorICogc3BpX3BvcHVsYXRlX3RhZ19tc2cgLSBwbGFjZSBhIHRhZyBtZXNzYWdlIGluIGEgYnVmZmVyCisgKiBAbXNnOglwb2ludGVyIHRvIHRoZSBhcmVhIHRvIHBsYWNlIHRoZSB0YWcKKyAqIEBjbWQ6CXBvaW50ZXIgdG8gdGhlIHNjc2kgY29tbWFuZCBmb3IgdGhlIHRhZworICoKKyAqIE5vdGVzOgorICoJZGVzaWduZWQgdG8gY3JlYXRlIHRoZSBjb3JyZWN0IHR5cGUgb2YgdGFnIG1lc3NhZ2UgZm9yIHRoZSAKKyAqCXBhcnRpY3VsYXIgcmVxdWVzdC4gIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHRhZyBtZXNzYWdlLgorICoJTWF5IHJldHVybiAwIGlmIFRDUSBpcyBkaXNhYmxlZCBmb3IgdGhpcyBkZXZpY2UuCisgKiovCitpbnQgc3BpX3BvcHVsYXRlX3RhZ19tc2codW5zaWduZWQgY2hhciAqbXNnLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisgICAgICAgIGlmIChjbWQtPmZsYWdzICYgU0NNRF9UQUdHRUQpIHsKKwkJKm1zZysrID0gTVNHX1NJTVBMRV9UQUc7CisgICAgICAgIAkqbXNnKysgPSBjbWQtPnJlcXVlc3QtPnRhZzsKKyAgICAgICAgCXJldHVybiAyOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3BpX3BvcHVsYXRlX3RhZ19tc2cpOworCiAjaWZkZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG9uZV9ieXRlX21zZ3NbXSA9IHsKIC8qIDB4MDAgKi8gIlRhc2sgQ29tcGxldGUiLCBOVUxMIC8qIEV4dGVuZGVkIE1lc3NhZ2UgKi8sICJTYXZlIFBvaW50ZXJzIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpY2FtLmMgYi9kcml2ZXJzL3Njc2kvc2NzaWNhbS5jCmluZGV4IDkyZDI0ZDYuLjkxMGY0YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpY2FtLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2ljYW0uYwpAQCAtMTYzLDggKzE2Myw4IEBACiAJCSAgICBlbmRfaGVhZCAqIGVuZF9zZWN0b3IgKyBlbmRfc2VjdG9yOwogCiAJCS8qIFRoaXMgaXMgdGhlIGFjdHVhbCBfc2VjdG9yXyBudW1iZXIgYXQgdGhlIGVuZCAqLwotCQlsb2dpY2FsX2VuZCA9IGdldF91bmFsaWduZWQoJmxhcmdlc3QtPnN0YXJ0X3NlY3QpCi0JCSAgICArIGdldF91bmFsaWduZWQoJmxhcmdlc3QtPm5yX3NlY3RzKTsKKwkJbG9naWNhbF9lbmQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmxhcmdlc3QtPnN0YXJ0X3NlY3QpCisJCSAgICArIGdldF91bmFsaWduZWRfbGUzMigmbGFyZ2VzdC0+bnJfc2VjdHMpOwogCiAJCS8qIFRoaXMgaXMgZm9yID4xMDIzIGN5bGluZGVycyAqLwogCQlleHRfY3lsID0gKGxvZ2ljYWxfZW5kIC0gKGVuZF9oZWFkICogZW5kX3NlY3RvciArIGVuZF9zZWN0b3IpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBjZmJhNzRjLi5mZWRhYjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMTE2LDcgKzExNiw3IEBACiBzdGF0aWMgdm9pZCBzZF9yZWFkX2NhcGFjaXR5KHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcik7CiBzdGF0aWMgdm9pZCBzY3NpX2Rpc2tfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpjZGV2KTsKIHN0YXRpYyB2b2lkIHNkX3ByaW50X3NlbnNlX2hkcihzdHJ1Y3Qgc2NzaV9kaXNrICosIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqKTsKLXN0YXRpYyB2b2lkIHNkX3ByaW50X3Jlc3VsdChzdHJ1Y3Qgc2NzaV9kaXNrICosIGludCk7CitzdGF0aWMgdm9pZCBzZF9wcmludF9yZXN1bHQoY29uc3Qgc3RydWN0IHNjc2lfZGlzayAqLCBjb25zdCBjaGFyICosIGludCk7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2RfaW5kZXhfbG9jayk7CiBzdGF0aWMgREVGSU5FX0lEQShzZF9pbmRleF9pZGEpOwpAQCAtNTEwLDkgKzUxMCw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfZHJpdmVyIHNkX3RlbXBsYXRlID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmdlbmRydiA9IHsKIAkJLm5hbWUJCT0gInNkIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucHJvYmUJCT0gc2RfcHJvYmUsCiAJCS5yZW1vdmUJCT0gc2RfcmVtb3ZlLAogCQkuc2h1dGRvd24JPSBzZF9zaHV0ZG93biwKQEAgLTY1Niw3ICs2NTYsNyBAQAogCXVuc2lnbmVkIGludCBsb2dpY2FsX2Jsb2NrX3NpemUgPSBzZGtwLT5kZXZpY2UtPnNlY3Rvcl9zaXplOwogCXVuc2lnbmVkIGludCBtYXhfYmxvY2tzID0gMDsKIAotCXEtPmxpbWl0cy5kaXNjYXJkX3plcm9lc19kYXRhID0gc2RrcC0+bGJwcno7CisJcS0+bGltaXRzLmRpc2NhcmRfemVyb2VzX2RhdGEgPSAwOwogCXEtPmxpbWl0cy5kaXNjYXJkX2FsaWdubWVudCA9IHNka3AtPnVubWFwX2FsaWdubWVudCAqCiAJCWxvZ2ljYWxfYmxvY2tfc2l6ZTsKIAlxLT5saW1pdHMuZGlzY2FyZF9ncmFudWxhcml0eSA9CkBAIC02ODAsMTEgKzY4MCwxMyBAQAogCWNhc2UgU0RfTEJQX1dTMTY6CiAJCW1heF9ibG9ja3MgPSBtaW5fbm90X3plcm8oc2RrcC0+bWF4X3dzX2Jsb2NrcywKIAkJCQkJICAodTMyKVNEX01BWF9XUzE2X0JMT0NLUyk7CisJCXEtPmxpbWl0cy5kaXNjYXJkX3plcm9lc19kYXRhID0gc2RrcC0+bGJwcno7CiAJCWJyZWFrOwogCiAJY2FzZSBTRF9MQlBfV1MxMDoKIAkJbWF4X2Jsb2NrcyA9IG1pbl9ub3RfemVybyhzZGtwLT5tYXhfd3NfYmxvY2tzLAogCQkJCQkgICh1MzIpU0RfTUFYX1dTMTBfQkxPQ0tTKTsKKwkJcS0+bGltaXRzLmRpc2NhcmRfemVyb2VzX2RhdGEgPSBzZGtwLT5sYnByejsKIAkJYnJlYWs7CiAKIAljYXNlIFNEX0xCUF9aRVJPOgpAQCAtNzg0LDcgKzc4Niw3IEBACiAJICogYW1vdW50IG9mIGJsb2NrcyBkZXNjcmliZWQgYnkgdGhlIHJlcXVlc3QuCiAJICovCiAJYmxrX2FkZF9yZXF1ZXN0X3BheWxvYWQocnEsIHBhZ2UsIGxlbik7Ci0JcmV0ID0gc2NzaV9pbml0X2lvKGNtZCwgR0ZQX0FUT01JQyk7CisJcmV0ID0gc2NzaV9pbml0X2lvKGNtZCk7CiAJcnEtPl9fZGF0YV9sZW4gPSBucl9ieXRlczsKIAogb3V0OgpAQCAtODc4LDcgKzg4MCw3IEBACiAJICoga25vd3MgaG93IG11Y2ggdG8gYWN0dWFsbHkgd3JpdGUuCiAJICovCiAJcnEtPl9fZGF0YV9sZW4gPSBzZHAtPnNlY3Rvcl9zaXplOwotCXJldCA9IHNjc2lfaW5pdF9pbyhjbWQsIEdGUF9BVE9NSUMpOworCXJldCA9IHNjc2lfaW5pdF9pbyhjbWQpOwogCXJxLT5fX2RhdGFfbGVuID0gbnJfYnl0ZXM7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTkxMiw3ICs5MTQsNyBAQAogCWludCByZXQ7CiAJdW5zaWduZWQgY2hhciBwcm90ZWN0OwogCi0JcmV0ID0gc2NzaV9pbml0X2lvKFNDcG50LCBHRlBfQVRPTUlDKTsKKwlyZXQgPSBzY3NpX2luaXRfaW8oU0NwbnQpOwogCWlmIChyZXQgIT0gQkxLUFJFUF9PSykKIAkJZ290byBvdXQ7CiAJU0NwbnQgPSBycS0+c3BlY2lhbDsKQEAgLTEzMzQsOSArMTMzNiw5IEBACiAJICogbWF5IHRyeSBhbmQgdGFrZSB0aGUgZGV2aWNlIG9mZmxpbmUsIGluIHdoaWNoIGNhc2UgYWxsIGZ1cnRoZXIKIAkgKiBhY2Nlc3MgdG8gdGhlIGRldmljZSBpcyBwcm9oaWJpdGVkLgogCSAqLwotCWVycm9yID0gc2NzaV9ub25ibG9ja2FibGVfaW9jdGwoc2RwLCBjbWQsIHAsCi0JCQkJCShtb2RlICYgRk1PREVfTkRFTEFZKSAhPSAwKTsKLQlpZiAoIXNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZHApIHx8ICFlcnJvcikKKwllcnJvciA9IHNjc2lfaW9jdGxfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZHAsIGNtZCwKKwkJCShtb2RlICYgRk1PREVfTkRFTEFZKSAhPSAwKTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCiAJLyoKQEAgLTE0OTIsNyArMTQ5NCw3IEBACiAJfQogCiAJaWYgKHJlcykgewotCQlzZF9wcmludF9yZXN1bHQoc2RrcCwgcmVzKTsKKwkJc2RfcHJpbnRfcmVzdWx0KHNka3AsICJTeW5jaHJvbml6ZSBDYWNoZSgxMCkgZmFpbGVkIiwgcmVzKTsKIAogCQlpZiAoZHJpdmVyX2J5dGUocmVzKSAmIERSSVZFUl9TRU5TRSkKIAkJCXNkX3ByaW50X3NlbnNlX2hkcihzZGtwLCAmc3NoZHIpOwpAQCAtMTU0MSwzMSArMTU0MywxOSBAQAogCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gc2NzaV9kaXNrKGJkZXYtPmJkX2Rpc2spLT5kZXZpY2U7Ci0JaW50IHJldDsKKwlpbnQgZXJyb3I7CiAKLQlyZXQgPSBzY3NpX3ZlcmlmeV9ibGtfaW9jdGwoYmRldiwgY21kKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qCi0JICogSWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgZXJyb3IgcmVjb3ZlcnksIGRvbid0IGxldCBhbnlvbmUKLQkgKiBlbHNlIHRyeSBhbmQgdXNlIHRoaXMgZGV2aWNlLiAgQWxzbywgaWYgZXJyb3IgcmVjb3ZlcnkgZmFpbHMsIGl0Ci0JICogbWF5IHRyeSBhbmQgdGFrZSB0aGUgZGV2aWNlIG9mZmxpbmUsIGluIHdoaWNoIGNhc2UgYWxsIGZ1cnRoZXIKLQkgKiBhY2Nlc3MgdG8gdGhlIGRldmljZSBpcyBwcm9oaWJpdGVkLgotCSAqLwotCWlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwllcnJvciA9IHNjc2lfaW9jdGxfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZGV2LCBjbWQsCisJCQkobW9kZSAmIEZNT0RFX05ERUxBWSkgIT0gMCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAJICAgICAgIAotCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+Y29tcGF0X2lvY3RsKSB7Ci0JCXJldCA9IHNkZXYtPmhvc3QtPmhvc3R0LT5jb21wYXRfaW9jdGwoc2RldiwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwotCi0JCXJldHVybiByZXQ7Ci0JfQotCiAJLyogCiAJICogTGV0IHRoZSBzdGF0aWMgaW9jdGwgdHJhbnNsYXRpb24gdGFibGUgdGFrZSBjYXJlIG9mIGl0LgogCSAqLwotCXJldHVybiAtRU5PSU9DVExDTUQ7IAorCWlmICghc2Rldi0+aG9zdC0+aG9zdHQtPmNvbXBhdF9pb2N0bCkKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsgCisJcmV0dXJuIHNkZXYtPmhvc3QtPmhvc3R0LT5jb21wYXRfaW9jdGwoc2RldiwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwogfQogI2VuZGlmCiAKQEAgLTE3MTMsMTcgKzE3MDMsNiBAQAogCQlpZiAoc2Vuc2VfdmFsaWQpCiAJCQlzZW5zZV9kZWZlcnJlZCA9IHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoJnNzaGRyKTsKIAl9Ci0jaWZkZWYgQ09ORklHX1NDU0lfTE9HR0lORwotCVNDU0lfTE9HX0hMQ09NUExFVEUoMSwgc2NzaV9wcmludF9yZXN1bHQoU0NwbnQpKTsKLQlpZiAoc2Vuc2VfdmFsaWQpIHsKLQkJU0NTSV9MT0dfSExDT01QTEVURSgxLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LAotCQkJCQkJICAgInNkX2RvbmU6IHNiW3Jlc3BjLHNrLGFzYywiCi0JCQkJCQkgICAiYXNjcV09JXgsJXgsJXgsJXhcbiIsCi0JCQkJCQkgICBzc2hkci5yZXNwb25zZV9jb2RlLAotCQkJCQkJICAgc3NoZHIuc2Vuc2Vfa2V5LCBzc2hkci5hc2MsCi0JCQkJCQkgICBzc2hkci5hc2NxKSk7Ci0JfQotI2VuZGlmCiAJc2RrcC0+bWVkaXVtX2FjY2Vzc190aW1lZF9vdXQgPSAwOwogCiAJaWYgKGRyaXZlcl9ieXRlKHJlc3VsdCkgIT0gRFJJVkVSX1NFTlNFICYmCkBAIC0xNzQzLDcgKzE3MjIsNiBAQAogCQkgKiB1bmtub3duIGFtb3VudCBvZiBkYXRhIHdhcyB0cmFuc2ZlcnJlZCBzbyB0cmVhdCBpdCBhcyBhbgogCQkgKiBlcnJvci4KIAkJICovCi0JCXNjc2lfcHJpbnRfc2Vuc2UoInNkIiwgU0NwbnQpOwogCQlTQ3BudC0+cmVzdWx0ID0gMDsKIAkJbWVtc2V0KFNDcG50LT5zZW5zZV9idWZmZXIsIDAsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiAJCWJyZWFrOwpAQCAtMTc3OSw2ICsxNzU3LDEwIEBACiAJCWJyZWFrOwogCX0KICBvdXQ6CisJU0NTSV9MT0dfSExDT01QTEVURSgxLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LAorCQkJCQkgICAic2RfZG9uZTogY29tcGxldGVkICVkIG9mICVkIGJ5dGVzXG4iLAorCQkJCQkgICBnb29kX2J5dGVzLCBzY3NpX2J1ZmZsZW4oU0NwbnQpKSk7CisKIAlpZiAocnFfZGF0YV9kaXIoU0NwbnQtPnJlcXVlc3QpID09IFJFQUQgJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkKIAkJc2RfZGlmX2NvbXBsZXRlKFNDcG50LCBnb29kX2J5dGVzKTsKIApAQCAtMTgzNCwxMiArMTgxNiwxMiBAQAogCQkJLyogbm8gc2Vuc2UsIFRVUiBlaXRoZXIgc3VjY2VlZGVkIG9yIGZhaWxlZAogCQkJICogd2l0aCBhIHN0YXR1cyBlcnJvciAqLwogCQkJaWYoIXNwaW50aW1lICYmICFzY3NpX3N0YXR1c19pc19nb29kKHRoZV9yZXN1bHQpKSB7Ci0JCQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiVW5pdCBOb3QgUmVhZHlcbiIpOwotCQkJCXNkX3ByaW50X3Jlc3VsdChzZGtwLCB0aGVfcmVzdWx0KTsKKwkJCQlzZF9wcmludF9yZXN1bHQoc2RrcCwgIlRlc3QgVW5pdCBSZWFkeSBmYWlsZWQiLAorCQkJCQkJdGhlX3Jlc3VsdCk7CiAJCQl9CiAJCQlicmVhazsKIAkJfQotCQkJCQkKKwogCQkvKgogCQkgKiBUaGUgZGV2aWNlIGRvZXMgbm90IHdhbnQgdGhlIGF1dG9tYXRpYyBzdGFydCB0byBiZSBpc3N1ZWQuCiAJCSAqLwpAQCAtMTk1NSw3ICsxOTM3LDYgQEAKIAkJCXN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIsIGludCBzZW5zZV92YWxpZCwKIAkJCWludCB0aGVfcmVzdWx0KQogewotCXNkX3ByaW50X3Jlc3VsdChzZGtwLCB0aGVfcmVzdWx0KTsKIAlpZiAoZHJpdmVyX2J5dGUodGhlX3Jlc3VsdCkgJiBEUklWRVJfU0VOU0UpCiAJCXNkX3ByaW50X3NlbnNlX2hkcihzZGtwLCBzc2hkcik7CiAJZWxzZQpAQCAtMjAwMSw3ICsxOTgyLDcgQEAKIAogCWRvIHsKIAkJbWVtc2V0KGNtZCwgMCwgMTYpOwotCQljbWRbMF0gPSBTRVJWSUNFX0FDVElPTl9JTjsKKwkJY21kWzBdID0gU0VSVklDRV9BQ1RJT05fSU5fMTY7CiAJCWNtZFsxXSA9IFNBSV9SRUFEX0NBUEFDSVRZXzE2OwogCQljbWRbMTNdID0gUkMxNl9MRU47CiAJCW1lbXNldChidWZmZXIsIDAsIFJDMTZfTEVOKTsKQEAgLTIwMzYsNyArMjAxNyw3IEBACiAJfSB3aGlsZSAodGhlX3Jlc3VsdCAmJiByZXRyaWVzKTsKIAogCWlmICh0aGVfcmVzdWx0KSB7Ci0JCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIlJFQUQgQ0FQQUNJVFkoMTYpIGZhaWxlZFxuIik7CisJCXNkX3ByaW50X3Jlc3VsdChzZGtwLCAiUmVhZCBDYXBhY2l0eSgxNikgZmFpbGVkIiwgdGhlX3Jlc3VsdCk7CiAJCXJlYWRfY2FwYWNpdHlfZXJyb3Ioc2RrcCwgc2RwLCAmc3NoZHIsIHNlbnNlX3ZhbGlkLCB0aGVfcmVzdWx0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjExOCw3ICsyMDk5LDcgQEAKIAl9IHdoaWxlICh0aGVfcmVzdWx0ICYmIHJldHJpZXMpOwogCiAJaWYgKHRoZV9yZXN1bHQpIHsKLQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiUkVBRCBDQVBBQ0lUWSBmYWlsZWRcbiIpOworCQlzZF9wcmludF9yZXN1bHQoc2RrcCwgIlJlYWQgQ2FwYWNpdHkoMTApIGZhaWxlZCIsIHRoZV9yZXN1bHQpOwogCQlyZWFkX2NhcGFjaXR5X2Vycm9yKHNka3AsIHNkcCwgJnNzaGRyLCBzZW5zZV92YWxpZCwgdGhlX3Jlc3VsdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI2NDMsMTIgKzI2MjQsMTIgQEAKIAogCQl9IGVsc2UgewkvKiBMQlAgVlBEIHBhZ2UgdGVsbHMgdXMgd2hhdCB0byB1c2UgKi8KIAotCQkJaWYgKHNka3AtPmxicHUgJiYgc2RrcC0+bWF4X3VubWFwX2Jsb2NrcykKLQkJCQlzZF9jb25maWdfZGlzY2FyZChzZGtwLCBTRF9MQlBfVU5NQVApOwotCQkJZWxzZSBpZiAoc2RrcC0+bGJwd3MpCisJCQlpZiAoc2RrcC0+bGJwd3MpCiAJCQkJc2RfY29uZmlnX2Rpc2NhcmQoc2RrcCwgU0RfTEJQX1dTMTYpOwogCQkJZWxzZSBpZiAoc2RrcC0+bGJwd3MxMCkKIAkJCQlzZF9jb25maWdfZGlzY2FyZChzZGtwLCBTRF9MQlBfV1MxMCk7CisJCQllbHNlIGlmIChzZGtwLT5sYnB1ICYmIHNka3AtPm1heF91bm1hcF9ibG9ja3MpCisJCQkJc2RfY29uZmlnX2Rpc2NhcmQoc2RrcCwgU0RfTEJQX1VOTUFQKTsKIAkJCWVsc2UKIAkJCQlzZF9jb25maWdfZGlzY2FyZChzZGtwLCBTRF9MQlBfRElTQUJMRSk7CiAJCX0KQEAgLTMxNDIsOCArMzEyMyw3IEBACiAJcmVzID0gc2NzaV9leGVjdXRlX3JlcV9mbGFncyhzZHAsIGNtZCwgRE1BX05PTkUsIE5VTEwsIDAsICZzc2hkciwKIAkJCSAgICAgICBTRF9USU1FT1VULCBTRF9NQVhfUkVUUklFUywgTlVMTCwgUkVRX1BNKTsKIAlpZiAocmVzKSB7Ci0JCXNkX3ByaW50ayhLRVJOX1dBUk5JTkcsIHNka3AsICJTVEFSVF9TVE9QIEZBSUxFRFxuIik7Ci0JCXNkX3ByaW50X3Jlc3VsdChzZGtwLCByZXMpOworCQlzZF9wcmludF9yZXN1bHQoc2RrcCwgIlN0YXJ0L1N0b3AgVW5pdCBmYWlsZWQiLCByZXMpOwogCQlpZiAoZHJpdmVyX2J5dGUocmVzKSAmIERSSVZFUl9TRU5TRSkKIAkJCXNkX3ByaW50X3NlbnNlX2hkcihzZGtwLCAmc3NoZHIpOwogCQlpZiAoc2NzaV9zZW5zZV92YWxpZCgmc3NoZHIpICYmCkBAIC0zMzM3LDE1ICszMzE3LDI3IEBACiBzdGF0aWMgdm9pZCBzZF9wcmludF9zZW5zZV9oZHIoc3RydWN0IHNjc2lfZGlzayAqc2RrcCwKIAkJCSAgICAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQogewotCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsICIgIik7Ci0Jc2NzaV9zaG93X3NlbnNlX2hkcihzc2hkcik7Ci0Jc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwgIiAiKTsKLQlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzc2hkci0+YXNjLCBzc2hkci0+YXNjcSk7CisJc2NzaV9zaG93X3NlbnNlX2hkcihzZGtwLT5kZXZpY2UsCisJCQkgICAgc2RrcC0+ZGlzayA/IHNka3AtPmRpc2stPmRpc2tfbmFtZSA6IE5VTEwsIHNzaGRyKTsKKwlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzZGtwLT5kZXZpY2UsCisJCQkgICAgIHNka3AtPmRpc2sgPyBzZGtwLT5kaXNrLT5kaXNrX25hbWUgOiBOVUxMLAorCQkJICAgICBzc2hkci0+YXNjLCBzc2hkci0+YXNjcSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3ByaW50X3Jlc3VsdChzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCBpbnQgcmVzdWx0KQorc3RhdGljIHZvaWQgc2RfcHJpbnRfcmVzdWx0KGNvbnN0IHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgICBpbnQgcmVzdWx0KQogewotCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsICIgIik7Ci0Jc2NzaV9zaG93X3Jlc3VsdChyZXN1bHQpOworCWNvbnN0IGNoYXIgKmhiX3N0cmluZyA9IHNjc2lfaG9zdGJ5dGVfc3RyaW5nKHJlc3VsdCk7CisJY29uc3QgY2hhciAqZGJfc3RyaW5nID0gc2NzaV9kcml2ZXJieXRlX3N0cmluZyhyZXN1bHQpOworCisJaWYgKGhiX3N0cmluZyB8fCBkYl9zdHJpbmcpCisJCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsCisJCQkgICIlczogUmVzdWx0OiBob3N0Ynl0ZT0lcyBkcml2ZXJieXRlPSVzXG4iLCBtc2csCisJCQkgIGhiX3N0cmluZyA/IGhiX3N0cmluZyA6ICJpbnZhbGlkIiwKKwkJCSAgZGJfc3RyaW5nID8gZGJfc3RyaW5nIDogImludmFsaWQiKTsKKwllbHNlCisJCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsCisJCQkgICIlczogUmVzdWx0OiBob3N0Ynl0ZT0weCUwMnggZHJpdmVyYnl0ZT0weCUwMnhcbiIsCisJCQkgIG1zZywgaG9zdF9ieXRlKHJlc3VsdCksIGRyaXZlcl9ieXRlKHJlc3VsdCkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuaCBiL2RyaXZlcnMvc2NzaS9zZC5oCmluZGV4IDQ2NzM3NzguLjYzYmE1Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5oCkBAIC0xMDMsOSArMTAzLDkgQEAKIAogI2RlZmluZSBzZF9wcmludGsocHJlZml4LCBzZHNrLCBmbXQsIGEuLi4pCQkJCVwKICAgICAgICAgKHNkc2spLT5kaXNrID8JCQkJCQkJXAotCXNkZXZfcHJpbnRrKHByZWZpeCwgKHNkc2spLT5kZXZpY2UsICJbJXNdICIgZm10LAkJXAotCQkgICAgKHNkc2spLT5kaXNrLT5kaXNrX25hbWUsICMjYSkgOgkJCVwKLQlzZGV2X3ByaW50ayhwcmVmaXgsIChzZHNrKS0+ZGV2aWNlLCBmbXQsICMjYSkKKwkgICAgICBzZGV2X3ByZWZpeF9wcmludGsocHJlZml4LCAoc2RzayktPmRldmljZSwJCVwKKwkJCQkgKHNkc2spLT5kaXNrLT5kaXNrX25hbWUsIGZtdCwgIyNhKSA6CVwKKwkgICAgICBzZGV2X3ByaW50ayhwcmVmaXgsIChzZHNrKS0+ZGV2aWNlLCBmbXQsICMjYSkKIAogI2RlZmluZSBzZF9maXJzdF9wcmludGsocHJlZml4LCBzZHNrLCBmbXQsIGEuLi4pCQkJXAogCWRvIHsJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZXMuYyBiL2RyaXZlcnMvc2NzaS9zZXMuYwppbmRleCA4MGJmZWNlLi5iN2U3OWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2VzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Nlcy5jCkBAIC02OTMsOSArNjkzLDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kcml2ZXIgc2VzX3RlbXBsYXRlID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmdlbmRydiA9IHsKIAkJLm5hbWUJCT0gInNlcyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnByb2JlCQk9IHNlc19wcm9iZSwKIAkJLnJlbW92ZQkJPSBzZXNfcmVtb3ZlLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDYwMzU0NDQuLmIxNGY2NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0yMTksOCArMjE5LDggQEAKICNkZWZpbmUgU1pfU0dfUkVRX0lORk8gc2l6ZW9mKHNnX3JlcV9pbmZvX3QpCiAKICNkZWZpbmUgc2dfcHJpbnRrKHByZWZpeCwgc2RwLCBmbXQsIGEuLi4pIFwKLQlzZGV2X3ByaW50ayhwcmVmaXgsIChzZHApLT5kZXZpY2UsICJbJXNdICIgZm10LCBcCi0JCSAgICAoc2RwKS0+ZGlzay0+ZGlza19uYW1lLCAjI2EpCisJc2Rldl9wcmVmaXhfcHJpbnRrKHByZWZpeCwgKHNkcCktPmRldmljZSwJCVwKKwkJCSAgIChzZHApLT5kaXNrLT5kaXNrX25hbWUsIGZtdCwgIyNhKQogCiBzdGF0aWMgaW50IHNnX2FsbG93X2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgY2hhciAqY21kKQogewpAQCAtMTA3MSwzOSArMTA3MSw2IEBACiAJCWlmIChhdG9taWNfcmVhZCgmc2RwLT5kZXRhY2hpbmcpKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCXJldHVybiBwdXRfdXNlcihzZHAtPmRldmljZS0+aG9zdC0+aG9zdHQtPmVtdWxhdGVkLCBpcCk7Ci0JY2FzZSBTR19TQ1NJX1JFU0VUOgotCQlpZiAoYXRvbWljX3JlYWQoJnNkcC0+ZGV0YWNoaW5nKSkKLQkJCXJldHVybiAtRU5PREVWOwotCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCWlmIChzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2RwLT5kZXZpY2UtPmhvc3QpKQotCQkJCXJldHVybiAtRUJVU1k7Ci0JCX0gZWxzZSBpZiAoIXNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZHAtPmRldmljZSkpCi0JCQlyZXR1cm4gLUVCVVNZOwotCQlyZXN1bHQgPSBnZXRfdXNlcih2YWwsIGlwKTsKLQkJaWYgKHJlc3VsdCkKLQkJCXJldHVybiByZXN1bHQ7Ci0JCWlmIChTR19TQ1NJX1JFU0VUX05PVEhJTkcgPT0gdmFsKQotCQkJcmV0dXJuIDA7Ci0JCXN3aXRjaCAodmFsKSB7Ci0JCWNhc2UgU0dfU0NTSV9SRVNFVF9ERVZJQ0U6Ci0JCQl2YWwgPSBTQ1NJX1RSWV9SRVNFVF9ERVZJQ0U7Ci0JCQlicmVhazsKLQkJY2FzZSBTR19TQ1NJX1JFU0VUX1RBUkdFVDoKLQkJCXZhbCA9IFNDU0lfVFJZX1JFU0VUX1RBUkdFVDsKLQkJCWJyZWFrOwotCQljYXNlIFNHX1NDU0lfUkVTRVRfQlVTOgotCQkJdmFsID0gU0NTSV9UUllfUkVTRVRfQlVTOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0dfU0NTSV9SRVNFVF9IT1NUOgotCQkJdmFsID0gU0NTSV9UUllfUkVTRVRfSE9TVDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8ICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCXJldHVybiAoc2NzaV9yZXNldF9wcm92aWRlcihzZHAtPmRldmljZSwgdmFsKSA9PQotCQkJU1VDQ0VTUykgPyAwIDogLUVJTzsKIAljYXNlIFNDU0lfSU9DVExfU0VORF9DT01NQU5EOgogCQlpZiAoYXRvbWljX3JlYWQoJnNkcC0+ZGV0YWNoaW5nKSkKIAkJCXJldHVybiAtRU5PREVWOwpAQCAtMTEyMywxMyArMTA5MCw2IEBACiAJCQlyZXR1cm4gcmVzdWx0OwogCQlzZHAtPnNnZGVidWcgPSAoY2hhcikgdmFsOwogCQlyZXR1cm4gMDsKLQljYXNlIFNDU0lfSU9DVExfR0VUX0lETFVOOgotCWNhc2UgU0NTSV9JT0NUTF9HRVRfQlVTX05VTUJFUjoKLQljYXNlIFNDU0lfSU9DVExfUFJPQkVfSE9TVDoKLQljYXNlIFNHX0dFVF9UUkFOU0ZPUk06Ci0JCWlmIChhdG9taWNfcmVhZCgmc2RwLT5kZXRhY2hpbmcpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCXJldHVybiBzY3NpX2lvY3RsKHNkcC0+ZGV2aWNlLCBjbWRfaW4sIHApOwogCWNhc2UgQkxLU0VDVEdFVDoKIAkJcmV0dXJuIHB1dF91c2VyKG1heF9zZWN0b3JzX2J5dGVzKHNkcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlKSwKIAkJCQlpcCk7CkBAIC0xMTQ1LDExICsxMTA1LDI1IEBACiAJCXJldHVybiBibGtfdHJhY2Vfc3RhcnRzdG9wKHNkcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCAwKTsKIAljYXNlIEJMS1RSQUNFVEVBUkRPV046CiAJCXJldHVybiBibGtfdHJhY2VfcmVtb3ZlKHNkcC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlKTsKKwljYXNlIFNDU0lfSU9DVExfR0VUX0lETFVOOgorCWNhc2UgU0NTSV9JT0NUTF9HRVRfQlVTX05VTUJFUjoKKwljYXNlIFNDU0lfSU9DVExfUFJPQkVfSE9TVDoKKwljYXNlIFNHX0dFVF9UUkFOU0ZPUk06CisJY2FzZSBTR19TQ1NJX1JFU0VUOgorCQlpZiAoYXRvbWljX3JlYWQoJnNkcC0+ZGV0YWNoaW5nKSkKKwkJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAocmVhZF9vbmx5KQogCQkJcmV0dXJuIC1FUEVSTTsJLyogZG9uJ3Qga25vdyBzbyB0YWtlIHNhZmUgYXBwcm9hY2ggKi8KLQkJcmV0dXJuIHNjc2lfaW9jdGwoc2RwLT5kZXZpY2UsIGNtZF9pbiwgcCk7CisJCWJyZWFrOwogCX0KKworCXJlc3VsdCA9IHNjc2lfaW9jdGxfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZHAtPmRldmljZSwKKwkJCWNtZF9pbiwgZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBzY3NpX2lvY3RsKHNkcC0+ZGV2aWNlLCBjbWRfaW4sIHApOwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtMTM2MCw3ICsxMzM0LDcgQEAKIAkJaWYgKChzZHAtPnNnZGVidWcgPiAwKSAmJgogCQkgICAgKChDSEVDS19DT05ESVRJT04gPT0gc3JwLT5oZWFkZXIubWFza2VkX3N0YXR1cykgfHwKIAkJICAgICAoQ09NTUFORF9URVJNSU5BVEVEID09IHNycC0+aGVhZGVyLm1hc2tlZF9zdGF0dXMpKSkKLQkJCV9fc2NzaV9wcmludF9zZW5zZShfX2Z1bmNfXywgc2Vuc2UsCisJCQlfX3Njc2lfcHJpbnRfc2Vuc2Uoc2RwLT5kZXZpY2UsIF9fZnVuY19fLCBzZW5zZSwKIAkJCQkJICAgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKIAogCQkvKiBGb2xsb3dpbmcgaWYgc3RhdGVtZW50IGlzIGEgcGF0Y2ggc3VwcGxpZWQgYnkgRXJpYyBZb3VuZ2RhbGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5jIGIvZHJpdmVycy9zY3NpL3NyLmMKaW5kZXggMmRlNDRjYy4uOGJkNTRhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyLmMKQEAgLTg4LDkgKzg4LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9kcml2ZXIgc3JfdGVtcGxhdGUgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZ2VuZHJ2ID0gewogCQkubmFtZSAgIAk9ICJzciIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnByb2JlCQk9IHNyX3Byb2JlLAogCQkucmVtb3ZlCQk9IHNyX3JlbW92ZSwKIAkJLnBtCQk9ICZzcl9wbV9vcHMsCkBAIC0zODcsNyArMzg3LDcgQEAKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBTQ3BudC0+cmVxdWVzdDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc2NzaV9pbml0X2lvKFNDcG50LCBHRlBfQVRPTUlDKTsKKwlyZXQgPSBzY3NpX2luaXRfaW8oU0NwbnQpOwogCWlmIChyZXQgIT0gQkxLUFJFUF9PSykKIAkJZ290byBvdXQ7CiAJU0NwbnQgPSBycS0+c3BlY2lhbDsKQEAgLTU0OSw2ICs1NDksMTEgQEAKIAogCW11dGV4X2xvY2soJnNyX211dGV4KTsKIAorCXJldCA9IHNjc2lfaW9jdGxfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZGV2LCBjbWQsCisJCQkobW9kZSAmIEZNT0RFX05ERUxBWSkgIT0gMCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKIAkvKgogCSAqIFNlbmQgU0NTSSBhZGRyZXNzaW5nIGlvY3RscyBkaXJlY3RseSB0byBtaWQgbGV2ZWwsIHNlbmQgb3RoZXIKIAkgKiBpb2N0bHMgdG8gY2Ryb20vYmxvY2sgbGV2ZWwuCkBAIC01NjQsMTYgKzU2OSw2IEBACiAJaWYgKHJldCAhPSAtRU5PU1lTKQogCQlnb3RvIG91dDsKIAotCS8qCi0JICogRU5PREVWIG1lYW5zIHRoYXQgd2UgZGlkbid0IHJlY29nbmlzZSB0aGUgaW9jdGwsIG9yIHRoYXQgd2UKLQkgKiBjYW5ub3QgZXhlY3V0ZSBpdCBpbiB0aGUgY3VycmVudCBkZXZpY2Ugc3RhdGUuICBJbiBlaXRoZXIKLQkgKiBjYXNlIGZhbGwgdGhyb3VnaCB0byBzY3NpX2lvY3RsLCB3aGljaCB3aWxsIHJldHVybiBFTkRPRVYgYWdhaW4KLQkgKiBpZiBpdCBkb2Vzbid0IHJlY29nbmlzZSB0aGUgaW9jdGwKLQkgKi8KLQlyZXQgPSBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzZGV2LCBjbWQsIGFyZ3AsCi0JCQkJCShtb2RlICYgRk1PREVfTkRFTEFZKSAhPSAwKTsKLQlpZiAocmV0ICE9IC1FTk9ERVYpCi0JCWdvdG8gb3V0OwogCXJldCA9IHNjc2lfaW9jdGwoc2RldiwgY21kLCBhcmdwKTsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmggYi9kcml2ZXJzL3Njc2kvc3IuaAppbmRleCAxZDFmNmY0Li4xZGUzMzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuaAorKysgYi9kcml2ZXJzL3Njc2kvc3IuaApAQCAtNTcsOCArNTcsNyBAQAogfSBTY3NpX0NEOwogCiAjZGVmaW5lIHNyX3ByaW50ayhwcmVmaXgsIGNkLCBmbXQsIGEuLi4pIFwKLQlzZGV2X3ByaW50ayhwcmVmaXgsIChjZCktPmRldmljZSwgIlslc10gIiBmbXQsIFwKLQkJICAgIChjZCktPmNkaS5uYW1lLCAjI2EpCisJc2Rldl9wcmVmaXhfcHJpbnRrKHByZWZpeCwgKGNkKS0+ZGV2aWNlLCAoY2QpLT5jZGkubmFtZSwgZm10LCAjI2EpCiAKIGludCBzcl9kb19pb2N0bChTY3NpX0NEICosIHN0cnVjdCBwYWNrZXRfY29tbWFuZCAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyX2lvY3RsLmMgYi9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYwppbmRleCA2Mzg5ZmNmLi5mYjkyOWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCQkJCSAgIkNEUk9NIG5vdCByZWFkeS4gIE1ha2Ugc3VyZSB0aGVyZSAiCiAJCQkJCSAgImlzIGEgZGlzYyBpbiB0aGUgZHJpdmUuXG4iKTsKICNpZmRlZiBERUJVRwotCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoInNyIiwgJnNzaGRyKTsKKwkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKGNkLT5kZXZpY2UsIGNkLT5jZGkubmFtZSwgJnNzaGRyKTsKICNlbmRpZgogCQkJZXJyID0gLUVOT01FRElVTTsKIAkJCWJyZWFrOwpAQCAtMjU3LDE1ICsyNTcsMTUgQEAKIAkJCQkvKiBzZW5zZTogSW52YWxpZCBjb21tYW5kIG9wZXJhdGlvbiBjb2RlICovCiAJCQkJZXJyID0gLUVEUklWRV9DQU5UX0RPX1RISVM7CiAjaWZkZWYgREVCVUcKLQkJCV9fc2NzaV9wcmludF9jb21tYW5kKGNnYy0+Y21kKTsKLQkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKCJzciIsICZzc2hkcik7CisJCQlfX3Njc2lfcHJpbnRfY29tbWFuZChjZ2MtPmNtZCwgQ0RST01fUEFDS0VUX1NJWkUpOworCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoY2QtPmRldmljZSwgY2QtPmNkaS5uYW1lLCAmc3NoZHIpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXNyX3ByaW50ayhLRVJOX0VSUiwgY2QsCiAJCQkJICAiQ0RST00gKGlvY3RsKSBlcnJvciwgY29tbWFuZDogIik7Ci0JCQlfX3Njc2lfcHJpbnRfY29tbWFuZChjZ2MtPmNtZCk7Ci0JCQlzY3NpX3ByaW50X3NlbnNlX2hkcigic3IiLCAmc3NoZHIpOworCQkJX19zY3NpX3ByaW50X2NvbW1hbmQoY2djLT5jbWQsIENEUk9NX1BBQ0tFVF9TSVpFKTsKKwkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKGNkLT5kZXZpY2UsIGNkLT5jZGkubmFtZSwgJnNzaGRyKTsKIAkJCWVyciA9IC1FSU87CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IDRkYWEzNzIuLjEyOGQzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC01Niw3ICs1Niw4IEBACiAKIC8qIFRoZSBkcml2ZXIgcHJpbnRzIHNvbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uIG9uIHRoZSBjb25zb2xlIGlmIERFQlVHCiAgICBpcyBkZWZpbmVkIGFuZCBub24temVyby4gKi8KLSNkZWZpbmUgREVCVUcgMAorI2RlZmluZSBERUJVRyAxCisjZGVmaW5lIE5PX0RFQlVHIDAKIAogI2RlZmluZSBTVF9ERUJfTVNHICBLRVJOX05PVElDRQogI2lmIERFQlVHCkBAIC04MCw2ICs4MSw3IEBACiBzdGF0aWMgaW50IHRyeV9kaXJlY3RfaW8gPSBUUllfRElSRUNUX0lPOwogc3RhdGljIGludCB0cnlfcmRpbyA9IDE7CiBzdGF0aWMgaW50IHRyeV93ZGlvID0gMTsKK3N0YXRpYyBpbnQgZGVidWdfZmxhZzsKIAogc3RhdGljIHN0cnVjdCBjbGFzcyBzdF9zeXNmc19jbGFzczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpzdF9kZXZfZ3JvdXBzW107CkBAIC0xMDAsNiArMTAyLDkgQEAKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3NnX3NlZ3MsICJNYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlciBzZWdtZW50cyB0byB1c2UgKDI1NikiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCh0cnlfZGlyZWN0X2lvLCB0cnlfZGlyZWN0X2lvLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0cnlfZGlyZWN0X2lvLCAiVHJ5IGRpcmVjdCBJL08gYmV0d2VlbiB1c2VyIGJ1ZmZlciBhbmQgdGFwZSBkcml2ZSAoMSkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19mbGFnLCBkZWJ1Z19mbGFnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19mbGFnLCAiRW5hYmxlIERFQlVHLCBzYW1lIGFzIHNldHRpbmcgZGVidWdnaW5nPTEiKTsKKwogCiAvKiBFeHRyYSBwYXJhbWV0ZXJzIGZvciB0ZXN0aW5nICovCiBtb2R1bGVfcGFyYW1fbmFtZWQodHJ5X3JkaW8sIHRyeV9yZGlvLCBpbnQsIDApOwpAQCAtMTI0LDYgKzEyOSw5IEBACiAJfSwKIAl7CiAJCSJ0cnlfZGlyZWN0X2lvIiwgJnRyeV9kaXJlY3RfaW8KKwl9LAorCXsKKwkJImRlYnVnX2ZsYWciLCAmZGVidWdfZmxhZwogCX0KIH07CiAjZW5kaWYKQEAgLTE5NCw5ICsyMDIsOSBAQAogc3RhdGljIHZvaWQgZG9fcmVtb3ZlX3N5c2ZzX2ZpbGVzKHZvaWQpOwogCiBzdGF0aWMgc3RydWN0IHNjc2lfZHJpdmVyIHN0X3RlbXBsYXRlID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmdlbmRydiA9IHsKIAkJLm5hbWUJCT0gInN0IiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucHJvYmUJCT0gc3RfcHJvYmUsCiAJCS5yZW1vdmUJCT0gc3RfcmVtb3ZlLAogCX0sCkBAIC0zMDYsOCArMzE0LDcgQEAKIH0KIAogI2RlZmluZSBzdF9wcmludGsocHJlZml4LCB0LCBmbXQsIGEuLi4pIFwKLQlzZGV2X3ByaW50ayhwcmVmaXgsICh0KS0+ZGV2aWNlLCAiJXM6ICIgZm10LCBcCi0JCSAgICB0YXBlX25hbWUodCksICMjYSkKKwlzZGV2X3ByZWZpeF9wcmludGsocHJlZml4LCAodCktPmRldmljZSwgdGFwZV9uYW1lKHQpLCBmbXQsICMjYSkKICNpZmRlZiBERUJVRwogI2RlZmluZSBERUJDX3ByaW50ayh0LCBmbXQsIGEuLi4pIFwKIAlpZiAoZGVidWdnaW5nKSB7IHN0X3ByaW50ayhTVF9ERUJfTVNHLCB0LCBmbXQsICMjYSApOyB9CkBAIC0zNzQsNyArMzgxLDggQEAKIAkJCSAgICBTUnBudC0+Y21kWzBdLCBTUnBudC0+Y21kWzFdLCBTUnBudC0+Y21kWzJdLAogCQkJICAgIFNScG50LT5jbWRbM10sIFNScG50LT5jbWRbNF0sIFNScG50LT5jbWRbNV0pOwogCQlpZiAoY21kc3RhdHAtPmhhdmVfc2Vuc2UpCi0JCQkgX19zY3NpX3ByaW50X3NlbnNlKG5hbWUsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCV9fc2NzaV9wcmludF9zZW5zZShTVHAtPmRldmljZSwgbmFtZSwKKwkJCQkJICAgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCX0gKSAvKiBlbmQgREVCICovCiAJaWYgKCFkZWJ1Z2dpbmcpIHsgLyogQWJub3JtYWwgY29uZGl0aW9ucyBmb3IgdGFwZSAqLwogCQlpZiAoIWNtZHN0YXRwLT5oYXZlX3NlbnNlKQpAQCAtMzkwLDcgKzM5OCw4IEBACiAJCQkgU1JwbnQtPmNtZFswXSAhPSBNT0RFX1NFTlNFICYmCiAJCQkgU1JwbnQtPmNtZFswXSAhPSBURVNUX1VOSVRfUkVBRFkpIHsKIAotCQkJX19zY3NpX3ByaW50X3NlbnNlKG5hbWUsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCV9fc2NzaV9wcmludF9zZW5zZShTVHAtPmRldmljZSwgbmFtZSwKKwkJCQkJICAgU1JwbnQtPnNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQl9CiAJfQogCkBAIC04NTIsMTcgKzg2MSwxNiBAQAogLyogTG9jayBvciB1bmxvY2sgdGhlIGRyaXZlIGRvb3IuIERvbid0IHVzZSB3aGVuIHN0X3JlcXVlc3QgYWxsb2NhdGVkLiAqLwogc3RhdGljIGludCBkb19kb29yX2xvY2soc3RydWN0IHNjc2lfdGFwZSAqIFNUcCwgaW50IGRvX2xvY2spCiB7Ci0JaW50IHJldHZhbCwgY21kOworCWludCByZXR2YWw7CiAKLQljbWQgPSBkb19sb2NrID8gU0NTSV9JT0NUTF9ET09STE9DSyA6IFNDU0lfSU9DVExfRE9PUlVOTE9DSzsKIAlERUJDX3ByaW50ayhTVHAsICIlc29ja2luZyBkcml2ZSBkb29yLlxuIiwgZG9fbG9jayA/ICJMIiA6ICJVbmwiKTsKLQlyZXR2YWwgPSBzY3NpX2lvY3RsKFNUcC0+ZGV2aWNlLCBjbWQsIE5VTEwpOwotCWlmICghcmV0dmFsKSB7CisKKwlyZXR2YWwgPSBzY3NpX3NldF9tZWRpdW1fcmVtb3ZhbChTVHAtPmRldmljZSwKKwkJCWRvX2xvY2sgPyBTQ1NJX1JFTU9WQUxfUFJFVkVOVCA6IFNDU0lfUkVNT1ZBTF9BTExPVyk7CisJaWYgKCFyZXR2YWwpCiAJCVNUcC0+ZG9vcl9sb2NrZWQgPSBkb19sb2NrID8gU1RfTE9DS0VEX0VYUExJQ0lUIDogU1RfVU5MT0NLRUQ7Ci0JfQotCWVsc2UgeworCWVsc2UKIAkJU1RwLT5kb29yX2xvY2tlZCA9IFNUX0xPQ0tfRkFJTFM7Ci0JfQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTMzNjcsMTEgKzMzNzUsMTAgQEAKIAkgKiBtYXkgdHJ5IGFuZCB0YWtlIHRoZSBkZXZpY2Ugb2ZmbGluZSwgaW4gd2hpY2ggY2FzZSBhbGwgZnVydGhlcgogCSAqIGFjY2VzcyB0byB0aGUgZGV2aWNlIGlzIHByb2hpYml0ZWQuCiAJICovCi0JcmV0dmFsID0gc2NzaV9ub25ibG9ja2FibGVfaW9jdGwoU1RwLT5kZXZpY2UsIGNtZF9pbiwgcCwKLQkJCQkJZmlsZS0+Zl9mbGFncyAmIE9fTkRFTEFZKTsKLQlpZiAoIXNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhTVHAtPmRldmljZSkgfHwgcmV0dmFsICE9IC1FTk9ERVYpCisJcmV0dmFsID0gc2NzaV9pb2N0bF9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKFNUcC0+ZGV2aWNlLCBjbWRfaW4sCisJCQlmaWxlLT5mX2ZsYWdzICYgT19OREVMQVkpOworCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwotCXJldHZhbCA9IDA7CiAKIAljbWRfdHlwZSA9IF9JT0NfVFlQRShjbWRfaW4pOwogCWNtZF9uciA9IF9JT0NfTlIoY21kX2luKTsKQEAgLTQzMDksNiArNDMxNiwxMiBAQAogCXByaW50ayhLRVJOX0lORk8gInN0OiBWZXJzaW9uICVzLCBmaXhlZCBidWZzaXplICVkLCBzL2cgc2VncyAlZFxuIiwKIAkJdmVyc3RyLCBzdF9maXhlZF9idWZmZXJfc2l6ZSwgc3RfbWF4X3NnX3NlZ3MpOwogCisJZGVidWdnaW5nID0gKGRlYnVnX2ZsYWcgPiAwKSA/IGRlYnVnX2ZsYWcgOiBOT19ERUJVRzsKKwlpZiAoZGVidWdnaW5nKSB7CisJCXByaW50ayhLRVJOX0lORk8gInN0OiBEZWJ1Z2dpbmcgZW5hYmxlZCBkZWJ1Z19mbGFnID0gJWRcbiIsCisJCQlkZWJ1Z2dpbmcpOworCX0KKwogCWVyciA9IGNsYXNzX3JlZ2lzdGVyKCZzdF9zeXNmc19jbGFzcyk7CiAJaWYgKGVycikgewogCQlwcl9lcnIoIlVuYWJsZSByZWdpc3RlciBzeXNmcyBjbGFzcyBmb3IgU0NTSSB0YXBlc1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3RleC5jIGIvZHJpdmVycy9zY3NpL3N0ZXguYwppbmRleCAxYWE0YmVmLi45OGE2MmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3RleC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdGV4LmMKQEAgLTU0NCwzMyArNTQ0LDE1IEBACiB9CiAKIHN0YXRpYyBpbnQKLXN0ZXhfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQotewotCS8qIENoZWF0OiB1c3VhbGx5IGV4dHJhY3RlZCBmcm9tIElucXVpcnkgZGF0YSAqLwotCXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgPSAxOwotCi0Jc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+aG9zdC0+Y2FuX3F1ZXVlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50CiBzdGV4X3NsYXZlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJc2Rldi0+dXNlXzEwX2Zvcl9ydyA9IDE7CiAJc2Rldi0+dXNlXzEwX2Zvcl9tcyA9IDE7CiAJYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgNjAgKiBIWik7Ci0Jc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLXN0ZXhfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCi17Ci0Jc2NzaV9kZWFjdGl2YXRlX3RjcShzZGV2LCAxKTsKLX0KLQogc3RhdGljIGludAogc3RleF9xdWV1ZWNvbW1hbmRfbGNrKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCiB7CkBAIC0xMTYyLDkgKzExNDQsNyBAQAogCWludCByZXN1bHQgPSBTVUNDRVNTOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSIoJXMpOiBhYm9ydGluZyBjb21tYW5kXG4iLCBwY2lfbmFtZShoYmEtPnBkZXYpKTsKLQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgImFib3J0aW5nIGNvbW1hbmRcbiIpOwogCiAJYmFzZSA9IGhiYS0+bW1pb19iYXNlOwogCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpAQCAtMTM1Miw5ICsxMzMyLDggQEAKIAogCWhiYSA9IChzdHJ1Y3Qgc3RfaGJhICopICZjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CiAKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSIoJXMpOiByZXNldHRpbmcgaG9zdFxuIiwgcGNpX25hbWUoaGJhLT5wZGV2KSk7Ci0Jc2NzaV9wcmludF9jb21tYW5kKGNtZCk7CisJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgY21kLT5kZXZpY2UtPmhvc3QsCisJCSAgICAgInJlc2V0dGluZyBob3N0XG4iKTsKIAogCXJldHVybiBzdGV4X2RvX3Jlc2V0KGhiYSkgPyBGQUlMRUQgOiBTVUNDRVNTOwogfQpAQCAtMTM5MSwxMiArMTM3MCwxMSBAQAogCS5wcm9jX25hbWUJCQk9IERSVl9OQU1FLAogCS5iaW9zX3BhcmFtCQkJPSBzdGV4X2Jpb3NwYXJhbSwKIAkucXVldWVjb21tYW5kCQkJPSBzdGV4X3F1ZXVlY29tbWFuZCwKLQkuc2xhdmVfYWxsb2MJCQk9IHN0ZXhfc2xhdmVfYWxsb2MsCiAJLnNsYXZlX2NvbmZpZ3VyZQkJPSBzdGV4X3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJCT0gc3RleF9zbGF2ZV9kZXN0cm95LAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IHN0ZXhfYWJvcnQsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgkJPSBzdGV4X3Jlc2V0LAogCS50aGlzX2lkCQkJPSAtMSwKKwkudXNlX2Jsa190YWdzCQkJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0ZXhfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0b3J2c2NfZHJ2LmMgYi9kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYwppbmRleCA3MzNlNWY3Li5lM2JhMjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYworKysgYi9kcml2ZXJzL3Njc2kvc3RvcnZzY19kcnYuYwpAQCAtMTA5Nyw3ICsxMDk3LDggQEAKIAlpZiAoc2NtbmQtPnJlc3VsdCkgewogCQlpZiAoc2NzaV9ub3JtYWxpemVfc2Vuc2Uoc2NtbmQtPnNlbnNlX2J1ZmZlciwKIAkJCQlTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsICZzZW5zZV9oZHIpKQotCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoInN0b3J2c2MiLCAmc2Vuc2VfaGRyKTsKKwkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKHNjbW5kLT5kZXZpY2UsICJzdG9ydnNjIiwKKwkJCQkJICAgICAmc2Vuc2VfaGRyKTsKIAl9CiAKIAlpZiAodm1fc3JiLT5zcmJfc3RhdHVzICE9IFNSQl9TVEFUVVNfU1VDQ0VTUykKQEAgLTE0MjgsOCArMTQyOSw3IEBACiAKIHN0YXRpYyBpbnQgc3RvcnZzY19kZXZpY2VfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldmljZSkKIHsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2aWNlLCBNU0dfU0lNUExFX1RBRywKLQkJCQlTVE9SVlNDX01BWF9JT19SRVFVRVNUUyk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldmljZSwgU1RPUlZTQ19NQVhfSU9fUkVRVUVTVFMpOwogCiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoc2RldmljZS0+cmVxdWVzdF9xdWV1ZSwgUEFHRV9TSVpFKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTIzNjdhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYworKysgL2Rldi9udWxsCkBAIC0xLDI5MzMgKzAsMCBAQAotLyogc3VuM19OQ1I1MzgwLmMgLS0gYWRhcHRlZCBmcm9tIGF0YXJpX05DUjUzODAuYyBmb3IgdGhlIHN1bjMgYnkgCi0gICBTYW0gQ3JlYXNleS4gKi8gCi0vKiAKLSAqIE5DUiA1MzgwIGdlbmVyaWMgZHJpdmVyIHJvdXRpbmVzLiAgVGhlc2Ugc2hvdWxkIG1ha2UgaXQgKnRyaXZpYWwqCi0gKiAJdG8gaW1wbGVtZW50IDUzODAgU0NTSSBkcml2ZXJzIHVuZGVyIExpbnV4IHdpdGggYSBub24tdHJhbnRvcgotICoJYXJjaGl0ZWN0dXJlLgotICoKLSAqCU5vdGUgdGhhdCB0aGVzZSByb3V0aW5lcyBhbHNvIHdvcmsgd2l0aCBOUjUzYzQwMCBmYW1pbHkgY2hpcHMuCi0gKgotICogQ29weXJpZ2h0IDE5OTMsIERyZXcgRWNraGFyZHQKLSAqCVZpc2lvbmFyeSBDb21wdXRpbmcgCi0gKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQotICogCWRyZXdAY29sb3JhZG8uZWR1Ci0gKgkrMSAoMzAzKSA2NjYtNTgzNgotICoKLSAqIERJU1RSSUJVVElPTiBSRUxFQVNFIDYuIAotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKLSAqLwotCi0vKgotICogKytyb21hbjogVG8gcG9ydCB0aGUgNTM4MCBkcml2ZXIgdG8gdGhlIEF0YXJpLCBJIGhhZCB0byBkbyBzb21lIGNoYW5nZXMgaW4KLSAqIHRoaXMgZmlsZSwgdG9vOgotICoKLSAqICAtIFNvbWUgb2YgdGhlIGRlYnVnIHN0YXRlbWVudHMgd2VyZSBpbmNvcnJlY3QgKHVuZGVmaW5lZCB2YXJpYWJsZXMgYW5kIHRoZQotICogICAgbGlrZSkuIEkgZml4ZWQgdGhhdC4KLSAqCi0gKiAgLSBJbiBpbmZvcm1hdGlvbl90cmFuc2ZlcigpLCBJIHRoaW5rIGEgI2lmZGVmIHdhcyB3cm9uZy4gTG9va2luZyBhdCB0aGUKLSAqICAgIHBvc3NpYmxlIERNQSB0cmFuc2ZlciBzaXplIHNob3VsZCBhbHNvIGhhcHBlbiBmb3IgUkVBTF9ETUEuIEkgYWRkZWQgdGhpcwotICogICAgaW4gdGhlICNpZiBzdGF0ZW1lbnQuCi0gKgotICogIC0gV2hlbiB1c2luZyByZWFsIERNQSwgaW5mb3JtYXRpb25fdHJhbnNmZXIoKSBzaG91bGQgcmV0dXJuIGluIGEgREFUQU9VVAotICogICAgcGhhc2UgYWZ0ZXIgc3RhcnRpbmcgdGhlIERNQS4gSXQgaGFzIG5vdGhpbmcgbW9yZSB0byBkby4KLSAqCi0gKiAgLSBUaGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBzaG91bGQgcnVuIG1haW4gYWZ0ZXIgZW5kIG9mIERNQSwgdG9vIChub3QKLSAqICAgIG9ubHkgYWZ0ZXIgUkVTRUxFQ1RJT04gaW50ZXJydXB0cykuIEFkZGl0aW9uYWxseSwgaXQgc2hvdWxkIF9ub3RfIHRlc3QKLSAqICAgIGZvciBtb3JlIGludGVycnVwdHMgYWZ0ZXIgcnVubmluZyBtYWluLCBzaW5jZSBhIERNQSBwcm9jZXNzIG1heSBoYXZlCi0gKiAgICBiZWVuIHN0YXJ0ZWQgYW5kIGludGVycnVwdHMgYXJlIHR1cm5lZCBvbiBub3cuIFRoZSBuZXcgaW50IGNvdWxkIGhhcHBlbgotICogICAgaW5zaWRlIHRoZSBleGVjdXRpb24gb2YgTkNSNTM4MF9pbnRyKCksIGxlYWRpbmcgdG8gcmVjdXJzaXZlCi0gKiAgICBjYWxscy4KLSAqCi0gKiAtIEkndmUgZGVsZXRlZCBhbGwgdGhlIHN0dWZmIGZvciBBVVRPUFJPQkVfSVJRLCBSRUFMX0RNQV9QT0xMLCBQU0VVRE9fRE1BCi0gKiAgICBhbmQgVVNMRUVQLCBiZWNhdXNlIHRoZXNlIHdlcmUgbWVzc2luZyB1cCByZWFkYWJpbGl0eSBhbmQgd2lsbCBuZXZlciBiZQotICogICAgbmVlZGVkIGZvciBBdGFyaSBTQ1NJLgotICogCi0gKiAtIEkndmUgcmV2aXNlZCB0aGUgTkNSNTM4MF9tYWluKCkgY2FsbGluZyBzY2hlbWUgKHJlbGF4IHRoZSAnbWFpbl9ydW5uaW5nJwotICogICBzdHVmZiksIGFuZCAnbWFpbicgaXMgZXhlY3V0ZWQgaW4gYSBib3R0b20gaGFsZiBpZiBhd29rZW4gYnkgYW4KLSAqICAgaW50ZXJydXB0LgotICoKLSAqIC0gVGhlIGNvZGUgd2FzIHF1aXRlIGNsdXR0ZXJlZCB1cCBieSAiI2lmIChOREVCVUcgJiBOREVCVUdfKikgcHJpbnRrLi4uIgotICogICBjb25zdHJ1Y3RzLiBJbiBteSBleWVzLCB0aGlzIG1hZGUgdGhlIHNvdXJjZSByYXRoZXIgdW5yZWFkYWJsZSwgc28gSQotICogICBmaW5hbGx5IHJlcGxhY2VkIHRoYXQgYnkgdGhlICpfUFJJTlRLKCkgbWFjcm9zLgotICoKLSAqLwotI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oPgotCi0vKgotICogRnVydGhlciBkZXZlbG9wbWVudCAvIHRlc3RpbmcgdGhhdCBzaG91bGQgYmUgZG9uZSA6IAotICogMS4gIFRlc3QgbGlua2VkIGNvbW1hbmQgaGFuZGxpbmcgY29kZSBhZnRlciBFcmljIGlzIHJlYWR5IHdpdGggCi0gKiAgICAgdGhlIGhpZ2ggbGV2ZWwgY29kZS4KLSAqLwotCi0jaWYgKE5ERUJVRyAmIE5ERUJVR19MSVNUUykKLSNkZWZpbmUgTElTVCh4LHkpIFwKLSAgeyBwcmludGsoIkxJTkU6JWQgICBBZGRpbmcgJXAgdG8gJXBcbiIsIF9fTElORV9fLCAodm9pZCopKHgpLCAodm9pZCopKHkpKTsgXAotICAgIGlmICgoeCk9PSh5KSkgdWRlbGF5KDUpOyB9Ci0jZGVmaW5lIFJFTU9WRSh3LHgseSx6KSBcCi0gIHsgcHJpbnRrKCJMSU5FOiVkICAgUmVtb3Zpbmc6ICVwLT4lcCAgJXAtPiVwIFxuIiwgX19MSU5FX18sIFwKLQkgICAodm9pZCopKHcpLCAodm9pZCopKHgpLCAodm9pZCopKHkpLCAodm9pZCopKHopKTsgXAotICAgIGlmICgoeCk9PSh5KSkgdWRlbGF5KDUpOyB9Ci0jZWxzZQotI2RlZmluZSBMSVNUKHgseSkKLSNkZWZpbmUgUkVNT1ZFKHcseCx5LHopCi0jZW5kaWYKLQotI2lmbmRlZiBub3R5ZXQKLSN1bmRlZiBMSU5LRUQKLSNlbmRpZgotCi0vKgotICogRGVzaWduCi0gKiBJc3N1ZXMgOgotICoKLSAqIFRoZSBvdGhlciBMaW51eCBTQ1NJIGRyaXZlcnMgd2VyZSB3cml0dGVuIHdoZW4gTGludXggd2FzIEludGVsIFBDLW9ubHksCi0gKiBhbmQgc3BlY2lmaWNhbGx5IGZvciBlYWNoIGJvYXJkIHJhdGhlciB0aGFuIGVhY2ggY2hpcC4gIFRoaXMgbWFrZXMgdGhlaXIKLSAqIGFkYXB0YXRpb24gdG8gcGxhdGZvcm1zIGxpa2UgdGhlIE1hYyAoU29tZSBvZiB3aGljaCB1c2UgTkNSNTM4MCdzKQotICogbW9yZSBkaWZmaWN1bHQgdGhhbiBpdCBoYXMgdG8gYmUuCi0gKgotICogQWxzbywgbWFueSBvZiB0aGUgU0NTSSBkcml2ZXJzIHdlcmUgd3JpdHRlbiBiZWZvcmUgdGhlIGNvbW1hbmQgcXVldWluZwotICogcm91dGluZXMgd2VyZSBpbXBsZW1lbnRlZCwgbWVhbmluZyB0aGVpciBpbXBsZW1lbnRhdGlvbnMgb2YgcXVldWVkIAotICogY29tbWFuZHMgd2VyZSBoYWNrZWQgb24gcmF0aGVyIHRoYW4gZGVzaWduZWQgaW4gZnJvbSB0aGUgc3RhcnQuCi0gKgotICogV2hlbiBJIGRlc2lnbmVkIHRoZSBMaW51eCBTQ1NJIGRyaXZlcnMgSSBmaWd1cmVkIHRoYXQgCi0gKiB3aGlsZSBoYXZpbmcgdHdvIGRpZmZlcmVudCBTQ1NJIGJvYXJkcyBpbiBhIHN5c3RlbSBtaWdodCBiZSB1c2VmdWwKLSAqIGZvciBkZWJ1Z2dpbmcgdGhpbmdzLCB0d28gb2YgdGhlIHNhbWUgdHlwZSB3b3VsZG4ndCBiZSB1c2VkLgotICogV2VsbCwgSSB3YXMgd3JvbmcgYW5kIGEgbnVtYmVyIG9mIHVzZXJzIGhhdmUgbWFpbGVkIG1lIGFib3V0IHJ1bm5pbmcKLSAqIG11bHRpcGxlIGhpZ2gtcGVyZm9ybWFuY2UgU0NTSSBib2FyZHMgaW4gYSBzZXJ2ZXIuCi0gKgotICogRmluYWxseSwgd2hlbiBJIGdldCBxdWVzdGlvbnMgZnJvbSB1c2VycywgSSBoYXZlIG5vIGlkZWEgd2hhdCAKLSAqIHJldmlzaW9uIG9mIG15IGRyaXZlciB0aGV5IGFyZSBydW5uaW5nLgotICoKLSAqIFRoaXMgZHJpdmVyIGF0dGVtcHRzIHRvIGFkZHJlc3MgdGhlc2UgcHJvYmxlbXMgOgotICogVGhpcyBpcyBhIGdlbmVyaWMgNTM4MCBkcml2ZXIuICBUbyB1c2UgaXQgb24gYSBkaWZmZXJlbnQgcGxhdGZvcm0sIAotICogb25lIHNpbXBseSB3cml0ZXMgYXBwcm9wcmlhdGUgc3lzdGVtIHNwZWNpZmljIG1hY3JvcyAoaWUsIGRhdGEKLSAqIHRyYW5zZmVyIC0gc29tZSBQQydzIHdpbGwgdXNlIHRoZSBJL08gYnVzLCA2OEsncyBtdXN0IHVzZSAKLSAqIG1lbW9yeSBtYXBwZWQpIGFuZCBkcm9wcyB0aGlzIGZpbGUgaW4gdGhlaXIgJ0MnIHdyYXBwZXIuCi0gKgotICogQXMgZmFyIGFzIGNvbW1hbmQgcXVldWVpbmcsIHR3byBxdWV1ZXMgYXJlIG1haW50YWluZWQgZm9yIAotICogZWFjaCA1MzgwIGluIHRoZSBzeXN0ZW0gLSBjb21tYW5kcyB0aGF0IGhhdmVuJ3QgYmVlbiBpc3N1ZWQgeWV0LAotICogYW5kIGNvbW1hbmRzIHRoYXQgYXJlIGN1cnJlbnRseSBleGVjdXRpbmcuICBUaGlzIG1lYW5zIHRoYXQgYW4gCi0gKiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNvbW1hbmRzIG1heSBiZSBxdWV1ZWQsIGxldHRpbmcgCi0gKiBtb3JlIGNvbW1hbmRzIHByb3BhZ2F0ZSBmcm9tIHRoZSBoaWdoZXIgZHJpdmVyIGxldmVscyBnaXZpbmcgaGlnaGVyIAotICogdGhyb3VnaHB1dC4gIE5vdGUgdGhhdCBib3RoIElfVF9MIGFuZCBJX1RfTF9RIG5leHVzZXMgYXJlIHN1cHBvcnRlZCwgCi0gKiBhbGxvd2luZyBtdWx0aXBsZSBjb21tYW5kcyB0byBwcm9wYWdhdGUgYWxsIHRoZSB3YXkgdG8gYSBTQ1NJLUlJIGRldmljZSAKLSAqIHdoaWxlIGEgY29tbWFuZCBpcyBhbHJlYWR5IGV4ZWN1dGluZy4KLSAqCi0gKiBUbyBzb2x2ZSB0aGUgbXVsdGlwbGUtYm9hcmRzLWluLXRoZS1zYW1lLXN5c3RlbSBwcm9ibGVtLCAKLSAqIHRoZXJlIGlzIGEgc2VwYXJhdGUgaW5zdGFuY2Ugc3RydWN0dXJlIGZvciBlYWNoIGluc3RhbmNlCi0gKiBvZiBhIDUzODAgaW4gdGhlIHN5c3RlbS4gIFNvLCBtdWx0aXBsZSBOQ1I1MzgwIGRyaXZlcnMgd2lsbAotICogYmUgYWJsZSB0byBjb2V4aXN0IHdpdGggYXBwcm9wcmlhdGUgY2hhbmdlcyB0byB0aGUgaGlnaCBsZXZlbAotICogU0NTSSBjb2RlLiAgCi0gKgotICogQSBOQ1I1MzgwX1BVQkxJQ19SRVZJU0lPTiBtYWNybyBpcyBwcm92aWRlZCwgd2l0aCB0aGUgcmVsZWFzZQotICogbnVtYmVyICh1cGRhdGVkIGZvciBlYWNoIHB1YmxpYyByZWxlYXNlKSBwcmludGVkIGJ5IHRoZSAKLSAqIE5DUjUzODBfcHJpbnRfb3B0aW9ucyBjb21tYW5kLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIAotICogd3JhcHBlciBkZXRlY3QgZnVuY3Rpb24sIHNvIHRoYXQgSSBrbm93IHdoYXQgcmVsZWFzZSBvZiB0aGUgZHJpdmVyCi0gKiB1c2VycyBhcmUgdXNpbmcuCi0gKgotICogSXNzdWVzIHNwZWNpZmljIHRvIHRoZSBOQ1I1MzgwIDogCi0gKgotICogV2hlbiB1c2VkIGluIGEgUElPIG9yIHBzZXVkby1kbWEgbW9kZSwgdGhlIE5DUjUzODAgaXMgYSBicmFpbmRlYWQgCi0gKiBwaWVjZSBvZiBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzIHlvdSB0byBzaXQgaW4gYSBsb29wIHBvbGxpbmcgZm9yIAotICogdGhlIFJFUSBzaWduYWwgYXMgbG9uZyBhcyB5b3UgYXJlIGNvbm5lY3RlZC4gIFNvbWUgZGV2aWNlcyBhcmUgCi0gKiBicmFpbiBkZWFkIChpZSwgbWFueSBURVhFTCBDRCBST00gZHJpdmVzKSBhbmQgd29uJ3QgZGlzY29ubmVjdCAKLSAqIHdoaWxlIGRvaW5nIGxvbmcgc2VlayBvcGVyYXRpb25zLgotICogCi0gKiBUaGUgd29ya2Fyb3VuZCBmb3IgdGhpcyBpcyB0byBrZWVwIHRyYWNrIG9mIGRldmljZXMgdGhhdCBoYXZlCi0gKiBkaXNjb25uZWN0ZWQuICBJZiB0aGUgZGV2aWNlIGhhc24ndCBkaXNjb25uZWN0ZWQsIGZvciBjb21tYW5kcyB0aGF0Ci0gKiBzaG91bGQgZGlzY29ubmVjdCwgd2UgZG8gc29tZXRoaW5nIGxpa2UgCi0gKgotICogd2hpbGUgKCFSRVEgaXMgYXNzZXJ0ZWQpIHsgc2xlZXAgZm9yIE4gdXNlY3M7IHBvbGwgZm9yIE0gdXNlY3MgfQotICogCi0gKiBTb21lIHR3ZWFraW5nIG9mIE4gYW5kIE0gbmVlZHMgdG8gYmUgZG9uZS4gIEFuIGFsZ29yaXRobSBiYXNlZCAKLSAqIG9uICJ0aW1lIHRvIGRhdGEiIHdvdWxkIGdpdmUgdGhlIGJlc3QgcmVzdWx0cyBhcyBsb25nIGFzIHNob3J0IHRpbWUKLSAqIHRvIGRhdGFzIChpZSwgb24gdGhlIHNhbWUgdHJhY2spIHdlcmUgY29uc2lkZXJlZCwgaG93ZXZlciB0aGVzZSAKLSAqIGJyb2tlbiBkZXZpY2VzIGFyZSB0aGUgZXhjZXB0aW9uIHJhdGhlciB0aGFuIHRoZSBydWxlIGFuZCBJJ2QgcmF0aGVyCi0gKiBzcGVuZCBteSB0aW1lIG9wdGltaXppbmcgZm9yIHRoZSBub3JtYWwgY2FzZS4KLSAqCi0gKiBBcmNoaXRlY3R1cmUgOgotICoKLSAqIEF0IHRoZSBoZWFydCBvZiB0aGUgZGVzaWduIGlzIGEgY29yb3V0aW5lLCBOQ1I1MzgwX21haW4sCi0gKiB3aGljaCBpcyBzdGFydGVkIHdoZW4gbm90IHJ1bm5pbmcgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyLAotICogdGltZXIsIGFuZCBxdWV1ZSBjb21tYW5kIGZ1bmN0aW9uLiAgSXQgYXR0ZW1wdHMgdG8gZXN0YWJsaXNoCi0gKiBJX1RfTCBvciBJX1RfTF9RIG5leHVzZXMgYnkgcmVtb3ZpbmcgdGhlIGNvbW1hbmRzIGZyb20gdGhlIAotICogaXNzdWUgcXVldWUgYW5kIGNhbGxpbmcgTkNSNTM4MF9zZWxlY3QoKSBpZiBhIG5leHVzIAotICogaXMgbm90IGVzdGFibGlzaGVkLiAKLSAqCi0gKiBPbmNlIGEgbmV4dXMgaXMgZXN0YWJsaXNoZWQsIHRoZSBOQ1I1MzgwX2luZm9ybWF0aW9uX3RyYW5zZmVyKCkKLSAqIHBoYXNlIGdvZXMgdGhyb3VnaCB0aGUgdmFyaW91cyBwaGFzZXMgYXMgaW5zdHJ1Y3RlZCBieSB0aGUgdGFyZ2V0LgotICogaWYgdGhlIHRhcmdldCBnb2VzIGludG8gTVNHIElOIGFuZCBzZW5kcyBhIERJU0NPTk5FQ1QgbWVzc2FnZSwKLSAqIHRoZSBjb21tYW5kIHN0cnVjdHVyZSBpcyBwbGFjZWQgaW50byB0aGUgcGVyIGluc3RhbmNlIGRpc2Nvbm5lY3RlZAotICogcXVldWUsIGFuZCBOQ1I1MzgwX21haW4gdHJpZXMgdG8gZmluZCBtb3JlIHdvcmsuICBJZiBVU0xFRVAKLSAqIHdhcyBkZWZpbmVkLCBhbmQgdGhlIHRhcmdldCBpcyBpZGxlIGZvciB0b28gbG9uZywgdGhlIHN5c3RlbQotICogd2lsbCB0cnkgdG8gc2xlZXAuCi0gKgotICogSWYgYSBjb21tYW5kIGhhcyBkaXNjb25uZWN0ZWQsIGV2ZW50dWFsbHkgYW4gaW50ZXJydXB0IHdpbGwgdHJpZ2dlciwKLSAqIGNhbGxpbmcgTkNSNTM4MF9pbnRyKCkgIHdoaWNoIHdpbGwgaW4gdHVybiBjYWxsIE5DUjUzODBfcmVzZWxlY3QKLSAqIHRvIHJlZXN0YWJsaXNoIGEgbmV4dXMuICBUaGlzIHdpbGwgcnVuIG1haW4gaWYgbmVjZXNzYXJ5LgotICoKLSAqIE9uIGNvbW1hbmQgdGVybWluYXRpb24sIHRoZSBkb25lIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFzIAotICogYXBwcm9wcmlhdGUuCi0gKgotICogU0NTSSBwb2ludGVycyBhcmUgbWFpbnRhaW5lZCBpbiB0aGUgU0NwIGZpZWxkIG9mIFNDU0kgY29tbWFuZCAKLSAqIHN0cnVjdHVyZXMsIGJlaW5nIGluaXRpYWxpemVkIGFmdGVyIHRoZSBjb21tYW5kIGlzIGNvbm5lY3RlZAotICogaW4gTkNSNTM4MF9zZWxlY3QsIGFuZCBzZXQgYXMgYXBwcm9wcmlhdGUgaW4gTkNSNTM4MF9pbmZvcm1hdGlvbl90cmFuc2Zlci4KLSAqIE5vdGUgdGhhdCBpbiB2aW9sYXRpb24gb2YgdGhlIHN0YW5kYXJkLCBhbiBpbXBsaWNpdCBTQVZFIFBPSU5URVJTIG9wZXJhdGlvbgotICogaXMgZG9uZSwgc2luY2Ugc29tZSBCUk9LRU4gZGlza3MgZmFpbCB0byBpc3N1ZSBhbiBleHBsaWNpdCBTQVZFIFBPSU5URVJTLgotICovCi0KLS8qCi0gKiBVc2luZyB0aGlzIGZpbGUgOgotICogVGhpcyBmaWxlIGEgc2tlbGV0b24gTGludXggU0NTSSBkcml2ZXIgZm9yIHRoZSBOQ1IgNTM4MCBzZXJpZXMKLSAqIG9mIGNoaXBzLiAgVG8gdXNlIGl0LCB5b3Ugd3JpdGUgYW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZ1bmN0aW9ucyAKLSAqIGFuZCBtYWNyb3MgYW5kIGluY2x1ZGUgdGhpcyBmaWxlIGluIHlvdXIgZHJpdmVyLgotICoKLSAqIFRoZXNlIG1hY3JvcyBjb250cm9sIG9wdGlvbnMgOiAKLSAqIEFVVE9TRU5TRSAtIGlmIGRlZmluZWQsIFJFUVVFU1QgU0VOU0Ugd2lsbCBiZSBwZXJmb3JtZWQgYXV0b21hdGljYWxseQotICoJZm9yIGNvbW1hbmRzIHRoYXQgcmV0dXJuIHdpdGggYSBDSEVDSyBDT05ESVRJT04gc3RhdHVzLiAKLSAqCi0gKiBMSU5LRUQgLSBpZiBkZWZpbmVkLCBsaW5rZWQgY29tbWFuZHMgYXJlIHN1cHBvcnRlZC4KLSAqCi0gKiBSRUFMX0RNQSAtIGlmIGRlZmluZWQsIFJFQUwgRE1BIGlzIHVzZWQgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyIHBoYXNlcy4KLSAqCi0gKiBTVVBQT1JUX1RBR1MgLSBpZiBkZWZpbmVkLCBTQ1NJLTIgdGFnZ2VkIHF1ZXVpbmcgaXMgdXNlZCB3aGVyZSBwb3NzaWJsZQotICoKLSAqIFRoZXNlIG1hY3JvcyBNVVNUIGJlIGRlZmluZWQgOgotICogCi0gKiBOQ1I1MzgwX3JlYWQocmVnaXN0ZXIpICAtIHJlYWQgZnJvbSB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyCi0gKgotICogTkNSNTM4MF93cml0ZShyZWdpc3RlciwgdmFsdWUpIC0gd3JpdGUgdG8gdGhlIHNwZWNpZmljIHJlZ2lzdGVyIAotICoKLSAqIEVpdGhlciByZWFsIERNQSAqb3IqIHBzZXVkbyBETUEgbWF5IGJlIGltcGxlbWVudGVkCi0gKiBSRUFMIGZ1bmN0aW9ucyA6IAotICogTkNSNTM4MF9SRUFMX0RNQSBzaG91bGQgYmUgZGVmaW5lZCBpZiByZWFsIERNQSBpcyB0byBiZSB1c2VkLgotICogTm90ZSB0aGF0IHRoZSBETUEgc2V0dXAgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyAKLSAqCXRoYXQgdGhleSB3ZXJlIGFibGUgdG8gcHJvZ3JhbSB0aGUgY29udHJvbGxlciBmb3IuCi0gKgotICogQWxzbyBub3RlIHRoYXQgZ2VuZXJpYyBpMzg2L1BDIHZlcnNpb25zIG9mIHRoZXNlIG1hY3JvcyBhcmUgCi0gKglhdmFpbGFibGUgYXMgTkNSNTM4MF9pMzg2X2RtYV93cml0ZV9zZXR1cCwKLSAqCU5DUjUzODBfaTM4Nl9kbWFfcmVhZF9zZXR1cCwgYW5kIE5DUjUzODBfaTM4Nl9kbWFfcmVzaWR1YWwuCi0gKgotICogTkNSNTM4MF9kbWFfd3JpdGVfc2V0dXAoaW5zdGFuY2UsIHNyYywgY291bnQpIC0gaW5pdGlhbGl6ZQotICogTkNSNTM4MF9kbWFfcmVhZF9zZXR1cChpbnN0YW5jZSwgZHN0LCBjb3VudCkgLSBpbml0aWFsaXplCi0gKiBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSk7IC0gcmVzaWR1YWwgY291bnQKLSAqCi0gKiBQU0VVRE8gZnVuY3Rpb25zIDoKLSAqIE5DUjUzODBfcHdyaXRlKGluc3RhbmNlLCBzcmMsIGNvdW50KQotICogTkNSNTM4MF9wcmVhZChpbnN0YW5jZSwgZHN0LCBjb3VudCk7Ci0gKgotICogSWYgbm90aGluZyBzcGVjaWZpYyB0byB0aGlzIGltcGxlbWVudGF0aW9uIG5lZWRzIGRvaW5nIChpZSwgd2l0aCBleHRlcm5hbAotICogaGFyZHdhcmUpLCB5b3UgbXVzdCBhbHNvIGRlZmluZSAKLSAqICAKLSAqIE5DUjUzODBfcXVldWVfY29tbWFuZAotICogTkNSNTM4MF9yZXNldAotICogTkNSNTM4MF9hYm9ydAotICogTkNSNTM4MF9wcm9jX2luZm8KLSAqCi0gKiB0byBiZSB0aGUgZ2xvYmFsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBzcGVjaWZpYyBkcml2ZXIsIGllIAotICogI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgdDEyOF9xdWV1ZV9jb21tYW5kLgotICoKLSAqIElmIHRoaXMgaXMgbm90IGRvbmUsIHRoZSByb3V0aW5lcyB3aWxsIGJlIGRlZmluZWQgYXMgc3RhdGljIGZ1bmN0aW9ucwotICogd2l0aCB0aGUgTkNSNTM4MCogbmFtZXMgYW5kIHRoZSB1c2VyIG11c3QgcHJvdmlkZSBhIGdsb2JhbGx5Ci0gKiBhY2Nlc3NpYmxlIHdyYXBwZXIgZnVuY3Rpb24uCi0gKgotICogVGhlIGdlbmVyaWMgZHJpdmVyIGlzIGluaXRpYWxpemVkIGJ5IGNhbGxpbmcgTkNSNTM4MF9pbml0KGluc3RhbmNlKSwKLSAqIGFmdGVyIHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIGhvc3Qgc3BlY2lmaWMgZmllbGRzIGFuZCBJRC4gIElmIHRoZSAKLSAqIGRyaXZlciB3aXNoZXMgdG8gYXV0b3Byb2JlIGZvciBhbiBJUlEgbGluZSwgdGhlIE5DUjUzODBfcHJvYmVfaXJxKGluc3RhbmNlLAotICogcG9zc2libGUpIGZ1bmN0aW9uIG1heSBiZSB1c2VkLiAgQmVmb3JlIHRoZSBzcGVjaWZpYyBkcml2ZXIgaW5pdGlhbGl6YXRpb24KLSAqIGNvZGUgZmluaXNoZXMsIE5DUjUzODBfcHJpbnRfb3B0aW9ucyBzaG91bGQgYmUgY2FsbGVkLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpmaXJzdF9pbnN0YW5jZSA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdGhlX3RlbXBsYXRlID0gTlVMTDsKLQotLyogTWFjcm9zIGVhc2UgbGlmZS4uLiA6LSkgKi8KLSNkZWZpbmUJU0VUVVBfSE9TVERBVEEoaW4pCQkJCVwKLSAgICBzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQkJCVwKLQkoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikoaW4pLT5ob3N0ZGF0YQotI2RlZmluZQlIT1NUREFUQShpbikgKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKShpbiktPmhvc3RkYXRhKQotCi0jZGVmaW5lCU5FWFQoY21kKQkJKChzdHJ1Y3Qgc2NzaV9jbW5kICopKGNtZCktPmhvc3Rfc2NyaWJibGUpCi0jZGVmaW5lCVNFVF9ORVhUKGNtZCwgbmV4dCkJKChjbWQpLT5ob3N0X3NjcmliYmxlID0gKHZvaWQgKikobmV4dCkpCi0jZGVmaW5lCU5FWFRBRERSKGNtZCkJCSgoc3RydWN0IHNjc2lfY21uZCAqKikmKChjbWQpLT5ob3N0X3NjcmliYmxlKSkKLQotI2RlZmluZQlIT1NUTk8JCWluc3RhbmNlLT5ob3N0X25vCi0jZGVmaW5lCUhfTk8oY21kKQkoY21kKS0+ZGV2aWNlLT5ob3N0LT5ob3N0X25vCi0KLSNkZWZpbmUgU0dBRERSKGJ1ZmZlcikgKHZvaWQgKikoKCh1bnNpZ25lZCBsb25nKXNnX3ZpcnQoKChidWZmZXIpKSkpKQotCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0KLS8qCi0gKiBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHRhZ2dlZCBxdWV1aW5nCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogKytyb21hbiAoMDEvOTYpOiBOb3cgSSd2ZSBpbXBsZW1lbnRlZCBTQ1NJLTIgdGFnZ2VkIHF1ZXVpbmcuIFNvbWUgbm90ZXM6Ci0gKgotICogVXNpbmcgY29uc2VjdXRpdmUgbnVtYmVycyBmb3IgdGhlIHRhZ3MgaXMgbm8gZ29vZCBpZGVhIGluIG15IGV5ZXMuIFRoZXJlCi0gKiBjb3VsZCBiZSB3cm9uZyByZS11c2luZ3MgaWYgdGhlIGNvdW50ZXIgKDggYml0ISkgd3JhcHMgYW5kIHNvbWUgZWFybHkKLSAqIGNvbW1hbmQgaGFzIGJlZW4gcHJlZW1wdGVkIGZvciBhIGxvbmcgdGltZS4gTXkgc29sdXRpb246IGEgYml0ZmllbGQgZm9yCi0gKiByZW1lbWJlcmluZyB1c2VkIHRhZ3MuCi0gKgotICogVGhlcmUncyBhbHNvIHRoZSBwcm9ibGVtIHRoYXQgZWFjaCB0YXJnZXQgaGFzIGEgY2VydGFpbiBxdWV1ZSBzaXplLCBidXQgd2UKLSAqIGNhbm5vdCBrbm93IGl0IGluIGFkdmFuY2UgOi0oIFdlIGp1c3Qgc2VlIGEgUVVFVUVfRlVMTCBzdGF0dXMgYmVpbmcKLSAqIHJldHVybmVkLiBTbywgaW4gdGhpcyBjYXNlLCB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIHNpemUgYXNzdW1wdGlvbiBpcwotICogcmVkdWNlZCB0byB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB0YWdzIGlmIFFVRVVFX0ZVTEwgaXMgcmV0dXJuZWQgYnkgdGhlCi0gKiB0YXJnZXQuIFRoZSBjb21tYW5kIGlzIHJldHVybmVkIHRvIHRoZSBtaWQtbGV2ZWwsIGJ1dCB3aXRoIHN0YXR1cyBjaGFuZ2VkCi0gKiB0byBCVVNZLCBzaW5jZSAtLWFzIEkndmUgc2Vlbi0tIHRoZSBtaWQtbGV2ZWwgY2FuJ3QgaGFuZGxlIFFVRVVFX0ZVTEwKLSAqIGNvcnJlY3RseS4KLSAqCi0gKiBXZSdyZSBhbHNvIG5vdCBhbGxvd2VkIHJ1bm5pbmcgdGFnZ2VkIGNvbW1hbmRzIGFzIGxvbmcgYXMgYW4gdW50YWdnZWQKLSAqIGNvbW1hbmQgaXMgYWN0aXZlLiBBbmQgUkVRVUVTVCBTRU5TRSBjb21tYW5kcyBhZnRlciBhIGNvbnRpbmdlbnQgYWxsZWdpYW5jZQotICogY29uZGl0aW9uIF9tdXN0XyBiZSB1bnRhZ2dlZC4gVG8ga2VlcCB0cmFjayB3aGV0aGVyIGFuIHVudGFnZ2VkIGNvbW1hbmQgaGFzCi0gKiBiZWVuIGlzc3VlZCwgdGhlIGhvc3QtPmJ1c3kgYXJyYXkgaXMgc3RpbGwgZW1wbG95ZWQsIGFzIGl0IGlzIHdpdGhvdXQKLSAqIHN1cHBvcnQgZm9yIHRhZ2dlZCBxdWV1aW5nLgotICoKLSAqIE9uZSBjb3VsZCBzdXNwZWN0IHRoYXQgdGhlcmUgYXJlIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuCi0gKiBpc19sdW5fYnVzeSgpLCBjbWRfZ2V0X3RhZygpIGFuZCBjbWRfZnJlZV90YWcoKS4gQnV0IEkgdGhpbmsgdGhpcyBpc24ndCB0aGUKLSAqIGNhc2U6IGlzX2x1bl9idXN5KCkgYW5kIGNtZF9nZXRfdGFnKCkgYXJlIGJvdGggY2FsbGVkIGZyb20gTkNSNTM4MF9tYWluKCksCi0gKiB3aGljaCBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gYmUgcnVubmluZyBhdCBtb3N0IG9uY2UuIEl0IGlzIGFsc28gdGhlIG9ubHkKLSAqIHBsYWNlIHdoZXJlIHRhZ3MvTFVOcyBhcmUgYWxsb2NhdGVkLiBTbyBubyBvdGhlciBhbGxvY2F0aW9uIGNhbiBzbGlwCi0gKiBiZXR3ZWVuIHRoYXQgcGFpciwgdGhlcmUgY291bGQgb25seSBoYXBwZW4gYSByZXNlbGVjdGlvbiwgd2hpY2ggY2FuIGZyZWUgYQotICogdGFnLCBidXQgdGhhdCBkb2Vzbid0IGh1cnQuIE9ubHkgdGhlIHNlcXVlbmNlIGluIGNtZF9mcmVlX3RhZygpIGJlY29tZXMKLSAqIGltcG9ydGFudDogdGhlIHRhZyBiaXQgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSAnbnJfYWxsb2NhdGVkJyBpcyBkZWNyZWFzZWQuCi0gKi8KLQotLyogLTEgZm9yIFRBR19OT05FIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHVuc2lnbmVkIGNoYXIgY21kLT50YWcgKi8KLSN1bmRlZiBUQUdfTk9ORQotI2RlZmluZSBUQUdfTk9ORSAweGZmCi0KLS8qIEZvciB0aGUgbTY4aywgdGhlIG51bWJlciBvZiBiaXRzIGluICdhbGxvY2F0ZWQnIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMiEgKi8KLSNpZiAoTUFYX1RBR1MgJSAzMikgIT0gMAotI2Vycm9yICJNQVhfVEFHUyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIhIgotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyCWFsbG9jYXRlZFtNQVhfVEFHUy84XTsKLSAgICBpbnQJCW5yX2FsbG9jYXRlZDsKLSAgICBpbnQJCXF1ZXVlX3NpemU7Ci19IFRBR19BTExPQzsKLQotc3RhdGljIFRBR19BTExPQyBUYWdBbGxvY1s4XVs4XTsgLyogOCB0YXJnZXRzIGFuZCA4IExVTnMgKi8KLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF90YWdzKCB2b2lkICkKLXsKLSAgICBpbnQgdGFyZ2V0LCBsdW47Ci0gICAgVEFHX0FMTE9DICp0YTsKLSAgICAKLSAgICBpZiAoIXNldHVwX3VzZV90YWdnZWRfcXVldWluZykKLQlyZXR1cm47Ci0gICAgCi0gICAgZm9yKCB0YXJnZXQgPSAwOyB0YXJnZXQgPCA4OyArK3RhcmdldCApIHsKLQlmb3IoIGx1biA9IDA7IGx1biA8IDg7ICsrbHVuICkgewotCSAgICB0YSA9ICZUYWdBbGxvY1t0YXJnZXRdW2x1bl07Ci0JICAgIG1lbXNldCggJnRhLT5hbGxvY2F0ZWQsIDAsIE1BWF9UQUdTLzggKTsKLQkgICAgdGEtPm5yX2FsbG9jYXRlZCA9IDA7Ci0JICAgIC8qIEF0IHRoZSBiZWdpbm5pbmcsIGFzc3VtZSB0aGUgbWF4aW11bSBxdWV1ZSBzaXplIHdlIGNvdWxkCi0JICAgICAqIHN1cHBvcnQgKE1BWF9UQUdTKS4gVGhpcyB2YWx1ZSB3aWxsIGJlIGRlY3JlYXNlZCBpZiB0aGUgdGFyZ2V0Ci0JICAgICAqIHJldHVybnMgUVVFVUVfRlVMTCBzdGF0dXMuCi0JICAgICAqLwotCSAgICB0YS0+cXVldWVfc2l6ZSA9IE1BWF9UQUdTOwotCX0KLSAgICB9Ci19Ci0KLQotLyogQ2hlY2sgaWYgd2UgY2FuIGlzc3VlIGEgY29tbWFuZCB0byB0aGlzIExVTjogRmlyc3Qgc2VlIGlmIHRoZSBMVU4gaXMgbWFya2VkCi0gKiBidXN5IGJ5IGFuIHVudGFnZ2VkIGNvbW1hbmQuIElmIHRoZSBjb21tYW5kIHNob3VsZCB1c2UgdGFnZ2VkIHF1ZXVpbmcsIGFsc28KLSAqIGNoZWNrIHRoYXQgdGhlcmUgaXMgYSBmcmVlIHRhZyBhbmQgdGhlIHRhcmdldCdzIHF1ZXVlIHdvbid0IG92ZXJmbG93LiBUaGlzCi0gKiBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCB0byBhdm9pZCByYWNlCi0gKiBjb25kaXRpb25zLgotICovIAotCi1zdGF0aWMgaW50IGlzX2x1bl9idXN5KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50IHNob3VsZF9iZV90YWdnZWQpCi17Ci0gICAgdTggbHVuID0gY21kLT5kZXZpY2UtPmx1bjsKLSAgICBTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7Ci0KLSAgICBpZiAoaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmICgxIDw8IGx1bikpCi0JcmV0dXJuKCAxICk7Ci0gICAgaWYgKCFzaG91bGRfYmVfdGFnZ2VkIHx8Ci0JIXNldHVwX3VzZV90YWdnZWRfcXVldWluZyB8fCAhY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JcmV0dXJuKCAwICk7Ci0gICAgaWYgKFRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXS5ucl9hbGxvY2F0ZWQgPj0KLQlUYWdBbGxvY1tjbWQtPmRldmljZS0+aWRdW2x1bl0ucXVldWVfc2l6ZSApIHsKLQlkcHJpbnRrKE5ERUJVR19UQUdTLCAgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlZDogbm8gZnJlZSB0YWdzXG4iLAotCQkgICAgSF9OTyhjbWQpLCBjbWQtPmRldmljZS0+aWQsIGx1biApOwotCXJldHVybiggMSApOwotICAgIH0KLSAgICByZXR1cm4oIDAgKTsKLX0KLQotCi0vKiBBbGxvY2F0ZSBhIHRhZyBmb3IgYSBjb21tYW5kICh0aGVyZSBhcmUgbm8gY2hlY2tzIGFueW1vcmUsIGNoZWNrX2x1bl9idXN5KCkKLSAqIG11c3QgYmUgY2FsbGVkIGJlZm9yZSEpLCBvciByZXNlcnZlIHRoZSBMVU4gaW4gJ2J1c3knIGlmIHRoZSBjb21tYW5kIGlzCi0gKiB1bnRhZ2dlZC4KLSAqLwotCi1zdGF0aWMgdm9pZCBjbWRfZ2V0X3RhZyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIGludCBzaG91bGRfYmVfdGFnZ2VkKQotewotICAgIHU4IGx1biA9IGNtZC0+ZGV2aWNlLT5sdW47Ci0gICAgU0VUVVBfSE9TVERBVEEoY21kLT5kZXZpY2UtPmhvc3QpOwotCi0gICAgLyogSWYgd2Ugb3IgdGhlIHRhcmdldCBkb24ndCBzdXBwb3J0IHRhZ2dlZCBxdWV1aW5nLCBhbGxvY2F0ZSB0aGUgTFVOIGZvcgotICAgICAqIGFuIHVudGFnZ2VkIGNvbW1hbmQuCi0gICAgICovCi0gICAgaWYgKCFzaG91bGRfYmVfdGFnZ2VkIHx8Ci0JIXNldHVwX3VzZV90YWdnZWRfcXVldWluZyB8fCAhY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQljbWQtPnRhZyA9IFRBR19OT05FOwotCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gfD0gKDEgPDwgbHVuKTsKLQlkcHJpbnRrKE5ERUJVR19UQUdTLCAgInNjc2klZDogdGFyZ2V0ICVkIGx1biAlZCBub3cgYWxsb2NhdGVkIGJ5IHVudGFnZ2VkICIKLQkJICAgICJjb21tYW5kXG4iLCBIX05PKGNtZCksIGNtZC0+ZGV2aWNlLT5pZCwgbHVuICk7Ci0gICAgfQotICAgIGVsc2UgewotCVRBR19BTExPQyAqdGEgPSAmVGFnQWxsb2NbY21kLT5kZXZpY2UtPmlkXVtsdW5dOwotCi0JY21kLT50YWcgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCAmdGEtPmFsbG9jYXRlZCwgTUFYX1RBR1MgKTsKLQlzZXRfYml0KCBjbWQtPnRhZywgJnRhLT5hbGxvY2F0ZWQgKTsKLQl0YS0+bnJfYWxsb2NhdGVkKys7Ci0JZHByaW50ayhOREVCVUdfVEFHUywgICJzY3NpJWQ6IHVzaW5nIHRhZyAlZCBmb3IgdGFyZ2V0ICVkIGx1biAlZCAiCi0JCSAgICAiKG5vdyAlZCB0YWdzIGluIHVzZSlcbiIsCi0JCSAgICBIX05PKGNtZCksIGNtZC0+dGFnLCBjbWQtPmRldmljZS0+aWQsIGx1biwKLQkJICAgIHRhLT5ucl9hbGxvY2F0ZWQgKTsKLSAgICB9Ci19Ci0KLQotLyogTWFyayB0aGUgdGFnIG9mIGNvbW1hbmQgJ2NtZCcgYXMgZnJlZSwgb3IgaW4gY2FzZSBvZiBhbiB1bnRhZ2dlZCBjb21tYW5kLAotICogdW5sb2NrIHRoZSBMVU4uCi0gKi8KLQotc3RhdGljIHZvaWQgY21kX2ZyZWVfdGFnKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLSAgICB1OCBsdW4gPSBjbWQtPmRldmljZS0+bHVuOwotICAgIFNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKLQotICAgIGlmIChjbWQtPnRhZyA9PSBUQUdfTk9ORSkgewotCWhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJj0gfigxIDw8IGx1bik7Ci0JZHByaW50ayhOREVCVUdfVEFHUywgICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWQgdW50YWdnZWQgY21kIGZpbmlzaGVkXG4iLAotCQkgICAgSF9OTyhjbWQpLCBjbWQtPmRldmljZS0+aWQsIGx1biApOwotICAgIH0KLSAgICBlbHNlIGlmIChjbWQtPnRhZyA+PSBNQVhfVEFHUykgewotCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiB0cnlpbmcgdG8gZnJlZSBiYWQgdGFnICVkIVxuIiwKLQkJSF9OTyhjbWQpLCBjbWQtPnRhZyApOwotICAgIH0KLSAgICBlbHNlIHsKLQlUQUdfQUxMT0MgKnRhID0gJlRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bbHVuXTsKLQljbGVhcl9iaXQoIGNtZC0+dGFnLCAmdGEtPmFsbG9jYXRlZCApOwotCXRhLT5ucl9hbGxvY2F0ZWQtLTsKLQlkcHJpbnRrKE5ERUJVR19UQUdTLCAgInNjc2klZDogZnJlZWQgdGFnICVkIGZvciB0YXJnZXQgJWQgbHVuICVkXG4iLAotCQkgICAgSF9OTyhjbWQpLCBjbWQtPnRhZywgY21kLT5kZXZpY2UtPmlkLCBsdW4gKTsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgZnJlZV9hbGxfdGFncyggdm9pZCApCi17Ci0gICAgaW50IHRhcmdldCwgbHVuOwotICAgIFRBR19BTExPQyAqdGE7Ci0KLSAgICBpZiAoIXNldHVwX3VzZV90YWdnZWRfcXVldWluZykKLQlyZXR1cm47Ci0gICAgCi0gICAgZm9yKCB0YXJnZXQgPSAwOyB0YXJnZXQgPCA4OyArK3RhcmdldCApIHsKLQlmb3IoIGx1biA9IDA7IGx1biA8IDg7ICsrbHVuICkgewotCSAgICB0YSA9ICZUYWdBbGxvY1t0YXJnZXRdW2x1bl07Ci0JICAgIG1lbXNldCggJnRhLT5hbGxvY2F0ZWQsIDAsIE1BWF9UQUdTLzggKTsKLQkgICAgdGEtPm5yX2FsbG9jYXRlZCA9IDA7Ci0JfQotICAgIH0KLX0KLQotI2VuZGlmIC8qIFNVUFBPUlRfVEFHUyAqLwotCi0KLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgaW5pdGlhbGl6ZV9TQ3Aoc3RydWN0IHNjc2lfY21uZCAqY21kKQotICoKLSAqIFB1cnBvc2UgOiBpbml0aWFsaXplIHRoZSBzYXZlZCBkYXRhIHBvaW50ZXJzIGZvciBjbWQgdG8gcG9pbnQgdG8gdGhlIAotICoJc3RhcnQgb2YgdGhlIGJ1ZmZlci4KLSAqCi0gKiBJbnB1dHMgOiBjbWQgLSBzdHJ1Y3Qgc2NzaV9jbW5kIHN0cnVjdHVyZSB0byBoYXZlIHBvaW50ZXJzIHJlc2V0LgotICovCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgaW5pdGlhbGl6ZV9TQ3Aoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotICAgIC8qIAotICAgICAqIEluaXRpYWxpemUgdGhlIFNjc2kgUG9pbnRlciBmaWVsZCBzbyB0aGF0IGFsbCBvZiB0aGUgY29tbWFuZHMgaW4gdGhlIAotICAgICAqIHZhcmlvdXMgcXVldWVzIGFyZSB2YWxpZC4KLSAgICAgKi8KLQotICAgIGlmIChzY3NpX2J1ZmZsZW4oY21kKSkgewotCWNtZC0+U0NwLmJ1ZmZlciA9IHNjc2lfc2dsaXN0KGNtZCk7Ci0JY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCA9IHNjc2lfc2dfY291bnQoY21kKSAtIDE7Ci0JY21kLT5TQ3AucHRyID0gKGNoYXIgKikgU0dBRERSKGNtZC0+U0NwLmJ1ZmZlcik7Ci0JY21kLT5TQ3AudGhpc19yZXNpZHVhbCA9IGNtZC0+U0NwLmJ1ZmZlci0+bGVuZ3RoOwotICAgIH0gZWxzZSB7Ci0JY21kLT5TQ3AuYnVmZmVyID0gTlVMTDsKLQljbWQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsID0gMDsKLQljbWQtPlNDcC5wdHIgPSBOVUxMOwotCWNtZC0+U0NwLnRoaXNfcmVzaWR1YWwgPSAwOwotICAgIH0KLSAgICAKLX0KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpZiBOREVCVUcKLXN0YXRpYyBzdHJ1Y3QgewotICAgIHVuc2lnbmVkIGNoYXIgbWFzazsKLSAgICBjb25zdCBjaGFyICogbmFtZTt9IAotc2lnbmFsc1tdID0ge3sgU1JfREJQLCAiUEFSSVRZIn0sIHsgU1JfUlNULCAiUlNUIiB9LCB7IFNSX0JTWSwgIkJTWSIgfSwgCi0gICAgeyBTUl9SRVEsICJSRVEiIH0sIHsgU1JfTVNHLCAiTVNHIiB9LCB7IFNSX0NELCAgIkNEIiB9LCB7IFNSX0lPLCAiSU8iIH0sIAotICAgIHsgU1JfU0VMLCAiU0VMIiB9LCB7MCwgTlVMTH19LCAKLWJhc3JzW10gPSB7e0JBU1JfQVROLCAiQVROIn0sIHtCQVNSX0FDSywgIkFDSyJ9LCB7MCwgTlVMTH19LAotaWNyc1tdID0ge3tJQ1JfQVNTRVJUX1JTVCwgIkFTU0VSVCBSU1QifSx7SUNSX0FTU0VSVF9BQ0ssICJBU1NFUlQgQUNLIn0sCi0gICAge0lDUl9BU1NFUlRfQlNZLCAiQVNTRVJUIEJTWSJ9LCB7SUNSX0FTU0VSVF9TRUwsICJBU1NFUlQgU0VMIn0sIAotICAgIHtJQ1JfQVNTRVJUX0FUTiwgIkFTU0VSVCBBVE4ifSwge0lDUl9BU1NFUlRfREFUQSwgIkFTU0VSVCBEQVRBIn0sIAotICAgIHswLCBOVUxMfX0sCi1tcnNbXSA9IHt7TVJfQkxPQ0tfRE1BX01PREUsICJNT0RFIEJMT0NLIERNQSJ9LCB7TVJfVEFSR0VULCAiTU9ERSBUQVJHRVQifSwgCi0gICAge01SX0VOQUJMRV9QQVJfQ0hFQ0ssICJNT0RFIFBBUklUWSBDSEVDSyJ9LCB7TVJfRU5BQkxFX1BBUl9JTlRSLCAKLSAgICAiTU9ERSBQQVJJVFkgSU5UUiJ9LCB7TVJfRU5BQkxFX0VPUF9JTlRSLCJNT0RFIEVPUCBJTlRSIn0sCi0gICAge01SX01PTklUT1JfQlNZLCAiTU9ERSBNT05JVE9SIEJTWSJ9LAotICAgIHtNUl9ETUFfTU9ERSwgIk1PREUgRE1BIn0sIHtNUl9BUkJJVFJBVEUsICJNT0RFIEFSQklUUkFUSU9OIn0sIAotICAgIHswLCBOVUxMfX07Ci0KLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9wcmludChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLSAqCi0gKiBQdXJwb3NlIDogcHJpbnQgdGhlIFNDU0kgYnVzIHNpZ25hbHMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcwotICoKLSAqIElucHV0IDogaW5zdGFuY2UgLSB3aGljaCBOQ1I1MzgwCi0gKi8KLQotc3RhdGljIHZvaWQgTkNSNTM4MF9wcmludChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkgewotICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzLCBkYXRhLCBiYXNyLCBtciwgaWNyLCBpOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0gICAgZGF0YSA9IE5DUjUzODBfcmVhZChDVVJSRU5UX1NDU0lfREFUQV9SRUcpOwotICAgIHN0YXR1cyA9IE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKTsKLSAgICBtciA9IE5DUjUzODBfcmVhZChNT0RFX1JFRyk7Ci0gICAgaWNyID0gTkNSNTM4MF9yZWFkKElOSVRJQVRPUl9DT01NQU5EX1JFRyk7Ci0gICAgYmFzciA9IE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpOwotICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSAgICBwcmludGsoIlNUQVRVU19SRUc6ICUwMnggIiwgc3RhdHVzKTsKLSAgICBmb3IgKGkgPSAwOyBzaWduYWxzW2ldLm1hc2sgOyArK2kpIAotCWlmIChzdGF0dXMgJiBzaWduYWxzW2ldLm1hc2spCi0JICAgIHByaW50aygiLCVzIiwgc2lnbmFsc1tpXS5uYW1lKTsKLSAgICBwcmludGsoIlxuQkFTUjogJTAyeCAiLCBiYXNyKTsKLSAgICBmb3IgKGkgPSAwOyBiYXNyc1tpXS5tYXNrIDsgKytpKSAKLQlpZiAoYmFzciAmIGJhc3JzW2ldLm1hc2spCi0JICAgIHByaW50aygiLCVzIiwgYmFzcnNbaV0ubmFtZSk7Ci0gICAgcHJpbnRrKCJcbklDUjogJTAyeCAiLCBpY3IpOwotICAgIGZvciAoaSA9IDA7IGljcnNbaV0ubWFzazsgKytpKSAKLQlpZiAoaWNyICYgaWNyc1tpXS5tYXNrKQotCSAgICBwcmludGsoIiwlcyIsIGljcnNbaV0ubmFtZSk7Ci0gICAgcHJpbnRrKCJcbk1PREU6ICUwMnggIiwgbXIpOwotICAgIGZvciAoaSA9IDA7IG1yc1tpXS5tYXNrOyArK2kpIAotCWlmIChtciAmIG1yc1tpXS5tYXNrKQotCSAgICBwcmludGsoIiwlcyIsIG1yc1tpXS5uYW1lKTsKLSAgICBwcmludGsoIlxuIik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgewotICAgIHVuc2lnbmVkIGNoYXIgdmFsdWU7Ci0gICAgY29uc3QgY2hhciAqbmFtZTsKLX0gcGhhc2VzW10gPSB7Ci0gICAge1BIQVNFX0RBVEFPVVQsICJEQVRBT1VUIn0sIHtQSEFTRV9EQVRBSU4sICJEQVRBSU4ifSwge1BIQVNFX0NNRE9VVCwgIkNNRE9VVCJ9LAotICAgIHtQSEFTRV9TVEFUSU4sICJTVEFUSU4ifSwge1BIQVNFX01TR09VVCwgIk1TR09VVCJ9LCB7UEhBU0VfTVNHSU4sICJNU0dJTiJ9LAotICAgIHtQSEFTRV9VTktOT1dOLCAiVU5LTk9XTiJ9fTsKLQotLyogCi0gKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTM4MF9wcmludF9waGFzZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLSAqCi0gKiBQdXJwb3NlIDogcHJpbnQgdGhlIGN1cnJlbnQgU0NTSSBwaGFzZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCi0gKgotICogSW5wdXQgOiBpbnN0YW5jZSAtIHdoaWNoIE5DUjUzODAKLSAqLwotCi1zdGF0aWMgdm9pZCBOQ1I1MzgwX3ByaW50X3BoYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotewotICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzOwotICAgIGludCBpOwotCi0gICAgc3RhdHVzID0gTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpOwotICAgIGlmICghKHN0YXR1cyAmIFNSX1JFUSkpIAotCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IFJFUSBub3QgYXNzZXJ0ZWQsIHBoYXNlIHVua25vd24uXG4iLCBIT1NUTk8pOwotICAgIGVsc2UgewotCWZvciAoaSA9IDA7IChwaGFzZXNbaV0udmFsdWUgIT0gUEhBU0VfVU5LTk9XTikgJiYgCi0JICAgIChwaGFzZXNbaV0udmFsdWUgIT0gKHN0YXR1cyAmIFBIQVNFX01BU0spKTsgKytpKTsgCi0JcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcGhhc2UgJXNcbiIsIEhPU1ROTywgcGhhc2VzW2ldLm5hbWUpOwotICAgIH0KLX0KLQotI2VuZGlmCi0KLS8qCi0gKiArK3JvbWFuOiBOZXcgc2NoZW1lIG9mIGNhbGxpbmcgTkNSNTM4MF9tYWluKCkKLSAqIAotICogSWYgd2UncmUgbm90IGluIGFuIGludGVycnVwdCwgd2UgY2FuIGNhbGwgb3VyIG1haW4gZGlyZWN0bHksIGl0IGNhbm5vdCBiZQotICogYWxyZWFkeSBydW5uaW5nLiBFbHNlLCB3ZSBxdWV1ZSBpdCBvbiBhIHRhc2sgcXVldWUsIGlmIG5vdCAnbWFpbl9ydW5uaW5nJwotICogdGVsbHMgdXMgdGhhdCBhIGxvd2VyIGxldmVsIGlzIGFscmVhZHkgZXhlY3V0aW5nIGl0LiBUaGlzIHdheSwKLSAqICdtYWluX3J1bm5pbmcnIG5lZWRzIG5vdCBiZSBwcm90ZWN0ZWQgaW4gYSBzcGVjaWFsIHdheS4KLSAqCi0gKiBxdWV1ZV9tYWluKCkgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGZvciBwdXR0aW5nIG91ciBtYWluIG9udG8gdGhlIHRhc2sKLSAqIHF1ZXVlLCBpZiBtYWluX3J1bm5pbmcgaXMgZmFsc2UuIEl0IHNob3VsZCBiZSBjYWxsZWQgb25seSBmcm9tIGEKLSAqIGludGVycnVwdCBvciBib3R0b20gaGFsZi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KLXN0YXRpYyB2b2xhdGlsZSBpbnQgbWFpbl9ydW5uaW5nID0gMDsKLXN0YXRpYyBERUNMQVJFX1dPUksoTkNSNTM4MF90cXVldWUsIE5DUjUzODBfbWFpbik7Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcXVldWVfbWFpbih2b2lkKQotewotICAgIGlmICghbWFpbl9ydW5uaW5nKSB7Ci0JLyogSWYgaW4gaW50ZXJydXB0IGFuZCBOQ1I1MzgwX21haW4oKSBub3QgYWxyZWFkeSBydW5uaW5nLAotCSAgIHF1ZXVlIGl0IG9uIHRoZSAnaW1tZWRpYXRlJyB0YXNrIHF1ZXVlLCB0byBiZSBwcm9jZXNzZWQKLQkgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgY3VycmVudCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMKLQkgICBmaW5pc2hlZC4gKi8KLQlzY2hlZHVsZV93b3JrKCZOQ1I1MzgwX3RxdWV1ZSk7Ci0gICAgfQotICAgIC8qIGVsc2U6IG5vdGhpbmcgdG8gZG86IHRoZSBydW5uaW5nIE5DUjUzODBfbWFpbigpIHdpbGwgcGljayB1cAotICAgICAgIGFueSBuZXdseSBxdWV1ZWQgY29tbWFuZC4gKi8KLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgTkNSNTM4MF9hbGxfaW5pdCAodm9pZCkKLXsKLSAgICBzdGF0aWMgaW50IGRvbmUgPSAwOwotICAgIGlmICghZG9uZSkgewotCWRwcmludGsoTkRFQlVHX0lOSVQsICJzY3NpIDogTkNSNTM4MF9hbGxfaW5pdCgpXG4iKTsKLQlkb25lID0gMTsKLSAgICB9Ci19Ci0KLSAKLS8qCi0gKiBGdW5jdGlvbiA6IHZvaWQgTkNSNTgzODBfcHJpbnRfb3B0aW9ucyAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi0gKgotICogUHVycG9zZSA6IGNhbGxlZCBieSBwcm9iZSBjb2RlIGluZGljYXRpbmcgdGhlIE5DUjUzODAgZHJpdmVyCi0gKgkgICAgIG9wdGlvbnMgdGhhdCB3ZXJlIHNlbGVjdGVkLgotICoKLSAqIElucHV0cyA6IGluc3RhbmNlLCBwb2ludGVyIHRvIHRoaXMgaW5zdGFuY2UuICBVbnVzZWQuCi0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0IE5DUjUzODBfcHJpbnRfb3B0aW9ucyAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi17Ci0gICAgcHJpbnRrKCIgZ2VuZXJpYyBvcHRpb25zIgotI2lmZGVmIEFVVE9TRU5TRSAKLSAgICAiIEFVVE9TRU5TRSIKLSNlbmRpZgotI2lmZGVmIFJFQUxfRE1BCi0gICAgIiBSRUFMIERNQSIKLSNlbmRpZgotI2lmZGVmIFBBUklUWQotICAgICIgUEFSSVRZIgotI2VuZGlmCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0gICAgIiBTQ1NJLTIgVEFHR0VEIFFVRVVJTkciCi0jZW5kaWYKLSAgICApOwotICAgIHByaW50aygiIGdlbmVyaWMgcmVsZWFzZT0lZCIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOwotfQotCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfcHJpbnRfc3RhdHVzIChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLSAqCi0gKiBQdXJwb3NlIDogcHJpbnQgY29tbWFuZHMgaW4gdGhlIHZhcmlvdXMgcXVldWVzLCBjYWxsZWQgZnJvbQotICoJTkNSNTM4MF9hYm9ydCBhbmQgTkNSNTM4MF9kZWJ1ZyB0byBhaWQgZGVidWdnaW5nLgotICoKLSAqIElucHV0cyA6IGluc3RhbmNlLCBwb2ludGVyIHRvIHRoaXMgaW5zdGFuY2UuICAKLSAqLwotCi1zdGF0aWMgdm9pZCBscHJpbnRfU2NzaV9DbW5kKFNjc2lfQ21uZCAqY21kKQotewotCWludCBpLCBzOwotCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQ7Ci0JcHJpbnRrKCJzY3NpJWQ6IGRlc3RpbmF0aW9uIHRhcmdldCAlZCwgbHVuICVsbHVcbiIsCi0JCUhfTk8oY21kKSwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQlwcmludGsoS0VSTl9DT05UICIgICAgICAgIGNvbW1hbmQgPSAiKTsKLQljb21tYW5kID0gY21kLT5jbW5kOwotCXByaW50ayhLRVJOX0NPTlQgIiUyZCAoMHglMDJ4KSIsIGNvbW1hbmRbMF0sIGNvbW1hbmRbMF0pOwotCWZvciAoaSA9IDEsIHMgPSBDT01NQU5EX1NJWkUoY29tbWFuZFswXSk7IGkgPCBzOyArK2kpCi0JCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgY29tbWFuZFtpXSk7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBOQ1I1MzgwX3ByaW50X3N0YXR1cyhzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JU2NzaV9DbW5kICpwdHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCU5DUjUzODBfZHByaW50KE5ERUJVR19BTlksIGluc3RhbmNlKTsKLQlOQ1I1MzgwX2RwcmludF9waGFzZShOREVCVUdfQU5ZLCBpbnN0YW5jZSk7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YTsKLQotCXByaW50aygiXG5OQ1I1MzgwIGNvcmUgcmVsZWFzZT0lZC5cbiIsIE5DUjUzODBfUFVCTElDX1JFTEVBU0UpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlwcmludGsoIk5DUjUzODA6IGNvcm91dGluZSBpcyVzIHJ1bm5pbmcuXG4iLAotCQltYWluX3J1bm5pbmcgPyAiIiA6ICJuJ3QiKTsKLQlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpCi0JCXByaW50aygic2NzaSVkOiBubyBjdXJyZW50bHkgY29ubmVjdGVkIGNvbW1hbmRcbiIsIEhPU1ROTyk7Ci0JZWxzZQotCQlscHJpbnRfU2NzaV9DbW5kKChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmNvbm5lY3RlZCk7Ci0JcHJpbnRrKCJzY3NpJWQ6IGlzc3VlX3F1ZXVlXG4iLCBIT1NUTk8pOwotCWZvciAocHRyID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSBORVhUKHB0cikpCi0JCWxwcmludF9TY3NpX0NtbmQocHRyKTsKLQotCXByaW50aygic2NzaSVkOiBkaXNjb25uZWN0ZWRfcXVldWVcbiIsIEhPU1ROTyk7Ci0JZm9yIChwdHIgPSAoU2NzaV9DbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHB0cjsKLQkgICAgIHB0ciA9IE5FWFQocHRyKSkKLQkJbHByaW50X1Njc2lfQ21uZChwdHIpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgc2hvd19TY3NpX0NtbmQoU2NzaV9DbW5kICpjbWQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKLXsKLQlpbnQgaSwgczsKLQl1bnNpZ25lZCBjaGFyICpjb21tYW5kOwotCXNlcV9wcmludGYobSwgInNjc2klZDogZGVzdGluYXRpb24gdGFyZ2V0ICVkLCBsdW4gJWxsdVxuIiwKLQkJSF9OTyhjbWQpLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgY29tbWFuZCA9ICIpOwotCWNvbW1hbmQgPSBjbWQtPmNtbmQ7Ci0Jc2VxX3ByaW50ZihtLCAiJTJkICgweCUwMngpIiwgY29tbWFuZFswXSwgY29tbWFuZFswXSk7Ci0JZm9yIChpID0gMSwgcyA9IENPTU1BTkRfU0laRShjb21tYW5kWzBdKTsgaSA8IHM7ICsraSkKLQkJc2VxX3ByaW50ZihtLCAiICUwMngiLCBjb21tYW5kW2ldKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOwotfQotCi1zdGF0aWMgaW50IE5DUjUzODBfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi17Ci0Jc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhOwotCVNjc2lfQ21uZCAqcHRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YTsKLQotCXNlcV9wcmludGYobSwgIk5DUjUzODAgY29yZSByZWxlYXNlPSVkLlxuIiwgTkNSNTM4MF9QVUJMSUNfUkVMRUFTRSk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXNlcV9wcmludGYobSwgIk5DUjUzODA6IGNvcm91dGluZSBpcyVzIHJ1bm5pbmcuXG4iLAotCQltYWluX3J1bm5pbmcgPyAiIiA6ICJuJ3QiKTsKLQlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpCi0JCXNlcV9wcmludGYobSwgInNjc2klZDogbm8gY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kXG4iLCBIT1NUTk8pOwotCWVsc2UKLQkJc2hvd19TY3NpX0NtbmQoKFNjc2lfQ21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkLCBtKTsKLQlzZXFfcHJpbnRmKG0sICJzY3NpJWQ6IGlzc3VlX3F1ZXVlXG4iLCBIT1NUTk8pOwotCWZvciAocHRyID0gKFNjc2lfQ21uZCAqKWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZTsgcHRyOyBwdHIgPSBORVhUKHB0cikpCi0JCXNob3dfU2NzaV9DbW5kKHB0ciwgbSk7Ci0KLQlzZXFfcHJpbnRmKG0sICJzY3NpJWQ6IGRpc2Nvbm5lY3RlZF9xdWV1ZVxuIiwgSE9TVE5PKTsKLQlmb3IgKHB0ciA9IChTY3NpX0NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsgcHRyOwotCSAgICAgcHRyID0gTkVYVChwdHIpKQotCQlzaG93X1Njc2lfQ21uZChwdHIsIG0pOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0vKiAKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX2luaXQgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotICoKLSAqIFB1cnBvc2UgOiBpbml0aWFsaXplcyAqaW5zdGFuY2UgYW5kIGNvcnJlc3BvbmRpbmcgNTM4MCBjaGlwLgotICoKLSAqIElucHV0cyA6IGluc3RhbmNlIC0gaW5zdGFudGlhdGlvbiBvZiB0aGUgNTM4MCBkcml2ZXIuICAKLSAqCi0gKiBOb3RlcyA6IEkgYXNzdW1lIHRoYXQgdGhlIGhvc3QsIGhvc3RubywgYW5kIGlkIGJpdHMgaGF2ZSBiZWVuCi0gKiAJc2V0IGNvcnJlY3RseS4gIEkgZG9uJ3QgY2FyZSBhYm91dCB0aGUgaXJxIGFuZCBvdGhlciBmaWVsZHMuIAotICogCi0gKi8KLQotc3RhdGljIGludCBfX2luaXQgTkNSNTM4MF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgZmxhZ3MpCi17Ci0gICAgaW50IGk7Ci0gICAgU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotCi0gICAgTkNSNTM4MF9hbGxfaW5pdCgpOwotCi0gICAgaG9zdGRhdGEtPmFib3J0ZWQgPSAwOwotICAgIGhvc3RkYXRhLT5pZF9tYXNrID0gMSA8PCBpbnN0YW5jZS0+dGhpc19pZDsKLSAgICBob3N0ZGF0YS0+aWRfaGlnaGVyX21hc2sgPSAwOwotICAgIGZvciAoaSA9IGhvc3RkYXRhLT5pZF9tYXNrOyBpIDw9IDB4ODA7IGkgPDw9IDEpCi0JaWYgKGkgPiBob3N0ZGF0YS0+aWRfbWFzaykKLQkgICAgaG9zdGRhdGEtPmlkX2hpZ2hlcl9tYXNrIHw9IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkKLQlob3N0ZGF0YS0+YnVzeVtpXSA9IDA7Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0gICAgaW5pdF90YWdzKCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkIChSRUFMX0RNQSkKLSAgICBob3N0ZGF0YS0+ZG1hX2xlbiA9IDA7Ci0jZW5kaWYKLSAgICBob3N0ZGF0YS0+dGFyZ2V0c19wcmVzZW50ID0gMDsKLSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLSAgICBob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBOVUxMOwotICAgIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBOVUxMOwotICAgIGhvc3RkYXRhLT5mbGFncyA9IEZMQUdfQ0hFQ0tfTEFTVF9CWVRFX1NFTlQ7Ci0KLSAgICBpZiAoIXRoZV90ZW1wbGF0ZSkgewotCXRoZV90ZW1wbGF0ZSA9IGluc3RhbmNlLT5ob3N0dDsKLQlmaXJzdF9pbnN0YW5jZSA9IGluc3RhbmNlOwotICAgIH0KLQkKLQotI2lmbmRlZiBBVVRPU0VOU0UKLSAgICBpZiAoKGluc3RhbmNlLT5jbWRfcGVyX2x1biA+IDEpIHx8IChpbnN0YW5jZS0+Y2FuX3F1ZXVlID4gMSkpCi0JIHByaW50aygic2NzaSVkOiBXQVJOSU5HIDogc3VwcG9ydCBmb3IgbXVsdGlwbGUgb3V0c3RhbmRpbmcgY29tbWFuZHMgZW5hYmxlZFxuIgotCSAgICAgICAgIiAgICAgICAgd2l0aG91dCBBVVRPU0VOU0Ugb3B0aW9uLCBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9ucyBtYXlcbiIKLQkgICAgICAgICIgICAgICAgIGJlIGluY29ycmVjdGx5IGNsZWFyZWQuXG4iLCBIT1NUTk8pOwotI2VuZGlmIC8qIGRlZiBBVVRPU0VOU0UgKi8KLQotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0gICAgTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7Ci0gICAgTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDApOwotICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIDApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIE5DUjUzODBfZXhpdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLXsKLQkvKiBFbXB0eSwgYXMgd2UgZGlkbid0IHNjaGVkdWxlIGFueSBkZWxheWVkIHdvcmsgKi8KLX0KLQotLyogCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKLSAqCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQotICoKLSAqIFB1cnBvc2UgOiAgZW5xdWV1ZXMgYSBTQ1NJIGNvbW1hbmQKLSAqCi0gKiBJbnB1dHMgOiBjbWQgLSBTQ1NJIGNvbW1hbmQsIGRvbmUgLSBmdW5jdGlvbiBjYWxsZWQgb24gY29tcGxldGlvbiwgd2l0aAotICoJYSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IuCi0gKiAKLSAqIFJldHVybnMgOiAwCi0gKgotICogU2lkZSBlZmZlY3RzIDogCi0gKiAgICAgIGNtZCBpcyBhZGRlZCB0byB0aGUgcGVyIGluc3RhbmNlIGlzc3VlX3F1ZXVlLCB3aXRoIG1pbm9yIAotICoJdHdpZGRsaW5nIGRvbmUgdG8gdGhlIGhvc3Qgc3BlY2lmaWMgZmllbGRzIG9mIGNtZC4gIElmIHRoZSAKLSAqCW1haW4gY29yb3V0aW5lIGlzIG5vdCBydW5uaW5nLCBpdCBpcyByZXN0YXJ0ZWQuCi0gKgotICovCi0KLS8qIE9ubHkgbWFrZSBzdGF0aWMgaWYgYSB3cmFwcGVyIGZ1bmN0aW9uIGlzIHVzZWQgKi8KLXN0YXRpYyBpbnQgTkNSNTM4MF9xdWV1ZV9jb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCQkJIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQotewotICAgIFNFVFVQX0hPU1REQVRBKGNtZC0+ZGV2aWNlLT5ob3N0KTsKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICp0bXA7Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQotI2lmIChOREVCVUcgJiBOREVCVUdfTk9fV1JJVEUpCi0gICAgc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKLSAgICBjYXNlIFdSSVRFXzY6Ci0gICAgY2FzZSBXUklURV8xMDoKLQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogV1JJVEUgYXR0ZW1wdGVkIHdpdGggTk9fV1JJVEUgZGVidWdnaW5nIGZsYWcgc2V0XG4iLAotCSAgICAgICBIX05PKGNtZCkpOwotCWNtZC0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNik7Ci0JZG9uZShjbWQpOwotCXJldHVybiAwOwotICAgIH0KLSNlbmRpZiAvKiAoTkRFQlVHICYgTkRFQlVHX05PX1dSSVRFKSAqLwotCi0KLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0jIGlmIDAKLSAgICBpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQgJiYgIWhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSAmJgotCSFob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKSB7Ci0JaG9zdGRhdGEtPnRpbWViYXNlID0gamlmZmllczsKLSAgICB9Ci0jIGVuZGlmCi0jIGlmZGVmIE5DUjUzODBfU1RBVF9MSU1JVAotICAgIGlmIChzY3NpX2J1ZmZsZW4oY21kKSA+IE5DUjUzODBfU1RBVF9MSU1JVCkKLSMgZW5kaWYKLQlzd2l0Y2ggKGNtZC0+Y21uZFswXSkKLQl7Ci0JICAgIGNhc2UgV1JJVEU6Ci0JICAgIGNhc2UgV1JJVEVfNjoKLQkgICAgY2FzZSBXUklURV8xMDoKLQkJaG9zdGRhdGEtPnRpbWVfd3JpdGVbY21kLT5kZXZpY2UtPmlkXSAtPSAoamlmZmllcyAtIGhvc3RkYXRhLT50aW1lYmFzZSk7Ci0JCWhvc3RkYXRhLT5ieXRlc193cml0ZVtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOwotCQlob3N0ZGF0YS0+cGVuZGluZ3crKzsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgUkVBRDoKLQkgICAgY2FzZSBSRUFEXzY6Ci0JICAgIGNhc2UgUkVBRF8xMDoKLQkJaG9zdGRhdGEtPnRpbWVfcmVhZFtjbWQtPmRldmljZS0+aWRdIC09IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJaG9zdGRhdGEtPmJ5dGVzX3JlYWRbY21kLT5kZXZpY2UtPmlkXSArPSBzY3NpX2J1ZmZsZW4oY21kKTsKLQkJaG9zdGRhdGEtPnBlbmRpbmdyKys7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCi0gICAgLyogCi0gICAgICogV2UgdXNlIHRoZSBob3N0X3NjcmliYmxlIGZpZWxkIGFzIGEgcG9pbnRlciB0byB0aGUgbmV4dCBjb21tYW5kICAKLSAgICAgKiBpbiBhIHF1ZXVlIAotICAgICAqLwotCi0gICAgU0VUX05FWFQoY21kLCBOVUxMKTsKLSAgICBjbWQtPnNjc2lfZG9uZSA9IGRvbmU7Ci0KLSAgICBjbWQtPnJlc3VsdCA9IDA7Ci0KLQotICAgIC8qIAotICAgICAqIEluc2VydCB0aGUgY21kIGludG8gdGhlIGlzc3VlIHF1ZXVlLiBOb3RlIHRoYXQgUkVRVUVTVCBTRU5TRSAKLSAgICAgKiBjb21tYW5kcyBhcmUgYWRkZWQgdG8gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIHNpbmNlIGFueSBjb21tYW5kIHdpbGwKLSAgICAgKiBjbGVhciB0aGUgY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbiB0aGF0IGV4aXN0cyBhbmQgdGhlIAotICAgICAqIHNlbnNlIGRhdGEgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIHdoaWxlIHRoZSBjb25kaXRpb24gZXhpc3RzLgotICAgICAqLwotCi0gICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotICAgIC8qICsrZ3VlbnRoZXI6IG5vdyB0aGF0IHRoZSBpc3N1ZSBxdWV1ZSBpcyBiZWluZyBzZXQgdXAsIHdlIGNhbiBsb2NrIFNULURNQS4KLSAgICAgKiBPdGhlcndpc2UgYSBydW5uaW5nIE5DUjUzODBfbWFpbiBtYXkgc3RlYWwgdGhlIGxvY2suCi0gICAgICogTG9jayBiZWZvcmUgYWN0dWFsbHkgaW5zZXJ0aW5nIGR1ZSB0byBmYWlybmVzcyByZWFzb25zIGV4cGxhaW5lZCBpbgotICAgICAqIGF0YXJpX3Njc2kuYy4gSWYgd2UgaW5zZXJ0IGZpcnN0LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgdGhpcyBkcml2ZXIKLSAgICAgKiB0byByZWxlYXNlIHRoZSBsb2NrLgotICAgICAqIFN0b3AgdGltZXIgZm9yIHRoaXMgY29tbWFuZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbG9jaywgb3IgdGltZW91dHMKLSAgICAgKiBtYXkgaGFwcGVuIChhbmQgdGhleSByZWFsbHkgZG8pLCBhbmQgaXQncyBubyBnb29kIGlmIHRoZSBjb21tYW5kIGRvZXNuJ3QKLSAgICAgKiBhcHBlYXIgaW4gYW55IG9mIHRoZSBxdWV1ZXMuCi0gICAgICogKytyb21hbjogSnVzdCBkaXNhYmxpbmcgdGhlIE5DUiBpbnRlcnJ1cHQgaXNuJ3Qgc3VmZmljaWVudCBoZXJlLAotICAgICAqIGJlY2F1c2UgYWxzbyBhIHRpbWVyIGludCBjYW4gdHJpZ2dlciBhbiBhYm9ydCBvciByZXNldCwgd2hpY2ggd291bGQKLSAgICAgKiBhbHRlciBxdWV1ZXMgYW5kIHRvdWNoIHRoZSBsb2NrLgotICAgICAqLwotICAgIGlmICghKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSkgfHwgKGNtZC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSkgewotCUxJU1QoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCVNFVF9ORVhUKGNtZCwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlKTsKLQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBjbWQ7Ci0gICAgfSBlbHNlIHsKLQlmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOwotCSAgICAgTkVYVCh0bXApOyB0bXAgPSBORVhUKHRtcCkpCi0JICAgIDsKLQlMSVNUKGNtZCwgdG1wKTsKLQlTRVRfTkVYVCh0bXAsIGNtZCk7Ci0gICAgfQotCi0gICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0gICAgZHByaW50ayhOREVCVUdfUVVFVUVTLCAic2NzaSVkOiBjb21tYW5kIGFkZGVkIHRvICVzIG9mIHF1ZXVlXG4iLCBIX05PKGNtZCksCi0JICAgICAgKGNtZC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSA/ICJoZWFkIiA6ICJ0YWlsIik7Ci0KLSAgICAvKiBJZiBxdWV1ZV9jb21tYW5kKCkgaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IChyZWFsIG9uZSBvciBib3R0b20KLSAgICAgKiBoYWxmKSwgd2UgbGV0IHF1ZXVlX21haW4oKSBkbyB0aGUgam9iIG9mIHRha2luZyBjYXJlIGFib3V0IG1haW4uIElmIGl0Ci0gICAgICogaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGlzIGEgbm8tb3AsIGVsc2UgbWFpbiB3aWxsIGJlIHF1ZXVlZC4KLSAgICAgKgotICAgICAqIElmIHdlJ3JlIG5vdCBpbiBhbiBpbnRlcnJ1cHQsIHdlIGNhbiBjYWxsIE5DUjUzODBfbWFpbigpCi0gICAgICogdW5jb25kaXRpb25hbGx5LCBiZWNhdXNlIGl0IGNhbm5vdCBiZSBhbHJlYWR5IHJ1bm5pbmcuCi0gICAgICovCi0gICAgaWYgKGluX2ludGVycnVwdCgpIHx8ICgoZmxhZ3MgPj4gOCkgJiA3KSA+PSA2KQotCXF1ZXVlX21haW4oKTsKLSAgICBlbHNlCi0JTkNSNTM4MF9tYWluKE5VTEwpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgREVGX1NDU0lfUUNNRChOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQpCi0KLS8qCi0gKiBGdW5jdGlvbiA6IE5DUjUzODBfbWFpbiAodm9pZCkgCi0gKgotICogUHVycG9zZSA6IE5DUjUzODBfbWFpbiBpcyBhIGNvcm91dGluZSB0aGF0IHJ1bnMgYXMgbG9uZyBhcyBtb3JlIHdvcmsgY2FuIAotICoJYmUgZG9uZSBvbiB0aGUgTkNSNTM4MCBob3N0IGFkYXB0ZXJzIGluIGEgc3lzdGVtLiAgQm90aCAKLSAqCU5DUjUzODBfcXVldWVfY29tbWFuZCgpIGFuZCBOQ1I1MzgwX2ludHIoKSB3aWxsIHRyeSB0byBzdGFydCBpdCAKLSAqCWluIGNhc2UgaXQgaXMgbm90IHJ1bm5pbmcuCi0gKiAKLSAqIE5PVEUgOiBOQ1I1MzgwX21haW4gZXhpdHMgd2l0aCBpbnRlcnJ1cHRzICpkaXNhYmxlZCosIHRoZSBjYWxsZXIgc2hvdWxkIAotICogIHJlZW5hYmxlIHRoZW0uICBUaGlzIHByZXZlbnRzIHJlZW50cmFuY3kgYW5kIGtlcm5lbCBzdGFjayBvdmVyZmxvdy4KLSAqLyAJCi0gICAgCi1zdGF0aWMgdm9pZCBOQ1I1MzgwX21haW4gKHN0cnVjdCB3b3JrX3N0cnVjdCAqYmwpCi17Ci0gICAgc3RydWN0IHNjc2lfY21uZCAqdG1wLCAqcHJldjsKLSAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSA9IGZpcnN0X2luc3RhbmNlOwotICAgIHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IEhPU1REQVRBKGluc3RhbmNlKTsKLSAgICBpbnQgZG9uZTsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgIAotICAgIC8qCi0gICAgICogV2UgcnVuICh3aXRoIGludGVycnVwdHMgZGlzYWJsZWQpIHVudGlsIHdlJ3JlIHN1cmUgdGhhdCBub25lIG9mIAotICAgICAqIHRoZSBob3N0IGFkYXB0ZXJzIGhhdmUgYW55dGhpbmcgdGhhdCBjYW4gYmUgZG9uZSwgYXQgd2hpY2ggcG9pbnQgCi0gICAgICogd2Ugc2V0IG1haW5fcnVubmluZyB0byAwIGFuZCBleGl0LgotICAgICAqCi0gICAgICogSW50ZXJydXB0cyBhcmUgZW5hYmxlZCBiZWZvcmUgZG9pbmcgdmFyaW91cyBvdGhlciBpbnRlcm5hbCAKLSAgICAgKiBpbnN0cnVjdGlvbnMsIGFmdGVyIHdlJ3ZlIGRlY2lkZWQgdGhhdCB3ZSBuZWVkIHRvIHJ1biB0aHJvdWdoCi0gICAgICogdGhlIGxvb3AgYWdhaW4uCi0gICAgICoKLSAgICAgKiB0aGlzIHNob3VsZCBwcmV2ZW50IGFueSByYWNlIGNvbmRpdGlvbnMuCi0gICAgICogCi0gICAgICogKytyb21hbjogSnVzdCBkaXNhYmxpbmcgdGhlIE5DUiBpbnRlcnJ1cHQgaXNuJ3Qgc3VmZmljaWVudCBoZXJlLAotICAgICAqIGJlY2F1c2UgYWxzbyBhIHRpbWVyIGludCBjYW4gdHJpZ2dlciBhbiBhYm9ydCBvciByZXNldCwgd2hpY2ggY2FuCi0gICAgICogYWx0ZXIgcXVldWVzIGFuZCB0b3VjaCB0aGUgRmFsY29uIGxvY2suCi0gICAgICovCi0KLSAgICAvKiBUZWxsIGludCBoYW5kbGVycyBtYWluKCkgaXMgbm93IGFscmVhZHkgZXhlY3V0aW5nLiAgTm90ZSB0aGF0Ci0gICAgICAgbm8gcmFjZXMgYXJlIHBvc3NpYmxlIGhlcmUuIElmIGFuIGludCBjb21lcyBpbiBiZWZvcmUKLSAgICAgICAnbWFpbl9ydW5uaW5nJyBpcyBzZXQgaGVyZSwgYW5kIHF1ZXVlcy9leGVjdXRlcyBtYWluIHZpYSB0aGUKLSAgICAgICB0YXNrIHF1ZXVlLCBpdCBkb2Vzbid0IGRvIGFueSBoYXJtLCBqdXN0IHRoaXMgaW5zdGFuY2Ugb2YgbWFpbgotICAgICAgIHdvbid0IGZpbmQgYW55IHdvcmsgbGVmdCB0byBkby4gKi8KLSAgICBpZiAobWFpbl9ydW5uaW5nKQotICAgIAlyZXR1cm47Ci0gICAgbWFpbl9ydW5uaW5nID0gMTsKLQotICAgIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotICAgIGRvIHsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOyAvKiBGcmVlemUgcmVxdWVzdCBxdWV1ZXMgKi8KLQlkb25lID0gMTsKLQkKLQlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKLQkgICAgZHByaW50ayhOREVCVUdfTUFJTiwgICJzY3NpJWQ6IG5vdCBjb25uZWN0ZWRcbiIsIEhPU1ROTyApOwotCSAgICAvKgotCSAgICAgKiBTZWFyY2ggdGhyb3VnaCB0aGUgaXNzdWVfcXVldWUgZm9yIGEgY29tbWFuZCBkZXN0aW5lZAotCSAgICAgKiBmb3IgYSB0YXJnZXQgdGhhdCdzIG5vdCBidXN5LgotCSAgICAgKi8KLSNpZiAoTkRFQlVHICYgTkRFQlVHX0xJU1RTKQotCSAgICBmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwgcHJldiA9IE5VTEw7Ci0JCSB0bXAgJiYgKHRtcCAhPSBwcmV2KTsgcHJldiA9IHRtcCwgdG1wID0gTkVYVCh0bXApKQotCQk7Ci0JICAgIGlmICgodG1wID09IHByZXYpICYmIHRtcCkgcHJpbnRrKCIgTE9PUFxuIik7LyogZWxzZSBwcmludGsoIlxuIik7Ki8KLSNlbmRpZgotCSAgICBmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSwKLQkJIHByZXYgPSBOVUxMOyB0bXA7IHByZXYgPSB0bXAsIHRtcCA9IE5FWFQodG1wKSApIHsKLQotCQlpZiAocHJldiAhPSB0bXApCi0JCQlkcHJpbnRrKE5ERUJVR19MSVNUUywgIk1BSU4gdG1wPSVwICAgdGFyZ2V0PSVkICAgYnVzeT0lZCBsdW49JWxsdVxuIiwgdG1wLCB0bXAtPmRldmljZS0+aWQsIGhvc3RkYXRhLT5idXN5W3RtcC0+ZGV2aWNlLT5pZF0sIHRtcC0+ZGV2aWNlLT5sdW4pOwotCQkvKiAgV2hlbiB3ZSBmaW5kIG9uZSwgcmVtb3ZlIGl0IGZyb20gdGhlIGlzc3VlIHF1ZXVlLiAqLwotCQkvKiArK2d1ZW50aGVyOiBwb3NzaWJsZSByYWNlIHdpdGggRmFsY29uIGxvY2tpbmcgKi8KLQkJaWYgKAotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkgICAgIWlzX2x1bl9idXN5KCB0bXAsIHRtcC0+Y21uZFswXSAhPSBSRVFVRVNUX1NFTlNFKQotI2Vsc2UKLQkJICAgICEoaG9zdGRhdGEtPmJ1c3lbdG1wLT5kZXZpY2UtPmlkXSAmICgxIDw8IHRtcC0+ZGV2aWNlLT5sdW4pKQotI2VuZGlmCi0JCSAgICApIHsKLQkJICAgIC8qICsrZ3VlbnRoZXI6IGp1c3QgdG8gYmUgc3VyZSwgdGhpcyBtdXN0IGJlIGF0b21pYyAqLwotCQkgICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJICAgIGlmIChwcmV2KSB7Ci0JCSAgICAgICAgUkVNT1ZFKHByZXYsIE5FWFQocHJldiksIHRtcCwgTkVYVCh0bXApKTsKLQkJCVNFVF9ORVhUKHByZXYsIE5FWFQodG1wKSk7Ci0JCSAgICB9IGVsc2UgewotCQkgICAgICAgIFJFTU9WRSgtMSwgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlLCB0bXAsIE5FWFQodG1wKSk7Ci0JCQlob3N0ZGF0YS0+aXNzdWVfcXVldWUgPSBORVhUKHRtcCk7Ci0JCSAgICB9Ci0JCSAgICBTRVRfTkVYVCh0bXAsIE5VTEwpOwotCQkgICAgCi0JCSAgICAvKiByZWVuYWJsZSBpbnRlcnJ1cHRzIGFmdGVyIGZpbmRpbmcgb25lICovCi0JCSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCSAgICAKLQkJICAgIC8qIAotCQkgICAgICogQXR0ZW1wdCB0byBlc3RhYmxpc2ggYW4gSV9UX0wgbmV4dXMgaGVyZS4gCi0JCSAgICAgKiBPbiBzdWNjZXNzLCBpbnN0YW5jZS0+aG9zdGRhdGEtPmNvbm5lY3RlZCBpcyBzZXQuCi0JCSAgICAgKiBPbiBmYWlsdXJlLCB3ZSBtdXN0IGFkZCB0aGUgY29tbWFuZCBiYWNrIHRvIHRoZQotCQkgICAgICogICBpc3N1ZSBxdWV1ZSBzbyB3ZSBjYW4ga2VlcCB0cnlpbmcuCQotCQkgICAgICovCi0JCSAgICBkcHJpbnRrKE5ERUJVR19NQUlOLCAic2NzaSVkOiBtYWluKCk6IGNvbW1hbmQgZm9yIHRhcmdldCAlZCAiCi0JCQkJImx1biAlbGx1IHJlbW92ZWQgZnJvbSBpc3N1ZV9xdWV1ZVxuIiwKLQkJCQlIT1NUTk8sIHRtcC0+ZGV2aWNlLT5pZCwgdG1wLT5kZXZpY2UtPmx1bik7Ci0JCSAgICAvKiAKLQkJICAgICAqIFJFUVVFU1QgU0VOU0UgY29tbWFuZHMgYXJlIGlzc3VlZCB3aXRob3V0IHRhZ2dlZAotCQkgICAgICogcXVldWVpbmcsIGV2ZW4gb24gU0NTSS1JSSBkZXZpY2VzIGJlY2F1c2UgdGhlIAotCQkgICAgICogY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbiBleGlzdHMgZm9yIHRoZSAKLQkJICAgICAqIGVudGlyZSB1bml0LgotCQkgICAgICovCi0JCSAgICAvKiArK3JvbWFuOiAuLi5hbmQgdGhlIHN0YW5kYXJkIGFsc28gcmVxdWlyZXMgdGhhdAotCQkgICAgICogUkVRVUVTVCBTRU5TRSBjb21tYW5kIGFyZSB1bnRhZ2dlZC4KLQkJICAgICAqLwotCQkgICAgCi0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCSAgICBjbWRfZ2V0X3RhZyggdG1wLCB0bXAtPmNtbmRbMF0gIT0gUkVRVUVTVF9TRU5TRSApOwotI2VuZGlmCi0JCSAgICBpZiAoIU5DUjUzODBfc2VsZWN0KGluc3RhbmNlLCB0bXAsIAotCQkJICAgICh0bXAtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgPyBUQUdfTk9ORSA6IAotCQkJICAgIFRBR19ORVhUKSkgewotCQkJYnJlYWs7Ci0JCSAgICB9IGVsc2UgewotCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJCUxJU1QodG1wLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCQkJU0VUX05FWFQodG1wLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCQkJaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gdG1wOwotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkJY21kX2ZyZWVfdGFnKCB0bXAgKTsKLSNlbmRpZgotCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkJZHByaW50ayhOREVCVUdfTUFJTiwgInNjc2klZDogbWFpbigpOiBzZWxlY3QoKSBmYWlsZWQsICIKLQkJCQkgICAgInJldHVybmVkIHRvIGlzc3VlX3F1ZXVlXG4iLCBIT1NUTk8pOwotCQkJaWYgKGhvc3RkYXRhLT5jb25uZWN0ZWQpCi0JCQkgICAgYnJlYWs7Ci0JCSAgICB9Ci0JCX0gLyogaWYgdGFyZ2V0L2x1bi90YXJnZXQgcXVldWUgaXMgbm90IGJ1c3kgKi8KLQkgICAgfSAvKiBmb3IgaXNzdWVfcXVldWUgKi8KLQl9IC8qIGlmICghaG9zdGRhdGEtPmNvbm5lY3RlZCkgKi8KLQlpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCAKLSNpZmRlZiBSRUFMX0RNQQotCSAgICAmJiAhaG9zdGRhdGEtPmRtYV9sZW4KLSNlbmRpZgotCSAgICApIHsKLQkgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCSAgICBkcHJpbnRrKE5ERUJVR19NQUlOLCAic2NzaSVkOiBtYWluOiBwZXJmb3JtaW5nIGluZm9ybWF0aW9uIHRyYW5zZmVyXG4iLAotCQkJSE9TVE5PKTsKLQkgICAgTkNSNTM4MF9pbmZvcm1hdGlvbl90cmFuc2ZlcihpbnN0YW5jZSk7Ci0JICAgIGRwcmludGsoTkRFQlVHX01BSU4sICJzY3NpJWQ6IG1haW46IGRvbmUgc2V0IGZhbHNlXG4iLCBIT1NUTk8pOwotCSAgICBkb25lID0gMDsKLQl9Ci0gICAgfSB3aGlsZSAoIWRvbmUpOwotCi0gICAgLyogQmV0dGVyIGFsbG93IGludHMgX2FmdGVyXyAnbWFpbl9ydW5uaW5nJyBoYXMgYmVlbiBjbGVhcmVkLCBlbHNlCi0gICAgICAgYW4gaW50ZXJydXB0IGNvdWxkIGJlbGlldmUgd2UnbGwgcGljayB1cCB0aGUgd29yayBpdCBsZWZ0IGZvcgotICAgICAgIHVzLCBidXQgd2Ugd29uJ3Qgc2VlIGl0IGFueW1vcmUgaGVyZS4uLiAqLwotICAgIG1haW5fcnVubmluZyA9IDA7Ci0gICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0KLSNpZmRlZiBSRUFMX0RNQQotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX2RtYV9jb21wbGV0ZSAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi0gKgotICogUHVycG9zZSA6IENhbGxlZCBieSBpbnRlcnJ1cHQgaGFuZGxlciB3aGVuIERNQSBmaW5pc2hlcyBvciBhIHBoYXNlCi0gKgltaXNtYXRjaCBvY2N1cnMgKHdoaWNoIHdvdWxkIGZpbmlzaCB0aGUgRE1BIHRyYW5zZmVyKS4gIAotICoKLSAqIElucHV0cyA6IGluc3RhbmNlIC0gdGhpcyBpbnN0YW5jZSBvZiB0aGUgTkNSNTM4MC4KLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgTkNSNTM4MF9kbWFfY29tcGxldGUoIHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlICkKLXsKLSAgICBTRVRVUF9IT1NUREFUQShpbnN0YW5jZSk7Ci0gICAgaW50ICAgICAgICAgICB0cmFuc2ZlcmVkOwotICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhOwotICAgIHZvbGF0aWxlIGludCAgKmNvdW50OwotCi0gICAgaWYgKCFob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiByZWNlaXZlZCBlbmQgb2YgRE1BIGludGVycnVwdCB3aXRoICIKLQkgICAgICAgIm5vIGNvbm5lY3RlZCBjbWRcbiIsIEhPU1ROTyk7Ci0JcmV0dXJuOwotICAgIH0KLQotICAgIGRwcmludGsoTkRFQlVHX0RNQSwgInNjc2klZDogcmVhbCBETUEgdHJhbnNmZXIgY29tcGxldGUsIGJhc3IgMHglWCwgc3IgMHglWFxuIiwKLQkgICAgICAgSE9TVE5PLCBOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSwKLQkgICAgICAgTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpKTsKLQotICAgIGlmKChzdW4zc2NzaV9kbWFfZmluaXNoKHJxX2RhdGFfZGlyKGhvc3RkYXRhLT5jb25uZWN0ZWQtPnJlcXVlc3QpKSkpIHsKLQkgICAgcHJpbnRrKCJzY3NpJWQ6IG92ZXJydW4gaW4gVURDIGNvdW50ZXIgLS0gbm90IHByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGlzIVxuIiwgSE9TVE5PKTsKLQkgICAgcHJpbnRrKCJwbGVhc2UgZS1tYWlsIHNhbW15QHNhbW15Lm5ldCB3aXRoIGEgZGVzY3JpcHRpb24gb2YgaG93IHRoaXNcbiIpOwotCSAgICBwcmludGsoImVycm9yIHdhcyBwcm9kdWNlZC5cbiIpOwotCSAgICBCVUcoKTsKLSAgICB9Ci0KLSAgICAvKiBtYWtlIHN1cmUgd2UncmUgbm90IHN0dWNrIGluIGEgZGF0YSBwaGFzZSAqLwotICAgIGlmKChOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIChCQVNSX1BIQVNFX01BVENIIHwKLQkJCQkJICAgIEJBU1JfQUNLKSkgPT0KLSAgICAgICAoQkFTUl9QSEFTRV9NQVRDSCB8IEJBU1JfQUNLKSkgewotCSAgICBwcmludGsoInNjc2klZDogQkFTUiAlMDJ4XG4iLCBIT1NUTk8sIE5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpKTsKLQkgICAgcHJpbnRrKCJzY3NpJWQ6IGJ1cyBzdHVjayBpbiBkYXRhIHBoYXNlIC0tIHByb2JhYmx5IGEgc2luZ2xlIGJ5dGUgIgotCQkgICAib3ZlcnJ1biFcbiIsIEhPU1ROTyk7Ci0JICAgIHByaW50aygibm90IHByZXBhcmVkIGZvciB0aGlzIGVycm9yIVxuIik7Ci0JICAgIHByaW50aygicGxlYXNlIGUtbWFpbCBzYW1teUBzYW1teS5uZXQgd2l0aCBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGlzXG4iKTsKLQkgICAgcHJpbnRrKCJlcnJvciB3YXMgcHJvZHVjZWQuXG4iKTsKLQkgICAgQlVHKCk7Ci0gICAgfQotCi0KLQotICAgICh2b2lkKSBOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOwotICAgIE5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UpOwotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0KLSAgICB0cmFuc2ZlcmVkID0gaG9zdGRhdGEtPmRtYV9sZW4gLSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSk7Ci0gICAgaG9zdGRhdGEtPmRtYV9sZW4gPSAwOwotCi0gICAgZGF0YSA9ICh1bnNpZ25lZCBjaGFyICoqKSAmKGhvc3RkYXRhLT5jb25uZWN0ZWQtPlNDcC5wdHIpOwotICAgIGNvdW50ID0gJihob3N0ZGF0YS0+Y29ubmVjdGVkLT5TQ3AudGhpc19yZXNpZHVhbCk7Ci0gICAgKmRhdGEgKz0gdHJhbnNmZXJlZDsKLSAgICAqY291bnQgLT0gdHJhbnNmZXJlZDsKLQotfQotI2VuZGlmIC8qIFJFQUxfRE1BICovCi0KLQotLyoKLSAqIEZ1bmN0aW9uIDogdm9pZCBOQ1I1MzgwX2ludHIgKGludCBpcnEpCi0gKiAKLSAqIFB1cnBvc2UgOiBoYW5kbGUgaW50ZXJydXB0cywgcmVlc3RhYmxpc2hpbmcgSV9UX0wgb3IgSV9UX0xfUSBuZXh1c2VzCi0gKglmcm9tIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUsIGFuZCByZXN0YXJ0aW5nIE5DUjUzODBfbWFpbigpIAotICoJYXMgcmVxdWlyZWQuCi0gKgotICogSW5wdXRzIDogaW50IGlycSwgaXJxIHRoYXQgY2F1c2VkIHRoaXMgaW50ZXJydXB0LgotICoKLSAqLwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgTkNSNTM4MF9pbnRyIChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0gICAgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBmaXJzdF9pbnN0YW5jZTsKLSAgICBpbnQgZG9uZSA9IDEsIGhhbmRsZWQgPSAwOwotICAgIHVuc2lnbmVkIGNoYXIgYmFzcjsKLQotICAgIGRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IE5DUjUzODAgaXJxIHRyaWdnZXJlZFxuIiwgSE9TVE5PKTsKLQotICAgIC8qIExvb2sgZm9yIHBlbmRpbmcgaW50ZXJydXB0cyAqLwotICAgIGJhc3IgPSBOQ1I1MzgwX3JlYWQoQlVTX0FORF9TVEFUVVNfUkVHKTsKLSAgICBkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBCQVNSPSUwMnhcbiIsIEhPU1ROTywgYmFzcik7Ci0gICAgLyogZGlzcGF0Y2ggdG8gYXBwcm9wcmlhdGUgcm91dGluZSBpZiBmb3VuZCBhbmQgZG9uZT0wICovCi0gICAgaWYgKGJhc3IgJiBCQVNSX0lSUSkgewotCU5DUjUzODBfZHByaW50KE5ERUJVR19JTlRSLCBpbnN0YW5jZSk7Ci0JaWYgKChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiAoU1JfU0VMfFNSX0lPKSkgPT0gKFNSX1NFTHxTUl9JTykpIHsKLQkgICAgZG9uZSA9IDA7Ci0vLwkgICAgRU5BQkxFX0lSUSgpOwotCSAgICBkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBTRUwgaW50ZXJydXB0XG4iLCBIT1NUTk8pOwotCSAgICBOQ1I1MzgwX3Jlc2VsZWN0KGluc3RhbmNlKTsKLQkgICAgKHZvaWQpIE5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7Ci0JfQotCWVsc2UgaWYgKGJhc3IgJiBCQVNSX1BBUklUWV9FUlJPUikgewotCSAgICBkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBQQVJJVFkgaW50ZXJydXB0XG4iLCBIT1NUTk8pOwotCSAgICAodm9pZCkgTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLQl9Ci0JZWxzZSBpZiAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JTVCkgPT0gU1JfUlNUKSB7Ci0JICAgIGRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IFJFU0VUIGludGVycnVwdFxuIiwgSE9TVE5PKTsKLQkgICAgKHZvaWQpTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLQl9Ci0JZWxzZSB7Ci0JICAgIC8qICAKLQkgICAgICogVGhlIHJlc3Qgb2YgdGhlIGludGVycnVwdCBjb25kaXRpb25zIGNhbiBvY2N1ciBvbmx5IGR1cmluZyBhCi0JICAgICAqIERNQSB0cmFuc2ZlcgotCSAgICAgKi8KLQotI2lmIGRlZmluZWQoUkVBTF9ETUEpCi0JICAgIC8qCi0JICAgICAqIFdlIHNob3VsZCBvbmx5IGdldCBQSEFTRSBNSVNNQVRDSCBhbmQgRU9QIGludGVycnVwdHMgaWYgd2UgaGF2ZQotCSAgICAgKiBETUEgZW5hYmxlZCwgc28gZG8gYSBzYW5pdHkgY2hlY2sgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2V0dGluZwotCSAgICAgKiBvZiB0aGUgTU9ERSByZWdpc3Rlci4KLQkgICAgICovCi0KLQkgICAgaWYgKChOQ1I1MzgwX3JlYWQoTU9ERV9SRUcpICYgTVJfRE1BX01PREUpICYmCi0JCSgoYmFzciAmIEJBU1JfRU5EX0RNQV9UUkFOU0ZFUikgfHwgCi0JCSAhKGJhc3IgJiBCQVNSX1BIQVNFX01BVENIKSkpIHsKLQkJICAgIAotCQlkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiBQSEFTRSBNSVNNIG9yIEVPUCBpbnRlcnJ1cHRcbiIsIEhPU1ROTyk7Ci0JCU5DUjUzODBfZG1hX2NvbXBsZXRlKCBpbnN0YW5jZSApOwotCQlkb25lID0gMDsKLS8vCQlFTkFCTEVfSVJRKCk7Ci0JICAgIH0gZWxzZQotI2VuZGlmIC8qIFJFQUxfRE1BICovCi0JICAgIHsKLS8qIE1TOiBJZ25vcmUgdW5rbm93biBwaGFzZSBtaXNtYXRjaCBpbnRlcnJ1cHRzIChjYXVzZWQgYnkgRU9QIGludGVycnVwdCkgKi8KLQkJaWYgKGJhc3IgJiBCQVNSX1BIQVNFX01BVENIKQotCQkgICBkcHJpbnRrKE5ERUJVR19JTlRSLCAic2NzaSVkOiB1bmtub3duIGludGVycnVwdCwgIgotCQkJICAgIkJBU1IgMHgleCwgTVIgMHgleCwgU1IgMHgleFxuIiwKLQkJCSAgIEhPU1ROTywgYmFzciwgTkNSNTM4MF9yZWFkKE1PREVfUkVHKSwKLQkJCSAgIE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSk7Ci0JCSh2b2lkKSBOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOwotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQkJZHJlZ3MtPmNzciB8PSBDU1JfRE1BX0VOQUJMRTsKLSNlbmRpZgotCSAgICB9Ci0JfSAvKiBpZiAhKFNFTEVDVElPTiB8fCBQQVJJVFkpICovCi0JaGFuZGxlZCA9IDE7Ci0gICAgfSAvKiBCQVNSICYgSVJRICovCi0gICAgZWxzZSB7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogaW50ZXJydXB0IHdpdGhvdXQgSVJRIGJpdCBzZXQgaW4gQkFTUiwgIgotCSAgICAgICAiQkFTUiAweCVYLCBNUiAweCVYLCBTUiAweCV4XG4iLCBIT1NUTk8sIGJhc3IsCi0JICAgICAgIE5DUjUzODBfcmVhZChNT0RFX1JFRyksIE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSk7Ci0JKHZvaWQpIE5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7Ci0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCQlkcmVncy0+Y3NyIHw9IENTUl9ETUFfRU5BQkxFOwotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmICghZG9uZSkgewotCWRwcmludGsoTkRFQlVHX0lOVFIsICJzY3NpJWQ6IGluIGludCByb3V0aW5lLCBjYWxsaW5nIG1haW5cbiIsIEhPU1ROTyk7Ci0JLyogUHV0IGEgY2FsbCB0byBOQ1I1MzgwX21haW4oKSBvbiB0aGUgcXVldWUuLi4gKi8KLQlxdWV1ZV9tYWluKCk7Ci0gICAgfQotICAgIHJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwotfQotCi0jaWZkZWYgTkNSNTM4MF9TVEFUUwotc3RhdGljIHZvaWQgY29sbGVjdF9zdGF0cyhzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGEsCi0JCQkgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLSMgaWZkZWYgTkNSNTM4MF9TVEFUX0xJTUlUCi0gICAgaWYgKHNjc2lfYnVmZmxlbihjbWQpID4gTkNSNTM4MF9TVEFUX0xJTUlUKQotIyBlbmRpZgotCXN3aXRjaCAoY21kLT5jbW5kWzBdKQotCXsKLQkgICAgY2FzZSBXUklURToKLQkgICAgY2FzZSBXUklURV82OgotCSAgICBjYXNlIFdSSVRFXzEwOgotCQlob3N0ZGF0YS0+dGltZV93cml0ZVtjbWQtPmRldmljZS0+aWRdICs9IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJLypob3N0ZGF0YS0+Ynl0ZXNfd3JpdGVbY21kLT5kZXZpY2UtPmlkXSArPSBzY3NpX2J1ZmZsZW4oY21kKTsqLwotCQlob3N0ZGF0YS0+cGVuZGluZ3ctLTsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgUkVBRDoKLQkgICAgY2FzZSBSRUFEXzY6Ci0JICAgIGNhc2UgUkVBRF8xMDoKLQkJaG9zdGRhdGEtPnRpbWVfcmVhZFtjbWQtPmRldmljZS0+aWRdICs9IChqaWZmaWVzIC0gaG9zdGRhdGEtPnRpbWViYXNlKTsKLQkJLypob3N0ZGF0YS0+Ynl0ZXNfcmVhZFtjbWQtPmRldmljZS0+aWRdICs9IHNjc2lfYnVmZmxlbihjbWQpOyovCi0JCWhvc3RkYXRhLT5wZW5kaW5nci0tOwotCQlicmVhazsKLQl9Ci19Ci0jZW5kaWYKLQotLyogCi0gKiBGdW5jdGlvbiA6IGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwKLSAqIAkJCQkgc3RydWN0IHNjc2lfY21uZCAqY21kLAlpbnQgdGFnKTsKLSAqCi0gKiBQdXJwb3NlIDogZXN0YWJsaXNoZXMgSV9UX0wgb3IgSV9UX0xfUSBuZXh1cyBmb3IgbmV3IG9yIGV4aXN0aW5nIGNvbW1hbmQsCi0gKglpbmNsdWRpbmcgQVJCSVRSQVRJT04sIFNFTEVDVElPTiwgYW5kIGluaXRpYWwgbWVzc2FnZSBvdXQgZm9yIAotICoJSURFTlRJRlkgYW5kIHF1ZXVlIG1lc3NhZ2VzLiAKLSAqCi0gKiBJbnB1dHMgOiBpbnN0YW5jZSAtIGluc3RhbnRpYXRpb24gb2YgdGhlIDUzODAgZHJpdmVyIG9uIHdoaWNoIHRoaXMgCi0gKiAJdGFyZ2V0IGxpdmVzLCBjbWQgLSBTQ1NJIGNvbW1hbmQgdG8gZXhlY3V0ZSwgdGFnIC0gc2V0IHRvIFRBR19ORVhUIGZvciAKLSAqCW5ldyB0YWcsIFRBR19OT05FIGZvciB1bnRhZ2dlZCBxdWV1ZWluZywgb3RoZXJ3aXNlIHNldCB0byB0aGUgdGFnIGZvciAKLSAqCXRoZSBjb21tYW5kIHRoYXQgaXMgcHJlc2VudGx5IGNvbm5lY3RlZC4KLSAqIAotICogUmV0dXJucyA6IC0xIGlmIHNlbGVjdGlvbiBjb3VsZCBub3QgZXhlY3V0ZSBmb3Igc29tZSByZWFzb24sCi0gKgkwIGlmIHNlbGVjdGlvbiBzdWNjZWVkZWQgb3IgZmFpbGVkIGJlY2F1c2UgdGhlIHRhcmdldCAKLSAqIAlkaWQgbm90IHJlc3BvbmQuCi0gKgotICogU2lkZSBlZmZlY3RzIDogCi0gKiAJSWYgYnVzIGJ1c3ksIGFyYml0cmF0aW9uIGZhaWxlZCwgZXRjLCBOQ1I1MzgwX3NlbGVjdCgpIHdpbGwgZXhpdCAKLSAqCQl3aXRoIHJlZ2lzdGVycyBhcyB0aGV5IHNob3VsZCBoYXZlIGJlZW4gb24gZW50cnkgLSBpZQotICoJCVNFTEVDVF9FTkFCTEUgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseSwgdGhlIE5DUjUzODAKLSAqCQl3aWxsIGNlYXNlIHRvIGRyaXZlIGFueSBTQ1NJIGJ1cyBzaWduYWxzLgotICoKLSAqCUlmIHN1Y2Nlc3NmdWwgOiBJX1RfTCBvciBJX1RfTF9RIG5leHVzIHdpbGwgYmUgZXN0YWJsaXNoZWQsIAotICoJCWluc3RhbmNlLT5jb25uZWN0ZWQgd2lsbCBiZSBzZXQgdG8gY21kLiAgCi0gKiAJCVNFTEVDVCBpbnRlcnJ1cHQgd2lsbCBiZSBkaXNhYmxlZC4KLSAqCi0gKglJZiBmYWlsZWQgKG5vIHRhcmdldCkgOiBjbWQtPnNjc2lfZG9uZSgpIHdpbGwgYmUgY2FsbGVkLCBhbmQgdGhlIAotICoJCWNtZC0+cmVzdWx0IGhvc3QgYnl0ZSBzZXQgdG8gRElEX0JBRF9UQVJHRVQuCi0gKi8KLQotc3RhdGljIGludCBOQ1I1MzgwX3NlbGVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqY21kLAotCQkJICBpbnQgdGFnKQotewotICAgIFNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKLSAgICB1bnNpZ25lZCBjaGFyIHRtcFszXSwgcGhhc2U7Ci0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgbGVuOwotICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dDsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgaG9zdGRhdGEtPnJlc3RhcnRfc2VsZWN0ID0gMDsKLSAgICBOQ1I1MzgwX2RwcmludChOREVCVUdfQVJCSVRSQVRJT04sIGluc3RhbmNlKTsKLSAgICBkcHJpbnRrKE5ERUJVR19BUkJJVFJBVElPTiwgInNjc2klZDogc3RhcnRpbmcgYXJiaXRyYXRpb24sIGlkID0gJWRcbiIsIEhPU1ROTywKLQkgICAgICAgaW5zdGFuY2UtPnRoaXNfaWQpOwotCi0gICAgLyogCi0gICAgICogU2V0IHRoZSBwaGFzZSBiaXRzIHRvIDAsIG90aGVyd2lzZSB0aGUgTkNSNTM4MCB3b24ndCBkcml2ZSB0aGUgCi0gICAgICogZGF0YSBidXMgZHVyaW5nIFNFTEVDVElPTi4KLSAgICAgKi8KLQotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICBpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gLTE7Ci0gICAgfQotICAgIE5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCAwKTsKLQotCi0gICAgLyogCi0gICAgICogU3RhcnQgYXJiaXRyYXRpb24uCi0gICAgICovCi0gICAgCi0gICAgTkNSNTM4MF93cml0ZShPVVRQVVRfREFUQV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLSAgICBOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9BUkJJVFJBVEUpOwotCi0gICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0gICAgLyogV2FpdCBmb3IgYXJiaXRyYXRpb24gbG9naWMgdG8gY29tcGxldGUgKi8KLSNpZmRlZiBOQ1JfVElNRU9VVAotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAyKk5DUl9USU1FT1VUOwotCi0gICAgICB3aGlsZSAoIShOQ1I1MzgwX3JlYWQoSU5JVElBVE9SX0NPTU1BTkRfUkVHKSAmIElDUl9BUkJJVFJBVElPTl9QUk9HUkVTUykKLQkgICAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSAmJiAhaG9zdGRhdGEtPmNvbm5lY3RlZCkKLQk7Ci0gICAgICBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkKLSAgICAgIHsKLQlwcmludGsoInNjc2kgOiBhcmJpdHJhdGlvbiB0aW1lb3V0IGF0ICVkXG4iLCBfX0xJTkVfXyk7Ci0JTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7Ci0JTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCXJldHVybiAtMTsKLSAgICAgIH0KLSAgICB9Ci0jZWxzZSAvKiBOQ1JfVElNRU9VVCAqLwotICAgIHdoaWxlICghKE5DUjUzODBfcmVhZChJTklUSUFUT1JfQ09NTUFORF9SRUcpICYgSUNSX0FSQklUUkFUSU9OX1BST0dSRVNTKQotCSAmJiAhaG9zdGRhdGEtPmNvbm5lY3RlZCk7Ci0jZW5kaWYKLQotICAgIGRwcmludGsoTkRFQlVHX0FSQklUUkFUSU9OLCAic2NzaSVkOiBhcmJpdHJhdGlvbiBjb21wbGV0ZVxuIiwgSE9TVE5PKTsKLQotICAgIGlmIChob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0JTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7IAotCXJldHVybiAtMTsKLSAgICB9Ci0gICAgLyogCi0gICAgICogVGhlIGFyYml0cmF0aW9uIGRlbGF5IGlzIDIuMnVzLCBidXQgdGhpcyBpcyBhIG1pbmltdW0gYW5kIHRoZXJlIGlzIAotICAgICAqIG5vIG1heGltdW0gc28gd2UgY2FuIHNhZmVseSBzbGVlcCBmb3IgY2VpbCgyLjIpIHVzZWNzIHRvIGFjY29tbW9kYXRlCi0gICAgICogdGhlIGludGVncmFsIG5hdHVyZSBvZiB1ZGVsYXkoKS4KLSAgICAgKgotICAgICAqLwotCi0gICAgdWRlbGF5KDMpOwotCi0gICAgLyogQ2hlY2sgZm9yIGxvc3QgYXJiaXRyYXRpb24gKi8KLSAgICBpZiAoKE5DUjUzODBfcmVhZChJTklUSUFUT1JfQ09NTUFORF9SRUcpICYgSUNSX0FSQklUUkFUSU9OX0xPU1QpIHx8Ci0JKE5DUjUzODBfcmVhZChDVVJSRU5UX1NDU0lfREFUQV9SRUcpICYgaG9zdGRhdGEtPmlkX2hpZ2hlcl9tYXNrKSB8fAotCShOQ1I1MzgwX3JlYWQoSU5JVElBVE9SX0NPTU1BTkRfUkVHKSAmIElDUl9BUkJJVFJBVElPTl9MT1NUKSB8fAotCWhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKLQlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsgCi0JZHByaW50ayhOREVCVUdfQVJCSVRSQVRJT04sICJzY3NpJWQ6IGxvc3QgYXJiaXRyYXRpb24sIGRlYXNzZXJ0aW5nIE1SX0FSQklUUkFURVxuIiwKLQkJICAgSE9TVE5PKTsKLQlyZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgIC8qIGFmdGVyL2R1cmluZyBhcmJpdHJhdGlvbiwgQlNZIHNob3VsZCBiZSBhc3NlcnRlZC4KLQlJQk0gRFBFUy0zMTA4MCBWZXJzaW9uIFMzMVEgd29ya3Mgbm93ICovCi0gICAgIC8qIFRueCB0byBUaG9tYXNfUm9lc2NoQG0yLm1hdXMuZGUgZm9yIGZpbmRpbmcgdGhpcyEgKFJvbWFuKSAqLwotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfU0VMIHwKLQkJCQkJIElDUl9BU1NFUlRfQlNZICkgOwotICAgIAotICAgIGlmICgoTkNSNTM4MF9yZWFkKElOSVRJQVRPUl9DT01NQU5EX1JFRykgJiBJQ1JfQVJCSVRSQVRJT05fTE9TVCkgfHwKLQlob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0JTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7Ci0JTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQlkcHJpbnRrKE5ERUJVR19BUkJJVFJBVElPTiwgInNjc2klZDogbG9zdCBhcmJpdHJhdGlvbiwgZGVhc3NlcnRpbmcgSUNSX0FTU0VSVF9TRUxcbiIsCi0JCSAgIEhPU1ROTyk7Ci0JcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qIAotICAgICAqIEFnYWluLCBidXMgY2xlYXIgKyBidXMgc2V0dGxlIHRpbWUgaXMgMS4ydXMsIGhvd2V2ZXIsIHRoaXMgaXMgCi0gICAgICogYSBtaW5pbXVtIHNvIHdlJ2xsIHVkZWxheSBjZWlsKDEuMikKLSAgICAgKi8KLQotI2lmZGVmIENPTkZJR19BVEFSSV9TQ1NJX1RPU0hJQkFfREVMQVkKLSAgICAvKiArK3JvbWFuOiBCdXQgc29tZSB0YXJnZXRzIChzZWUgYWJvdmUgOi0pIHNlZW0gdG8gbmVlZCBhIGJpdCBtb3JlLi4uICovCi0gICAgdWRlbGF5KDE1KTsKLSNlbHNlCi0gICAgdWRlbGF5KDIpOwotI2VuZGlmCi0gICAgCi0gICAgaWYgKGhvc3RkYXRhLT5jb25uZWN0ZWQpIHsKLQlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFKTsKLQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCXJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBkcHJpbnRrKE5ERUJVR19BUkJJVFJBVElPTiwgInNjc2klZDogd29uIGFyYml0cmF0aW9uXG4iLCBIT1NUTk8pOwotCi0gICAgLyogCi0gICAgICogTm93IHRoYXQgd2UgaGF2ZSB3b24gYXJiaXRyYXRpb24sIHN0YXJ0IFNlbGVjdGlvbiBwcm9jZXNzLCBhc3NlcnRpbmcgCi0gICAgICogdGhlIGhvc3QgYW5kIHRhcmdldCBJRCdzIG9uIHRoZSBTQ1NJIGJ1cy4KLSAgICAgKi8KLQotICAgIE5DUjUzODBfd3JpdGUoT1VUUFVUX0RBVEFfUkVHLCAoaG9zdGRhdGEtPmlkX21hc2sgfCAoMSA8PCBjbWQtPmRldmljZS0+aWQpKSk7Ci0KLSAgICAvKiAKLSAgICAgKiBSYWlzZSBBVE4gd2hpbGUgU0VMIGlzIHRydWUgYmVmb3JlIEJTWSBnb2VzIGZhbHNlIGZyb20gYXJiaXRyYXRpb24sCi0gICAgICogc2luY2UgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZ3VhcmFudGVlIHRoYXQgd2UnbGwgZ2V0IGEgTUVTU0FHRSBPVVQKLSAgICAgKiBwaGFzZSBpbW1lZGlhdGVseSBhZnRlciBzZWxlY3Rpb24uCi0gICAgICovCi0KLSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgKElDUl9CQVNFIHwgSUNSX0FTU0VSVF9CU1kgfCAKLQlJQ1JfQVNTRVJUX0RBVEEgfCBJQ1JfQVNTRVJUX0FUTiB8IElDUl9BU1NFUlRfU0VMICkpOwotICAgIE5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UpOwotCi0gICAgLyogCi0gICAgICogUmVzZWxlY3QgaW50ZXJydXB0cyBtdXN0IGJlIHR1cm5lZCBvZmYgcHJpb3IgdG8gdGhlIGRyb3BwaW5nIG9mIEJTWSwKLSAgICAgKiBvdGhlcndpc2Ugd2Ugd2lsbCB0cmlnZ2VyIGFuIGludGVycnVwdC4KLSAgICAgKi8KLQotICAgIGlmIChob3N0ZGF0YS0+Y29ubmVjdGVkKSB7Ci0JTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQlyZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgMCk7Ci0KLSAgICAvKgotICAgICAqIFRoZSBpbml0aWF0b3Igc2hhbGwgdGhlbiB3YWl0IGF0IGxlYXN0IHR3byBkZXNrZXcgZGVsYXlzIGFuZCByZWxlYXNlIAotICAgICAqIHRoZSBCU1kgc2lnbmFsLgotICAgICAqLwotICAgIHVkZWxheSgxKTsgICAgICAgIC8qIHdpbmdlbCAtLSB3YWl0IHR3byBidXMgZGVza2V3IGRlbGF5ID4yKjQ1bnMgKi8KLQotICAgIC8qIFJlc2V0IEJTWSAqLwotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCAoSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0RBVEEgfCAKLQlJQ1JfQVNTRVJUX0FUTiB8IElDUl9BU1NFUlRfU0VMKSk7Ci0KLSAgICAvKiAKLSAgICAgKiBTb21ldGhpbmcgd2VpcmQgaGFwcGVucyB3aGVuIHdlIGNlYXNlIHRvIGRyaXZlIEJTWSAtIGxvb2tzCi0gICAgICogbGlrZSB0aGUgYm9hcmQvY2hpcCBpcyBsZXR0aW5nIHVzIGRvIGFub3RoZXIgcmVhZCBiZWZvcmUgdGhlIAotICAgICAqIGFwcHJvcHJpYXRlIHByb3BhZ2F0aW9uIGRlbGF5IGhhcyBleHBpcmVkLCBhbmQgd2UncmUgY29uZnVzaW5nCi0gICAgICogYSBCU1kgc2lnbmFsIGZyb20gb3Vyc2VsdmVzIGFzIHRoZSB0YXJnZXQncyByZXNwb25zZSB0byBTRUxFQ1RJT04uCi0gICAgICoKLSAgICAgKiBBIHNtYWxsIGRlbGF5ICh0aGUgJ0MrKycgZnJvbnRlbmQgYnJlYWtzIHRoZSBwaXBlbGluZSB3aXRoIGFuCi0gICAgICogdW5uZWNlc3NhcnkganVtcCwgbWFraW5nIGl0IHdvcmsgb24gbXkgMzg2LTMzL1RyYW50b3IgVDEyOCwgdGhlCi0gICAgICogdGlnaHRlciAnQycgY29kZSBicmVha3MgYW5kIHJlcXVpcmVzIHRoaXMpIHNvbHZlcyB0aGUgcHJvYmxlbSAtIAotICAgICAqIHRoZSAxIHVzIGRlbGF5IGlzIGFyYml0cmFyeSwgYW5kIG9ubHkgdXNlZCBiZWNhdXNlIHRoaXMgZGVsYXkgd2lsbCAKLSAgICAgKiBiZSB0aGUgc2FtZSBvbiBvdGhlciBwbGF0Zm9ybXMgYW5kIHNpbmNlIGl0IHdvcmtzIGhlcmUsIGl0IHNob3VsZCAKLSAgICAgKiB3b3JrIHRoZXJlLgotICAgICAqCi0gICAgICogd2luZ2VsIHN1Z2dlc3RzIHRoYXQgdGhpcyBjb3VsZCBiZSBkdWUgdG8gZmFpbGluZyB0byB3YWl0Ci0gICAgICogb25lIGRlc2tldyBkZWxheS4KLSAgICAgKi8KLQotICAgIHVkZWxheSgxKTsKLQotICAgIGRwcmludGsoTkRFQlVHX1NFTEVDVElPTiwgInNjc2klZDogc2VsZWN0aW5nIHRhcmdldCAlZFxuIiwgSE9TVE5PLCBjbWQtPmRldmljZS0+aWQpOwotCi0gICAgLyogCi0gICAgICogVGhlIFNDU0kgc3BlY2lmaWNhdGlvbiBjYWxscyBmb3IgYSAyNTAgbXMgdGltZW91dCBmb3IgdGhlIGFjdHVhbCAKLSAgICAgKiBzZWxlY3Rpb24uCi0gICAgICovCi0KLSAgICB0aW1lb3V0ID0gamlmZmllcyArIDI1OyAKLQotICAgIC8qIAotICAgICAqIFhYWCB2ZXJ5IGludGVyZXN0aW5nIC0gd2UncmUgc2VlaW5nIGEgYm91bmNlIHdoZXJlIHRoZSBCU1kgd2UgCi0gICAgICogYXNzZXJ0ZWQgaXMgYmVpbmcgcmVmbGVjdGVkIC8gc3RpbGwgYXNzZXJ0ZWQgKHByb3BhZ2F0aW9uIGRlbGF5PykKLSAgICAgKiBhbmQgaXQncyBkZXRlY3RpbmcgYXMgdHJ1ZS4gIFNpZ2guCi0gICAgICovCi0KLSNpZiAwCi0gICAgLyogKytyb21hbjogSWYgYSB0YXJnZXQgY29uZm9ybWVkIHRvIHRoZSBTQ1NJIHN0YW5kYXJkLCBpdCB3b3VsZG4ndCBhc3NlcnQKLSAgICAgKiBJTyB3aGlsZSBTRUwgaXMgdHJ1ZS4gQnV0IGFnYWluLCB0aGVyZSBhcmUgc29tZSBkaXNrcyBvdXQgdGhlIGluIHRoZQotICAgICAqIHdvcmxkIHRoYXQgZG8gdGhhdCBuZXZlcnRoZWxlc3MuIChTb21lYm9keSBjbGFpbWVkIHRoYXQgdGhpcyBhbm5vdW5jZXMKLSAgICAgKiByZXNlbGVjdGlvbiBjYXBhYmlsaXR5IG9mIHRoZSB0YXJnZXQuKSBTbyB3ZSBiZXR0ZXIgc2tpcCB0aGF0IHRlc3QgYW5kCi0gICAgICogb25seSB3YWl0IGZvciBCU1kuLi4gKEZhbW91cyBnZXJtYW4gd29yZHM6IERlciBLbMO8Z2VyZSBnaWJ0IG5hY2ggOi0pCi0gICAgICovCi0KLSAgICB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkgJiYgIShOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiAKLQkoU1JfQlNZIHwgU1JfSU8pKSk7Ci0KLSAgICBpZiAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIChTUl9TRUwgfCBTUl9JTykpID09IAotCSAgICAoU1JfU0VMIHwgU1JfSU8pKSB7Ci0JICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JICAgIE5DUjUzODBfcmVzZWxlY3QoaW5zdGFuY2UpOwotCSAgICBwcmludGsgKEtFUk5fRVJSICJzY3NpJWQ6IHJlc2VsZWN0aW9uIGFmdGVyIHdvbiBhcmJpdHJhdGlvbj9cbiIsCi0JCSAgICBIT1NUTk8pOwotCSAgICBOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7Ci0JICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZWxzZQotICAgIHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSAmJiAhKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX0JTWSkpOwotI2VuZGlmCi0KLSAgICAvKiAKLSAgICAgKiBObyBsZXNzIHRoYW4gdHdvIGRlc2tldyBkZWxheXMgYWZ0ZXIgdGhlIGluaXRpYXRvciBkZXRlY3RzIHRoZSAKLSAgICAgKiBCU1kgc2lnbmFsIGlzIHRydWUsIGl0IHNoYWxsIHJlbGVhc2UgdGhlIFNFTCBzaWduYWwgYW5kIG1heSAKLSAgICAgKiBjaGFuZ2UgdGhlIERBVEEgQlVTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtd2luZ2VsCi0gICAgICovCi0KLSAgICB1ZGVsYXkoMSk7Ci0KLSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FUTik7Ci0KLSAgICBpZiAoIShOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9CU1kpKSB7Ci0JTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQlpZiAoaG9zdGRhdGEtPnRhcmdldHNfcHJlc2VudCAmICgxIDw8IGNtZC0+ZGV2aWNlLT5pZCkpIHsKLQkgICAgcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQ6IHdlaXJkbmVzc1xuIiwgSE9TVE5PKTsKLQkgICAgaWYgKGhvc3RkYXRhLT5yZXN0YXJ0X3NlbGVjdCkKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJcdHJlc3RhcnQgc2VsZWN0XG4iKTsKLQkgICAgTkNSNTM4MF9kcHJpbnQoTkRFQlVHX0FOWSwgaW5zdGFuY2UpOwotCSAgICBOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7Ci0JICAgIHJldHVybiAtMTsKLQl9Ci0JY21kLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JY29sbGVjdF9zdGF0cyhob3N0ZGF0YSwgY21kKTsKLSNlbmRpZgotI2lmZGVmIFNVUFBPUlRfVEFHUwotCWNtZF9mcmVlX3RhZyggY21kICk7Ci0jZW5kaWYKLQljbWQtPnNjc2lfZG9uZShjbWQpOwotCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQlkcHJpbnRrKE5ERUJVR19TRUxFQ1RJT04sICJzY3NpJWQ6IHRhcmdldCBkaWQgbm90IHJlc3BvbmQgd2l0aGluIDI1MG1zXG4iLCBIT1NUTk8pOwotCU5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQlyZXR1cm4gMDsKLSAgICB9IAotCi0gICAgaG9zdGRhdGEtPnRhcmdldHNfcHJlc2VudCB8PSAoMSA8PCBjbWQtPmRldmljZS0+aWQpOwotCi0gICAgLyoKLSAgICAgKiBTaW5jZSB3ZSBmb2xsb3dlZCB0aGUgU0NTSSBzcGVjLCBhbmQgcmFpc2VkIEFUTiB3aGlsZSBTRUwgCi0gICAgICogd2FzIHRydWUgYnV0IGJlZm9yZSBCU1kgd2FzIGZhbHNlIGR1cmluZyBzZWxlY3Rpb24sIHRoZSBpbmZvcm1hdGlvbgotICAgICAqIHRyYW5zZmVyIHBoYXNlIHNob3VsZCBiZSBhIE1FU1NBR0UgT1VUIHBoYXNlIHNvIHRoYXQgd2UgY2FuIHNlbmQgdGhlCi0gICAgICogSURFTlRJRlkgbWVzc2FnZS4KLSAgICAgKiAKLSAgICAgKiBJZiBTQ1NJLUlJIHRhZ2dlZCBxdWV1aW5nIGlzIGVuYWJsZWQsIHdlIGFsc28gc2VuZCBhIFNJTVBMRV9RVUVVRV9UQUcKLSAgICAgKiBtZXNzYWdlICgyIGJ5dGVzKSB3aXRoIGEgdGFnIElEIHRoYXQgd2UgaW5jcmVtZW50IHdpdGggZXZlcnkgY29tbWFuZAotICAgICAqIHVudGlsIGl0IHdyYXBzIGJhY2sgdG8gMC4KLSAgICAgKgotICAgICAqIFhYWCAtIGl0IHR1cm5zIG91dCB0aGF0IHRoZXJlIGFyZSBzb21lIGJyb2tlbiBTQ1NJLUlJIGRldmljZXMsCi0gICAgICoJICAgICB3aGljaCBjbGFpbSB0byBzdXBwb3J0IHRhZ2dlZCBxdWV1aW5nIGJ1dCBmYWlsIHdoZW4gbW9yZSB0aGFuCi0gICAgICoJICAgICBzb21lIG51bWJlciBvZiBjb21tYW5kcyBhcmUgaXNzdWVkIGF0IG9uY2UuCi0gICAgICovCi0KLSAgICAvKiBXYWl0IGZvciBzdGFydCBvZiBSRVEvQUNLIGhhbmRzaGFrZSAqLwotICAgIHdoaWxlICghKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JFUSkpOwotCi0gICAgZHByaW50ayhOREVCVUdfU0VMRUNUSU9OLCAic2NzaSVkOiB0YXJnZXQgJWQgc2VsZWN0ZWQsIGdvaW5nIGludG8gTUVTU0FHRSBPVVQgcGhhc2UuXG4iLAotCSAgICAgICBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCk7Ci0gICAgdG1wWzBdID0gSURFTlRJRlkoMSwgY21kLT5kZXZpY2UtPmx1bik7Ci0KLSNpZmRlZiBTVVBQT1JUX1RBR1MKLSAgICBpZiAoY21kLT50YWcgIT0gVEFHX05PTkUpIHsKLQl0bXBbMV0gPSBob3N0ZGF0YS0+bGFzdF9tZXNzYWdlID0gU0lNUExFX1FVRVVFX1RBRzsKLQl0bXBbMl0gPSBjbWQtPnRhZzsKLQlsZW4gPSAzOwotICAgIH0gZWxzZSAKLQlsZW4gPSAxOwotI2Vsc2UKLSAgICBsZW4gPSAxOwotICAgIGNtZC0+dGFnPTA7Ci0jZW5kaWYgLyogU1VQUE9SVF9UQUdTICovCi0KLSAgICAvKiBTZW5kIG1lc3NhZ2UocykgKi8KLSAgICBkYXRhID0gdG1wOwotICAgIHBoYXNlID0gUEhBU0VfTVNHT1VUOwotICAgIE5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLSAgICBkcHJpbnRrKE5ERUJVR19TRUxFQ1RJT04sICJzY3NpJWQ6IG5leHVzIGVzdGFibGlzaGVkLlxuIiwgSE9TVE5PKTsKLSAgICAvKiBYWFggbmVlZCB0byBoYW5kbGUgZXJyb3JzIGhlcmUgKi8KLSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gY21kOwotI2lmbmRlZiBTVVBQT1JUX1RBR1MKLSAgICBob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdIHw9ICgxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwotI2VuZGlmICAgIAotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLSAgICBkcmVncy0+Y3NyIHw9IENTUl9JTlRSOwotI2VuZGlmCi0gICAgaW5pdGlhbGl6ZV9TQ3AoY21kKTsKLQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIAotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF90cmFuc2Zlcl9waW8gKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCAKLSAqICAgICAgdW5zaWduZWQgY2hhciAqcGhhc2UsIGludCAqY291bnQsIHVuc2lnbmVkIGNoYXIgKipkYXRhKQotICoKLSAqIFB1cnBvc2UgOiB0cmFuc2ZlcnMgZGF0YSBpbiBnaXZlbiBwaGFzZSB1c2luZyBwb2xsZWQgSS9PCi0gKgotICogSW5wdXRzIDogaW5zdGFuY2UgLSBpbnN0YW5jZSBvZiBkcml2ZXIsICpwaGFzZSAtIHBvaW50ZXIgdG8gCi0gKgl3aGF0IHBoYXNlIGlzIGV4cGVjdGVkLCAqY291bnQgLSBwb2ludGVyIHRvIG51bWJlciBvZiAKLSAqCWJ5dGVzIHRvIHRyYW5zZmVyLCAqKmRhdGEgLSBwb2ludGVyIHRvIGRhdGEgcG9pbnRlci4KLSAqIAotICogUmV0dXJucyA6IC0xIHdoZW4gZGlmZmVyZW50IHBoYXNlIGlzIGVudGVyZWQgd2l0aG91dCB0cmFuc2ZlcnJpbmcKLSAqCW1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBhcmUgdHJhbnNmZXJyZWQgb3IgZXhpdAotICoJaXMgaW4gc2FtZSBwaGFzZS4KLSAqCi0gKiAJQWxzbywgKnBoYXNlLCAqY291bnQsICpkYXRhIGFyZSBtb2RpZmllZCBpbiBwbGFjZS4KLSAqCi0gKiBYWFggTm90ZSA6IGhhbmRsaW5nIGZvciBidXMgZnJlZSBtYXkgYmUgdXNlZnVsLgotICovCi0KLS8qCi0gKiBOb3RlIDogdGhpcyBjb2RlIGlzIG5vdCBhcyBxdWljayBhcyBpdCBjb3VsZCBiZSwgaG93ZXZlciBpdCAKLSAqIElTIDEwMCUgcmVsaWFibGUsIGFuZCBmb3IgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyIHdoZXJlIHNwZWVkCi0gKiBjb3VudHMsIHdlIHdpbGwgYWx3YXlzIGRvIGEgcHNldWRvIERNQSBvciBETUEgdHJhbnNmZXIuCi0gKi8KLQotc3RhdGljIGludCBOQ1I1MzgwX3RyYW5zZmVyX3Bpbyggc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIAotCQkJCSB1bnNpZ25lZCBjaGFyICpwaGFzZSwgaW50ICpjb3VudCwKLQkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEpCi17Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBwID0gKnBoYXNlLCB0bXA7Ci0gICAgcmVnaXN0ZXIgaW50IGMgPSAqY291bnQ7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqZCA9ICpkYXRhOwotCi0gICAgLyogCi0gICAgICogVGhlIE5DUjUzODAgY2hpcCB3aWxsIG9ubHkgZHJpdmUgdGhlIFNDU0kgYnVzIHdoZW4gdGhlIAotICAgICAqIHBoYXNlIHNwZWNpZmllZCBpbiB0aGUgYXBwcm9wcmlhdGUgYml0cyBvZiB0aGUgVEFSR0VUIENPTU1BTkQKLSAgICAgKiBSRUdJU1RFUiBtYXRjaCB0aGUgU1RBVFVTIFJFR0lTVEVSCi0gICAgICovCi0KLSAgICBOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywgUEhBU0VfU1JfVE9fVENSKHApKTsKLQotICAgIGRvIHsKLQkvKiAKLQkgKiBXYWl0IGZvciBhc3NlcnRpb24gb2YgUkVRLCBhZnRlciB3aGljaCB0aGUgcGhhc2UgYml0cyB3aWxsIGJlIAotCSAqIHZhbGlkIAotCSAqLwotCXdoaWxlICghKCh0bXAgPSBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpICYgU1JfUkVRKSk7Ci0KLQlkcHJpbnRrKE5ERUJVR19IQU5EU0hBS0UsICJzY3NpJWQ6IFJFUSBkZXRlY3RlZFxuIiwgSE9TVE5PKTsKLQotCS8qIENoZWNrIGZvciBwaGFzZSBtaXNtYXRjaCAqLwkKLQlpZiAoKHRtcCAmIFBIQVNFX01BU0spICE9IHApIHsKLQkgICAgZHByaW50ayhOREVCVUdfUElPLCAic2NzaSVkOiBwaGFzZSBtaXNtYXRjaFxuIiwgSE9TVE5PKTsKLQkgICAgTkNSNTM4MF9kcHJpbnRfcGhhc2UoTkRFQlVHX1BJTywgaW5zdGFuY2UpOwotCSAgICBicmVhazsKLQl9Ci0KLQkvKiBEbyBhY3R1YWwgdHJhbnNmZXIgZnJvbSBTQ1NJIGJ1cyB0byAvIGZyb20gbWVtb3J5ICovCi0JaWYgKCEocCAmIFNSX0lPKSkgCi0JICAgIE5DUjUzODBfd3JpdGUoT1VUUFVUX0RBVEFfUkVHLCAqZCk7Ci0JZWxzZSAKLQkgICAgKmQgPSBOQ1I1MzgwX3JlYWQoQ1VSUkVOVF9TQ1NJX0RBVEFfUkVHKTsKLQotCSsrZDsKLQotCS8qIAotCSAqIFRoZSBTQ1NJIHN0YW5kYXJkIHN1Z2dlc3RzIHRoYXQgaW4gTVNHT1VUIHBoYXNlLCB0aGUgaW5pdGlhdG9yCi0JICogc2hvdWxkIGRyb3AgQVROIG9uIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIG1lc3NhZ2UgcGhhc2UKLQkgKiBhZnRlciBSRVEgaGFzIGJlZW4gYXNzZXJ0ZWQgZm9yIHRoZSBoYW5kc2hha2UgYnV0IGJlZm9yZQotCSAqIHRoZSBpbml0aWF0b3IgcmFpc2VzIEFDSy4KLQkgKi8KLQotCWlmICghKHAgJiBTUl9JTykpIHsKLQkgICAgaWYgKCEoKHAgJiBTUl9NU0cpICYmIGMgPiAxKSkgewotCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCAKLQkJICAgIElDUl9BU1NFUlRfREFUQSk7Ci0JCU5DUjUzODBfZHByaW50KE5ERUJVR19QSU8sIGluc3RhbmNlKTsKLQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgCi0JCQlJQ1JfQVNTRVJUX0RBVEEgfCBJQ1JfQVNTRVJUX0FDSyk7Ci0JICAgIH0gZWxzZSB7Ci0JCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8Ci0JCSAgICBJQ1JfQVNTRVJUX0RBVEEgfCBJQ1JfQVNTRVJUX0FUTik7Ci0JCU5DUjUzODBfZHByaW50KE5ERUJVR19QSU8sIGluc3RhbmNlKTsKLQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgCi0JCSAgICBJQ1JfQVNTRVJUX0RBVEEgfCBJQ1JfQVNTRVJUX0FUTiB8IElDUl9BU1NFUlRfQUNLKTsKLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIE5DUjUzODBfZHByaW50KE5ERUJVR19QSU8sIGluc3RhbmNlKTsKLQkgICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9BQ0spOwotCX0KLQotCXdoaWxlIChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9SRVEpOwotCi0JZHByaW50ayhOREVCVUdfSEFORFNIQUtFLCAic2NzaSVkOiByZXEgZmFsc2UsIGhhbmRzaGFrZSBjb21wbGV0ZVxuIiwgSE9TVE5PKTsKLQotLyoKLSAqIFdlIGhhdmUgc2V2ZXJhbCBzcGVjaWFsIGNhc2VzIHRvIGNvbnNpZGVyIGR1cmluZyBSRVEvQUNLIGhhbmRzaGFraW5nIDogCi0gKiAxLiAgV2Ugd2VyZSBpbiBNU0dPVVQgcGhhc2UsIGFuZCB3ZSBhcmUgb24gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgCi0gKgltZXNzYWdlLiAgQVROIG11c3QgYmUgZHJvcHBlZCBhcyBBQ0sgaXMgZHJvcHBlZC4KLSAqCi0gKiAyLiAgV2UgYXJlIGluIGEgTVNHSU4gcGhhc2UsIGFuZCB3ZSBhcmUgb24gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgIAotICoJbWVzc2FnZS4gIFdlIG11c3QgZXhpdCB3aXRoIEFDSyBhc3NlcnRlZCwgc28gdGhhdCB0aGUgY2FsbGluZwotICoJY29kZSBtYXkgcmFpc2UgQVROIGJlZm9yZSBkcm9wcGluZyBBQ0sgdG8gcmVqZWN0IHRoZSBtZXNzYWdlLgotICoKLSAqIDMuICBBQ0sgYW5kIEFUTiBhcmUgY2xlYXIgYW5kIHRoZSB0YXJnZXQgbWF5IHByb2NlZWQgYXMgbm9ybWFsLgotICovCi0JaWYgKCEocCA9PSBQSEFTRV9NU0dJTiAmJiBjID09IDEpKSB7ICAKLQkgICAgaWYgKHAgPT0gUEhBU0VfTVNHT1VUICYmIGMgPiAxKQotCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FUTik7Ci0JICAgIGVsc2UKLQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQl9IAotICAgIH0gd2hpbGUgKC0tYyk7Ci0KLSAgICBkcHJpbnRrKE5ERUJVR19QSU8sICJzY3NpJWQ6IHJlc2lkdWFsICVkXG4iLCBIT1NUTk8sIGMpOwotCi0gICAgKmNvdW50ID0gYzsKLSAgICAqZGF0YSA9IGQ7Ci0gICAgdG1wID0gTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpOwotICAgIC8qIFRoZSBwaGFzZSByZWFkIGZyb20gdGhlIGJ1cyBpcyB2YWxpZCBpZiBlaXRoZXIgUkVRIGlzIChhbHJlYWR5KQotICAgICAqIGFzc2VydGVkIG9yIGlmIEFDSyBoYXNuJ3QgYmVlbiByZWxlYXNlZCB5ZXQuIFRoZSBsYXR0ZXIgaXMgdGhlIGNhc2UgaWYKLSAgICAgKiB3ZSdyZSBpbiBNU0dJTiBhbmQgYWxsIHdhbnRlZCBieXRlcyBoYXZlIGJlZW4gcmVjZWl2ZWQuICovCi0gICAgaWYgKCh0bXAgJiBTUl9SRVEpIHx8IChwID09IFBIQVNFX01TR0lOICYmIGMgPT0gMCkpCi0JKnBoYXNlID0gdG1wICYgUEhBU0VfTUFTSzsKLSAgICBlbHNlIAotCSpwaGFzZSA9IFBIQVNFX1VOS05PV047Ci0KLSAgICBpZiAoIWMgfHwgKCpwaGFzZSA9PSBwKSkKLQlyZXR1cm4gMDsKLSAgICBlbHNlIAotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uIDogZG9fYWJvcnQgKFNjc2lfSG9zdCAqaG9zdCkKLSAqIAotICogUHVycG9zZSA6IGFib3J0IHRoZSBjdXJyZW50bHkgZXN0YWJsaXNoZWQgbmV4dXMuICBTaG91bGQgb25seSBiZSAKLSAqIAljYWxsZWQgZnJvbSBhIHJvdXRpbmUgd2hpY2ggY2FuIGRyb3AgaW50byBhIAotICogCi0gKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgotICovCi0KLXN0YXRpYyBpbnQgZG9fYWJvcnQgKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpIAotewotICAgIHVuc2lnbmVkIGNoYXIgdG1wLCAqbXNncHRyLCBwaGFzZTsKLSAgICBpbnQgbGVuOwotCi0gICAgLyogUmVxdWVzdCBtZXNzYWdlIG91dCBwaGFzZSAqLwotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IElDUl9BU1NFUlRfQVROKTsKLQotICAgIC8qIAotICAgICAqIFdhaXQgZm9yIHRoZSB0YXJnZXQgdG8gaW5kaWNhdGUgYSB2YWxpZCBwaGFzZSBieSBhc3NlcnRpbmcgCi0gICAgICogUkVRLiAgT25jZSB0aGlzIGhhcHBlbnMsIHdlJ2xsIGhhdmUgZWl0aGVyIGEgTVNHT1VUIHBoYXNlIAotICAgICAqIGFuZCBjYW4gaW1tZWRpYXRlbHkgc2VuZCB0aGUgQUJPUlQgbWVzc2FnZSwgb3Igd2UnbGwgaGF2ZSBzb21lIAotICAgICAqIG90aGVyIHBoYXNlIGFuZCB3aWxsIGhhdmUgdG8gc291cmNlL3NpbmsgZGF0YS4KLSAgICAgKiAKLSAgICAgKiBXZSByZWFsbHkgZG9uJ3QgY2FyZSB3aGF0IHZhbHVlIHdhcyBvbiB0aGUgYnVzIG9yIHdoYXQgdmFsdWUKLSAgICAgKiB0aGUgdGFyZ2V0IHNlZXMsIHNvIHdlIGp1c3QgaGFuZHNoYWtlLgotICAgICAqLwotICAgIAotICAgIHdoaWxlICghKCh0bXAgPSBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpICYgU1JfUkVRKSk7Ci0KLSAgICBOQ1I1MzgwX3dyaXRlKFRBUkdFVF9DT01NQU5EX1JFRywgUEhBU0VfU1JfVE9fVENSKHRtcCkpOwotCi0gICAgaWYgKCh0bXAgJiBQSEFTRV9NQVNLKSAhPSBQSEFTRV9NU0dPVVQpIHsKLQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FUTiB8IAotCQkgICAgICBJQ1JfQVNTRVJUX0FDSyk7Ci0Jd2hpbGUgKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX1JFUSk7Ci0JTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9BVE4pOwotICAgIH0KLSAgIAotICAgIHRtcCA9IEFCT1JUOwotICAgIG1zZ3B0ciA9ICZ0bXA7Ci0gICAgbGVuID0gMTsKLSAgICBwaGFzZSA9IFBIQVNFX01TR09VVDsKLSAgICBOQ1I1MzgwX3RyYW5zZmVyX3BpbyAoaG9zdCwgJnBoYXNlLCAmbGVuLCAmbXNncHRyKTsKLQotICAgIC8qCi0gICAgICogSWYgd2UgZ290IGhlcmUsIGFuZCB0aGUgY29tbWFuZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LAotICAgICAqIHdlJ3JlIGFib3V0IHRvIGdvIGludG8gYnVzIGZyZWUgc3RhdGUuCi0gICAgICovCi0KLSAgICByZXR1cm4gbGVuID8gLTEgOiAwOwotfQotCi0jaWYgZGVmaW5lZChSRUFMX0RNQSkKLS8qIAotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF90cmFuc2Zlcl9kbWEgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCAKLSAqICAgICAgdW5zaWduZWQgY2hhciAqcGhhc2UsIGludCAqY291bnQsIHVuc2lnbmVkIGNoYXIgKipkYXRhKQotICoKLSAqIFB1cnBvc2UgOiB0cmFuc2ZlcnMgZGF0YSBpbiBnaXZlbiBwaGFzZSB1c2luZyBlaXRoZXIgcmVhbAotICoJb3IgcHNldWRvIERNQS4KLSAqCi0gKiBJbnB1dHMgOiBpbnN0YW5jZSAtIGluc3RhbmNlIG9mIGRyaXZlciwgKnBoYXNlIC0gcG9pbnRlciB0byAKLSAqCXdoYXQgcGhhc2UgaXMgZXhwZWN0ZWQsICpjb3VudCAtIHBvaW50ZXIgdG8gbnVtYmVyIG9mIAotICoJYnl0ZXMgdG8gdHJhbnNmZXIsICoqZGF0YSAtIHBvaW50ZXIgdG8gZGF0YSBwb2ludGVyLgotICogCi0gKiBSZXR1cm5zIDogLTEgd2hlbiBkaWZmZXJlbnQgcGhhc2UgaXMgZW50ZXJlZCB3aXRob3V0IHRyYW5zZmVycmluZwotICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIG9yIHRyYW5zZmVycmVkIG9yIGV4aXQKLSAqCWlzIGluIHNhbWUgcGhhc2UuCi0gKgotICogCUFsc28sICpwaGFzZSwgKmNvdW50LCAqZGF0YSBhcmUgbW9kaWZpZWQgaW4gcGxhY2UuCi0gKgotICovCi0KLQotc3RhdGljIGludCBOQ1I1MzgwX3RyYW5zZmVyX2RtYSggc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIAotCQkJCSB1bnNpZ25lZCBjaGFyICpwaGFzZSwgaW50ICpjb3VudCwKLQkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEpCi17Ci0gICAgU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotICAgIHJlZ2lzdGVyIGludCBjID0gKmNvdW50OwotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgcCA9ICpwaGFzZTsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgLyogc2FuaXR5IGNoZWNrICovCi0gICAgaWYoIXN1bjNfZG1hX3NldHVwX2RvbmUpIHsKLQkgcHJpbnRrKCJzY3NpJWQ6IHRyYW5zZmVyX2RtYSB3aXRob3V0IHNldHVwIVxuIiwgSE9TVE5PKTsKLQkgQlVHKCk7Ci0gICAgfQotICAgIGhvc3RkYXRhLT5kbWFfbGVuID0gYzsKLQotICAgIGRwcmludGsoTkRFQlVHX0RNQSwgInNjc2klZDogaW5pdGlhbGl6aW5nIERNQSBmb3IgJXMsICVkIGJ5dGVzICVzICVwXG4iLAotCSAgICAgICBIT1NUTk8sIChwICYgU1JfSU8pID8gInJlYWRpbmciIDogIndyaXRpbmciLAotCSAgICAgICBjLCAocCAmIFNSX0lPKSA/ICJ0byIgOiAiZnJvbSIsICpkYXRhKTsKLQotICAgIC8qIG5ldGJzZCB0dXJucyBvZmYgaW50cyBoZXJlLCB3aHkgbm90IGJlIHNhZmUgYW5kIGRvIGl0IHRvbyAqLwotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICAKLSAgICAvKiBzZW5kIHN0YXJ0IGNoYWluICovCi0gICAgc3VuM3Njc2lfZG1hX3N0YXJ0KGMsICpkYXRhKTsKLSAgICAKLSAgICBpZiAocCAmIFNSX0lPKSB7Ci0JICAgIE5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCAxKTsKLQkgICAgTkNSNTM4MF9yZWFkKFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHKTsKLQkgICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIDApOwotCSAgICBOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCAoTkNSNTM4MF9yZWFkKE1PREVfUkVHKSB8IE1SX0RNQV9NT0RFIHwgTVJfRU5BQkxFX0VPUF9JTlRSKSk7Ci0JICAgIE5DUjUzODBfd3JpdGUoU1RBUlRfRE1BX0lOSVRJQVRPUl9SRUNFSVZFX1JFRywgMCk7Ci0gICAgfSBlbHNlIHsKLQkgICAgTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIDApOwotCSAgICBOQ1I1MzgwX3JlYWQoUkVTRVRfUEFSSVRZX0lOVEVSUlVQVF9SRUcpOwotCSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0FTU0VSVF9EQVRBKTsKLQkgICAgTkNSNTM4MF93cml0ZShNT0RFX1JFRywgKE5DUjUzODBfcmVhZChNT0RFX1JFRykgfCBNUl9ETUFfTU9ERSB8IE1SX0VOQUJMRV9FT1BfSU5UUikpOwotCSAgICBOQ1I1MzgwX3dyaXRlKFNUQVJUX0RNQV9TRU5EX1JFRywgMCk7Ci0gICAgfQotCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotICAgIGRyZWdzLT5jc3IgfD0gQ1NSX0RNQV9FTkFCTEU7Ci0jZW5kaWYKLQotICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotICAgIHN1bjNfZG1hX2FjdGl2ZSA9IDE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChSRUFMX0RNQSkgKi8KLQotLyoKLSAqIEZ1bmN0aW9uIDogTkNSNTM4MF9pbmZvcm1hdGlvbl90cmFuc2ZlciAoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCi0gKgotICogUHVycG9zZSA6IHJ1biB0aHJvdWdoIHRoZSB2YXJpb3VzIFNDU0kgcGhhc2VzIGFuZCBkbyBhcyB0aGUgdGFyZ2V0IAotICogCWRpcmVjdHMgdXMgdG8uICBPcGVyYXRlcyBvbiB0aGUgY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kLCAKLSAqCWluc3RhbmNlLT5jb25uZWN0ZWQuCi0gKgotICogSW5wdXRzIDogaW5zdGFuY2UsIGluc3RhbmNlIGZvciB3aGljaCB3ZSBhcmUgZG9pbmcgY29tbWFuZHMKLSAqCi0gKiBTaWRlIGVmZmVjdHMgOiBTQ1NJIHRoaW5ncyBoYXBwZW4sIHRoZSBkaXNjb25uZWN0ZWQgcXVldWUgd2lsbCBiZSAKLSAqCW1vZGlmaWVkIGlmIGEgY29tbWFuZCBkaXNjb25uZWN0cywgKmluc3RhbmNlLT5jb25uZWN0ZWQgd2lsbAotICoJY2hhbmdlLgotICoKLSAqIFhYWCBOb3RlIDogd2UgbmVlZCB0byB3YXRjaCBmb3IgYnVzIGZyZWUgb3IgYSByZXNldCBjb25kaXRpb24gaGVyZSAKLSAqIAl0byByZWNvdmVyIGZyb20gYW4gdW5leHBlY3RlZCBidXMgZnJlZSBjb25kaXRpb24uCi0gKi8KLSAKLXN0YXRpYyB2b2lkIE5DUjUzODBfaW5mb3JtYXRpb25fdHJhbnNmZXIgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotewotICAgIFNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgIHVuc2lnbmVkIGNoYXIgbXNnb3V0ID0gTk9QOwotICAgIGludCBzaW5rID0gMDsKLSAgICBpbnQgbGVuOwotI2lmIGRlZmluZWQoUkVBTF9ETUEpCi0gICAgaW50IHRyYW5zZmVyc2l6ZTsKLSNlbmRpZgotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgdW5zaWduZWQgY2hhciBwaGFzZSwgdG1wLCBleHRlbmRlZF9tc2dbMTBdLCBvbGRfcGhhc2U9MHhmZjsKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+Y29ubmVjdGVkOwotCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotICAgIGRyZWdzLT5jc3IgfD0gQ1NSX0lOVFI7Ci0jZW5kaWYKLQotICAgIHdoaWxlICgxKSB7Ci0JdG1wID0gTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpOwotCS8qIFdlIG9ubHkgaGF2ZSBhIHZhbGlkIFNDU0kgcGhhc2Ugd2hlbiBSRVEgaXMgYXNzZXJ0ZWQgKi8KLQlpZiAodG1wICYgU1JfUkVRKSB7Ci0JICAgIHBoYXNlID0gKHRtcCAmIFBIQVNFX01BU0spOyAKLSAJICAgIGlmIChwaGFzZSAhPSBvbGRfcGhhc2UpIHsKLQkJb2xkX3BoYXNlID0gcGhhc2U7Ci0JCU5DUjUzODBfZHByaW50X3BoYXNlKE5ERUJVR19JTkZPUk1BVElPTiwgaW5zdGFuY2UpOwotCSAgICB9Ci0KLQkgICAgaWYocGhhc2UgPT0gUEhBU0VfQ01ET1VUKSB7Ci0JCSAgICB2b2lkICpkOwotCQkgICAgdW5zaWduZWQgbG9uZyBjb3VudDsKLQotCQlpZiAoIWNtZC0+U0NwLnRoaXNfcmVzaWR1YWwgJiYgY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCkgewotCQkJY291bnQgPSBjbWQtPlNDcC5idWZmZXItPmxlbmd0aDsKLQkJCWQgPSBTR0FERFIoY21kLT5TQ3AuYnVmZmVyKTsKLQkJfSBlbHNlIHsKLQkJCWNvdW50ID0gY21kLT5TQ3AudGhpc19yZXNpZHVhbDsKLQkJCWQgPSBjbWQtPlNDcC5wdHI7Ci0JCX0KLSNpZmRlZiBSRUFMX0RNQQotCQkvKiB0aGlzIGNvbW1hbmQgc2V0dXAgZm9yIGRtYSB5ZXQ/ICovCi0JCWlmKChjb3VudCA+IFNVTjNfRE1BX01JTlNJWkUpICYmIChzdW4zX2RtYV9zZXR1cF9kb25lCi0JCQkJCQkgICE9IGNtZCkpCi0JCXsKLQkJCWlmIChjbWQtPnJlcXVlc3QtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKSB7Ci0JCQkJc3VuM3Njc2lfZG1hX3NldHVwKGQsIGNvdW50LAotCQkJCQkJICAgcnFfZGF0YV9kaXIoY21kLT5yZXF1ZXN0KSk7Ci0JCQkJc3VuM19kbWFfc2V0dXBfZG9uZSA9IGNtZDsKLQkJCX0KLQkJfQotI2VuZGlmCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCQlkcmVncy0+Y3NyIHw9IENTUl9JTlRSOwotI2VuZGlmCi0JICAgIH0KLQotCSAgICAKLQkgICAgaWYgKHNpbmsgJiYgKHBoYXNlICE9IFBIQVNFX01TR09VVCkpIHsKLQkJTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIFBIQVNFX1NSX1RPX1RDUih0bXApKTsKLQotCQlOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FUTiB8IAotCQkgICAgSUNSX0FTU0VSVF9BQ0spOwotCQl3aGlsZSAoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKTsKLQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgCi0JCSAgICBJQ1JfQVNTRVJUX0FUTik7Ci0JCXNpbmsgPSAwOwotCQljb250aW51ZTsKLQkgICAgfQotCi0JICAgIHN3aXRjaCAocGhhc2UpIHsKLQkgICAgY2FzZSBQSEFTRV9EQVRBT1VUOgotI2lmIChOREVCVUcgJiBOREVCVUdfTk9fREFUQU9VVCkKLQkJcHJpbnRrKCJzY3NpJWQ6IE5ERUJVR19OT19EQVRBT1VUIHNldCwgYXR0ZW1wdGVkIERBVEFPVVQgIgotCQkgICAgICAgImFib3J0ZWRcbiIsIEhPU1ROTyk7Ci0JCXNpbmsgPSAxOwotCQlkb19hYm9ydChpbnN0YW5jZSk7Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SICA8PCAxNjsKLQkJY21kLT5zY3NpX2RvbmUoY21kKTsKLQkJcmV0dXJuOwotI2VuZGlmCi0JICAgIGNhc2UgUEhBU0VfREFUQUlOOgotCQkvKiAKLQkJICogSWYgdGhlcmUgaXMgbm8gcm9vbSBsZWZ0IGluIHRoZSBjdXJyZW50IGJ1ZmZlciBpbiB0aGUKLQkJICogc2NhdHRlci1nYXRoZXIgbGlzdCwgbW92ZSBvbnRvIHRoZSBuZXh0IG9uZS4KLQkJICovCi0JCWlmICghY21kLT5TQ3AudGhpc19yZXNpZHVhbCAmJiBjbWQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsKSB7Ci0JCSAgICArK2NtZC0+U0NwLmJ1ZmZlcjsKLQkJICAgIC0tY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbDsKLQkJICAgIGNtZC0+U0NwLnRoaXNfcmVzaWR1YWwgPSBjbWQtPlNDcC5idWZmZXItPmxlbmd0aDsKLQkJICAgIGNtZC0+U0NwLnB0ciA9IFNHQUREUihjbWQtPlNDcC5idWZmZXIpOwotCQkgICAgZHByaW50ayhOREVCVUdfSU5GT1JNQVRJT04sICJzY3NpJWQ6ICVkIGJ5dGVzIGFuZCAlZCBidWZmZXJzIGxlZnRcbiIsCi0JCQkgICAgICAgSE9TVE5PLCBjbWQtPlNDcC50aGlzX3Jlc2lkdWFsLAotCQkJICAgICAgIGNtZC0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwpOwotCQl9Ci0KLQkJLyoKLQkJICogVGhlIHByZWZlcnJlZCB0cmFuc2ZlciBtZXRob2QgaXMgZ29pbmcgdG8gYmUgCi0JCSAqIFBTRVVETy1ETUEgZm9yIHN5c3RlbXMgdGhhdCBhcmUgc3RyaWN0bHkgUElPLAotCQkgKiBzaW5jZSB3ZSBjYW4gbGV0IHRoZSBoYXJkd2FyZSBkbyB0aGUgaGFuZHNoYWtpbmcuCi0JCSAqCi0JCSAqIEZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8ga25vdyB0aGUgdHJhbnNmZXJzaXplCi0JCSAqIGFoZWFkIG9mIHRpbWUsIHNpbmNlIHRoZSBwc2V1ZG8tRE1BIGNvZGUgd2lsbCBzaXQKLQkJICogaW4gYW4gdW5jb25kaXRpb25hbCBsb29wLgotCQkgKi8KLQotLyogKytyb21hbjogSSBzdWdnZXN0LCB0aGlzIHNob3VsZCBiZQotICogICAjaWYgZGVmKFJFQUxfRE1BKQotICogaW5zdGVhZCBvZiBsZWF2aW5nIFJFQUxfRE1BIG91dC4KLSAqLwotCi0jaWYgZGVmaW5lZChSRUFMX0RNQSkKLS8vCQlpZiAoIWNtZC0+ZGV2aWNlLT5ib3JrZW4gJiYKLQkJaWYoKHRyYW5zZmVyc2l6ZSA9Ci0JCSAgICBOQ1I1MzgwX2RtYV94ZmVyX2xlbihpbnN0YW5jZSxjbWQscGhhc2UpKSA+IFNVTjNfRE1BX01JTlNJWkUpIHsKLQkJICAgIGxlbiA9IHRyYW5zZmVyc2l6ZTsKLQkJICAgIGNtZC0+U0NwLnBoYXNlID0gcGhhc2U7Ci0KLQkJICAgIGlmIChOQ1I1MzgwX3RyYW5zZmVyX2RtYShpbnN0YW5jZSwgJnBoYXNlLAotCQkJJmxlbiwgKHVuc2lnbmVkIGNoYXIgKiopICZjbWQtPlNDcC5wdHIpKSB7Ci0JCQkvKgotCQkJICogSWYgdGhlIHdhdGNoZG9nIHRpbWVyIGZpcmVzLCBhbGwgZnV0dXJlCi0JCQkgKiBhY2Nlc3NlcyB0byB0aGlzIGRldmljZSB3aWxsIHVzZSB0aGUKLQkJCSAqIHBvbGxlZC1JTy4gKi8gCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogc3dpdGNoaW5nIHRhcmdldCAlZCAiCi0JCQkgICAgICAgImx1biAlbGx1IHRvIHNsb3cgaGFuZHNoYWtlXG4iLCBIT1NUTk8sCi0JCQkgICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQkJCWNtZC0+ZGV2aWNlLT5ib3JrZW4gPSAxOwotCQkJTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgCi0JCQkgICAgSUNSX0FTU0VSVF9BVE4pOwotCQkJc2luayA9IDE7Ci0JCQlkb19hYm9ydChpbnN0YW5jZSk7Ci0JCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiAgPDwgMTY7Ci0JCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCQkJLyogWFhYIC0gbmVlZCB0byBzb3VyY2Ugb3Igc2luayBkYXRhIGhlcmUsIGFzIGFwcHJvcHJpYXRlICovCi0JCSAgICB9IGVsc2UgewotI2lmZGVmIFJFQUxfRE1BCi0JCQkvKiArK3JvbWFuOiBXaGVuIHVzaW5nIHJlYWwgRE1BLAotCQkJICogaW5mb3JtYXRpb25fdHJhbnNmZXIoKSBzaG91bGQgcmV0dXJuIGFmdGVyCi0JCQkgKiBzdGFydGluZyBETUEgc2luY2UgaXQgaGFzIG5vdGhpbmcgbW9yZSB0bwotCQkJICogZG8uCi0JCQkgKi8KLQkJCQkgICAgcmV0dXJuOwotI2Vsc2UJCQkKLQkJCWNtZC0+U0NwLnRoaXNfcmVzaWR1YWwgLT0gdHJhbnNmZXJzaXplIC0gbGVuOwotI2VuZGlmCi0JCSAgICB9Ci0JCX0gZWxzZSAKLSNlbmRpZiAvKiBkZWZpbmVkKFJFQUxfRE1BKSAqLwotCQkgIE5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsIAotCQkgICAgKGludCAqKSAmY21kLT5TQ3AudGhpc19yZXNpZHVhbCwgKHVuc2lnbmVkIGNoYXIgKiopCi0JCSAgICAmY21kLT5TQ3AucHRyKTsKLSNpZmRlZiBSRUFMX0RNQQotCQkvKiBpZiB3ZSBoYWQgaW50ZW5kZWQgdG8gZG1hIHRoYXQgY29tbWFuZCBjbGVhciBpdCAqLwotCQlpZihzdW4zX2RtYV9zZXR1cF9kb25lID09IGNtZCkKLQkJCXN1bjNfZG1hX3NldHVwX2RvbmUgPSBOVUxMOwotI2VuZGlmCi0KLQkJYnJlYWs7Ci0JICAgIGNhc2UgUEhBU0VfTVNHSU46Ci0JCWxlbiA9IDE7Ci0JCWRhdGEgPSAmdG1wOwotCQlOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCAwKTsgCS8qIGRpc2FibGUgcmVzZWxlY3RzICovCi0JCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLQkJY21kLT5TQ3AuTWVzc2FnZSA9IHRtcDsKLQkJCi0JCXN3aXRjaCAodG1wKSB7Ci0JCS8qCi0JCSAqIExpbmtpbmcgbGV0cyB1cyByZWR1Y2UgdGhlIHRpbWUgcmVxdWlyZWQgdG8gZ2V0IHRoZSAKLQkJICogbmV4dCBjb21tYW5kIG91dCB0byB0aGUgZGV2aWNlLCBob3BlZnVsbHkgdGhpcyB3aWxsCi0JCSAqIG1lYW4gd2UgZG9uJ3Qgd2FzdGUgYW5vdGhlciByZXZvbHV0aW9uIGR1ZSB0byB0aGUgZGVsYXlzCi0JCSAqIHJlcXVpcmVkIGJ5IEFSQklUUkFUSU9OIGFuZCBhbm90aGVyIFNFTEVDVElPTi4KLQkJICoKLQkJICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcHJvcG9zYWwsIGxvdyBsZXZlbCBkcml2ZXJzCi0JCSAqIG1lcmVseSBoYXZlIHRvIHN0YXJ0IHRoZSBuZXh0IGNvbW1hbmQsIHBvaW50ZWQgdG8gYnkgCi0JCSAqIG5leHRfbGluaywgZG9uZSgpIGlzIGNhbGxlZCBhcyB3aXRoIHVubGlua2VkIGNvbW1hbmRzLgotCQkgKi8KLSNpZmRlZiBMSU5LRUQKLQkJY2FzZSBMSU5LRURfQ01EX0NPTVBMRVRFOgotCQljYXNlIExJTktFRF9GTEdfQ01EX0NPTVBMRVRFOgotCQkgICAgLyogQWNjZXB0IG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCi0JCSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCQkgICAgCi0JCSAgICBkcHJpbnRrKE5ERUJVR19MSU5LRUQsICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWxsdSBsaW5rZWQgY29tbWFuZCAiCi0JCQkgICAgICAgImNvbXBsZXRlLlxuIiwgSE9TVE5PLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCi0JCSAgICAvKiBFbmFibGUgcmVzZWxlY3QgaW50ZXJydXB0cyAqLwotCQkgICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkgICAgLyoKLQkJICAgICAqIFNhbml0eSBjaGVjayA6IEEgbGlua2VkIGNvbW1hbmQgc2hvdWxkIG9ubHkgdGVybWluYXRlCi0JCSAgICAgKiB3aXRoIG9uZSBvZiB0aGVzZSBtZXNzYWdlcyBpZiB0aGVyZSBhcmUgbW9yZSBsaW5rZWQKLQkJICAgICAqIGNvbW1hbmRzIGF2YWlsYWJsZS4KLQkJICAgICAqLwotCi0JCSAgICBpZiAoIWNtZC0+bmV4dF9saW5rKSB7Ci0JCQkgcHJpbnRrKEtFUk5fTk9USUNFICJzY3NpJWQ6IHRhcmdldCAlZCBsdW4gJWxsdSAiCi0JCQkJImxpbmtlZCBjb21tYW5kIGNvbXBsZXRlLCBubyBuZXh0X2xpbmtcbiIsCi0JCQkJSE9TVE5PLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCQkJICAgIHNpbmsgPSAxOwotCQkJICAgIGRvX2Fib3J0IChpbnN0YW5jZSk7Ci0JCQkgICAgcmV0dXJuOwotCQkgICAgfQotCi0JCSAgICBpbml0aWFsaXplX1NDcChjbWQtPm5leHRfbGluayk7Ci0JCSAgICAvKiBUaGUgbmV4dCBjb21tYW5kIGlzIHN0aWxsIHBhcnQgb2YgdGhpcyBwcm9jZXNzOyBjb3B5IGl0Ci0JCSAgICAgKiBhbmQgZG9uJ3QgZnJlZSBpdCEgKi8KLQkJICAgIGNtZC0+bmV4dF9saW5rLT50YWcgPSBjbWQtPnRhZzsKLQkJICAgIGNtZC0+cmVzdWx0ID0gY21kLT5TQ3AuU3RhdHVzIHwgKGNtZC0+U0NwLk1lc3NhZ2UgPDwgOCk7IAotCQkgICAgZHByaW50ayhOREVCVUdfTElOS0VELCAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVsbHUgbGlua2VkIHJlcXVlc3QgIgotCQkJICAgICAgICJkb25lLCBjYWxsaW5nIHNjc2lfZG9uZSgpLlxuIiwKLQkJCSAgICAgICBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0jaWZkZWYgTkNSNTM4MF9TVEFUUwotCQkgICAgY29sbGVjdF9zdGF0cyhob3N0ZGF0YSwgY21kKTsKLSNlbmRpZgotCQkgICAgY21kLT5zY3NpX2RvbmUoY21kKTsKLQkJICAgIGNtZCA9IGhvc3RkYXRhLT5jb25uZWN0ZWQ7Ci0JCSAgICBicmVhazsKLSNlbmRpZiAvKiBkZWYgTElOS0VEICovCi0JCWNhc2UgQUJPUlQ6Ci0JCWNhc2UgQ09NTUFORF9DT01QTEVURTogCi0JCSAgICAvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JCSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLQkJICAgIGRwcmludGsoTkRFQlVHX1FVRVVFUywgInNjc2klZDogY29tbWFuZCBmb3IgdGFyZ2V0ICVkLCBsdW4gJWxsdSAiCi0JCQkgICAgICAiY29tcGxldGVkXG4iLCBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JCSAgICBjbWRfZnJlZV90YWcoIGNtZCApOwotCQkgICAgaWYgKHN0YXR1c19ieXRlKGNtZC0+U0NwLlN0YXR1cykgPT0gUVVFVUVfRlVMTCkgewotCQkJLyogVHVybiBhIFFVRVVFIEZVTEwgc3RhdHVzIGludG8gQlVTWSwgSSB0aGluayB0aGUKLQkJCSAqIG1pZCBsZXZlbCBjYW5ub3QgaGFuZGxlIFFVRVVFIEZVTEwgOi0oIChUaGUKLQkJCSAqIGNvbW1hbmQgaXMgcmV0cmllZCBhZnRlciBCVVNZKS4gQWxzbyB1cGRhdGUgb3VyCi0JCQkgKiBxdWV1ZSBzaXplIHRvIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGlzc3VlZAotCQkJICogY29tbWFuZHMgbm93LgotCQkJICovCi0JCQkvKiArK0FuZHJlYXM6IHRoZSBtaWQgbGV2ZWwgY29kZSBrbm93cyBhYm91dAotCQkJICAgUVVFVUVfRlVMTCBub3cuICovCi0JCQlUQUdfQUxMT0MgKnRhID0gJlRhZ0FsbG9jW2NtZC0+ZGV2aWNlLT5pZF1bY21kLT5kZXZpY2UtPmx1bl07Ci0JCQlkcHJpbnRrKE5ERUJVR19UQUdTLCAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVsbHUgcmV0dXJuZWQgIgotCQkJCSAgICJRVUVVRV9GVUxMIGFmdGVyICVkIGNvbW1hbmRzXG4iLAotCQkJCSAgIEhPU1ROTywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLAotCQkJCSAgIHRhLT5ucl9hbGxvY2F0ZWQpOwotCQkJaWYgKHRhLT5xdWV1ZV9zaXplID4gdGEtPm5yX2FsbG9jYXRlZCkKLQkJCSAgICB0YS0+bnJfYWxsb2NhdGVkID0gdGEtPnF1ZXVlX3NpemU7Ci0JCSAgICB9Ci0jZWxzZQotCQkgICAgaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmPSB+KDEgPDwgY21kLT5kZXZpY2UtPmx1bik7Ci0jZW5kaWYKLQkJICAgIC8qIEVuYWJsZSByZXNlbGVjdCBpbnRlcnJ1cHRzICovCi0JCSAgICBOQ1I1MzgwX3dyaXRlKFNFTEVDVF9FTkFCTEVfUkVHLCBob3N0ZGF0YS0+aWRfbWFzayk7Ci0KLQkJICAgIC8qIAotCQkgICAgICogSSdtIG5vdCBzdXJlIHdoYXQgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaGVyZSBpcyA6IAotCQkgICAgICogCi0JCSAgICAgKiBJZiB0aGUgY29tbWFuZCB0aGF0IGp1c3QgZXhlY3V0ZWQgaXMgTk9UIGEgcmVxdWVzdCAKLQkJICAgICAqIHNlbnNlLCB0aGUgb2J2aW91cyB0aGluZyB0byBkbyBpcyB0byBzZXQgdGhlIHJlc3VsdAotCQkgICAgICogY29kZSB0byB0aGUgdmFsdWVzIG9mIHRoZSBzdG9yZWQgcGFyYW1ldGVycy4KLQkJICAgICAqIAotCQkgICAgICogSWYgaXQgd2FzIGEgUkVRVUVTVCBTRU5TRSBjb21tYW5kLCB3ZSBuZWVkIHNvbWUgd2F5IHRvCi0JCSAgICAgKiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIGZhaWx1cmUgY29kZSBvZiB0aGUgb3JpZ2luYWwKLQkJICAgICAqIGFuZCB0aGUgZmFpbHVyZSBjb2RlIG9mIHRoZSBSRVFVRVNUIHNlbnNlIC0gdGhlIG9idmlvdXMKLQkJICAgICAqIGNhc2UgaXMgc3VjY2Vzcywgd2hlcmUgd2UgZmFsbCB0aHJvdWdoIGFuZCBsZWF2ZSB0aGUKLQkJICAgICAqIHJlc3VsdCBjb2RlIHVuY2hhbmdlZC4KLQkJICAgICAqIAotCQkgICAgICogVGhlIG5vbi1vYnZpb3VzIHBsYWNlIGlzIHdoZXJlIHRoZSBSRVFVRVNUIFNFTlNFIGZhaWxlZAotCQkgICAgICovCi0KLQkJICAgIGlmIChjbWQtPmNtbmRbMF0gIT0gUkVRVUVTVF9TRU5TRSkgCi0JCQljbWQtPnJlc3VsdCA9IGNtZC0+U0NwLlN0YXR1cyB8IChjbWQtPlNDcC5NZXNzYWdlIDw8IDgpOyAKLQkJICAgIGVsc2UgaWYgKHN0YXR1c19ieXRlKGNtZC0+U0NwLlN0YXR1cykgIT0gR09PRCkKLQkJCWNtZC0+cmVzdWx0ID0gKGNtZC0+cmVzdWx0ICYgMHgwMGZmZmYpIHwgKERJRF9FUlJPUiA8PCAxNik7Ci0JCSAgICAKLSNpZmRlZiBBVVRPU0VOU0UKLQkJICAgIGlmICgoY21kLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpICYmCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBob3N0ZGF0YS0+c2VzLmNtZF9sZW4pIHsKLQkJCXNjc2lfZWhfcmVzdG9yZV9jbW5kKGNtZCwgJmhvc3RkYXRhLT5zZXMpOwotCQkJaG9zdGRhdGEtPnNlcy5jbWRfbGVuID0gMCA7Ci0JCSAgICB9Ci0KLQkJICAgIGlmICgoY21kLT5jbW5kWzBdICE9IFJFUVVFU1RfU0VOU0UpICYmIAotCQkJKHN0YXR1c19ieXRlKGNtZC0+U0NwLlN0YXR1cykgPT0gQ0hFQ0tfQ09ORElUSU9OKSkgewotCQkJc2NzaV9laF9wcmVwX2NtbmQoY21kLCAmaG9zdGRhdGEtPnNlcywgTlVMTCwgMCwgfjApOwotCQkJZHByaW50ayhOREVCVUdfQVVUT1NFTlNFLCAic2NzaSVkOiBwZXJmb3JtaW5nIHJlcXVlc3Qgc2Vuc2VcbiIsCi0JCQkJICAgIEhPU1ROTyk7Ci0JCQkvKiB0aGlzIGlzIGluaXRpYWxpemVkIGZyb20gaW5pdGlhbGl6ZV9TQ3AgCi0JCQljbWQtPlNDcC5idWZmZXIgPSBOVUxMOwotCQkJY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCA9IDA7Ci0JCQkqLwotCi0JCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlMSVNUKGNtZCxob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCQkJU0VUX05FWFQoY21kLCBob3N0ZGF0YS0+aXNzdWVfcXVldWUpOwotCQkgICAgICAgIGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNtZDsKLQkJICAgICAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQlkcHJpbnRrKE5ERUJVR19RVUVVRVMsICJzY3NpJWQ6IFJFUVVFU1QgU0VOU0UgYWRkZWQgdG8gaGVhZCBvZiAiCi0JCQkJICAiaXNzdWUgcXVldWVcbiIsIEhfTk8oY21kKSk7Ci0JCSAgIH0gZWxzZQotI2VuZGlmIC8qIGRlZiBBVVRPU0VOU0UgKi8KLQkJICAgewotI2lmZGVmIE5DUjUzODBfU1RBVFMKLQkJICAgICAgIGNvbGxlY3Rfc3RhdHMoaG9zdGRhdGEsIGNtZCk7Ci0jZW5kaWYKLQkJICAgICAgIGNtZC0+c2NzaV9kb25lKGNtZCk7Ci0JCSAgICB9Ci0KLQkJICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQkJICAgIC8qIAotCQkgICAgICogUmVzdG9yZSBwaGFzZSBiaXRzIHRvIDAgc28gYW4gaW50ZXJydXB0ZWQgc2VsZWN0aW9uLCAKLQkJICAgICAqIGFyYml0cmF0aW9uIGNhbiByZXN1bWUuCi0JCSAgICAgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCAwKTsKLQkJICAgIAotCQkgICAgd2hpbGUgKChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9CU1kpICYmICFob3N0ZGF0YS0+Y29ubmVjdGVkKQotCQkJYmFycmllcigpOwotCi0JCSAgICByZXR1cm47Ci0JCWNhc2UgTUVTU0FHRV9SRUpFQ1Q6Ci0JCSAgICAvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JCSAgICAvKiBFbmFibGUgcmVzZWxlY3QgaW50ZXJydXB0cyAqLwotCQkgICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkgICAgc3dpdGNoIChob3N0ZGF0YS0+bGFzdF9tZXNzYWdlKSB7Ci0JCSAgICBjYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgotCQkgICAgY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJICAgIGNhc2UgU0lNUExFX1FVRVVFX1RBRzoKLQkJCS8qIFRoZSB0YXJnZXQgb2J2aW91c2x5IGRvZXNuJ3Qgc3VwcG9ydCB0YWdnZWQKLQkJCSAqIHF1ZXVpbmcsIGV2ZW4gdGhvdWdoIGl0IGFubm91bmNlZCB0aGlzIGFiaWxpdHkgaW4KLQkJCSAqIGl0cyBJTlFVSVJZIGRhdGEgPyE/IChtYXliZSBvbmx5IHRoaXMgTFVOPykgT2ssCi0JCQkgKiBjbGVhciAndGFnZ2VkX3N1cHBvcnRlZCcgYW5kIGxvY2sgdGhlIExVTiwgc2luY2UKLQkJCSAqIHRoZSBjb21tYW5kIGlzIHRyZWF0ZWQgYXMgdW50YWdnZWQgZnVydGhlciBvbi4KLQkJCSAqLwotCQkJY21kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQgPSAwOwotCQkJaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSB8PSAoMSA8PCBjbWQtPmRldmljZS0+bHVuKTsKLQkJCWNtZC0+dGFnID0gVEFHX05PTkU7Ci0JCQlkcHJpbnRrKE5ERUJVR19UQUdTLCAic2NzaSVkOiB0YXJnZXQgJWQgbHVuICVsbHUgcmVqZWN0ZWQgIgotCQkJCSAgICJRVUVVRV9UQUcgbWVzc2FnZTsgdGFnZ2VkIHF1ZXVpbmcgIgotCQkJCSAgICJkaXNhYmxlZFxuIiwKLQkJCQkgICBIT1NUTk8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIGJyZWFrOwotCQljYXNlIERJU0NPTk5FQ1Q6Ci0JCSAgICAvKiBBY2NlcHQgbWVzc2FnZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JCSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCSAgICBjbWQtPmRldmljZS0+ZGlzY29ubmVjdCA9IDE7Ci0JCSAgICBMSVNUKGNtZCxob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKTsKLQkJICAgIFNFVF9ORVhUKGNtZCwgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSk7Ci0JCSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLQkJICAgIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBjbWQ7Ci0JCSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCSAgICBkcHJpbnRrKE5ERUJVR19RVUVVRVMsICJzY3NpJWQ6IGNvbW1hbmQgZm9yIHRhcmdldCAlZCBsdW4gJWxsdSB3YXMgIgotCQkJICAgICAgIm1vdmVkIGZyb20gY29ubmVjdGVkIHRvIHRoZSAiCi0JCQkgICAgICAiZGlzY29ubmVjdGVkX3F1ZXVlXG4iLCBIT1NUTk8sIAotCQkJICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLQkJICAgIC8qIAotCQkgICAgICogUmVzdG9yZSBwaGFzZSBiaXRzIHRvIDAgc28gYW4gaW50ZXJydXB0ZWQgc2VsZWN0aW9uLCAKLQkJICAgICAqIGFyYml0cmF0aW9uIGNhbiByZXN1bWUuCi0JCSAgICAgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoVEFSR0VUX0NPTU1BTkRfUkVHLCAwKTsKLQotCQkgICAgLyogRW5hYmxlIHJlc2VsZWN0IGludGVycnVwdHMgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQkJICAgIC8qIFdhaXQgZm9yIGJ1cyBmcmVlIHRvIGF2b2lkIG5hc3R5IHRpbWVvdXRzICovCi0JCSAgICB3aGlsZSAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIFNSX0JTWSkgJiYgIWhvc3RkYXRhLT5jb25uZWN0ZWQpCi0JCSAgICAJYmFycmllcigpOwotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQkJICAgIGRyZWdzLT5jc3IgfD0gQ1NSX0RNQV9FTkFCTEU7Ci0jZW5kaWYKLQkJICAgIHJldHVybjsKLQkJLyogCi0JCSAqIFRoZSBTQ1NJIGRhdGEgcG9pbnRlciBpcyAqSU1QTElDSVRMWSogc2F2ZWQgb24gYSBkaXNjb25uZWN0Ci0JCSAqIG9wZXJhdGlvbiwgaW4gdmlvbGF0aW9uIG9mIHRoZSBTQ1NJIHNwZWMgc28gd2UgY2FuIHNhZmVseSAKLQkJICogaWdub3JlIFNBVkUvUkVTVE9SRSBwb2ludGVycyBjYWxscy4KLQkJICoKLQkJICogVW5mb3J0dW5hdGVseSwgc29tZSBkaXNrcyB2aW9sYXRlIHRoZSBTQ1NJIHNwZWMgYW5kIAotCQkgKiBkb24ndCBpc3N1ZSB0aGUgcmVxdWlyZWQgU0FWRV9QT0lOVEVSUyBtZXNzYWdlIGJlZm9yZQotCQkgKiBkaXNjb25uZWN0aW5nLCBhbmQgd2UgaGF2ZSB0byBicmVhayBzcGVjIHRvIHJlbWFpbiAKLQkJICogY29tcGF0aWJsZS4KLQkJICovCi0JCWNhc2UgU0FWRV9QT0lOVEVSUzoKLQkJY2FzZSBSRVNUT1JFX1BPSU5URVJTOgotCQkgICAgLyogQWNjZXB0IG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCi0JCSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UpOwotCQkgICAgLyogRW5hYmxlIHJlc2VsZWN0IGludGVycnVwdHMgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoU0VMRUNUX0VOQUJMRV9SRUcsIGhvc3RkYXRhLT5pZF9tYXNrKTsKLQkJICAgIGJyZWFrOwotCQljYXNlIEVYVEVOREVEX01FU1NBR0U6Ci0vKiAKLSAqIEV4dGVuZGVkIG1lc3NhZ2VzIGFyZSBzZW50IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0IDoKLSAqIEJ5dGUgCQotICogMAkJRVhURU5ERURfTUVTU0FHRSA9PSAxCi0gKiAxCQlsZW5ndGggKGluY2x1ZGVzIG9uZSBieXRlIGZvciBjb2RlLCBkb2Vzbid0IAotICoJCWluY2x1ZGUgZmlyc3QgdHdvIGJ5dGVzKQotICogMiAJCWNvZGUKLSAqIDMuLmxlbmd0aCsxCWFyZ3VtZW50cwotICoKLSAqIFN0YXJ0IHRoZSBleHRlbmRlZCBtZXNzYWdlIGJ1ZmZlciB3aXRoIHRoZSBFWFRFTkRFRF9NRVNTQUdFCi0gKiBieXRlLCBzaW5jZSBzcGlfcHJpbnRfbXNnKCkgd2FudHMgdGhlIHdob2xlIHRoaW5nLiAgCi0gKi8KLQkJICAgIGV4dGVuZGVkX21zZ1swXSA9IEVYVEVOREVEX01FU1NBR0U7Ci0JCSAgICAvKiBBY2NlcHQgZmlyc3QgYnl0ZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0KLQkJICAgIGRwcmludGsoTkRFQlVHX0VYVEVOREVELCAic2NzaSVkOiByZWNlaXZpbmcgZXh0ZW5kZWQgbWVzc2FnZVxuIiwgSE9TVE5PKTsKLQotCQkgICAgbGVuID0gMjsKLQkJICAgIGRhdGEgPSBleHRlbmRlZF9tc2cgKyAxOwotCQkgICAgcGhhc2UgPSBQSEFTRV9NU0dJTjsKLQkJICAgIE5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLQkJICAgIGRwcmludGsoTkRFQlVHX0VYVEVOREVELCAic2NzaSVkOiBsZW5ndGg9JWQsIGNvZGU9MHglMDJ4XG4iLCBIT1NUTk8sCi0JCQkgICAgICAgKGludClleHRlbmRlZF9tc2dbMV0sIChpbnQpZXh0ZW5kZWRfbXNnWzJdKTsKLQotCQkgICAgaWYgKCFsZW4gJiYgZXh0ZW5kZWRfbXNnWzFdIDw9IAotCQkJKHNpemVvZiAoZXh0ZW5kZWRfbXNnKSAtIDEpKSB7Ci0JCQkvKiBBY2NlcHQgdGhpcmQgYnl0ZSBieSBjbGVhcmluZyBBQ0sgKi8KLQkJCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0JCQlsZW4gPSBleHRlbmRlZF9tc2dbMV0gLSAxOwotCQkJZGF0YSA9IGV4dGVuZGVkX21zZyArIDM7Ci0JCQlwaGFzZSA9IFBIQVNFX01TR0lOOwotCi0JCQlOQ1I1MzgwX3RyYW5zZmVyX3BpbyhpbnN0YW5jZSwgJnBoYXNlLCAmbGVuLCAmZGF0YSk7Ci0JCQlkcHJpbnRrKE5ERUJVR19FWFRFTkRFRCwgInNjc2klZDogbWVzc2FnZSByZWNlaXZlZCwgcmVzaWR1YWwgJWRcbiIsCi0JCQkJICAgSE9TVE5PLCBsZW4pOwotCi0JCQlzd2l0Y2ggKGV4dGVuZGVkX21zZ1syXSkgewotCQkJY2FzZSBFWFRFTkRFRF9TRFRSOgotCQkJY2FzZSBFWFRFTkRFRF9XRFRSOgotCQkJY2FzZSBFWFRFTkRFRF9NT0RJRllfREFUQV9QT0lOVEVSOgotCQkJY2FzZSBFWFRFTkRFRF9FWFRFTkRFRF9JREVOVElGWToKLQkJCSAgICB0bXAgPSAwOwotCQkJfQotCQkgICAgfSBlbHNlIGlmIChsZW4pIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAic2NzaSVkOiBlcnJvciByZWNlaXZpbmcgIgotCQkJICAgICAgICJleHRlbmRlZCBtZXNzYWdlXG4iLCBIT1NUTk8pOwotCQkJdG1wID0gMDsKLQkJICAgIH0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogZXh0ZW5kZWQgbWVzc2FnZSAiCi0JCQkgICAgICAgImNvZGUgJTAyeCBsZW5ndGggJWQgaXMgdG9vIGxvbmdcbiIsCi0JCQkgICAgICAgSE9TVE5PLCBleHRlbmRlZF9tc2dbMl0sIGV4dGVuZGVkX21zZ1sxXSk7Ci0JCQl0bXAgPSAwOwotCQkgICAgfQotCQkvKiBGYWxsIHRocm91Z2ggdG8gcmVqZWN0IG1lc3NhZ2UgKi8KLQotCQkvKiAKLSAgCQkgKiBJZiB3ZSBnZXQgc29tZXRoaW5nIHdlaXJkIHRoYXQgd2UgYXJlbid0IGV4cGVjdGluZywgCi0gCQkgKiByZWplY3QgaXQuCi0JCSAqLwotCQlkZWZhdWx0OgotCQkgICAgaWYgKCF0bXApIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpJWQ6IHJlamVjdGluZyBtZXNzYWdlICIsIEhPU1ROTyk7Ci0JCQlzcGlfcHJpbnRfbXNnKGV4dGVuZGVkX21zZyk7Ci0JCQlwcmludGsoIlxuIik7Ci0JCSAgICB9IGVsc2UgaWYgKHRtcCAhPSBFWFRFTkRFRF9NRVNTQUdFKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcmVqZWN0aW5nIHVua25vd24gIgotCQkJICAgICAgICJtZXNzYWdlICUwMnggZnJvbSB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLAotCQkJICAgICAgIEhPU1ROTywgdG1wLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCQkgICAgZWxzZQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogcmVqZWN0aW5nIHVua25vd24gIgotCQkJICAgICAgICJleHRlbmRlZCBtZXNzYWdlICIKLQkJCSAgICAgICAiY29kZSAlMDJ4LCBsZW5ndGggJWQgZnJvbSB0YXJnZXQgJWQsIGx1biAlbGx1XG4iLAotCQkJICAgICAgIEhPU1ROTywgZXh0ZW5kZWRfbXNnWzFdLCBleHRlbmRlZF9tc2dbMF0sCi0JCQkgICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKTsKLSAgIAotCi0JCSAgICBtc2dvdXQgPSBNRVNTQUdFX1JFSkVDVDsKLQkJICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSB8IAotCQkJSUNSX0FTU0VSVF9BVE4pOwotCQkgICAgYnJlYWs7Ci0JCX0gLyogc3dpdGNoICh0bXApICovCi0JCWJyZWFrOwotCSAgICBjYXNlIFBIQVNFX01TR09VVDoKLQkJbGVuID0gMTsKLQkJZGF0YSA9ICZtc2dvdXQ7Ci0JCWhvc3RkYXRhLT5sYXN0X21lc3NhZ2UgPSBtc2dvdXQ7Ci0JCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLQkJaWYgKG1zZ291dCA9PSBBQk9SVCkgewotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkgICAgY21kX2ZyZWVfdGFnKCBjbWQgKTsKLSNlbHNlCi0JCSAgICBob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICY9IH4oMSA8PCBjbWQtPmRldmljZS0+bHVuKTsKLSNlbmRpZgotCQkgICAgaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7Ci0JCSAgICBjbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLSNpZmRlZiBOQ1I1MzgwX1NUQVRTCi0JCSAgICBjb2xsZWN0X3N0YXRzKGhvc3RkYXRhLCBjbWQpOwotI2VuZGlmCi0JCSAgICBjbWQtPnNjc2lfZG9uZShjbWQpOwotCQkgICAgTkNSNTM4MF93cml0ZShTRUxFQ1RfRU5BQkxFX1JFRywgaG9zdGRhdGEtPmlkX21hc2spOwotCQkgICAgcmV0dXJuOwotCQl9Ci0JCW1zZ291dCA9IE5PUDsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgUEhBU0VfQ01ET1VUOgotCQlsZW4gPSBjbWQtPmNtZF9sZW47Ci0JCWRhdGEgPSBjbWQtPmNtbmQ7Ci0JCS8qIAotCQkgKiBYWFggZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIG9uIG1hY2hpbmVzIHdpdGggYSAKLQkJICogUFNFVURPLURNQSBhcmNoaXRlY3R1cmUgd2Ugc2hvdWxkIHByb2JhYmx5IAotCQkgKiB1c2UgdGhlIGRtYSB0cmFuc2ZlciBmdW5jdGlvbi4gIAotCQkgKi8KLQkJTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgCi0JCSAgICAmZGF0YSk7Ci0JCWJyZWFrOwotCSAgICBjYXNlIFBIQVNFX1NUQVRJTjoKLQkJbGVuID0gMTsKLQkJZGF0YSA9ICZ0bXA7Ci0JCU5DUjUzODBfdHJhbnNmZXJfcGlvKGluc3RhbmNlLCAmcGhhc2UsICZsZW4sICZkYXRhKTsKLQkJY21kLT5TQ3AuU3RhdHVzID0gdG1wOwotCQlicmVhazsKLQkgICAgZGVmYXVsdDoKLQkJcHJpbnRrKCJzY3NpJWQ6IHVua25vd24gcGhhc2VcbiIsIEhPU1ROTyk7Ci0JCU5DUjUzODBfZHByaW50KE5ERUJVR19BTlksIGluc3RhbmNlKTsKLQkgICAgfSAvKiBzd2l0Y2gocGhhc2UpICovCi0JfSAvKiBpZiAodG1wICogU1JfUkVRKSAqLyAKLSAgICB9IC8qIHdoaWxlICgxKSAqLwotfQotCi0vKgotICogRnVuY3Rpb24gOiB2b2lkIE5DUjUzODBfcmVzZWxlY3QgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotICoKLSAqIFB1cnBvc2UgOiBkb2VzIHJlc2VsZWN0aW9uLCBpbml0aWFsaXppbmcgdGhlIGluc3RhbmNlLT5jb25uZWN0ZWQgCi0gKglmaWVsZCB0byBwb2ludCB0byB0aGUgc3RydWN0IHNjc2lfY21uZCBmb3Igd2hpY2ggdGhlIElfVF9MIG9yIElfVF9MX1EKLSAqCW5leHVzIGhhcyBiZWVuIHJlZXN0YWJsaXNoZWQsCi0gKgkKLSAqIElucHV0cyA6IGluc3RhbmNlIC0gdGhpcyBpbnN0YW5jZSBvZiB0aGUgTkNSNTM4MC4KLSAqCi0gKi8KLQotLyogaXQgbWlnaHQgZXZlbnR1YWxseSBwcm92ZSBuZWNlc3NhcnkgdG8gZG8gYSBkbWEgc2V0dXAgb24KLSAgIHJlc2VsZWN0aW9uLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGJlIG5lZWRlZCBub3cgLS0gc2FtICovCi0KLXN0YXRpYyB2b2lkIE5DUjUzODBfcmVzZWxlY3QgKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQotewotICAgIFNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKLSAgICB1bnNpZ25lZCBjaGFyIHRhcmdldF9tYXNrOwotICAgIHVuc2lnbmVkIGNoYXIgbHVuOwotI2lmZGVmIFNVUFBPUlRfVEFHUwotICAgIHVuc2lnbmVkIGNoYXIgdGFnOwotI2VuZGlmCi0gICAgdW5zaWduZWQgY2hhciBtc2dbM107Ci0gICAgc3RydWN0IHNjc2lfY21uZCAqdG1wID0gTlVMTCwgKnByZXY7Ci0vKiAgICB1bnNpZ25lZCBsb25nIGZsYWdzOyAqLwotCi0gICAgLyoKLSAgICAgKiBEaXNhYmxlIGFyYml0cmF0aW9uLCBldGMuIHNpbmNlIHRoZSBob3N0IGFkYXB0ZXIgb2J2aW91c2x5Ci0gICAgICogbG9zdCwgYW5kIHRlbGwgYW4gaW50ZXJydXB0ZWQgTkNSNTM4MF9zZWxlY3QoKSB0byByZXN0YXJ0LgotICAgICAqLwotCi0gICAgTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSk7Ci0gICAgaG9zdGRhdGEtPnJlc3RhcnRfc2VsZWN0ID0gMTsKLQotICAgIHRhcmdldF9tYXNrID0gTkNSNTM4MF9yZWFkKENVUlJFTlRfU0NTSV9EQVRBX1JFRykgJiB+KGhvc3RkYXRhLT5pZF9tYXNrKTsKLQotICAgIGRwcmludGsoTkRFQlVHX1JFU0VMRUNUSU9OLCAic2NzaSVkOiByZXNlbGVjdFxuIiwgSE9TVE5PKTsKLQotICAgIC8qIAotICAgICAqIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZGV0ZWN0ZWQgdGhhdCBvdXIgU0NTSSBJRCBpcyBvbiB0aGUgYnVzLAotICAgICAqIFNFTCBpcyB0cnVlIGFuZCBCU1kgd2FzIGZhbHNlIGZvciBhdCBsZWFzdCBvbmUgYnVzIHNldHRsZSBkZWxheQotICAgICAqICg0MDAgbnMpLgotICAgICAqCi0gICAgICogV2UgbXVzdCBhc3NlcnQgQlNZIG91cnNlbHZlcywgdW50aWwgdGhlIHRhcmdldCBkcm9wcyB0aGUgU0VMCi0gICAgICogc2lnbmFsLgotICAgICAqLwotCi0gICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFIHwgSUNSX0FTU0VSVF9CU1kpOwotICAgIAotICAgIHdoaWxlIChOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiBTUl9TRUwpOwotICAgIE5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSk7Ci0KLSAgICAvKgotICAgICAqIFdhaXQgZm9yIHRhcmdldCB0byBnbyBpbnRvIE1TR0lOLgotICAgICAqLwotCi0gICAgd2hpbGUgKCEoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgU1JfUkVRKSk7Ci0KLSNpZiAxCi0gICAgLy8gYWNrbm93bGVkZ2UgdG9nZ2xlIHRvIE1TR0lOCi0gICAgTkNSNTM4MF93cml0ZShUQVJHRVRfQ09NTUFORF9SRUcsIFBIQVNFX1NSX1RPX1RDUihQSEFTRV9NU0dJTikpOwotCi0gICAgLy8gcGVlayBhdCB0aGUgYnl0ZSB3aXRob3V0IHJlYWxseSBoaXR0aW5nIHRoZSBidXMKLSAgICBtc2dbMF0gPSBOQ1I1MzgwX3JlYWQoQ1VSUkVOVF9TQ1NJX0RBVEFfUkVHKTsKLSNlbmRpZgotCi0gICAgaWYgKCEobXNnWzBdICYgMHg4MCkpIHsKLQlwcmludGsoS0VSTl9ERUJVRyAic2NzaSVkOiBleHBlY3RpbmcgSURFTlRJRlkgbWVzc2FnZSwgZ290ICIsIEhPU1ROTyk7Ci0Jc3BpX3ByaW50X21zZyhtc2cpOwotCWRvX2Fib3J0KGluc3RhbmNlKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGx1biA9IChtc2dbMF0gJiAweDA3KTsKLQotICAgIC8qIAotICAgICAqIEZpbmQgdGhlIGNvbW1hbmQgY29ycmVzcG9uZGluZyB0byB0aGUgSV9UX0wgb3IgSV9UX0xfUSAgbmV4dXMgd2UgCi0gICAgICoganVzdCByZWVzdGFibGlzaGVkLCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZS4KLSAgICAgKi8KLQotICAgIGZvciAodG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZSwgcHJldiA9IE5VTEw7Ci0JIHRtcDsgcHJldiA9IHRtcCwgdG1wID0gTkVYVCh0bXApICkgewotCWlmICgodGFyZ2V0X21hc2sgPT0gKDEgPDwgdG1wLT5kZXZpY2UtPmlkKSkgJiYgKGx1biA9PSB0bXAtPmRldmljZS0+bHVuKQotI2lmZGVmIFNVUFBPUlRfVEFHUwotCSAgICAmJiAodGFnID09IHRtcC0+dGFnKSAKLSNlbmRpZgotCSAgICApIHsKLQkgICAgaWYgKHByZXYpIHsKLQkJUkVNT1ZFKHByZXYsIE5FWFQocHJldiksIHRtcCwgTkVYVCh0bXApKTsKLQkJU0VUX05FWFQocHJldiwgTkVYVCh0bXApKTsKLQkgICAgfSBlbHNlIHsKLQkJUkVNT1ZFKC0xLCBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlLCB0bXAsIE5FWFQodG1wKSk7Ci0JCWhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBORVhUKHRtcCk7Ci0JICAgIH0KLQkgICAgU0VUX05FWFQodG1wLCBOVUxMKTsKLQkgICAgYnJlYWs7Ci0JfQotICAgIH0KLSAgICAKLSAgICBpZiAoIXRtcCkgewotCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZDogd2FybmluZzogdGFyZ2V0IGJpdG1hc2sgJTAyeCBsdW4gJWQgIgotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQkidGFnICVkICIKLSNlbmRpZgotCQkibm90IGluIGRpc2Nvbm5lY3RlZF9xdWV1ZS5cbiIsCi0JCUhPU1ROTywgdGFyZ2V0X21hc2ssIGx1bgotI2lmZGVmIFNVUFBPUlRfVEFHUwotCQksIHRhZwotI2VuZGlmCi0JCSk7Ci0JLyogCi0JICogU2luY2Ugd2UgaGF2ZSBhbiBlc3RhYmxpc2hlZCBuZXh1cyB0aGF0IHdlIGNhbid0IGRvIGFueXRoaW5nCi0JICogd2l0aCwgd2UgbXVzdCBhYm9ydCBpdC4gIAotCSAqLwotCWRvX2Fib3J0KGluc3RhbmNlKTsKLQlyZXR1cm47Ci0gICAgfQotI2lmIDEKLSAgICAvKiBlbmdhZ2UgZG1hIHNldHVwIGZvciB0aGUgY29tbWFuZCB3ZSBqdXN0IHNhdyAqLwotICAgIHsKLQkgICAgdm9pZCAqZDsKLQkgICAgdW5zaWduZWQgbG9uZyBjb3VudDsKLQotCSAgICBpZiAoIXRtcC0+U0NwLnRoaXNfcmVzaWR1YWwgJiYgdG1wLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCkgewotCQkgICAgY291bnQgPSB0bXAtPlNDcC5idWZmZXItPmxlbmd0aDsKLQkJICAgIGQgPSBTR0FERFIodG1wLT5TQ3AuYnVmZmVyKTsKLQkgICAgfSBlbHNlIHsKLQkJICAgIGNvdW50ID0gdG1wLT5TQ3AudGhpc19yZXNpZHVhbDsKLQkJICAgIGQgPSB0bXAtPlNDcC5wdHI7Ci0JICAgIH0KLSNpZmRlZiBSRUFMX0RNQQotCSAgICAvKiBzZXR1cCB0aGlzIGNvbW1hbmQgZm9yIGRtYSBpZiBub3QgYWxyZWFkeSAqLwotCSAgICBpZigoY291bnQgPiBTVU4zX0RNQV9NSU5TSVpFKSAmJiAoc3VuM19kbWFfc2V0dXBfZG9uZSAhPSB0bXApKQotCSAgICB7Ci0JCSAgICBzdW4zc2NzaV9kbWFfc2V0dXAoZCwgY291bnQsIHJxX2RhdGFfZGlyKHRtcC0+cmVxdWVzdCkpOwotCQkgICAgc3VuM19kbWFfc2V0dXBfZG9uZSA9IHRtcDsKLQkgICAgfQotI2VuZGlmCi0gICAgfQotI2VuZGlmCi0KLSAgICBOQ1I1MzgwX3dyaXRlKElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX0FDSyk7Ci0gICAgLyogQWNjZXB0IG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCi0gICAgTkNSNTM4MF93cml0ZShJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFKTsKLQotI2lmZGVmIFNVUFBPUlRfVEFHUwotICAgIC8qIElmIHRoZSBwaGFzZSBpcyBzdGlsbCBNU0dJTiwgdGhlIHRhcmdldCB3YW50cyB0byBzZW5kIHNvbWUgbW9yZQotICAgICAqIG1lc3NhZ2VzLiBJbiBjYXNlIGl0IHN1cHBvcnRzIHRhZ2dlZCBxdWV1aW5nLCB0aGlzIGlzIHByb2JhYmx5IGEKLSAgICAgKiBTSU1QTEVfUVVFVUVfVEFHIGZvciB0aGUgSV9UX0xfUSBuZXh1cy4KLSAgICAgKi8KLSAgICB0YWcgPSBUQUdfTk9ORTsKLSAgICBpZiAocGhhc2UgPT0gUEhBU0VfTVNHSU4gJiYgc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nKSB7Ci0JLyogQWNjZXB0IHByZXZpb3VzIElERU5USUZZIG1lc3NhZ2UgYnkgY2xlYXJpbmcgQUNLICovCi0JTkNSNTM4MF93cml0ZSggSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQkFTRSApOwotCWxlbiA9IDI7Ci0JZGF0YSA9IG1zZysxOwotCWlmICghTkNSNTM4MF90cmFuc2Zlcl9waW8oaW5zdGFuY2UsICZwaGFzZSwgJmxlbiwgJmRhdGEpICYmCi0JICAgIG1zZ1sxXSA9PSBTSU1QTEVfUVVFVUVfVEFHKQotCSAgICB0YWcgPSBtc2dbMl07Ci0JZHByaW50ayhOREVCVUdfVEFHUywgInNjc2klZDogdGFyZ2V0IG1hc2sgJTAyeCwgbHVuICVkIHNlbnQgdGFnICVkIGF0ICIKLQkJICAgInJlc2VsZWN0aW9uXG4iLCBIT1NUTk8sIHRhcmdldF9tYXNrLCBsdW4sIHRhZyk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgaG9zdGRhdGEtPmNvbm5lY3RlZCA9IHRtcDsKLSAgICBkcHJpbnRrKE5ERUJVR19SRVNFTEVDVElPTiwgInNjc2klZDogbmV4dXMgZXN0YWJsaXNoZWQsIHRhcmdldCA9ICVkLCBsdW4gPSAlbGx1LCB0YWcgPSAlZFxuIiwKLQkgICAgICAgSE9TVE5PLCB0bXAtPmRldmljZS0+aWQsIHRtcC0+ZGV2aWNlLT5sdW4sIHRtcC0+dGFnKTsKLX0KLQotCi0vKgotICogRnVuY3Rpb24gOiBpbnQgTkNSNTM4MF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi0gKgotICogUHVycG9zZSA6IGFib3J0IGEgY29tbWFuZAotICoKLSAqIElucHV0cyA6IGNtZCAtIHRoZSBzdHJ1Y3Qgc2NzaV9jbW5kIHRvIGFib3J0LCBjb2RlIC0gY29kZSB0byBzZXQgdGhlCi0gKiAJaG9zdCBieXRlIG9mIHRoZSByZXN1bHQgZmllbGQgdG8sIGlmIHplcm8gRElEX0FCT1JURUQgaXMgCi0gKgl1c2VkLgotICoKLSAqIFJldHVybnMgOiAwIC0gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KLSAqCi0gKiBYWFggLSB0aGVyZSBpcyBubyB3YXkgdG8gYWJvcnQgdGhlIGNvbW1hbmQgdGhhdCBpcyBjdXJyZW50bHkgCi0gKiAJIGNvbm5lY3RlZCwgeW91IGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuICBJZiB0aGlzIGlzIAotICoJIGEgcHJvYmxlbSwgd2UgY291bGQgaW1wbGVtZW50IGxvbmdqbXAoKSAvIHNldGptcCgpLCBzZXRqbXAoKQotICogCSBjYWxsZWQgd2hlcmUgdGhlIGxvb3Agc3RhcnRlZCBpbiBOQ1I1MzgwX21haW4oKS4KLSAqLwotCi1zdGF0aWMgaW50IE5DUjUzODBfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotICAgIHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlID0gY21kLT5kZXZpY2UtPmhvc3Q7Ci0gICAgU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwotICAgIHN0cnVjdCBzY3NpX2NtbmQgKnRtcCwgKipwcmV2OwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgICBwcmludGsoS0VSTl9OT1RJQ0UgInNjc2klZDogYWJvcnRpbmcgY29tbWFuZFxuIiwgSE9TVE5PKTsKLSAgICBzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKLQotICAgIE5DUjUzODBfcHJpbnRfc3RhdHVzIChpbnN0YW5jZSk7Ci0KLSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0gICAgCi0gICAgZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IGFib3J0IGNhbGxlZCBiYXNyIDB4JTAyeCwgc3IgMHglMDJ4XG4iLCBIT1NUTk8sCi0JCU5DUjUzODBfcmVhZChCVVNfQU5EX1NUQVRVU19SRUcpLAotCQlOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykpOwotCi0jaWYgMQotLyogCi0gKiBDYXNlIDEgOiBJZiB0aGUgY29tbWFuZCBpcyB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb21tYW5kLCAKLSAqIHdlJ2xsIHNldCB0aGUgYWJvcnRlZCBmbGFnIGFuZCByZXR1cm4gY29udHJvbCBzbyB0aGF0IAotICogaW5mb3JtYXRpb24gdHJhbnNmZXIgcm91dGluZSBjYW4gZXhpdCBjbGVhbmx5LgotICovCi0KLSAgICBpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCA9PSBjbWQpIHsKLQotCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiBhYm9ydGluZyBjb25uZWN0ZWQgY29tbWFuZFxuIiwgSE9TVE5PKTsKLS8qCi0gKiBXZSBzaG91bGQgcGVyZm9ybSBCU1kgY2hlY2tpbmcsIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBzbGlwcGVkCi0gKiBpbnRvIEJVUyBGUkVFLgotICovCi0KLS8qCU5DUjUzODBfd3JpdGUoSU5JVElBVE9SX0NPTU1BTkRfUkVHLCBJQ1JfQVNTRVJUX0FUTik7ICovCi0vKiAKLSAqIFNpbmNlIHdlIGNhbid0IGNoYW5nZSBwaGFzZXMgdW50aWwgd2UndmUgY29tcGxldGVkIHRoZSBjdXJyZW50IAotICogaGFuZHNoYWtlLCB3ZSBoYXZlIHRvIHNvdXJjZSBvciBzaW5rIGEgYnl0ZSBvZiBkYXRhIGlmIHRoZSBjdXJyZW50Ci0gKiBwaGFzZSBpcyBub3QgTVNHT1VULgotICovCi0KLS8qIAotICogUmV0dXJuIGNvbnRyb2wgdG8gdGhlIGV4ZWN1dGluZyBOQ1IgZHJpdmUgc28gd2UgY2FuIGNsZWFyIHRoZQotICogYWJvcnRlZCBmbGFnIGFuZCBnZXQgYmFjayBpbnRvIG91ciBtYWluIGxvb3AuCi0gKi8gCi0KLQlpZiAoZG9fYWJvcnQoaW5zdGFuY2UpID09IDApIHsKLQkgIGhvc3RkYXRhLT5hYm9ydGVkID0gMTsKLQkgIGhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwotCSAgY21kLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7Ci0jaWZkZWYgU1VQUE9SVF9UQUdTCi0JICBjbWRfZnJlZV90YWcoIGNtZCApOwotI2Vsc2UKLQkgIGhvc3RkYXRhLT5idXN5W2NtZC0+ZGV2aWNlLT5pZF0gJj0gfigxIDw8IGNtZC0+ZGV2aWNlLT5sdW4pOwotI2VuZGlmCi0JICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JICBjbWQtPnNjc2lfZG9uZShjbWQpOwotCSAgcmV0dXJuIFNVQ0NFU1M7Ci0JfSBlbHNlIHsKLS8qCSAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAqLwotCSAgcHJpbnRrKCJzY3NpJWQ6IGFib3J0IG9mIGNvbm5lY3RlZCBjb21tYW5kIGZhaWxlZCFcbiIsIEhPU1ROTyk7Ci0JICByZXR1cm4gRkFJTEVEOwotCX0gCi0gICB9Ci0jZW5kaWYKLQotLyogCi0gKiBDYXNlIDIgOiBJZiB0aGUgY29tbWFuZCBoYXNuJ3QgYmVlbiBpc3N1ZWQgeWV0LCB3ZSBzaW1wbHkgcmVtb3ZlIGl0IAotICogCSAgICBmcm9tIHRoZSBpc3N1ZSBxdWV1ZS4KLSAqLwotICAgIGZvciAocHJldiA9IChzdHJ1Y3Qgc2NzaV9jbW5kICoqKSAmKGhvc3RkYXRhLT5pc3N1ZV9xdWV1ZSksCi0JdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlOwotCXRtcDsgcHJldiA9IE5FWFRBRERSKHRtcCksIHRtcCA9IE5FWFQodG1wKSkKLQlpZiAoY21kID09IHRtcCkgewotCSAgICBSRU1PVkUoNSwgKnByZXYsIHRtcCwgTkVYVCh0bXApKTsKLQkgICAgKCpwcmV2KSA9IE5FWFQodG1wKTsKLQkgICAgU0VUX05FWFQodG1wLCBOVUxMKTsKLQkgICAgdG1wLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7Ci0JICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkgICAgZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IGFib3J0IHJlbW92ZWQgY29tbWFuZCBmcm9tIGlzc3VlIHF1ZXVlLlxuIiwKLQkJCUhPU1ROTyk7Ci0JICAgIC8qIFRhZ2dlZCBxdWV1aW5nIG5vdGU6IG5vIHRhZyB0byBmcmVlIGhlcmUsIGhhc24ndCBiZWVuIGFzc2lnbmVkCi0JICAgICAqIHlldC4uLiAqLwotCSAgICB0bXAtPnNjc2lfZG9uZSh0bXApOwotCSAgICByZXR1cm4gU1VDQ0VTUzsKLQl9Ci0KLS8qIAotICogQ2FzZSAzIDogSWYgYW55IGNvbW1hbmRzIGFyZSBjb25uZWN0ZWQsIHdlJ3JlIGdvaW5nIHRvIGZhaWwgdGhlIGFib3J0Ci0gKgkgICAgYW5kIGxldCB0aGUgaGlnaCBsZXZlbCBTQ1NJIGRyaXZlciByZXRyeSBhdCBhIGxhdGVyIHRpbWUgb3IgCi0gKgkgICAgaXNzdWUgYSByZXNldC4KLSAqCi0gKgkgICAgVGltZW91dHMsIGFuZCB0aGVyZWZvcmUgYWJvcnRlZCBjb21tYW5kcywgd2lsbCBiZSBoaWdobHkgdW5saWtlbHkKLSAqICAgICAgICAgIGFuZCBoYW5kbGluZyB0aGVtIGNsZWFubHkgaW4gdGhpcyBzaXR1YXRpb24gd291bGQgbWFrZSB0aGUgY29tbW9uCi0gKgkgICAgY2FzZSBvZiBub3Jlc2V0cyBsZXNzIGVmZmljaWVudCwgYW5kIHdvdWxkIHBvbGx1dGUgb3VyIGNvZGUuICBTbywKLSAqCSAgICB3ZSBmYWlsLgotICovCi0KLSAgICBpZiAoaG9zdGRhdGEtPmNvbm5lY3RlZCkgewotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogYWJvcnQgZmFpbGVkLCBjb21tYW5kIGNvbm5lY3RlZC5cbiIsIEhPU1ROTyk7Ci0gICAgICAgIHJldHVybiBGQUlMRUQ7Ci0gICAgfQotCi0vKgotICogQ2FzZSA0OiBJZiB0aGUgY29tbWFuZCBpcyBjdXJyZW50bHkgZGlzY29ubmVjdGVkIGZyb20gdGhlIGJ1cywgYW5kIAotICogCXRoZXJlIGFyZSBubyBjb25uZWN0ZWQgY29tbWFuZHMsIHdlIHJlY29ubmVjdCB0aGUgSV9UX0wgb3IgCi0gKglJX1RfTF9RIG5leHVzIGFzc29jaWF0ZWQgd2l0aCBpdCwgZ28gaW50byBtZXNzYWdlIG91dCwgYW5kIHNlbmQgCi0gKiAgICAgIGFuIGFib3J0IG1lc3NhZ2UuCi0gKgotICogVGhpcyBjYXNlIGlzIGVzcGVjaWFsbHkgdWdseS4gSW4gb3JkZXIgdG8gcmVlc3RhYmxpc2ggdGhlIG5leHVzLCB3ZQotICogbmVlZCB0byBjYWxsIE5DUjUzODBfc2VsZWN0KCkuICBUaGUgZWFzaWVzdCB3YXkgdG8gaW1wbGVtZW50IHRoaXMgCi0gKiBmdW5jdGlvbiB3YXMgdG8gYWJvcnQgaWYgdGhlIGJ1cyB3YXMgYnVzeSwgYW5kIGxldCB0aGUgaW50ZXJydXB0Ci0gKiBoYW5kbGVyIHRyaWdnZXJlZCBvbiB0aGUgU0VMIGZvciByZXNlbGVjdCB0YWtlIGNhcmUgb2YgbG9zdCBhcmJpdHJhdGlvbnMKLSAqIHdoZXJlIG5lY2Vzc2FyeSwgbWVhbmluZyBpbnRlcnJ1cHRzIG5lZWQgdG8gYmUgZW5hYmxlZC4KLSAqCi0gKiBXaGVuIGludGVycnVwdHMgYXJlIGVuYWJsZWQsIHRoZSBxdWV1ZXMgbWF5IGNoYW5nZSAtIHNvIHdlIAotICogY2FuJ3QgcmVtb3ZlIGl0IGZyb20gdGhlIGRpc2Nvbm5lY3RlZCBxdWV1ZSBiZWZvcmUgc2VsZWN0aW5nIGl0Ci0gKiBiZWNhdXNlIHRoYXQgY291bGQgY2F1c2UgYSBmYWlsdXJlIGluIGhhc2hpbmcgdGhlIG5leHVzIGlmIHRoYXQgCi0gKiBkZXZpY2UgcmVzZWxlY3RlZC4KLSAqIAotICogU2luY2UgdGhlIHF1ZXVlcyBtYXkgY2hhbmdlLCB3ZSBjYW4ndCB1c2UgdGhlIHBvaW50ZXJzIGZyb20gd2hlbiB3ZQotICogZmlyc3QgbG9jYXRlIGl0LgotICoKLSAqIFNvLCB3ZSBtdXN0IGZpcnN0IGxvY2F0ZSB0aGUgY29tbWFuZCwgYW5kIGlmIE5DUjUzODBfc2VsZWN0KCkKLSAqIHN1Y2NlZWRzLCB0aGVuIGlzc3VlIHRoZSBhYm9ydCwgcmVsb2NhdGUgdGhlIGNvbW1hbmQgYW5kIHJlbW92ZQotICogaXQgZnJvbSB0aGUgZGlzY29ubmVjdGVkIHF1ZXVlLgotICovCi0KLSAgICBmb3IgKHRtcCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWU7IHRtcDsKLQkgdG1wID0gTkVYVCh0bXApKSAKLSAgICAgICAgaWYgKGNtZCA9PSB0bXApIHsKLSAgICAgICAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkgICAgZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IGFib3J0aW5nIGRpc2Nvbm5lY3RlZCBjb21tYW5kLlxuIiwgSE9TVE5PKTsKLSAgCi0gICAgICAgICAgICBpZiAoTkNSNTM4MF9zZWxlY3QgKGluc3RhbmNlLCBjbWQsIChpbnQpIGNtZC0+dGFnKSkgCi0JCXJldHVybiBGQUlMRUQ7Ci0KLQkgICAgZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IG5leHVzIHJlZXN0YWJsaXNoZWQuXG4iLCBIT1NUTk8pOwotCi0JICAgIGRvX2Fib3J0IChpbnN0YW5jZSk7Ci0KLQkgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSAgICBmb3IgKHByZXYgPSAoc3RydWN0IHNjc2lfY21uZCAqKikgJihob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlKSwKLQkJdG1wID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaG9zdGRhdGEtPmRpc2Nvbm5lY3RlZF9xdWV1ZTsKLQkJdG1wOyBwcmV2ID0gTkVYVEFERFIodG1wKSwgdG1wID0gTkVYVCh0bXApICkKLQkJICAgIGlmIChjbWQgPT0gdG1wKSB7Ci0JCSAgICBSRU1PVkUoNSwgKnByZXYsIHRtcCwgTkVYVCh0bXApKTsKLQkJICAgICpwcmV2ID0gTkVYVCh0bXApOwotCQkgICAgU0VUX05FWFQodG1wLCBOVUxMKTsKLQkJICAgIHRtcC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwotCQkgICAgLyogV2UgbXVzdCB1bmxvY2sgdGhlIHRhZy9MVU4gaW1tZWRpYXRlbHkgaGVyZSwgc2luY2UgdGhlCi0JCSAgICAgKiB0YXJnZXQgZ29lcyB0byBCVVMgRlJFRSBhbmQgZG9lc24ndCBzZW5kIHVzIGFub3RoZXIKLQkJICAgICAqIG1lc3NhZ2UgKENPTU1BTkRfQ09NUExFVEUgb3IgdGhlIGxpa2UpCi0JCSAgICAgKi8KLSNpZmRlZiBTVVBQT1JUX1RBR1MKLQkJICAgIGNtZF9mcmVlX3RhZyggdG1wICk7Ci0jZWxzZQotCQkgICAgaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmPSB+KDEgPDwgY21kLT5kZXZpY2UtPmx1bik7Ci0jZW5kaWYKLQkJICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJICAgIHRtcC0+c2NzaV9kb25lKHRtcCk7Ci0JCSAgICByZXR1cm4gU1VDQ0VTUzsKLQkJfQotCX0KLQotLyoKLSAqIENhc2UgNSA6IElmIHdlIHJlYWNoZWQgdGhpcyBwb2ludCwgdGhlIGNvbW1hbmQgd2FzIG5vdCBmb3VuZCBpbiBhbnkgb2YgCi0gKgkgICAgdGhlIHF1ZXVlcy4KLSAqCi0gKiBXZSBwcm9iYWJseSByZWFjaGVkIHRoaXMgcG9pbnQgYmVjYXVzZSBvZiBhbiB1bmxpa2VseSByYWNlIGNvbmRpdGlvbgotICogYmV0d2VlbiB0aGUgY29tbWFuZCBjb21wbGV0aW5nIHN1Y2Nlc3NmdWxseSBhbmQgdGhlIGFib3J0aW9uIGNvZGUsCi0gKiBzbyB3ZSB3b24ndCBwYW5pYywgYnV0IHdlIHdpbGwgbm90aWZ5IHRoZSB1c2VyIGluIGNhc2Ugc29tZXRoaW5nIHJlYWxseQotICogYnJva2UuCi0gKi8KLQotICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSAgICBwcmludGsoS0VSTl9JTkZPICJzY3NpJWQ6IHdhcm5pbmcgOiBTQ1NJIGNvbW1hbmQgcHJvYmFibHkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBiZWZvcmUgYWJvcnRpb25cbiIsIEhPU1ROTyk7IAotCi0gICAgcmV0dXJuIEZBSUxFRDsKLX0KLQotCi0vKiAKLSAqIEZ1bmN0aW9uIDogaW50IE5DUjUzODBfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLSAqIAotICogUHVycG9zZSA6IHJlc2V0IHRoZSBTQ1NJIGJ1cy4KLSAqCi0gKiBSZXR1cm5zIDogU1VDQ0VTUyBvciBGQUlMVVJFCi0gKgotICovIAotCi1zdGF0aWMgaW50IE5DUjUzODBfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLSAgICBTRVRVUF9IT1NUREFUQShjbWQtPmRldmljZS0+aG9zdCk7Ci0gICAgaW50ICAgICAgICAgICBpOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0jaWYgZGVmaW5lZChSRVNFVF9SVU5fRE9ORSkKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjb25uZWN0ZWQsICpkaXNjb25uZWN0ZWRfcXVldWU7Ci0jZW5kaWYKLQotCi0gICAgTkNSNTM4MF9wcmludF9zdGF0dXMgKGNtZC0+ZGV2aWNlLT5ob3N0KTsKLQotICAgIC8qIGdldCBpbiBwaGFzZSAqLwotICAgIE5DUjUzODBfd3JpdGUoIFRBUkdFVF9DT01NQU5EX1JFRywKLQkJICAgUEhBU0VfU1JfVE9fVENSKCBOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgKSk7Ci0gICAgLyogYXNzZXJ0IFJTVCAqLwotICAgIE5DUjUzODBfd3JpdGUoIElOSVRJQVRPUl9DT01NQU5EX1JFRywgSUNSX0JBU0UgfCBJQ1JfQVNTRVJUX1JTVCApOwotICAgIHVkZWxheSAoNDApOwotICAgIC8qIHJlc2V0IE5DUiByZWdpc3RlcnMgKi8KLSAgICBOQ1I1MzgwX3dyaXRlKCBJTklUSUFUT1JfQ09NTUFORF9SRUcsIElDUl9CQVNFICk7Ci0gICAgTkNSNTM4MF93cml0ZSggTU9ERV9SRUcsIE1SX0JBU0UgKTsKLSAgICBOQ1I1MzgwX3dyaXRlKCBUQVJHRVRfQ09NTUFORF9SRUcsIDAgKTsKLSAgICBOQ1I1MzgwX3dyaXRlKCBTRUxFQ1RfRU5BQkxFX1JFRywgMCApOwotICAgIC8qICsrcm9tYW46IHJlc2V0IGludGVycnVwdCBjb25kaXRpb24hIG90aGVyd2lzZSBubyBpbnRlcnJ1cHRzIGRvbid0IGdldAotICAgICAqIHRocm91Z2ggYW55bW9yZSAuLi4gKi8KLSAgICAodm9pZClOQ1I1MzgwX3JlYWQoIFJFU0VUX1BBUklUWV9JTlRFUlJVUFRfUkVHICk7Ci0KLQkvKiBNU2NoIDIwMTQwMTE1IC0gbG9va2luZyBhdCB0aGUgZ2VuZXJpYyBOQ1I1MzgwIGRyaXZlciwgYWxsIG9mIHRoaXMKLQkgKiBzaG91bGQgZ28uCi0JICogQ2F0Y2gtMjI6IGlmIHdlIGRvbid0IGNsZWFyIGFsbCBxdWV1ZXMsIHRoZSBTQ1NJIGRyaXZlciBsb2NrIHdpbGwKLQkgKiBub3QgYmUgcmVsZWFzZWQgYnkgYXRhcmlfc2NzaV9yZXNldCgpIQotCSAqLwotCi0jaWYgZGVmaW5lZChSRVNFVF9SVU5fRE9ORSkKLQkvKiBYWFggU2hvdWxkIG5vdyBiZSBkb25lIGJ5IG1pZGxldmVsIGNvZGUsIGJ1dCBpdCdzIGJyb2tlbiBYWFggKi8KLQkvKiBYWFggc2VlIGJlbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYWFggKi8KLQotICAgIC8qIE1TY2g6IG9sZC1zdHlsZSByZXNldDogYWN0dWFsbHkgYWJvcnQgYWxsIGNvbW1hbmQgcHJvY2Vzc2luZyBoZXJlICovCi0KLSAgICAvKiBBZnRlciB0aGUgcmVzZXQsIHRoZXJlIGFyZSBubyBtb3JlIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgY29tbWFuZHMKLSAgICAgKiBhbmQgbm8gYnVzeSB1bml0czsgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCByZS1pbnNlcnRpbmcgdGhlIGNvbW1hbmRzCi0gICAgICogaW50byB0aGUgaXNzdWVfcXVldWUgKHZpYSBzY3NpX2RvbmUoKSksIHRoZSBhYm9ydGVkIGNvbW1hbmRzIGFyZQotICAgICAqIHJlbWVtYmVyZWQgaW4gbG9jYWwgdmFyaWFibGVzIGZpcnN0LgotICAgICAqLwotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICBjb25uZWN0ZWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWhvc3RkYXRhLT5jb25uZWN0ZWQ7Ci0gICAgaG9zdGRhdGEtPmNvbm5lY3RlZCA9IE5VTEw7Ci0gICAgZGlzY29ubmVjdGVkX3F1ZXVlID0gKHN0cnVjdCBzY3NpX2NtbmQgKilob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOwotICAgIGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUgPSBOVUxMOwotI2lmZGVmIFNVUFBPUlRfVEFHUwotICAgIGZyZWVfYWxsX3RhZ3MoKTsKLSNlbmRpZgotICAgIGZvciggaSA9IDA7IGkgPCA4OyArK2kgKQotCWhvc3RkYXRhLT5idXN5W2ldID0gMDsKLSNpZmRlZiBSRUFMX0RNQQotICAgIGhvc3RkYXRhLT5kbWFfbGVuID0gMDsKLSNlbmRpZgotICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotICAgIC8qIEluIG9yZGVyIHRvIHRlbGwgdGhlIG1pZC1sZXZlbCBjb2RlIHdoaWNoIGNvbW1hbmRzIHdlcmUgYWJvcnRlZCwgCi0gICAgICogc2V0IHRoZSBjb21tYW5kIHN0YXR1cyB0byBESURfUkVTRVQgYW5kIGNhbGwgc2NzaV9kb25lKCkgISEhCi0gICAgICogVGhpcyB1bHRpbWF0ZWx5IGFib3J0cyBwcm9jZXNzaW5nIG9mIHRoZXNlIGNvbW1hbmRzIGluIHRoZSBtaWQtbGV2ZWwuCi0gICAgICovCi0KLSAgICBpZiAoKGNtZCA9IGNvbm5lY3RlZCkpIHsKLQlkcHJpbnRrKE5ERUJVR19BQk9SVCwgInNjc2klZDogcmVzZXQgYWJvcnRlZCBhIGNvbm5lY3RlZCBjb21tYW5kXG4iLCBIX05PKGNtZCkpOwotCWNtZC0+cmVzdWx0ID0gKGNtZC0+cmVzdWx0ICYgMHhmZmZmKSB8IChESURfUkVTRVQgPDwgMTYpOwotCWNtZC0+c2NzaV9kb25lKCBjbWQgKTsKLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyAoY21kID0gZGlzY29ubmVjdGVkX3F1ZXVlKTsgKytpKSB7Ci0JZGlzY29ubmVjdGVkX3F1ZXVlID0gTkVYVChjbWQpOwotCVNFVF9ORVhUKGNtZCwgTlVMTCk7Ci0JY21kLT5yZXN1bHQgPSAoY21kLT5yZXN1bHQgJiAweGZmZmYpIHwgKERJRF9SRVNFVCA8PCAxNik7Ci0JY21kLT5zY3NpX2RvbmUoIGNtZCApOwotICAgIH0KLSAgICBpZiAoaSA+IDApCi0JZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpOiByZXNldCBhYm9ydGVkICVkIGRpc2Nvbm5lY3RlZCBjb21tYW5kKHMpXG4iLCBpKTsKLQotCi0gICAgLyogc2luY2UgYWxsIGNvbW1hbmRzIGhhdmUgYmVlbiBleHBsaWNpdGx5IHRlcm1pbmF0ZWQsIHdlIG5lZWQgdG8gdGVsbAotICAgICAqIHRoZSBtaWRsZXZlbCBjb2RlIHRoYXQgdGhlIHJlc2V0IHdhcyBTVUNDRVNTRlVMLCBhbmQgdGhlcmUgaXMgbm8gCi0gICAgICogbmVlZCB0byAnd2FrZSB1cCcgdGhlIGNvbW1hbmRzIGJ5IGEgcmVxdWVzdF9zZW5zZQotICAgICAqLwotICAgIHJldHVybiBTVUNDRVNTOwotI2Vsc2UgLyogMSAqLwotCi0gICAgLyogTVNjaDogbmV3LXN0eWxlIHJlc2V0IGhhbmRsaW5nOiBsZXQgdGhlIG1pZC1sZXZlbCBkbyB3aGF0IGl0IGNhbiAqLwotCi0gICAgLyogKytndWVudGhlcjogTUlELUxFVkVMIElTIFNUSUxMIEJST0tFTi4KLSAgICAgKiBNaWQtbGV2ZWwgaXMgc3VwcG9zZWQgdG8gcmVxdWV1ZSBhbGwgY29tbWFuZHMgdGhhdCB3ZXJlIGFjdGl2ZSBvbiB0aGUKLSAgICAgKiB2YXJpb3VzIGxvdy1sZXZlbCBxdWV1ZXMuIEluIGZhY3QgaXQgZG9lcyB0aGlzLCBidXQgdGhhdCdzIG5vdCBlbm91Z2gKLSAgICAgKiBiZWNhdXNlIGFsbCB0aGVzZSBjb21tYW5kcyBhcmUgc3ViamVjdCB0byB0aW1lb3V0LiBBbmQgaWYgYSB0aW1lb3V0Ci0gICAgICogaGFwcGVucyBmb3IgYW55IHJlbW92ZWQgY29tbWFuZCwgKl9hYm9ydCgpIGlzIGNhbGxlZCBidXQgYWxsIHF1ZXVlcwotICAgICAqIGFyZSBub3cgZW1wdHkuIEFib3J0IHRoZW4gZ2l2ZXMgdXAgdGhlIGZhbGNvbiBsb2NrLCB3aGljaCBpcyBmYXRhbCwKLSAgICAgKiBzaW5jZSB0aGUgbWlkLWxldmVsIHdpbGwgcXVldWUgbW9yZSBjb21tYW5kcyBhbmQgbXVzdCBoYXZlIHRoZSBsb2NrCi0gICAgICogKGl0J3MgYWxsIGhhcHBlbmluZyBpbnNpZGUgdGltZXIgaW50ZXJydXB0IGhhbmRsZXIhISkuCi0gICAgICogRXZlbiB3b3JzZSwgYWJvcnQgd2lsbCByZXR1cm4gTk9UX1JVTk5JTkcgZm9yIGFsbCB0aG9zZSBjb21tYW5kcyBub3QKLSAgICAgKiBvbiBhbnkgcXVldWUsIHNvIHRoZXkgd29uJ3QgYmUgcmV0cmllZCAuLi4KLSAgICAgKgotICAgICAqIENvbmNsdXNpb246IGVpdGhlciBzY3NpLmMgZGlzYWJsZXMgdGltZW91dCBmb3IgYWxsIHJlc2V0dGVkIGNvbW1hbmRzCi0gICAgICogaW1tZWRpYXRlbHksIG9yIHdlIGxvc2UhICBBcyBvZiBsaW51eC0yLjAuMjAgaXQgZG9lc24ndC4KLSAgICAgKi8KLQotICAgIC8qIEFmdGVyIHRoZSByZXNldCwgdGhlcmUgYXJlIG5vIG1vcmUgY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZCBjb21tYW5kcwotICAgICAqIGFuZCBubyBidXN5IHVuaXRzOyBzbyBjbGVhciB0aGUgbG93LWxldmVsIHN0YXR1cyBoZXJlIHRvIGF2b2lkIAotICAgICAqIGNvbmZsaWN0cyB3aGVuIHRoZSBtaWQtbGV2ZWwgY29kZSB0cmllcyB0byB3YWtlIHVwIHRoZSBhZmZlY3RlZCAKLSAgICAgKiBjb21tYW5kcyEKLSAgICAgKi8KLQotICAgIGlmIChob3N0ZGF0YS0+aXNzdWVfcXVldWUpCi0JZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IHJlc2V0IGFib3J0ZWQgaXNzdWVkIGNvbW1hbmQocylcbiIsIEhfTk8oY21kKSk7Ci0gICAgaWYgKGhvc3RkYXRhLT5jb25uZWN0ZWQpIAotCWRwcmludGsoTkRFQlVHX0FCT1JULCAic2NzaSVkOiByZXNldCBhYm9ydGVkIGEgY29ubmVjdGVkIGNvbW1hbmRcbiIsIEhfTk8oY21kKSk7Ci0gICAgaWYgKGhvc3RkYXRhLT5kaXNjb25uZWN0ZWRfcXVldWUpCi0JZHByaW50ayhOREVCVUdfQUJPUlQsICJzY3NpJWQ6IHJlc2V0IGFib3J0ZWQgZGlzY29ubmVjdGVkIGNvbW1hbmQocylcbiIsIEhfTk8oY21kKSk7Ci0KLSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0gICAgaG9zdGRhdGEtPmlzc3VlX3F1ZXVlID0gTlVMTDsKLSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKLSAgICBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlID0gTlVMTDsKLSNpZmRlZiBTVVBQT1JUX1RBR1MKLSAgICBmcmVlX2FsbF90YWdzKCk7Ci0jZW5kaWYKLSAgICBmb3IoIGkgPSAwOyBpIDwgODsgKytpICkKLQlob3N0ZGF0YS0+YnVzeVtpXSA9IDA7Ci0jaWZkZWYgUkVBTF9ETUEKLSAgICBob3N0ZGF0YS0+ZG1hX2xlbiA9IDA7Ci0jZW5kaWYKLSAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLSAgICAvKiB3ZSBkaWQgbm8gY29tcGxldGUgcmVzZXQgb2YgYWxsIGNvbW1hbmRzLCBzbyBhIHdha2V1cCBpcyByZXF1aXJlZCAqLwotICAgIHJldHVybiBTVUNDRVNTOwotI2VuZGlmIC8qIDEgKi8KLX0KLQotLyogTG9jYWwgVmFyaWFibGVzOiAqLwotLyogdGFiLXdpZHRoOiA4ICAgICAqLwotLyogRW5kOiAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jCmluZGV4IDk3MDdiNzQuLjJhOTA2ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMKQEAgLTIwLDkwICsyMCw1OSBAQAogICogR2VuZXJpYyBHZW5lcmljIE5DUjUzODAgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IDE5OTUsIFJ1c3NlbGwgS2luZwotICoKLSAqIEFMUEhBIFJFTEVBU0UgMS4KLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCi0KLS8qCi0gKiBUaGlzIGlzIGZyb20gbWFjX3Njc2kuaCwgYnV0IGhleSwgbWF5YmUgdGhpcyBpcyB1c2VmdWwgZm9yIFN1bjMgdG9vISA6KQotICoKLSAqIE9wdGlvbnMgOgotICoKLSAqIFBBUklUWSAtIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcuICBOb3Qgc3VwcG9ydGVkLgotICoKLSAqIFNDU0kyIC0gZW5hYmxlIHN1cHBvcnQgZm9yIFNDU0ktSUkgdGFnZ2VkIHF1ZXVlaW5nLiAgVW50ZXN0ZWQuCi0gKgotICogVVNMRUVQIC0gZW5hYmxlIHN1cHBvcnQgZm9yIGRldmljZXMgdGhhdCBkb24ndCBkaXNjb25uZWN0LiAgVW50ZXN0ZWQuCi0gKi8KLQotI2RlZmluZSBBVVRPU0VOU0UKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vc3VuM2ludHMuaD4KICNpbmNsdWRlIDxhc20vZHZtYS5oPgotI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KLSNpbmNsdWRlIDxhc20vbWFjaGluZXMuaD4KIAotLyogZG1hIG9uISAqLwotI2RlZmluZSBSRUFMX0RNQQotCi0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAic3VuM19zY3NpLmgiCisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgY29yZSBOQ1I1MzgwIGRyaXZlci4gKi8KKworI2RlZmluZSBSRUFMX0RNQQorLyogI2RlZmluZSBTVVBQT1JUX1RBR1MgKi8KKy8qIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGRvIGRtYSBvbiAqLworI2RlZmluZSBETUFfTUlOX1NJWkUgICAgICAgICAgICAgICAgICAgIDEyOQorCisvKiAjZGVmaW5lIE1BWF9UQUdTICAgICAgICAgICAgICAgICAgICAgMzIgKi8KKworI2RlZmluZSBOQ1I1MzgwX2ltcGxlbWVudGF0aW9uX2ZpZWxkcyAgIC8qIG5vbmUgKi8KKworI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKSAgICAgICAgICAgICAgIHN1bjNzY3NpX3JlYWQocmVnKQorI2RlZmluZSBOQ1I1MzgwX3dyaXRlKHJlZywgdmFsdWUpICAgICAgIHN1bjNzY3NpX3dyaXRlKHJlZywgdmFsdWUpCisKKyNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kICAgICAgICAgICBzdW4zc2NzaV9xdWV1ZV9jb21tYW5kCisjZGVmaW5lIE5DUjUzODBfYnVzX3Jlc2V0ICAgICAgICAgICAgICAgc3VuM3Njc2lfYnVzX3Jlc2V0CisjZGVmaW5lIE5DUjUzODBfYWJvcnQgICAgICAgICAgICAgICAgICAgc3VuM3Njc2lfYWJvcnQKKyNkZWZpbmUgTkNSNTM4MF9zaG93X2luZm8gICAgICAgICAgICAgICBzdW4zc2NzaV9zaG93X2luZm8KKyNkZWZpbmUgTkNSNTM4MF9pbmZvICAgICAgICAgICAgICAgICAgICBzdW4zc2NzaV9pbmZvCisKKyNkZWZpbmUgTkNSNTM4MF9kbWFfcmVhZF9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIFwKKyAgICAgICAgc3VuM3Njc2lfZG1hX3NldHVwKGRhdGEsIGNvdW50LCAwKQorI2RlZmluZSBOQ1I1MzgwX2RtYV93cml0ZV9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIFwKKyAgICAgICAgc3VuM3Njc2lfZG1hX3NldHVwKGRhdGEsIGNvdW50LCAxKQorI2RlZmluZSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSkgXAorICAgICAgICBzdW4zc2NzaV9kbWFfcmVzaWR1YWwoaW5zdGFuY2UpCisjZGVmaW5lIE5DUjUzODBfZG1hX3hmZXJfbGVuKGluc3RhbmNlLCBjbWQsIHBoYXNlKSBcCisgICAgICAgIHN1bjNzY3NpX2RtYV94ZmVyX2xlbihjbWQtPlNDcC50aGlzX3Jlc2lkdWFsLCBjbWQsICEoKHBoYXNlKSAmIFNSX0lPKSkKKworI2RlZmluZSBOQ1I1MzgwX2FjcXVpcmVfZG1hX2lycShpbnN0YW5jZSkgICAgKDEpCisjZGVmaW5lIE5DUjUzODBfcmVsZWFzZV9kbWFfaXJxKGluc3RhbmNlKQorCiAjaW5jbHVkZSAiTkNSNTM4MC5oIgogCisKIGV4dGVybiBpbnQgc3VuM19tYXBfdGVzdCh1bnNpZ25lZCBsb25nLCBjaGFyICopOwogCi0jZGVmaW5lIFVTRV9XUkFQUEVSCi0vKiNkZWZpbmUgUkVTRVRfQk9PVCAqLwotI2RlZmluZSBEUklWRVJfU0VUVVAKLQotLyoKLSAqIEJVRyBjYW4gYmUgdXNlZCB0byB0cmlnZ2VyIGEgc3RyYW5nZSBjb2RlLXNpemUgcmVsYXRlZCBoYW5nIG9uIDIuMSBrZXJuZWxzCi0gKi8KLSNpZmRlZiBCVUcKLSN1bmRlZiBSRVNFVF9CT09UCi0jdW5kZWYgRFJJVkVSX1NFVFVQCi0jZW5kaWYKLQotLyogI2RlZmluZSBTVVBQT1JUX1RBR1MgKi8KLQotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLSNkZWZpbmUgRU5BQkxFX0lSUSgpCi0jZWxzZQotI2RlZmluZQlFTkFCTEVfSVJRKCkJZW5hYmxlX2lycSggSVJRX1NVTjNfU0NTSSApOyAKLSNlbmRpZgotCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzY3NpX3N1bjNfaW50cihpbnQgaXJxLCB2b2lkICpkdW1teSk7Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc3VuM3Njc2lfcmVhZChpbnQgcmVnKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBzdW4zc2NzaV93cml0ZShpbnQgcmVnLCBpbnQgdmFsdWUpOwotCiBzdGF0aWMgaW50IHNldHVwX2Nhbl9xdWV1ZSA9IC0xOwogbW9kdWxlX3BhcmFtKHNldHVwX2Nhbl9xdWV1ZSwgaW50LCAwKTsKIHN0YXRpYyBpbnQgc2V0dXBfY21kX3Blcl9sdW4gPSAtMTsKQEAgLTExNyw5ICs4Niw3IEBACiBzdGF0aWMgaW50IHNldHVwX2hvc3RpZCA9IC0xOwogbW9kdWxlX3BhcmFtKHNldHVwX2hvc3RpZCwgaW50LCAwKTsKIAotc3RhdGljIHN0cnVjdCBzY3NpX2NtbmQgKnN1bjNfZG1hX3NldHVwX2RvbmUgPSBOVUxMOwotCi0jZGVmaW5lCVJFU0VUX1JVTl9ET05FCisvKiAjZGVmaW5lIFJFU0VUX0JPT1QgKi8KIAogI2RlZmluZQlBRlRFUl9SRVNFVF9ERUxBWQkoSFovMikKIApAQCAtMTI5LDE4ICs5NiwxNSBAQAogLyogZHZtYSBidWZmZXIgdG8gYWxsb2NhdGUgLS0gMzJrIHNob3VsZCBob3BlZnVsbHkgYmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgKi8KICNkZWZpbmUgU1VOM19EVk1BX0JVRlNJWkUgMHhlMDAwCiAKLS8qIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGRvIGRtYSBvbiAqLwotI2RlZmluZSBTVU4zX0RNQV9NSU5TSVpFIDEyOAotCi1zdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqc3VuM19zY3NpX3JlZ3A7CitzdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqc3VuM19kbWFfc2V0dXBfZG9uZTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpzdW4zX3Njc2lfcmVncDsKIHN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3Qgc3VuM19kbWFfcmVncyAqZHJlZ3M7Ci0jaWZuZGVmIFNVTjNfU0NTSV9WTUUKLXN0YXRpYyBzdHJ1Y3Qgc3VuM191ZGNfcmVncyAqdWRjX3JlZ3MgPSBOVUxMOwotI2VuZGlmCitzdGF0aWMgc3RydWN0IHN1bjNfdWRjX3JlZ3MgKnVkY19yZWdzOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgKnN1bjNfZG1hX29yaWdfYWRkciA9IE5VTEw7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdW4zX2RtYV9vcmlnX2NvdW50ID0gMDsKIHN0YXRpYyBpbnQgc3VuM19kbWFfYWN0aXZlID0gMDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfcmVzaWR1YWwgPSAwOworc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKmRlZmF1bHRfaW5zdGFuY2U7CiAKIC8qCiAgKiBOQ1IgNTM4MCByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zCkBAIC0xNDgsMTIgKzExMiwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc3VuM3Njc2lfcmVhZChpbnQgcmVnKQogewotCXJldHVybiggc3VuM19zY3NpX3JlZ3BbcmVnXSApOworCXJldHVybiBpbl84KHN1bjNfc2NzaV9yZWdwICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN1bjNzY3NpX3dyaXRlKGludCByZWcsIGludCB2YWx1ZSkKIHsKLQlzdW4zX3Njc2lfcmVncFtyZWddID0gdmFsdWU7CisJb3V0Xzgoc3VuM19zY3NpX3JlZ3AgKyByZWcsIHZhbHVlKTsKIH0KIAogI2lmbmRlZiBTVU4zX1NDU0lfVk1FCkBAIC0xODAsMjEzICsxNDQsMTAgQEAKIH0KICNlbmRpZgogCi0vKgotICogWFhYOiBzdGF0dXMgZGVidWcKLSAqLwotc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKmRlZmF1bHRfaW5zdGFuY2U7Ci0KLS8qCi0gKiBGdW5jdGlvbiA6IGludCBzdW4zc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCi0gKgotICogUHVycG9zZSA6IGluaXRpYWxpemVzIG1hYyBOQ1I1MzgwIGRyaXZlciBiYXNlZCBvbiB0aGUKLSAqCWNvbW1hbmQgbGluZSAvIGNvbXBpbGUgdGltZSBwb3J0IGFuZCBpcnEgZGVmaW5pdGlvbnMuCi0gKgotICogSW5wdXRzIDogdHBudCAtIHRlbXBsYXRlIGZvciB0aGlzIFNDU0kgYWRhcHRlci4KLSAqCi0gKiBSZXR1cm5zIDogMSBpZiBhIGhvc3QgYWRhcHRlciB3YXMgZm91bmQsIDAgaWYgbm90LgotICoKLSAqLwotIAotc3RhdGljIGludCBfX2luaXQgc3VuM3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIsIGlycTsKLQlzdGF0aWMgaW50IGNhbGxlZCA9IDA7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7Ci0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgYWRkcnNbM10gPSB7IElPQkFTRV9TVU4zX1ZNRVNDU0ksCi0JCQkJICAgSU9CQVNFX1NVTjNfVk1FU0NTSSArIDB4NDAwMCwKLQkJCQkgICAwIH07Ci0JdW5zaWduZWQgbG9uZyB2ZWNzWzNdID0geyBTVU4zX1ZFQ19WTUVTQ1NJMCwKLQkJCQkgIFNVTjNfVkVDX1ZNRVNDU0kxLAotCQkJCSAgMCB9OwotI2VuZGlmCi0KLQkvKiBjaGVjayB0aGF0IHRoaXMgbWFjaGluZSBoYXMgYW4gb25ib2FyZCA1MzgwICovCi0Jc3dpdGNoKGlkcHJvbS0+aWRfbWFjaHR5cGUpIHsKLSNpZmRlZiBTVU4zX1NDU0lfVk1FCi0JY2FzZSBTTV9TVU4zfFNNXzNfMTYwOgotCWNhc2UgU01fU1VOM3xTTV8zXzI2MDoKLQkJYnJlYWs7Ci0jZWxzZQotCWNhc2UgU01fU1VOM3xTTV8zXzUwOgotCWNhc2UgU01fU1VOM3xTTV8zXzYwOgotCQlicmVhazsKLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYoY2FsbGVkKQotCQlyZXR1cm4gMDsKLQotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQl0cG50LT5wcm9jX25hbWUgPSAiU3VuMyA1MzgwIFZNRSBTQ1NJIjsKLSNlbHNlCi0JdHBudC0+cHJvY19uYW1lID0gIlN1bjMgNTM4MCBTQ1NJIjsKLSNlbmRpZgotCi0JLyogc2V0dXAgdmFyaWFibGVzICovCi0JdHBudC0+Y2FuX3F1ZXVlID0KLQkJKHNldHVwX2Nhbl9xdWV1ZSA+IDApID8gc2V0dXBfY2FuX3F1ZXVlIDogQ0FOX1FVRVVFOwotCXRwbnQtPmNtZF9wZXJfbHVuID0KLQkJKHNldHVwX2NtZF9wZXJfbHVuID4gMCkgPyBzZXR1cF9jbWRfcGVyX2x1biA6IENNRF9QRVJfTFVOOwotCXRwbnQtPnNnX3RhYmxlc2l6ZSA9IAotCQkoc2V0dXBfc2dfdGFibGVzaXplID49IDApID8gc2V0dXBfc2dfdGFibGVzaXplIDogU0dfVEFCTEVTSVpFOwotCi0JaWYgKHNldHVwX2hvc3RpZCA+PSAwKQotCQl0cG50LT50aGlzX2lkID0gc2V0dXBfaG9zdGlkOwotCWVsc2UgewotCQkvKiB1c2UgNyBhcyBkZWZhdWx0ICovCi0JCXRwbnQtPnRoaXNfaWQgPSA3OwotCX0KLQotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQlpb2FkZHIgPSAwOwotCWZvciAoaSA9IDA7IGFkZHJzW2ldICE9IDA7IGkrKykgewotCQl1bnNpZ25lZCBjaGFyIHg7Ci0KLQkJaW9hZGRyID0gKHVuc2lnbmVkIGxvbmcpc3VuM19pb3JlbWFwKGFkZHJzW2ldLCBQQUdFX1NJWkUsCi0JCQkJCQkgICAgIFNVTjNfUEFHRV9UWVBFX1ZNRTE2KTsKLQkJaXJxID0gdmVjc1tpXTsKLQkJc3VuM19zY3NpX3JlZ3AgPSAodW5zaWduZWQgY2hhciAqKWlvYWRkcjsKLQotCQlkcmVncyA9IChzdHJ1Y3Qgc3VuM19kbWFfcmVncyAqKSgoKHVuc2lnbmVkIGNoYXIgKilpb2FkZHIpICsgOCk7Ci0KLQkJaWYgKHN1bjNfbWFwX3Rlc3QoKHVuc2lnbmVkIGxvbmcpZHJlZ3MsICZ4KSkgewotCQkJdW5zaWduZWQgc2hvcnQgb2xkY3NyOwotCi0JCQlvbGRjc3IgPSBkcmVncy0+Y3NyOwotCQkJZHJlZ3MtPmNzciA9IDA7Ci0JCQl1ZGVsYXkoU1VOM19ETUFfREVMQVkpOwotCQkJaWYgKGRyZWdzLT5jc3IgPT0gMHgxNDAwKQotCQkJCWJyZWFrOwotCi0JCQlkcmVncy0+Y3NyID0gb2xkY3NyOwotCQl9Ci0KLQkJaW91bm1hcCgodm9pZCAqKWlvYWRkcik7Ci0JCWlvYWRkciA9IDA7Ci0JfQotCi0JaWYgKCFpb2FkZHIpCi0JCXJldHVybiAwOwotI2Vsc2UKLQlpcnEgPSBJUlFfU1VOM19TQ1NJOwotCWlvYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXAoSU9CQVNFX1NVTjNfU0NTSSwgUEFHRV9TSVpFKTsKLQlzdW4zX3Njc2lfcmVncCA9ICh1bnNpZ25lZCBjaGFyICopaW9hZGRyOwotCi0JZHJlZ3MgPSAoc3RydWN0IHN1bjNfZG1hX3JlZ3MgKikoKCh1bnNpZ25lZCBjaGFyICopaW9hZGRyKSArIDgpOwotCi0JaWYoKHVkY19yZWdzID0gZHZtYV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdW4zX3VkY19yZWdzKSkpCi0JICAgPT0gTlVMTCkgewotCSAgICAgcHJpbnRrKCJTVU4zIFNjc2kgY291bGRuJ3QgYWxsb2NhdGUgRFZNQSBtZW1vcnkhXG4iKTsKLQkgICAgIHJldHVybiAwOwotCX0KLSNlbmRpZgotI2lmZGVmIFNVUFBPUlRfVEFHUwotCWlmIChzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPCAwKQotCQlzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcgPSBVU0VfVEFHR0VEX1FVRVVJTkc7Ci0jZW5kaWYKLQotCWluc3RhbmNlID0gc2NzaV9yZWdpc3RlciAodHBudCwgc2l6ZW9mKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhKSk7Ci0JaWYoaW5zdGFuY2UgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JCQotCWRlZmF1bHRfaW5zdGFuY2UgPSBpbnN0YW5jZTsKLQotICAgICAgICBpbnN0YW5jZS0+aW9fcG9ydCA9ICh1bnNpZ25lZCBsb25nKSBpb2FkZHI7Ci0JaW5zdGFuY2UtPmlycSA9IGlycTsKLQotCU5DUjUzODBfaW5pdChpbnN0YW5jZSwgMCk7Ci0KLQlpbnN0YW5jZS0+bl9pb19wb3J0ID0gMzI7Ci0KLSAgICAgICAgKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YSktPmN0cmwgPSAwOwotCi0JaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIHNjc2lfc3VuM19pbnRyLAotCQkJICAgICAwLCAiU3VuM1NDU0ktNTM4MCIsIGluc3RhbmNlKSkgewotI2lmbmRlZiBSRUFMX0RNQQotCQlwcmludGsoInNjc2klZDogSVJRJWQgbm90IGZyZWUsIGludGVycnVwdHMgZGlzYWJsZWRcbiIsCi0JCSAgICAgICBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7Ci0JCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOwotI2Vsc2UKLQkJcHJpbnRrKCJzY3NpJWQ6IElSUSVkIG5vdCBmcmVlLCBiYWlsaW5nIG91dFxuIiwKLQkJICAgICAgIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQl9Ci0JCi0JcHJfaW5mbygic2NzaSVkOiAlcyBhdCBwb3J0ICVsWCBpcnEiLCBpbnN0YW5jZS0+aG9zdF9ubywKLQkJdHBudC0+cHJvY19uYW1lLCBpbnN0YW5jZS0+aW9fcG9ydCk7Ci0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkKLQkJcHJpbnRrICgicyBkaXNhYmxlZCIpOwotCWVsc2UKLQkJcHJpbnRrICgiICVkIiwgaW5zdGFuY2UtPmlycSk7Ci0JcHJpbnRrKCIgb3B0aW9ucyBDQU5fUVVFVUU9JWQgQ01EX1BFUl9MVU49JWQgcmVsZWFzZT0lZCIsCi0JICAgICAgIGluc3RhbmNlLT5jYW5fcXVldWUsIGluc3RhbmNlLT5jbWRfcGVyX2x1biwKLQkgICAgICAgU1VOM1NDU0lfUFVCTElDX1JFTEVBU0UpOwotCXByaW50aygiXG5zY3NpJWQ6IiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwotCU5DUjUzODBfcHJpbnRfb3B0aW9ucyhpbnN0YW5jZSk7Ci0JcHJpbnRrKCJcbiIpOwotCi0JZHJlZ3MtPmNzciA9IDA7Ci0JdWRlbGF5KFNVTjNfRE1BX0RFTEFZKTsKLQlkcmVncy0+Y3NyID0gQ1NSX1NDU0kgfCBDU1JfRklGTyB8IENTUl9JTlRSOwotCXVkZWxheShTVU4zX0RNQV9ERUxBWSk7Ci0JZHJlZ3MtPmZpZm9fY291bnQgPSAwOwotI2lmZGVmIFNVTjNfU0NTSV9WTUUKLQlkcmVncy0+Zmlmb19jb3VudF9oaSA9IDA7Ci0JZHJlZ3MtPmRtYV9hZGRyX2hpID0gMDsKLQlkcmVncy0+ZG1hX2FkZHJfbG8gPSAwOwotCWRyZWdzLT5kbWFfY291bnRfaGkgPSAwOwotCWRyZWdzLT5kbWFfY291bnRfbG8gPSAwOwotCi0JZHJlZ3MtPml2ZWN0ID0gVk1FX0RBVEEyNCB8IChpbnN0YW5jZS0+aXJxICYgMHhmZik7Ci0jZW5kaWYKLQotCWNhbGxlZCA9IDE7Ci0KICNpZmRlZiBSRVNFVF9CT09UCi0Jc3VuM19zY3NpX3Jlc2V0X2Jvb3QoaW5zdGFuY2UpOwotI2VuZGlmCi0KLQlyZXR1cm4gMTsKLX0KLQotaW50IHN1bjNzY3NpX3JlbGVhc2UgKHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQotewotCWlmIChzaHBudC0+aXJxICE9IFNDU0lfSVJRX05PTkUpCi0JCWZyZWVfaXJxKHNocG50LT5pcnEsIHNocG50KTsKLQotCWlvdW5tYXAoKHZvaWQgKilzdW4zX3Njc2lfcmVncCk7Ci0KLQlOQ1I1MzgwX2V4aXQoc2hwbnQpOwotCXJldHVybiAwOwotfQotCi0jaWZkZWYgUkVTRVRfQk9PVAotLyoKLSAqIE91ciAnYnVzIHJlc2V0IG9uIGJvb3QnIGZ1bmN0aW9uCi0gKi8KLQogc3RhdGljIHZvaWQgc3VuM19zY3NpX3Jlc2V0X2Jvb3Qoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQ7Ci0KLQlOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKTsKLQlOQ1I1MzgwX3NldHVwKGluc3RhbmNlKTsKIAkKIAkvKgogCSAqIERvIGEgU0NTSSByZXNldCB0byBjbGVhbiB1cCB0aGUgYnVzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gTm8KQEAgLTQyMiwxMSArMTgzLDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgY29uc3QgY2hhciAqc3VuM3Njc2lfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzcG50KQotewotICAgIHJldHVybiAiIjsKLX0KLQogLy8gc2FmZSBiaXRzIGZvciB0aGUgQ1NSCiAjZGVmaW5lIENTUl9HT09EIDB4MDYwZgogCkBAIC00NjgsNyArMjI0LDYgQEAKIHZvaWQgc3VuM19zdW4zX2RlYnVnICh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCk7CiAKIAlpZiAoZGVmYXVsdF9pbnN0YW5jZSkgewogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtNzMyLDI1ICs0ODcsMjAwIEBACiAKIH0KIAkKLSNpbmNsdWRlICJzdW4zX05DUjUzODAuYyIKKyNpbmNsdWRlICJhdGFyaV9OQ1I1MzgwLmMiCiAKLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisjZGVmaW5lIFNVTjNfU0NTSV9OQU1FICAgICAgICAgICJTdW4zIE5DUjUzODAgVk1FIFNDU0kiCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAgICAgICAgICJzdW4zX3Njc2lfdm1lIgorI2Vsc2UKKyNkZWZpbmUgU1VOM19TQ1NJX05BTUUgICAgICAgICAgIlN1bjMgTkNSNTM4MCBTQ1NJIgorI2RlZmluZSBEUlZfTU9EVUxFX05BTUUgICAgICAgICAic3VuM19zY3NpIgorI2VuZGlmCisKKyNkZWZpbmUgUEZYICAgICAgICAgICAgICAgICAgICAgRFJWX01PRFVMRV9OQU1FICI6ICIKKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc3VuM19zY3NpX3RlbXBsYXRlID0geworCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAorCS5wcm9jX25hbWUJCT0gRFJWX01PRFVMRV9OQU1FLAogCS5zaG93X2luZm8JCT0gc3VuM3Njc2lfc2hvd19pbmZvLAogCS5uYW1lCQkJPSBTVU4zX1NDU0lfTkFNRSwKLQkuZGV0ZWN0CQkJPSBzdW4zc2NzaV9kZXRlY3QsCi0JLnJlbGVhc2UJCT0gc3VuM3Njc2lfcmVsZWFzZSwKIAkuaW5mbwkJCT0gc3VuM3Njc2lfaW5mbywKIAkucXVldWVjb21tYW5kCQk9IHN1bjNzY3NpX3F1ZXVlX2NvbW1hbmQsCiAJLmVoX2Fib3J0X2hhbmRsZXIgICAgICAJPSBzdW4zc2NzaV9hYm9ydCwKIAkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgIAk9IHN1bjNzY3NpX2J1c19yZXNldCwKLQkuY2FuX3F1ZXVlCQk9IENBTl9RVUVVRSwKKwkuY2FuX3F1ZXVlCQk9IDE2LAogCS50aGlzX2lkCQk9IDcsCi0JLnNnX3RhYmxlc2l6ZQkJPSBTR19UQUJMRVNJWkUsCi0JLmNtZF9wZXJfbHVuCQk9IENNRF9QRVJfTFVOLAorCS5zZ190YWJsZXNpemUJCT0gU0dfTk9ORSwKKwkuY21kX3Blcl9sdW4JCT0gMiwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRElTQUJMRV9DTFVTVEVSSU5HCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBzdW4zX3Njc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZTsKKwlpbnQgZXJyb3I7CisJc3RydWN0IHJlc291cmNlICppcnEsICptZW07CisJdW5zaWduZWQgY2hhciAqaW9hZGRyOworCWludCBob3N0X2ZsYWdzID0gMDsKKyNpZmRlZiBTVU4zX1NDU0lfVk1FCisJaW50IGk7CisjZW5kaWYKIAotI2luY2x1ZGUgInNjc2lfbW9kdWxlLmMiCisJaWYgKHNldHVwX2Nhbl9xdWV1ZSA+IDApCisJCXN1bjNfc2NzaV90ZW1wbGF0ZS5jYW5fcXVldWUgPSBzZXR1cF9jYW5fcXVldWU7CisJaWYgKHNldHVwX2NtZF9wZXJfbHVuID4gMCkKKwkJc3VuM19zY3NpX3RlbXBsYXRlLmNtZF9wZXJfbHVuID0gc2V0dXBfY21kX3Blcl9sdW47CisJaWYgKHNldHVwX3NnX3RhYmxlc2l6ZSA+PSAwKQorCQlzdW4zX3Njc2lfdGVtcGxhdGUuc2dfdGFibGVzaXplID0gc2V0dXBfc2dfdGFibGVzaXplOworCWlmIChzZXR1cF9ob3N0aWQgPj0gMCkKKwkJc3VuM19zY3NpX3RlbXBsYXRlLnRoaXNfaWQgPSBzZXR1cF9ob3N0aWQgJiA3OwogCisjaWZkZWYgU1VOM19TQ1NJX1ZNRQorCWlvYWRkciA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIHg7CisKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCBpKTsKKwkJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKKwkJaWYgKCFpcnEgfHwgIW1lbSkKKwkJCWJyZWFrOworCisJCWlvYWRkciA9IHN1bjNfaW9yZW1hcChtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSksCisJCSAgICAgICAgICAgICAgICAgICAgICBTVU4zX1BBR0VfVFlQRV9WTUUxNik7CisJCWRyZWdzID0gKHN0cnVjdCBzdW4zX2RtYV9yZWdzICopKGlvYWRkciArIDgpOworCisJCWlmIChzdW4zX21hcF90ZXN0KCh1bnNpZ25lZCBsb25nKWRyZWdzLCAmeCkpIHsKKwkJCXVuc2lnbmVkIHNob3J0IG9sZGNzcjsKKworCQkJb2xkY3NyID0gZHJlZ3MtPmNzcjsKKwkJCWRyZWdzLT5jc3IgPSAwOworCQkJdWRlbGF5KFNVTjNfRE1BX0RFTEFZKTsKKwkJCWlmIChkcmVncy0+Y3NyID09IDB4MTQwMCkKKwkJCQlicmVhazsKKworCQkJZHJlZ3MtPmNzciA9IG9sZGNzcjsKKwkJfQorCisJCWlvdW5tYXAoaW9hZGRyKTsKKwkJaW9hZGRyID0gTlVMTDsKKwl9CisJaWYgKCFpb2FkZHIpCisJCXJldHVybiAtRU5PREVWOworI2Vsc2UKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFpcnEgfHwgIW1lbSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpb2FkZHIgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisJZHJlZ3MgPSAoc3RydWN0IHN1bjNfZG1hX3JlZ3MgKikoaW9hZGRyICsgOCk7CisKKwl1ZGNfcmVncyA9IGR2bWFfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3VuM191ZGNfcmVncykpOworCWlmICghdWRjX3JlZ3MpIHsKKwkJcHJfZXJyKFBGWCAiY291bGRuJ3QgYWxsb2NhdGUgRFZNQSBtZW1vcnkhXG4iKTsKKwkJaW91bm1hcChpb2FkZHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisjZW5kaWYKKworCXN1bjNfc2NzaV9yZWdwID0gaW9hZGRyOworCisJaW5zdGFuY2UgPSBzY3NpX2hvc3RfYWxsb2MoJnN1bjNfc2NzaV90ZW1wbGF0ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEpKTsKKwlpZiAoIWluc3RhbmNlKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2FsbG9jOworCX0KKwlkZWZhdWx0X2luc3RhbmNlID0gaW5zdGFuY2U7CisKKwlpbnN0YW5jZS0+aW9fcG9ydCA9ICh1bnNpZ25lZCBsb25nKWlvYWRkcjsKKwlpbnN0YW5jZS0+aXJxID0gaXJxLT5zdGFydDsKKworI2lmZGVmIFNVUFBPUlRfVEFHUworCWhvc3RfZmxhZ3MgfD0gc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID4gMCA/IEZMQUdfVEFHR0VEX1FVRVVJTkcgOiAwOworI2VuZGlmCisKKwlOQ1I1MzgwX2luaXQoaW5zdGFuY2UsIGhvc3RfZmxhZ3MpOworCisJZXJyb3IgPSByZXF1ZXN0X2lycShpbnN0YW5jZS0+aXJxLCBzY3NpX3N1bjNfaW50ciwgMCwKKwkgICAgICAgICAgICAgICAgICAgICJOQ1I1MzgwIiwgaW5zdGFuY2UpOworCWlmIChlcnJvcikgeworI2lmZGVmIFJFQUxfRE1BCisJCXByX2VycihQRlggInNjc2klZDogSVJRICVkIG5vdCBmcmVlLCBiYWlsaW5nIG91dFxuIiwKKwkJICAgICAgIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKKwkJZ290byBmYWlsX2lycTsKKyNlbHNlCisJCXByX3dhcm4oUEZYICJzY3NpJWQ6IElSUSAlZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwKKwkJICAgICAgICBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7CisJCWluc3RhbmNlLT5pcnEgPSBOT19JUlE7CisjZW5kaWYKKwl9CisKKwlkcmVncy0+Y3NyID0gMDsKKwl1ZGVsYXkoU1VOM19ETUFfREVMQVkpOworCWRyZWdzLT5jc3IgPSBDU1JfU0NTSSB8IENTUl9GSUZPIHwgQ1NSX0lOVFI7CisJdWRlbGF5KFNVTjNfRE1BX0RFTEFZKTsKKwlkcmVncy0+Zmlmb19jb3VudCA9IDA7CisjaWZkZWYgU1VOM19TQ1NJX1ZNRQorCWRyZWdzLT5maWZvX2NvdW50X2hpID0gMDsKKwlkcmVncy0+ZG1hX2FkZHJfaGkgPSAwOworCWRyZWdzLT5kbWFfYWRkcl9sbyA9IDA7CisJZHJlZ3MtPmRtYV9jb3VudF9oaSA9IDA7CisJZHJlZ3MtPmRtYV9jb3VudF9sbyA9IDA7CisKKwlkcmVncy0+aXZlY3QgPSBWTUVfREFUQTI0IHwgKGluc3RhbmNlLT5pcnEgJiAweGZmKTsKKyNlbmRpZgorCisjaWZkZWYgUkVTRVRfQk9PVAorCXN1bjNfc2NzaV9yZXNldF9ib290KGluc3RhbmNlKTsKKyNlbmRpZgorCisJZXJyb3IgPSBzY3NpX2FkZF9ob3N0KGluc3RhbmNlLCBOVUxMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF9ob3N0OworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5zdGFuY2UpOworCisJc2NzaV9zY2FuX2hvc3QoaW5zdGFuY2UpOworCXJldHVybiAwOworCitmYWlsX2hvc3Q6CisJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQorCQlmcmVlX2lycShpbnN0YW5jZS0+aXJxLCBpbnN0YW5jZSk7CitmYWlsX2lycToKKwlOQ1I1MzgwX2V4aXQoaW5zdGFuY2UpOworCXNjc2lfaG9zdF9wdXQoaW5zdGFuY2UpOworZmFpbF9hbGxvYzoKKwlpZiAodWRjX3JlZ3MpCisJCWR2bWFfZnJlZSh1ZGNfcmVncyk7CisJaW91bm1hcChzdW4zX3Njc2lfcmVncCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBzdW4zX3Njc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNjc2lfcmVtb3ZlX2hvc3QoaW5zdGFuY2UpOworCWlmIChpbnN0YW5jZS0+aXJxICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEoaW5zdGFuY2UtPmlycSwgaW5zdGFuY2UpOworCU5DUjUzODBfZXhpdChpbnN0YW5jZSk7CisJc2NzaV9ob3N0X3B1dChpbnN0YW5jZSk7CisJaWYgKHVkY19yZWdzKQorCQlkdm1hX2ZyZWUodWRjX3JlZ3MpOworCWlvdW5tYXAoc3VuM19zY3NpX3JlZ3ApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdW4zX3Njc2lfZHJpdmVyID0geworCS5yZW1vdmUgPSBfX2V4aXRfcChzdW4zX3Njc2lfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9IERSVl9NT0RVTEVfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXJfcHJvYmUoc3VuM19zY3NpX2RyaXZlciwgc3VuM19zY3NpX3Byb2JlKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9NT0RVTEVfTkFNRSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmggYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmgKaW5kZXggZTk2YTM3Yy4uZDIyNzQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuaApAQCAtMTMsOTUgKzEzLDExIEBACiAgKgkoVW5peCBhbmQgTGludXggY29uc3VsdGluZyBhbmQgY3VzdG9tIHByb2dyYW1taW5nKQogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKLSAqCi0gKiBBTFBIQSBSRUxFQVNFIDEuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb25zdWx0Ci0gKgotICogTkNSIDUzODAgRmFtaWx5Ci0gKiBTQ1NJIFByb3RvY29sIENvbnRyb2xsZXIKLSAqIERhdGFib29rCi0gKgotICogTkNSIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDE2MzUgQWVyb3BsYXphIERyaXZlCi0gKiBDb2xvcmFkbyBTcHJpbmdzLCBDTyA4MDkxNgotICogMSsgKDcxOSkgNTc4LTM0MDAKLSAqIDErICg4MDApIDMzNC01NDU0CiAgKi8KIAogI2lmbmRlZiBTVU4zX1NDU0lfSAogI2RlZmluZSBTVU4zX1NDU0lfSAogCi0jZGVmaW5lIFNVTjNTQ1NJX1BVQkxJQ19SRUxFQVNFIDEKLQotLyoKLSAqIEludDogbGV2ZWwgMiBhdXRvdmVjdG9yCi0gKiBJTzogdHlwZSAxLCBiYXNlIDB4MDAxNDAwMDAsIDUgYml0cyBwaHlzIHNwYWNlOiBBPDQuLjA+Ci0gKi8KLSNkZWZpbmUgSVJRX1NVTjNfU0NTSSAyCi0jZGVmaW5lIElPQkFTRV9TVU4zX1NDU0kgMHgwMDE0MDAwMAotCi0jZGVmaW5lIElPQkFTRV9TVU4zX1ZNRVNDU0kgMHhmZjIwMDAwMAotCi1zdGF0aWMgaW50IHN1bjNzY3NpX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IHN1bjNzY3NpX2RldGVjdCAoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKLXN0YXRpYyBjb25zdCBjaGFyICpzdW4zc2NzaV9pbmZvIChzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotc3RhdGljIGludCBzdW4zc2NzaV9idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgc3VuM3Njc2lfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IHN1bjNzY3NpX3JlbGVhc2UgKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci0KLSNpZm5kZWYgQ01EX1BFUl9MVU4KLSNkZWZpbmUgQ01EX1BFUl9MVU4gMgotI2VuZGlmCi0KLSNpZm5kZWYgQ0FOX1FVRVVFCi0jZGVmaW5lIENBTl9RVUVVRSAxNgotI2VuZGlmCi0KLSNpZm5kZWYgU0dfVEFCTEVTSVpFCi0jZGVmaW5lIFNHX1RBQkxFU0laRSBTR19OT05FCi0jZW5kaWYKLQotI2lmbmRlZiBNQVhfVEFHUwotI2RlZmluZSBNQVhfVEFHUyAzMgotI2VuZGlmCi0KLSNpZm5kZWYgVVNFX1RBR0dFRF9RVUVVSU5HCi0jZGVmaW5lCVVTRV9UQUdHRURfUVVFVUlORyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgotCi0jaWZkZWYgU1VOM19TQ1NJX1ZNRQotI2RlZmluZSBTVU4zX1NDU0lfTkFNRSAiU3VuMyBOQ1I1MzgwIFZNRSBTQ1NJIgotI2Vsc2UKLSNkZWZpbmUgU1VOM19TQ1NJX05BTUUgIlN1bjMgTkNSNTM4MCBTQ1NJIgotI2VuZGlmCi0KLSNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMgXAotICAgIGludCBwb3J0LCBjdHJsCi0KLSNkZWZpbmUgTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCkgXAotICAgICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICpfaW5zdGFuY2UKLQotI2RlZmluZSBOQ1I1MzgwX3NldHVwKGluc3RhbmNlKSBcCi0gICAgICAgIF9pbnN0YW5jZSA9IGluc3RhbmNlCi0KLSNkZWZpbmUgTkNSNTM4MF9yZWFkKHJlZykgc3VuM3Njc2lfcmVhZChyZWcpCi0jZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkgc3VuM3Njc2lfd3JpdGUocmVnLCB2YWx1ZSkKLQotI2RlZmluZSBOQ1I1MzgwX2ludHIgc3VuM3Njc2lfaW50cgotI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgc3VuM3Njc2lfcXVldWVfY29tbWFuZAotI2RlZmluZSBOQ1I1MzgwX2J1c19yZXNldCBzdW4zc2NzaV9idXNfcmVzZXQKLSNkZWZpbmUgTkNSNTM4MF9hYm9ydCBzdW4zc2NzaV9hYm9ydAotI2RlZmluZSBOQ1I1MzgwX3Nob3dfaW5mbyBzdW4zc2NzaV9zaG93X2luZm8KLSNkZWZpbmUgTkNSNTM4MF9kbWFfeGZlcl9sZW4oaSwgY21kLCBwaGFzZSkgXAotICAgICAgICBzdW4zc2NzaV9kbWFfeGZlcl9sZW4oY21kLT5TQ3AudGhpc19yZXNpZHVhbCxjbWQsKChwaGFzZSkgJiBTUl9JTykgPyAwIDogMSkKLQotI2RlZmluZSBOQ1I1MzgwX2RtYV93cml0ZV9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIHN1bjNzY3NpX2RtYV9zZXR1cChkYXRhLCBjb3VudCwgMSkKLSNkZWZpbmUgTkNSNTM4MF9kbWFfcmVhZF9zZXR1cChpbnN0YW5jZSwgZGF0YSwgY291bnQpIHN1bjNzY3NpX2RtYV9zZXR1cChkYXRhLCBjb3VudCwgMCkKLSNkZWZpbmUgTkNSNTM4MF9kbWFfcmVzaWR1YWwgc3VuM3Njc2lfZG1hX3Jlc2lkdWFsCi0KIC8qIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIC0gbWFpbmx5IERNQSBjb250cm9sIHJlZ3MgKi8KIC8qIHRoZXNlIHN0YXJ0IGF0IHJlZ2Jhc2UgKyA4IC0tIGRpcmVjdGx5IGFmdGVyIHRoZSBOQ1IgcmVncyAqLwogc3RydWN0IHN1bjNfZG1hX3JlZ3MgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYwppbmRleCBlNTllNmY5Li41ZDAwZTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYworKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYwpAQCAtODIwLDkgKzgyMCw3IEBACiAJaWYgKHJlcXRhZ3MgPiBTWU1fQ09ORl9NQVhfVEFHKQogCQlyZXF0YWdzID0gU1lNX0NPTkZfTUFYX1RBRzsKIAlkZXB0aF90b191c2UgPSByZXF0YWdzID8gcmVxdGFncyA6IDE7Ci0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwKLQkJCQlzZGV2LT50YWdnZWRfc3VwcG9ydGVkID8gTVNHX1NJTVBMRV9UQUcgOiAwLAotCQkJCWRlcHRoX3RvX3VzZSk7CisJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgZGVwdGhfdG9fdXNlKTsKIAlscC0+cy5zY2Rldl9kZXB0aCA9IGRlcHRoX3RvX3VzZTsKIAlzeW1fdHVuZV9kZXZfcXVldWluZyh0cCwgc2Rldi0+bHVuLCByZXF0YWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3QxMjguYyBiL2RyaXZlcnMvc2NzaS90MTI4LmMKaW5kZXggOGNjODA5My4uODc4MjhhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3QxMjguYworKysgYi9kcml2ZXJzL3Njc2kvdDEyOC5jCkBAIC0xLDQgKzEsMyBAQAotI2RlZmluZSBBVVRPU0VOU0UKICNkZWZpbmUgUFNFVURPX0RNQQogCiAvKgpAQCAtMTIsOCArMTEsNiBAQAogICoJZHJld0Bjb2xvcmFkby5lZHUKICAqICAgICAgKzEgKDMwMykgNDQwLTQ4OTQKICAqCi0gKiBESVNUUklCVVRJT04gUkVMRUFTRSAzLgotICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCAKICAqCiAgKiBUcmFudG9yIFN5c3RlbXMsIEx0ZC4KQEAgLTI0LDQwICsyMSw5IEBACiAgKiA1NDE1IFJhbmRhbGwgUGxhY2UKICAqIEZyZW1vbnQsIENBIDk0NTM4CiAgKiAxKyAoNDE1KSA3NzAtMTQwMCwgRkFYIDErICg0MTUpIDc3MC05OTEwCi0gKiAKLSAqIGFuZCAKLSAqCi0gKiBOQ1IgNTM4MCBGYW1pbHkKLSAqIFNDU0kgUHJvdG9jb2wgQ29udHJvbGxlcgotICogRGF0YWJvb2sKLSAqCi0gKiBOQ1IgTWljcm9lbGVjdHJvbmljcwotICogMTYzNSBBZXJvcGxhemEgRHJpdmUKLSAqIENvbG9yYWRvIFNwcmluZ3MsIENPIDgwOTE2Ci0gKiAxKyAoNzE5KSA1NzgtMzQwMAotICogMSsgKDgwMCkgMzM0LTU0NTQKICAqLwogCiAvKgotICogT3B0aW9ucyA6IAotICogQVVUT1NFTlNFIC0gaWYgZGVmaW5lZCwgUkVRVUVTVCBTRU5TRSB3aWxsIGJlIHBlcmZvcm1lZCBhdXRvbWF0aWNhbGx5Ci0gKiAgICAgIGZvciBjb21tYW5kcyB0aGF0IHJldHVybiB3aXRoIGEgQ0hFQ0sgQ09ORElUSU9OIHN0YXR1cy4gCi0gKgotICogUFNFVURPX0RNQSAtIGVuYWJsZXMgUFNFVURPLURNQSBoYXJkd2FyZSwgc2hvdWxkIGdpdmUgYSAzLTRYIHBlcmZvcm1hbmNlCi0gKiBpbmNyZWFzZSBjb21wYXJlZCB0byBwb2xsZWQgSS9PLgotICoKLSAqIFBBUklUWSAtIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcuICBOb3Qgc3VwcG9ydGVkLgotICogCi0gKiBTQ1NJMiAtIGVuYWJsZSBzdXBwb3J0IGZvciBTQ1NJLUlJIHRhZ2dlZCBxdWV1ZWluZy4gIFVudGVzdGVkLgotICoKLSAqCi0gKiBVTlNBRkUgLSBsZWF2ZSBpbnRlcnJ1cHRzIGVuYWJsZWQgZHVyaW5nIHBzZXVkby1ETUEgdHJhbnNmZXJzLiAgWW91Ci0gKiAgICAgICAgICBvbmx5IHJlYWxseSB3YW50IHRvIHVzZSB0aGlzIGlmIHlvdSdyZSBoYXZpbmcgYSBwcm9ibGVtIHdpdGgKLSAqICAgICAgICAgIGRyb3BwZWQgY2hhcmFjdGVycyBkdXJpbmcgaGlnaCBzcGVlZCBjb21tdW5pY2F0aW9ucywgYW5kIGV2ZW4KLSAqICAgICAgICAgIHRoZW4sIHlvdSdyZSBnb2luZyB0byBiZSBiZXR0ZXIgb2ZmIHR3aWRkbGluZyB3aXRoIHRyYW5zZmVyc2l6ZS4KLSAqCi0gKiBVU0xFRVAgLSBlbmFibGUgc3VwcG9ydCBmb3IgZGV2aWNlcyB0aGF0IGRvbid0IGRpc2Nvbm5lY3QuICBVbnRlc3RlZC4KLSAqCiAgKiBUaGUgY2FyZCBpcyBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQgaW4gb25lIG9mIHNldmVyYWwgd2F5cyA6IAogICogMS4gIEF1dG9wcm9iZSAoZGVmYXVsdCkgLSBzaW5jZSB0aGUgYm9hcmQgaXMgbWVtb3J5IG1hcHBlZCwgCiAgKiAgICAgYSBCSU9TIHNpZ25hdHVyZSBpcyBzY2FubmVkIGZvciB0byBsb2NhdGUgdGhlIHJlZ2lzdGVycy4KQEAgLTExMSw3ICs3Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgInQxMjguaCIKICNkZWZpbmUgQVVUT1BST0JFX0lSUQpAQCAtMTQ4LDYgKzExMyw3IEBACiAKICNkZWZpbmUgTk9fU0lHTkFUVVJFUyBBUlJBWV9TSVpFKHNpZ25hdHVyZXMpCiAKKyNpZm5kZWYgTU9EVUxFCiAvKgogICogRnVuY3Rpb24gOiB0MTI4X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQogICoKQEAgLTE1OCw5ICsxMjQsMTMgQEAKICAqCiAgKi8KIAotdm9pZCBfX2luaXQgdDEyOF9zZXR1cChjaGFyICpzdHIsIGludCAqaW50cyl7CitzdGF0aWMgaW50IF9faW5pdCB0MTI4X3NldHVwKGNoYXIgKnN0cikKK3sKICAgICBzdGF0aWMgaW50IGNvbW1hbmRsaW5lX2N1cnJlbnQgPSAwOwogICAgIGludCBpOworICAgIGludCBpbnRzWzEwXTsKKworICAgIGdldF9vcHRpb25zKHN0ciwgQVJSQVlfU0laRShpbnRzKSwgaW50cyk7CiAgICAgaWYgKGludHNbMF0gIT0gMikgCiAJcHJpbnRrKCJ0MTI4X3NldHVwIDogdXNhZ2UgdDEyOD1hZGRyZXNzLGlycVxuIik7CiAgICAgZWxzZSAKQEAgLTE3NCw4ICsxNDQsMTIgQEAKIAkJfQogCSAgICArK2NvbW1hbmRsaW5lX2N1cnJlbnQ7CiAJfQorICAgIHJldHVybiAxOwogfQogCitfX3NldHVwKCJ0MTI4PSIsIHQxMjhfc2V0dXApOworI2VuZGlmCisKIC8qIAogICogRnVuY3Rpb24gOiBpbnQgdDEyOF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCiAgKgpAQCAtMTg5LDE3ICsxNjMsMTQgQEAKICAqCiAgKi8KIAotaW50IF9faW5pdCB0MTI4X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCl7CitzdGF0aWMgaW50IF9faW5pdCB0MTI4X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQorewogICAgIHN0YXRpYyBpbnQgY3VycmVudF9vdmVycmlkZSA9IDAsIGN1cnJlbnRfYmFzZSA9IDA7CiAgICAgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7CiAgICAgdW5zaWduZWQgbG9uZyBiYXNlOwogICAgIHZvaWQgX19pb21lbSAqcDsKICAgICBpbnQgc2lnLCBjb3VudDsKIAotICAgIHRwbnQtPnByb2NfbmFtZSA9ICJ0MTI4IjsKLSAgICB0cG50LT5zaG93X2luZm8gPSB0MTI4X3Nob3dfaW5mbzsKLSAgICB0cG50LT53cml0ZV9pbmZvID0gdDEyOF93cml0ZV9pbmZvOwotCiAgICAgZm9yIChjb3VudCA9IDA7IGN1cnJlbnRfb3ZlcnJpZGUgPCBOT19PVkVSUklERVM7ICsrY3VycmVudF9vdmVycmlkZSkgewogCWJhc2UgPSAwOwogCXAgPSBOVUxMOwpAQCAtMjU0LDE1ICsyMjUsMTkgQEAKIAllbHNlIAogCSAgICBpbnN0YW5jZS0+aXJxID0gTkNSNTM4MF9wcm9iZV9pcnEoaW5zdGFuY2UsIFQxMjhfSVJRUyk7CiAKLQlpZiAoaW5zdGFuY2UtPmlycSAhPSBTQ1NJX0lSUV9OT05FKSAKKwkvKiBDb21wYXRpYmlsaXR5IHdpdGggZG9jdW1lbnRlZCBOQ1I1MzgwIGtlcm5lbCBwYXJhbWV0ZXJzICovCisJaWYgKGluc3RhbmNlLT5pcnEgPT0gMjU1KQorCQlpbnN0YW5jZS0+aXJxID0gTk9fSVJROworCisJaWYgKGluc3RhbmNlLT5pcnEgIT0gTk9fSVJRKQogCSAgICBpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgdDEyOF9pbnRyLCAwLCAidDEyOCIsCiAJCQkgICAgaW5zdGFuY2UpKSB7CiAJCXByaW50aygic2NzaSVkIDogSVJRJWQgbm90IGZyZWUsIGludGVycnVwdHMgZGlzYWJsZWRcbiIsIAogCQkgICAgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwotCQlpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKKwkJaW5zdGFuY2UtPmlycSA9IE5PX0lSUTsKIAkgICAgfSAKIAotCWlmIChpbnN0YW5jZS0+aXJxID09IFNDU0lfSVJRX05PTkUpIHsKKwlpZiAoaW5zdGFuY2UtPmlycSA9PSBOT19JUlEpIHsKIAkgICAgcHJpbnRrKCJzY3NpJWQgOiBpbnRlcnJ1cHRzIG5vdCBlbmFibGVkLiBmb3IgYmV0dGVyIGludGVyYWN0aXZlIHBlcmZvcm1hbmNlLFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCSAgICBwcmludGsoInNjc2klZCA6IHBsZWFzZSBqdW1wZXIgdGhlIGJvYXJkIGZvciBhIGZyZWUgSVJRLlxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCX0KQEAgLTI3MSwxNiArMjQ2LDYgQEAKIAlwcmludGsoInNjc2klZCA6IGlycSA9ICVkXG4iLCBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7CiAjZW5kaWYKIAotCXByaW50aygic2NzaSVkIDogYXQgMHglMDhseCIsIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+YmFzZSk7Ci0JaWYgKGluc3RhbmNlLT5pcnEgPT0gU0NTSV9JUlFfTk9ORSkKLQkgICAgcHJpbnRrICgiIGludGVycnVwdHMgZGlzYWJsZWQiKTsKLQllbHNlIAotCSAgICBwcmludGsgKCIgaXJxICVkIiwgaW5zdGFuY2UtPmlycSk7Ci0JcHJpbnRrKCIgb3B0aW9ucyBDQU5fUVVFVUU9JWQgIENNRF9QRVJfTFVOPSVkIHJlbGVhc2U9JWQiLAotCSAgICBDQU5fUVVFVUUsIENNRF9QRVJfTFVOLCBUMTI4X1BVQkxJQ19SRUxFQVNFKTsKLQlOQ1I1MzgwX3ByaW50X29wdGlvbnMoaW5zdGFuY2UpOwotCXByaW50aygiXG4iKTsKLQogCSsrY3VycmVudF9vdmVycmlkZTsKIAkrK2NvdW50OwogICAgIH0KQEAgLTI5MSw3ICsyNTYsNyBAQAogewogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwogCU5DUjUzODBfc2V0dXAoc2hvc3QpOwotCWlmIChzaG9zdC0+aXJxKQorCWlmIChzaG9zdC0+aXJxICE9IE5PX0lSUSkKIAkJZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogCU5DUjUzODBfZXhpdChzaG9zdCk7CiAJaWYgKHNob3N0LT5pb19wb3J0ICYmIHNob3N0LT5uX2lvX3BvcnQpCkBAIC0zMjEsOCArMjg2LDggQEAKICAqIGFuZCBtYXRjaGluZyB0aGUgSF9DX1MgY29vcmRpbmF0ZXMgdG8gd2hhdCBET1MgdXNlcy4KICAqLwogCi1pbnQgdDEyOF9iaW9zcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAotCQlzZWN0b3JfdCBjYXBhY2l0eSwgaW50ICogaXApCitzdGF0aWMgaW50IHQxMjhfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yX3QgY2FwYWNpdHksIGludCAqaXApCiB7CiAgIGlwWzBdID0gNjQ7CiAgIGlwWzFdID0gMzI7CkBAIC00MzAsNiArMzk1LDEwIEBACiAJLm5hbWUgICAgICAgICAgID0gIlRyYW50b3IgVDEyOC9UMTI4Ri9UMjI4IiwKIAkuZGV0ZWN0ICAgICAgICAgPSB0MTI4X2RldGVjdCwKIAkucmVsZWFzZSAgICAgICAgPSB0MTI4X3JlbGVhc2UsCisJLnByb2NfbmFtZSAgICAgID0gInQxMjgiLAorCS5zaG93X2luZm8gICAgICA9IHQxMjhfc2hvd19pbmZvLAorCS53cml0ZV9pbmZvICAgICA9IHQxMjhfd3JpdGVfaW5mbywKKwkuaW5mbyAgICAgICAgICAgPSB0MTI4X2luZm8sCiAJLnF1ZXVlY29tbWFuZCAgID0gdDEyOF9xdWV1ZV9jb21tYW5kLAogCS5laF9hYm9ydF9oYW5kbGVyID0gdDEyOF9hYm9ydCwKIAkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgICAgPSB0MTI4X2J1c19yZXNldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS90MTI4LmggYi9kcml2ZXJzL3Njc2kvdDEyOC5oCmluZGV4IGZkNjhjZWMuLjJjNzM3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS90MTI4LmgKKysrIGIvZHJpdmVycy9zY3NpL3QxMjguaApAQCAtOCw4ICs4LDYgQEAKICAqCWRyZXdAY29sb3JhZG8uZWR1CiAgKiAgICAgICsxICgzMDMpIDQ0MC00ODk0CiAgKgotICogRElTVFJJQlVUSU9OIFJFTEVBU0UgMy4KLSAqCiAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQKICAqCiAgKiBUcmFudG9yIFN5c3RlbXMsIEx0ZC4KQEAgLTIwLDI1ICsxOCwxMSBAQAogICogNTQxNSBSYW5kYWxsIFBsYWNlCiAgKiBGcmVtb250LCBDQSA5NDUzOAogICogMSsgKDQxNSkgNzcwLTE0MDAsIEZBWCAxKyAoNDE1KSA3NzAtOTkxMAotICoKLSAqIGFuZAotICoKLSAqIE5DUiA1MzgwIEZhbWlseQotICogU0NTSSBQcm90b2NvbCBDb250cm9sbGVyCi0gKiBEYXRhYm9vawotICoKLSAqIE5DUiBNaWNyb2VsZWN0cm9uaWNzCi0gKiAxNjM1IEFlcm9wbGF6YSBEcml2ZQotICogQ29sb3JhZG8gU3ByaW5ncywgQ08gODA5MTYKLSAqIDErICg3MTkpIDU3OC0zNDAwCi0gKiAxKyAoODAwKSAzMzQtNTQ1NAogICovCiAKICNpZm5kZWYgVDEyOF9ICiAjZGVmaW5lIFQxMjhfSAogCi0jZGVmaW5lIFQxMjhfUFVCTElDX1JFTEVBU0UgMwotCiAjZGVmaW5lIFRERUJVRwkJMAogI2RlZmluZSBUREVCVUdfSU5JVAkweDEKICNkZWZpbmUgVERFQlVHX1RSQU5TRkVSIDB4MgpAQCAtODgsMTIgKzcyLDYgQEAKICNkZWZpbmUgVF9EQVRBX1JFR19PRkZTRVQJMHgxZTAwCS8qIHJ3IDUxMiBieXRlcyBsb25nICovCiAKICNpZm5kZWYgQVNNCi1zdGF0aWMgaW50IHQxMjhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgdDEyOF9iaW9zcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKLQkJCSAgc2VjdG9yX3QsIGludCopOwotc3RhdGljIGludCB0MTI4X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwotc3RhdGljIGludCB0MTI4X3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCB0MTI4X2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCiAjaWZuZGVmIENNRF9QRVJfTFVOCiAjZGVmaW5lIENNRF9QRVJfTFVOIDIKQEAgLTEzNCw2ICsxMTIsNyBAQAogI2RlZmluZSBOQ1I1MzgwX3F1ZXVlX2NvbW1hbmQgdDEyOF9xdWV1ZV9jb21tYW5kCiAjZGVmaW5lIE5DUjUzODBfYWJvcnQgdDEyOF9hYm9ydAogI2RlZmluZSBOQ1I1MzgwX2J1c19yZXNldCB0MTI4X2J1c19yZXNldAorI2RlZmluZSBOQ1I1MzgwX2luZm8gdDEyOF9pbmZvCiAjZGVmaW5lIE5DUjUzODBfc2hvd19pbmZvIHQxMjhfc2hvd19pbmZvCiAjZGVmaW5lIE5DUjUzODBfd3JpdGVfaW5mbyB0MTI4X3dyaXRlX2luZm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Rtc2NzaW0uYyBiL2RyaXZlcnMvc2NzaS90bXNjc2ltLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NDU3NTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL3Rtc2NzaW0uYworKysgL2Rldi9udWxsCkBAIC0xLDI2MjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJRklMRSBOQU1FIDogVE1TQ1NJTS5DCQkJCQkJKgotICoJICAgICBCWSAgIDogQy5MLiBIdWFuZywgIGNoaW5nQHRla3JhbS5jb20udHcJCQkqCi0gKglEZXNjcmlwdGlvbjogRGV2aWNlIERyaXZlciBmb3IgVGVrcmFtIERDLTM5MChUKSBQQ0kgU0NTSQkqCi0gKgkJICAgICBCdXMgTWFzdGVyIEhvc3QgQWRhcHRlcgkJCQkqCi0gKiAoQylDb3B5cmlnaHQgMTk5NS0xOTk2IFRla3JhbSBUZWNobm9sb2d5IENvLiwgTHRkLgkJCSoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIChDKSBDb3B5cmlnaHQ6IHB1dCB1bmRlciBHTlUgR1BMIGluIDEwLzk2CQkJCSoKLSAqCQkJCShzZWUgRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0KQkqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAkSWQ6IHRtc2NzaW0uYyx2IDIuNjAuMi4zMCAyMDAwLzEyLzIwIDAxOjA3OjEyIGdhcmxvZmYgRXhwICQJCSoKLSAqCUVuaGFuY2VtZW50cyBhbmQgYnVnZml4ZXMgYnkJCQkJCSoKLSAqCUt1cnQgR2FybG9mZiA8a3VydEBnYXJsb2ZmLmRlPgk8Z2FybG9mZkBzdXNlLmRlPgkJKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJSElTVE9SWToJCQkJCQkJKgotICoJCQkJCQkJCQkqCi0gKglSRVYjCURBVEUJTkFNRQlERVNDUklQVElPTgkJCQkqCi0gKgkxLjAwICA5Ni8wNC8yNAlDTEgJRmlyc3QgcmVsZWFzZQkJCQkqCi0gKgkxLjAxICA5Ni8wNi8xMglDTEgJRml4ZWQgYnVnIG9mIE1lZGlhIENoYW5nZSBmb3IgUmVtb3ZhYmxlICoKLSAqCQkJCURldmljZSwgc2NhbiBhbGwgTFVOLiBTdXBwb3J0IFByZTIuMC4xMCAqCi0gKgkxLjAyICA5Ni8wNi8xOAlDTEgJRml4ZWQgYnVnIG9mIENvbW1hbmQgdGltZW91dCAuLi4JKgotICoJMS4wMyAgOTYvMDkvMjUJS0cJQWRkZWQgdG1zY3NpbV9wcm9jX2luZm8oKQkJKgotICoJMS4wNCAgOTYvMTAvMTEJQ0xICVVwZGF0aW5nIGZvciBzdXBwb3J0IEtWIDIuMC54CQkqCi0gKgkxLjA1ICA5Ni8xMC8xOAlLRwlGaXhlZCBidWcgaW4gREMzOTBfYWJvcnQobnVsbCBwdHIgZGVyZWYpKgotICoJMS4wNiAgOTYvMTAvMjUJS0cJRml4ZWQgbW9kdWxlIHN1cHBvcnQJCQkqCi0gKgkxLjA3ICA5Ni8xMS8wOQlLRwlGaXhlZCB0bXNjc2ltX3Byb2NfaW5mbygpCQkqCi0gKgkxLjA4ICA5Ni8xMS8xOAlLRwlGaXhlZCBudWxsIHB0ciBpbiBEQzM5MF9EaXNjb25uZWN0KCkJKgotICoJMS4wOSAgOTYvMTEvMzAJS0cJQWRkZWQgcmVnaXN0ZXIgdGhlIGFsbG9jYXRlZCBJTyBzcGFjZQkqCi0gKgkxLjEwICA5Ni8xMi8wNQlDTEgJTW9kaWZpZWQgdG1zY3NpbV9wcm9jX2luZm8oKSwgYW5kIHJlc2V0ICoKLSAqCQkJCXBlbmRpbmcgaW50ZXJydXB0IGluIERDMzkwX2RldGVjdCgpCSoKLSAqCTEuMTEgIDk3LzAyLzA1CUtHL0NMSAlGaXhlZHMgcHJvYmxlbSB3aXRoIHBhcnRpdGlvbnMgZ3JlYXRlcgkqCi0gKgkJCQl0aGFuIDFHQgkJCQkqCi0gKgkxLjEyICA5OC8wMi8xNSAgTUogICAgICBSZXdyaXR0ZW4gUENJIHByb2JpbmcJCQkqCi0gKgkxLjEzICA5OC8wNC8wOAlLRwlTdXBwb3J0IGZvciBub24gREMzOTAsIF9faW5pdGZ1bmMgZGVjbHMsKgotICoJCQkJY2hhbmdlZCBtYXggZGV2cyBmcm9tIDEwIHRvIDE2CQkqCi0gKgkxLjE0YSA5OC8wNS8wNQlLRwlEeW5hbWljIERDQiBhbGxvY2F0aW9uLCBhZGQtc2luZ2xlLWRldgkqCi0gKgkJCQlmb3IgTFVOcyBpZiBMVU5fU0NBTiAoQklPUykgbm90IHNldAkqCi0gKgkJCQlydW50aW1lIGNvbmZpZyB1c2luZyAvcHJvYyBpbnRlcmZhY2UJKgotICoJMS4xNGIgOTgvMDUvMDYJS0cJZWxpbWluYXRlZCBjbGkgKCk7IHN0aSAoKTsgc3BpbmxvY2tzCSoKLSAqCTEuMTRjIDk4LzA1LzA3CUtHCTIuMC54IGNvbXBhdGliaWxpdHkJCQkqCi0gKgkxLjIwYSA5OC8wNS8wNwlLRwljaGFuZ2VkIG5hbWVzIG9mIGZ1bmNzIHRvIGJlIGNvbnNpc3RlbnQgKgotICoJCQkJREMzOTBfIChlbnRyeSBwb2ludHMpLCBkYzM5MF8gKGludGVybmFsKSoKLSAqCQkJCXJld29ya2VkIGxvY2tpbmcJCQkqCi0gKgkxLjIwYiA5OC8wNS8xMglLRwlidWdzOiB2ZXJzaW9uLCBrZnJlZSwgX2N0bXAJCSoKLSAqCQkJCWRlYnVnIG91dHB1dAkJCQkqCi0gKgkxLjIwYyA5OC8wNS8xMglLRwlidWdzOiBrZnJlZSwgcGFyc2luZywgRUVwcm9tRGVmYXVsdHMJKgotICoJMS4yMGQgOTgvMDUvMTQJS0cJYnVnczogbGlzdCBsaW5rYWdlLCBjbGVhciBmbGFnIGFmdGVyICAJKgotICoJCQkJcmVzZXQgb24gc3RhcnR1cCwgY29kZSBjbGVhbnVwCQkqCi0gKgkxLjIwZSA5OC8wNS8xNQlLRwlzcGlubG9jayBjb21tZW50cywgbmFtZSBzcGFjZSBjbGVhbnVwCSoKLSAqCQkJCXBMYXN0RENCIG5vdyBwYXJ0IG9mIEFDQiBzdHJ1Y3R1cmUJKgotICoJCQkJYWRkZWQgc3RhdHMsIHRpbWVvdXQgZm9yIDIuMSwgVGFnUSBidWcJKgotICoJCQkJUkVTRVQgYW5kIElOUVVJUlkgaW50ZXJmYWNlIGNvbW1hbmRzCSoKLSAqCTEuMjBmIDk4LzA1LzE4CUtHCXNwaW5sb2NrcyBmaXhlcywgbWF4X2x1biBmaXgsIGZyZWUgRENCcwkqCi0gKgkJCQlmb3IgbWlzc2luZyBMVU5zLCBwZW5kaW5nIGludAkJKgotICoJMS4yMGcgOTgvMDUvMTkJS0cJQ2xlYW4gdXA6IEF2b2lkIHNob3J0CQkJKgotICoJMS4yMGggOTgvMDUvMjEJS0cJUmVtb3ZlIEFkYXB0U0NTSUlELCBtYXhfbHVuIC4uLgkJKgotICoJMS4yMGkgOTgvMDUvMjEJS0cJQWlpaWU6IEJ1ZyB3aXRoIFRhZ1FNYXNrICAgICAgIAkJKgotICoJMS4yMGogOTgvMDUvMjQJS0cJSGFuZGxlIFNUQVRfQlVTWSwgaGFuZGxlIHBBQ0ItPnBMaW5rRENCCSoKLSAqCQkJCT09IDAgaW4gcmVtb3ZlX2RldiBhbmQgRG9pbmdTUkJfRG9uZQkqCi0gKgkxLjIwayA5OC8wNS8yNQlLRwlETUFfSU5UCShleHBlcmltZW50YWwpCSAgICAgICAJCSoKLSAqCTEuMjBsIDk4LzA1LzI3CUtHCXJlbW92ZSBETUFfSU5UOyBETUFfSURMRSBjbWRzIGFkZGVkOwkqCi0gKgkxLjIwbSA5OC8wNi8xMAlLRwlnbGl0Y2ggY29uZmlndXJhYmxlOyBtYWRlIHNvbWUgZ2xvYmFsCSoKLSAqCQkJCXZhcnMgcGFydCBvZiBBQ0I7IHVzZSBEQzM5MF9yZWFkWAkqCi0gKgkxLjIwbiA5OC8wNi8xMQlLRwlzdGFydHVwIHBhcmFtcwkJCQkqCi0gKgkxLjIwbyA5OC8wNi8xNQlLRwlhZGRlZCBUYWdNYXhOdW0gdG8gYm9vdC9tb2R1bGUgcGFyYW1zCSoKLSAqCQkJCURldmljZSBOciAtPiBJZHgsIFRhZ01heE51bSBwb3dlciBvZiAyICAqCi0gKgkxLjIwcCA5OC8wNi8xNwlLRwlEb2N1IHVwZGF0ZXMuIFJlc2V0IGRlcGVuZHMgb24gc2V0dGluZ3MgKgotICoJCQkJcGNpX3NldF9tYXN0ZXIgYWRkZWQ7IDIuMC54eDogcGNpYmlvc18qCSoKLSAqCQkJCXVzZWQgaW5zdGVhZCBvZiBNZWNoTnVtIHRoaW5ncyAuLi4JKgotICoJMS4yMHEgOTgvMDYvMjMJS0cJQ2hhbmdlZCBkZWZhdWx0cy4gQWRkZWQgZGVidWcgY29kZSBmb3IJKgotICoJCQkJcmVtb3ZhYmxlIG1lZGlhIGFuZCBmaXhlZCBpdC4gVGFnTWF4TnVtCSoKLSAqCQkJCWZpeGVkIGZvciBEQzM5MC4gTG9ja2luZzogQUNCLCBEUlYgZm9yCSoKLSAqCQkJCWJldHRlciBJUlEgc2hhcmluZy4gU3BlbGxpbmc6IFF1ZXVlaW5nCSoKLSAqCQkJCVBhcnNpbmcgYW5kIGdsaXRjaF9jZmcgY2hhbmdlcy4gRGlzcGxheQkqCi0gKgkJCQlyZWFsIFN5bmNTcGVlZCB2YWx1ZS4gTWFkZSBEaXNDb25uCSoKLSAqCQkJCWZ1bmN0aW9uYWwgKCEpCQkJCSoKLSAqCTEuMjByIDk4LzA2LzMwCUtHCURlYnVnIG1hY3JvcywgYWxsb3cgZGlzYWJsaW5nIERzQ24sIHNldAkqCi0gKgkJCQlCSVQ0IGluIEN0cmxSNCwgRU5fUEFHRV9JTlQsIDIuMCBtb2R1bGUJKgotICoJCQkJcGFyYW0gLTEgZml4ZWQuCQkJCSoKLSAqCTEuMjBzIDk4LzA4LzIwCUtHCURlYnVnIGluZm8gb24gYWJvcnQoKSwgdHJ5IHRvIGNoZWNrIFBDSSwqCi0gKgkJCQlwaHlzX3RvX2J1cyBpbnN0ZWFkIG9mIHBoeXNfdG9fdmlydCwJKgotICoJCQkJZml4ZWQgc2VsLiBwcm9jZXNzLCBmaXhlZCBsb2NraW5nLAkqCi0gKgkJCQlhZGRlZCBNT0RVTEVfWFhYIGluZm9zLCBjaGFuZ2VkIElSUQkqCi0gKgkJCQlyZXF1ZXN0IGZsYWdzLCBkaXNhYmxlIERNQV9JTlQJCSoKLSAqCTEuMjB0IDk4LzA5LzA3CUtHCVRhZ1EgcmVwb3J0IGZpeGVkOyBXcml0ZSBFcmFzZSBETUEgU3RhdDsqCi0gKgkJCQlpbml0ZnVuYyAtPiBfX2luaXQ7IGJldHRlciBhYm9ydDsJKgotICoJCQkJVGltZW91dCBmb3IgWEZFUl9ET05FICYgQkxBU1RfQ09NUExFVEU7CSoKLSAqCQkJCUFsbG93IHVwIHRvIDMzIGNvbW1hbmRzIGJlaW5nIHByb2Nlc3NlZCAqCi0gKgkyLjBhICA5OC8xMC8xNAlLRwlNYXggQ21uZHMgYmFjayB0byAxNy4gRE1BX1N0YXQgY2xlYXJpbmcgKgotICoJCQkJYWxsIGZsYWdzLiBDbGVhciB3aXRoaW4gd2hpbGUoKSBsb29wcwkqCi0gKgkJCQlpbiBEYXRhSW5fMC9PdXRfMC4gTnVsbCBwdHIgaW4gZHVtcGluZm8JKgotICoJCQkJZm9yIHBTUkI9PTAuIEJldHRlciBsb2NraW5nIGR1cmluZyBpbml0LioKLSAqCQkJCWJpb3NfcGFyYW0oKSBub3cgcmVzcGVjdHMgcGFydC4gdGFibGUuCSoKLSAqCTIuMGIgIDk4LzEwLzI0CUtHCURvY3UgZml4ZXMuIFRpbWVvdXQgTXNnIGluIERNQSBCbGFzdC4JKgotICoJCQkJRGlzYWxsb3cgaWxsZWdhbCBpZHggaW4gSU5RVUlSWS9SRU1PVkUJKgotICoJMi4wYyAgOTgvMTEvMTkJS0cJQ2xlYW5lZCB1cCBkZXRlY3QvaW5pdCBmb3IgU01QIGJveGVzLCAJKgotICoJCQkJV3JpdGUgRXJhc2UgRE1BICgxLjIwdCkgY2F1c2VkIHByb2JsZW1zCSoKLSAqCTIuMGQgIDk4LzEyLzI1CUtHCUNocmlzdG1hcyByZWxlYXNlIDstKSBNZXNzYWdlIGhhbmRsaW5nICAqCi0gKgkJCQljb21wbGV0ZWx5IHJld29ya2VkLiBIYW5kbGUgdGFyZ2V0IGluaS0JKgotICoJCQkJdGlhdGVkIFNEVFIgY29ycmVjdGx5LgkJCSoKLSAqCTIuMGQxIDk5LzAxLzI1CUtHCVRyeSB0byBoYW5kbGUgUkVTVE9SRV9QVFIJCSoKLSAqCTIuMGQyIDk5LzAyLzA4CUtHCUNoZWNrIGZvciBmYWlsdXJlIG9mIGttYWxsb2MsIGNvcnJlY3QgCSoKLSAqCQkJCWluY2x1c2lvbiBvZiBzY3NpY2FtLmgsIERlbGF5UmVzZXQJKgotICoJMi4wZDMgOTkvMDUvMzEJS0cJRFJJVkVSX09LIC0+IERJRF9PSywgRElEX05PX0NPTk5FQ1QsCSoKLSAqCQkJCWRldGVjdCBUYXJnZXQgbW9kZSBhbmQgd2Fybi4JCSoKLSAqCQkJCXBjbWQtPnJlc3VsdCBoYW5kbGluZyBjbGVhbmVkIHVwLgkqCi0gKgkyLjBkNCA5OS8wNi8wMQlLRwlDbGVhbmVkIHNlbGVjdGlvbiBwcm9jZXNzLiBGb3VuZCBidWcJKgotICoJCQkJd2hpY2ggcHJldmVudGVkIG1vcmUgdGhhbiAxNiB0YWdzLiBOb3c6CSoKLSAqCQkJCTI0LiBTRFRSIGNsZWFudXAuIENsZWFuZXIgbXVsdGktTFVOCSoKLSAqCQkJCWhhbmRsaW5nLiBEb24ndCBtb2RpZnkgQ29udHJvbFJlZ3MvRklGTwkqCi0gKgkJCQl3aGVuIGNvbm5lY3RlZC4JCQkJKgotICoJMi4wZDUgOTkvMDYvMDEJS0cJQ2xlYXIgRGV2SUQsIEZpeCBJTlFVSVJZIGFmdGVyIGNmZyBjaGcuCSoKLSAqCTIuMGQ2IDk5LzA2LzAyCUtHCUFkZGVkIEFERCBzcGVjaWFsIGNvbW1hbmQgdG8gYWxsb3cgY2ZnLgkqCi0gKgkJCQliZWZvcmUgZGV0ZWN0aW9uLiBSZXNldCBTWU5DX05FR09fRE9ORQkqCi0gKgkJCQlhZnRlciBhIGJ1cyByZXNldC4JCQkqCi0gKgkyLjBkNyA5OS8wNi8wMwlLRwlGaXhlZCBidWdzIHdydCBhZGQscmVtb3ZlIGNvbW1hbmRzCSoKLSAqCTIuMGQ4IDk5LzA2LzA0CUtHCVJlbW92ZWQgY29weWluZyBvZiBjbW5kIGludG8gQ21kQmxvY2suCSoKLSAqCQkJCUZpeGVkIE9vcHMgaW4gX3JlbGVhc2UoKS4JCSoKLSAqCTIuMGQ5IDk5LzA2LzA2CUtHCUFsc28gdGFnIHF1ZXVlIElOUVVJUlksIFRfVV9SLCAuLi4JKgotICoJCQkJQWxsb3cgYXJiLiBuby4gb2YgVGFnZ2VkIENtbmRzLiBNYXggMzIJKgotICoJMi4wZDEwOTkvMDYvMjAJS0cJVGFnTWF4Tm8gY2hhbmdlcyBub3cgaG9ub3VyZWQhIFF1ZXVlaW5nICoKLSAqCQkJCWNsZWFyaWZpZWQgKHJlbmFtZWQgLi4pIFRhZ01hc2sgaGFuZGxpbmcqCi0gKgkJCQljbGVhbmVkLgkJCQkqCi0gKgkyLjBkMTE5OS8wNi8yOAlLRwljbWQtPnJlc3VsdCBub3cgaWRlbnRpY2FsIHRvIDIuMGQyCSoKLSAqCTIuMGQxMjk5LzA3LzA0CUtHCUNoYW5nZWQgb3JkZXIgb2YgcHJvY2Vzc2luZyBpbiBJUlEJKgotICoJMi4wZDEzOTkvMDcvMDUJS0cJRG9uJ3QgdXBkYXRlIERDQiBmaWVsZHMgaWYgcmVtb3ZlZAkqCi0gKgkyLjBkMTQ5OS8wNy8wNQlLRwlyZW1vdmVfZGV2OiBNb3ZlIGtmcmVlKCkgdG8gdGhlIGVuZAkqCi0gKgkyLjBkMTU5OS8wNy8xMglLRwl1c2VfbmV3X2VoX2NvZGU6IDAsIFVMT05HIC0+IFVJTlQgd2hlcmUJKgotICoJCQkJYXBwcm9wcmlhdGUJCQkJKgotICoJMi4wZDE2OTkvMDcvMTMJS0cJUmVlbmFibGUgU3RhcnRTQ1NJIGludGVycnVwdCwgUmV0cnkgbXNnCSoKLSAqCTIuMGQxNzk5LzA3LzE1CUtHCVJlbW92ZSBkZWJ1ZyBtc2cuIERpc2FibGUgcmVjZmcuIHdoZW4JKgotICoJCQkJdGhlcmUgYXJlIHF1ZXVlZCBjbW5kcwkJCSoKLSAqCTIuMGQxODk5LzA3LzE4CUtHCVNlbGVjdGlvbiB0aW1lb3V0OiBEb24ndCByZXF1ZXVlCSoKLSAqCTIuMGQxOTk5LzA3LzE4CUtHCUFib3J0OiBPbmx5IGNhbGwgc2NzaV9kb25lIGlmIGRlcXVldWVkCSoKLSAqCTIuMGQyMDk5LzA3LzE5CUtHCVJzdF9EZXRlY3Q6IERvaW5nU1JCX0RvbmUJCSoKLSAqCTIuMGQyMTk5LzA4LzE1CUtHCWRldl9pZCBmb3IgcmVxdWVzdC9mcmVlX2lycSwgY21uZFswXSBmb3IqCi0gKgkJCQlSRVRSWSwgU1JCZG9uZSBkb2VzIERJRF9BQk9SVCBmb3IgdGhlIAkqCi0gKgkJCQljbWQgcGFzc2VkIGJ5IERDMzkwX3Jlc2V0KCkJCSoKLSAqCTIuMGQyMjk5LzA4LzI1CUtHCWRldl9pZCBmaXhlZC4gY2FuX3F1ZXVlOiA0MgkJKgotICoJMi4wZDIzOTkvMDgvMjUJS0cJUmVtb3ZlZCBzb21lIGRlYnVnZ2luZyBjb2RlLiBkZXZfaWQgCSoKLSAqCQkJCW5vdyBpcyBzZXQgdG8gcEFDQi4gVXNlIHU4LHUxNix1MzIuIAkqCi0gKgkyLjBkMjQ5OS8xMS8xNAlLRwlVbnJlZy4gSS9PIGlmIGZhaWxlZCBJUlEgYWxsb2MuIENhbGwJKgotICogCQkJCWRvbmUgKCkgdy8gRElEX0JBRF9UQVJHRVQgaW4gY2FzZSBvZgkqCi0gKgkJCQltaXNzaW5nIERDQi4gV2UJYXJlIG9sZCBFSCEhCQkqCi0gKgkyLjBkMjUwMC8wMS8xNQlLRwkyLjMuM3ggY29tcGF0IGZyb20gQW5kcmVhcyBTY2h1bHR6CSoKLSAqCQkJCXNldCB1bmlxdWVfaWQuIERpc2FibGUgUkVUUlkgbWVzc2FnZS4JKgotICoJMi4wZDI2MDAvMDEvMjkJS0cJR28gdG8gbmV3IEVILgkJCQkqCi0gKgkyLjBkMjcwMC8wMS8zMQlLRwkuLi4gYnV0IG1haW50YWluIDIuMCBjb21wYXQuCQkqCi0gKgkJCQlhbmQgZml4IERDQiBmcmVlaW5nCQkJKgotICoJMi4wZDI4MDAvMDIvMTQJS0cJUXVldWUgc3RhdGlzdGljcyBmaXhlZCwgZHVtcCBzcGVjaWFsIGNtZCoKLSAqCQkJCVdhaXRpbmdfVGltZXIgZm9yIGZhaWxlZCBTdGFydFNDU0kJKgotICoJCQkJTmV3IEVIOiBEb24ndCByZXR1cm4gY21uZHMgdG8gTUwgb24gUlNUICoKLSAqCQkJCVVzZSBvbGQgRUggKGRvbid0IGhhdmUgbmV3IEVIIGZucyB5ZXQpCSoKLSAqIAkJCQlSZXNldDogVW5sb2NrLCBidXQgcmVmdXNlIHRvIHF1ZXVlCSoKLSAqIAkJCQkyLjMgX19zZXR1cCBmdW5jdGlvbgkJCSoKLSAqCTIuMGUgIDAwLzA1LzIyCUtHCVJldHVybiByZXNpZHVhbCBmb3IgMi4zCQkJKgotICoJMi4wZTEgMDAvMDUvMjUJS0cJQ29tcGlsZSBmaXhlcyBmb3IgMi4zLjk5CQkqCi0gKgkyLjBlMiAwMC8wNS8yNwlLRwlKZWZmIEdhcnppaydzIHBjaV9lbmFibGVfZGV2aWNlKCkJKgotICoJMi4wZTMgMDAvMDkvMjkJS0cJU29tZSAyLjQgY2hhbmdlcy4gRG9uJ3QgdHJ5IFN5bmMgTmVnbwkqCi0gKgkJCQliZWZvcmUgSU5RVUlSWSBoYXMgcmVwb3J0ZWQgYWJpbGl0eS4gCSoKLSAqCQkJCVJlY29nbmlzZSBJTlFVSVJZIGFzIHNjYW5uaW5nIGNvbW1hbmQuCSoKLSAqCTIuMGU0IDAwLzEwLzEzCUtHCUFsbG93IGNvbXBpbGF0aW9uIGludG8gMi40IGtlcm5lbAkqCi0gKgkyLjBlNSAwMC8xMS8xNwlLRwlTdG9yZSBJbnEuZmxhZ3MgaW4gRENCCQkJKgotICoJMi4wZTYgMDAvMTEvMjIgIEtHCTIuNCBpbml0IGZ1bmN0aW9uIChUaHggdG8gTy5TY2h1bWFubikJKgotICogCQkJCTIuNCBQQ0kgZGV2aWNlIHRhYmxlIChUaHggdG8gQS5SaWNodGVyKQkqCi0gKgkyLjBlNyAwMC8xMS8yOAlLRwlBbGxvdyBvdmVycmlkaW5nIG9mIEJJT1Mgc2V0dGluZ3MJKgotICoJMi4wZiAgMDAvMTIvMjAJS0cJSGFuZGxlIGZhaWxlZCBJTlFVSVJZcyBkdXJpbmcgc2NhbgkqCi0gKgkyLjFhICAwMy8xMS8yOSAgR0wsIEtHCUluaXRpYWwgZml4aW5nIGZvciAyLjYuIENvbnZlcnQgdG8JKgotICoJCQkJdXNlIHRoZSBjdXJyZW50IFBDSS1tYXBwaW5nIEFQSSwgdXBkYXRlCSoKLSAqCQkJCWNvbW1hbmQtcXVldWluZy4JCQkqCi0gKgkyLjFiICAwNC8wNC8xMyAgR0wJRml4IGZvciA2NC1iaXQgcGxhdGZvcm1zCQkqCi0gKgkyLjFiMSAwNC8wMS8zMQlHTAkoYXBwbGllZCAwNS4wNCkgUmVtb3ZlIGludGVybmFsCQkqCi0gKgkJCQljb21tYW5kLXF1ZXVpbmcuCQkJKgotICoJMi4xYjIgMDQvMDIvMDEJQ0gJKGFwcGxpZWQgMDUuMDQpIEZpeCBlcnJvci1oYW5kbGluZwkqCi0gKgkyLjFjICAwNC8wNS8yMyAgR0wJVXBkYXRlIHRvIHVzZSB0aGUgbmV3IHBjaV9kcml2ZXIgQVBJLAkqCi0gKgkJCQlzb21lIHNjc2kgRUggdXBkYXRlcywgbW9yZSBjbGVhbnVwLgkqCi0gKgkyLjFkICAwNC8wNS8yNwlHTAlNb3ZlZCBzZXR0aW5nIG9mIHNjYW5fZGV2aWNlcyB0bwkqCi0gKgkJCQlzbGF2ZV9hbGxvYy9fY29uZmlndXJlL19kZXN0cm95LCBhcwkqCi0gKgkJCQlzdWdnZXN0ZWQgYnkgQ0guCQkJKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBERUJVRyBvcHRpb25zICovCi0vLyNkZWZpbmUgREMzOTBfREVCVUcwCi0vLyNkZWZpbmUgREMzOTBfREVCVUcxCi0vLyNkZWZpbmUgREMzOTBfRENCREVCVUcKLS8vI2RlZmluZSBEQzM5MF9QQVJTRURFQlVHCi0vLyNkZWZpbmUgREMzOTBfUkVNT1ZBQkxFREVCVUcKLS8vI2RlZmluZSBEQzM5MF9MT0NLREVCVUcKLQotLy8jZGVmaW5lIE5PUCBkb3t9d2hpbGUoMCkKLSNkZWZpbmUgQ19OT1AKLQotLyogRGVidWcgZGVmaW5pdGlvbnMgKi8KLSNpZmRlZiBEQzM5MF9ERUJVRzAKLSMgZGVmaW5lIERFQlVHMCh4KSB4Ci0jZWxzZQotIyBkZWZpbmUgREVCVUcwKHgpIENfTk9QCi0jZW5kaWYKLSNpZmRlZiBEQzM5MF9ERUJVRzEKLSMgZGVmaW5lIERFQlVHMSh4KSB4Ci0jZWxzZQotIyBkZWZpbmUgREVCVUcxKHgpIENfTk9QCi0jZW5kaWYKLSNpZmRlZiBEQzM5MF9EQ0JERUJVRwotIyBkZWZpbmUgRENCREVCVUcoeCkgeAotI2Vsc2UKLSMgZGVmaW5lIERDQkRFQlVHKHgpIENfTk9QCi0jZW5kaWYKLSNpZmRlZiBEQzM5MF9QQVJTRURFQlVHCi0jIGRlZmluZSBQQVJTRURFQlVHKHgpIHgKLSNlbHNlCi0jIGRlZmluZSBQQVJTRURFQlVHKHgpIENfTk9QCi0jZW5kaWYKLSNpZmRlZiBEQzM5MF9SRU1PVkFCTEVERUJVRwotIyBkZWZpbmUgUkVNT1ZBQkxFREVCVUcoeCkgeAotI2Vsc2UKLSMgZGVmaW5lIFJFTU9WQUJMRURFQlVHKHgpIENfTk9QCi0jZW5kaWYKLSNkZWZpbmUgRENCREVCVUcxKHgpIENfTk9QCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KLQotCi0jZGVmaW5lIERDMzkwX0JBTk5FUiAiVGVrcmFtIERDMzkwL0FNNTNDOTc0IgotI2RlZmluZSBEQzM5MF9WRVJTSU9OICIyLjFkIDIwMDQtMDUtMjciCi0KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9BTUQ1M0M5NzQgCVBDSV9ERVZJQ0VfSURfQU1EX1NDU0kKLQotI2luY2x1ZGUgInRtc2NzaW0uaCIKLQotCi1zdGF0aWMgdm9pZCBkYzM5MF9EYXRhT3V0XzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9EYXRhSW5fMCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX0NvbW1hbmRfMCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX1N0YXR1c18wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfTXNnT3V0XzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9Nc2dJbl8wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfRGF0YU91dFBoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfRGF0YUluUGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9Db21tYW5kUGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9TdGF0dXNQaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX01zZ091dFBoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfTXNnSW5QaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKTsKLXN0YXRpYyB2b2lkIGRjMzkwX05vcF8wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpOwotc3RhdGljIHZvaWQgZGMzOTBfTm9wXzEoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cyk7Ci0KLXN0YXRpYyB2b2lkIGRjMzkwX1NldFhmZXJSYXRlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCICk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9EaXNjb25uZWN0KCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICk7Ci1zdGF0aWMgdm9pZCBkYzM5MF9SZXNlbGVjdCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiApOwotc3RhdGljIHZvaWQgZGMzOTBfU1JCZG9uZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX2RjYiogcERDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiApOwotc3RhdGljIHZvaWQgZGMzOTBfU2NzaVJzdERldGVjdCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiApOwotc3RhdGljIHZvaWQgZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0KHN0cnVjdCBkYzM5MF9hY2IqLCBzdHJ1Y3QgZGMzOTBfc3JiKik7Ci1zdGF0aWMgdm9pZCBkYzM5MF9kdW1waW5mbyhzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKTsKLXN0YXRpYyB2b2lkIGRjMzkwX1Jlc2V0RGV2UGFyYW0oc3RydWN0IGRjMzkwX2FjYiogcEFDQik7Ci0KLXN0YXRpYyB1MzIJZGMzOTBfbGFzdHN0YXR1cyA9IDA7Ci1zdGF0aWMgdTgJZGMzOTBfYWRhcHRlckNudCA9IDA7Ci0KLXN0YXRpYyBpbnQgZGlzYWJsZV9jbHVzdGVyaW5nOwotbW9kdWxlX3BhcmFtKGRpc2FibGVfY2x1c3RlcmluZywgaW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9jbHVzdGVyaW5nLCAiSWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXMgd2l0aCB5b3VyIGRldmljZXMsIHRyeSBzZXR0aW5nIHRvIDEiKTsKLQotLyogU3RhcnR1cCB2YWx1ZXMsIHRvIGJlIG92ZXJyaWRlbiBvbiB0aGUgY29tbWFuZGxpbmUgKi8KLXN0YXRpYyBpbnQgdG1zY3NpbVtdID0gey0yLCAtMiwgLTIsIC0yLCAtMiwgLTJ9OwotCi1tb2R1bGVfcGFyYW1fYXJyYXkodG1zY3NpbSwgaW50LCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModG1zY3NpbSwgIkhvc3QgU0NTSSBJRCwgU3BlZWQgKDA9MTBNSHopLCBEZXZpY2UgRmxhZ3MsIEFkYXB0ZXIgRmxhZ3MsIE1heCBUYWdzIChsb2cyKHRhZ3MpLTEpLCBEZWxheVJlc2V0IChzKSIpOwotTU9EVUxFX0FVVEhPUigiQy5MLiBIdWFuZyAvIEt1cnQgR2FybG9mZiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIGhvc3QgYWRhcHRlciBkcml2ZXIgZm9yIFRla3JhbSBEQzM5MCBhbmQgb3RoZXIgQU1ENTNDOTc0QSBiYXNlZCBQQ0kgU0NTSSBhZGFwdGVycyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInNkLHNyLHNnLHN0Iik7Ci0KLXN0YXRpYyB2b2lkICpkYzM5MF9waGFzZTBbXT17Ci0gICAgICAgZGMzOTBfRGF0YU91dF8wLAotICAgICAgIGRjMzkwX0RhdGFJbl8wLAotICAgICAgIGRjMzkwX0NvbW1hbmRfMCwKLSAgICAgICBkYzM5MF9TdGF0dXNfMCwKLSAgICAgICBkYzM5MF9Ob3BfMCwKLSAgICAgICBkYzM5MF9Ob3BfMCwKLSAgICAgICBkYzM5MF9Nc2dPdXRfMCwKLSAgICAgICBkYzM5MF9Nc2dJbl8wLAotICAgICAgIGRjMzkwX05vcF8xCi0gICAgICAgfTsKLQotc3RhdGljIHZvaWQgKmRjMzkwX3BoYXNlMVtdPXsKLSAgICAgICBkYzM5MF9EYXRhT3V0UGhhc2UsCi0gICAgICAgZGMzOTBfRGF0YUluUGhhc2UsCi0gICAgICAgZGMzOTBfQ29tbWFuZFBoYXNlLAotICAgICAgIGRjMzkwX1N0YXR1c1BoYXNlLAotICAgICAgIGRjMzkwX05vcF8wLAotICAgICAgIGRjMzkwX05vcF8wLAotICAgICAgIGRjMzkwX01zZ091dFBoYXNlLAotICAgICAgIGRjMzkwX01zZ0luUGhhc2UsCi0gICAgICAgZGMzOTBfTm9wXzEKLSAgICAgICB9OwotCi0jaWZkZWYgREMzOTBfREVCVUcxCi1zdGF0aWMgY2hhciogZGMzOTBfcDBfc3RyW10gPSB7Ci0gICAgICAgImRjMzkwX0RhdGFPdXRfMCIsCi0gICAgICAgImRjMzkwX0RhdGFJbl8wIiwKLSAgICAgICAiZGMzOTBfQ29tbWFuZF8wIiwKLSAgICAgICAiZGMzOTBfU3RhdHVzXzAiLAotICAgICAgICJkYzM5MF9Ob3BfMCIsCi0gICAgICAgImRjMzkwX05vcF8wIiwKLSAgICAgICAiZGMzOTBfTXNnT3V0XzAiLAotICAgICAgICJkYzM5MF9Nc2dJbl8wIiwKLSAgICAgICAiZGMzOTBfTm9wXzEiCi0gICAgICAgfTsKLSAgICAgCi1zdGF0aWMgY2hhciogZGMzOTBfcDFfc3RyW10gPSB7Ci0gICAgICAgImRjMzkwX0RhdGFPdXRQaGFzZSIsCi0gICAgICAgImRjMzkwX0RhdGFJblBoYXNlIiwKLSAgICAgICAiZGMzOTBfQ29tbWFuZFBoYXNlIiwKLSAgICAgICAiZGMzOTBfU3RhdHVzUGhhc2UiLAotICAgICAgICJkYzM5MF9Ob3BfMCIsCi0gICAgICAgImRjMzkwX05vcF8wIiwKLSAgICAgICAiZGMzOTBfTXNnT3V0UGhhc2UiLAotICAgICAgICJkYzM5MF9Nc2dJblBoYXNlIiwKLSAgICAgICAiZGMzOTBfTm9wXzEiCi0gICAgICAgfTsKLSNlbmRpZiAgIAotCi1zdGF0aWMgdTggIGRjMzkwX2VlcHJvbUJ1ZltNQVhfQURBUFRFUl9OVU1dW0VFX0xFTl07Ci1zdGF0aWMgdTggIGRjMzkwX2Nsb2NrX3BlcmlvZDFbXSA9IHs0LCA1LCA2LCA3LCA4LCAxMCwgMTMsIDIwfTsKLXN0YXRpYyB1OCAgZGMzOTBfY2xvY2tfc3BlZWRbXSA9IHsxMDAsODAsNjcsNTcsNTAsIDQwLCAzMSwgMjB9OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEZ1bmN0aW9ucyBmb3IgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgCi0gKiAoRENCcywgU1JCcywgUXVldWVpbmcpCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBpbmxpbmUgZGMzOTBfc3RhcnRfc2VnbWVudChzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotCXN0cnVjdCBzY2F0dGVybGlzdCAqcHNnbCA9IHBTUkItPnBTZWdtZW50TGlzdDsKLQotCS8qIHN0YXJ0IG5ldyBzZyBzZWdtZW50ICovCi0JcFNSQi0+U0dCdXNBZGRyID0gc2dfZG1hX2FkZHJlc3MocHNnbCk7Ci0JcFNSQi0+U0dUb0JlWGZlckxlbiA9IHNnX2RtYV9sZW4ocHNnbCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGlubGluZSBkYzM5MF9hZHZhbmNlX3NlZ21lbnQoc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTMyIHJlc2lkdWUpCi17Ci0JdW5zaWduZWQgbG9uZyB4ZmVyID0gcFNSQi0+U0dUb0JlWGZlckxlbiAtIHJlc2lkdWU7Ci0KLQkvKiB4ZmVyIG1vcmUgYnl0ZXMgdHJhbnNmZXJyZWQgKi8KLQlwU1JCLT5TR0J1c0FkZHIgKz0geGZlcjsKLQlwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gKz0geGZlcjsKLQlwU1JCLT5TR1RvQmVYZmVyTGVuID0gcmVzaWR1ZTsKLQotCXJldHVybiB4ZmVyOwotfQotCi1zdGF0aWMgc3RydWN0IGRjMzkwX2RjYiBfX2lubGluZV9fICpkYzM5MF9maW5kRENCICggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgdTggaWQsIHU4IGx1bikKLXsKLSAgIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IgPSBwQUNCLT5wTGlua0RDQjsgaWYgKCFwRENCKSByZXR1cm4gTlVMTDsKLSAgIHdoaWxlIChwRENCLT5UYXJnZXRJRCAhPSBpZCB8fCBwRENCLT5UYXJnZXRMVU4gIT0gbHVuKQotICAgICB7Ci0JcERDQiA9IHBEQ0ItPnBOZXh0RENCOwotCWlmIChwRENCID09IHBBQ0ItPnBMaW5rRENCKQotCSAgICAgcmV0dXJuIE5VTEw7Ci0gICAgIH0KLSAgIERDQkRFQlVHMSggcHJpbnRrIChLRVJOX0RFQlVHICJEQ0IgJXAgKCUwMngsJTAyeCkgZm91bmQuXG4iLAlcCi0JCSAgICAgIHBEQ0IsIHBEQ0ItPlRhcmdldElELCBwRENCLT5UYXJnZXRMVU4pKTsKLSAgIHJldHVybiBwRENCOwotfQotCi0vKiBJbnNlcnQgU1JCIG9pbiB0b3Agb2YgZnJlZSBsaXN0ICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRjMzkwX0ZyZWVfaW5zZXJ0IChzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotICAgIERFQlVHMChwcmludGsgKCJEQzM5MDogRnJlZSBTUkIgJXBcbiIsIHBTUkIpKTsKLSAgICBwU1JCLT5wTmV4dFNSQiA9IHBBQ0ItPnBGcmVlU1JCOwotICAgIHBBQ0ItPnBGcmVlU1JCID0gcFNSQjsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBkYzM5MF9Hb2luZ19hcHBlbmQgKHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gICAgcERDQi0+R29pbmdTUkJDbnQrKzsKLSAgICBERUJVRzAocHJpbnRrKCJEQzM5MDogQXBwZW5kIFNSQiAlcCB0byBHb2luZ1xuIiwgcFNSQikpOwotICAgIC8qIEFwcGVuZCB0byB0aGUgbGlzdCBvZiBHb2luZyBjb21tYW5kcyAqLwotICAgIGlmKCBwRENCLT5wR29pbmdTUkIgKQotCXBEQ0ItPnBHb2luZ0xhc3QtPnBOZXh0U1JCID0gcFNSQjsKLSAgICBlbHNlCi0JcERDQi0+cEdvaW5nU1JCID0gcFNSQjsKLQotICAgIHBEQ0ItPnBHb2luZ0xhc3QgPSBwU1JCOwotICAgIC8qIE5vIG5leHQgb25lIGluIHNlbnQgbGlzdCAqLwotICAgIHBTUkItPnBOZXh0U1JCID0gTlVMTDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBkYzM5MF9Hb2luZ19yZW1vdmUgKHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0JREVCVUcwKHByaW50aygiREMzOTA6IFJlbW92ZSBTUkIgJXAgZnJvbSBHb2luZ1xuIiwgcFNSQikpOwotICAgaWYgKHBTUkIgPT0gcERDQi0+cEdvaW5nU1JCKQotCXBEQ0ItPnBHb2luZ1NSQiA9IHBTUkItPnBOZXh0U1JCOwotICAgZWxzZQotICAgICB7Ci0Jc3RydWN0IGRjMzkwX3NyYiogcHNyYiA9IHBEQ0ItPnBHb2luZ1NSQjsKLQl3aGlsZSAocHNyYiAmJiBwc3JiLT5wTmV4dFNSQiAhPSBwU1JCKQotCSAgcHNyYiA9IHBzcmItPnBOZXh0U1JCOwotCWlmICghcHNyYikgCi0JICB7IHByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBSZW1vdmUgbm9uLWV4LiBTUkIgJXAgZnJvbSBHb2luZyFcbiIsIHBTUkIpOyByZXR1cm47IH0KLQlwc3JiLT5wTmV4dFNSQiA9IHBTUkItPnBOZXh0U1JCOwotCWlmIChwU1JCID09IHBEQ0ItPnBHb2luZ0xhc3QpCi0JICBwRENCLT5wR29pbmdMYXN0ID0gcHNyYjsKLSAgICAgfQotICAgcERDQi0+R29pbmdTUkJDbnQtLTsKLX0KLQotc3RhdGljIHN0cnVjdCBzY2F0dGVybGlzdCogZGMzOTBfc2dfYnVpbGRfc2luZ2xlKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0Jc2dfaW5pdF9vbmUoc2csIGFkZHIsIGxlbmd0aCk7Ci0JcmV0dXJuIHNnOwotfQotCi0vKiBDcmVhdGUgcGNpIG1hcHBpbmcgKi8KLXN0YXRpYyBpbnQgZGMzOTBfcGNpX21hcCAoc3RydWN0IGRjMzkwX3NyYiogcFNSQikKLXsKLQlpbnQgZXJyb3IgPSAwOwotCXN0cnVjdCBzY3NpX2NtbmQgKnBjbWQgPSBwU1JCLT5wY21kOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcFNSQi0+cFNSQkRDQi0+cERDQkFDQi0+cGRldjsKLQlkYzM5MF9jbWRfc2NwX3QqIGNtZHAgPSAoKGRjMzkwX2NtZF9zY3BfdCopKCZwY21kLT5TQ3ApKTsKLQotCS8qIE1hcCBzZW5zZSBidWZmZXIgKi8KLQlpZiAocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpIHsKLQkJcFNSQi0+cFNlZ21lbnRMaXN0CT0gZGMzOTBfc2dfYnVpbGRfc2luZ2xlKCZwU1JCLT5TZWdtZW50eCwgcGNtZC0+c2Vuc2VfYnVmZmVyLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwotCQlwU1JCLT5TR2NvdW50CQk9IHBjaV9tYXBfc2cocGRldiwgcFNSQi0+cFNlZ21lbnRMaXN0LCAxLAotCQkJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwotCQljbWRwLT5zYXZlZF9kbWFfaGFuZGxlCT0gc2dfZG1hX2FkZHJlc3MocFNSQi0+cFNlZ21lbnRMaXN0KTsKLQotCQkvKiBUT0RPOiBlcnJvciBoYW5kbGluZyAqLwotCQlpZiAocFNSQi0+U0djb3VudCAhPSAxKQotCQkJZXJyb3IgPSAxOwotCQlERUJVRzEocHJpbnRrKCIlcygpOiBNYXBwZWQgc2Vuc2UgYnVmZmVyICVwIGF0ICV4XG4iLCBfX2Z1bmNfXywgcGNtZC0+c2Vuc2VfYnVmZmVyLCBjbWRwLT5zYXZlZF9kbWFfaGFuZGxlKSk7Ci0JLyogTWFwIFNHIGxpc3QgKi8KLQl9IGVsc2UgaWYgKHNjc2lfc2dfY291bnQocGNtZCkpIHsKLQkJaW50IG5zZWc7Ci0KLQkJbnNlZyA9IHNjc2lfZG1hX21hcChwY21kKTsKLQotCQlwU1JCLT5wU2VnbWVudExpc3QJPSBzY3NpX3NnbGlzdChwY21kKTsKLQkJcFNSQi0+U0djb3VudAkJPSBuc2VnOwotCi0JCS8qIFRPRE86IGVycm9yIGhhbmRsaW5nICovCi0JCWlmIChuc2VnIDwgMCkKLQkJCWVycm9yID0gMTsKLQkJREVCVUcxKHByaW50aygiJXMoKTogTWFwcGVkIFNHICVwIHdpdGggJWQgKCVkKSBlbGVtZW50c1xuIixcCi0JCQkgICAgICBfX2Z1bmNfXywgc2NzaV9zZ2xpc3QocGNtZCksIG5zZWcsIHNjc2lfc2dfY291bnQocGNtZCkpKTsKLQkvKiBNYXAgc2luZ2xlIHNlZ21lbnQgKi8KLQl9IGVsc2UKLQkJcFNSQi0+U0djb3VudCA9IDA7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qIFJlbW92ZSBwY2kgbWFwcGluZyAqLwotc3RhdGljIHZvaWQgZGMzOTBfcGNpX3VubWFwIChzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotCXN0cnVjdCBzY3NpX2NtbmQgKnBjbWQgPSBwU1JCLT5wY21kOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcFNSQi0+cFNSQkRDQi0+cERDQkFDQi0+cGRldjsKLQlERUJVRzEoZGMzOTBfY21kX3NjcF90KiBjbWRwID0gKChkYzM5MF9jbWRfc2NwX3QqKSgmcGNtZC0+U0NwKSkpOwotCi0JaWYgKHBTUkItPlNSQkZsYWcpIHsKLQkJcGNpX3VubWFwX3NnKHBkZXYsICZwU1JCLT5TZWdtZW50eCwgMSwgRE1BX0ZST01fREVWSUNFKTsKLQkJREVCVUcxKHByaW50aygiJXMoKTogVW5tYXBwZWQgc2Vuc2UgYnVmZmVyIGF0ICV4XG4iLCBfX2Z1bmNfXywgY21kcC0+c2F2ZWRfZG1hX2hhbmRsZSkpOwotCX0gZWxzZSB7Ci0JCXNjc2lfZG1hX3VubWFwKHBjbWQpOwotCQlERUJVRzEocHJpbnRrKCIlcygpOiBVbm1hcHBlZCBTRyBhdCAlcCB3aXRoICVkIGVsZW1lbnRzXG4iLAotCQkJICAgICAgX19mdW5jX18sIHNjc2lfc2dsaXN0KHBjbWQpLCBzY3NpX3NnX2NvdW50KHBjbWQpKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fCi1kYzM5MF9mcmVldGFnIChzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotCWlmIChwU1JCLT5UYWdOdW1iZXIgIT0gU0NTSV9OT19UQUcpIHsKLQkJcERDQi0+VGFnTWFzayAmPSB+KDEgPDwgcFNSQi0+VGFnTnVtYmVyKTsgICAvKiBmcmVlIHRhZyBtYXNrICovCi0JCXBTUkItPlRhZ051bWJlciA9IFNDU0lfTk9fVEFHOwotCX0KLX0KLQotCi1zdGF0aWMgaW50Ci1kYzM5MF9TdGFydFNDU0koIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIgKQotewotICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQgPSBwU1JCLT5wY21kOwotICAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHNjbWQtPmRldmljZTsKLSAgICB1OCBjbWQsIGRpc2NfYWxsb3dlZCwgdHJ5X3N5bmNfbmVnbzsKLSAgICBjaGFyIHRhZ1syXTsKLQotICAgIHBTUkItPlNjc2lQaGFzZSA9IFNDU0lfTk9QMDsKLQotICAgIGlmIChwQUNCLT5Db25uZWN0ZWQpCi0gICAgewotCS8vIFNob3VsZCBub3QgaGFwcGVuIG5vcm1hbGx5Ci0JcHJpbnRrIChLRVJOX1dBUk5JTkcgIkRDMzkwOiBDYW4ndCBzZWxlY3Qgd2hlbiBjb25uZWN0ZWQhICglMDh4LCUwMngpXG4iLAotCQlwU1JCLT5TUkJTdGF0ZSwgcFNSQi0+U1JCRmxhZyk7Ci0JcFNSQi0+U1JCU3RhdGUgPSBTUkJfUkVBRFk7Ci0JcEFDQi0+U2VsQ29ubisrOwotCXJldHVybiAxOwotICAgIH0KLSAgICBpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIHBBQ0ItPmxhc3RfcmVzZXQpKQotICAgIHsKLQlERUJVRzAocHJpbnRrICgiREMzOTA6IFdlIHdlcmUganVzdCByZXNldCBhbmQgZG9uJ3QgYWNjZXB0IGNvbW1hbmRzIHlldCFcbiIpKTsKLQlyZXR1cm4gMTsKLSAgICB9Ci0gICAgLyogS0c6IE1vdmVkIHBjaSBtYXBwaW5nIGhlcmUgKi8KLSAgICBkYzM5MF9wY2lfbWFwKHBTUkIpOwotICAgIC8qIFRPRE86IGVycm9yIGhhbmRsaW5nICovCi0gICAgREMzOTBfd3JpdGU4IChTY3NpX0Rlc3RfSUQsIHBEQ0ItPlRhcmdldElEKTsKLSAgICBEQzM5MF93cml0ZTggKFN5bmNfUGVyaW9kLCBwRENCLT5TeW5jUGVyaW9kKTsKLSAgICBEQzM5MF93cml0ZTggKFN5bmNfT2Zmc2V0LCBwRENCLT5TeW5jT2Zmc2V0KTsKLSAgICBEQzM5MF93cml0ZTggKEN0cmxSZWcxLCBwRENCLT5DdHJsUjEpOwotICAgIERDMzkwX3dyaXRlOCAoQ3RybFJlZzMsIHBEQ0ItPkN0cmxSMyk7Ci0gICAgREMzOTBfd3JpdGU4IChDdHJsUmVnNCwgcERDQi0+Q3RybFI0KTsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsJCS8qIEZsdXNoIEZJRk8gKi8KLSAgICBERUJVRzEocHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBTdGFydCBTQ1NJIGNvbW1hbmQ6ICUwMnggKFN5bmM6JTAyeClcbiIsXAotICAgICAgICAgICAgc2NtZC0+Y21uZFswXSwgcERDQi0+U3luY01vZGUpKTsKLQotICAgIC8qIERvbid0IGRpc2Nvbm5lY3Qgb24gQVVUT19SRVFTRU5TRSwgY2F1c2UgaXQgbWlnaHQgYmUgYW4KLSAgICAgKiBDb250aW5nZW50IEFsbGVnaWFuY2UgQ29uZGl0aW9uICg2LjYpLCB3aGVyZSBubyB0YWdzIHNob3VsZCBiZSB1c2VkLgotICAgICAqIEFsbCBvdGhlciBoYXZlIHRvIGJlIGFsbG93ZWQgdG8gZGlzY29ubmVjdCB0byBwcmV2ZW50IEluY29ycmVjdCAKLSAgICAgKiBJbml0aWF0b3IgQ29ubmVjdGlvbiAoNi44LjIvNi41LjIpICovCi0gICAgLyogQ2hhbmdlZCBLRywgOTkvMDYvMDYgKi8KLSAgICBpZiAoISAocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpKQotCWRpc2NfYWxsb3dlZCA9IHBEQ0ItPkRldk1vZGUgJiBFTl9ESVNDT05ORUNUXzsKLSAgICBlbHNlCi0JZGlzY19hbGxvd2VkID0gMDsKLQotICAgIGlmICgocERDQi0+U3luY01vZGUgJiBTWU5DX0VOQUJMRSkgJiYgcERDQi0+VGFyZ2V0TFVOID09IDAgJiYgc2Rldi0+c2R0ciAmJgotCSgoKHNjbWQtPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSB8fCAocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpKSAmJgotCSAgIShwRENCLT5TeW5jTW9kZSAmIFNZTkNfTkVHT19ET05FKSkgfHwgc2NtZC0+Y21uZFswXSA9PSBJTlFVSVJZKSkKLSAgICAgIHRyeV9zeW5jX25lZ28gPSAxOwotICAgIGVsc2UKLSAgICAgIHRyeV9zeW5jX25lZ28gPSAwOwotCi0gICAgcFNSQi0+TXNnQ250ID0gMDsKLSAgICBjbWQgPSBTRUxfV19BVE47Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgSURFTlRJRlkoZGlzY19hbGxvd2VkLCBwRENCLT5UYXJnZXRMVU4pKTsKLSAgICAvKiBDaGFuZ2UgOTkvMDUvMzE6IERvbid0IHVzZSB0YWdzIHdoZW4gbm90IGRpc2Nvbm5lY3RpbmcgKEJVU1kpICovCi0gICAgaWYgKChwRENCLT5TeW5jTW9kZSAmIEVOX1RBR19RVUVVRUlORykgJiYgZGlzY19hbGxvd2VkICYmIHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY21kLCB0YWcpKSB7Ci0JREMzOTBfd3JpdGU4KFNjc2lGaWZvLCB0YWdbMF0pOwotCXBEQ0ItPlRhZ01hc2sgfD0gMSA8PCB0YWdbMV07Ci0JcFNSQi0+VGFnTnVtYmVyID0gdGFnWzFdOwotCURDMzkwX3dyaXRlOChTY3NpRmlmbywgdGFnWzFdKTsKLQlERUJVRzEocHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IFNlbGVjdCB3L0Rpc0NuIGZvciBTUkIgJXAsIGJsb2NrIHRhZyAlMDJ4XG4iLCBwU1JCLCB0YWdbMV0pKTsKLQljbWQgPSBTRUxfV19BVE4zOwotICAgIH0gZWxzZSB7Ci0JLyogTm8gVGFnUSAqLwotLy9ub190YWc6Ci0JREVCVUcxKHByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBTZWxlY3QgdyVzL0Rpc0NuIGZvciBTUkIgJXAsIE5vIFRhZ1FcbiIsIGRpc2NfYWxsb3dlZCA/ICIiIDogIm8iLCBwU1JCKSk7Ci0gICAgfQotCi0gICAgcFNSQi0+U1JCU3RhdGUgPSBTUkJfU1RBUlRfOwotCi0gICAgaWYgKHRyeV9zeW5jX25lZ28pCi0gICAgICB7IAotCXU4IFN5bmNfT2ZmID0gcERDQi0+U3luY09mZnNldDsKLSAgICAgICAgREVCVUcwKHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogTkVXIFN5bmMgTmVnbyBjb2RlIHRyaWdnZXJlZCAoJWkgJWkpXG4iLCBwRENCLT5UYXJnZXRJRCwgcERDQi0+VGFyZ2V0TFVOKSk7Ci0JcFNSQi0+TXNnT3V0QnVmWzBdID0gRVhURU5ERURfTUVTU0FHRTsKLQlwU1JCLT5Nc2dPdXRCdWZbMV0gPSAzOwotCXBTUkItPk1zZ091dEJ1ZlsyXSA9IEVYVEVOREVEX1NEVFI7Ci0JcFNSQi0+TXNnT3V0QnVmWzNdID0gcERDQi0+TmVnb1BlcmlvZDsKLQlpZiAoIShTeW5jX09mZiAmIDB4MGYpKSBTeW5jX09mZiA9IFNZTkNfTkVHT19PRkZTRVQ7Ci0JcFNSQi0+TXNnT3V0QnVmWzRdID0gU3luY19PZmY7Ci0JcFNSQi0+TXNnQ250ID0gNTsKLQkvL3BTUkItPlNSQlN0YXRlID0gU1JCX01TR09VVF87Ci0JcFNSQi0+U1JCU3RhdGUgfD0gRE9fU1lOQ19ORUdPOwotCWNtZCA9IFNFTF9XX0FUTl9TVE9QOwotICAgICAgfQotCi0gICAgLyogQ29tbWFuZCBpcyB3cml0dGVuIGluIENvbW1hbmRQaGFzZSwgaWYgU0VMX1dfQVROX1NUT1AgLi4uICovCi0gICAgaWYgKGNtZCAhPSBTRUxfV19BVE5fU1RPUCkKLSAgICAgIHsKLQlpZiggcFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UgKQotCSAgewotCSAgICBEQzM5MF93cml0ZTggKFNjc2lGaWZvLCBSRVFVRVNUX1NFTlNFKTsKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgcERDQi0+VGFyZ2V0TFVOIDw8IDUpOwotCSAgICBEQzM5MF93cml0ZTggKFNjc2lGaWZvLCAwKTsKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpRmlmbywgMCk7Ci0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7Ci0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIDApOwotCSAgICBERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJEQzM5MDogQXV0b1JlcVNlbnNlICFcbiIpKTsKLQkgIH0KLQllbHNlCS8qIHdyaXRlIGNtbmQgdG8gYnVzICovIAotCSAgewotCSAgICB1OCAqcHRyOyB1OCBpOwotCSAgICBwdHIgPSAodTggKilzY21kLT5jbW5kOwotCSAgICBmb3IgKGkgPSAwOyBpIDwgc2NtZC0+Y21kX2xlbjsgaSsrKQotCSAgICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sICoocHRyKyspKTsKLQkgIH0KLSAgICAgIH0KLSAgICBERUJVRzAoaWYgKHBBQ0ItPnBBY3RpdmVEQ0IpCVwKLQkgICBwcmludGsgKEtFUk5fV0FSTklORyAiREMzOTA6IEFjdGl2ZURDQiAhPSAwXG4iKSk7Ci0gICAgREVCVUcwKGlmIChwRENCLT5wQWN0aXZlU1JCKQlcCi0JICAgcHJpbnRrIChLRVJOX1dBUk5JTkcgIkRDMzkwOiBBY3RpdmVTUkIgIT0gMFxuIikpOwotICAgIC8vREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotICAgIGlmIChEQzM5MF9yZWFkOCAoU2NzaV9TdGF0dXMpICYgSU5URVJSVVBUKQotICAgIHsKLQlkYzM5MF9mcmVldGFnIChwRENCLCBwU1JCKTsKLQlERUJVRzAocHJpbnRrICgiREMzOTA6IEludGVycnVwdCBkdXJpbmcgU3RhcnQgU0NTSSAodGFyZ2V0ICUwMmktJTAyaSlcbiIsCi0JCSAgICAgICBzY21kLT5kZXZpY2UtPmlkLCAodTgpc2NtZC0+ZGV2aWNlLT5sdW4pKTsKLQlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9SRUFEWTsKLQkvL0RDMzkwX3dyaXRlOCAoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotCXBBQ0ItPlNlbExvc3QrKzsKLQlyZXR1cm4gMTsKLSAgICB9Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBjbWQpOwotICAgIHBBQ0ItPnBBY3RpdmVEQ0IgPSBwRENCOwotICAgIHBEQ0ItPnBBY3RpdmVTUkIgPSBwU1JCOwotICAgIHBBQ0ItPkNvbm5lY3RlZCA9IDE7Ci0gICAgcFNSQi0+U2NzaVBoYXNlID0gU0NTSV9OT1AxOwotICAgIHJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18KLWRjMzkwX0ludmFsaWRDbWQoc3RydWN0IGRjMzkwX2FjYiogcEFDQikKLXsKLQlpZiAocEFDQi0+cEFjdGl2ZURDQi0+cEFjdGl2ZVNSQi0+U1JCU3RhdGUgJiAoU1JCX1NUQVJUXyB8IFNSQl9NU0dPVVQpKQotCQlEQzM5MF93cml0ZTgoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotfQotCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBfX2lubGluZV9fCi1EQzM5MF9JbnRlcnJ1cHQodm9pZCAqZGV2X2lkKQotewotICAgIHN0cnVjdCBkYzM5MF9hY2IgKnBBQ0IgPSBkZXZfaWQ7Ci0gICAgc3RydWN0IGRjMzkwX2RjYiAqcERDQjsKLSAgICBzdHJ1Y3QgZGMzOTBfc3JiICpwU1JCOwotICAgIHU4ICBzc3RhdHVzPTA7Ci0gICAgdTggIHBoYXNlOwotICAgIHZvaWQgICAoKnN0YXRlVikoIHN0cnVjdCBkYzM5MF9hY2IqLCBzdHJ1Y3QgZGMzOTBfc3JiKiwgdTggKik7Ci0gICAgdTggIGlzdGF0ZSwgaXN0YXR1czsKLQotICAgIHNzdGF0dXMgPSBEQzM5MF9yZWFkOCAoU2NzaV9TdGF0dXMpOwotICAgIGlmKCAhKHNzdGF0dXMgJiBJTlRFUlJVUFQpICkKLQlyZXR1cm4gSVJRX05PTkU7Ci0KLSAgICBERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJzc3RhdHVzPSUwMngsIiwgc3N0YXR1cykpOwotCi0gICAgLy9EQzM5MF93cml0ZTMyIChETUFfU2NzaUJ1c0N0cmwsIFdSVF9FUkFTRV9ETUFfU1RBVCB8IEVOX0lOVF9PTl9QQ0lfQUJPUlQpOwotICAgIC8vZHN0YXR1cyA9IERDMzkwX3JlYWQ4IChETUFfU3RhdHVzKTsKLSAgICAvL0RDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgRU5fSU5UX09OX1BDSV9BQk9SVCk7Ci0KLSAgICBzcGluX2xvY2tfaXJxKHBBQ0ItPnBTY3NpSG9zdC0+aG9zdF9sb2NrKTsKLQotICAgIGlzdGF0ZSA9IERDMzkwX3JlYWQ4IChJbnRlcm5fU3RhdGUpOwotICAgIGlzdGF0dXMgPSBEQzM5MF9yZWFkOCAoSU5UX1N0YXR1cyk7IC8qIFRoaXMgY2xlYXJzIFNjc2lfU3RhdHVzLCBJbnRlcm5fU3RhdGUgYW5kIElOVF9TdGF0dXMgISAqLwotCi0gICAgREVCVUcxKHByaW50ayAoS0VSTl9JTkZPICJJc3RhdHVzKFJlcyxJbnYsRGlzLFNlcnYsU3VjYyxSZVMsU2VsQSxTZWwpPSUwMngsIixpc3RhdHVzKSk7Ci0gICAgZGMzOTBfbGFzdHN0YXR1cyAmPSB+MHgwMGZmZmZmZjsKLSAgICBkYzM5MF9sYXN0c3RhdHVzIHw9IC8qIGRzdGF0dXM8PDI0IHwgKi8gc3N0YXR1czw8MTYgfCBpc3RhdGU8PDggfCBpc3RhdHVzOwotCi0gICAgaWYgKHNzdGF0dXMgJiBJTExFR0FMX09QX0VSUikKLSAgICB7Ci0JcHJpbnRrICgiREMzOTA6IElsbGVnYWwgT3BlcmF0aW9uIGRldGVjdGVkICglMDh4KSFcbiIsIGRjMzkwX2xhc3RzdGF0dXMpOwotCWRjMzkwX2R1bXBpbmZvIChwQUNCLCBwQUNCLT5wQWN0aXZlRENCLCBwQUNCLT5wQWN0aXZlRENCLT5wQWN0aXZlU1JCKTsKLSAgICB9Ci0JCi0gICAgZWxzZSBpZiAoaXN0YXR1cyAmICBJTlZBTElEX0NNRCkKLSAgICB7Ci0JcHJpbnRrICgiREMzOTA6IEludmFsaWQgQ29tbWFuZCBkZXRlY3RlZCAoJTA4eCkhXG4iLCBkYzM5MF9sYXN0c3RhdHVzKTsKLQlkYzM5MF9JbnZhbGlkQ21kKCBwQUNCICk7Ci0JZ290byB1bmxvY2s7Ci0gICAgfQotCi0gICAgaWYgKGlzdGF0dXMgJiAgU0NTSV9SRVNFVCkKLSAgICB7Ci0JZGMzOTBfU2NzaVJzdERldGVjdCggcEFDQiApOwotCWdvdG8gdW5sb2NrOwotICAgIH0KLQotICAgIGlmIChpc3RhdHVzICYgIERJU0NPTk5FQ1RFRCkKLSAgICB7Ci0JZGMzOTBfRGlzY29ubmVjdCggcEFDQiApOwotCWdvdG8gdW5sb2NrOwotICAgIH0KLQotICAgIGlmIChpc3RhdHVzICYgIFJFU0VMRUNURUQpCi0gICAgewotCWRjMzkwX1Jlc2VsZWN0KCBwQUNCICk7Ci0JZ290byB1bmxvY2s7Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoaXN0YXR1cyAmIChTRUxFQ1RFRCB8IFNFTF9BVFRFTlRJT04pKQotICAgIHsKLQlwcmludGsgKEtFUk5fRVJSICJEQzM5MDogVGFyZ2V0IG1vZGUgbm90IHN1cHBvcnRlZCFcbiIpOwotCWdvdG8gdW5sb2NrOwotICAgIH0KLQotICAgIGlmIChpc3RhdHVzICYgKFNVQ0NFU1NGVUxfT1B8U0VSVklDRV9SRVFVRVNUKSApCi0gICAgewotCXBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotCWlmICghcERDQikKLQl7Ci0JCXByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBTdWMuIG9wLyBTZXJ2LiByZXE6IHBBY3RpdmVEQ0IgPSAwIVxuIik7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQlwU1JCID0gcERDQi0+cEFjdGl2ZVNSQjsKLQlpZiggcERDQi0+RENCRmxhZyAmIEFCT1JUX0RFVl8gKQotCSAgZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0IChwQUNCLCBwU1JCKTsKLQotCXBoYXNlID0gcFNSQi0+U2NzaVBoYXNlOwotCURFQlVHMShwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFslaV0lcygwKSAoJTAyeClcbiIsIHBoYXNlLCBkYzM5MF9wMF9zdHJbcGhhc2VdLCBzc3RhdHVzKSk7Ci0Jc3RhdGVWID0gKHZvaWQgKikgZGMzOTBfcGhhc2UwW3BoYXNlXTsKLQkoICpzdGF0ZVYgKSggcEFDQiwgcFNSQiwgJnNzdGF0dXMgKTsKLQotCXBTUkItPlNjc2lQaGFzZSA9IHNzdGF0dXMgJiA3OwotCXBoYXNlID0gKHU4KSBzc3RhdHVzICYgNzsKLQlERUJVRzEocHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBbJWldJXMoMSkgKCUwMngpXG4iLCBwaGFzZSwgZGMzOTBfcDFfc3RyW3BoYXNlXSwgc3N0YXR1cykpOwotCXN0YXRlViA9ICh2b2lkICopIGRjMzkwX3BoYXNlMVtwaGFzZV07Ci0JKCAqc3RhdGVWICkoIHBBQ0IsIHBTUkIsICZzc3RhdHVzICk7Ci0gICAgfQotCi0gdW5sb2NrOgotICAgIHNwaW5fdW5sb2NrX2lycShwQUNCLT5wU2NzaUhvc3QtPmhvc3RfbG9jayk7Ci0gICAgcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG9fREMzOTBfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLSAgICBpcnFyZXR1cm5fdCByZXQ7Ci0gICAgREVCVUcxKHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogSXJxICglaSkgY2F1Z2h0OiAiLCBpcnEpKTsKLSAgICAvKiBMb2NraW5nIGlzIGRvbmUgaW4gREMzOTBfSW50ZXJydXB0ICovCi0gICAgcmV0ID0gREMzOTBfSW50ZXJydXB0KGRldl9pZCk7Ci0gICAgREVCVUcxKHByaW50ayAoIi4uIElSUSByZXR1cm5lZFxuIikpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9EYXRhT3V0XzAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQotewotICAgIHU4ICAgc3N0YXR1czsKLSAgICB1MzIgIFJlc2lkQ250OwotICAgIHU4ICAgZHN0YXRlID0gMDsKLQotICAgIHNzdGF0dXMgPSAqcHNzdGF0dXM7Ci0KLSAgICBpZiggIShwU1JCLT5TUkJTdGF0ZSAmIFNSQl9YRkVSUEFEKSApCi0gICAgewotCWlmKCBzc3RhdHVzICYgKFBBUklUWV9FUlIgfCBJTExFR0FMX09QX0VSUikgKQotCSAgICBwU1JCLT5TUkJTdGF0dXMgfD0gUEFSSVRZX0VSUk9SOwotCi0JaWYoIHNzdGF0dXMgJiBDT1VOVF8yX1pFUk8gKQotCXsKLQkgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEhaOwotCi0JICAgIC8qIEZ1bmN0aW9uIGNhbGxlZCBmcm9tIHRoZSBJU1Igd2l0aCB0aGUgaG9zdF9sb2NrIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLQkgICAgaWYgKHBTUkItPlNHVG9CZVhmZXJMZW4pCi0JCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSAmJiAhKChkc3RhdGUgPSBEQzM5MF9yZWFkOCAoRE1BX1N0YXR1cykpICYgRE1BX1hGRVJfRE9ORSkpIHsKLQkJICAgIHNwaW5fdW5sb2NrX2lycShwQUNCLT5wU2NzaUhvc3QtPmhvc3RfbG9jayk7Ci0JCSAgICB1ZGVsYXkoNTApOwotCQkgICAgc3Bpbl9sb2NrX2lycShwQUNCLT5wU2NzaUhvc3QtPmhvc3RfbG9jayk7Ci0JCX0KLQkgICAgaWYgKCF0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKLQkJcHJpbnRrIChLRVJOX0NSSVQgIkRDMzkwOiBEZWFkbG9jayBpbiBEYXRhT3V0XzA6IERNQSBhYm9ydGVkIHVuZmluaXNoZWQ6ICUwNnggYnl0ZXMgcmVtYWluISFcbiIsCi0JCQlEQzM5MF9yZWFkMzIgKERNQV9Xa19CeXRlQ250cikpOwotCSAgICBkYzM5MF9sYXN0c3RhdHVzICY9IH4weGZmMDAwMDAwOwotCSAgICBkYzM5MF9sYXN0c3RhdHVzIHw9IGRzdGF0ZSA8PCAyNDsKLQkgICAgcFNSQi0+VG90YWxYZmVycmVkTGVuICs9IHBTUkItPlNHVG9CZVhmZXJMZW47Ci0JICAgIHBTUkItPlNHSW5kZXgrKzsKLQkgICAgaWYoIHBTUkItPlNHSW5kZXggPCBwU1JCLT5TR2NvdW50ICkKLQkgICAgewotCQlwU1JCLT5wU2VnbWVudExpc3QrKzsKLQotCQlkYzM5MF9zdGFydF9zZWdtZW50KHBTUkIpOwotCSAgICB9Ci0JICAgIGVsc2UKLQkJcFNSQi0+U0dUb0JlWGZlckxlbiA9IDA7Ci0JfQotCWVsc2UKLQl7Ci0JICAgIFJlc2lkQ250ID0gKCh1MzIpIERDMzkwX3JlYWQ4IChDdXJyZW50X0ZpZm8pICYgMHgxZikgKwotCQkgICAgKCgodTMyKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX0hpZ2gpIDw8IDE2KSB8Ci0JCSAgICAgKCh1MzIpIERDMzkwX3JlYWQ4IChDdGNSZWdfTWlkKSA8PCA4KSB8Ci0JCSAgICAgKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19Mb3cpKTsKLQotCSAgICBkYzM5MF9hZHZhbmNlX3NlZ21lbnQocFNSQiwgUmVzaWRDbnQpOwotCX0KLSAgICB9Ci0gICAgaWYgKCgqcHNzdGF0dXMgJiA3KSAhPSBTQ1NJX0RBVEFfT1VUKQotICAgIHsKLQkgICAgREMzOTBfd3JpdGU4IChETUFfQ21kLCBXUklURV9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0gICAgfQkgICAgCi19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9EYXRhSW5fMChzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0gICAgdTggICBzc3RhdHVzLCByZXNpZHVhbCwgYnZhbDsKLSAgICB1MzIgIFJlc2lkQ250LCBpOwotICAgIHVuc2lnbmVkIGxvbmcgICB4ZmVyQ250OwotCi0gICAgc3N0YXR1cyA9ICpwc3N0YXR1czsKLQotICAgIGlmKCAhKHBTUkItPlNSQlN0YXRlICYgU1JCX1hGRVJQQUQpICkKLSAgICB7Ci0JaWYoIHNzdGF0dXMgJiAoUEFSSVRZX0VSUiB8IElMTEVHQUxfT1BfRVJSKSkKLQkgICAgcFNSQi0+U1JCU3RhdHVzIHw9IFBBUklUWV9FUlJPUjsKLQotCWlmKCBzc3RhdHVzICYgQ09VTlRfMl9aRVJPICkKLQl7Ci0JICAgIGludCBkc3RhdGUgPSAwOwotCSAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgSFo7Ci0KLQkgICAgLyogRnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIElTUiB3aXRoIHRoZSBob3N0X2xvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotCSAgICBpZiAocFNSQi0+U0dUb0JlWGZlckxlbikKLQkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpICYmICEoKGRzdGF0ZSA9IERDMzkwX3JlYWQ4IChETUFfU3RhdHVzKSkgJiBETUFfWEZFUl9ET05FKSkgewotCQkgICAgc3Bpbl91bmxvY2tfaXJxKHBBQ0ItPnBTY3NpSG9zdC0+aG9zdF9sb2NrKTsKLQkJICAgIHVkZWxheSg1MCk7Ci0JCSAgICBzcGluX2xvY2tfaXJxKHBBQ0ItPnBTY3NpSG9zdC0+aG9zdF9sb2NrKTsKLQkJfQotCSAgICBpZiAoIXRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCXByaW50ayAoS0VSTl9DUklUICJEQzM5MDogRGVhZGxvY2sgaW4gRGF0YUluXzA6IERNQSBhYm9ydGVkIHVuZmluaXNoZWQ6ICUwNnggYnl0ZXMgcmVtYWluISFcbiIsCi0JCQlEQzM5MF9yZWFkMzIgKERNQV9Xa19CeXRlQ250cikpOwotCQlwcmludGsgKEtFUk5fQ1JJVCAiREMzOTA6IERhdGFJbl8wOiBETUEgU3RhdGU6ICVpXG4iLCBkc3RhdGUpOwotCSAgICB9Ci0JICAgIGRjMzkwX2xhc3RzdGF0dXMgJj0gfjB4ZmYwMDAwMDA7Ci0JICAgIGRjMzkwX2xhc3RzdGF0dXMgfD0gZHN0YXRlIDw8IDI0OwotCSAgICBERUJVRzEoUmVzaWRDbnQgPSAoKHVuc2lnbmVkIGxvbmcpIERDMzkwX3JlYWQ4IChDdGNSZWdfSGlnaCkgPDwgMTYpCVwKLQkJKyAoKHVuc2lnbmVkIGxvbmcpIERDMzkwX3JlYWQ4IChDdGNSZWdfTWlkKSA8PCA4KQkJXAotCQkrICgodW5zaWduZWQgbG9uZykgREMzOTBfcmVhZDggKEN0Y1JlZ19Mb3cpKSk7Ci0JICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIkNvdW50XzJfWmVybyAoUmVzaWRDbnQ9JXUsVG9CZVhmZXI9JWx1KSwiLCBSZXNpZENudCwgcFNSQi0+U0dUb0JlWGZlckxlbikpOwotCi0JICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKLQotCSAgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gKz0gcFNSQi0+U0dUb0JlWGZlckxlbjsKLQkgICAgcFNSQi0+U0dJbmRleCsrOwotCSAgICBpZiggcFNSQi0+U0dJbmRleCA8IHBTUkItPlNHY291bnQgKQotCSAgICB7Ci0JCXBTUkItPnBTZWdtZW50TGlzdCsrOwotCi0JCWRjMzkwX3N0YXJ0X3NlZ21lbnQocFNSQik7Ci0JICAgIH0KLQkgICAgZWxzZQotCQlwU1JCLT5TR1RvQmVYZmVyTGVuID0gMDsKLQl9Ci0JZWxzZQkvKiBwaGFzZSBjaGFuZ2VkICovCi0JewotCSAgICByZXNpZHVhbCA9IDA7Ci0JICAgIGJ2YWwgPSBEQzM5MF9yZWFkOCAoQ3VycmVudF9GaWZvKTsKLQkgICAgd2hpbGUoIGJ2YWwgJiAweDFmICkKLQkgICAgewotCQlERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJDaGVjayBmb3IgcmVzaWR1YWxzLCIpKTsKLQkJaWYoIChidmFsICYgMHgxZikgPT0gMSApCi0JCXsKLQkJICAgIGZvcihpPTA7IGkgPCAweDEwMDsgaSsrKQotCQkgICAgewotCQkJYnZhbCA9IERDMzkwX3JlYWQ4IChDdXJyZW50X0ZpZm8pOwotCQkJaWYoICEoYnZhbCAmIDB4MWYpICkKLQkJCSAgICBnb3RvIGRpbl8xOwotCQkJZWxzZSBpZiggaSA9PSAweDBmZiApCi0JCQl7Ci0JCQkgICAgcmVzaWR1YWwgPSAxOyAgIC8qIDsxIHJlc2lkdWFsIGJ5dGUgKi8KLQkJCSAgICBnb3RvIGRpbl8xOwotCQkJfQotCQkgICAgfQotCQl9Ci0JCWVsc2UKLQkJICAgIGJ2YWwgPSBEQzM5MF9yZWFkOCAoQ3VycmVudF9GaWZvKTsKLQkgICAgfQotZGluXzE6Ci0JICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0JMQVNUX0NNRCk7Ci0JICAgIGZvciAoaSA9IDB4YTAwMDsgaTsgaS0tKQotCSAgICB7Ci0JCWJ2YWwgPSBEQzM5MF9yZWFkOCAoRE1BX1N0YXR1cyk7Ci0JCWlmIChidmFsICYgQkxBU1RfQ09NUExFVEUpCi0JCSAgICBicmVhazsKLQkgICAgfQotCSAgICAvKiBJdCBzZWVtcyBhIERNQSBCbGFzdCBhYm9ydCBpc24ndCB0aGF0IGJhZCAuLi4gKi8KLQkgICAgaWYgKCFpKSBwcmludGsgKEtFUk5fRVJSICJEQzM5MDogRE1BIEJsYXN0IGFib3J0ZWQgdW5maW5pc2hlZCFcbiIpOwotCSAgICAvL0RDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKLQkgICAgZGMzOTBfbGFzdHN0YXR1cyAmPSB+MHhmZjAwMDAwMDsKLQkgICAgZGMzOTBfbGFzdHN0YXR1cyB8PSBidmFsIDw8IDI0OwotCi0JICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIkJsYXN0OiBSZWFkICVpIHRpbWVzIERNQV9TdGF0dXMgJTAyeCIsIDB4YTAwMC1pLCBidmFsKSk7Ci0JICAgIFJlc2lkQ250ID0gKCgodTMyKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX0hpZ2gpIDw8IDE2KSB8Ci0JCQkoKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19NaWQpIDw8IDgpKSB8Ci0JCSAgICAodTMyKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX0xvdyk7Ci0KLQkgICAgeGZlckNudCA9IGRjMzkwX2FkdmFuY2Vfc2VnbWVudChwU1JCLCBSZXNpZENudCk7Ci0KLQkgICAgaWYgKHJlc2lkdWFsKSB7Ci0JCXNpemVfdCBjb3VudCA9IDE7Ci0JCXNpemVfdCBvZmZzZXQgPSBwU1JCLT5TR0J1c0FkZHIgLSBzZ19kbWFfYWRkcmVzcyhwU1JCLT5wU2VnbWVudExpc3QpOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQl1OCAqcHRyOwotCi0JCWJ2YWwgPSBEQzM5MF9yZWFkOCAoU2NzaUZpZm8pOwkgICAgLyogZ2V0IG9uZSByZXNpZHVhbCBieXRlICovCi0KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlwdHIgPSBzY3NpX2ttYXBfYXRvbWljX3NnKHBTUkItPnBTZWdtZW50TGlzdCwgcFNSQi0+U0djb3VudCwgJm9mZnNldCwgJmNvdW50KTsKLQkJaWYgKGxpa2VseShwdHIpKSB7Ci0JCQkqKHB0ciArIG9mZnNldCkgPSBidmFsOwotCQkJc2NzaV9rdW5tYXBfYXRvbWljX3NnKHB0cik7Ci0JCX0KLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlXQVJOX09OKCFwdHIpOwotCi0JCS8qIDEgbW9yZSBieXRlIHJlYWQgKi8KLQkJeGZlckNudCArPSBkYzM5MF9hZHZhbmNlX3NlZ21lbnQocFNSQiwgcFNSQi0+U0dUb0JlWGZlckxlbiAtIDEpOwotCSAgICB9Ci0JICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIlhmZXJlZDogJWx1LCBUb3RhbDogJWx1LCBSZW1haW5pbmc6ICVsdVxuIiwgeGZlckNudCxcCi0JCQkgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4sIHBTUkItPlNHVG9CZVhmZXJMZW4pKTsKLQl9Ci0gICAgfQotICAgIGlmICgoKnBzc3RhdHVzICYgNykgIT0gU0NTSV9EQVRBX0lOKQotICAgIHsKLQkgICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0JICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9Db21tYW5kXzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX1N0YXR1c18wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0KLSAgICBwU1JCLT5UYXJnZXRTdGF0dXMgPSBEQzM5MF9yZWFkOCAoU2NzaUZpZm8pOwotICAgIC8vdWRlbGF5ICgxKTsKLSAgICBwU1JCLT5FbmRNZXNzYWdlID0gREMzOTBfcmVhZDggKFNjc2lGaWZvKTsJLyogZ2V0IG1lc3NhZ2UgKi8KLQotICAgICpwc3N0YXR1cyA9IFNDU0lfTk9QMDsKLSAgICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9DT01QTEVURUQ7Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBNU0dfQUNDRVBURURfQ01EKTsKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX01zZ091dF8wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0gICAgaWYoIHBTUkItPlNSQlN0YXRlICYgKFNSQl9VTkVYUEVDVF9SRVNFTCtTUkJfQUJPUlRfU0VOVCkgKQotCSpwc3N0YXR1cyA9IFNDU0lfTk9QMDsKLSAgICAvL0RDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fCi1kYzM5MF9yZXByb2cgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IpCi17Ci0gIERDMzkwX3dyaXRlOCAoU3luY19QZXJpb2QsIHBEQ0ItPlN5bmNQZXJpb2QpOwotICBEQzM5MF93cml0ZTggKFN5bmNfT2Zmc2V0LCBwRENCLT5TeW5jT2Zmc2V0KTsKLSAgREMzOTBfd3JpdGU4IChDdHJsUmVnMywgcERDQi0+Q3RybFIzKTsKLSAgREMzOTBfd3JpdGU4IChDdHJsUmVnNCwgcERDQi0+Q3RybFI0KTsKLSAgZGMzOTBfU2V0WGZlclJhdGUgKHBBQ0IsIHBEQ0IpOwotfQotCi0KLSNpZmRlZiBEQzM5MF9ERUJVRzAKLXN0YXRpYyB2b2lkCi1kYzM5MF9wcmludE1zZyAodTggKk1zZ0J1ZiwgdTggbGVuKQotewotICBpbnQgaTsKLSAgcHJpbnRrICgiICUwMngiLCBNc2dCdWZbMF0pOwotICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspCi0gICAgcHJpbnRrICgiICUwMngiLCBNc2dCdWZbaV0pOwotICBwcmludGsgKCJcbiIpOwotfQotI2VuZGlmCi0KLSNkZWZpbmUgREMzOTBfRU5BQkxFX01TR09VVCBEQzM5MF93cml0ZTggKFNjc2lDbWQsIFNFVF9BVE5fQ01EKQotCi0vKiByZWplY3RfbXNnICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fCi1kYzM5MF9Nc2dJbl9yZWplY3QgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gIHBTUkItPk1zZ091dEJ1ZlswXSA9IE1FU1NBR0VfUkVKRUNUOwotICBwU1JCLT5Nc2dDbnQgPSAxOwotICBEQzM5MF9FTkFCTEVfTVNHT1VUOwotICBERUJVRzAgKHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogUmVqZWN0IG1lc3NhZ2VcbiIpKTsKLX0KLQotLyogYWJvcnQgY29tbWFuZCAqLwotc3RhdGljIHZvaWQKLWRjMzkwX0VuYWJsZU1zZ091dF9BYm9ydCAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIgKQotewotICAgIHBTUkItPk1zZ091dEJ1ZlswXSA9IEFCT1JUOyAKLSAgICBwU1JCLT5Nc2dDbnQgPSAxOyBEQzM5MF9FTkFCTEVfTVNHT1VUOwotICAgIHBTUkItPnBTUkJEQ0ItPkRDQkZsYWcgJj0gfkFCT1JUX0RFVl87Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGMzOTBfc3JiKgotZGMzOTBfTXNnSW5fUVRhZyAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX2RjYiogcERDQiwgczggdGFnKQotewotICBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCID0gcERDQi0+cEdvaW5nU1JCOwotCi0gIGlmIChwU1JCKQotICAgIHsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gc2NzaV9maW5kX3RhZyhwU1JCLT5wY21kLT5kZXZpY2UsIHRhZyk7Ci0JcFNSQiA9IChzdHJ1Y3QgZGMzOTBfc3JiICopc2NtZC0+aG9zdF9zY3JpYmJsZTsKLQotCWlmIChwRENCLT5EQ0JGbGFnICYgQUJPUlRfREVWXykKLQl7Ci0JICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9BQk9SVF9TRU5UOwotCSAgZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0KCBwQUNCLCBwU1JCICk7Ci0JfQotCi0JaWYgKCEocFNSQi0+U1JCU3RhdGUgJiBTUkJfRElTQ09OTkVDVCkpCi0JCWdvdG8gbWluZ3gwOwotCi0JcERDQi0+cEFjdGl2ZVNSQiA9IHBTUkI7Ci0JcFNSQi0+U1JCU3RhdGUgPSBTUkJfREFUQV9YRkVSOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICBtaW5neDA6Ci0gICAgICBwU1JCID0gcEFDQi0+cFRtcFNSQjsKLSAgICAgIHBTUkItPlNSQlN0YXRlID0gU1JCX1VORVhQRUNUX1JFU0VMOwotICAgICAgcERDQi0+cEFjdGl2ZVNSQiA9IHBTUkI7Ci0gICAgICBwU1JCLT5Nc2dPdXRCdWZbMF0gPSBBQk9SVF9UQUc7Ci0gICAgICBwU1JCLT5Nc2dDbnQgPSAxOyBEQzM5MF9FTkFCTEVfTVNHT1VUOwotICAgIH0KLSAgcmV0dXJuIHBTUkI7Ci19Ci0KLQotLyogc2V0IGFzeW5jIHRyYW5zZmVyIG1vZGUgKi8KLXN0YXRpYyB2b2lkIAotZGMzOTBfTXNnSW5fc2V0X2FzeW5jIChzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotICBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCID0gcFNSQi0+cFNSQkRDQjsKLSAgaWYgKCEocFNSQi0+U1JCU3RhdGUgJiBET19TWU5DX05FR08pKSAKLSAgICBwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFRhcmdldCAlaSBpbml0aWF0ZXMgTm9uLVN5bmM/XG4iLCBwRENCLT5UYXJnZXRJRCk7Ci0gIHBTUkItPlNSQlN0YXRlICY9IH5ET19TWU5DX05FR087Ci0gIHBEQ0ItPlN5bmNNb2RlICY9IH4oU1lOQ19FTkFCTEUrU1lOQ19ORUdPX0RPTkUpOwotICBwRENCLT5TeW5jUGVyaW9kID0gMDsKLSAgcERDQi0+U3luY09mZnNldCA9IDA7Ci0gIC8vcERDQi0+TmVnb1BlcmlvZCA9IDUwOyAvKiAyMDBucyA8PT4gNSBNSHogKi8KLSAgcERDQi0+Q3RybFIzID0gRkFTVF9DTEs7CS8qIGZhc3QgY2xvY2sgLyBub3JtYWwgc2NzaSAqLwotICBwRENCLT5DdHJsUjQgJj0gMHgzZjsKLSAgcERDQi0+Q3RybFI0IHw9IHBBQ0ItPmdsaXRjaF9jZmc7CS8qIGdsaXRjaCBlYXRlciAqLwotICBkYzM5MF9yZXByb2cgKHBBQ0IsIHBEQ0IpOwotfQotCi0vKiBzZXQgc3luYyB0cmFuc2ZlciBtb2RlICovCi1zdGF0aWMgdm9pZAotZGMzOTBfTXNnSW5fc2V0X3N5bmMgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gIHU4IGJ2YWw7Ci0gIHUxNiB3dmFsLCB3dmFsMTsKLSAgc3RydWN0IGRjMzkwX2RjYiogcERDQiA9IHBTUkItPnBTUkJEQ0I7Ci0gIHU4IG9sZHN5bmNwZXJpb2QgPSBwRENCLT5TeW5jUGVyaW9kOwotICB1OCBvbGRzeW5jb2Zmc2V0ID0gcERDQi0+U3luY09mZnNldDsKLSAgCi0gIGlmICghKHBTUkItPlNSQlN0YXRlICYgRE9fU1lOQ19ORUdPKSkKLSAgICB7Ci0gICAgICBwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFRhcmdldCAlaSBpbml0aWF0ZXMgU3luYzogJWlucyAlaSAuLi4gYW5zd2VyIC4uLlxuIiwgCi0JICAgICAgcERDQi0+VGFyZ2V0SUQsIHBTUkItPk1zZ0luQnVmWzNdPDwyLCBwU1JCLT5Nc2dJbkJ1Zls0XSk7Ci0KLSAgICAgIC8qIHJlamVjdCAqLwotICAgICAgLy9kYzM5MF9Nc2dJbl9yZWplY3QgKHBBQ0IsIHBTUkIpOwotICAgICAgLy9yZXR1cm4gZGMzOTBfTXNnSW5fc2V0X2FzeW5jIChwQUNCLCBwU1JCKTsKLQotICAgICAgLyogUmVwbHkgd2l0aCBjb3JyZWN0ZWQgU0RUUiBNZXNzYWdlICovCi0gICAgICBpZiAocFNSQi0+TXNnSW5CdWZbNF0gPiAxNSkKLQl7IAotCSAgcHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBMb3dlciBTeW5jIE9mZnNldCB0byAxNVxuIik7Ci0JICBwU1JCLT5Nc2dJbkJ1Zls0XSA9IDE1OwotCX0KLSAgICAgIGlmIChwU1JCLT5Nc2dJbkJ1ZlszXSA8IHBEQ0ItPk5lZ29QZXJpb2QpCi0JewotCSAgcHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBTZXQgc3luYyBuZWdvIHBlcmlvZCB0byAlaW5zXG4iLCBwRENCLT5OZWdvUGVyaW9kIDw8IDIpOwotCSAgcFNSQi0+TXNnSW5CdWZbM10gPSBwRENCLT5OZWdvUGVyaW9kOwotCX0KLSAgICAgIG1lbWNweSAocFNSQi0+TXNnT3V0QnVmLCBwU1JCLT5Nc2dJbkJ1ZiwgNSk7Ci0gICAgICBwU1JCLT5Nc2dDbnQgPSA1OwotICAgICAgREMzOTBfRU5BQkxFX01TR09VVDsKLSAgICB9Ci0KLSAgcFNSQi0+U1JCU3RhdGUgJj0gfkRPX1NZTkNfTkVHTzsKLSAgcERDQi0+U3luY01vZGUgfD0gU1lOQ19FTkFCTEUrU1lOQ19ORUdPX0RPTkU7Ci0gIHBEQ0ItPlN5bmNPZmZzZXQgJj0gMHgwZjA7Ci0gIHBEQ0ItPlN5bmNPZmZzZXQgfD0gcFNSQi0+TXNnSW5CdWZbNF07Ci0gIHBEQ0ItPk5lZ29QZXJpb2QgPSBwU1JCLT5Nc2dJbkJ1ZlszXTsKLQotICB3dmFsID0gKHUxNikgcFNSQi0+TXNnSW5CdWZbM107Ci0gIHd2YWwgPSB3dmFsIDw8IDI7IHd2YWwgLT0gMzsgd3ZhbDEgPSB3dmFsIC8gMjU7CS8qIGNvbXB1dGUgc3BlZWQgKi8KLSAgaWYoICh3dmFsMSAqIDI1KSAhPSB3dmFsKSB3dmFsMSsrOwotICBidmFsID0gRkFTVF9DTEsrRkFTVF9TQ1NJOwkvKiBmYXN0IGNsb2NrIC8gZmFzdCBzY3NpICovCi0KLSAgcERDQi0+Q3RybFI0ICY9IDB4M2Y7CQkvKiBHbGl0Y2ggZWF0ZXI6IDEybnMgbGVzcyB0aGFuIG5vcm1hbCAqLwotICBpZiAocEFDQi0+Z2xpdGNoX2NmZyAhPSBOU19UT19HTElUQ0goMCkpCi0gICAgcERDQi0+Q3RybFI0IHw9IE5TX1RPX0dMSVRDSCgoKEdMSVRDSF9UT19OUyhwQUNCLT5nbGl0Y2hfY2ZnKSkgLSAxKSk7Ci0gIGVsc2UKLSAgICBwRENCLT5DdHJsUjQgfD0gTlNfVE9fR0xJVENIKDApOwotICBpZiAod3ZhbDEgPCA0KSBwRENCLT5DdHJsUjQgfD0gTlNfVE9fR0xJVENIKDApOyAvKiBVbHRyYSAqLwotCi0gIGlmICh3dmFsMSA+PSA4KQotICAgIHsKLSAgICAgIHd2YWwxLS07CS8qIFRpbWluZyBjb21wdXRhdGlvbiBkaWZmZXJzIGJ5IDEgZnJvbSBGQVNUX1NDU0kgKi8KLSAgICAgIGJ2YWwgPSBGQVNUX0NMSzsJCS8qIGZhc3QgY2xvY2sgLyBub3JtYWwgc2NzaSAqLwotICAgICAgcERDQi0+Q3RybFI0IHw9IHBBQ0ItPmdsaXRjaF9jZmc7IAkvKiBnbGl0Y2ggZWF0ZXIgKi8KLSAgICB9Ci0KLSAgcERDQi0+Q3RybFIzID0gYnZhbDsKLSAgcERDQi0+U3luY1BlcmlvZCA9ICh1OCl3dmFsMTsKLSAgCi0gIGlmICgob2xkc3luY3BlcmlvZCAhPSB3dmFsMSB8fCBvbGRzeW5jb2Zmc2V0ICE9IHBEQ0ItPlN5bmNPZmZzZXQpICYmIHBEQ0ItPlRhcmdldExVTiA9PSAwKQotICAgIHsKLSAgICAgIGlmICghIChidmFsICYgRkFTVF9TQ1NJKSkgd3ZhbDErKzsKLSAgICAgIHByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogVGFyZ2V0ICVpOiBTeW5jIHRyYW5zZmVyICVpLiUxaSBNSHosIE9mZnNldCAlaVxuIiwgcERDQi0+VGFyZ2V0SUQsIAotCSAgICAgIDQwL3d2YWwxLCAoKDQwJXd2YWwxKSoxMCt3dmFsMS8yKS93dmFsMSwgcERDQi0+U3luY09mZnNldCAmIDB4MGYpOwotICAgIH0KLSAgCi0gIGRjMzkwX3JlcHJvZyAocEFDQiwgcERDQik7Ci19Ci0KLQotLyogaGFuZGxlIFJFU1RPUkVfUFRSICovCi0vKiBUaGlzIGRvZXNuJ3QgbG9vayB2ZXJ5IGhlYWx0aHkuLi4gdG8tYmUtZml4ZWQgKi8KLXN0YXRpYyB2b2lkIAotZGMzOTBfcmVzdG9yZV9wdHIgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gICAgc3RydWN0IHNjc2lfY21uZCAqcGNtZCA9IHBTUkItPnBjbWQ7Ci0gICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpwc2dsOwotICAgIHBTUkItPlRvdGFsWGZlcnJlZExlbiA9IDA7Ci0gICAgcFNSQi0+U0dJbmRleCA9IDA7Ci0gICAgaWYgKHNjc2lfc2dfY291bnQocGNtZCkpIHsKLQlzaXplX3Qgc2F2ZWQ7Ci0JcFNSQi0+cFNlZ21lbnRMaXN0ID0gc2NzaV9zZ2xpc3QocGNtZCk7Ci0JcHNnbCA9IHBTUkItPnBTZWdtZW50TGlzdDsKLQkvL2RjMzkwX3BjaV9zeW5jKHBTUkIpOwotCi0Jd2hpbGUgKHBTUkItPlRvdGFsWGZlcnJlZExlbiArICh1bnNpZ25lZCBsb25nKSBzZ19kbWFfbGVuKHBzZ2wpIDwgcFNSQi0+U2F2ZWRfUHRyKQotCXsKLQkgICAgcFNSQi0+VG90YWxYZmVycmVkTGVuICs9ICh1bnNpZ25lZCBsb25nKSBzZ19kbWFfbGVuKHBzZ2wpOwotCSAgICBwU1JCLT5TR0luZGV4Kys7Ci0JICAgIGlmKCBwU1JCLT5TR0luZGV4IDwgcFNSQi0+U0djb3VudCApCi0JICAgIHsKLQkJcFNSQi0+cFNlZ21lbnRMaXN0Kys7Ci0KLQkJZGMzOTBfc3RhcnRfc2VnbWVudChwU1JCKTsKLQkgICAgfQotCSAgICBlbHNlCi0JCXBTUkItPlNHVG9CZVhmZXJMZW4gPSAwOwotCX0KLQotCXNhdmVkID0gcFNSQi0+U2F2ZWRfUHRyIC0gcFNSQi0+VG90YWxYZmVycmVkTGVuOwotCXBTUkItPlNHVG9CZVhmZXJMZW4gLT0gc2F2ZWQ7Ci0JcFNSQi0+U0dCdXNBZGRyICs9IHNhdmVkOwotCXByaW50ayAoS0VSTl9JTkZPICJEQzM5MDogUG9pbnRlciByZXN0b3JlZC4gU2VnbWVudCAlaSwgVG90YWwgJWxpLCBCdXMgJTA4bHhcbiIsCi0JCXBTUkItPlNHSW5kZXgsIHBTUkItPlNhdmVkX1B0ciwgcFNSQi0+U0dCdXNBZGRyKTsKLQotICAgIH0gZWxzZSB7Ci0JIHBTUkItPlNHY291bnQgPSAwOwotCSBwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFJFU1RPUkVfUFRSIG1lc3NhZ2UgZm9yIFRyYW5zZmVyIHdpdGhvdXQgU2NhdHRlci1HYXRoZXIgPz9cbiIpOwotICAgIH0KLQotICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gPSBwU1JCLT5TYXZlZF9QdHI7Ci19Ci0KLQotLyogQWNjb3JkaW5nIHRvIHRoZSBkb2NzLCB0aGUgQU01M0M5NzQgcmVhZHMgdGhlIG1lc3NhZ2UgYW5kIAotICogZ2VuZXJhdGVzIGEgU3VjY2Vzc2Z1bCBPcGVyYXRpb24gSVJRIGJlZm9yZSBhc3NlcnRpbmcgQUNLIGZvcgotICogdGhlIGxhc3QgYnl0ZSAoaG93IGRvZXMgaXQga25vdyB3aGV0aGVyIGl0J3MgdGhlIGxhc3QgPykgKi8KLS8qIFRoZSBvbGQgY29kZSBoYW5kbGVkIGl0IGluIGFub3RoZXIgd2F5LCBpbmRpY2F0aW5nLCB0aGF0IG9uCi0gKiBldmVyeSBtZXNzYWdlIGJ5dGUgYW4gSVJRIGlzIGdlbmVyYXRlZCBhbmQgZXZlcnkgYnl0ZSBoYXMgdG8KLSAqIGJlIG1hbnVhbGx5IEFDS2VkLiBIbW1tID8gIChLRywgOTgvMTEvMjgpICovCi0vKiBUaGUgb2xkIGltcGxlbWVudGF0aW9uIHdhcyBjb3JyZWN0LiBTaWdoISAqLwotCi0vKiBDaGVjayBpZiB0aGUgbWVzc2FnZSBpcyBjb21wbGV0ZSAqLwotc3RhdGljIHU4IF9faW5saW5lX18KLWRjMzkwX01zZ0luX2NvbXBsZXRlICh1OCAqbXNnYnVmLCB1MzIgbGVuKQoteyAKLSAgaWYgKCptc2didWYgPT0gRVhURU5ERURfTUVTU0FHRSkKLSAgewotCWlmIChsZW4gPCAyKSByZXR1cm4gMDsKLQlpZiAobGVuIDwgbXNnYnVmWzFdICsgMikgcmV0dXJuIDA7Ci0gIH0KLSAgZWxzZSBpZiAoKm1zZ2J1ZiA+PSAweDIwICYmICptc2didWYgPD0gMHgyZikgLy8gdHdvIGJ5dGUgbWVzc2FnZXMKLQlpZiAobGVuIDwgMikgcmV0dXJuIDA7Ci0gIHJldHVybiAxOwotfQotCi0KLQotLyogcmVhZCBhbmQgZXZhbCByZWNlaXZlZCBtZXNzYWdlcyAqLwotc3RhdGljIHZvaWQKLWRjMzkwX01zZ0luXzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiKiAgIHBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotCi0gICAgLyogUmVhZCB0aGUgbXNnICovCi0KLSAgICBwU1JCLT5Nc2dJbkJ1ZltwQUNCLT5Nc2dMZW4rK10gPSBEQzM5MF9yZWFkOCAoU2NzaUZpZm8pOwotICAgIC8vcFNSQi0+U1JCU3RhdGUgPSAwOwotCi0gICAgLyogTXNnIGNvbXBsZXRlID8gKi8KLSAgICBpZiAoZGMzOTBfTXNnSW5fY29tcGxldGUgKHBTUkItPk1zZ0luQnVmLCBwQUNCLT5Nc2dMZW4pKQotICAgICAgewotCURFQlVHMCAocHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBNc2dJbjoiKTsgZGMzOTBfcHJpbnRNc2cgKHBTUkItPk1zZ0luQnVmLCBwQUNCLT5Nc2dMZW4pKTsKLQkvKiBOb3cgZXZhbCB0aGUgbXNnICovCi0Jc3dpdGNoIChwU1JCLT5Nc2dJbkJ1ZlswXSkgCi0JICB7Ci0JICBjYXNlIERJU0NPTk5FQ1Q6IAotCSAgICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9ESVNDT05ORUNUOyBicmVhazsKLQkgICAgCi0JICBjYXNlIFNJTVBMRV9RVUVVRV9UQUc6Ci0JICBjYXNlIEhFQURfT0ZfUVVFVUVfVEFHOgotCSAgY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkgICAgcFNSQiA9IGRjMzkwX01zZ0luX1FUYWcgKHBBQ0IsIHBEQ0IsIHBTUkItPk1zZ0luQnVmWzFdKTsKLQkgICAgYnJlYWs7Ci0JICAgIAotCSAgY2FzZSBNRVNTQUdFX1JFSkVDVDogCi0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgUkVTRVRfQVROX0NNRCk7Ci0JICAgIHBEQ0ItPk5lZ29QZXJpb2QgPSA1MDsgLyogMjAwbnMgPD0+IDUgTUh6ICovCi0JICAgIGlmKCBwU1JCLT5TUkJTdGF0ZSAmIERPX1NZTkNfTkVHTykKLQkgICAgICBkYzM5MF9Nc2dJbl9zZXRfYXN5bmMgKHBBQ0IsIHBTUkIpOwotCSAgICBicmVhazsKLQkgICAgCi0JICBjYXNlIEVYVEVOREVEX01FU1NBR0U6Ci0JICAgIC8qIHJlamVjdCBldmVyeSBleHRlbmRlZCBtc2cgYnV0IFNEVFIgKi8KLQkgICAgaWYgKHBTUkItPk1zZ0luQnVmWzFdICE9IDMgfHwgcFNSQi0+TXNnSW5CdWZbMl0gIT0gRVhURU5ERURfU0RUUikKLQkgICAgICBkYzM5MF9Nc2dJbl9yZWplY3QgKHBBQ0IsIHBTUkIpOwotCSAgICBlbHNlCi0JICAgICAgewotCQlpZiAocFNSQi0+TXNnSW5CdWZbM10gPT0gMCB8fCBwU1JCLT5Nc2dJbkJ1Zls0XSA9PSAwKQotCQkgIGRjMzkwX01zZ0luX3NldF9hc3luYyAocEFDQiwgcFNSQik7Ci0JCWVsc2UKLQkJICBkYzM5MF9Nc2dJbl9zZXRfc3luYyAocEFDQiwgcFNSQik7Ci0JICAgICAgfQotCSAgICAKLQkgICAgLy8gbm90aGluZyBoYXMgdG8gYmUgZG9uZQotCSAgY2FzZSBDT01NQU5EX0NPTVBMRVRFOiBicmVhazsKLQkgICAgCi0JICAgIC8vIFNBVkUgUE9JTlRFUiBtYXkgYmUgaWdub3JlZCBhcyB3ZSBoYXZlIHRoZSBzdHJ1Y3QgZGMzOTBfc3JiKiBhc3NvY2lhdGVkIHdpdGggdGhlCi0JICAgIC8vIHNjc2kgY29tbWFuZC4gVGhhbmtzLCBHZXJhcmQsIGZvciBwb2ludGluZyBpdCBvdXQuCi0JICBjYXNlIFNBVkVfUE9JTlRFUlM6IAotCSAgICBwU1JCLT5TYXZlZF9QdHIgPSBwU1JCLT5Ub3RhbFhmZXJyZWRMZW47Ci0JICAgIGJyZWFrOwotCSAgICAvLyBUaGUgZGV2aWNlIG1pZ2h0IHdhbnQgdG8gcmVzdGFydCB0cmFuc2ZlciB3aXRoIGEgUkVTVE9SRQotCSAgY2FzZSBSRVNUT1JFX1BPSU5URVJTOgotCSAgICBERUJVRzAocHJpbnRrICgiREMzOTA6IFJFU1RPUkUgUE9JTlRFUiBtZXNzYWdlIHJlY2VpdmVkIC4uLiB0cnkgdG8gaGFuZGxlXG4iKSk7Ci0JICAgIGRjMzkwX3Jlc3RvcmVfcHRyIChwQUNCLCBwU1JCKTsKLQkgICAgYnJlYWs7Ci0KLQkgICAgLy8gcmVqZWN0IHVua25vd24gbWVzc2FnZXMKLQkgIGRlZmF1bHQ6IGRjMzkwX01zZ0luX3JlamVjdCAocEFDQiwgcFNSQik7Ci0JICB9Ci0JCi0JLyogQ2xlYXIgY291bnRlciBhbmQgTXNnSW4gc3RhdGUgKi8KLQlwU1JCLT5TUkJTdGF0ZSAmPSB+U1JCX01TR0lOOwotCXBBQ0ItPk1zZ0xlbiA9IDA7Ci0gICAgICB9Ci0KLSAgICAqcHNzdGF0dXMgPSBTQ1NJX05PUDA7Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBNU0dfQUNDRVBURURfQ01EKTsKLSAgICAvL0RDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZGMzOTBfRGF0YUlPX0NvbW0oIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4IGlvRGlyKQotewotICAgIHVuc2lnbmVkIGxvbmcgIGx2YWw7Ci0gICAgc3RydWN0IGRjMzkwX2RjYiogICBwRENCID0gcEFDQi0+cEFjdGl2ZURDQjsKLQotICAgIGlmIChwU1JCID09IHBBQ0ItPnBUbXBTUkIpCi0gICAgewotCWlmIChwRENCKQotCQlwcmludGsoS0VSTl9FUlIgIkRDMzkwOiBwU1JCID09IHBUbXBTUkIhIChUYWdRIEVycm9yPykgKCUwMmktJWkpXG4iLCBwRENCLT5UYXJnZXRJRCwgcERDQi0+VGFyZ2V0TFVOKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0VSUiAiREMzOTA6IHBTUkIgPT0gcFRtcFNSQiEgKFRhZ1EgRXJyb3I/KSAoRENCIDAhKVxuIik7Ci0KLQkvKiBUcnkgdG8gcmVjb3ZlciAtIHNvbWUgYnJva2VuIGRpc2tzIHJlYWN0IGJhZGx5IHRvIHRhZ2dlZCBJTlFVSVJZICovCi0JaWYgKHBEQ0IgJiYgcEFDQi0+c2Nhbl9kZXZpY2VzICYmIHBEQ0ItPkdvaW5nU1JCQ250ID09IDEpIHsKLQkJcFNSQiA9IHBEQ0ItPnBHb2luZ1NSQjsKLQkJcERDQi0+cEFjdGl2ZVNSQiA9IHBTUkI7Ci0JfSBlbHNlIHsKLQkJcFNSQi0+cFNSQkRDQiA9IHBEQ0I7Ci0JCWRjMzkwX0VuYWJsZU1zZ091dF9BYm9ydChwQUNCLCBwU1JCKTsKLQkJaWYgKHBEQ0IpCi0JCQlwRENCLT5EQ0JGbGFnIHw9IEFCT1JUX0RFVjsKLQkJcmV0dXJuOwotCX0KLSAgICB9Ci0KLSAgICBpZiggcFNSQi0+U0dJbmRleCA8IHBTUkItPlNHY291bnQgKQotICAgIHsKLQlEQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCB8IGlvRGlyKTsKLQlpZiggIXBTUkItPlNHVG9CZVhmZXJMZW4gKQotCXsKLQkgICAgZGMzOTBfc3RhcnRfc2VnbWVudChwU1JCKTsKLQotCSAgICBERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICIgREMzOTA6IE5leHQgU0cgc2VnbWVudC4iKSk7Ci0JfQotCWx2YWwgPSBwU1JCLT5TR1RvQmVYZmVyTGVuOwotCURFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIiBEQzM5MDogU3RhcnQgdHJhbnNmZXI6ICVsaSBieXRlcyAoYWRkcmVzcyAlMDhseClcbiIsIGx2YWwsIHBTUkItPlNHQnVzQWRkcikpOwotCURDMzkwX3dyaXRlOCAoQ3RjUmVnX0xvdywgKHU4KSBsdmFsKTsKLQlsdmFsID4+PSA4OwotCURDMzkwX3dyaXRlOCAoQ3RjUmVnX01pZCwgKHU4KSBsdmFsKTsKLQlsdmFsID4+PSA4OwotCURDMzkwX3dyaXRlOCAoQ3RjUmVnX0hpZ2gsICh1OCkgbHZhbCk7Ci0KLQlEQzM5MF93cml0ZTMyIChETUFfWGZlckNudCwgcFNSQi0+U0dUb0JlWGZlckxlbik7Ci0JREMzOTBfd3JpdGUzMiAoRE1BX1hmZXJBZGRyLCBwU1JCLT5TR0J1c0FkZHIpOwotCi0JLy9EQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCB8IGlvRGlyKTsKLQlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9EQVRBX1hGRVI7Ci0KLQlEQzM5MF93cml0ZTggKFNjc2lDbWQsIERNQV9DT01NQU5EK0lORk9fWEZFUl9DTUQpOwotCi0JREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfU1RBUlRfQ01EIHwgaW9EaXIpOwotCS8vREVCVUcxKERDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgV1JUX0VSQVNFX0RNQV9TVEFUIHwgRU5fSU5UX09OX1BDSV9BQk9SVCkpOwotCS8vREVCVUcxKHByaW50ayAoS0VSTl9ERUJVRyAiREMzOTA6IERNQV9TdGF0dXM6ICUwMnhcbiIsIERDMzkwX3JlYWQ4IChETUFfU3RhdHVzKSkpOwotCS8vREVCVUcxKERDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgRU5fSU5UX09OX1BDSV9BQk9SVCkpOwotICAgIH0KLSAgICBlbHNlICAgIC8qIHhmZXIgcGFkICovCi0gICAgewotCWlmKCBwU1JCLT5TR2NvdW50ICkKLQl7Ci0JICAgIHBTUkItPkFkYXB0U3RhdHVzID0gSF9PVkVSX1VOREVSX1JVTjsKLQkgICAgcFNSQi0+U1JCU3RhdHVzIHw9IE9WRVJfUlVOOwotCSAgICBERUJVRzAocHJpbnRrIChLRVJOX1dBUk5JTkcgIiBEQzM5MDogT3ZlcnJ1biAtIikpOwotCX0KLQlERUJVRzAocHJpbnRrIChLRVJOX1dBUk5JTkcgIiBDbGVhciB0cmFuc2ZlciBwYWQgXG4iKSk7Ci0JREMzOTBfd3JpdGU4IChDdGNSZWdfTG93LCAwKTsKLQlEQzM5MF93cml0ZTggKEN0Y1JlZ19NaWQsIDApOwotCURDMzkwX3dyaXRlOCAoQ3RjUmVnX0hpZ2gsIDApOwotCi0JcFNSQi0+U1JCU3RhdGUgfD0gU1JCX1hGRVJQQUQ7Ci0JREMzOTBfd3JpdGU4IChTY3NpQ21kLCBETUFfQ09NTUFORCtYRkVSX1BBRF9CWVRFKTsKLS8qCi0JREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQgfCBpb0Rpcik7Ci0JREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfU1RBUlRfQ01EIHwgaW9EaXIpOwotKi8KLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQKLWRjMzkwX0RhdGFPdXRQaGFzZSggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQotewotICAgIGRjMzkwX0RhdGFJT19Db21tIChwQUNCLCBwU1JCLCBXUklURV9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfRGF0YUluUGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICBkYzM5MF9EYXRhSU9fQ29tbSAocEFDQiwgcFNSQiwgUkVBRF9ESVJFQ1RJT04pOwotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfQ29tbWFuZFBoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0gICAgc3RydWN0IGRjMzkwX2RjYiogICBwRENCOwotICAgIHU4ICBpLCBjbnQ7Ci0gICAgdTggICAgICpwdHI7Ci0KLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIFJFU0VUX0FUTl9DTUQpOwotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotICAgIGlmKCAhKHBTUkItPlNSQkZsYWcgJiBBVVRPX1JFUVNFTlNFKSApCi0gICAgewotCWNudCA9ICh1OCkgcFNSQi0+cGNtZC0+Y21kX2xlbjsKLQlwdHIgPSAodTggKikgcFNSQi0+cGNtZC0+Y21uZDsKLQlmb3IoaT0wOyBpIDwgY250OyBpKyspCi0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sICoocHRyKyspKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQlEQzM5MF93cml0ZTggKFNjc2lGaWZvLCBSRVFVRVNUX1NFTlNFKTsKLQlwRENCID0gcEFDQi0+cEFjdGl2ZURDQjsKLQlEQzM5MF93cml0ZTggKFNjc2lGaWZvLCBwRENCLT5UYXJnZXRMVU4gPDwgNSk7Ci0JREMzOTBfd3JpdGU4IChTY3NpRmlmbywgMCk7Ci0JREMzOTBfd3JpdGU4IChTY3NpRmlmbywgMCk7Ci0JREMzOTBfd3JpdGU4IChTY3NpRmlmbywgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQlEQzM5MF93cml0ZTggKFNjc2lGaWZvLCAwKTsKLQlERUJVRzAocHJpbnRrKEtFUk5fREVCVUcgIkRDMzkwOiBBdXRvUmVxU2Vuc2UgKENtbmRQaGFzZSkhXG4iKSk7Ci0gICAgfQotICAgIHBTUkItPlNSQlN0YXRlID0gU1JCX0NPTU1BTkQ7Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBJTkZPX1hGRVJfQ01EKTsKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX1N0YXR1c1BoYXNlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0gICAgcFNSQi0+U1JCU3RhdGUgPSBTUkJfU1RBVFVTOwotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgSU5JVElBVE9SX0NNRF9DTVBMVEUpOwotICAgIC8vREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfTXNnT3V0UGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICB1OCAgIGJ2YWwsIGksIGNudDsKLSAgICB1OCAgICAgKnB0cjsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiKiAgICBwRENCOwotCi0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0gICAgcERDQiA9IHBBQ0ItPnBBY3RpdmVEQ0I7Ci0gICAgaWYoICEocFNSQi0+U1JCU3RhdGUgJiBTUkJfTVNHT1VUKSApCi0gICAgewotCWNudCA9IHBTUkItPk1zZ0NudDsKLQlpZiggY250ICkKLQl7Ci0JICAgIHB0ciA9ICh1OCAqKSBwU1JCLT5Nc2dPdXRCdWY7Ci0JICAgIGZvcihpPTA7IGkgPCBjbnQ7IGkrKykKLQkJREMzOTBfd3JpdGU4IChTY3NpRmlmbywgKihwdHIrKykpOwotCSAgICBwU1JCLT5Nc2dDbnQgPSAwOwotCSAgICBpZiggKHBEQ0ItPkRDQkZsYWcgJiBBQk9SVF9ERVZfKSAmJgotCQkocFNSQi0+TXNnT3V0QnVmWzBdID09IEFCT1JUKSApCi0JCXBTUkItPlNSQlN0YXRlID0gU1JCX0FCT1JUX1NFTlQ7Ci0JfQotCWVsc2UKLQl7Ci0JICAgIGJ2YWwgPSBBQk9SVDsJLyogPz8/IE1TR19OT1AgKi8KLQkgICAgaWYoIChwU1JCLT5wY21kLT5jbW5kWzBdID09IElOUVVJUlkgKSB8fAotCQkocFNSQi0+cGNtZC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSB8fAotCQkocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpICkKLQkgICAgewotCQlpZiggcERDQi0+U3luY01vZGUgJiBTWU5DX0VOQUJMRSApCi0JCSAgICBnb3RvICBtb3AxOwotCSAgICB9Ci0JICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIGJ2YWwpOwotCX0KLQlEQzM5MF93cml0ZTggKFNjc2lDbWQsIElORk9fWEZFUl9DTUQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotbW9wMToKLSAgICAgICAgcHJpbnRrIChLRVJOX0VSUiAiREMzOTA6IE9MRCBTeW5jIE5lZ28gY29kZSB0cmlnZ2VyZWQhICglaSAlaSlcbiIsIHBEQ0ItPlRhcmdldElELCBwRENCLT5UYXJnZXRMVU4pOwotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIEVYVEVOREVEX01FU1NBR0UpOwotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIDMpOwkvKiAgICA7bGVuZ3RoIG9mIGV4dGVuZGVkIG1zZyAqLwotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIEVYVEVOREVEX1NEVFIpOwkvKiAgICA7IHN5bmMgbmVnbyAqLwotCURDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIHBEQ0ItPk5lZ29QZXJpb2QpOwotCWlmIChwRENCLT5TeW5jT2Zmc2V0ICYgMHgwZikKLQkJICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIHBEQ0ItPlN5bmNPZmZzZXQpOwotCWVsc2UKLQkJICAgIERDMzkwX3dyaXRlOCAoU2NzaUZpZm8sIFNZTkNfTkVHT19PRkZTRVQpOwkJICAgIAotCXBTUkItPlNSQlN0YXRlIHw9IERPX1NZTkNfTkVHTzsKLQlEQzM5MF93cml0ZTggKFNjc2lDbWQsIElORk9fWEZFUl9DTUQpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX01zZ0luUGhhc2UoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsKLSAgICBpZiggIShwU1JCLT5TUkJTdGF0ZSAmIFNSQl9NU0dJTikgKQotICAgIHsKLQlwU1JCLT5TUkJTdGF0ZSAmPSB+U1JCX0RJU0NPTk5FQ1Q7Ci0JcFNSQi0+U1JCU3RhdGUgfD0gU1JCX01TR0lOOwotICAgIH0KLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIElORk9fWEZFUl9DTUQpOwotICAgIC8vREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfSURMRV9DTUQpOwotfQotCi1zdGF0aWMgdm9pZAotZGMzOTBfTm9wXzAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4ICpwc3N0YXR1cykKLXsKLX0KLQotc3RhdGljIHZvaWQKLWRjMzkwX05vcF8xKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCi17Ci19Ci0KLQotc3RhdGljIHZvaWQKLWRjMzkwX1NldFhmZXJSYXRlKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCICkKLXsKLSAgICB1OCAgYnZhbCwgaSwgY250OwotICAgIHN0cnVjdCBkYzM5MF9kY2IqICAgcHRyOwotCi0gICAgaWYoICEocERDQi0+VGFyZ2V0TFVOKSApCi0gICAgewotCWlmKCAhcEFDQi0+c2Nhbl9kZXZpY2VzICkKLQl7Ci0JICAgIHB0ciA9IHBBQ0ItPnBMaW5rRENCOwotCSAgICBjbnQgPSBwQUNCLT5EQ0JDbnQ7Ci0JICAgIGJ2YWwgPSBwRENCLT5UYXJnZXRJRDsKLQkgICAgZm9yKGk9MDsgaTxjbnQ7IGkrKykKLQkgICAgewotCQlpZiggcHRyLT5UYXJnZXRJRCA9PSBidmFsICkKLQkJewotCQkgICAgcHRyLT5TeW5jUGVyaW9kID0gcERDQi0+U3luY1BlcmlvZDsKLQkJICAgIHB0ci0+U3luY09mZnNldCA9IHBEQ0ItPlN5bmNPZmZzZXQ7Ci0JCSAgICBwdHItPkN0cmxSMyA9IHBEQ0ItPkN0cmxSMzsKLQkJICAgIHB0ci0+Q3RybFI0ID0gcERDQi0+Q3RybFI0OwotCQkgICAgcHRyLT5TeW5jTW9kZSA9IHBEQ0ItPlN5bmNNb2RlOwotCQl9Ci0JCXB0ciA9IHB0ci0+cE5leHREQ0I7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIHJldHVybjsKLX0KLQotCi1zdGF0aWMgdm9pZAotZGMzOTBfRGlzY29ubmVjdCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiApCi17Ci0gICAgc3RydWN0IGRjMzkwX2RjYiAqcERDQjsKLSAgICBzdHJ1Y3QgZGMzOTBfc3JiICpwU1JCLCAqcHNyYjsKLSAgICB1OCAgaSwgY250OwotCi0gICAgREVCVUcwKHByaW50ayhLRVJOX0lORk8gIkRJU0MsIikpOwotCi0gICAgaWYgKCFwQUNCLT5Db25uZWN0ZWQpIHByaW50ayhLRVJOX0VSUiAiREMzOTA6IERpc2Nvbm5lY3Qgbm90LWNvbm5lY3RlZCBidXM/XG4iKTsKLSAgICBwQUNCLT5Db25uZWN0ZWQgPSAwOwotICAgIHBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotICAgIGlmICghcERDQikKLSAgICAgewotCURFQlVHMChwcmludGsoS0VSTl9FUlIgIkFDQjolcC0+QWN0aXZlRENCOiVwIElPUG9ydDolMDR4IElSUTolMDJ4ICFcbiIsXAotCSAgICAgICBwQUNCLCBwRENCLCBwQUNCLT5JT1BvcnRCYXNlLCBwQUNCLT5JUlFMZXZlbCkpOwotCW1kZWxheSg0MDApOwotCURDMzkwX3JlYWQ4IChJTlRfU3RhdHVzKTsJLyogUmVzZXQgUGVuZGluZyBJTlQgKi8KLQlEQzM5MF93cml0ZTggKFNjc2lDbWQsIEVOX1NFTF9SRVNFTCk7Ci0JcmV0dXJuOwotICAgICB9Ci0gICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBFTl9TRUxfUkVTRUwpOwotICAgIHBTUkIgPSBwRENCLT5wQWN0aXZlU1JCOwotICAgIHBBQ0ItPnBBY3RpdmVEQ0IgPSBOVUxMOwotICAgIHBTUkItPlNjc2lQaGFzZSA9IFNDU0lfTk9QMDsKLSAgICBpZiggcFNSQi0+U1JCU3RhdGUgJiBTUkJfVU5FWFBFQ1RfUkVTRUwgKQotCXBTUkItPlNSQlN0YXRlID0gMDsKLSAgICBlbHNlIGlmKCBwU1JCLT5TUkJTdGF0ZSAmIFNSQl9BQk9SVF9TRU5UICkKLSAgICB7Ci0JcERDQi0+VGFnTWFzayA9IDA7Ci0JcERDQi0+RENCRmxhZyA9IDA7Ci0JY250ID0gcERDQi0+R29pbmdTUkJDbnQ7Ci0JcERDQi0+R29pbmdTUkJDbnQgPSAwOwotCXBTUkIgPSBwRENCLT5wR29pbmdTUkI7Ci0JZm9yKCBpPTA7IGkgPCBjbnQ7IGkrKykKLQl7Ci0JICAgIHBzcmIgPSBwU1JCLT5wTmV4dFNSQjsKLQkgICAgZGMzOTBfRnJlZV9pbnNlcnQgKHBBQ0IsIHBTUkIpOwotCSAgICBwU1JCID0gcHNyYjsKLQl9Ci0JcERDQi0+cEdvaW5nU1JCID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQlpZiggKHBTUkItPlNSQlN0YXRlICYgKFNSQl9TVEFSVF8rU1JCX01TR09VVCkpIHx8Ci0JICAgIShwU1JCLT5TUkJTdGF0ZSAmIChTUkJfRElTQ09OTkVDVCtTUkJfQ09NUExFVEVEKSkgKQotCXsJLyogU2VsZWN0aW9uIHRpbWUgb3V0ICovCi0JCXBTUkItPkFkYXB0U3RhdHVzID0gSF9TRUxfVElNRU9VVDsKLQkJcFNSQi0+VGFyZ2V0U3RhdHVzID0gMDsKLQkJZ290byAgZGlzYzE7Ci0JfQotCWVsc2UgaWYgKCEocFNSQi0+U1JCU3RhdGUgJiBTUkJfRElTQ09OTkVDVCkgJiYgKHBTUkItPlNSQlN0YXRlICYgU1JCX0NPTVBMRVRFRCkpCi0JewotZGlzYzE6Ci0JICAgIGRjMzkwX2ZyZWV0YWcgKHBEQ0IsIHBTUkIpOwotCSAgICBwRENCLT5wQWN0aXZlU1JCID0gTlVMTDsKLQkgICAgcFNSQi0+U1JCU3RhdGUgPSBTUkJfRlJFRTsKLQkgICAgZGMzOTBfU1JCZG9uZSggcEFDQiwgcERDQiwgcFNSQik7Ci0JfQotICAgIH0KLSAgICBwQUNCLT5Nc2dMZW4gPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkCi1kYzM5MF9SZXNlbGVjdCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiApCi17Ci0gICAgc3RydWN0IGRjMzkwX2RjYiogICBwRENCOwotICAgIHN0cnVjdCBkYzM5MF9zcmIqICAgcFNSQjsKLSAgICB1OCAgaWQsIGx1bjsKLQotICAgIERFQlVHMChwcmludGsoS0VSTl9JTkZPICJSU0VMLCIpKTsKLSAgICBwQUNCLT5Db25uZWN0ZWQgPSAxOwotICAgIHBEQ0IgPSBwQUNCLT5wQWN0aXZlRENCOwotICAgIGlmKCBwRENCICkKLSAgICB7CS8qIEFyYml0cmF0aW9uIGxvc3QgYnV0IFJlc2VsZWN0aW9uIHdvbiAqLwotCURFQlVHMChwcmludGsgKCJEQzM5MDogKEFjdGl2ZURDQiAhPSAwOiBBcmIuIGxvc3QgYnV0IHJlc2VsLiB3b24pIVxuIikpOwotCXBTUkIgPSBwRENCLT5wQWN0aXZlU1JCOwotCWlmKCAhKCBwQUNCLT5zY2FuX2RldmljZXMgKSApCi0JewotCSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpwY21kID0gcFNSQi0+cGNtZDsKLQkgICAgc2NzaV9zZXRfcmVzaWQocGNtZCwgc2NzaV9idWZmbGVuKHBjbWQpKTsKLQkgICAgU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LCBESURfU09GVF9FUlJPUik7Ci0JICAgIGRjMzkwX0dvaW5nX3JlbW92ZShwRENCLCBwU1JCKTsKLQkgICAgZGMzOTBfRnJlZV9pbnNlcnQocEFDQiwgcFNSQik7Ci0JICAgIHBjbWQtPnNjc2lfZG9uZSAocGNtZCk7Ci0JICAgIERFQlVHMChwcmludGsoS0VSTl9ERUJVRyJEQzM5MDogUmV0dXJuIFNSQiAlcCB0byBmcmVlXG4iLCBwU1JCKSk7Ci0JfQotICAgIH0KLSAgICAvKiBHZXQgSUQgKi8KLSAgICBsdW4gPSBEQzM5MF9yZWFkOCAoU2NzaUZpZm8pOwotICAgIERFQlVHMChwcmludGsgKCJEZXYgJTAyeCwiLCBsdW4pKTsKLSAgICBpZiAoIShsdW4gJiAoMSA8PCBwQUNCLT5wU2NzaUhvc3QtPnRoaXNfaWQpKSkKLSAgICAgIHByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBSZXNlbGVjdGlvbiBtdXN0IHNlbGVjdCBob3N0IGFkYXB0ZXI6ICUwMnghXG4iLCBsdW4pOwotICAgIGVsc2UKLSAgICAgIGx1biBePSAxIDw8IHBBQ0ItPnBTY3NpSG9zdC0+dGhpc19pZDsgLyogTWFzayBBZGFwdGVySUQgKi8KLSAgICBpZCA9IDA7IHdoaWxlIChsdW4gPj49IDEpIGlkKys7Ci0gICAgLyogR2V0IExVTiAqLwotICAgIGx1biA9IERDMzkwX3JlYWQ4IChTY3NpRmlmbyk7Ci0gICAgaWYgKCEobHVuICYgSURFTlRJRllfQkFTRSkpIHByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBSZXNlbDogRXhwZWN0IGlkZW50aWZ5IG1lc3NhZ2UhXG4iKTsKLSAgICBsdW4gJj0gNzsKLSAgICBERUJVRzAocHJpbnRrICgiKCUwMmktJWkpLCIsIGlkLCBsdW4pKTsKLSAgICBwRENCID0gZGMzOTBfZmluZERDQiAocEFDQiwgaWQsIGx1bik7Ci0gICAgaWYgKCFwRENCKQotICAgIHsKLQlwcmludGsgKEtFUk5fRVJSICJEQzM5MDogUmVzZWxlY3QgZnJvbSBub24gZXhpc3RpbmcgZGV2aWNlICglMDJpLSVpKVxuIiwKLQkJICAgIGlkLCBsdW4pOwotCXJldHVybjsKLSAgICB9Ci0gICAgcEFDQi0+cEFjdGl2ZURDQiA9IHBEQ0I7Ci0gICAgLyogVGFnUTogV2UgZXhwZWN0IGEgbWVzc2FnZSBzb29uLCBzbyBuZXZlciBtaW5kIHRoZSBleGFjdCBTUkIgKi8KLSAgICBpZiggcERDQi0+U3luY01vZGUgJiBFTl9UQUdfUVVFVUVJTkcgKQotICAgIHsKLQlwU1JCID0gcEFDQi0+cFRtcFNSQjsKLQlwRENCLT5wQWN0aXZlU1JCID0gcFNSQjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQlwU1JCID0gcERDQi0+cEFjdGl2ZVNSQjsKLQlpZiggIXBTUkIgfHwgIShwU1JCLT5TUkJTdGF0ZSAmIFNSQl9ESVNDT05ORUNUKSApCi0JewotCSAgICBwU1JCPSBwQUNCLT5wVG1wU1JCOwotCSAgICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9VTkVYUEVDVF9SRVNFTDsKLQkgICAgcHJpbnRrIChLRVJOX0VSUiAiREMzOTA6IFJlc2VsZWN0IHdpdGhvdXQgb3V0c3RhbmRpbmcgY21uZCAoJTAyaS0laSlcbiIsCi0JCSAgICBpZCwgbHVuKTsKLQkgICAgcERDQi0+cEFjdGl2ZVNSQiA9IHBTUkI7Ci0JICAgIGRjMzkwX0VuYWJsZU1zZ091dF9BYm9ydCAoIHBBQ0IsIHBTUkIgKTsKLQl9Ci0JZWxzZQotCXsKLQkgICAgaWYoIHBEQ0ItPkRDQkZsYWcgJiBBQk9SVF9ERVZfICkKLQkgICAgewotCQlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9BQk9SVF9TRU5UOwotCQlwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFJlc2VsZWN0OiBBYm9ydCAoJTAyaS0laSlcbiIsCi0JCQlpZCwgbHVuKTsKLQkJZGMzOTBfRW5hYmxlTXNnT3V0X0Fib3J0KCBwQUNCLCBwU1JCICk7Ci0JICAgIH0KLQkgICAgZWxzZQotCQlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9EQVRBX1hGRVI7Ci0JfQotICAgIH0KLQotICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIlJlc2VsIFNSQiglcCk6IFRhZ051bSAoJTAyeClcbiIsIHBTUkIsIHBTUkItPlRhZ051bWJlcikpOwotICAgIHBTUkItPlNjc2lQaGFzZSA9IFNDU0lfTk9QMDsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lfRGVzdF9JRCwgcERDQi0+VGFyZ2V0SUQpOwotICAgIERDMzkwX3dyaXRlOCAoU3luY19QZXJpb2QsIHBEQ0ItPlN5bmNQZXJpb2QpOwotICAgIERDMzkwX3dyaXRlOCAoU3luY19PZmZzZXQsIHBEQ0ItPlN5bmNPZmZzZXQpOwotICAgIERDMzkwX3dyaXRlOCAoQ3RybFJlZzEsIHBEQ0ItPkN0cmxSMSk7Ci0gICAgREMzOTBfd3JpdGU4IChDdHJsUmVnMywgcERDQi0+Q3RybFIzKTsKLSAgICBEQzM5MF93cml0ZTggKEN0cmxSZWc0LCBwRENCLT5DdHJsUjQpOwkvKiA7IEdsaXRjaCBlYXRlciAqLwotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgTVNHX0FDQ0VQVEVEX0NNRCk7CS8qIDt0byByZWxlYXNlIHRoZSAvQUNLIHNpZ25hbCAqLwotfQotCi1zdGF0aWMgaW50IF9faW5saW5lX18KLWRjMzkwX1JlcXVlc3RTZW5zZShzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCKQotewotCXN0cnVjdCBzY3NpX2NtbmQgKnBjbWQ7Ci0KLQlwY21kID0gcFNSQi0+cGNtZDsKLQotCVJFTU9WQUJMRURFQlVHKHByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBSZXF1ZXN0U2Vuc2UoQ21kICUwMngsIElkICUwMngsIExVTiAlMDJ4KVxuIixcCi0JCQkgICAgICBwY21kLT5jbW5kWzBdLCBwRENCLT5UYXJnZXRJRCwgcERDQi0+VGFyZ2V0TFVOKSk7Ci0KLQlwU1JCLT5TUkJGbGFnIHw9IEFVVE9fUkVRU0VOU0U7Ci0JcFNSQi0+U2F2ZWRUb3RYTGVuID0gcFNSQi0+VG90YWxYZmVycmVkTGVuOwotCXBTUkItPkFkYXB0U3RhdHVzID0gMDsKLQlwU1JCLT5UYXJnZXRTdGF0dXMgPSAwOyAvKiBDSEVDS19DT05ESVRJT048PDE7ICovCi0KLQkvKiBXZSBhcmUgY2FsbGVkIGZyb20gU1JCZG9uZSwgb3JpZ2luYWwgUENJIG1hcHBpbmcgaGFzIGJlZW4gcmVtb3ZlZAotCSAqIGFscmVhZHksIG5ldyBvbmUgaXMgc2V0IHVwIGZyb20gU3RhcnRTQ1NJICovCi0JcFNSQi0+U0dJbmRleCA9IDA7Ci0KLQlwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gPSAwOwotCXBTUkItPlNHVG9CZVhmZXJMZW4gPSAwOwotCXJldHVybiBkYzM5MF9TdGFydFNDU0kocEFDQiwgcERDQiwgcFNSQik7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWRjMzkwX1NSQmRvbmUoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIgKQotewotICAgIHU4IHN0YXR1czsKLSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpwY21kOwotCi0gICAgcGNtZCA9IHBTUkItPnBjbWQ7Ci0gICAgLyogS0c6IE1vdmVkIHBjaV91bm1hcCBoZXJlICovCi0gICAgZGMzOTBfcGNpX3VubWFwKHBTUkIpOwotCi0gICAgc3RhdHVzID0gcFNSQi0+VGFyZ2V0U3RhdHVzOwotCi0gICAgREVCVUcwKHByaW50ayAoIiBTUkJkb25lICglMDJ4LCUwOHgpLCBTUkIgJXBcbiIsIHN0YXR1cywgcGNtZC0+cmVzdWx0LCBwU1JCKSk7Ci0gICAgaWYocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpCi0gICAgewkvKiBMYXN0IGNvbW1hbmQgd2FzIGEgUmVxdWVzdCBTZW5zZSAqLwotCXBTUkItPlNSQkZsYWcgJj0gfkFVVE9fUkVRU0VOU0U7Ci0JcFNSQi0+QWRhcHRTdGF0dXMgPSAwOwotCXBTUkItPlRhcmdldFN0YXR1cyA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKLQotCS8vcGNtZC0+cmVzdWx0ID0gTUtfUkVTKERSSVZFUl9TRU5TRSxESURfT0ssMCxzdGF0dXMpOwotCWlmIChzdGF0dXMgPT0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKQotCSAgICBwY21kLT5yZXN1bHQgPSBNS19SRVNfTE5YKDAsIERJRF9CQURfVEFSR0VULCAwLCAvKkNIRUNLX0NPTkRJVElPTiovMCk7Ci0JZWxzZSAvKiBSZXRyeSAqLwotCXsKLQkgICAgaWYoIHBTUkItPnBjbWQtPmNtbmRbMF0gPT0gVEVTVF9VTklUX1JFQURZIC8qIHx8IHBTUkItPnBjbWQtPmNtbmRbMF0gPT0gU1RBUlRfU1RPUCAqLykKLQkgICAgewotCQkvKiBEb24ndCByZXRyeSBvbiBURVNUX1VOSVRfUkVBRFkgKi8KLQkJcGNtZC0+cmVzdWx0ID0gTUtfUkVTX0xOWChEUklWRVJfU0VOU0UsIERJRF9PSywgMCwgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKTsKLQkJUkVNT1ZBQkxFREVCVUcocHJpbnRrKEtFUk5fSU5GTyAiQ21kPSUwMngsIFJlc3VsdD0lMDh4LCBYZmVyTD0lMDh4XG4iLHBTUkItPnBjbWQtPmNtbmRbMF0sXAotCQkgICAgICAgKHUzMikgcGNtZC0+cmVzdWx0LCAodTMyKSBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4pKTsKLQkgICAgfSBlbHNlIHsKLQkJU0VUX1JFU19EUlYocGNtZC0+cmVzdWx0LCBEUklWRVJfU0VOU0UpOwotCQkvL3BTUkItPlNjc2lDbWRMZW4JID0gKHU4KSAocFNSQi0+U2VnbWVudDFbMF0gPj4gOCk7Ci0JCURFQlVHMCAocHJpbnRrICgiREMzOTA6IFJFVFJZICglMDJ4KSwgdGFyZ2V0ICUwMmktJTAyaVxuIiwgcGNtZC0+Y21uZFswXSwgcGNtZC0+ZGV2aWNlLT5pZCwgKHU4KXBjbWQtPmRldmljZS0+bHVuKSk7Ci0JCXBTUkItPlRvdGFsWGZlcnJlZExlbiA9IDA7Ci0JCVNFVF9SRVNfRElEKHBjbWQtPnJlc3VsdCwgRElEX1NPRlRfRVJST1IpOwotCSAgICB9Ci0JfQotCWdvdG8gY21kX2RvbmU7Ci0gICAgfQotICAgIGlmKCBzdGF0dXMgKQotICAgIHsKLQlpZiAoc3RhdHVzID09IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikKLQl7Ci0JICAgIGlmIChkYzM5MF9SZXF1ZXN0U2Vuc2UocEFDQiwgcERDQiwgcFNSQikpIHsKLQkJU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LCBESURfRVJST1IpOwotCQlnb3RvIGNtZF9kb25lOwotCSAgICB9Ci0JICAgIHJldHVybjsKLQl9Ci0JZWxzZSBpZiAoc3RhdHVzID09IFNBTV9TVEFUX1RBU0tfU0VUX0ZVTEwpCi0JewotCSAgICBzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwocGNtZC0+ZGV2aWNlLCBwRENCLT5Hb2luZ1NSQkNudCAtIDEpOwotCSAgICBERUJVRzAgKHByaW50ayAoIkRDMzkwOiBSRVRSWSAoJTAyeCksIHRhcmdldCAlMDJpLSUwMmlcbiIsIHBjbWQtPmNtbmRbMF0sIHBjbWQtPmRldmljZS0+aWQsICh1OClwY21kLT5kZXZpY2UtPmx1bikpOwotCSAgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gPSAwOwotCSAgICBTRVRfUkVTX0RJRChwY21kLT5yZXN1bHQsIERJRF9TT0ZUX0VSUk9SKTsKLQl9Ci0JZWxzZSBpZiAoc3RhdHVzID09IFNBTV9TVEFUX0JVU1kgJiYKLQkJIChwY21kLT5jbW5kWzBdID09IFRFU1RfVU5JVF9SRUFEWSB8fCBwY21kLT5jbW5kWzBdID09IElOUVVJUlkpICYmCi0JCSBwQUNCLT5zY2FuX2RldmljZXMpCi0JewotCSAgICBwU1JCLT5BZGFwdFN0YXR1cyA9IDA7Ci0JICAgIHBTUkItPlRhcmdldFN0YXR1cyA9IHN0YXR1czsKLQkgICAgcGNtZC0+cmVzdWx0ID0gTUtfUkVTKDAsMCxwU1JCLT5FbmRNZXNzYWdlLC8qc3RhdHVzKi8wKTsKLQl9Ci0JZWxzZQotCXsgICAvKiBBbm90aGVyIGVycm9yICovCi0JICAgIHBTUkItPlRvdGFsWGZlcnJlZExlbiA9IDA7Ci0JICAgIFNFVF9SRVNfRElEKHBjbWQtPnJlc3VsdCwgRElEX1NPRlRfRVJST1IpOwotCSAgICBnb3RvIGNtZF9kb25lOwotCX0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsJLyogIFRhcmdldCBzdGF0dXMgPT0gMCAqLwotCXN0YXR1cyA9IHBTUkItPkFkYXB0U3RhdHVzOwotCWlmIChzdGF0dXMgPT0gSF9PVkVSX1VOREVSX1JVTikKLQl7Ci0JICAgIHBTUkItPlRhcmdldFN0YXR1cyA9IDA7Ci0JICAgIFNFVF9SRVNfRElEKHBjbWQtPnJlc3VsdCxESURfT0spOwotCSAgICBTRVRfUkVTX01TRyhwY21kLT5yZXN1bHQscFNSQi0+RW5kTWVzc2FnZSk7Ci0JfQotCWVsc2UgaWYgKHN0YXR1cyA9PSBIX1NFTF9USU1FT1VUKQotCXsKLQkgICAgcGNtZC0+cmVzdWx0ID0gTUtfUkVTKDAsIERJRF9OT19DT05ORUNULCAwLCAwKTsKLQkgICAgLyogRGV2aWNlcyBhcmUgcmVtb3ZlZCBiZWxvdyAuLi4gKi8KLQl9Ci0JZWxzZSBpZiggcFNSQi0+U1JCU3RhdHVzICYgUEFSSVRZX0VSUk9SKQotCXsKLQkgICAgLy9wY21kLT5yZXN1bHQgPSBNS19SRVMoMCxESURfUEFSSVRZLHBTUkItPkVuZE1lc3NhZ2UsMCk7Ci0JICAgIFNFVF9SRVNfRElEKHBjbWQtPnJlc3VsdCxESURfUEFSSVRZKTsKLQkgICAgU0VUX1JFU19NU0cocGNtZC0+cmVzdWx0LHBTUkItPkVuZE1lc3NhZ2UpOwotCX0KLQllbHNlCQkgICAgICAgLyogTm8gZXJyb3IgKi8KLQl7Ci0JICAgIHBTUkItPkFkYXB0U3RhdHVzID0gMDsKLQkgICAgcFNSQi0+VGFyZ2V0U3RhdHVzID0gMDsKLQkgICAgU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LERJRF9PSyk7Ci0JfQotICAgIH0KLQotY21kX2RvbmU6Ci0gICAgc2NzaV9zZXRfcmVzaWQocGNtZCwgc2NzaV9idWZmbGVuKHBjbWQpIC0gcFNSQi0+VG90YWxYZmVycmVkTGVuKTsKLQotICAgIGRjMzkwX0dvaW5nX3JlbW92ZSAocERDQiwgcFNSQik7Ci0gICAgLyogQWRkIHRvIGZyZWUgbGlzdCAqLwotICAgIGRjMzkwX0ZyZWVfaW5zZXJ0IChwQUNCLCBwU1JCKTsKLQotICAgIERFQlVHMChwcmludGsgKEtFUk5fREVCVUcgIkRDMzkwOiBTUkJkb25lOiBkb25lXG4iKSk7Ci0gICAgcGNtZC0+c2NzaV9kb25lIChwY21kKTsKLQotICAgIHJldHVybjsKLX0KLQotCi0vKiBSZW1vdmUgYWxsIFNSQnMgZnJvbSBHb2luZyBsaXN0IGFuZCBpbmZvcm0gbWlkbGV2ZWwgKi8KLXN0YXRpYyB2b2lkCi1kYzM5MF9Eb2luZ1NSQl9Eb25lKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiICpwRENCLCAqcGRjYjsKLSAgICBzdHJ1Y3QgZGMzOTBfc3JiICpwc3JiLCAqcHNyYjI7Ci0gICAgaW50IGk7Ci0gICAgc3RydWN0IHNjc2lfY21uZCAqcGNtZDsKLQotICAgIHBEQ0IgPSBwQUNCLT5wTGlua0RDQjsKLSAgICBwZGNiID0gcERDQjsKLSAgICBpZiAoISBwZGNiKSByZXR1cm47Ci0gICAgZG8KLSAgICB7Ci0JcHNyYiA9IHBkY2ItPnBHb2luZ1NSQjsKLQlmb3IgKGkgPSAwOyBpIDwgcGRjYi0+R29pbmdTUkJDbnQ7IGkrKykKLQl7Ci0JICAgIHBzcmIyID0gcHNyYi0+cE5leHRTUkI7Ci0JICAgIHBjbWQgPSBwc3JiLT5wY21kOwotCSAgICBkYzM5MF9GcmVlX2luc2VydCAocEFDQiwgcHNyYik7Ci0JICAgIHBzcmIgID0gcHNyYjI7Ci0JfQotCXBkY2ItPkdvaW5nU1JCQ250ID0gMDsKLQlwZGNiLT5wR29pbmdTUkIgPSBOVUxMOwotCXBkY2ItPlRhZ01hc2sgPSAwOwotCXBkY2IgPSBwZGNiLT5wTmV4dERDQjsKLSAgICB9IHdoaWxlKCBwZGNiICE9IHBEQ0IgKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZGMzOTBfUmVzZXRTQ1NJQnVzKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICkKLXsKLSAgICAvL0RDMzkwX3dyaXRlOCAoU2NzaUNtZCwgUlNUX0RFVklDRV9DTUQpOwotICAgIC8vdWRlbGF5ICgyNTApOwotICAgIC8vREMzOTBfd3JpdGU4IChTY3NpQ21kLCBOT1BfQ01EKTsKLQotICAgIERDMzkwX3dyaXRlOCAoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EKTsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIFJTVF9TQ1NJX0JVU19DTUQpOwotICAgIHBBQ0ItPkNvbm5lY3RlZCA9IDA7Ci0KLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYzM5MF9TY3NpUnN0RGV0ZWN0KCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICkKLXsKLSAgICBwcmludGsgKCJEQzM5MDogUnN0X0RldGVjdDogbGFzdHN0YXQgPSAlMDh4XG4iLCBkYzM5MF9sYXN0c3RhdHVzKTsKLSAgICAvL0RFQlVHMChwcmludGsoS0VSTl9JTkZPICJSU1RfREVURUNULCIpKTsKLQotICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EKTsKLSAgICAvKiBVbmxvY2sgYmVmb3JlID8gKi8KLSAgICAvKiBkZWxheSBoYWxmIGEgc2Vjb25kICovCi0gICAgdWRlbGF5ICgxMDAwKTsKLSAgICBEQzM5MF93cml0ZTggKFNjc2lDbWQsIENMRUFSX0ZJRk9fQ01EKTsKLSAgICBwQUNCLT5sYXN0X3Jlc2V0ID0gamlmZmllcyArIDUqSFovMgotCQkgICAgKyBIWiAqIGRjMzkwX2VlcHJvbUJ1ZltwQUNCLT5BZGFwdGVySW5kZXhdW0VFX0RFTEFZXTsKLSAgICBwQUNCLT5Db25uZWN0ZWQgPSAwOwotCi0gICAgaWYoIHBBQ0ItPkFDQkZsYWcgJiBSRVNFVF9ERVYgKQotCXBBQ0ItPkFDQkZsYWcgfD0gUkVTRVRfRE9ORTsKLSAgICBlbHNlCi0gICAgeyAgIC8qIFJlc2V0IHdhcyBpc3N1ZWQgYnkgc2IgZWxzZSAqLwotCXBBQ0ItPkFDQkZsYWcgfD0gUkVTRVRfREVURUNUOwotCi0JZGMzOTBfUmVzZXREZXZQYXJhbSggcEFDQiApOwotCWRjMzkwX0RvaW5nU1JCX0RvbmUoIHBBQ0IsIE5VTEwpOwotCS8vZGMzOTBfUmVjb3ZlclNSQiggcEFDQiApOwotCXBBQ0ItPnBBY3RpdmVEQ0IgPSBOVUxMOwotCXBBQ0ItPkFDQkZsYWcgPSAwOwotICAgIH0KLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgREMzOTBfcXVldWVjb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQotewotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOwotCXN0cnVjdCBkYzM5MF9hY2IgKmFjYiA9IChzdHJ1Y3QgZGMzOTBfYWNiICopc2Rldi0+aG9zdC0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX2RjYiAqZGNiID0gc2Rldi0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX3NyYiAqc3JiOwotCi0JaWYgKHNkZXYtPnF1ZXVlX2RlcHRoIDw9IGRjYi0+R29pbmdTUkJDbnQpCi0JCWdvdG8gZGV2aWNlX2J1c3k7Ci0JaWYgKGFjYi0+cEFjdGl2ZURDQikKLQkJZ290byBob3N0X2J1c3k7Ci0JaWYgKGFjYi0+QUNCRmxhZyAmIChSRVNFVF9ERVRFQ1R8UkVTRVRfRE9ORXxSRVNFVF9ERVYpKQotCQlnb3RvIGhvc3RfYnVzeTsKLQotCXNyYiA9IGFjYi0+cEZyZWVTUkI7Ci0JaWYgKHVubGlrZWx5KHNyYiA9PSBOVUxMKSkKLQkJZ290byBob3N0X2J1c3k7Ci0KLQljbWQtPnNjc2lfZG9uZSA9IGRvbmU7Ci0JY21kLT5yZXN1bHQgPSAwOwotCWFjYi0+Q21kcysrOwotCi0JYWNiLT5wRnJlZVNSQiA9IHNyYi0+cE5leHRTUkI7Ci0Jc3JiLT5wTmV4dFNSQiA9IE5VTEw7Ci0KLQlzcmItPnBTUkJEQ0IgPSBkY2I7Ci0Jc3JiLT5wY21kID0gY21kOwotCWNtZC0+aG9zdF9zY3JpYmJsZSA9IChjaGFyICopc3JiOwotICAgIAotCXNyYi0+U0dJbmRleCA9IDA7Ci0Jc3JiLT5BZGFwdFN0YXR1cyA9IDA7Ci0Jc3JiLT5UYXJnZXRTdGF0dXMgPSAwOwotCXNyYi0+TXNnQ250ID0gMDsKLQotCXNyYi0+U1JCU3RhdHVzID0gMDsKLQlzcmItPlNSQkZsYWcgPSAwOwotCXNyYi0+U1JCU3RhdGUgPSAwOwotCXNyYi0+VG90YWxYZmVycmVkTGVuID0gMDsKLQlzcmItPlNHQnVzQWRkciA9IDA7Ci0Jc3JiLT5TR1RvQmVYZmVyTGVuID0gMDsKLQlzcmItPlNjc2lQaGFzZSA9IDA7Ci0Jc3JiLT5FbmRNZXNzYWdlID0gMDsKLQlzcmItPlRhZ051bWJlciA9IFNDU0lfTk9fVEFHOwotCi0JaWYgKGRjMzkwX1N0YXJ0U0NTSShhY2IsIGRjYiwgc3JiKSkgewotCQlkYzM5MF9GcmVlX2luc2VydChhY2IsIHNyYik7Ci0JCWdvdG8gaG9zdF9idXN5OwotCX0KLQotCWRjMzkwX0dvaW5nX2FwcGVuZChkY2IsIHNyYik7Ci0KLQlyZXR1cm4gMDsKLQotIGhvc3RfYnVzeToKLQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKLQotIGRldmljZV9idXN5OgotCXJldHVybiBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1k7Ci19Ci0KLXN0YXRpYyBERUZfU0NTSV9RQ01EKERDMzkwX3F1ZXVlY29tbWFuZCkKLQotc3RhdGljIHZvaWQgZGMzOTBfZHVtcGluZm8gKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9kY2IqIHBEQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCi17Ci0gICAgc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0gICAgdTE2IHBzdGF0OwotCi0gICAgaWYgKCFwRENCKSBwRENCID0gcEFDQi0+cEFjdGl2ZURDQjsKLSAgICBpZiAoIXBTUkIgJiYgcERDQikgcFNSQiA9IHBEQ0ItPnBBY3RpdmVTUkI7Ci0KLSAgICBpZiAocFNSQikgCi0gICAgewotCXByaW50ayAoIkRDMzkwOiBTUkI6IFhmZXJyZWQgJTA4bHgsIFJlbWFpbiAlMDhseCwgU3RhdGUgJTA4eCwgUGhhc2UgJTAyeFxuIiwKLQkJcFNSQi0+VG90YWxYZmVycmVkTGVuLCBwU1JCLT5TR1RvQmVYZmVyTGVuLCBwU1JCLT5TUkJTdGF0ZSwKLQkJcFNSQi0+U2NzaVBoYXNlKTsKLQlwcmludGsgKCJEQzM5MDogQWRwYXRlclN0YXR1czogJTAyeCwgU1JCIFN0YXR1cyAlMDJ4XG4iLCBwU1JCLT5BZGFwdFN0YXR1cywgcFNSQi0+U1JCU3RhdHVzKTsKLSAgICB9Ci0gICAgcHJpbnRrICgiREMzOTA6IFN0YXR1cyBvZiBsYXN0IElSUSAoRE1BL1NDL0ludC9JUlEpOiAlMDh4XG4iLCBkYzM5MF9sYXN0c3RhdHVzKTsKLSAgICBwcmludGsgKCJEQzM5MDogUmVnaXN0ZXIgZHVtcDogU0NTSSBibG9jazpcbiIpOwotICAgIHByaW50ayAoIkRDMzkwOiBYZmVyQ250ICBDbWQgU3RhdCBJbnRTIElSUVMgRkZJUyBDdGwxIEN0bDIgQ3RsMyBDdGw0XG4iKTsKLSAgICBwcmludGsgKCJEQzM5MDogICUwNnggICAlMDJ4ICAgJTAyeCAgICUwMngiLAotCSAgICBEQzM5MF9yZWFkOChDdGNSZWdfTG93KSArIChEQzM5MF9yZWFkOChDdGNSZWdfTWlkKSA8PCA4KSArIChEQzM5MF9yZWFkOChDdGNSZWdfSGlnaCkgPDwgMTYpLAotCSAgICBEQzM5MF9yZWFkOChTY3NpQ21kKSwgREMzOTBfcmVhZDgoU2NzaV9TdGF0dXMpLCBEQzM5MF9yZWFkOChJbnRlcm5fU3RhdGUpKTsKLSAgICBwcmludGsgKCIgICAlMDJ4ICAgJTAyeCAgICUwMnggICAlMDJ4ICAgJTAyeCAgICUwMnhcbiIsCi0JICAgIERDMzkwX3JlYWQ4KElOVF9TdGF0dXMpLCBEQzM5MF9yZWFkOChDdXJyZW50X0ZpZm8pLCBEQzM5MF9yZWFkOChDdHJsUmVnMSksCi0JICAgIERDMzkwX3JlYWQ4KEN0cmxSZWcyKSwgREMzOTBfcmVhZDgoQ3RybFJlZzMpLCBEQzM5MF9yZWFkOChDdHJsUmVnNCkpOwotICAgIERDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgV1JUX0VSQVNFX0RNQV9TVEFUIHwgRU5fSU5UX09OX1BDSV9BQk9SVCk7Ci0gICAgaWYgKERDMzkwX3JlYWQ4KEN1cnJlbnRfRmlmbykgJiAweDFmKQotICAgICAgewotCXByaW50ayAoIkRDMzkwOiBGSUZPOiIpOwotCXdoaWxlIChEQzM5MF9yZWFkOChDdXJyZW50X0ZpZm8pICYgMHgxZikgcHJpbnRrICgiICUwMngiLCBEQzM5MF9yZWFkOChTY3NpRmlmbykpOwotCXByaW50ayAoIlxuIik7Ci0gICAgICB9Ci0gICAgcHJpbnRrICgiREMzOTA6IFJlZ2lzdGVyIGR1bXA6IERNQSBlbmdpbmU6XG4iKTsKLSAgICBwcmludGsgKCJEQzM5MDogQ21kICAgU1RyQ250ICAgIFNCdXNBICAgIFdya0JDICAgIFdya0FDIFN0YXQgU0J1c0N0cmxcbiIpOwotICAgIHByaW50ayAoIkRDMzkwOiAgJTAyeCAlMDh4ICUwOHggJTA4eCAlMDh4ICAgJTAyeCAlMDh4XG4iLAotCSAgICBEQzM5MF9yZWFkOChETUFfQ21kKSwgREMzOTBfcmVhZDMyKERNQV9YZmVyQ250KSwgREMzOTBfcmVhZDMyKERNQV9YZmVyQWRkciksCi0JICAgIERDMzkwX3JlYWQzMihETUFfV2tfQnl0ZUNudHIpLCBEQzM5MF9yZWFkMzIoRE1BX1drX0FkZHJDbnRyKSwKLQkgICAgREMzOTBfcmVhZDgoRE1BX1N0YXR1cyksIERDMzkwX3JlYWQzMihETUFfU2NzaUJ1c0N0cmwpKTsKLSAgICBEQzM5MF93cml0ZTMyIChETUFfU2NzaUJ1c0N0cmwsIEVOX0lOVF9PTl9QQ0lfQUJPUlQpOwotCi0gICAgcGRldiA9IHBBQ0ItPnBkZXY7Ci0gICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NUQVRVUywgJnBzdGF0KTsKLSAgICBwcmludGsgKCJEQzM5MDogUmVnaXN0ZXIgZHVtcDogUENJIFN0YXR1czogJTA0eFxuIiwgcHN0YXQpOwotICAgIHByaW50ayAoIkRDMzkwOiBJbiBjYXNlIG9mIGRyaXZlciB0cm91YmxlIHJlYWQgRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0XG4iKTsKLX0KLQotCi1zdGF0aWMgaW50IERDMzkwX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLQlzdHJ1Y3QgZGMzOTBfYWNiICpwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX2RjYiAqcERDQiA9IChzdHJ1Y3QgZGMzOTBfZGNiKikgY21kLT5kZXZpY2UtPmhvc3RkYXRhOwotCi0Jc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBjbWQsICJEQzM5MDogQWJvcnQgY29tbWFuZFxuIik7Ci0KLQkvKiBhYm9ydCgpIGlzIHRvbyBzdHVwaWQgZm9yIGFscmVhZHkgc2VudCBjb21tYW5kcyBhdCB0aGUgbW9tZW50LiAKLQkgKiBJZiBpdCdzIGNhbGxlZCB3ZSBhcmUgaW4gdHJvdWJsZSBhbnl3YXksIHNvIGxldCdzIGR1bXAgc29tZSBpbmZvIAotCSAqIGludG8gdGhlIHN5c2xvZyBhdCBsZWFzdC4gKEtHLCA5OC8wOC8yMCw5OS8wNi8yMCkgKi8KLQlkYzM5MF9kdW1waW5mbyhwQUNCLCBwRENCLCBOVUxMKTsKLQotCXBEQ0ItPkRDQkZsYWcgfD0gQUJPUlRfREVWXzsKLQlwcmludGsoS0VSTl9JTkZPICJEQzM5MDogQWJvcnRlZC5cbiIpOwotCi0JcmV0dXJuIEZBSUxFRDsKLX0KLQotCi1zdGF0aWMgdm9pZCBkYzM5MF9SZXNldERldlBhcmFtKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCICkKLXsKLSAgICBzdHJ1Y3QgZGMzOTBfZGNiICpwRENCLCAqcGRjYjsKLQotICAgIHBEQ0IgPSBwQUNCLT5wTGlua0RDQjsKLSAgICBpZiAoISBwRENCKSByZXR1cm47Ci0gICAgcGRjYiA9IHBEQ0I7Ci0gICAgZG8KLSAgICB7Ci0JcERDQi0+U3luY01vZGUgJj0gflNZTkNfTkVHT19ET05FOwotCXBEQ0ItPlN5bmNQZXJpb2QgPSAwOwotCXBEQ0ItPlN5bmNPZmZzZXQgPSAwOwotCXBEQ0ItPlRhZ01hc2sgPSAwOwotCXBEQ0ItPkN0cmxSMyA9IEZBU1RfQ0xLOwotCXBEQ0ItPkN0cmxSNCAmPSBORUdBVEVfUkVRQUNLREFUQSB8IENUUkw0X1JFU0VSVkVEIHwgTkVHQVRFX1JFUUFDSzsKLQlwRENCLT5DdHJsUjQgfD0gcEFDQi0+Z2xpdGNoX2NmZzsKLQlwRENCID0gcERDQi0+cE5leHREQ0I7Ci0gICAgfQotICAgIHdoaWxlKCBwZGNiICE9IHBEQ0IgKTsKLSAgICBwQUNCLT5BQ0JGbGFnICY9IH4oUkVTRVRfREVWIHwgUkVTRVRfRE9ORSB8IFJFU0VUX0RFVEVDVCk7Ci0KLX0KLQotc3RhdGljIGludCBEQzM5MF9idXNfcmVzZXQgKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLQlzdHJ1Y3QgZGMzOTBfYWNiKiAgICBwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0JdTggICBidmFsOwotCi0Jc3Bpbl9sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotCWJ2YWwgPSBEQzM5MF9yZWFkOChDdHJsUmVnMSkgfCBESVNfSU5UX09OX1NDU0lfUlNUOwotCURDMzkwX3dyaXRlOChDdHJsUmVnMSwgYnZhbCk7CS8qIGRpc2FibGUgSVJRIG9uIGJ1cyByZXNldCAqLwotCi0JcEFDQi0+QUNCRmxhZyB8PSBSRVNFVF9ERVY7Ci0JZGMzOTBfUmVzZXRTQ1NJQnVzKHBBQ0IpOwotCi0JZGMzOTBfUmVzZXREZXZQYXJhbShwQUNCKTsKLQltZGVsYXkoMSk7Ci0JcEFDQi0+bGFzdF9yZXNldCA9IGppZmZpZXMgKyAzKkhaLzIKLQkJKyBIWiAqIGRjMzkwX2VlcHJvbUJ1ZltwQUNCLT5BZGFwdGVySW5kZXhdW0VFX0RFTEFZXTsKLQotCURDMzkwX3dyaXRlOChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0JREMzOTBfcmVhZDgoSU5UX1N0YXR1cyk7CQkvKiBSZXNldCBQZW5kaW5nIElOVCAqLwotCi0JZGMzOTBfRG9pbmdTUkJfRG9uZShwQUNCLCBjbWQpOwotCi0JcEFDQi0+cEFjdGl2ZURDQiA9IE5VTEw7Ci0JcEFDQi0+QUNCRmxhZyA9IDA7Ci0KLQlidmFsID0gREMzOTBfcmVhZDgoQ3RybFJlZzEpICYgfkRJU19JTlRfT05fU0NTSV9SU1Q7Ci0JREMzOTBfd3JpdGU4KEN0cmxSZWcxLCBidmFsKTsJLyogcmUtZW5hYmxlIGludGVycnVwdCAqLwotCi0Jc3Bpbl91bmxvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCi0JcmV0dXJuIFNVQ0NFU1M7Ci19Ci0KLS8qKgotICogZGMzOTBfc2xhdmVfYWxsb2MgLSBDYWxsZWQgYnkgdGhlIHNjc2kgbWlkIGxheWVyIHRvIHRlbGwgdXMgYWJvdXQgYSBuZXcKLSAqIHNjc2kgZGV2aWNlIHRoYXQgd2UgbmVlZCB0byBkZWFsIHdpdGguCi0gKgotICogQHNjc2lfZGV2aWNlOiBUaGUgbmV3IHNjc2kgZGV2aWNlIHRoYXQgd2UgbmVlZCB0byBoYW5kbGUuCi0gKi8KLXN0YXRpYyBpbnQgZGMzOTBfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZSkKLXsKLQlzdHJ1Y3QgZGMzOTBfYWNiICpwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IqKSBzY3NpX2RldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX2RjYiAqcERDQiwgKnBEQ0IyID0gTlVMTDsKLQl1aW50IGlkID0gc2NzaV9kZXZpY2UtPmlkOwotCXVpbnQgbHVuID0gc2NzaV9kZXZpY2UtPmx1bjsKLQotCXBEQ0IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGMzOTBfZGNiKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwRENCKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmICghcEFDQi0+RENCQ250KyspIHsKLQkJcEFDQi0+cExpbmtEQ0IgPSBwRENCOwotCQlwQUNCLT5wRENCUnVuUm9iaW4gPSBwRENCOwotCX0gZWxzZSB7Ci0JCXBBQ0ItPnBMYXN0RENCLT5wTmV4dERDQiA9IHBEQ0I7Ci0JfQotICAgCi0JcERDQi0+cE5leHREQ0IgPSBwQUNCLT5wTGlua0RDQjsKLQlwQUNCLT5wTGFzdERDQiA9IHBEQ0I7Ci0KLQlwRENCLT5wRENCQUNCID0gcEFDQjsKLQlwRENCLT5UYXJnZXRJRCA9IGlkOwotCXBEQ0ItPlRhcmdldExVTiA9IGx1bjsKLQotCS8qCi0JICogU29tZSB2YWx1ZXMgYXJlIGZvciBhbGwgTFVOczogQ29weSB0aGVtIAotCSAqIEluIGEgY2xlYW4gd2F5OiBXZSB3b3VsZCBoYXZlIGFuIG93biBzdHJ1Y3R1cmUgZm9yIGEgU0NTSS1JRCAKLQkgKi8KLQlpZiAobHVuICYmIChwRENCMiA9IGRjMzkwX2ZpbmREQ0IocEFDQiwgaWQsIDApKSkgewotCQlwRENCLT5EZXZNb2RlID0gcERDQjItPkRldk1vZGU7Ci0JCXBEQ0ItPlN5bmNNb2RlID0gcERDQjItPlN5bmNNb2RlICYgU1lOQ19ORUdPX0RPTkU7Ci0JCXBEQ0ItPlN5bmNQZXJpb2QgPSBwRENCMi0+U3luY1BlcmlvZDsKLQkJcERDQi0+U3luY09mZnNldCA9IHBEQ0IyLT5TeW5jT2Zmc2V0OwotCQlwRENCLT5OZWdvUGVyaW9kID0gcERDQjItPk5lZ29QZXJpb2Q7Ci0gICAgICAKLQkJcERDQi0+Q3RybFIzID0gcERDQjItPkN0cmxSMzsKLQkJcERDQi0+Q3RybFI0ID0gcERDQjItPkN0cmxSNDsKLQl9IGVsc2UgewotCQl1OCBpbmRleCA9IHBBQ0ItPkFkYXB0ZXJJbmRleDsKLQkJUEVFcHJvbSBwcm9tID0gKFBFRXByb20pICZkYzM5MF9lZXByb21CdWZbaW5kZXhdW2lkIDw8IDJdOwotCi0JCXBEQ0ItPkRldk1vZGUgPSBwcm9tLT5FRV9NT0RFMTsKLQkJcERDQi0+TmVnb1BlcmlvZCA9Ci0JCQkoZGMzOTBfY2xvY2tfcGVyaW9kMVtwcm9tLT5FRV9TUEVFRF0gKiAyNSkgPj4gMjsKLQkJcERDQi0+Q3RybFIzID0gRkFTVF9DTEs7Ci0JCXBEQ0ItPkN0cmxSNCA9IHBBQ0ItPmdsaXRjaF9jZmcgfCBDVFJMNF9SRVNFUlZFRDsKLQkJaWYgKGRjMzkwX2VlcHJvbUJ1ZltpbmRleF1bRUVfTU9ERTJdICYgQUNUSVZFX05FR0FUSU9OKQotCQkJcERDQi0+Q3RybFI0IHw9IE5FR0FURV9SRVFBQ0tEQVRBIHwgTkVHQVRFX1JFUUFDSzsKLQl9Ci0KLQlpZiAocERDQi0+RGV2TW9kZSAmIFNZTkNfTkVHT18pCi0JCXBEQ0ItPlN5bmNNb2RlIHw9IFNZTkNfRU5BQkxFOwotCWVsc2UgewotCQlwRENCLT5TeW5jTW9kZSA9IDA7Ci0JCXBEQ0ItPlN5bmNPZmZzZXQgJj0gfjB4MGY7Ci0JfQotCi0JcERDQi0+Q3RybFIxID0gcEFDQi0+cFNjc2lIb3N0LT50aGlzX2lkOwotCWlmIChwRENCLT5EZXZNb2RlICYgUEFSSVRZX0NIS18pCi0JCXBEQ0ItPkN0cmxSMSB8PSBQQVJJVFlfRVJSX1JFUE87Ci0KLQlwQUNCLT5zY2FuX2RldmljZXMgPSAxOwotCXNjc2lfZGV2aWNlLT5ob3N0ZGF0YSA9IHBEQ0I7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZGMzOTBfc2xhdmVfZGVzdHJveSAtIENhbGxlZCBieSB0aGUgc2NzaSBtaWQgbGF5ZXIgdG8gdGVsbCB1cyBhYm91dCBhCi0gKiBkZXZpY2UgdGhhdCBpcyBnb2luZyBhd2F5LgotICoKLSAqIEBzY3NpX2RldmljZTogVGhlIHNjc2kgZGV2aWNlIHRoYXQgd2UgbmVlZCB0byByZW1vdmUuCi0gKi8KLXN0YXRpYyB2b2lkIGRjMzkwX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldmljZSkKLXsKLQlzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IqKSBzY3NpX2RldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRjMzkwX2RjYiogcERDQiA9IChzdHJ1Y3QgZGMzOTBfZGNiKikgc2NzaV9kZXZpY2UtPmhvc3RkYXRhOwotCXN0cnVjdCBkYzM5MF9kY2IqIHBQcmV2RENCID0gcEFDQi0+cExpbmtEQ0I7Ci0KLQlwQUNCLT5zY2FuX2RldmljZXMgPSAwOwotCi0JQlVHX09OKHBEQ0ItPkdvaW5nU1JCQ250ID4gMSk7Ci0JCi0JaWYgKHBEQ0IgPT0gcEFDQi0+cExpbmtEQ0IpIHsKLQkJaWYgKHBBQ0ItPnBMYXN0RENCID09IHBEQ0IpIHsKLQkJCXBEQ0ItPnBOZXh0RENCID0gTlVMTDsKLQkJCXBBQ0ItPnBMYXN0RENCID0gTlVMTDsKLQkJfQotCQlwQUNCLT5wTGlua0RDQiA9IHBEQ0ItPnBOZXh0RENCOwotCX0gZWxzZSB7Ci0JCXdoaWxlIChwUHJldkRDQi0+cE5leHREQ0IgIT0gcERDQikKLQkJCXBQcmV2RENCID0gcFByZXZEQ0ItPnBOZXh0RENCOwotCQlwUHJldkRDQi0+cE5leHREQ0IgPSBwRENCLT5wTmV4dERDQjsKLQkJaWYgKHBEQ0IgPT0gcEFDQi0+cExhc3REQ0IpCi0JCQlwQUNCLT5wTGFzdERDQiA9IHBQcmV2RENCOwotCX0KLQotCWlmIChwRENCID09IHBBQ0ItPnBBY3RpdmVEQ0IpCi0JCXBBQ0ItPnBBY3RpdmVEQ0IgPSBOVUxMOwotCWlmIChwRENCID09IHBBQ0ItPnBMaW5rRENCKQotCQlwQUNCLT5wTGlua0RDQiA9IHBEQ0ItPnBOZXh0RENCOwotCWlmIChwRENCID09IHBBQ0ItPnBEQ0JSdW5Sb2JpbikKLQkJcEFDQi0+cERDQlJ1blJvYmluID0gcERDQi0+cE5leHREQ0I7Ci0Ja2ZyZWUocERDQik7IAotCQotCXBBQ0ItPkRDQkNudC0tOwotfQotCi1zdGF0aWMgaW50IGRjMzkwX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCi17Ci0Jc3RydWN0IGRjMzkwX2FjYiAqYWNiID0gKHN0cnVjdCBkYzM5MF9hY2IgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgZGMzOTBfZGNiICpkY2IgPSAoc3RydWN0IGRjMzkwX2RjYiAqKXNkZXYtPmhvc3RkYXRhOwotCi0JYWNiLT5zY2FuX2RldmljZXMgPSAwOwotCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkICYmIChkY2ItPkRldk1vZGUgJiBUQUdfUVVFVUVJTkdfKSkgewotCQlkY2ItPlN5bmNNb2RlIHw9IEVOX1RBR19RVUVVRUlORzsKLQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgYWNiLT5UYWdNYXhOdW0pOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLnByb2NfbmFtZQkJPSAidG1zY3NpbSIsIAotCS5uYW1lCQkJPSBEQzM5MF9CQU5ORVIgIiBWIiBEQzM5MF9WRVJTSU9OLAotCS5zbGF2ZV9hbGxvYwkJPSBkYzM5MF9zbGF2ZV9hbGxvYywKLQkuc2xhdmVfY29uZmlndXJlCT0gZGMzOTBfc2xhdmVfY29uZmlndXJlLAotCS5zbGF2ZV9kZXN0cm95CQk9IGRjMzkwX3NsYXZlX2Rlc3Ryb3ksCi0JLnF1ZXVlY29tbWFuZAkJPSBEQzM5MF9xdWV1ZWNvbW1hbmQsCi0JLmVoX2Fib3J0X2hhbmRsZXIJPSBEQzM5MF9hYm9ydCwKLQkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIJPSBEQzM5MF9idXNfcmVzZXQsCi0JLmNhbl9xdWV1ZQkJPSAxLAotCS50aGlzX2lkCQk9IDcsCi0JLnNnX3RhYmxlc2l6ZQkJPSBTR19BTEwsCi0JLmNtZF9wZXJfbHVuCQk9IDEsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAotCS5tYXhfc2VjdG9ycwkJPSAweDQwMDAsIC8qIDhNaUIgPSAxNiAqIDEwMjQgKiA1MTIgKi8KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnVuY3Rpb25zIGZvciBhY2Nlc3MgdG8gREMzOTAgRUVQUk9NCi0gKiBhbmQgc29tZSB0byBlbXVsYXRlIGl0Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGRjMzkwX2VlcHJvbV9wcmVwYXJlX3JlYWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNtZCkKLXsKLQl1OCBjYXJyeUZsYWcgPSAxLCBqID0gMHg4MCwgYnZhbDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKLQkJaWYgKGNhcnJ5RmxhZykgewotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDB4NDApOwotCQkJYnZhbCA9IDB4YzA7Ci0JCX0gZWxzZQotCQkJYnZhbCA9IDB4ODA7Ci0KLQkJdWRlbGF5KDE2MCk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCBidmFsKTsKLQkJdWRlbGF5KDE2MCk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAwKTsKLQkJdWRlbGF5KDE2MCk7Ci0KLQkJY2FycnlGbGFnID0gKGNtZCAmIGopID8gMSA6IDA7Ci0JCWogPj49IDE7Ci0JfQotfQotCi1zdGF0aWMgdTE2IGRjMzkwX2VlcHJvbV9nZXRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlpbnQgaTsKLQl1MTYgd3ZhbCA9IDA7Ci0JdTggYnZhbDsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCXd2YWwgPDw9IDE7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDB4ODApOwotCQl1ZGVsYXkoMTYwKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDB4NDApOwotCQl1ZGVsYXkoMTYwKTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHgwMCwgJmJ2YWwpOwotCi0JCWlmIChidmFsID09IDB4MjIpCi0JCQl3dmFsIHw9IDE7Ci0JfQotCi0JcmV0dXJuIHd2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIGRjMzkwX3JlYWRfZWVwcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgKnB0cikKLXsKLQl1OCBjbWQgPSBFRVBST01fUkVBRCwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAweDQwOyBpKyspIHsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4YzAsIDApOwotCQl1ZGVsYXkoMTYwKTsKLQotCQlkYzM5MF9lZXByb21fcHJlcGFyZV9yZWFkKHBkZXYsIGNtZCsrKTsKLQkJKnB0cisrID0gZGMzOTBfZWVwcm9tX2dldF9kYXRhKHBkZXYpOwotCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgwLCAwKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ODAsIDApOwotCQl1ZGVsYXkoMTYwKTsKLQl9Ci19Ci0KLS8qIE92ZXJyaWRlIEVFcHJvbSB2YWx1ZXMgd2l0aCBleHBsaWNpdGx5IHNldCB2YWx1ZXMgKi8KLXN0YXRpYyB2b2lkIGRjMzkwX2VlcHJvbV9vdmVycmlkZSh1OCBpbmRleCkKLXsKLQl1OCAqcHRyID0gKHU4ICopIGRjMzkwX2VlcHJvbUJ1ZltpbmRleF0sIGlkOwotCi0JLyogQWRhcHRlciBTZXR0aW5ncyAqLwotCWlmICh0bXNjc2ltWzBdICE9IC0yKQotCQlwdHJbRUVfQURBUFRfU0NTSV9JRF0gPSAodTgpdG1zY3NpbVswXTsJLyogQWRhcHRlciBJRCAqLwotCWlmICh0bXNjc2ltWzNdICE9IC0yKQotCQlwdHJbRUVfTU9ERTJdID0gKHU4KXRtc2NzaW1bM107Ci0JaWYgKHRtc2NzaW1bNV0gIT0gLTIpCi0JCXB0cltFRV9ERUxBWV0gPSB0bXNjc2ltWzVdOwkJLyogUmVzZXQgZGVsYXkgKi8KLQlpZiAodG1zY3NpbVs0XSAhPSAtMikKLQkJcHRyW0VFX1RBR19DTURfTlVNXSA9ICh1OCl0bXNjc2ltWzRdOwkvKiBUYWdnZWQgQ21kcyAqLwotCi0JLyogRGV2aWNlIFNldHRpbmdzICovCi0JZm9yIChpZCA9IDA7IGlkIDwgTUFYX1NDU0lfSUQ7IGlkKyspIHsKLQkJaWYgKHRtc2NzaW1bMl0gIT0gLTIpCi0JCQlwdHJbaWQgPDwgMl0gPSAodTgpdG1zY3NpbVsyXTsJCS8qIEVFX01PREUxICovCi0JCWlmICh0bXNjc2ltWzFdICE9IC0yKQotCQkJcHRyWyhpZCA8PCAyKSArIDFdID0gKHU4KXRtc2NzaW1bMV07CS8qIEVFX1NwZWVkICovCi0JfQotfQotCi1zdGF0aWMgaW50IHRtc2NzaW1fZGVmW10gPSB7Ci0JNywKLQkwIC8qIDEwTUh6ICovLAotCVBBUklUWV9DSEtfIHwgU0VORF9TVEFSVF8gfCBFTl9ESVNDT05ORUNUXyB8IFNZTkNfTkVHT18gfCBUQUdfUVVFVUVJTkdfLAotCU1PUkUyX0RSViB8IEdSRUFURVJfMUcgfCBSU1RfU0NTSV9CVVMgfCBBQ1RJVkVfTkVHQVRJT04gfCBMVU5fQ0hFQ0ssCi0JMyAvKiAxNiBUYWdzIHBlciBMVU4gKi8sCi0JMSAvKiBzIGRlbGF5IGFmdGVyIFJlc2V0ICovLAotfTsKLQotLyogQ29weSBkZWZhdWx0cyBvdmVyIHNldCB2YWx1ZXMgd2hlcmUgbWlzc2luZyAqLwotc3RhdGljIHZvaWQgZGMzOTBfZmlsbF93aXRoX2RlZmF1bHRzICh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQlpZiAodG1zY3NpbVtpXSA8IDAgfHwgdG1zY3NpbVtpXSA+IDI1NSkKLQkJCXRtc2NzaW1baV0gPSB0bXNjc2ltX2RlZltpXTsKLQl9Ci0KLQkvKiBTYW5pdHkgY2hlY2tzICovCi0JaWYgKHRtc2NzaW1bMF0gPiA3KQotCQl0bXNjc2ltWzBdID0gNzsKLQlpZiAodG1zY3NpbVsxXSA+IDcpCi0JCXRtc2NzaW1bMV0gPSA0OwotCWlmICh0bXNjc2ltWzRdID4gNSkKLQkJdG1zY3NpbVs0XSA9IDQ7Ci0JaWYgKHRtc2NzaW1bNV0gPiAxODApCi0JCXRtc2NzaW1bNV0gPSAxODA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRjMzkwX2NoZWNrX2VlcHJvbShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggaW5kZXgpCi17Ci0JdTggaW50ZXJwZFtdID0gezEsIDMsIDUsIDEwLCAxNiwgMzAsIDYwLCAxMjB9OwotCXU4IEVFYnVmWzEyOF07Ci0JdTE2ICpwdHIgPSAodTE2ICopRUVidWYsIHd2YWwgPSAwOwotCWludCBpOwotCi0JZGMzOTBfcmVhZF9lZXByb20ocGRldiwgcHRyKTsKLQltZW1jcHkoZGMzOTBfZWVwcm9tQnVmW2luZGV4XSwgRUVidWYsIEVFX0FEQVBUX1NDU0lfSUQpOwotCW1lbWNweSgmZGMzOTBfZWVwcm9tQnVmW2luZGV4XVtFRV9BREFQVF9TQ1NJX0lEXSwgCi0JICAgICAgICZFRWJ1ZltSRUFMX0VFX0FEQVBUX1NDU0lfSURdLCBFRV9MRU4gLSBFRV9BREFQVF9TQ1NJX0lEKTsKLQotCWRjMzkwX2VlcHJvbUJ1ZltpbmRleF1bRUVfREVMQVldID0gaW50ZXJwZFtkYzM5MF9lZXByb21CdWZbaW5kZXhdW0VFX0RFTEFZXV07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMHg0MDsgaSsrLCBwdHIrKykKLQkJd3ZhbCArPSAqcHRyOwotCi0JLyogbm8gVGVrcmFtIEVFcHJvbSBmb3VuZCAqLwotCWlmICh3dmFsICE9IDB4MTIzNCkgewotCQlpbnQgc3BlZWQ7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiREMzOTBfaW5pdDogTm8gRUVQUk9NIGZvdW5kISBUcnlpbmcgZGVmYXVsdCBzZXR0aW5ncyAuLi5cbiIpOwotCi0JCS8qCi0JCSAqIFhYWChoY2gpOiBib2d1cywgYmVjYXVzZSB3ZSBtaWdodCBoYXZlIHRla3JhbSBhbmQKLQkJICogICAgICAgICAgIG5vbi10ZWtyYW0gaGJhcyBpbiBhIHNpbmdsZSBtYWNoaW5lLgotCQkgKi8KLQkJZGMzOTBfZmlsbF93aXRoX2RlZmF1bHRzKCk7Ci0KLQkJc3BlZWQgPSBkYzM5MF9jbG9ja19zcGVlZFt0bXNjc2ltWzFdXTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IFVzZWQgZGVmYXVsdHM6IEFkYXB0SUQ9JWksIFNwZWVkSWR4PSVpICglaS4laSBNSHopLCAiCi0JCSAgICAgICAiRGV2TW9kZT0weCUwMngsIEFkYXB0TW9kZT0weCUwMngsIFRhZ2dlZENtbmRzPSVpICglaSksIERlbGF5UmVzZXQ9JWlzXG4iLCAKLQkJICAgICAgIHRtc2NzaW1bMF0sIHRtc2NzaW1bMV0sIHNwZWVkIC8gMTAsIHNwZWVkICUgMTAsCi0JCSAgICAgICAodTgpdG1zY3NpbVsyXSwgKHU4KXRtc2NzaW1bM10sIHRtc2NzaW1bNF0sIDIgPDwgKHRtc2NzaW1bNF0pLCB0bXNjc2ltWzVdKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRjMzkwX2luaXRfaHcoc3RydWN0IGRjMzkwX2FjYiAqcEFDQiwgdTggaW5kZXgpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBwQUNCLT5wU2NzaUhvc3Q7Ci0JdTggZHN0YXRlOwotCi0JLyogRGlzYWJsZSBTQ1NJIGJ1cyByZXNldCBpbnRlcnJ1cHQgKi8KLQlEQzM5MF93cml0ZTgoQ3RybFJlZzEsIERJU19JTlRfT05fU0NTSV9SU1QgfCBzaG9zdC0+dGhpc19pZCk7Ci0KLQlpZiAocEFDQi0+R21vZGUyICYgUlNUX1NDU0lfQlVTKSB7Ci0JCWRjMzkwX1Jlc2V0U0NTSUJ1cyhwQUNCKTsKLQkJdWRlbGF5KDEwMDApOwotCQlwQUNCLT5sYXN0X3Jlc2V0ID0gamlmZmllcyArIEhaLzIgKwotCQkJSFogKiBkYzM5MF9lZXByb21CdWZbcEFDQi0+QWRhcHRlckluZGV4XVtFRV9ERUxBWV07Ci0JfQotCi0JcEFDQi0+QUNCRmxhZyA9IDA7Ci0KLQkvKiBSZXNldCBQZW5kaW5nIElOVCAqLwotCURDMzkwX3JlYWQ4KElOVF9TdGF0dXMpOwotCQotCS8qIDI1MG1zIHNlbGVjdGlvbiB0aW1lb3V0ICovCi0JREMzOTBfd3JpdGU4KFNjc2lfVGltZU91dCwgU0VMX1RJTUVPVVQpOwotCQotCS8qIENvbnZlcnNpb24gZmFjdG9yID0gMCAsIDQwTUh6IGNsb2NrICovCi0JREMzOTBfd3JpdGU4KENsa19GYWN0b3IsIENMS19GUkVRXzQwTUhaKTsKLQkKLQkvKiBOT1AgY21kIC0gY2xlYXIgY29tbWFuZCByZWdpc3RlciAqLwotCURDMzkwX3dyaXRlOChTY3NpQ21kLCBOT1BfQ01EKTsKLQkKLQkvKiBFbmFibGUgRmVhdHVyZSBhbmQgU0NTSS0yICovCi0JREMzOTBfd3JpdGU4KEN0cmxSZWcyLCBFTl9GRUFUVVJFK0VOX1NDU0kyX0NNRCk7Ci0JCi0JLyogRmFzdCBjbG9jayAqLwotCURDMzkwX3dyaXRlOChDdHJsUmVnMywgRkFTVF9DTEspOwotCi0JLyogTmVnYXRpb24gKi8KLQlEQzM5MF93cml0ZTgoQ3RybFJlZzQsIHBBQ0ItPmdsaXRjaF9jZmcgfCAvKiBnbGl0Y2ggZWF0ZXIgKi8KLQkJKGRjMzkwX2VlcHJvbUJ1ZltpbmRleF1bRUVfTU9ERTJdICYgQUNUSVZFX05FR0FUSU9OKSA/Ci0JCSBORUdBVEVfUkVRQUNLREFUQSA6IDApOwotCQotCS8qIENsZWFyIFRyYW5zZmVyIENvdW50IEhpZ2g6IElEICovCi0JREMzOTBfd3JpdGU4KEN0Y1JlZ19IaWdoLCAwKTsKLQlEQzM5MF93cml0ZTgoRE1BX0NtZCwgRE1BX0lETEVfQ01EKTsKLQlEQzM5MF93cml0ZTgoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwotCURDMzkwX3dyaXRlMzIoRE1BX1Njc2lCdXNDdHJsLCBFTl9JTlRfT05fUENJX0FCT1JUKTsKLQotCWRzdGF0ZSA9IERDMzkwX3JlYWQ4KERNQV9TdGF0dXMpOwotCURDMzkwX3dyaXRlOChETUFfU3RhdHVzLCBkc3RhdGUpOwotfQotCi1zdGF0aWMgaW50IGRjMzkwX3Byb2JlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBkYzM5MF9hY2IgKnBBQ0I7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7Ci0JdW5zaWduZWQgbG9uZyBpb19wb3J0OwotCWludCBlcnJvciA9IC1FTk9ERVYsIGk7Ci0KLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCi0JCWdvdG8gb3V0OwotCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLQllcnJvciA9IC1FTk9NRU07Ci0JaWYgKGRpc2FibGVfY2x1c3RlcmluZykKLQkJZHJpdmVyX3RlbXBsYXRlLnVzZV9jbHVzdGVyaW5nID0gRElTQUJMRV9DTFVTVEVSSU5HOwotCXNob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZkcml2ZXJfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgZGMzOTBfYWNiKSk7Ci0JaWYgKCFzaG9zdCkKLQkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7Ci0KLQlwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IgKilzaG9zdC0+aG9zdGRhdGE7Ci0JbWVtc2V0KHBBQ0IsIDAsIHNpemVvZihzdHJ1Y3QgZGMzOTBfYWNiKSk7Ci0KLQlkYzM5MF9jaGVja19lZXByb20ocGRldiwgZGMzOTBfYWRhcHRlckNudCk7Ci0JZGMzOTBfZWVwcm9tX292ZXJyaWRlKGRjMzkwX2FkYXB0ZXJDbnQpOwotCi0JaW9fcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQotCXNob3N0LT50aGlzX2lkID0gZGMzOTBfZWVwcm9tQnVmW2RjMzkwX2FkYXB0ZXJDbnRdW0VFX0FEQVBUX1NDU0lfSURdOwotCXNob3N0LT5pb19wb3J0ID0gaW9fcG9ydDsKLQlzaG9zdC0+bl9pb19wb3J0ID0gMHg4MDsKLQlzaG9zdC0+aXJxID0gcGRldi0+aXJxOwotCXNob3N0LT5iYXNlID0gaW9fcG9ydDsKLQlzaG9zdC0+dW5pcXVlX2lkID0gaW9fcG9ydDsKLQotCXBBQ0ItPmxhc3RfcmVzZXQgPSBqaWZmaWVzOwotCXBBQ0ItPnBTY3NpSG9zdCA9IHNob3N0OwotCXBBQ0ItPklPUG9ydEJhc2UgPSAodTE2KSBpb19wb3J0OwotCXBBQ0ItPklSUUxldmVsID0gcGRldi0+aXJxOwotCQotCXNob3N0LT5tYXhfaWQgPSA4OwotCi0JaWYgKHNob3N0LT5tYXhfaWQgLSAxID09Ci0JICAgIGRjMzkwX2VlcHJvbUJ1ZltkYzM5MF9hZGFwdGVyQ250XVtFRV9BREFQVF9TQ1NJX0lEXSkKLQkJc2hvc3QtPm1heF9pZC0tOwotCi0JaWYgKGRjMzkwX2VlcHJvbUJ1ZltkYzM5MF9hZGFwdGVyQ250XVtFRV9NT0RFMl0gJiBMVU5fQ0hFQ0spCi0JCXNob3N0LT5tYXhfbHVuID0gODsKLQllbHNlCi0JCXNob3N0LT5tYXhfbHVuID0gMTsKLQotCXBBQ0ItPnBGcmVlU1JCID0gcEFDQi0+U1JCX2FycmF5OwotCXBBQ0ItPlNSQkNvdW50ID0gTUFYX1NSQl9DTlQ7Ci0JcEFDQi0+QWRhcHRlckluZGV4ID0gZGMzOTBfYWRhcHRlckNudDsKLQlwQUNCLT5UYWdNYXhOdW0gPQotCQkyIDw8IGRjMzkwX2VlcHJvbUJ1ZltkYzM5MF9hZGFwdGVyQ250XVtFRV9UQUdfQ01EX05VTV07Ci0JcEFDQi0+R21vZGUyID0gZGMzOTBfZWVwcm9tQnVmW2RjMzkwX2FkYXB0ZXJDbnRdW0VFX01PREUyXTsKLQotCWZvciAoaSA9IDA7IGkgPCBwQUNCLT5TUkJDb3VudC0xOyBpKyspCi0JCXBBQ0ItPlNSQl9hcnJheVtpXS5wTmV4dFNSQiA9ICZwQUNCLT5TUkJfYXJyYXlbaSsxXTsKLQlwQUNCLT5TUkJfYXJyYXlbcEFDQi0+U1JCQ291bnQtMV0ucE5leHRTUkIgPSBOVUxMOwotCXBBQ0ItPnBUbXBTUkIgPSAmcEFDQi0+VG1wU1JCOwotCi0JcEFDQi0+c2VsX3RpbWVvdXQgPSBTRUxfVElNRU9VVDsKLQlwQUNCLT5nbGl0Y2hfY2ZnID0gRUFURVJfMjVOUzsKLQlwQUNCLT5wZGV2ID0gcGRldjsKLQotCWlmICghcmVxdWVzdF9yZWdpb24oaW9fcG9ydCwgc2hvc3QtPm5faW9fcG9ydCwgInRtc2NzaW0iKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkRDMzkwOiByZWdpc3RlciBJTyBwb3J0cyBlcnJvciFcbiIpOwotCQlnb3RvIG91dF9ob3N0X3B1dDsKLQl9Ci0KLQkvKiBSZXNldCBQZW5kaW5nIElOVCAqLwotCURDMzkwX3JlYWQ4XyhJTlRfU3RhdHVzLCBpb19wb3J0KTsKLQotCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGRvX0RDMzkwX0ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkJInRtc2NzaW0iLCBwQUNCKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkRDMzkwOiByZWdpc3RlciBJUlEgZXJyb3IhXG4iKTsKLQkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247Ci0JfQotCi0JZGMzOTBfaW5pdF9odyhwQUNCLCBkYzM5MF9hZGFwdGVyQ250KTsKLQkKLQlkYzM5MF9hZGFwdGVyQ250Kys7Ci0KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgc2hvc3QpOwotCi0JZXJyb3IgPSBzY3NpX2FkZF9ob3N0KHNob3N0LCAmcGRldi0+ZGV2KTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2ZyZWVfaXJxOwotCXNjc2lfc2Nhbl9ob3N0KHNob3N0KTsKLQlyZXR1cm4gMDsKLQotIG91dF9mcmVlX2lycToKLQlmcmVlX2lycShwZGV2LT5pcnEsIHBBQ0IpOwotIG91dF9yZWxlYXNlX3JlZ2lvbjoKLQlyZWxlYXNlX3JlZ2lvbihpb19wb3J0LCBzaG9zdC0+bl9pb19wb3J0KTsKLSBvdXRfaG9zdF9wdXQ6Ci0Jc2NzaV9ob3N0X3B1dChzaG9zdCk7Ci0gb3V0X2Rpc2FibGVfZGV2aWNlOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLSBvdXQ6Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGRjMzkwX3JlbW92ZV9vbmUgLSBDYWxsZWQgdG8gcmVtb3ZlIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyLgotICoKLSAqIEBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIHJlbW92ZS4KLSAqLwotc3RhdGljIHZvaWQgZGMzOTBfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwotCXN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IgPSAoc3RydWN0IGRjMzkwX2FjYiopIHNjc2lfaG9zdC0+aG9zdGRhdGE7Ci0JdTggYnZhbDsKLQotCXNjc2lfcmVtb3ZlX2hvc3Qoc2NzaV9ob3N0KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKHNjc2lfaG9zdC0+aG9zdF9sb2NrLCBpZmxhZ3MpOwotCXBBQ0ItPkFDQkZsYWcgPSBSRVNFVF9ERVY7Ci0JYnZhbCA9IERDMzkwX3JlYWQ4KEN0cmxSZWcxKSB8IERJU19JTlRfT05fU0NTSV9SU1Q7Ci0JREMzOTBfd3JpdGU4IChDdHJsUmVnMSwgYnZhbCk7CS8qIGRpc2FibGUgaW50ZXJydXB0ICovCi0JaWYgKHBBQ0ItPkdtb2RlMiAmIFJTVF9TQ1NJX0JVUykKLQkJZGMzOTBfUmVzZXRTQ1NJQnVzKHBBQ0IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NzaV9ob3N0LT5ob3N0X2xvY2ssIGlmbGFncyk7Ci0KLQlmcmVlX2lycShzY3NpX2hvc3QtPmlycSwgcEFDQik7Ci0JcmVsZWFzZV9yZWdpb24oc2NzaV9ob3N0LT5pb19wb3J0LCBzY3NpX2hvc3QtPm5faW9fcG9ydCk7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKLQlzY3NpX2hvc3RfcHV0KHNjc2lfaG9zdCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0bXNjc2ltX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRDUzQzk3NCwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0bXNjc2ltX3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZGMzOTBfZHJpdmVyID0gewotCS5uYW1lICAgICAgICAgICA9ICJ0bXNjc2ltIiwKLQkuaWRfdGFibGUgICAgICAgPSB0bXNjc2ltX3BjaV90YmwsCi0JLnByb2JlICAgICAgICAgID0gZGMzOTBfcHJvYmVfb25lLAotCS5yZW1vdmUgICAgICAgICA9IGRjMzkwX3JlbW92ZV9vbmUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBkYzM5MF9tb2R1bGVfaW5pdCh2b2lkKQotewotCWlmICghZGlzYWJsZV9jbHVzdGVyaW5nKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBjbHVzdGVyaW5nIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQuIElmIHlvdSBnZXQgcHJvYmxlbXMgbG9hZFxuIik7Ci0JCXByaW50ayhLRVJOX0lORk8gIiAgICAgICB3aXRoIFwiZGlzYWJsZV9jbHVzdGVyaW5nPTFcIiBhbmQgcmVwb3J0IHRvIG1haW50YWluZXJzXG4iKTsKLQl9Ci0KLQlpZiAodG1zY3NpbVswXSA9PSAtMSB8fCB0bXNjc2ltWzBdID4gMTUpIHsKLQkJdG1zY3NpbVswXSA9IDc7Ci0JCXRtc2NzaW1bMV0gPSA0OwotCQl0bXNjc2ltWzJdID0gUEFSSVRZX0NIS18gfCBUQUdfUVVFVUVJTkdfOwotCQl0bXNjc2ltWzNdID0gTU9SRTJfRFJWIHwgR1JFQVRFUl8xRyB8IFJTVF9TQ1NJX0JVUyB8IEFDVElWRV9ORUdBVElPTjsKLQkJdG1zY3NpbVs0XSA9IDI7Ci0JCXRtc2NzaW1bNV0gPSAxMDsKLQkJcHJpbnRrIChLRVJOX0lORk8gIkRDMzkwOiBVc2luZyBzYWZlIHNldHRpbmdzLlxuIik7Ci0JfQotCi0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRjMzkwX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBkYzM5MF9tb2R1bGVfZXhpdCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZGMzOTBfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoZGMzOTBfbW9kdWxlX2luaXQpOwotbW9kdWxlX2V4aXQoZGMzOTBfbW9kdWxlX2V4aXQpOwotCi0jaWZuZGVmIE1PRFVMRQotc3RhdGljIGludCBfX2luaXQgZGMzOTBfc2V0dXAgKGNoYXIgKnN0cikKLXsJCi0JaW50IGludHNbOF0saSwgaW07Ci0KLQlnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOwotCWltID0gaW50c1swXTsKLQotCWlmIChpbSA+IDYpIHsKLQkJcHJpbnRrIChLRVJOX05PVElDRSAiREMzOTA6IGlnbm9yZSBleHRyYSBwYXJhbXMhXG4iKTsKLQkJaW0gPSA2OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBpbTsgaSsrKQotCQl0bXNjc2ltW2ldID0gaW50c1tpKzFdOwotCS8qIGRjMzkwX2NoZWNrcGFyYW1zICgpOyAqLwotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJ0bXNjc2ltPSIsIGRjMzkwX3NldHVwKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Rtc2NzaW0uaCBiL2RyaXZlcnMvc2NzaS90bXNjc2ltLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMWJiNGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL3Rtc2NzaW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDU1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLTsqCUZpbGUgTmFtZSA6IFRNU0NTSU0uSAkJCQkJICAgICAgICoKLTsqCQkgICAgVEVLUkFNIERDLTM5MChUKSBQQ0kgU0NTSSBCdXMgTWFzdGVyIEhvc3QgQWRhcHRlciAgKgotOyoJCSAgICBEZXZpY2UgRHJpdmVyCQkJCSAgICAgICAqCi07KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAkSWQ6IHRtc2NzaW0uaCx2IDIuMTUuMi4zIDIwMDAvMTEvMTcgMjA6NTI6MjcgZ2FybG9mZiBFeHAgJCAqLwotCi0jaWZuZGVmIF9UTVNDU0lNX0gKLSNkZWZpbmUgX1RNU0NTSU1fSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2RlZmluZSBTQ1NJX0lSUV9OT05FIDI1NQotCi0jZGVmaW5lIE1BWF9BREFQVEVSX05VTSAJNAotI2RlZmluZSBNQVhfU0dfTElTVF9CVUYgCTE2CS8qIE5vdCB1c2VkICovCi0jZGVmaW5lIE1BWF9TQ1NJX0lECQk4Ci0jZGVmaW5lIE1BWF9TUkJfQ05UCQk1MAkvKiBNYXggbnVtYmVyIG9mIHN0YXJ0ZWQgY29tbWFuZHMgKi8KLQotI2RlZmluZSBTRUxfVElNRU9VVAkJMTUzCS8qIDI1MCBtcyBzZWxlY3Rpb24gdGltZW91dCAoQCA0MCBNSHopICovCi0KLS8qCi07LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTsgU0NTSSBSZXF1ZXN0IEJsb2NrCi07LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi1zdHJ1Y3QgZGMzOTBfc3JiCi17Ci0vL3U4CQlDbWRCbG9ja1sxMl07Ci0KLXN0cnVjdCBkYzM5MF9zcmIJKnBOZXh0U1JCOwotc3RydWN0IGRjMzkwX2RjYgkqcFNSQkRDQjsKLXN0cnVjdCBzY3NpX2NtbmQJKnBjbWQ7Ci1zdHJ1Y3Qgc2NhdHRlcmxpc3QJKnBTZWdtZW50TGlzdDsKLQotc3RydWN0IHNjYXR0ZXJsaXN0IFNlZ21lbnR4OwkvKiBtYWtlIGEgb25lIGVudHJ5IG9mIFMvRyBsaXN0IHRhYmxlICovCi0KLXVuc2lnbmVkIGxvbmcJU0dCdXNBZGRyOwkvKjthIHNlZ21lbnQgc3RhcnRpbmcgYWRkcmVzcyBhcyBzZWVuIGJ5IEFNNTNDOTc0QQotCQkJCSAgaW4gQ1BVIGVuZGlhbm5lc3MuIFdlJ3JlIG9ubHkgZ2V0dGluZyAzMi1iaXQgYnVzCi0JCQkJICBhZGRyZXNzZXMgYnkgZGVmYXVsdCAqLwotdW5zaWduZWQgbG9uZwlTR1RvQmVYZmVyTGVuOwkvKjsgdG8gYmUgeGZlciBsZW5ndGggKi8KLXVuc2lnbmVkIGxvbmcJVG90YWxYZmVycmVkTGVuOwotdW5zaWduZWQgbG9uZwlTYXZlZFRvdFhMZW47Ci11bnNpZ25lZCBsb25nCVNhdmVkX1B0cjsKLXUzMgkJU1JCU3RhdGU7Ci0KLXU4CQlTUkJTdGF0dXM7Ci11OAkJU1JCRmxhZzsJLyo7IGIwLUF1dG9SZXFTZW5zZSxiNi1SZWFkLGI3LXdyaXRlICovCi0JCQkJLyo7IGI0LXNldHRpbWVvdXQsYjUtUmVzaWR1YWwgdmFsaWQgKi8KLXU4CQlBZGFwdFN0YXR1czsKLXU4CQlUYXJnZXRTdGF0dXM7Ci0KLXU4CQlTY3NpUGhhc2U7Ci1zOAkJVGFnTnVtYmVyOwotdTgJCVNHSW5kZXg7Ci11OAkJU0djb3VudDsKLQotdTgJCU1zZ0NudDsKLXU4CQlFbmRNZXNzYWdlOwotCi11OAkJTXNnSW5CdWZbNl07Ci11OAkJTXNnT3V0QnVmWzZdOwotCi0vL3U4CQlJT1JCRmxhZzsJLyo7ODFoLVJlc2V0LCAyLXJldHJ5ICovCi19OwotCi0KLS8qCi07LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTsgRGV2aWNlIENvbnRyb2wgQmxvY2sKLTstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLXN0cnVjdCBkYzM5MF9kY2IKLXsKLXN0cnVjdCBkYzM5MF9kY2IJKnBOZXh0RENCOwotc3RydWN0IGRjMzkwX2FjYgkqcERDQkFDQjsKLQotLyogUXVldWVkIFNSQnMgKi8KLXN0cnVjdCBkYzM5MF9zcmIJKnBHb2luZ1NSQjsKLXN0cnVjdCBkYzM5MF9zcmIJKnBHb2luZ0xhc3Q7Ci1zdHJ1Y3QgZGMzOTBfc3JiCSpwQWN0aXZlU1JCOwotdTgJCUdvaW5nU1JCQ250OwotCi11MzIJCVRhZ01hc2s7Ci0KLXU4CQlUYXJnZXRJRDsJLyo7IFNDU0kgVGFyZ2V0IElEICAoU0NTSSBPbmx5KSAqLwotdTgJCVRhcmdldExVTjsJLyo7IFNDU0kgTG9nLiAgVW5pdCAoU0NTSSBPbmx5KSAqLwotdTgJCURldk1vZGU7Ci11OAkJRENCRmxhZzsKLQotdTgJCUN0cmxSMTsKLXU4CQlDdHJsUjM7Ci11OAkJQ3RybFI0OwotCi11OAkJU3luY01vZGU7CS8qOyAwOmFzeW5jIG1vZGUgKi8KLXU4CQlOZWdvUGVyaW9kOwkvKjtmb3IgbmVnby4gKi8KLXU4CQlTeW5jUGVyaW9kOwkvKjtmb3IgcmVnLiAqLwotdTgJCVN5bmNPZmZzZXQ7CS8qO2ZvciByZWcuIGFuZCBuZWdvLihsb3cgbmliYmxlKSAqLwotfTsKLQotCi0vKgotOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi07IEFkYXB0ZXIgQ29udHJvbCBCbG9jawotOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotc3RydWN0IGRjMzkwX2FjYgotewotc3RydWN0IFNjc2lfSG9zdCAqcFNjc2lIb3N0OwotdTE2CQlJT1BvcnRCYXNlOwotdTgJCUlSUUxldmVsOwotdTgJCXN0YXR1czsKLQotdTgJCVNSQkNvdW50OwotdTgJCUFkYXB0ZXJJbmRleDsJLyo7IG50aCBBZGFwdGVyIHRoaXMgZHJpdmVyICovCi11OAkJRENCQ250OwotCi11OAkJVGFnTWF4TnVtOwotdTgJCUFDQkZsYWc7Ci11OAkJR21vZGUyOwotdTgJCXNjYW5fZGV2aWNlczsKLQotc3RydWN0IGRjMzkwX2RjYgkqcExpbmtEQ0I7Ci1zdHJ1Y3QgZGMzOTBfZGNiCSpwTGFzdERDQjsKLXN0cnVjdCBkYzM5MF9kY2IJKnBEQ0JSdW5Sb2JpbjsKLQotc3RydWN0IGRjMzkwX2RjYgkqcEFjdGl2ZURDQjsKLXN0cnVjdCBkYzM5MF9zcmIJKnBGcmVlU1JCOwotc3RydWN0IGRjMzkwX3NyYgkqcFRtcFNSQjsKLQotdTgJCW1zZ2luMTIzWzRdOwotdTgJCUNvbm5lY3RlZDsKLXU4CQlwYWQ7Ci0KLSNpZiBkZWZpbmVkKFVTRV9TUElOTE9DS1MpICYmIFVTRV9TUElOTE9DS1MgPiAxICYmIChkZWZpbmVkKENPTkZJR19TTVApIHx8IERFQlVHX1NQSU5MT0NLUyA+IDApCi1zcGlubG9ja190CWxvY2s7Ci0jZW5kaWYKLXU4CQlzZWxfdGltZW91dDsKLXU4CQlnbGl0Y2hfY2ZnOwotCi11OAkJTXNnTGVuOwotdTgJCUlnbm9yZV9JUlE7CS8qIE5vdCB1c2VkICovCi0KLXN0cnVjdCBwY2lfZGV2CSpwZGV2OwotCi11bnNpZ25lZCBsb25nICAgbGFzdF9yZXNldDsKLXVuc2lnbmVkIGxvbmcJQ21kczsKLXUzMgkJU2VsTG9zdDsKLXUzMgkJU2VsQ29ubjsKLXUzMgkJQ21kSW5ROwotdTMyCQlDbWRPdXRPZlNSQjsKLQotc3RydWN0IGRjMzkwX3NyYglUbXBTUkI7Ci1zdHJ1Y3QgZGMzOTBfc3JiCVNSQl9hcnJheVtNQVhfU1JCX0NOVF07IAkvKiA1MCBTUkJzICovCi19OwotCi0KLS8qOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCi0jZGVmaW5lIEJJVDMxCTB4ODAwMDAwMDAKLSNkZWZpbmUgQklUMzAJMHg0MDAwMDAwMAotI2RlZmluZSBCSVQyOQkweDIwMDAwMDAwCi0jZGVmaW5lIEJJVDI4CTB4MTAwMDAwMDAKLSNkZWZpbmUgQklUMjcJMHgwODAwMDAwMAotI2RlZmluZSBCSVQyNgkweDA0MDAwMDAwCi0jZGVmaW5lIEJJVDI1CTB4MDIwMDAwMDAKLSNkZWZpbmUgQklUMjQJMHgwMTAwMDAwMAotI2RlZmluZSBCSVQyMwkweDAwODAwMDAwCi0jZGVmaW5lIEJJVDIyCTB4MDA0MDAwMDAKLSNkZWZpbmUgQklUMjEJMHgwMDIwMDAwMAotI2RlZmluZSBCSVQyMAkweDAwMTAwMDAwCi0jZGVmaW5lIEJJVDE5CTB4MDAwODAwMDAKLSNkZWZpbmUgQklUMTgJMHgwMDA0MDAwMAotI2RlZmluZSBCSVQxNwkweDAwMDIwMDAwCi0jZGVmaW5lIEJJVDE2CTB4MDAwMTAwMDAKLSNkZWZpbmUgQklUMTUJMHgwMDAwODAwMAotI2RlZmluZSBCSVQxNAkweDAwMDA0MDAwCi0jZGVmaW5lIEJJVDEzCTB4MDAwMDIwMDAKLSNkZWZpbmUgQklUMTIJMHgwMDAwMTAwMAotI2RlZmluZSBCSVQxMQkweDAwMDAwODAwCi0jZGVmaW5lIEJJVDEwCTB4MDAwMDA0MDAKLSNkZWZpbmUgQklUOQkweDAwMDAwMjAwCi0jZGVmaW5lIEJJVDgJMHgwMDAwMDEwMAotI2RlZmluZSBCSVQ3CTB4MDAwMDAwODAKLSNkZWZpbmUgQklUNgkweDAwMDAwMDQwCi0jZGVmaW5lIEJJVDUJMHgwMDAwMDAyMAotI2RlZmluZSBCSVQ0CTB4MDAwMDAwMTAKLSNkZWZpbmUgQklUMwkweDAwMDAwMDA4Ci0jZGVmaW5lIEJJVDIJMHgwMDAwMDAwNAotI2RlZmluZSBCSVQxCTB4MDAwMDAwMDIKLSNkZWZpbmUgQklUMAkweDAwMDAwMDAxCi0KLS8qOy0tLVVuaXRDdHJsRmxhZyAqLwotI2RlZmluZSBVTklUX0FMTE9DQVRFRAlCSVQwCi0jZGVmaW5lIFVOSVRfSU5GT19DSEFOR0VEIEJJVDEKLSNkZWZpbmUgRk9STUFUSU5HX01FRElBIEJJVDIKLSNkZWZpbmUgVU5JVF9SRVRSWQlCSVQzCi0KLS8qOy0tLVVuaXRGbGFncyAqLwotI2RlZmluZSBEQVNEX1NVUFBPUlQJQklUMAotI2RlZmluZSBTQ1NJX1NVUFBPUlQJQklUMQotI2RlZmluZSBBU1BJX1NVUFBPUlQJQklUMgotCi0vKjstLS0tU1JCU3RhdGUgbWFjaGluZSBkZWZpbml0aW9uICovCi0jZGVmaW5lIFNSQl9GUkVFCTAKLSNkZWZpbmUgU1JCX1dBSVQJQklUMAotI2RlZmluZSBTUkJfUkVBRFkJQklUMQotI2RlZmluZSBTUkJfTVNHT1VUCUJJVDIJLyo7YXJiaXRyYXRpb24rbXNnX291dCAxc3QgYnl0ZSovCi0jZGVmaW5lIFNSQl9NU0dJTglCSVQzCi0jZGVmaW5lIFNSQl9NU0dJTl9NVUxUSSBCSVQ0Ci0jZGVmaW5lIFNSQl9DT01NQU5ECUJJVDUKLSNkZWZpbmUgU1JCX1NUQVJUXwlCSVQ2CS8qO2FyYml0cmF0aW9uK21zZ19vdXQrY29tbWFuZF9vdXQqLwotI2RlZmluZSBTUkJfRElTQ09OTkVDVAlCSVQ3Ci0jZGVmaW5lIFNSQl9EQVRBX1hGRVIJQklUOAotI2RlZmluZSBTUkJfWEZFUlBBRAlCSVQ5Ci0jZGVmaW5lIFNSQl9TVEFUVVMJQklUMTAKLSNkZWZpbmUgU1JCX0NPTVBMRVRFRAlCSVQxMQotI2RlZmluZSBTUkJfQUJPUlRfU0VOVAlCSVQxMgotI2RlZmluZSBET19TWU5DX05FR08JQklUMTMKLSNkZWZpbmUgU1JCX1VORVhQRUNUX1JFU0VMIEJJVDE0Ci0KLS8qOy0tLVNSQnN0YXR1cyAqLwotI2RlZmluZSBTUkJfT0sJCUJJVDAKLSNkZWZpbmUgQUJPUlRJT04JQklUMQotI2RlZmluZSBPVkVSX1JVTglCSVQyCi0jZGVmaW5lIFVOREVSX1JVTglCSVQzCi0jZGVmaW5lIFBBUklUWV9FUlJPUglCSVQ0Ci0jZGVmaW5lIFNSQl9FUlJPUglCSVQ1Ci0KLS8qOy0tLUFDQkZsYWcgKi8KLSNkZWZpbmUgUkVTRVRfREVWCUJJVDAKLSNkZWZpbmUgUkVTRVRfREVURUNUCUJJVDEKLSNkZWZpbmUgUkVTRVRfRE9ORQlCSVQyCi0KLS8qOy0tLURDQkZsYWcgKi8KLSNkZWZpbmUgQUJPUlRfREVWXwlCSVQwCi0KLS8qOy0tLVNSQkZsYWcgKi8KLSNkZWZpbmUgREFUQU9VVCAJQklUNwotI2RlZmluZSBEQVRBSU4JCUJJVDYKLSNkZWZpbmUgUkVTSURVQUxfVkFMSUQJQklUNQotI2RlZmluZSBFTkFCTEVfVElNRVIJQklUNAotI2RlZmluZSBSRVNFVF9ERVYwCUJJVDIKLSNkZWZpbmUgQUJPUlRfREVWCUJJVDEKLSNkZWZpbmUgQVVUT19SRVFTRU5TRQlCSVQwCi0KLS8qOy0tLUFkYXB0ZXIgc3RhdHVzICovCi0jZGVmaW5lIEhfU1RBVFVTX0dPT0QJIDAKLSNkZWZpbmUgSF9TRUxfVElNRU9VVAkgMHgxMQotI2RlZmluZSBIX09WRVJfVU5ERVJfUlVOIDB4MTIKLSNkZWZpbmUgSF9VTkVYUF9CVVNfRlJFRSAweDEzCi0jZGVmaW5lIEhfVEFSR0VUX1BIQVNFX0YgMHgxNAotI2RlZmluZSBIX0lOVkFMSURfQ0NCX09QIDB4MTYKLSNkZWZpbmUgSF9MSU5LX0NDQl9CQUQJIDB4MTcKLSNkZWZpbmUgSF9CQURfVEFSR0VUX0RJUiAweDE4Ci0jZGVmaW5lIEhfRFVQTElDQVRFX0NDQiAgMHgxOQotI2RlZmluZSBIX0JBRF9DQ0JfT1JfU0cgIDB4MUEKLSNkZWZpbmUgSF9BQk9SVCAJIDB4MEZGCi0KLS8qIGNtZC0+cmVzdWx0ICovCi0jZGVmaW5lIFJFU19UQVJHRVQJCTB4MDAwMDAwRkYJLyogVGFyZ2V0IFN0YXRlICovCi0jZGVmaW5lIFJFU19UQVJHRVRfTE5YCQlTVEFUVVNfTUFTSwkvKiBPbmx5IG9mZmljaWFsIC4uLiAqLwotI2RlZmluZSBSRVNfRU5ETVNHCQkweDAwMDBGRjAwCS8qIEVuZCBNZXNzYWdlICovCi0jZGVmaW5lIFJFU19ESUQJCQkweDAwRkYwMDAwCS8qIERJRF8gY29kZXMgKi8KLSNkZWZpbmUgUkVTX0RSVgkJCTB4RkYwMDAwMDAJLyogRFJJVkVSXyBjb2RlcyAqLwotCi0jZGVmaW5lIE1LX1JFUyhkcnYsZGlkLG1zZyx0Z3QpICgoaW50KShkcnYpPDwyNCB8IChpbnQpKGRpZCk8PDE2IHwgKGludCkobXNnKTw8OCB8IChpbnQpKHRndCkpCi0jZGVmaW5lIE1LX1JFU19MTlgoZHJ2LGRpZCxtc2csdGd0KSAoKGludCkoZHJ2KTw8MjQgfCAoaW50KShkaWQpPDwxNiB8IChpbnQpKG1zZyk8PDggfCAoaW50KSh0Z3QpKQotCi0jZGVmaW5lIFNFVF9SRVNfVEFSR0VUKHdobywgdGd0KSBkbyB7IHdobyAmPSB+UkVTX1RBUkdFVDsgd2hvIHw9IChpbnQpKHRndCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFNFVF9SRVNfVEFSR0VUX0xOWCh3aG8sIHRndCkgZG8geyB3aG8gJj0gflJFU19UQVJHRVRfTE5YOyB3aG8gfD0gKGludCkodGd0KSA8PCAxOyB9IHdoaWxlICgwKQotI2RlZmluZSBTRVRfUkVTX01TRyh3aG8sIG1zZykgZG8geyB3aG8gJj0gflJFU19FTkRNU0c7IHdobyB8PSAoaW50KShtc2cpIDw8IDg7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFNFVF9SRVNfRElEKHdobywgZGlkKSBkbyB7IHdobyAmPSB+UkVTX0RJRDsgd2hvIHw9IChpbnQpKGRpZCkgPDwgMTY7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFNFVF9SRVNfRFJWKHdobywgZHJ2KSBkbyB7IHdobyAmPSB+UkVTX0RSVjsgd2hvIHw9IChpbnQpKGRydikgPDwgMjQ7IH0gd2hpbGUgKDApCi0KLS8qOy0tLVN5bmNfTW9kZSAqLwotI2RlZmluZSBTWU5DX0RJU0FCTEUJMAotI2RlZmluZSBTWU5DX0VOQUJMRQlCSVQwCi0jZGVmaW5lIFNZTkNfTkVHT19ET05FCUJJVDEKLSNkZWZpbmUgV0lERV9FTkFCTEUJQklUMgkvKiBOb3QgdXNlZCA7LSkgKi8KLSNkZWZpbmUgV0lERV9ORUdPX0RPTkUJQklUMwkvKiBOb3QgdXNlZCA7LSkgKi8KLSNkZWZpbmUgRU5fVEFHX1FVRVVFSU5HCUJJVDQKLSNkZWZpbmUgRU5fQVROX1NUT1AJQklUNQotCi0jZGVmaW5lIFNZTkNfTkVHT19PRkZTRVQgMTUKLQotLyo7LS0tU0NTSSBidXMgcGhhc2UqLwotI2RlZmluZSBTQ1NJX0RBVEFfT1VUCTAKLSNkZWZpbmUgU0NTSV9EQVRBX0lOCTEKLSNkZWZpbmUgU0NTSV9DT01NQU5ECTIKLSNkZWZpbmUgU0NTSV9TVEFUVVNfCTMKLSNkZWZpbmUgU0NTSV9OT1AwCTQKLSNkZWZpbmUgU0NTSV9OT1AxCTUKLSNkZWZpbmUgU0NTSV9NU0dfT1VUCTYKLSNkZWZpbmUgU0NTSV9NU0dfSU4JNwotCi0vKjstLS0tU0NTSSBNU0cgQllURSovIC8qIHNlZSBzY3NpL3Njc2kuaCAqLyAvKiBPbmUgaXMgbWlzc2luZyAhICovCi0jZGVmaW5lIEFCT1JUX1RBRwkweDBkCi0KLS8qCi0gKglTSVNDIHF1ZXJ5IHF1ZXVlCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlkbWFfYWRkcl90CQlzYXZlZF9kbWFfaGFuZGxlOwotfSBkYzM5MF9jbWRfc2NwX3Q7Ci0KLS8qCi07PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotOyBFRVBST00gYnl0ZSBvZmZzZXQKLTs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdHlwZWRlZiAgc3RydWN0ICBfRUVwcm9tCi17Ci11OAlFRV9NT0RFMTsKLXU4CUVFX1NQRUVEOwotdTgJeHgxOwotdTgJeHgyOwotfSBFRXByb20sICpQRUVwcm9tOwotCi0jZGVmaW5lIFJFQUxfRUVfQURBUFRfU0NTSV9JRCA2NAotI2RlZmluZSBSRUFMX0VFX01PREUyCTY1Ci0jZGVmaW5lIFJFQUxfRUVfREVMQVkJNjYKLSNkZWZpbmUgUkVBTF9FRV9UQUdfQ01EX05VTQk2NwotCi0jZGVmaW5lIEVFX0FEQVBUX1NDU0lfSUQgMzIKLSNkZWZpbmUgRUVfTU9ERTIJMzMKLSNkZWZpbmUgRUVfREVMQVkJMzQKLSNkZWZpbmUgRUVfVEFHX0NNRF9OVU0JMzUKLQotI2RlZmluZSBFRV9MRU4JCTQwCi0KLS8qOyBFRV9NT0RFMSBiaXRzIGRlZmluaXRpb24qLwotI2RlZmluZSBQQVJJVFlfQ0hLXwlCSVQwCi0jZGVmaW5lIFNZTkNfTkVHT18JQklUMQotI2RlZmluZSBFTl9ESVNDT05ORUNUXwlCSVQyCi0jZGVmaW5lIFNFTkRfU1RBUlRfCUJJVDMKLSNkZWZpbmUgVEFHX1FVRVVFSU5HXwlCSVQ0Ci0KLS8qOyBFRV9NT0RFMiBiaXRzIGRlZmluaXRpb24qLwotI2RlZmluZSBNT1JFMl9EUlYJQklUMAotI2RlZmluZSBHUkVBVEVSXzFHCUJJVDEKLSNkZWZpbmUgUlNUX1NDU0lfQlVTCUJJVDIKLSNkZWZpbmUgQUNUSVZFX05FR0FUSU9OIEJJVDMKLSNkZWZpbmUgTk9fU0VFSyAJQklUNAotI2RlZmluZSBMVU5fQ0hFQ0sJQklUNQotCi0jZGVmaW5lIEVOQUJMRV9DRQkxCi0jZGVmaW5lIERJU0FCTEVfQ0UJMAotI2RlZmluZSBFRVBST01fUkVBRAkweDgwCi0KLS8qCi07PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotOwlBTUQgNTNDOTc0IFJlZ2lzdGVycyBiaXQgRGVmaW5pdGlvbgotOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi0vKgotOz09PT09PT09PT09PT09PT09PT09Ci07IFNDU0kgUmVnaXN0ZXIKLTs9PT09PT09PT09PT09PT09PT09PQotKi8KLQotLyo7IENvbW1hbmQgUmVnLigrMENIKSAocncpICovCi0jZGVmaW5lIERNQV9DT01NQU5ECQlCSVQ3Ci0jZGVmaW5lIE5PUF9DTUQgCQkwCi0jZGVmaW5lIENMRUFSX0ZJRk9fQ01ECQkxCi0jZGVmaW5lIFJTVF9ERVZJQ0VfQ01ECQkyCi0jZGVmaW5lIFJTVF9TQ1NJX0JVU19DTUQJMwotCi0jZGVmaW5lIElORk9fWEZFUl9DTUQJCTB4MTAKLSNkZWZpbmUgSU5JVElBVE9SX0NNRF9DTVBMVEUJMHgxMQotI2RlZmluZSBNU0dfQUNDRVBURURfQ01ECTB4MTIKLSNkZWZpbmUgWEZFUl9QQURfQllURQkJMHgxOAotI2RlZmluZSBTRVRfQVROX0NNRAkJMHgxQQotI2RlZmluZSBSRVNFVF9BVE5fQ01ECQkweDFCCi0KLSNkZWZpbmUgU0VMX1dPX0FUTgkJMHg0MQkvKiBjdXJyZW50bHkgbm90IHVzZWQgKi8KLSNkZWZpbmUgU0VMX1dfQVROCQkweDQyCi0jZGVmaW5lIFNFTF9XX0FUTl9TVE9QCQkweDQzCi0jZGVmaW5lIFNFTF9XX0FUTjMJCTB4NDYKLSNkZWZpbmUgRU5fU0VMX1JFU0VMCQkweDQ0Ci0jZGVmaW5lIERJU19TRUxfUkVTRUwJCTB4NDUJLyogY3VycmVudGx5IG5vdCB1c2VkICovCi0jZGVmaW5lIFJFU0VMCQkJMHg0MAkvKiAiICovCi0jZGVmaW5lIFJFU0VMX0FUTjMJCTB4NDcJLyogIiAqLwotCi0jZGVmaW5lIERBVEFfWEZFUl9DTUQJCUlORk9fWEZFUl9DTUQKLQotCi0vKjsgU0NTSSBTdGF0dXMgUmVnLigrMTBIKSAocikgKi8KLSNkZWZpbmUgSU5URVJSVVBUCQlCSVQ3Ci0jZGVmaW5lIElMTEVHQUxfT1BfRVJSCQlCSVQ2Ci0jZGVmaW5lIFBBUklUWV9FUlIJCUJJVDUKLSNkZWZpbmUgQ09VTlRfMl9aRVJPCQlCSVQ0Ci0jZGVmaW5lIEdST1VQX0NPREVfVkFMSUQJQklUMwotI2RlZmluZSBTQ1NJX1BIQVNFX01BU0sgCShCSVQyK0JJVDErQklUMCkgCi0vKiBCSVQyOiBNU0cgcGhhc2U7IEJJVDE6IEMvRCBwaHlzZTsgQklUMDogSS9PIHBoYXNlICovCi0KLS8qOyBJbnRlcnJ1cHQgU3RhdHVzIFJlZy4oKzE0SCkgKHIpICovCi0jZGVmaW5lIFNDU0lfUkVTRVQJCUJJVDcKLSNkZWZpbmUgSU5WQUxJRF9DTUQJCUJJVDYKLSNkZWZpbmUgRElTQ09OTkVDVEVECQlCSVQ1Ci0jZGVmaW5lIFNFUlZJQ0VfUkVRVUVTVCAJQklUNAotI2RlZmluZSBTVUNDRVNTRlVMX09QCQlCSVQzCi0jZGVmaW5lIFJFU0VMRUNURUQJCUJJVDIKLSNkZWZpbmUgU0VMX0FUVEVOVElPTgkJQklUMQotI2RlZmluZSBTRUxFQ1RFRAkJQklUMAotCi0vKjsgSW50ZXJuYWwgU3RhdGUgUmVnLigrMThIKSAocikgKi8KLSNkZWZpbmUgU1lOQ19PRkZTRVRfRkxBRwlCSVQzCi0jZGVmaW5lIElOVFJOX1NUQVRFX01BU0sJKEJJVDIrQklUMStCSVQwKQotLyogMHgwNDogU2VsLiBzdWNjZXNzZnVsICh3L28gc3RvcCksIDB4MDE6IFNlbC4gc3VjY2Vzc2Z1bCAody8gc3RvcCkgKi8KLQotLyo7IENsb2NrIEZhY3RvciBSZWcuKCsyNEgpICh3KSAqLwotI2RlZmluZSBDTEtfRlJFUV80ME1IWgkJMAotI2RlZmluZSBDTEtfRlJFUV8zNU1IWgkJKEJJVDIrQklUMStCSVQwKQotI2RlZmluZSBDTEtfRlJFUV8zME1IWgkJKEJJVDIrQklUMSkKLSNkZWZpbmUgQ0xLX0ZSRVFfMjVNSFoJCShCSVQyK0JJVDApCi0jZGVmaW5lIENMS19GUkVRXzIwTUhaCQlCSVQyCi0jZGVmaW5lIENMS19GUkVRXzE1TUhaCQkoQklUMStCSVQwKQotI2RlZmluZSBDTEtfRlJFUV8xME1IWgkJQklUMQotCi0vKjsgQ29udHJvbCBSZWcuIDEoKzIwSCkgKHJ3KSAqLwotI2RlZmluZSBFWFRFTkRFRF9USU1JTkcgCUJJVDcKLSNkZWZpbmUgRElTX0lOVF9PTl9TQ1NJX1JTVAlCSVQ2Ci0jZGVmaW5lIFBBUklUWV9FUlJfUkVQTyAJQklUNAotI2RlZmluZSBTQ1NJX0lEX09OX0JVUwkJKEJJVDIrQklUMStCSVQwKSAvKiBob3N0IGFkYXB0ZXIgSUQgKi8KLQotLyo7IENvbnRyb2wgUmVnLiAyKCsyQ0gpIChydykgKi8KLSNkZWZpbmUgRU5fRkVBVFVSRQkJQklUNgotI2RlZmluZSBFTl9TQ1NJMl9DTUQJCUJJVDMKLQotLyo7IENvbnRyb2wgUmVnLiAzKCszMEgpIChydykgKi8KLSNkZWZpbmUgSURfTVNHX0NIRUNLCQlCSVQ3Ci0jZGVmaW5lIEVOX1FUQUdfTVNHCQlCSVQ2Ci0jZGVmaW5lIEVOX0dSUDJfQ01ECQlCSVQ1Ci0jZGVmaW5lIEZBU1RfU0NTSQkJQklUNAkvKiA7MTBNQi9TRUMgKi8KLSNkZWZpbmUgRkFTVF9DTEsJCUJJVDMJLyogOzI1IC0gNDAgTUhaICovCi0KLS8qOyBDb250cm9sIFJlZy4gNCgrMzRIKSAocncpICovCi0jZGVmaW5lIEVBVEVSXzEyTlMJCTAKLSNkZWZpbmUgRUFURVJfMjVOUwkJQklUNwotI2RlZmluZSBFQVRFUl8zNU5TCQlCSVQ2Ci0jZGVmaW5lIEVBVEVSXzBOUwkJKEJJVDcrQklUNikKLSNkZWZpbmUgUkVEVUNFRF9QT1dFUgkJQklUNQotI2RlZmluZSBDVFJMNF9SRVNFUlZFRAkJQklUNAkvKiBtdXN0IGJlIDEgYWNjLiB0byBBTTUzQzk3NC5jICovCi0jZGVmaW5lIE5FR0FURV9SRVFBQ0tEQVRBCUJJVDIKLSNkZWZpbmUgTkVHQVRFX1JFUUFDSwkJQklUMwotCi0jZGVmaW5lIEdMSVRDSF9UT19OUyh4KSAoKCh+eD4+NiAmIDIpID4+IDEpIHwgKCh4Pj42ICYgMSkgPDwgMSBeICh4Pj42ICYgMikpKQotI2RlZmluZSBOU19UT19HTElUQ0goeSkgKCgofnk8PDcpIHwgfigoeTw8NikgXiAoKHk8PDUgJiAxPDw2KSB8IH4weDQwKSkpICYgMHhjMCkKLQotLyoKLTs9PT09PT09PT09PT09PT09PT09PQotOyBETUEgUmVnaXN0ZXIKLTs9PT09PT09PT09PT09PT09PT09PQotKi8KLS8qOyBETUEgQ29tbWFuZCBSZWcuKCs0MEgpIChydykgKi8KLSNkZWZpbmUgUkVBRF9ESVJFQ1RJT04JCUJJVDcKLSNkZWZpbmUgV1JJVEVfRElSRUNUSU9OIAkwCi0jZGVmaW5lIEVOX0RNQV9JTlQJCUJJVDYKLSNkZWZpbmUgRU5fUEFHRV9JTlQJCUJJVDUJLyogcGFnZSB0cmFuc2ZlciBpbnRlcnJ1cHQgZW5hYmxlICovCi0jZGVmaW5lIE1BUF9UT19NREwJCUJJVDQKLSNkZWZpbmUgRElBR05PU1RJQwkJQklUMgotI2RlZmluZSBETUFfSURMRV9DTUQJCTAKLSNkZWZpbmUgRE1BX0JMQVNUX0NNRAkJQklUMAotI2RlZmluZSBETUFfQUJPUlRfQ01ECQlCSVQxCi0jZGVmaW5lIERNQV9TVEFSVF9DTUQJCShCSVQxK0JJVDApCi0KLS8qOyBETUEgU3RhdHVzIFJlZy4oKzU0SCkgKHIpICovCi0jZGVmaW5lIFBDSV9NU19BQk9SVAkJQklUNgotI2RlZmluZSBCTEFTVF9DT01QTEVURQkJQklUNQotI2RlZmluZSBTQ1NJX0lOVEVSUlVQVAkJQklUNAotI2RlZmluZSBETUFfWEZFUl9ET05FCQlCSVQzCi0jZGVmaW5lIERNQV9YRkVSX0FCT1JUCQlCSVQyCi0jZGVmaW5lIERNQV9YRkVSX0VSUk9SCQlCSVQxCi0jZGVmaW5lIFBPV0VSX0RPV04JCUJJVDAKLQotLyo7IERNQSBTQ1NJIEJ1cyBhbmQgQ3RybC4oKzcwSCkgKi8KLSNkZWZpbmUgRU5fSU5UX09OX1BDSV9BQk9SVAlCSVQyNQotI2RlZmluZSBXUlRfRVJBU0VfRE1BX1NUQVQJQklUMjQKLSNkZWZpbmUgUFdfRE9XTl9DVFJMCQlCSVQyMQotI2RlZmluZSBTQ1NJX0JVU1kJCUJJVDIwCi0jZGVmaW5lIFNDTEsJCQlCSVQxOQotI2RlZmluZSBTQ0FNCQkJQklUMTgKLSNkZWZpbmUgU0NTSV9MSU5FUwkJMHgwMDAzZmZmZgotCi0vKgotOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTsgU0NTSSBDaGlwIHJlZ2lzdGVyIGFkZHJlc3Mgb2Zmc2V0Ci07PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotO1JlZ2lzdGVycyBhcmUgcncgdW5sZXNzIGRlY2xhcmVkIG90aGVyd2lzZSAKLSovCi0jZGVmaW5lIEN0Y1JlZ19Mb3cJMHgwMAkvKiByCWN1cnIuIHRyYW5zZmVyIGNvdW50ICovCi0jZGVmaW5lIEN0Y1JlZ19NaWQJMHgwNAkvKiByICovCi0jZGVmaW5lIEN0Y1JlZ19IaWdoCTB4MzgJLyogciAqLwotI2RlZmluZSBTY3NpRmlmbwkweDA4Ci0jZGVmaW5lIFNjc2lDbWQgCTB4MEMKLSNkZWZpbmUgU2NzaV9TdGF0dXMJMHgxMAkvKiByICovCi0jZGVmaW5lIElOVF9TdGF0dXMJMHgxNAkvKiByICovCi0jZGVmaW5lIFN5bmNfUGVyaW9kCTB4MTgJLyogdyAqLwotI2RlZmluZSBTeW5jX09mZnNldAkweDFDCS8qIHcgKi8KLSNkZWZpbmUgQ2xrX0ZhY3RvcgkweDI0CS8qIHcgKi8KLSNkZWZpbmUgQ3RybFJlZzEJMHgyMAkKLSNkZWZpbmUgQ3RybFJlZzIJMHgyQwotI2RlZmluZSBDdHJsUmVnMwkweDMwCi0jZGVmaW5lIEN0cmxSZWc0CTB4MzQKLSNkZWZpbmUgRE1BX0NtZCAJMHg0MAotI2RlZmluZSBETUFfWGZlckNudAkweDQ0CS8qIHJ3CXN0YXJ0aW5nIHRyYW5zZmVyIGNvdW50ICgzMiBiaXQpICovCi0jZGVmaW5lIERNQV9YZmVyQWRkcgkweDQ4CS8qIHJ3CXN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3MgKDMyIGJpdCkgKi8KLSNkZWZpbmUgRE1BX1drX0J5dGVDbnRyIDB4NEMJLyogcgl3b3JraW5nIGJ5dGUgY291bnRlciAqLwotI2RlZmluZSBETUFfV2tfQWRkckNudHIgMHg1MAkvKiByCXdvcmtpbmcgYWRkcmVzcyBjb3VudGVyICovCi0jZGVmaW5lIERNQV9TdGF0dXMJMHg1NAkvKiByICovCi0jZGVmaW5lIERNQV9NRExfQWRkcgkweDU4CS8qIHJ3CXN0YXJ0aW5nIE1ETCBhZGRyZXNzICovCi0jZGVmaW5lIERNQV9Xa19NRExfQ250ciAweDVDCS8qIHIJd29ya2luZyBNREwgY291bnRlciAqLwotI2RlZmluZSBETUFfU2NzaUJ1c0N0cmwgMHg3MAkvKiBydwlTQ1NJIEJ1cywgUENJL0RNQSBDdHJsICovCi0KLSNkZWZpbmUgU3RjUmVnX0xvdwlDdGNSZWdfTG93CS8qIHcJc3RhcnQgdHJhbnNmZXIgY291bnQgKi8KLSNkZWZpbmUgU3RjUmVnX01pZAlDdGNSZWdfTWlkCS8qIHcgKi8KLSNkZWZpbmUgU3RjUmVnX0hpZ2gJQ3RjUmVnX0hpZ2gJLyogdyAqLwotI2RlZmluZSBTY3NpX0Rlc3RfSUQJU2NzaV9TdGF0dXMJLyogdyAqLwotI2RlZmluZSBTY3NpX1RpbWVPdXQJSU5UX1N0YXR1cwkvKiB3ICovCi0jZGVmaW5lIEludGVybl9TdGF0ZQlTeW5jX1BlcmlvZAkvKiByICovCi0jZGVmaW5lIEN1cnJlbnRfRmlmbwlTeW5jX09mZnNldAkvKiByCUN1cnIuIEZJRk8gLyBpbnQuIHN0YXRlICovCi0KLQotI2RlZmluZSBEQzM5MF9yZWFkOChhZGRyZXNzKQkJCVwKLQkoaW5iIChwQUNCLT5JT1BvcnRCYXNlICsgKGFkZHJlc3MpKSkKLQotI2RlZmluZSBEQzM5MF9yZWFkOF8oYWRkcmVzcywgYmFzZSkJCVwKLQkoaW5iICgodTE2KShiYXNlKSArIChhZGRyZXNzKSkpCi0KLSNkZWZpbmUgREMzOTBfcmVhZDE2KGFkZHJlc3MpCQkJXAotCShpbncgKHBBQ0ItPklPUG9ydEJhc2UgKyAoYWRkcmVzcykpKQotCi0jZGVmaW5lIERDMzkwX3JlYWQzMihhZGRyZXNzKQkJCVwKLQkoaW5sIChwQUNCLT5JT1BvcnRCYXNlICsgKGFkZHJlc3MpKSkKLQotI2RlZmluZSBEQzM5MF93cml0ZTgoYWRkcmVzcyx2YWx1ZSkJCVwKLQlvdXRiICgodmFsdWUpLCBwQUNCLT5JT1BvcnRCYXNlICsgKGFkZHJlc3MpKQotCi0jZGVmaW5lIERDMzkwX3dyaXRlOF8oYWRkcmVzcyx2YWx1ZSxiYXNlKQlcCi0Jb3V0YiAoKHZhbHVlKSwgKHUxNikoYmFzZSkgKyAoYWRkcmVzcykpCi0KLSNkZWZpbmUgREMzOTBfd3JpdGUxNihhZGRyZXNzLHZhbHVlKQkJXAotCW91dHcgKCh2YWx1ZSksIHBBQ0ItPklPUG9ydEJhc2UgKyAoYWRkcmVzcykpCi0KLSNkZWZpbmUgREMzOTBfd3JpdGUzMihhZGRyZXNzLHZhbHVlKQkJXAotCW91dGwgKCh2YWx1ZSksIHBBQ0ItPklPUG9ydEJhc2UgKyAoYWRkcmVzcykpCi0KLQotI2VuZGlmIC8qIF9UTVNDU0lNX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMgYi9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCmluZGV4IGQ4ZGNmMzYuLjE0ZWI1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMKKysrIGIvZHJpdmVycy9zY3NpL3UxNC0zNGYuYwpAQCAtNjk2LDI1ICs2OTYsMjUgQEAKICAgIGlmIChUTERFVihkZXYtPnR5cGUpICYmIGRldi0+dGFnZ2VkX3N1cHBvcnRlZCkKIAogICAgICAgaWYgKHRhZ19tb2RlID09IFRBR19TSU1QTEUpIHsKLSAgICAgICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgTVNHX1NJTVBMRV9UQUcsIHRxZCk7CisgICAgICAgICBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChkZXYsIHRxZCk7CiAgICAgICAgICB0YWdfc3VmZml4ID0gIiwgc2ltcGxlIHRhZ3MiOwogICAgICAgICAgfQogICAgICAgZWxzZSBpZiAodGFnX21vZGUgPT0gVEFHX09SREVSRUQpIHsKLSAgICAgICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgTVNHX09SREVSRURfVEFHLCB0cWQpOworICAgICAgICAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCB0cWQpOwogICAgICAgICAgdGFnX3N1ZmZpeCA9ICIsIG9yZGVyZWQgdGFncyI7CiAgICAgICAgICB9CiAgICAgICBlbHNlIHsKLSAgICAgICAgIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKGRldiwgMCwgdHFkKTsKKyAgICAgICAgIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKGRldiwgdHFkKTsKICAgICAgICAgIHRhZ19zdWZmaXggPSAiLCBubyB0YWdzIjsKICAgICAgICAgIH0KIAogICAgZWxzZSBpZiAoVExERVYoZGV2LT50eXBlKSAmJiBsaW5rZWRfY29tbSkgewotICAgICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoZGV2LCAwLCB0cWQpOworICAgICAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCB0cWQpOwogICAgICAgdGFnX3N1ZmZpeCA9ICIsIHVudGFnZ2VkIjsKICAgICAgIH0KIAogICAgZWxzZSB7Ci0gICAgICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChkZXYsIDAsIHV0cWQpOworICAgICAgc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoZGV2LCB1dHFkKTsKICAgICAgIHRhZ19zdWZmaXggPSAiIjsKICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QtcGNpLmMgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC1wY2kuYwppbmRleCA5NTVlZDU1Li5kMTVlYWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC1wY2kuYworKysgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC1wY2kuYwpAQCAtNjIsMTIgKzYyLDcgQEAKIHsKIAlyZXR1cm4gdWZzaGNkX3N5c3RlbV9yZXN1bWUoZGV2X2dldF9kcnZkYXRhKGRldikpOwogfQotI2Vsc2UKLSNkZWZpbmUgdWZzaGNkX3BjaV9zdXNwZW5kCU5VTEwKLSNkZWZpbmUgdWZzaGNkX3BjaV9yZXN1bWUJTlVMTAotI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIHN0YXRpYyBpbnQgdWZzaGNkX3BjaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiB1ZnNoY2RfcnVudGltZV9zdXNwZW5kKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKQEAgLTgwLDExICs3NSwxMyBAQAogewogCXJldHVybiB1ZnNoY2RfcnVudGltZV9pZGxlKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKIH0KLSNlbHNlIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLworI2Vsc2UgLyogIUNPTkZJR19QTSAqLworI2RlZmluZSB1ZnNoY2RfcGNpX3N1c3BlbmQJTlVMTAorI2RlZmluZSB1ZnNoY2RfcGNpX3Jlc3VtZQlOVUxMCiAjZGVmaW5lIHVmc2hjZF9wY2lfcnVudGltZV9zdXNwZW5kCU5VTEwKICNkZWZpbmUgdWZzaGNkX3BjaV9ydW50aW1lX3Jlc3VtZQlOVUxMCiAjZGVmaW5lIHVmc2hjZF9wY2lfcnVudGltZV9pZGxlCU5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAvKioKICAqIHVmc2hjZF9wY2lfc2h1dGRvd24gLSBtYWluIGZ1bmN0aW9uIHRvIHB1dCB0aGUgY29udHJvbGxlciBpbiByZXNldCBzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QtcGx0ZnJtLmMgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC1wbHRmcm0uYwppbmRleCAxYzM0NjdiLi43NmQzOWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC1wbHRmcm0uYworKysgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC1wbHRmcm0uYwpAQCAtMjYxLDEyICsyNjEsNyBAQAogewogCXJldHVybiB1ZnNoY2Rfc3lzdGVtX3Jlc3VtZShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CiB9Ci0jZWxzZQotI2RlZmluZSB1ZnNoY2RfcGx0ZnJtX3N1c3BlbmQJTlVMTAotI2RlZmluZSB1ZnNoY2RfcGx0ZnJtX3Jlc3VtZQlOVUxMCi0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiBzdGF0aWMgaW50IHVmc2hjZF9wbHRmcm1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gdWZzaGNkX3J1bnRpbWVfc3VzcGVuZChkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CkBAIC0yNzksMTEgKzI3NCwxMyBAQAogewogCXJldHVybiB1ZnNoY2RfcnVudGltZV9pZGxlKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKIH0KLSNlbHNlIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLworI2Vsc2UgLyogIUNPTkZJR19QTSAqLworI2RlZmluZSB1ZnNoY2RfcGx0ZnJtX3N1c3BlbmQJTlVMTAorI2RlZmluZSB1ZnNoY2RfcGx0ZnJtX3Jlc3VtZQlOVUxMCiAjZGVmaW5lIHVmc2hjZF9wbHRmcm1fcnVudGltZV9zdXNwZW5kCU5VTEwKICNkZWZpbmUgdWZzaGNkX3BsdGZybV9ydW50aW1lX3Jlc3VtZQlOVUxMCiAjZGVmaW5lIHVmc2hjZF9wbHRmcm1fcnVudGltZV9pZGxlCU5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiBzdGF0aWMgdm9pZCB1ZnNoY2RfcGx0ZnJtX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5jIGIvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QuYwppbmRleCA2MDVjYTYwLi4yZTQ2MTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5jCisrKyBiL2RyaXZlcnMvc2NzaS91ZnMvdWZzaGNkLmMKQEAgLTI3MTMsNyArMjcxMyw3IEBACiAKIAlkZXZfZGJnKGhiYS0+ZGV2LCAiJXM6IGFjdGl2YXRlIHRjcSB3aXRoIHF1ZXVlIGRlcHRoICVkXG4iLAogCQkJX19mdW5jX18sIGx1bl9xZGVwdGgpOwotCXNjc2lfYWN0aXZhdGVfdGNxKHNkZXYsIGx1bl9xZGVwdGgpOworCXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGx1bl9xZGVwdGgpOwogfQogCiAvKgpAQCAtMjc4MywxMSArMjc4Myw5IEBACiAJc3RydWN0IHVmc19oYmEgKmhiYTsKIAogCWhiYSA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7Ci0Jc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCA9IDE7CiAKIAkvKiBNb2RlIHNlbnNlKDYpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgVUZTLCBzbyB1c2UgTW9kZSBzZW5zZSgxMCkgKi8KIAlzZGV2LT51c2VfMTBfZm9yX21zID0gMTsKLQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfU0lNUExFX1RBRyk7CiAKIAkvKiBhbGxvdyBTQ1NJIGxheWVyIHRvIHJlc3RhcnQgdGhlIGRldmljZSBpbiBjYXNlIG9mIGVycm9ycyAqLwogCXNkZXYtPmFsbG93X3Jlc3RhcnQgPSAxOwpAQCAtMjgwNywzNCArMjgwNSwxNiBAQAogICogdWZzaGNkX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIGNoYW5nZSBxdWV1ZSBkZXB0aAogICogQHNkZXY6IHBvaW50ZXIgdG8gU0NTSSBkZXZpY2UKICAqIEBkZXB0aDogcmVxdWlyZWQgZGVwdGggdG8gc2V0Ci0gKiBAcmVhc29uOiByZWFzb24gZm9yIGNoYW5naW5nIHRoZSBkZXB0aAogICoKLSAqIENoYW5nZSBxdWV1ZSBkZXB0aCBhY2NvcmRpbmcgdG8gdGhlIHJlYXNvbiBhbmQgbWFrZSBzdXJlCi0gKiB0aGUgbWF4LiBsaW1pdHMgYXJlIG5vdCBjcm9zc2VkLgorICogQ2hhbmdlIHF1ZXVlIGRlcHRoIGFuZCBtYWtlIHN1cmUgdGhlIG1heC4gbGltaXRzIGFyZSBub3QgY3Jvc3NlZC4KICAqLwotc3RhdGljIGludCB1ZnNoY2RfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJaW50IGRlcHRoLCBpbnQgcmVhc29uKQorc3RhdGljIGludCB1ZnNoY2RfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQogewogCXN0cnVjdCB1ZnNfaGJhICpoYmEgPSBzaG9zdF9wcml2KHNkZXYtPmhvc3QpOwogCiAJaWYgKGRlcHRoID4gaGJhLT5udXRycykKIAkJZGVwdGggPSBoYmEtPm51dHJzOwotCi0Jc3dpdGNoIChyZWFzb24pIHsKLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6Ci0JY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JCQlkZXB0aCA9IDE7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6Ci0JCXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBkZXB0aCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gZGVwdGg7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIGRlcHRoKTsKIH0KIAogLyoqCkBAIC0yODYwLDcgKzI4NDAsNiBAQAogCXN0cnVjdCB1ZnNfaGJhICpoYmE7CiAKIAloYmEgPSBzaG9zdF9wcml2KHNkZXYtPmhvc3QpOwotCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgaGJhLT5udXRycyk7CiAJLyogRHJvcCB0aGUgcmVmZXJlbmNlIGFzIGl0IHdvbid0IGJlIG5lZWRlZCBhbnltb3JlICovCiAJaWYgKHVmc2hjZF9zY3NpX3RvX3VwaXVfbHVuKHNkZXYtPmx1bikgPT0gVUZTX1VQSVVfVUZTX0RFVklDRV9XTFVOKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MjM5LDYgKzQyMTgsOCBAQAogCS5jbWRfcGVyX2x1bgkJPSBVRlNIQ0RfQ01EX1BFUl9MVU4sCiAJLmNhbl9xdWV1ZQkJPSBVRlNIQ0RfQ0FOX1FVRVVFLAogCS5tYXhfaG9zdF9ibG9ja2VkCT0gMSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBpbnQgdWZzaGNkX2NvbmZpZ192cmVnX2xvYWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdWZzX3ZyZWcgKnZyZWcsCkBAIC00NzMxLDExICs0NzEyLDExIEBACiAJCQkJICAgICBTVEFSVF9TVE9QX1RJTUVPVVQsIDAsIE5VTEwsIFJFUV9QTSk7CiAJaWYgKHJldCkgewogCQlzZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNkcCwKLQkJCSAgIlNUQVJUX1NUT1AgZmFpbGVkIGZvciBwb3dlciBtb2RlOiAlZFxuIiwgcHdyX21vZGUpOwotCQlzY3NpX3Nob3dfcmVzdWx0KHJldCk7CisJCQkgICAgIlNUQVJUX1NUT1AgZmFpbGVkIGZvciBwb3dlciBtb2RlOiAlZCwgcmVzdWx0ICV4XG4iLAorCQkJICAgIHB3cl9tb2RlLCByZXQpOwogCQlpZiAoZHJpdmVyX2J5dGUocmV0KSAmIERSSVZFUl9TRU5TRSkgewotCQkJc2NzaV9zaG93X3NlbnNlX2hkcigmc3NoZHIpOwotCQkJc2NzaV9zaG93X2V4dGRfc2Vuc2Uoc3NoZHIuYXNjLCBzc2hkci5hc2NxKTsKKwkJCXNjc2lfc2hvd19zZW5zZV9oZHIoc2RwLCBOVUxMLCAmc3NoZHIpOworCQkJc2NzaV9zaG93X2V4dGRfc2Vuc2Uoc2RwLCBOVUxMLCBzc2hkci5hc2MsIHNzaGRyLmFzY3EpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdmlydGlvX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS92aXJ0aW9fc2NzaS5jCmluZGV4IGI4Mzg0NmYuLjIyZTcwMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS92aXJ0aW9fc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS92aXJ0aW9fc2NzaS5jCkBAIC01NjEsNiArNTYxLDE1IEBACiAJcmV0dXJuIHZpcnRzY3NpX3F1ZXVlY29tbWFuZCh2c2NzaSwgJnZzY3NpLT5yZXFfdnFzWzBdLCBzYyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdmlydGlvX3Njc2lfdnEgKnZpcnRzY3NpX3BpY2tfdnFfbXEoc3RydWN0IHZpcnRpb19zY3NpICp2c2NzaSwKKwkJCQkJCSAgc3RydWN0IHNjc2lfY21uZCAqc2MpCit7CisJdTMyIHRhZyA9IGJsa19tcV91bmlxdWVfdGFnKHNjLT5yZXF1ZXN0KTsKKwl1MTYgaHdxID0gYmxrX21xX3VuaXF1ZV90YWdfdG9faHdxKHRhZyk7CisKKwlyZXR1cm4gJnZzY3NpLT5yZXFfdnFzW2h3cV07Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX3Njc2lfdnEgKnZpcnRzY3NpX3BpY2tfdnEoc3RydWN0IHZpcnRpb19zY3NpICp2c2NzaSwKIAkJCQkJICAgICAgIHN0cnVjdCB2aXJ0aW9fc2NzaV90YXJnZXRfc3RhdGUgKnRndCkKIHsKQEAgLTYwNCw3ICs2MTMsMTIgQEAKIAlzdHJ1Y3QgdmlydGlvX3Njc2kgKnZzY3NpID0gc2hvc3RfcHJpdihzaCk7CiAJc3RydWN0IHZpcnRpb19zY3NpX3RhcmdldF9zdGF0ZSAqdGd0ID0KIAkJCQlzY3NpX3RhcmdldChzYy0+ZGV2aWNlKS0+aG9zdGRhdGE7Ci0Jc3RydWN0IHZpcnRpb19zY3NpX3ZxICpyZXFfdnEgPSB2aXJ0c2NzaV9waWNrX3ZxKHZzY3NpLCB0Z3QpOworCXN0cnVjdCB2aXJ0aW9fc2NzaV92cSAqcmVxX3ZxOworCisJaWYgKHNob3N0X3VzZV9ibGtfbXEoc2gpKQorCQlyZXFfdnEgPSB2aXJ0c2NzaV9waWNrX3ZxX21xKHZzY3NpLCBzYyk7CisJZWxzZQorCQlyZXFfdnEgPSB2aXJ0c2NzaV9waWNrX3ZxKHZzY3NpLCB0Z3QpOwogCiAJcmV0dXJuIHZpcnRzY3NpX3F1ZXVlY29tbWFuZCh2c2NzaSwgcmVxX3ZxLCBzYyk7CiB9CkBAIC02NjgsMzAgKzY4MiwxMyBAQAogICogdmlydHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKCkgLSBDaGFuZ2UgYSB2aXJ0c2NzaSB0YXJnZXQncyBxdWV1ZSBkZXB0aAogICogQHNkZXY6CVZpcnRzY3NpIHRhcmdldCB3aG9zZSBxdWV1ZSBkZXB0aCB0byBjaGFuZ2UKICAqIEBxZGVwdGg6CU5ldyBxdWV1ZSBkZXB0aAotICogQHJlYXNvbjoJUmVhc29uIGZvciB0aGUgcXVldWUgZGVwdGggY2hhbmdlLgogICovCi1zdGF0aWMgaW50IHZpcnRzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkJICAgICAgIGludCBxZGVwdGgsCi0JCQkJICAgICAgIGludCByZWFzb24pCitzdGF0aWMgaW50IHZpcnRzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCWludCBtYXhfZGVwdGggPSBzaG9zdC0+Y21kX3Blcl9sdW47CiAKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfUUZVTEw6IC8qIERyb3AgcWRlcHRoIGluIHJlc3BvbnNlIHRvIEJVU1kgc3RhdGUgKi8KLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIHFkZXB0aCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NTSV9RREVQVEhfUkFNUF9VUDogLyogUmFpc2UgcWRlcHRoIGFmdGVyIEJVU1kgc3RhdGUgcmVzb2x2ZWQgKi8KLQljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6IC8qIE1hbnVhbCBjaGFuZ2UgdmlhIHN5c2ZzICovCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsCi0JCQkJCXNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLAotCQkJCQltaW4obWF4X2RlcHRoLCBxZGVwdGgpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKKwlyZXR1cm4gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgbWluKG1heF9kZXB0aCwgcWRlcHRoKSk7CiB9CiAKIHN0YXRpYyBpbnQgdmlydHNjc2lfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2MpCkBAIC03NTgsNiArNzU1LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKIAkudGFyZ2V0X2FsbG9jID0gdmlydHNjc2lfdGFyZ2V0X2FsbG9jLAogCS50YXJnZXRfZGVzdHJveSA9IHZpcnRzY3NpX3RhcmdldF9kZXN0cm95LAorCS50cmFja19xdWV1ZV9kZXB0aCA9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB2aXJ0c2NzaV9ob3N0X3RlbXBsYXRlX211bHRpID0gewpAQCAtNzc2LDYgKzc3NCw3IEBACiAJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnRhcmdldF9hbGxvYyA9IHZpcnRzY3NpX3RhcmdldF9hbGxvYywKIAkudGFyZ2V0X2Rlc3Ryb3kgPSB2aXJ0c2NzaV90YXJnZXRfZGVzdHJveSwKKwkudHJhY2tfcXVldWVfZGVwdGggPSAxLAogfTsKIAogI2RlZmluZSB2aXJ0c2NzaV9jb25maWdfZ2V0KHZkZXYsIGZsZCkgXApAQCAtOTgzLDYgKzk4Miw3IEBACiAJc2hvc3QtPm1heF9pZCA9IG51bV90YXJnZXRzOwogCXNob3N0LT5tYXhfY2hhbm5lbCA9IDA7CiAJc2hvc3QtPm1heF9jbWRfbGVuID0gVklSVElPX1NDU0lfQ0RCX1NJWkU7CisJc2hvc3QtPm5yX2h3X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CiAKIAlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19TQ1NJX0ZfVDEwX1BJKSkgewogCQlob3N0X3Byb3QgPSBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8IFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jCmluZGV4IDU5OGY2NWUuLjBmMTMzYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Ztd19wdnNjc2kuYwpAQCAtNTA0LDMzICs1MDQsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcHZzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkJICAgICBpbnQgcWRlcHRoLAotCQkJCSAgICAgaW50IHJlYXNvbikKK3N0YXRpYyBpbnQgcHZzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7Ci0JaW50IG1heF9kZXB0aDsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7Ci0KLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCS8qCi0JCSAqIFdlIHN1cHBvcnQgb25seSBjaGFuZ2luZyBkZWZhdWx0LgotCQkgKi8KLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JbWF4X2RlcHRoID0gc2hvc3QtPmNhbl9xdWV1ZTsKIAlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCi0JCW1heF9kZXB0aCA9IDE7Ci0JaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKLQkJcWRlcHRoID0gbWF4X2RlcHRoOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOwotCi0JaWYgKHNkZXYtPmlucXVpcnlfbGVuID4gNykKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LAotCQkJICAgICJxZGVwdGgoJWQpLCB0YWdnZWQoJWQpLCBzaW1wbGUoJWQpLCBvcmRlcmVkKCVkKSwgc2NzaV9sZXZlbCglZCksIGNtZF9xdWUoJWQpXG4iLAotCQkJICAgIHNkZXYtPnF1ZXVlX2RlcHRoLCBzZGV2LT50YWdnZWRfc3VwcG9ydGVkLAotCQkJICAgIHNkZXYtPnNpbXBsZV90YWdzLCBzZGV2LT5vcmRlcmVkX3RhZ3MsCi0JCQkgICAgc2Rldi0+c2NzaV9sZXZlbCwgKHNkZXYtPmlucXVpcnlbN10gJiAyKSA+PiAxKTsKLQlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CisJCXFkZXB0aCA9IDE7CisJcmV0dXJuIHNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCk7CiB9CiAKIC8qCkBAIC03MjMsMTAgKzcwMSw2IEBACiAJbWVtY3B5KGUtPmNkYiwgY21kLT5jbW5kLCBlLT5jZGJMZW4pOwogCiAJZS0+dGFnID0gU0lNUExFX1FVRVVFX1RBRzsKLQlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCAmJgotCSAgICAoY21kLT50YWcgPT0gSEVBRF9PRl9RVUVVRV9UQUcgfHwKLQkgICAgIGNtZC0+dGFnID09IE9SREVSRURfUVVFVUVfVEFHKSkKLQkJZS0+dGFnID0gY21kLT50YWc7CiAKIAlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCiAJCWUtPmZsYWdzID0gUFZTQ1NJX0ZMQUdfQ01EX0RJUl9UT0hPU1Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvd2Q3MDAwLmMgYi9kcml2ZXJzL3Njc2kvd2Q3MDAwLmMKaW5kZXggMzI2NzQyMy4uZjk0ZDczNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkNzAwMC5jCisrKyBiL2RyaXZlcnMvc2NzaS93ZDcwMDAuYwpAQCAtMTY1Myw3ICsxNjUzLDYgQEAKIAkuY2FuX3F1ZXVlCQk9IFdENzAwMF9RLAogCS50aGlzX2lkCQk9IDcsCiAJLnNnX3RhYmxlc2l6ZQkJPSBXRDcwMDBfU0csCi0JLmNtZF9wZXJfbHVuCQk9IDEsCiAJLnVuY2hlY2tlZF9pc2FfZG1hCT0gMSwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkNzE5eC5jIGIvZHJpdmVycy9zY3NpL3dkNzE5eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDI2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvd2Q3MTl4LmMKQEAgLTAsMCArMSw5OTYgQEAKKy8qCisgKiBEcml2ZXIgZm9yIFdlc3Rlcm4gRGlnaXRhbCBXRDcxOTMsIFdENzE5NyBhbmQgV0Q3Mjk2IFNDU0kgY2FyZHMKKyAqIENvcHlyaWdodCAyMDEzIE9uZHJlaiBaYXJ5CisgKgorICogT3JpZ2luYWwgZHJpdmVyIGJ5CisgKiBBYXJvbiBEZXdlbGwgPGRld2VsbEB3b29kcy5uZXQ+CisgKiBHYWVydGkgPEp1ZXJnZW4uR2FlcnRuZXJAbWJveC5zaS51bmktaGFubm92ZXIuZGU+CisgKgorICogSFcgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgaW4gYm9vazoKKyAqCisgKiBTUElERVIgQ29tbWFuZCBQcm90b2NvbAorICogYnkgQ2hhbmRydSBNLiBTaXBweQorICogU0NTSSBTdG9yYWdlIFByb2R1Y3RzIChNQ1ApCisgKiBXZXN0ZXJuIERpZ2l0YWwgQ29ycG9yYXRpb24KKyAqIDA5LTE1LTk1CisgKgorICogaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAwNzA3MTcxNzUyNTQvaHR0cDovL3N1bjEucnJ6bi51bmktaGFubm92ZXIuZGUvZ2FlcnRuZXIuanVlcmdlbi93ZDcxOXgvTGludXgvRG9jdS9TcGlkZXIvCisgKi8KKworLyoKKyAqIERyaXZlciB3b3JrZmxvdzoKKyAqIDEuIFNDU0kgY29tbWFuZCBpcyB0cmFuc2Zvcm1lZCB0byBTQ0IgKFNwaWRlciBDb250cm9sIEJsb2NrKSBieSB0aGUKKyAqICAgIHF1ZXVlY29tbWFuZCBmdW5jdGlvbi4KKyAqIDIuIFRoZSBhZGRyZXNzIG9mIHRoZSBTQ0IgaXMgc3RvcmVkIGluIGEgbGlzdCB0byBiZSBhYmxlIHRvIGFjY2VzcyBpdCwgaWYKKyAqICAgIHNvbWV0aGluZyBnb2VzIHdyb25nLgorICogMy4gVGhlIGFkZHJlc3Mgb2YgdGhlIFNDQiBpcyB3cml0dGVuIHRvIHRoZSBDb250cm9sbGVyLCB3aGljaCBsb2FkcyB0aGUgU0NCCisgKiAgICB2aWEgQk0tRE1BIGFuZCBwcm9jZXNzZXMgaXQuCisgKiA0LiBBZnRlciBpdCBoYXMgZmluaXNoZWQsIGl0IGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQsIGFuZCBzZXRzIHJlZ2lzdGVycy4KKyAqCisgKiBmbGF3czoKKyAqICAtIGFib3J0L3Jlc2V0IGZ1bmN0aW9ucworICoKKyAqIFRvRG86CisgKiAgLSB0YWdnZWQgcXVldWVpbmcKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2VlcHJvbV85M2N4Ni5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSAid2Q3MTl4LmgiCisKKy8qIGxvdy1sZXZlbCByZWdpc3RlciBhY2Nlc3MgKi8KK3N0YXRpYyBpbmxpbmUgdTggd2Q3MTl4X3JlYWRiKHN0cnVjdCB3ZDcxOXggKndkLCB1OCByZWcpCit7CisJcmV0dXJuIGlvcmVhZDgod2QtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB3ZDcxOXhfcmVhZGwoc3RydWN0IHdkNzE5eCAqd2QsIHU4IHJlZykKK3sKKwlyZXR1cm4gaW9yZWFkMzIod2QtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2Q3MTl4X3dyaXRlYihzdHJ1Y3Qgd2Q3MTl4ICp3ZCwgdTggcmVnLCB1OCB2YWwpCit7CisJaW93cml0ZTgodmFsLCB3ZC0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3ZDcxOXhfd3JpdGV3KHN0cnVjdCB3ZDcxOXggKndkLCB1OCByZWcsIHUxNiB2YWwpCit7CisJaW93cml0ZTE2KHZhbCwgd2QtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2Q3MTl4X3dyaXRlbChzdHJ1Y3Qgd2Q3MTl4ICp3ZCwgdTggcmVnLCB1MzIgdmFsKQoreworCWlvd3JpdGUzMih2YWwsIHdkLT5iYXNlICsgcmVnKTsKK30KKworLyogd2FpdCB1bnRpbCB0aGUgY29tbWFuZCByZWdpc3RlciBpcyByZWFkeSAqLworc3RhdGljIGlubGluZSBpbnQgd2Q3MTl4X3dhaXRfcmVhZHkoc3RydWN0IHdkNzE5eCAqd2QpCit7CisJaW50IGkgPSAwOworCisJZG8geworCQlpZiAod2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfQU1SX0NPTU1BTkQpID09IFdENzE5WF9DTURfUkVBRFkpCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKGkrKyA8IFdENzE5WF9XQUlUX0ZPUl9DTURfUkVBRFkpOworCisJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgImNvbW1hbmQgcmVnaXN0ZXIgaXMgbm90IHJlYWR5OiAweCUwMnhcbiIsCisJCXdkNzE5eF9yZWFkYih3ZCwgV0Q3MTlYX0FNUl9DT01NQU5EKSk7CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworLyogcG9sbCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHVudGlsIGNvbW1hbmQgZmluaXNoZXMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdkNzE5eF93YWl0X2RvbmUoc3RydWN0IHdkNzE5eCAqd2QsIGludCB0aW1lb3V0KQoreworCXU4IHN0YXR1czsKKworCXdoaWxlICh0aW1lb3V0ID4gMCkgeworCQlzdGF0dXMgPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9BTVJfSU5UX1NUQVRVUyk7CisJCWlmIChzdGF0dXMpCisJCQlicmVhazsKKwkJdGltZW91dC0tOworCQl1ZGVsYXkoMSk7CisJfQorCisJaWYgKHRpbWVvdXQgPD0gMCkgeworCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAiZGlyZWN0IGNvbW1hbmQgdGltZWQgb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJaWYgKHN0YXR1cyAhPSBXRDcxOVhfSU5UX05PRVJST1JTKSB7CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJkaXJlY3QgY29tbWFuZCBmYWlsZWQsIHN0YXR1cyAweCUwMngsIFNVRSAweCUwMnhcbiIsCisJCQlzdGF0dXMsIHdkNzE5eF9yZWFkYih3ZCwgV0Q3MTlYX0FNUl9TQ0JfRVJST1IpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2RpcmVjdF9jbWQoc3RydWN0IHdkNzE5eCAqd2QsIHU4IG9wY29kZSwgdTggZGV2LCB1OCBsdW4sCisJCQkgICAgIHU4IHRhZywgZG1hX2FkZHJfdCBkYXRhLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKGFsbG93IGNvbW1hbmQgcmVnaXN0ZXIgdG8gY2xlYXIpICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9JTlRfU1RBVFVTLCBXRDcxOVhfSU5UX05PTkUpOworCisJLyogV2FpdCBmb3IgdGhlIENvbW1hbmQgcmVnaXN0ZXIgdG8gYmVjb21lIGZyZWUgKi8KKwlpZiAod2Q3MTl4X3dhaXRfcmVhZHkod2QpKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCS8qIG1ha2Ugc3VyZSB3ZSBnZXQgTk8gaW50ZXJydXB0cyAqLworCWRldiB8PSBXRDcxOVhfRElTQUJMRV9JTlQ7CisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9DTURfUEFSQU0sIGRldik7CisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9DTURfUEFSQU1fMiwgbHVuKTsKKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0NNRF9QQVJBTV8zLCB0YWcpOworCWlmIChkYXRhKQorCQl3ZDcxOXhfd3JpdGVsKHdkLCBXRDcxOVhfQU1SX1NDQl9JTiwgZGF0YSk7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGFnYWluICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9JTlRfU1RBVFVTLCBXRDcxOVhfSU5UX05PTkUpOworCisJLyogTm93LCB3cml0ZSB0aGUgY29tbWFuZCAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfQ09NTUFORCwgb3Bjb2RlKTsKKworCWlmICh0aW1lb3V0KQkvKiB3YWl0IGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZSAqLworCQlyZXQgPSB3ZDcxOXhfd2FpdF9kb25lKHdkLCB0aW1lb3V0KTsKKworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKGNsZWFuIHVwKSAqLworCWlmIChvcGNvZGUgIT0gV0Q3MTlYX0NNRF9SRUFEX0ZJUk1WRVIpCisJCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfSU5UX1NUQVRVUywgV0Q3MTlYX0lOVF9OT05FKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdkNzE5eF9kZXN0cm95KHN0cnVjdCB3ZDcxOXggKndkKQoreworCXN0cnVjdCB3ZDcxOXhfc2NiICpzY2I7CisKKwkvKiBzdG9wIHRoZSBSSVNDICovCisJaWYgKHdkNzE5eF9kaXJlY3RfY21kKHdkLCBXRDcxOVhfQ01EX1NMRUVQLCAwLCAwLCAwLCAwLAorCQkJICAgICAgV0Q3MTlYX1dBSVRfRk9SX1JJU0MpKQorCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgIlJJU0Mgc2xlZXAgY29tbWFuZCBmYWlsZWRcbiIpOworCS8qIGRpc2FibGUgUklTQyAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9QQ0lfTU9ERV9TRUxFQ1QsIDApOworCisJLyogZnJlZSBhbGwgU0NCcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NiLCAmd2QtPmFjdGl2ZV9zY2JzLCBsaXN0KQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHdkLT5wZGV2LCBzaXplb2Yoc3RydWN0IHdkNzE5eF9zY2IpLCBzY2IsCisJCQkJICAgIHNjYi0+cGh5cyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzY2IsICZ3ZC0+ZnJlZV9zY2JzLCBsaXN0KQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHdkLT5wZGV2LCBzaXplb2Yoc3RydWN0IHdkNzE5eF9zY2IpLCBzY2IsCisJCQkJICAgIHNjYi0+cGh5cyk7CisJLyogZnJlZSBpbnRlcm5hbCBidWZmZXJzICovCisJcGNpX2ZyZWVfY29uc2lzdGVudCh3ZC0+cGRldiwgd2QtPmZ3X3NpemUsIHdkLT5md192aXJ0LCB3ZC0+ZndfcGh5cyk7CisJd2QtPmZ3X3ZpcnQgPSBOVUxMOworCXBjaV9mcmVlX2NvbnNpc3RlbnQod2QtPnBkZXYsIFdENzE5WF9IQVNIX1RBQkxFX1NJWkUsIHdkLT5oYXNoX3ZpcnQsCisJCQkgICAgd2QtPmhhc2hfcGh5cyk7CisJd2QtPmhhc2hfdmlydCA9IE5VTEw7CisJcGNpX2ZyZWVfY29uc2lzdGVudCh3ZC0+cGRldiwgc2l6ZW9mKHN0cnVjdCB3ZDcxOXhfaG9zdF9wYXJhbSksCisJCQkgICAgd2QtPnBhcmFtcywgd2QtPnBhcmFtc19waHlzKTsKKwl3ZC0+cGFyYW1zID0gTlVMTDsKKwlmcmVlX2lycSh3ZC0+cGRldi0+aXJxLCB3ZCk7Cit9CisKKy8qIGZpbmlzaCBhIFNDU0kgY29tbWFuZCwgbWFyayBTQ0IgKGlmIGFueSkgYXMgZnJlZSwgdW5tYXAgYnVmZmVycyAqLworc3RhdGljIHZvaWQgd2Q3MTl4X2ZpbmlzaF9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBpbnQgcmVzdWx0KQoreworCXN0cnVjdCB3ZDcxOXggKndkID0gc2hvc3RfcHJpdihjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IHdkNzE5eF9zY2IgKnNjYiA9IChzdHJ1Y3Qgd2Q3MTl4X3NjYiAqKSBjbWQtPmhvc3Rfc2NyaWJibGU7CisKKwlpZiAoc2NiKSB7CisJCWxpc3RfbW92ZSgmc2NiLT5saXN0LCAmd2QtPmZyZWVfc2Nicyk7CisJCWRtYV91bm1hcF9zaW5nbGUoJndkLT5wZGV2LT5kZXYsIGNtZC0+U0NwLmRtYV9oYW5kbGUsCisJCQkJIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJc2NzaV9kbWFfdW5tYXAoY21kKTsKKwl9CisJY21kLT5yZXN1bHQgPSByZXN1bHQgPDwgMTY7CisJY21kLT5zY3NpX2RvbmUoY21kKTsKK30KKworLyogQnVpbGQgYSBTQ0IgYW5kIHNlbmQgaXQgdG8gdGhlIGNhcmQgKi8KK3N0YXRpYyBpbnQgd2Q3MTl4X3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCwgc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCWludCBpLCBjb3VudF9zZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB3ZDcxOXhfc2NiICpzY2I7CisJc3RydWN0IHdkNzE5eCAqd2QgPSBzaG9zdF9wcml2KHNoKTsKKwlkbWFfYWRkcl90IHBoeXM7CisKKwljbWQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOworCisJLyogZ2V0IGEgZnJlZSBTQ0IgLSBlaXRoZXIgZnJvbSBleGlzdGluZyBvbmVzIG9yIGFsbG9jYXRlIGEgbmV3IG9uZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJc2NiID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZ3ZC0+ZnJlZV9zY2JzLCBzdHJ1Y3Qgd2Q3MTl4X3NjYiwgbGlzdCk7CisJaWYgKHNjYikgeworCQlsaXN0X2RlbCgmc2NiLT5saXN0KTsKKwkJcGh5cyA9IHNjYi0+cGh5czsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXNjYiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHdkLT5wZGV2LCBzaXplb2Yoc3RydWN0IHdkNzE5eF9zY2IpLAorCQkJCQkgICAmcGh5cyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWlmICghc2NiKSB7CisJCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIFNDQlxuIik7CisJCQl3ZDcxOXhfZmluaXNoX2NtZChjbWQsIERJRF9FUlJPUik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwltZW1zZXQoc2NiLCAwLCBzaXplb2Yoc3RydWN0IHdkNzE5eF9zY2IpKTsKKwlsaXN0X2FkZCgmc2NiLT5saXN0LCAmd2QtPmFjdGl2ZV9zY2JzKTsKKworCXNjYi0+cGh5cyA9IHBoeXM7CisJc2NiLT5jbWQgPSBjbWQ7CisJY21kLT5ob3N0X3NjcmliYmxlID0gKGNoYXIgKikgc2NiOworCisJc2NiLT5DREJfdGFnID0gMDsJLyogVGFnZ2VkIHF1ZXVlaW5nIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJc2NiLT5kZXZpZCA9IGNtZC0+ZGV2aWNlLT5pZDsKKwlzY2ItPmx1biA9IGNtZC0+ZGV2aWNlLT5sdW47CisKKwkvKiBjb3B5IHRoZSBjb21tYW5kICovCisJbWVtY3B5KHNjYi0+Q0RCLCBjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbik7CisKKwkvKiBtYXAgc2Vuc2UgYnVmZmVyICovCisJc2NiLT5zZW5zZV9idWZfbGVuZ3RoID0gU0NTSV9TRU5TRV9CVUZGRVJTSVpFOworCWNtZC0+U0NwLmRtYV9oYW5kbGUgPSBkbWFfbWFwX3NpbmdsZSgmd2QtPnBkZXYtPmRldiwgY21kLT5zZW5zZV9idWZmZXIsCisJCQlTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJc2NiLT5zZW5zZV9idWYgPSBjcHVfdG9fbGUzMihjbWQtPlNDcC5kbWFfaGFuZGxlKTsKKworCS8qIHJlcXVlc3QgYXV0b3NlbnNlICovCisJc2NiLT5TQ0Jfb3B0aW9ucyB8PSBXRDcxOVhfU0NCX0ZMQUdTX0FVVE9fUkVRVUVTVF9TRU5TRTsKKworCS8qIGNoZWNrIGRpcmVjdGlvbiAqLworCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCXNjYi0+U0NCX29wdGlvbnMgfD0gV0Q3MTlYX1NDQl9GTEFHU19DSEVDS19ESVJFQ1RJT04KKwkJCQkgfCAgV0Q3MTlYX1NDQl9GTEFHU19QQ0lfVE9fU0NTSTsKKwllbHNlIGlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKKwkJc2NiLT5TQ0Jfb3B0aW9ucyB8PSBXRDcxOVhfU0NCX0ZMQUdTX0NIRUNLX0RJUkVDVElPTjsKKworCS8qIFNjYXRoZXIvZ2F0aGVyICovCisJY291bnRfc2cgPSBzY3NpX2RtYV9tYXAoY21kKTsKKwlpZiAoY291bnRfc2cgPCAwKSB7CisJCXdkNzE5eF9maW5pc2hfY21kKGNtZCwgRElEX0VSUk9SKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJQlVHX09OKGNvdW50X3NnID4gV0Q3MTlYX1NHKTsKKworCWlmIChjb3VudF9zZykgeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCisJCXNjYi0+ZGF0YV9sZW5ndGggPSBjcHVfdG9fbGUzMihjb3VudF9zZyAqCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHdkNzE5eF9zZ2xpc3QpKTsKKwkJc2NiLT5kYXRhX3AgPSBjcHVfdG9fbGUzMihzY2ItPnBoeXMgKworCQkJCQkgIG9mZnNldG9mKHN0cnVjdCB3ZDcxOXhfc2NiLCBzZ19saXN0KSk7CisKKwkJc2NzaV9mb3JfZWFjaF9zZyhjbWQsIHNnLCBjb3VudF9zZywgaSkgeworCQkJc2NiLT5zZ19saXN0W2ldLnB0ciA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCQlzY2ItPnNnX2xpc3RbaV0ubGVuZ3RoID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOworCQl9CisJCXNjYi0+U0NCX29wdGlvbnMgfD0gV0Q3MTlYX1NDQl9GTEFHU19ET19TQ0FUVEVSX0dBVEhFUjsKKwl9IGVsc2UgeyAvKiB6ZXJvIGxlbmd0aCAqLworCQlzY2ItPmRhdGFfbGVuZ3RoID0gMDsKKwkJc2NiLT5kYXRhX3AgPSAwOworCX0KKworCS8qIGNoZWNrIGlmIHRoZSBDb21tYW5kIHJlZ2lzdGVyIGlzIGZyZWUgKi8KKwlpZiAod2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfQU1SX0NPTU1BTkQpICE9IFdENzE5WF9DTURfUkVBRFkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwkvKiB3cml0ZSBwb2ludGVyIHRvIHRoZSBBTVIgKi8KKwl3ZDcxOXhfd3JpdGVsKHdkLCBXRDcxOVhfQU1SX1NDQl9JTiwgc2NiLT5waHlzKTsKKwkvKiBzZW5kIFNDQiBvcGNvZGUgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0NPTU1BTkQsIFdENzE5WF9DTURfUFJPQ0VTU19TQ0IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2NoaXBfaW5pdChzdHJ1Y3Qgd2Q3MTl4ICp3ZCkKK3sKKwlpbnQgaSwgcmV0OworCXUzMiByaXNjX2luaXRbM107CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd193Y3MsICpmd19yaXNjOworCWNvbnN0IGNoYXIgZnduYW1lX3djc1tdID0gIndkNzE5eC13Y3MuYmluIjsKKwljb25zdCBjaGFyIGZ3bmFtZV9yaXNjW10gPSAid2Q3MTl4LXJpc2MuYmluIjsKKworCW1lbXNldCh3ZC0+aGFzaF92aXJ0LCAwLCBXRDcxOVhfSEFTSF9UQUJMRV9TSVpFKTsKKworCS8qIFdDUyAoc2VxdWVuY2VyKSBmaXJtd2FyZSAqLworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X3djcywgZnduYW1lX3djcywgJndkLT5wZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgIlVuYWJsZSB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxuIiwKKwkJCWZ3bmFtZV93Y3MsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFJJU0MgZmlybXdhcmUgKi8KKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19yaXNjLCBmd25hbWVfcmlzYywgJndkLT5wZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgIlVuYWJsZSB0byBsb2FkIGZpcm13YXJlICVzOiAlZFxuIiwKKwkJCWZ3bmFtZV9yaXNjLCByZXQpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X3djcyk7CisJCXJldHVybiByZXQ7CisJfQorCXdkLT5md19zaXplID0gQUxJR04oZndfd2NzLT5zaXplLCA0KSArIGZ3X3Jpc2MtPnNpemU7CisKKwlpZiAoIXdkLT5md192aXJ0KQorCQl3ZC0+ZndfdmlydCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHdkLT5wZGV2LCB3ZC0+Zndfc2l6ZSwKKwkJCQkJCSAgICZ3ZC0+ZndfcGh5cyk7CisJaWYgKCF3ZC0+ZndfdmlydCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisKKwkvKiBtYWtlIGEgZnJlc2ggY29weSBvZiBXQ1MgYW5kIFJJU0MgY29kZSAqLworCW1lbWNweSh3ZC0+ZndfdmlydCwgZndfd2NzLT5kYXRhLCBmd193Y3MtPnNpemUpOworCW1lbWNweSh3ZC0+ZndfdmlydCArIEFMSUdOKGZ3X3djcy0+c2l6ZSwgNCksIGZ3X3Jpc2MtPmRhdGEsCisJCWZ3X3Jpc2MtPnNpemUpOworCisJLyogUmVzZXQgdGhlIFNwaWRlciBDaGlwIGFuZCBhZGFwdGVyIGl0c2VsZiAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9QQ0lfUE9SVF9SRVNFVCwgV0Q3MTlYX1BDSV9SRVNFVCk7CisJdWRlbGF5KFdENzE5WF9XQUlUX0ZPUl9SSVNDKTsKKwkvKiBDbGVhciBQSU8gbW9kZSBiaXRzIHNldCBieSBCSU9TICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX0FNUl9DTURfUEFSQU0sIDApOworCS8qIGVuc3VyZSBSSVNDIGlzIG5vdCBydW5uaW5nICovCisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX1BDSV9NT0RFX1NFTEVDVCwgMCk7CisJLyogZW5zdXJlIGNvbW1hbmQgcG9ydCBpcyByZWFkeSAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfQ09NTUFORCwgMCk7CisJaWYgKHdkNzE5eF93YWl0X3JlYWR5KHdkKSkgeworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisKKwkvKiBUcmFuc2ZlciB0aGUgZmlyc3QgMksgd29yZHMgb2YgUklTQyBjb2RlIHRvIGtpY2sgc3RhcnQgdGhlIHVQICovCisJcmlzY19pbml0WzBdID0gd2QtPmZ3X3BoeXM7CQkJCS8qIFdDUyBGVyAqLworCXJpc2NfaW5pdFsxXSA9IHdkLT5md19waHlzICsgQUxJR04oZndfd2NzLT5zaXplLCA0KTsJLyogUklTQyBGVyAqLworCXJpc2NfaW5pdFsyXSA9IHdkLT5oYXNoX3BoeXM7CQkJCS8qIGhhc2ggdGFibGUgKi8KKworCS8qIGNsZWFyIERNQSBzdGF0dXMgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX0NIQU5ORUwyXzNTVEFUVVMsIDApOworCisJLyogYWRkcmVzcyB0byByZWFkIGZpcm13YXJlIGZyb20gKi8KKwl3ZDcxOXhfd3JpdGVsKHdkLCBXRDcxOVhfUENJX0VYVEVSTkFMX0FERFIsIHJpc2NfaW5pdFsxXSk7CisJLyogYmFzZSBhZGRyZXNzIHRvIHdyaXRlIGZpcm13YXJlIHRvIChvbiBjYXJkKSAqLworCXdkNzE5eF93cml0ZXcod2QsIFdENzE5WF9QQ0lfSU5URVJOQUxfQUREUiwgV0Q3MTlYX1BSQU1fQkFTRV9BRERSKTsKKwkvKiBzaXplOiBmaXJzdCAySyB3b3JkcyAqLworCXdkNzE5eF93cml0ZXcod2QsIFdENzE5WF9QQ0lfRE1BX1RSQU5TRkVSX1NJWkUsIDIwNDggKiAyKTsKKwkvKiBzdGFydCBETUEgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX0NIQU5ORUwyXzNDTUQsIFdENzE5WF9TVEFSVF9DSEFOTkVMMl8zRE1BKTsKKworCS8qIHdhaXQgZm9yIERNQSB0byBjb21wbGV0ZSAqLworCWkgPSBXRDcxOVhfV0FJVF9GT1JfUklTQzsKKwl3aGlsZSAoaS0tID4gMCkgeworCQl1OCBzdGF0dXMgPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9QQ0lfQ0hBTk5FTDJfM1NUQVRVUyk7CisJCWlmIChzdGF0dXMgPT0gV0Q3MTlYX1NUQVJUX0NIQU5ORUwyXzNET05FKQorCQkJYnJlYWs7CisJCWlmIChzdGF0dXMgPT0gV0Q3MTlYX1NUQVJUX0NIQU5ORUwyXzNBQk9SVCkgeworCQkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJSSVNDIGJvb3RzdHJhcCBmYWlsZWQ6IERNQSBhYm9ydGVkXG4iKTsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQorCWlmIChpIDwgMSkgeworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgIlJJU0MgYm9vdHN0cmFwIGZhaWxlZDogRE1BIHRpbWVvdXRcbiIpOworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisKKwkvKiBmaXJtd2FyZSBpcyBsb2FkZWQsIG5vdyBpbml0aWFsaXplIGFuZCB3YWtlIHVwIHRoZSBSSVNDICovCisJLyogd3JpdGUgUklTQyBpbml0aWFsaXphdGlvbiBsb25nIHdvcmRzIHRvIFNwaWRlciAqLworCXdkNzE5eF93cml0ZWwod2QsIFdENzE5WF9BTVJfU0NCX0lOLCByaXNjX2luaXRbMF0pOworCXdkNzE5eF93cml0ZWwod2QsIFdENzE5WF9BTVJfU0NCX0lOICsgNCwgcmlzY19pbml0WzFdKTsKKwl3ZDcxOXhfd3JpdGVsKHdkLCBXRDcxOVhfQU1SX1NDQl9JTiArIDgsIHJpc2NfaW5pdFsyXSk7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIFJJU0MgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0NNRF9QQVJBTSwgV0Q3MTlYX0RJU0FCTEVfSU5UKTsKKworCS8qIGlzc3VlIElOSVRJQUxJWkUgUklTQyBjb21hbmQgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0NPTU1BTkQsIFdENzE5WF9DTURfSU5JVF9SSVNDKTsKKwkvKiBlbmFibGUgYWR2YW5jZWQgbW9kZSAod2FrZSB1cCBSSVNDKSAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9QQ0lfTU9ERV9TRUxFQ1QsIFdENzE5WF9FTkFCTEVfQURWQU5DRV9NT0RFKTsKKwl1ZGVsYXkoV0Q3MTlYX1dBSVRfRk9SX1JJU0MpOworCisJcmV0ID0gd2Q3MTl4X3dhaXRfZG9uZSh3ZCwgV0Q3MTlYX1dBSVRfRk9SX1JJU0MpOworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0lOVF9TVEFUVVMsIFdENzE5WF9JTlRfTk9ORSk7CisJaWYgKHJldCkgeworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFJJU0NcbiIpOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisJLyogUklTQyBpcyB1cCBhbmQgcnVubmluZyAqLworCisJLyogUmVhZCBGVyB2ZXJzaW9uIGZyb20gUklTQyAqLworCXJldCA9IHdkNzE5eF9kaXJlY3RfY21kKHdkLCBXRDcxOVhfQ01EX1JFQURfRklSTVZFUiwgMCwgMCwgMCwgMCwKKwkJCQlXRDcxOVhfV0FJVF9GT1JfUklTQyk7CisJaWYgKHJldCkgeworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgIlVuYWJsZSB0byByZWFkIGZpcm13YXJlIHZlcnNpb25cbiIpOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisJZGV2X2luZm8oJndkLT5wZGV2LT5kZXYsICJSSVNDIGluaXRpYWxpemVkIHdpdGggZmlybXdhcmUgdmVyc2lvbiAlLjJ4LiUuMnhcbiIsCisJCQl3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9BTVJfU0NCX09VVCArIDEpLAorCQkJd2Q3MTl4X3JlYWRiKHdkLCBXRDcxOVhfQU1SX1NDQl9PVVQpKTsKKworCS8qIFJFU0VUIFNDU0kgYnVzICovCisJcmV0ID0gd2Q3MTl4X2RpcmVjdF9jbWQod2QsIFdENzE5WF9DTURfQlVTUkVTRVQsIDAsIDAsIDAsIDAsCisJCQkJV0Q3MTlYX1dBSVRfRk9SX1NDU0lfUkVTRVQpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJTQ1NJIGJ1cyByZXNldCBmYWlsZWRcbiIpOworCQlnb3RvIHdkNzE5eF9pbml0X2VuZDsKKwl9CisKKwkvKiB1c2UgSG9zdFBhcmFtZXRlciBzdHJ1Y3R1cmUgdG8gc2V0IFNwaWRlcidzIEhvc3QgUGFyYW1ldGVyIEJsb2NrICovCisJcmV0ID0gd2Q3MTl4X2RpcmVjdF9jbWQod2QsIFdENzE5WF9DTURfU0VUX1BBUkFNLCAwLAorCQkJCXNpemVvZihzdHJ1Y3Qgd2Q3MTl4X2hvc3RfcGFyYW0pLCAwLAorCQkJCXdkLT5wYXJhbXNfcGh5cywgV0Q3MTlYX1dBSVRfRk9SX1JJU0MpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IEhPU1QgUEFSQU1FVEVSU1xuIik7CisJCWdvdG8gd2Q3MTl4X2luaXRfZW5kOworCX0KKworCS8qIGluaXRpYXRlIFNDQU0gKGRvZXMgbm90aGluZyBpZiBkaXNhYmxlZCBpbiBCSU9TKSAqLworCS8qIGJ1Zz86IHdlIHNob3VsZCBwYXNzIGEgbWFzayBvZiBzdGF0aWMgSURzIHdoaWNoIHdlIGRvbid0IGhhdmUgKi8KKwlyZXQgPSB3ZDcxOXhfZGlyZWN0X2NtZCh3ZCwgV0Q3MTlYX0NNRF9JTklUX1NDQU0sIDAsIDAsIDAsIDAsCisJCQkJV0Q3MTlYX1dBSVRfRk9SX1NDU0lfUkVTRVQpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJTQ0FNIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gd2Q3MTl4X2luaXRfZW5kOworCX0KKworCS8qIGNsZWFyIEFNUl9CSU9TX1NIQVJFX0lOVCByZWdpc3RlciAqLworCXdkNzE5eF93cml0ZWIod2QsIFdENzE5WF9BTVJfQklPU19TSEFSRV9JTlQsIDApOworCit3ZDcxOXhfaW5pdF9lbmQ6CisJcmVsZWFzZV9maXJtd2FyZShmd193Y3MpOworCXJlbGVhc2VfZmlybXdhcmUoZndfcmlzYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdkNzE5eF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJaW50IGFjdGlvbiwgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHdkNzE5eF9zY2IgKnNjYiA9IChzdHJ1Y3Qgd2Q3MTl4X3NjYiAqKWNtZC0+aG9zdF9zY3JpYmJsZTsKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IHNob3N0X3ByaXYoY21kLT5kZXZpY2UtPmhvc3QpOworCisJZGV2X2luZm8oJndkLT5wZGV2LT5kZXYsICJhYm9ydCBjb21tYW5kLCB0YWc6ICV4XG4iLCBjbWQtPnRhZyk7CisKKwlhY3Rpb24gPSAvKmNtZC0+dGFnID8gV0Q3MTlYX0NNRF9BQk9SVF9UQUcgOiAqL1dENzE5WF9DTURfQUJPUlQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCXJlc3VsdCA9IHdkNzE5eF9kaXJlY3RfY21kKHdkLCBhY3Rpb24sIGNtZC0+ZGV2aWNlLT5pZCwKKwkJCQkgICBjbWQtPmRldmljZS0+bHVuLCBjbWQtPnRhZywgc2NiLT5waHlzLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIEZBSUxFRDsKKworCXJldHVybiBTVUNDRVNTOworfQorCitzdGF0aWMgaW50IHdkNzE5eF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHU4IG9wY29kZSwgdTggZGV2aWNlKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IHNob3N0X3ByaXYoY21kLT5kZXZpY2UtPmhvc3QpOworCisJZGV2X2luZm8oJndkLT5wZGV2LT5kZXYsICIlcyByZXNldCByZXF1ZXN0ZWRcbiIsCisJCSAob3Bjb2RlID09IFdENzE5WF9DTURfQlVTUkVTRVQpID8gImJ1cyIgOiAiZGV2aWNlIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCXJlc3VsdCA9IHdkNzE5eF9kaXJlY3RfY21kKHdkLCBvcGNvZGUsIGRldmljZSwgMCwgMCwgMCwKKwkJCQkgICBXRDcxOVhfV0FJVF9GT1JfU0NTSV9SRVNFVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCWlmIChyZXN1bHQpCisJCXJldHVybiBGQUlMRUQ7CisKKwlyZXR1cm4gU1VDQ0VTUzsKK30KKworc3RhdGljIGludCB3ZDcxOXhfZGV2X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlyZXR1cm4gd2Q3MTl4X3Jlc2V0KGNtZCwgV0Q3MTlYX0NNRF9SRVNFVCwgY21kLT5kZXZpY2UtPmlkKTsKK30KKworc3RhdGljIGludCB3ZDcxOXhfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlyZXR1cm4gd2Q3MTl4X3Jlc2V0KGNtZCwgV0Q3MTlYX0NNRF9CVVNSRVNFVCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCXN0cnVjdCB3ZDcxOXggKndkID0gc2hvc3RfcHJpdihjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IHdkNzE5eF9zY2IgKnNjYiwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQ7CisKKwlkZXZfaW5mbygmd2QtPnBkZXYtPmRldiwgImhvc3QgcmVzZXQgcmVxdWVzdGVkXG4iKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCS8qIFRyeSB0byByZWluaXQgdGhlIFJJU0MgKi8KKwlpZiAod2Q3MTl4X2NoaXBfaW5pdCh3ZCkgPT0gMCkKKwkJcmVzdWx0ID0gU1VDQ0VTUzsKKwllbHNlCisJCXJlc3VsdCA9IEZBSUxFRDsKKworCS8qIGZsdXNoIGFsbCBTQ0JzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjYiwgdG1wLCAmd2QtPmFjdGl2ZV9zY2JzLCBsaXN0KSB7CisJCXN0cnVjdCBzY3NpX2NtbmQgKnRtcF9jbWQgPSBzY2ItPmNtZDsKKwkJd2Q3MTl4X2ZpbmlzaF9jbWQodG1wX2NtZCwgcmVzdWx0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3ZDcxOXhfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJCSAgICBzZWN0b3JfdCBjYXBhY2l0eSwgaW50IGdlb21bXSkKK3sKKwlpZiAoY2FwYWNpdHkgPj0gMHgyMDAwMDApIHsKKwkJZ2VvbVswXSA9IDI1NTsJLyogaGVhZHMgKi8KKwkJZ2VvbVsxXSA9IDYzOwkvKiBzZWN0b3JzICovCisJfSBlbHNlIHsKKwkJZ2VvbVswXSA9IDY0OwkvKiBoZWFkcyAqLworCQlnZW9tWzFdID0gMzI7CS8qIHNlY3RvcnMgKi8KKwl9CisJZ2VvbVsyXSA9IHNlY3Rvcl9kaXYoY2FwYWNpdHksIGdlb21bMF0gKiBnZW9tWzFdKTsJLyogY3lsaW5kZXJzICovCisKKwlyZXR1cm4gMDsKK30KKworLyogcHJvY2VzcyBhIFNDQi1jb21wbGV0aW9uIGludGVycnVwdCAqLworc3RhdGljIGlubGluZSB2b2lkIHdkNzE5eF9pbnRlcnJ1cHRfU0NCKHN0cnVjdCB3ZDcxOXggKndkLAorCQkJCQl1bmlvbiB3ZDcxOXhfcmVncyByZWdzLAorCQkJCQlzdHJ1Y3Qgd2Q3MTl4X3NjYiAqc2NiKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKKwlpbnQgcmVzdWx0OworCisJLyogbm93IGhhdmUgdG8gZmluZCByZXN1bHQgZnJvbSBjYXJkICovCisJc3dpdGNoIChyZWdzLmJ5dGVzLlNVRSkgeworCWNhc2UgV0Q3MTlYX1NVRV9OT0VSUk9SUzoKKwkJcmVzdWx0ID0gRElEX09LOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfUkVKRUNURUQ6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJjb21tYW5kIHJlamVjdGVkXG4iKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfU0NCUUZVTEw6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJTQ0IgcXVldWUgaXMgZnVsbFxuIik7CisJCXJlc3VsdCA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX1RFUk06CisJCWRldl9kYmcoJndkLT5wZGV2LT5kZXYsICJTQ0IgdGVybWluYXRlZCBieSBkaXJlY3QgY29tbWFuZFxuIik7CisJCXJlc3VsdCA9IERJRF9BQk9SVDsJLyogb3IgRElEX1JFU0VUPyAqLworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfQ0hBTjFBQk9SVDoKKwljYXNlIFdENzE5WF9TVUVfQ0hBTjIzQUJPUlQ6CisJCXJlc3VsdCA9IERJRF9BQk9SVDsKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgIkRNQSBhYm9ydFxuIik7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9DSEFOMVBBUjoKKwljYXNlIFdENzE5WF9TVUVfQ0hBTjIzUEFSOgorCQlyZXN1bHQgPSBESURfUEFSSVRZOworCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAiRE1BIHBhcml0eSBlcnJvclxuIik7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9USU1FT1VUOgorCQlyZXN1bHQgPSBESURfVElNRV9PVVQ7CisJCWRldl9kYmcoJndkLT5wZGV2LT5kZXYsICJzZWxlY3Rpb24gdGltZW91dFxuIik7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9SRVNFVDoKKwkJZGV2X2RiZygmd2QtPnBkZXYtPmRldiwgImJ1cyByZXNldCBvY2N1cmVkXG4iKTsKKwkJcmVzdWx0ID0gRElEX1JFU0VUOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfQlVTRVJST1I6CisJCWRldl9kYmcoJndkLT5wZGV2LT5kZXYsICJTQ1NJIGJ1cyBlcnJvclxuIik7CisJCXJlc3VsdCA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX1dST05HV0FZOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAid3JvbmcgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb25cbiIpOworCQlyZXN1bHQgPSBESURfRVJST1I7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9CQURQSEFTRToKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgImludmFsaWQgU0NTSSBwaGFzZVxuIik7CisJCXJlc3VsdCA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX1RPT0xPTkc6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJyZWNvcmQgdG9vIGxvbmdcbiIpOworCQlyZXN1bHQgPSBESURfRVJST1I7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9CVVNGUkVFOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAidW5leHBlY3RlZCBidXMgZnJlZVxuIik7CisJCXJlc3VsdCA9IERJRF9OT19DT05ORUNUOyAvKiBvciBESURfRVJST1IgPz8/Ki8KKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfU1VFX0FSU0RPTkU6CisJCWRldl9kYmcoJndkLT5wZGV2LT5kZXYsICJhdXRvIHJlcXVlc3Qgc2Vuc2VcbiIpOworCQlpZiAocmVncy5ieXRlcy5TQ1NJID09IDApCisJCQlyZXN1bHQgPSBESURfT0s7CisJCWVsc2UKKwkJCXJlc3VsdCA9IERJRF9QQVJJVFk7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9JR05PUkVEOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAidGFyZ2V0IGlkICVkIGlnbm9yZWQgY29tbWFuZFxuIiwKKwkJCXNjYi0+Y21kLT5kZXZpY2UtPmlkKTsKKwkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1Q7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX1NVRV9XUk9OR1RBR1M6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJyZXZlcnNlZCB0YWdzXG4iKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfQkFEVEFHUzoKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgInRhZyB0eXBlIG5vdCBzdXBwb3J0ZWQgYnkgdGFyZ2V0XG4iKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwljYXNlIFdENzE5WF9TVUVfTk9TQ0FNSUQ6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJubyBTQ0FNIHNvZnQgSUQgYXZhaWxhYmxlXG4iKTsKKwkJcmVzdWx0ID0gRElEX0VSUk9SOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgInVua25vd24gU1VFIGVycm9yIGNvZGU6IDB4JXhcbiIsCisJCQkgcmVncy5ieXRlcy5TVUUpOworCQlyZXN1bHQgPSBESURfRVJST1I7CisJCWJyZWFrOworCX0KKwljbWQgPSBzY2ItPmNtZDsKKworCXdkNzE5eF9maW5pc2hfY21kKGNtZCwgcmVzdWx0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHdkNzE5eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB3ZDcxOXggKndkID0gZGV2X2lkOworCXVuaW9uIHdkNzE5eF9yZWdzIHJlZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgU0NCX291dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKHdkLT5zaC0+aG9zdF9sb2NrLCBmbGFncyk7CisJLyogcmVhZCBTQ0IgcG9pbnRlciBiYWNrIGZyb20gY2FyZCAqLworCVNDQl9vdXQgPSB3ZDcxOXhfcmVhZGwod2QsIFdENzE5WF9BTVJfU0NCX09VVCk7CisJLyogcmVhZCBhbGwgc3RhdHVzIGluZm8gYXQgb25jZSAqLworCXJlZ3MuYWxsID0gY3B1X3RvX2xlMzIod2Q3MTl4X3JlYWRsKHdkLCBXRDcxOVhfQU1SX09QX0NPREUpKTsKKworCXN3aXRjaCAocmVncy5ieXRlcy5JTlQpIHsKKwljYXNlIFdENzE5WF9JTlRfTk9ORToKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJY2FzZSBXRDcxOVhfSU5UX0xJTktOT1NUQVRVUzoKKwkJZGV2X2Vycigmd2QtPnBkZXYtPmRldiwgImxpbmtlZCBjb21tYW5kIGNvbXBsZXRlZCB3aXRoIG5vIHN0YXR1c1xuIik7CisJCWJyZWFrOworCWNhc2UgV0Q3MTlYX0lOVF9CQURJTlQ6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJ1bnNvbGljaXRlZCBpbnRlcnJ1cHRcbiIpOworCQlicmVhazsKKwljYXNlIFdENzE5WF9JTlRfTk9FUlJPUlM6CisJY2FzZSBXRDcxOVhfSU5UX0xJTktOT0VSUk9SUzoKKwljYXNlIFdENzE5WF9JTlRfRVJST1JTTE9HR0VEOgorCWNhc2UgV0Q3MTlYX0lOVF9TUElERVJGQUlMRUQ6CisJCS8qIHdhcyB0aGUgY21kIGNvbXBsZXRlZCBhIGRpcmVjdCBvciBTQ0IgY29tbWFuZD8gKi8KKwkJaWYgKHJlZ3MuYnl0ZXMuT1BDID09IFdENzE5WF9DTURfUFJPQ0VTU19TQ0IpIHsKKwkJCXN0cnVjdCB3ZDcxOXhfc2NiICpzY2I7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjYiwgJndkLT5hY3RpdmVfc2NicywgbGlzdCkKKwkJCQlpZiAoU0NCX291dCA9PSBzY2ItPnBoeXMpCisJCQkJCWJyZWFrOworCQkJaWYgKFNDQl9vdXQgPT0gc2NiLT5waHlzKQorCQkJCXdkNzE5eF9pbnRlcnJ1cHRfU0NCKHdkLCByZWdzLCBzY2IpOworCQkJZWxzZQorCQkJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJjYXJkIHJldHVybmVkIGludmFsaWQgU0NCIHBvaW50ZXJcbiIpOworCQl9IGVsc2UKKwkJCWRldl93YXJuKCZ3ZC0+cGRldi0+ZGV2LCAiZGlyZWN0IGNvbW1hbmQgMHgleCBjb21wbGV0ZWRcbiIsCisJCQkJIHJlZ3MuYnl0ZXMuT1BDKTsKKwkJYnJlYWs7CisJY2FzZSBXRDcxOVhfSU5UX1BJT1JFQURZOgorCQlkZXZfZXJyKCZ3ZC0+cGRldi0+ZGV2LCAiY2FyZCBpbmRpY2F0ZXMgUElPIGRhdGEgcmVhZHkgYnV0IHdlIG5ldmVyIHVzZSBQSU9cbiIpOworCQkvKiBpbnRlcnJ1cHQgd2lsbCBub3QgYmUgY2xlYXJlZCB1bnRpbCBhbGwgZGF0YSBpcyByZWFkICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJndkLT5wZGV2LT5kZXYsICJ1bmtub3duIGludGVycnVwdCByZWFzb246ICVkXG4iLAorCQkJcmVncy5ieXRlcy5JTlQpOworCisJfQorCS8qIGNsZWFyIGludGVycnVwdCBzbyBhbm90aGVyIGNhbiBoYXBwZW4gKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfQU1SX0lOVF9TVEFUVVMsIFdENzE5WF9JTlRfTk9ORSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh3ZC0+c2gtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCB3ZDcxOXhfZWVwcm9tX3JlZ19yZWFkKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKK3sKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IGVlcHJvbS0+ZGF0YTsKKwl1OCByZWcgPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9QQ0lfR1BJT19EQVRBKTsKKworCWVlcHJvbS0+cmVnX2RhdGFfb3V0ID0gcmVnICYgV0Q3MTlYX0VFX0RPOworfQorCitzdGF0aWMgdm9pZCB3ZDcxOXhfZWVwcm9tX3JlZ193cml0ZShzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCit7CisJc3RydWN0IHdkNzE5eCAqd2QgPSBlZXByb20tPmRhdGE7CisJdTggcmVnID0gMDsKKworCWlmIChlZXByb20tPnJlZ19kYXRhX2luKQorCQlyZWcgfD0gV0Q3MTlYX0VFX0RJOworCWlmIChlZXByb20tPnJlZ19kYXRhX2Nsb2NrKQorCQlyZWcgfD0gV0Q3MTlYX0VFX0NMSzsKKwlpZiAoZWVwcm9tLT5yZWdfY2hpcF9zZWxlY3QpCisJCXJlZyB8PSBXRDcxOVhfRUVfQ1M7CisKKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX0dQSU9fREFUQSwgcmVnKTsKK30KKworLyogcmVhZCBjb25maWcgZnJvbSBFRVBST00gc28gaXQgY2FuIGJlIGRvd25sb2FkZWQgYnkgdGhlIFJJU0Mgb24gKHJlLSlpbml0ICovCitzdGF0aWMgdm9pZCB3ZDcxOXhfcmVhZF9lZXByb20oc3RydWN0IHdkNzE5eCAqd2QpCit7CisJc3RydWN0IGVlcHJvbV85M2N4NiBlZXByb207CisJdTggZ3BpbzsKKwlzdHJ1Y3Qgd2Q3MTl4X2VlcHJvbV9oZWFkZXIgaGVhZGVyOworCisJZWVwcm9tLmRhdGEgPSB3ZDsKKwllZXByb20ucmVnaXN0ZXJfcmVhZCA9IHdkNzE5eF9lZXByb21fcmVnX3JlYWQ7CisJZWVwcm9tLnJlZ2lzdGVyX3dyaXRlID0gd2Q3MTl4X2VlcHJvbV9yZWdfd3JpdGU7CisJZWVwcm9tLndpZHRoID0gUENJX0VFUFJPTV9XSURUSF85M0M0NjsKKworCS8qIHNldCBhbGwgb3V0cHV0cyB0byBsb3cgKi8KKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX0dQSU9fREFUQSwgMCk7CisJLyogY29uZmlndXJlIEdQSU8gcGlucyAqLworCWdwaW8gPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9QQ0lfR1BJT19DT05UUk9MKTsKKwkvKiBHUElPIG91dHB1dHMgKi8KKwlncGlvICY9ICh+KFdENzE5WF9FRV9DTEsgfCBXRDcxOVhfRUVfREkgfCBXRDcxOVhfRUVfQ1MpKTsKKwkvKiBHUElPIGlucHV0ICovCisJZ3BpbyB8PSBXRDcxOVhfRUVfRE87CisJd2Q3MTl4X3dyaXRlYih3ZCwgV0Q3MTlYX1BDSV9HUElPX0NPTlRST0wsIGdwaW8pOworCisJLyogcmVhZCBFRVBST00gaGVhZGVyICovCisJZWVwcm9tXzkzY3g2X211bHRpcmVhZGIoJmVlcHJvbSwgMCwgKHU4ICopJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworCisJaWYgKGhlYWRlci5zaWcxID09ICdXJyAmJiBoZWFkZXIuc2lnMiA9PSAnRCcpCisJCWVlcHJvbV85M2N4Nl9tdWx0aXJlYWRiKCZlZXByb20sIGhlYWRlci5jZmdfb2Zmc2V0LAorCQkJCQkodTggKil3ZC0+cGFyYW1zLAorCQkJCQlzaXplb2Yoc3RydWN0IHdkNzE5eF9ob3N0X3BhcmFtKSk7CisJZWxzZSB7IC8qIGRlZmF1bHQgRUVQUk9NIHZhbHVlcyAqLworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgIkVFUFJPTSBzaWduYXR1cmUgaXMgaW52YWxpZCAoMHglMDJ4IDB4JTAyeCksIHVzaW5nIGRlZmF1bHQgdmFsdWVzXG4iLAorCQkJIGhlYWRlci5zaWcxLCBoZWFkZXIuc2lnMik7CisJCXdkLT5wYXJhbXMtPmNoXzFfdGgJPSAweDEwOwkvKiAxNiBEV3MgPSA2NCBCICovCisJCXdkLT5wYXJhbXMtPnNjc2lfY29uZgk9IDB4NGM7CS8qIDQ4bWEsIHNwdWUsIHBhcml0eSBjaGVjayAqLworCQl3ZC0+cGFyYW1zLT5vd25fc2NzaV9pZAk9IDB4MDc7CS8qIElEIDcsIFNDQU0gZGlzYWJsZWQgKi8KKwkJd2QtPnBhcmFtcy0+c2VsX3RpbWVvdXQgPSAweDRkOwkvKiAyNTAgbXMgKi8KKwkJd2QtPnBhcmFtcy0+c2xlZXBfdGltZXIJPSAweDAxOworCQl3ZC0+cGFyYW1zLT5jZGJfc2l6ZQk9IGNwdV90b19sZTE2KDB4NTU1NSk7CS8qIGFsbCA2IEIgKi8KKwkJd2QtPnBhcmFtcy0+c2NzaV9wYWQJPSAweDFiOworCQlpZiAod2QtPnR5cGUgPT0gV0Q3MTlYX1RZUEVfNzE5MykgLyogbmFycm93IGNhcmQgLSBkaXNhYmxlICovCisJCQl3ZC0+cGFyYW1zLT53aWRlID0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCk7CisJCWVsc2UJLyogaW5pdGlhdGUgJiByZXNwb25kIHRvIFdJREUgbWVzc2FnZXMgKi8KKwkJCXdkLT5wYXJhbXMtPndpZGUgPSBjcHVfdG9fbGUzMigweGZmZmZmZmZmKTsKKwkJd2QtPnBhcmFtcy0+c3luYwk9IGNwdV90b19sZTMyKDB4ZmZmZmZmZmYpOworCQl3ZC0+cGFyYW1zLT5zb2Z0X21hc2sJPSAweDAwOwkvKiBhbGwgZGlzYWJsZWQgKi8KKwkJd2QtPnBhcmFtcy0+dW5zb2xfbWFzawk9IDB4MDA7CS8qIGFsbCBkaXNhYmxlZCAqLworCX0KKwkvKiBkaXNhYmxlIFRBR0dFRCBtZXNzYWdlcyAqLworCXdkLT5wYXJhbXMtPnRhZ19lbiA9IGNwdV90b19sZTE2KDB4MDAwMCk7Cit9CisKKy8qIFJlYWQgY2FyZCB0eXBlIGZyb20gR1BJTyBiaXRzIDEgYW5kIDMgKi8KK3N0YXRpYyBlbnVtIHdkNzE5eF9jYXJkX3R5cGUgd2Q3MTl4X2RldGVjdF90eXBlKHN0cnVjdCB3ZDcxOXggKndkKQoreworCXU4IGNhcmQgPSB3ZDcxOXhfcmVhZGIod2QsIFdENzE5WF9QQ0lfR1BJT19DT05UUk9MKTsKKworCWNhcmQgfD0gV0Q3MTlYX0dQSU9fSURfQklUUzsKKwl3ZDcxOXhfd3JpdGViKHdkLCBXRDcxOVhfUENJX0dQSU9fQ09OVFJPTCwgY2FyZCk7CisJY2FyZCA9IHdkNzE5eF9yZWFkYih3ZCwgV0Q3MTlYX1BDSV9HUElPX0RBVEEpICYgV0Q3MTlYX0dQSU9fSURfQklUUzsKKwlzd2l0Y2ggKGNhcmQpIHsKKwljYXNlIDB4MDg6CisJCXJldHVybiBXRDcxOVhfVFlQRV83MTkzOworCWNhc2UgMHgwMjoKKwkJcmV0dXJuIFdENzE5WF9UWVBFXzcxOTc7CisJY2FzZSAweDAwOgorCQlyZXR1cm4gV0Q3MTlYX1RZUEVfNzI5NjsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgInVua25vd24gY2FyZCB0eXBlIDB4JXhcbiIsIGNhcmQpOworCQlyZXR1cm4gV0Q3MTlYX1RZUEVfVU5LTk9XTjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd2Q3MTl4X2JvYXJkX2ZvdW5kKHN0cnVjdCBTY3NpX0hvc3QgKnNoKQoreworCXN0cnVjdCB3ZDcxOXggKndkID0gc2hvc3RfcHJpdihzaCk7CisJY2hhciAqY2FyZF90eXBlc1tdID0geyAiVW5rbm93biBjYXJkIiwgIldENzE5MyIsICJXRDcxOTciLCAiV0Q3Mjk2IiB9OworCWludCByZXQ7CisKKwlJTklUX0xJU1RfSEVBRCgmd2QtPmFjdGl2ZV9zY2JzKTsKKwlJTklUX0xJU1RfSEVBRCgmd2QtPmZyZWVfc2Nicyk7CisKKwlzaC0+YmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydCh3ZC0+cGRldiwgMCk7CisKKwl3ZC0+dHlwZSA9IHdkNzE5eF9kZXRlY3RfdHlwZSh3ZCk7CisKKwl3ZC0+c2ggPSBzaDsKKwlzaC0+aXJxID0gd2QtPnBkZXYtPmlycTsKKwl3ZC0+ZndfdmlydCA9IE5VTEw7CisKKwkvKiBtZW1vcnkgYXJlYSBmb3IgaG9zdCAoRUVQUk9NKSBwYXJhbWV0ZXJzICovCisJd2QtPnBhcmFtcyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHdkLT5wZGV2LAorCQkJCQkgIHNpemVvZihzdHJ1Y3Qgd2Q3MTl4X2hvc3RfcGFyYW0pLAorCQkJCQkgICZ3ZC0+cGFyYW1zX3BoeXMpOworCWlmICghd2QtPnBhcmFtcykgeworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBwYXJhbWV0ZXIgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogbWVtb3J5IGFyZWEgZm9yIHRoZSBSSVNDIGZvciBoYXNoIHRhYmxlIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzICovCisJd2QtPmhhc2hfdmlydCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHdkLT5wZGV2LCBXRDcxOVhfSEFTSF9UQUJMRV9TSVpFLAorCQkJCQkgICAgICZ3ZC0+aGFzaF9waHlzKTsKKwlpZiAoIXdkLT5oYXNoX3ZpcnQpIHsKKwkJZGV2X3dhcm4oJndkLT5wZGV2LT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgaGFzaCBidWZmZXJcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfZnJlZV9wYXJhbXM7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEod2QtPnBkZXYtPmlycSwgd2Q3MTl4X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkgICJ3ZDcxOXgiLCB3ZCk7CisJaWYgKHJldCkgeworCQlkZXZfd2Fybigmd2QtPnBkZXYtPmRldiwgInVuYWJsZSB0byBhc3NpZ24gSVJRICVkXG4iLAorCQkJIHdkLT5wZGV2LT5pcnEpOworCQlnb3RvIGZhaWxfZnJlZV9oYXNoOworCX0KKworCS8qIHJlYWQgcGFyYW1ldGVycyBmcm9tIEVFUFJPTSAqLworCXdkNzE5eF9yZWFkX2VlcHJvbSh3ZCk7CisKKwlyZXQgPSB3ZDcxOXhfY2hpcF9pbml0KHdkKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfZnJlZV9pcnE7CisKKwlzaC0+dGhpc19pZCA9IHdkLT5wYXJhbXMtPm93bl9zY3NpX2lkICYgV0Q3MTlYX0VFX1NDU0lfSURfTUFTSzsKKworCWRldl9pbmZvKCZ3ZC0+cGRldi0+ZGV2LCAiJXMgYXQgSS9PIDB4JWx4LCBJUlEgJXUsIFNDU0kgSUQgJWRcbiIsCisJCSBjYXJkX3R5cGVzW3dkLT50eXBlXSwgc2gtPmJhc2UsIHNoLT5pcnEsIHNoLT50aGlzX2lkKTsKKworCXJldHVybiAwOworCitmYWlsX2ZyZWVfaXJxOgorCWZyZWVfaXJxKHdkLT5wZGV2LT5pcnEsIHdkKTsKK2ZhaWxfZnJlZV9oYXNoOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQod2QtPnBkZXYsIFdENzE5WF9IQVNIX1RBQkxFX1NJWkUsIHdkLT5oYXNoX3ZpcnQsCisJCQkgICAgd2QtPmhhc2hfcGh5cyk7CitmYWlsX2ZyZWVfcGFyYW1zOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQod2QtPnBkZXYsIHNpemVvZihzdHJ1Y3Qgd2Q3MTl4X2hvc3RfcGFyYW0pLAorCQkJICAgIHdkLT5wYXJhbXMsIHdkLT5wYXJhbXNfcGh5cyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB3ZDcxOXhfdGVtcGxhdGUgPSB7CisJLm5hbWUJCQkJPSAiV2VzdGVybiBEaWdpdGFsIDcxOXgiLAorCS5xdWV1ZWNvbW1hbmQJCQk9IHdkNzE5eF9xdWV1ZWNvbW1hbmQsCisJLmVoX2Fib3J0X2hhbmRsZXIJCT0gd2Q3MTl4X2Fib3J0LAorCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcgk9IHdkNzE5eF9kZXZfcmVzZXQsCisJLmVoX2J1c19yZXNldF9oYW5kbGVyCQk9IHdkNzE5eF9idXNfcmVzZXQsCisJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgkJPSB3ZDcxOXhfaG9zdF9yZXNldCwKKwkuYmlvc19wYXJhbQkJCT0gd2Q3MTl4X2Jpb3NwYXJhbSwKKwkucHJvY19uYW1lCQkJPSAid2Q3MTl4IiwKKwkuY2FuX3F1ZXVlCQkJPSAyNTUsCisJLnRoaXNfaWQJCQk9IDcsCisJLnNnX3RhYmxlc2l6ZQkJCT0gV0Q3MTlYX1NHLAorCS5jbWRfcGVyX2x1bgkJCT0gV0Q3MTlYX0NNRF9QRVJfTFVOLAorCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCit9OworCitzdGF0aWMgaW50IHdkNzE5eF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpkKQoreworCWludCBlcnI7CisJc3RydWN0IFNjc2lfSG9zdCAqc2g7CisJc3RydWN0IHdkNzE5eCAqd2Q7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7CisKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHNldCAzMi1iaXQgRE1BIG1hc2tcbiIpOworCQlnb3RvIGRpc2FibGVfZGV2aWNlOworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgIndkNzE5eCIpOworCWlmIChlcnIpCisJCWdvdG8gZGlzYWJsZV9kZXZpY2U7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwllcnIgPSAtRU5PREVWOworCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApID09IDApCisJCWdvdG8gcmVsZWFzZV9yZWdpb247CisKKwllcnIgPSAtRU5PTUVNOworCXNoID0gc2NzaV9ob3N0X2FsbG9jKCZ3ZDcxOXhfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3Qgd2Q3MTl4KSk7CisJaWYgKCFzaCkKKwkJZ290byByZWxlYXNlX3JlZ2lvbjsKKworCXdkID0gc2hvc3RfcHJpdihzaCk7CisJd2QtPmJhc2UgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisJaWYgKCF3ZC0+YmFzZSkKKwkJZ290byBmcmVlX2hvc3Q7CisJd2QtPnBkZXYgPSBwZGV2OworCisJZXJyID0gd2Q3MTl4X2JvYXJkX2ZvdW5kKHNoKTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubWFwOworCisJZXJyID0gc2NzaV9hZGRfaG9zdChzaCwgJndkLT5wZGV2LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZGVzdHJveTsKKworCXNjc2lfc2Nhbl9ob3N0KHNoKTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBzaCk7CisJcmV0dXJuIDA7CisKK2Rlc3Ryb3k6CisJd2Q3MTl4X2Rlc3Ryb3kod2QpOwordW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgd2QtPmJhc2UpOworZnJlZV9ob3N0OgorCXNjc2lfaG9zdF9wdXQoc2gpOworcmVsZWFzZV9yZWdpb246CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCB3ZDcxOXhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgd2Q3MTl4ICp3ZCA9IHNob3N0X3ByaXYoc2gpOworCisJc2NzaV9yZW1vdmVfaG9zdChzaCk7CisJd2Q3MTl4X2Rlc3Ryb3kod2QpOworCXBjaV9pb3VubWFwKHBkZXYsIHdkLT5iYXNlKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXNjc2lfaG9zdF9wdXQoc2gpOworfQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUod2Q3MTl4X3BjaV90YWJsZSkgPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfV0QsIDB4MzI5NikgfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHdkNzE5eF9wY2lfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgd2Q3MTl4X3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJIndkNzE5eCIsCisJLmlkX3RhYmxlID0Jd2Q3MTl4X3BjaV90YWJsZSwKKwkucHJvYmUgPQl3ZDcxOXhfcGNpX3Byb2JlLAorCS5yZW1vdmUgPQl3ZDcxOXhfcGNpX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdkNzE5eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJndkNzE5eF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdkNzE5eF9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3ZDcxOXhfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdkNzE5eF9pbml0KTsKK21vZHVsZV9leGl0KHdkNzE5eF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJXZXN0ZXJuIERpZ2l0YWwgV0Q3MTkzLzcxOTcvNzI5NiBTQ1NJIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiT25kcmVqIFphcnksIEFhcm9uIERld2VsbCwgSnVlcmdlbiBHYWVydG5lciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKCJ3ZDcxOXgtd2NzLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJ3ZDcxOXgtcmlzYy5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS93ZDcxOXguaCBiL2RyaXZlcnMvc2NzaS93ZDcxOXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODVlMzBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL3dkNzE5eC5oCkBAIC0wLDAgKzEsMjQ5IEBACisjaWZuZGVmIF9XRDcxOVhfSF8KKyNkZWZpbmUgX1dENzE5WF9IXworCisjZGVmaW5lIFdENzE5WF9TRyAyNTUJCS8qIFNjYXR0ZXIvZ2F0aGVyIHNpemUgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9QRVJfTFVOIDEJLyogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbGlua2VkIGNvbW1hbmRzLCBidXQKKwkJCQkgKiB0aGlzIGlzIDEgZm9yIG5vdyB0byBiZSBzYWZlLiAqLworCitzdHJ1Y3Qgd2Q3MTl4X3NnbGlzdCB7CisJX19sZTMyIHB0cjsKKwlfX2xlMzIgbGVuZ3RoOworfSBfX3BhY2tlZDsKKworZW51bSB3ZDcxOXhfY2FyZF90eXBlIHsKKwlXRDcxOVhfVFlQRV9VTktOT1dOID0gMCwKKwlXRDcxOVhfVFlQRV83MTkzLAorCVdENzE5WF9UWVBFXzcxOTcsCisJV0Q3MTlYX1RZUEVfNzI5NiwKK307CisKK3VuaW9uIHdkNzE5eF9yZWdzIHsKKwlfX2xlMzIgYWxsOwkvKiBBbGwgU3RhdHVzIGF0IG9uY2UgKi8KKwlzdHJ1Y3QgeworCQl1OCBPUEM7CQkvKiBPcGNvZGUgcmVnaXN0ZXIgKi8KKwkJdTggU0NTSTsJLyogU0NTSSBFcnJvcnMgKi8KKwkJdTggU1VFOwkJLyogU3BpZGVyIHVuaXF1ZSBFcnJvcnMgKi8KKwkJdTggSU5UOwkJLyogSW50ZXJydXB0IFN0YXR1cyAqLworCX0gYnl0ZXM7Cit9OworCisvKiBTcGlkZXIgQ29tbWFuZCBCbG9jayAoU0NCKSAqLworc3RydWN0IHdkNzE5eF9zY2IgeworCV9fbGUzMiBJbnRfU0NCOwkvKiAwMC0wMyBJbnRlcm5hbCBTQ0IgbGluayBwb2ludGVyIChtdXN0IGJlIGNsZWFyZWQpICovCisJdTggU0NCX29wY29kZTsJLyogMDQgU0NCIENvbW1hbmQgb3Bjb2RlICovCisJdTggQ0RCX3RhZzsJLyogMDUgU0NTSSBUYWcgYnl0ZSBmb3IgQ0RCIHF1ZXVlcyAoMCBpZiB1bnRhZ2dlZCkgKi8KKwl1OCBsdW47CQkvKiAwNiBTQ1NJIExVTiAqLworCXU4IGRldmlkOwkvKiAwNyBTQ1NJIERldmljZSBJRCAqLworCXU4IENEQlsxNl07CS8qIDA4LTIzIFNDU0kgQ0RCICgxNiBieXRlcyBhcyBkZWZpbmVkIGJ5IEFOU0kgc3BlYy4gKi8KKwlfX2xlMzIgZGF0YV9wOwkvKiAyNC0yNyBEYXRhIHRyYW5zZmVyIGFkZHJlc3MgKG9yIFNHIGxpc3QgYWRkcmVzcykgKi8KKwlfX2xlMzIgZGF0YV9sZW5ndGg7IC8qIDI4LTMxIERhdGEgdHJhbnNmZXIgTGVuZ3RoIChvciBTRyBsaXN0IGxlbmd0aCkgKi8KKwlfX2xlMzIgQ0RCX2xpbms7ICAgIC8qIDMyLTM1IFNDU0kgQ0RCIExpbmsgUHRyICovCisJX19sZTMyIHNlbnNlX2J1ZjsgICAvKiAzNi0zOSBBdXRvIHJlcXVlc3Qgc2Vuc2UgYnVmZmVyIGFkZHJlc3MgKi8KKwl1OCBzZW5zZV9idWZfbGVuZ3RoOy8qIDQwIEF1dG8gcmVxdWVzdCBzZW5zZSB0cmFuc2ZlciBsZW5ndGggKi8KKwl1OCByZXNlcnZlZDsJLyogNDEgcmVzZXJ2ZWQgKi8KKwl1OCBTQ0Jfb3B0aW9uczsJLyogNDIgU0NCLW9wdGlvbnMgKi8KKwl1OCBTQ0JfdGFnX21zZzsJLyogNDMgVGFnZ2VkIG1lc3NhZ2VzIG9wdGlvbnMgKi8KKwkvKiBOb3QgZmlsbGVkIGluIGJ5IGhvc3QgKi8KKwlfX2xlMzIgcmVxX3B0cjsJLyogNDQtNDcgUHRyIHRvIEhvc3QgUmVxdWVzdCByZXR1cm5lZCBvbiBpbnRlcnJ1cHQgKi8KKwl1OCBob3N0X29wY29kZTsJLyogNDggSG9zdCBDb21tYW5kIE9wY29kZSAoc2FtZSBhcyBBTVJfMDApICovCisJdTggc2NzaV9zdGF0OwkvKiA0OSBTQ1NJIFN0YXR1cyByZXR1cm5lZCAqLworCXU4IHJldF9lcnJvcjsJLyogNTAgU1BJREVSIFVuaXF1ZSBFcnJvciBDb2RlIHJldHVybmVkIChTVUUpICovCisJdTggaW50X3N0YXQ7CS8qIDUxIE1lc3NhZ2UgdTggLyBJbnRlcnJ1cHQgU3RhdHVzIGJ5dGUgcmV0dXJuZWQgKi8KKwlfX2xlMzIgdHJhbnNmZXJyZWQ7IC8qIDUyLTU1IEJ5dGVzIFRyYW5zZmVycmVkICovCisJdTggbGFzdF90cmFuc1szXTsgIC8qIDU2LTU4IEJ5dGVzIFRyYW5zZmVycmVkIGluIGxhc3Qgc2Vzc2lvbiAqLworCXU4IGxlbmd0aDsJLyogNTkgU0NTSSBNZXNzYWdlcyBMZW5ndGggKDEtOCkgKi8KKwl1OCBzeW5jX29mZnNldDsJLyogNjAgU3luY2hyb25vdXMgb2Zmc2V0ICovCisJdTggc3luY19yYXRlOwkvKiA2MSBTeW5jaHJvbm91cyByYXRlICovCisJdTggZmxhZ3NbMl07CS8qIDYyLTYzIFNDQiBzcGVjaWZpYyBmbGFncyAobG9jYWwgdG8gZWFjaCB0aHJlYWQpICovCisJLyogZXZlcnl0aGluZyBiZWxvdyBpcyBmb3IgZHJpdmVyIHVzZSAobm90IHVzZWQgYnkgY2FyZCkgKi8KKwlkbWFfYWRkcl90IHBoeXM7CS8qIGJ1cyBhZGRyZXNzIG9mIHRoZSBTQ0IgKi8KKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CS8qIGEgY29weSBvZiB0aGUgcG9pbnRlciB3ZSB3ZXJlIHBhc3NlZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3Qgd2Q3MTl4X3NnbGlzdCBzZ19saXN0W1dENzE5WF9TR10gX19hbGlnbmVkKDgpOyAvKiBTRyBsaXN0ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd2Q3MTl4IHsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaDsJLyogcG9pbnRlciB0byBob3N0IHN0cnVjdHVyZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXZvaWQgX19pb21lbSAqYmFzZTsKKwllbnVtIHdkNzE5eF9jYXJkX3R5cGUgdHlwZTsgLyogdHlwZSBvZiBjYXJkICovCisJdm9pZCAqZndfdmlydDsJCS8qIGZpcm13YXJlIGJ1ZmZlciBDUFUgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QgZndfcGh5czsJLyogZmlybXdhcmUgYnVmZmVyIGJ1cyBhZGRyZXNzICovCisJc2l6ZV90IGZ3X3NpemU7CQkvKiBmaXJtd2FyZSBidWZmZXIgc2l6ZSAqLworCXN0cnVjdCB3ZDcxOXhfaG9zdF9wYXJhbSAqcGFyYW1zOyAvKiBob3N0IHBhcmFtZXRlcnMgKEVFUFJPTSkgKi8KKwlkbWFfYWRkcl90IHBhcmFtc19waHlzOyAvKiBob3N0IHBhcmFtZXRlcnMgYnVzIGFkZHJlc3MgKi8KKwl2b2lkICpoYXNoX3ZpcnQ7CS8qIGhhc2ggdGFibGUgQ1BVIGFkZHJlc3MgKi8KKwlkbWFfYWRkcl90IGhhc2hfcGh5czsJLyogaGFzaCB0YWJsZSBidXMgYWRkcmVzcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3NjYnM7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX3NjYnM7Cit9OworCisvKiB0aW1lb3V0IGRlbGF5cyBpbiBtaWNyb3NlY3MgKi8KKyNkZWZpbmUgV0Q3MTlYX1dBSVRfRk9SX0NNRF9SRUFEWQk1MDAKKyNkZWZpbmUgV0Q3MTlYX1dBSVRfRk9SX1JJU0MJCTIwMDAKKyNkZWZpbmUgV0Q3MTlYX1dBSVRfRk9SX1NDU0lfUkVTRVQJMzAwMDAwMAorCisvKiBBbGwgY29tbWFuZHMgZXhjZXB0IDB4MDAgZ2VuZXJhdGUgYW4gaW50ZXJydXB0ICovCisjZGVmaW5lIFdENzE5WF9DTURfUkVBRFkJMHgwMCAvKiBDb21tYW5kIHJlZ2lzdGVyIHJlYWR5IChvciBub29wKSAqLworI2RlZmluZSBXRDcxOVhfQ01EX0lOSVRfUklTQwkweDAxIC8qIEluaXRpYWxpemUgUklTQyAqLworLyogMHgwMiBpcyByZXNlcnZlZCAqLworI2RlZmluZSBXRDcxOVhfQ01EX0JVU1JFU0VUCTB4MDMgLyogQXNzZXJ0IFNDU0kgYnVzIHJlc2V0ICovCisjZGVmaW5lIFdENzE5WF9DTURfUkVBRF9GSVJNVkVSCTB4MDQgLyogUmVhZCB0aGUgRmlybXdhcmUgUmV2aXNpb24gKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9FQ0hPX0JZVEVTCTB4MDUgLyogRWNobyBjb21tYW5kIGJ5dGVzIChEVykgKi8KKy8qIDB4MDYgaXMgcmVzZXJ2ZWQgKi8KKy8qIDB4MDcgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9HRVRfUEFSQU0JMHgwOCAvKiBHZXQgcHJvZ3JhbW1hYmxlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9TRVRfUEFSQU0JMHgwOSAvKiBTZXQgcHJvZ3JhbW1hYmxlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9TTEVFUAkweDBhIC8qIFB1dCBTUElERVIgdG8gc2xlZXAgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9SRUFEX0lOSVQJMHgwYiAvKiBSZWFkIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9SRVNUT1JFX0lOSVQJMHgwYyAvKiBSZXN0b3JlIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgKi8KKy8qIDB4MGQgaXMgcmVzZXJ2ZWQgKi8KKy8qIDB4MGUgaXMgcmVzZXJ2ZWQgKi8KKy8qIDB4MGYgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9BQk9SVF9UQUcJMHgxMCAvKiBTZW5kIEFib3J0IHRhZyBtZXNzYWdlIHRvIHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfQ01EX0FCT1JUCTB4MTEgLyogU2VuZCBBYm9ydCBtZXNzYWdlIHRvIHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfQ01EX1JFU0VUCTB4MTIgLyogU2VuZCBSZXNldCBtZXNzYWdlIHRvIHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfQ01EX0lOSVRfU0NBTQkweDEzIC8qIEluaXRpYXRlIFNDQU0gKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9HRVRfU1lOQwkweDE0IC8qIEdldCBzeW5jaHJvbm91cyByYXRlcyAqLworI2RlZmluZSBXRDcxOVhfQ01EX1NFVF9TWU5DCTB4MTUgLyogU2V0IHN5bmNocm9ub3VzIHJhdGVzICovCisjZGVmaW5lIFdENzE5WF9DTURfR0VUX1dJRFRICTB4MTYgLyogR2V0IFNDU0kgYnVzIHdpZHRoICovCisjZGVmaW5lIFdENzE5WF9DTURfU0VUX1dJRFRICTB4MTcgLyogU2V0IFNDU0kgYnVzIHdpZHRoICovCisjZGVmaW5lIFdENzE5WF9DTURfR0VUX1RBR1MJMHgxOCAvKiBHZXQgdGFnIGZsYWdzICovCisjZGVmaW5lIFdENzE5WF9DTURfU0VUX1RBR1MJMHgxOSAvKiBTZXQgdGFnIGZsYWdzICovCisjZGVmaW5lIFdENzE5WF9DTURfR0VUX1BBUkFNMgkweDFhIC8qIEdldCBwcm9ncmFtbWFibGUgcGFyYW1zIChmb3JtYXQgMikgKi8KKyNkZWZpbmUgV0Q3MTlYX0NNRF9TRVRfUEFSQU0yCTB4MWIgLyogU2V0IHByb2dyYW1tYWJsZSBwYXJhbXMgKGZvcm1hdCAyKSAqLworLyogQ29tbWFuZHMgd2l0aCByZXF1ZXN0IHBvaW50ZXJzIChtYWlsYm94KSAqLworI2RlZmluZSBXRDcxOVhfQ01EX1BST0NFU1NfU0NCCTB4ODAgLyogUHJvY2VzcyBTQ1NJIENvbnRyb2wgQmxvY2sgKFNDQikgKi8KKy8qIE5vIGludGVycnVwdCBnZW5lcmF0ZWQgb24gYWNjZXB0YW5jZSBvZiBTQ0IgcG9pbnRlciAqLworCisvKiBpbnRlcnJ1cHQgc3RhdHVzIGRlZmluZXMgKi8KKyNkZWZpbmUgV0Q3MTlYX0lOVF9OT05FCQkweDAwIC8qIE5vIGludGVycnVwdCBwZW5kaW5nICovCisjZGVmaW5lIFdENzE5WF9JTlRfTk9FUlJPUlMJMHgwMSAvKiBDb21tYW5kIGNvbXBsZXRlZCB3aXRoIG5vIGVycm9ycyAqLworI2RlZmluZSBXRDcxOVhfSU5UX0xJTktOT0VSUk9SUwkweDAyIC8qIGxpbmsgY21kIGNvbXBsZXRlZCB3aXRoIG5vIGVycm9ycyAqLworI2RlZmluZSBXRDcxOVhfSU5UX0xJTktOT1NUQVRVUwkweDAzIC8qIGxpbmsgY21kIGNvbXBsZXRlZCB3aXRoIG5vIGZsYWcgc2V0ICovCisjZGVmaW5lIFdENzE5WF9JTlRfRVJST1JTTE9HR0VECTB4MDQgLyogY21kIGNvbXBsZXRlZCB3aXRoIGVycm9ycyBsb2dnZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX0lOVF9TUElERVJGQUlMRUQJMHgwNSAvKiBjbWQgZmFpbGVkIHdpdGhvdXQgdmFsaWQgU0NTSSBzdGF0dXMgKi8KKyNkZWZpbmUgV0Q3MTlYX0lOVF9CQURJTlQJMHg4MCAvKiB1bnNvbGljaXRlZCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgV0Q3MTlYX0lOVF9QSU9SRUFEWQkweGYwIC8qIGRhdGEgcmVhZHkgZm9yIFBJTyBvdXRwdXQgKi8KKworLyogU3BpZGVyIFVuaXF1ZSBFcnJvciBDb2RlcyAoU1VFKSAqLworI2RlZmluZSBXRDcxOVhfU1VFX05PRVJST1JTCTB4MDAgLyogTm8gZXJyb3JzIGRldGVjdGVkIGJ5IFNQSURFUiAqLworI2RlZmluZSBXRDcxOVhfU1VFX1JFSkVDVEVECTB4MDEgLyogQ29tbWFuZCBSZWplY3RlZCAoYmFkIG9wY29kZS9wYXJhbSkgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9TQ0JRRlVMTAkweDAyIC8qIFNDQiBxdWV1ZSBmdWxsICovCisvKiAweDAzIGlzIHJlc2VydmVkICovCisjZGVmaW5lIFdENzE5WF9TVUVfVEVSTQkJMHgwNCAvKiBIb3N0IHRlcm1pbmF0ZWQgU0NCIHZpYSBwcmltYXRpdmUgY21kICovCisjZGVmaW5lIFdENzE5WF9TVUVfQ0hBTjFQQVIJMHgwNSAvKiBQQ0kgQ2hhbm5lbCAxIHBhcml0eSBlcnJvciBvY2N1cnJlZCAqLworI2RlZmluZSBXRDcxOVhfU1VFX0NIQU4xQUJPUlQJMHgwNiAvKiBQQ0kgQ2hhbm5lbCAxIHN5c3RlbSBhYm9ydCBvY2N1cnJlZCAqLworI2RlZmluZSBXRDcxOVhfU1VFX0NIQU4yM1BBUgkweDA3IC8qIFBDSSBDaGFubmVsIDIvMyBwYXJpdHkgZXJyb3Igb2NjdXJyZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9DSEFOMjNBQk9SVAkweDA4IC8qIFBDSSBDaGFubmVsIDIvMyBzeXN0ZW0gYWJvcnQgb2NjdXJyZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9USU1FT1VUCTB4MTAgLyogU2VsZWN0aW9uL3Jlc2VsZWN0aW9uIHRpbWVvdXQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9SRVNFVAkweDExIC8qIFNDU0kgYnVzIHJlc2V0IG9jY3VycmVkICovCisjZGVmaW5lIFdENzE5WF9TVUVfQlVTRVJST1IJMHgxMiAvKiBTQ1NJIGJ1cyBlcnJvciAqLworI2RlZmluZSBXRDcxOVhfU1VFX1dST05HV0FZCTB4MTMgLyogV3JvbmcgZGF0YSB0cmFuc2ZlciBkaXIgc2V0IGJ5IHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfU1VFX0JBRFBIQVNFCTB4MTQgLyogU0NTSSBwaGFzZSBpbGxlZ2FsIG9yIHVuZXhwZWN0ZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9UT09MT05HCTB4MTUgLyogdGFyZ2V0IHJlcXVlc3RlZCB0b28gbXVjaCBkYXRhICovCisjZGVmaW5lIFdENzE5WF9TVUVfQlVTRlJFRQkweDE2IC8qIFVuZXhwZWN0ZWQgU0NTSSBidXMgZnJlZSAqLworI2RlZmluZSBXRDcxOVhfU1VFX0FSU0RPTkUJMHgxNyAvKiBBdXRvIHJlcXVlc3Qgc2Vuc2UgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9JR05PUkVECTB4MTggLyogU0NTSSBtZXNzYWdlIHdhcyBpZ25vcmVkIGJ5IHRhcmdldCAqLworI2RlZmluZSBXRDcxOVhfU1VFX1dST05HVEFHUwkweDE5IC8qIFRhZ2dlZCBTQ0IgJiB0YWdzIG9mZiAob3IgdmljZSB2ZXJzYSkgKi8KKyNkZWZpbmUgV0Q3MTlYX1NVRV9CQURUQUdTCTB4MWEgLyogV3JvbmcgdGFnIG1lc3NhZ2UgdHlwZSBmb3IgdGFyZ2V0ICovCisjZGVmaW5lIFdENzE5WF9TVUVfTk9TQ0FNSUQJMHgxYiAvKiBObyBTQ0FNIHNvZnQgSUQgYXZhaWxhYmxlICovCisKKy8qIGNvZGUgc2l6ZXMgKi8KKyNkZWZpbmUJV0Q3MTlYX0hBU0hfVEFCTEVfU0laRQk0MDk2CisKKy8qIEFkdmFuY2VkIE1vZGUgUmVnaXN0ZXJzICovCisvKiBSZWdzIDB4MDAuLjB4MWYgYXJlIGZvciBBZHZhbmNlZCBNb2RlIG9mIHRoZSBjYXJkIChSSVNDIGlzIHJ1bm5pbmcpLiAqLworI2RlZmluZSBXRDcxOVhfQU1SX0NPTU1BTkQJCTB4MDAKKyNkZWZpbmUgV0Q3MTlYX0FNUl9DTURfUEFSQU0JCTB4MDEKKyNkZWZpbmUgV0Q3MTlYX0FNUl9DTURfUEFSQU1fMgkJMHgwMgorI2RlZmluZSBXRDcxOVhfQU1SX0NNRF9QQVJBTV8zCQkweDAzCisjZGVmaW5lIFdENzE5WF9BTVJfU0NCX0lOCQkweDA0CisKKyNkZWZpbmUgV0Q3MTlYX0FNUl9CSU9TX1NIQVJFX0lOVAkweDBmCisKKyNkZWZpbmUgV0Q3MTlYX0FNUl9TQ0JfT1VUCQkweDE4CisjZGVmaW5lIFdENzE5WF9BTVJfT1BfQ09ERQkJMHgxYworI2RlZmluZSBXRDcxOVhfQU1SX1NDU0lfU1RBVFVTCQkweDFkCisjZGVmaW5lIFdENzE5WF9BTVJfU0NCX0VSUk9SCQkweDFlCisjZGVmaW5lIFdENzE5WF9BTVJfSU5UX1NUQVRVUwkJMHgxZgorCisjZGVmaW5lIFdENzE5WF9ESVNBQkxFX0lOVAkweDgwCisKKy8qIFNDQiBmbGFncyAqLworI2RlZmluZSBXRDcxOVhfU0NCX0ZMQUdTX0NIRUNLX0RJUkVDVElPTgkweDAxCisjZGVmaW5lIFdENzE5WF9TQ0JfRkxBR1NfUENJX1RPX1NDU0kJCTB4MDIKKyNkZWZpbmUgV0Q3MTlYX1NDQl9GTEFHU19BVVRPX1JFUVVFU1RfU0VOU0UJMHgxMAorI2RlZmluZSBXRDcxOVhfU0NCX0ZMQUdTX0RPX1NDQVRURVJfR0FUSEVSCTB4MjAKKyNkZWZpbmUgV0Q3MTlYX1NDQl9GTEFHU19OT19ESVNDT05ORUNUCQkweDQwCisKKy8qIFBDSSBSZWdpc3RlcnMgdXNlZCBmb3IgcmVzZXQsIGluaXRpYWwgY29kZSBkb3dubG9hZCAqLworLyogUmVncyAweDIwLi4weDNmIGFyZSBmb3IgTm9ybWFsIChET1MpIG1vZGUgKFJJU0MgaXMgYXNsZWVwKS4gKi8KKyNkZWZpbmUgV0Q3MTlYX1BDSV9HUElPX0NPTlRST0wJCTB4M0MKKyNkZWZpbmUgV0Q3MTlYX1BDSV9HUElPX0RBVEEJCTB4M0QKKyNkZWZpbmUgV0Q3MTlYX1BDSV9QT1JUX1JFU0VUCQkweDNFCisjZGVmaW5lIFdENzE5WF9QQ0lfTU9ERV9TRUxFQ1QJCTB4M0YKKworI2RlZmluZSBXRDcxOVhfUENJX0VYVEVSTkFMX0FERFIJMHg2MAorI2RlZmluZSBXRDcxOVhfUENJX0lOVEVSTkFMX0FERFIJMHg2NAorI2RlZmluZSBXRDcxOVhfUENJX0RNQV9UUkFOU0ZFUl9TSVpFCTB4NjYKKyNkZWZpbmUgV0Q3MTlYX1BDSV9DSEFOTkVMMl8zQ01ECTB4NjgKKyNkZWZpbmUgV0Q3MTlYX1BDSV9DSEFOTkVMMl8zU1RBVFVTCTB4NjkKKworI2RlZmluZSBXRDcxOVhfR1BJT19JRF9CSVRTCQkweDBhCisjZGVmaW5lIFdENzE5WF9QUkFNX0JBU0VfQUREUgkJMHgwMAorCisvKiBjb2RlcyB3cml0dGVuIHRvIG9yIHJlYWQgZnJvbSB0aGUgY2FyZCAqLworI2RlZmluZSBXRDcxOVhfUENJX1JFU0VUCQkgMHgwMQorI2RlZmluZSBXRDcxOVhfRU5BQkxFX0FEVkFOQ0VfTU9ERQkgMHgwMQorCisjZGVmaW5lIFdENzE5WF9TVEFSVF9DSEFOTkVMMl8zRE1BCSAweDE3CisjZGVmaW5lIFdENzE5WF9TVEFSVF9DSEFOTkVMMl8zRE9ORQkgMHgwMQorI2RlZmluZSBXRDcxOVhfU1RBUlRfQ0hBTk5FTDJfM0FCT1JUCSAweDIwCisKKy8qIDMzQzI5NiBHUElPIGJpdHMgZm9yIEVFUFJPTSBwaW5zICovCisjZGVmaW5lIFdENzE5WF9FRV9ESQkoMSA8PCAxKQorI2RlZmluZSBXRDcxOVhfRUVfQ1MJKDEgPDwgMikKKyNkZWZpbmUgV0Q3MTlYX0VFX0NMSwkoMSA8PCAzKQorI2RlZmluZSBXRDcxOVhfRUVfRE8JKDEgPDwgNCkKKworLyogRUVQUk9NIGNvbnRlbnRzICovCitzdHJ1Y3Qgd2Q3MTl4X2VlcHJvbV9oZWFkZXIgeworCXU4IHNpZzE7CisJdTggc2lnMjsKKwl1OCB2ZXJzaW9uOworCXU4IGNoZWNrc3VtOworCXU4IGNmZ19vZmZzZXQ7CisJdTggY2ZnX3NpemU7CisJdTggc2V0dXBfb2Zmc2V0OworCXU4IHNldHVwX3NpemU7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFdENzE5WF9FRV9TSUcxCQkwCisjZGVmaW5lIFdENzE5WF9FRV9TSUcyCQkxCisjZGVmaW5lIFdENzE5WF9FRV9WRVJTSU9OCTIKKyNkZWZpbmUgV0Q3MTlYX0VFX0NIRUNLU1VNCTMKKyNkZWZpbmUgV0Q3MTlYX0VFX0NGR19PRkZTRVQJNAorI2RlZmluZSBXRDcxOVhfRUVfQ0ZHX1NJWkUJNQorI2RlZmluZSBXRDcxOVhfRUVfU0VUVVBfT0ZGU0VUCTYKKyNkZWZpbmUgV0Q3MTlYX0VFX1NFVFVQX1NJWkUJNworCisjZGVmaW5lIFdENzE5WF9FRV9TQ1NJX0lEX01BU0sJMHhmCisKKy8qIFNQSURFUiBIb3N0IFBhcmFtZXRlcnMgQmxvY2sgKD1FRVBST00gY29uZmlndXJhdGlvbiBibG9jaykgKi8KK3N0cnVjdCB3ZDcxOXhfaG9zdF9wYXJhbSB7CisJdTggY2hfMV90aDsJLyogRklGTyB0aHJlc2hvbGQgKi8KKwl1OCBzY3NpX2NvbmY7CS8qIFNDU0kgY29uZmlndXJhdGlvbiAqLworCXU4IG93bl9zY3NpX2lkOwkvKiBjb250cm9sbGVyIFNDU0kgSUQgKi8KKwl1OCBzZWxfdGltZW91dDsJLyogc2VsZWN0aW9uIHRpbWVvdXQqLworCXU4IHNsZWVwX3RpbWVyOwkvKiBzZWVwIHRpbWVyICovCisJX19sZTE2IGNkYl9zaXplOy8qIENEQiBzaXplIGdyb3VwcyAqLworCV9fbGUxNiB0YWdfZW47CS8qIFRhZyBtc2cgZW5hYmxlcyAoSUQgMC0xNSkgKi8KKwl1OCBzY3NpX3BhZDsJLyogU0NTSSBwYWQgY29udHJvbCAqLworCV9fbGUzMiB3aWRlOwkvKiBXSURFIG1zZyBvcHRpb25zIChJRCAwLTE1KSAqLworCV9fbGUzMiBzeW5jOwkvKiBTWU5DIG1zZyBvcHRpb25zIChJRCAwLTE1KSAqLworCXU4IHNvZnRfbWFzazsJLyogc29mdCBlcnJvciBtYXNrICovCisJdTggdW5zb2xfbWFzazsJLyogdW5zb2xpY2l0ZWQgZXJyb3IgbWFzayAqLworfSBfX3BhY2tlZDsKKworI2VuZGlmIC8qIF9XRDcxOVhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvcG1fcnVudGltZS5jIGIvZHJpdmVycy9zaC9wbV9ydW50aW1lLmMKaW5kZXggZmUyYzJkNS4uZjNlZTQzOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvcG1fcnVudGltZS5jCisrKyBiL2RyaXZlcnMvc2gvcG1fcnVudGltZS5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc2hfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0OwpAQCAtNjgsNyArNjgsNyBAQAogCiAjZGVmaW5lIERFRkFVTFRfUE1fRE9NQUlOX1BUUglOVUxMCiAKLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiBzdGF0aWMgc3RydWN0IHBtX2Nsa19ub3RpZmllcl9ibG9jayBwbGF0Zm9ybV9idXNfbm90aWZpZXIgPSB7CiAJLnBtX2RvbWFpbiA9IERFRkFVTFRfUE1fRE9NQUlOX1BUUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zcy5oIGIvZHJpdmVycy9zb2MvdGkva25hdl9xbXNzLmgKaW5kZXggYmM5ZGNjOC4uNTFkYTIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdGkva25hdl9xbXNzLmgKKysrIGIvZHJpdmVycy9zb2MvdGkva25hdl9xbXNzLmgKQEAgLTM0OCwxNSArMzQ4LDE1IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWdpb24sICZrZGV2LT5yZWdpb25zLCBsaXN0KQogCiAjZGVmaW5lIGZpcnN0X3JlZ2lvbihrZGV2KQkJCQkJXAotCWxpc3RfZmlyc3RfZW50cnkoJmtkZXYtPnJlZ2lvbnMsIFwKLQkJCXN0cnVjdCBrbmF2X3JlZ2lvbiwgbGlzdCkKKwlsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmtkZXYtPnJlZ2lvbnMsIFwKKwkJCQkgc3RydWN0IGtuYXZfcmVnaW9uLCBsaXN0KQogCiAjZGVmaW5lIGZvcl9lYWNoX3F1ZXVlX3JhbmdlKGtkZXYsIHJhbmdlKQkJCVwKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhbmdlLCAma2Rldi0+cXVldWVfcmFuZ2VzLCBsaXN0KQogCiAjZGVmaW5lIGZpcnN0X3F1ZXVlX3JhbmdlKGtkZXYpCQkJCQlcCi0JbGlzdF9maXJzdF9lbnRyeSgma2Rldi0+cXVldWVfcmFuZ2VzLCBcCi0JCQlzdHJ1Y3Qga25hdl9yYW5nZV9pbmZvLCBsaXN0KQorCWxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgma2Rldi0+cXVldWVfcmFuZ2VzLCBcCisJCQkJIHN0cnVjdCBrbmF2X3JhbmdlX2luZm8sIGxpc3QpCiAKICNkZWZpbmUgZm9yX2VhY2hfcG9vbChrZGV2LCBwb29sKQkJCQlcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb29sLCAma2Rldi0+cG9vbHMsIGxpc3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9rbmF2X3Ftc3NfcXVldWUuYyBiL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zc19xdWV1ZS5jCmluZGV4IDBhMmM4NjMuLjliOGRkNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zc19xdWV1ZS5jCisrKyBiL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zc19xdWV1ZS5jCkBAIC03ODUsNyArNzg1LDcgQEAKIAkJZGV2X2VycihrZGV2LT5kZXYsICJvdXQgb2YgZGVzY3MgaW4gcmVnaW9uKCVkKSBmb3IgcG9vbCglcylcbiIsCiAJCQlyZWdpb25faWQsIG5hbWUpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfdW5sb2NrOwogCX0KIAogCS8qIFJlZ2lvbiBtYWludGFpbnMgYSBzb3J0ZWQgKGJ5IHJlZ2lvbiBvZmZzZXQpIGxpc3Qgb2YgcG9vbHMKQEAgLTgxNSwxNSArODE1LDE2IEBACiAJCWRldl9lcnIoa2Rldi0+ZGV2LCAicG9vbCglcykgY3JlYXRlIGZhaWxlZDogZnJhZ21lbnRlZCBkZXNjIHBvb2wgaW4gcmVnaW9uKCVkKVxuIiwKIAkJCW5hbWUsIHJlZ2lvbl9pZCk7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOworCQlnb3RvIGVycl91bmxvY2s7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZrbmF2X2Rldl9sb2NrKTsKIAlrZGVzY19maWxsX3Bvb2wocG9vbCk7CiAJcmV0dXJuIHBvb2w7CiAKLWVycjoKK2Vycl91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZrbmF2X2Rldl9sb2NrKTsKK2VycjoKIAlrZnJlZShwb29sLT5uYW1lKTsKIAlkZXZtX2tmcmVlKGtkZXYtPmRldiwgcG9vbCk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKQEAgLTEzMDUsMTQgKzEzMDYsMTQgQEAKIHN0YXRpYyB2b2lkIGtuYXZfcXVldWVfZnJlZV9yZWdpb25zKHN0cnVjdCBrbmF2X2RldmljZSAqa2RldikKIHsKIAlzdHJ1Y3Qga25hdl9yZWdpb24gKnJlZ2lvbjsKLQlzdHJ1Y3Qga25hdl9wb29sICpwb29sOworCXN0cnVjdCBrbmF2X3Bvb2wgKnBvb2wsICp0bXA7CiAJdW5zaWduZWQgc2l6ZTsKIAogCWZvciAoOzspIHsKIAkJcmVnaW9uID0gZmlyc3RfcmVnaW9uKGtkZXYpOwogCQlpZiAoIXJlZ2lvbikKIAkJCWJyZWFrOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvb2wsICZyZWdpb24tPnBvb2xzLCByZWdpb25faW5zdCkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvb2wsIHRtcCwgJnJlZ2lvbi0+cG9vbHMsIHJlZ2lvbl9pbnN0KQogCQkJa25hdl9wb29sX2Rlc3Ryb3kocG9vbCk7CiAKIAkJc2l6ZSA9IHJlZ2lvbi0+dmlydF9lbmQgLSByZWdpb24tPnZpcnRfc3RhcnQ7CkBAIC0xNjM5LDcgKzE2NDAsNyBAQAogCXNpemUgPSAoMSA8PCBrZGV2LT5pbnN0X3NoaWZ0KSAqIGtkZXYtPm51bV9xdWV1ZXNfaW5fdXNlOwogCWtkZXYtPmluc3RhbmNlcyA9IGRldm1fa3phbGxvYyhrZGV2LT5kZXYsIHNpemUsIEdGUF9LRVJORUwpOwogCWlmICgha2Rldi0+aW5zdGFuY2VzKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yX2VhY2hfcXVldWVfcmFuZ2Uoa2RldiwgcmFuZ2UpIHsKIAkJaWYgKHJhbmdlLT5vcHMgJiYgcmFuZ2UtPm9wcy0+aW5pdF9yYW5nZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9LY29uZmlnIGIvZHJpdmVycy9zb2MvdmVyc2F0aWxlL0tjb25maWcKaW5kZXggYmY1ZWU5Yy4uYTkyOGE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvdmVyc2F0aWxlL0tjb25maWcKKysrIGIvZHJpdmVycy9zb2MvdmVyc2F0aWxlL0tjb25maWcKQEAgLTEsNiArMSwxNSBAQAogIwogIyBBUk0gVmVyc2F0aWxlIFNvQyBkcml2ZXJzCiAjCitjb25maWcgU09DX0lOVEVHUkFUT1JfQ00KKwlib29sICJTb0MgYnVzIGRldmljZSBmb3IgdGhlIEFSTSBJbnRlZ3JhdG9yIHBsYXRmb3JtIGNvcmUgbW9kdWxlcyIKKwlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUgorCXNlbGVjdCBTT0NfQlVTCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgU29DIGJ1cyBvbiB0aGUgQVJNIEludGVncmF0b3IgcGxhdGZvcm0KKwkgIGNvcmUgbW9kdWxlcyBwcm92aWRpbmcgc29tZSBzeXNmcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQVNJQworCSAgdmFyaWFudC4KKwogY29uZmlnIFNPQ19SRUFMVklFVwogCWJvb2wgIlNvQyBidXMgZGV2aWNlIGZvciB0aGUgQVJNIFJlYWxWaWV3IHBsYXRmb3JtcyIKIAlkZXBlbmRzIG9uIEFSQ0hfUkVBTFZJRVcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9NYWtlZmlsZSBiL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9NYWtlZmlsZQppbmRleCBhZDU0NzQzLi5jZjYxMmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NvYy92ZXJzYXRpbGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zb2MvdmVyc2F0aWxlL01ha2VmaWxlCkBAIC0xICsxLDIgQEAKK29iai0kKENPTkZJR19TT0NfSU5URUdSQVRPUl9DTSkJKz0gc29jLWludGVncmF0b3Iubwogb2JqLSQoQ09ORklHX1NPQ19SRUFMVklFVykJKz0gc29jLXJlYWx2aWV3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9zb2MtaW50ZWdyYXRvci5jIGIvZHJpdmVycy9zb2MvdmVyc2F0aWxlL3NvYy1pbnRlZ3JhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkN2QzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc29jL3ZlcnNhdGlsZS9zb2MtaW50ZWdyYXRvci5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMdGQuCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c19zb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9JRF9PRkZTRVQJMHgwMAorCitzdGF0aWMgdTMyIGludGVncmF0b3JfY29yZWlkOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbnRlZ3JhdG9yX2NtX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhcm0sY29yZS1tb2R1bGUtaW50ZWdyYXRvciIsIH0sCisJeyB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaW50ZWdyYXRvcl9hcmNoX3N0cih1MzIgaWQpCit7CisJc3dpdGNoICgoaWQgPj4gMTYpICYgMHhmZikgeworCWNhc2UgMHgwMDoKKwkJcmV0dXJuICJBU0IgbGl0dGxlLWVuZGlhbiI7CisJY2FzZSAweDAxOgorCQlyZXR1cm4gIkFIQiBsaXR0bGUtZW5kaWFuIjsKKwljYXNlIDB4MDM6CisJCXJldHVybiAiQUhCLUxpdGUgc3lzdGVtIGJ1cywgYmktZW5kaWFuIjsKKwljYXNlIDB4MDQ6CisJCXJldHVybiAiQUhCIjsKKwljYXNlIDB4MDg6CisJCXJldHVybiAiQUhCIHN5c3RlbSBidXMsIEFTQiBwcm9jZXNzb3IgYnVzIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVua25vd24iOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmludGVncmF0b3JfZnBnYV9zdHIodTMyIGlkKQoreworCXN3aXRjaCAoKGlkID4+IDEyKSAmIDB4ZikgeworCWNhc2UgMHgwMToKKwkJcmV0dXJuICJYQzQwNjIiOworCWNhc2UgMHgwMjoKKwkJcmV0dXJuICJYQzQwODUiOworCWNhc2UgMHgwMzoKKwkJcmV0dXJuICJYVkM2MDAiOworCWNhc2UgMHgwNDoKKwkJcmV0dXJuICJFUE03MjU2QUUgKEFsdGVyYSBQTEQpIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVua25vd24iOworCX0KK30KKworc3RhdGljIHNzaXplX3QgaW50ZWdyYXRvcl9nZXRfbWFuZihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlMDJ4XG4iLCBpbnRlZ3JhdG9yX2NvcmVpZCA+PiAyNCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpbnRlZ3JhdG9yX21hbmZfYXR0ciA9CisJX19BVFRSKG1hbnVmYWN0dXJlciwgIFNfSVJVR08sIGludGVncmF0b3JfZ2V0X21hbmYsICBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgaW50ZWdyYXRvcl9nZXRfYXJjaChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaW50ZWdyYXRvcl9hcmNoX3N0cihpbnRlZ3JhdG9yX2NvcmVpZCkpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaW50ZWdyYXRvcl9hcmNoX2F0dHIgPQorCV9fQVRUUihhcmNoLCAgU19JUlVHTywgaW50ZWdyYXRvcl9nZXRfYXJjaCwgIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBpbnRlZ3JhdG9yX2dldF9mcGdhKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpbnRlZ3JhdG9yX2ZwZ2Ffc3RyKGludGVncmF0b3JfY29yZWlkKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpbnRlZ3JhdG9yX2ZwZ2FfYXR0ciA9CisJX19BVFRSKGZwZ2EsICBTX0lSVUdPLCBpbnRlZ3JhdG9yX2dldF9mcGdhLCAgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IGludGVncmF0b3JfZ2V0X2J1aWxkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJTAyeFxuIiwgKGludGVncmF0b3JfY29yZWlkID4+IDQpICYgMHhGRik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpbnRlZ3JhdG9yX2J1aWxkX2F0dHIgPQorCV9fQVRUUihidWlsZCwgIFNfSVJVR08sIGludGVncmF0b3JfZ2V0X2J1aWxkLCAgTlVMTCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGludGVncmF0b3Jfc29jX2luaXQodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcDsKKwlzdHJ1Y3Qgc29jX2RldmljZSAqc29jX2RldjsKKwlzdHJ1Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgKnNvY19kZXZfYXR0cjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBpbnRlZ3JhdG9yX2NtX21hdGNoKTsKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN5c2Nvbl9yZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAobnApOworCWlmIChJU19FUlIoc3lzY29uX3JlZ21hcCkpCisJCXJldHVybiBQVFJfRVJSKHN5c2Nvbl9yZWdtYXApOworCisJcmV0ID0gcmVnbWFwX3JlYWQoc3lzY29uX3JlZ21hcCwgSU5URUdSQVRPUl9IRFJfSURfT0ZGU0VULAorCQkJICAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpbnRlZ3JhdG9yX2NvcmVpZCA9IHZhbDsKKworCXNvY19kZXZfYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCpzb2NfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNvY19kZXZfYXR0cikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzb2NfZGV2X2F0dHItPnNvY19pZCA9ICJJbnRlZ3JhdG9yIjsKKwlzb2NfZGV2X2F0dHItPm1hY2hpbmUgPSAiSW50ZWdyYXRvciI7CisJc29jX2Rldl9hdHRyLT5mYW1pbHkgPSAiVmVyc2F0aWxlIjsKKwlzb2NfZGV2ID0gc29jX2RldmljZV9yZWdpc3Rlcihzb2NfZGV2X2F0dHIpOworCWlmIChJU19FUlIoc29jX2RldikpIHsKKwkJa2ZyZWUoc29jX2Rldl9hdHRyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldiA9IHNvY19kZXZpY2VfdG9fZGV2aWNlKHNvY19kZXYpOworCisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmludGVncmF0b3JfbWFuZl9hdHRyKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmaW50ZWdyYXRvcl9hcmNoX2F0dHIpOworCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZpbnRlZ3JhdG9yX2ZwZ2FfYXR0cik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmludGVncmF0b3JfYnVpbGRfYXR0cik7CisKKwlkZXZfaW5mbyhkZXYsICJEZXRlY3RlZCBBUk0gY29yZSBtb2R1bGU6XG4iKTsKKwlkZXZfaW5mbyhkZXYsICIgICAgTWFudWZhY3R1cmVyOiAlMDJ4XG4iLCAodmFsID4+IDI0KSk7CisJZGV2X2luZm8oZGV2LCAiICAgIEFyY2hpdGVjdHVyZTogJXNcbiIsIGludGVncmF0b3JfYXJjaF9zdHIodmFsKSk7CisJZGV2X2luZm8oZGV2LCAiICAgIEZQR0E6ICVzXG4iLCBpbnRlZ3JhdG9yX2ZwZ2Ffc3RyKHZhbCkpOworCWRldl9pbmZvKGRldiwgIiAgICBCdWlsZDogJTAyeFxuIiwgKHZhbCA+PiA0KSAmIDB4RkYpOworCWRldl9pbmZvKGRldiwgIiAgICBSZXY6ICVjXG4iLCAoJ0EnICsgKHZhbCAmIDB4MDMpKSk7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChpbnRlZ3JhdG9yX3NvY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1jb2xkZmlyZS1xc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGktY29sZGZpcmUtcXNwaS5jCmluZGV4IGUyZmE2MjguLjQxYjVkYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1jb2xkZmlyZS1xc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWNvbGRmaXJlLXFzcGkuYwpAQCAtNDkxLDcgKzQ5MSw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IG1jZnFzcGlfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktb3Jpb24uYyBiL2RyaXZlcnMvc3BpL3NwaS1vcmlvbi5jCmluZGV4IGM3NmI3ZDcuLjljMjE3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1vcmlvbi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1vcmlvbi5jCkBAIC01MjMsNyArNTIzLDcgQEAKIAogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IG9yaW9uX3NwaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1wbDAyMi5jIGIvZHJpdmVycy9zcGkvc3BpLXBsMDIyLmMKaW5kZXggZmMyZGQ4NC4uODljYTE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXBsMDIyLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXBsMDIyLmMKQEAgLTIzNzcsNyArMjM3Nyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwbDAyMl9kZXZfcG1fb3BzID0gewogCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHBsMDIyX3N1c3BlbmQsIHBsMDIyX3Jlc3VtZSkKLQlTRVRfUE1fUlVOVElNRV9QTV9PUFMocGwwMjJfcnVudGltZV9zdXNwZW5kLCBwbDAyMl9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKKwlTRVRfUlVOVElNRV9QTV9PUFMocGwwMjJfcnVudGltZV9zdXNwZW5kLCBwbDAyMl9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmVuZG9yX2RhdGEgdmVuZG9yX2FybSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguYyBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguYwppbmRleCA5ZTllMGY5Li40MjlmZjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC5jCkBAIC0xMzA3LDcgKzEzMDcsNyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBweGEyeHhfc3BpX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXF1cC5jIGIvZHJpdmVycy9zcGkvc3BpLXF1cC5jCmluZGV4IDlmODNkMjkuLjNkMGFiMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1xdXAuYworKysgYi9kcml2ZXJzL3NwaS9zcGktcXVwLmMKQEAgLTY0Niw3ICs2NDYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzcGlfcXVwX3BtX3N1c3BlbmRfcnVudGltZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOwpAQCAtNjcyLDcgKzY3Miw3IEBACiAJd3JpdGVsX3JlbGF4ZWQoY29uZmlnLCBjb250cm9sbGVyLT5iYXNlICsgUVVQX0NPTkZJRyk7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBzcGlfcXVwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2aWNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXJvY2tjaGlwLmMgYi9kcml2ZXJzL3NwaS9zcGktcm9ja2NoaXAuYwppbmRleCA4N2JjMTZmLi4yOWFiOWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcm9ja2NoaXAuYworKysgYi9kcml2ZXJzL3NwaS9zcGktcm9ja2NoaXAuYwpAQCAtODAxLDcgKzgwMSw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCByb2NrY2hpcF9zcGlfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC04MjksNyArODI5LDcgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJvY2tjaGlwX3NwaV9wbSA9IHsKIAlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhyb2NrY2hpcF9zcGlfc3VzcGVuZCwgcm9ja2NoaXBfc3BpX3Jlc3VtZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1zM2M2NHh4LmMgYi9kcml2ZXJzL3NwaS9zcGktczNjNjR4eC5jCmluZGV4IDQ4MDEzM2UuLmVjNzRlMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1zM2M2NHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXMzYzY0eHguYwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHMzYzY0eHhfc3BpX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMTI5Niw3ICsxMjk2LDcgQEAKIAogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzM2M2NHh4X3NwaV9wbSA9IHsKIAlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhzM2M2NHh4X3NwaV9zdXNwZW5kLCBzM2M2NHh4X3NwaV9yZXN1bWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2dkbTcyeHgvS2NvbmZpZwppbmRleCA1ODM2NTAzLi5iZjExYTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ2RtNzJ4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nZG03Mnh4L0tjb25maWcKQEAgLTUzLDcgKzUzLDcgQEAKIAogY29uZmlnIFdJTUFYX0dETTcyWFhfVVNCX1BNCiAJYm9vbCAiRW5hYmxlIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBNX1JVTlRJTUUKKwlkZXBlbmRzIG9uIFBNCiAJaGVscAogCSAgRW5hYmxlIFVTQiBwb3dlciBtYW5hZ2VtZW50IGluIG9yZGVyIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbgogCSAgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBub3QgaW4gdXNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9pc2wyOTAyOC5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9pc2wyOTAyOC5jCmluZGV4IDYwMTQ2MjUuLmU5NjkxMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvaXNsMjkwMjguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L2lzbDI5MDI4LmMKQEAgLTUzNyw3ICs1MzcsOCBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGlzbDI5MDI4X2lkKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaXNsMjkwMjhfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImlzaWwsaXNsMjkwMjgiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiaXNsLGlzbDI5MDI4IiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImlzaWwsaXNsMjkwMjgiLCB9LC8qIGRlcHJlY2F0ZWQsIGRvbid0IHVzZSAqLwogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpc2wyOTAyOF9vZl9tYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvdHJhY2VmaWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvdHJhY2VmaWxlLmMKaW5kZXggN2UzZjZhNC4uNzU2MTAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL3RyYWNlZmlsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy90cmFjZWZpbGUuYwpAQCAtMTAyNSw4ICsxMDI1LDggQEAKIAogCQkJaWYgKGZfcG9zID49IChvZmZfdCljZnNfdHJhY2VmaWxlX3NpemUpCiAJCQkJZl9wb3MgPSAwOwotCQkJZWxzZSBpZiAoZl9wb3MgPiBpX3NpemVfcmVhZChmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSkpCi0JCQkJZl9wb3MgPSBpX3NpemVfcmVhZChmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCQllbHNlIGlmIChmX3BvcyA+IGlfc2l6ZV9yZWFkKGZpbGVfaW5vZGUoZmlscCkpKQorCQkJCWZfcG9zID0gaV9zaXplX3JlYWQoZmlsZV9pbm9kZShmaWxwKSk7CiAKIAkJCWJ1ZiA9IGttYXAodGFnZS0+cGFnZSk7CiAJCQlyYyA9IHZmc193cml0ZShmaWxwLCAoX19mb3JjZSBjb25zdCBjaGFyIF9fdXNlciAqKWJ1ZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2RjYWNoZS5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZGNhY2hlLmMKaW5kZXggNDM5ZTQ4Ny4uZjY5MjI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZGNhY2hlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZGNhY2hlLmMKQEAgLTE1MSwxMCArMTUxLDEwIEBACiB7CiAJTEFTU0VSVChkZSk7CiAKLQlDREVCVUcoRF9ERU5UUlksICIlcyBkZW50cnkgJS4qcyAoJXAsIHBhcmVudCAlcCwgaW5vZGUgJXApICVzJXNcbiIsCisJQ0RFQlVHKERfREVOVFJZLCAiJXMgZGVudHJ5ICVwZCAoJXAsIHBhcmVudCAlcCwgaW5vZGUgJXApICVzJXNcbiIsCiAJICAgICAgIGRfbHVzdHJlX2ludmFsaWQoKHN0cnVjdCBkZW50cnkgKilkZSkgPyAiZGVsZXRpbmciIDogImtlZXBpbmciLAotCSAgICAgICBkZS0+ZF9uYW1lLmxlbiwgZGUtPmRfbmFtZS5uYW1lLCBkZSwgZGUtPmRfcGFyZW50LCBkZS0+ZF9pbm9kZSwKLQkgICAgICAgZF91bmhhc2hlZCgoc3RydWN0IGRlbnRyeSAqKWRlKSA/ICIiIDogImhhc2hlZCwiLAorCSAgICAgICBkZSwgZGUsIGRlLT5kX3BhcmVudCwgZGUtPmRfaW5vZGUsCisJICAgICAgIGRfdW5oYXNoZWQoZGUpID8gIiIgOiAiaGFzaGVkLCIsCiAJICAgICAgIGxpc3RfZW1wdHkoJmRlLT5kX3N1YmRpcnMpID8gIiIgOiAic3ViZGlycyIpOwogCiAJLyoga2VybmVsID49IDIuNi4zOCBsYXN0IHJlZmNvdW50IGlzIGRlY3JlYXNlZCBhZnRlciB0aGlzIGZ1bmN0aW9uLiAqLwpAQCAtMTgwLDggKzE4MCw4IEBACiB7CiAJTEFTU0VSVChkZSAhPSBOVUxMKTsKIAotCUNERUJVRyhEX0RFTlRSWSwgImxkZCBvbiBkZW50cnkgJS4qcyAoJXApIHBhcmVudCAlcCBpbm9kZSAlcCByZWZjICVkXG4iLAotCQlkZS0+ZF9uYW1lLmxlbiwgZGUtPmRfbmFtZS5uYW1lLCBkZSwgZGUtPmRfcGFyZW50LCBkZS0+ZF9pbm9kZSwKKwlDREVCVUcoRF9ERU5UUlksICJsZGQgb24gZGVudHJ5ICVwZCAoJXApIHBhcmVudCAlcCBpbm9kZSAlcCByZWZjICVkXG4iLAorCQlkZSwgZGUsIGRlLT5kX3BhcmVudCwgZGUtPmRfaW5vZGUsCiAJCWRfY291bnQoZGUpKTsKIAogCWlmIChkZS0+ZF9mc2RhdGEgPT0gTlVMTCkgewpAQCAtMjU4LDEwICsyNTgsOSBAQAogCSAgICAgICBpbm9kZS0+aV9pbm8sIGlub2RlLT5pX2dlbmVyYXRpb24sIGlub2RlKTsKIAogCWxsX2xvY2tfZGNhY2hlKGlub2RlKTsKLQlsbF9kX2hsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlbnRyeSwgcCwgJmlub2RlLT5pX2RlbnRyeSwgZF9hbGlhcykgewotCQlDREVCVUcoRF9ERU5UUlksICJkZW50cnkgaW4gZHJvcCAlLipzICglcCkgcGFyZW50ICVwICIKLQkJICAgICAgICJpbm9kZSAlcCBmbGFncyAlZFxuIiwgZGVudHJ5LT5kX25hbWUubGVuLAotCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LCBkZW50cnktPmRfcGFyZW50LAorCWxsX2RfaGxpc3RfZm9yX2VhY2hfZW50cnkoZGVudHJ5LCBwLCAmaW5vZGUtPmlfZGVudHJ5LCBkX3UuZF9hbGlhcykgeworCQlDREVCVUcoRF9ERU5UUlksICJkZW50cnkgaW4gZHJvcCAlcGQgKCVwKSBwYXJlbnQgJXAgIgorCQkgICAgICAgImlub2RlICVwIGZsYWdzICVkXG4iLCBkZW50cnksIGRlbnRyeSwgZGVudHJ5LT5kX3BhcmVudCwKIAkJICAgICAgIGRlbnRyeS0+ZF9pbm9kZSwgZGVudHJ5LT5kX2ZsYWdzKTsKIAogCQlpZiAodW5saWtlbHkoZGVudHJ5ID09IGRlbnRyeS0+ZF9zYi0+c19yb290KSkgewpAQCAtMzUyLDggKzM1MSw4IEBACiB7CiAJaW50IHJjOwogCi0JQ0RFQlVHKERfVkZTVFJBQ0UsICJWRlMgT3A6bmFtZT0lcywgZmxhZ3M9JXVcbiIsCi0JICAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGZsYWdzKTsKKwlDREVCVUcoRF9WRlNUUkFDRSwgIlZGUyBPcDpuYW1lPSVwZCwgZmxhZ3M9JXVcbiIsCisJICAgICAgIGRlbnRyeSwgZmxhZ3MpOwogCiAJcmMgPSBsbF9yZXZhbGlkYXRlX2RlbnRyeShkZW50cnksIGZsYWdzKTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9kaXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2Rpci5jCmluZGV4IGIwYmI3MDkuLmE3OWZkNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2Rpci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2Rpci5jCkBAIC01OTMsNyArNTkzLDcgQEAKIAogc3RhdGljIGludCBsbF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKIHsKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZQk9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZQkJKmlub2RlCT0gZmlsZV9pbm9kZShmaWxwKTsKIAlzdHJ1Y3QgbGxfZmlsZV9kYXRhCSpsZmQJPSBMVVNUUkVfRlBSSVZBVEUoZmlscCk7CiAJc3RydWN0IGxsX3NiX2luZm8JKnNiaQk9IGxsX2kyc2JpKGlub2RlKTsKIAlpbnQJCQloYXNoNjQJPSBzYmktPmxsX2ZsYWdzICYgTExfU0JJXzY0QklUX0hBU0g7CkBAIC0xMjQyLDcgKzEyNDIsNyBAQAogCiBzdGF0aWMgbG9uZyBsbF9kaXJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKIAlzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpID0gbGxfaTJzYmkoaW5vZGUpOwogCXN0cnVjdCBvYmRfaW9jdGxfZGF0YSAqZGF0YTsKIAlpbnQgcmMgPSAwOwpAQCAtMTM4OSw3ICsxMzg5LDcgQEAKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCi0JCWlmIChpbm9kZS0+aV9zYi0+c19yb290ID09IGZpbGUtPmZfZGVudHJ5KQorCQlpZiAoaXNfcm9vdF9pbm9kZShpbm9kZSkpCiAJCQlzZXRfZGVmYXVsdCA9IDE7CiAKIAkJLyogaW4gdjEgYW5kIHYzIGNhc2VzIGx1bXYxIHBvaW50cyB0byBkYXRhICovCkBAIC0xNzgwLDggKzE3ODAsNyBAQAogCQlyZXR1cm4gbGxfZmx1c2hfY3R4KGlub2RlKTsKICNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCiAJY2FzZSBMTF9JT0NfUk1UQUNMOiB7Ci0JICAgIGlmIChzYmktPmxsX2ZsYWdzICYgTExfU0JJX1JNVF9DTElFTlQgJiYKLQkJaW5vZGUgPT0gaW5vZGUtPmlfc2ItPnNfcm9vdC0+ZF9pbm9kZSkgeworCSAgICBpZiAoc2JpLT5sbF9mbGFncyAmIExMX1NCSV9STVRfQ0xJRU5UICYmIGlzX3Jvb3RfaW5vZGUoaW5vZGUpKSB7CiAJCXN0cnVjdCBsbF9maWxlX2RhdGEgKmZkID0gTFVTVFJFX0ZQUklWQVRFKGZpbGUpOwogCiAJCUxBU1NFUlQoZmQgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9maWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9maWxlLmMKaW5kZXggYzk5Yjc0MS4uYTJhZTlhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvZmlsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2ZpbGUuYwpAQCAtMjY2LDYgKzI2NiwxMCBAQAogewogCXN0cnVjdCBsbF9maWxlX2RhdGEgKmZkID0gTFVTVFJFX0ZQUklWQVRFKGZpbGUpOwogCXN0cnVjdCBsbF9pbm9kZV9pbmZvICpsbGkgPSBsbF9pMmluZm8oaW5vZGUpOworCWludCBsb2NrbW9kZTsKKwlfX3U2NCBmbGFncyA9IExETE1fRkxfQkxPQ0tfR1JBTlRFRCB8IExETE1fRkxfVEVTVF9MT0NLOworCXN0cnVjdCBsdXN0cmVfaGFuZGxlIGxvY2toOworCWxkbG1fcG9saWN5X2RhdGFfdCBwb2xpY3kgPSB7LmxfaW5vZGViaXRzPXtNRFNfSU5PREVMT0NLX09QRU59fTsKIAlpbnQgcmMgPSAwOwogCiAJLyogY2xlYXIgZ3JvdXAgbG9jaywgaWYgcHJlc2VudCAqLwpAQCAtMjkyLDM5ICsyOTYsMjYgQEAKIAogCS8qIExldCdzIHNlZSBpZiB3ZSBoYXZlIGdvb2QgZW5vdWdoIE9QRU4gbG9jayBvbiB0aGUgZmlsZSBhbmQgaWYKIAkgICB3ZSBjYW4gc2tpcCB0YWxraW5nIHRvIE1EUyAqLwotCWlmIChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkgeyAvKiBDYW4gdGhpcyBldmVyIGJlIGZhbHNlPyAqLwotCQlpbnQgbG9ja21vZGU7Ci0JCV9fdTY0IGZsYWdzID0gTERMTV9GTF9CTE9DS19HUkFOVEVEIHwgTERMTV9GTF9URVNUX0xPQ0s7Ci0JCXN0cnVjdCBsdXN0cmVfaGFuZGxlIGxvY2toOwotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7Ci0JCWxkbG1fcG9saWN5X2RhdGFfdCBwb2xpY3kgPSB7LmxfaW5vZGViaXRzPXtNRFNfSU5PREVMT0NLX09QRU59fTsKIAotCQltdXRleF9sb2NrKCZsbGktPmxsaV9vY2hfbXV0ZXgpOwotCQlpZiAoZmQtPmZkX29tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJCWxvY2ttb2RlID0gTENLX0NXOwotCQkJTEFTU0VSVChsbGktPmxsaV9vcGVuX2ZkX3dyaXRlX2NvdW50KTsKLQkJCWxsaS0+bGxpX29wZW5fZmRfd3JpdGVfY291bnQtLTsKLQkJfSBlbHNlIGlmIChmZC0+ZmRfb21vZGUgJiBGTU9ERV9FWEVDKSB7Ci0JCQlsb2NrbW9kZSA9IExDS19QUjsKLQkJCUxBU1NFUlQobGxpLT5sbGlfb3Blbl9mZF9leGVjX2NvdW50KTsKLQkJCWxsaS0+bGxpX29wZW5fZmRfZXhlY19jb3VudC0tOwotCQl9IGVsc2UgewotCQkJbG9ja21vZGUgPSBMQ0tfQ1I7Ci0JCQlMQVNTRVJUKGxsaS0+bGxpX29wZW5fZmRfcmVhZF9jb3VudCk7Ci0JCQlsbGktPmxsaV9vcGVuX2ZkX3JlYWRfY291bnQtLTsKLQkJfQotCQltdXRleF91bmxvY2soJmxsaS0+bGxpX29jaF9tdXRleCk7Ci0KLQkJaWYgKCFtZF9sb2NrX21hdGNoKG1kX2V4cCwgZmxhZ3MsIGxsX2lub2RlMmZpZChpbm9kZSksCi0JCQkJICAgTERMTV9JQklUUywgJnBvbGljeSwgbG9ja21vZGUsCi0JCQkJICAgJmxvY2toKSkgewotCQkJcmMgPSBsbF9tZF9yZWFsX2Nsb3NlKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLAotCQkJCQkgICAgICBmZC0+ZmRfb21vZGUpOwotCQl9CisJbXV0ZXhfbG9jaygmbGxpLT5sbGlfb2NoX211dGV4KTsKKwlpZiAoZmQtPmZkX29tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJbG9ja21vZGUgPSBMQ0tfQ1c7CisJCUxBU1NFUlQobGxpLT5sbGlfb3Blbl9mZF93cml0ZV9jb3VudCk7CisJCWxsaS0+bGxpX29wZW5fZmRfd3JpdGVfY291bnQtLTsKKwl9IGVsc2UgaWYgKGZkLT5mZF9vbW9kZSAmIEZNT0RFX0VYRUMpIHsKKwkJbG9ja21vZGUgPSBMQ0tfUFI7CisJCUxBU1NFUlQobGxpLT5sbGlfb3Blbl9mZF9leGVjX2NvdW50KTsKKwkJbGxpLT5sbGlfb3Blbl9mZF9leGVjX2NvdW50LS07CiAJfSBlbHNlIHsKLQkJQ0VSUk9SKCJSZWxlYXNpbmcgYSBmaWxlICVwIHdpdGggbmVnYXRpdmUgZGVudHJ5ICVwLiBOYW1lICVzIiwKLQkJICAgICAgIGZpbGUsIGZpbGUtPmZfZGVudHJ5LCBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQlsb2NrbW9kZSA9IExDS19DUjsKKwkJTEFTU0VSVChsbGktPmxsaV9vcGVuX2ZkX3JlYWRfY291bnQpOworCQlsbGktPmxsaV9vcGVuX2ZkX3JlYWRfY291bnQtLTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZsbGktPmxsaV9vY2hfbXV0ZXgpOworCisJaWYgKCFtZF9sb2NrX21hdGNoKG1kX2V4cCwgZmxhZ3MsIGxsX2lub2RlMmZpZChpbm9kZSksCisJCQkgICBMRExNX0lCSVRTLCAmcG9saWN5LCBsb2NrbW9kZSwgJmxvY2toKSkKKwkJcmMgPSBsbF9tZF9yZWFsX2Nsb3NlKGlub2RlLCBmZC0+ZmRfb21vZGUpOwogCiBvdXQ6CiAJTFVTVFJFX0ZQUklWQVRFKGZpbGUpID0gTlVMTDsKQEAgLTM1MCw4ICszNDEsNyBAQAogCSAgICAgICBpbm9kZS0+aV9nZW5lcmF0aW9uLCBpbm9kZSk7CiAKICNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCi0JaWYgKHNiaS0+bGxfZmxhZ3MgJiBMTF9TQklfUk1UX0NMSUVOVCAmJgotCSAgICBpbm9kZSA9PSBpbm9kZS0+aV9zYi0+c19yb290LT5kX2lub2RlKSB7CisJaWYgKHNiaS0+bGxfZmxhZ3MgJiBMTF9TQklfUk1UX0NMSUVOVCAmJiBpc19yb290X2lub2RlKGlub2RlKSkgewogCQlzdHJ1Y3QgbGxfZmlsZV9kYXRhICpmZCA9IExVU1RSRV9GUFJJVkFURShmaWxlKTsKIAogCQlMQVNTRVJUKGZkICE9IE5VTEwpOwpAQCAtMzYzLDcgKzM1Myw3IEBACiAJfQogI2VuZGlmCiAKLQlpZiAoaW5vZGUtPmlfc2ItPnNfcm9vdCAhPSBmaWxlLT5mX2RlbnRyeSkKKwlpZiAoIWlzX3Jvb3RfaW5vZGUoaW5vZGUpKQogCQlsbF9zdGF0c19vcHNfdGFsbHkoc2JpLCBMUFJPQ19MTF9SRUxFQVNFLCAxKTsKIAlmZCA9IExVU1RSRV9GUFJJVkFURShmaWxlKTsKIAlMQVNTRVJUKGZkICE9IE5VTEwpOwpAQCAtMzc1LDcgKzM2NSw3IEBACiAJICAgIGxsaS0+bGxpX29wZW5kaXJfcGlkICE9IDApCiAJCWxsX3N0b3Bfc3RhdGFoZWFkKGlub2RlLCBsbGktPmxsaV9vcGVuZGlyX2tleSk7CiAKLQlpZiAoaW5vZGUtPmlfc2ItPnNfcm9vdCA9PSBmaWxlLT5mX2RlbnRyeSkgeworCWlmIChpc19yb290X2lub2RlKGlub2RlKSkgewogCQlMVVNUUkVfRlBSSVZBVEUoZmlsZSkgPSBOVUxMOwogCQlsbF9maWxlX2RhdGFfcHV0KGZkKTsKIAkJcmV0dXJuIDA7CkBAIC0zOTQsMjEgKzM4NCwxOSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBsbF9pbnRlbnRfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpsbW0sCitzdGF0aWMgaW50IGxsX2ludGVudF9maWxlX29wZW4oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB2b2lkICpsbW0sCiAJCQkgICAgICAgaW50IGxtbXNpemUsIHN0cnVjdCBsb29rdXBfaW50ZW50ICppdHApCiB7Ci0Jc3RydWN0IGxsX3NiX2luZm8gKnNiaSA9IGxsX2kyc2JpKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKLQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQ7Ci0JY29uc3QgY2hhciAqbmFtZSA9IGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZTsKLQljb25zdCBpbnQgbGVuID0gZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5sZW47CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpID0gbGxfaTJzYmkoaW5vZGUpOworCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CisJY29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisJY29uc3QgaW50IGxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKIAlzdHJ1Y3QgbWRfb3BfZGF0YSAqb3BfZGF0YTsKIAlzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKnJlcTsKIAlfX3UzMiBvcGMgPSBMVVNUUkVfT1BDX0FOWTsKIAlpbnQgcmM7CiAKLQlpZiAoIXBhcmVudCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KIAkvKiBVc3VhbGx5IHdlIGNvbWUgaGVyZSBvbmx5IGZvciBORlNELCBhbmQgd2Ugd2FudCBvcGVuIGxvY2suCiAJICAgQnV0IHdlIGNhbiBhbHNvIGdldCBoZXJlIHdpdGggcHJlIDIuNi4xNSBwYXRjaGxlc3Mga2VybmVscywgYW5kIGluCiAJICAgdGhhdCBjYXNlIHRoYXQgbG9jayBpcyBhbHNvIG9rICovCkBAIC00MjUsNyArNDEzLDcgQEAKIAl9CiAKIAlvcF9kYXRhICA9IGxsX3ByZXBfbWRfb3BfZGF0YShOVUxMLCBwYXJlbnQtPmRfaW5vZGUsCi0JCQkJICAgICAgZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIG5hbWUsIGxlbiwKKwkJCQkgICAgICBpbm9kZSwgbmFtZSwgbGVuLAogCQkJCSAgICAgIE9fUkRXUiwgb3BjLCBOVUxMKTsKIAlpZiAoSVNfRVJSKG9wX2RhdGEpKQogCQlyZXR1cm4gUFRSX0VSUihvcF9kYXRhKTsKQEAgLTQ0MSw3ICs0MjksNyBAQAogCQlpZiAoIWl0X2Rpc3Bvc2l0aW9uKGl0cCwgRElTUF9PUEVOX09QRU4pIHx8CiAJCSAgICAgaXRfb3Blbl9lcnJvcihESVNQX09QRU5fT1BFTiwgaXRwKSkKIAkJCWdvdG8gb3V0OwotCQlsbF9yZWxlYXNlX29wZW5oYW5kbGUoZmlsZS0+Zl9kZW50cnksIGl0cCk7CisJCWxsX3JlbGVhc2Vfb3BlbmhhbmRsZShpbm9kZSwgaXRwKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC00NTYsMTAgKzQ0NCw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJjID0gbGxfcHJlcF9pbm9kZSgmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIHJlcSwgTlVMTCwgaXRwKTsKKwlyYyA9IGxsX3ByZXBfaW5vZGUoJmlub2RlLCByZXEsIE5VTEwsIGl0cCk7CiAJaWYgKCFyYyAmJiBpdHAtPmQubHVzdHJlLml0X2xvY2tfbW9kZSkKLQkJbGxfc2V0X2xvY2tfZGF0YShzYmktPmxsX21kX2V4cCwgZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsCi0JCQkJIGl0cCwgTlVMTCk7CisJCWxsX3NldF9sb2NrX2RhdGEoc2JpLT5sbF9tZF9leHAsIGlub2RlLCBpdHAsIE5VTEwpOwogCiBvdXQ6CiAJcHRscnBjX3JlcV9maW5pc2hlZChyZXEpOwpAQCAtNTAxLDcgKzQ4OCw3IEBACiBzdGF0aWMgaW50IGxsX2xvY2FsX29wZW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBsb29rdXBfaW50ZW50ICppdCwKIAkJCSBzdHJ1Y3QgbGxfZmlsZV9kYXRhICpmZCwgc3RydWN0IG9iZF9jbGllbnRfaGFuZGxlICpvY2gpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCXN0cnVjdCBsbF9pbm9kZV9pbmZvICpsbGkgPSBsbF9pMmluZm8oaW5vZGUpOwogCiAJTEFTU0VSVCghTFVTVFJFX0ZQUklWQVRFKGZpbGUpKTsKQEAgLTU3NCw3ICs1NjEsNyBAQAogCQlzcGluX3VubG9jaygmbGxpLT5sbGlfc2FfbG9jayk7CiAJfQogCi0JaWYgKGlub2RlLT5pX3NiLT5zX3Jvb3QgPT0gZmlsZS0+Zl9kZW50cnkpIHsKKwlpZiAoaXNfcm9vdF9pbm9kZShpbm9kZSkpIHsKIAkJTFVTVFJFX0ZQUklWQVRFKGZpbGUpID0gZmQ7CiAJCXJldHVybiAwOwogCX0KQEAgLTYzMiw3ICs2MTksNyBAQAogCQkJCWdvdG8gb3V0X29wZW5lcnI7CiAJCQl9CiAKLQkJCWxsX3JlbGVhc2Vfb3BlbmhhbmRsZShmaWxlLT5mX2RlbnRyeSwgaXQpOworCQkJbGxfcmVsZWFzZV9vcGVuaGFuZGxlKGlub2RlLCBpdCk7CiAJCX0KIAkJKCpvY2hfdXNlY291bnQpKys7CiAKQEAgLTY1Miw3ICs2MzksNyBAQAogCQkJICAgcmVzdWx0IGluIGEgZGVhZGxvY2sgKi8KIAkJCW11dGV4X3VubG9jaygmbGxpLT5sbGlfb2NoX211dGV4KTsKIAkJCWl0LT5pdF9jcmVhdGVfbW9kZSB8PSBNX0NIRUNLX1NUQUxFOwotCQkJcmMgPSBsbF9pbnRlbnRfZmlsZV9vcGVuKGZpbGUsIE5VTEwsIDAsIGl0KTsKKwkJCXJjID0gbGxfaW50ZW50X2ZpbGVfb3BlbihmaWxlLT5mX3BhdGguZGVudHJ5LCBOVUxMLCAwLCBpdCk7CiAJCQlpdC0+aXRfY3JlYXRlX21vZGUgJj0gfk1fQ0hFQ0tfU1RBTEU7CiAJCQlpZiAocmMpCiAJCQkJZ290byBvdXRfb3BlbmVycjsKQEAgLTEwNjUsNyArMTA1Miw3IEBACiBzdGF0aWMgYm9vbCBmaWxlX2lzX25vYXRpbWUoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQgPSBmaWxlLT5mX3BhdGgubW50OwotCWNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCWNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCiAJLyogQWRhcHRlZCBmcm9tIGZpbGVfYWNjZXNzZWQoKSBhbmQgdG91Y2hfYXRpbWUoKS4qLwogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT0FUSU1FKQpAQCAtMTA5MSw3ICsxMDc4LDcgQEAKIAogdm9pZCBsbF9pb19pbml0KHN0cnVjdCBjbF9pbyAqaW8sIGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgd3JpdGUpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCiAJaW8tPnUuY2lfcncuY3J3X25vbmJsb2NrID0gZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0s7CiAJaWYgKHdyaXRlKSB7CkBAIC0xMTE3LDcgKzExMDQsNyBAQAogCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgZW51bSBjbF9pb190eXBlIGlvdCwKIAkJICAgbG9mZl90ICpwcG9zLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaSA9IGxsX2kyaW5mbyhmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaSA9IGxsX2kyaW5mbyhmaWxlX2lub2RlKGZpbGUpKTsKIAlzdHJ1Y3QgbGxfZmlsZV9kYXRhICAqZmQgID0gTFVTVFJFX0ZQUklWQVRFKGZpbGUpOwogCXN0cnVjdCBjbF9pbwkgKmlvOwogCXNzaXplX3QJICAgICAgIHJlc3VsdDsKQEAgLTExNzgsMjAgKzExNjUsMjAgQEAKIAkvKiBJZiBhbnkgYml0IGJlZW4gcmVhZC93cml0dGVuIChyZXN1bHQgIT0gMCksIHdlIGp1c3QgcmV0dXJuCiAJICogc2hvcnQgcmVhZC93cml0ZSBpbnN0ZWFkIG9mIHJlc3RhcnQgaW8uICovCiAJaWYgKChyZXN1bHQgPT0gMCB8fCByZXN1bHQgPT0gLUVOT0RBVEEpICYmIGlvLT5jaV9uZWVkX3Jlc3RhcnQpIHsKLQkJQ0RFQlVHKERfVkZTVFJBQ0UsICJSZXN0YXJ0ICVzIG9uICVzIGZyb20gJWxsZCwgY291bnQ6JXpkXG4iLAorCQlDREVCVUcoRF9WRlNUUkFDRSwgIlJlc3RhcnQgJXMgb24gJXBEIGZyb20gJWxsZCwgY291bnQ6JXpkXG4iLAogCQkgICAgICAgaW90ID09IENJVF9SRUFEID8gInJlYWQiIDogIndyaXRlIiwKLQkJICAgICAgIGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwgKnBwb3MsIGNvdW50KTsKKwkJICAgICAgIGZpbGUsICpwcG9zLCBjb3VudCk7CiAJCUxBU1NFUlRGKGlvLT5jaV9ub2IgPT0gMCwgIiV6ZCIsIGlvLT5jaV9ub2IpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCiAJaWYgKGlvdCA9PSBDSVRfUkVBRCkgewogCQlpZiAocmVzdWx0ID49IDApCi0JCQlsbF9zdGF0c19vcHNfdGFsbHkobGxfaTJzYmkoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpLAorCQkJbGxfc3RhdHNfb3BzX3RhbGx5KGxsX2kyc2JpKGZpbGVfaW5vZGUoZmlsZSkpLAogCQkJCQkgICBMUFJPQ19MTF9SRUFEX0JZVEVTLCByZXN1bHQpOwogCX0gZWxzZSBpZiAoaW90ID09IENJVF9XUklURSkgewogCQlpZiAocmVzdWx0ID49IDApIHsKLQkJCWxsX3N0YXRzX29wc190YWxseShsbF9pMnNiaShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSksCisJCQlsbF9zdGF0c19vcHNfdGFsbHkobGxfaTJzYmkoZmlsZV9pbm9kZShmaWxlKSksCiAJCQkJCSAgIExQUk9DX0xMX1dSSVRFX0JZVEVTLCByZXN1bHQpOwogCQkJZmQtPmZkX3dyaXRlX2ZhaWxlZCA9IGZhbHNlOwogCQl9IGVsc2UgaWYgKHJlc3VsdCAhPSAtRVJFU1RBUlRTWVMpIHsKQEAgLTEzNTQsNyArMTM0MSw3IEBACiAJcmV0dXJuIGxsX2xvdl9yZWNyZWF0ZShpbm9kZSwgJm9pLCBvc3RfaWR4KTsKIH0KIAotaW50IGxsX2xvdl9zZXRzdHJpcGVfZWFfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK2ludCBsbF9sb3Zfc2V0c3RyaXBlX2VhX2luZm8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJICAgICBpbnQgZmxhZ3MsIHN0cnVjdCBsb3ZfdXNlcl9tZCAqbHVtLCBpbnQgbHVtX3NpemUpCiB7CiAJc3RydWN0IGxvdl9zdHJpcGVfbWQgKmxzbSA9IE5VTEw7CkBAIC0xMzcxLDIxICsxMzU4LDIwIEBACiAJfQogCiAJbGxfaW5vZGVfc2l6ZV9sb2NrKGlub2RlKTsKLQlyYyA9IGxsX2ludGVudF9maWxlX29wZW4oZmlsZSwgbHVtLCBsdW1fc2l6ZSwgJm9pdCk7CisJcmMgPSBsbF9pbnRlbnRfZmlsZV9vcGVuKGRlbnRyeSwgbHVtLCBsdW1fc2l6ZSwgJm9pdCk7CiAJaWYgKHJjKQogCQlnb3RvIG91dF91bmxvY2s7CiAJcmMgPSBvaXQuZC5sdXN0cmUuaXRfc3RhdHVzOwogCWlmIChyYyA8IDApCiAJCWdvdG8gb3V0X3JlcV9mcmVlOwogCi0JbGxfcmVsZWFzZV9vcGVuaGFuZGxlKGZpbGUtPmZfZGVudHJ5LCAmb2l0KTsKKwlsbF9yZWxlYXNlX29wZW5oYW5kbGUoaW5vZGUsICZvaXQpOwogCiBvdXRfdW5sb2NrOgogCWxsX2lub2RlX3NpemVfdW5sb2NrKGlub2RlKTsKIAlsbF9pbnRlbnRfcmVsZWFzZSgmb2l0KTsKIAljY2NfaW5vZGVfbHNtX3B1dChpbm9kZSwgbHNtKTsKIG91dDoKLQljbF9sb3ZfZGVsYXlfY3JlYXRlX2NsZWFyKCZmaWxlLT5mX2ZsYWdzKTsKIAlyZXR1cm4gcmM7CiBvdXRfcmVxX2ZyZWU6CiAJcHRscnBjX3JlcV9maW5pc2hlZCgoc3RydWN0IHB0bHJwY19yZXF1ZXN0ICopIG9pdC5kLmx1c3RyZS5pdF9kYXRhKTsKQEAgLTE0OTksNyArMTQ4NSw5IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJjID0gbGxfbG92X3NldHN0cmlwZV9lYV9pbmZvKGlub2RlLCBmaWxlLCBmbGFncywgbHVtcCwgbHVtX3NpemUpOworCXJjID0gbGxfbG92X3NldHN0cmlwZV9lYV9pbmZvKGlub2RlLCBmaWxlLT5mX3BhdGguZGVudHJ5LCBmbGFncywgbHVtcCwKKwkJCQkgICAgIGx1bV9zaXplKTsKKwljbF9sb3ZfZGVsYXlfY3JlYXRlX2NsZWFyKCZmaWxlLT5mX2ZsYWdzKTsKIAogCU9CRF9GUkVFX0xBUkdFKGx1bXAsIGx1bV9zaXplKTsKIAlyZXR1cm4gcmM7CkBAIC0xNTI2LDcgKzE1MTQsOSBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JcmMgPSBsbF9sb3Zfc2V0c3RyaXBlX2VhX2luZm8oaW5vZGUsIGZpbGUsIGZsYWdzLCBsdW12MSwgbHVtX3NpemUpOworCXJjID0gbGxfbG92X3NldHN0cmlwZV9lYV9pbmZvKGlub2RlLCBmaWxlLT5mX3BhdGguZGVudHJ5LCBmbGFncywgbHVtdjEsCisJCQkJICAgICAgbHVtX3NpemUpOworCWNsX2xvdl9kZWxheV9jcmVhdGVfY2xlYXIoJmZpbGUtPmZfZmxhZ3MpOwogCWlmIChyYyA9PSAwKSB7CiAJCXN0cnVjdCBsb3Zfc3RyaXBlX21kICpsc207CiAJCV9fdTMyIGdlbjsKQEAgLTE2MzEsMjIgKzE2MjEsMjEgQEAKIC8qKgogICogQ2xvc2UgaW5vZGUgb3BlbiBoYW5kbGUKICAqCi0gKiBccGFyYW0gZGVudHJ5IFtpbl0gICAgIGRlbnRyeSB3aGljaCBjb250YWlucyB0aGUgaW5vZGUKKyAqIFxwYXJhbSBpbm9kZSAgW2luXSAgICAgaW5vZGUgaW4gcXVlc3Rpb24KICAqIFxwYXJhbSBpdCAgICAgW2luLG91dF0gaW50ZW50IHdoaWNoIGNvbnRhaW5zIG9wZW4gaW5mbyBhbmQgcmVzdWx0CiAgKgogICogXHJldHZhbCAwICAgICBzdWNjZXNzCiAgKiBccmV0dmFsIDwwICAgIGZhaWx1cmUKICAqLwotaW50IGxsX3JlbGVhc2Vfb3BlbmhhbmRsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBsb29rdXBfaW50ZW50ICppdCkKK2ludCBsbF9yZWxlYXNlX29wZW5oYW5kbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxvb2t1cF9pbnRlbnQgKml0KQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IG9iZF9jbGllbnRfaGFuZGxlICpvY2g7CiAJaW50IHJjOwogCiAJTEFTU0VSVChpbm9kZSk7CiAKIAkvKiBSb290ID8gRG8gbm90aGluZy4gKi8KLQlpZiAoZGVudHJ5LT5kX2lub2RlLT5pX3NiLT5zX3Jvb3QgPT0gZGVudHJ5KQorCWlmIChpc19yb290X2lub2RlKGlub2RlKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBObyBvcGVuIGhhbmRsZSB0byBjbG9zZT8gTW92ZSBhd2F5ICovCkBAIC0xOTU5LDggKzE5NDgsOCBAQAogCWlmICghbGxzcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsbHNzLT5pbm9kZTEgPSBmaWxlMS0+Zl9kZW50cnktPmRfaW5vZGU7Ci0JbGxzcy0+aW5vZGUyID0gZmlsZTItPmZfZGVudHJ5LT5kX2lub2RlOworCWxsc3MtPmlub2RlMSA9IGZpbGVfaW5vZGUoZmlsZTEpOworCWxsc3MtPmlub2RlMiA9IGZpbGVfaW5vZGUoZmlsZTIpOwogCiAJaWYgKCFTX0lTUkVHKGxsc3MtPmlub2RlMi0+aV9tb2RlKSkgewogCQlyYyA9IC1FSU5WQUw7CkBAIC0yMDkyLDcgKzIwODEsNyBAQAogCXJjID0gMDsKIAlpZiAobGxzcy0+aWEyLmlhX3ZhbGlkICE9IDApIHsKIAkJbXV0ZXhfbG9jaygmbGxzcy0+aW5vZGUxLT5pX211dGV4KTsKLQkJcmMgPSBsbF9zZXRhdHRyKGZpbGUxLT5mX2RlbnRyeSwgJmxsc3MtPmlhMik7CisJCXJjID0gbGxfc2V0YXR0cihmaWxlMS0+Zl9wYXRoLmRlbnRyeSwgJmxsc3MtPmlhMik7CiAJCW11dGV4X3VubG9jaygmbGxzcy0+aW5vZGUxLT5pX211dGV4KTsKIAl9CiAKQEAgLTIxMDAsNyArMjA4OSw3IEBACiAJCWludCByYzE7CiAKIAkJbXV0ZXhfbG9jaygmbGxzcy0+aW5vZGUyLT5pX211dGV4KTsKLQkJcmMxID0gbGxfc2V0YXR0cihmaWxlMi0+Zl9kZW50cnksICZsbHNzLT5pYTEpOworCQlyYzEgPSBsbF9zZXRhdHRyKGZpbGUyLT5mX3BhdGguZGVudHJ5LCAmbGxzcy0+aWExKTsKIAkJbXV0ZXhfdW5sb2NrKCZsbHNzLT5pbm9kZTItPmlfbXV0ZXgpOwogCQlpZiAocmMgPT0gMCkKIAkJCXJjID0gcmMxOwpAQCAtMjE4NSw3ICsyMTc0LDcgQEAKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJjID0gbGxfc2V0YXR0cl9yYXcoZmlsZS0+Zl9kZW50cnksIGF0dHIsIHRydWUpOworCXJjID0gbGxfc2V0YXR0cl9yYXcoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgYXR0ciwgdHJ1ZSk7CiAJaWYgKHJjID09IC1FTk9EQVRBKQogCQlyYyA9IDA7CiAKQEAgLTIyMDQsNyArMjE5Myw3IEBACiBzdGF0aWMgbG9uZwogbGxfZmlsZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJc3RydWN0IGxsX2ZpbGVfZGF0YQkqZmQgPSBMVVNUUkVfRlBSSVZBVEUoZmlsZSk7CiAJaW50CQkJIGZsYWdzLCByYzsKIApAQCAtMjUyMyw3ICsyNTEyLDcgQEAKIAogc3RhdGljIGxvZmZfdCBsbF9maWxlX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCWxvZmZfdCByZXR2YWwsIGVvZiA9IDA7CiAKIAlyZXR2YWwgPSBvZmZzZXQgKyAoKG9yaWdpbiA9PSBTRUVLX0VORCkgPyBpX3NpemVfcmVhZChpbm9kZSkgOgpAQCAtMjU0Nyw3ICsyNTM2LDcgQEAKIAogc3RhdGljIGludCBsbF9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCBpZCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaSA9IGxsX2kyaW5mbyhpbm9kZSk7CiAJc3RydWN0IGxsX2ZpbGVfZGF0YSAqZmQgPSBMVVNUUkVfRlBSSVZBVEUoZmlsZSk7CiAJaW50IHJjLCBlcnI7CkBAIC0yNjIyLDE2ICsyNjExLDkgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0vKgotICogV2hlbiBkZW50cnkgaXMgcHJvdmlkZWQgKHRoZSAnZWxzZScgY2FzZSksICpmaWxlLT5mX2RlbnRyeSBtYXkgYmUKLSAqIG51bGwgYW5kIGRlbnRyeSBtdXN0IGJlIHVzZWQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gcHVsbGVkIGZyb20KLSAqICpmaWxlLT5mX2RlbnRyeSBhcyBpcyBkb25lIG90aGVyd2lzZS4KLSAqLwotCiBpbnQgbGxfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaSA9IGxsX2kyaW5mbyhpbm9kZSk7CiAJc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IG9iZF9jYXBhICpvYzsKQEAgLTI2ODQsNyArMjY2Niw3IEBACiBzdGF0aWMgaW50CiBsbF9maWxlX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmaWxlX2xvY2spCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCXN0cnVjdCBsbF9zYl9pbmZvICpzYmkgPSBsbF9pMnNiaShpbm9kZSk7CiAJc3RydWN0IGxkbG1fZW5xdWV1ZV9pbmZvIGVpbmZvID0gewogCQkuZWlfdHlwZQk9IExETE1fRkxPQ0ssCkBAIC0yOTA4LDggKzI4OTAsOCBAQAogCiAJTEFTU0VSVChpbm9kZSAhPSBOVUxMKTsKIAotCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wOmlub2RlPSVsdS8ldSglcCksbmFtZT0lc1xuIiwKLQkgICAgICAgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9nZW5lcmF0aW9uLCBpbm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJQ0RFQlVHKERfVkZTVFJBQ0UsICJWRlMgT3A6aW5vZGU9JWx1LyV1KCVwKSxuYW1lPSVwZFxuIiwKKwkgICAgICAgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9nZW5lcmF0aW9uLCBpbm9kZSwgZGVudHJ5KTsKIAogCWV4cCA9IGxsX2kybWRleHAoaW5vZGUpOwogCkBAIC0zMTE5LDcgKzMxMDEsNyBAQAogICAgICAgIC8qIGFzIHJvb3QgaW5vZGUgYXJlIE5PVCBnZXR0aW5nIHZhbGlkYXRlZCBpbiBsb29rdXAgb3BlcmF0aW9uLAogCSogbmVlZCB0byBkbyBpdCBiZWZvcmUgcGVybWlzc2lvbiBjaGVjay4gKi8KIAotCWlmIChpbm9kZSA9PSBpbm9kZS0+aV9zYi0+c19yb290LT5kX2lub2RlKSB7CisJaWYgKGlzX3Jvb3RfaW5vZGUoaW5vZGUpKSB7CiAJCXJjID0gX19sbF9pbm9kZV9yZXZhbGlkYXRlKGlub2RlLT5pX3NiLT5zX3Jvb3QsCiAJCQkJCSAgIE1EU19JTk9ERUxPQ0tfTE9PS1VQKTsKIAkJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2ludGVybmFsLmgKaW5kZXggMzZhYTBmZC4uNzdkMWMxMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfaW50ZXJuYWwuaApAQCAtNzQ4LDcgKzc0OCw3IEBACiBpbnQgbGxfZ2xpbXBzZV9pb2N0bChzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpLAogCQkgICAgIHN0cnVjdCBsb3Zfc3RyaXBlX21kICpsc20sIGxzdGF0X3QgKnN0KTsKIHZvaWQgbGxfaW9lcG9jaF9vcGVuKHN0cnVjdCBsbF9pbm9kZV9pbmZvICpsbGksIF9fdTY0IGlvZXBvY2gpOwotaW50IGxsX3JlbGVhc2Vfb3BlbmhhbmRsZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBsb29rdXBfaW50ZW50ICopOworaW50IGxsX3JlbGVhc2Vfb3BlbmhhbmRsZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGxvb2t1cF9pbnRlbnQgKik7CiBpbnQgbGxfbWRfcmVhbF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBmbW9kZV90IGZtb2RlKTsKIHZvaWQgbGxfaW9lcG9jaF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbWRfb3BfZGF0YSAqb3BfZGF0YSwKIAkJICAgICAgc3RydWN0IG9iZF9jbGllbnRfaGFuZGxlICoqb2NoLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKQEAgLTc2Myw3ICs3NjMsNyBAQAogCiBpbnQgbGxfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiAKLWludCBsbF9sb3Zfc2V0c3RyaXBlX2VhX2luZm8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitpbnQgbGxfbG92X3NldHN0cmlwZV9lYV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgaW50IGZsYWdzLCBzdHJ1Y3QgbG92X3VzZXJfbWQgKmx1bSwKIAkJCSAgICAgaW50IGx1bV9zaXplKTsKIGludCBsbF9sb3ZfZ2V0c3RyaXBlX2VhX2luZm8oc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCkBAIC0xNDEzLDcgKzE0MTMsNyBAQAogc3RhdGljIGlubGluZSBpbnQgbGxfZmlsZV9ub2xvY2soY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGxsX2ZpbGVfZGF0YSAqZmQgPSBMVVNUUkVfRlBSSVZBVEUoZmlsZSk7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCiAJTEFTU0VSVChmZCAhPSBOVUxMKTsKIAlyZXR1cm4gKChmZC0+ZmRfZmxhZ3MgJiBMTF9GSUxFX0lHTk9SRV9MT0NLKSB8fApAQCAtMTQ4OSw4ICsxNDg5LDggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGRfbHVzdHJlX2ludmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbmVzdGVkKQogewotCUNERUJVRyhEX0RFTlRSWSwgImludmFsaWRhdGUgZGVudHJ5ICUuKnMgKCVwKSBwYXJlbnQgJXAgaW5vZGUgJXAgIgotCSAgICAgICAicmVmYyAlZFxuIiwgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnksCisJQ0RFQlVHKERfREVOVFJZLCAiaW52YWxpZGF0ZSBkZW50cnkgJXBkICglcCkgcGFyZW50ICVwIGlub2RlICVwICIKKwkgICAgICAgInJlZmMgJWRcbiIsIGRlbnRyeSwgZGVudHJ5LAogCSAgICAgICBkZW50cnktPmRfcGFyZW50LCBkZW50cnktPmRfaW5vZGUsIGRfY291bnQoZGVudHJ5KSk7CiAKIAlzcGluX2xvY2tfbmVzdGVkKCZkZW50cnktPmRfbG9jaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX2xpYi5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfbGliLmMKaW5kZXggYThiY2M1MS4uN2I2YjllMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfbGliLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfbGliLmMKQEAgLTY5OCwxMCArNjk4LDggQEAKIAlsaXN0X2Zvcl9lYWNoKHRtcCwgJmRlbnRyeS0+ZF9zdWJkaXJzKQogCQlzdWJkaXJzKys7CiAKLQlDRVJST1IoImRlbnRyeSAlcCBkdW1wOiBuYW1lPSUuKnMgcGFyZW50PSUuKnMgKCVwKSwgaW5vZGU9JXAsIGNvdW50PSV1LCIKLQkgICAgICAgIiBmbGFncz0weCV4LCBmc2RhdGE9JXAsICVkIHN1YmRpcnNcbiIsIGRlbnRyeSwKLQkgICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lLAotCSAgICAgICBkZW50cnktPmRfcGFyZW50LT5kX25hbWUubGVuLCBkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwKKwlDRVJST1IoImRlbnRyeSAlcCBkdW1wOiBuYW1lPSVwZCBwYXJlbnQ9JXAsIGlub2RlPSVwLCBjb3VudD0ldSwiCisJICAgICAgICIgZmxhZ3M9MHgleCwgZnNkYXRhPSVwLCAlZCBzdWJkaXJzXG4iLCBkZW50cnksIGRlbnRyeSwKIAkgICAgICAgZGVudHJ5LT5kX3BhcmVudCwgZGVudHJ5LT5kX2lub2RlLCBkX2NvdW50KGRlbnRyeSksCiAJICAgICAgIGRlbnRyeS0+ZF9mbGFncywgZGVudHJ5LT5kX2ZzZGF0YSwgc3ViZGlycyk7CiAJaWYgKGRlbnRyeS0+ZF9pbm9kZSAhPSBOVUxMKQpAQCAtNzExLDcgKzcwOSw3IEBACiAJCXJldHVybjsKIAogCWxpc3RfZm9yX2VhY2godG1wLCAmZGVudHJ5LT5kX3N1YmRpcnMpIHsKLQkJc3RydWN0IGRlbnRyeSAqZCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7CisJCXN0cnVjdCBkZW50cnkgKmQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGRlbnRyeSwgZF9jaGlsZCk7CiAJCWx1c3RyZV9kdW1wX2RlbnRyeShkLCByZWN1ciAtIDEpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX21tYXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX21tYXAuYwppbmRleCBhZTYwNWE2Li5iYTFjMDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9sbGl0ZV9tbWFwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfbW1hcC5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAkJIHVuc2lnbmVkIGxvbmcgKnJhX2ZsYWdzKQogewogCXN0cnVjdCBmaWxlCSAgICAgICAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKLQlzdHJ1Y3QgaW5vZGUJICAgICAgICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZQkgICAgICAgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKIAlzdHJ1Y3QgY2xfaW8JICAgICAgICppbzsKIAlzdHJ1Y3QgY2xfZmF1bHRfaW8gICAgICpmaW87CiAJc3RydWN0IGx1X2VudgkgICAgICAgKmVudjsKQEAgLTIxMyw3ICsyMTMsNyBAQAogCWNmc19yZXN0b3JlX3NpZ3Moc2V0KTsKIAogCWlmIChyZXN1bHQgPT0gMCkgewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdm1hLT52bV9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUodm1hLT52bV9maWxlKTsKIAkJc3RydWN0IGxsX2lub2RlX2luZm8gKmxsaSA9IGxsX2kyaW5mbyhpbm9kZSk7CiAKIAkJbG9ja19wYWdlKHZtcGFnZSk7CkBAIC0zOTYsNyArMzk2LDcgQEAKIAkJCUNXQVJOKCJhcHAoJXMpOiB0aGUgcGFnZSAlbHUgb2YgZmlsZSAlbHUgaXMgdW5kZXIgaGVhdnkiCiAJCQkgICAgICAiIGNvbnRlbnRpb24uXG4iLAogCQkJICAgICAgY3VycmVudC0+Y29tbSwgdm1mLT5wZ29mZiwKLQkJCSAgICAgIHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKKwkJCSAgICAgIGZpbGVfaW5vZGUodm1hLT52bV9maWxlKS0+aV9pbm8pOwogCQkJcHJpbnRlZCA9IHRydWU7CiAJCX0KIAl9IHdoaWxlIChyZXRyeSk7CkBAIC00MzAsNyArNDMwLDcgQEAKICAqLwogc3RhdGljIHZvaWQgbGxfdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlICAgID0gdm1hLT52bV9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlICAgID0gZmlsZV9pbm9kZSh2bWEtPnZtX2ZpbGUpOwogCXN0cnVjdCBjY2Nfb2JqZWN0ICp2b2IgPSBjbF9pbm9kZTJjY2MoaW5vZGUpOwogCiAJTEFTU0VSVCh2bWEtPnZtX2ZpbGUpOwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGxsX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXN0cnVjdCBpbm9kZSAgICAgICppbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICAgICAgKmlub2RlID0gZmlsZV9pbm9kZSh2bWEtPnZtX2ZpbGUpOwogCXN0cnVjdCBjY2Nfb2JqZWN0ICp2b2IgICA9IGNsX2lub2RlMmNjYyhpbm9kZSk7CiAKIAlMQVNTRVJUKHZtYS0+dm1fZmlsZSk7CkBAIC00NzYsNyArNDc2LDcgQEAKIAogaW50IGxsX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCWludCByYzsKIAogCWlmIChsbF9maWxlX25vbG9jayhmaWxlKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsaXRlX25mcy5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfbmZzLmMKaW5kZXggYWUzYTEyYS4uMjQzYTc4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfbmZzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxpdGVfbmZzLmMKQEAgLTIwNywxMyArMjA3LDE1IEBACiAJcmV0dXJuIExVU1RSRV9ORlNfRklEOwogfQogCi1zdGF0aWMgaW50IGxsX25mc19nZXRfbmFtZV9maWxsZGlyKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCQkJICAgbG9mZl90IGhhc2gsIHU2NCBpbm8sIHVuc2lnbmVkIHR5cGUpCitzdGF0aWMgaW50IGxsX25mc19nZXRfbmFtZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIGludCBuYW1lbGVuLCBsb2ZmX3QgaGFzaCwgdTY0IGlubywKKwkJCQkgICB1bnNpZ25lZCB0eXBlKQogewogCS8qIEl0IGlzIGhhY2sgdG8gYWNjZXNzIGxkZV9maWQgZm9yIGNvbXBhcmlzb24gd2l0aCBsZ2RfZmlkLgogCSAqIFNvIHRoZSBpbnB1dCAnbmFtZScgbXVzdCBiZSBwYXJ0IG9mIHRoZSAnbHVfZGlyZW50Jy4gKi8KIAlzdHJ1Y3QgbHVfZGlyZW50ICpsZGUgPSBjb250YWluZXJfb2YwKG5hbWUsIHN0cnVjdCBsdV9kaXJlbnQsIGxkZV9uYW1lKTsKLQlzdHJ1Y3QgbGxfZ2V0bmFtZV9kYXRhICpsZ2QgPSBjb29raWU7CisJc3RydWN0IGxsX2dldG5hbWVfZGF0YSAqbGdkID0KKwkJY29udGFpbmVyX29mKGN0eCwgc3RydWN0IGxsX2dldG5hbWVfZGF0YSwgY3R4KTsKIAlzdHJ1Y3QgbHVfZmlkIGZpZDsKIAogCWZpZF9sZV90b19jcHUoJmZpZCwgJmxkZS0+bGRlX2ZpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9sbG9vcC5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbGxvb3AuYwppbmRleCAyNjRlNWVjLi45ZTMxYjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9sbG9vcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL2xsb29wLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogewogCWNvbnN0IHN0cnVjdCBsdV9lbnYgICplbnYgICA9IGxvLT5sb19lbnY7CiAJc3RydWN0IGNsX2lvCSAqaW8gICAgPSAmbG8tPmxvX2lvOwotCXN0cnVjdCBpbm9kZQkgKmlub2RlID0gbG8tPmxvX2JhY2tpbmdfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlCSAqaW5vZGUgPSBmaWxlX2lub2RlKGxvLT5sb19iYWNraW5nX2ZpbGUpOwogCXN0cnVjdCBjbF9vYmplY3QgICAgICpvYmogPSBsbF9pMmluZm8oaW5vZGUpLT5sbGlfY2xvYjsKIAlwZ29mZl90CSAgICAgICBvZmZzZXQ7CiAJaW50CQkgICByZXQ7CkBAIC02MjYsNyArNjI2LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChpbm9kZSA9PSBOVUxMKQotCQkJaW5vZGUgPSBsby0+bG9fYmFja2luZ19maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwkJCWlub2RlID0gZmlsZV9pbm9kZShsby0+bG9fYmFja2luZ19maWxlKTsKIAkJaWYgKGxvLT5sb19zdGF0ZSA9PSBMTE9PUF9CT1VORCkKIAkJCWZpZCA9IGxsX2kyaW5mbyhpbm9kZSktPmxsaV9maWQ7CiAJCWVsc2UKQEAgLTY5Miw4ICs2OTIsNyBAQAogCQkJCQlsb19mcmVlID0gbG87CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAobG8tPmxvX2JhY2tpbmdfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUgPT0KLQkJCSAgICBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkKKwkJCWlmIChmaWxlX2lub2RlKGxvLT5sb19iYWNraW5nX2ZpbGUpID09IGZpbGVfaW5vZGUoZmlsZSkpCiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGxvIHx8ICFsb19mcmVlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9uYW1laS5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvbmFtZWkuYwppbmRleCA3YTY4YzFlLi44ZTkyNmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9uYW1laS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL25hbWVpLmMKQEAgLTU0LDI3ICs1NCw2IEBACiBzdGF0aWMgaW50IGxsX2NyZWF0ZV9pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLAogCQkJaW50LCBzdHJ1Y3QgbG9va3VwX2ludGVudCAqKTsKIAotLyoKLSAqIENoZWNrIGlmIHdlIGhhdmUgc29tZXRoaW5nIG1vdW50ZWQgYXQgdGhlIG5hbWVkIGRjaGlsZC4KLSAqIEluIHN1Y2ggYSBjYXNlIHRoZXJlIHdvdWxkIGFsd2F5cyBiZSBkZW50cnkgcHJlc2VudC4KLSAqLwotc3RhdGljIGludCBsbF9kX21vdW50cG9pbnQoc3RydWN0IGRlbnRyeSAqZHBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGNoaWxkLAotCQkJICAgc3RydWN0IHFzdHIgKm5hbWUpCi17Ci0JaW50IG1vdW50ZWQgPSAwOwotCi0JaWYgKHVubGlrZWx5KGRjaGlsZCkpIHsKLQkJbW91bnRlZCA9IGRfbW91bnRwb2ludChkY2hpbGQpOwotCX0gZWxzZSBpZiAoZHBhcmVudCkgewotCQlkY2hpbGQgPSBkX2xvb2t1cChkcGFyZW50LCBuYW1lKTsKLQkJaWYgKGRjaGlsZCkgewotCQkJbW91bnRlZCA9IGRfbW91bnRwb2ludChkY2hpbGQpOwotCQkJZHB1dChkY2hpbGQpOwotCQl9Ci0JfQotCXJldHVybiBtb3VudGVkOwotfQotCiAvKiBjYWxsZWQgZnJvbSBpZ2V0NV9sb2NrZWQtPmZpbmRfaW5vZGUoKSB1bmRlciBpbm9kZV9oYXNoX2xvY2sgc3BpbmxvY2sgKi8KIHN0YXRpYyBpbnQgbGxfdGVzdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpCiB7CkBAIC0xNjcsMTQgKzE0NiwxNCBAQAogCXN0cnVjdCBsbF9kX2hsaXN0X25vZGUgKnA7CiAKIAlsbF9sb2NrX2RjYWNoZShkaXIpOwotCWxsX2RfaGxpc3RfZm9yX2VhY2hfZW50cnkoZGVudHJ5LCBwLCAmZGlyLT5pX2RlbnRyeSwgZF9hbGlhcykgeworCWxsX2RfaGxpc3RfZm9yX2VhY2hfZW50cnkoZGVudHJ5LCBwLCAmZGlyLT5pX2RlbnRyeSwgZF91LmRfYWxpYXMpIHsKIAkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJCWlmICghbGlzdF9lbXB0eSgmZGVudHJ5LT5kX3N1YmRpcnMpKSB7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpjaGlsZDsKIAogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoaWxkLCB0bXBfc3ViZGlyLAogCQkJCQkJICZkZW50cnktPmRfc3ViZGlycywKLQkJCQkJCSBkX3UuZF9jaGlsZCkgeworCQkJCQkJIGRfY2hpbGQpIHsKIAkJCQlpZiAoY2hpbGQtPmRfaW5vZGUgPT0gTlVMTCkKIAkJCQkJZF9sdXN0cmVfaW52YWxpZGF0ZShjaGlsZCwgMSk7CiAJCQl9CkBAIC0yODUsNyArMjY0LDcgQEAKIAogCQlpZiAoKGJpdHMgJiAoTURTX0lOT0RFTE9DS19MT09LVVAgfCBNRFNfSU5PREVMT0NLX1BFUk0pKSAmJgogCQkgICAgaW5vZGUtPmlfc2ItPnNfcm9vdCAhPSBOVUxMICYmCi0JCSAgICBpbm9kZSAhPSBpbm9kZS0+aV9zYi0+c19yb290LT5kX2lub2RlKQorCQkgICAgaXNfcm9vdF9pbm9kZShpbm9kZSkpCiAJCQlsbF9pbnZhbGlkYXRlX2FsaWFzZXMoaW5vZGUpOwogCiAJCWlwdXQoaW5vZGUpOwpAQCAtMzYyLDcgKzM0MSw3IEBACiAJZGlzY29uX2FsaWFzID0gaW52YWxpZF9hbGlhcyA9IE5VTEw7CiAKIAlsbF9sb2NrX2RjYWNoZShpbm9kZSk7Ci0JbGxfZF9obGlzdF9mb3JfZWFjaF9lbnRyeShhbGlhcywgcCwgJmlub2RlLT5pX2RlbnRyeSwgZF9hbGlhcykgeworCWxsX2RfaGxpc3RfZm9yX2VhY2hfZW50cnkoYWxpYXMsIHAsICZpbm9kZS0+aV9kZW50cnksIGRfdS5kX2FsaWFzKSB7CiAJCUxBU1NFUlQoYWxpYXMgIT0gZGVudHJ5KTsKIAogCQlzcGluX2xvY2soJmFsaWFzLT5kX2xvY2spOwpAQCAtNTA5LDggKzQ4OCw4IEBACiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IGxsX2kyc2JpKHBhcmVudCktPmxsX25hbWVsZW4pCiAJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwogCi0JQ0RFQlVHKERfVkZTVFJBQ0UsICJWRlMgT3A6bmFtZT0lLipzLGRpcj0lbHUvJXUoJXApLGludGVudD0lc1xuIiwKLQkgICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lLCBwYXJlbnQtPmlfaW5vLAorCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wOm5hbWU9JXBkLGRpcj0lbHUvJXUoJXApLGludGVudD0lc1xuIiwKKwkgICAgICAgZGVudHJ5LCBwYXJlbnQtPmlfaW5vLAogCSAgICAgICBwYXJlbnQtPmlfZ2VuZXJhdGlvbiwgcGFyZW50LCBMTF9JVDJTVFIoaXQpKTsKIAogCWlmIChkX21vdW50cG9pbnQoZGVudHJ5KSkKQEAgLTU2Myw3ICs1NDIsNyBAQAogCWlmICgoaXQtPml0X29wICYgSVRfT1BFTikgJiYgZGVudHJ5LT5kX2lub2RlICYmCiAJICAgICFTX0lTUkVHKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSAmJgogCSAgICAhU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKLQkJbGxfcmVsZWFzZV9vcGVuaGFuZGxlKGRlbnRyeSwgaXQpOworCQlsbF9yZWxlYXNlX29wZW5oYW5kbGUoZGVudHJ5LT5kX2lub2RlLCBpdCk7CiAJfQogCWxsX2xvb2t1cF9maW5pc2hfbG9ja3MoaXQsIGRlbnRyeSk7CiAKQEAgLTU4Niw4ICs1NjUsOCBAQAogCXN0cnVjdCBsb29rdXBfaW50ZW50ICppdHAsIGl0ID0geyAuaXRfb3AgPSBJVF9HRVRBVFRSIH07CiAJc3RydWN0IGRlbnRyeSAqZGU7CiAKLQlDREVCVUcoRF9WRlNUUkFDRSwgIlZGUyBPcDpuYW1lPSUuKnMsZGlyPSVsdS8ldSglcCksZmxhZ3M9JXVcbiIsCi0JICAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSwgcGFyZW50LT5pX2lubywKKwlDREVCVUcoRF9WRlNUUkFDRSwgIlZGUyBPcDpuYW1lPSVwZCxkaXI9JWx1LyV1KCVwKSxmbGFncz0ldVxuIiwKKwkgICAgICAgZGVudHJ5LCBwYXJlbnQtPmlfaW5vLAogCSAgICAgICBwYXJlbnQtPmlfZ2VuZXJhdGlvbiwgcGFyZW50LCBmbGFncyk7CiAKIAkvKiBPcHRpbWl6ZSBhd2F5IChDUkVBVEUgJiYgIU9QRU4pLiBMZXQgLmNyZWF0ZSBoYW5kbGUgdGhlIHJhY2UuICovCkBAIC02MTksOSArNTk4LDkgQEAKIAlsb25nIGxvbmcgbG9va3VwX2ZsYWdzID0gTE9PS1VQX09QRU47CiAJaW50IHJjID0gMDsKIAotCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wOm5hbWU9JS4qcyxkaXI9JWx1LyV1KCVwKSxmaWxlICVwLCIKKwlDREVCVUcoRF9WRlNUUkFDRSwgIlZGUyBPcDpuYW1lPSVwZCxkaXI9JWx1LyV1KCVwKSxmaWxlICVwLCIKIAkJCSAgICJvcGVuX2ZsYWdzICV4LG1vZGUgJXggb3BlbmVkICVkXG4iLAotCSAgICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRpci0+aV9pbm8sCisJICAgICAgIGRlbnRyeSwgZGlyLT5pX2lubywKIAkgICAgICAgZGlyLT5pX2dlbmVyYXRpb24sIGRpciwgZmlsZSwgb3Blbl9mbGFncywgbW9kZSwgKm9wZW5lZCk7CiAKIAlpdCA9IGt6YWxsb2Moc2l6ZW9mKCppdCksIEdGUF9OT0ZTKTsKQEAgLTc0MSw4ICs3MjAsOCBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHJjID0gMDsKIAotCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wOm5hbWU9JS4qcyxkaXI9JWx1LyV1KCVwKSxpbnRlbnQ9JXNcbiIsCi0JICAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSwgZGlyLT5pX2lubywKKwlDREVCVUcoRF9WRlNUUkFDRSwgIlZGUyBPcDpuYW1lPSVwZCxkaXI9JWx1LyV1KCVwKSxpbnRlbnQ9JXNcbiIsCisJICAgICAgIGRlbnRyeSwgZGlyLT5pX2lubywKIAkgICAgICAgZGlyLT5pX2dlbmVyYXRpb24sIGRpciwgTExfSVQyU1RSKGl0KSk7CiAKIAlyYyA9IGl0X29wZW5fZXJyb3IoRElTUF9PUEVOX0NSRUFURSwgaXQpOwpAQCAtNzc1LDkgKzc1NCw5IEBACiAJCUxUSU1FX1MoaW5vZGUtPmlfY3RpbWUpID0gYm9keS0+Y3RpbWU7CiB9CiAKLXN0YXRpYyBpbnQgbGxfbmV3X25vZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBxc3RyICpuYW1lLAorc3RhdGljIGludCBsbF9uZXdfbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgICAgICAgY29uc3QgY2hhciAqdGd0LCBpbnQgbW9kZSwgaW50IHJkZXYsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkY2hpbGQsIF9fdTMyIG9wYykKKwkJICAgICAgIF9fdTMyIG9wYykKIHsKIAlzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKnJlcXVlc3QgPSBOVUxMOwogCXN0cnVjdCBtZF9vcF9kYXRhICpvcF9kYXRhOwpAQCAtNzg5LDggKzc2OCwxMCBAQAogCWlmICh1bmxpa2VseSh0Z3QgIT0gTlVMTCkpCiAJCXRndF9sZW4gPSBzdHJsZW4odGd0KSArIDE7CiAKLQlvcF9kYXRhID0gbGxfcHJlcF9tZF9vcF9kYXRhKE5VTEwsIGRpciwgTlVMTCwgbmFtZS0+bmFtZSwKLQkJCQkgICAgIG5hbWUtPmxlbiwgMCwgb3BjLCBOVUxMKTsKKwlvcF9kYXRhID0gbGxfcHJlcF9tZF9vcF9kYXRhKE5VTEwsIGRpciwgTlVMTCwKKwkJCQkgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJICAgICBkZW50cnktPmRfbmFtZS5sZW4sCisJCQkJICAgICAwLCBvcGMsIE5VTEwpOwogCWlmIChJU19FUlIob3BfZGF0YSkpIHsKIAkJZXJyID0gUFRSX0VSUihvcF9kYXRhKTsKIAkJZ290byBlcnJfZXhpdDsKQEAgLTgwNiwyNyArNzg3LDI1IEBACiAKIAlsbF91cGRhdGVfdGltZXMocmVxdWVzdCwgZGlyKTsKIAotCWlmIChkY2hpbGQpIHsKLQkJZXJyID0gbGxfcHJlcF9pbm9kZSgmaW5vZGUsIHJlcXVlc3QsIGRjaGlsZC0+ZF9zYiwgTlVMTCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9leGl0OworCWVyciA9IGxsX3ByZXBfaW5vZGUoJmlub2RlLCByZXF1ZXN0LCBkaXItPmlfc2IsIE5VTEwpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2V4aXQ7CiAKLQkJZF9pbnN0YW50aWF0ZShkY2hpbGQsIGlub2RlKTsKLQl9CisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIGVycl9leGl0OgogCXB0bHJwY19yZXFfZmluaXNoZWQocmVxdWVzdCk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGxsX21rbm9kX2dlbmVyaWMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBxc3RyICpuYW1lLCBpbnQgbW9kZSwKLQkJCSAgICB1bnNpZ25lZCByZGV2LCBzdHJ1Y3QgZGVudHJ5ICpkY2hpbGQpCitzdGF0aWMgaW50IGxsX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkY2hpbGQsCisJCSAgICB1bW9kZV90IG1vZGUsIGRldl90IHJkZXYpCiB7CiAJaW50IGVycjsKIAotCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wOm5hbWU9JS4qcyxkaXI9JWx1LyV1KCVwKSBtb2RlICVvIGRldiAleFxuIiwKLQkgICAgICAgbmFtZS0+bGVuLCBuYW1lLT5uYW1lLCBkaXItPmlfaW5vLCBkaXItPmlfZ2VuZXJhdGlvbiwgZGlyLAotCSAgICAgICBtb2RlLCByZGV2KTsKKwlDREVCVUcoRF9WRlNUUkFDRSwgIlZGUyBPcDpuYW1lPSVwZCxkaXI9JWx1LyV1KCVwKSBtb2RlICVvIGRldiAleFxuIiwKKwkgICAgICAgZGNoaWxkLCBkaXItPmlfaW5vLCBkaXItPmlfZ2VuZXJhdGlvbiwgZGlyLAorCSAgICAgICBtb2RlLCBvbGRfZW5jb2RlX2RldihyZGV2KSk7CiAKIAlpZiAoIUlTX1BPU0lYQUNMKGRpcikgfHwgIWV4cF9jb25uZWN0X3VtYXNrKGxsX2kybWRleHAoZGlyKSkpCiAJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKQEAgLTgzOSw3ICs4MTgsOCBAQAogCWNhc2UgU19JRkJMSzoKIAljYXNlIFNfSUZJRk86CiAJY2FzZSBTX0lGU09DSzoKLQkJZXJyID0gbGxfbmV3X25vZGUoZGlyLCBuYW1lLCBOVUxMLCBtb2RlLCByZGV2LCBkY2hpbGQsCisJCWVyciA9IGxsX25ld19ub2RlKGRpciwgZGNoaWxkLCBOVUxMLCBtb2RlLAorCQkJCSAgb2xkX2VuY29kZV9kZXYocmRldiksCiAJCQkJICBMVVNUUkVfT1BDX01LTk9EKTsKIAkJYnJlYWs7CiAJY2FzZSBTX0lGRElSOgpAQCAtODYzLDEzNCArODQzLDI1IEBACiB7CiAJaW50IHJjOwogCi0JQ0RFQlVHKERfVkZTVFJBQ0UsICJWRlMgT3A6bmFtZT0lLipzLGRpcj0lbHUvJXUoJXApLCIKKwlDREVCVUcoRF9WRlNUUkFDRSwgIlZGUyBPcDpuYW1lPSVwZCxkaXI9JWx1LyV1KCVwKSwiCiAJCQkgICAiZmxhZ3M9JXUsIGV4Y2w9JWRcbiIsCi0JICAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSwgZGlyLT5pX2lubywKKwkgICAgICAgZGVudHJ5LCBkaXItPmlfaW5vLAogCSAgICAgICBkaXItPmlfZ2VuZXJhdGlvbiwgZGlyLCBtb2RlLCB3YW50X2V4Y2wpOwogCi0JcmMgPSBsbF9ta25vZF9nZW5lcmljKGRpciwgJmRlbnRyeS0+ZF9uYW1lLCBtb2RlLCAwLCBkZW50cnkpOworCXJjID0gbGxfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOwogCiAJbGxfc3RhdHNfb3BzX3RhbGx5KGxsX2kyc2JpKGRpciksIExQUk9DX0xMX0NSRUFURSwgMSk7CiAKLQlDREVCVUcoRF9WRlNUUkFDRSwgIlZGUyBPcDpuYW1lPSUuKnMsIHVuaGFzaGVkICVkXG4iLAotCSAgICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRfdW5oYXNoZWQoZGVudHJ5KSk7CisJQ0RFQlVHKERfVkZTVFJBQ0UsICJWRlMgT3A6bmFtZT0lcGQsIHVuaGFzaGVkICVkXG4iLAorCSAgICAgICBkZW50cnksIGRfdW5oYXNoZWQoZGVudHJ5KSk7CiAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgbGxfc3ltbGlua19nZW5lcmljKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgcXN0ciAqbmFtZSwKLQkJCSAgICAgIGNvbnN0IGNoYXIgKnRndCwgc3RydWN0IGRlbnRyeSAqZGNoaWxkKQorc3RhdGljIGlubGluZSB2b2lkIGxsX2dldF9jaGlsZF9maWQoc3RydWN0IGRlbnRyeSAqY2hpbGQsIHN0cnVjdCBsdV9maWQgKmZpZCkKIHsKLQlpbnQgZXJyOwotCi0JQ0RFQlVHKERfVkZTVFJBQ0UsICJWRlMgT3A6bmFtZT0lLipzLGRpcj0lbHUvJXUoJXApLHRhcmdldD0lLipzXG4iLAotCSAgICAgICBuYW1lLT5sZW4sIG5hbWUtPm5hbWUsIGRpci0+aV9pbm8sIGRpci0+aV9nZW5lcmF0aW9uLAotCSAgICAgICBkaXIsIDMwMDAsIHRndCk7Ci0KLQllcnIgPSBsbF9uZXdfbm9kZShkaXIsIG5hbWUsIChjaGFyICopdGd0LCBTX0lGTE5LIHwgU19JUldYVUdPLAotCQkJICAwLCBkY2hpbGQsIExVU1RSRV9PUENfU1lNTElOSyk7Ci0KLQlpZiAoIWVycikKLQkJbGxfc3RhdHNfb3BzX3RhbGx5KGxsX2kyc2JpKGRpciksIExQUk9DX0xMX1NZTUxJTkssIDEpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBsbF9saW5rX2dlbmVyaWMoc3RydWN0IGlub2RlICpzcmMsICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgIHN0cnVjdCBxc3RyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpkY2hpbGQpCi17Ci0Jc3RydWN0IGxsX3NiX2luZm8gKnNiaSA9IGxsX2kyc2JpKGRpcik7Ci0Jc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXF1ZXN0ID0gTlVMTDsKLQlzdHJ1Y3QgbWRfb3BfZGF0YSAqb3BfZGF0YTsKLQlpbnQgZXJyOwotCi0JQ0RFQlVHKERfVkZTVFJBQ0UsCi0JICAgICAgICJWRlMgT3A6IGlub2RlPSVsdS8ldSglcCksIGRpcj0lbHUvJXUoJXApLCB0YXJnZXQ9JS4qc1xuIiwKLQkgICAgICAgc3JjLT5pX2lubywgc3JjLT5pX2dlbmVyYXRpb24sIHNyYywgZGlyLT5pX2lubywKLQkgICAgICAgZGlyLT5pX2dlbmVyYXRpb24sIGRpciwgbmFtZS0+bGVuLCBuYW1lLT5uYW1lKTsKLQotCW9wX2RhdGEgPSBsbF9wcmVwX21kX29wX2RhdGEoTlVMTCwgc3JjLCBkaXIsIG5hbWUtPm5hbWUsIG5hbWUtPmxlbiwKLQkJCQkgICAgIDAsIExVU1RSRV9PUENfQU5ZLCBOVUxMKTsKLQlpZiAoSVNfRVJSKG9wX2RhdGEpKQotCQlyZXR1cm4gUFRSX0VSUihvcF9kYXRhKTsKLQotCWVyciA9IG1kX2xpbmsoc2JpLT5sbF9tZF9leHAsIG9wX2RhdGEsICZyZXF1ZXN0KTsKLQlsbF9maW5pc2hfbWRfb3BfZGF0YShvcF9kYXRhKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWxsX3VwZGF0ZV90aW1lcyhyZXF1ZXN0LCBkaXIpOwotCWxsX3N0YXRzX29wc190YWxseShzYmksIExQUk9DX0xMX0xJTkssIDEpOwotb3V0OgotCXB0bHJwY19yZXFfZmluaXNoZWQocmVxdWVzdCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBsbF9ta2Rpcl9nZW5lcmljKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgcXN0ciAqbmFtZSwKLQkJCSAgICBpbnQgbW9kZSwgc3RydWN0IGRlbnRyeSAqZGNoaWxkKQotCi17Ci0JaW50IGVycjsKLQotCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wOm5hbWU9JS4qcyxkaXI9JWx1LyV1KCVwKVxuIiwKLQkgICAgICAgbmFtZS0+bGVuLCBuYW1lLT5uYW1lLCBkaXItPmlfaW5vLCBkaXItPmlfZ2VuZXJhdGlvbiwgZGlyKTsKLQotCWlmICghSVNfUE9TSVhBQ0woZGlyKSB8fCAhZXhwX2Nvbm5lY3RfdW1hc2sobGxfaTJtZGV4cChkaXIpKSkKLQkJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwotCW1vZGUgPSAobW9kZSAmIChTX0lSV1hVR098U19JU1ZUWCkpIHwgU19JRkRJUjsKLQllcnIgPSBsbF9uZXdfbm9kZShkaXIsIG5hbWUsIE5VTEwsIG1vZGUsIDAsIGRjaGlsZCwgTFVTVFJFX09QQ19NS0RJUik7Ci0KLQlpZiAoIWVycikKLQkJbGxfc3RhdHNfb3BzX3RhbGx5KGxsX2kyc2JpKGRpciksIExQUk9DX0xMX01LRElSLCAxKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qIFRyeSB0byBmaW5kIHRoZSBjaGlsZCBkZW50cnkgYnkgaXRzIG5hbWUuCi0gICBJZiBmb3VuZCwgcHV0IHRoZSByZXN1bHQgZmlkIGludG8gQGZpZC4gKi8KLXN0YXRpYyB2b2lkIGxsX2dldF9jaGlsZF9maWQoc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgcXN0ciAqbmFtZSwKLQkJCSAgICAgc3RydWN0IGx1X2ZpZCAqZmlkKQotewotCXN0cnVjdCBkZW50cnkgKnBhcmVudCwgKmNoaWxkOwotCi0JcGFyZW50ID0gbGxfZF9obGlzdF9lbnRyeShkaXItPmlfZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5LCBkX2FsaWFzKTsKLQljaGlsZCA9IGRfbG9va3VwKHBhcmVudCwgbmFtZSk7Ci0JaWYgKGNoaWxkKSB7Ci0JCWlmIChjaGlsZC0+ZF9pbm9kZSkKLQkJCSpmaWQgPSAqbGxfaW5vZGUyZmlkKGNoaWxkLT5kX2lub2RlKTsKLQkJZHB1dChjaGlsZCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGxsX3JtZGlyX2dlbmVyaWMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRwYXJlbnQsCi0JCQkgICAgc3RydWN0IGRlbnRyeSAqZGNoaWxkLCBzdHJ1Y3QgcXN0ciAqbmFtZSkKLXsKLQlzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKnJlcXVlc3QgPSBOVUxMOwotCXN0cnVjdCBtZF9vcF9kYXRhICpvcF9kYXRhOwotCWludCByYzsKLQotCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wOm5hbWU9JS4qcyxkaXI9JWx1LyV1KCVwKVxuIiwKLQkgICAgICAgbmFtZS0+bGVuLCBuYW1lLT5uYW1lLCBkaXItPmlfaW5vLCBkaXItPmlfZ2VuZXJhdGlvbiwgZGlyKTsKLQotCWlmICh1bmxpa2VseShsbF9kX21vdW50cG9pbnQoZHBhcmVudCwgZGNoaWxkLCBuYW1lKSkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlvcF9kYXRhID0gbGxfcHJlcF9tZF9vcF9kYXRhKE5VTEwsIGRpciwgTlVMTCwgbmFtZS0+bmFtZSwgbmFtZS0+bGVuLAotCQkJCSAgICAgU19JRkRJUiwgTFVTVFJFX09QQ19BTlksIE5VTEwpOwotCWlmIChJU19FUlIob3BfZGF0YSkpCi0JCXJldHVybiBQVFJfRVJSKG9wX2RhdGEpOwotCi0JbGxfZ2V0X2NoaWxkX2ZpZChkaXIsIG5hbWUsICZvcF9kYXRhLT5vcF9maWQzKTsKLQlvcF9kYXRhLT5vcF9maWQyID0gb3BfZGF0YS0+b3BfZmlkMzsKLQlyYyA9IG1kX3VubGluayhsbF9pMnNiaShkaXIpLT5sbF9tZF9leHAsIG9wX2RhdGEsICZyZXF1ZXN0KTsKLQlsbF9maW5pc2hfbWRfb3BfZGF0YShvcF9kYXRhKTsKLQlpZiAocmMgPT0gMCkgewotCQlsbF91cGRhdGVfdGltZXMocmVxdWVzdCwgZGlyKTsKLQkJbGxfc3RhdHNfb3BzX3RhbGx5KGxsX2kyc2JpKGRpciksIExQUk9DX0xMX1JNRElSLCAxKTsKLQl9Ci0KLQlwdGxycGNfcmVxX2ZpbmlzaGVkKHJlcXVlc3QpOwotCXJldHVybiByYzsKKwlpZiAoY2hpbGQtPmRfaW5vZGUpCisJCSpmaWQgPSAqbGxfaW5vZGUyZmlkKGNoaWxkLT5kX2lub2RlKTsKIH0KIAogLyoqCkBAIC0xMDk5LDMyICs5NzAsMjYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIGxsX3VubGlua19nZW5lcmljKCkgZG9lc24ndCB1cGRhdGUgdGhlIGlub2RlIHdpdGggdGhlIG5ldyBsaW5rIGNvdW50LgorLyogbGxfdW5saW5rKCkgZG9lc24ndCB1cGRhdGUgdGhlIGlub2RlIHdpdGggdGhlIG5ldyBsaW5rIGNvdW50LgogICogSW5zdGVhZCwgbGxfZGRlbGV0ZSgpIGFuZCBsbF9kX2lwdXQoKSB3aWxsIHVwZGF0ZSBpdCBiYXNlZCB1cG9uIGlmIHRoZXJlCiAgKiBpcyBhbnkgbG9jayBleGlzdGluZy4gVGhleSB3aWxsIHJlY3ljbGUgZGVudHJpZXMgYW5kIGlub2RlcyBiYXNlZCB1cG9uIGxvY2tzCiAgKiB0b28uIGI9MjA0MzMgKi8KLXN0YXRpYyBpbnQgbGxfdW5saW5rX2dlbmVyaWMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRwYXJlbnQsCi0JCQkgICAgIHN0cnVjdCBkZW50cnkgKmRjaGlsZCwgc3RydWN0IHFzdHIgKm5hbWUpCitzdGF0aWMgaW50IGxsX3VubGluayhzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKnJlcXVlc3QgPSBOVUxMOwogCXN0cnVjdCBtZF9vcF9kYXRhICpvcF9kYXRhOwogCWludCByYzsKLQlDREVCVUcoRF9WRlNUUkFDRSwgIlZGUyBPcDpuYW1lPSUuKnMsZGlyPSVsdS8ldSglcClcbiIsCi0JICAgICAgIG5hbWUtPmxlbiwgbmFtZS0+bmFtZSwgZGlyLT5pX2lubywgZGlyLT5pX2dlbmVyYXRpb24sIGRpcik7CisJQ0RFQlVHKERfVkZTVFJBQ0UsICJWRlMgT3A6bmFtZT0lcGQsZGlyPSVsdS8ldSglcClcbiIsCisJICAgICAgIGRlbnRyeSwgZGlyLT5pX2lubywgZGlyLT5pX2dlbmVyYXRpb24sIGRpcik7CiAKLQkvKgotCSAqIFhYWDogdW5saW5rIGJpbmQgbW91bnRwb2ludCBtYXliZSBjYWxsIHRvIGhlcmUsCi0JICoganVzdCBjaGVjayBpdCBhcyB2ZnNfdW5saW5rIGRvZXMuCi0JICovCi0JaWYgKHVubGlrZWx5KGxsX2RfbW91bnRwb2ludChkcGFyZW50LCBkY2hpbGQsIG5hbWUpKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCW9wX2RhdGEgPSBsbF9wcmVwX21kX29wX2RhdGEoTlVMTCwgZGlyLCBOVUxMLCBuYW1lLT5uYW1lLAotCQkJCSAgICAgbmFtZS0+bGVuLCAwLCBMVVNUUkVfT1BDX0FOWSwgTlVMTCk7CisJb3BfZGF0YSA9IGxsX3ByZXBfbWRfb3BfZGF0YShOVUxMLCBkaXIsIE5VTEwsCisJCQkJICAgICBkZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCSAgICAgZGVudHJ5LT5kX25hbWUubGVuLAorCQkJCSAgICAgMCwgTFVTVFJFX09QQ19BTlksIE5VTEwpOwogCWlmIChJU19FUlIob3BfZGF0YSkpCiAJCXJldHVybiBQVFJfRVJSKG9wX2RhdGEpOwogCi0JbGxfZ2V0X2NoaWxkX2ZpZChkaXIsIG5hbWUsICZvcF9kYXRhLT5vcF9maWQzKTsKKwlsbF9nZXRfY2hpbGRfZmlkKGRlbnRyeSwgJm9wX2RhdGEtPm9wX2ZpZDMpOwogCW9wX2RhdGEtPm9wX2ZpZDIgPSBvcF9kYXRhLT5vcF9maWQzOwogCXJjID0gbWRfdW5saW5rKGxsX2kyc2JpKGRpciktPmxsX21kX2V4cCwgb3BfZGF0YSwgJnJlcXVlc3QpOwogCWxsX2ZpbmlzaF9tZF9vcF9kYXRhKG9wX2RhdGEpOwpAQCAtMTE0MCw5NSArMTAwNSwxNDAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgbGxfcmVuYW1lX2dlbmVyaWMoc3RydWN0IGlub2RlICpzcmMsIHN0cnVjdCBkZW50cnkgKnNyY19kcGFyZW50LAotCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpzcmNfZGNoaWxkLCBzdHJ1Y3QgcXN0ciAqc3JjX25hbWUsCi0JCQkgICAgIHN0cnVjdCBpbm9kZSAqdGd0LCBzdHJ1Y3QgZGVudHJ5ICp0Z3RfZHBhcmVudCwKLQkJCSAgICAgc3RydWN0IGRlbnRyeSAqdGd0X2RjaGlsZCwgc3RydWN0IHFzdHIgKnRndF9uYW1lKQorc3RhdGljIGludCBsbF9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBsbF91bW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXF1ZXN0ID0gTlVMTDsKLQlzdHJ1Y3QgbGxfc2JfaW5mbyAqc2JpID0gbGxfaTJzYmkoc3JjKTsKLQlzdHJ1Y3QgbWRfb3BfZGF0YSAqb3BfZGF0YTsKIAlpbnQgZXJyOwogCi0JQ0RFQlVHKERfVkZTVFJBQ0UsCi0JICAgICAgICJWRlMgT3A6b2xkbmFtZT0lLipzLHNyY19kaXI9JWx1LyV1KCVwKSxuZXduYW1lPSUuKnMsIgotCSAgICAgICAidGd0X2Rpcj0lbHUvJXUoJXApXG4iLCBzcmNfbmFtZS0+bGVuLCBzcmNfbmFtZS0+bmFtZSwKLQkgICAgICAgc3JjLT5pX2lubywgc3JjLT5pX2dlbmVyYXRpb24sIHNyYywgdGd0X25hbWUtPmxlbiwKLQkgICAgICAgdGd0X25hbWUtPm5hbWUsIHRndC0+aV9pbm8sIHRndC0+aV9nZW5lcmF0aW9uLCB0Z3QpOworCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wOm5hbWU9JXBkLGRpcj0lbHUvJXUoJXApXG4iLAorCSAgICAgICBkZW50cnksIGRpci0+aV9pbm8sIGRpci0+aV9nZW5lcmF0aW9uLCBkaXIpOwogCi0JaWYgKHVubGlrZWx5KGxsX2RfbW91bnRwb2ludChzcmNfZHBhcmVudCwgc3JjX2RjaGlsZCwgc3JjX25hbWUpIHx8Ci0JICAgIGxsX2RfbW91bnRwb2ludCh0Z3RfZHBhcmVudCwgdGd0X2RjaGlsZCwgdGd0X25hbWUpKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoIUlTX1BPU0lYQUNMKGRpcikgfHwgIWV4cF9jb25uZWN0X3VtYXNrKGxsX2kybWRleHAoZGlyKSkpCisJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKKwltb2RlID0gKG1vZGUgJiAoU19JUldYVUdPfFNfSVNWVFgpKSB8IFNfSUZESVI7CisJZXJyID0gbGxfbmV3X25vZGUoZGlyLCBkZW50cnksIE5VTEwsIG1vZGUsIDAsIExVU1RSRV9PUENfTUtESVIpOwogCi0Jb3BfZGF0YSA9IGxsX3ByZXBfbWRfb3BfZGF0YShOVUxMLCBzcmMsIHRndCwgTlVMTCwgMCwgMCwKLQkJCQkgICAgIExVU1RSRV9PUENfQU5ZLCBOVUxMKTsKLQlpZiAoSVNfRVJSKG9wX2RhdGEpKQotCQlyZXR1cm4gUFRSX0VSUihvcF9kYXRhKTsKLQotCWxsX2dldF9jaGlsZF9maWQoc3JjLCBzcmNfbmFtZSwgJm9wX2RhdGEtPm9wX2ZpZDMpOwotCWxsX2dldF9jaGlsZF9maWQodGd0LCB0Z3RfbmFtZSwgJm9wX2RhdGEtPm9wX2ZpZDQpOwotCWVyciA9IG1kX3JlbmFtZShzYmktPmxsX21kX2V4cCwgb3BfZGF0YSwKLQkJCXNyY19uYW1lLT5uYW1lLCBzcmNfbmFtZS0+bGVuLAotCQkJdGd0X25hbWUtPm5hbWUsIHRndF9uYW1lLT5sZW4sICZyZXF1ZXN0KTsKLQlsbF9maW5pc2hfbWRfb3BfZGF0YShvcF9kYXRhKTsKLQlpZiAoIWVycikgewotCQlsbF91cGRhdGVfdGltZXMocmVxdWVzdCwgc3JjKTsKLQkJbGxfdXBkYXRlX3RpbWVzKHJlcXVlc3QsIHRndCk7Ci0JCWxsX3N0YXRzX29wc190YWxseShzYmksIExQUk9DX0xMX1JFTkFNRSwgMSk7Ci0JCWVyciA9IGxsX29iamVjdHNfZGVzdHJveShyZXF1ZXN0LCBzcmMpOwotCX0KLQotCXB0bHJwY19yZXFfZmluaXNoZWQocmVxdWVzdCk7CisJaWYgKCFlcnIpCisJCWxsX3N0YXRzX29wc190YWxseShsbF9pMnNiaShkaXIpLCBMUFJPQ19MTF9NS0RJUiwgMSk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGxsX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkY2hpbGQsIGxsX3Vtb2RlX3QgbW9kZSwKLQkJICAgIGRldl90IHJkZXYpCi17Ci0JcmV0dXJuIGxsX21rbm9kX2dlbmVyaWMoZGlyLCAmZGNoaWxkLT5kX25hbWUsIG1vZGUsCi0JCQkJb2xkX2VuY29kZV9kZXYocmRldiksIGRjaGlsZCk7Ci19Ci0KLXN0YXRpYyBpbnQgbGxfdW5saW5rKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXJldHVybiBsbF91bmxpbmtfZ2VuZXJpYyhkaXIsIE5VTEwsIGRlbnRyeSwgJmRlbnRyeS0+ZF9uYW1lKTsKLX0KLQotc3RhdGljIGludCBsbF9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBsbF91bW9kZV90IG1vZGUpCi17Ci0JcmV0dXJuIGxsX21rZGlyX2dlbmVyaWMoZGlyLCAmZGVudHJ5LT5kX25hbWUsIG1vZGUsIGRlbnRyeSk7Ci19Ci0KIHN0YXRpYyBpbnQgbGxfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlyZXR1cm4gbGxfcm1kaXJfZ2VuZXJpYyhkaXIsIE5VTEwsIGRlbnRyeSwgJmRlbnRyeS0+ZF9uYW1lKTsKKwlzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKnJlcXVlc3QgPSBOVUxMOworCXN0cnVjdCBtZF9vcF9kYXRhICpvcF9kYXRhOworCWludCByYzsKKworCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wOm5hbWU9JXBkLGRpcj0lbHUvJXUoJXApXG4iLAorCSAgICAgICBkZW50cnksIGRpci0+aV9pbm8sIGRpci0+aV9nZW5lcmF0aW9uLCBkaXIpOworCisJb3BfZGF0YSA9IGxsX3ByZXBfbWRfb3BfZGF0YShOVUxMLCBkaXIsIE5VTEwsCisJCQkJICAgICBkZW50cnktPmRfbmFtZS5uYW1lLCAKKwkJCQkgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwKKwkJCQkgICAgIFNfSUZESVIsIExVU1RSRV9PUENfQU5ZLCBOVUxMKTsKKwlpZiAoSVNfRVJSKG9wX2RhdGEpKQorCQlyZXR1cm4gUFRSX0VSUihvcF9kYXRhKTsKKworCWxsX2dldF9jaGlsZF9maWQoZGVudHJ5LCAmb3BfZGF0YS0+b3BfZmlkMyk7CisJb3BfZGF0YS0+b3BfZmlkMiA9IG9wX2RhdGEtPm9wX2ZpZDM7CisJcmMgPSBtZF91bmxpbmsobGxfaTJzYmkoZGlyKS0+bGxfbWRfZXhwLCBvcF9kYXRhLCAmcmVxdWVzdCk7CisJbGxfZmluaXNoX21kX29wX2RhdGEob3BfZGF0YSk7CisJaWYgKHJjID09IDApIHsKKwkJbGxfdXBkYXRlX3RpbWVzKHJlcXVlc3QsIGRpcik7CisJCWxsX3N0YXRzX29wc190YWxseShsbF9pMnNiaShkaXIpLCBMUFJPQ19MTF9STURJUiwgMSk7CisJfQorCisJcHRscnBjX3JlcV9maW5pc2hlZChyZXF1ZXN0KTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgbGxfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgICAgICBjb25zdCBjaGFyICpvbGRuYW1lKQogewotCXJldHVybiBsbF9zeW1saW5rX2dlbmVyaWMoZGlyLCAmZGVudHJ5LT5kX25hbWUsIG9sZG5hbWUsIGRlbnRyeSk7CisJaW50IGVycjsKKworCUNERUJVRyhEX1ZGU1RSQUNFLCAiVkZTIE9wOm5hbWU9JXBkLGRpcj0lbHUvJXUoJXApLHRhcmdldD0lLipzXG4iLAorCSAgICAgICBkZW50cnksIGRpci0+aV9pbm8sIGRpci0+aV9nZW5lcmF0aW9uLAorCSAgICAgICBkaXIsIDMwMDAsIG9sZG5hbWUpOworCisJZXJyID0gbGxfbmV3X25vZGUoZGlyLCBkZW50cnksIG9sZG5hbWUsIFNfSUZMTksgfCBTX0lSV1hVR08sCisJCQkwLCBMVVNUUkVfT1BDX1NZTUxJTkspOworCisJaWYgKCFlcnIpCisJCWxsX3N0YXRzX29wc190YWxseShsbF9pMnNiaShkaXIpLCBMUFJPQ19MTF9TWU1MSU5LLCAxKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgbGxfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKLQlyZXR1cm4gbGxfbGlua19nZW5lcmljKG9sZF9kZW50cnktPmRfaW5vZGUsIGRpciwgJm5ld19kZW50cnktPmRfbmFtZSwKLQkJCSAgICAgICBuZXdfZGVudHJ5KTsKKwlzdHJ1Y3QgaW5vZGUgKnNyYyA9IG9sZF9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGxsX3NiX2luZm8gKnNiaSA9IGxsX2kyc2JpKGRpcik7CisJc3RydWN0IHB0bHJwY19yZXF1ZXN0ICpyZXF1ZXN0ID0gTlVMTDsKKwlzdHJ1Y3QgbWRfb3BfZGF0YSAqb3BfZGF0YTsKKwlpbnQgZXJyOworCisJQ0RFQlVHKERfVkZTVFJBQ0UsCisJICAgICAgICJWRlMgT3A6IGlub2RlPSVsdS8ldSglcCksIGRpcj0lbHUvJXUoJXApLCB0YXJnZXQ9JXBkXG4iLAorCSAgICAgICBzcmMtPmlfaW5vLCBzcmMtPmlfZ2VuZXJhdGlvbiwgc3JjLCBkaXItPmlfaW5vLAorCSAgICAgICBkaXItPmlfZ2VuZXJhdGlvbiwgZGlyLCBuZXdfZGVudHJ5KTsKKworCW9wX2RhdGEgPSBsbF9wcmVwX21kX29wX2RhdGEoTlVMTCwgc3JjLCBkaXIsIG5ld19kZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCSAgICAgbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiwKKwkJCQkgICAgIDAsIExVU1RSRV9PUENfQU5ZLCBOVUxMKTsKKwlpZiAoSVNfRVJSKG9wX2RhdGEpKQorCQlyZXR1cm4gUFRSX0VSUihvcF9kYXRhKTsKKworCWVyciA9IG1kX2xpbmsoc2JpLT5sbF9tZF9leHAsIG9wX2RhdGEsICZyZXF1ZXN0KTsKKwlsbF9maW5pc2hfbWRfb3BfZGF0YShvcF9kYXRhKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWxsX3VwZGF0ZV90aW1lcyhyZXF1ZXN0LCBkaXIpOworCWxsX3N0YXRzX29wc190YWxseShzYmksIExQUk9DX0xMX0xJTkssIDEpOworb3V0OgorCXB0bHJwY19yZXFfZmluaXNoZWQocmVxdWVzdCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBsbF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCQkgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKKwlzdHJ1Y3QgcHRscnBjX3JlcXVlc3QgKnJlcXVlc3QgPSBOVUxMOworCXN0cnVjdCBsbF9zYl9pbmZvICpzYmkgPSBsbF9pMnNiaShvbGRfZGlyKTsKKwlzdHJ1Y3QgbWRfb3BfZGF0YSAqb3BfZGF0YTsKIAlpbnQgZXJyOwotCWVyciA9IGxsX3JlbmFtZV9nZW5lcmljKG9sZF9kaXIsIE5VTEwsCi0JCQkJIG9sZF9kZW50cnksICZvbGRfZGVudHJ5LT5kX25hbWUsCi0JCQkJIG5ld19kaXIsIE5VTEwsIG5ld19kZW50cnksCi0JCQkJICZuZXdfZGVudHJ5LT5kX25hbWUpOworCisJQ0RFQlVHKERfVkZTVFJBQ0UsCisJICAgICAgICJWRlMgT3A6b2xkbmFtZT0lcGQsc3JjX2Rpcj0lbHUvJXUoJXApLG5ld25hbWU9JXBkLCIKKwkgICAgICAgInRndF9kaXI9JWx1LyV1KCVwKVxuIiwgb2xkX2RlbnRyeSwKKwkgICAgICAgb2xkX2Rpci0+aV9pbm8sIG9sZF9kaXItPmlfZ2VuZXJhdGlvbiwgb2xkX2RpciwgbmV3X2RlbnRyeSwKKwkgICAgICAgbmV3X2Rpci0+aV9pbm8sIG5ld19kaXItPmlfZ2VuZXJhdGlvbiwgbmV3X2Rpcik7CisKKwlvcF9kYXRhID0gbGxfcHJlcF9tZF9vcF9kYXRhKE5VTEwsIG9sZF9kaXIsIG5ld19kaXIsIE5VTEwsIDAsIDAsCisJCQkJICAgICBMVVNUUkVfT1BDX0FOWSwgTlVMTCk7CisJaWYgKElTX0VSUihvcF9kYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIob3BfZGF0YSk7CisKKwlsbF9nZXRfY2hpbGRfZmlkKG9sZF9kZW50cnksICZvcF9kYXRhLT5vcF9maWQzKTsKKwlsbF9nZXRfY2hpbGRfZmlkKG5ld19kZW50cnksICZvcF9kYXRhLT5vcF9maWQ0KTsKKwllcnIgPSBtZF9yZW5hbWUoc2JpLT5sbF9tZF9leHAsIG9wX2RhdGEsCisJCQlvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCW9sZF9kZW50cnktPmRfbmFtZS5sZW4sCisJCQluZXdfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCW5ld19kZW50cnktPmRfbmFtZS5sZW4sICZyZXF1ZXN0KTsKKwlsbF9maW5pc2hfbWRfb3BfZGF0YShvcF9kYXRhKTsKIAlpZiAoIWVycikgewotCQkJZF9tb3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnkpOworCQlsbF91cGRhdGVfdGltZXMocmVxdWVzdCwgb2xkX2Rpcik7CisJCWxsX3VwZGF0ZV90aW1lcyhyZXF1ZXN0LCBuZXdfZGlyKTsKKwkJbGxfc3RhdHNfb3BzX3RhbGx5KHNiaSwgTFBST0NfTExfUkVOQU1FLCAxKTsKKwkJZXJyID0gbGxfb2JqZWN0c19kZXN0cm95KHJlcXVlc3QsIG9sZF9kaXIpOwogCX0KKworCXB0bHJwY19yZXFfZmluaXNoZWQocmVxdWVzdCk7CisJaWYgKCFlcnIpCisJCWRfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS9zdGF0YWhlYWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3N0YXRhaGVhZC5jCmluZGV4IDA2YjcxYmMuLjA5ZDk2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3N0YXRhaGVhZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3N0YXRhaGVhZC5jCkBAIC05NjksOCArOTY5LDggQEAKIAlzdHJ1Y3QgbF93YWl0X2luZm8JbHdpICAgID0geyAwIH07CiAKIAl0aHJlYWQtPnRfcGlkID0gY3VycmVudF9waWQoKTsKLQlDREVCVUcoRF9SRUFEQSwgImFnbCB0aHJlYWQgc3RhcnRlZDogc2FpICVwLCBwYXJlbnQgJS4qc1xuIiwKLQkgICAgICAgc2FpLCBwYXJlbnQtPmRfbmFtZS5sZW4sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOworCUNERUJVRyhEX1JFQURBLCAiYWdsIHRocmVhZCBzdGFydGVkOiBzYWkgJXAsIHBhcmVudCAlcGRcbiIsCisJICAgICAgIHNhaSwgcGFyZW50KTsKIAogCWF0b21pY19pbmMoJnNiaS0+bGxfYWdsX3RvdGFsKTsKIAlzcGluX2xvY2soJnBsbGktPmxsaV9hZ2xfbG9jayk7CkBAIC0xMDE5LDggKzEwMTksOCBAQAogCXNwaW5fdW5sb2NrKCZwbGxpLT5sbGlfYWdsX2xvY2spOwogCXdha2VfdXAoJnRocmVhZC0+dF9jdGxfd2FpdHEpOwogCWxsX3NhaV9wdXQoc2FpKTsKLQlDREVCVUcoRF9SRUFEQSwgImFnbCB0aHJlYWQgc3RvcHBlZDogc2FpICVwLCBwYXJlbnQgJS4qc1xuIiwKLQkgICAgICAgc2FpLCBwYXJlbnQtPmRfbmFtZS5sZW4sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOworCUNERUJVRyhEX1JFQURBLCAiYWdsIHRocmVhZCBzdG9wcGVkOiBzYWkgJXAsIHBhcmVudCAlcGRcbiIsCisJICAgICAgIHNhaSwgcGFyZW50KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAzMSw4ICsxMDMxLDggQEAKIAlzdHJ1Y3QgbGxfaW5vZGVfaW5mbyAgKnBsbGk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCi0JQ0RFQlVHKERfUkVBREEsICJzdGFydCBhZ2wgdGhyZWFkOiBzYWkgJXAsIHBhcmVudCAlLipzXG4iLAotCSAgICAgICBzYWksIHBhcmVudC0+ZF9uYW1lLmxlbiwgcGFyZW50LT5kX25hbWUubmFtZSk7CisJQ0RFQlVHKERfUkVBREEsICJzdGFydCBhZ2wgdGhyZWFkOiBzYWkgJXAsIHBhcmVudCAlcGRcbiIsCisJICAgICAgIHNhaSwgcGFyZW50KTsKIAogCXBsbGkgPSBsbF9pMmluZm8ocGFyZW50LT5kX2lub2RlKTsKIAl0YXNrID0ga3RocmVhZF9ydW4obGxfYWdsX3RocmVhZCwgcGFyZW50LApAQCAtMTA2Niw4ICsxMDY2LDggQEAKIAlzdHJ1Y3QgbF93YWl0X2luZm8JbHdpICAgID0geyAwIH07CiAKIAl0aHJlYWQtPnRfcGlkID0gY3VycmVudF9waWQoKTsKLQlDREVCVUcoRF9SRUFEQSwgInN0YXRhaGVhZCB0aHJlYWQgc3RhcnRpbmc6IHNhaSAlcCwgcGFyZW50ICUuKnNcbiIsCi0JICAgICAgIHNhaSwgcGFyZW50LT5kX25hbWUubGVuLCBwYXJlbnQtPmRfbmFtZS5uYW1lKTsKKwlDREVCVUcoRF9SRUFEQSwgInN0YXRhaGVhZCB0aHJlYWQgc3RhcnRpbmc6IHNhaSAlcCwgcGFyZW50ICVwZFxuIiwKKwkgICAgICAgc2FpLCBwYXJlbnQpOwogCiAJaWYgKHNiaS0+bGxfZmxhZ3MgJiBMTF9TQklfQUdMX0VOQUJMRUQpCiAJCWxsX3N0YXJ0X2FnbChwYXJlbnQsIHNhaSk7CkBAIC0xMjg4LDggKzEyODgsOCBAQAogCXdha2VfdXAoJnRocmVhZC0+dF9jdGxfd2FpdHEpOwogCWxsX3NhaV9wdXQoc2FpKTsKIAlkcHV0KHBhcmVudCk7Ci0JQ0RFQlVHKERfUkVBREEsICJzdGF0YWhlYWQgdGhyZWFkIHN0b3BwZWQ6IHNhaSAlcCwgcGFyZW50ICUuKnNcbiIsCi0JICAgICAgIHNhaSwgcGFyZW50LT5kX25hbWUubGVuLCBwYXJlbnQtPmRfbmFtZS5uYW1lKTsKKwlDREVCVUcoRF9SRUFEQSwgInN0YXRhaGVhZCB0aHJlYWQgc3RvcHBlZDogc2FpICVwLCBwYXJlbnQgJXBkXG4iLAorCSAgICAgICBzYWksIHBhcmVudCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNjEyLDEwICsxNjEyLDkgQEAKIAkJCQl9IGVsc2UgaWYgKCgqZGVudHJ5cCktPmRfaW5vZGUgIT0gaW5vZGUpIHsKIAkJCQkJLyogcmV2YWxpZGF0ZSwgYnV0IGlub2RlIGlzIHJlY3JlYXRlZCAqLwogCQkJCQlDREVCVUcoRF9SRUFEQSwKLQkJCQkJICAgICAgInN0YWxlIGRlbnRyeSAlLipzIGlub2RlICVsdS8ldSwgIgorCQkJCQkgICAgICAic3RhbGUgZGVudHJ5ICVwZCBpbm9kZSAlbHUvJXUsICIKIAkJCQkJICAgICAgInN0YXRhaGVhZCBpbm9kZSAlbHUvJXVcbiIsCi0JCQkJCSAgICAgICgqZGVudHJ5cCktPmRfbmFtZS5sZW4sCi0JCQkJCSAgICAgICgqZGVudHJ5cCktPmRfbmFtZS5uYW1lLAorCQkJCQkgICAgICAqZGVudHJ5cCwKIAkJCQkJICAgICAgKCpkZW50cnlwKS0+ZF9pbm9kZS0+aV9pbm8sCiAJCQkJCSAgICAgICgqZGVudHJ5cCktPmRfaW5vZGUtPmlfZ2VuZXJhdGlvbiwKIAkJCQkJICAgICAgaW5vZGUtPmlfaW5vLApAQCAtMTY2Niw5ICsxNjY1LDkgQEAKIAlpZiAodW5saWtlbHkoc2FpLT5zYWlfaW5vZGUgIT0gcGFyZW50LT5kX2lub2RlKSkgewogCQlzdHJ1Y3QgbGxfaW5vZGVfaW5mbyAqbmxsaSA9IGxsX2kyaW5mbyhwYXJlbnQtPmRfaW5vZGUpOwogCi0JCUNXQVJOKCJSYWNlIGNvbmRpdGlvbiwgc29tZW9uZSBjaGFuZ2VkICUuKnMganVzdCBub3c6ICIKKwkJQ1dBUk4oIlJhY2UgY29uZGl0aW9uLCBzb21lb25lIGNoYW5nZWQgJXBkIGp1c3Qgbm93OiAiCiAJCSAgICAgICJvbGQgcGFyZW50ICJERklEIiwgbmV3IHBhcmVudCAiREZJRCJcbiIsCi0JCSAgICAgICgqZGVudHJ5cCktPmRfbmFtZS5sZW4sICgqZGVudHJ5cCktPmRfbmFtZS5uYW1lLAorCQkgICAgICAqZGVudHJ5cCwKIAkJICAgICAgUEZJRCgmbGxpLT5sbGlfZmlkKSwgUEZJRCgmbmxsaS0+bGxpX2ZpZCkpOwogCQlkcHV0KHBhcmVudCk7CiAJCWlwdXQoc2FpLT5zYWlfaW5vZGUpOwpAQCAtMTY3Niw4ICsxNjc1LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JQ0RFQlVHKERfUkVBREEsICJzdGFydCBzdGF0YWhlYWQgdGhyZWFkOiBzYWkgJXAsIHBhcmVudCAlLipzXG4iLAotCSAgICAgICBzYWksIHBhcmVudC0+ZF9uYW1lLmxlbiwgcGFyZW50LT5kX25hbWUubmFtZSk7CisJQ0RFQlVHKERfUkVBREEsICJzdGFydCBzdGF0YWhlYWQgdGhyZWFkOiBzYWkgJXAsIHBhcmVudCAlcGRcbiIsCisJICAgICAgIHNhaSwgcGFyZW50KTsKIAogCS8qIFRoZSBzYWkgYnVmZmVyIGFscmVhZHkgaGFzIG9uZSByZWZlcmVuY2UgdGFrZW4gYXQgYWxsb2NhdGlvbiB0aW1lLAogCSAqIGJ1dCBhcyBzb29uIGFzIHdlIGV4cG9zZSB0aGUgc2FpIGJ5IGF0dGFjaGluZyBpdCB0byB0aGUgbGxpIHRoYXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3Z2cF9pby5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKaW5kZXggZDNmOTY3YS4uZTU0MGE2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCXN0cnVjdCBpbm9kZSAgKmlub2RlID0gY2NjX29iamVjdF9pbm9kZShpb3MtPmNpc19vYmopOwogCiAJTEFTU0VSVChpbm9kZSA9PQotCQljbDJjY2NfaW8oZW52LCBpb3MpLT5jdWlfZmQtPmZkX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwkJZmlsZV9pbm9kZShjbDJjY2NfaW8oZW52LCBpb3MpLT5jdWlfZmQtPmZkX2ZpbGUpKTsKIAl2aW8tPnUuZmF1bHQuZnRfbXRpbWUgPSBMVElNRV9TKGlub2RlLT5pX210aW1lKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzOSw3ICsyMzksNyBAQAogCiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJd2hpbGUgKCh2bWEgPSBvdXJfdm1hKG1tLCBhZGRyLCBjb3VudCkpICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUodm1hLT52bV9maWxlKTsKIAkJCWludCBmbGFncyA9IENFRl9NVVNUOwogCiAJCQlpZiAobGxfZmlsZV9ub2xvY2sodm1hLT52bV9maWxlKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUveGF0dHIuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3hhdHRyLmMKaW5kZXggMjUyYTYxOS4uMzE1MWJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUveGF0dHIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9sbGl0ZS94YXR0ci5jCkBAIC0yNDEsMTQgKzI0MSwxMSBAQAogCQkJbHVtcC0+bG1tX3N0cmlwZV9vZmZzZXQgPSAtMTsKIAogCQlpZiAobHVtcCAhPSBOVUxMICYmIFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCXN0cnVjdCBmaWxlIGY7CiAJCQlpbnQgZmxhZ3MgPSBGTU9ERV9XUklURTsKIAkJCWludCBsdW1fc2l6ZSA9IChsdW1wLT5sbW1fbWFnaWMgPT0gTE9WX1VTRVJfTUFHSUNfVjEpID8KIAkJCQlzaXplb2YoKmx1bXApIDogc2l6ZW9mKHN0cnVjdCBsb3ZfdXNlcl9tZF92Myk7CiAKLQkJCW1lbXNldCgmZiwgMCwgc2l6ZW9mKGYpKTsgLyogZi5mX2ZsYWdzIGlzIHVzZWQgYmVsb3cgKi8KLQkJCWYuZl9kZW50cnkgPSBkZW50cnk7Ci0JCQlyYyA9IGxsX2xvdl9zZXRzdHJpcGVfZWFfaW5mbyhpbm9kZSwgJmYsIGZsYWdzLCBsdW1wLAorCQkJcmMgPSBsbF9sb3Zfc2V0c3RyaXBlX2VhX2luZm8oaW5vZGUsIGRlbnRyeSwgZmxhZ3MsIGx1bXAsCiAJCQkJCQkgICAgICBsdW1fc2l6ZSk7CiAJCQkvKiBiMTA2Njc6IHJjIGFsd2F5cyBiZSAwIGhlcmUgZm9yIG5vdyAqLwogCQkJcmMgPSAwOwpAQCAtNTE5LDggKzUxNiw4IEBACiAJCX0KIAogCQlpZiAoc2l6ZSA8IGxtbXNpemUpIHsKLQkJCUNFUlJPUigic2VydmVyIGJ1ZzogcmVwbGllZCBzaXplICVkID4gJWQgZm9yICVzICglcylcbiIsCi0JCQkgICAgICAgbG1tc2l6ZSwgKGludClzaXplLCBkZW50cnktPmRfbmFtZS5uYW1lLCBuYW1lKTsKKwkJCUNFUlJPUigic2VydmVyIGJ1ZzogcmVwbGllZCBzaXplICVkID4gJWQgZm9yICVwZCAoJXMpXG4iLAorCQkJICAgICAgIGxtbXNpemUsIChpbnQpc2l6ZSwgZGVudHJ5LCBuYW1lKTsKIAkJCXJjID0gLUVSQU5HRTsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC9sb29wYmFjay90Y21fbG9vcC5jIGIvZHJpdmVycy90YXJnZXQvbG9vcGJhY2svdGNtX2xvb3AuYwppbmRleCBhYjNhYjI3Li40ZDFiNzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9sb29wYmFjay90Y21fbG9vcC5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L2xvb3BiYWNrL3RjbV9sb29wLmMKQEAgLTExMCw1OCArMTEwLDYgQEAKICAqLwogc3RydWN0IGRldmljZSAqdGNtX2xvb3BfcHJpbWFyeTsKIAotLyoKLSAqIENvcGllZCBmcm9tIGRyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYzpmY19jaGFuZ2VfcXVldWVfZGVwdGgoKSBhbmQKLSAqIGRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOmlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCgpCi0gKi8KLXN0YXRpYyBpbnQgdGNtX2xvb3BfY2hhbmdlX3F1ZXVlX2RlcHRoKAotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQlpbnQgZGVwdGgsCi0JaW50IHJlYXNvbikKLXsKLQlzd2l0Y2ggKHJlYXNvbikgewotCWNhc2UgU0NTSV9RREVQVEhfREVGQVVMVDoKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIGRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9RRlVMTDoKLQkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIGRlcHRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1NJX1FERVBUSF9SQU1QX1VQOgotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgZGVwdGgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKLX0KLQotc3RhdGljIGludCB0Y21fbG9vcF9jaGFuZ2VfcXVldWVfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0YWcpCi17Ci0JaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKLQkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgdGFnKTsKLQotCQlpZiAodGFnKQotCQkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2Rldiwgc2Rldi0+cXVldWVfZGVwdGgpOwotCQllbHNlCi0JCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoKTsKLQl9IGVsc2UKLQkJdGFnID0gMDsKLQotCXJldHVybiB0YWc7Ci19Ci0KLS8qCi0gKiBMb2NhdGUgdGhlIFNBTSBUYXNrIEF0dHIgZnJvbSBzdHJ1Y3Qgc2NzaV9jbW5kICoKLSAqLwotc3RhdGljIGludCB0Y21fbG9vcF9zYW1fYXR0cihzdHJ1Y3Qgc2NzaV9jbW5kICpzYywgaW50IHRhZykKLXsKLQlpZiAoc2MtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCAmJgotCSAgICBzYy0+ZGV2aWNlLT5vcmRlcmVkX3RhZ3MgJiYgdGFnID49IDApCi0JCXJldHVybiBNU0dfT1JERVJFRF9UQUc7Ci0KLQlyZXR1cm4gTVNHX1NJTVBMRV9UQUc7Ci19Ci0KIHN0YXRpYyB2b2lkIHRjbV9sb29wX3N1Ym1pc3Npb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHRjbV9sb29wX2NtZCAqdGxfY21kID0KQEAgLTIyMCw3ICsxNjgsNyBAQAogCiAJcmMgPSB0YXJnZXRfc3VibWl0X2NtZF9tYXBfc2dscyhzZV9jbWQsIHRsX25leHVzLT5zZV9zZXNzLCBzYy0+Y21uZCwKIAkJCSZ0bF9jbWQtPnRsX3NlbnNlX2J1ZlswXSwgdGxfY21kLT5zYy0+ZGV2aWNlLT5sdW4sCi0JCQl0cmFuc2Zlcl9sZW5ndGgsIHRjbV9sb29wX3NhbV9hdHRyKHNjLCB0bF9jbWQtPnNjX2NtZF90YWcpLAorCQkJdHJhbnNmZXJfbGVuZ3RoLCBNU0dfU0lNUExFX1RBRywKIAkJCXNjLT5zY19kYXRhX2RpcmVjdGlvbiwgMCwKIAkJCXNjc2lfc2dsaXN0KHNjKSwgc2NzaV9zZ19jb3VudChzYyksCiAJCQlzZ2xfYmlkaSwgc2dsX2JpZGlfY291bnQsCkBAIC00MzEsMjcgKzM3OSwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRjbV9sb29wX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkKQotewotCWlmIChzZC0+dGFnZ2VkX3N1cHBvcnRlZCkgewotCQlzY3NpX2FjdGl2YXRlX3RjcShzZCwgc2QtPnF1ZXVlX2RlcHRoKTsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2QsIE1TR19TSU1QTEVfVEFHLAotCQkJCQlzZC0+aG9zdC0+Y21kX3Blcl9sdW4pOwotCX0gZWxzZSB7Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkLCAwLAotCQkJCQlzZC0+aG9zdC0+Y21kX3Blcl9sdW4pOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB0Y21fbG9vcF9kcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnNob3dfaW5mbwkJPSB0Y21fbG9vcF9zaG93X2luZm8sCiAJLnByb2NfbmFtZQkJPSAidGNtX2xvb3BiYWNrIiwKIAkubmFtZQkJCT0gIlRDTV9Mb29wYmFjayIsCiAJLnF1ZXVlY29tbWFuZAkJPSB0Y21fbG9vcF9xdWV1ZWNvbW1hbmQsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IHRjbV9sb29wX2NoYW5nZV9xdWV1ZV9kZXB0aCwKLQkuY2hhbmdlX3F1ZXVlX3R5cGUJPSB0Y21fbG9vcF9jaGFuZ2VfcXVldWVfdHlwZSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlCT0gc2NzaV9jaGFuZ2VfcXVldWVfdHlwZSwKIAkuZWhfYWJvcnRfaGFuZGxlciA9IHRjbV9sb29wX2Fib3J0X3Rhc2ssCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gdGNtX2xvb3BfZGV2aWNlX3Jlc2V0LAogCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlciA9IHRjbV9sb29wX3RhcmdldF9yZXNldCwKQEAgLTQ2Miw4ICszOTYsOSBAQAogCS5tYXhfc2VjdG9ycwkJPSAweEZGRkYsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IERJU0FCTEVfQ0xVU1RFUklORywKIAkuc2xhdmVfYWxsb2MJCT0gdGNtX2xvb3Bfc2xhdmVfYWxsb2MsCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IHRjbV9sb29wX3NsYXZlX2NvbmZpZ3VyZSwKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKKwkudXNlX2Jsa190YWdzCQk9IDEsCisJLnRyYWNrX3F1ZXVlX2RlcHRoCT0gMSwKIH07CiAKIHN0YXRpYyBpbnQgdGNtX2xvb3BfZHJpdmVyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2FsdWEuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2FsdWEuYwppbmRleCBmYjg3NzgwLi43NWNiZGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9hbHVhLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfYWx1YS5jCkBAIC01NzYsNyArNTc2LDcgQEAKIAljYXNlIFNFTkRfRElBR05PU1RJQzoKIAljYXNlIFJFQURfQ0FQQUNJVFk6CiAJCXJldHVybiAwOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKIAkJc3dpdGNoIChjZGJbMV0gJiAweDFmKSB7CiAJCWNhc2UgU0FJX1JFQURfQ0FQQUNJVFlfMTY6CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jCmluZGV4IDlmOTNiODIuLjRjMjYxYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAJY2FzZSBBQ0NFU1NfQ09OVFJPTF9PVVQ6CiAJY2FzZSBJTlFVSVJZOgogCWNhc2UgTE9HX1NFTlNFOgotCWNhc2UgUkVBRF9NRURJQV9TRVJJQUxfTlVNQkVSOgorCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTI6CiAJY2FzZSBSRVBPUlRfTFVOUzoKIAljYXNlIFJFUVVFU1RfU0VOU0U6CiAJY2FzZSBQRVJTSVNURU5UX1JFU0VSVkVfSU46CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zYmMuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NiYy5jCmluZGV4IGViZTYyYWYuLjhkMTcxZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NiYy5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NiYy5jCkBAIC04NTIsNyArODUyLDcgQEAKIAkJc2l6ZSA9IFJFQURfQ0FQX0xFTjsKIAkJY21kLT5leGVjdXRlX2NtZCA9IHNiY19lbXVsYXRlX3JlYWRjYXBhY2l0eTsKIAkJYnJlYWs7Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCQlzd2l0Y2ggKGNtZC0+dF90YXNrX2NkYlsxXSAmIDB4MWYpIHsKIAkJY2FzZSBTQUlfUkVBRF9DQVBBQ0lUWV8xNjoKIAkJCWNtZC0+ZXhlY3V0ZV9jbWQgPSBzYmNfZW11bGF0ZV9yZWFkY2FwYWNpdHlfMTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX3R0eS5jIGIvZHJpdmVycy90dHkvbl90dHkuYwppbmRleCAyZTkwMGE5Li4yNmYwOTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9uX3R0eS5jCisrKyBiL2RyaXZlcnMvdHR5L25fdHR5LmMKQEAgLTIxMjMsNyArMjEyMyw3IEBACiB7CiAJc3RydWN0IG5fdHR5X2RhdGEgKmxkYXRhID0gdHR5LT5kaXNjX2RhdGE7CiAJdW5zaWduZWQgY2hhciBfX3VzZXIgKmIgPSBidWY7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJREVGSU5FX1dBSVRfRlVOQyh3YWl0LCB3b2tlbl93YWtlX2Z1bmN0aW9uKTsKIAlpbnQgYzsKIAlpbnQgbWluaW11bSwgdGltZTsKIAlzc2l6ZV90IHJldHZhbCA9IDA7CkBAIC0yMTg2LDEwICsyMTg2LDYgQEAKIAkJCW5yLS07CiAJCQlicmVhazsKIAkJfQotCQkvKiBUaGlzIHN0YXRlbWVudCBtdXN0IGJlIGZpcnN0IGJlZm9yZSBjaGVja2luZyBmb3IgaW5wdXQKLQkJICAgc28gdGhhdCBhbnkgaW50ZXJydXB0IHdpbGwgc2V0IHRoZSBzdGF0ZSBiYWNrIHRvCi0JCSAgIFRBU0tfUlVOTklORy4gKi8KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCQlpZiAoKChtaW5pbXVtIC0gKGIgLSBidWYpKSA8IGxkYXRhLT5taW5pbXVtX3RvX3dha2UpICYmCiAJCSAgICAoKG1pbmltdW0gLSAoYiAtIGJ1ZikpID49IDEpKQpAQCAtMjIyMCwxMyArMjIxNiwxMyBAQAogCQkJCW5fdHR5X3NldF9yb29tKHR0eSk7CiAJCQkJdXBfcmVhZCgmdHR5LT50ZXJtaW9zX3J3c2VtKTsKIAotCQkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCQkJCXRpbWVvdXQgPSB3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUsCisJCQkJCQkgICAgIHRpbWVvdXQpOwogCiAJCQkJZG93bl9yZWFkKCZ0dHktPnRlcm1pb3NfcndzZW0pOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9Ci0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAogCQkvKiBEZWFsIHdpdGggcGFja2V0IG1vZGUuICovCiAJCWlmIChwYWNrZXQgJiYgYiA9PSBidWYpIHsKQEAgLTIyNzMsNyArMjI2OSw2IEBACiAKIAltdXRleF91bmxvY2soJmxkYXRhLT5hdG9taWNfcmVhZF9sb2NrKTsKIAotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlpZiAoYiAtIGJ1ZikKIAkJcmV0dmFsID0gYiAtIGJ1ZjsKIApAQCAtMjMwNiw3ICsyMzAxLDcgQEAKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IG5yKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmIgPSBidWY7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJREVGSU5FX1dBSVRfRlVOQyh3YWl0LCB3b2tlbl93YWtlX2Z1bmN0aW9uKTsKIAlpbnQgYzsKIAlzc2l6ZV90IHJldHZhbCA9IDA7CiAKQEAgLTIzMjQsNyArMjMxOSw2IEBACiAKIAlhZGRfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CiAJd2hpbGUgKDEpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKQEAgLTIzNzgsMTIgKzIzNzIsMTEgQEAKIAkJfQogCQl1cF9yZWFkKCZ0dHktPnRlcm1pb3NfcndzZW0pOwogCi0JCXNjaGVkdWxlKCk7CisJCXdhaXRfd29rZW4oJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCiAJCWRvd25fcmVhZCgmdHR5LT50ZXJtaW9zX3J3c2VtKTsKIAl9CiBicmVha19vdXQ6Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKIAlpZiAoYiAtIGJ1ZiAhPSBuciAmJiB0dHktPmZhc3luYykKIAkJc2V0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmdHR5LT5mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX2R3LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX2R3LmMKaW5kZXggYmVlYTZjYS4uZWQ0NWExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9kdy5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfZHcuYwpAQCAtNDg5LDcgKzQ4OSw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBkdzgyNTBfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHc4MjUwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfbXRrLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX210ay5jCmluZGV4IGRlN2FhZTUuLmI3ZjFkYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfbXRrLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9tdGsuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBtdGs4MjUwX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG10azgyNTBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwppbmRleCA2NDliNzg0Li45OGY4YmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwpAQCAtMjQ5LDE0ICsyNDksMTQgQEAKIAogY29uZmlnIFNFUklBTF9TQU1TVU5HX1VBUlRTXzQKIAlib29sCi0JZGVwZW5kcyBvbiBQTEFUX1NBTVNVTkcKKwlkZXBlbmRzIG9uIFNFUklBTF9TQU1TVU5HCiAJZGVmYXVsdCB5IGlmICEoQ1BVX1MzQzI0MTAgfHwgQ1BVX1MzQzI0MTIgfHwgQ1BVX1MzQzI0NDAgfHwgQ1BVX1MzQzI0NDIpCiAJaGVscAogCSAgSW50ZXJuYWwgbm9kZSBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDQgU2Ftc3VuZyBjb21wYXRpYmxlIFVBUlRzCiAKIGNvbmZpZyBTRVJJQUxfU0FNU1VOR19VQVJUUwogCWludAotCWRlcGVuZHMgb24gUExBVF9TQU1TVU5HCisJZGVwZW5kcyBvbiBTRVJJQUxfU0FNU1VORwogCWRlZmF1bHQgNCBpZiBTRVJJQUxfU0FNU1VOR19VQVJUU180IHx8IENQVV9TM0MyNDE2CiAJZGVmYXVsdCAzCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21mZC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21mZC5jCmluZGV4IDQ0NTc5OWQuLjRhNWM5NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tZmQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWZkLmMKQEAgLTEyNTIsMTIgKzEyNTIsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHNlcmlhbF9oc3Vfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHNlcmlhbF9oc3VfcmVzdW1lCU5VTEwKLSNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIHN0YXRpYyBpbnQgc2VyaWFsX2hzdV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXBtX3NjaGVkdWxlX3N1c3BlbmQoZGV2LCA1MDApOwpAQCAtMTI3NCw2ICsxMjY5LDggQEAKIAlyZXR1cm4gMDsKIH0KICNlbHNlCisjZGVmaW5lIHNlcmlhbF9oc3Vfc3VzcGVuZAkJTlVMTAorI2RlZmluZSBzZXJpYWxfaHN1X3Jlc3VtZQkJTlVMTAogI2RlZmluZSBzZXJpYWxfaHN1X3J1bnRpbWVfaWRsZQkJTlVMTAogI2RlZmluZSBzZXJpYWxfaHN1X3J1bnRpbWVfc3VzcGVuZAlOVUxMCiAjZGVmaW5lIHNlcmlhbF9oc3VfcnVudGltZV9yZXN1bWUJTlVMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWxfaHMuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsX2hzLmMKaW5kZXggNDhlOTQ5Ni4uZGY2OGYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWxfaHMuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbF9ocy5jCkBAIC0xNzkyLDcgKzE3OTIsNyBAQAogfQogbW9kdWxlX2V4aXQobXNtX3NlcmlhbF9oc19leGl0KTsKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IG1zbV9oc19ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvb21hcC1zZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9vbWFwLXNlcmlhbC5jCmluZGV4IDE4YzMwY2EuLmM0NGVjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9vbWFwLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9vbWFwLXNlcmlhbC5jCkBAIC0xNzk5LDcgKzE3OTksNyBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCBzZXJpYWxfb21hcF9yZXN0b3JlX2NvbnRleHQoc3RydWN0IHVhcnRfb21hcF9wb3J0ICp1cCkKIHsKIAlpZiAodXAtPmVycmF0YSAmIFVBUlRfRVJSQVRBX2kyMDJfTURSMV9BQ0NFU1MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKaW5kZXggOWNmZGE2YS4uY2MwY2VkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwpAQCAtNDMsNyArNDMsNyBAQAogCiBjb25maWcgVVNCX09URwogCWJvb2wgIk9URyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUE1fUlVOVElNRQorCWRlcGVuZHMgb24gUE0KIAlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGUgbW9zdCBub3RhYmxlIGZlYXR1cmUgb2YgVVNCIE9URyBpcyBzdXBwb3J0IGZvciBhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwppbmRleCA5YmZmZDI2Li44NzRkZWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKQEAgLTE0OTMsMTAgKzE0OTMsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCi0KIC8qKgogICogdXNiX2VuYWJsZV9hdXRvc3VzcGVuZCAtIGFsbG93IGEgVVNCIGRldmljZSB0byBiZSBhdXRvc3VzcGVuZGVkCiAgKiBAdWRldjogdGhlIFVTQiBkZXZpY2Ugd2hpY2ggbWF5IGJlIGF1dG9zdXNwZW5kZWQKQEAgLTE4NzYsNyArMTg3Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIHN0cnVjdCBidXNfdHlwZSB1c2JfYnVzX3R5cGUgPSB7CiAJLm5hbWUgPQkJInVzYiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IGVmYzk1MzEuLjllYjFjZmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwpAQCAtNDI5LDcgKzQyOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgfHwgZGVmaW5lZChDT05GSUdfUE1fUlVOVElNRSkKIHN0YXRpYyBpbnQgc3VzcGVuZF9jb21tb24oc3RydWN0IGRldmljZSAqZGV2LCBib29sIGRvX3dha2V1cCkKIHsKIAlzdHJ1Y3QgcGNpX2RldgkJKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CkBAIC01MjgsNyArNTI3LDYgQEAKIAl9CiAJcmV0dXJuIHJldHZhbDsKIH0KLSNlbmRpZgkvKiBTTEVFUCB8fCBSVU5USU1FICovCiAKICNpZmRlZglDT05GSUdfUE1fU0xFRVAKIApAQCAtNjA3LDggKzYwNSw2IEBACiAKICNlbmRpZgkvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAotI2lmZGVmCUNPTkZJR19QTV9SVU5USU1FCi0KIHN0YXRpYyBpbnQgaGNkX3BjaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludAlyZXR2YWw7CkBAIC02MzAsMTMgKzYyNiw2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotI2Vsc2UKLQotI2RlZmluZSBoY2RfcGNpX3J1bnRpbWVfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIGhjZF9wY2lfcnVudGltZV9yZXN1bWUJTlVMTAotCi0jZW5kaWYJLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KLQogY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdXNiX2hjZF9wY2lfcG1fb3BzID0gewogCS5zdXNwZW5kCT0gaGNkX3BjaV9zdXNwZW5kLAogCS5zdXNwZW5kX25vaXJxCT0gaGNkX3BjaV9zdXNwZW5kX25vaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggYTZlZmI0MS4uMjc4YmUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0yMjU4LDEwICsyMjU4LDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0jZW5kaWYJLyogQ09ORklHX1BNICovCi0KLSNpZmRlZglDT05GSUdfUE1fUlVOVElNRQotCiAvKiBXb3JrcXVldWUgcm91dGluZSBmb3Igcm9vdC1odWIgcmVtb3RlIHdha2V1cCAqLwogc3RhdGljIHZvaWQgaGNkX3Jlc3VtZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTIyOTMsNyArMjI4OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkX3Jlc3VtZV9yb290X2h1Yik7CiAKLSNlbmRpZgkvKiBDT05GSUdfUE1fUlVOVElNRSAqLworI2VuZGlmCS8qIENPTkZJR19QTSAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0yNDc2LDcgKzI0NzIsNyBAQAogCWluaXRfdGltZXIoJmhjZC0+cmhfdGltZXIpOwogCWhjZC0+cmhfdGltZXIuZnVuY3Rpb24gPSByaF90aW1lcl9mdW5jOwogCWhjZC0+cmhfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBoY2Q7Ci0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAlJTklUX1dPUksoJmhjZC0+d2FrZXVwX3dvcmssIGhjZF9yZXN1bWVfd29yayk7CiAjZW5kaWYKIApAQCAtMjc5MCw3ICsyNzg2LDcgQEAKIAloY2QtPnJoX3JlZ2lzdGVyZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycSgmaGNkX3Jvb3RfaHViX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAljYW5jZWxfd29ya19zeW5jKCZoY2QtPndha2V1cF93b3JrKTsKICNlbmRpZgogCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKQEAgLTI4NTgsNyArMjg1NCw3IEBACiAJaGNkLT5yaF9yZWdpc3RlcmVkID0gMDsKIAlzcGluX3VubG9ja19pcnEgKCZoY2Rfcm9vdF9odWJfbG9jayk7CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogCWNhbmNlbF93b3JrX3N5bmMoJmhjZC0+d2FrZXVwX3dvcmspOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IGI2NDlmZWYuLmM5NTk2NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMTczNyw3ICsxNzM3LDcgQEAKIAkgKiAtIElmIHVzZXIgaGFzIGluZGljYXRlZCB0byBwcmV2ZW50IGF1dG9zdXNwZW5kIGJ5IHBhc3NpbmcKIAkgKiAgIHVzYmNvcmUuYXV0b3N1c3BlbmQgPSAtMSB0aGVuIGtlZXAgYXV0b3N1c3BlbmQgZGlzYWJsZWQuCiAJICovCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAlpZiAoaGRldi0+ZGV2LnBvd2VyLmF1dG9zdXNwZW5kX2RlbGF5ID49IDApCiAJCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KCZoZGV2LT5kZXYsIDApOwogI2VuZGlmCkBAIC0zNDQ5LDcgKzM0NDksNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLSNpZmRlZglDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmCUNPTkZJR19QTQogCiBpbnQgdXNiX3JlbW90ZV93YWtldXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CkBAIC00ODU2LDcgKzQ4NTYsNyBAQAogCQkJdWRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7CiAJCWlmIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpIHsKIAkJCXN0YXR1cyA9IDA7CQkvKiBOb3RoaW5nIHRvIGRvICovCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAkJfSBlbHNlIGlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEICYmCiAJCQkJdWRldi0+cGVyc2lzdF9lbmFibGVkKSB7CiAJCQkvKiBGb3IgYSBzdXNwZW5kZWQgZGV2aWNlLCB0cmVhdCB0aGlzIGFzIGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcG9ydC5jIGIvZHJpdmVycy91c2IvY29yZS9wb3J0LmMKaW5kZXggY2QzZjlkYy4uMjEwNjE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9wb3J0LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9wb3J0LmMKQEAgLTcyLDcgKzcyLDcgQEAKIAlrZnJlZShwb3J0X2Rldik7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCB1c2JfcG9ydF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldiA9IHRvX3VzYl9wb3J0KGRldik7CkBAIC0xNzEsNyArMTcxLDcgQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdXNiX3BvcnRfcG1fb3BzID0gewotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAJLnJ1bnRpbWVfc3VzcGVuZCA9CXVzYl9wb3J0X3J1bnRpbWVfc3VzcGVuZCwKIAkucnVudGltZV9yZXN1bWUgPQl1c2JfcG9ydF9ydW50aW1lX3Jlc3VtZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IDEyMzZjNjAuLmQyNjk3MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTMzNCwxNCArMzM0LDYgQEAKIAkJCSZkZXZfYXR0cl9wZXJzaXN0LmF0dHIsCiAJCQlwb3dlcl9ncm91cF9uYW1lKTsKIH0KLSNlbHNlCi0KLSNkZWZpbmUgYWRkX3BlcnNpc3RfYXR0cmlidXRlcyhkZXYpCTAKLSNkZWZpbmUgcmVtb3ZlX3BlcnNpc3RfYXR0cmlidXRlcyhkZXYpCWRvIHt9IHdoaWxlICgwKQotCi0jZW5kaWYJLyogQ09ORklHX1BNICovCi0KLSNpZmRlZglDT05GSUdfUE1fUlVOVElNRQogCiBzdGF0aWMgc3NpemVfdCBjb25uZWN0ZWRfZHVyYXRpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC01ODUsMTAgKzU3NywxMyBAQAogCiAjZWxzZQogCisjZGVmaW5lIGFkZF9wZXJzaXN0X2F0dHJpYnV0ZXMoZGV2KQkwCisjZGVmaW5lIHJlbW92ZV9wZXJzaXN0X2F0dHJpYnV0ZXMoZGV2KQlkbyB7fSB3aGlsZSAoMCkKKwogI2RlZmluZSBhZGRfcG93ZXJfYXR0cmlidXRlcyhkZXYpCTAKICNkZWZpbmUgcmVtb3ZlX3Bvd2VyX2F0dHJpYnV0ZXMoZGV2KQlkbyB7fSB3aGlsZSAoMCkKIAotI2VuZGlmCS8qIENPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYJLyogQ09ORklHX1BNICovCiAKIAogLyogRGVzY3JpcHRvciBmaWVsZHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IDJkZDIzNjIuLjJhOTJiOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtNDksNyArNDksNyBAQAogCiBzdGF0aWMgYm9vbCBub3VzYjsJLyogRGlzYWJsZSBVU0Igd2hlbiBidWlsdCBpbnRvIGtlcm5lbCBpbWFnZSAqLwogCi0jaWZkZWYJQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZglDT05GSUdfUE0KIHN0YXRpYyBpbnQgdXNiX2F1dG9zdXNwZW5kX2RlbGF5ID0gMjsJCS8qIERlZmF1bHQgZGVsYXkgdmFsdWUsCiAJCQkJCQkgKiBpbiBzZWNvbmRzICovCiBtb2R1bGVfcGFyYW1fbmFtZWQoYXV0b3N1c3BlbmQsIHVzYl9hdXRvc3VzcGVuZF9kZWxheSwgaW50LCAwNjQ0KTsKQEAgLTM0OCwxMSArMzQ4LDkgQEAKIAkudGhhdyA9CQl1c2JfZGV2X3RoYXcsCiAJLnBvd2Vyb2ZmID0JdXNiX2Rldl9wb3dlcm9mZiwKIAkucmVzdG9yZSA9CXVzYl9kZXZfcmVzdG9yZSwKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogCS5ydW50aW1lX3N1c3BlbmQgPQl1c2JfcnVudGltZV9zdXNwZW5kLAogCS5ydW50aW1lX3Jlc3VtZSA9CXVzYl9ydW50aW1lX3Jlc3VtZSwKIAkucnVudGltZV9pZGxlID0JCXVzYl9ydW50aW1lX2lkbGUsCi0jZW5kaWYKIH07CiAKICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmggYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCmluZGV4IGIxYjM0ZDAuLjdlYjFlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuaApAQCAtNzUsNiArNzUsMTQgQEAKIGV4dGVybiBpbnQgdXNiX3BvcnRfc3VzcGVuZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKTsKIGV4dGVybiBpbnQgdXNiX3BvcnRfcmVzdW1lKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpOwogCitleHRlcm4gdm9pZCB1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKK2V4dGVybiBpbnQgdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKK2V4dGVybiBpbnQgdXNiX3JlbW90ZV93YWtldXAoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IHVzYl9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgdXNiX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHVzYl9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgdXNiX3NldF91c2IyX2hhcmR3YXJlX2xwbShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGVuYWJsZSk7CisKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgaW50IHVzYl9wb3J0X3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCkBAIC04NywyMCArOTUsNiBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCi0KLWV4dGVybiB2b2lkIHVzYl9hdXRvc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwotZXh0ZXJuIGludCB1c2JfYXV0b3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwotZXh0ZXJuIGludCB1c2JfcmVtb3RlX3dha2V1cChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgdXNiX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCB1c2JfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgdXNiX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCB1c2Jfc2V0X3VzYjJfaGFyZHdhcmVfbHBtKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgZW5hYmxlKTsKLQotI2Vsc2UKLQogI2RlZmluZSB1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpCQlkbyB7fSB3aGlsZSAoMCkKIHN0YXRpYyBpbmxpbmUgaW50IHVzYl9hdXRvcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKQEAgLTExMSw2ICsxMDUsNyBAQAogewogCXJldHVybiAwOwogfQorCiAjZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSB1c2JfYnVzX3R5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3RjbV91c2JfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3RjbV91c2JfZ2FkZ2V0LmMKaW5kZXggNmNkYjdhNS4uMDI0ZjU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS90Y21fdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvdGNtX3VzYl9nYWRnZXQuYwpAQCAtOTEyLDcgKzkxMiw3IEBACiAJY2FzZSBJTlFVSVJZOgogCWNhc2UgTU9ERV9TRU5TRToKIAljYXNlIE1PREVfU0VOU0VfMTA6Ci0JY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOXzE2OgogCWNhc2UgTUFJTlRFTkFOQ0VfSU46CiAJY2FzZSBQRVJTSVNURU5UX1JFU0VSVkVfSU46CiAJY2FzZSBTRUNVUklUWV9QUk9UT0NPTF9JTjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCBjYTdiOTY0Li44NTEwMDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAkJfQogCX0KIAotI2lmZGVmCUNPTkZJR19QTV9SVU5USU1FCisjaWZkZWYJQ09ORklHX1BNCiAJaWYgKGVoY2ktPm5vX3NlbGVjdGl2ZV9zdXNwZW5kICYmIGRldmljZV9jYW5fd2FrZXVwKCZwZGV2LT5kZXYpKQogCQllaGNpX3dhcm4oZWhjaSwgInNlbGVjdGl2ZSBzdXNwZW5kL3dha2V1cCB1bmF2YWlsYWJsZVxuIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IGFkMGMzNDguLjI1ZmIxZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtMjIsNyArMjIsNyBAQAogICogYW5kIHVzYi1zdG9yYWdlLgogICoKICAqIFRPRE86Ci0gKiAtIHVzYiBzdXNwZW5kL3Jlc3VtZSB0cmlnZ2VyZWQgYnkgc2w4MTEgKHdpdGggUE1fUlVOVElNRSkKKyAqIC0gdXNiIHN1c3BlbmQvcmVzdW1lIHRyaWdnZXJlZCBieSBzbDgxMQogICogLSB2YXJpb3VzIGlzc3VlcyBub3RlZCBpbiB0aGUgY29kZQogICogLSBwZXJmb3JtYW5jZSB3b3JrOyB1c2UgYm90aCByZWdpc3RlciBiYW5rczsgLi4uCiAgKiAtIHVzZSB1cmItPmlzb19mcmFtZV9kZXNjW10gd2l0aCBJU08gdHJhbnNmZXJzCkBAIC0xNzUyLDggKzE3NTIsNyBAQAogI2lmZGVmCUNPTkZJR19QTQogCiAvKiBmb3IgdGhpcyBkZXZpY2UgdGhlcmUncyBubyB1c2VmdWwgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgY29udHJvbGxlcgotICogYW5kIGl0cyByb290IGh1YiwgZXhjZXB0IHRoYXQgdGhlIHJvb3QgaHViIG9ubHkgZ2V0cyBkaXJlY3QgUE0gY2FsbHMKLSAqIHdoZW4gQ09ORklHX1BNX1JVTlRJTUUgaXMgZW5hYmxlZC4KKyAqIGFuZCBpdHMgcm9vdCBodWIuCiAgKi8KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jCmluZGV4IGMwNjcxNzUuLmJmODY2MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdTEzMi1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3UxMzItaGNkLmMKQEAgLTMxNDQsOCArMzE0NCw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiAvKgogICogZm9yIHRoaXMgZGV2aWNlIHRoZXJlJ3Mgbm8gdXNlZnVsIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGNvbnRyb2xsZXIKLSAqIGFuZCBpdHMgcm9vdCBodWIsIGV4Y2VwdCB0aGF0IHRoZSByb290IGh1YiBvbmx5IGdldHMgZGlyZWN0IFBNIGNhbGxzCi0gKiB3aGVuIENPTkZJR19QTV9SVU5USU1FIGlzIGVuYWJsZWQuCisgKiBhbmQgaXRzIHJvb3QgaHViLgogICovCiBzdGF0aWMgaW50IHUxMzJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKaW5kZXggMzg4Y2ZkOC4uYTc4NjVjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwpAQCAtMTE0NSw3ICsxMTQ1LDcgQEAKIAkJCXNldF9iaXQocG9ydF9pbmRleCwgJmJ1c19zdGF0ZS0+YnVzX3N1c3BlbmRlZCk7CiAJCX0KIAkJLyogVVNCIGNvcmUgc2V0cyByZW1vdGUgd2FrZSBtYXNrIGZvciBVU0IgMy4wIGh1YnMsCi0JCSAqIGluY2x1ZGluZyB0aGUgVVNCIDMuMCByb290aHViLCBidXQgb25seSBpZiBDT05GSUdfUE1fUlVOVElNRQorCQkgKiBpbmNsdWRpbmcgdGhlIFVTQiAzLjAgcm9vdGh1YiwgYnV0IG9ubHkgaWYgQ09ORklHX1BNCiAJCSAqIGlzIGVuYWJsZWQsIHNvIGFsc28gZW5hYmxlIHJlbW90ZSB3YWtlIGhlcmUuCiAJCSAqLwogCQlpZiAoaGNkLT5zZWxmLnJvb3RfaHViLT5kb19yZW1vdGVfd2FrZXVwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCmluZGV4IDAzM2I0NmMuLmNmMzQxMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCkBAIC00MDI5LDcgKzQwMjksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogCiAvKiBCRVNMIHRvIEhJUkQgRW5jb2RpbmcgYXJyYXkgZm9yIFVTQjIgTFBNICovCiBzdGF0aWMgaW50IHhoY2lfYmVzbF9lbmNvZGluZ1sxNl0gPSB7MTI1LCAxNTAsIDIwMCwgMzAwLCA0MDAsIDUwMCwgMTAwMCwgMjAwMCwKQEAgLTQyNDQsMjQgKzQyNDQsOCBAQAogCXJldHVybiAwOwogfQogCi0jZWxzZQotCi1pbnQgeGhjaV9zZXRfdXNiMl9oYXJkd2FyZV9scG0oc3RydWN0IHVzYl9oY2QgKmhjZCwKLQkJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGVuYWJsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHhoY2lfdXBkYXRlX2RldmljZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVU0IgMy4wIExpbmsgUE0gZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZmRlZiBDT05GSUdfUE0KIC8qIFNlcnZpY2UgaW50ZXJ2YWwgaW4gbmFub3NlY29uZHMgPSAyXihiSW50ZXJ2YWwgLSAxKSAqIDEyNXVzICogMTAwMG5zIC8gMXVzICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHhoY2lfc2VydmljZV9pbnRlcnZhbF90b19ucygKIAkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQpAQCAtNDY5Miw2ICs0Njc2LDE3IEBACiB9CiAjZWxzZSAvKiBDT05GSUdfUE0gKi8KIAoraW50IHhoY2lfc2V0X3VzYjJfaGFyZHdhcmVfbHBtKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBlbmFibGUpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCB4aGNpX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKIGludCB4aGNpX2VuYWJsZV91c2IzX2xwbV90aW1lb3V0KHN0cnVjdCB1c2JfaGNkICpoY2QsCiAJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgZW51bSB1c2IzX2xpbmtfc3RhdGUgc3RhdGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3BoeS9LY29uZmlnCmluZGV4IDBjZDFmNDQuLmM2ZDBjOGU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvcGh5L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvcGh5L0tjb25maWcKQEAgLTIwLDcgKzIwLDcgQEAKIAogY29uZmlnIEZTTF9VU0IyX09URwogCWJvb2wgIkZyZWVzY2FsZSBVU0IgT1RHIFRyYW5zY2VpdmVyIERyaXZlciIKLQlkZXBlbmRzIG9uIFVTQl9FSENJX0ZTTCAmJiBVU0JfRlNMX1VTQjIgJiYgVVNCX09UR19GU00gJiYgUE1fUlVOVElNRQorCWRlcGVuZHMgb24gVVNCX0VIQ0lfRlNMICYmIFVTQl9GU0xfVVNCMiAmJiBVU0JfT1RHX0ZTTSAmJiBQTQogCXNlbGVjdCBVU0JfT1RHCiAJc2VsZWN0IFVTQl9QSFkKIAloZWxwCkBAIC0xNTMsNyArMTUzLDcgQEAKIAogY29uZmlnIFVTQl9NVl9PVEcKIAl0cmlzdGF0ZSAiTWFydmVsbCBVU0IgT1RHIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfRUhDSV9NViAmJiBVU0JfTVZfVURDICYmIFBNX1JVTlRJTUUKKwlkZXBlbmRzIG9uIFVTQl9FSENJX01WICYmIFVTQl9NVl9VREMgJiYgUE0KIAlzZWxlY3QgVVNCX09URwogCXNlbGVjdCBVU0JfUEhZCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS1tc20tdXNiLmMgYi9kcml2ZXJzL3VzYi9waHkvcGh5LW1zbS11c2IuYwppbmRleCA3ODQzZWY3Li4yOWJlMGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9waHkvcGh5LW1zbS11c2IuYworKysgYi9kcml2ZXJzL3VzYi9waHkvcGh5LW1zbS11c2IuYwpAQCAtMTc2MSw3ICsxNzYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IG1zbV9vdGdfcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbXNtX290ZyAqbW90ZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCmluZGV4IDcxNWYyOTkuLmVjODQ3NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKQEAgLTQxLDcgKzQxLDcgQEAKIAogY29uZmlnIFJFQUxURUtfQVVUT1BNCiAJYm9vbCAiUmVhbHRlayBDYXJkIFJlYWRlciBhdXRvc3VzcGVuZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX1NUT1JBR0VfUkVBTFRFSyAmJiBQTV9SVU5USU1FCisJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRV9SRUFMVEVLICYmIFBNCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBVU0JfU1RPUkFHRV9EQVRBRkFCCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMKaW5kZXggZTA4ZjY0Ny4uMmQ4MWUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYwpAQCAtMTY0LDEwICsxNjQsMTAgQEAKIAkJCSB1bnNpZ25lZCBjaGFyIGFzYywKIAkJCSB1bnNpZ25lZCBjaGFyIGFzY3EpCiB7Ci0JY29uc3QgY2hhciAqd2hhdCwgKmtleXN0cjsKKwljb25zdCBjaGFyICp3aGF0LCAqa2V5c3RyLCAqZm10OwogCiAJa2V5c3RyID0gc2NzaV9zZW5zZV9rZXlfc3RyaW5nKGtleSk7Ci0Jd2hhdCA9IHNjc2lfZXh0ZF9zZW5zZV9mb3JtYXQoYXNjLCBhc2NxKTsKKwl3aGF0ID0gc2NzaV9leHRkX3NlbnNlX2Zvcm1hdChhc2MsIGFzY3EsICZmbXQpOwogCiAJaWYgKGtleXN0ciA9PSBOVUxMKQogCQlrZXlzdHIgPSAiKFVua25vd24gS2V5KSI7CkBAIC0xNzUsOCArMTc1LDEwIEBACiAJCXdoYXQgPSAiKHVua25vd24gQVNDL0FTQ1EpIjsKIAogCXVzYl9zdG9yX2RiZyh1cywgIiVzOiAiLCBrZXlzdHIpOwotCVVTX0RFQlVHUFgod2hhdCwgYXNjcSk7Ci0JVVNfREVCVUdQWCgiXG4iKTsKKwlpZiAoZm10KQorCQlVU19ERUJVR1BYKCIlcyAoJXMleClcbiIsIHdoYXQsIGZtdCwgYXNjcSk7CisJZWxzZQorCQlVU19ERUJVR1BYKCIlc1xuIiwgd2hhdCk7CiB9CiAKIGludCB1c2Jfc3Rvcl9kYmcoY29uc3Qgc3RydWN0IHVzX2RhdGEgKnVzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKQEAgLTE4Niw3ICsxODgsNyBAQAogCiAJdmFfc3RhcnQoYXJncywgZm10KTsKIAotCXIgPSBkZXZfdnByaW50a19lbWl0KDcsICZ1cy0+cHVzYl9kZXYtPmRldiwgZm10LCBhcmdzKTsKKwlyID0gZGV2X3ZwcmludGtfZW1pdChMT0dMRVZFTF9ERUJVRywgJnVzLT5wdXNiX2Rldi0+ZGV2LCBmbXQsIGFyZ3MpOwogCiAJdmFfZW5kKGFyZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYwppbmRleCA4OWIyNDM0Li40MDQ3ZWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogewogCWludCB0YWc7CiAKLQlpZiAoYmxrX3JxX3RhZ2dlZChjbW5kLT5yZXF1ZXN0KSkKKwlpZiAoY21uZC0+ZmxhZ3MgJiBTQ01EX1RBR0dFRCkKIAkJdGFnID0gY21uZC0+cmVxdWVzdC0+dGFnICsgMjsKIAllbHNlCiAJCXRhZyA9IDE7CkBAIC03OTksOCArNzk5LDcgQEAKIAlpZiAoZGV2aW5mby0+ZmxhZ3MgJiBVU19GTF9OT19SRVBPUlRfT1BDT0RFUykKIAkJc2Rldi0+bm9fcmVwb3J0X29wY29kZXMgPSAxOwogCi0Jc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgTVNHX09SREVSRURfVEFHKTsKLQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBkZXZpbmZvLT5xZGVwdGggLSAyKTsKKwlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBkZXZpbmZvLT5xZGVwdGggLSAyKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODE3LDcgKzgxNiw2IEBACiAJLnNnX3RhYmxlc2l6ZSA9IFNHX05PTkUsCiAJLmNtZF9wZXJfbHVuID0gMSwJLyogdW50aWwgd2Ugb3ZlcnJpZGUgaXQgKi8KIAkuc2tpcF9zZXR0bGVfZGVsYXkgPSAxLAotCS5vcmRlcmVkX3RhZyA9IDEsCiAKIAkvKgogCSAqIFRoZSB1YXMgZHJpdmVycyBleHBlY3RzIHRhZ3Mgbm90IHRvIGJlIGJpZ2dlciB0aGFuIHRoZSBtYXhpbXVtCkBAIC04MjUsNiArODIzLDcgQEAKIAkgKiBhbGxvY2F0b3IuCiAJICovCiAJLmRpc2FibGVfYmxrX21xID0gdHJ1ZSwKKwkudXNlX2Jsa190YWdzID0gMSwKIH07CiAKICNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9pbnRycy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9pbnRycy5jCmluZGV4IDU1MzIxMmYuLmU4ZDY5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfaW50cnMuYworKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2ludHJzLmMKQEAgLTU2MCw3ICs1NjAsNyBAQAogCQlzdHJ1Y3QgbXNpX21zZyBtc2c7CiAKIAkJZ2V0X2NhY2hlZF9tc2lfbXNnKGlycSwgJm1zZyk7Ci0JCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwkJcGNpX3dyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHZmaW9fbXNpaGFuZGxlciwgMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCmluZGV4IDhkMDM5MjQuLmVmYjA5MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZwpAQCAtMTY4LDcgKzE2OCw2IEBACiBjb25maWcgQkFDS0xJR0hUX0FUTUVMX0xDREMKIAlib29sICJBdG1lbCBMQ0RDIENvbnRyYXN0LWFzLUJhY2tsaWdodCBjb250cm9sIgogCWRlcGVuZHMgb24gRkJfQVRNRUwKLQlkZWZhdWx0IHkgaWYgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTlHMTBFSyB8fCBNQUNIX0FUOTFTQU05MjYzRUsKIAloZWxwCiAJICBUaGlzIHByb3ZpZGVzIGEgYmFja2xpZ2h0IGNvbnRyb2wgaW50ZXJuYWwgdG8gdGhlIEF0bWVsIExDREMKIAkgIGRyaXZlci4gIElmIHRoZSBMQ0QgImNvbnRyYXN0IGNvbnRyb2wiIG9uIHlvdXIgYm9hcmQgaXMgd2lyZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZwppbmRleCBjN2JmNjA2Li5jNzhiZmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnCkBAIC05OTksMjMgKzk5OSw2IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBVDkxL0FUMzIgTENEIENvbnRyb2xsZXIuCiAKLWNvbmZpZyBGQl9JTlRTUkFNCi0JYm9vbCAiRnJhbWUgQnVmZmVyIGluIGludGVybmFsIFNSQU0iCi0JZGVwZW5kcyBvbiBGQl9BVE1FTCAmJiBBUkNIX0FUOTFTQU05MjYxCi0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gbWFwIEZyYW1lIEJ1ZmZlciBpbiBpbnRlcm5hbCBTUkFNLiBTYXkgTiBpZiB5b3Ugd2FudAotCSAgdG8gbGV0IGZyYW1lIGJ1ZmZlciBpbiBleHRlcm5hbCBTRFJBTS4KLQotY29uZmlnIEZCX0FUTUVMX1NUTgotCWJvb2wgIlVzZSBhIFNUTiBkaXNwbGF5IHdpdGggQVQ5MS9BVDMyIExDRCBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gRkJfQVRNRUwgJiYgKE1BQ0hfQVQ5MVNBTTkyNjFFSyB8fCBNQUNIX0FUOTFTQU05RzEwRUspCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFNUTiBMQ0QgZGlzcGxheSB0byB0aGUgQVQ5MS9BVDMyIExDRAotCSAgQ29udHJvbGxlci4gU2F5IE4gaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFRGVC4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIEZCX05WSURJQQogCXRyaXN0YXRlICJuVmlkaWEgRnJhbWVidWZmZXIgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9nYmVmYi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9nYmVmYi5jCmluZGV4IDRhYTU2YmE3Li42ZDllZjM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9nYmVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvZ2JlZmIuYwpAQCAtNTQsNyArNTQsOCBAQAogI2VuZGlmCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2Ci0jZGVmaW5lIHBncHJvdF9mYihfcHJvdCkgKChfcHJvdCkgfCBfUEFHRV9QQ0QpCisjZGVmaW5lIHBncHJvdF9mYihfcHJvdCkgKCgoX3Byb3QpICYgfl9QQUdFX0NBQ0hFX01BU0spIHwJXAorCQkJICBjYWNoZW1vZGUycHJvdHZhbChfUEFHRV9DQUNIRV9NT0RFX1VDX01JTlVTKSkKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9zM2MtZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvczNjLWZiLmMKaW5kZXggYjMzYWJiMC4uNTdmODhmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9zM2MtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3MzYy1mYi5jCkBAIC0xNjMwLDcgKzE2MzAsNyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzM2NfZmJfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgczNjX2ZiICpzZmIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvc2hfbW9iaWxlX21lcmFtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3NoX21vYmlsZV9tZXJhbS5jCmluZGV4IGEyOTdkZTUuLjIzOTQ1MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvc2hfbW9iaWxlX21lcmFtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9zaF9tb2JpbGVfbWVyYW0uYwpAQCAtNTY5LDcgKzU2OSw3IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50CiAgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSB8fCBkZWZpbmVkKENPTkZJR19QTV9SVU5USU1FKQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzaF9tb2JpbGVfbWVyYW1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwpAQCAtNjEyLDcgKzYxMiw3IEBACiAJCW1lcmFtX3dyaXRlX3JlZyhwcml2LT5iYXNlLCBjb21tb25fcmVnc1tpXSwgcHJpdi0+cmVnc1tpXSk7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQIHx8IENPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIHN0YXRpYyBVTklWRVJTQUxfREVWX1BNX09QUyhzaF9tb2JpbGVfbWVyYW1fZGV2X3BtX29wcywKIAkJCSAgICBzaF9tb2JpbGVfbWVyYW1fc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvdmVybWlsaW9uL3Zlcm1pbGlvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi92ZXJtaWxpb24vdmVybWlsaW9uLmMKaW5kZXggNWY5MzBhZS4uNmI3MGQ3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi92ZXJtaWxpb24vdmVybWlsaW9uLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi92ZXJtaWxpb24vdmVybWlsaW9uLmMKQEAgLTEwMDMsMTMgKzEwMDMsMTUgQEAKIAlzdHJ1Y3Qgdm1sX2luZm8gKnZpbmZvID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB2bWxfaW5mbywgaW5mbyk7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHByb3Q7CiAKIAlyZXQgPSB2bWxmYl92cmFtX29mZnNldCh2aW5mbywgb2Zmc2V0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX1BDRDsKLQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmPSB+X1BBR0VfUFdUOworCXByb3QgPSBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmIH5fUEFHRV9DQUNIRV9NQVNLOworCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpID0KKwkJcHJvdCB8IGNhY2hlbW9kZTJwcm90dmFsKF9QQUdFX0NBQ0hFX01PREVfVUNfTUlOVVMpOwogCiAJcmV0dXJuIHZtX2lvbWFwX21lbW9yeSh2bWEsIHZpbmZvLT52cmFtX3N0YXJ0LAogCQkJdmluZm8tPnZyYW1fY29udGlnX3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwppbmRleCA5OTAwZThlLi4wMzMyMWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwpAQCAtNzIsMTEgKzcyLDE4IEBACiBzdGF0aWMgaW50IG9tYXBfaGRxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogc3RhdGljIGludCBvbWFwX2hkcV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9tYXBfaGRxX2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAidGksb21hcDMtMXciIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvbWFwX2hkcV9kdF9pZHMpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2hkcV9kcml2ZXIgPSB7CiAJLnByb2JlID0Jb21hcF9oZHFfcHJvYmUsCiAJLnJlbW92ZSA9CW9tYXBfaGRxX3JlbW92ZSwKIAkuZHJpdmVyID0JewogCQkubmFtZSA9CSJvbWFwX2hkcSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9tYXBfaGRxX2R0X2lkcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IGQwMTA3ZDQuLjA4ZjQxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTE1NCwxNCArMTU0LDE0IEBACiAKIGNvbmZpZyBBVDkxUk05MjAwX1dBVENIRE9HCiAJdHJpc3RhdGUgIkFUOTFSTTkyMDAgd2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKKwlkZXBlbmRzIG9uIFNPQ19BVDkxUk05MjAwCiAJaGVscAogCSAgV2F0Y2hkb2cgdGltZXIgZW1iZWRkZWQgaW50byBBVDkxUk05MjAwIGNoaXBzLiBUaGlzIHdpbGwgcmVib290IHlvdXIKIAkgIHN5c3RlbSB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuCiAKIGNvbmZpZyBBVDkxU0FNOVhfV0FUQ0hET0cKIAl0cmlzdGF0ZSAiQVQ5MVNBTTlYIC8gQVQ5MUNBUDkgd2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVJNOTIwMAorCWRlcGVuZHMgb24gQVJDSF9BVDkxCiAJc2VsZWN0IFdBVENIRE9HX0NPUkUKIAloZWxwCiAJICBXYXRjaGRvZyB0aW1lciBlbWJlZGRlZCBpbnRvIEFUOTFTQU05WCBhbmQgQVQ5MUNBUDkgY2hpcHMuIFRoaXMgd2lsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbl93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb25fd2R0LmMKaW5kZXggMDBkMDc0MS4uOGNiMWZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29yaW9uX3dkdC5jCkBAIC0xMTQsNiArMTE0LDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXJtYWRhMzc1X3dkdF9jbG9ja19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJICAgIHN0cnVjdCBvcmlvbl93YXRjaGRvZyAqZGV2KQoreworCWludCByZXQ7CisKKwlkZXYtPmNsayA9IG9mX2Nsa19nZXRfYnlfbmFtZShwZGV2LT5kZXYub2Zfbm9kZSwgImZpeGVkIik7CisJaWYgKCFJU19FUlIoZGV2LT5jbGspKSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCWNsa19wdXQoZGV2LT5jbGspOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWF0b21pY19pb19tb2RpZnkoZGV2LT5yZWcgKyBUSU1FUl9DVFJMLAorCQkJCVdEVF9BWFBfRklYRURfRU5BQkxFX0JJVCwKKwkJCQlXRFRfQVhQX0ZJWEVEX0VOQUJMRV9CSVQpOworCQlkZXYtPmNsa19yYXRlID0gY2xrX2dldF9yYXRlKGRldi0+Y2xrKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBNYW5kYXRvcnkgZmFsbGJhY2sgZm9yIHByb3BlciBkZXZpY2V0cmVlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwlkZXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihkZXYtPmNsaykpCisJCXJldHVybiBQVFJfRVJSKGRldi0+Y2xrKTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPmNsayk7CisJaWYgKHJldCkgeworCQljbGtfcHV0KGRldi0+Y2xrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhdG9taWNfaW9fbW9kaWZ5KGRldi0+cmVnICsgVElNRVJfQ1RSTCwKKwkJCVdEVF9BMzcwX1JBVElPX01BU0soV0RUX0EzNzBfUkFUSU9fU0hJRlQpLAorCQkJV0RUX0EzNzBfUkFUSU9fTUFTSyhXRFRfQTM3MF9SQVRJT19TSElGVCkpOworCWRldi0+Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZGV2LT5jbGspIC8gV0RUX0EzNzBfUkFUSU87CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhcm1hZGF4cF93ZHRfY2xvY2tfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCSAgIHN0cnVjdCBvcmlvbl93YXRjaGRvZyAqZGV2KQogewpAQCAtMzk0LDcgKzQzNCw3IEBACiAJLnJzdG91dF9tYXNrX2JpdCA9IEJJVCgxMCksCiAJLndkdF9lbmFibGVfYml0ID0gQklUKDgpLAogCS53ZHRfY291bnRlcl9vZmZzZXQgPSAweDM0LAotCS5jbG9ja19pbml0ID0gYXJtYWRhMzcwX3dkdF9jbG9ja19pbml0LAorCS5jbG9ja19pbml0ID0gYXJtYWRhMzc1X3dkdF9jbG9ja19pbml0LAogCS5lbmFibGVkID0gYXJtYWRhMzc1X2VuYWJsZWQsCiAJLnN0YXJ0ID0gYXJtYWRhMzc1X3N0YXJ0LAogCS5zdG9wID0gYXJtYWRhMzc1X3N0b3AsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKaW5kZXggODUzMmMzZS4uMTYyNmRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHMzYzI0MTBfd2R0X3ZhcmlhbnQgZHJ2X2RhdGFfZXh5bm9zNyA9IHsKIAkuZGlzYWJsZV9yZWcgPSBFWFlOT1M1X1dEVF9ESVNBQkxFX1JFR19PRkZTRVQsCiAJLm1hc2tfcmVzZXRfcmVnID0gRVhZTk9TNV9XRFRfTUFTS19SRVNFVF9SRUdfT0ZGU0VULAotCS5tYXNrX2JpdCA9IDAsCisJLm1hc2tfYml0ID0gMjMsCiAJLnJzdF9zdGF0X3JlZyA9IEVYWU5PUzVfUlNUX1NUQVRfUkVHX09GRlNFVCwKIAkucnN0X3N0YXRfYml0ID0gMjMsCS8qIEE1NyBXRFRSRVNFVCAqLwogCS5xdWlya3MgPSBRVUlSS19IQVNfUE1VX0NPTkZJRyB8IFFVSVJLX0hBU19SU1RfU1RBVCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2VmaS5jIGIvZHJpdmVycy94ZW4vZWZpLmMKaW5kZXggMWY4NTBjOS4uZjc0NWRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZWZpLmMKKysrIGIvZHJpdmVycy94ZW4vZWZpLmMKQEAgLTI5NCw2ICsyOTQsNyBAQAogCS5hY3BpICAgICAgICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5hY3BpMjAgICAgICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5zbWJpb3MgICAgICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAorCS5zbWJpb3MzICAgICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5zYWxfc3lzdGFiICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5ib290X2luZm8gICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogCS5oY2RwICAgICAgICAgICAgICAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuLXNjc2liYWNrLmMgYi9kcml2ZXJzL3hlbi94ZW4tc2NzaWJhY2suYwppbmRleCAzZTMyMTQ2Li41MDYxMGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW4tc2NzaWJhY2suYworKysgYi9kcml2ZXJzL3hlbi94ZW4tc2NzaWJhY2suYwpAQCAtMjc0LDEwICsyNzQsNiBAQAogCSAgICAgICB0cGctPnRwb3J0LT50cG9ydF9uYW1lLCBwZW5kaW5nX3JlcS0+djJwLT5sdW4sCiAJICAgICAgIHBlbmRpbmdfcmVxLT5jbW5kWzBdLCBzdGF0dXNfYnl0ZShlcnJvcnMpLCBtc2dfYnl0ZShlcnJvcnMpLAogCSAgICAgICBob3N0X2J5dGUoZXJyb3JzKSwgZHJpdmVyX2J5dGUoZXJyb3JzKSk7Ci0KLQlpZiAoQ0hFQ0tfQ09ORElUSU9OICYgc3RhdHVzX2J5dGUoZXJyb3JzKSkKLQkJX19zY3NpX3ByaW50X3NlbnNlKCJ4ZW4tcHZzY3NpIiwgc2Vuc2VfYnVmZmVyLAotCQkJCSAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNjc2liYWNrX2Zhc3RfZmx1c2hfYXJlYShzdHJ1Y3QgdnNjc2lia19wZW5kICpyZXEpCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IDI5NjQ4MmYuLjllZTUzNDMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC04MzIsNyArODMyLDcgQEAKIAkgKiBtb3ZlZCBiIHVuZGVyIGsgYW5kIGNsaWVudCBwYXJhbGxlbHkgZGlkIGEgbG9va3VwIGZvcgogCSAqIGsvYi4KIAkgKi8KLQlyZXMgPSBkX21hdGVyaWFsaXNlX3VuaXF1ZShkZW50cnksIGlub2RlKTsKKwlyZXMgPSBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKIAlpZiAoIXJlcykKIAkJdjlmc19maWRfYWRkKGRlbnRyeSwgZmlkKTsKIAllbHNlIGlmICghSVNfRVJSKHJlcykpCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwppbmRleCAwMmI2NGY0Li42MDU0YzE2YiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYworKysgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCkBAIC04MjYsOCArODI2LDggQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGVudHJ5OwogCXN0cnVjdCBwb3NpeF9hY2wgKmRhY2wgPSBOVUxMLCAqcGFjbCA9IE5VTEw7CiAKLQlwOV9kZWJ1ZyhQOV9ERUJVR19WRlMsICIgJWx1LCVzIG1vZGU6ICVoeCBNQUpPUjogJXUgTUlOT1I6ICV1XG4iLAotCQkgZGlyLT5pX2lubywgZGVudHJ5LT5kX25hbWUubmFtZSwgb21vZGUsCisJcDlfZGVidWcoUDlfREVCVUdfVkZTLCAiICVsdSwlcGQgbW9kZTogJWh4IE1BSk9SOiAldSBNSU5PUjogJXVcbiIsCisJCSBkaXItPmlfaW5vLCBkZW50cnksIG9tb2RlLAogCQkgTUFKT1IocmRldiksIE1JTk9SKHJkZXYpKTsKIAogCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYW1pZ2FmZnMuYyBiL2ZzL2FmZnMvYW1pZ2FmZnMuYwppbmRleCBhYmM4NTM5Li45MzdjZTg3IDEwMDY0NAotLS0gYS9mcy9hZmZzL2FtaWdhZmZzLmMKKysrIGIvZnMvYWZmcy9hbWlnYWZmcy5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShkZW50cnksICZpbm9kZS0+aV9kZW50cnksIGRfYWxpYXMpIHsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShkZW50cnksICZpbm9kZS0+aV9kZW50cnksIGRfdS5kX2FsaWFzKSB7CiAJCWlmIChlbnRyeV9pbm8gPT0gKHUzMikobG9uZylkZW50cnktPmRfZnNkYXRhKSB7CiAJCQlkZW50cnktPmRfZnNkYXRhID0gKHZvaWQgKilpbm9kZS0+aV9pbm87CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvaW5vZGUuYyBiL2ZzL2FmZnMvaW5vZGUuYwppbmRleCBlMjE3YzUxLi5kMDYwOWEyIDEwMDY0NAotLS0gYS9mcy9hZmZzL2lub2RlLmMKKysrIGIvZnMvYWZmcy9pbm9kZS5jCkBAIC0zNDgsOSArMzQ4LDkgQEAKIAl1MzIgYmxvY2sgPSAwOwogCWludCByZXR2YWw7CiAKLQlwcl9kZWJ1ZygiJXMoZGlyPSV1LCBpbm9kZT0ldSwgXCIlKnNcIiwgdHlwZT0lZClcbiIsCisJcHJfZGVidWcoIiVzKGRpcj0ldSwgaW5vZGU9JXUsIFwiJXBkXCIsIHR5cGU9JWQpXG4iLAogCQkgX19mdW5jX18sICh1MzIpZGlyLT5pX2lubywKLQkgICAgICAgICAodTMyKWlub2RlLT5pX2lubywgKGludClkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHR5cGUpOworCSAgICAgICAgICh1MzIpaW5vZGUtPmlfaW5vLCBkZW50cnksIHR5cGUpOwogCiAJcmV0dmFsID0gLUVJTzsKIAliaCA9IGFmZnNfYnJlYWQoc2IsIGlub2RlLT5pX2lubyk7CmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmMKaW5kZXggMDM1YmQzMS4uYmJjMzg1MyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9uYW1laS5jCisrKyBiL2ZzL2FmZnMvbmFtZWkuYwpAQCAtMTkwLDggKzE5MCw3IEBACiAJdG91cHBlcl90IHRvdXBwZXIgPSBhZmZzX2dldF90b3VwcGVyKHNiKTsKIAl1MzIga2V5OwogCi0JcHJfZGVidWcoIiVzKFwiJS4qc1wiKVxuIiwKLQkJIF9fZnVuY19fLCAoaW50KWRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJcHJfZGVidWcoIiVzKFwiJXBkXCIpXG4iLCBfX2Z1bmNfXywgZGVudHJ5KTsKIAogCWJoID0gYWZmc19icmVhZChzYiwgZGlyLT5pX2lubyk7CiAJaWYgKCFiaCkKQEAgLTIxOSw4ICsyMTgsNyBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAKLQlwcl9kZWJ1ZygiJXMoXCIlLipzXCIpXG4iLAotCQkgX19mdW5jX18sIChpbnQpZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlwcl9kZWJ1ZygiJXMoXCIlcGRcIilcbiIsIF9fZnVuY19fLCBkZW50cnkpOwogCiAJYWZmc19sb2NrX2RpcihkaXIpOwogCWJoID0gYWZmc19maW5kX2VudHJ5KGRpciwgZGVudHJ5KTsKQEAgLTI1MCw5ICsyNDgsOSBAQAogaW50CiBhZmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCXByX2RlYnVnKCIlcyhkaXI9JWQsICVsdSBcIiUuKnNcIilcbiIsCisJcHJfZGVidWcoIiVzKGRpcj0lZCwgJWx1IFwiJXBkXCIpXG4iLAogCQkgX19mdW5jX18sICh1MzIpZGlyLT5pX2lubywgZGVudHJ5LT5kX2lub2RlLT5pX2lubywKLQkJKGludClkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQlkZW50cnkpOwogCiAJcmV0dXJuIGFmZnNfcmVtb3ZlX2hlYWRlcihkZW50cnkpOwogfQpAQCAtMjY0LDkgKzI2Miw4IEBACiAJc3RydWN0IGlub2RlCSppbm9kZTsKIAlpbnQJCSBlcnJvcjsKIAotCXByX2RlYnVnKCIlcyglbHUsXCIlLipzXCIsMCVobylcbiIsCi0JCSBfX2Z1bmNfXywgZGlyLT5pX2lubywgKGludClkZW50cnktPmRfbmFtZS5sZW4sCi0JCSBkZW50cnktPmRfbmFtZS5uYW1lLG1vZGUpOworCXByX2RlYnVnKCIlcyglbHUsXCIlcGRcIiwwJWhvKVxuIiwKKwkJIF9fZnVuY19fLCBkaXItPmlfaW5vLCBkZW50cnksIG1vZGUpOwogCiAJaW5vZGUgPSBhZmZzX25ld19pbm9kZShkaXIpOwogCWlmICghaW5vZGUpCkBAIC0yOTQsOSArMjkxLDggQEAKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZTsKIAlpbnQJCQkgZXJyb3I7CiAKLQlwcl9kZWJ1ZygiJXMoJWx1LFwiJS4qc1wiLDAlaG8pXG4iLAotCQkgX19mdW5jX18sIGRpci0+aV9pbm8sIChpbnQpZGVudHJ5LT5kX25hbWUubGVuLAotCQkgZGVudHJ5LT5kX25hbWUubmFtZSwgbW9kZSk7CisJcHJfZGVidWcoIiVzKCVsdSxcIiVwZFwiLDAlaG8pXG4iLAorCQkgX19mdW5jX18sIGRpci0+aV9pbm8sIGRlbnRyeSwgbW9kZSk7CiAKIAlpbm9kZSA9IGFmZnNfbmV3X2lub2RlKGRpcik7CiAJaWYgKCFpbm9kZSkKQEAgLTMyMSw5ICszMTcsOSBAQAogaW50CiBhZmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JcHJfZGVidWcoIiVzKGRpcj0ldSwgJWx1IFwiJS4qc1wiKVxuIiwKKwlwcl9kZWJ1ZygiJXMoZGlyPSV1LCAlbHUgXCIlcGRcIilcbiIsCiAJCV9fZnVuY19fLCAodTMyKWRpci0+aV9pbm8sIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCi0JCSAoaW50KWRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCSBkZW50cnkpOwogCiAJcmV0dXJuIGFmZnNfcmVtb3ZlX2hlYWRlcihkZW50cnkpOwogfQpAQCAtMzM4LDkgKzMzNCw4IEBACiAJaW50CQkJIGksIG1heGxlbiwgZXJyb3I7CiAJY2hhcgkJCSBjLCBsYzsKIAotCXByX2RlYnVnKCIlcyglbHUsXCIlLipzXCIgLT4gXCIlc1wiKVxuIiwKLQkJIF9fZnVuY19fLCBkaXItPmlfaW5vLCAoaW50KWRlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHN5bW5hbWUpOworCXByX2RlYnVnKCIlcyglbHUsXCIlcGRcIiAtPiBcIiVzXCIpXG4iLAorCQkgX19mdW5jX18sIGRpci0+aV9pbm8sIGRlbnRyeSwgc3ltbmFtZSk7CiAKIAltYXhsZW4gPSBBRkZTX1NCKHNiKS0+c19oYXNoc2l6ZSAqIHNpemVvZih1MzIpIC0gMTsKIAlpbm9kZSAgPSBhZmZzX25ld19pbm9kZShkaXIpOwpAQCAtNDA5LDkgKzQwNCw5IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CiAKLQlwcl9kZWJ1ZygiJXMoJXUsICV1LCBcIiUuKnNcIilcbiIsCisJcHJfZGVidWcoIiVzKCV1LCAldSwgXCIlcGRcIilcbiIsCiAJCSBfX2Z1bmNfXywgKHUzMilpbm9kZS0+aV9pbm8sICh1MzIpZGlyLT5pX2lubywKLQkJIChpbnQpZGVudHJ5LT5kX25hbWUubGVuLGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkgZGVudHJ5KTsKIAogCXJldHVybiBhZmZzX2FkZF9lbnRyeShkaXIsIGlub2RlLCBkZW50cnksIFNUX0xJTktGSUxFKTsKIH0KQEAgLTQyNCwxMCArNDE5LDkgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgcmV0dmFsOwogCi0JcHJfZGVidWcoIiVzKG9sZD0ldSxcIiUqc1wiIHRvIG5ldz0ldSxcIiUqc1wiKVxuIiwKLQkJIF9fZnVuY19fLCAodTMyKW9sZF9kaXItPmlfaW5vLCAoaW50KW9sZF9kZW50cnktPmRfbmFtZS5sZW4sCi0JCSBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwgKHUzMiluZXdfZGlyLT5pX2lubywKLQkJKGludCluZXdfZGVudHJ5LT5kX25hbWUubGVuLCBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJcHJfZGVidWcoIiVzKG9sZD0ldSxcIiVwZFwiIHRvIG5ldz0ldSxcIiVwZFwiKVxuIiwKKwkJIF9fZnVuY19fLCAodTMyKW9sZF9kaXItPmlfaW5vLCBvbGRfZGVudHJ5LAorCQkgKHUzMiluZXdfZGlyLT5pX2lubywgbmV3X2RlbnRyeSk7CiAKIAlyZXR2YWwgPSBhZmZzX2NoZWNrX25hbWUobmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJIG5ld19kZW50cnktPmRfbmFtZS5sZW4sCmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmMKaW5kZXggYTE2NDViOC4uNGVjMzVlOSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpci5jCisrKyBiL2ZzL2Fmcy9kaXIuYwpAQCAtMjYsNyArMjYsNyBAQAogc3RhdGljIGludCBhZnNfZF9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIHN0YXRpYyBpbnQgYWZzX2RfZGVsZXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBzdGF0aWMgdm9pZCBhZnNfZF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1zdGF0aWMgaW50IGFmc19sb29rdXBfZmlsbGRpcih2b2lkICpfY29va2llLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbiwKK3N0YXRpYyBpbnQgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbiwKIAkJCQkgIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSk7CiBzdGF0aWMgaW50IGFmc19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCQkgICAgICBib29sIGV4Y2wpOwpAQCAtMzkxLDEwICszOTEsMTEgQEAKICAqIC0gaWYgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKCkgc3BvdHMgdGhpcyBmdW5jdGlvbiwgaXQnbGwgcGFzcyB0aGUgRklECiAgKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZQogICovCi1zdGF0aWMgaW50IGFmc19sb29rdXBfZmlsbGRpcih2b2lkICpfY29va2llLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbiwKLQkJCSAgICAgIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSkKK3N0YXRpYyBpbnQgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgaW50IG5sZW4sIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSkKIHsKLQlzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUgKmNvb2tpZSA9IF9jb29raWU7CisJc3RydWN0IGFmc19sb29rdXBfY29va2llICpjb29raWUgPQorCQljb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUsIGN0eCk7CiAKIAlfZW50ZXIoInslcywldX0sJXMsJXUsLCVsbHUsJXUiLAogCSAgICAgICBjb29raWUtPm5hbWUubmFtZSwgY29va2llLT5uYW1lLmxlbiwgbmFtZSwgbmxlbiwKQEAgLTQzMyw3ICs0MzQsNyBAQAogCX07CiAJaW50IHJldDsKIAotCV9lbnRlcigieyVsdX0sJXB7JXN9LCIsIGRpci0+aV9pbm8sIGRlbnRyeSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJX2VudGVyKCJ7JWx1fSwlcHslcGR9LCIsIGRpci0+aV9pbm8sIGRlbnRyeSwgZGVudHJ5KTsKIAogCS8qIHNlYXJjaCB0aGUgZGlyZWN0b3J5ICovCiAJcmV0ID0gYWZzX2Rpcl9pdGVyYXRlKGRpciwgJmNvb2tpZS5jdHgsIGtleSk7CkBAIC00NjUsOCArNDY2LDggQEAKIAlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGRpcik7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAotCV9lbnRlcigiJWQsICVweyVzfSwgeyV4OiV1fSwgJXAiLAotCSAgICAgICByZXQsIGRlbnRyeSwgZGV2bmFtZSwgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIGtleSk7CisJX2VudGVyKCIlZCwgJXB7JXBkfSwgeyV4OiV1fSwgJXAiLAorCSAgICAgICByZXQsIGRlbnRyeSwgZGVudHJ5LCB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwga2V5KTsKIAogCWlmIChyZXQgIT0gLUVOT0VOVCB8fAogCSAgICAhdGVzdF9iaXQoQUZTX1ZOT0RFX0FVVE9DRUxMLCAmdm5vZGUtPmZsYWdzKSkKQEAgLTUwMSw4ICs1MDIsOCBAQAogCiAJdm5vZGUgPSBBRlNfRlNfSShkaXIpOwogCi0JX2VudGVyKCJ7JXg6JXV9LCVweyVzfSwiLAotCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5LCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlfZW50ZXIoInsleDoldX0sJXB7JXBkfSwiLAorCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5LCBkZW50cnkpOwogCiAJQVNTRVJUQ01QKGRlbnRyeS0+ZF9pbm9kZSwgPT0sIE5VTEwpOwogCkBAIC01ODgsMTEgKzU4OSwxMSBAQAogCXZub2RlID0gQUZTX0ZTX0koZGVudHJ5LT5kX2lub2RlKTsKIAogCWlmIChkZW50cnktPmRfaW5vZGUpCi0JCV9lbnRlcigie3Y9eyV4OiV1fSBuPSVzIGZsPSVseH0sIiwKLQkJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCBkZW50cnktPmRfbmFtZS5uYW1lLAorCQlfZW50ZXIoInt2PXsleDoldX0gbj0lcGQgZmw9JWx4fSwiLAorCQkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIGRlbnRyeSwKIAkJICAgICAgIHZub2RlLT5mbGFncyk7CiAJZWxzZQotCQlfZW50ZXIoIntuZWcgbj0lc30iLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwkJX2VudGVyKCJ7bmVnIG49JXBkfSIsIGRlbnRyeSk7CiAKIAlrZXkgPSBhZnNfcmVxdWVzdF9rZXkoQUZTX0ZTX1MoZGVudHJ5LT5kX3NiKS0+dm9sdW1lLT5jZWxsKTsKIAlpZiAoSVNfRVJSKGtleSkpCkBAIC02MDcsNyArNjA4LDcgQEAKIAkJYWZzX3ZhbGlkYXRlKGRpciwga2V5KTsKIAogCWlmICh0ZXN0X2JpdChBRlNfVk5PREVfREVMRVRFRCwgJmRpci0+ZmxhZ3MpKSB7Ci0JCV9kZWJ1ZygiJXM6IHBhcmVudCBkaXIgZGVsZXRlZCIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQlfZGVidWcoIiVwZDogcGFyZW50IGRpciBkZWxldGVkIiwgZGVudHJ5KTsKIAkJZ290byBvdXRfYmFkOwogCX0KIApAQCAtNjI1LDE2ICs2MjYsMTYgQEAKIAkJaWYgKCFkZW50cnktPmRfaW5vZGUpCiAJCQlnb3RvIG91dF9iYWQ7CiAJCWlmIChpc19iYWRfaW5vZGUoZGVudHJ5LT5kX2lub2RlKSkgewotCQkJcHJpbnRrKCJrQUZTOiBhZnNfZF9yZXZhbGlkYXRlOiAlcy8lcyBoYXMgYmFkIGlub2RlXG4iLAotCQkJICAgICAgIHBhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkJcHJpbnRrKCJrQUZTOiBhZnNfZF9yZXZhbGlkYXRlOiAlcGQyIGhhcyBiYWQgaW5vZGVcbiIsCisJCQkgICAgICAgZGVudHJ5KTsKIAkJCWdvdG8gb3V0X2JhZDsKIAkJfQogCiAJCS8qIGlmIHRoZSB2bm9kZSBJRCBoYXMgY2hhbmdlZCwgdGhlbiB0aGUgZGlyZW50IHBvaW50cyB0byBhCiAJCSAqIGRpZmZlcmVudCBmaWxlICovCiAJCWlmIChmaWQudm5vZGUgIT0gdm5vZGUtPmZpZC52bm9kZSkgewotCQkJX2RlYnVnKCIlczogZGlyZW50IGNoYW5nZWQgWyV1ICE9ICV1XSIsCi0JCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZmlkLnZub2RlLAorCQkJX2RlYnVnKCIlcGQ6IGRpcmVudCBjaGFuZ2VkIFsldSAhPSAldV0iLAorCQkJICAgICAgIGRlbnRyeSwgZmlkLnZub2RlLAogCQkJICAgICAgIHZub2RlLT5maWQudm5vZGUpOwogCQkJZ290byBub3RfZm91bmQ7CiAJCX0KQEAgLTY0Myw4ICs2NDQsOCBAQAogCQkgKiBiZWVuIGRlbGV0ZWQgYW5kIHJlcGxhY2VkLCBhbmQgdGhlIG9yaWdpbmFsIHZub2RlIElEIGhhcwogCQkgKiBiZWVuIHJldXNlZCAqLwogCQlpZiAoZmlkLnVuaXF1ZSAhPSB2bm9kZS0+ZmlkLnVuaXF1ZSkgewotCQkJX2RlYnVnKCIlczogZmlsZSBkZWxldGVkICh1cSAldSAtPiAldSBJOiV1KSIsCi0JCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZmlkLnVuaXF1ZSwKKwkJCV9kZWJ1ZygiJXBkOiBmaWxlIGRlbGV0ZWQgKHVxICV1IC0+ICV1IEk6JXUpIiwKKwkJCSAgICAgICBkZW50cnksIGZpZC51bmlxdWUsCiAJCQkgICAgICAgdm5vZGUtPmZpZC51bmlxdWUsCiAJCQkgICAgICAgZGVudHJ5LT5kX2lub2RlLT5pX2dlbmVyYXRpb24pOwogCQkJc3Bpbl9sb2NrKCZ2bm9kZS0+bG9jayk7CkBAIC02NTYsMTQgKzY1NywxNCBAQAogCiAJY2FzZSAtRU5PRU5UOgogCQkvKiB0aGUgZmlsZW5hbWUgaXMgdW5rbm93biAqLwotCQlfZGVidWcoIiVzOiBkaXJlbnQgbm90IGZvdW5kIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCV9kZWJ1ZygiJXBkOiBkaXJlbnQgbm90IGZvdW5kIiwgZGVudHJ5KTsKIAkJaWYgKGRlbnRyeS0+ZF9pbm9kZSkKIAkJCWdvdG8gbm90X2ZvdW5kOwogCQlnb3RvIG91dF92YWxpZDsKIAogCWRlZmF1bHQ6Ci0JCV9kZWJ1ZygiZmFpbGVkIHRvIGl0ZXJhdGUgZGlyICVzOiAlZCIsCi0JCSAgICAgICBwYXJlbnQtPmRfbmFtZS5uYW1lLCByZXQpOworCQlfZGVidWcoImZhaWxlZCB0byBpdGVyYXRlIGRpciAlcGQ6ICVkIiwKKwkJICAgICAgIHBhcmVudCwgcmV0KTsKIAkJZ290byBvdXRfYmFkOwogCX0KIApAQCAtNjgxLDggKzY4Miw3IEBACiAJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAogb3V0X2JhZDoKLQlfZGVidWcoImRyb3BwaW5nIGRlbnRyeSAlcy8lcyIsCi0JICAgICAgIHBhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCV9kZWJ1ZygiZHJvcHBpbmcgZGVudHJ5ICVwZDIiLCBkZW50cnkpOwogCWRwdXQocGFyZW50KTsKIAlrZXlfcHV0KGtleSk7CiAKQEAgLTY5OCw3ICs2OTgsNyBAQAogICovCiBzdGF0aWMgaW50IGFmc19kX2RlbGV0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JX2VudGVyKCIlcyIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCV9lbnRlcigiJXBkIiwgZGVudHJ5KTsKIAogCWlmIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfTkZTRlNfUkVOQU1FRCkKIAkJZ290byB6YXA7CkBAIC03MjEsNyArNzIxLDcgQEAKICAqLwogc3RhdGljIHZvaWQgYWZzX2RfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JX2VudGVyKCIlcyIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCV9lbnRlcigiJXBkIiwgZGVudHJ5KTsKIH0KIAogLyoKQEAgLTc0MCw4ICs3NDAsOCBAQAogCiAJZHZub2RlID0gQUZTX0ZTX0koZGlyKTsKIAotCV9lbnRlcigieyV4OiV1fSx7JXN9LCVobyIsCi0JICAgICAgIGR2bm9kZS0+ZmlkLnZpZCwgZHZub2RlLT5maWQudm5vZGUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIG1vZGUpOworCV9lbnRlcigieyV4OiV1fSx7JXBkfSwlaG8iLAorCSAgICAgICBkdm5vZGUtPmZpZC52aWQsIGR2bm9kZS0+ZmlkLnZub2RlLCBkZW50cnksIG1vZGUpOwogCiAJa2V5ID0gYWZzX3JlcXVlc3Rfa2V5KGR2bm9kZS0+dm9sdW1lLT5jZWxsKTsKIAlpZiAoSVNfRVJSKGtleSkpIHsKQEAgLTgwMSw4ICs4MDEsOCBAQAogCiAJZHZub2RlID0gQUZTX0ZTX0koZGlyKTsKIAotCV9lbnRlcigieyV4OiV1fSx7JXN9IiwKLQkgICAgICAgZHZub2RlLT5maWQudmlkLCBkdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJX2VudGVyKCJ7JXg6JXV9LHslcGR9IiwKKwkgICAgICAgZHZub2RlLT5maWQudmlkLCBkdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5KTsKIAogCWtleSA9IGFmc19yZXF1ZXN0X2tleShkdm5vZGUtPnZvbHVtZS0+Y2VsbCk7CiAJaWYgKElTX0VSUihrZXkpKSB7CkBAIC04NDMsOCArODQzLDggQEAKIAogCWR2bm9kZSA9IEFGU19GU19JKGRpcik7CiAKLQlfZW50ZXIoInsleDoldX0seyVzfSIsCi0JICAgICAgIGR2bm9kZS0+ZmlkLnZpZCwgZHZub2RlLT5maWQudm5vZGUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCV9lbnRlcigieyV4OiV1fSx7JXBkfSIsCisJICAgICAgIGR2bm9kZS0+ZmlkLnZpZCwgZHZub2RlLT5maWQudm5vZGUsIGRlbnRyeSk7CiAKIAlyZXQgPSAtRU5BTUVUT09MT05HOwogCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPj0gQUZTTkFNRU1BWCkKQEAgLTkxNyw4ICs5MTcsOCBAQAogCiAJZHZub2RlID0gQUZTX0ZTX0koZGlyKTsKIAotCV9lbnRlcigieyV4OiV1fSx7JXN9LCVobywiLAotCSAgICAgICBkdm5vZGUtPmZpZC52aWQsIGR2bm9kZS0+ZmlkLnZub2RlLCBkZW50cnktPmRfbmFtZS5uYW1lLCBtb2RlKTsKKwlfZW50ZXIoInsleDoldX0seyVwZH0sJWhvLCIsCisJICAgICAgIGR2bm9kZS0+ZmlkLnZpZCwgZHZub2RlLT5maWQudm5vZGUsIGRlbnRyeSwgbW9kZSk7CiAKIAlrZXkgPSBhZnNfcmVxdWVzdF9rZXkoZHZub2RlLT52b2x1bWUtPmNlbGwpOwogCWlmIChJU19FUlIoa2V5KSkgewpAQCAtOTgwLDEwICs5ODAsMTAgQEAKIAl2bm9kZSA9IEFGU19GU19JKGZyb20tPmRfaW5vZGUpOwogCWR2bm9kZSA9IEFGU19GU19JKGRpcik7CiAKLQlfZW50ZXIoInsleDoldX0seyV4OiV1fSx7JXN9IiwKKwlfZW50ZXIoInsleDoldX0seyV4OiV1fSx7JXBkfSIsCiAJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLAogCSAgICAgICBkdm5vZGUtPmZpZC52aWQsIGR2bm9kZS0+ZmlkLnZub2RlLAotCSAgICAgICBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwkgICAgICAgZGVudHJ5KTsKIAogCWtleSA9IGFmc19yZXF1ZXN0X2tleShkdm5vZGUtPnZvbHVtZS0+Y2VsbCk7CiAJaWYgKElTX0VSUihrZXkpKSB7CkBAIC0xMDI1LDggKzEwMjUsOCBAQAogCiAJZHZub2RlID0gQUZTX0ZTX0koZGlyKTsKIAotCV9lbnRlcigieyV4OiV1fSx7JXN9LCVzIiwKLQkgICAgICAgZHZub2RlLT5maWQudmlkLCBkdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSwKKwlfZW50ZXIoInsleDoldX0seyVwZH0sJXMiLAorCSAgICAgICBkdm5vZGUtPmZpZC52aWQsIGR2bm9kZS0+ZmlkLnZub2RlLCBkZW50cnksCiAJICAgICAgIGNvbnRlbnQpOwogCiAJcmV0ID0gLUVJTlZBTDsKQEAgLTEwOTMsMTEgKzEwOTMsMTEgQEAKIAlvcmlnX2R2bm9kZSA9IEFGU19GU19JKG9sZF9kaXIpOwogCW5ld19kdm5vZGUgPSBBRlNfRlNfSShuZXdfZGlyKTsKIAotCV9lbnRlcigieyV4OiV1fSx7JXg6JXV9LHsleDoldX0seyVzfSIsCisJX2VudGVyKCJ7JXg6JXV9LHsleDoldX0seyV4OiV1fSx7JXBkfSIsCiAJICAgICAgIG9yaWdfZHZub2RlLT5maWQudmlkLCBvcmlnX2R2bm9kZS0+ZmlkLnZub2RlLAogCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwKIAkgICAgICAgbmV3X2R2bm9kZS0+ZmlkLnZpZCwgbmV3X2R2bm9kZS0+ZmlkLnZub2RlLAotCSAgICAgICBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJICAgICAgIG5ld19kZW50cnkpOwogCiAJa2V5ID0gYWZzX3JlcXVlc3Rfa2V5KG9yaWdfZHZub2RlLT52b2x1bWUtPmNlbGwpOwogCWlmIChJU19FUlIoa2V5KSkgewpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCAyOTQ2NzEyLi44YTFkMzhlIDEwMDY0NAotLS0gYS9mcy9hZnMvaW5vZGUuYworKysgYi9mcy9hZnMvaW5vZGUuYwpAQCAtNDYyLDggKzQ2Miw4IEBACiAJc3RydWN0IGtleSAqa2V5OwogCWludCByZXQ7CiAKLQlfZW50ZXIoInsleDoldX0se249JXN9LCV4IiwKLQkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJX2VudGVyKCJ7JXg6JXV9LHtuPSVwZH0sJXgiLAorCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5LAogCSAgICAgICBhdHRyLT5pYV92YWxpZCk7CiAKIAlpZiAoIShhdHRyLT5pYV92YWxpZCAmIChBVFRSX1NJWkUgfCBBVFRSX01PREUgfCBBVFRSX1VJRCB8IEFUVFJfR0lEIHwKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9tbnRwdC5jIGIvZnMvYWZzL21udHB0LmMKaW5kZXggOTY4MmMzMy4uOTM4YzVhYiAxMDA2NDQKLS0tIGEvZnMvYWZzL21udHB0LmMKKysrIGIvZnMvYWZzL21udHB0LmMKQEAgLTEwNiwxNCArMTA2LDcgQEAKIAkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JX2VudGVyKCIlcCwlcHslcHslc30sJXN9IiwKLQkgICAgICAgZGlyLAotCSAgICAgICBkZW50cnksCi0JICAgICAgIGRlbnRyeS0+ZF9wYXJlbnQsCi0JICAgICAgIGRlbnRyeS0+ZF9wYXJlbnQgPwotCSAgICAgICBkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSA6IChjb25zdCB1bnNpZ25lZCBjaGFyICopICIiLAotCSAgICAgICBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQorCV9lbnRlcigiJXAsJXB7JXBkMn0iLCBkaXIsIGRlbnRyeSwgZGVudHJ5KTsKIAlyZXR1cm4gRVJSX1BUUigtRVJFTU9URSk7CiB9CiAKQEAgLTEyMiwxNCArMTE1LDcgQEAKICAqLwogc3RhdGljIGludCBhZnNfbW50cHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlfZW50ZXIoIiVwLCVweyVweyVzfSwlc30iLAotCSAgICAgICBpbm9kZSwgZmlsZSwKLQkgICAgICAgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQsCi0JICAgICAgIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfcGFyZW50ID8KLQkgICAgICAgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lIDoKLQkgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgIiIsCi0JICAgICAgIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKLQorCV9lbnRlcigiJXAsJXB7JXBEMn0iLCBpbm9kZSwgZmlsZSwgZmlsZSk7CiAJcmV0dXJuIC1FUkVNT1RFOwogfQogCkBAIC0xNDYsNyArMTMyLDcgQEAKIAlib29sIHJ3cGF0aCA9IGZhbHNlOwogCWludCByZXQ7CiAKLQlfZW50ZXIoInslc30iLCBtbnRwdC0+ZF9uYW1lLm5hbWUpOworCV9lbnRlcigieyVwZH0iLCBtbnRwdCk7CiAKIAlCVUdfT04oIW1udHB0LT5kX2lub2RlKTsKIApAQCAtMjQyLDcgKzIyOCw3IEBACiB7CiAJc3RydWN0IHZmc21vdW50ICpuZXdtbnQ7CiAKLQlfZW50ZXIoInslc30iLCBwYXRoLT5kZW50cnktPmRfbmFtZS5uYW1lKTsKKwlfZW50ZXIoInslcGR9IiwgcGF0aC0+ZGVudHJ5KTsKIAogCW5ld21udCA9IGFmc19tbnRwdF9kb19hdXRvbW91bnQocGF0aC0+ZGVudHJ5KTsKIAlpZiAoSVNfRVJSKG5ld21udCkpCmRpZmYgLS1naXQgYS9mcy9hZnMvd3JpdGUuYyBiL2ZzL2Fmcy93cml0ZS5jCmluZGV4IGFiNmFkZmQuLmMxM2NiMDggMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy93cml0ZS5jCisrKyBiL2ZzL2Fmcy93cml0ZS5jCkBAIC02ODIsMTQgKzY4MiwxMyBAQAogICovCiBpbnQgYWZzX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYykKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJc3RydWN0IGFmc193cml0ZWJhY2sgKndiLCAqeHdiOwotCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTsKIAlpbnQgcmV0OwogCi0JX2VudGVyKCJ7JXg6JXV9LHtuPSVzfSwlZCIsCi0JICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCBkZW50cnktPmRfbmFtZS5uYW1lLAorCV9lbnRlcigieyV4OiV1fSx7bj0lcER9LCVkIiwKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIGZpbGUsCiAJICAgICAgIGRhdGFzeW5jKTsKIAogCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIGVuZCk7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2V4cGlyZS5jIGIvZnMvYXV0b2ZzNC9leHBpcmUuYwppbmRleCA2ODNhNWI5Li5iZmRiYWJhIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2V4cGlyZS5jCisrKyBiL2ZzL2F1dG9mczQvZXhwaXJlLmMKQEAgLTQxLDggKzQxLDcgQEAKIAlzdHJ1Y3QgcGF0aCBwYXRoID0gey5tbnQgPSBtbnQsIC5kZW50cnkgPSBkZW50cnl9OwogCWludCBzdGF0dXMgPSAxOwogCi0JRFBSSU5USygiZGVudHJ5ICVwICUuKnMiLAotCQlkZW50cnksIChpbnQpZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlEUFJJTlRLKCJkZW50cnkgJXAgJXBkIiwgZGVudHJ5LCBkZW50cnkpOwogCiAJcGF0aF9nZXQoJnBhdGgpOwogCkBAIC04NSw3ICs4NCw3IEBACiAJc3Bpbl9sb2NrKCZyb290LT5kX2xvY2spOwogCiAJaWYgKHByZXYpCi0JCW5leHQgPSBwcmV2LT5kX3UuZF9jaGlsZC5uZXh0OworCQluZXh0ID0gcHJldi0+ZF9jaGlsZC5uZXh0OwogCWVsc2UgewogCQlwcmV2ID0gZGdldF9kbG9jayhyb290KTsKIAkJbmV4dCA9IHByZXYtPmRfc3ViZGlycy5uZXh0OwpAQCAtOTksMTMgKzk4LDEzIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXEgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKKwlxID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgZGVudHJ5LCBkX2NoaWxkKTsKIAogCXNwaW5fbG9ja19uZXN0ZWQoJnEtPmRfbG9jaywgREVOVFJZX0RfTE9DS19ORVNURUQpOwogCS8qIEFscmVhZHkgZ29uZSBvciBuZWdhdGl2ZSBkZW50cnkgKHVuZGVyIGNvbnN0cnVjdGlvbikgLSB0cnkgbmV4dCAqLwogCWlmICghZF9jb3VudChxKSB8fCAhc2ltcGxlX3Bvc2l0aXZlKHEpKSB7CiAJCXNwaW5fdW5sb2NrKCZxLT5kX2xvY2spOwotCQluZXh0ID0gcS0+ZF91LmRfY2hpbGQubmV4dDsKKwkJbmV4dCA9IHEtPmRfY2hpbGQubmV4dDsKIAkJZ290byBjb250OwogCX0KIAlkZ2V0X2Rsb2NrKHEpOwpAQCAtMTU1LDEzICsxNTQsMTMgQEAKIAkJCQlnb3RvIHJlbG9jazsKIAkJCX0KIAkJCXNwaW5fdW5sb2NrKCZwLT5kX2xvY2spOwotCQkJbmV4dCA9IHAtPmRfdS5kX2NoaWxkLm5leHQ7CisJCQluZXh0ID0gcC0+ZF9jaGlsZC5uZXh0OwogCQkJcCA9IHBhcmVudDsKIAkJCWlmIChuZXh0ICE9ICZwYXJlbnQtPmRfc3ViZGlycykKIAkJCQlicmVhazsKIAkJfQogCX0KLQlyZXQgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKKwlyZXQgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCBkZW50cnksIGRfY2hpbGQpOwogCiAJc3Bpbl9sb2NrX25lc3RlZCgmcmV0LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKIAkvKiBOZWdhdGl2ZSBkZW50cnkgLSB0cnkgbmV4dCAqLwpAQCAtMTkyLDggKzE5MSw3IEBACiAJCQkJdW5zaWduZWQgbG9uZyB0aW1lb3V0LAogCQkJCWludCBkb19ub3cpCiB7Ci0JRFBSSU5USygidG9wICVwICUuKnMiLAotCQl0b3AsIChpbnQpIHRvcC0+ZF9uYW1lLmxlbiwgdG9wLT5kX25hbWUubmFtZSk7CisJRFBSSU5USygidG9wICVwICVwZCIsIHRvcCwgdG9wKTsKIAogCS8qIElmIGl0J3MgYnVzeSB1cGRhdGUgdGhlIGV4cGlyeSBjb3VudGVycyAqLwogCWlmICghbWF5X3Vtb3VudF90cmVlKG1udCkpIHsKQEAgLTIyMSw4ICsyMTksNyBAQAogCXN0cnVjdCBhdXRvZnNfaW5mbyAqdG9wX2lubyA9IGF1dG9mczRfZGVudHJ5X2lubyh0b3ApOwogCXN0cnVjdCBkZW50cnkgKnA7CiAKLQlEUFJJTlRLKCJ0b3AgJXAgJS4qcyIsCi0JCXRvcCwgKGludCl0b3AtPmRfbmFtZS5sZW4sIHRvcC0+ZF9uYW1lLm5hbWUpOworCURQUklOVEsoInRvcCAlcCAlcGQiLCB0b3AsIHRvcCk7CiAKIAkvKiBOZWdhdGl2ZSBkZW50cnkgLSBnaXZlIHVwICovCiAJaWYgKCFzaW1wbGVfcG9zaXRpdmUodG9wKSkKQEAgLTIzMCw4ICsyMjcsNyBAQAogCiAJcCA9IE5VTEw7CiAJd2hpbGUgKChwID0gZ2V0X25leHRfcG9zaXRpdmVfZGVudHJ5KHAsIHRvcCkpKSB7Ci0JCURQUklOVEsoImRlbnRyeSAlcCAlLipzIiwKLQkJCXAsIChpbnQpIHAtPmRfbmFtZS5sZW4sIHAtPmRfbmFtZS5uYW1lKTsKKwkJRFBSSU5USygiZGVudHJ5ICVwICVwZCIsIHAsIHApOwogCiAJCS8qCiAJCSAqIElzIHNvbWVvbmUgdmlzaXRpbmcgYW55d2hlcmUgaW4gdGhlIHN1YnRyZWUgPwpAQCAtMjc3LDEzICsyNzMsMTEgQEAKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpwOwogCi0JRFBSSU5USygicGFyZW50ICVwICUuKnMiLAotCQlwYXJlbnQsIChpbnQpcGFyZW50LT5kX25hbWUubGVuLCBwYXJlbnQtPmRfbmFtZS5uYW1lKTsKKwlEUFJJTlRLKCJwYXJlbnQgJXAgJXBkIiwgcGFyZW50LCBwYXJlbnQpOwogCiAJcCA9IE5VTEw7CiAJd2hpbGUgKChwID0gZ2V0X25leHRfcG9zaXRpdmVfZGVudHJ5KHAsIHBhcmVudCkpKSB7Ci0JCURQUklOVEsoImRlbnRyeSAlcCAlLipzIiwKLQkJCXAsIChpbnQpIHAtPmRfbmFtZS5sZW4sIHAtPmRfbmFtZS5uYW1lKTsKKwkJRFBSSU5USygiZGVudHJ5ICVwICVwZCIsIHAsIHApOwogCiAJCWlmIChkX21vdW50cG9pbnQocCkpIHsKIAkJCS8qIENhbiB3ZSB1bW91bnQgdGhpcyBndXkgKi8KQEAgLTM2OCw4ICszNjIsNyBAQAogCSAqCSAgIG9mZnNldCAoYXV0b2ZzLTUuMCspLgogCSAqLwogCWlmIChkX21vdW50cG9pbnQoZGVudHJ5KSkgewotCQlEUFJJTlRLKCJjaGVja2luZyBtb3VudHBvaW50ICVwICUuKnMiLAotCQkJZGVudHJ5LCAoaW50KWRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCURQUklOVEsoImNoZWNraW5nIG1vdW50cG9pbnQgJXAgJXBkIiwgZGVudHJ5LCBkZW50cnkpOwogCiAJCS8qIENhbiB3ZSB1bW91bnQgdGhpcyBndXkgKi8KIAkJaWYgKGF1dG9mczRfbW91bnRfYnVzeShtbnQsIGRlbnRyeSkpCkBAIC0zODIsOCArMzc1LDcgQEAKIAl9CiAKIAlpZiAoZGVudHJ5LT5kX2lub2RlICYmIFNfSVNMTksoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7Ci0JCURQUklOVEsoImNoZWNraW5nIHN5bWxpbmsgJXAgJS4qcyIsCi0JCQlkZW50cnksIChpbnQpZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwkJRFBSSU5USygiY2hlY2tpbmcgc3ltbGluayAlcCAlcGQiLCBkZW50cnksIGRlbnRyeSk7CiAJCS8qCiAJCSAqIEEgc3ltbGluayBjYW4ndCBiZSAiYnVzeSIgaW4gdGhlIHVzdWFsIHNlbnNlIHNvCiAJCSAqIGp1c3QgY2hlY2sgbGFzdCB1c2VkIGZvciBleHBpcmUgdGltZW91dC4KQEAgLTQ3OSw4ICs0NzEsNyBAQAogCXJldHVybiBOVUxMOwogCiBmb3VuZDoKLQlEUFJJTlRLKCJyZXR1cm5pbmcgJXAgJS4qcyIsCi0JCWV4cGlyZWQsIChpbnQpZXhwaXJlZC0+ZF9uYW1lLmxlbiwgZXhwaXJlZC0+ZF9uYW1lLm5hbWUpOworCURQUklOVEsoInJldHVybmluZyAlcCAlcGQiLCBleHBpcmVkLCBleHBpcmVkKTsKIAlpbm8tPmZsYWdzIHw9IEFVVE9GU19JTkZfRVhQSVJJTkc7CiAJc21wX21iKCk7CiAJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9OT19SQ1U7CkBAIC00ODksNyArNDgwLDcgQEAKIAlzcGluX2xvY2soJnNiaS0+bG9va3VwX2xvY2spOwogCXNwaW5fbG9jaygmZXhwaXJlZC0+ZF9wYXJlbnQtPmRfbG9jayk7CiAJc3Bpbl9sb2NrX25lc3RlZCgmZXhwaXJlZC0+ZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7Ci0JbGlzdF9tb3ZlKCZleHBpcmVkLT5kX3BhcmVudC0+ZF9zdWJkaXJzLCAmZXhwaXJlZC0+ZF91LmRfY2hpbGQpOworCWxpc3RfbW92ZSgmZXhwaXJlZC0+ZF9wYXJlbnQtPmRfc3ViZGlycywgJmV4cGlyZWQtPmRfY2hpbGQpOwogCXNwaW5fdW5sb2NrKCZleHBpcmVkLT5kX2xvY2spOwogCXNwaW5fdW5sb2NrKCZleHBpcmVkLT5kX3BhcmVudC0+ZF9sb2NrKTsKIAlzcGluX3VubG9jaygmc2JpLT5sb29rdXBfbG9jayk7CkBAIC01MTIsOCArNTAzLDcgQEAKIAlpZiAoaW5vLT5mbGFncyAmIEFVVE9GU19JTkZfRVhQSVJJTkcpIHsKIAkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CiAKLQkJRFBSSU5USygid2FpdGluZyBmb3IgZXhwaXJlICVwIG5hbWU9JS4qcyIsCi0JCQkgZGVudHJ5LCBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQlEUFJJTlRLKCJ3YWl0aW5nIGZvciBleHBpcmUgJXAgbmFtZT0lcGQiLCBkZW50cnksIGRlbnRyeSk7CiAKIAkJc3RhdHVzID0gYXV0b2ZzNF93YWl0KHNiaSwgZGVudHJ5LCBORllfTk9ORSk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmluby0+ZXhwaXJlX2NvbXBsZXRlKTsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggZDc2ZDA4My4uZGJiNWI3MiAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9yb290LmMKKysrIGIvZnMvYXV0b2ZzNC9yb290LmMKQEAgLTEwOCw4ICsxMDgsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShkZW50cnktPmRfc2IpOwogCi0JRFBSSU5USygiZmlsZT0lcCBkZW50cnk9JXAgJS4qcyIsCi0JCWZpbGUsIGRlbnRyeSwgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlEUFJJTlRLKCJmaWxlPSVwIGRlbnRyeT0lcCAlcEQiLCBmaWxlLCBkZW50cnksIGRlbnRyeSk7CiAKIAlpZiAoYXV0b2ZzNF9vel9tb2RlKHNiaSkpCiAJCWdvdG8gb3V0OwpAQCAtMjc5LDggKzI3OCw3IEBACiAJaWYgKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX1BFTkRJTkcpIHsKIAkJaWYgKHJjdV93YWxrKQogCQkJcmV0dXJuIC1FQ0hJTEQ7Ci0JCURQUklOVEsoIndhaXRpbmcgZm9yIG1vdW50IG5hbWU9JS4qcyIsCi0JCQlkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQlEUFJJTlRLKCJ3YWl0aW5nIGZvciBtb3VudCBuYW1lPSVwZCIsIGRlbnRyeSk7CiAJCXN0YXR1cyA9IGF1dG9mczRfd2FpdChzYmksIGRlbnRyeSwgTkZZX01PVU5UKTsKIAkJRFBSSU5USygibW91bnQgd2FpdCBkb25lIHN0YXR1cz0lZCIsIHN0YXR1cyk7CiAJfQpAQCAtMzQwLDggKzMzOCw3IEBACiAJc3RydWN0IGF1dG9mc19pbmZvICppbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKIAlpbnQgc3RhdHVzOwogCi0JRFBSSU5USygiZGVudHJ5PSVwICUuKnMiLAotCQlkZW50cnksIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJRFBSSU5USygiZGVudHJ5PSVwICVwZCIsIGRlbnRyeSwgZGVudHJ5KTsKIAogCS8qIFRoZSBkYWVtb24gbmV2ZXIgdHJpZ2dlcnMgYSBtb3VudC4gKi8KIAlpZiAoYXV0b2ZzNF9vel9tb2RlKHNiaSkpCkBAIC00MjgsOCArNDI1LDcgQEAKIAlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOwogCWludCBzdGF0dXM7CiAKLQlEUFJJTlRLKCJkZW50cnk9JXAgJS4qcyIsCi0JCWRlbnRyeSwgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlEUFJJTlRLKCJkZW50cnk9JXAgJXBkIiwgZGVudHJ5LCBkZW50cnkpOwogCiAJLyogVGhlIGRhZW1vbiBuZXZlciB3YWl0cy4gKi8KIAlpZiAoYXV0b2ZzNF9vel9tb2RlKHNiaSkpIHsKQEAgLTUwNCw3ICs1MDAsNyBAQAogCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vOwogCXN0cnVjdCBkZW50cnkgKmFjdGl2ZTsKIAotCURQUklOVEsoIm5hbWUgPSAlLipzIiwgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlEUFJJTlRLKCJuYW1lID0gJXBkIiwgZGVudHJ5KTsKIAogCS8qIEZpbGUgbmFtZSB0b28gbG9uZyB0byBleGlzdCAqLwogCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBOQU1FX01BWCkKQEAgLTU1OCw4ICs1NTQsNyBAQAogCXNpemVfdCBzaXplID0gc3RybGVuKHN5bW5hbWUpOwogCWNoYXIgKmNwOwogCi0JRFBSSU5USygiJXMgPC0gJS4qcyIsIHN5bW5hbWUsCi0JCWRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJRFBSSU5USygiJXMgPC0gJXBkIiwgc3ltbmFtZSwgZGVudHJ5KTsKIAogCWlmICghYXV0b2ZzNF9vel9tb2RlKHNiaSkpCiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtNjg3LDcgKzY4Miw3IEBACiAJLyogb25seSBjb25zaWRlciBwYXJlbnRzIGJlbG93IGRlbnRyeXMgaW4gdGhlIHJvb3QgKi8KIAlpZiAoSVNfUk9PVChwYXJlbnQtPmRfcGFyZW50KSkKIAkJcmV0dXJuOwotCWRfY2hpbGQgPSAmZGVudHJ5LT5kX3UuZF9jaGlsZDsKKwlkX2NoaWxkID0gJmRlbnRyeS0+ZF9jaGlsZDsKIAkvKiBTZXQgcGFyZW50IG1hbmFnZWQgaWYgaXQncyBiZWNvbWluZyBlbXB0eSAqLwogCWlmIChkX2NoaWxkLT5uZXh0ID09ICZwYXJlbnQtPmRfc3ViZGlycyAmJgogCSAgICBkX2NoaWxkLT5wcmV2ID09ICZwYXJlbnQtPmRfc3ViZGlycykKQEAgLTcwMSw4ICs2OTYsNyBAQAogCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CiAJc3RydWN0IGF1dG9mc19pbmZvICpwX2lubzsKIAkKLQlEUFJJTlRLKCJkZW50cnkgJXAsIHJlbW92aW5nICUuKnMiLAotCQlkZW50cnksIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJRFBSSU5USygiZGVudHJ5ICVwLCByZW1vdmluZyAlcGQiLCBkZW50cnksIGRlbnRyeSk7CiAKIAlpZiAoIWF1dG9mczRfb3pfbW9kZShzYmkpKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTc0NCw4ICs3MzgsNyBAQAogCWlmICghYXV0b2ZzNF9vel9tb2RlKHNiaSkpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JRFBSSU5USygiZGVudHJ5ICVwLCBjcmVhdGluZyAlLipzIiwKLQkJZGVudHJ5LCBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCURQUklOVEsoImRlbnRyeSAlcCwgY3JlYXRpbmcgJXBkIiwgZGVudHJ5LCBkZW50cnkpOwogCiAJQlVHX09OKCFpbm8pOwogCmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggNGNmNjFlYy4uYjk0ZDFjYyAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtMTcyLDggKzE3Miw4IEBACiAJY2hhciAqdXRmbmFtZTsKIAljb25zdCBjaGFyICpuYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKIAotCWJlZnNfZGVidWcoc2IsICItLS0+ICVzIG5hbWUgJXMgaW5vZGUgJWxkIiwgX19mdW5jX18sCi0JCSAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRpci0+aV9pbm8pOworCWJlZnNfZGVidWcoc2IsICItLS0+ICVzIG5hbWUgJXBkIGlub2RlICVsZCIsIF9fZnVuY19fLAorCQkgICBkZW50cnksIGRpci0+aV9pbm8pOwogCiAJLyogQ29udmVydCB0byBVVEYtOCAqLwogCWlmIChCRUZTX1NCKHNiKS0+bmxzKSB7CkBAIC0xOTEsOCArMTkxLDcgQEAKIAl9CiAKIAlpZiAocmV0ID09IEJFRlNfQlRfTk9UX0ZPVU5EKSB7Ci0JCWJlZnNfZGVidWcoc2IsICI8LS0tICVzICVzIG5vdCBmb3VuZCIsIF9fZnVuY19fLAotCQkJICAgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCWJlZnNfZGVidWcoc2IsICI8LS0tICVzICVwZCBub3QgZm91bmQiLCBfX2Z1bmNfXywgZGVudHJ5KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKIAl9IGVsc2UgaWYgKHJldCAhPSBCRUZTX09LIHx8IG9mZnNldCA9PSAwKSB7CkBAIC0yMjIsMTAgKzIyMSw5IEBACiAJc2l6ZV90IGtleXNpemU7CiAJdW5zaWduZWQgY2hhciBkX3R5cGU7CiAJY2hhciBrZXlidWZbQkVGU19OQU1FX0xFTiArIDFdOwotCWNvbnN0IGNoYXIgKmRpcm5hbWUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZTsKIAotCWJlZnNfZGVidWcoc2IsICItLS0+ICVzIG5hbWUgJXMsIGlub2RlICVsZCwgY3R4LT5wb3MgJWxsZCIsCi0JCSAgX19mdW5jX18sIGRpcm5hbWUsIGlub2RlLT5pX2lubywgY3R4LT5wb3MpOworCWJlZnNfZGVidWcoc2IsICItLS0+ICVzIG5hbWUgJXBELCBpbm9kZSAlbGQsIGN0eC0+cG9zICVsbGQiLAorCQkgIF9fZnVuY19fLCBmaWxlLCBpbm9kZS0+aV9pbm8sIGN0eC0+cG9zKTsKIAogbW9yZToKIAlyZXN1bHQgPSBiZWZzX2J0cmVlX3JlYWQoc2IsIGRzLCBjdHgtPnBvcywgQkVGU19OQU1FX0xFTiArIDEsCkBAIC0yMzMsOCArMjMxLDggQEAKIAogCWlmIChyZXN1bHQgPT0gQkVGU19FUlIpIHsKIAkJYmVmc19kZWJ1ZyhzYiwgIjwtLS0gJXMgRVJST1IiLCBfX2Z1bmNfXyk7Ci0JCWJlZnNfZXJyb3Ioc2IsICJJTyBlcnJvciByZWFkaW5nICVzIChpbm9kZSAlbHUpIiwKLQkJCSAgIGRpcm5hbWUsIGlub2RlLT5pX2lubyk7CisJCWJlZnNfZXJyb3Ioc2IsICJJTyBlcnJvciByZWFkaW5nICVwRCAoaW5vZGUgJWx1KSIsCisJCQkgICBmaWxlLCBpbm9kZS0+aV9pbm8pOwogCQlyZXR1cm4gLUVJTzsKIAogCX0gZWxzZSBpZiAocmVzdWx0ID09IEJFRlNfQlRfRU5EKSB7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfYW91dC5jIGIvZnMvYmluZm10X2FvdXQuYwppbmRleCA5MjlkZWMwLi40YzU1NjY4IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfYW91dC5jCisrKyBiL2ZzL2JpbmZtdF9hb3V0LmMKQEAgLTI5Miw4ICsyOTIsOCBAQAogCQlpZiAoKGZkX29mZnNldCAmIH5QQUdFX01BU0spICE9IDAgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQogCQl7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIAotCQkJICAgICAgICJmZF9vZmZzZXQgaXMgbm90IHBhZ2UgYWxpZ25lZC4gUGxlYXNlIGNvbnZlcnQgcHJvZ3JhbTogJXNcbiIsCi0JCQkgICAgICAgYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkJICAgICAgICJmZF9vZmZzZXQgaXMgbm90IHBhZ2UgYWxpZ25lZC4gUGxlYXNlIGNvbnZlcnQgcHJvZ3JhbTogJXBEXG4iLAorCQkJICAgICAgIGJwcm0tPmZpbGUpOwogCQl9CiAKIAkJaWYgKCFicHJtLT5maWxlLT5mX29wLT5tbWFwfHwoKGZkX29mZnNldCAmIH5QQUdFX01BU0spICE9IDApKSB7CkBAIC0zNzUsOCArMzc1LDggQEAKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKLQkJCSAgICAgICAiTl9UWFRPRkYgaXMgbm90IHBhZ2UgYWxpZ25lZC4gUGxlYXNlIGNvbnZlcnQgbGlicmFyeTogJXNcbiIsCi0JCQkgICAgICAgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkJICAgICAgICJOX1RYVE9GRiBpcyBub3QgcGFnZSBhbGlnbmVkLiBQbGVhc2UgY29udmVydCBsaWJyYXJ5OiAlcERcbiIsCisJCQkgICAgICAgZmlsZSk7CiAJCX0KIAkJdm1fYnJrKHN0YXJ0X2FkZHIsIGV4LmFfdGV4dCArIGV4LmFfZGF0YSArIGV4LmFfYnNzKTsKIAkJCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggZDhmYzA2MC4uM2E2MTc1ZiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtMTk5NCwxOCArMTk5NCw2IEBACiAJc2hkcjRleHRudW0tPnNoX2luZm8gPSBzZWdzOwogfQogCi1zdGF0aWMgc2l6ZV90IGVsZl9jb3JlX3ZtYV9kYXRhX3NpemUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnYXRlX3ZtYSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbW1fZmxhZ3MpCi17Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0Jc2l6ZV90IHNpemUgPSAwOwotCi0JZm9yICh2bWEgPSBmaXJzdF92bWEoY3VycmVudCwgZ2F0ZV92bWEpOyB2bWEgIT0gTlVMTDsKLQkgICAgIHZtYSA9IG5leHRfdm1hKHZtYSwgZ2F0ZV92bWEpKQotCQlzaXplICs9IHZtYV9kdW1wX3NpemUodm1hLCBtbV9mbGFncyk7Ci0JcmV0dXJuIHNpemU7Ci19Ci0KIC8qCiAgKiBBY3R1YWwgZHVtcGVyCiAgKgpAQCAtMjAxNyw3ICsyMDA1LDggQEAKIHsKIAlpbnQgaGFzX2R1bXBlZCA9IDA7CiAJbW1fc2VnbWVudF90IGZzOwotCWludCBzZWdzOworCWludCBzZWdzLCBpOworCXNpemVfdCB2bWFfZGF0YV9zaXplID0gMDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKmdhdGVfdm1hOwogCXN0cnVjdCBlbGZoZHIgKmVsZiA9IE5VTEw7CiAJbG9mZl90IG9mZnNldCA9IDAsIGRhdGFvZmY7CkBAIC0yMDI2LDYgKzIwMTUsNyBAQAogCXN0cnVjdCBlbGZfc2hkciAqc2hkcjRleHRudW0gPSBOVUxMOwogCUVsZl9IYWxmIGVfcGhudW07CiAJZWxmX2FkZHJfdCBlX3Nob2ZmOworCWVsZl9hZGRyX3QgKnZtYV9maWxlc3ogPSBOVUxMOwogCiAJLyoKIAkgKiBXZSBubyBsb25nZXIgc3RvcCBhbGwgVk0gb3BlcmF0aW9ucy4KQEAgLTIwOTMsNyArMjA4MywyMCBAQAogCiAJZGF0YW9mZiA9IG9mZnNldCA9IHJvdW5kdXAob2Zmc2V0LCBFTEZfRVhFQ19QQUdFU0laRSk7CiAKLQlvZmZzZXQgKz0gZWxmX2NvcmVfdm1hX2RhdGFfc2l6ZShnYXRlX3ZtYSwgY3BybS0+bW1fZmxhZ3MpOworCXZtYV9maWxlc3ogPSBrbWFsbG9jX2FycmF5KHNlZ3MgLSAxLCBzaXplb2YoKnZtYV9maWxlc3opLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZtYV9maWxlc3opCisJCWdvdG8gZW5kX2NvcmVkdW1wOworCisJZm9yIChpID0gMCwgdm1hID0gZmlyc3Rfdm1hKGN1cnJlbnQsIGdhdGVfdm1hKTsgdm1hICE9IE5VTEw7CisJCQl2bWEgPSBuZXh0X3ZtYSh2bWEsIGdhdGVfdm1hKSkgeworCQl1bnNpZ25lZCBsb25nIGR1bXBfc2l6ZTsKKworCQlkdW1wX3NpemUgPSB2bWFfZHVtcF9zaXplKHZtYSwgY3BybS0+bW1fZmxhZ3MpOworCQl2bWFfZmlsZXN6W2krK10gPSBkdW1wX3NpemU7CisJCXZtYV9kYXRhX3NpemUgKz0gZHVtcF9zaXplOworCX0KKworCW9mZnNldCArPSB2bWFfZGF0YV9zaXplOwogCW9mZnNldCArPSBlbGZfY29yZV9leHRyYV9kYXRhX3NpemUoKTsKIAllX3Nob2ZmID0gb2Zmc2V0OwogCkBAIC0yMTEzLDcgKzIxMTYsNyBAQAogCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAogCS8qIFdyaXRlIHByb2dyYW0gaGVhZGVycyBmb3Igc2VnbWVudHMgZHVtcCAqLwotCWZvciAodm1hID0gZmlyc3Rfdm1hKGN1cnJlbnQsIGdhdGVfdm1hKTsgdm1hICE9IE5VTEw7CisJZm9yIChpID0gMCwgdm1hID0gZmlyc3Rfdm1hKGN1cnJlbnQsIGdhdGVfdm1hKTsgdm1hICE9IE5VTEw7CiAJCQl2bWEgPSBuZXh0X3ZtYSh2bWEsIGdhdGVfdm1hKSkgewogCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkcjsKIApAQCAtMjEyMSw3ICsyMTI0LDcgQEAKIAkJcGhkci5wX29mZnNldCA9IG9mZnNldDsKIAkJcGhkci5wX3ZhZGRyID0gdm1hLT52bV9zdGFydDsKIAkJcGhkci5wX3BhZGRyID0gMDsKLQkJcGhkci5wX2ZpbGVzeiA9IHZtYV9kdW1wX3NpemUodm1hLCBjcHJtLT5tbV9mbGFncyk7CisJCXBoZHIucF9maWxlc3ogPSB2bWFfZmlsZXN6W2krK107CiAJCXBoZHIucF9tZW1zeiA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKIAkJb2Zmc2V0ICs9IHBoZHIucF9maWxlc3o7CiAJCXBoZHIucF9mbGFncyA9IHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEID8gUEZfUiA6IDA7CkBAIC0yMTQ5LDEyICsyMTUyLDEyIEBACiAJaWYgKCFkdW1wX3NraXAoY3BybSwgZGF0YW9mZiAtIGNwcm0tPndyaXR0ZW4pKQogCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAotCWZvciAodm1hID0gZmlyc3Rfdm1hKGN1cnJlbnQsIGdhdGVfdm1hKTsgdm1hICE9IE5VTEw7CisJZm9yIChpID0gMCwgdm1hID0gZmlyc3Rfdm1hKGN1cnJlbnQsIGdhdGVfdm1hKTsgdm1hICE9IE5VTEw7CiAJCQl2bWEgPSBuZXh0X3ZtYSh2bWEsIGdhdGVfdm1hKSkgewogCQl1bnNpZ25lZCBsb25nIGFkZHI7CiAJCXVuc2lnbmVkIGxvbmcgZW5kOwogCi0JCWVuZCA9IHZtYS0+dm1fc3RhcnQgKyB2bWFfZHVtcF9zaXplKHZtYSwgY3BybS0+bW1fZmxhZ3MpOworCQllbmQgPSB2bWEtPnZtX3N0YXJ0ICsgdm1hX2ZpbGVzeltpKytdOwogCiAJCWZvciAoYWRkciA9IHZtYS0+dm1fc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTIxODcsNiArMjE5MCw3IEBACiBjbGVhbnVwOgogCWZyZWVfbm90ZV9pbmZvKCZpbmZvKTsKIAlrZnJlZShzaGRyNGV4dG51bSk7CisJa2ZyZWUodm1hX2ZpbGVzeik7CiAJa2ZyZWUocGhkcjRub3RlKTsKIAlrZnJlZShlbGYpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmMKaW5kZXggZmQ4YmViOS4uNzA3ODllMSAxMDA2NDQKLS0tIGEvZnMvYmluZm10X21pc2MuYworKysgYi9mcy9iaW5mbXRfbWlzYy5jCkBAIC0xLDIxICsxLDE0IEBACiAvKgotICogIGJpbmZtdF9taXNjLmMKKyAqIGJpbmZtdF9taXNjLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk3IFJpY2hhcmQgR8O8bnRoZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NyBSaWNoYXJkIEfDvG50aGVyCiAgKgotICogIGJpbmZtdF9taXNjIGRldGVjdHMgYmluYXJpZXMgdmlhIGEgbWFnaWMgb3IgZmlsZW5hbWUgZXh0ZW5zaW9uIGFuZCBpbnZva2VzCi0gKiAgYSBzcGVjaWZpZWQgd3JhcHBlci4gVGhpcyBzaG91bGQgb2Jzb2xldGUgYmluZm10X2phdmEsIGJpbmZtdF9lbTg2IGFuZAotICogIGJpbmZtdF9tei4KLSAqCi0gKiAgMTk5Ny0wNC0yNSBmaXJzdCB2ZXJzaW9uCi0gKiAgWy4uLl0KLSAqICAxOTk3LTA1LTE5IGNsZWFudXAKLSAqICAxOTk3LTA2LTI2IGhwYTogcGFzcyB0aGUgcmVhbCBmaWxlbmFtZSByYXRoZXIgdGhhbiBhcmd2WzBdCi0gKiAgMTk5Ny0wNi0zMCBtaW5vciBjbGVhbnVwCi0gKiAgMTk5Ny0wOC0wOSByZW1vdmVkIGV4dGVuc2lvbiBzdHJpcHBpbmcsIGxvY2tpbmcgY2xlYW51cAotICogIDIwMDEtMDItMjggQVY6IHJld3JpdHRlbiBpbnRvIHNvbWV0aGluZyB0aGF0IHJlc2VtYmxlcyBDLiBPcmlnaW5hbCBkaWRuJ3QuCisgKiBiaW5mbXRfbWlzYyBkZXRlY3RzIGJpbmFyaWVzIHZpYSBhIG1hZ2ljIG9yIGZpbGVuYW1lIGV4dGVuc2lvbiBhbmQgaW52b2tlcworICogYSBzcGVjaWZpZWQgd3JhcHBlci4gU2VlIERvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0IGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0zMCw4ICsyMywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaWZkZWYgREVCVUcKKyMgZGVmaW5lIFVTRV9ERUJVRyAxCisjZWxzZQorIyBkZWZpbmUgVVNFX0RFQlVHIDAKKyNlbmRpZgogCiBlbnVtIHsKIAlWRVJCT1NFX1NUQVRVUyA9IDEgLyogbWFrZSBpdCB6ZXJvIHRvIHNhdmUgNDAwIGJ5dGVzIGtlcm5lbCBtZW1vcnkgKi8KQEAgLTQxLDkgKzM5LDkgQEAKIHN0YXRpYyBpbnQgZW5hYmxlZCA9IDE7CiAKIGVudW0ge0VuYWJsZWQsIE1hZ2ljfTsKLSNkZWZpbmUgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAgKDE8PDMxKQotI2RlZmluZSBNSVNDX0ZNVF9PUEVOX0JJTkFSWSAoMTw8MzApCi0jZGVmaW5lIE1JU0NfRk1UX0NSRURFTlRJQUxTICgxPDwyOSkKKyNkZWZpbmUgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAgKDEgPDwgMzEpCisjZGVmaW5lIE1JU0NfRk1UX09QRU5fQklOQVJZICgxIDw8IDMwKQorI2RlZmluZSBNSVNDX0ZNVF9DUkVERU5USUFMUyAoMSA8PCAyOSkKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTg3LDIwICs4NSwyNCBAQAogCWNoYXIgKnAgPSBzdHJyY2hyKGJwcm0tPmludGVycCwgJy4nKTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsOwogCisJLyogV2FsayBhbGwgdGhlIHJlZ2lzdGVyZWQgaGFuZGxlcnMuICovCiAJbGlzdF9mb3JfZWFjaChsLCAmZW50cmllcykgewogCQlOb2RlICplID0gbGlzdF9lbnRyeShsLCBOb2RlLCBsaXN0KTsKIAkJY2hhciAqczsKIAkJaW50IGo7CiAKKwkJLyogTWFrZSBzdXJlIHRoaXMgb25lIGlzIGN1cnJlbnRseSBlbmFibGVkLiAqLwogCQlpZiAoIXRlc3RfYml0KEVuYWJsZWQsICZlLT5mbGFncykpCiAJCQljb250aW51ZTsKIAorCQkvKiBEbyBtYXRjaGluZyBiYXNlZCBvbiBleHRlbnNpb24gaWYgYXBwbGljYWJsZS4gKi8KIAkJaWYgKCF0ZXN0X2JpdChNYWdpYywgJmUtPmZsYWdzKSkgewogCQkJaWYgKHAgJiYgIXN0cmNtcChlLT5tYWdpYywgcCArIDEpKQogCQkJCXJldHVybiBlOwogCQkJY29udGludWU7CiAJCX0KIAorCQkvKiBEbyBtYXRjaGluZyBiYXNlZCBvbiBtYWdpYyAmIG1hc2suICovCiAJCXMgPSBicHJtLT5idWYgKyBlLT5vZmZzZXQ7CiAJCWlmIChlLT5tYXNrKSB7CiAJCQlmb3IgKGogPSAwOyBqIDwgZS0+c2l6ZTsgaisrKQpAQCAtMTIzLDcgKzEyNSw3IEBACiBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlOb2RlICpmbXQ7Ci0Jc3RydWN0IGZpbGUgKiBpbnRlcnBfZmlsZSA9IE5VTEw7CisJc3RydWN0IGZpbGUgKmludGVycF9maWxlID0gTlVMTDsKIAljaGFyIGluYW1lW0JJTlBSTV9CVUZfU0laRV07CiAJY29uc3QgY2hhciAqaW5hbWVfYWRkciA9IGluYW1lOwogCWludCByZXR2YWw7CkBAIC0xMzEsNyArMTMzLDcgQEAKIAogCXJldHZhbCA9IC1FTk9FWEVDOwogCWlmICghZW5hYmxlZCkKLQkJZ290byBfcmV0OworCQlnb3RvIHJldDsKIAogCS8qIHRvIGtlZXAgbG9ja2luZyB0aW1lIGxvdywgd2UgY29weSB0aGUgaW50ZXJwcmV0ZXIgc3RyaW5nICovCiAJcmVhZF9sb2NrKCZlbnRyaWVzX2xvY2spOwpAQCAtMTQwLDI1ICsxNDIsMjYgQEAKIAkJc3RybGNweShpbmFtZSwgZm10LT5pbnRlcnByZXRlciwgQklOUFJNX0JVRl9TSVpFKTsKIAlyZWFkX3VubG9jaygmZW50cmllc19sb2NrKTsKIAlpZiAoIWZtdCkKLQkJZ290byBfcmV0OworCQlnb3RvIHJldDsKIAogCWlmICghKGZtdC0+ZmxhZ3MgJiBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCkpIHsKIAkJcmV0dmFsID0gcmVtb3ZlX2FyZ196ZXJvKGJwcm0pOwogCQlpZiAocmV0dmFsKQotCQkJZ290byBfcmV0OworCQkJZ290byByZXQ7CiAJfQogCiAJaWYgKGZtdC0+ZmxhZ3MgJiBNSVNDX0ZNVF9PUEVOX0JJTkFSWSkgewogCiAJCS8qIGlmIHRoZSBiaW5hcnkgc2hvdWxkIGJlIG9wZW5lZCBvbiBiZWhhbGYgb2YgdGhlCiAJCSAqIGludGVycHJldGVyIHRoYW4ga2VlcCBpdCBvcGVuIGFuZCBhc3NpZ24gZGVzY3JpcHRvcgotCQkgKiB0byBpdCAqLwotIAkJZmRfYmluYXJ5ID0gZ2V0X3VudXNlZF9mZCgpOwotIAkJaWYgKGZkX2JpbmFyeSA8IDApIHsKLSAJCQlyZXR2YWwgPSBmZF9iaW5hcnk7Ci0gCQkJZ290byBfcmV0OwotIAkJfQotIAkJZmRfaW5zdGFsbChmZF9iaW5hcnksIGJwcm0tPmZpbGUpOworCQkgKiB0byBpdAorCQkgKi8KKwkJZmRfYmluYXJ5ID0gZ2V0X3VudXNlZF9mZF9mbGFncygwKTsKKwkJaWYgKGZkX2JpbmFyeSA8IDApIHsKKwkJCXJldHZhbCA9IGZkX2JpbmFyeTsKKwkJCWdvdG8gcmV0OworCQl9CisJCWZkX2luc3RhbGwoZmRfYmluYXJ5LCBicHJtLT5maWxlKTsKIAogCQkvKiBpZiB0aGUgYmluYXJ5IGlzIG5vdCByZWFkYWJsZSB0aGFuIGVuZm9yY2UgbW0tPmR1bXBhYmxlPTAKIAkJICAgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZXJwcmV0ZXIncyBwZXJtaXNzaW9ucyAqLwpAQCAtMTcxLDMyICsxNzQsMzIgQEAKIAkJYnBybS0+aW50ZXJwX2ZsYWdzIHw9IEJJTlBSTV9GTEFHU19FWEVDRkQ7CiAJCWJwcm0tPmludGVycF9kYXRhID0gZmRfYmluYXJ5OwogCi0gCX0gZWxzZSB7Ci0gCQlhbGxvd193cml0ZV9hY2Nlc3MoYnBybS0+ZmlsZSk7Ci0gCQlmcHV0KGJwcm0tPmZpbGUpOwotIAkJYnBybS0+ZmlsZSA9IE5VTEw7Ci0gCX0KKwl9IGVsc2UgeworCQlhbGxvd193cml0ZV9hY2Nlc3MoYnBybS0+ZmlsZSk7CisJCWZwdXQoYnBybS0+ZmlsZSk7CisJCWJwcm0tPmZpbGUgPSBOVUxMOworCX0KIAkvKiBtYWtlIGFyZ3ZbMV0gYmUgdGhlIHBhdGggdG8gdGhlIGJpbmFyeSAqLwotCXJldHZhbCA9IGNvcHlfc3RyaW5nc19rZXJuZWwgKDEsICZicHJtLT5pbnRlcnAsIGJwcm0pOworCXJldHZhbCA9IGNvcHlfc3RyaW5nc19rZXJuZWwoMSwgJmJwcm0tPmludGVycCwgYnBybSk7CiAJaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gX2Vycm9yOworCQlnb3RvIGVycm9yOwogCWJwcm0tPmFyZ2MrKzsKIAogCS8qIGFkZCB0aGUgaW50ZXJwIGFzIGFyZ3ZbMF0gKi8KLQlyZXR2YWwgPSBjb3B5X3N0cmluZ3Nfa2VybmVsICgxLCAmaW5hbWVfYWRkciwgYnBybSk7CisJcmV0dmFsID0gY29weV9zdHJpbmdzX2tlcm5lbCgxLCAmaW5hbWVfYWRkciwgYnBybSk7CiAJaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gX2Vycm9yOwotCWJwcm0tPmFyZ2MgKys7CisJCWdvdG8gZXJyb3I7CisJYnBybS0+YXJnYysrOwogCiAJLyogVXBkYXRlIGludGVycCBpbiBjYXNlIGJpbmZtdF9zY3JpcHQgbmVlZHMgaXQuICovCiAJcmV0dmFsID0gYnBybV9jaGFuZ2VfaW50ZXJwKGluYW1lLCBicHJtKTsKIAlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBfZXJyb3I7CisJCWdvdG8gZXJyb3I7CiAKLQlpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyAoaW5hbWUpOwotCXJldHZhbCA9IFBUUl9FUlIgKGludGVycF9maWxlKTsKLQlpZiAoSVNfRVJSIChpbnRlcnBfZmlsZSkpCi0JCWdvdG8gX2Vycm9yOworCWludGVycF9maWxlID0gb3Blbl9leGVjKGluYW1lKTsKKwlyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTsKKwlpZiAoSVNfRVJSKGludGVycF9maWxlKSkKKwkJZ290byBlcnJvcjsKIAogCWJwcm0tPmZpbGUgPSBpbnRlcnBfZmlsZTsKIAlpZiAoZm10LT5mbGFncyAmIE1JU0NfRk1UX0NSRURFTlRJQUxTKSB7CkBAIC0yMDcsMjMgKzIxMCwyMyBAQAogCQltZW1zZXQoYnBybS0+YnVmLCAwLCBCSU5QUk1fQlVGX1NJWkUpOwogCQlyZXR2YWwgPSBrZXJuZWxfcmVhZChicHJtLT5maWxlLCAwLCBicHJtLT5idWYsIEJJTlBSTV9CVUZfU0laRSk7CiAJfSBlbHNlCi0JCXJldHZhbCA9IHByZXBhcmVfYmlucHJtIChicHJtKTsKKwkJcmV0dmFsID0gcHJlcGFyZV9iaW5wcm0oYnBybSk7CiAKIAlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBfZXJyb3I7CisJCWdvdG8gZXJyb3I7CiAKIAlyZXR2YWwgPSBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoYnBybSk7CiAJaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gX2Vycm9yOworCQlnb3RvIGVycm9yOwogCi1fcmV0OgorcmV0OgogCXJldHVybiByZXR2YWw7Ci1fZXJyb3I6CitlcnJvcjoKIAlpZiAoZmRfYmluYXJ5ID4gMCkKIAkJc3lzX2Nsb3NlKGZkX2JpbmFyeSk7CiAJYnBybS0+aW50ZXJwX2ZsYWdzID0gMDsKIAlicHJtLT5pbnRlcnBfZGF0YSA9IDA7Ci0JZ290byBfcmV0OworCWdvdG8gcmV0OwogfQogCiAvKiBDb21tYW5kIHBhcnNlcnMgKi8KQEAgLTI1MCwzNiArMjUzLDQwIEBACiAJcmV0dXJuIHM7CiB9CiAKLXN0YXRpYyBjaGFyICogY2hlY2tfc3BlY2lhbF9mbGFncyAoY2hhciAqIHNmcywgTm9kZSAqIGUpCitzdGF0aWMgY2hhciAqY2hlY2tfc3BlY2lhbF9mbGFncyhjaGFyICpzZnMsIE5vZGUgKmUpCiB7Ci0JY2hhciAqIHAgPSBzZnM7CisJY2hhciAqcCA9IHNmczsKIAlpbnQgY29udCA9IDE7CiAKIAkvKiBzcGVjaWFsIGZsYWdzICovCiAJd2hpbGUgKGNvbnQpIHsKIAkJc3dpdGNoICgqcCkgewotCQkJY2FzZSAnUCc6Ci0JCQkJcCsrOwotCQkJCWUtPmZsYWdzIHw9IE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnTyc6Ci0JCQkJcCsrOwotCQkJCWUtPmZsYWdzIHw9IE1JU0NfRk1UX09QRU5fQklOQVJZOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnQyc6Ci0JCQkJcCsrOwotCQkJCS8qIHRoaXMgZmxhZ3MgYWxzbyBpbXBsaWVzIHRoZQotCQkJCSAgIG9wZW4tYmluYXJ5IGZsYWcgKi8KLQkJCQllLT5mbGFncyB8PSAoTUlTQ19GTVRfQ1JFREVOVElBTFMgfAotCQkJCQkJTUlTQ19GTVRfT1BFTl9CSU5BUlkpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQljb250ID0gMDsKKwkJY2FzZSAnUCc6CisJCQlwcl9kZWJ1ZygicmVnaXN0ZXI6IGZsYWc6IFAgKHByZXNlcnZlIGFyZ3YwKVxuIik7CisJCQlwKys7CisJCQllLT5mbGFncyB8PSBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMDsKKwkJCWJyZWFrOworCQljYXNlICdPJzoKKwkJCXByX2RlYnVnKCJyZWdpc3RlcjogZmxhZzogTyAob3BlbiBiaW5hcnkpXG4iKTsKKwkJCXArKzsKKwkJCWUtPmZsYWdzIHw9IE1JU0NfRk1UX09QRU5fQklOQVJZOworCQkJYnJlYWs7CisJCWNhc2UgJ0MnOgorCQkJcHJfZGVidWcoInJlZ2lzdGVyOiBmbGFnOiBDIChwcmVzZXJ2ZSBjcmVkcylcbiIpOworCQkJcCsrOworCQkJLyogdGhpcyBmbGFncyBhbHNvIGltcGxpZXMgdGhlCisJCQkgICBvcGVuLWJpbmFyeSBmbGFnICovCisJCQllLT5mbGFncyB8PSAoTUlTQ19GTVRfQ1JFREVOVElBTFMgfAorCQkJCQlNSVNDX0ZNVF9PUEVOX0JJTkFSWSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbnQgPSAwOwogCQl9CiAJfQogCiAJcmV0dXJuIHA7CiB9CisKIC8qCiAgKiBUaGlzIHJlZ2lzdGVycyBhIG5ldyBiaW5hcnkgZm9ybWF0LCBpdCByZWNvZ25pc2VzIHRoZSBzeW50YXgKICAqICc6bmFtZTp0eXBlOm9mZnNldDptYWdpYzptYXNrOmludGVycHJldGVyOmZsYWdzJwpAQCAtMjkyLDYgKzI5OSw4IEBACiAJY2hhciAqYnVmLCAqcDsKIAljaGFyIGRlbDsKIAorCXByX2RlYnVnKCJyZWdpc3RlcjogcmVjZWl2ZWQgJXp1IGJ5dGVzXG4iLCBjb3VudCk7CisKIAkvKiBzb21lIHNhbml0eSBjaGVja3MgKi8KIAllcnIgPSAtRUlOVkFMOwogCWlmICgoY291bnQgPCAxMSkgfHwgKGNvdW50ID4gTUFYX1JFR0lTVEVSX0xFTkdUSCkpCkBAIC0yOTksNyArMzA4LDcgQEAKIAogCWVyciA9IC1FTk9NRU07CiAJbWVtc2l6ZSA9IHNpemVvZihOb2RlKSArIGNvdW50ICsgODsKLQllID0ga21hbGxvYyhtZW1zaXplLCBHRlBfVVNFUik7CisJZSA9IGttYWxsb2MobWVtc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlKQogCQlnb3RvIG91dDsKIApAQCAtMzA3LDk4ICszMTYsMTc1IEBACiAKIAltZW1zZXQoZSwgMCwgc2l6ZW9mKE5vZGUpKTsKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGNvdW50KSkKLQkJZ290byBFZmF1bHQ7CisJCWdvdG8gZWZhdWx0OwogCiAJZGVsID0gKnArKzsJLyogZGVsaW1ldGVyICovCiAKLQltZW1zZXQoYnVmK2NvdW50LCBkZWwsIDgpOworCXByX2RlYnVnKCJyZWdpc3RlcjogZGVsaW06ICUjeCB7JWN9XG4iLCBkZWwsIGRlbCk7CiAKKwkvKiBQYWQgdGhlIGJ1ZmZlciB3aXRoIHRoZSBkZWxpbSB0byBzaW1wbGlmeSBwYXJzaW5nIGJlbG93LiAqLworCW1lbXNldChidWYgKyBjb3VudCwgZGVsLCA4KTsKKworCS8qIFBhcnNlIHRoZSAnbmFtZScgZmllbGQuICovCiAJZS0+bmFtZSA9IHA7CiAJcCA9IHN0cmNocihwLCBkZWwpOwogCWlmICghcCkKLQkJZ290byBFaW52YWw7CisJCWdvdG8gZWludmFsOwogCSpwKysgPSAnXDAnOwogCWlmICghZS0+bmFtZVswXSB8fAogCSAgICAhc3RyY21wKGUtPm5hbWUsICIuIikgfHwKIAkgICAgIXN0cmNtcChlLT5uYW1lLCAiLi4iKSB8fAogCSAgICBzdHJjaHIoZS0+bmFtZSwgJy8nKSkKLQkJZ290byBFaW52YWw7CisJCWdvdG8gZWludmFsOworCisJcHJfZGVidWcoInJlZ2lzdGVyOiBuYW1lOiB7JXN9XG4iLCBlLT5uYW1lKTsKKworCS8qIFBhcnNlIHRoZSAndHlwZScgZmllbGQuICovCiAJc3dpdGNoICgqcCsrKSB7Ci0JCWNhc2UgJ0UnOiBlLT5mbGFncyA9IDE8PEVuYWJsZWQ7IGJyZWFrOwotCQljYXNlICdNJzogZS0+ZmxhZ3MgPSAoMTw8RW5hYmxlZCkgfCAoMTw8TWFnaWMpOyBicmVhazsKLQkJZGVmYXVsdDogZ290byBFaW52YWw7CisJY2FzZSAnRSc6CisJCXByX2RlYnVnKCJyZWdpc3RlcjogdHlwZTogRSAoZXh0ZW5zaW9uKVxuIik7CisJCWUtPmZsYWdzID0gMSA8PCBFbmFibGVkOworCQlicmVhazsKKwljYXNlICdNJzoKKwkJcHJfZGVidWcoInJlZ2lzdGVyOiB0eXBlOiBNIChtYWdpYylcbiIpOworCQllLT5mbGFncyA9ICgxIDw8IEVuYWJsZWQpIHwgKDEgPDwgTWFnaWMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGVpbnZhbDsKIAl9CiAJaWYgKCpwKysgIT0gZGVsKQotCQlnb3RvIEVpbnZhbDsKKwkJZ290byBlaW52YWw7CisKIAlpZiAodGVzdF9iaXQoTWFnaWMsICZlLT5mbGFncykpIHsKLQkJY2hhciAqcyA9IHN0cmNocihwLCBkZWwpOworCQkvKiBIYW5kbGUgdGhlICdNJyAobWFnaWMpIGZvcm1hdC4gKi8KKwkJY2hhciAqczsKKworCQkvKiBQYXJzZSB0aGUgJ29mZnNldCcgZmllbGQuICovCisJCXMgPSBzdHJjaHIocCwgZGVsKTsKIAkJaWYgKCFzKQotCQkJZ290byBFaW52YWw7CisJCQlnb3RvIGVpbnZhbDsKIAkJKnMrKyA9ICdcMCc7CiAJCWUtPm9mZnNldCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAxMCk7CiAJCWlmICgqcCsrKQotCQkJZ290byBFaW52YWw7CisJCQlnb3RvIGVpbnZhbDsKKwkJcHJfZGVidWcoInJlZ2lzdGVyOiBvZmZzZXQ6ICUjeFxuIiwgZS0+b2Zmc2V0KTsKKworCQkvKiBQYXJzZSB0aGUgJ21hZ2ljJyBmaWVsZC4gKi8KIAkJZS0+bWFnaWMgPSBwOwogCQlwID0gc2NhbmFyZyhwLCBkZWwpOwogCQlpZiAoIXApCi0JCQlnb3RvIEVpbnZhbDsKKwkJCWdvdG8gZWludmFsOwogCQlwWy0xXSA9ICdcMCc7Ci0JCWlmICghZS0+bWFnaWNbMF0pCi0JCQlnb3RvIEVpbnZhbDsKKwkJaWYgKHAgPT0gZS0+bWFnaWMpCisJCQlnb3RvIGVpbnZhbDsKKwkJaWYgKFVTRV9ERUJVRykKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKAorCQkJCUtCVUlMRF9NT0ROQU1FICI6IHJlZ2lzdGVyOiBtYWdpY1tyYXddOiAiLAorCQkJCURVTVBfUFJFRklYX05PTkUsIGUtPm1hZ2ljLCBwIC0gZS0+bWFnaWMpOworCisJCS8qIFBhcnNlIHRoZSAnbWFzaycgZmllbGQuICovCiAJCWUtPm1hc2sgPSBwOwogCQlwID0gc2NhbmFyZyhwLCBkZWwpOwogCQlpZiAoIXApCi0JCQlnb3RvIEVpbnZhbDsKKwkJCWdvdG8gZWludmFsOwogCQlwWy0xXSA9ICdcMCc7Ci0JCWlmICghZS0+bWFza1swXSkKKwkJaWYgKHAgPT0gZS0+bWFzaykgewogCQkJZS0+bWFzayA9IE5VTEw7CisJCQlwcl9kZWJ1ZygicmVnaXN0ZXI6ICBtYXNrW3Jhd106IG5vbmVcbiIpOworCQl9IGVsc2UgaWYgKFVTRV9ERUJVRykKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKAorCQkJCUtCVUlMRF9NT0ROQU1FICI6IHJlZ2lzdGVyOiAgbWFza1tyYXddOiAiLAorCQkJCURVTVBfUFJFRklYX05PTkUsIGUtPm1hc2ssIHAgLSBlLT5tYXNrKTsKKworCQkvKgorCQkgKiBEZWNvZGUgdGhlIG1hZ2ljICYgbWFzayBmaWVsZHMuCisJCSAqIE5vdGU6IHdoaWxlIHdlIG1pZ2h0IGhhdmUgYWNjZXB0ZWQgZW1iZWRkZWQgTlVMIGJ5dGVzIGZyb20KKwkJICogYWJvdmUsIHRoZSB1bmVzY2FwZSBoZWxwZXJzIGhlcmUgd2lsbCBzdG9wIGF0IHRoZSBmaXJzdCBvbmUKKwkJICogaXQgZW5jb3VudGVycy4KKwkJICovCiAJCWUtPnNpemUgPSBzdHJpbmdfdW5lc2NhcGVfaW5wbGFjZShlLT5tYWdpYywgVU5FU0NBUEVfSEVYKTsKIAkJaWYgKGUtPm1hc2sgJiYKIAkJICAgIHN0cmluZ191bmVzY2FwZV9pbnBsYWNlKGUtPm1hc2ssIFVORVNDQVBFX0hFWCkgIT0gZS0+c2l6ZSkKLQkJCWdvdG8gRWludmFsOworCQkJZ290byBlaW52YWw7CiAJCWlmIChlLT5zaXplICsgZS0+b2Zmc2V0ID4gQklOUFJNX0JVRl9TSVpFKQotCQkJZ290byBFaW52YWw7CisJCQlnb3RvIGVpbnZhbDsKKwkJcHJfZGVidWcoInJlZ2lzdGVyOiBtYWdpYy9tYXNrIGxlbmd0aDogJWlcbiIsIGUtPnNpemUpOworCQlpZiAoVVNFX0RFQlVHKSB7CisJCQlwcmludF9oZXhfZHVtcF9ieXRlcygKKwkJCQlLQlVJTERfTU9ETkFNRSAiOiByZWdpc3RlcjogbWFnaWNbZGVjb2RlZF06ICIsCisJCQkJRFVNUF9QUkVGSVhfTk9ORSwgZS0+bWFnaWMsIGUtPnNpemUpOworCisJCQlpZiAoZS0+bWFzaykgeworCQkJCWludCBpOworCQkJCWNoYXIgKm1hc2tlZCA9IGttYWxsb2MoZS0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwkJCQlwcmludF9oZXhfZHVtcF9ieXRlcygKKwkJCQkJS0JVSUxEX01PRE5BTUUgIjogcmVnaXN0ZXI6ICBtYXNrW2RlY29kZWRdOiAiLAorCQkJCQlEVU1QX1BSRUZJWF9OT05FLCBlLT5tYXNrLCBlLT5zaXplKTsKKworCQkJCWlmIChtYXNrZWQpIHsKKwkJCQkJZm9yIChpID0gMDsgaSA8IGUtPnNpemU7ICsraSkKKwkJCQkJCW1hc2tlZFtpXSA9IGUtPm1hZ2ljW2ldICYgZS0+bWFza1tpXTsKKwkJCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoCisJCQkJCQlLQlVJTERfTU9ETkFNRSAiOiByZWdpc3RlcjogIG1hZ2ljW21hc2tlZF06ICIsCisJCQkJCQlEVU1QX1BSRUZJWF9OT05FLCBtYXNrZWQsIGUtPnNpemUpOworCisJCQkJCWtmcmVlKG1hc2tlZCk7CisJCQkJfQorCQkJfQorCQl9CiAJfSBlbHNlIHsKKwkJLyogSGFuZGxlIHRoZSAnRScgKGV4dGVuc2lvbikgZm9ybWF0LiAqLworCisJCS8qIFNraXAgdGhlICdvZmZzZXQnIGZpZWxkLiAqLwogCQlwID0gc3RyY2hyKHAsIGRlbCk7CiAJCWlmICghcCkKLQkJCWdvdG8gRWludmFsOworCQkJZ290byBlaW52YWw7CiAJCSpwKysgPSAnXDAnOworCisJCS8qIFBhcnNlIHRoZSAnbWFnaWMnIGZpZWxkLiAqLwogCQllLT5tYWdpYyA9IHA7CiAJCXAgPSBzdHJjaHIocCwgZGVsKTsKIAkJaWYgKCFwKQotCQkJZ290byBFaW52YWw7CisJCQlnb3RvIGVpbnZhbDsKIAkJKnArKyA9ICdcMCc7CiAJCWlmICghZS0+bWFnaWNbMF0gfHwgc3RyY2hyKGUtPm1hZ2ljLCAnLycpKQotCQkJZ290byBFaW52YWw7CisJCQlnb3RvIGVpbnZhbDsKKwkJcHJfZGVidWcoInJlZ2lzdGVyOiBleHRlbnNpb246IHslc31cbiIsIGUtPm1hZ2ljKTsKKworCQkvKiBTa2lwIHRoZSAnbWFzaycgZmllbGQuICovCiAJCXAgPSBzdHJjaHIocCwgZGVsKTsKIAkJaWYgKCFwKQotCQkJZ290byBFaW52YWw7CisJCQlnb3RvIGVpbnZhbDsKIAkJKnArKyA9ICdcMCc7CiAJfQorCisJLyogUGFyc2UgdGhlICdpbnRlcnByZXRlcicgZmllbGQuICovCiAJZS0+aW50ZXJwcmV0ZXIgPSBwOwogCXAgPSBzdHJjaHIocCwgZGVsKTsKIAlpZiAoIXApCi0JCWdvdG8gRWludmFsOworCQlnb3RvIGVpbnZhbDsKIAkqcCsrID0gJ1wwJzsKIAlpZiAoIWUtPmludGVycHJldGVyWzBdKQotCQlnb3RvIEVpbnZhbDsKKwkJZ290byBlaW52YWw7CisJcHJfZGVidWcoInJlZ2lzdGVyOiBpbnRlcnByZXRlcjogeyVzfVxuIiwgZS0+aW50ZXJwcmV0ZXIpOwogCi0KLQlwID0gY2hlY2tfc3BlY2lhbF9mbGFncyAocCwgZSk7Ci0KKwkvKiBQYXJzZSB0aGUgJ2ZsYWdzJyBmaWVsZC4gKi8KKwlwID0gY2hlY2tfc3BlY2lhbF9mbGFncyhwLCBlKTsKIAlpZiAoKnAgPT0gJ1xuJykKIAkJcCsrOwogCWlmIChwICE9IGJ1ZiArIGNvdW50KQotCQlnb3RvIEVpbnZhbDsKKwkJZ290byBlaW52YWw7CisKIAlyZXR1cm4gZTsKIAogb3V0OgogCXJldHVybiBFUlJfUFRSKGVycik7CiAKLUVmYXVsdDoKK2VmYXVsdDoKIAlrZnJlZShlKTsKIAlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKLUVpbnZhbDoKK2VpbnZhbDoKIAlrZnJlZShlKTsKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KQEAgLTQxNyw3ICs1MDMsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gMDsKLQlpZiAoc1tjb3VudC0xXSA9PSAnXG4nKQorCWlmIChzW2NvdW50IC0gMV0gPT0gJ1xuJykKIAkJY291bnQtLTsKIAlpZiAoY291bnQgPT0gMSAmJiBzWzBdID09ICcwJykKIAkJcmV0dXJuIDE7CkBAIC00MzQsNyArNTIwLDcgQEAKIHsKIAljaGFyICpkcDsKIAljaGFyICpzdGF0dXMgPSAiZGlzYWJsZWQiOwotCWNvbnN0IGNoYXIgKiBmbGFncyA9ICJmbGFnczogIjsKKwljb25zdCBjaGFyICpmbGFncyA9ICJmbGFnczogIjsKIAogCWlmICh0ZXN0X2JpdChFbmFibGVkLCAmZS0+ZmxhZ3MpKQogCQlzdGF0dXMgPSAiZW5hYmxlZCI7CkBAIC00NDgsMTkgKzUzNCwxNSBAQAogCWRwID0gcGFnZSArIHN0cmxlbihwYWdlKTsKIAogCS8qIHByaW50IHRoZSBzcGVjaWFsIGZsYWdzICovCi0Jc3ByaW50ZiAoZHAsICIlcyIsIGZsYWdzKTsKLQlkcCArPSBzdHJsZW4gKGZsYWdzKTsKLQlpZiAoZS0+ZmxhZ3MgJiBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCkgewotCQkqZHAgKysgPSAnUCc7Ci0JfQotCWlmIChlLT5mbGFncyAmIE1JU0NfRk1UX09QRU5fQklOQVJZKSB7Ci0JCSpkcCArKyA9ICdPJzsKLQl9Ci0JaWYgKGUtPmZsYWdzICYgTUlTQ19GTVRfQ1JFREVOVElBTFMpIHsKLQkJKmRwICsrID0gJ0MnOwotCX0KLQkqZHAgKysgPSAnXG4nOwotCisJc3ByaW50ZihkcCwgIiVzIiwgZmxhZ3MpOworCWRwICs9IHN0cmxlbihmbGFncyk7CisJaWYgKGUtPmZsYWdzICYgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjApCisJCSpkcCsrID0gJ1AnOworCWlmIChlLT5mbGFncyAmIE1JU0NfRk1UX09QRU5fQklOQVJZKQorCQkqZHArKyA9ICdPJzsKKwlpZiAoZS0+ZmxhZ3MgJiBNSVNDX0ZNVF9DUkVERU5USUFMUykKKwkJKmRwKysgPSAnQyc7CisJKmRwKysgPSAnXG4nOwogCiAJaWYgKCF0ZXN0X2JpdChNYWdpYywgJmUtPmZsYWdzKSkgewogCQlzcHJpbnRmKGRwLCAiZXh0ZW5zaW9uIC4lc1xuIiwgZS0+bWFnaWMpOwpAQCAtNDg4LDcgKzU3MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSkKIHsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IG5ld19pbm9kZShzYik7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7CiAKIAlpZiAoaW5vZGUpIHsKIAkJaW5vZGUtPmlfaW5vID0gZ2V0X25leHRfaW5vKCk7CkBAIC01MjgsMTMgKzYxMCwxNCBAQAogLyogLzxlbnRyeT4gKi8KIAogc3RhdGljIHNzaXplX3QKLWJtX2VudHJ5X3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQorYm1fZW50cnlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQogewogCU5vZGUgKmUgPSBmaWxlX2lub2RlKGZpbGUpLT5pX3ByaXZhdGU7CiAJc3NpemVfdCByZXM7CiAJY2hhciAqcGFnZTsKIAotCWlmICghKHBhZ2UgPSAoY2hhciopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKSkpCisJcGFnZSA9IChjaGFyICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZW50cnlfc3RhdHVzKGUsIHBhZ2UpOwpAQCAtNTUzLDIwICs2MzYsMjggQEAKIAlpbnQgcmVzID0gcGFyc2VfY29tbWFuZChidWZmZXIsIGNvdW50KTsKIAogCXN3aXRjaCAocmVzKSB7Ci0JCWNhc2UgMTogY2xlYXJfYml0KEVuYWJsZWQsICZlLT5mbGFncyk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOiBzZXRfYml0KEVuYWJsZWQsICZlLT5mbGFncyk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOiByb290ID0gZGdldChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiLT5zX3Jvb3QpOwotCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CisJY2FzZSAxOgorCQkvKiBEaXNhYmxlIHRoaXMgaGFuZGxlci4gKi8KKwkJY2xlYXJfYml0KEVuYWJsZWQsICZlLT5mbGFncyk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJLyogRW5hYmxlIHRoaXMgaGFuZGxlci4gKi8KKwkJc2V0X2JpdChFbmFibGVkLCAmZS0+ZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDM6CisJCS8qIERlbGV0ZSB0aGlzIGhhbmRsZXIuICovCisJCXJvb3QgPSBkZ2V0KGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2ItPnNfcm9vdCk7CisJCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCi0JCQlraWxsX25vZGUoZSk7CisJCWtpbGxfbm9kZShlKTsKIAotCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKLQkJCWRwdXQocm9vdCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDogcmV0dXJuIHJlczsKKwkJbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKKwkJZHB1dChyb290KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHJlczsKIAl9CisKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTY1NCwyNiArNzQ1LDM2IEBACiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBzLCBzdHJsZW4ocykpOwogfQogCi1zdGF0aWMgc3NpemVfdCBibV9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKK3N0YXRpYyBzc2l6ZV90IGJtX3N0YXR1c193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJaW50IHJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmZmVyLCBjb3VudCk7CiAJc3RydWN0IGRlbnRyeSAqcm9vdDsKIAogCXN3aXRjaCAocmVzKSB7Ci0JCWNhc2UgMTogZW5hYmxlZCA9IDA7IGJyZWFrOwotCQljYXNlIDI6IGVuYWJsZWQgPSAxOyBicmVhazsKLQkJY2FzZSAzOiByb290ID0gZGdldChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiLT5zX3Jvb3QpOwotCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CisJY2FzZSAxOgorCQkvKiBEaXNhYmxlIGFsbCBoYW5kbGVycy4gKi8KKwkJZW5hYmxlZCA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJLyogRW5hYmxlIGFsbCBoYW5kbGVycy4gKi8KKwkJZW5hYmxlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJLyogRGVsZXRlIGFsbCBoYW5kbGVycy4gKi8KKwkJcm9vdCA9IGRnZXQoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYi0+c19yb290KTsKKwkJbXV0ZXhfbG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKLQkJCXdoaWxlICghbGlzdF9lbXB0eSgmZW50cmllcykpCi0JCQkJa2lsbF9ub2RlKGxpc3RfZW50cnkoZW50cmllcy5uZXh0LCBOb2RlLCBsaXN0KSk7CisJCXdoaWxlICghbGlzdF9lbXB0eSgmZW50cmllcykpCisJCQlraWxsX25vZGUobGlzdF9lbnRyeShlbnRyaWVzLm5leHQsIE5vZGUsIGxpc3QpKTsKIAotCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKLQkJCWRwdXQocm9vdCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDogcmV0dXJuIHJlczsKKwkJbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKKwkJZHB1dChyb290KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHJlczsKIAl9CisKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTY5MCwxNCArNzkxLDE2IEBACiAJLmV2aWN0X2lub2RlCT0gYm1fZXZpY3RfaW5vZGUsCiB9OwogCi1zdGF0aWMgaW50IGJtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHZvaWQgKiBkYXRhLCBpbnQgc2lsZW50KQorc3RhdGljIGludCBibV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCiB7CisJaW50IGVycjsKIAlzdGF0aWMgc3RydWN0IHRyZWVfZGVzY3IgYm1fZmlsZXNbXSA9IHsKIAkJWzJdID0geyJzdGF0dXMiLCAmYm1fc3RhdHVzX29wZXJhdGlvbnMsIFNfSVdVU1J8U19JUlVHT30sCiAJCVszXSA9IHsicmVnaXN0ZXIiLCAmYm1fcmVnaXN0ZXJfb3BlcmF0aW9ucywgU19JV1VTUn0sCiAJCS8qIGxhc3Qgb25lICovIHsiIn0KIAl9OwotCWludCBlcnIgPSBzaW1wbGVfZmlsbF9zdXBlcihzYiwgQklORk1URlNfTUFHSUMsIGJtX2ZpbGVzKTsKKworCWVyciA9IHNpbXBsZV9maWxsX3N1cGVyKHNiLCBCSU5GTVRGU19NQUdJQywgYm1fZmlsZXMpOwogCWlmICghZXJyKQogCQlzYi0+c19vcCA9ICZzX29wczsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCAxZDljOWYzLi5iNDhjNDFiIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMjM1LDcgKzIzNSwxMCBAQAogCXNiID0gZ2V0X2FjdGl2ZV9zdXBlcihiZGV2KTsKIAlpZiAoIXNiKQogCQlnb3RvIG91dDsKLQllcnJvciA9IGZyZWV6ZV9zdXBlcihzYik7CisJaWYgKHNiLT5zX29wLT5mcmVlemVfc3VwZXIpCisJCWVycm9yID0gc2ItPnNfb3AtPmZyZWV6ZV9zdXBlcihzYik7CisJZWxzZQorCQllcnJvciA9IGZyZWV6ZV9zdXBlcihzYik7CiAJaWYgKGVycm9yKSB7CiAJCWRlYWN0aXZhdGVfc3VwZXIoc2IpOwogCQliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudC0tOwpAQCAtMjcyLDcgKzI3NSwxMCBAQAogCWlmICghc2IpCiAJCWdvdG8gb3V0OwogCi0JZXJyb3IgPSB0aGF3X3N1cGVyKHNiKTsKKwlpZiAoc2ItPnNfb3AtPnRoYXdfc3VwZXIpCisJCWVycm9yID0gc2ItPnNfb3AtPnRoYXdfc3VwZXIoc2IpOworCWVsc2UKKwkJZXJyb3IgPSB0aGF3X3N1cGVyKHNiKTsKIAlpZiAoZXJyb3IpIHsKIAkJYmRldi0+YmRfZnNmcmVlemVfY291bnQrKzsKIAkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCBkMjMzNjJmLi5mZjBkY2MwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTUzMDMsNyArNTMwMyw3IEBACiAJCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOwogCX0KIAotCXJldHVybiBkX21hdGVyaWFsaXNlX3VuaXF1ZShkZW50cnksIGlub2RlKTsKKwlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CiB9CiAKIHVuc2lnbmVkIGNoYXIgYnRyZnNfZmlsZXR5cGVfdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IDQzOTlmMGMuLjA4MGZlNjYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtNTI5Niw3ICs1Mjk2LDcgQEAKIAkJcmV0ID0gYnRyZnNfc3RhcnRfZGVsYWxsb2Nfcm9vdHMocm9vdC0+ZnNfaW5mbywgMCwgLTEpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJcmV0ID0gYnRyZnNfc3luY19mcyhmaWxlLT5mX2RlbnRyeS0+ZF9zYiwgMSk7CisJCXJldCA9IGJ0cmZzX3N5bmNfZnMoZmlsZV9pbm9kZShmaWxlKS0+aV9zYiwgMSk7CiAJCS8qCiAJCSAqIFRoZSB0cmFuc2FjdGlvbiB0aHJlYWQgbWF5IHdhbnQgdG8gZG8gbW9yZSB3b3JrLAogCQkgKiBuYW1lbHkgaXQgcG9rZXMgdGhlIGNsZWFuZXIga3RyZWFkIHRoYXQgd2lsbCBzdGFydApkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9uYW1laS5jIGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jCmluZGV4IGUxMmYxODkuLjdmOGU4M2YgMTAwNjQ0Ci0tLSBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYworKysgYi9mcy9jYWNoZWZpbGVzL25hbWVpLmMKQEAgLTEwMiw4ICsxMDIsNyBAQAogCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OwogCXN0cnVjdCByYl9ub2RlICpwOwogCi0JX2VudGVyKCIsJyUqLipzJyIsCi0JICAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlfZW50ZXIoIiwnJXBkJyIsIGRlbnRyeSk7CiAKIAl3cml0ZV9sb2NrKCZjYWNoZS0+YWN0aXZlX2xvY2spOwogCkBAIC0yNzMsOSArMjcyLDcgQEAKIAljaGFyIG5idWZmZXJbOCArIDggKyAxXTsKIAlpbnQgcmV0OwogCi0JX2VudGVyKCIsJyUqLipzJywnJSouKnMnIiwKLQkgICAgICAgZGlyLT5kX25hbWUubGVuLCBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLm5hbWUsCi0JICAgICAgIHJlcC0+ZF9uYW1lLmxlbiwgcmVwLT5kX25hbWUubGVuLCByZXAtPmRfbmFtZS5uYW1lKTsKKwlfZW50ZXIoIiwnJXBkJywnJXBkJyIsIGRpciwgcmVwKTsKIAogCV9kZWJ1ZygicmVtb3ZlICVwIGZyb20gJXAiLCByZXAsIGRpcik7CiAKQEAgLTU5Nyw4ICs1OTQsNyBAQAogCS8qIGlmIHdlJ3ZlIGZvdW5kIHRoYXQgdGhlIHRlcm1pbmFsIG9iamVjdCBleGlzdHMsIHRoZW4gd2UgbmVlZCB0bwogCSAqIGNoZWNrIGl0cyBhdHRyaWJ1dGVzIGFuZCBkZWxldGUgaXQgaWYgaXQncyBvdXQgb2YgZGF0ZSAqLwogCWlmICghb2JqZWN0LT5uZXcpIHsKLQkJX2RlYnVnKCJ2YWxpZGF0ZSAnJSouKnMnIiwKLQkJICAgICAgIG5leHQtPmRfbmFtZS5sZW4sIG5leHQtPmRfbmFtZS5sZW4sIG5leHQtPmRfbmFtZS5uYW1lKTsKKwkJX2RlYnVnKCJ2YWxpZGF0ZSAnJXBkJyIsIG5leHQpOwogCiAJCXJldCA9IGNhY2hlZmlsZXNfY2hlY2tfb2JqZWN0X3hhdHRyKG9iamVjdCwgYXV4ZGF0YSk7CiAJCWlmIChyZXQgPT0gLUVTVEFMRSkgewpAQCAtODI3LDggKzgyMyw4IEBACiAJdW5zaWduZWQgbG9uZyBzdGFydDsKIAlpbnQgcmV0OwogCi0JLy9fZW50ZXIoIiwlKi4qcy8sJXMiLAotCS8vICAgICAgIGRpci0+ZF9uYW1lLmxlbiwgZGlyLT5kX25hbWUubGVuLCBkaXItPmRfbmFtZS5uYW1lLCBmaWxlbmFtZSk7CisJLy9fZW50ZXIoIiwlcGQvLCVzIiwKKwkvLyAgICAgICBkaXIsIGZpbGVuYW1lKTsKIAogCS8qIGxvb2sgdXAgdGhlIHZpY3RpbSAqLwogCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKQEAgLTkxMCw4ICs5MDYsNyBAQAogCXN0cnVjdCBkZW50cnkgKnZpY3RpbTsKIAlpbnQgcmV0OwogCi0JX2VudGVyKCIsJSouKnMvLCVzIiwKLQkgICAgICAgZGlyLT5kX25hbWUubGVuLCBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLm5hbWUsIGZpbGVuYW1lKTsKKwlfZW50ZXIoIiwlcGQvLCVzIiwgZGlyLCBmaWxlbmFtZSk7CiAKIAl2aWN0aW0gPSBjYWNoZWZpbGVzX2NoZWNrX2FjdGl2ZShjYWNoZSwgZGlyLCBmaWxlbmFtZSk7CiAJaWYgKElTX0VSUih2aWN0aW0pKQpAQCAtOTY5LDggKzk2NCw4IEBACiB7CiAJc3RydWN0IGRlbnRyeSAqdmljdGltOwogCi0JLy9fZW50ZXIoIiwlKi4qcy8sJXMiLAotCS8vICAgICAgIGRpci0+ZF9uYW1lLmxlbiwgZGlyLT5kX25hbWUubGVuLCBkaXItPmRfbmFtZS5uYW1lLCBmaWxlbmFtZSk7CisJLy9fZW50ZXIoIiwlcGQvLCVzIiwKKwkvLyAgICAgICBkaXIsIGZpbGVuYW1lKTsKIAogCXZpY3RpbSA9IGNhY2hlZmlsZXNfY2hlY2tfYWN0aXZlKGNhY2hlLCBkaXIsIGZpbGVuYW1lKTsKIAlpZiAoSVNfRVJSKHZpY3RpbSkpCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3hhdHRyLmMgYi9mcy9jYWNoZWZpbGVzL3hhdHRyLmMKaW5kZXggYWNiYzFmMC4uYThhNjg3NCAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy94YXR0ci5jCisrKyBiL2ZzL2NhY2hlZmlsZXMveGF0dHIuYwpAQCAtNTEsOSArNTEsOCBAQAogCX0KIAogCWlmIChyZXQgIT0gLUVFWElTVCkgewotCQlwcl9lcnIoIkNhbid0IHNldCB4YXR0ciBvbiAlKi4qcyBbJWx1XSAoZXJyICVkKVxuIiwKLQkJICAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubGVuLAotCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLT5pX2lubywKKwkJcHJfZXJyKCJDYW4ndCBzZXQgeGF0dHIgb24gJXBkIFslbHVdIChlcnIgJWQpXG4iLAorCQkgICAgICAgZGVudHJ5LCBkZW50cnktPmRfaW5vZGUtPmlfaW5vLAogCQkgICAgICAgLXJldCk7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtNjQsOSArNjMsOCBAQAogCQlpZiAocmV0ID09IC1FUkFOR0UpCiAJCQlnb3RvIGJhZF90eXBlX2xlbmd0aDsKIAotCQlwcl9lcnIoIkNhbid0IHJlYWQgeGF0dHIgb24gJSouKnMgWyVsdV0gKGVyciAlZClcbiIsCi0JCSAgICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJICAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCisJCXByX2VycigiQ2FuJ3QgcmVhZCB4YXR0ciBvbiAlcGQgWyVsdV0gKGVyciAlZClcbiIsCisJCSAgICAgICBkZW50cnksIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCiAJCSAgICAgICAtcmV0KTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC05Miw5ICs5MCw4IEBACiAKIGJhZF90eXBlOgogCXh0eXBlWzJdID0gMDsKLQlwcl9lcnIoIkNhY2hlIG9iamVjdCAlKi4qcyBbJWx1XSB0eXBlICVzIG5vdCAlc1xuIiwKLQkgICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5sZW4sCi0JICAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCisJcHJfZXJyKCJDYWNoZSBvYmplY3QgJXBkIFslbHVdIHR5cGUgJXMgbm90ICVzXG4iLAorCSAgICAgICBkZW50cnksIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCiAJICAgICAgIHh0eXBlLCB0eXBlKTsKIAlyZXQgPSAtRUlPOwogCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2RlYnVnZnMuYyBiL2ZzL2NlcGgvZGVidWdmcy5jCmluZGV4IDVkNWE0YzguLjFiMjM1NTEgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGVidWdmcy5jCisrKyBiL2ZzL2NlcGgvZGVidWdmcy5jCkBAIC04MywxMCArODMsOSBAQAogCQkJaWYgKElTX0VSUihwYXRoKSkKIAkJCQlwYXRoID0gTlVMTDsKIAkJCXNwaW5fbG9jaygmcmVxLT5yX2RlbnRyeS0+ZF9sb2NrKTsKLQkJCXNlcV9wcmludGYocywgIiAjJWxseC8lLipzICglcykiLAorCQkJc2VxX3ByaW50ZihzLCAiICMlbGx4LyVwZCAoJXMpIiwKIAkJCQkgICBjZXBoX2lubyhyZXEtPnJfZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSksCi0JCQkJICAgcmVxLT5yX2RlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJCQkgICByZXEtPnJfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkgICByZXEtPnJfZGVudHJ5LAogCQkJCSAgIHBhdGggPyBwYXRoIDogIiIpOwogCQkJc3Bpbl91bmxvY2soJnJlcS0+cl9kZW50cnktPmRfbG9jayk7CiAJCQlrZnJlZShwYXRoKTsKQEAgLTEwMywxMSArMTAyLDEwIEBACiAJCQlpZiAoSVNfRVJSKHBhdGgpKQogCQkJCXBhdGggPSBOVUxMOwogCQkJc3Bpbl9sb2NrKCZyZXEtPnJfb2xkX2RlbnRyeS0+ZF9sb2NrKTsKLQkJCXNlcV9wcmludGYocywgIiAjJWxseC8lLipzICglcykiLAorCQkJc2VxX3ByaW50ZihzLCAiICMlbGx4LyVwZCAoJXMpIiwKIAkJCQkgICByZXEtPnJfb2xkX2RlbnRyeV9kaXIgPwogCQkJCSAgIGNlcGhfaW5vKHJlcS0+cl9vbGRfZGVudHJ5X2RpcikgOiAwLAotCQkJCSAgIHJlcS0+cl9vbGRfZGVudHJ5LT5kX25hbWUubGVuLAotCQkJCSAgIHJlcS0+cl9vbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkgICByZXEtPnJfb2xkX2RlbnRyeSwKIAkJCQkgICBwYXRoID8gcGF0aCA6ICIiKTsKIAkJCXNwaW5fdW5sb2NrKCZyZXEtPnJfb2xkX2RlbnRyeS0+ZF9sb2NrKTsKIAkJCWtmcmVlKHBhdGgpOwpAQCAtMTUwLDggKzE0OCw4IEBACiAJc3Bpbl9sb2NrKCZtZHNjLT5kZW50cnlfbHJ1X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGksICZtZHNjLT5kZW50cnlfbHJ1LCBscnUpIHsKIAkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGktPmRlbnRyeTsKLQkJc2VxX3ByaW50ZihzLCAiJXAgJXBcdCUuKnNcbiIsCi0JCQkgICBkaSwgZGVudHJ5LCBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQlzZXFfcHJpbnRmKHMsICIlcCAlcFx0JXBkXG4iLAorCQkJICAgZGksIGRlbnRyeSwgZGVudHJ5KTsKIAl9CiAJc3Bpbl91bmxvY2soJm1kc2MtPmRlbnRyeV9scnVfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZGlyLmMgYi9mcy9jZXBoL2Rpci5jCmluZGV4IGU2ZDYzZjguLjY4MWE4NTMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGlyLmMKKysrIGIvZnMvY2VwaC9kaXIuYwpAQCAtMTExLDcgKzExMSw3IEBACiAvKgogICogV2hlbiBwb3NzaWJsZSwgd2UgdHJ5IHRvIHNhdGlzZnkgYSByZWFkZGlyIGJ5IHBlZWtpbmcgYXQgdGhlCiAgKiBkY2FjaGUuICBXZSBtYWtlIHRoaXMgd29yayBieSBjYXJlZnVsbHkgb3JkZXJpbmcgZGVudHJpZXMgb24KLSAqIGRfdS5kX2NoaWxkIHdoZW4gd2UgaW5pdGlhbGx5IGdldCByZXN1bHRzIGJhY2sgZnJvbSB0aGUgTURTLCBhbmQKKyAqIGRfY2hpbGQgd2hlbiB3ZSBpbml0aWFsbHkgZ2V0IHJlc3VsdHMgYmFjayBmcm9tIHRoZSBNRFMsIGFuZAogICogZmFsbGluZyBiYWNrIHRvIGEgIm5vcm1hbCIgc3luYyByZWFkZGlyIGlmIGFueSBkZW50cmllcyBpbiB0aGUgZGlyCiAgKiBhcmUgZHJvcHBlZC4KICAqCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJCSAgICB1MzIgc2hhcmVkX2dlbikKIHsKIAlzdHJ1Y3QgY2VwaF9maWxlX2luZm8gKmZpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICpkaXIgPSBwYXJlbnQtPmRfaW5vZGU7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksICpsYXN0OwpAQCAtMTQ3LDExICsxNDcsMTEgQEAKIAkJcCA9IHBhcmVudC0+ZF9zdWJkaXJzLnByZXY7CiAJCWRvdXQoIiBpbml0aWFsIHAgJXAvJXBcbiIsIHAtPnByZXYsIHAtPm5leHQpOwogCX0gZWxzZSB7Ci0JCXAgPSBsYXN0LT5kX3UuZF9jaGlsZC5wcmV2OworCQlwID0gbGFzdC0+ZF9jaGlsZC5wcmV2OwogCX0KIAogbW9yZToKLQlkZW50cnkgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKKwlkZW50cnkgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBkZW50cnksIGRfY2hpbGQpOwogCWRpID0gY2VwaF9kZW50cnkoZGVudHJ5KTsKIAl3aGlsZSAoMSkgewogCQlkb3V0KCIgcCAlcC8lcCAlcyBkX3N1YmRpcnMgJXAvJXBcbiIsIHAtPnByZXYsIHAtPm5leHQsCkBAIC0xNjgsMTMgKzE2OCwxMyBAQAogCQkgICAgY2VwaF9pbm8oZGVudHJ5LT5kX2lub2RlKSAhPSBDRVBIX0lOT19DRVBIICYmCiAJCSAgICBmcG9zX2NtcChjdHgtPnBvcywgZGktPm9mZnNldCkgPD0gMCkKIAkJCWJyZWFrOwotCQlkb3V0KCIgc2tpcHBpbmcgJXAgJS4qcyBhdCAlbGx1ICglbGx1KSVzJXNcbiIsIGRlbnRyeSwKLQkJICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRpLT5vZmZzZXQsCisJCWRvdXQoIiBza2lwcGluZyAlcCAlcGQgYXQgJWxsdSAoJWxsdSklcyVzXG4iLCBkZW50cnksCisJCSAgICAgZGVudHJ5LCBkaS0+b2Zmc2V0LAogCQkgICAgIGN0eC0+cG9zLCBkX3VuaGFzaGVkKGRlbnRyeSkgPyAiIHVuaGFzaGVkIiA6ICIiLAogCQkgICAgICFkZW50cnktPmRfaW5vZGUgPyAiIG51bGwiIDogIiIpOwogCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQlwID0gcC0+cHJldjsKLQkJZGVudHJ5ID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7CisJCWRlbnRyeSA9IGxpc3RfZW50cnkocCwgc3RydWN0IGRlbnRyeSwgZF9jaGlsZCk7CiAJCWRpID0gY2VwaF9kZW50cnkoZGVudHJ5KTsKIAl9CiAKQEAgLTE5MCw4ICsxOTAsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkb3V0KCIgJWxsdSAoJWxsdSkgZGVudHJ5ICVwICUuKnMgJXBcbiIsIGRpLT5vZmZzZXQsIGN0eC0+cG9zLAotCSAgICAgZGVudHJ5LCBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9pbm9kZSk7CisJZG91dCgiICVsbHUgKCVsbHUpIGRlbnRyeSAlcCAlcGQgJXBcbiIsIGRpLT5vZmZzZXQsIGN0eC0+cG9zLAorCSAgICAgZGVudHJ5LCBkZW50cnksIGRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKCFkaXJfZW1pdChjdHgsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCSAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwKIAkJICAgICAgY2VwaF90cmFuc2xhdGVfaW5vKGRlbnRyeS0+ZF9zYiwgZGVudHJ5LT5kX2lub2RlLT5pX2lubyksCkBAIC0yNzQsNyArMjc0LDcgQEAKIAkJb2ZmID0gMTsKIAl9CiAJaWYgKGN0eC0+cG9zID09IDEpIHsKLQkJaW5vX3QgaW5vID0gcGFyZW50X2lubyhmaWxlLT5mX2RlbnRyeSk7CisJCWlub190IGlubyA9IHBhcmVudF9pbm8oZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCWRvdXQoInJlYWRkaXIgb2ZmIDEgLT4gJy4uJ1xuIik7CiAJCWlmICghZGlyX2VtaXQoY3R4LCAiLi4iLCAyLAogCQkJICAgIGNlcGhfdHJhbnNsYXRlX2lubyhpbm9kZS0+aV9zYiwgaW5vKSwKQEAgLTMzNyw3ICszMzcsNyBAQAogCQl9CiAJCXJlcS0+cl9pbm9kZSA9IGlub2RlOwogCQlpaG9sZChpbm9kZSk7Ci0JCXJlcS0+cl9kZW50cnkgPSBkZ2V0KGZpbGUtPmZfZGVudHJ5KTsKKwkJcmVxLT5yX2RlbnRyeSA9IGRnZXQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCS8qIGhpbnRzIHRvIHJlcXVlc3QgLT4gbWRzIHNlbGVjdGlvbiBjb2RlICovCiAJCXJlcS0+cl9kaXJlY3RfbW9kZSA9IFVTRV9BVVRIX01EUzsKIAkJcmVxLT5yX2RpcmVjdF9oYXNoID0gY2VwaF9mcmFnX3ZhbHVlKGZyYWcpOwpAQCAtNTM4LDggKzUzOCw4IEBACiAJICAgIHN0cmNtcChkZW50cnktPmRfbmFtZS5uYW1lLAogCQkgICBmc2MtPm1vdW50X29wdGlvbnMtPnNuYXBkaXJfbmFtZSkgPT0gMCkgewogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY2VwaF9nZXRfc25hcGRpcihwYXJlbnQpOwotCQlkb3V0KCJFTk9FTlQgb24gc25hcGRpciAlcCAnJS4qcycsIGxpbmtpbmcgdG8gc25hcGRpciAlcFxuIiwKLQkJICAgICBkZW50cnksIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSwgaW5vZGUpOworCQlkb3V0KCJFTk9FTlQgb24gc25hcGRpciAlcCAnJXBkJywgbGlua2luZyB0byBzbmFwZGlyICVwXG4iLAorCQkgICAgIGRlbnRyeSwgZGVudHJ5LCBpbm9kZSk7CiAJCUJVR19PTighZF91bmhhc2hlZChkZW50cnkpKTsKIAkJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJCWVyciA9IDA7CkBAIC02MDMsOCArNjAzLDggQEAKIAlpbnQgb3A7CiAJaW50IGVycjsKIAotCWRvdXQoImxvb2t1cCAlcCBkZW50cnkgJXAgJyUuKnMnXG4iLAotCSAgICAgZGlyLCBkZW50cnksIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJZG91dCgibG9va3VwICVwIGRlbnRyeSAlcCAnJXBkJ1xuIiwKKwkgICAgIGRpciwgZGVudHJ5LCBkZW50cnkpOwogCiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IE5BTUVfTUFYKQogCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKQEAgLTc3NCw4ICs3NzQsOCBAQAogCWlmIChjZXBoX3NuYXAoZGlyKSA9PSBDRVBIX1NOQVBESVIpIHsKIAkJLyogbWtkaXIgLnNuYXAvZm9vIGlzIGEgTUtTTkFQICovCiAJCW9wID0gQ0VQSF9NRFNfT1BfTUtTTkFQOwotCQlkb3V0KCJta3NuYXAgZGlyICVwIHNuYXAgJyUuKnMnIGRuICVwXG4iLCBkaXIsCi0JCSAgICAgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnkpOworCQlkb3V0KCJta3NuYXAgZGlyICVwIHNuYXAgJyVwZCcgZG4gJXBcbiIsIGRpciwKKwkJICAgICBkZW50cnksIGRlbnRyeSk7CiAJfSBlbHNlIGlmIChjZXBoX3NuYXAoZGlyKSA9PSBDRVBIX05PU05BUCkgewogCQlkb3V0KCJta2RpciBkaXIgJXAgZG4gJXAgbW9kZSAwJWhvXG4iLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJCW9wID0gQ0VQSF9NRFNfT1BfTUtESVI7CkBAIC04ODgsOCArODg4LDcgQEAKIAogCWlmIChjZXBoX3NuYXAoZGlyKSA9PSBDRVBIX1NOQVBESVIpIHsKIAkJLyogcm1kaXIgLnNuYXAvZm9vIGlzIFJNU05BUCAqLwotCQlkb3V0KCJybXNuYXAgZGlyICVwICclLipzJyBkbiAlcFxuIiwgZGlyLCBkZW50cnktPmRfbmFtZS5sZW4sCi0JCSAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5KTsKKwkJZG91dCgicm1zbmFwIGRpciAlcCAnJXBkJyBkbiAlcFxuIiwgZGlyLCBkZW50cnksIGRlbnRyeSk7CiAJCW9wID0gQ0VQSF9NRFNfT1BfUk1TTkFQOwogCX0gZWxzZSBpZiAoY2VwaF9zbmFwKGRpcikgPT0gQ0VQSF9OT1NOQVApIHsKIAkJZG91dCgidW5saW5rL3JtZGlyIGRpciAlcCBkbiAlcCBpbm9kZSAlcFxuIiwKQEAgLTEwNjMsMTYgKzEwNjIsMTUgQEAKIAlpZiAoZmxhZ3MgJiBMT09LVVBfUkNVKQogCQlyZXR1cm4gLUVDSElMRDsKIAotCWRvdXQoImRfcmV2YWxpZGF0ZSAlcCAnJS4qcycgaW5vZGUgJXAgb2Zmc2V0ICVsbGRcbiIsIGRlbnRyeSwKLQkgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLAotCSAgICAgY2VwaF9kZW50cnkoZGVudHJ5KS0+b2Zmc2V0KTsKKwlkb3V0KCJkX3JldmFsaWRhdGUgJXAgJyVwZCcgaW5vZGUgJXAgb2Zmc2V0ICVsbGRcbiIsIGRlbnRyeSwKKwkgICAgIGRlbnRyeSwgZGVudHJ5LT5kX2lub2RlLCBjZXBoX2RlbnRyeShkZW50cnkpLT5vZmZzZXQpOwogCiAJZGlyID0gY2VwaF9nZXRfZGVudHJ5X3BhcmVudF9pbm9kZShkZW50cnkpOwogCiAJLyogYWx3YXlzIHRydXN0IGNhY2hlZCBzbmFwcGVkIGRlbnRyaWVzLCBzbmFwZGlyIGRlbnRyeSAqLwogCWlmIChjZXBoX3NuYXAoZGlyKSAhPSBDRVBIX05PU05BUCkgewotCQlkb3V0KCJkX3JldmFsaWRhdGUgJXAgJyUuKnMnIGlub2RlICVwIGlzIFNOQVBQRURcbiIsIGRlbnRyeSwKLQkJICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9pbm9kZSk7CisJCWRvdXQoImRfcmV2YWxpZGF0ZSAlcCAnJXBkJyBpbm9kZSAlcCBpcyBTTkFQUEVEXG4iLCBkZW50cnksCisJCSAgICAgZGVudHJ5LCBkZW50cnktPmRfaW5vZGUpOwogCQl2YWxpZCA9IDE7CiAJfSBlbHNlIGlmIChkZW50cnktPmRfaW5vZGUgJiYKIAkJICAgY2VwaF9zbmFwKGRlbnRyeS0+ZF9pbm9kZSkgPT0gQ0VQSF9TTkFQRElSKSB7CkBAIC0xMjY1LDggKzEyNjMsNyBAQAogCXN0cnVjdCBjZXBoX2RlbnRyeV9pbmZvICpkaSA9IGNlcGhfZGVudHJ5KGRuKTsKIAlzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjOwogCi0JZG91dCgiZGVudHJ5X2xydV9hZGQgJXAgJXAgJyUuKnMnXG4iLCBkaSwgZG4sCi0JICAgICBkbi0+ZF9uYW1lLmxlbiwgZG4tPmRfbmFtZS5uYW1lKTsKKwlkb3V0KCJkZW50cnlfbHJ1X2FkZCAlcCAlcCAnJXBkJ1xuIiwgZGksIGRuLCBkbik7CiAJbWRzYyA9IGNlcGhfc2JfdG9fY2xpZW50KGRuLT5kX3NiKS0+bWRzYzsKIAlzcGluX2xvY2soJm1kc2MtPmRlbnRyeV9scnVfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZGktPmxydSwgJm1kc2MtPmRlbnRyeV9scnUpOwpAQCAtMTI3OSw4ICsxMjc2LDggQEAKIAlzdHJ1Y3QgY2VwaF9kZW50cnlfaW5mbyAqZGkgPSBjZXBoX2RlbnRyeShkbik7CiAJc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYzsKIAotCWRvdXQoImRlbnRyeV9scnVfdG91Y2ggJXAgJXAgJyUuKnMnIChvZmZzZXQgJWxsZClcbiIsIGRpLCBkbiwKLQkgICAgIGRuLT5kX25hbWUubGVuLCBkbi0+ZF9uYW1lLm5hbWUsIGRpLT5vZmZzZXQpOworCWRvdXQoImRlbnRyeV9scnVfdG91Y2ggJXAgJXAgJyVwZCcgKG9mZnNldCAlbGxkKVxuIiwgZGksIGRuLCBkbiwKKwkgICAgIGRpLT5vZmZzZXQpOwogCW1kc2MgPSBjZXBoX3NiX3RvX2NsaWVudChkbi0+ZF9zYiktPm1kc2M7CiAJc3Bpbl9sb2NrKCZtZHNjLT5kZW50cnlfbHJ1X2xvY2spOwogCWxpc3RfbW92ZV90YWlsKCZkaS0+bHJ1LCAmbWRzYy0+ZGVudHJ5X2xydSk7CkBAIC0xMjkyLDggKzEyODksNyBAQAogCXN0cnVjdCBjZXBoX2RlbnRyeV9pbmZvICpkaSA9IGNlcGhfZGVudHJ5KGRuKTsKIAlzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjOwogCi0JZG91dCgiZGVudHJ5X2xydV9kZWwgJXAgJXAgJyUuKnMnXG4iLCBkaSwgZG4sCi0JICAgICBkbi0+ZF9uYW1lLmxlbiwgZG4tPmRfbmFtZS5uYW1lKTsKKwlkb3V0KCJkZW50cnlfbHJ1X2RlbCAlcCAlcCAnJXBkJ1xuIiwgZGksIGRuLCBkbik7CiAJbWRzYyA9IGNlcGhfc2JfdG9fY2xpZW50KGRuLT5kX3NiKS0+bWRzYzsKIAlzcGluX2xvY2soJm1kc2MtPmRlbnRyeV9scnVfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmZGktPmxydSk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jCmluZGV4IGQ3ZTBkYTguLjlmOGUzNTcgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZmlsZS5jCisrKyBiL2ZzL2NlcGgvZmlsZS5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAogCXJlcS0+cl9udW1fY2FwcyA9IDE7CiAJaWYgKGZsYWdzICYgT19DUkVBVCkKLQkJcGFyZW50X2lub2RlID0gY2VwaF9nZXRfZGVudHJ5X3BhcmVudF9pbm9kZShmaWxlLT5mX2RlbnRyeSk7CisJCXBhcmVudF9pbm9kZSA9IGNlcGhfZ2V0X2RlbnRyeV9wYXJlbnRfaW5vZGUoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJZXJyID0gY2VwaF9tZHNjX2RvX3JlcXVlc3QobWRzYywgcGFyZW50X2lub2RlLCByZXEpOwogCWlwdXQocGFyZW50X2lub2RlKTsKIAlpZiAoIWVycikKQEAgLTIzOCw4ICsyMzgsOCBAQAogCXN0cnVjdCBjZXBoX2FjbHNfaW5mbyBhY2xzID0ge307CiAJaW50IGVycjsKIAotCWRvdXQoImF0b21pY19vcGVuICVwIGRlbnRyeSAlcCAnJS4qcycgJXMgZmxhZ3MgJWQgbW9kZSAwJW9cbiIsCi0JICAgICBkaXIsIGRlbnRyeSwgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lLAorCWRvdXQoImF0b21pY19vcGVuICVwIGRlbnRyeSAlcCAnJXBkJyAlcyBmbGFncyAlZCBtb2RlIDAlb1xuIiwKKwkgICAgIGRpciwgZGVudHJ5LCBkZW50cnksCiAJICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyAidW5oYXNoZWQiIDogImhhc2hlZCIsIGZsYWdzLCBtb2RlKTsKIAogCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBOQU1FX01BWCkKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvaW5vZGUuYyBiL2ZzL2NlcGgvaW5vZGUuYwppbmRleCA3YjYxMzkwLi5hNTU5M2Q1IDEwMDY0NAotLS0gYS9mcy9jZXBoL2lub2RlLmMKKysrIGIvZnMvY2VwaC9pbm9kZS5jCkBAIC05NjcsNyArOTY3LDcgQEAKIAkvKiBkbiBtdXN0IGJlIHVuaGFzaGVkICovCiAJaWYgKCFkX3VuaGFzaGVkKGRuKSkKIAkJZF9kcm9wKGRuKTsKLQlyZWFsZG4gPSBkX21hdGVyaWFsaXNlX3VuaXF1ZShkbiwgaW4pOworCXJlYWxkbiA9IGRfc3BsaWNlX2FsaWFzKGluLCBkbik7CiAJaWYgKElTX0VSUihyZWFsZG4pKSB7CiAJCXByX2Vycigic3BsaWNlX2RlbnRyeSBlcnJvciAlbGQgJXAgaW5vZGUgJXAgaW5vICVsbHguJWxseFxuIiwKIAkJICAgICAgIFBUUl9FUlIocmVhbGRuKSwgZG4sIGluLCBjZXBoX3Zpbm9wKGluKSk7CkBAIC0xMTg2LDIwICsxMTg2LDE4IEBACiAJCQlzdHJ1Y3QgaW5vZGUgKm9sZGRpciA9IHJlcS0+cl9vbGRfZGVudHJ5X2RpcjsKIAkJCUJVR19PTighb2xkZGlyKTsKIAotCQkJZG91dCgiIHNyYyAlcCAnJS4qcycgZHN0ICVwICclLipzJ1xuIiwKKwkJCWRvdXQoIiBzcmMgJXAgJyVwZCcgZHN0ICVwICclcGQnXG4iLAogCQkJICAgICByZXEtPnJfb2xkX2RlbnRyeSwKLQkJCSAgICAgcmVxLT5yX29sZF9kZW50cnktPmRfbmFtZS5sZW4sCi0JCQkgICAgIHJlcS0+cl9vbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCSAgICAgZG4sIGRuLT5kX25hbWUubGVuLCBkbi0+ZF9uYW1lLm5hbWUpOworCQkJICAgICByZXEtPnJfb2xkX2RlbnRyeSwKKwkJCSAgICAgZG4sIGRuKTsKIAkJCWRvdXQoImZpbGxfdHJhY2UgZG9pbmcgZF9tb3ZlICVwIC0+ICVwXG4iLAogCQkJICAgICByZXEtPnJfb2xkX2RlbnRyeSwgZG4pOwogCiAJCQlkX21vdmUocmVxLT5yX29sZF9kZW50cnksIGRuKTsKLQkJCWRvdXQoIiBzcmMgJXAgJyUuKnMnIGRzdCAlcCAnJS4qcydcbiIsCisJCQlkb3V0KCIgc3JjICVwICclcGQnIGRzdCAlcCAnJXBkJ1xuIiwKIAkJCSAgICAgcmVxLT5yX29sZF9kZW50cnksCi0JCQkgICAgIHJlcS0+cl9vbGRfZGVudHJ5LT5kX25hbWUubGVuLAotCQkJICAgICByZXEtPnJfb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkgICAgIGRuLCBkbi0+ZF9uYW1lLmxlbiwgZG4tPmRfbmFtZS5uYW1lKTsKKwkJCSAgICAgcmVxLT5yX29sZF9kZW50cnksCisJCQkgICAgIGRuLCBkbik7CiAKIAkJCS8qIGVuc3VyZSB0YXJnZXQgZGVudHJ5IGlzIGludmFsaWRhdGVkLCBkZXNwaXRlCiAJCQkgICByZWhhc2hpbmcgYnVnIGluIHZmc19yZW5hbWVfZGlyICovCkBAIC0xMzk5LDcgKzEzOTcsNyBAQAogCQkJLyogcmVvcmRlciBwYXJlbnQncyBkX3N1YmRpcnMgKi8KIAkJCXNwaW5fbG9jaygmcGFyZW50LT5kX2xvY2spOwogCQkJc3Bpbl9sb2NrX25lc3RlZCgmZG4tPmRfbG9jaywgREVOVFJZX0RfTE9DS19ORVNURUQpOwotCQkJbGlzdF9tb3ZlKCZkbi0+ZF91LmRfY2hpbGQsICZwYXJlbnQtPmRfc3ViZGlycyk7CisJCQlsaXN0X21vdmUoJmRuLT5kX2NoaWxkLCAmcGFyZW50LT5kX3N1YmRpcnMpOwogCQkJc3Bpbl91bmxvY2soJmRuLT5kX2xvY2spOwogCQkJc3Bpbl91bmxvY2soJnBhcmVudC0+ZF9sb2NrKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvY2hhcl9kZXYuYyBiL2ZzL2NoYXJfZGV2LmMKaW5kZXggZjc3Zjc3MC4uNjdiMjAwNyAxMDA2NDQKLS0tIGEvZnMvY2hhcl9kZXYuYworKysgYi9mcy9jaGFyX2Rldi5jCkBAIC0xMTcsNyArMTE3LDYgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCW1ham9yID0gaTsKLQkJcmV0ID0gbWFqb3I7CiAJfQogCiAJY2QtPm1ham9yID0gbWFqb3I7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGVidWcuYyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCmluZGV4IDQ0ZWM3MjYuLjljNTZlZjcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCkBAIC0zNCwyNyArMzQsOSBAQAogdm9pZAogY2lmc19kdW1wX21lbShjaGFyICpsYWJlbCwgdm9pZCAqZGF0YSwgaW50IGxlbmd0aCkKIHsKLQlpbnQgaSwgajsKLQlpbnQgKmludHB0ciA9IGRhdGE7Ci0JY2hhciAqY2hhcnB0ciA9IGRhdGE7Ci0JY2hhciBidWZbMTBdLCBsaW5lWzgwXTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogZHVtcCBvZiAlZCBieXRlcyBvZiBkYXRhIGF0IDB4JXBcbiIsCi0JCWxhYmVsLCBsZW5ndGgsIGRhdGEpOwotCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMTYpIHsKLQkJbGluZVswXSA9IDA7Ci0JCWZvciAoaiA9IDA7IChqIDwgNCkgJiYgKGkgKyBqICogNCA8IGxlbmd0aCk7IGorKykgewotCQkJc3ByaW50ZihidWYsICIgJTA4eCIsIGludHB0cltpIC8gNCArIGpdKTsKLQkJCXN0cmNhdChsaW5lLCBidWYpOwotCQl9Ci0JCWJ1ZlswXSA9ICcgJzsKLQkJYnVmWzJdID0gMDsKLQkJZm9yIChqID0gMDsgKGogPCAxNikgJiYgKGkgKyBqIDwgbGVuZ3RoKTsgaisrKSB7Ci0JCQlidWZbMV0gPSBpc3ByaW50KGNoYXJwdHJbaSArIGpdKSA/IGNoYXJwdHJbaSArIGpdIDogJy4nOwotCQkJc3RyY2F0KGxpbmUsIGJ1Zik7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBsaW5lKTsKLQl9CisJcHJfZGVidWcoIiVzOiBkdW1wIG9mICVkIGJ5dGVzIG9mIGRhdGEgYXQgMHglcFxuIiwgbGFiZWwsIGxlbmd0aCwgZGF0YSk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIiIsIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDQsCisJCSAgICAgICBkYXRhLCBsZW5ndGgsIHRydWUpOwogfQogCiAjaWZkZWYgQ09ORklHX0NJRlNfREVCVUcKQEAgLTY4LDcgKzUwLDcgQEAKIAl2YWYuZm10ID0gZm10OwogCXZhZi52YSA9ICZhcmdzOwogCi0JcHJpbnRrKEtFUk5fRVJSICJDSUZTIFZGUzogJXBWIiwgJnZhZik7CisJcHJfZXJyKCJDSUZTIFZGUzogJXBWIiwgJnZhZik7CiAKIAl2YV9lbmQoYXJncyk7CiB9CkBAIC0yNzQsNiArMjU2LDcgQEAKIAkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJY2hhciBjOworCWJvb2wgYnY7CiAJaW50IHJjOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDEsICp0bXAyLCAqdG1wMzsKIAlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXI7CkBAIC0yODQsNyArMjY3LDcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWlmIChjID09ICcxJyB8fCBjID09ICd5JyB8fCBjID09ICdZJyB8fCBjID09ICcwJykgeworCWlmIChzdHJ0b2Jvb2woJmMsICZidikgPT0gMCkgewogI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgogCQlhdG9taWNfc2V0KCZ0b3RCdWZBbGxvY0NvdW50LCAwKTsKIAkJYXRvbWljX3NldCgmdG90U21CdWZBbGxvY0NvdW50LCAwKTsKQEAgLTQ1MSwxNSArNDM0LDE0IEBACiAJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCWNoYXIgYzsKKwlib29sIGJ2OwogCWludCByYzsKIAogCXJjID0gZ2V0X3VzZXIoYywgYnVmZmVyKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKLQlpZiAoYyA9PSAnMCcgfHwgYyA9PSAnbicgfHwgYyA9PSAnTicpCi0JCWNpZnNGWUkgPSAwOwotCWVsc2UgaWYgKGMgPT0gJzEnIHx8IGMgPT0gJ3knIHx8IGMgPT0gJ1knKQotCQljaWZzRllJID0gMTsKKwlpZiAoc3RydG9ib29sKCZjLCAmYnYpID09IDApCisJCWNpZnNGWUkgPSBidjsKIAllbHNlIGlmICgoYyA+ICcxJykgJiYgKGMgPD0gJzknKSkKIAkJY2lmc0ZZSSA9IChpbnQpIChjIC0gJzAnKTsgLyogc2VlIGNpZnNfZGVidWcuaCBmb3IgbWVhbmluZ3MgKi8KIApAQCAtNDkwLDE1ICs0NzIsMTggQEAKIAkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJY2hhciBjOworCWJvb2wgYnY7CiAJaW50IHJjOwogCiAJcmMgPSBnZXRfdXNlcihjLCBidWZmZXIpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCWlmIChjID09ICcwJyB8fCBjID09ICduJyB8fCBjID09ICdOJykKLQkJbGludXhFeHRFbmFibGVkID0gMDsKLQllbHNlIGlmIChjID09ICcxJyB8fCBjID09ICd5JyB8fCBjID09ICdZJykKLQkJbGludXhFeHRFbmFibGVkID0gMTsKKworCXJjID0gc3RydG9ib29sKCZjLCAmYnYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJbGludXhFeHRFbmFibGVkID0gYnY7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC01MjcsMTUgKzUxMiwxOCBAQAogCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAljaGFyIGM7CisJYm9vbCBidjsKIAlpbnQgcmM7CiAKIAlyYyA9IGdldF91c2VyKGMsIGJ1ZmZlcik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JaWYgKGMgPT0gJzAnIHx8IGMgPT0gJ24nIHx8IGMgPT0gJ04nKQotCQlsb29rdXBDYWNoZUVuYWJsZWQgPSAwOwotCWVsc2UgaWYgKGMgPT0gJzEnIHx8IGMgPT0gJ3knIHx8IGMgPT0gJ1knKQotCQlsb29rdXBDYWNoZUVuYWJsZWQgPSAxOworCisJcmMgPSBzdHJ0b2Jvb2woJmMsICZidik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlsb29rdXBDYWNoZUVuYWJsZWQgPSBidjsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTU2NCwxNSArNTUyLDE4IEBACiAJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCWNoYXIgYzsKKwlib29sIGJ2OwogCWludCByYzsKIAogCXJjID0gZ2V0X3VzZXIoYywgYnVmZmVyKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKLQlpZiAoYyA9PSAnMCcgfHwgYyA9PSAnbicgfHwgYyA9PSAnTicpCi0JCXRyYWNlU01CID0gMDsKLQllbHNlIGlmIChjID09ICcxJyB8fCBjID09ICd5JyB8fCBjID09ICdZJykKLQkJdHJhY2VTTUIgPSAxOworCisJcmMgPSBzdHJ0b2Jvb2woJmMsICZidik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwl0cmFjZVNNQiA9IGJ2OwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNjMwLDYgKzYyMSw3IEBACiAJdW5zaWduZWQgaW50IGZsYWdzOwogCWNoYXIgZmxhZ3Nfc3RyaW5nWzEyXTsKIAljaGFyIGM7CisJYm9vbCBidjsKIAogCWlmICgoY291bnQgPCAxKSB8fCAoY291bnQgPiAxMSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjQyLDExICs2MzQsOCBAQAogCWlmIChjb3VudCA8IDMpIHsKIAkJLyogc2luZ2xlIGNoYXIgb3Igc2luZ2xlIGNoYXIgZm9sbG93ZWQgYnkgbnVsbCAqLwogCQljID0gZmxhZ3Nfc3RyaW5nWzBdOwotCQlpZiAoYyA9PSAnMCcgfHwgYyA9PSAnbicgfHwgYyA9PSAnTicpIHsKLQkJCWdsb2JhbF9zZWNmbGFncyA9IENJRlNTRUNfREVGOyAvKiBkZWZhdWx0ICovCi0JCQlyZXR1cm4gY291bnQ7Ci0JCX0gZWxzZSBpZiAoYyA9PSAnMScgfHwgYyA9PSAneScgfHwgYyA9PSAnWScpIHsKLQkJCWdsb2JhbF9zZWNmbGFncyA9IENJRlNTRUNfTUFYOworCQlpZiAoc3RydG9ib29sKCZjLCAmYnYpID09IDApIHsKKwkJCWdsb2JhbF9zZWNmbGFncyA9IGJ2ID8gQ0lGU1NFQ19NQVggOiBDSUZTU0VDX0RFRjsKIAkJCXJldHVybiBjb3VudDsKIAkJfSBlbHNlIGlmICghaXNkaWdpdChjKSkgewogCQkJY2lmc19kYmcoVkZTLCAiSW52YWxpZCBTZWN1cml0eUZsYWdzOiAlc1xuIiwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5oIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmgKaW5kZXggYzk5YjQwZi4uZjQwZmJhYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2RlYnVnLmgKKysrIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmgKQEAgLTUzLDEzICs1MywxMiBAQAogZG8gewkJCQkJCQkJCVwKIAlpZiAodHlwZSA9PSBGWUkpIHsJCQkJCQlcCiAJCWlmIChjaWZzRllJICYgQ0lGU19JTkZPKSB7CQkJCVwKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQsCQkJXAotCQkJICAgICAgIF9fRklMRV9fLCAjI19fVkFfQVJHU19fKTsJCVwKKwkJCXByX2RlYnVnKCIlczogIiBmbXQsIF9fRklMRV9fLCAjI19fVkFfQVJHU19fKTsJXAogCQl9CQkJCQkJCVwKIAl9IGVsc2UgaWYgKHR5cGUgPT0gVkZTKSB7CQkJCQlcCiAJCWNpZnNfdmZzX2VycihmbXQsICMjX19WQV9BUkdTX18pOwkJCVwKIAl9IGVsc2UgaWYgKHR5cGUgPT0gTk9JU1kgJiYgdHlwZSAhPSAwKSB7CQkJXAotCQlwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjX19WQV9BUkdTX18pOwkJCVwKKwkJcHJfZGVidWcoZm10LCAjI19fVkFfQVJHU19fKTsJCQkJXAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKQEAgLTcxLDcgKzcwLDcgQEAKICNkZWZpbmUgY2lmc19kYmcodHlwZSwgZm10LCAuLi4pCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWlmICgwKQkJCQkJCQkJXAotCQlwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjX19WQV9BUkdTX18pOwkJCVwKKwkJcHJfZGVidWcoZm10LCAjI19fVkFfQVJHU19fKTsJCQkJXAogfSB3aGlsZSAoMCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNhY2wuYyBiL2ZzL2NpZnMvY2lmc2FjbC5jCmluZGV4IDZkMDBjNDEuLjFlYTc4MGIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2FjbC5jCisrKyBiL2ZzL2NpZnMvY2lmc2FjbC5jCkBAIC0zOCw3ICszOCw3IEBACiAJMSwgMSwgezAsIDAsIDAsIDAsIDAsIDF9LCB7MH0gfTsKIC8qIHNlY3VyaXR5IGlkIGZvciBBdXRoZW50aWNhdGVkIFVzZXJzIHN5c3RlbSBncm91cCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBjaWZzX3NpZCBzaWRfYXV0aHVzZXJzID0gewotCTEsIDEsIHswLCAwLCAwLCAwLCAwLCA1fSwge19fY29uc3RhbnRfY3B1X3RvX2xlMzIoMTEpfSB9OworCTEsIDEsIHswLCAwLCAwLCAwLCAwLCA1fSwge2NwdV90b19sZTMyKDExKX0gfTsKIC8qIGdyb3VwIHVzZXJzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNpZnNfc2lkIHNpZF91c2VyID0gezEsIDIgLCB7MCwgMCwgMCwgMCwgMCwgNX0sIHt9IH07CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDlkNzk5NmUuLmQ3MmZlMzcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtMjA5LDggKzIwOSw3IEBACiAKIHN0YXRpYyBsb25nIGNpZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZiwgbG9mZl90IGxlbikKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYjsKLQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihzYik7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfRklMRV9TQihmaWxlKTsKIAlzdHJ1Y3QgY2lmc190Y29uICp0Y29uID0gY2lmc19zYl9tYXN0ZXJfdGNvbihjaWZzX3NiKTsKIAlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIgPSB0Y29uLT5zZXMtPnNlcnZlcjsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuaCBiL2ZzL2NpZnMvY2lmc2ZzLmgKaW5kZXggMDAyZTBjMS4uMjUyZjVjMSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuaAorKysgYi9mcy9jaWZzL2NpZnNmcy5oCkBAIC0xMzYsNSArMTM2LDUgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgY2lmc19leHBvcnRfb3BzOwogI2VuZGlmIC8qIENPTkZJR19DSUZTX05GU0RfRVhQT1JUICovCiAKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjIuMDUiCisjZGVmaW5lIENJRlNfVkVSU0lPTiAgICIyLjA2IgogI2VuZGlmCQkJCS8qIF9DSUZTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDAyYTMzZTUuLjZlMTM5MTEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTExNjgsNiArMTE2OCwxMiBAQAogCXJldHVybiBzYi0+c19mc19pbmZvOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjaWZzX3NiX2luZm8gKgorQ0lGU19GSUxFX1NCKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBDSUZTX1NCKGZpbGVfaW5vZGUoZmlsZSktPmlfc2IpOworfQorCiBzdGF0aWMgaW5saW5lIGNoYXIgQ0lGU19ESVJfU0VQKGNvbnN0IHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpCiB7CiAJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9QT1NJWF9QQVRIUykKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggNjFkMDBhNi4uZmExM2Q1ZSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTI0NzcsMTQgKzI0NzcsMTQgQEAKIAkJfQogCQlwYXJtX2RhdGEgPSAoc3RydWN0IGNpZnNfcG9zaXhfbG9jayAqKQogCQkJKChjaGFyICopJnBTTUJyLT5oZHIuUHJvdG9jb2wgKyBkYXRhX29mZnNldCk7Ci0JCWlmIChwYXJtX2RhdGEtPmxvY2tfdHlwZSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KENJRlNfVU5MQ0spKQorCQlpZiAocGFybV9kYXRhLT5sb2NrX3R5cGUgPT0gY3B1X3RvX2xlMTYoQ0lGU19VTkxDSykpCiAJCQlwTG9ja0RhdGEtPmZsX3R5cGUgPSBGX1VOTENLOwogCQllbHNlIHsKIAkJCWlmIChwYXJtX2RhdGEtPmxvY2tfdHlwZSA9PQotCQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KENJRlNfUkRMQ0spKQorCQkJCQljcHVfdG9fbGUxNihDSUZTX1JETENLKSkKIAkJCQlwTG9ja0RhdGEtPmZsX3R5cGUgPSBGX1JETENLOwogCQkJZWxzZSBpZiAocGFybV9kYXRhLT5sb2NrX3R5cGUgPT0KLQkJCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihDSUZTX1dSTENLKSkKKwkJCQkJY3B1X3RvX2xlMTYoQ0lGU19XUkxDSykpCiAJCQkJcExvY2tEYXRhLT5mbF90eXBlID0gRl9XUkxDSzsKIAogCQkJcExvY2tEYXRhLT5mbF9zdGFydCA9IGxlNjRfdG9fY3B1KHBhcm1fZGF0YS0+c3RhcnQpOwpAQCAtMzI3NiwyNSArMzI3NiwyNSBAQAogCXBTTUItPmNvbXByZXNzaW9uX3N0YXRlID0gY3B1X3RvX2xlMTYoQ09NUFJFU1NJT05fRk9STUFUX0RFRkFVTFQpOwogCiAJcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudCA9IDA7Ci0JcFNNQi0+VG90YWxEYXRhQ291bnQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDIpOworCXBTTUItPlRvdGFsRGF0YUNvdW50ID0gY3B1X3RvX2xlMzIoMik7CiAJcFNNQi0+TWF4UGFyYW1ldGVyQ291bnQgPSAwOwogCXBTTUItPk1heERhdGFDb3VudCA9IDA7CiAJcFNNQi0+TWF4U2V0dXBDb3VudCA9IDQ7CiAJcFNNQi0+UmVzZXJ2ZWQgPSAwOwogCXBTTUItPlBhcmFtZXRlck9mZnNldCA9IDA7Ci0JcFNNQi0+RGF0YUNvdW50ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigyKTsKKwlwU01CLT5EYXRhQ291bnQgPSBjcHVfdG9fbGUzMigyKTsKIAlwU01CLT5EYXRhT2Zmc2V0ID0KIAkJY3B1X3RvX2xlMzIob2Zmc2V0b2Yoc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb25fY29tcHJfaW9jdGxfcmVxLAogCQkJCWNvbXByZXNzaW9uX3N0YXRlKSAtIDQpOyAgLyogODQgKi8KIAlwU01CLT5TZXR1cENvdW50ID0gNDsKLQlwU01CLT5TdWJDb21tYW5kID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihOVF9UUkFOU0FDVF9JT0NUTCk7CisJcFNNQi0+U3ViQ29tbWFuZCA9IGNwdV90b19sZTE2KE5UX1RSQU5TQUNUX0lPQ1RMKTsKIAlwU01CLT5QYXJhbWV0ZXJDb3VudCA9IDA7Ci0JcFNNQi0+RnVuY3Rpb25Db2RlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihGU0NUTF9TRVRfQ09NUFJFU1NJT04pOworCXBTTUItPkZ1bmN0aW9uQ29kZSA9IGNwdV90b19sZTMyKEZTQ1RMX1NFVF9DT01QUkVTU0lPTik7CiAJcFNNQi0+SXNGc2N0bCA9IDE7IC8qIEZTQ1RMICovCiAJcFNNQi0+SXNSb290RmxhZyA9IDA7CiAJcFNNQi0+RmlkID0gZmlkOyAvKiBmaWxlIGhhbmRsZSBhbHdheXMgbGUgKi8KIAkvKiAzIGJ5dGUgcGFkLCBmb2xsb3dlZCBieSAyIGJ5dGUgY29tcHJlc3Mgc3RhdGUgKi8KLQlwU01CLT5CeXRlQ291bnQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUpOworCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KDUpOwogCWluY19yZmMxMDAxX2xlbihwU01CLCA1KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtMzQzMCwxMCArMzQzMCwxMCBAQAogCWNpZnNfYWNsLT52ZXJzaW9uID0gY3B1X3RvX2xlMTYoMSk7CiAJaWYgKGFjbF90eXBlID09IEFDTF9UWVBFX0FDQ0VTUykgewogCQljaWZzX2FjbC0+YWNjZXNzX2VudHJ5X2NvdW50ID0gY3B1X3RvX2xlMTYoY291bnQpOwotCQljaWZzX2FjbC0+ZGVmYXVsdF9lbnRyeV9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhGRkZGKTsKKwkJY2lmc19hY2wtPmRlZmF1bHRfZW50cnlfY291bnQgPSBjcHVfdG9fbGUxNigweEZGRkYpOwogCX0gZWxzZSBpZiAoYWNsX3R5cGUgPT0gQUNMX1RZUEVfREVGQVVMVCkgewogCQljaWZzX2FjbC0+ZGVmYXVsdF9lbnRyeV9jb3VudCA9IGNwdV90b19sZTE2KGNvdW50KTsKLQkJY2lmc19hY2wtPmFjY2Vzc19lbnRyeV9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhGRkZGKTsKKwkJY2lmc19hY2wtPmFjY2Vzc19lbnRyeV9jb3VudCA9IGNwdV90b19sZTE2KDB4RkZGRik7CiAJfSBlbHNlIHsKIAkJY2lmc19kYmcoRllJLCAidW5rbm93biBBQ0wgdHlwZSAlZFxuIiwgYWNsX3R5cGUpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggMjRmYTA4ZC4uMmE3NzJkYSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTE0NjYsOSArMTQ2Niw3IEBACiAJCQl2b2wtPnNlYWwgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vYWM6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBNb3VudCBvcHRpb24gbm9hYyBub3QgIgotCQkJCSJzdXBwb3J0ZWQuIEluc3RlYWQgc2V0ICIKLQkJCQkiL3Byb2MvZnMvY2lmcy9Mb29rdXBDYWNoZUVuYWJsZWQgdG8gMFxuIik7CisJCQlwcl93YXJuKCJDSUZTOiBNb3VudCBvcHRpb24gbm9hYyBub3Qgc3VwcG9ydGVkLiBJbnN0ZWFkIHNldCAvcHJvYy9mcy9jaWZzL0xvb2t1cENhY2hlRW5hYmxlZCB0byAwXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9mc2M6CiAjaWZuZGVmIENPTkZJR19DSUZTX0ZTQ0FDSEUKQEAgLTE1OTgsNyArMTU5Niw3IEBACiAKIAkJCWlmIChzdHJubGVuKHN0cmluZywgQ0lGU19NQVhfVVNFUk5BTUVfTEVOKSA+CiAJCQkJCQkJQ0lGU19NQVhfVVNFUk5BTUVfTEVOKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogdXNlcm5hbWUgdG9vIGxvbmdcbiIpOworCQkJCXByX3dhcm4oIkNJRlM6IHVzZXJuYW1lIHRvbyBsb25nXG4iKTsKIAkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQkJdm9sLT51c2VybmFtZSA9IGtzdHJkdXAoc3RyaW5nLCBHRlBfS0VSTkVMKTsKQEAgLTE2NjIsOCArMTY2MCw3IEBACiAJCQl0ZW1wX2xlbiA9IHN0cmxlbih2YWx1ZSk7CiAJCQl2b2wtPnBhc3N3b3JkID0ga3phbGxvYyh0ZW1wX2xlbisxLCBHRlBfS0VSTkVMKTsKIAkJCWlmICh2b2wtPnBhc3N3b3JkID09IE5VTEwpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBubyBtZW1vcnkgIgotCQkJCQkJICAgICJmb3IgcGFzc3dvcmRcbiIpOworCQkJCXByX3dhcm4oIkNJRlM6IG5vIG1lbW9yeSBmb3IgcGFzc3dvcmRcbiIpOwogCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQl9CiAKQEAgLTE2ODcsOCArMTY4NCw3IEBACiAKIAkJCWlmICghY2lmc19jb252ZXJ0X2FkZHJlc3MoZHN0YWRkciwgc3RyaW5nLAogCQkJCQlzdHJsZW4oc3RyaW5nKSkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIkNJRlM6IGJhZCBpcD0gb3B0aW9uICglcykuXG4iLAotCQkJCQlzdHJpbmcpOworCQkJCXByX2VycigiQ0lGUzogYmFkIGlwPSBvcHRpb24gKCVzKS5cbiIsIHN0cmluZyk7CiAJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIAkJCWdvdF9pcCA9IHRydWU7CkBAIC0xNzAwLDE1ICsxNjk2LDEzIEBACiAKIAkJCWlmIChzdHJubGVuKHN0cmluZywgQ0lGU19NQVhfRE9NQUlOTkFNRV9MRU4pCiAJCQkJCT09IENJRlNfTUFYX0RPTUFJTk5BTUVfTEVOKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogZG9tYWluIG5hbWUgdG9vIgotCQkJCQkJICAgICIgbG9uZ1xuIik7CisJCQkJcHJfd2FybigiQ0lGUzogZG9tYWluIG5hbWUgdG9vIGxvbmdcbiIpOwogCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQl9CiAKIAkJCXZvbC0+ZG9tYWlubmFtZSA9IGtzdHJkdXAoc3RyaW5nLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdm9sLT5kb21haW5uYW1lKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogbm8gbWVtb3J5ICIKLQkJCQkJCSAgICAiZm9yIGRvbWFpbm5hbWVcbiIpOworCQkJCXByX3dhcm4oIkNJRlM6IG5vIG1lbW9yeSBmb3IgZG9tYWlubmFtZVxuIik7CiAJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIAkJCWNpZnNfZGJnKEZZSSwgIkRvbWFpbiBuYW1lIHNldFxuIik7CkBAIC0xNzIxLDggKzE3MTUsOCBAQAogCQkJaWYgKCFjaWZzX2NvbnZlcnRfYWRkcmVzcygKIAkJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZ2b2wtPnNyY2FkZHIsCiAJCQkJCXN0cmluZywgc3RybGVuKHN0cmluZykpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogIENvdWxkIG5vdCBwYXJzZSIKLQkJCQkJCSAgICAiIHNyY2FkZHI6ICVzXG4iLCBzdHJpbmcpOworCQkJCXByX3dhcm4oIkNJRlM6IENvdWxkIG5vdCBwYXJzZSBzcmNhZGRyOiAlc1xuIiwKKwkJCQkJc3RyaW5nKTsKIAkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xNzMyLDggKzE3MjYsNyBAQAogCQkJCWdvdG8gb3V0X25vbWVtOwogCiAJCQlpZiAoc3RybmxlbihzdHJpbmcsIDEwMjQpID49IDY1KSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogaW9jaGFyc2V0IG5hbWUgIgotCQkJCQkJICAgICJ0b28gbG9uZy5cbiIpOworCQkJCXByX3dhcm4oIkNJRlM6IGlvY2hhcnNldCBuYW1lIHRvbyBsb25nLlxuIik7CiAJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIApAQCAtMTc0MSw4ICsxNzM0LDcgQEAKIAkJCQl2b2wtPmlvY2hhcnNldCA9IGtzdHJkdXAoc3RyaW5nLAogCQkJCQkJCSBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIXZvbC0+aW9jaGFyc2V0KSB7Ci0JCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IG5vIG1lbW9yeSIKLQkJCQkJCQkgICAgImZvciBjaGFyc2V0XG4iKTsKKwkJCQkJcHJfd2FybigiQ0lGUzogbm8gbWVtb3J5IGZvciBjaGFyc2V0XG4iKTsKIAkJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCQl9CiAJCQl9CkBAIC0xNzczLDkgKzE3NjUsNyBAQAogCQkJICogc2V0IGF0IHRvcCBvZiB0aGUgZnVuY3Rpb24KIAkJCSAqLwogCQkJaWYgKGkgPT0gUkZDMTAwMV9OQU1FX0xFTiAmJiBzdHJpbmdbaV0gIT0gMCkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBuZXRiaW9zbmFtZSIKLQkJCQkgICAgICAgIiBsb25nZXIgdGhhbiAxNSB0cnVuY2F0ZWQuXG4iKTsKLQorCQkJCXByX3dhcm4oIkNJRlM6IG5ldGJpb3NuYW1lIGxvbmdlciB0aGFuIDE1IHRydW5jYXRlZC5cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3NlcnZlcm46CiAJCQkvKiBzZXJ2ZXJuZXRiaW9zbmFtZSBzcGVjaWZpZWQgb3ZlcnJpZGUgKlNNQlNFUlZFUiAqLwpAQCAtMTgwMSw4ICsxNzkxLDcgQEAKIAkJCS8qIFRoZSBzdHJpbmcgaGFzIDE2dGggYnl0ZSB6ZXJvIHN0aWxsIGZyb20KIAkJCSAgIHNldCBhdCB0b3Agb2YgdGhlIGZ1bmN0aW9uICAqLwogCQkJaWYgKGkgPT0gUkZDMTAwMV9OQU1FX0xFTiAmJiBzdHJpbmdbaV0gIT0gMCkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBzZXJ2ZXIgbmV0IgotCQkJCSAgICAgICAiYmlvc25hbWUgbG9uZ2VyIHRoYW4gMTUgdHJ1bmNhdGVkLlxuIik7CisJCQkJcHJfd2FybigiQ0lGUzogc2VydmVyIG5ldGJpb3NuYW1lIGxvbmdlciB0aGFuIDE1IHRydW5jYXRlZC5cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3ZlcjoKIAkJCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsKQEAgLTE4MTQsOCArMTgwMyw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkvKiBGb3IgYWxsIG90aGVyIHZhbHVlLCBlcnJvciAqLwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogSW52YWxpZCB2ZXJzaW9uIgotCQkJCQkgICAgIiBzcGVjaWZpZWRcbiIpOworCQkJcHJfd2FybigiQ0lGUzogSW52YWxpZCB2ZXJzaW9uIHNwZWNpZmllZFxuIik7CiAJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQljYXNlIE9wdF92ZXJzOgogCQkJc3RyaW5nID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOwpAQCAtMTg1Niw3ICsxODQ0LDcgQEAKIAl9CiAKIAlpZiAoIXNsb3BweSAmJiBpbnZhbGlkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ0lGUzogVW5rbm93biBtb3VudCBvcHRpb24gXCIlc1wiXG4iLCBpbnZhbGlkKTsKKwkJcHJfZXJyKCJDSUZTOiBVbmtub3duIG1vdW50IG9wdGlvbiBcIiVzXCJcbiIsIGludmFsaWQpOwogCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCX0KIApAQCAtMTg4Miw4ICsxODcwLDcgQEAKIAkJLyogTm8gaXA9IG9wdGlvbiBzcGVjaWZpZWQ/IFRyeSB0byBnZXQgaXQgZnJvbSBVTkMgKi8KIAkJaWYgKCFjaWZzX2NvbnZlcnRfYWRkcmVzcyhkc3RhZGRyLCAmdm9sLT5VTkNbMl0sCiAJCQkJCQlzdHJsZW4oJnZvbC0+VU5DWzJdKSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGRldGVybWluZSBkZXN0aW5hdGlvbiAiCi0JCQkJCSJhZGRyZXNzLlxuIik7CisJCQlwcl9lcnIoIlVuYWJsZSB0byBkZXRlcm1pbmUgZGVzdGluYXRpb24gYWRkcmVzcy5cbiIpOwogCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJfQogCX0KQEAgLTE4OTQsMjAgKzE4ODEsMTggQEAKIAlpZiAodWlkX3NwZWNpZmllZCkKIAkJdm9sLT5vdmVycmlkZV91aWQgPSBvdmVycmlkZV91aWQ7CiAJZWxzZSBpZiAob3ZlcnJpZGVfdWlkID09IDEpCi0JCXByaW50ayhLRVJOX05PVElDRSAiQ0lGUzogaWdub3JpbmcgZm9yY2V1aWQgbW91bnQgb3B0aW9uICIKLQkJCQkgICAic3BlY2lmaWVkIHdpdGggbm8gdWlkPSBvcHRpb24uXG4iKTsKKwkJcHJfbm90aWNlKCJDSUZTOiBpZ25vcmluZyBmb3JjZXVpZCBtb3VudCBvcHRpb24gc3BlY2lmaWVkIHdpdGggbm8gdWlkPSBvcHRpb24uXG4iKTsKIAogCWlmIChnaWRfc3BlY2lmaWVkKQogCQl2b2wtPm92ZXJyaWRlX2dpZCA9IG92ZXJyaWRlX2dpZDsKIAllbHNlIGlmIChvdmVycmlkZV9naWQgPT0gMSkKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJDSUZTOiBpZ25vcmluZyBmb3JjZWdpZCBtb3VudCBvcHRpb24gIgotCQkJCSAgICJzcGVjaWZpZWQgd2l0aCBubyBnaWQ9IG9wdGlvbi5cbiIpOworCQlwcl9ub3RpY2UoIkNJRlM6IGlnbm9yaW5nIGZvcmNlZ2lkIG1vdW50IG9wdGlvbiBzcGVjaWZpZWQgd2l0aCBubyBnaWQ9IG9wdGlvbi5cbiIpOwogCiAJa2ZyZWUobW91bnRkYXRhX2NvcHkpOwogCXJldHVybiAwOwogCiBvdXRfbm9tZW06Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGQgbm90IGFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXJcbiIpOworCXByX3dhcm4oIkNvdWxkIG5vdCBhbGxvY2F0ZSB0ZW1wb3JhcnkgYnVmZmVyXG4iKTsKIGNpZnNfcGFyc2VfbW91bnRfZXJyOgogCWtmcmVlKHN0cmluZyk7CiAJa2ZyZWUobW91bnRkYXRhX2NvcHkpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCAzZTRkMDBhLi45NmI3ZTliIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKIAogCW1heF9udW0gPSAobWF4X2J1ZiAtIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikpIC8KIAkJCQkJCXNpemVvZihMT0NLSU5HX0FORFhfUkFOR0UpOwotCWJ1ZiA9IGt6YWxsb2MobWF4X251bSAqIHNpemVvZihMT0NLSU5HX0FORFhfUkFOR0UpLCBHRlBfS0VSTkVMKTsKKwlidWYgPSBrY2FsbG9jKG1heF9udW0sIHNpemVvZihMT0NLSU5HX0FORFhfUkFOR0UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewogCQlmcmVlX3hpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE0MDEsNyArMTQwMSw3IEBACiAKIAltYXhfbnVtID0gKG1heF9idWYgLSBzaXplb2Yoc3RydWN0IHNtYl9oZHIpKSAvCiAJCQkJCQlzaXplb2YoTE9DS0lOR19BTkRYX1JBTkdFKTsKLQlidWYgPSBremFsbG9jKG1heF9udW0gKiBzaXplb2YoTE9DS0lOR19BTkRYX1JBTkdFKSwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga2NhbGxvYyhtYXhfbnVtLCBzaXplb2YoTE9DS0lOR19BTkRYX1JBTkdFKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNTg2LDcgKzE1ODYsNyBAQAogCWNpZnNfcmVhZF9mbG9jayhmbG9jaywgJnR5cGUsICZsb2NrLCAmdW5sb2NrLCAmd2FpdF9mbGFnLAogCQkJdGNvbi0+c2VzLT5zZXJ2ZXIpOwogCi0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CisJY2lmc19zYiA9IENJRlNfRklMRV9TQihmaWxlKTsKIAluZXRmaWQgPSBjZmlsZS0+ZmlkLm5ldGZpZDsKIAljaW5vZGUgPSBDSUZTX0koZmlsZV9pbm9kZShmaWxlKSk7CiAKQEAgLTIzMDUsNyArMjMwNSw3IEBACiAJc3RydWN0IGNpZnNfdGNvbiAqdGNvbjsKIAlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXI7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqc21iZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19GSUxFX1NCKGZpbGUpOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CiAKIAlyYyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIGVuZCk7CkBAIC0yNTg1LDcgKzI1ODUsNyBAQAogCWlvdl9pdGVyX3RydW5jYXRlKGZyb20sIGxlbik7CiAKIAlJTklUX0xJU1RfSEVBRCgmd2RhdGFfbGlzdCk7Ci0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CisJY2lmc19zYiA9IENJRlNfRklMRV9TQihmaWxlKTsKIAlvcGVuX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdGNvbiA9IHRsaW5rX3Rjb24ob3Blbl9maWxlLT50bGluayk7CiAKQEAgLTMwMTAsNyArMzAxMCw3IEBACiAJCXJldHVybiAwOwogCiAJSU5JVF9MSVNUX0hFQUQoJnJkYXRhX2xpc3QpOwotCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOworCWNpZnNfc2IgPSBDSUZTX0ZJTEVfU0IoZmlsZSk7CiAJb3Blbl9maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXRjb24gPSB0bGlua190Y29uKG9wZW5fZmlsZS0+dGxpbmspOwogCkBAIC0zMTU1LDcgKzMxNTUsNyBAQAogCV9fdTMyIHBpZDsKIAogCXhpZCA9IGdldF94aWQoKTsKLQljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKKwljaWZzX3NiID0gQ0lGU19GSUxFX1NCKGZpbGUpOwogCiAJLyogRklYTUU6IHNldCB1cCBoYW5kbGVycyBmb3IgbGFyZ2VyIHJlYWRzIGFuZC9vciBjb252ZXJ0IHRvIGFzeW5jICovCiAJcnNpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNpZnNfc2ItPnJzaXplLCBDSUZTTWF4QnVmU2l6ZSk7CkBAIC0zNDYyLDcgKzM0NjIsNyBAQAogCWludCByYzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRtcGxpc3Q7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqb3Blbl9maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX0ZJTEVfU0IoZmlsZSk7CiAJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyOwogCXBpZF90IHBpZDsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDE5N2NiNTAuLjBjM2NlNDY0IDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC04OTUsNyArODk1LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlbnRyeSwgJmlub2RlLT5pX2RlbnRyeSwgZF9hbGlhcykgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlbnRyeSwgJmlub2RlLT5pX2RlbnRyeSwgZF91LmRfYWxpYXMpIHsKIAkJaWYgKCFkX3VuaGFzaGVkKGRlbnRyeSkgfHwgSVNfUk9PVChkZW50cnkpKSB7CiAJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggYjc0MTVkNS4uMzM3OTQ2MyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTUxMywzOSArNTEzLDExIEBACiB2b2lkCiBkdW1wX3NtYih2b2lkICpidWYsIGludCBzbWJfYnVmX2xlbmd0aCkKIHsKLQlpbnQgaSwgajsKLQljaGFyIGRlYnVnX2xpbmVbMTddOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGJ1ZjsKLQogCWlmICh0cmFjZVNNQiA9PSAwKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHNtYl9idWZfbGVuZ3RoOyBpKyssIGorKykgewotCQlpZiAoaSAlIDggPT0gMCkgewotCQkJLyogaGF2ZSByZWFjaGVkIHRoZSBiZWdpbm5pbmcgb2YgbGluZSAqLwotCQkJcHJpbnRrKEtFUk5fREVCVUcgInwgIik7Ci0JCQlqID0gMDsKLQkJfQotCQlwcmludGsoIiUwIzR4ICIsIGJ1ZmZlcltpXSk7Ci0JCWRlYnVnX2xpbmVbMiAqIGpdID0gJyAnOwotCQlpZiAoaXNwcmludChidWZmZXJbaV0pKQotCQkJZGVidWdfbGluZVsxICsgKDIgKiBqKV0gPSBidWZmZXJbaV07Ci0JCWVsc2UKLQkJCWRlYnVnX2xpbmVbMSArICgyICogaildID0gJ18nOwotCi0JCWlmIChpICUgOCA9PSA3KSB7Ci0JCQkvKiByZWFjaGVkIGVuZCBvZiBsaW5lLCB0aW1lIHRvIHByaW50IGFzY2lpICovCi0JCQlkZWJ1Z19saW5lWzE2XSA9IDA7Ci0JCQlwcmludGsoIiB8ICVzXG4iLCBkZWJ1Z19saW5lKTsKLQkJfQotCX0KLQlmb3IgKDsgaiA8IDg7IGorKykgewotCQlwcmludGsoIiAgICAgIik7Ci0JCWRlYnVnX2xpbmVbMiAqIGpdID0gJyAnOwotCQlkZWJ1Z19saW5lWzEgKyAoMiAqIGopXSA9ICcgJzsKLQl9Ci0JcHJpbnRrKCIgfCAlc1xuIiwgZGVidWdfbGluZSk7Ci0JcmV0dXJuOworCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICIiLCBEVU1QX1BSRUZJWF9OT05FLCA4LCAyLCBidWYsCisJCSAgICAgICBzbWJfYnVmX2xlbmd0aCwgdHJ1ZSk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggOGZkMmE5NS4uOGVhZjIwYSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCWlmICghaW5vZGUpCiAJCWdvdG8gb3V0OwogCi0JYWxpYXMgPSBkX21hdGVyaWFsaXNlX3VuaXF1ZShkZW50cnksIGlub2RlKTsKKwlhbGlhcyA9IGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOwogCWlmIChhbGlhcyAmJiAhSVNfRVJSKGFsaWFzKSkKIAkJZHB1dChhbGlhcyk7CiBvdXQ6CkBAIC0yNjEsNyArMjYxLDcgQEAKIAlpbnQgcmMgPSAwOwogCWNoYXIgKmZ1bGxfcGF0aCA9IE5VTEw7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc0ZpbGU7Ci0Jc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfRklMRV9TQihmaWxlKTsKIAlzdHJ1Y3QgdGNvbl9saW5rICp0bGluayA9IE5VTEw7CiAJc3RydWN0IGNpZnNfdGNvbiAqdGNvbjsKIAlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXI7CkBAIC01NjEsNyArNTYxLDcgQEAKIAlsb2ZmX3QgZmlyc3RfZW50cnlfaW5fYnVmZmVyOwogCWxvZmZfdCBpbmRleF90b19maW5kID0gcG9zOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX0ZJTEVfU0IoZmlsZSk7CiAJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyID0gdGNvbi0+c2VzLT5zZXJ2ZXI7CiAJLyogY2hlY2sgaWYgaW5kZXggaW4gdGhlIGJ1ZmZlciAqLwogCkBAIC02NzksNyArNjc5LDcgQEAKIAkJY2hhciAqc2NyYXRjaF9idWYsIHVuc2lnbmVkIGludCBtYXhfbGVuKQogewogCXN0cnVjdCBjaWZzRmlsZUluZm8gKmZpbGVfaW5mbyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZV9pbm9kZShmaWxlKS0+aV9zYjsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihzYik7CiAJc3RydWN0IGNpZnNfZGlyZW50IGRlID0geyBOVUxMLCB9OwogCXN0cnVjdCBjaWZzX2ZhdHRyIGZhdHRyOwpAQCAtNzUzLDcgKzc1Myw3IEBACiAJCSAqLwogCQlmYXR0ci5jZl9mbGFncyB8PSBDSUZTX0ZBVFRSX05FRURfUkVWQUw7CiAKLQljaWZzX3ByaW1lX2RjYWNoZShmaWxlLT5mX2RlbnRyeSwgJm5hbWUsICZmYXR0cik7CisJY2lmc19wcmltZV9kY2FjaGUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgJm5hbWUsICZmYXR0cik7CiAKIAlpbm8gPSBjaWZzX3VuaXF1ZWlkX3RvX2lub190KGZhdHRyLmNmX3VuaXF1ZWlkKTsKIAlyZXR1cm4gIWRpcl9lbWl0KGN0eCwgbmFtZS5uYW1lLCBuYW1lLmxlbiwgaW5vLCBmYXR0ci5jZl9kdHlwZSk7CkBAIC03OTQsMTAgKzc5NCw2IEBACiAJCWlmIGl0IGJlZm9yZSB0aGVuIHJlc3RhcnQgc2VhcmNoCiAJCWlmIGFmdGVyIHRoZW4ga2VlcCBzZWFyY2hpbmcgdGlsbCBmaW5kIGl0ICovCiAKLQlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIHJkZGlyMl9leGl0OwotCX0KIAljaWZzRmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoY2lmc0ZpbGUtPnNyY2hfaW5mLmVuZE9mU2VhcmNoKSB7CiAJCWlmIChjaWZzRmlsZS0+c3JjaF9pbmYuZW1wdHlEaXIpIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc2Vzcy5jIGIvZnMvY2lmcy9zZXNzLmMKaW5kZXggNTdkYjYzZi4uYmNlNmZkYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zZXNzLmMKKysrIGIvZnMvY2lmcy9zZXNzLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkJCQkJQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSAtIDQsCiAJCQkJCVVTSFJUX01BWCkpOwogCXBTTUItPnJlcS5NYXhNcHhDb3VudCA9IGNwdV90b19sZTE2KHNlcy0+c2VydmVyLT5tYXhSZXEpOwotCXBTTUItPnJlcS5WY051bWJlciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSk7CisJcFNNQi0+cmVxLlZjTnVtYmVyID0gY3B1X3RvX2xlMTYoMSk7CiAKIAkvKiBOb3cgbm8gbmVlZCB0byBzZXQgU01CRkxHX0NBU0VMRVNTIG9yIG9ic29sZXRlIENBTk9OSUNBTCBQQVRIICovCiAKQEAgLTEzMDMsNiArMTMwMywxMSBAQAogCWlmIChsZTE2X3RvX2NwdShwU01CLT5yZXNwLkFjdGlvbikgJiBHVUVTVF9MT0dJTikKIAkJY2lmc19kYmcoRllJLCAiR3Vlc3QgbG9naW5cbiIpOyAvKiBCQiBtYXJrIFNlc0luZm8gc3RydWN0PyAqLwogCisJaWYgKHNlcy0+U3VpZCAhPSBzbWJfYnVmLT5VaWQpIHsKKwkJc2VzLT5TdWlkID0gc21iX2J1Zi0+VWlkOworCQljaWZzX2RiZyhGWUksICJVSUQgY2hhbmdlZCEgbmV3IFVJRCA9ICVsbHVcbiIsIHNlcy0+U3VpZCk7CisJfQorCiAJYnl0ZXNfcmVtYWluaW5nID0gZ2V0X2JjYyhzbWJfYnVmKTsKIAliY2NfcHRyID0gcEJ5dGVBcmVhKHNtYl9idWYpOwogCWJsb2JfbGVuID0gbGUxNl90b19jcHUocFNNQi0+cmVzcC5TZWN1cml0eUJsb2JMZW5ndGgpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWIyZmlsZS5jIGIvZnMvY2lmcy9zbWIyZmlsZS5jCmluZGV4IDQ1OTkyOTQuLjcxOThlYWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iMmZpbGUuYworKysgYi9mcy9jaWZzL3NtYjJmaWxlLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1heF9udW0gPSBtYXhfYnVmIC8gc2l6ZW9mKHN0cnVjdCBzbWIyX2xvY2tfZWxlbWVudCk7Ci0JYnVmID0ga3phbGxvYyhtYXhfbnVtICogc2l6ZW9mKHN0cnVjdCBzbWIyX2xvY2tfZWxlbWVudCksIEdGUF9LRVJORUwpOworCWJ1ZiA9IGtjYWxsb2MobWF4X251bSwgc2l6ZW9mKHN0cnVjdCBzbWIyX2xvY2tfZWxlbWVudCksIEdGUF9LRVJORUwpOwogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJfQogCiAJbWF4X251bSA9IG1heF9idWYgLyBzaXplb2Yoc3RydWN0IHNtYjJfbG9ja19lbGVtZW50KTsKLQlidWYgPSBremFsbG9jKG1heF9udW0gKiBzaXplb2Yoc3RydWN0IHNtYjJfbG9ja19lbGVtZW50KSwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga2NhbGxvYyhtYXhfbnVtLCBzaXplb2Yoc3RydWN0IHNtYjJfbG9ja19lbGVtZW50KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKIAkJZnJlZV94aWQoeGlkKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYjJtaXNjLmMgYi9mcy9jaWZzL3NtYjJtaXNjLmMKaW5kZXggMWEwOGEzNC4uZjFjZWZjOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zbWIybWlzYy5jCisrKyBiL2ZzL2NpZnMvc21iMm1pc2MuYwpAQCAtNjcsMjcgKzY3LDI3IEBACiAgKiAgaW5kZXhlZCBieSBjb21tYW5kIGluIGhvc3QgYnl0ZSBvcmRlcgogICovCiBzdGF0aWMgY29uc3QgX19sZTE2IHNtYjJfcnNwX3N0cnVjdF9zaXplc1tOVU1CRVJfT0ZfU01CMl9DT01NQU5EU10gPSB7Ci0JLyogU01CMl9ORUdPVElBVEUgKi8gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NSksCi0JLyogU01CMl9TRVNTSU9OX1NFVFVQICovIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoOSksCi0JLyogU01CMl9MT0dPRkYgKi8gX19jb25zdGFudF9jcHVfdG9fbGUxNig0KSwKLQkvKiBTTUIyX1RSRUVfQ09OTkVDVCAqLyBfX2NvbnN0YW50X2NwdV90b19sZTE2KDE2KSwKLQkvKiBTTUIyX1RSRUVfRElTQ09OTkVDVCAqLyBfX2NvbnN0YW50X2NwdV90b19sZTE2KDQpLAotCS8qIFNNQjJfQ1JFQVRFICovIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoODkpLAotCS8qIFNNQjJfQ0xPU0UgKi8gX19jb25zdGFudF9jcHVfdG9fbGUxNig2MCksCi0JLyogU01CMl9GTFVTSCAqLyBfX2NvbnN0YW50X2NwdV90b19sZTE2KDQpLAotCS8qIFNNQjJfUkVBRCAqLyBfX2NvbnN0YW50X2NwdV90b19sZTE2KDE3KSwKLQkvKiBTTUIyX1dSSVRFICovIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMTcpLAotCS8qIFNNQjJfTE9DSyAqLyBfX2NvbnN0YW50X2NwdV90b19sZTE2KDQpLAotCS8qIFNNQjJfSU9DVEwgKi8gX19jb25zdGFudF9jcHVfdG9fbGUxNig0OSksCisJLyogU01CMl9ORUdPVElBVEUgKi8gY3B1X3RvX2xlMTYoNjUpLAorCS8qIFNNQjJfU0VTU0lPTl9TRVRVUCAqLyBjcHVfdG9fbGUxNig5KSwKKwkvKiBTTUIyX0xPR09GRiAqLyBjcHVfdG9fbGUxNig0KSwKKwkvKiBTTUIyX1RSRUVfQ09OTkVDVCAqLyBjcHVfdG9fbGUxNigxNiksCisJLyogU01CMl9UUkVFX0RJU0NPTk5FQ1QgKi8gY3B1X3RvX2xlMTYoNCksCisJLyogU01CMl9DUkVBVEUgKi8gY3B1X3RvX2xlMTYoODkpLAorCS8qIFNNQjJfQ0xPU0UgKi8gY3B1X3RvX2xlMTYoNjApLAorCS8qIFNNQjJfRkxVU0ggKi8gY3B1X3RvX2xlMTYoNCksCisJLyogU01CMl9SRUFEICovIGNwdV90b19sZTE2KDE3KSwKKwkvKiBTTUIyX1dSSVRFICovIGNwdV90b19sZTE2KDE3KSwKKwkvKiBTTUIyX0xPQ0sgKi8gY3B1X3RvX2xlMTYoNCksCisJLyogU01CMl9JT0NUTCAqLyBjcHVfdG9fbGUxNig0OSksCiAJLyogQkIgQ0hFQ0sgdGhpcyAuLi4gbm90IGxpc3RlZCBpbiBkb2N1bWVudGF0aW9uICovCi0JLyogU01CMl9DQU5DRUwgKi8gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKSwKLQkvKiBTTUIyX0VDSE8gKi8gX19jb25zdGFudF9jcHVfdG9fbGUxNig0KSwKLQkvKiBTTUIyX1FVRVJZX0RJUkVDVE9SWSAqLyBfX2NvbnN0YW50X2NwdV90b19sZTE2KDkpLAotCS8qIFNNQjJfQ0hBTkdFX05PVElGWSAqLyBfX2NvbnN0YW50X2NwdV90b19sZTE2KDkpLAotCS8qIFNNQjJfUVVFUllfSU5GTyAqLyBfX2NvbnN0YW50X2NwdV90b19sZTE2KDkpLAotCS8qIFNNQjJfU0VUX0lORk8gKi8gX19jb25zdGFudF9jcHVfdG9fbGUxNigyKSwKKwkvKiBTTUIyX0NBTkNFTCAqLyBjcHVfdG9fbGUxNigwKSwKKwkvKiBTTUIyX0VDSE8gKi8gY3B1X3RvX2xlMTYoNCksCisJLyogU01CMl9RVUVSWV9ESVJFQ1RPUlkgKi8gY3B1X3RvX2xlMTYoOSksCisJLyogU01CMl9DSEFOR0VfTk9USUZZICovIGNwdV90b19sZTE2KDkpLAorCS8qIFNNQjJfUVVFUllfSU5GTyAqLyBjcHVfdG9fbGUxNig5KSwKKwkvKiBTTUIyX1NFVF9JTkZPICovIGNwdV90b19sZTE2KDIpLAogCS8qIEJCIEZJWE1FIGNhbiBhbHNvIGJlIDQ0IGZvciBsZWFzZSBicmVhayAqLwotCS8qIFNNQjJfT1BMT0NLX0JSRUFLICovIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMjQpCisJLyogU01CMl9PUExPQ0tfQlJFQUsgKi8gY3B1X3RvX2xlMTYoMjQpCiB9OwogCiBpbnQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iMm9wcy5jIGIvZnMvY2lmcy9zbWIyb3BzLmMKaW5kZXggYzVmNTIxYi4uOTNmZDA1OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zbWIyb3BzLmMKKysrIGIvZnMvY2lmcy9zbWIyb3BzLmMKQEAgLTYwMCw3ICs2MDAsNyBAQAogCQlnb3RvIGNjaHVua19vdXQ7CiAKIAkvKiBGb3Igbm93IGFycmF5IG9ubHkgb25lIGNodW5rIGxvbmcsIHdpbGwgbWFrZSBtb3JlIGZsZXhpYmxlIGxhdGVyICovCi0JcGNjaHVuay0+Q2h1bmtDb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSk7CisJcGNjaHVuay0+Q2h1bmtDb3VudCA9IGNwdV90b19sZTMyKDEpOwogCXBjY2h1bmstPlJlc2VydmVkID0gMDsKIAlwY2NodW5rLT5SZXNlcnZlZDIgPSAwOwogCkBAIC0xMTAyLDYgKzExMDIsNjQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBsb25nIHNtYjNfc2ltcGxlX2ZhbGxvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbiwKKwkJCSAgICBsb2ZmX3Qgb2ZmLCBsb2ZmX3QgbGVuLCBib29sIGtlZXBfc2l6ZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaTsKKwlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlsb25nIHJjID0gLUVPUE5PVFNVUFA7CisJdW5zaWduZWQgaW50IHhpZDsKKworCXhpZCA9IGdldF94aWQoKTsKKworCWlub2RlID0gY2ZpbGUtPmRlbnRyeS0+ZF9pbm9kZTsKKwljaWZzaSA9IENJRlNfSShpbm9kZSk7CisKKwkvKiBpZiBmaWxlIG5vdCBvcGxvY2tlZCBjYW4ndCBiZSBzdXJlIHdoZXRoZXIgYXNraW5nIHRvIGV4dGVuZCBzaXplICovCisJaWYgKCFDSUZTX0NBQ0hFX1JFQUQoY2lmc2kpKQorCQlpZiAoa2VlcF9zaXplID09IGZhbHNlKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyoKKwkgKiBGaWxlcyBhcmUgbm9uLXNwYXJzZSBieSBkZWZhdWx0IHNvIGZhbGxvYyBtYXkgYmUgYSBuby1vcAorCSAqIE11c3QgY2hlY2sgaWYgZmlsZSBzcGFyc2UuIElmIG5vdCBzcGFyc2UsIGFuZCBub3QgZXh0ZW5kaW5nCisJICogdGhlbiBubyBuZWVkIHRvIGRvIGFueXRoaW5nIHNpbmNlIGZpbGUgYWxyZWFkeSBhbGxvY2F0ZWQKKwkgKi8KKwlpZiAoKGNpZnNpLT5jaWZzQXR0cnMgJiBGSUxFX0FUVFJJQlVURV9TUEFSU0VfRklMRSkgPT0gMCkgeworCQlpZiAoa2VlcF9zaXplID09IHRydWUpCisJCQlyZXR1cm4gMDsKKwkJLyogY2hlY2sgaWYgZXh0ZW5kaW5nIGZpbGUgKi8KKwkJZWxzZSBpZiAoaV9zaXplX3JlYWQoaW5vZGUpID49IG9mZiArIGxlbikKKwkJCS8qIG5vdCBleHRlbmRpbmcgZmlsZSBhbmQgYWxyZWFkeSBub3Qgc3BhcnNlICovCisJCQlyZXR1cm4gMDsKKwkJLyogQkI6IGluIGZ1dHVyZSBhZGQgZWxzZSBjbGF1c2UgdG8gZXh0ZW5kIGZpbGUgKi8KKwkJZWxzZQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlmICgoa2VlcF9zaXplID09IHRydWUpIHx8IChpX3NpemVfcmVhZChpbm9kZSkgPj0gb2ZmICsgbGVuKSkgeworCQkvKgorCQkgKiBDaGVjayBpZiBmYWxsb2Mgc3RhcnRzIHdpdGhpbiBmaXJzdCBmZXcgcGFnZXMgb2YgZmlsZQorCQkgKiBhbmQgZW5kcyB3aXRoaW4gYSBmZXcgcGFnZXMgb2YgdGhlIGVuZCBvZiBmaWxlIHRvCisJCSAqIGVuc3VyZSB0aGF0IG1vc3Qgb2YgZmlsZSBpcyBiZWluZyBmb3JjZWQgdG8gYmUKKwkJICogZmFsbG9jYXRlZCBub3cuIElmIHNvIHRoZW4gc2V0dGluZyB3aG9sZSBmaWxlIHNwYXJzZQorCQkgKiBpZSBwb3RlbnRpYWxseSBtYWtpbmcgYSBmZXcgZXh0cmEgcGFnZXMgYXQgdGhlIGJlZ2lubmluZworCQkgKiBvciBlbmQgb2YgdGhlIGZpbGUgbm9uLXNwYXJzZSB2aWEgc2V0X3NwYXJzZSBpcyBoYXJtbGVzcy4KKwkJICovCisJCWlmICgob2ZmID4gODE5MikgfHwgKG9mZiArIGxlbiArIDgxOTIgPCBpX3NpemVfcmVhZChpbm9kZSkpKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCXJjID0gc21iMl9zZXRfc3BhcnNlKHhpZCwgdGNvbiwgY2ZpbGUsIGlub2RlLCBmYWxzZSk7CisJfQorCS8qIEJCOiBlbHNlIC4uLiBpbiBmdXR1cmUgYWRkIGNvZGUgdG8gZXh0ZW5kIGZpbGUgYW5kIHNldCBzcGFyc2UgKi8KKworCisJZnJlZV94aWQoeGlkKTsKKwlyZXR1cm4gcmM7Cit9CisKKwogc3RhdGljIGxvbmcgc21iM19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sIGludCBtb2RlLAogCQkJICAgbG9mZl90IG9mZiwgbG9mZl90IGxlbikKIHsKQEAgLTExMTIsNyArMTE3MCwxMCBAQAogCQlpZiAobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpCiAJCQlyZXR1cm4gc21iM196ZXJvX3JhbmdlKGZpbGUsIHRjb24sIG9mZiwgbGVuLCB0cnVlKTsKIAkJcmV0dXJuIHNtYjNfemVyb19yYW5nZShmaWxlLCB0Y29uLCBvZmYsIGxlbiwgZmFsc2UpOwotCX0KKwl9IGVsc2UgaWYgKG1vZGUgPT0gRkFMTE9DX0ZMX0tFRVBfU0laRSkKKwkJcmV0dXJuIHNtYjNfc2ltcGxlX2ZhbGxvYyhmaWxlLCB0Y29uLCBvZmYsIGxlbiwgdHJ1ZSk7CisJZWxzZSBpZiAobW9kZSA9PSAwKQorCQlyZXR1cm4gc21iM19zaW1wbGVfZmFsbG9jKGZpbGUsIHRjb24sIG9mZiwgbGVuLCBmYWxzZSk7CiAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYjJwZHUuYyBiL2ZzL2NpZnMvc21iMnBkdS5jCmluZGV4IDhmMTY3MmIuLjM0MTczNDAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iMnBkdS5jCisrKyBiL2ZzL2NpZnMvc21iMnBkdS5jCkBAIC00MzEsOCArNDMxLDcgQEAKIAlpZiAocmMpCiAJCWdvdG8gbmVnX2V4aXQ7CiAJaWYgKGJsb2JfbGVuZ3RoKQotCQlyYyA9IGRlY29kZV9uZWdfdG9rZW5faW5pdChzZWN1cml0eV9ibG9iLCBibG9iX2xlbmd0aCwKLQkJCQkgICAmc2VydmVyLT5zZWNfdHlwZSk7CisJCXJjID0gZGVjb2RlX25lZ1Rva2VuSW5pdChzZWN1cml0eV9ibG9iLCBibG9iX2xlbmd0aCwgc2VydmVyKTsKIAlpZiAocmMgPT0gMSkKIAkJcmMgPSAwOwogCWVsc2UgaWYgKHJjID09IDApIHsKQEAgLTEzNTksNyArMTM1OCw3IEBACiAJY2hhciAqcmV0X2RhdGEgPSBOVUxMOwogCiAJZnNjdGxfaW5wdXQuQ29tcHJlc3Npb25TdGF0ZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUKTsKKwkJCWNwdV90b19sZTE2KENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUKTsKIAogCXJjID0gU01CMl9pb2N0bCh4aWQsIHRjb24sIHBlcnNpc3RlbnRfZmlkLCB2b2xhdGlsZV9maWQsCiAJCQlGU0NUTF9TRVRfQ09NUFJFU1NJT04sIHRydWUgLyogaXNfZnNjdGwgKi8sCmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYjJwZHUuaCBiL2ZzL2NpZnMvc21iMnBkdS5oCmluZGV4IGUzMTg4YWIuLmNlODU4NDcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iMnBkdS5oCisrKyBiL2ZzL2NpZnMvc21iMnBkdS5oCkBAIC04NSw3ICs4NSw3IEBACiAvKiBCQiBGSVhNRSAtIGFuYWx5emUgZm9sbG93aW5nIGxlbmd0aCBCQiAqLwogI2RlZmluZSBNQVhfU01CMl9IRFJfU0laRSAweDc4IC8qIDQgbGVuICsgNjQgaGRyICsgKDIqMjQgd2N0KSArIDIgYmN0ICsgMiBwYWQgKi8KIAotI2RlZmluZSBTTUIyX1BST1RPX05VTUJFUiBfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4NDI0ZDUzZmUpCisjZGVmaW5lIFNNQjJfUFJPVE9fTlVNQkVSIGNwdV90b19sZTMyKDB4NDI0ZDUzZmUpCiAKIC8qCiAgKiBTTUIyIEhlYWRlciBEZWZpbml0aW9uCkBAIC05Niw3ICs5Niw3IEBACiAgKgogICovCiAKLSNkZWZpbmUgU01CMl9IRUFERVJfU1RSVUNUVVJFX1NJWkUgX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCkKKyNkZWZpbmUgU01CMl9IRUFERVJfU1RSVUNUVVJFX1NJWkUgY3B1X3RvX2xlMTYoNjQpCiAKIHN0cnVjdCBzbWIyX2hkciB7CiAJX19iZTMyIHNtYjJfYnVmX2xlbmd0aDsJLyogYmlnIGVuZGlhbiBvbiB3aXJlICovCkBAIC0xMzcsMTYgKzEzNywxNiBAQAogfSBfX3BhY2tlZDsKIAogLyogRW5jcnlwdGlvbiBBbGdvcml0aG1zICovCi0jZGVmaW5lIFNNQjJfRU5DUllQVElPTl9BRVMxMjhfQ0NNCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBTTUIyX0VOQ1JZUFRJT05fQUVTMTI4X0NDTQljcHVfdG9fbGUxNigweDAwMDEpCiAKIC8qCiAgKglTTUIyIGZsYWcgZGVmaW5pdGlvbnMKICAqLwotI2RlZmluZSBTTUIyX0ZMQUdTX1NFUlZFUl9UT19SRURJUglfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpCi0jZGVmaW5lIFNNQjJfRkxBR1NfQVNZTkNfQ09NTUFORAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFNNQjJfRkxBR1NfUkVMQVRFRF9PUEVSQVRJT05TCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgU01CMl9GTEFHU19TSUdORUQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgU01CMl9GTEFHU19ERlNfT1BFUkFUSU9OUwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MTAwMDAwMDApCisjZGVmaW5lIFNNQjJfRkxBR1NfU0VSVkVSX1RPX1JFRElSCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFNNQjJfRkxBR1NfQVNZTkNfQ09NTUFORAljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBTTUIyX0ZMQUdTX1JFTEFURURfT1BFUkFUSU9OUwljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBTTUIyX0ZMQUdTX1NJR05FRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgU01CMl9GTEFHU19ERlNfT1BFUkFUSU9OUwljcHVfdG9fbGUzMigweDEwMDAwMDAwKQogCiAvKgogICoJRGVmaW5pdGlvbnMgZm9yIFNNQjIgUHJvdG9jb2wgRGF0YSBVbml0cyAobmV0d29yayBmcmFtZXMpCkBAIC0xNTcsNyArMTU3LDcgQEAKICAqCiAgKi8KIAotI2RlZmluZSBTTUIyX0VSUk9SX1NUUlVDVFVSRV9TSVpFMiBfX2NvbnN0YW50X2NwdV90b19sZTE2KDkpCisjZGVmaW5lIFNNQjJfRVJST1JfU1RSVUNUVVJFX1NJWkUyIGNwdV90b19sZTE2KDkpCiAKIHN0cnVjdCBzbWIyX2Vycl9yc3AgewogCXN0cnVjdCBzbWIyX2hkciBoZHI7CkBAIC01MDIsMTIgKzUwMiwxMiBAQAogI2RlZmluZSBTTUIyX0xFQVNFX0hBTkRMRV9DQUNISU5HX0hFCTB4MDIKICNkZWZpbmUgU01CMl9MRUFTRV9XUklURV9DQUNISU5HX0hFCTB4MDQKIAotI2RlZmluZSBTTUIyX0xFQVNFX05PTkUJCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDApCi0jZGVmaW5lIFNNQjJfTEVBU0VfUkVBRF9DQUNISU5HCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDEpCi0jZGVmaW5lIFNNQjJfTEVBU0VfSEFORExFX0NBQ0hJTkcJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAyKQotI2RlZmluZSBTTUIyX0xFQVNFX1dSSVRFX0NBQ0hJTkcJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDA0KQorI2RlZmluZSBTTUIyX0xFQVNFX05PTkUJCQljcHVfdG9fbGUzMigweDAwKQorI2RlZmluZSBTTUIyX0xFQVNFX1JFQURfQ0FDSElORwkJY3B1X3RvX2xlMzIoMHgwMSkKKyNkZWZpbmUgU01CMl9MRUFTRV9IQU5ETEVfQ0FDSElORwljcHVfdG9fbGUzMigweDAyKQorI2RlZmluZSBTTUIyX0xFQVNFX1dSSVRFX0NBQ0hJTkcJY3B1X3RvX2xlMzIoMHgwNCkKIAotI2RlZmluZSBTTUIyX0xFQVNFX0ZMQUdfQlJFQUtfSU5fUFJPR1JFU1MgX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAyKQorI2RlZmluZSBTTUIyX0xFQVNFX0ZMQUdfQlJFQUtfSU5fUFJPR1JFU1MgY3B1X3RvX2xlMzIoMHgwMikKIAogI2RlZmluZSBTTUIyX0xFQVNFX0tFWV9TSVpFIDE2CiAKQEAgLTgzNiw2ICs4MzYsMjUgQEAKICNkZWZpbmUgU01CMl9PX0lORk9fU0VDVVJJVFkJMHgwMwogI2RlZmluZSBTTUIyX09fSU5GT19RVU9UQQkweDA0CiAKKy8qIFNlY3VyaXR5IGluZm8gdHlwZSBhZGRpdGlvbmFsaW5mbyBmbGFncy4gU2VlIE1TLVNNQjIgKDIuMi4zNykgb3IgTVMtRFRZUCAqLworI2RlZmluZSBPV05FUl9TRUNJTkZPICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUk9VUF9TRUNJTkZPICAgMHgwMDAwMDAwMgorI2RlZmluZSBEQUNMX1NFQ0lORk8gICAweDAwMDAwMDA0CisjZGVmaW5lIFNBQ0xfU0VDSU5GTyAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTEFCRUxfU0VDSU5GTyAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVRUUklCVVRFX1NFQ0lORk8gICAweDAwMDAwMDIwCisjZGVmaW5lIFNDT1BFX1NFQ0lORk8gICAweDAwMDAwMDQwCisjZGVmaW5lIEJBQ0tVUF9TRUNJTkZPICAgMHgwMDAxMDAwMAorI2RlZmluZSBVTlBST1RFQ1RFRF9TQUNMX1NFQ0lORk8gICAweDEwMDAwMDAwCisjZGVmaW5lIFVOUFJPVEVDVEVEX0RBQ0xfU0VDSU5GTyAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUFJPVEVDVEVEX1NBQ0xfU0VDSU5GTyAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgUFJPVEVDVEVEX0RBQ0xfU0VDSU5GTyAgIDB4ODAwMDAwMDAKKworLyogRmxhZ3MgdXNlZCBmb3IgRmlsZUZ1bGxFQWluZm8gKi8KKyNkZWZpbmUgU0xfUkVTVEFSVF9TQ0FOCQkweDAwMDAwMDAxCisjZGVmaW5lIFNMX1JFVFVSTl9TSU5HTEVfRU5UUlkJMHgwMDAwMDAwMgorI2RlZmluZSBTTF9JTkRFWF9TUEVDSUZJRUQJMHgwMDAwMDAwNAorCiBzdHJ1Y3Qgc21iMl9xdWVyeV9pbmZvX3JlcSB7CiAJc3RydWN0IHNtYjJfaGRyIGhkcjsKIAlfX2xlMTYgU3RydWN0dXJlU2l6ZTsgLyogTXVzdCBiZSA0MSAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy90cmFuc3BvcnQuYyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKaW5kZXggOWQwODdmNC4uMTI2ZjQ2YiAxMDA2NDQKLS0tIGEvZnMvY2lmcy90cmFuc3BvcnQuYworKysgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCkBAIC05OSw5ICs5OSw5IEBACiAJICAgc29tZXRoaW5nIGlzIHdyb25nLCB1bmxlc3MgaXQgaXMgcXVpdGUgYSBzbG93IGxpbmsgb3Igc2VydmVyICovCiAJaWYgKChub3cgLSBtaWRFbnRyeS0+d2hlbl9hbGxvYykgPiBIWikgewogCQlpZiAoKGNpZnNGWUkgJiBDSUZTX1RJTUVSKSAmJiAobWlkRW50cnktPmNvbW1hbmQgIT0gY29tbWFuZCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgQ0lGUyBzbG93IHJzcDogY21kICVkIG1pZCAlbGx1IiwKKwkJCXByX2RlYnVnKCIgQ0lGUyBzbG93IHJzcDogY21kICVkIG1pZCAlbGx1IiwKIAkJCSAgICAgICBtaWRFbnRyeS0+Y29tbWFuZCwgbWlkRW50cnktPm1pZCk7Ci0JCQlwcmludGsoIiBBOiAweCVseCBTOiAweCVseCBSOiAweCVseFxuIiwKKwkJCXByX2luZm8oIiBBOiAweCVseCBTOiAweCVseCBSOiAweCVseFxuIiwKIAkJCSAgICAgICBub3cgLSBtaWRFbnRyeS0+d2hlbl9hbGxvYywKIAkJCSAgICAgICBub3cgLSBtaWRFbnRyeS0+d2hlbl9zZW50LAogCQkJICAgICAgIG5vdyAtIG1pZEVudHJ5LT53aGVuX3JlY2VpdmVkKTsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvY2FjaGUuYyBiL2ZzL2NvZGEvY2FjaGUuYwppbmRleCAyNzhmOGZkLi40NmVlNmYyIDEwMDY0NAotLS0gYS9mcy9jb2RhL2NhY2hlLmMKKysrIGIvZnMvY29kYS9jYWNoZS5jCkBAIC05Miw3ICs5Miw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGU7CiAKIAlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlLCAmcGFyZW50LT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZSwgJnBhcmVudC0+ZF9zdWJkaXJzLCBkX2NoaWxkKSB7CiAJCS8qIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIG5lZ2F0aXZlIGRlbnRyaWVzICovCiAJCWlmIChkZS0+ZF9pbm9kZSApIAogCQkJY29kYV9mbGFnX2lub2RlKGRlLT5kX2lub2RlLCBmbGFnKTsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvY29kYV9saW51eC5jIGIvZnMvY29kYS9jb2RhX2xpbnV4LmMKaW5kZXggMTMyNmQzOC4uZjE3MTRjZiAxMDA2NDQKLS0tIGEvZnMvY29kYS9jb2RhX2xpbnV4LmMKKysrIGIvZnMvY29kYS9jb2RhX2xpbnV4LmMKQEAgLTQwLDEyICs0MCw2IEBACiAgICAgICAgICAgICAgICAgKHN0cm5jbXAobmFtZSwgQ09EQV9DT05UUk9MLCBDT0RBX0NPTlRST0xMRU4pID09IDApKTsKIH0KIAotLyogcmVjb2duaXplIC9jb2RhIGlub2RlICovCi1pbnQgY29kYV9pc3Jvb3Qoc3RydWN0IGlub2RlICppKQotewotICAgIHJldHVybiAoIGktPmlfc2ItPnNfcm9vdC0+ZF9pbm9kZSA9PSBpICk7Ci19Ci0KIHVuc2lnbmVkIHNob3J0IGNvZGFfZmxhZ3NfdG9fY2ZsYWdzKHVuc2lnbmVkIHNob3J0IGZsYWdzKQogewogCXVuc2lnbmVkIHNob3J0IGNvZGFfZmxhZ3MgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvY29kYS9jb2RhX2xpbnV4LmggYi9mcy9jb2RhL2NvZGFfbGludXguaAppbmRleCBkNDJiNzI1Li5kNmY3YTc2IDEwMDY0NAotLS0gYS9mcy9jb2RhL2NvZGFfbGludXguaAorKysgYi9mcy9jb2RhL2NvZGFfbGludXguaApAQCAtNTIsNyArNTIsNiBAQAogCiAvKiB0aGlzIGZpbGU6ICBoZWxvZXJzICovCiBjaGFyICpjb2RhX2YycyhzdHJ1Y3QgQ29kYUZpZCAqZik7Ci1pbnQgY29kYV9pc3Jvb3Qoc3RydWN0IGlub2RlICppKTsKIGludCBjb2RhX2lzY29udHJvbChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuZ3RoKTsKIAogdm9pZCBjb2RhX3ZhdHRyX3RvX2lhdHRyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgY29kYV92YXR0ciAqKTsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jCmluZGV4IDljM2RlZGMuLjdmZjAyNTkgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvZGlyLmMKKysrIGIvZnMvY29kYS9kaXIuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJfQogCiAJLyogY29udHJvbCBvYmplY3QsIGNyZWF0ZSBpbm9kZSBvbiB0aGUgZmx5ICovCi0JaWYgKGNvZGFfaXNyb290KGRpcikgJiYgY29kYV9pc2NvbnRyb2wobmFtZSwgbGVuZ3RoKSkgeworCWlmIChpc19yb290X2lub2RlKGRpcikgJiYgY29kYV9pc2NvbnRyb2wobmFtZSwgbGVuZ3RoKSkgewogCQlpbm9kZSA9IGNvZGFfY25vZGVfbWFrZWN0bChzYik7CiAJCXR5cGUgPSBDT0RBX05PQ0FDSEU7CiAJfSBlbHNlIHsKQEAgLTE5NSw3ICsxOTUsNyBAQAogCXN0cnVjdCBDb2RhRmlkIG5ld2ZpZDsKIAlzdHJ1Y3QgY29kYV92YXR0ciBhdHRyczsKIAotCWlmIChjb2RhX2lzcm9vdChkaXIpICYmIGNvZGFfaXNjb250cm9sKG5hbWUsIGxlbmd0aCkpCisJaWYgKGlzX3Jvb3RfaW5vZGUoZGlyKSAmJiBjb2RhX2lzY29udHJvbChuYW1lLCBsZW5ndGgpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJZXJyb3IgPSB2ZW51c19jcmVhdGUoZGlyLT5pX3NiLCBjb2RhX2kyZihkaXIpLCBuYW1lLCBsZW5ndGgsIApAQCAtMjI3LDcgKzIyNyw3IEBACiAJaW50IGVycm9yOwogCXN0cnVjdCBDb2RhRmlkIG5ld2ZpZDsKIAotCWlmIChjb2RhX2lzcm9vdChkaXIpICYmIGNvZGFfaXNjb250cm9sKG5hbWUsIGxlbikpCisJaWYgKGlzX3Jvb3RfaW5vZGUoZGlyKSAmJiBjb2RhX2lzY29udHJvbChuYW1lLCBsZW4pKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJYXR0cnMudmFfbW9kZSA9IG1vZGU7CkBAIC0yNjEsNyArMjYxLDcgQEAKIAlpbnQgbGVuID0gZGUtPmRfbmFtZS5sZW47CiAJaW50IGVycm9yOwogCi0JaWYgKGNvZGFfaXNyb290KGRpcl9pbm9kZSkgJiYgY29kYV9pc2NvbnRyb2wobmFtZSwgbGVuKSkKKwlpZiAoaXNfcm9vdF9pbm9kZShkaXJfaW5vZGUpICYmIGNvZGFfaXNjb250cm9sKG5hbWUsIGxlbikpCiAJCXJldHVybiAtRVBFUk07CiAKIAllcnJvciA9IHZlbnVzX2xpbmsoZGlyX2lub2RlLT5pX3NiLCBjb2RhX2kyZihpbm9kZSksCkBAIC0yODcsNyArMjg3LDcgQEAKIAlpbnQgc3ltbGVuOwogCWludCBlcnJvcjsKIAotCWlmIChjb2RhX2lzcm9vdChkaXJfaW5vZGUpICYmIGNvZGFfaXNjb250cm9sKG5hbWUsIGxlbikpCisJaWYgKGlzX3Jvb3RfaW5vZGUoZGlyX2lub2RlKSAmJiBjb2RhX2lzY29udHJvbChuYW1lLCBsZW4pKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJc3ltbGVuID0gc3RybGVuKHN5bW5hbWUpOwpAQCAtNTA3LDcgKzUwNyw3IEBACiAJCXJldHVybiAtRUNISUxEOwogCiAJaW5vZGUgPSBkZS0+ZF9pbm9kZTsKLQlpZiAoIWlub2RlIHx8IGNvZGFfaXNyb290KGlub2RlKSkKKwlpZiAoIWlub2RlIHx8IGlzX3Jvb3RfaW5vZGUoaW5vZGUpKQogCQlnb3RvIG91dDsKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJZ290byBiYWQ7CmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IGIxM2RmOTkuLjZmZDI3MmQgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC04NDcsMTAgKzg0NywxMiBAQAogCWludCByZXN1bHQ7CiB9OwogCi1zdGF0aWMgaW50IGNvbXBhdF9maWxsb25lZGlyKHZvaWQgKl9fYnVmLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtbGVuLAotCQkJbG9mZl90IG9mZnNldCwgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKK3N0YXRpYyBpbnQgY29tcGF0X2ZpbGxvbmVkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIGludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sCisJCQkgICAgIHVuc2lnbmVkIGludCBkX3R5cGUpCiB7Ci0Jc3RydWN0IGNvbXBhdF9yZWFkZGlyX2NhbGxiYWNrICpidWYgPSBfX2J1ZjsKKwlzdHJ1Y3QgY29tcGF0X3JlYWRkaXJfY2FsbGJhY2sgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBjb21wYXRfcmVhZGRpcl9jYWxsYmFjaywgY3R4KTsKIAlzdHJ1Y3QgY29tcGF0X29sZF9saW51eF9kaXJlbnQgX191c2VyICpkaXJlbnQ7CiAJY29tcGF0X3Vsb25nX3QgZF9pbm87CiAKQEAgLTkxNSwxMSArOTE3LDEyIEBACiAJaW50IGVycm9yOwogfTsKIAotc3RhdGljIGludCBjb21wYXRfZmlsbGRpcih2b2lkICpfX2J1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWxlbiwKK3N0YXRpYyBpbnQgY29tcGF0X2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1sZW4sCiAJCWxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCiB7CiAJc3RydWN0IGNvbXBhdF9saW51eF9kaXJlbnQgX191c2VyICogZGlyZW50OwotCXN0cnVjdCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJhY2sgKmJ1ZiA9IF9fYnVmOworCXN0cnVjdCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJhY2sgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJhY2ssIGN0eCk7CiAJY29tcGF0X3Vsb25nX3QgZF9pbm87CiAJaW50IHJlY2xlbiA9IEFMSUdOKG9mZnNldG9mKHN0cnVjdCBjb21wYXRfbGludXhfZGlyZW50LCBkX25hbWUpICsKIAkJbmFtbGVuICsgMiwgc2l6ZW9mKGNvbXBhdF9sb25nX3QpKTsKQEAgLTEwMDEsMTEgKzEwMDQsMTMgQEAKIAlpbnQgZXJyb3I7CiB9OwogCi1zdGF0aWMgaW50IGNvbXBhdF9maWxsZGlyNjQodm9pZCAqIF9fYnVmLCBjb25zdCBjaGFyICogbmFtZSwgaW50IG5hbWxlbiwgbG9mZl90IG9mZnNldCwKLQkJICAgICB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQorc3RhdGljIGludCBjb21wYXRfZmlsbGRpcjY0KHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgIGludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sCisJCQkgICAgdW5zaWduZWQgaW50IGRfdHlwZSkKIHsKIAlzdHJ1Y3QgbGludXhfZGlyZW50NjQgX191c2VyICpkaXJlbnQ7Ci0Jc3RydWN0IGNvbXBhdF9nZXRkZW50c19jYWxsYmFjazY0ICpidWYgPSBfX2J1ZjsKKwlzdHJ1Y3QgY29tcGF0X2dldGRlbnRzX2NhbGxiYWNrNjQgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJhY2s2NCwgY3R4KTsKIAlpbnQgcmVjbGVuID0gQUxJR04ob2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2RpcmVudDY0LCBkX25hbWUpICsgbmFtbGVuICsgMSwKIAkJc2l6ZW9mKHU2NCkpOwogCXU2NCBvZmY7CmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9kaXIuYyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCmluZGV4IDY2OGRjYWIuLmM5YzI5OGIgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jCisrKyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCkBAIC0zODYsNyArMzg2LDcgQEAKIAlpZiAoZC0+ZF9pbm9kZSkKIAkJc2ltcGxlX3JtZGlyKHBhcmVudC0+ZF9pbm9kZSxkKTsKIAotCXByX2RlYnVnKCIgbyAlcyByZW1vdmluZyBkb25lICglZClcbiIsZC0+ZF9uYW1lLm5hbWUsIGRfY291bnQoZCkpOworCXByX2RlYnVnKCIgbyAlcGQgcmVtb3ZpbmcgZG9uZSAoJWQpXG4iLCBkLCBkX2NvdW50KGQpKTsKIAogCWRwdXQocGFyZW50KTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggNWJjNzJiMC4uZTM2OGQ0ZiAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIC8qCiAgKiBVc2FnZToKICAqIGRjYWNoZS0+ZF9pbm9kZS0+aV9sb2NrIHByb3RlY3RzOgotICogICAtIGlfZGVudHJ5LCBkX2FsaWFzLCBkX2lub2RlIG9mIGFsaWFzZXMKKyAqICAgLSBpX2RlbnRyeSwgZF91LmRfYWxpYXMsIGRfaW5vZGUgb2YgYWxpYXNlcwogICogZGNhY2hlX2hhc2hfYnVja2V0IGxvY2sgcHJvdGVjdHM6CiAgKiAgIC0gdGhlIGRjYWNoZSBoYXNoIHRhYmxlCiAgKiBzX2Fub24gYmwgbGlzdCBzcGlubG9jayBwcm90ZWN0czoKQEAgLTU5LDcgKzU5LDcgQEAKICAqICAgLSBkX3VuaGFzaGVkKCkKICAqICAgLSBkX3BhcmVudCBhbmQgZF9zdWJkaXJzCiAgKiAgIC0gY2hpbGRyZW5zJyBkX2NoaWxkIGFuZCBkX3BhcmVudAotICogICAtIGRfYWxpYXMsIGRfaW5vZGUKKyAqICAgLSBkX3UuZF9hbGlhcywgZF9pbm9kZQogICoKICAqIE9yZGVyaW5nOgogICogZGVudHJ5LT5kX2lub2RlLT5pX2xvY2sKQEAgLTI1MiwxNCArMjUyLDEyIEBACiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBkZW50cnksIGRfdS5kX3JjdSk7CiAKLQlXQVJOX09OKCFobGlzdF91bmhhc2hlZCgmZGVudHJ5LT5kX2FsaWFzKSk7CiAJa21lbV9jYWNoZV9mcmVlKGRlbnRyeV9jYWNoZSwgZGVudHJ5KTsgCiB9CiAKIHN0YXRpYyB2b2lkIF9fZF9mcmVlX2V4dGVybmFsKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGRlbnRyeSwgZF91LmRfcmN1KTsKLQlXQVJOX09OKCFobGlzdF91bmhhc2hlZCgmZGVudHJ5LT5kX2FsaWFzKSk7CiAJa2ZyZWUoZXh0ZXJuYWxfbmFtZShkZW50cnkpKTsKIAlrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyAKIH0KQEAgLTI3MSw2ICsyNjksNyBAQAogCiBzdGF0aWMgdm9pZCBkZW50cnlfZnJlZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CisJV0FSTl9PTighaGxpc3RfdW5oYXNoZWQoJmRlbnRyeS0+ZF91LmRfYWxpYXMpKTsKIAlpZiAodW5saWtlbHkoZG5hbWVfZXh0ZXJuYWwoZGVudHJ5KSkpIHsKIAkJc3RydWN0IGV4dGVybmFsX25hbWUgKnAgPSBleHRlcm5hbF9uYW1lKGRlbnRyeSk7CiAJCWlmIChsaWtlbHkoYXRvbWljX2RlY19hbmRfdGVzdCgmcC0+dS5jb3VudCkpKSB7CkBAIC0zMTEsNyArMzEwLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWlmIChpbm9kZSkgewogCQlkZW50cnktPmRfaW5vZGUgPSBOVUxMOwotCQlobGlzdF9kZWxfaW5pdCgmZGVudHJ5LT5kX2FsaWFzKTsKKwkJaGxpc3RfZGVsX2luaXQoJmRlbnRyeS0+ZF91LmRfYWxpYXMpOwogCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCWlmICghaW5vZGUtPmlfbmxpbmspCkBAIC0zMzYsNyArMzM1LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCV9fZF9jbGVhcl90eXBlKGRlbnRyeSk7CiAJZGVudHJ5LT5kX2lub2RlID0gTlVMTDsKLQlobGlzdF9kZWxfaW5pdCgmZGVudHJ5LT5kX2FsaWFzKTsKKwlobGlzdF9kZWxfaW5pdCgmZGVudHJ5LT5kX3UuZF9hbGlhcyk7CiAJZGVudHJ5X3JjdXdhbGtfYmFycmllcihkZW50cnkpOwogCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwpAQCAtNDk2LDcgKzQ5NSw3IEBACiAJfQogCS8qIGlmIGl0IHdhcyBvbiB0aGUgaGFzaCB0aGVuIHJlbW92ZSBpdCAqLwogCV9fZF9kcm9wKGRlbnRyeSk7Ci0JbGlzdF9kZWwoJmRlbnRyeS0+ZF91LmRfY2hpbGQpOworCV9fbGlzdF9kZWxfZW50cnkoJmRlbnRyeS0+ZF9jaGlsZCk7CiAJLyoKIAkgKiBJbmZvcm0gZF93YWxrKCkgdGhhdCB3ZSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRvIHRoZQogCSAqIGRlbnRyeSB0cmVlCkBAIC03MjIsNyArNzIxLDcgQEAKIAogYWdhaW46CiAJZGlzY29uX2FsaWFzID0gTlVMTDsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShhbGlhcywgJmlub2RlLT5pX2RlbnRyeSwgZF9hbGlhcykgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsaWFzLCAmaW5vZGUtPmlfZGVudHJ5LCBkX3UuZF9hbGlhcykgewogCQlzcGluX2xvY2soJmFsaWFzLT5kX2xvY2spOwogIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgIWRfdW5oYXNoZWQoYWxpYXMpKSB7CiAJCQlpZiAoSVNfUk9PVChhbGlhcykgJiYKQEAgLTc3Miw3ICs3NzEsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIHJlc3RhcnQ6CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShkZW50cnksICZpbm9kZS0+aV9kZW50cnksIGRfYWxpYXMpIHsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShkZW50cnksICZpbm9kZS0+aV9kZW50cnksIGRfdS5kX2FsaWFzKSB7CiAJCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQlpZiAoIWRlbnRyeS0+ZF9sb2NrcmVmLmNvdW50KSB7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBsb2NrX3BhcmVudChkZW50cnkpOwpAQCAtMTA1MSw3ICsxMDUwLDcgQEAKIHJlc3VtZToKIAl3aGlsZSAobmV4dCAhPSAmdGhpc19wYXJlbnQtPmRfc3ViZGlycykgewogCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBuZXh0OwotCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGRlbnRyeSwgZF91LmRfY2hpbGQpOworCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGRlbnRyeSwgZF9jaGlsZCk7CiAJCW5leHQgPSB0bXAtPm5leHQ7CiAKIAkJc3Bpbl9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKQEAgLTEwODMsMzMgKzEwODIsMzEgQEAKIAkvKgogCSAqIEFsbCBkb25lIGF0IHRoaXMgbGV2ZWwgLi4uIGFzY2VuZCBhbmQgcmVzdW1lIHRoZSBzZWFyY2guCiAJICovCisJcmN1X3JlYWRfbG9jaygpOworYXNjZW5kOgogCWlmICh0aGlzX3BhcmVudCAhPSBwYXJlbnQpIHsKIAkJc3RydWN0IGRlbnRyeSAqY2hpbGQgPSB0aGlzX3BhcmVudDsKIAkJdGhpc19wYXJlbnQgPSBjaGlsZC0+ZF9wYXJlbnQ7CiAKLQkJcmN1X3JlYWRfbG9jaygpOwogCQlzcGluX3VubG9jaygmY2hpbGQtPmRfbG9jayk7CiAJCXNwaW5fbG9jaygmdGhpc19wYXJlbnQtPmRfbG9jayk7CiAKLQkJLyoKLQkJICogbWlnaHQgZ28gYmFjayB1cCB0aGUgd3JvbmcgcGFyZW50IGlmIHdlIGhhdmUgaGFkIGEgcmVuYW1lCi0JCSAqIG9yIGRlbGV0aW9uCi0JCSAqLwotCQlpZiAodGhpc19wYXJlbnQgIT0gY2hpbGQtPmRfcGFyZW50IHx8Ci0JCQkgKGNoaWxkLT5kX2ZsYWdzICYgRENBQ0hFX0RFTlRSWV9LSUxMRUQpIHx8Ci0JCQkgbmVlZF9zZXFyZXRyeSgmcmVuYW1lX2xvY2ssIHNlcSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZ0aGlzX3BhcmVudC0+ZF9sb2NrKTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOworCQkvKiBtaWdodCBnbyBiYWNrIHVwIHRoZSB3cm9uZyBwYXJlbnQgaWYgd2UgaGF2ZSBoYWQgYSByZW5hbWUuICovCisJCWlmIChuZWVkX3NlcXJldHJ5KCZyZW5hbWVfbG9jaywgc2VxKSkKIAkJCWdvdG8gcmVuYW1lX3JldHJ5OworCQluZXh0ID0gY2hpbGQtPmRfY2hpbGQubmV4dDsKKwkJd2hpbGUgKHVubGlrZWx5KGNoaWxkLT5kX2ZsYWdzICYgRENBQ0hFX0RFTlRSWV9LSUxMRUQpKSB7CisJCQlpZiAobmV4dCA9PSAmdGhpc19wYXJlbnQtPmRfc3ViZGlycykKKwkJCQlnb3RvIGFzY2VuZDsKKwkJCWNoaWxkID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgZGVudHJ5LCBkX2NoaWxkKTsKKwkJCW5leHQgPSBuZXh0LT5uZXh0OwogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQluZXh0ID0gY2hpbGQtPmRfdS5kX2NoaWxkLm5leHQ7CiAJCWdvdG8gcmVzdW1lOwogCX0KLQlpZiAobmVlZF9zZXFyZXRyeSgmcmVuYW1lX2xvY2ssIHNlcSkpIHsKLQkJc3Bpbl91bmxvY2soJnRoaXNfcGFyZW50LT5kX2xvY2spOworCWlmIChuZWVkX3NlcXJldHJ5KCZyZW5hbWVfbG9jaywgc2VxKSkKIAkJZ290byByZW5hbWVfcmV0cnk7Ci0JfQorCXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChmaW5pc2gpCiAJCWZpbmlzaChkYXRhKTsKIApAQCAtMTExOSw2ICsxMTE2LDkgQEAKIAlyZXR1cm47CiAKIHJlbmFtZV9yZXRyeToKKwlzcGluX3VubG9jaygmdGhpc19wYXJlbnQtPmRfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJQlVHX09OKHNlcSAmIDEpOwogCWlmICghcmV0cnkpCiAJCXJldHVybjsKIAlzZXEgPSAxOwpAQCAtMTQ1NSw4ICsxNDU1LDggQEAKIAlJTklUX0hMSVNUX0JMX05PREUoJmRlbnRyeS0+ZF9oYXNoKTsKIAlJTklUX0xJU1RfSEVBRCgmZGVudHJ5LT5kX2xydSk7CiAJSU5JVF9MSVNUX0hFQUQoJmRlbnRyeS0+ZF9zdWJkaXJzKTsKLQlJTklUX0hMSVNUX05PREUoJmRlbnRyeS0+ZF9hbGlhcyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRlbnRyeS0+ZF91LmRfY2hpbGQpOworCUlOSVRfSExJU1RfTk9ERSgmZGVudHJ5LT5kX3UuZF9hbGlhcyk7CisJSU5JVF9MSVNUX0hFQUQoJmRlbnRyeS0+ZF9jaGlsZCk7CiAJZF9zZXRfZF9vcChkZW50cnksIGRlbnRyeS0+ZF9zYi0+c19kX29wKTsKIAogCXRoaXNfY3B1X2luYyhucl9kZW50cnkpOwpAQCAtMTQ4Niw3ICsxNDg2LDcgQEAKIAkgKi8KIAlfX2RnZXRfZGxvY2socGFyZW50KTsKIAlkZW50cnktPmRfcGFyZW50ID0gcGFyZW50OwotCWxpc3RfYWRkKCZkZW50cnktPmRfdS5kX2NoaWxkLCAmcGFyZW50LT5kX3N1YmRpcnMpOworCWxpc3RfYWRkKCZkZW50cnktPmRfY2hpbGQsICZwYXJlbnQtPmRfc3ViZGlycyk7CiAJc3Bpbl91bmxvY2soJnBhcmVudC0+ZF9sb2NrKTsKIAogCXJldHVybiBkZW50cnk7CkBAIC0xNTc5LDcgKzE1NzksNyBAQAogCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCV9fZF9zZXRfdHlwZShkZW50cnksIGFkZF9mbGFncyk7CiAJaWYgKGlub2RlKQotCQlobGlzdF9hZGRfaGVhZCgmZGVudHJ5LT5kX2FsaWFzLCAmaW5vZGUtPmlfZGVudHJ5KTsKKwkJaGxpc3RfYWRkX2hlYWQoJmRlbnRyeS0+ZF91LmRfYWxpYXMsICZpbm9kZS0+aV9kZW50cnkpOwogCWRlbnRyeS0+ZF9pbm9kZSA9IGlub2RlOwogCWRlbnRyeV9yY3V3YWxrX2JhcnJpZXIoZGVudHJ5KTsKIAlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAKICAKIHZvaWQgZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlub2RlICogaW5vZGUpCiB7Ci0JQlVHX09OKCFobGlzdF91bmhhc2hlZCgmZW50cnktPmRfYWxpYXMpKTsKKwlCVUdfT04oIWhsaXN0X3VuaGFzaGVkKCZlbnRyeS0+ZF91LmRfYWxpYXMpKTsKIAlpZiAoaW5vZGUpCiAJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJX19kX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7CkBAIC0xNjQyLDcgKzE2NDIsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShhbGlhcywgJmlub2RlLT5pX2RlbnRyeSwgZF9hbGlhcykgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsaWFzLCAmaW5vZGUtPmlfZGVudHJ5LCBkX3UuZF9hbGlhcykgewogCQkvKgogCQkgKiBEb24ndCBuZWVkIGFsaWFzLT5kX2xvY2sgaGVyZSwgYmVjYXVzZSBhbGlhc2VzIHdpdGgKIAkJICogZF9wYXJlbnQgPT0gZW50cnktPmRfcGFyZW50IGFyZSBub3Qgc3ViamVjdCB0byBuYW1lIG9yCkBAIC0xNjY4LDcgKzE2NjgsNyBAQAogewogCXN0cnVjdCBkZW50cnkgKnJlc3VsdDsKIAotCUJVR19PTighaGxpc3RfdW5oYXNoZWQoJmVudHJ5LT5kX2FsaWFzKSk7CisJQlVHX09OKCFobGlzdF91bmhhc2hlZCgmZW50cnktPmRfdS5kX2FsaWFzKSk7CiAKIAlpZiAoaW5vZGUpCiAJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CkBAIC0xNjk5LDcgKzE2OTksNyBAQAogICovCiBpbnQgZF9pbnN0YW50aWF0ZV9ub19kaXJhbGlhcyhzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlCVUdfT04oIWhsaXN0X3VuaGFzaGVkKCZlbnRyeS0+ZF9hbGlhcykpOworCUJVR19PTighaGxpc3RfdW5oYXNoZWQoJmVudHJ5LT5kX3UuZF9hbGlhcykpOwogCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiAhaGxpc3RfZW1wdHkoJmlub2RlLT5pX2RlbnRyeSkpIHsKQEAgLTE3MzgsNyArMTczOCw3IEBACiAKIAlpZiAoaGxpc3RfZW1wdHkoJmlub2RlLT5pX2RlbnRyeSkpCiAJCXJldHVybiBOVUxMOwotCWFsaWFzID0gaGxpc3RfZW50cnkoaW5vZGUtPmlfZGVudHJ5LmZpcnN0LCBzdHJ1Y3QgZGVudHJ5LCBkX2FsaWFzKTsKKwlhbGlhcyA9IGhsaXN0X2VudHJ5KGlub2RlLT5pX2RlbnRyeS5maXJzdCwgc3RydWN0IGRlbnRyeSwgZF91LmRfYWxpYXMpOwogCV9fZGdldChhbGlhcyk7CiAJcmV0dXJuIGFsaWFzOwogfQpAQCAtMTgwMCw3ICsxODAwLDcgQEAKIAlzcGluX2xvY2soJnRtcC0+ZF9sb2NrKTsKIAl0bXAtPmRfaW5vZGUgPSBpbm9kZTsKIAl0bXAtPmRfZmxhZ3MgfD0gYWRkX2ZsYWdzOwotCWhsaXN0X2FkZF9oZWFkKCZ0bXAtPmRfYWxpYXMsICZpbm9kZS0+aV9kZW50cnkpOworCWhsaXN0X2FkZF9oZWFkKCZ0bXAtPmRfdS5kX2FsaWFzLCAmaW5vZGUtPmlfZGVudHJ5KTsKIAlobGlzdF9ibF9sb2NrKCZ0bXAtPmRfc2ItPnNfYW5vbik7CiAJaGxpc3RfYmxfYWRkX2hlYWQoJnRtcC0+ZF9oYXNoLCAmdG1wLT5kX3NiLT5zX2Fub24pOwogCWhsaXN0X2JsX3VubG9jaygmdG1wLT5kX3NiLT5zX2Fub24pOwpAQCAtMTg4OSw1MSArMTg4OSwxOSBAQAogCSAqIGlmIG5vdCBnbyBhaGVhZCBhbmQgY3JlYXRlIGl0IG5vdy4KIAkgKi8KIAlmb3VuZCA9IGRfaGFzaF9hbmRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQsIG5hbWUpOwotCWlmICh1bmxpa2VseShJU19FUlIoZm91bmQpKSkKLQkJZ290byBlcnJfb3V0OwogCWlmICghZm91bmQpIHsKIAkJbmV3ID0gZF9hbGxvYyhkZW50cnktPmRfcGFyZW50LCBuYW1lKTsKIAkJaWYgKCFuZXcpIHsKIAkJCWZvdW5kID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJCWdvdG8gZXJyX291dDsKKwkJfSBlbHNlIHsKKwkJCWZvdW5kID0gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIG5ldyk7CisJCQlpZiAoZm91bmQpIHsKKwkJCQlkcHV0KG5ldyk7CisJCQkJcmV0dXJuIGZvdW5kOworCQkJfQorCQkJcmV0dXJuIG5ldzsKIAkJfQotCi0JCWZvdW5kID0gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIG5ldyk7Ci0JCWlmIChmb3VuZCkgewotCQkJZHB1dChuZXcpOwotCQkJcmV0dXJuIGZvdW5kOwotCQl9Ci0JCXJldHVybiBuZXc7CiAJfQotCi0JLyoKLQkgKiBJZiBhIG1hdGNoaW5nIGRlbnRyeSBleGlzdHMsIGFuZCBpdCdzIG5vdCBuZWdhdGl2ZSB1c2UgaXQuCi0JICoKLQkgKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCB0byBiYWxhbmNlIHRoZSBpZ2V0KCkgZG9uZQotCSAqIGVhcmxpZXIgb24uCi0JICovCi0JaWYgKGZvdW5kLT5kX2lub2RlKSB7Ci0JCWlmICh1bmxpa2VseShmb3VuZC0+ZF9pbm9kZSAhPSBpbm9kZSkpIHsKLQkJCS8qIFRoaXMgY2FuJ3QgaGFwcGVuIGJlY2F1c2UgYmFkIGlub2RlcyBhcmUgdW5oYXNoZWQuICovCi0JCQlCVUdfT04oIWlzX2JhZF9pbm9kZShpbm9kZSkpOwotCQkJQlVHX09OKCFpc19iYWRfaW5vZGUoZm91bmQtPmRfaW5vZGUpKTsKLQkJfQotCQlpcHV0KGlub2RlKTsKLQkJcmV0dXJuIGZvdW5kOwotCX0KLQotCS8qCi0JICogTmVnYXRpdmUgZGVudHJ5OiBpbnN0YW50aWF0ZSBpdCB1bmxlc3MgdGhlIGlub2RlIGlzIGEgZGlyZWN0b3J5IGFuZAotCSAqIGFscmVhZHkgaGFzIGEgZGVudHJ5LgotCSAqLwotCW5ldyA9IGRfc3BsaWNlX2FsaWFzKGlub2RlLCBmb3VuZCk7Ci0JaWYgKG5ldykgewotCQlkcHV0KGZvdW5kKTsKLQkJZm91bmQgPSBuZXc7Ci0JfQotCXJldHVybiBmb3VuZDsKLQotZXJyX291dDoKIAlpcHV0KGlub2RlKTsKIAlyZXR1cm4gZm91bmQ7CiB9CkBAIC0yMjM1LDcgKzIyMDMsNyBAQAogCXN0cnVjdCBkZW50cnkgKmNoaWxkOwogCiAJc3Bpbl9sb2NrKCZkcGFyZW50LT5kX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZkcGFyZW50LT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJmRwYXJlbnQtPmRfc3ViZGlycywgZF9jaGlsZCkgewogCQlpZiAoZGVudHJ5ID09IGNoaWxkKSB7CiAJCQlzcGluX2xvY2tfbmVzdGVkKCZkZW50cnktPmRfbG9jaywgREVOVFJZX0RfTE9DS19ORVNURUQpOwogCQkJX19kZ2V0X2Rsb2NrKGRlbnRyeSk7CkBAIC0yMzkzLDYgKzIzNjEsOCBAQAogCQkJICovCiAJCQl1bnNpZ25lZCBpbnQgaTsKIAkJCUJVSUxEX0JVR19PTighSVNfQUxJR05FRChETkFNRV9JTkxJTkVfTEVOLCBzaXplb2YobG9uZykpKTsKKwkJCWttZW1jaGVja19tYXJrX2luaXRpYWxpemVkKGRlbnRyeS0+ZF9pbmFtZSwgRE5BTUVfSU5MSU5FX0xFTik7CisJCQlrbWVtY2hlY2tfbWFya19pbml0aWFsaXplZCh0YXJnZXQtPmRfaW5hbWUsIEROQU1FX0lOTElORV9MRU4pOwogCQkJZm9yIChpID0gMDsgaSA8IEROQU1FX0lOTElORV9MRU4gLyBzaXplb2YobG9uZyk7IGkrKykgewogCQkJCXN3YXAoKChsb25nICopICZkZW50cnktPmRfaW5hbWUpW2ldLAogCQkJCSAgICAgKChsb25nICopICZ0YXJnZXQtPmRfaW5hbWUpW2ldKTsKQEAgLTI1MjYsMTMgKzI0OTYsMTMgQEAKIAkJLyogc3BsaWNpbmcgYSB0cmVlICovCiAJCWRlbnRyeS0+ZF9wYXJlbnQgPSB0YXJnZXQtPmRfcGFyZW50OwogCQl0YXJnZXQtPmRfcGFyZW50ID0gdGFyZ2V0OwotCQlsaXN0X2RlbF9pbml0KCZ0YXJnZXQtPmRfdS5kX2NoaWxkKTsKLQkJbGlzdF9tb3ZlKCZkZW50cnktPmRfdS5kX2NoaWxkLCAmZGVudHJ5LT5kX3BhcmVudC0+ZF9zdWJkaXJzKTsKKwkJbGlzdF9kZWxfaW5pdCgmdGFyZ2V0LT5kX2NoaWxkKTsKKwkJbGlzdF9tb3ZlKCZkZW50cnktPmRfY2hpbGQsICZkZW50cnktPmRfcGFyZW50LT5kX3N1YmRpcnMpOwogCX0gZWxzZSB7CiAJCS8qIHN3YXBwaW5nIHR3byBkZW50cmllcyAqLwogCQlzd2FwKGRlbnRyeS0+ZF9wYXJlbnQsIHRhcmdldC0+ZF9wYXJlbnQpOwotCQlsaXN0X21vdmUoJnRhcmdldC0+ZF91LmRfY2hpbGQsICZ0YXJnZXQtPmRfcGFyZW50LT5kX3N1YmRpcnMpOwotCQlsaXN0X21vdmUoJmRlbnRyeS0+ZF91LmRfY2hpbGQsICZkZW50cnktPmRfcGFyZW50LT5kX3N1YmRpcnMpOworCQlsaXN0X21vdmUoJnRhcmdldC0+ZF9jaGlsZCwgJnRhcmdldC0+ZF9wYXJlbnQtPmRfc3ViZGlycyk7CisJCWxpc3RfbW92ZSgmZGVudHJ5LT5kX2NoaWxkLCAmZGVudHJ5LT5kX3BhcmVudC0+ZF9zdWJkaXJzKTsKIAkJaWYgKGV4Y2hhbmdlKQogCQkJZnNub3RpZnlfZF9tb3ZlKHRhcmdldCk7CiAJCWZzbm90aWZ5X2RfbW92ZShkZW50cnkpOwpAQCAtMjYwOCwxMSArMjU3OCwxMSBAQAogICogTm90ZTogSWYgZXZlciB0aGUgbG9ja2luZyBpbiBsb2NrX3JlbmFtZSgpIGNoYW5nZXMsIHRoZW4gcGxlYXNlCiAgKiByZW1lbWJlciB0byB1cGRhdGUgdGhpcyB0b28uLi4KICAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF91bmFsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCitzdGF0aWMgaW50IF9fZF91bmFsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqYWxpYXMpCiB7CiAJc3RydWN0IG11dGV4ICptMSA9IE5VTEwsICptMiA9IE5VTEw7Ci0Jc3RydWN0IGRlbnRyeSAqcmV0ID0gRVJSX1BUUigtRUJVU1kpOworCWludCByZXQgPSAtRUJVU1k7CiAKIAkvKiBJZiBhbGlhcyBhbmQgZGVudHJ5IHNoYXJlIGEgcGFyZW50LCB0aGVuIG5vIGV4dHJhIGxvY2tzIHJlcXVpcmVkICovCiAJaWYgKGFsaWFzLT5kX3BhcmVudCA9PSBkZW50cnktPmRfcGFyZW50KQpAQCAtMjYyNyw3ICsyNTk3LDcgQEAKIAltMiA9ICZhbGlhcy0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXg7CiBvdXRfdW5hbGlhczoKIAlfX2RfbW92ZShhbGlhcywgZGVudHJ5LCBmYWxzZSk7Ci0JcmV0ID0gYWxpYXM7CisJcmV0ID0gMDsKIG91dF9lcnI6CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCWlmIChtMikKQEAgLTI2NjIsMTMwICsyNjMyLDU3IEBACiAgKi8KIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBOVUxMOwotCiAJaWYgKElTX0VSUihpbm9kZSkpCiAJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CiAKLQlpZiAoaW5vZGUgJiYgU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCQluZXcgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpOwotCQlpZiAobmV3KSB7Ci0JCQlpZiAoIUlTX1JPT1QobmV3KSkgewotCQkJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQkJCQlkcHV0KG5ldyk7Ci0JCQkJaXB1dChpbm9kZSk7Ci0JCQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7Ci0JCQl9Ci0JCQlpZiAoZF9hbmNlc3RvcihuZXcsIGRlbnRyeSkpIHsKLQkJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCQkJZHB1dChuZXcpOwotCQkJCWlwdXQoaW5vZGUpOwotCQkJCXJldHVybiBFUlJfUFRSKC1FSU8pOwotCQkJfQotCQkJd3JpdGVfc2VxbG9jaygmcmVuYW1lX2xvY2spOwotCQkJX19kX21vdmUobmV3LCBkZW50cnksIGZhbHNlKTsKLQkJCXdyaXRlX3NlcXVubG9jaygmcmVuYW1lX2xvY2spOwotCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCQkJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTsKLQkJCWlwdXQoaW5vZGUpOwotCQl9IGVsc2UgewotCQkJLyogYWxyZWFkeSB0YWtpbmcgaW5vZGUtPmlfbG9jaywgc28gZF9hZGQoKSBieSBoYW5kICovCi0JCQlfX2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCQlzZWN1cml0eV9kX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCQkJZF9yZWhhc2goZGVudHJ5KTsKLQkJfQotCX0gZWxzZSB7Ci0JCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JCWlmIChkX3VuaGFzaGVkKGRlbnRyeSkpCi0JCQlkX3JlaGFzaChkZW50cnkpOwotCX0KLQlyZXR1cm4gbmV3OwotfQotRVhQT1JUX1NZTUJPTChkX3NwbGljZV9hbGlhcyk7Ci0KLS8qKgotICogZF9tYXRlcmlhbGlzZV91bmlxdWUgLSBpbnRyb2R1Y2UgYW4gaW5vZGUgaW50byB0aGUgdHJlZQotICogQGRlbnRyeTogY2FuZGlkYXRlIGRlbnRyeQotICogQGlub2RlOiBpbm9kZSB0byBiaW5kIHRvIHRoZSBkZW50cnksIHRvIHdoaWNoIGFsaWFzZXMgbWF5IGJlIGF0dGFjaGVkCi0gKgotICogSW50cm9kdWNlcyBhbiBkZW50cnkgaW50byB0aGUgdHJlZSwgc3Vic3RpdHV0aW5nIGFuIGV4dGFudCBkaXNjb25uZWN0ZWQKLSAqIHJvb3QgZGlyZWN0b3J5IGFsaWFzIGluIGl0cyBwbGFjZSBpZiB0aGVyZSBpcyBvbmUuIENhbGxlciBtdXN0IGhvbGQgdGhlCi0gKiBpX211dGV4IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgotICovCi1zdHJ1Y3QgZGVudHJ5ICpkX21hdGVyaWFsaXNlX3VuaXF1ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IGRlbnRyeSAqYWN0dWFsOwotCiAJQlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpOwogCiAJaWYgKCFpbm9kZSkgewotCQlhY3R1YWwgPSBkZW50cnk7CiAJCV9fZF9pbnN0YW50aWF0ZShkZW50cnksIE5VTEwpOwotCQlkX3JlaGFzaChhY3R1YWwpOwotCQlnb3RvIG91dF9ub2xvY2s7CisJCWdvdG8gb3V0OwogCX0KLQogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0KIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQlzdHJ1Y3QgZGVudHJ5ICphbGlhczsKLQotCQkvKiBEb2VzIGFuIGFsaWFzZWQgZGVudHJ5IGFscmVhZHkgZXhpc3Q/ICovCi0JCWFsaWFzID0gX19kX2ZpbmRfYWxpYXMoaW5vZGUpOwotCQlpZiAoYWxpYXMpIHsKLQkJCWFjdHVhbCA9IGFsaWFzOworCQlzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpOworCQlpZiAodW5saWtlbHkobmV3KSkgewogCQkJd3JpdGVfc2VxbG9jaygmcmVuYW1lX2xvY2spOwotCi0JCQlpZiAoZF9hbmNlc3RvcihhbGlhcywgZGVudHJ5KSkgewotCQkJCS8qIENoZWNrIGZvciBsb29wcyAqLwotCQkJCWFjdHVhbCA9IEVSUl9QVFIoLUVMT09QKTsKLQkJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCQl9IGVsc2UgaWYgKElTX1JPT1QoYWxpYXMpKSB7Ci0JCQkJLyogSXMgdGhpcyBhbiBhbm9ueW1vdXMgbW91bnRwb2ludCB0aGF0IHdlCi0JCQkJICogY291bGQgc3BsaWNlIGludG8gb3VyIHRyZWU/ICovCi0JCQkJX19kX21vdmUoYWxpYXMsIGRlbnRyeSwgZmFsc2UpOworCQkJaWYgKHVubGlrZWx5KGRfYW5jZXN0b3IobmV3LCBkZW50cnkpKSkgewogCQkJCXdyaXRlX3NlcXVubG9jaygmcmVuYW1lX2xvY2spOwotCQkJCWdvdG8gZm91bmQ7CisJCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCQkJCWRwdXQobmV3KTsKKwkJCQluZXcgPSBFUlJfUFRSKC1FTE9PUCk7CisJCQkJcHJfd2Fybl9yYXRlbGltaXRlZCgKKwkJCQkJIlZGUzogTG9va3VwIG9mICclcycgaW4gJXMgJXMiCisJCQkJCSIgd291bGQgaGF2ZSBjYXVzZWQgbG9vcFxuIiwKKwkJCQkJZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkJaW5vZGUtPmlfc2ItPnNfdHlwZS0+bmFtZSwKKwkJCQkJaW5vZGUtPmlfc2ItPnNfaWQpOworCQkJfSBlbHNlIGlmICghSVNfUk9PVChuZXcpKSB7CisJCQkJaW50IGVyciA9IF9fZF91bmFsaWFzKGlub2RlLCBkZW50cnksIG5ldyk7CisJCQkJd3JpdGVfc2VxdW5sb2NrKCZyZW5hbWVfbG9jayk7CisJCQkJaWYgKGVycikgeworCQkJCQlkcHV0KG5ldyk7CisJCQkJCW5ldyA9IEVSUl9QVFIoZXJyKTsKKwkJCQl9CiAJCQl9IGVsc2UgewotCQkJCS8qIE5vcGUsIGJ1dCB3ZSBtdXN0KCEpIGF2b2lkIGRpcmVjdG9yeQotCQkJCSAqIGFsaWFzaW5nLiBUaGlzIGRyb3BzIGlub2RlLT5pX2xvY2sgKi8KLQkJCQlhY3R1YWwgPSBfX2RfdW5hbGlhcyhpbm9kZSwgZGVudHJ5LCBhbGlhcyk7CisJCQkJX19kX21vdmUobmV3LCBkZW50cnksIGZhbHNlKTsKKwkJCQl3cml0ZV9zZXF1bmxvY2soJnJlbmFtZV9sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCQkJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTsKIAkJCX0KLQkJCXdyaXRlX3NlcXVubG9jaygmcmVuYW1lX2xvY2spOwotCQkJaWYgKElTX0VSUihhY3R1YWwpKSB7Ci0JCQkJaWYgKFBUUl9FUlIoYWN0dWFsKSA9PSAtRUxPT1ApCi0JCQkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoCi0JCQkJCQkiVkZTOiBMb29rdXAgb2YgJyVzJyBpbiAlcyAlcyIKLQkJCQkJCSIgd291bGQgaGF2ZSBjYXVzZWQgbG9vcFxuIiwKLQkJCQkJCWRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJCQlpbm9kZS0+aV9zYi0+c190eXBlLT5uYW1lLAotCQkJCQkJaW5vZGUtPmlfc2ItPnNfaWQpOwotCQkJCWRwdXQoYWxpYXMpOwotCQkJfQotCQkJZ290byBvdXRfbm9sb2NrOworCQkJaXB1dChpbm9kZSk7CisJCQlyZXR1cm4gbmV3OwogCQl9CiAJfQotCi0JLyogQWRkIGEgdW5pcXVlIHJlZmVyZW5jZSAqLwotCWFjdHVhbCA9IF9fZF9pbnN0YW50aWF0ZV91bmlxdWUoZGVudHJ5LCBpbm9kZSk7Ci0JaWYgKCFhY3R1YWwpCi0JCWFjdHVhbCA9IGRlbnRyeTsKLQotCWRfcmVoYXNoKGFjdHVhbCk7Ci1mb3VuZDoKKwkvKiBhbHJlYWR5IHRha2luZyBpbm9kZS0+aV9sb2NrLCBzbyBkX2FkZCgpIGJ5IGhhbmQgKi8KKwlfX2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotb3V0X25vbG9jazoKLQlpZiAoYWN0dWFsID09IGRlbnRyeSkgewotCQlzZWN1cml0eV9kX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpcHV0KGlub2RlKTsKLQlyZXR1cm4gYWN0dWFsOworb3V0OgorCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJZF9yZWhhc2goZGVudHJ5KTsKKwlyZXR1cm4gTlVMTDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGRfbWF0ZXJpYWxpc2VfdW5pcXVlKTsKK0VYUE9SVF9TWU1CT0woZF9zcGxpY2VfYWxpYXMpOwogCiBzdGF0aWMgaW50IHByZXBlbmQoY2hhciAqKmJ1ZmZlciwgaW50ICpidWZsZW4sIGNvbnN0IGNoYXIgKnN0ciwgaW50IG5hbWVsZW4pCiB7CkBAIC0zMzIxLDcgKzMyMTgsNyBAQAogewogCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAlCVUdfT04oZGVudHJ5LT5kX25hbWUubmFtZSAhPSBkZW50cnktPmRfaW5hbWUgfHwKLQkJIWhsaXN0X3VuaGFzaGVkKCZkZW50cnktPmRfYWxpYXMpIHx8CisJCSFobGlzdF91bmhhc2hlZCgmZGVudHJ5LT5kX3UuZF9hbGlhcykgfHwKIAkJIWRfdW5saW5rZWQoZGVudHJ5KSk7CiAJc3Bpbl9sb2NrKCZkZW50cnktPmRfcGFyZW50LT5kX2xvY2spOwogCXNwaW5fbG9ja19uZXN0ZWQoJmRlbnRyeS0+ZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7CmRpZmYgLS1naXQgYS9mcy9kZWJ1Z2ZzL2ZpbGUuYyBiL2ZzL2RlYnVnZnMvZmlsZS5jCmluZGV4IDc2YzA4YzIuLjhlMGYyZjQgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvZmlsZS5jCisrKyBiL2ZzL2RlYnVnZnMvZmlsZS5jCkBAIC02OTIsMTggKzY5MiwxOSBAQAogICogYmVjYXVzZSBzb21lIHBlcmlwaGVyYWxzIGhhdmUgc2V2ZXJhbCBibG9ja3Mgb2YgaWRlbnRpY2FsIHJlZ2lzdGVycywKICAqIGZvciBleGFtcGxlIGNvbmZpZ3VyYXRpb24gb2YgZG1hIGNoYW5uZWxzCiAgKi8KLWludCBkZWJ1Z2ZzX3ByaW50X3JlZ3MzMihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IHN0cnVjdCBkZWJ1Z2ZzX3JlZzMyICpyZWdzLAotCQkJICAgaW50IG5yZWdzLCB2b2lkIF9faW9tZW0gKmJhc2UsIGNoYXIgKnByZWZpeCkKK3ZvaWQgZGVidWdmc19wcmludF9yZWdzMzIoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBzdHJ1Y3QgZGVidWdmc19yZWczMiAqcmVncywKKwkJCSAgaW50IG5yZWdzLCB2b2lkIF9faW9tZW0gKmJhc2UsIGNoYXIgKnByZWZpeCkKIHsKLQlpbnQgaSwgcmV0ID0gMDsKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBucmVnczsgaSsrLCByZWdzKyspIHsKIAkJaWYgKHByZWZpeCkKLQkJCXJldCArPSBzZXFfcHJpbnRmKHMsICIlcyIsIHByZWZpeCk7Ci0JCXJldCArPSBzZXFfcHJpbnRmKHMsICIlcyA9IDB4JTA4eFxuIiwgcmVncy0+bmFtZSwKLQkJCQkgIHJlYWRsKGJhc2UgKyByZWdzLT5vZmZzZXQpKTsKKwkJCXNlcV9wcmludGYocywgIiVzIiwgcHJlZml4KTsKKwkJc2VxX3ByaW50ZihzLCAiJXMgPSAweCUwOHhcbiIsIHJlZ3MtPm5hbWUsCisJCQkgICByZWFkbChiYXNlICsgcmVncy0+b2Zmc2V0KSk7CisJCWlmIChzZXFfaGFzX292ZXJmbG93ZWQocykpCisJCQlicmVhazsKIAl9Ci0JcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRlYnVnZnNfcHJpbnRfcmVnczMyKTsKIApkaWZmIC0tZ2l0IGEvZnMvZGVidWdmcy9pbm9kZS5jIGIvZnMvZGVidWdmcy9pbm9kZS5jCmluZGV4IDFlM2I5OWQuLjA1ZjI5NjAgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvaW5vZGUuYworKysgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogCSAqIHVzZSB0aGUgZF91LmRfY2hpbGQgYXMgdGhlIHJjdSBoZWFkIGFuZCBjb3JydXB0IHRoaXMgbGlzdC4KIAkgKi8KIAlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmcGFyZW50LT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJnBhcmVudC0+ZF9zdWJkaXJzLCBkX2NoaWxkKSB7CiAJCWlmICghZGVidWdmc19wb3NpdGl2ZShjaGlsZCkpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvZnMvZGxtL2RlYnVnX2ZzLmMgYi9mcy9kbG0vZGVidWdfZnMuYwppbmRleCAxMzIzYzU2Li5lZWE2NDkxIDEwMDY0NAotLS0gYS9mcy9kbG0vZGVidWdfZnMuYworKysgYi9mcy9kbG0vZGVidWdfZnMuYwpAQCAtNDgsOCArNDgsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBwcmludF9mb3JtYXQxX2xvY2soc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLAotCQkJICAgICAgc3RydWN0IGRsbV9yc2IgKnJlcykKK3N0YXRpYyB2b2lkIHByaW50X2Zvcm1hdDFfbG9jayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkbG1fbGtiICpsa2IsCisJCQkgICAgICAgc3RydWN0IGRsbV9yc2IgKnJlcykKIHsKIAlzZXFfcHJpbnRmKHMsICIlMDh4ICVzIiwgbGtiLT5sa2JfaWQsIHByaW50X2xvY2ttb2RlKGxrYi0+bGtiX2dybW9kZSkpOwogCkBAIC02OCwyMSArNjgsMTcgQEAKIAlpZiAobGtiLT5sa2Jfd2FpdF90eXBlKQogCQlzZXFfcHJpbnRmKHMsICIgd2FpdF90eXBlOiAlZCIsIGxrYi0+bGtiX3dhaXRfdHlwZSk7CiAKLQlyZXR1cm4gc2VxX3B1dHMocywgIlxuIik7CisJc2VxX3B1dHMocywgIlxuIik7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfZm9ybWF0MShzdHJ1Y3QgZGxtX3JzYiAqcmVzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCitzdGF0aWMgdm9pZCBwcmludF9mb3JtYXQxKHN0cnVjdCBkbG1fcnNiICpyZXMsIHN0cnVjdCBzZXFfZmlsZSAqcykKIHsKIAlzdHJ1Y3QgZGxtX2xrYiAqbGtiOwogCWludCBpLCBsdmJsZW4gPSByZXMtPnJlc19scy0+bHNfbHZibGVuLCByZWNvdmVyX2xpc3QsIHJvb3RfbGlzdDsKLQlpbnQgcnY7CiAKIAlsb2NrX3JzYihyZXMpOwogCi0JcnYgPSBzZXFfcHJpbnRmKHMsICJcblJlc291cmNlICVwIE5hbWUgKGxlbj0lZCkgXCIiLAotCQkJcmVzLCByZXMtPnJlc19sZW5ndGgpOwotCWlmIChydikKLQkJZ290byBvdXQ7CisJc2VxX3ByaW50ZihzLCAiXG5SZXNvdXJjZSAlcCBOYW1lIChsZW49JWQpIFwiIiwgcmVzLCByZXMtPnJlc19sZW5ndGgpOwogCiAJZm9yIChpID0gMDsgaSA8IHJlcy0+cmVzX2xlbmd0aDsgaSsrKSB7CiAJCWlmIChpc3ByaW50KHJlcy0+cmVzX25hbWVbaV0pKQpAQCAtOTIsMTcgKzg4LDE2IEBACiAJfQogCiAJaWYgKHJlcy0+cmVzX25vZGVpZCA+IDApCi0JCXJ2ID0gc2VxX3ByaW50ZihzLCAiXCJcbkxvY2FsIENvcHksIE1hc3RlciBpcyBub2RlICVkXG4iLAotCQkJCXJlcy0+cmVzX25vZGVpZCk7CisJCXNlcV9wcmludGYocywgIlwiXG5Mb2NhbCBDb3B5LCBNYXN0ZXIgaXMgbm9kZSAlZFxuIiwKKwkJCSAgIHJlcy0+cmVzX25vZGVpZCk7CiAJZWxzZSBpZiAocmVzLT5yZXNfbm9kZWlkID09IDApCi0JCXJ2ID0gc2VxX3B1dHMocywgIlwiXG5NYXN0ZXIgQ29weVxuIik7CisJCXNlcV9wdXRzKHMsICJcIlxuTWFzdGVyIENvcHlcbiIpOwogCWVsc2UgaWYgKHJlcy0+cmVzX25vZGVpZCA9PSAtMSkKLQkJcnYgPSBzZXFfcHJpbnRmKHMsICJcIlxuTG9va2luZyB1cCBtYXN0ZXIgKGxraWQgJXgpXG4iLAotCQkJICAgCXJlcy0+cmVzX2ZpcnN0X2xraWQpOworCQlzZXFfcHJpbnRmKHMsICJcIlxuTG9va2luZyB1cCBtYXN0ZXIgKGxraWQgJXgpXG4iLAorCQkJICAgcmVzLT5yZXNfZmlyc3RfbGtpZCk7CiAJZWxzZQotCQlydiA9IHNlcV9wcmludGYocywgIlwiXG5JbnZhbGlkIG1hc3RlciAlZFxuIiwKLQkJCQlyZXMtPnJlc19ub2RlaWQpOwotCWlmIChydikKKwkJc2VxX3ByaW50ZihzLCAiXCJcbkludmFsaWQgbWFzdGVyICVkXG4iLCByZXMtPnJlc19ub2RlaWQpOworCWlmIChzZXFfaGFzX292ZXJmbG93ZWQocykpCiAJCWdvdG8gb3V0OwogCiAJLyogUHJpbnQgdGhlIExWQjogKi8KQEAgLTExNiw4ICsxMTEsOCBAQAogCQl9CiAJCWlmIChyc2JfZmxhZyhyZXMsIFJTQl9WQUxOT1RWQUxJRCkpCiAJCQlzZXFfcHV0cyhzLCAiIChJTlZBTElEKSIpOwotCQlydiA9IHNlcV9wdXRzKHMsICJcbiIpOwotCQlpZiAocnYpCisJCXNlcV9wdXRzKHMsICJcbiIpOworCQlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC0xMjUsMzIgKzEyMCwzMCBAQAogCXJlY292ZXJfbGlzdCA9ICFsaXN0X2VtcHR5KCZyZXMtPnJlc19yZWNvdmVyX2xpc3QpOwogCiAJaWYgKHJvb3RfbGlzdCB8fCByZWNvdmVyX2xpc3QpIHsKLQkJcnYgPSBzZXFfcHJpbnRmKHMsICJSZWNvdmVyeTogcm9vdCAlZCByZWNvdmVyICVkIGZsYWdzICVseCAiCi0JCQkJImNvdW50ICVkXG4iLCByb290X2xpc3QsIHJlY292ZXJfbGlzdCwKLQkJCSAgIAlyZXMtPnJlc19mbGFncywgcmVzLT5yZXNfcmVjb3Zlcl9sb2Nrc19jb3VudCk7Ci0JCWlmIChydikKLQkJCWdvdG8gb3V0OworCQlzZXFfcHJpbnRmKHMsICJSZWNvdmVyeTogcm9vdCAlZCByZWNvdmVyICVkIGZsYWdzICVseCBjb3VudCAlZFxuIiwKKwkJCSAgIHJvb3RfbGlzdCwgcmVjb3Zlcl9saXN0LAorCQkJICAgcmVzLT5yZXNfZmxhZ3MsIHJlcy0+cmVzX3JlY292ZXJfbG9ja3NfY291bnQpOwogCX0KIAogCS8qIFByaW50IHRoZSBsb2NrcyBhdHRhY2hlZCB0byB0aGlzIHJlc291cmNlICovCiAJc2VxX3B1dHMocywgIkdyYW50ZWQgUXVldWVcbiIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobGtiLCAmcmVzLT5yZXNfZ3JhbnRxdWV1ZSwgbGtiX3N0YXRlcXVldWUpIHsKLQkJcnYgPSBwcmludF9mb3JtYXQxX2xvY2socywgbGtiLCByZXMpOwotCQlpZiAocnYpCisJCXByaW50X2Zvcm1hdDFfbG9jayhzLCBsa2IsIHJlcyk7CisJCWlmIChzZXFfaGFzX292ZXJmbG93ZWQocykpCiAJCQlnb3RvIG91dDsKIAl9CiAKIAlzZXFfcHV0cyhzLCAiQ29udmVyc2lvbiBRdWV1ZVxuIik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsa2IsICZyZXMtPnJlc19jb252ZXJ0cXVldWUsIGxrYl9zdGF0ZXF1ZXVlKSB7Ci0JCXJ2ID0gcHJpbnRfZm9ybWF0MV9sb2NrKHMsIGxrYiwgcmVzKTsKLQkJaWYgKHJ2KQorCQlwcmludF9mb3JtYXQxX2xvY2socywgbGtiLCByZXMpOworCQlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQkJZ290byBvdXQ7CiAJfQogCiAJc2VxX3B1dHMocywgIldhaXRpbmcgUXVldWVcbiIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobGtiLCAmcmVzLT5yZXNfd2FpdHF1ZXVlLCBsa2Jfc3RhdGVxdWV1ZSkgewotCQlydiA9IHByaW50X2Zvcm1hdDFfbG9jayhzLCBsa2IsIHJlcyk7Ci0JCWlmIChydikKKwkJcHJpbnRfZm9ybWF0MV9sb2NrKHMsIGxrYiwgcmVzKTsKKwkJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChzKSkKIAkJCWdvdG8gb3V0OwogCX0KIApAQCAtMTU5LDIzICsxNTIsMjMgQEAKIAogCXNlcV9wdXRzKHMsICJMb29rdXAgUXVldWVcbiIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobGtiLCAmcmVzLT5yZXNfbG9va3VwLCBsa2JfcnNiX2xvb2t1cCkgewotCQlydiA9IHNlcV9wcmludGYocywgIiUwOHggJXMiLCBsa2ItPmxrYl9pZCwKLQkJCQlwcmludF9sb2NrbW9kZShsa2ItPmxrYl9ycW1vZGUpKTsKKwkJc2VxX3ByaW50ZihzLCAiJTA4eCAlcyIsCisJCQkgICBsa2ItPmxrYl9pZCwgcHJpbnRfbG9ja21vZGUobGtiLT5sa2JfcnFtb2RlKSk7CiAJCWlmIChsa2ItPmxrYl93YWl0X3R5cGUpCiAJCQlzZXFfcHJpbnRmKHMsICIgd2FpdF90eXBlOiAlZCIsIGxrYi0+bGtiX3dhaXRfdHlwZSk7Ci0JCXJ2ID0gc2VxX3B1dHMocywgIlxuIik7CisJCXNlcV9wdXRzKHMsICJcbiIpOworCQlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQorCQkJZ290byBvdXQ7CiAJfQogIG91dDoKIAl1bmxvY2tfcnNiKHJlcyk7Ci0JcmV0dXJuIHJ2OwogfQogCi1zdGF0aWMgaW50IHByaW50X2Zvcm1hdDJfbG9jayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkbG1fbGtiICpsa2IsCi0JCQkgICAgICBzdHJ1Y3QgZGxtX3JzYiAqcikKK3N0YXRpYyB2b2lkIHByaW50X2Zvcm1hdDJfbG9jayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkbG1fbGtiICpsa2IsCisJCQkgICAgICAgc3RydWN0IGRsbV9yc2IgKnIpCiB7CiAJdTY0IHhpZCA9IDA7CiAJdTY0IHVzOwotCWludCBydjsKIAogCWlmIChsa2ItPmxrYl9mbGFncyAmIERMTV9JRkxfVVNFUikgewogCQlpZiAobGtiLT5sa2JfdWEpCkBAIC0xODgsMTAzICsxODEsOTcgQEAKIAkvKiBpZCBub2RlaWQgcmVtaWQgcGlkIHhpZCBleGZsYWdzIGZsYWdzIHN0cyBncm1vZGUgcnFtb2RlIHRpbWVfdXMKIAkgICByX25vZGVpZCByX2xlbiByX25hbWUgKi8KIAotCXJ2ID0gc2VxX3ByaW50ZihzLCAiJXggJWQgJXggJXUgJWxsdSAleCAleCAlZCAlZCAlZCAlbGx1ICV1ICVkIFwiJXNcIlxuIiwKLQkJCWxrYi0+bGtiX2lkLAotCQkJbGtiLT5sa2Jfbm9kZWlkLAotCQkJbGtiLT5sa2JfcmVtaWQsCi0JCQlsa2ItPmxrYl9vd25waWQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXhpZCwKLQkJCWxrYi0+bGtiX2V4ZmxhZ3MsCi0JCQlsa2ItPmxrYl9mbGFncywKLQkJCWxrYi0+bGtiX3N0YXR1cywKLQkJCWxrYi0+bGtiX2dybW9kZSwKLQkJCWxrYi0+bGtiX3JxbW9kZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdXMsCi0JCQlyLT5yZXNfbm9kZWlkLAotCQkJci0+cmVzX2xlbmd0aCwKLQkJCXItPnJlc19uYW1lKTsKLQlyZXR1cm4gcnY7CisJc2VxX3ByaW50ZihzLCAiJXggJWQgJXggJXUgJWxsdSAleCAleCAlZCAlZCAlZCAlbGx1ICV1ICVkIFwiJXNcIlxuIiwKKwkJICAgbGtiLT5sa2JfaWQsCisJCSAgIGxrYi0+bGtiX25vZGVpZCwKKwkJICAgbGtiLT5sa2JfcmVtaWQsCisJCSAgIGxrYi0+bGtiX293bnBpZCwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl4aWQsCisJCSAgIGxrYi0+bGtiX2V4ZmxhZ3MsCisJCSAgIGxrYi0+bGtiX2ZsYWdzLAorCQkgICBsa2ItPmxrYl9zdGF0dXMsCisJCSAgIGxrYi0+bGtiX2dybW9kZSwKKwkJICAgbGtiLT5sa2JfcnFtb2RlLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXVzLAorCQkgICByLT5yZXNfbm9kZWlkLAorCQkgICByLT5yZXNfbGVuZ3RoLAorCQkgICByLT5yZXNfbmFtZSk7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfZm9ybWF0MihzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IHNlcV9maWxlICpzKQorc3RhdGljIHZvaWQgcHJpbnRfZm9ybWF0MihzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IHNlcV9maWxlICpzKQogewogCXN0cnVjdCBkbG1fbGtiICpsa2I7Ci0JaW50IHJ2ID0gMDsKIAogCWxvY2tfcnNiKHIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsa2IsICZyLT5yZXNfZ3JhbnRxdWV1ZSwgbGtiX3N0YXRlcXVldWUpIHsKLQkJcnYgPSBwcmludF9mb3JtYXQyX2xvY2socywgbGtiLCByKTsKLQkJaWYgKHJ2KQorCQlwcmludF9mb3JtYXQyX2xvY2socywgbGtiLCByKTsKKwkJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChzKSkKIAkJCWdvdG8gb3V0OwogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobGtiLCAmci0+cmVzX2NvbnZlcnRxdWV1ZSwgbGtiX3N0YXRlcXVldWUpIHsKLQkJcnYgPSBwcmludF9mb3JtYXQyX2xvY2socywgbGtiLCByKTsKLQkJaWYgKHJ2KQorCQlwcmludF9mb3JtYXQyX2xvY2socywgbGtiLCByKTsKKwkJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChzKSkKIAkJCWdvdG8gb3V0OwogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobGtiLCAmci0+cmVzX3dhaXRxdWV1ZSwgbGtiX3N0YXRlcXVldWUpIHsKLQkJcnYgPSBwcmludF9mb3JtYXQyX2xvY2socywgbGtiLCByKTsKLQkJaWYgKHJ2KQorCQlwcmludF9mb3JtYXQyX2xvY2socywgbGtiLCByKTsKKwkJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChzKSkKIAkJCWdvdG8gb3V0OwogCX0KICBvdXQ6CiAJdW5sb2NrX3JzYihyKTsKLQlyZXR1cm4gcnY7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfZm9ybWF0M19sb2NrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRsbV9sa2IgKmxrYiwKK3N0YXRpYyB2b2lkIHByaW50X2Zvcm1hdDNfbG9jayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkbG1fbGtiICpsa2IsCiAJCQkgICAgICBpbnQgcnNiX2xvb2t1cCkKIHsKIAl1NjQgeGlkID0gMDsKLQlpbnQgcnY7CiAKIAlpZiAobGtiLT5sa2JfZmxhZ3MgJiBETE1fSUZMX1VTRVIpIHsKIAkJaWYgKGxrYi0+bGtiX3VhKQogCQkJeGlkID0gbGtiLT5sa2JfdWEtPnhpZDsKIAl9CiAKLQlydiA9IHNlcV9wcmludGYocywgImxrYiAleCAlZCAleCAldSAlbGx1ICV4ICV4ICVkICVkICVkICVkICVkICVkICV1ICVsbHUgJWxsdVxuIiwKLQkJCWxrYi0+bGtiX2lkLAotCQkJbGtiLT5sa2Jfbm9kZWlkLAotCQkJbGtiLT5sa2JfcmVtaWQsCi0JCQlsa2ItPmxrYl9vd25waWQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXhpZCwKLQkJCWxrYi0+bGtiX2V4ZmxhZ3MsCi0JCQlsa2ItPmxrYl9mbGFncywKLQkJCWxrYi0+bGtiX3N0YXR1cywKLQkJCWxrYi0+bGtiX2dybW9kZSwKLQkJCWxrYi0+bGtiX3JxbW9kZSwKLQkJCWxrYi0+bGtiX2xhc3RfYmFzdC5tb2RlLAotCQkJcnNiX2xvb2t1cCwKLQkJCWxrYi0+bGtiX3dhaXRfdHlwZSwKLQkJCWxrYi0+bGtiX2x2YnNlcSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMobGtiLT5sa2JfdGltZXN0YW1wKSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMobGtiLT5sa2JfbGFzdF9iYXN0X3RpbWUpKTsKLQlyZXR1cm4gcnY7CisJc2VxX3ByaW50ZihzLCAibGtiICV4ICVkICV4ICV1ICVsbHUgJXggJXggJWQgJWQgJWQgJWQgJWQgJWQgJXUgJWxsdSAlbGx1XG4iLAorCQkgICBsa2ItPmxrYl9pZCwKKwkJICAgbGtiLT5sa2Jfbm9kZWlkLAorCQkgICBsa2ItPmxrYl9yZW1pZCwKKwkJICAgbGtiLT5sa2Jfb3ducGlkLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXhpZCwKKwkJICAgbGtiLT5sa2JfZXhmbGFncywKKwkJICAgbGtiLT5sa2JfZmxhZ3MsCisJCSAgIGxrYi0+bGtiX3N0YXR1cywKKwkJICAgbGtiLT5sa2JfZ3Jtb2RlLAorCQkgICBsa2ItPmxrYl9ycW1vZGUsCisJCSAgIGxrYi0+bGtiX2xhc3RfYmFzdC5tb2RlLAorCQkgICByc2JfbG9va3VwLAorCQkgICBsa2ItPmxrYl93YWl0X3R5cGUsCisJCSAgIGxrYi0+bGtiX2x2YnNlcSwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucyhsa2ItPmxrYl90aW1lc3RhbXApLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX25zKGxrYi0+bGtiX2xhc3RfYmFzdF90aW1lKSk7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfZm9ybWF0MyhzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IHNlcV9maWxlICpzKQorc3RhdGljIHZvaWQgcHJpbnRfZm9ybWF0MyhzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IHNlcV9maWxlICpzKQogewogCXN0cnVjdCBkbG1fbGtiICpsa2I7CiAJaW50IGksIGx2YmxlbiA9IHItPnJlc19scy0+bHNfbHZibGVuOwogCWludCBwcmludF9uYW1lID0gMTsKLQlpbnQgcnY7CiAKIAlsb2NrX3JzYihyKTsKIAotCXJ2ID0gc2VxX3ByaW50ZihzLCAicnNiICVwICVkICV4ICVseCAlZCAlZCAldSAlZCAiLAotCQkJciwKLQkJCXItPnJlc19ub2RlaWQsCi0JCQlyLT5yZXNfZmlyc3RfbGtpZCwKLQkJCXItPnJlc19mbGFncywKLQkJCSFsaXN0X2VtcHR5KCZyLT5yZXNfcm9vdF9saXN0KSwKLQkJCSFsaXN0X2VtcHR5KCZyLT5yZXNfcmVjb3Zlcl9saXN0KSwKLQkJCXItPnJlc19yZWNvdmVyX2xvY2tzX2NvdW50LAotCQkJci0+cmVzX2xlbmd0aCk7Ci0JaWYgKHJ2KQorCXNlcV9wcmludGYocywgInJzYiAlcCAlZCAleCAlbHggJWQgJWQgJXUgJWQgIiwKKwkJICAgciwKKwkJICAgci0+cmVzX25vZGVpZCwKKwkJICAgci0+cmVzX2ZpcnN0X2xraWQsCisJCSAgIHItPnJlc19mbGFncywKKwkJICAgIWxpc3RfZW1wdHkoJnItPnJlc19yb290X2xpc3QpLAorCQkgICAhbGlzdF9lbXB0eSgmci0+cmVzX3JlY292ZXJfbGlzdCksCisJCSAgIHItPnJlc19yZWNvdmVyX2xvY2tzX2NvdW50LAorCQkgICByLT5yZXNfbGVuZ3RoKTsKKwlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQlnb3RvIG91dDsKIAogCWZvciAoaSA9IDA7IGkgPCByLT5yZXNfbGVuZ3RoOyBpKyspIHsKQEAgLTI5Miw3ICsyNzksNyBAQAogCQkJcHJpbnRfbmFtZSA9IDA7CiAJfQogCi0Jc2VxX3ByaW50ZihzLCAiJXMiLCBwcmludF9uYW1lID8gInN0ciAiIDogImhleCIpOworCXNlcV9wdXRzKHMsIHByaW50X25hbWUgPyAic3RyICIgOiAiaGV4Iik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgci0+cmVzX2xlbmd0aDsgaSsrKSB7CiAJCWlmIChwcmludF9uYW1lKQpAQCAtMzAwLDggKzI4Nyw4IEBACiAJCWVsc2UKIAkJCXNlcV9wcmludGYocywgIiAlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpci0+cmVzX25hbWVbaV0pOwogCX0KLQlydiA9IHNlcV9wdXRzKHMsICJcbiIpOwotCWlmIChydikKKwlzZXFfcHV0cyhzLCAiXG4iKTsKKwlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQlnb3RvIG91dDsKIAogCWlmICghci0+cmVzX2x2YnB0cikKQEAgLTMxMSw2NSArMjk4LDYyIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbHZibGVuOyBpKyspCiAJCXNlcV9wcmludGYocywgIiAlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpci0+cmVzX2x2YnB0cltpXSk7Ci0JcnYgPSBzZXFfcHV0cyhzLCAiXG4iKTsKLQlpZiAocnYpCisJc2VxX3B1dHMocywgIlxuIik7CisJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChzKSkKIAkJZ290byBvdXQ7CiAKICBkb19sb2NrczoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxrYiwgJnItPnJlc19ncmFudHF1ZXVlLCBsa2Jfc3RhdGVxdWV1ZSkgewotCQlydiA9IHByaW50X2Zvcm1hdDNfbG9jayhzLCBsa2IsIDApOwotCQlpZiAocnYpCisJCXByaW50X2Zvcm1hdDNfbG9jayhzLCBsa2IsIDApOworCQlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQkJZ290byBvdXQ7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsa2IsICZyLT5yZXNfY29udmVydHF1ZXVlLCBsa2Jfc3RhdGVxdWV1ZSkgewotCQlydiA9IHByaW50X2Zvcm1hdDNfbG9jayhzLCBsa2IsIDApOwotCQlpZiAocnYpCisJCXByaW50X2Zvcm1hdDNfbG9jayhzLCBsa2IsIDApOworCQlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQkJZ290byBvdXQ7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsa2IsICZyLT5yZXNfd2FpdHF1ZXVlLCBsa2Jfc3RhdGVxdWV1ZSkgewotCQlydiA9IHByaW50X2Zvcm1hdDNfbG9jayhzLCBsa2IsIDApOwotCQlpZiAocnYpCisJCXByaW50X2Zvcm1hdDNfbG9jayhzLCBsa2IsIDApOworCQlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQkJZ290byBvdXQ7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsa2IsICZyLT5yZXNfbG9va3VwLCBsa2JfcnNiX2xvb2t1cCkgewotCQlydiA9IHByaW50X2Zvcm1hdDNfbG9jayhzLCBsa2IsIDEpOwotCQlpZiAocnYpCisJCXByaW50X2Zvcm1hdDNfbG9jayhzLCBsa2IsIDEpOworCQlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQkJZ290byBvdXQ7CiAJfQogIG91dDoKIAl1bmxvY2tfcnNiKHIpOwotCXJldHVybiBydjsKIH0KIAotc3RhdGljIGludCBwcmludF9mb3JtYXQ0KHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCitzdGF0aWMgdm9pZCBwcmludF9mb3JtYXQ0KHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCiB7CiAJaW50IG91cl9ub2RlaWQgPSBkbG1fb3VyX25vZGVpZCgpOwogCWludCBwcmludF9uYW1lID0gMTsKLQlpbnQgaSwgcnY7CisJaW50IGk7CiAKIAlsb2NrX3JzYihyKTsKIAotCXJ2ID0gc2VxX3ByaW50ZihzLCAicnNiICVwICVkICVkICVkICVkICVsdSAlbHggJWQgIiwKLQkJCXIsCi0JCQlyLT5yZXNfbm9kZWlkLAotCQkJci0+cmVzX21hc3Rlcl9ub2RlaWQsCi0JCQlyLT5yZXNfZGlyX25vZGVpZCwKLQkJCW91cl9ub2RlaWQsCi0JCQlyLT5yZXNfdG9zc190aW1lLAotCQkJci0+cmVzX2ZsYWdzLAotCQkJci0+cmVzX2xlbmd0aCk7Ci0JaWYgKHJ2KQotCQlnb3RvIG91dDsKKwlzZXFfcHJpbnRmKHMsICJyc2IgJXAgJWQgJWQgJWQgJWQgJWx1ICVseCAlZCAiLAorCQkgICByLAorCQkgICByLT5yZXNfbm9kZWlkLAorCQkgICByLT5yZXNfbWFzdGVyX25vZGVpZCwKKwkJICAgci0+cmVzX2Rpcl9ub2RlaWQsCisJCSAgIG91cl9ub2RlaWQsCisJCSAgIHItPnJlc190b3NzX3RpbWUsCisJCSAgIHItPnJlc19mbGFncywKKwkJICAgci0+cmVzX2xlbmd0aCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgci0+cmVzX2xlbmd0aDsgaSsrKSB7CiAJCWlmICghaXNhc2NpaShyLT5yZXNfbmFtZVtpXSkgfHwgIWlzcHJpbnQoci0+cmVzX25hbWVbaV0pKQogCQkJcHJpbnRfbmFtZSA9IDA7CiAJfQogCi0Jc2VxX3ByaW50ZihzLCAiJXMiLCBwcmludF9uYW1lID8gInN0ciAiIDogImhleCIpOworCXNlcV9wdXRzKHMsIHByaW50X25hbWUgPyAic3RyICIgOiAiaGV4Iik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgci0+cmVzX2xlbmd0aDsgaSsrKSB7CiAJCWlmIChwcmludF9uYW1lKQpAQCAtMzc3LDEwICszNjEsOSBAQAogCQllbHNlCiAJCQlzZXFfcHJpbnRmKHMsICIgJTAyeCIsICh1bnNpZ25lZCBjaGFyKXItPnJlc19uYW1lW2ldKTsKIAl9Ci0JcnYgPSBzZXFfcHV0cyhzLCAiXG4iKTsKLSBvdXQ6CisJc2VxX3B1dHMocywgIlxuIik7CisKIAl1bmxvY2tfcnNiKHIpOwotCXJldHVybiBydjsKIH0KIAogc3RydWN0IHJzYnRibF9pdGVyIHsKQEAgLTM5MCw0NyArMzczLDQ1IEBACiAJaW50IGhlYWRlcjsKIH07CiAKLS8qIHNlcV9wcmludGYgcmV0dXJucyAtMSBpZiB0aGUgYnVmZmVyIGlzIGZ1bGwsIGFuZCAwIG90aGVyd2lzZS4KLSAgIElmIHRoZSBidWZmZXIgaXMgZnVsbCwgc2VxX3ByaW50ZiBjYW4gYmUgY2FsbGVkIGFnYWluLCBidXQgaXQKLSAgIGRvZXMgbm90aGluZyBhbmQganVzdCByZXR1cm5zIC0xLiAgU28sIHRoZSB0aGVzZSBwcmludGluZyByb3V0aW5lcwotICAgcGVyaW9kaWNhbGx5IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgdG8gYXZvaWQgd2FzdGluZyB0b28gbXVjaCB0aW1lCi0gICB0cnlpbmcgdG8gcHJpbnQgdG8gYSBmdWxsIGJ1ZmZlci4gKi8KKy8qCisgKiBJZiB0aGUgYnVmZmVyIGlzIGZ1bGwsIHNlcV9wcmludGYgY2FuIGJlIGNhbGxlZCBhZ2FpbiwgYnV0IGl0CisgKiBkb2VzIG5vdGhpbmcuICBTbywgdGhlIHRoZXNlIHByaW50aW5nIHJvdXRpbmVzIHBlcmlvZGljYWxseSBjaGVjaworICogc2VxX2hhc19vdmVyZmxvd2VkIHRvIGF2b2lkIHdhc3RpbmcgdG9vIG11Y2ggdGltZSB0cnlpbmcgdG8gcHJpbnQgdG8KKyAqIGEgZnVsbCBidWZmZXIuCisgKi8KIAogc3RhdGljIGludCB0YWJsZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqaXRlcl9wdHIpCiB7CiAJc3RydWN0IHJzYnRibF9pdGVyICpyaSA9IGl0ZXJfcHRyOwotCWludCBydiA9IDA7CiAKIAlzd2l0Y2ggKHJpLT5mb3JtYXQpIHsKIAljYXNlIDE6Ci0JCXJ2ID0gcHJpbnRfZm9ybWF0MShyaS0+cnNiLCBzZXEpOworCQlwcmludF9mb3JtYXQxKHJpLT5yc2IsIHNlcSk7CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJaWYgKHJpLT5oZWFkZXIpIHsKLQkJCXNlcV9wcmludGYoc2VxLCAiaWQgbm9kZWlkIHJlbWlkIHBpZCB4aWQgZXhmbGFncyAiCi0JCQkJCSJmbGFncyBzdHMgZ3Jtb2RlIHJxbW9kZSB0aW1lX21zICIKLQkJCQkJInJfbm9kZWlkIHJfbGVuIHJfbmFtZVxuIik7CisJCQlzZXFfcHV0cyhzZXEsICJpZCBub2RlaWQgcmVtaWQgcGlkIHhpZCBleGZsYWdzIGZsYWdzIHN0cyBncm1vZGUgcnFtb2RlIHRpbWVfbXMgcl9ub2RlaWQgcl9sZW4gcl9uYW1lXG4iKTsKIAkJCXJpLT5oZWFkZXIgPSAwOwogCQl9Ci0JCXJ2ID0gcHJpbnRfZm9ybWF0MihyaS0+cnNiLCBzZXEpOworCQlwcmludF9mb3JtYXQyKHJpLT5yc2IsIHNlcSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKIAkJaWYgKHJpLT5oZWFkZXIpIHsKLQkJCXNlcV9wcmludGYoc2VxLCAidmVyc2lvbiByc2IgMS4xIGx2YiAxLjEgbGtiIDEuMVxuIik7CisJCQlzZXFfcHV0cyhzZXEsICJ2ZXJzaW9uIHJzYiAxLjEgbHZiIDEuMSBsa2IgMS4xXG4iKTsKIAkJCXJpLT5oZWFkZXIgPSAwOwogCQl9Ci0JCXJ2ID0gcHJpbnRfZm9ybWF0MyhyaS0+cnNiLCBzZXEpOworCQlwcmludF9mb3JtYXQzKHJpLT5yc2IsIHNlcSk7CiAJCWJyZWFrOwogCWNhc2UgNDoKIAkJaWYgKHJpLT5oZWFkZXIpIHsKLQkJCXNlcV9wcmludGYoc2VxLCAidmVyc2lvbiA0IHJzYiAyXG4iKTsKKwkJCXNlcV9wdXRzKHNlcSwgInZlcnNpb24gNCByc2IgMlxuIik7CiAJCQlyaS0+aGVhZGVyID0gMDsKIAkJfQotCQlydiA9IHByaW50X2Zvcm1hdDQocmktPnJzYiwgc2VxKTsKKwkJcHJpbnRfZm9ybWF0NChyaS0+cnNiLCBzZXEpOwogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gcnY7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZm9ybWF0MV9zZXFfb3BzOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2suYyBiL2ZzL2RsbS9sb2NrLmMKaW5kZXggODNmM2Q1NS4uMzU1MDJkNCAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvY2suYworKysgYi9mcy9kbG0vbG9jay5jCkBAIC01ODg2LDYgKzU4ODYsNzggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKKy8qCisgKiBUaGUgY2FsbGVyIGFza3MgZm9yIGFuIG9ycGhhbiBsb2NrIG9uIGEgZ2l2ZW4gcmVzb3VyY2Ugd2l0aCBhIGdpdmVuIG1vZGUuCisgKiBJZiBhIG1hdGNoaW5nIGxvY2sgZXhpc3RzLCBpdCdzIG1vdmVkIHRvIHRoZSBvd25lcidzIGxpc3Qgb2YgbG9ja3MgYW5kCisgKiB0aGUgbGtpZCBpcyByZXR1cm5lZC4KKyAqLworCitpbnQgZGxtX3VzZXJfYWRvcHRfb3JwaGFuKHN0cnVjdCBkbG1fbHMgKmxzLCBzdHJ1Y3QgZGxtX3VzZXJfYXJncyAqdWFfdG1wLAorCQkgICAgIGludCBtb2RlLCB1aW50MzJfdCBmbGFncywgdm9pZCAqbmFtZSwgdW5zaWduZWQgaW50IG5hbWVsZW4sCisJCSAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X2NzLCB1aW50MzJfdCAqbGtpZCkKK3sKKwlzdHJ1Y3QgZGxtX2xrYiAqbGtiOworCXN0cnVjdCBkbG1fdXNlcl9hcmdzICp1YTsKKwlpbnQgZm91bmRfb3RoZXJfbW9kZSA9IDA7CisJaW50IGZvdW5kID0gMDsKKwlpbnQgcnYgPSAwOworCisJbXV0ZXhfbG9jaygmbHMtPmxzX29ycGhhbnNfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobGtiLCAmbHMtPmxzX29ycGhhbnMsIGxrYl9vd25xdWV1ZSkgeworCQlpZiAobGtiLT5sa2JfcmVzb3VyY2UtPnJlc19sZW5ndGggIT0gbmFtZWxlbikKKwkJCWNvbnRpbnVlOworCQlpZiAobWVtY21wKGxrYi0+bGtiX3Jlc291cmNlLT5yZXNfbmFtZSwgbmFtZSwgbmFtZWxlbikpCisJCQljb250aW51ZTsKKwkJaWYgKGxrYi0+bGtiX2dybW9kZSAhPSBtb2RlKSB7CisJCQlmb3VuZF9vdGhlcl9tb2RlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm91bmQgPSAxOworCQlsaXN0X2RlbF9pbml0KCZsa2ItPmxrYl9vd25xdWV1ZSk7CisJCWxrYi0+bGtiX2ZsYWdzICY9IH5ETE1fSUZMX09SUEhBTjsKKwkJKmxraWQgPSBsa2ItPmxrYl9pZDsKKwkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmbHMtPmxzX29ycGhhbnNfbXV0ZXgpOworCisJaWYgKCFmb3VuZCAmJiBmb3VuZF9vdGhlcl9tb2RlKSB7CisJCXJ2ID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFmb3VuZCkgeworCQlydiA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCWxrYi0+bGtiX2V4ZmxhZ3MgPSBmbGFnczsKKwlsa2ItPmxrYl9vd25waWQgPSAoaW50KSBjdXJyZW50LT5waWQ7CisKKwl1YSA9IGxrYi0+bGtiX3VhOworCisJdWEtPnByb2MgPSB1YV90bXAtPnByb2M7CisJdWEtPnhpZCA9IHVhX3RtcC0+eGlkOworCXVhLT5jYXN0cGFyYW0gPSB1YV90bXAtPmNhc3RwYXJhbTsKKwl1YS0+Y2FzdGFkZHIgPSB1YV90bXAtPmNhc3RhZGRyOworCXVhLT5iYXN0cGFyYW0gPSB1YV90bXAtPmJhc3RwYXJhbTsKKwl1YS0+YmFzdGFkZHIgPSB1YV90bXAtPmJhc3RhZGRyOworCXVhLT51c2VyX2xrc2IgPSB1YV90bXAtPnVzZXJfbGtzYjsKKworCS8qCisJICogVGhlIGxrYiByZWZlcmVuY2UgZnJvbSB0aGUgbHNfb3JwaGFucyBsaXN0IHdhcyBub3QKKwkgKiByZW1vdmVkIGFib3ZlLCBhbmQgaXMgbm93IGNvbnNpZGVyZWQgdGhlIHJlZmVyZW5jZQorCSAqIGZvciB0aGUgcHJvYyBsb2NrcyBsaXN0LgorCSAqLworCisJc3Bpbl9sb2NrKCZ1YS0+cHJvYy0+bG9ja3Nfc3Bpbik7CisJbGlzdF9hZGRfdGFpbCgmbGtiLT5sa2Jfb3ducXVldWUsICZ1YS0+cHJvYy0+bG9ja3MpOworCXNwaW5fdW5sb2NrKCZ1YS0+cHJvYy0+bG9ja3Nfc3Bpbik7Cisgb3V0OgorCWtmcmVlKHVhX3RtcCk7CisJcmV0dXJuIHJ2OworfQorCiBpbnQgZGxtX3VzZXJfdW5sb2NrKHN0cnVjdCBkbG1fbHMgKmxzLCBzdHJ1Y3QgZGxtX3VzZXJfYXJncyAqdWFfdG1wLAogCQkgICAgdWludDMyX3QgZmxhZ3MsIHVpbnQzMl90IGxraWQsIGNoYXIgKmx2Yl9pbikKIHsKQEAgLTYwMjksNyArNjEwMSw3IEBACiAJc3RydWN0IGRsbV9hcmdzIGFyZ3M7CiAJaW50IGVycm9yOwogCi0JaG9sZF9sa2IobGtiKTsKKwlob2xkX2xrYihsa2IpOyAvKiByZWZlcmVuY2UgZm9yIHRoZSBsc19vcnBoYW5zIGxpc3QgKi8KIAltdXRleF9sb2NrKCZscy0+bHNfb3JwaGFuc19tdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmbGtiLT5sa2Jfb3ducXVldWUsICZscy0+bHNfb3JwaGFucyk7CiAJbXV0ZXhfdW5sb2NrKCZscy0+bHNfb3JwaGFuc19tdXRleCk7CkBAIC02MjE3LDcgKzYyODksNyBAQAogewogCWludCBlcnJvciA9IDA7CiAKLQlpZiAobm9kZWlkICE9IGRsbV9vdXJfbm9kZWlkKCkpIHsKKwlpZiAobm9kZWlkICYmIChub2RlaWQgIT0gZGxtX291cl9ub2RlaWQoKSkpIHsKIAkJZXJyb3IgPSBzZW5kX3B1cmdlKGxzLCBub2RlaWQsIHBpZCk7CiAJfSBlbHNlIHsKIAkJZGxtX2xvY2tfcmVjb3ZlcnkobHMpOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2suaCBiL2ZzL2RsbS9sb2NrLmgKaW5kZXggNWUwYzcyZS4uZWQ4ZWJkMyAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvY2suaAorKysgYi9mcy9kbG0vbG9jay5oCkBAIC00OSw2ICs0OSw5IEBACiBpbnQgZGxtX3VzZXJfY29udmVydChzdHJ1Y3QgZGxtX2xzICpscywgc3RydWN0IGRsbV91c2VyX2FyZ3MgKnVhX3RtcCwKIAlpbnQgbW9kZSwgdWludDMyX3QgZmxhZ3MsIHVpbnQzMl90IGxraWQsIGNoYXIgKmx2Yl9pbiwKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXRfY3MpOworaW50IGRsbV91c2VyX2Fkb3B0X29ycGhhbihzdHJ1Y3QgZGxtX2xzICpscywgc3RydWN0IGRsbV91c2VyX2FyZ3MgKnVhX3RtcCwKKwlpbnQgbW9kZSwgdWludDMyX3QgZmxhZ3MsIHZvaWQgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lbGVuLAorCXVuc2lnbmVkIGxvbmcgdGltZW91dF9jcywgdWludDMyX3QgKmxraWQpOwogaW50IGRsbV91c2VyX3VubG9jayhzdHJ1Y3QgZGxtX2xzICpscywgc3RydWN0IGRsbV91c2VyX2FyZ3MgKnVhX3RtcCwKIAl1aW50MzJfdCBmbGFncywgdWludDMyX3QgbGtpZCwgY2hhciAqbHZiX2luKTsKIGludCBkbG1fdXNlcl9jYW5jZWwoc3RydWN0IGRsbV9scyAqbHMsICBzdHJ1Y3QgZGxtX3VzZXJfYXJncyAqdWFfdG1wLApkaWZmIC0tZ2l0IGEvZnMvZGxtL3VzZXIuYyBiL2ZzL2RsbS91c2VyLmMKaW5kZXggMTQyZTIxNjUuLmZiODVmMzIgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS91c2VyLmMKKysrIGIvZnMvZGxtL3VzZXIuYwpAQCAtMjM4LDYgKzIzOCw3IEBACiB7CiAJc3RydWN0IGRsbV9scyAqbHM7CiAJc3RydWN0IGRsbV91c2VyX2FyZ3MgKnVhOworCXVpbnQzMl90IGxraWQ7CiAJaW50IGVycm9yID0gLUVOT01FTTsKIAogCWxzID0gZGxtX2ZpbmRfbG9ja3NwYWNlX2xvY2FsKHByb2MtPmxvY2tzcGFjZSk7CkBAIC0yNjAsMTIgKzI2MSwyMCBAQAogCXVhLT5iYXN0YWRkciA9IHBhcmFtcy0+YmFzdGFkZHI7CiAJdWEtPnhpZCA9IHBhcmFtcy0+eGlkOwogCi0JaWYgKHBhcmFtcy0+ZmxhZ3MgJiBETE1fTEtGX0NPTlZFUlQpCisJaWYgKHBhcmFtcy0+ZmxhZ3MgJiBETE1fTEtGX0NPTlZFUlQpIHsKIAkJZXJyb3IgPSBkbG1fdXNlcl9jb252ZXJ0KGxzLCB1YSwKIAkJCQkgICAgICAgICBwYXJhbXMtPm1vZGUsIHBhcmFtcy0+ZmxhZ3MsCiAJCQkJICAgICAgICAgcGFyYW1zLT5sa2lkLCBwYXJhbXMtPmx2YiwKIAkJCQkJICh1bnNpZ25lZCBsb25nKSBwYXJhbXMtPnRpbWVvdXQpOwotCWVsc2UgeworCX0gZWxzZSBpZiAocGFyYW1zLT5mbGFncyAmIERMTV9MS0ZfT1JQSEFOKSB7CisJCWVycm9yID0gZGxtX3VzZXJfYWRvcHRfb3JwaGFuKGxzLCB1YSwKKwkJCQkJIHBhcmFtcy0+bW9kZSwgcGFyYW1zLT5mbGFncywKKwkJCQkJIHBhcmFtcy0+bmFtZSwgcGFyYW1zLT5uYW1lbGVuLAorCQkJCQkgKHVuc2lnbmVkIGxvbmcpIHBhcmFtcy0+dGltZW91dCwKKwkJCQkJICZsa2lkKTsKKwkJaWYgKCFlcnJvcikKKwkJCWVycm9yID0gbGtpZDsKKwl9IGVsc2UgewogCQllcnJvciA9IGRsbV91c2VyX3JlcXVlc3QobHMsIHVhLAogCQkJCQkgcGFyYW1zLT5tb2RlLCBwYXJhbXMtPmZsYWdzLAogCQkJCQkgcGFyYW1zLT5uYW1lLCBwYXJhbXMtPm5hbWVsZW4sCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9jcnlwdG8uYyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCmluZGV4IDJmNjczNWQuLmMyZDY2MDQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2NyeXB0by5jCisrKyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCkBAIC0xMzczLDcgKzEzNzMsNyBAQAogaW50IGVjcnlwdGZzX3JlYWRfeGF0dHJfcmVnaW9uKGNoYXIgKnBhZ2VfdmlydCwgc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnkgPQotCQllY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2lub2RlKS0+bG93ZXJfZmlsZS0+Zl9kZW50cnk7CisJCWVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfaW5vZGUpLT5sb3dlcl9maWxlLT5mX3BhdGguZGVudHJ5OwogCXNzaXplX3Qgc2l6ZTsKIAlpbnQgcmMgPSAwOwogCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9maWxlLmMgYi9mcy9lY3J5cHRmcy9maWxlLmMKaW5kZXggZjViY2U5MC4uODAxNTRlYyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZmlsZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2ZpbGUuYwpAQCAtNzUsMTEgKzc1LDExIEBACiAKIC8qIEluc3BpcmVkIGJ5IGdlbmVyaWMgZmlsbGRpciBpbiBmcy9yZWFkZGlyLmMgKi8KIHN0YXRpYyBpbnQKLWVjcnlwdGZzX2ZpbGxkaXIodm9pZCAqZGlyZW50LCBjb25zdCBjaGFyICpsb3dlcl9uYW1lLCBpbnQgbG93ZXJfbmFtZWxlbiwKLQkJIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCitlY3J5cHRmc19maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpsb3dlcl9uYW1lLAorCQkgaW50IGxvd2VyX25hbWVsZW4sIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCiB7CiAJc3RydWN0IGVjcnlwdGZzX2dldGRlbnRzX2NhbGxiYWNrICpidWYgPQotCSAgICAoc3RydWN0IGVjcnlwdGZzX2dldGRlbnRzX2NhbGxiYWNrICopZGlyZW50OworCQljb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgZWNyeXB0ZnNfZ2V0ZGVudHNfY2FsbGJhY2ssIGN0eCk7CiAJc2l6ZV90IG5hbWVfc2l6ZTsKIAljaGFyICpuYW1lOwogCWludCByYzsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21tYXAuYyBiL2ZzL2VjcnlwdGZzL21tYXAuYwppbmRleCA1NjRhMWZhLi40NjI2OTc2IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBAIC00MTksNyArNDE5LDcgQEAKIAlzc2l6ZV90IHNpemU7CiAJdm9pZCAqeGF0dHJfdmlydDsKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnkgPQotCQllY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2lub2RlKS0+bG93ZXJfZmlsZS0+Zl9kZW50cnk7CisJCWVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfaW5vZGUpLT5sb3dlcl9maWxlLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqbG93ZXJfaW5vZGUgPSBsb3dlcl9kZW50cnktPmRfaW5vZGU7CiAJaW50IHJjOwogCmRpZmYgLS1naXQgYS9mcy9lZml2YXJmcy9maWxlLmMgYi9mcy9lZml2YXJmcy9maWxlLmMKaW5kZXggY2RiMjk3MS4uOTAwMDFkYSAxMDA2NDQKLS0tIGEvZnMvZWZpdmFyZnMvZmlsZS5jCisrKyBiL2ZzL2VmaXZhcmZzL2ZpbGUuYwpAQCAtNDcsOCArNDcsOCBAQAogCiAJaWYgKGJ5dGVzID09IC1FTk9FTlQpIHsKIAkJZHJvcF9ubGluayhpbm9kZSk7Ci0JCWRfZGVsZXRlKGZpbGUtPmZfZGVudHJ5KTsKLQkJZHB1dChmaWxlLT5mX2RlbnRyeSk7CisJCWRfZGVsZXRlKGZpbGUtPmZfcGF0aC5kZW50cnkpOworCQlkcHV0KGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCX0gZWxzZSB7CiAJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAkJaV9zaXplX3dyaXRlKGlub2RlLCBkYXRhc2l6ZSArIHNpemVvZihhdHRyaWJ1dGVzKSk7CmRpZmYgLS1naXQgYS9mcy9lZml2YXJmcy9zdXBlci5jIGIvZnMvZWZpdmFyZnMvc3VwZXIuYwppbmRleCAwYTQ4ODg2Li42ZGFkMTE3IDEwMDY0NAotLS0gYS9mcy9lZml2YXJmcy9zdXBlci5jCisrKyBiL2ZzL2VmaXZhcmZzL3N1cGVyLmMKQEAgLTIzNiw2ICsyMzYsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZWZpdmFyZnNfdHlwZSA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAogCS5uYW1lICAgID0gImVmaXZhcmZzIiwKIAkubW91bnQgICA9IGVmaXZhcmZzX21vdW50LAogCS5raWxsX3NiID0gZWZpdmFyZnNfa2lsbF9zYiwKQEAgLTI0NCwxNyArMjQ1LDIzIEBACiBzdGF0aWMgX19pbml0IGludCBlZml2YXJmc19pbml0KHZvaWQpCiB7CiAJaWYgKCFlZmlfZW5hYmxlZChFRklfUlVOVElNRV9TRVJWSUNFUykpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghZWZpdmFyc19rb2JqZWN0KCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZlZml2YXJmc190eXBlKTsKIH0KIAorc3RhdGljIF9fZXhpdCB2b2lkIGVmaXZhcmZzX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmVmaXZhcmZzX3R5cGUpOworfQorCiBNT0RVTEVfQVVUSE9SKCJNYXR0aGV3IEdhcnJldHQsIEplcmVteSBLZXJyIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkVGSSBWYXJpYWJsZSBGaWxlc3lzdGVtIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfRlMoImVmaXZhcmZzIik7CiAKIG1vZHVsZV9pbml0KGVmaXZhcmZzX2luaXQpOworbW9kdWxlX2V4aXQoZWZpdmFyZnNfZXhpdCk7CmRpZmYgLS1naXQgYS9mcy9ldmVudGZkLmMgYi9mcy9ldmVudGZkLmMKaW5kZXggZDZhODhlNy4uNGIwYTIyNiAxMDA2NDQKLS0tIGEvZnMvZXZlbnRmZC5jCisrKyBiL2ZzL2V2ZW50ZmQuYwpAQCAtMjg3LDE3ICsyODcsMTQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgaW50IGV2ZW50ZmRfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZikKK3N0YXRpYyB2b2lkIGV2ZW50ZmRfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZikKIHsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCA9IGYtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrX2lycSgmY3R4LT53cWgubG9jayk7Ci0JcmV0ID0gc2VxX3ByaW50ZihtLCAiZXZlbnRmZC1jb3VudDogJTE2bGx4XG4iLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpY3R4LT5jb3VudCk7CisJc2VxX3ByaW50ZihtLCAiZXZlbnRmZC1jb3VudDogJTE2bGx4XG4iLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWN0eC0+Y291bnQpOwogCXNwaW5fdW5sb2NrX2lycSgmY3R4LT53cWgubG9jayk7Ci0KLQlyZXR1cm4gcmV0OwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggN2JjZmZmOS4uZDc3Zjk0NCAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTg3MCwyNSArODcwLDIyIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludCBlcF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKQorc3RhdGljIHZvaWQgZXBfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZikKIHsKIAlzdHJ1Y3QgZXZlbnRwb2xsICplcCA9IGYtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmJwOwotCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmZXAtPm10eCk7CiAJZm9yIChyYnAgPSByYl9maXJzdCgmZXAtPnJicik7IHJicDsgcmJwID0gcmJfbmV4dChyYnApKSB7CiAJCXN0cnVjdCBlcGl0ZW0gKmVwaSA9IHJiX2VudHJ5KHJicCwgc3RydWN0IGVwaXRlbSwgcmJuKTsKIAotCQlyZXQgPSBzZXFfcHJpbnRmKG0sICJ0ZmQ6ICU4ZCBldmVudHM6ICU4eCBkYXRhOiAlMTZsbHhcbiIsCi0JCQkJIGVwaS0+ZmZkLmZkLCBlcGktPmV2ZW50LmV2ZW50cywKLQkJCQkgKGxvbmcgbG9uZyllcGktPmV2ZW50LmRhdGEpOwotCQlpZiAocmV0KQorCQlzZXFfcHJpbnRmKG0sICJ0ZmQ6ICU4ZCBldmVudHM6ICU4eCBkYXRhOiAlMTZsbHhcbiIsCisJCQkgICBlcGktPmZmZC5mZCwgZXBpLT5ldmVudC5ldmVudHMsCisJCQkgICAobG9uZyBsb25nKWVwaS0+ZXZlbnQuZGF0YSk7CisJCWlmIChzZXFfaGFzX292ZXJmbG93ZWQobSkpCiAJCQlicmVhazsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZlcC0+bXR4KTsKLQotCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDczMDJiNzUuLjAxYWViZTMgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTI3Nyw2ICsyNzcsNyBAQAogCQlnb3RvIGVycjsKIAogCW1tLT5zdGFja192bSA9IG1tLT50b3RhbF92bSA9IDE7CisJYXJjaF9icHJtX21tX2luaXQobW0sIHZtYSk7CiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJYnBybS0+cCA9IHZtYS0+dm1fZW5kIC0gc2l6ZW9mKHZvaWQgKik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9leHBvcnRmcy9leHBmcy5jIGIvZnMvZXhwb3J0ZnMvZXhwZnMuYwppbmRleCBiMDFmYmZiLi5mZGZkMjA2IDEwMDY0NAotLS0gYS9mcy9leHBvcnRmcy9leHBmcy5jCisrKyBiL2ZzL2V4cG9ydGZzL2V4cGZzLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAogCWlub2RlID0gcmVzdWx0LT5kX2lub2RlOwogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoZGVudHJ5LCAmaW5vZGUtPmlfZGVudHJ5LCBkX2FsaWFzKSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZGVudHJ5LCAmaW5vZGUtPmlfZGVudHJ5LCBkX3UuZF9hbGlhcykgewogCQlkZ2V0KGRlbnRyeSk7CiAJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJaWYgKHRvcHV0KQpAQCAtMjQxLDEwICsyNDEsMTEgQEAKICAqIEEgcmF0aGVyIHN0cmFuZ2UgZmlsbGRpciBmdW5jdGlvbiB0byBjYXB0dXJlCiAgKiB0aGUgbmFtZSBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGlub2RlIG51bWJlci4KICAqLwotc3RhdGljIGludCBmaWxsZGlyX29uZSh2b2lkICogX19idWYsIGNvbnN0IGNoYXIgKiBuYW1lLCBpbnQgbGVuLAorc3RhdGljIGludCBmaWxsZGlyX29uZShzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKIAkJCWxvZmZfdCBwb3MsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCiB7Ci0Jc3RydWN0IGdldGRlbnRzX2NhbGxiYWNrICpidWYgPSBfX2J1ZjsKKwlzdHJ1Y3QgZ2V0ZGVudHNfY2FsbGJhY2sgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBnZXRkZW50c19jYWxsYmFjaywgY3R4KTsKIAlpbnQgcmVzdWx0ID0gMDsKIAogCWJ1Zi0+c2VxdWVuY2UrKzsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmgKaW5kZXggZDlhMTdkMC4uZTQyNzllYSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9leHQyLmgKKysrIGIvZnMvZXh0Mi9leHQyLmgKQEAgLTY4OSw2ICs2ODksOSBAQAogCXN0cnVjdCBtdXRleCB0cnVuY2F0ZV9tdXRleDsKIAlzdHJ1Y3QgaW5vZGUJdmZzX2lub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgaV9vcnBoYW47CS8qIHVubGlua2VkIGJ1dCBvcGVuIGlub2RlcyAqLworI2lmZGVmIENPTkZJR19RVU9UQQorCXN0cnVjdCBkcXVvdCAqaV9kcXVvdFtNQVhRVU9UQVNdOworI2VuZGlmCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IDE3MGRjNDEuLmFlNTVmZGQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYworKysgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTE2Niw2ICsxNjYsMTAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJZWktPmlfYmxvY2tfYWxsb2NfaW5mbyA9IE5VTEw7CiAJZWktPnZmc19pbm9kZS5pX3ZlcnNpb24gPSAxOworI2lmZGVmIENPTkZJR19RVU9UQQorCW1lbXNldCgmZWktPmlfZHF1b3QsIDAsIHNpemVvZihlaS0+aV9kcXVvdCkpOworI2VuZGlmCisKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKQEAgLTMwMyw2ICszMDcsMTAgQEAKICNpZmRlZiBDT05GSUdfUVVPVEEKIHN0YXRpYyBzc2l6ZV90IGV4dDJfcXVvdGFfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7CiBzdGF0aWMgc3NpemVfdCBleHQyX3F1b3RhX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKTsKK3N0YXRpYyBzdHJ1Y3QgZHF1b3QgKipleHQyX2dldF9kcXVvdHMoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gRVhUMl9JKGlub2RlKS0+aV9kcXVvdDsKK30KICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0gewpAQCAtMzIwLDYgKzMyOCw3IEBACiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJLnF1b3RhX3JlYWQJPSBleHQyX3F1b3RhX3JlYWQsCiAJLnF1b3RhX3dyaXRlCT0gZXh0Ml9xdW90YV93cml0ZSwKKwkuZ2V0X2RxdW90cwk9IGV4dDJfZ2V0X2RxdW90cywKICNlbmRpZgogfTsKIApAQCAtMTA5MCw2ICsxMDk5LDcgQEAKICNpZmRlZiBDT05GSUdfUVVPVEEKIAlzYi0+ZHFfb3AgPSAmZHF1b3Rfb3BlcmF0aW9uczsKIAlzYi0+c19xY29wID0gJmRxdW90X3F1b3RhY3RsX29wczsKKwlzYi0+c19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlA7CiAjZW5kaWYKIAogCXJvb3QgPSBleHQyX2lnZXQoc2IsIEVYVDJfUk9PVF9JTk8pOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9leHQzLmggYi9mcy9leHQzL2V4dDMuaAppbmRleCBmYzNjZGNmLi5mNDgzYTgwIDEwMDY0NAotLS0gYS9mcy9leHQzL2V4dDMuaAorKysgYi9mcy9leHQzL2V4dDMuaApAQCAtNjE1LDYgKzYxNSwxMCBAQAogCWF0b21pY190IGlfc3luY190aWQ7CiAJYXRvbWljX3QgaV9kYXRhc3luY190aWQ7CiAKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwlzdHJ1Y3QgZHF1b3QgKmlfZHF1b3RbTUFYUVVPVEFTXTsKKyNlbmRpZgorCiAJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCBlYjc0MmQwLi45YjRlN2Q3IDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC00ODUsNiArNDg1LDEwIEBACiAJZWktPnZmc19pbm9kZS5pX3ZlcnNpb24gPSAxOwogCWF0b21pY19zZXQoJmVpLT5pX2RhdGFzeW5jX3RpZCwgMCk7CiAJYXRvbWljX3NldCgmZWktPmlfc3luY190aWQsIDApOworI2lmZGVmIENPTkZJR19RVU9UQQorCW1lbXNldCgmZWktPmlfZHF1b3QsIDAsIHNpemVvZihlaS0+aV9kcXVvdCkpOworI2VuZGlmCisKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKQEAgLTc2NCw2ICs3NjgsMTAgQEAKIAkJCSAgICAgICBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKTsKIHN0YXRpYyBzc2l6ZV90IGV4dDNfcXVvdGFfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsCiAJCQkJY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7CitzdGF0aWMgc3RydWN0IGRxdW90ICoqZXh0M19nZXRfZHF1b3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIEVYVDNfSShpbm9kZSktPmlfZHF1b3Q7Cit9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBleHQzX3F1b3RhX29wZXJhdGlvbnMgPSB7CiAJLndyaXRlX2RxdW90CT0gZXh0M193cml0ZV9kcXVvdCwKQEAgLTgwMyw2ICs4MTEsNyBAQAogI2lmZGVmIENPTkZJR19RVU9UQQogCS5xdW90YV9yZWFkCT0gZXh0M19xdW90YV9yZWFkLAogCS5xdW90YV93cml0ZQk9IGV4dDNfcXVvdGFfd3JpdGUsCisJLmdldF9kcXVvdHMJPSBleHQzX2dldF9kcXVvdHMsCiAjZW5kaWYKIAkuYmRldl90cnlfdG9fZnJlZV9wYWdlID0gYmRldl90cnlfdG9fZnJlZV9wYWdlLAogfTsKQEAgLTIwMDEsNiArMjAxMCw3IEBACiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJc2ItPnNfcWNvcCA9ICZleHQzX3FjdGxfb3BlcmF0aW9uczsKIAlzYi0+ZHFfb3AgPSAmZXh0M19xdW90YV9vcGVyYXRpb25zOworCXNiLT5zX3F1b3RhX3R5cGVzID0gUVRZUEVfTUFTS19VU1IgfCBRVFlQRV9NQVNLX0dSUDsKICNlbmRpZgogCW1lbWNweShzYi0+c191dWlkLCBlcy0+c191dWlkLCBzaXplb2YoZXMtPnNfdXVpZCkpOwogCUlOSVRfTElTVF9IRUFEKCZzYmktPnNfb3JwaGFuKTsgLyogdW5saW5rZWQgYnV0IG9wZW4gZmlsZXMgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYzU1YTFmYS4uZGIzZjc3MiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTk0MSw2ICs5NDEsMTAgQEAKIAl0aWRfdCBpX3N5bmNfdGlkOwogCXRpZF90IGlfZGF0YXN5bmNfdGlkOwogCisjaWZkZWYgQ09ORklHX1FVT1RBCisJc3RydWN0IGRxdW90ICppX2RxdW90W01BWFFVT1RBU107CisjZW5kaWYKKwogCS8qIFByZWNvbXB1dGVkIHV1aWQraW51bStpZ2VuIGNoZWNrc3VtIGZvciBzZWVkaW5nIGlub2RlIGNoZWNrc3VtcyAqLwogCV9fdTMyIGlfY3N1bV9zZWVkOwogfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyYzllNjg2Li42M2U4MDJiIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC04OTIsNiArODkyLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmKGVpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spKTsKICNpZmRlZiBDT05GSUdfUVVPVEEKIAllaS0+aV9yZXNlcnZlZF9xdW90YSA9IDA7CisJbWVtc2V0KCZlaS0+aV9kcXVvdCwgMCwgc2l6ZW9mKGVpLT5pX2RxdW90KSk7CiAjZW5kaWYKIAllaS0+amlub2RlID0gTlVMTDsKIAlJTklUX0xJU1RfSEVBRCgmZWktPmlfcnN2X2NvbnZlcnNpb25fbGlzdCk7CkBAIC0xMDY4LDYgKzEwNjksMTEgQEAKIAkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKIHN0YXRpYyBpbnQgZXh0NF9lbmFibGVfcXVvdGFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogCitzdGF0aWMgc3RydWN0IGRxdW90ICoqZXh0NF9nZXRfZHF1b3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIEVYVDRfSShpbm9kZSktPmlfZHF1b3Q7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBleHQ0X3F1b3RhX29wZXJhdGlvbnMgPSB7CiAJLmdldF9yZXNlcnZlZF9zcGFjZSA9IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlLAogCS53cml0ZV9kcXVvdAk9IGV4dDRfd3JpdGVfZHF1b3QsCkBAIC0xMTE3LDYgKzExMjMsNyBAQAogI2lmZGVmIENPTkZJR19RVU9UQQogCS5xdW90YV9yZWFkCT0gZXh0NF9xdW90YV9yZWFkLAogCS5xdW90YV93cml0ZQk9IGV4dDRfcXVvdGFfd3JpdGUsCisJLmdldF9kcXVvdHMJPSBleHQ0X2dldF9kcXVvdHMsCiAjZW5kaWYKIAkuYmRldl90cnlfdG9fZnJlZV9wYWdlID0gYmRldl90cnlfdG9fZnJlZV9wYWdlLAogfTsKQEAgLTM5MzIsNiArMzkzOSw3IEBACiAJCXNiLT5zX3Fjb3AgPSAmZXh0NF9xY3RsX3N5c2ZpbGVfb3BlcmF0aW9uczsKIAllbHNlCiAJCXNiLT5zX3Fjb3AgPSAmZXh0NF9xY3RsX29wZXJhdGlvbnM7CisJc2ItPnNfcXVvdGFfdHlwZXMgPSBRVFlQRV9NQVNLX1VTUiB8IFFUWVBFX01BU0tfR1JQOwogI2VuZGlmCiAJbWVtY3B5KHNiLT5zX3V1aWQsIGVzLT5zX3V1aWQsIHNpemVvZihlcy0+c191dWlkKSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvYWNsLmMgYi9mcy9mMmZzL2FjbC5jCmluZGV4IDgzYjliNWEuLjFjY2IyNmIgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvYWNsLmMKKysrIGIvZnMvZjJmcy9hY2wuYwpAQCAtMTYyLDcgKzE2Miw4IEBACiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKLXN0cnVjdCBwb3NpeF9hY2wgKmYyZnNfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSkKK3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpfX2YyZnNfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwKKwkJCQkJCXN0cnVjdCBwYWdlICpkcGFnZSkKIHsKIAlpbnQgbmFtZV9pbmRleCA9IEYyRlNfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7CiAJdm9pZCAqdmFsdWUgPSBOVUxMOwpAQCAtMTcyLDEyICsxNzMsMTMgQEAKIAlpZiAodHlwZSA9PSBBQ0xfVFlQRV9BQ0NFU1MpCiAJCW5hbWVfaW5kZXggPSBGMkZTX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7CiAKLQlyZXR2YWwgPSBmMmZzX2dldHhhdHRyKGlub2RlLCBuYW1lX2luZGV4LCAiIiwgTlVMTCwgMCk7CisJcmV0dmFsID0gZjJmc19nZXR4YXR0cihpbm9kZSwgbmFtZV9pbmRleCwgIiIsIE5VTEwsIDAsIGRwYWdlKTsKIAlpZiAocmV0dmFsID4gMCkgewogCQl2YWx1ZSA9IGttYWxsb2MocmV0dmFsLCBHRlBfRjJGU19aRVJPKTsKIAkJaWYgKCF2YWx1ZSkKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCQlyZXR2YWwgPSBmMmZzX2dldHhhdHRyKGlub2RlLCBuYW1lX2luZGV4LCAiIiwgdmFsdWUsIHJldHZhbCk7CisJCXJldHZhbCA9IGYyZnNfZ2V0eGF0dHIoaW5vZGUsIG5hbWVfaW5kZXgsICIiLCB2YWx1ZSwKKwkJCQkJCQlyZXR2YWwsIGRwYWdlKTsKIAl9CiAKIAlpZiAocmV0dmFsID4gMCkKQEAgLTE5NCw2ICsxOTYsMTEgQEAKIAlyZXR1cm4gYWNsOwogfQogCitzdHJ1Y3QgcG9zaXhfYWNsICpmMmZzX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCit7CisJcmV0dXJuIF9fZjJmc19nZXRfYWNsKGlub2RlLCB0eXBlLCBOVUxMKTsKK30KKwogc3RhdGljIGludCBfX2YyZnNfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwKIAkJCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgc3RydWN0IHBhZ2UgKmlwYWdlKQogewpAQCAtMjI5LDcgKzIzNiw3IEBACiAJaWYgKGFjbCkgewogCQl2YWx1ZSA9IGYyZnNfYWNsX3RvX2Rpc2soYWNsLCAmc2l6ZSk7CiAJCWlmIChJU19FUlIodmFsdWUpKSB7Ci0JCQljb25kX2NsZWFyX2lub2RlX2ZsYWcoZmksIEZJX0FDTF9NT0RFKTsKKwkJCWNsZWFyX2lub2RlX2ZsYWcoZmksIEZJX0FDTF9NT0RFKTsKIAkJCXJldHVybiAoaW50KVBUUl9FUlIodmFsdWUpOwogCQl9CiAJfQpAQCAtMjQwLDcgKzI0Nyw3IEBACiAJaWYgKCFlcnJvcikKIAkJc2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUsIGFjbCk7CiAKLQljb25kX2NsZWFyX2lub2RlX2ZsYWcoZmksIEZJX0FDTF9NT0RFKTsKKwljbGVhcl9pbm9kZV9mbGFnKGZpLCBGSV9BQ0xfTU9ERSk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yNDksMTIgKzI1NiwxMzcgQEAKIAlyZXR1cm4gX19mMmZzX3NldF9hY2woaW5vZGUsIHR5cGUsIGFjbCwgTlVMTCk7CiB9CiAKLWludCBmMmZzX2luaXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgcGFnZSAqaXBhZ2UpCisvKgorICogTW9zdCBwYXJ0IG9mIGYyZnNfYWNsX2Nsb25lLCBmMmZzX2FjbF9jcmVhdGVfbWFzcSwgZjJmc19hY2xfY3JlYXRlCisgKiBhcmUgY29waWVkIGZyb20gcG9zaXhfYWNsLmMKKyAqLworc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKmYyZnNfYWNsX2Nsb25lKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwKKwkJCQkJCQlnZnBfdCBmbGFncykKIHsKLQlzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCwgKmFjbDsKKwlzdHJ1Y3QgcG9zaXhfYWNsICpjbG9uZSA9IE5VTEw7CisKKwlpZiAoYWNsKSB7CisJCWludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBwb3NpeF9hY2wpICsgYWNsLT5hX2NvdW50ICoKKwkJCQlzaXplb2Yoc3RydWN0IHBvc2l4X2FjbF9lbnRyeSk7CisJCWNsb25lID0ga21lbWR1cChhY2wsIHNpemUsIGZsYWdzKTsKKwkJaWYgKGNsb25lKQorCQkJYXRvbWljX3NldCgmY2xvbmUtPmFfcmVmY291bnQsIDEpOworCX0KKwlyZXR1cm4gY2xvbmU7Cit9CisKK3N0YXRpYyBpbnQgZjJmc19hY2xfY3JlYXRlX21hc3Eoc3RydWN0IHBvc2l4X2FjbCAqYWNsLCB1bW9kZV90ICptb2RlX3ApCit7CisJc3RydWN0IHBvc2l4X2FjbF9lbnRyeSAqcGEsICpwZTsKKwlzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5ICpncm91cF9vYmogPSBOVUxMLCAqbWFza19vYmogPSBOVUxMOworCXVtb2RlX3QgbW9kZSA9ICptb2RlX3A7CisJaW50IG5vdF9lcXVpdiA9IDA7CisKKwkvKiBhc3NlcnQoYXRvbWljX3JlYWQoYWNsLT5hX3JlZmNvdW50KSA9PSAxKTsgKi8KKworCUZPUkVBQ0hfQUNMX0VOVFJZKHBhLCBhY2wsIHBlKSB7CisJCXN3aXRjaChwYS0+ZV90YWcpIHsKKwkJY2FzZSBBQ0xfVVNFUl9PQko6CisJCQlwYS0+ZV9wZXJtICY9IChtb2RlID4+IDYpIHwgflNfSVJXWE87CisJCQltb2RlICY9IChwYS0+ZV9wZXJtIDw8IDYpIHwgflNfSVJXWFU7CisJCQlicmVhazsKKworCQljYXNlIEFDTF9VU0VSOgorCQljYXNlIEFDTF9HUk9VUDoKKwkJCW5vdF9lcXVpdiA9IDE7CisJCQlicmVhazsKKworCQljYXNlIEFDTF9HUk9VUF9PQko6CisJCQlncm91cF9vYmogPSBwYTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUNMX09USEVSOgorCQkJcGEtPmVfcGVybSAmPSBtb2RlIHwgflNfSVJXWE87CisJCQltb2RlICY9IHBhLT5lX3Blcm0gfCB+U19JUldYTzsKKwkJCWJyZWFrOworCisJCWNhc2UgQUNMX01BU0s6CisJCQltYXNrX29iaiA9IHBhOworCQkJbm90X2VxdWl2ID0gMTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCWlmIChtYXNrX29iaikgeworCQltYXNrX29iai0+ZV9wZXJtICY9IChtb2RlID4+IDMpIHwgflNfSVJXWE87CisJCW1vZGUgJj0gKG1hc2tfb2JqLT5lX3Blcm0gPDwgMykgfCB+U19JUldYRzsKKwl9IGVsc2UgeworCQlpZiAoIWdyb3VwX29iaikKKwkJCXJldHVybiAtRUlPOworCQlncm91cF9vYmotPmVfcGVybSAmPSAobW9kZSA+PiAzKSB8IH5TX0lSV1hPOworCQltb2RlICY9IChncm91cF9vYmotPmVfcGVybSA8PCAzKSB8IH5TX0lSV1hHOworCX0KKworCSptb2RlX3AgPSAoKm1vZGVfcCAmIH5TX0lSV1hVR08pIHwgbW9kZTsKKyAgICAgICAgcmV0dXJuIG5vdF9lcXVpdjsKK30KKworc3RhdGljIGludCBmMmZzX2FjbF9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgKm1vZGUsCisJCXN0cnVjdCBwb3NpeF9hY2wgKipkZWZhdWx0X2FjbCwgc3RydWN0IHBvc2l4X2FjbCAqKmFjbCwKKwkJc3RydWN0IHBhZ2UgKmRwYWdlKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKnA7CisJaW50IHJldDsKKworCWlmIChTX0lTTE5LKCptb2RlKSB8fCAhSVNfUE9TSVhBQ0woZGlyKSkKKwkJZ290byBub19hY2w7CisKKwlwID0gX19mMmZzX2dldF9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkcGFnZSk7CisJaWYgKElTX0VSUihwKSkgeworCQlpZiAocCA9PSBFUlJfUFRSKC1FT1BOT1RTVVBQKSkKKwkJCWdvdG8gYXBwbHlfdW1hc2s7CisJCXJldHVybiBQVFJfRVJSKHApOworCX0KKworCWlmICghcCkKKwkJZ290byBhcHBseV91bWFzazsKKworCSphY2wgPSBmMmZzX2FjbF9jbG9uZShwLCBHRlBfTk9GUyk7CisJaWYgKCEqYWNsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGYyZnNfYWNsX2NyZWF0ZV9tYXNxKCphY2wsIG1vZGUpOworCWlmIChyZXQgPCAwKSB7CisJCXBvc2l4X2FjbF9yZWxlYXNlKCphY2wpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAocmV0ID09IDApIHsKKwkJcG9zaXhfYWNsX3JlbGVhc2UoKmFjbCk7CisJCSphY2wgPSBOVUxMOworCX0KKworCWlmICghU19JU0RJUigqbW9kZSkpIHsKKwkJcG9zaXhfYWNsX3JlbGVhc2UocCk7CisJCSpkZWZhdWx0X2FjbCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJKmRlZmF1bHRfYWNsID0gcDsKKwl9CisJcmV0dXJuIDA7CisKK2FwcGx5X3VtYXNrOgorCSptb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7Citub19hY2w6CisJKmRlZmF1bHRfYWNsID0gTlVMTDsKKwkqYWNsID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworaW50IGYyZnNfaW5pdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBwYWdlICppcGFnZSwKKwkJCQkJCQlzdHJ1Y3QgcGFnZSAqZHBhZ2UpCit7CisJc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2wgPSBOVUxMLCAqYWNsID0gTlVMTDsKIAlpbnQgZXJyb3IgPSAwOwogCi0JZXJyb3IgPSBwb3NpeF9hY2xfY3JlYXRlKGRpciwgJmlub2RlLT5pX21vZGUsICZkZWZhdWx0X2FjbCwgJmFjbCk7CisJZXJyb3IgPSBmMmZzX2FjbF9jcmVhdGUoZGlyLCAmaW5vZGUtPmlfbW9kZSwgJmRlZmF1bHRfYWNsLCAmYWNsLCBkcGFnZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvYWNsLmggYi9mcy9mMmZzL2FjbC5oCmluZGV4IGUwODY0NjUuLjk5N2NhOGUgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvYWNsLmgKKysrIGIvZnMvZjJmcy9hY2wuaApAQCAtMzgsMTQgKzM4LDE1IEBACiAKIGV4dGVybiBzdHJ1Y3QgcG9zaXhfYWNsICpmMmZzX2dldF9hY2woc3RydWN0IGlub2RlICosIGludCk7CiBleHRlcm4gaW50IGYyZnNfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTsKLWV4dGVybiBpbnQgZjJmc19pbml0X2FjbChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICopOworZXh0ZXJuIGludCBmMmZzX2luaXRfYWNsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKiwKKwkJCQkJCQlzdHJ1Y3QgcGFnZSAqKTsKICNlbHNlCiAjZGVmaW5lIGYyZnNfY2hlY2tfYWNsCU5VTEwKICNkZWZpbmUgZjJmc19nZXRfYWNsCU5VTEwKICNkZWZpbmUgZjJmc19zZXRfYWNsCU5VTEwKIAogc3RhdGljIGlubGluZSBpbnQgZjJmc19pbml0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSkKKwkJCQlzdHJ1Y3QgcGFnZSAqaXBhZ2UsIHN0cnVjdCBwYWdlICpkcGFnZSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2YyZnMvY2hlY2twb2ludC5jIGIvZnMvZjJmcy9jaGVja3BvaW50LmMKaW5kZXggZGQxMGEwMy4uZTZjMjcxZiAxMDA2NDQKLS0tIGEvZnMvZjJmcy9jaGVja3BvaW50LmMKKysrIGIvZnMvZjJmcy9jaGVja3BvaW50LmMKQEAgLTcyLDM2ICs3MiwzNiBAQAogCXJldHVybiBwYWdlOwogfQogCi1zdHJ1Y3QgcGFnZSAqZ2V0X21ldGFfcGFnZV9yYShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHBnb2ZmX3QgaW5kZXgpCi17Ci0JYm9vbCByZWFkYWhlYWQgPSBmYWxzZTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCXBhZ2UgPSBmaW5kX2dldF9wYWdlKE1FVEFfTUFQUElORyhzYmkpLCBpbmRleCk7Ci0JaWYgKCFwYWdlIHx8IChwYWdlICYmICFQYWdlVXB0b2RhdGUocGFnZSkpKQotCQlyZWFkYWhlYWQgPSB0cnVlOwotCWYyZnNfcHV0X3BhZ2UocGFnZSwgMCk7Ci0KLQlpZiAocmVhZGFoZWFkKQotCQlyYV9tZXRhX3BhZ2VzKHNiaSwgaW5kZXgsIE1BWF9CSU9fQkxPQ0tTKHNiaSksIE1FVEFfUE9SKTsKLQlyZXR1cm4gZ2V0X21ldGFfcGFnZShzYmksIGluZGV4KTsKLX0KLQotc3RhdGljIGlubGluZSBibG9ja190IGdldF9tYXhfbWV0YV9ibGtzKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgaW50IHR5cGUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmFsaWRfYmxrYWRkcihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksCisJCQkJCQlibG9ja190IGJsa2FkZHIsIGludCB0eXBlKQogewogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTUVUQV9OQVQ6Ci0JCXJldHVybiBOTV9JKHNiaSktPm1heF9uaWQgLyBOQVRfRU5UUllfUEVSX0JMT0NLOworCQlicmVhazsKIAljYXNlIE1FVEFfU0lUOgotCQlyZXR1cm4gU0lUX0JMS19DTlQoc2JpKTsKKwkJaWYgKHVubGlrZWx5KGJsa2FkZHIgPj0gU0lUX0JMS19DTlQoc2JpKSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWJyZWFrOwogCWNhc2UgTUVUQV9TU0E6CisJCWlmICh1bmxpa2VseShibGthZGRyID49IE1BSU5fQkxLQUREUihzYmkpIHx8CisJCQlibGthZGRyIDwgU01fSShzYmkpLT5zc2FfYmxrYWRkcikpCisJCQlyZXR1cm4gZmFsc2U7CisJCWJyZWFrOwogCWNhc2UgTUVUQV9DUDoKLQkJcmV0dXJuIDA7CisJCWlmICh1bmxpa2VseShibGthZGRyID49IFNJVF9JKHNiaSktPnNpdF9iYXNlX2FkZHIgfHwKKwkJCWJsa2FkZHIgPCBfX3N0YXJ0X2NwX2FkZHIoc2JpKSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWJyZWFrOwogCWNhc2UgTUVUQV9QT1I6Ci0JCXJldHVybiBNQVhfQkxLQUREUihzYmkpOworCQlpZiAodW5saWtlbHkoYmxrYWRkciA+PSBNQVhfQkxLQUREUihzYmkpIHx8CisJCQlibGthZGRyIDwgTUFJTl9CTEtBRERSKHNiaSkpKQorCQkJcmV0dXJuIGZhbHNlOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTExMiw3ICsxMTIsNiBAQAogCWJsb2NrX3QgcHJldl9ibGtfYWRkciA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJYmxvY2tfdCBibGtubyA9IHN0YXJ0OwotCWJsb2NrX3QgbWF4X2Jsa3MgPSBnZXRfbWF4X21ldGFfYmxrcyhzYmksIHR5cGUpOwogCiAJc3RydWN0IGYyZnNfaW9faW5mbyBmaW8gPSB7CiAJCS50eXBlID0gTUVUQSwKQEAgLTEyMiwxOCArMTIxLDIwIEBACiAJZm9yICg7IG5ycGFnZXMtLSA+IDA7IGJsa25vKyspIHsKIAkJYmxvY2tfdCBibGtfYWRkcjsKIAorCQlpZiAoIWlzX3ZhbGlkX2Jsa2FkZHIoc2JpLCBibGtubywgdHlwZSkpCisJCQlnb3RvIG91dDsKKwogCQlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBNRVRBX05BVDoKLQkJCS8qIGdldCBuYXQgYmxvY2sgYWRkciAqLwotCQkJaWYgKHVubGlrZWx5KGJsa25vID49IG1heF9ibGtzKSkKKwkJCWlmICh1bmxpa2VseShibGtubyA+PQorCQkJCQlOQVRfQkxPQ0tfT0ZGU0VUKE5NX0koc2JpKS0+bWF4X25pZCkpKQogCQkJCWJsa25vID0gMDsKKwkJCS8qIGdldCBuYXQgYmxvY2sgYWRkciAqLwogCQkJYmxrX2FkZHIgPSBjdXJyZW50X25hdF9hZGRyKHNiaSwKIAkJCQkJYmxrbm8gKiBOQVRfRU5UUllfUEVSX0JMT0NLKTsKIAkJCWJyZWFrOwogCQljYXNlIE1FVEFfU0lUOgogCQkJLyogZ2V0IHNpdCBibG9jayBhZGRyICovCi0JCQlpZiAodW5saWtlbHkoYmxrbm8gPj0gbWF4X2Jsa3MpKQotCQkJCWdvdG8gb3V0OwogCQkJYmxrX2FkZHIgPSBjdXJyZW50X3NpdF9hZGRyKHNiaSwKIAkJCQkJYmxrbm8gKiBTSVRfRU5UUllfUEVSX0JMT0NLKTsKIAkJCWlmIChibGtubyAhPSBzdGFydCAmJiBwcmV2X2Jsa19hZGRyICsgMSAhPSBibGtfYWRkcikKQEAgLTE0MywxMCArMTQ0LDYgQEAKIAkJY2FzZSBNRVRBX1NTQToKIAkJY2FzZSBNRVRBX0NQOgogCQljYXNlIE1FVEFfUE9SOgotCQkJaWYgKHVubGlrZWx5KGJsa25vID49IG1heF9ibGtzKSkKLQkJCQlnb3RvIG91dDsKLQkJCWlmICh1bmxpa2VseShibGtubyA8IFNFRzBfQkxLQUREUihzYmkpKSkKLQkJCQlnb3RvIG91dDsKIAkJCWJsa19hZGRyID0gYmxrbm87CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTE2OSw2ICsxNjYsMjAgQEAKIAlyZXR1cm4gYmxrbm8gLSBzdGFydDsKIH0KIAordm9pZCByYV9tZXRhX3BhZ2VzX2NvbmQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBwZ29mZl90IGluZGV4KQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCWJvb2wgcmVhZGFoZWFkID0gZmFsc2U7CisKKwlwYWdlID0gZmluZF9nZXRfcGFnZShNRVRBX01BUFBJTkcoc2JpKSwgaW5kZXgpOworCWlmICghcGFnZSB8fCAocGFnZSAmJiAhUGFnZVVwdG9kYXRlKHBhZ2UpKSkKKwkJcmVhZGFoZWFkID0gdHJ1ZTsKKwlmMmZzX3B1dF9wYWdlKHBhZ2UsIDApOworCisJaWYgKHJlYWRhaGVhZCkKKwkJcmFfbWV0YV9wYWdlcyhzYmksIGluZGV4LCBNQVhfQklPX0JMT0NLUyhzYmkpLCBNRVRBX1BPUik7Cit9CisKIHN0YXRpYyBpbnQgZjJmc193cml0ZV9tZXRhX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CkBAIC0xNzgsNyArMTg5LDcgQEAKIAogCWlmICh1bmxpa2VseShzYmktPnBvcl9kb2luZykpCiAJCWdvdG8gcmVkaXJ0eV9vdXQ7Ci0JaWYgKHdiYy0+Zm9yX3JlY2xhaW0pCisJaWYgKHdiYy0+Zm9yX3JlY2xhaW0gJiYgcGFnZS0+aW5kZXggPCBHRVRfU1VNX0JMT0NLKHNiaSwgMCkpCiAJCWdvdG8gcmVkaXJ0eV9vdXQ7CiAJaWYgKHVubGlrZWx5KGYyZnNfY3BfZXJyb3Ioc2JpKSkpCiAJCWdvdG8gcmVkaXJ0eV9vdXQ7CkBAIC0xODcsNiArMTk4LDkgQEAKIAl3cml0ZV9tZXRhX3BhZ2Uoc2JpLCBwYWdlKTsKIAlkZWNfcGFnZV9jb3VudChzYmksIEYyRlNfRElSVFlfTUVUQSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CisKKwlpZiAod2JjLT5mb3JfcmVjbGFpbSkKKwkJZjJmc19zdWJtaXRfbWVyZ2VkX2JpbyhzYmksIE1FVEEsIFdSSVRFKTsKIAlyZXR1cm4gMDsKIAogcmVkaXJ0eV9vdXQ6CkBAIC0yOTgsNDYgKzMxMiw1NyBAQAogCiBzdGF0aWMgdm9pZCBfX2FkZF9pbm9fZW50cnkoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBuaWRfdCBpbm8sIGludCB0eXBlKQogeworCXN0cnVjdCBpbm9kZV9tYW5hZ2VtZW50ICppbSA9ICZzYmktPmltW3R5cGVdOwogCXN0cnVjdCBpbm9fZW50cnkgKmU7CiByZXRyeToKLQlzcGluX2xvY2soJnNiaS0+aW5vX2xvY2tbdHlwZV0pOworCWlmIChyYWRpeF90cmVlX3ByZWxvYWQoR0ZQX05PRlMpKSB7CisJCWNvbmRfcmVzY2hlZCgpOworCQlnb3RvIHJldHJ5OworCX0KIAotCWUgPSByYWRpeF90cmVlX2xvb2t1cCgmc2JpLT5pbm9fcm9vdFt0eXBlXSwgaW5vKTsKKwlzcGluX2xvY2soJmltLT5pbm9fbG9jayk7CisKKwllID0gcmFkaXhfdHJlZV9sb29rdXAoJmltLT5pbm9fcm9vdCwgaW5vKTsKIAlpZiAoIWUpIHsKIAkJZSA9IGttZW1fY2FjaGVfYWxsb2MoaW5vX2VudHJ5X3NsYWIsIEdGUF9BVE9NSUMpOwogCQlpZiAoIWUpIHsKLQkJCXNwaW5fdW5sb2NrKCZzYmktPmlub19sb2NrW3R5cGVdKTsKKwkJCXNwaW5fdW5sb2NrKCZpbS0+aW5vX2xvY2spOworCQkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwogCQkJZ290byByZXRyeTsKIAkJfQotCQlpZiAocmFkaXhfdHJlZV9pbnNlcnQoJnNiaS0+aW5vX3Jvb3RbdHlwZV0sIGlubywgZSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZzYmktPmlub19sb2NrW3R5cGVdKTsKKwkJaWYgKHJhZGl4X3RyZWVfaW5zZXJ0KCZpbS0+aW5vX3Jvb3QsIGlubywgZSkpIHsKKwkJCXNwaW5fdW5sb2NrKCZpbS0+aW5vX2xvY2spOwogCQkJa21lbV9jYWNoZV9mcmVlKGlub19lbnRyeV9zbGFiLCBlKTsKKwkJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KIAkJbWVtc2V0KGUsIDAsIHNpemVvZihzdHJ1Y3QgaW5vX2VudHJ5KSk7CiAJCWUtPmlubyA9IGlubzsKIAotCQlsaXN0X2FkZF90YWlsKCZlLT5saXN0LCAmc2JpLT5pbm9fbGlzdFt0eXBlXSk7CisJCWxpc3RfYWRkX3RhaWwoJmUtPmxpc3QsICZpbS0+aW5vX2xpc3QpOworCQlpZiAodHlwZSAhPSBPUlBIQU5fSU5PKQorCQkJaW0tPmlub19udW0rKzsKIAl9Ci0Jc3Bpbl91bmxvY2soJnNiaS0+aW5vX2xvY2tbdHlwZV0pOworCXNwaW5fdW5sb2NrKCZpbS0+aW5vX2xvY2spOworCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19yZW1vdmVfaW5vX2VudHJ5KHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgbmlkX3QgaW5vLCBpbnQgdHlwZSkKIHsKKwlzdHJ1Y3QgaW5vZGVfbWFuYWdlbWVudCAqaW0gPSAmc2JpLT5pbVt0eXBlXTsKIAlzdHJ1Y3QgaW5vX2VudHJ5ICplOwogCi0Jc3Bpbl9sb2NrKCZzYmktPmlub19sb2NrW3R5cGVdKTsKLQllID0gcmFkaXhfdHJlZV9sb29rdXAoJnNiaS0+aW5vX3Jvb3RbdHlwZV0sIGlubyk7CisJc3Bpbl9sb2NrKCZpbS0+aW5vX2xvY2spOworCWUgPSByYWRpeF90cmVlX2xvb2t1cCgmaW0tPmlub19yb290LCBpbm8pOwogCWlmIChlKSB7CiAJCWxpc3RfZGVsKCZlLT5saXN0KTsKLQkJcmFkaXhfdHJlZV9kZWxldGUoJnNiaS0+aW5vX3Jvb3RbdHlwZV0sIGlubyk7Ci0JCWlmICh0eXBlID09IE9SUEhBTl9JTk8pCi0JCQlzYmktPm5fb3JwaGFucy0tOwotCQlzcGluX3VubG9jaygmc2JpLT5pbm9fbG9ja1t0eXBlXSk7CisJCXJhZGl4X3RyZWVfZGVsZXRlKCZpbS0+aW5vX3Jvb3QsIGlubyk7CisJCWltLT5pbm9fbnVtLS07CisJCXNwaW5fdW5sb2NrKCZpbS0+aW5vX2xvY2spOwogCQlrbWVtX2NhY2hlX2ZyZWUoaW5vX2VudHJ5X3NsYWIsIGUpOwogCQlyZXR1cm47CiAJfQotCXNwaW5fdW5sb2NrKCZzYmktPmlub19sb2NrW3R5cGVdKTsKKwlzcGluX3VubG9jaygmaW0tPmlub19sb2NrKTsKIH0KIAogdm9pZCBhZGRfZGlydHlfaW5vZGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBuaWRfdCBpbm8sIGludCB0eXBlKQpAQCAtMzU1LDEwICszODAsMTIgQEAKIC8qIG1vZGUgc2hvdWxkIGJlIEFQUEVORF9JTk8gb3IgVVBEQVRFX0lOTyAqLwogYm9vbCBleGlzdF93cml0dGVuX2RhdGEoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBuaWRfdCBpbm8sIGludCBtb2RlKQogeworCXN0cnVjdCBpbm9kZV9tYW5hZ2VtZW50ICppbSA9ICZzYmktPmltW21vZGVdOwogCXN0cnVjdCBpbm9fZW50cnkgKmU7Ci0Jc3Bpbl9sb2NrKCZzYmktPmlub19sb2NrW21vZGVdKTsKLQllID0gcmFkaXhfdHJlZV9sb29rdXAoJnNiaS0+aW5vX3Jvb3RbbW9kZV0sIGlubyk7Ci0Jc3Bpbl91bmxvY2soJnNiaS0+aW5vX2xvY2tbbW9kZV0pOworCisJc3Bpbl9sb2NrKCZpbS0+aW5vX2xvY2spOworCWUgPSByYWRpeF90cmVlX2xvb2t1cCgmaW0tPmlub19yb290LCBpbm8pOworCXNwaW5fdW5sb2NrKCZpbS0+aW5vX2xvY2spOwogCXJldHVybiBlID8gdHJ1ZSA6IGZhbHNlOwogfQogCkBAIC0zNjgsMzYgKzM5NSw0MiBAQAogCWludCBpOwogCiAJZm9yIChpID0gQVBQRU5EX0lOTzsgaSA8PSBVUERBVEVfSU5POyBpKyspIHsKLQkJc3Bpbl9sb2NrKCZzYmktPmlub19sb2NrW2ldKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHRtcCwgJnNiaS0+aW5vX2xpc3RbaV0sIGxpc3QpIHsKKwkJc3RydWN0IGlub2RlX21hbmFnZW1lbnQgKmltID0gJnNiaS0+aW1baV07CisKKwkJc3Bpbl9sb2NrKCZpbS0+aW5vX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgdG1wLCAmaW0tPmlub19saXN0LCBsaXN0KSB7CiAJCQlsaXN0X2RlbCgmZS0+bGlzdCk7Ci0JCQlyYWRpeF90cmVlX2RlbGV0ZSgmc2JpLT5pbm9fcm9vdFtpXSwgZS0+aW5vKTsKKwkJCXJhZGl4X3RyZWVfZGVsZXRlKCZpbS0+aW5vX3Jvb3QsIGUtPmlubyk7CiAJCQlrbWVtX2NhY2hlX2ZyZWUoaW5vX2VudHJ5X3NsYWIsIGUpOworCQkJaW0tPmlub19udW0tLTsKIAkJfQotCQlzcGluX3VubG9jaygmc2JpLT5pbm9fbG9ja1tpXSk7CisJCXNwaW5fdW5sb2NrKCZpbS0+aW5vX2xvY2spOwogCX0KIH0KIAogaW50IGFjcXVpcmVfb3JwaGFuX2lub2RlKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSkKIHsKKwlzdHJ1Y3QgaW5vZGVfbWFuYWdlbWVudCAqaW0gPSAmc2JpLT5pbVtPUlBIQU5fSU5PXTsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9jaygmc2JpLT5pbm9fbG9ja1tPUlBIQU5fSU5PXSk7Ci0JaWYgKHVubGlrZWx5KHNiaS0+bl9vcnBoYW5zID49IHNiaS0+bWF4X29ycGhhbnMpKQorCXNwaW5fbG9jaygmaW0tPmlub19sb2NrKTsKKwlpZiAodW5saWtlbHkoaW0tPmlub19udW0gPj0gc2JpLT5tYXhfb3JwaGFucykpCiAJCWVyciA9IC1FTk9TUEM7CiAJZWxzZQotCQlzYmktPm5fb3JwaGFucysrOwotCXNwaW5fdW5sb2NrKCZzYmktPmlub19sb2NrW09SUEhBTl9JTk9dKTsKKwkJaW0tPmlub19udW0rKzsKKwlzcGluX3VubG9jaygmaW0tPmlub19sb2NrKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIHZvaWQgcmVsZWFzZV9vcnBoYW5faW5vZGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKQogewotCXNwaW5fbG9jaygmc2JpLT5pbm9fbG9ja1tPUlBIQU5fSU5PXSk7Ci0JZjJmc19idWdfb24oc2JpLCBzYmktPm5fb3JwaGFucyA9PSAwKTsKLQlzYmktPm5fb3JwaGFucy0tOwotCXNwaW5fdW5sb2NrKCZzYmktPmlub19sb2NrW09SUEhBTl9JTk9dKTsKKwlzdHJ1Y3QgaW5vZGVfbWFuYWdlbWVudCAqaW0gPSAmc2JpLT5pbVtPUlBIQU5fSU5PXTsKKworCXNwaW5fbG9jaygmaW0tPmlub19sb2NrKTsKKwlmMmZzX2J1Z19vbihzYmksIGltLT5pbm9fbnVtID09IDApOworCWltLT5pbm9fbnVtLS07CisJc3Bpbl91bmxvY2soJmltLT5pbm9fbG9jayk7CiB9CiAKIHZvaWQgYWRkX29ycGhhbl9pbm9kZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIG5pZF90IGlubykKQEAgLTQ2MCwxNyArNDkzLDE5IEBACiAJc3RydWN0IGYyZnNfb3JwaGFuX2Jsb2NrICpvcnBoYW5fYmxrID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgbmVudHJpZXMgPSAwOwogCXVuc2lnbmVkIHNob3J0IGluZGV4OwotCXVuc2lnbmVkIHNob3J0IG9ycGhhbl9ibG9ja3MgPQotCQkJKHVuc2lnbmVkIHNob3J0KUdFVF9PUlBIQU5fQkxPQ0tTKHNiaS0+bl9vcnBoYW5zKTsKKwl1bnNpZ25lZCBzaG9ydCBvcnBoYW5fYmxvY2tzOwogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAlzdHJ1Y3QgaW5vX2VudHJ5ICpvcnBoYW4gPSBOVUxMOworCXN0cnVjdCBpbm9kZV9tYW5hZ2VtZW50ICppbSA9ICZzYmktPmltW09SUEhBTl9JTk9dOworCisJb3JwaGFuX2Jsb2NrcyA9IEdFVF9PUlBIQU5fQkxPQ0tTKGltLT5pbm9fbnVtKTsKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG9ycGhhbl9ibG9ja3M7IGluZGV4KyspCiAJCWdyYWJfbWV0YV9wYWdlKHNiaSwgc3RhcnRfYmxrICsgaW5kZXgpOwogCiAJaW5kZXggPSAxOwotCXNwaW5fbG9jaygmc2JpLT5pbm9fbG9ja1tPUlBIQU5fSU5PXSk7Ci0JaGVhZCA9ICZzYmktPmlub19saXN0W09SUEhBTl9JTk9dOworCXNwaW5fbG9jaygmaW0tPmlub19sb2NrKTsKKwloZWFkID0gJmltLT5pbm9fbGlzdDsKIAogCS8qIGxvb3AgZm9yIGVhY2ggb3JwaGFuIGlub2RlIGVudHJ5IGFuZCB3cml0ZSB0aGVtIGluIEpvcm5hbCBibG9jayAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkob3JwaGFuLCBoZWFkLCBsaXN0KSB7CkBAIC01MTAsNyArNTQ1LDcgQEAKIAkJZjJmc19wdXRfcGFnZShwYWdlLCAxKTsKIAl9CiAKLQlzcGluX3VubG9jaygmc2JpLT5pbm9fbG9ja1tPUlBIQU5fSU5PXSk7CisJc3Bpbl91bmxvY2soJmltLT5pbm9fbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqdmFsaWRhdGVfY2hlY2twb2ludChzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksCkBAIC03MzEsNiArNzY2LDkgQEAKIAlzdHJ1Y3QgZGlyX2lub2RlX2VudHJ5ICplbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogcmV0cnk6CisJaWYgKHVubGlrZWx5KGYyZnNfY3BfZXJyb3Ioc2JpKSkpCisJCXJldHVybjsKKwogCXNwaW5fbG9jaygmc2JpLT5kaXJfaW5vZGVfbG9jayk7CiAKIAloZWFkID0gJnNiaS0+ZGlyX2lub2RlX2xpc3Q7CkBAIC04MzAsNiArODY4LDcgQEAKIAlzdHJ1Y3QgZjJmc19jaGVja3BvaW50ICpja3B0ID0gRjJGU19DS1BUKHNiaSk7CiAJc3RydWN0IGN1cnNlZ19pbmZvICpjdXJzZWcgPSBDVVJTRUdfSShzYmksIENVUlNFR19XQVJNX05PREUpOwogCXN0cnVjdCBmMmZzX25tX2luZm8gKm5tX2kgPSBOTV9JKHNiaSk7CisJdW5zaWduZWQgbG9uZyBvcnBoYW5fbnVtID0gc2JpLT5pbVtPUlBIQU5fSU5PXS5pbm9fbnVtOwogCW5pZF90IGxhc3RfbmlkID0gbm1faS0+bmV4dF9zY2FuX25pZDsKIAlibG9ja190IHN0YXJ0X2JsazsKIAlzdHJ1Y3QgcGFnZSAqY3BfcGFnZTsKQEAgLTg4OSw3ICs5MjgsNyBAQAogCWVsc2UKIAkJY2xlYXJfY2twdF9mbGFncyhja3B0LCBDUF9DT01QQUNUX1NVTV9GTEFHKTsKIAotCW9ycGhhbl9ibG9ja3MgPSBHRVRfT1JQSEFOX0JMT0NLUyhzYmktPm5fb3JwaGFucyk7CisJb3JwaGFuX2Jsb2NrcyA9IEdFVF9PUlBIQU5fQkxPQ0tTKG9ycGhhbl9udW0pOwogCWNrcHQtPmNwX3BhY2tfc3RhcnRfc3VtID0gY3B1X3RvX2xlMzIoMSArIGNwX3BheWxvYWRfYmxrcyArCiAJCQlvcnBoYW5fYmxvY2tzKTsKIApAQCAtOTA1LDcgKzk0NCw3IEBACiAJCQkJb3JwaGFuX2Jsb2Nrcyk7CiAJfQogCi0JaWYgKHNiaS0+bl9vcnBoYW5zKQorCWlmIChvcnBoYW5fbnVtKQogCQlzZXRfY2twdF9mbGFncyhja3B0LCBDUF9PUlBIQU5fUFJFU0VOVF9GTEFHKTsKIAllbHNlCiAJCWNsZWFyX2NrcHRfZmxhZ3MoY2twdCwgQ1BfT1JQSEFOX1BSRVNFTlRfRkxBRyk7CkBAIC05NDAsNyArOTc5LDcgQEAKIAkJZjJmc19wdXRfcGFnZShjcF9wYWdlLCAxKTsKIAl9CiAKLQlpZiAoc2JpLT5uX29ycGhhbnMpIHsKKwlpZiAob3JwaGFuX251bSkgewogCQl3cml0ZV9vcnBoYW5faW5vZGVzKHNiaSwgc3RhcnRfYmxrKTsKIAkJc3RhcnRfYmxrICs9IG9ycGhhbl9ibG9ja3M7CiAJfQpAQCAtOTc1LDYgKzEwMTQsOSBAQAogCS8qIEhlcmUsIHdlIG9ubHkgaGF2ZSBvbmUgYmlvIGhhdmluZyBDUCBwYWNrICovCiAJc3luY19tZXRhX3BhZ2VzKHNiaSwgTUVUQV9GTFVTSCwgTE9OR19NQVgpOwogCisJLyogd2FpdCBmb3IgcHJldmlvdXMgc3VibWl0dGVkIG1ldGEgcGFnZXMgd3JpdGViYWNrICovCisJd2FpdF9vbl9hbGxfcGFnZXNfd3JpdGViYWNrKHNiaSk7CisKIAlyZWxlYXNlX2RpcnR5X2lub2RlKHNiaSk7CiAKIAlpZiAodW5saWtlbHkoZjJmc19jcF9lcnJvcihzYmkpKSkKQEAgLTEwMzYsOSArMTA3OCwxMiBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9JTk9fRU5UUlk7IGkrKykgewotCQlJTklUX1JBRElYX1RSRUUoJnNiaS0+aW5vX3Jvb3RbaV0sIEdGUF9BVE9NSUMpOwotCQlzcGluX2xvY2tfaW5pdCgmc2JpLT5pbm9fbG9ja1tpXSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZzYmktPmlub19saXN0W2ldKTsKKwkJc3RydWN0IGlub2RlX21hbmFnZW1lbnQgKmltID0gJnNiaS0+aW1baV07CisKKwkJSU5JVF9SQURJWF9UUkVFKCZpbS0+aW5vX3Jvb3QsIEdGUF9BVE9NSUMpOworCQlzcGluX2xvY2tfaW5pdCgmaW0tPmlub19sb2NrKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmltLT5pbm9fbGlzdCk7CisJCWltLT5pbm9fbnVtID0gMDsKIAl9CiAKIAkvKgpAQCAtMTA0Nyw3ICsxMDkyLDYgQEAKIAkgKiBvcnBoYW4gZW50cmllcyB3aXRoIHRoZSBsaW1pdGF0aW9uIG9uZSByZXNlcnZlZCBzZWdtZW50CiAJICogZm9yIGNwIHBhY2sgd2UgY2FuIGhhdmUgbWF4IDEwMjAqNTA0IG9ycGhhbiBlbnRyaWVzCiAJICovCi0Jc2JpLT5uX29ycGhhbnMgPSAwOwogCXNiaS0+bWF4X29ycGhhbnMgPSAoc2JpLT5ibG9ja3NfcGVyX3NlZyAtIEYyRlNfQ1BfUEFDS1MgLQogCQkJTlJfQ1VSU0VHX1RZUEUpICogRjJGU19PUlBIQU5TX1BFUl9CTE9DSzsKIH0KZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZGF0YS5jIGIvZnMvZjJmcy9kYXRhLmMKaW5kZXggOGU1OGM0Yy4uN2VjNjk3YiAxMDA2NDQKLS0tIGEvZnMvZjJmcy9kYXRhLmMKKysrIGIvZnMvZjJmcy9kYXRhLmMKQEAgLTYxLDExICs2MSw2IEBACiAJCWRlY19wYWdlX2NvdW50KHNiaSwgRjJGU19XUklURUJBQ0spOwogCX0KIAotCWlmIChzYmktPndhaXRfaW8pIHsKLQkJY29tcGxldGUoc2JpLT53YWl0X2lvKTsKLQkJc2JpLT53YWl0X2lvID0gTlVMTDsKLQl9Ci0KIAlpZiAoIWdldF9wYWdlcyhzYmksIEYyRlNfV1JJVEVCQUNLKSAmJgogCQkJIWxpc3RfZW1wdHkoJnNiaS0+Y3Bfd2FpdC50YXNrX2xpc3QpKQogCQl3YWtlX3VwKCZzYmktPmNwX3dhaXQpOwpAQCAtOTUsMzQgKzkwLDE4IEBACiBzdGF0aWMgdm9pZCBfX3N1Ym1pdF9tZXJnZWRfYmlvKHN0cnVjdCBmMmZzX2Jpb19pbmZvICppbykKIHsKIAlzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8gPSAmaW8tPmZpbzsKLQlpbnQgcnc7CiAKIAlpZiAoIWlvLT5iaW8pCiAJCXJldHVybjsKIAotCXJ3ID0gZmlvLT5ydzsKKwlpZiAoaXNfcmVhZF9pbyhmaW8tPnJ3KSkKKwkJdHJhY2VfZjJmc19zdWJtaXRfcmVhZF9iaW8oaW8tPnNiaS0+c2IsIGZpby0+cncsCisJCQkJCQkJZmlvLT50eXBlLCBpby0+YmlvKTsKKwllbHNlCisJCXRyYWNlX2YyZnNfc3VibWl0X3dyaXRlX2Jpbyhpby0+c2JpLT5zYiwgZmlvLT5ydywKKwkJCQkJCQlmaW8tPnR5cGUsIGlvLT5iaW8pOwogCi0JaWYgKGlzX3JlYWRfaW8ocncpKSB7Ci0JCXRyYWNlX2YyZnNfc3VibWl0X3JlYWRfYmlvKGlvLT5zYmktPnNiLCBydywKLQkJCQkJCWZpby0+dHlwZSwgaW8tPmJpbyk7Ci0JCXN1Ym1pdF9iaW8ocncsIGlvLT5iaW8pOwotCX0gZWxzZSB7Ci0JCXRyYWNlX2YyZnNfc3VibWl0X3dyaXRlX2Jpbyhpby0+c2JpLT5zYiwgcncsCi0JCQkJCQlmaW8tPnR5cGUsIGlvLT5iaW8pOwotCQkvKgotCQkgKiBNRVRBX0ZMVVNIIGlzIG9ubHkgZnJvbSB0aGUgY2hlY2twb2ludCBwcm9jZWR1cmUsIGFuZCB3ZQotCQkgKiBzaG91bGQgd2FpdCB0aGlzIG1ldGFkYXRhIGJpbyBmb3IgRlMgY29uc2lzdGVuY3kuCi0JCSAqLwotCQlpZiAoZmlvLT50eXBlID09IE1FVEFfRkxVU0gpIHsKLQkJCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwotCQkJaW8tPnNiaS0+d2FpdF9pbyA9ICZ3YWl0OwotCQkJc3VibWl0X2JpbyhydywgaW8tPmJpbyk7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKLQkJfSBlbHNlIHsKLQkJCXN1Ym1pdF9iaW8ocncsIGlvLT5iaW8pOwotCQl9Ci0JfQotCisJc3VibWl0X2JpbyhmaW8tPnJ3LCBpby0+YmlvKTsKIAlpby0+YmlvID0gTlVMTDsKIH0KIApAQCAtMjU3LDkgKzIzNiw2IEBACiAJYm9vbCBuZWVkX3B1dCA9IGRuLT5pbm9kZV9wYWdlID8gZmFsc2UgOiB0cnVlOwogCWludCBlcnI7CiAKLQkvKiBpZiBpbm9kZV9wYWdlIGV4aXN0cywgaW5kZXggc2hvdWxkIGJlIHplcm8gKi8KLQlmMmZzX2J1Z19vbihGMkZTX0lfU0IoZG4tPmlub2RlKSwgIW5lZWRfcHV0ICYmIGluZGV4KTsKLQogCWVyciA9IGdldF9kbm9kZV9vZl9kYXRhKGRuLCBpbmRleCwgQUxMT0NfTk9ERSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTc0MCwxNCArNzE2LDE0IEBACiBzdGF0aWMgaW50IGYyZnNfcmVhZF9kYXRhX3BhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwotCWludCByZXQ7CisJaW50IHJldCA9IC1FQUdBSU47CiAKIAl0cmFjZV9mMmZzX3JlYWRwYWdlKHBhZ2UsIERBVEEpOwogCiAJLyogSWYgdGhlIGZpbGUgaGFzIGlubGluZSBkYXRhLCB0cnkgdG8gcmVhZCBpdCBkaXJlY3RseSAqLwogCWlmIChmMmZzX2hhc19pbmxpbmVfZGF0YShpbm9kZSkpCiAJCXJldCA9IGYyZnNfcmVhZF9pbmxpbmVfZGF0YShpbm9kZSwgcGFnZSk7Ci0JZWxzZQorCWlmIChyZXQgPT0gLUVBR0FJTikKIAkJcmV0ID0gbXBhZ2VfcmVhZHBhZ2UocGFnZSwgZ2V0X2RhdGFfYmxvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTg1OSwxMCArODM1LDExIEBACiAJZWxzZSBpZiAoaGFzX25vdF9lbm91Z2hfZnJlZV9zZWNzKHNiaSwgMCkpCiAJCWdvdG8gcmVkaXJ0eV9vdXQ7CiAKKwllcnIgPSAtRUFHQUlOOwogCWYyZnNfbG9ja19vcChzYmkpOwotCWlmIChmMmZzX2hhc19pbmxpbmVfZGF0YShpbm9kZSkgfHwgZjJmc19tYXlfaW5saW5lKGlub2RlKSkKLQkJZXJyID0gZjJmc193cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgcGFnZSwgb2Zmc2V0KTsKLQllbHNlCisJaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSkKKwkJZXJyID0gZjJmc193cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgcGFnZSk7CisJaWYgKGVyciA9PSAtRUFHQUlOKQogCQllcnIgPSBkb193cml0ZV9kYXRhX3BhZ2UocGFnZSwgJmZpbyk7CiAJZjJmc191bmxvY2tfb3Aoc2JpKTsKIGRvbmU6CkBAIC05NTEsNyArOTI4LDcgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoaW5vZGUpOwotCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBwYWdlICpwYWdlLCAqaXBhZ2U7CiAJcGdvZmZfdCBpbmRleCA9ICgodW5zaWduZWQgbG9uZyBsb25nKSBwb3MpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJc3RydWN0IGRub2RlX29mX2RhdGEgZG47CiAJaW50IGVyciA9IDA7CkBAIC05NTksNDUgKzkzNiw2MCBAQAogCXRyYWNlX2YyZnNfd3JpdGVfYmVnaW4oaW5vZGUsIHBvcywgbGVuLCBmbGFncyk7CiAKIAlmMmZzX2JhbGFuY2VfZnMoc2JpKTsKLXJlcGVhdDoKLQllcnIgPSBmMmZzX2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUsIHBvcyArIGxlbiwgTlVMTCk7Ci0JaWYgKGVycikKLQkJZ290byBmYWlsOwogCisJLyoKKwkgKiBXZSBzaG91bGQgY2hlY2sgdGhpcyBhdCB0aGlzIG1vbWVudCB0byBhdm9pZCBkZWFkbG9jayBvbiBpbm9kZSBwYWdlCisJICogYW5kICMwIHBhZ2UuIFRoZSBsb2NraW5nIHJ1bGUgZm9yIGlubGluZV9kYXRhIGNvbnZlcnNpb24gc2hvdWxkIGJlOgorCSAqIGxvY2tfcGFnZShwYWdlICMwKSAtPiBsb2NrX3BhZ2UoaW5vZGVfcGFnZSkKKwkgKi8KKwlpZiAoaW5kZXggIT0gMCkgeworCQllcnIgPSBmMmZzX2NvbnZlcnRfaW5saW5lX2lub2RlKGlub2RlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbDsKKwl9CityZXBlYXQ6CiAJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZV93cml0ZV9iZWdpbihtYXBwaW5nLCBpbmRleCwgZmxhZ3MpOwogCWlmICghcGFnZSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JLyogdG8gYXZvaWQgbGF0ZW5jeSBkdXJpbmcgbWVtb3J5IHByZXNzdXJlICovCi0JdW5sb2NrX3BhZ2UocGFnZSk7Ci0KIAkqcGFnZXAgPSBwYWdlOwogCi0JaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSAmJiAocG9zICsgbGVuKSA8PSBNQVhfSU5MSU5FX0RBVEEpCi0JCWdvdG8gaW5saW5lX2RhdGE7Ci0KIAlmMmZzX2xvY2tfb3Aoc2JpKTsKLQlzZXRfbmV3X2Rub2RlKCZkbiwgaW5vZGUsIE5VTEwsIE5VTEwsIDApOwotCWVyciA9IGYyZnNfcmVzZXJ2ZV9ibG9jaygmZG4sIGluZGV4KTsKLQlmMmZzX3VubG9ja19vcChzYmkpOwotCWlmIChlcnIpIHsKLQkJZjJmc19wdXRfcGFnZShwYWdlLCAwKTsKLQkJZ290byBmYWlsOwotCX0KLWlubGluZV9kYXRhOgotCWxvY2tfcGFnZShwYWdlKTsKLQlpZiAodW5saWtlbHkocGFnZS0+bWFwcGluZyAhPSBtYXBwaW5nKSkgewotCQlmMmZzX3B1dF9wYWdlKHBhZ2UsIDEpOwotCQlnb3RvIHJlcGVhdDsKKworCS8qIGNoZWNrIGlubGluZV9kYXRhICovCisJaXBhZ2UgPSBnZXRfbm9kZV9wYWdlKHNiaSwgaW5vZGUtPmlfaW5vKTsKKwlpZiAoSVNfRVJSKGlwYWdlKSkgeworCQllcnIgPSBQVFJfRVJSKGlwYWdlKTsKKwkJZ290byB1bmxvY2tfZmFpbDsKIAl9CiAKLQlmMmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSwgREFUQSk7CisJc2V0X25ld19kbm9kZSgmZG4sIGlub2RlLCBpcGFnZSwgaXBhZ2UsIDApOworCisJaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSkgeworCQlpZiAocG9zICsgbGVuIDw9IE1BWF9JTkxJTkVfREFUQSkgeworCQkJcmVhZF9pbmxpbmVfZGF0YShwYWdlLCBpcGFnZSk7CisJCQlzZXRfaW5vZGVfZmxhZyhGMkZTX0koaW5vZGUpLCBGSV9EQVRBX0VYSVNUKTsKKwkJCXN5bmNfaW5vZGVfcGFnZSgmZG4pOworCQkJZ290byBwdXRfbmV4dDsKKwkJfQorCQllcnIgPSBmMmZzX2NvbnZlcnRfaW5saW5lX3BhZ2UoJmRuLCBwYWdlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcHV0X2ZhaWw7CisJfQorCWVyciA9IGYyZnNfcmVzZXJ2ZV9ibG9jaygmZG4sIGluZGV4KTsKKwlpZiAoZXJyKQorCQlnb3RvIHB1dF9mYWlsOworcHV0X25leHQ6CisJZjJmc19wdXRfZG5vZGUoJmRuKTsKKwlmMmZzX3VubG9ja19vcChzYmkpOwogCiAJaWYgKChsZW4gPT0gUEFHRV9DQUNIRV9TSVpFKSB8fCBQYWdlVXB0b2RhdGUocGFnZSkpCiAJCXJldHVybiAwOwogCisJZjJmc193YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UsIERBVEEpOworCiAJaWYgKChwb3MgJiBQQUdFX0NBQ0hFX01BU0spID49IGlfc2l6ZV9yZWFkKGlub2RlKSkgewogCQl1bnNpZ25lZCBzdGFydCA9IHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKIAkJdW5zaWduZWQgZW5kID0gc3RhcnQgKyBsZW47CkBAIC0xMDEwLDE4ICsxMDAyLDEwIEBACiAJaWYgKGRuLmRhdGFfYmxrYWRkciA9PSBORVdfQUREUikgewogCQl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCAwLCBQQUdFX0NBQ0hFX1NJWkUpOwogCX0gZWxzZSB7Ci0JCWlmIChmMmZzX2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHsKLQkJCWVyciA9IGYyZnNfcmVhZF9pbmxpbmVfZGF0YShpbm9kZSwgcGFnZSk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJCWdvdG8gZmFpbDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWVyciA9IGYyZnNfc3VibWl0X3BhZ2VfYmlvKHNiaSwgcGFnZSwgZG4uZGF0YV9ibGthZGRyLAotCQkJCQkJCVJFQURfU1lOQyk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gZmFpbDsKLQkJfQorCQllcnIgPSBmMmZzX3N1Ym1pdF9wYWdlX2JpbyhzYmksIHBhZ2UsIGRuLmRhdGFfYmxrYWRkciwKKwkJCQkJICAgUkVBRF9TWU5DKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbDsKIAogCQlsb2NrX3BhZ2UocGFnZSk7CiAJCWlmICh1bmxpa2VseSghUGFnZVVwdG9kYXRlKHBhZ2UpKSkgewpAQCAtMTAzOCw2ICsxMDIyLDEyIEBACiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCWNsZWFyX2NvbGRfZGF0YShwYWdlKTsKIAlyZXR1cm4gMDsKKworcHV0X2ZhaWw6CisJZjJmc19wdXRfZG5vZGUoJmRuKTsKK3VubG9ja19mYWlsOgorCWYyZnNfdW5sb2NrX29wKHNiaSk7CisJZjJmc19wdXRfcGFnZShwYWdlLCAxKTsKIGZhaWw6CiAJZjJmc193cml0ZV9mYWlsZWQobWFwcGluZywgcG9zICsgbGVuKTsKIAlyZXR1cm4gZXJyOwpAQCAtMTA1MiwxMCArMTA0Miw3IEBACiAKIAl0cmFjZV9mMmZzX3dyaXRlX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCk7CiAKLQlpZiAoZjJmc19pc19hdG9taWNfZmlsZShpbm9kZSkgfHwgZjJmc19pc192b2xhdGlsZV9maWxlKGlub2RlKSkKLQkJcmVnaXN0ZXJfaW5tZW1fcGFnZShpbm9kZSwgcGFnZSk7Ci0JZWxzZQotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKwlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAogCWlmIChwb3MgKyBjb3BpZWQgPiBpX3NpemVfcmVhZChpbm9kZSkpIHsKIAkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MgKyBjb3BpZWQpOwpAQCAtMTA5Myw5ICsxMDgwLDEyIEBACiAJc2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7CiAJaW50IGVycjsKIAotCS8qIExldCBidWZmZXIgSS9PIGhhbmRsZSB0aGUgaW5saW5lIGRhdGEgY2FzZS4gKi8KLQlpZiAoZjJmc19oYXNfaW5saW5lX2RhdGEoaW5vZGUpKQotCQlyZXR1cm4gMDsKKwkvKiB3ZSBkb24ndCBuZWVkIHRvIHVzZSBpbmxpbmVfZGF0YSBzdHJpY3RseSAqLworCWlmIChmMmZzX2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHsKKwkJZXJyID0gZjJmc19jb252ZXJ0X2lubGluZV9pbm9kZShpbm9kZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KIAogCWlmIChjaGVja19kaXJlY3RfSU8oaW5vZGUsIHJ3LCBpdGVyLCBvZmZzZXQpKQogCQlyZXR1cm4gMDsKQEAgLTExMTksNiArMTEwOSw5IEBACiAJaWYgKG9mZnNldCAlIFBBR0VfQ0FDSEVfU0laRSB8fCBsZW5ndGggIT0gUEFHRV9DQUNIRV9TSVpFKQogCQlyZXR1cm47CiAKKwlpZiAoZjJmc19pc19hdG9taWNfZmlsZShpbm9kZSkgfHwgZjJmc19pc192b2xhdGlsZV9maWxlKGlub2RlKSkKKwkJaW52YWxpZGF0ZV9pbm1lbV9wYWdlKGlub2RlLCBwYWdlKTsKKwogCWlmIChQYWdlRGlydHkocGFnZSkpCiAJCWlub2RlX2RlY19kaXJ0eV9wYWdlcyhpbm9kZSk7CiAJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKQEAgLTExMzgsNiArMTEzMSwxMiBAQAogCXRyYWNlX2YyZnNfc2V0X3BhZ2VfZGlydHkocGFnZSwgREFUQSk7CiAKIAlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisKKwlpZiAoZjJmc19pc19hdG9taWNfZmlsZShpbm9kZSkgfHwgZjJmc19pc192b2xhdGlsZV9maWxlKGlub2RlKSkgeworCQlyZWdpc3Rlcl9pbm1lbV9wYWdlKGlub2RlLCBwYWdlKTsKKwkJcmV0dXJuIDE7CisJfQorCiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAKIAlpZiAoIVBhZ2VEaXJ0eShwYWdlKSkgewpAQCAtMTE1Miw5ICsxMTUxLDEyIEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CiAKLQlpZiAoZjJmc19oYXNfaW5saW5lX2RhdGEoaW5vZGUpKQotCQlyZXR1cm4gMDsKLQorCS8qIHdlIGRvbid0IG5lZWQgdG8gdXNlIGlubGluZV9kYXRhIHN0cmljdGx5ICovCisJaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSkgeworCQlpbnQgZXJyID0gZjJmc19jb252ZXJ0X2lubGluZV9pbm9kZShpbm9kZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KIAlyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBnZXRfZGF0YV9ibG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZGVidWcuYyBiL2ZzL2YyZnMvZGVidWcuYwppbmRleCAwYTkxYWI4Li45MWU4ZjY5IDEwMDY0NAotLS0gYS9mcy9mMmZzL2RlYnVnLmMKKysrIGIvZnMvZjJmcy9kZWJ1Zy5jCkBAIC0zOSwxMyArMzksMTUgQEAKIAlzaS0+bmRpcnR5X2RlbnQgPSBnZXRfcGFnZXMoc2JpLCBGMkZTX0RJUlRZX0RFTlRTKTsKIAlzaS0+bmRpcnR5X2RpcnMgPSBzYmktPm5fZGlydHlfZGlyczsKIAlzaS0+bmRpcnR5X21ldGEgPSBnZXRfcGFnZXMoc2JpLCBGMkZTX0RJUlRZX01FVEEpOworCXNpLT5pbm1lbV9wYWdlcyA9IGdldF9wYWdlcyhzYmksIEYyRlNfSU5NRU1fUEFHRVMpOwogCXNpLT50b3RhbF9jb3VudCA9IChpbnQpc2JpLT51c2VyX2Jsb2NrX2NvdW50IC8gc2JpLT5ibG9ja3NfcGVyX3NlZzsKIAlzaS0+cnN2ZF9zZWdzID0gcmVzZXJ2ZWRfc2VnbWVudHMoc2JpKTsKIAlzaS0+b3ZlcnBfc2VncyA9IG92ZXJwcm92aXNpb25fc2VnbWVudHMoc2JpKTsKIAlzaS0+dmFsaWRfY291bnQgPSB2YWxpZF91c2VyX2Jsb2NrcyhzYmkpOwogCXNpLT52YWxpZF9ub2RlX2NvdW50ID0gdmFsaWRfbm9kZV9jb3VudChzYmkpOwogCXNpLT52YWxpZF9pbm9kZV9jb3VudCA9IHZhbGlkX2lub2RlX2NvdW50KHNiaSk7Ci0Jc2ktPmlubGluZV9pbm9kZSA9IHNiaS0+aW5saW5lX2lub2RlOworCXNpLT5pbmxpbmVfaW5vZGUgPSBhdG9taWNfcmVhZCgmc2JpLT5pbmxpbmVfaW5vZGUpOworCXNpLT5pbmxpbmVfZGlyID0gYXRvbWljX3JlYWQoJnNiaS0+aW5saW5lX2Rpcik7CiAJc2ktPnV0aWxpemF0aW9uID0gdXRpbGl6YXRpb24oc2JpKTsKIAogCXNpLT5mcmVlX3NlZ3MgPSBmcmVlX3NlZ21lbnRzKHNiaSk7CkBAIC0xMTgsNiArMTIwLDcgQEAKIHsKIAlzdHJ1Y3QgZjJmc19zdGF0X2luZm8gKnNpID0gRjJGU19TVEFUKHNiaSk7CiAJdW5zaWduZWQgbnBhZ2VzOworCWludCBpOwogCiAJaWYgKHNpLT5iYXNlX21lbSkKIAkJZ290byBnZXRfY2FjaGU7CkBAIC0xNjcsOCArMTcwLDkgQEAKIAlzaS0+Y2FjaGVfbWVtICs9IG5wYWdlcyA8PCBQQUdFX0NBQ0hFX1NISUZUOwogCW5wYWdlcyA9IE1FVEFfTUFQUElORyhzYmkpLT5ucnBhZ2VzOwogCXNpLT5jYWNoZV9tZW0gKz0gbnBhZ2VzIDw8IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0Jc2ktPmNhY2hlX21lbSArPSBzYmktPm5fb3JwaGFucyAqIHNpemVvZihzdHJ1Y3QgaW5vX2VudHJ5KTsKIAlzaS0+Y2FjaGVfbWVtICs9IHNiaS0+bl9kaXJ0eV9kaXJzICogc2l6ZW9mKHN0cnVjdCBkaXJfaW5vZGVfZW50cnkpOworCWZvciAoaSA9IDA7IGkgPD0gVVBEQVRFX0lOTzsgaSsrKQorCQlzaS0+Y2FjaGVfbWVtICs9IHNiaS0+aW1baV0uaW5vX251bSAqIHNpemVvZihzdHJ1Y3QgaW5vX2VudHJ5KTsKIH0KIAogc3RhdGljIGludCBzdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQpAQCAtMjAwLDYgKzIwNCw4IEBACiAJCQkgICBzaS0+dmFsaWRfY291bnQgLSBzaS0+dmFsaWRfbm9kZV9jb3VudCk7CiAJCXNlcV9wcmludGYocywgIiAgLSBJbmxpbmVfZGF0YSBJbm9kZTogJXVcbiIsCiAJCQkgICBzaS0+aW5saW5lX2lub2RlKTsKKwkJc2VxX3ByaW50ZihzLCAiICAtIElubGluZV9kZW50cnkgSW5vZGU6ICV1XG4iLAorCQkJICAgc2ktPmlubGluZV9kaXIpOwogCQlzZXFfcHJpbnRmKHMsICJcbk1haW4gYXJlYTogJWQgc2VncywgJWQgc2VjcyAlZCB6b25lc1xuIiwKIAkJCSAgIHNpLT5tYWluX2FyZWFfc2Vncywgc2ktPm1haW5fYXJlYV9zZWN0aW9ucywKIAkJCSAgIHNpLT5tYWluX2FyZWFfem9uZXMpOwpAQCAtMjQ0LDYgKzI1MCw4IEBACiAJCXNlcV9wcmludGYocywgIlxuRXh0ZW50IEhpdCBSYXRpbzogJWQgLyAlZFxuIiwKIAkJCSAgIHNpLT5oaXRfZXh0LCBzaS0+dG90YWxfZXh0KTsKIAkJc2VxX3B1dHMocywgIlxuQmFsYW5jaW5nIEYyRlMgQXN5bmM6XG4iKTsKKwkJc2VxX3ByaW50ZihzLCAiICAtIGlubWVtOiAlNGRcbiIsCisJCQkgICBzaS0+aW5tZW1fcGFnZXMpOwogCQlzZXFfcHJpbnRmKHMsICIgIC0gbm9kZXM6ICU0ZCBpbiAlNGRcbiIsCiAJCQkgICBzaS0+bmRpcnR5X25vZGUsIHNpLT5ub2RlX3BhZ2VzKTsKIAkJc2VxX3ByaW50ZihzLCAiICAtIGRlbnRzOiAlNGQgaW4gZGlyczolNGRcbiIsCkBAIC0zMjEsNiArMzI5LDkgQEAKIAlzaS0+c2JpID0gc2JpOwogCXNiaS0+c3RhdF9pbmZvID0gc2k7CiAKKwlhdG9taWNfc2V0KCZzYmktPmlubGluZV9pbm9kZSwgMCk7CisJYXRvbWljX3NldCgmc2JpLT5pbmxpbmVfZGlyLCAwKTsKKwogCW11dGV4X2xvY2soJmYyZnNfc3RhdF9tdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmc2ktPnN0YXRfbGlzdCwgJmYyZnNfc3RhdF9saXN0KTsKIAltdXRleF91bmxvY2soJmYyZnNfc3RhdF9tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9mMmZzL2Rpci5jIGIvZnMvZjJmcy9kaXIuYwppbmRleCBiNTRmODcxLi5iMWE3ZDU3IDEwMDY0NAotLS0gYS9mcy9mMmZzL2Rpci5jCisrKyBiL2ZzL2YyZnMvZGlyLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJcmV0dXJuIDQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGYyZnNfZmlsZXR5cGVfdGFibGVbRjJGU19GVF9NQVhdID0gewordW5zaWduZWQgY2hhciBmMmZzX2ZpbGV0eXBlX3RhYmxlW0YyRlNfRlRfTUFYXSA9IHsKIAlbRjJGU19GVF9VTktOT1dOXQk9IERUX1VOS05PV04sCiAJW0YyRlNfRlRfUkVHX0ZJTEVdCT0gRFRfUkVHLAogCVtGMkZTX0ZUX0RJUl0JCT0gRFRfRElSLApAQCAtNTksNyArNTksNyBAQAogCVtTX0lGTE5LID4+IFNfU0hJRlRdCT0gRjJGU19GVF9TWU1MSU5LLAogfTsKIAotc3RhdGljIHZvaWQgc2V0X2RlX3R5cGUoc3RydWN0IGYyZnNfZGlyX2VudHJ5ICpkZSwgc3RydWN0IGlub2RlICppbm9kZSkKK3ZvaWQgc2V0X2RlX3R5cGUoc3RydWN0IGYyZnNfZGlyX2VudHJ5ICpkZSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl1bW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCWRlLT5maWxlX3R5cGUgPSBmMmZzX3R5cGVfYnlfbW9kZVsobW9kZSAmIFNfSUZNVCkgPj4gU19TSElGVF07CkBAIC05MCw1MSArOTAsNzAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBmMmZzX2Rpcl9lbnRyeSAqZmluZF9pbl9ibG9jayhzdHJ1Y3QgcGFnZSAqZGVudHJ5X3BhZ2UsCi0JCQlzdHJ1Y3QgcXN0ciAqbmFtZSwgaW50ICptYXhfc2xvdHMsCi0JCQlmMmZzX2hhc2hfdCBuYW1laGFzaCwgc3RydWN0IHBhZ2UgKipyZXNfcGFnZSkKKwkJCQlzdHJ1Y3QgcXN0ciAqbmFtZSwgaW50ICptYXhfc2xvdHMsCisJCQkJc3RydWN0IHBhZ2UgKipyZXNfcGFnZSkKK3sKKwlzdHJ1Y3QgZjJmc19kZW50cnlfYmxvY2sgKmRlbnRyeV9ibGs7CisJc3RydWN0IGYyZnNfZGlyX2VudHJ5ICpkZTsKKwlzdHJ1Y3QgZjJmc19kZW50cnlfcHRyIGQ7CisKKwlkZW50cnlfYmxrID0gKHN0cnVjdCBmMmZzX2RlbnRyeV9ibG9jayAqKWttYXAoZGVudHJ5X3BhZ2UpOworCisJbWFrZV9kZW50cnlfcHRyKCZkLCAodm9pZCAqKWRlbnRyeV9ibGssIDEpOworCWRlID0gZmluZF90YXJnZXRfZGVudHJ5KG5hbWUsIG1heF9zbG90cywgJmQpOworCisJaWYgKGRlKQorCQkqcmVzX3BhZ2UgPSBkZW50cnlfcGFnZTsKKwllbHNlCisJCWt1bm1hcChkZW50cnlfcGFnZSk7CisKKwkvKgorCSAqIEZvciB0aGUgbW9zdCBwYXJ0LCBpdCBzaG91bGQgYmUgYSBidWcgd2hlbiBuYW1lX2xlbiBpcyB6ZXJvLgorCSAqIFdlIHN0b3AgaGVyZSBmb3IgZmlndXJpbmcgb3V0IHdoZXJlIHRoZSBidWdzIGhhcyBvY2N1cnJlZC4KKwkgKi8KKwlmMmZzX2J1Z19vbihGMkZTX1BfU0IoZGVudHJ5X3BhZ2UpLCBkLm1heCA8IDApOworCXJldHVybiBkZTsKK30KKworc3RydWN0IGYyZnNfZGlyX2VudHJ5ICpmaW5kX3RhcmdldF9kZW50cnkoc3RydWN0IHFzdHIgKm5hbWUsIGludCAqbWF4X3Nsb3RzLAorCQkJCQkJc3RydWN0IGYyZnNfZGVudHJ5X3B0ciAqZCkKIHsKIAlzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmRlOwogCXVuc2lnbmVkIGxvbmcgYml0X3BvcyA9IDA7Ci0Jc3RydWN0IGYyZnNfZGVudHJ5X2Jsb2NrICpkZW50cnlfYmxrID0ga21hcChkZW50cnlfcGFnZSk7Ci0JY29uc3Qgdm9pZCAqZGVudHJ5X2JpdHMgPSAmZGVudHJ5X2Jsay0+ZGVudHJ5X2JpdG1hcDsKKwlmMmZzX2hhc2hfdCBuYW1laGFzaCA9IGYyZnNfZGVudHJ5X2hhc2gobmFtZSk7CiAJaW50IG1heF9sZW4gPSAwOwogCi0Jd2hpbGUgKGJpdF9wb3MgPCBOUl9ERU5UUllfSU5fQkxPQ0spIHsKLQkJaWYgKCF0ZXN0X2JpdF9sZShiaXRfcG9zLCBkZW50cnlfYml0cykpIHsKKwlpZiAobWF4X3Nsb3RzKQorCQkqbWF4X3Nsb3RzID0gMDsKKwl3aGlsZSAoYml0X3BvcyA8IGQtPm1heCkgeworCQlpZiAoIXRlc3RfYml0X2xlKGJpdF9wb3MsIGQtPmJpdG1hcCkpIHsKIAkJCWlmIChiaXRfcG9zID09IDApCiAJCQkJbWF4X2xlbiA9IDE7Ci0JCQllbHNlIGlmICghdGVzdF9iaXRfbGUoYml0X3BvcyAtIDEsIGRlbnRyeV9iaXRzKSkKKwkJCWVsc2UgaWYgKCF0ZXN0X2JpdF9sZShiaXRfcG9zIC0gMSwgZC0+Yml0bWFwKSkKIAkJCQltYXhfbGVuKys7CiAJCQliaXRfcG9zKys7CiAJCQljb250aW51ZTsKIAkJfQotCQlkZSA9ICZkZW50cnlfYmxrLT5kZW50cnlbYml0X3Bvc107Ci0JCWlmIChlYXJseV9tYXRjaF9uYW1lKG5hbWUtPmxlbiwgbmFtZWhhc2gsIGRlKSkgewotCQkJaWYgKCFtZW1jbXAoZGVudHJ5X2Jsay0+ZmlsZW5hbWVbYml0X3Bvc10sCi0JCQkJCQkJbmFtZS0+bmFtZSwKLQkJCQkJCQluYW1lLT5sZW4pKSB7Ci0JCQkJKnJlc19wYWdlID0gZGVudHJ5X3BhZ2U7Ci0JCQkJZ290byBmb3VuZDsKLQkJCX0KLQkJfQotCQlpZiAobWF4X2xlbiA+ICptYXhfc2xvdHMpIHsKKwkJZGUgPSAmZC0+ZGVudHJ5W2JpdF9wb3NdOworCQlpZiAoZWFybHlfbWF0Y2hfbmFtZShuYW1lLT5sZW4sIG5hbWVoYXNoLCBkZSkgJiYKKwkJCSFtZW1jbXAoZC0+ZmlsZW5hbWVbYml0X3Bvc10sIG5hbWUtPm5hbWUsIG5hbWUtPmxlbikpCisJCQlnb3RvIGZvdW5kOworCisJCWlmIChtYXhfc2xvdHMgJiYgKm1heF9zbG90cyA+PSAwICYmIG1heF9sZW4gPiAqbWF4X3Nsb3RzKSB7CiAJCQkqbWF4X3Nsb3RzID0gbWF4X2xlbjsKIAkJCW1heF9sZW4gPSAwOwogCQl9CiAKLQkJLyoKLQkJICogRm9yIHRoZSBtb3N0IHBhcnQsIGl0IHNob3VsZCBiZSBhIGJ1ZyB3aGVuIG5hbWVfbGVuIGlzIHplcm8uCi0JCSAqIFdlIHN0b3AgaGVyZSBmb3IgZmlndXJpbmcgb3V0IHdoZXJlIHRoZSBidWdzIGhhcyBvY2N1cnJlZC4KLQkJICovCi0JCWYyZnNfYnVnX29uKEYyRlNfUF9TQihkZW50cnlfcGFnZSksICFkZS0+bmFtZV9sZW4pOworCQkvKiByZW1haW4gYnVnIG9uIGNvbmRpdGlvbiAqLworCQlpZiAodW5saWtlbHkoIWRlLT5uYW1lX2xlbikpCisJCQlkLT5tYXggPSAtMTsKIAogCQliaXRfcG9zICs9IEdFVF9ERU5UUllfU0xPVFMobGUxNl90b19jcHUoZGUtPm5hbWVfbGVuKSk7CiAJfQogCiAJZGUgPSBOVUxMOwotCWt1bm1hcChkZW50cnlfcGFnZSk7CiBmb3VuZDoKLQlpZiAobWF4X2xlbiA+ICptYXhfc2xvdHMpCisJaWYgKG1heF9zbG90cyAmJiBtYXhfbGVuID4gKm1heF9zbG90cykKIAkJKm1heF9zbG90cyA9IG1heF9sZW47CiAJcmV0dXJuIGRlOwogfQpAQCAtMTQ5LDcgKzE2OCw3IEBACiAJc3RydWN0IHBhZ2UgKmRlbnRyeV9wYWdlOwogCXN0cnVjdCBmMmZzX2Rpcl9lbnRyeSAqZGUgPSBOVUxMOwogCWJvb2wgcm9vbSA9IGZhbHNlOwotCWludCBtYXhfc2xvdHMgPSAwOworCWludCBtYXhfc2xvdHM7CiAKIAlmMmZzX2J1Z19vbihGMkZTX0lfU0IoZGlyKSwgbGV2ZWwgPiBNQVhfRElSX0hBU0hfREVQVEgpOwogCkBAIC0xNjgsOCArMTg3LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJZGUgPSBmaW5kX2luX2Jsb2NrKGRlbnRyeV9wYWdlLCBuYW1lLCAmbWF4X3Nsb3RzLAotCQkJCQluYW1laGFzaCwgcmVzX3BhZ2UpOworCQlkZSA9IGZpbmRfaW5fYmxvY2soZGVudHJ5X3BhZ2UsIG5hbWUsICZtYXhfc2xvdHMsIHJlc19wYWdlKTsKIAkJaWYgKGRlKQogCQkJYnJlYWs7CiAKQEAgLTIwMSw2ICsyMTksOSBAQAogCXVuc2lnbmVkIGludCBtYXhfZGVwdGg7CiAJdW5zaWduZWQgaW50IGxldmVsOwogCisJaWYgKGYyZnNfaGFzX2lubGluZV9kZW50cnkoZGlyKSkKKwkJcmV0dXJuIGZpbmRfaW5faW5saW5lX2RpcihkaXIsIGNoaWxkLCByZXNfcGFnZSk7CisKIAlpZiAobnBhZ2VzID09IDApCiAJCXJldHVybiBOVUxMOwogCkBAIC0yMjcsNiArMjQ4LDkgQEAKIAlzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmRlOwogCXN0cnVjdCBmMmZzX2RlbnRyeV9ibG9jayAqZGVudHJ5X2JsazsKIAorCWlmIChmMmZzX2hhc19pbmxpbmVfZGVudHJ5KGRpcikpCisJCXJldHVybiBmMmZzX3BhcmVudF9pbmxpbmVfZGlyKGRpciwgcCk7CisKIAlwYWdlID0gZ2V0X2xvY2tfZGF0YV9wYWdlKGRpciwgMCk7CiAJaWYgKElTX0VSUihwYWdlKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNDcsNyArMjcxLDcgQEAKIAlkZSA9IGYyZnNfZmluZF9lbnRyeShkaXIsIHFzdHIsICZwYWdlKTsKIAlpZiAoZGUpIHsKIAkJcmVzID0gbGUzMl90b19jcHUoZGUtPmlubyk7Ci0JCWt1bm1hcChwYWdlKTsKKwkJZjJmc19kZW50cnlfa3VubWFwKGRpciwgcGFnZSk7CiAJCWYyZnNfcHV0X3BhZ2UocGFnZSwgMCk7CiAJfQogCkBAIC0yNTcsMTEgKzI4MSwxMyBAQAogdm9pZCBmMmZzX3NldF9saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmRlLAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwllbnVtIHBhZ2VfdHlwZSB0eXBlID0gZjJmc19oYXNfaW5saW5lX2RlbnRyeShkaXIpID8gTk9ERSA6IERBVEE7CiAJbG9ja19wYWdlKHBhZ2UpOwotCWYyZnNfd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlLCBEQVRBKTsKKwlmMmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSwgdHlwZSk7CiAJZGUtPmlubyA9IGNwdV90b19sZTMyKGlub2RlLT5pX2lubyk7CiAJc2V0X2RlX3R5cGUoZGUsIGlub2RlKTsKLQlrdW5tYXAocGFnZSk7CisJaWYgKCFmMmZzX2hhc19pbmxpbmVfZGVudHJ5KGRpcikpCisJCWt1bm1hcChwYWdlKTsKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlkaXItPmlfbXRpbWUgPSBkaXItPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJbWFya19pbm9kZV9kaXJ0eShkaXIpOwpAQCAtMjk2LDM2ICszMjIsNDggQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBkb19tYWtlX2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKKwkJCQkJc3RydWN0IGYyZnNfZGVudHJ5X3B0ciAqZCkKK3sKKwlzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmRlOworCisJZGUgPSAmZC0+ZGVudHJ5WzBdOworCWRlLT5uYW1lX2xlbiA9IGNwdV90b19sZTE2KDEpOworCWRlLT5oYXNoX2NvZGUgPSAwOworCWRlLT5pbm8gPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9pbm8pOworCW1lbWNweShkLT5maWxlbmFtZVswXSwgIi4iLCAxKTsKKwlzZXRfZGVfdHlwZShkZSwgaW5vZGUpOworCisJZGUgPSAmZC0+ZGVudHJ5WzFdOworCWRlLT5oYXNoX2NvZGUgPSAwOworCWRlLT5uYW1lX2xlbiA9IGNwdV90b19sZTE2KDIpOworCWRlLT5pbm8gPSBjcHVfdG9fbGUzMihwYXJlbnQtPmlfaW5vKTsKKwltZW1jcHkoZC0+ZmlsZW5hbWVbMV0sICIuLiIsIDIpOworCXNldF9kZV90eXBlKGRlLCBpbm9kZSk7CisKKwl0ZXN0X2FuZF9zZXRfYml0X2xlKDAsICh2b2lkICopZC0+Yml0bWFwKTsKKwl0ZXN0X2FuZF9zZXRfYml0X2xlKDEsICh2b2lkICopZC0+Yml0bWFwKTsKK30KKwogc3RhdGljIGludCBtYWtlX2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IHBhZ2UgKmRlbnRyeV9wYWdlOwogCXN0cnVjdCBmMmZzX2RlbnRyeV9ibG9jayAqZGVudHJ5X2JsazsKLQlzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmRlOworCXN0cnVjdCBmMmZzX2RlbnRyeV9wdHIgZDsKKworCWlmIChmMmZzX2hhc19pbmxpbmVfZGVudHJ5KGlub2RlKSkKKwkJcmV0dXJuIG1ha2VfZW1wdHlfaW5saW5lX2Rpcihpbm9kZSwgcGFyZW50LCBwYWdlKTsKIAogCWRlbnRyeV9wYWdlID0gZ2V0X25ld19kYXRhX3BhZ2UoaW5vZGUsIHBhZ2UsIDAsIHRydWUpOwogCWlmIChJU19FUlIoZGVudHJ5X3BhZ2UpKQogCQlyZXR1cm4gUFRSX0VSUihkZW50cnlfcGFnZSk7CiAKLQogCWRlbnRyeV9ibGsgPSBrbWFwX2F0b21pYyhkZW50cnlfcGFnZSk7CiAKLQlkZSA9ICZkZW50cnlfYmxrLT5kZW50cnlbMF07Ci0JZGUtPm5hbWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7Ci0JZGUtPmhhc2hfY29kZSA9IDA7Ci0JZGUtPmlubyA9IGNwdV90b19sZTMyKGlub2RlLT5pX2lubyk7Ci0JbWVtY3B5KGRlbnRyeV9ibGstPmZpbGVuYW1lWzBdLCAiLiIsIDEpOwotCXNldF9kZV90eXBlKGRlLCBpbm9kZSk7CisJbWFrZV9kZW50cnlfcHRyKCZkLCAodm9pZCAqKWRlbnRyeV9ibGssIDEpOworCWRvX21ha2VfZW1wdHlfZGlyKGlub2RlLCBwYXJlbnQsICZkKTsKIAotCWRlID0gJmRlbnRyeV9ibGstPmRlbnRyeVsxXTsKLQlkZS0+aGFzaF9jb2RlID0gMDsKLQlkZS0+bmFtZV9sZW4gPSBjcHVfdG9fbGUxNigyKTsKLQlkZS0+aW5vID0gY3B1X3RvX2xlMzIocGFyZW50LT5pX2lubyk7Ci0JbWVtY3B5KGRlbnRyeV9ibGstPmZpbGVuYW1lWzFdLCAiLi4iLCAyKTsKLQlzZXRfZGVfdHlwZShkZSwgaW5vZGUpOwotCi0JdGVzdF9hbmRfc2V0X2JpdF9sZSgwLCAmZGVudHJ5X2Jsay0+ZGVudHJ5X2JpdG1hcCk7Ci0JdGVzdF9hbmRfc2V0X2JpdF9sZSgxLCAmZGVudHJ5X2Jsay0+ZGVudHJ5X2JpdG1hcCk7CiAJa3VubWFwX2F0b21pYyhkZW50cnlfYmxrKTsKIAogCXNldF9wYWdlX2RpcnR5KGRlbnRyeV9wYWdlKTsKQEAgLTMzMyw4ICszNzEsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhZ2UgKmluaXRfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwKLQkJc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQorc3RydWN0IHBhZ2UgKmluaXRfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCisJCQljb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgc3RydWN0IHBhZ2UgKmRwYWdlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBlcnI7CkBAIC0zNTAsNyArMzg4LDcgQEAKIAkJCQlnb3RvIGVycm9yOwogCQl9CiAKLQkJZXJyID0gZjJmc19pbml0X2FjbChpbm9kZSwgZGlyLCBwYWdlKTsKKwkJZXJyID0gZjJmc19pbml0X2FjbChpbm9kZSwgZGlyLCBwYWdlLCBkcGFnZSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIHB1dF9lcnJvcjsKIApAQCAtMzk1LDcgKzQzMyw3IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3BhcmVudF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwKK3ZvaWQgdXBkYXRlX3BhcmVudF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJCXVuc2lnbmVkIGludCBjdXJyZW50X2RlcHRoKQogewogCWlmIChpc19pbm9kZV9mbGFnX3NldChGMkZTX0koaW5vZGUpLCBGSV9ORVdfSU5PREUpKSB7CkBAIC00MTcsMjcgKzQ1NSwyMyBAQAogCQljbGVhcl9pbm9kZV9mbGFnKEYyRlNfSShpbm9kZSksIEZJX0lOQ19MSU5LKTsKIH0KIAotc3RhdGljIGludCByb29tX2Zvcl9maWxlbmFtZShzdHJ1Y3QgZjJmc19kZW50cnlfYmxvY2sgKmRlbnRyeV9ibGssIGludCBzbG90cykKK2ludCByb29tX2Zvcl9maWxlbmFtZShjb25zdCB2b2lkICpiaXRtYXAsIGludCBzbG90cywgaW50IG1heF9zbG90cykKIHsKIAlpbnQgYml0X3N0YXJ0ID0gMDsKIAlpbnQgemVyb19zdGFydCwgemVyb19lbmQ7CiBuZXh0OgotCXplcm9fc3RhcnQgPSBmaW5kX25leHRfemVyb19iaXRfbGUoJmRlbnRyeV9ibGstPmRlbnRyeV9iaXRtYXAsCi0JCQkJCQlOUl9ERU5UUllfSU5fQkxPQ0ssCi0JCQkJCQliaXRfc3RhcnQpOwotCWlmICh6ZXJvX3N0YXJ0ID49IE5SX0RFTlRSWV9JTl9CTE9DSykKLQkJcmV0dXJuIE5SX0RFTlRSWV9JTl9CTE9DSzsKKwl6ZXJvX3N0YXJ0ID0gZmluZF9uZXh0X3plcm9fYml0X2xlKGJpdG1hcCwgbWF4X3Nsb3RzLCBiaXRfc3RhcnQpOworCWlmICh6ZXJvX3N0YXJ0ID49IG1heF9zbG90cykKKwkJcmV0dXJuIG1heF9zbG90czsKIAotCXplcm9fZW5kID0gZmluZF9uZXh0X2JpdF9sZSgmZGVudHJ5X2Jsay0+ZGVudHJ5X2JpdG1hcCwKLQkJCQkJCU5SX0RFTlRSWV9JTl9CTE9DSywKLQkJCQkJCXplcm9fc3RhcnQpOworCXplcm9fZW5kID0gZmluZF9uZXh0X2JpdF9sZShiaXRtYXAsIG1heF9zbG90cywgemVyb19zdGFydCk7CiAJaWYgKHplcm9fZW5kIC0gemVyb19zdGFydCA+PSBzbG90cykKIAkJcmV0dXJuIHplcm9fc3RhcnQ7CiAKIAliaXRfc3RhcnQgPSB6ZXJvX2VuZCArIDE7CiAKLQlpZiAoemVyb19lbmQgKyAxID49IE5SX0RFTlRSWV9JTl9CTE9DSykKLQkJcmV0dXJuIE5SX0RFTlRSWV9JTl9CTE9DSzsKKwlpZiAoemVyb19lbmQgKyAxID49IG1heF9zbG90cykKKwkJcmV0dXJuIG1heF9zbG90czsKIAlnb3RvIG5leHQ7CiB9CiAKQEAgLTQ2Myw2ICs0OTcsMTQgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAorCWlmIChmMmZzX2hhc19pbmxpbmVfZGVudHJ5KGRpcikpIHsKKwkJZXJyID0gZjJmc19hZGRfaW5saW5lX2VudHJ5KGRpciwgbmFtZSwgaW5vZGUpOworCQlpZiAoIWVyciB8fCBlcnIgIT0gLUVBR0FJTikKKwkJCXJldHVybiBlcnI7CisJCWVsc2UKKwkJCWVyciA9IDA7CisJfQorCiAJZGVudHJ5X2hhc2ggPSBmMmZzX2RlbnRyeV9oYXNoKG5hbWUpOwogCWxldmVsID0gMDsKIAljdXJyZW50X2RlcHRoID0gRjJGU19JKGRpciktPmlfY3VycmVudF9kZXB0aDsKQEAgLTQ5MSw3ICs1MzMsOCBAQAogCQkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5X3BhZ2UpOwogCiAJCWRlbnRyeV9ibGsgPSBrbWFwKGRlbnRyeV9wYWdlKTsKLQkJYml0X3BvcyA9IHJvb21fZm9yX2ZpbGVuYW1lKGRlbnRyeV9ibGssIHNsb3RzKTsKKwkJYml0X3BvcyA9IHJvb21fZm9yX2ZpbGVuYW1lKCZkZW50cnlfYmxrLT5kZW50cnlfYml0bWFwLAorCQkJCQkJc2xvdHMsIE5SX0RFTlRSWV9JTl9CTE9DSyk7CiAJCWlmIChiaXRfcG9zIDwgTlJfREVOVFJZX0lOX0JMT0NLKQogCQkJZ290byBhZGRfZGVudHJ5OwogCkBAIC01MDYsNyArNTQ5LDcgQEAKIAlmMmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2soZGVudHJ5X3BhZ2UsIERBVEEpOwogCiAJZG93bl93cml0ZSgmRjJGU19JKGlub2RlKS0+aV9zZW0pOwotCXBhZ2UgPSBpbml0X2lub2RlX21ldGFkYXRhKGlub2RlLCBkaXIsIG5hbWUpOworCXBhZ2UgPSBpbml0X2lub2RlX21ldGFkYXRhKGlub2RlLCBkaXIsIG5hbWUsIE5VTEwpOwogCWlmIChJU19FUlIocGFnZSkpIHsKIAkJZXJyID0gUFRSX0VSUihwYWdlKTsKIAkJZ290byBmYWlsOwpAQCAtNTQ1LDcgKzU4OCw3IEBACiAJaW50IGVyciA9IDA7CiAKIAlkb3duX3dyaXRlKCZGMkZTX0koaW5vZGUpLT5pX3NlbSk7Ci0JcGFnZSA9IGluaXRfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGRpciwgTlVMTCk7CisJcGFnZSA9IGluaXRfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGRpciwgTlVMTCwgTlVMTCk7CiAJaWYgKElTX0VSUihwYWdlKSkgewogCQllcnIgPSBQVFJfRVJSKHBhZ2UpOwogCQlnb3RvIGZhaWw7CkBAIC01NjAsMjYgKzYwMyw1NyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3ZvaWQgZjJmc19kcm9wX25saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoZGlyKTsKKworCWRvd25fd3JpdGUoJkYyRlNfSShpbm9kZSktPmlfc2VtKTsKKworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCWRyb3BfbmxpbmsoZGlyKTsKKwkJaWYgKHBhZ2UpCisJCQl1cGRhdGVfaW5vZGUoZGlyLCBwYWdlKTsKKwkJZWxzZQorCQkJdXBkYXRlX2lub2RlX3BhZ2UoZGlyKTsKKwl9CisJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisKKwlkcm9wX25saW5rKGlub2RlKTsKKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQlkcm9wX25saW5rKGlub2RlKTsKKwkJaV9zaXplX3dyaXRlKGlub2RlLCAwKTsKKwl9CisJdXBfd3JpdGUoJkYyRlNfSShpbm9kZSktPmlfc2VtKTsKKwl1cGRhdGVfaW5vZGVfcGFnZShpbm9kZSk7CisKKwlpZiAoaW5vZGUtPmlfbmxpbmsgPT0gMCkKKwkJYWRkX29ycGhhbl9pbm9kZShzYmksIGlub2RlLT5pX2lubyk7CisJZWxzZQorCQlyZWxlYXNlX29ycGhhbl9pbm9kZShzYmkpOworfQorCiAvKgogICogSXQgb25seSByZW1vdmVzIHRoZSBkZW50cnkgZnJvbSB0aGUgZGVudHJ5IHBhZ2UsIGNvcnJlc3BvbmRpbmcgbmFtZQogICogZW50cnkgaW4gbmFtZSBwYWdlIGRvZXMgbm90IG5lZWQgdG8gYmUgdG91Y2hlZCBkdXJpbmcgZGVsZXRpb24uCiAgKi8KIHZvaWQgZjJmc19kZWxldGVfZW50cnkoc3RydWN0IGYyZnNfZGlyX2VudHJ5ICpkZW50cnksIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCQkJc3RydWN0IGlub2RlICppbm9kZSkKKwkJCQkJc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0CWYyZnNfZGVudHJ5X2Jsb2NrICpkZW50cnlfYmxrOwogCXVuc2lnbmVkIGludCBiaXRfcG9zOwotCXN0cnVjdCBpbm9kZSAqZGlyID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlpbnQgc2xvdHMgPSBHRVRfREVOVFJZX1NMT1RTKGxlMTZfdG9fY3B1KGRlbnRyeS0+bmFtZV9sZW4pKTsKIAlpbnQgaTsKIAorCWlmIChmMmZzX2hhc19pbmxpbmVfZGVudHJ5KGRpcikpCisJCXJldHVybiBmMmZzX2RlbGV0ZV9pbmxpbmVfZW50cnkoZGVudHJ5LCBwYWdlLCBkaXIsIGlub2RlKTsKKwogCWxvY2tfcGFnZShwYWdlKTsKIAlmMmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSwgREFUQSk7CiAKIAlkZW50cnlfYmxrID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWJpdF9wb3MgPSBkZW50cnkgLSBkZW50cnlfYmxrLT5kZW50cnk7CiAJZm9yIChpID0gMDsgaSA8IHNsb3RzOyBpKyspCi0JCXRlc3RfYW5kX2NsZWFyX2JpdF9sZShiaXRfcG9zICsgaSwgJmRlbnRyeV9ibGstPmRlbnRyeV9iaXRtYXApOworCQljbGVhcl9iaXRfbGUoYml0X3BvcyArIGksICZkZW50cnlfYmxrLT5kZW50cnlfYml0bWFwKTsKIAogCS8qIExldCdzIGNoZWNrIGFuZCBkZWFsbG9jYXRlIHRoaXMgZGVudHJ5IHBhZ2UgKi8KIAliaXRfcG9zID0gZmluZF9uZXh0X2JpdF9sZSgmZGVudHJ5X2Jsay0+ZGVudHJ5X2JpdG1hcCwKQEAgLTU5MCwyOSArNjY0LDggQEAKIAogCWRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKIAotCWlmIChpbm9kZSkgewotCQlzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoZGlyKTsKLQotCQlkb3duX3dyaXRlKCZGMkZTX0koaW5vZGUpLT5pX3NlbSk7Ci0KLQkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCWRyb3BfbmxpbmsoZGlyKTsKLQkJCXVwZGF0ZV9pbm9kZV9wYWdlKGRpcik7Ci0JCX0KLQkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JCWRyb3BfbmxpbmsoaW5vZGUpOwotCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQkJZHJvcF9ubGluayhpbm9kZSk7Ci0JCQlpX3NpemVfd3JpdGUoaW5vZGUsIDApOwotCQl9Ci0JCXVwX3dyaXRlKCZGMkZTX0koaW5vZGUpLT5pX3NlbSk7Ci0JCXVwZGF0ZV9pbm9kZV9wYWdlKGlub2RlKTsKLQotCQlpZiAoaW5vZGUtPmlfbmxpbmsgPT0gMCkKLQkJCWFkZF9vcnBoYW5faW5vZGUoc2JpLCBpbm9kZS0+aV9pbm8pOwotCQllbHNlCi0JCQlyZWxlYXNlX29ycGhhbl9pbm9kZShzYmkpOwotCX0KKwlpZiAoaW5vZGUpCisJCWYyZnNfZHJvcF9ubGluayhkaXIsIGlub2RlLCBOVUxMKTsKIAogCWlmIChiaXRfcG9zID09IE5SX0RFTlRSWV9JTl9CTE9DSykgewogCQl0cnVuY2F0ZV9ob2xlKGRpciwgcGFnZS0+aW5kZXgsIHBhZ2UtPmluZGV4ICsgMSk7CkBAIC02MjgsOSArNjgxLDEyIEBACiAJdW5zaWduZWQgbG9uZyBiaWR4OwogCXN0cnVjdCBwYWdlICpkZW50cnlfcGFnZTsKIAl1bnNpZ25lZCBpbnQgYml0X3BvczsKLQlzdHJ1Y3QJZjJmc19kZW50cnlfYmxvY2sgKmRlbnRyeV9ibGs7CisJc3RydWN0IGYyZnNfZGVudHJ5X2Jsb2NrICpkZW50cnlfYmxrOwogCXVuc2lnbmVkIGxvbmcgbmJsb2NrID0gZGlyX2Jsb2NrcyhkaXIpOwogCisJaWYgKGYyZnNfaGFzX2lubGluZV9kZW50cnkoZGlyKSkKKwkJcmV0dXJuIGYyZnNfZW1wdHlfaW5saW5lX2RpcihkaXIpOworCiAJZm9yIChiaWR4ID0gMDsgYmlkeCA8IG5ibG9jazsgYmlkeCsrKSB7CiAJCWRlbnRyeV9wYWdlID0gZ2V0X2xvY2tfZGF0YV9wYWdlKGRpciwgYmlkeCk7CiAJCWlmIChJU19FUlIoZGVudHJ5X3BhZ2UpKSB7CkBAIC02NDAsNyArNjk2LDYgQEAKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAotCiAJCWRlbnRyeV9ibGsgPSBrbWFwX2F0b21pYyhkZW50cnlfcGFnZSk7CiAJCWlmIChiaWR4ID09IDApCiAJCQliaXRfcG9zID0gMjsKQEAgLTY1OSwxOSArNzE0LDQ4IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgZjJmc19maWxsX2RlbnRyaWVzKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBzdHJ1Y3QgZjJmc19kZW50cnlfcHRyICpkLAorCQkJCQkJdW5zaWduZWQgaW50IHN0YXJ0X3BvcykKK3sKKwl1bnNpZ25lZCBjaGFyIGRfdHlwZSA9IERUX1VOS05PV047CisJdW5zaWduZWQgaW50IGJpdF9wb3M7CisJc3RydWN0IGYyZnNfZGlyX2VudHJ5ICpkZSA9IE5VTEw7CisKKwliaXRfcG9zID0gKCh1bnNpZ25lZCBsb25nKWN0eC0+cG9zICUgZC0+bWF4KTsKKworCXdoaWxlIChiaXRfcG9zIDwgZC0+bWF4KSB7CisJCWJpdF9wb3MgPSBmaW5kX25leHRfYml0X2xlKGQtPmJpdG1hcCwgZC0+bWF4LCBiaXRfcG9zKTsKKwkJaWYgKGJpdF9wb3MgPj0gZC0+bWF4KQorCQkJYnJlYWs7CisKKwkJZGUgPSAmZC0+ZGVudHJ5W2JpdF9wb3NdOworCQlpZiAoZGUtPmZpbGVfdHlwZSA8IEYyRlNfRlRfTUFYKQorCQkJZF90eXBlID0gZjJmc19maWxldHlwZV90YWJsZVtkZS0+ZmlsZV90eXBlXTsKKwkJZWxzZQorCQkJZF90eXBlID0gRFRfVU5LTk9XTjsKKwkJaWYgKCFkaXJfZW1pdChjdHgsIGQtPmZpbGVuYW1lW2JpdF9wb3NdLAorCQkJCQlsZTE2X3RvX2NwdShkZS0+bmFtZV9sZW4pLAorCQkJCQlsZTMyX3RvX2NwdShkZS0+aW5vKSwgZF90eXBlKSkKKwkJCXJldHVybiB0cnVlOworCisJCWJpdF9wb3MgKz0gR0VUX0RFTlRSWV9TTE9UUyhsZTE2X3RvX2NwdShkZS0+bmFtZV9sZW4pKTsKKwkJY3R4LT5wb3MgPSBzdGFydF9wb3MgKyBiaXRfcG9zOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBpbnQgZjJmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IGRpcl9ibG9ja3MoaW5vZGUpOwotCXVuc2lnbmVkIGludCBiaXRfcG9zID0gMDsKIAlzdHJ1Y3QgZjJmc19kZW50cnlfYmxvY2sgKmRlbnRyeV9ibGsgPSBOVUxMOwotCXN0cnVjdCBmMmZzX2Rpcl9lbnRyeSAqZGUgPSBOVUxMOwogCXN0cnVjdCBwYWdlICpkZW50cnlfcGFnZSA9IE5VTEw7CiAJc3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhID0gJmZpbGUtPmZfcmE7CiAJdW5zaWduZWQgaW50IG4gPSAoKHVuc2lnbmVkIGxvbmcpY3R4LT5wb3MgLyBOUl9ERU5UUllfSU5fQkxPQ0spOwotCXVuc2lnbmVkIGNoYXIgZF90eXBlID0gRFRfVU5LTk9XTjsKKwlzdHJ1Y3QgZjJmc19kZW50cnlfcHRyIGQ7CiAKLQliaXRfcG9zID0gKCh1bnNpZ25lZCBsb25nKWN0eC0+cG9zICUgTlJfREVOVFJZX0lOX0JMT0NLKTsKKwlpZiAoZjJmc19oYXNfaW5saW5lX2RlbnRyeShpbm9kZSkpCisJCXJldHVybiBmMmZzX3JlYWRfaW5saW5lX2RpcihmaWxlLCBjdHgpOwogCiAJLyogcmVhZGFoZWFkIGZvciBtdWx0aSBwYWdlcyBvZiBkaXIgKi8KIAlpZiAobnBhZ2VzIC0gbiA+IDEgJiYgIXJhX2hhc19pbmRleChyYSwgbikpCkBAIC02ODQsMjggKzc2OCwxMiBAQAogCQkJY29udGludWU7CiAKIAkJZGVudHJ5X2JsayA9IGttYXAoZGVudHJ5X3BhZ2UpOwotCQl3aGlsZSAoYml0X3BvcyA8IE5SX0RFTlRSWV9JTl9CTE9DSykgewotCQkJYml0X3BvcyA9IGZpbmRfbmV4dF9iaXRfbGUoJmRlbnRyeV9ibGstPmRlbnRyeV9iaXRtYXAsCi0JCQkJCQkJTlJfREVOVFJZX0lOX0JMT0NLLAotCQkJCQkJCWJpdF9wb3MpOwotCQkJaWYgKGJpdF9wb3MgPj0gTlJfREVOVFJZX0lOX0JMT0NLKQotCQkJCWJyZWFrOwogCi0JCQlkZSA9ICZkZW50cnlfYmxrLT5kZW50cnlbYml0X3Bvc107Ci0JCQlpZiAoZGUtPmZpbGVfdHlwZSA8IEYyRlNfRlRfTUFYKQotCQkJCWRfdHlwZSA9IGYyZnNfZmlsZXR5cGVfdGFibGVbZGUtPmZpbGVfdHlwZV07Ci0JCQllbHNlCi0JCQkJZF90eXBlID0gRFRfVU5LTk9XTjsKLQkJCWlmICghZGlyX2VtaXQoY3R4LAotCQkJCQlkZW50cnlfYmxrLT5maWxlbmFtZVtiaXRfcG9zXSwKLQkJCQkJbGUxNl90b19jcHUoZGUtPm5hbWVfbGVuKSwKLQkJCQkJbGUzMl90b19jcHUoZGUtPmlubyksIGRfdHlwZSkpCi0JCQkJZ290byBzdG9wOworCQltYWtlX2RlbnRyeV9wdHIoJmQsICh2b2lkICopZGVudHJ5X2JsaywgMSk7CiAKLQkJCWJpdF9wb3MgKz0gR0VUX0RFTlRSWV9TTE9UUyhsZTE2X3RvX2NwdShkZS0+bmFtZV9sZW4pKTsKLQkJCWN0eC0+cG9zID0gbiAqIE5SX0RFTlRSWV9JTl9CTE9DSyArIGJpdF9wb3M7Ci0JCX0KLQkJYml0X3BvcyA9IDA7CisJCWlmIChmMmZzX2ZpbGxfZGVudHJpZXMoY3R4LCAmZCwgbiAqIE5SX0RFTlRSWV9JTl9CTE9DSykpCisJCQlnb3RvIHN0b3A7CisKIAkJY3R4LT5wb3MgPSAobiArIDEpICogTlJfREVOVFJZX0lOX0JMT0NLOwogCQlrdW5tYXAoZGVudHJ5X3BhZ2UpOwogCQlmMmZzX3B1dF9wYWdlKGRlbnRyeV9wYWdlLCAxKTsKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZjJmcy5oIGIvZnMvZjJmcy9mMmZzLmgKaW5kZXggODE3MWU4MC4uZWM1OGJiMiAxMDA2NDQKLS0tIGEvZnMvZjJmcy9mMmZzLmgKKysrIGIvZnMvZjJmcy9mMmZzLmgKQEAgLTQ2LDggKzQ2LDEwIEBACiAjZGVmaW5lIEYyRlNfTU9VTlRfRElTQUJMRV9FWFRfSURFTlRJRlkJMHgwMDAwMDA0MAogI2RlZmluZSBGMkZTX01PVU5UX0lOTElORV9YQVRUUgkJMHgwMDAwMDA4MAogI2RlZmluZSBGMkZTX01PVU5UX0lOTElORV9EQVRBCQkweDAwMDAwMTAwCi0jZGVmaW5lIEYyRlNfTU9VTlRfRkxVU0hfTUVSR0UJCTB4MDAwMDAyMDAKLSNkZWZpbmUgRjJGU19NT1VOVF9OT0JBUlJJRVIJCTB4MDAwMDA0MDAKKyNkZWZpbmUgRjJGU19NT1VOVF9JTkxJTkVfREVOVFJZCTB4MDAwMDAyMDAKKyNkZWZpbmUgRjJGU19NT1VOVF9GTFVTSF9NRVJHRQkJMHgwMDAwMDQwMAorI2RlZmluZSBGMkZTX01PVU5UX05PQkFSUklFUgkJMHgwMDAwMDgwMAorI2RlZmluZSBGMkZTX01PVU5UX0ZBU1RCT09UCQkweDAwMDAxMDAwCiAKICNkZWZpbmUgY2xlYXJfb3B0KHNiaSwgb3B0aW9uKQkoc2JpLT5tb3VudF9vcHQub3B0ICY9IH5GMkZTX01PVU5UXyMjb3B0aW9uKQogI2RlZmluZSBzZXRfb3B0KHNiaSwgb3B0aW9uKQkoc2JpLT5tb3VudF9vcHQub3B0IHw9IEYyRlNfTU9VTlRfIyNvcHRpb24pCkBAIC0yMTEsNiArMjEzLDMyIEBACiAvKgogICogRm9yIElOT0RFIGFuZCBOT0RFIG1hbmFnZXIKICAqLworLyogZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zICovCitzdHJ1Y3QgZjJmc19kZW50cnlfcHRyIHsKKwljb25zdCB2b2lkICpiaXRtYXA7CisJc3RydWN0IGYyZnNfZGlyX2VudHJ5ICpkZW50cnk7CisJX191OCAoKmZpbGVuYW1lKVtGMkZTX1NMT1RfTEVOXTsKKwlpbnQgbWF4OworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG1ha2VfZGVudHJ5X3B0cihzdHJ1Y3QgZjJmc19kZW50cnlfcHRyICpkLAorCQkJCQl2b2lkICpzcmMsIGludCB0eXBlKQoreworCWlmICh0eXBlID09IDEpIHsKKwkJc3RydWN0IGYyZnNfZGVudHJ5X2Jsb2NrICp0ID0gKHN0cnVjdCBmMmZzX2RlbnRyeV9ibG9jayAqKXNyYzsKKwkJZC0+bWF4ID0gTlJfREVOVFJZX0lOX0JMT0NLOworCQlkLT5iaXRtYXAgPSAmdC0+ZGVudHJ5X2JpdG1hcDsKKwkJZC0+ZGVudHJ5ID0gdC0+ZGVudHJ5OworCQlkLT5maWxlbmFtZSA9IHQtPmZpbGVuYW1lOworCX0gZWxzZSB7CisJCXN0cnVjdCBmMmZzX2lubGluZV9kZW50cnkgKnQgPSAoc3RydWN0IGYyZnNfaW5saW5lX2RlbnRyeSAqKXNyYzsKKwkJZC0+bWF4ID0gTlJfSU5MSU5FX0RFTlRSWTsKKwkJZC0+Yml0bWFwID0gJnQtPmRlbnRyeV9iaXRtYXA7CisJCWQtPmRlbnRyeSA9IHQtPmRlbnRyeTsKKwkJZC0+ZmlsZW5hbWUgPSB0LT5maWxlbmFtZTsKKwl9Cit9CisKIC8qCiAgKiBYQVRUUl9OT0RFX09GRlNFVCBzdG9yZXMgeGF0dHJzIHRvIG9uZSBub2RlIGJsb2NrIHBlciBmaWxlIGtlZXBpbmcgLTEKICAqIGFzIGl0cyBub2RlIG9mZnNldCB0byBkaXN0aW5ndWlzaCBmcm9tIGluZGV4IG5vZGUgYmxvY2tzLgpAQCAtMjY5LDYgKzI5Nyw3IEBACiAJc3RydWN0IGV4dGVudF9pbmZvIGV4dDsJCS8qIGluLW1lbW9yeSBleHRlbnQgY2FjaGUgZW50cnkgKi8KIAlzdHJ1Y3QgZGlyX2lub2RlX2VudHJ5ICpkaXJ0eV9kaXI7CS8qIHRoZSBwb2ludGVyIG9mIGRpcnR5IGRpciAqLwogCisJc3RydWN0IHJhZGl4X3RyZWVfcm9vdCBpbm1lbV9yb290OwkvKiByYWRpeCB0cmVlIGZvciBpbm1lbSBwYWdlcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgaW5tZW1fcGFnZXM7CS8qIGlubWVtb3J5IHBhZ2VzIG1hbmFnZWQgYnkgZjJmcyAqLwogCXN0cnVjdCBtdXRleCBpbm1lbV9sb2NrOwkvKiBsb2NrIGZvciBpbm1lbW9yeSBwYWdlcyAqLwogfTsKQEAgLTMwMyw3ICszMzIsNyBAQAogCS8qIE5BVCBjYWNoZSBtYW5hZ2VtZW50ICovCiAJc3RydWN0IHJhZGl4X3RyZWVfcm9vdCBuYXRfcm9vdDsvKiByb290IG9mIHRoZSBuYXQgZW50cnkgY2FjaGUgKi8KIAlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290IG5hdF9zZXRfcm9vdDsvKiByb290IG9mIHRoZSBuYXQgc2V0IGNhY2hlICovCi0Jcndsb2NrX3QgbmF0X3RyZWVfbG9jazsJCS8qIHByb3RlY3QgbmF0X3RyZWVfbG9jayAqLworCXN0cnVjdCByd19zZW1hcGhvcmUgbmF0X3RyZWVfbG9jazsJLyogcHJvdGVjdCBuYXRfdHJlZV9sb2NrICovCiAJc3RydWN0IGxpc3RfaGVhZCBuYXRfZW50cmllczsJLyogY2FjaGVkIG5hdCBlbnRyeSBsaXN0IChjbGVhbikgKi8KIAl1bnNpZ25lZCBpbnQgbmF0X2NudDsJCS8qIHRoZSAjIG9mIGNhY2hlZCBuYXQgZW50cmllcyAqLwogCXVuc2lnbmVkIGludCBkaXJ0eV9uYXRfY250OwkvKiB0b3RhbCBudW0gb2YgbmF0IGVudHJpZXMgaW4gc2V0ICovCkBAIC00MzMsNiArNDYyLDcgQEAKIAlGMkZTX0RJUlRZX0RFTlRTLAogCUYyRlNfRElSVFlfTk9ERVMsCiAJRjJGU19ESVJUWV9NRVRBLAorCUYyRlNfSU5NRU1fUEFHRVMsCiAJTlJfQ09VTlRfVFlQRSwKIH07CiAKQEAgLTQ3MCw2ICs1MDAsMTQgQEAKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIGlvX3J3c2VtOwkvKiBibG9ja2luZyBvcCBmb3IgYmlvICovCiB9OwogCisvKiBmb3IgaW5uZXIgaW5vZGUgY2FjaGUgbWFuYWdlbWVudCAqLworc3RydWN0IGlub2RlX21hbmFnZW1lbnQgeworCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgaW5vX3Jvb3Q7CS8qIGlubyBlbnRyeSBhcnJheSAqLworCXNwaW5sb2NrX3QgaW5vX2xvY2s7CQkJLyogZm9yIGlubyBlbnRyeSBsb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCBpbm9fbGlzdDsJCS8qIGlub2RlIGxpc3QgaGVhZCAqLworCXVuc2lnbmVkIGxvbmcgaW5vX251bTsJCQkvKiBudW1iZXIgb2YgZW50cmllcyAqLworfTsKKwogc3RydWN0IGYyZnNfc2JfaW5mbyB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsJCQkvKiBwb2ludGVyIHRvIFZGUyBzdXBlciBibG9jayAqLwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc19wcm9jOwkJLyogcHJvYyBlbnRyeSAqLwpAQCAtNDg4LDcgKzUyNiw2IEBACiAJLyogZm9yIGJpbyBvcGVyYXRpb25zICovCiAJc3RydWN0IGYyZnNfYmlvX2luZm8gcmVhZF9pbzsJCQkvKiBmb3IgcmVhZCBiaW9zICovCiAJc3RydWN0IGYyZnNfYmlvX2luZm8gd3JpdGVfaW9bTlJfUEFHRV9UWVBFXTsJLyogZm9yIHdyaXRlIGJpb3MgKi8KLQlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdF9pbzsJCS8qIGZvciBjb21wbGV0aW9uIGJpb3MgKi8KIAogCS8qIGZvciBjaGVja3BvaW50ICovCiAJc3RydWN0IGYyZnNfY2hlY2twb2ludCAqY2twdDsJCS8qIHJhdyBjaGVja3BvaW50IHBvaW50ZXIgKi8KQEAgLTUwMCwxMyArNTM3LDkgQEAKIAlib29sIHBvcl9kb2luZzsJCQkJLyogcmVjb3ZlcnkgaXMgZG9pbmcgb3Igbm90ICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgY3Bfd2FpdDsKIAotCS8qIGZvciBpbm9kZSBtYW5hZ2VtZW50ICovCi0Jc3RydWN0IHJhZGl4X3RyZWVfcm9vdCBpbm9fcm9vdFtNQVhfSU5PX0VOVFJZXTsJLyogaW5vIGVudHJ5IGFycmF5ICovCi0Jc3BpbmxvY2tfdCBpbm9fbG9ja1tNQVhfSU5PX0VOVFJZXTsJCS8qIGZvciBpbm8gZW50cnkgbG9jayAqLwotCXN0cnVjdCBsaXN0X2hlYWQgaW5vX2xpc3RbTUFYX0lOT19FTlRSWV07CS8qIGlub2RlIGxpc3QgaGVhZCAqLworCXN0cnVjdCBpbm9kZV9tYW5hZ2VtZW50IGltW01BWF9JTk9fRU5UUlldOyAgICAgIC8qIG1hbmFnZSBpbm9kZSBjYWNoZSAqLwogCiAJLyogZm9yIG9ycGhhbiBpbm9kZSwgdXNlIDAndGggYXJyYXkgKi8KLQl1bnNpZ25lZCBpbnQgbl9vcnBoYW5zOwkJCS8qICMgb2Ygb3JwaGFuIGlub2RlcyAqLwogCXVuc2lnbmVkIGludCBtYXhfb3JwaGFuczsJCS8qIG1heCBvcnBoYW4gaW5vZGVzICovCiAKIAkvKiBmb3IgZGlyZWN0b3J5IGlub2RlIG1hbmFnZW1lbnQgKi8KQEAgLTU1Nyw3ICs1OTAsOCBAQAogCXVuc2lnbmVkIGludCBzZWdtZW50X2NvdW50WzJdOwkJLyogIyBvZiBhbGxvY2F0ZWQgc2VnbWVudHMgKi8KIAl1bnNpZ25lZCBpbnQgYmxvY2tfY291bnRbMl07CQkvKiAjIG9mIGFsbG9jYXRlZCBibG9ja3MgKi8KIAlpbnQgdG90YWxfaGl0X2V4dCwgcmVhZF9oaXRfZXh0OwkvKiBleHRlbnQgY2FjaGUgaGl0IHJhdGlvICovCi0JaW50IGlubGluZV9pbm9kZTsJCQkvKiAjIG9mIGlubGluZV9kYXRhIGlub2RlcyAqLworCWF0b21pY190IGlubGluZV9pbm9kZTsJCQkvKiAjIG9mIGlubGluZV9kYXRhIGlub2RlcyAqLworCWF0b21pY190IGlubGluZV9kaXI7CQkJLyogIyBvZiBpbmxpbmVfZGVudHJ5IGlub2RlcyAqLwogCWludCBiZ19nYzsJCQkJLyogYmFja2dyb3VuZCBnYyBjYWxscyAqLwogCXVuc2lnbmVkIGludCBuX2RpcnR5X2RpcnM7CQkvKiAjIG9mIGRpciBpbm9kZXMgKi8KICNlbmRpZgpAQCAtOTg4LDYgKzEwMjIsMTMgQEAKIAlyZXR1cm4gZW50cnk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBmMmZzX3JhZGl4X3RyZWVfaW5zZXJ0KHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsCisJCQkJdW5zaWduZWQgbG9uZyBpbmRleCwgdm9pZCAqaXRlbSkKK3sKKwl3aGlsZSAocmFkaXhfdHJlZV9pbnNlcnQocm9vdCwgaW5kZXgsIGl0ZW0pKQorCQljb25kX3Jlc2NoZWQoKTsKK30KKwogI2RlZmluZSBSQVdfSVNfSU5PREUocCkJKChwKS0+Zm9vdGVyLm5pZCA9PSAocCktPmZvb3Rlci5pbm8pCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBJU19JTk9ERShzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTEwMjAsNyArMTA2MSw3IEBACiAJcmV0dXJuIG1hc2sgJiAqYWRkcjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZjJmc19zZXRfYml0KHVuc2lnbmVkIGludCBuciwgY2hhciAqYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IGYyZnNfdGVzdF9hbmRfc2V0X2JpdCh1bnNpZ25lZCBpbnQgbnIsIGNoYXIgKmFkZHIpCiB7CiAJaW50IG1hc2s7CiAJaW50IHJldDsKQEAgLTEwMzIsNyArMTA3Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZjJmc19jbGVhcl9iaXQodW5zaWduZWQgaW50IG5yLCBjaGFyICphZGRyKQorc3RhdGljIGlubGluZSBpbnQgZjJmc190ZXN0X2FuZF9jbGVhcl9iaXQodW5zaWduZWQgaW50IG5yLCBjaGFyICphZGRyKQogewogCWludCBtYXNrOwogCWludCByZXQ7CkBAIC0xMDQ0LDYgKzEwODUsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZjJmc19jaGFuZ2VfYml0KHVuc2lnbmVkIGludCBuciwgY2hhciAqYWRkcikKK3sKKwlpbnQgbWFzazsKKworCWFkZHIgKz0gKG5yID4+IDMpOworCW1hc2sgPSAxIDw8ICg3IC0gKG5yICYgMHgwNykpOworCSphZGRyIF49IG1hc2s7Cit9CisKIC8qIHVzZWQgZm9yIGYyZnNfaW5vZGVfaW5mby0+ZmxhZ3MgKi8KIGVudW0gewogCUZJX05FV19JTk9ERSwJCS8qIGluZGljYXRlIG5ld2x5IGFsbG9jYXRlZCBpbm9kZSAqLwpAQCAtMTA1NywxMSArMTEwNywxMyBAQAogCUZJX05PX0VYVEVOVCwJCS8qIG5vdCB0byB1c2UgdGhlIGV4dGVudCBjYWNoZSAqLwogCUZJX0lOTElORV9YQVRUUiwJLyogdXNlZCBmb3IgaW5saW5lIHhhdHRyICovCiAJRklfSU5MSU5FX0RBVEEsCQkvKiB1c2VkIGZvciBpbmxpbmUgZGF0YSovCisJRklfSU5MSU5FX0RFTlRSWSwJLyogdXNlZCBmb3IgaW5saW5lIGRlbnRyeSAqLwogCUZJX0FQUEVORF9XUklURSwJLyogaW5vZGUgaGFzIGFwcGVuZGVkIGRhdGEgKi8KIAlGSV9VUERBVEVfV1JJVEUsCS8qIGlub2RlIGhhcyBpbi1wbGFjZS11cGRhdGUgZGF0YSAqLwogCUZJX05FRURfSVBVLAkJLyogdXNlZCBmb3IgaXB1IHBlciBmaWxlICovCiAJRklfQVRPTUlDX0ZJTEUsCQkvKiBpbmRpY2F0ZSBhdG9taWMgZmlsZSAqLwogCUZJX1ZPTEFUSUxFX0ZJTEUsCS8qIGluZGljYXRlIHZvbGF0aWxlIGZpbGUgKi8KKwlGSV9EQVRBX0VYSVNULAkJLyogaW5kaWNhdGUgZGF0YSBleGlzdHMgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5vZGVfZmxhZyhzdHJ1Y3QgZjJmc19pbm9kZV9pbmZvICpmaSwgaW50IGZsYWcpCkBAIC0xMDg3LDE1ICsxMTM5LDYgQEAKIAlzZXRfaW5vZGVfZmxhZyhmaSwgRklfQUNMX01PREUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjb25kX2NsZWFyX2lub2RlX2ZsYWcoc3RydWN0IGYyZnNfaW5vZGVfaW5mbyAqZmksIGludCBmbGFnKQotewotCWlmIChpc19pbm9kZV9mbGFnX3NldChmaSwgRklfQUNMX01PREUpKSB7Ci0JCWNsZWFyX2lub2RlX2ZsYWcoZmksIEZJX0FDTF9NT0RFKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2lubGluZV9pbmZvKHN0cnVjdCBmMmZzX2lub2RlX2luZm8gKmZpLAogCQkJCQlzdHJ1Y3QgZjJmc19pbm9kZSAqcmkpCiB7CkBAIC0xMTAzLDYgKzExNDYsMTAgQEAKIAkJc2V0X2lub2RlX2ZsYWcoZmksIEZJX0lOTElORV9YQVRUUik7CiAJaWYgKHJpLT5pX2lubGluZSAmIEYyRlNfSU5MSU5FX0RBVEEpCiAJCXNldF9pbm9kZV9mbGFnKGZpLCBGSV9JTkxJTkVfREFUQSk7CisJaWYgKHJpLT5pX2lubGluZSAmIEYyRlNfSU5MSU5FX0RFTlRSWSkKKwkJc2V0X2lub2RlX2ZsYWcoZmksIEZJX0lOTElORV9ERU5UUlkpOworCWlmIChyaS0+aV9pbmxpbmUgJiBGMkZTX0RBVEFfRVhJU1QpCisJCXNldF9pbm9kZV9mbGFnKGZpLCBGSV9EQVRBX0VYSVNUKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9yYXdfaW5saW5lKHN0cnVjdCBmMmZzX2lub2RlX2luZm8gKmZpLApAQCAtMTExNCw2ICsxMTYxLDEwIEBACiAJCXJpLT5pX2lubGluZSB8PSBGMkZTX0lOTElORV9YQVRUUjsKIAlpZiAoaXNfaW5vZGVfZmxhZ19zZXQoZmksIEZJX0lOTElORV9EQVRBKSkKIAkJcmktPmlfaW5saW5lIHw9IEYyRlNfSU5MSU5FX0RBVEE7CisJaWYgKGlzX2lub2RlX2ZsYWdfc2V0KGZpLCBGSV9JTkxJTkVfREVOVFJZKSkKKwkJcmktPmlfaW5saW5lIHw9IEYyRlNfSU5MSU5FX0RFTlRSWTsKKwlpZiAoaXNfaW5vZGVfZmxhZ19zZXQoZmksIEZJX0RBVEFfRVhJU1QpKQorCQlyaS0+aV9pbmxpbmUgfD0gRjJGU19EQVRBX0VYSVNUOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBmMmZzX2hhc19pbmxpbmVfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTExNDgsNiArMTE5OSwxNyBAQAogCXJldHVybiBpc19pbm9kZV9mbGFnX3NldChGMkZTX0koaW5vZGUpLCBGSV9JTkxJTkVfREFUQSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBmMmZzX2NsZWFyX2lubGluZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWNsZWFyX2lub2RlX2ZsYWcoRjJGU19JKGlub2RlKSwgRklfSU5MSU5FX0RBVEEpOworCWNsZWFyX2lub2RlX2ZsYWcoRjJGU19JKGlub2RlKSwgRklfREFUQV9FWElTVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGYyZnNfZXhpc3RfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBpc19pbm9kZV9mbGFnX3NldChGMkZTX0koaW5vZGUpLCBGSV9EQVRBX0VYSVNUKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGYyZnNfaXNfYXRvbWljX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gaXNfaW5vZGVfZmxhZ19zZXQoRjJGU19JKGlub2RlKSwgRklfQVRPTUlDX0ZJTEUpOwpAQCAtMTE2NCw2ICsxMjI2LDIzIEBACiAJcmV0dXJuICh2b2lkICopJihyaS0+aV9hZGRyWzFdKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZjJmc19oYXNfaW5saW5lX2RlbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBpc19pbm9kZV9mbGFnX3NldChGMkZTX0koaW5vZGUpLCBGSV9JTkxJTkVfREVOVFJZKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICppbmxpbmVfZGVudHJ5X2FkZHIoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGYyZnNfaW5vZGUgKnJpID0gRjJGU19JTk9ERShwYWdlKTsKKwlyZXR1cm4gKHZvaWQgKikmKHJpLT5pX2FkZHJbMV0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZjJmc19kZW50cnlfa3VubWFwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoIWYyZnNfaGFzX2lubGluZV9kZW50cnkoZGlyKSkKKwkJa3VubWFwKHBhZ2UpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBmMmZzX3JlYWRvbmx5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZOwpAQCAtMTIyNCw2ICsxMzAzLDE5IEBACiAvKgogICogZGlyLmMKICAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZjJmc19maWxldHlwZV90YWJsZVtGMkZTX0ZUX01BWF07Cit2b2lkIHNldF9kZV90eXBlKHN0cnVjdCBmMmZzX2Rpcl9lbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CitzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmZpbmRfdGFyZ2V0X2RlbnRyeShzdHJ1Y3QgcXN0ciAqLCBpbnQgKiwKKwkJCXN0cnVjdCBmMmZzX2RlbnRyeV9wdHIgKik7Citib29sIGYyZnNfZmlsbF9kZW50cmllcyhzdHJ1Y3QgZGlyX2NvbnRleHQgKiwgc3RydWN0IGYyZnNfZGVudHJ5X3B0ciAqLAorCQkJdW5zaWduZWQgaW50KTsKK3ZvaWQgZG9fbWFrZV9lbXB0eV9kaXIoc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLAorCQkJc3RydWN0IGYyZnNfZGVudHJ5X3B0ciAqKTsKK3N0cnVjdCBwYWdlICppbml0X2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKKwkJCWNvbnN0IHN0cnVjdCBxc3RyICosIHN0cnVjdCBwYWdlICopOwordm9pZCB1cGRhdGVfcGFyZW50X21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgaW50KTsKK2ludCByb29tX2Zvcl9maWxlbmFtZShjb25zdCB2b2lkICosIGludCwgaW50KTsKK3ZvaWQgZjJmc19kcm9wX25saW5rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKik7CiBzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmYyZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKiwKIAkJCQkJCQlzdHJ1Y3QgcGFnZSAqKik7CiBzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmYyZnNfcGFyZW50X2RpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKiopOwpAQCAtMTIzMiw3ICsxMzI0LDggQEAKIAkJCQlzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBpbnQgdXBkYXRlX2RlbnRfaW5vZGUoc3RydWN0IGlub2RlICosIGNvbnN0IHN0cnVjdCBxc3RyICopOwogaW50IF9fZjJmc19hZGRfbGluayhzdHJ1Y3QgaW5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgc3RydWN0IGlub2RlICopOwotdm9pZCBmMmZzX2RlbGV0ZV9lbnRyeShzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKiwgc3RydWN0IHBhZ2UgKiwgc3RydWN0IGlub2RlICopOwordm9pZCBmMmZzX2RlbGV0ZV9lbnRyeShzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKiwgc3RydWN0IHBhZ2UgKiwgc3RydWN0IGlub2RlICosCisJCQkJCQkJc3RydWN0IGlub2RlICopOwogaW50IGYyZnNfZG9fdG1wZmlsZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOwogaW50IGYyZnNfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOwogYm9vbCBmMmZzX2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUgKik7CkBAIC0xMjk2LDYgKzEzODksNyBAQAogICogc2VnbWVudC5jCiAgKi8KIHZvaWQgcmVnaXN0ZXJfaW5tZW1fcGFnZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKik7Cit2b2lkIGludmFsaWRhdGVfaW5tZW1fcGFnZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKik7CiB2b2lkIGNvbW1pdF9pbm1lbV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKiwgYm9vbCk7CiB2b2lkIGYyZnNfYmFsYW5jZV9mcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICopOwogdm9pZCBmMmZzX2JhbGFuY2VfZnNfYmcoc3RydWN0IGYyZnNfc2JfaW5mbyAqKTsKQEAgLTEzMzcsOCArMTQzMSw4IEBACiAgKi8KIHN0cnVjdCBwYWdlICpncmFiX21ldGFfcGFnZShzdHJ1Y3QgZjJmc19zYl9pbmZvICosIHBnb2ZmX3QpOwogc3RydWN0IHBhZ2UgKmdldF9tZXRhX3BhZ2Uoc3RydWN0IGYyZnNfc2JfaW5mbyAqLCBwZ29mZl90KTsKLXN0cnVjdCBwYWdlICpnZXRfbWV0YV9wYWdlX3JhKHN0cnVjdCBmMmZzX3NiX2luZm8gKiwgcGdvZmZfdCk7CiBpbnQgcmFfbWV0YV9wYWdlcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICosIGJsb2NrX3QsIGludCwgaW50KTsKK3ZvaWQgcmFfbWV0YV9wYWdlc19jb25kKHN0cnVjdCBmMmZzX3NiX2luZm8gKiwgcGdvZmZfdCk7CiBsb25nIHN5bmNfbWV0YV9wYWdlcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICosIGVudW0gcGFnZV90eXBlLCBsb25nKTsKIHZvaWQgYWRkX2RpcnR5X2lub2RlKHN0cnVjdCBmMmZzX3NiX2luZm8gKiwgbmlkX3QsIGludCB0eXBlKTsKIHZvaWQgcmVtb3ZlX2RpcnR5X2lub2RlKHN0cnVjdCBmMmZzX3NiX2luZm8gKiwgbmlkX3QsIGludCB0eXBlKTsKQEAgLTE0MDUsNyArMTQ5OSw3IEBACiAJaW50IG5kaXJ0eV9ub2RlLCBuZGlydHlfZGVudCwgbmRpcnR5X2RpcnMsIG5kaXJ0eV9tZXRhOwogCWludCBuYXRzLCBzaXRzLCBmbmlkczsKIAlpbnQgdG90YWxfY291bnQsIHV0aWxpemF0aW9uOwotCWludCBiZ19nYywgaW5saW5lX2lub2RlOworCWludCBiZ19nYywgaW5saW5lX2lub2RlLCBpbmxpbmVfZGlyLCBpbm1lbV9wYWdlczsKIAl1bnNpZ25lZCBpbnQgdmFsaWRfY291bnQsIHZhbGlkX25vZGVfY291bnQsIHZhbGlkX2lub2RlX2NvdW50OwogCXVuc2lnbmVkIGludCBiaW1vZGFsLCBhdmdfdmJsb2NrczsKIAlpbnQgdXRpbF9mcmVlLCB1dGlsX3ZhbGlkLCB1dGlsX2ludmFsaWQ7CkBAIC0xNDM4LDE0ICsxNTMyLDIzIEBACiAjZGVmaW5lIHN0YXRfaW5jX2lubGluZV9pbm9kZShpbm9kZSkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCWlmIChmMmZzX2hhc19pbmxpbmVfZGF0YShpbm9kZSkpCQkJXAotCQkJKChGMkZTX0lfU0IoaW5vZGUpKS0+aW5saW5lX2lub2RlKyspOwkJXAorCQkJKGF0b21pY19pbmMoJkYyRlNfSV9TQihpbm9kZSktPmlubGluZV9pbm9kZSkpOwlcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgc3RhdF9kZWNfaW5saW5lX2lub2RlKGlub2RlKQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSkJCQlcCi0JCQkoKEYyRlNfSV9TQihpbm9kZSkpLT5pbmxpbmVfaW5vZGUtLSk7CQlcCisJCQkoYXRvbWljX2RlYygmRjJGU19JX1NCKGlub2RlKS0+aW5saW5lX2lub2RlKSk7CVwKIAl9IHdoaWxlICgwKQotCisjZGVmaW5lIHN0YXRfaW5jX2lubGluZV9kaXIoaW5vZGUpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoZjJmc19oYXNfaW5saW5lX2RlbnRyeShpbm9kZSkpCQkJXAorCQkJKGF0b21pY19pbmMoJkYyRlNfSV9TQihpbm9kZSktPmlubGluZV9kaXIpKTsJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIHN0YXRfZGVjX2lubGluZV9kaXIoaW5vZGUpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoZjJmc19oYXNfaW5saW5lX2RlbnRyeShpbm9kZSkpCQkJXAorCQkJKGF0b21pY19kZWMoJkYyRlNfSV9TQihpbm9kZSktPmlubGluZV9kaXIpKTsJXAorCX0gd2hpbGUgKDApCiAjZGVmaW5lIHN0YXRfaW5jX3NlZ190eXBlKHNiaSwgY3Vyc2VnKQkJCQkJXAogCQkoKHNiaSktPnNlZ21lbnRfY291bnRbKGN1cnNlZyktPmFsbG9jX3R5cGVdKyspCiAjZGVmaW5lIHN0YXRfaW5jX2Jsb2NrX2NvdW50KHNiaSwgY3Vyc2VnKQkJCQlcCkBAIC0xNDkyLDYgKzE1OTUsOCBAQAogI2RlZmluZSBzdGF0X2luY19yZWFkX2hpdChzYikKICNkZWZpbmUgc3RhdF9pbmNfaW5saW5lX2lub2RlKGlub2RlKQogI2RlZmluZSBzdGF0X2RlY19pbmxpbmVfaW5vZGUoaW5vZGUpCisjZGVmaW5lIHN0YXRfaW5jX2lubGluZV9kaXIoaW5vZGUpCisjZGVmaW5lIHN0YXRfZGVjX2lubGluZV9kaXIoaW5vZGUpCiAjZGVmaW5lIHN0YXRfaW5jX3NlZ190eXBlKHNiaSwgY3Vyc2VnKQogI2RlZmluZSBzdGF0X2luY19ibG9ja19jb3VudChzYmksIGN1cnNlZykKICNkZWZpbmUgc3RhdF9pbmNfc2VnX2NvdW50KHNpLCB0eXBlKQpAQCAtMTUxOSw5ICsxNjI0LDIwIEBACiAgKiBpbmxpbmUuYwogICovCiBib29sIGYyZnNfbWF5X2lubGluZShzdHJ1Y3QgaW5vZGUgKik7Cit2b2lkIHJlYWRfaW5saW5lX2RhdGEoc3RydWN0IHBhZ2UgKiwgc3RydWN0IHBhZ2UgKik7CiBpbnQgZjJmc19yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKLWludCBmMmZzX2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICosIHBnb2ZmX3QsIHN0cnVjdCBwYWdlICopOwotaW50IGYyZnNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGludCk7Ci12b2lkIHRydW5jYXRlX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqLCB1NjQpOworaW50IGYyZnNfY29udmVydF9pbmxpbmVfcGFnZShzdHJ1Y3QgZG5vZGVfb2ZfZGF0YSAqLCBzdHJ1Y3QgcGFnZSAqKTsKK2ludCBmMmZzX2NvbnZlcnRfaW5saW5lX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKK2ludCBmMmZzX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKK3ZvaWQgdHJ1bmNhdGVfaW5saW5lX2RhdGEoc3RydWN0IHBhZ2UgKiwgdTY0KTsKIGJvb2wgcmVjb3Zlcl9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKik7CitzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmZpbmRfaW5faW5saW5lX2RpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKiwKKwkJCQkJCQlzdHJ1Y3QgcGFnZSAqKik7CitzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmYyZnNfcGFyZW50X2lubGluZV9kaXIoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICoqKTsKK2ludCBtYWtlX2VtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICopOworaW50IGYyZnNfYWRkX2lubGluZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgc3RydWN0IGlub2RlICopOwordm9pZCBmMmZzX2RlbGV0ZV9pbmxpbmVfZW50cnkoc3RydWN0IGYyZnNfZGlyX2VudHJ5ICosIHN0cnVjdCBwYWdlICosCisJCQkJCQlzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOworYm9vbCBmMmZzX2VtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICopOworaW50IGYyZnNfcmVhZF9pbmxpbmVfZGlyKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZjJmcy9maWxlLmMgYi9mcy9mMmZzL2ZpbGUuYwppbmRleCA4ZTY4YmI2Li4zYzI3ZTBlIDEwMDY0NAotLS0gYS9mcy9mMmZzL2ZpbGUuYworKysgYi9mcy9mMmZzL2ZpbGUuYwpAQCAtNDEsMTggKzQxLDE4IEBACiAKIAlzYl9zdGFydF9wYWdlZmF1bHQoaW5vZGUtPmlfc2IpOwogCi0JLyogZm9yY2UgdG8gY29udmVydCB3aXRoIG5vcm1hbCBkYXRhIGluZGljZXMgKi8KLQllcnIgPSBmMmZzX2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUsIE1BWF9JTkxJTkVfREFUQSArIDEsIHBhZ2UpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCWYyZnNfYnVnX29uKHNiaSwgZjJmc19oYXNfaW5saW5lX2RhdGEoaW5vZGUpKTsKIAogCS8qIGJsb2NrIGFsbG9jYXRpb24gKi8KIAlmMmZzX2xvY2tfb3Aoc2JpKTsKIAlzZXRfbmV3X2Rub2RlKCZkbiwgaW5vZGUsIE5VTEwsIE5VTEwsIDApOwogCWVyciA9IGYyZnNfcmVzZXJ2ZV9ibG9jaygmZG4sIHBhZ2UtPmluZGV4KTsKLQlmMmZzX3VubG9ja19vcChzYmkpOwotCWlmIChlcnIpCisJaWYgKGVycikgeworCQlmMmZzX3VubG9ja19vcChzYmkpOwogCQlnb3RvIG91dDsKKwl9CisJZjJmc19wdXRfZG5vZGUoJmRuKTsKKwlmMmZzX3VubG9ja19vcChzYmkpOwogCiAJZmlsZV91cGRhdGVfdGltZSh2bWEtPnZtX2ZpbGUpOwogCWxvY2tfcGFnZShwYWdlKTsKQEAgLTEzMCwxMCArMTMwLDQ1IEBACiAJCW5lZWRfY3AgPSB0cnVlOwogCWVsc2UgaWYgKEYyRlNfSShpbm9kZSktPnhhdHRyX3ZlciA9PSBjdXJfY3BfdmVyc2lvbihGMkZTX0NLUFQoc2JpKSkpCiAJCW5lZWRfY3AgPSB0cnVlOworCWVsc2UgaWYgKHRlc3Rfb3B0KHNiaSwgRkFTVEJPT1QpKQorCQluZWVkX2NwID0gdHJ1ZTsKKwllbHNlIGlmIChzYmktPmFjdGl2ZV9sb2dzID09IDIpCisJCW5lZWRfY3AgPSB0cnVlOwogCiAJcmV0dXJuIG5lZWRfY3A7CiB9CiAKK3N0YXRpYyBib29sIG5lZWRfaW5vZGVfcGFnZV91cGRhdGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBuaWRfdCBpbm8pCit7CisJc3RydWN0IHBhZ2UgKmkgPSBmaW5kX2dldF9wYWdlKE5PREVfTUFQUElORyhzYmkpLCBpbm8pOworCWJvb2wgcmV0ID0gZmFsc2U7CisJLyogQnV0IHdlIG5lZWQgdG8gYXZvaWQgdGhhdCB0aGVyZSBhcmUgc29tZSBpbm9kZSB1cGRhdGVzICovCisJaWYgKChpICYmIFBhZ2VEaXJ0eShpKSkgfHwgbmVlZF9pbm9kZV9ibG9ja191cGRhdGUoc2JpLCBpbm8pKQorCQlyZXQgPSB0cnVlOworCWYyZnNfcHV0X3BhZ2UoaSwgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdHJ5X3RvX2ZpeF9waW5vKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGYyZnNfaW5vZGVfaW5mbyAqZmkgPSBGMkZTX0koaW5vZGUpOworCW5pZF90IHBpbm87CisKKwlkb3duX3dyaXRlKCZmaS0+aV9zZW0pOworCWZpLT54YXR0cl92ZXIgPSAwOworCWlmIChmaWxlX3dyb25nX3Bpbm8oaW5vZGUpICYmIGlub2RlLT5pX25saW5rID09IDEgJiYKKwkJCWdldF9wYXJlbnRfaW5vKGlub2RlLCAmcGlubykpIHsKKwkJZmktPmlfcGlubyA9IHBpbm87CisJCWZpbGVfZ290X3Bpbm8oaW5vZGUpOworCQl1cF93cml0ZSgmZmktPmlfc2VtKTsKKworCQltYXJrX2lub2RlX2RpcnR5X3N5bmMoaW5vZGUpOworCQlmMmZzX3dyaXRlX2lub2RlKGlub2RlLCBOVUxMKTsKKwl9IGVsc2UgeworCQl1cF93cml0ZSgmZmktPmlfc2VtKTsKKwl9Cit9CisKIGludCBmMmZzX3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKQEAgLTE2NCwxOSArMTk5LDIxIEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJLyogaWYgdGhlIGlub2RlIGlzIGRpcnR5LCBsZXQncyByZWNvdmVyIGFsbCB0aGUgdGltZSAqLworCWlmICghZGF0YXN5bmMgJiYgaXNfaW5vZGVfZmxhZ19zZXQoZmksIEZJX0RJUlRZX0lOT0RFKSkgeworCQl1cGRhdGVfaW5vZGVfcGFnZShpbm9kZSk7CisJCWdvdG8gZ29fd3JpdGU7CisJfQorCiAJLyoKIAkgKiBpZiB0aGVyZSBpcyBubyB3cml0dGVuIGRhdGEsIGRvbid0IHdhc3RlIHRpbWUgdG8gd3JpdGUgcmVjb3ZlcnkgaW5mby4KIAkgKi8KIAlpZiAoIWlzX2lub2RlX2ZsYWdfc2V0KGZpLCBGSV9BUFBFTkRfV1JJVEUpICYmCiAJCQkhZXhpc3Rfd3JpdHRlbl9kYXRhKHNiaSwgaW5vLCBBUFBFTkRfSU5PKSkgewotCQlzdHJ1Y3QgcGFnZSAqaSA9IGZpbmRfZ2V0X3BhZ2UoTk9ERV9NQVBQSU5HKHNiaSksIGlubyk7CiAKLQkJLyogQnV0IHdlIG5lZWQgdG8gYXZvaWQgdGhhdCB0aGVyZSBhcmUgc29tZSBpbm9kZSB1cGRhdGVzICovCi0JCWlmICgoaSAmJiBQYWdlRGlydHkoaSkpIHx8IG5lZWRfaW5vZGVfYmxvY2tfdXBkYXRlKHNiaSwgaW5vKSkgewotCQkJZjJmc19wdXRfcGFnZShpLCAwKTsKKwkJLyogaXQgbWF5IGNhbGwgd3JpdGVfaW5vZGUganVzdCBwcmlvciB0byBmc3luYyAqLworCQlpZiAobmVlZF9pbm9kZV9wYWdlX3VwZGF0ZShzYmksIGlubykpCiAJCQlnb3RvIGdvX3dyaXRlOwotCQl9Ci0JCWYyZnNfcHV0X3BhZ2UoaSwgMCk7CiAKIAkJaWYgKGlzX2lub2RlX2ZsYWdfc2V0KGZpLCBGSV9VUERBVEVfV1JJVEUpIHx8CiAJCQkJZXhpc3Rfd3JpdHRlbl9kYXRhKHNiaSwgaW5vLCBVUERBVEVfSU5PKSkKQEAgLTE5Niw0OSArMjMzLDM2IEBACiAJdXBfcmVhZCgmZmktPmlfc2VtKTsKIAogCWlmIChuZWVkX2NwKSB7Ci0JCW5pZF90IHBpbm87Ci0KIAkJLyogYWxsIHRoZSBkaXJ0eSBub2RlIHBhZ2VzIHNob3VsZCBiZSBmbHVzaGVkIGZvciBQT1IgKi8KIAkJcmV0ID0gZjJmc19zeW5jX2ZzKGlub2RlLT5pX3NiLCAxKTsKIAotCQlkb3duX3dyaXRlKCZmaS0+aV9zZW0pOwotCQlGMkZTX0koaW5vZGUpLT54YXR0cl92ZXIgPSAwOwotCQlpZiAoZmlsZV93cm9uZ19waW5vKGlub2RlKSAmJiBpbm9kZS0+aV9ubGluayA9PSAxICYmCi0JCQkJCWdldF9wYXJlbnRfaW5vKGlub2RlLCAmcGlubykpIHsKLQkJCUYyRlNfSShpbm9kZSktPmlfcGlubyA9IHBpbm87Ci0JCQlmaWxlX2dvdF9waW5vKGlub2RlKTsKLQkJCXVwX3dyaXRlKCZmaS0+aV9zZW0pOwotCQkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKLQkJCXJldCA9IGYyZnNfd3JpdGVfaW5vZGUoaW5vZGUsIE5VTEwpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dDsKLQkJfSBlbHNlIHsKLQkJCXVwX3dyaXRlKCZmaS0+aV9zZW0pOwotCQl9Ci0JfSBlbHNlIHsKLXN5bmNfbm9kZXM6Ci0JCXN5bmNfbm9kZV9wYWdlcyhzYmksIGlubywgJndiYyk7Ci0KLQkJaWYgKG5lZWRfaW5vZGVfYmxvY2tfdXBkYXRlKHNiaSwgaW5vKSkgewotCQkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKLQkJCXJldCA9IGYyZnNfd3JpdGVfaW5vZGUoaW5vZGUsIE5VTEwpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dDsKLQkJCWdvdG8gc3luY19ub2RlczsKLQkJfQotCi0JCXJldCA9IHdhaXRfb25fbm9kZV9wYWdlc193cml0ZWJhY2soc2JpLCBpbm8pOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0KLQkJLyogb25jZSByZWNvdmVyeSBpbmZvIGlzIHdyaXR0ZW4sIGRvbid0IG5lZWQgdG8gdGFjayB0aGlzICovCi0JCXJlbW92ZV9kaXJ0eV9pbm9kZShzYmksIGlubywgQVBQRU5EX0lOTyk7Ci0JCWNsZWFyX2lub2RlX2ZsYWcoZmksIEZJX0FQUEVORF9XUklURSk7Ci1mbHVzaF9vdXQ6Ci0JCXJlbW92ZV9kaXJ0eV9pbm9kZShzYmksIGlubywgVVBEQVRFX0lOTyk7Ci0JCWNsZWFyX2lub2RlX2ZsYWcoZmksIEZJX1VQREFURV9XUklURSk7Ci0JCXJldCA9IGYyZnNfaXNzdWVfZmx1c2goRjJGU19JX1NCKGlub2RlKSk7CisJCS8qCisJCSAqIFdlJ3ZlIHNlY3VyZWQgY29uc2lzdGVuY3kgdGhyb3VnaCBzeW5jX2ZzLiBGb2xsb3dpbmcgcGlubworCQkgKiB3aWxsIGJlIHVzZWQgb25seSBmb3IgZnN5bmNlZCBpbm9kZXMgYWZ0ZXIgY2hlY2twb2ludC4KKwkJICovCisJCXRyeV90b19maXhfcGlubyhpbm9kZSk7CisJCWdvdG8gb3V0OwogCX0KK3N5bmNfbm9kZXM6CisJc3luY19ub2RlX3BhZ2VzKHNiaSwgaW5vLCAmd2JjKTsKKworCWlmIChuZWVkX2lub2RlX2Jsb2NrX3VwZGF0ZShzYmksIGlubykpIHsKKwkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKKwkJZjJmc193cml0ZV9pbm9kZShpbm9kZSwgTlVMTCk7CisJCWdvdG8gc3luY19ub2RlczsKKwl9CisKKwlyZXQgPSB3YWl0X29uX25vZGVfcGFnZXNfd3JpdGViYWNrKHNiaSwgaW5vKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIG9uY2UgcmVjb3ZlcnkgaW5mbyBpcyB3cml0dGVuLCBkb24ndCBuZWVkIHRvIHRhY2sgdGhpcyAqLworCXJlbW92ZV9kaXJ0eV9pbm9kZShzYmksIGlubywgQVBQRU5EX0lOTyk7CisJY2xlYXJfaW5vZGVfZmxhZyhmaSwgRklfQVBQRU5EX1dSSVRFKTsKK2ZsdXNoX291dDoKKwlyZW1vdmVfZGlydHlfaW5vZGUoc2JpLCBpbm8sIFVQREFURV9JTk8pOworCWNsZWFyX2lub2RlX2ZsYWcoZmksIEZJX1VQREFURV9XUklURSk7CisJcmV0ID0gZjJmc19pc3N1ZV9mbHVzaChzYmkpOwogb3V0OgogCXRyYWNlX2YyZnNfc3luY19maWxlX2V4aXQoaW5vZGUsIG5lZWRfY3AsIGRhdGFzeW5jLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC0yOTYsNyArMzIwLDcgQEAKIAkJZ290byBmYWlsOwogCiAJLyogaGFuZGxlIGlubGluZSBkYXRhIGNhc2UgKi8KLQlpZiAoZjJmc19oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7CisJaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSB8fCBmMmZzX2hhc19pbmxpbmVfZGVudHJ5KGlub2RlKSkgewogCQlpZiAod2hlbmNlID09IFNFRUtfSE9MRSkKIAkJCWRhdGFfb2ZzID0gaXNpemU7CiAJCWdvdG8gZm91bmQ7CkBAIC0zNzQsNiArMzk4LDE1IEBACiAKIHN0YXRpYyBpbnQgZjJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOworCisJLyogd2UgZG9uJ3QgbmVlZCB0byB1c2UgaW5saW5lX2RhdGEgc3RyaWN0bHkgKi8KKwlpZiAoZjJmc19oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7CisJCWludCBlcnIgPSBmMmZzX2NvbnZlcnRfaW5saW5lX2lub2RlKGlub2RlKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCiAJZmlsZV9hY2Nlc3NlZChmaWxlKTsKIAl2bWEtPnZtX29wcyA9ICZmMmZzX2ZpbGVfdm1fb3BzOwogCXJldHVybiAwOwpAQCAtNDE1LDIwICs0NDgsMTcgQEAKIAl0cnVuY2F0ZV9kYXRhX2Jsb2Nrc19yYW5nZShkbiwgQUREUlNfUEVSX0JMT0NLKTsKIH0KIAotc3RhdGljIHZvaWQgdHJ1bmNhdGVfcGFydGlhbF9kYXRhX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGZyb20pCitzdGF0aWMgaW50IHRydW5jYXRlX3BhcnRpYWxfZGF0YV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBmcm9tKQogewogCXVuc2lnbmVkIG9mZnNldCA9IGZyb20gJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlpZiAoZjJmc19oYXNfaW5saW5lX2RhdGEoaW5vZGUpKQotCQlyZXR1cm4gdHJ1bmNhdGVfaW5saW5lX2RhdGEoaW5vZGUsIGZyb20pOwotCiAJaWYgKCFvZmZzZXQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlwYWdlID0gZmluZF9kYXRhX3BhZ2UoaW5vZGUsIGZyb20gPj4gUEFHRV9DQUNIRV9TSElGVCwgZmFsc2UpOwogCWlmIChJU19FUlIocGFnZSkpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlsb2NrX3BhZ2UocGFnZSk7CiAJaWYgKHVubGlrZWx5KCFQYWdlVXB0b2RhdGUocGFnZSkgfHwKQEAgLTQzOCw5ICs0NjgsOSBAQAogCWYyZnNfd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlLCBEQVRBKTsKIAl6ZXJvX3VzZXIocGFnZSwgb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUgLSBvZmZzZXQpOwogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCiBvdXQ6CiAJZjJmc19wdXRfcGFnZShwYWdlLCAxKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHRydW5jYXRlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZnJvbSwgYm9vbCBsb2NrKQpAQCAtNDUwLDI3ICs0ODAsMzMgQEAKIAlzdHJ1Y3QgZG5vZGVfb2ZfZGF0YSBkbjsKIAlwZ29mZl90IGZyZWVfZnJvbTsKIAlpbnQgY291bnQgPSAwLCBlcnIgPSAwOworCXN0cnVjdCBwYWdlICppcGFnZTsKIAogCXRyYWNlX2YyZnNfdHJ1bmNhdGVfYmxvY2tzX2VudGVyKGlub2RlLCBmcm9tKTsKIAotCWlmIChmMmZzX2hhc19pbmxpbmVfZGF0YShpbm9kZSkpCi0JCWdvdG8gZG9uZTsKLQogCWZyZWVfZnJvbSA9IChwZ29mZl90KQotCQkJKChmcm9tICsgYmxvY2tzaXplIC0gMSkgPj4gKHNiaS0+bG9nX2Jsb2Nrc2l6ZSkpOworCQkoKGZyb20gKyBibG9ja3NpemUgLSAxKSA+PiAoc2JpLT5sb2dfYmxvY2tzaXplKSk7CiAKIAlpZiAobG9jaykKIAkJZjJmc19sb2NrX29wKHNiaSk7CiAKLQlzZXRfbmV3X2Rub2RlKCZkbiwgaW5vZGUsIE5VTEwsIE5VTEwsIDApOworCWlwYWdlID0gZ2V0X25vZGVfcGFnZShzYmksIGlub2RlLT5pX2lubyk7CisJaWYgKElTX0VSUihpcGFnZSkpIHsKKwkJZXJyID0gUFRSX0VSUihpcGFnZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChmMmZzX2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHsKKwkJZjJmc19wdXRfcGFnZShpcGFnZSwgMSk7CisJCWdvdG8gb3V0OworCX0KKworCXNldF9uZXdfZG5vZGUoJmRuLCBpbm9kZSwgaXBhZ2UsIE5VTEwsIDApOwogCWVyciA9IGdldF9kbm9kZV9vZl9kYXRhKCZkbiwgZnJlZV9mcm9tLCBMT09LVVBfTk9ERSk7CiAJaWYgKGVycikgewogCQlpZiAoZXJyID09IC1FTk9FTlQpCiAJCQlnb3RvIGZyZWVfbmV4dDsKLQkJaWYgKGxvY2spCi0JCQlmMmZzX3VubG9ja19vcChzYmkpOwotCQl0cmFjZV9mMmZzX3RydW5jYXRlX2Jsb2Nrc19leGl0KGlub2RlLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAl9CiAKIAljb3VudCA9IEFERFJTX1BFUl9QQUdFKGRuLm5vZGVfcGFnZSwgRjJGU19JKGlub2RlKSk7CkBAIC00ODYsMTEgKzUyMiwxMyBAQAogCWYyZnNfcHV0X2Rub2RlKCZkbik7CiBmcmVlX25leHQ6CiAJZXJyID0gdHJ1bmNhdGVfaW5vZGVfYmxvY2tzKGlub2RlLCBmcmVlX2Zyb20pOworb3V0OgogCWlmIChsb2NrKQogCQlmMmZzX3VubG9ja19vcChzYmkpOwotZG9uZToKKwogCS8qIGxhc3RseSB6ZXJvIG91dCB0aGUgZmlyc3QgZGF0YSBwYWdlICovCi0JdHJ1bmNhdGVfcGFydGlhbF9kYXRhX3BhZ2UoaW5vZGUsIGZyb20pOworCWlmICghZXJyKQorCQllcnIgPSB0cnVuY2F0ZV9wYXJ0aWFsX2RhdGFfcGFnZShpbm9kZSwgZnJvbSk7CiAKIAl0cmFjZV9mMmZzX3RydW5jYXRlX2Jsb2Nrc19leGl0KGlub2RlLCBlcnIpOwogCXJldHVybiBlcnI7CkBAIC01MDQsNiArNTQyLDEyIEBACiAKIAl0cmFjZV9mMmZzX3RydW5jYXRlKGlub2RlKTsKIAorCS8qIHdlIHNob3VsZCBjaGVjayBpbmxpbmVfZGF0YSBzaXplICovCisJaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSAmJiAhZjJmc19tYXlfaW5saW5lKGlub2RlKSkgeworCQlpZiAoZjJmc19jb252ZXJ0X2lubGluZV9pbm9kZShpbm9kZSkpCisJCQlyZXR1cm47CisJfQorCiAJaWYgKCF0cnVuY2F0ZV9ibG9ja3MoaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSwgdHJ1ZSkpIHsKIAkJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CkBAIC01NjEsMTAgKzYwNSw2IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKLQkJZXJyID0gZjJmc19jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlLCBhdHRyLT5pYV9zaXplLCBOVUxMKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KIAkJaWYgKGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CiAJCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKIAkJCWYyZnNfdHJ1bmNhdGUoaW5vZGUpOwpAQCAtNjY1LDkgKzcwNSwxMSBAQAogCWlmIChvZmZzZXQgPj0gaW5vZGUtPmlfc2l6ZSkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGYyZnNfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSwgTUFYX0lOTElORV9EQVRBICsgMSwgTlVMTCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpZiAoZjJmc19oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7CisJCXJldCA9IGYyZnNfY29udmVydF9pbmxpbmVfaW5vZGUoaW5vZGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CiAKIAlwZ19zdGFydCA9ICgodW5zaWduZWQgbG9uZyBsb25nKSBvZmZzZXQpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJcGdfZW5kID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpIG9mZnNldCArIGxlbikgPj4gUEFHRV9DQUNIRV9TSElGVDsKQEAgLTcyMSw5ICs3NjMsMTEgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZjJmc19jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlLCBvZmZzZXQgKyBsZW4sIE5VTEwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSkgeworCQlyZXQgPSBmMmZzX2NvbnZlcnRfaW5saW5lX2lub2RlKGlub2RlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJcGdfc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcgbG9uZykgb2Zmc2V0KSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCXBnX2VuZCA9ICgodW5zaWduZWQgbG9uZyBsb25nKSBvZmZzZXQgKyBsZW4pID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CkBAIC04NzQsNyArOTE4LDE1IEBACiAKIAlzZXRfaW5vZGVfZmxhZyhGMkZTX0koaW5vZGUpLCBGSV9BVE9NSUNfRklMRSk7CiAKLQlyZXR1cm4gZjJmc19jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlLCBNQVhfSU5MSU5FX0RBVEEgKyAxLCBOVUxMKTsKKwlyZXR1cm4gZjJmc19jb252ZXJ0X2lubGluZV9pbm9kZShpbm9kZSk7Cit9CisKK3N0YXRpYyBpbnQgZjJmc19yZWxlYXNlX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJLyogc29tZSByZW1haW5lZCBhdG9taWMgcGFnZXMgc2hvdWxkIGRpc2NhcmRlZCAqLworCWlmIChmMmZzX2lzX2F0b21pY19maWxlKGlub2RlKSB8fCBmMmZzX2lzX3ZvbGF0aWxlX2ZpbGUoaW5vZGUpKQorCQljb21taXRfaW5tZW1fcGFnZXMoaW5vZGUsIHRydWUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGYyZnNfaW9jX2NvbW1pdF9hdG9taWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHApCkBAIC05MDgsNyArOTYwLDggQEAKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAlzZXRfaW5vZGVfZmxhZyhGMkZTX0koaW5vZGUpLCBGSV9WT0xBVElMRV9GSUxFKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiBmMmZzX2NvbnZlcnRfaW5saW5lX2lub2RlKGlub2RlKTsKIH0KIAogc3RhdGljIGludCBmMmZzX2lvY19maXRyaW0oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtOTg1LDYgKzEwMzgsNyBAQAogCS5yZWFkX2l0ZXIJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAogCS53cml0ZV9pdGVyCT0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsCiAJLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCisJLnJlbGVhc2UJPSBmMmZzX3JlbGVhc2VfZmlsZSwKIAkubW1hcAkJPSBmMmZzX2ZpbGVfbW1hcCwKIAkuZnN5bmMJCT0gZjJmc19zeW5jX2ZpbGUsCiAJLmZhbGxvY2F0ZQk9IGYyZnNfZmFsbG9jYXRlLApkaWZmIC0tZ2l0IGEvZnMvZjJmcy9nYy5jIGIvZnMvZjJmcy9nYy5jCmluZGV4IDJhOGY0YWMuLmVlYzA5MzMgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvZ2MuYworKysgYi9mcy9mMmZzL2djLmMKQEAgLTk2LDggKzk2LDYgQEAKIAlkZXZfdCBkZXYgPSBzYmktPnNiLT5zX2JkZXYtPmJkX2RldjsKIAlpbnQgZXJyID0gMDsKIAotCWlmICghdGVzdF9vcHQoc2JpLCBCR19HQykpCi0JCWdvdG8gb3V0OwogCWdjX3RoID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGYyZnNfZ2Nfa3RocmVhZCksIEdGUF9LRVJORUwpOwogCWlmICghZ2NfdGgpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTM0MCwzNCArMzM4LDM5IEBACiAJLmdldF92aWN0aW0gPSBnZXRfdmljdGltX2J5X2RlZmF1bHQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlub2RlICpmaW5kX2djX2lub2RlKG5pZF90IGlubywgc3RydWN0IGxpc3RfaGVhZCAqaWxpc3QpCitzdGF0aWMgc3RydWN0IGlub2RlICpmaW5kX2djX2lub2RlKHN0cnVjdCBnY19pbm9kZV9saXN0ICpnY19saXN0LCBuaWRfdCBpbm8pCiB7CiAJc3RydWN0IGlub2RlX2VudHJ5ICppZTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoaWUsIGlsaXN0LCBsaXN0KQotCQlpZiAoaWUtPmlub2RlLT5pX2lubyA9PSBpbm8pCi0JCQlyZXR1cm4gaWUtPmlub2RlOworCWllID0gcmFkaXhfdHJlZV9sb29rdXAoJmdjX2xpc3QtPmlyb290LCBpbm8pOworCWlmIChpZSkKKwkJcmV0dXJuIGllLT5pbm9kZTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgYWRkX2djX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKmlsaXN0KQorc3RhdGljIHZvaWQgYWRkX2djX2lub2RlKHN0cnVjdCBnY19pbm9kZV9saXN0ICpnY19saXN0LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBpbm9kZV9lbnRyeSAqbmV3X2llOwogCi0JaWYgKGlub2RlID09IGZpbmRfZ2NfaW5vZGUoaW5vZGUtPmlfaW5vLCBpbGlzdCkpIHsKKwlpZiAoaW5vZGUgPT0gZmluZF9nY19pbm9kZShnY19saXN0LCBpbm9kZS0+aV9pbm8pKSB7CiAJCWlwdXQoaW5vZGUpOwogCQlyZXR1cm47CiAJfQotCiAJbmV3X2llID0gZjJmc19rbWVtX2NhY2hlX2FsbG9jKHdpbm9kZV9zbGFiLCBHRlBfTk9GUyk7CiAJbmV3X2llLT5pbm9kZSA9IGlub2RlOwotCWxpc3RfYWRkX3RhaWwoJm5ld19pZS0+bGlzdCwgaWxpc3QpOworcmV0cnk6CisJaWYgKHJhZGl4X3RyZWVfaW5zZXJ0KCZnY19saXN0LT5pcm9vdCwgaW5vZGUtPmlfaW5vLCBuZXdfaWUpKSB7CisJCWNvbmRfcmVzY2hlZCgpOworCQlnb3RvIHJldHJ5OworCX0KKwlsaXN0X2FkZF90YWlsKCZuZXdfaWUtPmxpc3QsICZnY19saXN0LT5pbGlzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dF9nY19pbm9kZShzdHJ1Y3QgbGlzdF9oZWFkICppbGlzdCkKK3N0YXRpYyB2b2lkIHB1dF9nY19pbm9kZShzdHJ1Y3QgZ2NfaW5vZGVfbGlzdCAqZ2NfbGlzdCkKIHsKIAlzdHJ1Y3QgaW5vZGVfZW50cnkgKmllLCAqbmV4dF9pZTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWUsIG5leHRfaWUsIGlsaXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGllLCBuZXh0X2llLCAmZ2NfbGlzdC0+aWxpc3QsIGxpc3QpIHsKKwkJcmFkaXhfdHJlZV9kZWxldGUoJmdjX2xpc3QtPmlyb290LCBpZS0+aW5vZGUtPmlfaW5vKTsKIAkJaXB1dChpZS0+aW5vZGUpOwogCQlsaXN0X2RlbCgmaWUtPmxpc3QpOwogCQlrbWVtX2NhY2hlX2ZyZWUod2lub2RlX3NsYWIsIGllKTsKQEAgLTU1Myw3ICs1NTYsNyBAQAogICogdGhlIHZpY3RpbSBkYXRhIGJsb2NrIGlzIGlnbm9yZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGdjX2RhdGFfc2VnbWVudChzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHN0cnVjdCBmMmZzX3N1bW1hcnkgKnN1bSwKLQkJc3RydWN0IGxpc3RfaGVhZCAqaWxpc3QsIHVuc2lnbmVkIGludCBzZWdubywgaW50IGdjX3R5cGUpCisJCXN0cnVjdCBnY19pbm9kZV9saXN0ICpnY19saXN0LCB1bnNpZ25lZCBpbnQgc2Vnbm8sIGludCBnY190eXBlKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYmktPnNiOwogCXN0cnVjdCBmMmZzX3N1bW1hcnkgKmVudHJ5OwpAQCAtNjA1LDI3ICs2MDgsMjcgQEAKIAogCQkJZGF0YV9wYWdlID0gZmluZF9kYXRhX3BhZ2UoaW5vZGUsCiAJCQkJCXN0YXJ0X2JpZHggKyBvZnNfaW5fbm9kZSwgZmFsc2UpOwotCQkJaWYgKElTX0VSUihkYXRhX3BhZ2UpKQotCQkJCWdvdG8gbmV4dF9pcHV0OworCQkJaWYgKElTX0VSUihkYXRhX3BhZ2UpKSB7CisJCQkJaXB1dChpbm9kZSk7CisJCQkJY29udGludWU7CisJCQl9CiAKIAkJCWYyZnNfcHV0X3BhZ2UoZGF0YV9wYWdlLCAwKTsKLQkJCWFkZF9nY19pbm9kZShpbm9kZSwgaWxpc3QpOwotCQl9IGVsc2UgewotCQkJaW5vZGUgPSBmaW5kX2djX2lub2RlKGRuaS5pbm8sIGlsaXN0KTsKLQkJCWlmIChpbm9kZSkgewotCQkJCXN0YXJ0X2JpZHggPSBzdGFydF9iaWR4X29mX25vZGUobm9mcywKLQkJCQkJCQkJRjJGU19JKGlub2RlKSk7Ci0JCQkJZGF0YV9wYWdlID0gZ2V0X2xvY2tfZGF0YV9wYWdlKGlub2RlLAotCQkJCQkJc3RhcnRfYmlkeCArIG9mc19pbl9ub2RlKTsKLQkJCQlpZiAoSVNfRVJSKGRhdGFfcGFnZSkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCW1vdmVfZGF0YV9wYWdlKGlub2RlLCBkYXRhX3BhZ2UsIGdjX3R5cGUpOwotCQkJCXN0YXRfaW5jX2RhdGFfYmxrX2NvdW50KHNiaSwgMSk7Ci0JCQl9CisJCQlhZGRfZ2NfaW5vZGUoZ2NfbGlzdCwgaW5vZGUpOworCQkJY29udGludWU7CiAJCX0KLQkJY29udGludWU7Ci1uZXh0X2lwdXQ6Ci0JCWlwdXQoaW5vZGUpOworCisJCS8qIHBoYXNlIDMgKi8KKwkJaW5vZGUgPSBmaW5kX2djX2lub2RlKGdjX2xpc3QsIGRuaS5pbm8pOworCQlpZiAoaW5vZGUpIHsKKwkJCXN0YXJ0X2JpZHggPSBzdGFydF9iaWR4X29mX25vZGUobm9mcywgRjJGU19JKGlub2RlKSk7CisJCQlkYXRhX3BhZ2UgPSBnZXRfbG9ja19kYXRhX3BhZ2UoaW5vZGUsCisJCQkJCQlzdGFydF9iaWR4ICsgb2ZzX2luX25vZGUpOworCQkJaWYgKElTX0VSUihkYXRhX3BhZ2UpKQorCQkJCWNvbnRpbnVlOworCQkJbW92ZV9kYXRhX3BhZ2UoaW5vZGUsIGRhdGFfcGFnZSwgZ2NfdHlwZSk7CisJCQlzdGF0X2luY19kYXRhX2Jsa19jb3VudChzYmksIDEpOworCQl9CiAJfQogCiAJaWYgKCsrcGhhc2UgPCA0KQpAQCAtNjQ2LDE4ICs2NDksMjAgQEAKIH0KIAogc3RhdGljIGludCBfX2dldF92aWN0aW0oc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCB1bnNpZ25lZCBpbnQgKnZpY3RpbSwKLQkJCQkJCWludCBnY190eXBlLCBpbnQgdHlwZSkKKwkJCWludCBnY190eXBlKQogewogCXN0cnVjdCBzaXRfaW5mbyAqc2l0X2kgPSBTSVRfSShzYmkpOwogCWludCByZXQ7CisKIAltdXRleF9sb2NrKCZzaXRfaS0+c2VudHJ5X2xvY2spOwotCXJldCA9IERJUlRZX0koc2JpKS0+dl9vcHMtPmdldF92aWN0aW0oc2JpLCB2aWN0aW0sIGdjX3R5cGUsIHR5cGUsIExGUyk7CisJcmV0ID0gRElSVFlfSShzYmkpLT52X29wcy0+Z2V0X3ZpY3RpbShzYmksIHZpY3RpbSwgZ2NfdHlwZSwKKwkJCQkJICAgICAgTk9fQ0hFQ0tfVFlQRSwgTEZTKTsKIAltdXRleF91bmxvY2soJnNpdF9pLT5zZW50cnlfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZG9fZ2FyYmFnZV9jb2xsZWN0KHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgdW5zaWduZWQgaW50IHNlZ25vLAotCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmlsaXN0LCBpbnQgZ2NfdHlwZSkKKwkJCQlzdHJ1Y3QgZ2NfaW5vZGVfbGlzdCAqZ2NfbGlzdCwgaW50IGdjX3R5cGUpCiB7CiAJc3RydWN0IHBhZ2UgKnN1bV9wYWdlOwogCXN0cnVjdCBmMmZzX3N1bW1hcnlfYmxvY2sgKnN1bTsKQEAgLTY3NSw3ICs2ODAsNyBAQAogCQlnY19ub2RlX3NlZ21lbnQoc2JpLCBzdW0tPmVudHJpZXMsIHNlZ25vLCBnY190eXBlKTsKIAkJYnJlYWs7CiAJY2FzZSBTVU1fVFlQRV9EQVRBOgotCQlnY19kYXRhX3NlZ21lbnQoc2JpLCBzdW0tPmVudHJpZXMsIGlsaXN0LCBzZWdubywgZ2NfdHlwZSk7CisJCWdjX2RhdGFfc2VnbWVudChzYmksIHN1bS0+ZW50cmllcywgZ2NfbGlzdCwgc2Vnbm8sIGdjX3R5cGUpOwogCQlicmVhazsKIAl9CiAJYmxrX2ZpbmlzaF9wbHVnKCZwbHVnKTsKQEAgLTY4OCwxNiArNjkzLDE4IEBACiAKIGludCBmMmZzX2djKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGlsaXN0OwogCXVuc2lnbmVkIGludCBzZWdubywgaTsKIAlpbnQgZ2NfdHlwZSA9IEJHX0dDOwogCWludCBuZnJlZSA9IDA7CiAJaW50IHJldCA9IC0xOwotCXN0cnVjdCBjcF9jb250cm9sIGNwYyA9IHsKLQkJLnJlYXNvbiA9IENQX1NZTkMsCisJc3RydWN0IGNwX2NvbnRyb2wgY3BjOworCXN0cnVjdCBnY19pbm9kZV9saXN0IGdjX2xpc3QgPSB7CisJCS5pbGlzdCA9IExJU1RfSEVBRF9JTklUKGdjX2xpc3QuaWxpc3QpLAorCQkuaXJvb3QgPSBSQURJWF9UUkVFX0lOSVQoR0ZQX05PRlMpLAogCX07CiAKLQlJTklUX0xJU1RfSEVBRCgmaWxpc3QpOworCWNwYy5yZWFzb24gPSB0ZXN0X29wdChzYmksIEZBU1RCT09UKSA/IENQX1VNT1VOVCA6IENQX1NZTkM7CisKIGdjX21vcmU6CiAJaWYgKHVubGlrZWx5KCEoc2JpLT5zYi0+c19mbGFncyAmIE1TX0FDVElWRSkpKQogCQlnb3RvIHN0b3A7CkBAIC03MDksNyArNzE2LDcgQEAKIAkJd3JpdGVfY2hlY2twb2ludChzYmksICZjcGMpOwogCX0KIAotCWlmICghX19nZXRfdmljdGltKHNiaSwgJnNlZ25vLCBnY190eXBlLCBOT19DSEVDS19UWVBFKSkKKwlpZiAoIV9fZ2V0X3ZpY3RpbShzYmksICZzZWdubywgZ2NfdHlwZSkpCiAJCWdvdG8gc3RvcDsKIAlyZXQgPSAwOwogCkBAIC03MTksNyArNzI2LDcgQEAKIAkJCQkJCQkJTUVUQV9TU0EpOwogCiAJZm9yIChpID0gMDsgaSA8IHNiaS0+c2Vnc19wZXJfc2VjOyBpKyspCi0JCWRvX2dhcmJhZ2VfY29sbGVjdChzYmksIHNlZ25vICsgaSwgJmlsaXN0LCBnY190eXBlKTsKKwkJZG9fZ2FyYmFnZV9jb2xsZWN0KHNiaSwgc2Vnbm8gKyBpLCAmZ2NfbGlzdCwgZ2NfdHlwZSk7CiAKIAlpZiAoZ2NfdHlwZSA9PSBGR19HQykgewogCQlzYmktPmN1cl92aWN0aW1fc2VjID0gTlVMTF9TRUdOTzsKQEAgLTczNSw3ICs3NDIsNyBAQAogc3RvcDoKIAltdXRleF91bmxvY2soJnNiaS0+Z2NfbXV0ZXgpOwogCi0JcHV0X2djX2lub2RlKCZpbGlzdCk7CisJcHV0X2djX2lub2RlKCZnY19saXN0KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9mMmZzL2djLmggYi9mcy9mMmZzL2djLmgKaW5kZXggMTZmMGIyYi4uNmZmN2FkMyAxMDA2NDQKLS0tIGEvZnMvZjJmcy9nYy5oCisrKyBiL2ZzL2YyZnMvZ2MuaApAQCAtNDAsNiArNDAsMTEgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogfTsKIAorc3RydWN0IGdjX2lub2RlX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgaWxpc3Q7CisJc3RydWN0IHJhZGl4X3RyZWVfcm9vdCBpcm9vdDsKK307CisKIC8qCiAgKiBpbmxpbmUgZnVuY3Rpb25zCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL2YyZnMvaW5saW5lLmMgYi9mcy9mMmZzL2lubGluZS5jCmluZGV4IDg4MDM2ZmQuLmYyZDNjNTggMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvaW5saW5lLmMKKysrIGIvZnMvZjJmcy9pbmxpbmUuYwpAQCAtMTUsMzUgKzE1LDQ0IEBACiAKIGJvb2wgZjJmc19tYXlfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JYmxvY2tfdCBucl9ibG9ja3M7Ci0JbG9mZl90IGlfc2l6ZTsKLQogCWlmICghdGVzdF9vcHQoRjJGU19JX1NCKGlub2RlKSwgSU5MSU5FX0RBVEEpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoZjJmc19pc19hdG9taWNfZmlsZShpbm9kZSkpCiAJCXJldHVybiBmYWxzZTsKIAotCW5yX2Jsb2NrcyA9IEYyRlNfSShpbm9kZSktPmlfeGF0dHJfbmlkID8gMyA6IDI7Ci0JaWYgKGlub2RlLT5pX2Jsb2NrcyA+IG5yX2Jsb2NrcykKKwlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCiAJCXJldHVybiBmYWxzZTsKIAotCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQlpZiAoaV9zaXplID4gTUFYX0lOTElORV9EQVRBKQorCWlmIChpX3NpemVfcmVhZChpbm9kZSkgPiBNQVhfSU5MSU5FX0RBVEEpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwogfQogCit2b2lkIHJlYWRfaW5saW5lX2RhdGEoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICppcGFnZSkKK3sKKwl2b2lkICpzcmNfYWRkciwgKmRzdF9hZGRyOworCisJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJcmV0dXJuOworCisJZjJmc19idWdfb24oRjJGU19QX1NCKHBhZ2UpLCBwYWdlLT5pbmRleCk7CisKKwl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCBNQVhfSU5MSU5FX0RBVEEsIFBBR0VfQ0FDSEVfU0laRSk7CisKKwkvKiBDb3B5IHRoZSB3aG9sZSBpbmxpbmUgZGF0YSBibG9jayAqLworCXNyY19hZGRyID0gaW5saW5lX2RhdGFfYWRkcihpcGFnZSk7CisJZHN0X2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlKTsKKwltZW1jcHkoZHN0X2FkZHIsIHNyY19hZGRyLCBNQVhfSU5MSU5FX0RBVEEpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWt1bm1hcF9hdG9taWMoZHN0X2FkZHIpOworCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKK30KKwogaW50IGYyZnNfcmVhZF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqaXBhZ2U7Ci0Jdm9pZCAqc3JjX2FkZHIsICpkc3RfYWRkcjsKLQotCWlmIChwYWdlLT5pbmRleCkgewotCQl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCAwLCBQQUdFX0NBQ0hFX1NJWkUpOwotCQlnb3RvIG91dDsKLQl9CiAKIAlpcGFnZSA9IGdldF9ub2RlX3BhZ2UoRjJGU19JX1NCKGlub2RlKSwgaW5vZGUtPmlfaW5vKTsKIAlpZiAoSVNfRVJSKGlwYWdlKSkgewpAQCAtNTEsMTEyICs2MCwxMTYgQEAKIAkJcmV0dXJuIFBUUl9FUlIoaXBhZ2UpOwogCX0KIAotCXplcm9fdXNlcl9zZWdtZW50KHBhZ2UsIE1BWF9JTkxJTkVfREFUQSwgUEFHRV9DQUNIRV9TSVpFKTsKKwlpZiAoIWYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSkgeworCQlmMmZzX3B1dF9wYWdlKGlwYWdlLCAxKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQogCi0JLyogQ29weSB0aGUgd2hvbGUgaW5saW5lIGRhdGEgYmxvY2sgKi8KLQlzcmNfYWRkciA9IGlubGluZV9kYXRhX2FkZHIoaXBhZ2UpOwotCWRzdF9hZGRyID0ga21hcChwYWdlKTsKLQltZW1jcHkoZHN0X2FkZHIsIHNyY19hZGRyLCBNQVhfSU5MSU5FX0RBVEEpOwotCWt1bm1hcChwYWdlKTsKLQlmMmZzX3B1dF9wYWdlKGlwYWdlLCAxKTsKKwlpZiAocGFnZS0+aW5kZXgpCisJCXplcm9fdXNlcl9zZWdtZW50KHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CisJZWxzZQorCQlyZWFkX2lubGluZV9kYXRhKHBhZ2UsIGlwYWdlKTsKIAotb3V0OgogCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwlmMmZzX3B1dF9wYWdlKGlwYWdlLCAxKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZjJmc19jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKQoraW50IGYyZnNfY29udmVydF9pbmxpbmVfcGFnZShzdHJ1Y3QgZG5vZGVfb2ZfZGF0YSAqZG4sIHN0cnVjdCBwYWdlICpwYWdlKQogewotCWludCBlcnIgPSAwOwotCXN0cnVjdCBwYWdlICppcGFnZTsKLQlzdHJ1Y3QgZG5vZGVfb2ZfZGF0YSBkbjsKIAl2b2lkICpzcmNfYWRkciwgKmRzdF9hZGRyOwogCWJsb2NrX3QgbmV3X2Jsa19hZGRyOwotCXN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfSV9TQihpbm9kZSk7CiAJc3RydWN0IGYyZnNfaW9faW5mbyBmaW8gPSB7CiAJCS50eXBlID0gREFUQSwKIAkJLnJ3ID0gV1JJVEVfU1lOQyB8IFJFUV9QUklPLAogCX07CisJaW50IGRpcnR5LCBlcnI7CisKKwlmMmZzX2J1Z19vbihGMkZTX0lfU0IoZG4tPmlub2RlKSwgcGFnZS0+aW5kZXgpOworCisJaWYgKCFmMmZzX2V4aXN0X2RhdGEoZG4tPmlub2RlKSkKKwkJZ290byBjbGVhcl9vdXQ7CisKKwllcnIgPSBmMmZzX3Jlc2VydmVfYmxvY2soZG4sIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmMmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSwgREFUQSk7CisKKwlpZiAoUGFnZVVwdG9kYXRlKHBhZ2UpKQorCQlnb3RvIG5vX3VwZGF0ZTsKKworCXplcm9fdXNlcl9zZWdtZW50KHBhZ2UsIE1BWF9JTkxJTkVfREFUQSwgUEFHRV9DQUNIRV9TSVpFKTsKKworCS8qIENvcHkgdGhlIHdob2xlIGlubGluZSBkYXRhIGJsb2NrICovCisJc3JjX2FkZHIgPSBpbmxpbmVfZGF0YV9hZGRyKGRuLT5pbm9kZV9wYWdlKTsKKwlkc3RfYWRkciA9IGttYXBfYXRvbWljKHBhZ2UpOworCW1lbWNweShkc3RfYWRkciwgc3JjX2FkZHIsIE1BWF9JTkxJTkVfREFUQSk7CisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJa3VubWFwX2F0b21pYyhkc3RfYWRkcik7CisJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworbm9fdXBkYXRlOgorCS8qIGNsZWFyIGRpcnR5IHN0YXRlICovCisJZGlydHkgPSBjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlKTsKKworCS8qIHdyaXRlIGRhdGEgcGFnZSB0byB0cnkgdG8gbWFrZSBkYXRhIGNvbnNpc3RlbnQgKi8KKwlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CisKKwl3cml0ZV9kYXRhX3BhZ2UocGFnZSwgZG4sICZuZXdfYmxrX2FkZHIsICZmaW8pOworCXVwZGF0ZV9leHRlbnRfY2FjaGUobmV3X2Jsa19hZGRyLCBkbik7CisJZjJmc193YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UsIERBVEEpOworCWlmIChkaXJ0eSkKKwkJaW5vZGVfZGVjX2RpcnR5X3BhZ2VzKGRuLT5pbm9kZSk7CisKKwkvKiB0aGlzIGNvbnZlcnRlZCBpbmxpbmVfZGF0YSBzaG91bGQgYmUgcmVjb3ZlcmVkLiAqLworCXNldF9pbm9kZV9mbGFnKEYyRlNfSShkbi0+aW5vZGUpLCBGSV9BUFBFTkRfV1JJVEUpOworCisJLyogY2xlYXIgaW5saW5lIGRhdGEgYW5kIGZsYWcgYWZ0ZXIgZGF0YSB3cml0ZWJhY2sgKi8KKwl0cnVuY2F0ZV9pbmxpbmVfZGF0YShkbi0+aW5vZGVfcGFnZSwgMCk7CitjbGVhcl9vdXQ6CisJc3RhdF9kZWNfaW5saW5lX2lub2RlKGRuLT5pbm9kZSk7CisJZjJmc19jbGVhcl9pbmxpbmVfaW5vZGUoZG4tPmlub2RlKTsKKwlzeW5jX2lub2RlX3BhZ2UoZG4pOworCWYyZnNfcHV0X2Rub2RlKGRuKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGYyZnNfY29udmVydF9pbmxpbmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoaW5vZGUpOworCXN0cnVjdCBkbm9kZV9vZl9kYXRhIGRuOworCXN0cnVjdCBwYWdlICppcGFnZSwgKnBhZ2U7CisJaW50IGVyciA9IDA7CisKKwlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIDApOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlmMmZzX2xvY2tfb3Aoc2JpKTsKKwogCWlwYWdlID0gZ2V0X25vZGVfcGFnZShzYmksIGlub2RlLT5pX2lubyk7CiAJaWYgKElTX0VSUihpcGFnZSkpIHsKIAkJZXJyID0gUFRSX0VSUihpcGFnZSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIHNvbWVvbmUgZWxzZSBjb252ZXJ0ZWQgaW5saW5lX2RhdGEgYWxyZWFkeSAqLwotCWlmICghZjJmc19oYXNfaW5saW5lX2RhdGEoaW5vZGUpKQotCQlnb3RvIG91dDsKKwlzZXRfbmV3X2Rub2RlKCZkbiwgaW5vZGUsIGlwYWdlLCBpcGFnZSwgMCk7CiAKLQkvKgotCSAqIGlfYWRkclswXSBpcyBub3QgdXNlZCBmb3IgaW5saW5lIGRhdGEsCi0JICogc28gcmVzZXJ2aW5nIG5ldyBibG9jayB3aWxsIG5vdCBkZXN0cm95IGlubGluZSBkYXRhCi0JICovCi0Jc2V0X25ld19kbm9kZSgmZG4sIGlub2RlLCBpcGFnZSwgTlVMTCwgMCk7Ci0JZXJyID0gZjJmc19yZXNlcnZlX2Jsb2NrKCZkbiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CisJaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSkKKwkJZXJyID0gZjJmc19jb252ZXJ0X2lubGluZV9wYWdlKCZkbiwgcGFnZSk7CiAKLQlmMmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSwgREFUQSk7Ci0JemVyb191c2VyX3NlZ21lbnQocGFnZSwgTUFYX0lOTElORV9EQVRBLCBQQUdFX0NBQ0hFX1NJWkUpOwotCi0JLyogQ29weSB0aGUgd2hvbGUgaW5saW5lIGRhdGEgYmxvY2sgKi8KLQlzcmNfYWRkciA9IGlubGluZV9kYXRhX2FkZHIoaXBhZ2UpOwotCWRzdF9hZGRyID0ga21hcChwYWdlKTsKLQltZW1jcHkoZHN0X2FkZHIsIHNyY19hZGRyLCBNQVhfSU5MSU5FX0RBVEEpOwotCWt1bm1hcChwYWdlKTsKLQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0KLQkvKiB3cml0ZSBkYXRhIHBhZ2UgdG8gdHJ5IHRvIG1ha2UgZGF0YSBjb25zaXN0ZW50ICovCi0Jc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwotCXdyaXRlX2RhdGFfcGFnZShwYWdlLCAmZG4sICZuZXdfYmxrX2FkZHIsICZmaW8pOwotCXVwZGF0ZV9leHRlbnRfY2FjaGUobmV3X2Jsa19hZGRyLCAmZG4pOwotCWYyZnNfd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlLCBEQVRBKTsKLQotCS8qIGNsZWFyIGlubGluZSBkYXRhIGFuZCBmbGFnIGFmdGVyIGRhdGEgd3JpdGViYWNrICovCi0JemVyb191c2VyX3NlZ21lbnQoaXBhZ2UsIElOTElORV9EQVRBX09GRlNFVCwKLQkJCQkgSU5MSU5FX0RBVEFfT0ZGU0VUICsgTUFYX0lOTElORV9EQVRBKTsKLQljbGVhcl9pbm9kZV9mbGFnKEYyRlNfSShpbm9kZSksIEZJX0lOTElORV9EQVRBKTsKLQlzdGF0X2RlY19pbmxpbmVfaW5vZGUoaW5vZGUpOwotCi0Jc3luY19pbm9kZV9wYWdlKCZkbik7CiAJZjJmc19wdXRfZG5vZGUoJmRuKTsKIG91dDoKIAlmMmZzX3VubG9ja19vcChzYmkpOworCisJZjJmc19wdXRfcGFnZShwYWdlLCAxKTsKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgZjJmc19jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgdG9fc2l6ZSwKLQkJCQkJCXN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBwYWdlICpuZXdfcGFnZSA9IHBhZ2U7Ci0JaW50IGVycjsKLQotCWlmICghZjJmc19oYXNfaW5saW5lX2RhdGEoaW5vZGUpKQotCQlyZXR1cm4gMDsKLQllbHNlIGlmICh0b19zaXplIDw9IE1BWF9JTkxJTkVfREFUQSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIXBhZ2UgfHwgcGFnZS0+aW5kZXggIT0gMCkgewotCQluZXdfcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCAwKTsKLQkJaWYgKCFuZXdfcGFnZSkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWVyciA9IF9fZjJmc19jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlLCBuZXdfcGFnZSk7Ci0JaWYgKCFwYWdlIHx8IHBhZ2UtPmluZGV4ICE9IDApCi0JCWYyZnNfcHV0X3BhZ2UobmV3X3BhZ2UsIDEpOwotCXJldHVybiBlcnI7Ci19Ci0KLWludCBmMmZzX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNpemUpCitpbnQgZjJmc193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAl2b2lkICpzcmNfYWRkciwgKmRzdF9hZGRyOwotCXN0cnVjdCBwYWdlICppcGFnZTsKIAlzdHJ1Y3QgZG5vZGVfb2ZfZGF0YSBkbjsKIAlpbnQgZXJyOwogCkBAIC0xNjQsNDcgKzE3NywzOSBAQAogCWVyciA9IGdldF9kbm9kZV9vZl9kYXRhKCZkbiwgMCwgTE9PS1VQX05PREUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JaXBhZ2UgPSBkbi5pbm9kZV9wYWdlOwogCi0JZjJmc193YWl0X29uX3BhZ2Vfd3JpdGViYWNrKGlwYWdlLCBOT0RFKTsKLQl6ZXJvX3VzZXJfc2VnbWVudChpcGFnZSwgSU5MSU5FX0RBVEFfT0ZGU0VULAotCQkJCSBJTkxJTkVfREFUQV9PRkZTRVQgKyBNQVhfSU5MSU5FX0RBVEEpOwotCXNyY19hZGRyID0ga21hcChwYWdlKTsKLQlkc3RfYWRkciA9IGlubGluZV9kYXRhX2FkZHIoaXBhZ2UpOwotCW1lbWNweShkc3RfYWRkciwgc3JjX2FkZHIsIHNpemUpOwotCWt1bm1hcChwYWdlKTsKLQotCS8qIFJlbGVhc2UgdGhlIGZpcnN0IGRhdGEgYmxvY2sgaWYgaXQgaXMgYWxsb2NhdGVkICovCiAJaWYgKCFmMmZzX2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHsKLQkJdHJ1bmNhdGVfZGF0YV9ibG9ja3NfcmFuZ2UoJmRuLCAxKTsKLQkJc2V0X2lub2RlX2ZsYWcoRjJGU19JKGlub2RlKSwgRklfSU5MSU5FX0RBVEEpOwotCQlzdGF0X2luY19pbmxpbmVfaW5vZGUoaW5vZGUpOworCQlmMmZzX3B1dF9kbm9kZSgmZG4pOworCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKKwlmMmZzX2J1Z19vbihGMkZTX0lfU0IoaW5vZGUpLCBwYWdlLT5pbmRleCk7CisKKwlmMmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2soZG4uaW5vZGVfcGFnZSwgTk9ERSk7CisJc3JjX2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlKTsKKwlkc3RfYWRkciA9IGlubGluZV9kYXRhX2FkZHIoZG4uaW5vZGVfcGFnZSk7CisJbWVtY3B5KGRzdF9hZGRyLCBzcmNfYWRkciwgTUFYX0lOTElORV9EQVRBKTsKKwlrdW5tYXBfYXRvbWljKHNyY19hZGRyKTsKKwogCXNldF9pbm9kZV9mbGFnKEYyRlNfSShpbm9kZSksIEZJX0FQUEVORF9XUklURSk7CisJc2V0X2lub2RlX2ZsYWcoRjJGU19JKGlub2RlKSwgRklfREFUQV9FWElTVCk7CisKIAlzeW5jX2lub2RlX3BhZ2UoJmRuKTsKIAlmMmZzX3B1dF9kbm9kZSgmZG4pOwotCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgdHJ1bmNhdGVfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGZyb20pCit2b2lkIHRydW5jYXRlX2lubGluZV9kYXRhKHN0cnVjdCBwYWdlICppcGFnZSwgdTY0IGZyb20pCiB7Ci0Jc3RydWN0IHBhZ2UgKmlwYWdlOworCXZvaWQgKmFkZHI7CiAKIAlpZiAoZnJvbSA+PSBNQVhfSU5MSU5FX0RBVEEpCiAJCXJldHVybjsKIAotCWlwYWdlID0gZ2V0X25vZGVfcGFnZShGMkZTX0lfU0IoaW5vZGUpLCBpbm9kZS0+aV9pbm8pOwotCWlmIChJU19FUlIoaXBhZ2UpKQotCQlyZXR1cm47Ci0KIAlmMmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2soaXBhZ2UsIE5PREUpOwogCi0JemVyb191c2VyX3NlZ21lbnQoaXBhZ2UsIElOTElORV9EQVRBX09GRlNFVCArIGZyb20sCi0JCQkJSU5MSU5FX0RBVEFfT0ZGU0VUICsgTUFYX0lOTElORV9EQVRBKTsKLQlzZXRfcGFnZV9kaXJ0eShpcGFnZSk7Ci0JZjJmc19wdXRfcGFnZShpcGFnZSwgMSk7CisJYWRkciA9IGlubGluZV9kYXRhX2FkZHIoaXBhZ2UpOworCW1lbXNldChhZGRyICsgZnJvbSwgMCwgTUFYX0lOTElORV9EQVRBIC0gZnJvbSk7CiB9CiAKIGJvb2wgcmVjb3Zlcl9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqbnBhZ2UpCkBAIC0yMzYsNiArMjQxLDEwIEBACiAJCXNyY19hZGRyID0gaW5saW5lX2RhdGFfYWRkcihucGFnZSk7CiAJCWRzdF9hZGRyID0gaW5saW5lX2RhdGFfYWRkcihpcGFnZSk7CiAJCW1lbWNweShkc3RfYWRkciwgc3JjX2FkZHIsIE1BWF9JTkxJTkVfREFUQSk7CisKKwkJc2V0X2lub2RlX2ZsYWcoRjJGU19JKGlub2RlKSwgRklfSU5MSU5FX0RBVEEpOworCQlzZXRfaW5vZGVfZmxhZyhGMkZTX0koaW5vZGUpLCBGSV9EQVRBX0VYSVNUKTsKKwogCQl1cGRhdGVfaW5vZGUoaW5vZGUsIGlwYWdlKTsKIAkJZjJmc19wdXRfcGFnZShpcGFnZSwgMSk7CiAJCXJldHVybiB0cnVlOwpAQCAtMjQ0LDE2ICsyNTMsMjc5IEBACiAJaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSkgewogCQlpcGFnZSA9IGdldF9ub2RlX3BhZ2Uoc2JpLCBpbm9kZS0+aV9pbm8pOwogCQlmMmZzX2J1Z19vbihzYmksIElTX0VSUihpcGFnZSkpOwotCQlmMmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2soaXBhZ2UsIE5PREUpOwotCQl6ZXJvX3VzZXJfc2VnbWVudChpcGFnZSwgSU5MSU5FX0RBVEFfT0ZGU0VULAotCQkJCSBJTkxJTkVfREFUQV9PRkZTRVQgKyBNQVhfSU5MSU5FX0RBVEEpOwotCQljbGVhcl9pbm9kZV9mbGFnKEYyRlNfSShpbm9kZSksIEZJX0lOTElORV9EQVRBKTsKKwkJdHJ1bmNhdGVfaW5saW5lX2RhdGEoaXBhZ2UsIDApOworCQlmMmZzX2NsZWFyX2lubGluZV9pbm9kZShpbm9kZSk7CiAJCXVwZGF0ZV9pbm9kZShpbm9kZSwgaXBhZ2UpOwogCQlmMmZzX3B1dF9wYWdlKGlwYWdlLCAxKTsKIAl9IGVsc2UgaWYgKHJpICYmIChyaS0+aV9pbmxpbmUgJiBGMkZTX0lOTElORV9EQVRBKSkgewogCQl0cnVuY2F0ZV9ibG9ja3MoaW5vZGUsIDAsIGZhbHNlKTsKLQkJc2V0X2lub2RlX2ZsYWcoRjJGU19JKGlub2RlKSwgRklfSU5MSU5FX0RBVEEpOwogCQlnb3RvIHByb2Nlc3NfaW5saW5lOwogCX0KIAlyZXR1cm4gZmFsc2U7CiB9CisKK3N0cnVjdCBmMmZzX2Rpcl9lbnRyeSAqZmluZF9pbl9pbmxpbmVfZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCXN0cnVjdCBxc3RyICpuYW1lLCBzdHJ1Y3QgcGFnZSAqKnJlc19wYWdlKQoreworCXN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfU0IoZGlyLT5pX3NiKTsKKwlzdHJ1Y3QgZjJmc19pbmxpbmVfZGVudHJ5ICppbmxpbmVfZGVudHJ5OworCXN0cnVjdCBmMmZzX2Rpcl9lbnRyeSAqZGU7CisJc3RydWN0IGYyZnNfZGVudHJ5X3B0ciBkOworCXN0cnVjdCBwYWdlICppcGFnZTsKKworCWlwYWdlID0gZ2V0X25vZGVfcGFnZShzYmksIGRpci0+aV9pbm8pOworCWlmIChJU19FUlIoaXBhZ2UpKQorCQlyZXR1cm4gTlVMTDsKKworCWlubGluZV9kZW50cnkgPSBpbmxpbmVfZGF0YV9hZGRyKGlwYWdlKTsKKworCW1ha2VfZGVudHJ5X3B0cigmZCwgKHZvaWQgKilpbmxpbmVfZGVudHJ5LCAyKTsKKwlkZSA9IGZpbmRfdGFyZ2V0X2RlbnRyeShuYW1lLCBOVUxMLCAmZCk7CisKKwl1bmxvY2tfcGFnZShpcGFnZSk7CisJaWYgKGRlKQorCQkqcmVzX3BhZ2UgPSBpcGFnZTsKKwllbHNlCisJCWYyZnNfcHV0X3BhZ2UoaXBhZ2UsIDApOworCisJLyoKKwkgKiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgc2hvdWxkIGJlIGEgYnVnIHdoZW4gbmFtZV9sZW4gaXMgemVyby4KKwkgKiBXZSBzdG9wIGhlcmUgZm9yIGZpZ3VyaW5nIG91dCB3aGVyZSB0aGUgYnVncyBoYXMgb2NjdXJyZWQuCisJICovCisJZjJmc19idWdfb24oc2JpLCBkLm1heCA8IDApOworCXJldHVybiBkZTsKK30KKworc3RydWN0IGYyZnNfZGlyX2VudHJ5ICpmMmZzX3BhcmVudF9pbmxpbmVfZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkJCXN0cnVjdCBwYWdlICoqcCkKK3sKKwlzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoZGlyKTsKKwlzdHJ1Y3QgcGFnZSAqaXBhZ2U7CisJc3RydWN0IGYyZnNfZGlyX2VudHJ5ICpkZTsKKwlzdHJ1Y3QgZjJmc19pbmxpbmVfZGVudHJ5ICpkZW50cnlfYmxrOworCisJaXBhZ2UgPSBnZXRfbm9kZV9wYWdlKHNiaSwgZGlyLT5pX2lubyk7CisJaWYgKElTX0VSUihpcGFnZSkpCisJCXJldHVybiBOVUxMOworCisJZGVudHJ5X2JsayA9IGlubGluZV9kYXRhX2FkZHIoaXBhZ2UpOworCWRlID0gJmRlbnRyeV9ibGstPmRlbnRyeVsxXTsKKwkqcCA9IGlwYWdlOworCXVubG9ja19wYWdlKGlwYWdlKTsKKwlyZXR1cm4gZGU7Cit9CisKK2ludCBtYWtlX2VtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCisJCQkJCQkJc3RydWN0IHBhZ2UgKmlwYWdlKQoreworCXN0cnVjdCBmMmZzX2lubGluZV9kZW50cnkgKmRlbnRyeV9ibGs7CisJc3RydWN0IGYyZnNfZGVudHJ5X3B0ciBkOworCisJZGVudHJ5X2JsayA9IGlubGluZV9kYXRhX2FkZHIoaXBhZ2UpOworCisJbWFrZV9kZW50cnlfcHRyKCZkLCAodm9pZCAqKWRlbnRyeV9ibGssIDIpOworCWRvX21ha2VfZW1wdHlfZGlyKGlub2RlLCBwYXJlbnQsICZkKTsKKworCXNldF9wYWdlX2RpcnR5KGlwYWdlKTsKKworCS8qIHVwZGF0ZSBpX3NpemUgdG8gTUFYX0lOTElORV9EQVRBICovCisJaWYgKGlfc2l6ZV9yZWFkKGlub2RlKSA8IE1BWF9JTkxJTkVfREFUQSkgeworCQlpX3NpemVfd3JpdGUoaW5vZGUsIE1BWF9JTkxJTkVfREFUQSk7CisJCXNldF9pbm9kZV9mbGFnKEYyRlNfSShpbm9kZSksIEZJX1VQREFURV9ESVIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmMmZzX2NvbnZlcnRfaW5saW5lX2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHBhZ2UgKmlwYWdlLAorCQkJCXN0cnVjdCBmMmZzX2lubGluZV9kZW50cnkgKmlubGluZV9kZW50cnkpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGRub2RlX29mX2RhdGEgZG47CisJc3RydWN0IGYyZnNfZGVudHJ5X2Jsb2NrICpkZW50cnlfYmxrOworCWludCBlcnI7CisKKwlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKGRpci0+aV9tYXBwaW5nLCAwKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCisJc2V0X25ld19kbm9kZSgmZG4sIGRpciwgaXBhZ2UsIE5VTEwsIDApOworCWVyciA9IGYyZnNfcmVzZXJ2ZV9ibG9jaygmZG4sIDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZjJmc193YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UsIERBVEEpOworCXplcm9fdXNlcl9zZWdtZW50KHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CisKKwlkZW50cnlfYmxrID0ga21hcF9hdG9taWMocGFnZSk7CisKKwkvKiBjb3B5IGRhdGEgZnJvbSBpbmxpbmUgZGVudHJ5IGJsb2NrIHRvIG5ldyBkZW50cnkgYmxvY2sgKi8KKwltZW1jcHkoZGVudHJ5X2Jsay0+ZGVudHJ5X2JpdG1hcCwgaW5saW5lX2RlbnRyeS0+ZGVudHJ5X2JpdG1hcCwKKwkJCQkJSU5MSU5FX0RFTlRSWV9CSVRNQVBfU0laRSk7CisJbWVtY3B5KGRlbnRyeV9ibGstPmRlbnRyeSwgaW5saW5lX2RlbnRyeS0+ZGVudHJ5LAorCQkJc2l6ZW9mKHN0cnVjdCBmMmZzX2Rpcl9lbnRyeSkgKiBOUl9JTkxJTkVfREVOVFJZKTsKKwltZW1jcHkoZGVudHJ5X2Jsay0+ZmlsZW5hbWUsIGlubGluZV9kZW50cnktPmZpbGVuYW1lLAorCQkJCQlOUl9JTkxJTkVfREVOVFJZICogRjJGU19TTE9UX0xFTik7CisKKwlrdW5tYXBfYXRvbWljKGRlbnRyeV9ibGspOworCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKworCS8qIGNsZWFyIGlubGluZSBkaXIgYW5kIGZsYWcgYWZ0ZXIgZGF0YSB3cml0ZWJhY2sgKi8KKwl0cnVuY2F0ZV9pbmxpbmVfZGF0YShpcGFnZSwgMCk7CisKKwlzdGF0X2RlY19pbmxpbmVfZGlyKGRpcik7CisJY2xlYXJfaW5vZGVfZmxhZyhGMkZTX0koZGlyKSwgRklfSU5MSU5FX0RFTlRSWSk7CisKKwlpZiAoaV9zaXplX3JlYWQoZGlyKSA8IFBBR0VfQ0FDSEVfU0laRSkgeworCQlpX3NpemVfd3JpdGUoZGlyLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlzZXRfaW5vZGVfZmxhZyhGMkZTX0koZGlyKSwgRklfVVBEQVRFX0RJUik7CisJfQorCisJc3luY19pbm9kZV9wYWdlKCZkbik7CitvdXQ6CisJZjJmc19wdXRfcGFnZShwYWdlLCAxKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZjJmc19hZGRfaW5saW5lX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKKwkJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGRpcik7CisJc3RydWN0IHBhZ2UgKmlwYWdlOworCXVuc2lnbmVkIGludCBiaXRfcG9zOworCWYyZnNfaGFzaF90IG5hbWVfaGFzaDsKKwlzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmRlOworCXNpemVfdCBuYW1lbGVuID0gbmFtZS0+bGVuOworCXN0cnVjdCBmMmZzX2lubGluZV9kZW50cnkgKmRlbnRyeV9ibGsgPSBOVUxMOworCWludCBzbG90cyA9IEdFVF9ERU5UUllfU0xPVFMobmFtZWxlbik7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGVyciA9IDA7CisJaW50IGk7CisKKwluYW1lX2hhc2ggPSBmMmZzX2RlbnRyeV9oYXNoKG5hbWUpOworCisJaXBhZ2UgPSBnZXRfbm9kZV9wYWdlKHNiaSwgZGlyLT5pX2lubyk7CisJaWYgKElTX0VSUihpcGFnZSkpCisJCXJldHVybiBQVFJfRVJSKGlwYWdlKTsKKworCWRlbnRyeV9ibGsgPSBpbmxpbmVfZGF0YV9hZGRyKGlwYWdlKTsKKwliaXRfcG9zID0gcm9vbV9mb3JfZmlsZW5hbWUoJmRlbnRyeV9ibGstPmRlbnRyeV9iaXRtYXAsCisJCQkJCQlzbG90cywgTlJfSU5MSU5FX0RFTlRSWSk7CisJaWYgKGJpdF9wb3MgPj0gTlJfSU5MSU5FX0RFTlRSWSkgeworCQllcnIgPSBmMmZzX2NvbnZlcnRfaW5saW5lX2RpcihkaXIsIGlwYWdlLCBkZW50cnlfYmxrKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3dyaXRlKCZGMkZTX0koaW5vZGUpLT5pX3NlbSk7CisJcGFnZSA9IGluaXRfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGRpciwgbmFtZSwgaXBhZ2UpOworCWlmIChJU19FUlIocGFnZSkpIHsKKwkJZXJyID0gUFRSX0VSUihwYWdlKTsKKwkJZ290byBmYWlsOworCX0KKworCWYyZnNfd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhpcGFnZSwgTk9ERSk7CisJZGUgPSAmZGVudHJ5X2Jsay0+ZGVudHJ5W2JpdF9wb3NdOworCWRlLT5oYXNoX2NvZGUgPSBuYW1lX2hhc2g7CisJZGUtPm5hbWVfbGVuID0gY3B1X3RvX2xlMTYobmFtZWxlbik7CisJbWVtY3B5KGRlbnRyeV9ibGstPmZpbGVuYW1lW2JpdF9wb3NdLCBuYW1lLT5uYW1lLCBuYW1lLT5sZW4pOworCWRlLT5pbm8gPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9pbm8pOworCXNldF9kZV90eXBlKGRlLCBpbm9kZSk7CisJZm9yIChpID0gMDsgaSA8IHNsb3RzOyBpKyspCisJCXRlc3RfYW5kX3NldF9iaXRfbGUoYml0X3BvcyArIGksICZkZW50cnlfYmxrLT5kZW50cnlfYml0bWFwKTsKKwlzZXRfcGFnZV9kaXJ0eShpcGFnZSk7CisKKwkvKiB3ZSBkb24ndCBuZWVkIHRvIG1hcmtfaW5vZGVfZGlydHkgbm93ICovCisJRjJGU19JKGlub2RlKS0+aV9waW5vID0gZGlyLT5pX2lubzsKKwl1cGRhdGVfaW5vZGUoaW5vZGUsIHBhZ2UpOworCWYyZnNfcHV0X3BhZ2UocGFnZSwgMSk7CisKKwl1cGRhdGVfcGFyZW50X21ldGFkYXRhKGRpciwgaW5vZGUsIDApOworZmFpbDoKKwl1cF93cml0ZSgmRjJGU19JKGlub2RlKS0+aV9zZW0pOworCisJaWYgKGlzX2lub2RlX2ZsYWdfc2V0KEYyRlNfSShkaXIpLCBGSV9VUERBVEVfRElSKSkgeworCQl1cGRhdGVfaW5vZGUoZGlyLCBpcGFnZSk7CisJCWNsZWFyX2lub2RlX2ZsYWcoRjJGU19JKGRpciksIEZJX1VQREFURV9ESVIpOworCX0KK291dDoKKwlmMmZzX3B1dF9wYWdlKGlwYWdlLCAxKTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGYyZnNfZGVsZXRlX2lubGluZV9lbnRyeShzdHJ1Y3QgZjJmc19kaXJfZW50cnkgKmRlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBmMmZzX2lubGluZV9kZW50cnkgKmlubGluZV9kZW50cnk7CisJaW50IHNsb3RzID0gR0VUX0RFTlRSWV9TTE9UUyhsZTE2X3RvX2NwdShkZW50cnktPm5hbWVfbGVuKSk7CisJdW5zaWduZWQgaW50IGJpdF9wb3M7CisJaW50IGk7CisKKwlsb2NrX3BhZ2UocGFnZSk7CisJZjJmc193YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UsIE5PREUpOworCisJaW5saW5lX2RlbnRyeSA9IGlubGluZV9kYXRhX2FkZHIocGFnZSk7CisJYml0X3BvcyA9IGRlbnRyeSAtIGlubGluZV9kZW50cnktPmRlbnRyeTsKKwlmb3IgKGkgPSAwOyBpIDwgc2xvdHM7IGkrKykKKwkJdGVzdF9hbmRfY2xlYXJfYml0X2xlKGJpdF9wb3MgKyBpLAorCQkJCSZpbmxpbmVfZGVudHJ5LT5kZW50cnlfYml0bWFwKTsKKworCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCisJZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCisJaWYgKGlub2RlKQorCQlmMmZzX2Ryb3BfbmxpbmsoZGlyLCBpbm9kZSwgcGFnZSk7CisKKwlmMmZzX3B1dF9wYWdlKHBhZ2UsIDEpOworfQorCitib29sIGYyZnNfZW1wdHlfaW5saW5lX2RpcihzdHJ1Y3QgaW5vZGUgKmRpcikKK3sKKwlzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoZGlyKTsKKwlzdHJ1Y3QgcGFnZSAqaXBhZ2U7CisJdW5zaWduZWQgaW50IGJpdF9wb3MgPSAyOworCXN0cnVjdCBmMmZzX2lubGluZV9kZW50cnkgKmRlbnRyeV9ibGs7CisKKwlpcGFnZSA9IGdldF9ub2RlX3BhZ2Uoc2JpLCBkaXItPmlfaW5vKTsKKwlpZiAoSVNfRVJSKGlwYWdlKSkKKwkJcmV0dXJuIGZhbHNlOworCisJZGVudHJ5X2JsayA9IGlubGluZV9kYXRhX2FkZHIoaXBhZ2UpOworCWJpdF9wb3MgPSBmaW5kX25leHRfYml0X2xlKCZkZW50cnlfYmxrLT5kZW50cnlfYml0bWFwLAorCQkJCQlOUl9JTkxJTkVfREVOVFJZLAorCQkJCQliaXRfcG9zKTsKKworCWYyZnNfcHV0X3BhZ2UoaXBhZ2UsIDEpOworCisJaWYgKGJpdF9wb3MgPCBOUl9JTkxJTkVfREVOVFJZKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworaW50IGYyZnNfcmVhZF9pbmxpbmVfZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKKwlzdHJ1Y3QgZjJmc19pbmxpbmVfZGVudHJ5ICppbmxpbmVfZGVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgcGFnZSAqaXBhZ2UgPSBOVUxMOworCXN0cnVjdCBmMmZzX2RlbnRyeV9wdHIgZDsKKworCWlmIChjdHgtPnBvcyA9PSBOUl9JTkxJTkVfREVOVFJZKQorCQlyZXR1cm4gMDsKKworCWlwYWdlID0gZ2V0X25vZGVfcGFnZShGMkZTX0lfU0IoaW5vZGUpLCBpbm9kZS0+aV9pbm8pOworCWlmIChJU19FUlIoaXBhZ2UpKQorCQlyZXR1cm4gUFRSX0VSUihpcGFnZSk7CisKKwlpbmxpbmVfZGVudHJ5ID0gaW5saW5lX2RhdGFfYWRkcihpcGFnZSk7CisKKwltYWtlX2RlbnRyeV9wdHIoJmQsICh2b2lkICopaW5saW5lX2RlbnRyeSwgMik7CisKKwlpZiAoIWYyZnNfZmlsbF9kZW50cmllcyhjdHgsICZkLCAwKSkKKwkJY3R4LT5wb3MgPSBOUl9JTkxJTkVfREVOVFJZOworCisJZjJmc19wdXRfcGFnZShpcGFnZSwgMSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mcy9mMmZzL2lub2RlLmMgYi9mcy9mMmZzL2lub2RlLmMKaW5kZXggMGRlZWFkNC4uMTk2Y2M3OCAxMDA2NDQKLS0tIGEvZnMvZjJmcy9pbm9kZS5jCisrKyBiL2ZzL2YyZnMvaW5vZGUuYwpAQCAtNjcsMTIgKzY3LDM4IEBACiAJfQogfQogCitzdGF0aWMgaW50IF9fcmVjb3Zlcl9pbmxpbmVfc3RhdHVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICppcGFnZSkKK3sKKwl2b2lkICppbmxpbmVfZGF0YSA9IGlubGluZV9kYXRhX2FkZHIoaXBhZ2UpOworCXN0cnVjdCBmMmZzX2lub2RlICpyaTsKKwl2b2lkICp6YnVmOworCisJemJ1ZiA9IGt6YWxsb2MoTUFYX0lOTElORV9EQVRBLCBHRlBfTk9GUyk7CisJaWYgKCF6YnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghbWVtY21wKHpidWYsIGlubGluZV9kYXRhLCBNQVhfSU5MSU5FX0RBVEEpKSB7CisJCWtmcmVlKHpidWYpOworCQlyZXR1cm4gMDsKKwl9CisJa2ZyZWUoemJ1Zik7CisKKwlmMmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2soaXBhZ2UsIE5PREUpOworCXNldF9pbm9kZV9mbGFnKEYyRlNfSShpbm9kZSksIEZJX0RBVEFfRVhJU1QpOworCisJcmkgPSBGMkZTX0lOT0RFKGlwYWdlKTsKKwlzZXRfcmF3X2lubGluZShGMkZTX0koaW5vZGUpLCByaSk7CisJc2V0X3BhZ2VfZGlydHkoaXBhZ2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRvX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoaW5vZGUpOwogCXN0cnVjdCBmMmZzX2lub2RlX2luZm8gKmZpID0gRjJGU19JKGlub2RlKTsKIAlzdHJ1Y3QgcGFnZSAqbm9kZV9wYWdlOwogCXN0cnVjdCBmMmZzX2lub2RlICpyaTsKKwlpbnQgZXJyID0gMDsKIAogCS8qIENoZWNrIGlmIGlubyBpcyB3aXRoaW4gc2NvcGUgKi8KIAlpZiAoY2hlY2tfbmlkX3JhbmdlKHNiaSwgaW5vZGUtPmlfaW5vKSkgewpAQCAtMTE0LDExICsxNDAsMTkgQEAKIAlnZXRfZXh0ZW50X2luZm8oJmZpLT5leHQsIHJpLT5pX2V4dCk7CiAJZ2V0X2lubGluZV9pbmZvKGZpLCByaSk7CiAKKwkvKiBjaGVjayBkYXRhIGV4aXN0ICovCisJaWYgKGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSAmJiAhZjJmc19leGlzdF9kYXRhKGlub2RlKSkKKwkJZXJyID0gX19yZWNvdmVyX2lubGluZV9zdGF0dXMoaW5vZGUsIG5vZGVfcGFnZSk7CisKIAkvKiBnZXQgcmRldiBieSB1c2luZyBpbmxpbmVfaW5mbyAqLwogCV9fZ2V0X2lub2RlX3JkZXYoaW5vZGUsIHJpKTsKIAogCWYyZnNfcHV0X3BhZ2Uobm9kZV9wYWdlLCAxKTsKLQlyZXR1cm4gMDsKKworCXN0YXRfaW5jX2lubGluZV9pbm9kZShpbm9kZSk7CisJc3RhdF9pbmNfaW5saW5lX2Rpcihpbm9kZSk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdHJ1Y3QgaW5vZGUgKmYyZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubykKQEAgLTE1Niw3ICsxOTAsNyBAQAogCQlpbm9kZS0+aV9vcCA9ICZmMmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZS0+aV9mb3AgPSAmZjJmc19kaXJfb3BlcmF0aW9uczsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZjJmc19kYmxvY2tfYW9wczsKLQkJbWFwcGluZ19zZXRfZ2ZwX21hc2soaW5vZGUtPmlfbWFwcGluZywgR0ZQX0YyRlNfWkVSTyk7CisJCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGlub2RlLT5pX21hcHBpbmcsIEdGUF9GMkZTX0hJR0hfWkVSTyk7CiAJfSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmYyZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZmMmZzX2RibG9ja19hb3BzOwpAQCAtMjk1LDExICszMjksMTIgQEAKIAogCWYyZnNfbG9ja19vcChzYmkpOwogCXJlbW92ZV9pbm9kZV9wYWdlKGlub2RlKTsKLQlzdGF0X2RlY19pbmxpbmVfaW5vZGUoaW5vZGUpOwogCWYyZnNfdW5sb2NrX29wKHNiaSk7CiAKIAlzYl9lbmRfaW50d3JpdGUoaW5vZGUtPmlfc2IpOwogbm9fZGVsZXRlOgorCXN0YXRfZGVjX2lubGluZV9kaXIoaW5vZGUpOworCXN0YXRfZGVjX2lubGluZV9pbm9kZShpbm9kZSk7CiAJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKE5PREVfTUFQUElORyhzYmkpLCBpbm9kZS0+aV9pbm8sIGlub2RlLT5pX2lubyk7CiAJaWYgKHhuaWQpCiAJCWludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhOT0RFX01BUFBJTkcoc2JpKSwgeG5pZCwgeG5pZCk7CkBAIC0zMjUsOCArMzYwLDkgQEAKIAkJZjJmc190cnVuY2F0ZShpbm9kZSk7CiAKIAlyZW1vdmVfaW5vZGVfcGFnZShpbm9kZSk7Ci0Jc3RhdF9kZWNfaW5saW5lX2lub2RlKGlub2RlKTsKIAorCWNsZWFyX2lub2RlX2ZsYWcoRjJGU19JKGlub2RlKSwgRklfSU5MSU5FX0RBVEEpOworCWNsZWFyX2lub2RlX2ZsYWcoRjJGU19JKGlub2RlKSwgRklfSU5MSU5FX0RFTlRSWSk7CiAJYWxsb2NfbmlkX2ZhaWxlZChzYmksIGlub2RlLT5pX2lubyk7CiAJZjJmc191bmxvY2tfb3Aoc2JpKTsKIApkaWZmIC0tZ2l0IGEvZnMvZjJmcy9uYW1laS5jIGIvZnMvZjJmcy9uYW1laS5jCmluZGV4IDBkMjUyNmUuLjU0N2EyZGUgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvbmFtZWkuYworKysgYi9mcy9mMmZzL25hbWVpLmMKQEAgLTU0LDYgKzU0LDEyIEBACiAJCW5pZF9mcmVlID0gdHJ1ZTsKIAkJZ290byBvdXQ7CiAJfQorCisJaWYgKGYyZnNfbWF5X2lubGluZShpbm9kZSkpCisJCXNldF9pbm9kZV9mbGFnKEYyRlNfSShpbm9kZSksIEZJX0lOTElORV9EQVRBKTsKKwlpZiAodGVzdF9vcHQoc2JpLCBJTkxJTkVfREVOVFJZKSAmJiBTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQlzZXRfaW5vZGVfZmxhZyhGMkZTX0koaW5vZGUpLCBGSV9JTkxJTkVfREVOVFJZKTsKKwogCXRyYWNlX2YyZnNfbmV3X2lub2RlKGlub2RlLCAwKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlyZXR1cm4gaW5vZGU7CkBAIC0xMjksOCArMTM1LDEyIEBACiAKIAlhbGxvY19uaWRfZG9uZShzYmksIGlubyk7CiAKKwlzdGF0X2luY19pbmxpbmVfaW5vZGUoaW5vZGUpOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CisKKwlpZiAoSVNfRElSU1lOQyhkaXIpKQorCQlmMmZzX3N5bmNfZnMoc2JpLT5zYiwgMSk7CiAJcmV0dXJuIDA7CiBvdXQ6CiAJaGFuZGxlX2ZhaWxlZF9pbm9kZShpbm9kZSk7CkBAIC0xNTcsNiArMTY3LDkgQEAKIAlmMmZzX3VubG9ja19vcChzYmkpOwogCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKworCWlmIChJU19ESVJTWU5DKGRpcikpCisJCWYyZnNfc3luY19mcyhzYmktPnNiLCAxKTsKIAlyZXR1cm4gMDsKIG91dDoKIAljbGVhcl9pbm9kZV9mbGFnKEYyRlNfSShpbm9kZSksIEZJX0lOQ19MSU5LKTsKQEAgLTE4NywxNCArMjAwLDEyIEBACiAJZGUgPSBmMmZzX2ZpbmRfZW50cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsICZwYWdlKTsKIAlpZiAoZGUpIHsKIAkJbmlkX3QgaW5vID0gbGUzMl90b19jcHUoZGUtPmlubyk7Ci0JCWt1bm1hcChwYWdlKTsKKwkJZjJmc19kZW50cnlfa3VubWFwKGRpciwgcGFnZSk7CiAJCWYyZnNfcHV0X3BhZ2UocGFnZSwgMCk7CiAKIAkJaW5vZGUgPSBmMmZzX2lnZXQoZGlyLT5pX3NiLCBpbm8pOwogCQlpZiAoSVNfRVJSKGlub2RlKSkKIAkJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7Ci0KLQkJc3RhdF9pbmNfaW5saW5lX2lub2RlKGlub2RlKTsKIAl9CiAKIAlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CkBAIC0yMTksMTUgKzIzMCwxOCBAQAogCWVyciA9IGFjcXVpcmVfb3JwaGFuX2lub2RlKHNiaSk7CiAJaWYgKGVycikgewogCQlmMmZzX3VubG9ja19vcChzYmkpOwotCQlrdW5tYXAocGFnZSk7CisJCWYyZnNfZGVudHJ5X2t1bm1hcChkaXIsIHBhZ2UpOwogCQlmMmZzX3B1dF9wYWdlKHBhZ2UsIDApOwogCQlnb3RvIGZhaWw7CiAJfQotCWYyZnNfZGVsZXRlX2VudHJ5KGRlLCBwYWdlLCBpbm9kZSk7CisJZjJmc19kZWxldGVfZW50cnkoZGUsIHBhZ2UsIGRpciwgaW5vZGUpOwogCWYyZnNfdW5sb2NrX29wKHNiaSk7CiAKIAkvKiBJbiBvcmRlciB0byBldmljdCB0aGlzIGlub2RlLCB3ZSBzZXQgaXQgZGlydHkgKi8KIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKworCWlmIChJU19ESVJTWU5DKGRpcikpCisJCWYyZnNfc3luY19mcyhzYmktPnNiLCAxKTsKIGZhaWw6CiAJdHJhY2VfZjJmc191bmxpbmtfZXhpdChpbm9kZSwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjYxLDYgKzI3NSw5IEBACiAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOworCisJaWYgKElTX0RJUlNZTkMoZGlyKSkKKwkJZjJmc19zeW5jX2ZzKHNiaS0+c2IsIDEpOwogCXJldHVybiBlcnI7CiBvdXQ6CiAJaGFuZGxlX2ZhaWxlZF9pbm9kZShpbm9kZSk7CkBAIC0yOTEsMTEgKzMwOCwxNCBAQAogCQlnb3RvIG91dF9mYWlsOwogCWYyZnNfdW5sb2NrX29wKHNiaSk7CiAKKwlzdGF0X2luY19pbmxpbmVfZGlyKGlub2RlKTsKIAlhbGxvY19uaWRfZG9uZShzYmksIGlub2RlLT5pX2lubyk7CiAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwogCisJaWYgKElTX0RJUlNZTkMoZGlyKSkKKwkJZjJmc19zeW5jX2ZzKHNiaS0+c2IsIDEpOwogCXJldHVybiAwOwogCiBvdXRfZmFpbDoKQEAgLTMzOCw4ICszNTgsMTIgQEAKIAlmMmZzX3VubG9ja19vcChzYmkpOwogCiAJYWxsb2NfbmlkX2RvbmUoc2JpLCBpbm9kZS0+aV9pbm8pOworCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKKworCWlmIChJU19ESVJTWU5DKGRpcikpCisJCWYyZnNfc3luY19mcyhzYmktPnNiLCAxKTsKIAlyZXR1cm4gMDsKIG91dDoKIAloYW5kbGVfZmFpbGVkX2lub2RlKGlub2RlKTsKQEAgLTQzNSw3ICs0NTksNyBAQAogCW9sZF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiAKLQlmMmZzX2RlbGV0ZV9lbnRyeShvbGRfZW50cnksIG9sZF9wYWdlLCBOVUxMKTsKKwlmMmZzX2RlbGV0ZV9lbnRyeShvbGRfZW50cnksIG9sZF9wYWdlLCBvbGRfZGlyLCBOVUxMKTsKIAogCWlmIChvbGRfZGlyX2VudHJ5KSB7CiAJCWlmIChvbGRfZGlyICE9IG5ld19kaXIpIHsKQEAgLTQ0Myw3ICs0NjcsNyBAQAogCQkJCQkJb2xkX2Rpcl9wYWdlLCBuZXdfZGlyKTsKIAkJCXVwZGF0ZV9pbm9kZV9wYWdlKG9sZF9pbm9kZSk7CiAJCX0gZWxzZSB7Ci0JCQlrdW5tYXAob2xkX2Rpcl9wYWdlKTsKKwkJCWYyZnNfZGVudHJ5X2t1bm1hcChvbGRfaW5vZGUsIG9sZF9kaXJfcGFnZSk7CiAJCQlmMmZzX3B1dF9wYWdlKG9sZF9kaXJfcGFnZSwgMCk7CiAJCX0KIAkJZHJvcF9ubGluayhvbGRfZGlyKTsKQEAgLTQ1MiwxOSArNDc2LDIyIEBACiAJfQogCiAJZjJmc191bmxvY2tfb3Aoc2JpKTsKKworCWlmIChJU19ESVJTWU5DKG9sZF9kaXIpIHx8IElTX0RJUlNZTkMobmV3X2RpcikpCisJCWYyZnNfc3luY19mcyhzYmktPnNiLCAxKTsKIAlyZXR1cm4gMDsKIAogcHV0X291dF9kaXI6CiAJZjJmc191bmxvY2tfb3Aoc2JpKTsKLQlrdW5tYXAobmV3X3BhZ2UpOworCWYyZnNfZGVudHJ5X2t1bm1hcChuZXdfZGlyLCBuZXdfcGFnZSk7CiAJZjJmc19wdXRfcGFnZShuZXdfcGFnZSwgMCk7CiBvdXRfZGlyOgogCWlmIChvbGRfZGlyX2VudHJ5KSB7Ci0JCWt1bm1hcChvbGRfZGlyX3BhZ2UpOworCQlmMmZzX2RlbnRyeV9rdW5tYXAob2xkX2lub2RlLCBvbGRfZGlyX3BhZ2UpOwogCQlmMmZzX3B1dF9wYWdlKG9sZF9kaXJfcGFnZSwgMCk7CiAJfQogb3V0X29sZDoKLQlrdW5tYXAob2xkX3BhZ2UpOworCWYyZnNfZGVudHJ5X2t1bm1hcChvbGRfZGlyLCBvbGRfcGFnZSk7CiAJZjJmc19wdXRfcGFnZShvbGRfcGFnZSwgMCk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKQEAgLTU4OCw2ICs2MTUsOSBAQAogCXVwZGF0ZV9pbm9kZV9wYWdlKG5ld19kaXIpOwogCiAJZjJmc191bmxvY2tfb3Aoc2JpKTsKKworCWlmIChJU19ESVJTWU5DKG9sZF9kaXIpIHx8IElTX0RJUlNZTkMobmV3X2RpcikpCisJCWYyZnNfc3luY19mcyhzYmktPnNiLCAxKTsKIAlyZXR1cm4gMDsKIG91dF91bmRvOgogCS8qIFN0aWxsIHdlIG1heSBmYWlsIHRvIHJlY292ZXIgbmFtZSBpbmZvIG9mIGYyZnNfaW5vZGUgaGVyZSAqLwpAQCAtNTk2LDE5ICs2MjYsMTkgQEAKIAlmMmZzX3VubG9ja19vcChzYmkpOwogb3V0X25ld19kaXI6CiAJaWYgKG5ld19kaXJfZW50cnkpIHsKLQkJa3VubWFwKG5ld19kaXJfcGFnZSk7CisJCWYyZnNfZGVudHJ5X2t1bm1hcChuZXdfaW5vZGUsIG5ld19kaXJfcGFnZSk7CiAJCWYyZnNfcHV0X3BhZ2UobmV3X2Rpcl9wYWdlLCAwKTsKIAl9CiBvdXRfb2xkX2RpcjoKIAlpZiAob2xkX2Rpcl9lbnRyeSkgewotCQlrdW5tYXAob2xkX2Rpcl9wYWdlKTsKKwkJZjJmc19kZW50cnlfa3VubWFwKG9sZF9pbm9kZSwgb2xkX2Rpcl9wYWdlKTsKIAkJZjJmc19wdXRfcGFnZShvbGRfZGlyX3BhZ2UsIDApOwogCX0KIG91dF9uZXc6Ci0Ja3VubWFwKG5ld19wYWdlKTsKKwlmMmZzX2RlbnRyeV9rdW5tYXAobmV3X2RpciwgbmV3X3BhZ2UpOwogCWYyZnNfcHV0X3BhZ2UobmV3X3BhZ2UsIDApOwogb3V0X29sZDoKLQlrdW5tYXAob2xkX3BhZ2UpOworCWYyZnNfZGVudHJ5X2t1bm1hcChvbGRfZGlyLCBvbGRfcGFnZSk7CiAJZjJmc19wdXRfcGFnZShvbGRfcGFnZSwgMCk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvbm9kZS5jIGIvZnMvZjJmcy9ub2RlLmMKaW5kZXggNDRiOGFmZS4uZjgzMzI2YyAxMDA2NDQKLS0tIGEvZnMvZjJmcy9ub2RlLmMKKysrIGIvZnMvZjJmcy9ub2RlLmMKQEAgLTMxLDIyICszMSwzOCBAQAogewogCXN0cnVjdCBmMmZzX25tX2luZm8gKm5tX2kgPSBOTV9JKHNiaSk7CiAJc3RydWN0IHN5c2luZm8gdmFsOworCXVuc2lnbmVkIGxvbmcgYXZhaWxfcmFtOwogCXVuc2lnbmVkIGxvbmcgbWVtX3NpemUgPSAwOwogCWJvb2wgcmVzID0gZmFsc2U7CiAKIAlzaV9tZW1pbmZvKCZ2YWwpOwotCS8qIGdpdmUgMjUlLCAyNSUsIDUwJSBtZW1vcnkgZm9yIGVhY2ggY29tcG9uZW50cyByZXNwZWN0aXZlbHkgKi8KKworCS8qIG9ubHkgdXNlcyBsb3cgbWVtb3J5ICovCisJYXZhaWxfcmFtID0gdmFsLnRvdGFscmFtIC0gdmFsLnRvdGFsaGlnaDsKKworCS8qIGdpdmUgMjUlLCAyNSUsIDUwJSwgNTAlIG1lbW9yeSBmb3IgZWFjaCBjb21wb25lbnRzIHJlc3BlY3RpdmVseSAqLwogCWlmICh0eXBlID09IEZSRUVfTklEUykgewotCQltZW1fc2l6ZSA9IChubV9pLT5mY250ICogc2l6ZW9mKHN0cnVjdCBmcmVlX25pZCkpID4+IDEyOwotCQlyZXMgPSBtZW1fc2l6ZSA8ICgodmFsLnRvdGFscmFtICogbm1faS0+cmFtX3RocmVzaCAvIDEwMCkgPj4gMik7CisJCW1lbV9zaXplID0gKG5tX2ktPmZjbnQgKiBzaXplb2Yoc3RydWN0IGZyZWVfbmlkKSkgPj4KKwkJCQkJCQlQQUdFX0NBQ0hFX1NISUZUOworCQlyZXMgPSBtZW1fc2l6ZSA8ICgoYXZhaWxfcmFtICogbm1faS0+cmFtX3RocmVzaCAvIDEwMCkgPj4gMik7CiAJfSBlbHNlIGlmICh0eXBlID09IE5BVF9FTlRSSUVTKSB7Ci0JCW1lbV9zaXplID0gKG5tX2ktPm5hdF9jbnQgKiBzaXplb2Yoc3RydWN0IG5hdF9lbnRyeSkpID4+IDEyOwotCQlyZXMgPSBtZW1fc2l6ZSA8ICgodmFsLnRvdGFscmFtICogbm1faS0+cmFtX3RocmVzaCAvIDEwMCkgPj4gMik7CisJCW1lbV9zaXplID0gKG5tX2ktPm5hdF9jbnQgKiBzaXplb2Yoc3RydWN0IG5hdF9lbnRyeSkpID4+CisJCQkJCQkJUEFHRV9DQUNIRV9TSElGVDsKKwkJcmVzID0gbWVtX3NpemUgPCAoKGF2YWlsX3JhbSAqIG5tX2ktPnJhbV90aHJlc2ggLyAxMDApID4+IDIpOwogCX0gZWxzZSBpZiAodHlwZSA9PSBESVJUWV9ERU5UUykgewogCQlpZiAoc2JpLT5zYi0+c19iZGktPmRpcnR5X2V4Y2VlZGVkKQogCQkJcmV0dXJuIGZhbHNlOwogCQltZW1fc2l6ZSA9IGdldF9wYWdlcyhzYmksIEYyRlNfRElSVFlfREVOVFMpOwotCQlyZXMgPSBtZW1fc2l6ZSA8ICgodmFsLnRvdGFscmFtICogbm1faS0+cmFtX3RocmVzaCAvIDEwMCkgPj4gMSk7CisJCXJlcyA9IG1lbV9zaXplIDwgKChhdmFpbF9yYW0gKiBubV9pLT5yYW1fdGhyZXNoIC8gMTAwKSA+PiAxKTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gSU5PX0VOVFJJRVMpIHsKKwkJaW50IGk7CisKKwkJaWYgKHNiaS0+c2ItPnNfYmRpLT5kaXJ0eV9leGNlZWRlZCkKKwkJCXJldHVybiBmYWxzZTsKKwkJZm9yIChpID0gMDsgaSA8PSBVUERBVEVfSU5POyBpKyspCisJCQltZW1fc2l6ZSArPSAoc2JpLT5pbVtpXS5pbm9fbnVtICoKKwkJCQlzaXplb2Yoc3RydWN0IGlub19lbnRyeSkpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJCXJlcyA9IG1lbV9zaXplIDwgKChhdmFpbF9yYW0gKiBubV9pLT5yYW1fdGhyZXNoIC8gMTAwKSA+PiAxKTsKIAl9CiAJcmV0dXJuIHJlczsKIH0KQEAgLTEzMSw3ICsxNDcsNyBAQAogCiAJaWYgKGdldF9uYXRfZmxhZyhuZSwgSVNfRElSVFkpKQogCQlyZXR1cm47Ci1yZXRyeToKKwogCWhlYWQgPSByYWRpeF90cmVlX2xvb2t1cCgmbm1faS0+bmF0X3NldF9yb290LCBzZXQpOwogCWlmICghaGVhZCkgewogCQloZWFkID0gZjJmc19rbWVtX2NhY2hlX2FsbG9jKG5hdF9lbnRyeV9zZXRfc2xhYiwgR0ZQX0FUT01JQyk7CkBAIC0xNDAsMTEgKzE1Niw3IEBACiAJCUlOSVRfTElTVF9IRUFEKCZoZWFkLT5zZXRfbGlzdCk7CiAJCWhlYWQtPnNldCA9IHNldDsKIAkJaGVhZC0+ZW50cnlfY250ID0gMDsKLQotCQlpZiAocmFkaXhfdHJlZV9pbnNlcnQoJm5tX2ktPm5hdF9zZXRfcm9vdCwgc2V0LCBoZWFkKSkgewotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCQlnb3RvIHJldHJ5OwotCQl9CisJCWYyZnNfcmFkaXhfdHJlZV9pbnNlcnQoJm5tX2ktPm5hdF9zZXRfcm9vdCwgc2V0LCBoZWFkKTsKIAl9CiAJbGlzdF9tb3ZlX3RhaWwoJm5lLT5saXN0LCAmaGVhZC0+ZW50cnlfbGlzdCk7CiAJbm1faS0+ZGlydHlfbmF0X2NudCsrOwpAQCAtMTU1LDcgKzE2Nyw3IEBACiBzdGF0aWMgdm9pZCBfX2NsZWFyX25hdF9jYWNoZV9kaXJ0eShzdHJ1Y3QgZjJmc19ubV9pbmZvICpubV9pLAogCQkJCQkJc3RydWN0IG5hdF9lbnRyeSAqbmUpCiB7Ci0JbmlkX3Qgc2V0ID0gbmUtPm5pLm5pZCAvIE5BVF9FTlRSWV9QRVJfQkxPQ0s7CisJbmlkX3Qgc2V0ID0gTkFUX0JMT0NLX09GRlNFVChuZS0+bmkubmlkKTsKIAlzdHJ1Y3QgbmF0X2VudHJ5X3NldCAqaGVhZDsKIAogCWhlYWQgPSByYWRpeF90cmVlX2xvb2t1cCgmbm1faS0+bmF0X3NldF9yb290LCBzZXQpOwpAQCAtMTgwLDExICsxOTIsMTEgQEAKIAlzdHJ1Y3QgbmF0X2VudHJ5ICplOwogCWJvb2wgaXNfY3AgPSB0cnVlOwogCi0JcmVhZF9sb2NrKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKKwlkb3duX3JlYWQoJm5tX2ktPm5hdF90cmVlX2xvY2spOwogCWUgPSBfX2xvb2t1cF9uYXRfY2FjaGUobm1faSwgbmlkKTsKIAlpZiAoZSAmJiAhZ2V0X25hdF9mbGFnKGUsIElTX0NIRUNLUE9JTlRFRCkpCiAJCWlzX2NwID0gZmFsc2U7Ci0JcmVhZF91bmxvY2soJm5tX2ktPm5hdF90cmVlX2xvY2spOworCXVwX3JlYWQoJm5tX2ktPm5hdF90cmVlX2xvY2spOwogCXJldHVybiBpc19jcDsKIH0KIApAQCAtMTk0LDExICsyMDYsMTEgQEAKIAlzdHJ1Y3QgbmF0X2VudHJ5ICplOwogCWJvb2wgZnN5bmNlZCA9IGZhbHNlOwogCi0JcmVhZF9sb2NrKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKKwlkb3duX3JlYWQoJm5tX2ktPm5hdF90cmVlX2xvY2spOwogCWUgPSBfX2xvb2t1cF9uYXRfY2FjaGUobm1faSwgaW5vKTsKIAlpZiAoZSAmJiBnZXRfbmF0X2ZsYWcoZSwgSEFTX0ZTWU5DRURfSU5PREUpKQogCQlmc3luY2VkID0gdHJ1ZTsKLQlyZWFkX3VubG9jaygmbm1faS0+bmF0X3RyZWVfbG9jayk7CisJdXBfcmVhZCgmbm1faS0+bmF0X3RyZWVfbG9jayk7CiAJcmV0dXJuIGZzeW5jZWQ7CiB9CiAKQEAgLTIwOCwxMyArMjIwLDEzIEBACiAJc3RydWN0IG5hdF9lbnRyeSAqZTsKIAlib29sIG5lZWRfdXBkYXRlID0gdHJ1ZTsKIAotCXJlYWRfbG9jaygmbm1faS0+bmF0X3RyZWVfbG9jayk7CisJZG93bl9yZWFkKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKIAllID0gX19sb29rdXBfbmF0X2NhY2hlKG5tX2ksIGlubyk7CiAJaWYgKGUgJiYgZ2V0X25hdF9mbGFnKGUsIEhBU19MQVNUX0ZTWU5DKSAmJgogCQkJKGdldF9uYXRfZmxhZyhlLCBJU19DSEVDS1BPSU5URUQpIHx8CiAJCQkgZ2V0X25hdF9mbGFnKGUsIEhBU19GU1lOQ0VEX0lOT0RFKSkpCiAJCW5lZWRfdXBkYXRlID0gZmFsc2U7Ci0JcmVhZF91bmxvY2soJm5tX2ktPm5hdF90cmVlX2xvY2spOworCXVwX3JlYWQoJm5tX2ktPm5hdF90cmVlX2xvY2spOwogCXJldHVybiBuZWVkX3VwZGF0ZTsKIH0KIApAQCAtMjIyLDEzICsyMzQsOCBAQAogewogCXN0cnVjdCBuYXRfZW50cnkgKm5ldzsKIAotCW5ldyA9IGttZW1fY2FjaGVfYWxsb2MobmF0X2VudHJ5X3NsYWIsIEdGUF9BVE9NSUMpOwotCWlmICghbmV3KQotCQlyZXR1cm4gTlVMTDsKLQlpZiAocmFkaXhfdHJlZV9pbnNlcnQoJm5tX2ktPm5hdF9yb290LCBuaWQsIG5ldykpIHsKLQkJa21lbV9jYWNoZV9mcmVlKG5hdF9lbnRyeV9zbGFiLCBuZXcpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJbmV3ID0gZjJmc19rbWVtX2NhY2hlX2FsbG9jKG5hdF9lbnRyeV9zbGFiLCBHRlBfQVRPTUlDKTsKKwlmMmZzX3JhZGl4X3RyZWVfaW5zZXJ0KCZubV9pLT5uYXRfcm9vdCwgbmlkLCBuZXcpOwogCW1lbXNldChuZXcsIDAsIHNpemVvZihzdHJ1Y3QgbmF0X2VudHJ5KSk7CiAJbmF0X3NldF9uaWQobmV3LCBuaWQpOwogCW5hdF9yZXNldF9mbGFnKG5ldyk7CkBAIC0yNDEsMTggKzI0OCwxNCBAQAogCQkJCQkJc3RydWN0IGYyZnNfbmF0X2VudHJ5ICpuZSkKIHsKIAlzdHJ1Y3QgbmF0X2VudHJ5ICplOwotcmV0cnk6Ci0Jd3JpdGVfbG9jaygmbm1faS0+bmF0X3RyZWVfbG9jayk7CisKKwlkb3duX3dyaXRlKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKIAllID0gX19sb29rdXBfbmF0X2NhY2hlKG5tX2ksIG5pZCk7CiAJaWYgKCFlKSB7CiAJCWUgPSBncmFiX25hdF9lbnRyeShubV9pLCBuaWQpOwotCQlpZiAoIWUpIHsKLQkJCXdyaXRlX3VubG9jaygmbm1faS0+bmF0X3RyZWVfbG9jayk7Ci0JCQlnb3RvIHJldHJ5OwotCQl9CiAJCW5vZGVfaW5mb19mcm9tX3Jhd19uYXQoJmUtPm5pLCBuZSk7CiAJfQotCXdyaXRlX3VubG9jaygmbm1faS0+bmF0X3RyZWVfbG9jayk7CisJdXBfd3JpdGUoJm5tX2ktPm5hdF90cmVlX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfbm9kZV9hZGRyKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgc3RydWN0IG5vZGVfaW5mbyAqbmksCkBAIC0yNjAsMTUgKzI2MywxMSBAQAogewogCXN0cnVjdCBmMmZzX25tX2luZm8gKm5tX2kgPSBOTV9JKHNiaSk7CiAJc3RydWN0IG5hdF9lbnRyeSAqZTsKLXJldHJ5OgotCXdyaXRlX2xvY2soJm5tX2ktPm5hdF90cmVlX2xvY2spOworCisJZG93bl93cml0ZSgmbm1faS0+bmF0X3RyZWVfbG9jayk7CiAJZSA9IF9fbG9va3VwX25hdF9jYWNoZShubV9pLCBuaS0+bmlkKTsKIAlpZiAoIWUpIHsKIAkJZSA9IGdyYWJfbmF0X2VudHJ5KG5tX2ksIG5pLT5uaWQpOwotCQlpZiAoIWUpIHsKLQkJCXdyaXRlX3VubG9jaygmbm1faS0+bmF0X3RyZWVfbG9jayk7Ci0JCQlnb3RvIHJldHJ5OwotCQl9CiAJCWUtPm5pID0gKm5pOwogCQlmMmZzX2J1Z19vbihzYmksIG5pLT5ibGtfYWRkciA9PSBORVdfQUREUik7CiAJfSBlbHNlIGlmIChuZXdfYmxrYWRkciA9PSBORVdfQUREUikgewpAQCAtMzEwLDcgKzMwOSw3IEBACiAJCQlzZXRfbmF0X2ZsYWcoZSwgSEFTX0ZTWU5DRURfSU5PREUsIHRydWUpOwogCQlzZXRfbmF0X2ZsYWcoZSwgSEFTX0xBU1RfRlNZTkMsIGZzeW5jX2RvbmUpOwogCX0KLQl3cml0ZV91bmxvY2soJm5tX2ktPm5hdF90cmVlX2xvY2spOworCXVwX3dyaXRlKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKIH0KIAogaW50IHRyeV90b19mcmVlX25hdHMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBpbnQgbnJfc2hyaW5rKQpAQCAtMzIwLDcgKzMxOSw3IEBACiAJaWYgKGF2YWlsYWJsZV9mcmVlX21lbW9yeShzYmksIE5BVF9FTlRSSUVTKSkKIAkJcmV0dXJuIDA7CiAKLQl3cml0ZV9sb2NrKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKKwlkb3duX3dyaXRlKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKIAl3aGlsZSAobnJfc2hyaW5rICYmICFsaXN0X2VtcHR5KCZubV9pLT5uYXRfZW50cmllcykpIHsKIAkJc3RydWN0IG5hdF9lbnRyeSAqbmU7CiAJCW5lID0gbGlzdF9maXJzdF9lbnRyeSgmbm1faS0+bmF0X2VudHJpZXMsCkBAIC0zMjgsNyArMzI3LDcgQEAKIAkJX19kZWxfZnJvbV9uYXRfY2FjaGUobm1faSwgbmUpOwogCQlucl9zaHJpbmstLTsKIAl9Ci0Jd3JpdGVfdW5sb2NrKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKKwl1cF93cml0ZSgmbm1faS0+bmF0X3RyZWVfbG9jayk7CiAJcmV0dXJuIG5yX3NocmluazsKIH0KIApAQCAtMzUxLDE0ICszNTAsMTQgQEAKIAluaS0+bmlkID0gbmlkOwogCiAJLyogQ2hlY2sgbmF0IGNhY2hlICovCi0JcmVhZF9sb2NrKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKKwlkb3duX3JlYWQoJm5tX2ktPm5hdF90cmVlX2xvY2spOwogCWUgPSBfX2xvb2t1cF9uYXRfY2FjaGUobm1faSwgbmlkKTsKIAlpZiAoZSkgewogCQluaS0+aW5vID0gbmF0X2dldF9pbm8oZSk7CiAJCW5pLT5ibGtfYWRkciA9IG5hdF9nZXRfYmxrYWRkcihlKTsKIAkJbmktPnZlcnNpb24gPSBuYXRfZ2V0X3ZlcnNpb24oZSk7CiAJfQotCXJlYWRfdW5sb2NrKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKKwl1cF9yZWFkKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKIAlpZiAoZSkKIAkJcmV0dXJuOwogCkBAIC0xMjk4LDE2ICsxMjk3LDIyIEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICh3YmMtPmZvcl9yZWNsYWltKQotCQlnb3RvIHJlZGlydHlfb3V0OwotCi0JZG93bl9yZWFkKCZzYmktPm5vZGVfd3JpdGUpOworCWlmICh3YmMtPmZvcl9yZWNsYWltKSB7CisJCWlmICghZG93bl9yZWFkX3RyeWxvY2soJnNiaS0+bm9kZV93cml0ZSkpCisJCQlnb3RvIHJlZGlydHlfb3V0OworCX0gZWxzZSB7CisJCWRvd25fcmVhZCgmc2JpLT5ub2RlX3dyaXRlKTsKKwl9CiAJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCXdyaXRlX25vZGVfcGFnZShzYmksIHBhZ2UsICZmaW8sIG5pZCwgbmkuYmxrX2FkZHIsICZuZXdfYWRkcik7CiAJc2V0X25vZGVfYWRkcihzYmksICZuaSwgbmV3X2FkZHIsIGlzX2ZzeW5jX2Rub2RlKHBhZ2UpKTsKIAlkZWNfcGFnZV9jb3VudChzYmksIEYyRlNfRElSVFlfTk9ERVMpOwogCXVwX3JlYWQoJnNiaS0+bm9kZV93cml0ZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CisKKwlpZiAod2JjLT5mb3JfcmVjbGFpbSkKKwkJZjJmc19zdWJtaXRfbWVyZ2VkX2JpbyhzYmksIE5PREUsIFdSSVRFKTsKKwogCXJldHVybiAwOwogCiByZWRpcnR5X291dDoKQEAgLTE0MTAsMTMgKzE0MTUsMTMgQEAKIAogCWlmIChidWlsZCkgewogCQkvKiBkbyBub3QgYWRkIGFsbG9jYXRlZCBuaWRzICovCi0JCXJlYWRfbG9jaygmbm1faS0+bmF0X3RyZWVfbG9jayk7CisJCWRvd25fcmVhZCgmbm1faS0+bmF0X3RyZWVfbG9jayk7CiAJCW5lID0gX19sb29rdXBfbmF0X2NhY2hlKG5tX2ksIG5pZCk7CiAJCWlmIChuZSAmJgogCQkJKCFnZXRfbmF0X2ZsYWcobmUsIElTX0NIRUNLUE9JTlRFRCkgfHwKIAkJCQluYXRfZ2V0X2Jsa2FkZHIobmUpICE9IE5VTExfQUREUikpCiAJCQlhbGxvY2F0ZWQgPSB0cnVlOwotCQlyZWFkX3VubG9jaygmbm1faS0+bmF0X3RyZWVfbG9jayk7CisJCXVwX3JlYWQoJm5tX2ktPm5hdF90cmVlX2xvY2spOwogCQlpZiAoYWxsb2NhdGVkKQogCQkJcmV0dXJuIDA7CiAJfQpAQCAtMTQyNSwxNSArMTQzMCwyMiBAQAogCWktPm5pZCA9IG5pZDsKIAlpLT5zdGF0ZSA9IE5JRF9ORVc7CiAKKwlpZiAocmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9OT0ZTKSkgeworCQlrbWVtX2NhY2hlX2ZyZWUoZnJlZV9uaWRfc2xhYiwgaSk7CisJCXJldHVybiAwOworCX0KKwogCXNwaW5fbG9jaygmbm1faS0+ZnJlZV9uaWRfbGlzdF9sb2NrKTsKIAlpZiAocmFkaXhfdHJlZV9pbnNlcnQoJm5tX2ktPmZyZWVfbmlkX3Jvb3QsIGktPm5pZCwgaSkpIHsKIAkJc3Bpbl91bmxvY2soJm5tX2ktPmZyZWVfbmlkX2xpc3RfbG9jayk7CisJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKIAkJa21lbV9jYWNoZV9mcmVlKGZyZWVfbmlkX3NsYWIsIGkpOwogCQlyZXR1cm4gMDsKIAl9CiAJbGlzdF9hZGRfdGFpbCgmaS0+bGlzdCwgJm5tX2ktPmZyZWVfbmlkX2xpc3QpOwogCW5tX2ktPmZjbnQrKzsKIAlzcGluX3VubG9jaygmbm1faS0+ZnJlZV9uaWRfbGlzdF9sb2NrKTsKKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE4MDQsMjEgKzE4MTYsMTUgQEAKIAkJbmlkX3QgbmlkID0gbGUzMl90b19jcHUobmlkX2luX2pvdXJuYWwoc3VtLCBpKSk7CiAKIAkJcmF3X25lID0gbmF0X2luX2pvdXJuYWwoc3VtLCBpKTsKLXJldHJ5OgotCQl3cml0ZV9sb2NrKCZubV9pLT5uYXRfdHJlZV9sb2NrKTsKLQkJbmUgPSBfX2xvb2t1cF9uYXRfY2FjaGUobm1faSwgbmlkKTsKLQkJaWYgKG5lKQotCQkJZ290byBmb3VuZDsKIAotCQluZSA9IGdyYWJfbmF0X2VudHJ5KG5tX2ksIG5pZCk7CisJCWRvd25fd3JpdGUoJm5tX2ktPm5hdF90cmVlX2xvY2spOworCQluZSA9IF9fbG9va3VwX25hdF9jYWNoZShubV9pLCBuaWQpOwogCQlpZiAoIW5lKSB7Ci0JCQl3cml0ZV91bmxvY2soJm5tX2ktPm5hdF90cmVlX2xvY2spOwotCQkJZ290byByZXRyeTsKKwkJCW5lID0gZ3JhYl9uYXRfZW50cnkobm1faSwgbmlkKTsKKwkJCW5vZGVfaW5mb19mcm9tX3Jhd19uYXQoJm5lLT5uaSwgJnJhd19uZSk7CiAJCX0KLQkJbm9kZV9pbmZvX2Zyb21fcmF3X25hdCgmbmUtPm5pLCAmcmF3X25lKTsKLWZvdW5kOgogCQlfX3NldF9uYXRfY2FjaGVfZGlydHkobm1faSwgbmUpOwotCQl3cml0ZV91bmxvY2soJm5tX2ktPm5hdF90cmVlX2xvY2spOworCQl1cF93cml0ZSgmbm1faS0+bmF0X3RyZWVfbG9jayk7CiAJfQogCXVwZGF0ZV9uYXRzX2luX2N1cnN1bShzdW0sIC1pKTsKIAltdXRleF91bmxvY2soJmN1cnNlZy0+Y3Vyc2VnX211dGV4KTsKQEAgLTE4ODksMTAgKzE4OTUsMTAgQEAKIAkJfQogCQlyYXdfbmF0X2Zyb21fbm9kZV9pbmZvKHJhd19uZSwgJm5lLT5uaSk7CiAKLQkJd3JpdGVfbG9jaygmTk1fSShzYmkpLT5uYXRfdHJlZV9sb2NrKTsKKwkJZG93bl93cml0ZSgmTk1fSShzYmkpLT5uYXRfdHJlZV9sb2NrKTsKIAkJbmF0X3Jlc2V0X2ZsYWcobmUpOwogCQlfX2NsZWFyX25hdF9jYWNoZV9kaXJ0eShOTV9JKHNiaSksIG5lKTsKLQkJd3JpdGVfdW5sb2NrKCZOTV9JKHNiaSktPm5hdF90cmVlX2xvY2spOworCQl1cF93cml0ZSgmTk1fSShzYmkpLT5uYXRfdHJlZV9sb2NrKTsKIAogCQlpZiAobmF0X2dldF9ibGthZGRyKG5lKSA9PSBOVUxMX0FERFIpCiAJCQlhZGRfZnJlZV9uaWQoc2JpLCBuaWQsIGZhbHNlKTsKQEAgLTE5MDMsMTAgKzE5MDksMTAgQEAKIAllbHNlCiAJCWYyZnNfcHV0X3BhZ2UocGFnZSwgMSk7CiAKLQlpZiAoIXNldC0+ZW50cnlfY250KSB7Ci0JCXJhZGl4X3RyZWVfZGVsZXRlKCZOTV9JKHNiaSktPm5hdF9zZXRfcm9vdCwgc2V0LT5zZXQpOwotCQlrbWVtX2NhY2hlX2ZyZWUobmF0X2VudHJ5X3NldF9zbGFiLCBzZXQpOwotCX0KKwlmMmZzX2J1Z19vbihzYmksIHNldC0+ZW50cnlfY250KTsKKworCXJhZGl4X3RyZWVfZGVsZXRlKCZOTV9JKHNiaSktPm5hdF9zZXRfcm9vdCwgc2V0LT5zZXQpOworCWttZW1fY2FjaGVfZnJlZShuYXRfZW50cnlfc2V0X3NsYWIsIHNldCk7CiB9CiAKIC8qCkBAIC0xOTIzLDYgKzE5MjksOCBAQAogCW5pZF90IHNldF9pZHggPSAwOwogCUxJU1RfSEVBRChzZXRzKTsKIAorCWlmICghbm1faS0+ZGlydHlfbmF0X2NudCkKKwkJcmV0dXJuOwogCS8qCiAJICogaWYgdGhlcmUgYXJlIG5vIGVub3VnaCBzcGFjZSBpbiBqb3VybmFsIHRvIHN0b3JlIGRpcnR5IG5hdAogCSAqIGVudHJpZXMsIHJlbW92ZSBhbGwgZW50cmllcyBmcm9tIGpvdXJuYWwgYW5kIG1lcmdlIHRoZW0KQEAgLTE5MzEsOSArMTkzOSw2IEBACiAJaWYgKCFfX2hhc19jdXJzdW1fc3BhY2Uoc3VtLCBubV9pLT5kaXJ0eV9uYXRfY250LCBOQVRfSk9VUk5BTCkpCiAJCXJlbW92ZV9uYXRzX2luX2pvdXJuYWwoc2JpKTsKIAotCWlmICghbm1faS0+ZGlydHlfbmF0X2NudCkKLQkJcmV0dXJuOwotCiAJd2hpbGUgKChmb3VuZCA9IF9fZ2FuZ19sb29rdXBfbmF0X3NldChubV9pLAogCQkJCQlzZXRfaWR4LCBOQVRWRUNfU0laRSwgc2V0dmVjKSkpIHsKIAkJdW5zaWduZWQgaWR4OwpAQCAtMTk3MywxMyArMTk3OCwxMyBAQAogCiAJSU5JVF9SQURJWF9UUkVFKCZubV9pLT5mcmVlX25pZF9yb290LCBHRlBfQVRPTUlDKTsKIAlJTklUX0xJU1RfSEVBRCgmbm1faS0+ZnJlZV9uaWRfbGlzdCk7Ci0JSU5JVF9SQURJWF9UUkVFKCZubV9pLT5uYXRfcm9vdCwgR0ZQX0FUT01JQyk7Ci0JSU5JVF9SQURJWF9UUkVFKCZubV9pLT5uYXRfc2V0X3Jvb3QsIEdGUF9BVE9NSUMpOworCUlOSVRfUkFESVhfVFJFRSgmbm1faS0+bmF0X3Jvb3QsIEdGUF9OT0lPKTsKKwlJTklUX1JBRElYX1RSRUUoJm5tX2ktPm5hdF9zZXRfcm9vdCwgR0ZQX05PSU8pOwogCUlOSVRfTElTVF9IRUFEKCZubV9pLT5uYXRfZW50cmllcyk7CiAKIAltdXRleF9pbml0KCZubV9pLT5idWlsZF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmbm1faS0+ZnJlZV9uaWRfbGlzdF9sb2NrKTsKLQlyd2xvY2tfaW5pdCgmbm1faS0+bmF0X3RyZWVfbG9jayk7CisJaW5pdF9yd3NlbSgmbm1faS0+bmF0X3RyZWVfbG9jayk7CiAKIAlubV9pLT5uZXh0X3NjYW5fbmlkID0gbGUzMl90b19jcHUoc2JpLT5ja3B0LT5uZXh0X2ZyZWVfbmlkKTsKIAlubV9pLT5iaXRtYXBfc2l6ZSA9IF9fYml0bWFwX3NpemUoc2JpLCBOQVRfQklUTUFQKTsKQEAgLTIwMzUsNyArMjA0MCw3IEBACiAJc3Bpbl91bmxvY2soJm5tX2ktPmZyZWVfbmlkX2xpc3RfbG9jayk7CiAKIAkvKiBkZXN0cm95IG5hdCBjYWNoZSAqLwotCXdyaXRlX2xvY2soJm5tX2ktPm5hdF90cmVlX2xvY2spOworCWRvd25fd3JpdGUoJm5tX2ktPm5hdF90cmVlX2xvY2spOwogCXdoaWxlICgoZm91bmQgPSBfX2dhbmdfbG9va3VwX25hdF9jYWNoZShubV9pLAogCQkJCQluaWQsIE5BVFZFQ19TSVpFLCBuYXR2ZWMpKSkgewogCQl1bnNpZ25lZCBpZHg7CkBAIC0yMDQ0LDcgKzIwNDksNyBAQAogCQkJX19kZWxfZnJvbV9uYXRfY2FjaGUobm1faSwgbmF0dmVjW2lkeF0pOwogCX0KIAlmMmZzX2J1Z19vbihzYmksIG5tX2ktPm5hdF9jbnQpOwotCXdyaXRlX3VubG9jaygmbm1faS0+bmF0X3RyZWVfbG9jayk7CisJdXBfd3JpdGUoJm5tX2ktPm5hdF90cmVlX2xvY2spOwogCiAJa2ZyZWUobm1faS0+bmF0X2JpdG1hcCk7CiAJc2JpLT5ubV9pbmZvID0gTlVMTDsKQEAgLTIwNjEsMTcgKzIwNjYsMTcgQEAKIAlmcmVlX25pZF9zbGFiID0gZjJmc19rbWVtX2NhY2hlX2NyZWF0ZSgiZnJlZV9uaWQiLAogCQkJc2l6ZW9mKHN0cnVjdCBmcmVlX25pZCkpOwogCWlmICghZnJlZV9uaWRfc2xhYikKLQkJZ290byBkZXN0b3J5X25hdF9lbnRyeTsKKwkJZ290byBkZXN0cm95X25hdF9lbnRyeTsKIAogCW5hdF9lbnRyeV9zZXRfc2xhYiA9IGYyZnNfa21lbV9jYWNoZV9jcmVhdGUoIm5hdF9lbnRyeV9zZXQiLAogCQkJc2l6ZW9mKHN0cnVjdCBuYXRfZW50cnlfc2V0KSk7CiAJaWYgKCFuYXRfZW50cnlfc2V0X3NsYWIpCi0JCWdvdG8gZGVzdG9yeV9mcmVlX25pZDsKKwkJZ290byBkZXN0cm95X2ZyZWVfbmlkOwogCXJldHVybiAwOwogCi1kZXN0b3J5X2ZyZWVfbmlkOgorZGVzdHJveV9mcmVlX25pZDoKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZnJlZV9uaWRfc2xhYik7Ci1kZXN0b3J5X25hdF9lbnRyeToKK2Rlc3Ryb3lfbmF0X2VudHJ5OgogCWttZW1fY2FjaGVfZGVzdHJveShuYXRfZW50cnlfc2xhYik7CiBmYWlsOgogCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvZjJmcy9ub2RlLmggYi9mcy9mMmZzL25vZGUuaAppbmRleCA4ZDVlNmUwZC4uZDEwYjY0NCAxMDA2NDQKLS0tIGEvZnMvZjJmcy9ub2RlLmgKKysrIGIvZnMvZjJmcy9ub2RlLmgKQEAgLTEwNiw3ICsxMDYsOCBAQAogZW51bSBtZW1fdHlwZSB7CiAJRlJFRV9OSURTLAkvKiBpbmRpY2F0ZXMgdGhlIGZyZWUgbmlkIGxpc3QgKi8KIAlOQVRfRU5UUklFUywJLyogaW5kaWNhdGVzIHRoZSBjYWNoZWQgbmF0IGVudHJ5ICovCi0JRElSVFlfREVOVFMJLyogaW5kaWNhdGVzIGRpcnR5IGRlbnRyeSBwYWdlcyAqLworCURJUlRZX0RFTlRTLAkvKiBpbmRpY2F0ZXMgZGlydHkgZGVudHJ5IHBhZ2VzICovCisJSU5PX0VOVFJJRVMsCS8qIGluZGljYXRlcyBpbm9kZSBlbnRyaWVzICovCiB9OwogCiBzdHJ1Y3QgbmF0X2VudHJ5X3NldCB7CkBAIC0xOTIsMTAgKzE5Myw3IEBACiB7CiAJdW5zaWduZWQgaW50IGJsb2NrX29mZiA9IE5BVF9CTE9DS19PRkZTRVQoc3RhcnRfbmlkKTsKIAotCWlmIChmMmZzX3Rlc3RfYml0KGJsb2NrX29mZiwgbm1faS0+bmF0X2JpdG1hcCkpCi0JCWYyZnNfY2xlYXJfYml0KGJsb2NrX29mZiwgbm1faS0+bmF0X2JpdG1hcCk7Ci0JZWxzZQotCQlmMmZzX3NldF9iaXQoYmxvY2tfb2ZmLCBubV9pLT5uYXRfYml0bWFwKTsKKwlmMmZzX2NoYW5nZV9iaXQoYmxvY2tfb2ZmLCBubV9pLT5uYXRfYml0bWFwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZpbGxfbm9kZV9mb290ZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIG5pZF90IG5pZCwKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvcmVjb3ZlcnkuYyBiL2ZzL2YyZnMvcmVjb3ZlcnkuYwppbmRleCBlYmQwMTMyLi45MTYwYTM3IDEwMDY0NAotLS0gYS9mcy9mMmZzL3JlY292ZXJ5LmMKKysrIGIvZnMvZjJmcy9yZWNvdmVyeS5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkJCWlwdXQoZWlub2RlKTsKIAkJCWdvdG8gb3V0X3VubWFwX3B1dDsKIAkJfQotCQlmMmZzX2RlbGV0ZV9lbnRyeShkZSwgcGFnZSwgZWlub2RlKTsKKwkJZjJmc19kZWxldGVfZW50cnkoZGUsIHBhZ2UsIGRpciwgZWlub2RlKTsKIAkJaXB1dChlaW5vZGUpOwogCQlnb3RvIHJldHJ5OwogCX0KQEAgLTEyOSw3ICsxMjksNyBAQAogCWdvdG8gb3V0OwogCiBvdXRfdW5tYXBfcHV0OgotCWt1bm1hcChwYWdlKTsKKwlmMmZzX2RlbnRyeV9rdW5tYXAoZGlyLCBwYWdlKTsKIAlmMmZzX3B1dF9wYWdlKHBhZ2UsIDApOwogb3V0X2VycjoKIAlpcHV0KGRpcik7CkBAIC0xNzAsMTMgKzE3MCwxNSBAQAogCWN1cnNlZyA9IENVUlNFR19JKHNiaSwgQ1VSU0VHX1dBUk1fTk9ERSk7CiAJYmxrYWRkciA9IE5FWFRfRlJFRV9CTEtBRERSKHNiaSwgY3Vyc2VnKTsKIAorCXJhX21ldGFfcGFnZXMoc2JpLCBibGthZGRyLCAxLCBNRVRBX1BPUik7CisKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgZnN5bmNfaW5vZGVfZW50cnkgKmVudHJ5OwogCiAJCWlmIChibGthZGRyIDwgTUFJTl9CTEtBRERSKHNiaSkgfHwgYmxrYWRkciA+PSBNQVhfQkxLQUREUihzYmkpKQogCQkJcmV0dXJuIDA7CiAKLQkJcGFnZSA9IGdldF9tZXRhX3BhZ2VfcmEoc2JpLCBibGthZGRyKTsKKwkJcGFnZSA9IGdldF9tZXRhX3BhZ2Uoc2JpLCBibGthZGRyKTsKIAogCQlpZiAoY3BfdmVyICE9IGNwdmVyX29mX25vZGUocGFnZSkpCiAJCQlicmVhazsKQEAgLTIyNyw2ICsyMjksOCBAQAogCQkvKiBjaGVjayBuZXh0IHNlZ21lbnQgKi8KIAkJYmxrYWRkciA9IG5leHRfYmxrYWRkcl9vZl9ub2RlKHBhZ2UpOwogCQlmMmZzX3B1dF9wYWdlKHBhZ2UsIDEpOworCisJCXJhX21ldGFfcGFnZXNfY29uZChzYmksIGJsa2FkZHIpOwogCX0KIAlmMmZzX3B1dF9wYWdlKHBhZ2UsIDEpOwogCXJldHVybiBlcnI7CkBAIC00MzYsNyArNDQwLDkgQEAKIAkJaWYgKGJsa2FkZHIgPCBNQUlOX0JMS0FERFIoc2JpKSB8fCBibGthZGRyID49IE1BWF9CTEtBRERSKHNiaSkpCiAJCQlicmVhazsKIAotCQlwYWdlID0gZ2V0X21ldGFfcGFnZV9yYShzYmksIGJsa2FkZHIpOworCQlyYV9tZXRhX3BhZ2VzX2NvbmQoc2JpLCBibGthZGRyKTsKKworCQlwYWdlID0gZ2V0X21ldGFfcGFnZShzYmksIGJsa2FkZHIpOwogCiAJCWlmIChjcF92ZXIgIT0gY3B2ZXJfb2Zfbm9kZShwYWdlKSkgewogCQkJZjJmc19wdXRfcGFnZShwYWdlLCAxKTsKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvc2VnbWVudC5jIGIvZnMvZjJmcy9zZWdtZW50LmMKaW5kZXggOTIzY2I3Ni4uNDI2MDdhNiAxMDA2NDQKLS0tIGEvZnMvZjJmcy9zZWdtZW50LmMKKysrIGIvZnMvZjJmcy9zZWdtZW50LmMKQEAgLTE3OCwxNyArMTc4LDQ3IEBACiB7CiAJc3RydWN0IGYyZnNfaW5vZGVfaW5mbyAqZmkgPSBGMkZTX0koaW5vZGUpOwogCXN0cnVjdCBpbm1lbV9wYWdlcyAqbmV3OworCWludCBlcnI7CisKKwlTZXRQYWdlUHJpdmF0ZShwYWdlKTsKIAogCW5ldyA9IGYyZnNfa21lbV9jYWNoZV9hbGxvYyhpbm1lbV9lbnRyeV9zbGFiLCBHRlBfTk9GUyk7CiAKIAkvKiBhZGQgYXRvbWljIHBhZ2UgaW5kaWNlcyB0byB0aGUgbGlzdCAqLwogCW5ldy0+cGFnZSA9IHBhZ2U7CiAJSU5JVF9MSVNUX0hFQUQoJm5ldy0+bGlzdCk7Ci0KK3JldHJ5OgogCS8qIGluY3JlYXNlIHJlZmVyZW5jZSBjb3VudCB3aXRoIGNsZWFuIHN0YXRlICovCiAJbXV0ZXhfbG9jaygmZmktPmlubWVtX2xvY2spOworCWVyciA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZmaS0+aW5tZW1fcm9vdCwgcGFnZS0+aW5kZXgsIG5ldyk7CisJaWYgKGVyciA9PSAtRUVYSVNUKSB7CisJCW11dGV4X3VubG9jaygmZmktPmlubWVtX2xvY2spOworCQlrbWVtX2NhY2hlX2ZyZWUoaW5tZW1fZW50cnlfc2xhYiwgbmV3KTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoZXJyKSB7CisJCW11dGV4X3VubG9jaygmZmktPmlubWVtX2xvY2spOworCQlnb3RvIHJldHJ5OworCX0KIAlnZXRfcGFnZShwYWdlKTsKIAlsaXN0X2FkZF90YWlsKCZuZXctPmxpc3QsICZmaS0+aW5tZW1fcGFnZXMpOworCWluY19wYWdlX2NvdW50KEYyRlNfSV9TQihpbm9kZSksIEYyRlNfSU5NRU1fUEFHRVMpOworCW11dGV4X3VubG9jaygmZmktPmlubWVtX2xvY2spOworfQorCit2b2lkIGludmFsaWRhdGVfaW5tZW1fcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgZjJmc19pbm9kZV9pbmZvICpmaSA9IEYyRlNfSShpbm9kZSk7CisJc3RydWN0IGlubWVtX3BhZ2VzICpjdXI7CisKKwltdXRleF9sb2NrKCZmaS0+aW5tZW1fbG9jayk7CisJY3VyID0gcmFkaXhfdHJlZV9sb29rdXAoJmZpLT5pbm1lbV9yb290LCBwYWdlLT5pbmRleCk7CisJaWYgKGN1cikgeworCQlyYWRpeF90cmVlX2RlbGV0ZSgmZmktPmlubWVtX3Jvb3QsIGN1ci0+cGFnZS0+aW5kZXgpOworCQlmMmZzX3B1dF9wYWdlKGN1ci0+cGFnZSwgMCk7CisJCWxpc3RfZGVsKCZjdXItPmxpc3QpOworCQlrbWVtX2NhY2hlX2ZyZWUoaW5tZW1fZW50cnlfc2xhYiwgY3VyKTsKKwkJZGVjX3BhZ2VfY291bnQoRjJGU19JX1NCKGlub2RlKSwgRjJGU19JTk1FTV9QQUdFUyk7CisJfQogCW11dGV4X3VubG9jaygmZmktPmlubWVtX2xvY2spOwogfQogCkBAIC0yMDMsNyArMjMzLDE2IEBACiAJCS5ydyA9IFdSSVRFX1NZTkMsCiAJfTsKIAotCWYyZnNfYmFsYW5jZV9mcyhzYmkpOworCS8qCisJICogVGhlIGFib3J0IGlzIHRydWUgb25seSB3aGVuIGYyZnNfZXZpY3RfaW5vZGUgaXMgY2FsbGVkLgorCSAqIEJhc2ljYWxseSwgdGhlIGYyZnNfZXZpY3RfaW5vZGUgZG9lc24ndCBwcm9kdWNlIGFueSBkYXRhIHdyaXRlcywgc28KKwkgKiB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY2FsbCBmMmZzX2JhbGFuY2VfZnMuCisJICogT3RoZXJ3aXNlLCBmMmZzX2djIGluIGYyZnNfYmFsYW5jZV9mcyBjYW4gd2FpdCBmb3JldmVyIHVudGlsIHRoaXMKKwkgKiBpbm9kZSBiZWNvbWVzIGZyZWUgYnkgaWdldF9sb2NrZWQgaW4gZjJmc19pZ2V0LgorCSAqLworCWlmICghYWJvcnQpCisJCWYyZnNfYmFsYW5jZV9mcyhzYmkpOworCiAJZjJmc19sb2NrX29wKHNiaSk7CiAKIAltdXRleF9sb2NrKCZmaS0+aW5tZW1fbG9jayk7CkBAIC0yMTYsOSArMjU1LDExIEBACiAJCQlkb193cml0ZV9kYXRhX3BhZ2UoY3VyLT5wYWdlLCAmZmlvKTsKIAkJCXN1Ym1pdF9iaW8gPSB0cnVlOwogCQl9CisJCXJhZGl4X3RyZWVfZGVsZXRlKCZmaS0+aW5tZW1fcm9vdCwgY3VyLT5wYWdlLT5pbmRleCk7CiAJCWYyZnNfcHV0X3BhZ2UoY3VyLT5wYWdlLCAxKTsKIAkJbGlzdF9kZWwoJmN1ci0+bGlzdCk7CiAJCWttZW1fY2FjaGVfZnJlZShpbm1lbV9lbnRyeV9zbGFiLCBjdXIpOworCQlkZWNfcGFnZV9jb3VudChGMkZTX0lfU0IoaW5vZGUpLCBGMkZTX0lOTUVNX1BBR0VTKTsKIAl9CiAJaWYgKHN1Ym1pdF9iaW8pCiAJCWYyZnNfc3VibWl0X21lcmdlZF9iaW8oc2JpLCBEQVRBLCBXUklURSk7CkBAIC0yNDgsNyArMjg5LDggQEAKIHsKIAkvKiBjaGVjayB0aGUgIyBvZiBjYWNoZWQgTkFUIGVudHJpZXMgYW5kIHByZWZyZWUgc2VnbWVudHMgKi8KIAlpZiAodHJ5X3RvX2ZyZWVfbmF0cyhzYmksIE5BVF9FTlRSWV9QRVJfQkxPQ0spIHx8Ci0JCQkJZXhjZXNzX3ByZWZyZWVfc2VncyhzYmkpKQorCQkJZXhjZXNzX3ByZWZyZWVfc2VncyhzYmkpIHx8CisJCQlhdmFpbGFibGVfZnJlZV9tZW1vcnkoc2JpLCBJTk9fRU5UUklFUykpCiAJCWYyZnNfc3luY19mcyhzYmktPnNiLCB0cnVlKTsKIH0KIApAQCAtNDQxLDEwICs0ODMsMzMgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9kaXNjYXJkX2FkZHJzKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgc3RydWN0IGNwX2NvbnRyb2wgKmNwYykKK3N0YXRpYyB2b2lkIF9fYWRkX2Rpc2NhcmRfZW50cnkoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLAorCQlzdHJ1Y3QgY3BfY29udHJvbCAqY3BjLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZTTV9JKHNiaSktPmRpc2NhcmRfbGlzdDsKLQlzdHJ1Y3QgZGlzY2FyZF9lbnRyeSAqbmV3OworCXN0cnVjdCBkaXNjYXJkX2VudHJ5ICpuZXcsICpsYXN0OworCisJaWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCWxhc3QgPSBsaXN0X2xhc3RfZW50cnkoaGVhZCwgc3RydWN0IGRpc2NhcmRfZW50cnksIGxpc3QpOworCQlpZiAoU1RBUlRfQkxPQ0soc2JpLCBjcGMtPnRyaW1fc3RhcnQpICsgc3RhcnQgPT0KKwkJCQkJCWxhc3QtPmJsa2FkZHIgKyBsYXN0LT5sZW4pIHsKKwkJCWxhc3QtPmxlbiArPSBlbmQgLSBzdGFydDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCW5ldyA9IGYyZnNfa21lbV9jYWNoZV9hbGxvYyhkaXNjYXJkX2VudHJ5X3NsYWIsIEdGUF9OT0ZTKTsKKwlJTklUX0xJU1RfSEVBRCgmbmV3LT5saXN0KTsKKwluZXctPmJsa2FkZHIgPSBTVEFSVF9CTE9DSyhzYmksIGNwYy0+dHJpbV9zdGFydCkgKyBzdGFydDsKKwluZXctPmxlbiA9IGVuZCAtIHN0YXJ0OworCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgaGVhZCk7Citkb25lOgorCVNNX0koc2JpKS0+bnJfZGlzY2FyZHMgKz0gZW5kIC0gc3RhcnQ7CisJY3BjLT50cmltbWVkICs9IGVuZCAtIHN0YXJ0OworfQorCitzdGF0aWMgdm9pZCBhZGRfZGlzY2FyZF9hZGRycyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHN0cnVjdCBjcF9jb250cm9sICpjcGMpCit7CiAJaW50IGVudHJpZXMgPSBTSVRfVkJMT0NLX01BUF9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCWludCBtYXhfYmxvY2tzID0gc2JpLT5ibG9ja3NfcGVyX3NlZzsKIAlzdHJ1Y3Qgc2VnX2VudHJ5ICpzZSA9IGdldF9zZWdfZW50cnkoc2JpLCBjcGMtPnRyaW1fc3RhcnQpOwpAQCAtNDczLDEzICs1MzgsNyBAQAogCQl9CiAJCW11dGV4X3VubG9jaygmZGlydHlfaS0+c2VnbGlzdF9sb2NrKTsKIAotCQluZXcgPSBmMmZzX2ttZW1fY2FjaGVfYWxsb2MoZGlzY2FyZF9lbnRyeV9zbGFiLCBHRlBfTk9GUyk7Ci0JCUlOSVRfTElTVF9IRUFEKCZuZXctPmxpc3QpOwotCQluZXctPmJsa2FkZHIgPSBTVEFSVF9CTE9DSyhzYmksIGNwYy0+dHJpbV9zdGFydCk7Ci0JCW5ldy0+bGVuID0gc2JpLT5ibG9ja3NfcGVyX3NlZzsKLQkJbGlzdF9hZGRfdGFpbCgmbmV3LT5saXN0LCBoZWFkKTsKLQkJU01fSShzYmkpLT5ucl9kaXNjYXJkcyArPSBzYmktPmJsb2Nrc19wZXJfc2VnOwotCQljcGMtPnRyaW1tZWQgKz0gc2JpLT5ibG9ja3NfcGVyX3NlZzsKKwkJX19hZGRfZGlzY2FyZF9lbnRyeShzYmksIGNwYywgMCwgc2JpLT5ibG9ja3NfcGVyX3NlZyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQ4OSw3ICs1NDgsNyBAQAogCiAJLyogU0lUX1ZCTE9DS19NQVBfU0laRSBzaG91bGQgYmUgbXVsdGlwbGUgb2Ygc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICovCiAJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykKLQkJZG1hcFtpXSA9IChjdXJfbWFwW2ldIF4gY2twdF9tYXBbaV0pICYgY2twdF9tYXBbaV07CisJCWRtYXBbaV0gPSB+KGN1cl9tYXBbaV0gfCBja3B0X21hcFtpXSk7CiAKIAl3aGlsZSAoZm9yY2UgfHwgU01fSShzYmkpLT5ucl9kaXNjYXJkcyA8PSBTTV9JKHNiaSktPm1heF9kaXNjYXJkcykgewogCQlzdGFydCA9IF9fZmluZF9yZXZfbmV4dF9iaXQoZG1hcCwgbWF4X2Jsb2NrcywgZW5kICsgMSk7CkBAIC01MDEsMTQgKzU2MCw3IEBACiAJCWlmIChlbmQgLSBzdGFydCA8IGNwYy0+dHJpbV9taW5sZW4pCiAJCQljb250aW51ZTsKIAotCQluZXcgPSBmMmZzX2ttZW1fY2FjaGVfYWxsb2MoZGlzY2FyZF9lbnRyeV9zbGFiLCBHRlBfTk9GUyk7Ci0JCUlOSVRfTElTVF9IRUFEKCZuZXctPmxpc3QpOwotCQluZXctPmJsa2FkZHIgPSBTVEFSVF9CTE9DSyhzYmksIGNwYy0+dHJpbV9zdGFydCkgKyBzdGFydDsKLQkJbmV3LT5sZW4gPSBlbmQgLSBzdGFydDsKLQkJY3BjLT50cmltbWVkICs9IGVuZCAtIHN0YXJ0OwotCi0JCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgaGVhZCk7Ci0JCVNNX0koc2JpKS0+bnJfZGlzY2FyZHMgKz0gZW5kIC0gc3RhcnQ7CisJCV9fYWRkX2Rpc2NhcmRfZW50cnkoc2JpLCBjcGMsIHN0YXJ0LCBlbmQpOwogCX0KIH0KIApAQCAtNjIwLDEwICs2NzIsMTAgQEAKIAogCS8qIFVwZGF0ZSB2YWxpZCBibG9jayBiaXRtYXAgKi8KIAlpZiAoZGVsID4gMCkgewotCQlpZiAoZjJmc19zZXRfYml0KG9mZnNldCwgc2UtPmN1cl92YWxpZF9tYXApKQorCQlpZiAoZjJmc190ZXN0X2FuZF9zZXRfYml0KG9mZnNldCwgc2UtPmN1cl92YWxpZF9tYXApKQogCQkJZjJmc19idWdfb24oc2JpLCAxKTsKIAl9IGVsc2UgewotCQlpZiAoIWYyZnNfY2xlYXJfYml0KG9mZnNldCwgc2UtPmN1cl92YWxpZF9tYXApKQorCQlpZiAoIWYyZnNfdGVzdF9hbmRfY2xlYXJfYml0KG9mZnNldCwgc2UtPmN1cl92YWxpZF9tYXApKQogCQkJZjJmc19idWdfb24oc2JpLCAxKTsKIAl9CiAJaWYgKCFmMmZzX3Rlc3RfYml0KG9mZnNldCwgc2UtPmNrcHRfdmFsaWRfbWFwKSkKQEAgLTEwMDQsNiArMTA1Niw3IEBACiAJCQkJCQlyYW5nZS0+bGVuIDwgc2JpLT5ibG9ja3NpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJY3BjLnRyaW1tZWQgPSAwOwogCWlmIChlbmQgPD0gTUFJTl9CTEtBRERSKHNiaSkpCiAJCWdvdG8gb3V0OwogCkBAIC0xMDE1LDEwICsxMDY4LDExIEBACiAJY3BjLnRyaW1fc3RhcnQgPSBzdGFydF9zZWdubzsKIAljcGMudHJpbV9lbmQgPSBlbmRfc2Vnbm87CiAJY3BjLnRyaW1fbWlubGVuID0gcmFuZ2UtPm1pbmxlbiA+PiBzYmktPmxvZ19ibG9ja3NpemU7Ci0JY3BjLnRyaW1tZWQgPSAwOwogCiAJLyogZG8gY2hlY2twb2ludCB0byBpc3N1ZSBkaXNjYXJkIGNvbW1hbmRzIHNhZmVseSAqLworCW11dGV4X2xvY2soJnNiaS0+Z2NfbXV0ZXgpOwogCXdyaXRlX2NoZWNrcG9pbnQoc2JpLCAmY3BjKTsKKwltdXRleF91bmxvY2soJnNiaS0+Z2NfbXV0ZXgpOwogb3V0OgogCXJhbmdlLT5sZW4gPSBjcGMudHJpbW1lZCA8PCBzYmktPmxvZ19ibG9ja3NpemU7CiAJcmV0dXJuIDA7CkBAIC0xMDUwLDggKzExMDQsOCBAQAogCQllbHNlCiAJCQlyZXR1cm4gQ1VSU0VHX0NPTERfREFUQTsKIAl9IGVsc2UgewotCQlpZiAoSVNfRE5PREUocGFnZSkgJiYgIWlzX2NvbGRfbm9kZShwYWdlKSkKLQkJCXJldHVybiBDVVJTRUdfSE9UX05PREU7CisJCWlmIChJU19ETk9ERShwYWdlKSAmJiBpc19jb2xkX25vZGUocGFnZSkpCisJCQlyZXR1cm4gQ1VSU0VHX1dBUk1fTk9ERTsKIAkJZWxzZQogCQkJcmV0dXJuIENVUlNFR19DT0xEX05PREU7CiAJfQpAQCAtMTUyNCwxNyArMTU3OCw3IEBACiBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9jdXJyZW50X3NpdF9wYWdlKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwKIAkJCQkJdW5zaWduZWQgaW50IHNlZ25vKQogewotCXN0cnVjdCBzaXRfaW5mbyAqc2l0X2kgPSBTSVRfSShzYmkpOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSBTSVRfQkxPQ0tfT0ZGU0VUKHNlZ25vKTsKLQlibG9ja190IGJsa19hZGRyID0gc2l0X2ktPnNpdF9iYXNlX2FkZHIgKyBvZmZzZXQ7Ci0KLQljaGVja19zZWdfcmFuZ2Uoc2JpLCBzZWdubyk7Ci0KLQkvKiBjYWxjdWxhdGUgc2l0IGJsb2NrIGFkZHJlc3MgKi8KLQlpZiAoZjJmc190ZXN0X2JpdChvZmZzZXQsIHNpdF9pLT5zaXRfYml0bWFwKSkKLQkJYmxrX2FkZHIgKz0gc2l0X2ktPnNpdF9ibG9ja3M7Ci0KLQlyZXR1cm4gZ2V0X21ldGFfcGFnZShzYmksIGJsa19hZGRyKTsKKwlyZXR1cm4gZ2V0X21ldGFfcGFnZShzYmksIGN1cnJlbnRfc2l0X2FkZHIoc2JpLCBzZWdubykpOwogfQogCiBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9uZXh0X3NpdF9wYWdlKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwKQEAgLTE2ODcsNyArMTczMSw3IEBACiAJICogIzIsIGZsdXNoIHNpdCBlbnRyaWVzIHRvIHNpdCBwYWdlLgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXMsIHRtcCwgaGVhZCwgc2V0X2xpc3QpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAkJc3RydWN0IGYyZnNfc2l0X2Jsb2NrICpyYXdfc2l0ID0gTlVMTDsKIAkJdW5zaWduZWQgaW50IHN0YXJ0X3NlZ25vID0gc2VzLT5zdGFydF9zZWdubzsKIAkJdW5zaWduZWQgaW50IGVuZCA9IG1pbihzdGFydF9zZWdubyArIFNJVF9FTlRSWV9QRVJfQkxPQ0ssCkBAIC0yMjAwLDcgKzIyNDQsNyBAQAogCQlnb3RvIGZhaWw7CiAKIAlzaXRfZW50cnlfc2V0X3NsYWIgPSBmMmZzX2ttZW1fY2FjaGVfY3JlYXRlKCJzaXRfZW50cnlfc2V0IiwKLQkJCXNpemVvZihzdHJ1Y3QgbmF0X2VudHJ5X3NldCkpOworCQkJc2l6ZW9mKHN0cnVjdCBzaXRfZW50cnlfc2V0KSk7CiAJaWYgKCFzaXRfZW50cnlfc2V0X3NsYWIpCiAJCWdvdG8gZGVzdG9yeV9kaXNjYXJkX2VudHJ5OwogCmRpZmYgLS1naXQgYS9mcy9mMmZzL3NlZ21lbnQuaCBiL2ZzL2YyZnMvc2VnbWVudC5oCmluZGV4IDI0OTViZWMuLjdmMzI3YzAgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvc2VnbWVudC5oCisrKyBiL2ZzL2YyZnMvc2VnbWVudC5oCkBAIC02NTcsMTAgKzY1Nyw3IEBACiB7CiAJdW5zaWduZWQgaW50IGJsb2NrX29mZiA9IFNJVF9CTE9DS19PRkZTRVQoc3RhcnQpOwogCi0JaWYgKGYyZnNfdGVzdF9iaXQoYmxvY2tfb2ZmLCBzaXRfaS0+c2l0X2JpdG1hcCkpCi0JCWYyZnNfY2xlYXJfYml0KGJsb2NrX29mZiwgc2l0X2ktPnNpdF9iaXRtYXApOwotCWVsc2UKLQkJZjJmc19zZXRfYml0KGJsb2NrX29mZiwgc2l0X2ktPnNpdF9iaXRtYXApOworCWYyZnNfY2hhbmdlX2JpdChibG9ja19vZmYsIHNpdF9pLT5zaXRfYml0bWFwKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X210aW1lKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSkKQEAgLTcxNCw2ICs3MTEsOSBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBucl9wYWdlc190b19za2lwKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgaW50IHR5cGUpCiB7CisJaWYgKHNiaS0+c2ItPnNfYmRpLT5kaXJ0eV9leGNlZWRlZCkKKwkJcmV0dXJuIDA7CisKIAlpZiAodHlwZSA9PSBEQVRBKQogCQlyZXR1cm4gc2JpLT5ibG9ja3NfcGVyX3NlZzsKIAllbHNlIGlmICh0eXBlID09IE5PREUpCmRpZmYgLS1naXQgYS9mcy9mMmZzL3N1cGVyLmMgYi9mcy9mMmZzL3N1cGVyLmMKaW5kZXggNDFkNmY3MC4uZjcxNDIxZCAxMDA2NDQKLS0tIGEvZnMvZjJmcy9zdXBlci5jCisrKyBiL2ZzL2YyZnMvc3VwZXIuYwpAQCAtNTEsOCArNTEsMTAgQEAKIAlPcHRfZGlzYWJsZV9leHRfaWRlbnRpZnksCiAJT3B0X2lubGluZV94YXR0ciwKIAlPcHRfaW5saW5lX2RhdGEsCisJT3B0X2lubGluZV9kZW50cnksCiAJT3B0X2ZsdXNoX21lcmdlLAogCU9wdF9ub2JhcnJpZXIsCisJT3B0X2Zhc3Rib290LAogCU9wdF9lcnIsCiB9OwogCkBAIC02OSw4ICs3MSwxMCBAQAogCXtPcHRfZGlzYWJsZV9leHRfaWRlbnRpZnksICJkaXNhYmxlX2V4dF9pZGVudGlmeSJ9LAogCXtPcHRfaW5saW5lX3hhdHRyLCAiaW5saW5lX3hhdHRyIn0sCiAJe09wdF9pbmxpbmVfZGF0YSwgImlubGluZV9kYXRhIn0sCisJe09wdF9pbmxpbmVfZGVudHJ5LCAiaW5saW5lX2RlbnRyeSJ9LAogCXtPcHRfZmx1c2hfbWVyZ2UsICJmbHVzaF9tZXJnZSJ9LAogCXtPcHRfbm9iYXJyaWVyLCAibm9iYXJyaWVyIn0sCisJe09wdF9mYXN0Ym9vdCwgImZhc3Rib290In0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtMzQwLDEyICszNDQsMTggQEAKIAkJY2FzZSBPcHRfaW5saW5lX2RhdGE6CiAJCQlzZXRfb3B0KHNiaSwgSU5MSU5FX0RBVEEpOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2lubGluZV9kZW50cnk6CisJCQlzZXRfb3B0KHNiaSwgSU5MSU5FX0RFTlRSWSk7CisJCQlicmVhazsKIAkJY2FzZSBPcHRfZmx1c2hfbWVyZ2U6CiAJCQlzZXRfb3B0KHNiaSwgRkxVU0hfTUVSR0UpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vYmFycmllcjoKIAkJCXNldF9vcHQoc2JpLCBOT0JBUlJJRVIpOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Zhc3Rib290OgorCQkJc2V0X29wdChzYmksIEZBU1RCT09UKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZjJmc19tc2coc2IsIEtFUk5fRVJSLAogCQkJCSJVbnJlY29nbml6ZWQgbW91bnQgb3B0aW9uIFwiJXNcIiBvciBtaXNzaW5nIHZhbHVlIiwKQEAgLTM3Myw2ICszODMsNyBAQAogCWZpLT5pX2FkdmlzZSA9IDA7CiAJcndsb2NrX2luaXQoJmZpLT5leHQuZXh0X2xvY2spOwogCWluaXRfcndzZW0oJmZpLT5pX3NlbSk7CisJSU5JVF9SQURJWF9UUkVFKCZmaS0+aW5tZW1fcm9vdCwgR0ZQX05PRlMpOwogCUlOSVRfTElTVF9IRUFEKCZmaS0+aW5tZW1fcGFnZXMpOwogCW11dGV4X2luaXQoJmZpLT5pbm1lbV9sb2NrKTsKIApAQCAtNDczLDkgKzQ4NCw5IEBACiAJdHJhY2VfZjJmc19zeW5jX2ZzKHNiLCBzeW5jKTsKIAogCWlmIChzeW5jKSB7Ci0JCXN0cnVjdCBjcF9jb250cm9sIGNwYyA9IHsKLQkJCS5yZWFzb24gPSBDUF9TWU5DLAotCQl9OworCQlzdHJ1Y3QgY3BfY29udHJvbCBjcGM7CisKKwkJY3BjLnJlYXNvbiA9IHRlc3Rfb3B0KHNiaSwgRkFTVEJPT1QpID8gQ1BfVU1PVU5UIDogQ1BfU1lOQzsKIAkJbXV0ZXhfbG9jaygmc2JpLT5nY19tdXRleCk7CiAJCXdyaXRlX2NoZWNrcG9pbnQoc2JpLCAmY3BjKTsKIAkJbXV0ZXhfdW5sb2NrKCZzYmktPmdjX211dGV4KTsKQEAgLTU2MiwxMCArNTczLDE0IEBACiAJCXNlcV9wdXRzKHNlcSwgIixkaXNhYmxlX2V4dF9pZGVudGlmeSIpOwogCWlmICh0ZXN0X29wdChzYmksIElOTElORV9EQVRBKSkKIAkJc2VxX3B1dHMoc2VxLCAiLGlubGluZV9kYXRhIik7CisJaWYgKHRlc3Rfb3B0KHNiaSwgSU5MSU5FX0RFTlRSWSkpCisJCXNlcV9wdXRzKHNlcSwgIixpbmxpbmVfZGVudHJ5Iik7CiAJaWYgKCFmMmZzX3JlYWRvbmx5KHNiaS0+c2IpICYmIHRlc3Rfb3B0KHNiaSwgRkxVU0hfTUVSR0UpKQogCQlzZXFfcHV0cyhzZXEsICIsZmx1c2hfbWVyZ2UiKTsKIAlpZiAodGVzdF9vcHQoc2JpLCBOT0JBUlJJRVIpKQogCQlzZXFfcHV0cyhzZXEsICIsbm9iYXJyaWVyIik7CisJaWYgKHRlc3Rfb3B0KHNiaSwgRkFTVEJPT1QpKQorCQlzZXFfcHV0cyhzZXEsICIsZmFzdGJvb3QiKTsKIAlzZXFfcHJpbnRmKHNlcSwgIixhY3RpdmVfbG9ncz0ldSIsIHNiaS0+YWN0aXZlX2xvZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC02NTQsNyArNjY5LDcgQEAKIAkJCWYyZnNfc3luY19mcyhzYiwgMSk7CiAJCQluZWVkX3Jlc3RhcnRfZ2MgPSB0cnVlOwogCQl9Ci0JfSBlbHNlIGlmICh0ZXN0X29wdChzYmksIEJHX0dDKSAmJiAhc2JpLT5nY190aHJlYWQpIHsKKwl9IGVsc2UgaWYgKCFzYmktPmdjX3RocmVhZCkgewogCQllcnIgPSBzdGFydF9nY190aHJlYWQoc2JpKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gcmVzdG9yZV9vcHRzOwpAQCAtNjY3LDcgKzY4Miw3IEBACiAJICovCiAJaWYgKCgqZmxhZ3MgJiBNU19SRE9OTFkpIHx8ICF0ZXN0X29wdChzYmksIEZMVVNIX01FUkdFKSkgewogCQlkZXN0cm95X2ZsdXNoX2NtZF9jb250cm9sKHNiaSk7Ci0JfSBlbHNlIGlmICh0ZXN0X29wdChzYmksIEZMVVNIX01FUkdFKSAmJiAhU01fSShzYmkpLT5jbWRfY29udHJvbF9pbmZvKSB7CisJfSBlbHNlIGlmICghU01fSShzYmkpLT5jbWRfY29udHJvbF9pbmZvKSB7CiAJCWVyciA9IGNyZWF0ZV9mbHVzaF9jbWRfY29udHJvbChzYmkpOwogCQlpZiAoZXJyKQogCQkJZ290byByZXN0b3JlX2djOwpAQCAtOTIyLDcgKzkzNyw3IEBACiBzdGF0aWMgaW50IGYyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogewogCXN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaTsKLQlzdHJ1Y3QgZjJmc19zdXBlcl9ibG9jayAqcmF3X3N1cGVyOworCXN0cnVjdCBmMmZzX3N1cGVyX2Jsb2NrICpyYXdfc3VwZXIgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqcmF3X3N1cGVyX2J1ZjsKIAlzdHJ1Y3QgaW5vZGUgKnJvb3Q7CiAJbG9uZyBlcnIgPSAtRUlOVkFMOwpAQCAtMTEyMyw3ICsxMTM4LDcgQEAKIAkgKiBJZiBmaWxlc3lzdGVtIGlzIG5vdCBtb3VudGVkIGFzIHJlYWQtb25seSB0aGVuCiAJICogZG8gc3RhcnQgdGhlIGdjX3RocmVhZC4KIAkgKi8KLQlpZiAoIWYyZnNfcmVhZG9ubHkoc2IpKSB7CisJaWYgKHRlc3Rfb3B0KHNiaSwgQkdfR0MpICYmICFmMmZzX3JlYWRvbmx5KHNiKSkgewogCQkvKiBBZnRlciBQT1IsIHdlIGNhbiBydW4gYmFja2dyb3VuZCBHQyB0aHJlYWQuKi8KIAkJZXJyID0gc3RhcnRfZ2NfdGhyZWFkKHNiaSk7CiAJCWlmIChlcnIpCmRpZmYgLS1naXQgYS9mcy9mMmZzL3hhdHRyLmMgYi9mcy9mMmZzL3hhdHRyLmMKaW5kZXggZGVjYTg3Mi4uNTA3MmJmOSAxMDA2NDQKLS0tIGEvZnMvZjJmcy94YXR0ci5jCisrKyBiL2ZzL2YyZnMveGF0dHIuYwpAQCAtODMsNyArODMsNyBAQAogCX0KIAlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZjJmc19nZXR4YXR0cihkZW50cnktPmRfaW5vZGUsIHR5cGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIGYyZnNfZ2V0eGF0dHIoZGVudHJ5LT5kX2lub2RlLCB0eXBlLCBuYW1lLCBidWZmZXIsIHNpemUsIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IGYyZnNfeGF0dHJfZ2VuZXJpY19zZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLApAQCAtMzk4LDcgKzM5OCw3IEBACiB9CiAKIGludCBmMmZzX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSwKLQkJdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCisJCXZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplLCBzdHJ1Y3QgcGFnZSAqaXBhZ2UpCiB7CiAJc3RydWN0IGYyZnNfeGF0dHJfZW50cnkgKmVudHJ5OwogCXZvaWQgKmJhc2VfYWRkcjsKQEAgLTQxMiw3ICs0MTIsNyBAQAogCWlmIChsZW4gPiBGMkZTX05BTUVfTEVOKQogCQlyZXR1cm4gLUVSQU5HRTsKIAotCWJhc2VfYWRkciA9IHJlYWRfYWxsX3hhdHRycyhpbm9kZSwgTlVMTCk7CisJYmFzZV9hZGRyID0gcmVhZF9hbGxfeGF0dHJzKGlub2RlLCBpcGFnZSk7CiAJaWYgKCFiYXNlX2FkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9mcy9mMmZzL3hhdHRyLmggYi9mcy9mMmZzL3hhdHRyLmgKaW5kZXggMzRhYjdkYi4uOTY5ZDc5MiAxMDA2NDQKLS0tIGEvZnMvZjJmcy94YXR0ci5oCisrKyBiL2ZzL2YyZnMveGF0dHIuaApAQCAtMTE1LDcgKzExNSw4IEBACiAKIGV4dGVybiBpbnQgZjJmc19zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosCiAJCQkJY29uc3Qgdm9pZCAqLCBzaXplX3QsIHN0cnVjdCBwYWdlICosIGludCk7Ci1leHRlcm4gaW50IGYyZnNfZ2V0eGF0dHIoc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gaW50IGYyZnNfZ2V0eGF0dHIoc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCB2b2lkICosCisJCQkJCQlzaXplX3QsIHN0cnVjdCBwYWdlICopOwogZXh0ZXJuIHNzaXplX3QgZjJmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7CiAjZWxzZQogCkBAIC0xMjYsNyArMTI3LDggQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiBzdGF0aWMgaW5saW5lIGludCBmMmZzX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBpbmRleCwKLQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCisJCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCisJCQlzaXplX3QgYnVmZmVyX3NpemUsIHN0cnVjdCBwYWdlICpkcGFnZSkKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmMKaW5kZXggMzk2M2VkZS4uYzVkNmJiOSAxMDA2NDQKLS0tIGEvZnMvZmF0L2Rpci5jCisrKyBiL2ZzL2ZhdC9kaXIuYwpAQCAtNzAyLDEwICs3MDIsMTEgQEAKIH0KIAogI2RlZmluZSBGQVRfSU9DVExfRklMTERJUl9GVU5DKGZ1bmMsIGRpcmVudF90eXBlKQkJCSAgIFwKLXN0YXRpYyBpbnQgZnVuYyh2b2lkICpfX2J1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLAkJICAgXAorc3RhdGljIGludCBmdW5jKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZV9sZW4sICAgXAogCQkJICAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKSAgXAogewkJCQkJCQkJCSAgIFwKLQlzdHJ1Y3QgZmF0X2lvY3RsX2ZpbGxkaXJfY2FsbGJhY2sgKmJ1ZiA9IF9fYnVmOwkJCSAgIFwKKwlzdHJ1Y3QgZmF0X2lvY3RsX2ZpbGxkaXJfY2FsbGJhY2sgKmJ1ZiA9CQkJICAgXAorCQljb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgZmF0X2lvY3RsX2ZpbGxkaXJfY2FsbGJhY2ssIGN0eCk7IFwKIAlzdHJ1Y3QgZGlyZW50X3R5cGUgX191c2VyICpkMSA9IGJ1Zi0+ZGlyZW50OwkJCSAgIFwKIAlzdHJ1Y3QgZGlyZW50X3R5cGUgX191c2VyICpkMiA9IGQxICsgMTsJCQkJICAgXAogCQkJCQkJCQkJICAgXApkaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX3ZmYXQuYyBiL2ZzL2ZhdC9uYW1laV92ZmF0LmMKaW5kZXggNmRmOGQzZC4uYjhiOTJjMiAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuYworKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jCkBAIC03MzYsNyArNzM2LDEyIEBACiAJfQogCiAJYWxpYXMgPSBkX2ZpbmRfYWxpYXMoaW5vZGUpOwotCWlmIChhbGlhcyAmJiAhdmZhdF9kX2Fub25fZGlzY29ubihhbGlhcykpIHsKKwkvKgorCSAqIENoZWNraW5nICJhbGlhcy0+ZF9wYXJlbnQgPT0gZGVudHJ5LT5kX3BhcmVudCIgdG8gbWFrZSBzdXJlCisJICogRlMgaXMgbm90IGNvcnJ1cHRlZCAoZXNwZWNpYWxseSBkb3VibGUgbGlua2VkIGRpcikuCisJICovCisJaWYgKGFsaWFzICYmIGFsaWFzLT5kX3BhcmVudCA9PSBkZW50cnktPmRfcGFyZW50ICYmCisJICAgICF2ZmF0X2RfYW5vbl9kaXNjb25uKGFsaWFzKSkgewogCQkvKgogCQkgKiBUaGlzIGlub2RlIGhhcyBub24gYW5vbnltb3VzLURDQUNIRV9ESVNDT05ORUNURUQKIAkJICogZGVudHJ5LiBUaGlzIG1lYW5zLCB0aGUgdXNlciBkaWQgLT5sb29rdXAoKSBieSBhbgpAQCAtNzU1LDEyICs3NjAsOSBAQAogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZNU0RPU19TQihzYiktPnNfbG9jayk7Ci0JZGVudHJ5LT5kX3RpbWUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX3ZlcnNpb247Ci0JZGVudHJ5ID0gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7Ci0JaWYgKGRlbnRyeSkKLQkJZGVudHJ5LT5kX3RpbWUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX3ZlcnNpb247Ci0JcmV0dXJuIGRlbnRyeTsKLQorCWlmICghaW5vZGUpCisJCWRlbnRyeS0+ZF90aW1lID0gZGlyLT5pX3ZlcnNpb247CisJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOwogZXJyb3I6CiAJbXV0ZXhfdW5sb2NrKCZNU0RPU19TQihzYiktPnNfbG9jayk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKQEAgLTc5Myw3ICs3OTUsNiBAQAogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHRzOwogCS8qIHRpbWVzdGFtcCBpcyBhbHJlYWR5IHdyaXR0ZW4sIHNvIG1hcmtfaW5vZGVfZGlydHkoKSBpcyB1bm5lZWRlZC4gKi8KIAotCWRlbnRyeS0+ZF90aW1lID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZS0+aV92ZXJzaW9uOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZNU0RPU19TQihzYiktPnNfbG9jayk7CkBAIC04MjQsNiArODI1LDcgQEAKIAljbGVhcl9ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJZmF0X2RldGFjaChpbm9kZSk7CisJZGVudHJ5LT5kX3RpbWUgPSBkaXItPmlfdmVyc2lvbjsKIG91dDoKIAltdXRleF91bmxvY2soJk1TRE9TX1NCKHNiKS0+c19sb2NrKTsKIApAQCAtODQ5LDYgKzg1MSw3IEBACiAJY2xlYXJfbmxpbmsoaW5vZGUpOwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCWZhdF9kZXRhY2goaW5vZGUpOworCWRlbnRyeS0+ZF90aW1lID0gZGlyLT5pX3ZlcnNpb247CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZNU0RPU19TQihzYiktPnNfbG9jayk7CiAKQEAgLTg4OSw3ICs4OTIsNiBAQAogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHRzOwogCS8qIHRpbWVzdGFtcCBpcyBhbHJlYWR5IHdyaXR0ZW4sIHNvIG1hcmtfaW5vZGVfZGlydHkoKSBpcyB1bm5lZWRlZC4gKi8KIAotCWRlbnRyeS0+ZF90aW1lID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZS0+aV92ZXJzaW9uOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAKIAltdXRleF91bmxvY2soJk1TRE9TX1NCKHNiKS0+c19sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCBhYjNlYjZhLi5lZTczOGVhIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC04NjksNyArODY5LDcgQEAKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZnZXRfcmF3KGZpbGRlcyk7CiAKIAlpZiAoZmlsZSkgewotCQlyZXQgPSBnZXRfdW51c2VkX2ZkKCk7CisJCXJldCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoMCk7CiAJCWlmIChyZXQgPj0gMCkKIAkJCWZkX2luc3RhbGwocmV0LCBmaWxlKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggZGJhYjc5OC4uZGY1NjJjYyAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0zNzIsNyArMzcyLDcgQEAKIAlpZiAoaW5vZGUgJiYgZ2V0X25vZGVfaWQoaW5vZGUpID09IEZVU0VfUk9PVF9JRCkKIAkJZ290byBvdXRfaXB1dDsKIAotCW5ld2VudCA9IGRfbWF0ZXJpYWxpc2VfdW5pcXVlKGVudHJ5LCBpbm9kZSk7CisJbmV3ZW50ID0gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGVudHJ5KTsKIAllcnIgPSBQVFJfRVJSKG5ld2VudCk7CiAJaWYgKElTX0VSUihuZXdlbnQpKQogCQlnb3RvIG91dF9lcnI7CkBAIC0xMzIwLDcgKzEzMjAsNyBAQAogCWlmICghaW5vZGUpCiAJCWdvdG8gb3V0OwogCi0JYWxpYXMgPSBkX21hdGVyaWFsaXNlX3VuaXF1ZShkZW50cnksIGlub2RlKTsKKwlhbGlhcyA9IGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOwogCWVyciA9IFBUUl9FUlIoYWxpYXMpOwogCWlmIChJU19FUlIoYWxpYXMpKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggY2FhOGQ5NS4uYmY1MDI1OSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTE5ODgsNyArMTk4OCw3IEBACiAJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCiB7CiAJcGdvZmZfdCBpbmRleCA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGZpbGVfaW5vZGUoZmlsZSkpOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCWxvZmZfdCBmc2l6ZTsKIAlpbnQgZXJyID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZGlyLmMgYi9mcy9nZnMyL2Rpci5jCmluZGV4IDVkNDI2MWZmNS4uYzVhMzRmMCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kaXIuYworKysgYi9mcy9nZnMyL2Rpci5jCkBAIC0zNjUsMjMgKzM2NSwxNyBAQAogCiAJcmV0ID0gZ2ZzMl9kaXJfcmVhZF9kYXRhKGlwLCBoYywgaHNpemUpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWlmIChpc192bWFsbG9jX2FkZHIoaGMpKQotCQkJdmZyZWUoaGMpOwotCQllbHNlCi0JCQlrZnJlZShoYyk7CisJCWt2ZnJlZShoYyk7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQogCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlpZiAoaXAtPmlfaGFzaF9jYWNoZSkgewotCQlpZiAoaXNfdm1hbGxvY19hZGRyKGhjKSkKLQkJCXZmcmVlKGhjKTsKLQkJZWxzZQotCQkJa2ZyZWUoaGMpOwotCX0gZWxzZSB7CisJaWYgKGxpa2VseSghaXAtPmlfaGFzaF9jYWNoZSkpIHsKIAkJaXAtPmlfaGFzaF9jYWNoZSA9IGhjOworCQloYyA9IE5VTEw7CiAJfQogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlrdmZyZWUoaGMpOwogCiAJcmV0dXJuIGlwLT5pX2hhc2hfY2FjaGU7CiB9CkBAIC0zOTYsMTAgKzM5MCw3IEBACiB7CiAJX19iZTY0ICpoYyA9IGlwLT5pX2hhc2hfY2FjaGU7CiAJaXAtPmlfaGFzaF9jYWNoZSA9IE5VTEw7Ci0JaWYgKGlzX3ZtYWxsb2NfYWRkcihoYykpCi0JCXZmcmVlKGhjKTsKLQllbHNlCi0JCWtmcmVlKGhjKTsKKwlrdmZyZWUoaGMpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZnMyX2RpcmVudF9zZW50aW5lbChjb25zdCBzdHJ1Y3QgZ2ZzMl9kaXJlbnQgKmRlbnQpCkBAIC0xMTY4LDEwICsxMTU5LDcgQEAKIAlnZnMyX2Rpbm9kZV9vdXQoZGlwLCBkaWJoLT5iX2RhdGEpOwogCWJyZWxzZShkaWJoKTsKIG91dF9rZnJlZToKLQlpZiAoaXNfdm1hbGxvY19hZGRyKGhjMikpCi0JCXZmcmVlKGhjMik7Ci0JZWxzZQotCQlrZnJlZShoYzIpOworCWt2ZnJlZShoYzIpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTMwMiwxNCArMTI5MCw2IEBACiAJcmV0dXJuIHB0cjsKIH0KIAotc3RhdGljIHZvaWQgZ2ZzMl9mcmVlX3NvcnRfYnVmZmVyKHZvaWQgKnB0cikKLXsKLQlpZiAoaXNfdm1hbGxvY19hZGRyKHB0cikpCi0JCXZmcmVlKHB0cik7Ci0JZWxzZQotCQlrZnJlZShwdHIpOwotfQotCiBzdGF0aWMgaW50IGdmczJfZGlyX3JlYWRfbGVhZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwKIAkJCSAgICAgIGludCAqY29waWVkLCB1bnNpZ25lZCAqZGVwdGgsCiAJCQkgICAgICB1NjQgbGVhZl9ubykKQEAgLTEzOTMsNyArMTM3Myw3IEBACiBvdXRfZnJlZToKIAlmb3IoaSA9IDA7IGkgPCBsZWFmOyBpKyspCiAJCWJyZWxzZShsYXJyW2ldKTsKLQlnZnMyX2ZyZWVfc29ydF9idWZmZXIobGFycik7CisJa3ZmcmVlKGxhcnIpOwogb3V0OgogCXJldHVybiBlcnJvcjsKIH0KQEAgLTIwMDQsMTAgKzE5ODQsNyBAQAogCWdmczJfcmxpc3RfZnJlZSgmcmxpc3QpOwogCWdmczJfcXVvdGFfdW5ob2xkKGRpcCk7CiBvdXQ6Ci0JaWYgKGlzX3ZtYWxsb2NfYWRkcihodCkpCi0JCXZmcmVlKGh0KTsKLQllbHNlCi0JCWtmcmVlKGh0KTsKKwlrdmZyZWUoaHQpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9leHBvcnQuYyBiL2ZzL2dmczIvZXhwb3J0LmMKaW5kZXggOGI5YjM3Ny4uYzQxZDI1NSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9leHBvcnQuYworKysgYi9mcy9nZnMyL2V4cG9ydC5jCkBAIC02OSwxMCArNjksMTIgQEAKIAljaGFyICpuYW1lOwogfTsKIAotc3RhdGljIGludCBnZXRfbmFtZV9maWxsZGlyKHZvaWQgKm9wYXF1ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbmd0aCwKLQkJCSAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW51bSwgdW5zaWduZWQgaW50IHR5cGUpCitzdGF0aWMgaW50IGdldF9uYW1lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgaW50IGxlbmd0aCwgbG9mZl90IG9mZnNldCwgdTY0IGludW0sCisJCQkgICAgdW5zaWduZWQgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IGdldF9uYW1lX2ZpbGxkaXIgKmduZmQgPSBvcGFxdWU7CisJc3RydWN0IGdldF9uYW1lX2ZpbGxkaXIgKmduZmQgPQorCQljb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgZ2V0X25hbWVfZmlsbGRpciwgY3R4KTsKIAogCWlmIChpbnVtICE9IGduZmQtPmludW0ubm9fYWRkcikKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2ZpbGUuYyBiL2ZzL2dmczIvZmlsZS5jCmluZGV4IDgwZGQ0NGQuLjZlNjAwYWIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZmlsZS5jCisrKyBiL2ZzL2dmczIvZmlsZS5jCkBAIC0zMzcsNyArMzM3LDggQEAKIAlzaXplX3QgYmxrcyA9IChzaXplICsgc2RwLT5zZF9zYi5zYl9ic2l6ZSAtIDEpID4+IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQ7CiAJaW50IGhpbnQgPSBtaW5fdChzaXplX3QsIElOVF9NQVgsIGJsa3MpOwogCi0JYXRvbWljX3NldCgmaXAtPmlfcmVzLT5yc19zaXplaGludCwgaGludCk7CisJaWYgKGhpbnQgPiBhdG9taWNfcmVhZCgmaXAtPmlfcmVzLT5yc19zaXplaGludCkpCisJCWF0b21pY19zZXQoJmlwLT5pX3Jlcy0+cnNfc2l6ZWhpbnQsIGhpbnQpOwogfQogCiAvKioKQEAgLTcyOCw3ICs3MjksNiBAQAogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwogCWludCBlcnJvcjsKLQlsb2ZmX3Qgc2l6ZSA9IGxlbjsKIAl1bnNpZ25lZCBpbnQgbnJfYmxrczsKIAlzZWN0b3JfdCBsYmxvY2sgPSBvZmZzZXQgPj4gaW5vZGUtPmlfYmxrYml0czsKIApAQCAtNzYyLDExICs3NjIsNiBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0JaWYgKG9mZnNldCArIHNpemUgPiBpbm9kZS0+aV9zaXplICYmICEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpKQotCQlpX3NpemVfd3JpdGUoaW5vZGUsIG9mZnNldCArIHNpemUpOwotCi0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0KIG91dDoKIAlicmVsc2UoZGliaCk7CiAJcmV0dXJuIGVycm9yOwpAQCAtNzk2LDggKzc5MSw3IEBACiAJfQogfQogCi1zdGF0aWMgbG9uZyBnZnMyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCi0JCQkgICBsb2ZmX3QgbGVuKQorc3RhdGljIGxvbmcgX19nZnMyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGlub2RlKTsKQEAgLTgxMSwxNCArODA1LDkgQEAKIAlsb2ZmX3QgYnNpemVfbWFzayA9IH4oKGxvZmZfdClzZHAtPnNkX3NiLnNiX2JzaXplIC0gMSk7CiAJbG9mZl90IG5leHQgPSAob2Zmc2V0ICsgbGVuIC0gMSkgPj4gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdDsKIAlsb2ZmX3QgbWF4X2NodW5rX3NpemUgPSBVSU5UX01BWCAmIGJzaXplX21hc2s7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGdoOwogCiAJbmV4dCA9IChuZXh0ICsgMSkgPDwgc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdDsKIAotCS8qIFdlIG9ubHkgc3VwcG9ydCB0aGUgRkFMTE9DX0ZMX0tFRVBfU0laRSBtb2RlICovCi0JaWYgKG1vZGUgJiB+RkFMTE9DX0ZMX0tFRVBfU0laRSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJb2Zmc2V0ICY9IGJzaXplX21hc2s7CiAKIAlsZW4gPSBuZXh0IC0gb2Zmc2V0OwpAQCAtODI5LDE3ICs4MTgsNiBAQAogCWlmIChieXRlcyA9PSAwKQogCQlieXRlcyA9IHNkcC0+c2Rfc2Iuc2JfYnNpemU7CiAKLQllcnJvciA9IGdmczJfcnNfYWxsb2MoaXApOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCi0JZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmZ2gpOwotCWVycm9yID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOwotCWlmICh1bmxpa2VseShlcnJvcikpCi0JCWdvdG8gb3V0X3VuaW5pdDsKLQogCWdmczJfc2l6ZV9oaW50KGZpbGUsIG9mZnNldCwgbGVuKTsKIAogCXdoaWxlIChsZW4gPiAwKSB7CkBAIC04NTIsOCArODMwLDcgQEAKIAkJfQogCQllcnJvciA9IGdmczJfcXVvdGFfbG9ja19jaGVjayhpcCk7CiAJCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X3VubG9jazsKLQorCQkJcmV0dXJuIGVycm9yOwogcmV0cnk6CiAJCWdmczJfd3JpdGVfY2FsY19yZXNlcnYoaXAsIGJ5dGVzLCAmZGF0YV9ibG9ja3MsICZpbmRfYmxvY2tzKTsKIApAQCAtODk1LDIwICs4NzIsNjQgQEAKIAkJZ2ZzMl9xdW90YV91bmxvY2soaXApOwogCX0KIAotCWlmIChlcnJvciA9PSAwKQotCQllcnJvciA9IGdlbmVyaWNfd3JpdGVfc3luYyhmaWxlLCBwb3MsIGNvdW50KTsKLQlnb3RvIG91dF91bmxvY2s7CisJaWYgKCEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpICYmIChwb3MgKyBjb3VudCkgPiBpbm9kZS0+aV9zaXplKSB7CisJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zICsgY291bnQpOworCQkvKiBNYXJrcyB0aGUgaW5vZGUgYXMgZGlydHkgKi8KKwkJZmlsZV91cGRhdGVfdGltZShmaWxlKTsKKwl9CisKKwlyZXR1cm4gZ2VuZXJpY193cml0ZV9zeW5jKGZpbGUsIHBvcywgY291bnQpOwogCiBvdXRfdHJhbnNfZmFpbDoKIAlnZnMyX2lucGxhY2VfcmVsZWFzZShpcCk7CiBvdXRfcXVubG9jazoKIAlnZnMyX3F1b3RhX3VubG9jayhpcCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgbG9uZyBnZnMyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJaW50IHJldDsKKworCWlmIChtb2RlICYgfkZBTExPQ19GTF9LRUVQX1NJWkUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKworCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmdoKTsKKwlyZXQgPSBnZnMyX2dsb2NrX25xKCZnaCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5pbml0OworCisJaWYgKCEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpICYmCisJICAgIChvZmZzZXQgKyBsZW4pID4gaW5vZGUtPmlfc2l6ZSkgeworCQlyZXQgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBvZmZzZXQgKyBsZW4pOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXJldCA9IGdldF93cml0ZV9hY2Nlc3MoaW5vZGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJldCA9IGdmczJfcnNfYWxsb2MoaXApOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3B1dHc7CisKKwlyZXQgPSBfX2dmczJfZmFsbG9jYXRlKGZpbGUsIG1vZGUsIG9mZnNldCwgbGVuKTsKKwlpZiAocmV0KQorCQlnZnMyX3JzX2RlbHRyZWUoaXAtPmlfcmVzKTsKK291dF9wdXR3OgorCXB1dF93cml0ZV9hY2Nlc3MoaW5vZGUpOwogb3V0X3VubG9jazoKIAlnZnMyX2dsb2NrX2RxKCZnaCk7CiBvdXRfdW5pbml0OgogCWdmczJfaG9sZGVyX3VuaW5pdCgmZ2gpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCA4ZjBjMTlkLi5hMjM1MjRhIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC04MzYsOCArODM2LDcgQEAKIAlnaC0+Z2hfZmxhZ3MgPSBmbGFnczsKIAlnaC0+Z2hfaWZsYWdzID0gMDsKIAlnaC0+Z2hfaXAgPSBfUkVUX0lQXzsKLQlpZiAoZ2gtPmdoX293bmVyX3BpZCkKLQkJcHV0X3BpZChnaC0+Z2hfb3duZXJfcGlkKTsKKwlwdXRfcGlkKGdoLT5naF9vd25lcl9waWQpOwogCWdoLT5naF9vd25lcl9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKGN1cnJlbnQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5jIGIvZnMvZ2ZzMi9nbG9wcy5jCmluZGV4IDFjYzBiYmEuLmZlOTE5NTEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuYworKysgYi9mcy9nZnMyL2dsb3BzLmMKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJ0cmFucy5oIgogI2luY2x1ZGUgImRpci5oIgogCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZ2ZzMl9mcmVlemVfd3E7CisKIHN0YXRpYyB2b2lkIGdmczJfYWlsX2Vycm9yKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlmc19lcnIoZ2wtPmdsX3NiZCwgIkFJTCBidWZmZXIgJXA6IGJsb2NrbnIgJWxsdSBzdGF0ZSAweCUwOGx4IG1hcHBpbmcgJXAgcGFnZSBzdGF0ZSAweCVseFxuIiwKQEAgLTk0LDExICs5Niw4IEBACiAgICAgICAgICAqIG9uIHRoZSBzdGFjayAqLwogCXRyLnRyX3Jlc2VydmVkID0gMSArIGdmczJfc3RydWN0MmJsayhzZHAsIHRyLnRyX3Jldm9rZXMsIHNpemVvZih1NjQpKTsKIAl0ci50cl9pcCA9IF9SRVRfSVBfOwotCXNiX3N0YXJ0X2ludHdyaXRlKHNkcC0+c2RfdmZzKTsKLQlpZiAoZ2ZzMl9sb2dfcmVzZXJ2ZShzZHAsIHRyLnRyX3Jlc2VydmVkKSA8IDApIHsKLQkJc2JfZW5kX2ludHdyaXRlKHNkcC0+c2RfdmZzKTsKKwlpZiAoZ2ZzMl9sb2dfcmVzZXJ2ZShzZHAsIHRyLnRyX3Jlc2VydmVkKSA8IDApCiAJCXJldHVybjsKLQl9CiAJV0FSTl9PTl9PTkNFKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyk7CiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gJnRyOwogCkBAIC00NjksMjAgKzQ2OCwxOSBAQAogCiBzdGF0aWMgdm9pZCBmcmVlemVfZ29fc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7CisJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7Ci0JREVGSU5FX1dBSVQod2FpdCk7CiAKIAlpZiAoZ2wtPmdsX3N0YXRlID09IExNX1NUX1NIQVJFRCAmJgogCSAgICB0ZXN0X2JpdChTREZfSk9VUk5BTF9MSVZFLCAmc2RwLT5zZF9mbGFncykpIHsKLQkJYXRvbWljX3NldCgmc2RwLT5zZF9sb2dfZnJlZXplLCAxKTsKLQkJd2FrZV91cCgmc2RwLT5zZF9sb2dkX3dhaXRxKTsKLQkJZG8gewotCQkJcHJlcGFyZV90b193YWl0KCZzZHAtPnNkX2xvZ19mcm96ZW5fd2FpdCwgJndhaXQsCi0JCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCWlmIChhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfZnJlZXplKSkKLQkJCQlpb19zY2hlZHVsZSgpOwotCQl9IHdoaWxlKGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ19mcmVlemUpKTsKLQkJZmluaXNoX3dhaXQoJnNkcC0+c2RfbG9nX2Zyb3plbl93YWl0LCAmd2FpdCk7CisJCWF0b21pY19zZXQoJnNkcC0+c2RfZnJlZXplX3N0YXRlLCBTRlNfU1RBUlRJTkdfRlJFRVpFKTsKKwkJZXJyb3IgPSBmcmVlemVfc3VwZXIoc2RwLT5zZF92ZnMpOworCQlpZiAoZXJyb3IpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IGNvdWxkbid0IGZyZWV6ZSBmaWxlc3lzdGVtOiAlZFxuIiwgZXJyb3IpOworCQkJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAwKTsKKwkJfQorCQlxdWV1ZV93b3JrKGdmczJfZnJlZXplX3dxLCAmc2RwLT5zZF9mcmVlemVfd29yayk7CisJCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCwgRlJFRVpFX0ZMVVNIKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvcHMuaCBiL2ZzL2dmczIvZ2xvcHMuaAppbmRleCA3NDU1ZDI2Li44ZWQxODU3IDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb3BzLmgKKysrIGIvZnMvZ2ZzMi9nbG9wcy5oCkBAIC0xMiw2ICsxMiw4IEBACiAKICNpbmNsdWRlICJpbmNvcmUuaCIKIAorZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpnZnMyX2ZyZWV6ZV93cTsKKwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9tZXRhX2dsb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9pbm9kZV9nbG9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfcmdycF9nbG9wczsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5jb3JlLmggYi9mcy9nZnMyL2luY29yZS5oCmluZGV4IDM5ZTdlOTkuLjdhMmRiYmMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5jb3JlLmgKKysrIGIvZnMvZ2ZzMi9pbmNvcmUuaApAQCAtOTcsNiArOTcsNyBAQAogI2RlZmluZSBHRlMyX1JERl9DSEVDSwkJMHgxMDAwMDAwMCAvKiBjaGVjayBmb3IgdW5saW5rZWQgaW5vZGVzICovCiAjZGVmaW5lIEdGUzJfUkRGX1VQVE9EQVRFCTB4MjAwMDAwMDAgLyogcmcgaXMgdXAgdG8gZGF0ZSAqLwogI2RlZmluZSBHRlMyX1JERl9FUlJPUgkJMHg0MDAwMDAwMCAvKiBlcnJvciBpbiByZyAqLworI2RlZmluZSBHRlMyX1JERl9QUkVGRVJSRUQJMHg4MDAwMDAwMCAvKiBUaGlzIHJncnAgaXMgcHJlZmVycmVkICovCiAjZGVmaW5lIEdGUzJfUkRGX01BU0sJCTB4ZjAwMDAwMDAgLyogbWFzayBmb3IgaW50ZXJuYWwgZmxhZ3MgKi8KIAlzcGlubG9ja190IHJkX3Jzc3BpbjsgICAgICAgICAgIC8qIHByb3RlY3RzIHJlc2VydmF0aW9uIHJlbGF0ZWQgdmFycyAqLwogCXN0cnVjdCByYl9yb290IHJkX3JzdHJlZTsgICAgICAgLyogbXVsdGktYmxvY2sgcmVzZXJ2YXRpb24gdHJlZSAqLwpAQCAtNTg3LDYgKzU4OCwxMiBAQAogCVNERl9TS0lQX0RMTV9VTkxPQ0sJPSA4LAogfTsKIAorZW51bSBnZnMyX2ZyZWV6ZV9zdGF0ZSB7CisJU0ZTX1VORlJPWkVOCQk9IDAsCisJU0ZTX1NUQVJUSU5HX0ZSRUVaRQk9IDEsCisJU0ZTX0ZST1pFTgkJPSAyLAorfTsKKwogI2RlZmluZSBHRlMyX0ZTTkFNRV9MRU4JCTI1NgogCiBzdHJ1Y3QgZ2ZzMl9pbnVtX2hvc3QgewpAQCAtNjg0LDYgKzY5MSw3IEBACiAJc3RydWN0IGdmczJfaG9sZGVyIHNkX2xpdmVfZ2g7CiAJc3RydWN0IGdmczJfZ2xvY2sgKnNkX3JlbmFtZV9nbDsKIAlzdHJ1Y3QgZ2ZzMl9nbG9jayAqc2RfZnJlZXplX2dsOworCXN0cnVjdCB3b3JrX3N0cnVjdCBzZF9mcmVlemVfd29yazsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBzZF9nbG9ja193YWl0OwogCWF0b21pY190IHNkX2dsb2NrX2Rpc3Bvc2FsOwogCXN0cnVjdCBjb21wbGV0aW9uIHNkX2xvY2tpbmdfaW5pdDsKQEAgLTc4OCw2ICs3OTYsOSBAQAogCXdhaXRfcXVldWVfaGVhZF90IHNkX2xvZ19mbHVzaF93YWl0OwogCWludCBzZF9sb2dfZXJyb3I7CiAKKwlhdG9taWNfdCBzZF9yZXNlcnZpbmdfbG9nOworCXdhaXRfcXVldWVfaGVhZF90IHNkX3Jlc2VydmluZ19sb2dfd2FpdDsKKwogCXVuc2lnbmVkIGludCBzZF9sb2dfZmx1c2hfaGVhZDsKIAl1NjQgc2RfbG9nX2ZsdXNoX3dyYXBwZWQ7CiAKQEAgLTc5NywxMiArODA4LDggQEAKIAogCS8qIEZvciBxdWllc2NpbmcgdGhlIGZpbGVzeXN0ZW0gKi8KIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgc2RfZnJlZXplX2doOwotCXN0cnVjdCBnZnMyX2hvbGRlciBzZF9mcmVlemVfcm9vdF9naDsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgc2RfdGhhd19naDsKLQlhdG9taWNfdCBzZF9sb2dfZnJlZXplOwotCWF0b21pY190IHNkX2Zyb3plbl9yb290OwotCXdhaXRfcXVldWVfaGVhZF90IHNkX2Zyb3plbl9yb290X3dhaXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgc2RfbG9nX2Zyb3plbl93YWl0OworCWF0b21pY190IHNkX2ZyZWV6ZV9zdGF0ZTsKKwlzdHJ1Y3QgbXV0ZXggc2RfZnJlZXplX211dGV4OwogCiAJY2hhciBzZF9mc25hbWVbR0ZTMl9GU05BTUVfTEVOXTsKIAljaGFyIHNkX3RhYmxlX25hbWVbR0ZTMl9GU05BTUVfTEVOXTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCBjNGVkODIzLi45MDU0MDAyIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC01OTYsNyArNTk2LDYgQEAKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKGRpciksICppcDsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmRpcC0+aV9pbm9kZSk7CiAJc3RydWN0IGdmczJfZ2xvY2sgKmlvX2dsOwotCXN0cnVjdCBkZW50cnkgKmQ7CiAJaW50IGVycm9yLCBmcmVlX3Zmc19pbm9kZSA9IDA7CiAJdTMyIGFmbGFncyA9IDA7CiAJdW5zaWduZWQgYmxvY2tzID0gMTsKQEAgLTYyNCwyMiArNjIzLDE4IEBACiAJaW5vZGUgPSBnZnMyX2Rpcl9zZWFyY2goZGlyLCAmZGVudHJ5LT5kX25hbWUsICFTX0lTUkVHKG1vZGUpIHx8IGV4Y2wpOwogCWVycm9yID0gUFRSX0VSUihpbm9kZSk7CiAJaWYgKCFJU19FUlIoaW5vZGUpKSB7Ci0JCWQgPSBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKLQkJZXJyb3IgPSBQVFJfRVJSKGQpOwotCQlpZiAoSVNfRVJSKGQpKSB7Ci0JCQlpbm9kZSA9IEVSUl9DQVNUKGQpOworCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQkJaXB1dChpbm9kZSk7CisJCQlpbm9kZSA9IEVSUl9QVFIoLUVJU0RJUik7CiAJCQlnb3RvIGZhaWxfZ3VubG9jazsKIAkJfQorCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCQllcnJvciA9IDA7CiAJCWlmIChmaWxlKSB7Ci0JCQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQkJCVdBUk5fT04oZCAhPSBOVUxMKTsKKwkJCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKQogCQkJCWVycm9yID0gZmluaXNoX29wZW4oZmlsZSwgZGVudHJ5LCBnZnMyX29wZW5fY29tbW9uLCBvcGVuZWQpOwotCQkJfSBlbHNlIHsKLQkJCQllcnJvciA9IGZpbmlzaF9ub19vcGVuKGZpbGUsIGQpOwotCQkJfQotCQl9IGVsc2UgewotCQkJZHB1dChkKTsKKwkJCWVsc2UKKwkJCQllcnJvciA9IGZpbmlzaF9ub19vcGVuKGZpbGUsIE5VTEwpOwogCQl9CiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KGdocyk7CiAJCXJldHVybiBlcnJvcjsKQEAgLTEwNDUsMTEgKzEwNDAsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBnZnMyX2Rpcl9jaGVjaygmZGlwLT5pX2lub2RlLCBuYW1lLCBpcCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2ZzMl9kaXJfY2hlY2soJmRpcC0+aV9pbm9kZSwgbmFtZSwgaXApOwogfQogCiAvKioKQEAgLTEyNTQsMTEgKzEyNDUsOCBAQAogCWlmIChkICE9IE5VTEwpCiAJCWRlbnRyeSA9IGQ7CiAJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgewotCQlpZiAoISgqb3BlbmVkICYgRklMRV9PUEVORUQpKSB7Ci0JCQlpZiAoZCA9PSBOVUxMKQotCQkJCWRnZXQoZGVudHJ5KTsKLQkJCXJldHVybiBmaW5pc2hfbm9fb3BlbihmaWxlLCBkZW50cnkpOwotCQl9CisJCWlmICghKCpvcGVuZWQgJiBGSUxFX09QRU5FRCkpCisJCQlyZXR1cm4gZmluaXNoX25vX29wZW4oZmlsZSwgZCk7CiAJCWRwdXQoZCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE2MjIsMjYgKzE2MTAsMTggQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXA7CiAJc3RydWN0IGdmczJfaG9sZGVyIGlfZ2g7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGlub2RlKTsKIAlpbnQgZXJyb3I7CiAJaW50IHVubG9jayA9IDA7Ci0JaW50IGZyb3plbl9yb290ID0gMDsKIAogCiAJaXAgPSBHRlMyX0koaW5vZGUpOwogCWlmIChnZnMyX2dsb2NrX2lzX2xvY2tlZF9ieV9tZShpcC0+aV9nbCkgPT0gTlVMTCkgewotCQlpZiAodW5saWtlbHkoZ2ZzMl9nbG9ja19pc19oZWxkX2V4Y2woc2RwLT5zZF9mcmVlemVfZ2wpICYmCi0JCQkgICAgIGlub2RlID09IHNkcC0+c2Rfcm9vdF9kaXItPmRfaW5vZGUgJiYKLQkJCSAgICAgYXRvbWljX2luY19ub3RfemVybygmc2RwLT5zZF9mcm96ZW5fcm9vdCkpKQotCQkJZnJvemVuX3Jvb3QgPSAxOwotCQllbHNlIHsKLQkJCWlmIChtYXNrICYgTUFZX05PVF9CTE9DSykKLQkJCQlyZXR1cm4gLUVDSElMRDsKLQkJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmaV9naCk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJcmV0dXJuIGVycm9yOwotCQkJdW5sb2NrID0gMTsKLQkJfQorCQlpZiAobWFzayAmIE1BWV9OT1RfQkxPQ0spCisJCQlyZXR1cm4gLUVDSElMRDsKKwkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZpX2doKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCQl1bmxvY2sgPSAxOwogCX0KIAogCWlmICgobWFzayAmIE1BWV9XUklURSkgJiYgSVNfSU1NVVRBQkxFKGlub2RlKSkKQEAgLTE2NTAsOCArMTYzMCw2IEBACiAJCWVycm9yID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKIAlpZiAodW5sb2NrKQogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7Ci0JZWxzZSBpZiAoZnJvemVuX3Jvb3QgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmc2RwLT5zZF9mcm96ZW5fcm9vdCkpCi0JCXdha2VfdXAoJnNkcC0+c2RfZnJvemVuX3Jvb3Rfd2FpdCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xODI0LDI5ICsxODAyLDE5IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwogCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoaW5vZGUpOwogCWludCBlcnJvcjsKIAlpbnQgdW5sb2NrID0gMDsKLQlpbnQgZnJvemVuX3Jvb3QgPSAwOwogCiAJaWYgKGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGlwLT5pX2dsKSA9PSBOVUxMKSB7Ci0JCWlmICh1bmxpa2VseShnZnMyX2dsb2NrX2lzX2hlbGRfZXhjbChzZHAtPnNkX2ZyZWV6ZV9nbCkgJiYKLQkJCSAgICAgaW5vZGUgPT0gc2RwLT5zZF9yb290X2Rpci0+ZF9pbm9kZSAmJgotCQkJICAgICBhdG9taWNfaW5jX25vdF96ZXJvKCZzZHAtPnNkX2Zyb3plbl9yb290KSkpCi0JCQlmcm96ZW5fcm9vdCA9IDE7Ci0JCWVsc2UgewotCQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZnaCk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJcmV0dXJuIGVycm9yOwotCQkJdW5sb2NrID0gMTsKLQkJfQorCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmdoKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCQl1bmxvY2sgPSAxOwogCX0KIAogCWdlbmVyaWNfZmlsbGF0dHIoaW5vZGUsIHN0YXQpOwogCWlmICh1bmxvY2spCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZnaCk7Ci0JZWxzZSBpZiAoZnJvemVuX3Jvb3QgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmc2RwLT5zZF9mcm96ZW5fcm9vdCkpCi0JCXdha2VfdXAoJnNkcC0+c2RfZnJvemVuX3Jvb3Rfd2FpdCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9nLmMgYi9mcy9nZnMyL2xvZy5jCmluZGV4IDM5NjZmYWQuLjUzNmU3YTYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9nLmMKKysrIGIvZnMvZ2ZzMi9sb2cuYwpAQCAtMzM5LDYgKzMzOSw3IEBACiAKIGludCBnZnMyX2xvZ19yZXNlcnZlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgYmxrcykKIHsKKwlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCByZXNlcnZlZF9ibGtzID0gNyAqICg0MDk2IC8gc2RwLT5zZF92ZnMtPnNfYmxvY2tzaXplKTsKIAl1bnNpZ25lZCB3YW50ZWQgPSBibGtzICsgcmVzZXJ2ZWRfYmxrczsKIAlERUZJTkVfV0FJVCh3YWl0KTsKQEAgLTM2Miw5ICszNjMsMTMgQEAKIAkJfSB3aGlsZShmcmVlX2Jsb2NrcyA8PSB3YW50ZWQpOwogCQlmaW5pc2hfd2FpdCgmc2RwLT5zZF9sb2dfd2FpdHEsICZ3YWl0KTsKIAl9CisJYXRvbWljX2luYygmc2RwLT5zZF9yZXNlcnZpbmdfbG9nKTsKIAlpZiAoYXRvbWljX2NtcHhjaGcoJnNkcC0+c2RfbG9nX2Jsa3NfZnJlZSwgZnJlZV9ibG9ja3MsCi0JCQkJZnJlZV9ibG9ja3MgLSBibGtzKSAhPSBmcmVlX2Jsb2NrcykKKwkJCQlmcmVlX2Jsb2NrcyAtIGJsa3MpICE9IGZyZWVfYmxvY2tzKSB7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzZHAtPnNkX3Jlc2VydmluZ19sb2cpKQorCQkJd2FrZV91cCgmc2RwLT5zZF9yZXNlcnZpbmdfbG9nX3dhaXQpOwogCQlnb3RvIHJldHJ5OworCX0KIAl0cmFjZV9nZnMyX2xvZ19ibG9ja3Moc2RwLCAtYmxrcyk7CiAKIAkvKgpAQCAtMzc3LDkgKzM4MiwxMSBAQAogCWRvd25fcmVhZCgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7CiAJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChTREZfSk9VUk5BTF9MSVZFLCAmc2RwLT5zZF9mbGFncykpKSB7CiAJCWdmczJfbG9nX3JlbGVhc2Uoc2RwLCBibGtzKTsKLQkJcmV0dXJuIC1FUk9GUzsKKwkJcmV0ID0gLUVST0ZTOwogCX0KLQlyZXR1cm4gMDsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2RwLT5zZF9yZXNlcnZpbmdfbG9nKSkKKwkJd2FrZV91cCgmc2RwLT5zZF9yZXNlcnZpbmdfbG9nX3dhaXQpOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNjUyLDkgKzY1OSwxMiBAQAogCXUzMiBoYXNoOwogCWludCBydyA9IFdSSVRFX0ZMVVNIX0ZVQSB8IFJFUV9NRVRBOwogCXN0cnVjdCBwYWdlICpwYWdlID0gbWVtcG9vbF9hbGxvYyhnZnMyX3BhZ2VfcG9vbCwgR0ZQX05PSU8pOworCWVudW0gZ2ZzMl9mcmVlemVfc3RhdGUgc3RhdGUgPSBhdG9taWNfcmVhZCgmc2RwLT5zZF9mcmVlemVfc3RhdGUpOwogCWxoID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWNsZWFyX3BhZ2UobGgpOwogCisJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAoc3RhdGUgIT0gU0ZTX0ZST1pFTikpOworCiAJdGFpbCA9IGN1cnJlbnRfdGFpbChzZHApOwogCiAJbGgtPmxoX2hlYWRlci5taF9tYWdpYyA9IGNwdV90b19iZTMyKEdGUzJfTUFHSUMpOwpAQCAtNjk1LDYgKzcwNSw3IEBACiAJCSAgICBlbnVtIGdmczJfZmx1c2hfdHlwZSB0eXBlKQogewogCXN0cnVjdCBnZnMyX3RyYW5zICp0cjsKKwllbnVtIGdmczJfZnJlZXplX3N0YXRlIHN0YXRlID0gYXRvbWljX3JlYWQoJnNkcC0+c2RfZnJlZXplX3N0YXRlKTsKIAogCWRvd25fd3JpdGUoJnNkcC0+c2RfbG9nX2ZsdXNoX2xvY2spOwogCkBAIC03MTMsOCArNzI0LDEyIEBACiAJCUlOSVRfTElTVF9IRUFEKCZ0ci0+dHJfYWlsMV9saXN0KTsKIAkJSU5JVF9MSVNUX0hFQUQoJnRyLT50cl9haWwyX2xpc3QpOwogCQl0ci0+dHJfZmlyc3QgPSBzZHAtPnNkX2xvZ19mbHVzaF9oZWFkOworCQlpZiAodW5saWtlbHkgKHN0YXRlID09IFNGU19GUk9aRU4pKQorCQkJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAhdHItPnRyX251bV9idWZfbmV3ICYmICF0ci0+dHJfbnVtX2RhdGFidWZfbmV3KTsKIAl9CiAKKwlpZiAodW5saWtlbHkoc3RhdGUgPT0gU0ZTX0ZST1pFTikpCisJCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIXNkcC0+c2RfbG9nX251bV9yZXZva2UpOwogCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwKIAkJCXNkcC0+c2RfbG9nX251bV9yZXZva2UgPT0gc2RwLT5zZF9sb2dfY29tbWl0ZWRfcmV2b2tlKTsKIApAQCAtNzQ1LDggKzc2MCw2IEBACiAJc3Bpbl91bmxvY2soJnNkcC0+c2RfYWlsX2xvY2spOwogCWdmczJfbG9nX3VubG9jayhzZHApOwogCi0JaWYgKGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ19mcmVlemUpKQotCQl0eXBlID0gRlJFRVpFX0ZMVVNIOwogCWlmICh0eXBlICE9IE5PUk1BTF9GTFVTSCkgewogCQlpZiAoIXNkcC0+c2RfbG9nX2lkbGUpIHsKIAkJCWZvciAoOzspIHsKQEAgLTc2MywyMSArNzc2LDggQEAKIAkJfQogCQlpZiAodHlwZSA9PSBTSFVURE9XTl9GTFVTSCB8fCB0eXBlID09IEZSRUVaRV9GTFVTSCkKIAkJCWdmczJfbG9nX3NodXRkb3duKHNkcCk7Ci0JCWlmICh0eXBlID09IEZSRUVaRV9GTFVTSCkgewotCQkJaW50IGVycm9yOwotCi0JCQlhdG9taWNfc2V0KCZzZHAtPnNkX2xvZ19mcmVlemUsIDApOwotCQkJd2FrZV91cCgmc2RwLT5zZF9sb2dfZnJvemVuX3dhaXQpOwotCQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoc2RwLT5zZF9mcmVlemVfZ2wsCi0JCQkJCQkgICBMTV9TVF9TSEFSRUQsIDAsCi0JCQkJCQkgICAmc2RwLT5zZF90aGF3X2doKTsKLQkJCWlmIChlcnJvcikgewotCQkJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IGNvdWxuJ3QgZ2V0IGZyZWV6ZSBsb2NrIDogJWRcbiIsIGVycm9yKTsKLQkJCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIDApOwotCQkJfQotCQkJZWxzZQotCQkJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX3RoYXdfZ2gpOwotCQl9CisJCWlmICh0eXBlID09IEZSRUVaRV9GTFVTSCkKKwkJCWF0b21pY19zZXQoJnNkcC0+c2RfZnJlZXplX3N0YXRlLCBTRlNfRlJPWkVOKTsKIAl9CiAKIAl0cmFjZV9nZnMyX2xvZ19mbHVzaChzZHAsIDApOwpAQCAtODg4LDcgKzg4OCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGdmczJfanJubF9mbHVzaF9yZXFkKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewotCXJldHVybiAoYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX3Bpbm5lZCkgPj0gYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX3RocmVzaDEpIHx8IGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ19mcmVlemUpKTsKKwlyZXR1cm4gKGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ19waW5uZWQpID49IGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ190aHJlc2gxKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdmczJfYWlsX2ZsdXNoX3JlcWQoc3RydWN0IGdmczJfc2JkICpzZHApCmRpZmYgLS1naXQgYS9mcy9nZnMyL21haW4uYyBiL2ZzL2dmczIvbWFpbi5jCmluZGV4IDgyYjZhYzguLjI0MWEzOTkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWFpbi5jCisrKyBiL2ZzL2dmczIvbWFpbi5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAicXVvdGEuaCIKICNpbmNsdWRlICJyZWNvdmVyeS5oIgogI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImdsb3BzLmgiCiAKIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpnZnMyX2NvbnRyb2xfd3E7CiAKQEAgLTE2MSw5ICsxNjIsMTQgQEAKIAlpZiAoIWdmczJfY29udHJvbF93cSkKIAkJZ290byBmYWlsX3JlY292ZXJ5OwogCisJZ2ZzMl9mcmVlemVfd3EgPSBhbGxvY193b3JrcXVldWUoImZyZWV6ZV93b3JrcXVldWUiLCAwLCAwKTsKKworCWlmICghZ2ZzMl9mcmVlemVfd3EpCisJCWdvdG8gZmFpbF9jb250cm9sOworCiAJZ2ZzMl9wYWdlX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9wYWdlX3Bvb2woNjQsIDApOwogCWlmICghZ2ZzMl9wYWdlX3Bvb2wpCi0JCWdvdG8gZmFpbF9jb250cm9sOworCQlnb3RvIGZhaWxfZnJlZXplOwogCiAJZ2ZzMl9yZWdpc3Rlcl9kZWJ1Z2ZzKCk7CiAKQEAgLTE3MSw2ICsxNzcsOCBAQAogCiAJcmV0dXJuIDA7CiAKK2ZhaWxfZnJlZXplOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGdmczJfZnJlZXplX3dxKTsKIGZhaWxfY29udHJvbDoKIAlkZXN0cm95X3dvcmtxdWV1ZShnZnMyX2NvbnRyb2xfd3EpOwogZmFpbF9yZWNvdmVyeToKQEAgLTIyNCw2ICsyMzIsNyBAQAogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZ2ZzMm1ldGFfZnNfdHlwZSk7CiAJZGVzdHJveV93b3JrcXVldWUoZ2ZzX3JlY292ZXJ5X3dxKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShnZnMyX2NvbnRyb2xfd3EpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGdmczJfZnJlZXplX3dxKTsKIAlsaXN0X2xydV9kZXN0cm95KCZnZnMyX3FkX2xydSk7CiAKIAlyY3VfYmFycmllcigpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMgYi9mcy9nZnMyL29wc19mc3R5cGUuYwppbmRleCBkM2VhZTI0Li44NjMzYWQzIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19mc3R5cGUuYworKysgYi9mcy9nZnMyL29wc19mc3R5cGUuYwpAQCAtMTI5LDExICsxMjksMTEgQEAKIAogCWluaXRfcndzZW0oJnNkcC0+c2RfbG9nX2ZsdXNoX2xvY2spOwogCWF0b21pY19zZXQoJnNkcC0+c2RfbG9nX2luX2ZsaWdodCwgMCk7CisJYXRvbWljX3NldCgmc2RwLT5zZF9yZXNlcnZpbmdfbG9nLCAwKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPnNkX3Jlc2VydmluZ19sb2dfd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2RwLT5zZF9sb2dfZmx1c2hfd2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2RwLT5zZF9sb2dfZnJvemVuX3dhaXQpOwotCWF0b21pY19zZXQoJnNkcC0+c2RfbG9nX2ZyZWV6ZSwgMCk7Ci0JYXRvbWljX3NldCgmc2RwLT5zZF9mcm96ZW5fcm9vdCwgMCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2RwLT5zZF9mcm96ZW5fcm9vdF93YWl0KTsKKwlhdG9taWNfc2V0KCZzZHAtPnNkX2ZyZWV6ZV9zdGF0ZSwgU0ZTX1VORlJPWkVOKTsKKwltdXRleF9pbml0KCZzZHAtPnNkX2ZyZWV6ZV9tdXRleCk7CiAKIAlyZXR1cm4gc2RwOwogfQpAQCAtNzYwLDE1ICs3NjAsNyBAQAogCXNldF9iaXQoU0RGX0pPVVJOQUxfQ0hFQ0tFRCwgJnNkcC0+c2RfZmxhZ3MpOwogCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZqaV9naCk7CiAJamluZGV4ID0gMDsKLQlpZiAoIXNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpIHsKLQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoc2RwLT5zZF9mcmVlemVfZ2wsIExNX1NUX1NIQVJFRCwgMCwKLQkJCQkJICAgJnNkcC0+c2RfdGhhd19naCk7Ci0JCWlmIChlcnJvcikgewotCQkJZnNfZXJyKHNkcCwgImNhbid0IGFjcXVpcmUgZnJlZXplIGdsb2NrOiAlZFxuIiwgZXJyb3IpOwotCQkJZ290byBmYWlsX2ppbm9kZV9naDsKLQkJfQotCX0KLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmc2RwLT5zZF90aGF3X2doKTsKKwlJTklUX1dPUksoJnNkcC0+c2RfZnJlZXplX3dvcmssIGdmczJfZnJlZXplX2Z1bmMpOwogCXJldHVybiAwOwogCiBmYWlsX2ppbm9kZV9naDoKQEAgLTEwODIsNiArMTA3NCw3IEBACiAJc2ItPnNfZXhwb3J0X29wID0gJmdmczJfZXhwb3J0X29wczsKIAlzYi0+c194YXR0ciA9IGdmczJfeGF0dHJfaGFuZGxlcnM7CiAJc2ItPnNfcWNvcCA9ICZnZnMyX3F1b3RhY3RsX29wczsKKwlzYi0+c19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlA7CiAJc2JfZHFvcHQoc2IpLT5mbGFncyB8PSBEUVVPVF9RVU9UQV9TWVNfRklMRTsKIAlzYi0+c190aW1lX2dyYW4gPSAxOwogCXNiLT5zX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcXVvdGEuYyBiL2ZzL2dmczIvcXVvdGEuYwppbmRleCA2NGIyOWY3Li5jOGIxNDhiIDEwMDY0NAotLS0gYS9mcy9nZnMyL3F1b3RhLmMKKysrIGIvZnMvZ2ZzMi9xdW90YS5jCkBAIC0xMzYwLDEzICsxMzYwLDggQEAKIAogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhYXRvbWljX3JlYWQoJnNkcC0+c2RfcXVvdGFfY291bnQpKTsKIAotCWlmIChzZHAtPnNkX3F1b3RhX2JpdG1hcCkgewotCQlpZiAoaXNfdm1hbGxvY19hZGRyKHNkcC0+c2RfcXVvdGFfYml0bWFwKSkKLQkJCXZmcmVlKHNkcC0+c2RfcXVvdGFfYml0bWFwKTsKLQkJZWxzZQotCQkJa2ZyZWUoc2RwLT5zZF9xdW90YV9iaXRtYXApOwotCQlzZHAtPnNkX3F1b3RhX2JpdG1hcCA9IE5VTEw7Ci0JfQorCWt2ZnJlZShzZHAtPnNkX3F1b3RhX2JpdG1hcCk7CisJc2RwLT5zZF9xdW90YV9iaXRtYXAgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBxdW90YWRfZXJyb3Ioc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCA3NDc0YzQxLi45MTUwMjA3IDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtOTM2LDcgKzkzNiw3IEBACiAJcmdkLT5yZF9nbC0+Z2xfdm0uc3RhcnQgPSByZ2QtPnJkX2FkZHIgKiBic2l6ZTsKIAlyZ2QtPnJkX2dsLT5nbF92bS5lbmQgPSByZ2QtPnJkX2dsLT5nbF92bS5zdGFydCArIChyZ2QtPnJkX2xlbmd0aCAqIGJzaXplKSAtIDE7CiAJcmdkLT5yZF9yZ2wgPSAoc3RydWN0IGdmczJfcmdycF9sdmIgKilyZ2QtPnJkX2dsLT5nbF9sa3NiLnNiX2x2YnB0cjsKLQlyZ2QtPnJkX2ZsYWdzICY9IH5HRlMyX1JERl9VUFRPREFURTsKKwlyZ2QtPnJkX2ZsYWdzICY9IH4oR0ZTMl9SREZfVVBUT0RBVEUgfCBHRlMyX1JERl9QUkVGRVJSRUQpOwogCWlmIChyZ2QtPnJkX2RhdGEgPiBzZHAtPnNkX21heF9yZ19kYXRhKQogCQlzZHAtPnNkX21heF9yZ19kYXRhID0gcmdkLT5yZF9kYXRhOwogCXNwaW5fbG9jaygmc2RwLT5zZF9yaW5kZXhfc3Bpbik7CkBAIC05NTUsNiArOTU1LDM2IEBACiB9CiAKIC8qKgorICogc2V0X3JncnBfcHJlZmVyZW5jZXMgLSBSdW4gYWxsIHRoZSByZ3Jwcywgc2VsZWN0aW5nIHNvbWUgd2UgcHJlZmVyIHRvIHVzZQorICogQHNkcDogdGhlIEdGUzIgc3VwZXJibG9jaworICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gc2VsZWN0IGEgc3Vic2V0IG9mIHRoZSByZXNvdXJjZSBncm91cHMKKyAqIGFuZCBtYXJrIHRoZW0gYXMgUFJFRkVSUkVELiBXZSBkbyBpdCBpbiBzdWNoIGEgd2F5IHRoYXQgZWFjaCBub2RlIHByZWZlcnMKKyAqIHRvIHVzZSBhIHVuaXF1ZSBzZXQgb2YgcmdycHMgdG8gbWluaW1pemUgZ2xvY2sgY29udGVudGlvbi4KKyAqLworc3RhdGljIHZvaWQgc2V0X3JncnBfcHJlZmVyZW5jZXMoc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJc3RydWN0IGdmczJfcmdycGQgKnJnZCwgKmZpcnN0OworCWludCBpOworCisJLyogU2tpcCBhbiBpbml0aWFsIG51bWJlciBvZiByZ3JwcywgYmFzZWQgb24gdGhpcyBub2RlJ3Mgam91cm5hbCBJRC4KKwkgICBUaGF0IHNob3VsZCBzdGFydCBlYWNoIG5vZGUgb3V0IG9uIGl0cyBvd24gc2V0LiAqLworCXJnZCA9IGdmczJfcmdycGRfZ2V0X2ZpcnN0KHNkcCk7CisJZm9yIChpID0gMDsgaSA8IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQ7IGkrKykKKwkJcmdkID0gZ2ZzMl9yZ3JwZF9nZXRfbmV4dChyZ2QpOworCWZpcnN0ID0gcmdkOworCisJZG8geworCQlyZ2QtPnJkX2ZsYWdzIHw9IEdGUzJfUkRGX1BSRUZFUlJFRDsKKwkJZm9yIChpID0gMDsgaSA8IHNkcC0+c2Rfam91cm5hbHM7IGkrKykgeworCQkJcmdkID0gZ2ZzMl9yZ3JwZF9nZXRfbmV4dChyZ2QpOworCQkJaWYgKHJnZCA9PSBmaXJzdCkKKwkJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHJnZCAhPSBmaXJzdCk7Cit9CisKKy8qKgogICogZ2ZzMl9yaV91cGRhdGUgLSBQdWxsIGluIGEgbmV3IHJlc291cmNlIGluZGV4IGZyb20gdGhlIGRpc2sKICAqIEBpcDogcG9pbnRlciB0byB0aGUgcmluZGV4IGlub2RlCiAgKgpAQCAtOTczLDYgKzEwMDMsOCBAQAogCWlmIChlcnJvciA8IDApCiAJCXJldHVybiBlcnJvcjsKIAorCXNldF9yZ3JwX3ByZWZlcmVuY2VzKHNkcCk7CisKIAlzZHAtPnNkX3JpbmRleF91cHRvZGF0ZSA9IDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODkxLDYgKzE5MjMsMjUgQEAKIH0KIAogLyoqCisgKiBmYXN0X3RvX2FjcXVpcmUgLSBkZXRlcm1pbmUgaWYgYSByZXNvdXJjZSBncm91cCB3aWxsIGJlIGZhc3QgdG8gYWNxdWlyZQorICoKKyAqIElmIHRoaXMgaXMgb25lIG9mIG91ciBwcmVmZXJyZWQgcmdycHMsIGl0IHNob3VsZCBiZSBxdWlja2VyIHRvIGFjcXVpcmUsCisgKiBiZWNhdXNlIHdlIHRyaWVkIHRvIHNldCBvdXJzZWx2ZXMgdXAgYXMgZGxtIGxvY2sgbWFzdGVyLgorICovCitzdGF0aWMgaW5saW5lIGludCBmYXN0X3RvX2FjcXVpcmUoc3RydWN0IGdmczJfcmdycGQgKnJnZCkKK3sKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wgPSByZ2QtPnJkX2dsOworCisJaWYgKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCAmJiBsaXN0X2VtcHR5KCZnbC0+Z2xfaG9sZGVycykgJiYKKwkgICAgIXRlc3RfYml0KEdMRl9ERU1PVEVfSU5fUFJPR1JFU1MsICZnbC0+Z2xfZmxhZ3MpICYmCisJICAgICF0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJcmV0dXJuIDE7CisJaWYgKHJnZC0+cmRfZmxhZ3MgJiBHRlMyX1JERl9QUkVGRVJSRUQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKioKICAqIGdmczJfaW5wbGFjZV9yZXNlcnZlIC0gUmVzZXJ2ZSBzcGFjZSBpbiB0aGUgZmlsZXN5c3RlbQogICogQGlwOiB0aGUgaW5vZGUgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IKICAqIEBhcDogdGhlIGFsbG9jYXRpb24gcGFyYW1ldGVycwpAQCAtMTkzMiwxMCArMTk4MywxNSBAQAogCQkJcmdfbG9ja2VkID0gMDsKIAkJCWlmIChza2lwICYmIHNraXAtLSkKIAkJCQlnb3RvIG5leHRfcmdycDsKLQkJCWlmICghZ2ZzMl9yc19hY3RpdmUocnMpICYmIChsb29wcyA8IDIpICYmCi0JCQkgICAgIGdmczJfcmdycF91c2VkX3JlY2VudGx5KHJzLCAxMDAwKSAmJgotCQkJICAgICBnZnMyX3JncnBfY29uZ2VzdGVkKHJzLT5yc19yYm0ucmdkLCBsb29wcykpCi0JCQkJZ290byBuZXh0X3JncnA7CisJCQlpZiAoIWdmczJfcnNfYWN0aXZlKHJzKSkgeworCQkJCWlmIChsb29wcyA9PSAwICYmCisJCQkJICAgICFmYXN0X3RvX2FjcXVpcmUocnMtPnJzX3JibS5yZ2QpKQorCQkJCQlnb3RvIG5leHRfcmdycDsKKwkJCQlpZiAoKGxvb3BzIDwgMikgJiYKKwkJCQkgICAgZ2ZzMl9yZ3JwX3VzZWRfcmVjZW50bHkocnMsIDEwMDApICYmCisJCQkJICAgIGdmczJfcmdycF9jb25nZXN0ZWQocnMtPnJzX3JibS5yZ2QsIGxvb3BzKSkKKwkJCQkJZ290byBuZXh0X3JncnA7CisJCQl9CiAJCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChycy0+cnNfcmJtLnJnZC0+cmRfZ2wsCiAJCQkJCQkgICBMTV9TVF9FWENMVVNJVkUsIGZsYWdzLAogCQkJCQkJICAgJnJzLT5yc19yZ2RfZ2gpOwpAQCAtMjE5NSw2ICsyMjUxLDkgQEAKIAkJCXRyYWNlX2dmczJfcnMocnMsIFRSQUNFX1JTX0NMQUlNKTsKIAkJCWlmIChycy0+cnNfZnJlZSAmJiAhcmV0KQogCQkJCWdvdG8gb3V0OworCQkJLyogV2UgdXNlZCB1cCBvdXIgYmxvY2sgcmVzZXJ2YXRpb24sIHNvIHdlIHNob3VsZAorCQkJICAgcmVzZXJ2ZSBtb3JlIGJsb2NrcyBuZXh0IHRpbWUuICovCisJCQlhdG9taWNfYWRkKFJHUlBfUlNSVl9BRERCTEtTLCAmcnMtPnJzX3NpemVoaW50KTsKIAkJfQogCQlfX3JzX2RlbHRyZWUocnMpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5oIGIvZnMvZ2ZzMi9yZ3JwLmgKaW5kZXggNWQ4ZjA4NS4uYjEwNGY0YSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmgKKysrIGIvZnMvZ2ZzMi9yZ3JwLmgKQEAgLTIwLDYgKzIwLDcgQEAKICAqLwogI2RlZmluZSBSR1JQX1JTUlZfTUlOQllURVMgOAogI2RlZmluZSBSR1JQX1JTUlZfTUlOQkxLUyAoKHUzMikoUkdSUF9SU1JWX01JTkJZVEVTICogR0ZTMl9OQkJZKSkKKyNkZWZpbmUgUkdSUF9SU1JWX0FEREJMS1MgNjQKIAogc3RydWN0IGdmczJfcmdycGQ7CiBzdHJ1Y3QgZ2ZzMl9zYmQ7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmMgYi9mcy9nZnMyL3N1cGVyLmMKaW5kZXggYTM0NmY1Ni4uNWIzMjdmOCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5jCisrKyBiL2ZzL2dmczIvc3VwZXIuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMzk5LDcgKzQwMCw3IEBACiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKHNkcC0+c2RfamRlc2MtPmpkX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9nbG9jayAqal9nbCA9IGlwLT5pX2dsOwotCXN0cnVjdCBnZnMyX2hvbGRlciB0aGF3X2doOworCXN0cnVjdCBnZnMyX2hvbGRlciBmcmVlemVfZ2g7CiAJc3RydWN0IGdmczJfbG9nX2hlYWRlcl9ob3N0IGhlYWQ7CiAJaW50IGVycm9yOwogCkBAIC00MDgsNyArNDA5LDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoc2RwLT5zZF9mcmVlemVfZ2wsIExNX1NUX1NIQVJFRCwgMCwKLQkJCQkgICAmdGhhd19naCk7CisJCQkJICAgJmZyZWV6ZV9naCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfdGhyZWFkczsKIApAQCAtNDM0LDEzICs0MzUsMTMgQEAKIAogCXNldF9iaXQoU0RGX0pPVVJOQUxfTElWRSwgJnNkcC0+c2RfZmxhZ3MpOwogCi0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJnRoYXdfZ2gpOworCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZmcmVlemVfZ2gpOwogCiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JdGhhd19naC5naF9mbGFncyB8PSBHTF9OT0NBQ0hFOwotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZ0aGF3X2doKTsKKwlmcmVlemVfZ2guZ2hfZmxhZ3MgfD0gR0xfTk9DQUNIRTsKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZnJlZXplX2doKTsKIGZhaWxfdGhyZWFkczoKIAlrdGhyZWFkX3N0b3Aoc2RwLT5zZF9xdW90YWRfcHJvY2Vzcyk7CiAJa3RocmVhZF9zdG9wKHNkcC0+c2RfbG9nZF9wcm9jZXNzKTsKQEAgLTU4MCwxNCArNTgxLDE1IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICptX2JoLCAqbF9iaDsKIAlpbnQgZXJyb3I7CiAKKwlzYl9zdGFydF93cml0ZShzYik7CiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQobV9pcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCBHTF9OT0NBQ0hFLAogCQkJCSAgICZnaCk7CiAJaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJCWdvdG8gb3V0OwogCiAJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKG1faXAsICZtX2JoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF91bmxvY2s7CiAKIAlzcGluX2xvY2soJnNkcC0+c2Rfc3RhdGZzX3NwaW4pOwogCWdmczJfc3RhdGZzX2NoYW5nZV9pbihtX3NjLCBtX2JoLT5iX2RhdGEgKwpAQCAtNjE1LDggKzYxNywxMCBAQAogCWJyZWxzZShsX2JoKTsKIG91dF9iaDoKIAlicmVsc2UobV9iaCk7Ci1vdXQ6CitvdXRfdW5sb2NrOgogCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZnaCk7CitvdXQ6CisJc2JfZW5kX3dyaXRlKHNiKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTY0MywxNCArNjQ3LDggQEAKIAlzdHJ1Y3QgbGZjYyAqbGZjYzsKIAlMSVNUX0hFQUQobGlzdCk7CiAJc3RydWN0IGdmczJfbG9nX2hlYWRlcl9ob3N0IGxoOwotCXN0cnVjdCBnZnMyX2lub2RlICpkaXAgPSBHRlMyX0koc2RwLT5zZF9yb290X2Rpci0+ZF9pbm9kZSk7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoZGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIDAsCi0JCQkJICAgJnNkcC0+c2RfZnJlZXplX3Jvb3RfZ2gpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCWF0b21pY19zZXQoJnNkcC0+c2RfZnJvemVuX3Jvb3QsIDEpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoamQsICZzZHAtPnNkX2ppbmRleF9saXN0LCBqZF9saXN0KSB7CiAJCWxmY2MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGZjYyksIEdGUF9LRVJORUwpOwogCQlpZiAoIWxmY2MpIHsKQEAgLTY5MiwxMSArNjkwLDYgQEAKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmxmY2MtPmdoKTsKIAkJa2ZyZWUobGZjYyk7CiAJfQotCWlmIChlcnJvcikgewotCQlhdG9taWNfZGVjKCZzZHAtPnNkX2Zyb3plbl9yb290KTsKLQkJd2FpdF9ldmVudChzZHAtPnNkX2Zyb3plbl9yb290X3dhaXQsIGF0b21pY19yZWFkKCZzZHAtPnNkX2Zyb3plbl9yb290KSA9PSAwKTsKLQkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2RfZnJlZXplX3Jvb3RfZ2gpOwotCX0KIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTgzNCwxOCArODI3LDE0IEBACiAKIHN0YXRpYyBpbnQgZ2ZzMl9tYWtlX2ZzX3JvKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewotCXN0cnVjdCBnZnMyX2hvbGRlciB0aGF3X2doOworCXN0cnVjdCBnZnMyX2hvbGRlciBmcmVlemVfZ2g7CiAJaW50IGVycm9yOwogCiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoc2RwLT5zZF9mcmVlemVfZ2wsIExNX1NUX1NIQVJFRCwgR0xfTk9DQUNIRSwKLQkJCQkgICAmdGhhd19naCk7CisJCQkJICAgJmZyZWV6ZV9naCk7CiAJaWYgKGVycm9yICYmICF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkKIAkJcmV0dXJuIGVycm9yOwogCi0JZG93bl93cml0ZSgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7Ci0JY2xlYXJfYml0KFNERl9KT1VSTkFMX0xJVkUsICZzZHAtPnNkX2ZsYWdzKTsKLQl1cF93cml0ZSgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7Ci0KIAlrdGhyZWFkX3N0b3Aoc2RwLT5zZF9xdW90YWRfcHJvY2Vzcyk7CiAJa3RocmVhZF9zdG9wKHNkcC0+c2RfbG9nZF9wcm9jZXNzKTsKIApAQCAtODUzLDExICs4NDIsMTYgQEAKIAlnZnMyX3F1b3RhX3N5bmMoc2RwLT5zZF92ZnMsIDApOwogCWdmczJfc3RhdGZzX3N5bmMoc2RwLT5zZF92ZnMsIDApOwogCisJZG93bl93cml0ZSgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7CisJY2xlYXJfYml0KFNERl9KT1VSTkFMX0xJVkUsICZzZHAtPnNkX2ZsYWdzKTsKKwl1cF93cml0ZSgmc2RwLT5zZF9sb2dfZmx1c2hfbG9jayk7CisKIAlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwsIFNIVVRET1dOX0ZMVVNIKTsKKwl3YWl0X2V2ZW50KHNkcC0+c2RfcmVzZXJ2aW5nX2xvZ193YWl0LCBhdG9taWNfcmVhZCgmc2RwLT5zZF9yZXNlcnZpbmdfbG9nKSA9PSAwKTsKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX2Jsa3NfZnJlZSkgPT0gc2RwLT5zZF9qZGVzYy0+amRfYmxvY2tzKTsKIAotCWlmICh0aGF3X2doLmdoX2dsKQotCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmdGhhd19naCk7CisJaWYgKGZyZWV6ZV9naC5naF9nbCkKKwkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmZyZWV6ZV9naCk7CiAKIAlnZnMyX3F1b3RhX2NsZWFudXAoc2RwKTsKIApAQCAtOTQzLDExICs5MzcsNDEgQEAKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CiAKIAlnZnMyX3F1b3RhX3N5bmMoc2IsIC0xKTsKLQlpZiAod2FpdCAmJiBzZHAgJiYgIWF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ19mcmVlemUpKQorCWlmICh3YWl0ICYmIHNkcCkKIAkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMLCBOT1JNQUxfRkxVU0gpOwogCXJldHVybiAwOwogfQogCit2b2lkIGdmczJfZnJlZXplX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZnJlZXplX2doOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBnZnMyX3NiZCwgc2RfZnJlZXplX3dvcmspOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZHAtPnNkX3ZmczsKKworCWF0b21pY19pbmMoJnNiLT5zX2FjdGl2ZSk7CisJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoc2RwLT5zZF9mcmVlemVfZ2wsIExNX1NUX1NIQVJFRCwgMCwKKwkJCQkgICAmZnJlZXplX2doKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiR0ZTMjogY291bG4ndCBnZXQgZnJlZXplIGxvY2sgOiAlZFxuIiwgZXJyb3IpOworCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIDApOworCX0KKwllbHNlIHsKKwkJYXRvbWljX3NldCgmc2RwLT5zZF9mcmVlemVfc3RhdGUsIFNGU19VTkZST1pFTik7CisJCWVycm9yID0gdGhhd19zdXBlcihzYik7CisJCWlmIChlcnJvcikgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiR0ZTMjogY291bGRuJ3QgdGhhdyBmaWxlc3lzdGVtOiAlZFxuIiwKKwkJCSAgICAgICBlcnJvcik7CisJCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIDApOworCQl9CisJCWlmICghdGVzdF9iaXQoU0RGX0pPVVJOQUxfTElWRSwgJnNkcC0+c2RfZmxhZ3MpKQorCQkJZnJlZXplX2doLmdoX2ZsYWdzIHw9IEdMX05PQ0FDSEU7CisJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZmcmVlemVfZ2gpOworCX0KKwlkZWFjdGl2YXRlX3N1cGVyKHNiKTsKKwlyZXR1cm47Cit9CisKIC8qKgogICogZ2ZzMl9mcmVlemUgLSBwcmV2ZW50IGZ1cnRoZXIgd3JpdGVzIHRvIHRoZSBmaWxlc3lzdGVtCiAgKiBAc2I6IHRoZSBWRlMgc3RydWN0dXJlIGZvciB0aGUgZmlsZXN5c3RlbQpAQCAtOTU3LDEwICs5ODEsMTYgQEAKIHN0YXRpYyBpbnQgZ2ZzMl9mcmVlemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87Ci0JaW50IGVycm9yOworCWludCBlcnJvciA9IDA7CiAKLQlpZiAodGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpCi0JCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJnNkcC0+c2RfZnJlZXplX211dGV4KTsKKwlpZiAoYXRvbWljX3JlYWQoJnNkcC0+c2RfZnJlZXplX3N0YXRlKSAhPSBTRlNfVU5GUk9aRU4pCisJCWdvdG8gb3V0OworCisJaWYgKHRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSB7CisJCWVycm9yID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQogCiAJZm9yICg7OykgewogCQllcnJvciA9IGdmczJfbG9ja19mc19jaGVja19jbGVhbihzZHAsICZzZHAtPnNkX2ZyZWV6ZV9naCk7CkBAIC05ODAsNyArMTAxMCwxMCBAQAogCQlmc19lcnIoc2RwLCAicmV0cnlpbmcuLi5cbiIpOwogCQltc2xlZXAoMTAwMCk7CiAJfQotCXJldHVybiAwOworCWVycm9yID0gMDsKK291dDoKKwltdXRleF91bmxvY2soJnNkcC0+c2RfZnJlZXplX211dGV4KTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgpAQCAtOTkzLDEwICsxMDI2LDE1IEBACiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOwogCisJbXV0ZXhfbG9jaygmc2RwLT5zZF9mcmVlemVfbXV0ZXgpOworICAgICAgICBpZiAoYXRvbWljX3JlYWQoJnNkcC0+c2RfZnJlZXplX3N0YXRlKSAhPSBTRlNfRlJPWkVOIHx8CisJICAgIHNkcC0+c2RfZnJlZXplX2doLmdoX2dsID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzZHAtPnNkX2ZyZWV6ZV9tdXRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJfQorCiAJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2RfZnJlZXplX2doKTsKLQlhdG9taWNfZGVjKCZzZHAtPnNkX2Zyb3plbl9yb290KTsKLQl3YWl0X2V2ZW50KHNkcC0+c2RfZnJvemVuX3Jvb3Rfd2FpdCwgYXRvbWljX3JlYWQoJnNkcC0+c2RfZnJvemVuX3Jvb3QpID09IDApOwotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX2ZyZWV6ZV9yb290X2doKTsKKwltdXRleF91bmxvY2soJnNkcC0+c2RfZnJlZXplX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYxOCw4ICsxNjU2LDggQEAKIAkuZXZpY3RfaW5vZGUJCT0gZ2ZzMl9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCQk9IGdmczJfcHV0X3N1cGVyLAogCS5zeW5jX2ZzCQk9IGdmczJfc3luY19mcywKLQkuZnJlZXplX2ZzIAkJPSBnZnMyX2ZyZWV6ZSwKLQkudW5mcmVlemVfZnMJCT0gZ2ZzMl91bmZyZWV6ZSwKKwkuZnJlZXplX3N1cGVyCQk9IGdmczJfZnJlZXplLAorCS50aGF3X3N1cGVyCQk9IGdmczJfdW5mcmVlemUsCiAJLnN0YXRmcwkJCT0gZ2ZzMl9zdGF0ZnMsCiAJLnJlbW91bnRfZnMJCT0gZ2ZzMl9yZW1vdW50X2ZzLAogCS5kcm9wX2lub2RlCQk9IGdmczJfZHJvcF9pbm9kZSwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuaCBiL2ZzL2dmczIvc3VwZXIuaAppbmRleCA5MGUzMzIyLi43M2M5N2RjIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmgKKysrIGIvZnMvZ2ZzMi9zdXBlci5oCkBAIC00NSw2ICs0NSw3IEBACiBleHRlcm4gdm9pZCB1cGRhdGVfc3RhdGZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm1fYmgsCiAJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqbF9iaCk7CiBleHRlcm4gaW50IGdmczJfc3RhdGZzX3N5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOworZXh0ZXJuIHZvaWQgZ2ZzMl9mcmVlemVfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2ZzMl9mc190eXBlOwogZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGdmczJtZXRhX2ZzX3R5cGU7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3RyYW5zLmMgYi9mcy9nZnMyL3RyYW5zLmMKaW5kZXggNDJiZmQzMzYuLjg4YmZmMjQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvdHJhbnMuYworKysgYi9mcy9nZnMyL3RyYW5zLmMKQEAgLTg5LDE0ICs4OSwxNyBAQAogewogCXN0cnVjdCBnZnMyX3RyYW5zICp0ciA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKIAlzNjQgbmJ1ZjsKKwlpbnQgYWxsb2NlZCA9IHRyLT50cl9hbGxvY2VkOworCiAJQlVHX09OKCF0cik7CiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKIAogCWlmICghdHItPnRyX3RvdWNoZWQpIHsKIAkJZ2ZzMl9sb2dfcmVsZWFzZShzZHAsIHRyLT50cl9yZXNlcnZlZCk7Ci0JCWlmICh0ci0+dHJfYWxsb2NlZCkKKwkJaWYgKGFsbG9jZWQpIHsKIAkJCWtmcmVlKHRyKTsKLQkJc2JfZW5kX2ludHdyaXRlKHNkcC0+c2RfdmZzKTsKKwkJCXNiX2VuZF9pbnR3cml0ZShzZHAtPnNkX3Zmcyk7CisJCX0KIAkJcmV0dXJuOwogCX0KIApAQCAtMTA5LDEzICsxMTIsMTQgQEAKIAkJZ2ZzMl9wcmludF90cmFucyh0cik7CiAKIAlnZnMyX2xvZ19jb21taXQoc2RwLCB0cik7Ci0JaWYgKHRyLT50cl9hbGxvY2VkICYmICF0ci0+dHJfYXR0YWNoZWQpCisJaWYgKGFsbG9jZWQgJiYgIXRyLT50cl9hdHRhY2hlZCkKIAkJCWtmcmVlKHRyKTsKIAl1cF9yZWFkKCZzZHAtPnNkX2xvZ19mbHVzaF9sb2NrKTsKIAogCWlmIChzZHAtPnNkX3Zmcy0+c19mbGFncyAmIE1TX1NZTkNIUk9OT1VTKQogCQlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwsIE5PUk1BTF9GTFVTSCk7Ci0Jc2JfZW5kX2ludHdyaXRlKHNkcC0+c2RfdmZzKTsKKwlpZiAoYWxsb2NlZCkKKwkJc2JfZW5kX2ludHdyaXRlKHNkcC0+c2RfdmZzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBnZnMyX2J1ZmRhdGEgKmdmczJfYWxsb2NfYnVmZGF0YShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsCkBAIC0xOTIsNiArMTk2LDcgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlciAqbWg7CiAJc3RydWN0IGdmczJfdHJhbnMgKnRyOworCWVudW0gZ2ZzMl9mcmVlemVfc3RhdGUgc3RhdGUgPSBhdG9taWNfcmVhZCgmc2RwLT5zZF9mcmVlemVfc3RhdGUpOwogCiAJdHIgPSBjdXJyZW50LT5qb3VybmFsX2luZm87CiAJdHItPnRyX3RvdWNoZWQgPSAxOwpAQCAtMjA1LDYgKzIxMCwxMCBAQAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliZC0+YmRfYmgtPmJfYmxvY2tucik7CiAJCUJVRygpOwogCX0KKwlpZiAodW5saWtlbHkoc3RhdGUgPT0gU0ZTX0ZST1pFTikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiR0ZTMjphZGRpbmcgYnVmIHdoaWxlIGZyb3plblxuIik7CisJCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgMCk7CisJfQogCWdmczJfcGluKHNkcCwgYmQtPmJkX2JoKTsKIAltaC0+X19wYWQwID0gY3B1X3RvX2JlNjQoMCk7CiAJbWgtPm1oX2ppZCA9IGNwdV90b19iZTMyKHNkcC0+c2RfamRlc2MtPmpkX2ppZCk7CmRpZmYgLS1naXQgYS9mcy9oZnMvY2F0YWxvZy5jIGIvZnMvaGZzL2NhdGFsb2cuYwppbmRleCBmZjAzMTZiLi5kYjQ1OGVlIDEwMDY0NAotLS0gYS9mcy9oZnMvY2F0YWxvZy5jCisrKyBiL2ZzL2hmcy9jYXRhbG9nLmMKQEAgLTE2MiwxNCArMTYyLDE2IEBACiAgKi8KIGludCBoZnNfY2F0X2tleWNtcChjb25zdCBidHJlZV9rZXkgKmtleTEsIGNvbnN0IGJ0cmVlX2tleSAqa2V5MikKIHsKLQlpbnQgcmV0dmFsOworCV9fYmUzMiBrMXAsIGsycDsKIAotCXJldHZhbCA9IGJlMzJfdG9fY3B1KGtleTEtPmNhdC5QYXJJRCkgLSBiZTMyX3RvX2NwdShrZXkyLT5jYXQuUGFySUQpOwotCWlmICghcmV0dmFsKQotCQlyZXR2YWwgPSBoZnNfc3RyY21wKGtleTEtPmNhdC5DTmFtZS5uYW1lLCBrZXkxLT5jYXQuQ05hbWUubGVuLAotCQkJCSAgICBrZXkyLT5jYXQuQ05hbWUubmFtZSwga2V5Mi0+Y2F0LkNOYW1lLmxlbik7CisJazFwID0ga2V5MS0+Y2F0LlBhcklEOworCWsycCA9IGtleTItPmNhdC5QYXJJRDsKIAotCXJldHVybiByZXR2YWw7CisJaWYgKGsxcCAhPSBrMnApCisJCXJldHVybiBiZTMyX3RvX2NwdShrMXApIDwgYmUzMl90b19jcHUoazJwKSA/IC0xIDogMTsKKworCXJldHVybiBoZnNfc3RyY21wKGtleTEtPmNhdC5DTmFtZS5uYW1lLCBrZXkxLT5jYXQuQ05hbWUubGVuLAorCQkJICBrZXkyLT5jYXQuQ05hbWUubmFtZSwga2V5Mi0+Y2F0LkNOYW1lLmxlbik7CiB9CiAKIC8qIFRyeSB0byBnZXQgYSBjYXRhbG9nIGVudHJ5IGZvciBnaXZlbiBjYXRhbG9nIGlkICovCmRpZmYgLS1naXQgYS9mcy9ocHBmcy9ocHBmcy5jIGIvZnMvaHBwZnMvaHBwZnMuYwppbmRleCA0MzM4ZmYzLi41ZjI3NTUxIDEwMDY0NAotLS0gYS9mcy9ocHBmcy9ocHBmcy5jCisrKyBiL2ZzL2hwcGZzL2hwcGZzLmMKQEAgLTU0OCwxMCArNTQ4LDExIEBACiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogfTsKIAotc3RhdGljIGludCBocHBmc19maWxsZGlyKHZvaWQgKmQsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBzaXplLAorc3RhdGljIGludCBocHBmc19maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgc2l6ZSwKIAkJCSBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vZGUsIHVuc2lnbmVkIGludCB0eXBlKQogewotCXN0cnVjdCBocHBmc19kaXJlbnQgKmRpcmVudCA9IGQ7CisJc3RydWN0IGhwcGZzX2RpcmVudCAqZGlyZW50ID0KKwkJY29udGFpbmVyX29mKGN0eCwgc3RydWN0IGhwcGZzX2RpcmVudCwgY3R4KTsKIAogCWlmIChmaWxlX3JlbW92ZWQoZGlyZW50LT5kZW50cnksIG5hbWUpKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IDI2NzUzYmEuLjJlZDk1ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMTQzLDkgKzE0Myw2IEBACiAJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAlpbm9kZS0+aV9ieXRlcyA9IDA7CiAJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IDA7Ci0jaWZkZWYgQ09ORklHX1FVT1RBCi0JbWVtc2V0KCZpbm9kZS0+aV9kcXVvdCwgMCwgc2l6ZW9mKGlub2RlLT5pX2RxdW90KSk7Ci0jZW5kaWYKIAlpbm9kZS0+aV9waXBlID0gTlVMTDsKIAlpbm9kZS0+aV9iZGV2ID0gTlVMTDsKIAlpbm9kZS0+aV9jZGV2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2lvY3RsLmMgYi9mcy9pb2N0bC5jCmluZGV4IDhhYzNmYWQuLjc3YzlhNzggMTAwNjQ0Ci0tLSBhL2ZzL2lvY3RsLmMKKysrIGIvZnMvaW9jdGwuYwpAQCAtNTE4LDEwICs1MTgsMTIgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCS8qIElmIGZpbGVzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGZyZWV6ZSBmZWF0dXJlLCByZXR1cm4uICovCi0JaWYgKHNiLT5zX29wLT5mcmVlemVfZnMgPT0gTlVMTCkKKwlpZiAoc2ItPnNfb3AtPmZyZWV6ZV9mcyA9PSBOVUxMICYmIHNiLT5zX29wLT5mcmVlemVfc3VwZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJLyogRnJlZXplICovCisJaWYgKHNiLT5zX29wLT5mcmVlemVfc3VwZXIpCisJCXJldHVybiBzYi0+c19vcC0+ZnJlZXplX3N1cGVyKHNiKTsKIAlyZXR1cm4gZnJlZXplX3N1cGVyKHNiKTsKIH0KIApAQCAtNTMzLDYgKzUzNSw4IEBACiAJCXJldHVybiAtRVBFUk07CiAKIAkvKiBUaGF3ICovCisJaWYgKHNiLT5zX29wLT50aGF3X3N1cGVyKQorCQlyZXR1cm4gc2ItPnNfb3AtPnRoYXdfc3VwZXIoc2IpOwogCXJldHVybiB0aGF3X3N1cGVyKHNiKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggYWFiODU0OS4uYzQ2YTc5YSAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC0xMzczLDggKzEzNzMsNyBAQAogCX0KIAltdXRleF91bmxvY2soJmpvdXJuYWwtPmpfY2hlY2twb2ludF9tdXRleCk7CiAKLQlpZiAoam91cm5hbC0+al9pbm9kZSkKLQkJaXB1dChqb3VybmFsLT5qX2lub2RlKTsKKwlpcHV0KGpvdXJuYWwtPmpfaW5vZGUpOwogCWlmIChqb3VybmFsLT5qX3Jldm9rZSkKIAkJam91cm5hbF9kZXN0cm95X3Jldm9rZShqb3VybmFsKTsKIAlrZnJlZShqb3VybmFsLT5qX3didWYpOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCBlNGRjNzQ3Li4xZGY5NGZhIDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtMTg1MywxMyArMTg1MywxMiBAQAogCQkJCWpvdXJuYWwtPmpfY2hrc3VtX2RyaXZlciA9IE5VTEw7CiAJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCX0KIAotCQkvKiBQcmVjb21wdXRlIGNoZWNrc3VtIHNlZWQgZm9yIGFsbCBtZXRhZGF0YSAqLwotCQlpZiAoamJkMl9qb3VybmFsX2hhc19jc3VtX3Yyb3IzKGpvdXJuYWwpKQorCQkJLyogUHJlY29tcHV0ZSBjaGVja3N1bSBzZWVkIGZvciBhbGwgbWV0YWRhdGEgKi8KIAkJCWpvdXJuYWwtPmpfY3N1bV9zZWVkID0gamJkMl9jaGtzdW0oam91cm5hbCwgfjAsCiAJCQkJCQkJICAgc2ItPnNfdXVpZCwKIAkJCQkJCQkgICBzaXplb2Yoc2ItPnNfdXVpZCkpOworCQl9CiAJfQogCiAJLyogSWYgZW5hYmxpbmcgdjEgY2hlY2tzdW1zLCBkb3duZ3JhZGUgc3VwZXJibG9jayAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbmNvcmUuaCBiL2ZzL2pmcy9qZnNfaW5jb3JlLmgKaW5kZXggY2Y0N2YwOS4uZmE3ZTc5NSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbmNvcmUuaAorKysgYi9mcy9qZnMvamZzX2luY29yZS5oCkBAIC05NCw2ICs5NCw5IEBACiAJCQl1bmNoYXIgX2lubGluZV9lYVsxMjhdOwkvKiAxMjg6IGlubGluZSBleHRlbmRlZCBhdHRyICovCiAJCX0gbGluazsKIAl9IHU7CisjaWZkZWYgQ09ORklHX1FVT1RBCisJc3RydWN0IGRxdW90ICppX2RxdW90W01BWFFVT1RBU107CisjZW5kaWYKIAl1MzIgZGV2OwkvKiB3aWxsIGRpZSB3aGVuIHdlIGdldCB3aWRlIGRldl90ICovCiAJc3RydWN0IGlub2RlCXZmc19pbm9kZTsKIH07CmRpZmYgLS1naXQgYS9mcy9qZnMvbmFtZWkuYyBiL2ZzL2pmcy9uYW1laS5jCmluZGV4IGQ1OWM3ZGUuLjM4ZmRjNTMgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9uYW1laS5jCisrKyBiL2ZzL2pmcy9uYW1laS5jCkBAIC04NCw3ICs4NCw3IEBACiAJc3RydWN0IGlub2RlICppcGxpc3RbMl07CiAJc3RydWN0IHRibG9jayAqdGJsazsKIAotCWpmc19pbmZvKCJqZnNfY3JlYXRlOiBkaXA6MHglcCBuYW1lOiVzIiwgZGlwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlqZnNfaW5mbygiamZzX2NyZWF0ZTogZGlwOjB4JXAgbmFtZTolcGQiLCBkaXAsIGRlbnRyeSk7CiAKIAlkcXVvdF9pbml0aWFsaXplKGRpcCk7CiAKQEAgLTIxNiw3ICsyMTYsNyBAQAogCXN0cnVjdCBpbm9kZSAqaXBsaXN0WzJdOwogCXN0cnVjdCB0YmxvY2sgKnRibGs7CiAKLQlqZnNfaW5mbygiamZzX21rZGlyOiBkaXA6MHglcCBuYW1lOiVzIiwgZGlwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlqZnNfaW5mbygiamZzX21rZGlyOiBkaXA6MHglcCBuYW1lOiVwZCIsIGRpcCwgZGVudHJ5KTsKIAogCWRxdW90X2luaXRpYWxpemUoZGlwKTsKIApAQCAtMzUyLDcgKzM1Miw3IEBACiAJc3RydWN0IGlub2RlICppcGxpc3RbMl07CiAJc3RydWN0IHRibG9jayAqdGJsazsKIAotCWpmc19pbmZvKCJqZnNfcm1kaXI6IGRpcDoweCVwIG5hbWU6JXMiLCBkaXAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCWpmc19pbmZvKCJqZnNfcm1kaXI6IGRpcDoweCVwIG5hbWU6JXBkIiwgZGlwLCBkZW50cnkpOwogCiAJLyogSW5pdCBpbm9kZSBmb3IgcXVvdGEgb3BlcmF0aW9ucy4gKi8KIAlkcXVvdF9pbml0aWFsaXplKGRpcCk7CkBAIC00ODAsNyArNDgwLDcgQEAKIAlzNjQgbmV3X3NpemUgPSAwOwogCWludCBjb21taXRfZmxhZzsKIAotCWpmc19pbmZvKCJqZnNfdW5saW5rOiBkaXA6MHglcCBuYW1lOiVzIiwgZGlwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlqZnNfaW5mbygiamZzX3VubGluazogZGlwOjB4JXAgbmFtZTolcGQiLCBkaXAsIGRlbnRyeSk7CiAKIAkvKiBJbml0IGlub2RlIGZvciBxdW90YSBvcGVyYXRpb25zLiAqLwogCWRxdW90X2luaXRpYWxpemUoZGlwKTsKQEAgLTc5Nyw4ICs3OTcsNyBAQAogCXN0cnVjdCBidHN0YWNrIGJ0c3RhY2s7CiAJc3RydWN0IGlub2RlICppcGxpc3RbMl07CiAKLQlqZnNfaW5mbygiamZzX2xpbms6ICVzICVzIiwgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCSBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlqZnNfaW5mbygiamZzX2xpbms6ICVwZCAlcGQiLCBvbGRfZGVudHJ5LCBkZW50cnkpOwogCiAJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOwogCkBAIC0xMDgyLDggKzEwODEsNyBAQAogCWludCBjb21taXRfZmxhZzsKIAogCi0JamZzX2luZm8oImpmc19yZW5hbWU6ICVzICVzIiwgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCSBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJamZzX2luZm8oImpmc19yZW5hbWU6ICVwZCAlcGQiLCBvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTsKIAogCWRxdW90X2luaXRpYWxpemUob2xkX2Rpcik7CiAJZHF1b3RfaW5pdGlhbGl6ZShuZXdfZGlyKTsKQEAgLTEzNTUsNyArMTM1Myw3IEBACiAJaWYgKCFuZXdfdmFsaWRfZGV2KHJkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWpmc19pbmZvKCJqZnNfbWtub2Q6ICVzIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJamZzX2luZm8oImpmc19ta25vZDogJXBkIiwgZGVudHJ5KTsKIAogCWRxdW90X2luaXRpYWxpemUoZGlyKTsKIApAQCAtMTQ0NCw3ICsxNDQyLDcgQEAKIAlzdHJ1Y3QgY29tcG9uZW50X25hbWUga2V5OwogCWludCByYzsKIAotCWpmc19pbmZvKCJqZnNfbG9va3VwOiBuYW1lID0gJXMiLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlqZnNfaW5mbygiamZzX2xvb2t1cDogbmFtZSA9ICVwZCIsIGRlbnRyeSk7CiAKIAlpZiAoKHJjID0gZ2V0X1VDU25hbWUoJmtleSwgZGVudHJ5KSkpCiAJCXJldHVybiBFUlJfUFRSKHJjKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9zdXBlci5jIGIvZnMvamZzL3N1cGVyLmMKaW5kZXggOTNlODk3ZS4uMTZjM2E5NTUgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9zdXBlci5jCisrKyBiL2ZzL2pmcy9zdXBlci5jCkBAIC0xMTcsNiArMTE3LDkgQEAKIAlqZnNfaW5vZGUgPSBrbWVtX2NhY2hlX2FsbG9jKGpmc19pbm9kZV9jYWNoZXAsIEdGUF9OT0ZTKTsKIAlpZiAoIWpmc19pbm9kZSkKIAkJcmV0dXJuIE5VTEw7CisjaWZkZWYgQ09ORklHX1FVT1RBCisJbWVtc2V0KCZqZnNfaW5vZGUtPmlfZHF1b3QsIDAsIHNpemVvZihqZnNfaW5vZGUtPmlfZHF1b3QpKTsKKyNlbmRpZgogCXJldHVybiAmamZzX2lub2RlLT52ZnNfaW5vZGU7CiB9CiAKQEAgLTUzNyw2ICs1NDAsNyBAQAogI2lmZGVmIENPTkZJR19RVU9UQQogCXNiLT5kcV9vcCA9ICZkcXVvdF9vcGVyYXRpb25zOwogCXNiLT5zX3Fjb3AgPSAmZHF1b3RfcXVvdGFjdGxfb3BzOworCXNiLT5zX3F1b3RhX3R5cGVzID0gUVRZUEVfTUFTS19VU1IgfCBRVFlQRV9NQVNLX0dSUDsKICNlbmRpZgogCiAJLyoKQEAgLTgzNiw2ICs4NDAsMTAgQEAKIAlyZXR1cm4gbGVuIC0gdG93cml0ZTsKIH0KIAorc3RhdGljIHN0cnVjdCBkcXVvdCAqKmpmc19nZXRfZHF1b3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIEpGU19JUChpbm9kZSktPmlfZHF1b3Q7Cit9CiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGpmc19zdXBlcl9vcGVyYXRpb25zID0gewpAQCAtODU0LDYgKzg2Miw3IEBACiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJLnF1b3RhX3JlYWQJPSBqZnNfcXVvdGFfcmVhZCwKIAkucXVvdGFfd3JpdGUJPSBqZnNfcXVvdGFfd3JpdGUsCisJLmdldF9kcXVvdHMJPSBqZnNfZ2V0X2RxdW90cywKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZnMva2VybmZzL2Rpci5jIGIvZnMva2VybmZzL2Rpci5jCmluZGV4IDFjNzcxOTMuLjM3OTg5ZjAgMTAwNjQ0Ci0tLSBhL2ZzL2tlcm5mcy9kaXIuYworKysgYi9mcy9rZXJuZnMvZGlyLmMKQEAgLTgwNyw3ICs4MDcsNyBAQAogCX0KIAogCS8qIGluc3RhbnRpYXRlIGFuZCBoYXNoIGRlbnRyeSAqLwotCXJldCA9IGRfbWF0ZXJpYWxpc2VfdW5pcXVlKGRlbnRyeSwgaW5vZGUpOworCXJldCA9IGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOwogIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZrZXJuZnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuYwppbmRleCAxNzFkMjg0Li4wMDU4NDNjIDEwMDY0NAotLS0gYS9mcy9saWJmcy5jCisrKyBiL2ZzL2xpYmZzLmMKQEAgLTExNCwxOCArMTE0LDE4IEBACiAKIAkJCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQkJLyogZF9sb2NrIG5vdCByZXF1aXJlZCBmb3IgY3Vyc29yICovCi0JCQlsaXN0X2RlbCgmY3Vyc29yLT5kX3UuZF9jaGlsZCk7CisJCQlsaXN0X2RlbCgmY3Vyc29yLT5kX2NoaWxkKTsKIAkJCXAgPSBkZW50cnktPmRfc3ViZGlycy5uZXh0OwogCQkJd2hpbGUgKG4gJiYgcCAhPSAmZGVudHJ5LT5kX3N1YmRpcnMpIHsKIAkJCQlzdHJ1Y3QgZGVudHJ5ICpuZXh0OwotCQkJCW5leHQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKKwkJCQluZXh0ID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgZGVudHJ5LCBkX2NoaWxkKTsKIAkJCQlzcGluX2xvY2tfbmVzdGVkKCZuZXh0LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKIAkJCQlpZiAoc2ltcGxlX3Bvc2l0aXZlKG5leHQpKQogCQkJCQluLS07CiAJCQkJc3Bpbl91bmxvY2soJm5leHQtPmRfbG9jayk7CiAJCQkJcCA9IHAtPm5leHQ7CiAJCQl9Ci0JCQlsaXN0X2FkZF90YWlsKCZjdXJzb3ItPmRfdS5kX2NoaWxkLCBwKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmN1cnNvci0+ZF9jaGlsZCwgcCk7CiAJCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQl9CiAJfQpAQCAtMTUwLDcgKzE1MCw3IEBACiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgZGVudHJ5ICpjdXJzb3IgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcCwgKnEgPSAmY3Vyc29yLT5kX3UuZF9jaGlsZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcSA9ICZjdXJzb3ItPmRfY2hpbGQ7CiAKIAlpZiAoIWRpcl9lbWl0X2RvdHMoZmlsZSwgY3R4KSkKIAkJcmV0dXJuIDA7CkBAIC0xNTksNyArMTU5LDcgQEAKIAkJbGlzdF9tb3ZlKHEsICZkZW50cnktPmRfc3ViZGlycyk7CiAKIAlmb3IgKHAgPSBxLT5uZXh0OyBwICE9ICZkZW50cnktPmRfc3ViZGlyczsgcCA9IHAtPm5leHQpIHsKLQkJc3RydWN0IGRlbnRyeSAqbmV4dCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGRlbnRyeSwgZF91LmRfY2hpbGQpOworCQlzdHJ1Y3QgZGVudHJ5ICpuZXh0ID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgZGVudHJ5LCBkX2NoaWxkKTsKIAkJc3Bpbl9sb2NrX25lc3RlZCgmbmV4dC0+ZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7CiAJCWlmICghc2ltcGxlX3Bvc2l0aXZlKG5leHQpKSB7CiAJCQlzcGluX3VubG9jaygmbmV4dC0+ZF9sb2NrKTsKQEAgLTI4Nyw3ICsyODcsNyBAQAogCWludCByZXQgPSAwOwogCiAJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJmRlbnRyeS0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZkZW50cnktPmRfc3ViZGlycywgZF9jaGlsZCkgewogCQlzcGluX2xvY2tfbmVzdGVkKCZjaGlsZC0+ZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7CiAJCWlmIChzaW1wbGVfcG9zaXRpdmUoY2hpbGQpKSB7CiAJCQlzcGluX3VubG9jaygmY2hpbGQtPmRfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmNsb2NrLmMgYi9mcy9sb2NrZC9zdmNsb2NrLmMKaW5kZXggMTNkYjk1Zi4uNTY1OTg3NCAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjbG9jay5jCisrKyBiL2ZzL2xvY2tkL3N2Y2xvY2suYwpAQCAtNTMsNyArNTMsNyBAQAogc3RhdGljIExJU1RfSEVBRChubG1fYmxvY2tlZCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5sbV9ibG9ja2VkX2xvY2spOwogCi0jaWZkZWYgTE9DS0RfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiBzdGF0aWMgY29uc3QgY2hhciAqbmxtZGJnX2Nvb2tpZTJhKGNvbnN0IHN0cnVjdCBubG1fY29va2llICpjb29raWUpCiB7CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y3N1YnMuYyBiL2ZzL2xvY2tkL3N2Y3N1YnMuYwppbmRleCBiNmYzYjg0Li5kMTJmZjRlIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmNzdWJzLmMKKysrIGIvZnMvbG9ja2Qvc3Zjc3Vicy5jCkBAIC00MDgsNyArNDA4LDcgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGF0YXA7CiAKLQlyZXR1cm4gc2IgPT0gZmlsZS0+Zl9maWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiOworCXJldHVybiBzYiA9PSBmaWxlX2lub2RlKGZpbGUtPmZfZmlsZSktPmlfc2I7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvZGlyLmMgYi9mcy9uY3Bmcy9kaXIuYwppbmRleCA3Y2I3NTFkLi4wMDg5NjAxIDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9kaXIuYworKysgYi9mcy9uY3Bmcy9kaXIuYwpAQCAtMTk4LDggKzE5OCw4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IG5jcF9pc19zZXJ2ZXJfcm9vdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXJldHVybiAoIW5jcF9zaW5nbGVfdm9sdW1lKE5DUF9TRVJWRVIoaW5vZGUpKSAmJgotCQlpbm9kZSA9PSBpbm9kZS0+aV9zYi0+c19yb290LT5kX2lub2RlKTsKKwlyZXR1cm4gIW5jcF9zaW5nbGVfdm9sdW1lKE5DUF9TRVJWRVIoaW5vZGUpKSAmJgorCQlpc19yb290X2lub2RlKGlub2RlKTsKIH0KIAogCkBAIC00MDMsNyArNDAzLDcgQEAKIAogCS8qIElmIGEgcG9pbnRlciBpcyBpbnZhbGlkLCB3ZSBzZWFyY2ggdGhlIGRlbnRyeS4gKi8KIAlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlbnQsICZwYXJlbnQtPmRfc3ViZGlycywgZF91LmRfY2hpbGQpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlbnQsICZwYXJlbnQtPmRfc3ViZGlycywgZF9jaGlsZCkgewogCQlpZiAoKHVuc2lnbmVkIGxvbmcpZGVudC0+ZF9mc2RhdGEgPT0gZnBvcykgewogCQkJaWYgKGRlbnQtPmRfaW5vZGUpCiAJCQkJZGdldChkZW50KTsKQEAgLTY4NSw4ICs2ODUsNyBAQAogbmNwX3JlYWRfdm9sdW1lX2xpc3Qoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LAogCQkJc3RydWN0IG5jcF9jYWNoZV9jb250cm9sICpjdGwpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCXN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIgPSBOQ1BfU0VSVkVSKGlub2RlKTsKIAlzdHJ1Y3QgbmNwX3ZvbHVtZV9pbmZvIGluZm87CiAJc3RydWN0IG5jcF9lbnRyeV9pbmZvIGVudHJ5OwpAQCAtNzIxLDggKzcyMCw3IEBACiBuY3BfZG9fcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsCiAJCQkJCQlzdHJ1Y3QgbmNwX2NhY2hlX2NvbnRyb2wgKmN0bCkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqZGlyID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqZGlyID0gZmlsZV9pbm9kZShmaWxlKTsKIAlzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyID0gTkNQX1NFUlZFUihkaXIpOwogCXN0cnVjdCBud19zZWFyY2hfc2VxdWVuY2Ugc2VxOwogCXN0cnVjdCBuY3BfZW50cnlfaW5mbyBlbnRyeTsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2ZpbGUuYyBiL2ZzL25jcGZzL2ZpbGUuYwppbmRleCA3NzY0MGE4Li4xZGQ3MDA3IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9maWxlLmMKKysrIGIvZnMvbmNwZnMvZmlsZS5jCkBAIC0xMDAsOCArMTAwLDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBuY3BfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJc2l6ZV90IGFscmVhZHlfcmVhZCA9IDA7CiAJb2ZmX3QgcG9zOwogCXNpemVfdCBidWZzaXplOwpAQCAtMTA5LDcgKzEwOCw3IEBACiAJdm9pZCogZnJlZXBhZ2U7CiAJc2l6ZV90IGZyZWVsZW47CiAKLQluY3BfZGJnKDEsICJlbnRlciAlcGQyXG4iLCBkZW50cnkpOworCW5jcF9kYmcoMSwgImVudGVyICVwRDJcbiIsIGZpbGUpOwogCiAJcG9zID0gKnBwb3M7CiAKQEAgLTE2Nyw3ICsxNjYsNyBAQAogCiAJZmlsZV9hY2Nlc3NlZChmaWxlKTsKIAotCW5jcF9kYmcoMSwgImV4aXQgJXBkMlxuIiwgZGVudHJ5KTsKKwluY3BfZGJnKDEsICJleGl0ICVwRDJcbiIsIGZpbGUpOwogb3V0cmVsOgogCW5jcF9pbm9kZV9jbG9zZShpbm9kZSk7CQkKIAlyZXR1cm4gYWxyZWFkeV9yZWFkID8gYWxyZWFkeV9yZWFkIDogZXJyb3I7CkBAIC0xNzYsMTUgKzE3NSwxNCBAQAogc3RhdGljIHNzaXplX3QKIG5jcF9maWxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJc2l6ZV90IGFscmVhZHlfd3JpdHRlbiA9IDA7CiAJb2ZmX3QgcG9zOwogCXNpemVfdCBidWZzaXplOwogCWludCBlcnJubzsKIAl2b2lkKiBib3VuY2VidWZmZXI7CiAKLQluY3BfZGJnKDEsICJlbnRlciAlcGQyXG4iLCBkZW50cnkpOworCW5jcF9kYmcoMSwgImVudGVyICVwRDJcbiIsIGZpbGUpOwogCWlmICgoc3NpemVfdCkgY291bnQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlwb3MgPSAqcHBvczsKQEAgLTI2Myw3ICsyNjEsNyBAQAogCQkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MpOwogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAl9Ci0JbmNwX2RiZygxLCAiZXhpdCAlcGQyXG4iLCBkZW50cnkpOworCW5jcF9kYmcoMSwgImV4aXQgJXBEMlxuIiwgZmlsZSk7CiBvdXRyZWw6CiAJbmNwX2lub2RlX2Nsb3NlKGlub2RlKTsJCQogCXJldHVybiBhbHJlYWR5X3dyaXR0ZW4gPyBhbHJlYWR5X3dyaXR0ZW4gOiBlcnJubzsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2lvY3RsLmMgYi9mcy9uY3Bmcy9pb2N0bC5jCmluZGV4IGQ1NjU5ZDkuLmNmN2UwNDMgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2lvY3RsLmMKKysrIGIvZnMvbmNwZnMvaW9jdGwuYwpAQCAtNDQ3LDcgKzQ0Nyw2IEBACiAJCQkJCQlyZXN1bHQgPSAtRUlPOwogCQkJCQl9CiAJCQkJfQotCQkJCXJlc3VsdCA9IDA7CiAJCQl9CiAJCQltdXRleF91bmxvY2soJnNlcnZlci0+cm9vdF9zZXR1cF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvbW1hcC5jIGIvZnMvbmNwZnMvbW1hcC5jCmluZGV4IGIzNTlkMTIuLjMzYjg3M2IgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL21tYXAuYworKysgYi9mcy9uY3Bmcy9tbWFwLmMKQEAgLTMwLDkgKzMwLDcgQEAKIHN0YXRpYyBpbnQgbmNwX2ZpbGVfbW1hcF9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEsCiAJCQkJCXN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewotCXN0cnVjdCBmaWxlICpmaWxlID0gYXJlYS0+dm1fZmlsZTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoYXJlYS0+dm1fZmlsZSk7CiAJY2hhciAqcGdfYWRkcjsKIAl1bnNpZ25lZCBpbnQgYWxyZWFkeV9yZWFkOwogCXVuc2lnbmVkIGludCBjb3VudDsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL25jcGxpYl9rZXJuZWwuaCBiL2ZzL25jcGZzL25jcGxpYl9rZXJuZWwuaAppbmRleCA1MmNiMTlkLi5iNzg1Zjc0IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmgKKysrIGIvZnMvbmNwZnMvbmNwbGliX2tlcm5lbC5oCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlbnRyeSwgJnBhcmVudC0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVudHJ5LCAmcGFyZW50LT5kX3N1YmRpcnMsIGRfY2hpbGQpIHsKIAkJaWYgKGRlbnRyeS0+ZF9mc2RhdGEgPT0gTlVMTCkKIAkJCW5jcF9hZ2VfZGVudHJ5KHNlcnZlciwgZGVudHJ5KTsKIAkJZWxzZQpAQCAtMjA3LDcgKzIwNyw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCiAJc3Bpbl9sb2NrKCZwYXJlbnQtPmRfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZW50cnksICZwYXJlbnQtPmRfc3ViZGlycywgZF91LmRfY2hpbGQpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlbnRyeSwgJnBhcmVudC0+ZF9zdWJkaXJzLCBkX2NoaWxkKSB7CiAJCWRlbnRyeS0+ZF9mc2RhdGEgPSBOVUxMOwogCQluY3BfYWdlX2RlbnRyeShzZXJ2ZXIsIGRlbnRyeSk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMgYi9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuYwppbmRleCA0ZjQ2ZjdhLi43N2ZlYzZhIDEwMDY0NAotLS0gYS9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuYworKysgYi9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuYwpAQCAtODEyLDcgKzgxMiw3IEBACiAKIAkvKiBPcHRpbWl6ZSBjb21tb24gY2FzZSB0aGF0IHdyaXRlcyBmcm9tIDAgdG8gZW5kIG9mIGZpbGUgKi8KIAllbmQgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX0NBQ0hFX1NJWkUpOwotCWlmIChlbmQgIT0gTkZTX0koaW5vZGUpLT5ucGFnZXMpIHsKKwlpZiAoZW5kICE9IGlub2RlLT5pX21hcHBpbmctPm5ycGFnZXMpIHsKIAkJcmN1X3JlYWRfbG9jaygpOwogCQllbmQgPSBwYWdlX2NhY2hlX25leHRfaG9sZShtYXBwaW5nLCBpZHggKyAxLCBVTE9OR19NQVgpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9ibG9ja2xheW91dC9ycGNfcGlwZWZzLmMgYi9mcy9uZnMvYmxvY2tsYXlvdXQvcnBjX3BpcGVmcy5jCmluZGV4IGFjYmY5Y2EuLmRiZTU4MzkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9ibG9ja2xheW91dC9ycGNfcGlwZWZzLmMKKysrIGIvZnMvbmZzL2Jsb2NrbGF5b3V0L3JwY19waXBlZnMuYwpAQCAtMTEyLDcgKzExMiw3IEBACiBzdGF0aWMgc3NpemVfdCBibF9waXBlX2Rvd25jYWxsKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLAogCQkJIHNpemVfdCBtbGVuKQogewotCXN0cnVjdCBuZnNfbmV0ICpubiA9IG5ldF9nZW5lcmljKGZpbHAtPmZfZGVudHJ5LT5kX3NiLT5zX2ZzX2luZm8sCisJc3RydWN0IG5mc19uZXQgKm5uID0gbmV0X2dlbmVyaWMoZmlsZV9pbm9kZShmaWxwKS0+aV9zYi0+c19mc19pbmZvLAogCQkJCQkgbmZzX25ldF9pZCk7CiAKIAlpZiAobWxlbiAhPSBzaXplb2YgKHN0cnVjdCBibF9kZXZfbXNnKSkKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFja19wcm9jLmMgYi9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCmluZGV4IDczNDY2YjkuLmUzNmE5ZDcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYwpAQCAtNDksNyArNDksNyBAQAogCQlnb3RvIG91dF9pcHV0OwogCXJlcy0+c2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAlyZXMtPmNoYW5nZV9hdHRyID0gZGVsZWdhdGlvbi0+Y2hhbmdlX2F0dHI7Ci0JaWYgKG5mc2ktPm5wYWdlcyAhPSAwKQorCWlmIChuZnNpLT5ucmVxdWVzdHMgIT0gMCkKIAkJcmVzLT5jaGFuZ2VfYXR0cisrOwogCXJlcy0+Y3RpbWUgPSBpbm9kZS0+aV9jdGltZTsKIAlyZXMtPm10aW1lID0gaW5vZGUtPmlfbXRpbWU7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggNmU2MjE1NS4uOWIwYzU1YyAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiBzdGF0aWMgaW50CiBuZnNfY2xvc2VkaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JcHV0X25mc19vcGVuX2Rpcl9jb250ZXh0KGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbHAtPnByaXZhdGVfZGF0YSk7CisJcHV0X25mc19vcGVuX2Rpcl9jb250ZXh0KGZpbGVfaW5vZGUoZmlscCksIGZpbHAtPnByaXZhdGVfZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5OSw3ICs0OTksNyBAQAogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIG91dDsKIAotCWFsaWFzID0gZF9tYXRlcmlhbGlzZV91bmlxdWUoZGVudHJ5LCBpbm9kZSk7CisJYWxpYXMgPSBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKIAlpZiAoSVNfRVJSKGFsaWFzKSkKIAkJZ290byBvdXQ7CiAJZWxzZSBpZiAoYWxpYXMpIHsKQEAgLTEzOTMsNyArMTM5Myw3IEBACiAJbmZzX2FkdmlzZV91c2VfcmVhZGRpcnBsdXMoZGlyKTsKIAogbm9fZW50cnk6Ci0JcmVzID0gZF9tYXRlcmlhbGlzZV91bmlxdWUoZGVudHJ5LCBpbm9kZSk7CisJcmVzID0gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CiAJaWYgKHJlcyAhPSBOVUxMKSB7CiAJCWlmIChJU19FUlIocmVzKSkKIAkJCWdvdG8gb3V0X3VuYmxvY2tfc2lsbHlyZW5hbWU7CmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0ZGV2LmMgYi9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0ZGV2LmMKaW5kZXggOWJiODA2YS4uYmZlY2FjNyAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGVsYXlvdXQvZmlsZWxheW91dGRldi5jCisrKyBiL2ZzL25mcy9maWxlbGF5b3V0L2ZpbGVsYXlvdXRkZXYuYwpAQCAtMjA0LDggKzIwNCw3IEBACiAJaWZkZWJ1ZyhGQUNJTElUWSkKIAkJcHJpbnRfZHMoZHMpOwogCi0JaWYgKGRzLT5kc19jbHApCi0JCW5mc19wdXRfY2xpZW50KGRzLT5kc19jbHApOworCW5mc19wdXRfY2xpZW50KGRzLT5kc19jbHApOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcy0+ZHNfYWRkcnMpKSB7CiAJCWRhID0gbGlzdF9maXJzdF9lbnRyeSgmZHMtPmRzX2FkZHJzLApkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZzY2FjaGUuYyBiL2ZzL25mcy9mc2NhY2hlLmMKaW5kZXggM2VmMDFmMC4uZDYzYmVhOCAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZzY2FjaGUuYworKysgYi9mcy9uZnMvZnNjYWNoZS5jCkBAIC0yNjksOCArMjY5LDggQEAKIAkJaWYgKCFmc2NhY2hlX21heWJlX3JlbGVhc2VfcGFnZShjb29raWUsIHBhZ2UsIGdmcCkpCiAJCQlyZXR1cm4gMDsKIAotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMocGFnZS0+bWFwcGluZy0+aG9zdCwKLQkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCwgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhwYWdlLT5tYXBwaW5nLT5ob3N0LAorCQkJCSAgICAgIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1VOQ0FDSEVEKTsKIAl9CiAKIAlyZXR1cm4gMTsKQEAgLTI5Myw4ICsyOTMsOCBAQAogCiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlmc2NhY2hlX3VuY2FjaGVfcGFnZShjb29raWUsIHBhZ2UpOwotCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhwYWdlLT5tYXBwaW5nLT5ob3N0LAotCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfVU5DQUNIRUQsIDEpOworCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhwYWdlLT5tYXBwaW5nLT5ob3N0LAorCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfVU5DQUNIRUQpOwogfQogCiAvKgpAQCAtMzQzLDE5ICszNDMsMTkgQEAKIAljYXNlIDA6IC8qIHJlYWQgQklPIHN1Ym1pdHRlZCAocGFnZSBpbiBmc2NhY2hlKSAqLwogCQlkZnByaW50ayhGU0NBQ0hFLAogCQkJICJORlM6ICAgIHJlYWRwYWdlX2Zyb21fZnNjYWNoZTogQklPIHN1Ym1pdHRlZFxuIik7Ci0JCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9PSywgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9PSyk7CiAJCXJldHVybiByZXQ7CiAKIAljYXNlIC1FTk9CVUZTOiAvKiBpbm9kZSBub3QgaW4gY2FjaGUgKi8KIAljYXNlIC1FTk9EQVRBOiAvKiBwYWdlIG5vdCBpbiBjYWNoZSAqLwotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCwgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9GQUlMKTsKIAkJZGZwcmludGsoRlNDQUNIRSwKIAkJCSAiTkZTOiAgICByZWFkcGFnZV9mcm9tX2ZzY2FjaGUgJWRcbiIsIHJldCk7CiAJCXJldHVybiAxOwogCiAJZGVmYXVsdDoKIAkJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogICAgcmVhZHBhZ2VfZnJvbV9mc2NhY2hlICVkXG4iLCByZXQpOwotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCwgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9GQUlMKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQyOSwxMSArNDI5LDExIEBACiAKIAlpZiAocmV0ICE9IDApIHsKIAkJZnNjYWNoZV91bmNhY2hlX3BhZ2UobmZzX2lfZnNjYWNoZShpbm9kZSksIHBhZ2UpOwotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsCi0JCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfV1JJVFRFTl9GQUlMLCAxKTsKLQkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCwgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhpbm9kZSwKKwkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19XUklUVEVOX0ZBSUwpOworCQluZnNfaW5jX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1VOQ0FDSEVEKTsKIAl9IGVsc2UgewotCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsCi0JCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfV1JJVFRFTl9PSywgMSk7CisJCW5mc19pbmNfZnNjYWNoZV9zdGF0cyhpbm9kZSwKKwkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19XUklUVEVOX09LKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvZ2V0cm9vdC5jIGIvZnMvbmZzL2dldHJvb3QuYwppbmRleCA4ODA2MThhLi45YWMzODQ2IDEwMDY0NAotLS0gYS9mcy9uZnMvZ2V0cm9vdC5jCisrKyBiL2ZzL25mcy9nZXRyb290LmMKQEAgLTUxLDE0ICs1MSwxNCBAQAogCQkvKgogCQkgKiBFbnN1cmUgdGhhdCB0aGlzIGRlbnRyeSBpcyBpbnZpc2libGUgdG8gZF9maW5kX2FsaWFzKCkuCiAJCSAqIE90aGVyd2lzZSwgaXQgbWF5IGJlIHNwbGljZWQgaW50byB0aGUgdHJlZSBieQotCQkgKiBkX21hdGVyaWFsaXNlX3VuaXF1ZSBpZiBhIHBhcmVudCBkaXJlY3RvcnkgZnJvbSB0aGUgc2FtZQorCQkgKiBkX3NwbGljZV9hbGlhcyBpZiBhIHBhcmVudCBkaXJlY3RvcnkgZnJvbSB0aGUgc2FtZQogCQkgKiBmaWxlc3lzdGVtIGdldHMgbW91bnRlZCBhdCBhIGxhdGVyIHRpbWUuCiAJCSAqIFRoaXMgYWdhaW4gY2F1c2VzIHNocmlua19kY2FjaGVfZm9yX3Vtb3VudF9zdWJ0cmVlKCkgdG8KIAkJICogT29wcywgc2luY2UgdGhlIHRlc3QgZm9yIElTX1JPT1QoKSB3aWxsIGZhaWwuCiAJCSAqLwogCQlzcGluX2xvY2soJnNiLT5zX3Jvb3QtPmRfaW5vZGUtPmlfbG9jayk7CiAJCXNwaW5fbG9jaygmc2ItPnNfcm9vdC0+ZF9sb2NrKTsKLQkJaGxpc3RfZGVsX2luaXQoJnNiLT5zX3Jvb3QtPmRfYWxpYXMpOworCQlobGlzdF9kZWxfaW5pdCgmc2ItPnNfcm9vdC0+ZF91LmRfYWxpYXMpOwogCQlzcGluX3VubG9jaygmc2ItPnNfcm9vdC0+ZF9sb2NrKTsKIAkJc3Bpbl91bmxvY2soJnNiLT5zX3Jvb3QtPmRfaW5vZGUtPmlfbG9jayk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCAwMDY4OWE4Li40YmZmZTYzIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtMTkyLDYgKzE5Miw3IEBACiAJbmZzX3phcF9jYWNoZXNfbG9ja2VkKGlub2RlKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZnNfemFwX2NhY2hlcyk7CiAKIHZvaWQgbmZzX3phcF9tYXBwaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewpAQCAtMTE0OSw3ICsxMTUwLDcgQEAKIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRVNJWkUpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfU0laRSkKIAkJCSYmIGlfc2l6ZV9yZWFkKGlub2RlKSA9PSBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnByZV9zaXplKQotCQkJJiYgbmZzaS0+bnBhZ2VzID09IDApIHsKKwkJCSYmIG5mc2ktPm5yZXF1ZXN0cyA9PSAwKSB7CiAJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKSk7CiAJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKIAl9CkBAIC0xMTkyLDcgKzExOTMsNyBAQAogCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKSB7CiAJCWN1cl9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCQluZXdfaXNpemUgPSBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpOwotCQlpZiAoY3VyX3NpemUgIT0gbmV3X2lzaXplICYmIG5mc2ktPm5wYWdlcyA9PSAwKQorCQlpZiAoY3VyX3NpemUgIT0gbmV3X2lzaXplICYmIG5mc2ktPm5yZXF1ZXN0cyA9PSAwKQogCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX1JFVkFMX1BBR0VDQUNIRTsKIAl9CiAKQEAgLTE2MTksNyArMTYyMCw3IEBACiAJCWlmIChuZXdfaXNpemUgIT0gY3VyX2lzaXplKSB7CiAJCQkvKiBEbyB3ZSBwZXJoYXBzIGhhdmUgYW55IG91dHN0YW5kaW5nIHdyaXRlcywgb3IgaGFzCiAJCQkgKiB0aGUgZmlsZSBncm93biBiZXlvbmQgb3VyIGxhc3Qgd3JpdGU/ICovCi0JCQlpZiAoKG5mc2ktPm5wYWdlcyA9PSAwKSB8fCBuZXdfaXNpemUgPiBjdXJfaXNpemUpIHsKKwkJCWlmICgobmZzaS0+bnJlcXVlc3RzID09IDApIHx8IG5ld19pc2l6ZSA+IGN1cl9pc2l6ZSkgewogCQkJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmV3X2lzaXplKTsKIAkJCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9EQVRBOwogCQkJCWludmFsaWQgJj0gfk5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOwpAQCAtMTc4NCw3ICsxNzg1LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmbmZzaS0+YWNjZXNzX2NhY2hlX2VudHJ5X2xydSk7CiAJSU5JVF9MSVNUX0hFQUQoJm5mc2ktPmFjY2Vzc19jYWNoZV9pbm9kZV9scnUpOwogCUlOSVRfTElTVF9IRUFEKCZuZnNpLT5jb21taXRfaW5mby5saXN0KTsKLQluZnNpLT5ucGFnZXMgPSAwOworCW5mc2ktPm5yZXF1ZXN0cyA9IDA7CiAJbmZzaS0+Y29tbWl0X2luZm8ubmNvbW1pdCA9IDA7CiAJYXRvbWljX3NldCgmbmZzaS0+Y29tbWl0X2luZm8ucnBjc19vdXQsIDApOwogCWF0b21pY19zZXQoJm5mc2ktPnNpbGx5X2NvdW50LCAxKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pb3N0YXQuaCBiL2ZzL25mcy9pb3N0YXQuaAppbmRleCBjNTgzMjQ4Li4wY2I4MDZmIDEwMDY0NAotLS0gYS9mcy9uZnMvaW9zdGF0LmgKKysrIGIvZnMvbmZzL2lvc3RhdC5oCkBAIC01NSw2ICs1NSwxMSBAQAogewogCXRoaXNfY3B1X2FkZChORlNfU0VSVkVSKGlub2RlKS0+aW9fc3RhdHMtPmZzY2FjaGVbc3RhdF0sIGFkZGVuZCk7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2luY19mc2NhY2hlX3N0YXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBlbnVtIG5mc19zdGF0X2ZzY2FjaGVjb3VudGVycyBzdGF0KQoreworCXRoaXNfY3B1X2luYyhORlNfU0VSVkVSKGlub2RlKS0+aW9fc3RhdHMtPmZzY2FjaGVbc3RhdF0pOworfQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mc19pb3N0YXRzIF9fcGVyY3B1ICpuZnNfYWxsb2NfaW9zdGF0cyh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczQyLmggYi9mcy9uZnMvbmZzNDIuaAppbmRleCBkMTAzMzNhLi43YWZiODk0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNDIuaAorKysgYi9mcy9uZnMvbmZzNDIuaApAQCAtNiw2ICs2LDggQEAKICNkZWZpbmUgX19MSU5VWF9GU19ORlNfTkZTNF8yX0gKIAogLyogbmZzNC4ycHJvYy5jICovCitpbnQgbmZzNDJfcHJvY19hbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGxvZmZfdCk7CitpbnQgbmZzNDJfcHJvY19kZWFsbG9jYXRlKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgbG9mZl90KTsKIGxvZmZfdCBuZnM0Ml9wcm9jX2xsc2VlayhzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7CiAKIC8qIG5mczQuMnhkci5oICovCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNDJwcm9jLmMgYi9mcy9uZnMvbmZzNDJwcm9jLmMKaW5kZXggMDg4NmYxZC4uY2IxNzA3MiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczQycHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0MnByb2MuYwpAQCAtMzIsNiArMzIsODEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IF9uZnM0Ml9wcm9jX2ZhbGxvY2F0ZShzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZywgc3RydWN0IGZpbGUgKmZpbGVwLAorCQkJCSBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlzdHJ1Y3QgbmZzNDJfZmFsbG9jX2FyZ3MgYXJncyA9IHsKKwkJLmZhbGxvY19maAk9IE5GU19GSChpbm9kZSksCisJCS5mYWxsb2Nfb2Zmc2V0CT0gb2Zmc2V0LAorCQkuZmFsbG9jX2xlbmd0aAk9IGxlbiwKKwl9OworCXN0cnVjdCBuZnM0Ml9mYWxsb2NfcmVzIHJlczsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NFUlZFUihpbm9kZSk7CisJaW50IHN0YXR1czsKKworCW1zZy0+cnBjX2FyZ3AgPSAmYXJnczsKKwltc2ctPnJwY19yZXNwID0gJnJlczsKKworCXN0YXR1cyA9IG5mczQyX3NldF9yd19zdGF0ZWlkKCZhcmdzLmZhbGxvY19zdGF0ZWlkLCBmaWxlcCwgRk1PREVfV1JJVEUpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gbmZzNF9jYWxsX3N5bmMoc2VydmVyLT5jbGllbnQsIHNlcnZlciwgbXNnLAorCQkJICAgICAgJmFyZ3Muc2VxX2FyZ3MsICZyZXMuc2VxX3JlcywgMCk7Cit9CisKK3N0YXRpYyBpbnQgbmZzNDJfcHJvY19mYWxsb2NhdGUoc3RydWN0IHJwY19tZXNzYWdlICptc2csIHN0cnVjdCBmaWxlICpmaWxlcCwKKwkJCQlsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGZpbGVfaW5vZGUoZmlsZXApKTsKKwlzdHJ1Y3QgbmZzNF9leGNlcHRpb24gZXhjZXB0aW9uID0geyB9OworCWludCBlcnI7CisKKwlkbyB7CisJCWVyciA9IF9uZnM0Ml9wcm9jX2ZhbGxvY2F0ZShtc2csIGZpbGVwLCBvZmZzZXQsIGxlbik7CisJCWlmIChlcnIgPT0gLUVOT1RTVVBQKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQllcnIgPSBuZnM0X2hhbmRsZV9leGNlcHRpb24oc2VydmVyLCBlcnIsICZleGNlcHRpb24pOworCX0gd2hpbGUgKGV4Y2VwdGlvbi5yZXRyeSk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbmZzNDJfcHJvY19hbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pCit7CisJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKKwkJLnJwY19wcm9jID0gJm5mczRfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX0FMTE9DQVRFXSwKKwl9OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlpbnQgZXJyOworCisJaWYgKCFuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfQUxMT0NBVEUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwllcnIgPSBuZnM0Ml9wcm9jX2ZhbGxvY2F0ZSgmbXNnLCBmaWxlcCwgb2Zmc2V0LCBsZW4pOworCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApCisJCU5GU19TRVJWRVIoaW5vZGUpLT5jYXBzICY9IH5ORlNfQ0FQX0FMTE9DQVRFOworCXJldHVybiBlcnI7Cit9CisKK2ludCBuZnM0Ml9wcm9jX2RlYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGVwLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBycGNfbWVzc2FnZSBtc2cgPSB7CisJCS5ycGNfcHJvYyA9ICZuZnM0X3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9ERUFMTE9DQVRFXSwKKwl9OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlpbnQgZXJyOworCisJaWYgKCFuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfREVBTExPQ0FURSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVyciA9IG5mczQyX3Byb2NfZmFsbG9jYXRlKCZtc2csIGZpbGVwLCBvZmZzZXQsIGxlbik7CisJaWYgKGVyciA9PSAtRU9QTk9UU1VQUCkKKwkJTkZTX1NFUlZFUihpbm9kZSktPmNhcHMgJj0gfk5GU19DQVBfREVBTExPQ0FURTsKKwlyZXR1cm4gZXJyOworfQorCiBsb2ZmX3QgbmZzNDJfcHJvY19sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGVwLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKQEAgLTUwLDcgKzEyNSw3IEBACiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOwogCWludCBzdGF0dXM7CiAKLQlpZiAoIShzZXJ2ZXItPmNhcHMgJiBORlNfQ0FQX1NFRUspKQorCWlmICghbmZzX3NlcnZlcl9jYXBhYmxlKGlub2RlLCBORlNfQ0FQX1NFRUspKQogCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJc3RhdHVzID0gbmZzNDJfc2V0X3J3X3N0YXRlaWQoJmFyZ3Muc2Ffc3RhdGVpZCwgZmlsZXAsIEZNT0RFX1JFQUQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczQyeGRyLmMgYi9mcy9uZnMvbmZzNDJ4ZHIuYwppbmRleCBjOTA0NjliLi4wMzhhN2UxNSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczQyeGRyLmMKKysrIGIvZnMvbmZzL25mczQyeGRyLmMKQEAgLTQsNiArNCwxNSBAQAogI2lmbmRlZiBfX0xJTlVYX0ZTX05GU19ORlM0XzJYRFJfSAogI2RlZmluZSBfX0xJTlVYX0ZTX05GU19ORlM0XzJYRFJfSAogCisjZGVmaW5lIGVuY29kZV9mYWxsb2NhdGVfbWF4c3oJCShlbmNvZGVfc3RhdGVpZF9tYXhzeiArIFwKKwkJCQkJIDIgLyogb2Zmc2V0ICovICsgXAorCQkJCQkgMiAvKiBsZW5ndGggKi8pCisjZGVmaW5lIGVuY29kZV9hbGxvY2F0ZV9tYXhzegkJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfZmFsbG9jYXRlX21heHN6KQorI2RlZmluZSBkZWNvZGVfYWxsb2NhdGVfbWF4c3oJCShvcF9kZWNvZGVfaGRyX21heHN6KQorI2RlZmluZSBlbmNvZGVfZGVhbGxvY2F0ZV9tYXhzegkJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfZmFsbG9jYXRlX21heHN6KQorI2RlZmluZSBkZWNvZGVfZGVhbGxvY2F0ZV9tYXhzegkJKG9wX2RlY29kZV9oZHJfbWF4c3opCiAjZGVmaW5lIGVuY29kZV9zZWVrX21heHN6CQkob3BfZW5jb2RlX2hkcl9tYXhzeiArIFwKIAkJCQkJIGVuY29kZV9zdGF0ZWlkX21heHN6ICsgXAogCQkJCQkgMiAvKiBvZmZzZXQgKi8gKyBcCkBAIC0xNCw2ICsyMywxOCBAQAogCQkJCQkgMiAvKiBvZmZzZXQgKi8gKyBcCiAJCQkJCSAyIC8qIGxlbmd0aCAqLykKIAorI2RlZmluZSBORlM0X2VuY19hbGxvY2F0ZV9zegkJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfcHV0ZmhfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfYWxsb2NhdGVfbWF4c3opCisjZGVmaW5lIE5GUzRfZGVjX2FsbG9jYXRlX3N6CQkoY29tcG91bmRfZGVjb2RlX2hkcl9tYXhzeiArIFwKKwkJCQkJIGRlY29kZV9wdXRmaF9tYXhzeiArIFwKKwkJCQkJIGRlY29kZV9hbGxvY2F0ZV9tYXhzeikKKyNkZWZpbmUgTkZTNF9lbmNfZGVhbGxvY2F0ZV9zegkJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfcHV0ZmhfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfZGVhbGxvY2F0ZV9tYXhzeikKKyNkZWZpbmUgTkZTNF9kZWNfZGVhbGxvY2F0ZV9zegkJKGNvbXBvdW5kX2RlY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBkZWNvZGVfcHV0ZmhfbWF4c3ogKyBcCisJCQkJCSBkZWNvZGVfZGVhbGxvY2F0ZV9tYXhzeikKICNkZWZpbmUgTkZTNF9lbmNfc2Vla19zegkJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCiAJCQkJCSBlbmNvZGVfcHV0ZmhfbWF4c3ogKyBcCiAJCQkJCSBlbmNvZGVfc2Vla19tYXhzeikKQEAgLTIyLDYgKzQzLDMwIEBACiAJCQkJCSBkZWNvZGVfc2Vla19tYXhzeikKIAogCitzdGF0aWMgdm9pZCBlbmNvZGVfZmFsbG9jYXRlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkgICAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfYXJncyAqYXJncykKK3sKKwllbmNvZGVfbmZzNF9zdGF0ZWlkKHhkciwgJmFyZ3MtPmZhbGxvY19zdGF0ZWlkKTsKKwllbmNvZGVfdWludDY0KHhkciwgYXJncy0+ZmFsbG9jX29mZnNldCk7CisJZW5jb2RlX3VpbnQ2NCh4ZHIsIGFyZ3MtPmZhbGxvY19sZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVfYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICBzdHJ1Y3QgbmZzNDJfZmFsbG9jX2FyZ3MgKmFyZ3MsCisJCQkgICAgc3RydWN0IGNvbXBvdW5kX2hkciAqaGRyKQoreworCWVuY29kZV9vcF9oZHIoeGRyLCBPUF9BTExPQ0FURSwgZGVjb2RlX2FsbG9jYXRlX21heHN6LCBoZHIpOworCWVuY29kZV9mYWxsb2NhdGUoeGRyLCBhcmdzKTsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlX2RlYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfYXJncyAqYXJncywKKwkJCSAgICAgIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKK3sKKwllbmNvZGVfb3BfaGRyKHhkciwgT1BfREVBTExPQ0FURSwgZGVjb2RlX2RlYWxsb2NhdGVfbWF4c3osIGhkcik7CisJZW5jb2RlX2ZhbGxvY2F0ZSh4ZHIsIGFyZ3MpOworfQorCiBzdGF0aWMgdm9pZCBlbmNvZGVfc2VlayhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJc3RydWN0IG5mczQyX3NlZWtfYXJncyAqYXJncywKIAkJCXN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKQEAgLTMzLDYgKzc4LDQyIEBACiB9CiAKIC8qCisgKiBFbmNvZGUgQUxMT0NBVEUgcmVxdWVzdAorICovCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgc3RydWN0IG5mczQyX2ZhbGxvY19hcmdzICphcmdzKQoreworCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0geworCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCisJfTsKKworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmFsbG9jX2ZoLCAmaGRyKTsKKwllbmNvZGVfYWxsb2NhdGUoeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfbm9wcygmaGRyKTsKK30KKworLyoKKyAqIEVuY29kZSBERUFMTE9DQVRFIHJlcXVlc3QKKyAqLworc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX2RlYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpyZXEsCisJCQkJICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfYXJncyAqYXJncykKK3sKKwlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKKwkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+c2VxX2FyZ3MpLAorCX07CisKKwllbmNvZGVfY29tcG91bmRfaGRyKHhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfc2VxdWVuY2UoeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9wdXRmaCh4ZHIsIGFyZ3MtPmZhbGxvY19maCwgJmhkcik7CisJZW5jb2RlX2RlYWxsb2NhdGUoeGRyLCBhcmdzLCAmaGRyKTsKKwllbmNvZGVfbm9wcygmaGRyKTsKK30KKworLyoKICAqIEVuY29kZSBTRUVLIHJlcXVlc3QKICAqLwogc3RhdGljIHZvaWQgbmZzNF94ZHJfZW5jX3NlZWsoc3RydWN0IHJwY19ycXN0ICpyZXEsCkBAIC01MCw2ICsxMzEsMTYgQEAKIAllbmNvZGVfbm9wcygmaGRyKTsKIH0KIAorc3RhdGljIGludCBkZWNvZGVfYWxsb2NhdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mczQyX2ZhbGxvY19yZXMgKnJlcykKK3sKKwlyZXR1cm4gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0FMTE9DQVRFKTsKK30KKworc3RhdGljIGludCBkZWNvZGVfZGVhbGxvY2F0ZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzNDJfZmFsbG9jX3JlcyAqcmVzKQoreworCXJldHVybiBkZWNvZGVfb3BfaGRyKHhkciwgT1BfREVBTExPQ0FURSk7Cit9CisKIHN0YXRpYyBpbnQgZGVjb2RlX3NlZWsoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mczQyX3NlZWtfcmVzICpyZXMpCiB7CiAJaW50IHN0YXR1czsKQEAgLTczLDYgKzE2NCw1NCBAQAogfQogCiAvKgorICogRGVjb2RlIEFMTE9DQVRFIHJlcXVlc3QKKyAqLworc3RhdGljIGludCBuZnM0X3hkcl9kZWNfYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwKKwkJCQkgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgc3RydWN0IG5mczQyX2ZhbGxvY19yZXMgKnJlcykKK3sKKwlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gb3V0OworCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfYWxsb2NhdGUoeGRyLCByZXMpOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBEZWNvZGUgREVBTExPQ0FURSByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2RlYWxsb2NhdGUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwKKwkJCQkgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIHN0cnVjdCBuZnM0Ml9mYWxsb2NfcmVzICpyZXMpCit7CisJc3RydWN0IGNvbXBvdW5kX2hkciBoZHI7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXQ7CisJc3RhdHVzID0gZGVjb2RlX3B1dGZoKHhkcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXQ7CisJc3RhdHVzID0gZGVjb2RlX2RlYWxsb2NhdGUoeGRyLCByZXMpOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCiAgKiBEZWNvZGUgU0VFSyByZXF1ZXN0CiAgKi8KIHN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX3NlZWsoc3RydWN0IHJwY19ycXN0ICpycXN0cCwKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0X2ZzLmggYi9mcy9uZnMvbmZzNF9mcy5oCmluZGV4IGJlNmNhYzMuLmEwODE3ODcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0X2ZzLmgKKysrIGIvZnMvbmZzL25mczRfZnMuaApAQCAtMjI2LDYgKzIyNiw3IEBACiAJCQkJY29uc3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb25zICpsb2NhdGlvbnMpOwogCiAvKiBuZnM0cHJvYy5jICovCitleHRlcm4gaW50IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3QgbmZzX3NlcnZlciAqLCBpbnQsIHN0cnVjdCBuZnM0X2V4Y2VwdGlvbiAqKTsKIGV4dGVybiBpbnQgbmZzNF9jYWxsX3N5bmMoc3RydWN0IHJwY19jbG50ICosIHN0cnVjdCBuZnNfc2VydmVyICosCiAJCQkgIHN0cnVjdCBycGNfbWVzc2FnZSAqLCBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICosCiAJCQkgIHN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcyAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRjbGllbnQuYyBiL2ZzL25mcy9uZnM0Y2xpZW50LmMKaW5kZXggZmZkYjI4ZC4uMDMzMTEyNSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRjbGllbnQuYworKysgYi9mcy9uZnMvbmZzNGNsaWVudC5jCkBAIC0yNDEsMjggKzI0MSwyNSBAQAogICovCiBzdGF0aWMgaW50IG5mczRfaW5pdF9jYWxsYmFjayhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogeworCXN0cnVjdCBycGNfeHBydCAqeHBydDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoY2xwLT5ycGNfb3BzLT52ZXJzaW9uID09IDQpIHsKLQkJc3RydWN0IHJwY194cHJ0ICp4cHJ0OworCXhwcnQgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGNscC0+Y2xfcnBjY2xpZW50LT5jbF94cHJ0KTsKIAotCQl4cHJ0ID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhjbHAtPmNsX3JwY2NsaWVudC0+Y2xfeHBydCk7Ci0KLQkJaWYgKG5mczRfaGFzX3Nlc3Npb24oY2xwKSkgewotCQkJZXJyb3IgPSB4cHJ0X3NldHVwX2JhY2tjaGFubmVsKHhwcnQsCi0JCQkJCQlORlM0MV9CQ19NSU5fQ0FMTEJBQ0tTKTsKLQkJCWlmIChlcnJvciA8IDApCi0JCQkJcmV0dXJuIGVycm9yOwotCQl9Ci0KLQkJZXJyb3IgPSBuZnNfY2FsbGJhY2tfdXAoY2xwLT5jbF9tdm9wcy0+bWlub3JfdmVyc2lvbiwgeHBydCk7Ci0JCWlmIChlcnJvciA8IDApIHsKLQkJCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc3RhcnQgY2FsbGJhY2suIEVycm9yID0gJWRcbiIsCi0JCQkJX19mdW5jX18sIGVycm9yKTsKKwlpZiAobmZzNF9oYXNfc2Vzc2lvbihjbHApKSB7CisJCWVycm9yID0geHBydF9zZXR1cF9iYWNrY2hhbm5lbCh4cHJ0LCBORlM0MV9CQ19NSU5fQ0FMTEJBQ0tTKTsKKwkJaWYgKGVycm9yIDwgMCkKIAkJCXJldHVybiBlcnJvcjsKLQkJfQotCQlfX3NldF9iaXQoTkZTX0NTX0NBTExCQUNLLCAmY2xwLT5jbF9yZXNfc3RhdGUpOwogCX0KKworCWVycm9yID0gbmZzX2NhbGxiYWNrX3VwKGNscC0+Y2xfbXZvcHMtPm1pbm9yX3ZlcnNpb24sIHhwcnQpOworCWlmIChlcnJvciA8IDApIHsKKwkJZHByaW50aygiJXM6IGZhaWxlZCB0byBzdGFydCBjYWxsYmFjay4gRXJyb3IgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisJX19zZXRfYml0KE5GU19DU19DQUxMQkFDSywgJmNscC0+Y2xfcmVzX3N0YXRlKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00OTgsOCArNDk1LDcgQEAKIAkJCWF0b21pY19pbmMoJnBvcy0+Y2xfY291bnQpOwogCQkJc3Bpbl91bmxvY2soJm5uLT5uZnNfY2xpZW50X2xvY2spOwogCi0JCQlpZiAocHJldikKLQkJCQluZnNfcHV0X2NsaWVudChwcmV2KTsKKwkJCW5mc19wdXRfY2xpZW50KHByZXYpOwogCQkJcHJldiA9IHBvczsKIAogCQkJc3RhdHVzID0gbmZzX3dhaXRfY2xpZW50X2luaXRfY29tcGxldGUocG9zKTsKQEAgLTUxNyw4ICs1MTMsNyBAQAogCQlhdG9taWNfaW5jKCZwb3MtPmNsX2NvdW50KTsKIAkJc3Bpbl91bmxvY2soJm5uLT5uZnNfY2xpZW50X2xvY2spOwogCi0JCWlmIChwcmV2KQotCQkJbmZzX3B1dF9jbGllbnQocHJldik7CisJCW5mc19wdXRfY2xpZW50KHByZXYpOwogCQlwcmV2ID0gcG9zOwogCiAJCXN0YXR1cyA9IG5mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKHBvcywgJmNsaWQsIGNyZWQpOwpAQCAtNTQ5LDggKzU0NCw3IEBACiAKIAkvKiBObyBtYXRjaCBmb3VuZC4gVGhlIHNlcnZlciBsb3N0IG91ciBjbGllbnRpZCAqLwogb3V0OgotCWlmIChwcmV2KQotCQluZnNfcHV0X2NsaWVudChwcmV2KTsKKwluZnNfcHV0X2NsaWVudChwcmV2KTsKIAlkcHJpbnRrKCJORlM6IDwtLSAlcyBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTY0MSw4ICs2MzUsNyBAQAogCQkJYXRvbWljX2luYygmcG9zLT5jbF9jb3VudCk7CiAJCQlzcGluX3VubG9jaygmbm4tPm5mc19jbGllbnRfbG9jayk7CiAKLQkJCWlmIChwcmV2KQotCQkJCW5mc19wdXRfY2xpZW50KHByZXYpOworCQkJbmZzX3B1dF9jbGllbnQocHJldik7CiAJCQlwcmV2ID0gcG9zOwogCiAJCQlzdGF0dXMgPSBuZnNfd2FpdF9jbGllbnRfaW5pdF9jb21wbGV0ZShwb3MpOwpAQCAtNjc1LDggKzY2OCw3IEBACiAJLyogTm8gbWF0Y2hpbmcgbmZzX2NsaWVudCBmb3VuZC4gKi8KIAlzcGluX3VubG9jaygmbm4tPm5mc19jbGllbnRfbG9jayk7CiAJZHByaW50aygiTkZTOiA8LS0gJXMgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwotCWlmIChwcmV2KQotCQluZnNfcHV0X2NsaWVudChwcmV2KTsKKwluZnNfcHV0X2NsaWVudChwcmV2KTsKIAlyZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmCS8qIENPTkZJR19ORlNfVjRfMSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRmaWxlLmMgYi9mcy9uZnMvbmZzNGZpbGUuYwppbmRleCBjNTFmYjRkLi44YjQ2Mzg5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGZpbGUuYworKysgYi9mcy9uZnMvbmZzNGZpbGUuYwpAQCAtMyw2ICszLDggQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkyICBSaWNrIFNsYWRrZXkKICAqLworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJmc2NhY2hlLmgiCkBAIC0xMzQsNiArMTM2LDMyIEBACiAJCXJldHVybiBuZnNfZmlsZV9sbHNlZWsoZmlsZXAsIG9mZnNldCwgd2hlbmNlKTsKIAl9CiB9CisKK3N0YXRpYyBsb25nIG5mczQyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTsKKwlsb25nIHJldDsKKworCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKChtb2RlICE9IDApICYmIChtb2RlICE9IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUpKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0ID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICsgbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlpZiAobW9kZSAmIEZBTExPQ19GTF9QVU5DSF9IT0xFKQorCQlyZXQgPSBuZnM0Ml9wcm9jX2RlYWxsb2NhdGUoZmlsZXAsIG9mZnNldCwgbGVuKTsKKwllbHNlCisJCXJldCA9IG5mczQyX3Byb2NfYWxsb2NhdGUoZmlsZXAsIG9mZnNldCwgbGVuKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKworCW5mc196YXBfY2FjaGVzKGlub2RlKTsKKwlyZXR1cm4gcmV0OworfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMiAqLwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5mczRfZmlsZV9vcGVyYXRpb25zID0gewpAQCAtMTU1LDYgKzE4Myw5IEBACiAJLmZsb2NrCQk9IG5mc19mbG9jaywKIAkuc3BsaWNlX3JlYWQJPSBuZnNfZmlsZV9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCT0gaXRlcl9maWxlX3NwbGljZV93cml0ZSwKKyNpZmRlZiBDT05GSUdfTkZTX1Y0XzIKKwkuZmFsbG9jYXRlCT0gbmZzNDJfZmFsbG9jYXRlLAorI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMiAqLwogCS5jaGVja19mbGFncwk9IG5mc19jaGVja19mbGFncywKIAkuc2V0bGVhc2UJPSBzaW1wbGVfbm9zZXRsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IDY5ZGMyMGEuLmU3ZjhkNWYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC0xNTgsOCArMTU4LDYgQEAKIAkJcmV0dXJuIC1FQUNDRVM7CiAJY2FzZSAtTkZTNEVSUl9NSU5PUl9WRVJTX01JU01BVENIOgogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKLQljYXNlIC1ORlM0RVJSX0FDQ0VTUzoKLQkJcmV0dXJuIC1FQUNDRVM7CiAJY2FzZSAtTkZTNEVSUl9GSUxFX09QRU46CiAJCXJldHVybiAtRUJVU1k7CiAJZGVmYXVsdDoKQEAgLTM0NCw3ICszNDIsNyBAQAogLyogVGhpcyBpcyB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZSBmb3IgcHJvY2Vzc2VzIHRoYXQgYXJlIGFsbG93ZWQKICAqIHRvIHNsZWVwLgogICovCi1zdGF0aWMgaW50IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBpbnQgZXJyb3Jjb2RlLCBzdHJ1Y3QgbmZzNF9leGNlcHRpb24gKmV4Y2VwdGlvbikKK2ludCBuZnM0X2hhbmRsZV9leGNlcHRpb24oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgaW50IGVycm9yY29kZSwgc3RydWN0IG5mczRfZXhjZXB0aW9uICpleGNlcHRpb24pCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUgPSBleGNlcHRpb24tPnN0YXRlOwpAQCAtNzcwNCw2ICs3NzAyLDkgQEAKIAogCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwogCisJLyogbmZzNF9sYXlvdXRnZXRfcmVsZWFzZSBjYWxscyBwbmZzX3B1dF9sYXlvdXRfaGRyICovCisJcG5mc19nZXRfbGF5b3V0X2hkcihORlNfSShpbm9kZSktPmxheW91dCk7CisKIAlsZ3AtPmFyZ3MubGF5b3V0LnBhZ2VzID0gbmZzNF9hbGxvY19wYWdlcyhtYXhfcGFnZXMsIGdmcF9mbGFncyk7CiAJaWYgKCFsZ3AtPmFyZ3MubGF5b3V0LnBhZ2VzKSB7CiAJCW5mczRfbGF5b3V0Z2V0X3JlbGVhc2UobGdwKTsKQEAgLTc3MTYsOSArNzcxNyw2IEBACiAJbGdwLT5yZXMuc2VxX3Jlcy5zcl9zbG90ID0gTlVMTDsKIAluZnM0X2luaXRfc2VxdWVuY2UoJmxncC0+YXJncy5zZXFfYXJncywgJmxncC0+cmVzLnNlcV9yZXMsIDApOwogCi0JLyogbmZzNF9sYXlvdXRnZXRfcmVsZWFzZSBjYWxscyBwbmZzX3B1dF9sYXlvdXRfaGRyICovCi0JcG5mc19nZXRfbGF5b3V0X2hkcihORlNfSShpbm9kZSktPmxheW91dCk7Ci0KIAl0YXNrID0gcnBjX3J1bl90YXNrKCZ0YXNrX3NldHVwX2RhdGEpOwogCWlmIChJU19FUlIodGFzaykpCiAJCXJldHVybiBFUlJfQ0FTVCh0YXNrKTsKQEAgLTg0MjYsNiArODQyNCw4IEBACiAJCXwgTkZTX0NBUF9QT1NJWF9MT0NLCiAJCXwgTkZTX0NBUF9TVEFURUlEX05GU1Y0MQogCQl8IE5GU19DQVBfQVRPTUlDX09QRU5fVjEKKwkJfCBORlNfQ0FQX0FMTE9DQVRFCisJCXwgTkZTX0NBUF9ERUFMTE9DQVRFCiAJCXwgTkZTX0NBUF9TRUVLLAogCS5pbml0X2NsaWVudCA9IG5mczQxX2luaXRfY2xpZW50LAogCS5zaHV0ZG93bl9jbGllbnQgPSBuZnM0MV9zaHV0ZG93bl9jbGllbnQsCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCAyMDZjMDhhLi5jYjQzNzZiIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTE0MSwxMyArMTQxLDE1IEBACiAJCQkJWERSX1FVQURMRU4oTkZTNF9WRVJJRklFUl9TSVpFKSArIFwKIAkJCQlYRFJfUVVBRExFTihORlM0X1NFVENMSUVOVElEX05BTUVMRU4pICsgXAogCQkJCTEgLyogc2NfcHJvZyAqLyArIFwKLQkJCQlYRFJfUVVBRExFTihSUENCSU5EX01BWE5FVElETEVOKSArIFwKLQkJCQlYRFJfUVVBRExFTihSUENCSU5EX01BWFVBRERSTEVOKSArIFwKKwkJCQkxICsgWERSX1FVQURMRU4oUlBDQklORF9NQVhORVRJRExFTikgKyBcCisJCQkJMSArIFhEUl9RVUFETEVOKFJQQ0JJTkRfTUFYVUFERFJMRU4pICsgXAogCQkJCTEpIC8qIHNjX2NiX2lkZW50ICovCiAjZGVmaW5lIGRlY29kZV9zZXRjbGllbnRpZF9tYXhzeiBcCiAJCQkJKG9wX2RlY29kZV9oZHJfbWF4c3ogKyBcCi0JCQkJMiArIFwKLQkJCQkxMDI0KSAvKiBsYXJnZSB2YWx1ZSBmb3IgQ0xJRF9JTlVTRSAqLworCQkJCTIgLyogY2xpZW50aWQgKi8gKyBcCisJCQkJWERSX1FVQURMRU4oTkZTNF9WRVJJRklFUl9TSVpFKSArIFwKKwkJCQkxICsgWERSX1FVQURMRU4oUlBDQklORF9NQVhORVRJRExFTikgKyBcCisJCQkJMSArIFhEUl9RVUFETEVOKFJQQ0JJTkRfTUFYVUFERFJMRU4pKQogI2RlZmluZSBlbmNvZGVfc2V0Y2xpZW50aWRfY29uZmlybV9tYXhzeiBcCiAJCQkJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCiAJCQkJMyArIChORlM0X1ZFUklGSUVSX1NJWkUgPj4gMikpCkBAIC03Mzk0LDYgKzczOTYsOCBAQAogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogI2lmZGVmIENPTkZJR19ORlNfVjRfMgogCVBST0MoU0VFSywJCWVuY19zZWVrLAkJZGVjX3NlZWspLAorCVBST0MoQUxMT0NBVEUsCQllbmNfYWxsb2NhdGUsCQlkZWNfYWxsb2NhdGUpLAorCVBST0MoREVBTExPQ0FURSwJZW5jX2RlYWxsb2NhdGUsCQlkZWNfZGVhbGxvY2F0ZSksCiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8yICovCiB9OwogCmRpZmYgLS1naXQgYS9mcy9uZnMvcGFnZWxpc3QuYyBiL2ZzL25mcy9wYWdlbGlzdC5jCmluZGV4IGVkMGRiNjEuLjJiNWU3NjkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wYWdlbGlzdC5jCisrKyBiL2ZzL25mcy9wYWdlbGlzdC5jCkBAIC0yNTgsNiArMjU4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogbmZzX3BhZ2VfZ3JvdXBfaW5pdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSwgc3RydWN0IG5mc19wYWdlICpwcmV2KQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJV0FSTl9PTl9PTkNFKHByZXYgPT0gcmVxKTsKIAogCWlmICghcHJldikgewpAQCAtMjc2LDEyICsyNzcsMTYgQEAKIAkJICogbmZzX3BhZ2VfZ3JvdXBfZGVzdHJveSBpcyBjYWxsZWQgKi8KIAkJa3JlZl9nZXQoJnJlcS0+d2JfaGVhZC0+d2Jfa3JlZik7CiAKLQkJLyogZ3JhYiBleHRyYSByZWYgaWYgaGVhZCByZXF1ZXN0IGhhcyBleHRyYSByZWYgZnJvbQotCQkgKiB0aGUgd3JpdGUvY29tbWl0IHBhdGggdG8gaGFuZGxlIGhhbmRvZmYgYmV0d2VlbiB3cml0ZQotCQkgKiBhbmQgY29tbWl0IGxpc3RzICovCisJCS8qIGdyYWIgZXh0cmEgcmVmIGFuZCBidW1wIHRoZSByZXF1ZXN0IGNvdW50IGlmIGhlYWQgcmVxdWVzdAorCQkgKiBoYXMgZXh0cmEgcmVmIGZyb20gdGhlIHdyaXRlL2NvbW1pdCBwYXRoIHRvIGhhbmRsZSBoYW5kb2ZmCisJCSAqIGJldHdlZW4gd3JpdGUgYW5kIGNvbW1pdCBsaXN0cy4gKi8KIAkJaWYgKHRlc3RfYml0KFBHX0lOT0RFX1JFRiwgJnByZXYtPndiX2hlYWQtPndiX2ZsYWdzKSkgeworCQkJaW5vZGUgPSBwYWdlX2ZpbGVfbWFwcGluZyhyZXEtPndiX3BhZ2UpLT5ob3N0OwogCQkJc2V0X2JpdChQR19JTk9ERV9SRUYsICZyZXEtPndiX2ZsYWdzKTsKIAkJCWtyZWZfZ2V0KCZyZXEtPndiX2tyZWYpOworCQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJCU5GU19JKGlub2RlKS0+bnJlcXVlc3RzKys7CisJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvcmVhZC5jIGIvZnMvbmZzL3JlYWQuYwppbmRleCBiZWZmMjc2Li5jOTFhNDc5IDEwMDY0NAotLS0gYS9mcy9uZnMvcmVhZC5jCisrKyBiL2ZzL25mcy9yZWFkLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCWRwcmludGsoIk5GUzogbmZzX3JlYWRwYWdlICglcCAlbGRAJWx1KVxuIiwKIAkJcGFnZSwgUEFHRV9DQUNIRV9TSVpFLCBwYWdlX2ZpbGVfaW5kZXgocGFnZSkpOwogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19WRlNSRUFEUEFHRSk7Ci0JbmZzX2FkZF9zdGF0cyhpbm9kZSwgTkZTSU9TX1JFQURQQUdFUywgMSk7CisJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX1JFQURQQUdFUyk7CiAKIAkvKgogCSAqIFRyeSB0byBmbHVzaCBhbnkgcGVuZGluZyB3cml0ZXMgdG8gdGhlIGZpbGUuLgpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCBmODNiMDJkLi5hZjNhZjY4IDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtNTc1LDcgKzU3NSw3IEBACiAJaW50IHJldDsKIAogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19WRlNXUklURVBBR0UpOwotCW5mc19hZGRfc3RhdHMoaW5vZGUsIE5GU0lPU19XUklURVBBR0VTLCAxKTsKKwluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfV1JJVEVQQUdFUyk7CiAKIAluZnNfcGFnZWlvX2NvbmRfY29tcGxldGUocGdpbywgcGFnZV9maWxlX2luZGV4KHBhZ2UpKTsKIAlyZXQgPSBuZnNfcGFnZV9hc3luY19mbHVzaChwZ2lvLCBwYWdlLCB3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpOwpAQCAtNjcwLDcgKzY3MCw4IEBACiAJbmZzX2xvY2tfcmVxdWVzdChyZXEpOwogCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlpZiAoIW5mc2ktPm5wYWdlcyAmJiBORlNfUFJPVE8oaW5vZGUpLT5oYXZlX2RlbGVnYXRpb24oaW5vZGUsIEZNT0RFX1dSSVRFKSkKKwlpZiAoIW5mc2ktPm5yZXF1ZXN0cyAmJgorCSAgICBORlNfUFJPVE8oaW5vZGUpLT5oYXZlX2RlbGVnYXRpb24oaW5vZGUsIEZNT0RFX1dSSVRFKSkKIAkJaW5vZGUtPmlfdmVyc2lvbisrOwogCS8qCiAJICogU3dhcC1zcGFjZSBzaG91bGQgbm90IGdldCB0cnVuY2F0ZWQuIEhlbmNlIG5vIG5lZWQgdG8gcGx1ZyB0aGUgcmFjZQpAQCAtNjgxLDkgKzY4MiwxMSBAQAogCQlTZXRQYWdlUHJpdmF0ZShyZXEtPndiX3BhZ2UpOwogCQlzZXRfcGFnZV9wcml2YXRlKHJlcS0+d2JfcGFnZSwgKHVuc2lnbmVkIGxvbmcpcmVxKTsKIAl9Ci0JbmZzaS0+bnBhZ2VzKys7CisJbmZzaS0+bnJlcXVlc3RzKys7CiAJLyogdGhpcyBhIGhlYWQgcmVxdWVzdCBmb3IgYSBwYWdlIGdyb3VwIC0gbWFyayBpdCBhcyBoYXZpbmcgYW4KLQkgKiBleHRyYSByZWZlcmVuY2Ugc28gc3ViIGdyb3VwcyBjYW4gZm9sbG93IHN1aXQgKi8KKwkgKiBleHRyYSByZWZlcmVuY2Ugc28gc3ViIGdyb3VwcyBjYW4gZm9sbG93IHN1aXQuCisJICogVGhpcyBmbGFnIGFsc28gaW5mb3JtcyBwZ2lvIGxheWVyIHdoZW4gdG8gYnVtcCBucmVxdWVzdHMgd2hlbgorCSAqIGFkZGluZyBzdWJyZXF1ZXN0cy4gKi8KIAlXQVJOX09OKHRlc3RfYW5kX3NldF9iaXQoUEdfSU5PREVfUkVGLCAmcmVxLT53Yl9mbGFncykpOwogCWtyZWZfZ2V0KCZyZXEtPndiX2tyZWYpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKQEAgLTcwOSw3ICs3MTIsMTEgQEAKIAkJCXdha2VfdXBfcGFnZShoZWFkLT53Yl9wYWdlLCBQR19wcml2YXRlKTsKIAkJCWNsZWFyX2JpdChQR19NQVBQRUQsICZoZWFkLT53Yl9mbGFncyk7CiAJCX0KLQkJbmZzaS0+bnBhZ2VzLS07CisJCW5mc2ktPm5yZXF1ZXN0cy0tOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJbmZzaS0+bnJlcXVlc3RzLS07CiAJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAl9CiAKQEAgLTE3MzUsNyArMTc0Miw3IEBACiAJCS8qIERvbid0IGNvbW1pdCB5ZXQgaWYgdGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmbHVzaCBhbmQgdGhlcmUKIAkJICogYXJlIGEgbG90IG9mIG91dHN0YW5kaW5nIHdyaXRlcyBmb3IgdGhpcyBtYXBwaW5nLgogCQkgKi8KLQkJaWYgKG5mc2ktPmNvbW1pdF9pbmZvLm5jb21taXQgPD0gKG5mc2ktPm5wYWdlcyA+PiAxKSkKKwkJaWYgKG5mc2ktPmNvbW1pdF9pbmZvLm5jb21taXQgPD0gKG5mc2ktPm5yZXF1ZXN0cyA+PiAxKSkKIAkJCWdvdG8gb3V0X21hcmtfZGlydHk7CiAKIAkJLyogZG9uJ3Qgd2FpdCBmb3IgdGhlIENPTU1JVCByZXNwb25zZSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0cmVjb3Zlci5jIGIvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCmluZGV4IGEyNTQ5MGEuLmNjNmE3NjAgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHJlY292ZXIuYworKysgYi9mcy9uZnNkL25mczRyZWNvdmVyLmMKQEAgLTI0NSwxMCArMjQ1LDExIEBACiB9OwogCiBzdGF0aWMgaW50Ci1uZnNkNF9idWlsZF9uYW1lbGlzdCh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1sZW4sCituZnNkNF9idWlsZF9uYW1lbGlzdChzdHJ1Y3QgZGlyX2NvbnRleHQgKl9fY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtbGVuLAogCQlsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQogewotCXN0cnVjdCBuZnM0X2Rpcl9jdHggKmN0eCA9IGFyZzsKKwlzdHJ1Y3QgbmZzNF9kaXJfY3R4ICpjdHggPQorCQljb250YWluZXJfb2YoX19jdHgsIHN0cnVjdCBuZnM0X2Rpcl9jdHgsIGN0eCk7CiAJc3RydWN0IG5hbWVfbGlzdCAqZW50cnk7CiAKIAlpZiAobmFtbGVuICE9IEhFWERJUl9MRU4gLSAxKQpAQCAtNzA0LDcgKzcwNSw3IEBACiAJc3RydWN0IGNsZF91cGNhbGwgKnRtcCwgKmN1cDsKIAlzdHJ1Y3QgY2xkX21zZyBfX3VzZXIgKmNtc2cgPSAoc3RydWN0IGNsZF9tc2cgX191c2VyICopc3JjOwogCXVpbnQzMl90IHhpZDsKLQlzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMoZmlscC0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbywKKwlzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMoZmlsZV9pbm9kZShmaWxwKS0+aV9zYi0+c19mc19pbmZvLAogCQkJCQkJbmZzZF9uZXRfaWQpOwogCXN0cnVjdCBjbGRfbmV0ICpjbiA9IG5uLT5jbGRfbmV0OwogCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IGVlZWE3YTkuLmIxZWVkNGQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC0xODg2LDcgKzE4ODYsNyBAQAogCQkJZ290byBvdXRfZnJlZTsKIAkJfQogCQlwID0geGRyX2VuY29kZV9vcGFxdWUocCwgZGVudHJ5LT5kX25hbWUubmFtZSwgbGVuKTsKLQkJZHByaW50aygiLyVzIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCWRwcmludGsoIi8lcGQiLCBkZW50cnkpOwogCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQlkcHV0KGRlbnRyeSk7CiAJCW5jb21wb25lbnRzLS07CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMvbmZzZC9uZnNjdGwuYwppbmRleCBjYTczY2E3Li45NTA2ZWE1IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2N0bC5jCisrKyBiL2ZzL25mc2QvbmZzY3RsLmMKQEAgLTIzMSw2ICsyMzEsMTAgQEAKICAqIHBheWxvYWQgLSB3cml0ZSBtZXRob2RzCiAgKi8KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpuZXRucyhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gZmlsZV9pbm9kZShmaWxlKS0+aV9zYi0+c19mc19pbmZvOworfQogCiAvKioKICAqIHdyaXRlX3VubG9ja19pcCAtIFJlbGVhc2UgYWxsIGxvY2tzIHVzZWQgYnkgYSBjbGllbnQKQEAgLTI1Miw3ICsyNTYsNyBAQAogCXN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyZXNzOwogCXNpemVfdCBzYWxlbiA9IHNpemVvZihhZGRyZXNzKTsKIAljaGFyICpmb19wYXRoOwotCXN0cnVjdCBuZXQgKm5ldCA9IGZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX2ZzX2luZm87CisJc3RydWN0IG5ldCAqbmV0ID0gbmV0bnMoZmlsZSk7CiAKIAkvKiBzYW5pdHkgY2hlY2sgKi8KIAlpZiAoc2l6ZSA9PSAwKQpAQCAtMzUwLDcgKzM1NCw2IEBACiAJaW50IGxlbjsKIAlzdHJ1Y3QgYXV0aF9kb21haW4gKmRvbTsKIAlzdHJ1Y3Qga25mc2RfZmggZmg7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKIAogCWlmIChzaXplID09IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzg1LDcgKzM4OCw3IEBACiAJaWYgKCFkb20pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGVuID0gZXhwX3Jvb3RmaChuZXQsIGRvbSwgcGF0aCwgJmZoLCAgbWF4c2l6ZSk7CisJbGVuID0gZXhwX3Jvb3RmaChuZXRucyhmaWxlKSwgZG9tLCBwYXRoLCAmZmgsICBtYXhzaXplKTsKIAlhdXRoX2RvbWFpbl9wdXQoZG9tKTsKIAlpZiAobGVuKQogCQlyZXR1cm4gbGVuOwpAQCAtNDI5LDcgKzQzMiw3IEBACiB7CiAJY2hhciAqbWVzZyA9IGJ1ZjsKIAlpbnQgcnY7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBuZXRucyhmaWxlKTsKIAogCWlmIChzaXplID4gMCkgewogCQlpbnQgbmV3dGhyZWFkczsKQEAgLTQ4MCw3ICs0ODMsNyBAQAogCWludCBsZW47CiAJaW50IG5wb29sczsKIAlpbnQgKm50aHJlYWRzOwotCXN0cnVjdCBuZXQgKm5ldCA9IGZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX2ZzX2luZm87CisJc3RydWN0IG5ldCAqbmV0ID0gbmV0bnMoZmlsZSk7CiAKIAltdXRleF9sb2NrKCZuZnNkX211dGV4KTsKIAlucG9vbHMgPSBuZnNkX25ycG9vbHMobmV0KTsKQEAgLTU0Myw4ICs1NDYsNyBAQAogCXVuc2lnbmVkIG1pbm9yOwogCXNzaXplX3QgdGxlbiA9IDA7CiAJY2hhciAqc2VwOwotCXN0cnVjdCBuZXQgKm5ldCA9IGZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzZF9uZXRfaWQpOworCXN0cnVjdCBuZnNkX25ldCAqbm4gPSBuZXRfZ2VuZXJpYyhuZXRucyhmaWxlKSwgbmZzZF9uZXRfaWQpOwogCiAJaWYgKHNpemU+MCkgewogCQlpZiAobm4tPm5mc2Rfc2VydikKQEAgLTgzMCwxMCArODMyLDkgQEAKIHN0YXRpYyBzc2l6ZV90IHdyaXRlX3BvcnRzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCXNzaXplX3QgcnY7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKIAogCW11dGV4X2xvY2soJm5mc2RfbXV0ZXgpOwotCXJ2ID0gX193cml0ZV9wb3J0cyhmaWxlLCBidWYsIHNpemUsIG5ldCk7CisJcnYgPSBfX3dyaXRlX3BvcnRzKGZpbGUsIGJ1Ziwgc2l6ZSwgbmV0bnMoZmlsZSkpOwogCW11dGV4X3VubG9jaygmbmZzZF9tdXRleCk7CiAJcmV0dXJuIHJ2OwogfQpAQCAtODY1LDggKzg2Niw3IEBACiBzdGF0aWMgc3NpemVfdCB3cml0ZV9tYXhibGtzaXplKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCWNoYXIgKm1lc2cgPSBidWY7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKLQlzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMobmV0LCBuZnNkX25ldF9pZCk7CisJc3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldG5zKGZpbGUpLCBuZnNkX25ldF9pZCk7CiAKIAlpZiAoc2l6ZSA+IDApIHsKIAkJaW50IGJzaXplOwpAQCAtOTE1LDggKzkxNSw3IEBACiBzdGF0aWMgc3NpemVfdCB3cml0ZV9tYXhjb25uKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCWNoYXIgKm1lc2cgPSBidWY7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKLQlzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMobmV0LCBuZnNkX25ldF9pZCk7CisJc3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldG5zKGZpbGUpLCBuZnNkX25ldF9pZCk7CiAJdW5zaWduZWQgaW50IG1heGNvbm4gPSBubi0+bWF4X2Nvbm5lY3Rpb25zOwogCiAJaWYgKHNpemUgPiAwKSB7CkBAIC05OTcsOCArOTk2LDcgQEAKICAqLwogc3RhdGljIHNzaXplX3Qgd3JpdGVfbGVhc2V0aW1lKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IGZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzZF9uZXRfaWQpOworCXN0cnVjdCBuZnNkX25ldCAqbm4gPSBuZXRfZ2VuZXJpYyhuZXRucyhmaWxlKSwgbmZzZF9uZXRfaWQpOwogCXJldHVybiBuZnNkNF93cml0ZV90aW1lKGZpbGUsIGJ1Ziwgc2l6ZSwgJm5uLT5uZnNkNF9sZWFzZSwgbm4pOwogfQogCkBAIC0xMDE0LDggKzEwMTIsNyBAQAogICovCiBzdGF0aWMgc3NpemVfdCB3cml0ZV9ncmFjZXRpbWUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKLQlzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMobmV0LCBuZnNkX25ldF9pZCk7CisJc3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldG5zKGZpbGUpLCBuZnNkX25ldF9pZCk7CiAJcmV0dXJuIG5mc2Q0X3dyaXRlX3RpbWUoZmlsZSwgYnVmLCBzaXplLCAmbm4tPm5mc2Q0X2dyYWNlLCBubik7CiB9CiAKQEAgLTEwNzEsOCArMTA2OCw3IEBACiBzdGF0aWMgc3NpemVfdCB3cml0ZV9yZWNvdmVyeWRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAlzc2l6ZV90IHJ2OwotCXN0cnVjdCBuZXQgKm5ldCA9IGZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzZF9uZXRfaWQpOworCXN0cnVjdCBuZnNkX25ldCAqbm4gPSBuZXRfZ2VuZXJpYyhuZXRucyhmaWxlKSwgbmZzZF9uZXRfaWQpOwogCiAJbXV0ZXhfbG9jaygmbmZzZF9tdXRleCk7CiAJcnYgPSBfX3dyaXRlX3JlY292ZXJ5ZGlyKGZpbGUsIGJ1Ziwgc2l6ZSwgbm4pOwpAQCAtMTEwMiw4ICsxMDk4LDcgQEAKICAqLwogc3RhdGljIHNzaXplX3Qgd3JpdGVfdjRfZW5kX2dyYWNlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IGZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IG5mc2RfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldCwgbmZzZF9uZXRfaWQpOworCXN0cnVjdCBuZnNkX25ldCAqbm4gPSBuZXRfZ2VuZXJpYyhuZXRucyhmaWxlKSwgbmZzZF9uZXRfaWQpOwogCiAJaWYgKHNpemUgPiAwKSB7CiAJCXN3aXRjaChidWZbMF0pIHsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDk4OTEyOWUuLjBhODJlM2MgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtOTMwLDcgKzkzMCw2IEBACiAJCQkJdW5zaWduZWQgbG9uZyAqY250LCBpbnQgKnN0YWJsZXApCiB7CiAJc3RydWN0IHN2Y19leHBvcnQJKmV4cDsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5OwogCXN0cnVjdCBpbm9kZQkJKmlub2RlOwogCW1tX3NlZ21lbnRfdAkJb2xkZnM7CiAJX19iZTMyCQkJZXJyID0gMDsKQEAgLTk0OSw4ICs5NDgsNyBAQAogCQkgKi8KIAkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTEVTU19USFJPVFRMRTsKIAotCWRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7Ci0JaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCWV4cCAgID0gZmhwLT5maF9leHBvcnQ7CiAKIAl1c2Vfd2dhdGhlciA9IChycXN0cC0+cnFfdmVycyA9PSAyKSAmJiBFWF9XR0FUSEVSKGV4cCk7CkBAIC0xODE5LDEwICsxODE3LDEyIEBACiAJaW50CQlmdWxsOwogfTsKIAotc3RhdGljIGludCBuZnNkX2J1ZmZlcmVkX2ZpbGxkaXIodm9pZCAqX19idWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1sZW4sCi0JCQkJIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCitzdGF0aWMgaW50IG5mc2RfYnVmZmVyZWRfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgaW50IG5hbWxlbiwgbG9mZl90IG9mZnNldCwgdTY0IGlubywKKwkJCQkgdW5zaWduZWQgaW50IGRfdHlwZSkKIHsKLQlzdHJ1Y3QgcmVhZGRpcl9kYXRhICpidWYgPSBfX2J1ZjsKKwlzdHJ1Y3QgcmVhZGRpcl9kYXRhICpidWYgPQorCQljb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgcmVhZGRpcl9kYXRhLCBjdHgpOwogCXN0cnVjdCBidWZmZXJlZF9kaXJlbnQgKmRlID0gKHZvaWQgKikoYnVmLT5kaXJlbnQgKyBidWYtPnVzZWQpOwogCXVuc2lnbmVkIGludCByZWNsZW47CiAKQEAgLTE4NDIsNyArMTg0Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2JlMzIgbmZzZF9idWZmZXJlZF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBmaWxsZGlyX3QgZnVuYywKK3N0YXRpYyBfX2JlMzIgbmZzZF9idWZmZXJlZF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBuZnNkX2ZpbGxkaXJfdCBmdW5jLAogCQkJCSAgICBzdHJ1Y3QgcmVhZGRpcl9jZCAqY2RwLCBsb2ZmX3QgKm9mZnNldHApCiB7CiAJc3RydWN0IGJ1ZmZlcmVkX2RpcmVudCAqZGU7CkBAIC0xOTI2LDcgKzE5MjYsNyBAQAogICovCiBfX2JlMzIKIG5mc2RfcmVhZGRpcihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIGxvZmZfdCAqb2Zmc2V0cCwgCi0JICAgICBzdHJ1Y3QgcmVhZGRpcl9jZCAqY2RwLCBmaWxsZGlyX3QgZnVuYykKKwkgICAgIHN0cnVjdCByZWFkZGlyX2NkICpjZHAsIG5mc2RfZmlsbGRpcl90IGZ1bmMpCiB7CiAJX19iZTMyCQllcnI7CiAJc3RydWN0IGZpbGUJKmZpbGU7CmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5oIGIvZnMvbmZzZC92ZnMuaAppbmRleCBjMmZmM2YxLi5iMTc5NmQ2IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5oCisrKyBiL2ZzL25mc2QvdmZzLmgKQEAgLTM2LDcgKzM2LDcgQEAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgcmVhZGRpcgogICovCi10eXBlZGVmIGludCAoKm5mc2RfZGlyb3BfdCkoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgaW50LCBpbnQpOwordHlwZWRlZiBpbnQgKCpuZnNkX2ZpbGxkaXJfdCkodm9pZCAqLCBjb25zdCBjaGFyICosIGludCwgbG9mZl90LCB1NjQsIHVuc2lnbmVkKTsKIAogLyogbmZzZC92ZnMuYyAqLwogaW50CQluZnNkX3JhY2FjaGVfaW5pdChpbnQpOwpAQCAtOTUsNyArOTUsNyBAQAogX19iZTMyCQluZnNkX3VubGluayhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLCBpbnQgdHlwZSwKIAkJCQljaGFyICpuYW1lLCBpbnQgbGVuKTsKIF9fYmUzMgkJbmZzZF9yZWFkZGlyKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCi0JCQkgICAgIGxvZmZfdCAqLCBzdHJ1Y3QgcmVhZGRpcl9jZCAqLCBmaWxsZGlyX3QpOworCQkJICAgICBsb2ZmX3QgKiwgc3RydWN0IHJlYWRkaXJfY2QgKiwgbmZzZF9maWxsZGlyX3QpOwogX19iZTMyCQluZnNkX3N0YXRmcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAogCQkJCXN0cnVjdCBrc3RhdGZzICosIGludCBhY2Nlc3MpOwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZmlsZS5jIGIvZnMvbmlsZnMyL2ZpbGUuYwppbmRleCBlOWUzMzI1Li4zYTAzZTBhIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9maWxlLmMKQEAgLTM5LDIxICszOSwxNSBAQAogCSAqLwogCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0JaW50IGVycjsKLQotCWVyciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIGVuZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJaW50IGVyciA9IDA7CiAKIAlpZiAobmlsZnNfaW5vZGVfZGlydHkoaW5vZGUpKSB7CiAJCWlmIChkYXRhc3luYykKIAkJCWVyciA9IG5pbGZzX2NvbnN0cnVjdF9kc3luY19zZWdtZW50KGlub2RlLT5pX3NiLCBpbm9kZSwKLQkJCQkJCQkgICAgMCwgTExPTkdfTUFYKTsKKwkJCQkJCQkgICAgc3RhcnQsIGVuZCk7CiAJCWVsc2UKIAkJCWVyciA9IG5pbGZzX2NvbnN0cnVjdF9zZWdtZW50KGlub2RlLT5pX3NiKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAluaWxmcyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJaWYgKCFlcnIpCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW5vZGUuYyBiL2ZzL25pbGZzMi9pbm9kZS5jCmluZGV4IGUxZmE2OWIuLjhiNTk2OTUgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pbm9kZS5jCisrKyBiL2ZzL25pbGZzMi9pbm9kZS5jCkBAIC00OSw2ICs0OSw4IEBACiAJaW50IGZvcl9nYzsKIH07CiAKK3N0YXRpYyBpbnQgbmlsZnNfaWdldF90ZXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKm9wYXF1ZSk7CisKIHZvaWQgbmlsZnNfaW5vZGVfYWRkX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbikKIHsKIAlzdHJ1Y3QgbmlsZnNfcm9vdCAqcm9vdCA9IE5JTEZTX0koaW5vZGUpLT5pX3Jvb3Q7CkBAIC0zNDgsNiArMzUwLDE3IEBACiAJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSAgPSBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiB9OwogCitzdGF0aWMgaW50IG5pbGZzX2luc2VydF9pbm9kZV9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBuaWxmc19yb290ICpyb290LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBpbm8pCit7CisJc3RydWN0IG5pbGZzX2lnZXRfYXJncyBhcmdzID0geworCQkuaW5vID0gaW5vLCAucm9vdCA9IHJvb3QsIC5jbm8gPSAwLCAuZm9yX2djID0gMAorCX07CisKKwlyZXR1cm4gaW5zZXJ0X2lub2RlX2xvY2tlZDQoaW5vZGUsIGlubywgbmlsZnNfaWdldF90ZXN0LCAmYXJncyk7Cit9CisKIHN0cnVjdCBpbm9kZSAqbmlsZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKQEAgLTM4Myw3ICszOTYsNyBAQAogCWlmIChTX0lTUkVHKG1vZGUpIHx8IFNfSVNESVIobW9kZSkgfHwgU19JU0xOSyhtb2RlKSkgewogCQllcnIgPSBuaWxmc19ibWFwX3JlYWQoaWktPmlfYm1hcCwgTlVMTCk7CiAJCWlmIChlcnIgPCAwKQotCQkJZ290byBmYWlsZWRfYm1hcDsKKwkJCWdvdG8gZmFpbGVkX2FmdGVyX2NyZWF0aW9uOwogCiAJCXNldF9iaXQoTklMRlNfSV9CTUFQLCAmaWktPmlfc3RhdGUpOwogCQkvKiBObyBsb2NrIGlzIG5lZWRlZDsgaWdldCgpIGVuc3VyZXMgaXQuICovCkBAIC0zOTksMjEgKzQxMiwyNCBAQAogCXNwaW5fbG9jaygmbmlsZnMtPm5zX25leHRfZ2VuX2xvY2spOwogCWlub2RlLT5pX2dlbmVyYXRpb24gPSBuaWxmcy0+bnNfbmV4dF9nZW5lcmF0aW9uKys7CiAJc3Bpbl91bmxvY2soJm5pbGZzLT5uc19uZXh0X2dlbl9sb2NrKTsKLQlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CisJaWYgKG5pbGZzX2luc2VydF9pbm9kZV9sb2NrZWQoaW5vZGUsIHJvb3QsIGlubykgPCAwKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbGVkX2FmdGVyX2NyZWF0aW9uOworCX0KIAogCWVyciA9IG5pbGZzX2luaXRfYWNsKGlub2RlLCBkaXIpOwogCWlmICh1bmxpa2VseShlcnIpKQotCQlnb3RvIGZhaWxlZF9hY2w7IC8qIG5ldmVyIG9jY3VyLiBXaGVuIHN1cHBvcnRpbmcKKwkJZ290byBmYWlsZWRfYWZ0ZXJfY3JlYXRpb247IC8qIG5ldmVyIG9jY3VyLiBXaGVuIHN1cHBvcnRpbmcKIAkJCQkgICAgbmlsZnNfaW5pdF9hY2woKSwgcHJvcGVyIGNhbmNlbGxhdGlvbiBvZgogCQkJCSAgICBhYm92ZSBqb2JzIHNob3VsZCBiZSBjb25zaWRlcmVkICovCiAKIAlyZXR1cm4gaW5vZGU7CiAKLSBmYWlsZWRfYWNsOgotIGZhaWxlZF9ibWFwOgorIGZhaWxlZF9hZnRlcl9jcmVhdGlvbjoKIAljbGVhcl9ubGluayhpbm9kZSk7CisJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CiAJaXB1dChpbm9kZSk7ICAvKiByYXdfaW5vZGUgd2lsbCBiZSBkZWxldGVkIHRocm91Z2gKLQkJCSBnZW5lcmljX2RlbGV0ZV9pbm9kZSgpICovCisJCQkgbmlsZnNfZXZpY3RfaW5vZGUoKSAqLwogCWdvdG8gZmFpbGVkOwogCiAgZmFpbGVkX2lmaWxlX2NyZWF0ZV9pbm9kZToKQEAgLTQ2MSw4ICs0NzcsOCBAQAogCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfbXRpbWVfbnNlYyk7CiAJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9jdGltZV9uc2VjKTsKIAlpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX210aW1lX25zZWMpOwotCWlmIChpbm9kZS0+aV9ubGluayA9PSAwICYmIGlub2RlLT5pX21vZGUgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7IC8qIHRoaXMgaW5vZGUgaXMgZGVsZXRlZCAqLworCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKQorCQlyZXR1cm4gLUVTVEFMRTsgLyogdGhpcyBpbm9kZSBpcyBkZWxldGVkICovCiAKIAlpbm9kZS0+aV9ibG9ja3MgPSBsZTY0X3RvX2NwdShyYXdfaW5vZGUtPmlfYmxvY2tzKTsKIAlpaS0+aV9mbGFncyA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9mbGFncyk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmFtZWkuYyBiL2ZzL25pbGZzMi9uYW1laS5jCmluZGV4IDlkZTc4ZjAuLjBmODRiMjUgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uYW1laS5jCisrKyBiL2ZzL25pbGZzMi9uYW1laS5jCkBAIC01MSw5ICs1MSwxMSBAQAogCWludCBlcnIgPSBuaWxmc19hZGRfbGluayhkZW50cnksIGlub2RlKTsKIAlpZiAoIWVycikgewogCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKIAlpcHV0KGlub2RlKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTgyLDYgKzE4NCw3IEBACiBvdXRfZmFpbDoKIAlkcm9wX25saW5rKGlub2RlKTsKIAluaWxmc19tYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKIAlpcHV0KGlub2RlKTsKIAlnb3RvIG91dDsKIH0KQEAgLTIwMSwxMSArMjA0LDE1IEBACiAJaW5vZGVfaW5jX2xpbmtfY291bnQoaW5vZGUpOwogCWlob2xkKGlub2RlKTsKIAotCWVyciA9IG5pbGZzX2FkZF9ub25kaXIoZGVudHJ5LCBpbm9kZSk7Ci0JaWYgKCFlcnIpCisJZXJyID0gbmlsZnNfYWRkX2xpbmsoZGVudHJ5LCBpbm9kZSk7CisJaWYgKCFlcnIpIHsKKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAkJZXJyID0gbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KGRpci0+aV9zYik7Ci0JZWxzZQorCX0gZWxzZSB7CisJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwkJaXB1dChpbm9kZSk7CiAJCW5pbGZzX3RyYW5zYWN0aW9uX2Fib3J0KGRpci0+aV9zYik7CisJfQogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTI0Myw2ICsyNTAsNyBAQAogCiAJbmlsZnNfbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKIG91dDoKIAlpZiAoIWVycikKIAkJZXJyID0gbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KGRpci0+aV9zYik7CkBAIC0yNTUsNiArMjYzLDcgQEAKIAlkcm9wX25saW5rKGlub2RlKTsKIAlkcm9wX25saW5rKGlub2RlKTsKIAluaWxmc19tYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKIAlpcHV0KGlub2RlKTsKIG91dF9kaXI6CiAJZHJvcF9ubGluayhkaXIpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5jIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5jCmluZGV4IDlkYTI1ZmUuLjY5YmQ4MDEgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi90aGVfbmlsZnMuYworKysgYi9mcy9uaWxmczIvdGhlX25pbGZzLmMKQEAgLTgwOCw4ICs4MDgsNyBAQAogCQlzcGluX2xvY2soJm5pbGZzLT5uc19jcHRyZWVfbG9jayk7CiAJCXJiX2VyYXNlKCZyb290LT5yYl9ub2RlLCAmbmlsZnMtPm5zX2NwdHJlZSk7CiAJCXNwaW5fdW5sb2NrKCZuaWxmcy0+bnNfY3B0cmVlX2xvY2spOwotCQlpZiAocm9vdC0+aWZpbGUpCi0JCQlpcHV0KHJvb3QtPmlmaWxlKTsKKwkJaXB1dChyb290LT5pZmlsZSk7CiAKIAkJa2ZyZWUocm9vdCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2ZkaW5mby5jIGIvZnMvbm90aWZ5L2ZkaW5mby5jCmluZGV4IDlkN2UyYjkuLjZmZmQyMjAgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9mZGluZm8uYworKysgYi9mcy9ub3RpZnkvZmRpbmZvLmMKQEAgLTIwLDI1ICsyMCwyNCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfSU5PVElGWV9VU0VSKSB8fCBkZWZpbmVkKENPTkZJR19GQU5PVElGWSkKIAotc3RhdGljIGludCBzaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmLAotCQkgICAgICAgaW50ICgqc2hvdykoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaykpCitzdGF0aWMgdm9pZCBzaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmLAorCQkJdm9pZCAoKnNob3cpKHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCQkgICAgIHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKSkKIHsKIAlzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwID0gZi0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrOwotCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmZ3JvdXAtPm1hcmtfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobWFyaywgJmdyb3VwLT5tYXJrc19saXN0LCBnX2xpc3QpIHsKLQkJcmV0ID0gc2hvdyhtLCBtYXJrKTsKLQkJaWYgKHJldCkKKwkJc2hvdyhtLCBtYXJrKTsKKwkJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChtKSkKIAkJCWJyZWFrOwogCX0KIAltdXRleF91bmxvY2soJmdyb3VwLT5tYXJrX211dGV4KTsKLQlyZXR1cm4gcmV0OwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfRVhQT1JURlMpCi1zdGF0aWMgaW50IHNob3dfbWFya19maGFuZGxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyB2b2lkIHNob3dfbWFya19maGFuZGxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgZmlsZV9oYW5kbGUgaGFuZGxlOwpAQCAtNTIsNzEgKzUxLDYyIEBACiAJcmV0ID0gZXhwb3J0ZnNfZW5jb2RlX2lub2RlX2ZoKGlub2RlLCAoc3RydWN0IGZpZCAqKWYuaGFuZGxlLmZfaGFuZGxlLCAmc2l6ZSwgMCk7CiAJaWYgKChyZXQgPT0gRklMRUlEX0lOVkFMSUQpIHx8IChyZXQgPCAwKSkgewogCQlXQVJOX09OQ0UoMSwgIkNhbid0IGVuY29kZSBmaWxlIGhhbmRsZXIgZm9yIGlub3RpZnk6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAogCWYuaGFuZGxlLmhhbmRsZV90eXBlID0gcmV0OwogCWYuaGFuZGxlLmhhbmRsZV9ieXRlcyA9IHNpemUgKiBzaXplb2YodTMyKTsKIAotCXJldCA9IHNlcV9wcmludGYobSwgImZoYW5kbGUtYnl0ZXM6JXggZmhhbmRsZS10eXBlOiV4IGZfaGFuZGxlOiIsCi0JCQkgZi5oYW5kbGUuaGFuZGxlX2J5dGVzLCBmLmhhbmRsZS5oYW5kbGVfdHlwZSk7CisJc2VxX3ByaW50ZihtLCAiZmhhbmRsZS1ieXRlczoleCBmaGFuZGxlLXR5cGU6JXggZl9oYW5kbGU6IiwKKwkJICAgZi5oYW5kbGUuaGFuZGxlX2J5dGVzLCBmLmhhbmRsZS5oYW5kbGVfdHlwZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZi5oYW5kbGUuaGFuZGxlX2J5dGVzOyBpKyspCi0JCXJldCB8PSBzZXFfcHJpbnRmKG0sICIlMDJ4IiwgKGludClmLmhhbmRsZS5mX2hhbmRsZVtpXSk7Ci0KLQlyZXR1cm4gcmV0OworCQlzZXFfcHJpbnRmKG0sICIlMDJ4IiwgKGludClmLmhhbmRsZS5mX2hhbmRsZVtpXSk7CiB9CiAjZWxzZQotc3RhdGljIGludCBzaG93X21hcmtfZmhhbmRsZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBzaG93X21hcmtfZmhhbmRsZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19JTk9USUZZX1VTRVIKIAotc3RhdGljIGludCBpbm90aWZ5X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKQorc3RhdGljIHZvaWQgaW5vdGlmeV9mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaykKIHsKIAlzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrICppbm9kZV9tYXJrOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW50IHJldCA9IDA7CiAKIAlpZiAoIShtYXJrLT5mbGFncyAmIChGU05PVElGWV9NQVJLX0ZMQUdfQUxJVkUgfCBGU05PVElGWV9NQVJLX0ZMQUdfSU5PREUpKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCWlub2RlX21hcmsgPSBjb250YWluZXJfb2YobWFyaywgc3RydWN0IGlub3RpZnlfaW5vZGVfbWFyaywgZnNuX21hcmspOwogCWlub2RlID0gaWdyYWIobWFyay0+aS5pbm9kZSk7CiAJaWYgKGlub2RlKSB7Ci0JCXJldCA9IHNlcV9wcmludGYobSwgImlub3RpZnkgd2Q6JXggaW5vOiVseCBzZGV2OiV4ICIKLQkJCQkgIm1hc2s6JXggaWdub3JlZF9tYXNrOiV4ICIsCi0JCQkJIGlub2RlX21hcmstPndkLCBpbm9kZS0+aV9pbm8sCi0JCQkJIGlub2RlLT5pX3NiLT5zX2RldiwKLQkJCQkgbWFyay0+bWFzaywgbWFyay0+aWdub3JlZF9tYXNrKTsKLQkJcmV0IHw9IHNob3dfbWFya19maGFuZGxlKG0sIGlub2RlKTsKLQkJcmV0IHw9IHNlcV9wdXRjKG0sICdcbicpOworCQlzZXFfcHJpbnRmKG0sICJpbm90aWZ5IHdkOiV4IGlubzolbHggc2RldjoleCBtYXNrOiV4IGlnbm9yZWRfbWFzazoleCAiLAorCQkJICAgaW5vZGVfbWFyay0+d2QsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfc2ItPnNfZGV2LAorCQkJICAgbWFyay0+bWFzaywgbWFyay0+aWdub3JlZF9tYXNrKTsKKwkJc2hvd19tYXJrX2ZoYW5kbGUobSwgaW5vZGUpOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAkJaXB1dChpbm9kZSk7CiAJfQotCi0JcmV0dXJuIHJldDsKIH0KIAotaW50IGlub3RpZnlfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZikKK3ZvaWQgaW5vdGlmeV9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKQogewotCXJldHVybiBzaG93X2ZkaW5mbyhtLCBmLCBpbm90aWZ5X2ZkaW5mbyk7CisJc2hvd19mZGluZm8obSwgZiwgaW5vdGlmeV9mZGluZm8pOwogfQogCiAjZW5kaWYgLyogQ09ORklHX0lOT1RJRllfVVNFUiAqLwogCiAjaWZkZWYgQ09ORklHX0ZBTk9USUZZCiAKLXN0YXRpYyBpbnQgZmFub3RpZnlfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZzbm90aWZ5X21hcmsgKm1hcmspCitzdGF0aWMgdm9pZCBmYW5vdGlmeV9mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaykKIHsKIAl1bnNpZ25lZCBpbnQgbWZsYWdzID0gMDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWludCByZXQgPSAwOwogCiAJaWYgKCEobWFyay0+ZmxhZ3MgJiBGU05PVElGWV9NQVJLX0ZMQUdfQUxJVkUpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJaWYgKG1hcmstPmZsYWdzICYgRlNOT1RJRllfTUFSS19GTEFHX0lHTk9SRURfU1VSVl9NT0RJRlkpCiAJCW1mbGFncyB8PSBGQU5fTUFSS19JR05PUkVEX1NVUlZfTU9ESUZZOwpAQCAtMTI0LDI2ICsxMTQsMjIgQEAKIAlpZiAobWFyay0+ZmxhZ3MgJiBGU05PVElGWV9NQVJLX0ZMQUdfSU5PREUpIHsKIAkJaW5vZGUgPSBpZ3JhYihtYXJrLT5pLmlub2RlKTsKIAkJaWYgKCFpbm9kZSkKLQkJCWdvdG8gb3V0OwotCQlyZXQgPSBzZXFfcHJpbnRmKG0sICJmYW5vdGlmeSBpbm86JWx4IHNkZXY6JXggIgotCQkJCSAibWZsYWdzOiV4IG1hc2s6JXggaWdub3JlZF9tYXNrOiV4ICIsCi0JCQkJIGlub2RlLT5pX2lubywgaW5vZGUtPmlfc2ItPnNfZGV2LAotCQkJCSBtZmxhZ3MsIG1hcmstPm1hc2ssIG1hcmstPmlnbm9yZWRfbWFzayk7Ci0JCXJldCB8PSBzaG93X21hcmtfZmhhbmRsZShtLCBpbm9kZSk7Ci0JCXJldCB8PSBzZXFfcHV0YyhtLCAnXG4nKTsKKwkJCXJldHVybjsKKwkJc2VxX3ByaW50ZihtLCAiZmFub3RpZnkgaW5vOiVseCBzZGV2OiV4IG1mbGFnczoleCBtYXNrOiV4IGlnbm9yZWRfbWFzazoleCAiLAorCQkJICAgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9zYi0+c19kZXYsCisJCQkgICBtZmxhZ3MsIG1hcmstPm1hc2ssIG1hcmstPmlnbm9yZWRfbWFzayk7CisJCXNob3dfbWFya19maGFuZGxlKG0sIGlub2RlKTsKKwkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJCWlwdXQoaW5vZGUpOwogCX0gZWxzZSBpZiAobWFyay0+ZmxhZ3MgJiBGU05PVElGWV9NQVJLX0ZMQUdfVkZTTU9VTlQpIHsKIAkJc3RydWN0IG1vdW50ICptbnQgPSByZWFsX21vdW50KG1hcmstPm0ubW50KTsKIAotCQlyZXQgPSBzZXFfcHJpbnRmKG0sICJmYW5vdGlmeSBtbnRfaWQ6JXggbWZsYWdzOiV4IG1hc2s6JXggIgotCQkJCSAiaWdub3JlZF9tYXNrOiV4XG4iLCBtbnQtPm1udF9pZCwgbWZsYWdzLAotCQkJCSBtYXJrLT5tYXNrLCBtYXJrLT5pZ25vcmVkX21hc2spOworCQlzZXFfcHJpbnRmKG0sICJmYW5vdGlmeSBtbnRfaWQ6JXggbWZsYWdzOiV4IG1hc2s6JXggaWdub3JlZF9tYXNrOiV4XG4iLAorCQkJICAgbW50LT5tbnRfaWQsIG1mbGFncywgbWFyay0+bWFzaywgbWFyay0+aWdub3JlZF9tYXNrKTsKIAl9Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKIH0KIAotaW50IGZhbm90aWZ5X3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpCit2b2lkIGZhbm90aWZ5X3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpCiB7CiAJc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCA9IGYtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwpAQCAtMTY5LDcgKzE1NSw3IEBACiAJc2VxX3ByaW50ZihtLCAiZmFub3RpZnkgZmxhZ3M6JXggZXZlbnQtZmxhZ3M6JXhcbiIsCiAJCSAgIGZsYWdzLCBncm91cC0+ZmFub3RpZnlfZGF0YS5mX2ZsYWdzKTsKIAotCXJldHVybiBzaG93X2ZkaW5mbyhtLCBmLCBmYW5vdGlmeV9mZGluZm8pOworCXNob3dfZmRpbmZvKG0sIGYsIGZhbm90aWZ5X2ZkaW5mbyk7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfRkFOT1RJRlkgKi8KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mZGluZm8uaCBiL2ZzL25vdGlmeS9mZGluZm8uaAppbmRleCA1NTZhZmRhLi45NjY0YzQ5IDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZmRpbmZvLmgKKysrIGIvZnMvbm90aWZ5L2ZkaW5mby5oCkBAIC0xMCwxMSArMTAsMTEgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCiAjaWZkZWYgQ09ORklHX0lOT1RJRllfVVNFUgotZXh0ZXJuIGludCBpbm90aWZ5X3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpOwordm9pZCBpbm90aWZ5X3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkFOT1RJRlkKLWV4dGVybiBpbnQgZmFub3RpZnlfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZik7Cit2b2lkIGZhbm90aWZ5X3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpOwogI2VuZGlmCiAKICNlbHNlIC8qIENPTkZJR19QUk9DX0ZTICovCmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZnNub3RpZnkuYyBiL2ZzL25vdGlmeS9mc25vdGlmeS5jCmluZGV4IDg5MzI2YWMuLjQxZTM5MTAyIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZnNub3RpZnkuYworKysgYi9mcy9ub3RpZnkvZnNub3RpZnkuYwpAQCAtNjMsMTQgKzYzLDE0IEBACiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkvKiBydW4gYWxsIG9mIHRoZSBkZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbm9kZS4gIFNpbmNlIHRoaXMgaXMgYQogCSAqIGRpcmVjdG9yeSwgdGhlcmUgZGFtbiB3ZWxsIGJldHRlciBvbmx5IGJlIG9uZSBpdGVtIG9uIHRoaXMgbGlzdCAqLwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsaWFzLCAmaW5vZGUtPmlfZGVudHJ5LCBkX2FsaWFzKSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoYWxpYXMsICZpbm9kZS0+aV9kZW50cnksIGRfdS5kX2FsaWFzKSB7CiAJCXN0cnVjdCBkZW50cnkgKmNoaWxkOwogCiAJCS8qIHJ1biBhbGwgb2YgdGhlIGNoaWxkcmVuIG9mIHRoZSBvcmlnaW5hbCBpbm9kZSBhbmQgZml4IHRoZWlyCiAJCSAqIGRfZmxhZ3MgdG8gaW5kaWNhdGUgcGFyZW50YWwgaW50ZXJlc3QgKHRoZWlyIHBhcmVudCBpcyB0aGUKIAkJICogb3JpZ2luYWwgaW5vZGUpICovCiAJCXNwaW5fbG9jaygmYWxpYXMtPmRfbG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZhbGlhcy0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmYWxpYXMtPmRfc3ViZGlycywgZF9jaGlsZCkgewogCQkJaWYgKCFjaGlsZC0+ZF9pbm9kZSkKIAkJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYwppbmRleCBkYWY3NjY1Li4yODNhYTMxIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYworKysgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYwpAQCAtMjI3LDE0ICsyMjcsMTMgQEAKIAlzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmtldmVudDsKIAljaGFyIF9fdXNlciAqc3RhcnQ7CiAJaW50IHJldDsKLQlERUZJTkVfV0FJVCh3YWl0KTsKKwlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCiAJc3RhcnQgPSBidWY7CiAJZ3JvdXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKKwlhZGRfd2FpdF9xdWV1ZSgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgJndhaXQpOwogCXdoaWxlICgxKSB7Ci0JCXByZXBhcmVfdG9fd2FpdCgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KIAkJbXV0ZXhfbG9jaygmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CiAJCWtldmVudCA9IGdldF9vbmVfZXZlbnQoZ3JvdXAsIGNvdW50KTsKIAkJbXV0ZXhfdW5sb2NrKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KTsKQEAgLTI2NCwxMCArMjYzLDEwIEBACiAJCWlmIChzdGFydCAhPSBidWYpCiAJCQlicmVhazsKIAotCQlzY2hlZHVsZSgpOworCQl3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAl9CisJcmVtb3ZlX3dhaXRfcXVldWUoJmdyb3VwLT5ub3RpZmljYXRpb25fd2FpdHEsICZ3YWl0KTsKIAotCWZpbmlzaF93YWl0KCZncm91cC0+bm90aWZpY2F0aW9uX3dhaXRxLCAmd2FpdCk7CiAJaWYgKHN0YXJ0ICE9IGJ1ZiAmJiByZXQgIT0gLUVGQVVMVCkKIAkJcmV0ID0gYnVmIC0gc3RhcnQ7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbmFtZWkuYyBiL2ZzL250ZnMvbmFtZWkuYwppbmRleCA0MzZmMzYwLi5iMzk3M2MyIDEwMDY0NAotLS0gYS9mcy9udGZzL25hbWVpLmMKKysrIGIvZnMvbnRmcy9uYW1laS5jCkBAIC0xMTEsOCArMTExLDggQEAKIAl1bnNpZ25lZCBsb25nIGRlbnRfaW5vOwogCWludCB1bmFtZV9sZW47CiAKLQludGZzX2RlYnVnKCJMb29raW5nIHVwICVzIGluIGRpcmVjdG9yeSBpbm9kZSAweCVseC4iLAotCQkJZGVudC0+ZF9uYW1lLm5hbWUsIGRpcl9pbm8tPmlfaW5vKTsKKwludGZzX2RlYnVnKCJMb29raW5nIHVwICVwZCBpbiBkaXJlY3RvcnkgaW5vZGUgMHglbHguIiwKKwkJCWRlbnQsIGRpcl9pbm8tPmlfaW5vKTsKIAkvKiBDb252ZXJ0IHRoZSBuYW1lIG9mIHRoZSBkZW50cnkgdG8gVW5pY29kZS4gKi8KIAl1bmFtZV9sZW4gPSBudGZzX25sc3RvdWNzKHZvbCwgZGVudC0+ZF9uYW1lLm5hbWUsIGRlbnQtPmRfbmFtZS5sZW4sCiAJCQkmdW5hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYW9wcy5jIGIvZnMvb2NmczIvYW9wcy5jCmluZGV4IDFlZjU0N2UuLmQ5ZjIyMjkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FvcHMuYworKysgYi9mcy9vY2ZzMi9hb3BzLmMKQEAgLTEyNTEsNyArMTI1MSw3IEBACiAJcmV0ID0gb2NmczJfZXh0ZW50X21hcF9nZXRfYmxvY2tzKGlub2RlLCB2X2Jsa25vLCAmcF9ibGtubywgTlVMTCwKIAkJCQkJICBOVUxMKTsKIAlpZiAocmV0IDwgMCkgewotCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIkNvcnJ1cHRpbmcgZXh0ZW5kIGZvciBpbm9kZSAlbGx1LCAiCisJCW1sb2coTUxfRVJST1IsICJHZXQgcGh5c2ljYWwgYmxrbm8gZmFpbGVkIGZvciBpbm9kZSAlbGx1LCAiCiAJCQkgICAgImF0IGxvZ2ljYWwgYmxvY2sgJWxsdSIsCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2X2Jsa25vKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCmluZGV4IGViOWQ0ODcuLjE2ZWZmNDUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwpAQCAtMTEyNywxMCArMTEyNywxMCBAQAogCQllbGFwc2VkX21zZWMgPSBvMmhiX2VsYXBzZWRfbXNlY3MoJmJlZm9yZV9oYiwgJmFmdGVyX2hiKTsKIAogCQltbG9nKE1MX0hFQVJUQkVBVCwKLQkJICAgICAic3RhcnQgPSAlbHUuJWx1LCBlbmQgPSAlbHUuJWx1LCBtc2VjID0gJXVcbiIsCisJCSAgICAgInN0YXJ0ID0gJWx1LiVsdSwgZW5kID0gJWx1LiVsdSwgbXNlYyA9ICV1LCByZXQgPSAlZFxuIiwKIAkJICAgICBiZWZvcmVfaGIudHZfc2VjLCAodW5zaWduZWQgbG9uZykgYmVmb3JlX2hiLnR2X3VzZWMsCiAJCSAgICAgYWZ0ZXJfaGIudHZfc2VjLCAodW5zaWduZWQgbG9uZykgYWZ0ZXJfaGIudHZfdXNlYywKLQkJICAgICBlbGFwc2VkX21zZWMpOworCQkgICAgIGVsYXBzZWRfbXNlYywgcmV0KTsKIAogCQlpZiAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJgogCQkgICAgZWxhcHNlZF9tc2VjIDwgcmVnLT5ocl90aW1lb3V0X21zKSB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuYwppbmRleCBhOTYwNDQwLi4yZTM1NWUwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKQEAgLTE3MzYsNyArMTczNiw3IEBACiAJCSAgICAgbzJuZXRfaWRsZV90aW1lb3V0KCkgLyAxMDAwLAogCQkgICAgIG8ybmV0X2lkbGVfdGltZW91dCgpICUgMTAwMCk7CiAKLQkJbzJuZXRfc2V0X25uX3N0YXRlKG5uLCBOVUxMLCAwLCAtRU5PVENPTk4pOworCQlvMm5ldF9zZXRfbm5fc3RhdGUobm4sIE5VTEwsIDAsIDApOwogCX0KIAlzcGluX3VubG9jaygmbm4tPm5uX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGNhY2hlLmMgYi9mcy9vY2ZzMi9kY2FjaGUuYwppbmRleCBlMmUwNWExLi40ZmRhN2E1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kY2FjaGUuYworKysgYi9mcy9vY2ZzMi9kY2FjaGUuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShkZW50cnksICZpbm9kZS0+aV9kZW50cnksIGRfYWxpYXMpIHsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShkZW50cnksICZpbm9kZS0+aV9kZW50cnksIGRfdS5kX2FsaWFzKSB7CiAJCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQlpZiAob2NmczJfbWF0Y2hfZGVudHJ5KGRlbnRyeSwgcGFyZW50X2Jsa25vLCBza2lwX3VuaGFzaGVkKSkgewogCQkJdHJhY2Vfb2NmczJfZmluZF9sb2NhbF9hbGlhcyhkZW50cnktPmRfbmFtZS5sZW4sCkBAIC0yNTEsOCArMjUxLDggQEAKIAogCWlmIChkbCkgewogCQltbG9nX2J1Z19vbl9tc2coZGwtPmRsX3BhcmVudF9ibGtubyAhPSBwYXJlbnRfYmxrbm8sCi0JCQkJIiBcIiUuKnNcIjogb2xkIHBhcmVudDogJWxsdSwgbmV3OiAlbGx1XG4iLAotCQkJCWRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkiIFwiJXBkXCI6IG9sZCBwYXJlbnQ6ICVsbHUsIG5ldzogJWxsdVxuIiwKKwkJCQlkZW50cnksCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwYXJlbnRfYmxrbm8sCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylkbC0+ZGxfcGFyZW50X2Jsa25vKTsKIAkJcmV0dXJuIDA7CkBAIC0yNzcsOCArMjc3LDggQEAKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CiAKIAkJbWxvZ19idWdfb25fbXNnKGRsLT5kbF9wYXJlbnRfYmxrbm8gIT0gcGFyZW50X2Jsa25vLAotCQkJCSIgXCIlLipzXCI6IG9sZCBwYXJlbnQ6ICVsbHUsIG5ldzogJWxsdVxuIiwKLQkJCQlkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJIiBcIiVwZFwiOiBvbGQgcGFyZW50OiAlbGx1LCBuZXc6ICVsbHVcbiIsCisJCQkJZGVudHJ5LAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGFyZW50X2Jsa25vLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGwtPmRsX3BhcmVudF9ibGtubyk7CiAKQEAgLTQwNiwxNyArNDA2LDE1IEBACiAJCQlpZiAoaW5vZGUpCiAJCQkJaW5vID0gKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm87CiAJCQltbG9nKE1MX0VSUk9SLCAiRGVudHJ5IGlzIG1pc3NpbmcgY2x1c3RlciBsb2NrLiAiCi0JCQkgICAgICJpbm9kZTogJWxsdSwgZF9mbGFnczogMHgleCwgZF9uYW1lOiAlLipzXG4iLAotCQkJICAgICBpbm8sIGRlbnRyeS0+ZF9mbGFncywgZGVudHJ5LT5kX25hbWUubGVuLAotCQkJICAgICBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwkJCSAgICAgImlub2RlOiAlbGx1LCBkX2ZsYWdzOiAweCV4LCBkX25hbWU6ICVwZFxuIiwKKwkJCSAgICAgaW5vLCBkZW50cnktPmRfZmxhZ3MsIGRlbnRyeSk7CiAJCX0KIAogCQlnb3RvIG91dDsKIAl9CiAKLQltbG9nX2J1Z19vbl9tc2coZGwtPmRsX2NvdW50ID09IDAsICJkZW50cnk6ICUuKnMsIGNvdW50OiAldVxuIiwKLQkJCWRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCWRsLT5kbF9jb3VudCk7CisJbWxvZ19idWdfb25fbXNnKGRsLT5kbF9jb3VudCA9PSAwLCAiZGVudHJ5OiAlcGQsIGNvdW50OiAldVxuIiwKKwkJCWRlbnRyeSwgZGwtPmRsX2NvdW50KTsKIAogCW9jZnMyX2RlbnRyeV9sb2NrX3B1dChPQ0ZTMl9TQihkZW50cnktPmRfc2IpLCBkbCk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2Rpci5jIGIvZnMvb2NmczIvZGlyLmMKaW5kZXggMDcxNzY2Mi4uNzlkNTZkYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGlyLmMKKysrIGIvZnMvb2NmczIvZGlyLmMKQEAgLTc0NCw3ICs3NDQsNyBAQAogCQlpZiAob2NmczJfcmVhZF9kaXJfYmxvY2soZGlyLCBibG9jaywgJmJoLCAwKSkgewogCQkJLyogcmVhZCBlcnJvciwgc2tpcCBibG9jayAmIGhvcGUgZm9yIHRoZSBiZXN0LgogCQkJICogb2NmczJfcmVhZF9kaXJfYmxvY2soKSBoYXMgcmVsZWFzZWQgdGhlIGJoLiAqLwotCQkJb2NmczJfZXJyb3IoZGlyLT5pX3NiLCAicmVhZGluZyBkaXJlY3RvcnkgJWxsdSwgIgorCQkJbWxvZyhNTF9FUlJPUiwgInJlYWRpbmcgZGlyZWN0b3J5ICVsbHUsICIKIAkJCQkgICAgIm9mZnNldCAlbHVcbiIsCiAJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubywKIAkJCQkgICAgYmxvY2spOwpAQCAtMjA3MywxMCArMjA3MywxMiBAQAogCXVuc2lnbmVkIHNlZW5fb3RoZXI7CiAJdW5zaWduZWQgZHhfZGlyOwogfTsKLXN0YXRpYyBpbnQgb2NmczJfZW1wdHlfZGlyX2ZpbGxkaXIodm9pZCAqcHJpdiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLAotCQkJCSAgIGxvZmZfdCBwb3MsIHU2NCBpbm8sIHVuc2lnbmVkIHR5cGUpCitzdGF0aWMgaW50IG9jZnMyX2VtcHR5X2Rpcl9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIGludCBuYW1lX2xlbiwgbG9mZl90IHBvcywgdTY0IGlubywKKwkJCQkgICB1bnNpZ25lZCB0eXBlKQogewotCXN0cnVjdCBvY2ZzMl9lbXB0eV9kaXJfcHJpdiAqcCA9IHByaXY7CisJc3RydWN0IG9jZnMyX2VtcHR5X2Rpcl9wcml2ICpwID0KKwkJY29udGFpbmVyX29mKGN0eCwgc3RydWN0IG9jZnMyX2VtcHR5X2Rpcl9wcml2LCBjdHgpOwogCiAJLyoKIAkgKiBDaGVjayB0aGUgcG9zaXRpb25zIG9mICIuIiBhbmQgIi4uIiByZWNvcmRzIHRvIGJlIHN1cmUKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwppbmRleCAwMmQzMTVmLi41MGE1OWQyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCkBAIC04NzcsNyArODc3LDcgQEAKIAkgKiB0byBiZSBwdXQgaW4gc29tZW9uZSdzIGRvbWFpbiBtYXAuCiAJICogQWxzbywgZXhwbGljaXRseSBkaXNhbGxvdyBqb2luaW5nIGF0IGNlcnRhaW4gdHJvdWJsZXNvbWUKIAkgKiB0aW1lcyAoaWUuIGR1cmluZyByZWNvdmVyeSkuICovCi0JaWYgKGRsbSAmJiBkbG0tPmRsbV9zdGF0ZSAhPSBETE1fQ1RYVF9MRUFWSU5HKSB7CisJaWYgKGRsbS0+ZGxtX3N0YXRlICE9IERMTV9DVFhUX0xFQVZJTkcpIHsKIAkJaW50IGJpdCA9IHF1ZXJ5LT5ub2RlX2lkeDsKIAkJc3Bpbl9sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCmluZGV4IDIxNWU0MWEuLjM2ODliMzUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKQEAgLTE0NjAsNiArMTQ2MCwxOCBAQAogCiAJCS8qIHRha2UgY2FyZSBvZiB0aGUgZWFzeSBjYXNlcyB1cCBmcm9udCAqLwogCQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOworCisJCS8qCisJCSAqIFJpZ2h0IGFmdGVyIGRsbSBzcGlubG9jayB3YXMgcmVsZWFzZWQsIGRsbV90aHJlYWQgY291bGQgaGF2ZQorCQkgKiBwdXJnZWQgdGhlIGxvY2tyZXMuIENoZWNrIGlmIGxvY2tyZXMgZ290IHVuaGFzaGVkLiBJZiBzbworCQkgKiBzdGFydCBvdmVyLgorCQkgKi8KKwkJaWYgKGhsaXN0X3VuaGFzaGVkKCZyZXMtPmhhc2hfbm9kZSkpIHsKKwkJCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKKwkJCWRsbV9sb2NrcmVzX3B1dChyZXMpOworCQkJZ290byB3YXlfdXBfdG9wOworCQl9CisKIAkJaWYgKHJlcy0+c3RhdGUgJiAoRExNX0xPQ0tfUkVTX1JFQ09WRVJJTkd8CiAJCQkJICBETE1fTE9DS19SRVNfTUlHUkFUSU5HKSkgewogCQkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwppbmRleCAzMzY1ODM5Li43OWI1YWY1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwpAQCAtMTY1NiwxNCArMTY1NiwxOCBAQAogCXJlcS5uYW1lbGVuID0gcmVzLT5sb2NrbmFtZS5sZW47CiAJbWVtY3B5KHJlcS5uYW1lLCByZXMtPmxvY2tuYW1lLm5hbWUsIHJlcy0+bG9ja25hbWUubGVuKTsKIAorcmVzZW5kOgogCXJldCA9IG8ybmV0X3NlbmRfbWVzc2FnZShETE1fTUFTVEVSX1JFUVVFUllfTVNHLCBkbG0tPmtleSwKIAkJCQkgJnJlcSwgc2l6ZW9mKHJlcSksIG5vZGVudW0sICZzdGF0dXMpOwotCS8qIFhYWDogbmVnYXRpdmUgc3RhdHVzIG5vdCBoYW5kbGVkIHByb3Blcmx5IGhlcmUuICovCiAJaWYgKHJldCA8IDApCiAJCW1sb2coTUxfRVJST1IsICJFcnJvciAlZCB3aGVuIHNlbmRpbmcgbWVzc2FnZSAldSAoa2V5ICIKIAkJICAgICAiMHgleCkgdG8gbm9kZSAldVxuIiwgcmV0LCBETE1fTUFTVEVSX1JFUVVFUllfTVNHLAogCQkgICAgIGRsbS0+a2V5LCBub2RlbnVtKTsKLQllbHNlIHsKKwllbHNlIGlmIChzdGF0dXMgPT0gLUVOT01FTSkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCW1zbGVlcCg1MCk7CisJCWdvdG8gcmVzZW5kOworCX0gZWxzZSB7CiAJCUJVR19PTihzdGF0dXMgPCAwKTsKIAkJQlVHX09OKHN0YXR1cyA+IERMTV9MT0NLX1JFU19PV05FUl9VTktOT1dOKTsKIAkJKnJlYWxfbWFzdGVyID0gKHU4KSAoc3RhdHVzICYgMHhmZik7CkBAIC0xNzA1LDkgKzE3MDksMTMgQEAKIAkJCWludCByZXQgPSBkbG1fZGlzcGF0Y2hfYXNzZXJ0X21hc3RlcihkbG0sIHJlcywKIAkJCQkJCQkgICAgIDAsIDAsIGZsYWdzKTsKIAkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJbWxvZ19lcnJubygtRU5PTUVNKTsKLQkJCQkvKiByZXRyeSE/ICovCi0JCQkJQlVHKCk7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKKwkJCQlkbG1fbG9ja3Jlc19wdXQocmVzKTsKKwkJCQlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7CisJCQkJZGxtX3B1dChkbG0pOworCQkJCS8qIHNlbmRlciB3aWxsIHRha2UgY2FyZSBvZiB0aGlzIGFuZCByZXRyeSAqLworCQkJCXJldHVybiByZXQ7CiAJCQl9IGVsc2UKIAkJCQlfX2RsbV9sb2NrcmVzX2dyYWJfaW5mbGlnaHRfd29ya2VyKGRsbSwgcmVzKTsKIAkJCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMgYi9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jCmluZGV4IDA5YjdkOWQuLjU3YzQwZTMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMKKysrIGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuYwpAQCAtNTY1LDggKzU2NSw4IEBACiAJICogdG8gYWNxdWlyZSBhIGxvY2ssIHRoaXMgYmFzaWNhbGx5IGRlc3Ryb3lzIG91ciBsb2NrcmVzLiAqLwogCXN0YXR1cyA9IHVzZXJfZGxtX2Rlc3Ryb3lfbG9jaygmRExNRlNfSShpbm9kZSktPmlwX2xvY2tyZXMpOwogCWlmIChzdGF0dXMgPCAwKSB7Ci0JCW1sb2coTUxfRVJST1IsICJ1bmxpbmsgJS4qcywgZXJyb3IgJWQgZnJvbSBkZXN0cm95XG4iLAotCQkgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSwgc3RhdHVzKTsKKwkJbWxvZyhNTF9FUlJPUiwgInVubGluayAlcGQsIGVycm9yICVkIGZyb20gZGVzdHJveVxuIiwKKwkJICAgICBkZW50cnksIHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CiAJc3RhdHVzID0gc2ltcGxlX3VubGluayhkaXIsIGRlbnRyeSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1nbHVlLmMgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKaW5kZXggMjEyNjJmMi4uMWM0MjNhZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZ2x1ZS5jCisrKyBiL2ZzL29jZnMyL2RsbWdsdWUuYwpAQCAtODYxLDggKzg2MSwxMyBAQAogCSAqIFdlIHNldCB0aGUgT0NGUzJfTE9DS19VUENPTlZFUlRfRklOSVNISU5HIGZsYWcgYmVmb3JlIGNsZWFyaW5nCiAJICogdGhlIE9DRlMyX0xPQ0tfQlVTWSBmbGFnIHRvIHByZXZlbnQgdGhlIGRjIHRocmVhZCBmcm9tCiAJICogZG93bmNvbnZlcnRpbmcgdGhlIGxvY2sgYmVmb3JlIHRoZSB1cGNvbnZlcnQgaGFzIGZ1bGx5IGNvbXBsZXRlZC4KKwkgKiBEbyBub3QgcHJldmVudCB0aGUgZGMgdGhyZWFkIGZyb20gZG93bmNvbnZlcnRpbmcgaWYgTk9OQkxPQ0sgbG9jaworCSAqIGhhZCBhbHJlYWR5IHJldHVybmVkLgogCSAqLwotCWxvY2tyZXNfb3JfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19VUENPTlZFUlRfRklOSVNISU5HKTsKKwlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19OT05CTE9DS19GSU5JU0hFRCkpCisJCWxvY2tyZXNfb3JfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19VUENPTlZFUlRfRklOSVNISU5HKTsKKwllbHNlCisJCWxvY2tyZXNfY2xlYXJfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19OT05CTE9DS19GSU5JU0hFRCk7CiAKIAlsb2NrcmVzX2NsZWFyX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQlVTWSk7CiB9CkBAIC0xMzI0LDEzICsxMzI5LDEyIEBACiAKIC8qIHJldHVybnMgMCBpZiB0aGUgbXcgdGhhdCB3YXMgcmVtb3ZlZCB3YXMgYWxyZWFkeSBzYXRpc2ZpZWQsIC1FQlVTWQogICogaWYgdGhlIG1hc2sgc3RpbGwgaGFkbid0IHJlYWNoZWQgaXRzIGdvYWwgKi8KLXN0YXRpYyBpbnQgbG9ja3Jlc19yZW1vdmVfbWFza193YWl0ZXIoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAorc3RhdGljIGludCBfX2xvY2tyZXNfcmVtb3ZlX21hc2tfd2FpdGVyKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKIAkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfbWFza193YWl0ZXIgKm13KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZsb2NrcmVzLT5sX2xvY2spOwogCWlmICghbGlzdF9lbXB0eSgmbXctPm13X2l0ZW0pKSB7CiAJCWlmICgobG9ja3Jlcy0+bF9mbGFncyAmIG13LT5td19tYXNrKSAhPSBtdy0+bXdfZ29hbCkKIAkJCXJldCA9IC1FQlVTWTsKQEAgLTEzMzgsNiArMTM0MiwxOCBAQAogCQlsaXN0X2RlbF9pbml0KCZtdy0+bXdfaXRlbSk7CiAJCWluaXRfY29tcGxldGlvbigmbXctPm13X2NvbXBsZXRlKTsKIAl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxvY2tyZXNfcmVtb3ZlX21hc2tfd2FpdGVyKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfbWFza193YWl0ZXIgKm13KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CisJcmV0ID0gX19sb2NrcmVzX3JlbW92ZV9tYXNrX3dhaXRlcihsb2NrcmVzLCBtdyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTM3Myw2ICsxMzg5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBnZW47CiAJaW50IG5vcXVldWVfYXR0ZW1wdGVkID0gMDsKKwlpbnQgZGxtX2xvY2tlZCA9IDA7CiAKIAlvY2ZzMl9pbml0X21hc2tfd2FpdGVyKCZtdyk7CiAKQEAgLTE0ODEsNiArMTQ5OCw3IEBACiAJCQlvY2ZzMl9yZWNvdmVyX2Zyb21fZGxtX2Vycm9yKGxvY2tyZXMsIDEpOwogCQkJZ290byBvdXQ7CiAJCX0KKwkJZGxtX2xvY2tlZCA9IDE7CiAKIAkJbWxvZygwLCAibG9jayAlcywgc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSBvY2ZzMl9kbG1fbG9ja1xuIiwKIAkJICAgICBsb2NrcmVzLT5sX25hbWUpOwpAQCAtMTUxNCwxMCArMTUzMiwxNyBAQAogCWlmICh3YWl0ICYmIGFyZ19mbGFncyAmIE9DRlMyX0xPQ0tfTk9OQkxPQ0sgJiYKIAkgICAgbXcubXdfbWFzayAmIChPQ0ZTMl9MT0NLX0JVU1l8T0NGUzJfTE9DS19CTE9DS0VEKSkgewogCQl3YWl0ID0gMDsKLQkJaWYgKGxvY2tyZXNfcmVtb3ZlX21hc2tfd2FpdGVyKGxvY2tyZXMsICZtdykpCisJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKKwkJaWYgKF9fbG9ja3Jlc19yZW1vdmVfbWFza193YWl0ZXIobG9ja3JlcywgJm13KSkgeworCQkJaWYgKGRsbV9sb2NrZWQpCisJCQkJbG9ja3Jlc19vcl9mbGFncyhsb2NrcmVzLAorCQkJCQlPQ0ZTMl9MT0NLX05PTkJMT0NLX0ZJTklTSEVEKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwogCQkJcmV0ID0gLUVBR0FJTjsKLQkJZWxzZQorCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiAJCQlnb3RvIGFnYWluOworCQl9CiAJfQogCWlmICh3YWl0KSB7CiAJCXJldCA9IG9jZnMyX3dhaXRfZm9yX21hc2soJm13KTsKQEAgLTM3MjUsOCArMzc1MCw3IEBACiAJCQlicmVhazsKIAkJc3Bpbl91bmxvY2soJmRlbnRyeV9hdHRhY2hfbG9jayk7CiAKLQkJbWxvZygwLCAiZF9kZWxldGUoJS4qcyk7XG4iLCBkZW50cnktPmRfbmFtZS5sZW4sCi0JCSAgICAgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCW1sb2coMCwgImRfZGVsZXRlKCVwZCk7XG4iLCBkZW50cnkpOwogCiAJCS8qCiAJCSAqIFRoZSBmb2xsb3dpbmcgZGNhY2hlIGNhbGxzIG1heSBkbyBhbgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IDMyNGRjOTMuLjY5ZmI5ZjcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2ZpbGUuYworKysgYi9mcy9vY2ZzMi9maWxlLmMKQEAgLTIzODEsOSArMjM4MSw3IEBACiAJCWlmIChyZXQgPCAwKQogCQkJd3JpdHRlbiA9IHJldDsKIAotCQlpZiAoIXJldCAmJiAoKG9sZF9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgfHwKLQkJCSAgICAgKG9sZF9jbHVzdGVycyAhPSBPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMpIHx8Ci0JCQkgICAgIGhhc19yZWZjb3VudCkpIHsKKwkJaWYgKCFyZXQpIHsKIAkJCXJldCA9IGpiZDJfam91cm5hbF9mb3JjZV9jb21taXQob3NiLT5qb3VybmFsLT5qX2pvdXJuYWwpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJd3JpdHRlbiA9IHJldDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IDQzN2RlN2YuLmM4YjI1ZGUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtNTQwLDggKzU0MCw3IEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIAotCWlmIChhcmdzICYmIGJoKQotCQlicmVsc2UoYmgpOworCWJyZWxzZShiaCk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW5vZGUuaCBiL2ZzL29jZnMyL2lub2RlLmgKaW5kZXggYTliNzZkZS4uY2EzNDMxZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW5vZGUuaAorKysgYi9mcy9vY2ZzMi9pbm9kZS5oCkBAIC04MCw2ICs4MCw4IEBACiAJICovCiAJdGlkX3QgaV9zeW5jX3RpZDsKIAl0aWRfdCBpX2RhdGFzeW5jX3RpZDsKKworCXN0cnVjdCBkcXVvdCAqaV9kcXVvdFtNQVhRVU9UQVNdOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuYyBiL2ZzL29jZnMyL2pvdXJuYWwuYwppbmRleCA0YjBjNjg4Li40ZjUwMjM4MiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtMTk4MiwxMCArMTk4MiwxMiBAQAogCXN0cnVjdCBvY2ZzMl9zdXBlcgkqb3NiOwogfTsKIAotc3RhdGljIGludCBvY2ZzMl9vcnBoYW5fZmlsbGRpcih2b2lkICpwcml2LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZV9sZW4sCi0JCQkJbG9mZl90IHBvcywgdTY0IGlubywgdW5zaWduZWQgdHlwZSkKK3N0YXRpYyBpbnQgb2NmczJfb3JwaGFuX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJaW50IG5hbWVfbGVuLCBsb2ZmX3QgcG9zLCB1NjQgaW5vLAorCQkJCXVuc2lnbmVkIHR5cGUpCiB7Ci0Jc3RydWN0IG9jZnMyX29ycGhhbl9maWxsZGlyX3ByaXYgKnAgPSBwcml2OworCXN0cnVjdCBvY2ZzMl9vcnBoYW5fZmlsbGRpcl9wcml2ICpwID0KKwkJY29udGFpbmVyX29mKGN0eCwgc3RydWN0IG9jZnMyX29ycGhhbl9maWxsZGlyX3ByaXYsIGN0eCk7CiAJc3RydWN0IGlub2RlICppdGVyOwogCiAJaWYgKG5hbWVfbGVuID09IDEgJiYgIXN0cm5jbXAoIi4iLCBuYW1lLCAxKSkKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL21vdmVfZXh0ZW50cy5jIGIvZnMvb2NmczIvbW92ZV9leHRlbnRzLmMKaW5kZXggNzRjYWZmZS4uNTZhNzY4ZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbW92ZV9leHRlbnRzLmMKKysrIGIvZnMvb2NmczIvbW92ZV9leHRlbnRzLmMKQEAgLTkwNCw5ICs5MDQsNiBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCi0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KIAlpZiAob2NmczJfaXNfaGFyZF9yZWFkb25seShvc2IpIHx8IG9jZnMyX2lzX3NvZnRfcmVhZG9ubHkob3NiKSkKIAkJcmV0dXJuIC1FUk9GUzsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggYmJlYzUzOS4uN2Q2YjdkMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC0xNDQsNiArMTQ0LDEyIEBACiAJCQkJCQkgICAgICogYmVmb3JlIHRoZSB1cGNvbnZlcnQKIAkJCQkJCSAgICAgKiBoYXMgY29tcGxldGVkICovCiAKKyNkZWZpbmUgT0NGUzJfTE9DS19OT05CTE9DS19GSU5JU0hFRCAoMHgwMDAwMTAwMCkgLyogTk9OQkxPQ0sgY2x1c3RlcgorCQkJCQkJICAgKiBsb2NrIGhhcyBhbHJlYWR5CisJCQkJCQkgICAqIHJldHVybmVkLCBkbyBub3QgYmxvY2sKKwkJCQkJCSAgICogZGMgdGhyZWFkIGZyb20KKwkJCQkJCSAgICogZG93bmNvbnZlcnRpbmcgKi8KKwogc3RydWN0IG9jZnMyX2xvY2tfcmVzX29wczsKIAogdHlwZWRlZiB2b2lkICgqb2NmczJfbG9ja19jYWxsYmFjaykoaW50IHN0YXR1cywgdW5zaWduZWQgbG9uZyBkYXRhKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3Nsb3RfbWFwLmMgYi9mcy9vY2ZzMi9zbG90X21hcC5jCmluZGV4IGE4OGIyYTQuLmQ1NDkzZTMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3Nsb3RfbWFwLmMKKysrIGIvZnMvb2NmczIvc2xvdF9tYXAuYwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZvc2ItPm9zYl9sb2NrKTsKIAogCUJVR19PTihzbG90X251bSA8IDApOwotCUJVR19PTihzbG90X251bSA+IG9zYi0+bWF4X3Nsb3RzKTsKKwlCVUdfT04oc2xvdF9udW0gPj0gb3NiLT5tYXhfc2xvdHMpOwogCiAJaWYgKCFzaS0+c2lfc2xvdHNbc2xvdF9udW1dLnNsX3ZhbGlkKQogCQlyZXR1cm4gLUVOT0VOVDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDkzYzg1YmMuLjgzNzIzMTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMTQzLDYgKzE0MywxMSBAQAogc3RhdGljIGludCBvY2ZzMl9lbmFibGVfcXVvdGFzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIHN0YXRpYyB2b2lkIG9jZnMyX2Rpc2FibGVfcXVvdGFzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIAorc3RhdGljIHN0cnVjdCBkcXVvdCAqKm9jZnMyX2dldF9kcXVvdHMoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gT0NGUzJfSShpbm9kZSktPmlfZHF1b3Q7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvY2ZzMl9zb3BzID0gewogCS5zdGF0ZnMJCT0gb2NmczJfc3RhdGZzLAogCS5hbGxvY19pbm9kZQk9IG9jZnMyX2FsbG9jX2lub2RlLApAQCAtMTU1LDYgKzE2MCw3IEBACiAJLnNob3dfb3B0aW9ucyAgID0gb2NmczJfc2hvd19vcHRpb25zLAogCS5xdW90YV9yZWFkCT0gb2NmczJfcXVvdGFfcmVhZCwKIAkucXVvdGFfd3JpdGUJPSBvY2ZzMl9xdW90YV93cml0ZSwKKwkuZ2V0X2RxdW90cwk9IG9jZnMyX2dldF9kcXVvdHMsCiB9OwogCiBlbnVtIHsKQEAgLTU2Myw2ICs1NjksNyBAQAogCiAJb2ktPmlfc3luY190aWQgPSAwOwogCW9pLT5pX2RhdGFzeW5jX3RpZCA9IDA7CisJbWVtc2V0KCZvaS0+aV9kcXVvdCwgMCwgc2l6ZW9mKG9pLT5pX2RxdW90KSk7CiAKIAlqYmQyX2pvdXJuYWxfaW5pdF9qYmRfaW5vZGUoJm9pLT5pcF9qaW5vZGUsICZvaS0+dmZzX2lub2RlKTsKIAlyZXR1cm4gJm9pLT52ZnNfaW5vZGU7CkBAIC0xNjIyLDggKzE2MjksOSBAQAogCiAJb2NmczJfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJvY2ZzMiIsIE5VTEwpOwogCWlmICghb2NmczJfZGVidWdmc19yb290KSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7CisJCXN0YXR1cyA9IC1FTk9NRU07CiAJCW1sb2coTUxfRVJST1IsICJVbmFibGUgdG8gY3JlYXRlIG9jZnMyIGRlYnVnZnMgcm9vdC5cbiIpOworCQlnb3RvIG91dDQ7CiAJfQogCiAJb2NmczJfc2V0X2xvY2tpbmdfcHJvdG9jb2woKTsKQEAgLTIwNzMsNiArMjA4MSw3IEBACiAJc2ItPnNfZXhwb3J0X29wID0gJm9jZnMyX2V4cG9ydF9vcHM7CiAJc2ItPnNfcWNvcCA9ICZvY2ZzMl9xdW90YWN0bF9vcHM7CiAJc2ItPmRxX29wID0gJm9jZnMyX3F1b3RhX29wZXJhdGlvbnM7CisJc2ItPnNfcXVvdGFfdHlwZXMgPSBRVFlQRV9NQVNLX1VTUiB8IFFUWVBFX01BU0tfR1JQOwogCXNiLT5zX3hhdHRyID0gb2NmczJfeGF0dHJfaGFuZGxlcnM7CiAJc2ItPnNfdGltZV9ncmFuID0gMTsKIAlzYi0+c19mbGFncyB8PSBNU19OT0FUSU1FOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggMDE2ZjAxZC4uNjYyZjhkZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIveGF0dHIuYworKysgYi9mcy9vY2ZzMi94YXR0ci5jCkBAIC0xMjg0LDcgKzEyODQsNyBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoIShvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1hBVFRSX0ZMKSkKLQkJcmV0ID0gLUVOT0RBVEE7CisJCXJldHVybiAtRU5PREFUQTsKIAogCXhpcy5pbm9kZV9iaCA9IHhicy5pbm9kZV9iaCA9IGRpX2JoOwogCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IGRlOTJjMTMuLmIxYmYzZDUgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTUxNiw3ICs1MTYsNyBAQAogCWludCBlcnIgPSAtRUJBREY7CiAKIAlpZiAoZi5maWxlKSB7Ci0JCWF1ZGl0X2lub2RlKE5VTEwsIGYuZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCk7CisJCWF1ZGl0X2ZpbGUoZi5maWxlKTsKIAkJZXJyID0gY2htb2RfY29tbW9uKCZmLmZpbGUtPmZfcGF0aCwgbW9kZSk7CiAJCWZkcHV0KGYpOwogCX0KQEAgLTY0Miw3ICs2NDIsNyBAQAogCWVycm9yID0gbW50X3dhbnRfd3JpdGVfZmlsZShmLmZpbGUpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZnB1dDsKLQlhdWRpdF9pbm9kZShOVUxMLCBmLmZpbGUtPmZfcGF0aC5kZW50cnksIDApOworCWF1ZGl0X2ZpbGUoZi5maWxlKTsKIAllcnJvciA9IGNob3duX2NvbW1vbigmZi5maWxlLT5mX3BhdGgsIHVzZXIsIGdyb3VwKTsKIAltbnRfZHJvcF93cml0ZV9maWxlKGYuZmlsZSk7CiBvdXRfZnB1dDoKZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9yZWFkZGlyLmMgYi9mcy9vdmVybGF5ZnMvcmVhZGRpci5jCmluZGV4IGFiMWUzZGMuLmMwMjA1OTkgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy9yZWFkZGlyLmMKKysrIGIvZnMvb3ZlcmxheWZzL3JlYWRkaXIuYwpAQCAtMTgwLDEwICsxODAsMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgb3ZsX2ZpbGxfbWVyZ2Uodm9pZCAqYnVmLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJCSAgbG9mZl90IG9mZnNldCwgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKK3N0YXRpYyBpbnQgb3ZsX2ZpbGxfbWVyZ2Uoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgIGludCBuYW1lbGVuLCBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLAorCQkJICB1bnNpZ25lZCBpbnQgZF90eXBlKQogewotCXN0cnVjdCBvdmxfcmVhZGRpcl9kYXRhICpyZGQgPSBidWY7CisJc3RydWN0IG92bF9yZWFkZGlyX2RhdGEgKnJkZCA9CisJCWNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBvdmxfcmVhZGRpcl9kYXRhLCBjdHgpOwogCiAJcmRkLT5jb3VudCsrOwogCWlmICghcmRkLT5pc19tZXJnZSkKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCBjZDM2NTNlLi5iZDExN2QwIDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC0xNTcsMjAgKzE1NywyOSBAQAogCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyA9IHNlcV91c2VyX25zKG0pOwogCXN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvOwogCWludCBnOwotCXN0cnVjdCBmZHRhYmxlICpmZHQgPSBOVUxMOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHJhY2VyOwogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkOwotCXBpZF90IHBwaWQsIHRwaWQ7CisJcGlkX3QgcHBpZCwgdHBpZCA9IDAsIHRnaWQsIG5naWQ7CisJdW5zaWduZWQgaW50IG1heF9mZHMgPSAwOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCXBwaWQgPSBwaWRfYWxpdmUocCkgPwogCQl0YXNrX3RnaWRfbnJfbnMocmN1X2RlcmVmZXJlbmNlKHAtPnJlYWxfcGFyZW50KSwgbnMpIDogMDsKLQl0cGlkID0gMDsKLQlpZiAocGlkX2FsaXZlKHApKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHJhY2VyID0gcHRyYWNlX3BhcmVudChwKTsKLQkJaWYgKHRyYWNlcikKLQkJCXRwaWQgPSB0YXNrX3BpZF9ucl9ucyh0cmFjZXIsIG5zKTsKLQl9CisKKwl0cmFjZXIgPSBwdHJhY2VfcGFyZW50KHApOworCWlmICh0cmFjZXIpCisJCXRwaWQgPSB0YXNrX3BpZF9ucl9ucyh0cmFjZXIsIG5zKTsKKworCXRnaWQgPSB0YXNrX3RnaWRfbnJfbnMocCwgbnMpOworCW5naWQgPSB0YXNrX251bWFfZ3JvdXBfaWQocCk7CiAJY3JlZCA9IGdldF90YXNrX2NyZWQocCk7CisKKwl0YXNrX2xvY2socCk7CisJaWYgKHAtPmZpbGVzKQorCQltYXhfZmRzID0gZmlsZXNfZmR0YWJsZShwLT5maWxlcyktPm1heF9mZHM7CisJdGFza191bmxvY2socCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKIAlzZXFfcHJpbnRmKG0sCiAJCSJTdGF0ZTpcdCVzXG4iCiAJCSJUZ2lkOlx0JWRcbiIKQEAgLTE3OSwxMiArMTg4LDEwIEBACiAJCSJQUGlkOlx0JWRcbiIKIAkJIlRyYWNlclBpZDpcdCVkXG4iCiAJCSJVaWQ6XHQlZFx0JWRcdCVkXHQlZFxuIgotCQkiR2lkOlx0JWRcdCVkXHQlZFx0JWRcbiIsCisJCSJHaWQ6XHQlZFx0JWRcdCVkXHQlZFxuIgorCQkiRkRTaXplOlx0JWRcbkdyb3VwczpcdCIsCiAJCWdldF90YXNrX3N0YXRlKHApLAotCQl0YXNrX3RnaWRfbnJfbnMocCwgbnMpLAotCQl0YXNrX251bWFfZ3JvdXBfaWQocCksCi0JCXBpZF9ucl9ucyhwaWQsIG5zKSwKLQkJcHBpZCwgdHBpZCwKKwkJdGdpZCwgbmdpZCwgcGlkX25yX25zKHBpZCwgbnMpLCBwcGlkLCB0cGlkLAogCQlmcm9tX2t1aWRfbXVuZ2VkKHVzZXJfbnMsIGNyZWQtPnVpZCksCiAJCWZyb21fa3VpZF9tdW5nZWQodXNlcl9ucywgY3JlZC0+ZXVpZCksCiAJCWZyb21fa3VpZF9tdW5nZWQodXNlcl9ucywgY3JlZC0+c3VpZCksCkBAIC0xOTIsMjAgKzE5OSwxMCBAQAogCQlmcm9tX2tnaWRfbXVuZ2VkKHVzZXJfbnMsIGNyZWQtPmdpZCksCiAJCWZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgY3JlZC0+ZWdpZCksCiAJCWZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgY3JlZC0+c2dpZCksCi0JCWZyb21fa2dpZF9tdW5nZWQodXNlcl9ucywgY3JlZC0+ZnNnaWQpKTsKLQotCXRhc2tfbG9jayhwKTsKLQlpZiAocC0+ZmlsZXMpCi0JCWZkdCA9IGZpbGVzX2ZkdGFibGUocC0+ZmlsZXMpOwotCXNlcV9wcmludGYobSwKLQkJIkZEU2l6ZTpcdCVkXG4iCi0JCSJHcm91cHM6XHQiLAotCQlmZHQgPyBmZHQtPm1heF9mZHMgOiAwKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZnJvbV9rZ2lkX211bmdlZCh1c2VyX25zLCBjcmVkLT5mc2dpZCksCisJCW1heF9mZHMpOwogCiAJZ3JvdXBfaW5mbyA9IGNyZWQtPmdyb3VwX2luZm87Ci0JdGFza191bmxvY2socCk7Ci0KIAlmb3IgKGcgPSAwOyBnIDwgZ3JvdXBfaW5mby0+bmdyb3VwczsgZysrKQogCQlzZXFfcHJpbnRmKG0sICIlZCAiLAogCQkJICAgZnJvbV9rZ2lkX211bmdlZCh1c2VyX25zLCBHUk9VUF9BVChncm91cF9pbmZvLCBnKSkpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCA3NzJlZmE0Li41OTBhZWRhIDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtMjYxOCw2ICsyNjE4LDkgQEAKIAkJZHB1dChkZW50cnkpOwogCX0KIAorCWlmIChwaWQgPT0gdGdpZCkKKwkJcmV0dXJuOworCiAJbmFtZS5uYW1lID0gYnVmOwogCW5hbWUubGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgdGdpZCk7CiAJbGVhZGVyID0gZF9oYXNoX2FuZF9sb29rdXAobW50LT5tbnRfcm9vdCwgJm5hbWUpOwpAQCAtMjc4OSw3ICsyNzkyLDcgQEAKIGludCBwcm9jX3BpZF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgdGdpZF9pdGVyIGl0ZXI7Ci0Jc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zID0gZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMgPSBmaWxlX2lub2RlKGZpbGUpLT5pX3NiLT5zX2ZzX2luZm87CiAJbG9mZl90IHBvcyA9IGN0eC0+cG9zOwogCiAJaWYgKHBvcyA+PSBQSURfTUFYX0xJTUlUICsgVEdJRF9PRkZTRVQpCkBAIC0zMDk1LDcgKzMwOTgsNyBAQAogCS8qIGZfdmVyc2lvbiBjYWNoZXMgdGhlIHRnaWQgdmFsdWUgdGhhdCB0aGUgbGFzdCByZWFkZGlyIGNhbGwgY291bGRuJ3QKIAkgKiByZXR1cm4uIGxzZWVrIGFrYSB0ZWxsZGlyIGF1dG9tYWdpY2FsbHkgcmVzZXRzIGZfdmVyc2lvbiB0byAwLgogCSAqLwotCW5zID0gZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKKwlucyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJdGlkID0gKGludClmaWxlLT5mX3ZlcnNpb247CiAJZmlsZS0+Zl92ZXJzaW9uID0gMDsKIAlmb3IgKHRhc2sgPSBmaXJzdF90aWQocHJvY19waWQoaW5vZGUpLCB0aWQsIGN0eC0+cG9zIC0gMiwgbnMpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9mZC5jIGIvZnMvcHJvYy9mZC5jCmluZGV4IGUxMWQ3YzUuLjhlNWFkODMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvZmQuYworKysgYi9mcy9wcm9jL2ZkLmMKQEAgLTUzLDcgKzUzLDggQEAKIAkJCSAgIChsb25nIGxvbmcpZmlsZS0+Zl9wb3MsIGZfZmxhZ3MsCiAJCQkgICByZWFsX21vdW50KGZpbGUtPmZfcGF0aC5tbnQpLT5tbnRfaWQpOwogCQlpZiAoZmlsZS0+Zl9vcC0+c2hvd19mZGluZm8pCi0JCQlyZXQgPSBmaWxlLT5mX29wLT5zaG93X2ZkaW5mbyhtLCBmaWxlKTsKKwkJCWZpbGUtPmZfb3AtPnNob3dfZmRpbmZvKG0sIGZpbGUpOworCQlyZXQgPSBzZXFfaGFzX292ZXJmbG93ZWQobSk7CiAJCWZwdXQoZmlsZSk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2dlbmVyaWMuYyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCmluZGV4IDMxN2I3MjYuLjdmZWExMzIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvZ2VuZXJpYy5jCisrKyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCkBAIC0zMSw5ICszMSw3MyBAQAogCiBzdGF0aWMgaW50IHByb2NfbWF0Y2godW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKIHsKLQlpZiAoZGUtPm5hbWVsZW4gIT0gbGVuKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gIW1lbWNtcChuYW1lLCBkZS0+bmFtZSwgbGVuKTsKKwlpZiAobGVuIDwgZGUtPm5hbWVsZW4pCisJCXJldHVybiAtMTsKKwlpZiAobGVuID4gZGUtPm5hbWVsZW4pCisJCXJldHVybiAxOworCisJcmV0dXJuIG1lbWNtcChuYW1lLCBkZS0+bmFtZSwgbGVuKTsKK30KKworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlX3N1YmRpcl9maXJzdChzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRpcikKK3sKKwlyZXR1cm4gcmJfZW50cnlfc2FmZShyYl9maXJzdCgmZGlyLT5zdWJkaXIpLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnksCisJCQkgICAgIHN1YmRpcl9ub2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlX3N1YmRpcl9uZXh0KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyKQoreworCXJldHVybiByYl9lbnRyeV9zYWZlKHJiX25leHQoJmRpci0+c3ViZGlyX25vZGUpLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnksCisJCQkgICAgIHN1YmRpcl9ub2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlX3N1YmRpcl9maW5kKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCByYl9ub2RlICpub2RlID0gZGlyLT5zdWJkaXIucmJfbm9kZTsKKworCXdoaWxlIChub2RlKSB7CisJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUgPSBjb250YWluZXJfb2Yobm9kZSwKKwkJCQkJCQkgc3RydWN0IHByb2NfZGlyX2VudHJ5LAorCQkJCQkJCSBzdWJkaXJfbm9kZSk7CisJCWludCByZXN1bHQgPSBwcm9jX21hdGNoKGxlbiwgbmFtZSwgZGUpOworCisJCWlmIChyZXN1bHQgPCAwKQorCQkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHJlc3VsdCA+IDApCisJCQlub2RlID0gbm9kZS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBkZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBib29sIHBkZV9zdWJkaXJfaW5zZXJ0KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyLAorCQkJICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZkaXItPnN1YmRpcjsKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICZyb290LT5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDsKKworCS8qIEZpZ3VyZSBvdXQgd2hlcmUgdG8gcHV0IG5ldyBub2RlICovCisJd2hpbGUgKCpuZXcpIHsKKwkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICp0aGlzID0KKwkJCWNvbnRhaW5lcl9vZigqbmV3LCBzdHJ1Y3QgcHJvY19kaXJfZW50cnksIHN1YmRpcl9ub2RlKTsKKwkJaW50IHJlc3VsdCA9IHByb2NfbWF0Y2goZGUtPm5hbWVsZW4sIGRlLT5uYW1lLCB0aGlzKTsKKworCQlwYXJlbnQgPSAqbmV3OworCQlpZiAocmVzdWx0IDwgMCkKKwkJCW5ldyA9ICYoKm5ldyktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHJlc3VsdCA+IDApCisJCQluZXcgPSAmKCpuZXcpLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEFkZCBuZXcgbm9kZSBhbmQgcmViYWxhbmNlIHRyZWUuICovCisJcmJfbGlua19ub2RlKCZkZS0+c3ViZGlyX25vZGUsIHBhcmVudCwgbmV3KTsKKwlyYl9pbnNlcnRfY29sb3IoJmRlLT5zdWJkaXJfbm9kZSwgcm9vdCk7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY19ub3RpZnlfY2hhbmdlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKQEAgLTkyLDEwICsxNTYsNyBAQAogCQkJYnJlYWs7CiAKIAkJbGVuID0gbmV4dCAtIGNwOwotCQlmb3IgKGRlID0gZGUtPnN1YmRpcjsgZGUgOyBkZSA9IGRlLT5uZXh0KSB7Ci0JCQlpZiAocHJvY19tYXRjaChsZW4sIGNwLCBkZSkpCi0JCQkJYnJlYWs7Ci0JCX0KKwkJZGUgPSBwZGVfc3ViZGlyX2ZpbmQoZGUsIGNwLCBsZW4pOwogCQlpZiAoIWRlKSB7CiAJCQlXQVJOKDEsICJuYW1lICclcydcbiIsIG5hbWUpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xODMsMTkgKzI0NCwxNiBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKIAlzcGluX2xvY2soJnByb2Nfc3ViZGlyX2xvY2spOwotCWZvciAoZGUgPSBkZS0+c3ViZGlyOyBkZSA7IGRlID0gZGUtPm5leHQpIHsKLQkJaWYgKGRlLT5uYW1lbGVuICE9IGRlbnRyeS0+ZF9uYW1lLmxlbikKLQkJCWNvbnRpbnVlOwotCQlpZiAoIW1lbWNtcChkZW50cnktPmRfbmFtZS5uYW1lLCBkZS0+bmFtZSwgZGUtPm5hbWVsZW4pKSB7Ci0JCQlwZGVfZ2V0KGRlKTsKLQkJCXNwaW5fdW5sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKLQkJCWlub2RlID0gcHJvY19nZXRfaW5vZGUoZGlyLT5pX3NiLCBkZSk7Ci0JCQlpZiAoIWlub2RlKQotCQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCQkJZF9zZXRfZF9vcChkZW50cnksICZzaW1wbGVfZGVudHJ5X29wZXJhdGlvbnMpOwotCQkJZF9hZGQoZGVudHJ5LCBpbm9kZSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQorCWRlID0gcGRlX3N1YmRpcl9maW5kKGRlLCBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4pOworCWlmIChkZSkgeworCQlwZGVfZ2V0KGRlKTsKKwkJc3Bpbl91bmxvY2soJnByb2Nfc3ViZGlyX2xvY2spOworCQlpbm9kZSA9IHByb2NfZ2V0X2lub2RlKGRpci0+aV9zYiwgZGUpOworCQlpZiAoIWlub2RlKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmc2ltcGxlX2RlbnRyeV9vcGVyYXRpb25zKTsKKwkJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CisJCXJldHVybiBOVUxMOwogCX0KIAlzcGluX3VubG9jaygmcHJvY19zdWJkaXJfbG9jayk7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CkBAIC0yMjUsNyArMjgzLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2soJnByb2Nfc3ViZGlyX2xvY2spOwotCWRlID0gZGUtPnN1YmRpcjsKKwlkZSA9IHBkZV9zdWJkaXJfZmlyc3QoZGUpOwogCWkgPSBjdHgtPnBvcyAtIDI7CiAJZm9yICg7OykgewogCQlpZiAoIWRlKSB7CkBAIC0yMzQsNyArMjkyLDcgQEAKIAkJfQogCQlpZiAoIWkpCiAJCQlicmVhazsKLQkJZGUgPSBkZS0+bmV4dDsKKwkJZGUgPSBwZGVfc3ViZGlyX25leHQoZGUpOwogCQlpLS07CiAJfQogCkBAIC0yNDksNyArMzA3LDcgQEAKIAkJfQogCQlzcGluX2xvY2soJnByb2Nfc3ViZGlyX2xvY2spOwogCQljdHgtPnBvcysrOwotCQluZXh0ID0gZGUtPm5leHQ7CisJCW5leHQgPSBwZGVfc3ViZGlyX25leHQoZGUpOwogCQlwZGVfcHV0KGRlKTsKIAkJZGUgPSBuZXh0OwogCX0gd2hpbGUgKGRlKTsKQEAgLTI4Niw5ICszNDQsOCBAQAogCiBzdGF0aWMgaW50IHByb2NfcmVnaXN0ZXIoc3RydWN0IHByb2NfZGlyX2VudHJ5ICogZGlyLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiBkcCkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnRtcDsKIAlpbnQgcmV0OwotCQorCiAJcmV0ID0gcHJvY19hbGxvY19pbnVtKCZkcC0+bG93X2lubyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTMwNCwyMSArMzYxLDIxIEBACiAJCWRwLT5wcm9jX2lvcHMgPSAmcHJvY19maWxlX2lub2RlX29wZXJhdGlvbnM7CiAJfSBlbHNlIHsKIAkJV0FSTl9PTigxKTsKKwkJcHJvY19mcmVlX2ludW0oZHAtPmxvd19pbm8pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlzcGluX2xvY2soJnByb2Nfc3ViZGlyX2xvY2spOwotCi0JZm9yICh0bXAgPSBkaXItPnN1YmRpcjsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCi0JCWlmIChzdHJjbXAodG1wLT5uYW1lLCBkcC0+bmFtZSkgPT0gMCkgewotCQkJV0FSTigxLCAicHJvY19kaXJfZW50cnkgJyVzLyVzJyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsCi0JCQkJZGlyLT5uYW1lLCBkcC0+bmFtZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JZHAtPm5leHQgPSBkaXItPnN1YmRpcjsKIAlkcC0+cGFyZW50ID0gZGlyOwotCWRpci0+c3ViZGlyID0gZHA7CisJaWYgKHBkZV9zdWJkaXJfaW5zZXJ0KGRpciwgZHApID09IGZhbHNlKSB7CisJCVdBUk4oMSwgInByb2NfZGlyX2VudHJ5ICclcy8lcycgYWxyZWFkeSByZWdpc3RlcmVkXG4iLAorCQkgICAgIGRpci0+bmFtZSwgZHAtPm5hbWUpOworCQlzcGluX3VubG9jaygmcHJvY19zdWJkaXJfbG9jayk7CisJCWlmIChTX0lTRElSKGRwLT5tb2RlKSkKKwkJCWRpci0+bmxpbmstLTsKKwkJcHJvY19mcmVlX2ludW0oZHAtPmxvd19pbm8pOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CiAJc3Bpbl91bmxvY2soJnByb2Nfc3ViZGlyX2xvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0zNTQsNiArNDExLDcgQEAKIAllbnQtPm5hbWVsZW4gPSBxc3RyLmxlbjsKIAllbnQtPm1vZGUgPSBtb2RlOwogCWVudC0+bmxpbmsgPSBubGluazsKKwllbnQtPnN1YmRpciA9IFJCX1JPT1Q7CiAJYXRvbWljX3NldCgmZW50LT5jb3VudCwgMSk7CiAJc3Bpbl9sb2NrX2luaXQoJmVudC0+cGRlX3VubG9hZF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZW50LT5wZGVfb3BlbmVycyk7CkBAIC00ODUsNyArNTQzLDYgQEAKICAqLwogdm9pZCByZW1vdmVfcHJvY19lbnRyeShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKipwOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmZuID0gbmFtZTsKIAl1bnNpZ25lZCBpbnQgbGVuOwpAQCAtNDk3LDE0ICs1NTQsOSBAQAogCX0KIAlsZW4gPSBzdHJsZW4oZm4pOwogCi0JZm9yIChwID0gJnBhcmVudC0+c3ViZGlyOyAqcDsgcD0mKCpwKS0+bmV4dCApIHsKLQkJaWYgKHByb2NfbWF0Y2gobGVuLCBmbiwgKnApKSB7Ci0JCQlkZSA9ICpwOwotCQkJKnAgPSBkZS0+bmV4dDsKLQkJCWRlLT5uZXh0ID0gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCWRlID0gcGRlX3N1YmRpcl9maW5kKHBhcmVudCwgZm4sIGxlbik7CisJaWYgKGRlKQorCQlyYl9lcmFzZSgmZGUtPnN1YmRpcl9ub2RlLCAmcGFyZW50LT5zdWJkaXIpOwogCXNwaW5fdW5sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKIAlpZiAoIWRlKSB7CiAJCVdBUk4oMSwgIm5hbWUgJyVzJ1xuIiwgbmFtZSk7CkBAIC01MTYsMTYgKzU2OCwxNSBAQAogCWlmIChTX0lTRElSKGRlLT5tb2RlKSkKIAkJcGFyZW50LT5ubGluay0tOwogCWRlLT5ubGluayA9IDA7Ci0JV0FSTihkZS0+c3ViZGlyLCAiJXM6IHJlbW92aW5nIG5vbi1lbXB0eSBkaXJlY3RvcnkgIgotCQkJICInJXMvJXMnLCBsZWFraW5nIGF0IGxlYXN0ICclcydcbiIsIF9fZnVuY19fLAotCQkJIGRlLT5wYXJlbnQtPm5hbWUsIGRlLT5uYW1lLCBkZS0+c3ViZGlyLT5uYW1lKTsKKwlXQVJOKHBkZV9zdWJkaXJfZmlyc3QoZGUpLAorCSAgICAgIiVzOiByZW1vdmluZyBub24tZW1wdHkgZGlyZWN0b3J5ICclcy8lcycsIGxlYWtpbmcgYXQgbGVhc3QgJyVzJ1xuIiwKKwkgICAgIF9fZnVuY19fLCBkZS0+cGFyZW50LT5uYW1lLCBkZS0+bmFtZSwgcGRlX3N1YmRpcl9maXJzdChkZSktPm5hbWUpOwogCXBkZV9wdXQoZGUpOwogfQogRVhQT1JUX1NZTUJPTChyZW1vdmVfcHJvY19lbnRyeSk7CiAKIGludCByZW1vdmVfcHJvY19zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKnA7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290ID0gTlVMTCwgKmRlLCAqbmV4dDsKIAljb25zdCBjaGFyICpmbiA9IG5hbWU7CiAJdW5zaWduZWQgaW50IGxlbjsKQEAgLTUzNywyNCArNTg4LDE4IEBACiAJfQogCWxlbiA9IHN0cmxlbihmbik7CiAKLQlmb3IgKHAgPSAmcGFyZW50LT5zdWJkaXI7ICpwOyBwPSYoKnApLT5uZXh0ICkgewotCQlpZiAocHJvY19tYXRjaChsZW4sIGZuLCAqcCkpIHsKLQkJCXJvb3QgPSAqcDsKLQkJCSpwID0gcm9vdC0+bmV4dDsKLQkJCXJvb3QtPm5leHQgPSBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJcm9vdCA9IHBkZV9zdWJkaXJfZmluZChwYXJlbnQsIGZuLCBsZW4pOwogCWlmICghcm9vdCkgewogCQlzcGluX3VubG9jaygmcHJvY19zdWJkaXJfbG9jayk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KKwlyYl9lcmFzZSgmcm9vdC0+c3ViZGlyX25vZGUsICZwYXJlbnQtPnN1YmRpcik7CisKIAlkZSA9IHJvb3Q7CiAJd2hpbGUgKDEpIHsKLQkJbmV4dCA9IGRlLT5zdWJkaXI7CisJCW5leHQgPSBwZGVfc3ViZGlyX2ZpcnN0KGRlKTsKIAkJaWYgKG5leHQpIHsKLQkJCWRlLT5zdWJkaXIgPSBuZXh0LT5uZXh0OwotCQkJbmV4dC0+bmV4dCA9IE5VTEw7CisJCQlyYl9lcmFzZSgmbmV4dC0+c3ViZGlyX25vZGUsICZkZS0+c3ViZGlyKTsKIAkJCWRlID0gbmV4dDsKIAkJCWNvbnRpbnVlOwogCQl9CmRpZmYgLS1naXQgYS9mcy9wcm9jL2ludGVybmFsLmggYi9mcy9wcm9jL2ludGVybmFsLmgKaW5kZXggYWE3YTBlZS4uN2ZiMWE0OCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9pbnRlcm5hbC5oCisrKyBiL2ZzL3Byb2MvaW50ZXJuYWwuaApAQCAtMjQsMTAgKzI0LDkgQEAKICAqIHRyZWUpIG9mIHRoZXNlIHByb2NfZGlyX2VudHJpZXMsIHNvIHRoYXQgd2UgY2FuIGR5bmFtaWNhbGx5CiAgKiBhZGQgbmV3IGZpbGVzIHRvIC9wcm9jLgogICoKLSAqIFRoZSAibmV4dCIgcG9pbnRlciBjcmVhdGVzIGEgbGlua2VkIGxpc3Qgb2Ygb25lIC9wcm9jIGRpcmVjdG9yeSwKLSAqIHdoaWxlIHBhcmVudC9zdWJkaXIgY3JlYXRlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIChldmVyeQotICogL3Byb2MgZmlsZSBoYXMgYSBwYXJlbnQsIGJ1dCAic3ViZGlyIiBpcyBOVUxMIGZvciBhbGwKLSAqIG5vbi1kaXJlY3RvcnkgZW50cmllcykuCisgKiBwYXJlbnQvc3ViZGlyIGFyZSB1c2VkIGZvciB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSAoZXZlcnkgL3Byb2MgZmlsZSBoYXMgYQorICogcGFyZW50LCBidXQgInN1YmRpciIgaXMgZW1wdHkgZm9yIGFsbCBub24tZGlyZWN0b3J5IGVudHJpZXMpLgorICogc3ViZGlyX25vZGUgaXMgdXNlZCB0byBidWlsZCB0aGUgcmIgdHJlZSAic3ViZGlyIiBvZiB0aGUgcGFyZW50LgogICovCiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgewogCXVuc2lnbmVkIGludCBsb3dfaW5vOwpAQCAtMzgsNyArMzcsOSBAQAogCWxvZmZfdCBzaXplOwogCWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICpwcm9jX2lvcHM7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqcHJvY19mb3BzOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqbmV4dCwgKnBhcmVudCwgKnN1YmRpcjsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudDsKKwlzdHJ1Y3QgcmJfcm9vdCBzdWJkaXI7CisJc3RydWN0IHJiX25vZGUgc3ViZGlyX25vZGU7CiAJdm9pZCAqZGF0YTsKIAlhdG9taWNfdCBjb3VudDsJCS8qIHVzZSBjb3VudCAqLwogCWF0b21pY190IGluX3VzZTsJLyogbnVtYmVyIG9mIGNhbGxlcnMgaW50byBtb2R1bGUgaW4gcHJvZ3Jlc3M7ICovCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfbmV0LmMgYi9mcy9wcm9jL3Byb2NfbmV0LmMKaW5kZXggYTYzYWYzZS4uMWJkZTg5NCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX25ldC5jCisrKyBiL2ZzL3Byb2MvcHJvY19uZXQuYwpAQCAtMTkyLDYgKzE5Miw3IEBACiAJaWYgKCFuZXRkKQogCQlnb3RvIG91dDsKIAorCW5ldGQtPnN1YmRpciA9IFJCX1JPT1Q7CiAJbmV0ZC0+ZGF0YSA9IG5ldDsKIAluZXRkLT5ubGluayA9IDI7CiAJbmV0ZC0+bmFtZWxlbiA9IDM7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Jvb3QuYyBiL2ZzL3Byb2Mvcm9vdC5jCmluZGV4IDA5NGU0NGQuLmU3NGFjOWYgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvcm9vdC5jCisrKyBiL2ZzL3Byb2Mvcm9vdC5jCkBAIC0yNTEsNiArMjUxLDcgQEAKIAkucHJvY19pb3BzCT0gJnByb2Nfcm9vdF9pbm9kZV9vcGVyYXRpb25zLCAKIAkucHJvY19mb3BzCT0gJnByb2Nfcm9vdF9vcGVyYXRpb25zLAogCS5wYXJlbnQJCT0gJnByb2Nfcm9vdCwKKwkuc3ViZGlyCQk9IFJCX1JPT1QsCiAJLm5hbWUJCT0gIi9wcm9jIiwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA0ZTAzODhjLi4yNDZlYWU4IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC00NDcsNTkgKzQ0Nyw5MiBAQAogCXU2NCBwc3M7CiB9OwogCitzdGF0aWMgdm9pZCBzbWFwc19hY2NvdW50KHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJdW5zaWduZWQgbG9uZyBzaXplLCBib29sIHlvdW5nLCBib29sIGRpcnR5KQoreworCWludCBtYXBjb3VudDsKIAotc3RhdGljIHZvaWQgc21hcHNfcHRlX2VudHJ5KHB0ZV90IHB0ZW50LCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCXVuc2lnbmVkIGxvbmcgcHRlbnRfc2l6ZSwgc3RydWN0IG1tX3dhbGsgKndhbGspCisJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQltc3MtPmFub255bW91cyArPSBzaXplOworCisJbXNzLT5yZXNpZGVudCArPSBzaXplOworCS8qIEFjY3VtdWxhdGUgdGhlIHNpemUgaW4gcGFnZXMgdGhhdCBoYXZlIGJlZW4gYWNjZXNzZWQuICovCisJaWYgKHlvdW5nIHx8IFBhZ2VSZWZlcmVuY2VkKHBhZ2UpKQorCQltc3MtPnJlZmVyZW5jZWQgKz0gc2l6ZTsKKwltYXBjb3VudCA9IHBhZ2VfbWFwY291bnQocGFnZSk7CisJaWYgKG1hcGNvdW50ID49IDIpIHsKKwkJdTY0IHBzc19kZWx0YTsKKworCQlpZiAoZGlydHkgfHwgUGFnZURpcnR5KHBhZ2UpKQorCQkJbXNzLT5zaGFyZWRfZGlydHkgKz0gc2l6ZTsKKwkJZWxzZQorCQkJbXNzLT5zaGFyZWRfY2xlYW4gKz0gc2l6ZTsKKwkJcHNzX2RlbHRhID0gKHU2NClzaXplIDw8IFBTU19TSElGVDsKKwkJZG9fZGl2KHBzc19kZWx0YSwgbWFwY291bnQpOworCQltc3MtPnBzcyArPSBwc3NfZGVsdGE7CisJfSBlbHNlIHsKKwkJaWYgKGRpcnR5IHx8IFBhZ2VEaXJ0eShwYWdlKSkKKwkJCW1zcy0+cHJpdmF0ZV9kaXJ0eSArPSBzaXplOworCQllbHNlCisJCQltc3MtPnByaXZhdGVfY2xlYW4gKz0gc2l6ZTsKKwkJbXNzLT5wc3MgKz0gKHU2NClzaXplIDw8IFBTU19TSElGVDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNtYXBzX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCXN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzID0gd2Fsay0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1zcy0+dm1hOwogCXBnb2ZmX3QgcGdvZmYgPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHIpOwogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKLQlpbnQgbWFwY291bnQ7CiAKLQlpZiAocHRlX3ByZXNlbnQocHRlbnQpKSB7Ci0JCXBhZ2UgPSB2bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB0ZW50KTsKLQl9IGVsc2UgaWYgKGlzX3N3YXBfcHRlKHB0ZW50KSkgewotCQlzd3BfZW50cnlfdCBzd3BlbnQgPSBwdGVfdG9fc3dwX2VudHJ5KHB0ZW50KTsKKwlpZiAocHRlX3ByZXNlbnQoKnB0ZSkpIHsKKwkJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgKnB0ZSk7CisJfSBlbHNlIGlmIChpc19zd2FwX3B0ZSgqcHRlKSkgeworCQlzd3BfZW50cnlfdCBzd3BlbnQgPSBwdGVfdG9fc3dwX2VudHJ5KCpwdGUpOwogCiAJCWlmICghbm9uX3N3YXBfZW50cnkoc3dwZW50KSkKLQkJCW1zcy0+c3dhcCArPSBwdGVudF9zaXplOworCQkJbXNzLT5zd2FwICs9IFBBR0VfU0laRTsKIAkJZWxzZSBpZiAoaXNfbWlncmF0aW9uX2VudHJ5KHN3cGVudCkpCiAJCQlwYWdlID0gbWlncmF0aW9uX2VudHJ5X3RvX3BhZ2Uoc3dwZW50KTsKLQl9IGVsc2UgaWYgKHB0ZV9maWxlKHB0ZW50KSkgewotCQlpZiAocHRlX3RvX3Bnb2ZmKHB0ZW50KSAhPSBwZ29mZikKLQkJCW1zcy0+bm9ubGluZWFyICs9IHB0ZW50X3NpemU7CisJfSBlbHNlIGlmIChwdGVfZmlsZSgqcHRlKSkgeworCQlpZiAocHRlX3RvX3Bnb2ZmKCpwdGUpICE9IHBnb2ZmKQorCQkJbXNzLT5ub25saW5lYXIgKz0gUEFHRV9TSVpFOwogCX0KIAogCWlmICghcGFnZSkKIAkJcmV0dXJuOwogCi0JaWYgKFBhZ2VBbm9uKHBhZ2UpKQotCQltc3MtPmFub255bW91cyArPSBwdGVudF9zaXplOwotCiAJaWYgKHBhZ2UtPmluZGV4ICE9IHBnb2ZmKQotCQltc3MtPm5vbmxpbmVhciArPSBwdGVudF9zaXplOworCQltc3MtPm5vbmxpbmVhciArPSBQQUdFX1NJWkU7CiAKLQltc3MtPnJlc2lkZW50ICs9IHB0ZW50X3NpemU7Ci0JLyogQWNjdW11bGF0ZSB0aGUgc2l6ZSBpbiBwYWdlcyB0aGF0IGhhdmUgYmVlbiBhY2Nlc3NlZC4gKi8KLQlpZiAocHRlX3lvdW5nKHB0ZW50KSB8fCBQYWdlUmVmZXJlbmNlZChwYWdlKSkKLQkJbXNzLT5yZWZlcmVuY2VkICs9IHB0ZW50X3NpemU7Ci0JbWFwY291bnQgPSBwYWdlX21hcGNvdW50KHBhZ2UpOwotCWlmIChtYXBjb3VudCA+PSAyKSB7Ci0JCWlmIChwdGVfZGlydHkocHRlbnQpIHx8IFBhZ2VEaXJ0eShwYWdlKSkKLQkJCW1zcy0+c2hhcmVkX2RpcnR5ICs9IHB0ZW50X3NpemU7Ci0JCWVsc2UKLQkJCW1zcy0+c2hhcmVkX2NsZWFuICs9IHB0ZW50X3NpemU7Ci0JCW1zcy0+cHNzICs9IChwdGVudF9zaXplIDw8IFBTU19TSElGVCkgLyBtYXBjb3VudDsKLQl9IGVsc2UgewotCQlpZiAocHRlX2RpcnR5KHB0ZW50KSB8fCBQYWdlRGlydHkocGFnZSkpCi0JCQltc3MtPnByaXZhdGVfZGlydHkgKz0gcHRlbnRfc2l6ZTsKLQkJZWxzZQotCQkJbXNzLT5wcml2YXRlX2NsZWFuICs9IHB0ZW50X3NpemU7Ci0JCW1zcy0+cHNzICs9IChwdGVudF9zaXplIDw8IFBTU19TSElGVCk7Ci0JfQorCXNtYXBzX2FjY291bnQobXNzLCBwYWdlLCBQQUdFX1NJWkUsIHB0ZV95b3VuZygqcHRlKSwgcHRlX2RpcnR5KCpwdGUpKTsKIH0KIAorI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQorc3RhdGljIHZvaWQgc21hcHNfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJc3RydWN0IG1tX3dhbGsgKndhbGspCit7CisJc3RydWN0IG1lbV9zaXplX3N0YXRzICptc3MgPSB3YWxrLT5wcml2YXRlOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbXNzLT52bWE7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwkvKiBGT0xMX0RVTVAgd2lsbCByZXR1cm4gLUVGQVVMVCBvbiBodWdlIHplcm8gcGFnZSAqLworCXBhZ2UgPSBmb2xsb3dfdHJhbnNfaHVnZV9wbWQodm1hLCBhZGRyLCBwbWQsIEZPTExfRFVNUCk7CisJaWYgKElTX0VSUl9PUl9OVUxMKHBhZ2UpKQorCQlyZXR1cm47CisJbXNzLT5hbm9ueW1vdXNfdGhwICs9IEhQQUdFX1BNRF9TSVpFOworCXNtYXBzX2FjY291bnQobXNzLCBwYWdlLCBIUEFHRV9QTURfU0laRSwKKwkJCXBtZF95b3VuZygqcG1kKSwgcG1kX2RpcnR5KCpwbWQpKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBzbWFwc19wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQlzdHJ1Y3QgbW1fd2FsayAqd2FsaykKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHNtYXBzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJICAgc3RydWN0IG1tX3dhbGsgKndhbGspCiB7CkBAIC01MDksOSArNTQyLDggQEAKIAlzcGlubG9ja190ICpwdGw7CiAKIAlpZiAocG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSwgJnB0bCkgPT0gMSkgewotCQlzbWFwc19wdGVfZW50cnkoKihwdGVfdCAqKXBtZCwgYWRkciwgSFBBR0VfUE1EX1NJWkUsIHdhbGspOworCQlzbWFwc19wbWRfZW50cnkocG1kLCBhZGRyLCB3YWxrKTsKIAkJc3Bpbl91bmxvY2socHRsKTsKLQkJbXNzLT5hbm9ueW1vdXNfdGhwICs9IEhQQUdFX1BNRF9TSVpFOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUyNCw3ICs1NTYsNyBAQAogCSAqLwogCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLT52bV9tbSwgcG1kLCBhZGRyLCAmcHRsKTsKIAlmb3IgKDsgYWRkciAhPSBlbmQ7IHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSkKLQkJc21hcHNfcHRlX2VudHJ5KCpwdGUsIGFkZHIsIFBBR0VfU0laRSwgd2Fsayk7CisJCXNtYXBzX3B0ZV9lbnRyeShwdGUsIGFkZHIsIHdhbGspOwogCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRsKTsKIAljb25kX3Jlc2NoZWQoKTsKIAlyZXR1cm4gMDsKQEAgLTU1Miw2ICs1ODQsOSBAQAogCQlbaWxvZzIoVk1fR1JPV1NET1dOKV0JPSAiZ2QiLAogCQlbaWxvZzIoVk1fUEZOTUFQKV0JPSAicGYiLAogCQlbaWxvZzIoVk1fREVOWVdSSVRFKV0JPSAiZHciLAorI2lmZGVmIENPTkZJR19YODZfSU5URUxfTVBYCisJCVtpbG9nMihWTV9NUFgpXQkJPSAibXAiLAorI2VuZGlmCiAJCVtpbG9nMihWTV9MT0NLRUQpXQk9ICJsbyIsCiAJCVtpbG9nMihWTV9JTyldCQk9ICJpbyIsCiAJCVtpbG9nMihWTV9TRVFfUkVBRCldCT0gInNyIiwKZGlmZiAtLWdpdCBhL2ZzL3BzdG9yZS9pbm9kZS5jIGIvZnMvcHN0b3JlL2lub2RlLmMKaW5kZXggZmFmYjdhMC4uNTA0MTY2MCAxMDA2NDQKLS0tIGEvZnMvcHN0b3JlL2lub2RlLmMKKysrIGIvZnMvcHN0b3JlL2lub2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzbG9nLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCkBAIC0xMjAsNiArMTIxLDE4IEBACiAJLnNob3cJPSBwc3RvcmVfZnRyYWNlX3NlcV9zaG93LAogfTsKIAorc3RhdGljIGludCBwc3RvcmVfY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKHN0cnVjdCBwc3RvcmVfcHJpdmF0ZSAqcHMpCit7CisJc3dpdGNoIChwcy0+dHlwZSkgeworCWNhc2UgUFNUT1JFX1RZUEVfRE1FU0c6CisJY2FzZSBQU1RPUkVfVFlQRV9DT05TT0xFOgorCQlyZXR1cm4gY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKFNZU0xPR19BQ1RJT05fUkVBRF9BTEwsCisJCQlTWVNMT0dfRlJPTV9SRUFERVIpOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKwogc3RhdGljIHNzaXplX3QgcHN0b3JlX2ZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTEzOCw2ICsxNTEsMTAgQEAKIAlpbnQgZXJyOwogCWNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyAqc29wcyA9IE5VTEw7CiAKKwllcnIgPSBwc3RvcmVfY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKHBzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJaWYgKHBzLT50eXBlID09IFBTVE9SRV9UWVBFX0ZUUkFDRSkKIAkJc29wcyA9ICZwc3RvcmVfZnRyYWNlX3NlcV9vcHM7CiAKQEAgLTE3NCw2ICsxOTEsMTEgQEAKIHN0YXRpYyBpbnQgcHN0b3JlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBwc3RvcmVfcHJpdmF0ZSAqcCA9IGRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOworCWludCBlcnI7CisKKwllcnIgPSBwc3RvcmVfY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKHApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlpZiAocC0+cHNpLT5lcmFzZSkKIAkJcC0+cHNpLT5lcmFzZShwLT50eXBlLCBwLT5pZCwgcC0+Y291bnQsCmRpZmYgLS1naXQgYS9mcy9wc3RvcmUvcmFtLmMgYi9mcy9wc3RvcmUvcmFtLmMKaW5kZXggM2I1NzQ0My4uZWM4ODFiMyAxMDA2NDQKLS0tIGEvZnMvcHN0b3JlL3JhbS5jCisrKyBiL2ZzL3BzdG9yZS9yYW0uYwpAQCAtMTM1LDI1ICsxMzUsMjcgQEAKIAlyZXR1cm4gcHJ6OwogfQogCi1zdGF0aWMgdm9pZCByYW1vb3BzX3JlYWRfa21zZ19oZHIoY2hhciAqYnVmZmVyLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWUsCitzdGF0aWMgaW50IHJhbW9vcHNfcmVhZF9rbXNnX2hkcihjaGFyICpidWZmZXIsIHN0cnVjdCB0aW1lc3BlYyAqdGltZSwKIAkJCQkgIGJvb2wgKmNvbXByZXNzZWQpCiB7CiAJY2hhciBkYXRhX3R5cGU7CisJaW50IGhlYWRlcl9sZW5ndGggPSAwOwogCi0JaWYgKHNzY2FuZihidWZmZXIsIFJBTU9PUFNfS0VSTk1TR19IRFIgIiVsdS4lbHUtJWNcbiIsCi0JCQkmdGltZS0+dHZfc2VjLCAmdGltZS0+dHZfbnNlYywgJmRhdGFfdHlwZSkgPT0gMykgeworCWlmIChzc2NhbmYoYnVmZmVyLCBSQU1PT1BTX0tFUk5NU0dfSERSICIlbHUuJWx1LSVjXG4lbiIsICZ0aW1lLT50dl9zZWMsCisJCQkmdGltZS0+dHZfbnNlYywgJmRhdGFfdHlwZSwgJmhlYWRlcl9sZW5ndGgpID09IDMpIHsKIAkJaWYgKGRhdGFfdHlwZSA9PSAnQycpCiAJCQkqY29tcHJlc3NlZCA9IHRydWU7CiAJCWVsc2UKIAkJCSpjb21wcmVzc2VkID0gZmFsc2U7Ci0JfSBlbHNlIGlmIChzc2NhbmYoYnVmZmVyLCBSQU1PT1BTX0tFUk5NU0dfSERSICIlbHUuJWx1XG4iLAotCQkJJnRpbWUtPnR2X3NlYywgJnRpbWUtPnR2X25zZWMpID09IDIpIHsKKwl9IGVsc2UgaWYgKHNzY2FuZihidWZmZXIsIFJBTU9PUFNfS0VSTk1TR19IRFIgIiVsdS4lbHVcbiVuIiwKKwkJCSZ0aW1lLT50dl9zZWMsICZ0aW1lLT50dl9uc2VjLCAmaGVhZGVyX2xlbmd0aCkgPT0gMikgewogCQkJKmNvbXByZXNzZWQgPSBmYWxzZTsKIAl9IGVsc2UgewogCQl0aW1lLT50dl9zZWMgPSAwOwogCQl0aW1lLT50dl9uc2VjID0gMDsKIAkJKmNvbXByZXNzZWQgPSBmYWxzZTsKIAl9CisJcmV0dXJuIGhlYWRlcl9sZW5ndGg7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJhbW9vcHNfcHN0b3JlX3JlYWQodTY0ICppZCwgZW51bSBwc3RvcmVfdHlwZV9pZCAqdHlwZSwKQEAgLTE2NSw2ICsxNjcsNyBAQAogCXNzaXplX3QgZWNjX25vdGljZV9zaXplOwogCXN0cnVjdCByYW1vb3BzX2NvbnRleHQgKmN4dCA9IHBzaS0+ZGF0YTsKIAlzdHJ1Y3QgcGVyc2lzdGVudF9yYW1fem9uZSAqcHJ6OworCWludCBoZWFkZXJfbGVuZ3RoOwogCiAJcHJ6ID0gcmFtb29wc19nZXRfbmV4dF9wcnooY3h0LT5wcnpzLCAmY3h0LT5kdW1wX3JlYWRfY250LAogCQkJCSAgIGN4dC0+bWF4X2R1bXBfY250LCBpZCwgdHlwZSwKQEAgLTE3OCw3ICsxODEsMTMgQEAKIAlpZiAoIXByeikKIAkJcmV0dXJuIDA7CiAKKwlpZiAoIXBlcnNpc3RlbnRfcmFtX29sZChwcnopKQorCQlyZXR1cm4gMDsKKwogCXNpemUgPSBwZXJzaXN0ZW50X3JhbV9vbGRfc2l6ZShwcnopOworCWhlYWRlcl9sZW5ndGggPSByYW1vb3BzX3JlYWRfa21zZ19oZHIocGVyc2lzdGVudF9yYW1fb2xkKHByeiksIHRpbWUsCisJCQljb21wcmVzc2VkKTsKKwlzaXplIC09IGhlYWRlcl9sZW5ndGg7CiAKIAkvKiBFQ0MgY29ycmVjdGlvbiBub3RpY2UgKi8KIAllY2Nfbm90aWNlX3NpemUgPSBwZXJzaXN0ZW50X3JhbV9lY2Nfc3RyaW5nKHByeiwgTlVMTCwgMCk7CkBAIC0xODcsOCArMTk2LDcgQEAKIAlpZiAoKmJ1ZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbWNweSgqYnVmLCBwZXJzaXN0ZW50X3JhbV9vbGQocHJ6KSwgc2l6ZSk7Ci0JcmFtb29wc19yZWFkX2ttc2dfaGRyKCpidWYsIHRpbWUsIGNvbXByZXNzZWQpOworCW1lbWNweSgqYnVmLCAoY2hhciAqKXBlcnNpc3RlbnRfcmFtX29sZChwcnopICsgaGVhZGVyX2xlbmd0aCwgc2l6ZSk7CiAJcGVyc2lzdGVudF9yYW1fZWNjX3N0cmluZyhwcnosICpidWYgKyBzaXplLCBlY2Nfbm90aWNlX3NpemUgKyAxKTsKIAogCXJldHVybiBzaXplICsgZWNjX25vdGljZV9zaXplOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggNmI0NTI3Mi4uOGYwYWNlZiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvZHF1b3QuYworKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC04OTMsNiArODkzLDExIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRxZ2V0KTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHF1b3QgKippX2RxdW90KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGlub2RlLT5pX3NiLT5zX29wLT5nZXRfZHF1b3RzKGlub2RlKTsKK30KKwogc3RhdGljIGludCBkcWluaXRfbmVlZGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQogewogCWludCBjbnQ7CkBAIC05MDAsOSArOTA1LDkgQEAKIAlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCiAJCXJldHVybiAwOwogCWlmICh0eXBlICE9IC0xKQotCQlyZXR1cm4gIWlub2RlLT5pX2RxdW90W3R5cGVdOworCQlyZXR1cm4gIWlfZHF1b3QoaW5vZGUpW3R5cGVdOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQlpZiAoIWlfZHF1b3QoaW5vZGUpW2NudF0pCiAJCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTk2NSw5ICs5NzAsOSBAQAogc3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX2RxdW90X3JlZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwKIAkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICp0b2ZyZWVfaGVhZCkKIHsKLQlzdHJ1Y3QgZHF1b3QgKmRxdW90ID0gaW5vZGUtPmlfZHF1b3RbdHlwZV07CisJc3RydWN0IGRxdW90ICpkcXVvdCA9IGlfZHF1b3QoaW5vZGUpW3R5cGVdOwogCi0JaW5vZGUtPmlfZHF1b3RbdHlwZV0gPSBOVUxMOworCWlfZHF1b3QoaW5vZGUpW3R5cGVdID0gTlVMTDsKIAlpZiAoIWRxdW90KQogCQlyZXR1cm47CiAKQEAgLTE0MDIsNyArMTQwNyw3IEBACiAJCSAqIHdlIGNoZWNrIGl0IHdpdGhvdXQgbG9ja2luZyBoZXJlIHRvIGF2b2lkIHVubmVjZXNzYXJ5CiAJCSAqIGRxZ2V0KCkvZHFwdXQoKSBjYWxscy4KIAkJICovCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQlpZiAoaV9kcXVvdChpbm9kZSlbY250XSkKIAkJCWNvbnRpbnVlOwogCQlpbml0X25lZWRlZCA9IDE7CiAKQEAgLTE0MzMsOCArMTQzOCw4IEBACiAJCS8qIFdlIGNvdWxkIHJhY2Ugd2l0aCBxdW90YW9uIG9yIGRxZ2V0KCkgY291bGQgaGF2ZSBmYWlsZWQgKi8KIAkJaWYgKCFnb3RbY250XSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pIHsKLQkJCWlub2RlLT5pX2RxdW90W2NudF0gPSBnb3RbY250XTsKKwkJaWYgKCFpX2RxdW90KGlub2RlKVtjbnRdKSB7CisJCQlpX2RxdW90KGlub2RlKVtjbnRdID0gZ290W2NudF07CiAJCQlnb3RbY250XSA9IE5VTEw7CiAJCQkvKgogCQkJICogTWFrZSBxdW90YSByZXNlcnZhdGlvbiBzeXN0ZW0gaGFwcHkgaWYgc29tZW9uZQpAQCAtMTQ0Miw3ICsxNDQ3LDcgQEAKIAkJCSAqLwogCQkJcnN2ID0gaW5vZGVfZ2V0X3Jzdl9zcGFjZShpbm9kZSk7CiAJCQlpZiAodW5saWtlbHkocnN2KSkKLQkJCQlkcXVvdF9yZXN2X3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIHJzdik7CisJCQkJZHF1b3RfcmVzdl9zcGFjZShpX2RxdW90KGlub2RlKVtjbnRdLCByc3YpOwogCQl9CiAJfQogb3V0X2VycjoKQEAgLTE0NzIsOCArMTQ3Nyw4IEBACiAKIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CiAJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCXB1dFtjbnRdID0gaW5vZGUtPmlfZHF1b3RbY250XTsKLQkJaW5vZGUtPmlfZHF1b3RbY250XSA9IE5VTEw7CisJCXB1dFtjbnRdID0gaV9kcXVvdChpbm9kZSlbY250XTsKKwkJaV9kcXVvdChpbm9kZSlbY250XSA9IE5VTEw7CiAJfQogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwogCWRxcHV0X2FsbChwdXQpOwpAQCAtMTQ5NCw3ICsxNDk5LDcgQEAKIAkgKiBhZGQgcXVvdGEgcG9pbnRlcnMgYmFjayBhbnl3YXkuCiAJICovCiAJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQlpZiAoaV9kcXVvdChpbm9kZSlbY250XSkKIAkJCWJyZWFrOwogCX0KIApAQCAtMTU5NSw3ICsxNjAwLDcgQEAKIHsKIAlpbnQgY250LCByZXQgPSAwLCBpbmRleDsKIAlzdHJ1Y3QgZHF1b3Rfd2FybiB3YXJuW01BWFFVT1RBU107Ci0Jc3RydWN0IGRxdW90ICoqZHF1b3RzID0gaW5vZGUtPmlfZHF1b3Q7CisJc3RydWN0IGRxdW90ICoqZHF1b3RzID0gaV9kcXVvdChpbm9kZSk7CiAJaW50IHJlc2VydmUgPSBmbGFncyAmIERRVU9UX1NQQUNFX1JFU0VSVkU7CiAKIAlpZiAoIWRxdW90X2FjdGl2ZShpbm9kZSkpIHsKQEAgLTE2NDMsMTEgKzE2NDgsMTEgQEAKIC8qCiAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAogICovCi1pbnQgZHF1b3RfYWxsb2NfaW5vZGUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKK2ludCBkcXVvdF9hbGxvY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWludCBjbnQsIHJldCA9IDAsIGluZGV4OwogCXN0cnVjdCBkcXVvdF93YXJuIHdhcm5bTUFYUVVPVEFTXTsKLQlzdHJ1Y3QgZHF1b3QgKiBjb25zdCAqZHF1b3RzID0gaW5vZGUtPmlfZHF1b3Q7CisJc3RydWN0IGRxdW90ICogY29uc3QgKmRxdW90cyA9IGlfZHF1b3QoaW5vZGUpOwogCiAJaWYgKCFkcXVvdF9hY3RpdmUoaW5vZGUpKQogCQlyZXR1cm4gMDsKQEAgLTE2OTYsMTQgKzE3MDEsMTQgQEAKIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CiAJLyogQ2xhaW0gcmVzZXJ2ZWQgcXVvdGFzIHRvIGFsbG9jYXRlZCBxdW90YXMgKi8KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQlkcXVvdF9jbGFpbV9yZXNlcnZlZF9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLAorCQlpZiAoaV9kcXVvdChpbm9kZSlbY250XSkKKwkJCWRxdW90X2NsYWltX3Jlc2VydmVkX3NwYWNlKGlfZHF1b3QoaW5vZGUpW2NudF0sCiAJCQkJCQkJbnVtYmVyKTsKIAl9CiAJLyogVXBkYXRlIGlub2RlIGJ5dGVzICovCiAJaW5vZGVfY2xhaW1fcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOwogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCW1hcmtfYWxsX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90KTsKKwltYXJrX2FsbF9kcXVvdF9kaXJ0eShpX2RxdW90KGlub2RlKSk7CiAJc3JjdV9yZWFkX3VubG9jaygmZHF1b3Rfc3JjdSwgaW5kZXgpOwogCXJldHVybiAwOwogfQpAQCAtMTcyNSwxNCArMTczMCwxNCBAQAogCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKIAkvKiBDbGFpbSByZXNlcnZlZCBxdW90YXMgdG8gYWxsb2NhdGVkIHF1b3RhcyAqLwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCWRxdW90X3JlY2xhaW1fcmVzZXJ2ZWRfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwKKwkJaWYgKGlfZHF1b3QoaW5vZGUpW2NudF0pCisJCQlkcXVvdF9yZWNsYWltX3Jlc2VydmVkX3NwYWNlKGlfZHF1b3QoaW5vZGUpW2NudF0sCiAJCQkJCQkgICAgIG51bWJlcik7CiAJfQogCS8qIFVwZGF0ZSBpbm9kZSBieXRlcyAqLwogCWlub2RlX3JlY2xhaW1fcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOwogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCW1hcmtfYWxsX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90KTsKKwltYXJrX2FsbF9kcXVvdF9kaXJ0eShpX2RxdW90KGlub2RlKSk7CiAJc3JjdV9yZWFkX3VubG9jaygmZHF1b3Rfc3JjdSwgaW5kZXgpOwogCXJldHVybjsKIH0KQEAgLTE3NDUsNyArMTc1MCw3IEBACiB7CiAJdW5zaWduZWQgaW50IGNudDsKIAlzdHJ1Y3QgZHF1b3Rfd2FybiB3YXJuW01BWFFVT1RBU107Ci0Jc3RydWN0IGRxdW90ICoqZHF1b3RzID0gaW5vZGUtPmlfZHF1b3Q7CisJc3RydWN0IGRxdW90ICoqZHF1b3RzID0gaV9kcXVvdChpbm9kZSk7CiAJaW50IHJlc2VydmUgPSBmbGFncyAmIERRVU9UX1NQQUNFX1JFU0VSVkUsIGluZGV4OwogCiAJaWYgKCFkcXVvdF9hY3RpdmUoaW5vZGUpKSB7CkBAIC0xNzg0LDExICsxNzg5LDExIEBACiAvKgogICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKICAqLwotdm9pZCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIGRxdW90X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl1bnNpZ25lZCBpbnQgY250OwogCXN0cnVjdCBkcXVvdF93YXJuIHdhcm5bTUFYUVVPVEFTXTsKLQlzdHJ1Y3QgZHF1b3QgKiBjb25zdCAqZHF1b3RzID0gaW5vZGUtPmlfZHF1b3Q7CisJc3RydWN0IGRxdW90ICogY29uc3QgKmRxdW90cyA9IGlfZHF1b3QoaW5vZGUpOwogCWludCBpbmRleDsKIAogCWlmICghZHF1b3RfYWN0aXZlKGlub2RlKSkKQEAgLTE4NjUsNyArMTg3MCw3IEBACiAJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYiwgY250KSkKIAkJCWNvbnRpbnVlOwogCQlpc192YWxpZFtjbnRdID0gMTsKLQkJdHJhbnNmZXJfZnJvbVtjbnRdID0gaW5vZGUtPmlfZHF1b3RbY250XTsKKwkJdHJhbnNmZXJfZnJvbVtjbnRdID0gaV9kcXVvdChpbm9kZSlbY250XTsKIAkJcmV0ID0gY2hlY2tfaWRxKHRyYW5zZmVyX3RvW2NudF0sIDEsICZ3YXJuX3RvW2NudF0pOwogCQlpZiAocmV0KQogCQkJZ290byBvdmVyX3F1b3RhOwpAQCAtMTkwMSw3ICsxOTA2LDcgQEAKIAkJZHF1b3RfaW5jcl9zcGFjZSh0cmFuc2Zlcl90b1tjbnRdLCBjdXJfc3BhY2UpOwogCQlkcXVvdF9yZXN2X3NwYWNlKHRyYW5zZmVyX3RvW2NudF0sIHJzdl9zcGFjZSk7CiAKLQkJaW5vZGUtPmlfZHF1b3RbY250XSA9IHRyYW5zZmVyX3RvW2NudF07CisJCWlfZHF1b3QoaW5vZGUpW2NudF0gPSB0cmFuc2Zlcl90b1tjbnRdOwogCX0KIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIApAQCAtMjc0Myw4ICsyNzQ4LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaGFzaDsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQoZHF1b3RfaGFzaCArIGkpOwogCi0JcHJpbnRrKCJEcXVvdC1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6ICVsZCAob3JkZXIgJWxkLCAlbGQgYnl0ZXMpXG4iLAotCQkJbnJfaGFzaCwgb3JkZXIsIChQQUdFX1NJWkUgPDwgb3JkZXIpKTsKKwlwcl9pbmZvKCJWRlM6IERxdW90LWNhY2hlIGhhc2ggdGFibGUgZW50cmllczogJWxkIChvcmRlciAlbGQsIgorCQkiICVsZCBieXRlcylcbiIsIG5yX2hhc2gsIG9yZGVyLCAoUEFHRV9TSVpFIDw8IG9yZGVyKSk7CiAKIAlyZWdpc3Rlcl9zaHJpbmtlcigmZHFjYWNoZV9zaHJpbmtlcik7CiAKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhLmMgYi9mcy9xdW90YS9xdW90YS5jCmluZGV4IDc1NjIxNjQuLjJhYTQxNTEgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL3F1b3RhLmMKKysrIGIvZnMvcXVvdGEvcXVvdGEuYwpAQCAtNDcsOCArNDcsMTEgQEAKIAogc3RhdGljIHZvaWQgcXVvdGFfc3luY19vbmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqYXJnKQogewotCWlmIChzYi0+c19xY29wICYmIHNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMpCi0JCXNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMoc2IsICooaW50ICopYXJnKTsKKwlpbnQgdHlwZSA9ICooaW50ICopYXJnOworCisJaWYgKHNiLT5zX3Fjb3AgJiYgc2ItPnNfcWNvcC0+cXVvdGFfc3luYyAmJgorCSAgICAoc2ItPnNfcXVvdGFfdHlwZXMgJiAoMSA8PCB0eXBlKSkpCisJCXNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMoc2IsIHR5cGUpOwogfQogCiBzdGF0aWMgaW50IHF1b3RhX3N5bmNfYWxsKGludCB0eXBlKQpAQCAtMjk3LDggKzMwMCwxNCBAQAogCiAJaWYgKHR5cGUgPj0gKFhRTV9DT01NQU5EKGNtZCkgPyBYUU1fTUFYUVVPVEFTIDogTUFYUVVPVEFTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJLyoKKwkgKiBRdW90YSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZnM/IENoZWNrIHRoaXMgYmVmb3JlIHNfcXVvdGFfdHlwZXMKKwkgKiBzaW5jZSB0aGV5IG5lZWRuJ3QgYmUgc2V0IGlmIHF1b3RhIGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLgorCSAqLwogCWlmICghc2ItPnNfcWNvcCkKIAkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKCEoc2ItPnNfcXVvdGFfdHlwZXMgJiAoMSA8PCB0eXBlKSkpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gY2hlY2tfcXVvdGFjdGxfcGVybWlzc2lvbihzYiwgdHlwZSwgY21kLCBpZCk7CiAJaWYgKHJldCA8IDApCmRpZmYgLS1naXQgYS9mcy9yZWFkZGlyLmMgYi9mcy9yZWFkZGlyLmMKaW5kZXggMzNmZDkyMi4uY2VkNjc5MSAxMDA2NDQKLS0tIGEvZnMvcmVhZGRpci5jCisrKyBiL2ZzL3JlYWRkaXIuYwpAQCAtNzQsMTAgKzc0LDExIEBACiAJaW50IHJlc3VsdDsKIH07CiAKLXN0YXRpYyBpbnQgZmlsbG9uZWRpcih2b2lkICogX19idWYsIGNvbnN0IGNoYXIgKiBuYW1lLCBpbnQgbmFtbGVuLCBsb2ZmX3Qgb2Zmc2V0LAotCQkgICAgICB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQorc3RhdGljIGludCBmaWxsb25lZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtbGVuLAorCQkgICAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQogewotCXN0cnVjdCByZWFkZGlyX2NhbGxiYWNrICpidWYgPSAoc3RydWN0IHJlYWRkaXJfY2FsbGJhY2sgKikgX19idWY7CisJc3RydWN0IHJlYWRkaXJfY2FsbGJhY2sgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCByZWFkZGlyX2NhbGxiYWNrLCBjdHgpOwogCXN0cnVjdCBvbGRfbGludXhfZGlyZW50IF9fdXNlciAqIGRpcmVudDsKIAl1bnNpZ25lZCBsb25nIGRfaW5vOwogCkBAIC0xNDgsMTEgKzE0OSwxMiBAQAogCWludCBlcnJvcjsKIH07CiAKLXN0YXRpYyBpbnQgZmlsbGRpcih2b2lkICogX19idWYsIGNvbnN0IGNoYXIgKiBuYW1lLCBpbnQgbmFtbGVuLCBsb2ZmX3Qgb2Zmc2V0LAotCQkgICB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQorc3RhdGljIGludCBmaWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtbGVuLAorCQkgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQogewogCXN0cnVjdCBsaW51eF9kaXJlbnQgX191c2VyICogZGlyZW50OwotCXN0cnVjdCBnZXRkZW50c19jYWxsYmFjayAqIGJ1ZiA9IChzdHJ1Y3QgZ2V0ZGVudHNfY2FsbGJhY2sgKikgX19idWY7CisJc3RydWN0IGdldGRlbnRzX2NhbGxiYWNrICpidWYgPQorCQljb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgZ2V0ZGVudHNfY2FsbGJhY2ssIGN0eCk7CiAJdW5zaWduZWQgbG9uZyBkX2lubzsKIAlpbnQgcmVjbGVuID0gQUxJR04ob2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2RpcmVudCwgZF9uYW1lKSArIG5hbWxlbiArIDIsCiAJCXNpemVvZihsb25nKSk7CkBAIC0yMzIsMTEgKzIzNCwxMiBAQAogCWludCBlcnJvcjsKIH07CiAKLXN0YXRpYyBpbnQgZmlsbGRpcjY0KHZvaWQgKiBfX2J1ZiwgY29uc3QgY2hhciAqIG5hbWUsIGludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsCi0JCSAgICAgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKK3N0YXRpYyBpbnQgZmlsbGRpcjY0KHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtbGVuLAorCQkgICAgIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCiB7CiAJc3RydWN0IGxpbnV4X2RpcmVudDY0IF9fdXNlciAqZGlyZW50OwotCXN0cnVjdCBnZXRkZW50c19jYWxsYmFjazY0ICogYnVmID0gKHN0cnVjdCBnZXRkZW50c19jYWxsYmFjazY0ICopIF9fYnVmOworCXN0cnVjdCBnZXRkZW50c19jYWxsYmFjazY0ICpidWYgPQorCQljb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgZ2V0ZGVudHNfY2FsbGJhY2s2NCwgY3R4KTsKIAlpbnQgcmVjbGVuID0gQUxJR04ob2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2RpcmVudDY0LCBkX25hbWUpICsgbmFtbGVuICsgMSwKIAkJc2l6ZW9mKHU2NCkpOwogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9yZWlzZXJmcy5oIGIvZnMvcmVpc2VyZnMvcmVpc2VyZnMuaAppbmRleCAxODk0ZDk2Li5iYjc5Y2RkIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9yZWlzZXJmcy5oCisrKyBiL2ZzL3JlaXNlcmZzL3JlaXNlcmZzLmgKQEAgLTk3LDYgKzk3LDEwIEBACiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBpX3hhdHRyX3NlbTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19RVU9UQQorCXN0cnVjdCBkcXVvdCAqaV9kcXVvdFtNQVhRVU9UQVNdOworI2VuZGlmCisKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3VwZXIuYyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKaW5kZXggZjEzNzZjOS4uZWE2M2FiMSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvc3VwZXIuYworKysgYi9mcy9yZWlzZXJmcy9zdXBlci5jCkBAIC01OTQsNiArNTk0LDEwIEBACiAJCXJldHVybiBOVUxMOwogCWF0b21pY19zZXQoJmVpLT5vcGVuZXJzLCAwKTsKIAltdXRleF9pbml0KCZlaS0+dGFpbHBhY2spOworI2lmZGVmIENPTkZJR19RVU9UQQorCW1lbXNldCgmZWktPmlfZHF1b3QsIDAsIHNpemVvZihlaS0+aV9kcXVvdCkpOworI2VuZGlmCisKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKQEAgLTc1MCw2ICs3NTQsMTEgQEAKIAkJCQkgICAgc2l6ZV90LCBsb2ZmX3QpOwogc3RhdGljIHNzaXplX3QgcmVpc2VyZnNfcXVvdGFfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBjaGFyICosIHNpemVfdCwKIAkJCQkgICBsb2ZmX3QpOworCitzdGF0aWMgc3RydWN0IGRxdW90ICoqcmVpc2VyZnNfZ2V0X2RxdW90cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBSRUlTRVJGU19JKGlub2RlKS0+aV9kcXVvdDsKK30KICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgcmVpc2VyZnNfc29wcyA9IHsKQEAgLTc2OCw2ICs3NzcsNyBAQAogI2lmZGVmIENPTkZJR19RVU9UQQogCS5xdW90YV9yZWFkID0gcmVpc2VyZnNfcXVvdGFfcmVhZCwKIAkucXVvdGFfd3JpdGUgPSByZWlzZXJmc19xdW90YV93cml0ZSwKKwkuZ2V0X2RxdW90cyA9IHJlaXNlcmZzX2dldF9kcXVvdHMsCiAjZW5kaWYKIH07CiAKQEAgLTE2MzMsNiArMTY0Myw3IEBACiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJcy0+c19xY29wID0gJnJlaXNlcmZzX3FjdGxfb3BlcmF0aW9uczsKIAlzLT5kcV9vcCA9ICZyZWlzZXJmc19xdW90YV9vcGVyYXRpb25zOworCXMtPnNfcXVvdGFfdHlwZXMgPSBRVFlQRV9NQVNLX1VTUiB8IFFUWVBFX01BU0tfR1JQOwogI2VuZGlmCiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHIuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyLmMKaW5kZXggN2MzNjg5OC4uMDRiMDYxNCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHIuYworKysgYi9mcy9yZWlzZXJmcy94YXR0ci5jCkBAIC0xODgsMTAgKzE4OCwxMSBAQAogfTsKIAogc3RhdGljIGludAotZmlsbF93aXRoX2RlbnRyaWVzKHZvaWQgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGxvZmZfdCBvZmZzZXQsCi0JCSAgICB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQorZmlsbF93aXRoX2RlbnRyaWVzKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJICAgbG9mZl90IG9mZnNldCwgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfZGVudHJ5X2J1ZiAqZGJ1ZiA9IGJ1ZjsKKwlzdHJ1Y3QgcmVpc2VyZnNfZGVudHJ5X2J1ZiAqZGJ1ZiA9CisJCWNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCByZWlzZXJmc19kZW50cnlfYnVmLCBjdHgpOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAogCVdBUk5fT05fT05DRSghbXV0ZXhfaXNfbG9ja2VkKCZkYnVmLT54YWRpci0+ZF9pbm9kZS0+aV9tdXRleCkpOwpAQCAtMjA5LDkgKzIxMCw5IEBACiAJfSBlbHNlIGlmICghZGVudHJ5LT5kX2lub2RlKSB7CiAJCS8qIEEgZGlyZWN0b3J5IGVudHJ5IGV4aXN0cywgYnV0IG5vIGZpbGU/ICovCiAJCXJlaXNlcmZzX2Vycm9yKGRlbnRyeS0+ZF9zYiwgInhhdHRyLTIwMDAzIiwKLQkJCSAgICAgICAiQ29ycnVwdGVkIGRpcmVjdG9yeTogeGF0dHIgJXMgbGlzdGVkIGJ1dCAiCi0JCQkgICAgICAgIm5vdCBmb3VuZCBmb3IgZmlsZSAlcy5cbiIsCi0JCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGJ1Zi0+eGFkaXItPmRfbmFtZS5uYW1lKTsKKwkJCSAgICAgICAiQ29ycnVwdGVkIGRpcmVjdG9yeTogeGF0dHIgJXBkIGxpc3RlZCBidXQgIgorCQkJICAgICAgICJub3QgZm91bmQgZm9yIGZpbGUgJXBkLlxuIiwKKwkJCSAgICAgICBkZW50cnksIGRidWYtPnhhZGlyKTsKIAkJZHB1dChkZW50cnkpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC04MjQsMTAgKzgyNSwxMiBAQAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIH07CiAKLXN0YXRpYyBpbnQgbGlzdHhhdHRyX2ZpbGxlcih2b2lkICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkJICAgIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCitzdGF0aWMgaW50IGxpc3R4YXR0cl9maWxsZXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgaW50IG5hbWVsZW4sIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sCisJCQkgICAgdW5zaWduZWQgaW50IGRfdHlwZSkKIHsKLQlzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiAqYiA9IChzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiAqKWJ1ZjsKKwlzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiAqYiA9CisJCWNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBsaXN0eGF0dHJfYnVmLCBjdHgpOwogCXNpemVfdCBzaXplOwogCiAJaWYgKG5hbWVbMF0gIT0gJy4nIHx8CmRpZmYgLS1naXQgYS9mcy9zZXFfZmlsZS5jIGIvZnMvc2VxX2ZpbGUuYwppbmRleCAzODU3YjcyLi4zNTM5NDhiIDEwMDY0NAotLS0gYS9mcy9zZXFfZmlsZS5jCisrKyBiL2ZzL3NlcV9maWxlLmMKQEAgLTE2LDE3ICsxNiw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCi0KLS8qCi0gKiBzZXFfZmlsZXMgaGF2ZSBhIGJ1ZmZlciB3aGljaCBjYW4gbWF5IG92ZXJmbG93LiBXaGVuIHRoaXMgaGFwcGVucyBhIGxhcmdlcgotICogYnVmZmVyIGlzIHJlYWxsb2NhdGVkIGFuZCBhbGwgdGhlIGRhdGEgd2lsbCBiZSBwcmludGVkIGFnYWluLgotICogVGhlIG92ZXJmbG93IHN0YXRlIGlzIHRydWUgd2hlbiBtLT5jb3VudCA9PSBtLT5zaXplLgotICovCi1zdGF0aWMgYm9vbCBzZXFfb3ZlcmZsb3coc3RydWN0IHNlcV9maWxlICptKQotewotCXJldHVybiBtLT5jb3VudCA9PSBtLT5zaXplOwotfQotCiBzdGF0aWMgdm9pZCBzZXFfc2V0X292ZXJmbG93KHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAltLT5jb3VudCA9IG0tPnNpemU7CkBAIC0xMjQsNyArMTEzLDcgQEAKIAkJCWVycm9yID0gMDsKIAkJCW0tPmNvdW50ID0gMDsKIAkJfQotCQlpZiAoc2VxX292ZXJmbG93KG0pKQorCQlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKG0pKQogCQkJZ290byBFb3ZlcmZsb3c7CiAJCWlmIChwb3MgKyBtLT5jb3VudCA+IG9mZnNldCkgewogCQkJbS0+ZnJvbSA9IG9mZnNldCAtIHBvczsKQEAgLTI2Nyw3ICsyNTYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJZXJyID0gbS0+b3AtPnNob3cobSwgcCk7Ci0JCWlmIChzZXFfb3ZlcmZsb3cobSkgfHwgZXJyKSB7CisJCWlmIChzZXFfaGFzX292ZXJmbG93ZWQobSkgfHwgZXJyKSB7CiAJCQltLT5jb3VudCA9IG9mZnM7CiAJCQlpZiAobGlrZWx5KGVyciA8PSAwKSkKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL3NpZ25hbGZkLmMgYi9mcy9zaWduYWxmZC5jCmluZGV4IDQyNGI3YjYuLjdlNDEyYWQgMTAwNjQ0Ci0tLSBhL2ZzL3NpZ25hbGZkLmMKKysrIGIvZnMvc2lnbmFsZmQuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludCBzaWduYWxmZF9zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKQorc3RhdGljIHZvaWQgc2lnbmFsZmRfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZikKIHsKIAlzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmLT5wcml2YXRlX2RhdGE7CiAJc2lnc2V0X3Qgc2lnbWFzazsKQEAgLTIzOCw4ICsyMzgsNiBAQAogCXNpZ21hc2sgPSBjdHgtPnNpZ21hc2s7CiAJc2lnbm90c2V0KCZzaWdtYXNrKTsKIAlyZW5kZXJfc2lnc2V0X3QobSwgInNpZ21hc2s6XHQiLCAmc2lnbWFzayk7Ci0KLQlyZXR1cm4gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9zeW5jLmMgYi9mcy9zeW5jLmMKaW5kZXggYmRjNzI5ZC4uMDFkOWYxOCAxMDA2NDQKLS0tIGEvZnMvc3luYy5jCisrKyBiL2ZzL3N5bmMuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKIAlpZiAoIWYuZmlsZSkKIAkJcmV0dXJuIC1FQkFERjsKLQlzYiA9IGYuZmlsZS0+Zl9kZW50cnktPmRfc2I7CisJc2IgPSBmLmZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2I7CiAKIAlkb3duX3JlYWQoJnNiLT5zX3Vtb3VudCk7CiAJcmV0ID0gc3luY19maWxlc3lzdGVtKHNiKTsKZGlmZiAtLWdpdCBhL2ZzL3RpbWVyZmQuYyBiL2ZzL3RpbWVyZmQuYwppbmRleCBiNDZmZmE5Li5iOTRmYTZjIDEwMDY0NAotLS0gYS9mcy90aW1lcmZkLmMKKysrIGIvZnMvdGltZXJmZC5jCkBAIC0yODgsNyArMjg4LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgaW50IHRpbWVyZmRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHZvaWQgdGltZXJmZF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHRpbWVyZmRfY3R4ICpjdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGl0aW1lcnNwZWMgdDsKQEAgLTI5OCwxOCArMjk4LDE5IEBACiAJdC5pdF9pbnRlcnZhbCA9IGt0aW1lX3RvX3RpbWVzcGVjKGN0eC0+dGludHYpOwogCXNwaW5fdW5sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CiAKLQlyZXR1cm4gc2VxX3ByaW50ZihtLAotCQkJICAiY2xvY2tpZDogJWRcbiIKLQkJCSAgInRpY2tzOiAlbGx1XG4iCi0JCQkgICJzZXR0aW1lIGZsYWdzOiAwJW9cbiIKLQkJCSAgIml0X3ZhbHVlOiAoJWxsdSwgJWxsdSlcbiIKLQkJCSAgIml0X2ludGVydmFsOiAoJWxsdSwgJWxsdSlcbiIsCi0JCQkgIGN0eC0+Y2xvY2tpZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyljdHgtPnRpY2tzLAotCQkJICBjdHgtPnNldHRpbWVfZmxhZ3MsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpdC5pdF92YWx1ZS50dl9zZWMsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpdC5pdF92YWx1ZS50dl9uc2VjLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKXQuaXRfaW50ZXJ2YWwudHZfc2VjLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKXQuaXRfaW50ZXJ2YWwudHZfbnNlYyk7CisJc2VxX3ByaW50ZihtLAorCQkgICAiY2xvY2tpZDogJWRcbiIKKwkJICAgInRpY2tzOiAlbGx1XG4iCisJCSAgICJzZXR0aW1lIGZsYWdzOiAwJW9cbiIKKwkJICAgIml0X3ZhbHVlOiAoJWxsdSwgJWxsdSlcbiIKKwkJICAgIml0X2ludGVydmFsOiAoJWxsdSwgJWxsdSlcbiIsCisJCSAgIGN0eC0+Y2xvY2tpZCwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljdHgtPnRpY2tzLAorCQkgICBjdHgtPnNldHRpbWVfZmxhZ3MsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpdC5pdF92YWx1ZS50dl9zZWMsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpdC5pdF92YWx1ZS50dl9uc2VjLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXQuaXRfaW50ZXJ2YWwudHZfc2VjLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXQuaXRfaW50ZXJ2YWwudHZfbnNlYyk7CiB9CiAjZWxzZQogI2RlZmluZSB0aW1lcmZkX3Nob3cgTlVMTApkaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuYwppbmRleCBlMjI5MzE1Li4zY2NiMmYxIDEwMDY0NAotLS0gYS9mcy91ZGYvc3VwZXIuYworKysgYi9mcy91ZGYvc3VwZXIuYwpAQCAtMjA4MiwxMiArMjA4MiwxMiBAQAogCW11dGV4X2luaXQoJnNiaS0+c19hbGxvY19tdXRleCk7CiAKIAlpZiAoIXVkZl9wYXJzZV9vcHRpb25zKChjaGFyICopb3B0aW9ucywgJnVvcHQsIGZhbHNlKSkKLQkJZ290byBlcnJvcl9vdXQ7CisJCWdvdG8gcGFyc2Vfb3B0aW9uc19mYWlsdXJlOwogCiAJaWYgKHVvcHQuZmxhZ3MgJiAoMSA8PCBVREZfRkxBR19VVEY4KSAmJgogCSAgICB1b3B0LmZsYWdzICYgKDEgPDwgVURGX0ZMQUdfTkxTX01BUCkpIHsKIAkJdWRmX2VycihzYiwgInV0ZjggY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggaW9jaGFyc2V0XG4iKTsKLQkJZ290byBlcnJvcl9vdXQ7CisJCWdvdG8gcGFyc2Vfb3B0aW9uc19mYWlsdXJlOwogCX0KICNpZmRlZiBDT05GSUdfVURGX05MUwogCWlmICgodW9wdC5mbGFncyAmICgxIDw8IFVERl9GTEFHX05MU19NQVApKSAmJiAhdW9wdC5ubHNfbWFwKSB7CkBAIC0yMjM3LDggKzIyMzcsOCBAQAogCXJldHVybiAwOwogCiBlcnJvcl9vdXQ6Ci0JaWYgKHNiaS0+c192YXRfaW5vZGUpCi0JCWlwdXQoc2JpLT5zX3ZhdF9pbm9kZSk7CisJaXB1dChzYmktPnNfdmF0X2lub2RlKTsKK3BhcnNlX29wdGlvbnNfZmFpbHVyZToKICNpZmRlZiBDT05GSUdfVURGX05MUwogCWlmIChVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfTkxTX01BUCkpCiAJCXVubG9hZF9ubHMoc2JpLT5zX25sc19tYXApOwpAQCAtMjI5MSw4ICsyMjkxLDcgQEAKIAogCXNiaSA9IFVERl9TQihzYik7CiAKLQlpZiAoc2JpLT5zX3ZhdF9pbm9kZSkKLQkJaXB1dChzYmktPnNfdmF0X2lub2RlKTsKKwlpcHV0KHNiaS0+c192YXRfaW5vZGUpOwogI2lmZGVmIENPTkZJR19VREZfTkxTCiAJaWYgKFVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19OTFNfTUFQKSkKIAkJdW5sb2FkX25scyhzYmktPnNfbmxzX21hcCk7CmRpZmYgLS1naXQgYS9mcy94YXR0ci5jIGIvZnMveGF0dHIuYwppbmRleCA2NGU4M2VmLi40ZWY2OTg1IDEwMDY0NAotLS0gYS9mcy94YXR0ci5jCisrKyBiL2ZzL3hhdHRyLmMKQEAgLTQwNSwxNiArNDA1LDE0IEBACiAJCWNvbnN0IHZvaWQgX191c2VyICosdmFsdWUsIHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncykKIHsKIAlzdHJ1Y3QgZmQgZiA9IGZkZ2V0KGZkKTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycm9yID0gLUVCQURGOwogCiAJaWYgKCFmLmZpbGUpCiAJCXJldHVybiBlcnJvcjsKLQlkZW50cnkgPSBmLmZpbGUtPmZfcGF0aC5kZW50cnk7Ci0JYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5LCAwKTsKKwlhdWRpdF9maWxlKGYuZmlsZSk7CiAJZXJyb3IgPSBtbnRfd2FudF93cml0ZV9maWxlKGYuZmlsZSk7CiAJaWYgKCFlcnJvcikgewotCQllcnJvciA9IHNldHhhdHRyKGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKKwkJZXJyb3IgPSBzZXR4YXR0cihmLmZpbGUtPmZfcGF0aC5kZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CiAJCW1udF9kcm9wX3dyaXRlX2ZpbGUoZi5maWxlKTsKIAl9CiAJZmRwdXQoZik7CkBAIC01MDksNyArNTA3LDcgQEAKIAogCWlmICghZi5maWxlKQogCQlyZXR1cm4gZXJyb3I7Ci0JYXVkaXRfaW5vZGUoTlVMTCwgZi5maWxlLT5mX3BhdGguZGVudHJ5LCAwKTsKKwlhdWRpdF9maWxlKGYuZmlsZSk7CiAJZXJyb3IgPSBnZXR4YXR0cihmLmZpbGUtPmZfcGF0aC5kZW50cnksIG5hbWUsIHZhbHVlLCBzaXplKTsKIAlmZHB1dChmKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC01OTAsNyArNTg4LDcgQEAKIAogCWlmICghZi5maWxlKQogCQlyZXR1cm4gZXJyb3I7Ci0JYXVkaXRfaW5vZGUoTlVMTCwgZi5maWxlLT5mX3BhdGguZGVudHJ5LCAwKTsKKwlhdWRpdF9maWxlKGYuZmlsZSk7CiAJZXJyb3IgPSBsaXN0eGF0dHIoZi5maWxlLT5mX3BhdGguZGVudHJ5LCBsaXN0LCBzaXplKTsKIAlmZHB1dChmKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC02NTEsMTYgKzY0OSwxNCBAQAogU1lTQ0FMTF9ERUZJTkUyKGZyZW1vdmV4YXR0ciwgaW50LCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSkKIHsKIAlzdHJ1Y3QgZmQgZiA9IGZkZ2V0KGZkKTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycm9yID0gLUVCQURGOwogCiAJaWYgKCFmLmZpbGUpCiAJCXJldHVybiBlcnJvcjsKLQlkZW50cnkgPSBmLmZpbGUtPmZfcGF0aC5kZW50cnk7Ci0JYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5LCAwKTsKKwlhdWRpdF9maWxlKGYuZmlsZSk7CiAJZXJyb3IgPSBtbnRfd2FudF93cml0ZV9maWxlKGYuZmlsZSk7CiAJaWYgKCFlcnJvcikgewotCQllcnJvciA9IHJlbW92ZXhhdHRyKGRlbnRyeSwgbmFtZSk7CisJCWVycm9yID0gcmVtb3ZleGF0dHIoZi5maWxlLT5mX3BhdGguZGVudHJ5LCBuYW1lKTsKIAkJbW50X2Ryb3Bfd3JpdGVfZmlsZShmLmZpbGUpOwogCX0KIAlmZHB1dChmKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuYwppbmRleCA5ZjYyMmZlLi4yMDZiOTdmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL3hmc19zdXBlci5jCkBAIC0xNDI1LDYgKzE0MjUsNyBAQAogCXNiLT5zX2V4cG9ydF9vcCA9ICZ4ZnNfZXhwb3J0X29wZXJhdGlvbnM7CiAjaWZkZWYgQ09ORklHX1hGU19RVU9UQQogCXNiLT5zX3Fjb3AgPSAmeGZzX3F1b3RhY3RsX29wZXJhdGlvbnM7CisJc2ItPnNfcXVvdGFfdHlwZXMgPSBRVFlQRV9NQVNLX1VTUiB8IFFUWVBFX01BU0tfR1JQIHwgUVRZUEVfTUFTS19QUko7CiAjZW5kaWYKIAlzYi0+c19vcCA9ICZ4ZnNfc3VwZXJfb3BlcmF0aW9uczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjYnVmZmVyLmggYi9pbmNsdWRlL2FjcGkvYWNidWZmZXIuaAppbmRleCA4OGNiNDc3Li5kNWVjNmM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNidWZmZXIuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNidWZmZXIuaApAQCAtMTExLDcgKzExMSw5IEBACiBzdHJ1Y3QgYWNwaV9wbGRfaW5mbyB7CiAJdTggcmV2aXNpb247CiAJdTggaWdub3JlX2NvbG9yOwotCXUzMiBjb2xvcjsKKwl1OCByZWQ7CisJdTggZ3JlZW47CisJdTggYmx1ZTsKIAl1MTYgd2lkdGg7CiAJdTE2IGhlaWdodDsKIAl1OCB1c2VyX3Zpc2libGU7CkBAIC0xNTUsOCArMTU3LDE0IEBACiAjZGVmaW5lIEFDUElfUExEX0dFVF9JR05PUkVfQ09MT1IoZHdvcmQpICAgICAgICBBQ1BJX0dFVF9CSVRTIChkd29yZCwgNywgQUNQSV8xQklUX01BU0spCiAjZGVmaW5lIEFDUElfUExEX1NFVF9JR05PUkVfQ09MT1IoZHdvcmQsdmFsdWUpICBBQ1BJX1NFVF9CSVRTIChkd29yZCwgNywgQUNQSV8xQklUX01BU0ssIHZhbHVlKQkvKiBPZmZzZXQgNywgTGVuIDEgKi8KIAotI2RlZmluZSBBQ1BJX1BMRF9HRVRfQ09MT1IoZHdvcmQpICAgICAgICAgICAgICAgQUNQSV9HRVRfQklUUyAoZHdvcmQsIDgsIEFDUElfMjRCSVRfTUFTSykKLSNkZWZpbmUgQUNQSV9QTERfU0VUX0NPTE9SKGR3b3JkLHZhbHVlKSAgICAgICAgIEFDUElfU0VUX0JJVFMgKGR3b3JkLCA4LCBBQ1BJXzI0QklUX01BU0ssIHZhbHVlKQkvKiBPZmZzZXQgOCwgTGVuIDI0ICovCisjZGVmaW5lIEFDUElfUExEX0dFVF9SRUQoZHdvcmQpICAgICAgICAgICAgICAgICBBQ1BJX0dFVF9CSVRTIChkd29yZCwgOCwgQUNQSV84QklUX01BU0spCisjZGVmaW5lIEFDUElfUExEX1NFVF9SRUQoZHdvcmQsdmFsdWUpICAgICAgICAgICBBQ1BJX1NFVF9CSVRTIChkd29yZCwgOCwgQUNQSV84QklUX01BU0ssIHZhbHVlKQkvKiBPZmZzZXQgOCwgTGVuIDggKi8KKworI2RlZmluZSBBQ1BJX1BMRF9HRVRfR1JFRU4oZHdvcmQpICAgICAgICAgICAgICAgQUNQSV9HRVRfQklUUyAoZHdvcmQsIDE2LCBBQ1BJXzhCSVRfTUFTSykKKyNkZWZpbmUgQUNQSV9QTERfU0VUX0dSRUVOKGR3b3JkLHZhbHVlKSAgICAgICAgIEFDUElfU0VUX0JJVFMgKGR3b3JkLCAxNiwgQUNQSV84QklUX01BU0ssIHZhbHVlKQkvKiBPZmZzZXQgMTYsIExlbiA4ICovCisKKyNkZWZpbmUgQUNQSV9QTERfR0VUX0JMVUUoZHdvcmQpICAgICAgICAgICAgICAgIEFDUElfR0VUX0JJVFMgKGR3b3JkLCAyNCwgQUNQSV84QklUX01BU0spCisjZGVmaW5lIEFDUElfUExEX1NFVF9CTFVFKGR3b3JkLHZhbHVlKSAgICAgICAgICBBQ1BJX1NFVF9CSVRTIChkd29yZCwgMjQsIEFDUElfOEJJVF9NQVNLLCB2YWx1ZSkJLyogT2Zmc2V0IDI0LCBMZW4gOCAqLwogCiAvKiBTZWNvbmQgMzItYml0IGR3b3JkLCBiaXRzIDMzOjYzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKaW5kZXggZjM0YTA4My4uNjFlMzJlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgX19BQ1BJX0JVU19IX18KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+CiAKIC8qIFRCRDogTWFrZSBkeW5hbWljICovCiAjZGVmaW5lIEFDUElfTUFYX0hBTkRMRVMJMTAKQEAgLTMxMiw2ICszMTMsNyBAQAogCXU4IHZhbGlkOjE7CQkvKiBDYW4gc3VjY2Vzc2Z1bGx5IGVuYWJsZSB3YWtldXA/ICovCiAJdTggcnVuX3dha2U6MTsJCS8qIFJ1bi1XYWtlIEdQRSBkZXZpY2VzICovCiAJdTggbm90aWZpZXJfcHJlc2VudDoxOyAgLyogV2FrZS11cCBub3RpZnkgaGFuZGxlciBoYXMgYmVlbiBpbnN0YWxsZWQgKi8KKwl1OCBlbmFibGVkOjE7CQkvKiBFbmFibGVkIGZvciB3YWtldXAgKi8KIH07CiAKIHN0cnVjdCBhY3BpX2RldmljZV93YWtldXBfY29udGV4dCB7CkBAIC0zMzcsMTAgKzMzOSwyMCBAQAogCWJvb2wgcHV0X29ubGluZToxOwogfTsKIAorLyogQUNQSSBEZXZpY2UgU3BlY2lmaWMgRGF0YSAoX0RTRCkgKi8KK3N0cnVjdCBhY3BpX2RldmljZV9kYXRhIHsKKwljb25zdCB1bmlvbiBhY3BpX29iamVjdCAqcG9pbnRlcjsKKwljb25zdCB1bmlvbiBhY3BpX29iamVjdCAqcHJvcGVydGllczsKKwljb25zdCB1bmlvbiBhY3BpX29iamVjdCAqb2ZfY29tcGF0aWJsZTsKK307CisKK3N0cnVjdCBhY3BpX2dwaW9fbWFwcGluZzsKKwogLyogRGV2aWNlICovCiBzdHJ1Y3QgYWNwaV9kZXZpY2UgewogCWludCBkZXZpY2VfdHlwZTsKIAlhY3BpX2hhbmRsZSBoYW5kbGU7CQkvKiBubyBoYW5kbGUgZm9yIGZpeGVkIGhhcmR3YXJlICovCisJc3RydWN0IGZ3bm9kZV9oYW5kbGUgZndub2RlOwogCXN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50OwogCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwpAQCAtMzUzLDE3ICszNjUsMzUgQEAKIAlzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwIHdha2V1cDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfcGVyZiBwZXJmb3JtYW5jZTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfZGlyIGRpcjsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfZGF0YSBkYXRhOwogCXN0cnVjdCBhY3BpX3NjYW5faGFuZGxlciAqaGFuZGxlcjsKIAlzdHJ1Y3QgYWNwaV9ob3RwbHVnX2NvbnRleHQgKmhwOwogCXN0cnVjdCBhY3BpX2RyaXZlciAqZHJpdmVyOworCWNvbnN0IHN0cnVjdCBhY3BpX2dwaW9fbWFwcGluZyAqZHJpdmVyX2dwaW9zOwogCXZvaWQgKmRyaXZlcl9kYXRhOwogCXN0cnVjdCBkZXZpY2UgZGV2OwogCXVuc2lnbmVkIGludCBwaHlzaWNhbF9ub2RlX2NvdW50OworCXVuc2lnbmVkIGludCBkZXBfdW5tZXQ7CiAJc3RydWN0IGxpc3RfaGVhZCBwaHlzaWNhbF9ub2RlX2xpc3Q7CiAJc3RydWN0IG11dGV4IHBoeXNpY2FsX25vZGVfbG9jazsKIAl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgYWNwaV9kZXZpY2UgKik7CiB9OwogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfYWNwaV9ub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCit7CisJcmV0dXJuIGZ3bm9kZSAmJiBmd25vZGUtPnR5cGUgPT0gRldOT0RFX0FDUEk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKK3sKKwlyZXR1cm4gZndub2RlID8gY29udGFpbmVyX29mKGZ3bm9kZSwgc3RydWN0IGFjcGlfZGV2aWNlLCBmd25vZGUpIDogTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqYWNwaV9md25vZGVfaGFuZGxlKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldikKK3sKKwlyZXR1cm4gJmFkZXYtPmZ3bm9kZTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkICphY3BpX2RyaXZlcl9kYXRhKHN0cnVjdCBhY3BpX2RldmljZSAqZCkKIHsKIAlyZXR1cm4gZC0+ZHJpdmVyX2RhdGE7CkBAIC01MTYsNiArNTQ2LDcgQEAKIAkJCQkgdm9pZCAoKndvcmtfZnVuYykoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSk7CiBhY3BpX3N0YXR1cyBhY3BpX3JlbW92ZV9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYpOwogaW50IGFjcGlfcG1fZGV2aWNlX3NsZWVwX3N0YXRlKHN0cnVjdCBkZXZpY2UgKiwgaW50ICosIGludCk7CitpbnQgYWNwaV9wbV9kZXZpY2VfcnVuX3dha2Uoc3RydWN0IGRldmljZSAqLCBib29sKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGFjcGlfc3RhdHVzIGFjcGlfYWRkX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwKIAkJCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTUzNSwxMSArNTY2LDYgQEAKIAlyZXR1cm4gKG0gPj0gQUNQSV9TVEFURV9EMCAmJiBtIDw9IEFDUElfU1RBVEVfRDNfQ09MRCkgPwogCQltIDogQUNQSV9TVEFURV9EMDsKIH0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKLWludCBhY3BpX3BtX2RldmljZV9ydW5fd2FrZShzdHJ1Y3QgZGV2aWNlICosIGJvb2wpOwotI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGFjcGlfcG1fZGV2aWNlX3J1bl93YWtlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmggYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKaW5kZXggYWIyYWNmNi4uNWJhNzg0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaApAQCAtNDYsNyArNDYsNyBAQAogCiAvKiBDdXJyZW50IEFDUElDQSBzdWJzeXN0ZW0gdmVyc2lvbiBpbiBZWVlZTU1ERCBmb3JtYXQgKi8KIAotI2RlZmluZSBBQ1BJX0NBX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4MjAxNDA5MjYKKyNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMTQxMTA3CiAKICNpbmNsdWRlIDxhY3BpL2FjY29uZmlnLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAppbmRleCA3MDAwZTY2Li5iYmVmMTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKQEAgLTczNiw2ICs3MzYsMTAgQEAKICNkZWZpbmUgQUNQSV9HUEVfRU5BQkxFICAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIEFDUElfR1BFX0RJU0FCTEUgICAgICAgICAgICAgICAgMQogI2RlZmluZSBBQ1BJX0dQRV9DT05ESVRJT05BTF9FTkFCTEUgICAgIDIKKyNkZWZpbmUgQUNQSV9HUEVfU0FWRV9NQVNLICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgQUNQSV9HUEVfRU5BQkxFX1NBVkUgICAgICAgICAgICAoQUNQSV9HUEVfRU5BQkxFIHwgQUNQSV9HUEVfU0FWRV9NQVNLKQorI2RlZmluZSBBQ1BJX0dQRV9ESVNBQkxFX1NBVkUgICAgICAgICAgIChBQ1BJX0dQRV9ESVNBQkxFIHwgQUNQSV9HUEVfU0FWRV9NQVNLKQogCiAvKgogICogR1BFIGluZm8gZmxhZ3MgLSBQZXIgR1BFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKaW5kZXggOWI5YjZmMi4uM2NhOWI3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaApAQCAtNjcsOSArNjcsNiBAQAogfTsKIAogc3RydWN0IGFjcGlfcHJvY2Vzc29yX3Bvd2VyIHsKLQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKnN0YXRlOwotCXVuc2lnbmVkIGxvbmcgYm1fY2hlY2tfdGltZXN0YW1wOwotCXUzMiBkZWZhdWx0X3N0YXRlOwogCWludCBjb3VudDsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggc3RhdGVzW0FDUElfUFJPQ0VTU09SX01BWF9QT1dFUl07CiAJaW50IHRpbWVyX2Jyb2FkY2FzdF9vbl9zdGF0ZTsKQEAgLTMxMywxMSArMzEwLDEzIEBACiAjZW5kaWYJCQkJLyogQ09ORklHX0NQVV9GUkVRICovCiAKIC8qIGluIHByb2Nlc3Nvcl9jb3JlLmMgKi8KLXZvaWQgYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhhY3BpX2hhbmRsZSBoYW5kbGUpOwogaW50IGFjcGlfZ2V0X2FwaWNpZChhY3BpX2hhbmRsZSwgaW50IHR5cGUsIHUzMiBhY3BpX2lkKTsKIGludCBhY3BpX21hcF9jcHVpZChpbnQgYXBpY19pZCwgdTMyIGFjcGlfaWQpOwogaW50IGFjcGlfZ2V0X2NwdWlkKGFjcGlfaGFuZGxlLCBpbnQgdHlwZSwgdTMyIGFjcGlfaWQpOwogCisvKiBpbiBwcm9jZXNzb3JfcGRjLmMgKi8KK3ZvaWQgYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhhY3BpX2hhbmRsZSBoYW5kbGUpOworCiAvKiBpbiBwcm9jZXNzb3JfdGhyb3R0bGluZy5jICovCiBpbnQgYWNwaV9wcm9jZXNzb3JfdHN0YXRlX2hhc19jaGFuZ2VkKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOwogaW50IGFjcGlfcHJvY2Vzc29yX2dldF90aHJvdHRsaW5nX2luZm8oc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2Z1dGV4LmgKaW5kZXggMDFmMjI3ZS4uYjU5YjVhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZnV0ZXguaApAQCAtNSw2ICs1LDExOSBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAorI2lmbmRlZiBDT05GSUdfU01QCisvKgorICogVGhlIGZvbGxvd2luZyBpbXBsZW1lbnRhdGlvbiBvbmx5IGZvciB1bmlwcm9jZXNzb3IgbWFjaGluZXMuCisgKiBGb3IgVVAsIGl0J3MgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgcGFnZWZhdWx0X2Rpc2FibGUoKSBhbHNvIGRpc2FibGVzCisgKiBwcmVlbXB0aW9uIHRvIGVuc3VyZSBtdXR1YWwgZXhjbHVzaW9uLgorICoKKyAqLworCisvKioKKyAqIGZ1dGV4X2F0b21pY19vcF9pbnVzZXIoKSAtIEF0b21pYyBhcml0aG1ldGljIG9wZXJhdGlvbiB3aXRoIGNvbnN0YW50CisgKgkJCSAgYXJndW1lbnQgYW5kIGNvbXBhcmlzb24gb2YgdGhlIHByZXZpb3VzCisgKgkJCSAgZnV0ZXggdmFsdWUgd2l0aCBhbm90aGVyIGNvbnN0YW50LgorICoKKyAqIEBlbmNvZGVkX29wOgllbmNvZGVkIG9wZXJhdGlvbiB0byBleGVjdXRlCisgKiBAdWFkZHI6CXBvaW50ZXIgdG8gdXNlciBzcGFjZSBhZGRyZXNzCisgKgorICogUmV0dXJuOgorICogMCAtIE9uIHN1Y2Nlc3MKKyAqIDwwIC0gT24gZXJyb3IKKyAqLworc3RhdGljIGlubGluZSBpbnQKK2Z1dGV4X2F0b21pY19vcF9pbnVzZXIoaW50IGVuY29kZWRfb3AsIHUzMiBfX3VzZXIgKnVhZGRyKQoreworCWludCBvcCA9IChlbmNvZGVkX29wID4+IDI4KSAmIDc7CisJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OworCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOworCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7CisJaW50IG9sZHZhbCwgcmV0OworCXUzMiB0bXA7CisKKwlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCisJCW9wYXJnID0gMSA8PCBvcGFyZzsKKworCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisKKwlyZXQgPSAtRUZBVUxUOworCWlmICh1bmxpa2VseShnZXRfdXNlcihvbGR2YWwsIHVhZGRyKSAhPSAwKSkKKwkJZ290byBvdXRfcGFnZWZhdWx0X2VuYWJsZTsKKworCXJldCA9IDA7CisJdG1wID0gb2xkdmFsOworCisJc3dpdGNoIChvcCkgeworCWNhc2UgRlVURVhfT1BfU0VUOgorCQl0bXAgPSBvcGFyZzsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9BREQ6CisJCXRtcCArPSBvcGFyZzsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9PUjoKKwkJdG1wIHw9IG9wYXJnOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX0FORE46CisJCXRtcCAmPSB+b3Bhcmc7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfWE9SOgorCQl0bXAgXj0gb3Bhcmc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9TWVM7CisJfQorCisJaWYgKHJldCA9PSAwICYmIHVubGlrZWx5KHB1dF91c2VyKHRtcCwgdWFkZHIpICE9IDApKQorCQlyZXQgPSAtRUZBVUxUOworCitvdXRfcGFnZWZhdWx0X2VuYWJsZToKKwlwYWdlZmF1bHRfZW5hYmxlKCk7CisKKwlpZiAocmV0ID09IDApIHsKKwkJc3dpdGNoIChjbXApIHsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfRVE6IHJldCA9IChvbGR2YWwgPT0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX05FOiByZXQgPSAob2xkdmFsICE9IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9MVDogcmV0ID0gKG9sZHZhbCA8IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9HRTogcmV0ID0gKG9sZHZhbCA+PSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTEU6IHJldCA9IChvbGR2YWwgPD0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0dUOiByZXQgPSAob2xkdmFsID4gY21wYXJnKTsgYnJlYWs7CisJCWRlZmF1bHQ6IHJldCA9IC1FTk9TWVM7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYygpIC0gQ29tcGFyZSBhbmQgZXhjaGFuZ2UgdGhlIGNvbnRlbnQgb2YgdGhlCisgKgkJCQl1YWRkciB3aXRoIG5ld3ZhbCBpZiB0aGUgY3VycmVudCB2YWx1ZSBpcworICoJCQkJb2xkdmFsLgorICogQHV2YWw6CXBvaW50ZXIgdG8gc3RvcmUgY29udGVudCBvZiBAdWFkZHIKKyAqIEB1YWRkcjoJcG9pbnRlciB0byB1c2VyIHNwYWNlIGFkZHJlc3MKKyAqIEBvbGR2YWw6CW9sZCB2YWx1ZQorICogQG5ld3ZhbDoJbmV3IHZhbHVlIHRvIHN0b3JlIHRvIEB1YWRkcgorICoKKyAqIFJldHVybjoKKyAqIDAgLSBPbiBzdWNjZXNzCisgKiA8MCAtIE9uIGVycm9yCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyh1MzIgKnV2YWwsIHUzMiBfX3VzZXIgKnVhZGRyLAorCQkJICAgICAgdTMyIG9sZHZhbCwgdTMyIG5ld3ZhbCkKK3sKKwl1MzIgdmFsOworCisJaWYgKHVubGlrZWx5KGdldF91c2VyKHZhbCwgdWFkZHIpICE9IDApKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICh2YWwgPT0gb2xkdmFsICYmIHVubGlrZWx5KHB1dF91c2VyKG5ld3ZhbCwgdWFkZHIpICE9IDApKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCSp1dmFsID0gdmFsOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCiBzdGF0aWMgaW5saW5lIGludAogZnV0ZXhfYXRvbWljX29wX2ludXNlciAoaW50IGVuY29kZWRfb3AsIHUzMiBfX3VzZXIgKnVhZGRyKQogewpAQCAtNTQsNCArMTY3LDUgQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9pby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9pby5oCmluZGV4IGI4ZmRjNTcuLjlkYjA0MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lvLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNkZWZpbmUgX19BU01fR0VORVJJQ19JT19ICiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPiAvKiBJL08gaXMgYWxsIGRvbmUgdGhyb3VnaCBtZW1vcnkgYWNjZXNzZXMgKi8KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4gLyogZm9yIG1lbXNldCgpIGFuZCBtZW1jcHkoKSAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19JT01BUApAQCAtMjQsMjYwICsyNSw2OTEgQEAKICNkZWZpbmUgbW1pb3diKCkgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIHJlYWRYL3dyaXRlWCgpIGFyZSB1c2VkIHRvIGFjY2VzcyBtZW1vcnkgbWFwcGVkIGRldmljZXMuIE9uIHNvbWUKLSAqIGFyY2hpdGVjdHVyZXMgdGhlIG1lbW9yeSBtYXBwZWQgSU8gc3R1ZmYgbmVlZHMgdG8gYmUgYWNjZXNzZWQKLSAqIGRpZmZlcmVudGx5LiBPbiB0aGUgc2ltcGxlIGFyY2hpdGVjdHVyZXMsIHdlIGp1c3QgcmVhZC93cml0ZSB0aGUKLSAqIG1lbW9yeSBsb2NhdGlvbiBkaXJlY3RseS4KKyAqIF9fcmF3X3tyZWFkLHdyaXRlfXtiLHcsbCxxfSgpIGFjY2VzcyBtZW1vcnkgaW4gbmF0aXZlIGVuZGlhbm5lc3MuCisgKgorICogT24gc29tZSBhcmNoaXRlY3R1cmVzIG1lbW9yeSBtYXBwZWQgSU8gbmVlZHMgdG8gYmUgYWNjZXNzZWQgZGlmZmVyZW50bHkuCisgKiBPbiB0aGUgc2ltcGxlIGFyY2hpdGVjdHVyZXMsIHdlIGp1c3QgcmVhZC93cml0ZSB0aGUgbWVtb3J5IGxvY2F0aW9uCisgKiBkaXJlY3RseS4KICAqLworCiAjaWZuZGVmIF9fcmF3X3JlYWRiCisjZGVmaW5lIF9fcmF3X3JlYWRiIF9fcmF3X3JlYWRiCiBzdGF0aWMgaW5saW5lIHU4IF9fcmF3X3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKLQlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1OCBfX2ZvcmNlICopIGFkZHI7CisJcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdTggX19mb3JjZSAqKWFkZHI7CiB9CiAjZW5kaWYKIAogI2lmbmRlZiBfX3Jhd19yZWFkdworI2RlZmluZSBfX3Jhd19yZWFkdyBfX3Jhd19yZWFkdwogc3RhdGljIGlubGluZSB1MTYgX19yYXdfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewotCXJldHVybiAqKGNvbnN0IHZvbGF0aWxlIHUxNiBfX2ZvcmNlICopIGFkZHI7CisJcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdTE2IF9fZm9yY2UgKilhZGRyOwogfQogI2VuZGlmCiAKICNpZm5kZWYgX19yYXdfcmVhZGwKKyNkZWZpbmUgX19yYXdfcmVhZGwgX19yYXdfcmVhZGwKIHN0YXRpYyBpbmxpbmUgdTMyIF9fcmF3X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKLQlyZXR1cm4gKihjb25zdCB2b2xhdGlsZSB1MzIgX19mb3JjZSAqKSBhZGRyOworCXJldHVybiAqKGNvbnN0IHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopYWRkcjsKIH0KICNlbmRpZgogCi0jZGVmaW5lIHJlYWRiIF9fcmF3X3JlYWRiCisjaWZkZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIF9fcmF3X3JlYWRxCisjZGVmaW5lIF9fcmF3X3JlYWRxIF9fcmF3X3JlYWRxCitzdGF0aWMgaW5saW5lIHU2NCBfX3Jhd19yZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdTY0IF9fZm9yY2UgKilhZGRyOworfQorI2VuZGlmCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKKyNpZm5kZWYgX19yYXdfd3JpdGViCisjZGVmaW5lIF9fcmF3X3dyaXRlYiBfX3Jhd193cml0ZWIKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWIodTggdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHU4IF9fZm9yY2UgKilhZGRyID0gdmFsdWU7Cit9CisjZW5kaWYKKworI2lmbmRlZiBfX3Jhd193cml0ZXcKKyNkZWZpbmUgX19yYXdfd3JpdGV3IF9fcmF3X3dyaXRldworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRldyh1MTYgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHUxNiBfX2ZvcmNlICopYWRkciA9IHZhbHVlOworfQorI2VuZGlmCisKKyNpZm5kZWYgX19yYXdfd3JpdGVsCisjZGVmaW5lIF9fcmF3X3dyaXRlbCBfX3Jhd193cml0ZWwKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWwodTMyIHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKih2b2xhdGlsZSB1MzIgX19mb3JjZSAqKWFkZHIgPSB2YWx1ZTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIF9fcmF3X3dyaXRlcQorI2RlZmluZSBfX3Jhd193cml0ZXEgX19yYXdfd3JpdGVxCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVxKHU2NCB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdTY0IF9fZm9yY2UgKilhZGRyID0gdmFsdWU7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KKworLyoKKyAqIHtyZWFkLHdyaXRlfXtiLHcsbCxxfSgpIGFjY2VzcyBsaXR0bGUgZW5kaWFuIG1lbW9yeSBhbmQgcmV0dXJuIHJlc3VsdCBpbgorICogbmF0aXZlIGVuZGlhbm5lc3MuCisgKi8KKworI2lmbmRlZiByZWFkYgorI2RlZmluZSByZWFkYiByZWFkYgorc3RhdGljIGlubGluZSB1OCByZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRiKGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgcmVhZHcKICNkZWZpbmUgcmVhZHcgcmVhZHcKIHN0YXRpYyBpbmxpbmUgdTE2IHJlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gX19sZTE2X3RvX2NwdShfX3Jhd19yZWFkdyhhZGRyKSk7CiB9CisjZW5kaWYKIAorI2lmbmRlZiByZWFkbAogI2RlZmluZSByZWFkbCByZWFkbAogc3RhdGljIGlubGluZSB1MzIgcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXJldHVybiBfX2xlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKGFkZHIpKTsKIH0KLQotI2lmbmRlZiBfX3Jhd193cml0ZWIKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWIodTggYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCSoodm9sYXRpbGUgdTggX19mb3JjZSAqKSBhZGRyID0gYjsKLX0KICNlbmRpZgogCi0jaWZuZGVmIF9fcmF3X3dyaXRldwotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRldyh1MTYgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCSoodm9sYXRpbGUgdTE2IF9fZm9yY2UgKikgYWRkciA9IGI7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBfX3Jhd193cml0ZWwKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWwodTMyIGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQkqKHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopIGFkZHIgPSBiOwotfQotI2VuZGlmCi0KLSNkZWZpbmUgd3JpdGViIF9fcmF3X3dyaXRlYgotI2RlZmluZSB3cml0ZXcoYixhZGRyKSBfX3Jhd193cml0ZXcoX19jcHVfdG9fbGUxNihiKSxhZGRyKQotI2RlZmluZSB3cml0ZWwoYixhZGRyKSBfX3Jhd193cml0ZWwoX19jcHVfdG9fbGUzMihiKSxhZGRyKQotCiAjaWZkZWYgQ09ORklHXzY0QklUCi0jaWZuZGVmIF9fcmF3X3JlYWRxCi1zdGF0aWMgaW5saW5lIHU2NCBfX3Jhd19yZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JcmV0dXJuICooY29uc3Qgdm9sYXRpbGUgdTY0IF9fZm9yY2UgKikgYWRkcjsKLX0KLSNlbmRpZgotCisjaWZuZGVmIHJlYWRxCiAjZGVmaW5lIHJlYWRxIHJlYWRxCiBzdGF0aWMgaW5saW5lIHU2NCByZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJcmV0dXJuIF9fbGU2NF90b19jcHUoX19yYXdfcmVhZHEoYWRkcikpOwogfQotCi0jaWZuZGVmIF9fcmF3X3dyaXRlcQotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlcSh1NjQgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCSoodm9sYXRpbGUgdTY0IF9fZm9yY2UgKikgYWRkciA9IGI7Ci19CiAjZW5kaWYKLQotI2RlZmluZSB3cml0ZXEoYiwgYWRkcikgX19yYXdfd3JpdGVxKF9fY3B1X3RvX2xlNjQoYiksIGFkZHIpCiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKLSNpZm5kZWYgUENJX0lPQkFTRQotI2RlZmluZSBQQ0lfSU9CQVNFICgodm9pZCBfX2lvbWVtICopIDApCisjaWZuZGVmIHdyaXRlYgorI2RlZmluZSB3cml0ZWIgd3JpdGViCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGViKHU4IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGViKHZhbHVlLCBhZGRyKTsKK30KICNlbmRpZgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIHdyaXRldworI2RlZmluZSB3cml0ZXcgd3JpdGV3CitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGV3KHUxNiB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRldyhjcHVfdG9fbGUxNih2YWx1ZSksIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgd3JpdGVsCisjZGVmaW5lIHdyaXRlbCB3cml0ZWwKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWwodTMyIHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGVsKF9fY3B1X3RvX2xlMzIodmFsdWUpLCBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIHdyaXRlcQorI2RlZmluZSB3cml0ZXEgd3JpdGVxCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVxKHU2NCB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRlcShfX2NwdV90b19sZTY0KHZhbHVlKSwgYWRkcik7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KKwogLyoKLSAqIHRyYWRpdGlvbmFsIGlucHV0L291dHB1dCBmdW5jdGlvbnMKKyAqIHtyZWFkLHdyaXRlfXtiLHcsbCxxfV9yZWxheGVkKCkgYXJlIGxpa2UgdGhlIHJlZ3VsYXIgdmVyc2lvbiwgYnV0CisgKiBhcmUgbm90IGd1YXJhbnRlZWQgdG8gcHJvdmlkZSBvcmRlcmluZyBhZ2FpbnN0IHNwaW5sb2NrcyBvciBtZW1vcnkKKyAqIGFjY2Vzc2VzLgogICovCisjaWZuZGVmIHJlYWRiX3JlbGF4ZWQKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZCByZWFkYgorI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdTggaW5iKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gcmVhZGIoYWRkciArIFBDSV9JT0JBU0UpOwotfQorI2lmbmRlZiByZWFkd19yZWxheGVkCisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQgcmVhZHcKKyNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHUxNiBpbncodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiByZWFkdyhhZGRyICsgUENJX0lPQkFTRSk7Ci19CisjaWZuZGVmIHJlYWRsX3JlbGF4ZWQKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZCByZWFkbAorI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdTMyIGlubCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIHJlYWRsKGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KKyNpZm5kZWYgcmVhZHFfcmVsYXhlZAorI2RlZmluZSByZWFkcV9yZWxheGVkIHJlYWRxCisjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIG91dGIodTggYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXdyaXRlYihiLCBhZGRyICsgUENJX0lPQkFTRSk7Ci19CisjaWZuZGVmIHdyaXRlYl9yZWxheGVkCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkIHdyaXRlYgorI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXR3KHUxNiBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jd3JpdGV3KGIsIGFkZHIgKyBQQ0lfSU9CQVNFKTsKLX0KKyNpZm5kZWYgd3JpdGV3X3JlbGF4ZWQKKyNkZWZpbmUgd3JpdGV3X3JlbGF4ZWQgd3JpdGV3CisjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIG91dGwodTMyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl3cml0ZWwoYiwgYWRkciArIFBDSV9JT0JBU0UpOwotfQorI2lmbmRlZiB3cml0ZWxfcmVsYXhlZAorI2RlZmluZSB3cml0ZWxfcmVsYXhlZCB3cml0ZWwKKyNlbmRpZgogCi0jZGVmaW5lIGluYl9wKGFkZHIpCWluYihhZGRyKQotI2RlZmluZSBpbndfcChhZGRyKQlpbncoYWRkcikKLSNkZWZpbmUgaW5sX3AoYWRkcikJaW5sKGFkZHIpCi0jZGVmaW5lIG91dGJfcCh4LCBhZGRyKQlvdXRiKCh4KSwgKGFkZHIpKQotI2RlZmluZSBvdXR3X3AoeCwgYWRkcikJb3V0dygoeCksIChhZGRyKSkKLSNkZWZpbmUgb3V0bF9wKHgsIGFkZHIpCW91dGwoKHgpLCAoYWRkcikpCisjaWZuZGVmIHdyaXRlcV9yZWxheGVkCisjZGVmaW5lIHdyaXRlcV9yZWxheGVkIHdyaXRlcQorI2VuZGlmCiAKLSNpZm5kZWYgaW5zYgotc3RhdGljIGlubGluZSB2b2lkIGluc2IodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKKy8qCisgKiB7cmVhZCx3cml0ZX1ze2IsdyxsLHF9KCkgcmVwZWF0ZWRseSBhY2Nlc3MgdGhlIHNhbWUgbWVtb3J5IGFkZHJlc3MgaW4KKyAqIG5hdGl2ZSBlbmRpYW5uZXNzIGluIDgtLCAxNi0sIDMyLSBvciA2NC1iaXQgY2h1bmtzIChAY291bnQgdGltZXMpLgorICovCisjaWZuZGVmIHJlYWRzYgorI2RlZmluZSByZWFkc2IgcmVhZHNiCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmZmVyLAorCQkJICB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaWYgKGNvdW50KSB7CiAJCXU4ICpidWYgPSBidWZmZXI7CisKIAkJZG8gewotCQkJdTggeCA9IF9fcmF3X3JlYWRiKGFkZHIgKyBQQ0lfSU9CQVNFKTsKKwkJCXU4IHggPSBfX3Jhd19yZWFkYihhZGRyKTsKIAkJCSpidWYrKyA9IHg7CiAJCX0gd2hpbGUgKC0tY291bnQpOwogCX0KIH0KICNlbmRpZgogCi0jaWZuZGVmIGluc3cKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnN3KHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCisjaWZuZGVmIHJlYWRzdworI2RlZmluZSByZWFkc3cgcmVhZHN3CitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHN3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmZmVyLAorCQkJICB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaWYgKGNvdW50KSB7CiAJCXUxNiAqYnVmID0gYnVmZmVyOworCiAJCWRvIHsKLQkJCXUxNiB4ID0gX19yYXdfcmVhZHcoYWRkciArIFBDSV9JT0JBU0UpOworCQkJdTE2IHggPSBfX3Jhd19yZWFkdyhhZGRyKTsKIAkJCSpidWYrKyA9IHg7CiAJCX0gd2hpbGUgKC0tY291bnQpOwogCX0KIH0KICNlbmRpZgogCi0jaWZuZGVmIGluc2wKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCisjaWZuZGVmIHJlYWRzbAorI2RlZmluZSByZWFkc2wgcmVhZHNsCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmZmVyLAorCQkJICB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaWYgKGNvdW50KSB7CiAJCXUzMiAqYnVmID0gYnVmZmVyOworCiAJCWRvIHsKLQkJCXUzMiB4ID0gX19yYXdfcmVhZGwoYWRkciArIFBDSV9JT0JBU0UpOworCQkJdTMyIHggPSBfX3Jhd19yZWFkbChhZGRyKTsKIAkJCSpidWYrKyA9IHg7CiAJCX0gd2hpbGUgKC0tY291bnQpOwogCX0KIH0KICNlbmRpZgogCi0jaWZuZGVmIG91dHNiCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0c2IodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgcmVhZHNxCisjZGVmaW5lIHJlYWRzcSByZWFkc3EKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkc3EoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWZmZXIsCisJCQkgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlpZiAoY291bnQpIHsKKwkJdTY0ICpidWYgPSBidWZmZXI7CisKKwkJZG8geworCQkJdTY0IHggPSBfX3Jhd19yZWFkcShhZGRyKTsKKwkJCSpidWYrKyA9IHg7CisJCX0gd2hpbGUgKC0tY291bnQpOworCX0KK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCisjaWZuZGVmIHdyaXRlc2IKKyNkZWZpbmUgd3JpdGVzYiB3cml0ZXNiCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzYih2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpZiAoY291bnQpIHsKIAkJY29uc3QgdTggKmJ1ZiA9IGJ1ZmZlcjsKKwogCQlkbyB7Ci0JCQlfX3Jhd193cml0ZWIoKmJ1ZisrLCBhZGRyICsgUENJX0lPQkFTRSk7CisJCQlfX3Jhd193cml0ZWIoKmJ1ZisrLCBhZGRyKTsKIAkJfSB3aGlsZSAoLS1jb3VudCk7CiAJfQogfQogI2VuZGlmCiAKLSNpZm5kZWYgb3V0c3cKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzdyh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQorI2lmbmRlZiB3cml0ZXN3CisjZGVmaW5lIHdyaXRlc3cgd3JpdGVzdworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlc3codm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkgICB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaWYgKGNvdW50KSB7CiAJCWNvbnN0IHUxNiAqYnVmID0gYnVmZmVyOworCiAJCWRvIHsKLQkJCV9fcmF3X3dyaXRldygqYnVmKyssIGFkZHIgKyBQQ0lfSU9CQVNFKTsKKwkJCV9fcmF3X3dyaXRldygqYnVmKyssIGFkZHIpOwogCQl9IHdoaWxlICgtLWNvdW50KTsKIAl9CiB9CiAjZW5kaWYKIAotI2lmbmRlZiBvdXRzbAotc3RhdGljIGlubGluZSB2b2lkIG91dHNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCisjaWZuZGVmIHdyaXRlc2wKKyNkZWZpbmUgd3JpdGVzbCB3cml0ZXNsCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzbCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpZiAoY291bnQpIHsKIAkJY29uc3QgdTMyICpidWYgPSBidWZmZXI7CisKIAkJZG8gewotCQkJX19yYXdfd3JpdGVsKCpidWYrKywgYWRkciArIFBDSV9JT0JBU0UpOworCQkJX19yYXdfd3JpdGVsKCpidWYrKywgYWRkcik7CiAJCX0gd2hpbGUgKC0tY291bnQpOwogCX0KIH0KICNlbmRpZgogCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX0lPTUFQCi0jZGVmaW5lIGlvcmVhZDgoYWRkcikJCXJlYWRiKGFkZHIpCi0jZGVmaW5lIGlvcmVhZDE2KGFkZHIpCQlyZWFkdyhhZGRyKQotI2RlZmluZSBpb3JlYWQxNmJlKGFkZHIpCV9fYmUxNl90b19jcHUoX19yYXdfcmVhZHcoYWRkcikpCi0jZGVmaW5lIGlvcmVhZDMyKGFkZHIpCQlyZWFkbChhZGRyKQotI2RlZmluZSBpb3JlYWQzMmJlKGFkZHIpCV9fYmUzMl90b19jcHUoX19yYXdfcmVhZGwoYWRkcikpCisjaWZkZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIHdyaXRlc3EKKyNkZWZpbmUgd3JpdGVzcSB3cml0ZXNxCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzcSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlpZiAoY291bnQpIHsKKwkJY29uc3QgdTY0ICpidWYgPSBidWZmZXI7CiAKLSNkZWZpbmUgaW93cml0ZTgodiwgYWRkcikJd3JpdGViKCh2KSwgKGFkZHIpKQotI2RlZmluZSBpb3dyaXRlMTYodiwgYWRkcikJd3JpdGV3KCh2KSwgKGFkZHIpKQotI2RlZmluZSBpb3dyaXRlMTZiZSh2LCBhZGRyKQlfX3Jhd193cml0ZXcoX19jcHVfdG9fYmUxNih2KSwgYWRkcikKLSNkZWZpbmUgaW93cml0ZTMyKHYsIGFkZHIpCXdyaXRlbCgodiksIChhZGRyKSkKLSNkZWZpbmUgaW93cml0ZTMyYmUodiwgYWRkcikJX19yYXdfd3JpdGVsKF9fY3B1X3RvX2JlMzIodiksIGFkZHIpCisJCWRvIHsKKwkJCV9fcmF3X3dyaXRlcSgqYnVmKyssIGFkZHIpOworCQl9IHdoaWxlICgtLWNvdW50KTsKKwl9Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAotI2RlZmluZSBpb3JlYWQ4X3JlcChwLCBkc3QsIGNvdW50KSBcCi0JaW5zYigodW5zaWduZWQgbG9uZykgKHApLCAoZHN0KSwgKGNvdW50KSkKLSNkZWZpbmUgaW9yZWFkMTZfcmVwKHAsIGRzdCwgY291bnQpIFwKLQlpbnN3KCh1bnNpZ25lZCBsb25nKSAocCksIChkc3QpLCAoY291bnQpKQotI2RlZmluZSBpb3JlYWQzMl9yZXAocCwgZHN0LCBjb3VudCkgXAotCWluc2woKHVuc2lnbmVkIGxvbmcpIChwKSwgKGRzdCksIChjb3VudCkpCi0KLSNkZWZpbmUgaW93cml0ZThfcmVwKHAsIHNyYywgY291bnQpIFwKLQlvdXRzYigodW5zaWduZWQgbG9uZykgKHApLCAoc3JjKSwgKGNvdW50KSkKLSNkZWZpbmUgaW93cml0ZTE2X3JlcChwLCBzcmMsIGNvdW50KSBcCi0Jb3V0c3coKHVuc2lnbmVkIGxvbmcpIChwKSwgKHNyYyksIChjb3VudCkpCi0jZGVmaW5lIGlvd3JpdGUzMl9yZXAocCwgc3JjLCBjb3VudCkgXAotCW91dHNsKCh1bnNpZ25lZCBsb25nKSAocCksIChzcmMpLCAoY291bnQpKQotI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX0lPTUFQICovCisjaWZuZGVmIFBDSV9JT0JBU0UKKyNkZWZpbmUgUENJX0lPQkFTRSAoKHZvaWQgX19pb21lbSAqKTApCisjZW5kaWYKIAogI2lmbmRlZiBJT19TUEFDRV9MSU1JVAogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKICNlbmRpZgogCisvKgorICoge2luLG91dH17Yix3LGx9KCkgYWNjZXNzIGxpdHRsZSBlbmRpYW4gSS9PLiB7aW4sb3V0fXtiLHcsbH1fcCgpIGNhbiBiZQorICogaW1wbGVtZW50ZWQgb24gaGFyZHdhcmUgdGhhdCBuZWVkcyBhbiBhZGRpdGlvbmFsIGRlbGF5IGZvciBJL08gYWNjZXNzZXMgdG8KKyAqIHRha2UgZWZmZWN0LgorICovCisKKyNpZm5kZWYgaW5iCisjZGVmaW5lIGluYiBpbmIKK3N0YXRpYyBpbmxpbmUgdTggaW5iKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gcmVhZGIoUENJX0lPQkFTRSArIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW53CisjZGVmaW5lIGludyBpbncKK3N0YXRpYyBpbmxpbmUgdTE2IGludyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIHJlYWR3KFBDSV9JT0JBU0UgKyBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlubAorI2RlZmluZSBpbmwgaW5sCitzdGF0aWMgaW5saW5lIHUzMiBpbmwodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiByZWFkbChQQ0lfSU9CQVNFICsgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRiCisjZGVmaW5lIG91dGIgb3V0Ygorc3RhdGljIGlubGluZSB2b2lkIG91dGIodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl3cml0ZWIodmFsdWUsIFBDSV9JT0JBU0UgKyBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHcKKyNkZWZpbmUgb3V0dyBvdXR3CitzdGF0aWMgaW5saW5lIHZvaWQgb3V0dyh1MTYgdmFsdWUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl3cml0ZXcodmFsdWUsIFBDSV9JT0JBU0UgKyBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dGwKKyNkZWZpbmUgb3V0bCBvdXRsCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0bCh1MzIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl3cml0ZWwodmFsdWUsIFBDSV9JT0JBU0UgKyBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGluYl9wCisjZGVmaW5lIGluYl9wIGluYl9wCitzdGF0aWMgaW5saW5lIHU4IGluYl9wKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gaW5iKGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW53X3AKKyNkZWZpbmUgaW53X3AgaW53X3AKK3N0YXRpYyBpbmxpbmUgdTE2IGlud19wKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gaW53KGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW5sX3AKKyNkZWZpbmUgaW5sX3AgaW5sX3AKK3N0YXRpYyBpbmxpbmUgdTMyIGlubF9wKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gaW5sKGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0Yl9wCisjZGVmaW5lIG91dGJfcCBvdXRiX3AKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRiX3AodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlvdXRiKHZhbHVlLCBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHdfcAorI2RlZmluZSBvdXR3X3Agb3V0d19wCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0d19wKHUxNiB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCW91dHcodmFsdWUsIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0bF9wCisjZGVmaW5lIG91dGxfcCBvdXRsX3AKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRsX3AodTMyIHZhbHVlLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJb3V0bCh2YWx1ZSwgYWRkcik7Cit9CisjZW5kaWYKKworLyoKKyAqIHtpbixvdXR9c3tiLHcsbH17LF9wfSgpIGFyZSB2YXJpYW50cyBvZiB0aGUgYWJvdmUgdGhhdCByZXBlYXRlZGx5IGFjY2VzcyBhCisgKiBzaW5nbGUgSS9PIHBvcnQgbXVsdGlwbGUgdGltZXMuCisgKi8KKworI2lmbmRlZiBpbnNiCisjZGVmaW5lIGluc2IgaW5zYgorc3RhdGljIGlubGluZSB2b2lkIGluc2IodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlyZWFkc2IoUENJX0lPQkFTRSArIGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW5zdworI2RlZmluZSBpbnN3IGluc3cKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN3KHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJcmVhZHN3KFBDSV9JT0JBU0UgKyBhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGluc2wKKyNkZWZpbmUgaW5zbCBpbnNsCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXJlYWRzbChQQ0lfSU9CQVNFICsgYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRzYgorI2RlZmluZSBvdXRzYiBvdXRzYgorc3RhdGljIGlubGluZSB2b2lkIG91dHNiKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl3cml0ZXNiKFBDSV9JT0JBU0UgKyBhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIG91dHN3CisjZGVmaW5lIG91dHN3IG91dHN3CitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c3codW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkgdW5zaWduZWQgaW50IGNvdW50KQoreworCXdyaXRlc3coUENJX0lPQkFTRSArIGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgb3V0c2wKKyNkZWZpbmUgb3V0c2wgb3V0c2wKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRzbCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJd3JpdGVzbChQQ0lfSU9CQVNFICsgYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbnNiX3AKKyNkZWZpbmUgaW5zYl9wIGluc2JfcAorc3RhdGljIGlubGluZSB2b2lkIGluc2JfcCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCWluc2IoYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbnN3X3AKKyNkZWZpbmUgaW5zd19wIGluc3dfcAorc3RhdGljIGlubGluZSB2b2lkIGluc3dfcCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCWluc3coYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpbnNsX3AKKyNkZWZpbmUgaW5zbF9wIGluc2xfcAorc3RhdGljIGlubGluZSB2b2lkIGluc2xfcCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCWluc2woYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRzYl9wCisjZGVmaW5lIG91dHNiX3Agb3V0c2JfcAorc3RhdGljIGlubGluZSB2b2lkIG91dHNiX3AodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJb3V0c2IoYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRzd19wCisjZGVmaW5lIG91dHN3X3Agb3V0c3dfcAorc3RhdGljIGlubGluZSB2b2lkIG91dHN3X3AodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJb3V0c3coYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBvdXRzbF9wCisjZGVmaW5lIG91dHNsX3Agb3V0c2xfcAorc3RhdGljIGlubGluZSB2b2lkIG91dHNsX3AodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJb3V0c2woYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfR0VORVJJQ19JT01BUAorI2lmbmRlZiBpb3JlYWQ4CisjZGVmaW5lIGlvcmVhZDggaW9yZWFkOAorc3RhdGljIGlubGluZSB1OCBpb3JlYWQ4KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZGIoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3JlYWQxNgorI2RlZmluZSBpb3JlYWQxNiBpb3JlYWQxNgorc3RhdGljIGlubGluZSB1MTYgaW9yZWFkMTYoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiByZWFkdyhhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvcmVhZDMyCisjZGVmaW5lIGlvcmVhZDMyIGlvcmVhZDMyCitzdGF0aWMgaW5saW5lIHUzMiBpb3JlYWQzMihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIHJlYWRsKGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW93cml0ZTgKKyNkZWZpbmUgaW93cml0ZTggaW93cml0ZTgKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlOCh1OCB2YWx1ZSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXdyaXRlYih2YWx1ZSwgYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlMTYKKyNkZWZpbmUgaW93cml0ZTE2IGlvd3JpdGUxNgorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGUxNih1MTYgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZXcodmFsdWUsIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW93cml0ZTMyCisjZGVmaW5lIGlvd3JpdGUzMiBpb3dyaXRlMzIKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMzIodTMyIHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGVsKHZhbHVlLCBhZGRyKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvcmVhZDE2YmUKKyNkZWZpbmUgaW9yZWFkMTZiZSBpb3JlYWQxNmJlCitzdGF0aWMgaW5saW5lIHUxNiBpb3JlYWQxNmJlKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gX19iZTE2X3RvX2NwdShfX3Jhd19yZWFkdyhhZGRyKSk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3JlYWQzMmJlCisjZGVmaW5lIGlvcmVhZDMyYmUgaW9yZWFkMzJiZQorc3RhdGljIGlubGluZSB1MzIgaW9yZWFkMzJiZShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIF9fYmUzMl90b19jcHUoX19yYXdfcmVhZGwoYWRkcikpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW93cml0ZTE2YmUKKyNkZWZpbmUgaW93cml0ZTE2YmUgaW93cml0ZTE2YmUKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMTZiZSh1MTYgdmFsdWUsIHZvaWQgdm9sYXRpbGUgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZXcoX19jcHVfdG9fYmUxNih2YWx1ZSksIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW93cml0ZTMyYmUKKyNkZWZpbmUgaW93cml0ZTMyYmUgaW93cml0ZTMyYmUKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMzJiZSh1MzIgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZWwoX19jcHVfdG9fYmUzMih2YWx1ZSksIGFkZHIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW9yZWFkOF9yZXAKKyNkZWZpbmUgaW9yZWFkOF9yZXAgaW9yZWFkOF9yZXAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQ4X3JlcChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmJ1ZmZlciwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJcmVhZHNiKGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW9yZWFkMTZfcmVwCisjZGVmaW5lIGlvcmVhZDE2X3JlcCBpb3JlYWQxNl9yZXAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQxNl9yZXAoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLAorCQkJCXZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXJlYWRzdyhhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvcmVhZDMyX3JlcAorI2RlZmluZSBpb3JlYWQzMl9yZXAgaW9yZWFkMzJfcmVwCitzdGF0aWMgaW5saW5lIHZvaWQgaW9yZWFkMzJfcmVwKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwKKwkJCQl2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlyZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBpb3dyaXRlOF9yZXAKKyNkZWZpbmUgaW93cml0ZThfcmVwIGlvd3JpdGU4X3JlcAorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGU4X3JlcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsCisJCQkJY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCXVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl3cml0ZXNiKGFkZHIsIGJ1ZmZlciwgY291bnQpOworfQorI2VuZGlmCisKKyNpZm5kZWYgaW93cml0ZTE2X3JlcAorI2RlZmluZSBpb3dyaXRlMTZfcmVwIGlvd3JpdGUxNl9yZXAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMTZfcmVwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwKKwkJCQkgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCSB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJd3JpdGVzdyhhZGRyLCBidWZmZXIsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIGlvd3JpdGUzMl9yZXAKKyNkZWZpbmUgaW93cml0ZTMyX3JlcCBpb3dyaXRlMzJfcmVwCitzdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZTMyX3JlcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsCisJCQkJIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkgdW5zaWduZWQgaW50IGNvdW50KQoreworCXdyaXRlc2woYWRkciwgYnVmZmVyLCBjb3VudCk7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfR0VORVJJQ19JT01BUCAqLworCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2RlZmluZSBfX2lvX3ZpcnQoeCkgKCh2b2lkIF9fZm9yY2UgKikgKHgpKQorI2RlZmluZSBfX2lvX3ZpcnQoeCkgKCh2b2lkIF9fZm9yY2UgKikoeCkpCiAKICNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSU9NQVAKIHN0cnVjdCBwY2lfZGV2OwogZXh0ZXJuIHZvaWQgX19pb21lbSAqcGNpX2lvbWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4KTsKIAogI2lmbmRlZiBwY2lfaW91bm1hcAorI2RlZmluZSBwY2lfaW91bm1hcCBwY2lfaW91bm1hcAogc3RhdGljIGlubGluZSB2b2lkIHBjaV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgX19pb21lbSAqcCkKIHsKIH0KQEAgLTI4OSwxMSArNzIxLDE1IEBACiAgKiBUaGVzZSBhcmUgcHJldHR5IHRyaXZpYWwKICAqLwogI2lmbmRlZiB2aXJ0X3RvX3BoeXMKKyNkZWZpbmUgdmlydF90b19waHlzIHZpcnRfdG9fcGh5cwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICphZGRyZXNzKQogewogCXJldHVybiBfX3BhKCh1bnNpZ25lZCBsb25nKWFkZHJlc3MpOwogfQorI2VuZGlmCiAKKyNpZm5kZWYgcGh5c190b192aXJ0CisjZGVmaW5lIHBoeXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKIHN0YXRpYyBpbmxpbmUgdm9pZCAqcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlyZXR1cm4gX192YShhZGRyZXNzKTsKQEAgLTMwNiwzNyArNzQyLDY1IEBACiAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGZvciB0aGUgbm8tTU1VIGNhc2Ugb25seS4uLiBpZiB5b3UgaGF2ZSBhbiBNTVUKICAqIHlvdSdsbCBuZWVkIHRvIHByb3ZpZGUgeW91ciBvd24gZGVmaW5pdGlvbnMuCiAgKi8KLSNpZm5kZWYgQ09ORklHX01NVQotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAocGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JcmV0dXJuICh2b2lkIF9faW9tZW0qKSAodW5zaWduZWQgbG9uZylvZmZzZXQ7Ci19CiAKLSNkZWZpbmUgX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpCWlvcmVtYXAob2Zmc2V0LCBzaXplKQorI2lmbmRlZiBDT05GSUdfTU1VCisjaWZuZGVmIGlvcmVtYXAKKyNkZWZpbmUgaW9yZW1hcCBpb3JlbWFwCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcChwaHlzX2FkZHJfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCXJldHVybiAodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpb2Zmc2V0OworfQorI2VuZGlmCisKKyNpZm5kZWYgX19pb3JlbWFwCisjZGVmaW5lIF9faW9yZW1hcCBfX2lvcmVtYXAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAocGh5c19hZGRyX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiBpb3JlbWFwKG9mZnNldCwgc2l6ZSk7Cit9CisjZW5kaWYKIAogI2lmbmRlZiBpb3JlbWFwX25vY2FjaGUKLSNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlIGlvcmVtYXAKKyNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlIGlvcmVtYXBfbm9jYWNoZQorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXBfbm9jYWNoZShwaHlzX2FkZHJfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCXJldHVybiBpb3JlbWFwKG9mZnNldCwgc2l6ZSk7Cit9CiAjZW5kaWYKIAogI2lmbmRlZiBpb3JlbWFwX3djCi0jZGVmaW5lIGlvcmVtYXBfd2MgaW9yZW1hcF9ub2NhY2hlCisjZGVmaW5lIGlvcmVtYXBfd2MgaW9yZW1hcF93Yworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXBfd2MocGh5c19hZGRyX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKG9mZnNldCwgc2l6ZSk7Cit9CiAjZW5kaWYKIAorI2lmbmRlZiBpb3VubWFwCisjZGVmaW5lIGlvdW5tYXAgaW91bm1hcAogc3RhdGljIGlubGluZSB2b2lkIGlvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKQogewogfQorI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwogCiAjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRfTUFQCiAjaWZuZGVmIENPTkZJR19HRU5FUklDX0lPTUFQCisjaWZuZGVmIGlvcG9ydF9tYXAKKyNkZWZpbmUgaW9wb3J0X21hcCBpb3BvcnRfbWFwCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBucikKIHsKIAlyZXR1cm4gUENJX0lPQkFTRSArIChwb3J0ICYgSU9fU1BBQ0VfTElNSVQpOwogfQorI2VuZGlmCiAKKyNpZm5kZWYgaW9wb3J0X3VubWFwCisjZGVmaW5lIGlvcG9ydF91bm1hcCBpb3BvcnRfdW5tYXAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpb3BvcnRfdW5tYXAodm9pZCBfX2lvbWVtICpwKQogewogfQorI2VuZGlmCiAjZWxzZSAvKiBDT05GSUdfR0VORVJJQ19JT01BUCAqLwogZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBucik7CiBleHRlcm4gdm9pZCBpb3BvcnRfdW5tYXAodm9pZCBfX2lvbWVtICpwKTsKQEAgLTM0NCwzNSArODA4LDY4IEBACiAjZW5kaWYgLyogQ09ORklHX0hBU19JT1BPUlRfTUFQICovCiAKICNpZm5kZWYgeGxhdGVfZGV2X2ttZW1fcHRyCi0jZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0ciB4bGF0ZV9kZXZfa21lbV9wdHIKK3N0YXRpYyBpbmxpbmUgdm9pZCAqeGxhdGVfZGV2X2ttZW1fcHRyKHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIGFkZHI7Cit9CiAjZW5kaWYKKwogI2lmbmRlZiB4bGF0ZV9kZXZfbWVtX3B0cgotI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisjZGVmaW5lIHhsYXRlX2Rldl9tZW1fcHRyIHhsYXRlX2Rldl9tZW1fcHRyCitzdGF0aWMgaW5saW5lIHZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHBoeXNfYWRkcl90IGFkZHIpCit7CisJcmV0dXJuIF9fdmEoYWRkcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiB1bnhsYXRlX2Rldl9tZW1fcHRyCisjZGVmaW5lIHVueGxhdGVfZGV2X21lbV9wdHIgdW54bGF0ZV9kZXZfbWVtX3B0cgorc3RhdGljIGlubGluZSB2b2lkIHVueGxhdGVfZGV2X21lbV9wdHIocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqYWRkcikKK3sKK30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1ZJUlRfVE9fQlVTCiAjaWZuZGVmIHZpcnRfdG9fYnVzCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19idXModm9sYXRpbGUgdm9pZCAqYWRkcmVzcykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2J1cyh2b2lkICphZGRyZXNzKQogewotCXJldHVybiAoKHVuc2lnbmVkIGxvbmcpIGFkZHJlc3MpOworCXJldHVybiAodW5zaWduZWQgbG9uZylhZGRyZXNzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmJ1c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlyZXR1cm4gKHZvaWQgKikgYWRkcmVzczsKKwlyZXR1cm4gKHZvaWQgKilhZGRyZXNzOwogfQogI2VuZGlmCiAjZW5kaWYKIAogI2lmbmRlZiBtZW1zZXRfaW8KLSNkZWZpbmUgbWVtc2V0X2lvKGEsIGIsIGMpCW1lbXNldChfX2lvX3ZpcnQoYSksIChiKSwgKGMpKQorI2RlZmluZSBtZW1zZXRfaW8gbWVtc2V0X2lvCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgaW50IHZhbHVlLAorCQkJICAgICBzaXplX3Qgc2l6ZSkKK3sKKwltZW1zZXQoX19pb192aXJ0KGFkZHIpLCB2YWx1ZSwgc2l6ZSk7Cit9CiAjZW5kaWYKIAogI2lmbmRlZiBtZW1jcHlfZnJvbWlvCi0jZGVmaW5lIG1lbWNweV9mcm9taW8oYSwgYiwgYykJbWVtY3B5KChhKSwgX19pb192aXJ0KGIpLCAoYykpCisjZGVmaW5lIG1lbWNweV9mcm9taW8gbWVtY3B5X2Zyb21pbworc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqYnVmZmVyLAorCQkJCSBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsCisJCQkJIHNpemVfdCBzaXplKQoreworCW1lbWNweShidWZmZXIsIF9faW9fdmlydChhZGRyKSwgc2l6ZSk7Cit9CiAjZW5kaWYKKwogI2lmbmRlZiBtZW1jcHlfdG9pbwotI2RlZmluZSBtZW1jcHlfdG9pbyhhLCBiLCBjKQltZW1jcHkoX19pb192aXJ0KGEpLCAoYiksIChjKSkKKyNkZWZpbmUgbWVtY3B5X3RvaW8gbWVtY3B5X3RvaW8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgICAgICBzaXplX3Qgc2l6ZSkKK3sKKwltZW1jcHkoX19pb192aXJ0KGFkZHIpLCBidWZmZXIsIHNpemUpOworfQogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL21tX2hvb2tzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21tX2hvb2tzLmgKaW5kZXggNjdkZWE4MS4uODY2YWE0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tbV9ob29rcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1faG9va3MuaApAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBEZWZpbmUgZ2VuZXJpYyBuby1vcCBob29rcyBmb3IgYXJjaF9kdXBfbW1hcCBhbmQgYXJjaF9leGl0X21tYXAsIHRvCi0gKiBiZSBpbmNsdWRlZCBpbiBhc20tRk9PL21tdV9jb250ZXh0LmggZm9yIGFueSBhcmNoIEZPTyB3aGljaCBkb2Vzbid0Ci0gKiBuZWVkIHRvIGhvb2sgdGhlc2UuCisgKiBEZWZpbmUgZ2VuZXJpYyBuby1vcCBob29rcyBmb3IgYXJjaF9kdXBfbW1hcCwgYXJjaF9leGl0X21tYXAKKyAqIGFuZCBhcmNoX3VubWFwIHRvIGJlIGluY2x1ZGVkIGluIGFzbS1GT08vbW11X2NvbnRleHQuaCBmb3IgYW55CisgKiBhcmNoIEZPTyB3aGljaCBkb2Vzbid0IG5lZWQgdG8gaG9vayB0aGVzZS4KICAqLwogI2lmbmRlZiBfQVNNX0dFTkVSSUNfTU1fSE9PS1NfSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfTU1fSE9PS1NfSApAQCAtMTUsNCArMTUsMTUgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfdW5tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9icHJtX21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKK30KKwogI2VuZGlmCS8qIF9BU01fR0VORVJJQ19NTV9IT09LU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL21zaS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWM1OGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tc2kuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfTVNJX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19NU0lfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2lmbmRlZiBOVU1fTVNJX0FMTE9DX1NDUkFUQ0hQQURfUkVHUworIyBkZWZpbmUgTlVNX01TSV9BTExPQ19TQ1JBVENIUEFEX1JFR1MJMgorI2VuZGlmCisKK3N0cnVjdCBtc2lfZGVzYzsKKworLyoqCisgKiBzdHJ1Y3QgbXNpX2FsbG9jX2luZm8gLSBEZWZhdWx0IHN0cnVjdHVyZSBmb3IgTVNJIGludGVycnVwdCBhbGxvY2F0aW9uLgorICogQGRlc2M6CVBvaW50ZXIgdG8gbXNpIGRlc2NyaXB0b3IKKyAqIEBod2lycToJQXNzb2NpYXRlZCBodyBpbnRlcnJ1cHQgbnVtYmVyIGluIHRoZSBkb21haW4KKyAqIEBzY3JhdGNocGFkOglTdG9yYWdlIGZvciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzY3JhdGNoIGRhdGEKKyAqCisgKiBBcmNoaXRlY3R1cmVzIGNhbiBwcm92aWRlIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbiBieSBub3QgaW5jbHVkaW5nCisgKiBhc20tZ2VuZXJpYy9tc2kuaCBpbnRvIHRoZWlyIGFyY2ggc3BlY2lmaWMgaGVhZGVyIGZpbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IG1zaV9hbGxvY19pbmZvIHsKKwlzdHJ1Y3QgbXNpX2Rlc2MJCQkqZGVzYzsKKwlpcnFfaHdfbnVtYmVyX3QJCQlod2lycTsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcJCXVsOworCQl2b2lkCQkJKnB0cjsKKwl9IHNjcmF0Y2hwYWRbTlVNX01TSV9BTExPQ19TQ1JBVENIUEFEX1JFR1NdOworfSBtc2lfYWxsb2NfaW5mb190OworCisjZGVmaW5lIEdFTkVSSUNfTVNJX0RPTUFJTl9PUFMJCTEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ByZWVtcHQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcHJlZW1wdC5oCmluZGV4IDFjZDNmNWQuLmViNmY5ZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcHJlZW1wdC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcHJlZW1wdC5oCkBAIC0yMyw5ICsyMyw2IEBACiAvKgogICogbXVzdCBiZSBtYWNyb3MgdG8gYXZvaWQgaGVhZGVyIHJlY3Vyc2lvbiBoZWxsCiAgKi8KLSNkZWZpbmUgdGFza19wcmVlbXB0X2NvdW50KHApIFwKLQkodGFza190aHJlYWRfaW5mbyhwKS0+cHJlZW1wdF9jb3VudCAmIH5QUkVFTVBUX05FRURfUkVTQ0hFRCkKLQogI2RlZmluZSBpbml0X3Rhc2tfcHJlZW1wdF9jb3VudChwKSBkbyB7IFwKIAl0YXNrX3RocmVhZF9pbmZvKHApLT5wcmVlbXB0X2NvdW50ID0gUFJFRU1QVF9ESVNBQkxFRDsgXAogfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjY29tcC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWNjb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZhMWY2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjY29tcC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1nZW5lcmljL3NlY2NvbXAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBMaW5hcm8gTGltaXRlZAorICogQXV0aG9yOiBBS0FTSEkgVGFrYWhpcm8gPHRha2FoaXJvLmFrYXNoaUBsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX1NFQ0NPTVBfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfU0VDQ09NUF9ICisKKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgJiYgIWRlZmluZWQoX19OUl9zZWNjb21wX3JlYWRfMzIpCisjZGVmaW5lIF9fTlJfc2VjY29tcF9yZWFkXzMyCQlfX05SX3JlYWQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3dyaXRlXzMyCQlfX05SX3dyaXRlCisjZGVmaW5lIF9fTlJfc2VjY29tcF9leGl0XzMyCQlfX05SX2V4aXQKKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybl8zMglfX05SX3J0X3NpZ3JldHVybgorI2VuZGlmIC8qIENPTkZJR19DT01QQVQgJiYgISBhbHJlYWR5IGRlZmluZWQgKi8KKworI2RlZmluZSBfX05SX3NlY2NvbXBfcmVhZAkJX19OUl9yZWFkCisjZGVmaW5lIF9fTlJfc2VjY29tcF93cml0ZQkJX19OUl93cml0ZQorI2RlZmluZSBfX05SX3NlY2NvbXBfZXhpdAkJX19OUl9leGl0CisjaWZuZGVmIF9fTlJfc2VjY29tcF9zaWdyZXR1cm4KKyNkZWZpbmUgX19OUl9zZWNjb21wX3NpZ3JldHVybgkJX19OUl9ydF9zaWdyZXR1cm4KKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX1NFQ0NPTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKaW5kZXggNTY3MmQ3ZS4uMDg4NDgwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCkBAIC05NiwxMCArOTYsOSBAQAogI2VuZGlmCiAJdW5zaWduZWQgbG9uZwkJc3RhcnQ7CiAJdW5zaWduZWQgbG9uZwkJZW5kOwotCXVuc2lnbmVkIGludAkJbmVlZF9mbHVzaCA6IDEsCS8qIERpZCBmcmVlIFBURXMgKi8KIAkvKiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBvcGVyYXRpb24gdG8gY2xlYXIKIAkgKiBhIGZ1bGwgbW0gYW5kIGNhbiBtYWtlIHNvbWUgb3B0aW1pemF0aW9ucyAqLwotCQkJCWZ1bGxtbSA6IDEsCisJdW5zaWduZWQgaW50CQlmdWxsbW0gOiAxLAogCS8qIHdlIGhhdmUgcGVyZm9ybWVkIGFuIG9wZXJhdGlvbiB3aGljaAogCSAqIHJlcXVpcmVzIGEgY29tcGxldGUgZmx1c2ggb2YgdGhlIHRsYiAqLwogCQkJCW5lZWRfZmx1c2hfYWxsIDogMTsKQEAgLTEyOCwxNiArMTI3LDU0IEBACiAJCXRsYl9mbHVzaF9tbXUodGxiKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX2FkanVzdF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwl0bGItPnN0YXJ0ID0gbWluKHRsYi0+c3RhcnQsIGFkZHJlc3MpOworCXRsYi0+ZW5kID0gbWF4KHRsYi0+ZW5kLCBhZGRyZXNzICsgUEFHRV9TSVpFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3Jlc2V0X3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCit7CisJdGxiLT5zdGFydCA9IFRBU0tfU0laRTsKKwl0bGItPmVuZCA9IDA7Cit9CisKKy8qCisgKiBJbiB0aGUgY2FzZSBvZiB0bGIgdm1hIGhhbmRsaW5nLCB3ZSBjYW4gb3B0aW1pc2UgdGhlc2UgYXdheSBpbiB0aGUKKyAqIGNhc2Ugd2hlcmUgd2UncmUgZG9pbmcgYSBmdWxsIE1NIGZsdXNoLiAgV2hlbiB3ZSdyZSBkb2luZyBhIG11bm1hcCwKKyAqIHRoZSB2bWFzIGFyZSBhZGp1c3RlZCB0byBvbmx5IGNvdmVyIHRoZSByZWdpb24gdG8gYmUgdG9ybiBkb3duLgorICovCisjaWZuZGVmIHRsYl9zdGFydF92bWEKKyNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgX190bGJfZW5kX3ZtYSh0bGIsIHZtYSkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKCF0bGItPmZ1bGxtbSAmJiB0bGItPmVuZCkgewkJCVwKKwkJCXRsYl9mbHVzaCh0bGIpOwkJCQlcCisJCQlfX3RsYl9yZXNldF9yYW5nZSh0bGIpOwkJCVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjaWZuZGVmIHRsYl9lbmRfdm1hCisjZGVmaW5lIHRsYl9lbmRfdm1hCV9fdGxiX2VuZF92bWEKKyNlbmRpZgorCisjaWZuZGVmIF9fdGxiX3JlbW92ZV90bGJfZW50cnkKKyNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZXAsIGFkZHJlc3MpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAvKioKICAqIHRsYl9yZW1vdmVfdGxiX2VudHJ5IC0gcmVtZW1iZXIgYSBwdGUgdW5tYXBwaW5nIGZvciBsYXRlciB0bGIgaW52YWxpZGF0aW9uLgogICoKLSAqIFJlY29yZCB0aGUgZmFjdCB0aGF0IHB0ZSdzIHdlcmUgcmVhbGx5IHVtYXBwZWQgaW4gLT5uZWVkX2ZsdXNoLCBzbyB3ZSBjYW4KLSAqIGxhdGVyIG9wdGltaXNlIGF3YXkgdGhlIHRsYiBpbnZhbGlkYXRlLiAgIFRoaXMgaGVscHMgd2hlbiB1c2Vyc3BhY2UgaXMKLSAqIHVubWFwcGluZyBhbHJlYWR5LXVubWFwcGVkIHBhZ2VzLCB3aGljaCBoYXBwZW5zIHF1aXRlIGEgbG90LgorICogUmVjb3JkIHRoZSBmYWN0IHRoYXQgcHRlJ3Mgd2VyZSByZWFsbHkgdW5tYXBwZWQgYnkgdXBkYXRpbmcgdGhlIHJhbmdlLAorICogc28gd2UgY2FuIGxhdGVyIG9wdGltaXNlIGF3YXkgdGhlIHRsYiBpbnZhbGlkYXRlLiAgIFRoaXMgaGVscHMgd2hlbgorICogdXNlcnNwYWNlIGlzIHVubWFwcGluZyBhbHJlYWR5LXVubWFwcGVkIHBhZ2VzLCB3aGljaCBoYXBwZW5zIHF1aXRlIGEgbG90LgogICovCiAjZGVmaW5lIHRsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykJCVwKIAlkbyB7CQkJCQkJCVwKLQkJdGxiLT5uZWVkX2ZsdXNoID0gMTsJCQkJXAorCQlfX3RsYl9hZGp1c3RfcmFuZ2UodGxiLCBhZGRyZXNzKTsJCVwKIAkJX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZXAsIGFkZHJlc3MpOwlcCiAJfSB3aGlsZSAoMCkKIApAQCAtMTUxLDI3ICsxODgsMjcgQEAKIAogI2RlZmluZSB0bGJfcmVtb3ZlX3BtZF90bGJfZW50cnkodGxiLCBwbWRwLCBhZGRyZXNzKQkJXAogCWRvIHsJCQkJCQkJXAotCQl0bGItPm5lZWRfZmx1c2ggPSAxOwkJCQlcCisJCV9fdGxiX2FkanVzdF9yYW5nZSh0bGIsIGFkZHJlc3MpOwkJXAogCQlfX3RsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeSh0bGIsIHBtZHAsIGFkZHJlc3MpOwlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBwdGVfZnJlZV90bGIodGxiLCBwdGVwLCBhZGRyZXNzKQkJCVwKIAlkbyB7CQkJCQkJCVwKLQkJdGxiLT5uZWVkX2ZsdXNoID0gMTsJCQkJXAorCQlfX3RsYl9hZGp1c3RfcmFuZ2UodGxiLCBhZGRyZXNzKTsJCVwKIAkJX19wdGVfZnJlZV90bGIodGxiLCBwdGVwLCBhZGRyZXNzKTsJCVwKIAl9IHdoaWxlICgwKQogCiAjaWZuZGVmIF9fQVJDSF9IQVNfNExFVkVMX0hBQ0sKICNkZWZpbmUgcHVkX2ZyZWVfdGxiKHRsYiwgcHVkcCwgYWRkcmVzcykJCQlcCiAJZG8gewkJCQkJCQlcCi0JCXRsYi0+bmVlZF9mbHVzaCA9IDE7CQkJCVwKKwkJX190bGJfYWRqdXN0X3JhbmdlKHRsYiwgYWRkcmVzcyk7CQlcCiAJCV9fcHVkX2ZyZWVfdGxiKHRsYiwgcHVkcCwgYWRkcmVzcyk7CQlcCiAJfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZGVmaW5lIHBtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHJlc3MpCQkJXAogCWRvIHsJCQkJCQkJXAotCQl0bGItPm5lZWRfZmx1c2ggPSAxOwkJCQlcCisJCV9fdGxiX2FkanVzdF9yYW5nZSh0bGIsIGFkZHJlc3MpOwkJXAogCQlfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHJlc3MpOwkJXAogCX0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvYXJtL3V4NTAwX3BtX2RvbWFpbnMuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvYXJtL3V4NTAwX3BtX2RvbWFpbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOThhNmMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9hcm0vdXg1MDBfcG1fZG9tYWlucy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTGluYXJvIEx0ZC4KKyAqCisgKiBBdXRob3I6IFVsZiBIYW5zc29uIDx1bGYuaGFuc3NvbkBsaW5hcm8ub3JnPgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKi8KKyNpZm5kZWYgX0RUX0JJTkRJTkdTX0FSTV9VWDUwMF9QTV9ET01BSU5TX0gKKyNkZWZpbmUgX0RUX0JJTkRJTkdTX0FSTV9VWDUwMF9QTV9ET01BSU5TX0gKKworI2RlZmluZSBET01BSU5fVkFQRQkJMAorCisvKiBOdW1iZXIgb2YgUE0gZG9tYWlucy4gKi8KKyNkZWZpbmUgTlJfRE9NQUlOUwkJKERPTUFJTl9WQVBFICsgMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2lteDUtY2xvY2suaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svaW14NS1jbG9jay5oCmluZGV4IDVmMjY2N2VjLi5mNGI3NDc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2lteDUtY2xvY2suaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2lteDUtY2xvY2suaApAQCAtMTk4LDYgKzE5OCw5IEBACiAjZGVmaW5lIElNWDVfQ0xLX09DUkFNCQkJMTg2CiAjZGVmaW5lIElNWDVfQ0xLX1NBSEFSQV9JUEdfR0FURQkxODcKICNkZWZpbmUgSU1YNV9DTEtfU0FUQV9SRUYJCTE4OAotI2RlZmluZSBJTVg1X0NMS19FTkQJCQkxODkKKyNkZWZpbmUgSU1YNV9DTEtfU1RFUF9TRUwJCTE4OQorI2RlZmluZSBJTVg1X0NMS19DUFVfUE9ERl9TRUwJCTE5MAorI2RlZmluZSBJTVg1X0NMS19BUk0JCQkxOTEKKyNkZWZpbmUgSU1YNV9DTEtfRU5ECQkJMTkyCiAKICNlbmRpZiAvKiBfX0RUX0JJTkRJTkdTX0NMT0NLX0lNWDVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzQwLWNsb2NrLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3NDAtY2xvY2suaAppbmRleCBmNmI0YjBmLi40NzYxMzVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3NDAtY2xvY2suaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3NDAtY2xvY2suaApAQCAtNDAsNiArNDAsNyBAQAogCiAvKiBNU1RQMiAqLwogI2RlZmluZSBSOEE3NzQwX0NMS19TQ0lGQTYJMzAKKyNkZWZpbmUgUjhBNzc0MF9DTEtfSU5UQ0EJMjkKICNkZWZpbmUgUjhBNzc0MF9DTEtfU0NJRkE3CTIyCiAjZGVmaW5lIFI4QTc3NDBfQ0xLX0RNQUMxCTE4CiAjZGVmaW5lIFI4QTc3NDBfQ0xLX0RNQUMyCTE3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTAtY2xvY2suaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc5MC1jbG9jay5oCmluZGV4IDhlYTdhYjAuLmMyN2IzYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc5MC1jbG9jay5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc5MC1jbG9jay5oCkBAIC0yNiw4ICsyNiwxOCBAQAogI2RlZmluZSBSOEE3NzkwX0NMS19NU0lPRjAJCTAKIAogLyogTVNUUDEgKi8KLSNkZWZpbmUgUjhBNzc5MF9DTEtfSlBVCQk2CisjZGVmaW5lIFI4QTc3OTBfQ0xLX1ZDUDEJCTAKKyNkZWZpbmUgUjhBNzc5MF9DTEtfVkNQMAkJMQorI2RlZmluZSBSOEE3NzkwX0NMS19WUEMxCQkyCisjZGVmaW5lIFI4QTc3OTBfQ0xLX1ZQQzAJCTMKKyNkZWZpbmUgUjhBNzc5MF9DTEtfSlBVCQkJNgorI2RlZmluZSBSOEE3NzkwX0NMS19TU1AxCQk5CiAjZGVmaW5lIFI4QTc3OTBfQ0xLX1RNVTEJCTExCisjZGVmaW5lIFI4QTc3OTBfQ0xLXzNERwkJCTEyCisjZGVmaW5lIFI4QTc3OTBfQ0xLXzJERE1BQwkJMTUKKyNkZWZpbmUgUjhBNzc5MF9DTEtfRkRQMV8yCQkxNworI2RlZmluZSBSOEE3NzkwX0NMS19GRFAxXzEJCTE4CisjZGVmaW5lIFI4QTc3OTBfQ0xLX0ZEUDFfMAkJMTkKICNkZWZpbmUgUjhBNzc5MF9DTEtfVE1VMwkJMjEKICNkZWZpbmUgUjhBNzc5MF9DTEtfVE1VMgkJMjIKICNkZWZpbmUgUjhBNzc5MF9DTEtfQ01UMAkJMjQKQEAgLTY4LDYgKzc4LDggQEAKICNkZWZpbmUgUjhBNzc5MF9DTEtfVVNCRE1BQzEJCTMxCiAKIC8qIE1TVFA1ICovCisjZGVmaW5lIFI4QTc3OTBfQ0xLX0FVRElPX0RNQUMxCQkxCisjZGVmaW5lIFI4QTc3OTBfQ0xLX0FVRElPX0RNQUMwCQkyCiAjZGVmaW5lIFI4QTc3OTBfQ0xLX1RIRVJNQUwJCTIyCiAjZGVmaW5lIFI4QTc3OTBfQ0xLX1BXTQkJCTIzCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcjhhNzc5MS1jbG9jay5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkxLWNsb2NrLmgKaW5kZXggNThjM2Y0OS4uM2VhMmJiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkxLWNsb2NrLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3NzkxLWNsb2NrLmgKQEAgLTI1LDggKzI1LDE1IEBACiAjZGVmaW5lIFI4QTc3OTFfQ0xLX01TSU9GMAkJMAogCiAvKiBNU1RQMSAqLwotI2RlZmluZSBSOEE3NzkxX0NMS19KUFUJCTYKKyNkZWZpbmUgUjhBNzc5MV9DTEtfVkNQMAkJMQorI2RlZmluZSBSOEE3NzkxX0NMS19WUEMwCQkzCisjZGVmaW5lIFI4QTc3OTFfQ0xLX0pQVQkJCTYKKyNkZWZpbmUgUjhBNzc5MV9DTEtfU1NQMQkJOQogI2RlZmluZSBSOEE3NzkxX0NMS19UTVUxCQkxMQorI2RlZmluZSBSOEE3NzkxX0NMS18zREcJCQkxMgorI2RlZmluZSBSOEE3NzkxX0NMS18yRERNQUMJCTE1CisjZGVmaW5lIFI4QTc3OTFfQ0xLX0ZEUDFfMQkJMTgKKyNkZWZpbmUgUjhBNzc5MV9DTEtfRkRQMV8wCQkxOQogI2RlZmluZSBSOEE3NzkxX0NMS19UTVUzCQkyMQogI2RlZmluZSBSOEE3NzkxX0NMS19UTVUyCQkyMgogI2RlZmluZSBSOEE3NzkxX0NMS19DTVQwCQkyNApAQCAtNjIsNiArNjksOCBAQAogI2RlZmluZSBSOEE3NzkxX0NMS19VU0JETUFDMQkJMzEKIAogLyogTVNUUDUgKi8KKyNkZWZpbmUgUjhBNzc5MV9DTEtfQVVESU9fRE1BQzEJCTEKKyNkZWZpbmUgUjhBNzc5MV9DTEtfQVVESU9fRE1BQzAJCTIKICNkZWZpbmUgUjhBNzc5MV9DTEtfVEhFUk1BTAkJMjIKICNkZWZpbmUgUjhBNzc5MV9DTEtfUFdNCQkJMjMKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3Nzk0LWNsb2NrLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3I4YTc3OTQtY2xvY2suaAppbmRleCA5YWMxMDQzLi5hYTljMjg2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3Nzk0LWNsb2NrLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9yOGE3Nzk0LWNsb2NrLmgKQEAgLTI2LDExICsyNiwxOCBAQAogI2RlZmluZSBSOEE3Nzk0X0NMS19NU0lPRjAJCTAKIAogLyogTVNUUDEgKi8KKyNkZWZpbmUgUjhBNzc5NF9DTEtfVkNQMAkJMQorI2RlZmluZSBSOEE3Nzk0X0NMS19WUEMwCQkzCiAjZGVmaW5lIFI4QTc3OTRfQ0xLX1RNVTEJCTExCisjZGVmaW5lIFI4QTc3OTRfQ0xLXzNERwkJCTEyCisjZGVmaW5lIFI4QTc3OTRfQ0xLXzJERE1BQwkJMTUKKyNkZWZpbmUgUjhBNzc5NF9DTEtfRkRQMV8wCQkxOQogI2RlZmluZSBSOEE3Nzk0X0NMS19UTVUzCQkyMQogI2RlZmluZSBSOEE3Nzk0X0NMS19UTVUyCQkyMgogI2RlZmluZSBSOEE3Nzk0X0NMS19DTVQwCQkyNAogI2RlZmluZSBSOEE3Nzk0X0NMS19UTVUwCQkyNQorI2RlZmluZSBSOEE3Nzk0X0NMS19WU1AxX0RVMAkJMjgKKyNkZWZpbmUgUjhBNzc5NF9DTEtfVlNQMV9TCQkzMQogCiAvKiBNU1RQMiAqLwogI2RlZmluZSBSOEE3Nzk0X0NMS19TQ0lGQTIJCTIKQEAgLTYxLDYgKzY4LDggQEAKICNkZWZpbmUgUjhBNzc5NF9DTEtfU0NJRjAJCTIxCiAKIC8qIE1TVFA4ICovCisjZGVmaW5lIFI4QTc3OTRfQ0xLX1ZJTjEJCTEwCisjZGVmaW5lIFI4QTc3OTRfQ0xLX1ZJTjAJCTExCiAjZGVmaW5lIFI4QTc3OTRfQ0xLX0VUSEVSCQkxMwogCiAvKiBNU1RQOSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zdGloNDA3LWNsa3MuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svc3RpaDQwNy1jbGtzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmMmI3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svc3RpaDQwNy1jbGtzLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIFRoaXMgaGVhZGVyIHByb3ZpZGVzIGNvbnN0YW50cyBjbGsgaW5kZXggU1RNaWNyb2VsZWN0cm9uaWNzCisgKiBTVGlINDA3IFNvQy4KKyAqLworI2lmbmRlZiBfRFRfQklORElOR1NfQ0xLX1NUSUg0MDcKKyNkZWZpbmUgX0RUX0JJTkRJTkdTX0NMS19TVElINDA3CisKKy8qIENMT0NLR0VOIEMwICovCisjZGVmaW5lIENMS19JQ05fR1BVCQkwCisjZGVmaW5lIENMS19GRE1BCQkxCisjZGVmaW5lIENMS19OQU5ECQkyCisjZGVmaW5lIENMS19IVkEJCQkzCisjZGVmaW5lIENMS19QUk9DX1NURkUJCTQKKyNkZWZpbmUgQ0xLX1BST0NfVFAJCTUKKyNkZWZpbmUgQ0xLX1JYX0lDTl9ETVUJCTYKKyNkZWZpbmUgQ0xLX1JYX0lDTl9ESVNQXzAJNgorI2RlZmluZSBDTEtfUlhfSUNOX0RJU1BfMQk2CisjZGVmaW5lIENMS19SWF9JQ05fSFZBCQk3CisjZGVmaW5lIENMS19SWF9JQ05fVFMJCTcKKyNkZWZpbmUgQ0xLX0lDTl9DUFUJCTgKKyNkZWZpbmUgQ0xLX1RYX0lDTl9ETVUJCTkKKyNkZWZpbmUgQ0xLX1RYX0lDTl9IVkEJCTkKKyNkZWZpbmUgQ0xLX1RYX0lDTl9UUwkJOQorI2RlZmluZSBDTEtfSUNOX0NPTVBPCQk5CisjZGVmaW5lIENMS19NTUNfMAkJMTAKKyNkZWZpbmUgQ0xLX01NQ18xCQkxMQorI2RlZmluZSBDTEtfSlBFR0RFQwkJMTIKKyNkZWZpbmUgQ0xLX0lDTl9SRUcJCTEzCisjZGVmaW5lIENMS19UUkFDRV9BOQkJMTMKKyNkZWZpbmUgQ0xLX1BUSV9TVE0JCTEzCisjZGVmaW5lIENMS19FWFQyRl9BOQkJMTMKKyNkZWZpbmUgQ0xLX0lDX0JESVNQXzAJCTE0CisjZGVmaW5lIENMS19JQ19CRElTUF8xCQkxNQorI2RlZmluZSBDTEtfUFBfRE1VCQkxNgorI2RlZmluZSBDTEtfVklEX0RNVQkJMTcKKyNkZWZpbmUgQ0xLX0RTU19MUEMJCTE4CisjZGVmaW5lIENMS19TVDIzMV9BVURfMAkJMTkKKyNkZWZpbmUgQ0xLX1NUMjMxX0dQXzAJCTE5CisjZGVmaW5lIENMS19TVDIzMV9HUF8xCQkyMAorI2RlZmluZSBDTEtfU1QyMzFfRE1VCQkyMQorI2RlZmluZSBDTEtfSUNOX0xNSQkJMjIKKyNkZWZpbmUgQ0xLX1RYX0lDTl9ESVNQXzAJMjMKKyNkZWZpbmUgQ0xLX1RYX0lDTl9ESVNQXzEJMjMKKyNkZWZpbmUgQ0xLX0lDTl9TQkMJCTI0CisjZGVmaW5lIENMS19TVEZFX0ZSQzIJCTI1CisjZGVmaW5lIENMS19FVEhfUEhZCQkyNgorI2RlZmluZSBDTEtfRVRIX1JFRl9QSFlDTEsJMjcKKyNkZWZpbmUgQ0xLX0ZMQVNIX1BST01JUAkyOAorI2RlZmluZSBDTEtfTUFJTl9ESVNQCQkyOQorI2RlZmluZSBDTEtfQVVYX0RJU1AJCTMwCisjZGVmaW5lIENMS19DT01QT19EVlAJCTMxCisKKy8qIENMT0NLR0VOIEQwICovCisjZGVmaW5lIENMS19QQ01fMAkJMAorI2RlZmluZSBDTEtfUENNXzEJCTEKKyNkZWZpbmUgQ0xLX1BDTV8yCQkyCisjZGVmaW5lIENMS19TUERJRkYJCTMKKworLyogQ0xPQ0tHRU4gRDIgKi8KKyNkZWZpbmUgQ0xLX1BJWF9NQUlOX0RJU1AJMAorI2RlZmluZSBDTEtfUElYX1BJUAkJMQorI2RlZmluZSBDTEtfUElYX0dEUDEJCTIKKyNkZWZpbmUgQ0xLX1BJWF9HRFAyCQkzCisjZGVmaW5lIENMS19QSVhfR0RQMwkJNAorI2RlZmluZSBDTEtfUElYX0dEUDQJCTUKKyNkZWZpbmUgQ0xLX1BJWF9BVVhfRElTUAk2CisjZGVmaW5lIENMS19ERU5DCQk3CisjZGVmaW5lIENMS19QSVhfSEREQUMJCTgKKyNkZWZpbmUgQ0xLX0hEREFDCQk5CisjZGVmaW5lIENMS19TRERBQwkJMTAKKyNkZWZpbmUgQ0xLX1BJWF9EVk8JCTExCisjZGVmaW5lIENMS19EVk8JCQkxMgorI2RlZmluZSBDTEtfUElYX0hETUkJCTEzCisjZGVmaW5lIENMS19UTURTX0hETUkJCTE0CisjZGVmaW5lIENMS19SRUZfSERNSVBIWQkJMTUKKworLyogQ0xPQ0tHRU4gRDMgKi8KKyNkZWZpbmUgQ0xLX1NURkVfRlJDMQkJMAorI2RlZmluZSBDTEtfVFNPVVRfMAkJMQorI2RlZmluZSBDTEtfVFNPVVRfMQkJMgorI2RlZmluZSBDTEtfTUNISQkJMworI2RlZmluZSBDTEtfVlNFTlNfQ09NUE8JCTQKKyNkZWZpbmUgQ0xLX0ZSQzFfUkVNT1RFCQk1CisjZGVmaW5lIENMS19MUENfMAkJNgorI2RlZmluZSBDTEtfTFBDXzEJCTcKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9zdGloNDEwLWNsa3MuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svc3RpaDQxMC1jbGtzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5N2E0YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svc3RpaDQxMC1jbGtzLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIFRoaXMgaGVhZGVyIHByb3ZpZGVzIGNvbnN0YW50cyBjbGsgaW5kZXggU1RNaWNyb2VsZWN0cm9uaWNzCisgKiBTVGlINDEwIFNvQy4KKyAqLworI2lmbmRlZiBfRFRfQklORElOR1NfQ0xLX1NUSUg0MTAKKyNkZWZpbmUgX0RUX0JJTkRJTkdTX0NMS19TVElINDEwCisKKyNpbmNsdWRlICJzdGloNDA3LWNsa3MuaCIKKworLyogU1RpSDQxMCBpbnRyb2R1Y2VzIG5ldyBjbG9jayBvdXRwdXRzIGNvbXBhcmVkIHRvIFNUaUg0MDcgKi8KKworLyogQ0xPQ0tHRU4gQzAgKi8KKyNkZWZpbmUgQ0xLX1RYX0lDTl9IQURFUwkzMgorI2RlZmluZSBDTEtfUlhfSUNOX0hBREVTCTMzCisjZGVmaW5lIENMS19JQ05fUkVHXzE2CQkzNAorI2RlZmluZSBDTEtfUFBfSEFERVMJCTM1CisjZGVmaW5lIENMS19DTFVTVF9IQURFUwkJMzYKKyNkZWZpbmUgQ0xLX0hXUEVfSEFERVMJCTM3CisjZGVmaW5lIENMS19GQ19IQURFUwkJMzgKKworLyogQ0xPQ0tHRU4gRDAgKi8KKyNkZWZpbmUgQ0xLX1BDTVIxMF9NQVNURVIJNAorI2RlZmluZSBDTEtfVVNCMl9QSFkJCTUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMTE0LWNhci5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTExNC1jYXIuaAppbmRleCBmYzEyNjIxLi41MzRjMDNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMTE0LWNhci5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmExMTQtY2FyLmgKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgVEVHUkExMTRfQ0xLX0kyUzAgMzAKIC8qIDMxICovCiAKLS8qIDMyICovCisjZGVmaW5lIFRFR1JBMTE0X0NMS19NQyAzMgogLyogMzMgKi8KICNkZWZpbmUgVEVHUkExMTRfQ0xLX0FQQkRNQSAzNAogLyogMzUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmExMjQtY2FyLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMTI0LWNhci5oCmluZGV4IDZiYWM2MzcuLmFmOWJjOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmExMjQtY2FyLmgKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTEyNC1jYXIuaApAQCAtNDgsNyArNDgsNyBAQAogI2RlZmluZSBURUdSQTEyNF9DTEtfSTJTMCAzMAogLyogMzEgKi8KIAotLyogMzIgKi8KKyNkZWZpbmUgVEVHUkExMjRfQ0xLX01DIDMyCiAvKiAzMyAqLwogI2RlZmluZSBURUdSQTEyNF9DTEtfQVBCRE1BIDM0CiAvKiAzNSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTIwLWNhci5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay90ZWdyYTIwLWNhci5oCmluZGV4IDk0MDYyMDcuLjA0NTAwYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svdGVncmEyMC1jYXIuaAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3RlZ3JhMjAtY2FyLmgKQEAgLTQ5LDcgKzQ5LDcgQEAKIC8qIDMwICovCiAjZGVmaW5lIFRFR1JBMjBfQ0xLX0NBQ0hFMiAzMQogCi0jZGVmaW5lIFRFR1JBMjBfQ0xLX01FTSAzMgorI2RlZmluZSBURUdSQTIwX0NMS19NQyAzMgogI2RlZmluZSBURUdSQTIwX0NMS19BSEJETUEgMzMKICNkZWZpbmUgVEVHUkEyMF9DTEtfQVBCRE1BIDM0CiAvKiAzNSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmExMTQtbWMuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvbWVtb3J5L3RlZ3JhMTE0LW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0ODk4NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvbWVtb3J5L3RlZ3JhMTE0LW1jLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBEVF9CSU5ESU5HU19NRU1PUllfVEVHUkExMTRfTUNfSAorI2RlZmluZSBEVF9CSU5ESU5HU19NRU1PUllfVEVHUkExMTRfTUNfSAorCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfUFRDCTAKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9EQwkxCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfRENCCTIKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9FUFAJMworI2RlZmluZSBURUdSQV9TV0dST1VQX0cyCTQKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9BVlBDCTUKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9OVgk2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSERBCTcKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9IQwk4CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTVNFTkMJOQorI2RlZmluZSBURUdSQV9TV0dST1VQX1BQQ1MJMTAKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9WREUJMTEKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9NUENPUkVMUAkxMgorI2RlZmluZSBURUdSQV9TV0dST1VQX01QQ09SRQkxMworI2RlZmluZSBURUdSQV9TV0dST1VQX1ZJCTE0CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSVNQCTE1CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfWFVTQl9IT1NUCTE2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfWFVTQl9ERVYJMTcKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9FTVVDSUYJMTgKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9UU0VDCTE5CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmExMjQtbWMuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvbWVtb3J5L3RlZ3JhMTI0LW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4ZWU3OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvbWVtb3J5L3RlZ3JhMTI0LW1jLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBEVF9CSU5ESU5HU19NRU1PUllfVEVHUkExMjRfTUNfSAorI2RlZmluZSBEVF9CSU5ESU5HU19NRU1PUllfVEVHUkExMjRfTUNfSAorCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfUFRDCTAKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9EQwkxCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfRENCCTIKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9BRkkJMworI2RlZmluZSBURUdSQV9TV0dST1VQX0FWUEMJNAorI2RlZmluZSBURUdSQV9TV0dST1VQX0hEQQk1CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSEMJNgorI2RlZmluZSBURUdSQV9TV0dST1VQX01TRU5DCTcKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9QUENTCTgKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9TQVRBCTkKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9WREUJMTAKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9NUENPUkVMUAkxMQorI2RlZmluZSBURUdSQV9TV0dST1VQX01QQ09SRQkxMgorI2RlZmluZSBURUdSQV9TV0dST1VQX0lTUDIJMTMKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9YVVNCX0hPU1QJMTQKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9YVVNCX0RFVgkxNQorI2RlZmluZSBURUdSQV9TV0dST1VQX0lTUDJCCTE2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfVFNFQwkxNworI2RlZmluZSBURUdSQV9TV0dST1VQX0E5QVZQCTE4CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfR1BVCTE5CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfU0RNTUMxQQkyMAorI2RlZmluZSBURUdSQV9TV0dST1VQX1NETU1DMkEJMjEKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9TRE1NQzNBCTIyCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfU0RNTUM0QQkyMworI2RlZmluZSBURUdSQV9TV0dST1VQX1ZJQwkyNAorI2RlZmluZSBURUdSQV9TV0dST1VQX1ZJCTI1CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmEzMC1tYy5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9tZW1vcnkvdGVncmEzMC1tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMmJlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL21lbW9yeS90ZWdyYTMwLW1jLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBEVF9CSU5ESU5HU19NRU1PUllfVEVHUkEzMF9NQ19ICisjZGVmaW5lIERUX0JJTkRJTkdTX01FTU9SWV9URUdSQTMwX01DX0gKKworI2RlZmluZSBURUdSQV9TV0dST1VQX1BUQwkwCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfREMJMQorI2RlZmluZSBURUdSQV9TV0dST1VQX0RDQgkyCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfRVBQCTMKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9HMgk0CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTVBFCTUKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9WSQk2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfQUZJCTcKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9BVlBDCTgKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9OVgk5CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTlYyCTEwCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSERBCTExCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSEMJMTIKKyNkZWZpbmUgVEVHUkFfU1dHUk9VUF9QUENTCTEzCisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfU0FUQQkxNAorI2RlZmluZSBURUdSQV9TV0dST1VQX1ZERQkxNQorI2RlZmluZSBURUdSQV9TV0dST1VQX01QQ09SRUxQCTE2CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfTVBDT1JFCTE3CisjZGVmaW5lIFRFR1JBX1NXR1JPVVBfSVNQCTE4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZWd1bGF0b3IvbWF4aW0sbWF4Nzc4MDIuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvcmVndWxhdG9yL21heGltLG1heDc3ODAyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyODYzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvcmVndWxhdG9yL21heGltLG1heDc3ODAyLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBHb29nbGUsIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogRGV2aWNlIFRyZWUgYmluZGluZyBjb25zdGFudHMgZm9yIHRoZSBNYXhpbSA3NzgwMiBQTUlDIHJlZ3VsYXRvcnMKKyAqLworCisjaWZuZGVmIF9EVF9CSU5ESU5HU19SRUdVTEFUT1JfTUFYSU1fTUFYNzc4MDJfSAorI2RlZmluZSBfRFRfQklORElOR1NfUkVHVUxBVE9SX01BWElNX01BWDc3ODAyX0gKKworLyogUmVndWxhdG9yIG9wZXJhdGluZyBtb2RlcyAqLworI2RlZmluZSBNQVg3NzgwMl9PUE1PREVfTFAJMQorI2RlZmluZSBNQVg3NzgwMl9PUE1PREVfTk9STUFMCTMKKworI2VuZGlmIC8qIF9EVF9CSU5ESU5HU19SRUdVTEFUT1JfTUFYSU1fTUFYNzc4MDJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZXNldC1jb250cm9sbGVyL3N0aWg0MDctcmVzZXRzLmggYi9pbmNsdWRlL2R0LWJpbmRpbmdzL3Jlc2V0LWNvbnRyb2xsZXIvc3RpaDQwNy1yZXNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmQ0MzI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZXNldC1jb250cm9sbGVyL3N0aWg0MDctcmVzZXRzLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIFRoaXMgaGVhZGVyIHByb3ZpZGVzIGNvbnN0YW50cyBmb3IgdGhlIHJlc2V0IGNvbnRyb2xsZXIKKyAqIGJhc2VkIHBlcmlwaGVyYWwgcG93ZXJkb3duIHJlcXVlc3RzIG9uIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqIFNUaUg0MDcgU29DLgorICovCisjaWZuZGVmIF9EVF9CSU5ESU5HU19SRVNFVF9DT05UUk9MTEVSX1NUSUg0MDcKKyNkZWZpbmUgX0RUX0JJTkRJTkdTX1JFU0VUX0NPTlRST0xMRVJfU1RJSDQwNworCisvKiBQb3dlcmRvd24gcmVxdWVzdHMgY29udHJvbCAwICovCisjZGVmaW5lIFNUSUg0MDdfRU1JU1NfUE9XRVJET1dOCQkwCisjZGVmaW5lIFNUSUg0MDdfTkFORF9QT1dFUkRPV04JCTEKKworLyogU3lucCBHTUFDIFBvd2VyRG93biAqLworI2RlZmluZSBTVElINDA3X0VUSDFfUE9XRVJET1dOCQkyCisKKy8qIFBvd2VyZG93biByZXF1ZXN0cyBjb250cm9sIDEgKi8KKyNkZWZpbmUgU1RJSDQwN19VU0IzX1BPV0VSRE9XTgkJMworI2RlZmluZSBTVElINDA3X1VTQjJfUE9SVDFfUE9XRVJET1dOCTQKKyNkZWZpbmUgU1RJSDQwN19VU0IyX1BPUlQwX1BPV0VSRE9XTgk1CisjZGVmaW5lIFNUSUg0MDdfUENJRTFfUE9XRVJET1dOCQk2CisjZGVmaW5lIFNUSUg0MDdfUENJRTBfUE9XRVJET1dOCQk3CisjZGVmaW5lIFNUSUg0MDdfU0FUQTFfUE9XRVJET1dOCQk4CisjZGVmaW5lIFNUSUg0MDdfU0FUQTBfUE9XRVJET1dOCQk5CisKKy8qIFJlc2V0IGRlZmluZXMgKi8KKyNkZWZpbmUgU1RJSDQwN19FVEgxX1NPRlRSRVNFVAkJMAorI2RlZmluZSBTVElINDA3X01NQzFfU09GVFJFU0VUCQkxCisjZGVmaW5lIFNUSUg0MDdfUElDT1BIWV9TT0ZUUkVTRVQJMgorI2RlZmluZSBTVElINDA3X0lSQl9TT0ZUUkVTRVQJCTMKKyNkZWZpbmUgU1RJSDQwN19QQ0lFMF9TT0ZUUkVTRVQJCTQKKyNkZWZpbmUgU1RJSDQwN19QQ0lFMV9TT0ZUUkVTRVQJCTUKKyNkZWZpbmUgU1RJSDQwN19TQVRBMF9TT0ZUUkVTRVQJCTYKKyNkZWZpbmUgU1RJSDQwN19TQVRBMV9TT0ZUUkVTRVQJCTcKKyNkZWZpbmUgU1RJSDQwN19NSVBIWTBfU09GVFJFU0VUCTgKKyNkZWZpbmUgU1RJSDQwN19NSVBIWTFfU09GVFJFU0VUCTkKKyNkZWZpbmUgU1RJSDQwN19NSVBIWTJfU09GVFJFU0VUCTEwCisjZGVmaW5lIFNUSUg0MDdfU0FUQTBfUFdSX1NPRlRSRVNFVAkxMQorI2RlZmluZSBTVElINDA3X1NBVEExX1BXUl9TT0ZUUkVTRVQJMTIKKyNkZWZpbmUgU1RJSDQwN19ERUxUQV9TT0ZUUkVTRVQJCTEzCisjZGVmaW5lIFNUSUg0MDdfQkxJVFRFUl9TT0ZUUkVTRVQJMTQKKyNkZWZpbmUgU1RJSDQwN19IRFRWT1VUX1NPRlRSRVNFVAkxNQorI2RlZmluZSBTVElINDA3X0hEUVZEUF9TT0ZUUkVTRVQJMTYKKyNkZWZpbmUgU1RJSDQwN19WRFBfQVVYX1NPRlRSRVNFVAkxNworI2RlZmluZSBTVElINDA3X0NPTVBPX1NPRlRSRVNFVAkJMTgKKyNkZWZpbmUgU1RJSDQwN19IRE1JX1RYX1BIWV9TT0ZUUkVTRVQJMTkKKyNkZWZpbmUgU1RJSDQwN19KUEVHX0RFQ19TT0ZUUkVTRVQJMjAKKyNkZWZpbmUgU1RJSDQwN19WUDhfREVDX1NPRlRSRVNFVAkyMQorI2RlZmluZSBTVElINDA3X0dQVV9TT0ZUUkVTRVQJCTIyCisjZGVmaW5lIFNUSUg0MDdfSFZBX1NPRlRSRVNFVAkJMjMKKyNkZWZpbmUgU1RJSDQwN19FUkFNX0hWQV9TT0ZUUkVTRVQJMjQKKyNkZWZpbmUgU1RJSDQwN19MUE1fU09GVFJFU0VUCQkyNQorI2RlZmluZSBTVElINDA3X0tFWVNDQU5fU09GVFJFU0VUCTI2CisjZGVmaW5lIFNUSUg0MDdfVVNCMl9QT1JUMF9TT0ZUUkVTRVQJMjcKKyNkZWZpbmUgU1RJSDQwN19VU0IyX1BPUlQxX1NPRlRSRVNFVAkyOAorCisvKiBQaWNvcGh5IHJlc2V0IGRlZmluZXMgKi8KKyNkZWZpbmUgU1RJSDQwN19QSUNPUEhZMF9SRVNFVAkJMAorI2RlZmluZSBTVElINDA3X1BJQ09QSFkxX1JFU0VUCQkxCisjZGVmaW5lIFNUSUg0MDdfUElDT1BIWTJfUkVTRVQJCTIKKworI2VuZGlmIC8qIF9EVF9CSU5ESU5HU19SRVNFVF9DT05UUk9MTEVSX1NUSUg0MDcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaS5oIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKaW5kZXggNDA3YTEyZi4uNmJmZjgzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiBmb3Igc3RydWN0IHJlc291cmNlICovCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4KIAogI2lmbmRlZiBfTElOVVgKICNkZWZpbmUgX0xJTlVYCkBAIC0xMjMsNiArMTI0LDEwIEBACiAKIGludCBhY3BpX3RhYmxlX2luaXQgKHZvaWQpOwogaW50IGFjcGlfdGFibGVfcGFyc2UoY2hhciAqaWQsIGFjcGlfdGJsX3RhYmxlX2hhbmRsZXIgaGFuZGxlcik7CitpbnQgX19pbml0IGFjcGlfcGFyc2VfZW50cmllcyhjaGFyICppZCwgdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplLAorCQkJICAgICAgYWNwaV90YmxfZW50cnlfaGFuZGxlciBoYW5kbGVyLAorCQkJICAgICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZV9oZWFkZXIsCisJCQkgICAgICBpbnQgZW50cnlfaWQsIHVuc2lnbmVkIGludCBtYXhfZW50cmllcyk7CiBpbnQgX19pbml0IGFjcGlfdGFibGVfcGFyc2VfZW50cmllcyhjaGFyICppZCwgdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplLAogCQkJCSAgICBpbnQgZW50cnlfaWQsCiAJCQkJICAgIGFjcGlfdGJsX2VudHJ5X2hhbmRsZXIgaGFuZGxlciwKQEAgLTQyMywxNCArNDI4LDExIEBACiBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKmFjcGlfbWF0Y2hfZGV2aWNlKGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCAqaWRzLAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KTsKIAotc3RhdGljIGlubGluZSBib29sIGFjcGlfZHJpdmVyX21hdGNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQotewotCXJldHVybiAhIWFjcGlfbWF0Y2hfZGV2aWNlKGRydi0+YWNwaV9tYXRjaF90YWJsZSwgZGV2KTsKLX0KLQorZXh0ZXJuIGJvb2wgYWNwaV9kcml2ZXJfbWF0Y2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOwogaW50IGFjcGlfZGV2aWNlX3VldmVudF9tb2RhbGlhcyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKik7CiBpbnQgYWNwaV9kZXZpY2VfbW9kYWxpYXMoc3RydWN0IGRldmljZSAqLCBjaGFyICosIGludCk7Cit2b2lkIGFjcGlfd2Fsa19kZXBfZGV2aWNlX2xpc3QoYWNwaV9oYW5kbGUgaGFuZGxlKTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYWNwaV9jcmVhdGVfcGxhdGZvcm1fZGV2aWNlKHN0cnVjdCBhY3BpX2RldmljZSAqKTsKICNkZWZpbmUgQUNQSV9QVFIoX3B0cikJKF9wdHIpCkBAIC00NDMsNiArNDQ1LDIzIEBACiAjZGVmaW5lIEFDUElfQ09NUEFOSU9OX1NFVChkZXYsIGFkZXYpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgQUNQSV9IQU5ETEUoZGV2KQkJKE5VTEwpCiAKK3N0cnVjdCBmd25vZGVfaGFuZGxlOworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfYWNwaV9ub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCit7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9ub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmFjcGlfZndub2RlX2hhbmRsZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYWNwaV9kZXZfbmFtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYpCiB7CiAJcmV0dXJuIE5VTEw7CkBAIC01NTMsMTYgKzU3MiwyNiBAQAogI2RlZmluZSBhY3BpX29zX3NldF9wcmVwYXJlX3NsZWVwKGZ1bmMsIHBtMWFfY3RybCwgcG0xYl9jdHJsKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FDUEkpICYmIGRlZmluZWQoQ09ORklHX1BNX1JVTlRJTUUpCisjaWYgZGVmaW5lZChDT05GSUdfQUNQSSkgJiYgZGVmaW5lZChDT05GSUdfUE0pCiBpbnQgYWNwaV9kZXZfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CiBpbnQgYWNwaV9kZXZfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKIGludCBhY3BpX3N1YnN5c19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKIGludCBhY3BpX3N1YnN5c19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2Rldl9wbV9nZXRfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IGFjcGlfZGV2X3BtX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgcG93ZXJfb24pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGFjcGlfZGV2X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGFjcGlfZGV2X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgYWNwaV9zdWJzeXNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgYWNwaV9zdWJzeXNfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXZfcG1fZ2V0X25vZGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBOVUxMOworfQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9kZXZfcG1fYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBwb3dlcl9vbikKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQUNQSSkgJiYgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCkBAIC01ODUsMjAgKzYxNCw2IEBACiBzdGF0aWMgaW5saW5lIGludCBhY3BpX3N1YnN5c19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FDUEkpICYmIGRlZmluZWQoQ09ORklHX1BNKQotc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2Rldl9wbV9nZXRfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotaW50IGFjcGlfZGV2X3BtX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgcG93ZXJfb24pOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2Rldl9wbV9nZXRfbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBhY3BpX2Rldl9wbV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2LCBib29sIHBvd2VyX29uKQotewotCXJldHVybiAtRU5PREVWOwotfQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQUNQSQogX19wcmludGYoMywgNCkKIHZvaWQgYWNwaV9oYW5kbGVfcHJpbnRrKGNvbnN0IGNoYXIgKmxldmVsLCBhY3BpX2hhbmRsZSBoYW5kbGUsCkBAIC02NTksNCArNjc0LDExNCBAQAogI2VuZGlmCiAjZW5kaWYKIAorc3RydWN0IGFjcGlfZ3Bpb19wYXJhbXMgeworCXVuc2lnbmVkIGludCBjcnNfZW50cnlfaW5kZXg7CisJdW5zaWduZWQgaW50IGxpbmVfaW5kZXg7CisJYm9vbCBhY3RpdmVfbG93OworfTsKKworc3RydWN0IGFjcGlfZ3Bpb19tYXBwaW5nIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IHN0cnVjdCBhY3BpX2dwaW9fcGFyYW1zICpkYXRhOworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0FDUEkpICYmIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpCitpbnQgYWNwaV9kZXZfYWRkX2RyaXZlcl9ncGlvcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgYWNwaV9ncGlvX21hcHBpbmcgKmdwaW9zKTsKKworc3RhdGljIGlubGluZSB2b2lkIGFjcGlfZGV2X3JlbW92ZV9kcml2ZXJfZ3Bpb3Moc3RydWN0IGFjcGlfZGV2aWNlICphZGV2KQoreworCWlmIChhZGV2KQorCQlhZGV2LT5kcml2ZXJfZ3Bpb3MgPSBOVUxMOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfZGV2X2FkZF9kcml2ZXJfZ3Bpb3Moc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGFjcGlfZ3Bpb19tYXBwaW5nICpncGlvcykKK3sKKwlyZXR1cm4gLUVOWElPOworfQorc3RhdGljIGlubGluZSB2b2lkIGFjcGlfZGV2X3JlbW92ZV9kcml2ZXJfZ3Bpb3Moc3RydWN0IGFjcGlfZGV2aWNlICphZGV2KSB7fQorI2VuZGlmCisKKy8qIERldmljZSBwcm9wZXJ0aWVzICovCisKKyNkZWZpbmUgTUFYX0FDUElfUkVGRVJFTkNFX0FSR1MJOAorc3RydWN0IGFjcGlfcmVmZXJlbmNlX2FyZ3MgeworCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldjsKKwlzaXplX3QgbmFyZ3M7CisJdTY0IGFyZ3NbTUFYX0FDUElfUkVGRVJFTkNFX0FSR1NdOworfTsKKworI2lmZGVmIENPTkZJR19BQ1BJCitpbnQgYWNwaV9kZXZfZ2V0X3Byb3BlcnR5KHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgYWNwaV9vYmplY3RfdHlwZSB0eXBlLCBjb25zdCB1bmlvbiBhY3BpX29iamVjdCAqKm9iaik7CitpbnQgYWNwaV9kZXZfZ2V0X3Byb3BlcnR5X2FycmF5KHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlhY3BpX29iamVjdF90eXBlIHR5cGUsCisJCQkJY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKipvYmopOworaW50IGFjcGlfZGV2X2dldF9wcm9wZXJ0eV9yZWZlcmVuY2Uoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAorCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgaW5kZXgsCisJCQkJICAgIHN0cnVjdCBhY3BpX3JlZmVyZW5jZV9hcmdzICphcmdzKTsKKworaW50IGFjcGlfZGV2X3Byb3BfZ2V0KHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwgY29uc3QgY2hhciAqcHJvcG5hbWUsCisJCSAgICAgIHZvaWQgKip2YWxwdHIpOworaW50IGFjcGlfZGV2X3Byb3BfcmVhZF9zaW5nbGUoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LCBjb25zdCBjaGFyICpwcm9wbmFtZSwKKwkJCSAgICAgIGVudW0gZGV2X3Byb3BfdHlwZSBwcm9wdHlwZSwgdm9pZCAqdmFsKTsKK2ludCBhY3BpX2Rldl9wcm9wX3JlYWQoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LCBjb25zdCBjaGFyICpwcm9wbmFtZSwKKwkJICAgICAgIGVudW0gZGV2X3Byb3BfdHlwZSBwcm9wdHlwZSwgdm9pZCAqdmFsLCBzaXplX3QgbnZhbCk7CisKK3N0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9nZXRfbmV4dF9jaGlsZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBhY3BpX2RldmljZSAqY2hpbGQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfZGV2X2dldF9wcm9wZXJ0eShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYsCisJCQkJCWNvbnN0IGNoYXIgKm5hbWUsIGFjcGlfb2JqZWN0X3R5cGUgdHlwZSwKKwkJCQkJY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKipvYmopCit7CisJcmV0dXJuIC1FTlhJTzsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfZGV2X2dldF9wcm9wZXJ0eV9hcnJheShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgICAgIGFjcGlfb2JqZWN0X3R5cGUgdHlwZSwKKwkJCQkJICAgICAgY29uc3QgdW5pb24gYWNwaV9vYmplY3QgKipvYmopCit7CisJcmV0dXJuIC1FTlhJTzsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfZGV2X2dldF9wcm9wZXJ0eV9yZWZlcmVuY2Uoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAorCQkJCWNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmNlbGxzX25hbWUsCisJCQkJc2l6ZV90IGluZGV4LCBzdHJ1Y3QgYWNwaV9yZWZlcmVuY2VfYXJncyAqYXJncykKK3sKKwlyZXR1cm4gLUVOWElPOworfQorCitzdGF0aWMgaW5saW5lIGludCBhY3BpX2Rldl9wcm9wX2dldChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYsCisJCQkJICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCSAgICB2b2lkICoqdmFscHRyKQoreworCXJldHVybiAtRU5YSU87Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfZGV2X3Byb3BfcmVhZF9zaW5nbGUoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LAorCQkJCQkgICAgY29uc3QgY2hhciAqcHJvcG5hbWUsCisJCQkJCSAgICBlbnVtIGRldl9wcm9wX3R5cGUgcHJvcHR5cGUsCisJCQkJCSAgICB2b2lkICp2YWwpCit7CisJcmV0dXJuIC1FTlhJTzsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWNwaV9kZXZfcHJvcF9yZWFkKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCSAgICAgZW51bSBkZXZfcHJvcF90eXBlIHByb3B0eXBlLAorCQkJCSAgICAgdm9pZCAqdmFsLCBzaXplX3QgbnZhbCkKK3sKKwlyZXR1cm4gLUVOWElPOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9nZXRfbmV4dF9jaGlsZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmNoaWxkKQoreworCXJldHVybiBOVUxMOworfQorCisjZW5kaWYKKwogI2VuZGlmCS8qX0xJTlVYX0FDUElfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWVsLW1jaS5oIGIvaW5jbHVkZS9saW51eC9hdG1lbC1tY2kuaAppbmRleCA5MWI3N2Y4Li45MTc3OTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0bWVsLW1jaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRtZWwtbWNpLmgKQEAgLTExLDYgKzExLDcgQEAKICAqIEBkZXRlY3RfcGluOiBHUElPIHBpbiB3aXJlZCB0byB0aGUgY2FyZCBkZXRlY3Qgc3dpdGNoCiAgKiBAd3BfcGluOiBHUElPIHBpbiB3aXJlZCB0byB0aGUgd3JpdGUgcHJvdGVjdCBzZW5zb3IKICAqIEBkZXRlY3RfaXNfYWN0aXZlX2hpZ2g6IFRoZSBzdGF0ZSBvZiB0aGUgZGV0ZWN0IHBpbiB3aGVuIGl0IGlzIGFjdGl2ZQorICogQG5vbl9yZW1vdmFibGU6IFRoZSBzbG90IGlzIG5vdCByZW1vdmFibGUsIG9ubHkgZGV0ZWN0IG9uY2UKICAqCiAgKiBJZiBhIGdpdmVuIHNsb3QgaXMgbm90IHByZXNlbnQgb24gdGhlIGJvYXJkLCBAYnVzX3dpZHRoIHNob3VsZCBiZQogICogc2V0IHRvIDAuIFRoZSBvdGhlciBmaWVsZHMgYXJlIGlnbm9yZWQgaW4gdGhpcyBjYXNlLgpAQCAtMjYsNiArMjcsNyBAQAogCWludAkJCWRldGVjdF9waW47CiAJaW50CQkJd3BfcGluOwogCWJvb2wJCQlkZXRlY3RfaXNfYWN0aXZlX2hpZ2g7CisJYm9vbAkJCW5vbl9yZW1vdmFibGU7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCBlNThmZTdkLi4wYzA0OTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC0xMzAsNiArMTMwLDcgQEAKICNkZWZpbmUgQVVESVRfSU5PREVfSElEREVOCTIJLyogYXVkaXQgcmVjb3JkIHNob3VsZCBiZSBoaWRkZW4gKi8KIGV4dGVybiB2b2lkIF9fYXVkaXRfaW5vZGUoc3RydWN0IGZpbGVuYW1lICpuYW1lLCBjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJdW5zaWduZWQgaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkIF9fYXVkaXRfZmlsZShjb25zdCBzdHJ1Y3QgZmlsZSAqKTsKIGV4dGVybiB2b2lkIF9fYXVkaXRfaW5vZGVfY2hpbGQoY29uc3Qgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCQkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgdHlwZSk7CkBAIC0xODMsNiArMTg0LDExIEBACiAJCV9fYXVkaXRfaW5vZGUobmFtZSwgZGVudHJ5LCBmbGFncyk7CiAJfQogfQorc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKHVubGlrZWx5KCFhdWRpdF9kdW1teV9jb250ZXh0KCkpKQorCQlfX2F1ZGl0X2ZpbGUoZmlsZSk7Cit9CiBzdGF0aWMgaW5saW5lIHZvaWQgYXVkaXRfaW5vZGVfcGFyZW50X2hpZGRlbihzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsCiAJCQkJCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CkBAIC0zNTcsNiArMzYzLDkgQEAKIAkJCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJdW5zaWduZWQgaW50IHBhcmVudCkKIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCit7Cit9CiBzdGF0aWMgaW5saW5lIHZvaWQgYXVkaXRfaW5vZGVfcGFyZW50X2hpZGRlbihzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsCiAJCQkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogeyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oIGIvaW5jbHVkZS9saW51eC9ibGstbXEuaAppbmRleCBjOWJlMTU4Li4xNWY3MDM0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGstbXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oCkBAIC0xNjcsNiArMTY3LDIzIEBACiAJCWdmcF90IGdmcCwgYm9vbCByZXNlcnZlZCk7CiBzdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX3RhZ190b19ycShzdHJ1Y3QgYmxrX21xX3RhZ3MgKnRhZ3MsIHVuc2lnbmVkIGludCB0YWcpOwogCitlbnVtIHsKKwlCTEtfTVFfVU5JUVVFX1RBR19CSVRTID0gMTYsCisJQkxLX01RX1VOSVFVRV9UQUdfTUFTSyA9ICgxIDw8IEJMS19NUV9VTklRVUVfVEFHX0JJVFMpIC0gMSwKK307CisKK3UzMiBibGtfbXFfdW5pcXVlX3RhZyhzdHJ1Y3QgcmVxdWVzdCAqcnEpOworCitzdGF0aWMgaW5saW5lIHUxNiBibGtfbXFfdW5pcXVlX3RhZ190b19od3EodTMyIHVuaXF1ZV90YWcpCit7CisJcmV0dXJuIHVuaXF1ZV90YWcgPj4gQkxLX01RX1VOSVFVRV9UQUdfQklUUzsKK30KKworc3RhdGljIGlubGluZSB1MTYgYmxrX21xX3VuaXF1ZV90YWdfdG9fdGFnKHUzMiB1bmlxdWVfdGFnKQoreworCXJldHVybiB1bmlxdWVfdGFnICYgQkxLX01RX1VOSVFVRV9UQUdfTUFTSzsKK30KKwogc3RydWN0IGJsa19tcV9od19jdHggKmJsa19tcV9tYXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgY29uc3QgaW50IGN0eF9pbmRleCk7CiBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqYmxrX21xX2FsbG9jX3NpbmdsZV9od19xdWV1ZShzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKiwgdW5zaWduZWQgaW50LCBpbnQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCBhYWMwZjllLi4wNDk1ZTM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTM5OCw3ICszOTgsNyBAQAogCSAqLwogCXN0cnVjdCBrb2JqZWN0IG1xX2tvYmo7CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJaW50CQkJcnBtX3N0YXR1czsKIAl1bnNpZ25lZCBpbnQJCW5yX3BlbmRpbmc7CkBAIC0xMDU3LDcgKzEwNTcsNyBAQAogLyoKICAqIGJsb2NrIGxheWVyIHJ1bnRpbWUgcG0gZnVuY3Rpb25zCiAgKi8KLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogZXh0ZXJuIHZvaWQgYmxrX3BtX3J1bnRpbWVfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgYmxrX3ByZV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3Bvc3RfcnVudGltZV9zdXNwZW5kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgZXJyKTsKQEAgLTExMzYsNyArMTEzNiw2IEBACiAvKgogICogdGFnIHN0dWZmCiAgKi8KLSNkZWZpbmUgYmxrX3JxX3RhZ2dlZChycSkJCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfUVVFVUVEKQogZXh0ZXJuIGludCBibGtfcXVldWVfc3RhcnRfdGFnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogZXh0ZXJuIHN0cnVjdCByZXF1ZXN0ICpibGtfcXVldWVfZmluZF90YWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9lbmRfdGFnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKaW5kZXggMWQ1MTk2OC4uNjQxZTU2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC0xMTMsNiArMTEzLDE5IEBACiB9CiAKIC8qKgorICogY3NzX2dldF9tYW55IC0gb2J0YWluIHJlZmVyZW5jZXMgb24gdGhlIHNwZWNpZmllZCBjc3MKKyAqIEBjc3M6IHRhcmdldCBjc3MKKyAqIEBuOiBudW1iZXIgb2YgcmVmZXJlbmNlcyB0byBnZXQKKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgYWxyZWFkeSBoYXZlIGEgcmVmZXJlbmNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY3NzX2dldF9tYW55KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIHVuc2lnbmVkIGludCBuKQoreworCWlmICghKGNzcy0+ZmxhZ3MgJiBDU1NfTk9fUkVGKSkKKwkJcGVyY3B1X3JlZl9nZXRfbWFueSgmY3NzLT5yZWZjbnQsIG4pOworfQorCisvKioKICAqIGNzc190cnlnZXQgLSB0cnkgdG8gb2J0YWluIGEgcmVmZXJlbmNlIG9uIHRoZSBzcGVjaWZpZWQgY3NzCiAgKiBAY3NzOiB0YXJnZXQgY3NzCiAgKgpAQCAtMTU5LDYgKzE3MiwxOSBAQAogCQlwZXJjcHVfcmVmX3B1dCgmY3NzLT5yZWZjbnQpOwogfQogCisvKioKKyAqIGNzc19wdXRfbWFueSAtIHB1dCBjc3MgcmVmZXJlbmNlcworICogQGNzczogdGFyZ2V0IGNzcworICogQG46IG51bWJlciBvZiByZWZlcmVuY2VzIHRvIHB1dAorICoKKyAqIFB1dCByZWZlcmVuY2VzIG9idGFpbmVkIHZpYSBjc3NfZ2V0KCkgYW5kIGNzc190cnlnZXRfb25saW5lKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjc3NfcHV0X21hbnkoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgdW5zaWduZWQgaW50IG4pCit7CisJaWYgKCEoY3NzLT5mbGFncyAmIENTU19OT19SRUYpKQorCQlwZXJjcHVfcmVmX3B1dF9tYW55KCZjc3MtPnJlZmNudCwgbik7Cit9CisKIC8qIGJpdHMgaW4gc3RydWN0IGNncm91cCBmbGFncyBmaWVsZCAqLwogZW51bSB7CiAJLyogQ29udHJvbCBHcm91cCByZXF1aXJlcyByZWxlYXNlIG5vdGlmaWNhdGlvbnMgdG8gdXNlcnNwYWNlICovCkBAIC0zNjcsOCArMzkzLDggQEAKICAqIHN0cnVjdCBjZnR5cGU6IGhhbmRsZXIgZGVmaW5pdGlvbnMgZm9yIGNncm91cCBjb250cm9sIGZpbGVzCiAgKgogICogV2hlbiByZWFkaW5nL3dyaXRpbmcgdG8gYSBmaWxlOgotICoJLSB0aGUgY2dyb3VwIHRvIHVzZSBpcyBmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQtPmRfZnNkYXRhCi0gKgktIHRoZSAnY2Z0eXBlJyBvZiB0aGUgZmlsZSBpcyBmaWxlLT5mX2RlbnRyeS0+ZF9mc2RhdGEKKyAqCS0gdGhlIGNncm91cCB0byB1c2UgaXMgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQtPmRfZnNkYXRhCisgKgktIHRoZSAnY2Z0eXBlJyBvZiB0aGUgZmlsZSBpcyBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YQogICovCiAKIC8qIGNmdHlwZS0+ZmxhZ3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xrL3RpLmggYi9pbmNsdWRlL2xpbnV4L2Nsay90aS5oCmluZGV4IGY3NWFjYmYuLjc0ZTUzNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xrL3RpLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbGsvdGkuaApAQCAtMjU0LDEzICsyNTQsMjYgQEAKIHZvaWQgb21hcDJfaW5pdF9jbGtfaHdfb21hcF9jbG9ja3Moc3RydWN0IGNsayAqY2xrKTsKIGludCBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KTsKIHZvaWQgb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpOworaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCk7CiBpbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCiAJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSk7CitpbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlX2FuZF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwKKwkJCQkJICAgdTggaW5kZXgpOworbG9uZyBvbWFwM19ub25jb3JlX2RwbGxfZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqYmVzdF9wYXJlbnRfcmF0ZSwKKwkJCQkgICAgICAgc3RydWN0IGNsayAqKmJlc3RfcGFyZW50X2Nsayk7CiB1bnNpZ25lZCBsb25nIG9tYXA0X2RwbGxfcmVnbTR4ZW5fcmVjYWxjKHN0cnVjdCBjbGtfaHcgKmh3LAogCQkJCQkgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSk7CiBsb25nIG9tYXA0X2RwbGxfcmVnbTR4ZW5fcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKIAkJCQkgICAgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyAqcGFyZW50X3JhdGUpOworbG9uZyBvbWFwNF9kcGxsX3JlZ200eGVuX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQl1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJCXVuc2lnbmVkIGxvbmcgKmJlc3RfcGFyZW50X3JhdGUsCisJCQkJCXN0cnVjdCBjbGsgKipiZXN0X3BhcmVudF9jbGspOwogdTggb21hcDJfaW5pdF9kcGxsX3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodyk7CiB1bnNpZ25lZCBsb25nIG9tYXAzX2RwbGxfcmVjYWxjKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKTsKIGxvbmcgb21hcDJfZHBsbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlLApAQCAtMjc4LDYgKzI5MSw4IEBACiB2b2lkIG9tYXAyX2Nsa19lbmFibGVfaW5pdF9jbG9ja3MoY29uc3QgY2hhciAqKmNsa19uYW1lcywgdTggbnVtX2Nsb2Nrcyk7CiBpbnQgb21hcDNfZHBsbDRfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUsCiAJCQkgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSk7CitpbnQgb21hcDNfZHBsbDRfc2V0X3JhdGVfYW5kX3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLCB1OCBpbmRleCk7CiBpbnQgb21hcDJfZGZsdF9jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KTsKIHZvaWQgb21hcDJfZGZsdF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrX2h3ICpodyk7CiBpbnQgb21hcDJfZGZsdF9jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaCBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCmluZGV4IDYwYmRmOGQuLjMyMzhmZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCkBAIC0zMywxMCArMzMsMTEgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19jb21wYWN0X3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsCiAJCQlpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICptYXNrLAogCQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50ICpjb250ZW5kZWQsCi0JCQlzdHJ1Y3Qgem9uZSAqKmNhbmRpZGF0ZV96b25lKTsKKwkJCWludCBhbGxvY19mbGFncywgaW50IGNsYXNzem9uZV9pZHgpOwogZXh0ZXJuIHZvaWQgY29tcGFjdF9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIpOwogZXh0ZXJuIHZvaWQgcmVzZXRfaXNvbGF0aW9uX3N1aXRhYmxlKHBnX2RhdGFfdCAqcGdkYXQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKKwkJCQkJaW50IGFsbG9jX2ZsYWdzLCBpbnQgY2xhc3N6b25lX2lkeCk7CiAKIC8qIERvIG5vdCBza2lwIGNvbXBhY3Rpb24gbW9yZSB0aGFuIDY0IHRpbWVzICovCiAjZGVmaW5lIENPTVBBQ1RfTUFYX0RFRkVSX1NISUZUIDYKQEAgLTEwMyw3ICsxMDQsNyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRyeV90b19jb21wYWN0X3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsCiAJCQlpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaywKIAkJCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCAqY29udGVuZGVkLAotCQkJc3RydWN0IHpvbmUgKipjYW5kaWRhdGVfem9uZSkKKwkJCWludCBhbGxvY19mbGFncywgaW50IGNsYXNzem9uZV9pZHgpCiB7CiAJcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7CiB9CkBAIC0xMTYsNyArMTE3LDggQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsCisJCQkJCWludCBhbGxvY19mbGFncywgaW50IGNsYXNzem9uZV9pZHgpCiB7CiAJcmV0dXJuIENPTVBBQ1RfU0tJUFBFRDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1aWRsZS5oIGIvaW5jbHVkZS9saW51eC9jcHVpZGxlLmgKaW5kZXggMjVlMGRmNi4uYTA3ZTA4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVpZGxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVpZGxlLmgKQEAgLTUzLDcgKzUzLDcgQEAKIH07CiAKIC8qIElkbGUgU3RhdGUgRmxhZ3MgKi8KLSNkZWZpbmUgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQJKDB4MDEpIC8qIGlzIHJlc2lkZW5jeSB0aW1lIG1lYXN1cmFibGU/ICovCisjZGVmaW5lIENQVUlETEVfRkxBR19USU1FX0lOVkFMSUQJKDB4MDEpIC8qIGlzIHJlc2lkZW5jeSB0aW1lIG1lYXN1cmFibGU/ICovCiAjZGVmaW5lIENQVUlETEVfRkxBR19DT1VQTEVECSgweDAyKSAvKiBzdGF0ZSBhcHBsaWVzIHRvIG11bHRpcGxlIGNwdXMgKi8KICNkZWZpbmUgQ1BVSURMRV9GTEFHX1RJTUVSX1NUT1AgKDB4MDQpICAvKiB0aW1lciBpcyBzdG9wcGVkIG9uIHRoaXMgc3RhdGUgKi8KIApAQCAtOTAsNyArOTAsNyBAQAogICogY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3kgLSByZXRyaWV2ZXMgdGhlIGxhc3Qgc3RhdGUncyByZXNpZGVuY3kgdGltZQogICogQGRldjogdGhlIHRhcmdldCBDUFUKICAqCi0gKiBOT1RFOiB0aGlzIHZhbHVlIGlzIGludmFsaWQgaWYgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgaXNuJ3Qgc2V0CisgKiBOT1RFOiB0aGlzIHZhbHVlIGlzIGludmFsaWQgaWYgQ1BVSURMRV9GTEFHX1RJTUVfSU5WQUxJRCBpcyBzZXQKICAqLwogc3RhdGljIGlubGluZSBpbnQgY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3koc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaAppbmRleCBiMmEyYTA4Li41YTgxMzk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKQEAgLTEyNCwxNSArMTI0LDE1IEBACiAJdm9pZCAqZF9mc2RhdGE7CQkJLyogZnMtc3BlY2lmaWMgZGF0YSAqLwogCiAJc3RydWN0IGxpc3RfaGVhZCBkX2xydTsJCS8qIExSVSBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBkX2NoaWxkOwkvKiBjaGlsZCBvZiBwYXJlbnQgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZF9zdWJkaXJzOwkvKiBvdXIgY2hpbGRyZW4gKi8KIAkvKgotCSAqIGRfY2hpbGQgYW5kIGRfcmN1IGNhbiBzaGFyZSBtZW1vcnkKKwkgKiBkX2FsaWFzIGFuZCBkX3JjdSBjYW4gc2hhcmUgbWVtb3J5CiAJICovCiAJdW5pb24gewotCQlzdHJ1Y3QgbGlzdF9oZWFkIGRfY2hpbGQ7CS8qIGNoaWxkIG9mIHBhcmVudCBsaXN0ICovCisJCXN0cnVjdCBobGlzdF9ub2RlIGRfYWxpYXM7CS8qIGlub2RlIGFsaWFzIGxpc3QgKi8KIAkgCXN0cnVjdCByY3VfaGVhZCBkX3JjdTsKIAl9IGRfdTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRfc3ViZGlyczsJLyogb3VyIGNoaWxkcmVuICovCi0Jc3RydWN0IGhsaXN0X25vZGUgZF9hbGlhczsJLyogaW5vZGUgYWxpYXMgbGlzdCAqLwogfTsKIAogLyoKQEAgLTIzMCw3ICsyMzAsNiBAQAogICovCiBleHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2luc3RhbnRpYXRlX3VuaXF1ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9tYXRlcmlhbGlzZV91bmlxdWUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IGRfaW5zdGFudGlhdGVfbm9fZGlyYWxpYXMoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBfX2RfZHJvcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogZXh0ZXJuIHZvaWQgZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaCBiL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCmluZGV4IDRkMGI0ZDEuLmQ4NGY4YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCkBAIC05Miw4ICs5Miw4IEBACiAJCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCiAJCQkJICAgICBzdHJ1Y3QgZGVidWdmc19yZWdzZXQzMiAqcmVnc2V0KTsKIAotaW50IGRlYnVnZnNfcHJpbnRfcmVnczMyKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IGRlYnVnZnNfcmVnMzIgKnJlZ3MsCi0JCQkgaW50IG5yZWdzLCB2b2lkIF9faW9tZW0gKmJhc2UsIGNoYXIgKnByZWZpeCk7Cit2b2lkIGRlYnVnZnNfcHJpbnRfcmVnczMyKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IGRlYnVnZnNfcmVnMzIgKnJlZ3MsCisJCQkgIGludCBucmVncywgdm9pZCBfX2lvbWVtICpiYXNlLCBjaGFyICpwcmVmaXgpOwogCiBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV91MzJfYXJyYXkoY29uc3QgY2hhciAqbmFtZSwgdW1vZGVfdCBtb2RlLAogCQkJCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCkBAIC0yMzMsMTAgKzIzMyw5IEBACiAJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRlYnVnZnNfcHJpbnRfcmVnczMyKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IGRlYnVnZnNfcmVnMzIgKnJlZ3MsCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdmc19wcmludF9yZWdzMzIoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBzdHJ1Y3QgZGVidWdmc19yZWczMiAqcmVncywKIAkJCSBpbnQgbnJlZ3MsIHZvaWQgX19pb21lbSAqYmFzZSwgY2hhciAqcHJlZml4KQogewotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZGVidWdmc19pbml0aWFsaXplZCh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaAppbmRleCBlMTcwN2RlLi5jYTZkMmFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaApAQCAtNjQsNiArNjQsNyBAQAogCQkJCSAgICB1bmlvbiBtYXBfaW5mbyAqbWFwX2NvbnRleHQpOwogCiB0eXBlZGVmIHZvaWQgKCpkbV9wcmVzdXNwZW5kX2ZuKSAoc3RydWN0IGRtX3RhcmdldCAqdGkpOwordHlwZWRlZiB2b2lkICgqZG1fcHJlc3VzcGVuZF91bmRvX2ZuKSAoc3RydWN0IGRtX3RhcmdldCAqdGkpOwogdHlwZWRlZiB2b2lkICgqZG1fcG9zdHN1c3BlbmRfZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSk7CiB0eXBlZGVmIGludCAoKmRtX3ByZXJlc3VtZV9mbikgKHN0cnVjdCBkbV90YXJnZXQgKnRpKTsKIHR5cGVkZWYgdm9pZCAoKmRtX3Jlc3VtZV9mbikgKHN0cnVjdCBkbV90YXJnZXQgKnRpKTsKQEAgLTE0NSw2ICsxNDYsNyBAQAogCWRtX2VuZGlvX2ZuIGVuZF9pbzsKIAlkbV9yZXF1ZXN0X2VuZGlvX2ZuIHJxX2VuZF9pbzsKIAlkbV9wcmVzdXNwZW5kX2ZuIHByZXN1c3BlbmQ7CisJZG1fcHJlc3VzcGVuZF91bmRvX2ZuIHByZXN1c3BlbmRfdW5kbzsKIAlkbV9wb3N0c3VzcGVuZF9mbiBwb3N0c3VzcGVuZDsKIAlkbV9wcmVyZXN1bWVfZm4gcHJlcmVzdW1lOwogCWRtX3Jlc3VtZV9mbiByZXN1bWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oCmluZGV4IGUxZTY4ZGEuLmRhM2I3MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oCisrKyBiL2luY2x1ZGUvbGludXgvZWRhYy5oCkBAIC0xOTQsNyArMTk0LDggQEAKICAqIEBNRU1fRERSMzoJCUREUjMgUkFNCiAgKiBATUVNX1JERFIzOgkJUmVnaXN0ZXJlZCBERFIzIFJBTQogICoJCQlUaGlzIGlzIGEgdmFyaWFudCBvZiB0aGUgRERSMyBtZW1vcmllcy4KLSAqIEBNRU1fRERSNDoJCUREUjQgUkFNCisgKiBATUVNX0xSRERSMwkJTG9hZC1SZWR1Y2VkIEREUjMgbWVtb3J5LgorICogQE1FTV9ERFI0OgkJVW5idWZmZXJlZCBERFI0IFJBTQogICogQE1FTV9SRERSNDoJCVJlZ2lzdGVyZWQgRERSNCBSQU0KICAqCQkJVGhpcyBpcyBhIHZhcmlhbnQgb2YgdGhlIEREUjQgbWVtb3JpZXMuCiAgKi8KQEAgLTIxNiw2ICsyMTcsNyBAQAogCU1FTV9YRFIsCiAJTUVNX0REUjMsCiAJTUVNX1JERFIzLAorCU1FTV9MUkREUjMsCiAJTUVNX0REUjQsCiAJTUVNX1JERFI0LAogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWVwcm9tXzkzY3g2LmggYi9pbmNsdWRlL2xpbnV4L2VlcHJvbV85M2N4Ni5oCmluZGV4IGU1MGY5OGIuLmViMGIxOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWVwcm9tXzkzY3g2LmgKKysrIGIvaW5jbHVkZS9saW51eC9lZXByb21fOTNjeDYuaApAQCAtNzUsNiArNzUsMTAgQEAKIAljb25zdCB1OCB3b3JkLCB1MTYgKmRhdGEpOwogZXh0ZXJuIHZvaWQgZWVwcm9tXzkzY3g2X211bHRpcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20sCiAJY29uc3QgdTggd29yZCwgX19sZTE2ICpkYXRhLCBjb25zdCB1MTYgd29yZHMpOworZXh0ZXJuIHZvaWQgZWVwcm9tXzkzY3g2X3JlYWRiKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSwKKwljb25zdCB1OCBieXRlLCB1OCAqZGF0YSk7CitleHRlcm4gdm9pZCBlZXByb21fOTNjeDZfbXVsdGlyZWFkYihzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20sCisJY29uc3QgdTggYnl0ZSwgdTggKmRhdGEsIGNvbnN0IHUxNiBieXRlcyk7CiAKIGV4dGVybiB2b2lkIGVlcHJvbV85M2N4Nl93cmVuKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSwgYm9vbCBlbmFibGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaAppbmRleCAwOTQ5ZjljLi4wMjM4ZDYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VmaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmgKQEAgLTU0Nyw2ICs1NDcsOSBAQAogI2RlZmluZSBTTUJJT1NfVEFCTEVfR1VJRCAgICBcCiAgICAgRUZJX0dVSUQoICAweGViOWQyZDMxLCAweDJkODgsIDB4MTFkMywgMHg5YSwgMHgxNiwgMHgwLCAweDkwLCAweDI3LCAweDNmLCAweGMxLCAweDRkICkKIAorI2RlZmluZSBTTUJJT1MzX1RBQkxFX0dVSUQgICAgXAorICAgIEVGSV9HVUlEKCAgMHhmMmZkMTU0NCwgMHg5Nzk0LCAweDRhMmMsIDB4OTksIDB4MmUsIDB4ZTUsIDB4YmIsIDB4Y2YsIDB4MjAsIDB4ZTMsIDB4OTQgKQorCiAjZGVmaW5lIFNBTF9TWVNURU1fVEFCTEVfR1VJRCAgICBcCiAgICAgRUZJX0dVSUQoICAweGViOWQyZDMyLCAweDJkODgsIDB4MTFkMywgMHg5YSwgMHgxNiwgMHgwLCAweDkwLCAweDI3LCAweDNmLCAweGMxLCAweDRkICkKIApAQCAtODEwLDcgKzgxMyw4IEBACiAJdW5zaWduZWQgbG9uZyBtcHM7CQkvKiBNUFMgdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nIGFjcGk7CQkvKiBBQ1BJIHRhYmxlICAoSUE2NCBleHQgMC43MSkgKi8KIAl1bnNpZ25lZCBsb25nIGFjcGkyMDsJCS8qIEFDUEkgdGFibGUgIChBQ1BJIDIuMCkgKi8KLQl1bnNpZ25lZCBsb25nIHNtYmlvczsJCS8qIFNNIEJJT1MgdGFibGUgKi8KKwl1bnNpZ25lZCBsb25nIHNtYmlvczsJCS8qIFNNQklPUyB0YWJsZSAoMzIgYml0IGVudHJ5IHBvaW50KSAqLworCXVuc2lnbmVkIGxvbmcgc21iaW9zMzsJCS8qIFNNQklPUyB0YWJsZSAoNjQgYml0IGVudHJ5IHBvaW50KSAqLwogCXVuc2lnbmVkIGxvbmcgc2FsX3N5c3RhYjsJLyogU0FMIHN5c3RlbSB0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcgYm9vdF9pbmZvOwkvKiBib290IGluZm8gdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nIGhjZHA7CQkvKiBIQ0RQIHRhYmxlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2YyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvZjJmc19mcy5oCmluZGV4IDg2MDMxM2EuLjg3ZjE0ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZjJmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZjJmc19mcy5oCkBAIC0zMyw3ICszMyw4IEBACiAjZGVmaW5lIEYyRlNfTUVUQV9JTk8oc2JpKQkoc2JpLT5tZXRhX2lub19udW0pCiAKIC8qIFRoaXMgZmxhZyBpcyB1c2VkIGJ5IG5vZGUgYW5kIG1ldGEgaW5vZGVzLCBhbmQgYnkgcmVjb3ZlcnkgKi8KLSNkZWZpbmUgR0ZQX0YyRlNfWkVSTwkoR0ZQX05PRlMgfCBfX0dGUF9aRVJPKQorI2RlZmluZSBHRlBfRjJGU19aRVJPCQkoR0ZQX05PRlMgfCBfX0dGUF9aRVJPKQorI2RlZmluZSBHRlBfRjJGU19ISUdIX1pFUk8JKEdGUF9OT0ZTIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0hJR0hNRU0pCiAKIC8qCiAgKiBGb3IgZnVydGhlciBvcHRpbWl6YXRpb24gb24gbXVsdGktaGVhZCBsb2dzLCBvbi1kaXNrIGxheW91dCBzdXBwb3J0cyBtYXhpbXVtCkBAIC0xNzAsMTQgKzE3MSwxMiBAQAogCiAjZGVmaW5lIEYyRlNfSU5MSU5FX1hBVFRSCTB4MDEJLyogZmlsZSBpbmxpbmUgeGF0dHIgZmxhZyAqLwogI2RlZmluZSBGMkZTX0lOTElORV9EQVRBCTB4MDIJLyogZmlsZSBpbmxpbmUgZGF0YSBmbGFnICovCisjZGVmaW5lIEYyRlNfSU5MSU5FX0RFTlRSWQkweDA0CS8qIGZpbGUgaW5saW5lIGRlbnRyeSBmbGFnICovCisjZGVmaW5lIEYyRlNfREFUQV9FWElTVAkJMHgwOAkvKiBmaWxlIGlubGluZSBkYXRhIGV4aXN0IGZsYWcgKi8KIAogI2RlZmluZSBNQVhfSU5MSU5FX0RBVEEJCShzaXplb2YoX19sZTMyKSAqIChERUZfQUREUlNfUEVSX0lOT0RFIC0gXAogCQkJCQkJRjJGU19JTkxJTkVfWEFUVFJfQUREUlMgLSAxKSkKIAotI2RlZmluZSBJTkxJTkVfREFUQV9PRkZTRVQJKFBBR0VfQ0FDSEVfU0laRSAtIHNpemVvZihzdHJ1Y3Qgbm9kZV9mb290ZXIpIC1cCi0JCQkJc2l6ZW9mKF9fbGUzMikgKiAoREVGX0FERFJTX1BFUl9JTk9ERSArIFwKLQkJCQlERUZfTklEU19QRVJfSU5PREUgLSAxKSkKLQogc3RydWN0IGYyZnNfaW5vZGUgewogCV9fbGUxNiBpX21vZGU7CQkJLyogZmlsZSBtb2RlICovCiAJX191OCBpX2FkdmlzZTsJCQkvKiBmaWxlIGhpbnRzICovCkBAIC00MzUsNiArNDM0LDI0IEBACiAJX191OCBmaWxlbmFtZVtOUl9ERU5UUllfSU5fQkxPQ0tdW0YyRlNfU0xPVF9MRU5dOwogfSBfX3BhY2tlZDsKIAorLyogZm9yIGlubGluZSBkaXIgKi8KKyNkZWZpbmUgTlJfSU5MSU5FX0RFTlRSWQkoTUFYX0lOTElORV9EQVRBICogQklUU19QRVJfQllURSAvIFwKKwkJCQkoKFNJWkVfT0ZfRElSX0VOVFJZICsgRjJGU19TTE9UX0xFTikgKiBcCisJCQkJQklUU19QRVJfQllURSArIDEpKQorI2RlZmluZSBJTkxJTkVfREVOVFJZX0JJVE1BUF9TSVpFCSgoTlJfSU5MSU5FX0RFTlRSWSArIFwKKwkJCQkJQklUU19QRVJfQllURSAtIDEpIC8gQklUU19QRVJfQllURSkKKyNkZWZpbmUgSU5MSU5FX1JFU0VSVkVEX1NJWkUJKE1BWF9JTkxJTkVfREFUQSAtIFwKKwkJCQkoKFNJWkVfT0ZfRElSX0VOVFJZICsgRjJGU19TTE9UX0xFTikgKiBcCisJCQkJTlJfSU5MSU5FX0RFTlRSWSArIElOTElORV9ERU5UUllfQklUTUFQX1NJWkUpKQorCisvKiBpbmxpbmUgZGlyZWN0b3J5IGVudHJ5IHN0cnVjdHVyZSAqLworc3RydWN0IGYyZnNfaW5saW5lX2RlbnRyeSB7CisJX191OCBkZW50cnlfYml0bWFwW0lOTElORV9ERU5UUllfQklUTUFQX1NJWkVdOworCV9fdTggcmVzZXJ2ZWRbSU5MSU5FX1JFU0VSVkVEX1NJWkVdOworCXN0cnVjdCBmMmZzX2Rpcl9lbnRyeSBkZW50cnlbTlJfSU5MSU5FX0RFTlRSWV07CisJX191OCBmaWxlbmFtZVtOUl9JTkxJTkVfREVOVFJZXVtGMkZTX1NMT1RfTEVOXTsKK30gX19wYWNrZWQ7CisKIC8qIGZpbGUgdHlwZXMgdXNlZCBpbiBpbm9kZV9pbmZvLT5mbGFncyAqLwogZW51bSB7CiAJRjJGU19GVF9VTktOT1dOLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWxlLmggYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaAppbmRleCA0ZDY5MTIzLi5mODdkMzA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaApAQCAtNjYsNyArNjYsNiBAQAogZXh0ZXJuIGJvb2wgZ2V0X2Nsb3NlX29uX2V4ZWModW5zaWduZWQgaW50IGZkKTsKIGV4dGVybiB2b2lkIHB1dF9maWxwKHN0cnVjdCBmaWxlICopOwogZXh0ZXJuIGludCBnZXRfdW51c2VkX2ZkX2ZsYWdzKHVuc2lnbmVkIGZsYWdzKTsKLSNkZWZpbmUgZ2V0X3VudXNlZF9mZCgpIGdldF91bnVzZWRfZmRfZmxhZ3MoMCkKIGV4dGVybiB2b2lkIHB1dF91bnVzZWRfZmQodW5zaWduZWQgaW50IGZkKTsKIAogZXh0ZXJuIHZvaWQgZmRfaW5zdGFsbCh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKaW5kZXggN2ZkODFiOC4uNmI3ZmQ5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKQEAgLTI0NiwxNSArMjQ2LDYgQEAKICAqIGRlZmluZWQgaW4gPGxpbnV4L3dhaXQuaD4KICAqLwogCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXpla2lsbGFibGUod3EsIGNvbmRpdGlvbikJCQlcCi0oewkJCQkJCQkJCVwKLQlpbnQgX19yZXR2YWw7CQkJCQkJCVwKLQlmcmVlemVyX2RvX25vdF9jb3VudCgpOwkJCQkJCVwKLQlfX3JldHZhbCA9IHdhaXRfZXZlbnRfa2lsbGFibGUod3EsIChjb25kaXRpb24pKTsJCVwKLQlmcmVlemVyX2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsOwkJCQkJCQlcCi19KQotCiAvKiBETyBOT1QgQUREIEFOWSBORVcgQ0FMTEVSUyBPRiBUSElTIEZVTkNUSU9OICovCiAjZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXpla2lsbGFibGVfdW5zYWZlKHdxLCBjb25kaXRpb24pCQkJXAogKHsJCQkJCQkJCQlcCkBAIC0yNjUsMzUgKzI1Niw2IEBACiAJX19yZXR2YWw7CQkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGUod3EsIGNvbmRpdGlvbikJCQkJXAotKHsJCQkJCQkJCQlcCi0JaW50IF9fcmV0dmFsOwkJCQkJCQlcCi0JZnJlZXplcl9kb19ub3RfY291bnQoKTsJCQkJCQlcCi0JX19yZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUod3EsIChjb25kaXRpb24pKTsJCVwKLQlmcmVlemVyX2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsOwkJCQkJCQlcCi19KQotCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJCVwKLSh7CQkJCQkJCQkJXAotCWxvbmcgX19yZXR2YWwgPSB0aW1lb3V0OwkJCQkJXAotCWZyZWV6ZXJfZG9fbm90X2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsCShjb25kaXRpb24pLAlcCi0JCQkJX19yZXR2YWwpOwkJCQlcCi0JZnJlZXplcl9jb3VudCgpOwkJCQkJCVwKLQlfX3JldHZhbDsJCQkJCQkJXAotfSkKLQotI2RlZmluZSB3YWl0X2V2ZW50X2ZyZWV6YWJsZV9leGNsdXNpdmUod3EsIGNvbmRpdGlvbikJCQlcCi0oewkJCQkJCQkJCVwKLQlpbnQgX19yZXR2YWw7CQkJCQkJCVwKLQlmcmVlemVyX2RvX25vdF9jb3VudCgpOwkJCQkJCVwKLQlfX3JldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUod3EsIGNvbmRpdGlvbik7CVwKLQlmcmVlemVyX2NvdW50KCk7CQkJCQkJXAotCV9fcmV0dmFsOwkJCQkJCQlcCi19KQotCi0KICNlbHNlIC8qICFDT05GSUdfRlJFRVpFUiAqLwogc3RhdGljIGlubGluZSBib29sIGZyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgZnJlZXppbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMzMxLDE4ICsyOTMsNiBAQAogI2RlZmluZSBmcmVlemFibGVfc2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlKGV4cGlyZXMsIGRlbHRhLCBtb2RlKQlcCiAJc2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlKGV4cGlyZXMsIGRlbHRhLCBtb2RlKQogCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlKHdxLCBjb25kaXRpb24pCQkJCVwKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHdxLCBjb25kaXRpb24pCi0KLSNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJXAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQotCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKQkJCVwKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKQotCi0jZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXpla2lsbGFibGUod3EsIGNvbmRpdGlvbikJCVwKLQkJd2FpdF9ldmVudF9raWxsYWJsZSh3cSwgY29uZGl0aW9uKQotCiAjZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXpla2lsbGFibGVfdW5zYWZlKHdxLCBjb25kaXRpb24pCQkJXAogCQl3YWl0X2V2ZW50X2tpbGxhYmxlKHdxLCBjb25kaXRpb24pCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA5YWI3NzllLi5iYjI5YjAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC02MDYsOSArNjA2LDYgQEAKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSppX2ZvcDsJLyogZm9ybWVyIC0+aV9vcC0+ZGVmYXVsdF9maWxlX29wcyAqLwogCXN0cnVjdCBmaWxlX2xvY2sJKmlfZmxvY2s7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UJaV9kYXRhOwotI2lmZGVmIENPTkZJR19RVU9UQQotCXN0cnVjdCBkcXVvdAkJKmlfZHF1b3RbTUFYUVVPVEFTXTsKLSNlbmRpZgogCXN0cnVjdCBsaXN0X2hlYWQJaV9kZXZpY2VzOwogCXVuaW9uIHsKIAkJc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkqaV9waXBlOwpAQCAtNzg5LDcgKzc4Niw2IEBACiAJCXN0cnVjdCByY3VfaGVhZCAJZnVfcmN1aGVhZDsKIAl9IGZfdTsKIAlzdHJ1Y3QgcGF0aAkJZl9wYXRoOwotI2RlZmluZSBmX2RlbnRyeQlmX3BhdGguZGVudHJ5CiAJc3RydWN0IGlub2RlCQkqZl9pbm9kZTsJLyogY2FjaGVkIHZhbHVlICovCiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqZl9vcDsKIApAQCAtMTIyNCw2ICsxMjIwLDcgQEAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqc19iZGk7CiAJc3RydWN0IG10ZF9pbmZvCQkqc19tdGQ7CiAJc3RydWN0IGhsaXN0X25vZGUJc19pbnN0YW5jZXM7CisJdW5zaWduZWQgaW50CQlzX3F1b3RhX3R5cGVzOwkvKiBCaXRtYXNrIG9mIHN1cHBvcnRlZCBxdW90YSB0eXBlcyAqLwogCXN0cnVjdCBxdW90YV9pbmZvCXNfZHF1b3Q7CS8qIERpc2txdW90YSBzcGVjaWZpYyBvcHRpb25zICovCiAKIAlzdHJ1Y3Qgc2Jfd3JpdGVycwlzX3dyaXRlcnM7CkBAIC0xNDY3LDcgKzE0NjQsMTAgQEAKICAqIFRoaXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gcmVhZCBkaXJlY3RvcmllcyBpbnRvIGtlcm5lbCBzcGFjZSBvcgogICogdG8gaGF2ZSBkaWZmZXJlbnQgZGlyZW50IGxheW91dHMgZGVwZW5kaW5nIG9uIHRoZSBiaW5hcnkgdHlwZS4KICAqLwotdHlwZWRlZiBpbnQgKCpmaWxsZGlyX3QpKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQsIGxvZmZfdCwgdTY0LCB1bnNpZ25lZCk7CitzdHJ1Y3QgZGlyX2NvbnRleHQ7Cit0eXBlZGVmIGludCAoKmZpbGxkaXJfdCkoc3RydWN0IGRpcl9jb250ZXh0ICosIGNvbnN0IGNoYXIgKiwgaW50LCBsb2ZmX3QsIHU2NCwKKwkJCSB1bnNpZ25lZCk7CisKIHN0cnVjdCBkaXJfY29udGV4dCB7CiAJY29uc3QgZmlsbGRpcl90IGFjdG9yOwogCWxvZmZfdCBwb3M7CkBAIC0xNTEzLDcgKzE1MTMsNyBAQAogCWludCAoKnNldGxlYXNlKShzdHJ1Y3QgZmlsZSAqLCBsb25nLCBzdHJ1Y3QgZmlsZV9sb2NrICoqLCB2b2lkICoqKTsKIAlsb25nICgqZmFsbG9jYXRlKShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCiAJCQkgIGxvZmZfdCBsZW4pOwotCWludCAoKnNob3dfZmRpbmZvKShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKTsKKwl2b2lkICgqc2hvd19mZGluZm8pKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmYpOwogfTsKIAogc3RydWN0IGlub2RlX29wZXJhdGlvbnMgewpAQCAtMTU3Nyw3ICsxNTc3LDkgQEAKIAl2b2lkICgqZXZpY3RfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CiAJdm9pZCAoKnB1dF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIAlpbnQgKCpzeW5jX2ZzKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCk7CisJaW50ICgqZnJlZXplX3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogCWludCAoKmZyZWV6ZV9mcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKKwlpbnQgKCp0aGF3X3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogCWludCAoKnVuZnJlZXplX2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogCWludCAoKnN0YXRmcykgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ZnMgKik7CiAJaW50ICgqcmVtb3VudF9mcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQgKiwgY2hhciAqKTsKQEAgLTE1OTAsNiArMTU5Miw3IEBACiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJc3NpemVfdCAoKnF1b3RhX3JlYWQpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QpOwogCXNzaXplX3QgKCpxdW90YV93cml0ZSkoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCk7CisJc3RydWN0IGRxdW90ICoqKCpnZXRfZHF1b3RzKShzdHJ1Y3QgaW5vZGUgKik7CiAjZW5kaWYKIAlpbnQgKCpiZGV2X3RyeV90b19mcmVlX3BhZ2UpKHN0cnVjdCBzdXBlcl9ibG9jayosIHN0cnVjdCBwYWdlKiwgZ2ZwX3QpOwogCWxvbmcgKCpucl9jYWNoZWRfb2JqZWN0cykoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CkBAIC0yNzg2LDYgKzI3ODksMTEgQEAKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1NFQzsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGlzX3Jvb3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gaW5vZGUgPT0gaW5vZGUtPmlfc2ItPnNfcm9vdC0+ZF9pbm9kZTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGRpcl9lbWl0KHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LAogCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAogCQkJICAgIHU2NCBpbm8sIHVuc2lnbmVkIHR5cGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCA2NjI2OTdiLi5lZDUwMTk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTYxLDYgKzYxLDExIEBACiAvKgogICogRlRSQUNFX09QU19GTF8qIGJpdHMgZGVub3RlIHRoZSBzdGF0ZSBvZiBmdHJhY2Vfb3BzIHN0cnVjdCBhbmQgYXJlCiAgKiBzZXQgaW4gdGhlIGZsYWdzIG1lbWJlci4KKyAqIENPTlRST0wsIFNBVkVfUkVHUywgU0FWRV9SRUdTX0lGX1NVUFBPUlRFRCwgUkVDVVJTSU9OX1NBRkUsIFNUVUIgYW5kCisgKiBJUE1PRElGWSBhcmUgYSBraW5kIG9mIGF0dHJpYnV0ZSBmbGFncyB3aGljaCBjYW4gYmUgc2V0IG9ubHkgYmVmb3JlCisgKiByZWdpc3RlcmluZyB0aGUgZnRyYWNlX29wcywgYW5kIGNhbiBub3QgYmUgbW9kaWZpZWQgd2hpbGUgcmVnaXN0ZXJlZC4KKyAqIENoYW5naW5nIHRob3NlIGF0dHJpYnV0ZSBmbGFncyBhZnRlciByZWdzaXRlcmluZyBmdHJhY2Vfb3BzIHdpbGwKKyAqIGNhdXNlIHVuZXhwZWN0ZWQgcmVzdWx0cy4KICAqCiAgKiBFTkFCTEVEIC0gc2V0L3Vuc2V0IHdoZW4gZnRyYWNlX29wcyBpcyByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAogICogRFlOQU1JQyAtIHNldCB3aGVuIGZ0cmFjZV9vcHMgaXMgcmVnaXN0ZXJlZCB0byBkZW5vdGUgZHluYW1pY2FsbHkKQEAgLTk0LDYgKzk5LDE3IEBACiAgKiBBRERJTkcgIC0gVGhlIG9wcyBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBhZGRlZC4KICAqIFJFTU9WSU5HIC0gVGhlIG9wcyBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyByZW1vdmVkLgogICogTU9ESUZZSU5HIC0gVGhlIG9wcyBpcyBpbiB0aGUgcHJvY2VzcyBvZiBjaGFuZ2luZyBpdHMgZmlsdGVyIGZ1bmN0aW9ucy4KKyAqIEFMTE9DX1RSQU1QIC0gQSBkeW5hbWljIHRyYW1wb2xpbmUgd2FzIGFsbG9jYXRlZCBieSB0aGUgY29yZSBjb2RlLgorICogICAgICAgICAgICBUaGUgYXJjaCBzcGVjaWZpYyBjb2RlIHNldHMgdGhpcyBmbGFnIHdoZW4gaXQgYWxsb2NhdGVkIGEKKyAqICAgICAgICAgICAgdHJhbXBvbGluZS4gVGhpcyBsZXRzIHRoZSBhcmNoIGtub3cgdGhhdCBpdCBjYW4gdXBkYXRlIHRoZQorICogICAgICAgICAgICB0cmFtcG9saW5lIGluIGNhc2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNoYW5nZXMuCisgKiAgICAgICAgICAgIFRoZSBmdHJhY2Vfb3BzIHRyYW1wb2xpbmUgY2FuIGJlIHNldCBieSB0aGUgZnRyYWNlIHVzZXJzLCBhbmQKKyAqICAgICAgICAgICAgaW4gc3VjaCBjYXNlcyB0aGUgYXJjaCBtdXN0IG5vdCBtb2RpZnkgaXQuIE9ubHkgdGhlIGFyY2ggZnRyYWNlCisgKiAgICAgICAgICAgIGNvcmUgY29kZSBzaG91bGQgc2V0IHRoaXMgZmxhZy4KKyAqIElQTU9ESUZZIC0gVGhlIG9wcyBjYW4gbW9kaWZ5IHRoZSBJUCByZWdpc3Rlci4gVGhpcyBjYW4gb25seSBiZSBzZXQgd2l0aAorICogICAgICAgICAgICBTQVZFX1JFR1MuIElmIGFub3RoZXIgb3BzIHdpdGggdGhpcyBmbGFnIHNldCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQKKyAqICAgICAgICAgICAgZm9yIGFueSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgdGhpcyBvcHMgd2lsbCBiZSByZWdpc3RlcmVkIGZvciwgdGhlbgorICogICAgICAgICAgICB0aGlzIG9wcyB3aWxsIGZhaWwgdG8gcmVnaXN0ZXIgb3Igc2V0X2ZpbHRlcl9pcC4KICAqLwogZW51bSB7CiAJRlRSQUNFX09QU19GTF9FTkFCTEVECQkJPSAxIDw8IDAsCkBAIC0xMDgsNiArMTI0LDggQEAKIAlGVFJBQ0VfT1BTX0ZMX0FERElORwkJCT0gMSA8PCA5LAogCUZUUkFDRV9PUFNfRkxfUkVNT1ZJTkcJCQk9IDEgPDwgMTAsCiAJRlRSQUNFX09QU19GTF9NT0RJRllJTkcJCQk9IDEgPDwgMTEsCisJRlRSQUNFX09QU19GTF9BTExPQ19UUkFNUAkJPSAxIDw8IDEyLAorCUZUUkFDRV9PUFNfRkxfSVBNT0RJRlkJCQk9IDEgPDwgMTMsCiB9OwogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCkBAIC0xNDIsNiArMTYwLDcgQEAKIAlzdHJ1Y3QgZnRyYWNlX29wc19oYXNoCQkqZnVuY19oYXNoOwogCXN0cnVjdCBmdHJhY2Vfb3BzX2hhc2gJCW9sZF9oYXNoOwogCXVuc2lnbmVkIGxvbmcJCQl0cmFtcG9saW5lOworCXVuc2lnbmVkIGxvbmcJCQl0cmFtcG9saW5lX3NpemU7CiAjZW5kaWYKIH07CiAKQEAgLTI1NSw3ICsyNzQsOSBAQAogaW50IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3ByZXBhcmUodm9pZCk7CiBpbnQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcG9zdF9wcm9jZXNzKHZvaWQpOwogCi12b2lkIGZ0cmFjZV9idWcoaW50IGVyciwgdW5zaWduZWQgbG9uZyBpcCk7CitzdHJ1Y3QgZHluX2Z0cmFjZTsKKwordm9pZCBmdHJhY2VfYnVnKGludCBlcnIsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpOwogCiBzdHJ1Y3Qgc2VxX2ZpbGU7CiAKQEAgLTI4Nyw2ICszMDgsOCBAQAogCiBleHRlcm4gaW50IGZ0cmFjZV9ucl9yZWdpc3RlcmVkX29wcyh2b2lkKTsKIAorYm9vbCBpc19mdHJhY2VfdHJhbXBvbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpOworCiAvKgogICogVGhlIGR5bl9mdHJhY2UgcmVjb3JkJ3MgZmxhZ3MgZmllbGQgaXMgc3BsaXQgaW50byB0d28gcGFydHMuCiAgKiB0aGUgZmlyc3QgcGFydCB3aGljaCBpcyAnMC1GVFJBQ0VfUkVGX01BWCcgaXMgYSBjb3VudGVyIG9mCkBAIC0yOTcsNiArMzIwLDcgQEAKICAqICBFTkFCTEVEIC0gdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHRyYWNlZAogICogIFJFR1MgICAgLSB0aGUgcmVjb3JkIHdhbnRzIHRoZSBmdW5jdGlvbiB0byBzYXZlIHJlZ3MKICAqICBSRUdTX0VOIC0gdGhlIGZ1bmN0aW9uIGlzIHNldCB1cCB0byBzYXZlIHJlZ3MuCisgKiAgSVBNT0RJRlkgLSB0aGUgcmVjb3JkIGFsbG93cyBmb3IgdGhlIElQIGFkZHJlc3MgdG8gYmUgY2hhbmdlZC4KICAqCiAgKiBXaGVuIGEgbmV3IGZ0cmFjZV9vcHMgaXMgcmVnaXN0ZXJlZCBhbmQgd2FudHMgYSBmdW5jdGlvbiB0byBzYXZlCiAgKiBwdF9yZWdzLCB0aGUgcmVjLT5mbGFnIFJFR1MgaXMgc2V0LiBXaGVuIHRoZSBmdW5jdGlvbiBoYXMgYmVlbgpAQCAtMzEwLDEwICszMzQsMTEgQEAKIAlGVFJBQ0VfRkxfUkVHU19FTgk9ICgxVUwgPDwgMjkpLAogCUZUUkFDRV9GTF9UUkFNUAkJPSAoMVVMIDw8IDI4KSwKIAlGVFJBQ0VfRkxfVFJBTVBfRU4JPSAoMVVMIDw8IDI3KSwKKwlGVFJBQ0VfRkxfSVBNT0RJRlkJPSAoMVVMIDw8IDI2KSwKIH07CiAKLSNkZWZpbmUgRlRSQUNFX1JFRl9NQVhfU0hJRlQJMjcKLSNkZWZpbmUgRlRSQUNFX0ZMX0JJVFMJCTUKKyNkZWZpbmUgRlRSQUNFX1JFRl9NQVhfU0hJRlQJMjYKKyNkZWZpbmUgRlRSQUNFX0ZMX0JJVFMJCTYKICNkZWZpbmUgRlRSQUNFX0ZMX01BU0tFRF9CSVRTCSgoMVVMIDw8IEZUUkFDRV9GTF9CSVRTKSAtIDEpCiAjZGVmaW5lIEZUUkFDRV9GTF9NQVNLCQkoRlRSQUNFX0ZMX01BU0tFRF9CSVRTIDw8IEZUUkFDRV9SRUZfTUFYX1NISUZUKQogI2RlZmluZSBGVFJBQ0VfUkVGX01BWAkJKCgxVUwgPDwgRlRSQUNFX1JFRl9NQVhfU0hJRlQpIC0gMSkKQEAgLTU4Niw2ICs2MTEsMTEgQEAKIAkJCSAgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKSB7IHJldHVybiAtRU5PREVWOyB9CiBzdGF0aWMgaW5saW5lIGludAogZnRyYWNlX3JlZ2V4X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpIHsgcmV0dXJuIC1FTk9ERVY7IH0KKworc3RhdGljIGlubGluZSBib29sIGlzX2Z0cmFjZV90cmFtcG9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CiAjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAKIC8qIHRvdGFsbHkgZGlzYWJsZSBmdHJhY2UgLSBjYW4gbm90IHJlLWVuYWJsZSBhZnRlciB0aGlzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAppbmRleCAyODY3MmU4Li4wYmViYjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKQEAgLTEzOCw2ICsxMzgsMTcgQEAKIAlUUkFDRV9UWVBFX05PX0NPTlNVTUUJPSAzCS8qIEhhbmRsZWQgYnV0IGFzayB0byBub3QgY29uc3VtZSAqLwogfTsKIAorLyoKKyAqIFNldmVyYWwgZnVuY3Rpb25zIHJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSBpZiB0aGUgdHJhY2Vfc2VxCisgKiBvdmVyZmxvd2VkLCBhbmQgVFJBQ0VfVFlQRV9IQU5ETEVEIG90aGVyd2lzZS4gVGhpcyBoZWxwZXIgZnVuY3Rpb24KKyAqIHNpbXBsaWZpZXMgdGhvc2UgZnVuY3Rpb25zIGFuZCBrZWVwcyB0aGVtIGluIHN5bmMuCisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSBwcmludF9saW5lX3QgdHJhY2VfaGFuZGxlX3JldHVybihzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCXJldHVybiB0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQocykgPworCQlUUkFDRV9UWVBFX1BBUlRJQUxfTElORSA6IFRSQUNFX1RZUEVfSEFORExFRDsKK30KKwogdm9pZCB0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnksCiAJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCSAgaW50IHBjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IDQxYjMwZmQuLjA3ZDI2OTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMzgxLDggKzM4MSw4IEBACiAKIHZvaWQgcGFnZV9hbGxvY19pbml0KHZvaWQpOwogdm9pZCBkcmFpbl96b25lX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwKTsKLXZvaWQgZHJhaW5fYWxsX3BhZ2VzKHZvaWQpOwotdm9pZCBkcmFpbl9sb2NhbF9wYWdlcyh2b2lkICpkdW1teSk7Cit2b2lkIGRyYWluX2FsbF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7Cit2b2lkIGRyYWluX2xvY2FsX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTsKIAogLyoKICAqIGdmcF9hbGxvd2VkX21hc2sgaXMgc2V0IHRvIEdGUF9CT09UX01BU0sgZHVyaW5nIGVhcmx5IGJvb3QgdG8gcmVzdHJpY3Qgd2hhdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ncGlvL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L2dwaW8vY29uc3VtZXIuaAppbmRleCAxMmYxNDZmLi4wMGIxYjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dwaW8vY29uc3VtZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dwaW8vY29uc3VtZXIuaApAQCAtOTQsNiArOTQsMTMgQEAKIHN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fdG9fZGVzYyh1bnNpZ25lZCBncGlvKTsKIGludCBkZXNjX3RvX2dwaW8oY29uc3Qgc3RydWN0IGdwaW9fZGVzYyAqZGVzYyk7CiAKKy8qIENoaWxkIHByb3BlcnRpZXMgaW50ZXJmYWNlICovCitzdHJ1Y3QgZndub2RlX2hhbmRsZTsKKworc3RydWN0IGdwaW9fZGVzYyAqZndub2RlX2dldF9uYW1lZF9ncGlvZChzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLAorCQkJCQkgY29uc3QgY2hhciAqcHJvcG5hbWUpOworc3RydWN0IGdwaW9fZGVzYyAqZGV2bV9nZXRfZ3Bpb2RfZnJvbV9jaGlsZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQpOwogI2Vsc2UgLyogQ09ORklHX0dQSU9MSUIgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3Bpb19kZXNjICpfX211c3RfY2hlY2sgX19ncGlvZF9nZXQoc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ncGlvX2tleXMuaCBiL2luY2x1ZGUvbGludXgvZ3Bpb19rZXlzLmgKaW5kZXggOGI2MjI0Ni4uZWUyZDhjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ncGlvX2tleXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dwaW9fa2V5cy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfR1BJT19LRVlTX0gKIAogc3RydWN0IGRldmljZTsKK3N0cnVjdCBncGlvX2Rlc2M7CiAKIC8qKgogICogc3RydWN0IGdwaW9fa2V5c19idXR0b24gLSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKQEAgLTE3LDYgKzE4LDcgQEAKICAqCQkJZGlzYWJsZSBidXR0b24gdmlhIHN5c2ZzCiAgKiBAdmFsdWU6CQlheGlzIHZhbHVlIGZvciAlRVZfQUJTCiAgKiBAaXJxOgkJSXJxIG51bWJlciBpbiBjYXNlIG9mIGludGVycnVwdCBrZXlzCisgKiBAZ3Bpb2Q6CQlHUElPIGRlc2NyaXB0b3IKICAqLwogc3RydWN0IGdwaW9fa2V5c19idXR0b24gewogCXVuc2lnbmVkIGludCBjb2RlOwpAQCAtMjksNiArMzEsNyBAQAogCWJvb2wgY2FuX2Rpc2FibGU7CiAJaW50IHZhbHVlOwogCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2Q7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggNmU2ZDMzOC4uY2RkMTQ5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKQEAgLTMxMSw3ICszMTEsOCBAQAogewogCWlmICghcGFnZV9zaXplX2xvZykKIAkJcmV0dXJuICZkZWZhdWx0X2hzdGF0ZTsKLQlyZXR1cm4gc2l6ZV90b19oc3RhdGUoMSA8PCBwYWdlX3NpemVfbG9nKTsKKworCXJldHVybiBzaXplX3RvX2hzdGF0ZSgxVUwgPDwgcGFnZV9zaXplX2xvZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaAppbmRleCAwMTI5Zjg5Li5iY2M4NTNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oCkBAIC0xNiw3ICsxNiw2IEBACiAjZGVmaW5lIF9MSU5VWF9IVUdFVExCX0NHUk9VUF9ICiAKICNpbmNsdWRlIDxsaW51eC9tbWRlYnVnLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVzX2NvdW50ZXIuaD4KIAogc3RydWN0IGh1Z2V0bGJfY2dyb3VwOwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3BtYnVzLmggYi9pbmNsdWRlL2xpbnV4L2kyYy9wbWJ1cy5oCmluZGV4IDY5MjgwZGIuLmVlM2MyYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL3BtYnVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvcG1idXMuaApAQCAtNDAsNiArNDAsMTAgQEAKIAogc3RydWN0IHBtYnVzX3BsYXRmb3JtX2RhdGEgewogCXUzMiBmbGFnczsJCS8qIERldmljZSBzcGVjaWZpYyBmbGFncyAqLworCisJLyogcmVndWxhdG9yIHN1cHBvcnQgKi8KKwlpbnQgbnVtX3JlZ3VsYXRvcnM7CisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKnJlZ19pbml0X2RhdGE7CiB9OwogCiAjZW5kaWYgLyogX1BNQlVTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAppbmRleCA3N2ZjNDNmLi4zMDM3ZmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKQEAgLTEwMiw3ICsxMDIsNyBAQAogI2RlZmluZSBJTklUX0lEUwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVQogI2RlZmluZSBJTklUX1RBU0tfUkNVX1RSRUVfUFJFRU1QVCgpCQkJCQlcCiAJLnJjdV9ibG9ja2VkX25vZGUgPSBOVUxMLAogI2Vsc2UKQEAgLTE2Niw2ICsxNjYsMTUgQEAKICMgZGVmaW5lIElOSVRfUlRfTVVURVhFUyh0c2spCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORworIyBkZWZpbmUgSU5JVF9OVU1BX0JBTEFOQ0lORyh0c2spCQkJCQlcCisJLm51bWFfcHJlZmVycmVkX25pZCA9IC0xLAkJCQkJXAorCS5udW1hX2dyb3VwID0gTlVMTCwJCQkJCQlcCisJLm51bWFfZmF1bHRzID0gTlVMTCwKKyNlbHNlCisjIGRlZmluZSBJTklUX05VTUFfQkFMQU5DSU5HKHRzaykKKyNlbmRpZgorCiAvKgogICogIElOSVRfVEFTSyBpcyB1c2VkIHRvIHNldCB1cCB0aGUgZmlyc3QgdGFzayB0YWJsZSwgdG91Y2ggYXQKICAqIHlvdXIgb3duIHJpc2shLiBCYXNlPTAsIGxpbWl0PTB4MWZmZmZmICg9Mk1CKQpAQCAtMjM3LDYgKzI0Niw3IEBACiAJSU5JVF9DUFVTRVRfU0VRKHRzaykJCQkJCQlcCiAJSU5JVF9SVF9NVVRFWEVTKHRzaykJCQkJCQlcCiAJSU5JVF9WVElNRSh0c2spCQkJCQkJCVwKKwlJTklUX05VTUFfQkFMQU5DSU5HKHRzaykJCQkJCVwKIH0KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbW11LmggYi9pbmNsdWRlL2xpbnV4L2lvbW11LmgKaW5kZXggZTZhN2M5Zi4uYjI5YTU5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb21tdS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9tbXUuaApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9pb21tdS5oPgogCiAjZGVmaW5lIElPTU1VX1JFQUQJKDEgPDwgMCkKQEAgLTk3LDYgKzk4LDggQEAKICAqIEBkZXRhY2hfZGV2OiBkZXRhY2ggZGV2aWNlIGZyb20gYW4gaW9tbXUgZG9tYWluCiAgKiBAbWFwOiBtYXAgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbiB0byBhbiBpb21tdSBkb21haW4KICAqIEB1bm1hcDogdW5tYXAgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbiBmcm9tIGFuIGlvbW11IGRvbWFpbgorICogQG1hcF9zZzogbWFwIGEgc2NhdHRlci1nYXRoZXIgbGlzdCBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGNodW5rcworICogdG8gYW4gaW9tbXUgZG9tYWluCiAgKiBAaW92YV90b19waHlzOiB0cmFuc2xhdGUgaW92YSB0byBwaHlzaWNhbCBhZGRyZXNzCiAgKiBAYWRkX2RldmljZTogYWRkIGRldmljZSB0byBpb21tdSBncm91cGluZwogICogQHJlbW92ZV9kZXZpY2U6IHJlbW92ZSBkZXZpY2UgZnJvbSBpb21tdSBncm91cGluZwpAQCAtMTE0LDYgKzExNyw4IEBACiAJCSAgIHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpOwogCXNpemVfdCAoKnVubWFwKShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKIAkJICAgICBzaXplX3Qgc2l6ZSk7CisJc2l6ZV90ICgqbWFwX3NnKShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKKwkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbmVudHMsIGludCBwcm90KTsKIAlwaHlzX2FkZHJfdCAoKmlvdmFfdG9fcGh5cykoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCBkbWFfYWRkcl90IGlvdmEpOwogCWludCAoKmFkZF9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJdm9pZCAoKnJlbW92ZV9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0xNTYsNiArMTYxLDkgQEAKIAkJICAgICBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBwcm90KTsKIGV4dGVybiBzaXplX3QgaW9tbXVfdW5tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCiAJCSAgICAgICBzaXplX3Qgc2l6ZSk7CitleHRlcm4gc2l6ZV90IGRlZmF1bHRfaW9tbXVfbWFwX3NnKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAorCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csdW5zaWduZWQgaW50IG5lbnRzLAorCQkJCWludCBwcm90KTsKIGV4dGVybiBwaHlzX2FkZHJfdCBpb21tdV9pb3ZhX3RvX3BoeXMoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCBkbWFfYWRkcl90IGlvdmEpOwogZXh0ZXJuIHZvaWQgaW9tbXVfc2V0X2ZhdWx0X2hhbmRsZXIoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCQkJaW9tbXVfZmF1bHRfaGFuZGxlcl90IGhhbmRsZXIsIHZvaWQgKnRva2VuKTsKQEAgLTI0MSw2ICsyNDksMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIHNpemVfdCBpb21tdV9tYXBfc2coc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJCSAgdW5zaWduZWQgbG9uZyBpb3ZhLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgdW5zaWduZWQgaW50IG5lbnRzLCBpbnQgcHJvdCkKK3sKKwlyZXR1cm4gZG9tYWluLT5vcHMtPm1hcF9zZyhkb21haW4sIGlvdmEsIHNnLCBuZW50cywgcHJvdCk7Cit9CisKICNlbHNlIC8qIENPTkZJR19JT01NVV9BUEkgKi8KIAogc3RydWN0IGlvbW11X29wcyB7fTsKQEAgLTI5Myw2ICszMDgsMTMgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAorc3RhdGljIGlubGluZSBzaXplX3QgaW9tbXVfbWFwX3NnKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgaW92YSwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgIHVuc2lnbmVkIGludCBuZW50cywgaW50IHByb3QpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGlvbW11X2RvbWFpbl93aW5kb3dfZW5hYmxlKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKIAkJCQkJICAgICB1MzIgd25kX25yLCBwaHlzX2FkZHJfdCBwYWRkciwKIAkJCQkJICAgICB1NjQgc2l6ZSwgaW50IHByb3QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCAwM2Y0OGQ5Li5kMDllYzdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTE1LDExICsxNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWhhbmRsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KICNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CkBAIC0yNywxMSArMjksNyBAQAogCiBzdHJ1Y3Qgc2VxX2ZpbGU7CiBzdHJ1Y3QgbW9kdWxlOwotc3RydWN0IGlycV9kZXNjOwotc3RydWN0IGlycV9kYXRhOwotdHlwZWRlZgl2b2lkICgqaXJxX2Zsb3dfaGFuZGxlcl90KSh1bnNpZ25lZCBpbnQgaXJxLAotCQkJCQkgICAgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKLXR5cGVkZWYJdm9pZCAoKmlycV9wcmVmbG93X2hhbmRsZXJfdCkoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKK3N0cnVjdCBtc2lfbXNnOwogCiAvKgogICogSVJRIGxpbmUgc3RhdHVzLgpAQCAtMTEzLDEwICsxMTEsMTQgQEAKICAqCiAgKiBJUlFfU0VUX01BU0tfT0sJLSBPSywgY29yZSB1cGRhdGVzIGlycV9kYXRhLmFmZmluaXR5CiAgKiBJUlFfU0VUX01BU0tfTk9DUFkJLSBPSywgY2hpcCBkaWQgdXBkYXRlIGlycV9kYXRhLmFmZmluaXR5CisgKiBJUlFfU0VUX01BU0tfT0tfRE9ORQktIFNhbWUgYXMgSVJRX1NFVF9NQVNLX09LIGZvciBjb3JlLiBTcGVjaWFsIGNvZGUgdG8KKyAqCQkJICBzdXBwb3J0IHN0YWNrZWQgaXJxY2hpcHMsIHdoaWNoIGluZGljYXRlcyBza2lwcGluZworICoJCQkgIGFsbCBkZXNjZW5kZW50IGlycWNoaXBzLgogICovCiBlbnVtIHsKIAlJUlFfU0VUX01BU0tfT0sgPSAwLAogCUlSUV9TRVRfTUFTS19PS19OT0NPUFksCisJSVJRX1NFVF9NQVNLX09LX0RPTkUsCiB9OwogCiBzdHJ1Y3QgbXNpX2Rlc2M7CkBAIC0xMzMsNiArMTM1LDggQEAKICAqIEBjaGlwOgkJbG93IGxldmVsIGludGVycnVwdCBoYXJkd2FyZSBhY2Nlc3MKICAqIEBkb21haW46CQlJbnRlcnJ1cHQgdHJhbnNsYXRpb24gZG9tYWluOyByZXNwb25zaWJsZSBmb3IgbWFwcGluZwogICoJCQliZXR3ZWVuIGh3aXJxIG51bWJlciBhbmQgbGludXggaXJxIG51bWJlci4KKyAqIEBwYXJlbnRfZGF0YToJcG9pbnRlciB0byBwYXJlbnQgc3RydWN0IGlycV9kYXRhIHRvIHN1cHBvcnQgaGllcmFyY2h5CisgKgkJCWlycV9kb21haW4KICAqIEBoYW5kbGVyX2RhdGE6CXBlci1JUlEgZGF0YSBmb3IgdGhlIGlycV9jaGlwIG1ldGhvZHMKICAqIEBjaGlwX2RhdGE6CQlwbGF0Zm9ybS1zcGVjaWZpYyBwZXItY2hpcCBwcml2YXRlIGRhdGEgZm9yIHRoZSBjaGlwCiAgKgkJCW1ldGhvZHMsIHRvIGFsbG93IHNoYXJlZCBjaGlwIGltcGxlbWVudGF0aW9ucwpAQCAtMTUxLDYgKzE1NSw5IEBACiAJdW5zaWduZWQgaW50CQlzdGF0ZV91c2VfYWNjZXNzb3JzOwogCXN0cnVjdCBpcnFfY2hpcAkJKmNoaXA7CiAJc3RydWN0IGlycV9kb21haW4JKmRvbWFpbjsKKyNpZmRlZglDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKKwlzdHJ1Y3QgaXJxX2RhdGEJCSpwYXJlbnRfZGF0YTsKKyNlbmRpZgogCXZvaWQJCQkqaGFuZGxlcl9kYXRhOwogCXZvaWQJCQkqY2hpcF9kYXRhOwogCXN0cnVjdCBtc2lfZGVzYwkJKm1zaV9kZXNjOwpAQCAtMzE1LDYgKzMyMiw4IEBACiAgKgkJCQlhbnkgb3RoZXIgY2FsbGJhY2sgcmVsYXRlZCB0byB0aGlzIGlycQogICogQGlycV9yZWxlYXNlX3Jlc291cmNlczoJb3B0aW9uYWwgdG8gcmVsZWFzZSByZXNvdXJjZXMgYWNxdWlyZWQgd2l0aAogICoJCQkJaXJxX3JlcXVlc3RfcmVzb3VyY2VzCisgKiBAaXJxX2NvbXBvc2VfbXNpX21zZzoJb3B0aW9uYWwgdG8gY29tcG9zZSBtZXNzYWdlIGNvbnRlbnQgZm9yIE1TSQorICogQGlycV93cml0ZV9tc2lfbXNnOglvcHRpb25hbCB0byB3cml0ZSBtZXNzYWdlIGNvbnRlbnQgZm9yIE1TSQogICogQGZsYWdzOgkJY2hpcCBzcGVjaWZpYyBmbGFncwogICovCiBzdHJ1Y3QgaXJxX2NoaXAgewpAQCAtMzUxLDYgKzM2MCw5IEBACiAJaW50CQkoKmlycV9yZXF1ZXN0X3Jlc291cmNlcykoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKIAl2b2lkCQkoKmlycV9yZWxlYXNlX3Jlc291cmNlcykoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKIAorCXZvaWQJCSgqaXJxX2NvbXBvc2VfbXNpX21zZykoc3RydWN0IGlycV9kYXRhICpkYXRhLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKKwl2b2lkCQkoKmlycV93cml0ZV9tc2lfbXNnKShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHN0cnVjdCBtc2lfbXNnICptc2cpOworCiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIH07CiAKQEAgLTQzOCw2ICs0NTAsMTggQEAKIGV4dGVybiB2b2lkIGhhbmRsZV9iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7CiBleHRlcm4gdm9pZCBoYW5kbGVfbmVzdGVkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIAorZXh0ZXJuIGludCBpcnFfY2hpcF9jb21wb3NlX21zaV9tc2coc3RydWN0IGlycV9kYXRhICpkYXRhLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKKyNpZmRlZglDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKK2V4dGVybiB2b2lkIGlycV9jaGlwX2Fja19wYXJlbnQoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKK2V4dGVybiBpbnQgaXJxX2NoaXBfcmV0cmlnZ2VyX2hpZXJhcmNoeShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworZXh0ZXJuIHZvaWQgaXJxX2NoaXBfbWFza19wYXJlbnQoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKK2V4dGVybiB2b2lkIGlycV9jaGlwX3VubWFza19wYXJlbnQoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKK2V4dGVybiB2b2lkIGlycV9jaGlwX2VvaV9wYXJlbnQoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKK2V4dGVybiBpbnQgaXJxX2NoaXBfc2V0X2FmZmluaXR5X3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsCisJCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0LAorCQkJCQlib29sIGZvcmNlKTsKKyNlbmRpZgorCiAvKiBIYW5kbGluZyBvZiB1bmhhbmRsZWQgYW5kIHNwdXJpb3VzIGludGVycnVwdHM6ICovCiBleHRlcm4gdm9pZCBub3RlX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCiAJCQkgICBpcnFyZXR1cm5fdCBhY3Rpb25fcmV0KTsKQEAgLTYzOSwxMyArNjYzLDYgQEAKIHZvaWQgaXJxX2luaXRfZGVzYyh1bnNpZ25lZCBpbnQgaXJxKTsKICNlbmRpZgogCi0jaWZuZGVmIGlycV9yZWdfd3JpdGVsCi0jIGRlZmluZSBpcnFfcmVnX3dyaXRlbCh2YWwsIGFkZHIpCXdyaXRlbCh2YWwsIGFkZHIpCi0jZW5kaWYKLSNpZm5kZWYgaXJxX3JlZ19yZWFkbAotIyBkZWZpbmUgaXJxX3JlZ19yZWFkbChhZGRyKQkJcmVhZGwoYWRkcikKLSNlbmRpZgotCiAvKioKICAqIHN0cnVjdCBpcnFfY2hpcF9yZWdzIC0gcmVnaXN0ZXIgb2Zmc2V0cyBmb3Igc3RydWN0IGlycV9nY2kKICAqIEBlbmFibGU6CUVuYWJsZSByZWdpc3RlciBvZmZzZXQgdG8gcmVnX2Jhc2UKQEAgLTY5Miw2ICs3MDksOCBAQAogICogc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgLSBHZW5lcmljIGlycSBjaGlwIGRhdGEgc3RydWN0dXJlCiAgKiBAbG9jazoJCUxvY2sgdG8gcHJvdGVjdCByZWdpc3RlciBhbmQgY2FjaGUgZGF0YSBhY2Nlc3MKICAqIEByZWdfYmFzZToJCVJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAodmlydHVhbCkKKyAqIEByZWdfcmVhZGw6CQlBbHRlcm5hdGUgSS9PIGFjY2Vzc29yIChkZWZhdWx0cyB0byByZWFkbCBpZiBOVUxMKQorICogQHJlZ193cml0ZWw6CQlBbHRlcm5hdGUgSS9PIGFjY2Vzc29yIChkZWZhdWx0cyB0byB3cml0ZWwgaWYgTlVMTCkKICAqIEBpcnFfYmFzZToJCUludGVycnVwdCBiYXNlIG5yIGZvciB0aGlzIGNoaXAKICAqIEBpcnFfY250OgkJTnVtYmVyIG9mIGludGVycnVwdHMgaGFuZGxlZCBieSB0aGlzIGNoaXAKICAqIEBtYXNrX2NhY2hlOgkJQ2FjaGVkIG1hc2sgcmVnaXN0ZXIgc2hhcmVkIGJldHdlZW4gYWxsIGNoaXAgdHlwZXMKQEAgLTcxNiw2ICs3MzUsOCBAQAogc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgewogCXJhd19zcGlubG9ja190CQlsb2NrOwogCXZvaWQgX19pb21lbQkJKnJlZ19iYXNlOworCXUzMgkJCSgqcmVnX3JlYWRsKSh2b2lkIF9faW9tZW0gKmFkZHIpOworCXZvaWQJCQkoKnJlZ193cml0ZWwpKHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7CiAJdW5zaWduZWQgaW50CQlpcnFfYmFzZTsKIAl1bnNpZ25lZCBpbnQJCWlycV9jbnQ7CiAJdTMyCQkJbWFza19jYWNoZTsKQEAgLTc0MCwxMiArNzYxLDE0IEBACiAgKgkJCQl0aGUgcGFyZW50IGlycS4gVXN1YWxseSBHUElPIGltcGxlbWVudGF0aW9ucwogICogQElSUV9HQ19NQVNLX0NBQ0hFX1BFUl9UWVBFOglNYXNrIGNhY2hlIGlzIGNoaXAgdHlwZSBwcml2YXRlCiAgKiBASVJRX0dDX05PX01BU0s6CQlEbyBub3QgY2FsY3VsYXRlIGlycV9kYXRhLT5tYXNrCisgKiBASVJRX0dDX0JFX0lPOgkJVXNlIGJpZy1lbmRpYW4gcmVnaXN0ZXIgYWNjZXNzZXMgKGRlZmF1bHQ6IExFKQogICovCiBlbnVtIGlycV9nY19mbGFncyB7CiAJSVJRX0dDX0lOSVRfTUFTS19DQUNIRQkJPSAxIDw8IDAsCiAJSVJRX0dDX0lOSVRfTkVTVEVEX0xPQ0sJCT0gMSA8PCAxLAogCUlSUV9HQ19NQVNLX0NBQ0hFX1BFUl9UWVBFCT0gMSA8PCAyLAogCUlSUV9HQ19OT19NQVNLCQkJPSAxIDw8IDMsCisJSVJRX0dDX0JFX0lPCQkJPSAxIDw8IDQsCiB9OwogCiAvKgpAQCAtODIxLDQgKzg0NCwyMiBAQAogc3RhdGljIGlubGluZSB2b2lkIGlycV9nY191bmxvY2soc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjKSB7IH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX3JlZ193cml0ZWwoc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjLAorCQkJCSAgdTMyIHZhbCwgaW50IHJlZ19vZmZzZXQpCit7CisJaWYgKGdjLT5yZWdfd3JpdGVsKQorCQlnYy0+cmVnX3dyaXRlbCh2YWwsIGdjLT5yZWdfYmFzZSArIHJlZ19vZmZzZXQpOworCWVsc2UKKwkJd3JpdGVsKHZhbCwgZ2MtPnJlZ19iYXNlICsgcmVnX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGlycV9yZWdfcmVhZGwoc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjLAorCQkJCWludCByZWdfb2Zmc2V0KQoreworCWlmIChnYy0+cmVnX3JlYWRsKQorCQlyZXR1cm4gZ2MtPnJlZ19yZWFkbChnYy0+cmVnX2Jhc2UgKyByZWdfb2Zmc2V0KTsKKwllbHNlCisJCXJldHVybiByZWFkbChnYy0+cmVnX2Jhc2UgKyByZWdfb2Zmc2V0KTsKK30KKwogI2VuZGlmIC8qIF9MSU5VWF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFkb21haW4uaCBiL2luY2x1ZGUvbGludXgvaXJxZG9tYWluLmgKaW5kZXggYjBmOWQxNi4uNjc2ZDczMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFkb21haW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycWRvbWFpbi5oCkBAIC0zMywxMSArMzMsMTQgQEAKICNkZWZpbmUgX0xJTlVYX0lSUURPTUFJTl9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWhhbmRsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CiAKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIHN0cnVjdCBpcnFfZG9tYWluOwogc3RydWN0IG9mX2RldmljZV9pZDsKK3N0cnVjdCBpcnFfY2hpcDsKK3N0cnVjdCBpcnFfZGF0YTsKIAogLyogTnVtYmVyIG9mIGlycXMgcmVzZXJ2ZWQgZm9yIGEgbGVnYWN5IGlzYSBjb250cm9sbGVyICovCiAjZGVmaW5lIE5VTV9JU0FfSU5URVJSVVBUUwkxNgpAQCAtNjQsNiArNjcsMTYgQEAKIAlpbnQgKCp4bGF0ZSkoc3RydWN0IGlycV9kb21haW4gKmQsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIAkJICAgICBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfdHlwZSk7CisKKyNpZmRlZglDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKKwkvKiBleHRlbmRlZCBWMiBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgaGllcmFyY2h5IGlycV9kb21haW5zICovCisJaW50ICgqYWxsb2MpKHN0cnVjdCBpcnFfZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJICAgICB1bnNpZ25lZCBpbnQgbnJfaXJxcywgdm9pZCAqYXJnKTsKKwl2b2lkICgqZnJlZSkoc3RydWN0IGlycV9kb21haW4gKmQsIHVuc2lnbmVkIGludCB2aXJxLAorCQkgICAgIHVuc2lnbmVkIGludCBucl9pcnFzKTsKKwl2b2lkICgqYWN0aXZhdGUpKHN0cnVjdCBpcnFfZG9tYWluICpkLCBzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhKTsKKwl2b2lkICgqZGVhY3RpdmF0ZSkoc3RydWN0IGlycV9kb21haW4gKmQsIHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpOworI2VuZGlmCiB9OwogCiBleHRlcm4gc3RydWN0IGlycV9kb21haW5fb3BzIGlycV9nZW5lcmljX2NoaXBfb3BzOwpAQCAtNzcsNiArOTAsNyBAQAogICogQG9wczogcG9pbnRlciB0byBpcnFfZG9tYWluIG1ldGhvZHMKICAqIEBob3N0X2RhdGE6IHByaXZhdGUgZGF0YSBwb2ludGVyIGZvciB1c2UgYnkgb3duZXIuICBOb3QgdG91Y2hlZCBieSBpcnFfZG9tYWluCiAgKiAgICAgICAgICAgICBjb3JlIGNvZGUuCisgKiBAZmxhZ3M6IGhvc3QgcGVyIGlycV9kb21haW4gZmxhZ3MKICAqCiAgKiBPcHRpb25hbCBlbGVtZW50cwogICogQG9mX25vZGU6IFBvaW50ZXIgdG8gZGV2aWNlIHRyZWUgbm9kZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpcnFfZG9tYWluLiBVc2VkCkBAIC04NCw2ICs5OCw3IEBACiAgKiBAZ2M6IFBvaW50ZXIgdG8gYSBsaXN0IG9mIGdlbmVyaWMgY2hpcHMuIFRoZXJlIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvcgogICogICAgICBzZXR0aW5nIHVwIG9uZSBvciBtb3JlIGdlbmVyaWMgY2hpcHMgZm9yIGludGVycnVwdCBjb250cm9sbGVycwogICogICAgICBkcml2ZXJzIHVzaW5nIHRoZSBnZW5lcmljIGNoaXAgbGlicmFyeSB3aGljaCB1c2VzIHRoaXMgcG9pbnRlci4KKyAqIEBwYXJlbnQ6IFBvaW50ZXIgdG8gcGFyZW50IGlycV9kb21haW4gdG8gc3VwcG9ydCBoaWVyYXJjaHkgaXJxX2RvbWFpbnMKICAqCiAgKiBSZXZtYXAgZGF0YSwgdXNlZCBpbnRlcm5hbGx5IGJ5IGlycV9kb21haW4KICAqIEByZXZtYXBfZGlyZWN0X21heF9pcnE6IFRoZSBsYXJnZXN0IGh3aXJxIHRoYXQgY2FuIGJlIHNldCBmb3IgY29udHJvbGxlcnMgdGhhdApAQCAtOTcsMTAgKzExMiwxNCBAQAogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzICpvcHM7CiAJdm9pZCAqaG9zdF9kYXRhOworCXVuc2lnbmVkIGludCBmbGFnczsKIAogCS8qIE9wdGlvbmFsIGRhdGEgKi8KIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7CiAJc3RydWN0IGlycV9kb21haW5fY2hpcF9nZW5lcmljICpnYzsKKyNpZmRlZglDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqcGFyZW50OworI2VuZGlmCiAKIAkvKiByZXZlcnNlIG1hcCBkYXRhLiBUaGUgbGluZWFyIG1hcCBnZXRzIGFwcGVuZGVkIHRvIHRoZSBpcnFfZG9tYWluICovCiAJaXJxX2h3X251bWJlcl90IGh3aXJxX21heDsKQEAgLTExMCw2ICsxMjksMjIgQEAKIAl1bnNpZ25lZCBpbnQgbGluZWFyX3Jldm1hcFtdOwogfTsKIAorLyogSXJxIGRvbWFpbiBmbGFncyAqLworZW51bSB7CisJLyogSXJxIGRvbWFpbiBpcyBoaWVyYXJjaGljYWwgKi8KKwlJUlFfRE9NQUlOX0ZMQUdfSElFUkFSQ0hZCT0gKDEgPDwgMCksCisKKwkvKiBDb3JlIGNhbGxzIGFsbG9jL2ZyZWUgcmVjdXJzaXZlIHRocm91Z2ggdGhlIGRvbWFpbiBoaWVyYXJjaHkuICovCisJSVJRX0RPTUFJTl9GTEFHX0FVVE9fUkVDVVJTSVZFCT0gKDEgPDwgMSksCisKKwkvKgorCSAqIEZsYWdzIHN0YXJ0aW5nIGZyb20gSVJRX0RPTUFJTl9GTEFHX05PTkNPUkUgYXJlIHJlc2VydmVkCisJICogZm9yIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHB1cnBvc2VzIGFuZCBpZ25vcmVkIGJ5IHRoZQorCSAqIGNvcmUgY29kZS4KKwkgKi8KKwlJUlFfRE9NQUlOX0ZMQUdfTk9OQ09SRQkJPSAoMSA8PCAxNiksCit9OworCiAjaWZkZWYgQ09ORklHX0lSUV9ET01BSU4KIHN0cnVjdCBpcnFfZG9tYWluICpfX2lycV9kb21haW5fYWRkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwgaW50IHNpemUsCiAJCQkJICAgIGlycV9od19udW1iZXJfdCBod2lycV9tYXgsIGludCBkaXJlY3RfbWF4LApAQCAtMjIwLDggKzI1NSw3NCBAQAogCQkJY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJCWlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF90eXBlKTsKIAorLyogVjIgaW50ZXJmYWNlcyB0byBzdXBwb3J0IGhpZXJhcmNoeSBJUlEgZG9tYWlucy4gKi8KK2V4dGVybiBzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kb21haW5fZ2V0X2lycV9kYXRhKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJCQl1bnNpZ25lZCBpbnQgdmlycSk7CisjaWZkZWYJQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZCitleHRlcm4gc3RydWN0IGlycV9kb21haW4gKmlycV9kb21haW5fYWRkX2hpZXJhcmNoeShzdHJ1Y3QgaXJxX2RvbWFpbiAqcGFyZW50LAorCQkJdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCWNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyAqb3BzLCB2b2lkICpob3N0X2RhdGEpOworZXh0ZXJuIGludCBfX2lycV9kb21haW5fYWxsb2NfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBpbnQgaXJxX2Jhc2UsCisJCQkJICAgdW5zaWduZWQgaW50IG5yX2lycXMsIGludCBub2RlLCB2b2lkICphcmcsCisJCQkJICAgYm9vbCByZWFsbG9jKTsKK2V4dGVybiB2b2lkIGlycV9kb21haW5fZnJlZV9pcnFzKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgbnJfaXJxcyk7CitleHRlcm4gdm9pZCBpcnFfZG9tYWluX2FjdGl2YXRlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhKTsKK2V4dGVybiB2b2lkIGlycV9kb21haW5fZGVhY3RpdmF0ZV9pcnEoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV9kb21haW5fYWxsb2NfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJdW5zaWduZWQgaW50IG5yX2lycXMsIGludCBub2RlLCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9faXJxX2RvbWFpbl9hbGxvY19pcnFzKGRvbWFpbiwgLTEsIG5yX2lycXMsIG5vZGUsIGFyZywgZmFsc2UpOworfQorCitleHRlcm4gaW50IGlycV9kb21haW5fc2V0X2h3aXJxX2FuZF9jaGlwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJCSB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCQkJIGlycV9od19udW1iZXJfdCBod2lycSwKKwkJCQkJIHN0cnVjdCBpcnFfY2hpcCAqY2hpcCwKKwkJCQkJIHZvaWQgKmNoaXBfZGF0YSk7CitleHRlcm4gdm9pZCBpcnFfZG9tYWluX3NldF9pbmZvKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCB2aXJxLAorCQkJCWlycV9od19udW1iZXJfdCBod2lycSwgc3RydWN0IGlycV9jaGlwICpjaGlwLAorCQkJCXZvaWQgKmNoaXBfZGF0YSwgaXJxX2Zsb3dfaGFuZGxlcl90IGhhbmRsZXIsCisJCQkJdm9pZCAqaGFuZGxlcl9kYXRhLCBjb25zdCBjaGFyICpoYW5kbGVyX25hbWUpOworZXh0ZXJuIHZvaWQgaXJxX2RvbWFpbl9yZXNldF9pcnFfZGF0YShzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhKTsKK2V4dGVybiB2b2lkIGlycV9kb21haW5fZnJlZV9pcnFzX2NvbW1vbihzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQl1bnNpZ25lZCBpbnQgdmlycSwKKwkJCQkJdW5zaWduZWQgaW50IG5yX2lycXMpOworZXh0ZXJuIHZvaWQgaXJxX2RvbWFpbl9mcmVlX2lycXNfdG9wKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJICAgICB1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMpOworCitleHRlcm4gaW50IGlycV9kb21haW5fYWxsb2NfaXJxc19wYXJlbnQoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJdW5zaWduZWQgaW50IGlycV9iYXNlLAorCQkJCQl1bnNpZ25lZCBpbnQgbnJfaXJxcywgdm9pZCAqYXJnKTsKKworZXh0ZXJuIHZvaWQgaXJxX2RvbWFpbl9mcmVlX2lycXNfcGFyZW50KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJCXVuc2lnbmVkIGludCBpcnFfYmFzZSwKKwkJCQkJdW5zaWduZWQgaW50IG5yX2lycXMpOworCitzdGF0aWMgaW5saW5lIGJvb2wgaXJxX2RvbWFpbl9pc19oaWVyYXJjaHkoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbikKK3sKKwlyZXR1cm4gZG9tYWluLT5mbGFncyAmIElSUV9ET01BSU5fRkxBR19ISUVSQVJDSFk7Cit9CisjZWxzZQkvKiBDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZG9tYWluX2FjdGl2YXRlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGlycV9kb21haW5fZGVhY3RpdmF0ZV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlycV9kb21haW5fYWxsb2NfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJdW5zaWduZWQgaW50IG5yX2lycXMsIGludCBub2RlLCB2b2lkICphcmcpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXJxX2RvbWFpbl9pc19oaWVyYXJjaHkoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYJLyogQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZICovCisKICNlbHNlIC8qIENPTkZJR19JUlFfRE9NQUlOICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2Rpc3Bvc2VfbWFwcGluZyh1bnNpZ25lZCBpbnQgdmlycSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZG9tYWluX2RlYWN0aXZhdGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkgeyB9CiAjZW5kaWYgLyogIUNPTkZJR19JUlFfRE9NQUlOICovCiAKICNlbmRpZiAvKiBfTElOVVhfSVJRRE9NQUlOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxaGFuZGxlci5oIGIvaW5jbHVkZS9saW51eC9pcnFoYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkNTQzMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXJxaGFuZGxlci5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX0xJTlVYX0lSUUhBTkRMRVJfSAorI2RlZmluZSBfTElOVVhfSVJRSEFORExFUl9ICisKKy8qCisgKiBJbnRlcnJ1cHQgZmxvdyBoYW5kbGVyIHR5cGVkZWZzIGFyZSBkZWZpbmVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIKKyAqIGluY2x1ZGUgZGVwZW5kZW5jaWVzLgorICovCisKK3N0cnVjdCBpcnFfZGVzYzsKK3N0cnVjdCBpcnFfZGF0YTsKK3R5cGVkZWYJdm9pZCAoKmlycV9mbG93X2hhbmRsZXJfdCkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKK3R5cGVkZWYJdm9pZCAoKmlycV9wcmVmbG93X2hhbmRsZXJfdCkoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5fbGV2ZWxzLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5fbGV2ZWxzLmgKaW5kZXggODY2Y2FhYS4uYzJjZTE1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oCisrKyBiL2luY2x1ZGUvbGludXgva2Vybl9sZXZlbHMuaApAQCAtMjIsNCArMjIsMTcgQEAKICAqLwogI2RlZmluZSBLRVJOX0NPTlQJIiIKIAorLyogaW50ZWdlciBlcXVpdmFsZW50cyBvZiBLRVJOXzxMRVZFTD4gKi8KKyNkZWZpbmUgTE9HTEVWRUxfU0NIRUQJCS0yCS8qIERlZmVycmVkIG1lc3NhZ2VzIGZyb20gc2NoZWQgY29kZQorCQkJCQkgKiBhcmUgc2V0IHRvIHRoaXMgc3BlY2lhbCBsZXZlbCAqLworI2RlZmluZSBMT0dMRVZFTF9ERUZBVUxUCS0xCS8qIGRlZmF1bHQgKG9yIGxhc3QpIGxvZ2xldmVsICovCisjZGVmaW5lIExPR0xFVkVMX0VNRVJHCQkwCS8qIHN5c3RlbSBpcyB1bnVzYWJsZSAqLworI2RlZmluZSBMT0dMRVZFTF9BTEVSVAkJMQkvKiBhY3Rpb24gbXVzdCBiZSB0YWtlbiBpbW1lZGlhdGVseSAqLworI2RlZmluZSBMT0dMRVZFTF9DUklUCQkyCS8qIGNyaXRpY2FsIGNvbmRpdGlvbnMgKi8KKyNkZWZpbmUgTE9HTEVWRUxfRVJSCQkzCS8qIGVycm9yIGNvbmRpdGlvbnMgKi8KKyNkZWZpbmUgTE9HTEVWRUxfV0FSTklORwk0CS8qIHdhcm5pbmcgY29uZGl0aW9ucyAqLworI2RlZmluZSBMT0dMRVZFTF9OT1RJQ0UJCTUJLyogbm9ybWFsIGJ1dCBzaWduaWZpY2FudCBjb25kaXRpb24gKi8KKyNkZWZpbmUgTE9HTEVWRUxfSU5GTwkJNgkvKiBpbmZvcm1hdGlvbmFsICovCisjZGVmaW5lIExPR0xFVkVMX0RFQlVHCQk3CS8qIGRlYnVnLWxldmVsIG1lc3NhZ2VzICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggM2Q3NzBmNTUuLjIzM2VhODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTYyLDYgKzE2Miw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVAKKyAgdm9pZCBfX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KTsKICAgdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpOwogLyoqCiAgKiBtaWdodF9zbGVlcCAtIGFubm90YXRpb24gZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbiBzbGVlcApAQCAtMTc1LDEwICsxNzYsMTQgQEAKICAqLwogIyBkZWZpbmUgbWlnaHRfc2xlZXAoKSBcCiAJZG8geyBfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgMCk7IG1pZ2h0X3Jlc2NoZWQoKTsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHNjaGVkX2Fubm90YXRlX3NsZWVwKCkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpCiAjZWxzZQorICBzdGF0aWMgaW5saW5lIHZvaWQgX19fbWlnaHRfc2xlZXAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAgaW50IHByZWVtcHRfb2Zmc2V0KSB7IH0KICAgc3RhdGljIGlubGluZSB2b2lkIF9fbWlnaHRfc2xlZXAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCiAJCQkJICAgaW50IHByZWVtcHRfb2Zmc2V0KSB7IH0KICMgZGVmaW5lIG1pZ2h0X3NsZWVwKCkgZG8geyBtaWdodF9yZXNjaGVkKCk7IH0gd2hpbGUgKDApCisjIGRlZmluZSBzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZGVmaW5lIG1pZ2h0X3NsZWVwX2lmKGNvbmQpIGRvIHsgaWYgKGNvbmQpIG1pZ2h0X3NsZWVwKCk7IH0gd2hpbGUgKDApCkBAIC00MjIsNiArNDI3LDcgQEAKIGV4dGVybiBpbnQgcGFuaWNfb25fb29wczsKIGV4dGVybiBpbnQgcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pOwogZXh0ZXJuIGludCBwYW5pY19vbl9pb19ubWk7CitleHRlcm4gaW50IHBhbmljX29uX3dhcm47CiBleHRlcm4gaW50IHN5c2N0bF9wYW5pY19vbl9zdGFja292ZXJmbG93OwogLyoKICAqIE9ubHkgdG8gYmUgdXNlZCBieSBhcmNoIGluaXQgY29kZS4gSWYgdGhlIHVzZXIgb3Zlci13cm90ZSB0aGUgZGVmYXVsdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaAppbmRleCBhNTc2MTFkLi4zNjExMDFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xlZHMuaApAQCAtMjYxLDYgKzI2MSw3IEBACiAJdW5zaWduZWQJcmV0YWluX3N0YXRlX3N1c3BlbmRlZCA6IDE7CiAJdW5zaWduZWQJZGVmYXVsdF9zdGF0ZSA6IDI7CiAJLyogZGVmYXVsdF9zdGF0ZSBzaG91bGQgYmUgb25lIG9mIExFRFNfR1BJT19ERUZTVEFURV8oT058T0ZGfEtFRVApICovCisJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2Q7CiB9OwogI2RlZmluZSBMRURTX0dQSU9fREVGU1RBVEVfT0ZGCQkwCiAjZGVmaW5lIExFRFNfR1BJT19ERUZTVEFURV9PTgkJMQpAQCAtMjczLDcgKzI3NCw3IEBACiAjZGVmaW5lIEdQSU9fTEVEX05PX0JMSU5LX0xPVwkwCS8qIE5vIGJsaW5rIEdQSU8gc3RhdGUgbG93ICovCiAjZGVmaW5lIEdQSU9fTEVEX05PX0JMSU5LX0hJR0gJMQkvKiBObyBibGluayBHUElPIHN0YXRlIGhpZ2ggKi8KICNkZWZpbmUgR1BJT19MRURfQkxJTksJCTIJLyogUGxlYXNlLCBibGluayAqLwotCWludAkJKCpncGlvX2JsaW5rX3NldCkodW5zaWduZWQgZ3BpbywgaW50IHN0YXRlLAorCWludAkJKCpncGlvX2JsaW5rX3NldCkoc3RydWN0IGdwaW9fZGVzYyAqZGVzYywgaW50IHN0YXRlLAogCQkJCQl1bnNpZ25lZCBsb25nICpkZWxheV9vbiwKIAkJCQkJdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCBiZDVmZWZlLi5iZmJjODE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTExOTEsOSArMTE5MSw5IEBACiBleHRlcm4gaW50IGF0YV9zY3NpX3NsYXZlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwogZXh0ZXJuIHZvaWQgYXRhX3Njc2lfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJCSAgICAgICBpbnQgcXVldWVfZGVwdGgsIGludCByZWFzb24pOworCQkJCSAgICAgICBpbnQgcXVldWVfZGVwdGgpOwogZXh0ZXJuIGludCBfX2F0YV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJCSAgICBpbnQgcXVldWVfZGVwdGgsIGludCByZWFzb24pOworCQkJCSAgICBpbnQgcXVldWVfZGVwdGgpOwogZXh0ZXJuIHN0cnVjdCBhdGFfZGV2aWNlICphdGFfZGV2X3BhaXIoc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpOwogZXh0ZXJuIGludCBhdGFfZG9fc2V0X21vZGUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnJfZmFpbGVkX2Rldik7CiBleHRlcm4gdm9pZCBhdGFfc2NzaV9wb3J0X2Vycm9yX2hhbmRsZXIoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgc3RydWN0IGF0YV9wb3J0ICphcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2RlYnVnLmgKaW5kZXggMjU3ZDM3Ny4uMGNhODEwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QvZGVidWcuaApAQCAtMTcsMTIgKzE3LDggQEAKICAqIEVuYWJsZSBsb2NrZCBkZWJ1Z2dpbmcuCiAgKiBSZXF1aXJlcyBSUENfREVCVUcuCiAgKi8KLSNpZmRlZiBSUENfREVCVUcKLSMgZGVmaW5lIExPQ0tEX0RFQlVHCQkxCi0jZW5kaWYKLQogI3VuZGVmIGlmZGVidWcKLSNpZiBkZWZpbmVkKFJQQ19ERUJVRykgJiYgZGVmaW5lZChMT0NLRF9ERUJVRykKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBpZmRlYnVnKGZsYWcpCQlpZiAodW5saWtlbHkobmxtX2RlYnVnICYgTkxNREJHXyMjZmxhZykpCiAjZWxzZQogIyBkZWZpbmUgaWZkZWJ1ZyhmbGFnKQkJaWYgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21idXMuaCBiL2luY2x1ZGUvbGludXgvbWJ1cy5oCmluZGV4IDU1MGM4OGYuLjYxMWI2OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWJ1cy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWJ1cy5oCkBAIC02MSw2ICs2MSw3IEBACiB9CiAjZW5kaWYKIAoraW50IG12ZWJ1X21idXNfc2F2ZV9jcHVfdGFyZ2V0KHUzMiAqc3RvcmVfYWRkcik7CiB2b2lkIG12ZWJ1X21idXNfZ2V0X3BjaWVfbWVtX2FwZXJ0dXJlKHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIHZvaWQgbXZlYnVfbWJ1c19nZXRfcGNpZV9pb19hcGVydHVyZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CiBpbnQgbXZlYnVfbWJ1c19hZGRfd2luZG93X3JlbWFwX2J5X2lkKHVuc2lnbmVkIGludCB0YXJnZXQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDZiNzU2NDAuLjZlYTlmOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgogCiBzdHJ1Y3QgbWVtX2Nncm91cDsKLXN0cnVjdCBwYWdlX2Nncm91cDsKIHN0cnVjdCBwYWdlOwogc3RydWN0IG1tX3N0cnVjdDsKIHN0cnVjdCBrbWVtX2NhY2hlOwpAQCAtNjgsMTAgKzY3LDkgQEAKIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfem9uZV9scnV2ZWMoc3RydWN0IHpvbmUgKiwgc3RydWN0IG1lbV9jZ3JvdXAgKik7CiBzdHJ1Y3QgbHJ1dmVjICptZW1fY2dyb3VwX3BhZ2VfbHJ1dmVjKHN0cnVjdCBwYWdlICosIHN0cnVjdCB6b25lICopOwogCi1ib29sIF9fbWVtX2Nncm91cF9zYW1lX29yX3N1YnRyZWUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csCi0JCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwotYm9vbCB0YXNrX2luX21lbV9jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKK2Jvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKKwkJCSAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290KTsKK2Jvb2wgdGFza19pbl9tZW1fY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIAogZXh0ZXJuIHN0cnVjdCBtZW1fY2dyb3VwICp0cnlfZ2V0X21lbV9jZ3JvdXBfZnJvbV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKQEAgLTc5LDE1ICs3NywxNiBAQAogZXh0ZXJuIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogZXh0ZXJuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fY3NzKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpOwogCi1zdGF0aWMgaW5saW5lCi1ib29sIG1tX21hdGNoX2Nncm91cChjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQorc3RhdGljIGlubGluZSBib29sIG1tX21hdGNoX2Nncm91cChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKnRhc2tfbWVtY2c7Ci0JYm9vbCBtYXRjaDsKKwlib29sIG1hdGNoID0gZmFsc2U7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdGFza19tZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV90YXNrKHJjdV9kZXJlZmVyZW5jZShtbS0+b3duZXIpKTsKLQltYXRjaCA9IF9fbWVtX2Nncm91cF9zYW1lX29yX3N1YnRyZWUobWVtY2csIHRhc2tfbWVtY2cpOworCWlmICh0YXNrX21lbWNnKQorCQltYXRjaCA9IG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudCh0YXNrX21lbWNnLCBtZW1jZyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIG1hdGNoOwogfQpAQCAtMTQxLDggKzE0MCw4IEBACiAKIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2JlZ2luX3BhZ2Vfc3RhdChzdHJ1Y3QgcGFnZSAqcGFnZSwgYm9vbCAqbG9ja2VkLAogCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICpmbGFncyk7Ci12b2lkIG1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7Cit2b2lkIG1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfcGFnZV9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkgZW51bSBtZW1fY2dyb3VwX3N0YXRfaW5kZXggaWR4LCBpbnQgdmFsKTsKIApAQCAtMTc0LDEwICsxNzMsNiBAQAogdm9pZCBtZW1fY2dyb3VwX3NwbGl0X2h1Z2VfZml4dXAoc3RydWN0IHBhZ2UgKmhlYWQpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfREVCVUdfVk0KLWJvb2wgbWVtX2Nncm91cF9iYWRfcGFnZV9jaGVjayhzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfYmFkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwotI2VuZGlmCiAjZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi8KIHN0cnVjdCBtZW1fY2dyb3VwOwogCkBAIC0yOTcsNyArMjkyLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCWJvb2wgbG9ja2VkLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkJCQlib29sICpsb2NrZWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQogewogfQogCkBAIC0zNDcsMTkgKzM0Miw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKLSNpZiAhZGVmaW5lZChDT05GSUdfTUVNQ0cpIHx8ICFkZWZpbmVkKENPTkZJR19ERUJVR19WTSkKLXN0YXRpYyBpbmxpbmUgYm9vbAotbWVtX2Nncm91cF9iYWRfcGFnZV9jaGVjayhzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVtX2Nncm91cF9wcmludF9iYWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLX0KLSNlbmRpZgotCiBlbnVtIHsKIAlVTkRFUl9MSU1JVCwKIAlTT0ZUX0xJTUlULApAQCAtNDQ3LDkgKzQyOSw4IEBACiAJLyoKIAkgKiBfX0dGUF9OT0ZBSUwgYWxsb2NhdGlvbnMgd2lsbCBtb3ZlIG9uIGV2ZW4gaWYgY2hhcmdpbmcgaXMgbm90CiAJICogcG9zc2libGUuIFRoZXJlZm9yZSB3ZSBkb24ndCBldmVuIHRyeSwgYW5kIGhhdmUgdGhpcyBhbGxvY2F0aW9uCi0JICogdW5hY2NvdW50ZWQuIFdlIGNvdWxkIGluIHRoZW9yeSBjaGFyZ2UgaXQgd2l0aAotCSAqIHJlc19jb3VudGVyX2NoYXJnZV9ub2ZhaWwsIGJ1dCB3ZSBob3BlIHRob3NlIGFsbG9jYXRpb25zIGFyZSByYXJlLAotCSAqIGFuZCB3b24ndCBiZSB3b3J0aCB0aGUgdHJvdWJsZS4KKwkgKiB1bmFjY291bnRlZC4gV2UgY291bGQgaW4gdGhlb3J5IGNoYXJnZSBpdCBmb3JjaWJseSwgYnV0IHdlIGhvcGUKKwkgKiB0aG9zZSBhbGxvY2F0aW9ucyBhcmUgcmFyZSwgYW5kIHdvbid0IGJlIHdvcnRoIHRoZSB0cm91YmxlLgogCSAqLwogCWlmIChnZnAgJiBfX0dGUF9OT0ZBSUwpCiAJCXJldHVybiB0cnVlOwpAQCAtNDY3LDggKzQ0OCw2IEBACiAgKiBtZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VzOiB1bmNoYXJnZSBwYWdlcyBmcm9tIG1lbWNnCiAgKiBAcGFnZTogcG9pbnRlciB0byBzdHJ1Y3QgcGFnZSBiZWluZyBmcmVlZAogICogQG9yZGVyOiBhbGxvY2F0aW9uIG9yZGVyLgotICoKLSAqIHRoZXJlIGlzIG5vIG5lZWQgdG8gc3BlY2lmeSBtZW1jZyBoZXJlLCBzaW5jZSBpdCBpcyBlbWJlZGRlZCBpbiBwYWdlX2Nncm91cAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikKQEAgLTQ4NSw4ICs0NjQsNyBAQAogICoKICAqIE5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciBtZW1jZ19rbWVtX25ld3BhZ2VfY2hhcmdlLCByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mgb3IKICAqIGZhaWx1cmUgb2YgdGhlIGFsbG9jYXRpb24uIGlmIEBwYWdlIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXZlcnQgdGhlCi0gKiBjaGFyZ2VzLiBPdGhlcndpc2UsIGl0IHdpbGwgY29tbWl0IHRoZSBtZW1jZyBnaXZlbiBieSBAbWVtY2cgdG8gdGhlCi0gKiBjb3JyZXNwb25kaW5nIHBhZ2VfY2dyb3VwLgorICogY2hhcmdlcy4gT3RoZXJ3aXNlLCBpdCB3aWxsIGNvbW1pdCBAcGFnZSB0byBAbWVtY2cuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogbWVtY2dfa21lbV9jb21taXRfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBvcmRlcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2FieDUwMC9hYjg1MDAtc3lzY3RybC5oIGIvaW5jbHVkZS9saW51eC9tZmQvYWJ4NTAwL2FiODUwMC1zeXNjdHJsLmgKaW5kZXggYWRiYTg5ZC4uNjg5MzEyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvYWJ4NTAwL2FiODUwMC1zeXNjdHJsLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvYWJ4NTAwL2FiODUwMC1zeXNjdHJsLmgKQEAgLTEyLDcgKzEyLDYgQEAKIAogaW50IGFiODUwMF9zeXNjdHJsX3JlYWQodTE2IHJlZywgdTggKnZhbHVlKTsKIGludCBhYjg1MDBfc3lzY3RybF93cml0ZSh1MTYgcmVnLCB1OCBtYXNrLCB1OCB2YWx1ZSk7Ci12b2lkIGFiODUwMF9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKTsKIAogI2Vsc2UKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvYXJpem9uYS9yZWdpc3RlcnMuaCBiL2luY2x1ZGUvbGludXgvbWZkL2FyaXpvbmEvcmVnaXN0ZXJzLmgKaW5kZXggYzBiMDc1Zi4uYWFjYzEwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvYXJpem9uYS9yZWdpc3RlcnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9hcml6b25hL3JlZ2lzdGVycy5oCkBAIC0xMjUsNiArMTI1LDggQEAKICNkZWZpbmUgQVJJWk9OQV9NSUNfQklBU19DVFJMXzEgICAgICAgICAgICAgICAgICAweDIxOAogI2RlZmluZSBBUklaT05BX01JQ19CSUFTX0NUUkxfMiAgICAgICAgICAgICAgICAgIDB4MjE5CiAjZGVmaW5lIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8zICAgICAgICAgICAgICAgICAgMHgyMUEKKyNkZWZpbmUgQVJJWk9OQV9IUF9DVFJMXzFMICAgICAgICAgICAgICAgICAgICAgICAweDIyNQorI2RlZmluZSBBUklaT05BX0hQX0NUUkxfMVIgICAgICAgICAgICAgICAgICAgICAgIDB4MjI2CiAjZGVmaW5lIEFSSVpPTkFfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzEgICAgICAgICAgMHgyOTMKICNkZWZpbmUgQVJJWk9OQV9IRUFEUEhPTkVfREVURUNUXzEgICAgICAgICAgICAgICAweDI5QgogI2RlZmluZSBBUklaT05BX0hFQURQSE9ORV9ERVRFQ1RfMiAgICAgICAgICAgICAgIDB4MjlDCkBAIC0yNzksOCArMjgxLDE2IEBACiAjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzIgICAgICAgICAgICAgICAgMHg1NDgKICNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMyAgICAgICAgICAgICAgICAweDU0OQogI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF80ICAgICAgICAgICAgICAgIDB4NTRBCisjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzUgICAgICAgICAgICAgICAgMHg1NEIKKyNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfNiAgICAgICAgICAgICAgICAweDU0QworI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF83ICAgICAgICAgICAgICAgIDB4NTRECisjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzggICAgICAgICAgICAgICAgMHg1NEUKICNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTEgICAgICAgICAgICAgICAweDU1MQogI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xMiAgICAgICAgICAgICAgIDB4NTUyCisjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzEzICAgICAgICAgICAgICAgMHg1NTMKKyNkZWZpbmUgQVJJWk9OQV9BSUYyX0ZSQU1FX0NUUkxfMTQgICAgICAgICAgICAgICAweDU1NAorI2RlZmluZSBBUklaT05BX0FJRjJfRlJBTUVfQ1RSTF8xNSAgICAgICAgICAgICAgIDB4NTU1CisjZGVmaW5lIEFSSVpPTkFfQUlGMl9GUkFNRV9DVFJMXzE2ICAgICAgICAgICAgICAgMHg1NTYKICNkZWZpbmUgQVJJWk9OQV9BSUYyX1RYX0VOQUJMRVMgICAgICAgICAgICAgICAgICAweDU1OQogI2RlZmluZSBBUklaT05BX0FJRjJfUlhfRU5BQkxFUyAgICAgICAgICAgICAgICAgIDB4NTVBCiAjZGVmaW5lIEFSSVpPTkFfQUlGMl9GT1JDRV9XUklURSAgICAgICAgICAgICAgICAgMHg1NUIKQEAgLTIyNDUsNiArMjI1NSw0NiBAQAogI2RlZmluZSBBUklaT05BX01JQ0IzX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjNfRU5BICovCiAKIC8qCisgKiBSNTQ5ICgweDIyNSkgLSBIUCBDdHJsIDFMCisgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFMICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFJNVl9TSFJUX0hQMUwgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFMX01BU0sgICAgICAgICAgICAgICAweDQwMDAgIC8qIFJNVl9TSFJUX0hQMUwgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFMX1NISUZUICAgICAgICAgICAgICAgICAgMTQgIC8qIFJNVl9TSFJUX0hQMUwgKi8KKyNkZWZpbmUgQVJJWk9OQV9STVZfU0hSVF9IUDFMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFJNVl9TSFJUX0hQMUwgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFMX0ZMV1IgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQMUxfRkxXUiAqLworI2RlZmluZSBBUklaT05BX0hQMUxfRkxXUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFAxTF9GTFdSICovCisjZGVmaW5lIEFSSVpPTkFfSFAxTF9GTFdSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBIUDFMX0ZMV1IgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFMX0ZMV1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQMUxfRkxXUiAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVEkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFAxTF9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVElfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFAxTF9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVElfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFAxTF9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVElfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFAxTF9TSFJUSSAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVE8gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFAxTF9TSFJUTyAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVE9fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFAxTF9TSFJUTyAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFAxTF9TSFJUTyAqLworI2RlZmluZSBBUklaT05BX0hQMUxfU0hSVE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFAxTF9TSFJUTyAqLworCisvKgorICogUjU1MCAoMHgyMjYpIC0gSFAgQ3RybCAxUgorICovCisjZGVmaW5lIEFSSVpPTkFfUk1WX1NIUlRfSFAxUiAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBSTVZfU0hSVF9IUDFSICovCisjZGVmaW5lIEFSSVpPTkFfUk1WX1NIUlRfSFAxUl9NQVNLICAgICAgICAgICAgICAgMHg0MDAwICAvKiBSTVZfU0hSVF9IUDFSICovCisjZGVmaW5lIEFSSVpPTkFfUk1WX1NIUlRfSFAxUl9TSElGVCAgICAgICAgICAgICAgICAgIDE0ICAvKiBSTVZfU0hSVF9IUDFSICovCisjZGVmaW5lIEFSSVpPTkFfUk1WX1NIUlRfSFAxUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBSTVZfU0hSVF9IUDFSICovCisjZGVmaW5lIEFSSVpPTkFfSFAxUl9GTFdSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUDFSX0ZMV1IgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX0ZMV1JfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQMVJfRkxXUiAqLworI2RlZmluZSBBUklaT05BX0hQMVJfRkxXUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSFAxUl9GTFdSICovCisjZGVmaW5lIEFSSVpPTkFfSFAxUl9GTFdSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUDFSX0ZMV1IgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRJICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQMVJfU0hSVEkgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRJX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQMVJfU0hSVEkgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRJX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQMVJfU0hSVEkgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQMVJfU0hSVEkgKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRPICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQMVJfU0hSVE8gKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRPX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQMVJfU0hSVE8gKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRPX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQMVJfU0hSVE8gKi8KKyNkZWZpbmUgQVJJWk9OQV9IUDFSX1NIUlRPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQMVJfU0hSVE8gKi8KKworLyoKICAqIFI2NTkgKDB4MjkzKSAtIEFjY2Vzc29yeSBEZXRlY3QgTW9kZSAxCiAgKi8KICNkZWZpbmUgQVJJWk9OQV9BQ0NERVRfU1JDICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFDQ0RFVF9TUkMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2F0bWVsLWhsY2RjLmggYi9pbmNsdWRlL2xpbnV4L21mZC9hdG1lbC1obGNkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNzlhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9hdG1lbC1obGNkYy5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBFbGVjdHJvbnMKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBdG1lbAorICoKKyAqIEF1dGhvcjogQm9yaXMgQlJFWklMTE9OIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9ITENEQ19ICisjZGVmaW5lIF9fTElOVVhfTUZEX0hMQ0RDX0gKKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NGRyhpKQkJKChpKSAqIDB4NCkKKyNkZWZpbmUgQVRNRUxfSExDRENfU0lHX0NGRwkJTENEQ0ZHKDUpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0hTUE9MCQlCSVQoMCkKKyNkZWZpbmUgQVRNRUxfSExDRENfVlNQT0wJCUJJVCgxKQorI2RlZmluZSBBVE1FTF9ITENEQ19WU1BETFlTCQlCSVQoMikKKyNkZWZpbmUgQVRNRUxfSExDRENfVlNQRExZRQkJQklUKDMpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0RJU1BQT0wJCUJJVCg0KQorI2RlZmluZSBBVE1FTF9ITENEQ19ESVRIRVIJCUJJVCg2KQorI2RlZmluZSBBVE1FTF9ITENEQ19ESVNQRExZCQlCSVQoNykKKyNkZWZpbmUgQVRNRUxfSExDRENfTU9ERV9NQVNLCQlHRU5NQVNLKDksIDgpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX1BQCQkJQklUKDEwKQorI2RlZmluZSBBVE1FTF9ITENEQ19WU1BTVQkJQklUKDEyKQorI2RlZmluZSBBVE1FTF9ITENEQ19WU1BITwkJQklUKDEzKQorI2RlZmluZSBBVE1FTF9ITENEQ19HVUFSRFRJTUVfTUFTSwlHRU5NQVNLKDIwLCAxNikKKworI2RlZmluZSBBVE1FTF9ITENEQ19FTgkJCTB4MjAKKyNkZWZpbmUgQVRNRUxfSExDRENfRElTCQkJMHgyNAorI2RlZmluZSBBVE1FTF9ITENEQ19TUgkJCTB4MjgKKyNkZWZpbmUgQVRNRUxfSExDRENfSUVSCQkJMHgyYworI2RlZmluZSBBVE1FTF9ITENEQ19JRFIJCQkweDMwCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0lNUgkJCTB4MzQKKyNkZWZpbmUgQVRNRUxfSExDRENfSVNSCQkJMHgzOAorCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NMS1BPTAkJQklUKDApCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NMS1NFTAkJQklUKDIpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NMS1BXTVNFTAkJQklUKDMpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NHRElTKGkpCQlCSVQoOCArIChpKSkKKyNkZWZpbmUgQVRNRUxfSExDRENfQ0xLRElWX1NIRlQJCTE2CisjZGVmaW5lIEFUTUVMX0hMQ0RDX0NMS0RJVl9NQVNLCQlHRU5NQVNLKDIzLCAxNikKKyNkZWZpbmUgQVRNRUxfSExDRENfQ0xLRElWKGRpdikJCSgoZGl2IC0gMikgPDwgQVRNRUxfSExDRENfQ0xLRElWX1NIRlQpCisKKyNkZWZpbmUgQVRNRUxfSExDRENfUElYRUxfQ0xLCQlCSVQoMCkKKyNkZWZpbmUgQVRNRUxfSExDRENfU1lOQwkJQklUKDEpCisjZGVmaW5lIEFUTUVMX0hMQ0RDX0RJU1AJCUJJVCgyKQorI2RlZmluZSBBVE1FTF9ITENEQ19QV00JCQlCSVQoMykKKyNkZWZpbmUgQVRNRUxfSExDRENfU0lQCQkJQklUKDQpCisKKyNkZWZpbmUgQVRNRUxfSExDRENfU09GCQkJQklUKDApCisjZGVmaW5lIEFUTUVMX0hMQ0RDX1NZTkNESVMJCUJJVCgxKQorI2RlZmluZSBBVE1FTF9ITENEQ19GSUZPRVJSCQlCSVQoNCkKKyNkZWZpbmUgQVRNRUxfSExDRENfTEFZRVJfU1RBVFVTKHgpCUJJVCgoeCkgKyA4KQorCisvKioKKyAqIFN0cnVjdHVyZSBzaGFyZWQgYnkgdGhlIE1GRCBkZXZpY2UgYW5kIGl0cyBzdWJkZXZpY2VzLgorICoKKyAqIEByZWdtYXA6IHJlZ2lzdGVyIG1hcCB1c2VkIHRvIGFjY2VzcyBITENEQyBJUCByZWdpc3RlcnMKKyAqIEBwZXJpcGhfY2xrOiB0aGUgaGxjZGMgcGVyaXBoZXJhbCBjbG9jaworICogQHN5c19jbGs6IHRoZSBobGNkYyBzeXN0ZW0gY2xvY2sKKyAqIEBzbG93X2NsazogdGhlIHN5c3RlbSBzbG93IGNsaworICogQGlycTogdGhlIGhsY2RjIGlycQorICovCitzdHJ1Y3QgYXRtZWxfaGxjZGMgeworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlzdHJ1Y3QgY2xrICpwZXJpcGhfY2xrOworCXN0cnVjdCBjbGsgKnN5c19jbGs7CisJc3RydWN0IGNsayAqc2xvd19jbGs7CisJaW50IGlycTsKK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX01GRF9ITENEQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9heHAyMHguaCBiL2luY2x1ZGUvbGludXgvbWZkL2F4cDIweC5oCmluZGV4IGQwZTMxYTIuLjgxNTg5ZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL2F4cDIweC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2F4cDIweC5oCkBAIC0xNCw2ICsxNCw4IEBACiBlbnVtIHsKIAlBWFAyMDJfSUQgPSAwLAogCUFYUDIwOV9JRCwKKwlBWFAyODhfSUQsCisJTlJfQVhQMjBYX1ZBUklBTlRTLAogfTsKIAogI2RlZmluZSBBWFAyMFhfREFUQUNBQ0hFKG0pCQkoMHgwNCArIChtKSkKQEAgLTQ5LDExICs1MSwxMyBAQAogI2RlZmluZSBBWFAyMFhfSVJRM19FTgkJCTB4NDIKICNkZWZpbmUgQVhQMjBYX0lSUTRfRU4JCQkweDQzCiAjZGVmaW5lIEFYUDIwWF9JUlE1X0VOCQkJMHg0NAorI2RlZmluZSBBWFAyMFhfSVJRNl9FTgkJCTB4NDUKICNkZWZpbmUgQVhQMjBYX0lSUTFfU1RBVEUJCTB4NDgKICNkZWZpbmUgQVhQMjBYX0lSUTJfU1RBVEUJCTB4NDkKICNkZWZpbmUgQVhQMjBYX0lSUTNfU1RBVEUJCTB4NGEKICNkZWZpbmUgQVhQMjBYX0lSUTRfU1RBVEUJCTB4NGIKICNkZWZpbmUgQVhQMjBYX0lSUTVfU1RBVEUJCTB4NGMKKyNkZWZpbmUgQVhQMjBYX0lSUTZfU1RBVEUJCTB4NGQKIAogLyogQURDICovCiAjZGVmaW5lIEFYUDIwWF9BQ0lOX1ZfQURDX0gJCTB4NTYKQEAgLTExNiw2ICsxMjAsMTUgQEAKICNkZWZpbmUgQVhQMjBYX0NDX0NUUkwJCQkweGI4CiAjZGVmaW5lIEFYUDIwWF9GR19SRVMJCQkweGI5CiAKKy8qIEFYUDI4OCBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVhQMjg4X1BNSUNfQURDX0ggICAgICAgICAgICAgICAweDU2CisjZGVmaW5lIEFYUDI4OF9QTUlDX0FEQ19MICAgICAgICAgICAgICAgMHg1NworI2RlZmluZSBBWFAyODhfQURDX1RTX1BJTl9DVFJMICAgICAgICAgIDB4ODQKKworI2RlZmluZSBBWFAyODhfUE1JQ19BRENfRU4gICAgICAgICAgICAgIDB4ODQKKyNkZWZpbmUgQVhQMjg4X0ZHX1RVTkU1CQkJMHhlZAorCisKIC8qIFJlZ3VsYXRvcnMgSURzICovCiBlbnVtIHsKIAlBWFAyMFhfTERPMSA9IDAsCkBAIC0xNjksMTIgKzE4Miw1OCBAQAogCUFYUDIwWF9JUlFfR1BJTzBfSU5QVVQsCiB9OwogCitlbnVtIGF4cDI4OF9pcnFzIHsKKwlBWFAyODhfSVJRX1ZCVVNfRkFMTCAgICAgPSAyLAorCUFYUDI4OF9JUlFfVkJVU19SSVNFLAorCUFYUDI4OF9JUlFfT1YsCisJQVhQMjg4X0lSUV9GQUxMSU5HX0FMVCwKKwlBWFAyODhfSVJRX1JJU0lOR19BTFQsCisJQVhQMjg4X0lSUV9PVl9BTFQsCisJQVhQMjg4X0lSUV9ET05FICAgICAgICAgID0gMTAsCisJQVhQMjg4X0lSUV9DSEFSR0lORywKKwlBWFAyODhfSVJRX1NBRkVfUVVJVCwKKwlBWFAyODhfSVJRX1NBRkVfRU5URVIsCisJQVhQMjg4X0lSUV9BQlNFTlQsCisJQVhQMjg4X0lSUV9BUFBFTkQsCisJQVhQMjg4X0lSUV9RV0JUVSwKKwlBWFAyODhfSVJRX1dCVFUsCisJQVhQMjg4X0lSUV9RV0JUTywKKwlBWFAyODhfSVJRX1dCVE8sCisJQVhQMjg4X0lSUV9RQ0JUVSwKKwlBWFAyODhfSVJRX0NCVFUsCisJQVhQMjg4X0lSUV9RQ0JUTywKKwlBWFAyODhfSVJRX0NCVE8sCisJQVhQMjg4X0lSUV9XTDIsCisJQVhQMjg4X0lSUV9XTDEsCisJQVhQMjg4X0lSUV9HUEFEQywKKwlBWFAyODhfSVJRX09UICAgICAgICAgICAgPSAzMSwKKwlBWFAyODhfSVJRX0dQSU8wLAorCUFYUDI4OF9JUlFfR1BJTzEsCisJQVhQMjg4X0lSUV9QT0tPLAorCUFYUDI4OF9JUlFfUE9LTCwKKwlBWFAyODhfSVJRX1BPS1MsCisJQVhQMjg4X0lSUV9QT0tOLAorCUFYUDI4OF9JUlFfUE9LUCwKKwlBWFAyODhfSVJRX1RJTUVSLAorCUFYUDI4OF9JUlFfTVZfQ0hORywKKwlBWFAyODhfSVJRX0JDX1VTQl9DSE5HLAorfTsKKworI2RlZmluZSBBWFAyODhfVFNfQURDX0gJCTB4NTgKKyNkZWZpbmUgQVhQMjg4X1RTX0FEQ19MCQkweDU5CisjZGVmaW5lIEFYUDI4OF9HUF9BRENfSAkJMHg1YQorI2RlZmluZSBBWFAyODhfR1BfQURDX0wJCTB4NWIKKwogc3RydWN0IGF4cDIweF9kZXYgewogCXN0cnVjdCBkZXZpY2UJCQkqZGV2OwogCXN0cnVjdCBpMmNfY2xpZW50CQkqaTJjX2NsaWVudDsKIAlzdHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcDsKIAlzdHJ1Y3QgcmVnbWFwX2lycV9jaGlwX2RhdGEJKnJlZ21hcF9pcnFjOwogCWxvbmcJCQkJdmFyaWFudDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yX2NlbGxzOworCXN0cnVjdCBtZmRfY2VsbCAgICAgICAgICAgICAgICAgKmNlbGxzOworCWNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnCSpyZWdtYXBfY2ZnOworCWNvbnN0IHN0cnVjdCByZWdtYXBfaXJxX2NoaXAJKnJlZ21hcF9pcnFfY2hpcDsKIH07CiAKICNlbmRpZiAvKiBfX0xJTlVYX01GRF9BWFAyMFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oCmluZGV4IDczZTE3MDkuLmE3NmJjMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9jb3JlLmgKQEAgLTExMSw2ICsxMTEsMTMgQEAKIAkJCSAgIHN0cnVjdCByZXNvdXJjZSAqbWVtX2Jhc2UsCiAJCQkgICBpbnQgaXJxX2Jhc2UsIHN0cnVjdCBpcnFfZG9tYWluICppcnFfZG9tYWluKTsKIAorc3RhdGljIGlubGluZSBpbnQgbWZkX2FkZF9ob3RwbHVnX2RldmljZXMoc3RydWN0IGRldmljZSAqcGFyZW50LAorCQljb25zdCBzdHJ1Y3QgbWZkX2NlbGwgKmNlbGxzLCBpbnQgbl9kZXZzKQoreworCXJldHVybiBtZmRfYWRkX2RldmljZXMocGFyZW50LCBQTEFURk9STV9ERVZJRF9BVVRPLCBjZWxscywgbl9kZXZzLAorCQkJTlVMTCwgMCwgTlVMTCk7Cit9CisKIGV4dGVybiB2b2lkIG1mZF9yZW1vdmVfZGV2aWNlcyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2RsbjIuaCBiL2luY2x1ZGUvbGludXgvbWZkL2RsbjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDRiMjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvZGxuMi5oCkBAIC0wLDAgKzEsMTAzIEBACisjaWZuZGVmIF9fTElOVVhfVVNCX0RMTjJfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9ETE4yX0gKKworI2RlZmluZSBETE4yX0NNRChjbWQsIGlkKQkJKChjbWQpIHwgKChpZCkgPDwgOCkpCisKK3N0cnVjdCBkbG4yX3BsYXRmb3JtX2RhdGEgeworCXUxNiBoYW5kbGU7CQkvKiBzdWItZHJpdmVyIGhhbmRsZSAoaW50ZXJuYWxseSB1c2VkIG9ubHkpICovCisJdTggcG9ydDsJCS8qIEkyQy9TUEkgcG9ydCAqLworfTsKKworLyoqCisgKiBkbG4yX2V2ZW50X2NiX3QgLSBldmVudCBjYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmUKKyAqCisgKiBAcGRldiAtIHRoZSBzdWItZGV2aWNlIHRoYXQgcmVnaXN0ZXJlZCB0aGlzIGNhbGxiYWNrCisgKiBAZWNobyAtIHRoZSBlY2hvIGhlYWRlciBmaWVsZCByZWNlaXZlZCBpbiB0aGUgbWVzc2FnZQorICogQGRhdGEgLSB0aGUgZGF0YSBwYXlsb2FkCisgKiBAbGVuICAtIHRoZSBkYXRhIHBheWxvYWQgbGVuZ3RoCisgKgorICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCBhbmQgdGhlIGRhdGEgcGF5bG9hZCBpcworICogb25seSB2YWxpZCBkdXJpbmcgdGhlIGNhbGwuIElmIHRoZSB1c2VyIG5lZWRzIGxhdGVyIGFjY2VzcyBvZiB0aGUgZGF0YSwgaXQKKyAqIG11c3QgY29weSBpdC4KKyAqLworCit0eXBlZGVmIHZvaWQgKCpkbG4yX2V2ZW50X2NiX3QpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBlY2hvLAorCQkJCWNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pOworCisvKioKKyAqIGRsMm5fcmVnaXN0ZXJfZXZlbnRfY2IgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhbiBldmVudAorICoKKyAqIEBwZGV2IC0gdGhlIHN1Yi1kZXZpY2UgdGhhdCByZWdpc3RlcnMgdGhlIGNhbGxiYWNrCisgKiBAZXZlbnQgLSB0aGUgZXZlbnQgZm9yIHdoaWNoIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sKKyAqIEBldmVudF9jYiAtIHRoZSBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEByZXR1cm4gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGluIGNhc2Ugb2YgZXJyb3IKKyAqLworaW50IGRsbjJfcmVnaXN0ZXJfZXZlbnRfY2Ioc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGV2ZW50LAorCQkJICAgZGxuMl9ldmVudF9jYl90IGV2ZW50X2NiKTsKKworLyoqCisgKiBkbG4yX3VucmVnaXN0ZXJfZXZlbnRfY2IgLSB1bnJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYW4gZXZlbnQKKyAqCisgKiBAcGRldiAtIHRoZSBzdWItZGV2aWNlIHRoYXQgcmVnaXN0ZXJlZCB0aGUgY2FsbGJhY2sKKyAqIEBldmVudCAtIHRoZSBldmVudCBmb3Igd2hpY2ggdG8gcmVnaXN0ZXIgYSBjYWxsYmFjaworICovCit2b2lkIGRsbjJfdW5yZWdpc3Rlcl9ldmVudF9jYihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1MTYgZXZlbnQpOworCisvKioKKyAqIGRsbjJfdHJhbnNmZXIgLSBpc3N1ZSBhIERMTjIgY29tbWFuZCBhbmQgd2FpdCBmb3IgYSByZXNwb25zZSBhbmQgdGhlCisgKiBhc3NvY2lhdGVkIGRhdGEKKyAqCisgKiBAcGRldiAtIHRoZSBzdWItZGV2aWNlIHdoaWNoIGlzIGlzc3VpbmcgdGhpcyB0cmFuc2ZlcgorICogQGNtZCAtIHRoZSBjb21tYW5kIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZQorICogQG9idWYgLSB0aGUgYnVmZmVyIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZTsgaXQgY2FuIGJlIE5VTEwgaWYgdGhlIHVzZXIKKyAqCWRvZXNuJ3QgbmVlZCB0byB0cmFuc21pdCBkYXRhIHdpdGggdGhpcyBjb21tYW5kCisgKiBAb2J1Zl9sZW4gLSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZQorICogQGlidWYgLSBhbnkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3BvbnNlIHdpbGwgYmUgY29waWVkIGhlcmU7IGl0IGNhbiBiZQorICoJTlVMTCBpZiB0aGUgdXNlciBkb2Vzbid0IG5lZWQgdGhlIHJlc3BvbnNlIGRhdGEKKyAqIEBpYnVmX2xlbiAtIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gdGhlIGlucHV0IGJ1ZmZlciBzaXplOyBpdCB3aWxsIGJlIG1vZGlmaWVkCisgKgl0byBpbmRpY2F0ZSB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXJyZWQ7CisgKgorICogQHJldHVybiAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZXJyb3JzCisgKi8KK2ludCBkbG4yX3RyYW5zZmVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUxNiBjbWQsCisJCSAgY29uc3Qgdm9pZCAqb2J1ZiwgdW5zaWduZWQgb2J1Zl9sZW4sCisJCSAgdm9pZCAqaWJ1ZiwgdW5zaWduZWQgKmlidWZfbGVuKTsKKworLyoqCisgKiBkbG4yX3RyYW5zZmVyX3J4IC0gdmFyaWFudCBvZiBAZGxuMl90cmFuc2ZlcigpIHdoZXJlIFRYIGJ1ZmZlciBpcyBub3QgbmVlZGVkCisgKgorICogQHBkZXYgLSB0aGUgc3ViLWRldmljZSB3aGljaCBpcyBpc3N1aW5nIHRoaXMgdHJhbnNmZXIKKyAqIEBjbWQgLSB0aGUgY29tbWFuZCB0byBiZSBzZW50IHRvIHRoZSBkZXZpY2UKKyAqIEBpYnVmIC0gYW55IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNwb25zZSB3aWxsIGJlIGNvcGllZCBoZXJlOyBpdCBjYW4gYmUKKyAqCU5VTEwgaWYgdGhlIHVzZXIgZG9lc24ndCBuZWVkIHRoZSByZXNwb25zZSBkYXRhCisgKiBAaWJ1Zl9sZW4gLSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHRoZSBpbnB1dCBidWZmZXIgc2l6ZTsgaXQgd2lsbCBiZSBtb2RpZmllZAorICoJdG8gaW5kaWNhdGUgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVycmVkOworICoKKyAqIEByZXR1cm4gMCBmb3Igc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgZm9yIGVycm9ycworICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGRsbjJfdHJhbnNmZXJfcngoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGNtZCwKKwkJCQkgICB2b2lkICppYnVmLCB1bnNpZ25lZCAqaWJ1Zl9sZW4pCit7CisJcmV0dXJuIGRsbjJfdHJhbnNmZXIocGRldiwgY21kLCBOVUxMLCAwLCBpYnVmLCBpYnVmX2xlbik7Cit9CisKKy8qKgorICogZGxuMl90cmFuc2Zlcl90eCAtIHZhcmlhbnQgb2YgQGRsbjJfdHJhbnNmZXIoKSB3aGVyZSBSWCBidWZmZXIgaXMgbm90IG5lZWRlZAorICoKKyAqIEBwZGV2IC0gdGhlIHN1Yi1kZXZpY2Ugd2hpY2ggaXMgaXNzdWluZyB0aGlzIHRyYW5zZmVyCisgKiBAY21kIC0gdGhlIGNvbW1hbmQgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlCisgKiBAb2J1ZiAtIHRoZSBidWZmZXIgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlOyBpdCBjYW4gYmUgTlVMTCBpZiB0aGUKKyAqCXVzZXIgZG9lc24ndCBuZWVkIHRvIHRyYW5zbWl0IGRhdGEgd2l0aCB0aGlzIGNvbW1hbmQKKyAqIEBvYnVmX2xlbiAtIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlCisgKgorICogQHJldHVybiAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZXJyb3JzCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRsbjJfdHJhbnNmZXJfdHgoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTE2IGNtZCwKKwkJCQkgICBjb25zdCB2b2lkICpvYnVmLCB1bnNpZ25lZCBvYnVmX2xlbikKK3sKKwlyZXR1cm4gZGxuMl90cmFuc2ZlcihwZGV2LCBjbWQsIG9idWYsIG9idWZfbGVuLCBOVUxMLCBOVUxMKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY4Ni5oIGIvaW5jbHVkZS9saW51eC9tZmQvbWF4Nzc2ODYuaAppbmRleCA3ZTZkYzRiLi41NTNmN2QwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY4Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL21heDc3Njg2LmgKQEAgLTEzMSwxMyArMTMxLDYgQEAKIAlNQVg3NzY4Nl9PUE1PREVfU1RBTkRCWSwKIH07CiAKLWVudW0gbWF4Nzc4MDJfb3Btb2RlIHsKLQlNQVg3NzgwMl9PUE1PREVfT0ZGLAotCU1BWDc3ODAyX09QTU9ERV9TVEFOREJZLAotCU1BWDc3ODAyX09QTU9ERV9MUCwKLQlNQVg3NzgwMl9PUE1PREVfTk9STUFMLAotfTsKLQogc3RydWN0IG1heDc3Njg2X29wbW9kZV9kYXRhIHsKIAlpbnQgaWQ7CiAJaW50IG1vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY5My1wcml2YXRlLmggYi9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY5My1wcml2YXRlLmgKaW5kZXggNTgyZTY3Zi4uMDhkYWUwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvbWF4Nzc2OTMtcHJpdmF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL21heDc3NjkzLXByaXZhdGUuaApAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKLSNkZWZpbmUgTUFYNzc2OTNfTlVNX0lSUV9NVUlDX1JFR1MJMwogI2RlZmluZSBNQVg3NzY5M19SRUdfSU5WQUxJRAkJKDB4ZmYpCiAKIC8qIFNsYXZlIGFkZHIgPSAweENDOiBQTUlDLCBDaGFyZ2VyLCBGbGFzaCBMRUQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3J0c3hfcGNpLmggYi9pbmNsdWRlL2xpbnV4L21mZC9ydHN4X3BjaS5oCmluZGV4IDc0MzQ2ZDUuLjBjMTI2MjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3J0c3hfcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvcnRzeF9wY2kuaApAQCAtNTU4LDYgKzU1OCw3IEBACiAjZGVmaW5lIFNEX1NBTVBMRV9QT0lOVF9DVEwJCTB4RkRBNwogI2RlZmluZSBTRF9QVVNIX1BPSU5UX0NUTAkJMHhGREE4CiAjZGVmaW5lIFNEX0NNRDAJCQkJMHhGREE5CisjZGVmaW5lICAgU0RfQ01EX1NUQVJUCQkJMHg0MAogI2RlZmluZSBTRF9DTUQxCQkJCTB4RkRBQQogI2RlZmluZSBTRF9DTUQyCQkJCTB4RkRBQgogI2RlZmluZSBTRF9DTUQzCQkJCTB4RkRBQwpAQCAtNzA3LDYgKzcwOCwxNCBAQAogI2RlZmluZSBQTV9DVFJMMQkJCTB4RkY0NAogI2RlZmluZSBQTV9DVFJMMgkJCTB4RkY0NQogI2RlZmluZSBQTV9DVFJMMwkJCTB4RkY0NgorI2RlZmluZSAgIFNESU9fU0VORF9QTUVfRU4JCTB4ODAKKyNkZWZpbmUgICBGT1JDRV9SQ19NT0RFX09OCQkweDQwCisjZGVmaW5lICAgRk9SQ0VfUlg1MF9MSU5LX09OCQkweDIwCisjZGVmaW5lICAgRDNfREVMSU5LX01PREVfRU4JCTB4MTAKKyNkZWZpbmUgICBVU0VfUEVTUlRCX0NUTF9ERUxJTksJCTB4MDgKKyNkZWZpbmUgICBERUxBWV9QSU5fV0FLRQkJMHgwNAorI2RlZmluZSAgIFJFU0VUX1BJTl9XQUtFCQkweDAyCisjZGVmaW5lICAgUE1fV0FLRV9FTgkJCTB4MDEKICNkZWZpbmUgUE1fQ1RSTDQJCQkweEZGNDcKIAogLyogTWVtb3J5IG1hcHBpbmcgKi8KQEAgLTc1Miw2ICs3NjEsMTQgQEAKICNkZWZpbmUgUEhZX0RVTV9SRUcJCQkweDFGCiAKICNkZWZpbmUgTENUTFIJCQkJMHg4MAorI2RlZmluZSAgIExDVExSX0VYVF9TWU5DCQkweDgwCisjZGVmaW5lICAgTENUTFJfQ09NTU9OX0NMT0NLX0NGRwkweDQwCisjZGVmaW5lICAgTENUTFJfUkVUUkFJTl9MSU5LCQkweDIwCisjZGVmaW5lICAgTENUTFJfTElOS19ESVNBQkxFCQkweDEwCisjZGVmaW5lICAgTENUTFJfUkNCCQkJMHgwOAorI2RlZmluZSAgIExDVExSX1JFU0VSVkVECQkweDA0CisjZGVmaW5lICAgTENUTFJfQVNQTV9DVExfTUFTSwkJMHgwMworCiAjZGVmaW5lIFBDUl9TRVRUSU5HX1JFRzEJCTB4NzI0CiAjZGVmaW5lIFBDUl9TRVRUSU5HX1JFRzIJCTB4ODE0CiAjZGVmaW5lIFBDUl9TRVRUSU5HX1JFRzMJCTB4NzQ3CkBAIC05NjcsNCArOTg0LDI0IEBACiAJcmV0dXJuICh1OCAqKShwY3ItPmhvc3RfY21kc19wdHIpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBydHN4X3BjaV91cGRhdGVfY2ZnX2J5dGUoc3RydWN0IHJ0c3hfcGNyICpwY3IsIGludCBhZGRyLAorCQl1OCBtYXNrLCB1OCBhcHBlbmQpCit7CisJaW50IGVycjsKKwl1OCB2YWw7CisKKwllcnIgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwY3ItPnBjaSwgYWRkciwgJnZhbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIHBjaV93cml0ZV9jb25maWdfYnl0ZShwY3ItPnBjaSwgYWRkciwgKHZhbCAmIG1hc2spIHwgYXBwZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0c3hfcGNpX3dyaXRlX2JlMzIoc3RydWN0IHJ0c3hfcGNyICpwY3IsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIHJlZywgICAgIDB4RkYsIHZhbCA+PiAyNCk7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIHJlZyArIDEsIDB4RkYsIHZhbCA+PiAxNik7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIHJlZyArIDIsIDB4RkYsIHZhbCA+PiA4KTsKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgcmVnICsgMywgMHhGRiwgdmFsKTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvY29yZS5oCmluZGV4IDE4MjVlZGEuLjNmZGI3Y2ZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL2NvcmUuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBNSU5fODAwX01WCQk4MDAwMDAKICNkZWZpbmUgTUlOXzc1MF9NVgkJNzUwMDAwCiAjZGVmaW5lIE1JTl82MDBfTVYJCTYwMDAwMAorI2RlZmluZSBNSU5fNTAwX01WCQk1MDAwMDAKIAogLyogTWFjcm9zIHRvIHJlcHJlc2VudCBzdGVwcyBmb3IgTERPL0JVQ0sgKi8KICNkZWZpbmUgU1RFUF81MF9NVgkJNTAwMDAKQEAgLTQxLDYgKzQyLDcgQEAKIAlTNU04NzY3WCwKIAlTMk1QQTAxLAogCVMyTVBTMTFYLAorCVMyTVBTMTNYLAogCVMyTVBTMTRYLAogCVMyTVBVMDIsCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvc2Ftc3VuZy9zMm1wczEzLmggYi9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTVkZGE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvc2Ftc3VuZy9zMm1wczEzLmgKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBzMm1wczEzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZAorICogICAgICAgICAgICAgIGh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfUzJNUFMxM19ICisjZGVmaW5lIF9fTElOVVhfTUZEX1MyTVBTMTNfSAorCisvKiBTMk1QUzEzIHJlZ2lzdGVycyAqLworZW51bSBzMm1wczEzX3JlZyB7CisJUzJNUFMxM19SRUdfSUQsCisJUzJNUFMxM19SRUdfSU5UMSwKKwlTMk1QUzEzX1JFR19JTlQyLAorCVMyTVBTMTNfUkVHX0lOVDMsCisJUzJNUFMxM19SRUdfSU5UMU0sCisJUzJNUFMxM19SRUdfSU5UMk0sCisJUzJNUFMxM19SRUdfSU5UM00sCisJUzJNUFMxM19SRUdfU1QxLAorCVMyTVBTMTNfUkVHX1NUMiwKKwlTMk1QUzEzX1JFR19QV1JPTlNSQywKKwlTMk1QUzEzX1JFR19PRkZTUkMsCisJUzJNUFMxM19SRUdfQlVfQ0hHLAorCVMyTVBTMTNfUkVHX1JUQ0NUUkwsCisJUzJNUFMxM19SRUdfQ1RSTDEsCisJUzJNUFMxM19SRUdfQ1RSTDIsCisJUzJNUFMxM19SRUdfUlNWRDEsCisJUzJNUFMxM19SRUdfUlNWRDIsCisJUzJNUFMxM19SRUdfUlNWRDMsCisJUzJNUFMxM19SRUdfUlNWRDQsCisJUzJNUFMxM19SRUdfUlNWRDUsCisJUzJNUFMxM19SRUdfUlNWRDYsCisJUzJNUFMxM19SRUdfQ1RSTDMsCisJUzJNUFMxM19SRUdfUlNWRDcsCisJUzJNUFMxM19SRUdfUlNWRDgsCisJUzJNUFMxM19SRUdfV1JTVEJJLAorCVMyTVBTMTNfUkVHX0IxQ1RSTCwKKwlTMk1QUzEzX1JFR19CMU9VVCwKKwlTMk1QUzEzX1JFR19CMkNUUkwsCisJUzJNUFMxM19SRUdfQjJPVVQsCisJUzJNUFMxM19SRUdfQjNDVFJMLAorCVMyTVBTMTNfUkVHX0IzT1VULAorCVMyTVBTMTNfUkVHX0I0Q1RSTCwKKwlTMk1QUzEzX1JFR19CNE9VVCwKKwlTMk1QUzEzX1JFR19CNUNUUkwsCisJUzJNUFMxM19SRUdfQjVPVVQsCisJUzJNUFMxM19SRUdfQjZDVFJMLAorCVMyTVBTMTNfUkVHX0I2T1VULAorCVMyTVBTMTNfUkVHX0I3Q1RSTCwKKwlTMk1QUzEzX1JFR19CN09VVCwKKwlTMk1QUzEzX1JFR19COENUUkwsCisJUzJNUFMxM19SRUdfQjhPVVQsCisJUzJNUFMxM19SRUdfQjlDVFJMLAorCVMyTVBTMTNfUkVHX0I5T1VULAorCVMyTVBTMTNfUkVHX0IxMENUUkwsCisJUzJNUFMxM19SRUdfQjEwT1VULAorCVMyTVBTMTNfUkVHX0JCMUNUUkwsCisJUzJNUFMxM19SRUdfQkIxT1VULAorCVMyTVBTMTNfUkVHX0JVQ0tfUkFNUDEsCisJUzJNUFMxM19SRUdfQlVDS19SQU1QMiwKKwlTMk1QUzEzX1JFR19MRE9fRFZTMSwKKwlTMk1QUzEzX1JFR19MRE9fRFZTMiwKKwlTMk1QUzEzX1JFR19MRE9fRFZTMywKKwlTMk1QUzEzX1JFR19CNk9VVDIsCisJUzJNUFMxM19SRUdfTDFDVFJMLAorCVMyTVBTMTNfUkVHX0wyQ1RSTCwKKwlTMk1QUzEzX1JFR19MM0NUUkwsCisJUzJNUFMxM19SRUdfTDRDVFJMLAorCVMyTVBTMTNfUkVHX0w1Q1RSTCwKKwlTMk1QUzEzX1JFR19MNkNUUkwsCisJUzJNUFMxM19SRUdfTDdDVFJMLAorCVMyTVBTMTNfUkVHX0w4Q1RSTCwKKwlTMk1QUzEzX1JFR19MOUNUUkwsCisJUzJNUFMxM19SRUdfTDEwQ1RSTCwKKwlTMk1QUzEzX1JFR19MMTFDVFJMLAorCVMyTVBTMTNfUkVHX0wxMkNUUkwsCisJUzJNUFMxM19SRUdfTDEzQ1RSTCwKKwlTMk1QUzEzX1JFR19MMTRDVFJMLAorCVMyTVBTMTNfUkVHX0wxNUNUUkwsCisJUzJNUFMxM19SRUdfTDE2Q1RSTCwKKwlTMk1QUzEzX1JFR19MMTdDVFJMLAorCVMyTVBTMTNfUkVHX0wxOENUUkwsCisJUzJNUFMxM19SRUdfTDE5Q1RSTCwKKwlTMk1QUzEzX1JFR19MMjBDVFJMLAorCVMyTVBTMTNfUkVHX0wyMUNUUkwsCisJUzJNUFMxM19SRUdfTDIyQ1RSTCwKKwlTMk1QUzEzX1JFR19MMjNDVFJMLAorCVMyTVBTMTNfUkVHX0wyNENUUkwsCisJUzJNUFMxM19SRUdfTDI1Q1RSTCwKKwlTMk1QUzEzX1JFR19MMjZDVFJMLAorCVMyTVBTMTNfUkVHX0wyN0NUUkwsCisJUzJNUFMxM19SRUdfTDI4Q1RSTCwKKwlTMk1QUzEzX1JFR19MMzBDVFJMLAorCVMyTVBTMTNfUkVHX0wzMUNUUkwsCisJUzJNUFMxM19SRUdfTDMyQ1RSTCwKKwlTMk1QUzEzX1JFR19MMzNDVFJMLAorCVMyTVBTMTNfUkVHX0wzNENUUkwsCisJUzJNUFMxM19SRUdfTDM1Q1RSTCwKKwlTMk1QUzEzX1JFR19MMzZDVFJMLAorCVMyTVBTMTNfUkVHX0wzN0NUUkwsCisJUzJNUFMxM19SRUdfTDM4Q1RSTCwKKwlTMk1QUzEzX1JFR19MMzlDVFJMLAorCVMyTVBTMTNfUkVHX0w0MENUUkwsCisJUzJNUFMxM19SRUdfTERPRFNDSDEsCisJUzJNUFMxM19SRUdfTERPRFNDSDIsCisJUzJNUFMxM19SRUdfTERPRFNDSDMsCisJUzJNUFMxM19SRUdfTERPRFNDSDQsCisJUzJNUFMxM19SRUdfTERPRFNDSDUsCit9OworCisvKiAgcmVndWxhdG9yIGlkcyAqLworZW51bSBzMm1wczEzX3JlZ3VsYXRvcnMgeworCVMyTVBTMTNfTERPMSwKKwlTMk1QUzEzX0xETzIsCisJUzJNUFMxM19MRE8zLAorCVMyTVBTMTNfTERPNCwKKwlTMk1QUzEzX0xETzUsCisJUzJNUFMxM19MRE82LAorCVMyTVBTMTNfTERPNywKKwlTMk1QUzEzX0xETzgsCisJUzJNUFMxM19MRE85LAorCVMyTVBTMTNfTERPMTAsCisJUzJNUFMxM19MRE8xMSwKKwlTMk1QUzEzX0xETzEyLAorCVMyTVBTMTNfTERPMTMsCisJUzJNUFMxM19MRE8xNCwKKwlTMk1QUzEzX0xETzE1LAorCVMyTVBTMTNfTERPMTYsCisJUzJNUFMxM19MRE8xNywKKwlTMk1QUzEzX0xETzE4LAorCVMyTVBTMTNfTERPMTksCisJUzJNUFMxM19MRE8yMCwKKwlTMk1QUzEzX0xETzIxLAorCVMyTVBTMTNfTERPMjIsCisJUzJNUFMxM19MRE8yMywKKwlTMk1QUzEzX0xETzI0LAorCVMyTVBTMTNfTERPMjUsCisJUzJNUFMxM19MRE8yNiwKKwlTMk1QUzEzX0xETzI3LAorCVMyTVBTMTNfTERPMjgsCisJUzJNUFMxM19MRE8yOSwKKwlTMk1QUzEzX0xETzMwLAorCVMyTVBTMTNfTERPMzEsCisJUzJNUFMxM19MRE8zMiwKKwlTMk1QUzEzX0xETzMzLAorCVMyTVBTMTNfTERPMzQsCisJUzJNUFMxM19MRE8zNSwKKwlTMk1QUzEzX0xETzM2LAorCVMyTVBTMTNfTERPMzcsCisJUzJNUFMxM19MRE8zOCwKKwlTMk1QUzEzX0xETzM5LAorCVMyTVBTMTNfTERPNDAsCisJUzJNUFMxM19CVUNLMSwKKwlTMk1QUzEzX0JVQ0syLAorCVMyTVBTMTNfQlVDSzMsCisJUzJNUFMxM19CVUNLNCwKKwlTMk1QUzEzX0JVQ0s1LAorCVMyTVBTMTNfQlVDSzYsCisJUzJNUFMxM19CVUNLNywKKwlTMk1QUzEzX0JVQ0s4LAorCVMyTVBTMTNfQlVDSzksCisJUzJNUFMxM19CVUNLMTAsCisKKwlTMk1QUzEzX1JFR1VMQVRPUl9NQVgsCit9OworCisvKgorICogRGVmYXVsdCByYW1wIGRlbGF5IGluIHV2L3VzLiBEYXRhc2hlZXQgc2F5cyB0aGF0IHJhbXAgZGVsYXkgY2FuIGJlCisgKiBjb250cm9sbGVkIGhvd2V2ZXIgaXQgZG9lcyBub3Qgc3BlY2lmeSB3aGljaCByZWdpc3RlciBpcyB1c2VkIGZvciB0aGF0LgorICogTGV0J3MgYXNzdW1lIHRoYXQgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHNldC4KKyAqLworI2RlZmluZSBTMk1QUzEzX0JVQ0tfUkFNUF9ERUxBWQkJMTI1MDAKKworI2VuZGlmIC8qICBfX0xJTlVYX01GRF9TMk1QUzEzX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi9pbXg2cS1pb211eGMtZ3ByLmggYi9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24vaW14NnEtaW9tdXhjLWdwci5oCmluZGV4IGZmNDQzNzQuLmM4NzdjYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi9pbXg2cS1pb211eGMtZ3ByLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaApAQCAtMzk1LDQgKzM5NSw0MyBAQAogI2RlZmluZSBJTVg2U0xfR1BSMV9GRUNfQ0xPQ0tfTVVYMV9TRUxfTUFTSyAgICAoMHgzIDw8IDE3KQogI2RlZmluZSBJTVg2U0xfR1BSMV9GRUNfQ0xPQ0tfTVVYMl9TRUxfTUFTSyAgICAoMHgxIDw8IDE0KQogCisvKiBGb3IgaW14NnN4IGlvbXV4IGdwciByZWdpc3RlciBmaWVsZCBkZWZpbmUgKi8KKyNkZWZpbmUgSU1YNlNYX0dQUjFfVkRFQ19TV19SU1RfTUFTSwkJCSgweDEgPDwgMjApCisjZGVmaW5lIElNWDZTWF9HUFIxX1ZERUNfU1dfUlNUX1JFU0VUCQkJKDB4MSA8PCAyMCkKKyNkZWZpbmUgSU1YNlNYX0dQUjFfVkRFQ19TV19SU1RfUkVMRUFTRQkJCSgweDAgPDwgMjApCisjZGVmaW5lIElNWDZTWF9HUFIxX1ZBRENfU1dfUlNUX01BU0sJCQkoMHgxIDw8IDE5KQorI2RlZmluZSBJTVg2U1hfR1BSMV9WQURDX1NXX1JTVF9SRVNFVAkJCSgweDEgPDwgMTkpCisjZGVmaW5lIElNWDZTWF9HUFIxX1ZBRENfU1dfUlNUX1JFTEVBU0UJCQkoMHgwIDw8IDE5KQorI2RlZmluZSBJTVg2U1hfR1BSMV9GRUNfQ0xPQ0tfTVVYX1NFTF9NQVNLCQkoMHgzIDw8IDEzKQorI2RlZmluZSBJTVg2U1hfR1BSMV9GRUNfQ0xPQ0tfUEFEX0RJUl9NQVNLCQkoMHgzIDw8IDE3KQorI2RlZmluZSBJTVg2U1hfR1BSMV9GRUNfQ0xPQ0tfTVVYX1NFTF9FWFQJCSgweDMgPDwgMTMpCisKKyNkZWZpbmUgSU1YNlNYX0dQUjRfRkVDX0VORVQxX1NUT1BfUkVRCQkJKDB4MSA8PCAzKQorI2RlZmluZSBJTVg2U1hfR1BSNF9GRUNfRU5FVDJfU1RPUF9SRVEJCQkoMHgxIDw8IDQpCisKKyNkZWZpbmUgSU1YNlNYX0dQUjVfRElTUF9NVVhfTERCX0NUUkxfTUFTSwkJKDB4MSA8PCAzKQorI2RlZmluZSBJTVg2U1hfR1BSNV9ESVNQX01VWF9MREJfQ1RSTF9MQ0RJRjEJCSgweDAgPDwgMykKKyNkZWZpbmUgSU1YNlNYX0dQUjVfRElTUF9NVVhfTERCX0NUUkxfTENESUYyCQkoMHgxIDw8IDMpCisKKyNkZWZpbmUgSU1YNlNYX0dQUjVfQ1NJMl9NVVhfQ1RSTF9NQVNLCQkJKDB4MyA8PCAyNykKKyNkZWZpbmUgSU1YNlNYX0dQUjVfQ1NJMl9NVVhfQ1RSTF9FWFRfUElOCQkoMHgwIDw8IDI3KQorI2RlZmluZSBJTVg2U1hfR1BSNV9DU0kyX01VWF9DVFJMX0NWRAkJCSgweDEgPDwgMjcpCisjZGVmaW5lIElNWDZTWF9HUFI1X0NTSTJfTVVYX0NUUkxfVkRBQ19UT19DU0kJCSgweDIgPDwgMjcpCisjZGVmaW5lIElNWDZTWF9HUFI1X0NTSTJfTVVYX0NUUkxfR05ECQkJKDB4MyA8PCAyNykKKyNkZWZpbmUgSU1YNlNYX0dQUjVfVkFEQ19UT19DU0lfQ0FQVFVSRV9FTl9NQVNLCQkoMHgxIDw8IDI2KQorI2RlZmluZSBJTVg2U1hfR1BSNV9WQURDX1RPX0NTSV9DQVBUVVJFX0VOX0VOQUJMRQkoMHgxIDw8IDI2KQorI2RlZmluZSBJTVg2U1hfR1BSNV9WQURDX1RPX0NTSV9DQVBUVVJFX0VOX0RJU0FCTEUJKDB4MCA8PCAyNikKKyNkZWZpbmUgSU1YNlNYX0dQUjVfQ1NJMV9NVVhfQ1RSTF9NQVNLCQkJKDB4MyA8PCA0KQorI2RlZmluZSBJTVg2U1hfR1BSNV9DU0kxX01VWF9DVFJMX0VYVF9QSU4JCSgweDAgPDwgNCkKKyNkZWZpbmUgSU1YNlNYX0dQUjVfQ1NJMV9NVVhfQ1RSTF9DVkQJCQkoMHgxIDw8IDQpCisjZGVmaW5lIElNWDZTWF9HUFI1X0NTSTFfTVVYX0NUUkxfVkRBQ19UT19DU0kJCSgweDIgPDwgNCkKKyNkZWZpbmUgSU1YNlNYX0dQUjVfQ1NJMV9NVVhfQ1RSTF9HTkQJCQkoMHgzIDw8IDQpCisKKyNkZWZpbmUgSU1YNlNYX0dQUjVfRElTUF9NVVhfRENJQzJfTENESUYyCQkoMHgwIDw8IDIpCisjZGVmaW5lIElNWDZTWF9HUFI1X0RJU1BfTVVYX0RDSUMyX0xWRFMJCQkoMHgxIDw8IDIpCisjZGVmaW5lIElNWDZTWF9HUFI1X0RJU1BfTVVYX0RDSUMyX01BU0sJCQkoMHgxIDw8IDIpCisjZGVmaW5lIElNWDZTWF9HUFI1X0RJU1BfTVVYX0RDSUMxX0xDRElGMQkJKDB4MCA8PCAxKQorI2RlZmluZSBJTVg2U1hfR1BSNV9ESVNQX01VWF9EQ0lDMV9MVkRTCQkJKDB4MSA8PCAxKQorI2RlZmluZSBJTVg2U1hfR1BSNV9ESVNQX01VWF9EQ0lDMV9NQVNLCQkJKDB4MSA8PCAxKQorCiAjZW5kaWYgLyogX19MSU5VWF9JTVg2UV9JT01VWENfR1BSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RjMzU4OXguaCBiL2luY2x1ZGUvbGludXgvbWZkL3RjMzU4OXguaAppbmRleCBlNjA4OGMyLi5lMWMxMmQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90YzM1ODl4LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdGMzNTg5eC5oCkBAIC0xNjQsMTMgKzE2NCwxMCBAQAogCiAvKioKICAqIHN0cnVjdCB0YzM1ODl4X2dwaW9fcGxhdGZvcm1fZGF0YSAtIFRDMzU4OXggR1BJTyBwbGF0Zm9ybSBkYXRhCi0gKiBAZ3Bpb19iYXNlOiBmaXJzdCBncGlvIG51bWJlciBhc3NpZ25lZCB0byBUQzM1ODl4LiAgQSBtYXhpbXVtIG9mCi0gKgkgICAgICAgJVRDMzU4OXhfTlJfR1BJT1MgR1BJT3Mgd2lsbCBiZSBhbGxvY2F0ZWQuCiAgKiBAc2V0dXA6IGNhbGxiYWNrIGZvciBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbgogICogQHJlbW92ZTogY2FsbGJhY2sgZm9yIGJvYXJkLXNwZWNpZmljIHRlYXJkb3duCiAgKi8KIHN0cnVjdCB0YzM1ODl4X2dwaW9fcGxhdGZvcm1fZGF0YSB7Ci0JaW50IGdwaW9fYmFzZTsKIAl2b2lkICgqc2V0dXApKHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCB1bnNpZ25lZCBncGlvX2Jhc2UpOwogCXZvaWQgKCpyZW1vdmUpKHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCB1bnNpZ25lZCBncGlvX2Jhc2UpOwogfTsKQEAgLTE3OCwxOCArMTc1LDEzIEBACiAvKioKICAqIHN0cnVjdCB0YzM1ODl4X3BsYXRmb3JtX2RhdGEgLSBUQzM1ODl4IHBsYXRmb3JtIGRhdGEKICAqIEBibG9jazogYml0bWFzayBvZiBibG9ja3MgdG8gZW5hYmxlICh1c2UgVEMzNTg5eF9CTE9DS18qKQotICogQGlycV9iYXNlOiBiYXNlIElSUSBudW1iZXIuICAlVEMzNTg5eF9OUl9JUlFTIGlycXMgd2lsbCBiZSB1c2VkLgogICogQGdwaW86IEdQSU8tc3BlY2lmaWMgcGxhdGZvcm0gZGF0YQogICogQGtleXBhZDoga2V5cGFkLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEKICAqLwogc3RydWN0IHRjMzU4OXhfcGxhdGZvcm1fZGF0YSB7CiAJdW5zaWduZWQgaW50IGJsb2NrOwotCWludCBpcnFfYmFzZTsKIAlzdHJ1Y3QgdGMzNTg5eF9ncGlvX3BsYXRmb3JtX2RhdGEgKmdwaW87CiAJY29uc3Qgc3RydWN0IHRjMzU4OXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKmtleXBhZDsKIH07CiAKLSNkZWZpbmUgVEMzNTg5eF9OUl9HUElPUwkyNAotI2RlZmluZSBUQzM1ODl4X05SX0lSUVMJCVRDMzU4OXhfSU5UX0dQSU8oVEMzNTg5eF9OUl9HUElPUykKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggYjQ2NDYxMS4uZjc2MDZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTI4LDYgKzEyOCw3IEBACiAjZGVmaW5lIFZNX0hVR0VUTEIJMHgwMDQwMDAwMAkvKiBIdWdlIFRMQiBQYWdlIFZNICovCiAjZGVmaW5lIFZNX05PTkxJTkVBUgkweDAwODAwMDAwCS8qIElzIG5vbi1saW5lYXIgKHJlbWFwX2ZpbGVfcGFnZXMpICovCiAjZGVmaW5lIFZNX0FSQ0hfMQkweDAxMDAwMDAwCS8qIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFnICovCisjZGVmaW5lIFZNX0FSQ0hfMgkweDAyMDAwMDAwCiAjZGVmaW5lIFZNX0RPTlREVU1QCTB4MDQwMDAwMDAJLyogRG8gbm90IGluY2x1ZGUgaW4gdGhlIGNvcmUgZHVtcCAqLwogCiAjaWZkZWYgQ09ORklHX01FTV9TT0ZUX0RJUlRZCkBAIC0xNTUsNiArMTU2LDExIEBACiAjIGRlZmluZSBWTV9NQVBQRURfQ09QWQlWTV9BUkNIXzEJLyogVCBpZiBtYXBwZWQgY29weSBvZiBkYXRhIChub21tdSBtbWFwKSAqLwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCisvKiBNUFggc3BlY2lmaWMgYm91bmRzIHRhYmxlIG9yIGJvdW5kcyBkaXJlY3RvcnkgKi8KKyMgZGVmaW5lIFZNX01QWAkJVk1fQVJDSF8yCisjZW5kaWYKKwogI2lmbmRlZiBWTV9HUk9XU1VQCiAjIGRlZmluZSBWTV9HUk9XU1VQCVZNX05PTkUKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IDZlMGIyODYuLmJmOWY1NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgQVRfVkVDVE9SX1NJWkUgKDIqKEFUX1ZFQ1RPUl9TSVpFX0FSQ0ggKyBBVF9WRUNUT1JfU0laRV9CQVNFICsgMSkpCiAKIHN0cnVjdCBhZGRyZXNzX3NwYWNlOworc3RydWN0IG1lbV9jZ3JvdXA7CiAKICNkZWZpbmUgVVNFX1NQTElUX1BURV9QVExPQ0tTCShOUl9DUFVTID49IENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUykKICNkZWZpbmUgVVNFX1NQTElUX1BNRF9QVExPQ0tTCShVU0VfU1BMSVRfUFRFX1BUTE9DS1MgJiYgXApAQCAtMTY3LDYgKzE2OCwxMCBAQAogCQlzdHJ1Y3QgcGFnZSAqZmlyc3RfcGFnZTsJLyogQ29tcG91bmQgdGFpbCBwYWdlcyAqLwogCX07CiAKKyNpZmRlZiBDT05GSUdfTUVNQ0cKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cDsKKyNlbmRpZgorCiAJLyoKIAkgKiBPbiBtYWNoaW5lcyB3aGVyZSBhbGwgUkFNIGlzIG1hcHBlZCBpbnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlLAogCSAqIHdlIGNhbiBzaW1wbHkgY2FsY3VsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIE9uIG1hY2hpbmVzIHdpdGgKQEAgLTQ1NCw2ICs0NTksMTAgQEAKIAlib29sIHRsYl9mbHVzaF9wZW5kaW5nOwogI2VuZGlmCiAJc3RydWN0IHVwcm9iZXNfc3RhdGUgdXByb2Jlc19zdGF0ZTsKKyNpZmRlZiBDT05GSUdfWDg2X0lOVEVMX01QWAorCS8qIGFkZHJlc3Mgb2YgdGhlIGJvdW5kcyBkaXJlY3RvcnkgKi8KKwl2b2lkIF9fdXNlciAqYmRfYWRkcjsKKyNlbmRpZgogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1tX2luaXRfY3B1bWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaCBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaAppbmRleCBiMDY5MmQyLi40ZDY5YzAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCkBAIC04OCw2ICs4OCw5IEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgZGF0YV90YWdfdW5pdF9zaXplOyAgICAgLyogREFUQSBUQUcgVU5JVCBzaXplICovCiAJdW5zaWduZWQgaW50CQlib290X3JvX2xvY2s7CQkvKiBybyBsb2NrIHN1cHBvcnQgKi8KIAlib29sCQkJYm9vdF9yb19sb2NrYWJsZTsKKwlib29sCQkJZmZ1X2NhcGFibGU7CS8qIEZpcm13YXJlIHVwZ3JhZGUgc3VwcG9ydCAqLworI2RlZmluZSBNTUNfRklSTVdBUkVfTEVOIDgKKwl1OAkJCWZ3cmV2W01NQ19GSVJNV0FSRV9MRU5dOyAgLyogRlcgdmVyc2lvbiAqLwogCXU4CQkJcmF3X2V4Y2VwdGlvbl9zdGF0dXM7CS8qIDU0ICovCiAJdTgJCQlyYXdfcGFydGl0aW9uX3N1cHBvcnQ7CS8qIDE2MCAqLwogCXU4CQkJcmF3X3JwbWJfc2l6ZV9tdWx0OwkvKiAxNjggKi8KQEAgLTUwOSwyNCArNTEyLDggQEAKIAogI2RlZmluZSBtbWNfZGV2X3RvX2NhcmQoZCkJY29udGFpbmVyX29mKGQsIHN0cnVjdCBtbWNfY2FyZCwgZGV2KQogCi0jZGVmaW5lIG1tY19saXN0X3RvX2NhcmQobCkJY29udGFpbmVyX29mKGwsIHN0cnVjdCBtbWNfY2FyZCwgbm9kZSkKLSNkZWZpbmUgbW1jX2dldF9kcnZkYXRhKGMpCWRldl9nZXRfZHJ2ZGF0YSgmKGMpLT5kZXYpCi0jZGVmaW5lIG1tY19zZXRfZHJ2ZGF0YShjLGQpCWRldl9zZXRfZHJ2ZGF0YSgmKGMpLT5kZXYsIGQpCi0KLS8qCi0gKiBNTUMgZGV2aWNlIGRyaXZlciAoZS5nLiwgRmxhc2ggY2FyZCwgSS9PIGNhcmQuLi4pCi0gKi8KLXN0cnVjdCBtbWNfZHJpdmVyIHsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcnY7Ci0JaW50ICgqcHJvYmUpKHN0cnVjdCBtbWNfY2FyZCAqKTsKLQl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgbW1jX2NhcmQgKik7Ci0JaW50ICgqc3VzcGVuZCkoc3RydWN0IG1tY19jYXJkICopOwotCWludCAoKnJlc3VtZSkoc3RydWN0IG1tY19jYXJkICopOwotCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IG1tY19jYXJkICopOwotfTsKLQotZXh0ZXJuIGludCBtbWNfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtbWNfZHJpdmVyICopOwotZXh0ZXJuIHZvaWQgbW1jX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtbWNfZHJpdmVyICopOworZXh0ZXJuIGludCBtbWNfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOworZXh0ZXJuIHZvaWQgbW1jX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOwogCiBleHRlcm4gdm9pZCBtbWNfZml4dXBfZGV2aWNlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwKIAkJCSAgICAgY29uc3Qgc3RydWN0IG1tY19maXh1cCAqdGFibGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tbWMvY29yZS5oCmluZGV4IGYyMDZlMjkuLmNiMmIwNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmgKQEAgLTE1NCw3ICsxNTQsOCBAQAogZXh0ZXJuIGludCBfX21tY19zd2l0Y2goc3RydWN0IG1tY19jYXJkICosIHU4LCB1OCwgdTgsIHVuc2lnbmVkIGludCwgYm9vbCwKIAkJCWJvb2wsIGJvb2wpOwogZXh0ZXJuIGludCBtbWNfc3dpdGNoKHN0cnVjdCBtbWNfY2FyZCAqLCB1OCwgdTgsIHU4LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIGludCBtbWNfc2VuZF9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKmV4dF9jc2QpOworZXh0ZXJuIGludCBtbWNfc2VuZF90dW5pbmcoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKK2V4dGVybiBpbnQgbW1jX2dldF9leHRfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKipuZXdfZXh0X2NzZCk7CiAKICNkZWZpbmUgTU1DX0VSQVNFX0FSRwkJMHgwMDAwMDAwMAogI2RlZmluZSBNTUNfU0VDVVJFX0VSQVNFX0FSRwkweDgwMDAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9kd19tbWMuaCBiL2luY2x1ZGUvbGludXgvbW1jL2R3X21tYy5oCmluZGV4IDAwMTM2NjkuLjQyYjcyNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2R3X21tYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2R3X21tYy5oCkBAIC01NCw2ICs1NCw3IEBACiAgKgl0cmFuc2ZlciBpcyBpbiBwcm9ncmVzcy4KICAqIEB1c2VfZG1hOiBXaGV0aGVyIERNQSBjaGFubmVsIGlzIGluaXRpYWxpemVkIG9yIG5vdC4KICAqIEB1c2luZ19kbWE6IFdoZXRoZXIgRE1BIGlzIGluIHVzZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmZXIuCisgKiBAZG1hXzY0Yml0X2FkZHJlc3M6IFdoZXRoZXIgRE1BIHN1cHBvcnRzIDY0LWJpdCBhZGRyZXNzIG1vZGUgb3Igbm90LgogICogQHNnX2RtYTogQnVzIGFkZHJlc3Mgb2YgRE1BIGJ1ZmZlci4KICAqIEBzZ19jcHU6IFZpcnR1YWwgYWRkcmVzcyBvZiBETUEgYnVmZmVyLgogICogQGRtYV9vcHM6IFBvaW50ZXIgdG8gcGxhdGZvcm0tc3BlY2lmaWMgRE1BIGNhbGxiYWNrcy4KQEAgLTk2LDYgKzk3LDcgQEAKICAqIEBxdWlya3M6IFNldCBvZiBxdWlya3MgdGhhdCBhcHBseSB0byBzcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgSVAuCiAgKiBAaXJxX2ZsYWdzOiBUaGUgZmxhZ3MgdG8gYmUgcGFzc2VkIHRvIHJlcXVlc3RfaXJxLgogICogQGlycTogVGhlIGlycSB2YWx1ZSB0byBiZSBwYXNzZWQgdG8gcmVxdWVzdF9pcnEuCisgKiBAc2Rpb19pZDA6IE51bWJlciBvZiBzbG90MCBpbiB0aGUgU0RJTyBpbnRlcnJ1cHQgcmVnaXN0ZXJzLgogICoKICAqIExvY2tpbmcKICAqID09PT09PT0KQEAgLTEzNSwxMSArMTM3LDExIEBACiAJc3RydWN0IG1tY19jb21tYW5kCXN0b3BfYWJvcnQ7CiAJdW5zaWduZWQgaW50CQlwcmV2X2Jsa3N6OwogCXVuc2lnbmVkIGNoYXIJCXRpbWluZzsKLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqY2FyZF93b3JrcXVldWU7CiAKIAkvKiBETUEgaW50ZXJmYWNlIG1lbWJlcnMqLwogCWludAkJCXVzZV9kbWE7CiAJaW50CQkJdXNpbmdfZG1hOworCWludAkJCWRtYV82NGJpdF9hZGRyZXNzOwogCiAJZG1hX2FkZHJfdAkJc2dfZG1hOwogCXZvaWQJCQkqc2dfY3B1OwpAQCAtMTU0LDcgKzE1Niw2IEBACiAJdTMyCQkJc3RvcF9jbWRyOwogCXUzMgkJCWRpcl9zdGF0dXM7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXRhc2tsZXQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CWNhcmRfd29yazsKIAl1bnNpZ25lZCBsb25nCQlwZW5kaW5nX2V2ZW50czsKIAl1bnNpZ25lZCBsb25nCQljb21wbGV0ZWRfZXZlbnRzOwogCWVudW0gZHdfbWNpX3N0YXRlCXN0YXRlOwpAQCAtMTkzLDYgKzE5NCw4IEBACiAJYm9vbAkJCXZxbW1jX2VuYWJsZWQ7CiAJdW5zaWduZWQgbG9uZwkJaXJxX2ZsYWdzOyAvKiBJUlEgZmxhZ3MgKi8KIAlpbnQJCQlpcnE7CisKKwlpbnQJCQlzZGlvX2lkMDsKIH07CiAKIC8qIERNQSBvcHMgZm9yIEludGVybmFsL0V4dGVybmFsIERNQUMgaW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKaW5kZXggZGYwYzE1My4uOWYzMjI3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaApAQCAtMjg5LDYgKzI4OSw3IEBACiAjZGVmaW5lIE1NQ19DQVAyX0hTNDAwXzFfMlYJKDEgPDwgMTYpCS8qIENhbiBzdXBwb3J0IEhTNDAwIDEuMlYgKi8KICNkZWZpbmUgTU1DX0NBUDJfSFM0MDAJCShNTUNfQ0FQMl9IUzQwMF8xXzhWIHwgXAogCQkJCSBNTUNfQ0FQMl9IUzQwMF8xXzJWKQorI2RlZmluZSBNTUNfQ0FQMl9IU1gwMF8xXzJWCShNTUNfQ0FQMl9IUzIwMF8xXzJWX1NEUiB8IE1NQ19DQVAyX0hTNDAwXzFfMlYpCiAjZGVmaW5lIE1NQ19DQVAyX1NESU9fSVJRX05PVEhSRUFEICgxIDw8IDE3KQogCiAJbW1jX3BtX2ZsYWdfdAkJcG1fY2FwczsJLyogc3VwcG9ydGVkIHBtIGZlYXR1cmVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaCBiL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCmluZGV4IDFjZDAwYjMuLjQ5YWQ3YTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL21tYy5oCkBAIC0yOTYsNiArMjk2LDcgQEAKICNkZWZpbmUgRVhUX0NTRF9TQU5JVElaRV9TVEFSVAkJMTY1ICAgICAvKiBXICovCiAjZGVmaW5lIEVYVF9DU0RfV1JfUkVMX1BBUkFNCQkxNjYJLyogUk8gKi8KICNkZWZpbmUgRVhUX0NTRF9SUE1CX01VTFQJCTE2OAkvKiBSTyAqLworI2RlZmluZSBFWFRfQ1NEX0ZXX0NPTkZJRwkJMTY5CS8qIFIvVyAqLwogI2RlZmluZSBFWFRfQ1NEX0JPT1RfV1AJCQkxNzMJLyogUi9XICovCiAjZGVmaW5lIEVYVF9DU0RfRVJBU0VfR1JPVVBfREVGCQkxNzUJLyogUi9XICovCiAjZGVmaW5lIEVYVF9DU0RfUEFSVF9DT05GSUcJCTE3OQkvKiBSL1cgKi8KQEAgLTMzMiw2ICszMzMsOCBAQAogI2RlZmluZSBFWFRfQ1NEX0dFTkVSSUNfQ01ENl9USU1FCTI0OAkvKiBSTyAqLwogI2RlZmluZSBFWFRfQ1NEX0NBQ0hFX1NJWkUJCTI0OQkvKiBSTywgNCBieXRlcyAqLwogI2RlZmluZSBFWFRfQ1NEX1BXUl9DTF9ERFJfMjAwXzM2MAkyNTMJLyogUk8gKi8KKyNkZWZpbmUgRVhUX0NTRF9GSVJNV0FSRV9WRVJTSU9OCTI1NAkvKiBSTywgOCBieXRlcyAqLworI2RlZmluZSBFWFRfQ1NEX1NVUFBPUlRFRF9NT0RFCQk0OTMJLyogUk8gKi8KICNkZWZpbmUgRVhUX0NTRF9UQUdfVU5JVF9TSVpFCQk0OTgJLyogUk8gKi8KICNkZWZpbmUgRVhUX0NTRF9EQVRBX1RBR19TVVBQT1JUCTQ5OQkvKiBSTyAqLwogI2RlZmluZSBFWFRfQ1NEX01BWF9QQUNLRURfV1JJVEVTCTUwMAkvKiBSTyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvc2RoY2kuaCBiL2luY2x1ZGUvbGludXgvbW1jL3NkaGNpLmgKaW5kZXggZGJhNzkzZS4uMzc1YWY4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvc2RoY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9zZGhjaS5oCkBAIC0xMDAsNiArMTAwLDEyIEBACiAjZGVmaW5lIFNESENJX1FVSVJLMl9CUk9LRU5fRERSNTAJCQkoMTw8NykKIC8qIFN0b3AgY29tbWFuZCAoQ01EMTIpIGNhbiBzZXQgVHJhbnNmZXIgQ29tcGxldGUgd2hlbiBub3QgdXNpbmcgTU1DX1JTUF9CVVNZICovCiAjZGVmaW5lIFNESENJX1FVSVJLMl9TVE9QX1dJVEhfVEMJCQkoMTw8OCkKKy8qIENvbnRyb2xsZXIgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgRE1BICovCisjZGVmaW5lIFNESENJX1FVSVJLMl9CUk9LRU5fNjRfQklUX0RNQQkJCSgxPDw5KQorLyogbmVlZCBjbGVhciB0cmFuc2ZlciBtb2RlIHJlZ2lzdGVyIGJlZm9yZSBzZW5kIGNtZCAqLworI2RlZmluZSBTREhDSV9RVUlSSzJfQ0xFQVJfVFJBTlNGRVJNT0RFX1JFR19CRUZPUkVfQ01ECSgxPDwxMCkKKy8qIENhcGFiaWxpdHkgcmVnaXN0ZXIgYml0LTYzIGluZGljYXRlcyBIUzQwMCBzdXBwb3J0ICovCisjZGVmaW5lIFNESENJX1FVSVJLMl9DQVBTX0JJVDYzX0ZPUl9IUzQwMAkJKDE8PDExKQogCiAJaW50IGlycTsJCS8qIERldmljZSBJUlEgKi8KIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsJLyogTWFwcGVkIGFkZHJlc3MgKi8KQEAgLTEzMCw2ICsxMzYsNyBAQAogI2RlZmluZSBTREhDSV9TRElPX0lSUV9FTkFCTEVECSgxPDw5KQkvKiBTRElPIGlycSBlbmFibGVkICovCiAjZGVmaW5lIFNESENJX1NEUjEwNF9ORUVEU19UVU5JTkcgKDE8PDEwKQkvKiBTRFIxMDQvSFMyMDAgbmVlZHMgdHVuaW5nICovCiAjZGVmaW5lIFNESENJX1VTSU5HX1JFVFVOSU5HX1RJTUVSICgxPDwxMSkJLyogSG9zdCBpcyB1c2luZyBhIHJldHVuaW5nIHRpbWVyIGZvciB0aGUgY2FyZCAqLworI2RlZmluZSBTREhDSV9VU0VfNjRfQklUX0RNQQkoMTw8MTIpCS8qIFVzZSA2NC1iaXQgRE1BICovCiAKIAl1bnNpZ25lZCBpbnQgdmVyc2lvbjsJLyogU0RIQ0kgc3BlYy4gdmVyc2lvbiAqLwogCkBAIC0xNTUsMTIgKzE2MiwxOSBAQAogCiAJaW50IHNnX2NvdW50OwkJLyogTWFwcGVkIHNnIGVudHJpZXMgKi8KIAotCXU4ICphZG1hX2Rlc2M7CQkvKiBBRE1BIGRlc2NyaXB0b3IgdGFibGUgKi8KLQl1OCAqYWxpZ25fYnVmZmVyOwkvKiBCb3VuY2UgYnVmZmVyICovCisJdm9pZCAqYWRtYV90YWJsZTsJLyogQURNQSBkZXNjcmlwdG9yIHRhYmxlICovCisJdm9pZCAqYWxpZ25fYnVmZmVyOwkvKiBCb3VuY2UgYnVmZmVyICovCisKKwlzaXplX3QgYWRtYV90YWJsZV9zejsJLyogQURNQSBkZXNjcmlwdG9yIHRhYmxlIHNpemUgKi8KKwlzaXplX3QgYWxpZ25fYnVmZmVyX3N6OwkvKiBCb3VuY2UgYnVmZmVyIHNpemUgKi8KIAogCWRtYV9hZGRyX3QgYWRtYV9hZGRyOwkvKiBNYXBwZWQgQURNQSBkZXNjci4gdGFibGUgKi8KIAlkbWFfYWRkcl90IGFsaWduX2FkZHI7CS8qIE1hcHBlZCBib3VuY2UgYnVmZmVyICovCiAKKwl1bnNpZ25lZCBpbnQgZGVzY19zejsJLyogQURNQSBkZXNjcmlwdG9yIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgYWxpZ25fc3o7CS8qIEFETUEgYWxpZ25tZW50ICovCisJdW5zaWduZWQgaW50IGFsaWduX21hc2s7CS8qIEFETUEgYWxpZ25tZW50IG1hc2sgKi8KKwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBmaW5pc2hfdGFza2xldDsJLyogVGFza2xldCBzdHJ1Y3R1cmVzICovCiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsJLyogVGltZXIgZm9yIHRpbWVvdXRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaCBiL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oCmluZGV4IDUwZjBiYzkuLmFhYjAzMmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oCkBAIC04NCw4ICs4NCw2IEBACiAJc3RydWN0IGRldmljZV9kcml2ZXIgZHJ2OwogfTsKIAotI2RlZmluZSB0b19zZGlvX2RyaXZlcihkKQljb250YWluZXJfb2YoZCwgc3RydWN0IHNkaW9fZHJpdmVyLCBkcnYpCi0KIC8qKgogICogU0RJT19ERVZJQ0UgLSBtYWNybyB1c2VkIHRvIGRlc2NyaWJlIGEgc3BlY2lmaWMgU0RJTyBkZXZpY2UKICAqIEB2ZW5kOiB0aGUgMTYgYml0IG1hbnVmYWN0dXJlciBjb2RlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCBmZmU2NmUzLi4zODc5ZDc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTcyMiw5ICs3MjIsNiBAQAogCWludCBucl96b25lczsKICNpZmRlZiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVAJLyogbWVhbnMgIVNQQVJTRU1FTSAqLwogCXN0cnVjdCBwYWdlICpub2RlX21lbV9tYXA7Ci0jaWZkZWYgQ09ORklHX01FTUNHCi0Jc3RydWN0IHBhZ2VfY2dyb3VwICpub2RlX3BhZ2VfY2dyb3VwOwotI2VuZGlmCiAjZW5kaWYKICNpZm5kZWYgQ09ORklHX05PX0JPT1RNRU0KIAlzdHJ1Y3QgYm9vdG1lbV9kYXRhICpiZGF0YTsKQEAgLTEwNzgsNyArMTA3NSw2IEBACiAjZGVmaW5lIFNFQ1RJT05fQUxJR05fRE9XTihwZm4pCSgocGZuKSAmIFBBR0VfU0VDVElPTl9NQVNLKQogCiBzdHJ1Y3QgcGFnZTsKLXN0cnVjdCBwYWdlX2Nncm91cDsKIHN0cnVjdCBtZW1fc2VjdGlvbiB7CiAJLyoKIAkgKiBUaGlzIGlzLCBsb2dpY2FsbHksIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBzdHJ1Y3QKQEAgLTEwOTYsMTQgKzEwOTIsNiBAQAogCiAJLyogU2VlIGRlY2xhcmF0aW9uIG9mIHNpbWlsYXIgZmllbGQgaW4gc3RydWN0IHpvbmUgKi8KIAl1bnNpZ25lZCBsb25nICpwYWdlYmxvY2tfZmxhZ3M7Ci0jaWZkZWYgQ09ORklHX01FTUNHCi0JLyoKLQkgKiBJZiAhU1BBUlNFTUVNLCBwZ2RhdCBkb2Vzbid0IGhhdmUgcGFnZV9jZ3JvdXAgcG9pbnRlci4gV2UgdXNlCi0JICogc2VjdGlvbi4gKHNlZSBtZW1jb250cm9sLmgvcGFnZV9jZ3JvdXAuaCBhYm91dCB0aGlzLikKLQkgKi8KLQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBhZ2VfY2dyb3VwOwotCXVuc2lnbmVkIGxvbmcgcGFkOwotI2VuZGlmCiAJLyoKIAkgKiBXQVJOSU5HOiBtZW1fc2VjdGlvbiBtdXN0IGJlIGEgcG93ZXItb2YtMiBpbiBzaXplIGZvciB0aGUKIAkgKiBjYWxjdWxhdGlvbiBhbmQgdXNlIG9mIFNFQ1RJT05fUk9PVF9NQVNLIHRvIG1ha2Ugc2Vuc2UuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21zaS5oIGIvaW5jbHVkZS9saW51eC9tc2kuaAppbmRleCA0NGY0NzQ2Li44YWM0YTY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21zaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXNpLmgKQEAgLTEwLDE3ICsxMCwxMiBAQAogCXUzMglkYXRhOwkJLyogMTYgYml0cyBvZiBtc2kgbWVzc2FnZSBkYXRhICovCiB9OwogCitleHRlcm4gaW50IHBjaV9tc2lfaWdub3JlX21hc2s7CiAvKiBIZWxwZXIgZnVuY3Rpb25zICovCiBzdHJ1Y3QgaXJxX2RhdGE7CiBzdHJ1Y3QgbXNpX2Rlc2M7Ci12b2lkIG1hc2tfbXNpX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOwotdm9pZCB1bm1hc2tfbXNpX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOwotdm9pZCBfX3JlYWRfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKIHZvaWQgX19nZXRfY2FjaGVkX21zaV9tc2coc3RydWN0IG1zaV9kZXNjICplbnRyeSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7Ci12b2lkIF9fd3JpdGVfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKLXZvaWQgcmVhZF9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogdm9pZCBnZXRfY2FjaGVkX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7Ci12b2lkIHdyaXRlX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CiAKIHN0cnVjdCBtc2lfZGVzYyB7CiAJc3RydWN0IHsKQEAgLTQ4LDYgKzQzLDUyIEBACiAJc3RydWN0IG1zaV9tc2cgbXNnOwogfTsKIAorLyogSGVscGVycyB0byBoaWRlIHN0cnVjdCBtc2lfZGVzYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzICovCisjZGVmaW5lIG1zaV9kZXNjX3RvX2RldihkZXNjKQkJKCYoZGVzYyktPmRldi5kZXYpCisjZGVmaW5lIGRldl90b19tc2lfbGlzdChkZXYpCQkoJnRvX3BjaV9kZXYoKGRldikpLT5tc2lfbGlzdCkKKyNkZWZpbmUgZmlyc3RfbXNpX2VudHJ5KGRldikJCVwKKwlsaXN0X2ZpcnN0X2VudHJ5KGRldl90b19tc2lfbGlzdCgoZGV2KSksIHN0cnVjdCBtc2lfZGVzYywgbGlzdCkKKyNkZWZpbmUgZm9yX2VhY2hfbXNpX2VudHJ5KGRlc2MsIGRldikJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoKGRlc2MpLCBkZXZfdG9fbXNpX2xpc3QoKGRldikpLCBsaXN0KQorCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKyNkZWZpbmUgZmlyc3RfcGNpX21zaV9lbnRyeShwZGV2KQlmaXJzdF9tc2lfZW50cnkoJihwZGV2KS0+ZGV2KQorI2RlZmluZSBmb3JfZWFjaF9wY2lfbXNpX2VudHJ5KGRlc2MsIHBkZXYpCVwKKwlmb3JfZWFjaF9tc2lfZW50cnkoKGRlc2MpLCAmKHBkZXYpLT5kZXYpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKm1zaV9kZXNjX3RvX3BjaV9kZXYoc3RydWN0IG1zaV9kZXNjICpkZXNjKQoreworCXJldHVybiBkZXNjLT5kZXY7Cit9CisjZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KKwordm9pZCBfX3BjaV9yZWFkX21zaV9tc2coc3RydWN0IG1zaV9kZXNjICplbnRyeSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7Cit2b2lkIF9fcGNpX3dyaXRlX21zaV9tc2coc3RydWN0IG1zaV9kZXNjICplbnRyeSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7Cit2b2lkIHBjaV93cml0ZV9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOworCit1MzIgX19wY2lfbXNpeF9kZXNjX21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpOwordTMyIF9fcGNpX21zaV9kZXNjX21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIG1hc2ssIHUzMiBmbGFnKTsKK3ZvaWQgcGNpX21zaV9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOwordm9pZCBwY2lfbXNpX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKKworLyogQ29udmVyc2lvbiBoZWxwZXJzLiBTaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBtZXJnaW5nICovCitzdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZV9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJX19wY2lfd3JpdGVfbXNpX21zZyhlbnRyeSwgbXNnKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9tc2lfbXNnKGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJcGNpX3dyaXRlX21zaV9tc2coaXJxLCBtc2cpOworfQorc3RhdGljIGlubGluZSB2b2lkIG1hc2tfbXNpX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJcGNpX21zaV9tYXNrX2lycShkYXRhKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bm1hc2tfbXNpX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJcGNpX21zaV91bm1hc2tfaXJxKGRhdGEpOworfQorCiAvKgogICogVGhlIGFyY2ggaG9va3MgdG8gc2V0dXAgdXAgbXNpIGlycXMuIFRob3NlIGZ1bmN0aW9ucyBhcmUKICAqIGltcGxlbWVudGVkIGFzIHdlYWsgc3ltYm9scyBzbyB0aGF0IHRoZXkgL2Nhbi8gYmUgb3ZlcnJpZGVuIGJ5CkBAIC02MSwxOCArMTAyLDE0MiBAQAogCiB2b2lkIGRlZmF1bHRfdGVhcmRvd25fbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIGRlZmF1bHRfcmVzdG9yZV9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLXUzMiBkZWZhdWx0X21zaV9tYXNrX2lycShzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHUzMiBtYXNrLCB1MzIgZmxhZyk7Ci11MzIgZGVmYXVsdF9tc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpOwogCi1zdHJ1Y3QgbXNpX2NoaXAgeworc3RydWN0IG1zaV9jb250cm9sbGVyIHsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19NU0lfSVJRX0RPTUFJTgorCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CisjZW5kaWYKIAotCWludCAoKnNldHVwX2lycSkoc3RydWN0IG1zaV9jaGlwICpjaGlwLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCWludCAoKnNldHVwX2lycSkoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJIHN0cnVjdCBtc2lfZGVzYyAqZGVzYyk7Ci0Jdm9pZCAoKnRlYXJkb3duX2lycSkoc3RydWN0IG1zaV9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgaXJxKTsKKwl2b2lkICgqdGVhcmRvd25faXJxKShzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEpOwogfTsKIAorI2lmZGVmIENPTkZJR19HRU5FUklDX01TSV9JUlFfRE9NQUlOCisKKyNpbmNsdWRlIDxsaW51eC9pcnFoYW5kbGVyLmg+CisjaW5jbHVkZSA8YXNtL21zaS5oPgorCitzdHJ1Y3QgaXJxX2RvbWFpbjsKK3N0cnVjdCBpcnFfY2hpcDsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBtc2lfZG9tYWluX2luZm87CisKKy8qKgorICogc3RydWN0IG1zaV9kb21haW5fb3BzIC0gTVNJIGludGVycnVwdCBkb21haW4gY2FsbGJhY2tzCisgKiBAZ2V0X2h3aXJxOgkJUmV0cmlldmUgdGhlIHJlc3VsdGluZyBodyBpcnEgbnVtYmVyCisgKiBAbXNpX2luaXQ6CQlEb21haW4gc3BlY2lmaWMgaW5pdCBmdW5jdGlvbiBmb3IgTVNJIGludGVycnVwdHMKKyAqIEBtc2lfZnJlZToJCURvbWFpbiBzcGVjaWZpYyBmdW5jdGlvbiB0byBmcmVlIGEgTVNJIGludGVycnVwdHMKKyAqIEBtc2lfY2hlY2s6CQlDYWxsYmFjayBmb3IgdmVyaWZpY2F0aW9uIG9mIHRoZSBkb21haW4vaW5mby9kZXYgZGF0YQorICogQG1zaV9wcmVwYXJlOglQcmVwYXJlIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBpbnRlcnJ1cHRzIGluIHRoZSBkb21haW4KKyAqIEBtc2lfZmluaXNoOgkJT3B0aW9uYWwgY2FsbGJhY2wgdG8gZmluYWxpemUgdGhlIGFsbG9jYXRpb24KKyAqIEBzZXRfZGVzYzoJCVNldCB0aGUgbXNpIGRlc2NyaXB0b3IgZm9yIGFuIGludGVycnVwdAorICogQGhhbmRsZV9lcnJvcjoJT3B0aW9uYWwgZXJyb3IgaGFuZGxlciBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscworICoKKyAqIEBnZXRfaHdpcnEsIEBtc2lfaW5pdCBhbmQgQG1zaV9mcmVlIGFyZSBjYWxsYmFja3MgdXNlZCBieQorICogbXNpX2NyZWF0ZV9pcnFfZG9tYWluKCkgYW5kIHJlbGF0ZWQgaW50ZXJmYWNlcworICoKKyAqIEBtc2lfY2hlY2ssIEBtc2lfcHJlcGFyZSwgQG1zaV9maW5pc2gsIEBzZXRfZGVzYyBhbmQgQGhhbmRsZV9lcnJvcgorICogYXJlIGNhbGxiYWNrcyB1c2VkIGJ5IG1zaV9pcnFfZG9tYWluX2FsbG9jX2lycXMoKSBhbmQgcmVsYXRlZAorICogaW50ZXJmYWNlcyB3aGljaCBhcmUgYmFzZWQgb24gbXNpX2Rlc2MuCisgKi8KK3N0cnVjdCBtc2lfZG9tYWluX29wcyB7CisJaXJxX2h3X251bWJlcl90CSgqZ2V0X2h3aXJxKShzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJCSAgICAgbXNpX2FsbG9jX2luZm9fdCAqYXJnKTsKKwlpbnQJCSgqbXNpX2luaXQpKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJICAgIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sCisJCQkJICAgIHVuc2lnbmVkIGludCB2aXJxLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEsCisJCQkJICAgIG1zaV9hbGxvY19pbmZvX3QgKmFyZyk7CisJdm9pZAkJKCptc2lfZnJlZSkoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkgICAgdW5zaWduZWQgaW50IHZpcnEpOworCWludAkJKCptc2lfY2hlY2spKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJICAgICBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQJCSgqbXNpX3ByZXBhcmUpKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG52ZWMsCisJCQkJICAgICAgIG1zaV9hbGxvY19pbmZvX3QgKmFyZyk7CisJdm9pZAkJKCptc2lfZmluaXNoKShtc2lfYWxsb2NfaW5mb190ICphcmcsIGludCByZXR2YWwpOworCXZvaWQJCSgqc2V0X2Rlc2MpKG1zaV9hbGxvY19pbmZvX3QgKmFyZywKKwkJCQkgICAgc3RydWN0IG1zaV9kZXNjICpkZXNjKTsKKwlpbnQJCSgqaGFuZGxlX2Vycm9yKShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIGludCBlcnJvcik7Cit9OworCisvKioKKyAqIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gLSBNU0kgaW50ZXJydXB0IGRvbWFpbiBkYXRhCisgKiBAZmxhZ3M6CQlGbGFncyB0byBkZWNyaWJlIGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMKKyAqIEBvcHM6CQlUaGUgY2FsbGJhY2sgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgkJT3B0aW9uYWw6IGFzc29jaWF0ZWQgaW50ZXJydXB0IGNoaXAKKyAqIEBjaGlwX2RhdGE6CQlPcHRpb25hbDogYXNzb2NpYXRlZCBpbnRlcnJ1cHQgY2hpcCBkYXRhCisgKiBAaGFuZGxlcjoJCU9wdGlvbmFsOiBhc3NvY2lhdGVkIGludGVycnVwdCBmbG93IGhhbmRsZXIKKyAqIEBoYW5kbGVyX2RhdGE6CU9wdGlvbmFsOiBhc3NvY2lhdGVkIGludGVycnVwdCBmbG93IGhhbmRsZXIgZGF0YQorICogQGhhbmRsZXJfbmFtZToJT3B0aW9uYWw6IGFzc29jaWF0ZWQgaW50ZXJydXB0IGZsb3cgaGFuZGxlciBuYW1lCisgKiBAZGF0YToJCU9wdGlvbmFsOiBkb21haW4gc3BlY2lmaWMgZGF0YQorICovCitzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvIHsKKwl1MzIJCQlmbGFnczsKKwlzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMJKm9wczsKKwlzdHJ1Y3QgaXJxX2NoaXAJCSpjaGlwOworCXZvaWQJCQkqY2hpcF9kYXRhOworCWlycV9mbG93X2hhbmRsZXJfdAloYW5kbGVyOworCXZvaWQJCQkqaGFuZGxlcl9kYXRhOworCWNvbnN0IGNoYXIJCSpoYW5kbGVyX25hbWU7CisJdm9pZAkJCSpkYXRhOworfTsKKworLyogRmxhZ3MgZm9yIG1zaV9kb21haW5faW5mbyAqLworZW51bSB7CisJLyoKKwkgKiBJbml0IG5vbiBpbXBsZW1lbnRlZCBvcHMgY2FsbGJhY2tzIHdpdGggZGVmYXVsdCBNU0kgZG9tYWluCisJICogY2FsbGJhY2tzLgorCSAqLworCU1TSV9GTEFHX1VTRV9ERUZfRE9NX09QUwk9ICgxIDw8IDApLAorCS8qCisJICogSW5pdCBub24gaW1wbGVtZW50ZWQgY2hpcCBjYWxsYmFja3Mgd2l0aCBkZWZhdWx0IE1TSSBjaGlwCisJICogY2FsbGJhY2tzLgorCSAqLworCU1TSV9GTEFHX1VTRV9ERUZfQ0hJUF9PUFMJPSAoMSA8PCAxKSwKKwkvKiBCdWlsZCBpZGVudGl0eSBtYXAgYmV0d2VlbiBod2lycSBhbmQgaXJxICovCisJTVNJX0ZMQUdfSURFTlRJVFlfTUFQCQk9ICgxIDw8IDIpLAorCS8qIFN1cHBvcnQgbXVsdGlwbGUgUENJIE1TSSBpbnRlcnJ1cHRzICovCisJTVNJX0ZMQUdfTVVMVElfUENJX01TSQkJPSAoMSA8PCAzKSwKKwkvKiBTdXBwb3J0IFBDSSBNU0lYIGludGVycnVwdHMgKi8KKwlNU0lfRkxBR19QQ0lfTVNJWAkJPSAoMSA8PCA0KSwKK307CisKK2ludCBtc2lfZG9tYWluX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJICAgIGJvb2wgZm9yY2UpOworCitzdHJ1Y3QgaXJxX2RvbWFpbiAqbXNpX2NyZWF0ZV9pcnFfZG9tYWluKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKKwkJCQkJIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sCisJCQkJCSBzdHJ1Y3QgaXJxX2RvbWFpbiAqcGFyZW50KTsKK2ludCBtc2lfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBpbnQgbnZlYyk7Cit2b2lkIG1zaV9kb21haW5fZnJlZV9pcnFzKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldik7CitzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICptc2lfZ2V0X2RvbWFpbl9pbmZvKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4pOworCisjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfTVNJX0lSUV9ET01BSU4gKi8KKworI2lmZGVmIENPTkZJR19QQ0lfTVNJX0lSUV9ET01BSU4KK3ZvaWQgcGNpX21zaV9kb21haW5fd3JpdGVfbXNnKHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEsIHN0cnVjdCBtc2lfbXNnICptc2cpOworc3RydWN0IGlycV9kb21haW4gKnBjaV9tc2lfY3JlYXRlX2lycV9kb21haW4oc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgICAgIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sCisJCQkJCSAgICAgc3RydWN0IGlycV9kb21haW4gKnBhcmVudCk7CitpbnQgcGNpX21zaV9kb21haW5fYWxsb2NfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJICAgICAgaW50IG52ZWMsIGludCB0eXBlKTsKK3ZvaWQgcGNpX21zaV9kb21haW5fZnJlZV9pcnFzKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBwY2lfZGV2ICpkZXYpOworc3RydWN0IGlycV9kb21haW4gKnBjaV9tc2lfY3JlYXRlX2RlZmF1bHRfaXJxX2RvbWFpbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCSBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLCBzdHJ1Y3QgaXJxX2RvbWFpbiAqcGFyZW50KTsKKworaXJxX2h3X251bWJlcl90IHBjaV9tc2lfZG9tYWluX2NhbGNfaHdpcnEoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpOworaW50IHBjaV9tc2lfZG9tYWluX2NoZWNrX2NhcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJICAgICBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJX0lSUV9ET01BSU4gKi8KKwogI2VuZGlmIC8qIExJTlVYX01TSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczQuaCBiL2luY2x1ZGUvbGludXgvbmZzNC5oCmluZGV4IDM1NmFjYzIuLjAyMmI3NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzNC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzNC5oCkBAIC00OTAsNiArNDkwLDggQEAKIAogCS8qIG5mczQyICovCiAJTkZTUFJPQzRfQ0xOVF9TRUVLLAorCU5GU1BST0M0X0NMTlRfQUxMT0NBVEUsCisJTkZTUFJPQzRfQ0xOVF9ERUFMTE9DQVRFLAogfTsKIAogLyogbmZzNDEgdHlwZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCmluZGV4IGM3MmQxYWQuLjZkNjI3YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApAQCAtMTYzLDcgKzE2Myw3IEBACiAJICovCiAJX19iZTMyCQkJY29va2lldmVyZlsyXTsKIAotCXVuc2lnbmVkIGxvbmcJCW5wYWdlczsKKwl1bnNpZ25lZCBsb25nCQlucmVxdWVzdHM7CiAJc3RydWN0IG5mc19tZHNfY29tbWl0X2luZm8gY29tbWl0X2luZm87CiAKIAkvKiBPcGVuIGNvbnRleHRzIGZvciBzaGFyZWQgbW1hcCB3cml0ZXMgKi8KQEAgLTUyMCw3ICs1MjAsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIG5mc19oYXZlX3dyaXRlYmFja3Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlyZXR1cm4gTkZTX0koaW5vZGUpLT5ucGFnZXMgIT0gMDsKKwlyZXR1cm4gTkZTX0koaW5vZGUpLT5ucmVxdWVzdHMgIT0gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IGEzMmJhMGQuLjFlMzdmYmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtMjMxLDUgKzIzMSw3IEBACiAjZGVmaW5lIE5GU19DQVBfQVRPTUlDX09QRU5fVjEJKDFVIDw8IDE3KQogI2RlZmluZSBORlNfQ0FQX1NFQ1VSSVRZX0xBQkVMCSgxVSA8PCAxOCkKICNkZWZpbmUgTkZTX0NBUF9TRUVLCQkoMVUgPDwgMTkpCisjZGVmaW5lIE5GU19DQVBfQUxMT0NBVEUJKDFVIDw8IDIwKQorI2RlZmluZSBORlNfQ0FQX0RFQUxMT0NBVEUJKDFVIDw8IDIxKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKaW5kZXggNDdlYmI0Zi4uNDY3Yzg0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTEyNDMsNiArMTI0MywyMCBAQAogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCiAjaWZkZWYgQ09ORklHX05GU19WNF8yCitzdHJ1Y3QgbmZzNDJfZmFsbG9jX2FyZ3MgeworCXN0cnVjdCBuZnM0X3NlcXVlbmNlX2FyZ3MJc2VxX2FyZ3M7CisKKwlzdHJ1Y3QgbmZzX2ZoCQkJKmZhbGxvY19maDsKKwluZnM0X3N0YXRlaWQJCQkgZmFsbG9jX3N0YXRlaWQ7CisJdTY0CQkJCSBmYWxsb2Nfb2Zmc2V0OworCXU2NAkJCQkgZmFsbG9jX2xlbmd0aDsKK307CisKK3N0cnVjdCBuZnM0Ml9mYWxsb2NfcmVzIHsKKwlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMJc2VxX3JlczsKKwl1bnNpZ25lZCBpbnQJCQlzdGF0dXM7Cit9OworCiBzdHJ1Y3QgbmZzNDJfc2Vla19hcmdzIHsKIAlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzCXNlcV9hcmdzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mLmggYi9pbmNsdWRlL2xpbnV4L29mLmgKaW5kZXggMjlmMGFkYy4uMWE2NmI4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZi5oCisrKyBiL2luY2x1ZGUvbGludXgvb2YuaApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CkBAIC00OSw2ICs1MCw3IEBACiAJY29uc3QgY2hhciAqdHlwZTsKIAlwaGFuZGxlIHBoYW5kbGU7CiAJY29uc3QgY2hhciAqZnVsbF9uYW1lOworCXN0cnVjdCBmd25vZGVfaGFuZGxlIGZ3bm9kZTsKIAogCXN0cnVjdAlwcm9wZXJ0eSAqcHJvcGVydGllczsKIAlzdHJ1Y3QJcHJvcGVydHkgKmRlYWRwcm9wczsJLyogcmVtb3ZlZCBwcm9wZXJ0aWVzICovCkBAIC03OSw2ICs4MSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb2Zfbm9kZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKIHsKIAlrb2JqZWN0X2luaXQoJm5vZGUtPmtvYmosICZvZl9ub2RlX2t0eXBlKTsKKwlub2RlLT5md25vZGUudHlwZSA9IEZXTk9ERV9PRjsKIH0KIAogLyogdHJ1ZSB3aGVuIG5vZGUgaXMgaW5pdGlhbGl6ZWQgKi8KQEAgLTExNCw2ICsxMTcsMTYgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX3N0ZG91dDsKIGV4dGVybiByYXdfc3BpbmxvY2tfdCBkZXZ0cmVlX2xvY2s7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19vZl9ub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCit7CisJcmV0dXJuIGZ3bm9kZSAmJiBmd25vZGUtPnR5cGUgPT0gRldOT0RFX09GOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQoreworCXJldHVybiBmd25vZGUgPyBjb250YWluZXJfb2YoZndub2RlLCBzdHJ1Y3QgZGV2aWNlX25vZGUsIGZ3bm9kZSkgOiBOVUxMOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgb2ZfaGF2ZV9wb3B1bGF0ZWRfZHQodm9pZCkKIHsKIAlyZXR1cm4gb2ZfYWxsbm9kZXMgIT0gTlVMTDsKQEAgLTI2Myw2ICsyNzYsMTAgQEAKIAkJCQkgICAgICBzaXplX3Qgc3opOwogZXh0ZXJuIGludCBvZl9wcm9wZXJ0eV9yZWFkX3U2NChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCWNvbnN0IGNoYXIgKnByb3BuYW1lLCB1NjQgKm91dF92YWx1ZSk7CitleHRlcm4gaW50IG9mX3Byb3BlcnR5X3JlYWRfdTY0X2FycmF5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJICAgICAgY29uc3QgY2hhciAqcHJvcG5hbWUsCisJCQkJICAgICAgdTY0ICpvdXRfdmFsdWVzLAorCQkJCSAgICAgIHNpemVfdCBzeik7CiAKIGV4dGVybiBpbnQgb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgICBjb25zdCBjaGFyICpwcm9wbmFtZSwKQEAgLTM1NSw2ICszNzIsMTYgQEAKIAogI2Vsc2UgLyogQ09ORklHX09GICovCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19vZl9ub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCit7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQoreworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIG9mX25vZGVfZnVsbF9uYW1lKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJcmV0dXJuICI8bm8tbm9kZT4iOwpAQCAtNDc3LDYgKzUwNCwxMyBAQAogCXJldHVybiAtRU5PU1lTOwogfQogCitzdGF0aWMgaW5saW5lIGludCBvZl9wcm9wZXJ0eV9yZWFkX3U2NF9hcnJheShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCQkgICAgIHU2NCAqb3V0X3ZhbHVlcywgc2l6ZV90IHN6KQoreworCXJldHVybiAtRU5PU1lTOworfQorCiBzdGF0aWMgaW5saW5lIGludCBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCQkgIGNvbnN0IGNoYXIgKnByb3BuYW1lLAogCQkJCQkgIGNvbnN0IGNoYXIgKipvdXRfc3RyaW5nKQpAQCAtOTIyLDQgKzk1NiwxNSBAQAogLyogQ09ORklHX09GX1JFU09MVkUgYXBpICovCiBleHRlcm4gaW50IG9mX3Jlc29sdmVfcGhhbmRsZXMoc3RydWN0IGRldmljZV9ub2RlICp0cmVlKTsKIAorLyoqCisgKiBvZl9kZXZpY2VfaXNfc3lzdGVtX3Bvd2VyX2NvbnRyb2xsZXIgLSBUZWxscyBpZiBzeXN0ZW0tcG93ZXItY29udHJvbGxlciBpcyBmb3VuZCBmb3IgZGV2aWNlX25vZGUKKyAqIEBucDogUG9pbnRlciB0byB0aGUgZ2l2ZW4gZGV2aWNlX25vZGUKKyAqCisgKiByZXR1cm4gdHJ1ZSBpZiBwcmVzZW50IGZhbHNlIG90aGVyd2lzZQorICovCitzdGF0aWMgaW5saW5lIGJvb2wgb2ZfZGV2aWNlX2lzX3N5c3RlbV9wb3dlcl9jb250cm9sbGVyKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJcmV0dXJuIG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgInN5c3RlbS1wb3dlci1jb250cm9sbGVyIik7Cit9CisKICNlbmRpZiAvKiBfTElOVVhfT0ZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9wY2kuaCBiL2luY2x1ZGUvbGludXgvb2ZfcGNpLmgKaW5kZXggMWZkMjA3ZS4uY2UwZTVhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L29mX3BjaS5oCkBAIC01OSwxMyArNTksMTMgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfT0YpICYmIGRlZmluZWQoQ09ORklHX1BDSV9NU0kpCi1pbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApOwotdm9pZCBvZl9wY2lfbXNpX2NoaXBfcmVtb3ZlKHN0cnVjdCBtc2lfY2hpcCAqY2hpcCk7Ci1zdHJ1Y3QgbXNpX2NoaXAgKm9mX3BjaV9maW5kX21zaV9jaGlwX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKTsKK2ludCBvZl9wY2lfbXNpX2NoaXBfYWRkKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCk7Cit2b2lkIG9mX3BjaV9tc2lfY2hpcF9yZW1vdmUoc3RydWN0IG1zaV9jb250cm9sbGVyICpjaGlwKTsKK3N0cnVjdCBtc2lfY29udHJvbGxlciAqb2ZfcGNpX2ZpbmRfbXNpX2NoaXBfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG9mX3BjaV9tc2lfY2hpcF9hZGQoc3RydWN0IG1zaV9jaGlwICpjaGlwKSB7IHJldHVybiAtRUlOVkFMOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgb2ZfcGNpX21zaV9jaGlwX3JlbW92ZShzdHJ1Y3QgbXNpX2NoaXAgKmNoaXApIHsgfQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbXNpX2NoaXAgKgorc3RhdGljIGlubGluZSBpbnQgb2ZfcGNpX21zaV9jaGlwX2FkZChzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKmNoaXApIHsgcmV0dXJuIC1FSU5WQUw7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBvZl9wY2lfbXNpX2NoaXBfcmVtb3ZlKHN0cnVjdCBtc2lfY29udHJvbGxlciAqY2hpcCkgeyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBtc2lfY29udHJvbGxlciAqCiBvZl9wY2lfZmluZF9tc2lfY2hpcF9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkgeyByZXR1cm4gTlVMTDsgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb21hcC1ncG1jLmggYi9pbmNsdWRlL2xpbnV4L29tYXAtZ3BtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDgwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L29tYXAtZ3BtYy5oCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogIE9NQVAgR1BNQyAoR2VuZXJhbCBQdXJwb3NlIE1lbW9yeSBDb250cm9sbGVyKSBkZWZpbmVzCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLyogTWF4aW11bSBOdW1iZXIgb2YgQ2hpcCBTZWxlY3RzICovCisjZGVmaW5lIEdQTUNfQ1NfTlVNCQk4CisKKyNkZWZpbmUgR1BNQ19DT05GSUdfV1AJCTB4MDAwMDAwMDUKKworI2RlZmluZSBHUE1DX0lSUV9GSUZPRVZFTlRFTkFCTEUJMHgwMQorI2RlZmluZSBHUE1DX0lSUV9DT1VOVF9FVkVOVAkJMHgwMgorCisjZGVmaW5lIEdQTUNfQlVSU1RfNAkJCTQJLyogNCB3b3JkIGJ1cnN0ICovCisjZGVmaW5lIEdQTUNfQlVSU1RfOAkJCTgJLyogOCB3b3JkIGJ1cnN0ICovCisjZGVmaW5lIEdQTUNfQlVSU1RfMTYJCQkxNgkvKiAxNiB3b3JkIGJ1cnN0ICovCisjZGVmaW5lIEdQTUNfREVWV0lEVEhfOEJJVAkJMQkvKiA4LWJpdCBkZXZpY2Ugd2lkdGggKi8KKyNkZWZpbmUgR1BNQ19ERVZXSURUSF8xNkJJVAkJMgkvKiAxNi1iaXQgZGV2aWNlIHdpZHRoICovCisjZGVmaW5lIEdQTUNfTVVYX0FBRAkJCTEJLyogQWRkci1BZGRyLURhdGEgbXVsdGlwbGV4ICovCisjZGVmaW5lIEdQTUNfTVVYX0FECQkJMgkvKiBBZGRyLURhdGEgbXVsdGlwbGV4ICovCisKKy8qIGJvb2wgdHlwZSB0aW1lIHNldHRpbmdzICovCitzdHJ1Y3QgZ3BtY19ib29sX3RpbWluZ3MgeworCWJvb2wgY3ljbGUyY3ljbGVkaWZmY3NlbjsKKwlib29sIGN5Y2xlMmN5Y2xlc2FtZWNzZW47CisJYm9vbCB3ZV9leHRyYV9kZWxheTsKKwlib29sIG9lX2V4dHJhX2RlbGF5OworCWJvb2wgYWR2X2V4dHJhX2RlbGF5OworCWJvb2wgY3NfZXh0cmFfZGVsYXk7CisJYm9vbCB0aW1lX3BhcmFfZ3JhbnVsYXJpdHk7Cit9OworCisvKgorICogTm90ZSB0aGF0IGFsbCB2YWx1ZXMgaW4gdGhpcyBzdHJ1Y3QgYXJlIGluIG5hbm9zZWNvbmRzIGV4Y2VwdCBzeW5jX2NsaworICogKHdoaWNoIGlzIGluIHBpY29zZWNvbmRzKSwgd2hpbGUgdGhlIHJlZ2lzdGVyIHZhbHVlcyBhcmUgaW4gZ3BtY19mY2sgY3ljbGVzLgorICovCitzdHJ1Y3QgZ3BtY190aW1pbmdzIHsKKwkvKiBNaW5pbXVtIGNsb2NrIHBlcmlvZCBmb3Igc3luY2hyb25vdXMgbW9kZSAoaW4gcGljb3NlY29uZHMpICovCisJdTMyIHN5bmNfY2xrOworCisJLyogQ2hpcC1zZWxlY3Qgc2lnbmFsIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NTX0NPTkZJRzIgKi8KKwl1MzIgY3Nfb247CQkvKiBBc3NlcnRpb24gdGltZSAqLworCXUzMiBjc19yZF9vZmY7CQkvKiBSZWFkIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKwl1MzIgY3Nfd3Jfb2ZmOwkJLyogV3JpdGUgZGVhc3NlcnRpb24gdGltZSAqLworCisJLyogQURWIHNpZ25hbCB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DT05GSUczICovCisJdTMyIGFkdl9vbjsJCS8qIEFzc2VydGlvbiB0aW1lICovCisJdTMyIGFkdl9yZF9vZmY7CQkvKiBSZWFkIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKwl1MzIgYWR2X3dyX29mZjsJCS8qIFdyaXRlIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKworCS8qIFdFIHNpZ25hbHMgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ09ORklHNCAqLworCXUzMiB3ZV9vbjsJCS8qIFdFIGFzc2VydGlvbiB0aW1lICovCisJdTMyIHdlX29mZjsJCS8qIFdFIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKworCS8qIE9FIHNpZ25hbHMgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ09ORklHNCAqLworCXUzMiBvZV9vbjsJCS8qIE9FIGFzc2VydGlvbiB0aW1lICovCisJdTMyIG9lX29mZjsJCS8qIE9FIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKworCS8qIEFjY2VzcyB0aW1lIGFuZCBjeWNsZSB0aW1lIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NPTkZJRzUgKi8KKwl1MzIgcGFnZV9idXJzdF9hY2Nlc3M7CS8qIE11bHRpcGxlIGFjY2VzcyB3b3JkIGRlbGF5ICovCisJdTMyIGFjY2VzczsJCS8qIFN0YXJ0LWN5Y2xlIHRvIGZpcnN0IGRhdGEgdmFsaWQgZGVsYXkgKi8KKwl1MzIgcmRfY3ljbGU7CQkvKiBUb3RhbCByZWFkIGN5Y2xlIHRpbWUgKi8KKwl1MzIgd3JfY3ljbGU7CQkvKiBUb3RhbCB3cml0ZSBjeWNsZSB0aW1lICovCisKKwl1MzIgYnVzX3R1cm5hcm91bmQ7CisJdTMyIGN5Y2xlMmN5Y2xlX2RlbGF5OworCisJdTMyIHdhaXRfbW9uaXRvcmluZzsKKwl1MzIgY2xrX2FjdGl2YXRpb247CisKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IG9uIE9NQVAzNDMwICovCisJdTMyIHdyX2FjY2VzczsJCS8qIFdSQUNDRVNTVElNRSAqLworCXUzMiB3cl9kYXRhX211eF9idXM7CS8qIFdSREFUQU9OQURNVVhCVVMgKi8KKworCXN0cnVjdCBncG1jX2Jvb2xfdGltaW5ncyBib29sX3RpbWluZ3M7Cit9OworCisvKiBEZXZpY2UgdGltaW5ncyBpbiBwaWNvc2Vjb25kcyAqLworc3RydWN0IGdwbWNfZGV2aWNlX3RpbWluZ3MgeworCXUzMiB0X2NlYXN1OwkvKiBhZGRyZXNzIHNldHVwIHRvIENTIHZhbGlkICovCisJdTMyIHRfYXZkYXN1OwkvKiBhZGRyZXNzIHNldHVwIHRvIEFEViB2YWxpZCAqLworCS8qIFhYWDogdHJ5IHRvIGNvbWJpbmUgdF9hdmRwX3IgJiB0X2F2ZHBfdy4gSXNzdWUgaXMKKwkgKiBvZiB0dXNiIHVzaW5nIHRoZXNlIHRpbWluZ3MgZXZlbiBmb3Igc3luYyB3aGlsc3QKKwkgKiBpZGVhbGx5IGZvciBhZHZfcmQvKHdyKV9vZmYgaXQgc2hvdWxkIGhhdmUgY29uc2lkZXJlZAorCSAqIHRfYXZkaCBpbnN0ZWFkLiBUaGlzIGluZGlyZWN0bHkgbmVjZXNzaXRhdGVzIHIvdworCSAqIHZhcmlhdGlvbnMgb2YgdF9hdmRwIGFzIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgb25lCisJICogc3luYyAmIG90aGVyIGFzeW5jCisJICovCisJdTMyIHRfYXZkcF9yOwkvKiBBRFYgbG93IHRpbWUgKHdoYXQgYWJvdXQgdF9jZXIgPykgKi8KKwl1MzIgdF9hdmRwX3c7CisJdTMyIHRfYWF2ZGg7CS8qIGFkZHJlc3MgaG9sZCB0aW1lICovCisJdTMyIHRfb2Vhc3U7CS8qIGFkZHJlc3Mgc2V0dXAgdG8gT0UgdmFsaWQgKi8KKwl1MzIgdF9hYTsJLyogYWNjZXNzIHRpbWUgZnJvbSBBRFYgYXNzZXJ0aW9uICovCisJdTMyIHRfaWFhOwkvKiBpbml0aWFsIGFjY2VzcyB0aW1lICovCisJdTMyIHRfb2U7CS8qIGFjY2VzcyB0aW1lIGZyb20gT0UgYXNzZXJ0aW9uICovCisJdTMyIHRfY2U7CS8qIGFjY2VzcyB0aW1lIGZyb20gQ1MgYXNlcnRpb24gKi8KKwl1MzIgdF9yZF9jeWNsZTsJLyogcmVhZCBjeWNsZSB0aW1lICovCisJdTMyIHRfY2V6X3I7CS8qIHJlYWQgQ1MgZGVhc3NlcnRpb24gdG8gaGlnaCBaICovCisJdTMyIHRfY2V6X3c7CS8qIHdyaXRlIENTIGRlYXNzZXJ0aW9uIHRvIGhpZ2ggWiAqLworCXUzMiB0X29lejsJLyogT0UgZGVhc3NlcnRpb24gdG8gaGlnaCBaICovCisJdTMyIHRfd2Vhc3U7CS8qIGFkZHJlc3Mgc2V0dXAgdG8gV0UgdmFsaWQgKi8KKwl1MzIgdF93cGw7CS8qIHdyaXRlIGFzc2VydGlvbiB0aW1lICovCisJdTMyIHRfd3BoOwkvKiB3cml0ZSBkZWFzc2VydGlvbiB0aW1lICovCisJdTMyIHRfd3JfY3ljbGU7CS8qIHdyaXRlIGN5Y2xlIHRpbWUgKi8KKworCXUzMiBjbGs7CisJdTMyIHRfYmFjYzsJLyogYnVyc3QgYWNjZXNzIHZhbGlkIGNsb2NrIHRvIG91dHB1dCBkZWxheSAqLworCXUzMiB0X2NlczsJLyogQ1Mgc2V0dXAgdGltZSB0byBjbGsgKi8KKwl1MzIgdF9hdmRzOwkvKiBBRFYgc2V0dXAgdGltZSB0byBjbGsgKi8KKwl1MzIgdF9hdmRoOwkvKiBBRFYgaG9sZCB0aW1lIGZyb20gY2xrICovCisJdTMyIHRfYWNoOwkvKiBhZGRyZXNzIGhvbGQgdGltZSBmcm9tIGNsayAqLworCXUzMiB0X3JkeW87CS8qIGNsayB0byByZWFkeSB2YWxpZCAqLworCisJdTMyIHRfY2VfcmR5ejsJLyogWFhYOiBkZXNjcmlwdGlvbiA/LCBvciB1c2UgdF9jZXogaW5zdGVhZCAqLworCXUzMiB0X2NlX2F2ZDsJLyogQ1Mgb24gdG8gQURWIG9uIGRlbGF5ICovCisKKwkvKiBYWFg6IGNoZWNrIHRoZSBwb3NzaWJpbGl0eSBvZiBjb21iaW5pbmcKKwkgKiBjeWNfYWF2aGRfb2UgJiBjeWNfYWF2ZGhfd2UKKwkgKi8KKwl1OCBjeWNfYWF2ZGhfb2U7LyogcmVhZCBhZGRyZXNzIGhvbGQgdGltZSBpbiBjeWNsZXMgKi8KKwl1OCBjeWNfYWF2ZGhfd2U7Lyogd3JpdGUgYWRkcmVzcyBob2xkIHRpbWUgaW4gY3ljbGVzICovCisJdTggY3ljX29lOwkvKiBhY2Nlc3MgdGltZSBmcm9tIE9FIGFzc2VydGlvbiBpbiBjeWNsZXMgKi8KKwl1OCBjeWNfd3BsOwkvKiB3cml0ZSBkZWFzc2VydGlvbiB0aW1lIGluIGN5Y2xlcyAqLworCXUzMiBjeWNfaWFhOwkvKiBpbml0aWFsIGFjY2VzcyB0aW1lIGluIGN5Y2xlcyAqLworCisJLyogZXh0cmEgZGVsYXlzICovCisJYm9vbCBjZV94ZGVsYXk7CisJYm9vbCBhdmRfeGRlbGF5OworCWJvb2wgb2VfeGRlbGF5OworCWJvb2wgd2VfeGRlbGF5OworfTsKKworc3RydWN0IGdwbWNfc2V0dGluZ3MgeworCWJvb2wgYnVyc3Rfd3JhcDsJLyogZW5hYmxlcyB3cmFwIGJ1cnN0aW5nICovCisJYm9vbCBidXJzdF9yZWFkOwkvKiBlbmFibGVzIHJlYWQgcGFnZS9idXJzdCBtb2RlICovCisJYm9vbCBidXJzdF93cml0ZTsJLyogZW5hYmxlcyB3cml0ZSBwYWdlL2J1cnN0IG1vZGUgKi8KKwlib29sIGRldmljZV9uYW5kOwkvKiBkZXZpY2UgaXMgTkFORCAqLworCWJvb2wgc3luY19yZWFkOwkJLyogZW5hYmxlcyBzeW5jaHJvbm91cyByZWFkcyAqLworCWJvb2wgc3luY193cml0ZTsJLyogZW5hYmxlcyBzeW5jaHJvbm91cyB3cml0ZXMgKi8KKwlib29sIHdhaXRfb25fcmVhZDsJLyogbW9uaXRvciB3YWl0IG9uIHJlYWRzICovCisJYm9vbCB3YWl0X29uX3dyaXRlOwkvKiBtb25pdG9yIHdhaXQgb24gd3JpdGVzICovCisJdTMyIGJ1cnN0X2xlbjsJCS8qIHBhZ2UvYnVyc3QgbGVuZ3RoICovCisJdTMyIGRldmljZV93aWR0aDsJLyogZGV2aWNlIGJ1cyB3aWR0aCAoOCBvciAxNiBiaXQpICovCisJdTMyIG11eF9hZGRfZGF0YTsJLyogbXVsdGlwbGV4IGFkZHJlc3MgJiBkYXRhICovCisJdTMyIHdhaXRfcGluOwkJLyogd2FpdC1waW4gdG8gYmUgdXNlZCAqLworfTsKKworZXh0ZXJuIGludCBncG1jX2NhbGNfdGltaW5ncyhzdHJ1Y3QgZ3BtY190aW1pbmdzICpncG1jX3QsCisJCQkgICAgIHN0cnVjdCBncG1jX3NldHRpbmdzICpncG1jX3MsCisJCQkgICAgIHN0cnVjdCBncG1jX2RldmljZV90aW1pbmdzICpkZXZfdCk7CisKK3N0cnVjdCBncG1jX25hbmRfcmVnczsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKKworZXh0ZXJuIHZvaWQgZ3BtY191cGRhdGVfbmFuZF9yZWcoc3RydWN0IGdwbWNfbmFuZF9yZWdzICpyZWcsIGludCBjcyk7CitleHRlcm4gaW50IGdwbWNfZ2V0X2NsaWVudF9pcnEodW5zaWduZWQgaXJxX2NvbmZpZyk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ3BtY190aWNrc190b19ucyh1bnNpZ25lZCBpbnQgdGlja3MpOworCitleHRlcm4gdm9pZCBncG1jX2NzX3dyaXRlX3JlZyhpbnQgY3MsIGludCBpZHgsIHUzMiB2YWwpOworZXh0ZXJuIGludCBncG1jX2NhbGNfZGl2aWRlcih1bnNpZ25lZCBpbnQgc3luY19jbGspOworZXh0ZXJuIGludCBncG1jX2NzX3NldF90aW1pbmdzKGludCBjcywgY29uc3Qgc3RydWN0IGdwbWNfdGltaW5ncyAqdCk7CitleHRlcm4gaW50IGdwbWNfY3NfcHJvZ3JhbV9zZXR0aW5ncyhpbnQgY3MsIHN0cnVjdCBncG1jX3NldHRpbmdzICpwKTsKK2V4dGVybiBpbnQgZ3BtY19jc19yZXF1ZXN0KGludCBjcywgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICpiYXNlKTsKK2V4dGVybiB2b2lkIGdwbWNfY3NfZnJlZShpbnQgY3MpOworZXh0ZXJuIGludCBncG1jX2NvbmZpZ3VyZShpbnQgY21kLCBpbnQgd3ZhbCk7CitleHRlcm4gdm9pZCBncG1jX3JlYWRfc2V0dGluZ3NfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkgIHN0cnVjdCBncG1jX3NldHRpbmdzICpwKTsKKworZXh0ZXJuIHZvaWQgb21hcDNfZ3BtY19zYXZlX2NvbnRleHQodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwM19ncG1jX3Jlc3RvcmVfY29udGV4dCh2b2lkKTsKKworc3RydWN0IGdwbWNfdGltaW5nczsKK3N0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YTsKK3N0cnVjdCBvbWFwX29uZW5hbmRfcGxhdGZvcm1fZGF0YTsKKworI2lmIElTX0VOQUJMRUQoQ09ORklHX01URF9OQU5EX09NQVAyKQorZXh0ZXJuIGludCBncG1jX25hbmRfaW5pdChzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmQsCisJCQkgIHN0cnVjdCBncG1jX3RpbWluZ3MgKmdwbWNfdCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZ3BtY19uYW5kX2luaXQoc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhICpkLAorCQkJCSBzdHJ1Y3QgZ3BtY190aW1pbmdzICpncG1jX3QpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmIElTX0VOQUJMRUQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKQorZXh0ZXJuIHZvaWQgZ3BtY19vbmVuYW5kX2luaXQoc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpkKTsKKyNlbHNlCisjZGVmaW5lIGJvYXJkX29uZW5hbmRfZGF0YQlOVUxMCitzdGF0aWMgaW5saW5lIHZvaWQgZ3BtY19vbmVuYW5kX2luaXQoc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpkKQoreworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjODMxZjEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLSNpZm5kZWYgX19MSU5VWF9QQUdFX0NHUk9VUF9ICi0jZGVmaW5lIF9fTElOVVhfUEFHRV9DR1JPVVBfSAotCi1lbnVtIHsKLQkvKiBmbGFncyBmb3IgbWVtX2Nncm91cCAqLwotCVBDR19VU0VEID0gMHgwMSwJLyogVGhpcyBwYWdlIGlzIGNoYXJnZWQgdG8gYSBtZW1jZyAqLwotCVBDR19NRU0gPSAweDAyLAkJLyogVGhpcyBwYWdlIGhvbGRzIGEgbWVtb3J5IGNoYXJnZSAqLwotCVBDR19NRU1TVyA9IDB4MDQsCS8qIFRoaXMgcGFnZSBob2xkcyBhIG1lbW9yeStzd2FwIGNoYXJnZSAqLwotfTsKLQotc3RydWN0IHBnbGlzdF9kYXRhOwotCi0jaWZkZWYgQ09ORklHX01FTUNHCi1zdHJ1Y3QgbWVtX2Nncm91cDsKLQotLyoKLSAqIFBhZ2UgQ2dyb3VwIGNhbiBiZSBjb25zaWRlcmVkIGFzIGFuIGV4dGVuZGVkIG1lbV9tYXAuCi0gKiBBIHBhZ2VfY2dyb3VwIHBhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIGV2ZXJ5IHBhZ2UgZGVzY3JpcHRvci4gVGhlCi0gKiBwYWdlX2Nncm91cCBoZWxwcyB1cyBpZGVudGlmeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2dyb3VwCi0gKiBBbGwgcGFnZSBjZ3JvdXBzIGFyZSBhbGxvY2F0ZWQgYXQgYm9vdCBvciBtZW1vcnkgaG90cGx1ZyBldmVudCwKLSAqIHRoZW4gdGhlIHBhZ2UgY2dyb3VwIGZvciBwZm4gYWx3YXlzIGV4aXN0cy4KLSAqLwotc3RydWN0IHBhZ2VfY2dyb3VwIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwOwotfTsKLQotZXh0ZXJuIHZvaWQgcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTsKLQotI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2Nncm91cF9pbml0X2ZsYXRtZW0odm9pZCkKLXsKLX0KLWV4dGVybiB2b2lkIHBhZ2VfY2dyb3VwX2luaXQodm9pZCk7Ci0jZWxzZQotZXh0ZXJuIHZvaWQgcGFnZV9jZ3JvdXBfaW5pdF9mbGF0bWVtKHZvaWQpOwotc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY2dyb3VwX2luaXQodm9pZCkKLXsKLX0KLSNlbmRpZgotCi1zdHJ1Y3QgcGFnZV9jZ3JvdXAgKmxvb2t1cF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IFBhZ2VDZ3JvdXBVc2VkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCi17Ci0JcmV0dXJuICEhKHBjLT5mbGFncyAmIFBDR19VU0VEKTsKLX0KLSNlbHNlIC8qICFDT05GSUdfTUVNQ0cgKi8KLXN0cnVjdCBwYWdlX2Nncm91cDsKLQotc3RhdGljIGlubGluZSB2b2lkIHBnZGF0X3BhZ2VfY2dyb3VwX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKLXsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmxvb2t1cF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY2dyb3VwX2luaXQodm9pZCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY2dyb3VwX2luaXRfZmxhdG1lbSh2b2lkKQotewotfQotI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqLwotCi0jaW5jbHVkZSA8bGludXgvc3dhcC5oPgotCi0jaWZkZWYgQ09ORklHX01FTUNHX1NXQVAKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9jbXB4Y2hnKHN3cF9lbnRyeV90IGVudCwKLQkJCQkJdW5zaWduZWQgc2hvcnQgb2xkLCB1bnNpZ25lZCBzaG9ydCBuZXcpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkKTsKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KTsKLWV4dGVybiBpbnQgc3dhcF9jZ3JvdXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG1heF9wYWdlcyk7Ci1leHRlcm4gdm9pZCBzd2FwX2Nncm91cF9zd2Fwb2ZmKGludCB0eXBlKTsKLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUKLXVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lCi11bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotc3dhcF9jZ3JvdXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG1heF9wYWdlcykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2dyb3VwX3N3YXBvZmYoaW50IHR5cGUpCi17Ci0JcmV0dXJuOwotfQotCi0jZW5kaWYgLyogQ09ORklHX01FTUNHX1NXQVAgKi8KLQotI2VuZGlmIC8qIF9fTElOVVhfUEFHRV9DR1JPVVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1NDIxNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKQEAgLTAsMCArMSw1MSBAQAorI2lmbmRlZiBfTElOVVhfUEFHRV9DT1VOVEVSX0gKKyNkZWZpbmUgX0xJTlVYX1BBR0VfQ09VTlRFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitzdHJ1Y3QgcGFnZV9jb3VudGVyIHsKKwlhdG9taWNfbG9uZ190IGNvdW50OworCXVuc2lnbmVkIGxvbmcgbGltaXQ7CisJc3RydWN0IHBhZ2VfY291bnRlciAqcGFyZW50OworCisJLyogbGVnYWN5ICovCisJdW5zaWduZWQgbG9uZyB3YXRlcm1hcms7CisJdW5zaWduZWQgbG9uZyBmYWlsY250OworfTsKKworI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKKyNkZWZpbmUgUEFHRV9DT1VOVEVSX01BWCBMT05HX01BWAorI2Vsc2UKKyNkZWZpbmUgUEFHRV9DT1VOVEVSX01BWCAoTE9OR19NQVggLyBQQUdFX1NJWkUpCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY291bnRlcl9pbml0KHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsCisJCQkJICAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYXJlbnQpCit7CisJYXRvbWljX2xvbmdfc2V0KCZjb3VudGVyLT5jb3VudCwgMCk7CisJY291bnRlci0+bGltaXQgPSBQQUdFX0NPVU5URVJfTUFYOworCWNvdW50ZXItPnBhcmVudCA9IHBhcmVudDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpCit7CisJcmV0dXJuIGF0b21pY19sb25nX3JlYWQoJmNvdW50ZXItPmNvdW50KTsKK30KKwordm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwordm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOworaW50IHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsCisJCQkgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICoqZmFpbCk7Cit2b2lkIHBhZ2VfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKK2ludCBwYWdlX2NvdW50ZXJfbGltaXQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBsaW1pdCk7CitpbnQgcGFnZV9jb3VudGVyX21lbXBhcnNlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqbnJfcGFnZXMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9jb3VudGVyX3Jlc2V0X3dhdGVybWFyayhzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQoreworCWNvdW50ZXItPndhdGVybWFyayA9IHBhZ2VfY291bnRlcl9yZWFkKGNvdW50ZXIpOworfQorCisjZW5kaWYgLyogX0xJTlVYX1BBR0VfQ09VTlRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCA0YzhhYzVmLi5hNTIzY2VlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCXN0cnVjdCByZXNvdXJjZSBidXNuX3JlczsJLyogYnVzIG51bWJlcnMgcm91dGVkIHRvIHRoaXMgYnVzICovCiAKIAlzdHJ1Y3QgcGNpX29wcwkqb3BzOwkJLyogY29uZmlndXJhdGlvbiBhY2Nlc3MgZnVuY3Rpb25zICovCi0Jc3RydWN0IG1zaV9jaGlwCSptc2k7CQkvKiBNU0kgY29udHJvbGxlciAqLworCXN0cnVjdCBtc2lfY29udHJvbGxlciAqbXNpOwkvKiBNU0kgY29udHJvbGxlciAqLwogCXZvaWQJCSpzeXNkYXRhOwkvKiBob29rIGZvciBzeXMtc3BlY2lmaWMgZXh0ZW5zaW9uICovCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jZGlyOwkvKiBkaXJlY3RvcnkgZW50cnkgaW4gL3Byb2MvYnVzL3BjaSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9ob3RwbHVnLmgKaW5kZXggMjcwNmVlOS4uOGM3ODk1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaG90cGx1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2hvdHBsdWcuaApAQCAtMTA5LDcgKzEwOSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAkJc2xvdF9saXN0OwogCXN0cnVjdCBwY2lfc2xvdAkJCSpwY2lfc2xvdDsKIH07Ci0jZGVmaW5lIHRvX2hvdHBsdWdfc2xvdChuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IGhvdHBsdWdfc2xvdCwga29iaikKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpob3RwbHVnX3Nsb3RfbmFtZShjb25zdCBzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCAxZmE5OWEzLi45N2ZiOWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtNTIyLDYgKzUyMiw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NMTBIX0YzCTB4MTQwMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTMwSF9OQl9GMyAweDE0MWQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX00zMEhfTkJfRjQgMHgxNDFlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9NNjBIX05CX0YzIDB4MTU3MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTTYwSF9OQl9GNCAweDE1NzQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfMTVIX05CX0YwCTB4MTYwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF8xNUhfTkJfRjEJMHgxNjAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9GMgkweDE2MDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LXJlZmNvdW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS1yZWZjb3VudC5oCmluZGV4IDUxY2U2MGMuLjUzMGIyNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LXJlZmNvdW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHUtcmVmY291bnQuaApAQCAtMTQ3LDYgKzE0NywyOSBAQAogfQogCiAvKioKKyAqIHBlcmNwdV9yZWZfZ2V0X21hbnkgLSBpbmNyZW1lbnQgYSBwZXJjcHUgcmVmY291bnQKKyAqIEByZWY6IHBlcmNwdV9yZWYgdG8gZ2V0CisgKiBAbnI6IG51bWJlciBvZiByZWZlcmVuY2VzIHRvIGdldAorICoKKyAqIEFuYWxvZ291cyB0byBhdG9taWNfbG9uZ19hZGQoKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gY2FsbCBhcyBsb25nIGFzIEByZWYgaXMgYmV0d2VlbiBpbml0IGFuZCBleGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X3JlZl9nZXRfbWFueShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmLCB1bnNpZ25lZCBsb25nIG5yKQoreworCXVuc2lnbmVkIGxvbmcgX19wZXJjcHUgKnBlcmNwdV9jb3VudDsKKworCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKKworCWlmIChfX3JlZl9pc19wZXJjcHUocmVmLCAmcGVyY3B1X2NvdW50KSkKKwkJdGhpc19jcHVfYWRkKCpwZXJjcHVfY291bnQsIG5yKTsKKwllbHNlCisJCWF0b21pY19sb25nX2FkZChuciwgJnJlZi0+Y291bnQpOworCisJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7Cit9CisKKy8qKgogICogcGVyY3B1X3JlZl9nZXQgLSBpbmNyZW1lbnQgYSBwZXJjcHUgcmVmY291bnQKICAqIEByZWY6IHBlcmNwdV9yZWYgdG8gZ2V0CiAgKgpAQCAtMTU2LDE2ICsxNzksNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X3JlZl9nZXQoc3RydWN0IHBlcmNwdV9yZWYgKnJlZikKIHsKLQl1bnNpZ25lZCBsb25nIF9fcGVyY3B1ICpwZXJjcHVfY291bnQ7Ci0KLQlyY3VfcmVhZF9sb2NrX3NjaGVkKCk7Ci0KLQlpZiAoX19yZWZfaXNfcGVyY3B1KHJlZiwgJnBlcmNwdV9jb3VudCkpCi0JCXRoaXNfY3B1X2luYygqcGVyY3B1X2NvdW50KTsKLQllbHNlCi0JCWF0b21pY19sb25nX2luYygmcmVmLT5jb3VudCk7Ci0KLQlyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTsKKwlwZXJjcHVfcmVmX2dldF9tYW55KHJlZiwgMSk7CiB9CiAKIC8qKgpAQCAtMjMxLDYgKzI0NSwzMCBAQAogfQogCiAvKioKKyAqIHBlcmNwdV9yZWZfcHV0X21hbnkgLSBkZWNyZW1lbnQgYSBwZXJjcHUgcmVmY291bnQKKyAqIEByZWY6IHBlcmNwdV9yZWYgdG8gcHV0CisgKiBAbnI6IG51bWJlciBvZiByZWZlcmVuY2VzIHRvIHB1dAorICoKKyAqIERlY3JlbWVudCB0aGUgcmVmY291bnQsIGFuZCBpZiAwLCBjYWxsIHRoZSByZWxlYXNlIGZ1bmN0aW9uICh3aGljaCB3YXMgcGFzc2VkCisgKiB0byBwZXJjcHVfcmVmX2luaXQoKSkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gY2FsbCBhcyBsb25nIGFzIEByZWYgaXMgYmV0d2VlbiBpbml0IGFuZCBleGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X3JlZl9wdXRfbWFueShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmLCB1bnNpZ25lZCBsb25nIG5yKQoreworCXVuc2lnbmVkIGxvbmcgX19wZXJjcHUgKnBlcmNwdV9jb3VudDsKKworCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKKworCWlmIChfX3JlZl9pc19wZXJjcHUocmVmLCAmcGVyY3B1X2NvdW50KSkKKwkJdGhpc19jcHVfc3ViKCpwZXJjcHVfY291bnQsIG5yKTsKKwllbHNlIGlmICh1bmxpa2VseShhdG9taWNfbG9uZ19zdWJfYW5kX3Rlc3QobnIsICZyZWYtPmNvdW50KSkpCisJCXJlZi0+cmVsZWFzZShyZWYpOworCisJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7Cit9CisKKy8qKgogICogcGVyY3B1X3JlZl9wdXQgLSBkZWNyZW1lbnQgYSBwZXJjcHUgcmVmY291bnQKICAqIEByZWY6IHBlcmNwdV9yZWYgdG8gcHV0CiAgKgpAQCAtMjQxLDE2ICsyNzksNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X3JlZl9wdXQoc3RydWN0IHBlcmNwdV9yZWYgKnJlZikKIHsKLQl1bnNpZ25lZCBsb25nIF9fcGVyY3B1ICpwZXJjcHVfY291bnQ7Ci0KLQlyY3VfcmVhZF9sb2NrX3NjaGVkKCk7Ci0KLQlpZiAoX19yZWZfaXNfcGVyY3B1KHJlZiwgJnBlcmNwdV9jb3VudCkpCi0JCXRoaXNfY3B1X2RlYygqcGVyY3B1X2NvdW50KTsKLQllbHNlIGlmICh1bmxpa2VseShhdG9taWNfbG9uZ19kZWNfYW5kX3Rlc3QoJnJlZi0+Y291bnQpKSkKLQkJcmVmLT5yZWxlYXNlKHJlZik7Ci0KLQlyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTsKKwlwZXJjcHVfcmVmX3B1dF9tYW55KHJlZiwgMSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKaW5kZXggYTNhYTYzZS4uY2FlYmYyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCkBAIC0xMzQsNCArMTM1LDcgQEAKIAkodHlwZW9mKHR5cGUpIF9fcGVyY3B1ICopX19hbGxvY19wZXJjcHUoc2l6ZW9mKHR5cGUpLAkJXAogCQkJCQkJX19hbGlnbm9mX18odHlwZSkpCiAKKy8qIFRvIGF2b2lkIGluY2x1ZGUgaGVsbCwgYXMgcHJpbnRrIGNhbiBub3QgZGVjbGFyZSB0aGlzLCB3ZSBkZWNsYXJlIGl0IGhlcmUgKi8KK0RFQ0xBUkVfUEVSX0NQVShwcmludGtfZnVuY190LCBwcmludGtfZnVuYyk7CisKICNlbmRpZiAvKiBfX0xJTlVYX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDg5M2EwZDAuLjQ4NmU4NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC03OSw3ICs3OSw3IEBACiAJc3RydWN0IHBlcmZfYnJhbmNoX2VudHJ5CWVudHJpZXNbMF07CiB9OwogCi1zdHJ1Y3QgcGVyZl9yZWdzX3VzZXIgeworc3RydWN0IHBlcmZfcmVncyB7CiAJX191NjQJCWFiaTsKIAlzdHJ1Y3QgcHRfcmVncwkqcmVnczsKIH07CkBAIC01ODAsMzQgKzU4MCw0MCBAQAogCiAKIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIHsKLQl1NjQJCQkJdHlwZTsKKwkvKgorCSAqIEZpZWxkcyBzZXQgYnkgcGVyZl9zYW1wbGVfZGF0YV9pbml0KCksIGdyb3VwIHNvIGFzIHRvCisJICogbWluaW1pemUgdGhlIGNhY2hlbGluZXMgdG91Y2hlZC4KKwkgKi8KKwl1NjQJCQkJYWRkcjsKKwlzdHJ1Y3QgcGVyZl9yYXdfcmVjb3JkCQkqcmF3OworCXN0cnVjdCBwZXJmX2JyYW5jaF9zdGFjawkqYnJfc3RhY2s7CisJdTY0CQkJCXBlcmlvZDsKKwl1NjQJCQkJd2VpZ2h0OworCXU2NAkJCQl0eG47CisJdW5pb24gIHBlcmZfbWVtX2RhdGFfc3JjCWRhdGFfc3JjOwogCisJLyoKKwkgKiBUaGUgb3RoZXIgZmllbGRzLCBvcHRpb25hbGx5IHtzZXQsdXNlZH0gYnkKKwkgKiBwZXJmX3twcmVwYXJlLG91dHB1dH1fc2FtcGxlKCkuCisJICovCisJdTY0CQkJCXR5cGU7CiAJdTY0CQkJCWlwOwogCXN0cnVjdCB7CiAJCXUzMglwaWQ7CiAJCXUzMgl0aWQ7CiAJfQkJCQl0aWRfZW50cnk7CiAJdTY0CQkJCXRpbWU7Ci0JdTY0CQkJCWFkZHI7CiAJdTY0CQkJCWlkOwogCXU2NAkJCQlzdHJlYW1faWQ7CiAJc3RydWN0IHsKIAkJdTMyCWNwdTsKIAkJdTMyCXJlc2VydmVkOwogCX0JCQkJY3B1X2VudHJ5OwotCXU2NAkJCQlwZXJpb2Q7Ci0JdW5pb24gIHBlcmZfbWVtX2RhdGFfc3JjCWRhdGFfc3JjOwogCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeQkqY2FsbGNoYWluOwotCXN0cnVjdCBwZXJmX3Jhd19yZWNvcmQJCSpyYXc7Ci0Jc3RydWN0IHBlcmZfYnJhbmNoX3N0YWNrCSpicl9zdGFjazsKLQlzdHJ1Y3QgcGVyZl9yZWdzX3VzZXIJCXJlZ3NfdXNlcjsKKwlzdHJ1Y3QgcGVyZl9yZWdzCQlyZWdzX3VzZXI7CisJc3RydWN0IHBlcmZfcmVncwkJcmVnc19pbnRyOwogCXU2NAkJCQlzdGFja191c2VyX3NpemU7Ci0JdTY0CQkJCXdlaWdodDsKLQkvKgotCSAqIFRyYW5zYWN0aW9uIGZsYWdzIGZvciBhYm9ydCBldmVudHM6Ci0JICovCi0JdTY0CQkJCXR4bjsKLX07Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyogZGVmYXVsdCB2YWx1ZSBmb3IgZGF0YSBzb3VyY2UgKi8KICNkZWZpbmUgUEVSRl9NRU1fTkEgKFBFUkZfTUVNX1MoT1AsIE5BKSAgIHxcCkBAIC02MjQsOSArNjMwLDYgQEAKIAlkYXRhLT5yYXcgID0gTlVMTDsKIAlkYXRhLT5icl9zdGFjayA9IE5VTEw7CiAJZGF0YS0+cGVyaW9kID0gcGVyaW9kOwotCWRhdGEtPnJlZ3NfdXNlci5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FOwotCWRhdGEtPnJlZ3NfdXNlci5yZWdzID0gTlVMTDsKLQlkYXRhLT5zdGFja191c2VyX3NpemUgPSAwOwogCWRhdGEtPndlaWdodCA9IDA7CiAJZGF0YS0+ZGF0YV9zcmMudmFsID0gUEVSRl9NRU1fTkE7CiAJZGF0YS0+dHhuID0gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9oc21tYy1vbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YmJjZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBNTUMgZGVmaW5pdGlvbnMgZm9yIE9NQVAyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogc3RydWN0IG9tYXBfaHNtbWNfZGV2X2F0dHIuZmxhZ3MgcG9zc2liaWxpdGllcworICoKKyAqIE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xUOiBTb21lIEhTTU1DIGNvbnRyb2xsZXIgaW5zdGFuY2VzIGNhbgorICogICAgb3BlcmF0ZSB3aXRoIGVpdGhlciAxLjhWZGMgb3IgMy4wVmRjIGNhcmQgdm9sdGFnZXM7IHRoaXMgZmxhZworICogICAgc2hvdWxkIGJlIHNldCBpZiB0aGlzIGlzIHRoZSBjYXNlLiAgU2VlIGZvciBleGFtcGxlIFNlY3Rpb24gMjIuNS4zCisgKiAgICAiTU1DL1NEL1NESU8xIEJ1cyBWb2x0YWdlIFNlbGVjdGlvbiIgb2YgdGhlIE9NQVAzNHh4IE11bHRpbWVkaWEKKyAqICAgIERldmljZSBTaWxpY29uIFJldmlzaW9uIDMuMS54IFJldmlzaW9uIFpSIChKdWx5IDIwMTEpIChTV1BVMjIzUikuCisgKgorICogT01BUF9IU01NQ19CUk9LRU5fTVVMVElCTE9DS19SRUFEOiBNdWx0aXBsZS1ibG9jayByZWFkIHRyYW5zZmVycworICogICAgZG9uJ3Qgd29yayBjb3JyZWN0bHkgb24gc29tZSBNTUMgY29udHJvbGxlciBpbnN0YW5jZXMgb24gc29tZQorICogICAgT01BUDMgU29DczsgdGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgaWYgdGhpcyBpcyB0aGUgY2FzZS4gIFNlZQorICogICAgZm9yIGV4YW1wbGUgQWR2aXNvcnkgMi4xLjEuMTI4ICJNTUM6IE11bHRpcGxlIEJsb2NrIFJlYWQKKyAqICAgIE9wZXJhdGlvbiBJc3N1ZSIgaW4gX09NQVAzNTMwLzM1MjUvMzUxNS8zNTAzIFNpbGljb24gRXJyYXRhXworICogICAgUmV2aXNpb24gRiAoT2N0b2JlciAyMDEwKSAoU1BSWjI3OEYpLgorICovCisjZGVmaW5lIE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xUCQlCSVQoMCkKKyNkZWZpbmUgT01BUF9IU01NQ19CUk9LRU5fTVVMVElCTE9DS19SRUFECUJJVCgxKQorI2RlZmluZSBPTUFQX0hTTU1DX1NXQUtFVVBfTUlTU0lORwkJQklUKDIpCisKK3N0cnVjdCBvbWFwX2hzbW1jX2Rldl9hdHRyIHsKKwl1OCBmbGFnczsKK307CisKK3N0cnVjdCBtbWNfY2FyZDsKKworc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSB7CisJLyogYmFjay1saW5rIHRvIGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCS8qIHNldCBpZiB5b3VyIGJvYXJkIGhhcyBjb21wb25lbnRzIG9yIHdpcmluZyB0aGF0IGxpbWl0cyB0aGUKKwkgKiBtYXhpbXVtIGZyZXF1ZW5jeSBvbiB0aGUgTU1DIGJ1cyAqLworCXVuc2lnbmVkIGludCBtYXhfZnJlcTsKKworCS8qIEludGVncmF0aW5nIGF0dHJpYnV0ZXMgZnJvbSB0aGUgb21hcF9od21vZCBsYXllciAqLworCXU4IGNvbnRyb2xsZXJfZmxhZ3M7CisKKwkvKiBSZWdpc3RlciBvZmZzZXQgZGV2aWF0aW9uICovCisJdTE2IHJlZ19vZmZzZXQ7CisKKwkvKgorCSAqIDQvOCB3aXJlcyBhbmQgYW55IGFkZGl0aW9uYWwgaG9zdCBjYXBhYmlsaXRpZXMKKwkgKiBuZWVkIHRvIE9SJ2QgYWxsIGNhcGFiaWxpdGllcyAocmVmLiBsaW51eC9tbWMvaG9zdC5oKQorCSAqLworCXUzMiBjYXBzOwkvKiBVc2VkIGZvciB0aGUgTU1DIGRyaXZlciBvbiAyNDMwIGFuZCBsYXRlciAqLworCXUzMiBwbV9jYXBzOwkvKiBQTSBjYXBhYmlsaXRpZXMgb2YgdGhlIG1tYyAqLworCisJLyogc3dpdGNoIHBpbiBjYW4gYmUgZm9yIGNhcmQgZGV0ZWN0IChkZWZhdWx0KSBvciBjYXJkIGNvdmVyICovCisJdW5zaWduZWQgY292ZXI6MTsKKworCS8qIHVzZSB0aGUgaW50ZXJuYWwgY2xvY2sgKi8KKwl1bnNpZ25lZCBpbnRlcm5hbF9jbG9jazoxOworCisJLyogbm9ucmVtb3ZhYmxlIGUuZy4gZU1NQyAqLworCXVuc2lnbmVkIG5vbnJlbW92YWJsZToxOworCisJLyogZU1NQyBkb2VzIG5vdCBoYW5kbGUgcG93ZXIgb2ZmIHdoZW4gbm90IGluIHNsZWVwIHN0YXRlICovCisJdW5zaWduZWQgbm9fcmVndWxhdG9yX29mZl9pbml0OjE7CisKKwkvKiB3ZSBjYW4gcHV0IHRoZSBmZWF0dXJlcyBhYm92ZSBpbnRvIHRoaXMgdmFyaWFibGUgKi8KKyNkZWZpbmUgSFNNTUNfSEFTX1BCSUFTCQkoMSA8PCAwKQorI2RlZmluZSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVAkoMSA8PCAxKQorI2RlZmluZSBIU01NQ19IQVNfSFNQRV9TVVBQT1JUCSgxIDw8IDIpCisJdW5zaWduZWQgZmVhdHVyZXM7CisKKwlpbnQgc3dpdGNoX3BpbjsJCQkvKiBncGlvIChjYXJkIGRldGVjdCkgKi8KKwlpbnQgZ3Bpb193cDsJCQkvKiBncGlvICh3cml0ZSBwcm90ZWN0KSAqLworCisJaW50ICgqc2V0X3Bvd2VyKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCk7CisJdm9pZCAoKnJlbXV4KShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbik7CisJLyogQ2FsbCBiYWNrIGJlZm9yZSBlbmFibGluZyAvIGRpc2FibGluZyByZWd1bGF0b3JzICovCisJdm9pZCAoKmJlZm9yZV9zZXRfcmVnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBwb3dlcl9vbiwgaW50IHZkZCk7CisJLyogQ2FsbCBiYWNrIGFmdGVyIGVuYWJsaW5nIC8gZGlzYWJsaW5nIHJlZ3VsYXRvcnMgKi8KKwl2b2lkICgqYWZ0ZXJfc2V0X3JlZykoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcG93ZXJfb24sIGludCB2ZGQpOworCS8qIGlmIHdlIGhhdmUgc3BlY2lhbCBjYXJkLCBpbml0IGl0IHVzaW5nIHRoaXMgY2FsbGJhY2sgKi8KKwl2b2lkICgqaW5pdF9jYXJkKShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOworCisJY29uc3QgY2hhciAqbmFtZTsKKwl1MzIgb2NyX21hc2s7Cit9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1hdG1lbC1tY2kuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9tbWMtYXRtZWwtbWNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5YTJkNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9tbWMtYXRtZWwtbWNpLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfX01NQ19BVE1FTF9NQ0lfSAorI2RlZmluZSBfX01NQ19BVE1FTF9NQ0lfSAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtYXRtZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1kdy5oPgorCisvKioKKyAqIHN0cnVjdCBtY2lfZG1hX2RhdGEgLSBETUEgZGF0YSBmb3IgTUNJIGludGVyZmFjZQorICovCitzdHJ1Y3QgbWNpX2RtYV9kYXRhIHsKKyNpZmRlZiBDT05GSUdfQVJNCisJc3RydWN0IGF0X2RtYV9zbGF2ZSAgICAgc2RhdGE7CisjZWxzZQorCXN0cnVjdCBkd19kbWFfc2xhdmUgICAgIHNkYXRhOworI2VuZGlmCit9OworCisvKiBhY2Nlc3NvciBtYWNyb3MgKi8KKyNkZWZpbmUJc2xhdmVfZGF0YV9wdHIocykJKCYocyktPnNkYXRhKQorI2RlZmluZSBmaW5kX3NsYXZlX2RldihzKQkoKHMpLT5zZGF0YS5kbWFfZGV2KQorCisjZW5kaWYgLyogX19NTUNfQVRNRUxfTUNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9tbWMtb21hcC5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmgKaW5kZXggNTFlNzBjZi4uNWMxODhmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmgKQEAgLTEwLDMyICsxMCw4IEBACiAKICNkZWZpbmUgT01BUF9NTUNfTUFYX1NMT1RTCTIKIAotLyoKLSAqIHN0cnVjdCBvbWFwX21tY19kZXZfYXR0ci5mbGFncyBwb3NzaWJpbGl0aWVzCi0gKgotICogT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQ6IFNvbWUgSFNNTUMgY29udHJvbGxlciBpbnN0YW5jZXMgY2FuCi0gKiAgICBvcGVyYXRlIHdpdGggZWl0aGVyIDEuOFZkYyBvciAzLjBWZGMgY2FyZCB2b2x0YWdlczsgdGhpcyBmbGFnCi0gKiAgICBzaG91bGQgYmUgc2V0IGlmIHRoaXMgaXMgdGhlIGNhc2UuICBTZWUgZm9yIGV4YW1wbGUgU2VjdGlvbiAyMi41LjMKLSAqICAgICJNTUMvU0QvU0RJTzEgQnVzIFZvbHRhZ2UgU2VsZWN0aW9uIiBvZiB0aGUgT01BUDM0eHggTXVsdGltZWRpYQotICogICAgRGV2aWNlIFNpbGljb24gUmV2aXNpb24gMy4xLnggUmV2aXNpb24gWlIgKEp1bHkgMjAxMSkgKFNXUFUyMjNSKS4KLSAqCi0gKiBPTUFQX0hTTU1DX0JST0tFTl9NVUxUSUJMT0NLX1JFQUQ6IE11bHRpcGxlLWJsb2NrIHJlYWQgdHJhbnNmZXJzCi0gKiAgICBkb24ndCB3b3JrIGNvcnJlY3RseSBvbiBzb21lIE1NQyBjb250cm9sbGVyIGluc3RhbmNlcyBvbiBzb21lCi0gKiAgICBPTUFQMyBTb0NzOyB0aGlzIGZsYWcgc2hvdWxkIGJlIHNldCBpZiB0aGlzIGlzIHRoZSBjYXNlLiAgU2VlCi0gKiAgICBmb3IgZXhhbXBsZSBBZHZpc29yeSAyLjEuMS4xMjggIk1NQzogTXVsdGlwbGUgQmxvY2sgUmVhZAotICogICAgT3BlcmF0aW9uIElzc3VlIiBpbiBfT01BUDM1MzAvMzUyNS8zNTE1LzM1MDMgU2lsaWNvbiBFcnJhdGFfCi0gKiAgICBSZXZpc2lvbiBGIChPY3RvYmVyIDIwMTApIChTUFJaMjc4RikuCi0gKi8KLSNkZWZpbmUgT01BUF9IU01NQ19TVVBQT1JUU19EVUFMX1ZPTFQJCUJJVCgwKQotI2RlZmluZSBPTUFQX0hTTU1DX0JST0tFTl9NVUxUSUJMT0NLX1JFQUQJQklUKDEpCi0jZGVmaW5lIE9NQVBfSFNNTUNfU1dBS0VVUF9NSVNTSU5HCQlCSVQoMikKLQogc3RydWN0IG1tY19jYXJkOwogCi1zdHJ1Y3Qgb21hcF9tbWNfZGV2X2F0dHIgewotCXU4IGZsYWdzOwotfTsKLQogc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgewogCS8qIGJhY2stbGluayB0byBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0xMDYsOSArODIsNiBAQAogCQl1bnNpZ25lZCB2Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXA6MTsKIAogCQkvKiB3ZSBjYW4gcHV0IHRoZSBmZWF0dXJlcyBhYm92ZSBpbnRvIHRoaXMgdmFyaWFibGUgKi8KLSNkZWZpbmUgSFNNTUNfSEFTX1BCSUFTCQkoMSA8PCAwKQotI2RlZmluZSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVAkoMSA8PCAxKQotI2RlZmluZSBIU01NQ19IQVNfSFNQRV9TVVBQT1JUCSgxIDw8IDIpCiAjZGVmaW5lIE1NQ19PTUFQN1hYCQkoMSA8PCAzKQogI2RlZmluZSBNTUNfT01BUDE1WFgJCSgxIDw8IDQpCiAjZGVmaW5lIE1NQ19PTUFQMTZYWAkJKDEgPDwgNSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9weGFfc2RoY2kuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9weGFfc2RoY2kuaAppbmRleCAyN2QzMTU2Li45ZTIwYzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvcHhhX3NkaGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3B4YV9zZGhjaS5oCkBAIC01NSw5ICs1NSw0IEBACiAJdW5zaWduZWQgaW50CXF1aXJrczI7CiAJdW5zaWduZWQgaW50CXBtX2NhcHM7CiB9OwotCi1zdHJ1Y3Qgc2RoY2lfcHhhIHsKLQl1OAljbGtfZW5hYmxlOwotCXU4CXBvd2VyX21vZGU7Ci19OwogI2VuZGlmIC8qIF9QWEFfU0RIQ0lfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9zZXJpYWwtb21hcC5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NlcmlhbC1vbWFwLmgKaW5kZXggYzg2MGMxYi4uZDA5Mjc1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NlcmlhbC1vbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NlcmlhbC1vbWFwLmgKQEAgLTM4LDkgKzM4LDYgQEAKIAl1bnNpZ25lZCBpbnQJCWRtYV9yeF90aW1lb3V0OwogCXVuc2lnbmVkIGludAkJYXV0b3N1c3BlbmRfdGltZW91dDsKIAl1bnNpZ25lZCBpbnQJCWRtYV9yeF9wb2xsX3JhdGU7Ci0JaW50CQkJRFRSX2dwaW87Ci0JaW50CQkJRFRSX2ludmVydGVkOwotCWludAkJCURUUl9wcmVzZW50OwogCiAJaW50ICgqZ2V0X2NvbnRleHRfbG9zc19jb3VudCkoc3RydWN0IGRldmljZSAqKTsKIAl2b2lkICgqZW5hYmxlX3dha2V1cCkoc3RydWN0IGRldmljZSAqLCBib29sKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCAzODNmZDY4Li44YjU5NzYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC0zNDIsNyArMzQyLDcgQEAKICNkZWZpbmUgU0VUX0xBVEVfU1lTVEVNX1NMRUVQX1BNX09QUyhzdXNwZW5kX2ZuLCByZXN1bWVfZm4pCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAjZGVmaW5lIFNFVF9SVU5USU1FX1BNX09QUyhzdXNwZW5kX2ZuLCByZXN1bWVfZm4sIGlkbGVfZm4pIFwKIAkucnVudGltZV9zdXNwZW5kID0gc3VzcGVuZF9mbiwgXAogCS5ydW50aW1lX3Jlc3VtZSA9IHJlc3VtZV9mbiwgXApAQCAtMzUxLDE1ICszNTEsNiBAQAogI2RlZmluZSBTRVRfUlVOVElNRV9QTV9PUFMoc3VzcGVuZF9mbiwgcmVzdW1lX2ZuLCBpZGxlX2ZuKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE0KLSNkZWZpbmUgU0VUX1BNX1JVTlRJTUVfUE1fT1BTKHN1c3BlbmRfZm4sIHJlc3VtZV9mbiwgaWRsZV9mbikgXAotCS5ydW50aW1lX3N1c3BlbmQgPSBzdXNwZW5kX2ZuLCBcCi0JLnJ1bnRpbWVfcmVzdW1lID0gcmVzdW1lX2ZuLCBcCi0JLnJ1bnRpbWVfaWRsZSA9IGlkbGVfZm4sCi0jZWxzZQotI2RlZmluZSBTRVRfUE1fUlVOVElNRV9QTV9PUFMoc3VzcGVuZF9mbiwgcmVzdW1lX2ZuLCBpZGxlX2ZuKQotI2VuZGlmCi0KIC8qCiAgKiBVc2UgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIHNhbWUgc3VzcGVuZCBhbmQgcmVzdW1lIGNhbGxiYWNrcyBmb3Igc3VzcGVuZAogICogdG8gUkFNIGFuZCBoaWJlcm5hdGlvbi4KQEAgLTUzOCwxMSArNTI5LDcgQEAKIH07CiAKIHN0cnVjdCB3YWtldXBfc291cmNlOwotCi1zdHJ1Y3QgcG1fZG9tYWluX2RhdGEgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLX07CitzdHJ1Y3QgcG1fZG9tYWluX2RhdGE7CiAKIHN0cnVjdCBwbV9zdWJzeXNfZGF0YSB7CiAJc3BpbmxvY2tfdCBsb2NrOwpAQCAtNTc2LDcgKzU2Myw3IEBACiAjZWxzZQogCXVuc2lnbmVkIGludAkJc2hvdWxkX3dha2V1cDoxOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAlzdHJ1Y3QgdGltZXJfbGlzdAlzdXNwZW5kX3RpbWVyOwogCXVuc2lnbmVkIGxvbmcJCXRpbWVyX2V4cGlyZXM7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtX2Nsb2NrLmggYi9pbmNsdWRlL2xpbnV4L3BtX2Nsb2NrLmgKaW5kZXggODM0ODg2Ni4uMGIwMDM5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbV9jbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvcG1fY2xvY2suaApAQCAtMTgsNiArMTgsOCBAQAogCWNoYXIgKmNvbl9pZHNbXTsKIH07CiAKK3N0cnVjdCBjbGs7CisKICNpZmRlZiBDT05GSUdfUE1fQ0xLCiBzdGF0aWMgaW5saW5lIGJvb2wgcG1fY2xrX25vX2Nsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0yOSw2ICszMSw3IEBACiBleHRlcm4gaW50IHBtX2Nsa19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHBtX2Nsa19kZXN0cm95KHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHBtX2Nsa19hZGQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpOworZXh0ZXJuIGludCBwbV9jbGtfYWRkX2NsayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBjbGsgKmNsayk7CiBleHRlcm4gdm9pZCBwbV9jbGtfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uX2lkKTsKIGV4dGVybiBpbnQgcG1fY2xrX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgcG1fY2xrX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwpAQCAtNTEsNiArNTQsMTEgQEAKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KKworc3RhdGljIGlubGluZSBpbnQgcG1fY2xrX2FkZF9jbGsoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CiBzdGF0aWMgaW5saW5lIHZvaWQgcG1fY2xrX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmggYi9pbmNsdWRlL2xpbnV4L3BtX2RvbWFpbi5oCmluZGV4IDJlMGUwNmQuLjZjZDIwZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9kb21haW4uaApAQCAtMTcsNiArMTcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1aWRsZS5oPgogCisvKiBEZWZpbmVzIHVzZWQgZm9yIHRoZSBmbGFncyBmaWVsZCBpbiB0aGUgc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICovCisjZGVmaW5lIEdFTlBEX0ZMQUdfUE1fQ0xLCSgxVSA8PCAwKSAvKiBQTSBkb21haW4gdXNlcyBQTSBjbGsgKi8KKwogZW51bSBncGRfc3RhdHVzIHsKIAlHUERfU1RBVEVfQUNUSVZFID0gMCwJLyogUE0gZG9tYWluIGlzIGFjdGl2ZSAqLwogCUdQRF9TVEFURV9XQUlUX01BU1RFUiwJLyogUE0gZG9tYWluJ3MgbWFzdGVyIGlzIGJlaW5nIHdhaXRlZCBmb3IgKi8KQEAgLTc2LDYgKzc5LDcgQEAKIAkJCSAgc3RydWN0IGRldmljZSAqZGV2KTsKIAl2b2lkICgqZGV0YWNoX2Rldikoc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpkb21haW4sCiAJCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXYpOworCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIEJpdCBmaWVsZCBvZiBjb25maWdzIGZvciBnZW5wZCAqLwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKnBkX3RvX2dlbnBkKHN0cnVjdCBkZXZfcG1fZG9tYWluICpwZCkKQEAgLTEwMCw2ICsxMDQsMTEgQEAKIAlib29sIGNhY2hlZF9zdG9wX29rOwogfTsKIAorc3RydWN0IHBtX2RvbWFpbl9kYXRhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cit9OworCiBzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW5fZGF0YSB7CiAJc3RydWN0IHBtX2RvbWFpbl9kYXRhIGJhc2U7CiAJc3RydWN0IGdwZF90aW1pbmdfZGF0YSB0ZDsKQEAgLTE0Nyw2ICsxNTYsNyBAQAogCiBleHRlcm4gaW50IHBtX2dlbnBkX3Bvd2Vyb24oc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCk7CiBleHRlcm4gaW50IHBtX2dlbnBkX25hbWVfcG93ZXJvbihjb25zdCBjaGFyICpkb21haW5fbmFtZSk7CitleHRlcm4gdm9pZCBwbV9nZW5wZF9wb3dlcm9mZl91bnVzZWQodm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3QgZGV2X3Bvd2VyX2dvdmVybm9yIHNpbXBsZV9xb3NfZ292ZXJub3I7CiBleHRlcm4gc3RydWN0IGRldl9wb3dlcl9nb3Zlcm5vciBwbV9kb21haW5fYWx3YXlzX29uX2dvdjsKQEAgLTIyMSw2ICsyMzEsNyBAQAogewogCXJldHVybiAtRU5PU1lTOwogfQorc3RhdGljIGlubGluZSB2b2lkIHBtX2dlbnBkX3Bvd2Vyb2ZmX3VudXNlZCh2b2lkKSB7fQogI2RlZmluZSBzaW1wbGVfcW9zX2dvdmVybm9yIE5VTEwKICNkZWZpbmUgcG1fZG9tYWluX2Fsd2F5c19vbl9nb3YgTlVMTAogI2VuZGlmCkBAIC0yMzcsMTIgKzI0OCw2IEBACiAJcmV0dXJuIF9fcG1fZ2VucGRfbmFtZV9hZGRfZGV2aWNlKGRvbWFpbl9uYW1lLCBkZXYsIE5VTEwpOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX0dFTkVSSUNfRE9NQUlOU19SVU5USU1FCi1leHRlcm4gdm9pZCBwbV9nZW5wZF9wb3dlcm9mZl91bnVzZWQodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHBtX2dlbnBkX3Bvd2Vyb2ZmX3VudXNlZCh2b2lkKSB7fQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TX1NMRUVQCiBleHRlcm4gdm9pZCBwbV9nZW5wZF9zeXNjb3JlX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBwbV9nZW5wZF9zeXNjb3JlX3Bvd2Vyb24oc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fcW9zLmggYi9pbmNsdWRlL2xpbnV4L3BtX3Fvcy5oCmluZGV4IDYzNmU4MjguLjdiM2FlMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fcW9zLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9xb3MuaApAQCAtMTU0LDYgKzE1NCwyMyBAQAogaW50IGRldl9wbV9xb3NfYWRkX2FuY2VzdG9yX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2X3BtX3Fvc19yZXF1ZXN0ICpyZXEsCiAJCQkJICAgIGVudW0gZGV2X3BtX3Fvc19yZXFfdHlwZSB0eXBlLCBzMzIgdmFsdWUpOworaW50IGRldl9wbV9xb3NfZXhwb3NlX2xhdGVuY3lfbGltaXQoc3RydWN0IGRldmljZSAqZGV2LCBzMzIgdmFsdWUpOwordm9pZCBkZXZfcG1fcW9zX2hpZGVfbGF0ZW5jeV9saW1pdChzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IGRldl9wbV9xb3NfZXhwb3NlX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmRldiwgczMyIHZhbHVlKTsKK3ZvaWQgZGV2X3BtX3Fvc19oaWRlX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgZGV2X3BtX3Fvc191cGRhdGVfZmxhZ3Moc3RydWN0IGRldmljZSAqZGV2LCBzMzIgbWFzaywgYm9vbCBzZXQpOworczMyIGRldl9wbV9xb3NfZ2V0X3VzZXJfbGF0ZW5jeV90b2xlcmFuY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKK2ludCBkZXZfcG1fcW9zX3VwZGF0ZV91c2VyX2xhdGVuY3lfdG9sZXJhbmNlKHN0cnVjdCBkZXZpY2UgKmRldiwgczMyIHZhbCk7CisKK3N0YXRpYyBpbmxpbmUgczMyIGRldl9wbV9xb3NfcmVxdWVzdGVkX3Jlc3VtZV9sYXRlbmN5KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5wb3dlci5xb3MtPnJlc3VtZV9sYXRlbmN5X3JlcS0+ZGF0YS5wbm9kZS5wcmlvOworfQorCitzdGF0aWMgaW5saW5lIHMzMiBkZXZfcG1fcW9zX3JlcXVlc3RlZF9mbGFncyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+cG93ZXIucW9zLT5mbGFnc19yZXEtPmRhdGEuZmxyLmZsYWdzOworfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgZW51bSBwbV9xb3NfZmxhZ3Nfc3RhdHVzIF9fZGV2X3BtX3Fvc19mbGFncyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCQkJICBzMzIgbWFzaykKQEAgLTIwMCwyNyArMjE3LDYgQEAKIAkJCQkJCSAgZW51bSBkZXZfcG1fcW9zX3JlcV90eXBlIHR5cGUsCiAJCQkJCQkgIHMzMiB2YWx1ZSkKIAkJCXsgcmV0dXJuIDA7IH0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKLWludCBkZXZfcG1fcW9zX2V4cG9zZV9sYXRlbmN5X2xpbWl0KHN0cnVjdCBkZXZpY2UgKmRldiwgczMyIHZhbHVlKTsKLXZvaWQgZGV2X3BtX3Fvc19oaWRlX2xhdGVuY3lfbGltaXQoc3RydWN0IGRldmljZSAqZGV2KTsKLWludCBkZXZfcG1fcW9zX2V4cG9zZV9mbGFncyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHMzMiB2YWx1ZSk7Ci12b2lkIGRldl9wbV9xb3NfaGlkZV9mbGFncyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwotaW50IGRldl9wbV9xb3NfdXBkYXRlX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmRldiwgczMyIG1hc2ssIGJvb2wgc2V0KTsKLXMzMiBkZXZfcG1fcW9zX2dldF91c2VyX2xhdGVuY3lfdG9sZXJhbmNlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1pbnQgZGV2X3BtX3Fvc191cGRhdGVfdXNlcl9sYXRlbmN5X3RvbGVyYW5jZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHMzMiB2YWwpOwotCi1zdGF0aWMgaW5saW5lIHMzMiBkZXZfcG1fcW9zX3JlcXVlc3RlZF9yZXN1bWVfbGF0ZW5jeShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGRldi0+cG93ZXIucW9zLT5yZXN1bWVfbGF0ZW5jeV9yZXEtPmRhdGEucG5vZGUucHJpbzsKLX0KLQotc3RhdGljIGlubGluZSBzMzIgZGV2X3BtX3Fvc19yZXF1ZXN0ZWRfZmxhZ3Moc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBkZXYtPnBvd2VyLnFvcy0+ZmxhZ3NfcmVxLT5kYXRhLmZsci5mbGFnczsKLX0KLSNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBkZXZfcG1fcW9zX2V4cG9zZV9sYXRlbmN5X2xpbWl0KHN0cnVjdCBkZXZpY2UgKmRldiwgczMyIHZhbHVlKQogCQkJeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGRldl9wbV9xb3NfaGlkZV9sYXRlbmN5X2xpbWl0KHN0cnVjdCBkZXZpY2UgKmRldikge30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oIGIvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKaW5kZXggMzY3ZjQ5Yi4uZWRhNGZlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKQEAgLTM1LDE2ICszNSw2IEBACiBleHRlcm4gaW50IHBtX2dlbmVyaWNfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgcG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHBtX3J1bnRpbWVfZm9yY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0jZWxzZQotc3RhdGljIGlubGluZSBib29sIHF1ZXVlX3BtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSB7IHJldHVybiBmYWxzZTsgfQotCi1zdGF0aWMgaW5saW5lIGludCBwbV9nZW5lcmljX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHBtX2dlbmVyaWNfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIAogZXh0ZXJuIGludCBfX3BtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBycG1mbGFncyk7CiBleHRlcm4gaW50IF9fcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJwbWZsYWdzKTsKQEAgLTEyOCw3ICsxMTgsMTQgQEAKIAlBQ0NFU1NfT05DRShkZXYtPnBvd2VyLmxhc3RfYnVzeSkgPSBqaWZmaWVzOwogfQogCi0jZWxzZSAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KKyNlbHNlIC8qICFDT05GSUdfUE0gKi8KKworc3RhdGljIGlubGluZSBib29sIHF1ZXVlX3BtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSB7IHJldHVybiBmYWxzZTsgfQorCitzdGF0aWMgaW5saW5lIGludCBwbV9nZW5lcmljX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBtX2dlbmVyaWNfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KIAogc3RhdGljIGlubGluZSBpbnQgX19wbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcnBtZmxhZ3MpCiB7CkBAIC0xNzksNyArMTc2LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX3NldF9tZW1hbGxvY19ub2lvKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJCWJvb2wgZW5hYmxlKXt9CiAKLSNlbmRpZiAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KKyNlbmRpZiAvKiAhQ09ORklHX1BNICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByaW50ay5oIGIvaW5jbHVkZS9saW51eC9wcmludGsuaAppbmRleCBkNzgxMjVmLi5jOGYxNzAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ByaW50ay5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJpbnRrLmgKQEAgLTExOCwxMiArMTE4LDEzIEBACiAjaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USwogZXh0ZXJuIGFzbWxpbmthZ2UgX19wcmludGYoMSwgMikKIHZvaWQgZWFybHlfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLXZvaWQgZWFybHlfdnByaW50ayhjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgX19wcmludGYoMSwgMikgX19jb2xkCiB2b2lkIGVhcmx5X3ByaW50ayhjb25zdCBjaGFyICpzLCAuLi4pIHsgfQogI2VuZGlmCiAKK3R5cGVkZWYgaW50KCpwcmludGtfZnVuY190KShjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CisKICNpZmRlZiBDT05GSUdfUFJJTlRLCiBhc21saW5rYWdlIF9fcHJpbnRmKDUsIDApCiBpbnQgdnByaW50a19lbWl0KGludCBmYWNpbGl0eSwgaW50IGxldmVsLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9wZXJ0eS5oIGIvaW5jbHVkZS9saW51eC9wcm9wZXJ0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTNkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb3BlcnR5LmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBwcm9wZXJ0eS5oIC0gVW5pZmllZCBkZXZpY2UgcHJvcGVydHkgaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcnM6IFJhZmFlbCBKLiBXeXNvY2tpIDxyYWZhZWwuai53eXNvY2tpQGludGVsLmNvbT4KKyAqICAgICAgICAgIE1pa2EgV2VzdGVyYmVyZyA8bWlrYS53ZXN0ZXJiZXJnQGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0xJTlVYX1BST1BFUlRZX0hfCisjZGVmaW5lIF9MSU5VWF9QUk9QRVJUWV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRldmljZTsKKworZW51bSBkZXZfcHJvcF90eXBlIHsKKwlERVZfUFJPUF9VOCwKKwlERVZfUFJPUF9VMTYsCisJREVWX1BST1BfVTMyLAorCURFVl9QUk9QX1U2NCwKKwlERVZfUFJPUF9TVFJJTkcsCisJREVWX1BST1BfTUFYLAorfTsKKworYm9vbCBkZXZpY2VfcHJvcGVydHlfcHJlc2VudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnByb3BuYW1lKTsKK2ludCBkZXZpY2VfcHJvcGVydHlfcmVhZF91OF9hcnJheShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCSAgdTggKnZhbCwgc2l6ZV90IG52YWwpOworaW50IGRldmljZV9wcm9wZXJ0eV9yZWFkX3UxNl9hcnJheShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCSAgIHUxNiAqdmFsLCBzaXplX3QgbnZhbCk7CitpbnQgZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcHJvcG5hbWUsCisJCQkJICAgdTMyICp2YWwsIHNpemVfdCBudmFsKTsKK2ludCBkZXZpY2VfcHJvcGVydHlfcmVhZF91NjRfYXJyYXkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpwcm9wbmFtZSwKKwkJCQkgICB1NjQgKnZhbCwgc2l6ZV90IG52YWwpOworaW50IGRldmljZV9wcm9wZXJ0eV9yZWFkX3N0cmluZ19hcnJheShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKip2YWwsIHNpemVfdCBudmFsKTsKK2ludCBkZXZpY2VfcHJvcGVydHlfcmVhZF9zdHJpbmcoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpwcm9wbmFtZSwKKwkJCQljb25zdCBjaGFyICoqdmFsKTsKKworZW51bSBmd25vZGVfdHlwZSB7CisJRldOT0RFX0lOVkFMSUQgPSAwLAorCUZXTk9ERV9PRiwKKwlGV05PREVfQUNQSSwKK307CisKK3N0cnVjdCBmd25vZGVfaGFuZGxlIHsKKwllbnVtIGZ3bm9kZV90eXBlIHR5cGU7Cit9OworCitib29sIGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIGNvbnN0IGNoYXIgKnByb3BuYW1lKTsKK2ludCBmd25vZGVfcHJvcGVydHlfcmVhZF91OF9hcnJheShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLAorCQkJCSAgY29uc3QgY2hhciAqcHJvcG5hbWUsIHU4ICp2YWwsCisJCQkJICBzaXplX3QgbnZhbCk7CitpbnQgZndub2RlX3Byb3BlcnR5X3JlYWRfdTE2X2FycmF5KHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCisJCQkJICAgY29uc3QgY2hhciAqcHJvcG5hbWUsIHUxNiAqdmFsLAorCQkJCSAgIHNpemVfdCBudmFsKTsKK2ludCBmd25vZGVfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKKwkJCQkgICBjb25zdCBjaGFyICpwcm9wbmFtZSwgdTMyICp2YWwsCisJCQkJICAgc2l6ZV90IG52YWwpOworaW50IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3U2NF9hcnJheShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLAorCQkJCSAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLCB1NjQgKnZhbCwKKwkJCQkgICBzaXplX3QgbnZhbCk7CitpbnQgZndub2RlX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2FycmF5KHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCisJCQkJICAgICAgY29uc3QgY2hhciAqcHJvcG5hbWUsIGNvbnN0IGNoYXIgKip2YWwsCisJCQkJICAgICAgc2l6ZV90IG52YWwpOworaW50IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLAorCQkJCWNvbnN0IGNoYXIgKnByb3BuYW1lLCBjb25zdCBjaGFyICoqdmFsKTsKKworc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldmljZV9nZXRfbmV4dF9jaGlsZF9ub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQpOworCisjZGVmaW5lIGRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlKGRldiwgY2hpbGQpIFwKKwlmb3IgKGNoaWxkID0gZGV2aWNlX2dldF9uZXh0X2NoaWxkX25vZGUoZGV2LCBOVUxMKTsgY2hpbGQ7IFwKKwkgICAgIGNoaWxkID0gZGV2aWNlX2dldF9uZXh0X2NoaWxkX25vZGUoZGV2LCBjaGlsZCkpCisKK3ZvaWQgZndub2RlX2hhbmRsZV9wdXQoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSk7CisKK3Vuc2lnbmVkIGludCBkZXZpY2VfZ2V0X2NoaWxkX25vZGVfY291bnQoc3RydWN0IGRldmljZSAqZGV2KTsKKworc3RhdGljIGlubGluZSBib29sIGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lKQoreworCXJldHVybiBkZXZpY2VfcHJvcGVydHlfcHJlc2VudChkZXYsIHByb3BuYW1lKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIGNvbnN0IGNoYXIgKnByb3BuYW1lLCB1OCAqdmFsKQoreworCXJldHVybiBkZXZpY2VfcHJvcGVydHlfcmVhZF91OF9hcnJheShkZXYsIHByb3BuYW1lLCB2YWwsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZpY2VfcHJvcGVydHlfcmVhZF91MTYoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBjb25zdCBjaGFyICpwcm9wbmFtZSwgdTE2ICp2YWwpCit7CisJcmV0dXJuIGRldmljZV9wcm9wZXJ0eV9yZWFkX3UxNl9hcnJheShkZXYsIHByb3BuYW1lLCB2YWwsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBjb25zdCBjaGFyICpwcm9wbmFtZSwgdTMyICp2YWwpCit7CisJcmV0dXJuIGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShkZXYsIHByb3BuYW1lLCB2YWwsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZpY2VfcHJvcGVydHlfcmVhZF91NjQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBjb25zdCBjaGFyICpwcm9wbmFtZSwgdTY0ICp2YWwpCit7CisJcmV0dXJuIGRldmljZV9wcm9wZXJ0eV9yZWFkX3U2NF9hcnJheShkZXYsIHByb3BuYW1lLCB2YWwsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lKQoreworCXJldHVybiBmd25vZGVfcHJvcGVydHlfcHJlc2VudChmd25vZGUsIHByb3BuYW1lKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZndub2RlX3Byb3BlcnR5X3JlYWRfdTgoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKKwkJCQkJICBjb25zdCBjaGFyICpwcm9wbmFtZSwgdTggKnZhbCkKK3sKKwlyZXR1cm4gZndub2RlX3Byb3BlcnR5X3JlYWRfdThfYXJyYXkoZndub2RlLCBwcm9wbmFtZSwgdmFsLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZndub2RlX3Byb3BlcnR5X3JlYWRfdTE2KHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLCB1MTYgKnZhbCkKK3sKKwlyZXR1cm4gZndub2RlX3Byb3BlcnR5X3JlYWRfdTE2X2FycmF5KGZ3bm9kZSwgcHJvcG5hbWUsIHZhbCwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLAorCQkJCQkgICBjb25zdCBjaGFyICpwcm9wbmFtZSwgdTMyICp2YWwpCit7CisJcmV0dXJuIGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShmd25vZGUsIHByb3BuYW1lLCB2YWwsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBmd25vZGVfcHJvcGVydHlfcmVhZF91NjQoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKKwkJCQkJICAgY29uc3QgY2hhciAqcHJvcG5hbWUsIHU2NCAqdmFsKQoreworCXJldHVybiBmd25vZGVfcHJvcGVydHlfcmVhZF91NjRfYXJyYXkoZndub2RlLCBwcm9wbmFtZSwgdmFsLCAxKTsKK30KKworI2VuZGlmIC8qIF9MSU5VWF9QUk9QRVJUWV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKaW5kZXggY2M3OWVmZi4uOTg3YTczYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCkBAIC01Miw3ICs1Miw3IEBACiBleHRlcm4gdm9pZCBfX3B0cmFjZV9saW5rKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCiAJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3X3BhcmVudCk7CiBleHRlcm4gdm9pZCBfX3B0cmFjZV91bmxpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7Ci1leHRlcm4gdm9pZCBleGl0X3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlcik7CitleHRlcm4gdm9pZCBleGl0X3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlciwgc3RydWN0IGxpc3RfaGVhZCAqZGVhZCk7CiAjZGVmaW5lIFBUUkFDRV9NT0RFX1JFQUQJMHgwMQogI2RlZmluZSBQVFJBQ0VfTU9ERV9BVFRBQ0gJMHgwMgogI2RlZmluZSBQVFJBQ0VfTU9ERV9OT0FVRElUCTB4MDQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvbGludXgvcXVvdGEuaAppbmRleCA4MGQzNDVhLi41MDk3OGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCkBAIC01Niw2ICs1NiwxMSBAQAogCVBSSlFVT1RBID0gMiwJCS8qIGVsZW1lbnQgdXNlZCBmb3IgcHJvamVjdCBxdW90YXMgKi8KIH07CiAKKy8qIE1hc2tzIGZvciBxdW90YSB0eXBlcyB3aGVuIHVzZWQgYXMgYSBiaXRtYXNrICovCisjZGVmaW5lIFFUWVBFX01BU0tfVVNSICgxIDw8IFVTUlFVT1RBKQorI2RlZmluZSBRVFlQRV9NQVNLX0dSUCAoMSA8PCBHUlBRVU9UQSkKKyNkZWZpbmUgUVRZUEVfTUFTS19QUkogKDEgPDwgUFJKUVVPVEEpCisKIHR5cGVkZWYgX19rZXJuZWxfdWlkMzJfdCBxaWRfdDsgLyogVHlwZSBpbiB3aGljaCB3ZSBzdG9yZSBpZHMgaW4gbWVtb3J5ICovCiB0eXBlZGVmIGxvbmcgbG9uZyBxc2l6ZV90OwkvKiBUeXBlIGluIHdoaWNoIHdlIHN0b3JlIHNpemVzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaCBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAppbmRleCAxZDNlZWU1Li5mMjM1MzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCkBAIC02NCwxMCArNjQsMTAgQEAKIGludCBfX2RxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgZmxhZ3MpOwogdm9pZCBfX2RxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCBmbGFncyk7CiAKLWludCBkcXVvdF9hbGxvY19pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCBkcXVvdF9hbGxvY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogaW50IGRxdW90X2NsYWltX3NwYWNlX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpOwotdm9pZCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBkcXVvdF9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogdm9pZCBkcXVvdF9yZWNsYWltX3NwYWNlX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpOwogCiBpbnQgZHF1b3RfZGlzYWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKQEAgLTIxMywxMiArMjEzLDEyIEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRxdW90X2FsbG9jX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW5saW5lIGludCBkcXVvdF9hbGxvY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfZnJlZV9pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIGlubGluZSB2b2lkIGRxdW90X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCmluZGV4IDUzZmYxYTcuLmVkNGY1OTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKQEAgLTU3LDcgKzU3LDcgQEAKIAlJTlZBTElEX1JDVV9GTEFWT1IKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkKKyNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpCiB2b2lkIHJjdXRvcnR1cmVfZ2V0X2dwX2RhdGEoZW51bSByY3V0b3J0dXJlX3R5cGUgdGVzdF90eXBlLCBpbnQgKmZsYWdzLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgKmdwbnVtLCB1bnNpZ25lZCBsb25nICpjb21wbGV0ZWQpOwogdm9pZCByY3V0b3J0dXJlX3JlY29yZF90ZXN0X3RyYW5zaXRpb24odm9pZCk7CkBAIC0yNjAsNyArMjYwLDcgQEAKIHZvaWQgcmN1X2luaXQodm9pZCk7CiB2b2lkIHJjdV9zY2hlZF9xcyh2b2lkKTsKIHZvaWQgcmN1X2JoX3FzKHZvaWQpOwotdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKTsKK3ZvaWQgcmN1X2NoZWNrX2NhbGxiYWNrcyhpbnQgdXNlcik7CiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CiB2b2lkIHJjdV9pZGxlX2VudGVyKHZvaWQpOwogdm9pZCByY3VfaWRsZV9leGl0KHZvaWQpOwpAQCAtMzQ4LDggKzM0OCw4IEBACiAgKi8KICNkZWZpbmUgY29uZF9yZXNjaGVkX3JjdV9xcygpIFwKIGRvIHsgXAotCXJjdV9ub3RlX3ZvbHVudGFyeV9jb250ZXh0X3N3aXRjaChjdXJyZW50KTsgXAotCWNvbmRfcmVzY2hlZCgpOyBcCisJaWYgKCFjb25kX3Jlc2NoZWQoKSkgXAorCQlyY3Vfbm90ZV92b2x1bnRhcnlfY29udGV4dF9zd2l0Y2goY3VycmVudCk7IFwKIH0gd2hpbGUgKDApCiAKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19MT0NLX0FMTE9DKSB8fCBkZWZpbmVkKENPTkZJR19SQ1VfVFJBQ0UpIHx8IGRlZmluZWQoQ09ORklHX1NNUCkKQEAgLTM2NSw3ICszNjUsNyBAQAogCQkJICAgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKSk7CiB2b2lkIHdhaXRfcmN1X2dwKGNhbGxfcmN1X2Z1bmNfdCBjcmYpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpCisjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1BSRUVNUFRfUkNVKQogI2luY2x1ZGUgPGxpbnV4L3JjdXRyZWUuaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX1RJTllfUkNVKQogI2luY2x1ZGUgPGxpbnV4L3JjdXRpbnkuaD4KQEAgLTg2Nyw3ICs4NjcsNyBAQAogICoKICAqIEluIG5vbi1wcmVlbXB0aWJsZSBSQ1UgaW1wbGVtZW50YXRpb25zIChUUkVFX1JDVSBhbmQgVElOWV9SQ1UpLAogICogaXQgaXMgaWxsZWdhbCB0byBibG9jayB3aGlsZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCi0gKiBJbiBwcmVlbXB0aWJsZSBSQ1UgaW1wbGVtZW50YXRpb25zIChUUkVFX1BSRUVNUFRfUkNVKSBpbiBDT05GSUdfUFJFRU1QVAorICogSW4gcHJlZW1wdGlibGUgUkNVIGltcGxlbWVudGF0aW9ucyAoUFJFRU1QVF9SQ1UpIGluIENPTkZJR19QUkVFTVBUCiAgKiBrZXJuZWwgYnVpbGRzLCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG1heSBiZSBwcmVlbXB0ZWQsCiAgKiBidXQgZXhwbGljaXQgYmxvY2tpbmcgaXMgaWxsZWdhbC4gIEZpbmFsbHksIGluIHByZWVtcHRpYmxlIFJDVQogICogaW1wbGVtZW50YXRpb25zIGluIHJlYWwtdGltZSAod2l0aCAtcnQgcGF0Y2hzZXQpIGtlcm5lbCBidWlsZHMsIFJDVQpAQCAtOTAyLDcgKzkwMiw5IEBACiAgKiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGZ1bmN0aW9uIGFjcXVpcmVzIHRoZSBzY2hlZHVsZXIncyBydW5xdWV1ZSBhbmQKICAqIHByaW9yaXR5LWluaGVyaXRhbmNlIHNwaW5sb2Nrcy4gIFRoaXMgbWVhbnMgdGhhdCBkZWFkbG9jayBjb3VsZCByZXN1bHQKICAqIGlmIHRoZSBjYWxsZXIgb2YgcmN1X3JlYWRfdW5sb2NrKCkgYWxyZWFkeSBob2xkcyBvbmUgb2YgdGhlc2UgbG9ja3Mgb3IKLSAqIGFueSBsb2NrIHRoYXQgaXMgZXZlciBhY3F1aXJlZCB3aGlsZSBob2xkaW5nIHRoZW0uCisgKiBhbnkgbG9jayB0aGF0IGlzIGV2ZXIgYWNxdWlyZWQgd2hpbGUgaG9sZGluZyB0aGVtOyBvciBhbnkgbG9jayB3aGljaAorICogY2FuIGJlIHRha2VuIGZyb20gaW50ZXJydXB0IGNvbnRleHQgYmVjYXVzZSByY3VfYm9vc3QoKS0+cnRfbXV0ZXhfbG9jaygpCisgKiBkb2VzIG5vdCBkaXNhYmxlIGlycXMgd2hpbGUgdGFraW5nIC0+d2FpdF9sb2NrLgogICoKICAqIFRoYXQgc2FpZCwgUkNVIHJlYWRlcnMgYXJlIG5ldmVyIHByaW9yaXR5IGJvb3N0ZWQgdW5sZXNzIHRoZXkgd2VyZQogICogcHJlZW1wdGVkLiAgVGhlcmVmb3JlLCBvbmUgd2F5IHRvIGF2b2lkIGRlYWRsb2NrIGlzIHRvIG1ha2Ugc3VyZQpAQCAtMTA2Miw2ICsxMDY0LDcgQEAKICAqLwogI2RlZmluZSBSQ1VfSU5JVF9QT0lOVEVSKHAsIHYpIFwKIAlkbyB7IFwKKwkJcmN1X2RlcmVmZXJlbmNlX3NwYXJzZShwLCBfX3JjdSk7IFwKIAkJcCA9IFJDVV9JTklUSUFMSVpFUih2KTsgXAogCX0gd2hpbGUgKDApCiAKQEAgLTExMTgsNyArMTEyMSw3IEBACiAJX19rZnJlZV9yY3UoJigocHRyKS0+cmN1X2hlYWQpLCBvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwgcmN1X2hlYWQpKQogCiAjaWYgZGVmaW5lZChDT05GSUdfVElOWV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1JDVV9OT0NCX0NQVV9BTEwpCi1zdGF0aWMgaW5saW5lIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUsIHVuc2lnbmVkIGxvbmcgKmRlbHRhX2ppZmZpZXMpCitzdGF0aWMgaW5saW5lIGludCByY3VfbmVlZHNfY3B1KHVuc2lnbmVkIGxvbmcgKmRlbHRhX2ppZmZpZXMpCiB7CiAJKmRlbHRhX2ppZmZpZXMgPSBVTE9OR19NQVg7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvcmN1dGlueS5oCmluZGV4IDM4Y2M1YjEuLjBlNTM2NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1dGlueS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1dGlueS5oCkBAIC03OCw3ICs3OCw3IEBACiAJY2FsbF9yY3UoaGVhZCwgZnVuYyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaChpbnQgY3B1KQorc3RhdGljIGlubGluZSB2b2lkIHJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKHZvaWQpCiB7CiAJcmN1X3NjaGVkX3FzKCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCmluZGV4IDNlMmY1ZDQuLjUyOTUzNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCkBAIC0zMCw5ICszMCw5IEBACiAjaWZuZGVmIF9fTElOVVhfUkNVVFJFRV9ICiAjZGVmaW5lIF9fTElOVVhfUkNVVFJFRV9ICiAKLXZvaWQgcmN1X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSk7Cit2b2lkIHJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKHZvaWQpOwogI2lmbmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVX0FMTAotaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSwgdW5zaWduZWQgbG9uZyAqZGVsdGFfamlmZmllcyk7CitpbnQgcmN1X25lZWRzX2NwdSh1bnNpZ25lZCBsb25nICpkZWx0YV9qaWZmaWVzKTsKICNlbmRpZiAvKiAjaWZuZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMICovCiB2b2lkIHJjdV9jcHVfc3RhbGxfcmVzZXQodm9pZCk7CiAKQEAgLTQzLDcgKzQzLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHJjdV92aXJ0X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSkKIHsKLQlyY3Vfbm90ZV9jb250ZXh0X3N3aXRjaChjcHUpOworCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKCk7CiB9CiAKIHZvaWQgc3luY2hyb25pemVfcmN1X2JoKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWdtYXAuaCBiL2luY2x1ZGUvbGludXgvcmVnbWFwLmgKaW5kZXggYzVlZDgzZi4uNDQxOWI5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWdtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ21hcC5oCkBAIC0yNyw2ICsyNyw3IEBACiBzdHJ1Y3QgcmVnbWFwOwogc3RydWN0IHJlZ21hcF9yYW5nZV9jZmc7CiBzdHJ1Y3QgcmVnbWFwX2ZpZWxkOworc3RydWN0IHNuZF9hYzk3OwogCiAvKiBBbiBlbnVtIG9mIGFsbCB0aGUgc3VwcG9ydGVkIGNhY2hlIHR5cGVzICovCiBlbnVtIHJlZ2NhY2hlX3R5cGUgewpAQCAtMzQwLDYgKzM0MSw4IEBACiBzdHJ1Y3QgcmVnbWFwICpyZWdtYXBfaW5pdF9tbWlvX2NsayhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNsa19pZCwKIAkJCQkgICAgdm9pZCBfX2lvbWVtICpyZWdzLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqY29uZmlnKTsKK3N0cnVjdCByZWdtYXAgKnJlZ21hcF9pbml0X2FjOTcoc3RydWN0IHNuZF9hYzk3ICphYzk3LAorCQkJCWNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpOwogCiBzdHJ1Y3QgcmVnbWFwICpkZXZtX3JlZ21hcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQljb25zdCBzdHJ1Y3QgcmVnbWFwX2J1cyAqYnVzLApAQCAtMzU2LDYgKzM1OSwxMCBAQAogc3RydWN0IHJlZ21hcCAqZGV2bV9yZWdtYXBfaW5pdF9tbWlvX2NsayhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNsa19pZCwKIAkJCQkJIHZvaWQgX19pb21lbSAqcmVncywKIAkJCQkJIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpOworc3RydWN0IHJlZ21hcCAqZGV2bV9yZWdtYXBfaW5pdF9hYzk3KHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpOworCitib29sIHJlZ21hcF9hYzk3X2RlZmF1bHRfdm9sYXRpbGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKTsKIAogLyoqCiAgKiByZWdtYXBfaW5pdF9tbWlvKCk6IEluaXRpYWxpc2UgcmVnaXN0ZXIgbWFwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaAppbmRleCBmNTQwYjE0Li5kMTdlMWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKQEAgLTEwMSw2ICsxMDEsOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgRGF0YSBwYXNzZWQgaXMgInN0cnVjdCBwcmVfdm9sdGFnZV9jaGFuZ2VfZGF0YSIKICAqIEFCT1JUX1ZPTFRBR0VfQ0hBTkdFIFJlZ3VsYXRvciB2b2x0YWdlIGNoYW5nZSBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgogICogICAgICAgICAgICAgICAgICAgICAgRGF0YSBwYXNzZWQgaXMgb2xkIHZvbHRhZ2UgY2FzdCB0byAodm9pZCAqKS4KKyAqIFBSRV9ESVNBQkxFICAgIFJlZ3VsYXRvciBpcyBhYm91dCB0byBiZSBkaXNhYmxlZAorICogQUJPUlRfRElTQUJMRSAgUmVndWxhdG9yIGRpc2FibGUgZmFpbGVkIGZvciBzb21lIHJlYXNvbgogICoKICAqIE5PVEU6IFRoZXNlIGV2ZW50cyBjYW4gYmUgT1InZWQgdG9nZXRoZXIgd2hlbiBwYXNzZWQgaW50byBoYW5kbGVyLgogICovCkBAIC0xMTUsNiArMTE3LDggQEAKICNkZWZpbmUgUkVHVUxBVE9SX0VWRU5UX0RJU0FCTEUgCQkweDgwCiAjZGVmaW5lIFJFR1VMQVRPUl9FVkVOVF9QUkVfVk9MVEFHRV9DSEFOR0UJMHgxMDAKICNkZWZpbmUgUkVHVUxBVE9SX0VWRU5UX0FCT1JUX1ZPTFRBR0VfQ0hBTkdFCTB4MjAwCisjZGVmaW5lIFJFR1VMQVRPUl9FVkVOVF9QUkVfRElTQUJMRQkJMHg0MDAKKyNkZWZpbmUgUkVHVUxBVE9SX0VWRU5UX0FCT1JUX0RJU0FCTEUJCTB4ODAwCiAKIC8qKgogICogc3RydWN0IHByZV92b2x0YWdlX2NoYW5nZV9kYXRhIC0gRGF0YSBzZW50IHdpdGggUFJFX1ZPTFRBR0VfQ0hBTkdFIGV2ZW50CkBAIC0yODQsNyArMjg4LDcgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ3VsYXRvciAqX19tdXN0X2NoZWNrCiByZWd1bGF0b3JfZ2V0X2V4Y2x1c2l2ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQogewotCXJldHVybiBOVUxMOworCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWd1bGF0b3IgKl9fbXVzdF9jaGVjawpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaAppbmRleCBmYzBlZTBjLi41ZjFlOWNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaApAQCAtMjQzLDYgKzI0Myw4IEBACiAgKgogICogQGVuYWJsZV90aW1lOiBUaW1lIHRha2VuIGZvciBpbml0aWFsIGVuYWJsZSBvZiByZWd1bGF0b3IgKGluIHVTKS4KICAqIEBvZmZfb25fZGVsYXk6IGd1YXJkIHRpbWUgKGluIHVTKSwgYmVmb3JlIHJlLWVuYWJsaW5nIGEgcmVndWxhdG9yCisgKgorICogQG9mX21hcF9tb2RlOiBNYXBzIGEgaGFyZHdhcmUgbW9kZSBkZWZpbmVkIGluIGEgRGV2aWNlVHJlZSB0byBhIHN0YW5kYXJkIG1vZGUKICAqLwogc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMjg1LDYgKzI4Nyw4IEBACiAJdW5zaWduZWQgaW50IGVuYWJsZV90aW1lOwogCiAJdW5zaWduZWQgaW50IG9mZl9vbl9kZWxheTsKKworCXVuc2lnbmVkIGludCAoKm9mX21hcF9tb2RlKSh1bnNpZ25lZCBpbnQgbW9kZSk7CiB9OwogCiAvKioKQEAgLTMwMSw2ICszMDUsOSBAQAogICogICAgICAgICAgIE5VTEwpLgogICogQHJlZ21hcDogcmVnbWFwIHRvIHVzZSBmb3IgY29yZSByZWdtYXAgaGVscGVycyBpZiBkZXZfZ2V0X3JlZ3VsYXRvcigpIGlzCiAgKiAgICAgICAgICBpbnN1ZmZpY2llbnQuCisgKiBAZW5hX2dwaW9faW5pdGlhbGl6ZWQ6IEdQSU8gY29udHJvbGxpbmcgcmVndWxhdG9yIGVuYWJsZSB3YXMgcHJvcGVybHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQsIG1lYW5pbmcgdGhhdCA+PSAwIGlzIGEgdmFsaWQgZ3BpbworICogICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIGFuZCA8IDAgaXMgYSBub24gZXhpc3RlbnQgZ3Bpby4KICAqIEBlbmFfZ3BpbzogR1BJTyBjb250cm9sbGluZyByZWd1bGF0b3IgZW5hYmxlLgogICogQGVuYV9ncGlvX2ludmVydDogU2Vuc2UgZm9yIEdQSU8gZW5hYmxlIGNvbnRyb2wuCiAgKiBAZW5hX2dwaW9fZmxhZ3M6IEZsYWdzIHRvIHVzZSB3aGVuIGNhbGxpbmcgZ3Bpb19yZXF1ZXN0X29uZSgpCkBAIC0zMTIsNiArMzE5LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7CiAJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwogCisJYm9vbCBlbmFfZ3Bpb19pbml0aWFsaXplZDsKIAlpbnQgZW5hX2dwaW87CiAJdW5zaWduZWQgaW50IGVuYV9ncGlvX2ludmVydDoxOwogCXVuc2lnbmVkIGludCBlbmFfZ3Bpb19mbGFnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmgKaW5kZXggZjkyMTc5Ni4uNzYzOTUzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3Ivb2ZfcmVndWxhdG9yLmgKQEAgLTYsMjQgKzYsMjkgQEAKICNpZm5kZWYgX19MSU5VWF9PRl9SRUdfSAogI2RlZmluZSBfX0xJTlVYX09GX1JFR19ICiAKK3N0cnVjdCByZWd1bGF0b3JfZGVzYzsKKwogc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAl2b2lkICpkcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKKwljb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2M7CiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfT0YpCiBleHRlcm4gc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEKIAkqb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOworCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJICAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYyk7CiBleHRlcm4gaW50IG9mX3JlZ3VsYXRvcl9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIAkJCSAgICAgIHN0cnVjdCBvZl9yZWd1bGF0b3JfbWF0Y2ggKm1hdGNoZXMsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtX21hdGNoZXMpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEKIAkqb2ZfZ2V0X3JlZ3VsYXRvcl9pbml0X2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCisJCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmI3YmMzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi0jaWZuZGVmIF9fUkVTX0NPVU5URVJfSF9fCi0jZGVmaW5lIF9fUkVTX0NPVU5URVJfSF9fCi0KLS8qCi0gKiBSZXNvdXJjZSBDb3VudGVycwotICogQ29udGFpbiBjb21tb24gZGF0YSB0eXBlcyBhbmQgcm91dGluZXMgZm9yIHJlc291cmNlIGFjY291bnRpbmcKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNyBPcGVuVlogU1dzb2Z0IEluYwotICoKLSAqIEF1dGhvcjogUGF2ZWwgRW1lbGlhbm92IDx4ZW11bEBvcGVudnoub3JnPgotICoKLSAqIFNlZSBEb2N1bWVudGF0aW9uL2Nncm91cHMvcmVzb3VyY2VfY291bnRlci50eHQgZm9yIG1vcmUKLSAqIGluZm8gYWJvdXQgd2hhdCB0aGlzIGNvdW50ZXIgaXMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLQotLyoKLSAqIFRoZSBjb3JlIG9iamVjdC4gdGhlIGNncm91cCB0aGF0IHdpc2hlcyB0byBhY2NvdW50IGZvciBzb21lCi0gKiByZXNvdXJjZSBtYXkgaW5jbHVkZSB0aGlzIGNvdW50ZXIgaW50byBpdHMgc3RydWN0dXJlcyBhbmQgdXNlCi0gKiB0aGUgaGVscGVycyBkZXNjcmliZWQgYmV5b25kCi0gKi8KLQotc3RydWN0IHJlc19jb3VudGVyIHsKLQkvKgotCSAqIHRoZSBjdXJyZW50IHJlc291cmNlIGNvbnN1bXB0aW9uIGxldmVsCi0JICovCi0JdW5zaWduZWQgbG9uZyBsb25nIHVzYWdlOwotCS8qCi0JICogdGhlIG1heGltYWwgdmFsdWUgb2YgdGhlIHVzYWdlIGZyb20gdGhlIGNvdW50ZXIgY3JlYXRpb24KLQkgKi8KLQl1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3VzYWdlOwotCS8qCi0JICogdGhlIGxpbWl0IHRoYXQgdXNhZ2UgY2Fubm90IGV4Y2VlZAotCSAqLwotCXVuc2lnbmVkIGxvbmcgbG9uZyBsaW1pdDsKLQkvKgotCSAqIHRoZSBsaW1pdCB0aGF0IHVzYWdlIGNhbiBiZSBleGNlZWQKLQkgKi8KLQl1bnNpZ25lZCBsb25nIGxvbmcgc29mdF9saW1pdDsKLQkvKgotCSAqIHRoZSBudW1iZXIgb2YgdW5zdWNjZXNzZnVsIGF0dGVtcHRzIHRvIGNvbnN1bWUgdGhlIHJlc291cmNlCi0JICovCi0JdW5zaWduZWQgbG9uZyBsb25nIGZhaWxjbnQ7Ci0JLyoKLQkgKiB0aGUgbG9jayB0byBwcm90ZWN0IGFsbCBvZiB0aGUgYWJvdmUuCi0JICogdGhlIHJvdXRpbmVzIGJlbG93IGNvbnNpZGVyIHRoaXMgdG8gYmUgSVJRLXNhZmUKLQkgKi8KLQlzcGlubG9ja190IGxvY2s7Ci0JLyoKLQkgKiBQYXJlbnQgY291bnRlciwgdXNlZCBmb3IgaGllcmFyY2hpYWwgcmVzb3VyY2UgYWNjb3VudGluZwotCSAqLwotCXN0cnVjdCByZXNfY291bnRlciAqcGFyZW50OwotfTsKLQotI2RlZmluZSBSRVNfQ09VTlRFUl9NQVggVUxMT05HX01BWAotCi0vKioKLSAqIEhlbHBlcnMgdG8gaW50ZXJhY3Qgd2l0aCB1c2Vyc3BhY2UKLSAqIHJlc19jb3VudGVyX3JlYWRfdTY0KCkgLSByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIG1lbWJlci4KLSAqIHJlc19jb3VudGVyX3JlYWQvX3dyaXRlIC0gcHV0L2dldCB0aGUgc3BlY2lmaWVkIGZpZWxkcyBmcm9tIHRoZQotICogcmVzX2NvdW50ZXIgc3RydWN0IHRvL2Zyb20gdGhlIHVzZXIKLSAqCi0gKiBAY291bnRlcjogICAgIHRoZSBjb3VudGVyIGluIHF1ZXN0aW9uCi0gKiBAbWVtYmVyOiAgdGhlIGZpZWxkIHRvIHdvcmsgd2l0aCAoc2VlIFJFU194eHggYmVsb3cpCi0gKiBAYnVmOiAgICAgdGhlIGJ1ZmZlciB0byBvcGVhdGUgb24sLi4uCi0gKiBAbmJ5dGVzOiAgaXRzIHNpemUuLi4KLSAqIEBwb3M6ICAgICBhbmQgdGhlIG9mZnNldC4KLSAqLwotCi11NjQgcmVzX2NvdW50ZXJfcmVhZF91NjQoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCBpbnQgbWVtYmVyKTsKLQotc3NpemVfdCByZXNfY291bnRlcl9yZWFkKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgaW50IG1lbWJlciwKLQkJY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwb3MsCi0JCWludCAoKnJlYWRfc3RyYXRlZ3kpKHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwsIGNoYXIgKnMpKTsKLQotaW50IHJlc19jb3VudGVyX21lbXBhcnNlX3dyaXRlX3N0cmF0ZWd5KGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkJdW5zaWduZWQgbG9uZyBsb25nICpyZXMpOwotCi0vKgotICogdGhlIGZpZWxkIGRlc2NyaXB0b3JzLiBvbmUgZm9yIGVhY2ggbWVtYmVyIG9mIHJlc19jb3VudGVyCi0gKi8KLQotZW51bSB7Ci0JUkVTX1VTQUdFLAotCVJFU19NQVhfVVNBR0UsCi0JUkVTX0xJTUlULAotCVJFU19GQUlMQ05ULAotCVJFU19TT0ZUX0xJTUlULAotfTsKLQotLyoKLSAqIGhlbHBlcnMgZm9yIGFjY291bnRpbmcKLSAqLwotCi12b2lkIHJlc19jb3VudGVyX2luaXQoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCBzdHJ1Y3QgcmVzX2NvdW50ZXIgKnBhcmVudCk7Ci0KLS8qCi0gKiBjaGFyZ2UgLSB0cnkgdG8gY29uc3VtZSBtb3JlIHJlc291cmNlLgotICoKLSAqIEBjb3VudGVyOiB0aGUgY291bnRlcgotICogQHZhbDogdGhlIGFtb3VudCBvZiB0aGUgcmVzb3VyY2UuIGVhY2ggY29udHJvbGxlciBkZWZpbmVzIGl0cyBvd24KLSAqICAgICAgIHVuaXRzLCBlLmcuIG51bWJlcnMsIGJ5dGVzLCBLYnl0ZXMsIGV0YwotICoKLSAqIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCA8MCBpZiB0aGUgY291bnRlci0+dXNhZ2Ugd2lsbCBleGNlZWQgdGhlCi0gKiBjb3VudGVyLT5saW1pdAotICoKLSAqIGNoYXJnZV9ub2ZhaWwgd29ya3MgdGhlIHNhbWUsIGV4Y2VwdCB0aGF0IGl0IGNoYXJnZXMgdGhlIHJlc291cmNlCi0gKiBjb3VudGVyIHVuY29uZGl0aW9uYWxseSwgYW5kIHJldHVybnMgPCAwIGlmIHRoZSBhZnRlciB0aGUgY3VycmVudAotICogY2hhcmdlIHdlIGFyZSBvdmVyIGxpbWl0LgotICovCi0KLWludCBfX211c3RfY2hlY2sgcmVzX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwKLQkJdW5zaWduZWQgbG9uZyB2YWwsIHN0cnVjdCByZXNfY291bnRlciAqKmxpbWl0X2ZhaWxfYXQpOwotaW50IHJlc19jb3VudGVyX2NoYXJnZV9ub2ZhaWwoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLAotCQl1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IHJlc19jb3VudGVyICoqbGltaXRfZmFpbF9hdCk7Ci0KLS8qCi0gKiB1bmNoYXJnZSAtIHRlbGwgdGhhdCBzb21lIHBvcnRpb24gb2YgdGhlIHJlc291cmNlIGlzIHJlbGVhc2VkCi0gKgotICogQGNvdW50ZXI6IHRoZSBjb3VudGVyCi0gKiBAdmFsOiB0aGUgYW1vdW50IG9mIHRoZSByZXNvdXJjZQotICoKLSAqIHRoZXNlIGNhbGxzIGNoZWNrIGZvciB1c2FnZSB1bmRlcmZsb3cgYW5kIHNob3cgYSB3YXJuaW5nIG9uIHRoZSBjb25zb2xlCi0gKgotICogcmV0dXJucyB0aGUgdG90YWwgY2hhcmdlcyBzdGlsbCBwcmVzZW50IGluIEBjb3VudGVyLgotICovCi0KLXU2NCByZXNfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsKTsKLQotdTY0IHJlc19jb3VudGVyX3VuY2hhcmdlX3VudGlsKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwKLQkJCSAgICAgICBzdHJ1Y3QgcmVzX2NvdW50ZXIgKnRvcCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbCk7Ci0vKioKLSAqIHJlc19jb3VudGVyX21hcmdpbiAtIGNhbGN1bGF0ZSBjaGFyZ2VhYmxlIHNwYWNlIG9mIGEgY291bnRlcgotICogQGNudDogdGhlIGNvdW50ZXIKLSAqCi0gKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGhhcmQgbGltaXQgYW5kIHRoZSBjdXJyZW50IHVzYWdlCi0gKiBvZiByZXNvdXJjZSBjb3VudGVyIEBjbnQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHJlc19jb3VudGVyX21hcmdpbihzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNudCkKLXsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWFyZ2luOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY250LT5sb2NrLCBmbGFncyk7Ci0JaWYgKGNudC0+bGltaXQgPiBjbnQtPnVzYWdlKQotCQltYXJnaW4gPSBjbnQtPmxpbWl0IC0gY250LT51c2FnZTsKLQllbHNlCi0JCW1hcmdpbiA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY250LT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIG1hcmdpbjsKLX0KLQotLyoqCi0gKiBHZXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdXNhZ2UgYW5kIHRoZSBzb2Z0IGxpbWl0Ci0gKiBAY250OiBUaGUgY291bnRlcgotICoKLSAqIFJldHVybnMgMCBpZiB1c2FnZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gc29mdCBsaW1pdAotICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2FnZSBhbmQgc29mdCBsaW1pdCwgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZwotcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3Moc3RydWN0IHJlc19jb3VudGVyICpjbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VzczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNudC0+bG9jaywgZmxhZ3MpOwotCWlmIChjbnQtPnVzYWdlIDw9IGNudC0+c29mdF9saW1pdCkKLQkJZXhjZXNzID0gMDsKLQllbHNlCi0JCWV4Y2VzcyA9IGNudC0+dXNhZ2UgLSBjbnQtPnNvZnRfbGltaXQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY250LT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGV4Y2VzczsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlc19jb3VudGVyX3Jlc2V0X21heChzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNudCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNudC0+bG9jaywgZmxhZ3MpOwotCWNudC0+bWF4X3VzYWdlID0gY250LT51c2FnZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbnQtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlc19jb3VudGVyX3Jlc2V0X2ZhaWxjbnQoc3RydWN0IHJlc19jb3VudGVyICpjbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbnQtPmxvY2ssIGZsYWdzKTsKLQljbnQtPmZhaWxjbnQgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNudC0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByZXNfY291bnRlcl9zZXRfbGltaXQoc3RydWN0IHJlc19jb3VudGVyICpjbnQsCi0JCXVuc2lnbmVkIGxvbmcgbG9uZyBsaW1pdCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRUJVU1k7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY250LT5sb2NrLCBmbGFncyk7Ci0JaWYgKGNudC0+dXNhZ2UgPD0gbGltaXQpIHsKLQkJY250LT5saW1pdCA9IGxpbWl0OwotCQlyZXQgPSAwOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbnQtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGludAotcmVzX2NvdW50ZXJfc2V0X3NvZnRfbGltaXQoc3RydWN0IHJlc19jb3VudGVyICpjbnQsCi0JCQkJdW5zaWduZWQgbG9uZyBsb25nIHNvZnRfbGltaXQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbnQtPmxvY2ssIGZsYWdzKTsKLQljbnQtPnNvZnRfbGltaXQgPSBzb2Z0X2xpbWl0OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNudC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVzZXQtY29udHJvbGxlci5oIGIvaW5jbHVkZS9saW51eC9yZXNldC1jb250cm9sbGVyLmgKaW5kZXggNDFhNDY5NWYuLmNlNmI5NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzZXQtY29udHJvbGxlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVzZXQtY29udHJvbGxlci5oCkBAIC0xMiwxMSArMTIsMTMgQEAKICAqICAgICAgICAgdGhpbmdzIHRvIHJlc2V0IHRoZSBkZXZpY2UKICAqIEBhc3NlcnQ6IG1hbnVhbGx5IGFzc2VydCB0aGUgcmVzZXQgbGluZSwgaWYgc3VwcG9ydGVkCiAgKiBAZGVhc3NlcnQ6IG1hbnVhbGx5IGRlYXNzZXJ0IHRoZSByZXNldCBsaW5lLCBpZiBzdXBwb3J0ZWQKKyAqIEBzdGF0dXM6IHJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSByZXNldCBsaW5lLCBpZiBzdXBwb3J0ZWQKICAqLwogc3RydWN0IHJlc2V0X2NvbnRyb2xfb3BzIHsKIAlpbnQgKCpyZXNldCkoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwgdW5zaWduZWQgbG9uZyBpZCk7CiAJaW50ICgqYXNzZXJ0KShzdHJ1Y3QgcmVzZXRfY29udHJvbGxlcl9kZXYgKnJjZGV2LCB1bnNpZ25lZCBsb25nIGlkKTsKIAlpbnQgKCpkZWFzc2VydCkoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwgdW5zaWduZWQgbG9uZyBpZCk7CisJaW50ICgqc3RhdHVzKShzdHJ1Y3QgcmVzZXRfY29udHJvbGxlcl9kZXYgKnJjZGV2LCB1bnNpZ25lZCBsb25nIGlkKTsKIH07CiAKIHN0cnVjdCBtb2R1bGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jlc2V0LmggYi9pbmNsdWRlL2xpbnV4L3Jlc2V0LmgKaW5kZXggMzQ5ZjE1MC4uZGE1NjAyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZXNldC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVzZXQuaApAQCAtMTAsNiArMTAsNyBAQAogaW50IHJlc2V0X2NvbnRyb2xfcmVzZXQoc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGMpOwogaW50IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKTsKIGludCByZXNldF9jb250cm9sX2RlYXNzZXJ0KHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKTsKK2ludCByZXNldF9jb250cm9sX3N0YXR1cyhzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0Yyk7CiAKIHN0cnVjdCByZXNldF9jb250cm9sICpyZXNldF9jb250cm9sX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKTsKIHZvaWQgcmVzZXRfY29udHJvbF9wdXQoc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGMpOwpAQCAtNTcsNiArNTgsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcmVzZXRfY29udHJvbF9zdGF0dXMoc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGMpCit7CisJV0FSTl9PTigxKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2NvbnRyb2xfcHV0KHN0cnVjdCByZXNldF9jb250cm9sICpyc3RjKQogewogCVdBUk5fT04oMSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0Yy5oIGIvaW5jbHVkZS9saW51eC9ydGMuaAppbmRleCBjMmMyODk3Li42ZDZiZTA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRjLmgKQEAgLTE5LDExICsxOSwyOCBAQAogZXh0ZXJuIGludCBydGNfbW9udGhfZGF5cyh1bnNpZ25lZCBpbnQgbW9udGgsIHVuc2lnbmVkIGludCB5ZWFyKTsKIGV4dGVybiBpbnQgcnRjX3llYXJfZGF5cyh1bnNpZ25lZCBpbnQgZGF5LCB1bnNpZ25lZCBpbnQgbW9udGgsIHVuc2lnbmVkIGludCB5ZWFyKTsKIGV4dGVybiBpbnQgcnRjX3ZhbGlkX3RtKHN0cnVjdCBydGNfdGltZSAqdG0pOwotZXh0ZXJuIGludCBydGNfdG1fdG9fdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtLCB1bnNpZ25lZCBsb25nICp0aW1lKTsKLWV4dGVybiB2b2lkIHJ0Y190aW1lX3RvX3RtKHVuc2lnbmVkIGxvbmcgdGltZSwgc3RydWN0IHJ0Y190aW1lICp0bSk7CitleHRlcm4gdGltZTY0X3QgcnRjX3RtX3RvX3RpbWU2NChzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKK2V4dGVybiB2b2lkIHJ0Y190aW1lNjRfdG9fdG0odGltZTY0X3QgdGltZSwgc3RydWN0IHJ0Y190aW1lICp0bSk7CiBrdGltZV90IHJ0Y190bV90b19rdGltZShzdHJ1Y3QgcnRjX3RpbWUgdG0pOwogc3RydWN0IHJ0Y190aW1lIHJ0Y19rdGltZV90b190bShrdGltZV90IGt0KTsKIAorLyoqCisgKiBEZXByZWNhdGVkLiBVc2UgcnRjX3RpbWU2NF90b190bSgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcnRjX3RpbWVfdG9fdG0odW5zaWduZWQgbG9uZyB0aW1lLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXJ0Y190aW1lNjRfdG9fdG0odGltZSwgdG0pOworfQorCisvKioKKyAqIERlcHJlY2F0ZWQuIFVzZSBydGNfdG1fdG9fdGltZTY0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJ0Y190bV90b190aW1lKHN0cnVjdCBydGNfdGltZSAqdG0sIHVuc2lnbmVkIGxvbmcgKnRpbWUpCit7CisJKnRpbWUgPSBydGNfdG1fdG9fdGltZTY0KHRtKTsKKworCXJldHVybiAwOworfQogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA1ZTM0NGJiLi41NWY1ZWU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0yNDMsNiArMjQzLDQzIEBACiAJCQkJKCh0YXNrLT5zdGF0ZSAmIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSAhPSAwICYmIFwKIAkJCQkgKHRhc2stPmZsYWdzICYgUEZfRlJPWkVOKSA9PSAwKQogCisjaWZkZWYgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUAorCisjZGVmaW5lIF9fc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkJCQlcCisJZG8gewkJCQkJCQlcCisJCSh0c2spLT50YXNrX3N0YXRlX2NoYW5nZSA9IF9USElTX0lQXzsJCVwKKwkJKHRzayktPnN0YXRlID0gKHN0YXRlX3ZhbHVlKTsJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkJCQlcCisJZG8gewkJCQkJCQlcCisJCSh0c2spLT50YXNrX3N0YXRlX2NoYW5nZSA9IF9USElTX0lQXzsJCVwKKwkJc2V0X21iKCh0c2spLT5zdGF0ZSwgKHN0YXRlX3ZhbHVlKSk7CQlcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIHNldF9jdXJyZW50X3N0YXRlKCkgaW5jbHVkZXMgYSBiYXJyaWVyIHNvIHRoYXQgdGhlIHdyaXRlIG9mIGN1cnJlbnQtPnN0YXRlCisgKiBpcyBjb3JyZWN0bHkgc2VyaWFsaXNlZCB3cnQgdGhlIGNhbGxlcidzIHN1YnNlcXVlbnQgdGVzdCBvZiB3aGV0aGVyIHRvCisgKiBhY3R1YWxseSBzbGVlcDoKKyAqCisgKglzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisgKglpZiAoZG9faV9uZWVkX3RvX3NsZWVwKCkpCisgKgkJc2NoZWR1bGUoKTsKKyAqCisgKiBJZiB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgc3VjaCBzZXJpYWxpc2F0aW9uIHRoZW4gdXNlIF9fc2V0X2N1cnJlbnRfc3RhdGUoKQorICovCisjZGVmaW5lIF9fc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGVfdmFsdWUpCQkJXAorCWRvIHsJCQkJCQkJXAorCQljdXJyZW50LT50YXNrX3N0YXRlX2NoYW5nZSA9IF9USElTX0lQXzsJCVwKKwkJY3VycmVudC0+c3RhdGUgPSAoc3RhdGVfdmFsdWUpOwkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQljdXJyZW50LT50YXNrX3N0YXRlX2NoYW5nZSA9IF9USElTX0lQXzsJCVwKKwkJc2V0X21iKGN1cnJlbnQtPnN0YXRlLCAoc3RhdGVfdmFsdWUpKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZWxzZQorCiAjZGVmaW5lIF9fc2V0X3Rhc2tfc3RhdGUodHNrLCBzdGF0ZV92YWx1ZSkJCVwKIAlkbyB7ICh0c2spLT5zdGF0ZSA9IChzdGF0ZV92YWx1ZSk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHNldF90YXNrX3N0YXRlKHRzaywgc3RhdGVfdmFsdWUpCQlcCkBAIC0yNTksMTEgKzI5NiwxMyBAQAogICoKICAqIElmIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCBzdWNoIHNlcmlhbGlzYXRpb24gdGhlbiB1c2UgX19zZXRfY3VycmVudF9zdGF0ZSgpCiAgKi8KLSNkZWZpbmUgX19zZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkJCQlcCisjZGVmaW5lIF9fc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGVfdmFsdWUpCQlcCiAJZG8geyBjdXJyZW50LT5zdGF0ZSA9IChzdGF0ZV92YWx1ZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNldF9jdXJyZW50X3N0YXRlKHN0YXRlX3ZhbHVlKQkJXAorI2RlZmluZSBzZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkJCQlcCiAJc2V0X21iKGN1cnJlbnQtPnN0YXRlLCAoc3RhdGVfdmFsdWUpKQogCisjZW5kaWYKKwogLyogVGFzayBjb21tYW5kIG5hbWUgbGVuZ3RoICovCiAjZGVmaW5lIFRBU0tfQ09NTV9MRU4gMTYKIApAQCAtMTI3OCw5ICsxMzE3LDkgQEAKIAl1bmlvbiByY3Vfc3BlY2lhbCByY3VfcmVhZF91bmxvY2tfc3BlY2lhbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJjdV9ub2RlX2VudHJ5OwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUFJFRU1QVF9SQ1UgKi8KLSNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVQogCXN0cnVjdCByY3Vfbm9kZSAqcmN1X2Jsb2NrZWRfbm9kZTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVICovCiAjaWZkZWYgQ09ORklHX1RBU0tTX1JDVQogCXVuc2lnbmVkIGxvbmcgcmN1X3Rhc2tzX252Y3N3OwogCWJvb2wgcmN1X3Rhc2tzX2hvbGRvdXQ7CkBAIC0xNTU4LDI4ICsxNTk3LDIzIEBACiAJc3RydWN0IG51bWFfZ3JvdXAgKm51bWFfZ3JvdXA7CiAKIAkvKgotCSAqIEV4cG9uZW50aWFsIGRlY2F5aW5nIGF2ZXJhZ2Ugb2YgZmF1bHRzIG9uIGEgcGVyLW5vZGUgYmFzaXMuCi0JICogU2NoZWR1bGluZyBwbGFjZW1lbnQgZGVjaXNpb25zIGFyZSBtYWRlIGJhc2VkIG9uIHRoZSB0aGVzZSBjb3VudHMuCi0JICogVGhlIHZhbHVlcyByZW1haW4gc3RhdGljIGZvciB0aGUgZHVyYXRpb24gb2YgYSBQVEUgc2NhbgorCSAqIG51bWFfZmF1bHRzIGlzIGFuIGFycmF5IHNwbGl0IGludG8gZm91ciByZWdpb25zOgorCSAqIGZhdWx0c19tZW1vcnksIGZhdWx0c19jcHUsIGZhdWx0c19tZW1vcnlfYnVmZmVyLCBmYXVsdHNfY3B1X2J1ZmZlcgorCSAqIGluIHRoaXMgcHJlY2lzZSBvcmRlci4KKwkgKgorCSAqIGZhdWx0c19tZW1vcnk6IEV4cG9uZW50aWFsIGRlY2F5aW5nIGF2ZXJhZ2Ugb2YgZmF1bHRzIG9uIGEgcGVyLW5vZGUKKwkgKiBiYXNpcy4gU2NoZWR1bGluZyBwbGFjZW1lbnQgZGVjaXNpb25zIGFyZSBtYWRlIGJhc2VkIG9uIHRoZXNlCisJICogY291bnRzLiBUaGUgdmFsdWVzIHJlbWFpbiBzdGF0aWMgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIFBURSBzY2FuLgorCSAqIGZhdWx0c19jcHU6IFRyYWNrIHRoZSBub2RlcyB0aGUgcHJvY2VzcyB3YXMgcnVubmluZyBvbiB3aGVuIGEgTlVNQQorCSAqIGhpbnRpbmcgZmF1bHQgd2FzIGluY3VycmVkLgorCSAqIGZhdWx0c19tZW1vcnlfYnVmZmVyIGFuZCBmYXVsdHNfY3B1X2J1ZmZlcjogUmVjb3JkIGZhdWx0cyBwZXIgbm9kZQorCSAqIGR1cmluZyB0aGUgY3VycmVudCBzY2FuIHdpbmRvdy4gV2hlbiB0aGUgc2NhbiBjb21wbGV0ZXMsIHRoZSBjb3VudHMKKwkgKiBpbiBmYXVsdHNfbWVtb3J5IGFuZCBmYXVsdHNfY3B1IGRlY2F5IGFuZCB0aGVzZSB2YWx1ZXMgYXJlIGNvcGllZC4KIAkgKi8KLQl1bnNpZ25lZCBsb25nICpudW1hX2ZhdWx0c19tZW1vcnk7CisJdW5zaWduZWQgbG9uZyAqbnVtYV9mYXVsdHM7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9udW1hX2ZhdWx0czsKIAogCS8qCi0JICogbnVtYV9mYXVsdHNfYnVmZmVyIHJlY29yZHMgZmF1bHRzIHBlciBub2RlIGR1cmluZyB0aGUgY3VycmVudAotCSAqIHNjYW4gd2luZG93LiBXaGVuIHRoZSBzY2FuIGNvbXBsZXRlcywgdGhlIGNvdW50cyBpbgotCSAqIG51bWFfZmF1bHRzX21lbW9yeSBkZWNheSBhbmQgdGhlc2UgdmFsdWVzIGFyZSBjb3BpZWQuCi0JICovCi0JdW5zaWduZWQgbG9uZyAqbnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeTsKLQotCS8qCi0JICogVHJhY2sgdGhlIG5vZGVzIHRoZSBwcm9jZXNzIHdhcyBydW5uaW5nIG9uIHdoZW4gYSBOVU1BIGhpbnRpbmcKLQkgKiBmYXVsdCB3YXMgaW5jdXJyZWQuCi0JICovCi0JdW5zaWduZWQgbG9uZyAqbnVtYV9mYXVsdHNfY3B1OwotCXVuc2lnbmVkIGxvbmcgKm51bWFfZmF1bHRzX2J1ZmZlcl9jcHU7Ci0KLQkvKgogCSAqIG51bWFfZmF1bHRzX2xvY2FsaXR5IHRyYWNrcyBpZiBmYXVsdHMgcmVjb3JkZWQgZHVyaW5nIHRoZSBsYXN0CiAJICogc2NhbiB3aW5kb3cgd2VyZSByZW1vdGUvbG9jYWwuIFRoZSB0YXNrIHNjYW4gcGVyaW9kIGlzIGFkYXB0ZWQKIAkgKiBiYXNlZCBvbiB0aGUgbG9jYWxpdHkgb2YgdGhlIGZhdWx0cyB3aXRoIGRpZmZlcmVudCB3ZWlnaHRzCkBAIC0xNjYxLDYgKzE2OTUsOSBAQAogCXVuc2lnbmVkIGludAlzZXF1ZW50aWFsX2lvOwogCXVuc2lnbmVkIGludAlzZXF1ZW50aWFsX2lvX2F2ZzsKICNlbmRpZgorI2lmZGVmIENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVAKKwl1bnNpZ25lZCBsb25nCXRhc2tfc3RhdGVfY2hhbmdlOworI2VuZGlmCiB9OwogCiAvKiBGdXR1cmUtc2FmZSBhY2Nlc3NvciBmb3Igc3RydWN0IHRhc2tfc3RydWN0J3MgY3B1c19hbGxvd2VkLiAqLwpAQCAtMjA1Miw2ICsyMDg5LDEwIEBACiAJdGFzay0+ZmxhZ3MgfD0gb3JpZ19mbGFncyAmIGZsYWdzOwogfQogCitleHRlcm4gaW50IGNwdXNldF9jcHVtYXNrX2Nhbl9zaHJpbmsoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmN1ciwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp0cmlhbCk7CitleHRlcm4gaW50IHRhc2tfY2FuX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCisJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3NfY3B1c19hbGxvd2VkKTsKICNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gdm9pZCBkb19zZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc2spOwpAQCAtMjc2MCw3ICsyODAxLDcgQEAKIGV4dGVybiBpbnQgX2NvbmRfcmVzY2hlZCh2b2lkKTsKIAogI2RlZmluZSBjb25kX3Jlc2NoZWQoKSAoewkJCVwKLQlfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgMCk7CVwKKwlfX19taWdodF9zbGVlcChfX0ZJTEVfXywgX19MSU5FX18sIDApOwlcCiAJX2NvbmRfcmVzY2hlZCgpOwkJCVwKIH0pCiAKQEAgLTI3NzMsMTQgKzI4MTQsMTQgQEAKICNlbmRpZgogCiAjZGVmaW5lIGNvbmRfcmVzY2hlZF9sb2NrKGxvY2spICh7CQkJCVwKLQlfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgUFJFRU1QVF9MT0NLX09GRlNFVCk7CVwKKwlfX19taWdodF9zbGVlcChfX0ZJTEVfXywgX19MSU5FX18sIFBSRUVNUFRfTE9DS19PRkZTRVQpO1wKIAlfX2NvbmRfcmVzY2hlZF9sb2NrKGxvY2spOwkJCQlcCiB9KQogCiBleHRlcm4gaW50IF9fY29uZF9yZXNjaGVkX3NvZnRpcnEodm9pZCk7CiAKICNkZWZpbmUgY29uZF9yZXNjaGVkX3NvZnRpcnEoKSAoewkJCQkJXAotCV9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fLCBTT0ZUSVJRX0RJU0FCTEVfT0ZGU0VUKTsJXAorCV9fX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgU09GVElSUV9ESVNBQkxFX09GRlNFVCk7CVwKIAlfX2NvbmRfcmVzY2hlZF9zb2Z0aXJxKCk7CQkJCQlcCiB9KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcV9idWYuaCBiL2luY2x1ZGUvbGludXgvc2VxX2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYWZlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcV9idWYuaApAQCAtMCwwICsxLDEzNiBAQAorI2lmbmRlZiBfTElOVVhfU0VRX0JVRl9ICisjZGVmaW5lIF9MSU5VWF9TRVFfQlVGX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKKy8qCisgKiBUcmFjZSBzZXF1ZW5jZXMgYXJlIHVzZWQgdG8gYWxsb3cgYSBmdW5jdGlvbiB0byBjYWxsIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zCisgKiB0byBjcmVhdGUgYSBzdHJpbmcgb2YgZGF0YSB0byB1c2UuCisgKi8KKworLyoqCisgKiBzZXFfYnVmIC0gc2VxIGJ1ZmZlciBzdHJ1Y3R1cmUKKyAqIEBidWZmZXI6CXBvaW50ZXIgdG8gdGhlIGJ1ZmZlcgorICogQHNpemU6CXNpemUgb2YgdGhlIGJ1ZmZlcgorICogQGxlbjoJdGhlIGFtb3VudCBvZiBkYXRhIGluc2lkZSB0aGUgYnVmZmVyCisgKiBAcmVhZHBvczoJVGhlIG5leHQgcG9zaXRpb24gdG8gcmVhZCBpbiB0aGUgYnVmZmVyLgorICovCitzdHJ1Y3Qgc2VxX2J1ZiB7CisJY2hhcgkJCSpidWZmZXI7CisJc2l6ZV90CQkJc2l6ZTsKKwlzaXplX3QJCQlsZW47CisJbG9mZl90CQkJcmVhZHBvczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXFfYnVmX2NsZWFyKHN0cnVjdCBzZXFfYnVmICpzKQoreworCXMtPmxlbiA9IDA7CisJcy0+cmVhZHBvcyA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2VxX2J1Zl9pbml0KHN0cnVjdCBzZXFfYnVmICpzLCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBzaXplKQoreworCXMtPmJ1ZmZlciA9IGJ1ZjsKKwlzLT5zaXplID0gc2l6ZTsKKwlzZXFfYnVmX2NsZWFyKHMpOworfQorCisvKgorICogc2VxX2J1ZiBoYXZlIGEgYnVmZmVyIHRoYXQgbWlnaHQgb3ZlcmZsb3cuIFdoZW4gdGhpcyBoYXBwZW5zCisgKiB0aGUgbGVuIGFuZCBzaXplIGFyZSBzZXQgdG8gYmUgZXF1YWwuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorc2VxX2J1Zl9oYXNfb3ZlcmZsb3dlZChzdHJ1Y3Qgc2VxX2J1ZiAqcykKK3sKKwlyZXR1cm4gcy0+bGVuID4gcy0+c2l6ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzZXFfYnVmX3NldF9vdmVyZmxvdyhzdHJ1Y3Qgc2VxX2J1ZiAqcykKK3sKKwlzLT5sZW4gPSBzLT5zaXplICsgMTsKK30KKworLyoKKyAqIEhvdyBtdWNoIGJ1ZmZlciBpcyBsZWZ0IG9uIHRoZSBzZXFfYnVmPworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorc2VxX2J1Zl9idWZmZXJfbGVmdChzdHJ1Y3Qgc2VxX2J1ZiAqcykKK3sKKwlpZiAoc2VxX2J1Zl9oYXNfb3ZlcmZsb3dlZChzKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcy0+c2l6ZSAtIHMtPmxlbjsKK30KKworLyogSG93IG11Y2ggYnVmZmVyIHdhcyB3cml0dGVuPyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2VxX2J1Zl91c2VkKHN0cnVjdCBzZXFfYnVmICpzKQoreworCXJldHVybiBtaW4ocy0+bGVuLCBzLT5zaXplKTsKK30KKworLyoqCisgKiBzZXFfYnVmX2dldF9idWYgLSBnZXQgYnVmZmVyIHRvIHdyaXRlIGFyYml0cmFyeSBkYXRhIHRvCisgKiBAczogdGhlIHNlcV9idWYgaGFuZGxlCisgKiBAYnVmcDogdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIGlzIHN0b3JlZCBoZXJlCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBidWZmZXIsIG9yIHplcm8gaWYKKyAqIHRoZXJlJ3Mgbm8gc3BhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNlcV9idWZfZ2V0X2J1ZihzdHJ1Y3Qgc2VxX2J1ZiAqcywgY2hhciAqKmJ1ZnApCit7CisJV0FSTl9PTihzLT5sZW4gPiBzLT5zaXplICsgMSk7CisKKwlpZiAocy0+bGVuIDwgcy0+c2l6ZSkgeworCQkqYnVmcCA9IHMtPmJ1ZmZlciArIHMtPmxlbjsKKwkJcmV0dXJuIHMtPnNpemUgLSBzLT5sZW47CisJfQorCisJKmJ1ZnAgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKioKKyAqIHNlcV9idWZfY29tbWl0IC0gY29tbWl0IGRhdGEgdG8gdGhlIGJ1ZmZlcgorICogQHM6IHRoZSBzZXFfYnVmIGhhbmRsZQorICogQG51bTogdGhlIG51bWJlciBvZiBieXRlcyB0byBjb21taXQKKyAqCisgKiBDb21taXQgQG51bSBieXRlcyBvZiBkYXRhIHdyaXR0ZW4gdG8gYSBidWZmZXIgcHJldmlvdXNseSBhY3F1aXJlZAorICogYnkgc2VxX2J1Zl9nZXQuICBUbyBzaWduYWwgYW4gZXJyb3IgY29uZGl0aW9uLCBvciB0aGF0IHRoZSBkYXRhCisgKiBkaWRuJ3QgZml0IGluIHRoZSBhdmFpbGFibGUgc3BhY2UsIHBhc3MgYSBuZWdhdGl2ZSBAbnVtIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2VxX2J1Zl9jb21taXQoc3RydWN0IHNlcV9idWYgKnMsIGludCBudW0pCit7CisJaWYgKG51bSA8IDApIHsKKwkJc2VxX2J1Zl9zZXRfb3ZlcmZsb3cocyk7CisJfSBlbHNlIHsKKwkJLyogbnVtIG11c3QgYmUgbmVnYXRpdmUgb24gb3ZlcmZsb3cgKi8KKwkJQlVHX09OKHMtPmxlbiArIG51bSA+IHMtPnNpemUpOworCQlzLT5sZW4gKz0gbnVtOworCX0KK30KKworZXh0ZXJuIF9fcHJpbnRmKDIsIDMpCitpbnQgc2VxX2J1Zl9wcmludGYoc3RydWN0IHNlcV9idWYgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiBfX3ByaW50ZigyLCAwKQoraW50IHNlcV9idWZfdnByaW50ZihzdHJ1Y3Qgc2VxX2J1ZiAqcywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOworZXh0ZXJuIGludCBzZXFfYnVmX3ByaW50X3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBzZXFfYnVmICpzKTsKK2V4dGVybiBpbnQgc2VxX2J1Zl90b191c2VyKHN0cnVjdCBzZXFfYnVmICpzLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSAgIGludCBjbnQpOworZXh0ZXJuIGludCBzZXFfYnVmX3B1dHMoc3RydWN0IHNlcV9idWYgKnMsIGNvbnN0IGNoYXIgKnN0cik7CitleHRlcm4gaW50IHNlcV9idWZfcHV0YyhzdHJ1Y3Qgc2VxX2J1ZiAqcywgdW5zaWduZWQgY2hhciBjKTsKK2V4dGVybiBpbnQgc2VxX2J1Zl9wdXRtZW0oc3RydWN0IHNlcV9idWYgKnMsIGNvbnN0IHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IGxlbik7CitleHRlcm4gaW50IHNlcV9idWZfcHV0bWVtX2hleChzdHJ1Y3Qgc2VxX2J1ZiAqcywgY29uc3Qgdm9pZCAqbWVtLAorCQkJICAgICAgdW5zaWduZWQgaW50IGxlbik7CitleHRlcm4gaW50IHNlcV9idWZfcGF0aChzdHJ1Y3Qgc2VxX2J1ZiAqcywgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IGNoYXIgKmVzYyk7CisKK2V4dGVybiBpbnQgc2VxX2J1Zl9iaXRtYXNrKHN0cnVjdCBzZXFfYnVmICpzLCBjb25zdCB1bnNpZ25lZCBsb25nICptYXNrcCwKKwkJCSAgIGludCBubWFza2JpdHMpOworCisjaWZkZWYgQ09ORklHX0JJTkFSWV9QUklOVEYKK2V4dGVybiBpbnQKK3NlcV9idWZfYnByaW50ZihzdHJ1Y3Qgc2VxX2J1ZiAqcywgY29uc3QgY2hhciAqZm10LCBjb25zdCB1MzIgKmJpbmFyeSk7CisjZW5kaWYKKworI2VuZGlmIC8qIF9MSU5VWF9TRVFfQlVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaAppbmRleCA1MmUwMDk3Li5jZjZhOWRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCkBAIC00Myw2ICs0MywyMSBAQAogI2RlZmluZSBTRVFfU0tJUCAxCiAKIC8qKgorICogc2VxX2hhc19vdmVyZmxvd2VkIC0gY2hlY2sgaWYgdGhlIGJ1ZmZlciBoYXMgb3ZlcmZsb3dlZAorICogQG06IHRoZSBzZXFfZmlsZSBoYW5kbGUKKyAqCisgKiBzZXFfZmlsZXMgaGF2ZSBhIGJ1ZmZlciB3aGljaCBtYXkgb3ZlcmZsb3cuIFdoZW4gdGhpcyBoYXBwZW5zIGEgbGFyZ2VyCisgKiBidWZmZXIgaXMgcmVhbGxvY2F0ZWQgYW5kIGFsbCB0aGUgZGF0YSB3aWxsIGJlIHByaW50ZWQgYWdhaW4uCisgKiBUaGUgb3ZlcmZsb3cgc3RhdGUgaXMgdHJ1ZSB3aGVuIG0tPmNvdW50ID09IG0tPnNpemUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgcmVjZWl2ZWQgbW9yZSB0aGFuIGl0IGNhbiBob2xkLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgc2VxX2hhc19vdmVyZmxvd2VkKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlyZXR1cm4gbS0+Y291bnQgPT0gbS0+c2l6ZTsKK30KKworLyoqCiAgKiBzZXFfZ2V0X2J1ZiAtIGdldCBidWZmZXIgdG8gd3JpdGUgYXJiaXRyYXJ5IGRhdGEgdG8KICAqIEBtOiB0aGUgc2VxX2ZpbGUgaGFuZGxlCiAgKiBAYnVmcDogdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIGlzIHN0b3JlZCBoZXJlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IGMyNjViZWMuLjhhMjQ1N2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC01MTMsMTAgKzUxMyw2IEBACiAKIGludCBtZW1jZ191cGRhdGVfYWxsX2NhY2hlcyhpbnQgbnVtX21lbWNncyk7CiAKLXN0cnVjdCBzZXFfZmlsZTsKLWludCBjYWNoZV9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOwotdm9pZCBwcmludF9zbGFiaW5mb19oZWFkZXIoc3RydWN0IHNlcV9maWxlICptKTsKLQogLyoqCiAgKiBrbWFsbG9jX2FycmF5IC0gYWxsb2NhdGUgbWVtb3J5IGZvciBhbiBhcnJheS4KICAqIEBuOiBudW1iZXIgb2YgZWxlbWVudHMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKaW5kZXggOGUwMzAwNy4uYTdjYmI1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaApAQCAtNTMsNyArNTMsNyBAQAogCXN0cnVjdCByY3VfaGVhZAkJY3JfcmN1OwogCXN0cnVjdCBycGNfYXV0aCAqCWNyX2F1dGg7CiAJY29uc3Qgc3RydWN0IHJwY19jcmVkb3BzICpjcl9vcHM7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCXVuc2lnbmVkIGxvbmcJCWNyX21hZ2ljOwkvKiAweDBmNGFhNGYwICovCiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nCQljcl9leHBpcmU7CS8qIHdoZW4gdG8gZ2MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaAppbmRleCA3MDczNmI5Li5kODZhY2M2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCkBAIC02Myw2ICs2Myw5IEBACiAJc3RydWN0IHJwY19ydHQJCWNsX3J0dF9kZWZhdWx0OwogCXN0cnVjdCBycGNfdGltZW91dAljbF90aW1lb3V0X2RlZmF1bHQ7CiAJY29uc3Qgc3RydWN0IHJwY19wcm9ncmFtICpjbF9wcm9ncmFtOworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKKwlzdHJ1Y3QgZGVudHJ5CQkqY2xfZGVidWdmczsJLyogZGVidWdmcyBkaXJlY3RvcnkgKi8KKyNlbmRpZgogfTsKIAogLyoKQEAgLTE3Niw1ICsxNzksNiBAQAogY29uc3QgY2hhcgkqcnBjX3BlZXJhZGRyMnN0cihzdHJ1Y3QgcnBjX2NsbnQgKiwgZW51bSBycGNfZGlzcGxheV9mb3JtYXRfdCk7CiBpbnQJCXJwY19sb2NhbGFkZHIoc3RydWN0IHJwY19jbG50ICosIHN0cnVjdCBzb2NrYWRkciAqLCBzaXplX3QpOwogCitjb25zdCBjaGFyICpycGNfcHJvY19uYW1lKGNvbnN0IHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfQ0xOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvZGVidWcuaAppbmRleCA5Mzg1YmQ3Li5jNTdkOGVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKQEAgLTEwLDIyICsxMCwxMCBAQAogCiAjaW5jbHVkZSA8dWFwaS9saW51eC9zdW5ycGMvZGVidWcuaD4KIAotCi0vKgotICogRW5hYmxlIFJQQyBkZWJ1Z2dpbmcvcHJvZmlsaW5nLgotICovCi0jaWZkZWYgQ09ORklHX1NVTlJQQ19ERUJVRwotI2RlZmluZSAgUlBDX0RFQlVHCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLSNkZWZpbmUgUlBDX1RSQUNFUE9JTlRTCi0jZW5kaWYKLS8qICNkZWZpbmUgIFJQQ19QUk9GSUxFICovCi0KIC8qCiAgKiBEZWJ1Z2dpbmcgbWFjcm9zIGV0YwogICovCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogZXh0ZXJuIHVuc2lnbmVkIGludAkJcnBjX2RlYnVnOwogZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzX2RlYnVnOwogZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzZF9kZWJ1ZzsKQEAgLTM2LDcgKzI0LDcgQEAKICNkZWZpbmUgZHByaW50a19yY3UoYXJncy4uLikJZGZwcmludGtfcmN1KEZBQ0lMSVRZLCAjIyBhcmdzKQogCiAjdW5kZWYgaWZkZWJ1ZwotI2lmZGVmIFJQQ19ERUJVRwkJCQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIGlmZGVidWcoZmFjKQkJaWYgKHVubGlrZWx5KHJwY19kZWJ1ZyAmIFJQQ0RCR18jI2ZhYykpCiAKICMgZGVmaW5lIGRmcHJpbnRrKGZhYywgYXJncy4uLikJXApAQCAtNjUsOSArNTMsNTUgQEAKIC8qCiAgKiBTeXNjdGwgaW50ZXJmYWNlIGZvciBSUEMgZGVidWdnaW5nCiAgKi8KLSNpZmRlZiBSUENfREVCVUcKKworc3RydWN0IHJwY19jbG50Oworc3RydWN0IHJwY194cHJ0OworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogdm9pZAkJcnBjX3JlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKIHZvaWQJCXJwY191bnJlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKK2ludAkJc3VucnBjX2RlYnVnZnNfaW5pdCh2b2lkKTsKK3ZvaWQJCXN1bnJwY19kZWJ1Z2ZzX2V4aXQodm9pZCk7CitpbnQJCXJwY19jbG50X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHJwY19jbG50ICopOwordm9pZAkJcnBjX2NsbnRfZGVidWdmc191bnJlZ2lzdGVyKHN0cnVjdCBycGNfY2xudCAqKTsKK2ludAkJcnBjX3hwcnRfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcnBjX3hwcnQgKik7Cit2b2lkCQlycGNfeHBydF9kZWJ1Z2ZzX3VucmVnaXN0ZXIoc3RydWN0IHJwY194cHJ0ICopOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50CitzdW5ycGNfZGVidWdmc19pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc3VucnBjX2RlYnVnZnNfZXhpdCh2b2lkKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JwY19jbG50X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHJwY19jbG50ICpjbG50KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3JwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludAorcnBjX3hwcnRfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcnBjX3hwcnRfZGVidWdmc191bnJlZ2lzdGVyKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3sKKwlyZXR1cm47Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaAppbmRleCAxNTY1YmJlLi5lZWNiNWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tZXRyaWNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvbWV0cmljcy5oCkBAIC0yNywxMCArMjcsMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjZGVmaW5lIFJQQ19JT1NUQVRTX1ZFUlMJIjEuMCIKIAogc3RydWN0IHJwY19pb3N0YXRzIHsKKwlzcGlubG9ja190CQlvbV9sb2NrOworCiAJLyoKIAkgKiBUaGVzZSBjb3VudGVycyBnaXZlIGFuIGlkZWEgYWJvdXQgaG93IG1hbnkgcmVxdWVzdAogCSAqIHRyYW5zbWlzc2lvbnMgYXJlIHJlcXVpcmVkLCBvbiBhdmVyYWdlLCB0byBjb21wbGV0ZSB0aGF0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaAppbmRleCAxYTg5NTk5Li41ZjFlNmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKQEAgLTc5LDcgKzc5LDcgQEAKIAl1bnNpZ25lZCBzaG9ydAkJdGtfZmxhZ3M7CS8qIG1pc2MgZmxhZ3MgKi8KIAl1bnNpZ25lZCBzaG9ydAkJdGtfdGltZW91dHM7CS8qIG1haiB0aW1lb3V0cyAqLwogCi0jaWYgZGVmaW5lZChSUENfREVCVUcpIHx8IGRlZmluZWQoUlBDX1RSQUNFUE9JTlRTKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykgfHwgSVNfRU5BQkxFRChDT05GSUdfVFJBQ0VQT0lOVFMpCiAJdW5zaWduZWQgc2hvcnQJCXRrX3BpZDsJCS8qIGRlYnVnZ2luZyBhaWQgKi8KICNlbmRpZgogCXVuc2lnbmVkIGNoYXIJCXRrX3ByaW9yaXR5IDogMiwvKiBUYXNrIHByaW9yaXR5ICovCkBAIC0xODcsNyArMTg3LDcgQEAKIAl1bnNpZ25lZCBjaGFyCQlucjsJCQkvKiAjIHRhc2tzIHJlbWFpbmluZyBmb3IgY29va2llICovCiAJdW5zaWduZWQgc2hvcnQJCXFsZW47CQkJLyogdG90YWwgIyB0YXNrcyB3YWl0aW5nIGluIHF1ZXVlICovCiAJc3RydWN0IHJwY190aW1lcgl0aW1lcl9saXN0OwotI2lmIGRlZmluZWQoUlBDX0RFQlVHKSB8fCBkZWZpbmVkKFJQQ19UUkFDRVBPSU5UUykKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpIHx8IElTX0VOQUJMRUQoQ09ORklHX1RSQUNFUE9JTlRTKQogCWNvbnN0IGNoYXIgKgkJbmFtZTsKICNlbmRpZgogfTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogaW50CQlycGNpb2RfdXAodm9pZCk7CiB2b2lkCQlycGNpb2RfZG93bih2b2lkKTsKIGludAkJX19ycGNfd2FpdF9mb3JfY29tcGxldGlvbl90YXNrKHN0cnVjdCBycGNfdGFzayAqdGFzaywgd2FpdF9iaXRfYWN0aW9uX2YgKik7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogc3RydWN0IG5ldDsKIHZvaWQJCXJwY19zaG93X3Rhc2tzKHN0cnVjdCBuZXQgKik7CiAjZW5kaWYKQEAgLTI1MSw3ICsyNTEsNyBAQAogCXJldHVybiBfX3JwY193YWl0X2Zvcl9jb21wbGV0aW9uX3Rhc2sodGFzaywgTlVMTCk7CiB9CiAKLSNpZiBkZWZpbmVkKFJQQ19ERUJVRykgfHwgZGVmaW5lZCAoUlBDX1RSQUNFUE9JTlRTKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykgfHwgSVNfRU5BQkxFRChDT05GSUdfVFJBQ0VQT0lOVFMpCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKiBycGNfcW5hbWUoY29uc3Qgc3RydWN0IHJwY193YWl0X3F1ZXVlICpxKQogewogCXJldHVybiAoKHEgJiYgcS0+bmFtZSkgPyBxLT5uYW1lIDogInVua25vd24iKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAppbmRleCBjZjM5MWVlLi45ZDI3YWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCkBAIC0yMzksNiArMjM5LDkgQEAKIAlzdHJ1Y3QgbmV0CQkqeHBydF9uZXQ7CiAJY29uc3QgY2hhcgkJKnNlcnZlcm5hbWU7CiAJY29uc3QgY2hhcgkJKmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9NQVhdOworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmczsJCS8qIGRlYnVnZnMgZGlyZWN0b3J5ICovCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TVU5SUENfQkFDS0NIQU5ORUwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0c29jay5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHNvY2suaAppbmRleCAxYWQzNmNjLi43NTkxNzg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0c29jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRzb2NrLmgKQEAgLTE3LDYgKzE3LDY1IEBACiAjZGVmaW5lIFJQQ19ERUZfTUlOX1JFU1ZQT1JUCSg2NjVVKQogI2RlZmluZSBSUENfREVGX01BWF9SRVNWUE9SVAkoMTAyM1UpCiAKK3N0cnVjdCBzb2NrX3hwcnQgeworCXN0cnVjdCBycGNfeHBydAkJeHBydDsKKworCS8qCisJICogTmV0d29yayBsYXllcgorCSAqLworCXN0cnVjdCBzb2NrZXQgKgkJc29jazsKKwlzdHJ1Y3Qgc29jayAqCQlpbmV0OworCisJLyoKKwkgKiBTdGF0ZSBvZiBUQ1AgcmVwbHkgcmVjZWl2ZQorCSAqLworCV9fYmUzMgkJCXRjcF9mcmFnaGRyLAorCQkJCXRjcF94aWQsCisJCQkJdGNwX2NhbGxkaXI7CisKKwl1MzIJCQl0Y3Bfb2Zmc2V0LAorCQkJCXRjcF9yZWNsZW47CisKKwl1bnNpZ25lZCBsb25nCQl0Y3BfY29waWVkLAorCQkJCXRjcF9mbGFnczsKKworCS8qCisJICogQ29ubmVjdGlvbiBvZiB0cmFuc3BvcnRzCisJICovCisJc3RydWN0IGRlbGF5ZWRfd29yawljb25uZWN0X3dvcmtlcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQlzcmNhZGRyOworCXVuc2lnbmVkIHNob3J0CQlzcmNwb3J0OworCisJLyoKKwkgKiBVRFAgc29ja2V0IGJ1ZmZlciBzaXplIHBhcmFtZXRlcnMKKwkgKi8KKwlzaXplX3QJCQlyY3ZzaXplLAorCQkJCXNuZHNpemU7CisKKwkvKgorCSAqIFNhdmVkIHNvY2tldCBjYWxsYmFjayBhZGRyZXNzZXMKKwkgKi8KKwl2b2lkCQkJKCpvbGRfZGF0YV9yZWFkeSkoc3RydWN0IHNvY2sgKik7CisJdm9pZAkJCSgqb2xkX3N0YXRlX2NoYW5nZSkoc3RydWN0IHNvY2sgKik7CisJdm9pZAkJCSgqb2xkX3dyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqKTsKKwl2b2lkCQkJKCpvbGRfZXJyb3JfcmVwb3J0KShzdHJ1Y3Qgc29jayAqKTsKK307CisKKy8qCisgKiBUQ1AgcmVjZWl2ZSBzdGF0ZSBmbGFncworICovCisjZGVmaW5lIFRDUF9SQ1ZfTEFTVF9GUkFHCSgxVUwgPDwgMCkKKyNkZWZpbmUgVENQX1JDVl9DT1BZX0ZSQUdIRFIJKDFVTCA8PCAxKQorI2RlZmluZSBUQ1BfUkNWX0NPUFlfWElECSgxVUwgPDwgMikKKyNkZWZpbmUgVENQX1JDVl9DT1BZX0RBVEEJKDFVTCA8PCAzKQorI2RlZmluZSBUQ1BfUkNWX1JFQURfQ0FMTERJUgkoMVVMIDw8IDQpCisjZGVmaW5lIFRDUF9SQ1ZfQ09QWV9DQUxMRElSCSgxVUwgPDwgNSkKKworLyoKKyAqIFRDUCBSUEMgZmxhZ3MKKyAqLworI2RlZmluZSBUQ1BfUlBDX1JFUExZCQkoMVVMIDw8IDYpCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfTElOVVhfU1VOUlBDX1hQUlRTT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcF9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcF9jZ3JvdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDUzMDZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX19MSU5VWF9TV0FQX0NHUk9VUF9ICisjZGVmaW5lIF9fTElOVVhfU1dBUF9DR1JPVVBfSAorCisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorCisjaWZkZWYgQ09ORklHX01FTUNHX1NXQVAKKworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX2NtcHhjaGcoc3dwX2VudHJ5X3QgZW50LAorCQkJCQl1bnNpZ25lZCBzaG9ydCBvbGQsIHVuc2lnbmVkIHNob3J0IG5ldyk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpOworZXh0ZXJuIGludCBzd2FwX2Nncm91cF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbWF4X3BhZ2VzKTsKK2V4dGVybiB2b2lkIHN3YXBfY2dyb3VwX3N3YXBvZmYoaW50IHR5cGUpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lCit1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZQordW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwX2lkKHN3cF9lbnRyeV90IGVudCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3N3YXBfY2dyb3VwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBtYXhfcGFnZXMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2Nncm91cF9zd2Fwb2ZmKGludCB0eXBlKQoreworCXJldHVybjsKK30KKworI2VuZGlmIC8qIENPTkZJR19NRU1DR19TV0FQICovCisKKyNlbmRpZiAvKiBfX0xJTlVYX1NXQVBfQ0dST1VQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzbG9nLmggYi9pbmNsdWRlL2xpbnV4L3N5c2xvZy5oCmluZGV4IDk4YTMxNTMuLjRiN2I4NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzbG9nLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNsb2cuaApAQCAtNDksNCArNDksMTMgQEAKIAogaW50IGRvX3N5c2xvZyhpbnQgdHlwZSwgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGNvdW50LCBib29sIGZyb21fZmlsZSk7CiAKKyNpZmRlZiBDT05GSUdfUFJJTlRLCitpbnQgY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKGludCB0eXBlLCBib29sIGZyb21fZmlsZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogX0xJTlVYX1NZU0xPR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IDhjNDJjZjguLjIwM2MyYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC0zOSw5ICszOSwyMCBAQAogCXJldHVybiBsaHMtPnR2X3VzZWMgLSByaHMtPnR2X3VzZWM7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1rdGltZShjb25zdCB1bnNpZ25lZCBpbnQgeWVhciwgY29uc3QgdW5zaWduZWQgaW50IG1vbiwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgZGF5LCBjb25zdCB1bnNpZ25lZCBpbnQgaG91ciwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWluLCBjb25zdCB1bnNpZ25lZCBpbnQgc2VjKTsKK2V4dGVybiB0aW1lNjRfdCBta3RpbWU2NChjb25zdCB1bnNpZ25lZCBpbnQgeWVhciwgY29uc3QgdW5zaWduZWQgaW50IG1vbiwKKwkJCWNvbnN0IHVuc2lnbmVkIGludCBkYXksIGNvbnN0IHVuc2lnbmVkIGludCBob3VyLAorCQkJY29uc3QgdW5zaWduZWQgaW50IG1pbiwgY29uc3QgdW5zaWduZWQgaW50IHNlYyk7CisKKy8qKgorICogRGVwcmVjYXRlZC4gVXNlIG1rdGltZTY0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBta3RpbWUoY29uc3QgdW5zaWduZWQgaW50IHllYXIsCisJCQljb25zdCB1bnNpZ25lZCBpbnQgbW9uLCBjb25zdCB1bnNpZ25lZCBpbnQgZGF5LAorCQkJY29uc3QgdW5zaWduZWQgaW50IGhvdXIsIGNvbnN0IHVuc2lnbmVkIGludCBtaW4sCisJCQljb25zdCB1bnNpZ25lZCBpbnQgc2VjKQoreworCXJldHVybiBta3RpbWU2NCh5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWMpOworfQogCiBleHRlcm4gdm9pZCBzZXRfbm9ybWFsaXplZF90aW1lc3BlYyhzdHJ1Y3QgdGltZXNwZWMgKnRzLCB0aW1lX3Qgc2VjLCBzNjQgbnNlYyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZWtlZXBlcl9pbnRlcm5hbC5oIGIvaW5jbHVkZS9saW51eC90aW1la2VlcGVyX2ludGVybmFsLmgKaW5kZXggOTU2NDBkYy4uMDVhZjlhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1la2VlcGVyX2ludGVybmFsLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1la2VlcGVyX2ludGVybmFsLmgKQEAgLTQyLDYgKzQyLDcgQEAKICAqIHN0cnVjdCB0aW1la2VlcGVyIC0gU3RydWN0dXJlIGhvbGRpbmcgaW50ZXJuYWwgdGltZWtlZXBpbmcgdmFsdWVzLgogICogQHRrcjoJCVRoZSByZWFkb3V0IGJhc2Ugc3RydWN0dXJlCiAgKiBAeHRpbWVfc2VjOgkJQ3VycmVudCBDTE9DS19SRUFMVElNRSB0aW1lIGluIHNlY29uZHMKKyAqIEBrdGltZV9zZWM6CQlDdXJyZW50IENMT0NLX01PTk9UT05JQyB0aW1lIGluIHNlY29uZHMKICAqIEB3YWxsX3RvX21vbm90b25pYzoJQ0xPQ0tfUkVBTFRJTUUgdG8gQ0xPQ0tfTU9OT1RPTklDIG9mZnNldAogICogQG9mZnNfcmVhbDoJCU9mZnNldCBjbG9jayBtb25vdG9uaWMgLT4gY2xvY2sgcmVhbHRpbWUKICAqIEBvZmZzX2Jvb3Q6CQlPZmZzZXQgY2xvY2sgbW9ub3RvbmljIC0+IGNsb2NrIGJvb3R0aW1lCkBAIC03Nyw2ICs3OCw3IEBACiBzdHJ1Y3QgdGltZWtlZXBlciB7CiAJc3RydWN0IHRrX3JlYWRfYmFzZQl0a3I7CiAJdTY0CQkJeHRpbWVfc2VjOworCXVuc2lnbmVkIGxvbmcJCWt0aW1lX3NlYzsKIAlzdHJ1Y3QgdGltZXNwZWM2NAl3YWxsX3RvX21vbm90b25pYzsKIAlrdGltZV90CQkJb2Zmc19yZWFsOwogCWt0aW1lX3QJCQlvZmZzX2Jvb3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVrZWVwaW5nLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVrZWVwaW5nLmgKaW5kZXggMWNhYTZiMC4uOWI2M2QxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1la2VlcGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZWtlZXBpbmcuaApAQCAtMTAsNyArMTAsNyBAQAogICogR2V0IGFuZCBzZXQgdGltZW9mZGF5CiAgKi8KIGV4dGVybiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpOwotZXh0ZXJuIGludCBkb19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0dik7CitleHRlcm4gaW50IGRvX3NldHRpbWVvZmRheTY0KGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7CiBleHRlcm4gaW50IGRvX3N5c19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0diwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKIApAQCAtMjUsMTQgKzI1LDI0IEBACiAvKgogICogdGltZXNwZWMgYmFzZWQgaW50ZXJmYWNlcwogICovCi1zdHJ1Y3QgdGltZXNwZWMgZ2V0X21vbm90b25pY19jb2Fyc2Uodm9pZCk7Ci1leHRlcm4gdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cyk7CitzdHJ1Y3QgdGltZXNwZWM2NCBnZXRfbW9ub3RvbmljX2NvYXJzZTY0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ2V0cmF3bW9ub3RvbmljNjQoc3RydWN0IHRpbWVzcGVjNjQgKnRzKTsKIGV4dGVybiB2b2lkIGt0aW1lX2dldF90czY0KHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7CitleHRlcm4gdGltZTY0X3Qga3RpbWVfZ2V0X3NlY29uZHModm9pZCk7CitleHRlcm4gdGltZTY0X3Qga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcyh2b2lkKTsKIAogZXh0ZXJuIGludCBfX2dldG5zdGltZW9mZGF5NjQoc3RydWN0IHRpbWVzcGVjNjQgKnR2KTsKIGV4dGVybiB2b2lkIGdldG5zdGltZW9mZGF5NjQoc3RydWN0IHRpbWVzcGVjNjQgKnR2KTsKIAogI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKy8qKgorICogRGVwcmVjYXRlZC4gVXNlIGRvX3NldHRpbWVvZmRheTY0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRvX3NldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCXJldHVybiBkb19zZXR0aW1lb2ZkYXk2NCh0cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IF9fZ2V0bnN0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0cykKIHsKIAlyZXR1cm4gX19nZXRuc3RpbWVvZmRheTY0KHRzKTsKQEAgLTUzLDcgKzYzLDI3IEBACiAJZ2V0bnN0aW1lb2ZkYXk2NCh0cyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlnZXRyYXdtb25vdG9uaWM2NCh0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbWVzcGVjIGdldF9tb25vdG9uaWNfY29hcnNlKHZvaWQpCit7CisJcmV0dXJuIGdldF9tb25vdG9uaWNfY29hcnNlNjQoKTsKK30KICNlbHNlCisvKioKKyAqIERlcHJlY2F0ZWQuIFVzZSBkb19zZXR0aW1lb2ZkYXk2NCgpLgorICovCitzdGF0aWMgaW5saW5lIGludCBkb19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0OworCisJdHM2NCA9IHRpbWVzcGVjX3RvX3RpbWVzcGVjNjQoKnRzKTsKKwlyZXR1cm4gZG9fc2V0dGltZW9mZGF5NjQoJnRzNjQpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBfX2dldG5zdGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7CiAJc3RydWN0IHRpbWVzcGVjNjQgdHM2NDsKQEAgLTg2LDYgKzExNiwxOSBAQAogCWdldG5zdGltZW9mZGF5NjQoJnRzNjQpOwogCSp0cyA9IHRpbWVzcGVjNjRfdG9fdGltZXNwZWModHM2NCk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0OworCisJZ2V0cmF3bW9ub3RvbmljNjQoJnRzNjQpOworCSp0cyA9IHRpbWVzcGVjNjRfdG9fdGltZXNwZWModHM2NCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbWVzcGVjIGdldF9tb25vdG9uaWNfY29hcnNlKHZvaWQpCit7CisJcmV0dXJuIHRpbWVzcGVjNjRfdG9fdGltZXNwZWMoZ2V0X21vbm90b25pY19jb2Fyc2U2NCgpKTsKK30KICNlbmRpZgogCiBleHRlcm4gdm9pZCBnZXRib290dGltZShzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKQEAgLTE4Miw3ICsyMjUsNyBAQAogLyoKICAqIFJUQyBzcGVjaWZpYwogICovCi1leHRlcm4gdm9pZCB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEpOworZXh0ZXJuIHZvaWQgdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZTY0KHN0cnVjdCB0aW1lc3BlYzY0ICpkZWx0YSk7CiAKIC8qCiAgKiBQUFMgYWNjZXNzb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCmluZGV4IGVhNmM5ZGUuLmNmYWY1YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0xJTlVYX1RSQUNFX1NFUV9ICiAjZGVmaW5lIF9MSU5VWF9UUkFDRV9TRVFfSAogCi0jaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfYnVmLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCkBAIC0xMiwyMCArMTIsMzYgQEAKIAogc3RydWN0IHRyYWNlX3NlcSB7CiAJdW5zaWduZWQgY2hhcgkJYnVmZmVyW1BBR0VfU0laRV07Ci0JdW5zaWduZWQgaW50CQlsZW47Ci0JdW5zaWduZWQgaW50CQlyZWFkcG9zOworCXN0cnVjdCBzZXFfYnVmCQlzZXE7CiAJaW50CQkJZnVsbDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogdHJhY2Vfc2VxX2luaXQoc3RydWN0IHRyYWNlX3NlcSAqcykKIHsKLQlzLT5sZW4gPSAwOwotCXMtPnJlYWRwb3MgPSAwOworCXNlcV9idWZfaW5pdCgmcy0+c2VxLCBzLT5idWZmZXIsIFBBR0VfU0laRSk7CiAJcy0+ZnVsbCA9IDA7CiB9CiAKIC8qKgorICogdHJhY2Vfc2VxX3VzZWQgLSBhbW91bnQgb2YgYWN0dWFsIGRhdGEgd3JpdHRlbiB0byBidWZmZXIKKyAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCisgKgorICogUmV0dXJucyB0aGUgYW1vdW50IG9mIGRhdGEgd3JpdHRlbiB0byB0aGUgYnVmZmVyLgorICoKKyAqIElNUE9SVEFOVCEKKyAqCisgKiBVc2UgdGhpcyBpbnN0ZWFkIG9mIEBzLT5zZXEubGVuIGlmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIGFtb3VudAorICogb2YgZGF0YSBmcm9tIHRoZSBidWZmZXIgdG8gYW5vdGhlciBidWZmZXIgKHVzZXJzcGFjZSwgb3Igd2hhdCBub3QpLgorICogVGhlIEBzLT5zZXEubGVuIG9uIG92ZXJmbG93IGlzIGJpZ2dlciB0aGFuIHRoZSBidWZmZXIgc2l6ZSBhbmQKKyAqIHVzaW5nIGl0IGNhbiBjYXVzZSBhY2Nlc3MgdG8gdW5kZWZpbmVkIG1lbW9yeS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdHJhY2Vfc2VxX3VzZWQoc3RydWN0IHRyYWNlX3NlcSAqcykKK3sKKwlyZXR1cm4gc2VxX2J1Zl91c2VkKCZzLT5zZXEpOworfQorCisvKioKICAqIHRyYWNlX3NlcV9idWZmZXJfcHRyIC0gcmV0dXJuIHBvaW50ZXIgdG8gbmV4dCBsb2NhdGlvbiBpbiBidWZmZXIKICAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCiAgKgpAQCAtMzcsNyArNTMsMTkgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqCiB0cmFjZV9zZXFfYnVmZmVyX3B0cihzdHJ1Y3QgdHJhY2Vfc2VxICpzKQogewotCXJldHVybiBzLT5idWZmZXIgKyBzLT5sZW47CisJcmV0dXJuIHMtPmJ1ZmZlciArIHNlcV9idWZfdXNlZCgmcy0+c2VxKTsKK30KKworLyoqCisgKiB0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQgLSByZXR1cm4gdHJ1ZSBpZiB0aGUgdHJhY2Vfc2VxIHRvb2sgdG9vIG11Y2gKKyAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRvbyBtdWNoIGRhdGEgd2FzIGFkZGVkIHRvIHRoZSB0cmFjZV9zZXEgYW5kIGl0IGlzCisgKiBub3cgZnVsbCBhbmQgd2lsbCBub3QgdGFrZSBhbnltb3JlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdHJhY2Vfc2VxX2hhc19vdmVyZmxvd2VkKHN0cnVjdCB0cmFjZV9zZXEgKnMpCit7CisJcmV0dXJuIHMtPmZ1bGwgfHwgc2VxX2J1Zl9oYXNfb3ZlcmZsb3dlZCgmcy0+c2VxKTsKIH0KIAogLyoKQEAgLTQ1LDQwICs3MywzNyBAQAogICovCiAjaWZkZWYgQ09ORklHX1RSQUNJTkcKIGV4dGVybiBfX3ByaW50ZigyLCAzKQotaW50IHRyYWNlX3NlcV9wcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCB0cmFjZV9zZXFfcHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIGV4dGVybiBfX3ByaW50ZigyLCAwKQotaW50IHRyYWNlX3NlcV92cHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKLWV4dGVybiBpbnQKK3ZvaWQgdHJhY2Vfc2VxX3ZwcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOworZXh0ZXJuIHZvaWQKIHRyYWNlX3NlcV9icHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgdTMyICpiaW5hcnkpOwogZXh0ZXJuIGludCB0cmFjZV9wcmludF9zZXEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKIGV4dGVybiBpbnQgdHJhY2Vfc2VxX3RvX3VzZXIoc3RydWN0IHRyYWNlX3NlcSAqcywgY2hhciBfX3VzZXIgKnVidWYsCiAJCQkgICAgIGludCBjbnQpOwotZXh0ZXJuIGludCB0cmFjZV9zZXFfcHV0cyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpzdHIpOwotZXh0ZXJuIGludCB0cmFjZV9zZXFfcHV0YyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBjaGFyIGMpOwotZXh0ZXJuIGludCB0cmFjZV9zZXFfcHV0bWVtKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IGxlbik7Ci1leHRlcm4gaW50IHRyYWNlX3NlcV9wdXRtZW1faGV4KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHZvaWQgKm1lbSwKK2V4dGVybiB2b2lkIHRyYWNlX3NlcV9wdXRzKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKnN0cik7CitleHRlcm4gdm9pZCB0cmFjZV9zZXFfcHV0YyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBjaGFyIGMpOworZXh0ZXJuIHZvaWQgdHJhY2Vfc2VxX3B1dG1lbShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCB2b2lkICptZW0sIHVuc2lnbmVkIGludCBsZW4pOworZXh0ZXJuIHZvaWQgdHJhY2Vfc2VxX3B1dG1lbV9oZXgoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgdm9pZCAqbWVtLAogCQkJCXVuc2lnbmVkIGludCBsZW4pOwogZXh0ZXJuIGludCB0cmFjZV9zZXFfcGF0aChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7CiAKLWV4dGVybiBpbnQgdHJhY2Vfc2VxX2JpdG1hc2soc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgdW5zaWduZWQgbG9uZyAqbWFza3AsCitleHRlcm4gdm9pZCB0cmFjZV9zZXFfYml0bWFzayhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCB1bnNpZ25lZCBsb25nICptYXNrcCwKIAkJCSAgICAgaW50IG5tYXNrYml0cyk7CiAKICNlbHNlIC8qIENPTkZJR19UUkFDSU5HICovCi1zdGF0aWMgaW5saW5lIGludCB0cmFjZV9zZXFfcHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX3NlcV9wcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7Ci0JcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGlubGluZSB2b2lkCiB0cmFjZV9zZXFfYnByaW50ZihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IHUzMiAqYmluYXJ5KQogewotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGlubGluZSB2b2lkCiB0cmFjZV9zZXFfYml0bWFzayhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCB1bnNpZ25lZCBsb25nICptYXNrcCwKIAkJICBpbnQgbm1hc2tiaXRzKQogewotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB0cmFjZV9wcmludF9zZXEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQpAQCAtOTAsMjMgKzExNSwxOSBAQAogewogCXJldHVybiAwOwogfQotc3RhdGljIGlubGluZSBpbnQgdHJhY2Vfc2VxX3B1dHMoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqc3RyKQorc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX3NlcV9wdXRzKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKnN0cikKIHsKLQlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgaW50IHRyYWNlX3NlcV9wdXRjKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGNoYXIgYykKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9zZXFfcHV0YyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBjaGFyIGMpCiB7Ci0JcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGlubGluZSB2b2lkCiB0cmFjZV9zZXFfcHV0bWVtKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgaW50IHRyYWNlX3NlcV9wdXRtZW1faGV4KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHZvaWQgKm1lbSwKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9zZXFfcHV0bWVtX2hleChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCB2b2lkICptZW0sCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIGludCB0cmFjZV9zZXFfcGF0aChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oCmluZGV4IDliMTU4MTQuLmJkODU2OWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWlvLmgKKysrIGIvaW5jbHVkZS9saW51eC91aW8uaApAQCAtMzEsNiArMzEsNyBAQAogCXNpemVfdCBjb3VudDsKIAl1bmlvbiB7CiAJCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92OworCQljb25zdCBzdHJ1Y3Qga3ZlYyAqa3ZlYzsKIAkJY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWM7CiAJfTsKIAl1bnNpZ25lZCBsb25nIG5yX3NlZ3M7CkBAIC04MiwxMCArODMsMTMgQEAKIAkJCSBzdHJ1Y3QgaW92X2l0ZXIgKmkpOwogc2l6ZV90IGNvcHlfdG9faXRlcih2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSk7CiBzaXplX3QgY29weV9mcm9tX2l0ZXIodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpOworc2l6ZV90IGNvcHlfZnJvbV9pdGVyX25vY2FjaGUodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpOwogc2l6ZV90IGlvdl9pdGVyX3plcm8oc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKik7CiB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpOwogdm9pZCBpb3ZfaXRlcl9pbml0KHN0cnVjdCBpb3ZfaXRlciAqaSwgaW50IGRpcmVjdGlvbiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCiAJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIHNpemVfdCBjb3VudCk7Cit2b2lkIGlvdl9pdGVyX2t2ZWMoc3RydWN0IGlvdl9pdGVyICppLCBpbnQgZGlyZWN0aW9uLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqaW92LAorCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBzaXplX3QgY291bnQpOwogc3NpemVfdCBpb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogCQkJc2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIG1heHBhZ2VzLCBzaXplX3QgKnN0YXJ0KTsKIHNzaXplX3QgaW92X2l0ZXJfZ2V0X3BhZ2VzX2FsbG9jKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IHBhZ2UgKioqcGFnZXMsCkBAIC0xMjMsNiArMTI3LDggQEAKIHsKIAlpLT5jb3VudCA9IGNvdW50OwogfQorc2l6ZV90IGNzdW1fYW5kX2NvcHlfdG9faXRlcih2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIF9fd3N1bSAqY3N1bSwgc3RydWN0IGlvdl9pdGVyICppKTsKK3NpemVfdCBjc3VtX2FuZF9jb3B5X2Zyb21faXRlcih2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIF9fd3N1bSAqY3N1bSwgc3RydWN0IGlvdl9pdGVyICppKTsKIAogaW50IG1lbWNweV9mcm9taW92ZWModW5zaWduZWQgY2hhciAqa2RhdGEsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgbGVuKTsKIGludCBtZW1jcHlfdG9pb3ZlYyhzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgY2hhciAqa2RhdGEsIGludCBsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggNDQ3YTdlMi4uZjg5YzI0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC02MzcsNyArNjM3LDcgQEAKICNlbmRpZgogCiAvKiBVU0IgYXV0b3N1c3BlbmQgYW5kIGF1dG9yZXN1bWUgKi8KLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogZXh0ZXJuIHZvaWQgdXNiX2VuYWJsZV9hdXRvc3VzcGVuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiBleHRlcm4gdm9pZCB1c2JfZGlzYWJsZV9hdXRvc3VzcGVuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2hjZC5oIGIvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKaW5kZXggY2Q5NmEyYi4uNjY4ODk4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKQEAgLTkzLDcgKzkzLDcgQEAKIAogCXN0cnVjdCB0aW1lcl9saXN0CXJoX3RpbWVyOwkvKiBkcml2ZXMgcm9vdC1odWIgcG9sbGluZyAqLwogCXN0cnVjdCB1cmIJCSpzdGF0dXNfdXJiOwkvKiB0aGUgY3VycmVudCBzdGF0dXMgdXJiICovCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd2FrZXVwX3dvcms7CS8qIGZvciByZW1vdGUgd2FrZXVwICovCiAjZW5kaWYKIApAQCAtNjI1LDE2ICs2MjUsMTMgQEAKIGV4dGVybiB2b2lkIHVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKHN0cnVjdCB1c2JfZGV2aWNlICpyaGRldik7CiBleHRlcm4gaW50IGhjZF9idXNfc3VzcGVuZChzdHJ1Y3QgdXNiX2RldmljZSAqcmhkZXYsIHBtX21lc3NhZ2VfdCBtc2cpOwogZXh0ZXJuIGludCBoY2RfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2RldmljZSAqcmhkZXYsIHBtX21lc3NhZ2VfdCBtc2cpOwotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIGV4dGVybiB2b2lkIHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHN0cnVjdCB1c2JfaGNkICpoY2QpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewogCXJldHVybjsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZleHByZXNzLmggYi9pbmNsdWRlL2xpbnV4L3ZleHByZXNzLmgKaW5kZXggYTRjOTU0Ny4uZjhlNzZlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92ZXhwcmVzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdmV4cHJlc3MuaApAQCAtMTUsOCArMTUsNiBAQAogI2RlZmluZSBfTElOVVhfVkVYUFJFU1NfSAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAKICNkZWZpbmUgVkVYUFJFU1NfU0lURV9NQgkJMApAQCAtMjQsMTMgKzIyLDYgQEAKICNkZWZpbmUgVkVYUFJFU1NfU0lURV9EQjIJCTIKICNkZWZpbmUgVkVYUFJFU1NfU0lURV9NQVNURVIJCTB4ZgogCi0jZGVmaW5lIFZFWFBSRVNTX1JFU19GVU5DKF9zaXRlLCBfZnVuYykJXAotewkJCQkJXAotCS5zdGFydCA9IChfc2l0ZSksCQlcCi0JLmVuZCA9IChfZnVuYyksCQkJXAotCS5mbGFncyA9IElPUkVTT1VSQ0VfQlVTLAlcCi19Ci0KIC8qIENvbmZpZyBpbmZyYXN0cnVjdHVyZSAqLwogCiB2b2lkIHZleHByZXNzX2NvbmZpZ19zZXRfbWFzdGVyKHUzMiBzaXRlKTsKQEAgLTU4LDE2ICs0OSw2IEBACiAKIC8qIFBsYXRmb3JtIGNvbnRyb2wgKi8KIAotdW5zaWduZWQgaW50IHZleHByZXNzX2dldF9tY2lfY2FyZGluKHN0cnVjdCBkZXZpY2UgKmRldik7Ci11MzIgdmV4cHJlc3NfZ2V0X3Byb2NpZChpbnQgc2l0ZSk7Ci12b2lkICp2ZXhwcmVzc19nZXRfMjRtaHpfY2xvY2tfYmFzZSh2b2lkKTsKIHZvaWQgdmV4cHJlc3NfZmxhZ3Nfc2V0KHUzMiBkYXRhKTsKIAotdm9pZCB2ZXhwcmVzc19zeXNyZWdfZWFybHlfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UpOwotaW50IHZleHByZXNzX3N5c2NmZ19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Ci0KLS8qIENsb2NrcyAqLwotCi12b2lkIHZleHByZXNzX2Nsa19pbml0KHZvaWQgX19pb21lbSAqc3A4MTBfYmFzZSk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YWl0LmggYi9pbmNsdWRlL2xpbnV4L3dhaXQuaAppbmRleCBlNGE4ZWI5Li4yMjMyZWQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dhaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dhaXQuaApAQCAtMTMsOSArMTMsMTIgQEAKIHR5cGVkZWYgaW50ICgqd2FpdF9xdWV1ZV9mdW5jX3QpKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IGZsYWdzLCB2b2lkICprZXkpOwogaW50IGRlZmF1bHRfd2FrZV9mdW5jdGlvbih3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBmbGFncywgdm9pZCAqa2V5KTsKIAorLyogX193YWl0X3F1ZXVlOjpmbGFncyAqLworI2RlZmluZSBXUV9GTEFHX0VYQ0xVU0lWRQkweDAxCisjZGVmaW5lIFdRX0ZMQUdfV09LRU4JCTB4MDIKKwogc3RydWN0IF9fd2FpdF9xdWV1ZSB7CiAJdW5zaWduZWQgaW50CQlmbGFnczsKLSNkZWZpbmUgV1FfRkxBR19FWENMVVNJVkUJMHgwMQogCXZvaWQJCQkqcHJpdmF0ZTsKIAl3YWl0X3F1ZXVlX2Z1bmNfdAlmdW5jOwogCXN0cnVjdCBsaXN0X2hlYWQJdGFza19saXN0OwpAQCAtMjU4LDExICsyNjEsMzcgQEAKICAqLwogI2RlZmluZSB3YWl0X2V2ZW50KHdxLCBjb25kaXRpb24pCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoY29uZGl0aW9uKQkJCQkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJX193YWl0X2V2ZW50KHdxLCBjb25kaXRpb24pOwkJCQkJXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBfX3dhaXRfZXZlbnRfZnJlZXphYmxlKHdxLCBjb25kaXRpb24pCQkJCVwKKwlfX193YWl0X2V2ZW50KHdxLCBjb25kaXRpb24sIFRBU0tfSU5URVJSVVBUSUJMRSwgMCwgMCwJCVwKKwkJCSAgICBzY2hlZHVsZSgpOyB0cnlfdG9fZnJlZXplKCkpCisKKy8qKgorICogd2FpdF9ldmVudCAtIHNsZWVwIChvciBmcmVlemUpIHVudGlsIGEgY29uZGl0aW9uIGdldHMgdHJ1ZQorICogQHdxOiB0aGUgd2FpdHF1ZXVlIHRvIHdhaXQgb24KKyAqIEBjb25kaXRpb246IGEgQyBleHByZXNzaW9uIGZvciB0aGUgZXZlbnQgdG8gd2FpdCBmb3IKKyAqCisgKiBUaGUgcHJvY2VzcyBpcyBwdXQgdG8gc2xlZXAgKFRBU0tfSU5URVJSVVBUSUJMRSAtLSBzbyBhcyBub3QgdG8gY29udHJpYnV0ZQorICogdG8gc3lzdGVtIGxvYWQpIHVudGlsIHRoZSBAY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLiBUaGUKKyAqIEBjb25kaXRpb24gaXMgY2hlY2tlZCBlYWNoIHRpbWUgdGhlIHdhaXRxdWV1ZSBAd3EgaXMgd29rZW4gdXAuCisgKgorICogd2FrZV91cCgpIGhhcyB0byBiZSBjYWxsZWQgYWZ0ZXIgY2hhbmdpbmcgYW55IHZhcmlhYmxlIHRoYXQgY291bGQKKyAqIGNoYW5nZSB0aGUgcmVzdWx0IG9mIHRoZSB3YWl0IGNvbmRpdGlvbi4KKyAqLworI2RlZmluZSB3YWl0X2V2ZW50X2ZyZWV6YWJsZSh3cSwgY29uZGl0aW9uKQkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAorCWlmICghKGNvbmRpdGlvbikpCQkJCQkJXAorCQlfX3JldCA9IF9fd2FpdF9ldmVudF9mcmVlemFibGUod3EsIGNvbmRpdGlvbik7CQlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCiAjZGVmaW5lIF9fd2FpdF9ldmVudF90aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCQkJXAogCV9fX3dhaXRfZXZlbnQod3EsIF9fX3dhaXRfY29uZF90aW1lb3V0KGNvbmRpdGlvbiksCQlcCiAJCSAgICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCAwLCB0aW1lb3V0LAkJCVwKQEAgLTI5MCwxMSArMzE5LDMwIEBACiAjZGVmaW5lIHdhaXRfZXZlbnRfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJCVwKICh7CQkJCQkJCQkJXAogCWxvbmcgX19yZXQgPSB0aW1lb3V0OwkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCiAJaWYgKCFfX193YWl0X2NvbmRfdGltZW91dChjb25kaXRpb24pKQkJCQlcCiAJCV9fcmV0ID0gX193YWl0X2V2ZW50X3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCk7CVwKIAlfX3JldDsJCQkJCQkJCVwKIH0pCiAKKyNkZWZpbmUgX193YWl0X2V2ZW50X2ZyZWV6YWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCQlcCisJX19fd2FpdF9ldmVudCh3cSwgX19fd2FpdF9jb25kX3RpbWVvdXQoY29uZGl0aW9uKSwJCVwKKwkJICAgICAgVEFTS19JTlRFUlJVUFRJQkxFLCAwLCB0aW1lb3V0LAkJCVwKKwkJICAgICAgX19yZXQgPSBzY2hlZHVsZV90aW1lb3V0KF9fcmV0KTsgdHJ5X3RvX2ZyZWV6ZSgpKQorCisvKgorICogbGlrZSB3YWl0X2V2ZW50X3RpbWVvdXQoKSAtLSBleGNlcHQgaXQgdXNlcyBUQVNLX0lOVEVSUlVQVElCTEUgdG8gYXZvaWQKKyAqIGluY3JlYXNpbmcgbG9hZCBhbmQgaXMgZnJlZXphYmxlLgorICovCisjZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19yZXQgPSB0aW1lb3V0OwkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJaWYgKCFfX193YWl0X2NvbmRfdGltZW91dChjb25kaXRpb24pKQkJCQlcCisJCV9fcmV0ID0gX193YWl0X2V2ZW50X2ZyZWV6YWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpOwlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCiAjZGVmaW5lIF9fd2FpdF9ldmVudF9jbWQod3EsIGNvbmRpdGlvbiwgY21kMSwgY21kMikJCQlcCiAJKHZvaWQpX19fd2FpdF9ldmVudCh3cSwgY29uZGl0aW9uLCBUQVNLX1VOSU5URVJSVVBUSUJMRSwgMCwgMCwJXAogCQkJICAgIGNtZDE7IHNjaGVkdWxlKCk7IGNtZDIpCkBAIC0zMTUsNiArMzYzLDcgQEAKICAqLwogI2RlZmluZSB3YWl0X2V2ZW50X2NtZCh3cSwgY29uZGl0aW9uLCBjbWQxLCBjbWQyKQkJCVwKIGRvIHsJCQkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAogCWlmIChjb25kaXRpb24pCQkJCQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKIAlfX3dhaXRfZXZlbnRfY21kKHdxLCBjb25kaXRpb24sIGNtZDEsIGNtZDIpOwkJCVwKQEAgLTM0Miw2ICszOTEsNyBAQAogI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUod3EsIGNvbmRpdGlvbikJCQkJXAogKHsJCQkJCQkJCQlcCiAJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKIAkJX19yZXQgPSBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh3cSwgY29uZGl0aW9uKTsJXAogCV9fcmV0OwkJCQkJCQkJXApAQCAtMzc1LDYgKzQyNSw3IEBACiAjZGVmaW5lIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCVwKICh7CQkJCQkJCQkJXAogCWxvbmcgX19yZXQgPSB0aW1lb3V0OwkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCiAJaWYgKCFfX193YWl0X2NvbmRfdGltZW91dChjb25kaXRpb24pKQkJCQlcCiAJCV9fcmV0ID0gX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwJCVwKIAkJCQkJCWNvbmRpdGlvbiwgdGltZW91dCk7CVwKQEAgLTQyNSw2ICs0NzYsNyBAQAogI2RlZmluZSB3YWl0X2V2ZW50X2hydGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJCVwKICh7CQkJCQkJCQkJXAogCWludCBfX3JldCA9IDA7CQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCiAJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQlcCiAJCV9fcmV0ID0gX193YWl0X2V2ZW50X2hydGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0LAlcCiAJCQkJCSAgICAgICBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CVwKQEAgLTQ1MCw2ICs1MDIsNyBAQAogI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfaHJ0aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCVwKICh7CQkJCQkJCQkJXAogCWxvbmcgX19yZXQgPSAwOwkJCQkJCQlcCisJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAogCWlmICghKGNvbmRpdGlvbikpCQkJCQkJXAogCQlfX3JldCA9IF9fd2FpdF9ldmVudF9ocnRpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCwJXAogCQkJCQkgICAgICAgVEFTS19JTlRFUlJVUFRJQkxFKTsJXApAQCAtNDYzLDEyICs1MTYsMjcgQEAKICNkZWZpbmUgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKQkJXAogKHsJCQkJCQkJCQlcCiAJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKIAkJX19yZXQgPSBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUod3EsIGNvbmRpdGlvbik7XAogCV9fcmV0OwkJCQkJCQkJXAogfSkKIAogCisjZGVmaW5lIF9fd2FpdF9ldmVudF9mcmVlemFibGVfZXhjbHVzaXZlKHdxLCBjb25kaXRpb24pCQkJXAorCV9fX3dhaXRfZXZlbnQod3EsIGNvbmRpdGlvbiwgVEFTS19JTlRFUlJVUFRJQkxFLCAxLCAwLAkJXAorCQkJc2NoZWR1bGUoKTsgdHJ5X3RvX2ZyZWV6ZSgpKQorCisjZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlX2V4Y2x1c2l2ZSh3cSwgY29uZGl0aW9uKQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3JldCA9IDA7CQkJCQkJCVwKKwltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQlcCisJCV9fcmV0ID0gX193YWl0X2V2ZW50X2ZyZWV6YWJsZV9leGNsdXNpdmUod3EsIGNvbmRpdGlvbik7XAorCV9fcmV0OwkJCQkJCQkJXAorfSkKKworCiAjZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tlZCh3cSwgY29uZGl0aW9uLCBleGNsdXNpdmUsIGlycSkgXAogKHsJCQkJCQkJCQlcCiAJaW50IF9fcmV0ID0gMDsJCQkJCQkJXApAQCAtNjM3LDYgKzcwNSw3IEBACiAjZGVmaW5lIHdhaXRfZXZlbnRfa2lsbGFibGUod3EsIGNvbmRpdGlvbikJCQkJXAogKHsJCQkJCQkJCQlcCiAJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAorCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKIAkJX19yZXQgPSBfX3dhaXRfZXZlbnRfa2lsbGFibGUod3EsIGNvbmRpdGlvbik7CQlcCiAJX19yZXQ7CQkJCQkJCQlcCkBAIC04MzAsNiArODk5LDggQEAKIGxvbmcgcHJlcGFyZV90b193YWl0X2V2ZW50KHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKndhaXQsIGludCBzdGF0ZSk7CiB2b2lkIGZpbmlzaF93YWl0KHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKndhaXQpOwogdm9pZCBhYm9ydF9leGNsdXNpdmVfd2FpdCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBpbnQgbW9kZSwgdm9pZCAqa2V5KTsKK2xvbmcgd2FpdF93b2tlbih3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGxvbmcgdGltZW91dCk7CitpbnQgd29rZW5fd2FrZV9mdW5jdGlvbih3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpOwogaW50IGF1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbih3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpOwogaW50IHdha2VfYml0X2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSk7CiAKQEAgLTg4Niw2ICs5NTcsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIHdhaXRfb25fYml0KHZvaWQgKndvcmQsIGludCBiaXQsIHVuc2lnbmVkIG1vZGUpCiB7CisJbWlnaHRfc2xlZXAoKTsKIAlpZiAoIXRlc3RfYml0KGJpdCwgd29yZCkpCiAJCXJldHVybiAwOwogCXJldHVybiBvdXRfb2ZfbGluZV93YWl0X29uX2JpdCh3b3JkLCBiaXQsCkBAIC05MTAsNiArOTgyLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiB3YWl0X29uX2JpdF9pbyh2b2lkICp3b3JkLCBpbnQgYml0LCB1bnNpZ25lZCBtb2RlKQogeworCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKCF0ZXN0X2JpdChiaXQsIHdvcmQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXQod29yZCwgYml0LApAQCAtOTM2LDYgKzEwMDksNyBAQAogc3RhdGljIGlubGluZSBpbnQKIHdhaXRfb25fYml0X2FjdGlvbih2b2lkICp3b3JkLCBpbnQgYml0LCB3YWl0X2JpdF9hY3Rpb25fZiAqYWN0aW9uLCB1bnNpZ25lZCBtb2RlKQogeworCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKCF0ZXN0X2JpdChiaXQsIHdvcmQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXQod29yZCwgYml0LCBhY3Rpb24sIG1vZGUpOwpAQCAtOTYzLDYgKzEwMzcsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIHdhaXRfb25fYml0X2xvY2sodm9pZCAqd29yZCwgaW50IGJpdCwgdW5zaWduZWQgbW9kZSkKIHsKKwltaWdodF9zbGVlcCgpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChiaXQsIHdvcmQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXRfbG9jayh3b3JkLCBiaXQsIGJpdF93YWl0LCBtb2RlKTsKQEAgLTk4Niw2ICsxMDYxLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiB3YWl0X29uX2JpdF9sb2NrX2lvKHZvaWQgKndvcmQsIGludCBiaXQsIHVuc2lnbmVkIG1vZGUpCiB7CisJbWlnaHRfc2xlZXAoKTsKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoYml0LCB3b3JkKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIG91dF9vZl9saW5lX3dhaXRfb25fYml0X2xvY2sod29yZCwgYml0LCBiaXRfd2FpdF9pbywgbW9kZSk7CkBAIC0xMDExLDYgKzEwODcsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIHdhaXRfb25fYml0X2xvY2tfYWN0aW9uKHZvaWQgKndvcmQsIGludCBiaXQsIHdhaXRfYml0X2FjdGlvbl9mICphY3Rpb24sIHVuc2lnbmVkIG1vZGUpCiB7CisJbWlnaHRfc2xlZXAoKTsKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoYml0LCB3b3JkKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIG91dF9vZl9saW5lX3dhaXRfb25fYml0X2xvY2sod29yZCwgYml0LCBhY3Rpb24sIG1vZGUpOwpAQCAtMTAyOSw2ICsxMTA2LDcgQEAKIHN0YXRpYyBpbmxpbmUKIGludCB3YWl0X29uX2F0b21pY190KGF0b21pY190ICp2YWwsIGludCAoKmFjdGlvbikoYXRvbWljX3QgKiksIHVuc2lnbmVkIG1vZGUpCiB7CisJbWlnaHRfc2xlZXAoKTsKIAlpZiAoYXRvbWljX3JlYWQodmFsKSA9PSAwKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gb3V0X29mX2xpbmVfd2FpdF9vbl9hdG9taWNfdCh2YWwsIGFjdGlvbiwgbW9kZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oCmluZGV4IGNjMGMxODguLmYyZjBmYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oCkBAIC03Miw3ICs3Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50Cit2b2lkCiBwcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvLAogICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpwcm90byk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oCmluZGV4IGFkYzFmYTMuLmNkYzkyMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oCkBAIC0zOCw4ICszOCw4IEBACiAJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpOwogCiAJLyogUHJpbnQgb3V0IHRoZSBwZXItcHJvdG9jb2wgcGFydCBvZiB0aGUgdHVwbGUuICovCi0JaW50ICgqcHJpbnRfdHVwbGUpKHN0cnVjdCBzZXFfZmlsZSAqcywKLQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKik7CisJdm9pZCAoKnByaW50X3R1cGxlKShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqKTsKIAogCS8qCiAJICogQ2FsbGVkIGJlZm9yZSB0cmFja2luZy4gCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCmluZGV4IDRjOGQ1NzMuLjFmNzA2MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCkBAIC01NiwxMSArNTYsMTEgQEAKIAkJICAgICB1X2ludDhfdCBwZiwgdW5zaWduZWQgaW50IGhvb2tudW0pOwogCiAJLyogUHJpbnQgb3V0IHRoZSBwZXItcHJvdG9jb2wgcGFydCBvZiB0aGUgdHVwbGUuIFJldHVybiBsaWtlIHNlcV8qICovCi0JaW50ICgqcHJpbnRfdHVwbGUpKHN0cnVjdCBzZXFfZmlsZSAqcywKLQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKik7CisJdm9pZCAoKnByaW50X3R1cGxlKShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqKTsKIAogCS8qIFByaW50IG91dCB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBjb25udHJhY2suICovCi0JaW50ICgqcHJpbnRfY29ubnRyYWNrKShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBuZl9jb25uICopOworCXZvaWQgKCpwcmludF9jb25udHJhY2spKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IG5mX2Nvbm4gKik7CiAKIAkvKiBSZXR1cm4gdGhlIGFycmF5IG9mIHRpbWVvdXRzIGZvciB0aGlzIHByb3RvY29sLiAqLwogCXVuc2lnbmVkIGludCAqKCpnZXRfdGltZW91dHMpKHN0cnVjdCBuZXQgKm5ldCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggN2RiM2RiMS4uN2ZmNDRlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtNTQsOCArNTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlX2NvdW50ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVzX2NvdW50ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0aWNfa2V5Lmg+CiAjaW5jbHVkZSA8bGludXgvYWlvLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTg5Nyw2ICs4OTcsNyBAQAogCQlpZiAoIV9fcmMpIHsJCQkJCQlcCiAJCQkqKF9fdGltZW8pID0gc2NoZWR1bGVfdGltZW91dCgqKF9fdGltZW8pKTsJXAogCQl9CQkJCQkJCVwKKwkJc2NoZWRfYW5ub3RhdGVfc2xlZXAoKTsJCQkJCQlcCiAJCWxvY2tfc29jayhfX3NrKTsJCQkJCVwKIAkJX19yYyA9IF9fY29uZGl0aW9uOwkJCQkJXAogCQlfX3JjOwkJCQkJCQlcCkBAIC0xMDYxLDcgKzEwNjIsNyBAQAogfTsKIAogc3RydWN0IGNnX3Byb3RvIHsKLQlzdHJ1Y3QgcmVzX2NvdW50ZXIJbWVtb3J5X2FsbG9jYXRlZDsJLyogQ3VycmVudCBhbGxvY2F0ZWQgbWVtb3J5LiAqLworCXN0cnVjdCBwYWdlX2NvdW50ZXIJbWVtb3J5X2FsbG9jYXRlZDsJLyogQ3VycmVudCBhbGxvY2F0ZWQgbWVtb3J5LiAqLwogCXN0cnVjdCBwZXJjcHVfY291bnRlcglzb2NrZXRzX2FsbG9jYXRlZDsJLyogQ3VycmVudCBudW1iZXIgb2Ygc29ja2V0cy4gKi8KIAlpbnQJCQltZW1vcnlfcHJlc3N1cmU7CiAJbG9uZwkJCXN5c2N0bF9tZW1bM107CkBAIC0xMjEzLDM0ICsxMjE0LDI2IEBACiAJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYW10LAogCQkJCQkgICAgICBpbnQgKnBhcmVudF9zdGF0dXMpCiB7Ci0Jc3RydWN0IHJlc19jb3VudGVyICpmYWlsOwotCWludCByZXQ7CisJcGFnZV9jb3VudGVyX2NoYXJnZSgmcHJvdC0+bWVtb3J5X2FsbG9jYXRlZCwgYW10KTsKIAotCXJldCA9IHJlc19jb3VudGVyX2NoYXJnZV9ub2ZhaWwoJnByb3QtPm1lbW9yeV9hbGxvY2F0ZWQsCi0JCQkJCWFtdCA8PCBQQUdFX1NISUZULCAmZmFpbCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHBhZ2VfY291bnRlcl9yZWFkKCZwcm90LT5tZW1vcnlfYWxsb2NhdGVkKSA+CisJICAgIHByb3QtPm1lbW9yeV9hbGxvY2F0ZWQubGltaXQpCiAJCSpwYXJlbnRfc3RhdHVzID0gT1ZFUl9MSU1JVDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX21lbW9yeV9hbGxvY2F0ZWRfc3ViKHN0cnVjdCBjZ19wcm90byAqcHJvdCwKIAkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhbXQpCiB7Ci0JcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnByb3QtPm1lbW9yeV9hbGxvY2F0ZWQsIGFtdCA8PCBQQUdFX1NISUZUKTsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgbWVtY2dfbWVtb3J5X2FsbG9jYXRlZF9yZWFkKHN0cnVjdCBjZ19wcm90byAqcHJvdCkKLXsKLQl1NjQgcmV0OwotCXJldCA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZwcm90LT5tZW1vcnlfYWxsb2NhdGVkLCBSRVNfVVNBR0UpOwotCXJldHVybiByZXQgPj4gUEFHRV9TSElGVDsKKwlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJnByb3QtPm1lbW9yeV9hbGxvY2F0ZWQsIGFtdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgbG9uZwogc2tfbWVtb3J5X2FsbG9jYXRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHByb3RvICpwcm90ID0gc2stPnNrX3Byb3Q7CisKIAlpZiAobWVtX2Nncm91cF9zb2NrZXRzX2VuYWJsZWQgJiYgc2stPnNrX2NncnApCi0JCXJldHVybiBtZW1jZ19tZW1vcnlfYWxsb2NhdGVkX3JlYWQoc2stPnNrX2NncnApOworCQlyZXR1cm4gcGFnZV9jb3VudGVyX3JlYWQoJnNrLT5za19jZ3JwLT5tZW1vcnlfYWxsb2NhdGVkKTsKIAogCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKHByb3QtPm1lbW9yeV9hbGxvY2F0ZWQpOwogfQpAQCAtMTI1NCw3ICsxMjQ3LDcgQEAKIAkJbWVtY2dfbWVtb3J5X2FsbG9jYXRlZF9hZGQoc2stPnNrX2NncnAsIGFtdCwgcGFyZW50X3N0YXR1cyk7CiAJCS8qIHVwZGF0ZSB0aGUgcm9vdCBjZ3JvdXAgcmVnYXJkbGVzcyAqLwogCQlhdG9taWNfbG9uZ19hZGRfcmV0dXJuKGFtdCwgcHJvdC0+bWVtb3J5X2FsbG9jYXRlZCk7Ci0JCXJldHVybiBtZW1jZ19tZW1vcnlfYWxsb2NhdGVkX3JlYWQoc2stPnNrX2NncnApOworCQlyZXR1cm4gcGFnZV9jb3VudGVyX3JlYWQoJnNrLT5za19jZ3JwLT5tZW1vcnlfYWxsb2NhdGVkKTsKIAl9CiAKIAlyZXR1cm4gYXRvbWljX2xvbmdfYWRkX3JldHVybihhbXQsIHByb3QtPm1lbW9yeV9hbGxvY2F0ZWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmZjLmggYi9pbmNsdWRlL3Njc2kvbGliZmMuaAppbmRleCA1MmJlYWRmLi45M2QxNGRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliZmMuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliZmMuaApAQCAtMTEwNSw4ICsxMTA1LDYgQEAKIGludCBmY19laF9kZXZpY2VfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqKTsKIGludCBmY19laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiBpbnQgZmNfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICopOwotaW50IGZjX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50IHFkZXB0aCwgaW50IHJlYXNvbik7Ci1pbnQgZmNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCB0YWdfdHlwZSk7CiAKIC8qCiAgKiBFTFMvQ1QgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDcyOGM5YWQuLjRkMWM0NmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC0zNzgsOCArMzc4LDYgQEAKIC8qCiAgKiBzY3NpIGhvc3QgdGVtcGxhdGUKICAqLwotZXh0ZXJuIGludCBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgsCi0JCQkJICAgIGludCByZWFzb24pOwogZXh0ZXJuIGludCBpc2NzaV9laF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7CiBleHRlcm4gaW50IGlzY3NpX2VoX3JlY292ZXJfdGFyZ2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKIGV4dGVybiBpbnQgaXNjc2lfZWhfc2Vzc2lvbl9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGlic2FzLmggYi9pbmNsdWRlL3Njc2kvbGlic2FzLmgKaW5kZXggZWY3ODcyYy4uODMyZGNjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYnNhcy5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJzYXMuaApAQCAtMzY1LDEyICszNjUsNiBAQAogc3RydWN0IHNjc2lfY29yZSB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAKLQlzdHJ1Y3QgbXV0ZXgJICB0YXNrX3F1ZXVlX2ZsdXNoOwotCXNwaW5sb2NrX3QgICAgICAgIHRhc2tfcXVldWVfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkICB0YXNrX3F1ZXVlOwotCWludCAgICAgICAgICAgICAgIHRhc2tfcXVldWVfc2l6ZTsKLQotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcXVldWVfdGhyZWFkOwogfTsKIAogc3RydWN0IHNhc19oYV9ldmVudCB7CkBAIC00MjIsOSArNDE2LDYgQEAKIAlzdHJ1Y3QgYXNkX3Nhc19wb3J0ICoqc2FzX3BvcnQ7IC8qIGFycmF5IG9mIHZhbGlkIHBvaW50ZXJzLCBtdXN0IGJlIHNldCAqLwogCWludCAgICAgICAgICAgICBudW1fcGh5czsgLyogbXVzdCBiZSBzZXQsIGd0IDAsIHN0YXRpYyAqLwogCi0JLyogVGhlIGNsYXNzIGNhbGxzIHRoaXMgdG8gc2VuZCBhIHRhc2sgZm9yIGV4ZWN1dGlvbi4gKi8KLQlpbnQgbGxkZF9tYXhfZXhlY3V0ZV9udW07Ci0JaW50IGxsZGRfcXVldWVfc2l6ZTsKIAlpbnQgc3RyaWN0X3dpZGVfcG9ydHM7IC8qIGJvdGggc2FzX2FkZHIgYW5kIGF0dGFjaGVkX3Nhc19hZGRyIG11c3QgbWF0Y2gKIAkJCQkqIHRoZWlyIHNpYmxpbmdzIHdoZW4gZm9ybWluZyB3aWRlIHBvcnRzICovCiAKQEAgLTYxMiw3ICs2MDMsNiBAQAogCiBzdHJ1Y3Qgc2FzX3Rhc2sgewogCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgIGxpc3Q7CiAKIAlzcGlubG9ja190ICAgdGFza19zdGF0ZV9sb2NrOwogCXVuc2lnbmVkICAgICB0YXNrX3N0YXRlX2ZsYWdzOwpAQCAtNjY1LDggKzY1NSw3IEBACiAJaW50ICAoKmxsZGRfZGV2X2ZvdW5kKShzdHJ1Y3QgZG9tYWluX2RldmljZSAqKTsKIAl2b2lkICgqbGxkZF9kZXZfZ29uZSkoc3RydWN0IGRvbWFpbl9kZXZpY2UgKik7CiAKLQlpbnQgKCpsbGRkX2V4ZWN1dGVfdGFzaykoc3RydWN0IHNhc190YXNrICosIGludCBudW0sCi0JCQkJIGdmcF90IGdmcF9mbGFncyk7CisJaW50ICgqbGxkZF9leGVjdXRlX3Rhc2spKHN0cnVjdCBzYXNfdGFzayAqLCBnZnBfdCBnZnBfZmxhZ3MpOwogCiAJLyogVGFzayBNYW5hZ2VtZW50IEZ1bmN0aW9ucy4gTXVzdCBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuICovCiAJaW50ICgqbGxkZF9hYm9ydF90YXNrKShzdHJ1Y3Qgc2FzX3Rhc2sgKik7CkBAIC03MDAsMTIgKzY4OSwxMCBAQAogaW50IHNhc19zZXRfcGh5X3NwZWVkKHN0cnVjdCBzYXNfcGh5ICpwaHksCiAJCSAgICAgIHN0cnVjdCBzYXNfcGh5X2xpbmtyYXRlcyAqcmF0ZXMpOwogaW50IHNhc19waHlfcmVzZXQoc3RydWN0IHNhc19waHkgKnBoeSwgaW50IGhhcmRfcmVzZXQpOwotaW50IHNhc19xdWV1ZV91cChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spOwogZXh0ZXJuIGludCBzYXNfcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKiAsc3RydWN0IHNjc2lfY21uZCAqKTsKIGV4dGVybiBpbnQgc2FzX3RhcmdldF9hbGxvYyhzdHJ1Y3Qgc2NzaV90YXJnZXQgKik7CiBleHRlcm4gaW50IHNhc19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICopOwotZXh0ZXJuIGludCBzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQgbmV3X2RlcHRoLAotCQkJCSAgaW50IHJlYXNvbik7CitleHRlcm4gaW50IHNhc19jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCBuZXdfZGVwdGgpOwogZXh0ZXJuIGludCBzYXNfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCBxdCk7CiBleHRlcm4gaW50IHNhc19iaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqLAogCQkJICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2kuaAppbmRleCBkMTcxNzhlLi44YTdmOGFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKQEAgLTEyOCw4ICsxMjgsMTAgQEAKICNkZWZpbmUgTU9WRV9NRURJVU0gICAgICAgICAgIDB4YTUKICNkZWZpbmUgRVhDSEFOR0VfTUVESVVNICAgICAgIDB4YTYKICNkZWZpbmUgUkVBRF8xMiAgICAgICAgICAgICAgIDB4YTgKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fT1VUXzEyIDB4YTkKICNkZWZpbmUgV1JJVEVfMTIgICAgICAgICAgICAgIDB4YWEKLSNkZWZpbmUgUkVBRF9NRURJQV9TRVJJQUxfTlVNQkVSIDB4YWIKKyNkZWZpbmUgUkVBRF9NRURJQV9TRVJJQUxfTlVNQkVSIDB4YWIgLyogT2Jzb2xldGUgd2l0aCBTUEMtMiAqLworI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTl8xMiAgMHhhYgogI2RlZmluZSBXUklURV9WRVJJRllfMTIgICAgICAgMHhhZQogI2RlZmluZSBWRVJJRllfMTIJICAgICAgMHhhZgogI2RlZmluZSBTRUFSQ0hfSElHSF8xMiAgICAgICAgMHhiMApAQCAtMTUxLDcgKzE1Myw5IEBACiAjZGVmaW5lIFZFUklGWV8xNgkgICAgICAweDhmCiAjZGVmaW5lIFNZTkNIUk9OSVpFX0NBQ0hFXzE2ICAweDkxCiAjZGVmaW5lIFdSSVRFX1NBTUVfMTYJICAgICAgMHg5MwotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTiAgICAgMHg5ZQorI2RlZmluZSBTRVJWSUNFX0FDVElPTl9CSURJUkVDVElPTkFMIDB4OWQKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU5fMTYgIDB4OWUKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fT1VUXzE2IDB4OWYKIC8qIHZhbHVlcyBmb3Igc2VydmljZSBhY3Rpb24gaW4gKi8KICNkZWZpbmUJU0FJX1JFQURfQ0FQQUNJVFlfMTYgIDB4MTAKICNkZWZpbmUgU0FJX0dFVF9MQkFfU1RBVFVTICAgIDB4MTIKQEAgLTE2NSw4ICsxNjksOCBAQAogI2RlZmluZSBNSV9SRVBPUlRfQUxJQVNFUyAgICAgMHgwYgogI2RlZmluZSBNSV9SRVBPUlRfU1VQUE9SVEVEX09QRVJBVElPTl9DT0RFUyAweDBjCiAjZGVmaW5lIE1JX1JFUE9SVF9TVVBQT1JURURfVEFTS19NQU5BR0VNRU5UX0ZVTkNUSU9OUyAweDBkCi0jZGVmaW5lIE1JX1JFUE9SVF9QUklPUklUWSAgIDB4MGUKLSNkZWZpbmUgTUlfUkVQT1JUX1RJTUVTVEFNUCAgMHgwZgorI2RlZmluZSBNSV9SRVBPUlRfUFJJT1JJVFkgICAgMHgwZQorI2RlZmluZSBNSV9SRVBPUlRfVElNRVNUQU1QICAgMHgwZgogI2RlZmluZSBNSV9NQU5BR0VNRU5UX1BST1RPQ09MX0lOIDB4MTAKIC8qIHZhbHVlIGZvciBNSV9SRVBPUlRfVEFSR0VUX1BHUyBleHQgaGVhZGVyICovCiAjZGVmaW5lIE1JX0VYVF9IRFJfUEFSQU1fRk1UICAweDIwCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKaW5kZXggNTIyYTVmMjcuLjlmYzFhZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKQEAgLTUzLDYgKzUzLDkgQEAKIAl2b2xhdGlsZSBpbnQgcGhhc2U7CiB9OwogCisvKiBmb3Igc2NtZC0+ZmxhZ3MgKi8KKyNkZWZpbmUgU0NNRF9UQUdHRUQJCSgxIDw8IDApCisKIHN0cnVjdCBzY3NpX2NtbmQgewogCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgIC8qIHNjc2lfY21uZCBwYXJ0aWNpcGF0ZXMgaW4gcXVldWUgbGlzdHMgKi8KQEAgLTEzMiw2ICsxMzUsNyBAQAogCQkJCQkgKiB0byBiZSBhdCBhbiBhZGRyZXNzIDwgMTZNYikuICovCiAKIAlpbnQgcmVzdWx0OwkJLyogU3RhdHVzIGNvZGUgZnJvbSBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlpbnQgZmxhZ3M7CQkvKiBDb21tYW5kIGZsYWdzICovCiAKIAl1bnNpZ25lZCBjaGFyIHRhZzsJLyogU0NTSS1JSSBxdWV1ZWQgY29tbWFuZCB0YWcgKi8KIH07CkBAIC0xNTksNyArMTYzLDcgQEAKIAkJCQkgc2l6ZV90ICpvZmZzZXQsIHNpemVfdCAqbGVuKTsKIGV4dGVybiB2b2lkIHNjc2lfa3VubWFwX2F0b21pY19zZyh2b2lkICp2aXJ0KTsKIAotZXh0ZXJuIGludCBzY3NpX2luaXRfaW8oc3RydWN0IHNjc2lfY21uZCAqY21kLCBnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gaW50IHNjc2lfaW5pdF9pbyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogCiBleHRlcm4gaW50IHNjc2lfZG1hX21hcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogZXh0ZXJuIHZvaWQgc2NzaV9kbWFfdW5tYXAoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RiZy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKaW5kZXggZTg5ODQ0Yy4uNzk4Mjc5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmgKQEAgLTIsMjMgKzIsMjcgQEAKICNkZWZpbmUgX1NDU0lfU0NTSV9EQkdfSAogCiBzdHJ1Y3Qgc2NzaV9jbW5kOworc3RydWN0IHNjc2lfZGV2aWNlOwogc3RydWN0IHNjc2lfc2Vuc2VfaGRyOwogCiBleHRlcm4gdm9pZCBzY3NpX3ByaW50X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqKTsKLWV4dGVybiB2b2lkIF9fc2NzaV9wcmludF9jb21tYW5kKHVuc2lnbmVkIGNoYXIgKik7Ci1leHRlcm4gdm9pZCBzY3NpX3Nob3dfZXh0ZF9zZW5zZSh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKTsKLWV4dGVybiB2b2lkIHNjc2lfc2hvd19zZW5zZV9oZHIoc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOwotZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zZW5zZV9oZHIoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKik7Ci1leHRlcm4gdm9pZCBzY3NpX2NtZF9wcmludF9zZW5zZV9oZHIoc3RydWN0IHNjc2lfY21uZCAqLCBjb25zdCBjaGFyICosCi0JCQkJICAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKik7Ci1leHRlcm4gdm9pZCBzY3NpX3ByaW50X3NlbnNlKGNoYXIgKiwgc3RydWN0IHNjc2lfY21uZCAqKTsKLWV4dGVybiB2b2lkIF9fc2NzaV9wcmludF9zZW5zZShjb25zdCBjaGFyICpuYW1lLAorZXh0ZXJuIHZvaWQgX19zY3NpX3ByaW50X2NvbW1hbmQoY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgc2NzaV9zaG93X2V4dGRfc2Vuc2UoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CitleHRlcm4gdm9pZCBzY3NpX3Nob3dfc2Vuc2VfaGRyKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqLCBjb25zdCBjaGFyICosCisJCQkJY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOworZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zZW5zZV9oZHIoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOworZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICopOworZXh0ZXJuIHZvaWQgX19zY3NpX3ByaW50X3NlbnNlKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqLCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwKIAkJCSAgICAgICBpbnQgc2Vuc2VfbGVuKTsKLWV4dGVybiB2b2lkIHNjc2lfc2hvd19yZXN1bHQoaW50KTsKLWV4dGVybiB2b2lkIHNjc2lfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1leHRlcm4gdm9pZCBzY3NpX3ByaW50X3N0YXR1cyh1bnNpZ25lZCBjaGFyKTsKK2V4dGVybiB2b2lkIHNjc2lfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2NtbmQgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfaG9zdGJ5dGVfc3RyaW5nKGludCk7CitleHRlcm4gY29uc3QgY2hhciAqc2NzaV9kcml2ZXJieXRlX3N0cmluZyhpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfbWxyZXR1cm5fc3RyaW5nKGludCk7CiBleHRlcm4gY29uc3QgY2hhciAqc2NzaV9zZW5zZV9rZXlfc3RyaW5nKHVuc2lnbmVkIGNoYXIpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfZXh0ZF9zZW5zZV9mb3JtYXQodW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CitleHRlcm4gY29uc3QgY2hhciAqc2NzaV9leHRkX3NlbnNlX2Zvcm1hdCh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyLAorCQkJCQkgIGNvbnN0IGNoYXIgKiopOwogCiAjZW5kaWYgLyogX1NDU0lfU0NTSV9EQkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCAyN2VjZWU3Li4zYTRlZGQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMTQxLDcgKzE0MSw2IEBACiAJdW5zaWduZWQgcHByOjE7CQkvKiBEZXZpY2Ugc3VwcG9ydHMgUFBSIG1lc3NhZ2VzICovCiAJdW5zaWduZWQgdGFnZ2VkX3N1cHBvcnRlZDoxOwkvKiBTdXBwb3J0cyBTQ1NJLUlJIHRhZ2dlZCBxdWV1aW5nICovCiAJdW5zaWduZWQgc2ltcGxlX3RhZ3M6MTsJLyogc2ltcGxlIHF1ZXVlIHRhZyBtZXNzYWdlcyBhcmUgZW5hYmxlZCAqLwotCXVuc2lnbmVkIG9yZGVyZWRfdGFnczoxOy8qIG9yZGVyZWQgcXVldWUgdGFnIG1lc3NhZ2VzIGFyZSBlbmFibGVkICovCiAJdW5zaWduZWQgd2FzX3Jlc2V0OjE7CS8qIFRoZXJlIHdhcyBhIGJ1cyByZXNldCBvbiB0aGUgYnVzIGZvciAKIAkJCQkgKiB0aGlzIGRldmljZSAqLwogCXVuc2lnbmVkIGV4cGVjdGluZ19jY191YToxOyAvKiBFeHBlY3RpbmcgYSBDSEVDS19DT05ESVRJT04vVU5JVF9BVFROCkBAIC0yMDEsMTEgKzIwMCw2IEBACiAJdW5zaWduZWQgbG9uZwkJc2Rldl9kYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZih1bnNpZ25lZCBsb25nKSkpKTsKIAotc3RydWN0IHNjc2lfZGhfZGV2bGlzdCB7Ci0JY2hhciAqdmVuZG9yOwotCWNoYXIgKm1vZGVsOwotfTsKLQogdHlwZWRlZiB2b2lkICgqYWN0aXZhdGVfY29tcGxldGUpKHZvaWQgKiwgaW50KTsKIHN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyIHsKIAkvKiBVc2VkIGJ5IHRoZSBpbmZyYXN0cnVjdHVyZSAqLwpAQCAtMjE0LDkgKzIwOCw4IEBACiAJLyogRmlsbGVkIGJ5IHRoZSBoYXJkd2FyZSBoYW5kbGVyICovCiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3Qgc3RydWN0IHNjc2lfZGhfZGV2bGlzdCAqZGV2bGlzdDsKIAlpbnQgKCpjaGVja19zZW5zZSkoc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqKTsKLQlpbnQgKCphdHRhY2gpKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKKwlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICooKmF0dGFjaCkoc3RydWN0IHNjc2lfZGV2aWNlICopOwogCXZvaWQgKCpkZXRhY2gpKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKIAlpbnQgKCphY3RpdmF0ZSkoc3RydWN0IHNjc2lfZGV2aWNlICosIGFjdGl2YXRlX2NvbXBsZXRlLCB2b2lkICopOwogCWludCAoKnByZXBfZm4pKHN0cnVjdCBzY3NpX2RldmljZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKQEAgLTIyOCw3ICsyMjEsNiBAQAogCXN0cnVjdCBzY3NpX2RldmljZV9oYW5kbGVyICpzY3NpX2RoOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlzdHJ1Y3Qga3JlZiBrcmVmOwotCWNoYXIgYnVmWzBdOwogfTsKIAogI2RlZmluZQl0b19zY3NpX2RldmljZShkKQlcCkBAIC0yNDQsNiArMjM2LDE1IEBACiAjZGVmaW5lIHNkZXZfZGJnKHNkZXYsIGZtdCwgYS4uLikgXAogCWRldl9kYmcoJihzZGV2KS0+c2Rldl9nZW5kZXYsIGZtdCwgIyNhKQogCisvKgorICogbGlrZSBzY21kX3ByaW50aywgYnV0IHRoZSBkZXZpY2UgbmFtZSBpcyBwYXNzZWQgaW4KKyAqIGFzIGEgc3RyaW5nIHBvaW50ZXIKKyAqLworI2RlZmluZSBzZGV2X3ByZWZpeF9wcmludGsobCwgc2RldiwgcCwgZm10LCBhLi4uKQkJCVwKKwkocCkgPwkJCQkJCQkJXAorCXNkZXZfcHJpbnRrKGwsIHNkZXYsICJbJXNdICIgZm10LCBwLCAjI2EpIDoJCQlcCisJc2Rldl9wcmludGsobCwgc2RldiwgZm10LCAjI2EpCisKICNkZWZpbmUgc2NtZF9wcmludGsocHJlZml4LCBzY21kLCBmbXQsIGEuLi4pCQkJCVwKICAgICAgICAgKHNjbWQpLT5yZXF1ZXN0LT5ycV9kaXNrID8JCQkJCVwKIAlzZGV2X3ByaW50ayhwcmVmaXgsIChzY21kKS0+ZGV2aWNlLCAiWyVzXSAiIGZtdCwJCVwKQEAgLTM3OSw3ICszODAsNyBAQAogI2RlZmluZSBfX3Nob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkgXAogCWxpc3RfZm9yX2VhY2hfZW50cnkoKHNkZXYpLCAmKChzaG9zdCktPl9fZGV2aWNlcyksIHNpYmxpbmdzKQogCi1leHRlcm4gdm9pZCBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50LCBpbnQpOworZXh0ZXJuIGludCBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50KTsKIGV4dGVybiBpbnQgc2NzaV90cmFja19xdWV1ZV9mdWxsKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQpOwogCiBleHRlcm4gaW50IHNjc2lfc2V0X21lZGl1bV9yZW1vdmFsKHN0cnVjdCBzY3NpX2RldmljZSAqLCBjaGFyKTsKQEAgLTQ0MCwxMyArNDQxLDEzIEBACiBleHRlcm4gdm9pZCBzZGV2X2Rpc2FibGVfZGlza19ldmVudHMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIGV4dGVybiB2b2lkIHNkZXZfZW5hYmxlX2Rpc2tfZXZlbnRzKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogZXh0ZXJuIGludCBzY3NpX2F1dG9wbV9nZXRfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIHNjc2lfYXV0b3BtX3B1dF9kZXZpY2Uoc3RydWN0IHNjc2lfZGV2aWNlICopOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHNjc2lfYXV0b3BtX2dldF9kZXZpY2Uoc3RydWN0IHNjc2lfZGV2aWNlICpkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc2NzaV9hdXRvcG1fcHV0X2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHNjc2lfZGV2aWNlX3JlcHJvYmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZHJpdmVyLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kcml2ZXIuaAppbmRleCBjMmI3NTk4Li44OTFhNjU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kcml2ZXIuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kcml2ZXIuaApAQCAtOSw3ICs5LDYgQEAKIHN0cnVjdCBzY3NpX2RldmljZTsKIAogc3RydWN0IHNjc2lfZHJpdmVyIHsKLQlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiAJc3RydWN0IGRldmljZV9kcml2ZXIJZ2VuZHJ2OwogCiAJdm9pZCAoKnJlc2Nhbikoc3RydWN0IGRldmljZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2VoLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9laC5oCmluZGV4IDA2YTg3OTAuLjFlMTQyMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2VoLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZWguaApAQCAtMjcsMTAgKzI3LDEwIEBACiAJdTggYWRkaXRpb25hbF9sZW5ndGg7CS8qIGFsd2F5cyAwIGZvciBmaXhlZCBzZW5zZSBmb3JtYXQgKi8KIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNjc2lfc2Vuc2VfdmFsaWQoc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKK3N0YXRpYyBpbmxpbmUgYm9vbCBzY3NpX3NlbnNlX3ZhbGlkKGNvbnN0IHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCiB7CiAJaWYgKCFzc2hkcikKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiAoc3NoZHItPnJlc3BvbnNlX2NvZGUgJiAweDcwKSA9PSAweDcwOwogfQpAQCAtNDIsMTIgKzQyLDEyIEBACiBleHRlcm4gdm9pZCBzY3NpX3JlcG9ydF9idXNfcmVzZXQoc3RydWN0IFNjc2lfSG9zdCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KHN0cnVjdCBTY3NpX0hvc3QgKiwgaW50LCBpbnQpOwogZXh0ZXJuIGludCBzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc3RydWN0IHNjc2lfZGV2aWNlICopOwotZXh0ZXJuIGludCBzY3NpX25vcm1hbGl6ZV9zZW5zZShjb25zdCB1OCAqc2Vuc2VfYnVmZmVyLCBpbnQgc2JfbGVuLAotCQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKTsKLWV4dGVybiBpbnQgc2NzaV9jb21tYW5kX25vcm1hbGl6ZV9zZW5zZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCXN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpOworZXh0ZXJuIGJvb2wgc2NzaV9ub3JtYWxpemVfc2Vuc2UoY29uc3QgdTggKnNlbnNlX2J1ZmZlciwgaW50IHNiX2xlbiwKKwkJCQkgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcik7CitleHRlcm4gYm9vbCBzY3NpX2NvbW1hbmRfbm9ybWFsaXplX3NlbnNlKGNvbnN0IHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJCQkJIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpOwogCi1zdGF0aWMgaW5saW5lIGludCBzY3NpX3NlbnNlX2lzX2RlZmVycmVkKHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCitzdGF0aWMgaW5saW5lIGJvb2wgc2NzaV9zZW5zZV9pc19kZWZlcnJlZChjb25zdCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQogewogCXJldHVybiAoKHNzaGRyLT5yZXNwb25zZV9jb2RlID49IDB4NzApICYmIChzc2hkci0+cmVzcG9uc2VfY29kZSAmIDEpKTsKIH0KQEAgLTYwLDE1ICs2MCw3IEBACiAKIGV4dGVybiB2b2lkIHNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyKGludCBkZXNjLCB1OCAqYnVmLCB1OCBrZXksIHU4IGFzYywgdTggYXNjcSk7CiAKLS8qCi0gKiBSZXNldCByZXF1ZXN0IGZyb20gZXh0ZXJuYWwgc291cmNlCi0gKi8KLSNkZWZpbmUgU0NTSV9UUllfUkVTRVRfREVWSUNFCTEKLSNkZWZpbmUgU0NTSV9UUllfUkVTRVRfQlVTCTIKLSNkZWZpbmUgU0NTSV9UUllfUkVTRVRfSE9TVAkzCi0jZGVmaW5lIFNDU0lfVFJZX1JFU0VUX1RBUkdFVAk0Ci0KLWV4dGVybiBpbnQgc2NzaV9yZXNldF9wcm92aWRlcihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50KTsKK2V4dGVybiBpbnQgc2NzaV9pb2N0bF9yZXNldChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50IF9fdXNlciAqKTsKIAogc3RydWN0IHNjc2lfZWhfc2F2ZSB7CiAJLyogc2F2ZWQgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAppbmRleCA1ZTM2MjQ4Li5jOGE0NjJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCkBAIC00NiwxMiArNDYsNiBAQAogI2RlZmluZSBESVNBQkxFX0NMVVNURVJJTkcgMAogI2RlZmluZSBFTkFCTEVfQ0xVU1RFUklORyAxCiAKLWVudW0gewotCVNDU0lfUURFUFRIX0RFRkFVTFQsCS8qIGRlZmF1bHQgcmVxdWVzdGVkIGNoYW5nZSwgZS5nLiBmcm9tIHN5c2ZzICovCi0JU0NTSV9RREVQVEhfUUZVTEwsCS8qIHNjc2ktbWwgcmVxdWVzdGVkIGR1ZSB0byBxdWV1ZSBmdWxsICovCi0JU0NTSV9RREVQVEhfUkFNUF9VUCwJLyogc2NzaS1tbCByZXF1ZXN0ZWQgZHVlIHRvIHRocmVzaG9sZCBldmVudCAqLwotfTsKLQogc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB7CiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwogCWNvbnN0IGNoYXIgKm5hbWU7CkBAIC0xOTUsNyArMTg5LDcgQEAKIAkgKiBUaGluZ3MgY3VycmVudGx5IHJlY29tbWVuZGVkIHRvIGJlIGhhbmRsZWQgYXQgdGhpcyB0aW1lIGluY2x1ZGU6CiAJICoKIAkgKiAxLiAgU2V0dGluZyB0aGUgZGV2aWNlIHF1ZXVlIGRlcHRoLiAgUHJvcGVyIHNldHRpbmcgb2YgdGhpcyBpcwotCSAqICAgICBkZXNjcmliZWQgaW4gdGhlIGNvbW1lbnRzIGZvciBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aC4KKwkgKiAgICAgZGVzY3JpYmVkIGluIHRoZSBjb21tZW50cyBmb3Igc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGguCiAJICogMi4gIERldGVybWluaW5nIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIHZhcmlvdXMgc3luY2hyb25vdXMKIAkgKiAgICAgbmVnb3RpYXRpb24gcHJvdG9jb2xzLiAgVGhlIGRldmljZSBzdHJ1Y3Qgd2lsbCBhbHJlYWR5IGhhdmUKIAkgKiAgICAgcmVzcG9uZGVkIHRvIElOUVVJUlkgYW5kIHRoZSByZXN1bHRzIG9mIHRoZSBzdGFuZGFyZCBpdGVtcwpAQCAtMjgxLDcgKzI3NSw3IEBACiAJICoKIAkgKiBTdGF0dXM6IE9QVElPTkFMCiAJICovCi0JaW50ICgqIGNoYW5nZV9xdWV1ZV9kZXB0aCkoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCwgaW50KTsKKwlpbnQgKCogY2hhbmdlX3F1ZXVlX2RlcHRoKShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50KTsKIAogCS8qCiAJICogRmlsbCBpbiB0aGlzIGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBjaGFuZ2luZyBvZiB0YWcgdHlwZXMKQEAgLTQyMiw2ICs0MTYsMTYgQEAKIAl1bnNpZ25lZCBjaGFyIHByZXNlbnQ7CiAKIAkvKgorCSAqIExldCB0aGUgYmxvY2sgbGF5ZXIgYXNzaWducyB0YWdzIHRvIGFsbCBjb21tYW5kcy4KKwkgKi8KKwl1bnNpZ25lZCB1c2VfYmxrX3RhZ3M6MTsKKworCS8qCisJICogVHJhY2sgUVVFVUVfRlVMTCBldmVudHMgYW5kIHJlZHVjZSBxdWV1ZSBkZXB0aCBvbiBkZW1hbmQuCisJICovCisJdW5zaWduZWQgdHJhY2tfcXVldWVfZGVwdGg6MTsKKworCS8qCiAJICogVGhpcyBzcGVjaWZpZXMgdGhlIG1vZGUgdGhhdCBhIExMRCBzdXBwb3J0cy4KIAkgKi8KIAl1bnNpZ25lZCBzdXBwb3J0ZWRfbW9kZToyOwpAQCAtNDUxLDExICs0NTUsNiBAQAogCSAqLwogCXVuc2lnbmVkIHNraXBfc2V0dGxlX2RlbGF5OjE7CiAKLQkvKgotCSAqIFRydWUgaWYgd2UgYXJlIHVzaW5nIG9yZGVyZWQgd3JpdGUgc3VwcG9ydC4KLQkgKi8KLQl1bnNpZ25lZCBvcmRlcmVkX3RhZzoxOwotCiAJLyogVHJ1ZSBpZiB0aGUgY29udHJvbGxlciBkb2VzIG5vdCBzdXBwb3J0IFdSSVRFIFNBTUUgKi8KIAl1bnNpZ25lZCBub193cml0ZV9zYW1lOjE7CiAKQEAgLTYzOCw2ICs2MzcsMTQgQEAKIAlzaG9ydCB1bnNpZ25lZCBpbnQgc2dfcHJvdF90YWJsZXNpemU7CiAJdW5zaWduZWQgaW50IG1heF9zZWN0b3JzOwogCXVuc2lnbmVkIGxvbmcgZG1hX2JvdW5kYXJ5OworCS8qCisJICogSW4gc2NzaS1tcSBtb2RlLCB0aGUgbnVtYmVyIG9mIGhhcmR3YXJlIHF1ZXVlcyBzdXBwb3J0ZWQgYnkgdGhlIExMRC4KKwkgKgorCSAqIE5vdGU6IGl0IGlzIGFzc3VtZWQgdGhhdCBlYWNoIGhhcmR3YXJlIHF1ZXVlIGhhcyBhIHF1ZXVlIGRlcHRoIG9mCisJICogY2FuX3F1ZXVlLiBJbiBvdGhlciB3b3JkcywgdGhlIHRvdGFsIHF1ZXVlIGRlcHRoIHBlciBob3N0CisJICogaXMgbnJfaHdfcXVldWVzICogY2FuX3F1ZXVlLgorCSAqLworCXVuc2lnbmVkIG5yX2h3X3F1ZXVlczsKIAkvKiAKIAkgKiBVc2VkIHRvIGFzc2lnbiBzZXJpYWwgbnVtYmVycyB0byB0aGUgY21kcy4KIAkgKiBQcm90ZWN0ZWQgYnkgdGhlIGhvc3QgbG9jay4KQEAgLTY0Nyw3ICs2NTQsNiBAQAogCXVuc2lnbmVkIGFjdGl2ZV9tb2RlOjI7CiAJdW5zaWduZWQgdW5jaGVja2VkX2lzYV9kbWE6MTsKIAl1bnNpZ25lZCB1c2VfY2x1c3RlcmluZzoxOwotCXVuc2lnbmVkIHVzZV9ibGtfdGNxOjE7CiAKIAkvKgogCSAqIEhvc3QgaGFzIHJlcXVlc3RlZCB0aGF0IG5vIGZ1cnRoZXIgcmVxdWVzdHMgY29tZSB0aHJvdWdoIGZvciB0aGUKQEAgLTY2MiwxMSArNjY4LDYgQEAKIAkgKi8KIAl1bnNpZ25lZCByZXZlcnNlX29yZGVyaW5nOjE7CiAKLQkvKgotCSAqIE9yZGVyZWQgd3JpdGUgc3VwcG9ydAotCSAqLwotCXVuc2lnbmVkIG9yZGVyZWRfdGFnOjE7Ci0KIAkvKiBUYXNrIG1nbXQgZnVuY3Rpb24gaW4gcHJvZ3Jlc3MgKi8KIAl1bnNpZ25lZCB0bWZfaW5fcHJvZ3Jlc3M6MTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2lvY3RsLmgKaW5kZXggYjkwMDY4NC4uOGQxOWQxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaW9jdGwuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9pb2N0bC5oCkBAIC00MCw5ICs0MCw5IEBACiAJdW5zaWduZWQgY2hhciBob3N0X3d3bls4XTsgLy8gaW5jbHVkZSBOVUxMIHRlcm0uCiB9IFNjc2lfRkNUYXJnQWRkcmVzczsKIAoraW50IHNjc2lfaW9jdGxfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCisJCWludCBjbWQsIGJvb2wgbmRlbGF5KTsKIGV4dGVybiBpbnQgc2NzaV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50LCB2b2lkIF9fdXNlciAqKTsKLWV4dGVybiBpbnQgc2NzaV9ub25ibG9ja2FibGVfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgY21kLAotCQkJCSAgIHZvaWQgX191c2VyICphcmcsIGludCBuZGVsYXkpOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9TQ1NJX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RjcS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdGNxLmgKaW5kZXggNTZlZDg0My4uZmU0YTcwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdGNxLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdGNxLmgKQEAgLTE2LDIwICsxNiwxNiBAQAogCiAjaWZkZWYgQ09ORklHX0JMT0NLCiAKK2ludCBzY3NpX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRhZ190eXBlKTsKKwogLyoqCiAgKiBzY3NpX2dldF90YWdfdHlwZSAtIGdldCB0aGUgdHlwZSBvZiB0YWcgdGhlIGRldmljZSBzdXBwb3J0cwogICogQHNkZXY6CXRoZSBzY3NpIGRldmljZQotICoKLSAqIE5vdGVzOgotICoJSWYgdGhlIGRyaXZlIG9ubHkgc3VwcG9ydHMgc2ltcGxlIHRhZ3MsIHJldHVybnMgTVNHX1NJTVBMRV9UQUcKLSAqCWlmIGl0IHN1cHBvcnRzIGFsbCB0YWcgdHlwZXMsIHJldHVybnMgTVNHX09SREVSRURfVEFHLgogICovCiBzdGF0aWMgaW5saW5lIGludCBzY3NpX2dldF90YWdfdHlwZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQogCQlyZXR1cm4gMDsKLQlpZiAoc2Rldi0+b3JkZXJlZF90YWdzKQotCQlyZXR1cm4gTVNHX09SREVSRURfVEFHOwogCWlmIChzZGV2LT5zaW1wbGVfdGFncykKIAkJcmV0dXJuIE1TR19TSU1QTEVfVEFHOwogCXJldHVybiAwOwpAQCAtMzksOTAgKzM1LDMzIEBACiB7CiAJc3dpdGNoICh0YWcpIHsKIAljYXNlIE1TR19PUkRFUkVEX1RBRzoKLQkJc2Rldi0+b3JkZXJlZF90YWdzID0gMTsKLQkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBNU0dfU0lNUExFX1RBRzoKIAkJc2Rldi0+c2ltcGxlX3RhZ3MgPSAxOwogCQlicmVhazsKIAljYXNlIDA6CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6Ci0JCXNkZXYtPm9yZGVyZWRfdGFncyA9IDA7CiAJCXNkZXYtPnNpbXBsZV90YWdzID0gMDsKIAkJYnJlYWs7CiAJfQogfQotLyoqCi0gKiBzY3NpX2FjdGl2YXRlX3RjcSAtIHR1cm4gb24gdGFnIGNvbW1hbmQgcXVldWVpbmcKLSAqIEBTRHBudDoJZGV2aWNlIHRvIHR1cm4gb24gVENRIGZvcgotICogQGRlcHRoOglxdWV1ZSBkZXB0aAotICoKLSAqIE5vdGVzOgotICoJRXZlbnR1YWxseSwgSSBob3BlIGRlcHRoIHdvdWxkIGJlIHRoZSBtYXhpbXVtIGRlcHRoCi0gKgl0aGUgZGV2aWNlIGNvdWxkIGNvcGUgd2l0aCBhbmQgdGhlIHJlYWwgcXVldWUgZGVwdGgKLSAqCXdvdWxkIGJlIGFkanVzdGFibGUgZnJvbSAwIHRvIGRlcHRoLgotICoqLwotc3RhdGljIGlubGluZSB2b2lkIHNjc2lfYWN0aXZhdGVfdGNxKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQotewotCWlmICghc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKLQkJcmV0dXJuOwotCi0JaWYgKHNob3N0X3VzZV9ibGtfbXEoc2Rldi0+aG9zdCkpCi0JCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfUVVFVUVELCBzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKLQllbHNlIGlmICghYmxrX3F1ZXVlX3RhZ2dlZChzZGV2LT5yZXF1ZXN0X3F1ZXVlKSkKLQkJYmxrX3F1ZXVlX2luaXRfdGFncyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBkZXB0aCwKLQkJCQkgICAgc2Rldi0+aG9zdC0+YnF0KTsKLQotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBkZXB0aCk7Ci19Ci0KLS8qKgotICogc2NzaV9kZWFjdGl2YXRlX3RjcSAtIHR1cm4gb2ZmIHRhZyBjb21tYW5kIHF1ZXVlaW5nCi0gKiBAU0RwbnQ6CWRldmljZSB0byB0dXJuIG9mZiBUQ1EgZm9yCi0gKiovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2NzaV9kZWFjdGl2YXRlX3RjcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKLXsKLQlpZiAoYmxrX3F1ZXVlX3RhZ2dlZChzZGV2LT5yZXF1ZXN0X3F1ZXVlKSkKLQkJYmxrX3F1ZXVlX2ZyZWVfdGFncyhzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKLQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCAwLCBkZXB0aCk7Ci19Ci0KLS8qKgotICogc2NzaV9wb3B1bGF0ZV90YWdfbXNnIC0gcGxhY2UgYSB0YWcgbWVzc2FnZSBpbiBhIGJ1ZmZlcgotICogQFNDcG50Oglwb2ludGVyIHRvIHRoZSBTY3NpX0NtbmQgZm9yIHRoZSB0YWcKLSAqIEBtc2c6CXBvaW50ZXIgdG8gdGhlIGFyZWEgdG8gcGxhY2UgdGhlIHRhZwotICoKLSAqIE5vdGVzOgotICoJZGVzaWduZWQgdG8gY3JlYXRlIHRoZSBjb3JyZWN0IHR5cGUgb2YgdGFnIG1lc3NhZ2UgZm9yIHRoZSAKLSAqCXBhcnRpY3VsYXIgcmVxdWVzdC4gIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHRhZyBtZXNzYWdlLgotICoJTWF5IHJldHVybiAwIGlmIFRDUSBpcyBkaXNhYmxlZCBmb3IgdGhpcyBkZXZpY2UuCi0gKiovCi1zdGF0aWMgaW5saW5lIGludCBzY3NpX3BvcHVsYXRlX3RhZ19tc2coc3RydWN0IHNjc2lfY21uZCAqY21kLCBjaGFyICptc2cpCi17Ci0gICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEgPSBjbWQtPnJlcXVlc3Q7Ci0KLSAgICAgICAgaWYgKGJsa19ycV90YWdnZWQocmVxKSkgewotCQkqbXNnKysgPSBNU0dfU0lNUExFX1RBRzsKLSAgICAgICAgCSptc2crKyA9IHJlcS0+dGFnOwotICAgICAgICAJcmV0dXJuIDI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNjc2lfY21uZCAqc2NzaV9tcV9maW5kX3RhZyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKLQkJdW5zaWduZWQgaW50IGh3X2N0eCwgaW50IHRhZykKKwkJCQkJCSBpbnQgdW5pcXVlX3RhZykKIHsKLQlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCXUxNiBod3EgPSBibGtfbXFfdW5pcXVlX3RhZ190b19od3EodW5pcXVlX3RhZyk7CisJc3RydWN0IHJlcXVlc3QgKnJlcSA9IE5VTEw7CiAKLQlyZXEgPSBibGtfbXFfdGFnX3RvX3JxKHNob3N0LT50YWdfc2V0LnRhZ3NbaHdfY3R4XSwgdGFnKTsKKwlpZiAoaHdxIDwgc2hvc3QtPnRhZ19zZXQubnJfaHdfcXVldWVzKQorCQlyZXEgPSBibGtfbXFfdGFnX3RvX3JxKHNob3N0LT50YWdfc2V0LnRhZ3NbaHdxXSwKKwkJCQkgICAgICAgYmxrX21xX3VuaXF1ZV90YWdfdG9fdGFnKHVuaXF1ZV90YWcpKTsKIAlyZXR1cm4gcmVxID8gKHN0cnVjdCBzY3NpX2NtbmQgKilyZXEtPnNwZWNpYWwgOiBOVUxMOwogfQogCiAvKioKICAqIHNjc2lfZmluZF90YWcgLSBmaW5kIGEgdGFnZ2VkIGNvbW1hbmQgYnkgZGV2aWNlCiAgKiBAU0RwbnQ6CXBvaW50ZXIgdG8gdGhlIFNjU0kgZGV2aWNlCi0gKiBAdGFnOgl0aGUgdGFnIG51bWJlcgorICogQHRhZzoJdGFnIGdlbmVyYXRlZCBieSBibGtfbXFfdW5pcXVlX3RhZygpCiAgKgogICogTm90ZXM6CiAgKglPbmx5IHdvcmtzIHdpdGggdGFncyBhbGxvY2F0ZWQgYnkgdGhlIGdlbmVyaWMgYmxrIGxheWVyLgpAQCAtMTMzLDkgKzcyLDkgQEAKIAogICAgICAgICBpZiAodGFnICE9IFNDU0lfTk9fVEFHKSB7CiAJCWlmIChzaG9zdF91c2VfYmxrX21xKHNkZXYtPmhvc3QpKQotCQkJcmV0dXJuIHNjc2lfbXFfZmluZF90YWcoc2Rldi0+aG9zdCwgMCwgdGFnKTsKKwkJCXJldHVybiBzY3NpX21xX2ZpbmRfdGFnKHNkZXYtPmhvc3QsIHRhZyk7CiAKLSAgICAgICAgCXJlcSA9IGJsa19xdWV1ZV9maW5kX3RhZyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCB0YWcpOworCQlyZXEgPSBibGtfcXVldWVfZmluZF90YWcoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgdGFnKTsKIAkgICAgICAgIHJldHVybiByZXEgPyAoc3RydWN0IHNjc2lfY21uZCAqKXJlcS0+c3BlY2lhbCA6IE5VTEw7CiAJfQogCkBAIC0xNzQsNyArMTEzLDcgQEAKIC8qKgogICogc2NzaV9ob3N0X2ZpbmRfdGFnIC0gZmluZCB0aGUgdGFnZ2VkIGNvbW1hbmQgYnkgaG9zdAogICogQHNob3N0Oglwb2ludGVyIHRvIHNjc2lfaG9zdAotICogQHRhZzoJdGFnIG9mIHRoZSBzY3NpX2NtbmQKKyAqIEB0YWc6CXRhZyBnZW5lcmF0ZWQgYnkgYmxrX21xX3VuaXF1ZV90YWcoKQogICoKICAqIE5vdGVzOgogICoJT25seSB3b3JrcyB3aXRoIHRhZ3MgYWxsb2NhdGVkIGJ5IHRoZSBnZW5lcmljIGJsayBsYXllci4KQEAgLTE4Niw3ICsxMjUsNyBAQAogCiAJaWYgKHRhZyAhPSBTQ1NJX05PX1RBRykgewogCQlpZiAoc2hvc3RfdXNlX2Jsa19tcShzaG9zdCkpCi0JCQlyZXR1cm4gc2NzaV9tcV9maW5kX3RhZyhzaG9zdCwgMCwgdGFnKTsKKwkJCXJldHVybiBzY3NpX21xX2ZpbmRfdGFnKHNob3N0LCB0YWcpOwogCQlyZXEgPSBibGtfbWFwX3F1ZXVlX2ZpbmRfdGFnKHNob3N0LT5icXQsIHRhZyk7CiAJCXJldHVybiByZXEgPyAoc3RydWN0IHNjc2lfY21uZCAqKXJlcS0+c3BlY2lhbCA6IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oCmluZGV4IDc0OTdhMzguLmE0ZmE1MmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmgKQEAgLTE1Nyw1ICsxNTcsNiBAQAogaW50IHNwaV9wb3B1bGF0ZV9zeW5jX21zZyh1bnNpZ25lZCBjaGFyICptc2csIGludCBwZXJpb2QsIGludCBvZmZzZXQpOwogaW50IHNwaV9wb3B1bGF0ZV9wcHJfbXNnKHVuc2lnbmVkIGNoYXIgKm1zZywgaW50IHBlcmlvZCwgaW50IG9mZnNldCwgaW50IHdpZHRoLAogCQlpbnQgb3B0aW9ucyk7CitpbnQgc3BpX3BvcHVsYXRlX3RhZ19tc2codW5zaWduZWQgY2hhciAqbXNnLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogCiAjZW5kaWYgLyogU0NTSV9UUkFOU1BPUlRfU1BJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zZy5oIGIvaW5jbHVkZS9zY3NpL3NnLmgKaW5kZXggNzUwZTVkYi4uM2FmZWM3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3NnLmgKKysrIGIvaW5jbHVkZS9zY3NpL3NnLmgKQEAgLTE2NCwxMiArMTY0LDE1IEBACiAKIC8qIFJldHVybnMgLUVCVVNZIGlmIG9jY3VwaWVkLiAzcmQgYXJndW1lbnQgcG9pbnRlciB0byBpbnQgKHNlZSBuZXh0KSAqLwogI2RlZmluZSBTR19TQ1NJX1JFU0VUIDB4MjI4NAotLyogQXNzb2NpYXRlZCB2YWx1ZXMgdGhhdCBjYW4gYmUgZ2l2ZW4gdG8gU0dfU0NTSV9SRVNFVCBmb2xsb3cgKi8KKy8qIEFzc29jaWF0ZWQgdmFsdWVzIHRoYXQgY2FuIGJlIGdpdmVuIHRvIFNHX1NDU0lfUkVTRVQgZm9sbG93LgorICogU0dfU0NTSV9SRVNFVF9OT19FU0NBTEFURSBtYXkgYmUgT1ItZWQgdG8gdGhlIF9ERVZJQ0UsIF9UQVJHRVQsIF9CVVMKKyAqIG9yIF9IT1NUIHJlc2V0IHZhbHVlIHNvIG9ubHkgdGhhdCBhY3Rpb24gaXMgYXR0ZW1wdGVkLiAqLwogI2RlZmluZQkJU0dfU0NTSV9SRVNFVF9OT1RISU5HCTAKICNkZWZpbmUJCVNHX1NDU0lfUkVTRVRfREVWSUNFCTEKICNkZWZpbmUJCVNHX1NDU0lfUkVTRVRfQlVTCTIKICNkZWZpbmUJCVNHX1NDU0lfUkVTRVRfSE9TVAkzCiAjZGVmaW5lCQlTR19TQ1NJX1JFU0VUX1RBUkdFVAk0CisjZGVmaW5lCQlTR19TQ1NJX1JFU0VUX05PX0VTQ0FMQVRFCTB4MTAwCiAKIC8qIHN5bmNocm9ub3VzIFNDU0kgY29tbWFuZCBpb2N0bCwgKG9ubHkgaW4gdmVyc2lvbiAzIGludGVyZmFjZSkgKi8KICNkZWZpbmUgU0dfSU8gMHgyMjg1ICAgLyogc2ltaWxhciBlZmZlY3QgYXMgd3JpdGUoKSBmb2xsb3dlZCBieSByZWFkKCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXJtOTIwMF9zZHJhbWMuaCBiL2luY2x1ZGUvc29jL2F0OTEvYXQ5MXJtOTIwMF9zZHJhbWMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxcm05MjAwX3NkcmFtYy5oCnJlbmFtZSB0byBpbmNsdWRlL3NvYy9hdDkxL2F0OTFybTkyMDBfc2RyYW1jLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTlfZGRyc2RyLmggYi9pbmNsdWRlL3NvYy9hdDkxL2F0OTFzYW05X2RkcnNkci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05X2RkcnNkci5oCnJlbmFtZSB0byBpbmNsdWRlL3NvYy9hdDkxL2F0OTFzYW05X2RkcnNkci5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05X3NkcmFtYy5oIGIvaW5jbHVkZS9zb2MvYXQ5MS9hdDkxc2FtOV9zZHJhbWMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOV9zZHJhbWMuaApyZW5hbWUgdG8gaW5jbHVkZS9zb2MvYXQ5MS9hdDkxc2FtOV9zZHJhbWMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb2MvdGVncmEvbWMuaCBiL2luY2x1ZGUvc29jL3RlZ3JhL21jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkZWI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc29jL3RlZ3JhL21jLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fU09DX1RFR1JBX01DX0hfXworI2RlZmluZSBfX1NPQ19URUdSQV9NQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBjbGs7CitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IHBhZ2U7CisKK3N0cnVjdCB0ZWdyYV9zbW11X2VuYWJsZSB7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgYml0OworfTsKKworLyogbGF0ZW5jeSBhbGxvd2FuY2UgKi8KK3N0cnVjdCB0ZWdyYV9tY19sYSB7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgc2hpZnQ7CisJdW5zaWduZWQgaW50IG1hc2s7CisJdW5zaWduZWQgaW50IGRlZjsKK307CisKK3N0cnVjdCB0ZWdyYV9tY19jbGllbnQgeworCXVuc2lnbmVkIGludCBpZDsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBzd2dyb3VwOworCisJdW5zaWduZWQgaW50IGZpZm9fc2l6ZTsKKworCXN0cnVjdCB0ZWdyYV9zbW11X2VuYWJsZSBzbW11OworCXN0cnVjdCB0ZWdyYV9tY19sYSBsYTsKK307CisKK3N0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgeworCXVuc2lnbmVkIGludCBzd2dyb3VwOworCXVuc2lnbmVkIGludCByZWc7Cit9OworCitzdHJ1Y3QgdGVncmFfc21tdV9vcHMgeworCXZvaWQgKCpmbHVzaF9kY2FjaGUpKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCSAgICAgc2l6ZV90IHNpemUpOworfTsKKworc3RydWN0IHRlZ3JhX3NtbXVfc29jIHsKKwljb25zdCBzdHJ1Y3QgdGVncmFfbWNfY2xpZW50ICpjbGllbnRzOworCXVuc2lnbmVkIGludCBudW1fY2xpZW50czsKKworCWNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3N3Z3JvdXAgKnN3Z3JvdXBzOworCXVuc2lnbmVkIGludCBudW1fc3dncm91cHM7CisKKwlib29sIHN1cHBvcnRzX3JvdW5kX3JvYmluX2FyYml0cmF0aW9uOworCWJvb2wgc3VwcG9ydHNfcmVxdWVzdF9saW1pdDsKKworCXVuc2lnbmVkIGludCBudW1fYXNpZHM7CisKKwljb25zdCBzdHJ1Y3QgdGVncmFfc21tdV9vcHMgKm9wczsKK307CisKK3N0cnVjdCB0ZWdyYV9tYzsKK3N0cnVjdCB0ZWdyYV9zbW11OworCisjaWZkZWYgQ09ORklHX1RFR1JBX0lPTU1VX1NNTVUKK3N0cnVjdCB0ZWdyYV9zbW11ICp0ZWdyYV9zbW11X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHRlZ3JhX3NtbXVfc29jICpzb2MsCisJCQkJICAgIHN0cnVjdCB0ZWdyYV9tYyAqbWMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRlZ3JhX3NtbXUgKgordGVncmFfc21tdV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3NvYyAqc29jLAorCQkgc3RydWN0IHRlZ3JhX21jICptYykKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCitzdHJ1Y3QgdGVncmFfbWNfc29jIHsKKwljb25zdCBzdHJ1Y3QgdGVncmFfbWNfY2xpZW50ICpjbGllbnRzOworCXVuc2lnbmVkIGludCBudW1fY2xpZW50czsKKworCWNvbnN0IHVuc2lnbmVkIGludCAqZW1lbV9yZWdzOworCXVuc2lnbmVkIGludCBudW1fZW1lbV9yZWdzOworCisJdW5zaWduZWQgaW50IG51bV9hZGRyZXNzX2JpdHM7CisJdW5zaWduZWQgaW50IGF0b21fc2l6ZTsKKworCWNvbnN0IHN0cnVjdCB0ZWdyYV9zbW11X3NvYyAqc21tdTsKK307CisKK3N0cnVjdCB0ZWdyYV9tYyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB0ZWdyYV9zbW11ICpzbW11OworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IGlycTsKKworCWNvbnN0IHN0cnVjdCB0ZWdyYV9tY19zb2MgKnNvYzsKKwl1bnNpZ25lZCBsb25nIHRpY2s7Cit9OworCisjZW5kaWYgLyogX19TT0NfVEVHUkFfTUNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yY3UuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oCmluZGV4IGUzMzVlN2QuLmM3OGU4OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3JjdS5oCkBAIC0zNiw3ICszNiw3IEBACiAKICNpZmRlZiBDT05GSUdfUkNVX1RSQUNFCiAKLSNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkKKyNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpCiAKIC8qCiAgKiBUcmFjZXBvaW50IGZvciBncmFjZS1wZXJpb2QgZXZlbnRzLiAgVGFrZXMgYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJICBfX2VudHJ5LT5jcHUsIF9fZW50cnktPnFzZXZlbnQpCiApOwogCi0jZW5kaWYgLyogI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKSAqLworI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpICovCiAKIC8qCiAgKiBUcmFjZXBvaW50IGZvciBkeW50aWNrLWlkbGUgZW50cnkvZXhpdCBldmVudHMuICBUaGVzZSB0YWtlIGEgc3RyaW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaAppbmRleCAwYTY4ZDVhLi4zMGZlZGFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmgKQEAgLTk3LDE2ICs5NywxOSBAQAogCWxvbmcgc3RhdGUgPSBwLT5zdGF0ZTsKIAogI2lmZGVmIENPTkZJR19QUkVFTVBUCisjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCisJQlVHX09OKHAgIT0gY3VycmVudCk7CisjZW5kaWYgLyogQ09ORklHX1NDSEVEX0RFQlVHICovCiAJLyoKIAkgKiBGb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzIGEgcHJlZW1wdGVkIHRhc2sgaXMgYSBydW5uaW5nIHRhc2suCiAJICovCi0JaWYgKHRhc2tfcHJlZW1wdF9jb3VudChwKSAmIFBSRUVNUFRfQUNUSVZFKQorCWlmIChwcmVlbXB0X2NvdW50KCkgJiBQUkVFTVBUX0FDVElWRSkKIAkJc3RhdGUgPSBUQVNLX1JVTk5JTkcgfCBUQVNLX1NUQVRFX01BWDsKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCiAKIAlyZXR1cm4gc3RhdGU7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBDUkVBVEVfVFJBQ0VfUE9JTlRTICovCiAKIC8qCiAgKiBUcmFjZXBvaW50IGZvciB0YXNrIHN3aXRjaGVzLCBwZXJmb3JtZWQgYnkgdGhlIHNjaGVkdWxlcjoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Njc2kuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Njc2kuaAppbmRleCBkYjZjOTM1Li4wNzliZDEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY3NpLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NzaS5oCkBAIC05NCw3ICs5NCw3IEBACiAJCXNjc2lfb3Bjb2RlX25hbWUoV1JJVEVfMTYpLAkJCVwKIAkJc2NzaV9vcGNvZGVfbmFtZShWRVJJRllfMTYpLAkJCVwKIAkJc2NzaV9vcGNvZGVfbmFtZShXUklURV9TQU1FXzE2KSwJCVwKLQkJc2NzaV9vcGNvZGVfbmFtZShTRVJWSUNFX0FDVElPTl9JTiksCQlcCisJCXNjc2lfb3Bjb2RlX25hbWUoU0VSVklDRV9BQ1RJT05fSU5fMTYpLAkJXAogCQlzY3NpX29wY29kZV9uYW1lKFNBSV9SRUFEX0NBUEFDSVRZXzE2KSwJCVwKIAkJc2NzaV9vcGNvZGVfbmFtZShTQUlfR0VUX0xCQV9TVEFUVVMpLAkJXAogCQlzY3NpX29wY29kZV9uYW1lKE1JX1JFUE9SVF9UQVJHRVRfUEdTKSwJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3N1bnJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc3VucnBjLmgKaW5kZXggMWZlZjNlNi4uMTcxY2E0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc3VucnBjLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc3VucnBjLmgKQEAgLTYsNiArNiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydHNvY2suaD4KICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KQEAgLTMwNiw2ICszMDgsMTY0IEBACiBERUZJTkVfUlBDX1NPQ0tFVF9FVkVOVChycGNfc29ja2V0X2Nsb3NlKTsKIERFRklORV9SUENfU09DS0VUX0VWRU5UKHJwY19zb2NrZXRfc2h1dGRvd24pOwogCitERUNMQVJFX0VWRU5UX0NMQVNTKHJwY194cHJ0X2V2ZW50LAorCVRQX1BST1RPKHN0cnVjdCBycGNfeHBydCAqeHBydCwgX19iZTMyIHhpZCwgaW50IHN0YXR1cyksCisKKwlUUF9BUkdTKHhwcnQsIHhpZCwgc3RhdHVzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoX19iZTMyLCB4aWQpCisJCV9fZmllbGQoaW50LCBzdGF0dXMpCisJCV9fc3RyaW5nKGFkZHIsIHhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSkKKwkJX19zdHJpbmcocG9ydCwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+eGlkID0geGlkOworCQlfX2VudHJ5LT5zdGF0dXMgPSBzdGF0dXM7CisJCV9fYXNzaWduX3N0cihhZGRyLCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0pOworCQlfX2Fzc2lnbl9zdHIocG9ydCwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdKTsKKwkpLAorCisJVFBfcHJpbnRrKCJwZWVyPVslc106JXMgeGlkPTB4JXggc3RhdHVzPSVkIiwgX19nZXRfc3RyKGFkZHIpLAorCQkJX19nZXRfc3RyKHBvcnQpLCBiZTMyX3RvX2NwdShfX2VudHJ5LT54aWQpLAorCQkJX19lbnRyeS0+c3RhdHVzKQorKTsKKworREVGSU5FX0VWRU5UKHJwY194cHJ0X2V2ZW50LCB4cHJ0X2xvb2t1cF9ycXN0LAorCVRQX1BST1RPKHN0cnVjdCBycGNfeHBydCAqeHBydCwgX19iZTMyIHhpZCwgaW50IHN0YXR1cyksCisJVFBfQVJHUyh4cHJ0LCB4aWQsIHN0YXR1cykpOworCitERUZJTkVfRVZFTlQocnBjX3hwcnRfZXZlbnQsIHhwcnRfdHJhbnNtaXQsCisJVFBfUFJPVE8oc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBfX2JlMzIgeGlkLCBpbnQgc3RhdHVzKSwKKwlUUF9BUkdTKHhwcnQsIHhpZCwgc3RhdHVzKSk7CisKK0RFRklORV9FVkVOVChycGNfeHBydF9ldmVudCwgeHBydF9jb21wbGV0ZV9ycXN0LAorCVRQX1BST1RPKHN0cnVjdCBycGNfeHBydCAqeHBydCwgX19iZTMyIHhpZCwgaW50IHN0YXR1cyksCisJVFBfQVJHUyh4cHJ0LCB4aWQsIHN0YXR1cykpOworCitUUkFDRV9FVkVOVCh4c190Y3BfZGF0YV9yZWFkeSwKKwlUUF9QUk9UTyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIGludCBlcnIsIHVuc2lnbmVkIGludCB0b3RhbCksCisKKwlUUF9BUkdTKHhwcnQsIGVyciwgdG90YWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChpbnQsIGVycikKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIHRvdGFsKQorCQlfX3N0cmluZyhhZGRyLCB4cHJ0ID8geHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FERFJdIDoKKwkJCQkiKG51bGwpIikKKwkJX19zdHJpbmcocG9ydCwgeHBydCA/IHhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QT1JUXSA6CisJCQkJIihudWxsKSIpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5lcnIgPSBlcnI7CisJCV9fZW50cnktPnRvdGFsID0gdG90YWw7CisJCV9fYXNzaWduX3N0cihhZGRyLCB4cHJ0ID8KKwkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSA6ICIobnVsbCkiKTsKKwkJX19hc3NpZ25fc3RyKHBvcnQsIHhwcnQgPworCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdIDogIihudWxsKSIpOworCSksCisKKwlUUF9wcmludGsoInBlZXI9WyVzXTolcyBlcnI9JWQgdG90YWw9JXUiLCBfX2dldF9zdHIoYWRkciksCisJCQlfX2dldF9zdHIocG9ydCksIF9fZW50cnktPmVyciwgX19lbnRyeS0+dG90YWwpCispOworCisjZGVmaW5lIHJwY19zaG93X3NvY2tfeHBydF9mbGFncyhmbGFncykgXAorCV9fcHJpbnRfZmxhZ3MoZmxhZ3MsICJ8IiwgXAorCQl7IFRDUF9SQ1ZfTEFTVF9GUkFHLCAiVENQX1JDVl9MQVNUX0ZSQUciIH0sIFwKKwkJeyBUQ1BfUkNWX0NPUFlfRlJBR0hEUiwgIlRDUF9SQ1ZfQ09QWV9GUkFHSERSIiB9LCBcCisJCXsgVENQX1JDVl9DT1BZX1hJRCwgIlRDUF9SQ1ZfQ09QWV9YSUQiIH0sIFwKKwkJeyBUQ1BfUkNWX0NPUFlfREFUQSwgIlRDUF9SQ1ZfQ09QWV9EQVRBIiB9LCBcCisJCXsgVENQX1JDVl9SRUFEX0NBTExESVIsICJUQ1BfUkNWX1JFQURfQ0FMTERJUiIgfSwgXAorCQl7IFRDUF9SQ1ZfQ09QWV9DQUxMRElSLCAiVENQX1JDVl9DT1BZX0NBTExESVIiIH0sIFwKKwkJeyBUQ1BfUlBDX1JFUExZLCAiVENQX1JQQ19SRVBMWSIgfSkKKworVFJBQ0VfRVZFTlQoeHNfdGNwX2RhdGFfcmVjdiwKKwlUUF9QUk9UTyhzdHJ1Y3Qgc29ja194cHJ0ICp4cyksCisKKwlUUF9BUkdTKHhzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fc3RyaW5nKGFkZHIsIHhzLT54cHJ0LmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSkKKwkJX19zdHJpbmcocG9ydCwgeHMtPnhwcnQuYWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdKQorCQlfX2ZpZWxkKF9fYmUzMiwgeGlkKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGZsYWdzKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNvcGllZCkKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIHJlY2xlbikKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBvZmZzZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Fzc2lnbl9zdHIoYWRkciwgeHMtPnhwcnQuYWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FERFJdKTsKKwkJX19hc3NpZ25fc3RyKHBvcnQsIHhzLT54cHJ0LmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QT1JUXSk7CisJCV9fZW50cnktPnhpZCA9IHhzLT50Y3BfeGlkOworCQlfX2VudHJ5LT5mbGFncyA9IHhzLT50Y3BfZmxhZ3M7CisJCV9fZW50cnktPmNvcGllZCA9IHhzLT50Y3BfY29waWVkOworCQlfX2VudHJ5LT5yZWNsZW4gPSB4cy0+dGNwX3JlY2xlbjsKKwkJX19lbnRyeS0+b2Zmc2V0ID0geHMtPnRjcF9vZmZzZXQ7CisJKSwKKworCVRQX3ByaW50aygicGVlcj1bJXNdOiVzIHhpZD0weCV4IGZsYWdzPSVzIGNvcGllZD0lbHUgcmVjbGVuPSV1IG9mZnNldD0lbHUiLAorCQkJX19nZXRfc3RyKGFkZHIpLCBfX2dldF9zdHIocG9ydCksIGJlMzJfdG9fY3B1KF9fZW50cnktPnhpZCksCisJCQlycGNfc2hvd19zb2NrX3hwcnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MpLAorCQkJX19lbnRyeS0+Y29waWVkLCBfX2VudHJ5LT5yZWNsZW4sIF9fZW50cnktPm9mZnNldCkKKyk7CisKK1RSQUNFX0VWRU5UKHN2Y19yZWN2LAorCVRQX1BST1RPKHN0cnVjdCBzdmNfcnFzdCAqcnFzdCwgaW50IHN0YXR1cyksCisKKwlUUF9BUkdTKHJxc3QsIHN0YXR1cyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBzb2NrYWRkciAqLCBhZGRyKQorCQlfX2ZpZWxkKF9fYmUzMiwgeGlkKQorCQlfX2ZpZWxkKGludCwgc3RhdHVzKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcnFzdC0+cnFfYWRkcjsKKwkJX19lbnRyeS0+eGlkID0gc3RhdHVzID4gMCA/IHJxc3QtPnJxX3hpZCA6IDA7CisJCV9fZW50cnktPnN0YXR1cyA9IHN0YXR1czsKKwkpLAorCisJVFBfcHJpbnRrKCJhZGRyPSVwSVNjcCB4aWQ9MHgleCBzdGF0dXM9JWQiLCBfX2VudHJ5LT5hZGRyLAorCQkJYmUzMl90b19jcHUoX19lbnRyeS0+eGlkKSwgX19lbnRyeS0+c3RhdHVzKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhzdmNfcnFzdF9zdGF0dXMsCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3QsIGludCBzdGF0dXMpLAorCisJVFBfQVJHUyhycXN0LCBzdGF0dXMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3Qgc29ja2FkZHIgKiwgYWRkcikKKwkJX19maWVsZChfX2JlMzIsIHhpZCkKKwkJX19maWVsZChpbnQsIGRyb3BtZSkKKwkJX19maWVsZChpbnQsIHN0YXR1cykKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnJxc3QtPnJxX2FkZHI7CisJCV9fZW50cnktPnhpZCA9IHJxc3QtPnJxX3hpZDsKKwkJX19lbnRyeS0+ZHJvcG1lID0gKGludClycXN0LT5ycV9kcm9wbWU7CisJCV9fZW50cnktPnN0YXR1cyA9IHN0YXR1czsKKwkpLAorCisJVFBfcHJpbnRrKCJhZGRyPSVwSVNjcCBycV94aWQ9MHgleCBkcm9wbWU9JWQgc3RhdHVzPSVkIiwKKwkJX19lbnRyeS0+YWRkciwgYmUzMl90b19jcHUoX19lbnRyeS0+eGlkKSwgX19lbnRyeS0+ZHJvcG1lLAorCQlfX2VudHJ5LT5zdGF0dXMpCispOworCitERUZJTkVfRVZFTlQoc3ZjX3Jxc3Rfc3RhdHVzLCBzdmNfcHJvY2VzcywKKwlUUF9QUk9UTyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3QsIGludCBzdGF0dXMpLAorCVRQX0FSR1MocnFzdCwgc3RhdHVzKSk7CisKK0RFRklORV9FVkVOVChzdmNfcnFzdF9zdGF0dXMsIHN2Y19zZW5kLAorCVRQX1BST1RPKHN0cnVjdCBzdmNfcnFzdCAqcnFzdCwgaW50IHN0YXR1cyksCisJVFBfQVJHUyhycXN0LCBzdGF0dXMpKTsKKwogI2VuZGlmIC8qIF9UUkFDRV9TVU5SUENfSCAqLwogCiAjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy90YXJnZXQuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RhcmdldC5oCmluZGV4IGRhOWNjMGYuLjQ1NDAzNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RhcmdldC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RhcmdldC5oCkBAIC05Niw3ICs5Niw3IEBACiAJCXNjc2lfb3Bjb2RlX25hbWUoV1JJVEVfMTYpLAkJCVwKIAkJc2NzaV9vcGNvZGVfbmFtZShWRVJJRllfMTYpLAkJCVwKIAkJc2NzaV9vcGNvZGVfbmFtZShXUklURV9TQU1FXzE2KSwJCVwKLQkJc2NzaV9vcGNvZGVfbmFtZShTRVJWSUNFX0FDVElPTl9JTiksCQlcCisJCXNjc2lfb3Bjb2RlX25hbWUoU0VSVklDRV9BQ1RJT05fSU5fMTYpLAkJXAogCQlzY3NpX29wY29kZV9uYW1lKFNBSV9SRUFEX0NBUEFDSVRZXzE2KSwJCVwKIAkJc2NzaV9vcGNvZGVfbmFtZShTQUlfR0VUX0xCQV9TVEFUVVMpLAkJXAogCQlzY3NpX29wY29kZV9uYW1lKE1JX1JFUE9SVF9UQVJHRVRfUEdTKSwJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmggYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCmluZGV4IDI2YjRmMmUuLjEzOWI1MDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaApAQCAtMjc3LDE0ICsyNzcsMTIgQEAKIAlmaWVsZCA9ICh0eXBlb2YoZmllbGQpKWl0ZXItPmVudDsJCQkJXAogCQkJCQkJCQkJXAogCXJldCA9IGZ0cmFjZV9yYXdfb3V0cHV0X3ByZXAoaXRlciwgdHJhY2VfZXZlbnQpOwkJXAotCWlmIChyZXQpCQkJCQkJCVwKKwlpZiAocmV0ICE9IFRSQUNFX1RZUEVfSEFORExFRCkJCQkJCVwKIAkJcmV0dXJuIHJldDsJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCBwcmludCk7CQkJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CQkJCVwKKwl0cmFjZV9zZXFfcHJpbnRmKHMsIHByaW50KTsJCQkJCVwKIAkJCQkJCQkJCVwKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwkJCQkJXAorCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKHMpOwkJCQkJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIGZ0cmFjZV9ldmVudF90eXBlX2Z1bmNzXyMjY2FsbCA9IHsJXAogCS50cmFjZQkJCT0gZnRyYWNlX3Jhd19vdXRwdXRfIyNjYWxsLAkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NpZ2luZm8uaCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKaW5kZXggYmE1YmU3Zi4uMWUzNTUyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc2lnaW5mby5oCkBAIC05MSw2ICs5MSwxMCBAQAogCQkJaW50IF90cmFwbm87CS8qIFRSQVAgIyB3aGljaCBjYXVzZWQgdGhlIHNpZ25hbCAqLwogI2VuZGlmCiAJCQlzaG9ydCBfYWRkcl9sc2I7IC8qIExTQiBvZiB0aGUgcmVwb3J0ZWQgYWRkcmVzcyAqLworCQkJc3RydWN0IHsKKwkJCQl2b2lkIF9fdXNlciAqX2xvd2VyOworCQkJCXZvaWQgX191c2VyICpfdXBwZXI7CisJCQl9IF9hZGRyX2JuZDsKIAkJfSBfc2lnZmF1bHQ7CiAKIAkJLyogU0lHUE9MTCAqLwpAQCAtMTMxLDYgKzEzNSw4IEBACiAjZGVmaW5lIHNpX3RyYXBubwlfc2lmaWVsZHMuX3NpZ2ZhdWx0Ll90cmFwbm8KICNlbmRpZgogI2RlZmluZSBzaV9hZGRyX2xzYglfc2lmaWVsZHMuX3NpZ2ZhdWx0Ll9hZGRyX2xzYgorI2RlZmluZSBzaV9sb3dlcglfc2lmaWVsZHMuX3NpZ2ZhdWx0Ll9hZGRyX2JuZC5fbG93ZXIKKyNkZWZpbmUgc2lfdXBwZXIJX3NpZmllbGRzLl9zaWdmYXVsdC5fYWRkcl9ibmQuX3VwcGVyCiAjZGVmaW5lIHNpX2JhbmQJCV9zaWZpZWxkcy5fc2lncG9sbC5fYmFuZAogI2RlZmluZSBzaV9mZAkJX3NpZmllbGRzLl9zaWdwb2xsLl9mZAogI2lmZGVmIF9fQVJDSF9TSUdTWVMKQEAgLTE5OSw3ICsyMDUsOCBAQAogICovCiAjZGVmaW5lIFNFR1ZfTUFQRVJSCShfX1NJX0ZBVUxUfDEpCS8qIGFkZHJlc3Mgbm90IG1hcHBlZCB0byBvYmplY3QgKi8KICNkZWZpbmUgU0VHVl9BQ0NFUlIJKF9fU0lfRkFVTFR8MikJLyogaW52YWxpZCBwZXJtaXNzaW9ucyBmb3IgbWFwcGVkIG9iamVjdCAqLwotI2RlZmluZSBOU0lHU0VHVgkyCisjZGVmaW5lIFNFR1ZfQk5ERVJSCShfX1NJX0ZBVUxUfDMpICAvKiBmYWlsZWQgYWRkcmVzcyBib3VuZCBjaGVja3MgKi8KKyNkZWZpbmUgTlNJR1NFR1YJMwogCiAvKgogICogU0lHQlVTIHNpX2NvZGVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkIGIvaW5jbHVkZS91YXBpL2xpbnV4L0tidWlsZAppbmRleCA0Yzk0ZjMxLi44NTIzZjliIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQKQEAgLTQyNyw3ICs0MjcsNyBAQAogaGVhZGVyLXkgKz0gdmlydGlvX3BjaS5oCiBoZWFkZXIteSArPSB2aXJ0aW9fcmluZy5oCiBoZWFkZXIteSArPSB2aXJ0aW9fcm5nLmgKLWhlYWRlcj15ICs9IHZtX3NvY2tldHMuaAoraGVhZGVyLXkgKz0gdm1fc29ja2V0cy5oCiBoZWFkZXIteSArPSB2dC5oCiBoZWFkZXIteSArPSB3YWl0LmgKIGhlYWRlci15ICs9IHdhbnJvdXRlci5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZGxtY29uc3RhbnRzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZGxtY29uc3RhbnRzLmgKaW5kZXggNDdiZjA4ZC4uMjg1N2JkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2RsbWNvbnN0YW50cy5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9kbG1jb25zdGFudHMuaApAQCAtMTE0LDcgKzExNCw3IEBACiAgKgogICogRExNX0xLRl9PUlBIQU4KICAqCi0gKiBub3QgeWV0IGltcGxlbWVudGVkCisgKiBBY3F1aXJlIGFuIG9ycGhhbiBsb2NrLgogICoKICAqIERMTV9MS0ZfQUxUUFIKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZG0taW9jdGwuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9kbS1pb2N0bC5oCmluZGV4IDMzMTVhYjIuLmE1NzBkN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9kbS1pb2N0bC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9kbS1pb2N0bC5oCkBAIC0yNjcsOSArMjY3LDkgQEAKICNkZWZpbmUgRE1fREVWX1NFVF9HRU9NRVRSWQlfSU9XUihETV9JT0NUTCwgRE1fREVWX1NFVF9HRU9NRVRSWV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKIAogI2RlZmluZSBETV9WRVJTSU9OX01BSk9SCTQKLSNkZWZpbmUgRE1fVkVSU0lPTl9NSU5PUgkyOAorI2RlZmluZSBETV9WRVJTSU9OX01JTk9SCTI5CiAjZGVmaW5lIERNX1ZFUlNJT05fUEFUQ0hMRVZFTAkwCi0jZGVmaW5lIERNX1ZFUlNJT05fRVhUUkEJIi1pb2N0bCAoMjAxNC0wOS0xNykiCisjZGVmaW5lIERNX1ZFUlNJT05fRVhUUkEJIi1pb2N0bCAoMjAxNC0xMC0yOCkiCiAKIC8qIFN0YXR1cyBiaXRzICovCiAjZGVmaW5lIERNX1JFQURPTkxZX0ZMQUcJKDEgPDwgMCkgLyogSW4vT3V0ICovCkBAIC0zNTIsNCArMzUyLDkgQEAKICAqLwogI2RlZmluZSBETV9ERUZFUlJFRF9SRU1PVkUJCSgxIDw8IDE3KSAvKiBJbi9PdXQgKi8KIAorLyoKKyAqIElmIHNldCwgdGhlIGRldmljZSBpcyBzdXNwZW5kZWQgaW50ZXJuYWxseS4KKyAqLworI2RlZmluZSBETV9JTlRFUk5BTF9TVVNQRU5EX0ZMQUcJKDEgPDwgMTgpIC8qIE91dCAqLworCiAjZW5kaWYJCQkJLyogX0xJTlVYX0RNX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9lbGYtZW0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9lbGYtZW0uaAppbmRleCBhYTkwYmM5Li5hZTk5Zjc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZWxmLWVtLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2VsZi1lbS5oCkBAIC0zNCw2ICszNCw3IEBACiAjZGVmaW5lIEVNX01OMTAzMDAJODkJLyogUGFuYXNvbmljL01FSSBNTjEwMzAwLCBBTTMzICovCiAjZGVmaW5lIEVNX09QRU5SSVNDICAgICA5MiAgICAgLyogT3BlblJJU0MgMzItYml0IGVtYmVkZGVkIHByb2Nlc3NvciAqLwogI2RlZmluZSBFTV9CTEFDS0ZJTiAgICAgMTA2ICAgICAvKiBBREkgQmxhY2tmaW4gUHJvY2Vzc29yICovCisjZGVmaW5lIEVNX0FMVEVSQV9OSU9TMgkxMTMJLyogQWx0ZXJhIE5pb3MgSUkgc29mdC1jb3JlIHByb2Nlc3NvciAqLwogI2RlZmluZSBFTV9USV9DNjAwMAkxNDAJLyogVEkgQzZYIERTUHMgKi8KICNkZWZpbmUgRU1fQUFSQ0g2NAkxODMJLyogQVJNIDY0IGJpdCAqLwogI2RlZmluZSBFTV9GUlYJCTB4NTQ0MQkvKiBGdWppdHN1IEZSLVYgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9lbGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9lbGYuaAppbmRleCBlYTliZjI1Li43MWUxZDBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZWxmLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2VsZi5oCkBAIC0zOTcsNiArMzk3LDcgQEAKICNkZWZpbmUgTlRfQVJNX1RMUwkweDQwMQkJLyogQVJNIFRMUyByZWdpc3RlciAqLwogI2RlZmluZSBOVF9BUk1fSFdfQlJFQUsJMHg0MDIJCS8qIEFSTSBoYXJkd2FyZSBicmVha3BvaW50IHJlZ2lzdGVycyAqLwogI2RlZmluZSBOVF9BUk1fSFdfV0FUQ0gJMHg0MDMJCS8qIEFSTSBoYXJkd2FyZSB3YXRjaHBvaW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBOVF9BUk1fU1lTVEVNX0NBTEwJMHg0MDQJLyogQVJNIHN5c3RlbSBjYWxsIG51bWJlciAqLwogI2RlZmluZSBOVF9NRVRBR19DQlVGCTB4NTAwCQkvKiBNZXRhZyBjYXRjaCBidWZmZXIgcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5UX01FVEFHX1JQSVBFCTB4NTAxCQkvKiBNZXRhZyByZWFkIHBpcGVsaW5lIHN0YXRlICovCiAjZGVmaW5lIE5UX01FVEFHX1RMUwkweDUwMgkJLyogTWV0YWcgVExTIHBvaW50ZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZnNkL2RlYnVnLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmZzZC9kZWJ1Zy5oCmluZGV4IGE2ZjQ1M2MuLjFmZGM5NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZnNkL2RlYnVnLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25mc2QvZGVidWcuaApAQCAtMTUsNyArMTUsNyBAQAogICogRW5hYmxlIGRlYnVnZ2luZyBmb3IgbmZzZC4KICAqIFJlcXVpcmVzIFJQQ19ERUJVRy4KICAqLwotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIE5GU0RfREVCVUcJCTEKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCA5ZDg0NTQwLi45Yjc5YWJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTEzNyw4ICsxMzcsOSBAQAogCVBFUkZfU0FNUExFX0RBVEFfU1JDCQkJPSAxVSA8PCAxNSwKIAlQRVJGX1NBTVBMRV9JREVOVElGSUVSCQkJPSAxVSA8PCAxNiwKIAlQRVJGX1NBTVBMRV9UUkFOU0FDVElPTgkJCT0gMVUgPDwgMTcsCisJUEVSRl9TQU1QTEVfUkVHU19JTlRSCQkJPSAxVSA8PCAxOCwKIAotCVBFUkZfU0FNUExFX01BWCA9IDFVIDw8IDE4LAkJLyogbm9uLUFCSSAqLworCVBFUkZfU0FNUExFX01BWCA9IDFVIDw8IDE5LAkJLyogbm9uLUFCSSAqLwogfTsKIAogLyoKQEAgLTIzOCw2ICsyMzksNyBAQAogI2RlZmluZSBQRVJGX0FUVFJfU0laRV9WRVIyCTgwCS8qIGFkZDogYnJhbmNoX3NhbXBsZV90eXBlICovCiAjZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjMJOTYJLyogYWRkOiBzYW1wbGVfcmVnc191c2VyICovCiAJCQkJCS8qIGFkZDogc2FtcGxlX3N0YWNrX3VzZXIgKi8KKyNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSNAkxMDQJLyogYWRkOiBzYW1wbGVfcmVnc19pbnRyICovCiAKIC8qCiAgKiBIYXJkd2FyZSBldmVudF9pZCB0byBtb25pdG9yIHZpYSBhIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgZXZlbnQ6CkBAIC0zMzQsNiArMzM2LDE1IEBACiAKIAkvKiBBbGlnbiB0byB1NjQuICovCiAJX191MzIJX19yZXNlcnZlZF8yOworCS8qCisJICogRGVmaW5lcyBzZXQgb2YgcmVncyB0byBkdW1wIGZvciBlYWNoIHNhbXBsZQorCSAqIHN0YXRlIGNhcHR1cmVkIG9uOgorCSAqICAtIHByZWNpc2UgPSAwOiBQTVUgaW50ZXJydXB0CisJICogIC0gcHJlY2lzZSA+IDA6IHNhbXBsZWQgaW5zdHJ1Y3Rpb24KKwkgKgorCSAqIFNlZSBhc20vcGVyZl9yZWdzLmggZm9yIGRldGFpbHMuCisJICovCisJX191NjQJc2FtcGxlX3JlZ3NfaW50cjsKIH07CiAKICNkZWZpbmUgcGVyZl9mbGFncyhhdHRyKQkoKigmKGF0dHIpLT5yZWFkX2Zvcm1hdCArIDEpKQpAQCAtNjg2LDYgKzY5Nyw4IEBACiAJICoJeyB1NjQJCQl3ZWlnaHQ7ICAgfSAmJiBQRVJGX1NBTVBMRV9XRUlHSFQKIAkgKgl7IHU2NAkJCWRhdGFfc3JjOyB9ICYmIFBFUkZfU0FNUExFX0RBVEFfU1JDCiAJICoJeyB1NjQJCQl0cmFuc2FjdGlvbjsgfSAmJiBQRVJGX1NBTVBMRV9UUkFOU0FDVElPTgorCSAqCXsgdTY0CQkJYWJpOyAjIGVudW0gcGVyZl9zYW1wbGVfcmVnc19hYmkKKwkgKgkgIHU2NAkJCXJlZ3Nbd2VpZ2h0KG1hc2spXTsgfSAmJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIKIAkgKiB9OwogCSAqLwogCVBFUkZfUkVDT1JEX1NBTVBMRQkJCT0gOSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgKaW5kZXggNTEzZGY3NS4uODlmNjM1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgKQEAgLTE3OSw0ICsxNzksMTAgQEAKICNkZWZpbmUgUFJfU0VUX1RIUF9ESVNBQkxFCTQxCiAjZGVmaW5lIFBSX0dFVF9USFBfRElTQUJMRQk0MgogCisvKgorICogVGVsbCB0aGUga2VybmVsIHRvIHN0YXJ0L3N0b3AgaGVscGluZyB1c2Vyc3BhY2UgbWFuYWdlIGJvdW5kcyB0YWJsZXMuCisgKi8KKyNkZWZpbmUgUFJfTVBYX0VOQUJMRV9NQU5BR0VNRU5UICA0MworI2RlZmluZSBQUl9NUFhfRElTQUJMRV9NQU5BR0VNRU5UIDQ0CisKICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvc2NoZWQuaAppbmRleCBiOTMyYmU5Li5jYzg5ZGRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvc2NoZWQuaApAQCAtMjMsOCArMjMsOCBAQAogI2RlZmluZSBDTE9ORV9DSElMRF9TRVRUSUQJMHgwMTAwMDAwMAkvKiBzZXQgdGhlIFRJRCBpbiB0aGUgY2hpbGQgKi8KIC8qIDB4MDIwMDAwMDAgd2FzIHByZXZpb3VzbHkgdGhlIHVudXNlZCBDTE9ORV9TVE9QUEVEIChTdGFydCBpbiBzdG9wcGVkIHN0YXRlKQogICAgYW5kIGlzIG5vdyBhdmFpbGFibGUgZm9yIHJlLXVzZS4gKi8KLSNkZWZpbmUgQ0xPTkVfTkVXVVRTCQkweDA0MDAwMDAwCS8qIE5ldyB1dHNuYW1lIGdyb3VwPyAqLwotI2RlZmluZSBDTE9ORV9ORVdJUEMJCTB4MDgwMDAwMDAJLyogTmV3IGlwY3MgKi8KKyNkZWZpbmUgQ0xPTkVfTkVXVVRTCQkweDA0MDAwMDAwCS8qIE5ldyB1dHNuYW1lIG5hbWVzcGFjZSAqLworI2RlZmluZSBDTE9ORV9ORVdJUEMJCTB4MDgwMDAwMDAJLyogTmV3IGlwYyBuYW1lc3BhY2UgKi8KICNkZWZpbmUgQ0xPTkVfTkVXVVNFUgkJMHgxMDAwMDAwMAkvKiBOZXcgdXNlciBuYW1lc3BhY2UgKi8KICNkZWZpbmUgQ0xPTkVfTkVXUElECQkweDIwMDAwMDAwCS8qIE5ldyBwaWQgbmFtZXNwYWNlICovCiAjZGVmaW5lIENMT05FX05FV05FVAkJMHg0MDAwMDAwMAkvKiBOZXcgbmV0d29yayBuYW1lc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9zeXNjdGwuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9zeXNjdGwuaAppbmRleCA0M2FhYmExLi4wOTU2MzczIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvc3lzY3RsLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3N5c2N0bC5oCkBAIC0xNTMsNiArMTUzLDcgQEAKIAlLRVJOX01BWF9MT0NLX0RFUFRIPTc0LCAvKiBpbnQ6IHJ0bXV0ZXgncyBtYXhpbXVtIGxvY2sgZGVwdGggKi8KIAlLRVJOX05NSV9XQVRDSERPRz03NSwgLyogaW50OiBlbmFibGUvZGlzYWJsZSBubWkgd2F0Y2hkb2cgKi8KIAlLRVJOX1BBTklDX09OX05NST03NiwgLyogaW50OiB3aGV0aGVyIHdlIHdpbGwgcGFuaWMgb24gYW4gdW5yZWNvdmVyZWQgKi8KKwlLRVJOX1BBTklDX09OX1dBUk49NzcsIC8qIGludDogY2FsbCBwYW5pYygpIGluIFdBUk4oKSBmdW5jdGlvbnMgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDIwODFhNGQuLjlhZmI5NzEgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCSAgdGhvdXNhbmRzIG9mIENQVXMuICBJdCBhbHNvIHNjYWxlcyBkb3duIG5pY2VseSB0bwogCSAgc21hbGxlciBzeXN0ZW1zLgogCi1jb25maWcgVFJFRV9QUkVFTVBUX1JDVQorY29uZmlnIFBSRUVNUFRfUkNVCiAJYm9vbCAiUHJlZW1wdGlibGUgdHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIgogCWRlcGVuZHMgb24gUFJFRU1QVAogCXNlbGVjdCBJUlFfV09SSwpAQCAtNTAxLDEyICs1MDEsNiBAQAogCiBlbmRjaG9pY2UKIAotY29uZmlnIFBSRUVNUFRfUkNVCi0JZGVmX2Jvb2wgVFJFRV9QUkVFTVBUX1JDVQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgcHJlZW1wdGlibGUtUkNVIGNvZGUgdGhhdCBpcyBjb21tb24gYmV0d2VlbgotCSAgVFJFRV9QUkVFTVBUX1JDVSBhbmQsIGluIHRoZSBvbGQgZGF5cywgVElOWV9QUkVFTVBUX1JDVS4KLQogY29uZmlnIFRBU0tTX1JDVQogCWJvb2wgIlRhc2tfYmFzZWQgUkNVIGltcGxlbWVudGF0aW9uIHVzaW5nIHZvbHVudGFyeSBjb250ZXh0IHN3aXRjaCIKIAlkZWZhdWx0IG4KQEAgLTUxOCw3ICs1MTIsNyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIFJDVV9TVEFMTF9DT01NT04KLQlkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UgfHwgUkNVX1RSQUNFICkKKwlkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFBSRUVNUFRfUkNVIHx8IFJDVV9UUkFDRSApCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBSQ1UgQ1BVIHN0YWxsIGNvZGUgdGhhdCBpcyBjb21tb24gYmV0d2VlbgogCSAgdGhlIFRJTlkgYW5kIFRSRUUgdmFyaWFudHMgb2YgUkNVLiAgVGhlIHB1cnBvc2UgaXMgdG8gYWxsb3cKQEAgLTU3Niw3ICs1NzAsNyBAQAogCWludCAiVHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIGZhbm91dCB2YWx1ZSIKIAlyYW5nZSAyIDY0IGlmIDY0QklUCiAJcmFuZ2UgMiAzMiBpZiAhNjRCSVQKLQlkZXBlbmRzIG9uIFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UKKwlkZXBlbmRzIG9uIFRSRUVfUkNVIHx8IFBSRUVNUFRfUkNVCiAJZGVmYXVsdCA2NCBpZiA2NEJJVAogCWRlZmF1bHQgMzIgaWYgITY0QklUCiAJaGVscApAQCAtNTk2LDcgKzU5MCw3IEBACiAJaW50ICJUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgbGVhZi1sZXZlbCBmYW5vdXQgdmFsdWUiCiAJcmFuZ2UgMiBSQ1VfRkFOT1VUIGlmIDY0QklUCiAJcmFuZ2UgMiBSQ1VfRkFOT1VUIGlmICE2NEJJVAotCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVQorCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgUFJFRU1QVF9SQ1UKIAlkZWZhdWx0IDE2CiAJaGVscAogCSAgVGhpcyBvcHRpb24gY29udHJvbHMgdGhlIGxlYWYtbGV2ZWwgZmFub3V0IG9mIGhpZXJhcmNoaWNhbApAQCAtNjIxLDcgKzYxNSw3IEBACiAKIGNvbmZpZyBSQ1VfRkFOT1VUX0VYQUNUCiAJYm9vbCAiRGlzYWJsZSB0cmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgYXV0by1iYWxhbmNpbmciCi0JZGVwZW5kcyBvbiBUUkVFX1JDVSB8fCBUUkVFX1BSRUVNUFRfUkNVCisJZGVwZW5kcyBvbiBUUkVFX1JDVSB8fCBQUkVFTVBUX1JDVQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGZvcmNlcyB1c2Ugb2YgdGhlIGV4YWN0IFJDVV9GQU5PVVQgdmFsdWUgc3BlY2lmaWVkLApAQCAtNjUyLDExICs2NDYsMTEgQEAKIAkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCiBjb25maWcgVFJFRV9SQ1VfVFJBQ0UKLQlkZWZfYm9vbCBSQ1VfVFJBQ0UgJiYgKCBUUkVFX1JDVSB8fCBUUkVFX1BSRUVNUFRfUkNVICkKKwlkZWZfYm9vbCBSQ1VfVFJBQ0UgJiYgKCBUUkVFX1JDVSB8fCBQUkVFTVBUX1JDVSApCiAJc2VsZWN0IERFQlVHX0ZTCiAJaGVscAogCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgdHJhY2luZyBmb3IgdGhlIFRSRUVfUkNVIGFuZAotCSAgVFJFRV9QUkVFTVBUX1JDVSBpbXBsZW1lbnRhdGlvbnMsIHBlcm1pdHRpbmcgTWFrZWZpbGUgdG8KKwkgIFBSRUVNUFRfUkNVIGltcGxlbWVudGF0aW9ucywgcGVybWl0dGluZyBNYWtlZmlsZSB0bwogCSAgdHJpdmlhbGx5IHNlbGVjdCBrZXJuZWwvcmN1dHJlZV90cmFjZS5jLgogCiBjb25maWcgUkNVX0JPT1NUCkBAIC02NzIsMzAgKzY2NiwzMSBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCByZWFsLXRpbWUgYXBwcyBvciBoZWF2eSBsb2FkcwogCSAgU2F5IE4gaGVyZSBpZiB5b3UgYXJlIHVuc3VyZS4KIAotY29uZmlnIFJDVV9CT09TVF9QUklPCi0JaW50ICJSZWFsLXRpbWUgcHJpb3JpdHkgdG8gYm9vc3QgUkNVIHJlYWRlcnMgdG8iCitjb25maWcgUkNVX0tUSFJFQURfUFJJTworCWludCAiUmVhbC10aW1lIHByaW9yaXR5IHRvIHVzZSBmb3IgUkNVIHdvcmtlciB0aHJlYWRzIgogCXJhbmdlIDEgOTkKIAlkZXBlbmRzIG9uIFJDVV9CT09TVAogCWRlZmF1bHQgMQogCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgcmVhbC10aW1lIHByaW9yaXR5IHRvIHdoaWNoIGxvbmctdGVybQotCSAgcHJlZW1wdGVkIFJDVSByZWFkZXJzIGFyZSB0byBiZSBib29zdGVkLiAgSWYgeW91IGFyZSB3b3JraW5nCi0JICB3aXRoIGEgcmVhbC10aW1lIGFwcGxpY2F0aW9uIHRoYXQgaGFzIG9uZSBvciBtb3JlIENQVS1ib3VuZAotCSAgdGhyZWFkcyBydW5uaW5nIGF0IGEgcmVhbC10aW1lIHByaW9yaXR5IGxldmVsLCB5b3Ugc2hvdWxkIHNldAotCSAgUkNVX0JPT1NUX1BSSU8gdG8gYSBwcmlvcml0eSBoaWdoZXIgdGhlbiB0aGUgaGlnaGVzdC1wcmlvcml0eQotCSAgcmVhbC10aW1lIENQVS1ib3VuZCB0aHJlYWQuICBUaGUgZGVmYXVsdCBSQ1VfQk9PU1RfUFJJTyB2YWx1ZQotCSAgb2YgMSBpcyBhcHByb3ByaWF0ZSBpbiB0aGUgY29tbW9uIGNhc2UsIHdoaWNoIGlzIHJlYWwtdGltZQorCSAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBTQ0hFRF9GSUZPIHByaW9yaXR5IHZhbHVlIHRoYXQgd2lsbCBiZQorCSAgYXNzaWduZWQgdG8gdGhlIHJjdWMvbiBhbmQgcmN1Yi9uIHRocmVhZHMgYW5kIGlzIGFsc28gdGhlIHZhbHVlCisJICB1c2VkIGZvciBSQ1VfQk9PU1QgKGlmIGVuYWJsZWQpLiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhCisJICByZWFsLXRpbWUgYXBwbGljYXRpb24gdGhhdCBoYXMgb25lIG9yIG1vcmUgQ1BVLWJvdW5kIHRocmVhZHMKKwkgIHJ1bm5pbmcgYXQgYSByZWFsLXRpbWUgcHJpb3JpdHkgbGV2ZWwsIHlvdSBzaG91bGQgc2V0CisJICBSQ1VfS1RIUkVBRF9QUklPIHRvIGEgcHJpb3JpdHkgaGlnaGVyIHRoYW4gdGhlIGhpZ2hlc3QtcHJpb3JpdHkKKwkgIHJlYWwtdGltZSBDUFUtYm91bmQgYXBwbGljYXRpb24gdGhyZWFkLiAgVGhlIGRlZmF1bHQgUkNVX0tUSFJFQURfUFJJTworCSAgdmFsdWUgb2YgMSBpcyBhcHByb3ByaWF0ZSBpbiB0aGUgY29tbW9uIGNhc2UsIHdoaWNoIGlzIHJlYWwtdGltZQogCSAgYXBwbGljYXRpb25zIHRoYXQgZG8gbm90IGhhdmUgYW55IENQVS1ib3VuZCB0aHJlYWRzLgogCiAJICBTb21lIHJlYWwtdGltZSBhcHBsaWNhdGlvbnMgbWlnaHQgbm90IGhhdmUgYSBzaW5nbGUgcmVhbC10aW1lCiAJICB0aHJlYWQgdGhhdCBzYXR1cmF0ZXMgYSBnaXZlbiBDUFUsIGJ1dCBpbnN0ZWFkIG1pZ2h0IGhhdmUKIAkgIG11bHRpcGxlIHJlYWwtdGltZSB0aHJlYWRzIHRoYXQsIHRha2VuIHRvZ2V0aGVyLCBmdWxseSB1dGlsaXplCi0JICB0aGF0IENQVS4gIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCBzZXQgUkNVX0JPT1NUX1BSSU8gdG8KKwkgIHRoYXQgQ1BVLiAgSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHNldCBSQ1VfS1RIUkVBRF9QUklPIHRvCiAJICBhIHByaW9yaXR5IGhpZ2hlciB0aGFuIHRoZSBsb3dlc3QtcHJpb3JpdHkgdGhyZWFkIHRoYXQgaXMKIAkgIGNvbnNwaXJpbmcgdG8gcHJldmVudCB0aGUgQ1BVIGZyb20gcnVubmluZyBhbnkgbm9uLXJlYWwtdGltZQogCSAgdGFza3MuICBGb3IgZXhhbXBsZSwgaWYgb25lIHRocmVhZCBhdCBwcmlvcml0eSAxMCBhbmQgYW5vdGhlcgogCSAgdGhyZWFkIGF0IHByaW9yaXR5IDUgYXJlIGJldHdlZW4gdGhlbXNlbHZlcyBmdWxseSBjb25zdW1pbmcKLQkgIHRoZSBDUFUgdGltZSBvbiBhIGdpdmVuIENQVSwgdGhlbiBSQ1VfQk9PU1RfUFJJTyBzaG91bGQgYmUKKwkgIHRoZSBDUFUgdGltZSBvbiBhIGdpdmVuIENQVSwgdGhlbiBSQ1VfS1RIUkVBRF9QUklPIHNob3VsZCBiZQogCSAgc2V0IHRvIHByaW9yaXR5IDYgb3IgaGlnaGVyLgogCiAJICBTcGVjaWZ5IHRoZSByZWFsLXRpbWUgcHJpb3JpdHksIG9yIHRha2UgdGhlIGRlZmF1bHQgaWYgdW5zdXJlLgpAQCAtNzE1LDcgKzcxMCw3IEBACiAKIGNvbmZpZyBSQ1VfTk9DQl9DUFUKIAlib29sICJPZmZsb2FkIFJDVSBjYWxsYmFjayBwcm9jZXNzaW5nIGZyb20gYm9vdC1zZWxlY3RlZCBDUFVzIgotCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVQorCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgUFJFRU1QVF9SQ1UKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBVc2UgdGhpcyBvcHRpb24gdG8gcmVkdWNlIE9TIGppdHRlciBmb3IgYWdncmVzc2l2ZSBIUEMgb3IKQEAgLTczOSw2ICs3MzQsNyBAQAogY2hvaWNlCiAJcHJvbXB0ICJCdWlsZC1mb3JjZWQgbm8tQ0JzIENQVXMiCiAJZGVmYXVsdCBSQ1VfTk9DQl9DUFVfTk9ORQorCWRlcGVuZHMgb24gUkNVX05PQ0JfQ1BVCiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWxsb3dzIG5vLUNCcyBDUFVzICh3aG9zZSBSQ1UgY2FsbGJhY2tzIGFyZSBpbnZva2VkCiAJICBmcm9tIGt0aHJlYWRzIHJhdGhlciB0aGFuIGZyb20gc29mdGlycSBjb250ZXh0KSB0byBiZSBzcGVjaWZpZWQKQEAgLTc0Nyw3ICs3NDMsNiBAQAogCiBjb25maWcgUkNVX05PQ0JfQ1BVX05PTkUKIAlib29sICJObyBidWlsZF9mb3JjZWQgbm8tQ0JzIENQVXMiCi0JZGVwZW5kcyBvbiBSQ1VfTk9DQl9DUFUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBkb2VzIG5vdCBmb3JjZSBhbnkgb2YgdGhlIENQVXMgdG8gYmUgbm8tQ0JzIENQVXMuCiAJICBPbmx5IENQVXMgZGVzaWduYXRlZCBieSB0aGUgcmN1X25vY2JzPSBib290IHBhcmFtZXRlciB3aWxsIGJlCkBAIC03NjEsNyArNzU2LDYgQEAKIAogY29uZmlnIFJDVV9OT0NCX0NQVV9aRVJPCiAJYm9vbCAiQ1BVIDAgaXMgYSBidWlsZF9mb3JjZWQgbm8tQ0JzIENQVSIKLQlkZXBlbmRzIG9uIFJDVV9OT0NCX0NQVQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGZvcmNlcyBDUFUgMCB0byBiZSBhIG5vLUNCcyBDUFUsIHNvIHRoYXQgaXRzIFJDVQogCSAgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGJ5IGEgcGVyLUNQVSBrdGhyZWFkIHdob3NlIG5hbWUgYmVnaW5zCkBAIC03NzYsNyArNzcwLDYgQEAKIAogY29uZmlnIFJDVV9OT0NCX0NQVV9BTEwKIAlib29sICJBbGwgQ1BVcyBhcmUgYnVpbGRfZm9yY2VkIG5vLUNCcyBDUFVzIgotCWRlcGVuZHMgb24gUkNVX05PQ0JfQ1BVCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZm9yY2VzIGFsbCBDUFVzIHRvIGJlIG5vLUNCcyBDUFVzLiAgVGhlIHJjdV9ub2Nicz0KIAkgIGJvb3QgcGFyYW1ldGVyIHdpbGwgYmUgaWdub3JlZC4gIEFsbCBDUFVzJyBSQ1UgY2FsbGJhY2tzIHdpbGwKQEAgLTkwMCwxNCArODkzLDYgQEAKIGNvbmZpZyBBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWQogCWJvb2wKIAotY29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRAotCWJvb2wgIkF1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50IgotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkcKLQloZWxwCi0JICBJZiBzZXQsIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyB3aWxsIGJlIGVuYWJsZWQgaWYgcnVubmluZyBvbiBhIE5VTUEKLQkgIG1hY2hpbmUuCi0KIGNvbmZpZyBOVU1BX0JBTEFOQ0lORwogCWJvb2wgIk1lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXIiCiAJZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HCkBAIC05MjAsNiArOTA1LDE0IEBACiAKIAkgIFRoaXMgc3lzdGVtIHdpbGwgYmUgaW5hY3RpdmUgb24gVU1BIHN5c3RlbXMuCiAKK2NvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRUQKKwlib29sICJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIE5VTUFfQkFMQU5DSU5HCisJaGVscAorCSAgSWYgc2V0LCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgd2lsbCBiZSBlbmFibGVkIGlmIHJ1bm5pbmcgb24gYSBOVU1BCisJICBtYWNoaW5lLgorCiBtZW51Y29uZmlnIENHUk9VUFMKIAlib29sZWFuICJDb250cm9sIEdyb3VwIHN1cHBvcnQiCiAJc2VsZWN0IEtFUk5GUwpAQCAtOTc5LDMyICs5NzIsMTcgQEAKIAkgIFByb3ZpZGVzIGEgc2ltcGxlIFJlc291cmNlIENvbnRyb2xsZXIgZm9yIG1vbml0b3JpbmcgdGhlCiAJICB0b3RhbCBDUFUgY29uc3VtZWQgYnkgdGhlIHRhc2tzIGluIGEgY2dyb3VwLgogCi1jb25maWcgUkVTT1VSQ0VfQ09VTlRFUlMKLQlib29sICJSZXNvdXJjZSBjb3VudGVycyIKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIGNvbnRyb2xsZXIgaW5kZXBlbmRlbnQgcmVzb3VyY2UgYWNjb3VudGluZwotCSAgaW5mcmFzdHJ1Y3R1cmUgdGhhdCB3b3JrcyB3aXRoIGNncm91cHMuCitjb25maWcgUEFHRV9DT1VOVEVSCisgICAgICAgYm9vbAogCiBjb25maWcgTUVNQ0cKIAlib29sICJNZW1vcnkgUmVzb3VyY2UgQ29udHJvbGxlciBmb3IgQ29udHJvbCBHcm91cHMiCi0JZGVwZW5kcyBvbiBSRVNPVVJDRV9DT1VOVEVSUworCXNlbGVjdCBQQUdFX0NPVU5URVIKIAlzZWxlY3QgRVZFTlRGRAogCWhlbHAKIAkgIFByb3ZpZGVzIGEgbWVtb3J5IHJlc291cmNlIGNvbnRyb2xsZXIgdGhhdCBtYW5hZ2VzIGJvdGggYW5vbnltb3VzCiAJICBtZW1vcnkgYW5kIHBhZ2UgY2FjaGUuIChTZWUgRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQpCiAKLQkgIE5vdGUgdGhhdCBzZXR0aW5nIHRoaXMgb3B0aW9uIGluY3JlYXNlcyBmaXhlZCBtZW1vcnkgb3ZlcmhlYWQKLQkgIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHBhZ2Ugb2YgbWVtb3J5IGluIHRoZSBzeXN0ZW0uIEJ5IHRoaXMsCi0JICA4KDE2KWJ5dGVzL1BBR0VfU0laRSBvbiAzMig2NCliaXQgc3lzdGVtIHdpbGwgYmUgb2NjdXBpZWQgYnkgbWVtb3J5Ci0JICB1c2FnZSB0cmFja2luZyBzdHJ1Y3QgYXQgYm9vdC4gVG90YWwgYW1vdW50IG9mIHRoaXMgaXMgcHJpbnRlZCBvdXQKLQkgIGF0IGJvb3QuCi0KLQkgIE9ubHkgZW5hYmxlIHdoZW4geW91J3JlIG9rIHdpdGggdGhlc2UgdHJhZGUgb2ZmcyBhbmQgcmVhbGx5Ci0JICBzdXJlIHlvdSBuZWVkIHRoZSBtZW1vcnkgcmVzb3VyY2UgY29udHJvbGxlci4gRXZlbiB3aGVuIHlvdSBlbmFibGUKLQkgIHRoaXMsIHlvdSBjYW4gc2V0ICJjZ3JvdXBfZGlzYWJsZT1tZW1vcnkiIGF0IHlvdXIgYm9vdCBvcHRpb24gdG8KLQkgIGRpc2FibGUgbWVtb3J5IHJlc291cmNlIGNvbnRyb2xsZXIgYW5kIHlvdSBjYW4gYXZvaWQgb3ZlcmhlYWRzLgotCSAgKGFuZCBsb3NlIGJlbmVmaXRzIG9mIG1lbW9yeSByZXNvdXJjZSBjb250cm9sbGVyKQotCiBjb25maWcgTUVNQ0dfU1dBUAogCWJvb2wgIk1lbW9yeSBSZXNvdXJjZSBDb250cm9sbGVyIFN3YXAgRXh0ZW5zaW9uIgogCWRlcGVuZHMgb24gTUVNQ0cgJiYgU1dBUApAQCAtMTA1NSw3ICsxMDMzLDggQEAKIAogY29uZmlnIENHUk9VUF9IVUdFVExCCiAJYm9vbCAiSHVnZVRMQiBSZXNvdXJjZSBDb250cm9sbGVyIGZvciBDb250cm9sIEdyb3VwcyIKLQlkZXBlbmRzIG9uIFJFU09VUkNFX0NPVU5URVJTICYmIEhVR0VUTEJfUEFHRQorCWRlcGVuZHMgb24gSFVHRVRMQl9QQUdFCisJc2VsZWN0IFBBR0VfQ09VTlRFUgogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFByb3ZpZGVzIGEgY2dyb3VwIFJlc291cmNlIENvbnRyb2xsZXIgZm9yIEh1Z2VUTEIgcGFnZXMuCkBAIC0xMzAxLDYgKzEyODAsMjIgQEAKIAogZW5kaWYKIAorY29uZmlnIElOSVRfRkFMTEJBQ0sKKwlib29sICJGYWxsIGJhY2sgdG8gZGVmYXVsdHMgaWYgaW5pdD0gcGFyYW1ldGVyIGlzIGJhZCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJZiBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgdHJ5IHRoZSBkZWZhdWx0IGluaXQgYmluYXJpZXMgaWYgYW4KKwkgIGV4cGxpY2l0IHJlcXVlc3QgZnJvbSB0aGUgaW5pdD0gcGFyYW1ldGVyIGZhaWxzLgorCisJICBUaGlzIGNhbiBoYXZlIHVuZXhwZWN0ZWQgZWZmZWN0cy4gIEZvciBleGFtcGxlLCBib290aW5nCisJICB3aXRoIGluaXQ9L3NiaW4va2lvc2tfYXBwIHdpbGwgcnVuIC9zYmluL2luaXQgb3IgZXZlbiAvYmluL3NoCisJICBpZiAvc2Jpbi9raW9za19hcHAgY2Fubm90IGJlIGV4ZWN1dGVkLgorCisJICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBZIGlzIGNvbnNpc3RlbnQgd2l0aCBoaXN0b3JpY2FsIGJlaGF2aW9yLgorCSAgU2VsZWN0aW5nIE4gaXMgbGlrZWx5IHRvIGJlIG1vcmUgYXBwcm9wcmlhdGUgZm9yIG1vc3QgdXNlcywKKwkgIGVzcGVjaWFsbHkgb24ga2lvc2tzIGFuZCBvbiBrZXJuZWxzIHRoYXQgYXJlIGludGVuZGVkIHRvIGJlCisJICBydW4gdW5kZXIgdGhlIGNvbnRyb2wgb2YgYSBzY3JpcHQuCisKIGNvbmZpZyBDQ19PUFRJTUlaRV9GT1JfU0laRQogCWJvb2wgIk9wdGltaXplIGZvciBzaXplIgogCWhlbHAKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggMzIxZDBjZS4uY2EzODBlYyAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC9rZXkuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z29iamVjdHMuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CkBAIC00ODUsMTEgKzQ4NCw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBtbV9pbml0KHZvaWQpCiB7Ci0JLyoKLQkgKiBwYWdlX2Nncm91cCByZXF1aXJlcyBjb250aWd1b3VzIHBhZ2VzLAotCSAqIGJpZ2dlciB0aGFuIE1BWF9PUkRFUiB1bmxlc3MgU1BBUlNFTUVNLgotCSAqLwotCXBhZ2VfY2dyb3VwX2luaXRfZmxhdG1lbSgpOwogCW1lbV9pbml0KCk7CiAJa21lbV9jYWNoZV9pbml0KCk7CiAJcGVyY3B1X2luaXRfbGF0ZSgpOwpAQCAtNjI3LDcgKzYyMSw2IEBACiAJCWluaXRyZF9zdGFydCA9IDA7CiAJfQogI2VuZGlmCi0JcGFnZV9jZ3JvdXBfaW5pdCgpOwogCWRlYnVnX29iamVjdHNfbWVtX2luaXQoKTsKIAlrbWVtbGVha19pbml0KCk7CiAJc2V0dXBfcGVyX2NwdV9wYWdlc2V0KCk7CkBAIC05NTksOCArOTUyLDEzIEBACiAJCXJldCA9IHJ1bl9pbml0X3Byb2Nlc3MoZXhlY3V0ZV9jb21tYW5kKTsKIAkJaWYgKCFyZXQpCiAJCQlyZXR1cm4gMDsKKyNpZm5kZWYgQ09ORklHX0lOSVRfRkFMTEJBQ0sKKwkJcGFuaWMoIlJlcXVlc3RlZCBpbml0ICVzIGZhaWxlZCAoZXJyb3IgJWQpLiIsCisJCSAgICAgIGV4ZWN1dGVfY29tbWFuZCwgcmV0KTsKKyNlbHNlCiAJCXByX2VycigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgKGVycm9yICVkKS4gIEF0dGVtcHRpbmcgZGVmYXVsdHMuLi5cbiIsCi0JCQlleGVjdXRlX2NvbW1hbmQsIHJldCk7CisJCSAgICAgICBleGVjdXRlX2NvbW1hbmQsIHJldCk7CisjZW5kaWYKIAl9CiAJaWYgKCF0cnlfdG9fcnVuX2luaXRfcHJvY2VzcygiL3NiaW4vaW5pdCIpIHx8CiAJICAgICF0cnlfdG9fcnVuX2luaXRfcHJvY2VzcygiL2V0Yy9pbml0IikgfHwKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCA0ZmNmMzlhLi43NjM1YTFjIDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC05OTAsNyArOTkwLDcgQEAKIAkJZ290byBvdXRfZnB1dDsKIAl9CiAJaW5mbyA9IE1RVUVVRV9JKGlub2RlKTsKLQlhdWRpdF9pbm9kZShOVUxMLCBmLmZpbGUtPmZfcGF0aC5kZW50cnksIDApOworCWF1ZGl0X2ZpbGUoZi5maWxlKTsKIAogCWlmICh1bmxpa2VseSghKGYuZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKSkgewogCQlyZXQgPSAtRUJBREY7CkBAIC0xMTA2LDcgKzExMDYsNyBAQAogCQlnb3RvIG91dF9mcHV0OwogCX0KIAlpbmZvID0gTVFVRVVFX0koaW5vZGUpOwotCWF1ZGl0X2lub2RlKE5VTEwsIGYuZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCk7CisJYXVkaXRfZmlsZShmLmZpbGUpOwogCiAJaWYgKHVubGlrZWx5KCEoZi5maWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkpIHsKIAkJcmV0ID0gLUVCQURGOwpkaWZmIC0tZ2l0IGEvaXBjL3NlbS5jIGIvaXBjL3NlbS5jCmluZGV4IDQ1NGY2YzYuLjUzYzMzMTAgMTAwNjQ0Ci0tLSBhL2lwYy9zZW0uYworKysgYi9pcGMvc2VtLmMKQEAgLTUwNywxMyArNTA3LDYgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlpZCA9IGlwY19hZGRpZCgmc2VtX2lkcyhucyksICZzbWEtPnNlbV9wZXJtLCBucy0+c2Nfc2VtbW5pKTsKLQlpZiAoaWQgPCAwKSB7Ci0JCWlwY19yY3VfcHV0cmVmKHNtYSwgc2VtX3JjdV9mcmVlKTsKLQkJcmV0dXJuIGlkOwotCX0KLQlucy0+dXNlZF9zZW1zICs9IG5zZW1zOwotCiAJc21hLT5zZW1fYmFzZSA9IChzdHJ1Y3Qgc2VtICopICZzbWFbMV07CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnNlbXM7IGkrKykgewpAQCAtNTI4LDYgKzUyMSwxNCBAQAogCUlOSVRfTElTVF9IRUFEKCZzbWEtPmxpc3RfaWQpOwogCXNtYS0+c2VtX25zZW1zID0gbnNlbXM7CiAJc21hLT5zZW1fY3RpbWUgPSBnZXRfc2Vjb25kcygpOworCisJaWQgPSBpcGNfYWRkaWQoJnNlbV9pZHMobnMpLCAmc21hLT5zZW1fcGVybSwgbnMtPnNjX3NlbW1uaSk7CisJaWYgKGlkIDwgMCkgeworCQlpcGNfcmN1X3B1dHJlZihzbWEsIHNlbV9yY3VfZnJlZSk7CisJCXJldHVybiBpZDsKKwl9CisJbnMtPnVzZWRfc2VtcyArPSBuc2VtczsKKwogCXNlbV91bmxvY2soc21hLCAtMSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCAxN2VhNmQ0Li5hNTk0ODFhIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC01Nyw3ICs1Nyw2IEBACiBvYmotJChDT05GSUdfVVNFUl9OUykgKz0gdXNlcl9uYW1lc3BhY2Uubwogb2JqLSQoQ09ORklHX1BJRF9OUykgKz0gcGlkX25hbWVzcGFjZS5vCiBvYmotJChDT05GSUdfSUtDT05GSUcpICs9IGNvbmZpZ3Mubwotb2JqLSQoQ09ORklHX1JFU09VUkNFX0NPVU5URVJTKSArPSByZXNfY291bnRlci5vCiBvYmotJChDT05GSUdfU01QKSArPSBzdG9wX21hY2hpbmUubwogb2JqLSQoQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QpICs9IHRlc3Rfa3Byb2Jlcy5vCiBvYmotJChDT05GSUdfQVVESVQpICs9IGF1ZGl0Lm8gYXVkaXRmaWx0ZXIubwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmMgYi9rZXJuZWwvYXVkaXQuYwppbmRleCBjZWJiMTFkLi4xZjM3ZjE1MSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTQ5OSw3ICs0OTksNiBAQAogCXNldF9mcmVlemFibGUoKTsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAogCQlmbHVzaF9ob2xkX3F1ZXVlKCk7CiAKQEAgLTUxNCwxNiArNTEzLDggQEAKIAkJCQlhdWRpdF9wcmludGtfc2tiKHNrYik7CiAJCQljb250aW51ZTsKIAkJfQotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlhZGRfd2FpdF9xdWV1ZSgma2F1ZGl0ZF93YWl0LCAmd2FpdCk7CiAKLQkJaWYgKCFza2JfcXVldWVfbGVuKCZhdWRpdF9za2JfcXVldWUpKSB7Ci0JCQl0cnlfdG9fZnJlZXplKCk7Ci0JCQlzY2hlZHVsZSgpOwotCQl9Ci0KLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQlyZW1vdmVfd2FpdF9xdWV1ZSgma2F1ZGl0ZF93YWl0LCAmd2FpdCk7CisJCXdhaXRfZXZlbnRfZnJlZXphYmxlKGthdWRpdGRfd2FpdCwgc2tiX3F1ZXVlX2xlbigmYXVkaXRfc2tiX3F1ZXVlKSk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggZTQyMGEwYy4uYzc1NTIyYSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0xODk3LDYgKzE4OTcsMTEgQEAKIAlhdWRpdF9jb3B5X2lub2RlKG4sIGRlbnRyeSwgaW5vZGUpOwogfQogCit2b2lkIF9fYXVkaXRfZmlsZShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlfX2F1ZGl0X2lub2RlKE5VTEwsIGZpbGUtPmZfcGF0aC5kZW50cnksIDApOworfQorCiAvKioKICAqIF9fYXVkaXRfaW5vZGVfY2hpbGQgLSBjb2xsZWN0IGlub2RlIGluZm8gZm9yIGNyZWF0ZWQvcmVtb3ZlZCBvYmplY3RzCiAgKiBAcGFyZW50OiBpbm9kZSBvZiBkZW50cnkgcGFyZW50CkBAIC0yMzczLDcgKzIzNzgsNyBAQAogCWF4LT5kLm5leHQgPSBjb250ZXh0LT5hdXg7CiAJY29udGV4dC0+YXV4ID0gKHZvaWQgKilheDsKIAotCWRlbnRyeSA9IGRnZXQoYnBybS0+ZmlsZS0+Zl9kZW50cnkpOworCWRlbnRyeSA9IGRnZXQoYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJZ2V0X3Zmc19jYXBzX2Zyb21fZGlzayhkZW50cnksICZ2Y2Fwcyk7CiAJZHB1dChkZW50cnkpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmMKaW5kZXggOTBhM2QwMS4uNWQyMjAyMyAxMDA2NDQKLS0tIGEva2VybmVsL2NwdS5jCisrKyBiL2tlcm5lbC9jcHUuYwpAQCAtODYsNiArODYsMTYgQEAKICNkZWZpbmUgY3B1aHBfbG9ja19hY3F1aXJlKCkgICAgICBsb2NrX21hcF9hY3F1aXJlKCZjcHVfaG90cGx1Zy5kZXBfbWFwKQogI2RlZmluZSBjcHVocF9sb2NrX3JlbGVhc2UoKSAgICAgIGxvY2tfbWFwX3JlbGVhc2UoJmNwdV9ob3RwbHVnLmRlcF9tYXApCiAKK3N0YXRpYyB2b2lkIGFwcGx5X3B1dHNfcGVuZGluZyhpbnQgbWF4KQoreworCWludCBkZWx0YTsKKworCWlmIChhdG9taWNfcmVhZCgmY3B1X2hvdHBsdWcucHV0c19wZW5kaW5nKSA+PSBtYXgpIHsKKwkJZGVsdGEgPSBhdG9taWNfeGNoZygmY3B1X2hvdHBsdWcucHV0c19wZW5kaW5nLCAwKTsKKwkJY3B1X2hvdHBsdWcucmVmY291bnQgLT0gZGVsdGE7CisJfQorfQorCiB2b2lkIGdldF9vbmxpbmVfY3B1cyh2b2lkKQogewogCW1pZ2h0X3NsZWVwKCk7CkBAIC05Myw2ICsxMDMsNyBAQAogCQlyZXR1cm47CiAJY3B1aHBfbG9ja19hY3F1aXJlX3JlYWQoKTsKIAltdXRleF9sb2NrKCZjcHVfaG90cGx1Zy5sb2NrKTsKKwlhcHBseV9wdXRzX3BlbmRpbmcoNjU1MzYpOwogCWNwdV9ob3RwbHVnLnJlZmNvdW50Kys7CiAJbXV0ZXhfdW5sb2NrKCZjcHVfaG90cGx1Zy5sb2NrKTsKIH0KQEAgLTEwNSw2ICsxMTYsNyBAQAogCWlmICghbXV0ZXhfdHJ5bG9jaygmY3B1X2hvdHBsdWcubG9jaykpCiAJCXJldHVybiBmYWxzZTsKIAljcHVocF9sb2NrX2FjcXVpcmVfdHJ5cmVhZCgpOworCWFwcGx5X3B1dHNfcGVuZGluZyg2NTUzNik7CiAJY3B1X2hvdHBsdWcucmVmY291bnQrKzsKIAltdXRleF91bmxvY2soJmNwdV9ob3RwbHVnLmxvY2spOwogCXJldHVybiB0cnVlOwpAQCAtMTYxLDEyICsxNzMsNyBAQAogCWNwdWhwX2xvY2tfYWNxdWlyZSgpOwogCWZvciAoOzspIHsKIAkJbXV0ZXhfbG9jaygmY3B1X2hvdHBsdWcubG9jayk7Ci0JCWlmIChhdG9taWNfcmVhZCgmY3B1X2hvdHBsdWcucHV0c19wZW5kaW5nKSkgewotCQkJaW50IGRlbHRhOwotCi0JCQlkZWx0YSA9IGF0b21pY194Y2hnKCZjcHVfaG90cGx1Zy5wdXRzX3BlbmRpbmcsIDApOwotCQkJY3B1X2hvdHBsdWcucmVmY291bnQgLT0gZGVsdGE7Ci0JCX0KKwkJYXBwbHlfcHV0c19wZW5kaW5nKDEpOwogCQlpZiAobGlrZWx5KCFjcHVfaG90cGx1Zy5yZWZjb3VudCkpCiAJCQlicmVhazsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggMWYxMDdjNy4uNzIzY2ZjOSAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtNTA2LDYgKzUwNiwxNiBAQAogCQkJZ290byBvdXQ7CiAJfQogCisJLyoKKwkgKiBXZSBjYW4ndCBzaHJpbmsgaWYgd2Ugd29uJ3QgaGF2ZSBlbm91Z2ggcm9vbSBmb3IgU0NIRURfREVBRExJTkUKKwkgKiB0YXNrcy4KKwkgKi8KKwlyZXQgPSAtRUJVU1k7CisJaWYgKGlzX2NwdV9leGNsdXNpdmUoY3VyKSAmJgorCSAgICAhY3B1c2V0X2NwdW1hc2tfY2FuX3NocmluayhjdXItPmNwdXNfYWxsb3dlZCwKKwkJCQkgICAgICAgdHJpYWwtPmNwdXNfYWxsb3dlZCkpCisJCWdvdG8gb3V0OworCiAJcmV0ID0gMDsKIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTE0MjksMTcgKzE0MzksOCBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAljZ3JvdXBfdGFza3NldF9mb3JfZWFjaCh0YXNrLCB0c2V0KSB7Ci0JCS8qCi0JCSAqIEt0aHJlYWRzIHdoaWNoIGRpc2FsbG93IHNldGFmZmluaXR5IHNob3VsZG4ndCBiZSBtb3ZlZAotCQkgKiB0byBhIG5ldyBjcHVzZXQ7IHdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZWlyIGNwdQotCQkgKiBhZmZpbml0eSBhbmQgaXNvbGF0aW5nIHN1Y2ggdGhyZWFkcyBieSB0aGVpciBzZXQgb2YKLQkJICogYWxsb3dlZCBub2RlcyBpcyB1bm5lY2Vzc2FyeS4gIFRodXMsIGNwdXNldHMgYXJlIG5vdAotCQkgKiBhcHBsaWNhYmxlIGZvciBzdWNoIHRocmVhZHMuICBUaGlzIHByZXZlbnRzIGNoZWNraW5nIGZvcgotCQkgKiBzdWNjZXNzIG9mIHNldF9jcHVzX2FsbG93ZWRfcHRyKCkgb24gYWxsIGF0dGFjaGVkIHRhc2tzCi0JCSAqIGJlZm9yZSBjcHVzX2FsbG93ZWQgbWF5IGJlIGNoYW5nZWQuCi0JCSAqLwotCQlyZXQgPSAtRUlOVkFMOwotCQlpZiAodGFzay0+ZmxhZ3MgJiBQRl9OT19TRVRBRkZJTklUWSkKKwkJcmV0ID0gdGFza19jYW5fYXR0YWNoKHRhc2ssIGNzLT5jcHVzX2FsbG93ZWQpOworCQlpZiAocmV0KQogCQkJZ290byBvdXRfdW5sb2NrOwogCQlyZXQgPSBzZWN1cml0eV90YXNrX3NldHNjaGVkdWxlcih0YXNrKTsKIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvY29yZS5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKaW5kZXggMWNkNWVlZi4uMTEzYjgzNyAxMDA2NDQKLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmMKKysrIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKQEAgLTYxNCw3ICs2MTQsNyBAQAogCWlmICghZi5maWxlKQogCQlyZXR1cm4gLUVCQURGOwogCi0JY3NzID0gY3NzX3RyeWdldF9vbmxpbmVfZnJvbV9kaXIoZi5maWxlLT5mX2RlbnRyeSwKKwljc3MgPSBjc3NfdHJ5Z2V0X29ubGluZV9mcm9tX2RpcihmLmZpbGUtPmZfcGF0aC5kZW50cnksCiAJCQkJCSAmcGVyZl9ldmVudF9jZ3JwX3N1YnN5cyk7CiAJaWYgKElTX0VSUihjc3MpKSB7CiAJCXJldCA9IFBUUl9FUlIoY3NzKTsKQEAgLTQ0NjAsNyArNDQ2MCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBwZXJmX3NhbXBsZV9yZWdzX3VzZXIoc3RydWN0IHBlcmZfcmVnc191c2VyICpyZWdzX3VzZXIsCitzdGF0aWMgdm9pZCBwZXJmX3NhbXBsZV9yZWdzX3VzZXIoc3RydWN0IHBlcmZfcmVncyAqcmVnc191c2VyLAogCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaWYgKCF1c2VyX21vZGUocmVncykpIHsKQEAgLTQ0NzEsMTEgKzQ0NzEsMjIgQEAKIAl9CiAKIAlpZiAocmVncykgewotCQlyZWdzX3VzZXItPnJlZ3MgPSByZWdzOwogCQlyZWdzX3VzZXItPmFiaSAgPSBwZXJmX3JlZ19hYmkoY3VycmVudCk7CisJCXJlZ3NfdXNlci0+cmVncyA9IHJlZ3M7CisJfSBlbHNlIHsKKwkJcmVnc191c2VyLT5hYmkgPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FOworCQlyZWdzX3VzZXItPnJlZ3MgPSBOVUxMOwogCX0KIH0KIAorc3RhdGljIHZvaWQgcGVyZl9zYW1wbGVfcmVnc19pbnRyKHN0cnVjdCBwZXJmX3JlZ3MgKnJlZ3NfaW50ciwKKwkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJlZ3NfaW50ci0+cmVncyA9IHJlZ3M7CisJcmVnc19pbnRyLT5hYmkgID0gcGVyZl9yZWdfYWJpKGN1cnJlbnQpOworfQorCisKIC8qCiAgKiBHZXQgcmVtYWluaW5nIHRhc2sgc2l6ZSBmcm9tIHVzZXIgc3RhY2sgcG9pbnRlci4KICAqCkBAIC00ODU3LDYgKzQ4NjgsMjMgQEAKIAlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9UUkFOU0FDVElPTikKIAkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgZGF0YS0+dHhuKTsKIAorCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfSU5UUikgeworCQl1NjQgYWJpID0gZGF0YS0+cmVnc19pbnRyLmFiaTsKKwkJLyoKKwkJICogSWYgdGhlcmUgYXJlIG5vIHJlZ3MgdG8gZHVtcCwgbm90aWNlIGl0IHRocm91Z2gKKwkJICogZmlyc3QgdTY0IGJlaW5nIHplcm8gKFBFUkZfU0FNUExFX1JFR1NfQUJJX05PTkUpLgorCQkgKi8KKwkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgYWJpKTsKKworCQlpZiAoYWJpKSB7CisJCQl1NjQgbWFzayA9IGV2ZW50LT5hdHRyLnNhbXBsZV9yZWdzX2ludHI7CisKKwkJCXBlcmZfb3V0cHV0X3NhbXBsZV9yZWdzKGhhbmRsZSwKKwkJCQkJCWRhdGEtPnJlZ3NfaW50ci5yZWdzLAorCQkJCQkJbWFzayk7CisJCX0KKwl9CisKIAlpZiAoIWV2ZW50LT5hdHRyLndhdGVybWFyaykgewogCQlpbnQgd2FrZXVwX2V2ZW50cyA9IGV2ZW50LT5hdHRyLndha2V1cF9ldmVudHM7CiAKQEAgLTQ5MjIsMTIgKzQ5NTAsMTMgQEAKIAkJaGVhZGVyLT5zaXplICs9IHNpemU7CiAJfQogCisJaWYgKHNhbXBsZV90eXBlICYgKFBFUkZfU0FNUExFX1JFR1NfVVNFUiB8IFBFUkZfU0FNUExFX1NUQUNLX1VTRVIpKQorCQlwZXJmX3NhbXBsZV9yZWdzX3VzZXIoJmRhdGEtPnJlZ3NfdXNlciwgcmVncyk7CisKIAlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX1VTRVIpIHsKIAkJLyogcmVncyBkdW1wIEFCSSBpbmZvICovCiAJCWludCBzaXplID0gc2l6ZW9mKHU2NCk7CiAKLQkJcGVyZl9zYW1wbGVfcmVnc191c2VyKCZkYXRhLT5yZWdzX3VzZXIsIHJlZ3MpOwotCiAJCWlmIChkYXRhLT5yZWdzX3VzZXIucmVncykgewogCQkJdTY0IG1hc2sgPSBldmVudC0+YXR0ci5zYW1wbGVfcmVnc191c2VyOwogCQkJc2l6ZSArPSBod2VpZ2h0NjQobWFzaykgKiBzaXplb2YodTY0KTsKQEAgLTQ5NDMsMTUgKzQ5NzIsMTEgQEAKIAkJICogaW4gY2FzZSBuZXcgc2FtcGxlIHR5cGUgaXMgYWRkZWQsIGJlY2F1c2Ugd2UgY291bGQgZWF0CiAJCSAqIHVwIHRoZSByZXN0IG9mIHRoZSBzYW1wbGUgc2l6ZS4KIAkJICovCi0JCXN0cnVjdCBwZXJmX3JlZ3NfdXNlciAqdXJlZ3MgPSAmZGF0YS0+cmVnc191c2VyOwogCQl1MTYgc3RhY2tfc2l6ZSA9IGV2ZW50LT5hdHRyLnNhbXBsZV9zdGFja191c2VyOwogCQl1MTYgc2l6ZSA9IHNpemVvZih1NjQpOwogCi0JCWlmICghdXJlZ3MtPmFiaSkKLQkJCXBlcmZfc2FtcGxlX3JlZ3NfdXNlcih1cmVncywgcmVncyk7Ci0KIAkJc3RhY2tfc2l6ZSA9IHBlcmZfc2FtcGxlX3VzdGFja19zaXplKHN0YWNrX3NpemUsIGhlYWRlci0+c2l6ZSwKLQkJCQkJCSAgICAgdXJlZ3MtPnJlZ3MpOworCQkJCQkJICAgICBkYXRhLT5yZWdzX3VzZXIucmVncyk7CiAKIAkJLyoKIAkJICogSWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGR1bXAsIGFkZCBzcGFjZSBmb3IgdGhlIGR1bXAKQEAgLTQ5NjQsNiArNDk4OSwyMSBAQAogCQlkYXRhLT5zdGFja191c2VyX3NpemUgPSBzdGFja19zaXplOwogCQloZWFkZXItPnNpemUgKz0gc2l6ZTsKIAl9CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIpIHsKKwkJLyogcmVncyBkdW1wIEFCSSBpbmZvICovCisJCWludCBzaXplID0gc2l6ZW9mKHU2NCk7CisKKwkJcGVyZl9zYW1wbGVfcmVnc19pbnRyKCZkYXRhLT5yZWdzX2ludHIsIHJlZ3MpOworCisJCWlmIChkYXRhLT5yZWdzX2ludHIucmVncykgeworCQkJdTY0IG1hc2sgPSBldmVudC0+YXR0ci5zYW1wbGVfcmVnc19pbnRyOworCisJCQlzaXplICs9IGh3ZWlnaHQ2NChtYXNrKSAqIHNpemVvZih1NjQpOworCQl9CisKKwkJaGVhZGVyLT5zaXplICs9IHNpemU7CisJfQogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCkBAIC03MTUxLDYgKzcxOTEsOCBAQAogCQkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKKwlpZiAoYXR0ci0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIpCisJCXJldCA9IHBlcmZfcmVnX3ZhbGlkYXRlKGF0dHItPnNhbXBsZV9yZWdzX2ludHIpOwogb3V0OgogCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDVkMzAwMTkuLjg3MTRlNWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMTE4LDEzICsxMTgsMTAgQEAKIAl9CiAKIAkvKgotCSAqIEFjY3VtdWxhdGUgaGVyZSB0aGUgY291bnRlcnMgZm9yIGFsbCB0aHJlYWRzIGJ1dCB0aGUgZ3JvdXAgbGVhZGVyCi0JICogYXMgdGhleSBkaWUsIHNvIHRoZXkgY2FuIGJlIGFkZGVkIGludG8gdGhlIHByb2Nlc3Mtd2lkZSB0b3RhbHMKLQkgKiB3aGVuIHRob3NlIGFyZSB0YWtlbi4gIFRoZSBncm91cCBsZWFkZXIgc3RheXMgYXJvdW5kIGFzIGEgem9tYmllIGFzCi0JICogbG9uZyBhcyB0aGVyZSBhcmUgb3RoZXIgdGhyZWFkcy4gIFdoZW4gaXQgZ2V0cyByZWFwZWQsIHRoZSBleGl0LmMKLQkgKiBjb2RlIHdpbGwgYWRkIGl0cyBjb3VudHMgaW50byB0aGVzZSB0b3RhbHMuICBXZSB3b24ndCBldmVyIGdldCBoZXJlCi0JICogZm9yIHRoZSBncm91cCBsZWFkZXIsIHNpbmNlIGl0IHdpbGwgaGF2ZSBiZWVuIHRoZSBsYXN0IHJlZmVyZW5jZSBvbgotCSAqIHRoZSBzaWduYWxfc3RydWN0LgorCSAqIEFjY3VtdWxhdGUgaGVyZSB0aGUgY291bnRlcnMgZm9yIGFsbCB0aHJlYWRzIGFzIHRoZXkgZGllLiBXZSBjb3VsZAorCSAqIHNraXAgdGhlIGdyb3VwIGxlYWRlciBiZWNhdXNlIGl0IGlzIHRoZSBsYXN0IHVzZXIgb2Ygc2lnbmFsX3N0cnVjdCwKKwkgKiBidXQgd2Ugd2FudCB0byBhdm9pZCB0aGUgcmFjZSB3aXRoIHRocmVhZF9ncm91cF9jcHV0aW1lKCkgd2hpY2ggY2FuCisJICogc2VlIHRoZSBlbXB0eSAtPnRocmVhZF9oZWFkIGxpc3QuCiAJICovCiAJdGFza19jcHV0aW1lKHRzaywgJnV0aW1lLCAmc3RpbWUpOwogCXdyaXRlX3NlcWxvY2soJnNpZy0+c3RhdHNfbG9jayk7CkBAIC00NjIsNiArNDU5LDQ0IEBACiAJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX01FTURJRSk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfYWxpdmVfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisKKwlmb3JfZWFjaF90aHJlYWQocCwgdCkgeworCQlpZiAoISh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKQorCQkJcmV0dXJuIHQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX2NoaWxkX3JlYXBlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlcikKKwlfX3JlbGVhc2VzKCZ0YXNrbGlzdF9sb2NrKQorCV9fYWNxdWlyZXMoJnRhc2tsaXN0X2xvY2spCit7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKnBpZF9ucyA9IHRhc2tfYWN0aXZlX3BpZF9ucyhmYXRoZXIpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVhcGVyID0gcGlkX25zLT5jaGlsZF9yZWFwZXI7CisKKwlpZiAobGlrZWx5KHJlYXBlciAhPSBmYXRoZXIpKQorCQlyZXR1cm4gcmVhcGVyOworCisJcmVhcGVyID0gZmluZF9hbGl2ZV90aHJlYWQoZmF0aGVyKTsKKwlpZiAocmVhcGVyKSB7CisJCXBpZF9ucy0+Y2hpbGRfcmVhcGVyID0gcmVhcGVyOworCQlyZXR1cm4gcmVhcGVyOworCX0KKworCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCWlmICh1bmxpa2VseShwaWRfbnMgPT0gJmluaXRfcGlkX25zKSkgeworCQlwYW5pYygiQXR0ZW1wdGVkIHRvIGtpbGwgaW5pdCEgZXhpdGNvZGU9MHglMDh4XG4iLAorCQkJZmF0aGVyLT5zaWduYWwtPmdyb3VwX2V4aXRfY29kZSA/OiBmYXRoZXItPmV4aXRfY29kZSk7CisJfQorCXphcF9waWRfbnNfcHJvY2Vzc2VzKHBpZF9ucyk7CisJd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCisJcmV0dXJuIGZhdGhlcjsKK30KKwogLyoKICAqIFdoZW4gd2UgZGllLCB3ZSByZS1wYXJlbnQgYWxsIG91ciBjaGlsZHJlbiwgYW5kIHRyeSB0bzoKICAqIDEuIGdpdmUgdGhlbSB0byBhbm90aGVyIHRocmVhZCBpbiBvdXIgdGhyZWFkIGdyb3VwLCBpZiBzdWNoIGEgbWVtYmVyIGV4aXN0cwpAQCAtNDY5LDU4ICs1MDQsMzYgQEAKICAqICAgIGNoaWxkX3N1YnJlYXBlciBmb3IgaXRzIGNoaWxkcmVuIChsaWtlIGEgc2VydmljZSBtYW5hZ2VyKQogICogMy4gZ2l2ZSBpdCB0byB0aGUgaW5pdCBwcm9jZXNzIChQSUQgMSkgaW4gb3VyIHBpZCBuYW1lc3BhY2UKICAqLwotc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF9uZXdfcmVhcGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZmF0aGVyKQotCV9fcmVsZWFzZXMoJnRhc2tsaXN0X2xvY2spCi0JX19hY3F1aXJlcygmdGFza2xpc3RfbG9jaykKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfbmV3X3JlYXBlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlciwKKwkJCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZF9yZWFwZXIpCiB7Ci0Jc3RydWN0IHBpZF9uYW1lc3BhY2UgKnBpZF9ucyA9IHRhc2tfYWN0aXZlX3BpZF9ucyhmYXRoZXIpOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkLCAqcmVhcGVyOwogCi0JdGhyZWFkID0gZmF0aGVyOwotCXdoaWxlX2VhY2hfdGhyZWFkKGZhdGhlciwgdGhyZWFkKSB7Ci0JCWlmICh0aHJlYWQtPmZsYWdzICYgUEZfRVhJVElORykKLQkJCWNvbnRpbnVlOwotCQlpZiAodW5saWtlbHkocGlkX25zLT5jaGlsZF9yZWFwZXIgPT0gZmF0aGVyKSkKLQkJCXBpZF9ucy0+Y2hpbGRfcmVhcGVyID0gdGhyZWFkOworCXRocmVhZCA9IGZpbmRfYWxpdmVfdGhyZWFkKGZhdGhlcik7CisJaWYgKHRocmVhZCkKIAkJcmV0dXJuIHRocmVhZDsKLQl9CiAKLQlpZiAodW5saWtlbHkocGlkX25zLT5jaGlsZF9yZWFwZXIgPT0gZmF0aGVyKSkgewotCQl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKLQkJaWYgKHVubGlrZWx5KHBpZF9ucyA9PSAmaW5pdF9waWRfbnMpKSB7Ci0JCQlwYW5pYygiQXR0ZW1wdGVkIHRvIGtpbGwgaW5pdCEgZXhpdGNvZGU9MHglMDh4XG4iLAotCQkJCWZhdGhlci0+c2lnbmFsLT5ncm91cF9leGl0X2NvZGUgPzoKLQkJCQkJZmF0aGVyLT5leGl0X2NvZGUpOwotCQl9Ci0KLQkJemFwX3BpZF9uc19wcm9jZXNzZXMocGlkX25zKTsKLQkJd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwotCX0gZWxzZSBpZiAoZmF0aGVyLT5zaWduYWwtPmhhc19jaGlsZF9zdWJyZWFwZXIpIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICpyZWFwZXI7Ci0KKwlpZiAoZmF0aGVyLT5zaWduYWwtPmhhc19jaGlsZF9zdWJyZWFwZXIpIHsKIAkJLyoKLQkJICogRmluZCB0aGUgZmlyc3QgYW5jZXN0b3IgbWFya2VkIGFzIGNoaWxkX3N1YnJlYXBlci4KLQkJICogTm90ZSB0aGF0IHRoZSBjb2RlIGJlbG93IGNoZWNrcyBzYW1lX3RocmVhZF9ncm91cChyZWFwZXIsCi0JCSAqIHBpZF9ucy0+Y2hpbGRfcmVhcGVyKS4gIFRoaXMgaXMgd2hhdCB3ZSBuZWVkIHRvIERUUlQgaW4gYQotCQkgKiBQSUQgbmFtZXNwYWNlLiBIb3dldmVyIHdlIHN0aWxsIG5lZWQgdGhlIGNoZWNrIGFib3ZlLCBzZWUKLQkJICogaHR0cDovL21hcmMuaW5mby8/bD1saW51eC1rZXJuZWwmbT0xMzEzODU0NjA0MjAzODAKKwkJICogRmluZCB0aGUgZmlyc3QgLT5pc19jaGlsZF9zdWJyZWFwZXIgYW5jZXN0b3IgaW4gb3VyIHBpZF9ucy4KKwkJICogV2Ugc3RhcnQgZnJvbSBmYXRoZXIgdG8gZW5zdXJlIHdlIGNhbiBub3QgbG9vayBpbnRvIGFub3RoZXIKKwkJICogbmFtZXNwYWNlLCB0aGlzIGlzIHNhZmUgYmVjYXVzZSBhbGwgaXRzIHRocmVhZHMgYXJlIGRlYWQuCiAJCSAqLwotCQlmb3IgKHJlYXBlciA9IGZhdGhlci0+cmVhbF9wYXJlbnQ7Ci0JCSAgICAgcmVhcGVyICE9ICZpbml0X3Rhc2s7CisJCWZvciAocmVhcGVyID0gZmF0aGVyOworCQkgICAgICFzYW1lX3RocmVhZF9ncm91cChyZWFwZXIsIGNoaWxkX3JlYXBlcik7CiAJCSAgICAgcmVhcGVyID0gcmVhcGVyLT5yZWFsX3BhcmVudCkgewotCQkJaWYgKHNhbWVfdGhyZWFkX2dyb3VwKHJlYXBlciwgcGlkX25zLT5jaGlsZF9yZWFwZXIpKQorCQkJLyogY2FsbF91c2VybW9kZWhlbHBlcigpIGRlc2NlbmRhbnRzIG5lZWQgdGhpcyBjaGVjayAqLworCQkJaWYgKHJlYXBlciA9PSAmaW5pdF90YXNrKQogCQkJCWJyZWFrOwogCQkJaWYgKCFyZWFwZXItPnNpZ25hbC0+aXNfY2hpbGRfc3VicmVhcGVyKQogCQkJCWNvbnRpbnVlOwotCQkJdGhyZWFkID0gcmVhcGVyOwotCQkJZG8gewotCQkJCWlmICghKHRocmVhZC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkKLQkJCQkJcmV0dXJuIHJlYXBlcjsKLQkJCX0gd2hpbGVfZWFjaF90aHJlYWQocmVhcGVyLCB0aHJlYWQpOworCQkJdGhyZWFkID0gZmluZF9hbGl2ZV90aHJlYWQocmVhcGVyKTsKKwkJCWlmICh0aHJlYWQpCisJCQkJcmV0dXJuIHRocmVhZDsKIAkJfQogCX0KIAotCXJldHVybiBwaWRfbnMtPmNoaWxkX3JlYXBlcjsKKwlyZXR1cm4gY2hpbGRfcmVhcGVyOwogfQogCiAvKgpAQCAtNTI5LDE1ICs1NDIsNyBAQAogc3RhdGljIHZvaWQgcmVwYXJlbnRfbGVhZGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZmF0aGVyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqZGVhZCkKIHsKLQlsaXN0X21vdmVfdGFpbCgmcC0+c2libGluZywgJnAtPnJlYWxfcGFyZW50LT5jaGlsZHJlbik7Ci0KLQlpZiAocC0+ZXhpdF9zdGF0ZSA9PSBFWElUX0RFQUQpCi0JCXJldHVybjsKLQkvKgotCSAqIElmIHRoaXMgaXMgYSB0aHJlYWRlZCByZXBhcmVudCB0aGVyZSBpcyBubyBuZWVkIHRvCi0JICogbm90aWZ5IGFueW9uZSBhbnl0aGluZyBoYXMgaGFwcGVuZWQuCi0JICovCi0JaWYgKHNhbWVfdGhyZWFkX2dyb3VwKHAtPnJlYWxfcGFyZW50LCBmYXRoZXIpKQorCWlmICh1bmxpa2VseShwLT5leGl0X3N0YXRlID09IEVYSVRfREVBRCkpCiAJCXJldHVybjsKIAogCS8qIFdlIGRvbid0IHdhbnQgcGVvcGxlIHNsYXlpbmcgaW5pdC4gKi8KQEAgLTU0OCw0OSArNTUzLDUzIEBACiAJICAgIHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUgJiYgdGhyZWFkX2dyb3VwX2VtcHR5KHApKSB7CiAJCWlmIChkb19ub3RpZnlfcGFyZW50KHAsIHAtPmV4aXRfc2lnbmFsKSkgewogCQkJcC0+ZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDsKLQkJCWxpc3RfbW92ZV90YWlsKCZwLT5zaWJsaW5nLCBkZWFkKTsKKwkJCWxpc3RfYWRkKCZwLT5wdHJhY2VfZW50cnksIGRlYWQpOwogCQl9CiAJfQogCiAJa2lsbF9vcnBoYW5lZF9wZ3JwKHAsIGZhdGhlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGZvcmdldF9vcmlnaW5hbF9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIpCisvKgorICogVGhpcyBkb2VzIHR3byB0aGluZ3M6CisgKgorICogQS4gIE1ha2UgaW5pdCBpbmhlcml0IGFsbCB0aGUgY2hpbGQgcHJvY2Vzc2VzCisgKiBCLiAgQ2hlY2sgdG8gc2VlIGlmIGFueSBwcm9jZXNzIGdyb3VwcyBoYXZlIGJlY29tZSBvcnBoYW5lZAorICoJYXMgYSByZXN1bHQgb2Ygb3VyIGV4aXRpbmcsIGFuZCBpZiB0aGV5IGhhdmUgYW55IHN0b3BwZWQKKyAqCWpvYnMsIHNlbmQgdGhlbSBhIFNJR0hVUCBhbmQgdGhlbiBhIFNJR0NPTlQuICAoUE9TSVggMy4yLjIuMikKKyAqLworc3RhdGljIHZvaWQgZm9yZ2V0X29yaWdpbmFsX3BhcmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlciwKKwkJCQkJc3RydWN0IGxpc3RfaGVhZCAqZGVhZCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuLCAqcmVhcGVyOwotCUxJU1RfSEVBRChkZWFkX2NoaWxkcmVuKTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICp0LCAqcmVhcGVyOwogCi0Jd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwotCS8qCi0JICogTm90ZSB0aGF0IGV4aXRfcHRyYWNlKCkgYW5kIGZpbmRfbmV3X3JlYXBlcigpIG1pZ2h0Ci0JICogZHJvcCB0YXNrbGlzdF9sb2NrIGFuZCByZWFjcXVpcmUgaXQuCi0JICovCi0JZXhpdF9wdHJhY2UoZmF0aGVyKTsKLQlyZWFwZXIgPSBmaW5kX25ld19yZWFwZXIoZmF0aGVyKTsKKwlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJmZhdGhlci0+cHRyYWNlZCkpKQorCQlleGl0X3B0cmFjZShmYXRoZXIsIGRlYWQpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZmYXRoZXItPmNoaWxkcmVuLCBzaWJsaW5nKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHA7CisJLyogQ2FuIGRyb3AgYW5kIHJlYWNxdWlyZSB0YXNrbGlzdF9sb2NrICovCisJcmVhcGVyID0gZmluZF9jaGlsZF9yZWFwZXIoZmF0aGVyKTsKKwlpZiAobGlzdF9lbXB0eSgmZmF0aGVyLT5jaGlsZHJlbikpCisJCXJldHVybjsKIAotCQlkbyB7CisJcmVhcGVyID0gZmluZF9uZXdfcmVhcGVyKGZhdGhlciwgcmVhcGVyKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZmYXRoZXItPmNoaWxkcmVuLCBzaWJsaW5nKSB7CisJCWZvcl9lYWNoX3RocmVhZChwLCB0KSB7CiAJCQl0LT5yZWFsX3BhcmVudCA9IHJlYXBlcjsKLQkJCWlmICh0LT5wYXJlbnQgPT0gZmF0aGVyKSB7Ci0JCQkJQlVHX09OKHQtPnB0cmFjZSk7CisJCQlCVUdfT04oKCF0LT5wdHJhY2UpICE9ICh0LT5wYXJlbnQgPT0gZmF0aGVyKSk7CisJCQlpZiAobGlrZWx5KCF0LT5wdHJhY2UpKQogCQkJCXQtPnBhcmVudCA9IHQtPnJlYWxfcGFyZW50OwotCQkJfQogCQkJaWYgKHQtPnBkZWF0aF9zaWduYWwpCiAJCQkJZ3JvdXBfc2VuZF9zaWdfaW5mbyh0LT5wZGVhdGhfc2lnbmFsLAogCQkJCQkJICAgIFNFTkRfU0lHX05PSU5GTywgdCk7Ci0JCX0gd2hpbGVfZWFjaF90aHJlYWQocCwgdCk7Ci0JCXJlcGFyZW50X2xlYWRlcihmYXRoZXIsIHAsICZkZWFkX2NoaWxkcmVuKTsKKwkJfQorCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgdGhyZWFkZWQgcmVwYXJlbnQgdGhlcmUgaXMgbm8gbmVlZCB0bworCQkgKiBub3RpZnkgYW55b25lIGFueXRoaW5nIGhhcyBoYXBwZW5lZC4KKwkJICovCisJCWlmICghc2FtZV90aHJlYWRfZ3JvdXAocmVhcGVyLCBmYXRoZXIpKQorCQkJcmVwYXJlbnRfbGVhZGVyKGZhdGhlciwgcCwgZGVhZCk7CiAJfQotCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwotCi0JQlVHX09OKCFsaXN0X2VtcHR5KCZmYXRoZXItPmNoaWxkcmVuKSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmRlYWRfY2hpbGRyZW4sIHNpYmxpbmcpIHsKLQkJbGlzdF9kZWxfaW5pdCgmcC0+c2libGluZyk7Ci0JCXJlbGVhc2VfdGFzayhwKTsKLQl9CisJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZmYXRoZXItPmNoaWxkcmVuLCAmcmVhcGVyLT5jaGlsZHJlbik7CiB9CiAKIC8qCkBAIC02MDAsMTggKzYwOSwxMiBAQAogc3RhdGljIHZvaWQgZXhpdF9ub3RpZnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBncm91cF9kZWFkKQogewogCWJvb2wgYXV0b3JlYXA7Ci0KLQkvKgotCSAqIFRoaXMgZG9lcyB0d28gdGhpbmdzOgotCSAqCi0JICogQS4gIE1ha2UgaW5pdCBpbmhlcml0IGFsbCB0aGUgY2hpbGQgcHJvY2Vzc2VzCi0JICogQi4gIENoZWNrIHRvIHNlZSBpZiBhbnkgcHJvY2VzcyBncm91cHMgaGF2ZSBiZWNvbWUgb3JwaGFuZWQKLQkgKglhcyBhIHJlc3VsdCBvZiBvdXIgZXhpdGluZywgYW5kIGlmIHRoZXkgaGF2ZSBhbnkgc3RvcHBlZAotCSAqCWpvYnMsIHNlbmQgdGhlbSBhIFNJR0hVUCBhbmQgdGhlbiBhIFNJR0NPTlQuICAoUE9TSVggMy4yLjIuMikKLQkgKi8KLQlmb3JnZXRfb3JpZ2luYWxfcGFyZW50KHRzayk7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbjsKKwlMSVNUX0hFQUQoZGVhZCk7CiAKIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisJZm9yZ2V0X29yaWdpbmFsX3BhcmVudCh0c2ssICZkZWFkKTsKKwogCWlmIChncm91cF9kZWFkKQogCQlraWxsX29ycGhhbmVkX3BncnAodHNrLT5ncm91cF9sZWFkZXIsIE5VTEwpOwogCkBAIC02MjksMTUgKzYzMiwxOCBAQAogCX0KIAogCXRzay0+ZXhpdF9zdGF0ZSA9IGF1dG9yZWFwID8gRVhJVF9ERUFEIDogRVhJVF9aT01CSUU7CisJaWYgKHRzay0+ZXhpdF9zdGF0ZSA9PSBFWElUX0RFQUQpCisJCWxpc3RfYWRkKCZ0c2stPnB0cmFjZV9lbnRyeSwgJmRlYWQpOwogCiAJLyogbXQtZXhlYywgZGVfdGhyZWFkKCkgaXMgd2FpdGluZyBmb3IgZ3JvdXAgbGVhZGVyICovCiAJaWYgKHVubGlrZWx5KHRzay0+c2lnbmFsLT5ub3RpZnlfY291bnQgPCAwKSkKIAkJd2FrZV91cF9wcm9jZXNzKHRzay0+c2lnbmFsLT5ncm91cF9leGl0X3Rhc2spOwogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCi0JLyogSWYgdGhlIHByb2Nlc3MgaXMgZGVhZCwgcmVsZWFzZSBpdCAtIG5vYm9keSB3aWxsIHdhaXQgZm9yIGl0ICovCi0JaWYgKGF1dG9yZWFwKQotCQlyZWxlYXNlX3Rhc2sodHNrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmRlYWQsIHB0cmFjZV9lbnRyeSkgeworCQlsaXN0X2RlbF9pbml0KCZwLT5wdHJhY2VfZW50cnkpOworCQlyZWxlYXNlX3Rhc2socCk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCkBAIC05ODIsOCArOTg4LDcgQEAKICAqLwogc3RhdGljIGludCB3YWl0X3Rhc2tfem9tYmllKHN0cnVjdCB3YWl0X29wdHMgKndvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JdW5zaWduZWQgbG9uZyBzdGF0ZTsKLQlpbnQgcmV0dmFsLCBzdGF0dXMsIHRyYWNlZDsKKwlpbnQgc3RhdGUsIHJldHZhbCwgc3RhdHVzOwogCXBpZF90IHBpZCA9IHRhc2tfcGlkX3ZucihwKTsKIAl1aWRfdCB1aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCB0YXNrX3VpZChwKSk7CiAJc3RydWN0IHNpZ2luZm8gX191c2VyICppbmZvcDsKQEAgLTk5Nyw2ICsxMDAyLDggQEAKIAogCQlnZXRfdGFza19zdHJ1Y3QocCk7CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJc2NoZWRfYW5ub3RhdGVfc2xlZXAoKTsKKwogCQlpZiAoKGV4aXRfY29kZSAmIDB4N2YpID09IDApIHsKIAkJCXdoeSA9IENMRF9FWElURUQ7CiAJCQlzdGF0dXMgPSBleGl0X2NvZGUgPj4gODsKQEAgLTEwMDYsMjEgKzEwMTMsMjUgQEAKIAkJfQogCQlyZXR1cm4gd2FpdF9ub3JlYXBfY29weW91dCh3bywgcCwgcGlkLCB1aWQsIHdoeSwgc3RhdHVzKTsKIAl9Ci0KLQl0cmFjZWQgPSBwdHJhY2VfcmVwYXJlbnRlZChwKTsKIAkvKgogCSAqIE1vdmUgdGhlIHRhc2sncyBzdGF0ZSB0byBERUFEL1RSQUNFLCBvbmx5IG9uZSB0aHJlYWQgY2FuIGRvIHRoaXMuCiAJICovCi0Jc3RhdGUgPSB0cmFjZWQgJiYgdGhyZWFkX2dyb3VwX2xlYWRlcihwKSA/IEVYSVRfVFJBQ0UgOiBFWElUX0RFQUQ7CisJc3RhdGUgPSAocHRyYWNlX3JlcGFyZW50ZWQocCkgJiYgdGhyZWFkX2dyb3VwX2xlYWRlcihwKSkgPworCQlFWElUX1RSQUNFIDogRVhJVF9ERUFEOwogCWlmIChjbXB4Y2hnKCZwLT5leGl0X3N0YXRlLCBFWElUX1pPTUJJRSwgc3RhdGUpICE9IEVYSVRfWk9NQklFKQogCQlyZXR1cm4gMDsKIAkvKgotCSAqIEl0IGNhbiBiZSBwdHJhY2VkIGJ1dCBub3QgcmVwYXJlbnRlZCwgY2hlY2sKLQkgKiB0aHJlYWRfZ3JvdXBfbGVhZGVyKCkgdG8gZmlsdGVyIG91dCBzdWItdGhyZWFkcy4KKwkgKiBXZSBvd24gdGhpcyB0aHJlYWQsIG5vYm9keSBlbHNlIGNhbiByZWFwIGl0LgogCSAqLwotCWlmIChsaWtlbHkoIXRyYWNlZCkgJiYgdGhyZWFkX2dyb3VwX2xlYWRlcihwKSkgewotCQlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqcHNpZzsKLQkJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJc2NoZWRfYW5ub3RhdGVfc2xlZXAoKTsKKworCS8qCisJICogQ2hlY2sgdGhyZWFkX2dyb3VwX2xlYWRlcigpIHRvIGV4Y2x1ZGUgdGhlIHRyYWNlZCBzdWItdGhyZWFkcy4KKwkgKi8KKwlpZiAoc3RhdGUgPT0gRVhJVF9ERUFEICYmIHRocmVhZF9ncm91cF9sZWFkZXIocCkpIHsKKwkJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZyA9IHAtPnNpZ25hbDsKKwkJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnBzaWcgPSBjdXJyZW50LT5zaWduYWw7CiAJCXVuc2lnbmVkIGxvbmcgbWF4cnNzOwogCQljcHV0aW1lX3QgdGd1dGltZSwgdGdzdGltZTsKIApAQCAtMTAzMiwyMSArMTA0MywyMCBAQAogCQkgKiBhY2N1bXVsYXRlIGluIHRoZSBwYXJlbnQncyBzaWduYWxfc3RydWN0IGMqIGZpZWxkcy4KIAkJICoKIAkJICogV2UgZG9uJ3QgYm90aGVyIHRvIHRha2UgYSBsb2NrIGhlcmUgdG8gcHJvdGVjdCB0aGVzZQotCQkgKiBwLT5zaWduYWwgZmllbGRzLCBiZWNhdXNlIHRoZXkgYXJlIG9ubHkgdG91Y2hlZCBieQotCQkgKiBfX2V4aXRfc2lnbmFsLCB3aGljaCBydW5zIHdpdGggdGFza2xpc3RfbG9jawotCQkgKiB3cml0ZS1sb2NrZWQgYW55d2F5LCBhbmQgc28gaXMgZXhjbHVkZWQgaGVyZS4gIFdlIGRvCi0JCSAqIG5lZWQgdG8gcHJvdGVjdCB0aGUgYWNjZXNzIHRvIHBhcmVudC0+c2lnbmFsIGZpZWxkcywKLQkJICogYXMgb3RoZXIgdGhyZWFkcyBpbiB0aGUgcGFyZW50IGdyb3VwIGNhbiBiZSByaWdodAotCQkgKiBoZXJlIHJlYXBpbmcgb3RoZXIgY2hpbGRyZW4gYXQgdGhlIHNhbWUgdGltZS4KKwkJICogcC0+c2lnbmFsIGZpZWxkcyBiZWNhdXNlIHRoZSB3aG9sZSB0aHJlYWQgZ3JvdXAgaXMgZGVhZAorCQkgKiBhbmQgbm9ib2R5IGNhbiBjaGFuZ2UgdGhlbS4KKwkJICoKKwkJICogcHNpZy0+c3RhdHNfbG9jayBhbHNvIHByb3RlY3RzIHVzIGZyb20gb3VyIHN1Yi10aGVhZHMKKwkJICogd2hpY2ggY2FuIHJlYXAgb3RoZXIgY2hpbGRyZW4gYXQgdGhlIHNhbWUgdGltZS4gVW50aWwKKwkJICogd2UgY2hhbmdlIGtfZ2V0cnVzYWdlKCktbGlrZSB1c2VycyB0byByZWx5IG9uIHRoaXMgbG9jaworCQkgKiB3ZSBoYXZlIHRvIHRha2UgLT5zaWdsb2NrIGFzIHdlbGwuCiAJCSAqCiAJCSAqIFdlIHVzZSB0aHJlYWRfZ3JvdXBfY3B1dGltZV9hZGp1c3RlZCgpIHRvIGdldCB0aW1lcyBmb3IKIAkJICogdGhlIHRocmVhZCBncm91cCwgd2hpY2ggY29uc29saWRhdGVzIHRpbWVzIGZvciBhbGwgdGhyZWFkcwogCQkgKiBpbiB0aGUgZ3JvdXAgaW5jbHVkaW5nIHRoZSBncm91cCBsZWFkZXIuCiAJCSAqLwogCQl0aHJlYWRfZ3JvdXBfY3B1dGltZV9hZGp1c3RlZChwLCAmdGd1dGltZSwgJnRnc3RpbWUpOwotCQlzcGluX2xvY2tfaXJxKCZwLT5yZWFsX3BhcmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXBzaWcgPSBwLT5yZWFsX3BhcmVudC0+c2lnbmFsOwotCQlzaWcgPSBwLT5zaWduYWw7CisJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQl3cml0ZV9zZXFsb2NrKCZwc2lnLT5zdGF0c19sb2NrKTsKIAkJcHNpZy0+Y3V0aW1lICs9IHRndXRpbWUgKyBzaWctPmN1dGltZTsKIAkJcHNpZy0+Y3N0aW1lICs9IHRnc3RpbWUgKyBzaWctPmNzdGltZTsKQEAgLTEwNzEsMTUgKzEwODEsOSBAQAogCQl0YXNrX2lvX2FjY291bnRpbmdfYWRkKCZwc2lnLT5pb2FjLCAmcC0+aW9hYyk7CiAJCXRhc2tfaW9fYWNjb3VudGluZ19hZGQoJnBzaWctPmlvYWMsICZzaWctPmlvYWMpOwogCQl3cml0ZV9zZXF1bmxvY2soJnBzaWctPnN0YXRzX2xvY2spOwotCQlzcGluX3VubG9ja19pcnEoJnAtPnJlYWxfcGFyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAl9CiAKLQkvKgotCSAqIE5vdyB3ZSBhcmUgc3VyZSB0aGlzIHRhc2sgaXMgaW50ZXJlc3RpbmcsIGFuZCBubyBvdGhlcgotCSAqIHRocmVhZCBjYW4gcmVhcCBpdCBiZWNhdXNlIHdlIGl0cyBzdGF0ZSA9PSBERUFEL1RSQUNFLgotCSAqLwotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQogCXJldHZhbCA9IHdvLT53b19ydXNhZ2UKIAkJPyBnZXRydXNhZ2UocCwgUlVTQUdFX0JPVEgsIHdvLT53b19ydXNhZ2UpIDogMDsKIAlzdGF0dXMgPSAocC0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9HUk9VUF9FWElUKQpAQCAtMTIxMCw2ICsxMjE0LDcgQEAKIAlwaWQgPSB0YXNrX3BpZF92bnIocCk7CiAJd2h5ID0gcHRyYWNlID8gQ0xEX1RSQVBQRUQgOiBDTERfU1RPUFBFRDsKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJc2NoZWRfYW5ub3RhdGVfc2xlZXAoKTsKIAogCWlmICh1bmxpa2VseSh3by0+d29fZmxhZ3MgJiBXTk9XQUlUKSkKIAkJcmV0dXJuIHdhaXRfbm9yZWFwX2NvcHlvdXQod28sIHAsIHBpZCwgdWlkLCB3aHksIGV4aXRfY29kZSk7CkBAIC0xMjcyLDYgKzEyNzcsNyBAQAogCXBpZCA9IHRhc2tfcGlkX3ZucihwKTsKIAlnZXRfdGFza19zdHJ1Y3QocCk7CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXNjaGVkX2Fubm90YXRlX3NsZWVwKCk7CiAKIAlpZiAoIXdvLT53b19pbmZvKSB7CiAJCXJldHZhbCA9IHdvLT53b19ydXNhZ2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9leHRhYmxlLmMgYi9rZXJuZWwvZXh0YWJsZS5jCmluZGV4IGQ4YTY0NDYuLmM5OGY5MjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leHRhYmxlLmMKKysrIGIva2VybmVsL2V4dGFibGUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCkBAIC0xMDIsNiArMTAzLDggQEAKIAkJcmV0dXJuIDE7CiAJaWYgKGlzX21vZHVsZV90ZXh0X2FkZHJlc3MoYWRkcikpCiAJCXJldHVybiAxOworCWlmIChpc19mdHJhY2VfdHJhbXBvbGluZShhZGRyKSkKKwkJcmV0dXJuIDE7CiAJLyoKIAkgKiBUaGVyZSBtaWdodCBiZSBpbml0IHN5bWJvbHMgaW4gc2F2ZWQgc3RhY2t0cmFjZXMuCiAJICogR2l2ZSB0aG9zZSBzeW1ib2xzIGEgY2hhbmNlIHRvIGJlIHByaW50ZWQgaW4KQEAgLTExOSw3ICsxMjIsOSBAQAogewogCWlmIChjb3JlX2tlcm5lbF90ZXh0KGFkZHIpKQogCQlyZXR1cm4gMTsKLQlyZXR1cm4gaXNfbW9kdWxlX3RleHRfYWRkcmVzcyhhZGRyKTsKKwlpZiAoaXNfbW9kdWxlX3RleHRfYWRkcmVzcyhhZGRyKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIGlzX2Z0cmFjZV90cmFtcG9saW5lKGFkZHIpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggOWI3ZDc0Ni4uOWNhODQxOCAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0xMDIyLDExICsxMDIyLDE0IEBACiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNpZ2hhbmQtPmNvdW50KSkgewogCQlzaWduYWxmZF9jbGVhbnVwKHNpZ2hhbmQpOworCQkvKgorCQkgKiBzaWdoYW5kX2NhY2hlcCBpcyBTTEFCX0RFU1RST1lfQllfUkNVIHNvIHdlIGNhbiBmcmVlIGl0CisJCSAqIHdpdGhvdXQgYW4gUkNVIGdyYWNlIHBlcmlvZCwgc2VlIF9fbG9ja190YXNrX3NpZ2hhbmQoKS4KKwkJICovCiAJCWttZW1fY2FjaGVfZnJlZShzaWdoYW5kX2NhY2hlcCwgc2lnaGFuZCk7CiAJfQogfQogCi0KIC8qCiAgKiBJbml0aWFsaXplIFBPU0lYIHRpbWVyIGhhbmRsaW5nIGZvciBhIHRocmVhZCBncm91cC4KICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9LY29uZmlnIGIva2VybmVsL2lycS9LY29uZmlnCmluZGV4IDIyNTA4NmIuLjlhNzZlM2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvS2NvbmZpZworKysgYi9rZXJuZWwvaXJxL0tjb25maWcKQEAgLTU1LDYgKzU1LDIxIEBACiBjb25maWcgSVJRX0RPTUFJTgogCWJvb2wKIAorIyBTdXBwb3J0IGZvciBoaWVyYXJjaGljYWwgaXJxIGRvbWFpbnMKK2NvbmZpZyBJUlFfRE9NQUlOX0hJRVJBUkNIWQorCWJvb2wKKwlzZWxlY3QgSVJRX0RPTUFJTgorCisjIEdlbmVyaWMgTVNJIGludGVycnVwdCBzdXBwb3J0Citjb25maWcgR0VORVJJQ19NU0lfSVJRCisJYm9vbAorCisjIEdlbmVyaWMgTVNJIGhpZXJhcmNoaWNhbCBpbnRlcnJ1cHQgZG9tYWluIHN1cHBvcnQKK2NvbmZpZyBHRU5FUklDX01TSV9JUlFfRE9NQUlOCisJYm9vbAorCXNlbGVjdCBJUlFfRE9NQUlOX0hJRVJBUkNIWQorCXNlbGVjdCBHRU5FUklDX01TSV9JUlEKKwogY29uZmlnIEhBTkRMRV9ET01BSU5fSVJRCiAJYm9vbAogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL01ha2VmaWxlIGIva2VybmVsL2lycS9NYWtlZmlsZQppbmRleCBmZmYxNzM4Li5kMTIxMjM1IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL01ha2VmaWxlCisrKyBiL2tlcm5lbC9pcnEvTWFrZWZpbGUKQEAgLTYsMyArNiw0IEBACiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgKz0gbWlncmF0aW9uLm8KIG9iai0kKENPTkZJR19QTV9TTEVFUCkgKz0gcG0ubworb2JqLSQoQ09ORklHX0dFTkVSSUNfTVNJX0lSUSkgKz0gbXNpLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggZTUyMDJmMC4uNmYxYzdhNSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9jaGlwLmMKKysrIGIva2VybmVsL2lycS9jaGlwLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgogCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2lycS5oPgogCkBAIC0xNzgsNiArMTc5LDcgQEAKIAlpcnFfc3RhdGVfY2xyX2Rpc2FibGVkKGRlc2MpOwogCWRlc2MtPmRlcHRoID0gMDsKIAorCWlycV9kb21haW5fYWN0aXZhdGVfaXJxKCZkZXNjLT5pcnFfZGF0YSk7CiAJaWYgKGRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9zdGFydHVwKSB7CiAJCXJldCA9IGRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9zdGFydHVwKCZkZXNjLT5pcnFfZGF0YSk7CiAJCWlycV9zdGF0ZV9jbHJfbWFza2VkKGRlc2MpOwpAQCAtMTk5LDYgKzIwMSw3IEBACiAJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9kaXNhYmxlKCZkZXNjLT5pcnFfZGF0YSk7CiAJZWxzZQogCQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEpOworCWlycV9kb21haW5fZGVhY3RpdmF0ZV9pcnEoJmRlc2MtPmlycV9kYXRhKTsKIAlpcnFfc3RhdGVfc2V0X21hc2tlZChkZXNjKTsKIH0KIApAQCAtNzI4LDcgKzczMSwzMCBAQAogCWlmICghaGFuZGxlKSB7CiAJCWhhbmRsZSA9IGhhbmRsZV9iYWRfaXJxOwogCX0gZWxzZSB7Ci0JCWlmIChXQVJOX09OKGRlc2MtPmlycV9kYXRhLmNoaXAgPT0gJm5vX2lycV9jaGlwKSkKKwkJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSA9ICZkZXNjLT5pcnFfZGF0YTsKKyNpZmRlZiBDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKKwkJLyoKKwkJICogV2l0aCBoaWVyYXJjaGljYWwgZG9tYWlucyB3ZSBtaWdodCBydW4gaW50byBhCisJCSAqIHNpdHVhdGlvbiB3aGVyZSB0aGUgb3V0ZXJtb3N0IGNoaXAgaXMgbm90IHlldCBzZXQKKwkJICogdXAsIGJ1dCB0aGUgaW5uZXIgY2hpcHMgYXJlIHRoZXJlLiAgSW5zdGVhZCBvZgorCQkgKiBiYWlsaW5nIHdlIGluc3RhbGwgdGhlIGhhbmRsZXIsIGJ1dCBvYnZpb3VzbHkgd2UKKwkJICogY2Fubm90IGVuYWJsZS9zdGFydHVwIHRoZSBpbnRlcnJ1cHQgYXQgdGhpcyBwb2ludC4KKwkJICovCisJCXdoaWxlIChpcnFfZGF0YSkgeworCQkJaWYgKGlycV9kYXRhLT5jaGlwICE9ICZub19pcnFfY2hpcCkKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBCYWlsIG91dCBpZiB0aGUgb3V0ZXIgY2hpcCBpcyBub3Qgc2V0IHVwCisJCQkgKiBhbmQgdGhlIGludGVycnJ1cHQgc3VwcG9zZWQgdG8gYmUgc3RhcnRlZAorCQkJICogcmlnaHQgYXdheS4KKwkJCSAqLworCQkJaWYgKFdBUk5fT04oaXNfY2hhaW5lZCkpCisJCQkJZ290byBvdXQ7CisJCQkvKiBUcnkgdGhlIHBhcmVudCAqLworCQkJaXJxX2RhdGEgPSBpcnFfZGF0YS0+cGFyZW50X2RhdGE7CisJCX0KKyNlbmRpZgorCQlpZiAoV0FSTl9PTighaXJxX2RhdGEgfHwgaXJxX2RhdGEtPmNoaXAgPT0gJm5vX2lycV9jaGlwKSkKIAkJCWdvdG8gb3V0OwogCX0KIApAQCAtODQ3LDMgKzg3MywxMDUgQEAKIAkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CisKKyNpZmRlZglDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKKy8qKgorICogaXJxX2NoaXBfYWNrX3BhcmVudCAtIEFja25vd2xlZGdlIHRoZSBwYXJlbnQgaW50ZXJydXB0CisgKiBAZGF0YToJUG9pbnRlciB0byBpbnRlcnJ1cHQgc3BlY2lmaWMgZGF0YQorICovCit2b2lkIGlycV9jaGlwX2Fja19wYXJlbnQoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWRhdGEgPSBkYXRhLT5wYXJlbnRfZGF0YTsKKwlkYXRhLT5jaGlwLT5pcnFfYWNrKGRhdGEpOworfQorCisvKioKKyAqIGlycV9jaGlwX21hc2tfcGFyZW50IC0gTWFzayB0aGUgcGFyZW50IGludGVycnVwdAorICogQGRhdGE6CVBvaW50ZXIgdG8gaW50ZXJydXB0IHNwZWNpZmljIGRhdGEKKyAqLwordm9pZCBpcnFfY2hpcF9tYXNrX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhOworCWRhdGEtPmNoaXAtPmlycV9tYXNrKGRhdGEpOworfQorCisvKioKKyAqIGlycV9jaGlwX3VubWFza19wYXJlbnQgLSBVbm1hc2sgdGhlIHBhcmVudCBpbnRlcnJ1cHQKKyAqIEBkYXRhOglQb2ludGVyIHRvIGludGVycnVwdCBzcGVjaWZpYyBkYXRhCisgKi8KK3ZvaWQgaXJxX2NoaXBfdW5tYXNrX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhOworCWRhdGEtPmNoaXAtPmlycV91bm1hc2soZGF0YSk7Cit9CisKKy8qKgorICogaXJxX2NoaXBfZW9pX3BhcmVudCAtIEludm9rZSBFT0kgb24gdGhlIHBhcmVudCBpbnRlcnJ1cHQKKyAqIEBkYXRhOglQb2ludGVyIHRvIGludGVycnVwdCBzcGVjaWZpYyBkYXRhCisgKi8KK3ZvaWQgaXJxX2NoaXBfZW9pX3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhOworCWRhdGEtPmNoaXAtPmlycV9lb2koZGF0YSk7Cit9CisKKy8qKgorICogaXJxX2NoaXBfc2V0X2FmZmluaXR5X3BhcmVudCAtIFNldCBhZmZpbml0eSBvbiB0aGUgcGFyZW50IGludGVycnVwdAorICogQGRhdGE6CVBvaW50ZXIgdG8gaW50ZXJydXB0IHNwZWNpZmljIGRhdGEKKyAqIEBkZXN0OglUaGUgYWZmaW5pdHkgbWFzayB0byBzZXQKKyAqIEBmb3JjZToJRmxhZyB0byBlbmZvcmNlIHNldHRpbmcgKGRpc2FibGUgb25saW5lIGNoZWNrcykKKyAqCisgKiBDb25kaXRpbmFsLCBhcyB0aGUgdW5kZXJseWluZyBwYXJlbnQgY2hpcCBtaWdodCBub3QgaW1wbGVtZW50IGl0LgorICovCitpbnQgaXJxX2NoaXBfc2V0X2FmZmluaXR5X3BhcmVudChzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsCisJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0LCBib29sIGZvcmNlKQoreworCWRhdGEgPSBkYXRhLT5wYXJlbnRfZGF0YTsKKwlpZiAoZGF0YS0+Y2hpcC0+aXJxX3NldF9hZmZpbml0eSkKKwkJcmV0dXJuIGRhdGEtPmNoaXAtPmlycV9zZXRfYWZmaW5pdHkoZGF0YSwgZGVzdCwgZm9yY2UpOworCisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKy8qKgorICogaXJxX2NoaXBfcmV0cmlnZ2VyX2hpZXJhcmNoeSAtIFJldHJpZ2dlciBhbiBpbnRlcnJ1cHQgaW4gaGFyZHdhcmUKKyAqIEBkYXRhOglQb2ludGVyIHRvIGludGVycnVwdCBzcGVjaWZpYyBkYXRhCisgKgorICogSXRlcmF0ZSB0aHJvdWdoIHRoZSBkb21haW4gaGllcmFyY2h5IG9mIHRoZSBpbnRlcnJ1cHQgYW5kIGNoZWNrCisgKiB3aGV0aGVyIGEgaHcgcmV0cmlnZ2VyIGZ1bmN0aW9uIGV4aXN0cy4gSWYgeWVzLCBpbnZva2UgaXQuCisgKi8KK2ludCBpcnFfY2hpcF9yZXRyaWdnZXJfaGllcmFyY2h5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlmb3IgKGRhdGEgPSBkYXRhLT5wYXJlbnRfZGF0YTsgZGF0YTsgZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhKQorCQlpZiAoZGF0YS0+Y2hpcCAmJiBkYXRhLT5jaGlwLT5pcnFfcmV0cmlnZ2VyKQorCQkJcmV0dXJuIGRhdGEtPmNoaXAtPmlycV9yZXRyaWdnZXIoZGF0YSk7CisKKwlyZXR1cm4gLUVOT1NZUzsKK30KKyNlbmRpZgorCisvKioKKyAqIGlycV9jaGlwX2NvbXBvc2VfbXNpX21zZyAtIENvbXBvbnNlIG1zaSBtZXNzYWdlIGZvciBhIGlycSBjaGlwCisgKiBAZGF0YToJUG9pbnRlciB0byBpbnRlcnJ1cHQgc3BlY2lmaWMgZGF0YQorICogQG1zZzoJUG9pbnRlciB0byB0aGUgTVNJIG1lc3NhZ2UKKyAqCisgKiBGb3IgaGllcmFyY2hpY2FsIGRvbWFpbnMgd2UgZmluZCB0aGUgZmlyc3QgY2hpcCBpbiB0aGUgaGllcmFyY2h5CisgKiB3aGljaCBpbXBsZW1lbnRzIHRoZSBpcnFfY29tcG9zZV9tc2lfbXNnIGNhbGxiYWNrLiBGb3Igbm9uCisgKiBoaWVyYXJjaGljYWwgd2UgdXNlIHRoZSB0b3AgbGV2ZWwgY2hpcC4KKyAqLworaW50IGlycV9jaGlwX2NvbXBvc2VfbXNpX21zZyhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IGlycV9kYXRhICpwb3MgPSBOVUxMOworCisjaWZkZWYJQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZCisJZm9yICg7IGRhdGE7IGRhdGEgPSBkYXRhLT5wYXJlbnRfZGF0YSkKKyNlbmRpZgorCQlpZiAoZGF0YS0+Y2hpcCAmJiBkYXRhLT5jaGlwLT5pcnFfY29tcG9zZV9tc2lfbXNnKQorCQkJcG9zID0gZGF0YTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlwb3MtPmNoaXAtPmlycV9jb21wb3NlX21zaV9tc2cocG9zLCBtc2cpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2dlbmVyaWMtY2hpcC5jIGIva2VybmVsL2lycS9nZW5lcmljLWNoaXAuYwppbmRleCBjZjgwZTdiLi42MTAyNGU4IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2dlbmVyaWMtY2hpcC5jCisrKyBiL2tlcm5lbC9pcnEvZ2VuZXJpYy1jaGlwLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAl1MzIgbWFzayA9IGQtPm1hc2s7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MuZGlzYWJsZSk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIG1hc2ssIGN0LT5yZWdzLmRpc2FibGUpOwogCSpjdC0+bWFza19jYWNoZSAmPSB+bWFzazsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KQEAgLTU5LDcgKzU5LDcgQEAKIAogCWlycV9nY19sb2NrKGdjKTsKIAkqY3QtPm1hc2tfY2FjaGUgfD0gbWFzazsKLQlpcnFfcmVnX3dyaXRlbCgqY3QtPm1hc2tfY2FjaGUsIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLm1hc2spOworCWlycV9yZWdfd3JpdGVsKGdjLCAqY3QtPm1hc2tfY2FjaGUsIGN0LT5yZWdzLm1hc2spOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2djX21hc2tfc2V0X2JpdCk7CkBAIC03OSw3ICs3OSw3IEBACiAKIAlpcnFfZ2NfbG9jayhnYyk7CiAJKmN0LT5tYXNrX2NhY2hlICY9IH5tYXNrOwotCWlycV9yZWdfd3JpdGVsKCpjdC0+bWFza19jYWNoZSwgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MubWFzayk7CisJaXJxX3JlZ193cml0ZWwoZ2MsICpjdC0+bWFza19jYWNoZSwgY3QtPnJlZ3MubWFzayk7CiAJaXJxX2djX3VubG9jayhnYyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcnFfZ2NfbWFza19jbHJfYml0KTsKQEAgLTk4LDcgKzk4LDcgQEAKIAl1MzIgbWFzayA9IGQtPm1hc2s7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MuZW5hYmxlKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgbWFzaywgY3QtPnJlZ3MuZW5hYmxlKTsKIAkqY3QtPm1hc2tfY2FjaGUgfD0gbWFzazsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KQEAgLTExNCw3ICsxMTQsNyBAQAogCXUzMiBtYXNrID0gZC0+bWFzazsKIAogCWlycV9nY19sb2NrKGdjKTsKLQlpcnFfcmVnX3dyaXRlbChtYXNrLCBnYy0+cmVnX2Jhc2UgKyBjdC0+cmVncy5hY2spOworCWlycV9yZWdfd3JpdGVsKGdjLCBtYXNrLCBjdC0+cmVncy5hY2spOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2djX2Fja19zZXRfYml0KTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogCXUzMiBtYXNrID0gfmQtPm1hc2s7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MuYWNrKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgbWFzaywgY3QtPnJlZ3MuYWNrKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtMTQ1LDggKzE0NSw4IEBACiAJdTMyIG1hc2sgPSBkLT5tYXNrOwogCiAJaXJxX2djX2xvY2soZ2MpOwotCWlycV9yZWdfd3JpdGVsKG1hc2ssIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLm1hc2spOwotCWlycV9yZWdfd3JpdGVsKG1hc2ssIGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLmFjayk7CisJaXJxX3JlZ193cml0ZWwoZ2MsIG1hc2ssIGN0LT5yZWdzLm1hc2spOworCWlycV9yZWdfd3JpdGVsKGdjLCBtYXNrLCBjdC0+cmVncy5hY2spOwogCWlycV9nY191bmxvY2soZ2MpOwogfQogCkBAIC0xNjEsNyArMTYxLDcgQEAKIAl1MzIgbWFzayA9IGQtPm1hc2s7CiAKIAlpcnFfZ2NfbG9jayhnYyk7Ci0JaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MuZW9pKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgbWFzaywgY3QtPnJlZ3MuZW9pKTsKIAlpcnFfZ2NfdW5sb2NrKGdjKTsKIH0KIApAQCAtMTkxLDYgKzE5MSwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTMyIGlycV9yZWFkbF9iZSh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGlvcmVhZDMyYmUoYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIGlycV93cml0ZWxfYmUodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlvd3JpdGUzMmJlKHZhbCwgYWRkcik7Cit9CisKIHN0YXRpYyB2b2lkCiBpcnFfaW5pdF9nZW5lcmljX2NoaXAoc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjLCBjb25zdCBjaGFyICpuYW1lLAogCQkgICAgICBpbnQgbnVtX2N0LCB1bnNpZ25lZCBpbnQgaXJxX2Jhc2UsCkBAIC0yNDUsNyArMjU1LDcgQEAKIAkJfQogCQljdFtpXS5tYXNrX2NhY2hlID0gbXNrcHRyOwogCQlpZiAoZmxhZ3MgJiBJUlFfR0NfSU5JVF9NQVNLX0NBQ0hFKQotCQkJKm1za3B0ciA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgbXNrcmVnKTsKKwkJCSptc2twdHIgPSBpcnFfcmVnX3JlYWRsKGdjLCBtc2tyZWcpOwogCX0KIH0KIApAQCAtMzAwLDcgKzMxMCwxMyBAQAogCQlkZ2MtPmdjW2ldID0gZ2MgPSB0bXA7CiAJCWlycV9pbml0X2dlbmVyaWNfY2hpcChnYywgbmFtZSwgbnVtX2N0LCBpICogaXJxc19wZXJfY2hpcCwKIAkJCQkgICAgICBOVUxMLCBoYW5kbGVyKTsKKwogCQlnYy0+ZG9tYWluID0gZDsKKwkJaWYgKGdjZmxhZ3MgJiBJUlFfR0NfQkVfSU8pIHsKKwkJCWdjLT5yZWdfcmVhZGwgPSAmaXJxX3JlYWRsX2JlOworCQkJZ2MtPnJlZ193cml0ZWwgPSAmaXJxX3dyaXRlbF9iZTsKKwkJfQorCiAJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ2NfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2FkZF90YWlsKCZnYy0+bGlzdCwgJmdjX2xpc3QpOwogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2NfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pcnFkb21haW4uYyBiL2tlcm5lbC9pcnEvaXJxZG9tYWluLmMKaW5kZXggNjUzNGZmNi4uN2ZhYzMxMSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pcnFkb21haW4uYworKysgYi9rZXJuZWwvaXJxL2lycWRvbWFpbi5jCkBAIC0yMyw2ICsyMywxMCBAQAogc3RhdGljIERFRklORV9NVVRFWChyZXZtYXBfdHJlZXNfbXV0ZXgpOwogc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluICppcnFfZGVmYXVsdF9kb21haW47CiAKK3N0YXRpYyBpbnQgaXJxX2RvbWFpbl9hbGxvY19kZXNjcyhpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMsCisJCQkJICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEsIGludCBub2RlKTsKK3N0YXRpYyB2b2lkIGlycV9kb21haW5fY2hlY2tfaGllcmFyY2h5KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4pOworCiAvKioKICAqIF9faXJxX2RvbWFpbl9hZGQoKSAtIEFsbG9jYXRlIGEgbmV3IGlycV9kb21haW4gZGF0YSBzdHJ1Y3R1cmUKICAqIEBvZl9ub2RlOiBvcHRpb25hbCBkZXZpY2UtdHJlZSBub2RlIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgpAQCAtMzAsNyArMzQsNyBAQAogICogQGh3aXJxX21heDogTWF4aW11bSBudW1iZXIgb2YgaW50ZXJydXB0cyBzdXBwb3J0ZWQgYnkgY29udHJvbGxlcgogICogQGRpcmVjdF9tYXg6IE1heGltdW0gdmFsdWUgb2YgZGlyZWN0IG1hcHM7IFVzZSB+MCBmb3Igbm8gbGltaXQ7IDAgZm9yIG5vCiAgKiAgICAgICAgICAgICAgZGlyZWN0IG1hcHBpbmcKLSAqIEBvcHM6IG1hcC91bm1hcCBkb21haW4gY2FsbGJhY2tzCisgKiBAb3BzOiBkb21haW4gY2FsbGJhY2tzCiAgKiBAaG9zdF9kYXRhOiBDb250cm9sbGVyIHByaXZhdGUgZGF0YSBwb2ludGVyCiAgKgogICogQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplIGFuZCBpcnFfZG9tYWluIHN0cnVjdHVyZS4KQEAgLTU2LDYgKzYwLDcgQEAKIAlkb21haW4tPmh3aXJxX21heCA9IGh3aXJxX21heDsKIAlkb21haW4tPnJldm1hcF9zaXplID0gc2l6ZTsKIAlkb21haW4tPnJldm1hcF9kaXJlY3RfbWF4X2lycSA9IGRpcmVjdF9tYXg7CisJaXJxX2RvbWFpbl9jaGVja19oaWVyYXJjaHkoZG9tYWluKTsKIAogCW11dGV4X2xvY2soJmlycV9kb21haW5fbXV0ZXgpOwogCWxpc3RfYWRkKCZkb21haW4tPmxpbmssICZpcnFfZG9tYWluX2xpc3QpOwpAQCAtMTA5LDcgKzExNCw3IEBACiAgKiBAZmlyc3RfaXJxOiBmaXJzdCBudW1iZXIgb2YgaXJxIGJsb2NrIGFzc2lnbmVkIHRvIHRoZSBkb21haW4sCiAgKglwYXNzIHplcm8gdG8gYXNzaWduIGlycXMgb24tdGhlLWZseS4gSWYgZmlyc3RfaXJxIGlzIG5vbi16ZXJvLCB0aGVuCiAgKglwcmUtbWFwIGFsbCBvZiB0aGUgaXJxcyBpbiB0aGUgZG9tYWluIHRvIHZpcnFzIHN0YXJ0aW5nIGF0IGZpcnN0X2lycS4KLSAqIEBvcHM6IG1hcC91bm1hcCBkb21haW4gY2FsbGJhY2tzCisgKiBAb3BzOiBkb21haW4gY2FsbGJhY2tzCiAgKiBAaG9zdF9kYXRhOiBDb250cm9sbGVyIHByaXZhdGUgZGF0YSBwb2ludGVyCiAgKgogICogQWxsb2NhdGVzIGFuIGlycV9kb21haW4sIGFuZCBvcHRpb25hbGx5IGlmIGZpcnN0X2lycSBpcyBwb3NpdGl2ZSB0aGVuIGFsc28KQEAgLTE3NCwxMCArMTc5LDggQEAKIAogCWRvbWFpbiA9IF9faXJxX2RvbWFpbl9hZGQob2Zfbm9kZSwgZmlyc3RfaHdpcnEgKyBzaXplLAogCQkJCSAgZmlyc3RfaHdpcnEgKyBzaXplLCAwLCBvcHMsIGhvc3RfZGF0YSk7Ci0JaWYgKCFkb21haW4pCi0JCXJldHVybiBOVUxMOwotCi0JaXJxX2RvbWFpbl9hc3NvY2lhdGVfbWFueShkb21haW4sIGZpcnN0X2lycSwgZmlyc3RfaHdpcnEsIHNpemUpOworCWlmIChkb21haW4pCisJCWlycV9kb21haW5fYXNzb2NpYXRlX21hbnkoZG9tYWluLCBmaXJzdF9pcnEsIGZpcnN0X2h3aXJxLCBzaXplKTsKIAogCXJldHVybiBkb21haW47CiB9CkBAIC0zODgsNyArMzkxLDYgQEAKIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX21hcHBpbmcoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKIAkJCQlpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7Ci0JdW5zaWduZWQgaW50IGhpbnQ7CiAJaW50IHZpcnE7CiAKIAlwcl9kZWJ1ZygiaXJxX2NyZWF0ZV9tYXBwaW5nKDB4JXAsIDB4JWx4KVxuIiwgZG9tYWluLCBod2lycSk7CkBAIC00MTAsMTIgKzQxMiw4IEBACiAJfQogCiAJLyogQWxsb2NhdGUgYSB2aXJ0dWFsIGludGVycnVwdCBudW1iZXIgKi8KLQloaW50ID0gaHdpcnEgJSBucl9pcnFzOwotCWlmIChoaW50ID09IDApCi0JCWhpbnQrKzsKLQl2aXJxID0gaXJxX2FsbG9jX2Rlc2NfZnJvbShoaW50LCBvZl9ub2RlX3RvX25pZChkb21haW4tPm9mX25vZGUpKTsKLQlpZiAodmlycSA8PSAwKQotCQl2aXJxID0gaXJxX2FsbG9jX2Rlc2NfZnJvbSgxLCBvZl9ub2RlX3RvX25pZChkb21haW4tPm9mX25vZGUpKTsKKwl2aXJxID0gaXJxX2RvbWFpbl9hbGxvY19kZXNjcygtMSwgMSwgaHdpcnEsCisJCQkJICAgICAgb2Zfbm9kZV90b19uaWQoZG9tYWluLT5vZl9ub2RlKSk7CiAJaWYgKHZpcnEgPD0gMCkgewogCQlwcl9kZWJ1ZygiLT4gdmlycSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiAwOwpAQCAtNDcxLDcgKzQ2OSw3IEBACiAJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKIAlpcnFfaHdfbnVtYmVyX3QgaHdpcnE7CiAJdW5zaWduZWQgaW50IHR5cGUgPSBJUlFfVFlQRV9OT05FOwotCXVuc2lnbmVkIGludCB2aXJxOworCWludCB2aXJxOwogCiAJZG9tYWluID0gaXJxX2RhdGEtPm5wID8gaXJxX2ZpbmRfaG9zdChpcnFfZGF0YS0+bnApIDogaXJxX2RlZmF1bHRfZG9tYWluOwogCWlmICghZG9tYWluKSB7CkBAIC00ODksMTAgKzQ4NywyNCBAQAogCQkJcmV0dXJuIDA7CiAJfQogCi0JLyogQ3JlYXRlIG1hcHBpbmcgKi8KLQl2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKGRvbWFpbiwgaHdpcnEpOwotCWlmICghdmlycSkKLQkJcmV0dXJuIHZpcnE7CisJaWYgKGlycV9kb21haW5faXNfaGllcmFyY2h5KGRvbWFpbikpIHsKKwkJLyoKKwkJICogSWYgd2UndmUgYWxyZWFkeSBjb25maWd1cmVkIHRoaXMgaW50ZXJydXB0LAorCQkgKiBkb24ndCBkbyBpdCBhZ2Fpbiwgb3IgaGVsbCB3aWxsIGJyZWFrIGxvb3NlLgorCQkgKi8KKwkJdmlycSA9IGlycV9maW5kX21hcHBpbmcoZG9tYWluLCBod2lycSk7CisJCWlmICh2aXJxKQorCQkJcmV0dXJuIHZpcnE7CisKKwkJdmlycSA9IGlycV9kb21haW5fYWxsb2NfaXJxcyhkb21haW4sIDEsIE5VTUFfTk9fTk9ERSwgaXJxX2RhdGEpOworCQlpZiAodmlycSA8PSAwKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJLyogQ3JlYXRlIG1hcHBpbmcgKi8KKwkJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhkb21haW4sIGh3aXJxKTsKKwkJaWYgKCF2aXJxKQorCQkJcmV0dXJuIHZpcnE7CisJfQogCiAJLyogU2V0IHR5cGUgaWYgc3BlY2lmaWVkIGFuZCBkaWZmZXJlbnQgdGhhbiB0aGUgY3VycmVudCBvbmUgKi8KIAlpZiAodHlwZSAhPSBJUlFfVFlQRV9OT05FICYmCkBAIC01NDAsOCArNTUyLDggQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaHdpcnEgPCBkb21haW4tPnJldm1hcF9kaXJlY3RfbWF4X2lycSkgewotCQlkYXRhID0gaXJxX2dldF9pcnFfZGF0YShod2lycSk7Ci0JCWlmIChkYXRhICYmIChkYXRhLT5kb21haW4gPT0gZG9tYWluKSAmJiAoZGF0YS0+aHdpcnEgPT0gaHdpcnEpKQorCQlkYXRhID0gaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoZG9tYWluLCBod2lycSk7CisJCWlmIChkYXRhICYmIGRhdGEtPmh3aXJxID09IGh3aXJxKQogCQkJcmV0dXJuIGh3aXJxOwogCX0KIApAQCAtNzA5LDMgKzcyMSw1MTggQEAKIAkueGxhdGUgPSBpcnFfZG9tYWluX3hsYXRlX29uZXR3b2NlbGwsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2RvbWFpbl9zaW1wbGVfb3BzKTsKKworc3RhdGljIGludCBpcnFfZG9tYWluX2FsbG9jX2Rlc2NzKGludCB2aXJxLCB1bnNpZ25lZCBpbnQgY250LAorCQkJCSAgaXJxX2h3X251bWJlcl90IGh3aXJxLCBpbnQgbm9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgaGludDsKKworCWlmICh2aXJxID49IDApIHsKKwkJdmlycSA9IGlycV9hbGxvY19kZXNjcyh2aXJxLCB2aXJxLCBjbnQsIG5vZGUpOworCX0gZWxzZSB7CisJCWhpbnQgPSBod2lycSAlIG5yX2lycXM7CisJCWlmIChoaW50ID09IDApCisJCQloaW50Kys7CisJCXZpcnEgPSBpcnFfYWxsb2NfZGVzY3NfZnJvbShoaW50LCBjbnQsIG5vZGUpOworCQlpZiAodmlycSA8PSAwICYmIGhpbnQgPiAxKQorCQkJdmlycSA9IGlycV9hbGxvY19kZXNjc19mcm9tKDEsIGNudCwgbm9kZSk7CisJfQorCisJcmV0dXJuIHZpcnE7Cit9CisKKyNpZmRlZglDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkKKy8qKgorICogaXJxX2RvbWFpbl9hZGRfaGllcmFyY2h5IC0gQWRkIGEgaXJxZG9tYWluIGludG8gdGhlIGhpZXJhcmNoeQorICogQHBhcmVudDoJUGFyZW50IGlycSBkb21haW4gdG8gYXNzb2NpYXRlIHdpdGggdGhlIG5ldyBkb21haW4KKyAqIEBmbGFnczoJSXJxIGRvbWFpbiBmbGFncyBhc3NvY2lhdGVkIHRvIHRoZSBkb21haW4KKyAqIEBzaXplOglTaXplIG9mIHRoZSBkb21haW4uIFNlZSBiZWxvdworICogQG5vZGU6CU9wdGlvbmFsIGRldmljZS10cmVlIG5vZGUgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyCisgKiBAb3BzOglQb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgZG9tYWluIGNhbGxiYWNrcworICogQGhvc3RfZGF0YToJQ29udHJvbGxlciBwcml2YXRlIGRhdGEgcG9pbnRlcgorICoKKyAqIElmIEBzaXplIGlzIDAgYSB0cmVlIGRvbWFpbiBpcyBjcmVhdGVkLCBvdGhlcndpc2UgYSBsaW5lYXIgZG9tYWluLgorICoKKyAqIElmIHN1Y2Nlc3NmdWwgdGhlIHBhcmVudCBpcyBhc3NvY2lhdGVkIHRvIHRoZSBuZXcgZG9tYWluIGFuZCB0aGUKKyAqIGRvbWFpbiBmbGFncyBhcmUgc2V0LgorICogUmV0dXJucyBwb2ludGVyIHRvIElSUSBkb21haW4sIG9yIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IGlycV9kb21haW4gKmlycV9kb21haW5fYWRkX2hpZXJhcmNoeShzdHJ1Y3QgaXJxX2RvbWFpbiAqcGFyZW50LAorCQkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJCQkgICAgdW5zaWduZWQgaW50IHNpemUsCisJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgKm9wcywKKwkJCQkJICAgIHZvaWQgKmhvc3RfZGF0YSkKK3sKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOworCisJaWYgKHNpemUpCisJCWRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihub2RlLCBzaXplLCBvcHMsIGhvc3RfZGF0YSk7CisJZWxzZQorCQlkb21haW4gPSBpcnFfZG9tYWluX2FkZF90cmVlKG5vZGUsIG9wcywgaG9zdF9kYXRhKTsKKwlpZiAoZG9tYWluKSB7CisJCWRvbWFpbi0+cGFyZW50ID0gcGFyZW50OworCQlkb21haW4tPmZsYWdzIHw9IGZsYWdzOworCX0KKworCXJldHVybiBkb21haW47Cit9CisKK3N0YXRpYyB2b2lkIGlycV9kb21haW5faW5zZXJ0X2lycShpbnQgdmlycSkKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKmRhdGE7CisKKwlmb3IgKGRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKHZpcnEpOyBkYXRhOyBkYXRhID0gZGF0YS0+cGFyZW50X2RhdGEpIHsKKwkJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiA9IGRhdGEtPmRvbWFpbjsKKwkJaXJxX2h3X251bWJlcl90IGh3aXJxID0gZGF0YS0+aHdpcnE7CisKKwkJaWYgKGh3aXJxIDwgZG9tYWluLT5yZXZtYXBfc2l6ZSkgeworCQkJZG9tYWluLT5saW5lYXJfcmV2bWFwW2h3aXJxXSA9IHZpcnE7CisJCX0gZWxzZSB7CisJCQltdXRleF9sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOworCQkJcmFkaXhfdHJlZV9pbnNlcnQoJmRvbWFpbi0+cmV2bWFwX3RyZWUsIGh3aXJxLCBkYXRhKTsKKwkJCW11dGV4X3VubG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKKwkJfQorCisJCS8qIElmIG5vdCBhbHJlYWR5IGFzc2lnbmVkLCBnaXZlIHRoZSBkb21haW4gdGhlIGNoaXAncyBuYW1lICovCisJCWlmICghZG9tYWluLT5uYW1lICYmIGRhdGEtPmNoaXApCisJCQlkb21haW4tPm5hbWUgPSBkYXRhLT5jaGlwLT5uYW1lOworCX0KKworCWlycV9jbGVhcl9zdGF0dXNfZmxhZ3ModmlycSwgSVJRX05PUkVRVUVTVCk7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9kb21haW5fcmVtb3ZlX2lycShpbnQgdmlycSkKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKmRhdGE7CisKKwlpcnFfc2V0X3N0YXR1c19mbGFncyh2aXJxLCBJUlFfTk9SRVFVRVNUKTsKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgTlVMTCwgTlVMTCk7CisJc3luY2hyb25pemVfaXJxKHZpcnEpOworCXNtcF9tYigpOworCisJZm9yIChkYXRhID0gaXJxX2dldF9pcnFfZGF0YSh2aXJxKTsgZGF0YTsgZGF0YSA9IGRhdGEtPnBhcmVudF9kYXRhKSB7CisJCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW4gPSBkYXRhLT5kb21haW47CisJCWlycV9od19udW1iZXJfdCBod2lycSA9IGRhdGEtPmh3aXJxOworCisJCWlmIChod2lycSA8IGRvbWFpbi0+cmV2bWFwX3NpemUpIHsKKwkJCWRvbWFpbi0+bGluZWFyX3Jldm1hcFtod2lycV0gPSAwOworCQl9IGVsc2UgeworCQkJbXV0ZXhfbG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKKwkJCXJhZGl4X3RyZWVfZGVsZXRlKCZkb21haW4tPnJldm1hcF90cmVlLCBod2lycSk7CisJCQltdXRleF91bmxvY2soJnJldm1hcF90cmVlc19tdXRleCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kb21haW5faW5zZXJ0X2lycV9kYXRhKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJCQkgICBzdHJ1Y3QgaXJxX2RhdGEgKmNoaWxkKQoreworCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGE7CisKKwlpcnFfZGF0YSA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmlycV9kYXRhKSwgR0ZQX0tFUk5FTCwgY2hpbGQtPm5vZGUpOworCWlmIChpcnFfZGF0YSkgeworCQljaGlsZC0+cGFyZW50X2RhdGEgPSBpcnFfZGF0YTsKKwkJaXJxX2RhdGEtPmlycSA9IGNoaWxkLT5pcnE7CisJCWlycV9kYXRhLT5ub2RlID0gY2hpbGQtPm5vZGU7CisJCWlycV9kYXRhLT5kb21haW4gPSBkb21haW47CisJfQorCisJcmV0dXJuIGlycV9kYXRhOworfQorCitzdGF0aWMgdm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxX2RhdGEodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBucl9pcnFzKQoreworCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEsICp0bXA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJCWlycV9kYXRhID0gaXJxX2dldF9pcnFfZGF0YSh2aXJxICsgaSk7CisJCXRtcCA9IGlycV9kYXRhLT5wYXJlbnRfZGF0YTsKKwkJaXJxX2RhdGEtPnBhcmVudF9kYXRhID0gTlVMTDsKKwkJaXJxX2RhdGEtPmRvbWFpbiA9IE5VTEw7CisKKwkJd2hpbGUgKHRtcCkgeworCQkJaXJxX2RhdGEgPSB0bXA7CisJCQl0bXAgPSB0bXAtPnBhcmVudF9kYXRhOworCQkJa2ZyZWUoaXJxX2RhdGEpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGlycV9kb21haW5fYWxsb2NfaXJxX2RhdGEoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhOworCXN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQ7CisJaW50IGk7CisKKwkvKiBUaGUgb3V0ZXJtb3N0IGlycV9kYXRhIGlzIGVtYmVkZGVkIGluIHN0cnVjdCBpcnFfZGVzYyAqLworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJaXJxX2RhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKHZpcnEgKyBpKTsKKwkJaXJxX2RhdGEtPmRvbWFpbiA9IGRvbWFpbjsKKworCQlmb3IgKHBhcmVudCA9IGRvbWFpbi0+cGFyZW50OyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50KSB7CisJCQlpcnFfZGF0YSA9IGlycV9kb21haW5faW5zZXJ0X2lycV9kYXRhKHBhcmVudCwgaXJxX2RhdGEpOworCQkJaWYgKCFpcnFfZGF0YSkgeworCQkJCWlycV9kb21haW5fZnJlZV9pcnFfZGF0YSh2aXJxLCBpICsgMSk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcnFfZG9tYWluX2dldF9pcnFfZGF0YSAtIEdldCBpcnFfZGF0YSBhc3NvY2lhdGVkIHdpdGggQHZpcnEgYW5kIEBkb21haW4KKyAqIEBkb21haW46CWRvbWFpbiB0byBtYXRjaAorICogQHZpcnE6CUlSUSBudW1iZXIgdG8gZ2V0IGlycV9kYXRhCisgKi8KK3N0cnVjdCBpcnFfZGF0YSAqaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJIHVuc2lnbmVkIGludCB2aXJxKQoreworCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGE7CisKKwlmb3IgKGlycV9kYXRhID0gaXJxX2dldF9pcnFfZGF0YSh2aXJxKTsgaXJxX2RhdGE7CisJICAgICBpcnFfZGF0YSA9IGlycV9kYXRhLT5wYXJlbnRfZGF0YSkKKwkJaWYgKGlycV9kYXRhLT5kb21haW4gPT0gZG9tYWluKQorCQkJcmV0dXJuIGlycV9kYXRhOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogaXJxX2RvbWFpbl9zZXRfaHdpcnFfYW5kX2NoaXAgLSBTZXQgaHdpcnEgYW5kIGlycWNoaXAgb2YgQHZpcnEgYXQgQGRvbWFpbgorICogQGRvbWFpbjoJSW50ZXJydXB0IGRvbWFpbiB0byBtYXRjaAorICogQHZpcnE6CUlSUSBudW1iZXIKKyAqIEBod2lycToJVGhlIGh3aXJxIG51bWJlcgorICogQGNoaXA6CVRoZSBhc3NvY2lhdGVkIGludGVycnVwdCBjaGlwCisgKiBAY2hpcF9kYXRhOglUaGUgYXNzb2NpYXRlZCBjaGlwIGRhdGEKKyAqLworaW50IGlycV9kb21haW5fc2V0X2h3aXJxX2FuZF9jaGlwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCB2aXJxLAorCQkJCSAgaXJxX2h3X251bWJlcl90IGh3aXJxLCBzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAsCisJCQkJICB2b2lkICpjaGlwX2RhdGEpCit7CisJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSA9IGlycV9kb21haW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmlycSk7CisKKwlpZiAoIWlycV9kYXRhKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWlycV9kYXRhLT5od2lycSA9IGh3aXJxOworCWlycV9kYXRhLT5jaGlwID0gY2hpcCA/IGNoaXAgOiAmbm9faXJxX2NoaXA7CisJaXJxX2RhdGEtPmNoaXBfZGF0YSA9IGNoaXBfZGF0YTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlycV9kb21haW5fc2V0X2luZm8gLSBTZXQgdGhlIGNvbXBsZXRlIGRhdGEgZm9yIGEgQHZpcnEgaW4gQGRvbWFpbgorICogQGRvbWFpbjoJCUludGVycnVwdCBkb21haW4gdG8gbWF0Y2gKKyAqIEB2aXJxOgkJSVJRIG51bWJlcgorICogQGh3aXJxOgkJVGhlIGhhcmR3YXJlIGludGVycnVwdCBudW1iZXIKKyAqIEBjaGlwOgkJVGhlIGFzc29jaWF0ZWQgaW50ZXJydXB0IGNoaXAKKyAqIEBjaGlwX2RhdGE6CQlUaGUgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgY2hpcCBkYXRhCisgKiBAaGFuZGxlcjoJCVRoZSBpbnRlcnJ1cHQgZmxvdyBoYW5kbGVyCisgKiBAaGFuZGxlcl9kYXRhOglUaGUgaW50ZXJydXB0IGZsb3cgaGFuZGxlciBkYXRhCisgKiBAaGFuZGxlcl9uYW1lOglUaGUgaW50ZXJydXB0IGhhbmRsZXIgbmFtZQorICovCit2b2lkIGlycV9kb21haW5fc2V0X2luZm8oc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgaXJxX2h3X251bWJlcl90IGh3aXJxLCBzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAsCisJCQkgdm9pZCAqY2hpcF9kYXRhLCBpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlciwKKwkJCSB2b2lkICpoYW5kbGVyX2RhdGEsIGNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSkKK3sKKwlpcnFfZG9tYWluX3NldF9od2lycV9hbmRfY2hpcChkb21haW4sIHZpcnEsIGh3aXJxLCBjaGlwLCBjaGlwX2RhdGEpOworCV9faXJxX3NldF9oYW5kbGVyKHZpcnEsIGhhbmRsZXIsIDAsIGhhbmRsZXJfbmFtZSk7CisJaXJxX3NldF9oYW5kbGVyX2RhdGEodmlycSwgaGFuZGxlcl9kYXRhKTsKK30KKworLyoqCisgKiBpcnFfZG9tYWluX3Jlc2V0X2lycV9kYXRhIC0gQ2xlYXIgaHdpcnEsIGNoaXAgYW5kIGNoaXBfZGF0YSBpbiBAaXJxX2RhdGEKKyAqIEBpcnFfZGF0YToJVGhlIHBvaW50ZXIgdG8gaXJxX2RhdGEKKyAqLwordm9pZCBpcnFfZG9tYWluX3Jlc2V0X2lycV9kYXRhKHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpCit7CisJaXJxX2RhdGEtPmh3aXJxID0gMDsKKwlpcnFfZGF0YS0+Y2hpcCA9ICZub19pcnFfY2hpcDsKKwlpcnFfZGF0YS0+Y2hpcF9kYXRhID0gTlVMTDsKK30KKworLyoqCisgKiBpcnFfZG9tYWluX2ZyZWVfaXJxc19jb21tb24gLSBDbGVhciBpcnFfZGF0YSBhbmQgZnJlZSB0aGUgcGFyZW50CisgKiBAZG9tYWluOglJbnRlcnJ1cHQgZG9tYWluIHRvIG1hdGNoCisgKiBAdmlycToJSVJRIG51bWJlciB0byBzdGFydCB3aXRoCisgKiBAbnJfaXJxczoJVGhlIG51bWJlciBvZiBpcnFzIHRvIGZyZWUKKyAqLwordm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxc19jb21tb24oc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJIHVuc2lnbmVkIGludCBucl9pcnFzKQoreworCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJCWlycV9kYXRhID0gaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoZG9tYWluLCB2aXJxICsgaSk7CisJCWlmIChpcnFfZGF0YSkKKwkJCWlycV9kb21haW5fcmVzZXRfaXJxX2RhdGEoaXJxX2RhdGEpOworCX0KKwlpcnFfZG9tYWluX2ZyZWVfaXJxc19wYXJlbnQoZG9tYWluLCB2aXJxLCBucl9pcnFzKTsKK30KKworLyoqCisgKiBpcnFfZG9tYWluX2ZyZWVfaXJxc190b3AgLSBDbGVhciBoYW5kbGVyIGFuZCBoYW5kbGVyIGRhdGEsIGNsZWFyIGlycWRhdGEgYW5kIGZyZWUgcGFyZW50CisgKiBAZG9tYWluOglJbnRlcnJ1cHQgZG9tYWluIHRvIG1hdGNoCisgKiBAdmlycToJSVJRIG51bWJlciB0byBzdGFydCB3aXRoCisgKiBAbnJfaXJxczoJVGhlIG51bWJlciBvZiBpcnFzIHRvIGZyZWUKKyAqLwordm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxc190b3Aoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJaXJxX3NldF9oYW5kbGVyX2RhdGEodmlycSArIGksIE5VTEwpOworCQlpcnFfc2V0X2hhbmRsZXIodmlycSArIGksIE5VTEwpOworCX0KKwlpcnFfZG9tYWluX2ZyZWVfaXJxc19jb21tb24oZG9tYWluLCB2aXJxLCBucl9pcnFzKTsKK30KKworc3RhdGljIGJvb2wgaXJxX2RvbWFpbl9pc19hdXRvX3JlY3Vyc2l2ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluKQoreworCXJldHVybiBkb21haW4tPmZsYWdzICYgSVJRX0RPTUFJTl9GTEFHX0FVVE9fUkVDVVJTSVZFOworfQorCitzdGF0aWMgdm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxc19yZWN1cnNpdmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJICAgdW5zaWduZWQgaW50IGlycV9iYXNlLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlkb21haW4tPm9wcy0+ZnJlZShkb21haW4sIGlycV9iYXNlLCBucl9pcnFzKTsKKwlpZiAoaXJxX2RvbWFpbl9pc19hdXRvX3JlY3Vyc2l2ZShkb21haW4pKSB7CisJCUJVR19PTighZG9tYWluLT5wYXJlbnQpOworCQlpcnFfZG9tYWluX2ZyZWVfaXJxc19yZWN1cnNpdmUoZG9tYWluLT5wYXJlbnQsIGlycV9iYXNlLAorCQkJCQkgICAgICAgbnJfaXJxcyk7CisJfQorfQorCitzdGF0aWMgaW50IGlycV9kb21haW5fYWxsb2NfaXJxc19yZWN1cnNpdmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkJICAgdW5zaWduZWQgaW50IGlycV9iYXNlLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbnJfaXJxcywgdm9pZCAqYXJnKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQgPSBkb21haW4tPnBhcmVudDsKKwlib29sIHJlY3Vyc2l2ZSA9IGlycV9kb21haW5faXNfYXV0b19yZWN1cnNpdmUoZG9tYWluKTsKKworCUJVR19PTihyZWN1cnNpdmUgJiYgIXBhcmVudCk7CisJaWYgKHJlY3Vyc2l2ZSkKKwkJcmV0ID0gaXJxX2RvbWFpbl9hbGxvY19pcnFzX3JlY3Vyc2l2ZShwYXJlbnQsIGlycV9iYXNlLAorCQkJCQkJICAgICAgbnJfaXJxcywgYXJnKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IGRvbWFpbi0+b3BzLT5hbGxvYyhkb21haW4sIGlycV9iYXNlLCBucl9pcnFzLCBhcmcpOworCWlmIChyZXQgPCAwICYmIHJlY3Vyc2l2ZSkKKwkJaXJxX2RvbWFpbl9mcmVlX2lycXNfcmVjdXJzaXZlKHBhcmVudCwgaXJxX2Jhc2UsIG5yX2lycXMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBfX2lycV9kb21haW5fYWxsb2NfaXJxcyAtIEFsbG9jYXRlIElSUXMgZnJvbSBkb21haW4KKyAqIEBkb21haW46CWRvbWFpbiB0byBhbGxvY2F0ZSBmcm9tCisgKiBAaXJxX2Jhc2U6CWFsbG9jYXRlIHNwZWNpZmllZCBJUlEgbnVibWVyIGlmIGlycV9iYXNlID49IDAKKyAqIEBucl9pcnFzOgludW1iZXIgb2YgSVJRcyB0byBhbGxvY2F0ZQorICogQG5vZGU6CU5VTUEgbm9kZSBpZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24KKyAqIEBhcmc6CWRvbWFpbiBzcGVjaWZpYyBhcmd1bWVudAorICogQHJlYWxsb2M6CUlSUSBkZXNjcmlwdG9ycyBoYXZlIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQgaWYgdHJ1ZQorICoKKyAqIEFsbG9jYXRlIElSUSBudW1iZXJzIGFuZCBpbml0aWFsaXplZCBhbGwgZGF0YSBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQKKyAqIGhpZXJhcmNoeSBJUlEgZG9tYWlucy4KKyAqIFBhcmFtZXRlciBAcmVhbGxvYyBpcyBtYWlubHkgdG8gc3VwcG9ydCBsZWdhY3kgSVJRcy4KKyAqIFJldHVybnMgZXJyb3IgY29kZSBvciBhbGxvY2F0ZWQgSVJRIG51bWJlcgorICoKKyAqIFRoZSB3aG9sZSBwcm9jZXNzIHRvIHNldHVwIGFuIElSUSBoYXMgYmVlbiBzcGxpdCBpbnRvIHR3byBzdGVwcy4KKyAqIFRoZSBmaXJzdCBzdGVwLCBfX2lycV9kb21haW5fYWxsb2NfaXJxcygpLCBpcyB0byBhbGxvY2F0ZSBJUlEKKyAqIGRlc2NyaXB0b3IgYW5kIHJlcXVpcmVkIGhhcmR3YXJlIHJlc291cmNlcy4gVGhlIHNlY29uZCBzdGVwLAorICogaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoKSwgaXMgdG8gcHJvZ3JhbSBoYXJkd2FyZXMgd2l0aCBwcmVhbGxvY2F0ZWQKKyAqIHJlc291cmNlcy4gSW4gdGhpcyB3YXksIGl0J3MgZWFzaWVyIHRvIHJvbGxiYWNrIHdoZW4gZmFpbGluZyB0bworICogYWxsb2NhdGUgcmVzb3VyY2VzLgorICovCitpbnQgX19pcnFfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgaW50IGlycV9iYXNlLAorCQkJICAgIHVuc2lnbmVkIGludCBucl9pcnFzLCBpbnQgbm9kZSwgdm9pZCAqYXJnLAorCQkJICAgIGJvb2wgcmVhbGxvYykKK3sKKwlpbnQgaSwgcmV0LCB2aXJxOworCisJaWYgKGRvbWFpbiA9PSBOVUxMKSB7CisJCWRvbWFpbiA9IGlycV9kZWZhdWx0X2RvbWFpbjsKKwkJaWYgKFdBUk4oIWRvbWFpbiwgImRvbWFpbiBpcyBOVUxMOyBjYW5ub3QgYWxsb2NhdGUgSVJRXG4iKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZG9tYWluLT5vcHMtPmFsbG9jKSB7CisJCXByX2RlYnVnKCJkb21haW4tPm9wcy0+YWxsb2MoKSBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJaWYgKHJlYWxsb2MgJiYgaXJxX2Jhc2UgPj0gMCkgeworCQl2aXJxID0gaXJxX2Jhc2U7CisJfSBlbHNlIHsKKwkJdmlycSA9IGlycV9kb21haW5fYWxsb2NfZGVzY3MoaXJxX2Jhc2UsIG5yX2lycXMsIDAsIG5vZGUpOworCQlpZiAodmlycSA8IDApIHsKKwkJCXByX2RlYnVnKCJjYW5ub3QgYWxsb2NhdGUgSVJRKGJhc2UgJWQsIGNvdW50ICVkKVxuIiwKKwkJCQkgaXJxX2Jhc2UsIG5yX2lycXMpOworCQkJcmV0dXJuIHZpcnE7CisJCX0KKwl9CisKKwlpZiAoaXJxX2RvbWFpbl9hbGxvY19pcnFfZGF0YShkb21haW4sIHZpcnEsIG5yX2lycXMpKSB7CisJCXByX2RlYnVnKCJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBJUlElZFxuIiwgdmlycSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfZGVzYzsKKwl9CisKKwltdXRleF9sb2NrKCZpcnFfZG9tYWluX211dGV4KTsKKwlyZXQgPSBpcnFfZG9tYWluX2FsbG9jX2lycXNfcmVjdXJzaXZlKGRvbWFpbiwgdmlycSwgbnJfaXJxcywgYXJnKTsKKwlpZiAocmV0IDwgMCkgeworCQltdXRleF91bmxvY2soJmlycV9kb21haW5fbXV0ZXgpOworCQlnb3RvIG91dF9mcmVlX2lycV9kYXRhOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKQorCQlpcnFfZG9tYWluX2luc2VydF9pcnEodmlycSArIGkpOworCW11dGV4X3VubG9jaygmaXJxX2RvbWFpbl9tdXRleCk7CisKKwlyZXR1cm4gdmlycTsKKworb3V0X2ZyZWVfaXJxX2RhdGE6CisJaXJxX2RvbWFpbl9mcmVlX2lycV9kYXRhKHZpcnEsIG5yX2lycXMpOworb3V0X2ZyZWVfZGVzYzoKKwlpcnFfZnJlZV9kZXNjcyh2aXJxLCBucl9pcnFzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlycV9kb21haW5fZnJlZV9pcnFzIC0gRnJlZSBJUlEgbnVtYmVyIGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcworICogQHZpcnE6CWJhc2UgSVJRIG51bWJlcgorICogQG5yX2lycXM6CW51bWJlciBvZiBJUlFzIHRvIGZyZWUKKyAqLwordm9pZCBpcnFfZG9tYWluX2ZyZWVfaXJxcyh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMpCit7CisJc3RydWN0IGlycV9kYXRhICpkYXRhID0gaXJxX2dldF9pcnFfZGF0YSh2aXJxKTsKKwlpbnQgaTsKKworCWlmIChXQVJOKCFkYXRhIHx8ICFkYXRhLT5kb21haW4gfHwgIWRhdGEtPmRvbWFpbi0+b3BzLT5mcmVlLAorCQkgIk5VTEwgcG9pbnRlciwgY2Fubm90IGZyZWUgaXJxXG4iKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmaXJxX2RvbWFpbl9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykKKwkJaXJxX2RvbWFpbl9yZW1vdmVfaXJxKHZpcnEgKyBpKTsKKwlpcnFfZG9tYWluX2ZyZWVfaXJxc19yZWN1cnNpdmUoZGF0YS0+ZG9tYWluLCB2aXJxLCBucl9pcnFzKTsKKwltdXRleF91bmxvY2soJmlycV9kb21haW5fbXV0ZXgpOworCisJaXJxX2RvbWFpbl9mcmVlX2lycV9kYXRhKHZpcnEsIG5yX2lycXMpOworCWlycV9mcmVlX2Rlc2NzKHZpcnEsIG5yX2lycXMpOworfQorCisvKioKKyAqIGlycV9kb21haW5fYWxsb2NfaXJxc19wYXJlbnQgLSBBbGxvY2F0ZSBpbnRlcnJ1cHRzIGZyb20gcGFyZW50IGRvbWFpbgorICogQGlycV9iYXNlOglCYXNlIElSUSBudW1iZXIKKyAqIEBucl9pcnFzOglOdW1iZXIgb2YgSVJRcyB0byBhbGxvY2F0ZQorICogQGFyZzoJQWxsb2NhdGlvbiBkYXRhIChhcmNoL2RvbWFpbiBzcGVjaWZpYykKKyAqCisgKiBDaGVjayB3aGV0aGVyIHRoZSBkb21haW4gaGFzIGJlZW4gc2V0dXAgcmVjdXJzaXZlLiBJZiBub3QgYWxsb2NhdGUKKyAqIHRocm91Z2ggdGhlIHBhcmVudCBkb21haW4uCisgKi8KK2ludCBpcnFfZG9tYWluX2FsbG9jX2lycXNfcGFyZW50KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJIHVuc2lnbmVkIGludCBpcnFfYmFzZSwgdW5zaWduZWQgaW50IG5yX2lycXMsCisJCQkJIHZvaWQgKmFyZykKK3sKKwkvKiBpcnFfZG9tYWluX2FsbG9jX2lycXNfcmVjdXJzaXZlKCkgaGFzIGNhbGxlZCBwYXJlbnQncyBhbGxvYygpICovCisJaWYgKGlycV9kb21haW5faXNfYXV0b19yZWN1cnNpdmUoZG9tYWluKSkKKwkJcmV0dXJuIDA7CisKKwlkb21haW4gPSBkb21haW4tPnBhcmVudDsKKwlpZiAoZG9tYWluKQorCQlyZXR1cm4gaXJxX2RvbWFpbl9hbGxvY19pcnFzX3JlY3Vyc2l2ZShkb21haW4sIGlycV9iYXNlLAorCQkJCQkJICAgICAgIG5yX2lycXMsIGFyZyk7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKy8qKgorICogaXJxX2RvbWFpbl9mcmVlX2lycXNfcGFyZW50IC0gRnJlZSBpbnRlcnJ1cHRzIGZyb20gcGFyZW50IGRvbWFpbgorICogQGlycV9iYXNlOglCYXNlIElSUSBudW1iZXIKKyAqIEBucl9pcnFzOglOdW1iZXIgb2YgSVJRcyB0byBmcmVlCisgKgorICogQ2hlY2sgd2hldGhlciB0aGUgZG9tYWluIGhhcyBiZWVuIHNldHVwIHJlY3Vyc2l2ZS4gSWYgbm90IGZyZWUKKyAqIHRocm91Z2ggdGhlIHBhcmVudCBkb21haW4uCisgKi8KK3ZvaWQgaXJxX2RvbWFpbl9mcmVlX2lycXNfcGFyZW50KHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJIHVuc2lnbmVkIGludCBpcnFfYmFzZSwgdW5zaWduZWQgaW50IG5yX2lycXMpCit7CisJLyogaXJxX2RvbWFpbl9mcmVlX2lycXNfcmVjdXJzaXZlKCkgd2lsbCBjYWxsIHBhcmVudCdzIGZyZWUgKi8KKwlpZiAoIWlycV9kb21haW5faXNfYXV0b19yZWN1cnNpdmUoZG9tYWluKSAmJiBkb21haW4tPnBhcmVudCkKKwkJaXJxX2RvbWFpbl9mcmVlX2lycXNfcmVjdXJzaXZlKGRvbWFpbi0+cGFyZW50LCBpcnFfYmFzZSwKKwkJCQkJICAgICAgIG5yX2lycXMpOworfQorCisvKioKKyAqIGlycV9kb21haW5fYWN0aXZhdGVfaXJxIC0gQ2FsbCBkb21haW5fb3BzLT5hY3RpdmF0ZSByZWN1cnNpdmVseSB0byBhY3RpdmF0ZQorICoJCQkgICAgIGludGVycnVwdAorICogQGlycV9kYXRhOglvdXRlcm1vc3QgaXJxX2RhdGEgYXNzb2NpYXRlZCB3aXRoIGludGVycnVwdAorICoKKyAqIFRoaXMgaXMgdGhlIHNlY29uZCBzdGVwIHRvIGNhbGwgZG9tYWluX29wcy0+YWN0aXZhdGUgdG8gcHJvZ3JhbSBpbnRlcnJ1cHQKKyAqIGNvbnRyb2xsZXJzLCBzbyB0aGUgaW50ZXJydXB0IGNvdWxkIGFjdHVhbGx5IGdldCBkZWxpdmVyZWQuCisgKi8KK3ZvaWQgaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSkKK3sKKwlpZiAoaXJxX2RhdGEgJiYgaXJxX2RhdGEtPmRvbWFpbikgeworCQlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluID0gaXJxX2RhdGEtPmRvbWFpbjsKKworCQlpZiAoaXJxX2RhdGEtPnBhcmVudF9kYXRhKQorCQkJaXJxX2RvbWFpbl9hY3RpdmF0ZV9pcnEoaXJxX2RhdGEtPnBhcmVudF9kYXRhKTsKKwkJaWYgKGRvbWFpbi0+b3BzLT5hY3RpdmF0ZSkKKwkJCWRvbWFpbi0+b3BzLT5hY3RpdmF0ZShkb21haW4sIGlycV9kYXRhKTsKKwl9Cit9CisKKy8qKgorICogaXJxX2RvbWFpbl9kZWFjdGl2YXRlX2lycSAtIENhbGwgZG9tYWluX29wcy0+ZGVhY3RpdmF0ZSByZWN1cnNpdmVseSB0bworICoJCQkgICAgICAgZGVhY3RpdmF0ZSBpbnRlcnJ1cHQKKyAqIEBpcnFfZGF0YTogb3V0ZXJtb3N0IGlycV9kYXRhIGFzc29jaWF0ZWQgd2l0aCBpbnRlcnJ1cHQKKyAqCisgKiBJdCBjYWxscyBkb21haW5fb3BzLT5kZWFjdGl2YXRlIHRvIHByb2dyYW0gaW50ZXJydXB0IGNvbnRyb2xsZXJzIHRvIGRpc2FibGUKKyAqIGludGVycnVwdCBkZWxpdmVyeS4KKyAqLwordm9pZCBpcnFfZG9tYWluX2RlYWN0aXZhdGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpCit7CisJaWYgKGlycV9kYXRhICYmIGlycV9kYXRhLT5kb21haW4pIHsKKwkJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiA9IGlycV9kYXRhLT5kb21haW47CisKKwkJaWYgKGRvbWFpbi0+b3BzLT5kZWFjdGl2YXRlKQorCQkJZG9tYWluLT5vcHMtPmRlYWN0aXZhdGUoZG9tYWluLCBpcnFfZGF0YSk7CisJCWlmIChpcnFfZGF0YS0+cGFyZW50X2RhdGEpCisJCQlpcnFfZG9tYWluX2RlYWN0aXZhdGVfaXJxKGlycV9kYXRhLT5wYXJlbnRfZGF0YSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpcnFfZG9tYWluX2NoZWNrX2hpZXJhcmNoeShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluKQoreworCS8qIEhpZXJhcmNoeSBpcnFfZG9tYWlucyBtdXN0IGltcGxlbWVudCBjYWxsYmFjayBhbGxvYygpICovCisJaWYgKGRvbWFpbi0+b3BzLT5hbGxvYykKKwkJZG9tYWluLT5mbGFncyB8PSBJUlFfRE9NQUlOX0ZMQUdfSElFUkFSQ0hZOworfQorI2Vsc2UJLyogQ09ORklHX0lSUV9ET01BSU5fSElFUkFSQ0hZICovCisvKioKKyAqIGlycV9kb21haW5fZ2V0X2lycV9kYXRhIC0gR2V0IGlycV9kYXRhIGFzc29jaWF0ZWQgd2l0aCBAdmlycSBhbmQgQGRvbWFpbgorICogQGRvbWFpbjoJZG9tYWluIHRvIG1hdGNoCisgKiBAdmlycToJSVJRIG51bWJlciB0byBnZXQgaXJxX2RhdGEKKyAqLworc3RydWN0IGlycV9kYXRhICppcnFfZG9tYWluX2dldF9pcnFfZGF0YShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCQkgdW5zaWduZWQgaW50IHZpcnEpCit7CisJc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEodmlycSk7CisKKwlyZXR1cm4gKGlycV9kYXRhICYmIGlycV9kYXRhLT5kb21haW4gPT0gZG9tYWluKSA/IGlycV9kYXRhIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgaXJxX2RvbWFpbl9jaGVja19oaWVyYXJjaHkoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbikKK3sKK30KKyNlbmRpZgkvKiBDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFkgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDBhOTEwNGIuLjgwNjkyMzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMTgzLDYgKzE4Myw3IEBACiAJcmV0ID0gY2hpcC0+aXJxX3NldF9hZmZpbml0eShkYXRhLCBtYXNrLCBmb3JjZSk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIElSUV9TRVRfTUFTS19PSzoKKwljYXNlIElSUV9TRVRfTUFTS19PS19ET05FOgogCQljcHVtYXNrX2NvcHkoZGF0YS0+YWZmaW5pdHksIG1hc2spOwogCWNhc2UgSVJRX1NFVF9NQVNLX09LX05PQ09QWToKIAkJaXJxX3NldF90aHJlYWRfYWZmaW5pdHkoZGVzYyk7CkBAIC02MDAsNiArNjAxLDcgQEAKIAogCXN3aXRjaCAocmV0KSB7CiAJY2FzZSBJUlFfU0VUX01BU0tfT0s6CisJY2FzZSBJUlFfU0VUX01BU0tfT0tfRE9ORToKIAkJaXJxZF9jbGVhcigmZGVzYy0+aXJxX2RhdGEsIElSUURfVFJJR0dFUl9NQVNLKTsKIAkJaXJxZF9zZXQoJmRlc2MtPmlycV9kYXRhLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbXNpLmMgYi9rZXJuZWwvaXJxL21zaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTgxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvaXJxL21zaS5jCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogbGludXgva2VybmVsL2lycS9tc2kuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLgorICogQXV0aG9yOiBKaWFuZyBMaXUgPGppYW5nLmxpdUBsaW51eC5pbnRlbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBjb21tb24gY29kZSB0byBzdXBwb3J0IE1lc3NhZ2UgU2lnbmFsbGVkIEludGVycnVwdCBmb3IKKyAqIFBDSSBjb21wYXRpYmxlIGFuZCBub24gUENJIGNvbXBhdGlibGUgZGV2aWNlcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisjaW5jbHVkZSA8bGludXgvbXNpLmg+CisKKy8qIFRlbXBhcm9yeSBzb2x1dGlvbiBmb3IgYnVpbGRpbmcsIHdpbGwgYmUgcmVtb3ZlZCBsYXRlciAqLworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCit2b2lkIF9fZ2V0X2NhY2hlZF9tc2lfbXNnKHN0cnVjdCBtc2lfZGVzYyAqZW50cnksIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJKm1zZyA9IGVudHJ5LT5tc2c7Cit9CisKK3ZvaWQgZ2V0X2NhY2hlZF9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeSA9IGlycV9nZXRfbXNpX2Rlc2MoaXJxKTsKKworCV9fZ2V0X2NhY2hlZF9tc2lfbXNnKGVudHJ5LCBtc2cpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X2NhY2hlZF9tc2lfbXNnKTsKKworI2lmZGVmIENPTkZJR19HRU5FUklDX01TSV9JUlFfRE9NQUlOCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2NoaXBfd3JpdGVfbXNpX21zZyhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsCisJCQkJCSAgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlkYXRhLT5jaGlwLT5pcnFfd3JpdGVfbXNpX21zZyhkYXRhLCBtc2cpOworfQorCisvKioKKyAqIG1zaV9kb21haW5fc2V0X2FmZmluaXR5IC0gR2VuZXJpYyBhZmZpbml0eSBzZXR0ZXIgZnVuY3Rpb24gZm9yIE1TSSBkb21haW5zCisgKiBAaXJxX2RhdGE6CVRoZSBpcnEgZGF0YSBhc3NvY2lhdGVkIHRvIHRoZSBpbnRlcnJ1cHQKKyAqIEBtYXNrOglUaGUgYWZmaW5pdHkgbWFzayB0byBzZXQKKyAqIEBmb3JjZToJRmxhZyB0byBlbmZvcmNlIHNldHRpbmcgKGRpc2FibGUgb25saW5lIGNoZWNrcykKKyAqCisgKiBJbnRlbmRlZCB0byBiZSB1c2VkIGJ5IE1TSSBpbnRlcnJ1cHQgY29udHJvbGxlcnMgd2hpY2ggYXJlCisgKiBpbXBsZW1lbnRlZCB3aXRoIGhpZXJhcmNoaWNhbCBkb21haW5zLgorICovCitpbnQgbXNpX2RvbWFpbl9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgaXJxX2RhdGEgKnBhcmVudCA9IGlycV9kYXRhLT5wYXJlbnRfZGF0YTsKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisJaW50IHJldDsKKworCXJldCA9IHBhcmVudC0+Y2hpcC0+aXJxX3NldF9hZmZpbml0eShwYXJlbnQsIG1hc2ssIGZvcmNlKTsKKwlpZiAocmV0ID49IDAgJiYgcmV0ICE9IElSUV9TRVRfTUFTS19PS19ET05FKSB7CisJCUJVR19PTihpcnFfY2hpcF9jb21wb3NlX21zaV9tc2coaXJxX2RhdGEsICZtc2cpKTsKKwkJaXJxX2NoaXBfd3JpdGVfbXNpX21zZyhpcnFfZGF0YSwgJm1zZyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXNpX2RvbWFpbl9hY3RpdmF0ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCXN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpCit7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCisJQlVHX09OKGlycV9jaGlwX2NvbXBvc2VfbXNpX21zZyhpcnFfZGF0YSwgJm1zZykpOworCWlycV9jaGlwX3dyaXRlX21zaV9tc2coaXJxX2RhdGEsICZtc2cpOworfQorCitzdGF0aWMgdm9pZCBtc2lfZG9tYWluX2RlYWN0aXZhdGUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCQkgIHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEpCit7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwlpcnFfY2hpcF93cml0ZV9tc2lfbXNnKGlycV9kYXRhLCAmbXNnKTsKK30KKworc3RhdGljIGludCBtc2lfZG9tYWluX2FsbG9jKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCB2aXJxLAorCQkJICAgIHVuc2lnbmVkIGludCBucl9pcnFzLCB2b2lkICphcmcpCit7CisJc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbyA9IGRvbWFpbi0+aG9zdF9kYXRhOworCXN0cnVjdCBtc2lfZG9tYWluX29wcyAqb3BzID0gaW5mby0+b3BzOworCWlycV9od19udW1iZXJfdCBod2lycSA9IG9wcy0+Z2V0X2h3aXJxKGluZm8sIGFyZyk7CisJaW50IGksIHJldDsKKworCWlmIChpcnFfZmluZF9tYXBwaW5nKGRvbWFpbiwgaHdpcnEpID4gMCkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlyZXQgPSBpcnFfZG9tYWluX2FsbG9jX2lycXNfcGFyZW50KGRvbWFpbiwgdmlycSwgbnJfaXJxcywgYXJnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJcmV0ID0gb3BzLT5tc2lfaW5pdChkb21haW4sIGluZm8sIHZpcnEgKyBpLCBod2lycSArIGksIGFyZyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAob3BzLT5tc2lfZnJlZSkgeworCQkJCWZvciAoaS0tOyBpID4gMDsgaS0tKQorCQkJCQlvcHMtPm1zaV9mcmVlKGRvbWFpbiwgaW5mbywgdmlycSArIGkpOworCQkJfQorCQkJaXJxX2RvbWFpbl9mcmVlX2lycXNfdG9wKGRvbWFpbiwgdmlycSwgbnJfaXJxcyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1zaV9kb21haW5fZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvID0gZG9tYWluLT5ob3N0X2RhdGE7CisJaW50IGk7CisKKwlpZiAoaW5mby0+b3BzLT5tc2lfZnJlZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKQorCQkJaW5mby0+b3BzLT5tc2lfZnJlZShkb21haW4sIGluZm8sIHZpcnEgKyBpKTsKKwl9CisJaXJxX2RvbWFpbl9mcmVlX2lycXNfdG9wKGRvbWFpbiwgdmlycSwgbnJfaXJxcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgbXNpX2RvbWFpbl9vcHMgPSB7CisJLmFsbG9jCQk9IG1zaV9kb21haW5fYWxsb2MsCisJLmZyZWUJCT0gbXNpX2RvbWFpbl9mcmVlLAorCS5hY3RpdmF0ZQk9IG1zaV9kb21haW5fYWN0aXZhdGUsCisJLmRlYWN0aXZhdGUJPSBtc2lfZG9tYWluX2RlYWN0aXZhdGUsCit9OworCisjaWZkZWYgR0VORVJJQ19NU0lfRE9NQUlOX09QUworc3RhdGljIGlycV9od19udW1iZXJfdCBtc2lfZG9tYWluX29wc19nZXRfaHdpcnEoc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkJCW1zaV9hbGxvY19pbmZvX3QgKmFyZykKK3sKKwlyZXR1cm4gYXJnLT5od2lycTsKK30KKworc3RhdGljIGludCBtc2lfZG9tYWluX29wc19wcmVwYXJlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGludCBudmVjLCBtc2lfYWxsb2NfaW5mb190ICphcmcpCit7CisJbWVtc2V0KGFyZywgMCwgc2l6ZW9mKCphcmcpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXNpX2RvbWFpbl9vcHNfc2V0X2Rlc2MobXNpX2FsbG9jX2luZm9fdCAqYXJnLAorCQkJCSAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCit7CisJYXJnLT5kZXNjID0gZGVzYzsKK30KKyNlbHNlCisjZGVmaW5lIG1zaV9kb21haW5fb3BzX2dldF9od2lycQlOVUxMCisjZGVmaW5lIG1zaV9kb21haW5fb3BzX3ByZXBhcmUJCU5VTEwKKyNkZWZpbmUgbXNpX2RvbWFpbl9vcHNfc2V0X2Rlc2MJCU5VTEwKKyNlbmRpZiAvKiAhR0VORVJJQ19NU0lfRE9NQUlOX09QUyAqLworCitzdGF0aWMgaW50IG1zaV9kb21haW5fb3BzX2luaXQoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKKwkJCSAgICAgICBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2aXJxLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEsCisJCQkgICAgICAgbXNpX2FsbG9jX2luZm9fdCAqYXJnKQoreworCWlycV9kb21haW5fc2V0X2h3aXJxX2FuZF9jaGlwKGRvbWFpbiwgdmlycSwgaHdpcnEsIGluZm8tPmNoaXAsCisJCQkJICAgICAgaW5mby0+Y2hpcF9kYXRhKTsKKwlpZiAoaW5mby0+aGFuZGxlciAmJiBpbmZvLT5oYW5kbGVyX25hbWUpIHsKKwkJX19pcnFfc2V0X2hhbmRsZXIodmlycSwgaW5mby0+aGFuZGxlciwgMCwgaW5mby0+aGFuZGxlcl9uYW1lKTsKKwkJaWYgKGluZm8tPmhhbmRsZXJfZGF0YSkKKwkJCWlycV9zZXRfaGFuZGxlcl9kYXRhKHZpcnEsIGluZm8tPmhhbmRsZXJfZGF0YSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zaV9kb21haW5fb3BzX2NoZWNrKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgbXNpX2RvbWFpbl9vcHNfZGVmYXVsdCA9IHsKKwkuZ2V0X2h3aXJxCT0gbXNpX2RvbWFpbl9vcHNfZ2V0X2h3aXJxLAorCS5tc2lfaW5pdAk9IG1zaV9kb21haW5fb3BzX2luaXQsCisJLm1zaV9jaGVjawk9IG1zaV9kb21haW5fb3BzX2NoZWNrLAorCS5tc2lfcHJlcGFyZQk9IG1zaV9kb21haW5fb3BzX3ByZXBhcmUsCisJLnNldF9kZXNjCT0gbXNpX2RvbWFpbl9vcHNfc2V0X2Rlc2MsCit9OworCitzdGF0aWMgdm9pZCBtc2lfZG9tYWluX3VwZGF0ZV9kb21fb3BzKHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8pCit7CisJc3RydWN0IG1zaV9kb21haW5fb3BzICpvcHMgPSBpbmZvLT5vcHM7CisKKwlpZiAob3BzID09IE5VTEwpIHsKKwkJaW5mby0+b3BzID0gJm1zaV9kb21haW5fb3BzX2RlZmF1bHQ7CisJCXJldHVybjsKKwl9CisKKwlpZiAob3BzLT5nZXRfaHdpcnEgPT0gTlVMTCkKKwkJb3BzLT5nZXRfaHdpcnEgPSBtc2lfZG9tYWluX29wc19kZWZhdWx0LmdldF9od2lycTsKKwlpZiAob3BzLT5tc2lfaW5pdCA9PSBOVUxMKQorCQlvcHMtPm1zaV9pbml0ID0gbXNpX2RvbWFpbl9vcHNfZGVmYXVsdC5tc2lfaW5pdDsKKwlpZiAob3BzLT5tc2lfY2hlY2sgPT0gTlVMTCkKKwkJb3BzLT5tc2lfY2hlY2sgPSBtc2lfZG9tYWluX29wc19kZWZhdWx0Lm1zaV9jaGVjazsKKwlpZiAob3BzLT5tc2lfcHJlcGFyZSA9PSBOVUxMKQorCQlvcHMtPm1zaV9wcmVwYXJlID0gbXNpX2RvbWFpbl9vcHNfZGVmYXVsdC5tc2lfcHJlcGFyZTsKKwlpZiAob3BzLT5zZXRfZGVzYyA9PSBOVUxMKQorCQlvcHMtPnNldF9kZXNjID0gbXNpX2RvbWFpbl9vcHNfZGVmYXVsdC5zZXRfZGVzYzsKK30KKworc3RhdGljIHZvaWQgbXNpX2RvbWFpbl91cGRhdGVfY2hpcF9vcHMoc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpbmZvLT5jaGlwOworCisJQlVHX09OKCFjaGlwKTsKKwlpZiAoIWNoaXAtPmlycV9tYXNrKQorCQljaGlwLT5pcnFfbWFzayA9IHBjaV9tc2lfbWFza19pcnE7CisJaWYgKCFjaGlwLT5pcnFfdW5tYXNrKQorCQljaGlwLT5pcnFfdW5tYXNrID0gcGNpX21zaV91bm1hc2tfaXJxOworCWlmICghY2hpcC0+aXJxX3NldF9hZmZpbml0eSkKKwkJY2hpcC0+aXJxX3NldF9hZmZpbml0eSA9IG1zaV9kb21haW5fc2V0X2FmZmluaXR5OworfQorCisvKioKKyAqIG1zaV9jcmVhdGVfaXJxX2RvbWFpbiAtIENyZWF0ZSBhIE1TSSBpbnRlcnJ1cHQgZG9tYWluCisgKiBAb2Zfbm9kZToJT3B0aW9uYWwgZGV2aWNlLXRyZWUgbm9kZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIEBpbmZvOglNU0kgZG9tYWluIGluZm8KKyAqIEBwYXJlbnQ6CVBhcmVudCBpcnEgZG9tYWluCisgKi8KK3N0cnVjdCBpcnFfZG9tYWluICptc2lfY3JlYXRlX2lycV9kb21haW4oc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywKKwkJCQkJIHN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnQpCit7CisJaWYgKGluZm8tPmZsYWdzICYgTVNJX0ZMQUdfVVNFX0RFRl9ET01fT1BTKQorCQltc2lfZG9tYWluX3VwZGF0ZV9kb21fb3BzKGluZm8pOworCWlmIChpbmZvLT5mbGFncyAmIE1TSV9GTEFHX1VTRV9ERUZfQ0hJUF9PUFMpCisJCW1zaV9kb21haW5fdXBkYXRlX2NoaXBfb3BzKGluZm8pOworCisJcmV0dXJuIGlycV9kb21haW5fYWRkX2hpZXJhcmNoeShwYXJlbnQsIDAsIDAsIG5vZGUsICZtc2lfZG9tYWluX29wcywKKwkJCQkJaW5mbyk7Cit9CisKKy8qKgorICogbXNpX2RvbWFpbl9hbGxvY19pcnFzIC0gQWxsb2NhdGUgaW50ZXJydXB0cyBmcm9tIGEgTVNJIGludGVycnVwdCBkb21haW4KKyAqIEBkb21haW46CVRoZSBkb21haW4gdG8gYWxsb2NhdGUgZnJvbQorICogQGRldjoJUG9pbnRlciB0byBkZXZpY2Ugc3RydWN0IG9mIHRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBpbnRlcnJ1cHRzCisgKgkJYXJlIGFsbG9jYXRlZAorICogQG52ZWM6CVRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyB0byBhbGxvY2F0ZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUuCisgKi8KK2ludCBtc2lfZG9tYWluX2FsbG9jX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBpbnQgbnZlYykKK3sKKwlzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvID0gZG9tYWluLT5ob3N0X2RhdGE7CisJc3RydWN0IG1zaV9kb21haW5fb3BzICpvcHMgPSBpbmZvLT5vcHM7CisJbXNpX2FsbG9jX2luZm9fdCBhcmc7CisJc3RydWN0IG1zaV9kZXNjICpkZXNjOworCWludCBpLCByZXQsIHZpcnEgPSAtMTsKKworCXJldCA9IG9wcy0+bXNpX2NoZWNrKGRvbWFpbiwgaW5mbywgZGV2KTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IG9wcy0+bXNpX3ByZXBhcmUoZG9tYWluLCBkZXYsIG52ZWMsICZhcmcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3JfZWFjaF9tc2lfZW50cnkoZGVzYywgZGV2KSB7CisJCW9wcy0+c2V0X2Rlc2MoJmFyZywgZGVzYyk7CisJCWlmIChpbmZvLT5mbGFncyAmIE1TSV9GTEFHX0lERU5USVRZX01BUCkKKwkJCXZpcnEgPSAoaW50KW9wcy0+Z2V0X2h3aXJxKGluZm8sICZhcmcpOworCQllbHNlCisJCQl2aXJxID0gLTE7CisKKwkJdmlycSA9IF9faXJxX2RvbWFpbl9hbGxvY19pcnFzKGRvbWFpbiwgdmlycSwgZGVzYy0+bnZlY191c2VkLAorCQkJCQkgICAgICAgZGV2X3RvX25vZGUoZGV2KSwgJmFyZywgZmFsc2UpOworCQlpZiAodmlycSA8IDApIHsKKwkJCXJldCA9IC1FTk9TUEM7CisJCQlpZiAob3BzLT5oYW5kbGVfZXJyb3IpCisJCQkJcmV0ID0gb3BzLT5oYW5kbGVfZXJyb3IoZG9tYWluLCBkZXNjLCByZXQpOworCQkJaWYgKG9wcy0+bXNpX2ZpbmlzaCkKKwkJCQlvcHMtPm1zaV9maW5pc2goJmFyZywgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnZlY191c2VkOyBpKyspCisJCQlpcnFfc2V0X21zaV9kZXNjX29mZih2aXJxLCBpLCBkZXNjKTsKKwl9CisKKwlpZiAob3BzLT5tc2lfZmluaXNoKQorCQlvcHMtPm1zaV9maW5pc2goJmFyZywgMCk7CisKKwlmb3JfZWFjaF9tc2lfZW50cnkoZGVzYywgZGV2KSB7CisJCWlmIChkZXNjLT5udmVjX3VzZWQgPT0gMSkKKwkJCWRldl9kYmcoZGV2LCAiaXJxICVkIGZvciBNU0lcbiIsIHZpcnEpOworCQllbHNlCisJCQlkZXZfZGJnKGRldiwgImlycSBbJWQtJWRdIGZvciBNU0lcbiIsCisJCQkJdmlycSwgdmlycSArIGRlc2MtPm52ZWNfdXNlZCAtIDEpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1zaV9kb21haW5fZnJlZV9pcnFzIC0gRnJlZSBpbnRlcnJ1cHRzIGZyb20gYSBNU0kgaW50ZXJydXB0IEBkb21haW4gYXNzb2NpYXRlZCB0cCBAZGV2CisgKiBAZG9tYWluOglUaGUgZG9tYWluIHRvIG1hbmFnaW5nIHRoZSBpbnRlcnJ1cHRzCisgKiBAZGV2OglQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3Qgb2YgdGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIGludGVycnVwdHMKKyAqCQlhcmUgZnJlZQorICovCit2b2lkIG1zaV9kb21haW5fZnJlZV9pcnFzKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2M7CisKKwlmb3JfZWFjaF9tc2lfZW50cnkoZGVzYywgZGV2KSB7CisJCWlycV9kb21haW5fZnJlZV9pcnFzKGRlc2MtPmlycSwgZGVzYy0+bnZlY191c2VkKTsKKwkJZGVzYy0+aXJxID0gMDsKKwl9Cit9CisKKy8qKgorICogbXNpX2dldF9kb21haW5faW5mbyAtIEdldCB0aGUgTVNJIGludGVycnVwdCBkb21haW4gaW5mbyBmb3IgQGRvbWFpbgorICogQGRvbWFpbjoJVGhlIGludGVycnVwdCBkb21haW4gdG8gcmV0cmlldmUgZGF0YSBmcm9tCisgKgorICogUmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgbXNpX2RvbWFpbl9pbmZvIHN0b3JlZCBpbgorICogQGRvbWFpbi0+aG9zdF9kYXRhLgorICovCitzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICptc2lfZ2V0X2RvbWFpbl9pbmZvKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4pCit7CisJcmV0dXJuIChzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICopZG9tYWluLT5ob3N0X2RhdGE7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfR0VORVJJQ19NU0lfSVJRX0RPTUFJTiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2ttb2QuYyBiL2tlcm5lbC9rbW9kLmMKaW5kZXggODBmN2E2ZC4uMjc3N2Y0MCAxMDA2NDQKLS0tIGEva2VybmVsL2ttb2QuYworKysgYi9rZXJuZWwva21vZC5jCkBAIC00NywxMyArNDcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtoZWxwZXJfd3E7CiAKLS8qCi0gKiBrbW9kX3RocmVhZF9sb2NrZXIgaXMgdXNlZCBmb3IgZGVhZGxvY2sgYXZvaWRhbmNlLiAgVGhlcmUgaXMgbm8gZXhwbGljaXQKLSAqIGxvY2tpbmcgdG8gcHJvdGVjdCB0aGlzIGdsb2JhbCAtIGl0IGlzIHByaXZhdGUgdG8gdGhlIHNpbmdsZXRvbiBraGVscGVyCi0gKiB0aHJlYWQgYW5kIHNob3VsZCBvbmx5IGV2ZXIgYmUgbW9kaWZpZWQgYnkgdGhhdCB0aHJlYWQuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmttb2RfdGhyZWFkX2xvY2tlcjsKLQogI2RlZmluZSBDQVBfQlNFVAkodm9pZCAqKTEKICNkZWZpbmUgQ0FQX1BJCQkodm9pZCAqKTIKIApAQCAtMjIzLDcgKzIxNiw2IEBACiBzdGF0aWMgaW50IF9fX19jYWxsX3VzZXJtb2RlaGVscGVyKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHN1YnByb2Nlc3NfaW5mbyAqc3ViX2luZm8gPSBkYXRhOwotCWludCB3YWl0ID0gc3ViX2luZm8tPndhaXQgJiB+VU1IX0tJTExBQkxFOwogCXN0cnVjdCBjcmVkICpuZXc7CiAJaW50IHJldHZhbDsKIApAQCAtMjY3LDIwICsyNTksMTMgQEAKIG91dDoKIAlzdWJfaW5mby0+cmV0dmFsID0gcmV0dmFsOwogCS8qIHdhaXRfZm9yX2hlbHBlcigpIHdpbGwgY2FsbCB1bWhfY29tcGxldGUgaWYgVUhNX1dBSVRfUFJPQy4gKi8KLQlpZiAod2FpdCAhPSBVTUhfV0FJVF9QUk9DKQorCWlmICghKHN1Yl9pbmZvLT53YWl0ICYgVU1IX1dBSVRfUFJPQykpCiAJCXVtaF9jb21wbGV0ZShzdWJfaW5mbyk7CiAJaWYgKCFyZXR2YWwpCiAJCXJldHVybiAwOwogCWRvX2V4aXQoMCk7CiB9CiAKLXN0YXRpYyBpbnQgY2FsbF9oZWxwZXIodm9pZCAqZGF0YSkKLXsKLQkvKiBXb3JrZXIgdGhyZWFkIHN0YXJ0ZWQgYmxvY2tpbmcga2hlbHBlciB0aHJlYWQuICovCi0Ja21vZF90aHJlYWRfbG9ja2VyID0gY3VycmVudDsKLQlyZXR1cm4gX19fX2NhbGxfdXNlcm1vZGVoZWxwZXIoZGF0YSk7Ci19Ci0KIC8qIEtldmVudGQgY2FuJ3QgYmxvY2ssIGJ1dCB0aGlzIChhIGNoaWxkKSBjYW4uICovCiBzdGF0aWMgaW50IHdhaXRfZm9yX2hlbHBlcih2b2lkICpkYXRhKQogewpAQCAtMzIzLDIxICszMDgsMTQgQEAKIHsKIAlzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICpzdWJfaW5mbyA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvLCB3b3JrKTsKLQlpbnQgd2FpdCA9IHN1Yl9pbmZvLT53YWl0ICYgflVNSF9LSUxMQUJMRTsKIAlwaWRfdCBwaWQ7CiAKLQkvKiBDTE9ORV9WRk9SSzogd2FpdCB1bnRpbCB0aGUgdXNlcm1vZGUgaGVscGVyIGhhcyBleGVjdmUnZAotCSAqIHN1Y2Nlc3NmdWxseSBXZSBuZWVkIHRoZSBkYXRhIHN0cnVjdHVyZXMgdG8gc3RheSBhcm91bmQKLQkgKiB1bnRpbCB0aGF0IGlzIGRvbmUuICAqLwotCWlmICh3YWl0ID09IFVNSF9XQUlUX1BST0MpCisJaWYgKHN1Yl9pbmZvLT53YWl0ICYgVU1IX1dBSVRfUFJPQykKIAkJcGlkID0ga2VybmVsX3RocmVhZCh3YWl0X2Zvcl9oZWxwZXIsIHN1Yl9pbmZvLAogCQkJCSAgICBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwgU0lHQ0hMRCk7Ci0JZWxzZSB7Ci0JCXBpZCA9IGtlcm5lbF90aHJlYWQoY2FsbF9oZWxwZXIsIHN1Yl9pbmZvLAotCQkJCSAgICBDTE9ORV9WRk9SSyB8IFNJR0NITEQpOwotCQkvKiBXb3JrZXIgdGhyZWFkIHN0b3BwZWQgYmxvY2tpbmcga2hlbHBlciB0aHJlYWQuICovCi0JCWttb2RfdGhyZWFkX2xvY2tlciA9IE5VTEw7Ci0JfQorCWVsc2UKKwkJcGlkID0ga2VybmVsX3RocmVhZChfX19fY2FsbF91c2VybW9kZWhlbHBlciwgc3ViX2luZm8sCisJCQkJICAgIFNJR0NITEQpOwogCiAJaWYgKHBpZCA8IDApIHsKIAkJc3ViX2luZm8tPnJldHZhbCA9IHBpZDsKQEAgLTU3MSwxNyArNTQ5LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCS8qCi0JICogV29ya2VyIHRocmVhZCBtdXN0IG5vdCB3YWl0IGZvciBraGVscGVyIHRocmVhZCBhdCBiZWxvdwotCSAqIHdhaXRfZm9yX2NvbXBsZXRpb24oKSBpZiB0aGUgdGhyZWFkIHdhcyBjcmVhdGVkIHdpdGggQ0xPTkVfVkZPUksKLQkgKiBmbGFnLCBmb3Iga2hlbHBlciB0aHJlYWQgaXMgYWxyZWFkeSB3YWl0aW5nIGZvciB0aGUgdGhyZWFkIGF0Ci0JICogd2FpdF9mb3JfY29tcGxldGlvbigpIGluIGRvX2ZvcmsoKS4KLQkgKi8KLQlpZiAod2FpdCAhPSBVTUhfTk9fV0FJVCAmJiBjdXJyZW50ID09IGttb2RfdGhyZWFkX2xvY2tlcikgewotCQlyZXR2YWwgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCiAJICogU2V0IHRoZSBjb21wbGV0aW9uIHBvaW50ZXIgb25seSBpZiB0aGVyZSBpcyBhIHdhaXRlci4KIAkgKiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSB1bWhfY29tcGxldGUgdG8gZnJlZQogCSAqIHRoZSBkYXRhIHN0cnVjdHVyZSBpbiBjYXNlIG9mIFVNSF9OT19XQUlULgpkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMzk5NWY1NC4uODMxOTc4YyAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC05MTUsNyArOTE1LDcgQEAKICNpZmRlZiBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyBrcHJvYmVfZnRyYWNlX29wcyBfX3JlYWRfbW9zdGx5ID0gewogCS5mdW5jID0ga3Byb2JlX2Z0cmFjZV9oYW5kbGVyLAotCS5mbGFncyA9IEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTLAorCS5mbGFncyA9IEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTIHwgRlRSQUNFX09QU19GTF9JUE1PRElGWSwKIH07CiBzdGF0aWMgaW50IGtwcm9iZV9mdHJhY2VfZW5hYmxlZDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbXV0ZXguYyBiL2tlcm5lbC9sb2NraW5nL211dGV4LmMKaW5kZXggZGFkYmY4OC4uNDU0MTk1MSAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbXV0ZXguYworKysgYi9rZXJuZWwvbG9ja2luZy9tdXRleC5jCkBAIC0zNzgsOCArMzc4LDE0IEBACiAJICogcmVzY2hlZHVsZSBub3csIGJlZm9yZSB3ZSB0cnktbG9jayB0aGUgbXV0ZXguIFRoaXMgYXZvaWRzIGdldHRpbmcKIAkgKiBzY2hlZHVsZWQgb3V0IHJpZ2h0IGFmdGVyIHdlIG9idGFpbmVkIHRoZSBtdXRleC4KIAkgKi8KLQlpZiAobmVlZF9yZXNjaGVkKCkpCisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCS8qCisJCSAqIFdlIF9zaG91bGRfIGhhdmUgVEFTS19SVU5OSU5HIGhlcmUsIGJ1dCBqdXN0IGluIGNhc2UKKwkJICogd2UgZG8gbm90LCBtYWtlIGl0IHNvLCBvdGhlcndpc2Ugd2UgbWlnaHQgZ2V0IHN0dWNrLgorCQkgKi8KKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlzY2hlZHVsZV9wcmVlbXB0X2Rpc2FibGVkKCk7CisJfQogCiAJcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDg4Y2VjMWQuLmU1MmE4NzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTMwOTcsNiArMzA5NywzMiBAQAogfQogCiAvKgorICogQ2FuJ3QgdXNlIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgpIGJlY2F1c2Ugb3VyIGNvbmRpdGlvbgorICogJ2ZpbmlzaGVkX2xvYWRpbmcoKScgY29udGFpbnMgYSBibG9ja2luZyBwcmltaXRpdmUgaXRzZWxmIChtdXRleF9sb2NrKS4KKyAqLworc3RhdGljIGludCB3YWl0X2ZpbmlzaGVkX2xvYWRpbmcoc3RydWN0IG1vZHVsZSAqbW9kKQoreworCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CisJaW50IHJldCA9IDA7CisKKwlhZGRfd2FpdF9xdWV1ZSgmbW9kdWxlX3dxLCAmd2FpdCk7CisJZm9yICg7OykgeworCQlpZiAoZmluaXNoZWRfbG9hZGluZyhtb2QtPm5hbWUpKQorCQkJYnJlYWs7CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfQorCisJCXdhaXRfd29rZW4oJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCX0KKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbW9kdWxlX3dxLCAmd2FpdCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogV2UgdHJ5IHRvIHBsYWNlIGl0IGluIHRoZSBsaXN0IG5vdyB0byBtYWtlIHN1cmUgaXQncyB1bmlxdWUgYmVmb3JlCiAgKiB3ZSBkZWRpY2F0ZSB0b28gbWFueSByZXNvdXJjZXMuICBJbiBwYXJ0aWN1bGFyLCB0ZW1wb3JhcnkgcGVyY3B1CiAgKiBtZW1vcnkgZXhoYXVzdGlvbi4KQEAgLTMxMTYsOCArMzE0Miw4IEBACiAJCSAgICB8fCBvbGQtPnN0YXRlID09IE1PRFVMRV9TVEFURV9VTkZPUk1FRCkgewogCQkJLyogV2FpdCBpbiBjYXNlIGl0IGZhaWxzIHRvIGxvYWQuICovCiAJCQltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7Ci0JCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobW9kdWxlX3dxLAotCQkJCQkgICAgICAgZmluaXNoZWRfbG9hZGluZyhtb2QtPm5hbWUpKTsKKworCQkJZXJyID0gd2FpdF9maW5pc2hlZF9sb2FkaW5nKG1vZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0X3VubG9ja2VkOwogCQkJZ290byBhZ2FpbjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYW5pYy5jIGIva2VybmVsL3BhbmljLmMKaW5kZXggY2Y4MDY3Mi4uNGQ4ZDZmOSAxMDA2NDQKLS0tIGEva2VybmVsL3BhbmljLmMKKysrIGIva2VybmVsL3BhbmljLmMKQEAgLTMzLDYgKzMzLDcgQEAKIHN0YXRpYyBpbnQgcGF1c2Vfb25fb29wc19mbGFnOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwYXVzZV9vbl9vb3BzX2xvY2spOwogc3RhdGljIGJvb2wgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnM7CitpbnQgcGFuaWNfb25fd2FybiBfX3JlYWRfbW9zdGx5OwogCiBpbnQgcGFuaWNfdGltZW91dCA9IENPTkZJR19QQU5JQ19USU1FT1VUOwogRVhQT1JUX1NZTUJPTF9HUEwocGFuaWNfdGltZW91dCk7CkBAIC00MjgsNiArNDI5LDE3IEBACiAJaWYgKGFyZ3MpCiAJCXZwcmludGsoYXJncy0+Zm10LCBhcmdzLT5hcmdzKTsKIAorCWlmIChwYW5pY19vbl93YXJuKSB7CisJCS8qCisJCSAqIFRoaXMgdGhyZWFkIG1heSBoaXQgYW5vdGhlciBXQVJOKCkgaW4gdGhlIHBhbmljIHBhdGguCisJCSAqIFJlc2V0dGluZyB0aGlzIHByZXZlbnRzIGFkZGl0aW9uYWwgV0FSTigpIGZyb20gcGFuaWNraW5nIHRoZQorCQkgKiBzeXN0ZW0gb24gdGhpcyB0aHJlYWQuICBPdGhlciB0aHJlYWRzIGFyZSBibG9ja2VkIGJ5IHRoZQorCQkgKiBwYW5pY19tdXRleCBpbiBwYW5pYygpLgorCQkgKi8KKwkJcGFuaWNfb25fd2FybiA9IDA7CisJCXBhbmljKCJwYW5pY19vbl93YXJuIHNldCAuLi5cbiIpOworCX0KKwogCXByaW50X21vZHVsZXMoKTsKIAlkdW1wX3N0YWNrKCk7CiAJcHJpbnRfb29wc19lbmRfbWFya2VyKCk7CkBAIC00ODUsNiArNDk3LDcgQEAKIAogY29yZV9wYXJhbShwYW5pYywgcGFuaWNfdGltZW91dCwgaW50LCAwNjQ0KTsKIGNvcmVfcGFyYW0ocGF1c2Vfb25fb29wcywgcGF1c2Vfb25fb29wcywgaW50LCAwNjQ0KTsKK2NvcmVfcGFyYW0ocGFuaWNfb25fd2FybiwgcGFuaWNfb25fd2FybiwgaW50LCAwNjQ0KTsKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMoY2hhciAqcykKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCA5YjlhMjY2Li44MjQzMGM4IDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC0zNDEsNiArMzQxLDggQEAKIAogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnEoJnBpZG1hcF9sb2NrKTsKKwlwdXRfcGlkX25zKG5zKTsKKwogb3V0X2ZyZWU6CiAJd2hpbGUgKCsraSA8PSBucy0+bGV2ZWwpCiAJCWZyZWVfcGlkbWFwKHBpZC0+bnVtYmVycyArIGkpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BpZF9uYW1lc3BhY2UuYyBiL2tlcm5lbC9waWRfbmFtZXNwYWNlLmMKaW5kZXggZGI5NWQ4ZS4uYmM2ZDZhOCAxMDA2NDQKLS0tIGEva2VybmVsL3BpZF9uYW1lc3BhY2UuYworKysgYi9rZXJuZWwvcGlkX25hbWVzcGFjZS5jCkBAIC0xOTAsNyArMTkwLDExIEBACiAJLyogRG9uJ3QgYWxsb3cgYW55IG1vcmUgcHJvY2Vzc2VzIGludG8gdGhlIHBpZCBuYW1lc3BhY2UgKi8KIAlkaXNhYmxlX3BpZF9hbGxvY2F0aW9uKHBpZF9ucyk7CiAKLQkvKiBJZ25vcmUgU0lHQ0hMRCBjYXVzaW5nIGFueSB0ZXJtaW5hdGVkIGNoaWxkcmVuIHRvIGF1dG9yZWFwICovCisJLyoKKwkgKiBJZ25vcmUgU0lHQ0hMRCBjYXVzaW5nIGFueSB0ZXJtaW5hdGVkIGNoaWxkcmVuIHRvIGF1dG9yZWFwLgorCSAqIFRoaXMgc3BlZWRzIHVwIHRoZSBuYW1lc3BhY2Ugc2h1dGRvd24sIHBsdXMgc2VlIHRoZSBjb21tZW50CisJICogYmVsb3cuCisJICovCiAJc3Bpbl9sb2NrX2lycSgmbWUtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCW1lLT5zaWdoYW5kLT5hY3Rpb25bU0lHQ0hMRCAtIDFdLnNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOOwogCXNwaW5fdW5sb2NrX2lycSgmbWUtPnNpZ2hhbmQtPnNpZ2xvY2spOwpAQCAtMjIzLDE1ICsyMjcsMzEgQEAKIAl9CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCi0JLyogRmlyc3RseSByZWFwIHRoZSBFWElUX1pPTUJJRSBjaGlsZHJlbiB3ZSBtYXkgaGF2ZS4gKi8KKwkvKgorCSAqIFJlYXAgdGhlIEVYSVRfWk9NQklFIGNoaWxkcmVuIHdlIGhhZCBiZWZvcmUgd2UgaWdub3JlZCBTSUdDSExELgorCSAqIHN5c193YWl0NCgpIHdpbGwgYWxzbyBibG9jayB1bnRpbCBvdXIgY2hpbGRyZW4gdHJhY2VkIGZyb20gdGhlCisJICogcGFyZW50IG5hbWVzcGFjZSBhcmUgZGV0YWNoZWQgYW5kIGJlY29tZSBFWElUX0RFQUQuCisJICovCiAJZG8gewogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CiAJCXJjID0gc3lzX3dhaXQ0KC0xLCBOVUxMLCBfX1dBTEwsIE5VTEwpOwogCX0gd2hpbGUgKHJjICE9IC1FQ0hJTEQpOwogCiAJLyoKLQkgKiBzeXNfd2FpdDQoKSBhYm92ZSBjYW4ndCByZWFwIHRoZSBUQVNLX0RFQUQgY2hpbGRyZW4uCi0JICogTWFrZSBzdXJlIHRoZXkgYWxsIGdvIGF3YXksIHNlZSBmcmVlX3BpZCgpLgorCSAqIHN5c193YWl0NCgpIGFib3ZlIGNhbid0IHJlYXAgdGhlIEVYSVRfREVBRCBjaGlsZHJlbiBidXQgd2UgZG8gbm90CisJICogcmVhbGx5IGNhcmUsIHdlIGNvdWxkIHJlcGFyZW50IHRoZW0gdG8gdGhlIGdsb2JhbCBpbml0LiBXZSBjb3VsZAorCSAqIGV4aXQgYW5kIHJlYXAgLT5jaGlsZF9yZWFwZXIgZXZlbiBpZiBpdCBpcyBub3QgdGhlIGxhc3QgdGhyZWFkIGluCisJICogdGhpcyBwaWRfbnMsIGZyZWVfcGlkKG5yX2hhc2hlZCA9PSAwKSBjYWxscyBwcm9jX2NsZWFudXBfd29yaygpLAorCSAqIHBpZF9ucyBjYW4gbm90IGdvIGF3YXkgdW50aWwgcHJvY19raWxsX3NiKCkgZHJvcHMgdGhlIHJlZmVyZW5jZS4KKwkgKgorCSAqIEJ1dCB0aGlzIG5zIGNhbiBhbHNvIGhhdmUgb3RoZXIgdGFza3MgaW5qZWN0ZWQgYnkgc2V0bnMoKStmb3JrKCkuCisJICogQWdhaW4sIGlnbm9yaW5nIHRoZSB1c2VyIHZpc2libGUgc2VtYW50aWNzIHdlIGRvIG5vdCByZWFsbHkgbmVlZAorCSAqIHRvIHdhaXQgdW50aWwgdGhleSBhcmUgYWxsIHJlYXBlZCwgYnV0IHRoZXkgY2FuIGJlIHJlcGFyZW50ZWQgdG8KKwkgKiB1cyBhbmQgdGh1cyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHBpZC0+Y2hpbGRfcmVhcGVyIHN0YXlzIHZhbGlkCisJICogdW50aWwgdGhleSBhbGwgZ28gYXdheS4gU2VlIGZyZWVfcGlkKCktPndha2VfdXBfcHJvY2VzcygpLgorCSAqCisJICogV2UgcmVseSBvbiBpZ25vcmVkIFNJR0NITEQsIGFuIGluamVjdGVkIHpvbWJpZSBtdXN0IGJlIGF1dG9yZWFwZWQKKwkgKiBpZiByZXBhcmVudGVkLgogCSAqLwogCWZvciAoOzspIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL0tjb25maWcgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwppbmRleCBiYmVmNTdmLi42ZTc3MDhjIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvS2NvbmZpZworKysgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwpAQCAtOTQsNiArOTQsNyBAQAogY29uZmlnIFBNX1NMRUVQCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gU1VTUEVORCB8fCBISUJFUk5BVEVfQ0FMTEJBQ0tTCisJc2VsZWN0IFBNX1JVTlRJTUUKIAogY29uZmlnIFBNX1NMRUVQX1NNUAogCWRlZl9ib29sIHkKQEAgLTEzMSw3ICsxMzIsNiBAQAogCiBjb25maWcgUE1fUlVOVElNRQogCWJvb2wgIlJ1bi10aW1lIFBNIGNvcmUgZnVuY3Rpb25hbGl0eSIKLQlkZXBlbmRzIG9uICFJQTY0X0hQX1NJTQogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBmdW5jdGlvbmFsaXR5IGFsbG93aW5nIEkvTyBkZXZpY2VzIHRvIGJlIHB1dCBpbnRvIGVuZXJneS1zYXZpbmcKIAkgIChsb3cgcG93ZXIpIHN0YXRlcyBhdCBydW4gdGltZSAob3IgYXV0b3N1c3BlbmRlZCkgYWZ0ZXIgYSBzcGVjaWZpZWQKQEAgLTI5OCwxNCArMjk4LDkgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBQTV9TTEVFUCAmJiBQTV9HRU5FUklDX0RPTUFJTlMKIAotY29uZmlnIFBNX0dFTkVSSUNfRE9NQUlOU19SVU5USU1FCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gUE1fUlVOVElNRSAmJiBQTV9HRU5FUklDX0RPTUFJTlMKLQogY29uZmlnIFBNX0dFTkVSSUNfRE9NQUlOU19PRgogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFBNX0dFTkVSSUNfRE9NQUlOUyAmJiBPRgogCiBjb25maWcgQ1BVX1BNCiAJYm9vbAotCWRlcGVuZHMgb24gU1VTUEVORCB8fCBDUFVfSURMRQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCmluZGV4IDFmMzVhMzQuLjIzMjlkYWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYworKysgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgogCiAjaW5jbHVkZSAicG93ZXIuaCIKQEAgLTIzMiwyMCArMjMzLDE3IEBACiAgKiBAbnJfcGFnZXM6IE51bWJlciBvZiBtZW1vcnkgcGFnZXMgcHJvY2Vzc2VkIGJldHdlZW4gQHN0YXJ0IGFuZCBAc3RvcC4KICAqIEBtc2c6IEFkZGl0aW9uYWwgZGlhZ25vc3RpYyBtZXNzYWdlIHRvIHByaW50LgogICovCi12b2lkIHN3c3VzcF9zaG93X3NwZWVkKHN0cnVjdCB0aW1ldmFsICpzdGFydCwgc3RydWN0IHRpbWV2YWwgKnN0b3AsCi0JCQl1bnNpZ25lZCBucl9wYWdlcywgY2hhciAqbXNnKQordm9pZCBzd3N1c3Bfc2hvd19zcGVlZChrdGltZV90IHN0YXJ0LCBrdGltZV90IHN0b3AsCisJCSAgICAgIHVuc2lnbmVkIG5yX3BhZ2VzLCBjaGFyICptc2cpCiB7CisJa3RpbWVfdCBkaWZmOwogCXU2NCBlbGFwc2VkX2NlbnRpc2VjczY0OwogCXVuc2lnbmVkIGludCBjZW50aXNlY3M7CiAJdW5zaWduZWQgaW50IGs7CiAJdW5zaWduZWQgaW50IGtwczsKIAotCWVsYXBzZWRfY2VudGlzZWNzNjQgPSB0aW1ldmFsX3RvX25zKHN0b3ApIC0gdGltZXZhbF90b19ucyhzdGFydCk7Ci0JLyoKLQkgKiBJZiAiKHM2NCllbGFwc2VkX2NlbnRpc2VjczY0IDwgMCIsIGl0IHdpbGwgcHJpbnQgbG9uZyBlbGFwc2VkIHRpbWUsCi0JICogaXQgaXMgb2J2aW91cyBlbm91Z2ggZm9yIHdoYXQgd2VudCB3cm9uZy4KLQkgKi8KLQlkb19kaXYoZWxhcHNlZF9jZW50aXNlY3M2NCwgTlNFQ19QRVJfU0VDIC8gMTAwKTsKKwlkaWZmID0ga3RpbWVfc3ViKHN0b3AsIHN0YXJ0KTsKKwllbGFwc2VkX2NlbnRpc2VjczY0ID0ga3RpbWVfZGl2bnMoZGlmZiwgMTAqTlNFQ19QRVJfTVNFQyk7CiAJY2VudGlzZWNzID0gZWxhcHNlZF9jZW50aXNlY3M2NDsKIAlpZiAoY2VudGlzZWNzID09IDApCiAJCWNlbnRpc2VjcyA9IDE7CS8qIGF2b2lkIGRpdi1ieS16ZXJvICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcG93ZXIuaCBiL2tlcm5lbC9wb3dlci9wb3dlci5oCmluZGV4IDJkZjg4M2EuLmNlOWI4MzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wb3dlci5oCisrKyBiL2tlcm5lbC9wb3dlci9wb3dlci5oCkBAIC0xNzQsOCArMTc0LDcgQEAKIAogc3RydWN0IHRpbWV2YWw7CiAvKiBrZXJuZWwvcG93ZXIvc3dzdXNwLmMgKi8KLWV4dGVybiB2b2lkIHN3c3VzcF9zaG93X3NwZWVkKHN0cnVjdCB0aW1ldmFsICosIHN0cnVjdCB0aW1ldmFsICosCi0JCQkJdW5zaWduZWQgaW50LCBjaGFyICopOworZXh0ZXJuIHZvaWQgc3dzdXNwX3Nob3dfc3BlZWQoa3RpbWVfdCwga3RpbWVfdCwgdW5zaWduZWQgaW50LCBjaGFyICopOwogCiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKIC8qIGtlcm5lbC9wb3dlci9zdXNwZW5kLmMgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKaW5kZXggNzkxYTYxOC4uMGM0MGMxNiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKKysrIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0xNTc2LDExICsxNTc3LDExIEBACiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJdW5zaWduZWQgbG9uZyBzYXZlYWJsZSwgc2l6ZSwgbWF4X3NpemUsIGNvdW50LCBoaWdobWVtLCBwYWdlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBhbGxvYywgc2F2ZV9oaWdobWVtLCBwYWdlc19oaWdobWVtLCBhdmFpbF9ub3JtYWw7Ci0Jc3RydWN0IHRpbWV2YWwgc3RhcnQsIHN0b3A7CisJa3RpbWVfdCBzdGFydCwgc3RvcDsKIAlpbnQgZXJyb3I7CiAKIAlwcmludGsoS0VSTl9JTkZPICJQTTogUHJlYWxsb2NhdGluZyBpbWFnZSBtZW1vcnkuLi4gIik7Ci0JZG9fZ2V0dGltZW9mZGF5KCZzdGFydCk7CisJc3RhcnQgPSBrdGltZV9nZXQoKTsKIAogCWVycm9yID0gbWVtb3J5X2JtX2NyZWF0ZSgmb3JpZ19ibSwgR0ZQX0lNQUdFLCBQR19BTlkpOwogCWlmIChlcnJvcikKQEAgLTE3MDksOSArMTcxMCw5IEBACiAJZnJlZV91bm5lY2Vzc2FyeV9wYWdlcygpOwogCiAgb3V0OgotCWRvX2dldHRpbWVvZmRheSgmc3RvcCk7CisJc3RvcCA9IGt0aW1lX2dldCgpOwogCXByaW50ayhLRVJOX0NPTlQgImRvbmUgKGFsbG9jYXRlZCAlbHUgcGFnZXMpXG4iLCBwYWdlcyk7Ci0Jc3dzdXNwX3Nob3dfc3BlZWQoJnN0YXJ0LCAmc3RvcCwgcGFnZXMsICJBbGxvY2F0ZWQiKTsKKwlzd3N1c3Bfc2hvd19zcGVlZChzdGFydCwgc3RvcCwgcGFnZXMsICJBbGxvY2F0ZWQiKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dhcC5jIGIva2VybmVsL3Bvd2VyL3N3YXAuYwppbmRleCBhYWEzMjYxLi41NzBhZmY4IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3dhcC5jCisrKyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogCiAjaW5jbHVkZSAicG93ZXIuaCIKIApAQCAtNDQ1LDggKzQ0Niw4IEBACiAJaW50IG5yX3BhZ2VzOwogCWludCBlcnIyOwogCXN0cnVjdCBiaW8gKmJpbzsKLQlzdHJ1Y3QgdGltZXZhbCBzdGFydDsKLQlzdHJ1Y3QgdGltZXZhbCBzdG9wOworCWt0aW1lX3Qgc3RhcnQ7CisJa3RpbWVfdCBzdG9wOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUE06IFNhdmluZyBpbWFnZSBkYXRhIHBhZ2VzICgldSBwYWdlcykuLi5cbiIsCiAJCW5yX3RvX3dyaXRlKTsKQEAgLTQ1NSw3ICs0NTYsNyBAQAogCQltID0gMTsKIAlucl9wYWdlcyA9IDA7CiAJYmlvID0gTlVMTDsKLQlkb19nZXR0aW1lb2ZkYXkoJnN0YXJ0KTsKKwlzdGFydCA9IGt0aW1lX2dldCgpOwogCXdoaWxlICgxKSB7CiAJCXJldCA9IHNuYXBzaG90X3JlYWRfbmV4dChzbmFwc2hvdCk7CiAJCWlmIChyZXQgPD0gMCkKQEAgLTQ2OSwxMiArNDcwLDEyIEBACiAJCW5yX3BhZ2VzKys7CiAJfQogCWVycjIgPSBoaWJfd2FpdF9vbl9iaW9fY2hhaW4oJmJpbyk7Ci0JZG9fZ2V0dGltZW9mZGF5KCZzdG9wKTsKKwlzdG9wID0ga3RpbWVfZ2V0KCk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IGVycjI7CiAJaWYgKCFyZXQpCiAJCXByaW50ayhLRVJOX0lORk8gIlBNOiBJbWFnZSBzYXZpbmcgZG9uZS5cbiIpOwotCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIG5yX3RvX3dyaXRlLCAiV3JvdGUiKTsKKwlzd3N1c3Bfc2hvd19zcGVlZChzdGFydCwgc3RvcCwgbnJfdG9fd3JpdGUsICJXcm90ZSIpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU4MCw4ICs1ODEsOCBAQAogCWludCBucl9wYWdlczsKIAlpbnQgZXJyMjsKIAlzdHJ1Y3QgYmlvICpiaW87Ci0Jc3RydWN0IHRpbWV2YWwgc3RhcnQ7Ci0Jc3RydWN0IHRpbWV2YWwgc3RvcDsKKwlrdGltZV90IHN0YXJ0OworCWt0aW1lX3Qgc3RvcDsKIAlzaXplX3Qgb2ZmOwogCXVuc2lnbmVkIHRociwgcnVuX3RocmVhZHMsIG5yX3RocmVhZHM7CiAJdW5zaWduZWQgY2hhciAqcGFnZSA9IE5VTEw7CkBAIC02NzQsNyArNjc1LDcgQEAKIAkJbSA9IDE7CiAJbnJfcGFnZXMgPSAwOwogCWJpbyA9IE5VTEw7Ci0JZG9fZ2V0dGltZW9mZGF5KCZzdGFydCk7CisJc3RhcnQgPSBrdGltZV9nZXQoKTsKIAlmb3IgKDs7KSB7CiAJCWZvciAodGhyID0gMDsgdGhyIDwgbnJfdGhyZWFkczsgdGhyKyspIHsKIAkJCWZvciAob2ZmID0gMDsgb2ZmIDwgTFpPX1VOQ19TSVpFOyBvZmYgKz0gUEFHRV9TSVpFKSB7CkBAIC03NTksMTIgKzc2MCwxMiBAQAogCiBvdXRfZmluaXNoOgogCWVycjIgPSBoaWJfd2FpdF9vbl9iaW9fY2hhaW4oJmJpbyk7Ci0JZG9fZ2V0dGltZW9mZGF5KCZzdG9wKTsKKwlzdG9wID0ga3RpbWVfZ2V0KCk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IGVycjI7CiAJaWYgKCFyZXQpCiAJCXByaW50ayhLRVJOX0lORk8gIlBNOiBJbWFnZSBzYXZpbmcgZG9uZS5cbiIpOwotCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIG5yX3RvX3dyaXRlLCAiV3JvdGUiKTsKKwlzd3N1c3Bfc2hvd19zcGVlZChzdGFydCwgc3RvcCwgbnJfdG9fd3JpdGUsICJXcm90ZSIpOwogb3V0X2NsZWFuOgogCWlmIChjcmMpIHsKIAkJaWYgKGNyYy0+dGhyKQpAQCAtOTY1LDggKzk2Niw4IEBACiB7CiAJdW5zaWduZWQgaW50IG07CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IHRpbWV2YWwgc3RhcnQ7Ci0Jc3RydWN0IHRpbWV2YWwgc3RvcDsKKwlrdGltZV90IHN0YXJ0OworCWt0aW1lX3Qgc3RvcDsKIAlzdHJ1Y3QgYmlvICpiaW87CiAJaW50IGVycjI7CiAJdW5zaWduZWQgbnJfcGFnZXM7CkBAIC05NzgsNyArOTc5LDcgQEAKIAkJbSA9IDE7CiAJbnJfcGFnZXMgPSAwOwogCWJpbyA9IE5VTEw7Ci0JZG9fZ2V0dGltZW9mZGF5KCZzdGFydCk7CisJc3RhcnQgPSBrdGltZV9nZXQoKTsKIAlmb3IgKCA7IDsgKSB7CiAJCXJldCA9IHNuYXBzaG90X3dyaXRlX25leHQoc25hcHNob3QpOwogCQlpZiAocmV0IDw9IDApCkBAIC05OTYsNyArOTk3LDcgQEAKIAkJbnJfcGFnZXMrKzsKIAl9CiAJZXJyMiA9IGhpYl93YWl0X29uX2Jpb19jaGFpbigmYmlvKTsKLQlkb19nZXR0aW1lb2ZkYXkoJnN0b3ApOworCXN0b3AgPSBrdGltZV9nZXQoKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gZXJyMjsKIAlpZiAoIXJldCkgewpAQCAtMTAwNSw3ICsxMDA2LDcgQEAKIAkJaWYgKCFzbmFwc2hvdF9pbWFnZV9sb2FkZWQoc25hcHNob3QpKQogCQkJcmV0ID0gLUVOT0RBVEE7CiAJfQotCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIG5yX3RvX3JlYWQsICJSZWFkIik7CisJc3dzdXNwX3Nob3dfc3BlZWQoc3RhcnQsIHN0b3AsIG5yX3RvX3JlYWQsICJSZWFkIik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA2Nyw4ICsxMDY4LDggQEAKIAlpbnQgcmV0ID0gMDsKIAlpbnQgZW9mID0gMDsKIAlzdHJ1Y3QgYmlvICpiaW87Ci0Jc3RydWN0IHRpbWV2YWwgc3RhcnQ7Ci0Jc3RydWN0IHRpbWV2YWwgc3RvcDsKKwlrdGltZV90IHN0YXJ0OworCWt0aW1lX3Qgc3RvcDsKIAl1bnNpZ25lZCBucl9wYWdlczsKIAlzaXplX3Qgb2ZmOwogCXVuc2lnbmVkIGksIHRociwgcnVuX3RocmVhZHMsIG5yX3RocmVhZHM7CkBAIC0xMTkwLDcgKzExOTEsNyBAQAogCQltID0gMTsKIAlucl9wYWdlcyA9IDA7CiAJYmlvID0gTlVMTDsKLQlkb19nZXR0aW1lb2ZkYXkoJnN0YXJ0KTsKKwlzdGFydCA9IGt0aW1lX2dldCgpOwogCiAJcmV0ID0gc25hcHNob3Rfd3JpdGVfbmV4dChzbmFwc2hvdCk7CiAJaWYgKHJldCA8PSAwKQpAQCAtMTM0Myw3ICsxMzQ0LDcgQEAKIAkJd2FpdF9ldmVudChjcmMtPmRvbmUsIGF0b21pY19yZWFkKCZjcmMtPnN0b3ApKTsKIAkJYXRvbWljX3NldCgmY3JjLT5zdG9wLCAwKTsKIAl9Ci0JZG9fZ2V0dGltZW9mZGF5KCZzdG9wKTsKKwlzdG9wID0ga3RpbWVfZ2V0KCk7CiAJaWYgKCFyZXQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUE06IEltYWdlIGxvYWRpbmcgZG9uZS5cbiIpOwogCQlzbmFwc2hvdF93cml0ZV9maW5hbGl6ZShzbmFwc2hvdCk7CkBAIC0xMzU5LDcgKzEzNjAsNyBAQAogCQkJfQogCQl9CiAJfQotCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIG5yX3RvX3JlYWQsICJSZWFkIik7CisJc3dzdXNwX3Nob3dfc3BlZWQoc3RhcnQsIHN0b3AsIG5yX3RvX3JlYWQsICJSZWFkIik7CiBvdXRfY2xlYW46CiAJZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKQogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZVtpXSk7CkBAIC0xMzc0LDcgKzEzNzUsNyBAQAogCQkJCWt0aHJlYWRfc3RvcChkYXRhW3Rocl0udGhyKTsKIAkJdmZyZWUoZGF0YSk7CiAJfQotCWlmIChwYWdlKSB2ZnJlZShwYWdlKTsKKwl2ZnJlZShwYWdlKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay9wcmludGsuYwppbmRleCBjZWQyYjg0Li5mOTAwZGM5IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsvcHJpbnRrLmMKQEAgLTYyLDkgKzYyLDYgQEAKIAlDT05TT0xFX0xPR0xFVkVMX0RFRkFVTFQsCS8qIGRlZmF1bHRfY29uc29sZV9sb2dsZXZlbCAqLwogfTsKIAotLyogRGVmZXJyZWQgbWVzc2FnZWQgZnJvbSBzY2hlZCBjb2RlIGFyZSBtYXJrZWQgYnkgdGhpcyBzcGVjaWFsIGxldmVsICovCi0jZGVmaW5lIFNDSEVEX01FU1NBR0VfTE9HTEVWRUwgLTIKLQogLyoKICAqIExvdyBsZXZlbCBkcml2ZXJzIG1heSBuZWVkIHRoYXQgdG8ga25vdyBpZiB0aGV5IGNhbiBzY2hlZHVsZSBpbgogICogdGhlaXIgdW5ibGFuaygpIGNhbGxiYWNrIG9yIG5vdC4gU28gbGV0J3MgZXhwb3J0IGl0LgpAQCAtNDgwLDcgKzQ3Nyw3IEBACiAJICAgICAgIHR5cGUgIT0gU1lTTE9HX0FDVElPTl9TSVpFX0JVRkZFUjsKIH0KIAotc3RhdGljIGludCBjaGVja19zeXNsb2dfcGVybWlzc2lvbnMoaW50IHR5cGUsIGJvb2wgZnJvbV9maWxlKQoraW50IGNoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyhpbnQgdHlwZSwgYm9vbCBmcm9tX2ZpbGUpCiB7CiAJLyoKIAkgKiBJZiB0aGlzIGlzIGZyb20gL3Byb2Mva21zZyBhbmQgd2UndmUgYWxyZWFkeSBvcGVuZWQgaXQsIHRoZW4gd2UndmUKQEAgLTEyNTksNyArMTI1Niw3IEBACiBpbnQgZG9fc3lzbG9nKGludCB0eXBlLCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgbGVuLCBib29sIGZyb21fZmlsZSkKIHsKIAlib29sIGNsZWFyID0gZmFsc2U7Ci0Jc3RhdGljIGludCBzYXZlZF9jb25zb2xlX2xvZ2xldmVsID0gLTE7CisJc3RhdGljIGludCBzYXZlZF9jb25zb2xlX2xvZ2xldmVsID0gTE9HTEVWRUxfREVGQVVMVDsKIAlpbnQgZXJyb3I7CiAKIAllcnJvciA9IGNoZWNrX3N5c2xvZ19wZXJtaXNzaW9ucyh0eXBlLCBmcm9tX2ZpbGUpOwpAQCAtMTMxNiwxNSArMTMxMywxNSBAQAogCQlicmVhazsKIAkvKiBEaXNhYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLwogCWNhc2UgU1lTTE9HX0FDVElPTl9DT05TT0xFX09GRjoKLQkJaWYgKHNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPT0gLTEpCisJCWlmIChzYXZlZF9jb25zb2xlX2xvZ2xldmVsID09IExPR0xFVkVMX0RFRkFVTFQpCiAJCQlzYXZlZF9jb25zb2xlX2xvZ2xldmVsID0gY29uc29sZV9sb2dsZXZlbDsKIAkJY29uc29sZV9sb2dsZXZlbCA9IG1pbmltdW1fY29uc29sZV9sb2dsZXZlbDsKIAkJYnJlYWs7CiAJLyogRW5hYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLwogCWNhc2UgU1lTTE9HX0FDVElPTl9DT05TT0xFX09OOgotCQlpZiAoc2F2ZWRfY29uc29sZV9sb2dsZXZlbCAhPSAtMSkgeworCQlpZiAoc2F2ZWRfY29uc29sZV9sb2dsZXZlbCAhPSBMT0dMRVZFTF9ERUZBVUxUKSB7CiAJCQljb25zb2xlX2xvZ2xldmVsID0gc2F2ZWRfY29uc29sZV9sb2dsZXZlbDsKLQkJCXNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPSAtMTsKKwkJCXNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPSBMT0dMRVZFTF9ERUZBVUxUOwogCQl9CiAJCWJyZWFrOwogCS8qIFNldCBsZXZlbCBvZiBtZXNzYWdlcyBwcmludGVkIHRvIGNvbnNvbGUgKi8KQEAgLTEzMzYsNyArMTMzMyw3IEBACiAJCQlsZW4gPSBtaW5pbXVtX2NvbnNvbGVfbG9nbGV2ZWw7CiAJCWNvbnNvbGVfbG9nbGV2ZWwgPSBsZW47CiAJCS8qIEltcGxpY2l0bHkgcmUtZW5hYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLwotCQlzYXZlZF9jb25zb2xlX2xvZ2xldmVsID0gLTE7CisJCXNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPSBMT0dMRVZFTF9ERUZBVUxUOwogCQllcnJvciA9IDA7CiAJCWJyZWFrOwogCS8qIE51bWJlciBvZiBjaGFycyBpbiB0aGUgbG9nIGJ1ZmZlciAqLwpAQCAtMTYyNywxMCArMTYyNCwxMCBAQAogCWludCBwcmludGVkX2xlbiA9IDA7CiAJYm9vbCBpbl9zY2hlZCA9IGZhbHNlOwogCS8qIGNwdSBjdXJyZW50bHkgaG9sZGluZyBsb2didWZfbG9jayBpbiB0aGlzIGZ1bmN0aW9uICovCi0Jc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2didWZfY3B1ID0gVUlOVF9NQVg7CisJc3RhdGljIHVuc2lnbmVkIGludCBsb2didWZfY3B1ID0gVUlOVF9NQVg7CiAKLQlpZiAobGV2ZWwgPT0gU0NIRURfTUVTU0FHRV9MT0dMRVZFTCkgewotCQlsZXZlbCA9IC0xOworCWlmIChsZXZlbCA9PSBMT0dMRVZFTF9TQ0hFRCkgeworCQlsZXZlbCA9IExPR0xFVkVMX0RFRkFVTFQ7CiAJCWluX3NjaGVkID0gdHJ1ZTsKIAl9CiAKQEAgLTE2OTUsOCArMTY5Miw5IEBACiAJCQljb25zdCBjaGFyICplbmRfb2ZfaGVhZGVyID0gcHJpbnRrX3NraXBfbGV2ZWwodGV4dCk7CiAJCQlzd2l0Y2ggKGtlcm5fbGV2ZWwpIHsKIAkJCWNhc2UgJzAnIC4uLiAnNyc6Ci0JCQkJaWYgKGxldmVsID09IC0xKQorCQkJCWlmIChsZXZlbCA9PSBMT0dMRVZFTF9ERUZBVUxUKQogCQkJCQlsZXZlbCA9IGtlcm5fbGV2ZWwgLSAnMCc7CisJCQkJLyogZmFsbHRocm91Z2ggKi8KIAkJCWNhc2UgJ2QnOgkvKiBLRVJOX0RFRkFVTFQgKi8KIAkJCQlsZmxhZ3MgfD0gTE9HX1BSRUZJWDsKIAkJCX0KQEAgLTE3MTAsNyArMTcwOCw3IEBACiAJCX0KIAl9CiAKLQlpZiAobGV2ZWwgPT0gLTEpCisJaWYgKGxldmVsID09IExPR0xFVkVMX0RFRkFVTFQpCiAJCWxldmVsID0gZGVmYXVsdF9tZXNzYWdlX2xvZ2xldmVsOwogCiAJaWYgKGRpY3QpCkBAIC0xNzg4LDcgKzE3ODYsNyBAQAogCiBhc21saW5rYWdlIGludCB2cHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewotCXJldHVybiB2cHJpbnRrX2VtaXQoMCwgLTEsIE5VTEwsIDAsIGZtdCwgYXJncyk7CisJcmV0dXJuIHZwcmludGtfZW1pdCgwLCBMT0dMRVZFTF9ERUZBVUxULCBOVUxMLCAwLCBmbXQsIGFyZ3MpOwogfQogRVhQT1JUX1NZTUJPTCh2cHJpbnRrKTsKIApAQCAtMTgwNyw2ICsxODA1LDMwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHByaW50a19lbWl0KTsKIAoraW50IHZwcmludGtfZGVmYXVsdChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKwlpbnQgcjsKKworI2lmZGVmIENPTkZJR19LR0RCX0tEQgorCWlmICh1bmxpa2VseShrZGJfdHJhcF9wcmludGspKSB7CisJCXIgPSB2a2RiX3ByaW50ZihmbXQsIGFyZ3MpOworCQlyZXR1cm4gcjsKKwl9CisjZW5kaWYKKwlyID0gdnByaW50a19lbWl0KDAsIExPR0xFVkVMX0RFRkFVTFQsIE5VTEwsIDAsIGZtdCwgYXJncyk7CisKKwlyZXR1cm4gcjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZwcmludGtfZGVmYXVsdCk7CisKKy8qCisgKiBUaGlzIGFsbG93cyBwcmludGsgdG8gYmUgZGl2ZXJ0ZWQgdG8gYW5vdGhlciBmdW5jdGlvbiBwZXIgY3B1LgorICogVGhpcyBpcyB1c2VmdWwgZm9yIGNhbGxpbmcgcHJpbnRrIGZ1bmN0aW9ucyBmcm9tIHdpdGhpbiBOTUkKKyAqIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgcmFjZSBjb25kaXRpb25zIHRoYXQgY2FuIGxvY2sgdXAgdGhlCisgKiBib3guCisgKi8KK0RFRklORV9QRVJfQ1BVKHByaW50a19mdW5jX3QsIHByaW50a19mdW5jKSA9IHZwcmludGtfZGVmYXVsdDsKKwogLyoqCiAgKiBwcmludGsgLSBwcmludCBhIGtlcm5lbCBtZXNzYWdlCiAgKiBAZm10OiBmb3JtYXQgc3RyaW5nCkBAIC0xODMwLDE5ICsxODUyLDE1IEBACiAgKi8KIGFzbWxpbmthZ2UgX192aXNpYmxlIGludCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CisJcHJpbnRrX2Z1bmNfdCB2cHJpbnRrX2Z1bmM7CiAJdmFfbGlzdCBhcmdzOwogCWludCByOwogCi0jaWZkZWYgQ09ORklHX0tHREJfS0RCCi0JaWYgKHVubGlrZWx5KGtkYl90cmFwX3ByaW50aykpIHsKLQkJdmFfc3RhcnQoYXJncywgZm10KTsKLQkJciA9IHZrZGJfcHJpbnRmKGZtdCwgYXJncyk7Ci0JCXZhX2VuZChhcmdzKTsKLQkJcmV0dXJuIHI7Ci0JfQotI2VuZGlmCiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQlyID0gdnByaW50a19lbWl0KDAsIC0xLCBOVUxMLCAwLCBmbXQsIGFyZ3MpOworCXByZWVtcHRfZGlzYWJsZSgpOworCXZwcmludGtfZnVuYyA9IHRoaXNfY3B1X3JlYWQocHJpbnRrX2Z1bmMpOworCXIgPSB2cHJpbnRrX2Z1bmMoZm10LCBhcmdzKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogCXZhX2VuZChhcmdzKTsKIAogCXJldHVybiByOwpAQCAtMTg3NiwyOCArMTg5NCwyOCBAQAogCQkJICAgICBib29sIHN5c2xvZywgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gMDsgfQogc3RhdGljIHNpemVfdCBjb250X3ByaW50X3RleHQoY2hhciAqdGV4dCwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIDA7IH0KIAorLyogU3RpbGwgbmVlZHMgdG8gYmUgZGVmaW5lZCBmb3IgdXNlcnMgKi8KK0RFRklORV9QRVJfQ1BVKHByaW50a19mdW5jX3QsIHByaW50a19mdW5jKTsKKwogI2VuZGlmIC8qIENPTkZJR19QUklOVEsgKi8KIAogI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKIHN0cnVjdCBjb25zb2xlICplYXJseV9jb25zb2xlOwogCi12b2lkIGVhcmx5X3ZwcmludGsoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQotewotCWlmIChlYXJseV9jb25zb2xlKSB7Ci0JCWNoYXIgYnVmWzUxMl07Ci0JCWludCBuID0gdnNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKLQotCQllYXJseV9jb25zb2xlLT53cml0ZShlYXJseV9jb25zb2xlLCBidWYsIG4pOwotCX0KLX0KLQogYXNtbGlua2FnZSBfX3Zpc2libGUgdm9pZCBlYXJseV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcDsKKwljaGFyIGJ1Zls1MTJdOworCWludCBuOworCisJaWYgKCFlYXJseV9jb25zb2xlKQorCQlyZXR1cm47CiAKIAl2YV9zdGFydChhcCwgZm10KTsKLQllYXJseV92cHJpbnRrKGZtdCwgYXApOworCW4gPSB2c2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOwogCXZhX2VuZChhcCk7CisKKwllYXJseV9jb25zb2xlLT53cml0ZShlYXJseV9jb25zb2xlLCBidWYsIG4pOwogfQogI2VuZGlmCiAKQEAgLTI2MzQsNyArMjY1Miw3IEBACiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXIgPSB2cHJpbnRrX2VtaXQoMCwgU0NIRURfTUVTU0FHRV9MT0dMRVZFTCwgTlVMTCwgMCwgZm10LCBhcmdzKTsKKwlyID0gdnByaW50a19lbWl0KDAsIExPR0xFVkVMX1NDSEVELCBOVUxMLCAwLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIAogCV9fdGhpc19jcHVfb3IocHJpbnRrX3BlbmRpbmcsIFBSSU5US19QRU5ESU5HX09VVFBVVCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNTRlNzUyMi4uMWViOWQ5MCAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDg1LDM2ICs0ODUsMTkgQEAKIAogLyoKICAqIERldGFjaCBhbGwgdGFza3Mgd2Ugd2VyZSB1c2luZyBwdHJhY2Ugb24uIENhbGxlZCB3aXRoIHRhc2tsaXN0IGhlbGQKLSAqIGZvciB3cml0aW5nLCBhbmQgcmV0dXJucyB3aXRoIGl0IGhlbGQgdG9vLiBCdXQgbm90ZSBpdCBjYW4gcmVsZWFzZQotICogYW5kIHJlYWNxdWlyZSB0aGUgbG9jay4KKyAqIGZvciB3cml0aW5nLgogICovCi12b2lkIGV4aXRfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHJhY2VyKQotCV9fcmVsZWFzZXMoJnRhc2tsaXN0X2xvY2spCi0JX19hY3F1aXJlcygmdGFza2xpc3RfbG9jaykKK3ZvaWQgZXhpdF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0cmFjZXIsIHN0cnVjdCBsaXN0X2hlYWQgKmRlYWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbjsKLQlMSVNUX0hFQUQocHRyYWNlX2RlYWQpOwotCi0JaWYgKGxpa2VseShsaXN0X2VtcHR5KCZ0cmFjZXItPnB0cmFjZWQpKSkKLQkJcmV0dXJuOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZ0cmFjZXItPnB0cmFjZWQsIHB0cmFjZV9lbnRyeSkgewogCQlpZiAodW5saWtlbHkocC0+cHRyYWNlICYgUFRfRVhJVEtJTEwpKQogCQkJc2VuZF9zaWdfaW5mbyhTSUdLSUxMLCBTRU5EX1NJR19GT1JDRUQsIHApOwogCiAJCWlmIChfX3B0cmFjZV9kZXRhY2godHJhY2VyLCBwKSkKLQkJCWxpc3RfYWRkKCZwLT5wdHJhY2VfZW50cnksICZwdHJhY2VfZGVhZCk7CisJCQlsaXN0X2FkZCgmcC0+cHRyYWNlX2VudHJ5LCBkZWFkKTsKIAl9Ci0KLQl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKLQlCVUdfT04oIWxpc3RfZW1wdHkoJnRyYWNlci0+cHRyYWNlZCkpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwdHJhY2VfZGVhZCwgcHRyYWNlX2VudHJ5KSB7Ci0JCWxpc3RfZGVsX2luaXQoJnAtPnB0cmFjZV9lbnRyeSk7Ci0JCXJlbGVhc2VfdGFzayhwKTsKLQl9Ci0KLQl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiB9CiAKIGludCBwdHJhY2VfcmVhZGRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgc3JjLCBjaGFyIF9fdXNlciAqZHN0LCBpbnQgbGVuKQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9NYWtlZmlsZSBiL2tlcm5lbC9yY3UvTWFrZWZpbGUKaW5kZXggODA3Y2NmYi4uZTZmYWU1MCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9NYWtlZmlsZQorKysgYi9rZXJuZWwvcmN1L01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogb2JqLXkgKz0gdXBkYXRlLm8gc3JjdS5vCiBvYmotJChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgKz0gcmN1dG9ydHVyZS5vCiBvYmotJChDT05GSUdfVFJFRV9SQ1UpICs9IHRyZWUubwotb2JqLSQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpICs9IHRyZWUubworb2JqLSQoQ09ORklHX1BSRUVNUFRfUkNVKSArPSB0cmVlLm8KIG9iai0kKENPTkZJR19UUkVFX1JDVV9UUkFDRSkgKz0gdHJlZV90cmFjZS5vCiBvYmotJChDT05GSUdfVElOWV9SQ1UpICs9IHRpbnkubwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmgKaW5kZXggZmYxYTZkZS4uMDdiYjAyZSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9yY3UuaAorKysgYi9rZXJuZWwvcmN1L3JjdS5oCkBAIC0xMzUsNCArMTM1LDYgQEAKICAqLwogI2RlZmluZSBUUFMoeCkgIHRyYWNlcG9pbnRfc3RyaW5nKHgpCiAKK3ZvaWQgcmN1X2Vhcmx5X2Jvb3RfdGVzdHModm9pZCk7CisKICNlbmRpZiAvKiBfX0xJTlVYX1JDVV9IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCmluZGV4IDI0MGZhOTAuLjRkNTU5YmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCkBAIC04MTIsNiArODEyLDcgQEAKIAkJY3VyX29wcy0+Y2JfYmFycmllcigpOwogCQlzdHV0dGVyX3dhaXQoInJjdV90b3J0dXJlX2NiZmxvb2QiKTsKIAl9IHdoaWxlICghdG9ydHVyZV9tdXN0X3N0b3AoKSk7CisJdmZyZWUocmhwKTsKIAl0b3J0dXJlX2t0aHJlYWRfc3RvcHBpbmcoInJjdV90b3J0dXJlX2NiZmxvb2QiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmMKaW5kZXggYzA2MjNmYy4uMGRiNTY0OSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90aW55LmMKKysrIGIva2VybmVsL3JjdS90aW55LmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICogYmUgY2FsbGVkIGZyb20gaGFyZGlycSBjb250ZXh0LiAgSXQgaXMgbm9ybWFsbHkgY2FsbGVkIGZyb20gdGhlCiAgKiBzY2hlZHVsaW5nLWNsb2NrIGludGVycnVwdC4KICAqLwotdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKQordm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCB1c2VyKQogewogCVJDVV9UUkFDRShjaGVja19jcHVfc3RhbGxzKCkpOwogCWlmICh1c2VyIHx8IHJjdV9pc19jcHVfcnJ1cHRfZnJvbV9pZGxlKCkpCkBAIC0zODAsNyArMzgwLDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1X2JoKTsKIAotdm9pZCByY3VfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKIHsKIAlvcGVuX3NvZnRpcnEoUkNVX1NPRlRJUlEsIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyk7CisKKwlyY3VfZWFybHlfYm9vdF90ZXN0cygpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuYwppbmRleCA5ODE1NDQ3Li43NjgwZmMyIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RyZWUuYworKysgYi9rZXJuZWwvcmN1L3RyZWUuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJLm5hbWUgPSBSQ1VfU1RBVEVfTkFNRShzbmFtZSksIFwKIAkuYWJiciA9IHNhYmJyLCBcCiB9OyBcCi1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHNuYW1lIyNfZGF0YSkKK0RFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCByY3VfZGF0YSwgc25hbWUjI19kYXRhKQogCiBSQ1VfU1RBVEVfSU5JVElBTElaRVIocmN1X3NjaGVkLCAncycsIGNhbGxfcmN1X3NjaGVkKTsKIFJDVV9TVEFURV9JTklUSUFMSVpFUihyY3VfYmgsICdiJywgY2FsbF9yY3VfYmgpOwpAQCAtMTUyLDE5ICsxNTIsNiBAQAogICovCiBzdGF0aWMgaW50IHJjdV9zY2hlZHVsZXJfZnVsbHlfYWN0aXZlIF9fcmVhZF9tb3N0bHk7CiAKLSNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCi0KLS8qCi0gKiBDb250cm9sIHZhcmlhYmxlcyBmb3IgcGVyLUNQVSBhbmQgcGVyLXJjdV9ub2RlIGt0aHJlYWRzLiAgVGhlc2UKLSAqIGhhbmRsZSBhbGwgZmxhdm9ycyBvZiBSQ1UuCi0gKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgcmN1X2NwdV9rdGhyZWFkX3Rhc2spOwotREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCByY3VfY3B1X2t0aHJlYWRfc3RhdHVzKTsKLURFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgcmN1X2NwdV9rdGhyZWFkX2xvb3BzKTsKLURFRklORV9QRVJfQ1BVKGNoYXIsIHJjdV9jcHVfaGFzX3dvcmspOwotCi0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KLQogc3RhdGljIHZvaWQgcmN1X2Jvb3N0X2t0aHJlYWRfc2V0YWZmaW5pdHkoc3RydWN0IHJjdV9ub2RlICpybnAsIGludCBvdXRnb2luZ2NwdSk7CiBzdGF0aWMgdm9pZCBpbnZva2VfcmN1X2NvcmUodm9pZCk7CiBzdGF0aWMgdm9pZCBpbnZva2VfcmN1X2NhbGxiYWNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKQEAgLTI4NiwxMSArMjczLDExIEBACiAgKiBhbmQgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcHJlZW1wdGlibGUgUkNVLgogICogVGhlIGNhbGxlciBtdXN0IGhhdmUgZGlzYWJsZWQgcHJlZW1wdGlvbi4KICAqLwotdm9pZCByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaChpbnQgY3B1KQordm9pZCByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaCh2b2lkKQogewogCXRyYWNlX3JjdV91dGlsaXphdGlvbihUUFMoIlN0YXJ0IGNvbnRleHQgc3dpdGNoIikpOwogCXJjdV9zY2hlZF9xcygpOwotCXJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2goY3B1KTsKKwlyY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKCk7CiAJaWYgKHVubGlrZWx5KHJhd19jcHVfcmVhZChyY3Vfc2NoZWRfcXNfbWFzaykpKQogCQlyY3VfbW9tZW50YXJ5X2R5bnRpY2tfaWRsZSgpOwogCXRyYWNlX3JjdV91dGlsaXphdGlvbihUUFMoIkVuZCBjb250ZXh0IHN3aXRjaCIpKTsKQEAgLTMyNSw3ICszMTIsNyBAQAogCQkJCSAgdW5zaWduZWQgbG9uZyAqbWF4aiksCiAJCQkgYm9vbCAqaXNpZGxlLCB1bnNpZ25lZCBsb25nICptYXhqKTsKIHN0YXRpYyB2b2lkIGZvcmNlX3F1aWVzY2VudF9zdGF0ZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApOwotc3RhdGljIGludCByY3VfcGVuZGluZyhpbnQgY3B1KTsKK3N0YXRpYyBpbnQgcmN1X3BlbmRpbmcodm9pZCk7CiAKIC8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1Utc2NoZWQgYmF0Y2hlcyBwcm9jZXNzZWQgdGh1cyBmYXIgZm9yIGRlYnVnICYgc3RhdHMuCkBAIC01MTAsMTEgKzQ5NywxMSBAQAogICogd2UgcmVhbGx5IGhhdmUgZW50ZXJlZCBpZGxlLCBhbmQgbXVzdCBkbyB0aGUgYXBwcm9wcmlhdGUgYWNjb3VudGluZy4KICAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGRpc2FibGVkIGludGVycnVwdHMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9lcXNfZW50ZXJfY29tbW9uKHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGxvbmcgbG9uZyBvbGR2YWwsCi0JCQkJYm9vbCB1c2VyKQorc3RhdGljIHZvaWQgcmN1X2Vxc19lbnRlcl9jb21tb24obG9uZyBsb25nIG9sZHZhbCwgYm9vbCB1c2VyKQogewogCXN0cnVjdCByY3Vfc3RhdGUgKnJzcDsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKKwlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gdGhpc19jcHVfcHRyKCZyY3VfZHludGlja3MpOwogCiAJdHJhY2VfcmN1X2R5bnRpY2soVFBTKCJTdGFydCIpLCBvbGR2YWwsIHJkdHAtPmR5bnRpY2tzX25lc3RpbmcpOwogCWlmICghdXNlciAmJiAhaXNfaWRsZV90YXNrKGN1cnJlbnQpKSB7CkBAIC01MzEsNyArNTE4LDcgQEAKIAkJcmRwID0gdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKIAkJZG9fbm9jYl9kZWZlcnJlZF93YWtldXAocmRwKTsKIAl9Ci0JcmN1X3ByZXBhcmVfZm9yX2lkbGUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyY3VfcHJlcGFyZV9mb3JfaWRsZSgpOwogCS8qIENQVXMgc2VlaW5nIGF0b21pY19pbmMoKSBtdXN0IHNlZSBwcmlvciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KIAlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsgIC8qIFNlZSBhYm92ZS4gKi8KIAlhdG9taWNfaW5jKCZyZHRwLT5keW50aWNrcyk7CkBAIC01NjUsNyArNTUyLDcgQEAKIAlXQVJOX09OX09OQ0UoKG9sZHZhbCAmIERZTlRJQ0tfVEFTS19ORVNUX01BU0spID09IDApOwogCWlmICgob2xkdmFsICYgRFlOVElDS19UQVNLX05FU1RfTUFTSykgPT0gRFlOVElDS19UQVNLX05FU1RfVkFMVUUpIHsKIAkJcmR0cC0+ZHludGlja3NfbmVzdGluZyA9IDA7Ci0JCXJjdV9lcXNfZW50ZXJfY29tbW9uKHJkdHAsIG9sZHZhbCwgdXNlcik7CisJCXJjdV9lcXNfZW50ZXJfY29tbW9uKG9sZHZhbCwgdXNlcik7CiAJfSBlbHNlIHsKIAkJcmR0cC0+ZHludGlja3NfbmVzdGluZyAtPSBEWU5USUNLX1RBU0tfTkVTVF9WQUxVRTsKIAl9CkBAIC01ODksNyArNTc2LDcgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlyY3VfZXFzX2VudGVyKGZhbHNlKTsKLQlyY3Vfc3lzaWRsZV9lbnRlcih0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyksIDApOworCXJjdV9zeXNpZGxlX2VudGVyKDApOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9pZGxlX2VudGVyKTsKQEAgLTYzOSw4ICs2MjYsOCBAQAogCWlmIChyZHRwLT5keW50aWNrc19uZXN0aW5nKQogCQl0cmFjZV9yY3VfZHludGljayhUUFMoIi0tPSIpLCBvbGR2YWwsIHJkdHAtPmR5bnRpY2tzX25lc3RpbmcpOwogCWVsc2UKLQkJcmN1X2Vxc19lbnRlcl9jb21tb24ocmR0cCwgb2xkdmFsLCB0cnVlKTsKLQlyY3Vfc3lzaWRsZV9lbnRlcihyZHRwLCAxKTsKKwkJcmN1X2Vxc19lbnRlcl9jb21tb24ob2xkdmFsLCB0cnVlKTsKKwlyY3Vfc3lzaWRsZV9lbnRlcigxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTY1MSwxNiArNjM4LDE3IEBACiAgKiB3ZSByZWFsbHkgaGF2ZSBleGl0ZWQgaWRsZSwgYW5kIG11c3QgZG8gdGhlIGFwcHJvcHJpYXRlIGFjY291bnRpbmcuCiAgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBkaXNhYmxlZCBpbnRlcnJ1cHRzLgogICovCi1zdGF0aWMgdm9pZCByY3VfZXFzX2V4aXRfY29tbW9uKHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGxvbmcgbG9uZyBvbGR2YWwsCi0JCQkgICAgICAgaW50IHVzZXIpCitzdGF0aWMgdm9pZCByY3VfZXFzX2V4aXRfY29tbW9uKGxvbmcgbG9uZyBvbGR2YWwsIGludCB1c2VyKQogeworCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSB0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyk7CisKIAlyY3VfZHludGlja3NfdGFza19leGl0KCk7CiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7ICAvKiBGb3JjZSBvcmRlcmluZyB3L3ByZXZpb3VzIHNvam91cm4uICovCiAJYXRvbWljX2luYygmcmR0cC0+ZHludGlja3MpOwogCS8qIENQVXMgc2VlaW5nIGF0b21pY19pbmMoKSBtdXN0IHNlZSBsYXRlciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KIAlzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAgLyogU2VlIGFib3ZlLiAqLwogCVdBUk5fT05fT05DRSghKGF0b21pY19yZWFkKCZyZHRwLT5keW50aWNrcykgJiAweDEpKTsKLQlyY3VfY2xlYW51cF9hZnRlcl9pZGxlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmN1X2NsZWFudXBfYWZ0ZXJfaWRsZSgpOwogCXRyYWNlX3JjdV9keW50aWNrKFRQUygiRW5kIiksIG9sZHZhbCwgcmR0cC0+ZHludGlja3NfbmVzdGluZyk7CiAJaWYgKCF1c2VyICYmICFpc19pZGxlX3Rhc2soY3VycmVudCkpIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICppZGxlIF9fbWF5YmVfdW51c2VkID0KQEAgLTY5MSw3ICs2NzksNyBAQAogCQlyZHRwLT5keW50aWNrc19uZXN0aW5nICs9IERZTlRJQ0tfVEFTS19ORVNUX1ZBTFVFOwogCX0gZWxzZSB7CiAJCXJkdHAtPmR5bnRpY2tzX25lc3RpbmcgPSBEWU5USUNLX1RBU0tfRVhJVF9JRExFOwotCQlyY3VfZXFzX2V4aXRfY29tbW9uKHJkdHAsIG9sZHZhbCwgdXNlcik7CisJCXJjdV9lcXNfZXhpdF9jb21tb24ob2xkdmFsLCB1c2VyKTsKIAl9CiB9CiAKQEAgLTcxMiw3ICs3MDAsNyBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXJjdV9lcXNfZXhpdChmYWxzZSk7Ci0JcmN1X3N5c2lkbGVfZXhpdCh0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyksIDApOworCXJjdV9zeXNpZGxlX2V4aXQoMCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2lkbGVfZXhpdCk7CkBAIC03NjMsOCArNzUxLDggQEAKIAlpZiAob2xkdmFsKQogCQl0cmFjZV9yY3VfZHludGljayhUUFMoIisrPSIpLCBvbGR2YWwsIHJkdHAtPmR5bnRpY2tzX25lc3RpbmcpOwogCWVsc2UKLQkJcmN1X2Vxc19leGl0X2NvbW1vbihyZHRwLCBvbGR2YWwsIHRydWUpOwotCXJjdV9zeXNpZGxlX2V4aXQocmR0cCwgMSk7CisJCXJjdV9lcXNfZXhpdF9jb21tb24ob2xkdmFsLCB0cnVlKTsKKwlyY3Vfc3lzaWRsZV9leGl0KDEpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMjM4Nyw3ICsyMzc1LDcgQEAKICAqIGludm9rZWQgZnJvbSB0aGUgc2NoZWR1bGluZy1jbG9jayBpbnRlcnJ1cHQuICBJZiByY3VfcGVuZGluZyByZXR1cm5zCiAgKiBmYWxzZSwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gaW52b2tpbmcgcmN1X2NoZWNrX2NhbGxiYWNrcygpLgogICovCi12b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpCit2b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IHVzZXIpCiB7CiAJdHJhY2VfcmN1X3V0aWxpemF0aW9uKFRQUygiU3RhcnQgc2NoZWR1bGVyLXRpY2siKSk7CiAJaW5jcmVtZW50X2NwdV9zdGFsbF90aWNrcygpOwpAQCAtMjQxOSw4ICsyNDA3LDggQEAKIAogCQlyY3VfYmhfcXMoKTsKIAl9Ci0JcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGNwdSk7Ci0JaWYgKHJjdV9wZW5kaW5nKGNwdSkpCisJcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKCk7CisJaWYgKHJjdV9wZW5kaW5nKCkpCiAJCWludm9rZV9yY3VfY29yZSgpOwogCWlmICh1c2VyKQogCQlyY3Vfbm90ZV92b2x1bnRhcnlfY29udGV4dF9zd2l0Y2goY3VycmVudCk7CkBAIC0yOTYzLDYgKzI5NTEsOSBAQAogICovCiB2b2lkIHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCh2b2lkKQogeworCWNwdW1hc2tfdmFyX3QgY207CisJYm9vbCBjbWEgPSBmYWxzZTsKKwlpbnQgY3B1OwogCWxvbmcgZmlyc3RzbmFwLCBzLCBzbmFwOwogCWludCB0cnljb3VudCA9IDA7CiAJc3RydWN0IHJjdV9zdGF0ZSAqcnNwID0gJnJjdV9zY2hlZF9zdGF0ZTsKQEAgLTI5OTcsMTEgKzI5ODgsMjYgQEAKIAl9CiAJV0FSTl9PTl9PTkNFKGNwdV9pc19vZmZsaW5lKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpKTsKIAorCS8qIE9mZmxpbmUgQ1BVcywgaWRsZSBDUFVzLCBhbmQgYW55IENQVSB3ZSBydW4gb24gYXJlIHF1aWVzY2VudC4gKi8KKwljbWEgPSB6YWxsb2NfY3B1bWFza192YXIoJmNtLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21hKSB7CisJCWNwdW1hc2tfY29weShjbSwgY3B1X29ubGluZV9tYXNrKTsKKwkJY3B1bWFza19jbGVhcl9jcHUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgY20pOworCQlmb3JfZWFjaF9jcHUoY3B1LCBjbSkgeworCQkJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9ICZwZXJfY3B1KHJjdV9keW50aWNrcywgY3B1KTsKKworCQkJaWYgKCEoYXRvbWljX2FkZF9yZXR1cm4oMCwgJnJkdHAtPmR5bnRpY2tzKSAmIDB4MSkpCisJCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBjbSk7CisJCX0KKwkJaWYgKGNwdW1hc2tfd2VpZ2h0KGNtKSA9PSAwKQorCQkJZ290byBhbGxfY3B1c19pZGxlOworCX0KKwogCS8qCiAJICogRWFjaCBwYXNzIHRocm91Z2ggdGhlIGZvbGxvd2luZyBsb29wIGF0dGVtcHRzIHRvIGZvcmNlIGEKIAkgKiBjb250ZXh0IHN3aXRjaCBvbiBlYWNoIENQVS4KIAkgKi8KLQl3aGlsZSAodHJ5X3N0b3BfY3B1cyhjcHVfb25saW5lX21hc2ssCisJd2hpbGUgKHRyeV9zdG9wX2NwdXMoY21hID8gY20gOiBjcHVfb25saW5lX21hc2ssCiAJCQkgICAgIHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZF9jcHVfc3RvcCwKIAkJCSAgICAgTlVMTCkgPT0gLUVBR0FJTikgewogCQlwdXRfb25saW5lX2NwdXMoKTsKQEAgLTMwMTMsNiArMzAxOSw3IEBACiAJCQkvKiBlbnN1cmUgdGVzdCBoYXBwZW5zIGJlZm9yZSBjYWxsZXIga2ZyZWUgKi8KIAkJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyAvKiBeXl4gKi8KIAkJCWF0b21pY19sb25nX2luYygmcnNwLT5leHBlZGl0ZWRfd29ya2RvbmUxKTsKKwkJCWZyZWVfY3B1bWFza192YXIoY20pOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTMwMjIsNiArMzAyOSw3IEBACiAJCX0gZWxzZSB7CiAJCQl3YWl0X3JjdV9ncChjYWxsX3JjdV9zY2hlZCk7CiAJCQlhdG9taWNfbG9uZ19pbmMoJnJzcC0+ZXhwZWRpdGVkX25vcm1hbCk7CisJCQlmcmVlX2NwdW1hc2tfdmFyKGNtKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0zMDMxLDYgKzMwMzksNyBAQAogCQkJLyogZW5zdXJlIHRlc3QgaGFwcGVucyBiZWZvcmUgY2FsbGVyIGtmcmVlICovCiAJCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsgLyogXl5eICovCiAJCQlhdG9taWNfbG9uZ19pbmMoJnJzcC0+ZXhwZWRpdGVkX3dvcmtkb25lMik7CisJCQlmcmVlX2NwdW1hc2tfdmFyKGNtKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0zMDQ1LDYgKzMwNTQsNyBAQAogCQkJLyogQ1BVIGhvdHBsdWcgb3BlcmF0aW9uIGluIGZsaWdodCwgdXNlIG5vcm1hbCBHUC4gKi8KIAkJCXdhaXRfcmN1X2dwKGNhbGxfcmN1X3NjaGVkKTsKIAkJCWF0b21pY19sb25nX2luYygmcnNwLT5leHBlZGl0ZWRfbm9ybWFsKTsKKwkJCWZyZWVfY3B1bWFza192YXIoY20pOwogCQkJcmV0dXJuOwogCQl9CiAJCXNuYXAgPSBhdG9taWNfbG9uZ19yZWFkKCZyc3AtPmV4cGVkaXRlZF9zdGFydCk7CkBAIC0zMDUyLDYgKzMwNjIsOSBAQAogCX0KIAlhdG9taWNfbG9uZ19pbmMoJnJzcC0+ZXhwZWRpdGVkX3N0b3BwZWRjcHVzKTsKIAorYWxsX2NwdXNfaWRsZToKKwlmcmVlX2NwdW1hc2tfdmFyKGNtKTsKKwogCS8qCiAJICogRXZlcnlvbmUgdXAgdG8gb3VyIG1vc3QgcmVjZW50IGZldGNoIGlzIGNvdmVyZWQgYnkgb3VyIGdyYWNlCiAJICogcGVyaW9kLiAgVXBkYXRlIHRoZSBjb3VudGVyLCBidXQgb25seSBpZiBvdXIgd29yayBpcyBzdGlsbApAQCAtMzE0MywxMiArMzE1NiwxMiBAQAogICogYnkgdGhlIGN1cnJlbnQgQ1BVLCByZXR1cm5pbmcgMSBpZiBzby4gIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUKICAqIFJDVSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgLW5vdC0gYW4gZXhwb3J0ZWQgbWVtYmVyIG9mIHRoZSBSQ1UgQVBJLgogICovCi1zdGF0aWMgaW50IHJjdV9wZW5kaW5nKGludCBjcHUpCitzdGF0aWMgaW50IHJjdV9wZW5kaW5nKHZvaWQpCiB7CiAJc3RydWN0IHJjdV9zdGF0ZSAqcnNwOwogCiAJZm9yX2VhY2hfcmN1X2ZsYXZvcihyc3ApCi0JCWlmIChfX3JjdV9wZW5kaW5nKHJzcCwgcGVyX2NwdV9wdHIocnNwLT5yZGEsIGNwdSkpKQorCQlpZiAoX19yY3VfcGVuZGluZyhyc3AsIHRoaXNfY3B1X3B0cihyc3AtPnJkYSkpKQogCQkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTU4LDcgKzMxNzEsNyBAQAogICogbm9uLU5VTEwsIHN0b3JlIGFuIGluZGljYXRpb24gb2Ygd2hldGhlciBhbGwgY2FsbGJhY2tzIGFyZSBsYXp5LgogICogKElmIHRoZXJlIGFyZSBubyBjYWxsYmFja3MsIGFsbCBvZiB0aGVtIGFyZSBkZWVtZWQgdG8gYmUgbGF6eS4pCiAgKi8KLXN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgcmN1X2NwdV9oYXNfY2FsbGJhY2tzKGludCBjcHUsIGJvb2wgKmFsbF9sYXp5KQorc3RhdGljIGludCBfX21heWJlX3VudXNlZCByY3VfY3B1X2hhc19jYWxsYmFja3MoYm9vbCAqYWxsX2xhenkpCiB7CiAJYm9vbCBhbCA9IHRydWU7CiAJYm9vbCBoYyA9IGZhbHNlOwpAQCAtMzE2Niw3ICszMTc5LDcgQEAKIAlzdHJ1Y3QgcmN1X3N0YXRlICpyc3A7CiAKIAlmb3JfZWFjaF9yY3VfZmxhdm9yKHJzcCkgewotCQlyZHAgPSBwZXJfY3B1X3B0cihyc3AtPnJkYSwgY3B1KTsKKwkJcmRwID0gdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKIAkJaWYgKCFyZHAtPm54dGxpc3QpCiAJCQljb250aW51ZTsKIAkJaGMgPSB0cnVlOwpAQCAtMzQ4NSw4ICszNDk4LDEwIEBACiAJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgotCQlmb3JfZWFjaF9yY3VfZmxhdm9yKHJzcCkKKwkJZm9yX2VhY2hfcmN1X2ZsYXZvcihyc3ApIHsKIAkJCXJjdV9jbGVhbnVwX2RlYWRfY3B1KGNwdSwgcnNwKTsKKwkJCWRvX25vY2JfZGVmZXJyZWRfd2FrZXVwKHBlcl9jcHVfcHRyKHJzcC0+cmRhLCBjcHUpKTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTM3NjYsNiArMzc4MSw4IEBACiAJcG1fbm90aWZpZXIocmN1X3BtX25vdGlmeSwgMCk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiAJCXJjdV9jcHVfbm90aWZ5KE5VTEwsIENQVV9VUF9QUkVQQVJFLCAodm9pZCAqKShsb25nKWNwdSk7CisKKwlyY3VfZWFybHlfYm9vdF90ZXN0cygpOwogfQogCiAjaW5jbHVkZSAidHJlZV9wbHVnaW4uaCIKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmgKaW5kZXggYmJkYzQ1ZC4uOGU3YjE4NCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlLmgKKysrIGIva2VybmVsL3JjdS90cmVlLmgKQEAgLTEzOSw3ICsxMzksNyBAQAogCXVuc2lnbmVkIGxvbmcgZXhwbWFzazsJLyogR3JvdXBzIHRoYXQgaGF2ZSAtPmJsa2RfdGFza3MgKi8KIAkJCQkvKiAgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGRyYWluIHRvIGFsbG93IHRoZSAqLwogCQkJCS8qICBjdXJyZW50IGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgdG8gKi8KLQkJCQkvKiAgY29tcGxldGUgKG9ubHkgZm9yIFRSRUVfUFJFRU1QVF9SQ1UpLiAqLworCQkJCS8qICBjb21wbGV0ZSAob25seSBmb3IgUFJFRU1QVF9SQ1UpLiAqLwogCXVuc2lnbmVkIGxvbmcgcXNtYXNraW5pdDsKIAkJCQkvKiBQZXItR1AgaW5pdGlhbCB2YWx1ZSBmb3IgcXNtYXNrICYgZXhwbWFzay4gKi8KIAl1bnNpZ25lZCBsb25nIGdycG1hc2s7CS8qIE1hc2sgdG8gYXBwbHkgdG8gcGFyZW50IHFzbWFzay4gKi8KQEAgLTUzMCwxMCArNTMwLDEwIEBACiBleHRlcm4gc3RydWN0IHJjdV9zdGF0ZSByY3VfYmhfc3RhdGU7CiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfYmhfZGF0YSk7CiAKLSNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVQogZXh0ZXJuIHN0cnVjdCByY3Vfc3RhdGUgcmN1X3ByZWVtcHRfc3RhdGU7CiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfcHJlZW1wdF9kYXRhKTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVICovCiAKICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCiBERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgaW50LCByY3VfY3B1X2t0aHJlYWRfc3RhdHVzKTsKQEAgLTU0Nyw3ICs1NDcsNyBAQAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHJjdXRyZWVfcGx1Z2luLmggKi8KIHN0YXRpYyB2b2lkIHJjdV9ib290dXBfYW5ub3VuY2Uodm9pZCk7CiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSk7CitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKHZvaWQpOwogc3RhdGljIGludCByY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyB2b2lkIHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoc3RydWN0IHJjdV9ub2RlICpybnAsCkBAIC01NjEsMTIgKzU2MSwxMiBAQAogCQkJCSAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCiAJCQkJICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKHZvaWQpOwogdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpOwotI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKQorI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSB8fCBkZWZpbmVkKENPTkZJR19QUkVFTVBUX1JDVSkKIHN0YXRpYyB2b2lkIHJjdV9yZXBvcnRfZXhwX3JucChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAogCQkJICAgICAgIGJvb2wgd2FrZSk7Ci0jZW5kaWYgLyogI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKSAqLworI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpICovCiBzdGF0aWMgdm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpOwogc3RhdGljIHZvaWQgcmN1X2luaXRpYXRlX2Jvb3N0KHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2Jvb3N0X3N0YXJ0X2dwKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKQEAgLTU3OSw4ICs1NzksOCBAQAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcmN1X3NwYXduX2Jvb3N0X2t0aHJlYWRzKHZvaWQpOwogc3RhdGljIHZvaWQgcmN1X3ByZXBhcmVfa3RocmVhZHMoaW50IGNwdSk7Ci1zdGF0aWMgdm9pZCByY3VfY2xlYW51cF9hZnRlcl9pZGxlKGludCBjcHUpOwotc3RhdGljIHZvaWQgcmN1X3ByZXBhcmVfZm9yX2lkbGUoaW50IGNwdSk7CitzdGF0aWMgdm9pZCByY3VfY2xlYW51cF9hZnRlcl9pZGxlKHZvaWQpOworc3RhdGljIHZvaWQgcmN1X3ByZXBhcmVfZm9yX2lkbGUodm9pZCk7CiBzdGF0aWMgdm9pZCByY3VfaWRsZV9jb3VudF9jYWxsYmFja3NfcG9zdGVkKHZvaWQpOwogc3RhdGljIHZvaWQgcHJpbnRfY3B1X3N0YWxsX2luZm9fYmVnaW4odm9pZCk7CiBzdGF0aWMgdm9pZCBwcmludF9jcHVfc3RhbGxfaW5mbyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGludCBjcHUpOwpAQCAtNjA2LDggKzYwNiw4IEBACiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFUgKi8KIHN0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIHJjdV9raWNrX25vaHpfY3B1KGludCBjcHUpOwogc3RhdGljIGJvb2wgaW5pdF9ub2NiX2NhbGxiYWNrX2xpc3Qoc3RydWN0IHJjdV9kYXRhICpyZHApOwotc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZW50ZXIoc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCwgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9leGl0KHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGludCBpcnEpOworc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZW50ZXIoaW50IGlycSk7CitzdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9leGl0KGludCBpcnEpOwogc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfY2hlY2tfY3B1KHN0cnVjdCByY3VfZGF0YSAqcmRwLCBib29sICppc2lkbGUsCiAJCQkJICB1bnNpZ25lZCBsb25nICptYXhqKTsKIHN0YXRpYyBib29sIGlzX3N5c2lkbGVfcmN1X3N0YXRlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1L3RyZWVfcGx1Z2luLmgKaW5kZXggYzFkN2YyNy4uM2VjODVjYiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3UvdHJlZV9wbHVnaW4uaApAQCAtMzAsMTQgKzMwLDI0IEBACiAjaW5jbHVkZSA8bGludXgvc21wYm9vdC5oPgogI2luY2x1ZGUgIi4uL3RpbWUvdGljay1pbnRlcm5hbC5oIgogCi0jZGVmaW5lIFJDVV9LVEhSRUFEX1BSSU8gMQotCiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCiAjaW5jbHVkZSAiLi4vbG9ja2luZy9ydG11dGV4X2NvbW1vbi5oIgotI2RlZmluZSBSQ1VfQk9PU1RfUFJJTyBDT05GSUdfUkNVX0JPT1NUX1BSSU8KLSNlbHNlCi0jZGVmaW5lIFJDVV9CT09TVF9QUklPIFJDVV9LVEhSRUFEX1BSSU8KLSNlbmRpZgorCisvKiByY3VjL3JjdWIga3RocmVhZCByZWFsdGltZSBwcmlvcml0eSAqLworc3RhdGljIGludCBrdGhyZWFkX3ByaW8gPSBDT05GSUdfUkNVX0tUSFJFQURfUFJJTzsKK21vZHVsZV9wYXJhbShrdGhyZWFkX3ByaW8sIGludCwgMDY0NCk7CisKKy8qCisgKiBDb250cm9sIHZhcmlhYmxlcyBmb3IgcGVyLUNQVSBhbmQgcGVyLXJjdV9ub2RlIGt0aHJlYWRzLiAgVGhlc2UKKyAqIGhhbmRsZSBhbGwgZmxhdm9ycyBvZiBSQ1UuCisgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgcmN1X2NwdV9rdGhyZWFkX3Rhc2spOworREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCByY3VfY3B1X2t0aHJlYWRfc3RhdHVzKTsKK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgcmN1X2NwdV9rdGhyZWFkX2xvb3BzKTsKK0RFRklORV9QRVJfQ1BVKGNoYXIsIHJjdV9jcHVfaGFzX3dvcmspOworCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KIAogI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFUKIHN0YXRpYyBjcHVtYXNrX3Zhcl90IHJjdV9ub2NiX21hc2s7IC8qIENQVXMgdG8gaGF2ZSBjYWxsYmFja3Mgb2ZmbG9hZGVkLiAqLwpAQCAtNzIsOSArODIsNiBAQAogI2lmZGVmIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUX1JVTk5BQkxFCiAJcHJfaW5mbygiXHRSQ1UgdG9ydHVyZSB0ZXN0aW5nIHN0YXJ0cyBkdXJpbmcgYm9vdC5cbiIpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkgJiYgIWRlZmluZWQoQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRSkKLQlwcl9pbmZvKCJcdER1bXAgc3RhY2tzIG9mIHRhc2tzIGJsb2NraW5nIFJDVS1wcmVlbXB0IEdQLlxuIik7Ci0jZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk8pCiAJcHJfaW5mbygiXHRBZGRpdGlvbmFsIHBlci1DUFUgaW5mbyBwcmludGVkIHdpdGggc3RhbGxzLlxuIik7CiAjZW5kaWYKQEAgLTg1LDkgKzkyLDEyIEBACiAJCXByX2luZm8oIlx0Qm9vdC10aW1lIGFkanVzdG1lbnQgb2YgbGVhZiBmYW5vdXQgdG8gJWQuXG4iLCByY3VfZmFub3V0X2xlYWYpOwogCWlmIChucl9jcHVfaWRzICE9IE5SX0NQVVMpCiAJCXByX2luZm8oIlx0UkNVIHJlc3RyaWN0aW5nIENQVXMgZnJvbSBOUl9DUFVTPSVkIHRvIG5yX2NwdV9pZHM9JWQuXG4iLCBOUl9DUFVTLCBucl9jcHVfaWRzKTsKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisJcHJfaW5mbygiXHRSQ1Uga3RocmVhZCBwcmlvcml0eTogJWQuXG4iLCBrdGhyZWFkX3ByaW8pOworI2VuZGlmCiB9CiAKLSNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVQogCiBSQ1VfU1RBVEVfSU5JVElBTElaRVIocmN1X3ByZWVtcHQsICdwJywgY2FsbF9yY3UpOwogc3RhdGljIHN0cnVjdCByY3Vfc3RhdGUgKnJjdV9zdGF0ZV9wID0gJnJjdV9wcmVlbXB0X3N0YXRlOwpAQCAtMTU2LDcgKzE2Niw3IEBACiAgKgogICogQ2FsbGVyIG11c3QgZGlzYWJsZSBwcmVlbXB0aW9uLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gY3VycmVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTY3LDcgKzE3Nyw3IEBACiAJICAgICF0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbC5iLmJsb2NrZWQpIHsKIAogCQkvKiBQb3NzaWJseSBibG9ja2luZyBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICovCi0JCXJkcCA9IHBlcl9jcHVfcHRyKHJjdV9wcmVlbXB0X3N0YXRlLnJkYSwgY3B1KTsKKwkJcmRwID0gdGhpc19jcHVfcHRyKHJjdV9wcmVlbXB0X3N0YXRlLnJkYSk7CiAJCXJucCA9IHJkcC0+bXlub2RlOwogCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlzbXBfbWJfX2FmdGVyX3VubG9ja19sb2NrKCk7CkBAIC00MTUsOCArNDI1LDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFCi0KIC8qCiAgKiBEdW1wIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBhbGwgdGFza3MgYmxvY2tpbmcgdGhlIGN1cnJlbnQgUkNVCiAgKiBncmFjZSBwZXJpb2Qgb24gdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUuCkBAIC00NTEsMTQgKzQ1OSw2IEBACiAJCXJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbF9ybnAocm5wKTsKIH0KIAotI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UgKi8KLQotc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKLXsKLX0KLQotI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFICovCi0KICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPCiAKIHN0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsX2JlZ2luKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQpAQCAtNjIxLDcgKzYyMSw3IEBACiAgKgogICogQ2FsbGVyIG11c3QgZGlzYWJsZSBoYXJkIGlycXMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KQorc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gY3VycmVudDsKIApAQCAtNjMwLDggKzYzMCw4IEBACiAJCXJldHVybjsKIAl9CiAJaWYgKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZyA+IDAgJiYKLQkgICAgcGVyX2NwdShyY3VfcHJlZW1wdF9kYXRhLCBjcHUpLnFzX3BlbmRpbmcgJiYKLQkgICAgIXBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KS5wYXNzZWRfcXVpZXNjZSkKKwkgICAgX190aGlzX2NwdV9yZWFkKHJjdV9wcmVlbXB0X2RhdGEucXNfcGVuZGluZykgJiYKKwkgICAgIV9fdGhpc19jcHVfcmVhZChyY3VfcHJlZW1wdF9kYXRhLnBhc3NlZF9xdWllc2NlKSkKIAkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwuYi5uZWVkX3FzID0gdHJ1ZTsKIH0KIApAQCAtOTE5LDcgKzkxOSw3IEBACiAJX19yY3VfcmVhZF91bmxvY2soKTsKIH0KIAotI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVICovCiAKIHN0YXRpYyBzdHJ1Y3QgcmN1X3N0YXRlICpyY3Vfc3RhdGVfcCA9ICZyY3Vfc2NoZWRfc3RhdGU7CiAKQEAgLTk0NSw3ICs5NDUsNyBAQAogICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHdlIG5ldmVyIGhhdmUgdG8gY2hlY2sgZm9yCiAgKiBDUFVzIGJlaW5nIGluIHF1aWVzY2VudCBzdGF0ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2godm9pZCkKIHsKIH0KIApAQCAtMTAxNyw3ICsxMDE3LDcgQEAKICAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBoYXMgYW55IGNhbGxiYWNrcwogICogdG8gY2hlY2suCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KQorc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKHZvaWQpCiB7CiB9CiAKQEAgLTEwNzAsNyArMTA3MCw3IEBACiB7CiB9CiAKLSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVICovCiAKICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCiAKQEAgLTEzMjYsNyArMTMyNiw3IEBACiAJc21wX21iX19hZnRlcl91bmxvY2tfbG9jaygpOwogCXJucC0+Ym9vc3Rfa3RocmVhZF90YXNrID0gdDsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0Jc3Auc2NoZWRfcHJpb3JpdHkgPSBSQ1VfQk9PU1RfUFJJTzsKKwlzcC5zY2hlZF9wcmlvcml0eSA9IGt0aHJlYWRfcHJpbzsKIAlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayh0LCBTQ0hFRF9GSUZPLCAmc3ApOwogCXdha2VfdXBfcHJvY2Vzcyh0KTsgLyogZ2V0IHRvIFRBU0tfSU5URVJSVVBUSUJMRSBxdWlja2x5LiAqLwogCXJldHVybiAwOwpAQCAtMTM0Myw3ICsxMzQzLDcgQEAKIHsKIAlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc3A7CiAKLQlzcC5zY2hlZF9wcmlvcml0eSA9IFJDVV9LVEhSRUFEX1BSSU87CisJc3Auc2NoZWRfcHJpb3JpdHkgPSBrdGhyZWFkX3ByaW87CiAJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2soY3VycmVudCwgU0NIRURfRklGTywgJnNwKTsKIH0KIApAQCAtMTUxMiwxMCArMTUxMiwxMCBAQAogICogYW55IGZsYXZvciBvZiBSQ1UuCiAgKi8KICNpZm5kZWYgQ09ORklHX1JDVV9OT0NCX0NQVV9BTEwKLWludCByY3VfbmVlZHNfY3B1KGludCBjcHUsIHVuc2lnbmVkIGxvbmcgKmRlbHRhX2ppZmZpZXMpCitpbnQgcmN1X25lZWRzX2NwdSh1bnNpZ25lZCBsb25nICpkZWx0YV9qaWZmaWVzKQogewogCSpkZWx0YV9qaWZmaWVzID0gVUxPTkdfTUFYOwotCXJldHVybiByY3VfY3B1X2hhc19jYWxsYmFja3MoY3B1LCBOVUxMKTsKKwlyZXR1cm4gcmN1X2NwdV9oYXNfY2FsbGJhY2tzKE5VTEwpOwogfQogI2VuZGlmIC8qICNpZm5kZWYgQ09ORklHX1JDVV9OT0NCX0NQVV9BTEwgKi8KIApAQCAtMTUyMyw3ICsxNTIzLDcgQEAKICAqIEJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgUkNVX0ZBU1RfTk9fSFosIGRvbid0IGJvdGhlciBjbGVhbmluZyB1cAogICogYWZ0ZXIgaXQuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9jbGVhbnVwX2FmdGVyX2lkbGUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9jbGVhbnVwX2FmdGVyX2lkbGUodm9pZCkKIHsKIH0KIApAQCAtMTUzMSw3ICsxNTMxLDcgQEAKICAqIERvIHRoZSBpZGxlLWVudHJ5IGdyYWNlLXBlcmlvZCB3b3JrLCB3aGljaCwgYmVjYXVzZSBDT05GSUdfUkNVX0ZBU1RfTk9fSFo9biwKICAqIGlzIG5vdGhpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVwYXJlX2Zvcl9pZGxlKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlcGFyZV9mb3JfaWRsZSh2b2lkKQogewogfQogCkBAIC0xNjI0LDE1ICsxNjI0LDE1IEBACiAgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBkaXNhYmxlZCBpbnRlcnJ1cHRzLgogICovCiAjaWZuZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMCi1pbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1LCB1bnNpZ25lZCBsb25nICpkaikKK2ludCByY3VfbmVlZHNfY3B1KHVuc2lnbmVkIGxvbmcgKmRqKQogewotCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSAmcGVyX2NwdShyY3VfZHludGlja3MsIGNwdSk7CisJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9IHRoaXNfY3B1X3B0cigmcmN1X2R5bnRpY2tzKTsKIAogCS8qIFNuYXBzaG90IHRvIGRldGVjdCBsYXRlciBwb3N0aW5nIG9mIG5vbi1sYXp5IGNhbGxiYWNrLiAqLwogCXJkdHAtPm5vbmxhenlfcG9zdGVkX3NuYXAgPSByZHRwLT5ub25sYXp5X3Bvc3RlZDsKIAogCS8qIElmIG5vIGNhbGxiYWNrcywgUkNVIGRvZXNuJ3QgbmVlZCB0aGUgQ1BVLiAqLwotCWlmICghcmN1X2NwdV9oYXNfY2FsbGJhY2tzKGNwdSwgJnJkdHAtPmFsbF9sYXp5KSkgeworCWlmICghcmN1X2NwdV9oYXNfY2FsbGJhY2tzKCZyZHRwLT5hbGxfbGF6eSkpIHsKIAkJKmRqID0gVUxPTkdfTUFYOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNjY2LDEyICsxNjY2LDEyIEBACiAgKgogICogVGhlIGNhbGxlciBtdXN0IGhhdmUgZGlzYWJsZWQgaW50ZXJydXB0cy4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZXBhcmVfZm9yX2lkbGUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9wcmVwYXJlX2Zvcl9pZGxlKHZvaWQpCiB7CiAjaWZuZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVfQUxMCiAJYm9vbCBuZWVkd2FrZTsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKLQlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gJnBlcl9jcHUocmN1X2R5bnRpY2tzLCBjcHUpOworCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSB0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyk7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAJc3RydWN0IHJjdV9zdGF0ZSAqcnNwOwogCWludCB0bmU7CkBAIC0xNjc5LDcgKzE2NzksNyBAQAogCS8qIEhhbmRsZSBub2h6IGVuYWJsZW1lbnQgc3dpdGNoZXMgY29uc2VydmF0aXZlbHkuICovCiAJdG5lID0gQUNDRVNTX09OQ0UodGlja19ub2h6X2FjdGl2ZSk7CiAJaWYgKHRuZSAhPSByZHRwLT50aWNrX25vaHpfZW5hYmxlZF9zbmFwKSB7Ci0JCWlmIChyY3VfY3B1X2hhc19jYWxsYmFja3MoY3B1LCBOVUxMKSkKKwkJaWYgKHJjdV9jcHVfaGFzX2NhbGxiYWNrcyhOVUxMKSkKIAkJCWludm9rZV9yY3VfY29yZSgpOyAvKiBmb3JjZSBub2h6IHRvIHNlZSB1cGRhdGUuICovCiAJCXJkdHAtPnRpY2tfbm9oel9lbmFibGVkX3NuYXAgPSB0bmU7CiAJCXJldHVybjsKQEAgLTE2ODgsNyArMTY4OCw3IEBACiAJCXJldHVybjsKIAogCS8qIElmIHRoaXMgaXMgYSBuby1DQnMgQ1BVLCBubyBjYWxsYmFja3MsIGp1c3QgcmV0dXJuLiAqLwotCWlmIChyY3VfaXNfbm9jYl9jcHUoY3B1KSkKKwlpZiAocmN1X2lzX25vY2JfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0xNzEyLDcgKzE3MTIsNyBAQAogCQlyZXR1cm47CiAJcmR0cC0+bGFzdF9hY2NlbGVyYXRlID0gamlmZmllczsKIAlmb3JfZWFjaF9yY3VfZmxhdm9yKHJzcCkgewotCQlyZHAgPSBwZXJfY3B1X3B0cihyc3AtPnJkYSwgY3B1KTsKKwkJcmRwID0gdGhpc19jcHVfcHRyKHJzcC0+cmRhKTsKIAkJaWYgKCEqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdKQogCQkJY29udGludWU7CiAJCXJucCA9IHJkcC0+bXlub2RlOwpAQCAtMTczMSwxMCArMTczMSwxMCBAQAogICogYW55IGdyYWNlIHBlcmlvZHMgdGhhdCBlbGFwc2VkIHdoaWxlIHRoZSBDUFUgd2FzIGlkbGUsIGFuZCBpZiBhbnkKICAqIGNhbGxiYWNrcyBhcmUgbm93IHJlYWR5IHRvIGludm9rZSwgaW5pdGlhdGUgaW52b2NhdGlvbi4KICAqLwotc3RhdGljIHZvaWQgcmN1X2NsZWFudXBfYWZ0ZXJfaWRsZShpbnQgY3B1KQorc3RhdGljIHZvaWQgcmN1X2NsZWFudXBfYWZ0ZXJfaWRsZSh2b2lkKQogewogI2lmbmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVX0FMTAotCWlmIChyY3VfaXNfbm9jYl9jcHUoY3B1KSkKKwlpZiAocmN1X2lzX25vY2JfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkpCiAJCXJldHVybjsKIAlpZiAocmN1X3RyeV9hZHZhbmNlX2FsbF9jYnMoKSkKIAkJaW52b2tlX3JjdV9jb3JlKCk7CkBAIC0yNTczLDkgKzI1NzMsMTMgQEAKIAkJCXJkcC0+bm9jYl9sZWFkZXIgPSByZHBfc3Bhd247CiAJCQlpZiAocmRwX2xhc3QgJiYgcmRwICE9IHJkcF9zcGF3bikKIAkJCQlyZHBfbGFzdC0+bm9jYl9uZXh0X2ZvbGxvd2VyID0gcmRwOwotCQkJcmRwX2xhc3QgPSByZHA7Ci0JCQlyZHAgPSByZHAtPm5vY2JfbmV4dF9mb2xsb3dlcjsKLQkJCXJkcF9sYXN0LT5ub2NiX25leHRfZm9sbG93ZXIgPSBOVUxMOworCQkJaWYgKHJkcCA9PSByZHBfc3Bhd24pIHsKKwkJCQlyZHAgPSByZHAtPm5vY2JfbmV4dF9mb2xsb3dlcjsKKwkJCX0gZWxzZSB7CisJCQkJcmRwX2xhc3QgPSByZHA7CisJCQkJcmRwID0gcmRwLT5ub2NiX25leHRfZm9sbG93ZXI7CisJCQkJcmRwX2xhc3QtPm5vY2JfbmV4dF9mb2xsb3dlciA9IE5VTEw7CisJCQl9CiAJCX0gd2hpbGUgKHJkcCk7CiAJCXJkcF9zcGF3bi0+bm9jYl9uZXh0X2ZvbGxvd2VyID0gcmRwX29sZF9sZWFkZXI7CiAJfQpAQCAtMjc2MSw5ICsyNzY1LDEwIEBACiAgKiB0byBkZXRlY3QgZnVsbC1zeXN0ZW0gaWRsZSBzdGF0ZXMsIG5vdCBSQ1UgcXVpZXNjZW50IHN0YXRlcyBhbmQgZ3JhY2UKICAqIHBlcmlvZHMuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBkaXNhYmxlZCBpbnRlcnJ1cHRzLgogICovCi1zdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9lbnRlcihzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwLCBpbnQgaXJxKQorc3RhdGljIHZvaWQgcmN1X3N5c2lkbGVfZW50ZXIoaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGo7CisJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9IHRoaXNfY3B1X3B0cigmcmN1X2R5bnRpY2tzKTsKIAogCS8qIElmIHRoZXJlIGFyZSBubyBub2h6X2Z1bGw9IENQVXMsIG5vIG5lZWQgdG8gdHJhY2sgdGhpcy4gKi8KIAlpZiAoIXRpY2tfbm9oel9mdWxsX2VuYWJsZWQoKSkKQEAgLTI4MzIsOCArMjgzNywxMCBAQAogICogdXNlcm1vZGUgZXhlY3V0aW9uIGRvZXMgLW5vdC0gY291bnQgYXMgaWRsZSBoZXJlISAgVGhlIGNhbGxlciBtdXN0CiAgKiBoYXZlIGRpc2FibGVkIGludGVycnVwdHMuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9zeXNpZGxlX2V4aXQoc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCwgaW50IGlycSkKK3N0YXRpYyB2b2lkIHJjdV9zeXNpZGxlX2V4aXQoaW50IGlycSkKIHsKKwlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gdGhpc19jcHVfcHRyKCZyY3VfZHludGlja3MpOworCiAJLyogSWYgdGhlcmUgYXJlIG5vIG5vaHpfZnVsbD0gQ1BVcywgbm8gbmVlZCB0byB0cmFjayB0aGlzLiAqLwogCWlmICghdGlja19ub2h6X2Z1bGxfZW5hYmxlZCgpKQogCQlyZXR1cm47CkBAIC0zMTI3LDExICszMTM0LDExIEBACiAKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfTk9fSFpfRlVMTF9TWVNJRExFICovCiAKLXN0YXRpYyB2b2lkIHJjdV9zeXNpZGxlX2VudGVyKHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGludCBpcnEpCitzdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9lbnRlcihpbnQgaXJxKQogewogfQogCi1zdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9leGl0KHN0cnVjdCByY3VfZHludGlja3MgKnJkdHAsIGludCBpcnEpCitzdGF0aWMgdm9pZCByY3Vfc3lzaWRsZV9leGl0KGludCBpcnEpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdXBkYXRlLmMgYi9rZXJuZWwvcmN1L3VwZGF0ZS5jCmluZGV4IDNlZjhiYTUuLmUwZDMxYTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdS91cGRhdGUuYwpAQCAtMzA2LDcgKzMwNiw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyY3VoZWFkX2RlYnVnX2Rlc2NyKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19SQ1VfVFJBQ0UpCisjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1BSRUVNUFRfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19SQ1VfVFJBQ0UpCiB2b2lkIGRvX3RyYWNlX3JjdV90b3J0dXJlX3JlYWQoY29uc3QgY2hhciAqcmN1dG9ydHVyZW5hbWUsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2VjcywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNfb2xkLCB1bnNpZ25lZCBsb25nIGMpCkBAIC01MzEsNyArNTMxLDggQEAKIAlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQ7CiAJTElTVF9IRUFEKHJjdV90YXNrc19ob2xkb3V0cyk7CiAKLQkvKiBGSVhNRTogQWRkIGhvdXNla2VlcGluZyBhZmZpbml0eS4gKi8KKwkvKiBSdW4gb24gaG91c2VrZWVwaW5nIENQVXMgYnkgZGVmYXVsdC4gIFN5c2FkbSBjYW4gbW92ZSBpZiBkZXNpcmVkLiAqLworCWhvdXNla2VlcGluZ19hZmZpbmUoY3VycmVudCk7CiAKIAkvKgogCSAqIEVhY2ggcGFzcyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgbG9vcCBtYWtlcyBvbmUgY2hlY2sgZm9yCkBAIC02OTAsMyArNjkxLDg3IEBACiB9CiAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RBU0tTX1JDVSAqLworCisjaWZkZWYgQ09ORklHX1BST1ZFX1JDVQorCisvKgorICogRWFybHkgYm9vdCBzZWxmIHRlc3QgcGFyYW1ldGVycywgb25lIGZvciBlYWNoIGZsYXZvcgorICovCitzdGF0aWMgYm9vbCByY3Vfc2VsZl90ZXN0Oworc3RhdGljIGJvb2wgcmN1X3NlbGZfdGVzdF9iaDsKK3N0YXRpYyBib29sIHJjdV9zZWxmX3Rlc3Rfc2NoZWQ7CisKK21vZHVsZV9wYXJhbShyY3Vfc2VsZl90ZXN0LCBib29sLCAwNDQ0KTsKK21vZHVsZV9wYXJhbShyY3Vfc2VsZl90ZXN0X2JoLCBib29sLCAwNDQ0KTsKK21vZHVsZV9wYXJhbShyY3Vfc2VsZl90ZXN0X3NjaGVkLCBib29sLCAwNDQ0KTsKKworc3RhdGljIGludCByY3Vfc2VsZl90ZXN0X2NvdW50ZXI7CisKK3N0YXRpYyB2b2lkIHRlc3RfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpyKQoreworCXJjdV9zZWxmX3Rlc3RfY291bnRlcisrOworCXByX2luZm8oIlJDVSB0ZXN0IGNhbGxiYWNrIGV4ZWN1dGVkICVkXG4iLCByY3Vfc2VsZl90ZXN0X2NvdW50ZXIpOworfQorCitzdGF0aWMgdm9pZCBlYXJseV9ib290X3Rlc3RfY2FsbF9yY3Uodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IHJjdV9oZWFkIGhlYWQ7CisKKwljYWxsX3JjdSgmaGVhZCwgdGVzdF9jYWxsYmFjayk7Cit9CisKK3N0YXRpYyB2b2lkIGVhcmx5X2Jvb3RfdGVzdF9jYWxsX3JjdV9iaCh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgcmN1X2hlYWQgaGVhZDsKKworCWNhbGxfcmN1X2JoKCZoZWFkLCB0ZXN0X2NhbGxiYWNrKTsKK30KKworc3RhdGljIHZvaWQgZWFybHlfYm9vdF90ZXN0X2NhbGxfcmN1X3NjaGVkKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCByY3VfaGVhZCBoZWFkOworCisJY2FsbF9yY3Vfc2NoZWQoJmhlYWQsIHRlc3RfY2FsbGJhY2spOworfQorCit2b2lkIHJjdV9lYXJseV9ib290X3Rlc3RzKHZvaWQpCit7CisJcHJfaW5mbygiUnVubmluZyBSQ1Ugc2VsZiB0ZXN0c1xuIik7CisKKwlpZiAocmN1X3NlbGZfdGVzdCkKKwkJZWFybHlfYm9vdF90ZXN0X2NhbGxfcmN1KCk7CisJaWYgKHJjdV9zZWxmX3Rlc3RfYmgpCisJCWVhcmx5X2Jvb3RfdGVzdF9jYWxsX3JjdV9iaCgpOworCWlmIChyY3Vfc2VsZl90ZXN0X3NjaGVkKQorCQllYXJseV9ib290X3Rlc3RfY2FsbF9yY3Vfc2NoZWQoKTsKK30KKworc3RhdGljIGludCByY3VfdmVyaWZ5X2Vhcmx5X2Jvb3RfdGVzdHModm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZWFybHlfYm9vdF90ZXN0X2NvdW50ZXIgPSAwOworCisJaWYgKHJjdV9zZWxmX3Rlc3QpIHsKKwkJZWFybHlfYm9vdF90ZXN0X2NvdW50ZXIrKzsKKwkJcmN1X2JhcnJpZXIoKTsKKwl9CisJaWYgKHJjdV9zZWxmX3Rlc3RfYmgpIHsKKwkJZWFybHlfYm9vdF90ZXN0X2NvdW50ZXIrKzsKKwkJcmN1X2JhcnJpZXJfYmgoKTsKKwl9CisJaWYgKHJjdV9zZWxmX3Rlc3Rfc2NoZWQpIHsKKwkJZWFybHlfYm9vdF90ZXN0X2NvdW50ZXIrKzsKKwkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKKwl9CisKKwlpZiAocmN1X3NlbGZfdGVzdF9jb3VudGVyICE9IGVhcmx5X2Jvb3RfdGVzdF9jb3VudGVyKSB7CisJCVdBUk5fT04oMSk7CisJCXJldCA9IC0xOworCX0KKworCXJldHVybiByZXQ7Cit9CitsYXRlX2luaXRjYWxsKHJjdV92ZXJpZnlfZWFybHlfYm9vdF90ZXN0cyk7CisjZWxzZQordm9pZCByY3VfZWFybHlfYm9vdF90ZXN0cyh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19QUk9WRV9SQ1UgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNfY291bnRlci5jIGIva2VybmVsL3Jlc19jb3VudGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3OTExMzAuLjAwMDAwMDAKLS0tIGEva2VybmVsL3Jlc19jb3VudGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotLyoKLSAqIHJlc291cmNlIGNncm91cHMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNyBPcGVuVlogU1dzb2Z0IEluYwotICoKLSAqIEF1dGhvcjogUGF2ZWwgRW1lbGlhbm92IDx4ZW11bEBvcGVudnoub3JnPgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Jlc19jb3VudGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLXZvaWQgcmVzX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHN0cnVjdCByZXNfY291bnRlciAqcGFyZW50KQotewotCXNwaW5fbG9ja19pbml0KCZjb3VudGVyLT5sb2NrKTsKLQljb3VudGVyLT5saW1pdCA9IFJFU19DT1VOVEVSX01BWDsKLQljb3VudGVyLT5zb2Z0X2xpbWl0ID0gUkVTX0NPVU5URVJfTUFYOwotCWNvdW50ZXItPnBhcmVudCA9IHBhcmVudDsKLX0KLQotc3RhdGljIHU2NCByZXNfY291bnRlcl91bmNoYXJnZV9sb2NrZWQoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlpZiAoV0FSTl9PTihjb3VudGVyLT51c2FnZSA8IHZhbCkpCi0JCXZhbCA9IGNvdW50ZXItPnVzYWdlOwotCi0JY291bnRlci0+dXNhZ2UgLT0gdmFsOwotCXJldHVybiBjb3VudGVyLT51c2FnZTsKLX0KLQotc3RhdGljIGludCByZXNfY291bnRlcl9jaGFyZ2VfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCBib29sIGZvcmNlKQotewotCWludCByZXQgPSAwOwotCi0JaWYgKGNvdW50ZXItPnVzYWdlICsgdmFsID4gY291bnRlci0+bGltaXQpIHsKLQkJY291bnRlci0+ZmFpbGNudCsrOwotCQlyZXQgPSAtRU5PTUVNOwotCQlpZiAoIWZvcmNlKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQljb3VudGVyLT51c2FnZSArPSB2YWw7Ci0JaWYgKGNvdW50ZXItPnVzYWdlID4gY291bnRlci0+bWF4X3VzYWdlKQotCQljb3VudGVyLT5tYXhfdXNhZ2UgPSBjb3VudGVyLT51c2FnZTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9fcmVzX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCQkJc3RydWN0IHJlc19jb3VudGVyICoqbGltaXRfZmFpbF9hdCwgYm9vbCBmb3JjZSkKLXsKLQlpbnQgcmV0LCByOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJlc19jb3VudGVyICpjLCAqdTsKLQotCXIgPSByZXQgPSAwOwotCSpsaW1pdF9mYWlsX2F0ID0gTlVMTDsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yIChjID0gY291bnRlcjsgYyAhPSBOVUxMOyBjID0gYy0+cGFyZW50KSB7Ci0JCXNwaW5fbG9jaygmYy0+bG9jayk7Ci0JCXIgPSByZXNfY291bnRlcl9jaGFyZ2VfbG9ja2VkKGMsIHZhbCwgZm9yY2UpOwotCQlzcGluX3VubG9jaygmYy0+bG9jayk7Ci0JCWlmIChyIDwgMCAmJiAhcmV0KSB7Ci0JCQlyZXQgPSByOwotCQkJKmxpbWl0X2ZhaWxfYXQgPSBjOwotCQkJaWYgKCFmb3JjZSkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChyZXQgPCAwICYmICFmb3JjZSkgewotCQlmb3IgKHUgPSBjb3VudGVyOyB1ICE9IGM7IHUgPSB1LT5wYXJlbnQpIHsKLQkJCXNwaW5fbG9jaygmdS0+bG9jayk7Ci0JCQlyZXNfY291bnRlcl91bmNoYXJnZV9sb2NrZWQodSwgdmFsKTsKLQkJCXNwaW5fdW5sb2NrKCZ1LT5sb2NrKTsKLQkJfQotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgcmVzX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKipsaW1pdF9mYWlsX2F0KQotewotCXJldHVybiBfX3Jlc19jb3VudGVyX2NoYXJnZShjb3VudGVyLCB2YWwsIGxpbWl0X2ZhaWxfYXQsIGZhbHNlKTsKLX0KLQotaW50IHJlc19jb3VudGVyX2NoYXJnZV9ub2ZhaWwoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJCSAgICAgIHN0cnVjdCByZXNfY291bnRlciAqKmxpbWl0X2ZhaWxfYXQpCi17Ci0JcmV0dXJuIF9fcmVzX2NvdW50ZXJfY2hhcmdlKGNvdW50ZXIsIHZhbCwgbGltaXRfZmFpbF9hdCwgdHJ1ZSk7Ci19Ci0KLXU2NCByZXNfY291bnRlcl91bmNoYXJnZV91bnRpbChzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsCi0JCQkgICAgICAgc3RydWN0IHJlc19jb3VudGVyICp0b3AsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmM7Ci0JdTY0IHJldCA9IDA7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yIChjID0gY291bnRlcjsgYyAhPSB0b3A7IGMgPSBjLT5wYXJlbnQpIHsKLQkJdTY0IHI7Ci0JCXNwaW5fbG9jaygmYy0+bG9jayk7Ci0JCXIgPSByZXNfY291bnRlcl91bmNoYXJnZV9sb2NrZWQoYywgdmFsKTsKLQkJaWYgKGMgPT0gY291bnRlcikKLQkJCXJldCA9IHI7Ci0JCXNwaW5fdW5sb2NrKCZjLT5sb2NrKTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLXU2NCByZXNfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXJldHVybiByZXNfY291bnRlcl91bmNoYXJnZV91bnRpbChjb3VudGVyLCBOVUxMLCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyAqCi1yZXNfY291bnRlcl9tZW1iZXIoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCBpbnQgbWVtYmVyKQotewotCXN3aXRjaCAobWVtYmVyKSB7Ci0JY2FzZSBSRVNfVVNBR0U6Ci0JCXJldHVybiAmY291bnRlci0+dXNhZ2U7Ci0JY2FzZSBSRVNfTUFYX1VTQUdFOgotCQlyZXR1cm4gJmNvdW50ZXItPm1heF91c2FnZTsKLQljYXNlIFJFU19MSU1JVDoKLQkJcmV0dXJuICZjb3VudGVyLT5saW1pdDsKLQljYXNlIFJFU19GQUlMQ05UOgotCQlyZXR1cm4gJmNvdW50ZXItPmZhaWxjbnQ7Ci0JY2FzZSBSRVNfU09GVF9MSU1JVDoKLQkJcmV0dXJuICZjb3VudGVyLT5zb2Z0X2xpbWl0OwotCX07Ci0KLQlCVUcoKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3NpemVfdCByZXNfY291bnRlcl9yZWFkKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgaW50IG1lbWJlciwKLQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcG9zLAotCQlpbnQgKCpyZWFkX3N0cmF0ZWd5KSh1bnNpZ25lZCBsb25nIGxvbmcgdmFsLCBjaGFyICpzdF9idWYpKQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyAqdmFsOwotCWNoYXIgYnVmWzY0XSwgKnM7Ci0KLQlzID0gYnVmOwotCXZhbCA9IHJlc19jb3VudGVyX21lbWJlcihjb3VudGVyLCBtZW1iZXIpOwotCWlmIChyZWFkX3N0cmF0ZWd5KQotCQlzICs9IHJlYWRfc3RyYXRlZ3koKnZhbCwgcyk7Ci0JZWxzZQotCQlzICs9IHNwcmludGYocywgIiVsbHVcbiIsICp2YWwpOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcigodm9pZCBfX3VzZXIgKil1c2VyYnVmLCBuYnl0ZXMsCi0JCQlwb3MsIGJ1ZiwgcyAtIGJ1Zik7Ci19Ci0KLSNpZiBCSVRTX1BFUl9MT05HID09IDMyCi11NjQgcmVzX2NvdW50ZXJfcmVhZF91NjQoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCBpbnQgbWVtYmVyKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTY0IHJldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gKnJlc19jb3VudGVyX21lbWJlcihjb3VudGVyLCBtZW1iZXIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0jZWxzZQotdTY0IHJlc19jb3VudGVyX3JlYWRfdTY0KHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgaW50IG1lbWJlcikKLXsKLQlyZXR1cm4gKnJlc19jb3VudGVyX21lbWJlcihjb3VudGVyLCBtZW1iZXIpOwotfQotI2VuZGlmCi0KLWludCByZXNfY291bnRlcl9tZW1wYXJzZV93cml0ZV9zdHJhdGVneShjb25zdCBjaGFyICpidWYsCi0JCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyAqcmVzcCkKLXsKLQljaGFyICplbmQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHJlczsKLQotCS8qIHJldHVybiBSRVNfQ09VTlRFUl9NQVgodW5saW1pdGVkKSBpZiAiLTEiIGlzIHNwZWNpZmllZCAqLwotCWlmICgqYnVmID09ICctJykgewotCQlpbnQgcmMgPSBrc3RydG91bGwoYnVmICsgMSwgMTAsICZyZXMpOwotCi0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQkJaWYgKHJlcyAhPSAxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCSpyZXNwID0gUkVTX0NPVU5URVJfTUFYOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXMgPSBtZW1wYXJzZShidWYsICZlbmQpOwotCWlmICgqZW5kICE9ICdcMCcpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKFBBR0VfQUxJR04ocmVzKSA+PSByZXMpCi0JCXJlcyA9IFBBR0VfQUxJR04ocmVzKTsKLQllbHNlCi0JCXJlcyA9IFJFU19DT1VOVEVSX01BWDsKLQotCSpyZXNwID0gcmVzOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29tcGxldGlvbi5jIGIva2VybmVsL3NjaGVkL2NvbXBsZXRpb24uYwppbmRleCBhNjNmNGRjLi42MDdmODUyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29tcGxldGlvbi5jCisrKyBiL2tlcm5lbC9zY2hlZC9jb21wbGV0aW9uLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogICoKICAqIFRoaXMgd2FpdHMgdG8gYmUgc2lnbmFsZWQgZm9yIGNvbXBsZXRpb24gb2YgYSBzcGVjaWZpYyB0YXNrLiBJdCBpcyBOT1QKICAqIGludGVycnVwdGlibGUgYW5kIHRoZXJlIGlzIG5vIHRpbWVvdXQuIFRoZSBjYWxsZXIgaXMgYWNjb3VudGVkIGFzIHdhaXRpbmcKLSAqIGZvciBJTy4KKyAqIGZvciBJTyAod2hpY2ggdHJhZGl0aW9uYWxseSBtZWFucyBibGtpbyBvbmx5KS4KICAqLwogdm9pZCBfX3NjaGVkIHdhaXRfZm9yX2NvbXBsZXRpb25faW8oc3RydWN0IGNvbXBsZXRpb24gKngpCiB7CkBAIC0xNjMsNyArMTYzLDggQEAKICAqCiAgKiBUaGlzIHdhaXRzIGZvciBlaXRoZXIgYSBjb21wbGV0aW9uIG9mIGEgc3BlY2lmaWMgdGFzayB0byBiZSBzaWduYWxlZCBvciBmb3IgYQogICogc3BlY2lmaWVkIHRpbWVvdXQgdG8gZXhwaXJlLiBUaGUgdGltZW91dCBpcyBpbiBqaWZmaWVzLiBJdCBpcyBub3QKLSAqIGludGVycnVwdGlibGUuIFRoZSBjYWxsZXIgaXMgYWNjb3VudGVkIGFzIHdhaXRpbmcgZm9yIElPLgorICogaW50ZXJydXB0aWJsZS4gVGhlIGNhbGxlciBpcyBhY2NvdW50ZWQgYXMgd2FpdGluZyBmb3IgSU8gKHdoaWNoIHRyYWRpdGlvbmFsbHkKKyAqIG1lYW5zIGJsa2lvIG9ubHkpLgogICoKICAqIFJldHVybjogMCBpZiB0aW1lZCBvdXQsIGFuZCBwb3NpdGl2ZSAoYXQgbGVhc3QgMSwgb3IgbnVtYmVyIG9mIGppZmZpZXMgbGVmdAogICogdGlsbCB0aW1lb3V0KSBpZiBjb21wbGV0ZWQuCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCAyNGJlYjliLi5iNTc5N2I3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTEwMDgsNiArMTAwOCw5IEBACiAJcmV0dXJuIGNwdV9jdXJyKHRhc2tfY3B1KHApKSA9PSBwOwogfQogCisvKgorICogQ2FuIGRyb3AgcnEtPmxvY2sgYmVjYXVzZSBmcm9tIHNjaGVkX2NsYXNzOjpzd2l0Y2hlZF9mcm9tKCkgbWV0aG9kcyBkcm9wIGl0LgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfY2xhc3NfY2hhbmdlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzcywKIAkJCQkgICAgICAgaW50IG9sZHByaW8pCkBAIC0xMDE1LDYgKzEwMTgsNyBAQAogCWlmIChwcmV2X2NsYXNzICE9IHAtPnNjaGVkX2NsYXNzKSB7CiAJCWlmIChwcmV2X2NsYXNzLT5zd2l0Y2hlZF9mcm9tKQogCQkJcHJldl9jbGFzcy0+c3dpdGNoZWRfZnJvbShycSwgcCk7CisJCS8qIFBvc3NibGUgcnEtPmxvY2sgJ2hvbGUnLiAgKi8KIAkJcC0+c2NoZWRfY2xhc3MtPnN3aXRjaGVkX3RvKHJxLCBwKTsKIAl9IGVsc2UgaWYgKG9sZHByaW8gIT0gcC0+cHJpbyB8fCBkbF90YXNrKHApKQogCQlwLT5zY2hlZF9jbGFzcy0+cHJpb19jaGFuZ2VkKHJxLCBwLCBvbGRwcmlvKTsKQEAgLTEwNTQsNyArMTA1OCw3IEBACiAJICogdHR3dSgpIHdpbGwgc29ydCBvdXQgdGhlIHBsYWNlbWVudC4KIAkgKi8KIAlXQVJOX09OX09OQ0UocC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HICYmIHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HICYmCi0JCQkhKHRhc2tfcHJlZW1wdF9jb3VudChwKSAmIFBSRUVNUFRfQUNUSVZFKSk7CisJCQkhcC0+b25fcnEpOwogCiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKIAkvKgpAQCAtMTQwNyw3ICsxNDExLDggQEAKIHN0YXRpYyBpbmxpbmUKIGludCBzZWxlY3RfdGFza19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUsIGludCBzZF9mbGFncywgaW50IHdha2VfZmxhZ3MpCiB7Ci0JY3B1ID0gcC0+c2NoZWRfY2xhc3MtPnNlbGVjdF90YXNrX3JxKHAsIGNwdSwgc2RfZmxhZ3MsIHdha2VfZmxhZ3MpOworCWlmIChwLT5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQljcHUgPSBwLT5zY2hlZF9jbGFzcy0+c2VsZWN0X3Rhc2tfcnEocCwgY3B1LCBzZF9mbGFncywgd2FrZV9mbGFncyk7CiAKIAkvKgogCSAqIEluIG9yZGVyIG5vdCB0byBjYWxsIHNldF90YXNrX2NwdSgpIG9uIGEgYmxvY2tpbmcgdGFzayB3ZSBuZWVkCkBAIC0xNjIzLDggKzE2MjgsMTAgQEAKIAlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghaXNfaWRsZV90YXNrKHJxLT5jdXJyKSkKLQkJcmV0dXJuOworCXJjdV9yZWFkX2xvY2soKTsKKworCWlmICghaXNfaWRsZV90YXNrKHJjdV9kZXJlZmVyZW5jZShycS0+Y3VycikpKQorCQlnb3RvIG91dDsKIAogCWlmIChzZXRfbnJfaWZfcG9sbGluZyhycS0+aWRsZSkpIHsKIAkJdHJhY2Vfc2NoZWRfd2FrZV9pZGxlX3dpdGhvdXRfaXBpKGNwdSk7CkBAIC0xNjM1LDYgKzE2NDIsOSBAQAogCQkvKiBFbHNlIGNwdSBpcyBub3QgaW4gaWRsZSwgZG8gbm90aGluZyBoZXJlICovCiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogCX0KKworb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBib29sIGNwdXNfc2hhcmVfY2FjaGUoaW50IHRoaXNfY3B1LCBpbnQgdGhhdF9jcHUpCkBAIC0xODUzLDEyICsxODYzLDEwIEBACiAJcC0+bnVtYV9zY2FuX3NlcSA9IHAtPm1tID8gcC0+bW0tPm51bWFfc2Nhbl9zZXEgOiAwOwogCXAtPm51bWFfc2Nhbl9wZXJpb2QgPSBzeXNjdGxfbnVtYV9iYWxhbmNpbmdfc2Nhbl9kZWxheTsKIAlwLT5udW1hX3dvcmsubmV4dCA9ICZwLT5udW1hX3dvcms7Ci0JcC0+bnVtYV9mYXVsdHNfbWVtb3J5ID0gTlVMTDsKLQlwLT5udW1hX2ZhdWx0c19idWZmZXJfbWVtb3J5ID0gTlVMTDsKKwlwLT5udW1hX2ZhdWx0cyA9IE5VTEw7CiAJcC0+bGFzdF90YXNrX251bWFfcGxhY2VtZW50ID0gMDsKIAlwLT5sYXN0X3N1bV9leGVjX3J1bnRpbWUgPSAwOwogCi0JSU5JVF9MSVNUX0hFQUQoJnAtPm51bWFfZW50cnkpOwogCXAtPm51bWFfZ3JvdXAgPSBOVUxMOwogI2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqLwogfQpAQCAtMjAzNCwyNSArMjA0Miw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZQotdm9pZCBfX2RsX2NsZWFyKHN0cnVjdCBkbF9idyAqZGxfYiwgdTY0IHRza19idykKLXsKLQlkbF9iLT50b3RhbF9idyAtPSB0c2tfYnc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgX19kbF9hZGQoc3RydWN0IGRsX2J3ICpkbF9iLCB1NjQgdHNrX2J3KQotewotCWRsX2ItPnRvdGFsX2J3ICs9IHRza19idzsKLX0KLQotc3RhdGljIGlubGluZQotYm9vbCBfX2RsX292ZXJmbG93KHN0cnVjdCBkbF9idyAqZGxfYiwgaW50IGNwdXMsIHU2NCBvbGRfYncsIHU2NCBuZXdfYncpCi17Ci0JcmV0dXJuIGRsX2ItPmJ3ICE9IC0xICYmCi0JICAgICAgIGRsX2ItPmJ3ICogY3B1cyA8IGRsX2ItPnRvdGFsX2J3IC0gb2xkX2J3ICsgbmV3X2J3OwotfQotCiAvKgogICogV2UgbXVzdCBiZSBzdXJlIHRoYXQgYWNjZXB0aW5nIGEgbmV3IHRhc2sgKG9yIGFsbG93aW5nIGNoYW5naW5nIHRoZQogICogcGFyYW1ldGVycyBvZiBhbiBleGlzdGluZyBvbmUpIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgYmFuZHdpZHRoCkBAIC0yMjIwLDcgKzIyMDksNiBAQAogCiAvKioKICAqIGZpbmlzaF90YXNrX3N3aXRjaCAtIGNsZWFuIHVwIGFmdGVyIGEgdGFzay1zd2l0Y2gKLSAqIEBycTogcnVucXVldWUgYXNzb2NpYXRlZCB3aXRoIHRhc2stc3dpdGNoCiAgKiBAcHJldjogdGhlIHRocmVhZCB3ZSBqdXN0IHN3aXRjaGVkIGF3YXkgZnJvbS4KICAqCiAgKiBmaW5pc2hfdGFza19zd2l0Y2ggbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGNvbnRleHQgc3dpdGNoLCBwYWlyZWQKQEAgLTIyMzIsMTAgKzIyMjAsMTYgQEAKICAqIHNvLCB3ZSBmaW5pc2ggdGhhdCBoZXJlIG91dHNpZGUgb2YgdGhlIHJ1bnF1ZXVlIGxvY2suIChEb2luZyBpdAogICogd2l0aCB0aGUgbG9jayBoZWxkIGNhbiBjYXVzZSBkZWFkbG9ja3M7IHNlZSBzY2hlZHVsZSgpIGZvcgogICogZGV0YWlscy4pCisgKgorICogVGhlIGNvbnRleHQgc3dpdGNoIGhhdmUgZmxpcHBlZCB0aGUgc3RhY2sgZnJvbSB1bmRlciB1cyBhbmQgcmVzdG9yZWQgdGhlCisgKiBsb2NhbCB2YXJpYWJsZXMgd2hpY2ggd2VyZSBzYXZlZCB3aGVuIHRoaXMgdGFzayBjYWxsZWQgc2NoZWR1bGUoKSBpbiB0aGUKKyAqIHBhc3QuIHByZXYgPT0gY3VycmVudCBpcyBzdGlsbCBjb3JyZWN0IGJ1dCB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoaXNfcnEKKyAqIGJlY2F1c2UgcHJldiBtYXkgaGF2ZSBtb3ZlZCB0byBhbm90aGVyIENQVS4KICAqLwotc3RhdGljIHZvaWQgZmluaXNoX3Rhc2tfc3dpdGNoKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKK3N0YXRpYyBzdHJ1Y3QgcnEgKmZpbmlzaF90YXNrX3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCiAJX19yZWxlYXNlcyhycS0+bG9jaykKIHsKKwlzdHJ1Y3QgcnEgKnJxID0gdGhpc19ycSgpOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcnEtPnByZXZfbW07CiAJbG9uZyBwcmV2X3N0YXRlOwogCkBAIC0yMjc1LDYgKzIyNjksNyBAQAogCX0KIAogCXRpY2tfbm9oel90YXNrX3N3aXRjaChjdXJyZW50KTsKKwlyZXR1cm4gcnE7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0yMzA5LDI1ICsyMzA0LDIyIEBACiBhc21saW5rYWdlIF9fdmlzaWJsZSB2b2lkIHNjaGVkdWxlX3RhaWwoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQogCV9fcmVsZWFzZXMocnEtPmxvY2spCiB7Ci0Jc3RydWN0IHJxICpycSA9IHRoaXNfcnEoKTsKKwlzdHJ1Y3QgcnEgKnJxOwogCi0JZmluaXNoX3Rhc2tfc3dpdGNoKHJxLCBwcmV2KTsKLQotCS8qCi0JICogRklYTUU6IGRvIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgcnEgYmVpbmcgaW52YWxpZGF0ZWQgYnkgdGhlCi0JICogdGFza19zd2l0Y2g/Ci0JICovCisJLyogZmluaXNoX3Rhc2tfc3dpdGNoKCkgZHJvcHMgcnEtPmxvY2sgYW5kIGVuYWJsZXMgcHJlZW10aW9uICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcnEgPSBmaW5pc2hfdGFza19zd2l0Y2gocHJldik7CiAJcG9zdF9zY2hlZHVsZShycSk7CisJcHJlZW1wdF9lbmFibGUoKTsKIAogCWlmIChjdXJyZW50LT5zZXRfY2hpbGRfdGlkKQogCQlwdXRfdXNlcih0YXNrX3BpZF92bnIoY3VycmVudCksIGN1cnJlbnQtPnNldF9jaGlsZF90aWQpOwogfQogCiAvKgotICogY29udGV4dF9zd2l0Y2ggLSBzd2l0Y2ggdG8gdGhlIG5ldyBNTSBhbmQgdGhlIG5ldwotICogdGhyZWFkJ3MgcmVnaXN0ZXIgc3RhdGUuCisgKiBjb250ZXh0X3N3aXRjaCAtIHN3aXRjaCB0byB0aGUgbmV3IE1NIGFuZCB0aGUgbmV3IHRocmVhZCdzIHJlZ2lzdGVyIHN0YXRlLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJxICoKIGNvbnRleHRfc3dpdGNoKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKIAkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogewpAQCAtMjM2NiwxNCArMjM1OCw5IEBACiAJY29udGV4dF90cmFja2luZ190YXNrX3N3aXRjaChwcmV2LCBuZXh0KTsKIAkvKiBIZXJlIHdlIGp1c3Qgc3dpdGNoIHRoZSByZWdpc3RlciBzdGF0ZSBhbmQgdGhlIHN0YWNrLiAqLwogCXN3aXRjaF90byhwcmV2LCBuZXh0LCBwcmV2KTsKLQogCWJhcnJpZXIoKTsKLQkvKgotCSAqIHRoaXNfcnEgbXVzdCBiZSBldmFsdWF0ZWQgYWdhaW4gYmVjYXVzZSBwcmV2IG1heSBoYXZlIG1vdmVkCi0JICogQ1BVcyBzaW5jZSBpdCBjYWxsZWQgc2NoZWR1bGUoKSwgdGh1cyB0aGUgJ3JxJyBvbiBpdHMgc3RhY2sKLQkgKiBmcmFtZSB3aWxsIGJlIGludmFsaWQuCi0JICovCi0JZmluaXNoX3Rhc2tfc3dpdGNoKHRoaXNfcnEoKSwgcHJldik7CisKKwlyZXR1cm4gZmluaXNoX3Rhc2tfc3dpdGNoKHByZXYpOwogfQogCiAvKgpAQCAtMjc3Myw3ICsyNzYwLDcgQEAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJcnEgPSBjcHVfcnEoY3B1KTsKLQlyY3Vfbm90ZV9jb250ZXh0X3N3aXRjaChjcHUpOworCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKCk7CiAJcHJldiA9IHJxLT5jdXJyOwogCiAJc2NoZWR1bGVfZGVidWcocHJldik7CkBAIC0yODI2LDE1ICsyODEzLDggQEAKIAkJcnEtPmN1cnIgPSBuZXh0OwogCQkrKypzd2l0Y2hfY291bnQ7CiAKLQkJY29udGV4dF9zd2l0Y2gocnEsIHByZXYsIG5leHQpOyAvKiB1bmxvY2tzIHRoZSBycSAqLwotCQkvKgotCQkgKiBUaGUgY29udGV4dCBzd2l0Y2ggaGF2ZSBmbGlwcGVkIHRoZSBzdGFjayBmcm9tIHVuZGVyIHVzCi0JCSAqIGFuZCByZXN0b3JlZCB0aGUgbG9jYWwgdmFyaWFibGVzIHdoaWNoIHdlcmUgc2F2ZWQgd2hlbgotCQkgKiB0aGlzIHRhc2sgY2FsbGVkIHNjaGVkdWxlKCkgaW4gdGhlIHBhc3QuIHByZXYgPT0gY3VycmVudAotCQkgKiBpcyBzdGlsbCBjb3JyZWN0LCBidXQgaXQgY2FuIGJlIG1vdmVkIHRvIGFub3RoZXIgY3B1L3JxLgotCQkgKi8KLQkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQlycSA9IGNwdV9ycShjcHUpOworCQlycSA9IGNvbnRleHRfc3dpdGNoKHJxLCBwcmV2LCBuZXh0KTsgLyogdW5sb2NrcyB0aGUgcnEgKi8KKwkJY3B1ID0gY3B1X29mKHJxKTsKIAl9IGVsc2UKIAkJcmF3X3NwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwogCkBAIC0yODc0LDEwICsyODU0LDE0IEBACiAJICogb3Igd2UgaGF2ZSBiZWVuIHdva2VuIHVwIHJlbW90ZWx5IGJ1dCB0aGUgSVBJIGhhcyBub3QgeWV0IGFycml2ZWQsCiAJICogd2UgaGF2ZW4ndCB5ZXQgZXhpdGVkIHRoZSBSQ1UgaWRsZSBtb2RlLiBEbyBpdCBoZXJlIG1hbnVhbGx5IHVudGlsCiAJICogd2UgZmluZCBhIGJldHRlciBzb2x1dGlvbi4KKwkgKgorCSAqIE5COiBUaGVyZSBhcmUgYnVnZ3kgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiAgSWRlYWxseSB3ZQorCSAqIHNob3VsZCB3YXJuIGlmIHByZXZfc3RhdGUgIT0gSU5fVVNFUiwgYnV0IHRoYXQgd2lsbCB0cmlnZ2VyCisJICogdG9vIGZyZXF1ZW50bHkgdG8gbWFrZSBzZW5zZSB5ZXQuCiAJICovCi0JdXNlcl9leGl0KCk7CisJZW51bSBjdHhfc3RhdGUgcHJldl9zdGF0ZSA9IGV4Y2VwdGlvbl9lbnRlcigpOwogCXNjaGVkdWxlKCk7Ci0JdXNlcl9lbnRlcigpOworCWV4Y2VwdGlvbl9leGl0KHByZXZfc3RhdGUpOwogfQogI2VuZGlmCiAKQEAgLTQ1NDMsOCArNDUyNywxMCBAQAogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQogCWZyZWUgPSBzdGFja19ub3RfdXNlZChwKTsKICNlbmRpZgorCXBwaWQgPSAwOwogCXJjdV9yZWFkX2xvY2soKTsKLQlwcGlkID0gdGFza19waWRfbnIocmN1X2RlcmVmZXJlbmNlKHAtPnJlYWxfcGFyZW50KSk7CisJaWYgKHBpZF9hbGl2ZShwKSkKKwkJcHBpZCA9IHRhc2tfcGlkX25yKHJjdV9kZXJlZmVyZW5jZShwLT5yZWFsX3BhcmVudCkpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXByaW50ayhLRVJOX0NPTlQgIiU1bHUgJTVkICU2ZCAweCUwOGx4XG4iLCBmcmVlLAogCQl0YXNrX3BpZF9ucihwKSwgcHBpZCwKQEAgLTQ2NDksNiArNDYzNSw4MSBAQAogI2VuZGlmCiB9CiAKK2ludCBjcHVzZXRfY3B1bWFza19jYW5fc2hyaW5rKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjdXIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqdHJpYWwpCit7CisJaW50IHJldCA9IDEsIHRyaWFsX2NwdXM7CisJc3RydWN0IGRsX2J3ICpjdXJfZGxfYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmN1X3JlYWRfbG9ja19zY2hlZCgpOworCWN1cl9kbF9iID0gZGxfYndfb2YoY3B1bWFza19hbnkoY3VyKSk7CisJdHJpYWxfY3B1cyA9IGNwdW1hc2tfd2VpZ2h0KHRyaWFsKTsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY3VyX2RsX2ItPmxvY2ssIGZsYWdzKTsKKwlpZiAoY3VyX2RsX2ItPmJ3ICE9IC0xICYmCisJICAgIGN1cl9kbF9iLT5idyAqIHRyaWFsX2NwdXMgPCBjdXJfZGxfYi0+dG90YWxfYncpCisJCXJldCA9IDA7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cl9kbF9iLT5sb2NrLCBmbGFncyk7CisJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdGFza19jYW5fYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjc19jcHVzX2FsbG93ZWQpCit7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIEt0aHJlYWRzIHdoaWNoIGRpc2FsbG93IHNldGFmZmluaXR5IHNob3VsZG4ndCBiZSBtb3ZlZAorCSAqIHRvIGEgbmV3IGNwdXNldDsgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlaXIgY3B1CisJICogYWZmaW5pdHkgYW5kIGlzb2xhdGluZyBzdWNoIHRocmVhZHMgYnkgdGhlaXIgc2V0IG9mCisJICogYWxsb3dlZCBub2RlcyBpcyB1bm5lY2Vzc2FyeS4gIFRodXMsIGNwdXNldHMgYXJlIG5vdAorCSAqIGFwcGxpY2FibGUgZm9yIHN1Y2ggdGhyZWFkcy4gIFRoaXMgcHJldmVudHMgY2hlY2tpbmcgZm9yCisJICogc3VjY2VzcyBvZiBzZXRfY3B1c19hbGxvd2VkX3B0cigpIG9uIGFsbCBhdHRhY2hlZCB0YXNrcworCSAqIGJlZm9yZSBjcHVzX2FsbG93ZWQgbWF5IGJlIGNoYW5nZWQuCisJICovCisJaWYgKHAtPmZsYWdzICYgUEZfTk9fU0VUQUZGSU5JVFkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChkbF90YXNrKHApICYmICFjcHVtYXNrX2ludGVyc2VjdHModGFza19ycShwKS0+cmQtPnNwYW4sCisJCQkJCSAgICAgIGNzX2NwdXNfYWxsb3dlZCkpIHsKKwkJdW5zaWduZWQgaW50IGRlc3RfY3B1ID0gY3B1bWFza19hbnlfYW5kKGNwdV9hY3RpdmVfbWFzaywKKwkJCQkJCQljc19jcHVzX2FsbG93ZWQpOworCQlzdHJ1Y3QgZGxfYncgKmRsX2I7CisJCWJvb2wgb3ZlcmZsb3c7CisJCWludCBjcHVzOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKKwkJZGxfYiA9IGRsX2J3X29mKGRlc3RfY3B1KTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkbF9iLT5sb2NrLCBmbGFncyk7CisJCWNwdXMgPSBkbF9id19jcHVzKGRlc3RfY3B1KTsKKwkJb3ZlcmZsb3cgPSBfX2RsX292ZXJmbG93KGRsX2IsIGNwdXMsIDAsIHAtPmRsLmRsX2J3KTsKKwkJaWYgKG92ZXJmbG93KQorCQkJcmV0ID0gLUVCVVNZOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBXZSByZXNlcnZlIHNwYWNlIGZvciB0aGlzIHRhc2sgaW4gdGhlIGRlc3RpbmF0aW9uCisJCQkgKiByb290X2RvbWFpbiwgYXMgd2UgY2FuJ3QgZmFpbCBhZnRlciB0aGlzIHBvaW50LgorCQkJICogV2Ugd2lsbCBmcmVlIHJlc291cmNlcyBpbiB0aGUgc291cmNlIHJvb3RfZG9tYWluCisJCQkgKiBsYXRlciBvbiAoc2VlIHNldF9jcHVzX2FsbG93ZWRfZGwoKSkuCisJCQkgKi8KKwkJCV9fZGxfYWRkKGRsX2IsIHAtPmRsLmRsX2J3KTsKKwkJfQorCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGxfYi0+bG9jaywgZmxhZ3MpOworCQlyY3VfcmVhZF91bmxvY2tfc2NoZWQoKTsKKworCX0KKyNlbmRpZgorb3V0OgorCXJldHVybiByZXQ7Cit9CisKICNpZmRlZiBDT05GSUdfU01QCiAvKgogICogbW92ZV9xdWV1ZWRfdGFzayAtIG1vdmUgYSBxdWV1ZWQgdGFzayB0byBuZXcgcnEuCkBAIC02MDk5LDcgKzYxNjAsOSBAQAogCiAjaWZkZWYgQ09ORklHX05VTUEKIHN0YXRpYyBpbnQgc2NoZWRfZG9tYWluc19udW1hX2xldmVsczsKK2VudW0gbnVtYV90b3BvbG9neV90eXBlIHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZTsKIHN0YXRpYyBpbnQgKnNjaGVkX2RvbWFpbnNfbnVtYV9kaXN0YW5jZTsKK2ludCBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsKIHN0YXRpYyBzdHJ1Y3QgY3B1bWFzayAqKipzY2hlZF9kb21haW5zX251bWFfbWFza3M7CiBzdGF0aWMgaW50IHNjaGVkX2RvbWFpbnNfY3Vycl9sZXZlbDsKICNlbmRpZgpAQCAtNjI3MSw3ICs2MzM0LDcgQEAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJcbiIpOwogfQogCi1zdGF0aWMgYm9vbCBmaW5kX251bWFfZGlzdGFuY2UoaW50IGRpc3RhbmNlKQorYm9vbCBmaW5kX251bWFfZGlzdGFuY2UoaW50IGRpc3RhbmNlKQogewogCWludCBpOwogCkBAIC02Mjg2LDYgKzYzNDksNTYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBBIHN5c3RlbSBjYW4gaGF2ZSB0aHJlZSB0eXBlcyBvZiBOVU1BIHRvcG9sb2d5OgorICogTlVNQV9ESVJFQ1Q6IGFsbCBub2RlcyBhcmUgZGlyZWN0bHkgY29ubmVjdGVkLCBvciBub3QgYSBOVU1BIHN5c3RlbQorICogTlVNQV9HTFVFTEVTU19NRVNIOiBzb21lIG5vZGVzIHJlYWNoYWJsZSB0aHJvdWdoIGludGVybWVkaWFyeSBub2RlcworICogTlVNQV9CQUNLUExBTkU6IG5vZGVzIGNhbiByZWFjaCBvdGhlciBub2RlcyB0aHJvdWdoIGEgYmFja3BsYW5lCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGdsdWVsZXNzIG1lc2ggdG9wb2xvZ3kgYW5kIGEgYmFja3BsYW5lCisgKiB0b3BvbG9neSBsaWVzIGluIHdoZXRoZXIgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIG5vdCBkaXJlY3RseQorICogY29ubmVjdGVkIG5vZGVzIGdvZXMgdGhyb3VnaCBpbnRlcm1lZGlhcnkgbm9kZXMgKHdoZXJlIHByb2dyYW1zCisgKiBjb3VsZCBydW4pLCBvciB0aHJvdWdoIGJhY2twbGFuZSBjb250cm9sbGVycy4gVGhpcyBhZmZlY3RzCisgKiBwbGFjZW1lbnQgb2YgcHJvZ3JhbXMuCisgKgorICogVGhlIHR5cGUgb2YgdG9wb2xvZ3kgY2FuIGJlIGRpc2Nlcm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6CisgKiAtIElmIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gYW55IG5vZGVzIGlzIDEgaG9wLCB0aGUgc3lzdGVtCisgKiAgIGlzIGRpcmVjdGx5IGNvbm5lY3RlZC4KKyAqIC0gSWYgZm9yIHR3byBub2RlcyBBIGFuZCBCLCBsb2NhdGVkIE4gPiAxIGhvcHMgYXdheSBmcm9tIGVhY2ggb3RoZXIsCisgKiAgIHRoZXJlIGlzIGFuIGludGVybWVkaWFyeSBub2RlIEMsIHdoaWNoIGlzIDwgTiBob3BzIGF3YXkgZnJvbSBib3RoCisgKiAgIG5vZGVzIEEgYW5kIEIsIHRoZSBzeXN0ZW0gaXMgYSBnbHVlbGVzcyBtZXNoLgorICovCitzdGF0aWMgdm9pZCBpbml0X251bWFfdG9wb2xvZ3lfdHlwZSh2b2lkKQoreworCWludCBhLCBiLCBjLCBuOworCisJbiA9IHNjaGVkX21heF9udW1hX2Rpc3RhbmNlOworCisJaWYgKG4gPD0gMSkKKwkJc2NoZWRfbnVtYV90b3BvbG9neV90eXBlID0gTlVNQV9ESVJFQ1Q7CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShhKSB7CisJCWZvcl9lYWNoX29ubGluZV9ub2RlKGIpIHsKKwkJCS8qIEZpbmQgdHdvIG5vZGVzIGZ1cnRoZXN0IHJlbW92ZWQgZnJvbSBlYWNoIG90aGVyLiAqLworCQkJaWYgKG5vZGVfZGlzdGFuY2UoYSwgYikgPCBuKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBJcyB0aGVyZSBhbiBpbnRlcm1lZGlhcnkgbm9kZSBiZXR3ZWVuIGEgYW5kIGI/ICovCisJCQlmb3JfZWFjaF9vbmxpbmVfbm9kZShjKSB7CisJCQkJaWYgKG5vZGVfZGlzdGFuY2UoYSwgYykgPCBuICYmCisJCQkJICAgIG5vZGVfZGlzdGFuY2UoYiwgYykgPCBuKSB7CisJCQkJCXNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZSA9CisJCQkJCQkJTlVNQV9HTFVFTEVTU19NRVNIOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCisJCQlzY2hlZF9udW1hX3RvcG9sb2d5X3R5cGUgPSBOVU1BX0JBQ0tQTEFORTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgc2NoZWRfaW5pdF9udW1hKHZvaWQpCiB7CiAJaW50IG5leHRfZGlzdGFuY2UsIGN1cnJfZGlzdGFuY2UgPSBub2RlX2Rpc3RhbmNlKDAsIDApOwpAQCAtNjQyMiw2ICs2NTM1LDkgQEAKIAlzY2hlZF9kb21haW5fdG9wb2xvZ3kgPSB0bDsKIAogCXNjaGVkX2RvbWFpbnNfbnVtYV9sZXZlbHMgPSBsZXZlbDsKKwlzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZSA9IHNjaGVkX2RvbWFpbnNfbnVtYV9kaXN0YW5jZVtsZXZlbCAtIDFdOworCisJaW5pdF9udW1hX3RvcG9sb2d5X3R5cGUoKTsKIH0KIAogc3RhdGljIHZvaWQgc2NoZWRfZG9tYWluc19udW1hX21hc2tzX3NldChpbnQgY3B1KQpAQCAtNzE3NCw2ICs3MjkwLDI1IEBACiAKIHZvaWQgX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KQogeworCS8qCisJICogQmxvY2tpbmcgcHJpbWl0aXZlcyB3aWxsIHNldCAoYW5kIHRoZXJlZm9yZSBkZXN0cm95KSBjdXJyZW50LT5zdGF0ZSwKKwkgKiBzaW5jZSB3ZSB3aWxsIGV4aXQgd2l0aCBUQVNLX1JVTk5JTkcgbWFrZSBzdXJlIHdlIGVudGVyIHdpdGggaXQsCisJICogb3RoZXJ3aXNlIHdlIHdpbGwgZGVzdHJveSBzdGF0ZS4KKwkgKi8KKwlpZiAoV0FSTl9PTkNFKGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORywKKwkJCSJkbyBub3QgY2FsbCBibG9ja2luZyBvcHMgd2hlbiAhVEFTS19SVU5OSU5HOyAiCisJCQkic3RhdGU9JWx4IHNldCBhdCBbPCVwPl0gJXBTXG4iLAorCQkJY3VycmVudC0+c3RhdGUsCisJCQkodm9pZCAqKWN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlLAorCQkJKHZvaWQgKiljdXJyZW50LT50YXNrX3N0YXRlX2NoYW5nZSkpCisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCV9fX21pZ2h0X3NsZWVwKGZpbGUsIGxpbmUsIHByZWVtcHRfb2Zmc2V0KTsKK30KK0VYUE9SVF9TWU1CT0woX19taWdodF9zbGVlcCk7CisKK3ZvaWQgX19fbWlnaHRfc2xlZXAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBwcmVlbXB0X29mZnNldCkKK3sKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBwcmV2X2ppZmZ5OwkvKiByYXRlbGltaXRpbmcgKi8KIAogCXJjdV9zbGVlcF9jaGVjaygpOyAvKiBXQVJOX09OX09OQ0UoKSBieSBkZWZhdWx0LCBubyByYXRlIGxpbWl0IHJlcWQuICovCkBAIC03MjA1LDcgKzczNDAsNyBAQAogI2VuZGlmCiAJZHVtcF9zdGFjaygpOwogfQotRVhQT1JUX1NZTUJPTChfX21pZ2h0X3NsZWVwKTsKK0VYUE9SVF9TWU1CT0woX19fbWlnaHRfc2xlZXApOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5oIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmgKaW5kZXggNTM4Yzk3OS4uMDIwMDM5YiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmgKKysrIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmgKQEAgLTI1LDkgKzI1LDYgQEAKIHZvaWQgY3B1ZGxfc2V0KHN0cnVjdCBjcHVkbCAqY3AsIGludCBjcHUsIHU2NCBkbCwgaW50IGlzX3ZhbGlkKTsKIGludCBjcHVkbF9pbml0KHN0cnVjdCBjcHVkbCAqY3ApOwogdm9pZCBjcHVkbF9jbGVhbnVwKHN0cnVjdCBjcHVkbCAqY3ApOwotI2Vsc2UKLSNkZWZpbmUgY3B1ZGxfc2V0KGNwLCBjcHUsIGRsKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGNwdWRsX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0NQVURMX0ggKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHVwcmkuaCBiL2tlcm5lbC9zY2hlZC9jcHVwcmkuaAppbmRleCA2YjAzMzM0Li42M2NiYjljIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY3B1cHJpLmgKKysrIGIva2VybmVsL3NjaGVkL2NwdXByaS5oCkBAIC0yNiw5ICsyNiw2IEBACiB2b2lkIGNwdXByaV9zZXQoc3RydWN0IGNwdXByaSAqY3AsIGludCBjcHUsIGludCBwcmkpOwogaW50IGNwdXByaV9pbml0KHN0cnVjdCBjcHVwcmkgKmNwKTsKIHZvaWQgY3B1cHJpX2NsZWFudXAoc3RydWN0IGNwdXByaSAqY3ApOwotI2Vsc2UKLSNkZWZpbmUgY3B1cHJpX3NldChjcCwgY3B1LCBwcmkpIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgY3B1cHJpX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9DUFVQUklfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYWRsaW5lLmMgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYwppbmRleCAyOGZhOWQ5Li5lNWRiOGM2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYworKysgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYwpAQCAtNTYzLDExICs1NjMsNiBAQAogewogCXN0cnVjdCBocnRpbWVyICp0aW1lciA9ICZkbF9zZS0+ZGxfdGltZXI7CiAKLQlpZiAoaHJ0aW1lcl9hY3RpdmUodGltZXIpKSB7Ci0JCWhydGltZXJfdHJ5X3RvX2NhbmNlbCh0aW1lcik7Ci0JCXJldHVybjsKLQl9Ci0KIAlocnRpbWVyX2luaXQodGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CiAJdGltZXItPmZ1bmN0aW9uID0gZGxfdGFza190aW1lcjsKIH0KQEAgLTYzMyw3ICs2MjgsNyBAQAogCiAJc2NoZWRfcnRfYXZnX3VwZGF0ZShycSwgZGVsdGFfZXhlYyk7CiAKLQlkbF9zZS0+cnVudGltZSAtPSBkZWx0YV9leGVjOworCWRsX3NlLT5ydW50aW1lIC09IGRsX3NlLT5kbF95aWVsZGVkID8gMCA6IGRlbHRhX2V4ZWM7CiAJaWYgKGRsX3J1bnRpbWVfZXhjZWVkZWQocnEsIGRsX3NlKSkgewogCQlfX2RlcXVldWVfdGFza19kbChycSwgY3VyciwgMCk7CiAJCWlmIChsaWtlbHkoc3RhcnRfZGxfdGltZXIoZGxfc2UsIGN1cnItPmRsLmRsX2Jvb3N0ZWQpKSkKQEAgLTkzMyw3ICs5MjgsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycjsKIAlzdHJ1Y3QgcnEgKnJxOwogCi0JaWYgKHNkX2ZsYWcgIT0gU0RfQkFMQU5DRV9XQUtFICYmIHNkX2ZsYWcgIT0gU0RfQkFMQU5DRV9GT1JLKQorCWlmIChzZF9mbGFnICE9IFNEX0JBTEFOQ0VfV0FLRSkKIAkJZ290byBvdXQ7CiAKIAlycSA9IGNwdV9ycShjcHUpOwpAQCAtMTAxOCw2ICsxMDEzLDEwIEBACiB7CiAJaHJ0aWNrX3N0YXJ0KHJxLCBwLT5kbC5ydW50aW1lKTsKIH0KKyNlbHNlIC8qICFDT05GSUdfU0NIRURfSFJUSUNLICovCitzdGF0aWMgdm9pZCBzdGFydF9ocnRpY2tfZGwoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworfQogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpwaWNrX25leHRfZGxfZW50aXR5KHN0cnVjdCBycSAqcnEsCkBAIC0xMDcxLDEwICsxMDcwLDggQEAKIAkvKiBSdW5uaW5nIHRhc2sgd2lsbCBuZXZlciBiZSBwdXNoZWQuICovCiAgICAgICAgZGVxdWV1ZV9wdXNoYWJsZV9kbF90YXNrKHJxLCBwKTsKIAotI2lmZGVmIENPTkZJR19TQ0hFRF9IUlRJQ0sKIAlpZiAoaHJ0aWNrX2VuYWJsZWQocnEpKQogCQlzdGFydF9ocnRpY2tfZGwocnEsIHApOwotI2VuZGlmCiAKIAlzZXRfcG9zdF9zY2hlZHVsZShycSk7CiAKQEAgLTEwOTMsMTAgKzEwOTAsOCBAQAogewogCXVwZGF0ZV9jdXJyX2RsKHJxKTsKIAotI2lmZGVmIENPTkZJR19TQ0hFRF9IUlRJQ0sKIAlpZiAoaHJ0aWNrX2VuYWJsZWQocnEpICYmIHF1ZXVlZCAmJiBwLT5kbC5ydW50aW1lID4gMCkKIAkJc3RhcnRfaHJ0aWNrX2RsKHJxLCBwKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB0YXNrX2ZvcmtfZGwoc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMTMzMyw2ICsxMzI4LDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHRfdGFzazsKIAlzdHJ1Y3QgcnEgKmxhdGVyX3JxOworCWludCByZXQgPSAwOwogCiAJaWYgKCFycS0+ZGwub3ZlcmxvYWRlZCkKIAkJcmV0dXJuIDA7CkBAIC0xMzc4LDcgKzEzNzQsNiBAQAogCQkJICogVGhlIHRhc2sgaXMgc3RpbGwgdGhlcmUuIFdlIGRvbid0IHRyeQogCQkJICogYWdhaW4sIHNvbWUgb3RoZXIgY3B1IHdpbGwgcHVsbCBpdCB3aGVuIHJlYWR5LgogCQkJICovCi0JCQlkZXF1ZXVlX3B1c2hhYmxlX2RsX3Rhc2socnEsIG5leHRfdGFzayk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0xMzk0LDYgKzEzODksNyBAQAogCWRlYWN0aXZhdGVfdGFzayhycSwgbmV4dF90YXNrLCAwKTsKIAlzZXRfdGFza19jcHUobmV4dF90YXNrLCBsYXRlcl9ycS0+Y3B1KTsKIAlhY3RpdmF0ZV90YXNrKGxhdGVyX3JxLCBuZXh0X3Rhc2ssIDApOworCXJldCA9IDE7CiAKIAlyZXNjaGVkX2N1cnIobGF0ZXJfcnEpOwogCkBAIC0xNDAyLDcgKzEzOTgsNyBAQAogb3V0OgogCXB1dF90YXNrX3N0cnVjdChuZXh0X3Rhc2spOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcHVzaF9kbF90YXNrcyhzdHJ1Y3QgcnEgKnJxKQpAQCAtMTUwOCw3ICsxNTA0LDcgQEAKIAkgICAgcC0+bnJfY3B1c19hbGxvd2VkID4gMSAmJgogCSAgICBkbF90YXNrKHJxLT5jdXJyKSAmJgogCSAgICAocnEtPmN1cnItPm5yX2NwdXNfYWxsb3dlZCA8IDIgfHwKLQkgICAgIGRsX2VudGl0eV9wcmVlbXB0KCZycS0+Y3Vyci0+ZGwsICZwLT5kbCkpKSB7CisJICAgICAhZGxfZW50aXR5X3ByZWVtcHQoJnAtPmRsLCAmcnEtPmN1cnItPmRsKSkpIHsKIAkJcHVzaF9kbF90YXNrcyhycSk7CiAJfQogfQpAQCAtMTUxNywxMCArMTUxMywzMyBAQAogCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzaykKIHsKIAlzdHJ1Y3QgcnEgKnJxOworCXN0cnVjdCByb290X2RvbWFpbiAqc3JjX3JkOwogCWludCB3ZWlnaHQ7CiAKIAlCVUdfT04oIWRsX3Rhc2socCkpOwogCisJcnEgPSB0YXNrX3JxKHApOworCXNyY19yZCA9IHJxLT5yZDsKKwkvKgorCSAqIE1pZ3JhdGluZyBhIFNDSEVEX0RFQURMSU5FIHRhc2sgYmV0d2VlbiBleGNsdXNpdmUKKwkgKiBjcHVzZXRzIChkaWZmZXJlbnQgcm9vdF9kb21haW5zKSBlbnRhaWxzIGEgYmFuZHdpZHRoCisJICogdXBkYXRlLiBXZSBhbHJlYWR5IG1hZGUgc3BhY2UgZm9yIHVzIGluIHRoZSBkZXN0aW5hdGlvbgorCSAqIGRvbWFpbiAoc2VlIGNwdXNldF9jYW5fYXR0YWNoKCkpLgorCSAqLworCWlmICghY3B1bWFza19pbnRlcnNlY3RzKHNyY19yZC0+c3BhbiwgbmV3X21hc2spKSB7CisJCXN0cnVjdCBkbF9idyAqc3JjX2RsX2I7CisKKwkJc3JjX2RsX2IgPSBkbF9id19vZihjcHVfb2YocnEpKTsKKwkJLyoKKwkJICogV2Ugbm93IGZyZWUgcmVzb3VyY2VzIG9mIHRoZSByb290X2RvbWFpbiB3ZSBhcmUgbWlncmF0aW5nCisJCSAqIG9mZi4gSW4gdGhlIHdvcnN0IGNhc2UsIHNjaGVkX3NldGF0dHIoKSBtYXkgdGVtcG9yYXJ5IGZhaWwKKwkJICogdW50aWwgd2UgY29tcGxldGUgdGhlIHVwZGF0ZS4KKwkJICovCisJCXJhd19zcGluX2xvY2soJnNyY19kbF9iLT5sb2NrKTsKKwkJX19kbF9jbGVhcihzcmNfZGxfYiwgcC0+ZGwuZGxfYncpOworCQlyYXdfc3Bpbl91bmxvY2soJnNyY19kbF9iLT5sb2NrKTsKKwl9CisKIAkvKgogCSAqIFVwZGF0ZSBvbmx5IGlmIHRoZSB0YXNrIGlzIGFjdHVhbGx5IHJ1bm5pbmcgKGkuZS4sCiAJICogaXQgaXMgb24gdGhlIHJxIEFORCBpdCBpcyBub3QgdGhyb3R0bGVkKS4KQEAgLTE1MzcsOCArMTU1Niw2IEBACiAJaWYgKChwLT5ucl9jcHVzX2FsbG93ZWQgPiAxKSA9PSAod2VpZ2h0ID4gMSkpCiAJCXJldHVybjsKIAotCXJxID0gdGFza19ycShwKTsKLQogCS8qCiAJICogVGhlIHByb2Nlc3MgdXNlZCB0byBiZSBhYmxlIHRvIG1pZ3JhdGUgT1IgaXQgY2FuIG5vdyBtaWdyYXRlCiAJICovCkBAIC0xNTg2LDIyICsxNjAzLDQ4IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKKy8qCisgKiAgRW5zdXJlIHAncyBkbF90aW1lciBpcyBjYW5jZWxsZWQuIE1heSBkcm9wIHJxLT5sb2NrIGZvciBhIHdoaWxlLgorICovCitzdGF0aWMgdm9pZCBjYW5jZWxfZGxfdGltZXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXN0cnVjdCBocnRpbWVyICpkbF90aW1lciA9ICZwLT5kbC5kbF90aW1lcjsKKworCS8qIE5vYm9keSB3aWxsIGNoYW5nZSB0YXNrJ3MgY2xhc3MgaWYgcGlfbG9jayBpcyBoZWxkICovCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcC0+cGlfbG9jayk7CisKKwlpZiAoaHJ0aW1lcl9hY3RpdmUoZGxfdGltZXIpKSB7CisJCWludCByZXQgPSBocnRpbWVyX3RyeV90b19jYW5jZWwoZGxfdGltZXIpOworCisJCWlmICh1bmxpa2VseShyZXQgPT0gLTEpKSB7CisJCQkvKgorCQkJICogTm90ZSwgcCBtYXkgbWlncmF0ZSBPUiBuZXcgZGVhZGxpbmUgdGFza3MKKwkJCSAqIG1heSBhcHBlYXIgaW4gcnEgd2hlbiB3ZSBhcmUgdW5sb2NraW5nIGl0LgorCQkJICogQSBjYWxsZXIgb2YgdXMgbXVzdCBiZSBmaW5lIHdpdGggdGhhdC4KKwkJCSAqLworCQkJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJCQlocnRpbWVyX2NhbmNlbChkbF90aW1lcik7CisJCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIHN3aXRjaGVkX2Zyb21fZGwoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCWlmIChocnRpbWVyX2FjdGl2ZSgmcC0+ZGwuZGxfdGltZXIpICYmICFkbF9wb2xpY3kocC0+cG9saWN5KSkKLQkJaHJ0aW1lcl90cnlfdG9fY2FuY2VsKCZwLT5kbC5kbF90aW1lcik7CisJY2FuY2VsX2RsX3RpbWVyKHJxLCBwKTsKIAogCV9fZGxfY2xlYXJfcGFyYW1zKHApOwogCi0jaWZkZWYgQ09ORklHX1NNUAogCS8qCiAJICogU2luY2UgdGhpcyBtaWdodCBiZSB0aGUgb25seSAtZGVhZGxpbmUgdGFzayBvbiB0aGUgcnEsCiAJICogdGhpcyBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gdHJ5IHRvIHB1bGwgc29tZSBvdGhlciBvbmUKIAkgKiBmcm9tIGFuIG92ZXJsb2FkZWQgY3B1LCBpZiBhbnkuCiAJICovCi0JaWYgKCFycS0+ZGwuZGxfbnJfcnVubmluZykKLQkJcHVsbF9kbF90YXNrKHJxKTsKLSNlbmRpZgorCWlmICghdGFza19vbl9ycV9xdWV1ZWQocCkgfHwgcnEtPmRsLmRsX25yX3J1bm5pbmcpCisJCXJldHVybjsKKworCWlmIChwdWxsX2RsX3Rhc2socnEpKQorCQlyZXNjaGVkX2N1cnIocnEpOwogfQogCiAvKgpAQCAtMTYyMiw3ICsxNjY1LDggQEAKIAogCWlmICh0YXNrX29uX3JxX3F1ZXVlZChwKSAmJiBycS0+Y3VyciAhPSBwKSB7CiAjaWZkZWYgQ09ORklHX1NNUAotCQlpZiAocnEtPmRsLm92ZXJsb2FkZWQgJiYgcHVzaF9kbF90YXNrKHJxKSAmJiBycSAhPSB0YXNrX3JxKHApKQorCQlpZiAocC0+bnJfY3B1c19hbGxvd2VkID4gMSAmJiBycS0+ZGwub3ZlcmxvYWRlZCAmJgorCQkJcHVzaF9kbF90YXNrKHJxKSAmJiBycSAhPSB0YXNrX3JxKHApKQogCQkJLyogT25seSByZXNjaGVkdWxlIGlmIHB1c2hpbmcgZmFpbGVkICovCiAJCQljaGVja19yZXNjaGVkID0gMDsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCkBAIC0xNzA0LDMgKzE3NDgsMTIgQEAKIAogCS51cGRhdGVfY3VycgkJPSB1cGRhdGVfY3Vycl9kbCwKIH07CisKKyNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKK2V4dGVybiB2b2lkIHByaW50X2RsX3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGRsX3JxICpkbF9ycSk7CisKK3ZvaWQgcHJpbnRfZGxfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KQoreworCXByaW50X2RsX3JxKG0sIGNwdSwgJmNwdV9ycShjcHUpLT5kbCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NDSEVEX0RFQlVHICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVidWcuYyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jCmluZGV4IGNlMzM3ODAuLjkyY2M1MjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jCkBAIC0yNjEsNiArMjYxLDEyIEBACiAjdW5kZWYgUAogfQogCit2b2lkIHByaW50X2RsX3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IGRsX3JxICpkbF9ycSkKK3sKKwlTRVFfcHJpbnRmKG0sICJcbmRsX3JxWyVkXTpcbiIsIGNwdSk7CisJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsZFxuIiwgImRsX25yX3J1bm5pbmciLCBkbF9ycS0+ZGxfbnJfcnVubmluZyk7Cit9CisKIGV4dGVybiBfX3JlYWRfbW9zdGx5IGludCBzY2hlZF9jbG9ja19ydW5uaW5nOwogCiBzdGF0aWMgdm9pZCBwcmludF9jcHUoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KQpAQCAtMzI5LDYgKzMzNSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkX2RlYnVnX2xvY2ssIGZsYWdzKTsKIAlwcmludF9jZnNfc3RhdHMobSwgY3B1KTsKIAlwcmludF9ydF9zdGF0cyhtLCBjcHUpOworCXByaW50X2RsX3N0YXRzKG0sIGNwdSk7CiAKIAlwcmludF9ycShtLCBycSwgY3B1KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZF9kZWJ1Z19sb2NrLCBmbGFncyk7CkBAIC01MjgsOCArNTM1LDggQEAKIAkJCXVuc2lnbmVkIGxvbmcgbnJfZmF1bHRzID0gLTE7CiAJCQlpbnQgY3B1X2N1cnJlbnQsIGhvbWVfbm9kZTsKIAotCQkJaWYgKHAtPm51bWFfZmF1bHRzX21lbW9yeSkKLQkJCQlucl9mYXVsdHMgPSBwLT5udW1hX2ZhdWx0c19tZW1vcnlbMipub2RlICsgaV07CisJCQlpZiAocC0+bnVtYV9mYXVsdHMpCisJCQkJbnJfZmF1bHRzID0gcC0+bnVtYV9mYXVsdHNbMipub2RlICsgaV07CiAKIAkJCWNwdV9jdXJyZW50ID0gIWkgPyAodGFza19ub2RlKHApID09IG5vZGUpIDoKIAkJCQkocG9sICYmIG5vZGVfaXNzZXQobm9kZSwgcG9sLT52Lm5vZGVzKSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCBlZjJiMTA0Li5kZjJjZGY3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTg3Myw3ICs4NzMsNiBAQAogCXNwaW5sb2NrX3QgbG9jazsgLyogbnJfdGFza3MsIHRhc2tzICovCiAJaW50IG5yX3Rhc2tzOwogCXBpZF90IGdpZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHRhc2tfbGlzdDsKIAogCXN0cnVjdCByY3VfaGVhZCByY3U7CiAJbm9kZW1hc2tfdCBhY3RpdmVfbm9kZXM7CkBAIC05MDEsMTggKzkwMCwyNCBAQAogCXJldHVybiBwLT5udW1hX2dyb3VwID8gcC0+bnVtYV9ncm91cC0+Z2lkIDogMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdGFza19mYXVsdHNfaWR4KGludCBuaWQsIGludCBwcml2KQorLyoKKyAqIFRoZSBhdmVyYWdlZCBzdGF0aXN0aWNzLCBzaGFyZWQgJiBwcml2YXRlLCBtZW1vcnkgJiBjcHUsCisgKiBvY2N1cHkgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGFycmF5LiBUaGUgc2Vjb25kIGhhbGYgb2YgdGhlCisgKiBhcnJheSBpcyBmb3IgY3VycmVudCBjb3VudGVycywgd2hpY2ggYXJlIGF2ZXJhZ2VkIGludG8gdGhlCisgKiBmaXJzdCBzZXQgYnkgdGFza19udW1hX3BsYWNlbWVudC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGFza19mYXVsdHNfaWR4KGVudW0gbnVtYV9mYXVsdHNfc3RhdHMgcywgaW50IG5pZCwgaW50IHByaXYpCiB7Ci0JcmV0dXJuIE5SX05VTUFfSElOVF9GQVVMVF9UWVBFUyAqIG5pZCArIHByaXY7CisJcmV0dXJuIE5SX05VTUFfSElOVF9GQVVMVF9UWVBFUyAqIChzICogbnJfbm9kZV9pZHMgKyBuaWQpICsgcHJpdjsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRhc2tfZmF1bHRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZCkKIHsKLQlpZiAoIXAtPm51bWFfZmF1bHRzX21lbW9yeSkKKwlpZiAoIXAtPm51bWFfZmF1bHRzKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBwLT5udW1hX2ZhdWx0c19tZW1vcnlbdGFza19mYXVsdHNfaWR4KG5pZCwgMCldICsKLQkJcC0+bnVtYV9mYXVsdHNfbWVtb3J5W3Rhc2tfZmF1bHRzX2lkeChuaWQsIDEpXTsKKwlyZXR1cm4gcC0+bnVtYV9mYXVsdHNbdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNLCBuaWQsIDApXSArCisJCXAtPm51bWFfZmF1bHRzW3Rhc2tfZmF1bHRzX2lkeChOVU1BX01FTSwgbmlkLCAxKV07CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBncm91cF9mYXVsdHMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKQpAQCAtOTIwLDE0ICs5MjUsNzkgQEAKIAlpZiAoIXAtPm51bWFfZ3JvdXApCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHAtPm51bWFfZ3JvdXAtPmZhdWx0c1t0YXNrX2ZhdWx0c19pZHgobmlkLCAwKV0gKwotCQlwLT5udW1hX2dyb3VwLT5mYXVsdHNbdGFza19mYXVsdHNfaWR4KG5pZCwgMSldOworCXJldHVybiBwLT5udW1hX2dyb3VwLT5mYXVsdHNbdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNLCBuaWQsIDApXSArCisJCXAtPm51bWFfZ3JvdXAtPmZhdWx0c1t0YXNrX2ZhdWx0c19pZHgoTlVNQV9NRU0sIG5pZCwgMSldOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ3JvdXBfZmF1bHRzX2NwdShzdHJ1Y3QgbnVtYV9ncm91cCAqZ3JvdXAsIGludCBuaWQpCiB7Ci0JcmV0dXJuIGdyb3VwLT5mYXVsdHNfY3B1W3Rhc2tfZmF1bHRzX2lkeChuaWQsIDApXSArCi0JCWdyb3VwLT5mYXVsdHNfY3B1W3Rhc2tfZmF1bHRzX2lkeChuaWQsIDEpXTsKKwlyZXR1cm4gZ3JvdXAtPmZhdWx0c19jcHVbdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNLCBuaWQsIDApXSArCisJCWdyb3VwLT5mYXVsdHNfY3B1W3Rhc2tfZmF1bHRzX2lkeChOVU1BX01FTSwgbmlkLCAxKV07Cit9CisKKy8qIEhhbmRsZSBwbGFjZW1lbnQgb24gc3lzdGVtcyB3aGVyZSBub3QgYWxsIG5vZGVzIGFyZSBkaXJlY3RseSBjb25uZWN0ZWQuICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzY29yZV9uZWFyYnlfbm9kZXMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkLAorCQkJCQlpbnQgbWF4ZGlzdCwgYm9vbCB0YXNrKQoreworCXVuc2lnbmVkIGxvbmcgc2NvcmUgPSAwOworCWludCBub2RlOworCisJLyoKKwkgKiBBbGwgbm9kZXMgYXJlIGRpcmVjdGx5IGNvbm5lY3RlZCwgYW5kIHRoZSBzYW1lIGRpc3RhbmNlCisJICogZnJvbSBlYWNoIG90aGVyLiBObyBuZWVkIGZvciBmYW5jeSBwbGFjZW1lbnQgYWxnb3JpdGhtcy4KKwkgKi8KKwlpZiAoc2NoZWRfbnVtYV90b3BvbG9neV90eXBlID09IE5VTUFfRElSRUNUKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhpcyBjb2RlIGlzIGNhbGxlZCBmb3IgZWFjaCBub2RlLCBpbnRyb2R1Y2luZyBOXjIgY29tcGxleGl0eSwKKwkgKiB3aGljaCBzaG91bGQgYmUgb2sgZ2l2ZW4gdGhlIG51bWJlciBvZiBub2RlcyByYXJlbHkgZXhjZWVkcyA4LgorCSAqLworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKKwkJdW5zaWduZWQgbG9uZyBmYXVsdHM7CisJCWludCBkaXN0ID0gbm9kZV9kaXN0YW5jZShuaWQsIG5vZGUpOworCisJCS8qCisJCSAqIFRoZSBmdXJ0aGVzdCBhd2F5IG5vZGVzIGluIHRoZSBzeXN0ZW0gYXJlIG5vdCBpbnRlcmVzdGluZworCQkgKiBmb3IgcGxhY2VtZW50OyBuaWQgd2FzIGFscmVhZHkgY291bnRlZC4KKwkJICovCisJCWlmIChkaXN0ID09IHNjaGVkX21heF9udW1hX2Rpc3RhbmNlIHx8IG5vZGUgPT0gbmlkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogT24gc3lzdGVtcyB3aXRoIGEgYmFja3BsYW5lIE5VTUEgdG9wb2xvZ3ksIGNvbXBhcmUgZ3JvdXBzCisJCSAqIG9mIG5vZGVzLCBhbmQgbW92ZSB0YXNrcyB0b3dhcmRzIHRoZSBncm91cCB3aXRoIHRoZSBtb3N0CisJCSAqIG1lbW9yeSBhY2Nlc3Nlcy4gV2hlbiBjb21wYXJpbmcgdHdvIG5vZGVzIGF0IGRpc3RhbmNlCisJCSAqICJob3BsaW1pdCIsIG9ubHkgbm9kZXMgY2xvc2VyIGJ5IHRoYW4gImhvcGxpbWl0IiBhcmUgcGFydAorCQkgKiBvZiBlYWNoIGdyb3VwLiBTa2lwIG90aGVyIG5vZGVzLgorCQkgKi8KKwkJaWYgKHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZSA9PSBOVU1BX0JBQ0tQTEFORSAmJgorCQkJCQlkaXN0ID4gbWF4ZGlzdCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEFkZCB1cCB0aGUgZmF1bHRzIGZyb20gbmVhcmJ5IG5vZGVzLiAqLworCQlpZiAodGFzaykKKwkJCWZhdWx0cyA9IHRhc2tfZmF1bHRzKHAsIG5vZGUpOworCQllbHNlCisJCQlmYXVsdHMgPSBncm91cF9mYXVsdHMocCwgbm9kZSk7CisKKwkJLyoKKwkJICogT24gc3lzdGVtcyB3aXRoIGEgZ2x1ZWxlc3MgbWVzaCBOVU1BIHRvcG9sb2d5LCB0aGVyZSBhcmUKKwkJICogbm8gZml4ZWQgImdyb3VwcyBvZiBub2RlcyIuIEluc3RlYWQsIG5vZGVzIHRoYXQgYXJlIG5vdAorCQkgKiBkaXJlY3RseSBjb25uZWN0ZWQgYm91bmNlIHRyYWZmaWMgdGhyb3VnaCBpbnRlcm1lZGlhdGUKKwkJICogbm9kZXM7IGEgbnVtYV9ncm91cCBjYW4gb2NjdXB5IGFueSBzZXQgb2Ygbm9kZXMuCisJCSAqIFRoZSBmdXJ0aGVyIGF3YXkgYSBub2RlIGlzLCB0aGUgbGVzcyB0aGUgZmF1bHRzIGNvdW50LgorCQkgKiBUaGlzIHNlZW1zIHRvIHJlc3VsdCBpbiBnb29kIHRhc2sgcGxhY2VtZW50LgorCQkgKi8KKwkJaWYgKHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZSA9PSBOVU1BX0dMVUVMRVNTX01FU0gpIHsKKwkJCWZhdWx0cyAqPSAoc2NoZWRfbWF4X251bWFfZGlzdGFuY2UgLSBkaXN0KTsKKwkJCWZhdWx0cyAvPSAoc2NoZWRfbWF4X251bWFfZGlzdGFuY2UgLSBMT0NBTF9ESVNUQU5DRSk7CisJCX0KKworCQlzY29yZSArPSBmYXVsdHM7CisJfQorCisJcmV0dXJuIHNjb3JlOwogfQogCiAvKgpAQCAtOTM2LDExICsxMDA2LDEyIEBACiAgKiBsYXJnZXIgbXVsdGlwbGllciwgaW4gb3JkZXIgdG8gZ3JvdXAgdGFza3MgdG9nZXRoZXIgdGhhdCBhcmUgYWxtb3N0CiAgKiBldmVubHkgc3ByZWFkIG91dCBiZXR3ZWVuIG51bWEgbm9kZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0YXNrX3dlaWdodChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGFza193ZWlnaHQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkLAorCQkJCQlpbnQgZGlzdCkKIHsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX2ZhdWx0czsKKwl1bnNpZ25lZCBsb25nIGZhdWx0cywgdG90YWxfZmF1bHRzOwogCi0JaWYgKCFwLT5udW1hX2ZhdWx0c19tZW1vcnkpCisJaWYgKCFwLT5udW1hX2ZhdWx0cykKIAkJcmV0dXJuIDA7CiAKIAl0b3RhbF9mYXVsdHMgPSBwLT50b3RhbF9udW1hX2ZhdWx0czsKQEAgLTk0OCwxNSArMTAxOSwyOSBAQAogCWlmICghdG90YWxfZmF1bHRzKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiAxMDAwICogdGFza19mYXVsdHMocCwgbmlkKSAvIHRvdGFsX2ZhdWx0czsKKwlmYXVsdHMgPSB0YXNrX2ZhdWx0cyhwLCBuaWQpOworCWZhdWx0cyArPSBzY29yZV9uZWFyYnlfbm9kZXMocCwgbmlkLCBkaXN0LCB0cnVlKTsKKworCXJldHVybiAxMDAwICogZmF1bHRzIC8gdG90YWxfZmF1bHRzOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ3JvdXBfd2VpZ2h0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBncm91cF93ZWlnaHQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkLAorCQkJCQkgaW50IGRpc3QpCiB7Ci0JaWYgKCFwLT5udW1hX2dyb3VwIHx8ICFwLT5udW1hX2dyb3VwLT50b3RhbF9mYXVsdHMpCisJdW5zaWduZWQgbG9uZyBmYXVsdHMsIHRvdGFsX2ZhdWx0czsKKworCWlmICghcC0+bnVtYV9ncm91cCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gMTAwMCAqIGdyb3VwX2ZhdWx0cyhwLCBuaWQpIC8gcC0+bnVtYV9ncm91cC0+dG90YWxfZmF1bHRzOworCXRvdGFsX2ZhdWx0cyA9IHAtPm51bWFfZ3JvdXAtPnRvdGFsX2ZhdWx0czsKKworCWlmICghdG90YWxfZmF1bHRzKQorCQlyZXR1cm4gMDsKKworCWZhdWx0cyA9IGdyb3VwX2ZhdWx0cyhwLCBuaWQpOworCWZhdWx0cyArPSBzY29yZV9uZWFyYnlfbm9kZXMocCwgbmlkLCBkaXN0LCBmYWxzZSk7CisKKwlyZXR1cm4gMTAwMCAqIGZhdWx0cyAvIHRvdGFsX2ZhdWx0czsKIH0KIAogYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwYWdlICogcGFnZSwKQEAgLTEwODksNiArMTE3NCw3IEBACiAJc3RydWN0IG51bWFfc3RhdHMgc3JjX3N0YXRzLCBkc3Rfc3RhdHM7CiAKIAlpbnQgaW1iYWxhbmNlX3BjdDsKKwlpbnQgZGlzdDsKIAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqYmVzdF90YXNrOwogCWxvbmcgYmVzdF9pbXA7CkBAIC0xMTY4LDYgKzEyNTQsNyBAQAogCWxvbmcgbG9hZDsKIAlsb25nIGltcCA9IGVudi0+cC0+bnVtYV9ncm91cCA/IGdyb3VwaW1wIDogdGFza2ltcDsKIAlsb25nIG1vdmVpbXAgPSBpbXA7CisJaW50IGRpc3QgPSBlbnYtPmRpc3Q7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKQEAgLTEyMDgsOCArMTI5NSw4IEBACiAJCSAqIGluIGFueSBncm91cCB0aGVuIGxvb2sgb25seSBhdCB0YXNrIHdlaWdodHMuCiAJCSAqLwogCQlpZiAoY3VyLT5udW1hX2dyb3VwID09IGVudi0+cC0+bnVtYV9ncm91cCkgewotCQkJaW1wID0gdGFza2ltcCArIHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5zcmNfbmlkKSAtCi0JCQkgICAgICB0YXNrX3dlaWdodChjdXIsIGVudi0+ZHN0X25pZCk7CisJCQlpbXAgPSB0YXNraW1wICsgdGFza193ZWlnaHQoY3VyLCBlbnYtPnNyY19uaWQsIGRpc3QpIC0KKwkJCSAgICAgIHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5kc3RfbmlkLCBkaXN0KTsKIAkJCS8qCiAJCQkgKiBBZGQgc29tZSBoeXN0ZXJlc2lzIHRvIHByZXZlbnQgc3dhcHBpbmcgdGhlCiAJCQkgKiB0YXNrcyB3aXRoaW4gYSBncm91cCBvdmVyIHRpbnkgZGlmZmVyZW5jZXMuCkBAIC0xMjIzLDExICsxMzEwLDExIEBACiAJCQkgKiBpbnN0ZWFkLgogCQkJICovCiAJCQlpZiAoY3VyLT5udW1hX2dyb3VwKQotCQkJCWltcCArPSBncm91cF93ZWlnaHQoY3VyLCBlbnYtPnNyY19uaWQpIC0KLQkJCQkgICAgICAgZ3JvdXBfd2VpZ2h0KGN1ciwgZW52LT5kc3RfbmlkKTsKKwkJCQlpbXAgKz0gZ3JvdXBfd2VpZ2h0KGN1ciwgZW52LT5zcmNfbmlkLCBkaXN0KSAtCisJCQkJICAgICAgIGdyb3VwX3dlaWdodChjdXIsIGVudi0+ZHN0X25pZCwgZGlzdCk7CiAJCQllbHNlCi0JCQkJaW1wICs9IHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5zcmNfbmlkKSAtCi0JCQkJICAgICAgIHRhc2tfd2VpZ2h0KGN1ciwgZW52LT5kc3RfbmlkKTsKKwkJCQlpbXAgKz0gdGFza193ZWlnaHQoY3VyLCBlbnYtPnNyY19uaWQsIGRpc3QpIC0KKwkJCQkgICAgICAgdGFza193ZWlnaHQoY3VyLCBlbnYtPmRzdF9uaWQsIGRpc3QpOwogCQl9CiAJfQogCkBAIC0xMzI2LDcgKzE0MTMsNyBAQAogCX07CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAJdW5zaWduZWQgbG9uZyB0YXNrd2VpZ2h0LCBncm91cHdlaWdodDsKLQlpbnQgbmlkLCByZXQ7CisJaW50IG5pZCwgcmV0LCBkaXN0OwogCWxvbmcgdGFza2ltcCwgZ3JvdXBpbXA7CiAKIAkvKgpAQCAtMTM1NCwyOSArMTQ0MSw0NSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl0YXNrd2VpZ2h0ID0gdGFza193ZWlnaHQocCwgZW52LnNyY19uaWQpOwotCWdyb3Vwd2VpZ2h0ID0gZ3JvdXBfd2VpZ2h0KHAsIGVudi5zcmNfbmlkKTsKLQl1cGRhdGVfbnVtYV9zdGF0cygmZW52LnNyY19zdGF0cywgZW52LnNyY19uaWQpOwogCWVudi5kc3RfbmlkID0gcC0+bnVtYV9wcmVmZXJyZWRfbmlkOwotCXRhc2tpbXAgPSB0YXNrX3dlaWdodChwLCBlbnYuZHN0X25pZCkgLSB0YXNrd2VpZ2h0OwotCWdyb3VwaW1wID0gZ3JvdXBfd2VpZ2h0KHAsIGVudi5kc3RfbmlkKSAtIGdyb3Vwd2VpZ2h0OworCWRpc3QgPSBlbnYuZGlzdCA9IG5vZGVfZGlzdGFuY2UoZW52LnNyY19uaWQsIGVudi5kc3RfbmlkKTsKKwl0YXNrd2VpZ2h0ID0gdGFza193ZWlnaHQocCwgZW52LnNyY19uaWQsIGRpc3QpOworCWdyb3Vwd2VpZ2h0ID0gZ3JvdXBfd2VpZ2h0KHAsIGVudi5zcmNfbmlkLCBkaXN0KTsKKwl1cGRhdGVfbnVtYV9zdGF0cygmZW52LnNyY19zdGF0cywgZW52LnNyY19uaWQpOworCXRhc2tpbXAgPSB0YXNrX3dlaWdodChwLCBlbnYuZHN0X25pZCwgZGlzdCkgLSB0YXNrd2VpZ2h0OworCWdyb3VwaW1wID0gZ3JvdXBfd2VpZ2h0KHAsIGVudi5kc3RfbmlkLCBkaXN0KSAtIGdyb3Vwd2VpZ2h0OwogCXVwZGF0ZV9udW1hX3N0YXRzKCZlbnYuZHN0X3N0YXRzLCBlbnYuZHN0X25pZCk7CiAKIAkvKiBUcnkgdG8gZmluZCBhIHNwb3Qgb24gdGhlIHByZWZlcnJlZCBuaWQuICovCiAJdGFza19udW1hX2ZpbmRfY3B1KCZlbnYsIHRhc2tpbXAsIGdyb3VwaW1wKTsKIAotCS8qIE5vIHNwYWNlIGF2YWlsYWJsZSBvbiB0aGUgcHJlZmVycmVkIG5pZC4gTG9vayBlbHNld2hlcmUuICovCi0JaWYgKGVudi5iZXN0X2NwdSA9PSAtMSkgeworCS8qCisJICogTG9vayBhdCBvdGhlciBub2RlcyBpbiB0aGVzZSBjYXNlczoKKwkgKiAtIHRoZXJlIGlzIG5vIHNwYWNlIGF2YWlsYWJsZSBvbiB0aGUgcHJlZmVycmVkX25pZAorCSAqIC0gdGhlIHRhc2sgaXMgcGFydCBvZiBhIG51bWFfZ3JvdXAgdGhhdCBpcyBpbnRlcmxlYXZlZCBhY3Jvc3MKKwkgKiAgIG11bHRpcGxlIE5VTUEgbm9kZXM7IGluIG9yZGVyIHRvIGJldHRlciBjb25zb2xpZGF0ZSB0aGUgZ3JvdXAsCisJICogICB3ZSBuZWVkIHRvIGNoZWNrIG90aGVyIGxvY2F0aW9ucy4KKwkgKi8KKwlpZiAoZW52LmJlc3RfY3B1ID09IC0xIHx8IChwLT5udW1hX2dyb3VwICYmCisJCQlub2Rlc193ZWlnaHQocC0+bnVtYV9ncm91cC0+YWN0aXZlX25vZGVzKSA+IDEpKSB7CiAJCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewogCQkJaWYgKG5pZCA9PSBlbnYuc3JjX25pZCB8fCBuaWQgPT0gcC0+bnVtYV9wcmVmZXJyZWRfbmlkKQogCQkJCWNvbnRpbnVlOwogCisJCQlkaXN0ID0gbm9kZV9kaXN0YW5jZShlbnYuc3JjX25pZCwgZW52LmRzdF9uaWQpOworCQkJaWYgKHNjaGVkX251bWFfdG9wb2xvZ3lfdHlwZSA9PSBOVU1BX0JBQ0tQTEFORSAmJgorCQkJCQkJZGlzdCAhPSBlbnYuZGlzdCkgeworCQkJCXRhc2t3ZWlnaHQgPSB0YXNrX3dlaWdodChwLCBlbnYuc3JjX25pZCwgZGlzdCk7CisJCQkJZ3JvdXB3ZWlnaHQgPSBncm91cF93ZWlnaHQocCwgZW52LnNyY19uaWQsIGRpc3QpOworCQkJfQorCiAJCQkvKiBPbmx5IGNvbnNpZGVyIG5vZGVzIHdoZXJlIGJvdGggdGFzayBhbmQgZ3JvdXBzIGJlbmVmaXQgKi8KLQkJCXRhc2tpbXAgPSB0YXNrX3dlaWdodChwLCBuaWQpIC0gdGFza3dlaWdodDsKLQkJCWdyb3VwaW1wID0gZ3JvdXBfd2VpZ2h0KHAsIG5pZCkgLSBncm91cHdlaWdodDsKKwkJCXRhc2tpbXAgPSB0YXNrX3dlaWdodChwLCBuaWQsIGRpc3QpIC0gdGFza3dlaWdodDsKKwkJCWdyb3VwaW1wID0gZ3JvdXBfd2VpZ2h0KHAsIG5pZCwgZGlzdCkgLSBncm91cHdlaWdodDsKIAkJCWlmICh0YXNraW1wIDwgMCAmJiBncm91cGltcCA8IDApCiAJCQkJY29udGludWU7CiAKKwkJCWVudi5kaXN0ID0gZGlzdDsKIAkJCWVudi5kc3RfbmlkID0gbmlkOwogCQkJdXBkYXRlX251bWFfc3RhdHMoJmVudi5kc3Rfc3RhdHMsIGVudi5kc3RfbmlkKTsKIAkJCXRhc2tfbnVtYV9maW5kX2NwdSgmZW52LCB0YXNraW1wLCBncm91cGltcCk7CkBAIC0xNDMxLDcgKzE1MzQsNyBAQAogCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwgPSBIWjsKIAogCS8qIFRoaXMgdGFzayBoYXMgbm8gTlVNQSBmYXVsdCBzdGF0aXN0aWNzIHlldCAqLwotCWlmICh1bmxpa2VseShwLT5udW1hX3ByZWZlcnJlZF9uaWQgPT0gLTEgfHwgIXAtPm51bWFfZmF1bHRzX21lbW9yeSkpCisJaWYgKHVubGlrZWx5KHAtPm51bWFfcHJlZmVycmVkX25pZCA9PSAtMSB8fCAhcC0+bnVtYV9mYXVsdHMpKQogCQlyZXR1cm47CiAKIAkvKiBQZXJpb2RpY2FsbHkgcmV0cnkgbWlncmF0aW5nIHRoZSB0YXNrIHRvIHRoZSBwcmVmZXJyZWQgbm9kZSAqLwpAQCAtMTU4MCw2ICsxNjgzLDkyIEBACiAJcmV0dXJuIGRlbHRhOwogfQogCisvKgorICogRGV0ZXJtaW5lIHRoZSBwcmVmZXJyZWQgbmlkIGZvciBhIHRhc2sgaW4gYSBudW1hX2dyb3VwLiBUaGlzIG5lZWRzIHRvCisgKiBiZSBkb25lIGluIGEgd2F5IHRoYXQgcHJvZHVjZXMgY29uc2lzdGVudCByZXN1bHRzIHdpdGggZ3JvdXBfd2VpZ2h0LAorICogb3RoZXJ3aXNlIHdvcmtsb2FkcyBtaWdodCBub3QgY29udmVyZ2UuCisgKi8KK3N0YXRpYyBpbnQgcHJlZmVycmVkX2dyb3VwX25pZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWQpCit7CisJbm9kZW1hc2tfdCBub2RlczsKKwlpbnQgZGlzdDsKKworCS8qIERpcmVjdCBjb25uZWN0aW9ucyBiZXR3ZWVuIGFsbCBOVU1BIG5vZGVzLiAqLworCWlmIChzY2hlZF9udW1hX3RvcG9sb2d5X3R5cGUgPT0gTlVNQV9ESVJFQ1QpCisJCXJldHVybiBuaWQ7CisKKwkvKgorCSAqIE9uIGEgc3lzdGVtIHdpdGggZ2x1ZWxlc3MgbWVzaCBOVU1BIHRvcG9sb2d5LCBncm91cF93ZWlnaHQKKwkgKiBzY29yZXMgbm9kZXMgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgTlVNQSBoaW50aW5nIGZhdWx0cyBvbgorCSAqIGJvdGggdGhlIG5vZGUgaXRzZWxmLCBhbmQgb24gbmVhcmJ5IG5vZGVzLgorCSAqLworCWlmIChzY2hlZF9udW1hX3RvcG9sb2d5X3R5cGUgPT0gTlVNQV9HTFVFTEVTU19NRVNIKSB7CisJCXVuc2lnbmVkIGxvbmcgc2NvcmUsIG1heF9zY29yZSA9IDA7CisJCWludCBub2RlLCBtYXhfbm9kZSA9IG5pZDsKKworCQlkaXN0ID0gc2NoZWRfbWF4X251bWFfZGlzdGFuY2U7CisKKwkJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQkJc2NvcmUgPSBncm91cF93ZWlnaHQocCwgbm9kZSwgZGlzdCk7CisJCQlpZiAoc2NvcmUgPiBtYXhfc2NvcmUpIHsKKwkJCQltYXhfc2NvcmUgPSBzY29yZTsKKwkJCQltYXhfbm9kZSA9IG5vZGU7CisJCQl9CisJCX0KKwkJcmV0dXJuIG1heF9ub2RlOworCX0KKworCS8qCisJICogRmluZGluZyB0aGUgcHJlZmVycmVkIG5pZCBpbiBhIHN5c3RlbSB3aXRoIE5VTUEgYmFja3BsYW5lCisJICogaW50ZXJjb25uZWN0IHRvcG9sb2d5IGlzIG1vcmUgaW52b2x2ZWQuIFRoZSBnb2FsIGlzIHRvIGxvY2F0ZQorCSAqIHRhc2tzIGZyb20gbnVtYV9ncm91cHMgbmVhciBlYWNoIG90aGVyIGluIHRoZSBzeXN0ZW0sIGFuZAorCSAqIHVudGFuZ2xlIHdvcmtsb2FkcyBmcm9tIGRpZmZlcmVudCBzaWRlcyBvZiB0aGUgc3lzdGVtLiBUaGlzIHJlcXVpcmVzCisJICogc2VhcmNoaW5nIGRvd24gdGhlIGhpZXJhcmNoeSBvZiBub2RlIGdyb3VwcywgcmVjdXJzaXZlbHkgc2VhcmNoaW5nCisJICogaW5zaWRlIHRoZSBoaWdoZXN0IHNjb3JpbmcgZ3JvdXAgb2Ygbm9kZXMuIFRoZSBub2RlbWFzayB0cmlja3MKKwkgKiBrZWVwIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBzZWFyY2ggZG93bi4KKwkgKi8KKwlub2RlcyA9IG5vZGVfb25saW5lX21hcDsKKwlmb3IgKGRpc3QgPSBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsgZGlzdCA+IExPQ0FMX0RJU1RBTkNFOyBkaXN0LS0pIHsKKwkJdW5zaWduZWQgbG9uZyBtYXhfZmF1bHRzID0gMDsKKwkJbm9kZW1hc2tfdCBtYXhfZ3JvdXA7CisJCWludCBhLCBiOworCisJCS8qIEFyZSB0aGVyZSBub2RlcyBhdCB0aGlzIGRpc3RhbmNlIGZyb20gZWFjaCBvdGhlcj8gKi8KKwkJaWYgKCFmaW5kX251bWFfZGlzdGFuY2UoZGlzdCkpCisJCQljb250aW51ZTsKKworCQlmb3JfZWFjaF9ub2RlX21hc2soYSwgbm9kZXMpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmF1bHRzID0gMDsKKwkJCW5vZGVtYXNrX3QgdGhpc19ncm91cDsKKwkJCW5vZGVzX2NsZWFyKHRoaXNfZ3JvdXApOworCisJCQkvKiBTdW0gZ3JvdXAncyBOVU1BIGZhdWx0czsgaW5jbHVkZXMgYT09YiBjYXNlLiAqLworCQkJZm9yX2VhY2hfbm9kZV9tYXNrKGIsIG5vZGVzKSB7CisJCQkJaWYgKG5vZGVfZGlzdGFuY2UoYSwgYikgPCBkaXN0KSB7CisJCQkJCWZhdWx0cyArPSBncm91cF9mYXVsdHMocCwgYik7CisJCQkJCW5vZGVfc2V0KGIsIHRoaXNfZ3JvdXApOworCQkJCQlub2RlX2NsZWFyKGIsIG5vZGVzKTsKKwkJCQl9CisJCQl9CisKKwkJCS8qIFJlbWVtYmVyIHRoZSB0b3AgZ3JvdXAuICovCisJCQlpZiAoZmF1bHRzID4gbWF4X2ZhdWx0cykgeworCQkJCW1heF9mYXVsdHMgPSBmYXVsdHM7CisJCQkJbWF4X2dyb3VwID0gdGhpc19ncm91cDsKKwkJCQkvKgorCQkJCSAqIHN1YnRsZTogYXQgdGhlIHNtYWxsZXN0IGRpc3RhbmNlIHRoZXJlIGlzCisJCQkJICoganVzdCBvbmUgbm9kZSBsZWZ0IGluIGVhY2ggImdyb3VwIiwgdGhlCisJCQkJICogd2lubmVyIGlzIHRoZSBwcmVmZXJyZWQgbmlkLgorCQkJCSAqLworCQkJCW5pZCA9IGE7CisJCQl9CisJCX0KKwkJLyogTmV4dCByb3VuZCwgZXZhbHVhdGUgdGhlIG5vZGVzIHdpdGhpbiBtYXhfZ3JvdXAuICovCisJCW5vZGVzID0gbWF4X2dyb3VwOworCX0KKwlyZXR1cm4gbmlkOworfQorCiBzdGF0aWMgdm9pZCB0YXNrX251bWFfcGxhY2VtZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlpbnQgc2VxLCBuaWQsIG1heF9uaWQgPSAtMSwgbWF4X2dyb3VwX25pZCA9IC0xOwpAQCAtMTYwNywxOCArMTc5NiwyMyBAQAogCiAJLyogRmluZCB0aGUgbm9kZSB3aXRoIHRoZSBoaWdoZXN0IG51bWJlciBvZiBmYXVsdHMgKi8KIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKKwkJLyogS2VlcCB0cmFjayBvZiB0aGUgb2Zmc2V0cyBpbiBudW1hX2ZhdWx0cyBhcnJheSAqLworCQlpbnQgbWVtX2lkeCwgbWVtYnVmX2lkeCwgY3B1X2lkeCwgY3B1YnVmX2lkeDsKIAkJdW5zaWduZWQgbG9uZyBmYXVsdHMgPSAwLCBncm91cF9mYXVsdHMgPSAwOwotCQlpbnQgcHJpdiwgaTsKKwkJaW50IHByaXY7CiAKIAkJZm9yIChwcml2ID0gMDsgcHJpdiA8IE5SX05VTUFfSElOVF9GQVVMVF9UWVBFUzsgcHJpdisrKSB7CiAJCQlsb25nIGRpZmYsIGZfZGlmZiwgZl93ZWlnaHQ7CiAKLQkJCWkgPSB0YXNrX2ZhdWx0c19pZHgobmlkLCBwcml2KTsKKwkJCW1lbV9pZHggPSB0YXNrX2ZhdWx0c19pZHgoTlVNQV9NRU0sIG5pZCwgcHJpdik7CisJCQltZW1idWZfaWR4ID0gdGFza19mYXVsdHNfaWR4KE5VTUFfTUVNQlVGLCBuaWQsIHByaXYpOworCQkJY3B1X2lkeCA9IHRhc2tfZmF1bHRzX2lkeChOVU1BX0NQVSwgbmlkLCBwcml2KTsKKwkJCWNwdWJ1Zl9pZHggPSB0YXNrX2ZhdWx0c19pZHgoTlVNQV9DUFVCVUYsIG5pZCwgcHJpdik7CiAKIAkJCS8qIERlY2F5IGV4aXN0aW5nIHdpbmRvdywgY29weSBmYXVsdHMgc2luY2UgbGFzdCBzY2FuICovCi0JCQlkaWZmID0gcC0+bnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeVtpXSAtIHAtPm51bWFfZmF1bHRzX21lbW9yeVtpXSAvIDI7Ci0JCQlmYXVsdF90eXBlc1twcml2XSArPSBwLT5udW1hX2ZhdWx0c19idWZmZXJfbWVtb3J5W2ldOwotCQkJcC0+bnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeVtpXSA9IDA7CisJCQlkaWZmID0gcC0+bnVtYV9mYXVsdHNbbWVtYnVmX2lkeF0gLSBwLT5udW1hX2ZhdWx0c1ttZW1faWR4XSAvIDI7CisJCQlmYXVsdF90eXBlc1twcml2XSArPSBwLT5udW1hX2ZhdWx0c1ttZW1idWZfaWR4XTsKKwkJCXAtPm51bWFfZmF1bHRzW21lbWJ1Zl9pZHhdID0gMDsKIAogCQkJLyoKIAkJCSAqIE5vcm1hbGl6ZSB0aGUgZmF1bHRzX2Zyb20sIHNvIGFsbCB0YXNrcyBpbiBhIGdyb3VwCkBAIC0xNjI4LDIxICsxODIyLDI3IEBACiAJCQkgKiBmYXVsdHMgYXJlIGxlc3MgaW1wb3J0YW50LgogCQkJICovCiAJCQlmX3dlaWdodCA9IGRpdjY0X3U2NChydW50aW1lIDw8IDE2LCBwZXJpb2QgKyAxKTsKLQkJCWZfd2VpZ2h0ID0gKGZfd2VpZ2h0ICogcC0+bnVtYV9mYXVsdHNfYnVmZmVyX2NwdVtpXSkgLworCQkJZl93ZWlnaHQgPSAoZl93ZWlnaHQgKiBwLT5udW1hX2ZhdWx0c1tjcHVidWZfaWR4XSkgLwogCQkJCSAgICh0b3RhbF9mYXVsdHMgKyAxKTsKLQkJCWZfZGlmZiA9IGZfd2VpZ2h0IC0gcC0+bnVtYV9mYXVsdHNfY3B1W2ldIC8gMjsKLQkJCXAtPm51bWFfZmF1bHRzX2J1ZmZlcl9jcHVbaV0gPSAwOworCQkJZl9kaWZmID0gZl93ZWlnaHQgLSBwLT5udW1hX2ZhdWx0c1tjcHVfaWR4XSAvIDI7CisJCQlwLT5udW1hX2ZhdWx0c1tjcHVidWZfaWR4XSA9IDA7CiAKLQkJCXAtPm51bWFfZmF1bHRzX21lbW9yeVtpXSArPSBkaWZmOwotCQkJcC0+bnVtYV9mYXVsdHNfY3B1W2ldICs9IGZfZGlmZjsKLQkJCWZhdWx0cyArPSBwLT5udW1hX2ZhdWx0c19tZW1vcnlbaV07CisJCQlwLT5udW1hX2ZhdWx0c1ttZW1faWR4XSArPSBkaWZmOworCQkJcC0+bnVtYV9mYXVsdHNbY3B1X2lkeF0gKz0gZl9kaWZmOworCQkJZmF1bHRzICs9IHAtPm51bWFfZmF1bHRzW21lbV9pZHhdOwogCQkJcC0+dG90YWxfbnVtYV9mYXVsdHMgKz0gZGlmZjsKIAkJCWlmIChwLT5udW1hX2dyb3VwKSB7Ci0JCQkJLyogc2FmZSBiZWNhdXNlIHdlIGNhbiBvbmx5IGNoYW5nZSBvdXIgb3duIGdyb3VwICovCi0JCQkJcC0+bnVtYV9ncm91cC0+ZmF1bHRzW2ldICs9IGRpZmY7Ci0JCQkJcC0+bnVtYV9ncm91cC0+ZmF1bHRzX2NwdVtpXSArPSBmX2RpZmY7CisJCQkJLyoKKwkJCQkgKiBzYWZlIGJlY2F1c2Ugd2UgY2FuIG9ubHkgY2hhbmdlIG91ciBvd24gZ3JvdXAKKwkJCQkgKgorCQkJCSAqIG1lbV9pZHggcmVwcmVzZW50cyB0aGUgb2Zmc2V0IGZvciBhIGdpdmVuCisJCQkJICogbmlkIGFuZCBwcml2IGluIGEgc3BlY2lmaWMgcmVnaW9uIGJlY2F1c2UgaXQKKwkJCQkgKiBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBudW1hX2ZhdWx0cyBhcnJheS4KKwkJCQkgKi8KKwkJCQlwLT5udW1hX2dyb3VwLT5mYXVsdHNbbWVtX2lkeF0gKz0gZGlmZjsKKwkJCQlwLT5udW1hX2dyb3VwLT5mYXVsdHNfY3B1W21lbV9pZHhdICs9IGZfZGlmZjsKIAkJCQlwLT5udW1hX2dyb3VwLT50b3RhbF9mYXVsdHMgKz0gZGlmZjsKLQkJCQlncm91cF9mYXVsdHMgKz0gcC0+bnVtYV9ncm91cC0+ZmF1bHRzW2ldOworCQkJCWdyb3VwX2ZhdWx0cyArPSBwLT5udW1hX2dyb3VwLT5mYXVsdHNbbWVtX2lkeF07CiAJCQl9CiAJCX0KIApAQCAtMTY2Miw3ICsxODYyLDcgQEAKIAlpZiAocC0+bnVtYV9ncm91cCkgewogCQl1cGRhdGVfbnVtYV9hY3RpdmVfbm9kZV9tYXNrKHAtPm51bWFfZ3JvdXApOwogCQlzcGluX3VubG9ja19pcnEoZ3JvdXBfbG9jayk7Ci0JCW1heF9uaWQgPSBtYXhfZ3JvdXBfbmlkOworCQltYXhfbmlkID0gcHJlZmVycmVkX2dyb3VwX25pZChwLCBtYXhfZ3JvdXBfbmlkKTsKIAl9CiAKIAlpZiAobWF4X2ZhdWx0cykgewpAQCAtMTcwNSw3ICsxOTA1LDYgQEAKIAogCQlhdG9taWNfc2V0KCZncnAtPnJlZmNvdW50LCAxKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmdycC0+bG9jayk7Ci0JCUlOSVRfTElTVF9IRUFEKCZncnAtPnRhc2tfbGlzdCk7CiAJCWdycC0+Z2lkID0gcC0+cGlkOwogCQkvKiBTZWNvbmQgaGFsZiBvZiB0aGUgYXJyYXkgdHJhY2tzIG5pZHMgd2hlcmUgZmF1bHRzIGhhcHBlbiAqLwogCQlncnAtPmZhdWx0c19jcHUgPSBncnAtPmZhdWx0cyArIE5SX05VTUFfSElOVF9GQVVMVF9UWVBFUyAqCkBAIC0xNzE0LDExICsxOTEzLDEwIEBACiAJCW5vZGVfc2V0KHRhc2tfbm9kZShjdXJyZW50KSwgZ3JwLT5hY3RpdmVfbm9kZXMpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBOUl9OVU1BX0hJTlRfRkFVTFRfU1RBVFMgKiBucl9ub2RlX2lkczsgaSsrKQotCQkJZ3JwLT5mYXVsdHNbaV0gPSBwLT5udW1hX2ZhdWx0c19tZW1vcnlbaV07CisJCQlncnAtPmZhdWx0c1tpXSA9IHAtPm51bWFfZmF1bHRzW2ldOwogCiAJCWdycC0+dG90YWxfZmF1bHRzID0gcC0+dG90YWxfbnVtYV9mYXVsdHM7CiAKLQkJbGlzdF9hZGQoJnAtPm51bWFfZW50cnksICZncnAtPnRhc2tfbGlzdCk7CiAJCWdycC0+bnJfdGFza3MrKzsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHAtPm51bWFfZ3JvdXAsIGdycCk7CiAJfQpAQCAtMTc3MywxMyArMTk3MSwxMiBAQAogCWRvdWJsZV9sb2NrX2lycSgmbXlfZ3JwLT5sb2NrLCAmZ3JwLT5sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9OVU1BX0hJTlRfRkFVTFRfU1RBVFMgKiBucl9ub2RlX2lkczsgaSsrKSB7Ci0JCW15X2dycC0+ZmF1bHRzW2ldIC09IHAtPm51bWFfZmF1bHRzX21lbW9yeVtpXTsKLQkJZ3JwLT5mYXVsdHNbaV0gKz0gcC0+bnVtYV9mYXVsdHNfbWVtb3J5W2ldOworCQlteV9ncnAtPmZhdWx0c1tpXSAtPSBwLT5udW1hX2ZhdWx0c1tpXTsKKwkJZ3JwLT5mYXVsdHNbaV0gKz0gcC0+bnVtYV9mYXVsdHNbaV07CiAJfQogCW15X2dycC0+dG90YWxfZmF1bHRzIC09IHAtPnRvdGFsX251bWFfZmF1bHRzOwogCWdycC0+dG90YWxfZmF1bHRzICs9IHAtPnRvdGFsX251bWFfZmF1bHRzOwogCi0JbGlzdF9tb3ZlKCZwLT5udW1hX2VudHJ5LCAmZ3JwLT50YXNrX2xpc3QpOwogCW15X2dycC0+bnJfdGFza3MtLTsKIAlncnAtPm5yX3Rhc2tzKys7CiAKQEAgLTE3OTksMjcgKzE5OTYsMjMgQEAKIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXN0cnVjdCBudW1hX2dyb3VwICpncnAgPSBwLT5udW1hX2dyb3VwOwotCXZvaWQgKm51bWFfZmF1bHRzID0gcC0+bnVtYV9mYXVsdHNfbWVtb3J5OworCXZvaWQgKm51bWFfZmF1bHRzID0gcC0+bnVtYV9mYXVsdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAogCWlmIChncnApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmdycC0+bG9jaywgZmxhZ3MpOwogCQlmb3IgKGkgPSAwOyBpIDwgTlJfTlVNQV9ISU5UX0ZBVUxUX1NUQVRTICogbnJfbm9kZV9pZHM7IGkrKykKLQkJCWdycC0+ZmF1bHRzW2ldIC09IHAtPm51bWFfZmF1bHRzX21lbW9yeVtpXTsKKwkJCWdycC0+ZmF1bHRzW2ldIC09IHAtPm51bWFfZmF1bHRzW2ldOwogCQlncnAtPnRvdGFsX2ZhdWx0cyAtPSBwLT50b3RhbF9udW1hX2ZhdWx0czsKIAotCQlsaXN0X2RlbCgmcC0+bnVtYV9lbnRyeSk7CiAJCWdycC0+bnJfdGFza3MtLTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JwLT5sb2NrLCBmbGFncyk7CiAJCVJDVV9JTklUX1BPSU5URVIocC0+bnVtYV9ncm91cCwgTlVMTCk7CiAJCXB1dF9udW1hX2dyb3VwKGdycCk7CiAJfQogCi0JcC0+bnVtYV9mYXVsdHNfbWVtb3J5ID0gTlVMTDsKLQlwLT5udW1hX2ZhdWx0c19idWZmZXJfbWVtb3J5ID0gTlVMTDsKLQlwLT5udW1hX2ZhdWx0c19jcHU9IE5VTEw7Ci0JcC0+bnVtYV9mYXVsdHNfYnVmZmVyX2NwdSA9IE5VTEw7CisJcC0+bnVtYV9mYXVsdHMgPSBOVUxMOwogCWtmcmVlKG51bWFfZmF1bHRzKTsKIH0KIApAQCAtMTg0MiwyNCArMjAzNSwxNCBAQAogCQlyZXR1cm47CiAKIAkvKiBBbGxvY2F0ZSBidWZmZXIgdG8gdHJhY2sgZmF1bHRzIG9uIGEgcGVyLW5vZGUgYmFzaXMgKi8KLQlpZiAodW5saWtlbHkoIXAtPm51bWFfZmF1bHRzX21lbW9yeSkpIHsKLQkJaW50IHNpemUgPSBzaXplb2YoKnAtPm51bWFfZmF1bHRzX21lbW9yeSkgKgorCWlmICh1bmxpa2VseSghcC0+bnVtYV9mYXVsdHMpKSB7CisJCWludCBzaXplID0gc2l6ZW9mKCpwLT5udW1hX2ZhdWx0cykgKgogCQkJICAgTlJfTlVNQV9ISU5UX0ZBVUxUX0JVQ0tFVFMgKiBucl9ub2RlX2lkczsKIAotCQlwLT5udW1hX2ZhdWx0c19tZW1vcnkgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUx8X19HRlBfTk9XQVJOKTsKLQkJaWYgKCFwLT5udW1hX2ZhdWx0c19tZW1vcnkpCisJCXAtPm51bWFfZmF1bHRzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMfF9fR0ZQX05PV0FSTik7CisJCWlmICghcC0+bnVtYV9mYXVsdHMpCiAJCQlyZXR1cm47CiAKLQkJQlVHX09OKHAtPm51bWFfZmF1bHRzX2J1ZmZlcl9tZW1vcnkpOwotCQkvKgotCQkgKiBUaGUgYXZlcmFnZWQgc3RhdGlzdGljcywgc2hhcmVkICYgcHJpdmF0ZSwgbWVtb3J5ICYgY3B1LAotCQkgKiBvY2N1cHkgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGFycmF5LiBUaGUgc2Vjb25kIGhhbGYgb2YgdGhlCi0JCSAqIGFycmF5IGlzIGZvciBjdXJyZW50IGNvdW50ZXJzLCB3aGljaCBhcmUgYXZlcmFnZWQgaW50byB0aGUKLQkJICogZmlyc3Qgc2V0IGJ5IHRhc2tfbnVtYV9wbGFjZW1lbnQuCi0JCSAqLwotCQlwLT5udW1hX2ZhdWx0c19jcHUgPSBwLT5udW1hX2ZhdWx0c19tZW1vcnkgKyAoMiAqIG5yX25vZGVfaWRzKTsKLQkJcC0+bnVtYV9mYXVsdHNfYnVmZmVyX21lbW9yeSA9IHAtPm51bWFfZmF1bHRzX21lbW9yeSArICg0ICogbnJfbm9kZV9pZHMpOwotCQlwLT5udW1hX2ZhdWx0c19idWZmZXJfY3B1ID0gcC0+bnVtYV9mYXVsdHNfbWVtb3J5ICsgKDYgKiBucl9ub2RlX2lkcyk7CiAJCXAtPnRvdGFsX251bWFfZmF1bHRzID0gMDsKIAkJbWVtc2V0KHAtPm51bWFfZmF1bHRzX2xvY2FsaXR5LCAwLCBzaXplb2YocC0+bnVtYV9mYXVsdHNfbG9jYWxpdHkpKTsKIAl9CkBAIC0xODk5LDggKzIwODIsOCBAQAogCWlmIChtaWdyYXRlZCkKIAkJcC0+bnVtYV9wYWdlc19taWdyYXRlZCArPSBwYWdlczsKIAotCXAtPm51bWFfZmF1bHRzX2J1ZmZlcl9tZW1vcnlbdGFza19mYXVsdHNfaWR4KG1lbV9ub2RlLCBwcml2KV0gKz0gcGFnZXM7Ci0JcC0+bnVtYV9mYXVsdHNfYnVmZmVyX2NwdVt0YXNrX2ZhdWx0c19pZHgoY3B1X25vZGUsIHByaXYpXSArPSBwYWdlczsKKwlwLT5udW1hX2ZhdWx0c1t0YXNrX2ZhdWx0c19pZHgoTlVNQV9NRU1CVUYsIG1lbV9ub2RlLCBwcml2KV0gKz0gcGFnZXM7CisJcC0+bnVtYV9mYXVsdHNbdGFza19mYXVsdHNfaWR4KE5VTUFfQ1BVQlVGLCBjcHVfbm9kZSwgcHJpdildICs9IHBhZ2VzOwogCXAtPm51bWFfZmF1bHRzX2xvY2FsaXR5W2xvY2FsXSArPSBwYWdlczsKIH0KIApAQCAtNDQ2OSw3ICs0NjUyLDcgQEAKIAkJCQlsYXRlc3RfaWRsZV90aW1lc3RhbXAgPSBycS0+aWRsZV9zdGFtcDsKIAkJCQlzaGFsbG93ZXN0X2lkbGVfY3B1ID0gaTsKIAkJCX0KLQkJfSBlbHNlIHsKKwkJfSBlbHNlIGlmIChzaGFsbG93ZXN0X2lkbGVfY3B1ID09IC0xKSB7CiAJCQlsb2FkID0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKIAkJCWlmIChsb2FkIDwgbWluX2xvYWQgfHwgKGxvYWQgPT0gbWluX2xvYWQgJiYgaSA9PSB0aGlzX2NwdSkpIHsKIAkJCQltaW5fbG9hZCA9IGxvYWQ7CkBAIC00NTQ3LDkgKzQ3MzAsNiBAQAogCWludCB3YW50X2FmZmluZSA9IDA7CiAJaW50IHN5bmMgPSB3YWtlX2ZsYWdzICYgV0ZfU1lOQzsKIAotCWlmIChwLT5ucl9jcHVzX2FsbG93ZWQgPT0gMSkKLQkJcmV0dXJuIHByZXZfY3B1OwotCiAJaWYgKHNkX2ZsYWcgJiBTRF9CQUxBTkNFX1dBS0UpCiAJCXdhbnRfYWZmaW5lID0gY3B1bWFza190ZXN0X2NwdShjcHUsIHRza19jcHVzX2FsbG93ZWQocCkpOwogCkBAIC01MTg5LDcgKzUzNjksNyBAQAogCXN0cnVjdCBudW1hX2dyb3VwICpudW1hX2dyb3VwID0gcmN1X2RlcmVmZXJlbmNlKHAtPm51bWFfZ3JvdXApOwogCWludCBzcmNfbmlkLCBkc3RfbmlkOwogCi0JaWYgKCFzY2hlZF9mZWF0KE5VTUFfRkFWT1VSX0hJR0hFUikgfHwgIXAtPm51bWFfZmF1bHRzX21lbW9yeSB8fAorCWlmICghc2NoZWRfZmVhdChOVU1BX0ZBVk9VUl9ISUdIRVIpIHx8ICFwLT5udW1hX2ZhdWx0cyB8fAogCSAgICAhKGVudi0+c2QtPmZsYWdzICYgU0RfTlVNQSkpIHsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTUyMjgsNyArNTQwOCw3IEBACiAJaWYgKCFzY2hlZF9mZWF0KE5VTUEpIHx8ICFzY2hlZF9mZWF0KE5VTUFfUkVTSVNUX0xPV0VSKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKCFwLT5udW1hX2ZhdWx0c19tZW1vcnkgfHwgIShlbnYtPnNkLT5mbGFncyAmIFNEX05VTUEpKQorCWlmICghcC0+bnVtYV9mYXVsdHMgfHwgIShlbnYtPnNkLT5mbGFncyAmIFNEX05VTUEpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlzcmNfbmlkID0gY3B1X3RvX25vZGUoZW52LT5zcmNfY3B1KTsKQEAgLTYxNzIsOCArNjM1MiwxMCBAQAogCQkgKiB3aXRoIGEgbGFyZ2Ugd2VpZ2h0IHRhc2sgb3V0d2VpZ2hzIHRoZSB0YXNrcyBvbiB0aGUgc3lzdGVtKS4KIAkJICovCiAJCWlmIChwcmVmZXJfc2libGluZyAmJiBzZHMtPmxvY2FsICYmCi0JCSAgICBzZHMtPmxvY2FsX3N0YXQuZ3JvdXBfaGFzX2ZyZWVfY2FwYWNpdHkpCisJCSAgICBzZHMtPmxvY2FsX3N0YXQuZ3JvdXBfaGFzX2ZyZWVfY2FwYWNpdHkpIHsKIAkJCXNncy0+Z3JvdXBfY2FwYWNpdHlfZmFjdG9yID0gbWluKHNncy0+Z3JvdXBfY2FwYWNpdHlfZmFjdG9yLCAxVSk7CisJCQlzZ3MtPmdyb3VwX3R5cGUgPSBncm91cF9jbGFzc2lmeShzZywgc2dzKTsKKwkJfQogCiAJCWlmICh1cGRhdGVfc2RfcGlja19idXNpZXN0KGVudiwgc2RzLCBzZywgc2dzKSkgewogCQkJc2RzLT5idXNpZXN0ID0gc2c7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvcnQuYyBiL2tlcm5lbC9zY2hlZC9ydC5jCmluZGV4IDIwYmNhMzkuLmVlMTVmNWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZC9ydC5jCkBAIC0xMzAxLDkgKzEzMDEsNiBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycjsKIAlzdHJ1Y3QgcnEgKnJxOwogCi0JaWYgKHAtPm5yX2NwdXNfYWxsb3dlZCA9PSAxKQotCQlnb3RvIG91dDsKLQogCS8qIEZvciBhbnl0aGluZyBidXQgd2FrZSB1cHMsIGp1c3QgcmV0dXJuIHRoZSB0YXNrX2NwdSAqLwogCWlmIChzZF9mbGFnICE9IFNEX0JBTEFOQ0VfV0FLRSAmJiBzZF9mbGFnICE9IFNEX0JBTEFOQ0VfRk9SSykKIAkJZ290byBvdXQ7CkBAIC0xMzUxLDE2ICsxMzQ4LDIyIEBACiAKIHN0YXRpYyB2b2lkIGNoZWNrX3ByZWVtcHRfZXF1YWxfcHJpbyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JaWYgKHJxLT5jdXJyLT5ucl9jcHVzX2FsbG93ZWQgPT0gMSkKKwkvKgorCSAqIEN1cnJlbnQgY2FuJ3QgYmUgbWlncmF0ZWQsIHVzZWxlc3MgdG8gcmVzY2hlZHVsZSwKKwkgKiBsZXQncyBob3BlIHAgY2FuIG1vdmUgb3V0LgorCSAqLworCWlmIChycS0+Y3Vyci0+bnJfY3B1c19hbGxvd2VkID09IDEgfHwKKwkgICAgIWNwdXByaV9maW5kKCZycS0+cmQtPmNwdXByaSwgcnEtPmN1cnIsIE5VTEwpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIHAgaXMgbWlncmF0YWJsZSwgc28gbGV0J3Mgbm90IHNjaGVkdWxlIGl0IGFuZAorCSAqIHNlZSBpZiBpdCBpcyBwdXNoZWQgb3IgcHVsbGVkIHNvbWV3aGVyZSBlbHNlLgorCSAqLwogCWlmIChwLT5ucl9jcHVzX2FsbG93ZWQgIT0gMQogCSAgICAmJiBjcHVwcmlfZmluZCgmcnEtPnJkLT5jcHVwcmksIHAsIE5VTEwpKQogCQlyZXR1cm47CiAKLQlpZiAoIWNwdXByaV9maW5kKCZycS0+cmQtPmNwdXByaSwgcnEtPmN1cnIsIE5VTEwpKQotCQlyZXR1cm47Ci0KIAkvKgogCSAqIFRoZXJlIGFwcGVhcnMgdG8gYmUgb3RoZXIgY3B1cyB0aGF0IGNhbiBhY2NlcHQKIAkgKiBjdXJyZW50IGFuZCBub25lIHRvIHJ1biAncCcsIHNvIGxldHMgcmVzY2hlZHVsZQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaAppbmRleCAyZGY4ZWYwLi45YTJhNDVjIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvc2NoZWQuaAorKysgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaApAQCAtMTc2LDYgKzE3NiwyNSBAQAogCXU2NCBidywgdG90YWxfYnc7CiB9OwogCitzdGF0aWMgaW5saW5lCit2b2lkIF9fZGxfY2xlYXIoc3RydWN0IGRsX2J3ICpkbF9iLCB1NjQgdHNrX2J3KQoreworCWRsX2ItPnRvdGFsX2J3IC09IHRza19idzsKK30KKworc3RhdGljIGlubGluZQordm9pZCBfX2RsX2FkZChzdHJ1Y3QgZGxfYncgKmRsX2IsIHU2NCB0c2tfYncpCit7CisJZGxfYi0+dG90YWxfYncgKz0gdHNrX2J3OworfQorCitzdGF0aWMgaW5saW5lCitib29sIF9fZGxfb3ZlcmZsb3coc3RydWN0IGRsX2J3ICpkbF9iLCBpbnQgY3B1cywgdTY0IG9sZF9idywgdTY0IG5ld19idykKK3sKKwlyZXR1cm4gZGxfYi0+YncgIT0gLTEgJiYKKwkgICAgICAgZGxfYi0+YncgKiBjcHVzIDwgZGxfYi0+dG90YWxfYncgLSBvbGRfYncgKyBuZXdfYnc7Cit9CisKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggc2NoZWRfZG9tYWluc19tdXRleDsKIAogI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKQEAgLTY3OCw3ICs2OTcsMjUgQEAKIAlyZXR1cm4gcnEtPmNsb2NrX3Rhc2s7CiB9CiAKKyNpZmRlZiBDT05GSUdfTlVNQQorZW51bSBudW1hX3RvcG9sb2d5X3R5cGUgeworCU5VTUFfRElSRUNULAorCU5VTUFfR0xVRUxFU1NfTUVTSCwKKwlOVU1BX0JBQ0tQTEFORSwKK307CitleHRlcm4gZW51bSBudW1hX3RvcG9sb2d5X3R5cGUgc2NoZWRfbnVtYV90b3BvbG9neV90eXBlOworZXh0ZXJuIGludCBzY2hlZF9tYXhfbnVtYV9kaXN0YW5jZTsKK2V4dGVybiBib29sIGZpbmRfbnVtYV9kaXN0YW5jZShpbnQgZGlzdGFuY2UpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKKy8qIFRoZSByZWdpb25zIGluIG51bWFfZmF1bHRzIGFycmF5IGZyb20gdGFza19zdHJ1Y3QgKi8KK2VudW0gbnVtYV9mYXVsdHNfc3RhdHMgeworCU5VTUFfTUVNID0gMCwKKwlOVU1BX0NQVSwKKwlOVU1BX01FTUJVRiwKKwlOVU1BX0NQVUJVRgorfTsKIGV4dGVybiB2b2lkIHNjaGVkX3NldG51bWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbm9kZSk7CiBleHRlcm4gaW50IG1pZ3JhdGVfdGFza190byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpOwogZXh0ZXJuIGludCBtaWdyYXRlX3N3YXAoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKQEAgLTExMjcsNiArMTE2NCwxMSBAQAogCXZvaWQgKCp0YXNrX2ZvcmspIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCXZvaWQgKCp0YXNrX2RlYWQpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCisJLyoKKwkgKiBUaGUgc3dpdGNoZWRfZnJvbSgpIGNhbGwgaXMgYWxsb3dlZCB0byBkcm9wIHJxLT5sb2NrLCB0aGVyZWZvcmUgd2UKKwkgKiBjYW5ub3QgYXNzdW1lIHRoZSBzd2l0Y2hlZF9mcm9tL3N3aXRjaGVkX3RvIHBhaXIgaXMgc2VybGlhemVkIGJ5CisJICogcnEtPmxvY2suIFRoZXkgYXJlIGhvd2V2ZXIgc2VyaWFsaXplZCBieSBwLT5waV9sb2NrLgorCSAqLwogCXZvaWQgKCpzd2l0Y2hlZF9mcm9tKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCXZvaWQgKCpzd2l0Y2hlZF90bykgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAl2b2lkICgqcHJpb19jaGFuZ2VkKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCkBAIC0xNTA0LDYgKzE1NDYsNyBAQAogZXh0ZXJuIHN0cnVjdCBzY2hlZF9lbnRpdHkgKl9fcGlja19sYXN0X2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpOwogZXh0ZXJuIHZvaWQgcHJpbnRfY2ZzX3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSk7CiBleHRlcm4gdm9pZCBwcmludF9ydF9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcHJpbnRfZGxfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KTsKIAogZXh0ZXJuIHZvaWQgaW5pdF9jZnNfcnEoc3RydWN0IGNmc19ycSAqY2ZzX3JxKTsKIGV4dGVybiB2b2lkIGluaXRfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSwgc3RydWN0IHJxICpycSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvd2FpdC5jIGIva2VybmVsL3NjaGVkL3dhaXQuYwppbmRleCA1YTYyOTE1Li44NTIxNDNhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvd2FpdC5jCisrKyBiL2tlcm5lbC9zY2hlZC93YWl0LmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogdm9pZCBfX2luaXRfd2FpdHF1ZXVlX2hlYWQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQogewpAQCAtMjk3LDYgKzI5OCw3MSBAQAogfQogRVhQT1JUX1NZTUJPTChhdXRvcmVtb3ZlX3dha2VfZnVuY3Rpb24pOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfa3RocmVhZF9zaG91bGRfc3RvcCh2b2lkKQoreworCXJldHVybiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9LVEhSRUFEKSAmJiBrdGhyZWFkX3Nob3VsZF9zdG9wKCk7Cit9CisKKy8qCisgKiBERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuYyk7CisgKgorICogYWRkX3dhaXRfcXVldWUoJndxLCAmd2FpdCk7CisgKiBmb3IgKDs7KSB7CisgKiAgICAgaWYgKGNvbmRpdGlvbikKKyAqICAgICAgICAgYnJlYWs7CisgKgorICogICAgIHAtPnN0YXRlID0gbW9kZTsJCQkJY29uZGl0aW9uID0gdHJ1ZTsKKyAqICAgICBzbXBfbWIoKTsgLy8gQQkJCQlzbXBfd21iKCk7IC8vIEMKKyAqICAgICBpZiAoIXdhaXQtPmZsYWdzICYgV1FfRkxBR19XT0tFTikJd2FpdC0+ZmxhZ3MgfD0gV1FfRkxBR19XT0tFTjsKKyAqICAgICAgICAgc2NoZWR1bGUoKQkJCQl0cnlfdG9fd2FrZV91cCgpOworICogICAgIHAtPnN0YXRlID0gVEFTS19SVU5OSU5HOwkJICAgIH5+fn5+fn5+fn5+fn5+fn5+fgorICogICAgIHdhaXQtPmZsYWdzICY9IH5XUV9GTEFHX1dPS0VOOwkJY29uZGl0aW9uID0gdHJ1ZTsKKyAqICAgICBzbXBfbWIoKSAvLyBCCQkJCXNtcF93bWIoKTsgLy8gQworICoJCQkJCQl3YWl0LT5mbGFncyB8PSBXUV9GTEFHX1dPS0VOOworICogfQorICogcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmd2FpdCk7CisgKgorICovCitsb25nIHdhaXRfd29rZW4od2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBsb25nIHRpbWVvdXQpCit7CisJc2V0X2N1cnJlbnRfc3RhdGUobW9kZSk7IC8qIEEgKi8KKwkvKgorCSAqIFRoZSBhYm92ZSBpbXBsaWVzIGFuIHNtcF9tYigpLCB3aGljaCBtYXRjaGVzIHdpdGggdGhlIHNtcF93bWIoKSBmcm9tCisJICogd29rZW5fd2FrZV9mdW5jdGlvbigpIHN1Y2ggdGhhdCBpZiB3ZSBvYnNlcnZlIFdRX0ZMQUdfV09LRU4gd2UgbXVzdAorCSAqIGFsc28gb2JzZXJ2ZSBhbGwgc3RhdGUgYmVmb3JlIHRoZSB3YWtldXAuCisJICovCisJaWYgKCEod2FpdC0+ZmxhZ3MgJiBXUV9GTEFHX1dPS0VOKSAmJiAhaXNfa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwkvKgorCSAqIFRoZSBiZWxvdyBpbXBsaWVzIGFuIHNtcF9tYigpLCBpdCB0b28gcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGZyb20KKwkgKiB3b2tlbl93YWtlX2Z1bmN0aW9uKCkgc3VjaCB0aGF0IHdlIG11c3QgZWl0aGVyIG9ic2VydmUgdGhlIHdhaXQKKwkgKiBjb25kaXRpb24gYmVpbmcgdHJ1ZSBfT1JfIFdRX0ZMQUdfV09LRU4gc3VjaCB0aGF0IHdlIHdpbGwgbm90IG1pc3MKKwkgKiBhbiBldmVudC4KKwkgKi8KKwlzZXRfbWIod2FpdC0+ZmxhZ3MsIHdhaXQtPmZsYWdzICYgfldRX0ZMQUdfV09LRU4pOyAvKiBCICovCisKKwlyZXR1cm4gdGltZW91dDsKK30KK0VYUE9SVF9TWU1CT0wod2FpdF93b2tlbik7CisKK2ludCB3b2tlbl93YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSkKK3sKKwkvKgorCSAqIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHVuZGVyIHdhaXRxdWV1ZSBsb2NrLCBMT0NLCisJICogZG9lc24ndCBpbXBseSB3cml0ZSBiYXJyaWVyIGFuZCB0aGUgdXNlcnMgZXhwZWN0cyB3cml0ZQorCSAqIGJhcnJpZXIgc2VtYW50aWNzIG9uIHdha2V1cCBmdW5jdGlvbnMuICBUaGUgZm9sbG93aW5nCisJICogc21wX3dtYigpIGlzIGVxdWl2YWxlbnQgdG8gc21wX3dtYigpIGluIHRyeV90b193YWtlX3VwKCkKKwkgKiBhbmQgaXMgcGFpcmVkIHdpdGggc2V0X21iKCkgaW4gd2FpdF93b2tlbigpLgorCSAqLworCXNtcF93bWIoKTsgLyogQyAqLworCXdhaXQtPmZsYWdzIHw9IFdRX0ZMQUdfV09LRU47CisKKwlyZXR1cm4gZGVmYXVsdF93YWtlX2Z1bmN0aW9uKHdhaXQsIG1vZGUsIHN5bmMsIGtleSk7Cit9CitFWFBPUlRfU1lNQk9MKHdva2VuX3dha2VfZnVuY3Rpb24pOworCiBpbnQgd2FrZV9iaXRfZnVuY3Rpb24od2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqYXJnKQogewogCXN0cnVjdCB3YWl0X2JpdF9rZXkgKmtleSA9IGFyZzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCA4ZjA4NzZmLi4xNmEzMDUyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0xMjc1LDcgKzEyNzUsMTcgQEAKIAkJCWxvY2FsX2lycV9yZXN0b3JlKCpmbGFncyk7CiAJCQlicmVhazsKIAkJfQotCisJCS8qCisJCSAqIFRoaXMgc2lnaGFuZCBjYW4gYmUgYWxyZWFkeSBmcmVlZCBhbmQgZXZlbiByZXVzZWQsIGJ1dAorCQkgKiB3ZSByZWx5IG9uIFNMQUJfREVTVFJPWV9CWV9SQ1UgYW5kIHNpZ2hhbmRfY3RvcigpIHdoaWNoCisJCSAqIGluaXRpYWxpemVzIC0+c2lnbG9jazogdGhpcyBzbGFiIGNhbid0IGdvIGF3YXksIGl0IGhhcworCQkgKiB0aGUgc2FtZSBvYmplY3QgdHlwZSwgLT5zaWdsb2NrIGNhbid0IGJlIHJlaW5pdGlhbGl6ZWQuCisJCSAqCisJCSAqIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdHNrLT5zaWdoYW5kIGlzIHN0aWxsIHRoZSBzYW1lCisJCSAqIGFmdGVyIHdlIHRha2UgdGhlIGxvY2ssIHdlIGNhbiByYWNlIHdpdGggZGVfdGhyZWFkKCkgb3IKKwkJICogX19leGl0X3NpZ25hbCgpLiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhlIG5leHQgaXRlcmF0aW9uCisJCSAqIG11c3Qgc2VlIC0+c2lnaGFuZCA9PSBOVUxMLgorCQkgKi8KIAkJc3Bpbl9sb2NrKCZzaWdoYW5kLT5zaWdsb2NrKTsKIAkJaWYgKGxpa2VseShzaWdoYW5kID09IHRzay0+c2lnaGFuZCkpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMTMzMSwyMyArMTM0MSwyMSBAQAogCWludCBlcnJvciA9IC1FU1JDSDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci1yZXRyeToKLQlwID0gcGlkX3Rhc2socGlkLCBQSURUWVBFX1BJRCk7Ci0JaWYgKHApIHsKLQkJZXJyb3IgPSBncm91cF9zZW5kX3NpZ19pbmZvKHNpZywgaW5mbywgcCk7Ci0JCWlmICh1bmxpa2VseShlcnJvciA9PSAtRVNSQ0gpKQotCQkJLyoKLQkJCSAqIFRoZSB0YXNrIHdhcyB1bmhhc2hlZCBpbiBiZXR3ZWVuLCB0cnkgYWdhaW4uCi0JCQkgKiBJZiBpdCBpcyBkZWFkLCBwaWRfdGFzaygpIHdpbGwgcmV0dXJuIE5VTEwsCi0JCQkgKiBpZiB3ZSByYWNlIHdpdGggZGVfdGhyZWFkKCkgaXQgd2lsbCBmaW5kIHRoZQotCQkJICogbmV3IGxlYWRlci4KLQkJCSAqLwotCQkJZ290byByZXRyeTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJZm9yICg7OykgeworCQlyY3VfcmVhZF9sb2NrKCk7CisJCXAgPSBwaWRfdGFzayhwaWQsIFBJRFRZUEVfUElEKTsKKwkJaWYgKHApCisJCQllcnJvciA9IGdyb3VwX3NlbmRfc2lnX2luZm8oc2lnLCBpbmZvLCBwKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCWlmIChsaWtlbHkoIXAgfHwgZXJyb3IgIT0gLUVTUkNIKSkKKwkJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBlcnJvcjsKKwkJLyoKKwkJICogVGhlIHRhc2sgd2FzIHVuaGFzaGVkIGluIGJldHdlZW4sIHRyeSBhZ2Fpbi4gIElmIGl0CisJCSAqIGlzIGRlYWQsIHBpZF90YXNrKCkgd2lsbCByZXR1cm4gTlVMTCwgaWYgd2UgcmFjZSB3aXRoCisJCSAqIGRlX3RocmVhZCgpIGl0IHdpbGwgZmluZCB0aGUgbmV3IGxlYWRlci4KKwkJICovCisJfQogfQogCiBpbnQga2lsbF9wcm9jX2luZm8oaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHBpZF90IHBpZCkKQEAgLTI3NDgsNiArMjc1NiwxMCBAQAogCQlpZiAoZnJvbS0+c2lfY29kZSA9PSBCVVNfTUNFRVJSX0FSIHx8IGZyb20tPnNpX2NvZGUgPT0gQlVTX01DRUVSUl9BTykKIAkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX2FkZHJfbHNiLCAmdG8tPnNpX2FkZHJfbHNiKTsKICNlbmRpZgorI2lmZGVmIFNFR1ZfQk5ERVJSCisJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX2xvd2VyLCAmdG8tPnNpX2xvd2VyKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdXBwZXIsICZ0by0+c2lfdXBwZXIpOworI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgX19TSV9DSExEOgogCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9waWQsICZ0by0+c2lfcGlkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbXBib290LmMgYi9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGViODllMTguLmYwMzJmYjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zbXBib290LmMKKysrIGIva2VybmVsL3NtcGJvb3QuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQkJcHJlZW1wdF9lbmFibGUoKTsKIAkJCWlmIChodC0+Y2xlYW51cCkKIAkJCQlodC0+Y2xlYW51cCh0ZC0+Y3B1LCBjcHVfb25saW5lKHRkLT5jcHUpKTsKQEAgLTEzNiwyNiArMTM2LDI3IEBACiAJCS8qIENoZWNrIGZvciBzdGF0ZSBjaGFuZ2Ugc2V0dXAgKi8KIAkJc3dpdGNoICh0ZC0+c3RhdHVzKSB7CiAJCWNhc2UgSFBfVEhSRUFEX05PTkU6CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJaWYgKGh0LT5zZXR1cCkKIAkJCQlodC0+c2V0dXAodGQtPmNwdSk7CiAJCQl0ZC0+c3RhdHVzID0gSFBfVEhSRUFEX0FDVElWRTsKLQkJCXByZWVtcHRfZGlzYWJsZSgpOwotCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwogCQljYXNlIEhQX1RIUkVBRF9QQVJLRUQ6CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJaWYgKGh0LT51bnBhcmspCiAJCQkJaHQtPnVucGFyayh0ZC0+Y3B1KTsKIAkJCXRkLT5zdGF0dXMgPSBIUF9USFJFQURfQUNUSVZFOwotCQkJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JCQlicmVhazsKKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKCFodC0+dGhyZWFkX3Nob3VsZF9ydW4odGQtPmNwdSkpIHsKLQkJCXByZWVtcHRfZW5hYmxlKCk7CisJCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCQlzY2hlZHVsZSgpOwogCQl9IGVsc2UgewotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJCXByZWVtcHRfZW5hYmxlKCk7CiAJCQlodC0+dGhyZWFkX2ZuKHRkLT5jcHUpOwogCQl9CmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCAwNjk5YWRkLi41MDFiYWE5IDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTY1Niw3ICs2NTYsNyBAQAogCQkgKiBpbiB0aGUgdGFzayBzdGFjayBoZXJlLgogCQkgKi8KIAkJX19kb19zb2Z0aXJxKCk7Ci0JCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKGNwdSk7CisJCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKCk7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAxZWFhMmYwLi5hOGM5ZjVhIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC05MSw2ICs5MSwxMiBAQAogI2lmbmRlZiBTRVRfVFNDX0NUTAogIyBkZWZpbmUgU0VUX1RTQ19DVEwoYSkJCSgtRUlOVkFMKQogI2VuZGlmCisjaWZuZGVmIE1QWF9FTkFCTEVfTUFOQUdFTUVOVAorIyBkZWZpbmUgTVBYX0VOQUJMRV9NQU5BR0VNRU5UKGEpCSgtRUlOVkFMKQorI2VuZGlmCisjaWZuZGVmIE1QWF9ESVNBQkxFX01BTkFHRU1FTlQKKyMgZGVmaW5lIE1QWF9ESVNBQkxFX01BTkFHRU1FTlQoYSkJKC1FSU5WQUwpCisjZW5kaWYKIAogLyoKICAqIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbS13aWRlIG92ZXJmbG93IFVJRCBhbmQgR0lEIGFyZSBkZWZpbmVkLCBmb3IKQEAgLTIyMDMsNiArMjIwOSwxMiBAQAogCQkJbWUtPm1tLT5kZWZfZmxhZ3MgJj0gflZNX05PSFVHRVBBR0U7CiAJCXVwX3dyaXRlKCZtZS0+bW0tPm1tYXBfc2VtKTsKIAkJYnJlYWs7CisJY2FzZSBQUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQ6CisJCWVycm9yID0gTVBYX0VOQUJMRV9NQU5BR0VNRU5UKG1lKTsKKwkJYnJlYWs7CisJY2FzZSBQUl9NUFhfRElTQUJMRV9NQU5BR0VNRU5UOgorCQllcnJvciA9IE1QWF9ESVNBQkxFX01BTkFHRU1FTlQobWUpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnJvciA9IC1FSU5WQUw7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDE1ZjI1MTEuLjdjNTRmZjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTExMDQsNiArMTEwNCwxNSBAQAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKIAl9LAogI2VuZGlmCisJeworCQkucHJvY25hbWUJPSAicGFuaWNfb25fd2FybiIsCisJCS5kYXRhCQk9ICZwYW5pY19vbl93YXJuLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJm9uZSwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bF9iaW5hcnkuYyBiL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMKaW5kZXggOWE0Zjc1MC4uN2U3NzQ2YSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bF9iaW5hcnkuYworKysgYi9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jCkBAIC0xMzcsNiArMTM3LDcgQEAKIAl7IENUTF9JTlQsCUtFUk5fQ09NUEFUX0xPRywJCSJjb21wYXQtbG9nIiB9LAogCXsgQ1RMX0lOVCwJS0VSTl9NQVhfTE9DS19ERVBUSCwJCSJtYXhfbG9ja19kZXB0aCIgfSwKIAl7IENUTF9JTlQsCUtFUk5fUEFOSUNfT05fTk1JLAkJInBhbmljX29uX3VucmVjb3ZlcmVkX25taSIgfSwKKwl7IENUTF9JTlQsCUtFUk5fUEFOSUNfT05fV0FSTiwJCSJwYW5pY19vbl93YXJuIiB9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGFza3N0YXRzLmMgYi9rZXJuZWwvdGFza3N0YXRzLmMKaW5kZXggYjMxMmZjYzcuLjY3MGZmZjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90YXNrc3RhdHMuYworKysgYi9rZXJuZWwvdGFza3N0YXRzLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCXN0YXRzID0gbmxhX2RhdGEobmEpOwogCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOwogCi0JcmMgPSBjZ3JvdXBzdGF0c19idWlsZChzdGF0cywgZi5maWxlLT5mX2RlbnRyeSk7CisJcmMgPSBjZ3JvdXBzdGF0c19idWlsZChzdGF0cywgZi5maWxlLT5mX3BhdGguZGVudHJ5KTsKIAlpZiAocmMgPCAwKSB7CiAJCW5sbXNnX2ZyZWUocmVwX3NrYik7CiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvTWFrZWZpbGUgYi9rZXJuZWwvdGltZS9NYWtlZmlsZQppbmRleCA3MzQ3NDI2Li5mNjIyY2YyIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdGltZS9NYWtlZmlsZQpAQCAtMTMsNyArMTMsNyBAQAogb2JqLSQoQ09ORklHX1RJQ0tfT05FU0hPVCkJCQkrPSB0aWNrLXNjaGVkLm8KIG9iai0kKENPTkZJR19USU1FUl9TVEFUUykJCQkrPSB0aW1lcl9zdGF0cy5vCiBvYmotJChDT05GSUdfREVCVUdfRlMpCQkJCSs9IHRpbWVrZWVwaW5nX2RlYnVnLm8KLW9iai0kKENPTkZJR19URVNUX1VERUxBWSkJCQkrPSB1ZGVsYXlfdGVzdC5vCitvYmotJChDT05GSUdfVEVTVF9VREVMQVkpCQkJKz0gdGVzdF91ZGVsYXkubwogCiAkKG9iaikvdGltZS5vOiAkKG9iaikvdGltZWNvbnN0LmgKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdWRlbGF5X3Rlc3QuYyBiL2tlcm5lbC90aW1lL3Rlc3RfdWRlbGF5LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGtlcm5lbC90aW1lL3VkZWxheV90ZXN0LmMKcmVuYW1lIHRvIGtlcm5lbC90aW1lL3Rlc3RfdWRlbGF5LmMKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwppbmRleCA3YjU3NDFmLi4xZjQzNTYwIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKKysrIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCkBAIC01ODUsNyArNTg1LDcgQEAKIAkJbGFzdF9qaWZmaWVzID0gamlmZmllczsKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZqaWZmaWVzX2xvY2ssIHNlcSkpOwogCi0JaWYgKHJjdV9uZWVkc19jcHUoY3B1LCAmcmN1X2RlbHRhX2ppZmZpZXMpIHx8CisJaWYgKHJjdV9uZWVkc19jcHUoJnJjdV9kZWx0YV9qaWZmaWVzKSB8fAogCSAgICBhcmNoX25lZWRzX2NwdSgpIHx8IGlycV93b3JrX25lZWRzX2NwdSgpKSB7CiAJCW5leHRfamlmZmllcyA9IGxhc3RfamlmZmllcyArIDE7CiAJCWRlbHRhX2ppZmZpZXMgPSAxOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZS5jIGIva2VybmVsL3RpbWUvdGltZS5jCmluZGV4IGE5YWUyMGYuLjY1MDE1ZmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWUuYworKysgYi9rZXJuZWwvdGltZS90aW1lLmMKQEAgLTMwNCw3ICszMDQsOSBAQAogfQogRVhQT1JUX1NZTUJPTCh0aW1lc3BlY190cnVuYyk7CiAKLS8qIENvbnZlcnRzIEdyZWdvcmlhbiBkYXRlIHRvIHNlY29uZHMgc2luY2UgMTk3MC0wMS0wMSAwMDowMDowMC4KKy8qCisgKiBta3RpbWU2NCAtIENvbnZlcnRzIGRhdGUgdG8gc2Vjb25kcy4KKyAqIENvbnZlcnRzIEdyZWdvcmlhbiBkYXRlIHRvIHNlY29uZHMgc2luY2UgMTk3MC0wMS0wMSAwMDowMDowMC4KICAqIEFzc3VtZXMgaW5wdXQgaW4gbm9ybWFsIGRhdGUgZm9ybWF0LCBpLmUuIDE5ODAtMTItMzEgMjM6NTk6NTkKICAqID0+IHllYXI9MTk4MCwgbW9uPTEyLCBkYXk9MzEsIGhvdXI9MjMsIG1pbj01OSwgc2VjPTU5LgogICoKQEAgLTMxNCwxNSArMzE2LDEwIEBACiAgKiAteWVhci8xMDAreWVhci80MDAgdGVybXMsIGFuZCBhZGQgMTAuXQogICoKICAqIFRoaXMgYWxnb3JpdGhtIHdhcyBmaXJzdCBwdWJsaXNoZWQgYnkgR2F1c3MgKEkgdGhpbmspLgotICoKLSAqIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gd2lsbCBvdmVyZmxvdyBvbiAyMTA2LTAyLTA3IDA2OjI4OjE2IG9uCi0gKiBtYWNoaW5lcyB3aGVyZSBsb25nIGlzIDMyLWJpdCEgKEhvd2V2ZXIsIGFzIHRpbWVfdCBpcyBzaWduZWQsIHdlCi0gKiB3aWxsIGFscmVhZHkgZ2V0IHByb2JsZW1zIGF0IG90aGVyIHBsYWNlcyBvbiAyMDM4LTAxLTE5IDAzOjE0OjA4KQogICovCi11bnNpZ25lZCBsb25nCi1ta3RpbWUoY29uc3QgdW5zaWduZWQgaW50IHllYXIwLCBjb25zdCB1bnNpZ25lZCBpbnQgbW9uMCwKLSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZGF5LCBjb25zdCB1bnNpZ25lZCBpbnQgaG91ciwKLSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWluLCBjb25zdCB1bnNpZ25lZCBpbnQgc2VjKQordGltZTY0X3QgbWt0aW1lNjQoY29uc3QgdW5zaWduZWQgaW50IHllYXIwLCBjb25zdCB1bnNpZ25lZCBpbnQgbW9uMCwKKwkJY29uc3QgdW5zaWduZWQgaW50IGRheSwgY29uc3QgdW5zaWduZWQgaW50IGhvdXIsCisJCWNvbnN0IHVuc2lnbmVkIGludCBtaW4sIGNvbnN0IHVuc2lnbmVkIGludCBzZWMpCiB7CiAJdW5zaWduZWQgaW50IG1vbiA9IG1vbjAsIHllYXIgPSB5ZWFyMDsKIApAQCAtMzMyLDE1ICszMjksMTQgQEAKIAkJeWVhciAtPSAxOwogCX0KIAotCXJldHVybiAoKCgodW5zaWduZWQgbG9uZykKKwlyZXR1cm4gKCgoKHRpbWU2NF90KQogCQkgICh5ZWFyLzQgLSB5ZWFyLzEwMCArIHllYXIvNDAwICsgMzY3Km1vbi8xMiArIGRheSkgKwogCQkgIHllYXIqMzY1IC0gNzE5NDk5CiAJICAgICkqMjQgKyBob3VyIC8qIG5vdyBoYXZlIGhvdXJzICovCiAJICApKjYwICsgbWluIC8qIG5vdyBoYXZlIG1pbnV0ZXMgKi8KIAkpKjYwICsgc2VjOyAvKiBmaW5hbGx5IHNlY29uZHMgKi8KIH0KLQotRVhQT1JUX1NZTUJPTChta3RpbWUpOworRVhQT1JUX1NZTUJPTChta3RpbWU2NCk7CiAKIC8qKgogICogc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMgLSBzZXQgdGltZXNwZWMgc2VjIGFuZCBuc2VjIHBhcnRzIGFuZCBub3JtYWxpemUKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGVjMTc5MWYuLjZhOTMxODUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtNDE3LDcgKzQxNyw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB0a191cGRhdGVfa3RpbWVfZGF0YShzdHJ1Y3QgdGltZWtlZXBlciAqdGspCiB7Ci0JczY0IG5zZWM7CisJdTY0IHNlY29uZHM7CisJdTMyIG5zZWM7CiAKIAkvKgogCSAqIFRoZSB4dGltZSBiYXNlZCBtb25vdG9uaWMgcmVhZG91dCBpczoKQEAgLTQyNiwxMyArNDI3LDIyIEBACiAJICoJbnNlYyA9IGJhc2VfbW9ubyArIG5vdygpOwogCSAqID09PiBiYXNlX21vbm8gPSAoeHRpbWVfc2VjICsgd3RtX3NlYykgKiAxZTkgKyB3dG1fbnNlYwogCSAqLwotCW5zZWMgPSAoczY0KSh0ay0+eHRpbWVfc2VjICsgdGstPndhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyk7Ci0JbnNlYyAqPSBOU0VDX1BFUl9TRUM7Ci0JbnNlYyArPSB0ay0+d2FsbF90b19tb25vdG9uaWMudHZfbnNlYzsKLQl0ay0+dGtyLmJhc2VfbW9ubyA9IG5zX3RvX2t0aW1lKG5zZWMpOworCXNlY29uZHMgPSAodTY0KSh0ay0+eHRpbWVfc2VjICsgdGstPndhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyk7CisJbnNlYyA9ICh1MzIpIHRrLT53YWxsX3RvX21vbm90b25pYy50dl9uc2VjOworCXRrLT50a3IuYmFzZV9tb25vID0gbnNfdG9fa3RpbWUoc2Vjb25kcyAqIE5TRUNfUEVSX1NFQyArIG5zZWMpOwogCiAJLyogVXBkYXRlIHRoZSBtb25vdG9uaWMgcmF3IGJhc2UgKi8KIAl0ay0+YmFzZV9yYXcgPSB0aW1lc3BlYzY0X3RvX2t0aW1lKHRrLT5yYXdfdGltZSk7CisKKwkvKgorCSAqIFRoZSBzdW0gb2YgdGhlIG5hbm9zZWNvbmRzIHBvcnRpb25zIG9mIHh0aW1lIGFuZAorCSAqIHdhbGxfdG9fbW9ub3RvbmljIGNhbiBiZSBncmVhdGVyL2VxdWFsIG9uZSBzZWNvbmQuIFRha2UKKwkgKiB0aGlzIGludG8gYWNjb3VudCBiZWZvcmUgdXBkYXRpbmcgdGstPmt0aW1lX3NlYy4KKwkgKi8KKwluc2VjICs9ICh1MzIpKHRrLT50a3IueHRpbWVfbnNlYyA+PiB0ay0+dGtyLnNoaWZ0KTsKKwlpZiAobnNlYyA+PSBOU0VDX1BFUl9TRUMpCisJCXNlY29uZHMrKzsKKwl0ay0+a3RpbWVfc2VjID0gc2Vjb25kczsKIH0KIAogLyogbXVzdCBob2xkIHRpbWVrZWVwZXJfbG9jayAqLwpAQCAtNTE5LDkgKzUyOSw5IEBACiAKIC8qKgogICogZ2V0bnN0aW1lb2ZkYXk2NCAtIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXNwZWM2NC4KLSAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHRvIGJlIHNldAorICogQHRzOgkJcG9pbnRlciB0byB0aGUgdGltZXNwZWM2NCB0byBiZSBzZXQKICAqCi0gKiBSZXR1cm5zIHRoZSB0aW1lIG9mIGRheSBpbiBhIHRpbWVzcGVjIChXQVJOIGlmIHN1c3BlbmRlZCkuCisgKiBSZXR1cm5zIHRoZSB0aW1lIG9mIGRheSBpbiBhIHRpbWVzcGVjNjQgKFdBUk4gaWYgc3VzcGVuZGVkKS4KICAqLwogdm9pZCBnZXRuc3RpbWVvZmRheTY0KHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKQEAgLTYyMyw3ICs2MzMsNyBAQAogICoKICAqIFRoZSBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBtb25vdG9uaWMgY2xvY2sgZnJvbSB0aGUgcmVhbHRpbWUKICAqIGNsb2NrIGFuZCB0aGUgd2FsbF90b19tb25vdG9uaWMgb2Zmc2V0IGFuZCBzdG9yZXMgdGhlIHJlc3VsdAotICogaW4gbm9ybWFsaXplZCB0aW1lc3BlYyBmb3JtYXQgaW4gdGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgQHRzLgorICogaW4gbm9ybWFsaXplZCB0aW1lc3BlYzY0IGZvcm1hdCBpbiB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieSBAdHMuCiAgKi8KIHZvaWQga3RpbWVfZ2V0X3RzNjQoc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewpAQCAtNjQ4LDYgKzY1OCw1NCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3RpbWVfZ2V0X3RzNjQpOwogCisvKioKKyAqIGt0aW1lX2dldF9zZWNvbmRzIC0gR2V0IHRoZSBzZWNvbmRzIHBvcnRpb24gb2YgQ0xPQ0tfTU9OT1RPTklDCisgKgorICogUmV0dXJucyB0aGUgc2Vjb25kcyBwb3J0aW9uIG9mIENMT0NLX01PTk9UT05JQyB3aXRoIGEgc2luZ2xlIG5vbgorICogc2VyaWFsaXplZCByZWFkLiB0ay0+a3RpbWVfc2VjIGlzIG9mIHR5cGUgJ3Vuc2lnbmVkIGxvbmcnIHNvIHRoaXMKKyAqIHdvcmtzIG9uIGJvdGggMzIgYW5kIDY0IGJpdCBzeXN0ZW1zLiBPbiAzMiBiaXQgc3lzdGVtcyB0aGUgcmVhZG91dAorICogY292ZXJzIH4xMzYgeWVhcnMgb2YgdXB0aW1lIHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggdG8gcHJldmVudAorICogcHJlbWF0dXJlIHdyYXAgYXJvdW5kcy4KKyAqLwordGltZTY0X3Qga3RpbWVfZ2V0X3NlY29uZHModm9pZCkKK3sKKwlzdHJ1Y3QgdGltZWtlZXBlciAqdGsgPSAmdGtfY29yZS50aW1la2VlcGVyOworCisJV0FSTl9PTih0aW1la2VlcGluZ19zdXNwZW5kZWQpOworCXJldHVybiB0ay0+a3RpbWVfc2VjOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3RpbWVfZ2V0X3NlY29uZHMpOworCisvKioKKyAqIGt0aW1lX2dldF9yZWFsX3NlY29uZHMgLSBHZXQgdGhlIHNlY29uZHMgcG9ydGlvbiBvZiBDTE9DS19SRUFMVElNRQorICoKKyAqIFJldHVybnMgdGhlIHdhbGwgY2xvY2sgc2Vjb25kcyBzaW5jZSAxOTcwLiBUaGlzIHJlcGxhY2VzIHRoZQorICogZ2V0X3NlY29uZHMoKSBpbnRlcmZhY2Ugd2hpY2ggaXMgbm90IHkyMDM4IHNhZmUgb24gMzJiaXQgc3lzdGVtcy4KKyAqCisgKiBGb3IgNjRiaXQgc3lzdGVtcyB0aGUgZmFzdCBhY2Nlc3MgdG8gdGstPnh0aW1lX3NlYyBpcyBwcmVzZXJ2ZWQuIE9uCisgKiAzMmJpdCBzeXN0ZW1zIHRoZSBhY2Nlc3MgbXVzdCBiZSBwcm90ZWN0ZWQgd2l0aCB0aGUgc2VxdWVuY2UKKyAqIGNvdW50ZXIgdG8gcHJvdmlkZSAiYXRvbWljIiBhY2Nlc3MgdG8gdGhlIDY0Yml0IHRrLT54dGltZV9zZWMKKyAqIHZhbHVlLgorICovCit0aW1lNjRfdCBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKHZvaWQpCit7CisJc3RydWN0IHRpbWVrZWVwZXIgKnRrID0gJnRrX2NvcmUudGltZWtlZXBlcjsKKwl0aW1lNjRfdCBzZWNvbmRzOworCXVuc2lnbmVkIGludCBzZXE7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpKQorCQlyZXR1cm4gdGstPnh0aW1lX3NlYzsKKworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbigmdGtfY29yZS5zZXEpOworCQlzZWNvbmRzID0gdGstPnh0aW1lX3NlYzsKKworCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJnRrX2NvcmUuc2VxLCBzZXEpKTsKKworCXJldHVybiBzZWNvbmRzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3RpbWVfZ2V0X3JlYWxfc2Vjb25kcyk7CisKICNpZmRlZiBDT05GSUdfTlRQX1BQUwogCiAvKioKQEAgLTcwMywxOCArNzYxLDE4IEBACiBFWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7CiAKIC8qKgotICogZG9fc2V0dGltZW9mZGF5IC0gU2V0cyB0aGUgdGltZSBvZiBkYXkKLSAqIEB0djoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIG5ldyB0aW1lCisgKiBkb19zZXR0aW1lb2ZkYXk2NCAtIFNldHMgdGhlIHRpbWUgb2YgZGF5LgorICogQHRzOiAgICAgcG9pbnRlciB0byB0aGUgdGltZXNwZWM2NCB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBuZXcgdGltZQogICoKICAqIFNldHMgdGhlIHRpbWUgb2YgZGF5IHRvIHRoZSBuZXcgdGltZSBhbmQgdXBkYXRlIE5UUCBhbmQgbm90aWZ5IGhydGltZXJzCiAgKi8KLWludCBkb19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0dikKK2ludCBkb19zZXR0aW1lb2ZkYXk2NChjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7CiAJc3RydWN0IHRpbWVrZWVwZXIgKnRrID0gJnRrX2NvcmUudGltZWtlZXBlcjsKLQlzdHJ1Y3QgdGltZXNwZWM2NCB0c19kZWx0YSwgeHQsIHRtcDsKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0c19kZWx0YSwgeHQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghdGltZXNwZWNfdmFsaWRfc3RyaWN0KHR2KSkKKwlpZiAoIXRpbWVzcGVjNjRfdmFsaWRfc3RyaWN0KHRzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVrZWVwZXJfbG9jaywgZmxhZ3MpOwpAQCAtNzIzLDEzICs3ODEsMTIgQEAKIAl0aW1la2VlcGluZ19mb3J3YXJkX25vdyh0ayk7CiAKIAl4dCA9IHRrX3h0aW1lKHRrKTsKLQl0c19kZWx0YS50dl9zZWMgPSB0di0+dHZfc2VjIC0geHQudHZfc2VjOwotCXRzX2RlbHRhLnR2X25zZWMgPSB0di0+dHZfbnNlYyAtIHh0LnR2X25zZWM7CisJdHNfZGVsdGEudHZfc2VjID0gdHMtPnR2X3NlYyAtIHh0LnR2X3NlYzsKKwl0c19kZWx0YS50dl9uc2VjID0gdHMtPnR2X25zZWMgLSB4dC50dl9uc2VjOwogCiAJdGtfc2V0X3dhbGxfdG9fbW9ubyh0aywgdGltZXNwZWM2NF9zdWIodGstPndhbGxfdG9fbW9ub3RvbmljLCB0c19kZWx0YSkpOwogCi0JdG1wID0gdGltZXNwZWNfdG9fdGltZXNwZWM2NCgqdHYpOwotCXRrX3NldF94dGltZSh0aywgJnRtcCk7CisJdGtfc2V0X3h0aW1lKHRrLCB0cyk7CiAKIAl0aW1la2VlcGluZ191cGRhdGUodGssIFRLX0NMRUFSX05UUCB8IFRLX01JUlJPUiB8IFRLX0NMT0NLX1dBU19TRVQpOwogCkBAIC03NDEsNyArNzk4LDcgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOworRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXk2NCk7CiAKIC8qKgogICogdGltZWtlZXBpbmdfaW5qZWN0X29mZnNldCAtIEFkZHMgb3Igc3VidHJhY3RzIGZyb20gdGhlIGN1cnJlbnQgdGltZS4KQEAgLTg5NSwxMiArOTUyLDEyIEBACiB9CiAKIC8qKgotICogZ2V0cmF3bW9ub3RvbmljIC0gUmV0dXJucyB0aGUgcmF3IG1vbm90b25pYyB0aW1lIGluIGEgdGltZXNwZWMKLSAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHRvIGJlIHNldAorICogZ2V0cmF3bW9ub3RvbmljNjQgLSBSZXR1cm5zIHRoZSByYXcgbW9ub3RvbmljIHRpbWUgaW4gYSB0aW1lc3BlYworICogQHRzOgkJcG9pbnRlciB0byB0aGUgdGltZXNwZWM2NCB0byBiZSBzZXQKICAqCiAgKiBSZXR1cm5zIHRoZSByYXcgbW9ub3RvbmljIHRpbWUgKGNvbXBsZXRlbHkgdW4tbW9kaWZpZWQgYnkgbnRwKQogICovCi12b2lkIGdldHJhd21vbm90b25pYyhzdHJ1Y3QgdGltZXNwZWMgKnRzKQordm9pZCBnZXRyYXdtb25vdG9uaWM2NChzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7CiAJc3RydWN0IHRpbWVrZWVwZXIgKnRrID0gJnRrX2NvcmUudGltZWtlZXBlcjsKIAlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0OwpAQCAtOTE1LDkgKzk3MiwxMCBAQAogCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJnRrX2NvcmUuc2VxLCBzZXEpKTsKIAogCXRpbWVzcGVjNjRfYWRkX25zKCZ0czY0LCBuc2Vjcyk7Ci0JKnRzID0gdGltZXNwZWM2NF90b190aW1lc3BlYyh0czY0KTsKKwkqdHMgPSB0czY0OwogfQotRVhQT1JUX1NZTUJPTChnZXRyYXdtb25vdG9uaWMpOworRVhQT1JUX1NZTUJPTChnZXRyYXdtb25vdG9uaWM2NCk7CisKIAogLyoqCiAgKiB0aW1la2VlcGluZ192YWxpZF9mb3JfaHJlcyAtIENoZWNrIGlmIHRpbWVrZWVwaW5nIGlzIHN1aXRhYmxlIGZvciBocmVzCkBAIC0xMDY4LDggKzExMjYsOCBAQAogfQogCiAvKioKLSAqIHRpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUgLSBBZGRzIHN1c3BlbmQgaW50ZXJ2YWwgdG8gdGltZWVrZWVwaW5nIHZhbHVlcwotICogQGRlbHRhOiBwb2ludGVyIHRvIGEgdGltZXNwZWMgZGVsdGEgdmFsdWUKKyAqIHRpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWU2NCAtIEFkZHMgc3VzcGVuZCBpbnRlcnZhbCB0byB0aW1lZWtlZXBpbmcgdmFsdWVzCisgKiBAZGVsdGE6IHBvaW50ZXIgdG8gYSB0aW1lc3BlYzY0IGRlbHRhIHZhbHVlCiAgKgogICogVGhpcyBob29rIGlzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgY2Fubm90IHN1cHBvcnQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrCiAgKiBiZWNhdXNlIHRoZWlyIFJUQy9wZXJzaXN0ZW50IGNsb2NrIGlzIG9ubHkgYWNjZXNzaWJsZSB3aGVuIGlycXMgYXJlIGVuYWJsZWQuCkBAIC0xMDc3LDEwICsxMTM1LDkgQEAKICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHJ0Y19yZXN1bWUoKSwgYW5kIGFsbG93cwogICogYSBzdXNwZW5kIG9mZnNldCB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSB0aW1la2VlcGluZyB2YWx1ZXMuCiAgKi8KLXZvaWQgdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZShzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhKQordm9pZCB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lNjQoc3RydWN0IHRpbWVzcGVjNjQgKmRlbHRhKQogewogCXN0cnVjdCB0aW1la2VlcGVyICp0ayA9ICZ0a19jb3JlLnRpbWVrZWVwZXI7Ci0Jc3RydWN0IHRpbWVzcGVjNjQgdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgpAQCAtMTA5NSw4ICsxMTUyLDcgQEAKIAogCXRpbWVrZWVwaW5nX2ZvcndhcmRfbm93KHRrKTsKIAotCXRtcCA9IHRpbWVzcGVjX3RvX3RpbWVzcGVjNjQoKmRlbHRhKTsKLQlfX3RpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUodGssICZ0bXApOworCV9fdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZSh0aywgZGVsdGEpOwogCiAJdGltZWtlZXBpbmdfdXBkYXRlKHRrLCBUS19DTEVBUl9OVFAgfCBUS19NSVJST1IgfCBUS19DTE9DS19XQVNfU0VUKTsKIApAQCAtMTMzMiw2ICsxMzg4LDEyIEBACiAJICoKIAkgKiBYWFggLSBUT0RPOiBEb2MgbnRwX2Vycm9yIGNhbGN1bGF0aW9uLgogCSAqLworCWlmICgobXVsdF9hZGogPiAwKSAmJiAodGstPnRrci5tdWx0ICsgbXVsdF9hZGogPCBtdWx0X2FkaikpIHsKKwkJLyogTlRQIGFkanVzdG1lbnQgY2F1c2VkIGNsb2Nrc291cmNlIG11bHQgb3ZlcmZsb3cgKi8KKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm47CisJfQorCiAJdGstPnRrci5tdWx0ICs9IG11bHRfYWRqOwogCXRrLT54dGltZV9pbnRlcnZhbCArPSBpbnRlcnZhbDsKIAl0ay0+dGtyLnh0aW1lX25zZWMgLT0gb2Zmc2V0OwpAQCAtMTM5Nyw3ICsxNDU5LDggQEAKIAl9CiAKIAlpZiAodW5saWtlbHkodGstPnRrci5jbG9jay0+bWF4YWRqICYmCi0JCSh0ay0+dGtyLm11bHQgPiB0ay0+dGtyLmNsb2NrLT5tdWx0ICsgdGstPnRrci5jbG9jay0+bWF4YWRqKSkpIHsKKwkJKGFicyh0ay0+dGtyLm11bHQgLSB0ay0+dGtyLmNsb2NrLT5tdWx0KQorCQkJPiB0ay0+dGtyLmNsb2NrLT5tYXhhZGopKSkgewogCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcKIAkJCSJBZGp1c3RpbmcgJXMgbW9yZSB0aGFuIDExJSUgKCVsZCB2cyAlbGQpXG4iLAogCQkJdGstPnRrci5jbG9jay0+bmFtZSwgKGxvbmcpdGstPnRrci5tdWx0LApAQCAtMTY0Niw3ICsxNzA5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3VycmVudF9rZXJuZWxfdGltZSk7CiAKLXN0cnVjdCB0aW1lc3BlYyBnZXRfbW9ub3RvbmljX2NvYXJzZSh2b2lkKQorc3RydWN0IHRpbWVzcGVjNjQgZ2V0X21vbm90b25pY19jb2Fyc2U2NCh2b2lkKQogewogCXN0cnVjdCB0aW1la2VlcGVyICp0ayA9ICZ0a19jb3JlLnRpbWVrZWVwZXI7CiAJc3RydWN0IHRpbWVzcGVjNjQgbm93LCBtb25vOwpAQCAtMTY2Miw3ICsxNzI1LDcgQEAKIAlzZXRfbm9ybWFsaXplZF90aW1lc3BlYzY0KCZub3csIG5vdy50dl9zZWMgKyBtb25vLnR2X3NlYywKIAkJCQlub3cudHZfbnNlYyArIG1vbm8udHZfbnNlYyk7CiAKLQlyZXR1cm4gdGltZXNwZWM2NF90b190aW1lc3BlYyhub3cpOworCXJldHVybiBub3c7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lci5jIGIva2VybmVsL3RpbWUvdGltZXIuYwppbmRleCAzMjYwZmZkLi4yZDNmNWM1IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyLmMKQEAgLTEzNzcsMTIgKzEzNzcsMTEgQEAKIHZvaWQgdXBkYXRlX3Byb2Nlc3NfdGltZXMoaW50IHVzZXJfdGljaykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50OwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBOb3RlOiB0aGlzIHRpbWVyIGlycSBjb250ZXh0IG11c3QgYmUgYWNjb3VudGVkIGZvciBhcyB3ZWxsLiAqLwogCWFjY291bnRfcHJvY2Vzc190aWNrKHAsIHVzZXJfdGljayk7CiAJcnVuX2xvY2FsX3RpbWVycygpOwotCXJjdV9jaGVja19jYWxsYmFja3MoY3B1LCB1c2VyX3RpY2spOworCXJjdV9jaGVja19jYWxsYmFja3ModXNlcl90aWNrKTsKICNpZmRlZiBDT05GSUdfSVJRX1dPUksKIAlpZiAoaW5faXJxKCkpCiAJCWlycV93b3JrX3RpY2soKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZSBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQppbmRleCA2N2Q2MzY5Li45NzljY2RlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKKysrIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCkBAIC01NSw3ICs1NSw3IEBACiBvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgKz0gdHJhY2VfZXZlbnRzX3RyaWdnZXIubwogb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVCkgKz0gdHJhY2Vfa3Byb2JlLm8KIG9iai0kKENPTkZJR19UUkFDRVBPSU5UUykgKz0gcG93ZXItdHJhY2VzLm8KLWlmZXEgKCQoQ09ORklHX1BNX1JVTlRJTUUpLHkpCitpZmVxICgkKENPTkZJR19QTSkseSkKIG9iai0kKENPTkZJR19UUkFDRVBPSU5UUykgKz0gcnBtLXRyYWNlcy5vCiBlbmRpZgogaWZlcSAoJChDT05GSUdfVFJBQ0lORykseSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKaW5kZXggYzFiZDRhZC4uMTFiOWNiMyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKQEAgLTExNDIsOSArMTE0Miw5IEBACiAJci0+c2VjdG9yX2Zyb20gPSBiZTY0X3RvX2NwdShzZWN0b3JfZnJvbSk7CiB9CiAKLXR5cGVkZWYgaW50IChibGtfbG9nX2FjdGlvbl90KSAoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjb25zdCBjaGFyICphY3QpOwordHlwZWRlZiB2b2lkIChibGtfbG9nX2FjdGlvbl90KSAoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjb25zdCBjaGFyICphY3QpOwogCi1zdGF0aWMgaW50IGJsa19sb2dfYWN0aW9uX2NsYXNzaWMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjb25zdCBjaGFyICphY3QpCitzdGF0aWMgdm9pZCBibGtfbG9nX2FjdGlvbl9jbGFzc2ljKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0KQogewogCWNoYXIgcndic1tSV0JTX0xFTl07CiAJdW5zaWduZWQgbG9uZyBsb25nIHRzICA9IGl0ZXItPnRzOwpAQCAtMTE1NCwzMyArMTE1NCwzMyBAQAogCiAJZmlsbF9yd2JzKHJ3YnMsIHQpOwogCi0JcmV0dXJuIHRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwKLQkJCQkiJTNkLCUtM2QgJTJkICU1ZC4lMDlsdSAlNXUgJTJzICUzcyAiLAotCQkJCU1BSk9SKHQtPmRldmljZSksIE1JTk9SKHQtPmRldmljZSksIGl0ZXItPmNwdSwKLQkJCQlzZWNzLCBuc2VjX3JlbSwgaXRlci0+ZW50LT5waWQsIGFjdCwgcndicyk7CisJdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLAorCQkJICIlM2QsJS0zZCAlMmQgJTVkLiUwOWx1ICU1dSAlMnMgJTNzICIsCisJCQkgTUFKT1IodC0+ZGV2aWNlKSwgTUlOT1IodC0+ZGV2aWNlKSwgaXRlci0+Y3B1LAorCQkJIHNlY3MsIG5zZWNfcmVtLCBpdGVyLT5lbnQtPnBpZCwgYWN0LCByd2JzKTsKIH0KIAotc3RhdGljIGludCBibGtfbG9nX2FjdGlvbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGNvbnN0IGNoYXIgKmFjdCkKK3N0YXRpYyB2b2lkIGJsa19sb2dfYWN0aW9uKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0KQogewogCWNoYXIgcndic1tSV0JTX0xFTl07CiAJY29uc3Qgc3RydWN0IGJsa19pb190cmFjZSAqdCA9IHRlX2Jsa19pb190cmFjZShpdGVyLT5lbnQpOwogCiAJZmlsbF9yd2JzKHJ3YnMsIHQpOwotCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIlM2QsJS0zZCAlMnMgJTNzICIsCi0JCQkJTUFKT1IodC0+ZGV2aWNlKSwgTUlOT1IodC0+ZGV2aWNlKSwgYWN0LCByd2JzKTsKKwl0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIlM2QsJS0zZCAlMnMgJTNzICIsCisJCQkgTUFKT1IodC0+ZGV2aWNlKSwgTUlOT1IodC0+ZGV2aWNlKSwgYWN0LCByd2JzKTsKIH0KIAotc3RhdGljIGludCBibGtfbG9nX2R1bXBfcGR1KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQorc3RhdGljIHZvaWQgYmxrX2xvZ19kdW1wX3BkdShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwZHVfYnVmOwogCWludCBwZHVfbGVuOwotCWludCBpLCBlbmQsIHJldDsKKwlpbnQgaSwgZW5kOwogCiAJcGR1X2J1ZiA9IHBkdV9zdGFydChlbnQpOwogCXBkdV9sZW4gPSB0ZV9ibGtfaW9fdHJhY2UoZW50KS0+cGR1X2xlbjsKIAogCWlmICghcGR1X2xlbikKLQkJcmV0dXJuIDE7CisJCXJldHVybjsKIAogCS8qIGZpbmQgdGhlIGxhc3QgemVybyB0aGF0IG5lZWRzIHRvIGJlIHByaW50ZWQgKi8KIAlmb3IgKGVuZCA9IHBkdV9sZW4gLSAxOyBlbmQgPj0gMDsgZW5kLS0pCkBAIC0xMTg4LDExOSArMTE4OCwxMDcgQEAKIAkJCWJyZWFrOwogCWVuZCsrOwogCi0JaWYgKCF0cmFjZV9zZXFfcHV0YyhzLCAnKCcpKQotCQlyZXR1cm4gMDsKKwl0cmFjZV9zZXFfcHV0YyhzLCAnKCcpOwogCiAJZm9yIChpID0gMDsgaSA8IHBkdV9sZW47IGkrKykgewogCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzJTAyeCIsCi0JCQkJICAgICAgIGkgPT0gMCA/ICIiIDogIiAiLCBwZHVfYnVmW2ldKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gcmV0OworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyUwMngiLAorCQkJCSBpID09IDAgPyAiIiA6ICIgIiwgcGR1X2J1ZltpXSk7CiAKIAkJLyoKIAkJICogc3RvcCB3aGVuIHRoZSByZXN0IGlzIGp1c3QgemVyb2VzIGFuZCBpbmRpY2F0ZSBzbwogCQkgKiB3aXRoIGEgIi4uIiBhcHBlbmRlZAogCQkgKi8KLQkJaWYgKGkgPT0gZW5kICYmIGVuZCAhPSBwZHVfbGVuIC0gMSkKLQkJCXJldHVybiB0cmFjZV9zZXFfcHV0cyhzLCAiIC4uKSAiKTsKKwkJaWYgKGkgPT0gZW5kICYmIGVuZCAhPSBwZHVfbGVuIC0gMSkgeworCQkJdHJhY2Vfc2VxX3B1dHMocywgIiAuLikgIik7CisJCQlyZXR1cm47CisJCX0KIAl9CiAKLQlyZXR1cm4gdHJhY2Vfc2VxX3B1dHMocywgIikgIik7CisJdHJhY2Vfc2VxX3B1dHMocywgIikgIik7CiB9CiAKLXN0YXRpYyBpbnQgYmxrX2xvZ19nZW5lcmljKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQorc3RhdGljIHZvaWQgYmxrX2xvZ19nZW5lcmljKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQogewogCWNoYXIgY21kW1RBU0tfQ09NTV9MRU5dOwogCiAJdHJhY2VfZmluZF9jbWRsaW5lKGVudC0+cGlkLCBjbWQpOwogCiAJaWYgKHRfYWN0aW9uKGVudCkgJiBCTEtfVENfQUNUKEJMS19UQ19QQykpIHsKLQkJaW50IHJldDsKLQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIldSAiLCB0X2J5dGVzKGVudCkpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOwotCQlyZXQgPSBibGtfbG9nX2R1bXBfcGR1KHMsIGVudCk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIDA7Ci0JCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJXNdXG4iLCBjbWQpOworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIldSAiLCB0X2J5dGVzKGVudCkpOworCQlibGtfbG9nX2R1bXBfcGR1KHMsIGVudCk7CisJCXRyYWNlX3NlcV9wcmludGYocywgIlslc11cbiIsIGNtZCk7CiAJfSBlbHNlIHsKIAkJaWYgKHRfc2VjKGVudCkpCi0JCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSArICV1IFslc11cbiIsCisJCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlbGx1ICsgJXUgWyVzXVxuIiwKIAkJCQkJCXRfc2VjdG9yKGVudCksIHRfc2VjKGVudCksIGNtZCk7Ci0JCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJXNdXG4iLCBjbWQpOworCQllbHNlCisJCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJbJXNdXG4iLCBjbWQpOwogCX0KIH0KIAotc3RhdGljIGludCBibGtfbG9nX3dpdGhfZXJyb3Ioc3RydWN0IHRyYWNlX3NlcSAqcywKK3N0YXRpYyB2b2lkIGJsa19sb2dfd2l0aF9lcnJvcihzdHJ1Y3QgdHJhY2Vfc2VxICpzLAogCQkJICAgICAgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCiB7CiAJaWYgKHRfYWN0aW9uKGVudCkgJiBCTEtfVENfQUNUKEJMS19UQ19QQykpIHsKLQkJaW50IHJldDsKLQotCQlyZXQgPSBibGtfbG9nX2R1bXBfcGR1KHMsIGVudCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyVkXVxuIiwgdF9lcnJvcihlbnQpKTsKLQkJcmV0dXJuIDA7CisJCWJsa19sb2dfZHVtcF9wZHUocywgZW50KTsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyVkXVxuIiwgdF9lcnJvcihlbnQpKTsKIAl9IGVsc2UgewogCQlpZiAodF9zZWMoZW50KSkKLQkJCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIlbGx1ICsgJXUgWyVkXVxuIiwKLQkJCQkJCXRfc2VjdG9yKGVudCksCi0JCQkJCQl0X3NlYyhlbnQpLCB0X2Vycm9yKGVudCkpOwotCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSBbJWRdXG4iLAotCQkJCQl0X3NlY3RvcihlbnQpLCB0X2Vycm9yKGVudCkpOworCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSArICV1IFslZF1cbiIsCisJCQkJCSB0X3NlY3RvcihlbnQpLAorCQkJCQkgdF9zZWMoZW50KSwgdF9lcnJvcihlbnQpKTsKKwkJZWxzZQorCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSBbJWRdXG4iLAorCQkJCQkgdF9zZWN0b3IoZW50KSwgdF9lcnJvcihlbnQpKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYmxrX2xvZ19yZW1hcChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3N0YXRpYyB2b2lkIGJsa19sb2dfcmVtYXAoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCiB7CiAJc3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByID0geyAuZGV2aWNlX2Zyb20gPSAwLCB9OwogCiAJZ2V0X3BkdV9yZW1hcChlbnQsICZyKTsKLQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSArICV1IDwtICglZCwlZCkgJWxsdVxuIiwKLQkJCQl0X3NlY3RvcihlbnQpLCB0X3NlYyhlbnQpLAotCQkJCU1BSk9SKHIuZGV2aWNlX2Zyb20pLCBNSU5PUihyLmRldmljZV9mcm9tKSwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXIuc2VjdG9yX2Zyb20pOworCXRyYWNlX3NlcV9wcmludGYocywgIiVsbHUgKyAldSA8LSAoJWQsJWQpICVsbHVcbiIsCisJCQkgdF9zZWN0b3IoZW50KSwgdF9zZWMoZW50KSwKKwkJCSBNQUpPUihyLmRldmljZV9mcm9tKSwgTUlOT1Ioci5kZXZpY2VfZnJvbSksCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyLnNlY3Rvcl9mcm9tKTsKIH0KIAotc3RhdGljIGludCBibGtfbG9nX3BsdWcoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCitzdGF0aWMgdm9pZCBibGtfbG9nX3BsdWcoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCiB7CiAJY2hhciBjbWRbVEFTS19DT01NX0xFTl07CiAKIAl0cmFjZV9maW5kX2NtZGxpbmUoZW50LT5waWQsIGNtZCk7CiAKLQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyVzXVxuIiwgY21kKTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJbJXNdXG4iLCBjbWQpOwogfQogCi1zdGF0aWMgaW50IGJsa19sb2dfdW5wbHVnKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQorc3RhdGljIHZvaWQgYmxrX2xvZ191bnBsdWcoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCiB7CiAJY2hhciBjbWRbVEFTS19DT01NX0xFTl07CiAKIAl0cmFjZV9maW5kX2NtZGxpbmUoZW50LT5waWQsIGNtZCk7CiAKLQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyVzXSAlbGx1XG4iLCBjbWQsIGdldF9wZHVfaW50KGVudCkpOworCXRyYWNlX3NlcV9wcmludGYocywgIlslc10gJWxsdVxuIiwgY21kLCBnZXRfcGR1X2ludChlbnQpKTsKIH0KIAotc3RhdGljIGludCBibGtfbG9nX3NwbGl0KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQorc3RhdGljIHZvaWQgYmxrX2xvZ19zcGxpdChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKIHsKIAljaGFyIGNtZFtUQVNLX0NPTU1fTEVOXTsKIAogCXRyYWNlX2ZpbmRfY21kbGluZShlbnQtPnBpZCwgY21kKTsKIAotCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIlbGx1IC8gJWxsdSBbJXNdXG4iLCB0X3NlY3RvcihlbnQpLAotCQkJCWdldF9wZHVfaW50KGVudCksIGNtZCk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSAvICVsbHUgWyVzXVxuIiwgdF9zZWN0b3IoZW50KSwKKwkJCSBnZXRfcGR1X2ludChlbnQpLCBjbWQpOwogfQogCi1zdGF0aWMgaW50IGJsa19sb2dfbXNnKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQorc3RhdGljIHZvaWQgYmxrX2xvZ19tc2coc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCiB7Ci0JaW50IHJldDsKIAljb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0ID0gdGVfYmxrX2lvX3RyYWNlKGVudCk7CiAKLQlyZXQgPSB0cmFjZV9zZXFfcHV0bWVtKHMsIHQgKyAxLCB0LT5wZHVfbGVuKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7Ci0JcmV0dXJuIHJldDsKKwl0cmFjZV9zZXFfcHV0bWVtKHMsIHQgKyAxLCB0LT5wZHVfbGVuKTsKKwl0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKIH0KIAogLyoKQEAgLTEzMzksNyArMTMyNyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWNvbnN0IGNoYXIgKmFjdFsyXTsKLQlpbnQJICAgKCpwcmludCkoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpOworCXZvaWQJICAgKCpwcmludCkoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpOwogfSB3aGF0MmFjdFtdID0gewogCVtfX0JMS19UQV9RVUVVRV0JPSB7eyAgIlEiLCAicXVldWUiIH0sCSAgIGJsa19sb2dfZ2VuZXJpYyB9LAogCVtfX0JMS19UQV9CQUNLTUVSR0VdCT0ge3sgICJNIiwgImJhY2ttZXJnZSIgfSwgIGJsa19sb2dfZ2VuZXJpYyB9LApAQCAtMTM2NCw3ICsxMzUyLDYgQEAKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAljb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0OwogCXUxNiB3aGF0OwotCWludCByZXQ7CiAJYm9vbCBsb25nX2FjdDsKIAlibGtfbG9nX2FjdGlvbl90ICpsb2dfYWN0aW9uOwogCkBAIC0xMzc0LDIxICsxMzYxLDE4IEBACiAJbG9nX2FjdGlvbiA9IGNsYXNzaWMgPyAmYmxrX2xvZ19hY3Rpb25fY2xhc3NpYyA6ICZibGtfbG9nX2FjdGlvbjsKIAogCWlmICh0LT5hY3Rpb24gPT0gQkxLX1ROX01FU1NBR0UpIHsKLQkJcmV0ID0gbG9nX2FjdGlvbihpdGVyLCBsb25nX2FjdCA/ICJtZXNzYWdlIiA6ICJtIik7Ci0JCWlmIChyZXQpCi0JCQlyZXQgPSBibGtfbG9nX21zZyhzLCBpdGVyLT5lbnQpOwotCQlnb3RvIG91dDsKKwkJbG9nX2FjdGlvbihpdGVyLCBsb25nX2FjdCA/ICJtZXNzYWdlIiA6ICJtIik7CisJCWJsa19sb2dfbXNnKHMsIGl0ZXItPmVudCk7CiAJfQogCiAJaWYgKHVubGlrZWx5KHdoYXQgPT0gMCB8fCB3aGF0ID49IEFSUkFZX1NJWkUod2hhdDJhY3QpKSkKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiVW5rbm93biBhY3Rpb24gJXhcbiIsIHdoYXQpOworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJVbmtub3duIGFjdGlvbiAleFxuIiwgd2hhdCk7CiAJZWxzZSB7Ci0JCXJldCA9IGxvZ19hY3Rpb24oaXRlciwgd2hhdDJhY3Rbd2hhdF0uYWN0W2xvbmdfYWN0XSk7Ci0JCWlmIChyZXQpCi0JCQlyZXQgPSB3aGF0MmFjdFt3aGF0XS5wcmludChzLCBpdGVyLT5lbnQpOworCQlsb2dfYWN0aW9uKGl0ZXIsIHdoYXQyYWN0W3doYXRdLmFjdFtsb25nX2FjdF0pOworCQl3aGF0MmFjdFt3aGF0XS5wcmludChzLCBpdGVyLT5lbnQpOwogCX0KLW91dDoKLQlyZXR1cm4gcmV0ID8gVFJBQ0VfVFlQRV9IQU5ETEVEIDogVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gdHJhY2VfaGFuZGxlX3JldHVybihzKTsKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IGJsa190cmFjZV9ldmVudF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCkBAIC0xMzk3LDcgKzEzODEsNyBAQAogCXJldHVybiBwcmludF9vbmVfbGluZShpdGVyLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyBpbnQgYmxrX3RyYWNlX3N5bnRoZXNpemVfb2xkX3RyYWNlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3N0YXRpYyB2b2lkIGJsa190cmFjZV9zeW50aGVzaXplX29sZF90cmFjZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJc3RydWN0IGJsa19pb190cmFjZSAqdCA9IChzdHJ1Y3QgYmxrX2lvX3RyYWNlICopaXRlci0+ZW50OwpAQCAtMTQwNywxOCArMTM5MSwxOCBAQAogCQkudGltZSAgICAgPSBpdGVyLT50cywKIAl9OwogCi0JaWYgKCF0cmFjZV9zZXFfcHV0bWVtKHMsICZvbGQsIG9mZnNldCkpCi0JCXJldHVybiAwOwotCXJldHVybiB0cmFjZV9zZXFfcHV0bWVtKHMsICZ0LT5zZWN0b3IsCi0JCQkJc2l6ZW9mKG9sZCkgLSBvZmZzZXQgKyB0LT5wZHVfbGVuKTsKKwl0cmFjZV9zZXFfcHV0bWVtKHMsICZvbGQsIG9mZnNldCk7CisJdHJhY2Vfc2VxX3B1dG1lbShzLCAmdC0+c2VjdG9yLAorCQkJIHNpemVvZihvbGQpIC0gb2Zmc2V0ICsgdC0+cGR1X2xlbik7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAogYmxrX3RyYWNlX2V2ZW50X3ByaW50X2JpbmFyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncywKIAkJCSAgICAgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCkKIHsKLQlyZXR1cm4gYmxrX3RyYWNlX3N5bnRoZXNpemVfb2xkX3RyYWNlKGl0ZXIpID8KLQkJCVRSQUNFX1RZUEVfSEFORExFRCA6IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCWJsa190cmFjZV9zeW50aGVzaXplX29sZF90cmFjZShpdGVyKTsKKworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKCZpdGVyLT5zZXEpOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgYmxrX3RyYWNlcl9wcmludF9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwppbmRleCAzMWM5MGZlLi45MjlhNzMzZCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMzg3LDYgKzM4Nyw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgZnRyYWNlX3VwZGF0ZV90cmFtcG9saW5lKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpOworCiBzdGF0aWMgaW50IF9fcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpCiB7CiAJaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0RFTEVURUQpCkBAIC00MTYsOSArNDE4LDEzIEBACiAJCWlmIChjb250cm9sX29wc19hbGxvYyhvcHMpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWFkZF9mdHJhY2VfbGlzdF9vcHMoJmZ0cmFjZV9jb250cm9sX2xpc3QsICZjb250cm9sX29wcywgb3BzKTsKKwkJLyogVGhlIGNvbnRyb2xfb3BzIG5lZWRzIHRoZSB0cmFtcG9saW5lIHVwZGF0ZSAqLworCQlvcHMgPSAmY29udHJvbF9vcHM7CiAJfSBlbHNlCiAJCWFkZF9mdHJhY2Vfb3BzKCZmdHJhY2Vfb3BzX2xpc3QsIG9wcyk7CiAKKwlmdHJhY2VfdXBkYXRlX3RyYW1wb2xpbmUob3BzKTsKKwogCWlmIChmdHJhY2VfZW5hYmxlZCkKIAkJdXBkYXRlX2Z0cmFjZV9mdW5jdGlvbigpOwogCkBAIC01NjUsMTMgKzU3MSwxMyBAQAogc3RhdGljIGludCBmdW5jdGlvbl9zdGF0X2hlYWRlcnMoc3RydWN0IHNlcV9maWxlICptKQogewogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKLQlzZXFfcHJpbnRmKG0sICIgIEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLQkJICAgIkhpdCAgICBUaW1lICAgICAgICAgICAgQXZnICAgICAgICAgICAgIHNeMlxuIgotCQkgICAgICAiICAtLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi0JCSAgICItLS0gICAgLS0tLSAgICAgICAgICAgIC0tLSAgICAgICAgICAgICAtLS1cbiIpOworCXNlcV9wdXRzKG0sICIgIEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKwkJICJIaXQgICAgVGltZSAgICAgICAgICAgIEF2ZyAgICAgICAgICAgICBzXjJcbiIKKwkJICAgICIgIC0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKwkJICItLS0gICAgLS0tLSAgICAgICAgICAgIC0tLSAgICAgICAgICAgICAtLS1cbiIpOwogI2Vsc2UKLQlzZXFfcHJpbnRmKG0sICIgIEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFxuIgotCQkgICAgICAiICAtLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS1cbiIpOworCXNlcV9wdXRzKG0sICIgIEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFxuIgorCQkgICAgIiAgLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tXG4iKTsKICNlbmRpZgogCXJldHVybiAwOwogfQpAQCAtNTk4LDcgKzYwNCw3IEBACiAJc2VxX3ByaW50ZihtLCAiICAlLTMwLjMwcyAgJTEwbHUiLCBzdHIsIHJlYy0+Y291bnRlcik7CiAKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0Jc2VxX3ByaW50ZihtLCAiICAgICIpOworCXNlcV9wdXRzKG0sICIgICAgIik7CiAJYXZnID0gcmVjLT50aW1lOwogCWRvX2RpdihhdmcsIHJlYy0+Y291bnRlcik7CiAKQEAgLTExMTEsNiArMTExNyw0MyBAQAogCQkJCQkgIEZUUkFDRV9PUFNfRkxfSU5JVElBTElaRUQsCiB9OwogCisvKgorICogVGhpcyBpcyB1c2VkIGJ5IF9fa2VybmVsX3RleHRfYWRkcmVzcygpIHRvIHJldHVybiB0cnVlIGlmIHRoZQorICogYWRkcmVzcyBpcyBvbiBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0cmFtcG9saW5lIHRoYXQgd291bGQKKyAqIG5vdCByZXR1cm4gdHJ1ZSBmb3IgZWl0aGVyIGNvcmVfa2VybmVsX3RleHQoKSBvcgorICogaXNfbW9kdWxlX3RleHRfYWRkcmVzcygpLgorICovCitib29sIGlzX2Z0cmFjZV90cmFtcG9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3QgZnRyYWNlX29wcyAqb3A7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCS8qCisJICogU29tZSBvZiB0aGUgb3BzIG1heSBiZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsCisJICogdGhleSBhcmUgZnJlZWQgYWZ0ZXIgYSBzeW5jaHJvbml6ZV9zY2hlZCgpLgorCSAqLworCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CisKKwlkb19mb3JfZWFjaF9mdHJhY2Vfb3Aob3AsIGZ0cmFjZV9vcHNfbGlzdCkgeworCQkvKgorCQkgKiBUaGlzIGlzIHRvIGNoZWNrIGZvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdHJhbXBvbGluZXMuCisJCSAqIFRyYW1wb2xpbmVzIHRoYXQgYXJlIGluIGtlcm5lbCB0ZXh0IHdpbGwgaGF2ZQorCQkgKiBjb3JlX2tlcm5lbF90ZXh0KCkgcmV0dXJuIHRydWUuCisJCSAqLworCQlpZiAob3AtPnRyYW1wb2xpbmUgJiYgb3AtPnRyYW1wb2xpbmVfc2l6ZSkKKwkJCWlmIChhZGRyID49IG9wLT50cmFtcG9saW5lICYmCisJCQkgICAgYWRkciA8IG9wLT50cmFtcG9saW5lICsgb3AtPnRyYW1wb2xpbmVfc2l6ZSkgeworCQkJCXJldCA9IHRydWU7CisJCQkJZ290byBvdXQ7CisJCQl9CisJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2Vfb3Aob3ApOworCisgb3V0OgorCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0cnVjdCBmdHJhY2VfcGFnZSB7CiAJc3RydWN0IGZ0cmFjZV9wYWdlCSpuZXh0OwogCXN0cnVjdCBkeW5fZnRyYWNlCSpyZWNvcmRzOwpAQCAtMTMxNSw2ICsxMzU4LDkgQEAKIHN0YXRpYyB2b2lkCiBmdHJhY2VfaGFzaF9yZWNfZW5hYmxlX21vZGlmeShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCBpbnQgZmlsdGVyX2hhc2gpOwogCitzdGF0aWMgaW50IGZ0cmFjZV9oYXNoX2lwbW9kaWZ5X3VwZGF0ZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLAorCQkJCSAgICAgICBzdHJ1Y3QgZnRyYWNlX2hhc2ggKm5ld19oYXNoKTsKKwogc3RhdGljIGludAogZnRyYWNlX2hhc2hfbW92ZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCBpbnQgZW5hYmxlLAogCQkgc3RydWN0IGZ0cmFjZV9oYXNoICoqZHN0LCBzdHJ1Y3QgZnRyYWNlX2hhc2ggKnNyYykKQEAgLTEzMjUsOCArMTM3MSwxMyBAQAogCXN0cnVjdCBmdHJhY2VfaGFzaCAqbmV3X2hhc2g7CiAJaW50IHNpemUgPSBzcmMtPmNvdW50OwogCWludCBiaXRzID0gMDsKKwlpbnQgcmV0OwogCWludCBpOwogCisJLyogUmVqZWN0IHNldHRpbmcgbm90cmFjZSBoYXNoIG9uIElQTU9ESUZZIGZ0cmFjZV9vcHMgKi8KKwlpZiAob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfSVBNT0RJRlkgJiYgIWVuYWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKgogCSAqIElmIHRoZSBuZXcgc291cmNlIGlzIGVtcHR5LCBqdXN0IGZyZWUgZHN0IGFuZCBhc3NpZ24gaXQKIAkgKiB0aGUgZW1wdHlfaGFzaC4KQEAgLTEzNjAsNiArMTQxMSwxNiBAQAogCX0KIAogdXBkYXRlOgorCS8qIE1ha2Ugc3VyZSB0aGlzIGNhbiBiZSBhcHBsaWVkIGlmIGl0IGlzIElQTU9ESUZZIGZ0cmFjZV9vcHMgKi8KKwlpZiAoZW5hYmxlKSB7CisJCS8qIElQTU9ESUZZIHNob3VsZCBiZSB1cGRhdGVkIG9ubHkgd2hlbiBmaWx0ZXJfaGFzaCB1cGRhdGluZyAqLworCQlyZXQgPSBmdHJhY2VfaGFzaF9pcG1vZGlmeV91cGRhdGUob3BzLCBuZXdfaGFzaCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlmcmVlX2Z0cmFjZV9oYXNoKG5ld19oYXNoKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKIAkvKgogCSAqIFJlbW92ZSB0aGUgY3VycmVudCBzZXQsIHVwZGF0ZSB0aGUgaGFzaCBhbmQgYWRkCiAJICogdGhlbSBiYWNrLgpAQCAtMTcyNCw2ICsxNzg1LDExNCBAQAogCWZ0cmFjZV9oYXNoX3JlY191cGRhdGVfbW9kaWZ5KG9wcywgZmlsdGVyX2hhc2gsIDEpOwogfQogCisvKgorICogVHJ5IHRvIHVwZGF0ZSBJUE1PRElGWSBmbGFnIG9uIGVhY2ggZnRyYWNlX3JlYy4gUmV0dXJuIDAgaWYgaXQgaXMgT0sKKyAqIG9yIG5vLW5lZWRlZCB0byB1cGRhdGUsIC1FQlVTWSBpZiBpdCBkZXRlY3RzIGEgY29uZmxpY3Qgb2YgdGhlIGZsYWcKKyAqIG9uIGEgZnRyYWNlX3JlYywgYW5kIC1FSU5WQUwgaWYgdGhlIG5ld19oYXNoIHRyaWVzIHRvIHRyYWNlIGFsbCByZWNzLgorICogTm90ZSB0aGF0IG9sZF9oYXNoIGFuZCBuZXdfaGFzaCBoYXMgYmVsb3cgbWVhbmluZ3MKKyAqICAtIElmIHRoZSBoYXNoIGlzIE5VTEwsIGl0IGhpdHMgYWxsIHJlY3MgKGlmIElQTU9ESUZZIGlzIHNldCwgdGhpcyBpcyByZWplY3RlZCkKKyAqICAtIElmIHRoZSBoYXNoIGlzIEVNUFRZX0hBU0gsIGl0IGhpdHMgbm90aGluZworICogIC0gQW55dGhpbmcgZWxzZSBoaXRzIHRoZSByZWNzIHdoaWNoIG1hdGNoIHRoZSBoYXNoIGVudHJpZXMuCisgKi8KK3N0YXRpYyBpbnQgX19mdHJhY2VfaGFzaF91cGRhdGVfaXBtb2RpZnkoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywKKwkJCQkJIHN0cnVjdCBmdHJhY2VfaGFzaCAqb2xkX2hhc2gsCisJCQkJCSBzdHJ1Y3QgZnRyYWNlX2hhc2ggKm5ld19oYXNoKQoreworCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CisJc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgKmVuZCA9IE5VTEw7CisJaW50IGluX29sZCwgaW5fbmV3OworCisJLyogT25seSB1cGRhdGUgaWYgdGhlIG9wcyBoYXMgYmVlbiByZWdpc3RlcmVkICovCisJaWYgKCEob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfRU5BQkxFRCkpCisJCXJldHVybiAwOworCisJaWYgKCEob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfSVBNT0RJRlkpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogU2luY2UgdGhlIElQTU9ESUZZIGlzIGEgdmVyeSBhZGRyZXNzIHNlbnNpdGl2ZSBhY3Rpb24sIHdlIGRvIG5vdAorCSAqIGFsbG93IGZ0cmFjZV9vcHMgdG8gc2V0IGFsbCBmdW5jdGlvbnMgdG8gbmV3IGhhc2guCisJICovCisJaWYgKCFuZXdfaGFzaCB8fCAhb2xkX2hhc2gpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVXBkYXRlIHJlYy0+ZmxhZ3MgKi8KKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKwkJLyogV2UgbmVlZCB0byB1cGRhdGUgb25seSBkaWZmZXJlbmNlcyBvZiBmaWx0ZXJfaGFzaCAqLworCQlpbl9vbGQgPSAhIWZ0cmFjZV9sb29rdXBfaXAob2xkX2hhc2gsIHJlYy0+aXApOworCQlpbl9uZXcgPSAhIWZ0cmFjZV9sb29rdXBfaXAobmV3X2hhc2gsIHJlYy0+aXApOworCQlpZiAoaW5fb2xkID09IGluX25ldykKKwkJCWNvbnRpbnVlOworCisJCWlmIChpbl9uZXcpIHsKKwkJCS8qIE5ldyBlbnRyaWVzIG11c3QgZW5zdXJlIG5vIG90aGVycyBhcmUgdXNpbmcgaXQgKi8KKwkJCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0lQTU9ESUZZKQorCQkJCWdvdG8gcm9sbGJhY2s7CisJCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9JUE1PRElGWTsKKwkJfSBlbHNlIC8qIFJlbW92ZWQgZW50cnkgKi8KKwkJCXJlYy0+ZmxhZ3MgJj0gfkZUUkFDRV9GTF9JUE1PRElGWTsKKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKworCXJldHVybiAwOworCityb2xsYmFjazoKKwllbmQgPSByZWM7CisKKwkvKiBSb2xsIGJhY2sgd2hhdCB3ZSBkaWQgYWJvdmUgKi8KKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKwkJaWYgKHJlYyA9PSBlbmQpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJaW5fb2xkID0gISFmdHJhY2VfbG9va3VwX2lwKG9sZF9oYXNoLCByZWMtPmlwKTsKKwkJaW5fbmV3ID0gISFmdHJhY2VfbG9va3VwX2lwKG5ld19oYXNoLCByZWMtPmlwKTsKKwkJaWYgKGluX29sZCA9PSBpbl9uZXcpCisJCQljb250aW51ZTsKKworCQlpZiAoaW5fbmV3KQorCQkJcmVjLT5mbGFncyAmPSB+RlRSQUNFX0ZMX0lQTU9ESUZZOworCQllbHNlCisJCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9JUE1PRElGWTsKKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKworZXJyX291dDoKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgaW50IGZ0cmFjZV9oYXNoX2lwbW9kaWZ5X2VuYWJsZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQoreworCXN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCA9IG9wcy0+ZnVuY19oYXNoLT5maWx0ZXJfaGFzaDsKKworCWlmIChmdHJhY2VfaGFzaF9lbXB0eShoYXNoKSkKKwkJaGFzaCA9IE5VTEw7CisKKwlyZXR1cm4gX19mdHJhY2VfaGFzaF91cGRhdGVfaXBtb2RpZnkob3BzLCBFTVBUWV9IQVNILCBoYXNoKTsKK30KKworLyogRGlzYWJsaW5nIGFsd2F5cyBzdWNjZWVkcyAqLworc3RhdGljIHZvaWQgZnRyYWNlX2hhc2hfaXBtb2RpZnlfZGlzYWJsZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQoreworCXN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCA9IG9wcy0+ZnVuY19oYXNoLT5maWx0ZXJfaGFzaDsKKworCWlmIChmdHJhY2VfaGFzaF9lbXB0eShoYXNoKSkKKwkJaGFzaCA9IE5VTEw7CisKKwlfX2Z0cmFjZV9oYXNoX3VwZGF0ZV9pcG1vZGlmeShvcHMsIGhhc2gsIEVNUFRZX0hBU0gpOworfQorCitzdGF0aWMgaW50IGZ0cmFjZV9oYXNoX2lwbW9kaWZ5X3VwZGF0ZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLAorCQkJCSAgICAgICBzdHJ1Y3QgZnRyYWNlX2hhc2ggKm5ld19oYXNoKQoreworCXN0cnVjdCBmdHJhY2VfaGFzaCAqb2xkX2hhc2ggPSBvcHMtPmZ1bmNfaGFzaC0+ZmlsdGVyX2hhc2g7CisKKwlpZiAoZnRyYWNlX2hhc2hfZW1wdHkob2xkX2hhc2gpKQorCQlvbGRfaGFzaCA9IE5VTEw7CisKKwlpZiAoZnRyYWNlX2hhc2hfZW1wdHkobmV3X2hhc2gpKQorCQluZXdfaGFzaCA9IE5VTEw7CisKKwlyZXR1cm4gX19mdHJhY2VfaGFzaF91cGRhdGVfaXBtb2RpZnkob3BzLCBvbGRfaGFzaCwgbmV3X2hhc2gpOworfQorCiBzdGF0aWMgdm9pZCBwcmludF9pcF9pbnMoY29uc3QgY2hhciAqZm10LCB1bnNpZ25lZCBjaGFyICpwKQogewogCWludCBpOwpAQCAtMTczNCwxMCArMTkwMywxMyBAQAogCQlwcmludGsoS0VSTl9DT05UICIlcyUwMngiLCBpID8gIjoiIDogIiIsIHBbaV0pOwogfQogCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgKgorZnRyYWNlX2ZpbmRfdHJhbXBfb3BzX2FueShzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKTsKKwogLyoqCiAgKiBmdHJhY2VfYnVnIC0gcmVwb3J0IGFuZCBzaHV0ZG93biBmdW5jdGlvbiB0cmFjZXIKICAqIEBmYWlsZWQ6IFRoZSBmYWlsZWQgdHlwZSAoRUZBVUxULCBFSU5WQUwsIEVQRVJNKQotICogQGlwOiBUaGUgYWRkcmVzcyB0aGF0IGZhaWxlZAorICogQHJlYzogVGhlIHJlY29yZCB0aGF0IGZhaWxlZAogICoKICAqIFRoZSBhcmNoIGNvZGUgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmdW5jdGlvbiB0cmFjaW5nCiAgKiBjYW4gY2FsbCBmdHJhY2VfYnVnKCkgd2hlbiBpdCBoYXMgZGV0ZWN0ZWQgYSBwcm9ibGVtIGluCkBAIC0xNzQ2LDggKzE5MTgsMTAgQEAKICAqIEVJTlZBTCAtIGlmIHdoYXQgaXMgcmVhZCBhdCBAaXAgaXMgbm90IHdoYXQgd2FzIGV4cGVjdGVkCiAgKiBFUEVSTSAtIGlmIHRoZSBwcm9ibGVtIGhhcHBlbnMgb24gd3JpdHRpbmcgdG8gdGhlIEBpcCBhZGRyZXNzCiAgKi8KLXZvaWQgZnRyYWNlX2J1ZyhpbnQgZmFpbGVkLCB1bnNpZ25lZCBsb25nIGlwKQordm9pZCBmdHJhY2VfYnVnKGludCBmYWlsZWQsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpCiB7CisJdW5zaWduZWQgbG9uZyBpcCA9IHJlYyA/IHJlYy0+aXAgOiAwOworCiAJc3dpdGNoIChmYWlsZWQpIHsKIAljYXNlIC1FRkFVTFQ6CiAJCUZUUkFDRV9XQVJOX09OX09OQ0UoMSk7CkBAIC0xNzU5LDcgKzE5MzMsNyBAQAogCQlwcl9pbmZvKCJmdHJhY2UgZmFpbGVkIHRvIG1vZGlmeSAiKTsKIAkJcHJpbnRfaXBfc3ltKGlwKTsKIAkJcHJpbnRfaXBfaW5zKCIgYWN0dWFsOiAiLCAodW5zaWduZWQgY2hhciAqKWlwKTsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJcHJfY29udCgiXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSAtRVBFUk06CiAJCUZUUkFDRV9XQVJOX09OX09OQ0UoMSk7CkBAIC0xNzcxLDYgKzE5NDUsMjQgQEAKIAkJcHJfaW5mbygiZnRyYWNlIGZhdWx0ZWQgb24gdW5rbm93biBlcnJvciAiKTsKIAkJcHJpbnRfaXBfc3ltKGlwKTsKIAl9CisJaWYgKHJlYykgeworCQlzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzID0gTlVMTDsKKworCQlwcl9pbmZvKCJmdHJhY2UgcmVjb3JkIGZsYWdzOiAlbHhcbiIsIHJlYy0+ZmxhZ3MpOworCQlwcl9jb250KCIgKCVsZCklcyIsIGZ0cmFjZV9yZWNfY291bnQocmVjKSwKKwkJCXJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfUkVHUyA/ICIgUiIgOiAiICAiKTsKKwkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfVFJBTVBfRU4pIHsKKwkJCW9wcyA9IGZ0cmFjZV9maW5kX3RyYW1wX29wc19hbnkocmVjKTsKKwkJCWlmIChvcHMpCisJCQkJcHJfY29udCgiXHR0cmFtcDogJXBTIiwKKwkJCQkJKHZvaWQgKilvcHMtPnRyYW1wb2xpbmUpOworCQkJZWxzZQorCQkJCXByX2NvbnQoIlx0dHJhbXA6IEVSUk9SISIpOworCisJCX0KKwkJaXAgPSBmdHJhY2VfZ2V0X2FkZHJfY3VycihyZWMpOworCQlwcl9jb250KCIgZXhwZWN0ZWQgdHJhbXA6ICVseFxuIiwgaXApOworCX0KIH0KIAogc3RhdGljIGludCBmdHJhY2VfY2hlY2tfcmVjb3JkKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIGludCBlbmFibGUsIGludCB1cGRhdGUpCkBAIC0yMDkzLDcgKzIyODUsNyBAQAogCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewogCQlmYWlsZWQgPSBfX2Z0cmFjZV9yZXBsYWNlX2NvZGUocmVjLCBlbmFibGUpOwogCQlpZiAoZmFpbGVkKSB7Ci0JCQlmdHJhY2VfYnVnKGZhaWxlZCwgcmVjLT5pcCk7CisJCQlmdHJhY2VfYnVnKGZhaWxlZCwgcmVjKTsKIAkJCS8qIFN0b3AgcHJvY2Vzc2luZyAqLwogCQkJcmV0dXJuOwogCQl9CkBAIC0yMTc1LDE3ICsyMzY3LDE0IEBACiBzdGF0aWMgaW50CiBmdHJhY2VfY29kZV9kaXNhYmxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGR5bl9mdHJhY2UgKnJlYykKIHsKLQl1bnNpZ25lZCBsb25nIGlwOwogCWludCByZXQ7CiAKLQlpcCA9IHJlYy0+aXA7Ci0KIAlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBmdHJhY2VfbWFrZV9ub3AobW9kLCByZWMsIE1DT1VOVF9BRERSKTsKIAlpZiAocmV0KSB7Ci0JCWZ0cmFjZV9idWcocmV0LCBpcCk7CisJCWZ0cmFjZV9idWcocmV0LCByZWMpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CkBAIC0yMzIwLDYgKzI1MDksMTAgQEAKIHN0YXRpYyBmdHJhY2VfZnVuY190IHNhdmVkX2Z0cmFjZV9mdW5jOwogc3RhdGljIGludCBmdHJhY2Vfc3RhcnRfdXA7CiAKK3ZvaWQgX193ZWFrIGFyY2hfZnRyYWNlX3RyYW1wb2xpbmVfZnJlZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQoreworfQorCiBzdGF0aWMgdm9pZCBjb250cm9sX29wc19mcmVlKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpCiB7CiAJZnJlZV9wZXJjcHUob3BzLT5kaXNhYmxlZCk7CkBAIC0yMzY5LDYgKzI1NjIsMTUgQEAKIAkgKi8KIAlvcHMtPmZsYWdzIHw9IEZUUkFDRV9PUFNfRkxfRU5BQkxFRCB8IEZUUkFDRV9PUFNfRkxfQURESU5HOwogCisJcmV0ID0gZnRyYWNlX2hhc2hfaXBtb2RpZnlfZW5hYmxlKG9wcyk7CisJaWYgKHJldCA8IDApIHsKKwkJLyogUm9sbGJhY2sgcmVnaXN0cmF0aW9uIHByb2Nlc3MgKi8KKwkJX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihvcHMpOworCQlmdHJhY2Vfc3RhcnRfdXAtLTsKKwkJb3BzLT5mbGFncyAmPSB+RlRSQUNFX09QU19GTF9FTkFCTEVEOworCQlyZXR1cm4gcmV0OworCX0KKwogCWZ0cmFjZV9oYXNoX3JlY19lbmFibGUob3BzLCAxKTsKIAogCWZ0cmFjZV9zdGFydHVwX2VuYWJsZShjb21tYW5kKTsKQEAgLTIzOTcsNiArMjU5OSw4IEBACiAJICovCiAJV0FSTl9PTl9PTkNFKGZ0cmFjZV9zdGFydF91cCA8IDApOwogCisJLyogRGlzYWJsaW5nIGlwbW9kaWZ5IG5ldmVyIGZhaWxzICovCisJZnRyYWNlX2hhc2hfaXBtb2RpZnlfZGlzYWJsZShvcHMpOwogCWZ0cmFjZV9oYXNoX3JlY19kaXNhYmxlKG9wcywgMSk7CiAKIAlvcHMtPmZsYWdzICY9IH5GVFJBQ0VfT1BTX0ZMX0VOQUJMRUQ7CkBAIC0yNDcxLDYgKzI2NzUsOCBAQAogCWlmIChvcHMtPmZsYWdzICYgKEZUUkFDRV9PUFNfRkxfRFlOQU1JQyB8IEZUUkFDRV9PUFNfRkxfQ09OVFJPTCkpIHsKIAkJc2NoZWR1bGVfb25fZWFjaF9jcHUoZnRyYWNlX3N5bmMpOwogCisJCWFyY2hfZnRyYWNlX3RyYW1wb2xpbmVfZnJlZShvcHMpOworCiAJCWlmIChvcHMtPmZsYWdzICYgRlRSQUNFX09QU19GTF9DT05UUk9MKQogCQkJY29udHJvbF9vcHNfZnJlZShvcHMpOwogCX0KQEAgLTI2MjMsNyArMjgyOSw3IEBACiAJCQlpZiAoZnRyYWNlX3N0YXJ0X3VwICYmIGNudCkgewogCQkJCWludCBmYWlsZWQgPSBfX2Z0cmFjZV9yZXBsYWNlX2NvZGUocCwgMSk7CiAJCQkJaWYgKGZhaWxlZCkKLQkJCQkJZnRyYWNlX2J1ZyhmYWlsZWQsIHAtPmlwKTsKKwkJCQkJZnRyYWNlX2J1ZyhmYWlsZWQsIHApOwogCQkJfQogCQl9CiAJfQpAQCAtMjk0OCw2ICszMTU0LDIyIEBACiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiB9CiAKK3ZvaWQgKiBfX3dlYWsKK2FyY2hfZnRyYWNlX3RyYW1wb2xpbmVfZnVuYyhzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBhZGRfdHJhbXBvbGluZV9mdW5jKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywKKwkJCQlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQoreworCXZvaWQgKnB0cjsKKworCXB0ciA9IGFyY2hfZnRyYWNlX3RyYW1wb2xpbmVfZnVuYyhvcHMsIHJlYyk7CisJaWYgKHB0cikKKwkJc2VxX3ByaW50ZihtLCAiIC0+JXBTIiwgcHRyKTsKK30KKwogc3RhdGljIGludCB0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOwpAQCAtMjk1OCw5ICszMTgwLDkgQEAKIAogCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX1BSSU5UQUxMKSB7CiAJCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX05PVFJBQ0UpCi0JCQlzZXFfcHJpbnRmKG0sICIjIyMjIG5vIGZ1bmN0aW9ucyBkaXNhYmxlZCAjIyMjXG4iKTsKKwkJCXNlcV9wdXRzKG0sICIjIyMjIG5vIGZ1bmN0aW9ucyBkaXNhYmxlZCAjIyMjXG4iKTsKIAkJZWxzZQotCQkJc2VxX3ByaW50ZihtLCAiIyMjIyBhbGwgZnVuY3Rpb25zIGVuYWJsZWQgIyMjI1xuIik7CisJCQlzZXFfcHV0cyhtLCAiIyMjIyBhbGwgZnVuY3Rpb25zIGVuYWJsZWQgIyMjI1xuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjk3MSwyMiArMzE5MywyNSBAQAogCiAJc2VxX3ByaW50ZihtLCAiJXBzIiwgKHZvaWQgKilyZWMtPmlwKTsKIAlpZiAoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9FTkFCTEVEKSB7Ci0JCXNlcV9wcmludGYobSwgIiAoJWxkKSVzIiwKLQkJCSAgIGZ0cmFjZV9yZWNfY291bnQocmVjKSwKLQkJCSAgIHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfUkVHUyA/ICIgUiIgOiAiICAiKTsKLQkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfVFJBTVBfRU4pIHsKLQkJCXN0cnVjdCBmdHJhY2Vfb3BzICpvcHM7CisJCXN0cnVjdCBmdHJhY2Vfb3BzICpvcHMgPSBOVUxMOwogCisJCXNlcV9wcmludGYobSwgIiAoJWxkKSVzJXMiLAorCQkJICAgZnRyYWNlX3JlY19jb3VudChyZWMpLAorCQkJICAgcmVjLT5mbGFncyAmIEZUUkFDRV9GTF9SRUdTID8gIiBSIiA6ICIgICIsCisJCQkgICByZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0lQTU9ESUZZID8gIiBJIiA6ICIgICIpOworCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9UUkFNUF9FTikgewogCQkJb3BzID0gZnRyYWNlX2ZpbmRfdHJhbXBfb3BzX2FueShyZWMpOwogCQkJaWYgKG9wcykKIAkJCQlzZXFfcHJpbnRmKG0sICJcdHRyYW1wOiAlcFMiLAogCQkJCQkgICAodm9pZCAqKW9wcy0+dHJhbXBvbGluZSk7CiAJCQllbHNlCi0JCQkJc2VxX3ByaW50ZihtLCAiXHR0cmFtcDogRVJST1IhIik7CisJCQkJc2VxX3B1dHMobSwgIlx0dHJhbXA6IEVSUk9SISIpOworCiAJCX0KKwkJYWRkX3RyYW1wb2xpbmVfZnVuYyhtLCBvcHMsIHJlYyk7CiAJfQkKIAotCXNlcV9wcmludGYobSwgIlxuIik7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMwMjAsOSArMzI0NSw2IEBACiB7CiAJc3RydWN0IGZ0cmFjZV9pdGVyYXRvciAqaXRlcjsKIAotCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCWl0ZXIgPSBfX3NlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJnNob3dfZnRyYWNlX3NlcV9vcHMsIHNpemVvZigqaXRlcikpOwogCWlmIChpdGVyKSB7CiAJCWl0ZXItPnBnID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OwpAQCAtMzk3NSw2ICs0MTk3LDkgQEAKIHN0YXRpYyBjaGFyIGZ0cmFjZV9ncmFwaF9ub3RyYWNlX2J1ZltGVFJBQ0VfRklMVEVSX1NJWkVdIF9faW5pdGRhdGE7CiBzdGF0aWMgaW50IGZ0cmFjZV9zZXRfZnVuYyh1bnNpZ25lZCBsb25nICphcnJheSwgaW50ICppZHgsIGludCBzaXplLCBjaGFyICpidWZmZXIpOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2dsb2JhbF90cmFtcG9saW5lOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9nbG9iYWxfZmxhZ3M7CisKIHN0YXRpYyBpbnQgX19pbml0IHNldF9ncmFwaF9mdW5jdGlvbihjaGFyICpzdHIpCiB7CiAJc3RybGNweShmdHJhY2VfZ3JhcGhfYnVmLCBzdHIsIEZUUkFDRV9GSUxURVJfU0laRSk7CkBAIC00MTgzLDkgKzQ0MDgsOSBAQAogCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2RhdGEgKmZnZCA9IG0tPnByaXZhdGU7CiAKIAkJaWYgKGZnZC0+dGFibGUgPT0gZnRyYWNlX2dyYXBoX2Z1bmNzKQotCQkJc2VxX3ByaW50ZihtLCAiIyMjIyBhbGwgZnVuY3Rpb25zIGVuYWJsZWQgIyMjI1xuIik7CisJCQlzZXFfcHV0cyhtLCAiIyMjIyBhbGwgZnVuY3Rpb25zIGVuYWJsZWQgIyMjI1xuIik7CiAJCWVsc2UKLQkJCXNlcV9wcmludGYobSwgIiMjIyMgbm8gZnVuY3Rpb25zIGRpc2FibGVkICMjIyNcbiIpOworCQkJc2VxX3B1dHMobSwgIiMjIyMgbm8gZnVuY3Rpb25zIGRpc2FibGVkICMjIyNcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQ2OTYsNiArNDkyMSwzMiBAQAogCWZ0cmFjZV9kaXNhYmxlZCA9IDE7CiB9CiAKKy8qIERvIG5vdGhpbmcgaWYgYXJjaCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgKi8KK3ZvaWQgX193ZWFrIGFyY2hfZnRyYWNlX3VwZGF0ZV90cmFtcG9saW5lKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpCit7Cit9CisKK3N0YXRpYyB2b2lkIGZ0cmFjZV91cGRhdGVfdHJhbXBvbGluZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQoreworCisvKgorICogQ3VycmVudGx5IHRoZXJlJ3Mgbm8gc2FmZSB3YXkgdG8gZnJlZSBhIHRyYW1wb2xpbmUgd2hlbiB0aGUga2VybmVsCisgKiBpcyBjb25maWd1cmVkIHdpdGggUFJFRU1QVC4gVGhhdCBpcyBiZWNhdXNlIGEgdGFzayBjb3VsZCBiZSBwcmVlbXB0ZWQKKyAqIHdoZW4gaXQganVtcGVkIHRvIHRoZSB0cmFtcG9saW5lLCBpdCBtYXkgYmUgcHJlZW1wdGVkIGZvciBhIGxvbmcgdGltZQorICogZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gbG9hZCwgYW5kIGN1cnJlbnRseSB0aGVyZSdzIG5vIHdheSB0byBrbm93CisgKiB3aGVuIGl0IHdpbGwgYmUgb2ZmIHRoZSB0cmFtcG9saW5lLiBJZiB0aGUgdHJhbXBvbGluZSBpcyBmcmVlZAorICogdG9vIGVhcmx5LCB3aGVuIHRoZSB0YXNrIHJ1bnMgYWdhaW4sIGl0IHdpbGwgYmUgZXhlY3V0aW5nIG9uIGZyZWVkCisgKiBtZW1vcnkgYW5kIGNyYXNoLgorICovCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwkvKiBDdXJyZW50bHksIG9ubHkgbm9uIGR5bmFtaWMgb3BzIGNhbiBoYXZlIGEgdHJhbXBvbGluZSAqLworCWlmIChvcHMtPmZsYWdzICYgRlRSQUNFX09QU19GTF9EWU5BTUlDKQorCQlyZXR1cm47CisjZW5kaWYKKworCWFyY2hfZnRyYWNlX3VwZGF0ZV90cmFtcG9saW5lKG9wcyk7Cit9CisKICNlbHNlCiAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyBnbG9iYWxfb3BzID0gewpAQCAtNDczOCw2ICs0OTg5LDEwIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIGZ0cmFjZV91cGRhdGVfdHJhbXBvbGluZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAKIF9faW5pdCB2b2lkIGZ0cmFjZV9pbml0X2dsb2JhbF9hcnJheV9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKQEAgLTUwNzUsMTIgKzUzMzAsMTIgQEAKIAljb25zdCBzdHJ1Y3QgZnRyYWNlX3BpZCAqZnBpZCA9IGxpc3RfZW50cnkodiwgc3RydWN0IGZ0cmFjZV9waWQsIGxpc3QpOwogCiAJaWYgKHYgPT0gKHZvaWQgKikxKSB7Ci0JCXNlcV9wcmludGYobSwgIm5vIHBpZFxuIik7CisJCXNlcV9wdXRzKG0sICJubyBwaWRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoZnBpZC0+cGlkID09IGZ0cmFjZV9zd2FwcGVyX3BpZCkKLQkJc2VxX3ByaW50ZihtLCAic3dhcHBlciB0YXNrc1xuIik7CisJCXNlcV9wdXRzKG0sICJzd2FwcGVyIHRhc2tzXG4iKTsKIAllbHNlCiAJCXNlcV9wcmludGYobSwgIiV1XG4iLCBwaWRfdm5yKGZwaWQtPnBpZCkpOwogCkBAIC01MjkzLDYgKzU1NDgsNyBAQAogCQkJCSAgIEZUUkFDRV9PUFNfRkxfU1RVQiwKICNpZmRlZiBGVFJBQ0VfR1JBUEhfVFJBTVBfQUREUgogCS50cmFtcG9saW5lCQk9IEZUUkFDRV9HUkFQSF9UUkFNUF9BRERSLAorCS8qIHRyYW1wb2xpbmVfc2l6ZSBpcyBvbmx5IG5lZWRlZCBmb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRyYW1wcyAqLwogI2VuZGlmCiAJQVNTSUdOX09QU19IQVNIKGdyYXBoX29wcywgJmdsb2JhbF9vcHMubG9jYWxfaGFzaCkKIH07CkBAIC01NTIyLDcgKzU3NzgsNiBAQAogCXVwZGF0ZV9mdW5jdGlvbl9ncmFwaF9mdW5jKCk7CiAKIAlyZXQgPSBmdHJhY2Vfc3RhcnR1cCgmZ3JhcGhfb3BzLCBGVFJBQ0VfU1RBUlRfRlVOQ19SRVQpOwotCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTU1NDMsNiArNTc5OCwxNyBAQAogCXVucmVnaXN0ZXJfcG1fbm90aWZpZXIoJmZ0cmFjZV9zdXNwZW5kX25vdGlmaWVyKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChmdHJhY2VfZ3JhcGhfcHJvYmVfc2NoZWRfc3dpdGNoLCBOVUxMKTsKIAorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCS8qCisJICogRnVuY3Rpb24gZ3JhcGggZG9lcyBub3QgYWxsb2NhdGUgdGhlIHRyYW1wb2xpbmUsIGJ1dAorCSAqIG90aGVyIGdsb2JhbF9vcHMgZG8uIFdlIG5lZWQgdG8gcmVzZXQgdGhlIEFMTE9DX1RSQU1QIGZsYWcKKwkgKiBpZiBvbmUgd2FzIHVzZWQuCisJICovCisJZ2xvYmFsX29wcy50cmFtcG9saW5lID0gc2F2ZV9nbG9iYWxfdHJhbXBvbGluZTsKKwlpZiAoc2F2ZV9nbG9iYWxfZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0FMTE9DX1RSQU1QKQorCQlnbG9iYWxfb3BzLmZsYWdzIHw9IEZUUkFDRV9PUFNfRkxfQUxMT0NfVFJBTVA7CisjZW5kaWYKKwogIG91dDoKIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKaW5kZXggYTU2ZTA3Yy4uN2E0MTA0YyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKQEAgLTM0LDIxICszNCwxOSBAQAogICovCiBpbnQgcmluZ19idWZmZXJfcHJpbnRfZW50cnlfaGVhZGVyKHN0cnVjdCB0cmFjZV9zZXEgKnMpCiB7Ci0JaW50IHJldDsKKwl0cmFjZV9zZXFfcHV0cyhzLCAiIyBjb21wcmVzc2VkIGVudHJ5IGhlYWRlclxuIik7CisJdHJhY2Vfc2VxX3B1dHMocywgIlx0dHlwZV9sZW4gICAgOiAgICA1IGJpdHNcbiIpOworCXRyYWNlX3NlcV9wdXRzKHMsICJcdHRpbWVfZGVsdGEgIDogICAyNyBiaXRzXG4iKTsKKwl0cmFjZV9zZXFfcHV0cyhzLCAiXHRhcnJheSAgICAgICA6ICAgMzIgYml0c1xuIik7CisJdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRwYWRkaW5nICAgICA6IHR5cGUgPT0gJWRcbiIsCisJCQkgUklOR0JVRl9UWVBFX1BBRERJTkcpOworCXRyYWNlX3NlcV9wcmludGYocywgIlx0dGltZV9leHRlbmQgOiB0eXBlID09ICVkXG4iLAorCQkJIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORCk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRkYXRhIG1heCB0eXBlX2xlbiAgPT0gJWRcbiIsCisJCQkgUklOR0JVRl9UWVBFX0RBVEFfVFlQRV9MRU5fTUFYKTsKIAotCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICIjIGNvbXByZXNzZWQgZW50cnkgaGVhZGVyXG4iKTsKLQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiXHR0eXBlX2xlbiAgICA6ICAgIDUgYml0c1xuIik7Ci0JcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIlx0dGltZV9kZWx0YSAgOiAgIDI3IGJpdHNcbiIpOwotCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICJcdGFycmF5ICAgICAgIDogICAzMiBiaXRzXG4iKTsKLQlyZXQgPSB0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdHBhZGRpbmcgICAgIDogdHlwZSA9PSAlZFxuIiwKLQkJCSAgICAgICBSSU5HQlVGX1RZUEVfUEFERElORyk7Ci0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHR0aW1lX2V4dGVuZCA6IHR5cGUgPT0gJWRcbiIsCi0JCQkgICAgICAgUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EKTsKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGRhdGEgbWF4IHR5cGVfbGVuICA9PSAlZFxuIiwKLQkJCSAgICAgICBSSU5HQlVGX1RZUEVfREFUQV9UWVBFX0xFTl9NQVgpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gIXRyYWNlX3NlcV9oYXNfb3ZlcmZsb3dlZChzKTsKIH0KIAogLyoKQEAgLTQxOSwzMiArNDE3LDMxIEBACiBpbnQgcmluZ19idWZmZXJfcHJpbnRfcGFnZV9oZWFkZXIoc3RydWN0IHRyYWNlX3NlcSAqcykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSBmaWVsZDsKLQlpbnQgcmV0OwogCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDogdTY0IHRpbWVzdGFtcDtcdCIKLQkJCSAgICAgICAib2Zmc2V0OjA7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC50aW1lX3N0YW1wKSwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KWlzX3NpZ25lZF90eXBlKHU2NCkpOworCXRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IHU2NCB0aW1lc3RhbXA7XHQiCisJCQkgIm9mZnNldDowO1x0c2l6ZToldTtcdHNpZ25lZDoldTtcbiIsCisJCQkgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQudGltZV9zdGFtcCksCisJCQkgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh1NjQpKTsKIAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IGxvY2FsX3QgY29tbWl0O1x0IgotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGNvbW1pdCksCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuY29tbWl0KSwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KWlzX3NpZ25lZF90eXBlKGxvbmcpKTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiBsb2NhbF90IGNvbW1pdDtcdCIKKwkJCSAib2Zmc2V0OiV1O1x0c2l6ZToldTtcdHNpZ25lZDoldTtcbiIsCisJCQkgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBjb21taXQpLAorCQkJICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLmNvbW1pdCksCisJCQkgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZShsb25nKSk7CiAKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiBpbnQgb3ZlcndyaXRlO1x0IgotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGNvbW1pdCksCi0JCQkgICAgICAgMSwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KWlzX3NpZ25lZF90eXBlKGxvbmcpKTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiBpbnQgb3ZlcndyaXRlO1x0IgorCQkJICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwKKwkJCSAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGNvbW1pdCksCisJCQkgMSwKKwkJCSAodW5zaWduZWQgaW50KWlzX3NpZ25lZF90eXBlKGxvbmcpKTsKIAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IGNoYXIgZGF0YTtcdCIKLQkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcdHNpZ25lZDoldTtcbiIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBkYXRhKSwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KUJVRl9QQUdFX1NJWkUsCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZShjaGFyKSk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDogY2hhciBkYXRhO1x0IgorCQkJICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwKKwkJCSAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGRhdGEpLAorCQkJICh1bnNpZ25lZCBpbnQpQlVGX1BBR0VfU0laRSwKKwkJCSAodW5zaWduZWQgaW50KWlzX3NpZ25lZF90eXBlKGNoYXIpKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuICF0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQocyk7CiB9CiAKIHN0cnVjdCByYl9pcnFfd29yayB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IDkyZjRhNmMuLjFhZjRmOGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC0xNTUsMTAgKzE1NSwxMSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzdG9wX3RyYWNlX29uX3dhcm5pbmcoY2hhciAqc3RyKQogewotCV9fZGlzYWJsZV90cmFjZV9vbl93YXJuaW5nID0gMTsKKwlpZiAoKHN0cmNtcChzdHIsICI9MCIpICE9IDAgJiYgc3RyY21wKHN0ciwgIj1vZmYiKSAhPSAwKSkKKwkJX19kaXNhYmxlX3RyYWNlX29uX3dhcm5pbmcgPSAxOwogCXJldHVybiAxOwogfQotX19zZXR1cCgidHJhY2VvZmZfb25fd2FybmluZz0iLCBzdG9wX3RyYWNlX29uX3dhcm5pbmcpOworX19zZXR1cCgidHJhY2VvZmZfb25fd2FybmluZyIsIHN0b3BfdHJhY2Vfb25fd2FybmluZyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IGJvb3RfYWxsb2Nfc25hcHNob3QoY2hhciAqc3RyKQogewpAQCAtOTM4LDE5ICs5MzksMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBUT0RPIGFkZCBhIHNlcV9idWZfdG9fYnVmZmVyKCkgKi8KIHN0YXRpYyBzc2l6ZV90IHRyYWNlX3NlcV90b19idWZmZXIoc3RydWN0IHRyYWNlX3NlcSAqcywgdm9pZCAqYnVmLCBzaXplX3QgY250KQogewogCWludCBsZW47CiAKLQlpZiAocy0+bGVuIDw9IHMtPnJlYWRwb3MpCisJaWYgKHRyYWNlX3NlcV91c2VkKHMpIDw9IHMtPnNlcS5yZWFkcG9zKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JbGVuID0gcy0+bGVuIC0gcy0+cmVhZHBvczsKKwlsZW4gPSB0cmFjZV9zZXFfdXNlZChzKSAtIHMtPnNlcS5yZWFkcG9zOwogCWlmIChjbnQgPiBsZW4pCiAJCWNudCA9IGxlbjsKLQltZW1jcHkoYnVmLCBzLT5idWZmZXIgKyBzLT5yZWFkcG9zLCBjbnQpOworCW1lbWNweShidWYsIHMtPmJ1ZmZlciArIHMtPnNlcS5yZWFkcG9zLCBjbnQpOwogCi0Jcy0+cmVhZHBvcyArPSBjbnQ7CisJcy0+c2VxLnJlYWRwb3MgKz0gY250OwogCXJldHVybiBjbnQ7CiB9CiAKQEAgLTIxNTgsOSArMjE2MCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWxlbiA9IHZzbnByaW50Zih0YnVmZmVyLCBUUkFDRV9CVUZfU0laRSwgZm10LCBhcmdzKTsKLQlpZiAobGVuID4gVFJBQ0VfQlVGX1NJWkUpCi0JCWdvdG8gb3V0OworCWxlbiA9IHZzY25wcmludGYodGJ1ZmZlciwgVFJBQ0VfQlVGX1NJWkUsIGZtdCwgYXJncyk7CiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAlzaXplID0gc2l6ZW9mKCplbnRyeSkgKyBsZW4gKyAxOwpAQCAtMjE3MSw4ICsyMTcxLDcgQEAKIAllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCWVudHJ5LT5pcCA9IGlwOwogCi0JbWVtY3B5KCZlbnRyeS0+YnVmLCB0YnVmZmVyLCBsZW4pOwotCWVudHJ5LT5idWZbbGVuXSA9ICdcMCc7CisJbWVtY3B5KCZlbnRyeS0+YnVmLCB0YnVmZmVyLCBsZW4gKyAxKTsKIAlpZiAoIWNhbGxfZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKSB7CiAJCV9fYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CiAJCWZ0cmFjZV90cmFjZV9zdGFjayhidWZmZXIsIGZsYWdzLCA2LCBwYyk7CkBAIC0yNTA5LDE0ICsyNTA4LDE0IEBACiAKIHN0YXRpYyB2b2lkIHByaW50X2xhdF9oZWxwX2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAgICBfLS0tLS0tPT4gQ1BVIyAgICAgICAgICAgIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAgIC8gXy0tLS0tPT4gaXJxcy1vZmYgICAgICAgIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAgfCAvIF8tLS0tPT4gbmVlZC1yZXNjaGVkICAgIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAgfHwgLyBfLS0tPT4gaGFyZGlycS9zb2Z0aXJxIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAgfHx8IC8gXy0tPT4gcHJlZW1wdC1kZXB0aCAgIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAgfHx8fCAvICAgICBkZWxheSAgICAgICAgICAgICBcbiIpOwotCXNlcV9wdXRzKG0sICIjICBjbWQgICAgIHBpZCAgIHx8fHx8IHRpbWUgIHwgICBjYWxsZXIgICAgICBcbiIpOwotCXNlcV9wdXRzKG0sICIjICAgICBcXCAgIC8gICAgICB8fHx8fCAgXFwgICAgfCAgIC8gICAgICAgICAgIFxuIik7CisJc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAgICBfLS0tLS0tPT4gQ1BVIyAgICAgICAgICAgIFxuIgorCQkgICAgIiMgICAgICAgICAgICAgICAgIC8gXy0tLS0tPT4gaXJxcy1vZmYgICAgICAgIFxuIgorCQkgICAgIiMgICAgICAgICAgICAgICAgfCAvIF8tLS0tPT4gbmVlZC1yZXNjaGVkICAgIFxuIgorCQkgICAgIiMgICAgICAgICAgICAgICAgfHwgLyBfLS0tPT4gaGFyZGlycS9zb2Z0aXJxIFxuIgorCQkgICAgIiMgICAgICAgICAgICAgICAgfHx8IC8gXy0tPT4gcHJlZW1wdC1kZXB0aCAgIFxuIgorCQkgICAgIiMgICAgICAgICAgICAgICAgfHx8fCAvICAgICBkZWxheSAgICAgICAgICAgIFxuIgorCQkgICAgIiMgIGNtZCAgICAgcGlkICAgfHx8fHwgdGltZSAgfCAgIGNhbGxlciAgICAgIFxuIgorCQkgICAgIiMgICAgIFxcICAgLyAgICAgIHx8fHx8ICBcXCAgICB8ICAgLyAgICAgICAgIFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2V2ZW50X2luZm8oc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCkBAIC0yNTMzLDIwICsyNTMyLDIwIEBACiBzdGF0aWMgdm9pZCBwcmludF9mdW5jX2hlbHBfaGVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1Ziwgc3RydWN0IHNlcV9maWxlICptKQogewogCXByaW50X2V2ZW50X2luZm8oYnVmLCBtKTsKLQlzZXFfcHV0cyhtLCAiIyAgICAgICAgICAgVEFTSy1QSUQgICBDUFUjICAgICAgVElNRVNUQU1QICBGVU5DVElPTlxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgIHwgfCAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8XG4iKTsKKwlzZXFfcHV0cyhtLCAiIyAgICAgICAgICAgVEFTSy1QSUQgICBDUFUjICAgICAgVElNRVNUQU1QICBGVU5DVElPTlxuIgorCQkgICAgIiMgICAgICAgICAgICAgIHwgfCAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8XG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfZnVuY19oZWxwX2hlYWRlcl9pcnEoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJcHJpbnRfZXZlbnRfaW5mbyhidWYsIG0pOwotCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy0tLS0tPT4gaXJxcy1vZmZcbiIpOwotCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF8tLS0tPT4gbmVlZC1yZXNjaGVkXG4iKTsKLQlzZXFfcHV0cyhtLCAiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8gXy0tLT0+IGhhcmRpcnEvc29mdGlycVxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgLyBfLS09PiBwcmVlbXB0LWRlcHRoXG4iKTsKLQlzZXFfcHV0cyhtLCAiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fHwgLyAgICAgZGVsYXlcbiIpOwotCXNlcV9wdXRzKG0sICIjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgIHx8fHwgICAgVElNRVNUQU1QICBGVU5DVElPTlxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgIHwgfCAgICAgICB8ICAgfHx8fCAgICAgICB8ICAgICAgICAgfFxuIik7CisJc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLS0tLS09PiBpcnFzLW9mZlxuIgorCQkgICAgIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09PiBuZWVkLXJlc2NoZWRcbiIKKwkJICAgICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLyBfLS0tPT4gaGFyZGlycS9zb2Z0aXJxXG4iCisJCSAgICAiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAvIF8tLT0+IHByZWVtcHQtZGVwdGhcbiIKKwkJICAgICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheVxuIgorCQkgICAgIiMgICAgICAgICAgIFRBU0stUElEICAgQ1BVIyAgfHx8fCAgICBUSU1FU1RBTVAgIEZVTkNUSU9OXG4iCisJCSAgICAiIyAgICAgICAgICAgICAgfCB8ICAgICAgIHwgICB8fHx8ICAgICAgIHwgICAgICAgICB8XG4iKTsKIH0KIAogdm9pZApAQCAtMjY0OSwyNCArMjY0OCwyMSBAQAogCWV2ZW50ID0gZnRyYWNlX2ZpbmRfZXZlbnQoZW50cnktPnR5cGUpOwogCiAJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8pIHsKLQkJaWYgKGl0ZXItPml0ZXJfZmxhZ3MgJiBUUkFDRV9GSUxFX0xBVF9GTVQpIHsKLQkJCWlmICghdHJhY2VfcHJpbnRfbGF0X2NvbnRleHQoaXRlcikpCi0JCQkJZ290byBwYXJ0aWFsOwotCQl9IGVsc2UgewotCQkJaWYgKCF0cmFjZV9wcmludF9jb250ZXh0KGl0ZXIpKQotCQkJCWdvdG8gcGFydGlhbDsKLQkJfQorCQlpZiAoaXRlci0+aXRlcl9mbGFncyAmIFRSQUNFX0ZJTEVfTEFUX0ZNVCkKKwkJCXRyYWNlX3ByaW50X2xhdF9jb250ZXh0KGl0ZXIpOworCQllbHNlCisJCQl0cmFjZV9wcmludF9jb250ZXh0KGl0ZXIpOwogCX0KIAorCWlmICh0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQocykpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwogCWlmIChldmVudCkKIAkJcmV0dXJuIGV2ZW50LT5mdW5jcy0+dHJhY2UoaXRlciwgc3ltX2ZsYWdzLCBldmVudCk7CiAKLQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlVua25vd24gdHlwZSAlZFxuIiwgZW50cnktPnR5cGUpKQotCQlnb3RvIHBhcnRpYWw7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiVW5rbm93biB0eXBlICVkXG4iLCBlbnRyeS0+dHlwZSk7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotcGFydGlhbDoKLQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9yYXdfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKQEAgLTI2NzcsMjIgKzI2NzMsMjAgQEAKIAogCWVudHJ5ID0gaXRlci0+ZW50OwogCi0JaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8pIHsKLQkJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCAlZCAlbGx1ICIsCi0JCQkJICAgICAgZW50cnktPnBpZCwgaXRlci0+Y3B1LCBpdGVyLT50cykpCi0JCQlnb3RvIHBhcnRpYWw7Ci0JfQorCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQ09OVEVYVF9JTkZPKQorCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCAlZCAlbGx1ICIsCisJCQkJIGVudHJ5LT5waWQsIGl0ZXItPmNwdSwgaXRlci0+dHMpOworCisJaWYgKHRyYWNlX3NlcV9oYXNfb3ZlcmZsb3dlZChzKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCiAJZXZlbnQgPSBmdHJhY2VfZmluZF9ldmVudChlbnRyeS0+dHlwZSk7CiAJaWYgKGV2ZW50KQogCQlyZXR1cm4gZXZlbnQtPmZ1bmNzLT5yYXcoaXRlciwgMCwgZXZlbnQpOwogCi0JaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCA/XG4iLCBlbnRyeS0+dHlwZSkpCi0JCWdvdG8gcGFydGlhbDsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCA/XG4iLCBlbnRyeS0+dHlwZSk7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotcGFydGlhbDoKLQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9oZXhfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKQEAgLTI3MDUsOSArMjY5OSwxMSBAQAogCWVudHJ5ID0gaXRlci0+ZW50OwogCiAJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8pIHsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5waWQpOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgaXRlci0+Y3B1KTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGl0ZXItPnRzKTsKKwkJU0VRX1BVVF9IRVhfRklFTEQocywgZW50cnktPnBpZCk7CisJCVNFUV9QVVRfSEVYX0ZJRUxEKHMsIGl0ZXItPmNwdSk7CisJCVNFUV9QVVRfSEVYX0ZJRUxEKHMsIGl0ZXItPnRzKTsKKwkJaWYgKHRyYWNlX3NlcV9oYXNfb3ZlcmZsb3dlZChzKSkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAl9CiAKIAlldmVudCA9IGZ0cmFjZV9maW5kX2V2ZW50KGVudHJ5LT50eXBlKTsKQEAgLTI3MTcsOSArMjcxMyw5IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCVNFUV9QVVRfRklFTERfUkVUKHMsIG5ld2xpbmUpOworCVNFUV9QVVRfRklFTEQocywgbmV3bGluZSk7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKHMpOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfYmluX2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCkBAIC0yNzMxLDkgKzI3MjcsMTEgQEAKIAllbnRyeSA9IGl0ZXItPmVudDsKIAogCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQ09OVEVYVF9JTkZPKSB7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGVudHJ5LT5waWQpOwotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBpdGVyLT5jcHUpOwotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBpdGVyLT50cyk7CisJCVNFUV9QVVRfRklFTEQocywgZW50cnktPnBpZCk7CisJCVNFUV9QVVRfRklFTEQocywgaXRlci0+Y3B1KTsKKwkJU0VRX1BVVF9GSUVMRChzLCBpdGVyLT50cyk7CisJCWlmICh0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQocykpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJfQogCiAJZXZlbnQgPSBmdHJhY2VfZmluZF9ldmVudChlbnRyeS0+dHlwZSk7CkBAIC0yNzc5LDEwICsyNzc3LDEyIEBACiB7CiAJZW51bSBwcmludF9saW5lX3QgcmV0OwogCi0JaWYgKGl0ZXItPmxvc3RfZXZlbnRzICYmCi0JICAgICF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICJDUFU6JWQgW0xPU1QgJWx1IEVWRU5UU11cbiIsCi0JCQkJIGl0ZXItPmNwdSwgaXRlci0+bG9zdF9ldmVudHMpKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJaWYgKGl0ZXItPmxvc3RfZXZlbnRzKSB7CisJCXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIkNQVTolZCBbTE9TVCAlbHUgRVZFTlRTXVxuIiwKKwkJCQkgaXRlci0+Y3B1LCBpdGVyLT5sb3N0X2V2ZW50cyk7CisJCWlmICh0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQoJml0ZXItPnNlcSkpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfQogCiAJaWYgKGl0ZXItPnRyYWNlICYmIGl0ZXItPnRyYWNlLT5wcmludF9saW5lKSB7CiAJCXJldCA9IGl0ZXItPnRyYWNlLT5wcmludF9saW5lKGl0ZXIpOwpAQCAtMjg2MCw0NCArMjg2MCw0NCBAQAogewogCWlmICghZnRyYWNlX2lzX2RlYWQoKSkKIAkJcmV0dXJuOwotCXNlcV9wcmludGYobSwgIiMgV0FSTklORzogRlVOQ1RJT04gVFJBQ0lORyBJUyBDT1JSVVBURURcbiIpOwotCXNlcV9wcmludGYobSwgIiMgICAgICAgICAgTUFZIEJFIE1JU1NJTkcgRlVOQ1RJT04gRVZFTlRTXG4iKTsKKwlzZXFfcHV0cyhtLCAiIyBXQVJOSU5HOiBGVU5DVElPTiBUUkFDSU5HIElTIENPUlJVUFRFRFxuIgorCQkgICAgIiMgICAgICAgICAgTUFZIEJFIE1JU1NJTkcgRlVOQ1RJT04gRVZFTlRTXG4iKTsKIH0KIAogI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCiBzdGF0aWMgdm9pZCBzaG93X3NuYXBzaG90X21haW5faGVscChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc2VxX3ByaW50ZihtLCAiIyBlY2hvIDAgPiBzbmFwc2hvdCA6IENsZWFycyBhbmQgZnJlZXMgc25hcHNob3QgYnVmZmVyXG4iKTsKLQlzZXFfcHJpbnRmKG0sICIjIGVjaG8gMSA+IHNuYXBzaG90IDogQWxsb2NhdGVzIHNuYXBzaG90IGJ1ZmZlciwgaWYgbm90IGFscmVhZHkgYWxsb2NhdGVkLlxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiIyAgICAgICAgICAgICAgICAgICAgICBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSBtYWluIGJ1ZmZlci5cbiIpOwotCXNlcV9wcmludGYobSwgIiMgZWNobyAyID4gc25hcHNob3QgOiBDbGVhcnMgc25hcHNob3QgYnVmZmVyIChidXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgZnJlZSlcbiIpOwotCXNlcV9wcmludGYobSwgIiMgICAgICAgICAgICAgICAgICAgICAgKERvZXNuJ3QgaGF2ZSB0byBiZSAnMicgd29ya3Mgd2l0aCBhbnkgbnVtYmVyIHRoYXRcbiIpOwotCXNlcV9wcmludGYobSwgIiMgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhICcwJyBvciAnMScpXG4iKTsKKwlzZXFfcHV0cyhtLCAiIyBlY2hvIDAgPiBzbmFwc2hvdCA6IENsZWFycyBhbmQgZnJlZXMgc25hcHNob3QgYnVmZmVyXG4iCisJCSAgICAiIyBlY2hvIDEgPiBzbmFwc2hvdCA6IEFsbG9jYXRlcyBzbmFwc2hvdCBidWZmZXIsIGlmIG5vdCBhbHJlYWR5IGFsbG9jYXRlZC5cbiIKKwkJICAgICIjICAgICAgICAgICAgICAgICAgICAgIFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIG1haW4gYnVmZmVyLlxuIgorCQkgICAgIiMgZWNobyAyID4gc25hcHNob3QgOiBDbGVhcnMgc25hcHNob3QgYnVmZmVyIChidXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgZnJlZSlcbiIKKwkJICAgICIjICAgICAgICAgICAgICAgICAgICAgIChEb2Vzbid0IGhhdmUgdG8gYmUgJzInIHdvcmtzIHdpdGggYW55IG51bWJlciB0aGF0XG4iCisJCSAgICAiIyAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGEgJzAnIG9yICcxJylcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X3NuYXBzaG90X3BlcmNwdV9oZWxwKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlzZXFfcHJpbnRmKG0sICIjIGVjaG8gMCA+IHNuYXBzaG90IDogSW52YWxpZCBmb3IgcGVyX2NwdSBzbmFwc2hvdCBmaWxlLlxuIik7CisJc2VxX3B1dHMobSwgIiMgZWNobyAwID4gc25hcHNob3QgOiBJbnZhbGlkIGZvciBwZXJfY3B1IHNuYXBzaG90IGZpbGUuXG4iKTsKICNpZmRlZiBDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUAotCXNlcV9wcmludGYobSwgIiMgZWNobyAxID4gc25hcHNob3QgOiBBbGxvY2F0ZXMgc25hcHNob3QgYnVmZmVyLCBpZiBub3QgYWxyZWFkeSBhbGxvY2F0ZWQuXG4iKTsKLQlzZXFfcHJpbnRmKG0sICIjICAgICAgICAgICAgICAgICAgICAgIFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIG1haW4gYnVmZmVyIGZvciB0aGlzIGNwdS5cbiIpOworCXNlcV9wdXRzKG0sICIjIGVjaG8gMSA+IHNuYXBzaG90IDogQWxsb2NhdGVzIHNuYXBzaG90IGJ1ZmZlciwgaWYgbm90IGFscmVhZHkgYWxsb2NhdGVkLlxuIgorCQkgICAgIiMgICAgICAgICAgICAgICAgICAgICAgVGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUgbWFpbiBidWZmZXIgZm9yIHRoaXMgY3B1LlxuIik7CiAjZWxzZQotCXNlcV9wcmludGYobSwgIiMgZWNobyAxID4gc25hcHNob3QgOiBOb3Qgc3VwcG9ydGVkIHdpdGggdGhpcyBrZXJuZWwuXG4iKTsKLQlzZXFfcHJpbnRmKG0sICIjICAgICAgICAgICAgICAgICAgICAgTXVzdCB1c2UgbWFpbiBzbmFwc2hvdCBmaWxlIHRvIGFsbG9jYXRlLlxuIik7CisJc2VxX3B1dHMobSwgIiMgZWNobyAxID4gc25hcHNob3QgOiBOb3Qgc3VwcG9ydGVkIHdpdGggdGhpcyBrZXJuZWwuXG4iCisJCSAgICAiIyAgICAgICAgICAgICAgICAgICAgIE11c3QgdXNlIG1haW4gc25hcHNob3QgZmlsZSB0byBhbGxvY2F0ZS5cbiIpOwogI2VuZGlmCi0Jc2VxX3ByaW50ZihtLCAiIyBlY2hvIDIgPiBzbmFwc2hvdCA6IENsZWFycyB0aGlzIGNwdSdzIHNuYXBzaG90IGJ1ZmZlciAoYnV0IGRvZXMgbm90IGFsbG9jYXRlKVxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiIyAgICAgICAgICAgICAgICAgICAgICAoRG9lc24ndCBoYXZlIHRvIGJlICcyJyB3b3JrcyB3aXRoIGFueSBudW1iZXIgdGhhdFxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiIyAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGEgJzAnIG9yICcxJylcbiIpOworCXNlcV9wdXRzKG0sICIjIGVjaG8gMiA+IHNuYXBzaG90IDogQ2xlYXJzIHRoaXMgY3B1J3Mgc25hcHNob3QgYnVmZmVyIChidXQgZG9lcyBub3QgYWxsb2NhdGUpXG4iCisJCSAgICAiIyAgICAgICAgICAgICAgICAgICAgICAoRG9lc24ndCBoYXZlIHRvIGJlICcyJyB3b3JrcyB3aXRoIGFueSBudW1iZXIgdGhhdFxuIgorCQkgICAgIiMgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhICcwJyBvciAnMScpXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfc25hcHNob3RfaGVscChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAlpZiAoaXRlci0+dHItPmFsbG9jYXRlZF9zbmFwc2hvdCkKLQkJc2VxX3ByaW50ZihtLCAiI1xuIyAqIFNuYXBzaG90IGlzIGFsbG9jYXRlZCAqXG4jXG4iKTsKKwkJc2VxX3B1dHMobSwgIiNcbiMgKiBTbmFwc2hvdCBpcyBhbGxvY2F0ZWQgKlxuI1xuIik7CiAJZWxzZQotCQlzZXFfcHJpbnRmKG0sICIjXG4jICogU25hcHNob3QgaXMgZnJlZWQgKlxuI1xuIik7CisJCXNlcV9wdXRzKG0sICIjXG4jICogU25hcHNob3QgaXMgZnJlZWQgKlxuI1xuIik7CiAKLQlzZXFfcHJpbnRmKG0sICIjIFNuYXBzaG90IGNvbW1hbmRzOlxuIik7CisJc2VxX3B1dHMobSwgIiMgU25hcHNob3QgY29tbWFuZHM6XG4iKTsKIAlpZiAoaXRlci0+Y3B1X2ZpbGUgPT0gUklOR19CVUZGRVJfQUxMX0NQVVMpCiAJCXNob3dfc25hcHNob3RfbWFpbl9oZWxwKG0pOwogCWVsc2UKQEAgLTMyNTEsNyArMzI1MSw3IEBACiAJaWYgKCF0KQogCQlyZXR1cm4gMDsKIAotCXNlcV9wcmludGYobSwgIiVzIiwgdC0+bmFtZSk7CisJc2VxX3B1dHMobSwgdC0+bmFtZSk7CiAJaWYgKHQtPm5leHQpCiAJCXNlcV9wdXRjKG0sICcgJyk7CiAJZWxzZQpAQCAtNDMxNCw2ICs0MzE0LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCisJdHJhY2Vfc2VxX2luaXQoJml0ZXItPnNlcSk7CisKIAkvKgogCSAqIFdlIG1ha2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHRyYWNlciB0byBhdm9pZCBjb25jdXJyZW50CiAJICogY2hhbmdlcyBvbiBpdCB3aGlsZSB3ZSBhcmUgcmVhZGluZy4KQEAgLTQ1MDcsMTggKzQ1MDksMTggQEAKIAl0cmFjZV9hY2Nlc3NfbG9jayhpdGVyLT5jcHVfZmlsZSk7CiAJd2hpbGUgKHRyYWNlX2ZpbmRfbmV4dF9lbnRyeV9pbmMoaXRlcikgIT0gTlVMTCkgewogCQllbnVtIHByaW50X2xpbmVfdCByZXQ7Ci0JCWludCBsZW4gPSBpdGVyLT5zZXEubGVuOworCQlpbnQgc2F2ZV9sZW4gPSBpdGVyLT5zZXEuc2VxLmxlbjsKIAogCQlyZXQgPSBwcmludF90cmFjZV9saW5lKGl0ZXIpOwogCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKSB7CiAJCQkvKiBkb24ndCBwcmludCBwYXJ0aWFsIGxpbmVzICovCi0JCQlpdGVyLT5zZXEubGVuID0gbGVuOworCQkJaXRlci0+c2VxLnNlcS5sZW4gPSBzYXZlX2xlbjsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChyZXQgIT0gVFJBQ0VfVFlQRV9OT19DT05TVU1FKQogCQkJdHJhY2VfY29uc3VtZShpdGVyKTsKIAotCQlpZiAoaXRlci0+c2VxLmxlbiA+PSBjbnQpCisJCWlmICh0cmFjZV9zZXFfdXNlZCgmaXRlci0+c2VxKSA+PSBjbnQpCiAJCQlicmVhazsKIAogCQkvKgpAQCAtNDUzNCw3ICs0NTM2LDcgQEAKIAogCS8qIE5vdyBjb3B5IHdoYXQgd2UgaGF2ZSB0byB0aGUgdXNlciAqLwogCXNyZXQgPSB0cmFjZV9zZXFfdG9fdXNlcigmaXRlci0+c2VxLCB1YnVmLCBjbnQpOwotCWlmIChpdGVyLT5zZXEucmVhZHBvcyA+PSBpdGVyLT5zZXEubGVuKQorCWlmIChpdGVyLT5zZXEuc2VxLnJlYWRwb3MgPj0gdHJhY2Vfc2VxX3VzZWQoJml0ZXItPnNlcSkpCiAJCXRyYWNlX3NlcV9pbml0KCZpdGVyLT5zZXEpOwogCiAJLyoKQEAgLTQ1NjgsMjAgKzQ1NzAsMzMgQEAKIHRyYWNpbmdfZmlsbF9waXBlX3BhZ2Uoc2l6ZV90IHJlbSwgc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXNpemVfdCBjb3VudDsKKwlpbnQgc2F2ZV9sZW47CiAJaW50IHJldDsKIAogCS8qIFNlcSBidWZmZXIgaXMgcGFnZS1zaXplZCwgZXhhY3RseSB3aGF0IHdlIG5lZWQuICovCiAJZm9yICg7OykgewotCQljb3VudCA9IGl0ZXItPnNlcS5sZW47CisJCXNhdmVfbGVuID0gaXRlci0+c2VxLnNlcS5sZW47CiAJCXJldCA9IHByaW50X3RyYWNlX2xpbmUoaXRlcik7Ci0JCWNvdW50ID0gaXRlci0+c2VxLmxlbiAtIGNvdW50OwotCQlpZiAocmVtIDwgY291bnQpIHsKLQkJCXJlbSA9IDA7Ci0JCQlpdGVyLT5zZXEubGVuIC09IGNvdW50OworCisJCWlmICh0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQoJml0ZXItPnNlcSkpIHsKKwkJCWl0ZXItPnNlcS5zZXEubGVuID0gc2F2ZV9sZW47CiAJCQlicmVhazsKIAkJfQorCisJCS8qCisJCSAqIFRoaXMgc2hvdWxkIG5vdCBiZSBoaXQsIGJlY2F1c2UgaXQgc2hvdWxkIG9ubHkKKwkJICogYmUgc2V0IGlmIHRoZSBpdGVyLT5zZXEgb3ZlcmZsb3dlZC4gQnV0IGNoZWNrIGl0CisJCSAqIGFueXdheSB0byBiZSBzYWZlLgorCQkgKi8KIAkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkgewotCQkJaXRlci0+c2VxLmxlbiAtPSBjb3VudDsKKwkJCWl0ZXItPnNlcS5zZXEubGVuID0gc2F2ZV9sZW47CisJCQlicmVhazsKKwkJfQorCisJCWNvdW50ID0gdHJhY2Vfc2VxX3VzZWQoJml0ZXItPnNlcSkgLSBzYXZlX2xlbjsKKwkJaWYgKHJlbSA8IGNvdW50KSB7CisJCQlyZW0gPSAwOworCQkJaXRlci0+c2VxLnNlcS5sZW4gPSBzYXZlX2xlbjsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTQ2NjIsMTMgKzQ2NzcsMTMgQEAKIAkJLyogQ29weSB0aGUgZGF0YSBpbnRvIHRoZSBwYWdlLCBzbyB3ZSBjYW4gc3RhcnQgb3Zlci4gKi8KIAkJcmV0ID0gdHJhY2Vfc2VxX3RvX2J1ZmZlcigmaXRlci0+c2VxLAogCQkJCQkgIHBhZ2VfYWRkcmVzcyhzcGQucGFnZXNbaV0pLAotCQkJCQkgIGl0ZXItPnNlcS5sZW4pOworCQkJCQkgIHRyYWNlX3NlcV91c2VkKCZpdGVyLT5zZXEpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCV9fZnJlZV9wYWdlKHNwZC5wYWdlc1tpXSk7CiAJCQlicmVhazsKIAkJfQogCQlzcGQucGFydGlhbFtpXS5vZmZzZXQgPSAwOwotCQlzcGQucGFydGlhbFtpXS5sZW4gPSBpdGVyLT5zZXEubGVuOworCQlzcGQucGFydGlhbFtpXS5sZW4gPSB0cmFjZV9zZXFfdXNlZCgmaXRlci0+c2VxKTsKIAogCQl0cmFjZV9zZXFfaW5pdCgmaXRlci0+c2VxKTsKIAl9CkBAIC01NjY4LDcgKzU2ODMsOCBAQAogCWNudCA9IHJpbmdfYnVmZmVyX3JlYWRfZXZlbnRzX2NwdSh0cmFjZV9idWYtPmJ1ZmZlciwgY3B1KTsKIAl0cmFjZV9zZXFfcHJpbnRmKHMsICJyZWFkIGV2ZW50czogJWxkXG4iLCBjbnQpOwogCi0JY291bnQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgcHBvcywgcy0+YnVmZmVyLCBzLT5sZW4pOworCWNvdW50ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsCisJCQkJCXMtPmJ1ZmZlciwgdHJhY2Vfc2VxX3VzZWQocykpOwogCiAJa2ZyZWUocyk7CiAKQEAgLTU3NDksMTAgKzU3NjUsMTAgQEAKIAogCXNlcV9wcmludGYobSwgIiVwczoiLCAodm9pZCAqKWlwKTsKIAotCXNlcV9wcmludGYobSwgInNuYXBzaG90Iik7CisJc2VxX3B1dHMobSwgInNuYXBzaG90Iik7CiAKIAlpZiAoY291bnQgPT0gLTEpCi0JCXNlcV9wcmludGYobSwgIjp1bmxpbWl0ZWRcbiIpOworCQlzZXFfcHV0cyhtLCAiOnVubGltaXRlZFxuIik7CiAJZWxzZQogCQlzZXFfcHJpbnRmKG0sICI6Y291bnQ9JWxkXG4iLCBjb3VudCk7CiAKQEAgLTY0MTcsNyArNjQzMyw3IEBACiAJaW50IHJldDsKIAogCS8qIFBhcmFub2lkOiBNYWtlIHN1cmUgdGhlIHBhcmVudCBpcyB0aGUgImluc3RhbmNlcyIgZGlyZWN0b3J5ICovCi0JcGFyZW50ID0gaGxpc3RfZW50cnkoaW5vZGUtPmlfZGVudHJ5LmZpcnN0LCBzdHJ1Y3QgZGVudHJ5LCBkX2FsaWFzKTsKKwlwYXJlbnQgPSBobGlzdF9lbnRyeShpbm9kZS0+aV9kZW50cnkuZmlyc3QsIHN0cnVjdCBkZW50cnksIGRfdS5kX2FsaWFzKTsKIAlpZiAoV0FSTl9PTl9PTkNFKHBhcmVudCAhPSB0cmFjZV9pbnN0YW5jZV9kaXIpKQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtNjQ0NCw3ICs2NDYwLDcgQEAKIAlpbnQgcmV0OwogCiAJLyogUGFyYW5vaWQ6IE1ha2Ugc3VyZSB0aGUgcGFyZW50IGlzIHRoZSAiaW5zdGFuY2VzIiBkaXJlY3RvcnkgKi8KLQlwYXJlbnQgPSBobGlzdF9lbnRyeShpbm9kZS0+aV9kZW50cnkuZmlyc3QsIHN0cnVjdCBkZW50cnksIGRfYWxpYXMpOworCXBhcmVudCA9IGhsaXN0X2VudHJ5KGlub2RlLT5pX2RlbnRyeS5maXJzdCwgc3RydWN0IGRlbnRyeSwgZF91LmRfYWxpYXMpOwogCWlmIChXQVJOX09OX09OQ0UocGFyZW50ICE9IHRyYWNlX2luc3RhbmNlX2RpcikpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC02NjMxLDExICs2NjQ3LDE5IEBACiB0cmFjZV9wcmludGtfc2VxKHN0cnVjdCB0cmFjZV9zZXEgKnMpCiB7CiAJLyogUHJvYmFibHkgc2hvdWxkIHByaW50IGEgd2FybmluZyBoZXJlLiAqLwotCWlmIChzLT5sZW4gPj0gVFJBQ0VfTUFYX1BSSU5UKQotCQlzLT5sZW4gPSBUUkFDRV9NQVhfUFJJTlQ7CisJaWYgKHMtPnNlcS5sZW4gPj0gVFJBQ0VfTUFYX1BSSU5UKQorCQlzLT5zZXEubGVuID0gVFJBQ0VfTUFYX1BSSU5UOworCisJLyoKKwkgKiBNb3JlIHBhcmFub2lkIGNvZGUuIEFsdGhvdWdoIHRoZSBidWZmZXIgc2l6ZSBpcyBzZXQgdG8KKwkgKiBQQUdFX1NJWkUsIGFuZCBUUkFDRV9NQVhfUFJJTlQgaXMgMTAwMCwgdGhpcyBpcyBqdXN0CisJICogYW4gZXh0cmEgbGF5ZXIgb2YgcHJvdGVjdGlvbi4KKwkgKi8KKwlpZiAoV0FSTl9PTl9PTkNFKHMtPnNlcS5sZW4gPj0gcy0+c2VxLnNpemUpKQorCQlzLT5zZXEubGVuID0gcy0+c2VxLnNpemUgLSAxOwogCiAJLyogc2hvdWxkIGJlIHplcm8gZW5kZWQsIGJ1dCB3ZSBhcmUgcGFyYW5vaWQuICovCi0Jcy0+YnVmZmVyW3MtPmxlbl0gPSAwOworCXMtPmJ1ZmZlcltzLT5zZXEubGVuXSA9IDA7CiAKIAlwcmludGsoS0VSTl9UUkFDRSAiJXMiLCBzLT5idWZmZXIpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IDM4NTM5MWYuLjMyNTVkZmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vfc2VxLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZV9zZXEuaD4KIAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CQkvKiBGb3IgTlJfU1lTQ0FMTFMJICAgICAqLwpAQCAtNTY5LDE1ICs1NzAsNiBAQAogCiB2b2lkIHRyYWNpbmdfaXRlcl9yZXNldChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBjcHUpOwogCi12b2lkIHRyYWNpbmdfc2NoZWRfc3dpdGNoX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAotCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwKLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwotCi12b2lkIHRyYWNpbmdfc2NoZWRfd2FrZXVwX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkJc3RydWN0IHRhc2tfc3RydWN0ICp3YWtlZSwKLQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1ciwKLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwogdm9pZCB0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkgICAgdW5zaWduZWQgbG9uZyBpcCwKIAkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLApAQCAtNTk3LDkgKzU4OSw2IEBACiAKIHZvaWQgdHJhY2luZ19zdGFydF9jbWRsaW5lX3JlY29yZCh2b2lkKTsKIHZvaWQgdHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKHZvaWQpOwotdm9pZCB0cmFjaW5nX3NjaGVkX3N3aXRjaF9hc3NpZ25fdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cik7Ci12b2lkIHRyYWNpbmdfc3RvcF9zY2hlZF9zd2l0Y2hfcmVjb3JkKHZvaWQpOwotdm9pZCB0cmFjaW5nX3N0YXJ0X3NjaGVkX3N3aXRjaF9yZWNvcmQodm9pZCk7CiBpbnQgcmVnaXN0ZXJfdHJhY2VyKHN0cnVjdCB0cmFjZXIgKnR5cGUpOwogaW50IGlzX3RyYWNpbmdfc3RvcHBlZCh2b2lkKTsKIApAQCAtNzE5LDYgKzcwOCw4IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyYWNlX2ZsYWdzOwogCitleHRlcm4gY2hhciB0cmFjZV9maW5kX21hcmsodW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uKTsKKwogLyogU3RhbmRhcmQgb3V0cHV0IGZvcm1hdHRpbmcgZnVuY3Rpb24gdXNlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIHRyYWNlcyAqLwogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIApAQCAtNzM3LDcgKzcyOCw3IEBACiBleHRlcm4gZW51bSBwcmludF9saW5lX3QKIHByaW50X2dyYXBoX2Z1bmN0aW9uX2ZsYWdzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgdTMyIGZsYWdzKTsKIGV4dGVybiB2b2lkIHByaW50X2dyYXBoX2hlYWRlcnNfZmxhZ3Moc3RydWN0IHNlcV9maWxlICpzLCB1MzIgZmxhZ3MpOwotZXh0ZXJuIGVudW0gcHJpbnRfbGluZV90CitleHRlcm4gdm9pZAogdHJhY2VfcHJpbnRfZ3JhcGhfZHVyYXRpb24odW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKIGV4dGVybiB2b2lkIGdyYXBoX3RyYWNlX29wZW4oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKIGV4dGVybiB2b2lkIGdyYXBoX3RyYWNlX2Nsb3NlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKaW5kZXggNjk3ZmI5Yi4uN2Q2ZTJhZiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwpAQCAtMTUxLDIyICsxNTEsMjEgQEAKIAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwogCi0JaWYgKHRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIlslc10gJXM6JXM6JWRcbiIsCi0JCQkgICAgIGZpZWxkLT5jb3JyZWN0ID8gIiAgb2sgICIgOiAiIE1JU1MgIiwKLQkJCSAgICAgZmllbGQtPmZ1bmMsCi0JCQkgICAgIGZpZWxkLT5maWxlLAotCQkJICAgICBmaWVsZC0+bGluZSkpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICJbJXNdICVzOiVzOiVkXG4iLAorCQkJIGZpZWxkLT5jb3JyZWN0ID8gIiAgb2sgICIgOiAiIE1JU1MgIiwKKwkJCSBmaWVsZC0+ZnVuYywKKwkJCSBmaWVsZC0+ZmlsZSwKKwkJCSBmaWVsZC0+bGluZSk7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKCZpdGVyLT5zZXEpOwogfQogCiBzdGF0aWMgdm9pZCBicmFuY2hfcHJpbnRfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqcykKIHsKIAlzZXFfcHV0cyhzLCAiIyAgICAgICAgICAgVEFTSy1QSUQgICAgQ1BVIyAgICBUSU1FU1RBTVAgIENPUlJFQ1QiCi0JCSIgIEZVTkM6RklMRTpMSU5FXG4iKTsKLQlzZXFfcHV0cyhzLCAiIyAgICAgICAgICAgICAgfCB8ICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgICAiCi0JCSIgICAgfFxuIik7CisJCSAgICAiICBGVU5DOkZJTEU6TElORVxuIgorCQkgICAgIiMgICAgICAgICAgICAgIHwgfCAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8ICAgIgorCQkgICAgIiAgICB8XG4iKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudF9mdW5jdGlvbnMgdHJhY2VfYnJhbmNoX2Z1bmNzID0gewpAQCAtMjMzLDEyICsyMzIsMTIgQEAKIAogc3RhdGljIGludCBhbm5vdGF0ZWRfYnJhbmNoX3N0YXRfaGVhZGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc2VxX3ByaW50ZihtLCAiIGNvcnJlY3QgaW5jb3JyZWN0ICAlJSAiKTsKLQlzZXFfcHJpbnRmKG0sICIgICAgICAgRnVuY3Rpb24gICAgICAgICAgICAgICAgIgotCQkJICAgICAgIiAgRmlsZSAgICAgICAgICAgICAgTGluZVxuIgotCQkJICAgICAgIiAtLS0tLS0tIC0tLS0tLS0tLSAgLSAiCi0JCQkgICAgICAiICAgICAgIC0tLS0tLS0tICAgICAgICAgICAgICAgICIKLQkJCSAgICAgICIgIC0tLS0gICAgICAgICAgICAgIC0tLS1cbiIpOworCXNlcV9wdXRzKG0sICIgY29ycmVjdCBpbmNvcnJlY3QgICUgIgorCQkgICAgIiAgICAgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAiCisJCSAgICAiICBGaWxlICAgICAgICAgICAgICBMaW5lXG4iCisJCSAgICAiIC0tLS0tLS0gLS0tLS0tLS0tICAtICIKKwkJICAgICIgICAgICAgLS0tLS0tLS0gICAgICAgICAgICAgICAgIgorCQkgICAgIiAgLS0tLSAgICAgICAgICAgICAgLS0tLVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3NCw3ICsyNzMsNyBAQAogCiAJc2VxX3ByaW50ZihtLCAiJThsdSAlOGx1ICIsICBwLT5jb3JyZWN0LCBwLT5pbmNvcnJlY3QpOwogCWlmIChwZXJjZW50IDwgMCkKLQkJc2VxX3ByaW50ZihtLCAiICBYICIpOworCQlzZXFfcHV0cyhtLCAiICBYICIpOwogCWVsc2UKIAkJc2VxX3ByaW50ZihtLCAiJTNsZCAiLCBwZXJjZW50KTsKIAlzZXFfcHJpbnRmKG0sICIlLTMwLjMwcyAlLTIwLjIwcyAlZFxuIiwgcC0+ZnVuYywgZiwgcC0+bGluZSk7CkBAIC0zNjIsMTIgKzM2MSwxMiBAQAogCiBzdGF0aWMgaW50IGFsbF9icmFuY2hfc3RhdF9oZWFkZXJzKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlzZXFfcHJpbnRmKG0sICIgICBtaXNzICAgICAgaGl0ICAgICUlICIpOwotCXNlcV9wcmludGYobSwgIiAgICAgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAiCi0JCQkgICAgICAiICBGaWxlICAgICAgICAgICAgICBMaW5lXG4iCi0JCQkgICAgICAiIC0tLS0tLS0gLS0tLS0tLS0tICAtICIKLQkJCSAgICAgICIgICAgICAgLS0tLS0tLS0gICAgICAgICAgICAgICAgIgotCQkJICAgICAgIiAgLS0tLSAgICAgICAgICAgICAgLS0tLVxuIik7CisJc2VxX3B1dHMobSwgIiAgIG1pc3MgICAgICBoaXQgICAgJSAiCisJCSAgICAiICAgICAgIEZ1bmN0aW9uICAgICAgICAgICAgICAgICIKKwkJICAgICIgIEZpbGUgICAgICAgICAgICAgIExpbmVcbiIKKwkJICAgICIgLS0tLS0tLSAtLS0tLS0tLS0gIC0gIgorCQkgICAgIiAgICAgICAtLS0tLS0tLSAgICAgICAgICAgICAgICAiCisJCSAgICAiICAtLS0tICAgICAgICAgICAgICAtLS0tXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IDBjYzUxZWQuLmQwZTRmOTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCiAJaWYgKGRpcikgewogCQlzcGluX2xvY2soJmRpci0+ZF9sb2NrKTsJLyogcHJvYmFibHkgdW5uZWVkZWQgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJmRpci0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZGlyLT5kX3N1YmRpcnMsIGRfY2hpbGQpIHsKIAkJCWlmIChjaGlsZC0+ZF9pbm9kZSkJLyogcHJvYmFibHkgdW5uZWVkZWQgKi8KIAkJCQljaGlsZC0+ZF9pbm9kZS0+aV9wcml2YXRlID0gTlVMTDsKIAkJfQpAQCAtOTE4LDcgKzkxOCw3IEBACiAJY2FzZSBGT1JNQVRfSEVBREVSOgogCQlzZXFfcHJpbnRmKG0sICJuYW1lOiAlc1xuIiwgZnRyYWNlX2V2ZW50X25hbWUoY2FsbCkpOwogCQlzZXFfcHJpbnRmKG0sICJJRDogJWRcbiIsIGNhbGwtPmV2ZW50LnR5cGUpOwotCQlzZXFfcHJpbnRmKG0sICJmb3JtYXQ6XG4iKTsKKwkJc2VxX3B1dHMobSwgImZvcm1hdDpcbiIpOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgRk9STUFUX0ZJRUxEX1NFUEVSQVRPUjoKQEAgLTEwNDQsNyArMTA0NCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZldmVudF9tdXRleCk7CiAKIAlpZiAoZmlsZSkKLQkJciA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgcy0+YnVmZmVyLCBzLT5sZW4pOworCQlyID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLAorCQkJCQkgICAgcy0+YnVmZmVyLCB0cmFjZV9zZXFfdXNlZChzKSk7CiAKIAlrZnJlZShzKTsKIApAQCAtMTIxMCw3ICsxMjExLDggQEAKIAl0cmFjZV9zZXFfaW5pdChzKTsKIAogCXByaW50X3N1YnN5c3RlbV9ldmVudF9maWx0ZXIoc3lzdGVtLCBzKTsKLQlyID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBzLT5idWZmZXIsIHMtPmxlbik7CisJciA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywKKwkJCQkgICAgcy0+YnVmZmVyLCB0cmFjZV9zZXFfdXNlZChzKSk7CiAKIAlrZnJlZShzKTsKIApAQCAtMTI2NSw3ICsxMjY3LDggQEAKIAl0cmFjZV9zZXFfaW5pdChzKTsKIAogCWZ1bmMocyk7Ci0JciA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgcy0+YnVmZmVyLCBzLT5sZW4pOworCXIgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsCisJCQkJICAgIHMtPmJ1ZmZlciwgdHJhY2Vfc2VxX3VzZWQocykpOwogCiAJa2ZyZWUocyk7CiAKQEAgLTE5ODgsNyArMTk5MSw3IEBACiAJCSAgIGZ0cmFjZV9ldmVudF9uYW1lKGRhdGEtPmZpbGUtPmV2ZW50X2NhbGwpKTsKIAogCWlmIChkYXRhLT5jb3VudCA9PSAtMSkKLQkJc2VxX3ByaW50ZihtLCAiOnVubGltaXRlZFxuIik7CisJCXNlcV9wdXRzKG0sICI6dW5saW1pdGVkXG4iKTsKIAllbHNlCiAJCXNlcV9wcmludGYobSwgIjpjb3VudD0lbGRcbiIsIGRhdGEtPmNvdW50KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKaW5kZXggN2E4YzE1Mi4uY2VkNjlkYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCkBAIC00NSw2ICs0NSw3IEBACiAJT1BfR1QsCiAJT1BfR0UsCiAJT1BfQkFORCwKKwlPUF9OT1QsCiAJT1BfTk9ORSwKIAlPUF9PUEVOX1BBUkVOLAogfTsKQEAgLTY3LDYgKzY4LDcgQEAKIAl7IE9QX0dULAkiPiIsCQk1IH0sCiAJeyBPUF9HRSwJIj49IiwJCTUgfSwKIAl7IE9QX0JBTkQsCSImIiwJCTYgfSwKKwl7IE9QX05PVCwJIiEiLAkJNiB9LAogCXsgT1BfTk9ORSwJIk9QX05PTkUiLAkwIH0sCiAJeyBPUF9PUEVOX1BBUkVOLCAiKCIsCQkwIH0sCiB9OwpAQCAtODUsNiArODcsNyBAQAogCUZJTFRfRVJSX01JU1NJTkdfRklFTEQsCiAJRklMVF9FUlJfSU5WQUxJRF9GSUxURVIsCiAJRklMVF9FUlJfSVBfRklFTERfT05MWSwKKwlGSUxUX0VSUl9JTExFR0FMX05PVF9PUCwKIH07CiAKIHN0YXRpYyBjaGFyICplcnJfdGV4dFtdID0gewpAQCAtMTAxLDYgKzEwNCw3IEBACiAJIk1pc3NpbmcgZmllbGQgbmFtZSBhbmQvb3IgdmFsdWUiLAogCSJNZWFuaW5nbGVzcyBmaWx0ZXIgZXhwcmVzc2lvbiIsCiAJIk9ubHkgJ2lwJyBmaWVsZCBpcyBzdXBwb3J0ZWQgZm9yIGZ1bmN0aW9uIHRyYWNlIiwKKwkiSWxsZWdhbCB1c2Ugb2YgJyEnIiwKIH07CiAKIHN0cnVjdCBvcHN0YWNrX29wIHsKQEAgLTEzOSw2ICsxNDMsNyBAQAogCWludAkJCWluZGV4OwogfTsKIAorLyogSWYgbm90IG9mIG5vdCBtYXRjaCBpcyBlcXVhbCB0byBub3Qgb2Ygbm90LCB0aGVuIGl0IGlzIGEgbWF0Y2ggKi8KICNkZWZpbmUgREVGSU5FX0NPTVBBUklTT05fUFJFRCh0eXBlKQkJCQkJXAogc3RhdGljIGludCBmaWx0ZXJfcHJlZF8jI3R5cGUoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLCB2b2lkICpldmVudCkJXAogewkJCQkJCQkJCVwKQEAgLTE2Niw3ICsxNzEsNyBAQAogCQlicmVhazsJCQkJCQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlyZXR1cm4gbWF0Y2g7CQkJCQkJCVwKKwlyZXR1cm4gISFtYXRjaCA9PSAhcHJlZC0+bm90OwkJCQkJXAogfQogCiAjZGVmaW5lIERFRklORV9FUVVBTElUWV9QUkVEKHNpemUpCQkJCQlcCkBAIC00ODQsOSArNDg5LDEwIEBACiAJCWlmICghV0FSTl9PTl9PTkNFKCFwcmVkLT5mbikpCiAJCQltYXRjaCA9IHByZWQtPmZuKHByZWQsIHJlYyk7CiAJCWlmICghIW1hdGNoID09IHR5cGUpCi0JCQlyZXR1cm4gbWF0Y2g7CisJCQlicmVhazsKIAl9Ci0JcmV0dXJuIG1hdGNoOworCS8qIElmIG5vdCBvZiBub3QgbWF0Y2ggaXMgZXF1YWwgdG8gbm90IG9mIG5vdCwgdGhlbiBpdCBpcyBhIG1hdGNoICovCisJcmV0dXJuICEhbWF0Y2ggPT0gIW9wLT5ub3Q7CiB9CiAKIHN0cnVjdCBmaWx0ZXJfbWF0Y2hfcHJlZHNfZGF0YSB7CkBAIC03MzUsMTAgKzc0MSwxMCBAQAogCQkgKiB0aGVuIHRoaXMgb3AgY2FuIGJlIGZvbGRlZC4KIAkJICovCiAJCWlmIChsZWZ0LT5pbmRleCAmIEZJTFRFUl9QUkVEX0ZPTEQgJiYKLQkJICAgIChsZWZ0LT5vcCA9PSBkZXN0LT5vcCB8fAorCQkgICAgKChsZWZ0LT5vcCA9PSBkZXN0LT5vcCAmJiAhbGVmdC0+bm90KSB8fAogCQkgICAgIGxlZnQtPmxlZnQgPT0gRklMVEVSX1BSRURfSU5WQUxJRCkgJiYKIAkJICAgIHJpZ2h0LT5pbmRleCAmIEZJTFRFUl9QUkVEX0ZPTEQgJiYKLQkJICAgIChyaWdodC0+b3AgPT0gZGVzdC0+b3AgfHwKKwkJICAgICgocmlnaHQtPm9wID09IGRlc3QtPm9wICYmICFyaWdodC0+bm90KSB8fAogCQkgICAgIHJpZ2h0LT5sZWZ0ID09IEZJTFRFUl9QUkVEX0lOVkFMSUQpKQogCQkJZGVzdC0+aW5kZXggfD0gRklMVEVSX1BSRURfRk9MRDsKIApAQCAtMTAyOCw3ICsxMDM0LDcgQEAKIAl9CiAKIAlpZiAocHJlZC0+b3AgPT0gT1BfTkUpCi0JCXByZWQtPm5vdCA9IDE7CisJCXByZWQtPm5vdCBePSAxOwogCiAJcHJlZC0+Zm4gPSBmbjsKIAlyZXR1cm4gMDsKQEAgLTE1OTAsNiArMTU5NiwxNyBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQlpZiAoZWx0LT5vcCA9PSBPUF9OT1QpIHsKKwkJCWlmICghbl9wcmVkcyB8fCBvcGVyYW5kMSB8fCBvcGVyYW5kMikgeworCQkJCXBhcnNlX2Vycm9yKHBzLCBGSUxUX0VSUl9JTExFR0FMX05PVF9PUCwgMCk7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQlpZiAoIWRyeV9ydW4pCisJCQkJZmlsdGVyLT5wcmVkc1tuX3ByZWRzIC0gMV0ubm90IF49IDE7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlmIChXQVJOX09OKG5fcHJlZHMrKyA9PSBNQVhfRklMVEVSX1BSRUQpKSB7CiAJCQlwYXJzZV9lcnJvcihwcywgRklMVF9FUlJfVE9PX01BTllfUFJFRFMsIDApOwogCQkJZXJyID0gLUVOT1NQQzsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdHJpZ2dlci5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c190cmlnZ2VyLmMKaW5kZXggNDc0N2I0Ny4uODcxMmRmOSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c190cmlnZ2VyLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c190cmlnZ2VyLmMKQEAgLTM3Myw3ICszNzMsNyBAQAogewogCWxvbmcgY291bnQgPSAobG9uZylkYXRhOwogCi0Jc2VxX3ByaW50ZihtLCAiJXMiLCBuYW1lKTsKKwlzZXFfcHV0cyhtLCBuYW1lKTsKIAogCWlmIChjb3VudCA9PSAtMSkKIAkJc2VxX3B1dHMobSwgIjp1bmxpbWl0ZWQiKTsKQEAgLTM4Myw3ICszODMsNyBAQAogCWlmIChmaWx0ZXJfc3RyKQogCQlzZXFfcHJpbnRmKG0sICIgaWYgJXNcbiIsIGZpbHRlcl9zdHIpOwogCWVsc2UKLQkJc2VxX3B1dHMobSwgIlxuIik7CisJCXNlcV9wdXRjKG0sICdcbicpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTA1LDcgKzExMDUsNyBAQAogCWlmIChkYXRhLT5maWx0ZXJfc3RyKQogCQlzZXFfcHJpbnRmKG0sICIgaWYgJXNcbiIsIGRhdGEtPmZpbHRlcl9zdHIpOwogCWVsc2UKLQkJc2VxX3B1dHMobSwgIlxuIik7CisJCXNlcV9wdXRjKG0sICdcbicpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKaW5kZXggNTdmMGVjOS4uZmNkNDFhMSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYwpAQCAtMjYxLDM3ICsyNjEsNzQgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKLXN0YXRpYyBpbnQgdXBkYXRlX2NvdW50KHZvaWQgKipkYXRhKQorc3RhdGljIHZvaWQgdXBkYXRlX3RyYWNlb25fY291bnQodm9pZCAqKmRhdGEsIGJvb2wgb24pCiB7Ci0JdW5zaWduZWQgbG9uZyAqY291bnQgPSAobG9uZyAqKWRhdGE7CisJbG9uZyAqY291bnQgPSAobG9uZyAqKWRhdGE7CisJbG9uZyBvbGRfY291bnQgPSAqY291bnQ7CiAKLQlpZiAoISpjb3VudCkKLQkJcmV0dXJuIDA7CisJLyoKKwkgKiBUcmFjaW5nIGdldHMgZGlzYWJsZWQgKG9yIGVuYWJsZWQpIG9uY2UgcGVyIGNvdW50LgorCSAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCB0aGUgc2FtZSB0aW1lIG9uIG11bHRpcGxlIENQVXMuCisJICogSXQgaXMgZmluZSBpZiBib3RoIGRpc2FibGUgKG9yIGVuYWJsZSkgdHJhY2luZywgYXMgZGlzYWJsaW5nCisJICogKG9yIGVuYWJsaW5nKSB0aGUgc2Vjb25kIHRpbWUgZG9lc24ndCBkbyBhbnl0aGluZyBhcyB0aGUKKwkgKiBzdGF0ZSBvZiB0aGUgdHJhY2VyIGlzIGFscmVhZHkgZGlzYWJsZWQgKG9yIGVuYWJsZWQpLgorCSAqIFdoYXQgbmVlZHMgdG8gYmUgc3luY2hyb25pemVkIGluIHRoaXMgY2FzZSBpcyB0aGF0IHRoZSBjb3VudAorCSAqIG9ubHkgZ2V0cyBkZWNyZW1lbnRlZCBvbmNlLCBldmVuIGlmIHRoZSB0cmFjZXIgaXMgZGlzYWJsZWQKKwkgKiAob3IgZW5hYmxlZCkgdHdpY2UsIGFzIHRoZSBzZWNvbmQgb25lIGlzIHJlYWxseSBhIG5vcC4KKwkgKgorCSAqIFRoZSBtZW1vcnkgYmFycmllcnMgZ3VhcmFudGVlIHRoYXQgd2Ugb25seSBkZWNyZW1lbnQgdGhlCisJICogY291bnRlciBvbmNlLiBGaXJzdCB0aGUgY291bnQgaXMgcmVhZCB0byBhIGxvY2FsIHZhcmlhYmxlCisJICogYW5kIGEgcmVhZCBiYXJyaWVyIGlzIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgbG9hZGVkCisJICogYmVmb3JlIGNoZWNraW5nIGlmIHRoZSB0cmFjZXIgaXMgaW4gdGhlIHN0YXRlIHdlIHdhbnQuCisJICogSWYgdGhlIHRyYWNlciBpcyBub3QgaW4gdGhlIHN0YXRlIHdlIHdhbnQsIHRoZW4gdGhlIGNvdW50CisJICogaXMgZ3VhcmFudGVlZCB0byBiZSB0aGUgb2xkIGNvdW50LgorCSAqCisJICogTmV4dCB0aGUgdHJhY2VyIGlzIHNldCB0byB0aGUgc3RhdGUgd2Ugd2FudCAoZGlzYWJsZWQgb3IgZW5hYmxlZCkKKwkgKiB0aGVuIGEgd3JpdGUgbWVtb3J5IGJhcnJpZXIgaXMgdXNlZCB0byBtYWtlIHN1cmUgdGhhdAorCSAqIHRoZSBuZXcgc3RhdGUgaXMgdmlzaWJsZSBiZWZvcmUgY2hhbmdpbmcgdGhlIGNvdW50ZXIgYnkKKwkgKiBvbmUgbWludXMgdGhlIG9sZCBjb3VudGVyLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBhbm90aGVyIENQVQorCSAqIGV4ZWN1dGluZyB0aGlzIGNvZGUgd2lsbCBzZWUgdGhlIG5ldyBzdGF0ZSBiZWZvcmUgc2VlaW5nCisJICogdGhlIG5ldyBjb3VudGVyIHZhbHVlLCBhbmQgd291bGQgbm90IGRvIGFueXRoaW5nIGlmIHRoZSBuZXcKKwkgKiBjb3VudGVyIGlzIHNlZW4uCisJICoKKwkgKiBOb3RlLCB0aGVyZSBpcyBubyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGlzIGFuZCBhIHVzZXIKKwkgKiBzZXR0aW5nIHRoZSB0cmFjaW5nX29uIGZpbGUuIEJ1dCB3ZSBjdXJyZW50bHkgZG9uJ3QgY2FyZQorCSAqIGFib3V0IHRoYXQuCisJICovCisJaWYgKCFvbGRfY291bnQpCisJCXJldHVybjsKIAotCWlmICgqY291bnQgIT0gLTEpCi0JCSgqY291bnQpLS07CisJLyogTWFrZSBzdXJlIHdlIHNlZSBjb3VudCBiZWZvcmUgY2hlY2tpbmcgdHJhY2luZyBzdGF0ZSAqLworCXNtcF9ybWIoKTsKIAotCXJldHVybiAxOworCWlmIChvbiA9PSAhIXRyYWNpbmdfaXNfb24oKSkKKwkJcmV0dXJuOworCisJaWYgKG9uKQorCQl0cmFjaW5nX29uKCk7CisJZWxzZQorCQl0cmFjaW5nX29mZigpOworCisJLyogdW5saW1pdGVkPyAqLworCWlmIChvbGRfY291bnQgPT0gLTEpCisJCXJldHVybjsKKworCS8qIE1ha2Ugc3VyZSB0cmFjaW5nIHN0YXRlIGlzIHZpc2libGUgYmVmb3JlIHVwZGF0aW5nIGNvdW50ICovCisJc21wX3dtYigpOworCisJKmNvdW50ID0gb2xkX2NvdW50IC0gMTsKIH0KIAogc3RhdGljIHZvaWQKIGZ0cmFjZV90cmFjZW9uX2NvdW50KHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLCB2b2lkICoqZGF0YSkKIHsKLQlpZiAodHJhY2luZ19pc19vbigpKQotCQlyZXR1cm47Ci0KLQlpZiAodXBkYXRlX2NvdW50KGRhdGEpKQotCQl0cmFjaW5nX29uKCk7CisJdXBkYXRlX3RyYWNlb25fY291bnQoZGF0YSwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBmdHJhY2VfdHJhY2VvZmZfY291bnQodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsIHZvaWQgKipkYXRhKQogewotCWlmICghdHJhY2luZ19pc19vbigpKQotCQlyZXR1cm47Ci0KLQlpZiAodXBkYXRlX2NvdW50KGRhdGEpKQotCQl0cmFjaW5nX29mZigpOworCXVwZGF0ZV90cmFjZW9uX2NvdW50KGRhdGEsIDApOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzMwLDExICszNjcsNDkgQEAKIHN0YXRpYyB2b2lkCiBmdHJhY2Vfc3RhY2t0cmFjZV9jb3VudCh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwgdm9pZCAqKmRhdGEpCiB7Ci0JaWYgKCF0cmFjaW5nX2lzX29uKCkpCi0JCXJldHVybjsKKwlsb25nICpjb3VudCA9IChsb25nICopZGF0YTsKKwlsb25nIG9sZF9jb3VudDsKKwlsb25nIG5ld19jb3VudDsKIAotCWlmICh1cGRhdGVfY291bnQoZGF0YSkpCi0JCXRyYWNlX2R1bXBfc3RhY2soU1RBQ0tfU0tJUCk7CisJLyoKKwkgKiBTdGFjayB0cmFjZXMgc2hvdWxkIG9ubHkgZXhlY3V0ZSB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZQorCSAqIHVzZXIgc3BlY2lmaWVkIGluIHRoZSBjb3VudGVyLgorCSAqLworCWRvIHsKKworCQlpZiAoIXRyYWNpbmdfaXNfb24oKSkKKwkJCXJldHVybjsKKworCQlvbGRfY291bnQgPSAqY291bnQ7CisKKwkJaWYgKCFvbGRfY291bnQpCisJCQlyZXR1cm47CisKKwkJLyogdW5saW1pdGVkPyAqLworCQlpZiAob2xkX2NvdW50ID09IC0xKSB7CisJCQl0cmFjZV9kdW1wX3N0YWNrKFNUQUNLX1NLSVApOworCQkJcmV0dXJuOworCQl9CisKKwkJbmV3X2NvdW50ID0gb2xkX2NvdW50IC0gMTsKKwkJbmV3X2NvdW50ID0gY21weGNoZyhjb3VudCwgb2xkX2NvdW50LCBuZXdfY291bnQpOworCQlpZiAobmV3X2NvdW50ID09IG9sZF9jb3VudCkKKwkJCXRyYWNlX2R1bXBfc3RhY2soU1RBQ0tfU0tJUCk7CisKKwl9IHdoaWxlIChuZXdfY291bnQgIT0gb2xkX2NvdW50KTsKK30KKworc3RhdGljIGludCB1cGRhdGVfY291bnQodm9pZCAqKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyAqY291bnQgPSAobG9uZyAqKWRhdGE7CisKKwlpZiAoISpjb3VudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKmNvdW50ICE9IC0xKQorCQkoKmNvdW50KS0tOworCisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zNjEsNyArNDM2LDcgQEAKIAlzZXFfcHJpbnRmKG0sICIlcHM6JXMiLCAodm9pZCAqKWlwLCBuYW1lKTsKIAogCWlmIChjb3VudCA9PSAtMSkKLQkJc2VxX3ByaW50ZihtLCAiOnVubGltaXRlZFxuIik7CisJCXNlcV9wdXRzKG0sICI6dW5saW1pdGVkXG4iKTsKIAllbHNlCiAJCXNlcV9wcmludGYobSwgIjpjb3VudD0lbGRcbiIsIGNvdW50KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCmluZGV4IGYwYTBjOTguLmJhNDc2MDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCUZMQUdTX0ZJTExfRU5EICAgPSAzIDw8IFRSQUNFX0dSQVBIX1BSSU5UX0ZJTExfU0hJRlQsCiB9OwogCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QKK3N0YXRpYyB2b2lkCiBwcmludF9ncmFwaF9kdXJhdGlvbih1bnNpZ25lZCBsb25nIGxvbmcgZHVyYXRpb24sIHN0cnVjdCB0cmFjZV9zZXEgKnMsCiAJCSAgICAgdTMyIGZsYWdzKTsKIApAQCAtNDgzLDMzICs0ODMsMjQgQEAKIAogc3RhdGljIGludCBtYXhfYnl0ZXNfZm9yX2NwdTsKIAotc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci1wcmludF9ncmFwaF9jcHUoc3RydWN0IHRyYWNlX3NlcSAqcywgaW50IGNwdSkKK3N0YXRpYyB2b2lkIHByaW50X2dyYXBoX2NwdShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBpbnQgY3B1KQogewotCWludCByZXQ7Ci0KIAkvKgogCSAqIFN0YXJ0IHdpdGggYSBzcGFjZSBjaGFyYWN0ZXIgLSB0byBtYWtlIGl0IHN0YW5kIG91dAogCSAqIHRvIHRoZSByaWdodCBhIGJpdCB3aGVuIHRyYWNlIG91dHB1dCBpcyBwYXN0ZWQgaW50bwogCSAqIGVtYWlsOgogCSAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAlKmQpICIsIG1heF9ieXRlc19mb3JfY3B1LCBjcHUpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXRyYWNlX3NlcV9wcmludGYocywgIiAlKmQpICIsIG1heF9ieXRlc19mb3JfY3B1LCBjcHUpOwogfQogCiAjZGVmaW5lIFRSQUNFX0dSQVBIX1BST0NJTkZPX0xFTkdUSAkxNAogCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QKLXByaW50X2dyYXBoX3Byb2Moc3RydWN0IHRyYWNlX3NlcSAqcywgcGlkX3QgcGlkKQorc3RhdGljIHZvaWQgcHJpbnRfZ3JhcGhfcHJvYyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBwaWRfdCBwaWQpCiB7CiAJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOwogCS8qIHNpZ24gKyBsb2cxMChNQVhfSU5UKSArICdcMCcgKi8KIAljaGFyIHBpZF9zdHJbMTFdOwogCWludCBzcGFjZXMgPSAwOwotCWludCByZXQ7CiAJaW50IGxlbjsKIAlpbnQgaTsKIApAQCAtNTI0LDU2ICs1MTUsNDMgQEAKIAkJc3BhY2VzID0gVFJBQ0VfR1JBUEhfUFJPQ0lORk9fTEVOR1RIIC0gbGVuOwogCiAJLyogRmlyc3Qgc3BhY2VzIHRvIGFsaWduIGNlbnRlciAqLwotCWZvciAoaSA9IDA7IGkgPCBzcGFjZXMgLyAyOyBpKyspIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJyAnKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBzcGFjZXMgLyAyOyBpKyspCisJCXRyYWNlX3NlcV9wdXRjKHMsICcgJyk7CiAKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcy0lcyIsIGNvbW0sIHBpZF9zdHIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMtJXMiLCBjb21tLCBwaWRfc3RyKTsKIAogCS8qIExhc3Qgc3BhY2VzIHRvIGFsaWduIGNlbnRlciAqLwotCWZvciAoaSA9IDA7IGkgPCBzcGFjZXMgLSAoc3BhY2VzIC8gMik7IGkrKykgewotCQlyZXQgPSB0cmFjZV9zZXFfcHV0YyhzLCAnICcpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9Ci0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwlmb3IgKGkgPSAwOyBpIDwgc3BhY2VzIC0gKHNwYWNlcyAvIDIpOyBpKyspCisJCXRyYWNlX3NlcV9wdXRjKHMsICcgJyk7CiB9CiAKIAotc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci1wcmludF9ncmFwaF9sYXRfZm10KHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkpCitzdGF0aWMgdm9pZCBwcmludF9ncmFwaF9sYXRfZm10KHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkpCiB7Ci0JaWYgKCF0cmFjZV9zZXFfcHV0YyhzLCAnICcpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB0cmFjZV9wcmludF9sYXRfZm10KHMsIGVudHJ5KTsKKwl0cmFjZV9zZXFfcHV0YyhzLCAnICcpOworCXRyYWNlX3ByaW50X2xhdF9mbXQocywgZW50cnkpOwogfQogCiAvKiBJZiB0aGUgcGlkIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdHJhY2UsIG91dHB1dCB0aGlzIGV2ZW50ICovCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QKK3N0YXRpYyB2b2lkCiB2ZXJpZl9waWQoc3RydWN0IHRyYWNlX3NlcSAqcywgcGlkX3QgcGlkLCBpbnQgY3B1LCBzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEpCiB7CiAJcGlkX3QgcHJldl9waWQ7CiAJcGlkX3QgKmxhc3RfcGlkOwotCWludCByZXQ7CiAKIAlpZiAoIWRhdGEpCi0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJCXJldHVybjsKIAogCWxhc3RfcGlkID0gJihwZXJfY3B1X3B0cihkYXRhLT5jcHVfZGF0YSwgY3B1KS0+bGFzdF9waWQpOwogCiAJaWYgKCpsYXN0X3BpZCA9PSBwaWQpCi0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJCXJldHVybjsKIAogCXByZXZfcGlkID0gKmxhc3RfcGlkOwogCSpsYXN0X3BpZCA9IHBpZDsKIAogCWlmIChwcmV2X3BpZCA9PSAtMSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwkJcmV0dXJuOwogLyoKICAqIENvbnRleHQtc3dpdGNoIHRyYWNlIGxpbmU6CiAKQEAgLTU4MiwzMyArNTYwLDEyIEBACiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAqLwotCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsCi0JCSIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JcmV0ID0gcHJpbnRfZ3JhcGhfY3B1KHMsIGNwdSk7Ci0JaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JcmV0ID0gcHJpbnRfZ3JhcGhfcHJvYyhzLCBwcmV2X3BpZCk7Ci0JaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIiA9PiAiKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JcmV0ID0gcHJpbnRfZ3JhcGhfcHJvYyhzLCBwaWQpOwotCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsCi0JCSJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJdHJhY2Vfc2VxX3B1dHMocywgIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50X2dyYXBoX2NwdShzLCBjcHUpOworCXByaW50X2dyYXBoX3Byb2MocywgcHJldl9waWQpOworCXRyYWNlX3NlcV9wdXRzKHMsICIgPT4gIik7CisJcHJpbnRfZ3JhcGhfcHJvYyhzLCBwaWQpOworCXRyYWNlX3NlcV9wdXRzKHMsICJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldF9lbnRyeSAqCkBAIC02ODIsMTc1ICs2MzksMTIyIEBACiAJcmV0dXJuIG5leHQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfZ3JhcGhfYWJzX3RpbWUodTY0IHQsIHN0cnVjdCB0cmFjZV9zZXEgKnMpCitzdGF0aWMgdm9pZCBwcmludF9ncmFwaF9hYnNfdGltZSh1NjQgdCwgc3RydWN0IHRyYWNlX3NlcSAqcykKIHsKIAl1bnNpZ25lZCBsb25nIHVzZWNzX3JlbTsKIAogCXVzZWNzX3JlbSA9IGRvX2Rpdih0LCBOU0VDX1BFUl9TRUMpOwogCXVzZWNzX3JlbSAvPSAxMDAwOwogCi0JcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiU1bHUuJTA2bHUgfCAgIiwKLQkJCSh1bnNpZ25lZCBsb25nKXQsIHVzZWNzX3JlbSk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTVsdS4lMDZsdSB8ICAiLAorCQkJICh1bnNpZ25lZCBsb25nKXQsIHVzZWNzX3JlbSk7CiB9CiAKLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAorc3RhdGljIHZvaWQKIHByaW50X2dyYXBoX2lycShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJZW51bSB0cmFjZV90eXBlIHR5cGUsIGludCBjcHUsIHBpZF90IHBpZCwgdTMyIGZsYWdzKQogewotCWludCByZXQ7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQgPSBpdGVyLT5lbnQ7CiAKIAlpZiAoYWRkciA8ICh1bnNpZ25lZCBsb25nKV9faXJxZW50cnlfdGV4dF9zdGFydCB8fAogCQlhZGRyID49ICh1bnNpZ25lZCBsb25nKV9faXJxZW50cnlfdGV4dF9lbmQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKKwkJcmV0dXJuOwogCiAJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8pIHsKIAkJLyogQWJzb2x1dGUgdGltZSAqLwotCQlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9BQlNfVElNRSkgewotCQkJcmV0ID0gcHJpbnRfZ3JhcGhfYWJzX3RpbWUoaXRlci0+dHMsIHMpOwotCQkJaWYgKCFyZXQpCi0JCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQl9CisJCWlmIChmbGFncyAmIFRSQUNFX0dSQVBIX1BSSU5UX0FCU19USU1FKQorCQkJcHJpbnRfZ3JhcGhfYWJzX3RpbWUoaXRlci0+dHMsIHMpOwogCiAJCS8qIENwdSAqLwotCQlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpIHsKLQkJCXJldCA9IHByaW50X2dyYXBoX2NwdShzLCBjcHUpOwotCQkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCX0KKwkJaWYgKGZsYWdzICYgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVKQorCQkJcHJpbnRfZ3JhcGhfY3B1KHMsIGNwdSk7CiAKIAkJLyogUHJvYyAqLwogCQlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9QUk9DKSB7Ci0JCQlyZXQgPSBwcmludF9ncmFwaF9wcm9jKHMsIHBpZCk7Ci0JCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICIgfCAiKTsKLQkJCWlmICghcmV0KQotCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJCXByaW50X2dyYXBoX3Byb2MocywgcGlkKTsKKwkJCXRyYWNlX3NlcV9wdXRzKHMsICIgfCAiKTsKIAkJfQorCisJCS8qIExhdGVuY3kgZm9ybWF0ICovCisJCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfTEFURU5DWV9GTVQpCisJCQlwcmludF9ncmFwaF9sYXRfZm10KHMsIGVudCk7CiAJfQogCiAJLyogTm8gb3ZlcmhlYWQgKi8KLQlyZXQgPSBwcmludF9ncmFwaF9kdXJhdGlvbigwLCBzLCBmbGFncyB8IEZMQUdTX0ZJTExfU1RBUlQpOwotCWlmIChyZXQgIT0gVFJBQ0VfVFlQRV9IQU5ETEVEKQotCQlyZXR1cm4gcmV0OworCXByaW50X2dyYXBoX2R1cmF0aW9uKDAsIHMsIGZsYWdzIHwgRkxBR1NfRklMTF9TVEFSVCk7CiAKIAlpZiAodHlwZSA9PSBUUkFDRV9HUkFQSF9FTlQpCi0JCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICI9PT09PT09PT09PiIpOworCQl0cmFjZV9zZXFfcHV0cyhzLCAiPT09PT09PT09PT4iKTsKIAllbHNlCi0JCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICI8PT09PT09PT09PSIpOworCQl0cmFjZV9zZXFfcHV0cyhzLCAiPD09PT09PT09PT0iKTsKIAotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlyZXQgPSBwcmludF9ncmFwaF9kdXJhdGlvbigwLCBzLCBmbGFncyB8IEZMQUdTX0ZJTExfRU5EKTsKLQlpZiAocmV0ICE9IFRSQUNFX1RZUEVfSEFORExFRCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHRyYWNlX3NlcV9wdXRjKHMsICdcbicpOwotCi0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXByaW50X2dyYXBoX2R1cmF0aW9uKDAsIHMsIGZsYWdzIHwgRkxBR1NfRklMTF9FTkQpOworCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOwogfQogCi1lbnVtIHByaW50X2xpbmVfdAordm9pZAogdHJhY2VfcHJpbnRfZ3JhcGhfZHVyYXRpb24odW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQogewogCXVuc2lnbmVkIGxvbmcgbnNlY3NfcmVtID0gZG9fZGl2KGR1cmF0aW9uLCAxMDAwKTsKIAkvKiBsb2cxMChVTE9OR19NQVgpICsgJ1wwJyAqLwotCWNoYXIgbXNlY3Nfc3RyWzIxXTsKKwljaGFyIHVzZWNzX3N0clsyMV07CiAJY2hhciBuc2Vjc19zdHJbNV07Ci0JaW50IHJldCwgbGVuOworCWludCBsZW47CiAJaW50IGk7CiAKLQlzcHJpbnRmKG1zZWNzX3N0ciwgIiVsdSIsICh1bnNpZ25lZCBsb25nKSBkdXJhdGlvbik7CisJc3ByaW50Zih1c2Vjc19zdHIsICIlbHUiLCAodW5zaWduZWQgbG9uZykgZHVyYXRpb24pOwogCiAJLyogUHJpbnQgbXNlY3MgKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyIsIG1zZWNzX3N0cik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyIsIHVzZWNzX3N0cik7CiAKLQlsZW4gPSBzdHJsZW4obXNlY3Nfc3RyKTsKKwlsZW4gPSBzdHJsZW4odXNlY3Nfc3RyKTsKIAogCS8qIFByaW50IG5zZWNzICh3ZSBkb24ndCB3YW50IHRvIGV4Y2VlZCA3IG51bWJlcnMpICovCiAJaWYgKGxlbiA8IDcpIHsKIAkJc2l6ZV90IHNsZW4gPSBtaW5fdChzaXplX3QsIHNpemVvZihuc2Vjc19zdHIpLCA4VUwgLSBsZW4pOwogCiAJCXNucHJpbnRmKG5zZWNzX3N0ciwgc2xlbiwgIiUwM2x1IiwgbnNlY3NfcmVtKTsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiLiVzIiwgbnNlY3Nfc3RyKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCXRyYWNlX3NlcV9wcmludGYocywgIi4lcyIsIG5zZWNzX3N0cik7CiAJCWxlbiArPSBzdHJsZW4obnNlY3Nfc3RyKTsKIAl9CiAKLQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiIHVzICIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJdHJhY2Vfc2VxX3B1dHMocywgIiB1cyAiKTsKIAogCS8qIFByaW50IHJlbWFpbmluZyBzcGFjZXMgdG8gZml0IHRoZSByb3cncyB3aWR0aCAqLwotCWZvciAoaSA9IGxlbjsgaSA8IDc7IGkrKykgewotCQlyZXQgPSB0cmFjZV9zZXFfcHV0YyhzLCAnICcpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9Ci0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwlmb3IgKGkgPSBsZW47IGkgPCA3OyBpKyspCisJCXRyYWNlX3NlcV9wdXRjKHMsICcgJyk7CiB9CiAKLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAorc3RhdGljIHZvaWQKIHByaW50X2dyYXBoX2R1cmF0aW9uKHVuc2lnbmVkIGxvbmcgbG9uZyBkdXJhdGlvbiwgc3RydWN0IHRyYWNlX3NlcSAqcywKIAkJICAgICB1MzIgZmxhZ3MpCiB7Ci0JaW50IHJldCA9IC0xOwotCiAJaWYgKCEoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTikgfHwKIAkgICAgISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQ09OVEVYVF9JTkZPKSkKLQkJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJCXJldHVybjsKIAogCS8qIE5vIHJlYWwgYWRhdGEsIGp1c3QgZmlsbGluZyB0aGUgY29sdW1uIHdpdGggc3BhY2VzICovCiAJc3dpdGNoIChmbGFncyAmIFRSQUNFX0dSQVBIX1BSSU5UX0ZJTExfTUFTSykgewogCWNhc2UgRkxBR1NfRklMTF9GVUxMOgotCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiICAgICAgICAgICAgICB8ICAiKTsKLQkJcmV0dXJuIHJldCA/IFRSQUNFX1RZUEVfSEFORExFRCA6IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQl0cmFjZV9zZXFfcHV0cyhzLCAiICAgICAgICAgICAgICB8ICAiKTsKKwkJcmV0dXJuOwogCWNhc2UgRkxBR1NfRklMTF9TVEFSVDoKLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIiAgIik7Ci0JCXJldHVybiByZXQgPyBUUkFDRV9UWVBFX0hBTkRMRUQgOiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJdHJhY2Vfc2VxX3B1dHMocywgIiAgIik7CisJCXJldHVybjsKIAljYXNlIEZMQUdTX0ZJTExfRU5EOgotCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiIHwiKTsKLQkJcmV0dXJuIHJldCA/IFRSQUNFX1RZUEVfSEFORExFRCA6IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQl0cmFjZV9zZXFfcHV0cyhzLCAiIHwiKTsKKwkJcmV0dXJuOwogCX0KIAogCS8qIFNpZ25hbCBhIG92ZXJoZWFkIG9mIHRpbWUgZXhlY3V0aW9uIHRvIHRoZSBvdXRwdXQgKi8KLQlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCkgewotCQkvKiBEdXJhdGlvbiBleGNlZWRlZCAxMDAgbXNlY3MgKi8KLQkJaWYgKGR1cmF0aW9uID4gMTAwMDAwVUxMKQotCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIiEgIik7Ci0JCS8qIER1cmF0aW9uIGV4Y2VlZGVkIDEwIG1zZWNzICovCi0JCWVsc2UgaWYgKGR1cmF0aW9uID4gMTAwMDBVTEwpCi0JCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiKyAiKTsKLQl9CisJaWYgKGZsYWdzICYgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQpCisJCXRyYWNlX3NlcV9wcmludGYocywgIiVjICIsIHRyYWNlX2ZpbmRfbWFyayhkdXJhdGlvbikpOworCWVsc2UKKwkJdHJhY2Vfc2VxX3B1dHMocywgIiAgIik7CiAKLQkvKgotCSAqIFRoZSAtMSBtZWFucyB3ZSBlaXRoZXIgZGlkIG5vdCBleGNlZWQgdGhlIGR1cmF0aW9uIHRyZXNob2xkcwotCSAqIG9yIHdlIGRvbnQgd2FudCB0byBwcmludCBvdXQgdGhlIG92ZXJoZWFkLiBFaXRoZXIgd2F5IHdlIG5lZWQKLQkgKiB0byBmaWxsIG91dCB0aGUgc3BhY2UuCi0JICovCi0JaWYgKHJldCA9PSAtMSkKLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIiAgIik7Ci0KLQkvKiBDYXRjaGluZyBoZXJlIGFueSBmYWlsdXJlIGhhcHBlbm5lZCBhYm92ZSAqLwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlyZXQgPSB0cmFjZV9wcmludF9ncmFwaF9kdXJhdGlvbihkdXJhdGlvbiwgcyk7Ci0JaWYgKHJldCAhPSBUUkFDRV9UWVBFX0hBTkRMRUQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAifCAgIik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJdHJhY2VfcHJpbnRfZ3JhcGhfZHVyYXRpb24oZHVyYXRpb24sIHMpOworCXRyYWNlX3NlcV9wdXRzKHMsICJ8ICAiKTsKIH0KIAogLyogQ2FzZSBvZiBhIGxlYWYgZnVuY3Rpb24gb24gaXRzIGNhbGwgZW50cnkgKi8KQEAgLTg2NCw3ICs3NjgsNiBAQAogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICpncmFwaF9yZXQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKmNhbGw7CiAJdW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uOwotCWludCByZXQ7CiAJaW50IGk7CiAKIAlncmFwaF9yZXQgPSAmcmV0X2VudHJ5LT5yZXQ7CkBAIC04OTAsMjIgKzc5MywxNSBAQAogCX0KIAogCS8qIE92ZXJoZWFkIGFuZCBkdXJhdGlvbiAqLwotCXJldCA9IHByaW50X2dyYXBoX2R1cmF0aW9uKGR1cmF0aW9uLCBzLCBmbGFncyk7Ci0JaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXByaW50X2dyYXBoX2R1cmF0aW9uKGR1cmF0aW9uLCBzLCBmbGFncyk7CiAKIAkvKiBGdW5jdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCBjYWxsLT5kZXB0aCAqIFRSQUNFX0dSQVBIX0lOREVOVDsgaSsrKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wdXRjKHMsICcgJyk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgY2FsbC0+ZGVwdGggKiBUUkFDRV9HUkFQSF9JTkRFTlQ7IGkrKykKKwkJdHJhY2Vfc2VxX3B1dGMocywgJyAnKTsKIAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVwcygpO1xuIiwgKHZvaWQgKiljYWxsLT5mdW5jKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXRyYWNlX3NlcV9wcmludGYocywgIiVwcygpO1xuIiwgKHZvaWQgKiljYWxsLT5mdW5jKTsKIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdApAQCAtOTE1LDcgKzgxMSw2IEBACiB7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKmNhbGwgPSAmZW50cnktPmdyYXBoX2VudDsKIAlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOwotCWludCByZXQ7CiAJaW50IGk7CiAKIAlpZiAoZGF0YSkgewpAQCAtOTMxLDE5ICs4MjYsMTUgQEAKIAl9CiAKIAkvKiBObyB0aW1lICovCi0JcmV0ID0gcHJpbnRfZ3JhcGhfZHVyYXRpb24oMCwgcywgZmxhZ3MgfCBGTEFHU19GSUxMX0ZVTEwpOwotCWlmIChyZXQgIT0gVFJBQ0VfVFlQRV9IQU5ETEVEKQotCQlyZXR1cm4gcmV0OworCXByaW50X2dyYXBoX2R1cmF0aW9uKDAsIHMsIGZsYWdzIHwgRkxBR1NfRklMTF9GVUxMKTsKIAogCS8qIEZ1bmN0aW9uICovCi0JZm9yIChpID0gMDsgaSA8IGNhbGwtPmRlcHRoICogVFJBQ0VfR1JBUEhfSU5ERU5UOyBpKyspIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJyAnKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBjYWxsLT5kZXB0aCAqIFRSQUNFX0dSQVBIX0lOREVOVDsgaSsrKQorCQl0cmFjZV9zZXFfcHV0YyhzLCAnICcpOwogCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXBzKCkge1xuIiwgKHZvaWQgKiljYWxsLT5mdW5jKTsKLQlpZiAoIXJldCkKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICIlcHMoKSB7XG4iLCAodm9pZCAqKWNhbGwtPmZ1bmMpOworCisJaWYgKHRyYWNlX3NlcV9oYXNfb3ZlcmZsb3dlZChzKSkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCiAJLyoKQEAgLTk1Myw2MiArODQ0LDQzIEBACiAJcmV0dXJuIFRSQUNFX1RZUEVfTk9fQ09OU1VNRTsKIH0KIAotc3RhdGljIGVudW0gcHJpbnRfbGluZV90CitzdGF0aWMgdm9pZAogcHJpbnRfZ3JhcGhfcHJvbG9ndWUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzLAogCQkgICAgIGludCB0eXBlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50ID0gaXRlci0+ZW50OwogCWludCBjcHUgPSBpdGVyLT5jcHU7Ci0JaW50IHJldDsKIAogCS8qIFBpZCAqLwotCWlmICh2ZXJpZl9waWQocywgZW50LT5waWQsIGNwdSwgZGF0YSkgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl2ZXJpZl9waWQocywgZW50LT5waWQsIGNwdSwgZGF0YSk7CiAKLQlpZiAodHlwZSkgeworCWlmICh0eXBlKQogCQkvKiBJbnRlcnJ1cHQgKi8KLQkJcmV0ID0gcHJpbnRfZ3JhcGhfaXJxKGl0ZXIsIGFkZHIsIHR5cGUsIGNwdSwgZW50LT5waWQsIGZsYWdzKTsKLQkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9CisJCXByaW50X2dyYXBoX2lycShpdGVyLCBhZGRyLCB0eXBlLCBjcHUsIGVudC0+cGlkLCBmbGFncyk7CiAKIAlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQ09OVEVYVF9JTkZPKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCS8qIEFic29sdXRlIHRpbWUgKi8KLQlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9BQlNfVElNRSkgewotCQlyZXQgPSBwcmludF9ncmFwaF9hYnNfdGltZShpdGVyLT50cywgcyk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KKwlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9BQlNfVElNRSkKKwkJcHJpbnRfZ3JhcGhfYWJzX3RpbWUoaXRlci0+dHMsIHMpOwogCiAJLyogQ3B1ICovCi0JaWYgKGZsYWdzICYgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVKSB7Ci0JCXJldCA9IHByaW50X2dyYXBoX2NwdShzLCBjcHUpOwotCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KKwlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpCisJCXByaW50X2dyYXBoX2NwdShzLCBjcHUpOwogCiAJLyogUHJvYyAqLwogCWlmIChmbGFncyAmIFRSQUNFX0dSQVBIX1BSSU5UX1BST0MpIHsKLQkJcmV0ID0gcHJpbnRfZ3JhcGhfcHJvYyhzLCBlbnQtPnBpZCk7Ci0JCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIiB8ICIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJcHJpbnRfZ3JhcGhfcHJvYyhzLCBlbnQtPnBpZCk7CisJCXRyYWNlX3NlcV9wdXRzKHMsICIgfCAiKTsKIAl9CiAKIAkvKiBMYXRlbmN5IGZvcm1hdCAqLwotCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfTEFURU5DWV9GTVQpIHsKLQkJcmV0ID0gcHJpbnRfZ3JhcGhfbGF0X2ZtdChzLCBlbnQpOwotCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KKwlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0xBVEVOQ1lfRk1UKQorCQlwcmludF9ncmFwaF9sYXRfZm10KHMsIGVudCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm47CiB9CiAKIC8qCkBAIC0xMTI2LDggKzk5OCw3IEBACiAJaWYgKGNoZWNrX2lycV9lbnRyeShpdGVyLCBmbGFncywgY2FsbC0+ZnVuYywgY2FsbC0+ZGVwdGgpKQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogCi0JaWYgKHByaW50X2dyYXBoX3Byb2xvZ3VlKGl0ZXIsIHMsIFRSQUNFX0dSQVBIX0VOVCwgY2FsbC0+ZnVuYywgZmxhZ3MpKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJcHJpbnRfZ3JhcGhfcHJvbG9ndWUoaXRlciwgcywgVFJBQ0VfR1JBUEhfRU5ULCBjYWxsLT5mdW5jLCBmbGFncyk7CiAKIAlsZWFmX3JldCA9IGdldF9yZXR1cm5fZm9yX2xlYWYoaXRlciwgZmllbGQpOwogCWlmIChsZWFmX3JldCkKQEAgLTExNjAsNyArMTAzMSw2IEBACiAJcGlkX3QgcGlkID0gZW50LT5waWQ7CiAJaW50IGNwdSA9IGl0ZXItPmNwdTsKIAlpbnQgZnVuY19tYXRjaCA9IDE7Ci0JaW50IHJldDsKIAlpbnQgaTsKIAogCWlmIChjaGVja19pcnFfcmV0dXJuKGl0ZXIsIGZsYWdzLCB0cmFjZS0+ZGVwdGgpKQpAQCAtMTE4NiwyMCArMTA1NiwxNCBAQAogCQl9CiAJfQogCi0JaWYgKHByaW50X2dyYXBoX3Byb2xvZ3VlKGl0ZXIsIHMsIDAsIDAsIGZsYWdzKSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXByaW50X2dyYXBoX3Byb2xvZ3VlKGl0ZXIsIHMsIDAsIDAsIGZsYWdzKTsKIAogCS8qIE92ZXJoZWFkIGFuZCBkdXJhdGlvbiAqLwotCXJldCA9IHByaW50X2dyYXBoX2R1cmF0aW9uKGR1cmF0aW9uLCBzLCBmbGFncyk7Ci0JaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXByaW50X2dyYXBoX2R1cmF0aW9uKGR1cmF0aW9uLCBzLCBmbGFncyk7CiAKIAkvKiBDbG9zaW5nIGJyYWNlICovCi0JZm9yIChpID0gMDsgaSA8IHRyYWNlLT5kZXB0aCAqIFRSQUNFX0dSQVBIX0lOREVOVDsgaSsrKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wdXRjKHMsICcgJyk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgdHJhY2UtPmRlcHRoICogVFJBQ0VfR1JBUEhfSU5ERU5UOyBpKyspCisJCXRyYWNlX3NlcV9wdXRjKHMsICcgJyk7CiAKIAkvKgogCSAqIElmIHRoZSByZXR1cm4gZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIGVudHJ5LApAQCAtMTIwOCwzMCArMTA3MiwyMCBAQAogCSAqIGJlbG9uZ3MgdG8sIHdyaXRlIG91dCB0aGUgZnVuY3Rpb24gbmFtZS4gQWx3YXlzIGRvCiAJICogdGhhdCBpZiB0aGUgZnVuY2dyYXBoLXRhaWwgb3B0aW9uIGlzIGVuYWJsZWQuCiAJICovCi0JaWYgKGZ1bmNfbWF0Y2ggJiYgIShmbGFncyAmIFRSQUNFX0dSQVBIX1BSSU5UX1RBSUwpKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICJ9XG4iKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAifSAvKiAlcHMgKi9cbiIsICh2b2lkICopdHJhY2UtPmZ1bmMpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9CisJaWYgKGZ1bmNfbWF0Y2ggJiYgIShmbGFncyAmIFRSQUNFX0dSQVBIX1BSSU5UX1RBSUwpKQorCQl0cmFjZV9zZXFfcHV0cyhzLCAifVxuIik7CisJZWxzZQorCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJ9IC8qICVwcyAqL1xuIiwgKHZvaWQgKil0cmFjZS0+ZnVuYyk7CiAKIAkvKiBPdmVycnVuICovCi0JaWYgKGZsYWdzICYgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUlJVTikgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgKE92ZXJydW5zOiAlbHUpXG4iLAotCQkJCQl0cmFjZS0+b3ZlcnJ1bik7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KKwlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSUlVOKQorCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgKE92ZXJydW5zOiAlbHUpXG4iLAorCQkJCSB0cmFjZS0+b3ZlcnJ1bik7CiAKLQlyZXQgPSBwcmludF9ncmFwaF9pcnEoaXRlciwgdHJhY2UtPmZ1bmMsIFRSQUNFX0dSQVBIX1JFVCwKLQkJCSAgICAgIGNwdSwgcGlkLCBmbGFncyk7Ci0JaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXByaW50X2dyYXBoX2lycShpdGVyLCB0cmFjZS0+ZnVuYywgVFJBQ0VfR1JBUEhfUkVULAorCQkJY3B1LCBwaWQsIGZsYWdzKTsKIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdApAQCAtMTI0OCwyNiArMTEwMiwxOCBAQAogCWlmIChkYXRhKQogCQlkZXB0aCA9IHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBpdGVyLT5jcHUpLT5kZXB0aDsKIAotCWlmIChwcmludF9ncmFwaF9wcm9sb2d1ZShpdGVyLCBzLCAwLCAwLCBmbGFncykpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwlwcmludF9ncmFwaF9wcm9sb2d1ZShpdGVyLCBzLCAwLCAwLCBmbGFncyk7CiAKIAkvKiBObyB0aW1lICovCi0JcmV0ID0gcHJpbnRfZ3JhcGhfZHVyYXRpb24oMCwgcywgZmxhZ3MgfCBGTEFHU19GSUxMX0ZVTEwpOwotCWlmIChyZXQgIT0gVFJBQ0VfVFlQRV9IQU5ETEVEKQotCQlyZXR1cm4gcmV0OworCXByaW50X2dyYXBoX2R1cmF0aW9uKDAsIHMsIGZsYWdzIHwgRkxBR1NfRklMTF9GVUxMKTsKIAogCS8qIEluZGVudGF0aW9uICovCiAJaWYgKGRlcHRoID4gMCkKLQkJZm9yIChpID0gMDsgaSA8IChkZXB0aCArIDEpICogVFJBQ0VfR1JBUEhfSU5ERU5UOyBpKyspIHsKLQkJCXJldCA9IHRyYWNlX3NlcV9wdXRjKHMsICcgJyk7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCX0KKwkJZm9yIChpID0gMDsgaSA8IChkZXB0aCArIDEpICogVFJBQ0VfR1JBUEhfSU5ERU5UOyBpKyspCisJCQl0cmFjZV9zZXFfcHV0YyhzLCAnICcpOwogCiAJLyogVGhlIGNvbW1lbnQgKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiLyogIik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl0cmFjZV9zZXFfcHV0cyhzLCAiLyogIik7CiAKIAlzd2l0Y2ggKGl0ZXItPmVudC0+dHlwZSkgewogCWNhc2UgVFJBQ0VfQlBSSU5UOgpAQCAtMTI5MCwxNyArMTEzNiwxOCBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKKwlpZiAodHJhY2Vfc2VxX2hhc19vdmVyZmxvd2VkKHMpKQorCQlnb3RvIG91dDsKKwogCS8qIFN0cmlwIGVuZGluZyBuZXdsaW5lICovCi0JaWYgKHMtPmJ1ZmZlcltzLT5sZW4gLSAxXSA9PSAnXG4nKSB7Ci0JCXMtPmJ1ZmZlcltzLT5sZW4gLSAxXSA9ICdcMCc7Ci0JCXMtPmxlbi0tOworCWlmIChzLT5idWZmZXJbcy0+c2VxLmxlbiAtIDFdID09ICdcbicpIHsKKwkJcy0+YnVmZmVyW3MtPnNlcS5sZW4gLSAxXSA9ICdcMCc7CisJCXMtPnNlcS5sZW4tLTsKIAl9CiAKLQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiICovXG4iKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwl0cmFjZV9zZXFfcHV0cyhzLCAiICovXG4iKTsKKyBvdXQ6CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIApAQCAtMTQwNywzMiArMTI1NCwzMiBAQAogCQlwcmludF9sYXRfaGVhZGVyKHMsIGZsYWdzKTsKIAogCS8qIDFzdCBsaW5lICovCi0Jc2VxX3ByaW50ZihzLCAiIyIpOworCXNlcV9wdXRjKHMsICcjJyk7CiAJaWYgKGZsYWdzICYgVFJBQ0VfR1JBUEhfUFJJTlRfQUJTX1RJTUUpCi0JCXNlcV9wcmludGYocywgIiAgICAgVElNRSAgICAgICAiKTsKKwkJc2VxX3B1dHMocywgIiAgICAgVElNRSAgICAgICAiKTsKIAlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpCi0JCXNlcV9wcmludGYocywgIiBDUFUiKTsKKwkJc2VxX3B1dHMocywgIiBDUFUiKTsKIAlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9QUk9DKQotCQlzZXFfcHJpbnRmKHMsICIgIFRBU0svUElEICAgICAgICIpOworCQlzZXFfcHV0cyhzLCAiICBUQVNLL1BJRCAgICAgICAiKTsKIAlpZiAobGF0KQotCQlzZXFfcHJpbnRmKHMsICJ8fHx8Iik7CisJCXNlcV9wdXRzKHMsICJ8fHx8Iik7CiAJaWYgKGZsYWdzICYgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pCi0JCXNlcV9wcmludGYocywgIiAgRFVSQVRJT04gICAiKTsKLQlzZXFfcHJpbnRmKHMsICIgICAgICAgICAgICAgICBGVU5DVElPTiBDQUxMU1xuIik7CisJCXNlcV9wdXRzKHMsICIgIERVUkFUSU9OICAgIik7CisJc2VxX3B1dHMocywgIiAgICAgICAgICAgICAgIEZVTkNUSU9OIENBTExTXG4iKTsKIAogCS8qIDJuZCBsaW5lICovCi0Jc2VxX3ByaW50ZihzLCAiIyIpOworCXNlcV9wdXRjKHMsICcjJyk7CiAJaWYgKGZsYWdzICYgVFJBQ0VfR1JBUEhfUFJJTlRfQUJTX1RJTUUpCi0JCXNlcV9wcmludGYocywgIiAgICAgIHwgICAgICAgICAiKTsKKwkJc2VxX3B1dHMocywgIiAgICAgIHwgICAgICAgICAiKTsKIAlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpCi0JCXNlcV9wcmludGYocywgIiB8ICAiKTsKKwkJc2VxX3B1dHMocywgIiB8ICAiKTsKIAlpZiAoZmxhZ3MgJiBUUkFDRV9HUkFQSF9QUklOVF9QUk9DKQotCQlzZXFfcHJpbnRmKHMsICIgICB8ICAgIHwgICAgICAgICIpOworCQlzZXFfcHV0cyhzLCAiICAgfCAgICB8ICAgICAgICAiKTsKIAlpZiAobGF0KQotCQlzZXFfcHJpbnRmKHMsICJ8fHx8Iik7CisJCXNlcV9wdXRzKHMsICJ8fHx8Iik7CiAJaWYgKGZsYWdzICYgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pCi0JCXNlcV9wcmludGYocywgIiAgIHwgICB8ICAgICAgIik7Ci0Jc2VxX3ByaW50ZihzLCAiICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfFxuIik7CisJCXNlcV9wdXRzKHMsICIgICB8ICAgfCAgICAgICIpOworCXNlcV9wdXRzKHMsICIgICAgICAgICAgICAgICB8ICAgfCAgIHwgICB8XG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfZ3JhcGhfaGVhZGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa2RiLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa2RiLmMKaW5kZXggYmQ5MGUxYi4uYjBiMWM0NCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2tkYi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rZGIuYwpAQCAtMjAsMTAgKzIwLDEyIEBACiB7CiAJLyogdXNlIHN0YXRpYyBiZWNhdXNlIGl0ZXIgY2FuIGJlIGEgYml0IGJpZyBmb3IgdGhlIHN0YWNrICovCiAJc3RhdGljIHN0cnVjdCB0cmFjZV9pdGVyYXRvciBpdGVyOworCXN0YXRpYyBzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqYnVmZmVyX2l0ZXJbQ09ORklHX05SX0NQVVNdOwogCXVuc2lnbmVkIGludCBvbGRfdXNlcm9iajsKIAlpbnQgY250ID0gMCwgY3B1OwogCiAJdHJhY2VfaW5pdF9nbG9iYWxfaXRlcigmaXRlcik7CisJaXRlci5idWZmZXJfaXRlciA9IGJ1ZmZlcl9pdGVyOwogCiAJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CiAJCWF0b21pY19pbmMoJnBlcl9jcHVfcHRyKGl0ZXIudHJhY2VfYnVmZmVyLT5kYXRhLCBjcHUpLT5kaXNhYmxlZCk7CkBAIC01NywxOSArNTksMTkgQEAKIAkJcmluZ19idWZmZXJfcmVhZF9zdGFydChpdGVyLmJ1ZmZlcl9pdGVyW2NwdV9maWxlXSk7CiAJCXRyYWNpbmdfaXRlcl9yZXNldCgmaXRlciwgY3B1X2ZpbGUpOwogCX0KLQlpZiAoIXRyYWNlX2VtcHR5KCZpdGVyKSkKLQkJdHJhY2VfZmluZF9uZXh0X2VudHJ5X2luYygmaXRlcik7Ci0Jd2hpbGUgKCF0cmFjZV9lbXB0eSgmaXRlcikpIHsKKworCXdoaWxlICh0cmFjZV9maW5kX25leHRfZW50cnlfaW5jKCZpdGVyKSkgewogCQlpZiAoIWNudCkKIAkJCWtkYl9wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJCWNudCsrOwogCi0JCWlmICh0cmFjZV9maW5kX25leHRfZW50cnlfaW5jKCZpdGVyKSAhPSBOVUxMICYmICFza2lwX2xpbmVzKQorCQlpZiAoIXNraXBfbGluZXMpIHsKIAkJCXByaW50X3RyYWNlX2xpbmUoJml0ZXIpOwotCQlpZiAoIXNraXBfbGluZXMpCiAJCQl0cmFjZV9wcmludGtfc2VxKCZpdGVyLnNlcSk7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCXNraXBfbGluZXMtLTsKKwkJfQorCiAJCWlmIChLREJfRkxBRyhDTURfSU5URVJSVVBUKSkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTg2LDkgKzg4LDEyIEBACiAJCWF0b21pY19kZWMoJnBlcl9jcHVfcHRyKGl0ZXIudHJhY2VfYnVmZmVyLT5kYXRhLCBjcHUpLT5kaXNhYmxlZCk7CiAJfQogCi0JZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KQotCQlpZiAoaXRlci5idWZmZXJfaXRlcltjcHVdKQorCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgeworCQlpZiAoaXRlci5idWZmZXJfaXRlcltjcHVdKSB7CiAJCQlyaW5nX2J1ZmZlcl9yZWFkX2ZpbmlzaChpdGVyLmJ1ZmZlcl9pdGVyW2NwdV0pOworCQkJaXRlci5idWZmZXJfaXRlcltjcHVdID0gTlVMTDsKKwkJfQorCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwppbmRleCAyODJmNmU0Li41ZWRiNTE4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCkBAIC04MjYsNyArODI2LDcgQEAKIAlzdHJ1Y3QgdHJhY2Vfa3Byb2JlICp0ayA9IHY7CiAJaW50IGk7CiAKLQlzZXFfcHJpbnRmKG0sICIlYyIsIHRyYWNlX2twcm9iZV9pc19yZXR1cm4odGspID8gJ3InIDogJ3AnKTsKKwlzZXFfcHV0YyhtLCB0cmFjZV9rcHJvYmVfaXNfcmV0dXJuKHRrKSA/ICdyJyA6ICdwJyk7CiAJc2VxX3ByaW50ZihtLCAiOiVzLyVzIiwgdGstPnRwLmNhbGwuY2xhc3MtPnN5c3RlbSwKIAkJCWZ0cmFjZV9ldmVudF9uYW1lKCZ0ay0+dHAuY2FsbCkpOwogCkBAIC04NDAsNyArODQwLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCB0ay0+dHAubnJfYXJnczsgaSsrKQogCQlzZXFfcHJpbnRmKG0sICIgJXM9JXMiLCB0ay0+dHAuYXJnc1tpXS5uYW1lLCB0ay0+dHAuYXJnc1tpXS5jb21tKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDI0LDI3ICsxMDI0LDIyIEBACiAJZmllbGQgPSAoc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeV9oZWFkICopaXRlci0+ZW50OwogCXRwID0gY29udGFpbmVyX29mKGV2ZW50LCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIGNhbGwuZXZlbnQpOwogCi0JaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogKCIsIGZ0cmFjZV9ldmVudF9uYW1lKCZ0cC0+Y2FsbCkpKQotCQlnb3RvIHBhcnRpYWw7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6ICgiLCBmdHJhY2VfZXZlbnRfbmFtZSgmdHAtPmNhbGwpKTsKIAogCWlmICghc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIGZsYWdzIHwgVFJBQ0VfSVRFUl9TWU1fT0ZGU0VUKSkKLQkJZ290byBwYXJ0aWFsOworCQlnb3RvIG91dDsKIAotCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIikiKSkKLQkJZ290byBwYXJ0aWFsOworCXRyYWNlX3NlcV9wdXRjKHMsICcpJyk7CiAKIAlkYXRhID0gKHU4ICopJmZpZWxkWzFdOwogCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQogCQlpZiAoIXRwLT5hcmdzW2ldLnR5cGUtPnByaW50KHMsIHRwLT5hcmdzW2ldLm5hbWUsCiAJCQkJCSAgICAgZGF0YSArIHRwLT5hcmdzW2ldLm9mZnNldCwgZmllbGQpKQotCQkJZ290byBwYXJ0aWFsOworCQkJZ290byBvdXQ7CiAKLQlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpKQotCQlnb3RvIHBhcnRpYWw7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotcGFydGlhbDoKLQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7Cisgb3V0OgorCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKHMpOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKQEAgLTEwNjAsMzMgKzEwNTUsMjggQEAKIAlmaWVsZCA9IChzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5X2hlYWQgKilpdGVyLT5lbnQ7CiAJdHAgPSBjb250YWluZXJfb2YoZXZlbnQsIHN0cnVjdCB0cmFjZV9wcm9iZSwgY2FsbC5ldmVudCk7CiAKLQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiVzOiAoIiwgZnRyYWNlX2V2ZW50X25hbWUoJnRwLT5jYWxsKSkpCi0JCWdvdG8gcGFydGlhbDsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogKCIsIGZ0cmFjZV9ldmVudF9uYW1lKCZ0cC0+Y2FsbCkpOwogCiAJaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5yZXRfaXAsIGZsYWdzIHwgVFJBQ0VfSVRFUl9TWU1fT0ZGU0VUKSkKLQkJZ290byBwYXJ0aWFsOworCQlnb3RvIG91dDsKIAotCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIiA8LSAiKSkKLQkJZ290byBwYXJ0aWFsOworCXRyYWNlX3NlcV9wdXRzKHMsICIgPC0gIik7CiAKIAlpZiAoIXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmZ1bmMsIGZsYWdzICYgflRSQUNFX0lURVJfU1lNX09GRlNFVCkpCi0JCWdvdG8gcGFydGlhbDsKKwkJZ290byBvdXQ7CiAKLQlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICIpIikpCi0JCWdvdG8gcGFydGlhbDsKKwl0cmFjZV9zZXFfcHV0YyhzLCAnKScpOwogCiAJZGF0YSA9ICh1OCAqKSZmaWVsZFsxXTsKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKIAkJaWYgKCF0cC0+YXJnc1tpXS50eXBlLT5wcmludChzLCB0cC0+YXJnc1tpXS5uYW1lLAogCQkJCQkgICAgIGRhdGEgKyB0cC0+YXJnc1tpXS5vZmZzZXQsIGZpZWxkKSkKLQkJCWdvdG8gcGFydGlhbDsKKwkJCWdvdG8gb3V0OwogCi0JaWYgKCF0cmFjZV9zZXFfcHV0cyhzLCAiXG4iKSkKLQkJZ290byBwYXJ0aWFsOworCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOwogCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLXBhcnRpYWw6Ci0JcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworIG91dDoKKwlyZXR1cm4gdHJhY2VfaGFuZGxlX3JldHVybihzKTsKIH0KIAogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMKaW5kZXggMGFiZDliOC4uN2E5YmE2MiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYwpAQCAtNTksMTcgKzU5LDE1IEBACiAJbW1pb19yZXNldF9kYXRhKHRyKTsKIH0KIAotc3RhdGljIGludCBtbWlvX3ByaW50X3BjaWRldihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgbW1pb19wcmludF9wY2lkZXYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlpbnQgcmV0ID0gMDsKIAlpbnQgaTsKIAlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGVuZDsKIAljb25zdCBzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2ID0gcGNpX2Rldl9kcml2ZXIoZGV2KTsKIAotCS8qIFhYWDogaW5jb21wbGV0ZSBjaGVja3MgZm9yIHRyYWNlX3NlcV9wcmludGYoKSByZXR1cm4gdmFsdWUgKi8KLQlyZXQgKz0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiUENJREVWICUwMnglMDJ4ICUwNHglMDR4ICV4IiwKLQkJCQlkZXYtPmJ1cy0+bnVtYmVyLCBkZXYtPmRldmZuLAotCQkJCWRldi0+dmVuZG9yLCBkZXYtPmRldmljZSwgZGV2LT5pcnEpOworCXRyYWNlX3NlcV9wcmludGYocywgIlBDSURFViAlMDJ4JTAyeCAlMDR4JTA0eCAleCIsCisJCQkgZGV2LT5idXMtPm51bWJlciwgZGV2LT5kZXZmbiwKKwkJCSBkZXYtPnZlbmRvciwgZGV2LT5kZXZpY2UsIGRldi0+aXJxKTsKIAkvKgogCSAqIFhYWDogaXMgcGNpX3Jlc291cmNlX3RvX3VzZXIoKSBhcHByb3ByaWF0ZSwgc2luY2Ugd2UgYXJlCiAJICogc3VwcG9zZWQgdG8gaW50ZXJwcmV0IHRoZSBfX2lvcmVtYXAoKSBwaHlzX2FkZHIgYXJndW1lbnQgYmFzZWQgb24KQEAgLTc3LDIxICs3NSwyMCBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKIAkJcGNpX3Jlc291cmNlX3RvX3VzZXIoZGV2LCBpLCAmZGV2LT5yZXNvdXJjZVtpXSwgJnN0YXJ0LCAmZW5kKTsKLQkJcmV0ICs9IHRyYWNlX3NlcV9wcmludGYocywgIiAlbGx4IiwKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiICVsbHgiLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykoc3RhcnQgfAogCQkJKGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBQQ0lfUkVHSU9OX0ZMQUdfTUFTSykpKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewogCQlwY2lfcmVzb3VyY2VfdG9fdXNlcihkZXYsIGksICZkZXYtPnJlc291cmNlW2ldLCAmc3RhcnQsICZlbmQpOwotCQlyZXQgKz0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICVsbHgiLAorCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJWxseCIsCiAJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0IDwgZGV2LT5yZXNvdXJjZVtpXS5lbmQgPwogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykoZW5kIC0gc3RhcnQpICsgMSA6IDApOwogCX0KIAlpZiAoZHJ2KQotCQlyZXQgKz0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICVzXG4iLCBkcnYtPm5hbWUpOworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJXNcbiIsIGRydi0+bmFtZSk7CiAJZWxzZQotCQlyZXQgKz0gdHJhY2Vfc2VxX3B1dHMocywgIiBcbiIpOwotCXJldHVybiByZXQ7CisJCXRyYWNlX3NlcV9wdXRzKHMsICIgXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzdHJveV9oZWFkZXJfaXRlcihzdHJ1Y3QgaGVhZGVyX2l0ZXIgKmhpdGVyKQpAQCAtMTc5LDI4ICsxNzYsMjcgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgdAk9IG5zMnVzZWNzKGl0ZXItPnRzKTsKIAl1bnNpZ25lZCBsb25nIHVzZWNfcmVtCT0gZG9fZGl2KHQsIFVTRUNfUEVSX1NFQyk7CiAJdW5zaWduZWQgc2VjcwkJPSAodW5zaWduZWQgbG9uZyl0OwotCWludCByZXQgPSAxOwogCiAJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKIAlydyA9ICZmaWVsZC0+cnc7CiAKIAlzd2l0Y2ggKHJ3LT5vcGNvZGUpIHsKIAljYXNlIE1NSU9fUkVBRDoKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAorCQl0cmFjZV9zZXFfcHJpbnRmKHMsCiAJCQkiUiAlZCAldS4lMDZsdSAlZCAweCVsbHggMHglbHggMHglbHggJWRcbiIsCiAJCQlydy0+d2lkdGgsIHNlY3MsIHVzZWNfcmVtLCBydy0+bWFwX2lkLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylydy0+cGh5cywKIAkJCXJ3LT52YWx1ZSwgcnctPnBjLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBNTUlPX1dSSVRFOgotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCisJCXRyYWNlX3NlcV9wcmludGYocywKIAkJCSJXICVkICV1LiUwNmx1ICVkIDB4JWxseCAweCVseCAweCVseCAlZFxuIiwKIAkJCXJ3LT53aWR0aCwgc2VjcywgdXNlY19yZW0sIHJ3LT5tYXBfaWQsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXJ3LT5waHlzLAogCQkJcnctPnZhbHVlLCBydy0+cGMsIDApOwogCQlicmVhazsKIAljYXNlIE1NSU9fVU5LTk9XTl9PUDoKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAorCQl0cmFjZV9zZXFfcHJpbnRmKHMsCiAJCQkiVU5LTk9XTiAldS4lMDZsdSAlZCAweCVsbHggJTAybHgsJTAybHgsIgogCQkJIiUwMmx4IDB4JWx4ICVkXG4iLAogCQkJc2VjcywgdXNlY19yZW0sIHJ3LT5tYXBfaWQsCkBAIC0yMDksMTIgKzIwNSwxMSBAQAogCQkJKHJ3LT52YWx1ZSA+PiAwKSAmIDB4ZmYsIHJ3LT5wYywgMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICJydyB3aGF0P1xuIik7CisJCXRyYWNlX3NlcV9wdXRzKHMsICJydyB3aGF0P1xuIik7CiAJCWJyZWFrOwogCX0KLQlpZiAocmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKHMpOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgbW1pb19wcmludF9tYXAoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQpAQCAtMjI2LDMxICsyMjEsMjkgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgdAk9IG5zMnVzZWNzKGl0ZXItPnRzKTsKIAl1bnNpZ25lZCBsb25nIHVzZWNfcmVtCT0gZG9fZGl2KHQsIFVTRUNfUEVSX1NFQyk7CiAJdW5zaWduZWQgc2VjcwkJPSAodW5zaWduZWQgbG9uZyl0OwotCWludCByZXQ7CiAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwogCW0gPSAmZmllbGQtPm1hcDsKIAogCXN3aXRjaCAobS0+b3Bjb2RlKSB7CiAJY2FzZSBNTUlPX1BST0JFOgotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCisJCXRyYWNlX3NlcV9wcmludGYocywKIAkJCSJNQVAgJXUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4IDB4JWx4ICVkXG4iLAogCQkJc2VjcywgdXNlY19yZW0sIG0tPm1hcF9pZCwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbS0+cGh5cywgbS0+dmlydCwgbS0+bGVuLAogCQkJMFVMLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBNTUlPX1VOUFJPQkU6Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLAogCQkJIlVOTUFQICV1LiUwNmx1ICVkIDB4JWx4ICVkXG4iLAogCQkJc2VjcywgdXNlY19yZW0sIG0tPm1hcF9pZCwgMFVMLCAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIm1hcCB3aGF0P1xuIik7CisJCXRyYWNlX3NlcV9wdXRzKHMsICJtYXAgd2hhdD9cbiIpOwogCQlicmVhazsKIAl9Ci0JaWYgKHJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gdHJhY2VfaGFuZGxlX3JldHVybihzKTsKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IG1taW9fcHJpbnRfbWFyayhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCkBAIC0yNjIsMTQgKzI1NSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyB0CT0gbnMydXNlY3MoaXRlci0+dHMpOwogCXVuc2lnbmVkIGxvbmcgdXNlY19yZW0JPSBkb19kaXYodCwgVVNFQ19QRVJfU0VDKTsKIAl1bnNpZ25lZCBzZWNzCQk9ICh1bnNpZ25lZCBsb25nKXQ7Ci0JaW50IHJldDsKIAogCS8qIFRoZSB0cmFpbGluZyBuZXdsaW5lIG11c3QgYmUgaW4gdGhlIG1lc3NhZ2UuICovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiTUFSSyAldS4lMDZsdSAlcyIsIHNlY3MsIHVzZWNfcmVtLCBtc2cpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiTUFSSyAldS4lMDZsdSAlcyIsIHNlY3MsIHVzZWNfcmVtLCBtc2cpOwogCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwlyZXR1cm4gdHJhY2VfaGFuZGxlX3JldHVybihzKTsKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IG1taW9fcHJpbnRfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKaW5kZXggYzY5NzdkNS4uYjc3YjlhNiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwpAQCAtMjUsMTUgKzI1LDEyIEBACiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKIAlzdHJ1Y3QgYnB1dHNfZW50cnkgKmZpZWxkOwotCWludCByZXQ7CiAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwogCi0JcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgZmllbGQtPnN0cik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl0cmFjZV9zZXFfcHV0cyhzLCBmaWVsZC0+c3RyKTsKIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3ByaW50X2JwcmludGtfbXNnX29ubHkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQpAQCAtNDEsMTUgKzM4LDEyIEBACiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKIAlzdHJ1Y3QgYnByaW50X2VudHJ5ICpmaWVsZDsKLQlpbnQgcmV0OwogCiAJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKIAotCXJldCA9IHRyYWNlX3NlcV9icHJpbnRmKHMsIGZpZWxkLT5mbXQsIGZpZWxkLT5idWYpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJdHJhY2Vfc2VxX2JwcmludGYocywgZmllbGQtPmZtdCwgZmllbGQtPmJ1Zik7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKHMpOwogfQogCiBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9wcmludF9wcmludGtfbXNnX29ubHkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQpAQCAtNTcsMTUgKzUxLDEyIEBACiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKIAlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOwotCWludCByZXQ7CiAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwogCi0JcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgZmllbGQtPmJ1Zik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl0cmFjZV9zZXFfcHV0cyhzLCBmaWVsZC0+YnVmKTsKIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIGNvbnN0IGNoYXIgKgpAQCAtMTI0LDcgKzExNSw3IEBACiAKIAlpZiAocmV0ID09IChjb25zdCBjaGFyICopKHRyYWNlX3NlcV9idWZmZXJfcHRyKHApKSkKIAkJdHJhY2Vfc2VxX3ByaW50ZihwLCAiMHglbHgiLCB2YWwpOwotCQkKKwogCXRyYWNlX3NlcV9wdXRjKHAsIDApOwogCiAJcmV0dXJuIHJldDsKQEAgLTE5Myw3ICsxODQsNiBAQAogCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwogCXN0cnVjdCB0cmFjZV9zZXEgKnAgPSAmaXRlci0+dG1wX3NlcTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwotCWludCByZXQ7CiAKIAlldmVudCA9IGNvbnRhaW5lcl9vZih0cmFjZV9ldmVudCwgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsLCBldmVudCk7CiAJZW50cnkgPSBpdGVyLT5lbnQ7CkBAIC0yMDQsMTEgKzE5NCw5IEBACiAJfQogCiAJdHJhY2Vfc2VxX2luaXQocCk7Ci0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6ICIsIGZ0cmFjZV9ldmVudF9uYW1lKGV2ZW50KSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogIiwgZnRyYWNlX2V2ZW50X25hbWUoZXZlbnQpKTsKIAotCXJldHVybiAwOworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKHMpOwogfQogRVhQT1JUX1NZTUJPTChmdHJhY2VfcmF3X291dHB1dF9wcmVwKTsKIApAQCAtMjE2LDE4ICsyMDQsMTEgQEAKIAkJCSAgICAgY2hhciAqZm10LCB2YV9saXN0IGFwKQogewogCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwotCWludCByZXQ7CiAKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogIiwgbmFtZSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogIiwgbmFtZSk7CisJdHJhY2Vfc2VxX3ZwcmludGYocywgZm10LCBhcCk7CiAKLQlyZXQgPSB0cmFjZV9zZXFfdnByaW50ZihzLCBmbXQsIGFwKTsKLQotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKHMpOwogfQogCiBpbnQgZnRyYWNlX291dHB1dF9jYWxsKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY2hhciAqbmFtZSwgY2hhciAqZm10LCAuLi4pCkBAIC0yNjAsNyArMjQxLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfS1JFVFBST0JFUyAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogc2VxX3ByaW50X3N5bV9zaG9ydChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMKQEAgLTI3MSwxMiArMjUyLDExIEBACiAKIAluYW1lID0ga3JldHByb2JlZChzdHIpOwogCi0JcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgZm10LCBuYW1lKTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsIGZtdCwgbmFtZSk7CiAjZW5kaWYKLQlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHNlcV9wcmludF9zeW1fb2Zmc2V0KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwKIAkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0yODcsOSArMjY3LDggQEAKIAlzcHJpbnRfc3ltYm9sKHN0ciwgYWRkcmVzcyk7CiAJbmFtZSA9IGtyZXRwcm9iZWQoc3RyKTsKIAotCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsIGZtdCwgbmFtZSk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCBmbXQsIG5hbWUpOwogI2VuZGlmCi0JcmV0dXJuIDE7CiB9CiAKICNpZm5kZWYgQ09ORklHXzY0QklUCkBAIC0zMjAsMTQgKzI5OSwxNCBAQAogCQlpZiAoZmlsZSkgewogCQkJcmV0ID0gdHJhY2Vfc2VxX3BhdGgocywgJmZpbGUtPmZfcGF0aCk7CiAJCQlpZiAocmV0KQotCQkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlsrMHglbHhdIiwKLQkJCQkJCSAgICAgICBpcCAtIHZtc3RhcnQpOworCQkJCXRyYWNlX3NlcV9wcmludGYocywgIlsrMHglbHhdIiwKKwkJCQkJCSBpcCAtIHZtc3RhcnQpOwogCQl9CiAJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJfQogCWlmIChyZXQgJiYgKChzeW1fZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9BRERSKSB8fCAhZmlsZSkpCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiA8IiBJUF9GTVQgIj4iLCBpcCk7Ci0JcmV0dXJuIHJldDsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiIDwiIElQX0ZNVCAiPiIsIGlwKTsKKwlyZXR1cm4gIXRyYWNlX3NlcV9oYXNfb3ZlcmZsb3dlZChzKTsKIH0KIAogaW50CkBAIC0zMzUsNyArMzE0LDYgQEAKIAkJICAgICAgdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOwotCWludCByZXQgPSAxOwogCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fVVNFUk9CSikgewpAQCAtMzU0LDQ4ICszMzIsNDUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX1NUQUNLX0VOVFJJRVM7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIGlwID0gZW50cnktPmNhbGxlcltpXTsKIAotCQlpZiAoaXAgPT0gVUxPTkdfTUFYIHx8ICFyZXQpCisJCWlmIChpcCA9PSBVTE9OR19NQVggfHwgdHJhY2Vfc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQkJYnJlYWs7Ci0JCWlmIChyZXQpCi0JCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiID0+ICIpOworCisJCXRyYWNlX3NlcV9wdXRzKHMsICIgPT4gIik7CisKIAkJaWYgKCFpcCkgewotCQkJaWYgKHJldCkKLQkJCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiPz8iKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CisJCQl0cmFjZV9zZXFfcHV0cyhzLCAiPz8iKTsKKwkJCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFyZXQpCi0JCQlicmVhazsKLQkJaWYgKHJldCkKLQkJCXJldCA9IHNlcV9wcmludF91c2VyX2lwKHMsIG1tLCBpcCwgc3ltX2ZsYWdzKTsKLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CisKKwkJc2VxX3ByaW50X3VzZXJfaXAocywgbW0sIGlwLCBzeW1fZmxhZ3MpOworCQl0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKIAl9CiAKIAlpZiAobW0pCiAJCW1tcHV0KG1tKTsKLQlyZXR1cm4gcmV0OworCisJcmV0dXJuICF0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQocyk7CiB9CiAKIGludAogc2VxX3ByaW50X2lwX3N5bShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHN5bV9mbGFncykKIHsKLQlpbnQgcmV0OwotCi0JaWYgKCFpcCkKLQkJcmV0dXJuIHRyYWNlX3NlcV9wdXRjKHMsICcwJyk7CisJaWYgKCFpcCkgeworCQl0cmFjZV9zZXFfcHV0YyhzLCAnMCcpOworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAoc3ltX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fT0ZGU0VUKQotCQlyZXQgPSBzZXFfcHJpbnRfc3ltX29mZnNldChzLCAiJXMiLCBpcCk7CisJCXNlcV9wcmludF9zeW1fb2Zmc2V0KHMsICIlcyIsIGlwKTsKIAllbHNlCi0JCXJldCA9IHNlcV9wcmludF9zeW1fc2hvcnQocywgIiVzIiwgaXApOwotCi0JaWYgKCFyZXQpCi0JCXJldHVybiAwOworCQlzZXFfcHJpbnRfc3ltX3Nob3J0KHMsICIlcyIsIGlwKTsKIAogCWlmIChzeW1fZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9BRERSKQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgPCIgSVBfRk1UICI+IiwgaXApOwotCXJldHVybiByZXQ7CisJCXRyYWNlX3NlcV9wcmludGYocywgIiA8IiBJUF9GTVQgIj4iLCBpcCk7CisKKyBvdXQ6CisJcmV0dXJuICF0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQocyk7CiB9CiAKIC8qKgpAQCAtNDEzLDcgKzM4OCw2IEBACiAJY2hhciBpcnFzX29mZjsKIAlpbnQgaGFyZGlycTsKIAlpbnQgc29mdGlycTsKLQlpbnQgcmV0OwogCiAJaGFyZGlycSA9IGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfSEFSRElSUTsKIAlzb2Z0aXJxID0gZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19TT0ZUSVJROwpAQCAtNDQ1LDE2ICs0MTksMTUgQEAKIAkJc29mdGlycSA/ICdzJyA6CiAJCScuJzsKIAotCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWMlYyVjIiwKLQkJCSAgICAgIGlycXNfb2ZmLCBuZWVkX3Jlc2NoZWQsIGhhcmRzb2Z0X2lycSkpCi0JCXJldHVybiAwOworCXRyYWNlX3NlcV9wcmludGYocywgIiVjJWMlYyIsCisJCQkgaXJxc19vZmYsIG5lZWRfcmVzY2hlZCwgaGFyZHNvZnRfaXJxKTsKIAogCWlmIChlbnRyeS0+cHJlZW1wdF9jb3VudCkKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXgiLCBlbnRyeS0+cHJlZW1wdF9jb3VudCk7CisJCXRyYWNlX3NlcV9wcmludGYocywgIiV4IiwgZW50cnktPnByZWVtcHRfY291bnQpOwogCWVsc2UKLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJy4nKTsKKwkJdHJhY2Vfc2VxX3B1dGMocywgJy4nKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuICF0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQocyk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQ2NCwxNCArNDM3LDM4IEBACiAKIAl0cmFjZV9maW5kX2NtZGxpbmUoZW50cnktPnBpZCwgY29tbSk7CiAKLQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiU4LjhzLSUtNWQgJTNkIiwKLQkJCSAgICAgIGNvbW0sIGVudHJ5LT5waWQsIGNwdSkpCi0JCXJldHVybiAwOworCXRyYWNlX3NlcV9wcmludGYocywgIiU4LjhzLSUtNWQgJTNkIiwKKwkJCSBjb21tLCBlbnRyeS0+cGlkLCBjcHUpOwogCiAJcmV0dXJuIHRyYWNlX3ByaW50X2xhdF9mbXQocywgZW50cnkpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwcmVlbXB0X21hcmtfdGhyZXNoX3VzID0gMTAwOworI3VuZGVmIE1BUksKKyNkZWZpbmUgTUFSSyh2LCBzKSB7LnZhbCA9IHYsIC5zeW0gPSBzfQorLyogdHJhY2Ugb3ZlcmhlYWQgbWFyayAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0cmFjZV9tYXJrIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcJdmFsOyAvKiB1bml0OiBuc2VjICovCisJY2hhcgkJCXN5bTsKK30gbWFya1tdID0geworCU1BUksoMTAwMDAwMDAwMFVMTAksICckJyksIC8qIDEgc2VjICovCisJTUFSSygxMDAwMDAwVUxMCQksICcjJyksIC8qIDEwMDAgdXNlY3MgKi8KKwlNQVJLKDEwMDAwMFVMTAkJLCAnIScpLCAvKiAxMDAgdXNlY3MgKi8KKwlNQVJLKDEwMDAwVUxMCQksICcrJyksIC8qIDEwIHVzZWNzICovCit9OworI3VuZGVmIE1BUksKKworY2hhciB0cmFjZV9maW5kX21hcmsodW5zaWduZWQgbG9uZyBsb25nIGQpCit7CisJaW50IGk7CisJaW50IHNpemUgPSBBUlJBWV9TSVpFKG1hcmspOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlpZiAoZCA+PSBtYXJrW2ldLnZhbCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAoaSA9PSBzaXplKSA/ICcgJyA6IG1hcmtbaV0uc3ltOworfQogCiBzdGF0aWMgaW50CiBsYXRfcHJpbnRfdGltZXN0YW1wKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgdTY0IG5leHRfdHMpCkBAIC00OTMsMjQgKzQ5MCwyOCBAQAogCQl1bnNpZ25lZCBsb25nIHJlbF91c2VjID0gZG9fZGl2KHJlbF90cywgVVNFQ19QRVJfTVNFQyk7CiAJCXVuc2lnbmVkIGxvbmcgcmVsX21zZWMgPSAodW5zaWduZWQgbG9uZylyZWxfdHM7CiAKLQkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYoCi0JCQkJcywgIlslMDhsbHhdICVsZC4lMDNsZG1zICgrJWxkLiUwM2xkbXMpOiAiLAotCQkJCW5zMnVzZWNzKGl0ZXItPnRzKSwKLQkJCQlhYnNfbXNlYywgYWJzX3VzZWMsCi0JCQkJcmVsX21zZWMsIHJlbF91c2VjKTsKKwkJdHJhY2Vfc2VxX3ByaW50ZigKKwkJCXMsICJbJTA4bGx4XSAlbGQuJTAzbGRtcyAoKyVsZC4lMDNsZG1zKTogIiwKKwkJCW5zMnVzZWNzKGl0ZXItPnRzKSwKKwkJCWFic19tc2VjLCBhYnNfdXNlYywKKwkJCXJlbF9tc2VjLCByZWxfdXNlYyk7CisKIAl9IGVsc2UgaWYgKHZlcmJvc2UgJiYgIWluX25zKSB7Ci0JCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKAotCQkJCXMsICJbJTAxNmxseF0gJWxsZCAoKyVsbGQpOiAiLAotCQkJCWl0ZXItPnRzLCBhYnNfdHMsIHJlbF90cyk7CisJCXRyYWNlX3NlcV9wcmludGYoCisJCQlzLCAiWyUwMTZsbHhdICVsbGQgKCslbGxkKTogIiwKKwkJCWl0ZXItPnRzLCBhYnNfdHMsIHJlbF90cyk7CisKIAl9IGVsc2UgaWYgKCF2ZXJib3NlICYmIGluX25zKSB7Ci0JCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKAotCQkJCXMsICIgJTRsbGR1cyVjOiAiLAotCQkJCWFic190cywKLQkJCQlyZWxfdHMgPiBwcmVlbXB0X21hcmtfdGhyZXNoX3VzID8gJyEnIDoKLQkJCQkgIHJlbF90cyA+IDEgPyAnKycgOiAnICcpOworCQl0cmFjZV9zZXFfcHJpbnRmKAorCQkJcywgIiAlNGxsZHVzJWM6ICIsCisJCQlhYnNfdHMsCisJCQl0cmFjZV9maW5kX21hcmsocmVsX3RzICogTlNFQ19QRVJfVVNFQykpOworCiAJfSBlbHNlIHsgLyogIXZlcmJvc2UgJiYgIWluX25zICovCi0JCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTRsbGQ6ICIsIGFic190cyk7CisJCXRyYWNlX3NlcV9wcmludGYocywgIiAlNGxsZDogIiwgYWJzX3RzKTsKIAl9CisKKwlyZXR1cm4gIXRyYWNlX3NlcV9oYXNfb3ZlcmZsb3dlZChzKTsKIH0KIAogaW50IHRyYWNlX3ByaW50X2NvbnRleHQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQpAQCAtNTIwLDM0ICs1MjEsMjkgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgdDsKIAl1bnNpZ25lZCBsb25nIHNlY3MsIHVzZWNfcmVtOwogCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKLQlpbnQgcmV0OwogCiAJdHJhY2VfZmluZF9jbWRsaW5lKGVudHJ5LT5waWQsIGNvbW0pOwogCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTE2cy0lLTVkIFslMDNkXSAiLAorCXRyYWNlX3NlcV9wcmludGYocywgIiUxNnMtJS01ZCBbJTAzZF0gIiwKIAkJCSAgICAgICBjb21tLCBlbnRyeS0+cGlkLCBpdGVyLT5jcHUpOwotCWlmICghcmV0KQotCQlyZXR1cm4gMDsKIAotCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfSVJRX0lORk8pIHsKLQkJcmV0ID0gdHJhY2VfcHJpbnRfbGF0X2ZtdChzLCBlbnRyeSk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIDA7Ci0JfQorCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfSVJRX0lORk8pCisJCXRyYWNlX3ByaW50X2xhdF9mbXQocywgZW50cnkpOwogCiAJaWYgKGl0ZXItPml0ZXJfZmxhZ3MgJiBUUkFDRV9GSUxFX1RJTUVfSU5fTlMpIHsKIAkJdCA9IG5zMnVzZWNzKGl0ZXItPnRzKTsKIAkJdXNlY19yZW0gPSBkb19kaXYodCwgVVNFQ19QRVJfU0VDKTsKIAkJc2VjcyA9ICh1bnNpZ25lZCBsb25nKXQ7Ci0JCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTVsdS4lMDZsdTogIiwgc2VjcywgdXNlY19yZW0pOworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTVsdS4lMDZsdTogIiwgc2VjcywgdXNlY19yZW0pOwogCX0gZWxzZQotCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICUxMmxsdTogIiwgaXRlci0+dHMpOworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTEybGx1OiAiLCBpdGVyLT50cyk7CisKKwlyZXR1cm4gIXRyYWNlX3NlcV9oYXNfb3ZlcmZsb3dlZChzKTsKIH0KIAogaW50IHRyYWNlX3ByaW50X2xhdF9jb250ZXh0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAl1NjQgbmV4dF90czsKLQlpbnQgcmV0OwogCS8qIHRyYWNlX2ZpbmRfbmV4dF9lbnRyeSB3aWxsIHJlc2V0IGVudF9zaXplICovCiAJaW50IGVudF9zaXplID0gaXRlci0+ZW50X3NpemU7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CkBAIC01NjcsMTggKzU2MywxNyBAQAogCiAJCXRyYWNlX2ZpbmRfY21kbGluZShlbnRyeS0+cGlkLCBjb21tKTsKIAotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKAotCQkJCXMsICIlMTZzICU1ZCAlM2QgJWQgJTA4eCAlMDhseCAiLAotCQkJCWNvbW0sIGVudHJ5LT5waWQsIGl0ZXItPmNwdSwgZW50cnktPmZsYWdzLAotCQkJCWVudHJ5LT5wcmVlbXB0X2NvdW50LCBpdGVyLT5pZHgpOworCQl0cmFjZV9zZXFfcHJpbnRmKAorCQkJcywgIiUxNnMgJTVkICUzZCAlZCAlMDh4ICUwOGx4ICIsCisJCQljb21tLCBlbnRyeS0+cGlkLCBpdGVyLT5jcHUsIGVudHJ5LT5mbGFncywKKwkJCWVudHJ5LT5wcmVlbXB0X2NvdW50LCBpdGVyLT5pZHgpOwogCX0gZWxzZSB7Ci0JCXJldCA9IGxhdF9wcmludF9nZW5lcmljKHMsIGVudHJ5LCBpdGVyLT5jcHUpOworCQlsYXRfcHJpbnRfZ2VuZXJpYyhzLCBlbnRyeSwgaXRlci0+Y3B1KTsKIAl9CiAKLQlpZiAocmV0KQotCQlyZXQgPSBsYXRfcHJpbnRfdGltZXN0YW1wKGl0ZXIsIG5leHRfdHMpOworCWxhdF9wcmludF90aW1lc3RhbXAoaXRlciwgbmV4dF90cyk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAhdHJhY2Vfc2VxX2hhc19vdmVyZmxvd2VkKHMpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciBzdGF0ZV90b19jaGFyW10gPSBUQVNLX1NUQVRFX1RPX0NIQVJfU1RSOwpAQCAtNjkyLDcgKzY4Nyw3IEBACiAJCQkJZ290byBvdXQ7CiAKIAkJfSBlbHNlIHsKLQkJCQorCiAJCQlldmVudC0+dHlwZSA9IG5leHRfZXZlbnRfdHlwZSsrOwogCQkJbGlzdCA9ICZmdHJhY2VfZXZlbnRfbGlzdDsKIAkJfQpAQCAtNzY0LDEwICs3NTksOSBAQAogZW51bSBwcmludF9saW5lX3QgdHJhY2Vfbm9wX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzLAogCQkJCSAgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgInR5cGU6ICVkXG4iLCBpdGVyLT5lbnQtPnR5cGUpKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAidHlwZTogJWRcbiIsIGl0ZXItPmVudC0+dHlwZSk7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKCZpdGVyLT5zZXEpOwogfQogCiAvKiBUUkFDRV9GTiAqLwpAQCAtNzc5LDI0ICs3NzMsMTYgQEAKIAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwogCi0JaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgZmxhZ3MpKQotCQlnb3RvIHBhcnRpYWw7CisJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIGZsYWdzKTsKIAogCWlmICgoZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5UX1BBUkVOVCkgJiYgZmllbGQtPnBhcmVudF9pcCkgewotCQlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICIgPC0iKSkKLQkJCWdvdG8gcGFydGlhbDsKLQkJaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsCi0JCQkJICAgICAgZmllbGQtPnBhcmVudF9pcCwKLQkJCQkgICAgICBmbGFncykpCi0JCQlnb3RvIHBhcnRpYWw7CisJCXRyYWNlX3NlcV9wdXRzKHMsICIgPC0iKTsKKwkJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+cGFyZW50X2lwLCBmbGFncyk7CiAJfQotCWlmICghdHJhY2Vfc2VxX3B1dGMocywgJ1xuJykpCi0JCWdvdG8gcGFydGlhbDsKIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CiAKLSBwYXJ0aWFsOgotCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwlyZXR1cm4gdHJhY2VfaGFuZGxlX3JldHVybihzKTsKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2ZuX3JhdyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncywKQEAgLTgwNiwxMiArNzkyLDExIEBACiAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKIAotCWlmICghdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiJWx4ICVseFxuIiwKLQkJCSAgICAgIGZpZWxkLT5pcCwKLQkJCSAgICAgIGZpZWxkLT5wYXJlbnRfaXApKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiJWx4ICVseFxuIiwKKwkJCSBmaWVsZC0+aXAsCisJCQkgZmllbGQtPnBhcmVudF9pcCk7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKCZpdGVyLT5zZXEpOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfZm5faGV4KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzLApAQCAtODIyLDEwICs4MDcsMTAgQEAKIAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwogCi0JU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5pcCk7Ci0JU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wYXJlbnRfaXApOworCVNFUV9QVVRfSEVYX0ZJRUxEKHMsIGZpZWxkLT5pcCk7CisJU0VRX1BVVF9IRVhfRklFTEQocywgZmllbGQtPnBhcmVudF9pcCk7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKHMpOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfZm5fYmluKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzLApAQCAtODM2LDEwICs4MjEsMTAgQEAKIAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwogCi0JU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmlwKTsKLQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+cGFyZW50X2lwKTsKKwlTRVFfUFVUX0ZJRUxEKHMsIGZpZWxkLT5pcCk7CisJU0VRX1BVVF9GSUVMRChzLCBmaWVsZC0+cGFyZW50X2lwKTsKIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIHRyYWNlX2ZuX2Z1bmNzID0gewpAQCAtODY4LDE4ICs4NTMsMTcgQEAKIAlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKIAlTID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKIAl0cmFjZV9maW5kX2NtZGxpbmUoZmllbGQtPm5leHRfcGlkLCBjb21tKTsKLQlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwKLQkJCSAgICAgICIgJTVkOiUzZDolYyAlcyBbJTAzZF0gJTVkOiUzZDolYyAlc1xuIiwKLQkJCSAgICAgIGZpZWxkLT5wcmV2X3BpZCwKLQkJCSAgICAgIGZpZWxkLT5wcmV2X3ByaW8sCi0JCQkgICAgICBTLCBkZWxpbSwKLQkJCSAgICAgIGZpZWxkLT5uZXh0X2NwdSwKLQkJCSAgICAgIGZpZWxkLT5uZXh0X3BpZCwKLQkJCSAgICAgIGZpZWxkLT5uZXh0X3ByaW8sCi0JCQkgICAgICBULCBjb21tKSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwKKwkJCSAiICU1ZDolM2Q6JWMgJXMgWyUwM2RdICU1ZDolM2Q6JWMgJXNcbiIsCisJCQkgZmllbGQtPnByZXZfcGlkLAorCQkJIGZpZWxkLT5wcmV2X3ByaW8sCisJCQkgUywgZGVsaW0sCisJCQkgZmllbGQtPm5leHRfY3B1LAorCQkJIGZpZWxkLT5uZXh0X3BpZCwKKwkJCSBmaWVsZC0+bmV4dF9wcmlvLAorCQkJIFQsIGNvbW0pOwogCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwlyZXR1cm4gdHJhY2VfaGFuZGxlX3JldHVybigmaXRlci0+c2VxKTsKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2N0eF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncywKQEAgLTkwNCwxNyArODg4LDE2IEBACiAJaWYgKCFTKQogCQlTID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKIAlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKLQlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIiVkICVkICVjICVkICVkICVkICVjXG4iLAotCQkJICAgICAgZmllbGQtPnByZXZfcGlkLAotCQkJICAgICAgZmllbGQtPnByZXZfcHJpbywKLQkJCSAgICAgIFMsCi0JCQkgICAgICBmaWVsZC0+bmV4dF9jcHUsCi0JCQkgICAgICBmaWVsZC0+bmV4dF9waWQsCi0JCQkgICAgICBmaWVsZC0+bmV4dF9wcmlvLAotCQkJICAgICAgVCkpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIlZCAlZCAlYyAlZCAlZCAlZCAlY1xuIiwKKwkJCSBmaWVsZC0+cHJldl9waWQsCisJCQkgZmllbGQtPnByZXZfcHJpbywKKwkJCSBTLAorCQkJIGZpZWxkLT5uZXh0X2NwdSwKKwkJCSBmaWVsZC0+bmV4dF9waWQsCisJCQkgZmllbGQtPm5leHRfcHJpbywKKwkJCSBUKTsKIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4oJml0ZXItPnNlcSk7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9jdHhfcmF3KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzLApAQCAtOTQyLDE1ICs5MjUsMTUgQEAKIAkJUyA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7CiAJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7CiAKLQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcGlkKTsKLQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcHJpbyk7Ci0JU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIFMpOwotCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9jcHUpOwotCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9waWQpOwotCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9wcmlvKTsKLQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgVCk7CisJU0VRX1BVVF9IRVhfRklFTEQocywgZmllbGQtPnByZXZfcGlkKTsKKwlTRVFfUFVUX0hFWF9GSUVMRChzLCBmaWVsZC0+cHJldl9wcmlvKTsKKwlTRVFfUFVUX0hFWF9GSUVMRChzLCBTKTsKKwlTRVFfUFVUX0hFWF9GSUVMRChzLCBmaWVsZC0+bmV4dF9jcHUpOworCVNFUV9QVVRfSEVYX0ZJRUxEKHMsIGZpZWxkLT5uZXh0X3BpZCk7CisJU0VRX1BVVF9IRVhfRklFTEQocywgZmllbGQtPm5leHRfcHJpbyk7CisJU0VRX1BVVF9IRVhfRklFTEQocywgVCk7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKHMpOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfY3R4X2hleChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncywKQEAgLTk3MywxNCArOTU2LDE1IEBACiAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKIAotCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3BpZCk7Ci0JU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcHJpbyk7Ci0JU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfc3RhdGUpOwotCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3BpZCk7Ci0JU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcHJpbyk7Ci0JU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfc3RhdGUpOworCVNFUV9QVVRfRklFTEQocywgZmllbGQtPnByZXZfcGlkKTsKKwlTRVFfUFVUX0ZJRUxEKHMsIGZpZWxkLT5wcmV2X3ByaW8pOworCVNFUV9QVVRfRklFTEQocywgZmllbGQtPnByZXZfc3RhdGUpOworCVNFUV9QVVRfRklFTEQocywgZmllbGQtPm5leHRfY3B1KTsKKwlTRVFfUFVUX0ZJRUxEKHMsIGZpZWxkLT5uZXh0X3BpZCk7CisJU0VRX1BVVF9GSUVMRChzLCBmaWVsZC0+bmV4dF9wcmlvKTsKKwlTRVFfUFVUX0ZJRUxEKHMsIGZpZWxkLT5uZXh0X3N0YXRlKTsKIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIHRyYWNlX2N0eF9mdW5jcyA9IHsKQEAgLTEwMjAsMjMgKzEwMDQsMTkgQEAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKIAllbmQgPSAodW5zaWduZWQgbG9uZyAqKSgobG9uZylpdGVyLT5lbnQgKyBpdGVyLT5lbnRfc2l6ZSk7CiAKLQlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICI8c3RhY2sgdHJhY2U+XG4iKSkKLQkJZ290byBwYXJ0aWFsOworCXRyYWNlX3NlcV9wdXRzKHMsICI8c3RhY2sgdHJhY2U+XG4iKTsKIAogCWZvciAocCA9IGZpZWxkLT5jYWxsZXI7IHAgJiYgKnAgIT0gVUxPTkdfTUFYICYmIHAgPCBlbmQ7IHArKykgewotCQlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICIgPT4gIikpCi0JCQlnb3RvIHBhcnRpYWw7CiAKLQkJaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsICpwLCBmbGFncykpCi0JCQlnb3RvIHBhcnRpYWw7Ci0JCWlmICghdHJhY2Vfc2VxX3B1dGMocywgJ1xuJykpCi0JCQlnb3RvIHBhcnRpYWw7CisJCWlmICh0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQocykpCisJCQlicmVhazsKKworCQl0cmFjZV9zZXFfcHV0cyhzLCAiID0+ICIpOworCQlzZXFfcHJpbnRfaXBfc3ltKHMsICpwLCBmbGFncyk7CisJCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOwogCX0KIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0KLSBwYXJ0aWFsOgotCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwlyZXR1cm4gdHJhY2VfaGFuZGxlX3JldHVybihzKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudF9mdW5jdGlvbnMgdHJhY2Vfc3RhY2tfZnVuY3MgPSB7CkBAIC0xMDU3LDE2ICsxMDM3LDEwIEBACiAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKIAotCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIjx1c2VyIHN0YWNrIHRyYWNlPlxuIikpCi0JCWdvdG8gcGFydGlhbDsKKwl0cmFjZV9zZXFfcHV0cyhzLCAiPHVzZXIgc3RhY2sgdHJhY2U+XG4iKTsKKwlzZXFfcHJpbnRfdXNlcmlwX29ianMoZmllbGQsIHMsIGZsYWdzKTsKIAotCWlmICghc2VxX3ByaW50X3VzZXJpcF9vYmpzKGZpZWxkLCBzLCBmbGFncykpCi0JCWdvdG8gcGFydGlhbDsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0KLSBwYXJ0aWFsOgotCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwlyZXR1cm4gdHJhY2VfaGFuZGxlX3JldHVybihzKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudF9mdW5jdGlvbnMgdHJhY2VfdXNlcl9zdGFja19mdW5jcyA9IHsKQEAgLTEwODksMTkgKzEwNjMsMTEgQEAKIAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CiAKLQlpZiAoIXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBmbGFncykpCi0JCWdvdG8gcGFydGlhbDsKKwlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgZmxhZ3MpOworCXRyYWNlX3NlcV9wdXRzKHMsICI6ICIpOworCXRyYWNlX3NlcV9wdXRzKHMsIGZpZWxkLT5zdHIpOwogCi0JaWYgKCF0cmFjZV9zZXFfcHV0cyhzLCAiOiAiKSkKLQkJZ290byBwYXJ0aWFsOwotCi0JaWYgKCF0cmFjZV9zZXFfcHV0cyhzLCBmaWVsZC0+c3RyKSkKLQkJZ290byBwYXJ0aWFsOwotCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLQotIHBhcnRpYWw6Ci0JcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXJldHVybiB0cmFjZV9oYW5kbGVfcmV0dXJuKHMpOwogfQogCiAKQEAgLTExMTQsMTYgKzEwODAsMTAgQEAKIAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwogCi0JaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICI6ICVseCA6ICIsIGZpZWxkLT5pcCkpCi0JCWdvdG8gcGFydGlhbDsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICI6ICVseCA6ICIsIGZpZWxkLT5pcCk7CisJdHJhY2Vfc2VxX3B1dHMocywgZmllbGQtPnN0cik7CiAKLQlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsIGZpZWxkLT5zdHIpKQotCQlnb3RvIHBhcnRpYWw7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotCi0gcGFydGlhbDoKLQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIHRyYWNlX2JwdXRzX2Z1bmNzID0gewpAQCAtMTE0NywxOSArMTEwNywxMSBAQAogCiAJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKIAotCWlmICghc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIGZsYWdzKSkKLQkJZ290byBwYXJ0aWFsOworCXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBmbGFncyk7CisJdHJhY2Vfc2VxX3B1dHMocywgIjogIik7CisJdHJhY2Vfc2VxX2JwcmludGYocywgZmllbGQtPmZtdCwgZmllbGQtPmJ1Zik7CiAKLQlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICI6ICIpKQotCQlnb3RvIHBhcnRpYWw7Ci0KLQlpZiAoIXRyYWNlX3NlcV9icHJpbnRmKHMsIGZpZWxkLT5mbXQsIGZpZWxkLT5idWYpKQotCQlnb3RvIHBhcnRpYWw7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotCi0gcGFydGlhbDoKLQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIApAQCAtMTE3MiwxNiArMTEyNCwxMCBAQAogCiAJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CiAKLQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIjogJWx4IDogIiwgZmllbGQtPmlwKSkKLQkJZ290byBwYXJ0aWFsOworCXRyYWNlX3NlcV9wcmludGYocywgIjogJWx4IDogIiwgZmllbGQtPmlwKTsKKwl0cmFjZV9zZXFfYnByaW50ZihzLCBmaWVsZC0+Zm10LCBmaWVsZC0+YnVmKTsKIAotCWlmICghdHJhY2Vfc2VxX2JwcmludGYocywgZmllbGQtPmZtdCwgZmllbGQtPmJ1ZikpCi0JCWdvdG8gcGFydGlhbDsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0KLSBwYXJ0aWFsOgotCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwlyZXR1cm4gdHJhY2VfaGFuZGxlX3JldHVybihzKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudF9mdW5jdGlvbnMgdHJhY2VfYnByaW50X2Z1bmNzID0gewpAQCAtMTIwMywxNiArMTE0OSwxMCBAQAogCiAJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CiAKLQlpZiAoIXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBmbGFncykpCi0JCWdvdG8gcGFydGlhbDsKKwlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgZmxhZ3MpOworCXRyYWNlX3NlcV9wcmludGYocywgIjogJXMiLCBmaWVsZC0+YnVmKTsKIAotCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiOiAlcyIsIGZpZWxkLT5idWYpKQotCQlnb3RvIHBhcnRpYWw7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotCi0gcGFydGlhbDoKLQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9wcmludF9yYXcoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MsCkBAIC0xMjIyLDEzICsxMTYyLDkgQEAKIAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwogCi0JaWYgKCF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIjICVseCAlcyIsIGZpZWxkLT5pcCwgZmllbGQtPmJ1ZikpCi0JCWdvdG8gcGFydGlhbDsKKwl0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIjICVseCAlcyIsIGZpZWxkLT5pcCwgZmllbGQtPmJ1Zik7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotCi0gcGFydGlhbDoKLQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4oJml0ZXItPnNlcSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIHRyYWNlX3ByaW50X2Z1bmNzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5oIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5oCmluZGV4IDgwYjI1YjUuLjhlZjJjNDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmgKQEAgLTM1LDE3ICszNSwxMSBAQAogZXh0ZXJuIGludCBfX3VucmVnaXN0ZXJfZnRyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpOwogZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgdHJhY2VfZXZlbnRfc2VtOwogCi0jZGVmaW5lIFNFUV9QVVRfRklFTERfUkVUKHMsIHgpCQkJCVwKLWRvIHsJCQkJCQkJXAotCWlmICghdHJhY2Vfc2VxX3B1dG1lbShzLCAmKHgpLCBzaXplb2YoeCkpKQlcCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsJCVwKLX0gd2hpbGUgKDApCisjZGVmaW5lIFNFUV9QVVRfRklFTEQocywgeCkJCQkJXAorCXRyYWNlX3NlcV9wdXRtZW0ocywgJih4KSwgc2l6ZW9mKHgpKQogCi0jZGVmaW5lIFNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCB4KQkJCVwKLWRvIHsJCQkJCQkJXAotCWlmICghdHJhY2Vfc2VxX3B1dG1lbV9oZXgocywgJih4KSwgc2l6ZW9mKHgpKSkJXAotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CQlcCi19IHdoaWxlICgwKQorI2RlZmluZSBTRVFfUFVUX0hFWF9GSUVMRChzLCB4KQkJCQlcCisJdHJhY2Vfc2VxX3B1dG1lbV9oZXgocywgJih4KSwgc2l6ZW9mKHgpKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jCmluZGV4IDI5MDA4MTcuLmM0ZTcwYjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCQkJc2VxX3B1dHMobSwgIlxcdCIpOwogCQkJYnJlYWs7CiAJCWNhc2UgJ1xcJzoKLQkJCXNlcV9wdXRzKG0sICJcXCIpOworCQkJc2VxX3B1dGMobSwgJ1xcJyk7CiAJCQlicmVhazsKIAkJY2FzZSAnIic6CiAJCQlzZXFfcHV0cyhtLCAiXFxcIiIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3Byb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcHJvYmUuYwppbmRleCBkNGI5ZmMyLi5iOTgzYjJmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfcHJvYmUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcHJvYmUuYwpAQCAtNDAsNyArNDAsOCBAQAogaW50IFBSSU5UX1RZUEVfRlVOQ19OQU1FKHR5cGUpKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKm5hbWUsCVwKIAkJCQl2b2lkICpkYXRhLCB2b2lkICplbnQpCQkJXAogewkJCQkJCQkJCVwKLQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICVzPSIgZm10LCBuYW1lLCAqKHR5cGUgKilkYXRhKTsJXAorCXRyYWNlX3NlcV9wcmludGYocywgIiAlcz0iIGZtdCwgbmFtZSwgKih0eXBlICopZGF0YSk7CQlcCisJcmV0dXJuICF0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQocyk7CQkJCVwKIH0JCQkJCQkJCQlcCiBjb25zdCBjaGFyIFBSSU5UX1RZUEVfRk1UX05BTUUodHlwZSlbXSA9IGZtdDsJCQkJXAogTk9LUFJPQkVfU1lNQk9MKFBSSU5UX1RZUEVfRlVOQ19OQU1FKHR5cGUpKTsKQEAgLTYxLDEwICs2MiwxMSBAQAogCWludCBsZW4gPSAqKHUzMiAqKWRhdGEgPj4gMTY7CiAKIAlpZiAoIWxlbikKLQkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiAlcz0oZmF1bHQpIiwgbmFtZSk7CisJCXRyYWNlX3NlcV9wcmludGYocywgIiAlcz0oZmF1bHQpIiwgbmFtZSk7CiAJZWxzZQotCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICVzPVwiJXNcIiIsIG5hbWUsCi0JCQkJCShjb25zdCBjaGFyICopZ2V0X2xvY19kYXRhKGRhdGEsIGVudCkpOworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJXM9XCIlc1wiIiwgbmFtZSwKKwkJCQkgKGNvbnN0IGNoYXIgKilnZXRfbG9jX2RhdGEoZGF0YSwgZW50KSk7CisJcmV0dXJuICF0cmFjZV9zZXFfaGFzX292ZXJmbG93ZWQocyk7CiB9CiBOT0tQUk9CRV9TWU1CT0woUFJJTlRfVFlQRV9GVU5DX05BTUUoc3RyaW5nKSk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYwppbmRleCAzZjM0ZGM5Li4yZTI5M2JlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3N3aXRjaC5jCkBAIC0xNCwxMjIgKzE0LDI2IEBACiAKICNpbmNsdWRlICJ0cmFjZS5oIgogCi1zdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5CSpjdHhfdHJhY2U7Ci1zdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkJdHJhY2VyX2VuYWJsZWQ7CiBzdGF0aWMgaW50CQkJc2NoZWRfcmVmOwogc3RhdGljIERFRklORV9NVVRFWChzY2hlZF9yZWdpc3Rlcl9tdXRleCk7Ci1zdGF0aWMgaW50CQkJc2NoZWRfc3RvcHBlZDsKLQotCi12b2lkCi10cmFjaW5nX3NjaGVkX3N3aXRjaF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAotCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LAotCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQotewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF9jb250ZXh0X3N3aXRjaDsKLQlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IHRyLT50cmFjZV9idWZmZXIuYnVmZmVyOwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmVudHJ5OwotCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQ1RYLAotCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwotCWlmICghZXZlbnQpCi0JCXJldHVybjsKLQllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCWVudHJ5LT5wcmV2X3BpZAkJCT0gcHJldi0+cGlkOwotCWVudHJ5LT5wcmV2X3ByaW8JCT0gcHJldi0+cHJpbzsKLQllbnRyeS0+cHJldl9zdGF0ZQkJPSBwcmV2LT5zdGF0ZTsKLQllbnRyeS0+bmV4dF9waWQJCQk9IG5leHQtPnBpZDsKLQllbnRyeS0+bmV4dF9wcmlvCQk9IG5leHQtPnByaW87Ci0JZW50cnktPm5leHRfc3RhdGUJCT0gbmV4dC0+c3RhdGU7Ci0JZW50cnktPm5leHRfY3B1CT0gdGFza19jcHUobmV4dCk7Ci0KLQlpZiAoIWNhbGxfZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQotCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCBmbGFncywgcGMpOwotfQogCiBzdGF0aWMgdm9pZAogcHJvYmVfc2NoZWRfc3dpdGNoKHZvaWQgKmlnbm9yZSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiB7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjcHU7Ci0JaW50IHBjOwotCiAJaWYgKHVubGlrZWx5KCFzY2hlZF9yZWYpKQogCQlyZXR1cm47CiAKIAl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHByZXYpOwogCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUobmV4dCk7Ci0KLQlpZiAoIXRyYWNlcl9lbmFibGVkIHx8IHNjaGVkX3N0b3BwZWQpCi0JCXJldHVybjsKLQotCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWRhdGEgPSBwZXJfY3B1X3B0cihjdHhfdHJhY2UtPnRyYWNlX2J1ZmZlci5kYXRhLCBjcHUpOwotCi0JaWYgKGxpa2VseSghYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCi0JCXRyYWNpbmdfc2NoZWRfc3dpdGNoX3RyYWNlKGN0eF90cmFjZSwgcHJldiwgbmV4dCwgZmxhZ3MsIHBjKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotdm9pZAotdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsCi0JCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCi0JCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X3dha2V1cDsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IHRyLT50cmFjZV9idWZmZXIuYnVmZmVyOwotCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfV0FLRSwKLQkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm47Ci0JZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQllbnRyeS0+cHJldl9waWQJCQk9IGN1cnItPnBpZDsKLQllbnRyeS0+cHJldl9wcmlvCQk9IGN1cnItPnByaW87Ci0JZW50cnktPnByZXZfc3RhdGUJCT0gY3Vyci0+c3RhdGU7Ci0JZW50cnktPm5leHRfcGlkCQkJPSB3YWtlZS0+cGlkOwotCWVudHJ5LT5uZXh0X3ByaW8JCT0gd2FrZWUtPnByaW87Ci0JZW50cnktPm5leHRfc3RhdGUJCT0gd2FrZWUtPnN0YXRlOwotCWVudHJ5LT5uZXh0X2NwdQkJCT0gdGFza19jcHUod2FrZWUpOwotCi0JaWYgKCFjYWxsX2ZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkKLQkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgZmxhZ3MsIHBjKTsKIH0KIAogc3RhdGljIHZvaWQKIHByb2JlX3NjaGVkX3dha2V1cCh2b2lkICppZ25vcmUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsIGludCBzdWNjZXNzKQogewotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY3B1LCBwYzsKLQogCWlmICh1bmxpa2VseSghc2NoZWRfcmVmKSkKIAkJcmV0dXJuOwogCiAJdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTsKLQotCWlmICghdHJhY2VyX2VuYWJsZWQgfHwgc2NoZWRfc3RvcHBlZCkKLQkJcmV0dXJuOwotCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZGF0YSA9IHBlcl9jcHVfcHRyKGN0eF90cmFjZS0+dHJhY2VfYnVmZmVyLmRhdGEsIGNwdSk7Ci0KLQlpZiAobGlrZWx5KCFhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKLQkJdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2UoY3R4X3RyYWNlLCB3YWtlZSwgY3VycmVudCwKLQkJCQkJICAgZmxhZ3MsIHBjKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIGludCB0cmFjaW5nX3NjaGVkX3JlZ2lzdGVyKHZvaWQpCkBAIC0xOTcsNTEgKzEwMSwzIEBACiB7CiAJdHJhY2luZ19zdG9wX3NjaGVkX3N3aXRjaCgpOwogfQotCi0vKioKLSAqIHRyYWNpbmdfc3RhcnRfc2NoZWRfc3dpdGNoX3JlY29yZCAtIHN0YXJ0IHRyYWNpbmcgY29udGV4dCBzd2l0Y2hlcwotICoKLSAqIFR1cm5zIG9uIGNvbnRleHQgc3dpdGNoIHRyYWNpbmcgZm9yIGEgdHJhY2VyLgotICovCi12b2lkIHRyYWNpbmdfc3RhcnRfc2NoZWRfc3dpdGNoX3JlY29yZCh2b2lkKQotewotCWlmICh1bmxpa2VseSghY3R4X3RyYWNlKSkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm47Ci0JfQotCi0JdHJhY2luZ19zdGFydF9zY2hlZF9zd2l0Y2goKTsKLQotCW11dGV4X2xvY2soJnNjaGVkX3JlZ2lzdGVyX211dGV4KTsKLQl0cmFjZXJfZW5hYmxlZCsrOwotCW11dGV4X3VubG9jaygmc2NoZWRfcmVnaXN0ZXJfbXV0ZXgpOwotfQotCi0vKioKLSAqIHRyYWNpbmdfc3RvcF9zY2hlZF9zd2l0Y2hfcmVjb3JkIC0gc3RhcnQgdHJhY2luZyBjb250ZXh0IHN3aXRjaGVzCi0gKgotICogVHVybnMgb2ZmIGNvbnRleHQgc3dpdGNoIHRyYWNpbmcgZm9yIGEgdHJhY2VyLgotICovCi12b2lkIHRyYWNpbmdfc3RvcF9zY2hlZF9zd2l0Y2hfcmVjb3JkKHZvaWQpCi17Ci0JbXV0ZXhfbG9jaygmc2NoZWRfcmVnaXN0ZXJfbXV0ZXgpOwotCXRyYWNlcl9lbmFibGVkLS07Ci0JV0FSTl9PTih0cmFjZXJfZW5hYmxlZCA8IDApOwotCW11dGV4X3VubG9jaygmc2NoZWRfcmVnaXN0ZXJfbXV0ZXgpOwotCi0JdHJhY2luZ19zdG9wX3NjaGVkX3N3aXRjaCgpOwotfQotCi0vKioKLSAqIHRyYWNpbmdfc2NoZWRfc3dpdGNoX2Fzc2lnbl90cmFjZSAtIGFzc2lnbiBhIHRyYWNlIGFycmF5IGZvciBjdHggc3dpdGNoCi0gKiBAdHI6IHRyYWNlIGFycmF5IHBvaW50ZXIgdG8gYXNzaWduCi0gKgotICogU29tZSB0cmFjZXJzIG1pZ2h0IHdhbnQgdG8gcmVjb3JkIHRoZSBjb250ZXh0IHN3aXRjaGVzIGluIHRoZWlyCi0gKiB0cmFjZS4gVGhpcyBmdW5jdGlvbiBsZXRzIHRob3NlIHRyYWNlcnMgYXNzaWduIHRoZSB0cmFjZSBhcnJheQotICogdG8gdXNlLgotICovCi12b2lkIHRyYWNpbmdfc2NoZWRfc3dpdGNoX2Fzc2lnbl90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCWN0eF90cmFjZSA9IHRyOwotfQotCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKaW5kZXggMTliZDg5Mi4uOGZiODRiMyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYwpAQCAtMzY1LDYgKzM2NSw2MiBAQAogCXdha2V1cF9jdXJyZW50X2NwdSA9IGNwdTsKIH0KIAorc3RhdGljIHZvaWQKK3RyYWNpbmdfc2NoZWRfc3dpdGNoX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsCisJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2NvbnRleHRfc3dpdGNoOworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gdHItPnRyYWNlX2J1ZmZlci5idWZmZXI7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZW50cnk7CisKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9DVFgsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJZW50cnktPnByZXZfcGlkCQkJPSBwcmV2LT5waWQ7CisJZW50cnktPnByZXZfcHJpbwkJPSBwcmV2LT5wcmlvOworCWVudHJ5LT5wcmV2X3N0YXRlCQk9IHByZXYtPnN0YXRlOworCWVudHJ5LT5uZXh0X3BpZAkJCT0gbmV4dC0+cGlkOworCWVudHJ5LT5uZXh0X3ByaW8JCT0gbmV4dC0+cHJpbzsKKwllbnRyeS0+bmV4dF9zdGF0ZQkJPSBuZXh0LT5zdGF0ZTsKKwllbnRyeS0+bmV4dF9jcHUJPSB0YXNrX2NwdShuZXh0KTsKKworCWlmICghY2FsbF9maWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCisJCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIGZsYWdzLCBwYyk7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjaW5nX3NjaGVkX3dha2V1cF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICp3YWtlZSwKKwkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmZXZlbnRfd2FrZXVwOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmVudHJ5OworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gdHItPnRyYWNlX2J1ZmZlci5idWZmZXI7CisKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9XQUtFLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOworCWlmICghZXZlbnQpCisJCXJldHVybjsKKwllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5wcmV2X3BpZAkJCT0gY3Vyci0+cGlkOworCWVudHJ5LT5wcmV2X3ByaW8JCT0gY3Vyci0+cHJpbzsKKwllbnRyeS0+cHJldl9zdGF0ZQkJPSBjdXJyLT5zdGF0ZTsKKwllbnRyeS0+bmV4dF9waWQJCQk9IHdha2VlLT5waWQ7CisJZW50cnktPm5leHRfcHJpbwkJPSB3YWtlZS0+cHJpbzsKKwllbnRyeS0+bmV4dF9zdGF0ZQkJPSB3YWtlZS0+c3RhdGU7CisJZW50cnktPm5leHRfY3B1CQkJPSB0YXNrX2NwdSh3YWtlZSk7CisKKwlpZiAoIWNhbGxfZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQorCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCBmbGFncywgcGMpOworfQorCiBzdGF0aWMgdm9pZCBub3RyYWNlCiBwcm9iZV93YWtldXBfc2NoZWRfc3dpdGNoKHZvaWQgKmlnbm9yZSwKIAkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VxLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VxLmMKaW5kZXggMWYyNGVkOS4uZjhiNDVkOCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NlcS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zZXEuYwpAQCAtMjcsMTAgKzI3LDE5IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vfc2VxLmg+CiAKIC8qIEhvdyBtdWNoIGJ1ZmZlciBpcyBsZWZ0IG9uIHRoZSB0cmFjZV9zZXE/ICovCi0jZGVmaW5lIFRSQUNFX1NFUV9CVUZfTEVGVChzKSAoKFBBR0VfU0laRSAtIDEpIC0gKHMpLT5sZW4pCisjZGVmaW5lIFRSQUNFX1NFUV9CVUZfTEVGVChzKSBzZXFfYnVmX2J1ZmZlcl9sZWZ0KCYocyktPnNlcSkKIAogLyogSG93IG11Y2ggYnVmZmVyIGlzIHdyaXR0ZW4/ICovCi0jZGVmaW5lIFRSQUNFX1NFUV9CVUZfVVNFRChzKSBtaW4oKHMpLT5sZW4sICh1bnNpZ25lZCBpbnQpKFBBR0VfU0laRSAtIDEpKQorI2RlZmluZSBUUkFDRV9TRVFfQlVGX1VTRUQocykgc2VxX2J1Zl91c2VkKCYocyktPnNlcSkKKworLyoKKyAqIHRyYWNlX3NlcSBzaG91bGQgd29yayB3aXRoIGJlaW5nIGluaXRpYWxpemVkIHdpdGggMHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3RyYWNlX3NlcV9pbml0KHN0cnVjdCB0cmFjZV9zZXEgKnMpCit7CisJaWYgKHVubGlrZWx5KCFzLT5zZXEuc2l6ZSkpCisJCXRyYWNlX3NlcV9pbml0KHMpOworfQogCiAvKioKICAqIHRyYWNlX3ByaW50X3NlcSAtIG1vdmUgdGhlIGNvbnRlbnRzIG9mIHRyYWNlX3NlcSBpbnRvIGEgc2VxX2ZpbGUKQEAgLTQzLDEwICs1MiwxMSBAQAogICovCiBpbnQgdHJhY2VfcHJpbnRfc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRyYWNlX3NlcSAqcykKIHsKLQl1bnNpZ25lZCBpbnQgbGVuID0gVFJBQ0VfU0VRX0JVRl9VU0VEKHMpOwogCWludCByZXQ7CiAKLQlyZXQgPSBzZXFfd3JpdGUobSwgcy0+YnVmZmVyLCBsZW4pOworCV9fdHJhY2Vfc2VxX2luaXQocyk7CisKKwlyZXQgPSBzZXFfYnVmX3ByaW50X3NlcShtLCAmcy0+c2VxKTsKIAogCS8qCiAJICogT25seSByZXNldCB0aGlzIGJ1ZmZlciBpZiB3ZSBzdWNjZXNzZnVsbHkgd3JvdGUgdG8gdGhlCkBAIC02OSwzNCArNzksMjYgQEAKICAqIHRyYWNlX3NlcV9wcmludGYoKSBpcyB1c2VkIHRvIHN0b3JlIHN0cmluZ3MgaW50byBhIHNwZWNpYWwKICAqIGJ1ZmZlciAoQHMpLiBUaGVuIHRoZSBvdXRwdXQgbWF5IGJlIGVpdGhlciB1c2VkIGJ5CiAgKiB0aGUgc2VxdWVuY2VyIG9yIHB1bGxlZCBpbnRvIGFub3RoZXIgYnVmZmVyLgotICoKLSAqIFJldHVybnMgMSBpZiB3ZSBzdWNjZXNzZnVsbHkgd3JpdHRlbiBhbGwgdGhlIGNvbnRlbnRzIHRvCi0gKiAgIHRoZSBidWZmZXIuCi0gICogUmV0dXJucyAwIGlmIHdlIHRoZSBsZW5ndGggdG8gd3JpdGUgaXMgYmlnZ2VyIHRoYW4gdGhlCi0gKiAgIHJlc2VydmVkIGJ1ZmZlciBzcGFjZS4gSW4gdGhpcyBjYXNlLCBub3RoaW5nIGdldHMgd3JpdHRlbi4KICAqLwotaW50IHRyYWNlX3NlcV9wcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCit2b2lkIHRyYWNlX3NlcV9wcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7Ci0JdW5zaWduZWQgaW50IGxlbiA9IFRSQUNFX1NFUV9CVUZfTEVGVChzKTsKKwl1bnNpZ25lZCBpbnQgc2F2ZV9sZW4gPSBzLT5zZXEubGVuOwogCXZhX2xpc3QgYXA7Ci0JaW50IHJldDsKIAotCWlmIChzLT5mdWxsIHx8ICFsZW4pCi0JCXJldHVybiAwOworCWlmIChzLT5mdWxsKQorCQlyZXR1cm47CisKKwlfX3RyYWNlX3NlcV9pbml0KHMpOwogCiAJdmFfc3RhcnQoYXAsIGZtdCk7Ci0JcmV0ID0gdnNucHJpbnRmKHMtPmJ1ZmZlciArIHMtPmxlbiwgbGVuLCBmbXQsIGFwKTsKKwlzZXFfYnVmX3ZwcmludGYoJnMtPnNlcSwgZm10LCBhcCk7CiAJdmFfZW5kKGFwKTsKIAogCS8qIElmIHdlIGNhbid0IHdyaXRlIGl0IGFsbCwgZG9uJ3QgYm90aGVyIHdyaXRpbmcgYW55dGhpbmcgKi8KLQlpZiAocmV0ID49IGxlbikgeworCWlmICh1bmxpa2VseShzZXFfYnVmX2hhc19vdmVyZmxvd2VkKCZzLT5zZXEpKSkgeworCQlzLT5zZXEubGVuID0gc2F2ZV9sZW47CiAJCXMtPmZ1bGwgPSAxOwotCQlyZXR1cm4gMDsKIAl9Ci0KLQlzLT5sZW4gKz0gcmV0OwotCi0JcmV0dXJuIDE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9zZXFfcHJpbnRmKTsKIApAQCAtMTA3LDI1ICsxMDksMjMgQEAKICAqIEBubWFza2JpdHM6CVRoZSBudW1iZXIgb2YgYml0cyB0aGF0IGFyZSB2YWxpZCBpbiBAbWFza3AKICAqCiAgKiBXcml0ZXMgYSBBU0NJSSByZXByZXNlbnRhdGlvbiBvZiBhIGJpdG1hc2sgc3RyaW5nIGludG8gQHMuCi0gKgotICogUmV0dXJucyAxIGlmIHdlIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGFsbCB0aGUgY29udGVudHMgdG8KLSAqICAgdGhlIGJ1ZmZlci4KLSAqIFJldHVybnMgMCBpZiB3ZSB0aGUgbGVuZ3RoIHRvIHdyaXRlIGlzIGJpZ2dlciB0aGFuIHRoZQotICogICByZXNlcnZlZCBidWZmZXIgc3BhY2UuIEluIHRoaXMgY2FzZSwgbm90aGluZyBnZXRzIHdyaXR0ZW4uCiAgKi8KLWludCB0cmFjZV9zZXFfYml0bWFzayhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCB1bnNpZ25lZCBsb25nICptYXNrcCwKK3ZvaWQgdHJhY2Vfc2VxX2JpdG1hc2soc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgdW5zaWduZWQgbG9uZyAqbWFza3AsCiAJCSAgICAgIGludCBubWFza2JpdHMpCiB7Ci0JdW5zaWduZWQgaW50IGxlbiA9IFRSQUNFX1NFUV9CVUZfTEVGVChzKTsKLQlpbnQgcmV0OworCXVuc2lnbmVkIGludCBzYXZlX2xlbiA9IHMtPnNlcS5sZW47CiAKLQlpZiAocy0+ZnVsbCB8fCAhbGVuKQotCQlyZXR1cm4gMDsKKwlpZiAocy0+ZnVsbCkKKwkJcmV0dXJuOwogCi0JcmV0ID0gYml0bWFwX3NjbnByaW50ZihzLT5idWZmZXIsIGxlbiwgbWFza3AsIG5tYXNrYml0cyk7Ci0Jcy0+bGVuICs9IHJldDsKKwlfX3RyYWNlX3NlcV9pbml0KHMpOwogCi0JcmV0dXJuIDE7CisJc2VxX2J1Zl9iaXRtYXNrKCZzLT5zZXEsIG1hc2twLCBubWFza2JpdHMpOworCisJaWYgKHVubGlrZWx5KHNlcV9idWZfaGFzX292ZXJmbG93ZWQoJnMtPnNlcSkpKSB7CisJCXMtPnNlcS5sZW4gPSBzYXZlX2xlbjsKKwkJcy0+ZnVsbCA9IDE7CisJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vfc2VxX2JpdG1hc2spOwogCkBAIC0xMzksMjggKzEzOSwyMyBAQAogICogdHJhY2Vfc2VxX3ByaW50ZiBpcyB1c2VkIHRvIHN0b3JlIHN0cmluZ3MgaW50byBhIHNwZWNpYWwKICAqIGJ1ZmZlciAoQHMpLiBUaGVuIHRoZSBvdXRwdXQgbWF5IGJlIGVpdGhlciB1c2VkIGJ5CiAgKiB0aGUgc2VxdWVuY2VyIG9yIHB1bGxlZCBpbnRvIGFub3RoZXIgYnVmZmVyLgotICoKLSAqIFJldHVybnMgaG93IG11Y2ggaXQgd3JvdGUgdG8gdGhlIGJ1ZmZlci4KICAqLwotaW50IHRyYWNlX3NlcV92cHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQordm9pZCB0cmFjZV9zZXFfdnByaW50ZihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKLQl1bnNpZ25lZCBpbnQgbGVuID0gVFJBQ0VfU0VRX0JVRl9MRUZUKHMpOwotCWludCByZXQ7CisJdW5zaWduZWQgaW50IHNhdmVfbGVuID0gcy0+c2VxLmxlbjsKIAotCWlmIChzLT5mdWxsIHx8ICFsZW4pCi0JCXJldHVybiAwOworCWlmIChzLT5mdWxsKQorCQlyZXR1cm47CiAKLQlyZXQgPSB2c25wcmludGYocy0+YnVmZmVyICsgcy0+bGVuLCBsZW4sIGZtdCwgYXJncyk7CisJX190cmFjZV9zZXFfaW5pdChzKTsKKworCXNlcV9idWZfdnByaW50Zigmcy0+c2VxLCBmbXQsIGFyZ3MpOwogCiAJLyogSWYgd2UgY2FuJ3Qgd3JpdGUgaXQgYWxsLCBkb24ndCBib3RoZXIgd3JpdGluZyBhbnl0aGluZyAqLwotCWlmIChyZXQgPj0gbGVuKSB7CisJaWYgKHVubGlrZWx5KHNlcV9idWZfaGFzX292ZXJmbG93ZWQoJnMtPnNlcSkpKSB7CisJCXMtPnNlcS5sZW4gPSBzYXZlX2xlbjsKIAkJcy0+ZnVsbCA9IDE7Ci0JCXJldHVybiAwOwogCX0KLQotCXMtPmxlbiArPSByZXQ7Ci0KLQlyZXR1cm4gbGVuOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vfc2VxX3ZwcmludGYpOwogCkBAIC0xNzgsMjggKzE3MywyNCBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIHRoZSBmb3JtYXQgYW5kIHRoZSBiaW5hcnkgYXJyYXkgYW5kIGZpbmlzaAogICogdGhlIGNvbnZlcnNpb24gaW50byB0aGUgQVNDSUkgc3RyaW5nIHdpdGhpbiB0aGUgYnVmZmVyLgotICoKLSAqIFJldHVybnMgaG93IG11Y2ggaXQgd3JvdGUgdG8gdGhlIGJ1ZmZlci4KICAqLwotaW50IHRyYWNlX3NlcV9icHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgdTMyICpiaW5hcnkpCit2b2lkIHRyYWNlX3NlcV9icHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgdTMyICpiaW5hcnkpCiB7Ci0JdW5zaWduZWQgaW50IGxlbiA9IFRSQUNFX1NFUV9CVUZfTEVGVChzKTsKLQlpbnQgcmV0OworCXVuc2lnbmVkIGludCBzYXZlX2xlbiA9IHMtPnNlcS5sZW47CiAKLQlpZiAocy0+ZnVsbCB8fCAhbGVuKQotCQlyZXR1cm4gMDsKKwlpZiAocy0+ZnVsbCkKKwkJcmV0dXJuOwogCi0JcmV0ID0gYnN0cl9wcmludGYocy0+YnVmZmVyICsgcy0+bGVuLCBsZW4sIGZtdCwgYmluYXJ5KTsKKwlfX3RyYWNlX3NlcV9pbml0KHMpOworCisJc2VxX2J1Zl9icHJpbnRmKCZzLT5zZXEsIGZtdCwgYmluYXJ5KTsKIAogCS8qIElmIHdlIGNhbid0IHdyaXRlIGl0IGFsbCwgZG9uJ3QgYm90aGVyIHdyaXRpbmcgYW55dGhpbmcgKi8KLQlpZiAocmV0ID49IGxlbikgeworCWlmICh1bmxpa2VseShzZXFfYnVmX2hhc19vdmVyZmxvd2VkKCZzLT5zZXEpKSkgeworCQlzLT5zZXEubGVuID0gc2F2ZV9sZW47CiAJCXMtPmZ1bGwgPSAxOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KLQotCXMtPmxlbiArPSByZXQ7Ci0KLQlyZXR1cm4gbGVuOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vfc2VxX2JwcmludGYpOwogCkBAIC0yMTIsMjUgKzIwMywyMiBAQAogICogY29weSB0byB1c2VyIHJvdXRpbmVzLiBUaGlzIGZ1bmN0aW9uIHJlY29yZHMgYSBzaW1wbGUgc3RyaW5nCiAgKiBpbnRvIGEgc3BlY2lhbCBidWZmZXIgKEBzKSBmb3IgbGF0ZXIgcmV0cmlldmFsIGJ5IGEgc2VxdWVuY2VyCiAgKiBvciBvdGhlciBtZWNoYW5pc20uCi0gKgotICogUmV0dXJucyBob3cgbXVjaCBpdCB3cm90ZSB0byB0aGUgYnVmZmVyLgogICovCi1pbnQgdHJhY2Vfc2VxX3B1dHMoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqc3RyKQordm9pZCB0cmFjZV9zZXFfcHV0cyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpzdHIpCiB7CiAJdW5zaWduZWQgaW50IGxlbiA9IHN0cmxlbihzdHIpOwogCiAJaWYgKHMtPmZ1bGwpCi0JCXJldHVybiAwOworCQlyZXR1cm47CisKKwlfX3RyYWNlX3NlcV9pbml0KHMpOwogCiAJaWYgKGxlbiA+IFRSQUNFX1NFUV9CVUZfTEVGVChzKSkgewogCQlzLT5mdWxsID0gMTsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAl9CiAKLQltZW1jcHkocy0+YnVmZmVyICsgcy0+bGVuLCBzdHIsIGxlbik7Ci0Jcy0+bGVuICs9IGxlbjsKLQotCXJldHVybiBsZW47CisJc2VxX2J1Zl9wdXRtZW0oJnMtPnNlcSwgc3RyLCBsZW4pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vfc2VxX3B1dHMpOwogCkBAIC0yNDMsMjIgKzIzMSwyMCBAQAogICogY29weSB0byB1c2VyIHJvdXRpbmVzLiBUaGlzIGZ1bmN0aW9uIHJlY29yZHMgYSBzaW1wbGUgY2hhcmF0ZXIKICAqIGludG8gYSBzcGVjaWFsIGJ1ZmZlciAoQHMpIGZvciBsYXRlciByZXRyaWV2YWwgYnkgYSBzZXF1ZW5jZXIKICAqIG9yIG90aGVyIG1lY2hhbmlzbS4KLSAqCi0gKiBSZXR1cm5zIGhvdyBtdWNoIGl0IHdyb3RlIHRvIHRoZSBidWZmZXIuCiAgKi8KLWludCB0cmFjZV9zZXFfcHV0YyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBjaGFyIGMpCit2b2lkIHRyYWNlX3NlcV9wdXRjKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGNoYXIgYykKIHsKIAlpZiAocy0+ZnVsbCkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKKworCV9fdHJhY2Vfc2VxX2luaXQocyk7CiAKIAlpZiAoVFJBQ0VfU0VRX0JVRl9MRUZUKHMpIDwgMSkgewogCQlzLT5mdWxsID0gMTsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAl9CiAKLQlzLT5idWZmZXJbcy0+bGVuKytdID0gYzsKLQotCXJldHVybiAxOworCXNlcV9idWZfcHV0Yygmcy0+c2VxLCBjKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3NlcV9wdXRjKTsKIApAQCAtMjcxLDI5ICsyNTcsMjMgQEAKICAqIFRoZXJlIG1heSBiZSBjYXNlcyB3aGVyZSByYXcgbWVtb3J5IG5lZWRzIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUKICAqIGJ1ZmZlciBhbmQgYSBzdHJjcHkoKSB3b3VsZCBub3Qgd29yay4gVXNpbmcgdGhpcyBmdW5jdGlvbiBhbGxvd3MKICAqIGZvciBzdWNoIGNhc2VzLgotICoKLSAqIFJldHVybnMgaG93IG11Y2ggaXQgd3JvdGUgdG8gdGhlIGJ1ZmZlci4KICAqLwotaW50IHRyYWNlX3NlcV9wdXRtZW0oc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgdm9pZCAqbWVtLCB1bnNpZ25lZCBpbnQgbGVuKQordm9pZCB0cmFjZV9zZXFfcHV0bWVtKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZiAocy0+ZnVsbCkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKKworCV9fdHJhY2Vfc2VxX2luaXQocyk7CiAKIAlpZiAobGVuID4gVFJBQ0VfU0VRX0JVRl9MRUZUKHMpKSB7CiAJCXMtPmZ1bGwgPSAxOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAotCW1lbWNweShzLT5idWZmZXIgKyBzLT5sZW4sIG1lbSwgbGVuKTsKLQlzLT5sZW4gKz0gbGVuOwotCi0JcmV0dXJuIGxlbjsKKwlzZXFfYnVmX3B1dG1lbSgmcy0+c2VxLCBtZW0sIGxlbik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9zZXFfcHV0bWVtKTsKIAotI2RlZmluZSBNQVhfTUVNSEVYX0JZVEVTCThVCi0jZGVmaW5lIEhFWF9DSEFSUwkJKE1BWF9NRU1IRVhfQllURVMqMiArIDEpCi0KIC8qKgogICogdHJhY2Vfc2VxX3B1dG1lbV9oZXggLSB3cml0ZSByYXcgbWVtb3J5IGludG8gdGhlIGJ1ZmZlciBpbiBBU0NJSSBoZXgKICAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCkBAIC0zMDMsNDEgKzI4MywzMSBAQAogICogVGhpcyBpcyBzaW1pbGFyIHRvIHRyYWNlX3NlcV9wdXRtZW0oKSBleGNlcHQgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgdGhlCiAgKiByYXcgbWVtb3J5IGludG8gdGhlIGJ1ZmZlciBpdCB3cml0ZXMgaXRzIEFTQ0lJIHJlcHJlc2VudGF0aW9uIG9mIGl0CiAgKiBpbiBoZXggY2hhcmFjdGVycy4KLSAqCi0gKiBSZXR1cm5zIGhvdyBtdWNoIGl0IHdyb3RlIHRvIHRoZSBidWZmZXIuCiAgKi8KLWludCB0cmFjZV9zZXFfcHV0bWVtX2hleChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCB2b2lkICptZW0sCit2b2lkIHRyYWNlX3NlcV9wdXRtZW1faGV4KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHZvaWQgKm1lbSwKIAkJCSB1bnNpZ25lZCBpbnQgbGVuKQogewotCXVuc2lnbmVkIGNoYXIgaGV4W0hFWF9DSEFSU107Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IG1lbTsKLQl1bnNpZ25lZCBpbnQgc3RhcnRfbGVuOwotCWludCBpLCBqOwotCWludCBjbnQgPSAwOworCXVuc2lnbmVkIGludCBzYXZlX2xlbiA9IHMtPnNlcS5sZW47CiAKIAlpZiAocy0+ZnVsbCkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAotCXdoaWxlIChsZW4pIHsKLQkJc3RhcnRfbGVuID0gbWluKGxlbiwgSEVYX0NIQVJTIC0gMSk7Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgc3RhcnRfbGVuOyBpKyspIHsKLSNlbHNlCi0JCWZvciAoaSA9IHN0YXJ0X2xlbi0xLCBqID0gMDsgaSA+PSAwOyBpLS0pIHsKLSNlbmRpZgotCQkJaGV4W2orK10gPSBoZXhfYXNjX2hpKGRhdGFbaV0pOwotCQkJaGV4W2orK10gPSBoZXhfYXNjX2xvKGRhdGFbaV0pOwotCQl9Ci0JCWlmIChXQVJOX09OX09OQ0UoaiA9PSAwIHx8IGovMiA+IGxlbikpCi0JCQlicmVhazsKKwlfX3RyYWNlX3NlcV9pbml0KHMpOwogCi0JCS8qIGogaW5jcmVtZW50cyB0d2ljZSBwZXIgbG9vcCAqLwotCQlsZW4gLT0gaiAvIDI7Ci0JCWhleFtqKytdID0gJyAnOwotCi0JCWNudCArPSB0cmFjZV9zZXFfcHV0bWVtKHMsIGhleCwgaik7CisJLyogRWFjaCBieXRlIGlzIHJlcHJlc2VudGVkIGJ5IHR3byBjaGFycyAqLworCWlmIChsZW4gKiAyID4gVFJBQ0VfU0VRX0JVRl9MRUZUKHMpKSB7CisJCXMtPmZ1bGwgPSAxOworCQlyZXR1cm47CiAJfQotCXJldHVybiBjbnQ7CisKKwkvKiBUaGUgYWRkZWQgc3BhY2VzIGNhbiBzdGlsbCBjYXVzZSBhbiBvdmVyZmxvdyAqLworCXNlcV9idWZfcHV0bWVtX2hleCgmcy0+c2VxLCBtZW0sIGxlbik7CisKKwlpZiAodW5saWtlbHkoc2VxX2J1Zl9oYXNfb3ZlcmZsb3dlZCgmcy0+c2VxKSkpIHsKKwkJcy0+c2VxLmxlbiA9IHNhdmVfbGVuOworCQlzLT5mdWxsID0gMTsKKwkJcmV0dXJuOworCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3NlcV9wdXRtZW1faGV4KTsKIApAQCAtMzU1LDMwICszMjUsMjcgQEAKICAqLwogaW50IHRyYWNlX3NlcV9wYXRoKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogewotCXVuc2lnbmVkIGNoYXIgKnA7CisJdW5zaWduZWQgaW50IHNhdmVfbGVuID0gcy0+c2VxLmxlbjsKIAogCWlmIChzLT5mdWxsKQogCQlyZXR1cm4gMDsKIAorCV9fdHJhY2Vfc2VxX2luaXQocyk7CisKIAlpZiAoVFJBQ0VfU0VRX0JVRl9MRUZUKHMpIDwgMSkgewogCQlzLT5mdWxsID0gMTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JcCA9IGRfcGF0aChwYXRoLCBzLT5idWZmZXIgKyBzLT5sZW4sIFBBR0VfU0laRSAtIHMtPmxlbik7Ci0JaWYgKCFJU19FUlIocCkpIHsKLQkJcCA9IG1hbmdsZV9wYXRoKHMtPmJ1ZmZlciArIHMtPmxlbiwgcCwgIlxuIik7Ci0JCWlmIChwKSB7Ci0JCQlzLT5sZW4gPSBwIC0gcy0+YnVmZmVyOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9IGVsc2UgewotCQlzLT5idWZmZXJbcy0+bGVuKytdID0gJz8nOwotCQlyZXR1cm4gMTsKKwlzZXFfYnVmX3BhdGgoJnMtPnNlcSwgcGF0aCwgIlxuIik7CisKKwlpZiAodW5saWtlbHkoc2VxX2J1Zl9oYXNfb3ZlcmZsb3dlZCgmcy0+c2VxKSkpIHsKKwkJcy0+c2VxLmxlbiA9IHNhdmVfbGVuOworCQlzLT5mdWxsID0gMTsKKwkJcmV0dXJuIDA7CiAJfQogCi0Jcy0+ZnVsbCA9IDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9zZXFfcGF0aCk7CiAKQEAgLTQwNCwyNSArMzcxLDcgQEAKICAqLwogaW50IHRyYWNlX3NlcV90b191c2VyKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNoYXIgX191c2VyICp1YnVmLCBpbnQgY250KQogewotCWludCBsZW47Ci0JaW50IHJldDsKLQotCWlmICghY250KQotCQlyZXR1cm4gMDsKLQotCWlmIChzLT5sZW4gPD0gcy0+cmVhZHBvcykKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWxlbiA9IHMtPmxlbiAtIHMtPnJlYWRwb3M7Ci0JaWYgKGNudCA+IGxlbikKLQkJY250ID0gbGVuOwotCXJldCA9IGNvcHlfdG9fdXNlcih1YnVmLCBzLT5idWZmZXIgKyBzLT5yZWFkcG9zLCBjbnQpOwotCWlmIChyZXQgPT0gY250KQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWNudCAtPSByZXQ7Ci0KLQlzLT5yZWFkcG9zICs9IGNudDsKLQlyZXR1cm4gY250OworCV9fdHJhY2Vfc2VxX2luaXQocyk7CisJcmV0dXJuIHNlcV9idWZfdG9fdXNlcigmcy0+c2VxLCB1YnVmLCBjbnQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vfc2VxX3RvX3VzZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCAyOTIyOGM0Li5kZmUwMGE0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQgPSBpdGVyLT5lbnQ7CiAJc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKnRyYWNlOwogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeTsKLQlpbnQgaSwgcmV0LCBzeXNjYWxsOworCWludCBpLCBzeXNjYWxsOwogCiAJdHJhY2UgPSAodHlwZW9mKHRyYWNlKSllbnQ7CiAJc3lzY2FsbCA9IHRyYWNlLT5ucjsKQEAgLTEyOCwzNSArMTI4LDI4IEBACiAJCWdvdG8gZW5kOwogCX0KIAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzKCIsIGVudHJ5LT5uYW1lKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXRyYWNlX3NlcV9wcmludGYocywgIiVzKCIsIGVudHJ5LT5uYW1lKTsKIAogCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7CisKKwkJaWYgKHRyYWNlX3NlcV9oYXNfb3ZlcmZsb3dlZChzKSkKKwkJCWdvdG8gZW5kOworCiAJCS8qIHBhcmFtZXRlciB0eXBlcyAqLwotCQlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1ZFUkJPU0UpIHsKLQkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzICIsIGVudHJ5LT50eXBlc1tpXSk7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCX0KKwkJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9WRVJCT1NFKQorCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMgIiwgZW50cnktPnR5cGVzW2ldKTsKKwogCQkvKiBwYXJhbWV0ZXIgdmFsdWVzICovCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzOiAlbHglcyIsIGVudHJ5LT5hcmdzW2ldLAotCQkJCSAgICAgICB0cmFjZS0+YXJnc1tpXSwKLQkJCQkgICAgICAgaSA9PSBlbnRyeS0+bmJfYXJncyAtIDEgPyAiIiA6ICIsICIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6ICVseCVzIiwgZW50cnktPmFyZ3NbaV0sCisJCQkJIHRyYWNlLT5hcmdzW2ldLAorCQkJCSBpID09IGVudHJ5LT5uYl9hcmdzIC0gMSA/ICIiIDogIiwgIik7CiAJfQogCi0JcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJyknKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCisJdHJhY2Vfc2VxX3B1dGMocywgJyknKTsKIGVuZDoKLQlyZXQgPSAgdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdApAQCAtMTY4LDcgKzE2MSw2IEBACiAJc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCAqdHJhY2U7CiAJaW50IHN5c2NhbGw7CiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5OwotCWludCByZXQ7CiAKIAl0cmFjZSA9ICh0eXBlb2YodHJhY2UpKWVudDsKIAlzeXNjYWxsID0gdHJhY2UtPm5yOwpAQCAtMTc2LDcgKzE2OCw3IEBACiAKIAlpZiAoIWVudHJ5KSB7CiAJCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOwotCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoZW50cnktPmV4aXRfZXZlbnQtPmV2ZW50LnR5cGUgIT0gZW50LT50eXBlKSB7CkBAIC0xODQsMTIgKzE3NiwxMSBAQAogCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CiAJfQogCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMgLT4gMHglbHhcbiIsIGVudHJ5LT5uYW1lLAorCXRyYWNlX3NlcV9wcmludGYocywgIiVzIC0+IDB4JWx4XG4iLCBlbnRyeS0+bmFtZSwKIAkJCQl0cmFjZS0+cmV0KTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKyBvdXQ6CisJcmV0dXJuIHRyYWNlX2hhbmRsZV9yZXR1cm4ocyk7CiB9CiAKIGV4dGVybiBjaGFyICpfX2JhZF90eXBlX3NpemUodm9pZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfdXByb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfdXByb2JlLmMKaW5kZXggMzNmZjZhMi4uODUyMGFjYyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3Vwcm9iZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV91cHJvYmUuYwpAQCAtNTUyLDggKzU1Miw3IEBACiAJcmV0dXJuIHJldDsKIAogZmFpbF9hZGRyZXNzX3BhcnNlOgotCWlmIChpbm9kZSkKLQkJaXB1dChpbm9kZSk7CisJaXB1dChpbm9kZSk7CiAKIAlwcl9pbmZvKCJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyBvciBmaWxlLlxuIik7CiAKQEAgLTYwNiw3ICs2MDUsNyBAQAogCWZvciAoaSA9IDA7IGkgPCB0dS0+dHAubnJfYXJnczsgaSsrKQogCQlzZXFfcHJpbnRmKG0sICIgJXM9JXMiLCB0dS0+dHAuYXJnc1tpXS5uYW1lLCB0dS0+dHAuYXJnc1tpXS5jb21tKTsKIAotCXNlcV9wcmludGYobSwgIlxuIik7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg1MiwxNiArODUxLDE0IEBACiAJdHUgPSBjb250YWluZXJfb2YoZXZlbnQsIHN0cnVjdCB0cmFjZV91cHJvYmUsIHRwLmNhbGwuZXZlbnQpOwogCiAJaWYgKGlzX3JldF9wcm9iZSh0dSkpIHsKLQkJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogKDB4JWx4IDwtIDB4JWx4KSIsCi0JCQkJCWZ0cmFjZV9ldmVudF9uYW1lKCZ0dS0+dHAuY2FsbCksCi0JCQkJCWVudHJ5LT52YWRkclsxXSwgZW50cnktPnZhZGRyWzBdKSkKLQkJCWdvdG8gcGFydGlhbDsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6ICgweCVseCA8LSAweCVseCkiLAorCQkJCSBmdHJhY2VfZXZlbnRfbmFtZSgmdHUtPnRwLmNhbGwpLAorCQkJCSBlbnRyeS0+dmFkZHJbMV0sIGVudHJ5LT52YWRkclswXSk7CiAJCWRhdGEgPSBEQVRBT0ZfVFJBQ0VfRU5UUlkoZW50cnksIHRydWUpOwogCX0gZWxzZSB7Ci0JCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6ICgweCVseCkiLAotCQkJCQlmdHJhY2VfZXZlbnRfbmFtZSgmdHUtPnRwLmNhbGwpLAotCQkJCQllbnRyeS0+dmFkZHJbMF0pKQotCQkJZ290byBwYXJ0aWFsOworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogKDB4JWx4KSIsCisJCQkJIGZ0cmFjZV9ldmVudF9uYW1lKCZ0dS0+dHAuY2FsbCksCisJCQkJIGVudHJ5LT52YWRkclswXSk7CiAJCWRhdGEgPSBEQVRBT0ZfVFJBQ0VfRU5UUlkoZW50cnksIGZhbHNlKTsKIAl9CiAKQEAgLTg2OSwxNCArODY2LDEzIEBACiAJCXN0cnVjdCBwcm9iZV9hcmcgKnBhcmcgPSAmdHUtPnRwLmFyZ3NbaV07CiAKIAkJaWYgKCFwYXJnLT50eXBlLT5wcmludChzLCBwYXJnLT5uYW1lLCBkYXRhICsgcGFyZy0+b2Zmc2V0LCBlbnRyeSkpCi0JCQlnb3RvIHBhcnRpYWw7CisJCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodHJhY2Vfc2VxX3B1dHMocywgIlxuIikpCi0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CiAKLXBhcnRpYWw6Ci0JcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworIG91dDoKKwlyZXR1cm4gdHJhY2VfaGFuZGxlX3JldHVybihzKTsKIH0KIAogdHlwZWRlZiBib29sICgqZmlsdGVyX2Z1bmNfdCkoc3RydWN0IHVwcm9iZV9jb25zdW1lciAqc2VsZiwKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggNGUzNWE1ZC4uZDc4MDM1MSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTEyMzgsMjEgKzEyMzgsOSBAQAogCSAgUkNVIGdyYWNlIHBlcmlvZCBwZXJzaXN0cywgYWRkaXRpb25hbCBDUFUgc3RhbGwgd2FybmluZ3MgYXJlCiAJICBwcmludGVkIGF0IG1vcmUgd2lkZWx5IHNwYWNlZCBpbnRlcnZhbHMuCiAKLWNvbmZpZyBSQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UKLQlib29sICJQcmludCBhZGRpdGlvbmFsIHBlci10YXNrIGluZm9ybWF0aW9uIGZvciBSQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIgotCWRlcGVuZHMgb24gVFJFRV9QUkVFTVBUX1JDVQotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGNhdXNlcyBSQ1UgdG8gcHJpbnRrIGRldGFpbGVkIHBlci10YXNrIGluZm9ybWF0aW9uCi0JICBmb3IgYW55IHRhc2tzIHRoYXQgYXJlIHN0YWxsaW5nIHRoZSBjdXJyZW50IFJDVSBncmFjZSBwZXJpb2QuCi0KLQkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgotCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VjaCBjaGVja3MuCi0KIGNvbmZpZyBSQ1VfQ1BVX1NUQUxMX0lORk8KIAlib29sICJQcmludCBhZGRpdGlvbmFsIGRpYWdub3N0aWNzIG9uIFJDVSBDUFUgc3RhbGwiCi0JZGVwZW5kcyBvbiAoVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVSkgJiYgREVCVUdfS0VSTkVMCisJZGVwZW5kcyBvbiAoVFJFRV9SQ1UgfHwgUFJFRU1QVF9SQ1UpICYmIERFQlVHX0tFUk5FTAogCWRlZmF1bHQgbgogCWhlbHAKIAkgIEZvciBlYWNoIHN0YWxsZWQgQ1BVIHRoYXQgaXMgYXdhcmUgb2YgdGhlIGN1cnJlbnQgUkNVIGdyYWNlCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggMDIxMWQyYi4uOTIzYTE5MSAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtMTMsNyArMTMsNyBAQAogCSBzaGExLm8gbWQ1Lm8gaXJxX3JlZ3MubyBhcmd2X3NwbGl0Lm8gXAogCSBwcm9wb3J0aW9ucy5vIGZsZXhfcHJvcG9ydGlvbnMubyByYXRlbGltaXQubyBzaG93X21lbS5vIFwKIAkgaXNfc2luZ2xlX3RocmVhZGVkLm8gcGxpc3QubyBkZWNvbXByZXNzLm8ga29iamVjdF91ZXZlbnQubyBcCi0JIGVhcmx5Y3Bpby5vCisJIGVhcmx5Y3Bpby5vIHNlcV9idWYubwogCiBvYmotJChDT05GSUdfQVJDSF9IQVNfREVCVUdfU1RSSUNUX1VTRVJfQ09QWV9DSEVDS1MpICs9IHVzZXJjb3B5Lm8KIGxpYi0kKENPTkZJR19NTVUpICs9IGlvcmVtYXAubwpkaWZmIC0tZ2l0IGEvbGliL2RtYS1kZWJ1Zy5jIGIvbGliL2RtYS1kZWJ1Zy5jCmluZGV4IGFkZDgwY2MuLjk3MjJiZDIgMTAwNjQ0Ci0tLSBhL2xpYi9kbWEtZGVidWcuYworKysgYi9saWIvZG1hLWRlYnVnLmMKQEAgLTEwMiw2ICsxMDIsMTQgQEAKIC8qIEdsb2JhbCBkaXNhYmxlIGZsYWcgLSB3aWxsIGJlIHNldCBpbiBjYXNlIG9mIGFuIGVycm9yICovCiBzdGF0aWMgdTMyIGdsb2JhbF9kaXNhYmxlIF9fcmVhZF9tb3N0bHk7CiAKKy8qIEVhcmx5IGluaXRpYWxpemF0aW9uIGRpc2FibGUgZmxhZywgc2V0IGF0IHRoZSBlbmQgb2YgZG1hX2RlYnVnX2luaXQgKi8KK3N0YXRpYyBib29sIGRtYV9kZWJ1Z19pbml0aWFsaXplZCBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgaW5saW5lIGJvb2wgZG1hX2RlYnVnX2Rpc2FibGVkKHZvaWQpCit7CisJcmV0dXJuIGdsb2JhbF9kaXNhYmxlIHx8ICFkbWFfZGVidWdfaW5pdGlhbGl6ZWQ7Cit9CisKIC8qIEdsb2JhbCBlcnJvciBjb3VudCAqLwogc3RhdGljIHUzMiBlcnJvcl9jb3VudDsKIApAQCAtOTQ1LDcgKzk1Myw3IEBACiAJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqdW5pbml0aWFsaXplZF92YXIoZW50cnkpOwogCWludCBjb3VudDsKIAotCWlmIChnbG9iYWxfZGlzYWJsZSkKKwlpZiAoZG1hX2RlYnVnX2Rpc2FibGVkKCkpCiAJCXJldHVybiAwOwogCiAJc3dpdGNoIChhY3Rpb24pIHsKQEAgLTk3Myw3ICs5ODEsNyBAQAogewogCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbmI7CiAKLQlpZiAoZ2xvYmFsX2Rpc2FibGUpCisJaWYgKGRtYV9kZWJ1Z19kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAluYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBub3RpZmllcl9ibG9jayksIEdGUF9LRVJORUwpOwpAQCAtOTk0LDYgKzEwMDIsOSBAQAogewogCWludCBpOwogCisJLyogRG8gbm90IHVzZSBkbWFfZGVidWdfaW5pdGlhbGl6ZWQgaGVyZSwgc2luY2Ugd2UgcmVhbGx5IHdhbnQgdG8gYmUKKwkgKiBjYWxsZWQgdG8gc2V0IGRtYV9kZWJ1Z19pbml0aWFsaXplZAorCSAqLwogCWlmIChnbG9iYWxfZGlzYWJsZSkKIAkJcmV0dXJuOwogCkBAIC0xMDIxLDYgKzEwMzIsOCBAQAogCiAJbnJfdG90YWxfZW50cmllcyA9IG51bV9mcmVlX2VudHJpZXM7CiAKKwlkbWFfZGVidWdfaW5pdGlhbGl6ZWQgPSB0cnVlOworCiAJcHJfaW5mbygiRE1BLUFQSTogZGVidWdnaW5nIGVuYWJsZWQgYnkga2VybmVsIGNvbmZpZ1xuIik7CiB9CiAKQEAgLTEyNDMsNyArMTI1Niw3IEBACiB7CiAJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnk7CiAKLQlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCWlmICh1bmxpa2VseShkbWFfZGVidWdfZGlzYWJsZWQoKSkpCiAJCXJldHVybjsKIAogCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkKQEAgLTEyODMsNyArMTI5Niw3IEBACiAJc3RydWN0IGhhc2hfYnVja2V0ICpidWNrZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJaWYgKHVubGlrZWx5KGRtYV9kZWJ1Z19kaXNhYmxlZCgpKSkKIAkJcmV0dXJuOwogCiAJcmVmLmRldiA9IGRldjsKQEAgLTEzMjUsNyArMTMzOCw3IEBACiAJCS5kaXJlY3Rpb24gICAgICA9IGRpcmVjdGlvbiwKIAl9OwogCi0JaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwlpZiAodW5saWtlbHkoZG1hX2RlYnVnX2Rpc2FibGVkKCkpKQogCQlyZXR1cm47CiAKIAlpZiAobWFwX3NpbmdsZSkKQEAgLTEzNDIsNyArMTM1NSw3IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwogCWludCBpOwogCi0JaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwlpZiAodW5saWtlbHkoZG1hX2RlYnVnX2Rpc2FibGVkKCkpKQogCQlyZXR1cm47CiAKIAlmb3JfZWFjaF9zZyhzZywgcywgbWFwcGVkX2VudHMsIGkpIHsKQEAgLTEzOTUsNyArMTQwOCw3IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwogCWludCBtYXBwZWRfZW50cyA9IDAsIGk7CiAKLQlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCWlmICh1bmxpa2VseShkbWFfZGVidWdfZGlzYWJsZWQoKSkpCiAJCXJldHVybjsKIAogCWZvcl9lYWNoX3NnKHNnbGlzdCwgcywgbmVsZW1zLCBpKSB7CkBAIC0xNDI3LDcgKzE0NDAsNyBAQAogewogCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OwogCi0JaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwlpZiAodW5saWtlbHkoZG1hX2RlYnVnX2Rpc2FibGVkKCkpKQogCQlyZXR1cm47CiAKIAlpZiAodW5saWtlbHkodmlydCA9PSBOVUxMKSkKQEAgLTE0NjIsNyArMTQ3NSw3IEBACiAJCS5kaXJlY3Rpb24gICAgICA9IERNQV9CSURJUkVDVElPTkFMLAogCX07CiAKLQlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCWlmICh1bmxpa2VseShkbWFfZGVidWdfZGlzYWJsZWQoKSkpCiAJCXJldHVybjsKIAogCWNoZWNrX3VubWFwKCZyZWYpOwpAQCAtMTQ3NCw3ICsxNDg3LDcgQEAKIHsKIAlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5IHJlZjsKIAotCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJaWYgKHVubGlrZWx5KGRtYV9kZWJ1Z19kaXNhYmxlZCgpKSkKIAkJcmV0dXJuOwogCiAJcmVmLnR5cGUgICAgICAgICA9IGRtYV9kZWJ1Z19zaW5nbGU7CkBAIC0xNDk0LDcgKzE1MDcsNyBAQAogewogCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgcmVmOwogCi0JaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwlpZiAodW5saWtlbHkoZG1hX2RlYnVnX2Rpc2FibGVkKCkpKQogCQlyZXR1cm47CiAKIAlyZWYudHlwZSAgICAgICAgID0gZG1hX2RlYnVnX3NpbmdsZTsKQEAgLTE1MTUsNyArMTUyOCw3IEBACiB7CiAJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSByZWY7CiAKLQlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCWlmICh1bmxpa2VseShkbWFfZGVidWdfZGlzYWJsZWQoKSkpCiAJCXJldHVybjsKIAogCXJlZi50eXBlICAgICAgICAgPSBkbWFfZGVidWdfc2luZ2xlOwpAQCAtMTUzNiw3ICsxNTQ5LDcgQEAKIHsKIAlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5IHJlZjsKIAotCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJaWYgKHVubGlrZWx5KGRtYV9kZWJ1Z19kaXNhYmxlZCgpKSkKIAkJcmV0dXJuOwogCiAJcmVmLnR5cGUgICAgICAgICA9IGRtYV9kZWJ1Z19zaW5nbGU7CkBAIC0xNTU2LDcgKzE1NjksNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKIAlpbnQgbWFwcGVkX2VudHMgPSAwLCBpOwogCi0JaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwlpZiAodW5saWtlbHkoZG1hX2RlYnVnX2Rpc2FibGVkKCkpKQogCQlyZXR1cm47CiAKIAlmb3JfZWFjaF9zZyhzZywgcywgbmVsZW1zLCBpKSB7CkBAIC0xNTg5LDcgKzE2MDIsNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKIAlpbnQgbWFwcGVkX2VudHMgPSAwLCBpOwogCi0JaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwlpZiAodW5saWtlbHkoZG1hX2RlYnVnX2Rpc2FibGVkKCkpKQogCQlyZXR1cm47CiAKIAlmb3JfZWFjaF9zZyhzZywgcywgbmVsZW1zLCBpKSB7CmRpZmYgLS1naXQgYS9saWIvZHluYW1pY19kZWJ1Zy5jIGIvbGliL2R5bmFtaWNfZGVidWcuYwppbmRleCBkZmJhMDU1Li41Mjc3OTlkIDEwMDY0NAotLS0gYS9saWIvZHluYW1pY19kZWJ1Zy5jCisrKyBiL2xpYi9keW5hbWljX2RlYnVnLmMKQEAgLTU3Niw3ICs1NzYsNyBAQAogCX0gZWxzZSB7CiAJCWNoYXIgYnVmW1BSRUZJWF9TSVpFXTsKIAotCQlkZXZfcHJpbnRrX2VtaXQoNywgZGV2LCAiJXMlcyAlczogJXBWIiwKKwkJZGV2X3ByaW50a19lbWl0KExPR0xFVkVMX0RFQlVHLCBkZXYsICIlcyVzICVzOiAlcFYiLAogCQkJCWR5bmFtaWNfZW1pdF9wcmVmaXgoZGVzY3JpcHRvciwgYnVmKSwKIAkJCQlkZXZfZHJpdmVyX3N0cmluZyhkZXYpLCBkZXZfbmFtZShkZXYpLAogCQkJCSZ2YWYpOwpAQCAtNjA1LDcgKzYwNSw3IEBACiAJaWYgKGRldiAmJiBkZXYtPmRldi5wYXJlbnQpIHsKIAkJY2hhciBidWZbUFJFRklYX1NJWkVdOwogCi0JCWRldl9wcmludGtfZW1pdCg3LCBkZXYtPmRldi5wYXJlbnQsCisJCWRldl9wcmludGtfZW1pdChMT0dMRVZFTF9ERUJVRywgZGV2LT5kZXYucGFyZW50LAogCQkJCSIlcyVzICVzICVzJXM6ICVwViIsCiAJCQkJZHluYW1pY19lbWl0X3ByZWZpeChkZXNjcmlwdG9yLCBidWYpLAogCQkJCWRldl9kcml2ZXJfc3RyaW5nKGRldi0+ZGV2LnBhcmVudCksCmRpZmYgLS1naXQgYS9saWIvZ2VuYWxsb2MuYyBiL2xpYi9nZW5hbGxvYy5jCmluZGV4IGNjZTRkZDYuLjJlNjVkMjAgMTAwNjQ0Ci0tLSBhL2xpYi9nZW5hbGxvYy5jCisrKyBiL2xpYi9nZW5hbGxvYy5jCkBAIC01OTgsNiArNTk4LDcgQEAKIAogCXJldHVybiBwb29sOwogfQorRVhQT1JUX1NZTUJPTChkZXZtX2dlbl9wb29sX2NyZWF0ZSk7CiAKIC8qKgogICogZGV2X2dldF9nZW5fcG9vbCAtIE9idGFpbiB0aGUgZ2VuX3Bvb2wgKGlmIGFueSkgZm9yIGEgZGV2aWNlCmRpZmYgLS1naXQgYS9saWIvbGNtLmMgYi9saWIvbGNtLmMKaW5kZXggYjljOGRlNC4uNTFjYzZiMSAxMDA2NDQKLS0tIGEvbGliL2xjbS5jCisrKyBiL2xpYi9sY20uYwpAQCAtNywxMCArNyw4IEBACiB1bnNpZ25lZCBsb25nIGxjbSh1bnNpZ25lZCBsb25nIGEsIHVuc2lnbmVkIGxvbmcgYikKIHsKIAlpZiAoYSAmJiBiKQotCQlyZXR1cm4gKGEgKiBiKSAvIGdjZChhLCBiKTsKLQllbHNlIGlmIChiKQotCQlyZXR1cm4gYjsKLQotCXJldHVybiBhOworCQlyZXR1cm4gKGEgLyBnY2QoYSwgYikpICogYjsKKwllbHNlCisJCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobGNtKTsKZGlmZiAtLWdpdCBhL2xpYi9zZXFfYnVmLmMgYi9saWIvc2VxX2J1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZWRmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc2VxX2J1Zi5jCkBAIC0wLDAgKzEsMzU5IEBACisvKgorICogc2VxX2J1Zi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJlZCBIYXQgSW5jLCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGUgc2VxX2J1ZiBpcyBhIGhhbmR5IHRvb2wgdGhhdCBhbGxvd3MgeW91IHRvIHBhc3MgYSBkZXNjcmlwdG9yIGFyb3VuZAorICogdG8gYSBidWZmZXIgdGhhdCBvdGhlciBmdW5jdGlvbnMgY2FuIHdyaXRlIHRvLiBJdCBpcyBzaW1pbGFyIHRvIHRoZQorICogc2VxX2ZpbGUgZnVuY3Rpb25hbGl0eSBidXQgaGFzIHNvbWUgZGlmZmVyZW5jZXMuCisgKgorICogVG8gdXNlIGl0LCB0aGUgc2VxX2J1ZiBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggc2VxX2J1Zl9pbml0KCkuCisgKiBUaGlzIHdpbGwgc2V0IHVwIHRoZSBjb3VudGVycyB3aXRoaW4gdGhlIGRlc2NyaXB0b3IuIFlvdSBjYW4gY2FsbAorICogc2VxX2J1Zl9pbml0KCkgbW9yZSB0aGFuIG9uY2UgdG8gcmVzZXQgdGhlIHNlcV9idWYgdG8gc3RhcnQKKyAqIGZyb20gc2NyYXRjaC4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9idWYuaD4KKworLyoqCisgKiBzZXFfYnVmX2Nhbl9maXQgLSBjYW4gdGhlIG5ldyBkYXRhIGZpdCBpbiB0aGUgY3VycmVudCBidWZmZXI/CisgKiBAczogdGhlIHNlcV9idWYgZGVzY3JpcHRvcgorICogQGxlbjogVGhlIGxlbmd0aCB0byBzZWUgaWYgaXQgY2FuIGZpdCBpbiB0aGUgY3VycmVudCBidWZmZXIKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUncyBlbm91Z2ggdW51c2VkIHNwYWNlIGluIHRoZSBzZXFfYnVmIGJ1ZmZlcgorICogdG8gZml0IHRoZSBhbW91bnQgb2YgbmV3IGRhdGEgYWNjb3JkaW5nIHRvIEBsZW4uCisgKi8KK3N0YXRpYyBib29sIHNlcV9idWZfY2FuX2ZpdChzdHJ1Y3Qgc2VxX2J1ZiAqcywgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gcy0+bGVuICsgbGVuIDw9IHMtPnNpemU7Cit9CisKKy8qKgorICogc2VxX2J1Zl9wcmludF9zZXEgLSBtb3ZlIHRoZSBjb250ZW50cyBvZiBzZXFfYnVmIGludG8gYSBzZXFfZmlsZQorICogQG06IHRoZSBzZXFfZmlsZSBkZXNjcmlwdG9yIHRoYXQgaXMgdGhlIGRlc3RpbmF0aW9uCisgKiBAczogdGhlIHNlcV9idWYgZGVzY3JpcHRvciB0aGF0IGlzIHRoZSBzb3VyY2UuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbiB6ZXJvIG90aGVyd2lzZQorICovCitpbnQgc2VxX2J1Zl9wcmludF9zZXEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc2VxX2J1ZiAqcykKK3sKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2VxX2J1Zl91c2VkKHMpOworCisJcmV0dXJuIHNlcV93cml0ZShtLCBzLT5idWZmZXIsIGxlbik7Cit9CisKKy8qKgorICogc2VxX2J1Zl92cHJpbnRmIC0gc2VxdWVuY2UgcHJpbnRpbmcgb2YgaW5mb3JtYXRpb24uCisgKiBAczogc2VxX2J1ZiBkZXNjcmlwdG9yCisgKiBAZm10OiBwcmludGYgZm9ybWF0IHN0cmluZworICogQGFyZ3M6IHZhX2xpc3Qgb2YgYXJndW1lbnRzIGZyb20gYSBwcmludGYoKSB0eXBlIGZ1bmN0aW9uCisgKgorICogV3JpdGVzIGEgdm5wcmludGYoKSBmb3JtYXQgaW50byB0aGUgc2VxdWVuY2NlIGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgLTEgb24gb3ZlcmZsb3cuCisgKi8KK2ludCBzZXFfYnVmX3ZwcmludGYoc3RydWN0IHNlcV9idWYgKnMsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworCWludCBsZW47CisKKwlXQVJOX09OKHMtPnNpemUgPT0gMCk7CisKKwlpZiAocy0+bGVuIDwgcy0+c2l6ZSkgeworCQlsZW4gPSB2c25wcmludGYocy0+YnVmZmVyICsgcy0+bGVuLCBzLT5zaXplIC0gcy0+bGVuLCBmbXQsIGFyZ3MpOworCQlpZiAoc2VxX2J1Zl9jYW5fZml0KHMsIGxlbikpIHsKKwkJCXMtPmxlbiArPSBsZW47CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlzZXFfYnVmX3NldF9vdmVyZmxvdyhzKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogc2VxX2J1Zl9wcmludGYgLSBzZXF1ZW5jZSBwcmludGluZyBvZiBpbmZvcm1hdGlvbgorICogQHM6IHNlcV9idWYgZGVzY3JpcHRvcgorICogQGZtdDogcHJpbnRmIGZvcm1hdCBzdHJpbmcKKyAqCisgKiBXcml0ZXMgYSBwcmludGYoKSBmb3JtYXQgaW50byB0aGUgc2VxdWVuY2UgYnVmZmVyLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCAtMSBvbiBvdmVyZmxvdy4KKyAqLworaW50IHNlcV9idWZfcHJpbnRmKHN0cnVjdCBzZXFfYnVmICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByZXQ7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSBzZXFfYnVmX3ZwcmludGYocywgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogc2VxX2J1Zl9iaXRtYXNrIC0gd3JpdGUgYSBiaXRtYXNrIGFycmF5IGluIGl0cyBBU0NJSSByZXByZXNlbnRhdGlvbgorICogQHM6CQlzZXFfYnVmIGRlc2NyaXB0b3IKKyAqIEBtYXNrcDoJcG9pbnRzIHRvIGFuIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIHRoYXQgcmVwcmVzZW50IGEgYml0bWFzaworICogQG5tYXNrYml0czoJVGhlIG51bWJlciBvZiBiaXRzIHRoYXQgYXJlIHZhbGlkIGluIEBtYXNrcAorICoKKyAqIFdyaXRlcyBhIEFTQ0lJIHJlcHJlc2VudGF0aW9uIG9mIGEgYml0bWFzayBzdHJpbmcgaW50byBAcy4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgLTEgb24gb3ZlcmZsb3cuCisgKi8KK2ludCBzZXFfYnVmX2JpdG1hc2soc3RydWN0IHNlcV9idWYgKnMsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKm1hc2twLAorCQkgICAgaW50IG5tYXNrYml0cykKK3sKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2VxX2J1Zl9idWZmZXJfbGVmdChzKTsKKwlpbnQgcmV0OworCisJV0FSTl9PTihzLT5zaXplID09IDApOworCisJLyoKKwkgKiBOb3RlLCBiZWNhdXNlIGJpdG1hcF9zY25wcmludGYoKSBvbmx5IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcworCSAqIHdyaXR0ZW4gYW5kIG5vdCB0aGUgbnVtYmVyIHRoYXQgd291bGQgYmUgd3JpdHRlbiwgd2UgdXNlIHRoZSBsYXN0CisJICogYnl0ZSBvZiB0aGUgYnVmZmVyIHRvIGxldCB1cyBrbm93IGlmIHdlIG92ZXJmbG93ZWQuIFRoZXJlJ3MgYSBzbWFsbAorCSAqIGNoYW5jZSB0aGF0IHRoZSBiaXRtYXAgY291bGQgaGF2ZSBmaXQgZXhhY3RseSBpbnNpZGUgdGhlIGJ1ZmZlciwgYnV0CisJICogaXQncyBub3QgdGhhdCBjcml0aWNhbCBpZiB0aGF0IGRvZXMgaGFwcGVuLgorCSAqLworCWlmIChsZW4gPiAxKSB7CisJCXJldCA9IGJpdG1hcF9zY25wcmludGYocy0+YnVmZmVyICsgcy0+bGVuLCBsZW4sIG1hc2twLCBubWFza2JpdHMpOworCQlpZiAocmV0IDwgbGVuKSB7CisJCQlzLT5sZW4gKz0gcmV0OworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJc2VxX2J1Zl9zZXRfb3ZlcmZsb3cocyk7CisJcmV0dXJuIC0xOworfQorCisjaWZkZWYgQ09ORklHX0JJTkFSWV9QUklOVEYKKy8qKgorICogc2VxX2J1Zl9icHJpbnRmIC0gV3JpdGUgdGhlIHByaW50ZiBzdHJpbmcgZnJvbSBiaW5hcnkgYXJndW1lbnRzCisgKiBAczogc2VxX2J1ZiBkZXNjcmlwdG9yCisgKiBAZm10OiBUaGUgZm9ybWF0IHN0cmluZyBmb3IgdGhlIEBiaW5hcnkgYXJndW1lbnRzCisgKiBAYmluYXJ5OiBUaGUgYmluYXJ5IGFyZ3VtZW50cyBmb3IgQGZtdC4KKyAqCisgKiBXaGVuIHJlY29yZGluZyBpbiBhIGZhc3QgcGF0aCwgYSBwcmludGYgbWF5IGJlIHJlY29yZGVkIHdpdGgganVzdAorICogc2F2aW5nIHRoZSBmb3JtYXQgYW5kIHRoZSBhcmd1bWVudHMgYXMgdGhleSB3ZXJlIHBhc3NlZCB0byB0aGUKKyAqIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIHdhc3RpbmcgY3ljbGVzIGNvbnZlcnRpbmcgdGhlIGFyZ3VtZW50cyBpbnRvCisgKiBBU0NJSSBjaGFyYWN0ZXJzLiBJbnN0ZWFkLCB0aGUgYXJndW1lbnRzIGFyZSBzYXZlZCBpbiBhIDMyIGJpdAorICogd29yZCBhcnJheSB0aGF0IGlzIGRlZmluZWQgYnkgdGhlIGZvcm1hdCBzdHJpbmcgY29uc3RyYWludHMuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgdGhlIGZvcm1hdCBhbmQgdGhlIGJpbmFyeSBhcnJheSBhbmQgZmluaXNoCisgKiB0aGUgY29udmVyc2lvbiBpbnRvIHRoZSBBU0NJSSBzdHJpbmcgd2l0aGluIHRoZSBidWZmZXIuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIC0xIG9uIG92ZXJmbG93LgorICovCitpbnQgc2VxX2J1Zl9icHJpbnRmKHN0cnVjdCBzZXFfYnVmICpzLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IHUzMiAqYmluYXJ5KQoreworCXVuc2lnbmVkIGludCBsZW4gPSBzZXFfYnVmX2J1ZmZlcl9sZWZ0KHMpOworCWludCByZXQ7CisKKwlXQVJOX09OKHMtPnNpemUgPT0gMCk7CisKKwlpZiAocy0+bGVuIDwgcy0+c2l6ZSkgeworCQlyZXQgPSBic3RyX3ByaW50ZihzLT5idWZmZXIgKyBzLT5sZW4sIGxlbiwgZm10LCBiaW5hcnkpOworCQlpZiAoc2VxX2J1Zl9jYW5fZml0KHMsIHJldCkpIHsKKwkJCXMtPmxlbiArPSByZXQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlzZXFfYnVmX3NldF9vdmVyZmxvdyhzKTsKKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYgLyogQ09ORklHX0JJTkFSWV9QUklOVEYgKi8KKworLyoqCisgKiBzZXFfYnVmX3B1dHMgLSBzZXF1ZW5jZSBwcmludGluZyBvZiBzaW1wbGUgc3RyaW5nCisgKiBAczogc2VxX2J1ZiBkZXNjcmlwdG9yCisgKiBAc3RyOiBzaW1wbGUgc3RyaW5nIHRvIHJlY29yZAorICoKKyAqIENvcHkgYSBzaW1wbGUgc3RyaW5nIGludG8gdGhlIHNlcXVlbmNlIGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgLTEgb24gb3ZlcmZsb3cKKyAqLworaW50IHNlcV9idWZfcHV0cyhzdHJ1Y3Qgc2VxX2J1ZiAqcywgY29uc3QgY2hhciAqc3RyKQoreworCXVuc2lnbmVkIGludCBsZW4gPSBzdHJsZW4oc3RyKTsKKworCVdBUk5fT04ocy0+c2l6ZSA9PSAwKTsKKworCWlmIChzZXFfYnVmX2Nhbl9maXQocywgbGVuKSkgeworCQltZW1jcHkocy0+YnVmZmVyICsgcy0+bGVuLCBzdHIsIGxlbik7CisJCXMtPmxlbiArPSBsZW47CisJCXJldHVybiAwOworCX0KKwlzZXFfYnVmX3NldF9vdmVyZmxvdyhzKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogc2VxX2J1Zl9wdXRjIC0gc2VxdWVuY2UgcHJpbnRpbmcgb2Ygc2ltcGxlIGNoYXJhY3RlcgorICogQHM6IHNlcV9idWYgZGVzY3JpcHRvcgorICogQGM6IHNpbXBsZSBjaGFyYWN0ZXIgdG8gcmVjb3JkCisgKgorICogQ29weSBhIHNpbmdsZSBjaGFyYWN0ZXIgaW50byB0aGUgc2VxdWVuY2UgYnVmZmVyLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCAtMSBvbiBvdmVyZmxvdworICovCitpbnQgc2VxX2J1Zl9wdXRjKHN0cnVjdCBzZXFfYnVmICpzLCB1bnNpZ25lZCBjaGFyIGMpCit7CisJV0FSTl9PTihzLT5zaXplID09IDApOworCisJaWYgKHNlcV9idWZfY2FuX2ZpdChzLCAxKSkgeworCQlzLT5idWZmZXJbcy0+bGVuKytdID0gYzsKKwkJcmV0dXJuIDA7CisJfQorCXNlcV9idWZfc2V0X292ZXJmbG93KHMpOworCXJldHVybiAtMTsKK30KKworLyoqCisgKiBzZXFfYnVmX3B1dG1lbSAtIHdyaXRlIHJhdyBkYXRhIGludG8gdGhlIHNlcXVlbmMgYnVmZmVyCisgKiBAczogc2VxX2J1ZiBkZXNjcmlwdG9yCisgKiBAbWVtOiBUaGUgcmF3IG1lbW9yeSB0byBjb3B5IGludG8gdGhlIGJ1ZmZlcgorICogQGxlbjogVGhlIGxlbmd0aCBvZiB0aGUgcmF3IG1lbW9yeSB0byBjb3B5IChpbiBieXRlcykKKyAqCisgKiBUaGVyZSBtYXkgYmUgY2FzZXMgd2hlcmUgcmF3IG1lbW9yeSBuZWVkcyB0byBiZSB3cml0dGVuIGludG8gdGhlCisgKiBidWZmZXIgYW5kIGEgc3RyY3B5KCkgd291bGQgbm90IHdvcmsuIFVzaW5nIHRoaXMgZnVuY3Rpb24gYWxsb3dzCisgKiBmb3Igc3VjaCBjYXNlcy4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgLTEgb24gb3ZlcmZsb3cKKyAqLworaW50IHNlcV9idWZfcHV0bWVtKHN0cnVjdCBzZXFfYnVmICpzLCBjb25zdCB2b2lkICptZW0sIHVuc2lnbmVkIGludCBsZW4pCit7CisJV0FSTl9PTihzLT5zaXplID09IDApOworCisJaWYgKHNlcV9idWZfY2FuX2ZpdChzLCBsZW4pKSB7CisJCW1lbWNweShzLT5idWZmZXIgKyBzLT5sZW4sIG1lbSwgbGVuKTsKKwkJcy0+bGVuICs9IGxlbjsKKwkJcmV0dXJuIDA7CisJfQorCXNlcV9idWZfc2V0X292ZXJmbG93KHMpOworCXJldHVybiAtMTsKK30KKworI2RlZmluZSBNQVhfTUVNSEVYX0JZVEVTCThVCisjZGVmaW5lIEhFWF9DSEFSUwkJKE1BWF9NRU1IRVhfQllURVMqMiArIDEpCisKKy8qKgorICogc2VxX2J1Zl9wdXRtZW1faGV4IC0gd3JpdGUgcmF3IG1lbW9yeSBpbnRvIHRoZSBidWZmZXIgaW4gQVNDSUkgaGV4CisgKiBAczogc2VxX2J1ZiBkZXNjcmlwdG9yCisgKiBAbWVtOiBUaGUgcmF3IG1lbW9yeSB0byB3cml0ZSBpdHMgaGV4IEFTQ0lJIHJlcHJlc2VudGF0aW9uIG9mCisgKiBAbGVuOiBUaGUgbGVuZ3RoIG9mIHRoZSByYXcgbWVtb3J5IHRvIGNvcHkgKGluIGJ5dGVzKQorICoKKyAqIFRoaXMgaXMgc2ltaWxhciB0byBzZXFfYnVmX3B1dG1lbSgpIGV4Y2VwdCBpbnN0ZWFkIG9mIGp1c3QgY29weWluZyB0aGUKKyAqIHJhdyBtZW1vcnkgaW50byB0aGUgYnVmZmVyIGl0IHdyaXRlcyBpdHMgQVNDSUkgcmVwcmVzZW50YXRpb24gb2YgaXQKKyAqIGluIGhleCBjaGFyYWN0ZXJzLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCAtMSBvbiBvdmVyZmxvdworICovCitpbnQgc2VxX2J1Zl9wdXRtZW1faGV4KHN0cnVjdCBzZXFfYnVmICpzLCBjb25zdCB2b2lkICptZW0sCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgaGV4W0hFWF9DSEFSU107CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IG1lbTsKKwl1bnNpZ25lZCBpbnQgc3RhcnRfbGVuOworCWludCBpLCBqOworCisJV0FSTl9PTihzLT5zaXplID09IDApOworCisJd2hpbGUgKGxlbikgeworCQlzdGFydF9sZW4gPSBtaW4obGVuLCBIRVhfQ0hBUlMgLSAxKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBzdGFydF9sZW47IGkrKykgeworI2Vsc2UKKwkJZm9yIChpID0gc3RhcnRfbGVuLTEsIGogPSAwOyBpID49IDA7IGktLSkgeworI2VuZGlmCisJCQloZXhbaisrXSA9IGhleF9hc2NfaGkoZGF0YVtpXSk7CisJCQloZXhbaisrXSA9IGhleF9hc2NfbG8oZGF0YVtpXSk7CisJCX0KKwkJaWYgKFdBUk5fT05fT05DRShqID09IDAgfHwgai8yID4gbGVuKSkKKwkJCWJyZWFrOworCisJCS8qIGogaW5jcmVtZW50cyB0d2ljZSBwZXIgbG9vcCAqLworCQlsZW4gLT0gaiAvIDI7CisJCWhleFtqKytdID0gJyAnOworCisJCXNlcV9idWZfcHV0bWVtKHMsIGhleCwgaik7CisJCWlmIChzZXFfYnVmX2hhc19vdmVyZmxvd2VkKHMpKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzZXFfYnVmX3BhdGggLSBjb3B5IGEgcGF0aCBpbnRvIHRoZSBzZXF1ZW5jZSBidWZmZXIKKyAqIEBzOiBzZXFfYnVmIGRlc2NyaXB0b3IKKyAqIEBwYXRoOiBwYXRoIHRvIHdyaXRlIGludG8gdGhlIHNlcXVlbmNlIGJ1ZmZlci4KKyAqIEBlc2M6IHNldCBvZiBjaGFyYWN0ZXJzIHRvIGVzY2FwZSBpbiB0aGUgb3V0cHV0CisgKgorICogV3JpdGUgYSBwYXRoIG5hbWUgaW50byB0aGUgc2VxdWVuY2UgYnVmZmVyLgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzIG9uIHN1Y2Nlc3MsIC0xIG9uIG92ZXJmbG93CisgKi8KK2ludCBzZXFfYnVmX3BhdGgoc3RydWN0IHNlcV9idWYgKnMsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBjaGFyICplc2MpCit7CisJY2hhciAqYnVmOworCXNpemVfdCBzaXplID0gc2VxX2J1Zl9nZXRfYnVmKHMsICZidWYpOworCWludCByZXMgPSAtMTsKKworCVdBUk5fT04ocy0+c2l6ZSA9PSAwKTsKKworCWlmIChzaXplKSB7CisJCWNoYXIgKnAgPSBkX3BhdGgocGF0aCwgYnVmLCBzaXplKTsKKwkJaWYgKCFJU19FUlIocCkpIHsKKwkJCWNoYXIgKmVuZCA9IG1hbmdsZV9wYXRoKGJ1ZiwgcCwgZXNjKTsKKwkJCWlmIChlbmQpCisJCQkJcmVzID0gZW5kIC0gYnVmOworCQl9CisJfQorCXNlcV9idWZfY29tbWl0KHMsIHJlcyk7CisKKwlyZXR1cm4gcmVzOworfQorCisvKioKKyAqIHNlcV9idWZfdG9fdXNlciAtIGNvcHkgdGhlIHNxdWVuY2UgYnVmZmVyIHRvIHVzZXIgc3BhY2UKKyAqIEBzOiBzZXFfYnVmIGRlc2NyaXB0b3IKKyAqIEB1YnVmOiBUaGUgdXNlcnNwYWNlIG1lbW9yeSBsb2NhdGlvbiB0byBjb3B5IHRvCisgKiBAY250OiBUaGUgYW1vdW50IHRvIGNvcHkKKyAqCisgKiBDb3BpZXMgdGhlIHNlcXVlbmNlIGJ1ZmZlciBpbnRvIHRoZSB1c2Vyc3BhY2UgbWVtb3J5IHBvaW50ZWQgdG8KKyAqIGJ5IEB1YnVmLiBJdCBzdGFydHMgZnJvbSB0aGUgbGFzdCByZWFkIHBvc2l0aW9uIChAcy0+cmVhZHBvcykKKyAqIGFuZCB3cml0ZXMgdXAgdG8gQGNudCBjaGFyYWN0ZXJzIG9yIHRpbGwgaXQgcmVhY2hlcyB0aGUgZW5kIG9mCisgKiB0aGUgY29udGVudCBpbiB0aGUgYnVmZmVyIChAcy0+bGVuKSwgd2hpY2ggZXZlciBjb21lcyBmaXJzdC4KKyAqCisgKiBPbiBzdWNjZXNzLCBpdCByZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyIG9mIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAqIGl0IGNvcGllZC4KKyAqCisgKiBPbiBmYWlsdXJlIGl0IHJldHVybnMgLUVCVVNZIGlmIGFsbCBvZiB0aGUgY29udGVudCBpbiB0aGUKKyAqIHNlcXVlbmNlIGhhcyBiZWVuIGFscmVhZHkgcmVhZCwgd2hpY2ggaW5jbHVkZXMgbm90aGluZyBpbiB0aGUKKyAqIHNlcXVlbmNlIChAcy0+bGVuID09IEBzLT5yZWFkcG9zKS4KKyAqCisgKiBSZXR1cm5zIC1FRkFVTFQgaWYgdGhlIGNvcHkgdG8gdXNlcnNwYWNlIGZhaWxzLgorICovCitpbnQgc2VxX2J1Zl90b191c2VyKHN0cnVjdCBzZXFfYnVmICpzLCBjaGFyIF9fdXNlciAqdWJ1ZiwgaW50IGNudCkKK3sKKwlpbnQgbGVuOworCWludCByZXQ7CisKKwlpZiAoIWNudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocy0+bGVuIDw9IHMtPnJlYWRwb3MpCisJCXJldHVybiAtRUJVU1k7CisKKwlsZW4gPSBzZXFfYnVmX3VzZWQocykgLSBzLT5yZWFkcG9zOworCWlmIChjbnQgPiBsZW4pCisJCWNudCA9IGxlbjsKKwlyZXQgPSBjb3B5X3RvX3VzZXIodWJ1Ziwgcy0+YnVmZmVyICsgcy0+cmVhZHBvcywgY250KTsKKwlpZiAocmV0ID09IGNudCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwljbnQgLT0gcmV0OworCisJcy0+cmVhZHBvcyArPSBjbnQ7CisJcmV0dXJuIGNudDsKK30KZGlmZiAtLWdpdCBhL2xpYi9zaG93X21lbS5jIGIvbGliL3Nob3dfbWVtLmMKaW5kZXggMDkyMjU3OS4uNWUyNTYyNyAxMDA2NDQKLS0tIGEvbGliL3Nob3dfbWVtLmMKKysrIGIvbGliL3Nob3dfbWVtLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAkJCQljb250aW51ZTsKIAogCQkJdG90YWwgKz0gem9uZS0+cHJlc2VudF9wYWdlczsKLQkJCXJlc2VydmVkID0gem9uZS0+cHJlc2VudF9wYWdlcyAtIHpvbmUtPm1hbmFnZWRfcGFnZXM7CisJCQlyZXNlcnZlZCArPSB6b25lLT5wcmVzZW50X3BhZ2VzIC0gem9uZS0+bWFuYWdlZF9wYWdlczsKIAogCQkJaWYgKGlzX2hpZ2htZW1faWR4KHpvbmVpZCkpCiAJCQkJaGlnaG1lbSArPSB6b25lLT5wcmVzZW50X3BhZ2VzOwpkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCA4NDA1ZWIwLi5iM2M2Y2U5IDEwMDY0NAotLS0gYS9tbS9NYWtlZmlsZQorKysgYi9tbS9NYWtlZmlsZQpAQCAtNTUsNyArNTUsOSBAQAogb2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vCiBvYmotJChDT05GSUdfUVVJQ0tMSVNUKSArPSBxdWlja2xpc3Qubwogb2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vCi1vYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyBwYWdlX2Nncm91cC5vIHZtcHJlc3N1cmUubworb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm8KK29iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUubworb2JqLSQoQ09ORklHX01FTUNHX1NXQVApICs9IHN3YXBfY2dyb3VwLm8KIG9iai0kKENPTkZJR19DR1JPVVBfSFVHRVRMQikgKz0gaHVnZXRsYl9jZ3JvdXAubwogb2JqLSQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSArPSBtZW1vcnktZmFpbHVyZS5vCiBvYmotJChDT05GSUdfSFdQT0lTT05fSU5KRUNUKSArPSBod3BvaXNvbi1pbmplY3QubwpkaWZmIC0tZ2l0IGEvbW0vY21hLmMgYi9tbS9jbWEuYwppbmRleCBmZGU3MDZlLi44ZTllYzEzIDEwMDY0NAotLS0gYS9tbS9jbWEuYworKysgYi9tbS9jbWEuYwpAQCAtMjE1LDkgKzIxNSwyMSBAQAogCQkJYm9vbCBmaXhlZCwgc3RydWN0IGNtYSAqKnJlc19jbWEpCiB7CiAJcGh5c19hZGRyX3QgbWVtYmxvY2tfZW5kID0gbWVtYmxvY2tfZW5kX29mX0RSQU0oKTsKLQlwaHlzX2FkZHJfdCBoaWdobWVtX3N0YXJ0ID0gX19wYShoaWdoX21lbW9yeSk7CisJcGh5c19hZGRyX3QgaGlnaG1lbV9zdGFydDsKIAlpbnQgcmV0ID0gMDsKIAorI2lmZGVmIENPTkZJR19YODYKKwkvKgorCSAqIGhpZ2hfbWVtb3J5IGlzbid0IGRpcmVjdCBtYXBwZWQgbWVtb3J5IHNvIHJldHJpZXZpbmcgaXRzIHBoeXNpY2FsCisJICogYWRkcmVzcyBpc24ndCBhcHByb3ByaWF0ZS4gIEJ1dCBpdCB3b3VsZCBiZSB1c2VmdWwgdG8gY2hlY2sgdGhlCisJICogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgaGlnaG1lbSBib3VuZGFyeSBzbyBpdCdzIGp1c3RmaWFibGUgdG8gZ2V0CisJICogdGhlIHBoeXNpY2FsIGFkZHJlc3MgZnJvbSBpdC4gIE9uIHg4NiB0aGVyZSBpcyBhIHZhbGlkYXRpb24gY2hlY2sgZm9yCisJICogdGhpcyBjYXNlLCBzbyB0aGUgZm9sbG93aW5nIHdvcmthcm91bmQgaXMgbmVlZGVkIHRvIGF2b2lkIGl0LgorCSAqLworCWhpZ2htZW1fc3RhcnQgPSBfX3BhX25vZGVidWcoaGlnaF9tZW1vcnkpOworI2Vsc2UKKwloaWdobWVtX3N0YXJ0ID0gX19wYShoaWdoX21lbW9yeSk7CisjZW5kaWYKIAlwcl9kZWJ1ZygiJXMoc2l6ZSAlcGEsIGJhc2UgJXBhLCBsaW1pdCAlcGEgYWxpZ25tZW50ICVwYSlcbiIsCiAJCV9fZnVuY19fLCAmc2l6ZSwgJmJhc2UsICZsaW1pdCwgJmFsaWdubWVudCk7CiAKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCBmOTc5MmJhLi41NDZlNTcxIDEwMDY0NAotLS0gYS9tbS9jb21wYWN0aW9uLmMKKysrIGIvbW0vY29tcGFjdGlvbi5jCkBAIC00MSwxNSArNDEsMTcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJlbGVhc2VfZnJlZXBhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVsaXN0KQogewogCXN0cnVjdCBwYWdlICpwYWdlLCAqbmV4dDsKLQl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIGhpZ2hfcGZuID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCBuZXh0LCBmcmVlbGlzdCwgbHJ1KSB7CisJCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CiAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwogCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQkJY291bnQrKzsKKwkJaWYgKHBmbiA+IGhpZ2hfcGZuKQorCQkJaGlnaF9wZm4gPSBwZm47CiAJfQogCi0JcmV0dXJuIGNvdW50OworCXJldHVybiBoaWdoX3BmbjsKIH0KIAogc3RhdGljIHZvaWQgbWFwX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCkBAIC0xOTUsMTYgKzE5NywxMiBAQAogCiAJLyogVXBkYXRlIHdoZXJlIGFzeW5jIGFuZCBzeW5jIGNvbXBhY3Rpb24gc2hvdWxkIHJlc3RhcnQgKi8KIAlpZiAobWlncmF0ZV9zY2FubmVyKSB7Ci0JCWlmIChjYy0+ZmluaXNoZWRfdXBkYXRlX21pZ3JhdGUpCi0JCQlyZXR1cm47CiAJCWlmIChwZm4gPiB6b25lLT5jb21wYWN0X2NhY2hlZF9taWdyYXRlX3BmblswXSkKIAkJCXpvbmUtPmNvbXBhY3RfY2FjaGVkX21pZ3JhdGVfcGZuWzBdID0gcGZuOwogCQlpZiAoY2MtPm1vZGUgIT0gTUlHUkFURV9BU1lOQyAmJgogCQkgICAgcGZuID4gem9uZS0+Y29tcGFjdF9jYWNoZWRfbWlncmF0ZV9wZm5bMV0pCiAJCQl6b25lLT5jb21wYWN0X2NhY2hlZF9taWdyYXRlX3BmblsxXSA9IHBmbjsKIAl9IGVsc2UgewotCQlpZiAoY2MtPmZpbmlzaGVkX3VwZGF0ZV9mcmVlKQotCQkJcmV0dXJuOwogCQlpZiAocGZuIDwgem9uZS0+Y29tcGFjdF9jYWNoZWRfZnJlZV9wZm4pCiAJCQl6b25lLT5jb21wYWN0X2NhY2hlZF9mcmVlX3BmbiA9IHBmbjsKIAl9CkBAIC03MTUsNyArNzEzLDYgQEAKIAkJZGVsX3BhZ2VfZnJvbV9scnVfbGlzdChwYWdlLCBscnV2ZWMsIHBhZ2VfbHJ1KHBhZ2UpKTsKIAogaXNvbGF0ZV9zdWNjZXNzOgotCQljYy0+ZmluaXNoZWRfdXBkYXRlX21pZ3JhdGUgPSB0cnVlOwogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCBtaWdyYXRlbGlzdCk7CiAJCWNjLT5ucl9taWdyYXRlcGFnZXMrKzsKIAkJbnJfaXNvbGF0ZWQrKzsKQEAgLTg4OSwxNSArODg2LDYgQEAKIAkJCQlibG9ja19zdGFydF9wZm4gLSBwYWdlYmxvY2tfbnJfcGFnZXM7CiAKIAkJLyoKLQkJICogU2V0IGEgZmxhZyB0aGF0IHdlIHN1Y2Nlc3NmdWxseSBpc29sYXRlZCBpbiB0aGlzIHBhZ2VibG9jay4KLQkJICogSW4gdGhlIG5leHQgbG9vcCBpdGVyYXRpb24sIHpvbmUtPmNvbXBhY3RfY2FjaGVkX2ZyZWVfcGZuCi0JCSAqIHdpbGwgbm90IGJlIHVwZGF0ZWQgYW5kIHRodXMgaXQgd2lsbCBlZmZlY3RpdmVseSBjb250YWluIHRoZQotCQkgKiBoaWdoZXN0IHBhZ2VibG9jayB3ZSBpc29sYXRlZCBwYWdlcyBmcm9tLgotCQkgKi8KLQkJaWYgKGlzb2xhdGVkKQotCQkJY2MtPmZpbmlzaGVkX3VwZGF0ZV9mcmVlID0gdHJ1ZTsKLQotCQkvKgogCQkgKiBpc29sYXRlX2ZyZWVwYWdlc19ibG9jaygpIG1pZ2h0IGhhdmUgYWJvcnRlZCBkdWUgdG8gYXN5bmMKIAkJICogY29tcGFjdGlvbiBiZWluZyBjb250ZW5kZWQKIAkJICovCkBAIC0xMDg2LDkgKzEwNzQsOSBAQAogCiAJLyogQ29tcGFjdGlvbiBydW4gaXMgbm90IGZpbmlzaGVkIGlmIHRoZSB3YXRlcm1hcmsgaXMgbm90IG1ldCAqLwogCXdhdGVybWFyayA9IGxvd193bWFya19wYWdlcyh6b25lKTsKLQl3YXRlcm1hcmsgKz0gKDEgPDwgY2MtPm9yZGVyKTsKIAotCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgY2MtPm9yZGVyLCB3YXRlcm1hcmssIDAsIDApKQorCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgY2MtPm9yZGVyLCB3YXRlcm1hcmssIGNjLT5jbGFzc3pvbmVfaWR4LAorCQkJCQkJCWNjLT5hbGxvY19mbGFncykpCiAJCXJldHVybiBDT01QQUNUX0NPTlRJTlVFOwogCiAJLyogRGlyZWN0IGNvbXBhY3RvcjogSXMgYSBzdWl0YWJsZSBwYWdlIGZyZWU/ICovCkBAIC0xMTE0LDcgKzExMDIsOCBAQAogICogICBDT01QQUNUX1BBUlRJQUwgIC0gSWYgdGhlIGFsbG9jYXRpb24gd291bGQgc3VjY2VlZCB3aXRob3V0IGNvbXBhY3Rpb24KICAqICAgQ09NUEFDVF9DT05USU5VRSAtIElmIGNvbXBhY3Rpb24gc2hvdWxkIHJ1biBub3cKICAqLwotdW5zaWduZWQgbG9uZyBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIpCit1bnNpZ25lZCBsb25nIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKKwkJCQkJaW50IGFsbG9jX2ZsYWdzLCBpbnQgY2xhc3N6b25lX2lkeCkKIHsKIAlpbnQgZnJhZ2luZGV4OwogCXVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrOwpAQCAtMTEyNiwyMSArMTExNSwzMCBAQAogCWlmIChvcmRlciA9PSAtMSkKIAkJcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7CiAKKwl3YXRlcm1hcmsgPSBsb3dfd21hcmtfcGFnZXMoem9uZSk7CisJLyoKKwkgKiBJZiB3YXRlcm1hcmtzIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb24gYXJlIGFscmVhZHkgbWV0LCB0aGVyZQorCSAqIHNob3VsZCBiZSBubyBuZWVkIGZvciBjb21wYWN0aW9uIGF0IGFsbC4KKwkgKi8KKwlpZiAoem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgY2xhc3N6b25lX2lkeCwKKwkJCQkJCQkJYWxsb2NfZmxhZ3MpKQorCQlyZXR1cm4gQ09NUEFDVF9QQVJUSUFMOworCiAJLyoKIAkgKiBXYXRlcm1hcmtzIGZvciBvcmRlci0wIG11c3QgYmUgbWV0IGZvciBjb21wYWN0aW9uLiBOb3RlIHRoZSAyVUwuCiAJICogVGhpcyBpcyBiZWNhdXNlIGR1cmluZyBtaWdyYXRpb24sIGNvcGllcyBvZiBwYWdlcyBuZWVkIHRvIGJlCiAJICogYWxsb2NhdGVkIGFuZCBmb3IgYSBzaG9ydCB0aW1lLCB0aGUgZm9vdHByaW50IGlzIGhpZ2hlcgogCSAqLwotCXdhdGVybWFyayA9IGxvd193bWFya19wYWdlcyh6b25lKSArICgyVUwgPDwgb3JkZXIpOwotCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgMCwgd2F0ZXJtYXJrLCAwLCAwKSkKKwl3YXRlcm1hcmsgKz0gKDJVTCA8PCBvcmRlcik7CisJaWYgKCF6b25lX3dhdGVybWFya19vayh6b25lLCAwLCB3YXRlcm1hcmssIGNsYXNzem9uZV9pZHgsIGFsbG9jX2ZsYWdzKSkKIAkJcmV0dXJuIENPTVBBQ1RfU0tJUFBFRDsKIAogCS8qCiAJICogZnJhZ21lbnRhdGlvbiBpbmRleCBkZXRlcm1pbmVzIGlmIGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGR1ZSB0bwogCSAqIGxvdyBtZW1vcnkgb3IgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbgogCSAqCi0JICogaW5kZXggb2YgLTEwMDAgaW1wbGllcyBhbGxvY2F0aW9ucyBtaWdodCBzdWNjZWVkIGRlcGVuZGluZyBvbgotCSAqIHdhdGVybWFya3MKKwkgKiBpbmRleCBvZiAtMTAwMCB3b3VsZCBpbXBseSBhbGxvY2F0aW9ucyBtaWdodCBzdWNjZWVkIGRlcGVuZGluZyBvbgorCSAqIHdhdGVybWFya3MsIGJ1dCB3ZSBhbHJlYWR5IGZhaWxlZCB0aGUgaGlnaC1vcmRlciB3YXRlcm1hcmsgY2hlY2sKIAkgKiBpbmRleCB0b3dhcmRzIDAgaW1wbGllcyBmYWlsdXJlIGlzIGR1ZSB0byBsYWNrIG9mIG1lbW9yeQogCSAqIGluZGV4IHRvd2FyZHMgMTAwMCBpbXBsaWVzIGZhaWx1cmUgaXMgZHVlIHRvIGZyYWdtZW50YXRpb24KIAkgKgpAQCAtMTE1MCwxMCArMTE0OCw2IEBACiAJaWYgKGZyYWdpbmRleCA+PSAwICYmIGZyYWdpbmRleCA8PSBzeXNjdGxfZXh0ZnJhZ190aHJlc2hvbGQpCiAJCXJldHVybiBDT01QQUNUX1NLSVBQRUQ7CiAKLQlpZiAoZnJhZ2luZGV4ID09IC0xMDAwICYmIHpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCB3YXRlcm1hcmssCi0JICAgIDAsIDApKQotCQlyZXR1cm4gQ09NUEFDVF9QQVJUSUFMOwotCiAJcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7CiB9CiAKQEAgLTExNjQsOCArMTE1OCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IHpvbmVfZW5kX3Bmbih6b25lKTsKIAljb25zdCBpbnQgbWlncmF0ZXR5cGUgPSBnZnBmbGFnc190b19taWdyYXRldHlwZShjYy0+Z2ZwX21hc2spOwogCWNvbnN0IGJvb2wgc3luYyA9IGNjLT5tb2RlICE9IE1JR1JBVEVfQVNZTkM7CisJdW5zaWduZWQgbG9uZyBsYXN0X21pZ3JhdGVkX3BmbiA9IDA7CiAKLQlyZXQgPSBjb21wYWN0aW9uX3N1aXRhYmxlKHpvbmUsIGNjLT5vcmRlcik7CisJcmV0ID0gY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBjYy0+b3JkZXIsIGNjLT5hbGxvY19mbGFncywKKwkJCQkJCQljYy0+Y2xhc3N6b25lX2lkeCk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIENPTVBBQ1RfUEFSVElBTDoKIAljYXNlIENPTVBBQ1RfU0tJUFBFRDoKQEAgLTEyMDgsNiArMTIwNCw3IEBACiAJd2hpbGUgKChyZXQgPSBjb21wYWN0X2ZpbmlzaGVkKHpvbmUsIGNjLCBtaWdyYXRldHlwZSkpID09CiAJCQkJCQlDT01QQUNUX0NPTlRJTlVFKSB7CiAJCWludCBlcnI7CisJCXVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9zdGFydF9wZm4gPSBjYy0+bWlncmF0ZV9wZm47CiAKIAkJc3dpdGNoIChpc29sYXRlX21pZ3JhdGVwYWdlcyh6b25lLCBjYykpIHsKIAkJY2FzZSBJU09MQVRFX0FCT1JUOgpAQCAtMTIxNiw3ICsxMjEzLDEyIEBACiAJCQljYy0+bnJfbWlncmF0ZXBhZ2VzID0gMDsKIAkJCWdvdG8gb3V0OwogCQljYXNlIElTT0xBVEVfTk9ORToKLQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIFdlIGhhdmVuJ3QgaXNvbGF0ZWQgYW5kIG1pZ3JhdGVkIGFueXRoaW5nLCBidXQKKwkJCSAqIHRoZXJlIG1pZ2h0IHN0aWxsIGJlIHVuZmx1c2hlZCBtaWdyYXRpb25zIGZyb20KKwkJCSAqIHByZXZpb3VzIGNjLT5vcmRlciBhbGlnbmVkIGJsb2NrLgorCQkJICovCisJCQlnb3RvIGNoZWNrX2RyYWluOwogCQljYXNlIElTT0xBVEVfU1VDQ0VTUzoKIAkJCTsKIAkJfQpAQCAtMTI0MSwxMiArMTI0Myw2MSBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CisKKwkJLyoKKwkJICogUmVjb3JkIHdoZXJlIHdlIGNvdWxkIGhhdmUgZnJlZWQgcGFnZXMgYnkgbWlncmF0aW9uIGFuZCBub3QKKwkJICogeWV0IGZsdXNoZWQgdGhlbSB0byBidWRkeSBhbGxvY2F0b3IuIFdlIHVzZSB0aGUgcGZuIHRoYXQKKwkJICogaXNvbGF0ZV9taWdyYXRlcGFnZXMoKSBzdGFydGVkIGZyb20gaW4gdGhpcyBsb29wIGl0ZXJhdGlvbgorCQkgKiAtIHRoaXMgaXMgdGhlIGxvd2VzdCBwYWdlIHRoYXQgY291bGQgaGF2ZSBiZWVuIGlzb2xhdGVkIGFuZAorCQkgKiB0aGVuIGZyZWVkIGJ5IG1pZ3JhdGlvbi4KKwkJICovCisJCWlmICghbGFzdF9taWdyYXRlZF9wZm4pCisJCQlsYXN0X21pZ3JhdGVkX3BmbiA9IGlzb2xhdGVfc3RhcnRfcGZuOworCitjaGVja19kcmFpbjoKKwkJLyoKKwkJICogSGFzIHRoZSBtaWdyYXRpb24gc2Nhbm5lciBtb3ZlZCBhd2F5IGZyb20gdGhlIHByZXZpb3VzCisJCSAqIGNjLT5vcmRlciBhbGlnbmVkIGJsb2NrIHdoZXJlIHdlIG1pZ3JhdGVkIGZyb20/IElmIHllcywKKwkJICogZmx1c2ggdGhlIHBhZ2VzIHRoYXQgd2VyZSBmcmVlZCwgc28gdGhhdCB0aGV5IGNhbiBtZXJnZSBhbmQKKwkJICogY29tcGFjdF9maW5pc2hlZCgpIGNhbiBkZXRlY3QgaW1tZWRpYXRlbHkgaWYgYWxsb2NhdGlvbgorCQkgKiB3b3VsZCBzdWNjZWVkLgorCQkgKi8KKwkJaWYgKGNjLT5vcmRlciA+IDAgJiYgbGFzdF9taWdyYXRlZF9wZm4pIHsKKwkJCWludCBjcHU7CisJCQl1bnNpZ25lZCBsb25nIGN1cnJlbnRfYmxvY2tfc3RhcnQgPQorCQkJCWNjLT5taWdyYXRlX3BmbiAmIH4oKDFVTCA8PCBjYy0+b3JkZXIpIC0gMSk7CisKKwkJCWlmIChsYXN0X21pZ3JhdGVkX3BmbiA8IGN1cnJlbnRfYmxvY2tfc3RhcnQpIHsKKwkJCQljcHUgPSBnZXRfY3B1KCk7CisJCQkJbHJ1X2FkZF9kcmFpbl9jcHUoY3B1KTsKKwkJCQlkcmFpbl9sb2NhbF9wYWdlcyh6b25lKTsKKwkJCQlwdXRfY3B1KCk7CisJCQkJLyogTm8gbW9yZSBmbHVzaGluZyB1bnRpbCB3ZSBtaWdyYXRlIGFnYWluICovCisJCQkJbGFzdF9taWdyYXRlZF9wZm4gPSAwOworCQkJfQorCQl9CisKIAl9CiAKIG91dDoKLQkvKiBSZWxlYXNlIGZyZWUgcGFnZXMgYW5kIGNoZWNrIGFjY291bnRpbmcgKi8KLQljYy0+bnJfZnJlZXBhZ2VzIC09IHJlbGVhc2VfZnJlZXBhZ2VzKCZjYy0+ZnJlZXBhZ2VzKTsKLQlWTV9CVUdfT04oY2MtPm5yX2ZyZWVwYWdlcyAhPSAwKTsKKwkvKgorCSAqIFJlbGVhc2UgZnJlZSBwYWdlcyBhbmQgdXBkYXRlIHdoZXJlIHRoZSBmcmVlIHNjYW5uZXIgc2hvdWxkIHJlc3RhcnQsCisJICogc28gd2UgZG9uJ3QgbGVhdmUgYW55IHJldHVybmVkIHBhZ2VzIGJlaGluZCBpbiB0aGUgbmV4dCBhdHRlbXB0LgorCSAqLworCWlmIChjYy0+bnJfZnJlZXBhZ2VzID4gMCkgeworCQl1bnNpZ25lZCBsb25nIGZyZWVfcGZuID0gcmVsZWFzZV9mcmVlcGFnZXMoJmNjLT5mcmVlcGFnZXMpOworCisJCWNjLT5ucl9mcmVlcGFnZXMgPSAwOworCQlWTV9CVUdfT04oZnJlZV9wZm4gPT0gMCk7CisJCS8qIFRoZSBjYWNoZWQgcGZuIGlzIGFsd2F5cyB0aGUgZmlyc3QgaW4gYSBwYWdlYmxvY2sgKi8KKwkJZnJlZV9wZm4gJj0gfihwYWdlYmxvY2tfbnJfcGFnZXMtMSk7CisJCS8qCisJCSAqIE9ubHkgZ28gYmFjaywgbm90IGZvcndhcmQuIFRoZSBjYWNoZWQgcGZuIG1pZ2h0IGhhdmUgYmVlbgorCQkgKiBhbHJlYWR5IHJlc2V0IHRvIHpvbmUgZW5kIGluIGNvbXBhY3RfZmluaXNoZWQoKQorCQkgKi8KKwkJaWYgKGZyZWVfcGZuID4gem9uZS0+Y29tcGFjdF9jYWNoZWRfZnJlZV9wZm4pCisJCQl6b25lLT5jb21wYWN0X2NhY2hlZF9mcmVlX3BmbiA9IGZyZWVfcGZuOworCX0KIAogCXRyYWNlX21tX2NvbXBhY3Rpb25fZW5kKHJldCk7CiAKQEAgLTEyNTQsNyArMTMwNSw4IEBACiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAotCQlnZnBfdCBnZnBfbWFzaywgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50ICpjb250ZW5kZWQpCisJCWdmcF90IGdmcF9tYXNrLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgKmNvbnRlbmRlZCwKKwkJaW50IGFsbG9jX2ZsYWdzLCBpbnQgY2xhc3N6b25lX2lkeCkKIHsKIAl1bnNpZ25lZCBsb25nIHJldDsKIAlzdHJ1Y3QgY29tcGFjdF9jb250cm9sIGNjID0gewpAQCAtMTI2NCw2ICsxMzE2LDggQEAKIAkJLmdmcF9tYXNrID0gZ2ZwX21hc2ssCiAJCS56b25lID0gem9uZSwKIAkJLm1vZGUgPSBtb2RlLAorCQkuYWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFncywKKwkJLmNsYXNzem9uZV9pZHggPSBjbGFzc3pvbmVfaWR4LAogCX07CiAJSU5JVF9MSVNUX0hFQUQoJmNjLmZyZWVwYWdlcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNjLm1pZ3JhdGVwYWdlcyk7CkBAIC0xMjg4LDE0ICsxMzQyLDEzIEBACiAgKiBAbW9kZTogVGhlIG1pZ3JhdGlvbiBtb2RlIGZvciBhc3luYywgc3luYyBsaWdodCwgb3Igc3luYyBtaWdyYXRpb24KICAqIEBjb250ZW5kZWQ6IFJldHVybiB2YWx1ZSB0aGF0IGRldGVybWluZXMgaWYgY29tcGFjdGlvbiB3YXMgYWJvcnRlZCBkdWUgdG8KICAqCSAgICAgICBuZWVkX3Jlc2NoZWQoKSBvciBsb2NrIGNvbnRlbnRpb24KLSAqIEBjYW5kaWRhdGVfem9uZTogUmV0dXJuIHRoZSB6b25lIHdoZXJlIHdlIHRoaW5rIGFsbG9jYXRpb24gc2hvdWxkIHN1Y2NlZWQKICAqCiAgKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkaXJlY3QgcGFnZSBjb21wYWN0aW9uLgogICovCiB1bnNpZ25lZCBsb25nIHRyeV90b19jb21wYWN0X3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsCiAJCQlpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaywKIAkJCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCAqY29udGVuZGVkLAotCQkJc3RydWN0IHpvbmUgKipjYW5kaWRhdGVfem9uZSkKKwkJCWludCBhbGxvY19mbGFncywgaW50IGNsYXNzem9uZV9pZHgpCiB7CiAJZW51bSB6b25lX3R5cGUgaGlnaF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spOwogCWludCBtYXlfZW50ZXJfZnMgPSBnZnBfbWFzayAmIF9fR0ZQX0ZTOwpAQCAtMTMwMyw3ICsxMzU2LDYgQEAKIAlzdHJ1Y3Qgem9uZXJlZiAqejsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAlpbnQgcmMgPSBDT01QQUNUX0RFRkVSUkVEOwotCWludCBhbGxvY19mbGFncyA9IDA7CiAJaW50IGFsbF96b25lc19jb250ZW5kZWQgPSBDT01QQUNUX0NPTlRFTkRFRF9MT0NLOyAvKiBpbml0IGZvciAmPSBvcCAqLwogCiAJKmNvbnRlbmRlZCA9IENPTVBBQ1RfQ09OVEVOREVEX05PTkU7CkBAIC0xMzEyLDEwICsxMzY0LDYgQEAKIAlpZiAoIW9yZGVyIHx8ICFtYXlfZW50ZXJfZnMgfHwgIW1heV9wZXJmb3JtX2lvKQogCQlyZXR1cm4gQ09NUEFDVF9TS0lQUEVEOwogCi0jaWZkZWYgQ09ORklHX0NNQQotCWlmIChnZnBmbGFnc190b19taWdyYXRldHlwZShnZnBfbWFzaykgPT0gTUlHUkFURV9NT1ZBQkxFKQotCQlhbGxvY19mbGFncyB8PSBBTExPQ19DTUE7Ci0jZW5kaWYKIAkvKiBDb21wYWN0IGVhY2ggem9uZSBpbiB0aGUgbGlzdCAqLwogCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwKIAkJCQkJCQkJbm9kZW1hc2spIHsKQEAgLTEzMjYsNyArMTM3NCw3IEBACiAJCQljb250aW51ZTsKIAogCQlzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBtb2RlLAotCQkJCQkJCSZ6b25lX2NvbnRlbmRlZCk7CisJCQkJJnpvbmVfY29udGVuZGVkLCBhbGxvY19mbGFncywgY2xhc3N6b25lX2lkeCk7CiAJCXJjID0gbWF4KHN0YXR1cywgcmMpOwogCQkvKgogCQkgKiBJdCB0YWtlcyBhdCBsZWFzdCBvbmUgem9uZSB0aGF0IHdhc24ndCBsb2NrIGNvbnRlbmRlZApAQCAtMTMzNSw5ICsxMzgzLDggQEAKIAkJYWxsX3pvbmVzX2NvbnRlbmRlZCAmPSB6b25lX2NvbnRlbmRlZDsKIAogCQkvKiBJZiBhIG5vcm1hbCBhbGxvY2F0aW9uIHdvdWxkIHN1Y2NlZWQsIHN0b3AgY29tcGFjdGluZyAqLwotCQlpZiAoem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIGxvd193bWFya19wYWdlcyh6b25lKSwgMCwKLQkJCQkgICAgICBhbGxvY19mbGFncykpIHsKLQkJCSpjYW5kaWRhdGVfem9uZSA9IHpvbmU7CisJCWlmICh6b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbG93X3dtYXJrX3BhZ2VzKHpvbmUpLAorCQkJCQljbGFzc3pvbmVfaWR4LCBhbGxvY19mbGFncykpIHsKIAkJCS8qCiAJCQkgKiBXZSB0aGluayB0aGUgYWxsb2NhdGlvbiB3aWxsIHN1Y2NlZWQgaW4gdGhpcyB6b25lLAogCQkJICogYnV0IGl0IGlzIG5vdCBjZXJ0YWluLCBoZW5jZSB0aGUgZmFsc2UuIFRoZSBjYWxsZXIKQEAgLTEzNTksNyArMTQwNiw3IEBACiAJCQlnb3RvIGJyZWFrX2xvb3A7CiAJCX0KIAotCQlpZiAobW9kZSAhPSBNSUdSQVRFX0FTWU5DKSB7CisJCWlmIChtb2RlICE9IE1JR1JBVEVfQVNZTkMgJiYgc3RhdHVzID09IENPTVBBQ1RfQ09NUExFVEUpIHsKIAkJCS8qCiAJCQkgKiBXZSB0aGluayB0aGF0IGFsbG9jYXRpb24gd29uJ3Qgc3VjY2VlZCBpbiB0aGlzIHpvbmUKIAkJCSAqIHNvIHdlIGRlZmVyIGNvbXBhY3Rpb24gdGhlcmUuIElmIGl0IGVuZHMgdXAKZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jCmluZGV4IDVjZTQ1YzkuLjBlNThmMzIgMTAwNjQ0Ci0tLSBhL21tL2RlYnVnLmMKKysrIGIvbW0vZGVidWcuYwpAQCAtOTUsNyArOTUsMTAgQEAKIAkJZHVtcF9mbGFncyhwYWdlLT5mbGFncyAmIGJhZGZsYWdzLAogCQkJCXBhZ2VmbGFnX25hbWVzLCBBUlJBWV9TSVpFKHBhZ2VmbGFnX25hbWVzKSk7CiAJfQotCW1lbV9jZ3JvdXBfcHJpbnRfYmFkX3BhZ2UocGFnZSk7CisjaWZkZWYgQ09ORklHX01FTUNHCisJaWYgKHBhZ2UtPm1lbV9jZ3JvdXApCisJCXByX2FsZXJ0KCJwYWdlLT5tZW1fY2dyb3VwOiVwXG4iLCBwYWdlLT5tZW1fY2dyb3VwKTsKKyNlbmRpZgogfQogCiB2b2lkIGR1bXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgY29uc3QgY2hhciAqcmVhc29uKQpkaWZmIC0tZ2l0IGEvbW0vZnJvbnRzd2FwLmMgYi9tbS9mcm9udHN3YXAuYwppbmRleCBjMzBlZWM1Li44ZDgyODA5IDEwMDY0NAotLS0gYS9tbS9mcm9udHN3YXAuYworKysgYi9tbS9mcm9udHN3YXAuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJaWYgKGZyb250c3dhcF9vcHMpCiAJCWZyb250c3dhcF9vcHMtPmluaXQodHlwZSk7CiAJZWxzZSB7Ci0JCUJVR19PTih0eXBlID4gTUFYX1NXQVBGSUxFUyk7CisJCUJVR19PTih0eXBlID49IE1BWF9TV0FQRklMRVMpOwogCQlzZXRfYml0KHR5cGUsIG5lZWRfaW5pdCk7CiAJfQogfQpAQCAtMjQ0LDggKzI0NCwxMCBAQAogCQkgIHRoZSAob2xkZXIpIHBhZ2UgZnJvbSBmcm9udHN3YXAKIAkJICovCiAJCWluY19mcm9udHN3YXBfZmFpbGVkX3N0b3JlcygpOwotCQlpZiAoZHVwKQorCQlpZiAoZHVwKSB7CiAJCQlfX2Zyb250c3dhcF9jbGVhcihzaXMsIG9mZnNldCk7CisJCQlmcm9udHN3YXBfb3BzLT5pbnZhbGlkYXRlX3BhZ2UodHlwZSwgb2Zmc2V0KTsKKwkJfQogCX0KIAlpZiAoZnJvbnRzd2FwX3dyaXRldGhyb3VnaF9lbmFibGVkKQogCQkvKiByZXBvcnQgZmFpbHVyZSBzbyBzd2FwIGFsc28gd3JpdGVzIHRvIHN3YXAgZGV2aWNlICovCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCBkZTk4NDE1Li41YjJjNjg3IDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCisrKyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTc4NCw3ICs3ODQsNiBAQAogCWlmICghcG1kX25vbmUoKnBtZCkpCiAJCXJldHVybiBmYWxzZTsKIAllbnRyeSA9IG1rX3BtZCh6ZXJvX3BhZ2UsIHZtYS0+dm1fcGFnZV9wcm90KTsKLQllbnRyeSA9IHBtZF93cnByb3RlY3QoZW50cnkpOwogCWVudHJ5ID0gcG1kX21raHVnZShlbnRyeSk7CiAJcGd0YWJsZV90cmFuc19odWdlX2RlcG9zaXQobW0sIHBtZCwgcGd0YWJsZSk7CiAJc2V0X3BtZF9hdChtbSwgaGFkZHIsIHBtZCwgZW50cnkpOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDlmZDcyMjcuLjMwY2Q5NjggMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTI2MzgsOCArMjYzOCw5IEBACiAKIAl0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChtbSwgbW11bl9zdGFydCwgbW11bl9lbmQpOworCWFkZHJlc3MgPSBzdGFydDsKIGFnYWluOgotCWZvciAoYWRkcmVzcyA9IHN0YXJ0OyBhZGRyZXNzIDwgZW5kOyBhZGRyZXNzICs9IHN6KSB7CisJZm9yICg7IGFkZHJlc3MgPCBlbmQ7IGFkZHJlc3MgKz0gc3opIHsKIAkJcHRlcCA9IGh1Z2VfcHRlX29mZnNldChtbSwgYWRkcmVzcyk7CiAJCWlmICghcHRlcCkKIAkJCWNvbnRpbnVlOwpAQCAtMjY4Niw2ICsyNjg3LDcgQEAKIAkJcGFnZV9yZW1vdmVfcm1hcChwYWdlKTsKIAkJZm9yY2VfZmx1c2ggPSAhX190bGJfcmVtb3ZlX3BhZ2UodGxiLCBwYWdlKTsKIAkJaWYgKGZvcmNlX2ZsdXNoKSB7CisJCQlhZGRyZXNzICs9IHN6OwogCQkJc3Bpbl91bmxvY2socHRsKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2Nncm91cC5jIGIvbW0vaHVnZXRsYl9jZ3JvdXAuYwppbmRleCBhNjdjMjZlLi4wMzdlMWMwIDEwMDY0NAotLS0gYS9tbS9odWdldGxiX2Nncm91cC5jCisrKyBiL21tL2h1Z2V0bGJfY2dyb3VwLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZV9jb3VudGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiX2Nncm91cC5oPgpAQCAtMjMsNyArMjQsNyBAQAogCS8qCiAJICogdGhlIGNvdW50ZXIgdG8gYWNjb3VudCBmb3IgaHVnZXBhZ2VzIGZyb20gaHVnZXRsYi4KIAkgKi8KLQlzdHJ1Y3QgcmVzX2NvdW50ZXIgaHVnZXBhZ2VbSFVHRV9NQVhfSFNUQVRFXTsKKwlzdHJ1Y3QgcGFnZV9jb3VudGVyIGh1Z2VwYWdlW0hVR0VfTUFYX0hTVEFURV07CiB9OwogCiAjZGVmaW5lIE1FTUZJTEVfUFJJVkFURSh4LCB2YWwpCSgoKHgpIDw8IDE2KSB8ICh2YWwpKQpAQCAtNjAsNyArNjEsNyBAQAogCWludCBpZHg7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IGh1Z2V0bGJfbWF4X2hzdGF0ZTsgaWR4KyspIHsKLQkJaWYgKChyZXNfY291bnRlcl9yZWFkX3U2NCgmaF9jZy0+aHVnZXBhZ2VbaWR4XSwgUkVTX1VTQUdFKSkgPiAwKQorCQlpZiAocGFnZV9jb3VudGVyX3JlYWQoJmhfY2ctPmh1Z2VwYWdlW2lkeF0pKQogCQkJcmV0dXJuIHRydWU7CiAJfQogCXJldHVybiBmYWxzZTsKQEAgLTc5LDEyICs4MCwxMiBAQAogCiAJaWYgKHBhcmVudF9oX2Nncm91cCkgewogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEhVR0VfTUFYX0hTVEFURTsgaWR4KyspCi0JCQlyZXNfY291bnRlcl9pbml0KCZoX2Nncm91cC0+aHVnZXBhZ2VbaWR4XSwKLQkJCQkJICZwYXJlbnRfaF9jZ3JvdXAtPmh1Z2VwYWdlW2lkeF0pOworCQkJcGFnZV9jb3VudGVyX2luaXQoJmhfY2dyb3VwLT5odWdlcGFnZVtpZHhdLAorCQkJCQkgICZwYXJlbnRfaF9jZ3JvdXAtPmh1Z2VwYWdlW2lkeF0pOwogCX0gZWxzZSB7CiAJCXJvb3RfaF9jZ3JvdXAgPSBoX2Nncm91cDsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBIVUdFX01BWF9IU1RBVEU7IGlkeCsrKQotCQkJcmVzX2NvdW50ZXJfaW5pdCgmaF9jZ3JvdXAtPmh1Z2VwYWdlW2lkeF0sIE5VTEwpOworCQkJcGFnZV9jb3VudGVyX2luaXQoJmhfY2dyb3VwLT5odWdlcGFnZVtpZHhdLCBOVUxMKTsKIAl9CiAJcmV0dXJuICZoX2Nncm91cC0+Y3NzOwogfQpAQCAtMTA4LDkgKzEwOSw4IEBACiBzdGF0aWMgdm9pZCBodWdldGxiX2Nncm91cF9tb3ZlX3BhcmVudChpbnQgaWR4LCBzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2csCiAJCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlKQogewotCWludCBjc2l6ZTsKLQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXI7Ci0Jc3RydWN0IHJlc19jb3VudGVyICpmYWlsX3JlczsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CisJc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjsKIAlzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKnBhZ2VfaGNnOwogCXN0cnVjdCBodWdldGxiX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X2h1Z2V0bGJfY2dyb3VwKGhfY2cpOwogCkBAIC0xMjMsMTUgKzEyMywxNSBAQAogCWlmICghcGFnZV9oY2cgfHwgcGFnZV9oY2cgIT0gaF9jZykKIAkJZ290byBvdXQ7CiAKLQljc2l6ZSA9IFBBR0VfU0laRSA8PCBjb21wb3VuZF9vcmRlcihwYWdlKTsKKwlucl9wYWdlcyA9IDEgPDwgY29tcG91bmRfb3JkZXIocGFnZSk7CiAJaWYgKCFwYXJlbnQpIHsKIAkJcGFyZW50ID0gcm9vdF9oX2Nncm91cDsKIAkJLyogcm9vdCBoYXMgbm8gbGltaXQgKi8KLQkJcmVzX2NvdW50ZXJfY2hhcmdlX25vZmFpbCgmcGFyZW50LT5odWdlcGFnZVtpZHhdLAotCQkJCQkgIGNzaXplLCAmZmFpbF9yZXMpOworCQlwYWdlX2NvdW50ZXJfY2hhcmdlKCZwYXJlbnQtPmh1Z2VwYWdlW2lkeF0sIG5yX3BhZ2VzKTsKIAl9CiAJY291bnRlciA9ICZoX2NnLT5odWdlcGFnZVtpZHhdOwotCXJlc19jb3VudGVyX3VuY2hhcmdlX3VudGlsKGNvdW50ZXIsIGNvdW50ZXItPnBhcmVudCwgY3NpemUpOworCS8qIFRha2UgdGhlIHBhZ2VzIG9mZiB0aGUgbG9jYWwgY291bnRlciAqLworCXBhZ2VfY291bnRlcl9jYW5jZWwoY291bnRlciwgbnJfcGFnZXMpOwogCiAJc2V0X2h1Z2V0bGJfY2dyb3VwKHBhZ2UsIHBhcmVudCk7CiBvdXQ6CkBAIC0xNjYsOSArMTY2LDggQEAKIAkJCQkgc3RydWN0IGh1Z2V0bGJfY2dyb3VwICoqcHRyKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCByZXNfY291bnRlciAqZmFpbF9yZXM7CisJc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjsKIAlzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgY3NpemUgPSBucl9wYWdlcyAqIFBBR0VfU0laRTsKIAogCWlmIChodWdldGxiX2Nncm91cF9kaXNhYmxlZCgpKQogCQlnb3RvIGRvbmU7CkBAIC0xODcsNyArMTg2LDcgQEAKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJmhfY2ctPmh1Z2VwYWdlW2lkeF0sIGNzaXplLCAmZmFpbF9yZXMpOworCXJldCA9IHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKCZoX2NnLT5odWdlcGFnZVtpZHhdLCBucl9wYWdlcywgJmNvdW50ZXIpOwogCWNzc19wdXQoJmhfY2ctPmNzcyk7CiBkb25lOgogCSpwdHIgPSBoX2NnOwpAQCAtMjEzLDcgKzIxMiw2IEBACiAJCQkJICBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2c7Ci0JdW5zaWduZWQgbG9uZyBjc2l6ZSA9IG5yX3BhZ2VzICogUEFHRV9TSVpFOwogCiAJaWYgKGh1Z2V0bGJfY2dyb3VwX2Rpc2FibGVkKCkpCiAJCXJldHVybjsKQEAgLTIyMiw2MSArMjIwLDc2IEBACiAJaWYgKHVubGlrZWx5KCFoX2NnKSkKIAkJcmV0dXJuOwogCXNldF9odWdldGxiX2Nncm91cChwYWdlLCBOVUxMKTsKLQlyZXNfY291bnRlcl91bmNoYXJnZSgmaF9jZy0+aHVnZXBhZ2VbaWR4XSwgY3NpemUpOworCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmaF9jZy0+aHVnZXBhZ2VbaWR4XSwgbnJfcGFnZXMpOwogCXJldHVybjsKIH0KIAogdm9pZCBodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXAoaW50IGlkeCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKIAkJCQkgICAgc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnKQogewotCXVuc2lnbmVkIGxvbmcgY3NpemUgPSBucl9wYWdlcyAqIFBBR0VfU0laRTsKLQogCWlmIChodWdldGxiX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFoX2NnKQogCQlyZXR1cm47CiAKIAlpZiAoaHVnZV9wYWdlX29yZGVyKCZoc3RhdGVzW2lkeF0pIDwgSFVHRVRMQl9DR1JPVVBfTUlOX09SREVSKQogCQlyZXR1cm47CiAKLQlyZXNfY291bnRlcl91bmNoYXJnZSgmaF9jZy0+aHVnZXBhZ2VbaWR4XSwgY3NpemUpOworCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmaF9jZy0+aHVnZXBhZ2VbaWR4XSwgbnJfcGFnZXMpOwogCXJldHVybjsKIH0KIAorZW51bSB7CisJUkVTX1VTQUdFLAorCVJFU19MSU1JVCwKKwlSRVNfTUFYX1VTQUdFLAorCVJFU19GQUlMQ05ULAorfTsKKwogc3RhdGljIHU2NCBodWdldGxiX2Nncm91cF9yZWFkX3U2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAogCQkJCSAgIHN0cnVjdCBjZnR5cGUgKmNmdCkKIHsKLQlpbnQgaWR4LCBuYW1lOworCXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7CiAJc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gaHVnZXRsYl9jZ3JvdXBfZnJvbV9jc3MoY3NzKTsKIAotCWlkeCA9IE1FTUZJTEVfSURYKGNmdC0+cHJpdmF0ZSk7Ci0JbmFtZSA9IE1FTUZJTEVfQVRUUihjZnQtPnByaXZhdGUpOworCWNvdW50ZXIgPSAmaF9jZy0+aHVnZXBhZ2VbTUVNRklMRV9JRFgoY2Z0LT5wcml2YXRlKV07CiAKLQlyZXR1cm4gcmVzX2NvdW50ZXJfcmVhZF91NjQoJmhfY2ctPmh1Z2VwYWdlW2lkeF0sIG5hbWUpOworCXN3aXRjaCAoTUVNRklMRV9BVFRSKGNmdC0+cHJpdmF0ZSkpIHsKKwljYXNlIFJFU19VU0FHRToKKwkJcmV0dXJuICh1NjQpcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcikgKiBQQUdFX1NJWkU7CisJY2FzZSBSRVNfTElNSVQ6CisJCXJldHVybiAodTY0KWNvdW50ZXItPmxpbWl0ICogUEFHRV9TSVpFOworCWNhc2UgUkVTX01BWF9VU0FHRToKKwkJcmV0dXJuICh1NjQpY291bnRlci0+d2F0ZXJtYXJrICogUEFHRV9TSVpFOworCWNhc2UgUkVTX0ZBSUxDTlQ6CisJCXJldHVybiBjb3VudGVyLT5mYWlsY250OworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KIH0KIAorc3RhdGljIERFRklORV9NVVRFWChodWdldGxiX2xpbWl0X211dGV4KTsKKwogc3RhdGljIHNzaXplX3QgaHVnZXRsYl9jZ3JvdXBfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLAogCQkJCSAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpCiB7Ci0JaW50IGlkeCwgbmFtZSwgcmV0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJaW50IHJldCwgaWR4OworCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CiAJc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gaHVnZXRsYl9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7CiAKLQlidWYgPSBzdHJzdHJpcChidWYpOwotCWlkeCA9IE1FTUZJTEVfSURYKG9mX2NmdChvZiktPnByaXZhdGUpOwotCW5hbWUgPSBNRU1GSUxFX0FUVFIob2ZfY2Z0KG9mKS0+cHJpdmF0ZSk7CisJaWYgKGh1Z2V0bGJfY2dyb3VwX2lzX3Jvb3QoaF9jZykpIC8qIENhbid0IHNldCBsaW1pdCBvbiByb290ICovCisJCXJldHVybiAtRUlOVkFMOwogCi0Jc3dpdGNoIChuYW1lKSB7CisJYnVmID0gc3Ryc3RyaXAoYnVmKTsKKwlyZXQgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCAmbnJfcGFnZXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZHggPSBNRU1GSUxFX0lEWChvZl9jZnQob2YpLT5wcml2YXRlKTsKKworCXN3aXRjaCAoTUVNRklMRV9BVFRSKG9mX2NmdChvZiktPnByaXZhdGUpKSB7CiAJY2FzZSBSRVNfTElNSVQ6Ci0JCWlmIChodWdldGxiX2Nncm91cF9pc19yb290KGhfY2cpKSB7Ci0JCQkvKiBDYW4ndCBzZXQgbGltaXQgb24gcm9vdCAqLwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIFRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgbmVjZXNzYXJ5IHBhcnNlLi4ucmV1c2UgaXQgKi8KLQkJcmV0ID0gcmVzX2NvdW50ZXJfbWVtcGFyc2Vfd3JpdGVfc3RyYXRlZ3koYnVmLCAmdmFsKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCQl2YWwgPSBBTElHTih2YWwsIDFVTEwgPDwgaHVnZV9wYWdlX3NoaWZ0KCZoc3RhdGVzW2lkeF0pKTsKLQkJcmV0ID0gcmVzX2NvdW50ZXJfc2V0X2xpbWl0KCZoX2NnLT5odWdlcGFnZVtpZHhdLCB2YWwpOworCQltdXRleF9sb2NrKCZodWdldGxiX2xpbWl0X211dGV4KTsKKwkJcmV0ID0gcGFnZV9jb3VudGVyX2xpbWl0KCZoX2NnLT5odWdlcGFnZVtpZHhdLCBucl9wYWdlcyk7CisJCW11dGV4X3VubG9jaygmaHVnZXRsYl9saW1pdF9tdXRleCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0yODgsMTggKzMwMSwxOCBAQAogc3RhdGljIHNzaXplX3QgaHVnZXRsYl9jZ3JvdXBfcmVzZXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLAogCQkJCSAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpCiB7Ci0JaW50IGlkeCwgbmFtZSwgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyOwogCXN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IGh1Z2V0bGJfY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpOwogCi0JaWR4ID0gTUVNRklMRV9JRFgob2ZfY2Z0KG9mKS0+cHJpdmF0ZSk7Ci0JbmFtZSA9IE1FTUZJTEVfQVRUUihvZl9jZnQob2YpLT5wcml2YXRlKTsKKwljb3VudGVyID0gJmhfY2ctPmh1Z2VwYWdlW01FTUZJTEVfSURYKG9mX2NmdChvZiktPnByaXZhdGUpXTsKIAotCXN3aXRjaCAobmFtZSkgeworCXN3aXRjaCAoTUVNRklMRV9BVFRSKG9mX2NmdChvZiktPnByaXZhdGUpKSB7CiAJY2FzZSBSRVNfTUFYX1VTQUdFOgotCQlyZXNfY291bnRlcl9yZXNldF9tYXgoJmhfY2ctPmh1Z2VwYWdlW2lkeF0pOworCQlwYWdlX2NvdW50ZXJfcmVzZXRfd2F0ZXJtYXJrKGNvdW50ZXIpOwogCQlicmVhazsKIAljYXNlIFJFU19GQUlMQ05UOgotCQlyZXNfY291bnRlcl9yZXNldF9mYWlsY250KCZoX2NnLT5odWdlcGFnZVtpZHhdKTsKKwkJY291bnRlci0+ZmFpbGNudCA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCBhNGY5MGJhLi5lZmFkMjQxIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCisrKyBiL21tL2ludGVybmFsLmgKQEAgLTE2MSwxMyArMTYxLDEwIEBACiAJdW5zaWduZWQgbG9uZyBtaWdyYXRlX3BmbjsJLyogaXNvbGF0ZV9taWdyYXRlcGFnZXMgc2VhcmNoIGJhc2UgKi8KIAllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlOwkJLyogQXN5bmMgb3Igc3luYyBtaWdyYXRpb24gbW9kZSAqLwogCWJvb2wgaWdub3JlX3NraXBfaGludDsJCS8qIFNjYW4gYmxvY2tzIGV2ZW4gaWYgbWFya2VkIHNraXAgKi8KLQlib29sIGZpbmlzaGVkX3VwZGF0ZV9mcmVlOwkvKiBUcnVlIHdoZW4gdGhlIHpvbmUgY2FjaGVkIHBmbnMgYXJlCi0JCQkJCSAqIG5vIGxvbmdlciBiZWluZyB1cGRhdGVkCi0JCQkJCSAqLwotCWJvb2wgZmluaXNoZWRfdXBkYXRlX21pZ3JhdGU7Ci0KIAlpbnQgb3JkZXI7CQkJLyogb3JkZXIgYSBkaXJlY3QgY29tcGFjdG9yIG5lZWRzICovCiAJY29uc3QgZ2ZwX3QgZ2ZwX21hc2s7CQkvKiBnZnAgbWFzayBvZiBhIGRpcmVjdCBjb21wYWN0b3IgKi8KKwljb25zdCBpbnQgYWxsb2NfZmxhZ3M7CQkvKiBhbGxvYyBmbGFncyBvZiBhIGRpcmVjdCBjb21wYWN0b3IgKi8KKwljb25zdCBpbnQgY2xhc3N6b25lX2lkeDsJLyogem9uZSBpbmRleCBvZiBhIGRpcmVjdCBjb21wYWN0b3IgKi8KIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAlpbnQgY29udGVuZGVkOwkJCS8qIFNpZ25hbCBuZWVkX3NjaGVkKCkgb3IgbG9jawogCQkJCQkgKiBjb250ZW50aW9uIGRldGVjdGVkIGR1cmluZwpkaWZmIC0tZ2l0IGEvbW0vaW92X2l0ZXIuYyBiL21tL2lvdl9pdGVyLmMKaW5kZXggZTM0YTNjYi4uYTE1OTljYSAxMDA2NDQKLS0tIGEvbW0vaW92X2l0ZXIuYworKysgYi9tbS9pb3ZfaXRlci5jCkBAIC0zLDk1ICszLDEzNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogCi1zdGF0aWMgc2l6ZV90IGNvcHlfdG9faXRlcl9pb3ZlYyh2b2lkICpmcm9tLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSkKLXsKLQlzaXplX3Qgc2tpcCwgY29weSwgbGVmdCwgd2FudGVkOwotCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92OwotCWNoYXIgX191c2VyICpidWY7Ci0KLQlpZiAodW5saWtlbHkoYnl0ZXMgPiBpLT5jb3VudCkpCi0JCWJ5dGVzID0gaS0+Y291bnQ7Ci0KLQlpZiAodW5saWtlbHkoIWJ5dGVzKSkKLQkJcmV0dXJuIDA7Ci0KLQl3YW50ZWQgPSBieXRlczsKLQlpb3YgPSBpLT5pb3Y7Ci0Jc2tpcCA9IGktPmlvdl9vZmZzZXQ7Ci0JYnVmID0gaW92LT5pb3ZfYmFzZSArIHNraXA7Ci0JY29weSA9IG1pbihieXRlcywgaW92LT5pb3ZfbGVuIC0gc2tpcCk7Ci0KLQlsZWZ0ID0gX19jb3B5X3RvX3VzZXIoYnVmLCBmcm9tLCBjb3B5KTsKLQljb3B5IC09IGxlZnQ7Ci0Jc2tpcCArPSBjb3B5OwotCWZyb20gKz0gY29weTsKLQlieXRlcyAtPSBjb3B5OwotCXdoaWxlICh1bmxpa2VseSghbGVmdCAmJiBieXRlcykpIHsKLQkJaW92Kys7Ci0JCWJ1ZiA9IGlvdi0+aW92X2Jhc2U7Ci0JCWNvcHkgPSBtaW4oYnl0ZXMsIGlvdi0+aW92X2xlbik7Ci0JCWxlZnQgPSBfX2NvcHlfdG9fdXNlcihidWYsIGZyb20sIGNvcHkpOwotCQljb3B5IC09IGxlZnQ7Ci0JCXNraXAgPSBjb3B5OwotCQlmcm9tICs9IGNvcHk7Ci0JCWJ5dGVzIC09IGNvcHk7Ci0JfQotCi0JaWYgKHNraXAgPT0gaW92LT5pb3ZfbGVuKSB7Ci0JCWlvdisrOwotCQlza2lwID0gMDsKLQl9Ci0JaS0+Y291bnQgLT0gd2FudGVkIC0gYnl0ZXM7Ci0JaS0+bnJfc2VncyAtPSBpb3YgLSBpLT5pb3Y7Ci0JaS0+aW92ID0gaW92OwotCWktPmlvdl9vZmZzZXQgPSBza2lwOwotCXJldHVybiB3YW50ZWQgLSBieXRlczsKKyNkZWZpbmUgaXRlcmF0ZV9pb3ZlYyhpLCBuLCBfX3YsIF9fcCwgc2tpcCwgU1RFUCkgewlcCisJc2l6ZV90IGxlZnQ7CQkJCQlcCisJc2l6ZV90IHdhbnRlZCA9IG47CQkJCVwKKwlfX3AgPSBpLT5pb3Y7CQkJCQlcCisJX192Lmlvdl9sZW4gPSBtaW4obiwgX19wLT5pb3ZfbGVuIC0gc2tpcCk7CVwKKwlpZiAobGlrZWx5KF9fdi5pb3ZfbGVuKSkgewkJCVwKKwkJX192Lmlvdl9iYXNlID0gX19wLT5pb3ZfYmFzZSArIHNraXA7CVwKKwkJbGVmdCA9IChTVEVQKTsJCQkJXAorCQlfX3YuaW92X2xlbiAtPSBsZWZ0OwkJCVwKKwkJc2tpcCArPSBfX3YuaW92X2xlbjsJCQlcCisJCW4gLT0gX192Lmlvdl9sZW47CQkJXAorCX0gZWxzZSB7CQkJCQlcCisJCWxlZnQgPSAwOwkJCQlcCisJfQkJCQkJCVwKKwl3aGlsZSAodW5saWtlbHkoIWxlZnQgJiYgbikpIHsJCQlcCisJCV9fcCsrOwkJCQkJXAorCQlfX3YuaW92X2xlbiA9IG1pbihuLCBfX3AtPmlvdl9sZW4pOwlcCisJCWlmICh1bmxpa2VseSghX192Lmlvdl9sZW4pKQkJXAorCQkJY29udGludWU7CQkJXAorCQlfX3YuaW92X2Jhc2UgPSBfX3AtPmlvdl9iYXNlOwkJXAorCQlsZWZ0ID0gKFNURVApOwkJCQlcCisJCV9fdi5pb3ZfbGVuIC09IGxlZnQ7CQkJXAorCQlza2lwID0gX192Lmlvdl9sZW47CQkJXAorCQluIC09IF9fdi5pb3ZfbGVuOwkJCVwKKwl9CQkJCQkJXAorCW4gPSB3YW50ZWQgLSBuOwkJCQkJXAogfQogCi1zdGF0aWMgc2l6ZV90IGNvcHlfZnJvbV9pdGVyX2lvdmVjKHZvaWQgKnRvLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSkKLXsKLQlzaXplX3Qgc2tpcCwgY29weSwgbGVmdCwgd2FudGVkOwotCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92OwotCWNoYXIgX191c2VyICpidWY7CisjZGVmaW5lIGl0ZXJhdGVfa3ZlYyhpLCBuLCBfX3YsIF9fcCwgc2tpcCwgU1RFUCkgewlcCisJc2l6ZV90IHdhbnRlZCA9IG47CQkJCVwKKwlfX3AgPSBpLT5rdmVjOwkJCQkJXAorCV9fdi5pb3ZfbGVuID0gbWluKG4sIF9fcC0+aW92X2xlbiAtIHNraXApOwlcCisJaWYgKGxpa2VseShfX3YuaW92X2xlbikpIHsJCQlcCisJCV9fdi5pb3ZfYmFzZSA9IF9fcC0+aW92X2Jhc2UgKyBza2lwOwlcCisJCSh2b2lkKShTVEVQKTsJCQkJXAorCQlza2lwICs9IF9fdi5pb3ZfbGVuOwkJCVwKKwkJbiAtPSBfX3YuaW92X2xlbjsJCQlcCisJfQkJCQkJCVwKKwl3aGlsZSAodW5saWtlbHkobikpIHsJCQkJXAorCQlfX3ArKzsJCQkJCVwKKwkJX192Lmlvdl9sZW4gPSBtaW4obiwgX19wLT5pb3ZfbGVuKTsJXAorCQlpZiAodW5saWtlbHkoIV9fdi5pb3ZfbGVuKSkJCVwKKwkJCWNvbnRpbnVlOwkJCVwKKwkJX192Lmlvdl9iYXNlID0gX19wLT5pb3ZfYmFzZTsJCVwKKwkJKHZvaWQpKFNURVApOwkJCQlcCisJCXNraXAgPSBfX3YuaW92X2xlbjsJCQlcCisJCW4gLT0gX192Lmlvdl9sZW47CQkJXAorCX0JCQkJCQlcCisJbiA9IHdhbnRlZDsJCQkJCVwKK30KIAotCWlmICh1bmxpa2VseShieXRlcyA+IGktPmNvdW50KSkKLQkJYnl0ZXMgPSBpLT5jb3VudDsKKyNkZWZpbmUgaXRlcmF0ZV9idmVjKGksIG4sIF9fdiwgX19wLCBza2lwLCBTVEVQKSB7CVwKKwlzaXplX3Qgd2FudGVkID0gbjsJCQkJXAorCV9fcCA9IGktPmJ2ZWM7CQkJCQlcCisJX192LmJ2X2xlbiA9IG1pbl90KHNpemVfdCwgbiwgX19wLT5idl9sZW4gLSBza2lwKTsJXAorCWlmIChsaWtlbHkoX192LmJ2X2xlbikpIHsJCQlcCisJCV9fdi5idl9wYWdlID0gX19wLT5idl9wYWdlOwkJXAorCQlfX3YuYnZfb2Zmc2V0ID0gX19wLT5idl9vZmZzZXQgKyBza2lwOyAJXAorCQkodm9pZCkoU1RFUCk7CQkJCVwKKwkJc2tpcCArPSBfX3YuYnZfbGVuOwkJCVwKKwkJbiAtPSBfX3YuYnZfbGVuOwkJCVwKKwl9CQkJCQkJXAorCXdoaWxlICh1bmxpa2VseShuKSkgewkJCQlcCisJCV9fcCsrOwkJCQkJXAorCQlfX3YuYnZfbGVuID0gbWluX3Qoc2l6ZV90LCBuLCBfX3AtPmJ2X2xlbik7CVwKKwkJaWYgKHVubGlrZWx5KCFfX3YuYnZfbGVuKSkJCVwKKwkJCWNvbnRpbnVlOwkJCVwKKwkJX192LmJ2X3BhZ2UgPSBfX3AtPmJ2X3BhZ2U7CQlcCisJCV9fdi5idl9vZmZzZXQgPSBfX3AtPmJ2X29mZnNldDsJCVwKKwkJKHZvaWQpKFNURVApOwkJCQlcCisJCXNraXAgPSBfX3YuYnZfbGVuOwkJCVwKKwkJbiAtPSBfX3YuYnZfbGVuOwkJCVwKKwl9CQkJCQkJXAorCW4gPSB3YW50ZWQ7CQkJCQlcCit9CiAKLQlpZiAodW5saWtlbHkoIWJ5dGVzKSkKLQkJcmV0dXJuIDA7CisjZGVmaW5lIGl0ZXJhdGVfYWxsX2tpbmRzKGksIG4sIHYsIEksIEIsIEspIHsJCQlcCisJc2l6ZV90IHNraXAgPSBpLT5pb3Zfb2Zmc2V0OwkJCQlcCisJaWYgKHVubGlrZWx5KGktPnR5cGUgJiBJVEVSX0JWRUMpKSB7CQkJXAorCQljb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsJCQlcCisJCXN0cnVjdCBiaW9fdmVjIHY7CQkJCVwKKwkJaXRlcmF0ZV9idmVjKGksIG4sIHYsIGJ2ZWMsIHNraXAsIChCKSkJCVwKKwl9IGVsc2UgaWYgKHVubGlrZWx5KGktPnR5cGUgJiBJVEVSX0tWRUMpKSB7CQlcCisJCWNvbnN0IHN0cnVjdCBrdmVjICprdmVjOwkJCVwKKwkJc3RydWN0IGt2ZWMgdjsJCQkJCVwKKwkJaXRlcmF0ZV9rdmVjKGksIG4sIHYsIGt2ZWMsIHNraXAsIChLKSkJCVwKKwl9IGVsc2UgewkJCQkJCVwKKwkJY29uc3Qgc3RydWN0IGlvdmVjICppb3Y7CQkJXAorCQlzdHJ1Y3QgaW92ZWMgdjsJCQkJCVwKKwkJaXRlcmF0ZV9pb3ZlYyhpLCBuLCB2LCBpb3YsIHNraXAsIChJKSkJCVwKKwl9CQkJCQkJCVwKK30KIAotCXdhbnRlZCA9IGJ5dGVzOwotCWlvdiA9IGktPmlvdjsKLQlza2lwID0gaS0+aW92X29mZnNldDsKLQlidWYgPSBpb3YtPmlvdl9iYXNlICsgc2tpcDsKLQljb3B5ID0gbWluKGJ5dGVzLCBpb3YtPmlvdl9sZW4gLSBza2lwKTsKLQotCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyKHRvLCBidWYsIGNvcHkpOwotCWNvcHkgLT0gbGVmdDsKLQlza2lwICs9IGNvcHk7Ci0JdG8gKz0gY29weTsKLQlieXRlcyAtPSBjb3B5OwotCXdoaWxlICh1bmxpa2VseSghbGVmdCAmJiBieXRlcykpIHsKLQkJaW92Kys7Ci0JCWJ1ZiA9IGlvdi0+aW92X2Jhc2U7Ci0JCWNvcHkgPSBtaW4oYnl0ZXMsIGlvdi0+aW92X2xlbik7Ci0JCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyKHRvLCBidWYsIGNvcHkpOwotCQljb3B5IC09IGxlZnQ7Ci0JCXNraXAgPSBjb3B5OwotCQl0byArPSBjb3B5OwotCQlieXRlcyAtPSBjb3B5OwotCX0KLQotCWlmIChza2lwID09IGlvdi0+aW92X2xlbikgewotCQlpb3YrKzsKLQkJc2tpcCA9IDA7Ci0JfQotCWktPmNvdW50IC09IHdhbnRlZCAtIGJ5dGVzOwotCWktPm5yX3NlZ3MgLT0gaW92IC0gaS0+aW92OwotCWktPmlvdiA9IGlvdjsKLQlpLT5pb3Zfb2Zmc2V0ID0gc2tpcDsKLQlyZXR1cm4gd2FudGVkIC0gYnl0ZXM7CisjZGVmaW5lIGl0ZXJhdGVfYW5kX2FkdmFuY2UoaSwgbiwgdiwgSSwgQiwgSykgewkJCVwKKwlzaXplX3Qgc2tpcCA9IGktPmlvdl9vZmZzZXQ7CQkJCVwKKwlpZiAodW5saWtlbHkoaS0+dHlwZSAmIElURVJfQlZFQykpIHsJCQlcCisJCWNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjOwkJCVwKKwkJc3RydWN0IGJpb192ZWMgdjsJCQkJXAorCQlpdGVyYXRlX2J2ZWMoaSwgbiwgdiwgYnZlYywgc2tpcCwgKEIpKQkJXAorCQlpZiAoc2tpcCA9PSBidmVjLT5idl9sZW4pIHsJCQlcCisJCQlidmVjKys7CQkJCQlcCisJCQlza2lwID0gMDsJCQkJXAorCQl9CQkJCQkJXAorCQlpLT5ucl9zZWdzIC09IGJ2ZWMgLSBpLT5idmVjOwkJCVwKKwkJaS0+YnZlYyA9IGJ2ZWM7CQkJCQlcCisJfSBlbHNlIGlmICh1bmxpa2VseShpLT50eXBlICYgSVRFUl9LVkVDKSkgewkJXAorCQljb25zdCBzdHJ1Y3Qga3ZlYyAqa3ZlYzsJCQlcCisJCXN0cnVjdCBrdmVjIHY7CQkJCQlcCisJCWl0ZXJhdGVfa3ZlYyhpLCBuLCB2LCBrdmVjLCBza2lwLCAoSykpCQlcCisJCWlmIChza2lwID09IGt2ZWMtPmlvdl9sZW4pIHsJCQlcCisJCQlrdmVjKys7CQkJCQlcCisJCQlza2lwID0gMDsJCQkJXAorCQl9CQkJCQkJXAorCQlpLT5ucl9zZWdzIC09IGt2ZWMgLSBpLT5rdmVjOwkJCVwKKwkJaS0+a3ZlYyA9IGt2ZWM7CQkJCQlcCisJfSBlbHNlIHsJCQkJCQlcCisJCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92OwkJCVwKKwkJc3RydWN0IGlvdmVjIHY7CQkJCQlcCisJCWl0ZXJhdGVfaW92ZWMoaSwgbiwgdiwgaW92LCBza2lwLCAoSSkpCQlcCisJCWlmIChza2lwID09IGlvdi0+aW92X2xlbikgewkJCVwKKwkJCWlvdisrOwkJCQkJXAorCQkJc2tpcCA9IDA7CQkJCVwKKwkJfQkJCQkJCVwKKwkJaS0+bnJfc2VncyAtPSBpb3YgLSBpLT5pb3Y7CQkJXAorCQlpLT5pb3YgPSBpb3Y7CQkJCQlcCisJfQkJCQkJCQlcCisJaS0+Y291bnQgLT0gbjsJCQkJCQlcCisJaS0+aW92X29mZnNldCA9IHNraXA7CQkJCQlcCiB9CiAKIHN0YXRpYyBzaXplX3QgY29weV9wYWdlX3RvX2l0ZXJfaW92ZWMoc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBieXRlcywKQEAgLTI1NiwxMzQgKzI5Nyw2IEBACiAJcmV0dXJuIHdhbnRlZCAtIGJ5dGVzOwogfQogCi1zdGF0aWMgc2l6ZV90IHplcm9faW92ZWMoc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCi17Ci0Jc2l6ZV90IHNraXAsIGNvcHksIGxlZnQsIHdhbnRlZDsKLQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdjsKLQljaGFyIF9fdXNlciAqYnVmOwotCi0JaWYgKHVubGlrZWx5KGJ5dGVzID4gaS0+Y291bnQpKQotCQlieXRlcyA9IGktPmNvdW50OwotCi0JaWYgKHVubGlrZWx5KCFieXRlcykpCi0JCXJldHVybiAwOwotCi0Jd2FudGVkID0gYnl0ZXM7Ci0JaW92ID0gaS0+aW92OwotCXNraXAgPSBpLT5pb3Zfb2Zmc2V0OwotCWJ1ZiA9IGlvdi0+aW92X2Jhc2UgKyBza2lwOwotCWNvcHkgPSBtaW4oYnl0ZXMsIGlvdi0+aW92X2xlbiAtIHNraXApOwotCi0JbGVmdCA9IF9fY2xlYXJfdXNlcihidWYsIGNvcHkpOwotCWNvcHkgLT0gbGVmdDsKLQlza2lwICs9IGNvcHk7Ci0JYnl0ZXMgLT0gY29weTsKLQotCXdoaWxlICh1bmxpa2VseSghbGVmdCAmJiBieXRlcykpIHsKLQkJaW92Kys7Ci0JCWJ1ZiA9IGlvdi0+aW92X2Jhc2U7Ci0JCWNvcHkgPSBtaW4oYnl0ZXMsIGlvdi0+aW92X2xlbik7Ci0JCWxlZnQgPSBfX2NsZWFyX3VzZXIoYnVmLCBjb3B5KTsKLQkJY29weSAtPSBsZWZ0OwotCQlza2lwID0gY29weTsKLQkJYnl0ZXMgLT0gY29weTsKLQl9Ci0KLQlpZiAoc2tpcCA9PSBpb3YtPmlvdl9sZW4pIHsKLQkJaW92Kys7Ci0JCXNraXAgPSAwOwotCX0KLQlpLT5jb3VudCAtPSB3YW50ZWQgLSBieXRlczsKLQlpLT5ucl9zZWdzIC09IGlvdiAtIGktPmlvdjsKLQlpLT5pb3YgPSBpb3Y7Ci0JaS0+aW92X29mZnNldCA9IHNraXA7Ci0JcmV0dXJuIHdhbnRlZCAtIGJ5dGVzOwotfQotCi1zdGF0aWMgc2l6ZV90IF9faW92ZWNfY29weV9mcm9tX3VzZXJfaW5hdG9taWMoY2hhciAqdmFkZHIsCi0JCQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IGJhc2UsIHNpemVfdCBieXRlcykKLXsKLQlzaXplX3QgY29waWVkID0gMCwgbGVmdCA9IDA7Ci0KLQl3aGlsZSAoYnl0ZXMpIHsKLQkJY2hhciBfX3VzZXIgKmJ1ZiA9IGlvdi0+aW92X2Jhc2UgKyBiYXNlOwotCQlpbnQgY29weSA9IG1pbihieXRlcywgaW92LT5pb3ZfbGVuIC0gYmFzZSk7Ci0KLQkJYmFzZSA9IDA7Ci0JCWxlZnQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZhZGRyLCBidWYsIGNvcHkpOwotCQljb3BpZWQgKz0gY29weTsKLQkJYnl0ZXMgLT0gY29weTsKLQkJdmFkZHIgKz0gY29weTsKLQkJaW92Kys7Ci0KLQkJaWYgKHVubGlrZWx5KGxlZnQpKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBjb3BpZWQgLSBsZWZ0OwotfQotCi0vKgotICogQ29weSBhcyBtdWNoIGFzIHdlIGNhbiBpbnRvIHRoZSBwYWdlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3aGljaAotICogd2VyZSBzdWNjZXNzZnVsbHkgY29waWVkLiAgSWYgYSBmYXVsdCBpcyBlbmNvdW50ZXJlZCB0aGVuIHJldHVybiB0aGUgbnVtYmVyIG9mCi0gKiBieXRlcyB3aGljaCB3ZXJlIGNvcGllZC4KLSAqLwotc3RhdGljIHNpemVfdCBjb3B5X2Zyb21fdXNlcl9hdG9taWNfaW92ZWMoc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCXN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBieXRlcykKLXsKLQljaGFyICprYWRkcjsKLQlzaXplX3QgY29waWVkOwotCi0Ja2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlKTsKLQlpZiAobGlrZWx5KGktPm5yX3NlZ3MgPT0gMSkpIHsKLQkJaW50IGxlZnQ7Ci0JCWNoYXIgX191c2VyICpidWYgPSBpLT5pb3YtPmlvdl9iYXNlICsgaS0+aW92X29mZnNldDsKLQkJbGVmdCA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoa2FkZHIgKyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpOwotCQljb3BpZWQgPSBieXRlcyAtIGxlZnQ7Ci0JfSBlbHNlIHsKLQkJY29waWVkID0gX19pb3ZlY19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhrYWRkciArIG9mZnNldCwKLQkJCQkJCWktPmlvdiwgaS0+aW92X29mZnNldCwgYnl0ZXMpOwotCX0KLQlrdW5tYXBfYXRvbWljKGthZGRyKTsKLQotCXJldHVybiBjb3BpZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkdmFuY2VfaW92ZWMoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3QgYnl0ZXMpCi17Ci0JQlVHX09OKGktPmNvdW50IDwgYnl0ZXMpOwotCi0JaWYgKGxpa2VseShpLT5ucl9zZWdzID09IDEpKSB7Ci0JCWktPmlvdl9vZmZzZXQgKz0gYnl0ZXM7Ci0JCWktPmNvdW50IC09IGJ5dGVzOwotCX0gZWxzZSB7Ci0JCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92ID0gaS0+aW92OwotCQlzaXplX3QgYmFzZSA9IGktPmlvdl9vZmZzZXQ7Ci0JCXVuc2lnbmVkIGxvbmcgbnJfc2VncyA9IGktPm5yX3NlZ3M7Ci0KLQkJLyoKLQkJICogVGhlICFpb3YtPmlvdl9sZW4gY2hlY2sgZW5zdXJlcyB3ZSBza2lwIG92ZXIgdW5saWtlbHkKLQkJICogemVyby1sZW5ndGggc2VnbWVudHMgKHdpdGhvdXQgb3ZlcnJ1bmluZyB0aGUgaW92ZWMpLgotCQkgKi8KLQkJd2hpbGUgKGJ5dGVzIHx8IHVubGlrZWx5KGktPmNvdW50ICYmICFpb3YtPmlvdl9sZW4pKSB7Ci0JCQlpbnQgY29weTsKLQotCQkJY29weSA9IG1pbihieXRlcywgaW92LT5pb3ZfbGVuIC0gYmFzZSk7Ci0JCQlCVUdfT04oIWktPmNvdW50IHx8IGktPmNvdW50IDwgY29weSk7Ci0JCQlpLT5jb3VudCAtPSBjb3B5OwotCQkJYnl0ZXMgLT0gY29weTsKLQkJCWJhc2UgKz0gY29weTsKLQkJCWlmIChpb3YtPmlvdl9sZW4gPT0gYmFzZSkgewotCQkJCWlvdisrOwotCQkJCW5yX3NlZ3MtLTsKLQkJCQliYXNlID0gMDsKLQkJCX0KLQkJfQotCQlpLT5pb3YgPSBpb3Y7Ci0JCWktPmlvdl9vZmZzZXQgPSBiYXNlOwotCQlpLT5ucl9zZWdzID0gbnJfc2VnczsKLQl9Ci19Ci0KIC8qCiAgKiBGYXVsdCBpbiB0aGUgZmlyc3QgaW92ZWMgb2YgdGhlIGdpdmVuIGlvdl9pdGVyLCB0byBhIG1heGltdW0gbGVuZ3RoCiAgKiBvZiBieXRlcy4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIG5vbi16ZXJvIGlmIHRoZSBtZW1vcnkgY291bGQgbm90IGJlCkBAIC0zOTUsNyArMzA4LDcgQEAKICAqLwogaW50IGlvdl9pdGVyX2ZhdWx0X2luX3JlYWRhYmxlKHN0cnVjdCBpb3ZfaXRlciAqaSwgc2l6ZV90IGJ5dGVzKQogewotCWlmICghKGktPnR5cGUgJiBJVEVSX0JWRUMpKSB7CisJaWYgKCEoaS0+dHlwZSAmIChJVEVSX0JWRUN8SVRFUl9LVkVDKSkpIHsKIAkJY2hhciBfX3VzZXIgKmJ1ZiA9IGktPmlvdi0+aW92X2Jhc2UgKyBpLT5pb3Zfb2Zmc2V0OwogCQlieXRlcyA9IG1pbihieXRlcywgaS0+aW92LT5pb3ZfbGVuIC0gaS0+aW92X29mZnNldCk7CiAJCXJldHVybiBmYXVsdF9pbl9wYWdlc19yZWFkYWJsZShidWYsIGJ5dGVzKTsKQEAgLTQwNCwxMzYgKzMxNywyNSBAQAogfQogRVhQT1JUX1NZTUJPTChpb3ZfaXRlcl9mYXVsdF9pbl9yZWFkYWJsZSk7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsaWdubWVudF9pb3ZlYyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCi17Ci0JY29uc3Qgc3RydWN0IGlvdmVjICppb3YgPSBpLT5pb3Y7Ci0JdW5zaWduZWQgbG9uZyByZXM7Ci0Jc2l6ZV90IHNpemUgPSBpLT5jb3VudDsKLQlzaXplX3QgbjsKLQotCWlmICghc2l6ZSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXMgPSAodW5zaWduZWQgbG9uZylpb3YtPmlvdl9iYXNlICsgaS0+aW92X29mZnNldDsKLQluID0gaW92LT5pb3ZfbGVuIC0gaS0+aW92X29mZnNldDsKLQlpZiAobiA+PSBzaXplKQotCQlyZXR1cm4gcmVzIHwgc2l6ZTsKLQlzaXplIC09IG47Ci0JcmVzIHw9IG47Ci0Jd2hpbGUgKHNpemUgPiAoKytpb3YpLT5pb3ZfbGVuKSB7Ci0JCXJlcyB8PSAodW5zaWduZWQgbG9uZylpb3YtPmlvdl9iYXNlIHwgaW92LT5pb3ZfbGVuOwotCQlzaXplIC09IGlvdi0+aW92X2xlbjsKLQl9Ci0JcmVzIHw9ICh1bnNpZ25lZCBsb25nKWlvdi0+aW92X2Jhc2UgfCBzaXplOwotCXJldHVybiByZXM7Ci19Ci0KIHZvaWQgaW92X2l0ZXJfaW5pdChzdHJ1Y3QgaW92X2l0ZXIgKmksIGludCBkaXJlY3Rpb24sCiAJCQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbG9uZyBucl9zZWdzLAogCQkJc2l6ZV90IGNvdW50KQogewogCS8qIEl0IHdpbGwgZ2V0IGJldHRlci4gIEV2ZW50dWFsbHkuLi4gKi8KLQlpZiAoc2VnbWVudF9lcShnZXRfZnMoKSwgS0VSTkVMX0RTKSkKKwlpZiAoc2VnbWVudF9lcShnZXRfZnMoKSwgS0VSTkVMX0RTKSkgewogCQlkaXJlY3Rpb24gfD0gSVRFUl9LVkVDOwotCWktPnR5cGUgPSBkaXJlY3Rpb247Ci0JaS0+aW92ID0gaW92OworCQlpLT50eXBlID0gZGlyZWN0aW9uOworCQlpLT5rdmVjID0gKHN0cnVjdCBrdmVjICopaW92OworCX0gZWxzZSB7CisJCWktPnR5cGUgPSBkaXJlY3Rpb247CisJCWktPmlvdiA9IGlvdjsKKwl9CiAJaS0+bnJfc2VncyA9IG5yX3NlZ3M7CiAJaS0+aW92X29mZnNldCA9IDA7CiAJaS0+Y291bnQgPSBjb3VudDsKIH0KIEVYUE9SVF9TWU1CT0woaW92X2l0ZXJfaW5pdCk7CiAKLXN0YXRpYyBzc2l6ZV90IGdldF9wYWdlc19pb3ZlYyhzdHJ1Y3QgaW92X2l0ZXIgKmksCi0JCSAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBtYXhwYWdlcywKLQkJICAgc2l6ZV90ICpzdGFydCkKLXsKLQlzaXplX3Qgb2Zmc2V0ID0gaS0+aW92X29mZnNldDsKLQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiA9IGktPmlvdjsKLQlzaXplX3QgbGVuOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQlpbnQgbjsKLQlpbnQgcmVzOwotCi0JbGVuID0gaW92LT5pb3ZfbGVuIC0gb2Zmc2V0OwotCWlmIChsZW4gPiBpLT5jb3VudCkKLQkJbGVuID0gaS0+Y291bnQ7Ci0JaWYgKGxlbiA+IG1heHNpemUpCi0JCWxlbiA9IG1heHNpemU7Ci0JYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvdi0+aW92X2Jhc2UgKyBvZmZzZXQ7Ci0JbGVuICs9ICpzdGFydCA9IGFkZHIgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JaWYgKGxlbiA+IG1heHBhZ2VzICogUEFHRV9TSVpFKQotCQlsZW4gPSBtYXhwYWdlcyAqIFBBR0VfU0laRTsKLQlhZGRyICY9IH4oUEFHRV9TSVpFIC0gMSk7Ci0JbiA9IChsZW4gKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKLQlyZXMgPSBnZXRfdXNlcl9wYWdlc19mYXN0KGFkZHIsIG4sIChpLT50eXBlICYgV1JJVEUpICE9IFdSSVRFLCBwYWdlcyk7Ci0JaWYgKHVubGlrZWx5KHJlcyA8IDApKQotCQlyZXR1cm4gcmVzOwotCXJldHVybiAocmVzID09IG4gPyBsZW4gOiByZXMgKiBQQUdFX1NJWkUpIC0gKnN0YXJ0OwotfQotCi1zdGF0aWMgc3NpemVfdCBnZXRfcGFnZXNfYWxsb2NfaW92ZWMoc3RydWN0IGlvdl9pdGVyICppLAotCQkgICBzdHJ1Y3QgcGFnZSAqKipwYWdlcywgc2l6ZV90IG1heHNpemUsCi0JCSAgIHNpemVfdCAqc3RhcnQpCi17Ci0Jc2l6ZV90IG9mZnNldCA9IGktPmlvdl9vZmZzZXQ7Ci0JY29uc3Qgc3RydWN0IGlvdmVjICppb3YgPSBpLT5pb3Y7Ci0Jc2l6ZV90IGxlbjsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0Jdm9pZCAqcDsKLQlpbnQgbjsKLQlpbnQgcmVzOwotCi0JbGVuID0gaW92LT5pb3ZfbGVuIC0gb2Zmc2V0OwotCWlmIChsZW4gPiBpLT5jb3VudCkKLQkJbGVuID0gaS0+Y291bnQ7Ci0JaWYgKGxlbiA+IG1heHNpemUpCi0JCWxlbiA9IG1heHNpemU7Ci0JYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvdi0+aW92X2Jhc2UgKyBvZmZzZXQ7Ci0JbGVuICs9ICpzdGFydCA9IGFkZHIgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JYWRkciAmPSB+KFBBR0VfU0laRSAtIDEpOwotCW4gPSAobGVuICsgUEFHRV9TSVpFIC0gMSkgLyBQQUdFX1NJWkU7Ci0JCi0JcCA9IGttYWxsb2MobiAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwKQotCQlwID0gdm1hbGxvYyhuICogc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKLQlpZiAoIXApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmVzID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChhZGRyLCBuLCAoaS0+dHlwZSAmIFdSSVRFKSAhPSBXUklURSwgcCk7Ci0JaWYgKHVubGlrZWx5KHJlcyA8IDApKSB7Ci0JCWt2ZnJlZShwKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JKnBhZ2VzID0gcDsKLQlyZXR1cm4gKHJlcyA9PSBuID8gbGVuIDogcmVzICogUEFHRV9TSVpFKSAtICpzdGFydDsKLX0KLQotc3RhdGljIGludCBpb3ZfaXRlcl9ucGFnZXNfaW92ZWMoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppLCBpbnQgbWF4cGFnZXMpCi17Ci0Jc2l6ZV90IG9mZnNldCA9IGktPmlvdl9vZmZzZXQ7Ci0Jc2l6ZV90IHNpemUgPSBpLT5jb3VudDsKLQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiA9IGktPmlvdjsKLQlpbnQgbnBhZ2VzID0gMDsKLQlpbnQgbjsKLQotCWZvciAobiA9IDA7IHNpemUgJiYgbiA8IGktPm5yX3NlZ3M7IG4rKywgaW92KyspIHsKLQkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpaW92LT5pb3ZfYmFzZSArIG9mZnNldDsKLQkJc2l6ZV90IGxlbiA9IGlvdi0+aW92X2xlbiAtIG9mZnNldDsKLQkJb2Zmc2V0ID0gMDsKLQkJaWYgKHVubGlrZWx5KCFsZW4pKQkvKiBlbXB0eSBzZWdtZW50ICovCi0JCQljb250aW51ZTsKLQkJaWYgKGxlbiA+IHNpemUpCi0JCQlsZW4gPSBzaXplOwotCQlucGFnZXMgKz0gKGFkZHIgKyBsZW4gKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRQotCQkJICAtIGFkZHIgLyBQQUdFX1NJWkU7Ci0JCWlmIChucGFnZXMgPj0gbWF4cGFnZXMpCS8qIGRvbid0IGJvdGhlciBnb2luZyBmdXJ0aGVyICovCi0JCQlyZXR1cm4gbWF4cGFnZXM7Ci0JCXNpemUgLT0gbGVuOwotCQlvZmZzZXQgPSAwOwotCX0KLQlyZXR1cm4gbWluKG5wYWdlcywgbWF4cGFnZXMpOwotfQotCiBzdGF0aWMgdm9pZCBtZW1jcHlfZnJvbV9wYWdlKGNoYXIgKnRvLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbikKIHsKIAljaGFyICpmcm9tID0ga21hcF9hdG9taWMocGFnZSk7CkBAIC01NTUsMjkzICszNTcsNzggQEAKIAlrdW5tYXBfYXRvbWljKGFkZHIpOwogfQogCi1zdGF0aWMgc2l6ZV90IGNvcHlfdG9faXRlcl9idmVjKHZvaWQgKmZyb20sIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKQorc2l6ZV90IGNvcHlfdG9faXRlcih2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSkKIHsKLQlzaXplX3Qgc2tpcCwgY29weSwgd2FudGVkOwotCWNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjOwotCisJY2hhciAqZnJvbSA9IGFkZHI7CiAJaWYgKHVubGlrZWx5KGJ5dGVzID4gaS0+Y291bnQpKQogCQlieXRlcyA9IGktPmNvdW50OwogCiAJaWYgKHVubGlrZWx5KCFieXRlcykpCiAJCXJldHVybiAwOwogCi0Jd2FudGVkID0gYnl0ZXM7Ci0JYnZlYyA9IGktPmJ2ZWM7Ci0Jc2tpcCA9IGktPmlvdl9vZmZzZXQ7Ci0JY29weSA9IG1pbl90KHNpemVfdCwgYnl0ZXMsIGJ2ZWMtPmJ2X2xlbiAtIHNraXApOworCWl0ZXJhdGVfYW5kX2FkdmFuY2UoaSwgYnl0ZXMsIHYsCisJCV9fY29weV90b191c2VyKHYuaW92X2Jhc2UsIChmcm9tICs9IHYuaW92X2xlbikgLSB2Lmlvdl9sZW4sCisJCQkgICAgICAgdi5pb3ZfbGVuKSwKKwkJbWVtY3B5X3RvX3BhZ2Uodi5idl9wYWdlLCB2LmJ2X29mZnNldCwKKwkJCSAgICAgICAoZnJvbSArPSB2LmJ2X2xlbikgLSB2LmJ2X2xlbiwgdi5idl9sZW4pLAorCQltZW1jcHkodi5pb3ZfYmFzZSwgKGZyb20gKz0gdi5pb3ZfbGVuKSAtIHYuaW92X2xlbiwgdi5pb3ZfbGVuKQorCSkKIAotCW1lbWNweV90b19wYWdlKGJ2ZWMtPmJ2X3BhZ2UsIHNraXAgKyBidmVjLT5idl9vZmZzZXQsIGZyb20sIGNvcHkpOwotCXNraXAgKz0gY29weTsKLQlmcm9tICs9IGNvcHk7Ci0JYnl0ZXMgLT0gY29weTsKLQl3aGlsZSAoYnl0ZXMpIHsKLQkJYnZlYysrOwotCQljb3B5ID0gbWluKGJ5dGVzLCAoc2l6ZV90KWJ2ZWMtPmJ2X2xlbik7Ci0JCW1lbWNweV90b19wYWdlKGJ2ZWMtPmJ2X3BhZ2UsIGJ2ZWMtPmJ2X29mZnNldCwgZnJvbSwgY29weSk7Ci0JCXNraXAgPSBjb3B5OwotCQlmcm9tICs9IGNvcHk7Ci0JCWJ5dGVzIC09IGNvcHk7Ci0JfQotCWlmIChza2lwID09IGJ2ZWMtPmJ2X2xlbikgewotCQlidmVjKys7Ci0JCXNraXAgPSAwOwotCX0KLQlpLT5jb3VudCAtPSB3YW50ZWQgLSBieXRlczsKLQlpLT5ucl9zZWdzIC09IGJ2ZWMgLSBpLT5idmVjOwotCWktPmJ2ZWMgPSBidmVjOwotCWktPmlvdl9vZmZzZXQgPSBza2lwOwotCXJldHVybiB3YW50ZWQgLSBieXRlczsKLX0KLQotc3RhdGljIHNpemVfdCBjb3B5X2Zyb21faXRlcl9idmVjKHZvaWQgKnRvLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSkKLXsKLQlzaXplX3Qgc2tpcCwgY29weSwgd2FudGVkOwotCWNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjOwotCi0JaWYgKHVubGlrZWx5KGJ5dGVzID4gaS0+Y291bnQpKQotCQlieXRlcyA9IGktPmNvdW50OwotCi0JaWYgKHVubGlrZWx5KCFieXRlcykpCi0JCXJldHVybiAwOwotCi0Jd2FudGVkID0gYnl0ZXM7Ci0JYnZlYyA9IGktPmJ2ZWM7Ci0Jc2tpcCA9IGktPmlvdl9vZmZzZXQ7Ci0KLQljb3B5ID0gbWluKGJ5dGVzLCBidmVjLT5idl9sZW4gLSBza2lwKTsKLQotCW1lbWNweV9mcm9tX3BhZ2UodG8sIGJ2ZWMtPmJ2X3BhZ2UsIGJ2ZWMtPmJ2X29mZnNldCArIHNraXAsIGNvcHkpOwotCi0JdG8gKz0gY29weTsKLQlza2lwICs9IGNvcHk7Ci0JYnl0ZXMgLT0gY29weTsKLQotCXdoaWxlIChieXRlcykgewotCQlidmVjKys7Ci0JCWNvcHkgPSBtaW4oYnl0ZXMsIChzaXplX3QpYnZlYy0+YnZfbGVuKTsKLQkJbWVtY3B5X2Zyb21fcGFnZSh0bywgYnZlYy0+YnZfcGFnZSwgYnZlYy0+YnZfb2Zmc2V0LCBjb3B5KTsKLQkJc2tpcCA9IGNvcHk7Ci0JCXRvICs9IGNvcHk7Ci0JCWJ5dGVzIC09IGNvcHk7Ci0JfQotCWlmIChza2lwID09IGJ2ZWMtPmJ2X2xlbikgewotCQlidmVjKys7Ci0JCXNraXAgPSAwOwotCX0KLQlpLT5jb3VudCAtPSB3YW50ZWQ7Ci0JaS0+bnJfc2VncyAtPSBidmVjIC0gaS0+YnZlYzsKLQlpLT5idmVjID0gYnZlYzsKLQlpLT5pb3Zfb2Zmc2V0ID0gc2tpcDsKLQlyZXR1cm4gd2FudGVkOwotfQotCi1zdGF0aWMgc2l6ZV90IGNvcHlfcGFnZV90b19pdGVyX2J2ZWMoc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsCi0JCQkJCXNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKQotewotCXZvaWQgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSk7Ci0Jc2l6ZV90IHdhbnRlZCA9IGNvcHlfdG9faXRlcl9idmVjKGthZGRyICsgb2Zmc2V0LCBieXRlcywgaSk7Ci0Ja3VubWFwX2F0b21pYyhrYWRkcik7Ci0JcmV0dXJuIHdhbnRlZDsKLX0KLQotc3RhdGljIHNpemVfdCBjb3B5X3BhZ2VfZnJvbV9pdGVyX2J2ZWMoc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsCi0JCQkJCXNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKQotewotCXZvaWQgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSk7Ci0Jc2l6ZV90IHdhbnRlZCA9IGNvcHlfZnJvbV9pdGVyX2J2ZWMoa2FkZHIgKyBvZmZzZXQsIGJ5dGVzLCBpKTsKLQlrdW5tYXBfYXRvbWljKGthZGRyKTsKLQlyZXR1cm4gd2FudGVkOwotfQotCi1zdGF0aWMgc2l6ZV90IHplcm9fYnZlYyhzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSkKLXsKLQlzaXplX3Qgc2tpcCwgY29weSwgd2FudGVkOwotCWNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjOwotCi0JaWYgKHVubGlrZWx5KGJ5dGVzID4gaS0+Y291bnQpKQotCQlieXRlcyA9IGktPmNvdW50OwotCi0JaWYgKHVubGlrZWx5KCFieXRlcykpCi0JCXJldHVybiAwOwotCi0Jd2FudGVkID0gYnl0ZXM7Ci0JYnZlYyA9IGktPmJ2ZWM7Ci0Jc2tpcCA9IGktPmlvdl9vZmZzZXQ7Ci0JY29weSA9IG1pbl90KHNpemVfdCwgYnl0ZXMsIGJ2ZWMtPmJ2X2xlbiAtIHNraXApOwotCi0JbWVtemVyb19wYWdlKGJ2ZWMtPmJ2X3BhZ2UsIHNraXAgKyBidmVjLT5idl9vZmZzZXQsIGNvcHkpOwotCXNraXAgKz0gY29weTsKLQlieXRlcyAtPSBjb3B5OwotCXdoaWxlIChieXRlcykgewotCQlidmVjKys7Ci0JCWNvcHkgPSBtaW4oYnl0ZXMsIChzaXplX3QpYnZlYy0+YnZfbGVuKTsKLQkJbWVtemVyb19wYWdlKGJ2ZWMtPmJ2X3BhZ2UsIGJ2ZWMtPmJ2X29mZnNldCwgY29weSk7Ci0JCXNraXAgPSBjb3B5OwotCQlieXRlcyAtPSBjb3B5OwotCX0KLQlpZiAoc2tpcCA9PSBidmVjLT5idl9sZW4pIHsKLQkJYnZlYysrOwotCQlza2lwID0gMDsKLQl9Ci0JaS0+Y291bnQgLT0gd2FudGVkIC0gYnl0ZXM7Ci0JaS0+bnJfc2VncyAtPSBidmVjIC0gaS0+YnZlYzsKLQlpLT5idmVjID0gYnZlYzsKLQlpLT5pb3Zfb2Zmc2V0ID0gc2tpcDsKLQlyZXR1cm4gd2FudGVkIC0gYnl0ZXM7Ci19Ci0KLXN0YXRpYyBzaXplX3QgY29weV9mcm9tX3VzZXJfYnZlYyhzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IGJ5dGVzKQotewotCWNoYXIgKmthZGRyOwotCXNpemVfdCBsZWZ0OwotCWNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjOwotCXNpemVfdCBiYXNlID0gaS0+aW92X29mZnNldDsKLQotCWthZGRyID0ga21hcF9hdG9taWMocGFnZSk7Ci0JZm9yIChsZWZ0ID0gYnl0ZXMsIGJ2ZWMgPSBpLT5idmVjOyBsZWZ0OyBidmVjKyssIGJhc2UgPSAwKSB7Ci0JCXNpemVfdCBjb3B5ID0gbWluKGxlZnQsIGJ2ZWMtPmJ2X2xlbiAtIGJhc2UpOwotCQlpZiAoIWJ2ZWMtPmJ2X2xlbikKLQkJCWNvbnRpbnVlOwotCQltZW1jcHlfZnJvbV9wYWdlKGthZGRyICsgb2Zmc2V0LCBidmVjLT5idl9wYWdlLAotCQkJCSBidmVjLT5idl9vZmZzZXQgKyBiYXNlLCBjb3B5KTsKLQkJb2Zmc2V0ICs9IGNvcHk7Ci0JCWxlZnQgLT0gY29weTsKLQl9Ci0Ja3VubWFwX2F0b21pYyhrYWRkcik7CiAJcmV0dXJuIGJ5dGVzOwogfQorRVhQT1JUX1NZTUJPTChjb3B5X3RvX2l0ZXIpOwogCi1zdGF0aWMgdm9pZCBhZHZhbmNlX2J2ZWMoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3QgYnl0ZXMpCitzaXplX3QgY29weV9mcm9tX2l0ZXIodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCiB7Ci0JQlVHX09OKGktPmNvdW50IDwgYnl0ZXMpOworCWNoYXIgKnRvID0gYWRkcjsKKwlpZiAodW5saWtlbHkoYnl0ZXMgPiBpLT5jb3VudCkpCisJCWJ5dGVzID0gaS0+Y291bnQ7CiAKLQlpZiAobGlrZWx5KGktPm5yX3NlZ3MgPT0gMSkpIHsKLQkJaS0+aW92X29mZnNldCArPSBieXRlczsKLQkJaS0+Y291bnQgLT0gYnl0ZXM7Ci0JfSBlbHNlIHsKLQkJY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWMgPSBpLT5idmVjOwotCQlzaXplX3QgYmFzZSA9IGktPmlvdl9vZmZzZXQ7Ci0JCXVuc2lnbmVkIGxvbmcgbnJfc2VncyA9IGktPm5yX3NlZ3M7Ci0KLQkJLyoKLQkJICogVGhlICFpb3YtPmlvdl9sZW4gY2hlY2sgZW5zdXJlcyB3ZSBza2lwIG92ZXIgdW5saWtlbHkKLQkJICogemVyby1sZW5ndGggc2VnbWVudHMgKHdpdGhvdXQgb3ZlcnJ1bmluZyB0aGUgaW92ZWMpLgotCQkgKi8KLQkJd2hpbGUgKGJ5dGVzIHx8IHVubGlrZWx5KGktPmNvdW50ICYmICFidmVjLT5idl9sZW4pKSB7Ci0JCQlpbnQgY29weTsKLQotCQkJY29weSA9IG1pbihieXRlcywgYnZlYy0+YnZfbGVuIC0gYmFzZSk7Ci0JCQlCVUdfT04oIWktPmNvdW50IHx8IGktPmNvdW50IDwgY29weSk7Ci0JCQlpLT5jb3VudCAtPSBjb3B5OwotCQkJYnl0ZXMgLT0gY29weTsKLQkJCWJhc2UgKz0gY29weTsKLQkJCWlmIChidmVjLT5idl9sZW4gPT0gYmFzZSkgewotCQkJCWJ2ZWMrKzsKLQkJCQlucl9zZWdzLS07Ci0JCQkJYmFzZSA9IDA7Ci0JCQl9Ci0JCX0KLQkJaS0+YnZlYyA9IGJ2ZWM7Ci0JCWktPmlvdl9vZmZzZXQgPSBiYXNlOwotCQlpLT5ucl9zZWdzID0gbnJfc2VnczsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGFsaWdubWVudF9idmVjKGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSkKLXsKLQljb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyA9IGktPmJ2ZWM7Ci0JdW5zaWduZWQgbG9uZyByZXM7Ci0Jc2l6ZV90IHNpemUgPSBpLT5jb3VudDsKLQlzaXplX3QgbjsKLQotCWlmICghc2l6ZSkKKwlpZiAodW5saWtlbHkoIWJ5dGVzKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXMgPSBidmVjLT5idl9vZmZzZXQgKyBpLT5pb3Zfb2Zmc2V0OwotCW4gPSBidmVjLT5idl9sZW4gLSBpLT5pb3Zfb2Zmc2V0OwotCWlmIChuID49IHNpemUpCi0JCXJldHVybiByZXMgfCBzaXplOwotCXNpemUgLT0gbjsKLQlyZXMgfD0gbjsKLQl3aGlsZSAoc2l6ZSA+ICgrK2J2ZWMpLT5idl9sZW4pIHsKLQkJcmVzIHw9IGJ2ZWMtPmJ2X29mZnNldCB8IGJ2ZWMtPmJ2X2xlbjsKLQkJc2l6ZSAtPSBidmVjLT5idl9sZW47Ci0JfQotCXJlcyB8PSBidmVjLT5idl9vZmZzZXQgfCBzaXplOwotCXJldHVybiByZXM7Ci19CisJaXRlcmF0ZV9hbmRfYWR2YW5jZShpLCBieXRlcywgdiwKKwkJX19jb3B5X2Zyb21fdXNlcigodG8gKz0gdi5pb3ZfbGVuKSAtIHYuaW92X2xlbiwgdi5pb3ZfYmFzZSwKKwkJCQkgdi5pb3ZfbGVuKSwKKwkJbWVtY3B5X2Zyb21fcGFnZSgodG8gKz0gdi5idl9sZW4pIC0gdi5idl9sZW4sIHYuYnZfcGFnZSwKKwkJCQkgdi5idl9vZmZzZXQsIHYuYnZfbGVuKSwKKwkJbWVtY3B5KCh0byArPSB2Lmlvdl9sZW4pIC0gdi5pb3ZfbGVuLCB2Lmlvdl9iYXNlLCB2Lmlvdl9sZW4pCisJKQogCi1zdGF0aWMgc3NpemVfdCBnZXRfcGFnZXNfYnZlYyhzdHJ1Y3QgaW92X2l0ZXIgKmksCi0JCSAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBtYXhwYWdlcywKLQkJICAgc2l6ZV90ICpzdGFydCkKKwlyZXR1cm4gYnl0ZXM7Cit9CitFWFBPUlRfU1lNQk9MKGNvcHlfZnJvbV9pdGVyKTsKKworc2l6ZV90IGNvcHlfZnJvbV9pdGVyX25vY2FjaGUodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCiB7Ci0JY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWMgPSBpLT5idmVjOwotCXNpemVfdCBsZW4gPSBidmVjLT5idl9sZW4gLSBpLT5pb3Zfb2Zmc2V0OwotCWlmIChsZW4gPiBpLT5jb3VudCkKLQkJbGVuID0gaS0+Y291bnQ7Ci0JaWYgKGxlbiA+IG1heHNpemUpCi0JCWxlbiA9IG1heHNpemU7Ci0JLyogY2FuJ3QgYmUgbW9yZSB0aGFuIFBBR0VfU0laRSAqLwotCSpzdGFydCA9IGJ2ZWMtPmJ2X29mZnNldCArIGktPmlvdl9vZmZzZXQ7CisJY2hhciAqdG8gPSBhZGRyOworCWlmICh1bmxpa2VseShieXRlcyA+IGktPmNvdW50KSkKKwkJYnl0ZXMgPSBpLT5jb3VudDsKIAotCWdldF9wYWdlKCpwYWdlcyA9IGJ2ZWMtPmJ2X3BhZ2UpOworCWlmICh1bmxpa2VseSghYnl0ZXMpKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiBsZW47CisJaXRlcmF0ZV9hbmRfYWR2YW5jZShpLCBieXRlcywgdiwKKwkJX19jb3B5X2Zyb21fdXNlcl9ub2NhY2hlKCh0byArPSB2Lmlvdl9sZW4pIC0gdi5pb3ZfbGVuLAorCQkJCQkgdi5pb3ZfYmFzZSwgdi5pb3ZfbGVuKSwKKwkJbWVtY3B5X2Zyb21fcGFnZSgodG8gKz0gdi5idl9sZW4pIC0gdi5idl9sZW4sIHYuYnZfcGFnZSwKKwkJCQkgdi5idl9vZmZzZXQsIHYuYnZfbGVuKSwKKwkJbWVtY3B5KCh0byArPSB2Lmlvdl9sZW4pIC0gdi5pb3ZfbGVuLCB2Lmlvdl9iYXNlLCB2Lmlvdl9sZW4pCisJKQorCisJcmV0dXJuIGJ5dGVzOwogfQotCi1zdGF0aWMgc3NpemVfdCBnZXRfcGFnZXNfYWxsb2NfYnZlYyhzdHJ1Y3QgaW92X2l0ZXIgKmksCi0JCSAgIHN0cnVjdCBwYWdlICoqKnBhZ2VzLCBzaXplX3QgbWF4c2l6ZSwKLQkJICAgc2l6ZV90ICpzdGFydCkKLXsKLQljb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyA9IGktPmJ2ZWM7Ci0Jc2l6ZV90IGxlbiA9IGJ2ZWMtPmJ2X2xlbiAtIGktPmlvdl9vZmZzZXQ7Ci0JaWYgKGxlbiA+IGktPmNvdW50KQotCQlsZW4gPSBpLT5jb3VudDsKLQlpZiAobGVuID4gbWF4c2l6ZSkKLQkJbGVuID0gbWF4c2l6ZTsKLQkqc3RhcnQgPSBidmVjLT5idl9vZmZzZXQgKyBpLT5pb3Zfb2Zmc2V0OwotCi0JKnBhZ2VzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwotCWlmICghKnBhZ2VzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWdldF9wYWdlKCoqcGFnZXMgPSBidmVjLT5idl9wYWdlKTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBpbnQgaW92X2l0ZXJfbnBhZ2VzX2J2ZWMoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppLCBpbnQgbWF4cGFnZXMpCi17Ci0Jc2l6ZV90IG9mZnNldCA9IGktPmlvdl9vZmZzZXQ7Ci0Jc2l6ZV90IHNpemUgPSBpLT5jb3VudDsKLQljb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyA9IGktPmJ2ZWM7Ci0JaW50IG5wYWdlcyA9IDA7Ci0JaW50IG47Ci0KLQlmb3IgKG4gPSAwOyBzaXplICYmIG4gPCBpLT5ucl9zZWdzOyBuKyssIGJ2ZWMrKykgewotCQlzaXplX3QgbGVuID0gYnZlYy0+YnZfbGVuIC0gb2Zmc2V0OwotCQlvZmZzZXQgPSAwOwotCQlpZiAodW5saWtlbHkoIWxlbikpCS8qIGVtcHR5IHNlZ21lbnQgKi8KLQkJCWNvbnRpbnVlOwotCQlpZiAobGVuID4gc2l6ZSkKLQkJCWxlbiA9IHNpemU7Ci0JCW5wYWdlcysrOwotCQlpZiAobnBhZ2VzID49IG1heHBhZ2VzKQkvKiBkb24ndCBib3RoZXIgZ29pbmcgZnVydGhlciAqLwotCQkJcmV0dXJuIG1heHBhZ2VzOwotCQlzaXplIC09IGxlbjsKLQkJb2Zmc2V0ID0gMDsKLQl9Ci0JcmV0dXJuIG1pbihucGFnZXMsIG1heHBhZ2VzKTsKLX0KK0VYUE9SVF9TWU1CT0woY29weV9mcm9tX2l0ZXJfbm9jYWNoZSk7CiAKIHNpemVfdCBjb3B5X3BhZ2VfdG9faXRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGJ5dGVzLAogCQkJIHN0cnVjdCBpb3ZfaXRlciAqaSkKIHsKLQlpZiAoaS0+dHlwZSAmIElURVJfQlZFQykKLQkJcmV0dXJuIGNvcHlfcGFnZV90b19pdGVyX2J2ZWMocGFnZSwgb2Zmc2V0LCBieXRlcywgaSk7Ci0JZWxzZQorCWlmIChpLT50eXBlICYgKElURVJfQlZFQ3xJVEVSX0tWRUMpKSB7CisJCXZvaWQgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSk7CisJCXNpemVfdCB3YW50ZWQgPSBjb3B5X3RvX2l0ZXIoa2FkZHIgKyBvZmZzZXQsIGJ5dGVzLCBpKTsKKwkJa3VubWFwX2F0b21pYyhrYWRkcik7CisJCXJldHVybiB3YW50ZWQ7CisJfSBlbHNlCiAJCXJldHVybiBjb3B5X3BhZ2VfdG9faXRlcl9pb3ZlYyhwYWdlLCBvZmZzZXQsIGJ5dGVzLCBpKTsKIH0KIEVYUE9SVF9TWU1CT0woY29weV9wYWdlX3RvX2l0ZXIpOwpAQCAtODQ5LDU3ICs0MzYsNTMgQEAKIHNpemVfdCBjb3B5X3BhZ2VfZnJvbV9pdGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgYnl0ZXMsCiAJCQkgc3RydWN0IGlvdl9pdGVyICppKQogewotCWlmIChpLT50eXBlICYgSVRFUl9CVkVDKQotCQlyZXR1cm4gY29weV9wYWdlX2Zyb21faXRlcl9idmVjKHBhZ2UsIG9mZnNldCwgYnl0ZXMsIGkpOwotCWVsc2UKKwlpZiAoaS0+dHlwZSAmIChJVEVSX0JWRUN8SVRFUl9LVkVDKSkgeworCQl2b2lkICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UpOworCQlzaXplX3Qgd2FudGVkID0gY29weV9mcm9tX2l0ZXIoa2FkZHIgKyBvZmZzZXQsIGJ5dGVzLCBpKTsKKwkJa3VubWFwX2F0b21pYyhrYWRkcik7CisJCXJldHVybiB3YW50ZWQ7CisJfSBlbHNlCiAJCXJldHVybiBjb3B5X3BhZ2VfZnJvbV9pdGVyX2lvdmVjKHBhZ2UsIG9mZnNldCwgYnl0ZXMsIGkpOwogfQogRVhQT1JUX1NZTUJPTChjb3B5X3BhZ2VfZnJvbV9pdGVyKTsKIAotc2l6ZV90IGNvcHlfdG9faXRlcih2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSkKLXsKLQlpZiAoaS0+dHlwZSAmIElURVJfQlZFQykKLQkJcmV0dXJuIGNvcHlfdG9faXRlcl9idmVjKGFkZHIsIGJ5dGVzLCBpKTsKLQllbHNlCi0JCXJldHVybiBjb3B5X3RvX2l0ZXJfaW92ZWMoYWRkciwgYnl0ZXMsIGkpOwotfQotRVhQT1JUX1NZTUJPTChjb3B5X3RvX2l0ZXIpOwotCi1zaXplX3QgY29weV9mcm9tX2l0ZXIodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCi17Ci0JaWYgKGktPnR5cGUgJiBJVEVSX0JWRUMpCi0JCXJldHVybiBjb3B5X2Zyb21faXRlcl9idmVjKGFkZHIsIGJ5dGVzLCBpKTsKLQllbHNlCi0JCXJldHVybiBjb3B5X2Zyb21faXRlcl9pb3ZlYyhhZGRyLCBieXRlcywgaSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNvcHlfZnJvbV9pdGVyKTsKLQogc2l6ZV90IGlvdl9pdGVyX3plcm8oc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCiB7Ci0JaWYgKGktPnR5cGUgJiBJVEVSX0JWRUMpIHsKLQkJcmV0dXJuIHplcm9fYnZlYyhieXRlcywgaSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIHplcm9faW92ZWMoYnl0ZXMsIGkpOwotCX0KKwlpZiAodW5saWtlbHkoYnl0ZXMgPiBpLT5jb3VudCkpCisJCWJ5dGVzID0gaS0+Y291bnQ7CisKKwlpZiAodW5saWtlbHkoIWJ5dGVzKSkKKwkJcmV0dXJuIDA7CisKKwlpdGVyYXRlX2FuZF9hZHZhbmNlKGksIGJ5dGVzLCB2LAorCQlfX2NsZWFyX3VzZXIodi5pb3ZfYmFzZSwgdi5pb3ZfbGVuKSwKKwkJbWVtemVyb19wYWdlKHYuYnZfcGFnZSwgdi5idl9vZmZzZXQsIHYuYnZfbGVuKSwKKwkJbWVtc2V0KHYuaW92X2Jhc2UsIDAsIHYuaW92X2xlbikKKwkpCisKKwlyZXR1cm4gYnl0ZXM7CiB9CiBFWFBPUlRfU1lNQk9MKGlvdl9pdGVyX3plcm8pOwogCiBzaXplX3QgaW92X2l0ZXJfY29weV9mcm9tX3VzZXJfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLAogCQlzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3QgYnl0ZXMpCiB7Ci0JaWYgKGktPnR5cGUgJiBJVEVSX0JWRUMpCi0JCXJldHVybiBjb3B5X2Zyb21fdXNlcl9idmVjKHBhZ2UsIGksIG9mZnNldCwgYnl0ZXMpOwotCWVsc2UKLQkJcmV0dXJuIGNvcHlfZnJvbV91c2VyX2F0b21pY19pb3ZlYyhwYWdlLCBpLCBvZmZzZXQsIGJ5dGVzKTsKKwljaGFyICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UpLCAqcCA9IGthZGRyICsgb2Zmc2V0OworCWl0ZXJhdGVfYWxsX2tpbmRzKGksIGJ5dGVzLCB2LAorCQlfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKChwICs9IHYuaW92X2xlbikgLSB2Lmlvdl9sZW4sCisJCQkJCSAgdi5pb3ZfYmFzZSwgdi5pb3ZfbGVuKSwKKwkJbWVtY3B5X2Zyb21fcGFnZSgocCArPSB2LmJ2X2xlbikgLSB2LmJ2X2xlbiwgdi5idl9wYWdlLAorCQkJCSB2LmJ2X29mZnNldCwgdi5idl9sZW4pLAorCQltZW1jcHkoKHAgKz0gdi5pb3ZfbGVuKSAtIHYuaW92X2xlbiwgdi5pb3ZfYmFzZSwgdi5pb3ZfbGVuKQorCSkKKwlrdW5tYXBfYXRvbWljKGthZGRyKTsKKwlyZXR1cm4gYnl0ZXM7CiB9CiBFWFBPUlRfU1lNQk9MKGlvdl9pdGVyX2NvcHlfZnJvbV91c2VyX2F0b21pYyk7CiAKIHZvaWQgaW92X2l0ZXJfYWR2YW5jZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBzaXplKQogewotCWlmIChpLT50eXBlICYgSVRFUl9CVkVDKQotCQlhZHZhbmNlX2J2ZWMoaSwgc2l6ZSk7Ci0JZWxzZQotCQlhZHZhbmNlX2lvdmVjKGksIHNpemUpOworCWl0ZXJhdGVfYW5kX2FkdmFuY2UoaSwgc2l6ZSwgdiwgMCwgMCwgMCkKIH0KIEVYUE9SVF9TWU1CT0woaW92X2l0ZXJfYWR2YW5jZSk7CiAKQEAgLTkxNywxMiArNTAwLDMzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGlvdl9pdGVyX3NpbmdsZV9zZWdfY291bnQpOwogCit2b2lkIGlvdl9pdGVyX2t2ZWMoc3RydWN0IGlvdl9pdGVyICppLCBpbnQgZGlyZWN0aW9uLAorCQkJY29uc3Qgc3RydWN0IGt2ZWMgKmlvdiwgdW5zaWduZWQgbG9uZyBucl9zZWdzLAorCQkJc2l6ZV90IGNvdW50KQoreworCUJVR19PTighKGRpcmVjdGlvbiAmIElURVJfS1ZFQykpOworCWktPnR5cGUgPSBkaXJlY3Rpb247CisJaS0+a3ZlYyA9IChzdHJ1Y3Qga3ZlYyAqKWlvdjsKKwlpLT5ucl9zZWdzID0gbnJfc2VnczsKKwlpLT5pb3Zfb2Zmc2V0ID0gMDsKKwlpLT5jb3VudCA9IGNvdW50OworfQorRVhQT1JUX1NZTUJPTChpb3ZfaXRlcl9rdmVjKTsKKwogdW5zaWduZWQgbG9uZyBpb3ZfaXRlcl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKQogewotCWlmIChpLT50eXBlICYgSVRFUl9CVkVDKQotCQlyZXR1cm4gYWxpZ25tZW50X2J2ZWMoaSk7Ci0JZWxzZQotCQlyZXR1cm4gYWxpZ25tZW50X2lvdmVjKGkpOworCXVuc2lnbmVkIGxvbmcgcmVzID0gMDsKKwlzaXplX3Qgc2l6ZSA9IGktPmNvdW50OworCisJaWYgKCFzaXplKQorCQlyZXR1cm4gMDsKKworCWl0ZXJhdGVfYWxsX2tpbmRzKGksIHNpemUsIHYsCisJCShyZXMgfD0gKHVuc2lnbmVkIGxvbmcpdi5pb3ZfYmFzZSB8IHYuaW92X2xlbiwgMCksCisJCXJlcyB8PSB2LmJ2X29mZnNldCB8IHYuYnZfbGVuLAorCQlyZXMgfD0gKHVuc2lnbmVkIGxvbmcpdi5pb3ZfYmFzZSB8IHYuaW92X2xlbgorCSkKKwlyZXR1cm4gcmVzOwogfQogRVhQT1JUX1NZTUJPTChpb3ZfaXRlcl9hbGlnbm1lbnQpOwogCkBAIC05MzAsMjkgKzUzNCwyMDcgQEAKIAkJICAgc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIG1heHBhZ2VzLAogCQkgICBzaXplX3QgKnN0YXJ0KQogewotCWlmIChpLT50eXBlICYgSVRFUl9CVkVDKQotCQlyZXR1cm4gZ2V0X3BhZ2VzX2J2ZWMoaSwgcGFnZXMsIG1heHNpemUsIG1heHBhZ2VzLCBzdGFydCk7Ci0JZWxzZQotCQlyZXR1cm4gZ2V0X3BhZ2VzX2lvdmVjKGksIHBhZ2VzLCBtYXhzaXplLCBtYXhwYWdlcywgc3RhcnQpOworCWlmIChtYXhzaXplID4gaS0+Y291bnQpCisJCW1heHNpemUgPSBpLT5jb3VudDsKKworCWlmICghbWF4c2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpdGVyYXRlX2FsbF9raW5kcyhpLCBtYXhzaXplLCB2LCAoeworCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl2Lmlvdl9iYXNlOworCQlzaXplX3QgbGVuID0gdi5pb3ZfbGVuICsgKCpzdGFydCA9IGFkZHIgJiAoUEFHRV9TSVpFIC0gMSkpOworCQlpbnQgbjsKKwkJaW50IHJlczsKKworCQlpZiAobGVuID4gbWF4cGFnZXMgKiBQQUdFX1NJWkUpCisJCQlsZW4gPSBtYXhwYWdlcyAqIFBBR0VfU0laRTsKKwkJYWRkciAmPSB+KFBBR0VfU0laRSAtIDEpOworCQluID0gRElWX1JPVU5EX1VQKGxlbiwgUEFHRV9TSVpFKTsKKwkJcmVzID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChhZGRyLCBuLCAoaS0+dHlwZSAmIFdSSVRFKSAhPSBXUklURSwgcGFnZXMpOworCQlpZiAodW5saWtlbHkocmVzIDwgMCkpCisJCQlyZXR1cm4gcmVzOworCQlyZXR1cm4gKHJlcyA9PSBuID8gbGVuIDogcmVzICogUEFHRV9TSVpFKSAtICpzdGFydDsKKwkwO30pLCh7CisJCS8qIGNhbid0IGJlIG1vcmUgdGhhbiBQQUdFX1NJWkUgKi8KKwkJKnN0YXJ0ID0gdi5idl9vZmZzZXQ7CisJCWdldF9wYWdlKCpwYWdlcyA9IHYuYnZfcGFnZSk7CisJCXJldHVybiB2LmJ2X2xlbjsKKwl9KSwoeworCQlyZXR1cm4gLUVGQVVMVDsKKwl9KQorCSkKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaW92X2l0ZXJfZ2V0X3BhZ2VzKTsKIAorc3RhdGljIHN0cnVjdCBwYWdlICoqZ2V0X3BhZ2VzX2FycmF5KHNpemVfdCBuKQoreworCXN0cnVjdCBwYWdlICoqcCA9IGttYWxsb2MobiAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKQorCQlwID0gdm1hbGxvYyhuICogc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKKwlyZXR1cm4gcDsKK30KKwogc3NpemVfdCBpb3ZfaXRlcl9nZXRfcGFnZXNfYWxsb2Moc3RydWN0IGlvdl9pdGVyICppLAogCQkgICBzdHJ1Y3QgcGFnZSAqKipwYWdlcywgc2l6ZV90IG1heHNpemUsCiAJCSAgIHNpemVfdCAqc3RhcnQpCiB7Ci0JaWYgKGktPnR5cGUgJiBJVEVSX0JWRUMpCi0JCXJldHVybiBnZXRfcGFnZXNfYWxsb2NfYnZlYyhpLCBwYWdlcywgbWF4c2l6ZSwgc3RhcnQpOwotCWVsc2UKLQkJcmV0dXJuIGdldF9wYWdlc19hbGxvY19pb3ZlYyhpLCBwYWdlcywgbWF4c2l6ZSwgc3RhcnQpOworCXN0cnVjdCBwYWdlICoqcDsKKworCWlmIChtYXhzaXplID4gaS0+Y291bnQpCisJCW1heHNpemUgPSBpLT5jb3VudDsKKworCWlmICghbWF4c2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpdGVyYXRlX2FsbF9raW5kcyhpLCBtYXhzaXplLCB2LCAoeworCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl2Lmlvdl9iYXNlOworCQlzaXplX3QgbGVuID0gdi5pb3ZfbGVuICsgKCpzdGFydCA9IGFkZHIgJiAoUEFHRV9TSVpFIC0gMSkpOworCQlpbnQgbjsKKwkJaW50IHJlczsKKworCQlhZGRyICY9IH4oUEFHRV9TSVpFIC0gMSk7CisJCW4gPSBESVZfUk9VTkRfVVAobGVuLCBQQUdFX1NJWkUpOworCQlwID0gZ2V0X3BhZ2VzX2FycmF5KG4pOworCQlpZiAoIXApCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcmVzID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChhZGRyLCBuLCAoaS0+dHlwZSAmIFdSSVRFKSAhPSBXUklURSwgcCk7CisJCWlmICh1bmxpa2VseShyZXMgPCAwKSkgeworCQkJa3ZmcmVlKHApOworCQkJcmV0dXJuIHJlczsKKwkJfQorCQkqcGFnZXMgPSBwOworCQlyZXR1cm4gKHJlcyA9PSBuID8gbGVuIDogcmVzICogUEFHRV9TSVpFKSAtICpzdGFydDsKKwkwO30pLCh7CisJCS8qIGNhbid0IGJlIG1vcmUgdGhhbiBQQUdFX1NJWkUgKi8KKwkJKnN0YXJ0ID0gdi5idl9vZmZzZXQ7CisJCSpwYWdlcyA9IHAgPSBnZXRfcGFnZXNfYXJyYXkoMSk7CisJCWlmICghcCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlnZXRfcGFnZSgqcCA9IHYuYnZfcGFnZSk7CisJCXJldHVybiB2LmJ2X2xlbjsKKwl9KSwoeworCQlyZXR1cm4gLUVGQVVMVDsKKwl9KQorCSkKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaW92X2l0ZXJfZ2V0X3BhZ2VzX2FsbG9jKTsKIAorc2l6ZV90IGNzdW1fYW5kX2NvcHlfZnJvbV9pdGVyKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgX193c3VtICpjc3VtLAorCQkJICAgICAgIHN0cnVjdCBpb3ZfaXRlciAqaSkKK3sKKwljaGFyICp0byA9IGFkZHI7CisJX193c3VtIHN1bSwgbmV4dDsKKwlzaXplX3Qgb2ZmID0gMDsKKwlpZiAodW5saWtlbHkoYnl0ZXMgPiBpLT5jb3VudCkpCisJCWJ5dGVzID0gaS0+Y291bnQ7CisKKwlpZiAodW5saWtlbHkoIWJ5dGVzKSkKKwkJcmV0dXJuIDA7CisKKwlzdW0gPSAqY3N1bTsKKwlpdGVyYXRlX2FuZF9hZHZhbmNlKGksIGJ5dGVzLCB2LCAoeworCQlpbnQgZXJyID0gMDsKKwkJbmV4dCA9IGNzdW1fYW5kX2NvcHlfZnJvbV91c2VyKHYuaW92X2Jhc2UsIAorCQkJCQkgICAgICAgKHRvICs9IHYuaW92X2xlbikgLSB2Lmlvdl9sZW4sCisJCQkJCSAgICAgICB2Lmlvdl9sZW4sIDAsICZlcnIpOworCQlpZiAoIWVycikgeworCQkJc3VtID0gY3N1bV9ibG9ja19hZGQoc3VtLCBuZXh0LCBvZmYpOworCQkJb2ZmICs9IHYuaW92X2xlbjsKKwkJfQorCQllcnIgPyB2Lmlvdl9sZW4gOiAwOworCX0pLCAoeworCQljaGFyICpwID0ga21hcF9hdG9taWModi5idl9wYWdlKTsKKwkJbmV4dCA9IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2socCArIHYuYnZfb2Zmc2V0LAorCQkJCQkJICh0byArPSB2LmJ2X2xlbikgLSB2LmJ2X2xlbiwKKwkJCQkJCSB2LmJ2X2xlbiwgMCk7CisJCWt1bm1hcF9hdG9taWMocCk7CisJCXN1bSA9IGNzdW1fYmxvY2tfYWRkKHN1bSwgbmV4dCwgb2ZmKTsKKwkJb2ZmICs9IHYuYnZfbGVuOworCX0pLCh7CisJCW5leHQgPSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHYuaW92X2Jhc2UsCisJCQkJCQkgKHRvICs9IHYuaW92X2xlbikgLSB2Lmlvdl9sZW4sCisJCQkJCQkgdi5pb3ZfbGVuLCAwKTsKKwkJc3VtID0gY3N1bV9ibG9ja19hZGQoc3VtLCBuZXh0LCBvZmYpOworCQlvZmYgKz0gdi5pb3ZfbGVuOworCX0pCisJKQorCSpjc3VtID0gc3VtOworCXJldHVybiBieXRlczsKK30KK0VYUE9SVF9TWU1CT0woY3N1bV9hbmRfY29weV9mcm9tX2l0ZXIpOworCitzaXplX3QgY3N1bV9hbmRfY29weV90b19pdGVyKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgX193c3VtICpjc3VtLAorCQkJICAgICBzdHJ1Y3QgaW92X2l0ZXIgKmkpCit7CisJY2hhciAqZnJvbSA9IGFkZHI7CisJX193c3VtIHN1bSwgbmV4dDsKKwlzaXplX3Qgb2ZmID0gMDsKKwlpZiAodW5saWtlbHkoYnl0ZXMgPiBpLT5jb3VudCkpCisJCWJ5dGVzID0gaS0+Y291bnQ7CisKKwlpZiAodW5saWtlbHkoIWJ5dGVzKSkKKwkJcmV0dXJuIDA7CisKKwlzdW0gPSAqY3N1bTsKKwlpdGVyYXRlX2FuZF9hZHZhbmNlKGksIGJ5dGVzLCB2LCAoeworCQlpbnQgZXJyID0gMDsKKwkJbmV4dCA9IGNzdW1fYW5kX2NvcHlfdG9fdXNlcigoZnJvbSArPSB2Lmlvdl9sZW4pIC0gdi5pb3ZfbGVuLAorCQkJCQkgICAgIHYuaW92X2Jhc2UsIAorCQkJCQkgICAgIHYuaW92X2xlbiwgMCwgJmVycik7CisJCWlmICghZXJyKSB7CisJCQlzdW0gPSBjc3VtX2Jsb2NrX2FkZChzdW0sIG5leHQsIG9mZik7CisJCQlvZmYgKz0gdi5pb3ZfbGVuOworCQl9CisJCWVyciA/IHYuaW92X2xlbiA6IDA7CisJfSksICh7CisJCWNoYXIgKnAgPSBrbWFwX2F0b21pYyh2LmJ2X3BhZ2UpOworCQluZXh0ID0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjaygoZnJvbSArPSB2LmJ2X2xlbikgLSB2LmJ2X2xlbiwKKwkJCQkJCSBwICsgdi5idl9vZmZzZXQsCisJCQkJCQkgdi5idl9sZW4sIDApOworCQlrdW5tYXBfYXRvbWljKHApOworCQlzdW0gPSBjc3VtX2Jsb2NrX2FkZChzdW0sIG5leHQsIG9mZik7CisJCW9mZiArPSB2LmJ2X2xlbjsKKwl9KSwoeworCQluZXh0ID0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjaygoZnJvbSArPSB2Lmlvdl9sZW4pIC0gdi5pb3ZfbGVuLAorCQkJCQkJIHYuaW92X2Jhc2UsCisJCQkJCQkgdi5pb3ZfbGVuLCAwKTsKKwkJc3VtID0gY3N1bV9ibG9ja19hZGQoc3VtLCBuZXh0LCBvZmYpOworCQlvZmYgKz0gdi5pb3ZfbGVuOworCX0pCisJKQorCSpjc3VtID0gc3VtOworCXJldHVybiBieXRlczsKK30KK0VYUE9SVF9TWU1CT0woY3N1bV9hbmRfY29weV90b19pdGVyKTsKKwogaW50IGlvdl9pdGVyX25wYWdlcyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmksIGludCBtYXhwYWdlcykKIHsKLQlpZiAoaS0+dHlwZSAmIElURVJfQlZFQykKLQkJcmV0dXJuIGlvdl9pdGVyX25wYWdlc19idmVjKGksIG1heHBhZ2VzKTsKLQllbHNlCi0JCXJldHVybiBpb3ZfaXRlcl9ucGFnZXNfaW92ZWMoaSwgbWF4cGFnZXMpOworCXNpemVfdCBzaXplID0gaS0+Y291bnQ7CisJaW50IG5wYWdlcyA9IDA7CisKKwlpZiAoIXNpemUpCisJCXJldHVybiAwOworCisJaXRlcmF0ZV9hbGxfa2luZHMoaSwgc2l6ZSwgdiwgKHsKKwkJdW5zaWduZWQgbG9uZyBwID0gKHVuc2lnbmVkIGxvbmcpdi5pb3ZfYmFzZTsKKwkJbnBhZ2VzICs9IERJVl9ST1VORF9VUChwICsgdi5pb3ZfbGVuLCBQQUdFX1NJWkUpCisJCQktIHAgLyBQQUdFX1NJWkU7CisJCWlmIChucGFnZXMgPj0gbWF4cGFnZXMpCisJCQlyZXR1cm4gbWF4cGFnZXM7CisJMDt9KSwoeworCQlucGFnZXMrKzsKKwkJaWYgKG5wYWdlcyA+PSBtYXhwYWdlcykKKwkJCXJldHVybiBtYXhwYWdlczsKKwl9KSwoeworCQl1bnNpZ25lZCBsb25nIHAgPSAodW5zaWduZWQgbG9uZyl2Lmlvdl9iYXNlOworCQlucGFnZXMgKz0gRElWX1JPVU5EX1VQKHAgKyB2Lmlvdl9sZW4sIFBBR0VfU0laRSkKKwkJCS0gcCAvIFBBR0VfU0laRTsKKwkJaWYgKG5wYWdlcyA+PSBtYXhwYWdlcykKKwkJCXJldHVybiBtYXhwYWdlczsKKwl9KQorCSkKKwlyZXR1cm4gbnBhZ2VzOwogfQogRVhQT1JUX1NZTUJPTChpb3ZfaXRlcl9ucGFnZXMpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IGQ2YWMwZTMuLjg1ZGY1MDMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTI1LDcgKzI1LDcgQEAKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3Jlc19jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZV9jb3VudGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC01MSw3ICs1MSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC92bXByZXNzdXJlLmg+CiAjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZV9jZ3JvdXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwX2Nncm91cC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L29vbS5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KQEAgLTE0MywxNCArMTQzLDggQEAKIAl1bnNpZ25lZCBsb25nIHRhcmdldHNbTUVNX0NHUk9VUF9OVEFSR0VUU107CiB9OwogCi1zdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXIgewotCS8qCi0JICogbGFzdCBzY2FubmVkIGhpZXJhcmNoeSBtZW1iZXIuIFZhbGlkIG9ubHkgaWYgbGFzdF9kZWFkX2NvdW50Ci0JICogbWF0Y2hlcyBtZW1jZy0+ZGVhZF9jb3VudCBvZiB0aGUgaGllcmFyY2h5IHJvb3QgZ3JvdXAuCi0JICovCi0Jc3RydWN0IG1lbV9jZ3JvdXAgKmxhc3RfdmlzaXRlZDsKLQlpbnQgbGFzdF9kZWFkX2NvdW50OwotCitzdHJ1Y3QgcmVjbGFpbV9pdGVyIHsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqcG9zaXRpb247CiAJLyogc2NhbiBnZW5lcmF0aW9uLCBpbmNyZWFzZWQgZXZlcnkgcm91bmQtdHJpcCAqLwogCXVuc2lnbmVkIGludCBnZW5lcmF0aW9uOwogfTsKQEAgLTE2MiwxMCArMTU2LDEwIEBACiAJc3RydWN0IGxydXZlYwkJbHJ1dmVjOwogCXVuc2lnbmVkIGxvbmcJCWxydV9zaXplW05SX0xSVV9MSVNUU107CiAKLQlzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXIgcmVjbGFpbV9pdGVyW0RFRl9QUklPUklUWSArIDFdOworCXN0cnVjdCByZWNsYWltX2l0ZXIJaXRlcltERUZfUFJJT1JJVFkgKyAxXTsKIAogCXN0cnVjdCByYl9ub2RlCQl0cmVlX25vZGU7CS8qIFJCIHRyZWUgbm9kZSAqLwotCXVuc2lnbmVkIGxvbmcgbG9uZwl1c2FnZV9pbl9leGNlc3M7LyogU2V0IHRvIHRoZSB2YWx1ZSBieSB3aGljaCAqLworCXVuc2lnbmVkIGxvbmcJCXVzYWdlX2luX2V4Y2VzczsvKiBTZXQgdG8gdGhlIHZhbHVlIGJ5IHdoaWNoICovCiAJCQkJCQkvKiB0aGUgc29mdCBsaW1pdCBpcyBleGNlZWRlZCovCiAJYm9vbAkJCW9uX3RyZWU7CiAJc3RydWN0IG1lbV9jZ3JvdXAJKm1lbWNnOwkJLyogQmFjayBwb2ludGVyLCB3ZSBjYW5ub3QgKi8KQEAgLTE5OCw3ICsxOTIsNyBAQAogCiBzdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGQgewogCXN0cnVjdCBldmVudGZkX2N0eCAqZXZlbnRmZDsKLQl1NjQgdGhyZXNob2xkOworCXVuc2lnbmVkIGxvbmcgdGhyZXNob2xkOwogfTsKIAogLyogRm9yIHRocmVzaG9sZCAqLwpAQCAtMjg0LDEwICsyNzgsMTMgQEAKICAqLwogc3RydWN0IG1lbV9jZ3JvdXAgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKLQkvKgotCSAqIHRoZSBjb3VudGVyIHRvIGFjY291bnQgZm9yIG1lbW9yeSB1c2FnZQotCSAqLwotCXN0cnVjdCByZXNfY291bnRlciByZXM7CisKKwkvKiBBY2NvdW50ZWQgcmVzb3VyY2VzICovCisJc3RydWN0IHBhZ2VfY291bnRlciBtZW1vcnk7CisJc3RydWN0IHBhZ2VfY291bnRlciBtZW1zdzsKKwlzdHJ1Y3QgcGFnZV9jb3VudGVyIGttZW07CisKKwl1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQ7CiAKIAkvKiB2bXByZXNzdXJlIG5vdGlmaWNhdGlvbnMgKi8KIAlzdHJ1Y3Qgdm1wcmVzc3VyZSB2bXByZXNzdXJlOwpAQCAtMjk2LDE1ICsyOTMsNiBAQAogCWludCBpbml0aWFsaXplZDsKIAogCS8qCi0JICogdGhlIGNvdW50ZXIgdG8gYWNjb3VudCBmb3IgbWVtK3N3YXAgdXNhZ2UuCi0JICovCi0Jc3RydWN0IHJlc19jb3VudGVyIG1lbXN3OwotCi0JLyoKLQkgKiB0aGUgY291bnRlciB0byBhY2NvdW50IGZvciBrZXJuZWwgbWVtb3J5IHVzYWdlLgotCSAqLwotCXN0cnVjdCByZXNfY291bnRlciBrbWVtOwotCS8qCiAJICogU2hvdWxkIHRoZSBhY2NvdW50aW5nIGFuZCBjb250cm9sIGJlIGhpZXJhcmNoaWNhbCwgcGVyIHN1YnRyZWU/CiAJICovCiAJYm9vbCB1c2VfaGllcmFyY2h5OwpAQCAtMzUyLDcgKzM0MCw2IEBACiAJc3RydWN0IG1lbV9jZ3JvdXBfc3RhdF9jcHUgbm9jcHVfYmFzZTsKIAlzcGlubG9ja190IHBjcF9jb3VudGVyX2xvY2s7CiAKLQlhdG9taWNfdAlkZWFkX2NvdW50OwogI2lmIGRlZmluZWQoQ09ORklHX01FTUNHX0tNRU0pICYmIGRlZmluZWQoQ09ORklHX0lORVQpCiAJc3RydWN0IGNnX3Byb3RvIHRjcF9tZW07CiAjZW5kaWYKQEAgLTM4Miw3ICszNjksNiBAQAogLyogaW50ZXJuYWwgb25seSByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3RhdHVzIG9mIGttZW0gYWNjb3VudGluZy4gKi8KIGVudW0gewogCUtNRU1fQUNDT1VOVEVEX0FDVElWRSwgLyogYWNjb3VudGVkIGJ5IHRoaXMgY2dyb3VwIGl0c2VsZiAqLwotCUtNRU1fQUNDT1VOVEVEX0RFQUQsIC8qIGRlYWQgbWVtY2cgd2l0aCBwZW5kaW5nIGttZW0gY2hhcmdlcyAqLwogfTsKIAogI2lmZGVmIENPTkZJR19NRU1DR19LTUVNCkBAIC0zOTYsMjIgKzM4Miw2IEBACiAJcmV0dXJuIHRlc3RfYml0KEtNRU1fQUNDT1VOVEVEX0FDVElWRSwgJm1lbWNnLT5rbWVtX2FjY291bnRfZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBtZW1jZ19rbWVtX21hcmtfZGVhZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JLyoKLQkgKiBPdXIgY2FsbGVyIG11c3QgdXNlIGNzc19nZXQoKSBmaXJzdCwgYmVjYXVzZSBtZW1jZ191bmNoYXJnZV9rbWVtKCkKLQkgKiB3aWxsIGNhbGwgY3NzX3B1dCgpIGlmIGl0IHNlZXMgdGhlIG1lbWNnIGlzIGRlYWQuCi0JICovCi0Jc21wX3dtYigpOwotCWlmICh0ZXN0X2JpdChLTUVNX0FDQ09VTlRFRF9BQ1RJVkUsICZtZW1jZy0+a21lbV9hY2NvdW50X2ZsYWdzKSkKLQkJc2V0X2JpdChLTUVNX0FDQ09VTlRFRF9ERUFELCAmbWVtY2ctPmttZW1fYWNjb3VudF9mbGFncyk7Ci19Ci0KLXN0YXRpYyBib29sIG1lbWNnX2ttZW1fdGVzdF9hbmRfY2xlYXJfZGVhZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChLTUVNX0FDQ09VTlRFRF9ERUFELAotCQkJCSAgJm1lbWNnLT5rbWVtX2FjY291bnRfZmxhZ3MpOwotfQogI2VuZGlmCiAKIC8qIFN0dWZmcyBmb3IgbW92ZSBjaGFyZ2VzIGF0IHRhc2sgbWlncmF0aW9uLiAqLwpAQCAtNjUwLDcgKzYyMCw3IEBACiAJICogVGhpcyBjaGVjayBjYW4ndCBsaXZlIGluIGttZW0gZGVzdHJ1Y3Rpb24gZnVuY3Rpb24sCiAJICogc2luY2UgdGhlIGNoYXJnZXMgd2lsbCBvdXRsaXZlIHRoZSBjZ3JvdXAKIAkgKi8KLQlXQVJOX09OKHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+a21lbSwgUkVTX1VTQUdFKSAhPSAwKTsKKwlXQVJOX09OKHBhZ2VfY291bnRlcl9yZWFkKCZtZW1jZy0+a21lbSkpOwogfQogI2Vsc2UKIHN0YXRpYyB2b2lkIGRpc2FybV9rbWVtX2tleXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQpAQCAtNjY0LDggKzYzNCw2IEBACiAJZGlzYXJtX2ttZW1fa2V5cyhtZW1jZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYWluX2FsbF9zdG9ja19hc3luYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwotCiBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKgogbWVtX2Nncm91cF96b25lX3pvbmVpbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHpvbmUgKnpvbmUpCiB7CkBAIC03MDYsNyArNjc0LDcgQEAKIAogc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXosCiAJCQkJCSBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl96b25lICptY3R6LAotCQkJCQkgdW5zaWduZWQgbG9uZyBsb25nIG5ld191c2FnZV9pbl9leGNlc3MpCisJCQkJCSB1bnNpZ25lZCBsb25nIG5ld191c2FnZV9pbl9leGNlc3MpCiB7CiAJc3RydWN0IHJiX25vZGUgKipwID0gJm1jdHotPnJiX3Jvb3QucmJfbm9kZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKQEAgLTc1NSwxMCArNzIzLDIxIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWN0ei0+bG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzb2Z0X2xpbWl0X2V4Y2VzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCit7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHBhZ2VfY291bnRlcl9yZWFkKCZtZW1jZy0+bWVtb3J5KTsKKwl1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQgPSBBQ0NFU1NfT05DRShtZW1jZy0+c29mdF9saW1pdCk7CisJdW5zaWduZWQgbG9uZyBleGNlc3MgPSAwOworCisJaWYgKG5yX3BhZ2VzID4gc29mdF9saW1pdCkKKwkJZXhjZXNzID0gbnJfcGFnZXMgLSBzb2Z0X2xpbWl0OworCisJcmV0dXJuIGV4Y2VzczsKK30KIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfdHJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBleGNlc3M7CisJdW5zaWduZWQgbG9uZyBleGNlc3M7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwogCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHo7CiAKQEAgLTc2OSw3ICs3NDgsNyBAQAogCSAqLwogCWZvciAoOyBtZW1jZzsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpIHsKIAkJbXogPSBtZW1fY2dyb3VwX3BhZ2Vfem9uZWluZm8obWVtY2csIHBhZ2UpOwotCQlleGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2VzcygmbWVtY2ctPnJlcyk7CisJCWV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKG1lbWNnKTsKIAkJLyoKIAkJICogV2UgaGF2ZSB0byB1cGRhdGUgdGhlIHRyZWUgaWYgbXogaXMgb24gUkItdHJlZSBvcgogCQkgKiBtZW0gaXMgb3ZlciBpdHMgc29mdGxpbWl0LgpAQCAtODI1LDcgKzgwNCw3IEBACiAJICogcG9zaXRpb24gaW4gdGhlIHRyZWUuCiAJICovCiAJX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0JaWYgKCFyZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2VzcygmbXotPm1lbWNnLT5yZXMpIHx8CisJaWYgKCFzb2Z0X2xpbWl0X2V4Y2Vzcyhtei0+bWVtY2cpIHx8CiAJICAgICFjc3NfdHJ5Z2V0X29ubGluZSgmbXotPm1lbWNnLT5jc3MpKQogCQlnb3RvIHJldHJ5OwogZG9uZToKQEAgLTEwNjIsMTIyICsxMDQxLDYgQEAKIAlyZXR1cm4gbWVtY2c7CiB9CiAKLS8qCi0gKiBSZXR1cm5zIGEgbmV4dCAoaW4gYSBwcmUtb3JkZXIgd2FsaykgYWxpdmUgbWVtY2cgKHdpdGggZWxldmF0ZWQgY3NzCi0gKiByZWYuIGNvdW50KSBvciBOVUxMIGlmIHRoZSB3aG9sZSByb290J3Mgc3VidHJlZSBoYXMgYmVlbiB2aXNpdGVkLgotICoKLSAqIGhlbHBlciBmdW5jdGlvbiB0byBiZSB1c2VkIGJ5IG1lbV9jZ3JvdXBfaXRlcgotICovCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKl9fbWVtX2Nncm91cF9pdGVyX25leHQoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCi0JCXN0cnVjdCBtZW1fY2dyb3VwICpsYXN0X3Zpc2l0ZWQpCi17Ci0Jc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnByZXZfY3NzLCAqbmV4dF9jc3M7Ci0KLQlwcmV2X2NzcyA9IGxhc3RfdmlzaXRlZCA/ICZsYXN0X3Zpc2l0ZWQtPmNzcyA6IE5VTEw7Ci1za2lwX25vZGU6Ci0JbmV4dF9jc3MgPSBjc3NfbmV4dF9kZXNjZW5kYW50X3ByZShwcmV2X2NzcywgJnJvb3QtPmNzcyk7Ci0KLQkvKgotCSAqIEV2ZW4gaWYgd2UgZm91bmQgYSBncm91cCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBpdCBpcwotCSAqIGFsaXZlLiBjc3MgJiYgIW1lbWNnIG1lYW5zIHRoYXQgdGhlIGdyb3VwcyBzaG91bGQgYmUKLQkgKiBza2lwcGVkIGFuZCB3ZSBzaG91bGQgY29udGludWUgdGhlIHRyZWUgd2Fsay4KLQkgKiBsYXN0X3Zpc2l0ZWQgY3NzIGlzIHNhZmUgdG8gdXNlIGJlY2F1c2UgaXQgaXMKLQkgKiBwcm90ZWN0ZWQgYnkgY3NzX2dldCBhbmQgdGhlIHRyZWUgd2FsayBpcyByY3Ugc2FmZS4KLQkgKgotCSAqIFdlIGRvIG5vdCB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZSByb290IG9mIHRoZSB0cmVlIHdhbGsKLQkgKiBiZWNhdXNlIHdlIG1pZ2h0IHJhY2Ugd2l0aCB0aGUgcm9vdCByZW1vdmFsIHdoZW4gaXQgd291bGQKLQkgKiBiZSB0aGUgb25seSBub2RlIGluIHRoZSBpdGVyYXRlZCBoaWVyYXJjaHkgYW5kIG1lbV9jZ3JvdXBfaXRlcgotCSAqIHdvdWxkIGVuZCB1cCBpbiBhbiBlbmRsZXNzIGxvb3AgYmVjYXVzZSBpdCBleHBlY3RzIHRoYXQgYXQKLQkgKiBsZWFzdCBvbmUgdmFsaWQgbm9kZSB3aWxsIGJlIHJldHVybmVkLiBSb290IGNhbm5vdCBkaXNhcHBlYXIKLQkgKiBiZWNhdXNlIGNhbGxlciBvZiB0aGUgaXRlcmF0b3Igc2hvdWxkIGhvbGQgaXQgYWxyZWFkeSBzbwotCSAqIHNraXBwaW5nIGNzcyByZWZlcmVuY2Ugc2hvdWxkIGJlIHNhZmUuCi0JICovCi0JaWYgKG5leHRfY3NzKSB7Ci0JCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MobmV4dF9jc3MpOwotCi0JCWlmIChuZXh0X2NzcyA9PSAmcm9vdC0+Y3NzKQotCQkJcmV0dXJuIG1lbWNnOwotCi0JCWlmIChjc3NfdHJ5Z2V0X29ubGluZShuZXh0X2NzcykpIHsKLQkJCS8qCi0JCQkgKiBNYWtlIHN1cmUgdGhlIG1lbWNnIGlzIGluaXRpYWxpemVkOgotCQkJICogbWVtX2Nncm91cF9jc3Nfb25saW5lKCkgb3JkZXJzIHRoZSB0aGUKLQkJCSAqIGluaXRpYWxpemF0aW9uIGFnYWluc3Qgc2V0dGluZyB0aGUgZmxhZy4KLQkJCSAqLwotCQkJaWYgKHNtcF9sb2FkX2FjcXVpcmUoJm1lbWNnLT5pbml0aWFsaXplZCkpCi0JCQkJcmV0dXJuIG1lbWNnOwotCQkJY3NzX3B1dChuZXh0X2Nzcyk7Ci0JCX0KLQotCQlwcmV2X2NzcyA9IG5leHRfY3NzOwotCQlnb3RvIHNraXBfbm9kZTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9pdGVyX2ludmFsaWRhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QpCi17Ci0JLyoKLQkgKiBXaGVuIGEgZ3JvdXAgaW4gdGhlIGhpZXJhcmNoeSBiZWxvdyByb290IGlzIGRlc3Ryb3llZCwgdGhlCi0JICogaGllcmFyY2h5IGl0ZXJhdG9yIGNhbiBubyBsb25nZXIgYmUgdHJ1c3RlZCBzaW5jZSBpdCBtaWdodAotCSAqIGhhdmUgcG9pbnRlZCB0byB0aGUgZGVzdHJveWVkIGdyb3VwLiAgSW52YWxpZGF0ZSBpdC4KLQkgKi8KLQlhdG9taWNfaW5jKCZyb290LT5kZWFkX2NvdW50KTsKLX0KLQotc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICoKLW1lbV9jZ3JvdXBfaXRlcl9sb2FkKHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlciAqaXRlciwKLQkJICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKLQkJICAgICBpbnQgKnNlcXVlbmNlKQotewotCXN0cnVjdCBtZW1fY2dyb3VwICpwb3NpdGlvbiA9IE5VTEw7Ci0JLyoKLQkgKiBBIGNncm91cCBkZXN0cnVjdGlvbiBoYXBwZW5zIGluIHR3byBzdGFnZXM6IG9mZmxpbmluZyBhbmQKLQkgKiByZWxlYXNlLiAgVGhleSBhcmUgc2VwYXJhdGVkIGJ5IGEgUkNVIGdyYWNlIHBlcmlvZC4KLQkgKgotCSAqIElmIHRoZSBpdGVyYXRvciBpcyB2YWxpZCwgd2UgbWF5IHN0aWxsIHJhY2Ugd2l0aCBhbgotCSAqIG9mZmxpbmluZy4gIFRoZSBSQ1UgbG9jayBlbnN1cmVzIHRoZSBvYmplY3Qgd29uJ3QgYmUKLQkgKiByZWxlYXNlZCwgdHJ5Z2V0IHdpbGwgZmFpbCBpZiB3ZSBsb3N0IHRoZSByYWNlLgotCSAqLwotCSpzZXF1ZW5jZSA9IGF0b21pY19yZWFkKCZyb290LT5kZWFkX2NvdW50KTsKLQlpZiAoaXRlci0+bGFzdF9kZWFkX2NvdW50ID09ICpzZXF1ZW5jZSkgewotCQlzbXBfcm1iKCk7Ci0JCXBvc2l0aW9uID0gaXRlci0+bGFzdF92aXNpdGVkOwotCi0JCS8qCi0JCSAqIFdlIGNhbm5vdCB0YWtlIGEgcmVmZXJlbmNlIHRvIHJvb3QgYmVjYXVzZSB3ZSBtaWdodCByYWNlCi0JCSAqIHdpdGggcm9vdCByZW1vdmFsIGFuZCByZXR1cm5pbmcgTlVMTCB3b3VsZCBlbmQgdXAgaW4KLQkJICogYW4gZW5kbGVzcyBsb29wIG9uIHRoZSBpdGVyYXRvciB1c2VyIGxldmVsIHdoZW4gcm9vdAotCQkgKiB3b3VsZCBiZSByZXR1cm5lZCBhbGwgdGhlIHRpbWUuCi0JCSAqLwotCQlpZiAocG9zaXRpb24gJiYgcG9zaXRpb24gIT0gcm9vdCAmJgotCQkgICAgIWNzc190cnlnZXRfb25saW5lKCZwb3NpdGlvbi0+Y3NzKSkKLQkJCXBvc2l0aW9uID0gTlVMTDsKLQl9Ci0JcmV0dXJuIHBvc2l0aW9uOwotfQotCi1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2l0ZXJfdXBkYXRlKHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlciAqaXRlciwKLQkJCQkgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbGFzdF92aXNpdGVkLAotCQkJCSAgIHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfcG9zaXRpb24sCi0JCQkJICAgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCi0JCQkJICAgaW50IHNlcXVlbmNlKQotewotCS8qIHJvb3QgcmVmZXJlbmNlIGNvdW50aW5nIHN5bW1ldHJpYyB0byBtZW1fY2dyb3VwX2l0ZXJfbG9hZCAqLwotCWlmIChsYXN0X3Zpc2l0ZWQgJiYgbGFzdF92aXNpdGVkICE9IHJvb3QpCi0JCWNzc19wdXQoJmxhc3RfdmlzaXRlZC0+Y3NzKTsKLQkvKgotCSAqIFdlIHN0b3JlIHRoZSBzZXF1ZW5jZSBjb3VudCBmcm9tIHRoZSB0aW1lIEBsYXN0X3Zpc2l0ZWQgd2FzCi0JICogbG9hZGVkIHN1Y2Nlc3NmdWxseSBpbnN0ZWFkIG9mIHJlcmVhZGluZyBpdCBoZXJlIHNvIHRoYXQgd2UKLQkgKiBkb24ndCBsb3NlIGRlc3RydWN0aW9uIGV2ZW50cyBpbiBiZXR3ZWVuLiAgV2UgY291bGQgaGF2ZQotCSAqIHJhY2VkIHdpdGggdGhlIGRlc3RydWN0aW9uIG9mIEBuZXdfcG9zaXRpb24gYWZ0ZXIgYWxsLgotCSAqLwotCWl0ZXItPmxhc3RfdmlzaXRlZCA9IG5ld19wb3NpdGlvbjsKLQlzbXBfd21iKCk7Ci0JaXRlci0+bGFzdF9kZWFkX2NvdW50ID0gc2VxdWVuY2U7Ci19Ci0KIC8qKgogICogbWVtX2Nncm91cF9pdGVyIC0gaXRlcmF0ZSBvdmVyIG1lbW9yeSBjZ3JvdXAgaGllcmFyY2h5CiAgKiBAcm9vdDogaGllcmFyY2h5IHJvb3QKQEAgLTExOTksOCArMTA2MiwxMCBAQAogCQkJCSAgIHN0cnVjdCBtZW1fY2dyb3VwICpwcmV2LAogCQkJCSAgIHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llICpyZWNsYWltKQogeworCXN0cnVjdCByZWNsYWltX2l0ZXIgKnVuaW5pdGlhbGl6ZWRfdmFyKGl0ZXIpOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MgPSBOVUxMOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKmxhc3RfdmlzaXRlZCA9IE5VTEw7CisJc3RydWN0IG1lbV9jZ3JvdXAgKnBvcyA9IE5VTEw7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTEyMDksNTAgKzEwNzQsMTAxIEBACiAJCXJvb3QgPSByb290X21lbV9jZ3JvdXA7CiAKIAlpZiAocHJldiAmJiAhcmVjbGFpbSkKLQkJbGFzdF92aXNpdGVkID0gcHJldjsKKwkJcG9zID0gcHJldjsKIAogCWlmICghcm9vdC0+dXNlX2hpZXJhcmNoeSAmJiByb290ICE9IHJvb3RfbWVtX2Nncm91cCkgewogCQlpZiAocHJldikKLQkJCWdvdG8gb3V0X2Nzc19wdXQ7CisJCQlnb3RvIG91dDsKIAkJcmV0dXJuIHJvb3Q7CiAJfQogCiAJcmN1X3JlYWRfbG9jaygpOwotCXdoaWxlICghbWVtY2cpIHsKLQkJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyICp1bmluaXRpYWxpemVkX3ZhcihpdGVyKTsKLQkJaW50IHVuaW5pdGlhbGl6ZWRfdmFyKHNlcSk7CiAKLQkJaWYgKHJlY2xhaW0pIHsKLQkJCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKKwlpZiAocmVjbGFpbSkgeworCQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CiAKLQkJCW16ID0gbWVtX2Nncm91cF96b25lX3pvbmVpbmZvKHJvb3QsIHJlY2xhaW0tPnpvbmUpOwotCQkJaXRlciA9ICZtei0+cmVjbGFpbV9pdGVyW3JlY2xhaW0tPnByaW9yaXR5XTsKLQkJCWlmIChwcmV2ICYmIHJlY2xhaW0tPmdlbmVyYXRpb24gIT0gaXRlci0+Z2VuZXJhdGlvbikgewotCQkJCWl0ZXItPmxhc3RfdmlzaXRlZCA9IE5VTEw7Ci0JCQkJZ290byBvdXRfdW5sb2NrOwotCQkJfQorCQlteiA9IG1lbV9jZ3JvdXBfem9uZV96b25laW5mbyhyb290LCByZWNsYWltLT56b25lKTsKKwkJaXRlciA9ICZtei0+aXRlcltyZWNsYWltLT5wcmlvcml0eV07CiAKLQkJCWxhc3RfdmlzaXRlZCA9IG1lbV9jZ3JvdXBfaXRlcl9sb2FkKGl0ZXIsIHJvb3QsICZzZXEpOwotCQl9Ci0KLQkJbWVtY2cgPSBfX21lbV9jZ3JvdXBfaXRlcl9uZXh0KHJvb3QsIGxhc3RfdmlzaXRlZCk7Ci0KLQkJaWYgKHJlY2xhaW0pIHsKLQkJCW1lbV9jZ3JvdXBfaXRlcl91cGRhdGUoaXRlciwgbGFzdF92aXNpdGVkLCBtZW1jZywgcm9vdCwKLQkJCQkJc2VxKTsKLQotCQkJaWYgKCFtZW1jZykKLQkJCQlpdGVyLT5nZW5lcmF0aW9uKys7Ci0JCQllbHNlIGlmICghcHJldiAmJiBtZW1jZykKLQkJCQlyZWNsYWltLT5nZW5lcmF0aW9uID0gaXRlci0+Z2VuZXJhdGlvbjsKLQkJfQotCi0JCWlmIChwcmV2ICYmICFtZW1jZykKKwkJaWYgKHByZXYgJiYgcmVjbGFpbS0+Z2VuZXJhdGlvbiAhPSBpdGVyLT5nZW5lcmF0aW9uKQogCQkJZ290byBvdXRfdW5sb2NrOworCisJCWRvIHsKKwkJCXBvcyA9IEFDQ0VTU19PTkNFKGl0ZXItPnBvc2l0aW9uKTsKKwkJCS8qCisJCQkgKiBBIHJhY2luZyB1cGRhdGUgbWF5IGNoYW5nZSB0aGUgcG9zaXRpb24gYW5kCisJCQkgKiBwdXQgdGhlIGxhc3QgcmVmZXJlbmNlLCBoZW5jZSBjc3NfdHJ5Z2V0KCksCisJCQkgKiBvciByZXRyeSB0byBzZWUgdGhlIHVwZGF0ZWQgcG9zaXRpb24uCisJCQkgKi8KKwkJfSB3aGlsZSAocG9zICYmICFjc3NfdHJ5Z2V0KCZwb3MtPmNzcykpOwogCX0KKworCWlmIChwb3MpCisJCWNzcyA9ICZwb3MtPmNzczsKKworCWZvciAoOzspIHsKKwkJY3NzID0gY3NzX25leHRfZGVzY2VuZGFudF9wcmUoY3NzLCAmcm9vdC0+Y3NzKTsKKwkJaWYgKCFjc3MpIHsKKwkJCS8qCisJCQkgKiBSZWNsYWltZXJzIHNoYXJlIHRoZSBoaWVyYXJjaHkgd2FsaywgYW5kIGEKKwkJCSAqIG5ldyBvbmUgbWlnaHQganVtcCBpbiByaWdodCBhdCB0aGUgZW5kIG9mCisJCQkgKiB0aGUgaGllcmFyY2h5IC0gbWFrZSBzdXJlIHRoZXkgc2VlIGF0IGxlYXN0CisJCQkgKiBvbmUgZ3JvdXAgYW5kIHJlc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nLgorCQkJICovCisJCQlpZiAoIXByZXYpCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFZlcmlmeSB0aGUgY3NzIGFuZCBhY3F1aXJlIGEgcmVmZXJlbmNlLiAgVGhlIHJvb3QKKwkJICogaXMgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciwgc28gd2Uga25vdyBpdCdzIGFsaXZlCisJCSAqIGFuZCBraWNraW5nLCBhbmQgZG9uJ3QgdGFrZSBhbiBleHRyYSByZWZlcmVuY2UuCisJCSAqLworCQltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTsKKworCQlpZiAoY3NzID09ICZyb290LT5jc3MpCisJCQlicmVhazsKKworCQlpZiAoY3NzX3RyeWdldChjc3MpKSB7CisJCQkvKgorCQkJICogTWFrZSBzdXJlIHRoZSBtZW1jZyBpcyBpbml0aWFsaXplZDoKKwkJCSAqIG1lbV9jZ3JvdXBfY3NzX29ubGluZSgpIG9yZGVycyB0aGUgdGhlCisJCQkgKiBpbml0aWFsaXphdGlvbiBhZ2FpbnN0IHNldHRpbmcgdGhlIGZsYWcuCisJCQkgKi8KKwkJCWlmIChzbXBfbG9hZF9hY3F1aXJlKCZtZW1jZy0+aW5pdGlhbGl6ZWQpKQorCQkJCWJyZWFrOworCisJCQljc3NfcHV0KGNzcyk7CisJCX0KKworCQltZW1jZyA9IE5VTEw7CisJfQorCisJaWYgKHJlY2xhaW0pIHsKKwkJaWYgKGNtcHhjaGcoJml0ZXItPnBvc2l0aW9uLCBwb3MsIG1lbWNnKSA9PSBwb3MpIHsKKwkJCWlmIChtZW1jZykKKwkJCQljc3NfZ2V0KCZtZW1jZy0+Y3NzKTsKKwkJCWlmIChwb3MpCisJCQkJY3NzX3B1dCgmcG9zLT5jc3MpOworCQl9CisKKwkJLyoKKwkJICogcGFpcnMgd2l0aCBjc3NfdHJ5Z2V0IHdoZW4gZGVyZWZlcmVuY2luZyBpdGVyLT5wb3NpdGlvbgorCQkgKiBhYm92ZS4KKwkJICovCisJCWlmIChwb3MpCisJCQljc3NfcHV0KCZwb3MtPmNzcyk7CisKKwkJaWYgKCFtZW1jZykKKwkJCWl0ZXItPmdlbmVyYXRpb24rKzsKKwkJZWxzZSBpZiAoIXByZXYpCisJCQlyZWNsYWltLT5nZW5lcmF0aW9uID0gaXRlci0+Z2VuZXJhdGlvbjsKKwl9CisKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci1vdXRfY3NzX3B1dDoKK291dDoKIAlpZiAocHJldiAmJiBwcmV2ICE9IHJvb3QpCiAJCWNzc19wdXQoJnByZXYtPmNzcyk7CiAKQEAgLTEzNDYsMTUgKzEyNjIsMTggQEAKIH0KIAogLyoqCi0gKiBtZW1fY2dyb3VwX3BhZ2VfbHJ1dmVjIC0gcmV0dXJuIGxydXZlYyBmb3IgYWRkaW5nIGFuIGxydSBwYWdlCisgKiBtZW1fY2dyb3VwX3BhZ2VfbHJ1dmVjIC0gcmV0dXJuIGxydXZlYyBmb3IgaXNvbGF0aW5nL3B1dHRpbmcgYW4gTFJVIHBhZ2UKICAqIEBwYWdlOiB0aGUgcGFnZQogICogQHpvbmU6IHpvbmUgb2YgdGhlIHBhZ2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgc2FmZSB3aGVuIGZvbGxvd2luZyB0aGUgTFJVIHBhZ2UgaXNvbGF0aW9uCisgKiBhbmQgcHV0YmFjayBwcm90b2NvbDogdGhlIExSVSBsb2NrIG11c3QgYmUgaGVsZCwgYW5kIHRoZSBwYWdlIG11c3QKKyAqIGVpdGhlciBiZSBQYWdlTFJVKCkgb3IgdGhlIGNhbGxlciBtdXN0IGhhdmUgaXNvbGF0ZWQvYWxsb2NhdGVkIGl0LgogICovCiBzdHJ1Y3QgbHJ1dmVjICptZW1fY2dyb3VwX3BhZ2VfbHJ1dmVjKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgem9uZSAqem9uZSkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkgewpAQCAtMTM2MiwyMCArMTI4MSwxMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKLQltZW1jZyA9IHBjLT5tZW1fY2dyb3VwOwotCisJbWVtY2cgPSBwYWdlLT5tZW1fY2dyb3VwOwogCS8qCi0JICogU3VycmVwdGl0aW91c2x5IHN3aXRjaCBhbnkgdW5jaGFyZ2VkIG9mZmxpc3QgcGFnZSB0byByb290OgotCSAqIGFuIHVuY2hhcmdlZCBwYWdlIG9mZiBscnUgZG9lcyBub3RoaW5nIHRvIHNlY3VyZQotCSAqIGl0cyBmb3JtZXIgbWVtX2Nncm91cCBmcm9tIHN1ZGRlbiByZW1vdmFsLgotCSAqCi0JICogT3VyIGNhbGxlciBob2xkcyBscnVfbG9jaywgYW5kIFBhZ2VDZ3JvdXBVc2VkIGlzIHVwZGF0ZWQKLQkgKiB1bmRlciBwYWdlX2Nncm91cCBsb2NrOiBiZXR3ZWVuIHRoZW0sIHRoZXkgbWFrZSBhbGwgdXNlcwotCSAqIG9mIHBjLT5tZW1fY2dyb3VwIHNhZmUuCisJICogU3dhcGNhY2hlIHJlYWRhaGVhZCBwYWdlcyBhcmUgYWRkZWQgdG8gdGhlIExSVSAtIGFuZAorCSAqIHBvc3NpYmx5IG1pZ3JhdGVkIC0gYmVmb3JlIHRoZXkgYXJlIGNoYXJnZWQuCiAJICovCi0JaWYgKCFQYWdlTFJVKHBhZ2UpICYmICFQYWdlQ2dyb3VwVXNlZChwYykgJiYgbWVtY2cgIT0gcm9vdF9tZW1fY2dyb3VwKQotCQlwYy0+bWVtX2Nncm91cCA9IG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwOworCWlmICghbWVtY2cpCisJCW1lbWNnID0gcm9vdF9tZW1fY2dyb3VwOwogCiAJbXogPSBtZW1fY2dyb3VwX3BhZ2Vfem9uZWluZm8obWVtY2csIHBhZ2UpOwogCWxydXZlYyA9ICZtei0+bHJ1dmVjOwpAQCAtMTQxNCw0MSArMTMyNiwyNCBAQAogCVZNX0JVR19PTigobG9uZykoKmxydV9zaXplKSA8IDApOwogfQogCi0vKgotICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gbWVtIGlzIHNhbWUgb3IgaW4gdGhlIHJvb3RfbWVtX2Nncm91cCdzCi0gKiBoaWVyYXJjaHkgc3VidHJlZQotICovCi1ib29sIF9fbWVtX2Nncm91cF9zYW1lX29yX3N1YnRyZWUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csCi0JCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCitib29sIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpyb290KQogewotCWlmIChyb290X21lbWNnID09IG1lbWNnKQorCWlmIChyb290ID09IG1lbWNnKQogCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoIXJvb3RfbWVtY2ctPnVzZV9oaWVyYXJjaHkgfHwgIW1lbWNnKQorCWlmICghcm9vdC0+dXNlX2hpZXJhcmNoeSkKIAkJcmV0dXJuIGZhbHNlOwotCXJldHVybiBjZ3JvdXBfaXNfZGVzY2VuZGFudChtZW1jZy0+Y3NzLmNncm91cCwgcm9vdF9tZW1jZy0+Y3NzLmNncm91cCk7CisJcmV0dXJuIGNncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLT5jc3MuY2dyb3VwLCByb290LT5jc3MuY2dyb3VwKTsKIH0KIAotc3RhdGljIGJvb2wgbWVtX2Nncm91cF9zYW1lX29yX3N1YnRyZWUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csCi0JCQkJICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKK2Jvb2wgdGFza19pbl9tZW1fY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewotCWJvb2wgcmV0OwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXJldCA9IF9fbWVtX2Nncm91cF9zYW1lX29yX3N1YnRyZWUocm9vdF9tZW1jZywgbWVtY2cpOwotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiByZXQ7Ci19Ci0KLWJvb2wgdGFza19pbl9tZW1fY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCWNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKLXsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyciA9IE5VTEw7CisJc3RydWN0IG1lbV9jZ3JvdXAgKnRhc2tfbWVtY2c7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCWJvb2wgcmV0OwogCiAJcCA9IGZpbmRfbG9ja190YXNrX21tKHRhc2spOwogCWlmIChwKSB7Ci0JCWN1cnIgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKHAtPm1tKTsKKwkJdGFza19tZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0ocC0+bW0pOwogCQl0YXNrX3VubG9jayhwKTsKIAl9IGVsc2UgewogCQkvKgpAQCAtMTQ1NywxOSArMTM1MiwxMiBAQAogCQkgKiBraWxsZWQgdG8gcHJldmVudCBuZWVkbGVzc2x5IGtpbGxpbmcgYWRkaXRpb25hbCB0YXNrcy4KIAkJICovCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJY3VyciA9IG1lbV9jZ3JvdXBfZnJvbV90YXNrKHRhc2spOwotCQlpZiAoY3VycikKLQkJCWNzc19nZXQoJmN1cnItPmNzcyk7CisJCXRhc2tfbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fdGFzayh0YXNrKTsKKwkJY3NzX2dldCgmdGFza19tZW1jZy0+Y3NzKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQotCS8qCi0JICogV2Ugc2hvdWxkIGNoZWNrIHVzZV9oaWVyYXJjaHkgb2YgIm1lbWNnIiBub3QgImN1cnIiLiBCZWNhdXNlIGNoZWNraW5nCi0JICogdXNlX2hpZXJhcmNoeSBvZiAiY3VyciIgaGVyZSBtYWtlIHRoaXMgZnVuY3Rpb24gdHJ1ZSBpZiBoaWVyYXJjaHkgaXMKLQkgKiBlbmFibGVkIGluICJjdXJyIiBhbmQgImN1cnIiIGlzIGEgY2hpbGQgb2YgIm1lbWNnIiBpbiAqY2dyb3VwKgotCSAqIGhpZXJhcmNoeShldmVuIGlmIHVzZV9oaWVyYXJjaHkgaXMgZGlzYWJsZWQgaW4gIm1lbWNnIikuCi0JICovCi0JcmV0ID0gbWVtX2Nncm91cF9zYW1lX29yX3N1YnRyZWUobWVtY2csIGN1cnIpOwotCWNzc19wdXQoJmN1cnItPmNzcyk7CisJcmV0ID0gbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHRhc2tfbWVtY2csIG1lbWNnKTsKKwljc3NfcHV0KCZ0YXNrX21lbWNnLT5jc3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0OTIsNyArMTM4MCw3IEBACiAJcmV0dXJuIGluYWN0aXZlICogaW5hY3RpdmVfcmF0aW8gPCBhY3RpdmU7CiB9CiAKLSNkZWZpbmUgbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGNvdW50ZXIsIG1lbWJlcikJXAorI2RlZmluZSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1iZXIpCVwKIAljb250YWluZXJfb2YoY291bnRlciwgc3RydWN0IG1lbV9jZ3JvdXAsIG1lbWJlcikKIAogLyoqCkBAIC0xNTA0LDEyICsxMzkyLDIzIEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbWFyZ2luKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWFyZ2luOworCXVuc2lnbmVkIGxvbmcgbWFyZ2luID0gMDsKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCXVuc2lnbmVkIGxvbmcgbGltaXQ7CiAKLQltYXJnaW4gPSByZXNfY291bnRlcl9tYXJnaW4oJm1lbWNnLT5yZXMpOwotCWlmIChkb19zd2FwX2FjY291bnQpCi0JCW1hcmdpbiA9IG1pbihtYXJnaW4sIHJlc19jb3VudGVyX21hcmdpbigmbWVtY2ctPm1lbXN3KSk7Ci0JcmV0dXJuIG1hcmdpbiA+PiBQQUdFX1NISUZUOworCWNvdW50ID0gcGFnZV9jb3VudGVyX3JlYWQoJm1lbWNnLT5tZW1vcnkpOworCWxpbWl0ID0gQUNDRVNTX09OQ0UobWVtY2ctPm1lbW9yeS5saW1pdCk7CisJaWYgKGNvdW50IDwgbGltaXQpCisJCW1hcmdpbiA9IGxpbWl0IC0gY291bnQ7CisKKwlpZiAoZG9fc3dhcF9hY2NvdW50KSB7CisJCWNvdW50ID0gcGFnZV9jb3VudGVyX3JlYWQoJm1lbWNnLT5tZW1zdyk7CisJCWxpbWl0ID0gQUNDRVNTX09OQ0UobWVtY2ctPm1lbXN3LmxpbWl0KTsKKwkJaWYgKGNvdW50IDw9IGxpbWl0KQorCQkJbWFyZ2luID0gbWluKG1hcmdpbiwgbGltaXQgLSBjb3VudCk7CisJfQorCisJcmV0dXJuIG1hcmdpbjsKIH0KIAogaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCkBAIC0xNTIyLDM3ICsxNDIxLDYgQEAKIH0KIAogLyoKLSAqIG1lbWNnLT5tb3ZpbmdfYWNjb3VudCBpcyB1c2VkIGZvciBjaGVja2luZyBwb3NzaWJpbGl0eSB0aGF0IHNvbWUgdGhyZWFkIGlzCi0gKiBjYWxsaW5nIG1vdmVfYWNjb3VudCgpLiBXaGVuIGEgdGhyZWFkIG9uIENQVS1BIHN0YXJ0cyBtb3ZpbmcgcGFnZXMgdW5kZXIKLSAqIGEgbWVtY2csIG90aGVyIHRocmVhZHMgc2hvdWxkIGNoZWNrIG1lbWNnLT5tb3ZpbmdfYWNjb3VudCB1bmRlcgotICogcmN1X3JlYWRfbG9jaygpLCBsaWtlIHRoaXM6Ci0gKgotICogICAgICAgICBDUFUtQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVS1CCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY3VfcmVhZF9sb2NrKCkKLSAqICAgICAgICAgbWVtY2ctPm1vdmluZ19hY2NvdW50KzEgICAgICAgICAgICAgIGlmIChtZW1jZy0+bW9jaW5nX2FjY291bnQpCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UgaGVhdnkgbG9ja3MuCi0gKiAgICAgICAgIHN5bmNocm9uaXplX3JjdSgpICAgICAgICAgICAgICAgICAgICB1cGRhdGUgc29tZXRoaW5nLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmN1X3JlYWRfdW5sb2NrKCkKLSAqICAgICAgICAgc3RhcnQgbW92ZSBoZXJlLgotICovCi0KLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhcnRfbW92ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JYXRvbWljX2luYygmbWVtY2ctPm1vdmluZ19hY2NvdW50KTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKLX0KLQotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9lbmRfbW92ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JLyoKLQkgKiBOb3csIG1lbV9jZ3JvdXBfY2xlYXJfbWMoKSBtYXkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggTlVMTC4KLQkgKiBXZSBjaGVjayBOVUxMIGluIGNhbGxlZSByYXRoZXIgdGhhbiBjYWxsZXIuCi0JICovCi0JaWYgKG1lbWNnKQotCQlhdG9taWNfZGVjKCZtZW1jZy0+bW92aW5nX2FjY291bnQpOwotfQotCi0vKgogICogQSByb3V0aW5lIGZvciBjaGVja2luZyAibWVtIiBpcyB1bmRlciBtb3ZlX2FjY291bnQoKSBvciBub3QuCiAgKgogICogQ2hlY2tpbmcgYSBjZ3JvdXAgaXMgbWMuZnJvbSBvciBtYy50byBvciB1bmRlciBoaWVyYXJjaHkgb2YKQEAgLTE1NzQsOCArMTQ0Miw4IEBACiAJaWYgKCFmcm9tKQogCQlnb3RvIHVubG9jazsKIAotCXJldCA9IG1lbV9jZ3JvdXBfc2FtZV9vcl9zdWJ0cmVlKG1lbWNnLCBmcm9tKQotCQl8fCBtZW1fY2dyb3VwX3NhbWVfb3Jfc3VidHJlZShtZW1jZywgdG8pOworCXJldCA9IG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChmcm9tLCBtZW1jZykgfHwKKwkJbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHRvLCBtZW1jZyk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2soJm1jLmxvY2spOwogCXJldHVybiByZXQ7CkBAIC0xNTk3LDIzICsxNDY1LDYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qCi0gKiBUYWtlIHRoaXMgbG9jayB3aGVuCi0gKiAtIGEgY29kZSB0cmllcyB0byBtb2RpZnkgcGFnZSdzIG1lbWNnIHdoaWxlIGl0J3MgVVNFRC4KLSAqIC0gYSBjb2RlIHRyaWVzIHRvIG1vZGlmeSBwYWdlIHN0YXRlIGFjY291bnRpbmcgaW4gYSBtZW1jZy4KLSAqLwotc3RhdGljIHZvaWQgbW92ZV9sb2NrX21lbV9jZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCSAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCi17Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1lbWNnLT5tb3ZlX2xvY2ssICpmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vdmVfdW5sb2NrX21lbV9jZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCXVuc2lnbmVkIGxvbmcgKmZsYWdzKQotewotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1lbWNnLT5tb3ZlX2xvY2ssICpmbGFncyk7Ci19Ci0KICNkZWZpbmUgSyh4KSAoKHgpIDw8IChQQUdFX1NISUZULTEwKSkKIC8qKgogICogbWVtX2Nncm91cF9wcmludF9vb21faW5mbzogUHJpbnQgT09NIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIG1lbW9yeSBjb250cm9sbGVyLgpAQCAtMTY0NCwxOCArMTQ5NSwxNSBAQAogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlwcl9pbmZvKCJtZW1vcnk6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCBmYWlsY250ICVsbHVcbiIsCi0JCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfVVNBR0UpID4+IDEwLAotCQlyZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPnJlcywgUkVTX0xJTUlUKSA+PiAxMCwKLQkJcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19GQUlMQ05UKSk7Ci0JcHJfaW5mbygibWVtb3J5K3N3YXA6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCBmYWlsY250ICVsbHVcbiIsCi0JCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19VU0FHRSkgPj4gMTAsCi0JCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19MSU1JVCkgPj4gMTAsCi0JCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19GQUlMQ05UKSk7Ci0JcHJfaW5mbygia21lbTogdXNhZ2UgJWxsdWtCLCBsaW1pdCAlbGx1a0IsIGZhaWxjbnQgJWxsdVxuIiwKLQkJcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5rbWVtLCBSRVNfVVNBR0UpID4+IDEwLAotCQlyZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPmttZW0sIFJFU19MSU1JVCkgPj4gMTAsCi0JCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+a21lbSwgUkVTX0ZBSUxDTlQpKTsKKwlwcl9pbmZvKCJtZW1vcnk6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCBmYWlsY250ICVsdVxuIiwKKwkJSygodTY0KXBhZ2VfY291bnRlcl9yZWFkKCZtZW1jZy0+bWVtb3J5KSksCisJCUsoKHU2NCltZW1jZy0+bWVtb3J5LmxpbWl0KSwgbWVtY2ctPm1lbW9yeS5mYWlsY250KTsKKwlwcl9pbmZvKCJtZW1vcnkrc3dhcDogdXNhZ2UgJWxsdWtCLCBsaW1pdCAlbGx1a0IsIGZhaWxjbnQgJWx1XG4iLAorCQlLKCh1NjQpcGFnZV9jb3VudGVyX3JlYWQoJm1lbWNnLT5tZW1zdykpLAorCQlLKCh1NjQpbWVtY2ctPm1lbXN3LmxpbWl0KSwgbWVtY2ctPm1lbXN3LmZhaWxjbnQpOworCXByX2luZm8oImttZW06IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCBmYWlsY250ICVsdVxuIiwKKwkJSygodTY0KXBhZ2VfY291bnRlcl9yZWFkKCZtZW1jZy0+a21lbSkpLAorCQlLKCh1NjQpbWVtY2ctPmttZW0ubGltaXQpLCBtZW1jZy0+a21lbS5mYWlsY250KTsKIAogCWZvcl9lYWNoX21lbV9jZ3JvdXBfdHJlZShpdGVyLCBtZW1jZykgewogCQlwcl9pbmZvKCJNZW1vcnkgY2dyb3VwIHN0YXRzIGZvciAiKTsKQEAgLTE2OTUsMjggKzE1NDMsMTcgQEAKIC8qCiAgKiBSZXR1cm4gdGhlIG1lbW9yeSAoYW5kIHN3YXAsIGlmIGNvbmZpZ3VyZWQpIGxpbWl0IGZvciBhIG1lbWNnLgogICovCi1zdGF0aWMgdTY0IG1lbV9jZ3JvdXBfZ2V0X2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQl1NjQgbGltaXQ7CisJdW5zaWduZWQgbG9uZyBsaW1pdDsKIAotCWxpbWl0ID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19MSU1JVCk7Ci0KLQkvKgotCSAqIERvIG5vdCBjb25zaWRlciBzd2FwIHNwYWNlIGlmIHdlIGNhbm5vdCBzd2FwIGR1ZSB0byBzd2FwcGluZXNzCi0JICovCisJbGltaXQgPSBtZW1jZy0+bWVtb3J5LmxpbWl0OwogCWlmIChtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpKSB7Ci0JCXU2NCBtZW1zdzsKKwkJdW5zaWduZWQgbG9uZyBtZW1zd19saW1pdDsKIAotCQlsaW1pdCArPSB0b3RhbF9zd2FwX3BhZ2VzIDw8IFBBR0VfU0hJRlQ7Ci0JCW1lbXN3ID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX0xJTUlUKTsKLQotCQkvKgotCQkgKiBJZiBtZW1zdyBpcyBmaW5pdGUgYW5kIGxpbWl0cyB0aGUgYW1vdW50IG9mIHN3YXAgc3BhY2UKLQkJICogYXZhaWxhYmxlIHRvIHRoaXMgbWVtY2csIHJldHVybiB0aGF0IGxpbWl0LgotCQkgKi8KLQkJbGltaXQgPSBtaW4obGltaXQsIG1lbXN3KTsKKwkJbWVtc3dfbGltaXQgPSBtZW1jZy0+bWVtc3cubGltaXQ7CisJCWxpbWl0ID0gbWluKGxpbWl0ICsgdG90YWxfc3dhcF9wYWdlcywgbWVtc3dfbGltaXQpOwogCX0KLQogCXJldHVybiBsaW1pdDsKIH0KIApAQCAtMTc0MCw3ICsxNTc3LDcgQEAKIAl9CiAKIAljaGVja19wYW5pY19vbl9vb20oQ09OU1RSQUlOVF9NRU1DRywgZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTsKLQl0b3RhbHBhZ2VzID0gbWVtX2Nncm91cF9nZXRfbGltaXQobWVtY2cpID4+IFBBR0VfU0hJRlQgPyA6IDE7CisJdG90YWxwYWdlcyA9IG1lbV9jZ3JvdXBfZ2V0X2xpbWl0KG1lbWNnKSA/IDogMTsKIAlmb3JfZWFjaF9tZW1fY2dyb3VwX3RyZWUoaXRlciwgbWVtY2cpIHsKIAkJc3RydWN0IGNzc190YXNrX2l0ZXIgaXQ7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKQEAgLTE4ODAsNTIgKzE3MTcsMTEgQEAKIAltZW1jZy0+bGFzdF9zY2FubmVkX25vZGUgPSBub2RlOwogCXJldHVybiBub2RlOwogfQotCi0vKgotICogQ2hlY2sgYWxsIG5vZGVzIHdoZXRoZXIgaXQgY29udGFpbnMgcmVjbGFpbWFibGUgcGFnZXMgb3Igbm90LgotICogRm9yIHF1aWNrIHNjYW4sIHdlIG1ha2UgdXNlIG9mIHNjYW5fbm9kZXMuIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBza2lwCi0gKiB1bnVzZWQgbm9kZXMuIEJ1dCBzY2FuX25vZGVzIGlzIGxhemlseSB1cGRhdGVkIGFuZCBtYXkgbm90IGNvdGFpbgotICogZW5vdWdoIG5ldyBpbmZvcm1hdGlvbi4gV2UgbmVlZCB0byBkbyBkb3VibGUgY2hlY2suCi0gKi8KLXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfcmVjbGFpbWFibGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIG5vc3dhcCkKLXsKLQlpbnQgbmlkOwotCi0JLyoKLQkgKiBxdWljayBjaGVjay4uLm1ha2luZyB1c2Ugb2Ygc2Nhbl9ub2RlLgotCSAqIFdlIGNhbiBza2lwIHVudXNlZCBub2Rlcy4KLQkgKi8KLQlpZiAoIW5vZGVzX2VtcHR5KG1lbWNnLT5zY2FuX25vZGVzKSkgewotCQlmb3IgKG5pZCA9IGZpcnN0X25vZGUobWVtY2ctPnNjYW5fbm9kZXMpOwotCQkgICAgIG5pZCA8IE1BWF9OVU1OT0RFUzsKLQkJICAgICBuaWQgPSBuZXh0X25vZGUobmlkLCBtZW1jZy0+c2Nhbl9ub2RlcykpIHsKLQotCQkJaWYgKHRlc3RfbWVtX2Nncm91cF9ub2RlX3JlY2xhaW1hYmxlKG1lbWNnLCBuaWQsIG5vc3dhcCkpCi0JCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBDaGVjayByZXN0IG9mIG5vZGVzLgotCSAqLwotCWZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkgewotCQlpZiAobm9kZV9pc3NldChuaWQsIG1lbWNnLT5zY2FuX25vZGVzKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAodGVzdF9tZW1fY2dyb3VwX25vZGVfcmVjbGFpbWFibGUobWVtY2csIG5pZCwgbm9zd2FwKSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KICNlbHNlCiBpbnQgbWVtX2Nncm91cF9zZWxlY3RfdmljdGltX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiAwOwogfQotCi1zdGF0aWMgYm9vbCBtZW1fY2dyb3VwX3JlY2xhaW1hYmxlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBub3N3YXApCi17Ci0JcmV0dXJuIHRlc3RfbWVtX2Nncm91cF9ub2RlX3JlY2xhaW1hYmxlKG1lbWNnLCAwLCBub3N3YXApOwotfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csCkBAIC0xOTQzLDcgKzE3MzksNyBAQAogCQkucHJpb3JpdHkgPSAwLAogCX07CiAKLQlleGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2Vzcygmcm9vdF9tZW1jZy0+cmVzKSA+PiBQQUdFX1NISUZUOworCWV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpOwogCiAJd2hpbGUgKDEpIHsKIAkJdmljdGltID0gbWVtX2Nncm91cF9pdGVyKHJvb3RfbWVtY2csIHZpY3RpbSwgJnJlY2xhaW0pOwpAQCAtMTk2OSwxMiArMTc2NSwxMCBAQAogCQkJfQogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFtZW1fY2dyb3VwX3JlY2xhaW1hYmxlKHZpY3RpbSwgZmFsc2UpKQotCQkJY29udGludWU7CiAJCXRvdGFsICs9IG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVfem9uZSh2aWN0aW0sIGdmcF9tYXNrLCBmYWxzZSwKIAkJCQkJCSAgICAgem9uZSwgJm5yX3NjYW5uZWQpOwogCQkqdG90YWxfc2Nhbm5lZCArPSBucl9zY2FubmVkOwotCQlpZiAoIXJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZyb290X21lbWNnLT5yZXMpKQorCQlpZiAoIXNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpKQogCQkJYnJlYWs7CiAJfQogCW1lbV9jZ3JvdXBfaXRlcl9icmVhayhyb290X21lbWNnLCB2aWN0aW0pOwpAQCAtMjA4MSwxMiArMTg3NSw4IEBACiAJb29tX3dhaXRfaW5mbyA9IGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3Qgb29tX3dhaXRfaW5mbywgd2FpdCk7CiAJb29tX3dhaXRfbWVtY2cgPSBvb21fd2FpdF9pbmZvLT5tZW1jZzsKIAotCS8qCi0JICogQm90aCBvZiBvb21fd2FpdF9pbmZvLT5tZW1jZyBhbmQgd2FrZV9tZW1jZyBhcmUgc3RhYmxlIHVuZGVyIHVzLgotCSAqIFRoZW4gd2UgY2FuIHVzZSBjc3NfaXNfYW5jZXN0b3Igd2l0aG91dCB0YWtpbmcgY2FyZSBvZiBSQ1UuCi0JICovCi0JaWYgKCFtZW1fY2dyb3VwX3NhbWVfb3Jfc3VidHJlZShvb21fd2FpdF9tZW1jZywgd2FrZV9tZW1jZykKLQkJJiYgIW1lbV9jZ3JvdXBfc2FtZV9vcl9zdWJ0cmVlKHdha2VfbWVtY2csIG9vbV93YWl0X21lbWNnKSkKKwlpZiAoIW1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudCh3YWtlX21lbWNnLCBvb21fd2FpdF9tZW1jZykgJiYKKwkgICAgIW1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChvb21fd2FpdF9tZW1jZywgd2FrZV9tZW1jZykpCiAJCXJldHVybiAwOwogCXJldHVybiBhdXRvcmVtb3ZlX3dha2VfZnVuY3Rpb24od2FpdCwgbW9kZSwgc3luYywgYXJnKTsKIH0KQEAgLTIyMjgsMjYgKzIwMTgsMjMgQEAKIAkJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gTlVMTDsKLQotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwogYWdhaW46Ci0JbWVtY2cgPSBwYy0+bWVtX2Nncm91cDsKLQlpZiAodW5saWtlbHkoIW1lbWNnIHx8ICFQYWdlQ2dyb3VwVXNlZChwYykpKQorCW1lbWNnID0gcGFnZS0+bWVtX2Nncm91cDsKKwlpZiAodW5saWtlbHkoIW1lbWNnKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkqbG9ja2VkID0gZmFsc2U7CiAJaWYgKGF0b21pY19yZWFkKCZtZW1jZy0+bW92aW5nX2FjY291bnQpIDw9IDApCiAJCXJldHVybiBtZW1jZzsKIAotCW1vdmVfbG9ja19tZW1fY2dyb3VwKG1lbWNnLCBmbGFncyk7Ci0JaWYgKG1lbWNnICE9IHBjLT5tZW1fY2dyb3VwIHx8ICFQYWdlQ2dyb3VwVXNlZChwYykpIHsKLQkJbW92ZV91bmxvY2tfbWVtX2Nncm91cChtZW1jZywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZtZW1jZy0+bW92ZV9sb2NrLCAqZmxhZ3MpOworCWlmIChtZW1jZyAhPSBwYWdlLT5tZW1fY2dyb3VwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1lbWNnLT5tb3ZlX2xvY2ssICpmbGFncyk7CiAJCWdvdG8gYWdhaW47CiAJfQogCSpsb2NrZWQgPSB0cnVlOwpAQCAtMjI2MSwxMSArMjA0OCwxMSBAQAogICogQGxvY2tlZDogdmFsdWUgcmVjZWl2ZWQgZnJvbSBtZW1fY2dyb3VwX2JlZ2luX3BhZ2Vfc3RhdCgpCiAgKiBAZmxhZ3M6IHZhbHVlIHJlY2VpdmVkIGZyb20gbWVtX2Nncm91cF9iZWdpbl9wYWdlX3N0YXQoKQogICovCi12b2lkIG1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3ZvaWQgbWVtX2Nncm91cF9lbmRfcGFnZV9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7Ci0JaWYgKG1lbWNnICYmIGxvY2tlZCkKLQkJbW92ZV91bmxvY2tfbWVtX2Nncm91cChtZW1jZywgJmZsYWdzKTsKKwlpZiAobWVtY2cgJiYgKmxvY2tlZCkKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWVtY2ctPm1vdmVfbG9jaywgKmZsYWdzKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtMjMxNiwzMyArMjEwMywzMiBAQAogc3RhdGljIGJvb2wgY29uc3VtZV9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jazsKLQlib29sIHJldCA9IHRydWU7CisJYm9vbCByZXQgPSBmYWxzZTsKIAogCWlmIChucl9wYWdlcyA+IENIQVJHRV9CQVRDSCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gcmV0OwogCiAJc3RvY2sgPSAmZ2V0X2NwdV92YXIobWVtY2dfc3RvY2spOwotCWlmIChtZW1jZyA9PSBzdG9jay0+Y2FjaGVkICYmIHN0b2NrLT5ucl9wYWdlcyA+PSBucl9wYWdlcykKKwlpZiAobWVtY2cgPT0gc3RvY2stPmNhY2hlZCAmJiBzdG9jay0+bnJfcGFnZXMgPj0gbnJfcGFnZXMpIHsKIAkJc3RvY2stPm5yX3BhZ2VzIC09IG5yX3BhZ2VzOwotCWVsc2UgLyogbmVlZCB0byBjYWxsIHJlc19jb3VudGVyX2NoYXJnZSAqLwotCQlyZXQgPSBmYWxzZTsKKwkJcmV0ID0gdHJ1ZTsKKwl9CiAJcHV0X2NwdV92YXIobWVtY2dfc3RvY2spOwogCXJldHVybiByZXQ7CiB9CiAKIC8qCi0gKiBSZXR1cm5zIHN0b2NrcyBjYWNoZWQgaW4gcGVyY3B1IHRvIHJlc19jb3VudGVyIGFuZCByZXNldCBjYWNoZWQgaW5mb3JtYXRpb24uCisgKiBSZXR1cm5zIHN0b2NrcyBjYWNoZWQgaW4gcGVyY3B1IGFuZCByZXNldCBjYWNoZWQgaW5mb3JtYXRpb24uCiAgKi8KIHN0YXRpYyB2b2lkIGRyYWluX3N0b2NrKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICpvbGQgPSBzdG9jay0+Y2FjaGVkOwogCiAJaWYgKHN0b2NrLT5ucl9wYWdlcykgewotCQl1bnNpZ25lZCBsb25nIGJ5dGVzID0gc3RvY2stPm5yX3BhZ2VzICogUEFHRV9TSVpFOwotCi0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZvbGQtPnJlcywgYnl0ZXMpOworCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJm9sZC0+bWVtb3J5LCBzdG9jay0+bnJfcGFnZXMpOwogCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm9sZC0+bWVtc3csIGJ5dGVzKTsKKwkJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmb2xkLT5tZW1zdywgc3RvY2stPm5yX3BhZ2VzKTsKKwkJY3NzX3B1dF9tYW55KCZvbGQtPmNzcywgc3RvY2stPm5yX3BhZ2VzKTsKIAkJc3RvY2stPm5yX3BhZ2VzID0gMDsKIAl9CiAJc3RvY2stPmNhY2hlZCA9IE5VTEw7CkBAIC0yMzcxLDcgKzIxNTcsNyBAQAogfQogCiAvKgotICogQ2FjaGUgY2hhcmdlcyh2YWwpIHdoaWNoIGlzIGZyb20gcmVzX2NvdW50ZXIsIHRvIGxvY2FsIHBlcl9jcHUgYXJlYS4KKyAqIENhY2hlIGNoYXJnZXModmFsKSB0byBsb2NhbCBwZXJfY3B1IGFyZWEuCiAgKiBUaGlzIHdpbGwgYmUgY29uc3VtZWQgYnkgY29uc3VtZV9zdG9jaygpIGZ1bmN0aW9uLCBsYXRlci4KICAqLwogc3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQpAQCAtMjM4OCwxMyArMjE3NCwxNSBAQAogCiAvKgogICogRHJhaW5zIGFsbCBwZXItQ1BVIGNoYXJnZSBjYWNoZXMgZm9yIGdpdmVuIHJvb3RfbWVtY2cgcmVzcC4gc3VidHJlZQotICogb2YgdGhlIGhpZXJhcmNoeSB1bmRlciBpdC4gc3luYyBmbGFnIHNheXMgd2hldGhlciB3ZSBzaG91bGQgYmxvY2sKLSAqIHVudGlsIHRoZSB3b3JrIGlzIGRvbmUuCisgKiBvZiB0aGUgaGllcmFyY2h5IHVuZGVyIGl0LgogICovCi1zdGF0aWMgdm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csIGJvb2wgc3luYykKK3N0YXRpYyB2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZykKIHsKIAlpbnQgY3B1LCBjdXJjcHU7CiAKKwkvKiBJZiBzb21lb25lJ3MgYWxyZWFkeSBkcmFpbmluZywgYXZvaWQgYWRkaW5nIHJ1bm5pbmcgbW9yZSB3b3JrZXJzLiAqLworCWlmICghbXV0ZXhfdHJ5bG9jaygmcGVyY3B1X2NoYXJnZV9tdXRleCkpCisJCXJldHVybjsKIAkvKiBOb3RpZnkgb3RoZXIgY3B1cyB0aGF0IHN5c3RlbS13aWRlICJkcmFpbiIgaXMgcnVubmluZyAqLwogCWdldF9vbmxpbmVfY3B1cygpOwogCWN1cmNwdSA9IGdldF9jcHUoKTsKQEAgLTI0MDUsNyArMjE5Myw3IEBACiAJCW1lbWNnID0gc3RvY2stPmNhY2hlZDsKIAkJaWYgKCFtZW1jZyB8fCAhc3RvY2stPm5yX3BhZ2VzKQogCQkJY29udGludWU7Ci0JCWlmICghbWVtX2Nncm91cF9zYW1lX29yX3N1YnRyZWUocm9vdF9tZW1jZywgbWVtY2cpKQorCQlpZiAoIW1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChtZW1jZywgcm9vdF9tZW1jZykpCiAJCQljb250aW51ZTsKIAkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsICZzdG9jay0+ZmxhZ3MpKSB7CiAJCQlpZiAoY3B1ID09IGN1cmNwdSkKQEAgLTI0MTUsNDIgKzIyMDMsNyBAQAogCQl9CiAJfQogCXB1dF9jcHUoKTsKLQotCWlmICghc3luYykKLQkJZ290byBvdXQ7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayA9ICZwZXJfY3B1KG1lbWNnX3N0b2NrLCBjcHUpOwotCQlpZiAodGVzdF9iaXQoRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRSwgJnN0b2NrLT5mbGFncykpCi0JCQlmbHVzaF93b3JrKCZzdG9jay0+d29yayk7Ci0JfQotb3V0OgogCXB1dF9vbmxpbmVfY3B1cygpOwotfQotCi0vKgotICogVHJpZXMgdG8gZHJhaW4gc3RvY2tlZCBjaGFyZ2VzIGluIG90aGVyIGNwdXMuIFRoaXMgZnVuY3Rpb24gaXMgYXN5bmNocm9ub3VzCi0gKiBhbmQganVzdCBwdXQgYSB3b3JrIHBlciBjcHUgZm9yIGRyYWluaW5nIGxvY2FseSBvbiBlYWNoIGNwdS4gQ2FsbGVyIGNhbgotICogZXhwZWN0cyBzb21lIGNoYXJnZXMgd2lsbCBiZSBiYWNrIHRvIHJlc19jb3VudGVyIGxhdGVyIGJ1dCBjYW5ub3Qgd2FpdCBmb3IKLSAqIGl0LgotICovCi1zdGF0aWMgdm9pZCBkcmFpbl9hbGxfc3RvY2tfYXN5bmMoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpCi17Ci0JLyoKLQkgKiBJZiBzb21lb25lIGNhbGxzIGRyYWluaW5nLCBhdm9pZCBhZGRpbmcgbW9yZSBrd29ya2VyIHJ1bnMuCi0JICovCi0JaWYgKCFtdXRleF90cnlsb2NrKCZwZXJjcHVfY2hhcmdlX211dGV4KSkKLQkJcmV0dXJuOwotCWRyYWluX2FsbF9zdG9jayhyb290X21lbWNnLCBmYWxzZSk7Ci0JbXV0ZXhfdW5sb2NrKCZwZXJjcHVfY2hhcmdlX211dGV4KTsKLX0KLQotLyogVGhpcyBpcyBhIHN5bmNocm9ub3VzIGRyYWluIGludGVyZmFjZS4gKi8KLXN0YXRpYyB2b2lkIGRyYWluX2FsbF9zdG9ja19zeW5jKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKQotewotCS8qIGNhbGxlZCB3aGVuIGZvcmNlX2VtcHR5IGlzIGNhbGxlZCAqLwotCW11dGV4X2xvY2soJnBlcmNwdV9jaGFyZ2VfbXV0ZXgpOwotCWRyYWluX2FsbF9zdG9jayhyb290X21lbWNnLCB0cnVlKTsKIAltdXRleF91bmxvY2soJnBlcmNwdV9jaGFyZ2VfbXV0ZXgpOwogfQogCkBAIC0yNTA2LDkgKzIyNTksOCBAQAogCXVuc2lnbmVkIGludCBiYXRjaCA9IG1heChDSEFSR0VfQkFUQ0gsIG5yX3BhZ2VzKTsKIAlpbnQgbnJfcmV0cmllcyA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fb3Zlcl9saW1pdDsKLQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzOworCXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7CiAJdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNpemU7CiAJYm9vbCBtYXlfc3dhcCA9IHRydWU7CiAJYm9vbCBkcmFpbmVkID0gZmFsc2U7CiAJaW50IHJldCA9IDA7CkBAIC0yNTE5LDE2ICsyMjcxLDE1IEBACiAJaWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSkKIAkJZ290byBkb25lOwogCi0Jc2l6ZSA9IGJhdGNoICogUEFHRV9TSVpFOwogCWlmICghZG9fc3dhcF9hY2NvdW50IHx8Ci0JICAgICFyZXNfY291bnRlcl9jaGFyZ2UoJm1lbWNnLT5tZW1zdywgc2l6ZSwgJmZhaWxfcmVzKSkgewotCQlpZiAoIXJlc19jb3VudGVyX2NoYXJnZSgmbWVtY2ctPnJlcywgc2l6ZSwgJmZhaWxfcmVzKSkKKwkgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKCZtZW1jZy0+bWVtc3csIGJhdGNoLCAmY291bnRlcikpIHsKKwkJaWYgKCFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgmbWVtY2ctPm1lbW9yeSwgYmF0Y2gsICZjb3VudGVyKSkKIAkJCWdvdG8gZG9uZV9yZXN0b2NrOwogCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1zdywgc2l6ZSk7Ci0JCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGZhaWxfcmVzLCByZXMpOworCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csIGJhdGNoKTsKKwkJbWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpOwogCX0gZWxzZSB7Ci0JCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGZhaWxfcmVzLCBtZW1zdyk7CisJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtc3cpOwogCQltYXlfc3dhcCA9IGZhbHNlOwogCX0KIApAQCAtMjU2MSw3ICsyMzEyLDcgQEAKIAkJZ290byByZXRyeTsKIAogCWlmICghZHJhaW5lZCkgewotCQlkcmFpbl9hbGxfc3RvY2tfYXN5bmMobWVtX292ZXJfbGltaXQpOworCQlkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpOwogCQlkcmFpbmVkID0gdHJ1ZTsKIAkJZ290byByZXRyeTsKIAl9CkBAIC0yNjAzLDYgKzIzNTQsNyBAQAogCXJldHVybiAtRUlOVFI7CiAKIGRvbmVfcmVzdG9jazoKKwljc3NfZ2V0X21hbnkoJm1lbWNnLT5jc3MsIGJhdGNoKTsKIAlpZiAoYmF0Y2ggPiBucl9wYWdlcykKIAkJcmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTsKIGRvbmU6CkBAIC0yNjExLDMyICsyMzYzLDE0IEBACiAKIHN0YXRpYyB2b2lkIGNhbmNlbF9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCiB7Ci0JdW5zaWduZWQgbG9uZyBieXRlcyA9IG5yX3BhZ2VzICogUEFHRV9TSVpFOwotCiAJaWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpCiAJCXJldHVybjsKIAotCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+cmVzLCBieXRlcyk7CisJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtb3J5LCBucl9wYWdlcyk7CiAJaWYgKGRvX3N3YXBfYWNjb3VudCkKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1zdywgYnl0ZXMpOwotfQorCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1zdywgbnJfcGFnZXMpOwogCi0vKgotICogQ2FuY2VsIGNocmFnZXMgaW4gdGhpcyBjZ3JvdXAuLi4uZG9lc24ndCBwcm9wYWdhdGUgdG8gcGFyZW50IGNncm91cC4KLSAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gbW92aW5nIHVzYWdlIHRvIHBhcmVudCBjZ3JvdXAuCi0gKi8KLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9jYW5jZWxfbG9jYWxfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJdW5zaWduZWQgaW50IG5yX3BhZ2VzKQotewotCXVuc2lnbmVkIGxvbmcgYnl0ZXMgPSBucl9wYWdlcyAqIFBBR0VfU0laRTsKLQotCWlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQotCQlyZXR1cm47Ci0KLQlyZXNfY291bnRlcl91bmNoYXJnZV91bnRpbCgmbWVtY2ctPnJlcywgbWVtY2ctPnJlcy5wYXJlbnQsIGJ5dGVzKTsKLQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQlyZXNfY291bnRlcl91bmNoYXJnZV91bnRpbCgmbWVtY2ctPm1lbXN3LAotCQkJCQkJbWVtY2ctPm1lbXN3LnBhcmVudCwgYnl0ZXMpOworCWNzc19wdXRfbWFueSgmbWVtY2ctPmNzcywgbnJfcGFnZXMpOwogfQogCiAvKgpAQCAtMjY2NSwxNyArMjM5OSwxNSBAQAogICovCiBzdHJ1Y3QgbWVtX2Nncm91cCAqdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMOwotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXVuc2lnbmVkIHNob3J0IGlkOwogCXN3cF9lbnRyeV90IGVudDsKIAogCVZNX0JVR19PTl9QQUdFKCFQYWdlTG9ja2VkKHBhZ2UpLCBwYWdlKTsKIAotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCWlmIChQYWdlQ2dyb3VwVXNlZChwYykpIHsKLQkJbWVtY2cgPSBwYy0+bWVtX2Nncm91cDsKLQkJaWYgKG1lbWNnICYmICFjc3NfdHJ5Z2V0X29ubGluZSgmbWVtY2ctPmNzcykpCisJbWVtY2cgPSBwYWdlLT5tZW1fY2dyb3VwOworCWlmIChtZW1jZykgeworCQlpZiAoIWNzc190cnlnZXRfb25saW5lKCZtZW1jZy0+Y3NzKSkKIAkJCW1lbWNnID0gTlVMTDsKIAl9IGVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKIAkJZW50LnZhbCA9IHBhZ2VfcHJpdmF0ZShwYWdlKTsKQEAgLTI3MjMsMTQgKzI0NTUsOSBAQAogc3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJICBib29sIGxydWNhcmUpCiB7Ci0Jc3RydWN0IHBhZ2VfY2dyb3VwICpwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKIAlpbnQgaXNvbGF0ZWQ7CiAKLQlWTV9CVUdfT05fUEFHRShQYWdlQ2dyb3VwVXNlZChwYyksIHBhZ2UpOwotCS8qCi0JICogd2UgZG9uJ3QgbmVlZCBwYWdlX2Nncm91cF9sb2NrIGFib3V0IHRhaWwgcGFnZXMsIGJlY2FzZSB0aGV5IGFyZSBub3QKLQkgKiBhY2Nlc3NlZCBieSBhbnkgb3RoZXIgY29udGV4dCBhdCB0aGlzIHBvaW50LgotCSAqLworCVZNX0JVR19PTl9QQUdFKHBhZ2UtPm1lbV9jZ3JvdXAsIHBhZ2UpOwogCiAJLyoKIAkgKiBJbiBzb21lIGNhc2VzLCBTd2FwQ2FjaGUgYW5kIEZVU0Uoc3BsaWNlX2J1Zi0+cmFkaXh0cmVlKSwgdGhlIHBhZ2UKQEAgLTI3NDEsNyArMjQ2OCw3IEBACiAKIAkvKgogCSAqIE5vYm9keSBzaG91bGQgYmUgY2hhbmdpbmcgb3Igc2VyaW91c2x5IGxvb2tpbmcgYXQKLQkgKiBwYy0+bWVtX2Nncm91cCBhbmQgcGMtPmZsYWdzIGF0IHRoaXMgcG9pbnQ6CisJICogcGFnZS0+bWVtX2Nncm91cCBhdCB0aGlzIHBvaW50OgogCSAqCiAJICogLSB0aGUgcGFnZSBpcyB1bmNoYXJnZWQKIAkgKgpAQCAtMjc1MywxNSArMjQ4MCwxMiBAQAogCSAqIC0gYSBwYWdlIGNhY2hlIGluc2VydGlvbiwgYSBzd2FwaW4gZmF1bHQsIG9yIGEgbWlncmF0aW9uCiAJICogICBoYXZlIHRoZSBwYWdlIGxvY2tlZAogCSAqLwotCXBjLT5tZW1fY2dyb3VwID0gbWVtY2c7Ci0JcGMtPmZsYWdzID0gUENHX1VTRUQgfCBQQ0dfTUVNIHwgKGRvX3N3YXBfYWNjb3VudCA/IFBDR19NRU1TVyA6IDApOworCXBhZ2UtPm1lbV9jZ3JvdXAgPSBtZW1jZzsKIAogCWlmIChscnVjYXJlKQogCQl1bmxvY2tfcGFnZV9scnUocGFnZSwgaXNvbGF0ZWQpOwogfQogCi1zdGF0aWMgREVGSU5FX01VVEVYKHNldF9saW1pdF9tdXRleCk7Ci0KICNpZmRlZiBDT05GSUdfTUVNQ0dfS01FTQogLyoKICAqIFRoZSBtZW1jZ19zbGFiX211dGV4IGlzIGhlbGQgd2hlbmV2ZXIgYSBwZXIgbWVtY2cga21lbSBjYWNoZSBpcyBjcmVhdGVkIG9yCkBAIC0yNzY5LDggKzI0OTMsNiBAQAogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKG1lbWNnX3NsYWJfbXV0ZXgpOwogCi1zdGF0aWMgREVGSU5FX01VVEVYKGFjdGl2YXRlX2ttZW1fbXV0ZXgpOwotCiAvKgogICogVGhpcyBpcyBhIGJpdCBjdW1iZXJzb21lLCBidXQgaXQgaXMgcmFyZWx5IHVzZWQgYW5kIGF2b2lkcyBhIGJhY2twb2ludGVyCiAgKiBpbiB0aGUgbWVtY2dfY2FjaGVfcGFyYW1zIHN0cnVjdC4KQEAgLTI3ODQsMzYgKzI1MDYsMTcgQEAKIAlyZXR1cm4gY2FjaGVfZnJvbV9tZW1jZ19pZHgoY2FjaGVwLCBtZW1jZ19jYWNoZV9pZChwLT5tZW1jZykpOwogfQogCi0jaWZkZWYgQ09ORklHX1NMQUJJTkZPCi1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc2xhYmluZm9fcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCitzdGF0aWMgaW50IG1lbWNnX2NoYXJnZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwLAorCQkJICAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Moc2VxX2NzcyhtKSk7Ci0Jc3RydWN0IG1lbWNnX2NhY2hlX3BhcmFtcyAqcGFyYW1zOwotCi0JaWYgKCFtZW1jZ19rbWVtX2lzX2FjdGl2ZShtZW1jZykpCi0JCXJldHVybiAtRUlPOwotCi0JcHJpbnRfc2xhYmluZm9faGVhZGVyKG0pOwotCi0JbXV0ZXhfbG9jaygmbWVtY2dfc2xhYl9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwYXJhbXMsICZtZW1jZy0+bWVtY2dfc2xhYl9jYWNoZXMsIGxpc3QpCi0JCWNhY2hlX3Nob3cobWVtY2dfcGFyYW1zX3RvX2NhY2hlKHBhcmFtcyksIG0pOwotCW11dGV4X3VubG9jaygmbWVtY2dfc2xhYl9tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IG1lbWNnX2NoYXJnZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwLCB1NjQgc2l6ZSkKLXsKLQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzOworCXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7CiAJaW50IHJldCA9IDA7CiAKLQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbWNnLT5rbWVtLCBzaXplLCAmZmFpbF9yZXMpOwotCWlmIChyZXQpCisJcmV0ID0gcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJm1lbWNnLT5rbWVtLCBucl9wYWdlcywgJmNvdW50ZXIpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gdHJ5X2NoYXJnZShtZW1jZywgZ2ZwLCBzaXplID4+IFBBR0VfU0hJRlQpOworCXJldCA9IHRyeV9jaGFyZ2UobWVtY2csIGdmcCwgbnJfcGFnZXMpOwogCWlmIChyZXQgPT0gLUVJTlRSKSAgewogCQkvKgogCQkgKiB0cnlfY2hhcmdlKCkgY2hvc2UgdG8gYnlwYXNzIHRvIHJvb3QgZHVlIHRvIE9PTSBraWxsIG9yCkBAIC0yODMwLDM3ICsyNTMzLDI3IEBACiAJCSAqIHdoZW4gdGhlIGFsbG9jYXRpb24gdHJpZ2dlcnMgc2hvdWxkIGhhdmUgYmVlbiBhbHJlYWR5CiAJCSAqIGRpcmVjdGVkIHRvIHRoZSByb290IGNncm91cCBpbiBtZW1jb250cm9sLmgKIAkJICovCi0JCXJlc19jb3VudGVyX2NoYXJnZV9ub2ZhaWwoJm1lbWNnLT5yZXMsIHNpemUsICZmYWlsX3Jlcyk7CisJCXBhZ2VfY291bnRlcl9jaGFyZ2UoJm1lbWNnLT5tZW1vcnksIG5yX3BhZ2VzKTsKIAkJaWYgKGRvX3N3YXBfYWNjb3VudCkKLQkJCXJlc19jb3VudGVyX2NoYXJnZV9ub2ZhaWwoJm1lbWNnLT5tZW1zdywgc2l6ZSwKLQkJCQkJCSAgJmZhaWxfcmVzKTsKKwkJCXBhZ2VfY291bnRlcl9jaGFyZ2UoJm1lbWNnLT5tZW1zdywgbnJfcGFnZXMpOworCQljc3NfZ2V0X21hbnkoJm1lbWNnLT5jc3MsIG5yX3BhZ2VzKTsKIAkJcmV0ID0gMDsKIAl9IGVsc2UgaWYgKHJldCkKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5rbWVtLCBzaXplKTsKKwkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+a21lbSwgbnJfcGFnZXMpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgbWVtY2dfdW5jaGFyZ2Vfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHU2NCBzaXplKQorc3RhdGljIHZvaWQgbWVtY2dfdW5jaGFyZ2Vfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCisJCQkJdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIHsKLQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPnJlcywgc2l6ZSk7CisJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtb3J5LCBucl9wYWdlcyk7CiAJaWYgKGRvX3N3YXBfYWNjb3VudCkKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1zdywgc2l6ZSk7CisJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBucl9wYWdlcyk7CiAKLQkvKiBOb3QgZG93biB0byAwICovCi0JaWYgKHJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+a21lbSwgc2l6ZSkpCi0JCXJldHVybjsKKwlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5rbWVtLCBucl9wYWdlcyk7CiAKLQkvKgotCSAqIFJlbGVhc2VzIGEgcmVmZXJlbmNlIHRha2VuIGluIGttZW1fY2dyb3VwX2Nzc19vZmZsaW5lIGluIGNhc2UKLQkgKiB0aGlzIGxhc3QgdW5jaGFyZ2UgaXMgcmFjaW5nIHdpdGggdGhlIG9mZmxpbmluZyBjb2RlIG9yIGl0IGlzCi0JICogb3V0bGl2aW5nIHRoZSBtZW1jZyBleGlzdGVuY2UuCi0JICoKLQkgKiBUaGUgbWVtb3J5IGJhcnJpZXIgaW1wb3NlZCBieSB0ZXN0JmNsZWFyIGlzIHBhaXJlZCB3aXRoIHRoZQotCSAqIGV4cGxpY2l0IG9uZSBpbiBtZW1jZ19rbWVtX21hcmtfZGVhZCgpLgotCSAqLwotCWlmIChtZW1jZ19rbWVtX3Rlc3RfYW5kX2NsZWFyX2RlYWQobWVtY2cpKQotCQljc3NfcHV0KCZtZW1jZy0+Y3NzKTsKKwljc3NfcHV0X21hbnkoJm1lbWNnLT5jc3MsIG5yX3BhZ2VzKTsKIH0KIAogLyoKQEAgLTMxMjQsMTkgKzI4MTcsMjEgQEAKIAogaW50IF9fbWVtY2dfY2hhcmdlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpCiB7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzID0gMSA8PCBvcmRlcjsKIAlpbnQgcmVzOwogCi0JcmVzID0gbWVtY2dfY2hhcmdlX2ttZW0oY2FjaGVwLT5tZW1jZ19wYXJhbXMtPm1lbWNnLCBnZnAsCi0JCQkJUEFHRV9TSVpFIDw8IG9yZGVyKTsKKwlyZXMgPSBtZW1jZ19jaGFyZ2Vfa21lbShjYWNoZXAtPm1lbWNnX3BhcmFtcy0+bWVtY2csIGdmcCwgbnJfcGFnZXMpOwogCWlmICghcmVzKQotCQlhdG9taWNfYWRkKDEgPDwgb3JkZXIsICZjYWNoZXAtPm1lbWNnX3BhcmFtcy0+bnJfcGFnZXMpOworCQlhdG9taWNfYWRkKG5yX3BhZ2VzLCAmY2FjaGVwLT5tZW1jZ19wYXJhbXMtPm5yX3BhZ2VzKTsKIAlyZXR1cm4gcmVzOwogfQogCiB2b2lkIF9fbWVtY2dfdW5jaGFyZ2Vfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBpbnQgb3JkZXIpCiB7Ci0JbWVtY2dfdW5jaGFyZ2Vfa21lbShjYWNoZXAtPm1lbWNnX3BhcmFtcy0+bWVtY2csIFBBR0VfU0laRSA8PCBvcmRlcik7Ci0JYXRvbWljX3N1YigxIDw8IG9yZGVyLCAmY2FjaGVwLT5tZW1jZ19wYXJhbXMtPm5yX3BhZ2VzKTsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSAxIDw8IG9yZGVyOworCisJbWVtY2dfdW5jaGFyZ2Vfa21lbShjYWNoZXAtPm1lbWNnX3BhcmFtcy0+bWVtY2csIG5yX3BhZ2VzKTsKKwlhdG9taWNfc3ViKG5yX3BhZ2VzLCAmY2FjaGVwLT5tZW1jZ19wYXJhbXMtPm5yX3BhZ2VzKTsKIH0KIAogLyoKQEAgLTMyNTcsNyArMjk1Miw3IEBACiAJCXJldHVybiB0cnVlOwogCX0KIAotCXJldCA9IG1lbWNnX2NoYXJnZV9rbWVtKG1lbWNnLCBnZnAsIFBBR0VfU0laRSA8PCBvcmRlcik7CisJcmV0ID0gbWVtY2dfY2hhcmdlX2ttZW0obWVtY2csIGdmcCwgMSA8PCBvcmRlcik7CiAJaWYgKCFyZXQpCiAJCSpfbWVtY2cgPSBtZW1jZzsKIApAQCAtMzI2OCw0NiArMjk2MywyNyBAQAogdm9pZCBfX21lbWNnX2ttZW1fY29tbWl0X2NoYXJnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJICAgICAgaW50IG9yZGVyKQogewotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7Ci0KIAlWTV9CVUdfT04obWVtX2Nncm91cF9pc19yb290KG1lbWNnKSk7CiAKIAkvKiBUaGUgcGFnZSBhbGxvY2F0aW9uIGZhaWxlZC4gUmV2ZXJ0ICovCiAJaWYgKCFwYWdlKSB7Ci0JCW1lbWNnX3VuY2hhcmdlX2ttZW0obWVtY2csIFBBR0VfU0laRSA8PCBvcmRlcik7CisJCW1lbWNnX3VuY2hhcmdlX2ttZW0obWVtY2csIDEgPDwgb3JkZXIpOwogCQlyZXR1cm47CiAJfQotCS8qCi0JICogVGhlIHBhZ2UgaXMgZnJlc2hseSBhbGxvY2F0ZWQgYW5kIG5vdCB2aXNpYmxlIHRvIGFueQotCSAqIG91dHNpZGUgY2FsbGVycyB5ZXQuICBTZXQgdXAgcGMgbm9uLWF0b21pY2FsbHkuCi0JICovCi0JcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JcGMtPm1lbV9jZ3JvdXAgPSBtZW1jZzsKLQlwYy0+ZmxhZ3MgPSBQQ0dfVVNFRDsKKwlwYWdlLT5tZW1fY2dyb3VwID0gbWVtY2c7CiB9CiAKIHZvaWQgX19tZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpCiB7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKLQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHBhZ2UtPm1lbV9jZ3JvdXA7CiAKLQotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCWlmICghUGFnZUNncm91cFVzZWQocGMpKQotCQlyZXR1cm47Ci0KLQltZW1jZyA9IHBjLT5tZW1fY2dyb3VwOwotCXBjLT5mbGFncyA9IDA7Ci0KLQkvKgotCSAqIFdlIHRydXN0IHRoYXQgb25seSBpZiB0aGVyZSBpcyBhIG1lbWNnIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFnZSwgaXQKLQkgKiBpcyBhIHZhbGlkIGFsbG9jYXRpb24KLQkgKi8KIAlpZiAoIW1lbWNnKQogCQlyZXR1cm47CiAKIAlWTV9CVUdfT05fUEFHRShtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpLCBwYWdlKTsKLQltZW1jZ191bmNoYXJnZV9rbWVtKG1lbWNnLCBQQUdFX1NJWkUgPDwgb3JkZXIpOworCisJbWVtY2dfdW5jaGFyZ2Vfa21lbShtZW1jZywgMSA8PCBvcmRlcik7CisJcGFnZS0+bWVtX2Nncm91cCA9IE5VTEw7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX3VucmVnaXN0ZXJfYWxsX2NhY2hlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCkBAIC0zMzI1LDIxICszMDAxLDE1IEBACiAgKi8KIHZvaWQgbWVtX2Nncm91cF9zcGxpdF9odWdlX2ZpeHVwKHN0cnVjdCBwYWdlICpoZWFkKQogewotCXN0cnVjdCBwYWdlX2Nncm91cCAqaGVhZF9wYyA9IGxvb2t1cF9wYWdlX2Nncm91cChoZWFkKTsKLQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlpbnQgaTsKIAogCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCiAJCXJldHVybjsKIAotCW1lbWNnID0gaGVhZF9wYy0+bWVtX2Nncm91cDsKLQlmb3IgKGkgPSAxOyBpIDwgSFBBR0VfUE1EX05SOyBpKyspIHsKLQkJcGMgPSBoZWFkX3BjICsgaTsKLQkJcGMtPm1lbV9jZ3JvdXAgPSBtZW1jZzsKLQkJcGMtPmZsYWdzID0gaGVhZF9wYy0+ZmxhZ3M7Ci0JfQotCV9fdGhpc19jcHVfc3ViKG1lbWNnLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfUlNTX0hVR0VdLAorCWZvciAoaSA9IDE7IGkgPCBIUEFHRV9QTURfTlI7IGkrKykKKwkJaGVhZFtpXS5tZW1fY2dyb3VwID0gaGVhZC0+bWVtX2Nncm91cDsKKworCV9fdGhpc19jcHVfc3ViKGhlYWQtPm1lbV9jZ3JvdXAtPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9SU1NfSFVHRV0sCiAJCSAgICAgICBIUEFHRV9QTURfTlIpOwogfQogI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwpAQCAtMzM0OCw3ICszMDE4LDYgQEAKICAqIG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50IC0gbW92ZSBhY2NvdW50IG9mIHRoZSBwYWdlCiAgKiBAcGFnZTogdGhlIHBhZ2UKICAqIEBucl9wYWdlczogbnVtYmVyIG9mIHJlZ3VsYXIgcGFnZXMgKD4xIGZvciBodWdlIHBhZ2VzKQotICogQHBjOglwYWdlX2Nncm91cCBvZiB0aGUgcGFnZS4KICAqIEBmcm9tOiBtZW1fY2dyb3VwIHdoaWNoIHRoZSBwYWdlIGlzIG1vdmVkIGZyb20uCiAgKiBAdG86CW1lbV9jZ3JvdXAgd2hpY2ggdGhlIHBhZ2UgaXMgbW92ZWQgdG8uIEBmcm9tICE9IEB0by4KICAqCkBAIC0zMzYxLDcgKzMwMzAsNiBAQAogICovCiBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCSAgIHVuc2lnbmVkIGludCBucl9wYWdlcywKLQkJCQkgICBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLAogCQkJCSAgIHN0cnVjdCBtZW1fY2dyb3VwICpmcm9tLAogCQkJCSAgIHN0cnVjdCBtZW1fY2dyb3VwICp0bykKIHsKQEAgLTMzODEsNyArMzA0OSw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyoKLQkgKiBQcmV2ZW50IG1lbV9jZ3JvdXBfbWlncmF0ZSgpIGZyb20gbG9va2luZyBhdCBwYy0+bWVtX2Nncm91cAorCSAqIFByZXZlbnQgbWVtX2Nncm91cF9taWdyYXRlKCkgZnJvbSBsb29raW5nIGF0IHBhZ2UtPm1lbV9jZ3JvdXAKIAkgKiBvZiBpdHMgc291cmNlIHBhZ2Ugd2hpbGUgd2UgY2hhbmdlIGl0OiBwYWdlIG1pZ3JhdGlvbiB0YWtlcwogCSAqIGJvdGggcGFnZXMgb2ZmIHRoZSBMUlUsIGJ1dCBwYWdlIGNhY2hlIHJlcGxhY2VtZW50IGRvZXNuJ3QuCiAJICovCkBAIC0zMzg5LDEwICszMDU3LDEwIEBACiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gLUVJTlZBTDsKLQlpZiAoIVBhZ2VDZ3JvdXBVc2VkKHBjKSB8fCBwYy0+bWVtX2Nncm91cCAhPSBmcm9tKQorCWlmIChwYWdlLT5tZW1fY2dyb3VwICE9IGZyb20pCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCW1vdmVfbG9ja19tZW1fY2dyb3VwKGZyb20sICZmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmZyb20tPm1vdmVfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFQYWdlQW5vbihwYWdlKSAmJiBwYWdlX21hcHBlZChwYWdlKSkgewogCQlfX3RoaXNfY3B1X3N1Yihmcm9tLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRURdLApAQCAtMzQwOSwxNCArMzA3NywxNSBAQAogCX0KIAogCS8qCi0JICogSXQgaXMgc2FmZSB0byBjaGFuZ2UgcGMtPm1lbV9jZ3JvdXAgaGVyZSBiZWNhdXNlIHRoZSBwYWdlCisJICogSXQgaXMgc2FmZSB0byBjaGFuZ2UgcGFnZS0+bWVtX2Nncm91cCBoZXJlIGJlY2F1c2UgdGhlIHBhZ2UKIAkgKiBpcyByZWZlcmVuY2VkLCBjaGFyZ2VkLCBhbmQgaXNvbGF0ZWQgLSB3ZSBjYW4ndCByYWNlIHdpdGgKIAkgKiB1bmNoYXJnaW5nLCBjaGFyZ2luZywgbWlncmF0aW9uLCBvciBMUlUgcHV0YmFjay4KIAkgKi8KIAogCS8qIGNhbGxlciBzaG91bGQgaGF2ZSBkb25lIGNzc19nZXQgKi8KLQlwYy0+bWVtX2Nncm91cCA9IHRvOwotCW1vdmVfdW5sb2NrX21lbV9jZ3JvdXAoZnJvbSwgJmZsYWdzKTsKKwlwYWdlLT5tZW1fY2dyb3VwID0gdG87CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnJvbS0+bW92ZV9sb2NrLCBmbGFncyk7CisKIAlyZXQgPSAwOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTM0MzEsNzIgKzMxMDAsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgotICogbWVtX2Nncm91cF9tb3ZlX3BhcmVudCAtIG1vdmVzIHBhZ2UgdG8gdGhlIHBhcmVudCBncm91cAotICogQHBhZ2U6IHRoZSBwYWdlIHRvIG1vdmUKLSAqIEBwYzogcGFnZV9jZ3JvdXAgb2YgdGhlIHBhZ2UKLSAqIEBjaGlsZDogcGFnZSdzIGNncm91cAotICoKLSAqIG1vdmUgY2hhcmdlcyB0byBpdHMgcGFyZW50IG9yIHRoZSByb290IGNncm91cCBpZiB0aGUgZ3JvdXAgaGFzIG5vCi0gKiBwYXJlbnQgKGFrYSB1c2VfaGllcmFyY2h5PT0wKS4KLSAqIEFsdGhvdWdoIHRoaXMgbWlnaHQgZmFpbCAoZ2V0X3BhZ2VfdW5sZXNzX3plcm8sIGlzb2xhdGVfbHJ1X3BhZ2Ugb3IKLSAqIG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50IGZhaWxzKSB0aGUgZmFpbHVyZSBpcyBhbHdheXMgdGVtcG9yYXJ5IGFuZAotICogaXQgc2lnbmFscyBhIHJhY2Ugd2l0aCBhIHBhZ2UgcmVtb3ZhbC91bmNoYXJnZSBvciBtaWdyYXRpb24uIEluIHRoZQotICogZmlyc3QgY2FzZSB0aGUgcGFnZSBpcyBvbiB0aGUgd2F5IG91dCBhbmQgaXQgd2lsbCB2YW5pc2ggZnJvbSB0aGUgTFJVCi0gKiBvbiB0aGUgbmV4dCBhdHRlbXB0IGFuZCB0aGUgY2FsbCBzaG91bGQgYmUgcmV0cmllZCBsYXRlci4KLSAqIElzb2xhdGlvbiBmcm9tIHRoZSBMUlUgZmFpbHMgb25seSBpZiBwYWdlIGhhcyBiZWVuIGlzb2xhdGVkIGZyb20KLSAqIHRoZSBMUlUgc2luY2Ugd2UgbG9va2VkIGF0IGl0IGFuZCB0aGF0IHVzdWFsbHkgbWVhbnMgZWl0aGVyIGdsb2JhbAotICogcmVjbGFpbSBvciBtaWdyYXRpb24gZ29pbmcgb24uIFRoZSBwYWdlIHdpbGwgZWl0aGVyIGdldCBiYWNrIHRvIHRoZQotICogTFJVIG9yIHZhbmlzaC4KLSAqIEZpbmFseSBtZW1fY2dyb3VwX21vdmVfYWNjb3VudCBmYWlscyBvbmx5IGlmIHRoZSBwYWdlIGdvdCB1bmNoYXJnZWQKLSAqICghUGFnZUNncm91cFVzZWQpIG9yIG1vdmVkIHRvIGEgZGlmZmVyZW50IGdyb3VwLiBUaGUgcGFnZSB3aWxsCi0gKiBkaXNhcHBlYXIgaW4gdGhlIG5leHQgYXR0ZW1wdC4KLSAqLwotc3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfcGFyZW50KHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCSAgc3RydWN0IHBhZ2VfY2dyb3VwICpwYywKLQkJCQkgIHN0cnVjdCBtZW1fY2dyb3VwICpjaGlsZCkKLXsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50OwotCXVuc2lnbmVkIGludCBucl9wYWdlczsKLQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKLQlpbnQgcmV0OwotCi0JVk1fQlVHX09OKG1lbV9jZ3JvdXBfaXNfcm9vdChjaGlsZCkpOwotCi0JcmV0ID0gLUVCVVNZOwotCWlmICghZ2V0X3BhZ2VfdW5sZXNzX3plcm8ocGFnZSkpCi0JCWdvdG8gb3V0OwotCWlmIChpc29sYXRlX2xydV9wYWdlKHBhZ2UpKQotCQlnb3RvIHB1dDsKLQotCW5yX3BhZ2VzID0gaHBhZ2VfbnJfcGFnZXMocGFnZSk7Ci0KLQlwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChjaGlsZCk7Ci0JLyoKLQkgKiBJZiBubyBwYXJlbnQsIG1vdmUgY2hhcmdlcyB0byByb290IGNncm91cC4KLQkgKi8KLQlpZiAoIXBhcmVudCkKLQkJcGFyZW50ID0gcm9vdF9tZW1fY2dyb3VwOwotCi0JaWYgKG5yX3BhZ2VzID4gMSkgewotCQlWTV9CVUdfT05fUEFHRSghUGFnZVRyYW5zSHVnZShwYWdlKSwgcGFnZSk7Ci0JCWZsYWdzID0gY29tcG91bmRfbG9ja19pcnFzYXZlKHBhZ2UpOwotCX0KLQotCXJldCA9IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBhZ2UsIG5yX3BhZ2VzLAotCQkJCXBjLCBjaGlsZCwgcGFyZW50KTsKLQlpZiAoIXJldCkKLQkJX19tZW1fY2dyb3VwX2NhbmNlbF9sb2NhbF9jaGFyZ2UoY2hpbGQsIG5yX3BhZ2VzKTsKLQotCWlmIChucl9wYWdlcyA+IDEpCi0JCWNvbXBvdW5kX3VubG9ja19pcnFyZXN0b3JlKHBhZ2UsIGZsYWdzKTsKLQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOwotcHV0OgotCXB1dF9wYWdlKHBhZ2UpOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KICNpZmRlZiBDT05GSUdfTUVNQ0dfU1dBUAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkgYm9vbCBjaGFyZ2UpCkBAIC0zNTE2LDcgKzMxMTksNyBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIG9uIGZhaWx1cmUuCiAgKgotICogVGhlIGNhbGxlciBtdXN0IGhhdmUgY2hhcmdlZCB0byBAdG8sIElPVywgY2FsbGVkIHJlc19jb3VudGVyX2NoYXJnZSgpIGFib3V0CisgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBjaGFyZ2VkIHRvIEB0bywgSU9XLCBjYWxsZWQgcGFnZV9jb3VudGVyX2NoYXJnZSgpIGFib3V0CiAgKiBib3RoIHJlcyBhbmQgbWVtc3csIGFuZCBjYWxsZWQgY3NzX2dldCgpLgogICovCiBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9zd2FwX2FjY291bnQoc3dwX2VudHJ5X3QgZW50cnksCkBAIC0zNTMyLDcgKzMxMzUsNyBAQAogCQltZW1fY2dyb3VwX3N3YXBfc3RhdGlzdGljcyh0bywgdHJ1ZSk7CiAJCS8qCiAJCSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0YXNrIG1pZ3JhdGlvbiBjb250ZXh0IG5vdy4KLQkJICogSXQgcG9zdHBvbmVzIHJlc19jb3VudGVyIGFuZCByZWZjb3VudCBoYW5kbGluZyB0aWxsIHRoZSBlbmQKKwkJICogSXQgcG9zdHBvbmVzIHBhZ2VfY291bnRlciBhbmQgcmVmY291bnQgaGFuZGxpbmcgdGlsbCB0aGUgZW5kCiAJCSAqIG9mIHRhc2sgbWlncmF0aW9uKG1lbV9jZ3JvdXBfY2xlYXJfbWMoKSkgZm9yIHBlcmZvcm1hbmNlCiAJCSAqIGltcHJvdmVtZW50LiBCdXQgd2UgY2Fubm90IHBvc3Rwb25lIGNzc19nZXQodG8pICBiZWNhdXNlIGlmCiAJCSAqIHRoZSBwcm9jZXNzIHRoYXQgaGFzIGJlZW4gbW92ZWQgdG8gQHRvIGRvZXMgc3dhcC1pbiwgdGhlCkBAIC0zNTU0LDk2ICszMTU3LDU3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19ERUJVR19WTQotc3RhdGljIHN0cnVjdCBwYWdlX2Nncm91cCAqbG9va3VwX3BhZ2VfY2dyb3VwX3VzZWQoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0Jc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKLQotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCS8qCi0JICogQ2FuIGJlIE5VTEwgd2hpbGUgZmVlZGluZyBwYWdlcyBpbnRvIHRoZSBwYWdlIGFsbG9jYXRvciBmb3IKLQkgKiB0aGUgZmlyc3QgdGltZSwgaS5lLiBkdXJpbmcgYm9vdCBvciBtZW1vcnkgaG90cGx1ZzsKLQkgKiBvciB3aGVuIG1lbV9jZ3JvdXBfZGlzYWJsZWQoKS4KLQkgKi8KLQlpZiAobGlrZWx5KHBjKSAmJiBQYWdlQ2dyb3VwVXNlZChwYykpCi0JCXJldHVybiBwYzsKLQlyZXR1cm4gTlVMTDsKLX0KLQotYm9vbCBtZW1fY2dyb3VwX2JhZF9wYWdlX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKQotewotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiBsb29rdXBfcGFnZV9jZ3JvdXBfdXNlZChwYWdlKSAhPSBOVUxMOwotfQotCi12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfYmFkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0Jc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKLQotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwX3VzZWQocGFnZSk7Ci0JaWYgKHBjKSB7Ci0JCXByX2FsZXJ0KCJwYzolcCBwYy0+ZmxhZ3M6JWx4IHBjLT5tZW1fY2dyb3VwOiVwXG4iLAotCQkJIHBjLCBwYy0+ZmxhZ3MsIHBjLT5tZW1fY2dyb3VwKTsKLQl9Ci19Ci0jZW5kaWYKK3N0YXRpYyBERUZJTkVfTVVURVgobWVtY2dfbGltaXRfbXV0ZXgpOwogCiBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsKQorCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGltaXQpCiB7CisJdW5zaWduZWQgbG9uZyBjdXJ1c2FnZTsKKwl1bnNpZ25lZCBsb25nIG9sZHVzYWdlOworCWJvb2wgZW5sYXJnZSA9IGZhbHNlOwogCWludCByZXRyeV9jb3VudDsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgY2hpbGRyZW4gPSBtZW1fY2dyb3VwX2NvdW50X2NoaWxkcmVuKG1lbWNnKTsKLQl1NjQgY3VydXNhZ2UsIG9sZHVzYWdlOwotCWludCBlbmxhcmdlOworCWludCByZXQ7CiAKIAkvKgogCSAqIEZvciBrZWVwaW5nIGhpZXJhcmNoaWNhbF9yZWNsYWltIHNpbXBsZSwgaG93IGxvbmcgd2Ugc2hvdWxkIHJldHJ5CiAJICogaXMgZGVwZW5kcyBvbiBjYWxsZXJzLiBXZSBzZXQgb3VyIHJldHJ5LWNvdW50IHRvIGJlIGZ1bmN0aW9uCiAJICogb2YgIyBvZiBjaGlsZHJlbiB3aGljaCB3ZSBzaG91bGQgdmlzaXQgaW4gdGhpcyBsb29wLgogCSAqLwotCXJldHJ5X2NvdW50ID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVMgKiBjaGlsZHJlbjsKKwlyZXRyeV9jb3VudCA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTICoKKwkJICAgICAgbWVtX2Nncm91cF9jb3VudF9jaGlsZHJlbihtZW1jZyk7CiAKLQlvbGR1c2FnZSA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfVVNBR0UpOworCW9sZHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQoJm1lbWNnLT5tZW1vcnkpOwogCi0JZW5sYXJnZSA9IDA7Ci0Jd2hpbGUgKHJldHJ5X2NvdW50KSB7CisJZG8gewogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCXJldCA9IC1FSU5UUjsKIAkJCWJyZWFrOwogCQl9Ci0JCS8qCi0JCSAqIFJhdGhlciB0aGFuIGhpZGUgYWxsIGluIHNvbWUgZnVuY3Rpb24sIEkgZG8gdGhpcyBpbgotCQkgKiBvcGVuIGNvZGVkIG1hbm5lci4gWW91IHNlZSB3aGF0IHRoaXMgcmVhbGx5IGRvZXMuCi0JCSAqIFdlIGhhdmUgdG8gZ3VhcmFudGVlIG1lbWNnLT5yZXMubGltaXQgPD0gbWVtY2ctPm1lbXN3LmxpbWl0LgotCQkgKi8KLQkJbXV0ZXhfbG9jaygmc2V0X2xpbWl0X211dGV4KTsKLQkJaWYgKHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19MSU1JVCkgPCB2YWwpIHsKKworCQltdXRleF9sb2NrKCZtZW1jZ19saW1pdF9tdXRleCk7CisJCWlmIChsaW1pdCA+IG1lbWNnLT5tZW1zdy5saW1pdCkgeworCQkJbXV0ZXhfdW5sb2NrKCZtZW1jZ19saW1pdF9tdXRleCk7CiAJCQlyZXQgPSAtRUlOVkFMOwotCQkJbXV0ZXhfdW5sb2NrKCZzZXRfbGltaXRfbXV0ZXgpOwogCQkJYnJlYWs7CiAJCX0KLQotCQlpZiAocmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19MSU1JVCkgPCB2YWwpCi0JCQllbmxhcmdlID0gMTsKLQotCQlyZXQgPSByZXNfY291bnRlcl9zZXRfbGltaXQoJm1lbWNnLT5yZXMsIHZhbCk7Ci0JCW11dGV4X3VubG9jaygmc2V0X2xpbWl0X211dGV4KTsKKwkJaWYgKGxpbWl0ID4gbWVtY2ctPm1lbW9yeS5saW1pdCkKKwkJCWVubGFyZ2UgPSB0cnVlOworCQlyZXQgPSBwYWdlX2NvdW50ZXJfbGltaXQoJm1lbWNnLT5tZW1vcnksIGxpbWl0KTsKKwkJbXV0ZXhfdW5sb2NrKCZtZW1jZ19saW1pdF9tdXRleCk7CiAKIAkJaWYgKCFyZXQpCiAJCQlicmVhazsKIAogCQl0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLCB0cnVlKTsKIAotCQljdXJ1c2FnZSA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfVVNBR0UpOworCQljdXJ1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKCZtZW1jZy0+bWVtb3J5KTsKIAkJLyogVXNhZ2UgaXMgcmVkdWNlZCA/ICovCiAJCWlmIChjdXJ1c2FnZSA+PSBvbGR1c2FnZSkKIAkJCXJldHJ5X2NvdW50LS07CiAJCWVsc2UKIAkJCW9sZHVzYWdlID0gY3VydXNhZ2U7Ci0JfQorCX0gd2hpbGUgKHJldHJ5X2NvdW50KTsKKwogCWlmICghcmV0ICYmIGVubGFyZ2UpCiAJCW1lbWNnX29vbV9yZWNvdmVyKG1lbWNnKTsKIApAQCAtMzY1MSw1MiArMzIxNSw1MyBAQAogfQogCiBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21lbXN3X2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKKwkJCQkJIHVuc2lnbmVkIGxvbmcgbGltaXQpCiB7CisJdW5zaWduZWQgbG9uZyBjdXJ1c2FnZTsKKwl1bnNpZ25lZCBsb25nIG9sZHVzYWdlOworCWJvb2wgZW5sYXJnZSA9IGZhbHNlOwogCWludCByZXRyeV9jb3VudDsKLQl1NjQgb2xkdXNhZ2UsIGN1cnVzYWdlOwotCWludCBjaGlsZHJlbiA9IG1lbV9jZ3JvdXBfY291bnRfY2hpbGRyZW4obWVtY2cpOwotCWludCByZXQgPSAtRUJVU1k7Ci0JaW50IGVubGFyZ2UgPSAwOworCWludCByZXQ7CiAKIAkvKiBzZWUgbWVtX2Nncm91cF9yZXNpemVfcmVzX2xpbWl0ICovCi0JcmV0cnlfY291bnQgPSBjaGlsZHJlbiAqIE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOwotCW9sZHVzYWdlID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX1VTQUdFKTsKLQl3aGlsZSAocmV0cnlfY291bnQpIHsKKwlyZXRyeV9jb3VudCA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTICoKKwkJICAgICAgbWVtX2Nncm91cF9jb3VudF9jaGlsZHJlbihtZW1jZyk7CisKKwlvbGR1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKCZtZW1jZy0+bWVtc3cpOworCisJZG8gewogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCXJldCA9IC1FSU5UUjsKIAkJCWJyZWFrOwogCQl9Ci0JCS8qCi0JCSAqIFJhdGhlciB0aGFuIGhpZGUgYWxsIGluIHNvbWUgZnVuY3Rpb24sIEkgZG8gdGhpcyBpbgotCQkgKiBvcGVuIGNvZGVkIG1hbm5lci4gWW91IHNlZSB3aGF0IHRoaXMgcmVhbGx5IGRvZXMuCi0JCSAqIFdlIGhhdmUgdG8gZ3VhcmFudGVlIG1lbWNnLT5yZXMubGltaXQgPD0gbWVtY2ctPm1lbXN3LmxpbWl0LgotCQkgKi8KLQkJbXV0ZXhfbG9jaygmc2V0X2xpbWl0X211dGV4KTsKLQkJaWYgKHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfTElNSVQpID4gdmFsKSB7CisKKwkJbXV0ZXhfbG9jaygmbWVtY2dfbGltaXRfbXV0ZXgpOworCQlpZiAobGltaXQgPCBtZW1jZy0+bWVtb3J5LmxpbWl0KSB7CisJCQltdXRleF91bmxvY2soJm1lbWNnX2xpbWl0X211dGV4KTsKIAkJCXJldCA9IC1FSU5WQUw7Ci0JCQltdXRleF91bmxvY2soJnNldF9saW1pdF9tdXRleCk7CiAJCQlicmVhazsKIAkJfQotCQlpZiAocmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX0xJTUlUKSA8IHZhbCkKLQkJCWVubGFyZ2UgPSAxOwotCQlyZXQgPSByZXNfY291bnRlcl9zZXRfbGltaXQoJm1lbWNnLT5tZW1zdywgdmFsKTsKLQkJbXV0ZXhfdW5sb2NrKCZzZXRfbGltaXRfbXV0ZXgpOworCQlpZiAobGltaXQgPiBtZW1jZy0+bWVtc3cubGltaXQpCisJCQllbmxhcmdlID0gdHJ1ZTsKKwkJcmV0ID0gcGFnZV9jb3VudGVyX2xpbWl0KCZtZW1jZy0+bWVtc3csIGxpbWl0KTsKKwkJbXV0ZXhfdW5sb2NrKCZtZW1jZ19saW1pdF9tdXRleCk7CiAKIAkJaWYgKCFyZXQpCiAJCQlicmVhazsKIAogCQl0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLCBmYWxzZSk7CiAKLQkJY3VydXNhZ2UgPSByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPm1lbXN3LCBSRVNfVVNBR0UpOworCQljdXJ1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKCZtZW1jZy0+bWVtc3cpOwogCQkvKiBVc2FnZSBpcyByZWR1Y2VkID8gKi8KIAkJaWYgKGN1cnVzYWdlID49IG9sZHVzYWdlKQogCQkJcmV0cnlfY291bnQtLTsKIAkJZWxzZQogCQkJb2xkdXNhZ2UgPSBjdXJ1c2FnZTsKLQl9CisJfSB3aGlsZSAocmV0cnlfY291bnQpOworCiAJaWYgKCFyZXQgJiYgZW5sYXJnZSkKIAkJbWVtY2dfb29tX3JlY292ZXIobWVtY2cpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzcwOSw3ICszMjc0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDsKIAlpbnQgbG9vcCA9IDA7CiAJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0ejsKLQl1bnNpZ25lZCBsb25nIGxvbmcgZXhjZXNzOworCXVuc2lnbmVkIGxvbmcgZXhjZXNzOwogCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDsKIAogCWlmIChvcmRlciA+IDApCkBAIC0zNzM1LDM1ICszMzAwLDE3IEBACiAJCW5yX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7CiAJCSp0b3RhbF9zY2FubmVkICs9IG5yX3NjYW5uZWQ7CiAJCXNwaW5fbG9ja19pcnEoJm1jdHotPmxvY2spOworCQlfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTsKIAogCQkvKgogCQkgKiBJZiB3ZSBmYWlsZWQgdG8gcmVjbGFpbSBhbnl0aGluZyBmcm9tIHRoaXMgbWVtb3J5IGNncm91cAogCQkgKiBpdCBpcyB0aW1lIHRvIG1vdmUgb24gdG8gdGhlIG5leHQgY2dyb3VwCiAJCSAqLwogCQluZXh0X216ID0gTlVMTDsKLQkJaWYgKCFyZWNsYWltZWQpIHsKLQkJCWRvIHsKLQkJCQkvKgotCQkJCSAqIExvb3AgdW50aWwgd2UgZmluZCB5ZXQgYW5vdGhlciBvbmUuCi0JCQkJICoKLQkJCQkgKiBCeSB0aGUgdGltZSB3ZSBnZXQgdGhlIHNvZnRfbGltaXQgbG9jawotCQkJCSAqIGFnYWluLCBzb21lb25lIG1pZ2h0IGhhdmUgYWRlZCB0aGUKLQkJCQkgKiBncm91cCBiYWNrIG9uIHRoZSBSQiB0cmVlLiBJdGVyYXRlIHRvCi0JCQkJICogbWFrZSBzdXJlIHdlIGdldCBhIGRpZmZlcmVudCBtZW0uCi0JCQkJICogbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZSByZXR1cm5zCi0JCQkJICogTlVMTCBpZiBubyBvdGhlciBjZ3JvdXAgaXMgcHJlc2VudCBvbgotCQkJCSAqIHRoZSB0cmVlCi0JCQkJICovCi0JCQkJbmV4dF9teiA9Ci0JCQkJX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopOwotCQkJCWlmIChuZXh0X216ID09IG16KQotCQkJCQljc3NfcHV0KCZuZXh0X216LT5tZW1jZy0+Y3NzKTsKLQkJCQllbHNlIC8qIG5leHRfbXogPT0gTlVMTCBvciBvdGhlciBtZW1jZyAqLwotCQkJCQlicmVhazsKLQkJCX0gd2hpbGUgKDEpOwotCQl9Ci0JCV9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXosIG1jdHopOwotCQlleGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2VzcygmbXotPm1lbWNnLT5yZXMpOworCQlpZiAoIXJlY2xhaW1lZCkKKwkJCW5leHRfbXogPSBfX21lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUobWN0eik7CisKKwkJZXhjZXNzID0gc29mdF9saW1pdF9leGNlc3MobXotPm1lbWNnKTsKIAkJLyoKIAkJICogT25lIHNjaG9vbCBvZiB0aG91Z2h0IHNheXMgdGhhdCB3ZSBzaG91bGQgbm90IGFkZAogCQkgKiBiYWNrIHRoZSBub2RlIHRvIHRoZSB0cmVlIGlmIHJlY2xhaW0gcmV0dXJucyAwLgpAQCAtMzc5MiwxMDcgKzMzMzksNiBAQAogCXJldHVybiBucl9yZWNsYWltZWQ7CiB9CiAKLS8qKgotICogbWVtX2Nncm91cF9mb3JjZV9lbXB0eV9saXN0IC0gY2xlYXJzIExSVSBvZiBhIGdyb3VwCi0gKiBAbWVtY2c6IGdyb3VwIHRvIGNsZWFyCi0gKiBAbm9kZTogTlVNQSBub2RlCi0gKiBAemlkOiB6b25lIGlkCi0gKiBAbHJ1OiBscnUgdG8gdG8gY2xlYXIKLSAqCi0gKiBUcmF2ZXJzZSBhIHNwZWNpZmllZCBwYWdlX2Nncm91cCBsaXN0IGFuZCB0cnkgdG8gZHJvcCB0aGVtIGFsbC4gIFRoaXMgZG9lc24ndAotICogcmVjbGFpbSB0aGUgcGFnZXMgcGFnZSB0aGVtc2VsdmVzIC0gcGFnZXMgYXJlIG1vdmVkIHRvIHRoZSBwYXJlbnQgKG9yIHJvb3QpCi0gKiBncm91cC4KLSAqLwotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQlpbnQgbm9kZSwgaW50IHppZCwgZW51bSBscnVfbGlzdCBscnUpCi17Ci0Jc3RydWN0IGxydXZlYyAqbHJ1dmVjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQlzdHJ1Y3QgcGFnZSAqYnVzeTsKLQlzdHJ1Y3Qgem9uZSAqem9uZTsKLQotCXpvbmUgPSAmTk9ERV9EQVRBKG5vZGUpLT5ub2RlX3pvbmVzW3ppZF07Ci0JbHJ1dmVjID0gbWVtX2Nncm91cF96b25lX2xydXZlYyh6b25lLCBtZW1jZyk7Ci0JbGlzdCA9ICZscnV2ZWMtPmxpc3RzW2xydV07Ci0KLQlidXN5ID0gTlVMTDsKLQlkbyB7Ci0JCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5scnVfbG9jaywgZmxhZ3MpOwotCQlpZiAobGlzdF9lbXB0eShsaXN0KSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBhZ2UgPSBsaXN0X2VudHJ5KGxpc3QtPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpOwotCQlpZiAoYnVzeSA9PSBwYWdlKSB7Ci0JCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgbGlzdCk7Ci0JCQlidXN5ID0gTlVMTDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5scnVfbG9jaywgZmxhZ3MpOwotCi0JCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCi0JCWlmIChtZW1fY2dyb3VwX21vdmVfcGFyZW50KHBhZ2UsIHBjLCBtZW1jZykpIHsKLQkJCS8qIGZvdW5kIGxvY2sgY29udGVudGlvbiBvciAicGMiIGlzIG9ic29sZXRlLiAqLwotCQkJYnVzeSA9IHBhZ2U7Ci0JCX0gZWxzZQotCQkJYnVzeSA9IE5VTEw7Ci0JCWNvbmRfcmVzY2hlZCgpOwotCX0gd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKTsKLX0KLQotLyoKLSAqIG1ha2UgbWVtX2Nncm91cCdzIGNoYXJnZSB0byBiZSAwIGlmIHRoZXJlIGlzIG5vIHRhc2sgYnkgbW92aW5nCi0gKiBhbGwgdGhlIGNoYXJnZXMgYW5kIHBhZ2VzIHRvIHRoZSBwYXJlbnQuCi0gKiBUaGlzIGVuYWJsZXMgZGVsZXRpbmcgdGhpcyBtZW1fY2dyb3VwLgotICoKLSAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyBjc3MgcmVmZXJlbmNlIG9uIHRoZSBtZW1jZy4KLSAqLwotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9yZXBhcmVudF9jaGFyZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKLXsKLQlpbnQgbm9kZSwgemlkOwotCXU2NCB1c2FnZTsKLQotCWRvIHsKLQkJLyogVGhpcyBpcyBmb3IgbWFraW5nIGFsbCAqdXNlZCogcGFnZXMgdG8gYmUgb24gTFJVLiAqLwotCQlscnVfYWRkX2RyYWluX2FsbCgpOwotCQlkcmFpbl9hbGxfc3RvY2tfc3luYyhtZW1jZyk7Ci0JCW1lbV9jZ3JvdXBfc3RhcnRfbW92ZShtZW1jZyk7Ci0JCWZvcl9lYWNoX25vZGVfc3RhdGUobm9kZSwgTl9NRU1PUlkpIHsKLQkJCWZvciAoemlkID0gMDsgemlkIDwgTUFYX05SX1pPTkVTOyB6aWQrKykgewotCQkJCWVudW0gbHJ1X2xpc3QgbHJ1OwotCQkJCWZvcl9lYWNoX2xydShscnUpIHsKLQkJCQkJbWVtX2Nncm91cF9mb3JjZV9lbXB0eV9saXN0KG1lbWNnLAotCQkJCQkJCW5vZGUsIHppZCwgbHJ1KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJbWVtX2Nncm91cF9lbmRfbW92ZShtZW1jZyk7Ci0JCW1lbWNnX29vbV9yZWNvdmVyKG1lbWNnKTsKLQkJY29uZF9yZXNjaGVkKCk7Ci0KLQkJLyoKLQkJICogS2VybmVsIG1lbW9yeSBtYXkgbm90IG5lY2Vzc2FyaWx5IGJlIHRyYWNrYWJsZSB0byBhIHNwZWNpZmljCi0JCSAqIHByb2Nlc3MuIFNvIHRoZXkgYXJlIG5vdCBtaWdyYXRlZCwgYW5kIHRoZXJlZm9yZSB3ZSBjYW4ndAotCQkgKiBleHBlY3QgdGhlaXIgdmFsdWUgdG8gZHJvcCB0byAwIGhlcmUuCi0JCSAqIEhhdmluZyByZXMgZmlsbGVkIHVwIHdpdGgga21lbSBvbmx5IGlzIGVub3VnaC4KLQkJICoKLQkJICogVGhpcyBpcyBhIHNhZmV0eSBjaGVjayBiZWNhdXNlIG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfbGlzdAotCQkgKiBjb3VsZCBoYXZlIHJhY2VkIHdpdGggbWVtX2Nncm91cF9yZXBsYWNlX3BhZ2VfY2FjaGUgY2FsbGVycwotCQkgKiBzbyB0aGUgbHJ1IHNlZW1lZCBlbXB0eSBidXQgdGhlIHBhZ2UgY291bGQgaGF2ZSBiZWVuIGFkZGVkCi0JCSAqIHJpZ2h0IGFmdGVyIHRoZSBjaGVjay4gUkVTX1VTQUdFIHNob3VsZCBiZSBzYWZlIGFzIHdlIGFsd2F5cwotCQkgKiBjaGFyZ2UgYmVmb3JlIGFkZGluZyB0byB0aGUgTFJVLgotCQkgKi8KLQkJdXNhZ2UgPSByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPnJlcywgUkVTX1VTQUdFKSAtCi0JCQlyZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPmttZW0sIFJFU19VU0FHRSk7Ci0JfSB3aGlsZSAodXNhZ2UgPiAwKTsKLX0KLQogLyoKICAqIFRlc3Qgd2hldGhlciBAbWVtY2cgaGFzIGNoaWxkcmVuLCBkZWFkIG9yIGFsaXZlLiAgTm90ZSB0aGF0IHRoaXMKICAqIGZ1bmN0aW9uIGRvZXNuJ3QgY2FyZSB3aGV0aGVyIEBtZW1jZyBoYXMgdXNlX2hpZXJhcmNoeSBlbmFibGVkIGFuZApAQCAtMzkzMCw3ICszMzc2LDcgQEAKIAkvKiB3ZSBjYWxsIHRyeS10by1mcmVlIHBhZ2VzIGZvciBtYWtlIHRoaXMgY2dyb3VwIGVtcHR5ICovCiAJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKIAkvKiB0cnkgdG8gZnJlZSBhbGwgcGFnZXMgaW4gdGhpcyBjZ3JvdXAgKi8KLQl3aGlsZSAobnJfcmV0cmllcyAmJiByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPnJlcywgUkVTX1VTQUdFKSA+IDApIHsKKwl3aGlsZSAobnJfcmV0cmllcyAmJiBwYWdlX2NvdW50ZXJfcmVhZCgmbWVtY2ctPm1lbW9yeSkpIHsKIAkJaW50IHByb2dyZXNzOwogCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKQEAgLTQwMDEsOCArMzQ0Nyw4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9yZWN1cnNpdmVfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCSAgICAgICBlbnVtIG1lbV9jZ3JvdXBfc3RhdF9pbmRleCBpZHgpCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmVlX3N0YXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAorCQkJICAgICAgIGVudW0gbWVtX2Nncm91cF9zdGF0X2luZGV4IGlkeCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqaXRlcjsKIAlsb25nIHZhbCA9IDA7CkBAIC00MDIwLDU1ICszNDY2LDcxIEBACiB7CiAJdTY0IHZhbDsKIAotCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkgeworCWlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7CisJCXZhbCA9IHRyZWVfc3RhdChtZW1jZywgTUVNX0NHUk9VUF9TVEFUX0NBQ0hFKTsKKwkJdmFsICs9IHRyZWVfc3RhdChtZW1jZywgTUVNX0NHUk9VUF9TVEFUX1JTUyk7CisJCWlmIChzd2FwKQorCQkJdmFsICs9IHRyZWVfc3RhdChtZW1jZywgTUVNX0NHUk9VUF9TVEFUX1NXQVApOworCX0gZWxzZSB7CiAJCWlmICghc3dhcCkKLQkJCXJldHVybiByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPnJlcywgUkVTX1VTQUdFKTsKKwkJCXZhbCA9IHBhZ2VfY291bnRlcl9yZWFkKCZtZW1jZy0+bWVtb3J5KTsKIAkJZWxzZQotCQkJcmV0dXJuIHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19VU0FHRSk7CisJCQl2YWwgPSBwYWdlX2NvdW50ZXJfcmVhZCgmbWVtY2ctPm1lbXN3KTsKIAl9Ci0KLQkvKgotCSAqIFRyYW5zcGFyZW50IGh1Z2VwYWdlcyBhcmUgc3RpbGwgYWNjb3VudGVkIGZvciBpbiBNRU1fQ0dST1VQX1NUQVRfUlNTCi0JICogYXMgd2VsbCBhcyBpbiBNRU1fQ0dST1VQX1NUQVRfUlNTX0hVR0UuCi0JICovCi0JdmFsID0gbWVtX2Nncm91cF9yZWN1cnNpdmVfc3RhdChtZW1jZywgTUVNX0NHUk9VUF9TVEFUX0NBQ0hFKTsKLQl2YWwgKz0gbWVtX2Nncm91cF9yZWN1cnNpdmVfc3RhdChtZW1jZywgTUVNX0NHUk9VUF9TVEFUX1JTUyk7Ci0KLQlpZiAoc3dhcCkKLQkJdmFsICs9IG1lbV9jZ3JvdXBfcmVjdXJzaXZlX3N0YXQobWVtY2csIE1FTV9DR1JPVVBfU1RBVF9TV0FQKTsKLQogCXJldHVybiB2YWwgPDwgUEFHRV9TSElGVDsKIH0KIAorZW51bSB7CisJUkVTX1VTQUdFLAorCVJFU19MSU1JVCwKKwlSRVNfTUFYX1VTQUdFLAorCVJFU19GQUlMQ05ULAorCVJFU19TT0ZUX0xJTUlULAorfTsKIAogc3RhdGljIHU2NCBtZW1fY2dyb3VwX3JlYWRfdTY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCiAJCQkgICAgICAgc3RydWN0IGNmdHlwZSAqY2Z0KQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTsKLQllbnVtIHJlc190eXBlIHR5cGUgPSBNRU1GSUxFX1RZUEUoY2Z0LT5wcml2YXRlKTsKLQlpbnQgbmFtZSA9IE1FTUZJTEVfQVRUUihjZnQtPnByaXZhdGUpOworCXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7CiAKLQlzd2l0Y2ggKHR5cGUpIHsKKwlzd2l0Y2ggKE1FTUZJTEVfVFlQRShjZnQtPnByaXZhdGUpKSB7CiAJY2FzZSBfTUVNOgotCQlpZiAobmFtZSA9PSBSRVNfVVNBR0UpCi0JCQlyZXR1cm4gbWVtX2Nncm91cF91c2FnZShtZW1jZywgZmFsc2UpOwotCQlyZXR1cm4gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIG5hbWUpOwotCWNhc2UgX01FTVNXQVA6Ci0JCWlmIChuYW1lID09IFJFU19VU0FHRSkKLQkJCXJldHVybiBtZW1fY2dyb3VwX3VzYWdlKG1lbWNnLCB0cnVlKTsKLQkJcmV0dXJuIHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIG5hbWUpOwotCWNhc2UgX0tNRU06Ci0JCXJldHVybiByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPmttZW0sIG5hbWUpOworCQljb3VudGVyID0gJm1lbWNnLT5tZW1vcnk7CiAJCWJyZWFrOworCWNhc2UgX01FTVNXQVA6CisJCWNvdW50ZXIgPSAmbWVtY2ctPm1lbXN3OworCQlicmVhazsKKwljYXNlIF9LTUVNOgorCQljb3VudGVyID0gJm1lbWNnLT5rbWVtOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlzd2l0Y2ggKE1FTUZJTEVfQVRUUihjZnQtPnByaXZhdGUpKSB7CisJY2FzZSBSRVNfVVNBR0U6CisJCWlmIChjb3VudGVyID09ICZtZW1jZy0+bWVtb3J5KQorCQkJcmV0dXJuIG1lbV9jZ3JvdXBfdXNhZ2UobWVtY2csIGZhbHNlKTsKKwkJaWYgKGNvdW50ZXIgPT0gJm1lbWNnLT5tZW1zdykKKwkJCXJldHVybiBtZW1fY2dyb3VwX3VzYWdlKG1lbWNnLCB0cnVlKTsKKwkJcmV0dXJuICh1NjQpcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcikgKiBQQUdFX1NJWkU7CisJY2FzZSBSRVNfTElNSVQ6CisJCXJldHVybiAodTY0KWNvdW50ZXItPmxpbWl0ICogUEFHRV9TSVpFOworCWNhc2UgUkVTX01BWF9VU0FHRToKKwkJcmV0dXJuICh1NjQpY291bnRlci0+d2F0ZXJtYXJrICogUEFHRV9TSVpFOworCWNhc2UgUkVTX0ZBSUxDTlQ6CisJCXJldHVybiBjb3VudGVyLT5mYWlsY250OworCWNhc2UgUkVTX1NPRlRfTElNSVQ6CisJCXJldHVybiAodTY0KW1lbWNnLT5zb2Z0X2xpbWl0ICogUEFHRV9TSVpFOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KIH0KIAogI2lmZGVmIENPTkZJR19NRU1DR19LTUVNCi0vKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggYWN0aXZhdGVfa21lbV9tdXRleCBoZWxkICovCi1zdGF0aWMgaW50IF9fbWVtY2dfYWN0aXZhdGVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyBsaW1pdCkKK3N0YXRpYyBpbnQgbWVtY2dfYWN0aXZhdGVfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIHsKIAlpbnQgZXJyID0gMDsKIAlpbnQgbWVtY2dfaWQ7CkBAIC00MTE1LDcgKzM1NzcsNyBAQAogCSAqIFdlIGNvdWxkbid0IGhhdmUgYWNjb3VudGVkIHRvIHRoaXMgY2dyb3VwLCBiZWNhdXNlIGl0IGhhc24ndCBnb3QgdGhlCiAJICogYWN0aXZlIGJpdCBzZXQgeWV0LCBzbyB0aGlzIHNob3VsZCBzdWNjZWVkLgogCSAqLwotCWVyciA9IHJlc19jb3VudGVyX3NldF9saW1pdCgmbWVtY2ctPmttZW0sIGxpbWl0KTsKKwllcnIgPSBwYWdlX2NvdW50ZXJfbGltaXQoJm1lbWNnLT5rbWVtLCBucl9wYWdlcyk7CiAJVk1fQlVHX09OKGVycik7CiAKIAlzdGF0aWNfa2V5X3Nsb3dfaW5jKCZtZW1jZ19rbWVtX2VuYWJsZWRfa2V5KTsKQEAgLTQxMzAsMjYgKzM1OTIsMTcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lbWNnX2FjdGl2YXRlX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBsaW1pdCkKLXsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmYWN0aXZhdGVfa21lbV9tdXRleCk7Ci0JcmV0ID0gX19tZW1jZ19hY3RpdmF0ZV9rbWVtKG1lbWNnLCBsaW1pdCk7Ci0JbXV0ZXhfdW5sb2NrKCZhY3RpdmF0ZV9rbWVtX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IG1lbWNnX3VwZGF0ZV9rbWVtX2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsKQorCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGltaXQpCiB7CiAJaW50IHJldDsKIAorCW11dGV4X2xvY2soJm1lbWNnX2xpbWl0X211dGV4KTsKIAlpZiAoIW1lbWNnX2ttZW1faXNfYWN0aXZlKG1lbWNnKSkKLQkJcmV0ID0gbWVtY2dfYWN0aXZhdGVfa21lbShtZW1jZywgdmFsKTsKKwkJcmV0ID0gbWVtY2dfYWN0aXZhdGVfa21lbShtZW1jZywgbGltaXQpOwogCWVsc2UKLQkJcmV0ID0gcmVzX2NvdW50ZXJfc2V0X2xpbWl0KCZtZW1jZy0+a21lbSwgdmFsKTsKKwkJcmV0ID0gcGFnZV9jb3VudGVyX2xpbWl0KCZtZW1jZy0+a21lbSwgbGltaXQpOworCW11dGV4X3VubG9jaygmbWVtY2dfbGltaXRfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQxNjEsMTkgKzM2MTQsMTkgQEAKIAlpZiAoIXBhcmVudCkKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZhY3RpdmF0ZV9rbWVtX211dGV4KTsKKwltdXRleF9sb2NrKCZtZW1jZ19saW1pdF9tdXRleCk7CiAJLyoKIAkgKiBJZiB0aGUgcGFyZW50IGNncm91cCBpcyBub3Qga21lbS1hY3RpdmUgbm93LCBpdCBjYW5ub3QgYmUgYWN0aXZhdGVkCiAJICogYWZ0ZXIgdGhpcyBwb2ludCwgYmVjYXVzZSBpdCBoYXMgYXQgbGVhc3Qgb25lIGNoaWxkIGFscmVhZHkuCiAJICovCiAJaWYgKG1lbWNnX2ttZW1faXNfYWN0aXZlKHBhcmVudCkpCi0JCXJldCA9IF9fbWVtY2dfYWN0aXZhdGVfa21lbShtZW1jZywgUkVTX0NPVU5URVJfTUFYKTsKLQltdXRleF91bmxvY2soJmFjdGl2YXRlX2ttZW1fbXV0ZXgpOworCQlyZXQgPSBtZW1jZ19hY3RpdmF0ZV9rbWVtKG1lbWNnLCBQQUdFX0NPVU5URVJfTUFYKTsKKwltdXRleF91bmxvY2soJm1lbWNnX2xpbWl0X211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogI2Vsc2UKIHN0YXRpYyBpbnQgbWVtY2dfdXBkYXRlX2ttZW1fbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCisJCQkJICAgdW5zaWduZWQgbG9uZyBsaW1pdCkKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTQxODcsMTEwICszNjQwLDY5IEBACiAJCQkJY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7Ci0JZW51bSByZXNfdHlwZSB0eXBlOwotCWludCBuYW1lOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKIAlpbnQgcmV0OwogCiAJYnVmID0gc3Ryc3RyaXAoYnVmKTsKLQl0eXBlID0gTUVNRklMRV9UWVBFKG9mX2NmdChvZiktPnByaXZhdGUpOwotCW5hbWUgPSBNRU1GSUxFX0FUVFIob2ZfY2Z0KG9mKS0+cHJpdmF0ZSk7CisJcmV0ID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgJm5yX3BhZ2VzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0Jc3dpdGNoIChuYW1lKSB7CisJc3dpdGNoIChNRU1GSUxFX0FUVFIob2ZfY2Z0KG9mKS0+cHJpdmF0ZSkpIHsKIAljYXNlIFJFU19MSU1JVDoKIAkJaWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHsgLyogQ2FuJ3Qgc2V0IGxpbWl0IG9uIHJvb3QgKi8KIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQotCQkvKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYWxsIG5lY2Vzc2FyeSBwYXJzZS4uLnJldXNlIGl0ICovCi0JCXJldCA9IHJlc19jb3VudGVyX21lbXBhcnNlX3dyaXRlX3N0cmF0ZWd5KGJ1ZiwgJnZhbCk7Ci0JCWlmIChyZXQpCisJCXN3aXRjaCAoTUVNRklMRV9UWVBFKG9mX2NmdChvZiktPnByaXZhdGUpKSB7CisJCWNhc2UgX01FTToKKwkJCXJldCA9IG1lbV9jZ3JvdXBfcmVzaXplX2xpbWl0KG1lbWNnLCBucl9wYWdlcyk7CiAJCQlicmVhazsKLQkJaWYgKHR5cGUgPT0gX01FTSkKLQkJCXJldCA9IG1lbV9jZ3JvdXBfcmVzaXplX2xpbWl0KG1lbWNnLCB2YWwpOwotCQllbHNlIGlmICh0eXBlID09IF9NRU1TV0FQKQotCQkJcmV0ID0gbWVtX2Nncm91cF9yZXNpemVfbWVtc3dfbGltaXQobWVtY2csIHZhbCk7Ci0JCWVsc2UgaWYgKHR5cGUgPT0gX0tNRU0pCi0JCQlyZXQgPSBtZW1jZ191cGRhdGVfa21lbV9saW1pdChtZW1jZywgdmFsKTsKLQkJZWxzZQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNhc2UgX01FTVNXQVA6CisJCQlyZXQgPSBtZW1fY2dyb3VwX3Jlc2l6ZV9tZW1zd19saW1pdChtZW1jZywgbnJfcGFnZXMpOworCQkJYnJlYWs7CisJCWNhc2UgX0tNRU06CisJCQlyZXQgPSBtZW1jZ191cGRhdGVfa21lbV9saW1pdChtZW1jZywgbnJfcGFnZXMpOworCQkJYnJlYWs7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBSRVNfU09GVF9MSU1JVDoKLQkJcmV0ID0gcmVzX2NvdW50ZXJfbWVtcGFyc2Vfd3JpdGVfc3RyYXRlZ3koYnVmLCAmdmFsKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCQkvKgotCQkgKiBGb3IgbWVtc3csIHNvZnQgbGltaXRzIGFyZSBoYXJkIHRvIGltcGxlbWVudCBpbiB0ZXJtcwotCQkgKiBvZiBzZW1hbnRpY3MsIGZvciBub3csIHdlIHN1cHBvcnQgc29mdCBsaW1pdHMgZm9yCi0JCSAqIGNvbnRyb2wgd2l0aG91dCBzd2FwCi0JCSAqLwotCQlpZiAodHlwZSA9PSBfTUVNKQotCQkJcmV0ID0gcmVzX2NvdW50ZXJfc2V0X3NvZnRfbGltaXQoJm1lbWNnLT5yZXMsIHZhbCk7Ci0JCWVsc2UKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7IC8qIHNob3VsZCBiZSBCVUcoKSA/ICovCisJCW1lbWNnLT5zb2Z0X2xpbWl0ID0gbnJfcGFnZXM7CisJCXJldCA9IDA7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0ID86IG5ieXRlczsKIH0KIAotc3RhdGljIHZvaWQgbWVtY2dfZ2V0X2hpZXJhcmNoaWNhbF9saW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCXVuc2lnbmVkIGxvbmcgbG9uZyAqbWVtX2xpbWl0LCB1bnNpZ25lZCBsb25nIGxvbmcgKm1lbXN3X2xpbWl0KQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyBtaW5fbGltaXQsIG1pbl9tZW1zd19saW1pdCwgdG1wOwotCi0JbWluX2xpbWl0ID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19MSU1JVCk7Ci0JbWluX21lbXN3X2xpbWl0ID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX0xJTUlUKTsKLQlpZiAoIW1lbWNnLT51c2VfaGllcmFyY2h5KQotCQlnb3RvIG91dDsKLQotCXdoaWxlIChtZW1jZy0+Y3NzLnBhcmVudCkgewotCQltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MobWVtY2ctPmNzcy5wYXJlbnQpOwotCQlpZiAoIW1lbWNnLT51c2VfaGllcmFyY2h5KQotCQkJYnJlYWs7Ci0JCXRtcCA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfTElNSVQpOwotCQltaW5fbGltaXQgPSBtaW4obWluX2xpbWl0LCB0bXApOwotCQl0bXAgPSByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPm1lbXN3LCBSRVNfTElNSVQpOwotCQltaW5fbWVtc3dfbGltaXQgPSBtaW4obWluX21lbXN3X2xpbWl0LCB0bXApOwotCX0KLW91dDoKLQkqbWVtX2xpbWl0ID0gbWluX2xpbWl0OwotCSptZW1zd19saW1pdCA9IG1pbl9tZW1zd19saW1pdDsKLX0KLQogc3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9yZXNldChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZiwKIAkJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7Ci0JaW50IG5hbWU7Ci0JZW51bSByZXNfdHlwZSB0eXBlOworCXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7CiAKLQl0eXBlID0gTUVNRklMRV9UWVBFKG9mX2NmdChvZiktPnByaXZhdGUpOwotCW5hbWUgPSBNRU1GSUxFX0FUVFIob2ZfY2Z0KG9mKS0+cHJpdmF0ZSk7CisJc3dpdGNoIChNRU1GSUxFX1RZUEUob2ZfY2Z0KG9mKS0+cHJpdmF0ZSkpIHsKKwljYXNlIF9NRU06CisJCWNvdW50ZXIgPSAmbWVtY2ctPm1lbW9yeTsKKwkJYnJlYWs7CisJY2FzZSBfTUVNU1dBUDoKKwkJY291bnRlciA9ICZtZW1jZy0+bWVtc3c7CisJCWJyZWFrOworCWNhc2UgX0tNRU06CisJCWNvdW50ZXIgPSAmbWVtY2ctPmttZW07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KIAotCXN3aXRjaCAobmFtZSkgeworCXN3aXRjaCAoTUVNRklMRV9BVFRSKG9mX2NmdChvZiktPnByaXZhdGUpKSB7CiAJY2FzZSBSRVNfTUFYX1VTQUdFOgotCQlpZiAodHlwZSA9PSBfTUVNKQotCQkJcmVzX2NvdW50ZXJfcmVzZXRfbWF4KCZtZW1jZy0+cmVzKTsKLQkJZWxzZSBpZiAodHlwZSA9PSBfTUVNU1dBUCkKLQkJCXJlc19jb3VudGVyX3Jlc2V0X21heCgmbWVtY2ctPm1lbXN3KTsKLQkJZWxzZSBpZiAodHlwZSA9PSBfS01FTSkKLQkJCXJlc19jb3VudGVyX3Jlc2V0X21heCgmbWVtY2ctPmttZW0pOwotCQllbHNlCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJcGFnZV9jb3VudGVyX3Jlc2V0X3dhdGVybWFyayhjb3VudGVyKTsKIAkJYnJlYWs7CiAJY2FzZSBSRVNfRkFJTENOVDoKLQkJaWYgKHR5cGUgPT0gX01FTSkKLQkJCXJlc19jb3VudGVyX3Jlc2V0X2ZhaWxjbnQoJm1lbWNnLT5yZXMpOwotCQllbHNlIGlmICh0eXBlID09IF9NRU1TV0FQKQotCQkJcmVzX2NvdW50ZXJfcmVzZXRfZmFpbGNudCgmbWVtY2ctPm1lbXN3KTsKLQkJZWxzZSBpZiAodHlwZSA9PSBfS01FTSkKLQkJCXJlc19jb3VudGVyX3Jlc2V0X2ZhaWxjbnQoJm1lbWNnLT5rbWVtKTsKLQkJZWxzZQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNvdW50ZXItPmZhaWxjbnQgPSAwOwogCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKIAl9CiAKIAlyZXR1cm4gbmJ5dGVzOwpAQCAtNDM4Nyw2ICszNzk5LDcgQEAKIHN0YXRpYyBpbnQgbWVtY2dfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3MobSkpOworCXVuc2lnbmVkIGxvbmcgbWVtb3J5LCBtZW1zdzsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWk7CiAJdW5zaWduZWQgaW50IGk7CiAKQEAgLTQ0MDYsMTQgKzM4MTksMTYgQEAKIAkJCSAgIG1lbV9jZ3JvdXBfbnJfbHJ1X3BhZ2VzKG1lbWNnLCBCSVQoaSkpICogUEFHRV9TSVpFKTsKIAogCS8qIEhpZXJhcmNoaWNhbCBpbmZvcm1hdGlvbiAqLwotCXsKLQkJdW5zaWduZWQgbG9uZyBsb25nIGxpbWl0LCBtZW1zd19saW1pdDsKLQkJbWVtY2dfZ2V0X2hpZXJhcmNoaWNhbF9saW1pdChtZW1jZywgJmxpbWl0LCAmbWVtc3dfbGltaXQpOwotCQlzZXFfcHJpbnRmKG0sICJoaWVyYXJjaGljYWxfbWVtb3J5X2xpbWl0ICVsbHVcbiIsIGxpbWl0KTsKLQkJaWYgKGRvX3N3YXBfYWNjb3VudCkKLQkJCXNlcV9wcmludGYobSwgImhpZXJhcmNoaWNhbF9tZW1zd19saW1pdCAlbGx1XG4iLAotCQkJCSAgIG1lbXN3X2xpbWl0KTsKKwltZW1vcnkgPSBtZW1zdyA9IFBBR0VfQ09VTlRFUl9NQVg7CisJZm9yIChtaSA9IG1lbWNnOyBtaTsgbWkgPSBwYXJlbnRfbWVtX2Nncm91cChtaSkpIHsKKwkJbWVtb3J5ID0gbWluKG1lbW9yeSwgbWktPm1lbW9yeS5saW1pdCk7CisJCW1lbXN3ID0gbWluKG1lbXN3LCBtaS0+bWVtc3cubGltaXQpOwogCX0KKwlzZXFfcHJpbnRmKG0sICJoaWVyYXJjaGljYWxfbWVtb3J5X2xpbWl0ICVsbHVcbiIsCisJCSAgICh1NjQpbWVtb3J5ICogUEFHRV9TSVpFKTsKKwlpZiAoZG9fc3dhcF9hY2NvdW50KQorCQlzZXFfcHJpbnRmKG0sICJoaWVyYXJjaGljYWxfbWVtc3dfbGltaXQgJWxsdVxuIiwKKwkJCSAgICh1NjQpbWVtc3cgKiBQQUdFX1NJWkUpOwogCiAJZm9yIChpID0gMDsgaSA8IE1FTV9DR1JPVVBfU1RBVF9OU1RBVFM7IGkrKykgewogCQlsb25nIGxvbmcgdmFsID0gMDsKQEAgLTQ0OTcsNyArMzkxMiw3IEBACiBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBzd2FwKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3RocmVzaG9sZF9hcnkgKnQ7Ci0JdTY0IHVzYWdlOworCXVuc2lnbmVkIGxvbmcgdXNhZ2U7CiAJaW50IGk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CkBAIC00NTk2LDEwICs0MDExLDExIEBACiB7CiAJc3RydWN0IG1lbV9jZ3JvdXBfdGhyZXNob2xkcyAqdGhyZXNob2xkczsKIAlzdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGRfYXJ5ICpuZXc7Ci0JdTY0IHRocmVzaG9sZCwgdXNhZ2U7CisJdW5zaWduZWQgbG9uZyB0aHJlc2hvbGQ7CisJdW5zaWduZWQgbG9uZyB1c2FnZTsKIAlpbnQgaSwgc2l6ZSwgcmV0OwogCi0JcmV0ID0gcmVzX2NvdW50ZXJfbWVtcGFyc2Vfd3JpdGVfc3RyYXRlZ3koYXJncywgJnRocmVzaG9sZCk7CisJcmV0ID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGFyZ3MsICZ0aHJlc2hvbGQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTQ2ODksNyArNDEwNSw3IEBACiB7CiAJc3RydWN0IG1lbV9jZ3JvdXBfdGhyZXNob2xkcyAqdGhyZXNob2xkczsKIAlzdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGRfYXJ5ICpuZXc7Ci0JdTY0IHVzYWdlOworCXVuc2lnbmVkIGxvbmcgdXNhZ2U7CiAJaW50IGksIGosIHNpemU7CiAKIAltdXRleF9sb2NrKCZtZW1jZy0+dGhyZXNob2xkc19sb2NrKTsKQEAgLTQ4NTUsNDAgKzQyNzEsNiBAQAogewogCW1lbV9jZ3JvdXBfc29ja2V0c19kZXN0cm95KG1lbWNnKTsKIH0KLQotc3RhdGljIHZvaWQga21lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCWlmICghbWVtY2dfa21lbV9pc19hY3RpdmUobWVtY2cpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIGttZW0gY2hhcmdlcyBjYW4gb3V0bGl2ZSB0aGUgY2dyb3VwLiBJbiB0aGUgY2FzZSBvZiBzbGFiCi0JICogcGFnZXMsIGZvciBpbnN0YW5jZSwgYSBwYWdlIGNvbnRhaW4gb2JqZWN0cyBmcm9tIHZhcmlvdXMKLQkgKiBwcm9jZXNzZXMuIEFzIHdlIHByZXZlbnQgZnJvbSB0YWtpbmcgYSByZWZlcmVuY2UgZm9yIGV2ZXJ5Ci0JICogc3VjaCBhbGxvY2F0aW9uIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCB3aGVuIGRvaW5nIHVuY2hhcmdlCi0JICogKHNlZSBtZW1jZ191bmNoYXJnZV9rbWVtKSBhbmQgaGVyZSBkdXJpbmcgb2ZmbGluaW5nLgotCSAqCi0JICogVGhlIGlkZWEgaXMgdGhhdCB0aGF0IG9ubHkgdGhlIF9sYXN0XyB1bmNoYXJnZSB3aGljaCBzZWVzCi0JICogdGhlIGRlYWQgbWVtY2cgd2lsbCBkcm9wIHRoZSBsYXN0IHJlZmVyZW5jZS4gQW4gYWRkaXRpb25hbAotCSAqIHJlZmVyZW5jZSBpcyB0YWtlbiBoZXJlIGJlZm9yZSB0aGUgZ3JvdXAgaXMgbWFya2VkIGRlYWQKLQkgKiB3aGljaCBpcyB0aGVuIHBhaXJlZCB3aXRoIGNzc19wdXQgZHVyaW5nIHVuY2hhcmdlIHJlc3AuIGhlcmUuCi0JICoKLQkgKiBBbHRob3VnaCB0aGlzIG1pZ2h0IHNvdW5kIHN0cmFuZ2UgYXMgdGhpcyBwYXRoIGlzIGNhbGxlZCBmcm9tCi0JICogY3NzX29mZmxpbmUoKSB3aGVuIHRoZSByZWZlcmVuY2VtaWdodCBoYXZlIGRyb3BwZWQgZG93biB0byAwIGFuZAotCSAqIHNob3VsZG4ndCBiZSBpbmNyZW1lbnRlZCBhbnltb3JlIChjc3NfdHJ5Z2V0X29ubGluZSgpIHdvdWxkCi0JICogZmFpbCkgd2UgZG8gbm90IGhhdmUgb3RoZXIgb3B0aW9ucyBiZWNhdXNlIG9mIHRoZSBrbWVtCi0JICogYWxsb2NhdGlvbnMgbGlmZXRpbWUuCi0JICovCi0JY3NzX2dldCgmbWVtY2ctPmNzcyk7Ci0KLQltZW1jZ19rbWVtX21hcmtfZGVhZChtZW1jZyk7Ci0KLQlpZiAocmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5rbWVtLCBSRVNfVVNBR0UpICE9IDApCi0JCXJldHVybjsKLQotCWlmIChtZW1jZ19rbWVtX3Rlc3RfYW5kX2NsZWFyX2RlYWQobWVtY2cpKQotCQljc3NfcHV0KCZtZW1jZy0+Y3NzKTsKLX0KICNlbHNlCiBzdGF0aWMgaW50IG1lbWNnX2luaXRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcykKIHsKQEAgLTQ4OTgsMTAgKzQyODAsNiBAQAogc3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIH0KLQotc3RhdGljIHZvaWQga21lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotfQogI2VuZGlmCiAKIC8qCkBAIC01MDY0LDcgKzQ0NDIsNyBAQAogCSAqCiAJICogRE8gTk9UIEFERCBORVcgRklMRVMuCiAJICovCi0JbmFtZSA9IGNmaWxlLmZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZTsKKwluYW1lID0gY2ZpbGUuZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWU7CiAKIAlpZiAoIXN0cmNtcChuYW1lLCAibWVtb3J5LnVzYWdlX2luX2J5dGVzIikpIHsKIAkJZXZlbnQtPnJlZ2lzdGVyX2V2ZW50ID0gbWVtX2Nncm91cF91c2FnZV9yZWdpc3Rlcl9ldmVudDsKQEAgLTUwODgsNyArNDQ2Niw3IEBACiAJICogYXV0b21hdGljYWxseSByZW1vdmVkIG9uIGNncm91cCBkZXN0cnVjdGlvbiBidXQgdGhlIHJlbW92YWwgaXMKIAkgKiBhc3luY2hyb25vdXMsIHNvIHRha2UgYW4gZXh0cmEgcmVmIG9uIEBjc3MuCiAJICovCi0JY2ZpbGVfY3NzID0gY3NzX3RyeWdldF9vbmxpbmVfZnJvbV9kaXIoY2ZpbGUuZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50LAorCWNmaWxlX2NzcyA9IGNzc190cnlnZXRfb25saW5lX2Zyb21fZGlyKGNmaWxlLmZpbGUtPmZfcGF0aC5kZW50cnktPmRfcGFyZW50LAogCQkJCQkgICAgICAgJm1lbW9yeV9jZ3JwX3N1YnN5cyk7CiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAoSVNfRVJSKGNmaWxlX2NzcykpCkBAIC01MjI4LDcgKzQ2MDYsMTAgQEAKICNpZmRlZiBDT05GSUdfU0xBQklORk8KIAl7CiAJCS5uYW1lID0gImttZW0uc2xhYmluZm8iLAotCQkuc2VxX3Nob3cgPSBtZW1fY2dyb3VwX3NsYWJpbmZvX3JlYWQsCisJCS5zZXFfc3RhcnQgPSBzbGFiX3N0YXJ0LAorCQkuc2VxX25leHQgPSBzbGFiX25leHQsCisJCS5zZXFfc3RvcCA9IHNsYWJfc3RvcCwKKwkJLnNlcV9zaG93ID0gbWVtY2dfc2xhYl9zaG93LAogCX0sCiAjZW5kaWYKICNlbmRpZgpAQCAtNTM2Myw5ICs0NzQ0LDkgQEAKICAqLwogc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKLQlpZiAoIW1lbWNnLT5yZXMucGFyZW50KQorCWlmICghbWVtY2ctPm1lbW9yeS5wYXJlbnQpCiAJCXJldHVybiBOVUxMOwotCXJldHVybiBtZW1fY2dyb3VwX2Zyb21fcmVzX2NvdW50ZXIobWVtY2ctPnJlcy5wYXJlbnQsIHJlcyk7CisJcmV0dXJuIG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKG1lbWNnLT5tZW1vcnkucGFyZW50LCBtZW1vcnkpOwogfQogRVhQT1JUX1NZTUJPTChwYXJlbnRfbWVtX2Nncm91cCk7CiAKQEAgLTU0MTAsOSArNDc5MSw5IEBACiAJLyogcm9vdCA/ICovCiAJaWYgKHBhcmVudF9jc3MgPT0gTlVMTCkgewogCQlyb290X21lbV9jZ3JvdXAgPSBtZW1jZzsKLQkJcmVzX2NvdW50ZXJfaW5pdCgmbWVtY2ctPnJlcywgTlVMTCk7Ci0JCXJlc19jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1zdywgTlVMTCk7Ci0JCXJlc19jb3VudGVyX2luaXQoJm1lbWNnLT5rbWVtLCBOVUxMKTsKKwkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1vcnksIE5VTEwpOworCQlwYWdlX2NvdW50ZXJfaW5pdCgmbWVtY2ctPm1lbXN3LCBOVUxMKTsKKwkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5rbWVtLCBOVUxMKTsKIAl9CiAKIAltZW1jZy0+bGFzdF9zY2FubmVkX25vZGUgPSBNQVhfTlVNTk9ERVM7CkBAIC01NDUxLDE4ICs0ODMyLDE4IEBACiAJbWVtY2ctPnN3YXBwaW5lc3MgPSBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KTsKIAogCWlmIChwYXJlbnQtPnVzZV9oaWVyYXJjaHkpIHsKLQkJcmVzX2NvdW50ZXJfaW5pdCgmbWVtY2ctPnJlcywgJnBhcmVudC0+cmVzKTsKLQkJcmVzX2NvdW50ZXJfaW5pdCgmbWVtY2ctPm1lbXN3LCAmcGFyZW50LT5tZW1zdyk7Ci0JCXJlc19jb3VudGVyX2luaXQoJm1lbWNnLT5rbWVtLCAmcGFyZW50LT5rbWVtKTsKKwkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1vcnksICZwYXJlbnQtPm1lbW9yeSk7CisJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtc3csICZwYXJlbnQtPm1lbXN3KTsKKwkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5rbWVtLCAmcGFyZW50LT5rbWVtKTsKIAogCQkvKgogCQkgKiBObyBuZWVkIHRvIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBiZWNhdXNlIGNncm91cAogCQkgKiBjb3JlIGd1YXJhbnRlZXMgaXRzIGV4aXN0ZW5jZS4KIAkJICovCiAJfSBlbHNlIHsKLQkJcmVzX2NvdW50ZXJfaW5pdCgmbWVtY2ctPnJlcywgTlVMTCk7Ci0JCXJlc19jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1zdywgTlVMTCk7Ci0JCXJlc19jb3VudGVyX2luaXQoJm1lbWNnLT5rbWVtLCBOVUxMKTsKKwkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1vcnksIE5VTEwpOworCQlwYWdlX2NvdW50ZXJfaW5pdCgmbWVtY2ctPm1lbXN3LCBOVUxMKTsKKwkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5rbWVtLCBOVUxMKTsKIAkJLyoKIAkJICogRGVlcGVyIGhpZXJhY2h5IHdpdGggdXNlX2hpZXJhcmNoeSA9PSBmYWxzZSBkb2Vzbid0IG1ha2UKIAkJICogbXVjaCBzZW5zZSBzbyBsZXQgY2dyb3VwIHN1YnN5c3RlbSBrbm93IGFib3V0IHRoaXMKQEAgLTU0ODcsMjkgKzQ4NjgsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEFubm91bmNlIGFsbCBwYXJlbnRzIHRoYXQgYSBncm91cCBmcm9tIHRoZWlyIGhpZXJhcmNoeSBpcyBnb25lLgotICovCi1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2ludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBtZW1jZzsKLQotCXdoaWxlICgocGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAocGFyZW50KSkpCi0JCW1lbV9jZ3JvdXBfaXRlcl9pbnZhbGlkYXRlKHBhcmVudCk7Ci0KLQkvKgotCSAqIGlmIHRoZSByb290IG1lbWNnIGlzIG5vdCBoaWVyYXJjaGljYWwgd2UgaGF2ZSB0byBjaGVjayBpdAotCSAqIGV4cGxpY2l0ZWx5LgotCSAqLwotCWlmICghcm9vdF9tZW1fY2dyb3VwLT51c2VfaGllcmFyY2h5KQotCQltZW1fY2dyb3VwX2l0ZXJfaW52YWxpZGF0ZShyb290X21lbV9jZ3JvdXApOwotfQotCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2Nzcyhjc3MpOwogCXN0cnVjdCBtZW1fY2dyb3VwX2V2ZW50ICpldmVudCwgKnRtcDsKLQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqaXRlcjsKIAogCS8qCiAJICogVW5yZWdpc3RlciBldmVudHMgYW5kIG5vdGlmeSB1c2Vyc3BhY2UuCkBAIC01NTIzLDE3ICs0ODg1LDYgQEAKIAl9CiAJc3Bpbl91bmxvY2soJm1lbWNnLT5ldmVudF9saXN0X2xvY2spOwogCi0Ja21lbV9jZ3JvdXBfY3NzX29mZmxpbmUobWVtY2cpOwotCi0JbWVtX2Nncm91cF9pbnZhbGlkYXRlX3JlY2xhaW1faXRlcmF0b3JzKG1lbWNnKTsKLQotCS8qCi0JICogVGhpcyByZXF1aXJlcyB0aGF0IG9mZmxpbmluZyBpcyBzZXJpYWxpemVkLiAgUmlnaHQgbm93IHRoYXQgaXMKLQkgKiBndWFyYW50ZWVkIGJlY2F1c2UgY3NzX2tpbGxlZF93b3JrX2ZuKCkgaG9sZHMgdGhlIGNncm91cF9tdXRleC4KLQkgKi8KLQljc3NfZm9yX2VhY2hfZGVzY2VuZGFudF9wb3N0KGl0ZXIsIGNzcykKLQkJbWVtX2Nncm91cF9yZXBhcmVudF9jaGFyZ2VzKG1lbV9jZ3JvdXBfZnJvbV9jc3MoaXRlcikpOwotCiAJbWVtY2dfdW5yZWdpc3Rlcl9hbGxfY2FjaGVzKG1lbWNnKTsKIAl2bXByZXNzdXJlX2NsZWFudXAoJm1lbWNnLT52bXByZXNzdXJlKTsKIH0KQEAgLTU1NDEsNDIgKzQ4OTIsNiBAQAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTsKLQkvKgotCSAqIFhYWDogY3NzX29mZmxpbmUoKSB3b3VsZCBiZSB3aGVyZSB3ZSBzaG91bGQgcmVwYXJlbnQgYWxsCi0JICogbWVtb3J5IHRvIHByZXBhcmUgdGhlIGNncm91cCBmb3IgZGVzdHJ1Y3Rpb24uICBIb3dldmVyLAotCSAqIG1lbWNnIGRvZXMgbm90IGRvIGNzc190cnlnZXRfb25saW5lKCkgYW5kIHJlc19jb3VudGVyIGNoYXJnaW5nCi0JICogdW5kZXIgdGhlIHNhbWUgUkNVIGxvY2sgcmVnaW9uLCB3aGljaCBtZWFucyB0aGF0IGNoYXJnaW5nCi0JICogY291bGQgcmFjZSB3aXRoIG9mZmxpbmluZy4gIE9mZmxpbmluZyBvbmx5IGhhcHBlbnMgdG8KLQkgKiBjZ3JvdXBzIHdpdGggbm8gdGFza3MgaW4gdGhlbSBidXQgY2hhcmdlcyBjYW4gc2hvdyB1cAotCSAqIHdpdGhvdXQgYW55IHRhc2tzIGZyb20gdGhlIHN3YXBpbiBwYXRoIHdoZW4gdGhlIHRhcmdldAotCSAqIG1lbWNnIGlzIGxvb2tlZCB1cCBmcm9tIHRoZSBzd2Fwb3V0IHJlY29yZCBhbmQgbm90IGZyb20gdGhlCi0JICogY3VycmVudCB0YXNrIGFzIGl0IHVzdWFsbHkgaXMuICBBIHJhY2UgbGlrZSB0aGlzIGNhbiBsZWFrCi0JICogY2hhcmdlcyBhbmQgcHV0IHBhZ2VzIHdpdGggc3RhbGUgY2dyb3VwIHBvaW50ZXJzIGludG8KLQkgKiBjaXJjdWxhdGlvbjoKLQkgKgotCSAqICMwICAgICAgICAgICAgICAgICAgICAgICAgIzEKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cF9zd2FwX2Nncm91cF9pZCgpCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICByY3VfcmVhZF9sb2NrKCkKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbV9jZ3JvdXBfbG9va3VwKCkKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc190cnlnZXRfb25saW5lKCkKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjdV9yZWFkX3VubG9jaygpCi0JICogZGlzYWJsZSBjc3NfdHJ5Z2V0X29ubGluZSgpCi0JICogY2FsbF9yY3UoKQotCSAqICAgb2ZmbGluZV9jc3MoKQotCSAqICAgICByZXBhcmVudF9jaGFyZ2VzKCkKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc19jb3VudGVyX2NoYXJnZSgpCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NfcHV0KCkKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzX2ZyZWUoKQotCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgcGMtPm1lbV9jZ3JvdXAgPSBkZWFkIG1lbWNnCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgcGFnZSB0byBscnUKLQkgKgotCSAqIFRoZSBidWxrIG9mIHRoZSBjaGFyZ2VzIGFyZSBzdGlsbCBtb3ZlZCBpbiBvZmZsaW5lX2NzcygpIHRvCi0JICogYXZvaWQgcGlubmluZyBhIGxvdCBvZiBwYWdlcyBpbiBjYXNlIGEgbG9uZy10ZXJtIHJlZmVyZW5jZQotCSAqIGxpa2UgYSBzd2Fwb3V0IHJlY29yZCBpcyBkZWZlcnJpbmcgdGhlIGNzc19mcmVlKCkgdG8gbG9uZwotCSAqIGFmdGVyIG9mZmxpbmluZy4gIEJ1dCB0aGlzIG1ha2VzIHN1cmUgd2UgY2F0Y2ggYW55IGNoYXJnZXMKLQkgKiBtYWRlIGFmdGVyIG9mZmxpbmluZzoKLQkgKi8KLQltZW1fY2dyb3VwX3JlcGFyZW50X2NoYXJnZXMobWVtY2cpOwogCiAJbWVtY2dfZGVzdHJveV9rbWVtKG1lbWNnKTsKIAlfX21lbV9jZ3JvdXBfZnJlZShtZW1jZyk7CkBAIC01NTk5LDEwICs0OTE0LDEwIEBACiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2Nzcyhjc3MpOwogCi0JbWVtX2Nncm91cF9yZXNpemVfbGltaXQobWVtY2csIFVMTE9OR19NQVgpOwotCW1lbV9jZ3JvdXBfcmVzaXplX21lbXN3X2xpbWl0KG1lbWNnLCBVTExPTkdfTUFYKTsKLQltZW1jZ191cGRhdGVfa21lbV9saW1pdChtZW1jZywgVUxMT05HX01BWCk7Ci0JcmVzX2NvdW50ZXJfc2V0X3NvZnRfbGltaXQoJm1lbWNnLT5yZXMsIFVMTE9OR19NQVgpOworCW1lbV9jZ3JvdXBfcmVzaXplX2xpbWl0KG1lbWNnLCBQQUdFX0NPVU5URVJfTUFYKTsKKwltZW1fY2dyb3VwX3Jlc2l6ZV9tZW1zd19saW1pdChtZW1jZywgUEFHRV9DT1VOVEVSX01BWCk7CisJbWVtY2dfdXBkYXRlX2ttZW1fbGltaXQobWVtY2csIFBBR0VfQ09VTlRFUl9NQVgpOworCW1lbWNnLT5zb2Z0X2xpbWl0ID0gMDsKIH0KIAogI2lmZGVmIENPTkZJR19NTVUKQEAgLTU3NTgsNyArNTA3Myw2IEBACiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlbnQsIHVuaW9uIG1jX3RhcmdldCAqdGFyZ2V0KQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKLQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCWVudW0gbWNfdGFyZ2V0X3R5cGUgcmV0ID0gTUNfVEFSR0VUX05PTkU7CiAJc3dwX2VudHJ5X3QgZW50ID0geyAudmFsID0gMCB9OwogCkBAIC01NzcyLDEzICs1MDg2LDEyIEBACiAJaWYgKCFwYWdlICYmICFlbnQudmFsKQogCQlyZXR1cm4gcmV0OwogCWlmIChwYWdlKSB7Ci0JCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwogCQkvKgogCQkgKiBEbyBvbmx5IGxvb3NlIGNoZWNrIHcvbyBzZXJpYWxpemF0aW9uLgotCQkgKiBtZW1fY2dyb3VwX21vdmVfYWNjb3VudCgpIGNoZWNrcyB0aGUgcGMgaXMgdmFsaWQgb3IKKwkJICogbWVtX2Nncm91cF9tb3ZlX2FjY291bnQoKSBjaGVja3MgdGhlIHBhZ2UgaXMgdmFsaWQgb3IKIAkJICogbm90IHVuZGVyIExSVSBleGNsdXNpb24uCiAJCSAqLwotCQlpZiAoUGFnZUNncm91cFVzZWQocGMpICYmIHBjLT5tZW1fY2dyb3VwID09IG1jLmZyb20pIHsKKwkJaWYgKHBhZ2UtPm1lbV9jZ3JvdXAgPT0gbWMuZnJvbSkgewogCQkJcmV0ID0gTUNfVEFSR0VUX1BBR0U7CiAJCQlpZiAodGFyZ2V0KQogCQkJCXRhcmdldC0+cGFnZSA9IHBhZ2U7CkBAIC01ODA2LDE1ICs1MTE5LDEzIEBACiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kLCB1bmlvbiBtY190YXJnZXQgKnRhcmdldCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7Ci0Jc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKIAllbnVtIG1jX3RhcmdldF90eXBlIHJldCA9IE1DX1RBUkdFVF9OT05FOwogCiAJcGFnZSA9IHBtZF9wYWdlKHBtZCk7CiAJVk1fQlVHX09OX1BBR0UoIXBhZ2UgfHwgIVBhZ2VIZWFkKHBhZ2UpLCBwYWdlKTsKIAlpZiAoIW1vdmVfYW5vbigpKQogCQlyZXR1cm4gcmV0OwotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCWlmIChQYWdlQ2dyb3VwVXNlZChwYykgJiYgcGMtPm1lbV9jZ3JvdXAgPT0gbWMuZnJvbSkgeworCWlmIChwYWdlLT5tZW1fY2dyb3VwID09IG1jLmZyb20pIHsKIAkJcmV0ID0gTUNfVEFSR0VUX1BBR0U7CiAJCWlmICh0YXJnZXQpIHsKIAkJCWdldF9wYWdlKHBhZ2UpOwpAQCAtNTg5Nyw3ICs1MjA4LDYgQEAKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSA9IG1jLmZyb207CiAJc3RydWN0IG1lbV9jZ3JvdXAgKnRvID0gbWMudG87Ci0JaW50IGk7CiAKIAkvKiB3ZSBtdXN0IHVuY2hhcmdlIGFsbCB0aGUgbGVmdG92ZXIgcHJlY2hhcmdlcyBmcm9tIG1jLnRvICovCiAJaWYgKG1jLnByZWNoYXJnZSkgewpAQCAtNTkxNiwxOSArNTIyNiwxNyBAQAogCWlmIChtYy5tb3ZlZF9zd2FwKSB7CiAJCS8qIHVuY2hhcmdlIHN3YXAgYWNjb3VudCBmcm9tIHRoZSBvbGQgY2dyb3VwICovCiAJCWlmICghbWVtX2Nncm91cF9pc19yb290KG1jLmZyb20pKQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1jLmZyb20tPm1lbXN3LAotCQkJCQkgICAgIFBBR0VfU0laRSAqIG1jLm1vdmVkX3N3YXApOwotCi0JCWZvciAoaSA9IDA7IGkgPCBtYy5tb3ZlZF9zd2FwOyBpKyspCi0JCQljc3NfcHV0KCZtYy5mcm9tLT5jc3MpOworCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZtYy5mcm9tLT5tZW1zdywgbWMubW92ZWRfc3dhcCk7CiAKIAkJLyoKLQkJICogd2UgY2hhcmdlZCBib3RoIHRvLT5yZXMgYW5kIHRvLT5tZW1zdywgc28gd2Ugc2hvdWxkCi0JCSAqIHVuY2hhcmdlIHRvLT5yZXMuCisJCSAqIHdlIGNoYXJnZWQgYm90aCB0by0+bWVtb3J5IGFuZCB0by0+bWVtc3csIHNvIHdlCisJCSAqIHNob3VsZCB1bmNoYXJnZSB0by0+bWVtb3J5LgogCQkgKi8KIAkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWMudG8pKQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1jLnRvLT5yZXMsCi0JCQkJCSAgICAgUEFHRV9TSVpFICogbWMubW92ZWRfc3dhcCk7CisJCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJm1jLnRvLT5tZW1vcnksIG1jLm1vdmVkX3N3YXApOworCisJCWNzc19wdXRfbWFueSgmbWMuZnJvbS0+Y3NzLCBtYy5tb3ZlZF9zd2FwKTsKKwogCQkvKiB3ZSd2ZSBhbHJlYWR5IGRvbmUgY3NzX2dldChtYy50bykgKi8KIAkJbWMubW92ZWRfc3dhcCA9IDA7CiAJfQpAQCAtNTkzOSw4ICs1MjQ3LDYgQEAKIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jbGVhcl9tYyh2b2lkKQogewotCXN0cnVjdCBtZW1fY2dyb3VwICpmcm9tID0gbWMuZnJvbTsKLQogCS8qCiAJICogd2UgbXVzdCBjbGVhciBtb3ZpbmdfdGFzayBiZWZvcmUgd2FraW5nIHVwIHdhaXRlcnMgYXQgdGhlIGVuZCBvZgogCSAqIHRhc2sgbWlncmF0aW9uLgpAQCAtNTk1MSw3ICs1MjU3LDYgQEAKIAltYy5mcm9tID0gTlVMTDsKIAltYy50byA9IE5VTEw7CiAJc3Bpbl91bmxvY2soJm1jLmxvY2spOwotCW1lbV9jZ3JvdXBfZW5kX21vdmUoZnJvbSk7CiB9CiAKIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCkBAIC01OTg0LDcgKzUyODksNyBAQAogCQkJVk1fQlVHX09OKG1jLnByZWNoYXJnZSk7CiAJCQlWTV9CVUdfT04obWMubW92ZWRfY2hhcmdlKTsKIAkJCVZNX0JVR19PTihtYy5tb3ZlZF9zd2FwKTsKLQkJCW1lbV9jZ3JvdXBfc3RhcnRfbW92ZShmcm9tKTsKKwogCQkJc3Bpbl9sb2NrKCZtYy5sb2NrKTsKIAkJCW1jLmZyb20gPSBmcm9tOwogCQkJbWMudG8gPSBtZW1jZzsKQEAgLTYwMDQsNyArNTMwOSw4IEBACiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywKIAkJCQkgICAgIHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKIHsKLQltZW1fY2dyb3VwX2NsZWFyX21jKCk7CisJaWYgKG1jLnRvKQorCQltZW1fY2dyb3VwX2NsZWFyX21jKCk7CiB9CiAKIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwKQEAgLTYwMTgsNyArNTMyNCw2IEBACiAJZW51bSBtY190YXJnZXRfdHlwZSB0YXJnZXRfdHlwZTsKIAl1bmlvbiBtY190YXJnZXQgdGFyZ2V0OwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAKIAkvKgogCSAqIFdlIGRvbid0IHRha2UgY29tcG91bmRfbG9jaygpIGhlcmUgYnV0IG5vIHJhY2Ugd2l0aCBzcGxpdHRpbmcgdGhwCkBAIC02MDM5LDkgKzUzNDQsOCBAQAogCQlpZiAodGFyZ2V0X3R5cGUgPT0gTUNfVEFSR0VUX1BBR0UpIHsKIAkJCXBhZ2UgPSB0YXJnZXQucGFnZTsKIAkJCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkgewotCQkJCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwogCQkJCWlmICghbWVtX2Nncm91cF9tb3ZlX2FjY291bnQocGFnZSwgSFBBR0VfUE1EX05SLAotCQkJCQkJCXBjLCBtYy5mcm9tLCBtYy50bykpIHsKKwkJCQkJCQkgICAgIG1jLmZyb20sIG1jLnRvKSkgewogCQkJCQltYy5wcmVjaGFyZ2UgLT0gSFBBR0VfUE1EX05SOwogCQkJCQltYy5tb3ZlZF9jaGFyZ2UgKz0gSFBBR0VfUE1EX05SOwogCQkJCX0KQEAgLTYwNjksOSArNTM3Myw3IEBACiAJCQlwYWdlID0gdGFyZ2V0LnBhZ2U7CiAJCQlpZiAoaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkKIAkJCQlnb3RvIHB1dDsKLQkJCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCQkJaWYgKCFtZW1fY2dyb3VwX21vdmVfYWNjb3VudChwYWdlLCAxLCBwYywKLQkJCQkJCSAgICAgbWMuZnJvbSwgbWMudG8pKSB7CisJCQlpZiAoIW1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBhZ2UsIDEsIG1jLmZyb20sIG1jLnRvKSkgewogCQkJCW1jLnByZWNoYXJnZS0tOwogCQkJCS8qIHdlIHVuY2hhcmdlIGZyb20gbWMuZnJvbSBsYXRlci4gKi8KIAkJCQltYy5tb3ZlZF9jaGFyZ2UrKzsKQEAgLTYxMTUsNiArNTQxNywxMyBAQAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCiAJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKKwkvKgorCSAqIFNpZ25hbCBtZW1fY2dyb3VwX2JlZ2luX3BhZ2Vfc3RhdCgpIHRvIHRha2UgdGhlIG1lbWNnJ3MKKwkgKiBtb3ZlX2xvY2sgd2hpbGUgd2UncmUgbW92aW5nIGl0cyBwYWdlcyB0byBhbm90aGVyIG1lbWNnLgorCSAqIFRoZW4gd2FpdCBmb3IgYWxyZWFkeSBzdGFydGVkIFJDVS1vbmx5IHVwZGF0ZXMgdG8gZmluaXNoLgorCSAqLworCWF0b21pY19pbmMoJm1jLmZyb20tPm1vdmluZ19hY2NvdW50KTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIHJldHJ5OgogCWlmICh1bmxpa2VseSghZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpKSB7CiAJCS8qCkBAIC02MTQ3LDYgKzU0NTYsNyBAQAogCQkJYnJlYWs7CiAJfQogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJYXRvbWljX2RlYygmbWMuZnJvbS0+bW92aW5nX2FjY291bnQpOwogfQogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX21vdmVfdGFzayhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLApAQCAtNjI1MCw3ICs1NTYwLDcgQEAKICAqLwogdm9pZCBtZW1fY2dyb3VwX3N3YXBvdXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN3cF9lbnRyeV90IGVudHJ5KQogewotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXVuc2lnbmVkIHNob3J0IG9sZGlkOwogCiAJVk1fQlVHX09OX1BBR0UoUGFnZUxSVShwYWdlKSwgcGFnZSk7CkBAIC02MjU5LDIwICs1NTY5LDI2IEBACiAJaWYgKCFkb19zd2FwX2FjY291bnQpCiAJCXJldHVybjsKIAotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOworCW1lbWNnID0gcGFnZS0+bWVtX2Nncm91cDsKIAogCS8qIFJlYWRhaGVhZCBwYWdlLCBuZXZlciBjaGFyZ2VkICovCi0JaWYgKCFQYWdlQ2dyb3VwVXNlZChwYykpCisJaWYgKCFtZW1jZykKIAkJcmV0dXJuOwogCi0JVk1fQlVHX09OX1BBR0UoIShwYy0+ZmxhZ3MgJiBQQ0dfTUVNU1cpLCBwYWdlKTsKLQotCW9sZGlkID0gc3dhcF9jZ3JvdXBfcmVjb3JkKGVudHJ5LCBtZW1fY2dyb3VwX2lkKHBjLT5tZW1fY2dyb3VwKSk7CisJb2xkaWQgPSBzd2FwX2Nncm91cF9yZWNvcmQoZW50cnksIG1lbV9jZ3JvdXBfaWQobWVtY2cpKTsKIAlWTV9CVUdfT05fUEFHRShvbGRpZCwgcGFnZSk7CisJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtY2csIHRydWUpOwogCi0JcGMtPmZsYWdzICY9IH5QQ0dfTUVNU1c7Ci0JY3NzX2dldCgmcGMtPm1lbV9jZ3JvdXAtPmNzcyk7Ci0JbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MocGMtPm1lbV9jZ3JvdXAsIHRydWUpOworCXBhZ2UtPm1lbV9jZ3JvdXAgPSBOVUxMOworCisJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQorCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1vcnksIDEpOworCisJLyogWFhYOiBjYWxsZXIgaG9sZHMgSVJRLXNhZmUgbWFwcGluZy0+dHJlZV9sb2NrICovCisJVk1fQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCisJbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhtZW1jZywgcGFnZSwgLTEpOworCW1lbWNnX2NoZWNrX2V2ZW50cyhtZW1jZywgcGFnZSk7CiB9CiAKIC8qKgpAQCAtNjI5NCw3ICs1NjEwLDcgQEAKIAltZW1jZyA9IG1lbV9jZ3JvdXBfbG9va3VwKGlkKTsKIAlpZiAobWVtY2cpIHsKIAkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1zdywgUEFHRV9TSVpFKTsKKwkJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCAxKTsKIAkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtY2csIGZhbHNlKTsKIAkJY3NzX3B1dCgmbWVtY2ctPmNzcyk7CiAJfQpAQCAtNjMzMCw3ICs1NjQ2LDYgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkgewotCQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwogCQkvKgogCQkgKiBFdmVyeSBzd2FwIGZhdWx0IGFnYWluc3QgYSBzaW5nbGUgcGFnZSB0cmllcyB0byBjaGFyZ2UgdGhlCiAJCSAqIHBhZ2UsIGJhaWwgYXMgZWFybHkgYXMgcG9zc2libGUuICBzaG1lbV91bnVzZSgpIGVuY291bnRlcnMKQEAgLTYzMzgsNyArNTY1Myw3IEBACiAJCSAqIHRoZSBwYWdlIGxvY2ssIHdoaWNoIHNlcmlhbGl6ZXMgc3dhcCBjYWNoZSByZW1vdmFsLCB3aGljaAogCQkgKiBpbiB0dXJuIHNlcmlhbGl6ZXMgdW5jaGFyZ2luZy4KIAkJICovCi0JCWlmIChQYWdlQ2dyb3VwVXNlZChwYykpCisJCWlmIChwYWdlLT5tZW1fY2dyb3VwKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC02NDUyLDE5ICs1NzY3LDE2IEBACiB9CiAKIHN0YXRpYyB2b2lkIHVuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBwZ3Bnb3V0LAotCQkJICAgdW5zaWduZWQgbG9uZyBucl9tZW0sIHVuc2lnbmVkIGxvbmcgbnJfbWVtc3csCiAJCQkgICB1bnNpZ25lZCBsb25nIG5yX2Fub24sIHVuc2lnbmVkIGxvbmcgbnJfZmlsZSwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfaHVnZSwgc3RydWN0IHBhZ2UgKmR1bW15X3BhZ2UpCiB7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IG5yX2Fub24gKyBucl9maWxlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHsKLQkJaWYgKG5yX21lbSkKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+cmVzLAotCQkJCQkgICAgIG5yX21lbSAqIFBBR0VfU0laRSk7Ci0JCWlmIChucl9tZW1zdykKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csCi0JCQkJCSAgICAgbnJfbWVtc3cgKiBQQUdFX1NJWkUpOworCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1vcnksIG5yX3BhZ2VzKTsKKwkJaWYgKGRvX3N3YXBfYWNjb3VudCkKKwkJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBucl9wYWdlcyk7CiAJCW1lbWNnX29vbV9yZWNvdmVyKG1lbWNnKTsKIAl9CiAKQEAgLTY0NzMsMjcgKzU3ODUsMjcgQEAKIAlfX3RoaXNfY3B1X3N1YihtZW1jZy0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9TVEFUX0NBQ0hFXSwgbnJfZmlsZSk7CiAJX190aGlzX2NwdV9zdWIobWVtY2ctPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9SU1NfSFVHRV0sIG5yX2h1Z2UpOwogCV9fdGhpc19jcHVfYWRkKG1lbWNnLT5zdGF0LT5ldmVudHNbTUVNX0NHUk9VUF9FVkVOVFNfUEdQR09VVF0sIHBncGdvdXQpOwotCV9fdGhpc19jcHVfYWRkKG1lbWNnLT5zdGF0LT5ucl9wYWdlX2V2ZW50cywgbnJfYW5vbiArIG5yX2ZpbGUpOworCV9fdGhpc19jcHVfYWRkKG1lbWNnLT5zdGF0LT5ucl9wYWdlX2V2ZW50cywgbnJfcGFnZXMpOwogCW1lbWNnX2NoZWNrX2V2ZW50cyhtZW1jZywgZHVtbXlfcGFnZSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQorCQljc3NfcHV0X21hbnkoJm1lbWNnLT5jc3MsIG5yX3BhZ2VzKTsKIH0KIAogc3RhdGljIHZvaWQgdW5jaGFyZ2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlX2xpc3QpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG5yX21lbXN3ID0gMDsKIAl1bnNpZ25lZCBsb25nIG5yX2Fub24gPSAwOwogCXVuc2lnbmVkIGxvbmcgbnJfZmlsZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBucl9odWdlID0gMDsKIAl1bnNpZ25lZCBsb25nIHBncGdvdXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgbnJfbWVtID0gMDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0OwogCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJbmV4dCA9IHBhZ2VfbGlzdC0+bmV4dDsKIAlkbyB7CiAJCXVuc2lnbmVkIGludCBucl9wYWdlcyA9IDE7Ci0JCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAKIAkJcGFnZSA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IHBhZ2UsIGxydSk7CiAJCW5leHQgPSBwYWdlLT5scnUubmV4dDsKQEAgLTY1MDEsMjQgKzU4MTMsMjIgQEAKIAkJVk1fQlVHX09OX1BBR0UoUGFnZUxSVShwYWdlKSwgcGFnZSk7CiAJCVZNX0JVR19PTl9QQUdFKHBhZ2VfY291bnQocGFnZSksIHBhZ2UpOwogCi0JCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCQlpZiAoIVBhZ2VDZ3JvdXBVc2VkKHBjKSkKKwkJaWYgKCFwYWdlLT5tZW1fY2dyb3VwKQogCQkJY29udGludWU7CiAKIAkJLyoKIAkJICogTm9ib2R5IHNob3VsZCBiZSBjaGFuZ2luZyBvciBzZXJpb3VzbHkgbG9va2luZyBhdAotCQkgKiBwYy0+bWVtX2Nncm91cCBhbmQgcGMtPmZsYWdzIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUKLQkJICogZnVsbHkgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgcGFnZS4KKwkJICogcGFnZS0+bWVtX2Nncm91cCBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGZ1bGx5CisJCSAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHBhZ2UuCiAJCSAqLwogCi0JCWlmIChtZW1jZyAhPSBwYy0+bWVtX2Nncm91cCkgeworCQlpZiAobWVtY2cgIT0gcGFnZS0+bWVtX2Nncm91cCkgewogCQkJaWYgKG1lbWNnKSB7Ci0JCQkJdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHBncGdvdXQsIG5yX21lbSwgbnJfbWVtc3csCi0JCQkJCSAgICAgICBucl9hbm9uLCBucl9maWxlLCBucl9odWdlLCBwYWdlKTsKLQkJCQlwZ3Bnb3V0ID0gbnJfbWVtID0gbnJfbWVtc3cgPSAwOwotCQkJCW5yX2Fub24gPSBucl9maWxlID0gbnJfaHVnZSA9IDA7CisJCQkJdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHBncGdvdXQsIG5yX2Fub24sIG5yX2ZpbGUsCisJCQkJCSAgICAgICBucl9odWdlLCBwYWdlKTsKKwkJCQlwZ3Bnb3V0ID0gbnJfYW5vbiA9IG5yX2ZpbGUgPSBucl9odWdlID0gMDsKIAkJCX0KLQkJCW1lbWNnID0gcGMtPm1lbV9jZ3JvdXA7CisJCQltZW1jZyA9IHBhZ2UtPm1lbV9jZ3JvdXA7CiAJCX0KIAogCQlpZiAoUGFnZVRyYW5zSHVnZShwYWdlKSkgewpAQCAtNjUzMiwxOCArNTg0MiwxNCBAQAogCQllbHNlCiAJCQlucl9maWxlICs9IG5yX3BhZ2VzOwogCi0JCWlmIChwYy0+ZmxhZ3MgJiBQQ0dfTUVNKQotCQkJbnJfbWVtICs9IG5yX3BhZ2VzOwotCQlpZiAocGMtPmZsYWdzICYgUENHX01FTVNXKQotCQkJbnJfbWVtc3cgKz0gbnJfcGFnZXM7Ci0JCXBjLT5mbGFncyA9IDA7CisJCXBhZ2UtPm1lbV9jZ3JvdXAgPSBOVUxMOwogCiAJCXBncGdvdXQrKzsKIAl9IHdoaWxlIChuZXh0ICE9IHBhZ2VfbGlzdCk7CiAKIAlpZiAobWVtY2cpCi0JCXVuY2hhcmdlX2JhdGNoKG1lbWNnLCBwZ3Bnb3V0LCBucl9tZW0sIG5yX21lbXN3LAotCQkJICAgICAgIG5yX2Fub24sIG5yX2ZpbGUsIG5yX2h1Z2UsIHBhZ2UpOworCQl1bmNoYXJnZV9iYXRjaChtZW1jZywgcGdwZ291dCwgbnJfYW5vbiwgbnJfZmlsZSwKKwkJCSAgICAgICBucl9odWdlLCBwYWdlKTsKIH0KIAogLyoqCkBAIC02NTU1LDE0ICs1ODYxLDExIEBACiAgKi8KIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwotCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwogCiAJLyogRG9uJ3QgdG91Y2ggcGFnZS0+bHJ1IG9mIGFueSByYW5kb20gcGFnZSwgcHJlLWNoZWNrOiAqLwotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCWlmICghUGFnZUNncm91cFVzZWQocGMpKQorCWlmICghcGFnZS0+bWVtX2Nncm91cCkKIAkJcmV0dXJuOwogCiAJSU5JVF9MSVNUX0hFQUQoJnBhZ2UtPmxydSk7CkBAIC02NTk4LDcgKzU5MDEsNyBAQAogdm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IHBhZ2UgKm9sZHBhZ2UsIHN0cnVjdCBwYWdlICpuZXdwYWdlLAogCQkJYm9vbCBscnVjYXJlKQogewotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCWludCBpc29sYXRlZDsKIAogCVZNX0JVR19PTl9QQUdFKCFQYWdlTG9ja2VkKG9sZHBhZ2UpLCBvbGRwYWdlKTsKQEAgLTY2MTMsMjcgKzU5MTYsMjggQEAKIAkJcmV0dXJuOwogCiAJLyogUGFnZSBjYWNoZSByZXBsYWNlbWVudDogbmV3IHBhZ2UgYWxyZWFkeSBjaGFyZ2VkPyAqLwotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKG5ld3BhZ2UpOwotCWlmIChQYWdlQ2dyb3VwVXNlZChwYykpCisJaWYgKG5ld3BhZ2UtPm1lbV9jZ3JvdXApCiAJCXJldHVybjsKIAotCS8qIFJlLWVudHJhbnQgbWlncmF0aW9uOiBvbGQgcGFnZSBhbHJlYWR5IHVuY2hhcmdlZD8gKi8KLQlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChvbGRwYWdlKTsKLQlpZiAoIVBhZ2VDZ3JvdXBVc2VkKHBjKSkKKwkvKgorCSAqIFN3YXBjYWNoZSByZWFkYWhlYWQgcGFnZXMgY2FuIGdldCBtaWdyYXRlZCBiZWZvcmUgYmVpbmcKKwkgKiBjaGFyZ2VkLCBhbmQgbWlncmF0aW9uIGZyb20gY29tcGFjdGlvbiBjYW4gaGFwcGVuIHRvIGFuCisJICogdW5jaGFyZ2VkIHBhZ2Ugd2hlbiB0aGUgUEZOIHdhbGtlciBmaW5kcyBhIHBhZ2UgdGhhdAorCSAqIHJlY2xhaW0ganVzdCBwdXQgYmFjayBvbiB0aGUgTFJVIGJ1dCBoYXMgbm90IHJlbGVhc2VkIHlldC4KKwkgKi8KKwltZW1jZyA9IG9sZHBhZ2UtPm1lbV9jZ3JvdXA7CisJaWYgKCFtZW1jZykKIAkJcmV0dXJuOwogCi0JVk1fQlVHX09OX1BBR0UoIShwYy0+ZmxhZ3MgJiBQQ0dfTUVNKSwgb2xkcGFnZSk7Ci0JVk1fQlVHX09OX1BBR0UoZG9fc3dhcF9hY2NvdW50ICYmICEocGMtPmZsYWdzICYgUENHX01FTVNXKSwgb2xkcGFnZSk7Ci0KIAlpZiAobHJ1Y2FyZSkKIAkJbG9ja19wYWdlX2xydShvbGRwYWdlLCAmaXNvbGF0ZWQpOwogCi0JcGMtPmZsYWdzID0gMDsKKwlvbGRwYWdlLT5tZW1fY2dyb3VwID0gTlVMTDsKIAogCWlmIChscnVjYXJlKQogCQl1bmxvY2tfcGFnZV9scnUob2xkcGFnZSwgaXNvbGF0ZWQpOwogCi0JY29tbWl0X2NoYXJnZShuZXdwYWdlLCBwYy0+bWVtX2Nncm91cCwgbHJ1Y2FyZSk7CisJY29tbWl0X2NoYXJnZShuZXdwYWdlLCBtZW1jZywgbHJ1Y2FyZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA4NjM5ZjZiLi5lNWVlMGNhIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCQlscnVfYWRkX2RyYWluX2FsbCgpOwogCQlpZiAoUGFnZUxSVShwKSkKIAkJCXJldHVybjsKLQkJZHJhaW5fYWxsX3BhZ2VzKCk7CisJCWRyYWluX2FsbF9wYWdlcyhwYWdlX3pvbmUocCkpOwogCQlpZiAoUGFnZUxSVShwKSB8fCBpc19mcmVlX2J1ZGR5X3BhZ2UocCkpCiAJCQlyZXR1cm47CiAJfQpAQCAtODYwLDcgKzg2MCw2IEBACiAJaW50IGNvdW50OwogCiAJcmVzdWx0ID0gcHMtPmFjdGlvbihwLCBwZm4pOwotCWFjdGlvbl9yZXN1bHQocGZuLCBwcy0+bXNnLCByZXN1bHQpOwogCiAJY291bnQgPSBwYWdlX2NvdW50KHApIC0gMTsKIAlpZiAocHMtPmFjdGlvbiA9PSBtZV9zd2FwY2FjaGVfZGlydHkgJiYgcmVzdWx0ID09IERFTEFZRUQpCkBAIC04NzEsNiArODcwLDcgQEAKIAkJICAgICAgIHBmbiwgcHMtPm1zZywgY291bnQpOwogCQlyZXN1bHQgPSBGQUlMRUQ7CiAJfQorCWFjdGlvbl9yZXN1bHQocGZuLCBwcy0+bXNnLCByZXN1bHQpOwogCiAJLyogQ291bGQgZG8gbW9yZSBjaGVja3MgaGVyZSBpZiBwYWdlIGxvb2tzIG9rICovCiAJLyoKQEAgLTE2NjEsNyArMTY2MSw3IEBACiAJCQlpZiAoIWlzX2ZyZWVfYnVkZHlfcGFnZShwYWdlKSkKIAkJCQlscnVfYWRkX2RyYWluX2FsbCgpOwogCQkJaWYgKCFpc19mcmVlX2J1ZGR5X3BhZ2UocGFnZSkpCi0JCQkJZHJhaW5fYWxsX3BhZ2VzKCk7CisJCQkJZHJhaW5fYWxsX3BhZ2VzKHBhZ2Vfem9uZShwYWdlKSk7CiAJCQlTZXRQYWdlSFdQb2lzb24ocGFnZSk7CiAJCQlpZiAoIWlzX2ZyZWVfYnVkZHlfcGFnZShwYWdlKSkKIAkJCQlwcl9pbmZvKCJzb2Z0IG9mZmxpbmU6ICUjbHg6IHBhZ2UgbGVha2VkXG4iLApkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAzZTUwMzgzLi4wYjNmNmM3IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMjIwLDkgKzIyMCw2IEBACiAJLyogSXMgaXQgZnJvbSAwIHRvIH4wPyAqLwogCXRsYi0+ZnVsbG1tICAgICA9ICEoc3RhcnQgfCAoZW5kKzEpKTsKIAl0bGItPm5lZWRfZmx1c2hfYWxsID0gMDsKLQl0bGItPnN0YXJ0CT0gc3RhcnQ7Ci0JdGxiLT5lbmQJPSBlbmQ7Ci0JdGxiLT5uZWVkX2ZsdXNoID0gMDsKIAl0bGItPmxvY2FsLm5leHQgPSBOVUxMOwogCXRsYi0+bG9jYWwubnIgICA9IDA7CiAJdGxiLT5sb2NhbC5tYXggID0gQVJSQVlfU0laRSh0bGItPl9fcGFnZXMpOwpAQCAtMjMyLDE1ICsyMjksMjAgQEAKICNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQogCXRsYi0+YmF0Y2ggPSBOVUxMOwogI2VuZGlmCisKKwlfX3RsYl9yZXNldF9yYW5nZSh0bGIpOwogfQogCiBzdGF0aWMgdm9pZCB0bGJfZmx1c2hfbW11X3RsYm9ubHkoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIHsKLQl0bGItPm5lZWRfZmx1c2ggPSAwOworCWlmICghdGxiLT5lbmQpCisJCXJldHVybjsKKwogCXRsYl9mbHVzaCh0bGIpOwogI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCiAJdGxiX3RhYmxlX2ZsdXNoKHRsYik7CiAjZW5kaWYKKwlfX3RsYl9yZXNldF9yYW5nZSh0bGIpOwogfQogCiBzdGF0aWMgdm9pZCB0bGJfZmx1c2hfbW11X2ZyZWUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKQEAgLTI1Niw4ICsyNTgsNiBAQAogCiB2b2lkIHRsYl9mbHVzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIHsKLQlpZiAoIXRsYi0+bmVlZF9mbHVzaCkKLQkJcmV0dXJuOwogCXRsYl9mbHVzaF9tbXVfdGxib25seSh0bGIpOwogCXRsYl9mbHVzaF9tbXVfZnJlZSh0bGIpOwogfQpAQCAtMjkyLDcgKzI5Miw3IEBACiB7CiAJc3RydWN0IG1tdV9nYXRoZXJfYmF0Y2ggKmJhdGNoOwogCi0JVk1fQlVHX09OKCF0bGItPm5lZWRfZmx1c2gpOworCVZNX0JVR19PTighdGxiLT5lbmQpOwogCiAJYmF0Y2ggPSB0bGItPmFjdGl2ZTsKIAliYXRjaC0+cGFnZXNbYmF0Y2gtPm5yKytdID0gcGFnZTsKQEAgLTM1OSw4ICszNTksNiBAQAogewogCXN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKipiYXRjaCA9ICZ0bGItPmJhdGNoOwogCi0JdGxiLT5uZWVkX2ZsdXNoID0gMTsKLQogCS8qCiAJICogV2hlbiB0aGVyZSdzIGxlc3MgdGhlbiB0d28gdXNlcnMgb2YgdGhpcyBtbSB0aGVyZSBjYW5ub3QgYmUgYQogCSAqIGNvbmN1cnJlbnQgcGFnZS10YWJsZSB3YWxrLgpAQCAtODE1LDIwICs4MTMsMjAgQEAKIAkJaWYgKCFwdGVfZmlsZShwdGUpKSB7CiAJCQlzd3BfZW50cnlfdCBlbnRyeSA9IHB0ZV90b19zd3BfZW50cnkocHRlKTsKIAotCQkJaWYgKHN3YXBfZHVwbGljYXRlKGVudHJ5KSA8IDApCi0JCQkJcmV0dXJuIGVudHJ5LnZhbDsKKwkJCWlmIChsaWtlbHkoIW5vbl9zd2FwX2VudHJ5KGVudHJ5KSkpIHsKKwkJCQlpZiAoc3dhcF9kdXBsaWNhdGUoZW50cnkpIDwgMCkKKwkJCQkJcmV0dXJuIGVudHJ5LnZhbDsKIAotCQkJLyogbWFrZSBzdXJlIGRzdF9tbSBpcyBvbiBzd2Fwb2ZmJ3MgbW1saXN0LiAqLwotCQkJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmRzdF9tbS0+bW1saXN0KSkpIHsKLQkJCQlzcGluX2xvY2soJm1tbGlzdF9sb2NrKTsKLQkJCQlpZiAobGlzdF9lbXB0eSgmZHN0X21tLT5tbWxpc3QpKQotCQkJCQlsaXN0X2FkZCgmZHN0X21tLT5tbWxpc3QsCi0JCQkJCQkgJnNyY19tbS0+bW1saXN0KTsKLQkJCQlzcGluX3VubG9jaygmbW1saXN0X2xvY2spOwotCQkJfQotCQkJaWYgKGxpa2VseSghbm9uX3N3YXBfZW50cnkoZW50cnkpKSkKKwkJCQkvKiBtYWtlIHN1cmUgZHN0X21tIGlzIG9uIHN3YXBvZmYncyBtbWxpc3QuICovCisJCQkJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmRzdF9tbS0+bW1saXN0KSkpIHsKKwkJCQkJc3Bpbl9sb2NrKCZtbWxpc3RfbG9jayk7CisJCQkJCWlmIChsaXN0X2VtcHR5KCZkc3RfbW0tPm1tbGlzdCkpCisJCQkJCQlsaXN0X2FkZCgmZHN0X21tLT5tbWxpc3QsCisJCQkJCQkJICZzcmNfbW0tPm1tbGlzdCk7CisJCQkJCXNwaW5fdW5sb2NrKCZtbWxpc3RfbG9jayk7CisJCQkJfQogCQkJCXJzc1tNTV9TV0FQRU5UU10rKzsKLQkJCWVsc2UgaWYgKGlzX21pZ3JhdGlvbl9lbnRyeShlbnRyeSkpIHsKKwkJCX0gZWxzZSBpZiAoaXNfbWlncmF0aW9uX2VudHJ5KGVudHJ5KSkgewogCQkJCXBhZ2UgPSBtaWdyYXRpb25fZW50cnlfdG9fcGFnZShlbnRyeSk7CiAKIAkJCQlpZiAoUGFnZUFub24ocGFnZSkpCkBAIC0xMTg2LDIwICsxMTg0LDggQEAKIAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIAogCS8qIERvIHRoZSBhY3R1YWwgVExCIGZsdXNoIGJlZm9yZSBkcm9wcGluZyBwdGwgKi8KLQlpZiAoZm9yY2VfZmx1c2gpIHsKLQkJdW5zaWduZWQgbG9uZyBvbGRfZW5kOwotCi0JCS8qCi0JCSAqIEZsdXNoIHRoZSBUTEIganVzdCBmb3IgdGhlIHByZXZpb3VzIHNlZ21lbnQsCi0JCSAqIHRoZW4gdXBkYXRlIHRoZSByYW5nZSB0byBiZSB0aGUgcmVtYWluaW5nCi0JCSAqIFRMQiByYW5nZS4KLQkJICovCi0JCW9sZF9lbmQgPSB0bGItPmVuZDsKLQkJdGxiLT5lbmQgPSBhZGRyOworCWlmIChmb3JjZV9mbHVzaCkKIAkJdGxiX2ZsdXNoX21tdV90bGJvbmx5KHRsYik7Ci0JCXRsYi0+c3RhcnQgPSBhZGRyOwotCQl0bGItPmVuZCA9IG9sZF9lbmQ7Ci0JfQogCXB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpOwogCiAJLyoKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDFiZjQ4MDcuLjlmYWIxMDcgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMTcyNSw3ICsxNzI1LDcgQEAKIAlpZiAoZHJhaW4pIHsKIAkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKIAkJY29uZF9yZXNjaGVkKCk7Ci0JCWRyYWluX2FsbF9wYWdlcygpOworCQlkcmFpbl9hbGxfcGFnZXMoem9uZSk7CiAJfQogCiAJcGZuID0gc2Nhbl9tb3ZhYmxlX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3Bmbik7CkBAIC0xNzQ3LDcgKzE3NDcsNyBAQAogCWxydV9hZGRfZHJhaW5fYWxsKCk7CiAJeWllbGQoKTsKIAkvKiBkcmFpbiBwY3AgcGFnZXMsIHRoaXMgaXMgc3luY2hyb25vdXMuICovCi0JZHJhaW5fYWxsX3BhZ2VzKCk7CisJZHJhaW5fYWxsX3BhZ2VzKHpvbmUpOwogCS8qCiAJICogZGlzc29sdmUgZnJlZSBodWdlcGFnZXMgaW4gdGhlIG1lbW9yeSBibG9jayBiZWZvcmUgZG9pbmcgb2ZmbGluaW5nCiAJICogYWN0dWFsbHkgaW4gb3JkZXIgdG8gbWFrZSBodWdldGxiZnMncyBvYmplY3QgY291bnRpbmcgY29uc2lzdGVudC4KZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCA4N2U4MmIzLi5iNmMwYTc3IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC03NzYsOCArNzc2LDExIEBACiAJCSAqIHNocmlua2luZyB2bWEgaGFkLCB0byBjb3ZlciBhbnkgYW5vbiBwYWdlcyBpbXBvcnRlZC4KIAkJICovCiAJCWlmIChleHBvcnRlciAmJiBleHBvcnRlci0+YW5vbl92bWEgJiYgIWltcG9ydGVyLT5hbm9uX3ZtYSkgewotCQkJaWYgKGFub25fdm1hX2Nsb25lKGltcG9ydGVyLCBleHBvcnRlcikpCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQlpbnQgZXJyb3I7CisKKwkJCWVycm9yID0gYW5vbl92bWFfY2xvbmUoaW1wb3J0ZXIsIGV4cG9ydGVyKTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gZXJyb3I7CiAJCQlpbXBvcnRlci0+YW5vbl92bWEgPSBleHBvcnRlci0+YW5vbl92bWE7CiAJCX0KIAl9CkBAIC0yNDY5LDcgKzI0NzIsOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWVfdm1hOwogCi0JaWYgKGFub25fdm1hX2Nsb25lKG5ldywgdm1hKSkKKwllcnIgPSBhbm9uX3ZtYV9jbG9uZShuZXcsIHZtYSk7CisJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV9tcG9sOwogCiAJaWYgKG5ldy0+dm1fZmlsZSkKQEAgLTI1OTcsNiArMjYwMSw4IEBACiAJZGV0YWNoX3ZtYXNfdG9fYmVfdW5tYXBwZWQobW0sIHZtYSwgcHJldiwgZW5kKTsKIAl1bm1hcF9yZWdpb24obW0sIHZtYSwgcHJldiwgc3RhcnQsIGVuZCk7CiAKKwlhcmNoX3VubWFwKG1tLCB2bWEsIHN0YXJ0LCBlbmQpOworCiAJLyogRml4IHVwIGFsbCBvdGhlciBWTSBpbmZvcm1hdGlvbiAqLwogCXJlbW92ZV92bWFfbGlzdChtbSwgdm1hKTsKIApkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNTM0MGY2Yi4uM2IwMTRkMyAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAogLyogcmV0dXJuIHRydWUgaWYgdGhlIHRhc2sgaXMgbm90IGFkZXF1YXRlIGFzIGNhbmRpZGF0ZSB2aWN0aW0gdGFzay4gKi8KIHN0YXRpYyBib29sIG9vbV91bmtpbGxhYmxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLAotCQljb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKQorCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKQogewogCWlmIChpc19nbG9iYWxfaW5pdChwKSkKIAkJcmV0dXJuIHRydWU7CkBAIC0zNTMsNyArMzUzLDcgQEAKICAqIFN0YXRlIGluZm9ybWF0aW9uIGluY2x1ZGVzIHRhc2sncyBwaWQsIHVpZCwgdGdpZCwgdm0gc2l6ZSwgcnNzLCBucl9wdGVzLAogICogc3dhcGVudHMsIG9vbV9zY29yZV9hZGogdmFsdWUsIGFuZCBuYW1lLgogICovCi1zdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2spCitzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2spCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDE5Y2VhZTguLmQ1ZDgxZjUgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtMjM1Nyw3ICsyMzU3LDcgQEAKIAkJZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9XUklURUJBQ0spOwogCQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX1dSSVRURU4pOwogCX0KLQltZW1fY2dyb3VwX2VuZF9wYWdlX3N0YXQobWVtY2csIGxvY2tlZCwgbWVtY2dfZmxhZ3MpOworCW1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChtZW1jZywgJmxvY2tlZCwgJm1lbWNnX2ZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMzk5LDcgKzIzOTksNyBAQAogCQltZW1fY2dyb3VwX2luY19wYWdlX3N0YXQobWVtY2csIE1FTV9DR1JPVVBfU1RBVF9XUklURUJBQ0spOwogCQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX1dSSVRFQkFDSyk7CiAJfQotCW1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChtZW1jZywgbG9ja2VkLCBtZW1jZ19mbGFncyk7CisJbWVtX2Nncm91cF9lbmRfcGFnZV9zdGF0KG1lbWNnLCAmbG9ja2VkLCAmbWVtY2dfZmxhZ3MpOwogCXJldHVybiByZXQ7CiAKIH0KZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCA2MTZhMmM5Li5hNzE5OGMwIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mYXVsdC1pbmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWlzb2xhdGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYWN0aW9uLmg+CkBAIC02NDEsOCArNjQwLDEwIEBACiAJCWJhZF9yZWFzb24gPSAiUEFHRV9GTEFHU19DSEVDS19BVF9GUkVFIGZsYWcocykgc2V0IjsKIAkJYmFkX2ZsYWdzID0gUEFHRV9GTEFHU19DSEVDS19BVF9GUkVFOwogCX0KLQlpZiAodW5saWtlbHkobWVtX2Nncm91cF9iYWRfcGFnZV9jaGVjayhwYWdlKSkpCi0JCWJhZF9yZWFzb24gPSAiY2dyb3VwIGNoZWNrIGZhaWxlZCI7CisjaWZkZWYgQ09ORklHX01FTUNHCisJaWYgKHVubGlrZWx5KHBhZ2UtPm1lbV9jZ3JvdXApKQorCQliYWRfcmVhc29uID0gInBhZ2Ugc3RpbGwgY2hhcmdlZCB0byBjZ3JvdXAiOworI2VuZGlmCiAJaWYgKHVubGlrZWx5KGJhZF9yZWFzb24pKSB7CiAJCWJhZF9wYWdlKHBhZ2UsIGJhZF9yZWFzb24sIGJhZF9mbGFncyk7CiAJCXJldHVybiAxOwpAQCAtNzQxLDYgKzc0Miw5IEBACiAJaW50IGk7CiAJaW50IGJhZCA9IDA7CiAKKwlWTV9CVUdfT05fUEFHRShQYWdlVGFpbChwYWdlKSwgcGFnZSk7CisJVk1fQlVHX09OX1BBR0UoUGFnZUhlYWQocGFnZSkgJiYgY29tcG91bmRfb3JkZXIocGFnZSkgIT0gb3JkZXIsIHBhZ2UpOworCiAJdHJhY2VfbW1fcGFnZV9mcmVlKHBhZ2UsIG9yZGVyKTsKIAlrbWVtY2hlY2tfZnJlZV9zaGFkb3cocGFnZSwgb3JkZXIpOwogCkBAIC04OTgsOCArOTAyLDEwIEBACiAJCWJhZF9yZWFzb24gPSAiUEFHRV9GTEFHU19DSEVDS19BVF9QUkVQIGZsYWcgc2V0IjsKIAkJYmFkX2ZsYWdzID0gUEFHRV9GTEFHU19DSEVDS19BVF9QUkVQOwogCX0KLQlpZiAodW5saWtlbHkobWVtX2Nncm91cF9iYWRfcGFnZV9jaGVjayhwYWdlKSkpCi0JCWJhZF9yZWFzb24gPSAiY2dyb3VwIGNoZWNrIGZhaWxlZCI7CisjaWZkZWYgQ09ORklHX01FTUNHCisJaWYgKHVubGlrZWx5KHBhZ2UtPm1lbV9jZ3JvdXApKQorCQliYWRfcmVhc29uID0gInBhZ2Ugc3RpbGwgY2hhcmdlZCB0byBjZ3JvdXAiOworI2VuZGlmCiAJaWYgKHVubGlrZWx5KGJhZF9yZWFzb24pKSB7CiAJCWJhZF9wYWdlKHBhZ2UsIGJhZF9yZWFzb24sIGJhZF9mbGFncyk7CiAJCXJldHVybiAxOwpAQCAtMTI2Nyw3ICsxMjczLDMxIEBACiAjZW5kaWYKIAogLyoKLSAqIERyYWluIHBhZ2VzIG9mIHRoZSBpbmRpY2F0ZWQgcHJvY2Vzc29yLgorICogRHJhaW4gcGNwbGlzdHMgb2YgdGhlIGluZGljYXRlZCBwcm9jZXNzb3IgYW5kIHpvbmUuCisgKgorICogVGhlIHByb2Nlc3NvciBtdXN0IGVpdGhlciBiZSB0aGUgY3VycmVudCBwcm9jZXNzb3IgYW5kIHRoZQorICogdGhyZWFkIHBpbm5lZCB0byB0aGUgY3VycmVudCBwcm9jZXNzb3Igb3IgYSBwcm9jZXNzb3IgdGhhdAorICogaXMgbm90IG9ubGluZS4KKyAqLworc3RhdGljIHZvaWQgZHJhaW5fcGFnZXNfem9uZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzZXQ7CisJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwc2V0ID0gcGVyX2NwdV9wdHIoem9uZS0+cGFnZXNldCwgY3B1KTsKKworCXBjcCA9ICZwc2V0LT5wY3A7CisJaWYgKHBjcC0+Y291bnQpIHsKKwkJZnJlZV9wY3BwYWdlc19idWxrKHpvbmUsIHBjcC0+Y291bnQsIHBjcCk7CisJCXBjcC0+Y291bnQgPSAwOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBEcmFpbiBwY3BsaXN0cyBvZiBhbGwgem9uZXMgb24gdGhlIGluZGljYXRlZCBwcm9jZXNzb3IuCiAgKgogICogVGhlIHByb2Nlc3NvciBtdXN0IGVpdGhlciBiZSB0aGUgY3VycmVudCBwcm9jZXNzb3IgYW5kIHRoZQogICogdGhyZWFkIHBpbm5lZCB0byB0aGUgY3VycmVudCBwcm9jZXNzb3Igb3IgYSBwcm9jZXNzb3IgdGhhdApAQCAtMTI3NSw0NyArMTMwNSw0MyBAQAogICovCiBzdGF0aWMgdm9pZCBkcmFpbl9wYWdlcyh1bnNpZ25lZCBpbnQgY3B1KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAKIAlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7Ci0JCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzZXQ7Ci0JCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7Ci0KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlwc2V0ID0gcGVyX2NwdV9wdHIoem9uZS0+cGFnZXNldCwgY3B1KTsKLQotCQlwY3AgPSAmcHNldC0+cGNwOwotCQlpZiAocGNwLT5jb3VudCkgewotCQkJZnJlZV9wY3BwYWdlc19idWxrKHpvbmUsIHBjcC0+Y291bnQsIHBjcCk7Ci0JCQlwY3AtPmNvdW50ID0gMDsKLQkJfQotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWRyYWluX3BhZ2VzX3pvbmUoY3B1LCB6b25lKTsKIAl9CiB9CiAKIC8qCiAgKiBTcGlsbCBhbGwgb2YgdGhpcyBDUFUncyBwZXItY3B1IHBhZ2VzIGJhY2sgaW50byB0aGUgYnVkZHkgYWxsb2NhdG9yLgorICoKKyAqIFRoZSBDUFUgaGFzIHRvIGJlIHBpbm5lZC4gV2hlbiB6b25lIHBhcmFtZXRlciBpcyBub24tTlVMTCwgc3BpbGwganVzdAorICogdGhlIHNpbmdsZSB6b25lJ3MgcGFnZXMuCiAgKi8KLXZvaWQgZHJhaW5fbG9jYWxfcGFnZXModm9pZCAqYXJnKQordm9pZCBkcmFpbl9sb2NhbF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSkKIHsKLQlkcmFpbl9wYWdlcyhzbXBfcHJvY2Vzc29yX2lkKCkpOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoem9uZSkKKwkJZHJhaW5fcGFnZXNfem9uZShjcHUsIHpvbmUpOworCWVsc2UKKwkJZHJhaW5fcGFnZXMoY3B1KTsKIH0KIAogLyoKICAqIFNwaWxsIGFsbCB0aGUgcGVyLWNwdSBwYWdlcyBmcm9tIGFsbCBDUFVzIGJhY2sgaW50byB0aGUgYnVkZHkgYWxsb2NhdG9yLgogICoKKyAqIFdoZW4gem9uZSBwYXJhbWV0ZXIgaXMgbm9uLU5VTEwsIHNwaWxsIGp1c3QgdGhlIHNpbmdsZSB6b25lJ3MgcGFnZXMuCisgKgogICogTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBzZW5kaW5nIGFuIElQSSB0byBhbiBvZmZsaW5lCiAgKiBDUFUgYnV0IGRvZXMgbm90IGd1YXJhbnRlZSBzZW5kaW5nIGFuIElQSSB0byBuZXdseSBob3RwbHVnZ2VkIENQVXM6CiAgKiBvbl9lYWNoX2NwdV9tYXNrKCkgYmxvY2tzIGhvdHBsdWcgYW5kIHdvbid0IHRhbGsgdG8gb2ZmbGluZWQgQ1BVcyBidXQKICAqIG5vdGhpbmcga2VlcHMgQ1BVcyBmcm9tIHNob3dpbmcgdXAgYWZ0ZXIgd2UgcG9wdWxhdGVkIHRoZSBjcHVtYXNrIGFuZAogICogYmVmb3JlIHRoZSBjYWxsIHRvIG9uX2VhY2hfY3B1X21hc2soKS4KICAqLwotdm9pZCBkcmFpbl9hbGxfcGFnZXModm9pZCkKK3ZvaWQgZHJhaW5fYWxsX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKQogewogCWludCBjcHU7Ci0Jc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwOwotCXN0cnVjdCB6b25lICp6b25lOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBpbiB0aGUgQlNTIHNvIHdlIHdvbnQgcmVxdWlyZSBhbGxvY2F0aW9uIGluCkBAIC0xMzMwLDIwICsxMzU2LDMxIEBACiAJICogZGlzYWJsZXMgcHJlZW1wdGlvbiBhcyBwYXJ0IG9mIGl0cyBwcm9jZXNzaW5nCiAJICovCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwOworCQlzdHJ1Y3Qgem9uZSAqejsKIAkJYm9vbCBoYXNfcGNwcyA9IGZhbHNlOwotCQlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CisKKwkJaWYgKHpvbmUpIHsKIAkJCXBjcCA9IHBlcl9jcHVfcHRyKHpvbmUtPnBhZ2VzZXQsIGNwdSk7Ci0JCQlpZiAocGNwLT5wY3AuY291bnQpIHsKKwkJCWlmIChwY3AtPnBjcC5jb3VudCkKIAkJCQloYXNfcGNwcyA9IHRydWU7Ci0JCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6KSB7CisJCQkJcGNwID0gcGVyX2NwdV9wdHIoei0+cGFnZXNldCwgY3B1KTsKKwkJCQlpZiAocGNwLT5wY3AuY291bnQpIHsKKwkJCQkJaGFzX3BjcHMgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CiAJCQl9CiAJCX0KKwogCQlpZiAoaGFzX3BjcHMpCiAJCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmY3B1c193aXRoX3BjcHMpOwogCQllbHNlCiAJCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZjcHVzX3dpdGhfcGNwcyk7CiAJfQotCW9uX2VhY2hfY3B1X21hc2soJmNwdXNfd2l0aF9wY3BzLCBkcmFpbl9sb2NhbF9wYWdlcywgTlVMTCwgMSk7CisJb25fZWFjaF9jcHVfbWFzaygmY3B1c193aXRoX3BjcHMsIChzbXBfY2FsbF9mdW5jX3QpIGRyYWluX2xvY2FsX3BhZ2VzLAorCQkJCQkJCQl6b25lLCAxKTsKIH0KIAogI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgpAQCAtMTcwNSw3ICsxNzQyLDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgbWFyaywgaW50IGNsYXNzem9uZV9pZHgsIGludCBhbGxvY19mbGFncywKIAkJCWxvbmcgZnJlZV9wYWdlcykKIHsKLQkvKiBmcmVlX3BhZ2VzIG15IGdvIG5lZ2F0aXZlIC0gdGhhdCdzIE9LICovCisJLyogZnJlZV9wYWdlcyBtYXkgZ28gbmVnYXRpdmUgLSB0aGF0J3MgT0sgKi8KIAlsb25nIG1pbiA9IG1hcms7CiAJaW50IG87CiAJbG9uZyBmcmVlX2NtYSA9IDA7CkBAIC0yMjk2LDcgKzIzMzMsNiBAQAogCWludCBjbGFzc3pvbmVfaWR4LCBpbnQgbWlncmF0ZXR5cGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsCiAJaW50ICpjb250ZW5kZWRfY29tcGFjdGlvbiwgYm9vbCAqZGVmZXJyZWRfY29tcGFjdGlvbikKIHsKLQlzdHJ1Y3Qgem9uZSAqbGFzdF9jb21wYWN0X3pvbmUgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgY29tcGFjdF9yZXN1bHQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKQEAgLTIzMDcsNyArMjM0Myw3IEBACiAJY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyh6b25lbGlzdCwgb3JkZXIsIGdmcF9tYXNrLAogCQkJCQkJbm9kZW1hc2ssIG1vZGUsCiAJCQkJCQljb250ZW5kZWRfY29tcGFjdGlvbiwKLQkJCQkJCSZsYXN0X2NvbXBhY3Rfem9uZSk7CisJCQkJCQlhbGxvY19mbGFncywgY2xhc3N6b25lX2lkeCk7CiAJY3VycmVudC0+ZmxhZ3MgJj0gflBGX01FTUFMTE9DOwogCiAJc3dpdGNoIChjb21wYWN0X3Jlc3VsdCkgewpAQCAtMjMyNiwxMCArMjM2Miw2IEBACiAJICovCiAJY291bnRfdm1fZXZlbnQoQ09NUEFDVFNUQUxMKTsKIAotCS8qIFBhZ2UgbWlncmF0aW9uIGZyZWVzIHRvIHRoZSBQQ1AgbGlzdHMgYnV0IHdlIHdhbnQgbWVyZ2luZyAqLwotCWRyYWluX3BhZ2VzKGdldF9jcHUoKSk7Ci0JcHV0X2NwdSgpOwotCiAJcGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG5vZGVtYXNrLAogCQkJb3JkZXIsIHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsCiAJCQlhbGxvY19mbGFncyAmIH5BTExPQ19OT19XQVRFUk1BUktTLApAQCAtMjM0NSwxNCArMjM3Nyw2IEBACiAJfQogCiAJLyoKLQkgKiBsYXN0X2NvbXBhY3Rfem9uZSBpcyB3aGVyZSB0cnlfdG9fY29tcGFjdF9wYWdlcyB0aG91Z2h0IGFsbG9jYXRpb24KLQkgKiBzaG91bGQgc3VjY2VlZCwgc28gaXQgZGlkIG5vdCBkZWZlciBjb21wYWN0aW9uLiBCdXQgaGVyZSB3ZSBrbm93Ci0JICogdGhhdCBpdCBkaWRuJ3Qgc3VjY2VlZCwgc28gd2UgZG8gdGhlIGRlZmVyLgotCSAqLwotCWlmIChsYXN0X2NvbXBhY3Rfem9uZSAmJiBtb2RlICE9IE1JR1JBVEVfQVNZTkMpCi0JCWRlZmVyX2NvbXBhY3Rpb24obGFzdF9jb21wYWN0X3pvbmUsIG9yZGVyKTsKLQotCS8qCiAJICogSXQncyBiYWQgaWYgY29tcGFjdGlvbiBydW4gb2NjdXJzIGFuZCBmYWlscy4gVGhlIG1vc3QgbGlrZWx5IHJlYXNvbgogCSAqIGlzIHRoYXQgcGFnZXMgZXhpc3QsIGJ1dCBub3QgZW5vdWdoIHRvIHNhdGlzZnkgd2F0ZXJtYXJrcy4KIAkgKi8KQEAgLTI0MzMsNyArMjQ1Nyw3IEBACiAJICogcGFnZXMgYXJlIHBpbm5lZCBvbiB0aGUgcGVyLWNwdSBsaXN0cy4gRHJhaW4gdGhlbSBhbmQgdHJ5IGFnYWluCiAJICovCiAJaWYgKCFwYWdlICYmICFkcmFpbmVkKSB7Ci0JCWRyYWluX2FsbF9wYWdlcygpOworCQlkcmFpbl9hbGxfcGFnZXMoTlVMTCk7CiAJCWRyYWluZWQgPSB0cnVlOwogCQlnb3RvIHJldHJ5OwogCX0KQEAgLTM4OTMsMTQgKzM5MTcsMTQgQEAKIAllbHNlCiAJCXBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQgPSAwOwogCi0JcHJpbnRrKCJCdWlsdCAlaSB6b25lbGlzdHMgaW4gJXMgb3JkZXIsIG1vYmlsaXR5IGdyb3VwaW5nICVzLiAgIgorCXByX2luZm8oIkJ1aWx0ICVpIHpvbmVsaXN0cyBpbiAlcyBvcmRlciwgbW9iaWxpdHkgZ3JvdXBpbmcgJXMuICAiCiAJCSJUb3RhbCBwYWdlczogJWxkXG4iLAogCQkJbnJfb25saW5lX25vZGVzLAogCQkJem9uZWxpc3Rfb3JkZXJfbmFtZVtjdXJyZW50X3pvbmVsaXN0X29yZGVyXSwKIAkJCXBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQgPyAib2ZmIiA6ICJvbiIsCiAJCQl2bV90b3RhbF9wYWdlcyk7CiAjaWZkZWYgQ09ORklHX05VTUEKLQlwcmludGsoIlBvbGljeSB6b25lOiAlc1xuIiwgem9uZV9uYW1lc1twb2xpY3lfem9uZV0pOworCXByX2luZm8oIlBvbGljeSB6b25lOiAlc1xuIiwgem9uZV9uYW1lc1twb2xpY3lfem9uZV0pOwogI2VuZGlmCiB9CiAKQEAgLTQ4MzIsNyArNDg1Niw2IEBACiAjZW5kaWYKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZ2RhdC0+a3N3YXBkX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBnZGF0LT5wZm1lbWFsbG9jX3dhaXQpOwotCXBnZGF0X3BhZ2VfY2dyb3VwX2luaXQocGdkYXQpOwogCiAJZm9yIChqID0gMDsgaiA8IE1BWF9OUl9aT05FUzsgaisrKSB7CiAJCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBqOwpAQCAtNTMzNCwzMyArNTM1NywzMyBAQAogCWZpbmRfem9uZV9tb3ZhYmxlX3BmbnNfZm9yX25vZGVzKCk7CiAKIAkvKiBQcmludCBvdXQgdGhlIHpvbmUgcmFuZ2VzICovCi0JcHJpbnRrKCJab25lIHJhbmdlczpcbiIpOworCXByX2luZm8oIlpvbmUgcmFuZ2VzOlxuIik7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9aT05FUzsgaSsrKSB7CiAJCWlmIChpID09IFpPTkVfTU9WQUJMRSkKIAkJCWNvbnRpbnVlOwotCQlwcmludGsoS0VSTl9DT05UICIgICUtOHMgIiwgem9uZV9uYW1lc1tpXSk7CisJCXByX2luZm8oIiAgJS04cyAiLCB6b25lX25hbWVzW2ldKTsKIAkJaWYgKGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW2ldID09CiAJCQkJYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW2ldKQotCQkJcHJpbnRrKEtFUk5fQ09OVCAiZW1wdHlcbiIpOworCQkJcHJfY29udCgiZW1wdHlcbiIpOwogCQllbHNlCi0JCQlwcmludGsoS0VSTl9DT05UICJbbWVtICUwIzEwbHgtJTAjMTBseF1cbiIsCisJCQlwcl9jb250KCJbbWVtICUwIzEwbHgtJTAjMTBseF1cbiIsCiAJCQkJYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5baV0gPDwgUEFHRV9TSElGVCwKIAkJCQkoYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW2ldCiAJCQkJCTw8IFBBR0VfU0hJRlQpIC0gMSk7CiAJfQogCiAJLyogUHJpbnQgb3V0IHRoZSBQRk5zIFpPTkVfTU9WQUJMRSBiZWdpbnMgYXQgaW4gZWFjaCBub2RlICovCi0JcHJpbnRrKCJNb3ZhYmxlIHpvbmUgc3RhcnQgZm9yIGVhY2ggbm9kZVxuIik7CisJcHJfaW5mbygiTW92YWJsZSB6b25lIHN0YXJ0IGZvciBlYWNoIG5vZGVcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7IGkrKykgewogCQlpZiAoem9uZV9tb3ZhYmxlX3BmbltpXSkKLQkJCXByaW50aygiICBOb2RlICVkOiAlIzAxMGx4XG4iLCBpLAorCQkJcHJfaW5mbygiICBOb2RlICVkOiAlIzAxMGx4XG4iLCBpLAogCQkJICAgICAgIHpvbmVfbW92YWJsZV9wZm5baV0gPDwgUEFHRV9TSElGVCk7CiAJfQogCiAJLyogUHJpbnQgb3V0IHRoZSBlYXJseSBub2RlIG1hcCAqLwotCXByaW50aygiRWFybHkgbWVtb3J5IG5vZGUgcmFuZ2VzXG4iKTsKKwlwcl9pbmZvKCJFYXJseSBtZW1vcnkgbm9kZSByYW5nZXNcbiIpOwogCWZvcl9lYWNoX21lbV9wZm5fcmFuZ2UoaSwgTUFYX05VTU5PREVTLCAmc3RhcnRfcGZuLCAmZW5kX3BmbiwgJm5pZCkKLQkJcHJpbnRrKCIgIG5vZGUgJTNkOiBbbWVtICUjMDEwbHgtJSMwMTBseF1cbiIsIG5pZCwKKwkJcHJfaW5mbygiICBub2RlICUzZDogW21lbSAlIzAxMGx4LSUjMDEwbHhdXG4iLCBuaWQsCiAJCSAgICAgICBzdGFydF9wZm4gPDwgUEFHRV9TSElGVCwgKGVuZF9wZm4gPDwgUEFHRV9TSElGVCkgLSAxKTsKIAogCS8qIEluaXRpYWxpc2UgZXZlcnkgbm9kZSAqLwpAQCAtNTQ5Niw3ICs1NTE5LDcgQEAKIAogI3VuZGVmCWFkal9pbml0X3NpemUKIAotCXByaW50aygiTWVtb3J5OiAlbHVLLyVsdUsgYXZhaWxhYmxlICIKKwlwcl9pbmZvKCJNZW1vcnk6ICVsdUsvJWx1SyBhdmFpbGFibGUgIgogCSAgICAgICAiKCVsdUsga2VybmVsIGNvZGUsICVsdUsgcndkYXRhLCAlbHVLIHJvZGF0YSwgIgogCSAgICAgICAiJWx1SyBpbml0LCAlbHVLIGJzcywgJWx1SyByZXNlcnZlZCIKICNpZmRlZglDT05GSUdfSElHSE1FTQpAQCAtNjM4NSw3ICs2NDA4LDcgQEAKIAkgKi8KIAogCWxydV9hZGRfZHJhaW5fYWxsKCk7Ci0JZHJhaW5fYWxsX3BhZ2VzKCk7CisJZHJhaW5fYWxsX3BhZ2VzKGNjLnpvbmUpOwogCiAJb3JkZXIgPSAwOwogCW91dGVyX3N0YXJ0ID0gc3RhcnQ7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2Nncm91cC5jIGIvbW0vcGFnZV9jZ3JvdXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMzMWMyYi4uMDAwMDAwMAotLS0gYS9tbS9wYWdlX2Nncm91cC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMwICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlX2Nncm91cC5oPgotI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgotI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbF91c2FnZTsKLQotI2lmICFkZWZpbmVkKENPTkZJR19TUEFSU0VNRU0pCi0KLQotdm9pZCBfX21lbWluaXQgcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQotewotCXBnZGF0LT5ub2RlX3BhZ2VfY2dyb3VwID0gTlVMTDsKLX0KLQotc3RydWN0IHBhZ2VfY2dyb3VwICpsb29rdXBfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKLQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmJhc2U7Ci0KLQliYXNlID0gTk9ERV9EQVRBKHBhZ2VfdG9fbmlkKHBhZ2UpKS0+bm9kZV9wYWdlX2Nncm91cDsKLSNpZmRlZiBDT05GSUdfREVCVUdfVk0KLQkvKgotCSAqIFRoZSBzYW5pdHkgY2hlY2tzIHRoZSBwYWdlIGFsbG9jYXRvciBkb2VzIHVwb24gZnJlZWluZyBhCi0JICogcGFnZSBjYW4gcmVhY2ggaGVyZSBiZWZvcmUgdGhlIHBhZ2VfY2dyb3VwIGFycmF5cyBhcmUKLQkgKiBhbGxvY2F0ZWQgd2hlbiBmZWVkaW5nIGEgcmFuZ2Ugb2YgcGFnZXMgdG8gdGhlIGFsbG9jYXRvcgotCSAqIGZvciB0aGUgZmlyc3QgdGltZSBkdXJpbmcgYm9vdHVwIG9yIG1lbW9yeSBob3RwbHVnLgotCSAqLwotCWlmICh1bmxpa2VseSghYmFzZSkpCi0JCXJldHVybiBOVUxMOwotI2VuZGlmCi0Jb2Zmc2V0ID0gcGZuIC0gTk9ERV9EQVRBKHBhZ2VfdG9fbmlkKHBhZ2UpKS0+bm9kZV9zdGFydF9wZm47Ci0JcmV0dXJuIGJhc2UgKyBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX25vZGVfcGFnZV9jZ3JvdXAoaW50IG5pZCkKLXsKLQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmJhc2U7Ci0JdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplOwotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7Ci0KLQlucl9wYWdlcyA9IE5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXM7Ci0JaWYgKCFucl9wYWdlcykKLQkJcmV0dXJuIDA7Ci0KLQl0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwYWdlX2Nncm91cCkgKiBucl9wYWdlczsKLQotCWJhc2UgPSBtZW1ibG9ja192aXJ0X2FsbG9jX3RyeV9uaWRfbm9wYW5pYygKLQkJCXRhYmxlX3NpemUsIFBBR0VfU0laRSwgX19wYShNQVhfRE1BX0FERFJFU1MpLAotCQkJQk9PVE1FTV9BTExPQ19BQ0NFU1NJQkxFLCBuaWQpOwotCWlmICghYmFzZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JTk9ERV9EQVRBKG5pZCktPm5vZGVfcGFnZV9jZ3JvdXAgPSBiYXNlOwotCXRvdGFsX3VzYWdlICs9IHRhYmxlX3NpemU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19pbml0IHBhZ2VfY2dyb3VwX2luaXRfZmxhdG1lbSh2b2lkKQotewotCi0JaW50IG5pZCwgZmFpbDsKLQotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCi0JCXJldHVybjsKLQotCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgIHsKLQkJZmFpbCA9IGFsbG9jX25vZGVfcGFnZV9jZ3JvdXAobmlkKTsKLQkJaWYgKGZhaWwpCi0JCQlnb3RvIGZhaWw7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gImFsbG9jYXRlZCAlbGQgYnl0ZXMgb2YgcGFnZV9jZ3JvdXBcbiIsIHRvdGFsX3VzYWdlKTsKLQlwcmludGsoS0VSTl9JTkZPICJwbGVhc2UgdHJ5ICdjZ3JvdXBfZGlzYWJsZT1tZW1vcnknIG9wdGlvbiBpZiB5b3UiCi0JIiBkb24ndCB3YW50IG1lbW9yeSBjZ3JvdXBzXG4iKTsKLQlyZXR1cm47Ci1mYWlsOgotCXByaW50ayhLRVJOX0NSSVQgImFsbG9jYXRpb24gb2YgcGFnZV9jZ3JvdXAgZmFpbGVkLlxuIik7Ci0JcHJpbnRrKEtFUk5fQ1JJVCAicGxlYXNlIHRyeSAnY2dyb3VwX2Rpc2FibGU9bWVtb3J5JyBib290IG9wdGlvblxuIik7Ci0JcGFuaWMoIk91dCBvZiBtZW1vcnkiKTsKLX0KLQotI2Vsc2UgLyogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQICovCi0KLXN0cnVjdCBwYWdlX2Nncm91cCAqbG9va3VwX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7Ci0Jc3RydWN0IG1lbV9zZWN0aW9uICpzZWN0aW9uID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOwotI2lmZGVmIENPTkZJR19ERUJVR19WTQotCS8qCi0JICogVGhlIHNhbml0eSBjaGVja3MgdGhlIHBhZ2UgYWxsb2NhdG9yIGRvZXMgdXBvbiBmcmVlaW5nIGEKLQkgKiBwYWdlIGNhbiByZWFjaCBoZXJlIGJlZm9yZSB0aGUgcGFnZV9jZ3JvdXAgYXJyYXlzIGFyZQotCSAqIGFsbG9jYXRlZCB3aGVuIGZlZWRpbmcgYSByYW5nZSBvZiBwYWdlcyB0byB0aGUgYWxsb2NhdG9yCi0JICogZm9yIHRoZSBmaXJzdCB0aW1lIGR1cmluZyBib290dXAgb3IgbWVtb3J5IGhvdHBsdWcuCi0JICovCi0JaWYgKCFzZWN0aW9uLT5wYWdlX2Nncm91cCkKLQkJcmV0dXJuIE5VTEw7Ci0jZW5kaWYKLQlyZXR1cm4gc2VjdGlvbi0+cGFnZV9jZ3JvdXAgKyBwZm47Ci19Ci0KLXN0YXRpYyB2b2lkICpfX21lbWluaXQgYWxsb2NfcGFnZV9jZ3JvdXAoc2l6ZV90IHNpemUsIGludCBuaWQpCi17Ci0JZ2ZwX3QgZmxhZ3MgPSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX05PV0FSTjsKLQl2b2lkICphZGRyID0gTlVMTDsKLQotCWFkZHIgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobmlkLCBzaXplLCBmbGFncyk7Ci0JaWYgKGFkZHIpIHsKLQkJa21lbWxlYWtfYWxsb2MoYWRkciwgc2l6ZSwgMSwgZmxhZ3MpOwotCQlyZXR1cm4gYWRkcjsKLQl9Ci0KLQlpZiAobm9kZV9zdGF0ZShuaWQsIE5fSElHSF9NRU1PUlkpKQotCQlhZGRyID0gdnphbGxvY19ub2RlKHNpemUsIG5pZCk7Ci0JZWxzZQotCQlhZGRyID0gdnphbGxvYyhzaXplKTsKLQotCXJldHVybiBhZGRyOwotfQotCi1zdGF0aWMgaW50IF9fbWVtaW5pdCBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpCi17Ci0Jc3RydWN0IG1lbV9zZWN0aW9uICpzZWN0aW9uOwotCXN0cnVjdCBwYWdlX2Nncm91cCAqYmFzZTsKLQl1bnNpZ25lZCBsb25nIHRhYmxlX3NpemU7Ci0KLQlzZWN0aW9uID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOwotCi0JaWYgKHNlY3Rpb24tPnBhZ2VfY2dyb3VwKQotCQlyZXR1cm4gMDsKLQotCXRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IHBhZ2VfY2dyb3VwKSAqIFBBR0VTX1BFUl9TRUNUSU9OOwotCWJhc2UgPSBhbGxvY19wYWdlX2Nncm91cCh0YWJsZV9zaXplLCBuaWQpOwotCi0JLyoKLQkgKiBUaGUgdmFsdWUgc3RvcmVkIGluIHNlY3Rpb24tPnBhZ2VfY2dyb3VwIGlzIChiYXNlIC0gcGZuKQotCSAqIGFuZCBpdCBkb2VzIG5vdCBwb2ludCB0byB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRlZCBhYm92ZSwKLQkgKiBjYXVzaW5nIGttZW1sZWFrIGZhbHNlIHBvc2l0aXZlcy4KLQkgKi8KLQlrbWVtbGVha19ub3RfbGVhayhiYXNlKTsKLQotCWlmICghYmFzZSkgewotCQlwcmludGsoS0VSTl9FUlIgInBhZ2UgY2dyb3VwIGFsbG9jYXRpb24gZmFpbHVyZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogVGhlIHBhc3NlZCAicGZuIiBtYXkgbm90IGJlIGFsaWduZWQgdG8gU0VDVElPTi4gIEZvciB0aGUgY2FsY3VsYXRpb24KLQkgKiB3ZSBuZWVkIHRvIGFwcGx5IGEgbWFzay4KLQkgKi8KLQlwZm4gJj0gUEFHRV9TRUNUSU9OX01BU0s7Ci0Jc2VjdGlvbi0+cGFnZV9jZ3JvdXAgPSBiYXNlIC0gcGZuOwotCXRvdGFsX3VzYWdlICs9IHRhYmxlX3NpemU7Ci0JcmV0dXJuIDA7Ci19Ci0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCi1zdGF0aWMgdm9pZCBmcmVlX3BhZ2VfY2dyb3VwKHZvaWQgKmFkZHIpCi17Ci0JaWYgKGlzX3ZtYWxsb2NfYWRkcihhZGRyKSkgewotCQl2ZnJlZShhZGRyKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShhZGRyKTsKLQkJc2l6ZV90IHRhYmxlX3NpemUgPQotCQkJc2l6ZW9mKHN0cnVjdCBwYWdlX2Nncm91cCkgKiBQQUdFU19QRVJfU0VDVElPTjsKLQotCQlCVUdfT04oUGFnZVJlc2VydmVkKHBhZ2UpKTsKLQkJa21lbWxlYWtfZnJlZShhZGRyKTsKLQkJZnJlZV9wYWdlc19leGFjdChhZGRyLCB0YWJsZV9zaXplKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZnJlZV9wYWdlX2Nncm91cCh1bnNpZ25lZCBsb25nIHBmbikKLXsKLQlzdHJ1Y3QgbWVtX3NlY3Rpb24gKm1zOwotCXN0cnVjdCBwYWdlX2Nncm91cCAqYmFzZTsKLQotCW1zID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOwotCWlmICghbXMgfHwgIW1zLT5wYWdlX2Nncm91cCkKLQkJcmV0dXJuOwotCWJhc2UgPSBtcy0+cGFnZV9jZ3JvdXAgKyBwZm47Ci0JZnJlZV9wYWdlX2Nncm91cChiYXNlKTsKLQltcy0+cGFnZV9jZ3JvdXAgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IF9fbWVtaW5pdCBvbmxpbmVfcGFnZV9jZ3JvdXAodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJdW5zaWduZWQgbG9uZyBucl9wYWdlcywKLQkJCQlpbnQgbmlkKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgcGZuOwotCWludCBmYWlsID0gMDsKLQotCXN0YXJ0ID0gU0VDVElPTl9BTElHTl9ET1dOKHN0YXJ0X3Bmbik7Ci0JZW5kID0gU0VDVElPTl9BTElHTl9VUChzdGFydF9wZm4gKyBucl9wYWdlcyk7Ci0KLQlpZiAobmlkID09IC0xKSB7Ci0JCS8qCi0JCSAqIEluIHRoaXMgY2FzZSwgIm5pZCIgYWxyZWFkeSBleGlzdHMgYW5kIGNvbnRhaW5zIHZhbGlkIG1lbW9yeS4KLQkJICogInN0YXJ0X3BmbiIgcGFzc2VkIHRvIHVzIGlzIGEgcGZuIHdoaWNoIGlzIGFuIGFyZyBmb3IKLQkJICogb25saW5lX19wYWdlcygpLCBhbmQgc3RhcnRfcGZuIHNob3VsZCBleGlzdC4KLQkJICovCi0JCW5pZCA9IHBmbl90b19uaWQoc3RhcnRfcGZuKTsKLQkJVk1fQlVHX09OKCFub2RlX3N0YXRlKG5pZCwgTl9PTkxJTkUpKTsKLQl9Ci0KLQlmb3IgKHBmbiA9IHN0YXJ0OyAhZmFpbCAmJiBwZm4gPCBlbmQ7IHBmbiArPSBQQUdFU19QRVJfU0VDVElPTikgewotCQlpZiAoIXBmbl9wcmVzZW50KHBmbikpCi0JCQljb250aW51ZTsKLQkJZmFpbCA9IGluaXRfc2VjdGlvbl9wYWdlX2Nncm91cChwZm4sIG5pZCk7Ci0JfQotCWlmICghZmFpbCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiByb2xsYmFjayAqLwotCWZvciAocGZuID0gc3RhcnQ7IHBmbiA8IGVuZDsgcGZuICs9IFBBR0VTX1BFUl9TRUNUSU9OKQotCQlfX2ZyZWVfcGFnZV9jZ3JvdXAocGZuKTsKLQotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgaW50IF9fbWVtaW5pdCBvZmZsaW5lX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGludCBuaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBwZm47Ci0KLQlzdGFydCA9IFNFQ1RJT05fQUxJR05fRE9XTihzdGFydF9wZm4pOwotCWVuZCA9IFNFQ1RJT05fQUxJR05fVVAoc3RhcnRfcGZuICsgbnJfcGFnZXMpOwotCi0JZm9yIChwZm4gPSBzdGFydDsgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pCi0JCV9fZnJlZV9wYWdlX2Nncm91cChwZm4pOwotCXJldHVybiAwOwotCi19Ci0KLXN0YXRpYyBpbnQgX19tZW1pbml0IHBhZ2VfY2dyb3VwX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBtZW1vcnlfbm90aWZ5ICptbiA9IGFyZzsKLQlpbnQgcmV0ID0gMDsKLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgTUVNX0dPSU5HX09OTElORToKLQkJcmV0ID0gb25saW5lX3BhZ2VfY2dyb3VwKG1uLT5zdGFydF9wZm4sCi0JCQkJICAgbW4tPm5yX3BhZ2VzLCBtbi0+c3RhdHVzX2NoYW5nZV9uaWQpOwotCQlicmVhazsKLQljYXNlIE1FTV9PRkZMSU5FOgotCQlvZmZsaW5lX3BhZ2VfY2dyb3VwKG1uLT5zdGFydF9wZm4sCi0JCQkJbW4tPm5yX3BhZ2VzLCBtbi0+c3RhdHVzX2NoYW5nZV9uaWQpOwotCQlicmVhazsKLQljYXNlIE1FTV9DQU5DRUxfT05MSU5FOgotCQlvZmZsaW5lX3BhZ2VfY2dyb3VwKG1uLT5zdGFydF9wZm4sCi0JCQkJbW4tPm5yX3BhZ2VzLCBtbi0+c3RhdHVzX2NoYW5nZV9uaWQpOwotCQlicmVhazsKLQljYXNlIE1FTV9HT0lOR19PRkZMSU5FOgotCQlicmVhazsKLQljYXNlIE1FTV9PTkxJTkU6Ci0JY2FzZSBNRU1fQ0FOQ0VMX09GRkxJTkU6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHJldCk7Ci19Ci0KLSNlbmRpZgotCi12b2lkIF9faW5pdCBwYWdlX2Nncm91cF9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0JaW50IG5pZDsKLQotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCi0JCXJldHVybjsKLQotCWZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKLQotCQlzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihuaWQpOwotCQllbmRfcGZuID0gbm9kZV9lbmRfcGZuKG5pZCk7Ci0JCS8qCi0JCSAqIHN0YXJ0X3BmbiBhbmQgZW5kX3BmbiBtYXkgbm90IGJlIGFsaWduZWQgdG8gU0VDVElPTiBhbmQgdGhlCi0JCSAqIHBhZ2UtPmZsYWdzIG9mIG91dCBvZiBub2RlIHBhZ2VzIGFyZSBub3QgaW5pdGlhbGl6ZWQuICBTbyB3ZQotCQkgKiBzY2FuIFtzdGFydF9wZm4sIHRoZSBiaWdnZXN0IHNlY3Rpb24ncyBwZm4gPCBlbmRfcGZuKSBoZXJlLgotCQkgKi8KLQkJZm9yIChwZm4gPSBzdGFydF9wZm47Ci0JCSAgICAgcGZuIDwgZW5kX3BmbjsKLSAgICAgICAgICAgICAgICAgICAgIHBmbiA9IEFMSUdOKHBmbiArIDEsIFBBR0VTX1BFUl9TRUNUSU9OKSkgewotCi0JCQlpZiAoIXBmbl92YWxpZChwZm4pKQotCQkJCWNvbnRpbnVlOwotCQkJLyoKLQkJCSAqIE5vZGVzJ3MgcGZucyBjYW4gYmUgb3ZlcmxhcHBpbmcuCi0JCQkgKiBXZSBrbm93IHNvbWUgYXJjaCBjYW4gaGF2ZSBhIG5vZGVzIGxheW91dCBzdWNoIGFzCi0JCQkgKiAtLS0tLS0tLS0tLS0tcGZuLS0tLS0tLS0tLS0tLS0+Ci0JCQkgKiBOMCB8IE4xIHwgTjIgfCBOMCB8IE4xIHwgTjJ8Li4uLgotCQkJICovCi0JCQlpZiAocGZuX3RvX25pZChwZm4pICE9IG5pZCkKLQkJCQljb250aW51ZTsKLQkJCWlmIChpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAocGZuLCBuaWQpKQotCQkJCWdvdG8gb29tOwotCQl9Ci0JfQotCWhvdHBsdWdfbWVtb3J5X25vdGlmaWVyKHBhZ2VfY2dyb3VwX2NhbGxiYWNrLCAwKTsKLQlwcmludGsoS0VSTl9JTkZPICJhbGxvY2F0ZWQgJWxkIGJ5dGVzIG9mIHBhZ2VfY2dyb3VwXG4iLCB0b3RhbF91c2FnZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAicGxlYXNlIHRyeSAnY2dyb3VwX2Rpc2FibGU9bWVtb3J5JyBvcHRpb24gaWYgeW91ICIKLQkJCSAiZG9uJ3Qgd2FudCBtZW1vcnkgY2dyb3Vwc1xuIik7Ci0JcmV0dXJuOwotb29tOgotCXByaW50ayhLRVJOX0NSSVQgInRyeSAnY2dyb3VwX2Rpc2FibGU9bWVtb3J5JyBib290IG9wdGlvblxuIik7Ci0JcGFuaWMoIk91dCBvZiBtZW1vcnkiKTsKLX0KLQotdm9pZCBfX21lbWluaXQgcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQotewotCXJldHVybjsKLX0KLQotI2VuZGlmCi0KLQotI2lmZGVmIENPTkZJR19NRU1DR19TV0FQCi0KLXN0YXRpYyBERUZJTkVfTVVURVgoc3dhcF9jZ3JvdXBfbXV0ZXgpOwotc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgewotCXN0cnVjdCBwYWdlICoqbWFwOwotCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotCXNwaW5sb2NrX3QJbG9jazsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCBzd2FwX2Nncm91cF9jdHJsW01BWF9TV0FQRklMRVNdOwotCi1zdHJ1Y3Qgc3dhcF9jZ3JvdXAgewotCXVuc2lnbmVkIHNob3J0CQlpZDsKLX07Ci0jZGVmaW5lIFNDX1BFUl9QQUdFCShQQUdFX1NJWkUvc2l6ZW9mKHN0cnVjdCBzd2FwX2Nncm91cCkpCi0KLS8qCi0gKiBTd2FwQ2dyb3VwIGltcGxlbWVudHMgImxvb2t1cCIgYW5kICJleGNoYW5nZSIgb3BlcmF0aW9ucy4KLSAqIEluIHR5cGljYWwgdXNhZ2UsIHRoaXMgc3dhcF9jZ3JvdXAgaXMgYWNjZXNzZWQgdmlhIG1lbWNnJ3MgY2hhcmdlL3VuY2hhcmdlCi0gKiBhZ2FpbnN0IFN3YXBDYWNoZS4gQXQgc3dhcF9mcmVlKCksIHRoaXMgaXMgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBzd2FwLgotICoKLSAqIFRoaXMgbWVhbnMsCi0gKiAgLSB3ZSBoYXZlIG5vIHJhY2UgaW4gImV4Y2hhbmdlIiB3aGVuIHdlJ3JlIGFjY2Vzc2VkIHZpYSBTd2FwQ2FjaGUgYmVjYXVzZQotICogICAgU3dhcENhY2hlKGFuZCBpdHMgc3dwX2VudHJ5KSBpcyB1bmRlciBsb2NrLgotICogIC0gV2hlbiBjYWxsZWQgdmlhIHN3YXBfZnJlZSgpLCB0aGVyZSBpcyBubyB1c2VyIG9mIHRoaXMgZW50cnkgYW5kIG5vIHJhY2UuCi0gKiBUaGVuLCB3ZSBkb24ndCBuZWVkIGxvY2sgYXJvdW5kICJleGNoYW5nZSIuCi0gKgotICogVE9ETzogd2UgY2FuIHB1c2ggdGhlc2UgYnVmZmVycyBvdXQgdG8gSElHSE1FTS4KLSAqLwotCi0vKgotICogYWxsb2NhdGUgYnVmZmVyIGZvciBzd2FwX2Nncm91cC4KLSAqLwotc3RhdGljIGludCBzd2FwX2Nncm91cF9wcmVwYXJlKGludCB0eXBlKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsOwotCXVuc2lnbmVkIGxvbmcgaWR4LCBtYXg7Ci0KLQljdHJsID0gJnN3YXBfY2dyb3VwX2N0cmxbdHlwZV07Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IGN0cmwtPmxlbmd0aDsgaWR4KyspIHsKLQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwotCQlpZiAoIXBhZ2UpCi0JCQlnb3RvIG5vdF9lbm91Z2hfcGFnZTsKLQkJY3RybC0+bWFwW2lkeF0gPSBwYWdlOwotCX0KLQlyZXR1cm4gMDsKLW5vdF9lbm91Z2hfcGFnZToKLQltYXggPSBpZHg7Ci0JZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKQotCQlfX2ZyZWVfcGFnZShjdHJsLT5tYXBbaWR4XSk7Ci0KLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHN0cnVjdCBzd2FwX2Nncm91cCAqbG9va3VwX3N3YXBfY2dyb3VwKHN3cF9lbnRyeV90IGVudCwKLQkJCQkJc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKipjdHJscCkKLXsKLQlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50KTsKLQlzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDsKLQlzdHJ1Y3QgcGFnZSAqbWFwcGFnZTsKLQlzdHJ1Y3Qgc3dhcF9jZ3JvdXAgKnNjOwotCi0JY3RybCA9ICZzd2FwX2Nncm91cF9jdHJsW3N3cF90eXBlKGVudCldOwotCWlmIChjdHJscCkKLQkJKmN0cmxwID0gY3RybDsKLQotCW1hcHBhZ2UgPSBjdHJsLT5tYXBbb2Zmc2V0IC8gU0NfUEVSX1BBR0VdOwotCXNjID0gcGFnZV9hZGRyZXNzKG1hcHBhZ2UpOwotCXJldHVybiBzYyArIG9mZnNldCAlIFNDX1BFUl9QQUdFOwotfQotCi0vKioKLSAqIHN3YXBfY2dyb3VwX2NtcHhjaGcgLSBjbXB4Y2hnIG1lbV9jZ3JvdXAncyBpZCBmb3IgdGhpcyBzd3BfZW50cnkuCi0gKiBAZW50OiBzd2FwIGVudHJ5IHRvIGJlIGNtcHhjaGdlZAotICogQG9sZDogb2xkIGlkCi0gKiBAbmV3OiBuZXcgaWQKLSAqCi0gKiBSZXR1cm5zIG9sZCBpZCBhdCBzdWNjZXNzLCAwIGF0IGZhaWx1cmUuCi0gKiAoVGhlcmUgaXMgbm8gbWVtX2Nncm91cCB1c2luZyAwIGFzIGl0cyBpZCkKLSAqLwotdW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfY21weGNoZyhzd3BfZW50cnlfdCBlbnQsCi0JCQkJCXVuc2lnbmVkIHNob3J0IG9sZCwgdW5zaWduZWQgc2hvcnQgbmV3KQotewotCXN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsOwotCXN0cnVjdCBzd2FwX2Nncm91cCAqc2M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzaG9ydCByZXR2YWw7Ci0KLQlzYyA9IGxvb2t1cF9zd2FwX2Nncm91cChlbnQsICZjdHJsKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjdHJsLT5sb2NrLCBmbGFncyk7Ci0JcmV0dmFsID0gc2MtPmlkOwotCWlmIChyZXR2YWwgPT0gb2xkKQotCQlzYy0+aWQgPSBuZXc7Ci0JZWxzZQotCQlyZXR2YWwgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKioKLSAqIHN3YXBfY2dyb3VwX3JlY29yZCAtIHJlY29yZCBtZW1fY2dyb3VwIGZvciB0aGlzIHN3cF9lbnRyeS4KLSAqIEBlbnQ6IHN3YXAgZW50cnkgdG8gYmUgcmVjb3JkZWQgaW50bwotICogQGlkOiBtZW1fY2dyb3VwIHRvIGJlIHJlY29yZGVkCi0gKgotICogUmV0dXJucyBvbGQgdmFsdWUgYXQgc3VjY2VzcywgMCBhdCBmYWlsdXJlLgotICogKE9mIGNvdXJzZSwgb2xkIHZhbHVlIGNhbiBiZSAwLikKLSAqLwotdW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQpCi17Ci0Jc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7Ci0Jc3RydWN0IHN3YXBfY2dyb3VwICpzYzsKLQl1bnNpZ25lZCBzaG9ydCBvbGQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNjID0gbG9va3VwX3N3YXBfY2dyb3VwKGVudCwgJmN0cmwpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsKLQlvbGQgPSBzYy0+aWQ7Ci0Jc2MtPmlkID0gaWQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RybC0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIG9sZDsKLX0KLQotLyoqCi0gKiBsb29rdXBfc3dhcF9jZ3JvdXBfaWQgLSBsb29rdXAgbWVtX2Nncm91cCBpZCB0aWVkIHRvIHN3YXAgZW50cnkKLSAqIEBlbnQ6IHN3YXAgZW50cnkgdG8gYmUgbG9va2VkIHVwLgotICoKLSAqIFJldHVybnMgSUQgb2YgbWVtX2Nncm91cCBhdCBzdWNjZXNzLiAwIGF0IGZhaWx1cmUuICgwIGlzIGludmFsaWQgSUQpCi0gKi8KLXVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpCi17Ci0JcmV0dXJuIGxvb2t1cF9zd2FwX2Nncm91cChlbnQsIE5VTEwpLT5pZDsKLX0KLQotaW50IHN3YXBfY2dyb3VwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBtYXhfcGFnZXMpCi17Ci0Jdm9pZCAqYXJyYXk7Ci0JdW5zaWduZWQgbG9uZyBhcnJheV9zaXplOwotCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotCXN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsOwotCi0JaWYgKCFkb19zd2FwX2FjY291bnQpCi0JCXJldHVybiAwOwotCi0JbGVuZ3RoID0gRElWX1JPVU5EX1VQKG1heF9wYWdlcywgU0NfUEVSX1BBR0UpOwotCWFycmF5X3NpemUgPSBsZW5ndGggKiBzaXplb2Yodm9pZCAqKTsKLQotCWFycmF5ID0gdnphbGxvYyhhcnJheV9zaXplKTsKLQlpZiAoIWFycmF5KQotCQlnb3RvIG5vbWVtOwotCi0JY3RybCA9ICZzd2FwX2Nncm91cF9jdHJsW3R5cGVdOwotCW11dGV4X2xvY2soJnN3YXBfY2dyb3VwX211dGV4KTsKLQljdHJsLT5sZW5ndGggPSBsZW5ndGg7Ci0JY3RybC0+bWFwID0gYXJyYXk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmN0cmwtPmxvY2spOwotCWlmIChzd2FwX2Nncm91cF9wcmVwYXJlKHR5cGUpKSB7Ci0JCS8qIG1lbW9yeSBzaG9ydGFnZSAqLwotCQljdHJsLT5tYXAgPSBOVUxMOwotCQljdHJsLT5sZW5ndGggPSAwOwotCQltdXRleF91bmxvY2soJnN3YXBfY2dyb3VwX211dGV4KTsKLQkJdmZyZWUoYXJyYXkpOwotCQlnb3RvIG5vbWVtOwotCX0KLQltdXRleF91bmxvY2soJnN3YXBfY2dyb3VwX211dGV4KTsKLQotCXJldHVybiAwOwotbm9tZW06Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY291bGRuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Igc3dhcF9jZ3JvdXAuXG4iKTsKLQlwcmludGsoS0VSTl9JTkZPCi0JCSJzd2FwX2Nncm91cCBjYW4gYmUgZGlzYWJsZWQgYnkgc3dhcGFjY291bnQ9MCBib290IG9wdGlvblxuIik7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLXZvaWQgc3dhcF9jZ3JvdXBfc3dhcG9mZihpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgcGFnZSAqKm1hcDsKLQl1bnNpZ25lZCBsb25nIGksIGxlbmd0aDsKLQlzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDsKLQotCWlmICghZG9fc3dhcF9hY2NvdW50KQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZzd2FwX2Nncm91cF9tdXRleCk7Ci0JY3RybCA9ICZzd2FwX2Nncm91cF9jdHJsW3R5cGVdOwotCW1hcCA9IGN0cmwtPm1hcDsKLQlsZW5ndGggPSBjdHJsLT5sZW5ndGg7Ci0JY3RybC0+bWFwID0gTlVMTDsKLQljdHJsLT5sZW5ndGggPSAwOwotCW11dGV4X3VubG9jaygmc3dhcF9jZ3JvdXBfbXV0ZXgpOwotCi0JaWYgKG1hcCkgewotCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gbWFwW2ldOwotCQkJaWYgKHBhZ2UpCi0JCQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JCX0KLQkJdmZyZWUobWFwKTsKLQl9Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDA5NTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbW0vcGFnZV9jb3VudGVyLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBMb2NrbGVzcyBoaWVyYXJjaGljYWwgcGFnZSBhY2NvdW50aW5nICYgbGltaXRpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUmVkIEhhdCwgSW5jLiwgSm9oYW5uZXMgV2VpbmVyCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoqCisgKiBwYWdlX2NvdW50ZXJfY2FuY2VsIC0gdGFrZSBwYWdlcyBvdXQgb2YgdGhlIGxvY2FsIGNvdW50ZXIKKyAqIEBjb3VudGVyOiBjb3VudGVyCisgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBjYW5jZWwKKyAqLwordm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCit7CisJbG9uZyBuZXc7CisKKwluZXcgPSBhdG9taWNfbG9uZ19zdWJfcmV0dXJuKG5yX3BhZ2VzLCAmY291bnRlci0+Y291bnQpOworCS8qIE1vcmUgdW5jaGFyZ2VzIHRoYW4gY2hhcmdlcz8gKi8KKwlXQVJOX09OX09OQ0UobmV3IDwgMCk7Cit9CisKKy8qKgorICogcGFnZV9jb3VudGVyX2NoYXJnZSAtIGhpZXJhcmNoaWNhbGx5IGNoYXJnZSBwYWdlcworICogQGNvdW50ZXI6IGNvdW50ZXIKKyAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIGNoYXJnZQorICoKKyAqIE5PVEU6IFRoaXMgZG9lcyBub3QgY29uc2lkZXIgYW55IGNvbmZpZ3VyZWQgY291bnRlciBsaW1pdHMuCisgKi8KK3ZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQoreworCXN0cnVjdCBwYWdlX2NvdW50ZXIgKmM7CisKKwlmb3IgKGMgPSBjb3VudGVyOyBjOyBjID0gYy0+cGFyZW50KSB7CisJCWxvbmcgbmV3OworCisJCW5ldyA9IGF0b21pY19sb25nX2FkZF9yZXR1cm4obnJfcGFnZXMsICZjLT5jb3VudCk7CisJCS8qCisJCSAqIFRoaXMgaXMgaW5kZWVkIHJhY3ksIGJ1dCB3ZSBjYW4gbGl2ZSB3aXRoIHNvbWUKKwkJICogaW5hY2N1cmFjeSBpbiB0aGUgd2F0ZXJtYXJrLgorCQkgKi8KKwkJaWYgKG5ldyA+IGMtPndhdGVybWFyaykKKwkJCWMtPndhdGVybWFyayA9IG5ldzsKKwl9Cit9CisKKy8qKgorICogcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UgLSB0cnkgdG8gaGllcmFyY2hpY2FsbHkgY2hhcmdlIHBhZ2VzCisgKiBAY291bnRlcjogY291bnRlcgorICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gY2hhcmdlCisgKiBAZmFpbDogcG9pbnRzIGZpcnN0IGNvdW50ZXIgdG8gaGl0IGl0cyBsaW1pdCwgaWYgYW55CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIC1FTk9NRU0gYW5kIEBmYWlsIGlmIHRoZSBjb3VudGVyIG9yIG9uZSBvZgorICogaXRzIGFuY2VzdG9ycyBoYXMgaGl0IGl0cyBjb25maWd1cmVkIGxpbWl0LgorICovCitpbnQgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwKKwkJCSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKipmYWlsKQoreworCXN0cnVjdCBwYWdlX2NvdW50ZXIgKmM7CisKKwlmb3IgKGMgPSBjb3VudGVyOyBjOyBjID0gYy0+cGFyZW50KSB7CisJCWxvbmcgbmV3OworCQkvKgorCQkgKiBDaGFyZ2Ugc3BlY3VsYXRpdmVseSB0byBhdm9pZCBhbiBleHBlbnNpdmUgQ0FTLiAgSWYKKwkJICogYSBiaWdnZXIgY2hhcmdlIGZhaWxzLCBpdCBtaWdodCBmYWxzZWx5IGxvY2sgb3V0IGEKKwkJICogcmFjaW5nIHNtYWxsZXIgY2hhcmdlIGFuZCBzZW5kIGl0IGludG8gcmVjbGFpbQorCQkgKiBlYXJseSwgYnV0IHRoZSBlcnJvciBpcyBsaW1pdGVkIHRvIHRoZSBkaWZmZXJlbmNlCisJCSAqIGJldHdlZW4gdGhlIHR3byBzaXplcywgd2hpY2ggaXMgbGVzcyB0aGFuIDJNLzRNIGluCisJCSAqIGNhc2Ugb2YgYSBUSFAgbG9ja2luZyBvdXQgYSByZWd1bGFyIHBhZ2UgY2hhcmdlLgorCQkgKgorCQkgKiBUaGUgYXRvbWljX2xvbmdfYWRkX3JldHVybigpIGltcGxpZXMgYSBmdWxsIG1lbW9yeQorCQkgKiBiYXJyaWVyIGJldHdlZW4gaW5jcmVtZW50aW5nIHRoZSBjb3VudCBhbmQgcmVhZGluZworCQkgKiB0aGUgbGltaXQuICBXaGVuIHJhY2luZyB3aXRoIHBhZ2VfY291bnRlcl9saW1pdCgpLAorCQkgKiB3ZSBlaXRoZXIgc2VlIHRoZSBuZXcgbGltaXQgb3IgdGhlIHNldHRlciBzZWVzIHRoZQorCQkgKiBjb3VudGVyIGhhcyBjaGFuZ2VkIGFuZCByZXRyaWVzLgorCQkgKi8KKwkJbmV3ID0gYXRvbWljX2xvbmdfYWRkX3JldHVybihucl9wYWdlcywgJmMtPmNvdW50KTsKKwkJaWYgKG5ldyA+IGMtPmxpbWl0KSB7CisJCQlhdG9taWNfbG9uZ19zdWIobnJfcGFnZXMsICZjLT5jb3VudCk7CisJCQkvKgorCQkJICogVGhpcyBpcyByYWN5LCBidXQgd2UgY2FuIGxpdmUgd2l0aCBzb21lCisJCQkgKiBpbmFjY3VyYWN5IGluIHRoZSBmYWlsY250LgorCQkJICovCisJCQljLT5mYWlsY250Kys7CisJCQkqZmFpbCA9IGM7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQkvKgorCQkgKiBKdXN0IGxpa2Ugd2l0aCBmYWlsY250LCB3ZSBjYW4gbGl2ZSB3aXRoIHNvbWUKKwkJICogaW5hY2N1cmFjeSBpbiB0aGUgd2F0ZXJtYXJrLgorCQkgKi8KKwkJaWYgKG5ldyA+IGMtPndhdGVybWFyaykKKwkJCWMtPndhdGVybWFyayA9IG5ldzsKKwl9CisJcmV0dXJuIDA7CisKK2ZhaWxlZDoKKwlmb3IgKGMgPSBjb3VudGVyOyBjICE9ICpmYWlsOyBjID0gYy0+cGFyZW50KQorCQlwYWdlX2NvdW50ZXJfY2FuY2VsKGMsIG5yX3BhZ2VzKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIHBhZ2VfY291bnRlcl91bmNoYXJnZSAtIGhpZXJhcmNoaWNhbGx5IHVuY2hhcmdlIHBhZ2VzCisgKiBAY291bnRlcjogY291bnRlcgorICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gdW5jaGFyZ2UKKyAqLwordm9pZCBwYWdlX2NvdW50ZXJfdW5jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKK3sKKwlzdHJ1Y3QgcGFnZV9jb3VudGVyICpjOworCisJZm9yIChjID0gY291bnRlcjsgYzsgYyA9IGMtPnBhcmVudCkKKwkJcGFnZV9jb3VudGVyX2NhbmNlbChjLCBucl9wYWdlcyk7Cit9CisKKy8qKgorICogcGFnZV9jb3VudGVyX2xpbWl0IC0gbGltaXQgdGhlIG51bWJlciBvZiBwYWdlcyBhbGxvd2VkCisgKiBAY291bnRlcjogY291bnRlcgorICogQGxpbWl0OiBsaW1pdCB0byBzZXQKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHRoZSBjdXJyZW50IG51bWJlciBvZiBwYWdlcyBvbiB0aGUKKyAqIGNvdW50ZXIgYWxyZWFkeSBleGNlZWRzIHRoZSBzcGVjaWZpZWQgbGltaXQuCisgKgorICogVGhlIGNhbGxlciBtdXN0IHNlcmlhbGl6ZSBpbnZvY2F0aW9ucyBvbiB0aGUgc2FtZSBjb3VudGVyLgorICovCitpbnQgcGFnZV9jb3VudGVyX2xpbWl0KHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbGltaXQpCit7CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBsb25nIG9sZDsKKwkJbG9uZyBjb3VudDsKKworCQkvKgorCQkgKiBVcGRhdGUgdGhlIGxpbWl0IHdoaWxlIG1ha2luZyBzdXJlIHRoYXQgaXQncyBub3QKKwkJICogYmVsb3cgdGhlIGNvbmN1cnJlbnRseS1jaGFuZ2luZyBjb3VudGVyIHZhbHVlLgorCQkgKgorCQkgKiBUaGUgeGNoZyBpbXBsaWVzIHR3byBmdWxsIG1lbW9yeSBiYXJyaWVycyBiZWZvcmUKKwkJICogYW5kIGFmdGVyLCBzbyB0aGUgcmVhZC1zd2FwLXJlYWQgaXMgb3JkZXJlZCBhbmQKKwkJICogZW5zdXJlcyBjb2hlcmVuY3kgd2l0aCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgpOgorCQkgKiB0aGF0IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBjb3VudCBiZWZvcmUgY2hlY2tpbmcKKwkJICogdGhlIGxpbWl0LCBzbyBpZiBpdCBzZWVzIHRoZSBvbGQgbGltaXQsIHdlIHNlZSB0aGUKKwkJICogbW9kaWZpZWQgY291bnRlciBhbmQgcmV0cnkuCisJCSAqLworCQljb3VudCA9IGF0b21pY19sb25nX3JlYWQoJmNvdW50ZXItPmNvdW50KTsKKworCQlpZiAoY291bnQgPiBsaW1pdCkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJb2xkID0geGNoZygmY291bnRlci0+bGltaXQsIGxpbWl0KTsKKworCQlpZiAoYXRvbWljX2xvbmdfcmVhZCgmY291bnRlci0+Y291bnQpIDw9IGNvdW50KQorCQkJcmV0dXJuIDA7CisKKwkJY291bnRlci0+bGltaXQgPSBvbGQ7CisJCWNvbmRfcmVzY2hlZCgpOworCX0KK30KKworLyoqCisgKiBwYWdlX2NvdW50ZXJfbWVtcGFyc2UgLSBtZW1wYXJzZSgpIGZvciBwYWdlIGNvdW50ZXIgbGltaXRzCisgKiBAYnVmOiBzdHJpbmcgdG8gcGFyc2UKKyAqIEBucl9wYWdlczogcmV0dXJucyB0aGUgcmVzdWx0IGluIG51bWJlciBvZiBwYWdlcworICoKKyAqIFJldHVybnMgLUVJTlZBTCwgb3IgMCBhbmQgQG5yX3BhZ2VzIG9uIHN1Y2Nlc3MuICBAbnJfcGFnZXMgd2lsbCBiZQorICogbGltaXRlZCB0byAlUEFHRV9DT1VOVEVSX01BWC4KKyAqLworaW50IHBhZ2VfY291bnRlcl9tZW1wYXJzZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgKm5yX3BhZ2VzKQoreworCWNoYXIgdW5saW1pdGVkW10gPSAiLTEiOworCWNoYXIgKmVuZDsKKwl1NjQgYnl0ZXM7CisKKwlpZiAoIXN0cm5jbXAoYnVmLCB1bmxpbWl0ZWQsIHNpemVvZih1bmxpbWl0ZWQpKSkgeworCQkqbnJfcGFnZXMgPSBQQUdFX0NPVU5URVJfTUFYOworCQlyZXR1cm4gMDsKKwl9CisKKwlieXRlcyA9IG1lbXBhcnNlKGJ1ZiwgJmVuZCk7CisJaWYgKCplbmQgIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqbnJfcGFnZXMgPSBtaW4oYnl0ZXMgLyBQQUdFX1NJWkUsICh1NjQpUEFHRV9DT1VOVEVSX01BWCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCmluZGV4IGM4Nzc4ZjcuLjcyZjVhYzMgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmMKKysrIGIvbW0vcGFnZV9pc29sYXRpb24uYwpAQCAtNjgsNyArNjgsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bG9jaywgZmxhZ3MpOwogCWlmICghcmV0KQotCQlkcmFpbl9hbGxfcGFnZXMoKTsKKwkJZHJhaW5fYWxsX3BhZ2VzKHpvbmUpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCAxOTg4NmZiLi40NWViYTM2IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKKysrIGIvbW0vcm1hcC5jCkBAIC0yNzQsNiArMjc0LDcgQEAKIHsKIAlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YzsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOworCWludCBlcnJvcjsKIAogCS8qIERvbid0IGJvdGhlciBpZiB0aGUgcGFyZW50IHByb2Nlc3MgaGFzIG5vIGFub25fdm1hIGhlcmUuICovCiAJaWYgKCFwdm1hLT5hbm9uX3ZtYSkKQEAgLTI4Myw4ICsyODQsOSBAQAogCSAqIEZpcnN0LCBhdHRhY2ggdGhlIG5ldyBWTUEgdG8gdGhlIHBhcmVudCBWTUEncyBhbm9uX3ZtYXMsCiAJICogc28gcm1hcCBjYW4gZmluZCBub24tQ09XZWQgcGFnZXMgaW4gY2hpbGQgcHJvY2Vzc2VzLgogCSAqLwotCWlmIChhbm9uX3ZtYV9jbG9uZSh2bWEsIHB2bWEpKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAKIAkvKiBUaGVuIGFkZCBvdXIgb3duIGFub25fdm1hLiAqLwogCWFub25fdm1hID0gYW5vbl92bWFfYWxsb2MoKTsKQEAgLTEwNTEsNyArMTA1Myw3IEBACiAJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX01BUFBFRCk7CiAJCW1lbV9jZ3JvdXBfaW5jX3BhZ2Vfc3RhdChtZW1jZywgTUVNX0NHUk9VUF9TVEFUX0ZJTEVfTUFQUEVEKTsKIAl9Ci0JbWVtX2Nncm91cF9lbmRfcGFnZV9zdGF0KG1lbWNnLCBsb2NrZWQsIGZsYWdzKTsKKwltZW1fY2dyb3VwX2VuZF9wYWdlX3N0YXQobWVtY2csICZsb2NrZWQsICZmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhZ2VfcmVtb3ZlX2ZpbGVfcm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTEwODEsNyArMTA4Myw3IEBACiAJaWYgKHVubGlrZWx5KFBhZ2VNbG9ja2VkKHBhZ2UpKSkKIAkJY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKIG91dDoKLQltZW1fY2dyb3VwX2VuZF9wYWdlX3N0YXQobWVtY2csIGxvY2tlZCwgZmxhZ3MpOworCW1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChtZW1jZywgJmxvY2tlZCwgJmZsYWdzKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggZWIyYjJlYS4uNzllMTVmMCAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtMjU5MCw3ICsyNTkwLDEwIEBACiAJICogQmUgbGF6eSBhbmQgb25seSBjaGVjayBmb3IgdmFsaWQgZmxhZ3MgaGVyZSwgIGtlZXBpbmcgaXQgb3V0IG9mIHRoZQogCSAqIGNyaXRpY2FsIHBhdGggaW4ga21lbV9jYWNoZV9hbGxvYygpLgogCSAqLwotCUJVR19PTihmbGFncyAmIEdGUF9TTEFCX0JVR19NQVNLKTsKKwlpZiAodW5saWtlbHkoZmxhZ3MgJiBHRlBfU0xBQl9CVUdfTUFTSykpIHsKKwkJcHJfZW1lcmcoImdmcDogJXVcbiIsIGZsYWdzICYgR0ZQX1NMQUJfQlVHX01BU0spOworCQlCVUcoKTsKKwl9CiAJbG9jYWxfZmxhZ3MgPSBmbGFncyAmIChHRlBfQ09OU1RSQUlOVF9NQVNLfEdGUF9SRUNMQUlNX01BU0spOwogCiAJLyogVGFrZSB0aGUgbm9kZSBsaXN0IGxvY2sgdG8gY2hhbmdlIHRoZSBjb2xvdXJfbmV4dCBvbiB0aGlzIG5vZGUgKi8KQEAgLTMwNzYsNyArMzA3OSw3IEBACiAJdm9pZCAqb2JqOwogCWludCB4OwogCi0JVk1fQlVHX09OKG5vZGVpZCA+IG51bV9vbmxpbmVfbm9kZXMoKSk7CisJVk1fQlVHX09OKG5vZGVpZCA8IDAgfHwgbm9kZWlkID49IE1BWF9OVU1OT0RFUyk7CiAJbiA9IGdldF9ub2RlKGNhY2hlcCwgbm9kZWlkKTsKIAlCVUdfT04oIW4pOwogCkBAIC0zNTgwLDExICszNTgzLDExIEBACiAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAodXNlX2FsaWVuX2NhY2hlcykgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FsaWVuID0gYWxsb2NfYWxpZW5fY2FjaGUobm9kZSwgY2FjaGVwLT5saW1pdCwgZ2ZwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3X2FsaWVuKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQorCQlpZiAodXNlX2FsaWVuX2NhY2hlcykgeworCQkJbmV3X2FsaWVuID0gYWxsb2NfYWxpZW5fY2FjaGUobm9kZSwgY2FjaGVwLT5saW1pdCwgZ2ZwKTsKKwkJCWlmICghbmV3X2FsaWVuKQorCQkJCWdvdG8gZmFpbDsKKwkJfQogCiAJCW5ld19zaGFyZWQgPSBOVUxMOwogCQlpZiAoY2FjaGVwLT5zaGFyZWQpIHsKQEAgLTQwNDMsMTIgKzQwNDYsNiBAQAogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NMQUJfTEVBSwogCi1zdGF0aWMgdm9pZCAqbGVha3Nfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKLXsKLQltdXRleF9sb2NrKCZzbGFiX211dGV4KTsKLQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNsYWJfY2FjaGVzLCAqcG9zKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgYWRkX2NhbGxlcih1bnNpZ25lZCBsb25nICpuLCB1bnNpZ25lZCBsb25nIHYpCiB7CiAJdW5zaWduZWQgbG9uZyAqcDsKQEAgLTQxNzAsNyArNDE2Nyw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2xhYnN0YXRzX29wID0gewotCS5zdGFydCA9IGxlYWtzX3N0YXJ0LAorCS5zdGFydCA9IHNsYWJfc3RhcnQsCiAJLm5leHQgPSBzbGFiX25leHQsCiAJLnN0b3AgPSBzbGFiX3N0b3AsCiAJLnNob3cgPSBsZWFrc19zaG93LApkaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oCmluZGV4IGFiMDE5ZTYuLjFjZjQwMDU0IDEwMDY0NAotLS0gYS9tbS9zbGFiLmgKKysrIGIvbW0vc2xhYi5oCkBAIC0yMDksMTUgKzIwOSwxNSBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCXBhcmFtcyA9IHJjdV9kZXJlZmVyZW5jZShzLT5tZW1jZ19wYXJhbXMpOwotCWNhY2hlcCA9IHBhcmFtcy0+bWVtY2dfY2FjaGVzW2lkeF07Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSB3aWxsIGFjY2VzcyB0aGUgdXAtdG8tZGF0ZSB2YWx1ZS4gVGhlIGNvZGUgdXBkYXRpbmcKIAkgKiBtZW1jZ19jYWNoZXMgaXNzdWVzIGEgd3JpdGUgYmFycmllciB0byBtYXRjaCB0aGlzIChzZWUKIAkgKiBtZW1jZ19yZWdpc3Rlcl9jYWNoZSgpKS4KIAkgKi8KLQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKKwljYWNoZXAgPSBsb2NrbGVzc19kZXJlZmVyZW5jZShwYXJhbXMtPm1lbWNnX2NhY2hlc1tpZHhdKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwogCXJldHVybiBjYWNoZXA7CiB9CiAKQEAgLTM1Nyw3ICszNTcsOSBAQAogCiAjZW5kaWYKIAordm9pZCAqc2xhYl9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKTsKIHZvaWQgKnNsYWJfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnAsIGxvZmZfdCAqcG9zKTsKIHZvaWQgc2xhYl9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCk7CitpbnQgbWVtY2dfc2xhYl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCk7CiAKICNlbmRpZiAvKiBNTV9TTEFCX0ggKi8KZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jCmluZGV4IGRjZGFiODEuLmUwM2RkNmYgMTAwNjQ0Ci0tLSBhL21tL3NsYWJfY29tbW9uLmMKKysrIGIvbW0vc2xhYl9jb21tb24uYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJc2l6ZSA9IEFMSUdOKHNpemUsIGFsaWduKTsKIAlmbGFncyA9IGttZW1fY2FjaGVfZmxhZ3Moc2l6ZSwgZmxhZ3MsIG5hbWUsIE5VTEwpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmc2xhYl9jYWNoZXMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UocywgJnNsYWJfY2FjaGVzLCBsaXN0KSB7CiAJCWlmIChzbGFiX3VubWVyZ2VhYmxlKHMpKQogCQkJY29udGludWU7CiAKQEAgLTgxMSw3ICs4MTEsNyBAQAogI2RlZmluZSBTTEFCSU5GT19SSUdIVFMgU19JUlVTUgogI2VuZGlmCiAKLXZvaWQgcHJpbnRfc2xhYmluZm9faGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3N0YXRpYyB2b2lkIHByaW50X3NsYWJpbmZvX2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJLyoKIAkgKiBPdXRwdXQgZm9ybWF0IHZlcnNpb24sIHNvIGF0IGxlYXN0IHdlIGNhbiBjaGFuZ2UgaXQKQEAgLTgzNCwxNCArODM0LDkgQEAKIAlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIAotc3RhdGljIHZvaWQgKnNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3ZvaWQgKnNsYWJfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKLQlsb2ZmX3QgbiA9ICpwb3M7Ci0KIAltdXRleF9sb2NrKCZzbGFiX211dGV4KTsKLQlpZiAoIW4pCi0JCXByaW50X3NsYWJpbmZvX2hlYWRlcihtKTsKLQogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2xhYl9jYWNoZXMsICpwb3MpOwogfQogCkBAIC04ODEsNyArODc2LDcgQEAKIAl9CiB9CiAKLWludCBjYWNoZV9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCitzdGF0aWMgdm9pZCBjYWNoZV9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJc3RydWN0IHNsYWJpbmZvIHNpbmZvOwogCkBAIC05MDAsMTggKzg5NSwzMyBAQAogCQkgICBzaW5mby5hY3RpdmVfc2xhYnMsIHNpbmZvLm51bV9zbGFicywgc2luZm8uc2hhcmVkX2F2YWlsKTsKIAlzbGFiaW5mb19zaG93X3N0YXRzKG0sIHMpOwogCXNlcV9wdXRjKG0sICdcbicpOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCitzdGF0aWMgaW50IHNsYWJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBrbWVtX2NhY2hlLCBsaXN0KTsKIAotCWlmICghaXNfcm9vdF9jYWNoZShzKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhY2hlX3Nob3cocywgbSk7CisJaWYgKHAgPT0gc2xhYl9jYWNoZXMubmV4dCkKKwkJcHJpbnRfc2xhYmluZm9faGVhZGVyKG0pOworCWlmIChpc19yb290X2NhY2hlKHMpKQorCQljYWNoZV9zaG93KHMsIG0pOworCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX01FTUNHX0tNRU0KK2ludCBtZW1jZ19zbGFiX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCXN0cnVjdCBrbWVtX2NhY2hlICpzID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3Qga21lbV9jYWNoZSwgbGlzdCk7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKG0pKTsKKworCWlmIChwID09IHNsYWJfY2FjaGVzLm5leHQpCisJCXByaW50X3NsYWJpbmZvX2hlYWRlcihtKTsKKwlpZiAoIWlzX3Jvb3RfY2FjaGUocykgJiYgcy0+bWVtY2dfcGFyYW1zLT5tZW1jZyA9PSBtZW1jZykKKwkJY2FjaGVfc2hvdyhzLCBtKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAvKgogICogc2xhYmluZm9fb3AgLSBpdGVyYXRvciB0aGF0IGdlbmVyYXRlcyAvcHJvYy9zbGFiaW5mbwogICoKQEAgLTkyNiwxMCArOTM2LDEwIEBACiAgKiArIGZ1cnRoZXIgdmFsdWVzIG9uIFNNUCBhbmQgd2l0aCBzdGF0aXN0aWNzIGVuYWJsZWQKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzbGFiaW5mb19vcCA9IHsKLQkuc3RhcnQgPSBzX3N0YXJ0LAorCS5zdGFydCA9IHNsYWJfc3RhcnQsCiAJLm5leHQgPSBzbGFiX25leHQsCiAJLnN0b3AgPSBzbGFiX3N0b3AsCi0JLnNob3cgPSBzX3Nob3csCisJLnNob3cgPSBzbGFiX3Nob3csCiB9OwogCiBzdGF0aWMgaW50IHNsYWJpbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggYWU3YjlmMS4uMzg2YmJlZCAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtODQ5LDEyICs4NDksMTIgQEAKIAltYXhvYmogPSBvcmRlcl9vYmplY3RzKGNvbXBvdW5kX29yZGVyKHBhZ2UpLCBzLT5zaXplLCBzLT5yZXNlcnZlZCk7CiAJaWYgKHBhZ2UtPm9iamVjdHMgPiBtYXhvYmopIHsKIAkJc2xhYl9lcnIocywgcGFnZSwgIm9iamVjdHMgJXUgPiBtYXggJXUiLAotCQkJcy0+bmFtZSwgcGFnZS0+b2JqZWN0cywgbWF4b2JqKTsKKwkJCXBhZ2UtPm9iamVjdHMsIG1heG9iaik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAocGFnZS0+aW51c2UgPiBwYWdlLT5vYmplY3RzKSB7CiAJCXNsYWJfZXJyKHMsIHBhZ2UsICJpbnVzZSAldSA+IG1heCAldSIsCi0JCQlzLT5uYW1lLCBwYWdlLT5pbnVzZSwgcGFnZS0+b2JqZWN0cyk7CisJCQlwYWdlLT5pbnVzZSwgcGFnZS0+b2JqZWN0cyk7CiAJCXJldHVybiAwOwogCX0KIAkvKiBTbGFiX3BhZF9jaGVjayBmaXhlcyB0aGluZ3MgdXAgYWZ0ZXIgaXRzZWxmICovCkBAIC04NzEsNyArODcxLDcgQEAKIAlpbnQgbnIgPSAwOwogCXZvaWQgKmZwOwogCXZvaWQgKm9iamVjdCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBtYXhfb2JqZWN0czsKKwlpbnQgbWF4X29iamVjdHM7CiAKIAlmcCA9IHBhZ2UtPmZyZWVsaXN0OwogCXdoaWxlIChmcCAmJiBuciA8PSBwYWdlLT5vYmplY3RzKSB7CkBAIC0xMzc3LDcgKzEzNzcsMTAgQEAKIAlpbnQgb3JkZXI7CiAJaW50IGlkeDsKIAotCUJVR19PTihmbGFncyAmIEdGUF9TTEFCX0JVR19NQVNLKTsKKwlpZiAodW5saWtlbHkoZmxhZ3MgJiBHRlBfU0xBQl9CVUdfTUFTSykpIHsKKwkJcHJfZW1lcmcoImdmcDogJXVcbiIsIGZsYWdzICYgR0ZQX1NMQUJfQlVHX01BU0spOworCQlCVUcoKTsKKwl9CiAKIAlwYWdlID0gYWxsb2NhdGVfc2xhYihzLAogCQlmbGFncyAmIChHRlBfUkVDTEFJTV9NQVNLIHwgR0ZQX0NPTlNUUkFJTlRfTUFTSyksIG5vZGUpOwpAQCAtMjU1NCw3ICsyNTU3LDcgQEAKIAogCQkJfSBlbHNlIHsgLyogTmVlZHMgdG8gYmUgdGFrZW4gb2ZmIGEgbGlzdCAqLwogCi0JICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGdldF9ub2RlKHMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKKwkJCQluID0gZ2V0X25vZGUocywgcGFnZV90b19uaWQocGFnZSkpOwogCQkJCS8qCiAJCQkJICogU3BlY3VsYXRpdmVseSBhY3F1aXJlIHRoZSBsaXN0X2xvY2suCiAJCQkJICogSWYgdGhlIGNtcHhjaGcgZG9lcyBub3Qgc3VjY2VlZCB0aGVuIHdlIG1heQpAQCAtMjU4NywxMCArMjU5MCwxMCBAQAogCQkgKiBUaGUgbGlzdCBsb2NrIHdhcyBub3QgdGFrZW4gdGhlcmVmb3JlIG5vIGxpc3QKIAkJICogYWN0aXZpdHkgY2FuIGJlIG5lY2Vzc2FyeS4KIAkJICovCi0gICAgICAgICAgICAgICAgaWYgKHdhc19mcm96ZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0KHMsIEZSRUVfRlJPWkVOKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwkJaWYgKHdhc19mcm96ZW4pCisJCQlzdGF0KHMsIEZSRUVfRlJPWkVOKTsKKwkJcmV0dXJuOworCX0KIAogCWlmICh1bmxpa2VseSghbmV3LmludXNlICYmIG4tPm5yX3BhcnRpYWwgPj0gcy0+bWluX3BhcnRpYWwpKQogCQlnb3RvIHNsYWJfZW1wdHk7CmRpZmYgLS1naXQgYS9tbS9zd2FwX2Nncm91cC5jIGIvbW0vc3dhcF9jZ3JvdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWY3ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvbW0vc3dhcF9jZ3JvdXAuYwpAQCAtMCwwICsxLDIwOCBAQAorI2luY2x1ZGUgPGxpbnV4L3N3YXBfY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+IC8qIGRlcGVuZHMgb24gbW0uaCBpbmNsdWRlICovCisKK3N0YXRpYyBERUZJTkVfTVVURVgoc3dhcF9jZ3JvdXBfbXV0ZXgpOworc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgeworCXN0cnVjdCBwYWdlICoqbWFwOworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOworCXNwaW5sb2NrX3QJbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCBzd2FwX2Nncm91cF9jdHJsW01BWF9TV0FQRklMRVNdOworCitzdHJ1Y3Qgc3dhcF9jZ3JvdXAgeworCXVuc2lnbmVkIHNob3J0CQlpZDsKK307CisjZGVmaW5lIFNDX1BFUl9QQUdFCShQQUdFX1NJWkUvc2l6ZW9mKHN0cnVjdCBzd2FwX2Nncm91cCkpCisKKy8qCisgKiBTd2FwQ2dyb3VwIGltcGxlbWVudHMgImxvb2t1cCIgYW5kICJleGNoYW5nZSIgb3BlcmF0aW9ucy4KKyAqIEluIHR5cGljYWwgdXNhZ2UsIHRoaXMgc3dhcF9jZ3JvdXAgaXMgYWNjZXNzZWQgdmlhIG1lbWNnJ3MgY2hhcmdlL3VuY2hhcmdlCisgKiBhZ2FpbnN0IFN3YXBDYWNoZS4gQXQgc3dhcF9mcmVlKCksIHRoaXMgaXMgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBzd2FwLgorICoKKyAqIFRoaXMgbWVhbnMsCisgKiAgLSB3ZSBoYXZlIG5vIHJhY2UgaW4gImV4Y2hhbmdlIiB3aGVuIHdlJ3JlIGFjY2Vzc2VkIHZpYSBTd2FwQ2FjaGUgYmVjYXVzZQorICogICAgU3dhcENhY2hlKGFuZCBpdHMgc3dwX2VudHJ5KSBpcyB1bmRlciBsb2NrLgorICogIC0gV2hlbiBjYWxsZWQgdmlhIHN3YXBfZnJlZSgpLCB0aGVyZSBpcyBubyB1c2VyIG9mIHRoaXMgZW50cnkgYW5kIG5vIHJhY2UuCisgKiBUaGVuLCB3ZSBkb24ndCBuZWVkIGxvY2sgYXJvdW5kICJleGNoYW5nZSIuCisgKgorICogVE9ETzogd2UgY2FuIHB1c2ggdGhlc2UgYnVmZmVycyBvdXQgdG8gSElHSE1FTS4KKyAqLworCisvKgorICogYWxsb2NhdGUgYnVmZmVyIGZvciBzd2FwX2Nncm91cC4KKyAqLworc3RhdGljIGludCBzd2FwX2Nncm91cF9wcmVwYXJlKGludCB0eXBlKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsOworCXVuc2lnbmVkIGxvbmcgaWR4LCBtYXg7CisKKwljdHJsID0gJnN3YXBfY2dyb3VwX2N0cmxbdHlwZV07CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGN0cmwtPmxlbmd0aDsgaWR4KyspIHsKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCQlpZiAoIXBhZ2UpCisJCQlnb3RvIG5vdF9lbm91Z2hfcGFnZTsKKwkJY3RybC0+bWFwW2lkeF0gPSBwYWdlOworCX0KKwlyZXR1cm4gMDsKK25vdF9lbm91Z2hfcGFnZToKKwltYXggPSBpZHg7CisJZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKQorCQlfX2ZyZWVfcGFnZShjdHJsLT5tYXBbaWR4XSk7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHN0cnVjdCBzd2FwX2Nncm91cCAqbG9va3VwX3N3YXBfY2dyb3VwKHN3cF9lbnRyeV90IGVudCwKKwkJCQkJc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKipjdHJscCkKK3sKKwlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50KTsKKwlzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDsKKwlzdHJ1Y3QgcGFnZSAqbWFwcGFnZTsKKwlzdHJ1Y3Qgc3dhcF9jZ3JvdXAgKnNjOworCisJY3RybCA9ICZzd2FwX2Nncm91cF9jdHJsW3N3cF90eXBlKGVudCldOworCWlmIChjdHJscCkKKwkJKmN0cmxwID0gY3RybDsKKworCW1hcHBhZ2UgPSBjdHJsLT5tYXBbb2Zmc2V0IC8gU0NfUEVSX1BBR0VdOworCXNjID0gcGFnZV9hZGRyZXNzKG1hcHBhZ2UpOworCXJldHVybiBzYyArIG9mZnNldCAlIFNDX1BFUl9QQUdFOworfQorCisvKioKKyAqIHN3YXBfY2dyb3VwX2NtcHhjaGcgLSBjbXB4Y2hnIG1lbV9jZ3JvdXAncyBpZCBmb3IgdGhpcyBzd3BfZW50cnkuCisgKiBAZW50OiBzd2FwIGVudHJ5IHRvIGJlIGNtcHhjaGdlZAorICogQG9sZDogb2xkIGlkCisgKiBAbmV3OiBuZXcgaWQKKyAqCisgKiBSZXR1cm5zIG9sZCBpZCBhdCBzdWNjZXNzLCAwIGF0IGZhaWx1cmUuCisgKiAoVGhlcmUgaXMgbm8gbWVtX2Nncm91cCB1c2luZyAwIGFzIGl0cyBpZCkKKyAqLwordW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfY21weGNoZyhzd3BfZW50cnlfdCBlbnQsCisJCQkJCXVuc2lnbmVkIHNob3J0IG9sZCwgdW5zaWduZWQgc2hvcnQgbmV3KQoreworCXN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsOworCXN0cnVjdCBzd2FwX2Nncm91cCAqc2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBzaG9ydCByZXR2YWw7CisKKwlzYyA9IGxvb2t1cF9zd2FwX2Nncm91cChlbnQsICZjdHJsKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjdHJsLT5sb2NrLCBmbGFncyk7CisJcmV0dmFsID0gc2MtPmlkOworCWlmIChyZXR2YWwgPT0gb2xkKQorCQlzYy0+aWQgPSBuZXc7CisJZWxzZQorCQlyZXR2YWwgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHN3YXBfY2dyb3VwX3JlY29yZCAtIHJlY29yZCBtZW1fY2dyb3VwIGZvciB0aGlzIHN3cF9lbnRyeS4KKyAqIEBlbnQ6IHN3YXAgZW50cnkgdG8gYmUgcmVjb3JkZWQgaW50bworICogQGlkOiBtZW1fY2dyb3VwIHRvIGJlIHJlY29yZGVkCisgKgorICogUmV0dXJucyBvbGQgdmFsdWUgYXQgc3VjY2VzcywgMCBhdCBmYWlsdXJlLgorICogKE9mIGNvdXJzZSwgb2xkIHZhbHVlIGNhbiBiZSAwLikKKyAqLwordW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQpCit7CisJc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7CisJc3RydWN0IHN3YXBfY2dyb3VwICpzYzsKKwl1bnNpZ25lZCBzaG9ydCBvbGQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNjID0gbG9va3VwX3N3YXBfY2dyb3VwKGVudCwgJmN0cmwpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsKKwlvbGQgPSBzYy0+aWQ7CisJc2MtPmlkID0gaWQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RybC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIG9sZDsKK30KKworLyoqCisgKiBsb29rdXBfc3dhcF9jZ3JvdXBfaWQgLSBsb29rdXAgbWVtX2Nncm91cCBpZCB0aWVkIHRvIHN3YXAgZW50cnkKKyAqIEBlbnQ6IHN3YXAgZW50cnkgdG8gYmUgbG9va2VkIHVwLgorICoKKyAqIFJldHVybnMgSUQgb2YgbWVtX2Nncm91cCBhdCBzdWNjZXNzLiAwIGF0IGZhaWx1cmUuICgwIGlzIGludmFsaWQgSUQpCisgKi8KK3Vuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpCit7CisJcmV0dXJuIGxvb2t1cF9zd2FwX2Nncm91cChlbnQsIE5VTEwpLT5pZDsKK30KKworaW50IHN3YXBfY2dyb3VwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBtYXhfcGFnZXMpCit7CisJdm9pZCAqYXJyYXk7CisJdW5zaWduZWQgbG9uZyBhcnJheV9zaXplOworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOworCXN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsOworCisJaWYgKCFkb19zd2FwX2FjY291bnQpCisJCXJldHVybiAwOworCisJbGVuZ3RoID0gRElWX1JPVU5EX1VQKG1heF9wYWdlcywgU0NfUEVSX1BBR0UpOworCWFycmF5X3NpemUgPSBsZW5ndGggKiBzaXplb2Yodm9pZCAqKTsKKworCWFycmF5ID0gdnphbGxvYyhhcnJheV9zaXplKTsKKwlpZiAoIWFycmF5KQorCQlnb3RvIG5vbWVtOworCisJY3RybCA9ICZzd2FwX2Nncm91cF9jdHJsW3R5cGVdOworCW11dGV4X2xvY2soJnN3YXBfY2dyb3VwX211dGV4KTsKKwljdHJsLT5sZW5ndGggPSBsZW5ndGg7CisJY3RybC0+bWFwID0gYXJyYXk7CisJc3Bpbl9sb2NrX2luaXQoJmN0cmwtPmxvY2spOworCWlmIChzd2FwX2Nncm91cF9wcmVwYXJlKHR5cGUpKSB7CisJCS8qIG1lbW9yeSBzaG9ydGFnZSAqLworCQljdHJsLT5tYXAgPSBOVUxMOworCQljdHJsLT5sZW5ndGggPSAwOworCQltdXRleF91bmxvY2soJnN3YXBfY2dyb3VwX211dGV4KTsKKwkJdmZyZWUoYXJyYXkpOworCQlnb3RvIG5vbWVtOworCX0KKwltdXRleF91bmxvY2soJnN3YXBfY2dyb3VwX211dGV4KTsKKworCXJldHVybiAwOworbm9tZW06CisJcHJpbnRrKEtFUk5fSU5GTyAiY291bGRuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Igc3dhcF9jZ3JvdXAuXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPCisJCSJzd2FwX2Nncm91cCBjYW4gYmUgZGlzYWJsZWQgYnkgc3dhcGFjY291bnQ9MCBib290IG9wdGlvblxuIik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgc3dhcF9jZ3JvdXBfc3dhcG9mZihpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqKm1hcDsKKwl1bnNpZ25lZCBsb25nIGksIGxlbmd0aDsKKwlzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDsKKworCWlmICghZG9fc3dhcF9hY2NvdW50KQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZzd2FwX2Nncm91cF9tdXRleCk7CisJY3RybCA9ICZzd2FwX2Nncm91cF9jdHJsW3R5cGVdOworCW1hcCA9IGN0cmwtPm1hcDsKKwlsZW5ndGggPSBjdHJsLT5sZW5ndGg7CisJY3RybC0+bWFwID0gTlVMTDsKKwljdHJsLT5sZW5ndGggPSAwOworCW11dGV4X3VubG9jaygmc3dhcF9jZ3JvdXBfbXV0ZXgpOworCisJaWYgKG1hcCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gbWFwW2ldOworCQkJaWYgKHBhZ2UpCisJCQkJX19mcmVlX3BhZ2UocGFnZSk7CisJCX0KKwkJdmZyZWUobWFwKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggMTU0NDQ0OS4uOTcxMTM0MiAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCisrKyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZV9jZ3JvdXAuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDg3OThiMmUuLjYzZjU1Y2MgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcF9jZ3JvdXAuaD4KIAogc3RhdGljIGJvb2wgc3dhcF9jb3VudF9jb250aW51ZWQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKiwgcGdvZmZfdCwKIAkJCQkgdW5zaWduZWQgY2hhcik7CmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggOTA1MjBhZi4uOGExODE5NiAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtNDYzLDggKzQ2Myw3IEBACiAJCWdvdG8gcmV0cnk7CiAJfQogCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJ2bWFwIGFsbG9jYXRpb24gZm9yIHNpemUgJWx1IGZhaWxlZDogIgorCQlwcl93YXJuKCJ2bWFwIGFsbG9jYXRpb24gZm9yIHNpemUgJWx1IGZhaWxlZDogIgogCQkJInVzZSB2bWFsbG9jPTxzaXplPiB0byBpbmNyZWFzZSBzaXplLlxuIiwgc2l6ZSk7CiAJa2ZyZWUodmEpOwogCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CmRpZmYgLS1naXQgYS9tbS92bXByZXNzdXJlLmMgYi9tbS92bXByZXNzdXJlLmMKaW5kZXggZDQwNDJlNy4uYzVhZmQ1NyAxMDA2NDQKLS0tIGEvbW0vdm1wcmVzc3VyZS5jCisrKyBiL21tL3ZtcHJlc3N1cmUuYwpAQCAtMTY1LDYgKzE2NSw3IEBACiAJdW5zaWduZWQgbG9uZyBzY2FubmVkOwogCXVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkOwogCisJc3Bpbl9sb2NrKCZ2bXByLT5zcl9sb2NrKTsKIAkvKgogCSAqIFNldmVyYWwgY29udGV4dHMgbWlnaHQgYmUgY2FsbGluZyB2bXByZXNzdXJlKCksIHNvIGl0IGlzCiAJICogcG9zc2libGUgdGhhdCB0aGUgd29yayB3YXMgcmVzY2hlZHVsZWQgYWdhaW4gYmVmb3JlIHRoZSBvbGQKQEAgLTE3MywxMSArMTc0LDEyIEBACiAJICogaGVyZS4gTm8gbmVlZCBmb3IgYW55IGxvY2tzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgY2FyZSBpZgogCSAqIHZtcHItPnJlY2xhaW1lZCBpcyBpbiBzeW5jLgogCSAqLwotCWlmICghdm1wci0+c2Nhbm5lZCkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrKCZ2bXByLT5zcl9sb2NrKTsKIAlzY2FubmVkID0gdm1wci0+c2Nhbm5lZDsKKwlpZiAoIXNjYW5uZWQpIHsKKwkJc3Bpbl91bmxvY2soJnZtcHItPnNyX2xvY2spOworCQlyZXR1cm47CisJfQorCiAJcmVjbGFpbWVkID0gdm1wci0+cmVjbGFpbWVkOwogCXZtcHItPnNjYW5uZWQgPSAwOwogCXZtcHItPnJlY2xhaW1lZCA9IDA7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGRjYjQ3MDcuLjQ2MzZkOWUgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0yNjAsOCArMjYwLDcgQEAKIAlkb19kaXYoZGVsdGEsIGxydV9wYWdlcyArIDEpOwogCXRvdGFsX3NjYW4gKz0gZGVsdGE7CiAJaWYgKHRvdGFsX3NjYW4gPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkic2hyaW5rX3NsYWI6ICVwRiBuZWdhdGl2ZSBvYmplY3RzIHRvIGRlbGV0ZSBucj0lbGRcbiIsCisJCXByX2Vycigic2hyaW5rX3NsYWI6ICVwRiBuZWdhdGl2ZSBvYmplY3RzIHRvIGRlbGV0ZSBucj0lbGRcbiIsCiAJCSAgICAgICBzaHJpbmtlci0+c2Nhbl9vYmplY3RzLCB0b3RhbF9zY2FuKTsKIAkJdG90YWxfc2NhbiA9IGZyZWVhYmxlOwogCX0KQEAgLTg3NSw3ICs4NzQsOCBAQAogCQkgKiBlbmQgb2YgdGhlIExSVSBhIHNlY29uZCB0aW1lLgogCQkgKi8KIAkJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQkJaWYgKChtYXBwaW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbykpIHx8CisJCWlmICgoKGRpcnR5IHx8IHdyaXRlYmFjaykgJiYgbWFwcGluZyAmJgorCQkgICAgIGJkaV93cml0ZV9jb25nZXN0ZWQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbykpIHx8CiAJCSAgICAod3JpdGViYWNrICYmIFBhZ2VSZWNsYWltKHBhZ2UpKSkKIAkJCW5yX2Nvbmdlc3RlZCsrOwogCkBAIC0yMjQ5LDcgKzIyNDksNyBAQAogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qIElmIGNvbXBhY3Rpb24gd291bGQgZ28gYWhlYWQgb3IgdGhlIGFsbG9jYXRpb24gd291bGQgc3VjY2VlZCwgc3RvcCAqLwotCXN3aXRjaCAoY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBzYy0+b3JkZXIpKSB7CisJc3dpdGNoIChjb21wYWN0aW9uX3N1aXRhYmxlKHpvbmUsIHNjLT5vcmRlciwgMCwgMCkpIHsKIAljYXNlIENPTVBBQ1RfUEFSVElBTDoKIAljYXNlIENPTVBBQ1RfQ09OVElOVUU6CiAJCXJldHVybiBmYWxzZTsKQEAgLTIzNDYsNyArMjM0Niw3IEBACiAJICogSWYgY29tcGFjdGlvbiBpcyBub3QgcmVhZHkgdG8gc3RhcnQgYW5kIGFsbG9jYXRpb24gaXMgbm90IGxpa2VseQogCSAqIHRvIHN1Y2NlZWQgd2l0aG91dCBpdCwgdGhlbiBrZWVwIHJlY2xhaW1pbmcuCiAJICovCi0JaWYgKGNvbXBhY3Rpb25fc3VpdGFibGUoem9uZSwgb3JkZXIpID09IENPTVBBQ1RfU0tJUFBFRCkKKwlpZiAoY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBvcmRlciwgMCwgMCkgPT0gQ09NUEFDVF9TS0lQUEVEKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gd2F0ZXJtYXJrX29rOwpAQCAtMjgyNCw4ICsyODI0LDggQEAKIAkJCQkgICAgYmFsYW5jZV9nYXAsIGNsYXNzem9uZV9pZHgsIDApKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgJiYgb3JkZXIgJiYKLQkgICAgY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBvcmRlcikgPT0gQ09NUEFDVF9TS0lQUEVEKQorCWlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSAmJiBvcmRlciAmJiBjb21wYWN0aW9uX3N1aXRhYmxlKHpvbmUsCisJCQkJb3JkZXIsIDAsIGNsYXNzem9uZV9pZHgpID09IENPTVBBQ1RfU0tJUFBFRCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CkBAIC0yOTUyLDggKzI5NTIsOCBAQAogCSAqIGZyb20gbWVtb3J5LiBEbyBub3QgcmVjbGFpbSBtb3JlIHRoYW4gbmVlZGVkIGZvciBjb21wYWN0aW9uLgogCSAqLwogCWlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSAmJiBzYy0+b3JkZXIgJiYKLQkJCWNvbXBhY3Rpb25fc3VpdGFibGUoem9uZSwgc2MtPm9yZGVyKSAhPQotCQkJCUNPTVBBQ1RfU0tJUFBFRCkKKwkJCWNvbXBhY3Rpb25fc3VpdGFibGUoem9uZSwgc2MtPm9yZGVyLCAwLCBjbGFzc3pvbmVfaWR4KQorCQkJCQkJCSE9IENPTVBBQ1RfU0tJUFBFRCkKIAkJdGVzdG9yZGVyID0gMDsKIAogCS8qCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggYWY3M2JjMy4uNDEwZGQ1ZSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtMTAxLDExICsxMDEsMTEgQEAKICNkZWZpbmUgX19nZXRfcnBuX3N0b3BfYml0cyhsaW5lKSAoKChsaW5lKSA+PiAyKSAmIDB4MSkKICNkZWZpbmUgX19nZXRfcnBuX3Bhcml0eShsaW5lKSAgICAoKChsaW5lKSA+PiAzKSAmIDB4NykKIAorc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJmY29tbV93cSk7CisKIHN0YXRpYyB2b2lkIHJmY29tbV9zY2hlZHVsZSh2b2lkKQogewotCWlmICghcmZjb21tX3RocmVhZCkKLQkJcmV0dXJuOwotCXdha2VfdXBfcHJvY2VzcyhyZmNvbW1fdGhyZWFkKTsKKwl3YWtlX3VwX2FsbCgmcmZjb21tX3dxKTsKIH0KIAogLyogLS0tLSBSRkNPTU0gRkNTIGNvbXB1dGF0aW9uIC0tLS0gKi8KQEAgLTIwODYsMjQgKzIwODYsMjIgQEAKIAogc3RhdGljIGludCByZmNvbW1fcnVuKHZvaWQgKnVudXNlZCkKIHsKKwlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCUJUX0RCRygiIik7CiAKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0xMCk7CiAKIAlyZmNvbW1fYWRkX2xpc3RlbmVyKEJEQUREUl9BTlkpOwogCi0Jd2hpbGUgKDEpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQotCQkJYnJlYWs7CisJYWRkX3dhaXRfcXVldWUoJnJmY29tbV93cSwgJndhaXQpOworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAKIAkJLyogUHJvY2VzcyBzdHVmZiAqLwogCQlyZmNvbW1fcHJvY2Vzc19zZXNzaW9ucygpOwogCi0JCXNjaGVkdWxlKCk7CisJCXdhaXRfd29rZW4oJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCX0KLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnJmY29tbV93cSwgJndhaXQpOwogCiAJcmZjb21tX2tpbGxfbGlzdGVuZXIoKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA5NDViYmQwLi4zYWNmZjA5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzIwMCwxMSArNzIwMCwxMCBAQAogCSAqLwogCXN0cnVjdCBuZXQgKm5ldDsKIAlib29sIHVucmVnaXN0ZXJpbmc7Ci0JREVGSU5FX1dBSVQod2FpdCk7CisJREVGSU5FX1dBSVRfRlVOQyh3YWl0LCB3b2tlbl93YWtlX2Z1bmN0aW9uKTsKIAorCWFkZF93YWl0X3F1ZXVlKCZuZXRkZXZfdW5yZWdpc3RlcmluZ193cSwgJndhaXQpOwogCWZvciAoOzspIHsKLQkJcHJlcGFyZV90b193YWl0KCZuZXRkZXZfdW5yZWdpc3RlcmluZ193cSwgJndhaXQsCi0JCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQl1bnJlZ2lzdGVyaW5nID0gZmFsc2U7CiAJCXJ0bmxfbG9jaygpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldCwgbmV0X2xpc3QsIGV4aXRfbGlzdCkgewpAQCAtNzIxNiw5ICs3MjE1LDEwIEBACiAJCWlmICghdW5yZWdpc3RlcmluZykKIAkJCWJyZWFrOwogCQlfX3J0bmxfdW5sb2NrKCk7Ci0JCXNjaGVkdWxlKCk7CisKKwkJd2FpdF93b2tlbigmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAl9Ci0JZmluaXNoX3dhaXQoJm5ldGRldl91bnJlZ2lzdGVyaW5nX3dxLCAmd2FpdCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJm5ldGRldl91bnJlZ2lzdGVyaW5nX3dxLCAmd2FpdCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZGVmYXVsdF9kZXZpY2VfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfbGlzdCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggYjliN2RmYS4uODhlOGRlMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTM2NSwxMSArMzY1LDEwIEBACiB7CiAJc3RydWN0IG5ldCAqbmV0OwogCWJvb2wgdW5yZWdpc3RlcmluZzsKLQlERUZJTkVfV0FJVCh3YWl0KTsKKwlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCisJYWRkX3dhaXRfcXVldWUoJm5ldGRldl91bnJlZ2lzdGVyaW5nX3dxLCAmd2FpdCk7CiAJZm9yICg7OykgewotCQlwcmVwYXJlX3RvX3dhaXQoJm5ldGRldl91bnJlZ2lzdGVyaW5nX3dxLCAmd2FpdCwKLQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCXVucmVnaXN0ZXJpbmcgPSBmYWxzZTsKIAkJcnRubF9sb2NrKCk7CiAJCWZvcl9lYWNoX25ldChuZXQpIHsKQEAgLTM4MSw5ICszODAsMTAgQEAKIAkJaWYgKCF1bnJlZ2lzdGVyaW5nKQogCQkJYnJlYWs7CiAJCV9fcnRubF91bmxvY2soKTsKLQkJc2NoZWR1bGUoKTsKKworCQl3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCX0KLQlmaW5pc2hfd2FpdCgmbmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbmV0ZGV2X3VucmVnaXN0ZXJpbmdfd3EsICZ3YWl0KTsKIH0KIAogLyoqCkBAIC0xNDk4LDYgKzE0OTgsNyBAQAogCQkJZ290byBlcnJvdXQ7CiAJCX0KIAkJaWYgKCFuZXRsaW5rX25zX2NhcGFibGUoc2tiLCBuZXQtPnVzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7CisJCQlwdXRfbmV0KG5ldCk7CiAJCQllcnIgPSAtRVBFUk07CiAJCQlnb3RvIGVycm91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggYTA1NGZlMC4uNWM2MTMyOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC01NiwxMSArNTYsMTEgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBpcHY0X3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKK3N0YXRpYyB2b2lkIGlwdjRfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAogCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewotCXJldHVybiBzZXFfcHJpbnRmKHMsICJzcmM9JXBJNCBkc3Q9JXBJNCAiLAotCQkJICAmdHVwbGUtPnNyYy51My5pcCwgJnR1cGxlLT5kc3QudTMuaXApOworCXNlcV9wcmludGYocywgInNyYz0lcEk0IGRzdD0lcEk0ICIsCisJCSAgICZ0dXBsZS0+c3JjLnUzLmlwLCAmdHVwbGUtPmRzdC51My5pcCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB2NF9nZXRfbDRwcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCmluZGV4IDRjNDhlNDMuLmE0NjBhODcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCkBAIC05NCw3ICs5NCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUksKLXN0YXRpYyBpbnQgY3Rfc2hvd19zZWNjdHgoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCitzdGF0aWMgdm9pZCBjdF9zaG93X3NlY2N0eChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKIAlpbnQgcmV0OwogCXUzMiBsZW47CkBAIC0xMDIsMTcgKzEwMiwxNSBAQAogCiAJcmV0ID0gc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KGN0LT5zZWNtYXJrLCAmc2VjY3R4LCAmbGVuKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCi0JcmV0ID0gc2VxX3ByaW50ZihzLCAic2VjY3R4PSVzICIsIHNlY2N0eCk7CisJc2VxX3ByaW50ZihzLCAic2VjY3R4PSVzICIsIHNlY2N0eCk7CiAKIAlzZWN1cml0eV9yZWxlYXNlX3NlY2N0eChzZWNjdHgsIGxlbik7Ci0JcmV0dXJuIHJldDsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBjdF9zaG93X3NlY2N0eChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjdF9zaG93X3NlY2N0eChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQlyZXR1cm4gMDsKIH0KICNlbmRpZgogCkBAIC0xNDEsNDcgKzEzOSw1MiBAQAogCU5GX0NUX0FTU0VSVChsNHByb3RvKTsKIAogCXJldCA9IC1FTk9TUEM7Ci0JaWYgKHNlcV9wcmludGYocywgIiUtOHMgJXUgJWxkICIsCi0JCSAgICAgIGw0cHJvdG8tPm5hbWUsIG5mX2N0X3Byb3RvbnVtKGN0KSwKLQkJICAgICAgdGltZXJfcGVuZGluZygmY3QtPnRpbWVvdXQpCi0JCSAgICAgID8gKGxvbmcpKGN0LT50aW1lb3V0LmV4cGlyZXMgLSBqaWZmaWVzKS9IWiA6IDApICE9IDApCisJc2VxX3ByaW50ZihzLCAiJS04cyAldSAlbGQgIiwKKwkJICAgbDRwcm90by0+bmFtZSwgbmZfY3RfcHJvdG9udW0oY3QpLAorCQkgICB0aW1lcl9wZW5kaW5nKCZjdC0+dGltZW91dCkKKwkJICAgPyAobG9uZykoY3QtPnRpbWVvdXQuZXhwaXJlcyAtIGppZmZpZXMpL0haIDogMCk7CisKKwlpZiAobDRwcm90by0+cHJpbnRfY29ubnRyYWNrKQorCQlsNHByb3RvLT5wcmludF9jb25udHJhY2socywgY3QpOworCisJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChzKSkKIAkJZ290byByZWxlYXNlOwogCi0JaWYgKGw0cHJvdG8tPnByaW50X2Nvbm50cmFjayAmJiBsNHByb3RvLT5wcmludF9jb25udHJhY2socywgY3QpKQotCQlnb3RvIHJlbGVhc2U7CisJcHJpbnRfdHVwbGUocywgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwKKwkJICAgIGwzcHJvdG8sIGw0cHJvdG8pOwogCi0JaWYgKHByaW50X3R1cGxlKHMsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUsCi0JCQlsM3Byb3RvLCBsNHByb3RvKSkKKwlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAoc2VxX3ByaW50X2FjY3QocywgY3QsIElQX0NUX0RJUl9PUklHSU5BTCkpCiAJCWdvdG8gcmVsZWFzZTsKIAogCWlmICghKHRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKSkKLQkJaWYgKHNlcV9wcmludGYocywgIltVTlJFUExJRURdICIpKQotCQkJZ290byByZWxlYXNlOworCQlzZXFfcHJpbnRmKHMsICJbVU5SRVBMSUVEXSAiKTsKIAotCWlmIChwcmludF90dXBsZShzLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLAotCQkJbDNwcm90bywgbDRwcm90bykpCisJcHJpbnRfdHVwbGUocywgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSwKKwkJICAgIGwzcHJvdG8sIGw0cHJvdG8pOworCisJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChzKSkKIAkJZ290byByZWxlYXNlOwogCiAJaWYgKHNlcV9wcmludF9hY2N0KHMsIGN0LCBJUF9DVF9ESVJfUkVQTFkpKQogCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCAmY3QtPnN0YXR1cykpCi0JCWlmIChzZXFfcHJpbnRmKHMsICJbQVNTVVJFRF0gIikpCi0JCQlnb3RvIHJlbGVhc2U7CisJCXNlcV9wcmludGYocywgIltBU1NVUkVEXSAiKTsKIAogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSwotCWlmIChzZXFfcHJpbnRmKHMsICJtYXJrPSV1ICIsIGN0LT5tYXJrKSkKLQkJZ290byByZWxlYXNlOworCXNlcV9wcmludGYocywgIm1hcms9JXUgIiwgY3QtPm1hcmspOwogI2VuZGlmCiAKLQlpZiAoY3Rfc2hvd19zZWNjdHgocywgY3QpKQorCWN0X3Nob3dfc2VjY3R4KHMsIGN0KTsKKworCXNlcV9wcmludGYocywgInVzZT0ldVxuIiwgYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkpOworCisJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChzKSkKIAkJZ290byByZWxlYXNlOwogCi0JaWYgKHNlcV9wcmludGYocywgInVzZT0ldVxuIiwgYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQotCQlnb3RvIHJlbGVhc2U7CiAJcmV0ID0gMDsKIHJlbGVhc2U6CiAJbmZfY3RfcHV0KGN0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggYjkxYjI2NC4uODBkNTU1NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTcyLDEzICs3MiwxMyBAQAogfQogCiAvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gKi8KLXN0YXRpYyBpbnQgaWNtcF9wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCitzdGF0aWMgdm9pZCBpY21wX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKLQlyZXR1cm4gc2VxX3ByaW50ZihzLCAidHlwZT0ldSBjb2RlPSV1IGlkPSV1ICIsCi0JCQkgIHR1cGxlLT5kc3QudS5pY21wLnR5cGUsCi0JCQkgIHR1cGxlLT5kc3QudS5pY21wLmNvZGUsCi0JCQkgIG50b2hzKHR1cGxlLT5zcmMudS5pY21wLmlkKSk7CisJc2VxX3ByaW50ZihzLCAidHlwZT0ldSBjb2RlPSV1IGlkPSV1ICIsCisJCSAgIHR1cGxlLT5kc3QudS5pY21wLnR5cGUsCisJCSAgIHR1cGxlLT5kc3QudS5pY21wLmNvZGUsCisJCSAgIG50b2hzKHR1cGxlLT5zcmMudS5pY21wLmlkKSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgKmljbXBfZ2V0X3RpbWVvdXRzKHN0cnVjdCBuZXQgKm5ldCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9tZW1jb250cm9sLmMgYi9uZXQvaXB2NC90Y3BfbWVtY29udHJvbC5jCmluZGV4IDFkMTkxMzUuLjI3MjMyNzEzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbWVtY29udHJvbC5jCisrKyBiL25ldC9pcHY0L3RjcF9tZW1jb250cm9sLmMKQEAgLTksMTMgKzksMTMgQEAKIGludCB0Y3BfaW5pdF9jZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MpCiB7CiAJLyoKLQkgKiBUaGUgcm9vdCBjZ3JvdXAgZG9lcyBub3QgdXNlIHJlc19jb3VudGVycywgYnV0IHJhdGhlciwKKwkgKiBUaGUgcm9vdCBjZ3JvdXAgZG9lcyBub3QgdXNlIHBhZ2VfY291bnRlcnMsIGJ1dCByYXRoZXIsCiAJICogcmVseSBvbiB0aGUgZGF0YSBhbHJlYWR5IGNvbGxlY3RlZCBieSB0aGUgbmV0d29yawogCSAqIHN1YnN5c3RlbQogCSAqLwotCXN0cnVjdCByZXNfY291bnRlciAqcmVzX3BhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGNnX3Byb3RvICpjZ19wcm90bywgKnBhcmVudF9jZzsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpOworCXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXJfcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgY2dfcHJvdG8gKmNnX3Byb3RvLCAqcGFyZW50X2NnOwogCiAJY2dfcHJvdG8gPSB0Y3BfcHJvdC5wcm90b19jZ3JvdXAobWVtY2cpOwogCWlmICghY2dfcHJvdG8pCkBAIC0yOSw5ICsyOSw5IEBACiAKIAlwYXJlbnRfY2cgPSB0Y3BfcHJvdC5wcm90b19jZ3JvdXAocGFyZW50KTsKIAlpZiAocGFyZW50X2NnKQotCQlyZXNfcGFyZW50ID0gJnBhcmVudF9jZy0+bWVtb3J5X2FsbG9jYXRlZDsKKwkJY291bnRlcl9wYXJlbnQgPSAmcGFyZW50X2NnLT5tZW1vcnlfYWxsb2NhdGVkOwogCi0JcmVzX2NvdW50ZXJfaW5pdCgmY2dfcHJvdG8tPm1lbW9yeV9hbGxvY2F0ZWQsIHJlc19wYXJlbnQpOworCXBhZ2VfY291bnRlcl9pbml0KCZjZ19wcm90by0+bWVtb3J5X2FsbG9jYXRlZCwgY291bnRlcl9wYXJlbnQpOwogCXBlcmNwdV9jb3VudGVyX2luaXQoJmNnX3Byb3RvLT5zb2NrZXRzX2FsbG9jYXRlZCwgMCwgR0ZQX0tFUk5FTCk7CiAKIAlyZXR1cm4gMDsKQEAgLTUwLDcgKzUwLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodGNwX2Rlc3Ryb3lfY2dyb3VwKTsKIAotc3RhdGljIGludCB0Y3BfdXBkYXRlX2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdTY0IHZhbCkKK3N0YXRpYyBpbnQgdGNwX3VwZGF0ZV9saW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiB7CiAJc3RydWN0IGNnX3Byb3RvICpjZ19wcm90bzsKIAlpbnQgaTsKQEAgLTYwLDIwICs2MCwxNyBAQAogCWlmICghY2dfcHJvdG8pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHZhbCA+IFJFU19DT1VOVEVSX01BWCkKLQkJdmFsID0gUkVTX0NPVU5URVJfTUFYOwotCi0JcmV0ID0gcmVzX2NvdW50ZXJfc2V0X2xpbWl0KCZjZ19wcm90by0+bWVtb3J5X2FsbG9jYXRlZCwgdmFsKTsKKwlyZXQgPSBwYWdlX2NvdW50ZXJfbGltaXQoJmNnX3Byb3RvLT5tZW1vcnlfYWxsb2NhdGVkLCBucl9wYWdlcyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCWNnX3Byb3RvLT5zeXNjdGxfbWVtW2ldID0gbWluX3QobG9uZywgdmFsID4+IFBBR0VfU0hJRlQsCisJCWNnX3Byb3RvLT5zeXNjdGxfbWVtW2ldID0gbWluX3QobG9uZywgbnJfcGFnZXMsCiAJCQkJCQlzeXNjdGxfdGNwX21lbVtpXSk7CiAKLQlpZiAodmFsID09IFJFU19DT1VOVEVSX01BWCkKKwlpZiAobnJfcGFnZXMgPT0gUEFHRV9DT1VOVEVSX01BWCkKIAkJY2xlYXJfYml0KE1FTUNHX1NPQ0tfQUNUSVZFLCAmY2dfcHJvdG8tPmZsYWdzKTsKLQllbHNlIGlmICh2YWwgIT0gUkVTX0NPVU5URVJfTUFYKSB7CisJZWxzZSB7CiAJCS8qCiAJCSAqIFRoZSBhY3RpdmUgYml0IG5lZWRzIHRvIGJlIHdyaXR0ZW4gYWZ0ZXIgdGhlIHN0YXRpY19rZXkKIAkJICogdXBkYXRlLiBUaGlzIGlzIHdoYXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBzb2NrZXQgYWN0aXZhdGlvbgpAQCAtMTAyLDExICs5OSwyMCBAQAogCXJldHVybiAwOwogfQogCitlbnVtIHsKKwlSRVNfVVNBR0UsCisJUkVTX0xJTUlULAorCVJFU19NQVhfVVNBR0UsCisJUkVTX0ZBSUxDTlQsCit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKHRjcF9saW1pdF9tdXRleCk7CisKIHN0YXRpYyBzc2l6ZV90IHRjcF9jZ3JvdXBfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLAogCQkJCWNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZikKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKIAlpbnQgcmV0ID0gMDsKIAogCWJ1ZiA9IHN0cnN0cmlwKGJ1Zik7CkBAIC0xMTQsMTAgKzEyMCwxMiBAQAogCXN3aXRjaCAob2ZfY2Z0KG9mKS0+cHJpdmF0ZSkgewogCWNhc2UgUkVTX0xJTUlUOgogCQkvKiBzZWUgbWVtY29udHJvbC5jICovCi0JCXJldCA9IHJlc19jb3VudGVyX21lbXBhcnNlX3dyaXRlX3N0cmF0ZWd5KGJ1ZiwgJnZhbCk7CisJCXJldCA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsICZucl9wYWdlcyk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKLQkJcmV0ID0gdGNwX3VwZGF0ZV9saW1pdChtZW1jZywgdmFsKTsKKwkJbXV0ZXhfbG9jaygmdGNwX2xpbWl0X211dGV4KTsKKwkJcmV0ID0gdGNwX3VwZGF0ZV9saW1pdChtZW1jZywgbnJfcGFnZXMpOworCQltdXRleF91bmxvY2soJnRjcF9saW1pdF9tdXRleCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xMjYsNDMgKzEzNCwzNiBAQAogCXJldHVybiByZXQgPzogbmJ5dGVzOwogfQogCi1zdGF0aWMgdTY0IHRjcF9yZWFkX3N0YXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdHlwZSwgdTY0IGRlZmF1bHRfdmFsKQotewotCXN0cnVjdCBjZ19wcm90byAqY2dfcHJvdG87Ci0KLQljZ19wcm90byA9IHRjcF9wcm90LnByb3RvX2Nncm91cChtZW1jZyk7Ci0JaWYgKCFjZ19wcm90bykKLQkJcmV0dXJuIGRlZmF1bHRfdmFsOwotCi0JcmV0dXJuIHJlc19jb3VudGVyX3JlYWRfdTY0KCZjZ19wcm90by0+bWVtb3J5X2FsbG9jYXRlZCwgdHlwZSk7Ci19Ci0KLXN0YXRpYyB1NjQgdGNwX3JlYWRfdXNhZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXN0cnVjdCBjZ19wcm90byAqY2dfcHJvdG87Ci0KLQljZ19wcm90byA9IHRjcF9wcm90LnByb3RvX2Nncm91cChtZW1jZyk7Ci0JaWYgKCFjZ19wcm90bykKLQkJcmV0dXJuIGF0b21pY19sb25nX3JlYWQoJnRjcF9tZW1vcnlfYWxsb2NhdGVkKSA8PCBQQUdFX1NISUZUOwotCi0JcmV0dXJuIHJlc19jb3VudGVyX3JlYWRfdTY0KCZjZ19wcm90by0+bWVtb3J5X2FsbG9jYXRlZCwgUkVTX1VTQUdFKTsKLX0KLQogc3RhdGljIHU2NCB0Y3BfY2dyb3VwX3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgc3RydWN0IGNmdHlwZSAqY2Z0KQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTsKKwlzdHJ1Y3QgY2dfcHJvdG8gKmNnX3Byb3RvID0gdGNwX3Byb3QucHJvdG9fY2dyb3VwKG1lbWNnKTsKIAl1NjQgdmFsOwogCiAJc3dpdGNoIChjZnQtPnByaXZhdGUpIHsKIAljYXNlIFJFU19MSU1JVDoKLQkJdmFsID0gdGNwX3JlYWRfc3RhdChtZW1jZywgUkVTX0xJTUlULCBSRVNfQ09VTlRFUl9NQVgpOworCQlpZiAoIWNnX3Byb3RvKQorCQkJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CisJCXZhbCA9IGNnX3Byb3RvLT5tZW1vcnlfYWxsb2NhdGVkLmxpbWl0OworCQl2YWwgKj0gUEFHRV9TSVpFOwogCQlicmVhazsKIAljYXNlIFJFU19VU0FHRToKLQkJdmFsID0gdGNwX3JlYWRfdXNhZ2UobWVtY2cpOworCQlpZiAoIWNnX3Byb3RvKQorCQkJdmFsID0gYXRvbWljX2xvbmdfcmVhZCgmdGNwX21lbW9yeV9hbGxvY2F0ZWQpOworCQllbHNlCisJCQl2YWwgPSBwYWdlX2NvdW50ZXJfcmVhZCgmY2dfcHJvdG8tPm1lbW9yeV9hbGxvY2F0ZWQpOworCQl2YWwgKj0gUEFHRV9TSVpFOwogCQlicmVhazsKIAljYXNlIFJFU19GQUlMQ05UOgorCQlpZiAoIWNnX3Byb3RvKQorCQkJcmV0dXJuIDA7CisJCXZhbCA9IGNnX3Byb3RvLT5tZW1vcnlfYWxsb2NhdGVkLmZhaWxjbnQ7CisJCWJyZWFrOwogCWNhc2UgUkVTX01BWF9VU0FHRToKLQkJdmFsID0gdGNwX3JlYWRfc3RhdChtZW1jZywgY2Z0LT5wcml2YXRlLCAwKTsKKwkJaWYgKCFjZ19wcm90bykKKwkJCXJldHVybiAwOworCQl2YWwgPSBjZ19wcm90by0+bWVtb3J5X2FsbG9jYXRlZC53YXRlcm1hcms7CisJCXZhbCAqPSBQQUdFX1NJWkU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwpAQCAtMTgzLDEwICsxODQsMTAgQEAKIAogCXN3aXRjaCAob2ZfY2Z0KG9mKS0+cHJpdmF0ZSkgewogCWNhc2UgUkVTX01BWF9VU0FHRToKLQkJcmVzX2NvdW50ZXJfcmVzZXRfbWF4KCZjZ19wcm90by0+bWVtb3J5X2FsbG9jYXRlZCk7CisJCXBhZ2VfY291bnRlcl9yZXNldF93YXRlcm1hcmsoJmNnX3Byb3RvLT5tZW1vcnlfYWxsb2NhdGVkKTsKIAkJYnJlYWs7CiAJY2FzZSBSRVNfRkFJTENOVDoKLQkJcmVzX2NvdW50ZXJfcmVzZXRfZmFpbGNudCgmY2dfcHJvdG8tPm1lbW9yeV9hbGxvY2F0ZWQpOworCQljZ19wcm90by0+bWVtb3J5X2FsbG9jYXRlZC5mYWlsY250ID0gMDsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwppbmRleCA0Y2JjNmIyLi5iNjhkMGU1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKQEAgLTYwLDExICs2MCwxMSBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IGlwdjZfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAorc3RhdGljIHZvaWQgaXB2Nl9wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCiAJCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7Ci0JcmV0dXJuIHNlcV9wcmludGYocywgInNyYz0lcEk2IGRzdD0lcEk2ICIsCi0JCQkgIHR1cGxlLT5zcmMudTMuaXA2LCB0dXBsZS0+ZHN0LnUzLmlwNik7CisJc2VxX3ByaW50ZihzLCAic3JjPSVwSTYgZHN0PSVwSTYgIiwKKwkJICAgdHVwbGUtPnNyYy51My5pcDYsIHR1cGxlLT5kc3QudTMuaXA2KTsKIH0KIAogc3RhdGljIGludCBpcHY2X2dldF9sNHByb3RvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCmluZGV4IGIzODA3YzUuLjkwMzg4ZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwpAQCAtODQsMTMgKzg0LDEzIEBACiB9CiAKIC8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwotc3RhdGljIGludCBpY21wdjZfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAorc3RhdGljIHZvaWQgaWNtcHY2X3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewotCXJldHVybiBzZXFfcHJpbnRmKHMsICJ0eXBlPSV1IGNvZGU9JXUgaWQ9JXUgIiwKLQkJCSAgdHVwbGUtPmRzdC51LmljbXAudHlwZSwKLQkJCSAgdHVwbGUtPmRzdC51LmljbXAuY29kZSwKLQkJCSAgbnRvaHModHVwbGUtPnNyYy51LmljbXAuaWQpKTsKKwlzZXFfcHJpbnRmKHMsICJ0eXBlPSV1IGNvZGU9JXUgaWQ9JXUgIiwKKwkJICAgdHVwbGUtPmRzdC51LmljbXAudHlwZSwKKwkJICAgdHVwbGUtPmRzdC51LmljbXAuY29kZSwKKwkJICAgbnRvaHModHVwbGUtPnNyYy51LmljbXAuaWQpKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCAqaWNtcHY2X2dldF90aW1lb3V0cyhzdHJ1Y3QgbmV0ICpuZXQpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYy5jCmluZGV4IGU3ZWI4MDcuLmNmOWFjZTcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYy5jCkBAIC00OSwxMCArNDksOSBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IGdlbmVyaWNfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAotCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorc3RhdGljIHZvaWQgZ2VuZXJpY19wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2VuZXJpY19nZXRfbDRwcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKaW5kZXggY2IzNzJmOS4uNmRkOTk1YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYwpAQCAtNjE4LDE3ICs2MTgsMTcgQEAKIAlyZXR1cm4gLU5GX0FDQ0VQVDsKIH0KIAotc3RhdGljIGludCBkY2NwX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3N0YXRpYyB2b2lkIGRjY3BfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKLQlyZXR1cm4gc2VxX3ByaW50ZihzLCAic3BvcnQ9JWh1IGRwb3J0PSVodSAiLAotCQkJICBudG9ocyh0dXBsZS0+c3JjLnUuZGNjcC5wb3J0KSwKLQkJCSAgbnRvaHModHVwbGUtPmRzdC51LmRjY3AucG9ydCkpOworCXNlcV9wcmludGYocywgInNwb3J0PSVodSBkcG9ydD0laHUgIiwKKwkJICAgbnRvaHModHVwbGUtPnNyYy51LmRjY3AucG9ydCksCisJCSAgIG50b2hzKHR1cGxlLT5kc3QudS5kY2NwLnBvcnQpKTsKIH0KIAotc3RhdGljIGludCBkY2NwX3ByaW50X2Nvbm50cmFjayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBuZl9jb25uICpjdCkKK3N0YXRpYyB2b2lkIGRjY3BfcHJpbnRfY29ubnRyYWNrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IG5mX2Nvbm4gKmN0KQogewotCXJldHVybiBzZXFfcHJpbnRmKHMsICIlcyAiLCBkY2NwX3N0YXRlX25hbWVzW2N0LT5wcm90by5kY2NwLnN0YXRlXSk7CisJc2VxX3ByaW50ZihzLCAiJXMgIiwgZGNjcF9zdGF0ZV9uYW1lc1tjdC0+cHJvdG8uZGNjcC5zdGF0ZV0pOwogfQogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ1RfTkVUTElOSykKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwppbmRleCA5NTdjMWRiLi42MDg2NWYxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5jCkBAIC02MywxMCArNjMsOSBAQAogfQogCiAvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gKi8KLXN0YXRpYyBpbnQgZ2VuZXJpY19wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCitzdGF0aWMgdm9pZCBnZW5lcmljX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCAqZ2VuZXJpY19nZXRfdGltZW91dHMoc3RydWN0IG5ldCAqbmV0KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYwppbmRleCBkNTY2NTczLi43NjQ4Njc0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYwpAQCAtMjI2LDIwICsyMjYsMjAgQEAKIH0KIAogLyogcHJpbnQgZ3JlIHBhcnQgb2YgdHVwbGUgKi8KLXN0YXRpYyBpbnQgZ3JlX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKLQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorc3RhdGljIHZvaWQgZ3JlX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKLQlyZXR1cm4gc2VxX3ByaW50ZihzLCAic3Jja2V5PTB4JXggZHN0a2V5PTB4JXggIiwKLQkJCSAgbnRvaHModHVwbGUtPnNyYy51LmdyZS5rZXkpLAotCQkJICBudG9ocyh0dXBsZS0+ZHN0LnUuZ3JlLmtleSkpOworCXNlcV9wcmludGYocywgInNyY2tleT0weCV4IGRzdGtleT0weCV4ICIsCisJCSAgIG50b2hzKHR1cGxlLT5zcmMudS5ncmUua2V5KSwKKwkJICAgbnRvaHModHVwbGUtPmRzdC51LmdyZS5rZXkpKTsKIH0KIAogLyogcHJpbnQgcHJpdmF0ZSBkYXRhIGZvciBjb25udHJhY2sgKi8KLXN0YXRpYyBpbnQgZ3JlX3ByaW50X2Nvbm50cmFjayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBuZl9jb25uICpjdCkKK3N0YXRpYyB2b2lkIGdyZV9wcmludF9jb25udHJhY2soc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7Ci0JcmV0dXJuIHNlcV9wcmludGYocywgInRpbWVvdXQ9JXUsIHN0cmVhbV90aW1lb3V0PSV1ICIsCi0JCQkgIChjdC0+cHJvdG8uZ3JlLnRpbWVvdXQgLyBIWiksCi0JCQkgIChjdC0+cHJvdG8uZ3JlLnN0cmVhbV90aW1lb3V0IC8gSFopKTsKKwlzZXFfcHJpbnRmKHMsICJ0aW1lb3V0PSV1LCBzdHJlYW1fdGltZW91dD0ldSAiLAorCQkgICAoY3QtPnByb3RvLmdyZS50aW1lb3V0IC8gSFopLAorCQkgICAoY3QtPnByb3RvLmdyZS5zdHJlYW1fdGltZW91dCAvIEhaKSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgKmdyZV9nZXRfdGltZW91dHMoc3RydWN0IG5ldCAqbmV0KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCmluZGV4IDEzMTRkMzMuLmI0NWRhOTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKQEAgLTE2NiwxNiArMTY2LDE2IEBACiB9CiAKIC8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwotc3RhdGljIGludCBzY3RwX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3N0YXRpYyB2b2lkIHNjdHBfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKLQlyZXR1cm4gc2VxX3ByaW50ZihzLCAic3BvcnQ9JWh1IGRwb3J0PSVodSAiLAotCQkJICBudG9ocyh0dXBsZS0+c3JjLnUuc2N0cC5wb3J0KSwKLQkJCSAgbnRvaHModHVwbGUtPmRzdC51LnNjdHAucG9ydCkpOworCXNlcV9wcmludGYocywgInNwb3J0PSVodSBkcG9ydD0laHUgIiwKKwkJICAgbnRvaHModHVwbGUtPnNyYy51LnNjdHAucG9ydCksCisJCSAgIG50b2hzKHR1cGxlLT5kc3QudS5zY3RwLnBvcnQpKTsKIH0KIAogLyogUHJpbnQgb3V0IHRoZSBwcml2YXRlIHBhcnQgb2YgdGhlIGNvbm50cmFjay4gKi8KLXN0YXRpYyBpbnQgc2N0cF9wcmludF9jb25udHJhY2soc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgbmZfY29ubiAqY3QpCitzdGF0aWMgdm9pZCBzY3RwX3ByaW50X2Nvbm50cmFjayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBuZl9jb25uICpjdCkKIHsKIAllbnVtIHNjdHBfY29ubnRyYWNrIHN0YXRlOwogCkBAIC0xODMsNyArMTgzLDcgQEAKIAlzdGF0ZSA9IGN0LT5wcm90by5zY3RwLnN0YXRlOwogCXNwaW5fdW5sb2NrX2JoKCZjdC0+bG9jayk7CiAKLQlyZXR1cm4gc2VxX3ByaW50ZihzLCAiJXMgIiwgc2N0cF9jb25udHJhY2tfbmFtZXNbc3RhdGVdKTsKKwlzZXFfcHJpbnRmKHMsICIlcyAiLCBzY3RwX2Nvbm50cmFja19uYW1lc1tzdGF0ZV0pOwogfQogCiAjZGVmaW5lIGZvcl9lYWNoX3NjdHBfY2h1bmsoc2tiLCBzY2gsIF9zY2gsIG9mZnNldCwgZGF0YW9mZiwgY291bnQpCVwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggZDg3YjY0Mi4uNWNhYTBjNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTMwMiwxNiArMzAyLDE2IEBACiB9CiAKIC8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwotc3RhdGljIGludCB0Y3BfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAotCQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCitzdGF0aWMgdm9pZCB0Y3BfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewotCXJldHVybiBzZXFfcHJpbnRmKHMsICJzcG9ydD0laHUgZHBvcnQ9JWh1ICIsCi0JCQkgIG50b2hzKHR1cGxlLT5zcmMudS50Y3AucG9ydCksCi0JCQkgIG50b2hzKHR1cGxlLT5kc3QudS50Y3AucG9ydCkpOworCXNlcV9wcmludGYocywgInNwb3J0PSVodSBkcG9ydD0laHUgIiwKKwkJICAgbnRvaHModHVwbGUtPnNyYy51LnRjcC5wb3J0KSwKKwkJICAgbnRvaHModHVwbGUtPmRzdC51LnRjcC5wb3J0KSk7CiB9CiAKIC8qIFByaW50IG91dCB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBjb25udHJhY2suICovCi1zdGF0aWMgaW50IHRjcF9wcmludF9jb25udHJhY2soc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgbmZfY29ubiAqY3QpCitzdGF0aWMgdm9pZCB0Y3BfcHJpbnRfY29ubnRyYWNrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IG5mX2Nvbm4gKmN0KQogewogCWVudW0gdGNwX2Nvbm50cmFjayBzdGF0ZTsKIApAQCAtMzE5LDcgKzMxOSw3IEBACiAJc3RhdGUgPSBjdC0+cHJvdG8udGNwLnN0YXRlOwogCXNwaW5fdW5sb2NrX2JoKCZjdC0+bG9jayk7CiAKLQlyZXR1cm4gc2VxX3ByaW50ZihzLCAiJXMgIiwgdGNwX2Nvbm50cmFja19uYW1lc1tzdGF0ZV0pOworCXNlcV9wcmludGYocywgIiVzICIsIHRjcF9jb25udHJhY2tfbmFtZXNbc3RhdGVdKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29ubnRyYWNrX2luZGV4KGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcGgpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IDlkNzcyMWMuLjY5NTcyODEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCkBAIC02MywxMiArNjMsMTIgQEAKIH0KIAogLyogUHJpbnQgb3V0IHRoZSBwZXItcHJvdG9jb2wgcGFydCBvZiB0aGUgdHVwbGUuICovCi1zdGF0aWMgaW50IHVkcF9wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCi0JCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3N0YXRpYyB2b2lkIHVkcF9wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7Ci0JcmV0dXJuIHNlcV9wcmludGYocywgInNwb3J0PSVodSBkcG9ydD0laHUgIiwKLQkJCSAgbnRvaHModHVwbGUtPnNyYy51LnVkcC5wb3J0KSwKLQkJCSAgbnRvaHModHVwbGUtPmRzdC51LnVkcC5wb3J0KSk7CisJc2VxX3ByaW50ZihzLCAic3BvcnQ9JWh1IGRwb3J0PSVodSAiLAorCQkgICBudG9ocyh0dXBsZS0+c3JjLnUudWRwLnBvcnQpLAorCQkgICBudG9ocyh0dXBsZS0+ZHN0LnUudWRwLnBvcnQpKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCAqdWRwX2dldF90aW1lb3V0cyhzdHJ1Y3QgbmV0ICpuZXQpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHBsaXRlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHBsaXRlLmMKaW5kZXggMjc1MGU2Yy4uYzU5MDNkMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcGxpdGUuYwpAQCAtNzEsMTIgKzcxLDEyIEBACiB9CiAKIC8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwotc3RhdGljIGludCB1ZHBsaXRlX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3N0YXRpYyB2b2lkIHVkcGxpdGVfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAorCQkJCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewotCXJldHVybiBzZXFfcHJpbnRmKHMsICJzcG9ydD0laHUgZHBvcnQ9JWh1ICIsCi0JCQkgIG50b2hzKHR1cGxlLT5zcmMudS51ZHAucG9ydCksCi0JCQkgIG50b2hzKHR1cGxlLT5kc3QudS51ZHAucG9ydCkpOworCXNlcV9wcmludGYocywgInNwb3J0PSVodSBkcG9ydD0laHUgIiwKKwkJICAgbnRvaHModHVwbGUtPnNyYy51LnVkcC5wb3J0KSwKKwkJICAgbnRvaHModHVwbGUtPmRzdC51LnVkcC5wb3J0KSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgKnVkcGxpdGVfZ2V0X3RpbWVvdXRzKHN0cnVjdCBuZXQgKm5ldCkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBjZjY1YTFlLi5mYzgyM2ZhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC0zNiwxMiArMzYsMTMgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ0ZTCi1pbnQKK3ZvaWQKIHByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG8sCiAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG8pCiB7Ci0JcmV0dXJuIGwzcHJvdG8tPnByaW50X3R1cGxlKHMsIHR1cGxlKSB8fCBsNHByb3RvLT5wcmludF90dXBsZShzLCB0dXBsZSk7CisJbDNwcm90by0+cHJpbnRfdHVwbGUocywgdHVwbGUpOworCWw0cHJvdG8tPnByaW50X3R1cGxlKHMsIHR1cGxlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHByaW50X3R1cGxlKTsKIApAQCAtMTE5LDcgKzEyMCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUksKLXN0YXRpYyBpbnQgY3Rfc2hvd19zZWNjdHgoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCitzdGF0aWMgdm9pZCBjdF9zaG93X3NlY2N0eChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKIAlpbnQgcmV0OwogCXUzMiBsZW47CkBAIC0xMjcsMjIgKzEyOCwyMCBAQAogCiAJcmV0ID0gc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KGN0LT5zZWNtYXJrLCAmc2VjY3R4LCAmbGVuKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCi0JcmV0ID0gc2VxX3ByaW50ZihzLCAic2VjY3R4PSVzICIsIHNlY2N0eCk7CisJc2VxX3ByaW50ZihzLCAic2VjY3R4PSVzICIsIHNlY2N0eCk7CiAKIAlzZWN1cml0eV9yZWxlYXNlX3NlY2N0eChzZWNjdHgsIGxlbik7Ci0JcmV0dXJuIHJldDsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBjdF9zaG93X3NlY2N0eChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjdF9zaG93X3NlY2N0eChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQlyZXR1cm4gMDsKIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19USU1FU1RBTVAKLXN0YXRpYyBpbnQgY3Rfc2hvd19kZWx0YV90aW1lKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQorc3RhdGljIHZvaWQgY3Rfc2hvd19kZWx0YV90aW1lKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogewogCXN0cnVjdCBjdF9pdGVyX3N0YXRlICpzdCA9IHMtPnByaXZhdGU7CiAJc3RydWN0IG5mX2Nvbm5fdHN0YW1wICp0c3RhbXA7CkBAIC0xNTYsMTYgKzE1NSwxNSBAQAogCQllbHNlCiAJCQlkZWx0YV90aW1lID0gMDsKIAotCQlyZXR1cm4gc2VxX3ByaW50ZihzLCAiZGVsdGEtdGltZT0lbGx1ICIsCi0JCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWRlbHRhX3RpbWUpOworCQlzZXFfcHJpbnRmKHMsICJkZWx0YS10aW1lPSVsbHUgIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGVsdGFfdGltZSk7CiAJfQotCXJldHVybiAwOworCXJldHVybjsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGlubGluZSB2b2lkCiBjdF9zaG93X2RlbHRhX3RpbWUoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7Ci0JcmV0dXJuIDA7CiB9CiAjZW5kaWYKIApAQCAtMTkyLDU1ICsxOTAsNTQgQEAKIAlORl9DVF9BU1NFUlQobDRwcm90byk7CiAKIAlyZXQgPSAtRU5PU1BDOwotCWlmIChzZXFfcHJpbnRmKHMsICIlLThzICV1ICUtOHMgJXUgJWxkICIsCi0JCSAgICAgICBsM3Byb3RvLT5uYW1lLCBuZl9jdF9sM251bShjdCksCi0JCSAgICAgICBsNHByb3RvLT5uYW1lLCBuZl9jdF9wcm90b251bShjdCksCi0JCSAgICAgICB0aW1lcl9wZW5kaW5nKCZjdC0+dGltZW91dCkKLQkJICAgICAgID8gKGxvbmcpKGN0LT50aW1lb3V0LmV4cGlyZXMgLSBqaWZmaWVzKS9IWiA6IDApICE9IDApCi0JCWdvdG8gcmVsZWFzZTsKKwlzZXFfcHJpbnRmKHMsICIlLThzICV1ICUtOHMgJXUgJWxkICIsCisJCSAgIGwzcHJvdG8tPm5hbWUsIG5mX2N0X2wzbnVtKGN0KSwKKwkJICAgbDRwcm90by0+bmFtZSwgbmZfY3RfcHJvdG9udW0oY3QpLAorCQkgICB0aW1lcl9wZW5kaW5nKCZjdC0+dGltZW91dCkKKwkJICAgPyAobG9uZykoY3QtPnRpbWVvdXQuZXhwaXJlcyAtIGppZmZpZXMpL0haIDogMCk7CiAKLQlpZiAobDRwcm90by0+cHJpbnRfY29ubnRyYWNrICYmIGw0cHJvdG8tPnByaW50X2Nvbm50cmFjayhzLCBjdCkpCi0JCWdvdG8gcmVsZWFzZTsKKwlpZiAobDRwcm90by0+cHJpbnRfY29ubnRyYWNrKQorCQlsNHByb3RvLT5wcmludF9jb25udHJhY2socywgY3QpOwogCi0JaWYgKHByaW50X3R1cGxlKHMsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUsCi0JCQlsM3Byb3RvLCBsNHByb3RvKSkKKwlwcmludF90dXBsZShzLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLAorCQkgICAgbDNwcm90bywgbDRwcm90byk7CisKKwlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQogCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAoc2VxX3ByaW50X2FjY3QocywgY3QsIElQX0NUX0RJUl9PUklHSU5BTCkpCiAJCWdvdG8gcmVsZWFzZTsKIAogCWlmICghKHRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKSkKLQkJaWYgKHNlcV9wcmludGYocywgIltVTlJFUExJRURdICIpKQotCQkJZ290byByZWxlYXNlOworCQlzZXFfcHJpbnRmKHMsICJbVU5SRVBMSUVEXSAiKTsKIAotCWlmIChwcmludF90dXBsZShzLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLAotCQkJbDNwcm90bywgbDRwcm90bykpCi0JCWdvdG8gcmVsZWFzZTsKKwlwcmludF90dXBsZShzLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLAorCQkgICAgbDNwcm90bywgbDRwcm90byk7CiAKIAlpZiAoc2VxX3ByaW50X2FjY3QocywgY3QsIElQX0NUX0RJUl9SRVBMWSkpCiAJCWdvdG8gcmVsZWFzZTsKIAogCWlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjdC0+c3RhdHVzKSkKLQkJaWYgKHNlcV9wcmludGYocywgIltBU1NVUkVEXSAiKSkKLQkJCWdvdG8gcmVsZWFzZTsKKwkJc2VxX3ByaW50ZihzLCAiW0FTU1VSRURdICIpOworCisJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChzKSkKKwkJZ290byByZWxlYXNlOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspCi0JaWYgKHNlcV9wcmludGYocywgIm1hcms9JXUgIiwgY3QtPm1hcmspKQotCQlnb3RvIHJlbGVhc2U7CisJc2VxX3ByaW50ZihzLCAibWFyaz0ldSAiLCBjdC0+bWFyayk7CiAjZW5kaWYKIAotCWlmIChjdF9zaG93X3NlY2N0eChzLCBjdCkpCi0JCWdvdG8gcmVsZWFzZTsKKwljdF9zaG93X3NlY2N0eChzLCBjdCk7CiAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTCi0JaWYgKHNlcV9wcmludGYocywgInpvbmU9JXUgIiwgbmZfY3Rfem9uZShjdCkpKQotCQlnb3RvIHJlbGVhc2U7CisJc2VxX3ByaW50ZihzLCAiem9uZT0ldSAiLCBuZl9jdF96b25lKGN0KSk7CiAjZW5kaWYKIAotCWlmIChjdF9zaG93X2RlbHRhX3RpbWUocywgY3QpKQotCQlnb3RvIHJlbGVhc2U7CisJY3Rfc2hvd19kZWx0YV90aW1lKHMsIGN0KTsKIAotCWlmIChzZXFfcHJpbnRmKHMsICJ1c2U9JXVcbiIsIGF0b21pY19yZWFkKCZjdC0+Y3RfZ2VuZXJhbC51c2UpKSkKKwlzZXFfcHJpbnRmKHMsICJ1c2U9JXVcbiIsIGF0b21pY19yZWFkKCZjdC0+Y3RfZ2VuZXJhbC51c2UpKTsKKworCWlmIChzZXFfaGFzX292ZXJmbG93ZWQocykpCiAJCWdvdG8gcmVsZWFzZTsKIAogCXJldCA9IDA7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwppbmRleCBkNzE5NzY0Li42ZTNiOTExIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKQEAgLTI5NCwxOSArMjk0LDE5IEBACiB7CiAJbG9mZl90ICpwb3MgPSB2OwogCWNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcjsKLQlpbnQgaSwgcmV0OworCWludCBpOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzKTsKIAogCWxvZ2dlciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LT5uZi5uZl9sb2dnZXJzWypwb3NdLAogCQkJCQkgICBsb2NrZGVwX2lzX2hlbGQoJm5mX2xvZ19tdXRleCkpOwogCiAJaWYgKCFsb2dnZXIpCi0JCXJldCA9IHNlcV9wcmludGYocywgIiUybGxkIE5PTkUgKCIsICpwb3MpOworCQlzZXFfcHJpbnRmKHMsICIlMmxsZCBOT05FICgiLCAqcG9zKTsKIAllbHNlCi0JCXJldCA9IHNlcV9wcmludGYocywgIiUybGxkICVzICgiLCAqcG9zLCBsb2dnZXItPm5hbWUpOworCQlzZXFfcHJpbnRmKHMsICIlMmxsZCAlcyAoIiwgKnBvcywgbG9nZ2VyLT5uYW1lKTsKIAotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCWlmIChzZXFfaGFzX292ZXJmbG93ZWQocykpCisJCXJldHVybiAtRU5PU1BDOwogCiAJZm9yIChpID0gMDsgaSA8IE5GX0xPR19UWVBFX01BWDsgaSsrKSB7CiAJCWlmIChsb2dnZXJzWypwb3NdW2ldID09IE5VTEwpCkBAIC0zMTQsMTcgKzMxNCwxOSBAQAogCiAJCWxvZ2dlciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobG9nZ2Vyc1sqcG9zXVtpXSwKIAkJCQkJICAgbG9ja2RlcF9pc19oZWxkKCZuZl9sb2dfbXV0ZXgpKTsKLQkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJXMiLCBsb2dnZXItPm5hbWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JCWlmIChpID09IDAgJiYgbG9nZ2Vyc1sqcG9zXVtpICsgMV0gIT0gTlVMTCkgewotCQkJcmV0ID0gc2VxX3ByaW50ZihzLCAiLCIpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKLQkJfQorCQlzZXFfcHJpbnRmKHMsICIlcyIsIGxvZ2dlci0+bmFtZSk7CisJCWlmIChpID09IDAgJiYgbG9nZ2Vyc1sqcG9zXVtpICsgMV0gIT0gTlVMTCkKKwkJCXNlcV9wcmludGYocywgIiwiKTsKKworCQlpZiAoc2VxX2hhc19vdmVyZmxvd2VkKHMpKQorCQkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCi0JcmV0dXJuIHNlcV9wcmludGYocywgIilcbiIpOworCXNlcV9wcmludGYocywgIilcbiIpOworCisJaWYgKHNlcV9oYXNfb3ZlcmZsb3dlZChzKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZsb2dfc2VxX29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlX2NvcmUuYwppbmRleCA3YzYwY2NkLi4wZGI4NTE1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZV9jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWVfY29yZS5jCkBAIC0xMjQyLDEyICsxMjQyLDEzIEBACiB7CiAJY29uc3Qgc3RydWN0IG5mcW5sX2luc3RhbmNlICppbnN0ID0gdjsKIAotCXJldHVybiBzZXFfcHJpbnRmKHMsICIlNWQgJTZkICU1ZCAlMWQgJTVkICU1ZCAlNWQgJThkICUyZFxuIiwKLQkJCSAgaW5zdC0+cXVldWVfbnVtLAotCQkJICBpbnN0LT5wZWVyX3BvcnRpZCwgaW5zdC0+cXVldWVfdG90YWwsCi0JCQkgIGluc3QtPmNvcHlfbW9kZSwgaW5zdC0+Y29weV9yYW5nZSwKLQkJCSAgaW5zdC0+cXVldWVfZHJvcHBlZCwgaW5zdC0+cXVldWVfdXNlcl9kcm9wcGVkLAotCQkJICBpbnN0LT5pZF9zZXF1ZW5jZSwgMSk7CisJc2VxX3ByaW50ZihzLCAiJTVkICU2ZCAlNWQgJTFkICU1ZCAlNWQgJTVkICU4ZCAlMmRcbiIsCisJCSAgIGluc3QtPnF1ZXVlX251bSwKKwkJICAgaW5zdC0+cGVlcl9wb3J0aWQsIGluc3QtPnF1ZXVlX3RvdGFsLAorCQkgICBpbnN0LT5jb3B5X21vZGUsIGluc3QtPmNvcHlfcmFuZ2UsCisJCSAgIGluc3QtPnF1ZXVlX2Ryb3BwZWQsIGluc3QtPnF1ZXVlX3VzZXJfZHJvcHBlZCwKKwkJICAgaW5zdC0+aWRfc2VxdWVuY2UsIDEpOworCXJldHVybiBzZXFfaGFzX292ZXJmbG93ZWQocyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZxbmxfc2VxX29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwppbmRleCAxMzNlYjQ3Li41MWE0NTljIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKKysrIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCkBAIC05NDcsOSArOTQ3LDEwIEBACiB7CiAJc3RydWN0IHh0X3RhYmxlICp0YWJsZSA9IGxpc3RfZW50cnkodiwgc3RydWN0IHh0X3RhYmxlLCBsaXN0KTsKIAotCWlmIChzdHJsZW4odGFibGUtPm5hbWUpKQotCQlyZXR1cm4gc2VxX3ByaW50ZihzZXEsICIlc1xuIiwgdGFibGUtPm5hbWUpOwotCWVsc2UKKwlpZiAoc3RybGVuKHRhYmxlLT5uYW1lKSkgeworCQlzZXFfcHJpbnRmKHNlcSwgIiVzXG4iLCB0YWJsZS0+bmFtZSk7CisJCXJldHVybiBzZXFfaGFzX292ZXJmbG93ZWQoc2VxKTsKKwl9IGVsc2UKIAkJcmV0dXJuIDA7CiB9CiAKQEAgLTEwODYsOCArMTA4NywxMCBAQAogCQlpZiAodHJhdi0+Y3VyciA9PSB0cmF2LT5oZWFkKQogCQkJcmV0dXJuIDA7CiAJCW1hdGNoID0gbGlzdF9lbnRyeSh0cmF2LT5jdXJyLCBzdHJ1Y3QgeHRfbWF0Y2gsIGxpc3QpOwotCQlyZXR1cm4gKCptYXRjaC0+bmFtZSA9PSAnXDAnKSA/IDAgOgotCQkgICAgICAgc2VxX3ByaW50ZihzZXEsICIlc1xuIiwgbWF0Y2gtPm5hbWUpOworCQlpZiAoKm1hdGNoLT5uYW1lID09ICdcMCcpCisJCQlyZXR1cm4gMDsKKwkJc2VxX3ByaW50ZihzZXEsICIlc1xuIiwgbWF0Y2gtPm5hbWUpOworCQlyZXR1cm4gc2VxX2hhc19vdmVyZmxvd2VkKHNlcSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTEzOSw4ICsxMTQyLDEwIEBACiAJCWlmICh0cmF2LT5jdXJyID09IHRyYXYtPmhlYWQpCiAJCQlyZXR1cm4gMDsKIAkJdGFyZ2V0ID0gbGlzdF9lbnRyeSh0cmF2LT5jdXJyLCBzdHJ1Y3QgeHRfdGFyZ2V0LCBsaXN0KTsKLQkJcmV0dXJuICgqdGFyZ2V0LT5uYW1lID09ICdcMCcpID8gMCA6Ci0JCSAgICAgICBzZXFfcHJpbnRmKHNlcSwgIiVzXG4iLCB0YXJnZXQtPm5hbWUpOworCQlpZiAoKnRhcmdldC0+bmFtZSA9PSAnXDAnKQorCQkJcmV0dXJuIDA7CisJCXNlcV9wcmludGYoc2VxLCAiJXNcbiIsIHRhcmdldC0+bmFtZSk7CisJCXJldHVybiBzZXFfaGFzX292ZXJmbG93ZWQoc2VxKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwppbmRleCAwNWZiYzJhLi4xNzg2OTY4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKQEAgLTc4OSw3ICs3ODksNiBAQAogc3RhdGljIGludCBkbF9zZXFfcmVhbF9zaG93KHN0cnVjdCBkc3RoYXNoX2VudCAqZW50LCB1X2ludDhfdCBmYW1pbHksCiAJCQkJICAgc3RydWN0IHNlcV9maWxlICpzKQogewotCWludCByZXM7CiAJY29uc3Qgc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0ID0gcy0+cHJpdmF0ZTsKIAogCXNwaW5fbG9jaygmZW50LT5sb2NrKTsKQEAgLTc5OCwzMyArNzk3LDMyIEBACiAKIAlzd2l0Y2ggKGZhbWlseSkgewogCWNhc2UgTkZQUk9UT19JUFY0OgotCQlyZXMgPSBzZXFfcHJpbnRmKHMsICIlbGQgJXBJNDoldS0+JXBJNDoldSAldSAldSAldVxuIiwKLQkJCQkgKGxvbmcpKGVudC0+ZXhwaXJlcyAtIGppZmZpZXMpL0haLAotCQkJCSAmZW50LT5kc3QuaXAuc3JjLAotCQkJCSBudG9ocyhlbnQtPmRzdC5zcmNfcG9ydCksCi0JCQkJICZlbnQtPmRzdC5pcC5kc3QsCi0JCQkJIG50b2hzKGVudC0+ZHN0LmRzdF9wb3J0KSwKLQkJCQkgZW50LT5yYXRlaW5mby5jcmVkaXQsIGVudC0+cmF0ZWluZm8uY3JlZGl0X2NhcCwKLQkJCQkgZW50LT5yYXRlaW5mby5jb3N0KTsKKwkJc2VxX3ByaW50ZihzLCAiJWxkICVwSTQ6JXUtPiVwSTQ6JXUgJXUgJXUgJXVcbiIsCisJCQkgICAobG9uZykoZW50LT5leHBpcmVzIC0gamlmZmllcykvSFosCisJCQkgICAmZW50LT5kc3QuaXAuc3JjLAorCQkJICAgbnRvaHMoZW50LT5kc3Quc3JjX3BvcnQpLAorCQkJICAgJmVudC0+ZHN0LmlwLmRzdCwKKwkJCSAgIG50b2hzKGVudC0+ZHN0LmRzdF9wb3J0KSwKKwkJCSAgIGVudC0+cmF0ZWluZm8uY3JlZGl0LCBlbnQtPnJhdGVpbmZvLmNyZWRpdF9jYXAsCisJCQkgICBlbnQtPnJhdGVpbmZvLmNvc3QpOwogCQlicmVhazsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUDZfTkZfSVBUQUJMRVMpCiAJY2FzZSBORlBST1RPX0lQVjY6Ci0JCXJlcyA9IHNlcV9wcmludGYocywgIiVsZCAlcEk2OiV1LT4lcEk2OiV1ICV1ICV1ICV1XG4iLAotCQkJCSAobG9uZykoZW50LT5leHBpcmVzIC0gamlmZmllcykvSFosCi0JCQkJICZlbnQtPmRzdC5pcDYuc3JjLAotCQkJCSBudG9ocyhlbnQtPmRzdC5zcmNfcG9ydCksCi0JCQkJICZlbnQtPmRzdC5pcDYuZHN0LAotCQkJCSBudG9ocyhlbnQtPmRzdC5kc3RfcG9ydCksCi0JCQkJIGVudC0+cmF0ZWluZm8uY3JlZGl0LCBlbnQtPnJhdGVpbmZvLmNyZWRpdF9jYXAsCi0JCQkJIGVudC0+cmF0ZWluZm8uY29zdCk7CisJCXNlcV9wcmludGYocywgIiVsZCAlcEk2OiV1LT4lcEk2OiV1ICV1ICV1ICV1XG4iLAorCQkJICAgKGxvbmcpKGVudC0+ZXhwaXJlcyAtIGppZmZpZXMpL0haLAorCQkJICAgJmVudC0+ZHN0LmlwNi5zcmMsCisJCQkgICBudG9ocyhlbnQtPmRzdC5zcmNfcG9ydCksCisJCQkgICAmZW50LT5kc3QuaXA2LmRzdCwKKwkJCSAgIG50b2hzKGVudC0+ZHN0LmRzdF9wb3J0KSwKKwkJCSAgIGVudC0+cmF0ZWluZm8uY3JlZGl0LCBlbnQtPnJhdGVpbmZvLmNyZWRpdF9jYXAsCisJCQkgICBlbnQtPnJhdGVpbmZvLmNvc3QpOwogCQlicmVhazsKICNlbmRpZgogCWRlZmF1bHQ6CiAJCUJVRygpOwotCQlyZXMgPSAwOwogCX0KIAlzcGluX3VubG9jaygmZW50LT5sb2NrKTsKLQlyZXR1cm4gcmVzOworCXJldHVybiBzZXFfaGFzX292ZXJmbG93ZWQocyk7CiB9CiAKIHN0YXRpYyBpbnQgZGxfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQpkaWZmIC0tZ2l0IGEvbmV0L3Jma2lsbC9yZmtpbGwtZ3Bpby5jIGIvbmV0L3Jma2lsbC9yZmtpbGwtZ3Bpby5jCmluZGV4IDBmNjIzMjYuLjJhNDcxNzkgMTAwNjQ0Ci0tLSBhL25ldC9yZmtpbGwvcmZraWxsLWdwaW8uYworKysgYi9uZXQvcmZraWxsL3Jma2lsbC1ncGlvLmMKQEAgLTYzLDYgKzYzLDE1IEBACiAJLnNldF9ibG9jayA9IHJma2lsbF9ncGlvX3NldF9wb3dlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9ncGlvX3BhcmFtcyByZXNldF9ncGlvcyA9IHsgMCwgMCwgZmFsc2UgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9ncGlvX3BhcmFtcyBzaHV0ZG93bl9ncGlvcyA9IHsgMSwgMCwgZmFsc2UgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2dwaW9fbWFwcGluZyBhY3BpX3Jma2lsbF9kZWZhdWx0X2dwaW9zW10gPSB7CisJeyAicmVzZXQtZ3Bpb3MiLCAmcmVzZXRfZ3Bpb3MsIDEgfSwKKwl7ICJzaHV0ZG93bi1ncGlvcyIsICZzaHV0ZG93bl9ncGlvcywgMSB9LAorCXsgfSwKK307CisKIHN0YXRpYyBpbnQgcmZraWxsX2dwaW9fYWNwaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgcmZraWxsX2dwaW9fZGF0YSAqcmZraWxsKQogewpAQCAtNzUsNyArODQsOCBAQAogCXJma2lsbC0+bmFtZSA9IGRldl9uYW1lKGRldik7CiAJcmZraWxsLT50eXBlID0gKHVuc2lnbmVkKWlkLT5kcml2ZXJfZGF0YTsKIAotCXJldHVybiAwOworCXJldHVybiBhY3BpX2Rldl9hZGRfZHJpdmVyX2dwaW9zKEFDUElfQ09NUEFOSU9OKGRldiksCisJCQkJCSBhY3BpX3Jma2lsbF9kZWZhdWx0X2dwaW9zKTsKIH0KIAogc3RhdGljIGludCByZmtpbGxfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTAyLDcgKzExMiw3IEBACiAKIAlyZmtpbGwtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAotCWdwaW8gPSBkZXZtX2dwaW9kX2dldF9pbmRleCgmcGRldi0+ZGV2LCAicmVzZXQiLCAwKTsKKwlncGlvID0gZGV2bV9ncGlvZF9nZXQoJnBkZXYtPmRldiwgInJlc2V0Iik7CiAJaWYgKCFJU19FUlIoZ3BpbykpIHsKIAkJcmV0ID0gZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChncGlvLCAwKTsKIAkJaWYgKHJldCkKQEAgLTExMCw3ICsxMjAsNyBAQAogCQlyZmtpbGwtPnJlc2V0X2dwaW8gPSBncGlvOwogCX0KIAotCWdwaW8gPSBkZXZtX2dwaW9kX2dldF9pbmRleCgmcGRldi0+ZGV2LCAic2h1dGRvd24iLCAxKTsKKwlncGlvID0gZGV2bV9ncGlvZF9nZXQoJnBkZXYtPmRldiwgInNodXRkb3duIik7CiAJaWYgKCFJU19FUlIoZ3BpbykpIHsKIAkJcmV0ID0gZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChncGlvLCAwKTsKIAkJaWYgKHJldCkKQEAgLTE1MCw2ICsxNjAsOCBAQAogCXJma2lsbF91bnJlZ2lzdGVyKHJma2lsbC0+cmZraWxsX2Rldik7CiAJcmZraWxsX2Rlc3Ryb3kocmZraWxsLT5yZmtpbGxfZGV2KTsKIAorCWFjcGlfZGV2X3JlbW92ZV9kcml2ZXJfZ3Bpb3MoQUNQSV9DT01QQU5JT04oJnBkZXYtPmRldikpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvS2NvbmZpZyBiL25ldC9zdW5ycGMvS2NvbmZpZwppbmRleCAwNzU0ZDBmLi5mYjc4MTE3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL0tjb25maWcKKysrIGIvbmV0L3N1bnJwYy9LY29uZmlnCkBAIC0zNSw2ICszNSw3IEBACiBjb25maWcgU1VOUlBDX0RFQlVHCiAJYm9vbCAiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmciCiAJZGVwZW5kcyBvbiBTVU5SUEMgJiYgU1lTQ1RMCisJc2VsZWN0IERFQlVHX0ZTCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHN5c2N0bC1iYXNlZCBkZWJ1Z2dpbmcgaW50ZXJmYWNlCiAJICB0aGF0IGlzIGJlIHVzZWQgYnkgdGhlICdycGNkZWJ1ZycgdXRpbGl0eSB0byB0dXJuIG9uIG9yIG9mZgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9NYWtlZmlsZSBiL25ldC9zdW5ycGMvTWFrZWZpbGUKaW5kZXggZTVhN2ExYy4uMTVlNmY2YyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9NYWtlZmlsZQorKysgYi9uZXQvc3VucnBjL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiAJICAgIGFkZHIubyBycGNiX2NsbnQubyB0aW1lci5vIHhkci5vIFwKIAkgICAgc3VucnBjX3N5bXMubyBjYWNoZS5vIHJwY19waXBlLm8gXAogCSAgICBzdmNfeHBydC5vCitzdW5ycGMtJChDT05GSUdfU1VOUlBDX0RFQlVHKSArPSBkZWJ1Z2ZzLm8KIHN1bnJwYy0kKENPTkZJR19TVU5SUENfQkFDS0NIQU5ORUwpICs9IGJhY2tjaGFubmVsX3Jxc3QubyBiY19zdmMubwogc3VucnBjLSQoQ09ORklHX1BST0NfRlMpICs9IHN0YXRzLm8KIHN1bnJwYy0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGguYyBiL25ldC9zdW5ycGMvYXV0aC5jCmluZGV4IDM4M2ViOTEuLjQ3ZjM4YmUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19hcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApAQCAtNjQ2LDcgKzY0Niw3IEBACiAJY3JlZC0+Y3JfYXV0aCA9IGF1dGg7CiAJY3JlZC0+Y3Jfb3BzID0gb3BzOwogCWNyZWQtPmNyX2V4cGlyZSA9IGppZmZpZXM7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCWNyZWQtPmNyX21hZ2ljID0gUlBDQVVUSF9DUkVEX01BR0lDOwogI2VuZGlmCiAJY3JlZC0+Y3JfdWlkID0gYWNyZWQtPnVpZDsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nZW5lcmljLmMgYi9uZXQvc3VucnBjL2F1dGhfZ2VuZXJpYy5jCmluZGV4IDZmNmI4MjkuLjQxMjQ4YjEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nZW5lcmljLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dlbmVyaWMuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9kZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCmluZGV4IDUzZWQ4ZDMuLmRhY2UxM2QgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKQEAgLTY2LDcgKzY2LDcgQEAKICNkZWZpbmUgR1NTX0tFWV9FWFBJUkVfVElNRU8gMjQwCiBzdGF0aWMgdW5zaWduZWQgaW50IGdzc19rZXlfZXhwaXJlX3RpbWVvID0gR1NTX0tFWV9FWFBJUkVfVElNRU87CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19nZW5lcmljX3Rva2VuLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19nZW5lcmljX3Rva2VuLmMKaW5kZXggYzU4NmU5Mi4uMjU0ZGVmZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfZ2VuZXJpY190b2tlbi5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2dlbmVyaWNfdG9rZW4uYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3NfYXNuMS5oPgogCiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkgICAgICAgIFJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfY3J5cHRvLmMKaW5kZXggZjVlZDlmNi4uYjU0MDhlOCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19rcmI1Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZICAgICAgICBSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfa2V5cy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9rZXlzLmMKaW5kZXggMjQ1ODliZC4uMjM0ZmE4ZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9rZXlzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9rZXlzLmMKQEAgLTYxLDcgKzYxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CiAjaW5jbHVkZSA8bGludXgvbGNtLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkgICAgICAgIFJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwppbmRleCAwZDNjMTU4Li4yOGRiNDQyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3Nfa3JiNV9lbmN0eXBlcy5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZWFsLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYwppbmRleCA0Mjc2OGU1Li4xZDc0ZDY1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYwpAQCAtNjQsNyArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZICAgICAgICBSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfc2VxbnVtLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlcW51bS5jCmluZGV4IDYyYWM5MGMuLjIwZDU1YzcgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfc2VxbnVtLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZXFudW0uYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3Nfa3JiNS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZICAgICAgICBSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfdW5zZWFsLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3Vuc2VhbC5jCmluZGV4IDZjOTgxZGQuLmRjZjk1MTUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfdW5zZWFsLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV91bnNlYWwuYwpAQCAtNjIsNyArNjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3Nfa3JiNS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZICAgICAgICBSUENEQkdfQVVUSAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfd3JhcC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKaW5kZXggNGI2MTRjNi4uY2E3ZTkyYSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYwppbmRleCA5MmQ1YWI5Li43MDYzZDg1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZ3NzX2FwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkgICAgICAgIFJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfcnBjX3hkci5oIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfcnBjX3hkci5oCmluZGV4IDY4NWE2ODguLjlkODhjNjIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3JwY194ZHIuaAorKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19ycGNfeGRyLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94cHJ0c29jay5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCmluZGV4IGM1NDhhYjIuLmRlODU2ZGQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlICJnc3NfcnBjX3VwY2FsbC5oIgogCiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfbnVsbC5jIGIvbmV0L3N1bnJwYy9hdXRoX251bGwuYwppbmRleCA3MTJjMTIzLi5jMmEyYjU4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfbnVsbC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9udWxsLmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAJLmNyX29wcwkJPSAmbnVsbF9jcmVkb3BzLAogCS5jcl9jb3VudAk9IEFUT01JQ19JTklUKDEpLAogCS5jcl9mbGFncwk9IDFVTCA8PCBSUENBVVRIX0NSRURfVVBUT0RBVEUsCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCS5jcl9tYWdpYwk9IFJQQ0FVVEhfQ1JFRF9NQUdJQywKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF91bml4LmMgYi9uZXQvc3VucnBjL2F1dGhfdW5peC5jCmluZGV4IGQ1ZDY5MjMuLjRmZWRhMmQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF91bml4LmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX3VuaXguYwpAQCAtMjUsNyArMjUsNyBAQAogCiAjZGVmaW5lIFVOWF9XUklURVNMQUNLCQkoMjEgKyAoVU5YX01BWE5PREVOQU1FID4+IDIpKQogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9iYWNrY2hhbm5lbF9ycXN0LmMgYi9uZXQvc3VucnBjL2JhY2tjaGFubmVsX3Jxc3QuYwppbmRleCA5NzYxYTBkLi42NTFmNDlhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2JhY2tjaGFubmVsX3Jxc3QuYworKysgYi9uZXQvc3VucnBjL2JhY2tjaGFubmVsX3Jxc3QuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9iY194cHJ0Lmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfVFJBTlMKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NsbnQuYyBiL25ldC9zdW5ycGMvY2xudC5jCmluZGV4IDlhY2Q2Y2UuLjA1ZGExMmEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2xudC5jCisrKyBiL25ldC9zdW5ycGMvY2xudC5jCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAic3VucnBjLmgiCiAjaW5jbHVkZSAibmV0bnMuaCIKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfQ0FMTAogI2VuZGlmCiAKQEAgLTMwNSw2ICszMDUsMTAgQEAKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBpcGVmc19zYjsKIAlpbnQgZXJyOwogCisJZXJyID0gcnBjX2NsbnRfZGVidWdmc19yZWdpc3RlcihjbG50KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJcGlwZWZzX3NiID0gcnBjX2dldF9zYl9uZXQobmV0KTsKIAlpZiAocGlwZWZzX3NiKSB7CiAJCWVyciA9IHJwY19zZXR1cF9waXBlZGlyKHBpcGVmc19zYiwgY2xudCk7CkBAIC0zMzEsNiArMzM1LDcgQEAKIG91dDoKIAlpZiAocGlwZWZzX3NiKQogCQlycGNfcHV0X3NiX25ldChuZXQpOworCXJwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihjbG50KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02NzAsNiArNjc1LDcgQEAKIAogCXJwY191bnJlZ2lzdGVyX2NsaWVudChjbG50KTsKIAlfX3JwY19jbG50X3JlbW92ZV9waXBlZGlyKGNsbnQpOworCXJwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihjbG50KTsKIAogCS8qCiAJICogQSBuZXcgdHJhbnNwb3J0IHdhcyBjcmVhdGVkLiAgImNsbnQiIHRoZXJlZm9yZQpAQCAtNzcxLDYgKzc3Nyw3IEBACiAJCQlyY3VfZGVyZWZlcmVuY2UoY2xudC0+Y2xfeHBydCktPnNlcnZlcm5hbWUpOwogCWlmIChjbG50LT5jbF9wYXJlbnQgIT0gY2xudCkKIAkJcGFyZW50ID0gY2xudC0+Y2xfcGFyZW50OworCXJwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihjbG50KTsKIAlycGNfY2xudF9yZW1vdmVfcGlwZWRpcihjbG50KTsKIAlycGNfdW5yZWdpc3Rlcl9jbGllbnQoY2xudCk7CiAJcnBjX2ZyZWVfaW9zdGF0cyhjbG50LT5jbF9tZXRyaWNzKTsKQEAgLTEzOTYsOCArMTQwMyw5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGNfcmVzdGFydF9jYWxsKTsKIAotI2lmZGVmIFJQQ19ERUJVRwotc3RhdGljIGNvbnN0IGNoYXIgKnJwY19wcm9jX25hbWUoY29uc3Qgc3RydWN0IHJwY190YXNrICp0YXNrKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKK2NvbnN0IGNoYXIKKypycGNfcHJvY19uYW1lKGNvbnN0IHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKIAljb25zdCBzdHJ1Y3QgcnBjX3Byb2NpbmZvICpwcm9jID0gdGFzay0+dGtfbXNnLnJwY19wcm9jOwogCkBAIC0yNDIxLDcgKzI0MjksNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnBjX2NhbGxfbnVsbCk7CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiBzdGF0aWMgdm9pZCBycGNfc2hvd19oZWFkZXIodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICItcGlkLSBmbGdzIHN0YXR1cyAtY2xpZW50LSAtLXJxc3RwLSAiCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2RlYnVnZnMuYyBiL25ldC9zdW5ycGMvZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MTFmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvc3VucnBjL2RlYnVnZnMuYwpAQCAtMCwwICsxLDI5MiBAQAorLyoqCisgKiBkZWJ1Z2ZzIGludGVyZmFjZSBmb3Igc3VucnBjCisgKgorICogKGMpIDIwMTQgSmVmZiBMYXl0b24gPGpsYXl0b25AcHJpbWFyeWRhdGEuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KKyNpbmNsdWRlICJuZXRucy5oIgorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqdG9wZGlyOworc3RhdGljIHN0cnVjdCBkZW50cnkgKnJwY19jbG50X2RpcjsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpycGNfeHBydF9kaXI7CisKK3N0cnVjdCBycGNfY2xudF9pdGVyIHsKKwlzdHJ1Y3QgcnBjX2NsbnQJKmNsbnQ7CisJbG9mZl90CQlwb3M7Cit9OworCitzdGF0aWMgaW50Cit0YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqdikKK3sKKwl1MzIgeGlkID0gMDsKKwlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2sgPSB2OworCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IHRhc2stPnRrX2NsaWVudDsKKwljb25zdCBjaGFyICpycGNfd2FpdHEgPSAibm9uZSI7CisKKwlpZiAoUlBDX0lTX1FVRVVFRCh0YXNrKSkKKwkJcnBjX3dhaXRxID0gcnBjX3FuYW1lKHRhc2stPnRrX3dhaXRxdWV1ZSk7CisKKwlpZiAodGFzay0+dGtfcnFzdHApCisJCXhpZCA9IGJlMzJfdG9fY3B1KHRhc2stPnRrX3Jxc3RwLT5ycV94aWQpOworCisJc2VxX3ByaW50ZihmLCAiJTV1ICUwNHggJTZkIDB4JXggMHgleCAlOGxkICVwcyAlc3YldSAlcyBhOiVwcyBxOiVzXG4iLAorCQl0YXNrLT50a19waWQsIHRhc2stPnRrX2ZsYWdzLCB0YXNrLT50a19zdGF0dXMsCisJCWNsbnQtPmNsX2NsaWQsIHhpZCwgdGFzay0+dGtfdGltZW91dCwgdGFzay0+dGtfb3BzLAorCQljbG50LT5jbF9wcm9ncmFtLT5uYW1lLCBjbG50LT5jbF92ZXJzLCBycGNfcHJvY19uYW1lKHRhc2spLAorCQl0YXNrLT50a19hY3Rpb24sIHJwY193YWl0cSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICoKK3Rhc2tzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwcG9zKQorCV9fYWNxdWlyZXMoJmNsbnQtPmNsX2xvY2spCit7CisJc3RydWN0IHJwY19jbG50X2l0ZXIgKml0ZXIgPSBmLT5wcml2YXRlOworCWxvZmZfdCBwb3MgPSAqcHBvczsKKwlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQgPSBpdGVyLT5jbG50OworCXN0cnVjdCBycGNfdGFzayAqdGFzazsKKworCWl0ZXItPnBvcyA9IHBvcyArIDE7CisJc3Bpbl9sb2NrKCZjbG50LT5jbF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRhc2ssICZjbG50LT5jbF90YXNrcywgdGtfdGFzaykKKwkJaWYgKHBvcy0tID09IDApCisJCQlyZXR1cm4gdGFzazsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKgordGFza3NfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBycGNfY2xudF9pdGVyICppdGVyID0gZi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQgPSBpdGVyLT5jbG50OworCXN0cnVjdCBycGNfdGFzayAqdGFzayA9IHY7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCA9IHRhc2stPnRrX3Rhc2submV4dDsKKworCSsraXRlci0+cG9zOworCSsrKnBvczsKKworCS8qIElmIHRoZXJlJ3MgYW5vdGhlciB0YXNrIG9uIGxpc3QsIHJldHVybiBpdCAqLworCWlmIChuZXh0ID09ICZjbG50LT5jbF90YXNrcykKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGxpc3RfZW50cnkobmV4dCwgc3RydWN0IHJwY190YXNrLCB0a190YXNrKTsKK30KKworc3RhdGljIHZvaWQKK3Rhc2tzX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmNsbnQtPmNsX2xvY2spCit7CisJc3RydWN0IHJwY19jbG50X2l0ZXIgKml0ZXIgPSBmLT5wcml2YXRlOworCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IGl0ZXItPmNsbnQ7CisKKwlzcGluX3VubG9jaygmY2xudC0+Y2xfbG9jayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdGFza3Nfc2VxX29wZXJhdGlvbnMgPSB7CisJLnN0YXJ0CT0gdGFza3Nfc3RhcnQsCisJLm5leHQJPSB0YXNrc19uZXh0LAorCS5zdG9wCT0gdGFza3Nfc3RvcCwKKwkuc2hvdwk9IHRhc2tzX3Nob3csCit9OworCitzdGF0aWMgaW50IHRhc2tzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlscCwgJnRhc2tzX3NlcV9vcGVyYXRpb25zLAorCQkJCQlzaXplb2Yoc3RydWN0IHJwY19jbG50X2l0ZXIpKTsKKworCWlmICghcmV0KSB7CisJCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCQlzdHJ1Y3QgcnBjX2NsbnRfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKKworCQlpdGVyLT5jbG50ID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJml0ZXItPmNsbnQtPmNsX2NvdW50KSkgeworCQkJc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlscCk7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAordGFza3NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcnBjX2NsbnRfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKKworCXJwY19yZWxlYXNlX2NsaWVudChpdGVyLT5jbG50KTsKKwlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlscCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRhc2tzX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHRhc2tzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSB0YXNrc19yZWxlYXNlLAorfTsKKworaW50CitycGNfY2xudF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBycGNfY2xudCAqY2xudCkKK3sKKwlpbnQgbGVuLCBlcnI7CisJY2hhciBuYW1lWzI0XTsgLyogZW5vdWdoIGZvciAiLi4vLi4vcnBjX3hwcnQvICsgOCBoZXggZGlnaXRzICsgTlVMTCAqLworCisJLyogQWxyZWFkeSByZWdpc3RlcmVkPyAqLworCWlmIChjbG50LT5jbF9kZWJ1Z2ZzKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiV4IiwgY2xudC0+Y2xfY2xpZCk7CisJaWYgKGxlbiA+PSBzaXplb2YobmFtZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbWFrZSB0aGUgcGVyLWNsaWVudCBkaXIgKi8KKwljbG50LT5jbF9kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHJwY19jbG50X2Rpcik7CisJaWYgKCFjbG50LT5jbF9kZWJ1Z2ZzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIG1ha2UgdGFza3MgZmlsZSAqLworCWVyciA9IC1FTk9NRU07CisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0YXNrcyIsIFNfSUZSRUcgfCBTX0lSVVNSLCBjbG50LT5jbF9kZWJ1Z2ZzLAorCQkJCSBjbG50LCAmdGFza3NfZm9wcykpCisJCWdvdG8gb3V0X2VycjsKKworCWVyciA9IC1FSU5WQUw7CisJcmN1X3JlYWRfbG9jaygpOworCWxlbiA9IHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIi4uLy4uL3JwY194cHJ0LyVzIiwKKwkJCXJjdV9kZXJlZmVyZW5jZShjbG50LT5jbF94cHJ0KS0+ZGVidWdmcy0+ZF9uYW1lLm5hbWUpOworCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChsZW4gPj0gc2l6ZW9mKG5hbWUpKQorCQlnb3RvIG91dF9lcnI7CisKKwllcnIgPSAtRU5PTUVNOworCWlmICghZGVidWdmc19jcmVhdGVfc3ltbGluaygieHBydCIsIGNsbnQtPmNsX2RlYnVnZnMsIG5hbWUpKQorCQlnb3RvIG91dF9lcnI7CisKKwlyZXR1cm4gMDsKK291dF9lcnI6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGNsbnQtPmNsX2RlYnVnZnMpOworCWNsbnQtPmNsX2RlYnVnZnMgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQKK3JwY19jbG50X2RlYnVnZnNfdW5yZWdpc3RlcihzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGNsbnQtPmNsX2RlYnVnZnMpOworCWNsbnQtPmNsX2RlYnVnZnMgPSBOVUxMOworfQorCitzdGF0aWMgaW50Cit4cHJ0X2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCit7CisJc3RydWN0IHJwY194cHJ0ICp4cHJ0ID0gZi0+cHJpdmF0ZTsKKworCXNlcV9wcmludGYoZiwgIm5ldGlkOiAlc1xuIiwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX05FVElEXSk7CisJc2VxX3ByaW50ZihmLCAiYWRkcjogICVzXG4iLCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0pOworCXNlcV9wcmludGYoZiwgInBvcnQ6ICAlc1xuIiwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdKTsKKwlzZXFfcHJpbnRmKGYsICJzdGF0ZTogMHglbHhcbiIsIHhwcnQtPnN0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoreHBydF9pbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcmV0ID0gc2luZ2xlX29wZW4oZmlscCwgeHBydF9pbmZvX3Nob3csIHhwcnQpOworCisJaWYgKCFyZXQpIHsKKwkJaWYgKCF4cHJ0X2dldCh4cHJ0KSkgeworCQkJc2luZ2xlX3JlbGVhc2UoaW5vZGUsIGZpbHApOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cit4cHJ0X2luZm9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSBpbm9kZS0+aV9wcml2YXRlOworCisJeHBydF9wdXQoeHBydCk7CisJcmV0dXJuIHNpbmdsZV9yZWxlYXNlKGlub2RlLCBmaWxwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeHBydF9pbmZvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHhwcnRfaW5mb19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0geHBydF9pbmZvX3JlbGVhc2UsCit9OworCitpbnQKK3JwY194cHJ0X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQoreworCWludCBsZW4sIGlkOworCXN0YXRpYyBhdG9taWNfdAljdXJfaWQ7CisJY2hhcgkJbmFtZVs5XTsgLyogOCBoZXggZGlnaXRzICsgTlVMTCB0ZXJtICovCisKKwlpZCA9ICh1bnNpZ25lZCBpbnQpYXRvbWljX2luY19yZXR1cm4oJmN1cl9pZCk7CisKKwlsZW4gPSBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIleCIsIGlkKTsKKwlpZiAobGVuID49IHNpemVvZihuYW1lKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBtYWtlIHRoZSBwZXItY2xpZW50IGRpciAqLworCXhwcnQtPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgcnBjX3hwcnRfZGlyKTsKKwlpZiAoIXhwcnQtPmRlYnVnZnMpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogbWFrZSB0YXNrcyBmaWxlICovCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbmZvIiwgU19JRlJFRyB8IFNfSVJVU1IsIHhwcnQtPmRlYnVnZnMsCisJCQkJIHhwcnQsICZ4cHJ0X2luZm9fZm9wcykpIHsKKwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHhwcnQtPmRlYnVnZnMpOworCQl4cHJ0LT5kZWJ1Z2ZzID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3JwY194cHJ0X2RlYnVnZnNfdW5yZWdpc3RlcihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHhwcnQtPmRlYnVnZnMpOworCXhwcnQtPmRlYnVnZnMgPSBOVUxMOworfQorCit2b2lkIF9fZXhpdAorc3VucnBjX2RlYnVnZnNfZXhpdCh2b2lkKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZSh0b3BkaXIpOworfQorCitpbnQgX19pbml0CitzdW5ycGNfZGVidWdmc19pbml0KHZvaWQpCit7CisJdG9wZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJzdW5ycGMiLCBOVUxMKTsKKwlpZiAoIXRvcGRpcikKKwkJZ290byBvdXQ7CisKKwlycGNfY2xudF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInJwY19jbG50IiwgdG9wZGlyKTsKKwlpZiAoIXJwY19jbG50X2RpcikKKwkJZ290byBvdXRfcmVtb3ZlOworCisJcnBjX3hwcnRfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJycGNfeHBydCIsIHRvcGRpcik7CisJaWYgKCFycGNfeHBydF9kaXIpCisJCWdvdG8gb3V0X3JlbW92ZTsKKworCXJldHVybiAwOworb3V0X3JlbW92ZToKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUodG9wZGlyKTsKKwl0b3BkaXIgPSBOVUxMOworb3V0OgorCXJldHVybiAtRU5PTUVNOworfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKaW5kZXggMTg5MWExMC4uMDUyMDIwMSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYworKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCkBAIC0zMiw3ICszMiw3IEBACiAKICNpbmNsdWRlICJuZXRucy5oIgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19CSU5ECiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zY2hlZC5jIGIvbmV0L3N1bnJwYy9zY2hlZC5jCmluZGV4IGZlMzQ0MWEuLmQyMGYyMzIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc2NoZWQuYworKysgYi9uZXQvc3VucnBjL3NjaGVkLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2luY2x1ZGUgInN1bnJwYy5oIgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogI2RlZmluZSBSUENEQkdfRkFDSUxJVFkJCVJQQ0RCR19TQ0hFRAogI2VuZGlmCiAKQEAgLTI1OCw3ICsyNTgsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChSUENfREVCVUcpIHx8IGRlZmluZWQoUlBDX1RSQUNFUE9JTlRTKQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykgfHwgSVNfRU5BQkxFRChDT05GSUdfVFJBQ0VQT0lOVFMpCiBzdGF0aWMgdm9pZCBycGNfdGFza19zZXRfZGVidWdpbmZvKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKIAlzdGF0aWMgYXRvbWljX3QgcnBjX3BpZDsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3RhdHMuYyBiL25ldC9zdW5ycGMvc3RhdHMuYwppbmRleCA1NDUzMDQ5Li45NzExYTE1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N0YXRzLmMKKysrIGIvbmV0L3N1bnJwYy9zdGF0cy5jCkBAIC0xMTYsNyArMTE2LDE1IEBACiAgKi8KIHN0cnVjdCBycGNfaW9zdGF0cyAqcnBjX2FsbG9jX2lvc3RhdHMoc3RydWN0IHJwY19jbG50ICpjbG50KQogewotCXJldHVybiBrY2FsbG9jKGNsbnQtPmNsX21heHByb2MsIHNpemVvZihzdHJ1Y3QgcnBjX2lvc3RhdHMpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgcnBjX2lvc3RhdHMgKnN0YXRzOworCWludCBpOworCisJc3RhdHMgPSBrY2FsbG9jKGNsbnQtPmNsX21heHByb2MsIHNpemVvZigqc3RhdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNsbnQtPmNsX21heHByb2M7IGkrKykKKwkJCXNwaW5fbG9ja19pbml0KCZzdGF0c1tpXS5vbV9sb2NrKTsKKwl9CisJcmV0dXJuIHN0YXRzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnBjX2FsbG9jX2lvc3RhdHMpOwogCkBAIC0xMzUsMjAgKzE0MywyMSBAQAogICogcnBjX2NvdW50X2lvc3RhdHMgLSB0YWxseSB1cCBwZXItdGFzayBzdGF0cwogICogQHRhc2s6IGNvbXBsZXRlZCBycGNfdGFzawogICogQHN0YXRzOiBhcnJheSBvZiBzdGF0IHN0cnVjdHVyZXMKLSAqCi0gKiBSZWxpZXMgb24gdGhlIGNhbGxlciBmb3Igc2VyaWFsaXphdGlvbi4KICAqLwogdm9pZCBycGNfY291bnRfaW9zdGF0cyhjb25zdCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBycGNfaW9zdGF0cyAqc3RhdHMpCiB7CiAJc3RydWN0IHJwY19ycXN0ICpyZXEgPSB0YXNrLT50a19ycXN0cDsKIAlzdHJ1Y3QgcnBjX2lvc3RhdHMgKm9wX21ldHJpY3M7Ci0Ja3RpbWVfdCBkZWx0YTsKKwlrdGltZV90IGRlbHRhLCBub3c7CiAKIAlpZiAoIXN0YXRzIHx8ICFyZXEpCiAJCXJldHVybjsKIAorCW5vdyA9IGt0aW1lX2dldCgpOwogCW9wX21ldHJpY3MgPSAmc3RhdHNbdGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX3N0YXRpZHhdOwogCisJc3Bpbl9sb2NrKCZvcF9tZXRyaWNzLT5vbV9sb2NrKTsKKwogCW9wX21ldHJpY3MtPm9tX29wcysrOwogCW9wX21ldHJpY3MtPm9tX250cmFucyArPSByZXEtPnJxX250cmFuczsKIAlvcF9tZXRyaWNzLT5vbV90aW1lb3V0cyArPSB0YXNrLT50a190aW1lb3V0czsKQEAgLTE2MSw4ICsxNzAsMTAgQEAKIAogCW9wX21ldHJpY3MtPm9tX3J0dCA9IGt0aW1lX2FkZChvcF9tZXRyaWNzLT5vbV9ydHQsIHJlcS0+cnFfcnR0KTsKIAotCWRlbHRhID0ga3RpbWVfc3ViKGt0aW1lX2dldCgpLCB0YXNrLT50a19zdGFydCk7CisJZGVsdGEgPSBrdGltZV9zdWIobm93LCB0YXNrLT50a19zdGFydCk7CiAJb3BfbWV0cmljcy0+b21fZXhlY3V0ZSA9IGt0aW1lX2FkZChvcF9tZXRyaWNzLT5vbV9leGVjdXRlLCBkZWx0YSk7CisKKwlzcGluX3VubG9jaygmb3BfbWV0cmljcy0+b21fbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGNfY291bnRfaW9zdGF0cyk7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYyBiL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYwppbmRleCBjZDMwMTIwLi5lMzdmYmVkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMKKysrIGIvbmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jCkBAIC05NywxMyArOTcsMjAgQEAKIAllcnIgPSByZWdpc3Rlcl9ycGNfcGlwZWZzKCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ0OwotI2lmZGVmIFJQQ19ERUJVRworCisJZXJyID0gc3VucnBjX2RlYnVnZnNfaW5pdCgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0NTsKKworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAlycGNfcmVnaXN0ZXJfc3lzY3RsKCk7CiAjZW5kaWYKIAlzdmNfaW5pdF94cHJ0X3NvY2soKTsJLyogc3ZjIHNvY2sgdHJhbnNwb3J0ICovCiAJaW5pdF9zb2NrZXRfeHBydCgpOwkvKiBjbG50IHNvY2sgdHJhbnNwb3J0ICovCiAJcmV0dXJuIDA7CiAKK291dDU6CisJdW5yZWdpc3Rlcl9ycGNfcGlwZWZzKCk7CiBvdXQ0OgogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmc3VucnBjX25ldF9vcHMpOwogb3V0MzoKQEAgLTEyMCwxMCArMTI3LDExIEBACiAJcnBjYXV0aF9yZW1vdmVfbW9kdWxlKCk7CiAJY2xlYW51cF9zb2NrZXRfeHBydCgpOwogCXN2Y19jbGVhbnVwX3hwcnRfc29jaygpOworCXN1bnJwY19kZWJ1Z2ZzX2V4aXQoKTsKIAl1bnJlZ2lzdGVyX3JwY19waXBlZnMoKTsKIAlycGNfZGVzdHJveV9tZW1wb29sKCk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZzdW5ycGNfbmV0X29wcyk7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCXJwY191bnJlZ2lzdGVyX3N5c2N0bCgpOwogI2VuZGlmCiAJcmN1X2JhcnJpZXIoKTsgLyogV2FpdCBmb3IgY29tcGxldGlvbiBvZiBjYWxsX3JjdSgpJ3MgKi8KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IGNhOGE3OTUuLjI3ODNmZDggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjLmMKKysrIGIvbmV0L3N1bnJwYy9zdmMuYwpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2JjX3hwcnQuaD4KIAorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zdW5ycGMuaD4KKwogI2RlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX1NWQ0RTUAogCiBzdGF0aWMgdm9pZCBzdmNfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCk7CkBAIC0xMDQwLDcgKzEwNDIsNyBAQAogLyoKICAqIGRwcmludGsgdGhlIGdpdmVuIGVycm9yIHdpdGggdGhlIGFkZHJlc3Mgb2YgdGhlIGNsaWVudCB0aGF0IGNhdXNlZCBpdC4KICAqLwotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIHN0YXRpYyBfX3ByaW50ZigyLCAzKQogdm9pZCBzdmNfcHJpbnRrKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewpAQCAtMTMxNCwyNCArMTMxNiwyNSBAQAogCXJxc3RwLT5ycV9yZXMudGFpbFswXS5pb3ZfYmFzZSA9IE5VTEw7CiAJcnFzdHAtPnJxX3Jlcy50YWlsWzBdLmlvdl9sZW4gPSAwOwogCi0JcnFzdHAtPnJxX3hpZCA9IHN2Y19nZXR1MzIoYXJndik7Ci0KIAlkaXIgID0gc3ZjX2dldG5sKGFyZ3YpOwogCWlmIChkaXIgIT0gMCkgewogCQkvKiBkaXJlY3Rpb24gIT0gQ0FMTCAqLwogCQlzdmNfcHJpbnRrKHJxc3RwLCAiYmFkIGRpcmVjdGlvbiAlZCwgZHJvcHBpbmcgcmVxdWVzdFxuIiwgZGlyKTsKIAkJc2Vydi0+c3Zfc3RhdHMtPnJwY2JhZGZtdCsrOwotCQlzdmNfZHJvcChycXN0cCk7Ci0JCXJldHVybiAwOworCQlnb3RvIG91dF9kcm9wOwogCX0KIAogCS8qIFJldHVybnMgMSBmb3Igc2VuZCwgMCBmb3IgZHJvcCAqLwotCWlmIChzdmNfcHJvY2Vzc19jb21tb24ocnFzdHAsIGFyZ3YsIHJlc3YpKQotCQlyZXR1cm4gc3ZjX3NlbmQocnFzdHApOwotCWVsc2UgewotCQlzdmNfZHJvcChycXN0cCk7Ci0JCXJldHVybiAwOworCWlmIChsaWtlbHkoc3ZjX3Byb2Nlc3NfY29tbW9uKHJxc3RwLCBhcmd2LCByZXN2KSkpIHsKKwkJaW50IHJldCA9IHN2Y19zZW5kKHJxc3RwKTsKKworCQl0cmFjZV9zdmNfcHJvY2VzcyhycXN0cCwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9CitvdXRfZHJvcDoKKwl0cmFjZV9zdmNfcHJvY2VzcyhycXN0cCwgMCk7CisJc3ZjX2Ryb3AocnFzdHApOworCXJldHVybiAwOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfU1VOUlBDX0JBQ0tDSEFOTkVMKQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCmluZGV4IGMxNzljYTIuLmJiYjNiMDQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYworKysgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3Zjc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94cHJ0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3N1bnJwYy5oPgogCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfU1ZDWFBSVAogCkBAIC03NzMsMzUgKzc3NCw0MyBAQAogCiAJZXJyID0gc3ZjX2FsbG9jX2FyZyhycXN0cCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKIAl0cnlfdG9fZnJlZXplKCk7CiAJY29uZF9yZXNjaGVkKCk7CisJZXJyID0gLUVJTlRSOwogCWlmIChzaWduYWxsZWQoKSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCXJldHVybiAtRUlOVFI7CisJCWdvdG8gb3V0OwogCiAJeHBydCA9IHN2Y19nZXRfbmV4dF94cHJ0KHJxc3RwLCB0aW1lb3V0KTsKLQlpZiAoSVNfRVJSKHhwcnQpKQotCQlyZXR1cm4gUFRSX0VSUih4cHJ0KTsKKwlpZiAoSVNfRVJSKHhwcnQpKSB7CisJCWVyciA9IFBUUl9FUlIoeHBydCk7CisJCWdvdG8gb3V0OworCX0KIAogCWxlbiA9IHN2Y19oYW5kbGVfeHBydChycXN0cCwgeHBydCk7CiAKIAkvKiBObyBkYXRhLCBpbmNvbXBsZXRlIChUQ1ApIHJlYWQsIG9yIGFjY2VwdCgpICovCisJZXJyID0gLUVBR0FJTjsKIAlpZiAobGVuIDw9IDApCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9yZWxlYXNlOwogCiAJY2xlYXJfYml0KFhQVF9PTEQsICZ4cHJ0LT54cHRfZmxhZ3MpOwogCiAJcnFzdHAtPnJxX3NlY3VyZSA9IHhwcnQtPnhwdF9vcHMtPnhwb19zZWN1cmVfcG9ydChycXN0cCk7CiAJcnFzdHAtPnJxX2NoYW5kbGUuZGVmZXIgPSBzdmNfZGVmZXI7CisJcnFzdHAtPnJxX3hpZCA9IHN2Y19nZXR1MzIoJnJxc3RwLT5ycV9hcmcuaGVhZFswXSk7CiAKIAlpZiAoc2Vydi0+c3Zfc3RhdHMpCiAJCXNlcnYtPnN2X3N0YXRzLT5uZXRjbnQrKzsKKwl0cmFjZV9zdmNfcmVjdihycXN0cCwgbGVuKTsKIAlyZXR1cm4gbGVuOwotb3V0Ogorb3V0X3JlbGVhc2U6CiAJcnFzdHAtPnJxX3Jlcy5sZW4gPSAwOwogCXN2Y194cHJ0X3JlbGVhc2UocnFzdHApOwotCXJldHVybiAtRUFHQUlOOworb3V0OgorCXRyYWNlX3N2Y19yZWN2KHJxc3RwLCBlcnIpOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzdmNfcmVjdik7CiAKQEAgLTgyMSwxMiArODMwLDEyIEBACiBpbnQgc3ZjX3NlbmQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIHsKIAlzdHJ1Y3Qgc3ZjX3hwcnQJKnhwcnQ7Ci0JaW50CQlsZW47CisJaW50CQlsZW4gPSAtRUZBVUxUOwogCXN0cnVjdCB4ZHJfYnVmCSp4YjsKIAogCXhwcnQgPSBycXN0cC0+cnFfeHBydDsKIAlpZiAoIXhwcnQpCi0JCXJldHVybiAtRUZBVUxUOworCQlnb3RvIG91dDsKIAogCS8qIHJlbGVhc2UgdGhlIHJlY2VpdmUgc2tiIGJlZm9yZSBzZW5kaW5nIHRoZSByZXBseSAqLwogCXJxc3RwLT5ycV94cHJ0LT54cHRfb3BzLT54cG9fcmVsZWFzZV9ycXN0KHJxc3RwKTsKQEAgLTg0OSw3ICs4NTgsOSBAQAogCXN2Y194cHJ0X3JlbGVhc2UocnFzdHApOwogCiAJaWYgKGxlbiA9PSAtRUNPTk5SRUZVU0VEIHx8IGxlbiA9PSAtRU5PVENPTk4gfHwgbGVuID09IC1FQUdBSU4pCi0JCXJldHVybiAwOworCQlsZW4gPSAwOworb3V0OgorCXRyYWNlX3N2Y19zZW5kKHJxc3RwLCBsZW4pOwogCXJldHVybiBsZW47CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3lzY3RsLmMgYi9uZXQvc3VucnBjL3N5c2N0bC5jCmluZGV4IGM5OWM1OGUuLjg4N2YwMTggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3lzY3RsLmMKKysrIGIvbmV0L3N1bnJwYy9zeXNjdGwuYwpAQCAtMzcsNyArMzcsNyBAQAogdW5zaWduZWQgaW50CW5sbV9kZWJ1ZzsKIEVYUE9SVF9TWU1CT0xfR1BMKG5sbV9kZWJ1Zyk7CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3VucnBjX3RhYmxlX2hlYWRlcjsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHN1bnJwY190YWJsZVtdOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0LmMgYi9uZXQvc3VucnBjL3hwcnQuYwppbmRleCA1NmU0ZTE1Li5lYmJlZmFkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnQuYworKysgYi9uZXQvc3VucnBjL3hwcnQuYwpAQCAtNDksMTMgKzQ5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL21ldHJpY3MuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvYmNfeHBydC5oPgogCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3N1bnJwYy5oPgorCiAjaW5jbHVkZSAic3VucnBjLmgiCiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXMKICAqLwogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19YUFJUCiAjZW5kaWYKIApAQCAtNzcyLDExICs3NzQsMTQgQEAKIAlzdHJ1Y3QgcnBjX3Jxc3QgKmVudHJ5OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnhwcnQtPnJlY3YsIHJxX2xpc3QpCi0JCWlmIChlbnRyeS0+cnFfeGlkID09IHhpZCkKKwkJaWYgKGVudHJ5LT5ycV94aWQgPT0geGlkKSB7CisJCQl0cmFjZV94cHJ0X2xvb2t1cF9ycXN0KHhwcnQsIHhpZCwgMCk7CiAJCQlyZXR1cm4gZW50cnk7CisJCX0KIAogCWRwcmludGsoIlJQQzogICAgICAgeHBydF9sb29rdXBfcnFzdCBkaWQgbm90IGZpbmQgeGlkICUwOHhcbiIsCiAJCQludG9obCh4aWQpKTsKKwl0cmFjZV94cHJ0X2xvb2t1cF9ycXN0KHhwcnQsIHhpZCwgLUVOT0VOVCk7CiAJeHBydC0+c3RhdC5iYWRfeGlkcysrOwogCXJldHVybiBOVUxMOwogfQpAQCAtODEwLDYgKzgxNSw3IEBACiAKIAlkcHJpbnRrKCJSUEM6ICU1dSB4aWQgJTA4eCBjb21wbGV0ZSAoJWQgYnl0ZXMgcmVjZWl2ZWQpXG4iLAogCQkJdGFzay0+dGtfcGlkLCBudG9obChyZXEtPnJxX3hpZCksIGNvcGllZCk7CisJdHJhY2VfeHBydF9jb21wbGV0ZV9ycXN0KHhwcnQsIHJlcS0+cnFfeGlkLCBjb3BpZWQpOwogCiAJeHBydC0+c3RhdC5yZWN2cysrOwogCXJlcS0+cnFfcnR0ID0ga3RpbWVfc3ViKGt0aW1lX2dldCgpLCByZXEtPnJxX3h0aW1lKTsKQEAgLTkyNiw2ICs5MzIsNyBAQAogCiAJcmVxLT5ycV94dGltZSA9IGt0aW1lX2dldCgpOwogCXN0YXR1cyA9IHhwcnQtPm9wcy0+c2VuZF9yZXF1ZXN0KHRhc2spOworCXRyYWNlX3hwcnRfdHJhbnNtaXQoeHBydCwgcmVxLT5ycV94aWQsIHN0YXR1cyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCXRhc2stPnRrX3N0YXR1cyA9IHN0YXR1czsKIAkJcmV0dXJuOwpAQCAtMTI5Niw2ICsxMzAzLDcgQEAKICAqLwogc3RydWN0IHJwY194cHJ0ICp4cHJ0X2NyZWF0ZV90cmFuc3BvcnQoc3RydWN0IHhwcnRfY3JlYXRlICphcmdzKQogeworCWludCBlcnI7CiAJc3RydWN0IHJwY194cHJ0CSp4cHJ0OwogCXN0cnVjdCB4cHJ0X2NsYXNzICp0OwogCkBAIC0xMzM2LDYgKzEzNDQsMTIgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCisJZXJyID0gcnBjX3hwcnRfZGVidWdmc19yZWdpc3Rlcih4cHJ0KTsKKwlpZiAoZXJyKSB7CisJCXhwcnRfZGVzdHJveSh4cHJ0KTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisKIAlkcHJpbnRrKCJSUEM6ICAgICAgIGNyZWF0ZWQgdHJhbnNwb3J0ICVwIHdpdGggJXUgc2xvdHNcbiIsIHhwcnQsCiAJCQl4cHJ0LT5tYXhfcmVxcyk7CiBvdXQ6CkBAIC0xMzUyLDYgKzEzNjYsNyBAQAogCWRwcmludGsoIlJQQzogICAgICAgZGVzdHJveWluZyB0cmFuc3BvcnQgJXBcbiIsIHhwcnQpOwogCWRlbF90aW1lcl9zeW5jKCZ4cHJ0LT50aW1lcik7CiAKKwlycGNfeHBydF9kZWJ1Z2ZzX3VucmVnaXN0ZXIoeHBydCk7CiAJcnBjX2Rlc3Ryb3lfd2FpdF9xdWV1ZSgmeHBydC0+YmluZGluZyk7CiAJcnBjX2Rlc3Ryb3lfd2FpdF9xdWV1ZSgmeHBydC0+cGVuZGluZyk7CiAJcnBjX2Rlc3Ryb3lfd2FpdF9xdWV1ZSgmeHBydC0+c2VuZGluZyk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMKaW5kZXggNjE2NmM5OC4uZGYwMWQxMiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYwpAQCAtNDksMTEgKzQ5LDExIEBACiAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX1RSQU5TCiAjZW5kaWYKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIHN0YXRpYyBjb25zdCBjaGFyIHRyYW5zZmVydHlwZXNbXVsxMl0gPSB7CiAJInB1cmUgaW5saW5lIiwJLyogbm8gY2h1bmtzICovCiAJIiByZWFkIGNodW5rIiwJLyogc29tZSBhcmd1bWVudCB2aWEgcmRtYSByZWFkICovCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYwppbmRleCA2YTQ2MTVkLi5iYmQ2MTU1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogI2luY2x1ZGUgInhwcnRfcmRtYS5oIgogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19UUkFOUwogI2VuZGlmCiAKQEAgLTczLDkgKzczLDkgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeHBydF9yZG1hX21heF9pbmxpbmVfd3JpdGUgPSBSUENSRE1BX0RFRl9JTkxJTkU7CiBzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9pbmxpbmVfd3JpdGVfcGFkZGluZzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeHBydF9yZG1hX21lbXJlZ19zdHJhdGVneSA9IFJQQ1JETUFfRlJNUjsKLSAgICAgICAgICAgICAgICBpbnQgeHBydF9yZG1hX3BhZF9vcHRpbWl6ZSA9IDA7CisJCWludCB4cHJ0X3JkbWFfcGFkX29wdGltaXplID0gMTsKIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAogc3RhdGljIHVuc2lnbmVkIGludCBtaW5fc2xvdF90YWJsZV9zaXplID0gUlBDUkRNQV9NSU5fU0xPVF9UQUJMRTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3Nsb3RfdGFibGVfc2l6ZSA9IFJQQ1JETUFfTUFYX1NMT1RfVEFCTEU7CkBAIC01OTksNyArNTk5LDcgQEAKIAogCWlmIChyZXEtPnJsX25pb3ZzID09IDApCiAJCXJjID0gcnBjcmRtYV9tYXJzaGFsX3JlcShycXN0KTsKLQllbHNlIGlmIChyX3hwcnQtPnJ4X2lhLnJpX21lbXJlZ19zdHJhdGVneSA9PSBSUENSRE1BX0ZSTVIpCisJZWxzZSBpZiAocl94cHJ0LT5yeF9pYS5yaV9tZW1yZWdfc3RyYXRlZ3kgIT0gUlBDUkRNQV9BTExQSFlTSUNBTCkKIAkJcmMgPSBycGNyZG1hX21hcnNoYWxfY2h1bmtzKHJxc3QsIDApOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbGVkX21hcnNoYWw7CkBAIC03MDUsNyArNzA1LDcgQEAKIAlpbnQgcmM7CiAKIAlkcHJpbnRrKCJSUENSRE1BIE1vZHVsZSBSZW1vdmVkLCBkZXJlZ2lzdGVyIFJQQyBSRE1BIHRyYW5zcG9ydFxuIik7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCWlmIChzdW5ycGNfdGFibGVfaGVhZGVyKSB7CiAJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN1bnJwY190YWJsZV9oZWFkZXIpOwogCQlzdW5ycGNfdGFibGVfaGVhZGVyID0gTlVMTDsKQEAgLTczNiw3ICs3MzYsNyBAQAogCWRwcmludGsoIlx0UGFkZGluZyAlZFxuXHRNZW1yZWcgJWRcbiIsCiAJCXhwcnRfcmRtYV9pbmxpbmVfd3JpdGVfcGFkZGluZywgeHBydF9yZG1hX21lbXJlZ19zdHJhdGVneSk7CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAJaWYgKCFzdW5ycGNfdGFibGVfaGVhZGVyKQogCQlzdW5ycGNfdGFibGVfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN1bnJwY190YWJsZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYyBiL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYwppbmRleCA2MWM0MTI5Li5jOThlNDA2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jCkBAIC01NywxMSArNTcsMTIgQEAKICAqIEdsb2JhbHMvTWFjcm9zCiAgKi8KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfVFJBTlMKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBycGNyZG1hX3Jlc2V0X2ZybXJzKHN0cnVjdCBycGNyZG1hX2lhICopOworc3RhdGljIHZvaWQgcnBjcmRtYV9yZXNldF9mbXJzKHN0cnVjdCBycGNyZG1hX2lhICopOwogCiAvKgogICogaW50ZXJuYWwgZnVuY3Rpb25zCkBAIC0xMDUsMTMgKzEwNiw1MSBAQAogCiBzdGF0aWMgREVDTEFSRV9UQVNLTEVUKHJwY3JkbWFfdGFza2xldF9nLCBycGNyZG1hX3J1bl90YXNrbGV0LCAwVUwpOwogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFzeW5jX2V2ZW50W10gPSB7CisJIkNRIGVycm9yIiwKKwkiUVAgZmF0YWwgZXJyb3IiLAorCSJRUCByZXF1ZXN0IGVycm9yIiwKKwkiUVAgYWNjZXNzIGVycm9yIiwKKwkiY29tbXVuaWNhdGlvbiBlc3RhYmxpc2hlZCIsCisJInNlbmQgcXVldWUgZHJhaW5lZCIsCisJInBhdGggbWlncmF0aW9uIHN1Y2Nlc3NmdWwiLAorCSJwYXRoIG1pZyBlcnJvciIsCisJImRldmljZSBmYXRhbCBlcnJvciIsCisJInBvcnQgYWN0aXZlIiwKKwkicG9ydCBlcnJvciIsCisJIkxJRCBjaGFuZ2UiLAorCSJQX2tleSBjaGFuZ2UiLAorCSJTTSBjaGFuZ2UiLAorCSJTUlEgZXJyb3IiLAorCSJTUlEgbGltaXQgcmVhY2hlZCIsCisJImxhc3QgV1FFIHJlYWNoZWQiLAorCSJjbGllbnQgcmVyZWdpc3RlciIsCisJIkdJRCBjaGFuZ2UiLAorfTsKKworI2RlZmluZSBBU1lOQ19NU0coc3RhdHVzKQkJCQkJXAorCSgoc3RhdHVzKSA8IEFSUkFZX1NJWkUoYXN5bmNfZXZlbnQpID8JCQlcCisJCWFzeW5jX2V2ZW50WyhzdGF0dXMpXSA6ICJ1bmtub3duIGFzeW5jIGVycm9yIikKKworc3RhdGljIHZvaWQKK3JwY3JkbWFfc2NoZWR1bGVfdGFza2xldChzdHJ1Y3QgbGlzdF9oZWFkICpzY2hlZF9saXN0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnBjcmRtYV90a19sb2NrX2csIGZsYWdzKTsKKwlsaXN0X3NwbGljZV90YWlsKHNjaGVkX2xpc3QsICZycGNyZG1hX3Rhc2tsZXRzX2cpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwY3JkbWFfdGtfbG9ja19nLCBmbGFncyk7CisJdGFza2xldF9zY2hlZHVsZSgmcnBjcmRtYV90YXNrbGV0X2cpOworfQorCiBzdGF0aWMgdm9pZAogcnBjcmRtYV9xcF9hc3luY19lcnJvcl91cGNhbGwoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgcnBjcmRtYV9lcCAqZXAgPSBjb250ZXh0OwogCi0JZHByaW50aygiUlBDOiAgICAgICAlczogUVAgZXJyb3IgJVggb24gZGV2aWNlICVzIGVwICVwXG4iLAotCQlfX2Z1bmNfXywgZXZlbnQtPmV2ZW50LCBldmVudC0+ZGV2aWNlLT5uYW1lLCBjb250ZXh0KTsKKwlwcl9lcnIoIlJQQzogICAgICAgJXM6ICVzIG9uIGRldmljZSAlcyBlcCAlcFxuIiwKKwkgICAgICAgX19mdW5jX18sIEFTWU5DX01TRyhldmVudC0+ZXZlbnQpLAorCQlldmVudC0+ZGV2aWNlLT5uYW1lLCBjb250ZXh0KTsKIAlpZiAoZXAtPnJlcF9jb25uZWN0ZWQgPT0gMSkgewogCQllcC0+cmVwX2Nvbm5lY3RlZCA9IC1FSU87CiAJCWVwLT5yZXBfZnVuYyhlcCk7CkBAIC0xMjQsOCArMTYzLDkgQEAKIHsKIAlzdHJ1Y3QgcnBjcmRtYV9lcCAqZXAgPSBjb250ZXh0OwogCi0JZHByaW50aygiUlBDOiAgICAgICAlczogQ1EgZXJyb3IgJVggb24gZGV2aWNlICVzIGVwICVwXG4iLAotCQlfX2Z1bmNfXywgZXZlbnQtPmV2ZW50LCBldmVudC0+ZGV2aWNlLT5uYW1lLCBjb250ZXh0KTsKKwlwcl9lcnIoIlJQQzogICAgICAgJXM6ICVzIG9uIGRldmljZSAlcyBlcCAlcFxuIiwKKwkgICAgICAgX19mdW5jX18sIEFTWU5DX01TRyhldmVudC0+ZXZlbnQpLAorCQlldmVudC0+ZGV2aWNlLT5uYW1lLCBjb250ZXh0KTsKIAlpZiAoZXAtPnJlcF9jb25uZWN0ZWQgPT0gMSkgewogCQllcC0+cmVwX2Nvbm5lY3RlZCA9IC1FSU87CiAJCWVwLT5yZXBfZnVuYyhlcCk7CkBAIC0yNDMsNyArMjgzLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVkX2xpc3Q7CiAJc3RydWN0IGliX3djICp3Y3M7CiAJaW50IGJ1ZGdldCwgY291bnQsIHJjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlJTklUX0xJU1RfSEVBRCgmc2NoZWRfbGlzdCk7CiAJYnVkZ2V0ID0gUlBDUkRNQV9XQ19CVURHRVQgLyBSUENSRE1BX1BPTExTSVpFOwpAQCAtMjYxLDEwICszMDAsNyBAQAogCXJjID0gMDsKIAogb3V0X3NjaGVkdWxlOgotCXNwaW5fbG9ja19pcnFzYXZlKCZycGNyZG1hX3RrX2xvY2tfZywgZmxhZ3MpOwotCWxpc3Rfc3BsaWNlX3RhaWwoJnNjaGVkX2xpc3QsICZycGNyZG1hX3Rhc2tsZXRzX2cpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwY3JkbWFfdGtfbG9ja19nLCBmbGFncyk7Ci0JdGFza2xldF9zY2hlZHVsZSgmcnBjcmRtYV90YXNrbGV0X2cpOworCXJwY3JkbWFfc2NoZWR1bGVfdGFza2xldCgmc2NoZWRfbGlzdCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zMDksMTEgKzM0NSwxOCBAQAogc3RhdGljIHZvaWQKIHJwY3JkbWFfZmx1c2hfY3FzKHN0cnVjdCBycGNyZG1hX2VwICplcCkKIHsKLQlycGNyZG1hX3JlY3ZjcV91cGNhbGwoZXAtPnJlcF9hdHRyLnJlY3ZfY3EsIGVwKTsKLQlycGNyZG1hX3NlbmRjcV91cGNhbGwoZXAtPnJlcF9hdHRyLnNlbmRfY3EsIGVwKTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJTElTVF9IRUFEKHNjaGVkX2xpc3QpOworCisJd2hpbGUgKGliX3BvbGxfY3EoZXAtPnJlcF9hdHRyLnJlY3ZfY3EsIDEsICZ3YykgPiAwKQorCQlycGNyZG1hX3JlY3ZjcV9wcm9jZXNzX3djKCZ3YywgJnNjaGVkX2xpc3QpOworCWlmICghbGlzdF9lbXB0eSgmc2NoZWRfbGlzdCkpCisJCXJwY3JkbWFfc2NoZWR1bGVfdGFza2xldCgmc2NoZWRfbGlzdCk7CisJd2hpbGUgKGliX3BvbGxfY3EoZXAtPnJlcF9hdHRyLnNlbmRfY3EsIDEsICZ3YykgPiAwKQorCQlycGNyZG1hX3NlbmRjcV9wcm9jZXNzX3djKCZ3Yyk7CiB9CiAKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNvbm5bXSA9IHsKIAkiYWRkcmVzcyByZXNvbHZlZCIsCiAJImFkZHJlc3MgZXJyb3IiLApAQCAtMzQ0LDcgKzM4Nyw3IEBACiAJc3RydWN0IHJwY3JkbWFfeHBydCAqeHBydCA9IGlkLT5jb250ZXh0OwogCXN0cnVjdCBycGNyZG1hX2lhICppYSA9ICZ4cHJ0LT5yeF9pYTsKIAlzdHJ1Y3QgcnBjcmRtYV9lcCAqZXAgPSAmeHBydC0+cnhfZXA7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCXN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmVwLT5yZXBfcmVtb3RlX2FkZHI7CiAjZW5kaWYKIAlzdHJ1Y3QgaWJfcXBfYXR0ciBhdHRyOwpAQCAtNDA4LDcgKzQ1MSw3IEBACiAJCWJyZWFrOwogCX0KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAlpZiAoY29ubnN0YXRlID09IDEpIHsKIAkJaW50IGlyZCA9IGF0dHIubWF4X2Rlc3RfcmRfYXRvbWljOwogCQlpbnQgdGlyZCA9IGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzOwpAQCAtNzMzLDcgKzc3Niw5IEBACiAKIAkvKiBzZXQgdHJpZ2dlciBmb3IgcmVxdWVzdGluZyBzZW5kIGNvbXBsZXRpb24gKi8KIAllcC0+cmVwX2NxaW5pdCA9IGVwLT5yZXBfYXR0ci5jYXAubWF4X3NlbmRfd3IvMiAtIDE7Ci0JaWYgKGVwLT5yZXBfY3Fpbml0IDw9IDIpCisJaWYgKGVwLT5yZXBfY3Fpbml0ID4gUlBDUkRNQV9NQVhfVU5TSUdOQUxFRF9TRU5EUykKKwkJZXAtPnJlcF9jcWluaXQgPSBSUENSRE1BX01BWF9VTlNJR05BTEVEX1NFTkRTOworCWVsc2UgaWYgKGVwLT5yZXBfY3Fpbml0IDw9IDIpCiAJCWVwLT5yZXBfY3Fpbml0ID0gMDsKIAlJTklUX0NRQ09VTlQoZXApOwogCWVwLT5yZXBfaWEgPSBpYTsKQEAgLTg2Niw4ICs5MTEsMTkgQEAKIAkJcnBjcmRtYV9lcF9kaXNjb25uZWN0KGVwLCBpYSk7CiAJCXJwY3JkbWFfZmx1c2hfY3FzKGVwKTsKIAotCQlpZiAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSA9PSBSUENSRE1BX0ZSTVIpCisJCXN3aXRjaCAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSkgeworCQljYXNlIFJQQ1JETUFfRlJNUjoKIAkJCXJwY3JkbWFfcmVzZXRfZnJtcnMoaWEpOworCQkJYnJlYWs7CisJCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKKwkJCXJwY3JkbWFfcmVzZXRfZm1ycyhpYSk7CisJCQlicmVhazsKKwkJY2FzZSBSUENSRE1BX0FMTFBIWVNJQ0FMOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyYyA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQogCiAJCXhwcnQgPSBjb250YWluZXJfb2YoaWEsIHN0cnVjdCBycGNyZG1hX3hwcnQsIHJ4X2lhKTsKIAkJaWQgPSBycGNyZG1hX2NyZWF0ZV9pZCh4cHJ0LCBpYSwKQEAgLTEyODcsNiArMTM0MywzNCBAQAogCWtmcmVlKGJ1Zi0+cmJfcG9vbCk7CiB9CiAKKy8qIEFmdGVyIGEgZGlzY29ubmVjdCwgdW5tYXAgYWxsIEZNUnMuCisgKgorICogVGhpcyBpcyBpbnZva2VkIG9ubHkgaW4gdGhlIHRyYW5zcG9ydCBjb25uZWN0IHdvcmtlciBpbiBvcmRlcgorICogdG8gc2VyaWFsaXplIHdpdGggcnBjcmRtYV9yZWdpc3Rlcl9mbXJfZXh0ZXJuYWwoKS4KKyAqLworc3RhdGljIHZvaWQKK3JwY3JkbWFfcmVzZXRfZm1ycyhzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEpCit7CisJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0ID0KKwkJCQljb250YWluZXJfb2YoaWEsIHN0cnVjdCBycGNyZG1hX3hwcnQsIHJ4X2lhKTsKKwlzdHJ1Y3QgcnBjcmRtYV9idWZmZXIgKmJ1ZiA9ICZyX3hwcnQtPnJ4X2J1ZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IHJwY3JkbWFfbXcgKnI7CisJTElTVF9IRUFEKGwpOworCWludCByYzsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmYnVmLT5yYl9hbGwpIHsKKwkJciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgcnBjcmRtYV9tdywgbXdfYWxsKTsKKworCQlJTklUX0xJU1RfSEVBRCgmbCk7CisJCWxpc3RfYWRkKCZyLT5yLmZtci0+bGlzdCwgJmwpOworCQlyYyA9IGliX3VubWFwX2ZtcigmbCk7CisJCWlmIChyYykKKwkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGliX3VubWFwX2ZtciBmYWlsZWQgJWlcbiIsCisJCQkJX19mdW5jX18sIHJjKTsKKwl9Cit9CisKIC8qIEFmdGVyIGEgZGlzY29ubmVjdCwgYSBmbHVzaGVkIEZBU1RfUkVHX01SIGNhbiBsZWF2ZSBhbiBGUk1SIGluCiAgKiBhbiB1bnVzYWJsZSBzdGF0ZS4gRmluZCBGUk1ScyBpbiB0aGlzIHN0YXRlIGFuZCBkZXJlZyAvIHJlZwogICogZWFjaC4gIEZSTVJzIHRoYXQgYXJlIFZBTElEIGFuZCBhdHRhY2hlZCB0byBhbiBycGNyZG1hX3JlcSBhcmUKQEAgLTE5MTgsMTAgKzIwMDIsMTAgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlPOwogCX0KIAlpZiAocmMpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIHJjOwogCiAJcmV0dXJuIG5zZWdzOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS94cHJ0X3JkbWEuaCBiL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmgKaW5kZXggYWM3ZmM5YS4uYjc5OTA0MSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS94cHJ0X3JkbWEuaAorKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3hwcnRfcmRtYS5oCkBAIC05Nyw2ICs5NywxMiBAQAogCXN0cnVjdCBpYl93YwkJcmVwX3JlY3Zfd2NzW1JQQ1JETUFfUE9MTFNJWkVdOwogfTsKIAorLyoKKyAqIEZvcmNlIGEgc2lnbmFsZWQgU0VORCBXb3JrIFJlcXVlc3QgZXZlcnkgc28gb2Z0ZW4sCisgKiBpbiBjYXNlIHRoZSBwcm92aWRlciBuZWVkcyB0byBkbyBzb21lIGhvdXNla2VlcGluZy4KKyAqLworI2RlZmluZSBSUENSRE1BX01BWF9VTlNJR05BTEVEX1NFTkRTCSgzMikKKwogI2RlZmluZSBJTklUX0NRQ09VTlQoZXApIGF0b21pY19zZXQoJihlcCktPnJlcF9jcWNvdW50LCAoZXApLT5yZXBfY3Fpbml0KQogI2RlZmluZSBERUNSX0NRQ09VTlQoZXApIGF0b21pY19zdWJfcmV0dXJuKDEsICYoZXApLT5yZXBfY3Fjb3VudCkKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDNiMzA1YWIuLjg3Y2U3ZTggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAqIHNvbWVvbmUgZWxzZSdzIGZpbGUgbmFtZXMhCiAgKi8KIAotI2lmZGVmIFJQQ19ERUJVRworI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKIAogc3RhdGljIHVuc2lnbmVkIGludCBtaW5fc2xvdF90YWJsZV9zaXplID0gUlBDX01JTl9TTE9UX1RBQkxFOwogc3RhdGljIHVuc2lnbmVkIGludCBtYXhfc2xvdF90YWJsZV9zaXplID0gUlBDX01BWF9TTE9UX1RBQkxFOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAgKi8KICNkZWZpbmUgWFNfSURMRV9ESVNDX1RPCQkoNVUgKiA2MCAqIEhaKQogCi0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogIyB1bmRlZiAgUlBDX0RFQlVHX0RBVEEKICMgZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfVFJBTlMKICNlbmRpZgpAQCAtMjE2LDY1ICsyMTYsNiBAQAogfQogI2VuZGlmCiAKLXN0cnVjdCBzb2NrX3hwcnQgewotCXN0cnVjdCBycGNfeHBydAkJeHBydDsKLQotCS8qCi0JICogTmV0d29yayBsYXllcgotCSAqLwotCXN0cnVjdCBzb2NrZXQgKgkJc29jazsKLQlzdHJ1Y3Qgc29jayAqCQlpbmV0OwotCi0JLyoKLQkgKiBTdGF0ZSBvZiBUQ1AgcmVwbHkgcmVjZWl2ZQotCSAqLwotCV9fYmUzMgkJCXRjcF9mcmFnaGRyLAotCQkJCXRjcF94aWQsCi0JCQkJdGNwX2NhbGxkaXI7Ci0KLQl1MzIJCQl0Y3Bfb2Zmc2V0LAotCQkJCXRjcF9yZWNsZW47Ci0KLQl1bnNpZ25lZCBsb25nCQl0Y3BfY29waWVkLAotCQkJCXRjcF9mbGFnczsKLQotCS8qCi0JICogQ29ubmVjdGlvbiBvZiB0cmFuc3BvcnRzCi0JICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yawljb25uZWN0X3dvcmtlcjsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQlzcmNhZGRyOwotCXVuc2lnbmVkIHNob3J0CQlzcmNwb3J0OwotCi0JLyoKLQkgKiBVRFAgc29ja2V0IGJ1ZmZlciBzaXplIHBhcmFtZXRlcnMKLQkgKi8KLQlzaXplX3QJCQlyY3ZzaXplLAotCQkJCXNuZHNpemU7Ci0KLQkvKgotCSAqIFNhdmVkIHNvY2tldCBjYWxsYmFjayBhZGRyZXNzZXMKLQkgKi8KLQl2b2lkCQkJKCpvbGRfZGF0YV9yZWFkeSkoc3RydWN0IHNvY2sgKik7Ci0Jdm9pZAkJCSgqb2xkX3N0YXRlX2NoYW5nZSkoc3RydWN0IHNvY2sgKik7Ci0Jdm9pZAkJCSgqb2xkX3dyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqKTsKLQl2b2lkCQkJKCpvbGRfZXJyb3JfcmVwb3J0KShzdHJ1Y3Qgc29jayAqKTsKLX07Ci0KLS8qCi0gKiBUQ1AgcmVjZWl2ZSBzdGF0ZSBmbGFncwotICovCi0jZGVmaW5lIFRDUF9SQ1ZfTEFTVF9GUkFHCSgxVUwgPDwgMCkKLSNkZWZpbmUgVENQX1JDVl9DT1BZX0ZSQUdIRFIJKDFVTCA8PCAxKQotI2RlZmluZSBUQ1BfUkNWX0NPUFlfWElECSgxVUwgPDwgMikKLSNkZWZpbmUgVENQX1JDVl9DT1BZX0RBVEEJKDFVTCA8PCAzKQotI2RlZmluZSBUQ1BfUkNWX1JFQURfQ0FMTERJUgkoMVVMIDw8IDQpCi0jZGVmaW5lIFRDUF9SQ1ZfQ09QWV9DQUxMRElSCSgxVUwgPDwgNSkKLQotLyoKLSAqIFRDUCBSUEMgZmxhZ3MKLSAqLwotI2RlZmluZSBUQ1BfUlBDX1JFUExZCQkoMVVMIDw8IDYpCi0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJwY194cHJ0ICp4cHJ0X2Zyb21fc29jayhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgcnBjX3hwcnQgKikgc2stPnNrX3VzZXJfZGF0YTsKQEAgLTE0MTUsNiArMTM1Niw3IEBACiAKIAlkcHJpbnRrKCJSUEM6ICAgICAgIHhzX3RjcF9kYXRhX3JlY3Ygc3RhcnRlZFxuIik7CiAJZG8geworCQl0cmFjZV94c190Y3BfZGF0YV9yZWN2KHRyYW5zcG9ydCk7CiAJCS8qIFJlYWQgaW4gYSBuZXcgZnJhZ21lbnQgbWFya2VyIGlmIG5lY2Vzc2FyeSAqLwogCQkvKiBDYW4gd2UgZXZlciByZWFsbHkgZXhwZWN0IHRvIGdldCBjb21wbGV0ZWx5IGVtcHR5IGZyYWdtZW50cz8gKi8KIAkJaWYgKHRyYW5zcG9ydC0+dGNwX2ZsYWdzICYgVENQX1JDVl9DT1BZX0ZSQUdIRFIpIHsKQEAgLTE0MzksNiArMTM4MSw3IEBACiAJCS8qIFNraXAgb3ZlciBhbnkgdHJhaWxpbmcgYnl0ZXMgb24gc2hvcnQgcmVhZHMgKi8KIAkJeHNfdGNwX3JlYWRfZGlzY2FyZCh0cmFuc3BvcnQsICZkZXNjKTsKIAl9IHdoaWxlIChkZXNjLmNvdW50KTsKKwl0cmFjZV94c190Y3BfZGF0YV9yZWN2KHRyYW5zcG9ydCk7CiAJZHByaW50aygiUlBDOiAgICAgICB4c190Y3BfZGF0YV9yZWN2IGRvbmVcbiIpOwogCXJldHVybiBsZW4gLSBkZXNjLmNvdW50OwogfQpAQCAtMTQ1NCwxMiArMTM5NywxNSBAQAogCXN0cnVjdCBycGNfeHBydCAqeHBydDsKIAlyZWFkX2Rlc2NyaXB0b3JfdCByZF9kZXNjOwogCWludCByZWFkOworCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOwogCiAJZHByaW50aygiUlBDOiAgICAgICB4c190Y3BfZGF0YV9yZWFkeS4uLlxuIik7CiAKIAlyZWFkX2xvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKLQlpZiAoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkKKwlpZiAoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkgeworCQlyZWFkID0gMDsKIAkJZ290byBvdXQ7CisJfQogCS8qIEFueSBkYXRhIG1lYW5zIHdlIGhhZCBhIHVzZWZ1bCBjb252ZXJzYXRpb24sIHNvCiAJICogdGhlIHdlIGRvbid0IG5lZWQgdG8gZGVsYXkgdGhlIG5leHQgcmVjb25uZWN0CiAJICovCkBAIC0xNDcxLDggKzE0MTcsMTEgQEAKIAlkbyB7CiAJCXJkX2Rlc2MuY291bnQgPSA2NTUzNjsKIAkJcmVhZCA9IHRjcF9yZWFkX3NvY2soc2ssICZyZF9kZXNjLCB4c190Y3BfZGF0YV9yZWN2KTsKKwkJaWYgKHJlYWQgPiAwKQorCQkJdG90YWwgKz0gcmVhZDsKIAl9IHdoaWxlIChyZWFkID4gMCk7CiBvdXQ6CisJdHJhY2VfeHNfdGNwX2RhdGFfcmVhZHkoeHBydCwgcmVhZCwgdG90YWwpOwogCXJlYWRfdW5sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKQEAgLTMwNDIsNyArMjk5MSw3IEBACiAgKi8KIGludCBpbml0X3NvY2tldF94cHJ0KHZvaWQpCiB7Ci0jaWZkZWYgUlBDX0RFQlVHCisjaWYgSVNfRU5BQkxFRChDT05GSUdfU1VOUlBDX0RFQlVHKQogCWlmICghc3VucnBjX3RhYmxlX2hlYWRlcikKIAkJc3VucnBjX3RhYmxlX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShzdW5ycGNfdGFibGUpOwogI2VuZGlmCkBAIC0zMDYxLDcgKzMwMTAsNyBAQAogICovCiB2b2lkIGNsZWFudXBfc29ja2V0X3hwcnQodm9pZCkKIHsKLSNpZmRlZiBSUENfREVCVUcKKyNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAJaWYgKHN1bnJwY190YWJsZV9oZWFkZXIpIHsKIAkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3VucnBjX3RhYmxlX2hlYWRlcik7CiAJCXN1bnJwY190YWJsZV9oZWFkZXIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZSBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKaW5kZXggNjVlN2IwOC4uNTM3NGIxYiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQorKysgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCkBAIC0xNzksNiArMTc5LDEyIEBACiAjICQoUSkkKE1BS0UpICQobW9kYnVpbHRpbik9ZGlyCiBtb2RidWlsdGluIDo9IC1mICQoc3JjdHJlZSkvc2NyaXB0cy9NYWtlZmlsZS5tb2RidWlsdGluIG9iagogCisjIyMKKyMgU2hvcnRoYW5kIGZvciAkKFEpJChNQUtFKSAtZiBzY3JpcHRzL01ha2VmaWxlLmR0Ymluc3Qgb2JqPQorIyBVc2FnZToKKyMgJChRKSQoTUFLRSkgJChkdGJpbnN0KT1kaXIKK2R0Ymluc3QgOj0gLWYgJChpZiAkKEtCVUlMRF9TUkMpLCQoc3JjdHJlZSkvKXNjcmlwdHMvTWFrZWZpbGUuZHRiaW5zdCBvYmoKKwogIyBQcmVmaXggLUkgd2l0aCAkKHNyY3RyZWUpIGlmIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoLgogIyBza2lwIGlmIC1JIGhhcyBubyBwYXJhbWV0ZXIKIGFkZHRyZWUgPSAkKGlmICQocGF0c3Vic3QgLUklLCUsJCgxKSksIFwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuZHRiaW5zdCBiL3NjcmlwdHMvTWFrZWZpbGUuZHRiaW5zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDllZDdhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5kdGJpbnN0CkBAIC0wLDAgKzEsNTEgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgSW5zdGFsbGluZyBkdGIgZmlsZXMKKyMKKyMgSW5zdGFsbHMgYWxsIGR0YiBmaWxlcyBsaXN0ZWQgaW4gJChkdGIteSkgZWl0aGVyIGluIHRoZQorIyBJTlNUQUxMX0RUQlNfUEFUSCBkaXJlY3Rvcnkgb3IgdGhlIGRlZmF1bHQgbG9jYXRpb246CisjCisjICAgJElOU1RBTExfUEFUSC9kdGJzLyRLRVJORUxSRUxFQVNFCisjCisjIFRyYXZlcnNlIHRocm91Z2ggc3ViZGlyZWN0b3JpZXMgbGlzdGVkIGluICQoZHRzLWRpcnMpLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzcmMgOj0gJChvYmopCisKK1BIT05ZIDo9IF9fZHRic19pbnN0YWxsCitfX2R0YnNfaW5zdGFsbDoKKworZXhwb3J0IGR0Ymluc3Qtcm9vdCA/PSAkKG9iaikKKworaW5jbHVkZSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKK2luY2x1ZGUgc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQoraW5jbHVkZSAkKHNyY3RyZWUpLyQob2JqKS9NYWtlZmlsZQorCitQSE9OWSArPSBfX2R0YnNfaW5zdGFsbF9wcmVwCitfX2R0YnNfaW5zdGFsbF9wcmVwOgoraWZlcSAoIiQoZHRiaW5zdC1yb290KSIsICIkKG9iaikiKQorCSQoUSlpZiBbIC1kICQoSU5TVEFMTF9EVEJTX1BBVEgpLm9sZCBdOyB0aGVuIHJtIC1yZiAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQ7IGZpCisJJChRKWlmIFsgLWQgJChJTlNUQUxMX0RUQlNfUEFUSCkgXTsgdGhlbiBtdiAkKElOU1RBTExfRFRCU19QQVRIKSAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQ7IGZpCisJJChRKW1rZGlyIC1wICQoSU5TVEFMTF9EVEJTX1BBVEgpCitlbmRpZgorCitkdGJpbnN0LWZpbGVzCTo9ICQoZHRiLXkpCitkdGJpbnN0LWRpcnMJOj0gJChkdHMtZGlycykKKworIyBIZWxwZXIgdGFyZ2V0cyBmb3IgSW5zdGFsbGluZyBEVEJzIGludG8gdGhlIGJvb3QgZGlyZWN0b3J5CitxdWlldF9jbWRfZHRiX2luc3RhbGwgPQlJTlNUQUxMICQ8CisgICAgICBjbWRfZHRiX2luc3RhbGwgPQlta2RpciAtcCAkKDIpOyBjcCAkPCAkKDIpCisKK2luc3RhbGwtZGlyID0gJChwYXRzdWJzdCAkKGR0Ymluc3Qtcm9vdCklLCQoSU5TVEFMTF9EVEJTX1BBVEgpJSwkKG9iaikpCisKKyQoZHRiaW5zdC1maWxlcykgJChkdGJpbnN0LWRpcnMpOiB8IF9fZHRic19pbnN0YWxsX3ByZXAKKworJChkdGJpbnN0LWZpbGVzKTogJS5kdGI6ICQob2JqKS8lLmR0YgorCSQoY2FsbCBjbWQsZHRiX2luc3RhbGwsJChpbnN0YWxsLWRpcikpCisKKyQoZHRiaW5zdC1kaXJzKToKKwkkKFEpJChNQUtFKSAkKGR0Ymluc3QpPSQob2JqKS8kQAorCitQSE9OWSArPSAkKGR0Ymluc3QtZmlsZXMpICQoZHRiaW5zdC1kaXJzKQorX19kdGJzX2luc3RhbGw6ICQoZHRiaW5zdC1maWxlcykgJChkdGJpbnN0LWRpcnMpCisKKy5QSE9OWTogJChQSE9OWSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggNTRiZTE5YS4uNTExNzU1MiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTI4MywxOCArMjgzLDYgQEAKIAogZHRjLXRtcCA9ICQoc3Vic3QgJChjb21tYSksXywkKGRvdC10YXJnZXQpLmR0cy50bXApCiAKLSMgSGVscGVyIHRhcmdldHMgZm9yIEluc3RhbGxpbmcgRFRCcyBpbnRvIHRoZSBib290IGRpcmVjdG9yeQotcXVpZXRfY21kX2R0Yl9pbnN0YWxsID0JSU5TVEFMTCAkPAotICAgICAgY21kX2R0Yl9pbnN0YWxsID0JY3AgJDwgJCgyKQotCi1fZHRiaW5zdF9wcmVfOgotCSQoUSlpZiBbIC1kICQoSU5TVEFMTF9EVEJTX1BBVEgpLm9sZCBdOyB0aGVuIHJtIC1yZiAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQ7IGZpCi0JJChRKWlmIFsgLWQgJChJTlNUQUxMX0RUQlNfUEFUSCkgXTsgdGhlbiBtdiAkKElOU1RBTExfRFRCU19QQVRIKSAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQ7IGZpCi0JJChRKW1rZGlyIC1wICQoSU5TVEFMTF9EVEJTX1BBVEgpCi0KLSUuZHRiX2R0Ymluc3RfOiAkKG9iaikvJS5kdGIgX2R0Ymluc3RfcHJlXwotCSQoY2FsbCBjbWQsZHRiX2luc3RhbGwsJChJTlNUQUxMX0RUQlNfUEFUSCkpCi0KICMgQnppcDIKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbCBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbAppbmRleCAzNzRhYmY0Li5mMGJiNmQ2IDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKKysrIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCkBAIC03LDEwICs3LDExIEBACiAKIHVzZSBzdHJpY3Q7CiB1c2UgUE9TSVg7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgQ3dkICdhYnNfcGF0aCc7CiAKIG15ICRQID0gJDA7Ci0kUCA9fiBzQCguKikvQEBnOwotbXkgJEQgPSAkMTsKK215ICREID0gZGlybmFtZShhYnNfcGF0aCgkUCkpOwogCiBteSAkViA9ICcwLjMyJzsKIApAQCAtNDM4LDI2ICs0MzksMjkgQEAKIAogIyBMb2FkIGNvbW1vbiBzcGVsbGluZyBtaXN0YWtlcyBhbmQgYnVpbGQgcmVndWxhciBleHByZXNzaW9uIGxpc3QuCiBteSAkbWlzc3BlbGxpbmdzOwotbXkgQHNwZWxsaW5nX2xpc3Q7CiBteSAlc3BlbGxpbmdfZml4Owotb3BlbihteSAkc3BlbGxpbmcsICc8JywgJHNwZWxsaW5nX2ZpbGUpCi0gICAgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAkc3BlbGxpbmdfZmlsZSBmb3IgcmVhZGluZzogJCFcbiI7Ci13aGlsZSAoPCRzcGVsbGluZz4pIHsKLQlteSAkbGluZSA9ICRfOwogCi0JJGxpbmUgPX4gcy9ccypcbj8kLy9nOwotCSRsaW5lID1+IHMvXlxzKi8vZzsKK2lmIChvcGVuKG15ICRzcGVsbGluZywgJzwnLCAkc3BlbGxpbmdfZmlsZSkpIHsKKwlteSBAc3BlbGxpbmdfbGlzdDsKKwl3aGlsZSAoPCRzcGVsbGluZz4pIHsKKwkJbXkgJGxpbmUgPSAkXzsKIAotCW5leHQgaWYgKCRsaW5lID1+IG0vXlxzKiMvKTsKLQluZXh0IGlmICgkbGluZSA9fiBtL15ccyokLyk7CisJCSRsaW5lID1+IHMvXHMqXG4/JC8vZzsKKwkJJGxpbmUgPX4gcy9eXHMqLy9nOwogCi0JbXkgKCRzdXNwZWN0LCAkZml4KSA9IHNwbGl0KC9cfFx8LywgJGxpbmUpOworCQluZXh0IGlmICgkbGluZSA9fiBtL15ccyojLyk7CisJCW5leHQgaWYgKCRsaW5lID1+IG0vXlxzKiQvKTsKIAotCXB1c2goQHNwZWxsaW5nX2xpc3QsICRzdXNwZWN0KTsKLQkkc3BlbGxpbmdfZml4eyRzdXNwZWN0fSA9ICRmaXg7CisJCW15ICgkc3VzcGVjdCwgJGZpeCkgPSBzcGxpdCgvXHxcfC8sICRsaW5lKTsKKworCQlwdXNoKEBzcGVsbGluZ19saXN0LCAkc3VzcGVjdCk7CisJCSRzcGVsbGluZ19maXh7JHN1c3BlY3R9ID0gJGZpeDsKKwl9CisJY2xvc2UoJHNwZWxsaW5nKTsKKwkkbWlzc3BlbGxpbmdzID0gam9pbigifCIsIEBzcGVsbGluZ19saXN0KTsKK30gZWxzZSB7CisJd2FybiAiTm8gdHlwb3Mgd2lsbCBiZSBmb3VuZCAtIGZpbGUgJyRzcGVsbGluZ19maWxlJzogJCFcbiI7CiB9Ci1jbG9zZSgkc3BlbGxpbmcpOwotJG1pc3NwZWxsaW5ncyA9IGpvaW4oInwiLCBAc3BlbGxpbmdfbGlzdCk7CiAKIHN1YiBidWlsZF90eXBlcyB7CiAJbXkgJG1vZHMgPSAiKD94OiAgXG4iIC4gam9pbigifFxuICAiLCBAbW9kaWZpZXJMaXN0KSAuICJcbikiOwpAQCAtOTQyLDcgKzk0Niw3IEBACiBzdWIgZ2V0X3F1b3RlZF9zdHJpbmcgewogCW15ICgkbGluZSwgJHJhd2xpbmUpID0gQF87CiAKLQlyZXR1cm4gIiIgaWYgKCRsaW5lICF+IG0vKFwiW1hdK1wiKS9nKTsKKwlyZXR1cm4gIiIgaWYgKCRsaW5lICF+IG0vKFwiW1hcdF0rXCIpL2cpOwogCXJldHVybiBzdWJzdHIoJHJhd2xpbmUsICQtWzBdLCAkK1swXSAtICQtWzBdKTsKIH0KIApAQCAtMTg0Myw2ICsxODQ3LDcgQEAKIAlteSAkbm9uX3V0ZjhfY2hhcnNldCA9IDA7CiAKIAlteSAkbGFzdF9ibGFua19saW5lID0gMDsKKwlteSAkbGFzdF9jb2FsZXNjZWRfc3RyaW5nX2xpbmVuciA9IC0xOwogCiAJb3VyIEByZXBvcnQgPSAoKTsKIAlvdXIgJGNudF9saW5lcyA9IDA7CkBAIC0yMDc4LDYgKzIwODMsMTIgQEAKIAkJCSRpbl9jb21taXRfbG9nID0gMDsKIAkJfQogCisjIENoZWNrIGlmIE1BSU5UQUlORVJTIGlzIGJlaW5nIHVwZGF0ZWQuICBJZiBzbywgdGhlcmUncyBwcm9iYWJseSBubyBuZWVkIHRvCisjIGVtaXQgdGhlICJkb2VzIE1BSU5UQUlORVJTIG5lZWQgdXBkYXRpbmc/IiBtZXNzYWdlIG9uIGZpbGUgYWRkL21vdmUvZGVsZXRlCisJCWlmICgkbGluZSA9fiAvXlxzKk1BSU5UQUlORVJTXHMqXHwvKSB7CisJCQkkcmVwb3J0ZWRfbWFpbnRhaW5lcl9maWxlID0gMTsKKwkJfQorCiAjIENoZWNrIHNpZ25hdHVyZSBzdHlsZXMKIAkJaWYgKCEkaW5faGVhZGVyX2xpbmVzICYmCiAJCSAgICAkbGluZSA9fiAvXihccyopKFthLXowLTlfLV0rYnk6fCRzaWduYXR1cmVfdGFncykoXHMqKSguKikvaSkgewpAQCAtMjI0Niw3ICsyMjU3LDcgQEAKIAkJfQogCiAjIENoZWNrIGZvciB2YXJpb3VzIHR5cG8gLyBzcGVsbGluZyBtaXN0YWtlcwotCQlpZiAoJGluX2NvbW1pdF9sb2cgfHwgJGxpbmUgPX4gL15cKy8pIHsKKwkJaWYgKGRlZmluZWQoJG1pc3NwZWxsaW5ncykgJiYgKCRpbl9jb21taXRfbG9nIHx8ICRsaW5lID1+IC9eXCsvKSkgewogCQkJd2hpbGUgKCRyYXdsaW5lID1+IC8oPzpefFteYS16QF0pKCRtaXNzcGVsbGluZ3MpKD86JHxbXmEtekBdKS9naSkgewogCQkJCW15ICR0eXBvID0gJDE7CiAJCQkJbXkgJHR5cG9fZml4ID0gJHNwZWxsaW5nX2ZpeHtsYygkdHlwbyl9OwpAQCAtMjQwMywzMyArMjQxNCw2IEBACiAJCQkgICAgICJsaW5lIG92ZXIgJG1heF9saW5lX2xlbmd0aCBjaGFyYWN0ZXJzXG4iIC4gJGhlcmVjdXJyKTsKIAkJfQogCi0jIENoZWNrIGZvciB1c2VyLXZpc2libGUgc3RyaW5ncyBicm9rZW4gYWNyb3NzIGxpbmVzLCB3aGljaCBicmVha3MgdGhlIGFiaWxpdHkKLSMgdG8gZ3JlcCBmb3IgdGhlIHN0cmluZy4gIE1ha2UgZXhjZXB0aW9ucyB3aGVuIHRoZSBwcmV2aW91cyBzdHJpbmcgZW5kcyBpbiBhCi0jIG5ld2xpbmUgKG11bHRpcGxlIGxpbmVzIGluIG9uZSBzdHJpbmcgY29uc3RhbnQpIG9yICdcdCcsICdccicsICc7Jywgb3IgJ3snCi0jIChjb21tb24gaW4gaW5saW5lIGFzc2VtYmx5KSBvciBpcyBhIG9jdGFsIFwxMjMgb3IgaGV4YWRlY2ltYWwgXHhhZiB2YWx1ZQotCQlpZiAoJGxpbmUgPX4gL15cK1xzKiIvICYmCi0JCSAgICAkcHJldmxpbmUgPX4gLyJccyokLyAmJgotCQkgICAgJHByZXZyYXdsaW5lICF+IC8oPzpcXCg/OltudHJdfFswLTddezEsM318eFswLTlhLWZBLUZdezEsMn0pfDtccyp8XHtccyopIlxzKiQvKSB7Ci0JCQlXQVJOKCJTUExJVF9TVFJJTkciLAotCQkJICAgICAicXVvdGVkIHN0cmluZyBzcGxpdCBhY3Jvc3MgbGluZXNcbiIgLiAkaGVyZXByZXYpOwotCQl9Ci0KLSMgY2hlY2sgZm9yIG1pc3NpbmcgYSBzcGFjZSBpbiBhIHN0cmluZyBjb25jYXRpbmF0aW9uCi0JCWlmICgkcHJldnJhd2xpbmUgPX4gL1teXFxdXHciJC8gJiYgJHJhd2xpbmUgPX4gL15cK1tcdCBdKyJcdy8pIHsKLQkJCVdBUk4oJ01JU1NJTkdfU1BBQ0UnLAotCQkJICAgICAiYnJlYWsgcXVvdGVkIHN0cmluZ3MgYXQgYSBzcGFjZSBjaGFyYWN0ZXJcbiIgLiAkaGVyZXByZXYpOwotCQl9Ci0KLSMgY2hlY2sgZm9yIHNwYWNlcyBiZWZvcmUgYSBxdW90ZWQgbmV3bGluZQotCQlpZiAoJHJhd2xpbmUgPX4gL14uKlwiLipcc1xcbi8pIHsKLQkJCWlmIChXQVJOKCJRVU9URURfV0hJVEVTUEFDRV9CRUZPUkVfTkVXTElORSIsCi0JCQkJICJ1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIGJlZm9yZSBhIHF1b3RlZCBuZXdsaW5lXG4iIC4gJGhlcmVjdXJyKSAmJgotCQkJICAgICRmaXgpIHsKLQkJCQkkZml4ZWRbJGZpeGxpbmVucl0gPX4gcy9eKFwrLipcIi4qKVxzK1xcbi8kMVxcbi87Ci0JCQl9Ci0KLQkJfQotCiAjIGNoZWNrIGZvciBhZGRpbmcgbGluZXMgd2l0aG91dCBhIG5ld2xpbmUuCiAJCWlmICgkbGluZSA9fiAvXlwrLyAmJiBkZWZpbmVkICRsaW5lc1skbGluZW5yXSAmJiAkbGluZXNbJGxpbmVucl0gPX4gL15cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlLykgewogCQkJV0FSTigiTUlTU0lOR19FT0ZfTkVXTElORSIsCkBAIC0yNTE1LDcgKzI0OTksOCBAQAogCQkJfQogCQl9CiAKLQkJaWYgKCRsaW5lID1+IC9eXCsuKlwoXHMqJFR5cGVccypcKVsgXHRdKyg/ISRBc3NpZ25tZW50fCRBcml0aG1ldGljfHspLykgeworCQlpZiAoJGxpbmUgPX4gL15cKy4qKFx3K1xzKik/XChccyokVHlwZVxzKlwpWyBcdF0rKD8hJEFzc2lnbm1lbnR8JEFyaXRobWV0aWN8Wyw7XCh7XFtcPFw+XSkvICYmCisJCSAgICAoIWRlZmluZWQoJDEpIHx8ICQxICF+IC9zaXplb2ZccyovKSkgewogCQkJaWYgKENISygiU1BBQ0lORyIsCiAJCQkJIk5vIHNwYWNlIGlzIG5lY2Vzc2FyeSBhZnRlciBhIGNhc3RcbiIgLiAkaGVyZWN1cnIpICYmCiAJCQkgICAgJGZpeCkgewpAQCAtMzU2MywxNCArMzU0OCwzMyBAQAogCQkJCQkJfQogCQkJCQl9CiAKLQkJCQkjICwgbXVzdCBoYXZlIGEgc3BhY2Ugb24gdGhlIHJpZ2h0LgorCQkJCSMgLCBtdXN0IG5vdCBoYXZlIGEgc3BhY2UgYmVmb3JlIGFuZCBtdXN0IGhhdmUgYSBzcGFjZSBvbiB0aGUgcmlnaHQuCiAJCQkJfSBlbHNpZiAoJG9wIGVxICcsJykgeworCQkJCQlteSAkcnRyaW1fYmVmb3JlID0gMDsKKwkJCQkJbXkgJHNwYWNlX2FmdGVyID0gMDsKKwkJCQkJaWYgKCRjdHggPX4gL1d4Li8pIHsKKwkJCQkJCWlmIChFUlJPUigiU1BBQ0lORyIsCisJCQkJCQkJICAic3BhY2UgcHJvaGliaXRlZCBiZWZvcmUgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cikpIHsKKwkJCQkJCQkkbGluZV9maXhlZCA9IDE7CisJCQkJCQkJJHJ0cmltX2JlZm9yZSA9IDE7CisJCQkJCQl9CisJCQkJCX0KIAkJCQkJaWYgKCRjdHggIX4gLy54W1dFQ10vICYmICRjYyAhfiAvXn0vKSB7CiAJCQkJCQlpZiAoRVJST1IoIlNQQUNJTkciLAogCQkJCQkJCSAgInNwYWNlIHJlcXVpcmVkIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpKSB7Ci0JCQkJCQkJJGdvb2QgPSAkZml4X2VsZW1lbnRzWyRuXSAuIHRyaW0oJGZpeF9lbGVtZW50c1skbiArIDFdKSAuICIgIjsKIAkJCQkJCQkkbGluZV9maXhlZCA9IDE7CiAJCQkJCQkJJGxhc3RfYWZ0ZXIgPSAkbjsKKwkJCQkJCQkkc3BhY2VfYWZ0ZXIgPSAxOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWlmICgkcnRyaW1fYmVmb3JlIHx8ICRzcGFjZV9hZnRlcikgeworCQkJCQkJaWYgKCRydHJpbV9iZWZvcmUpIHsKKwkJCQkJCQkkZ29vZCA9IHJ0cmltKCRmaXhfZWxlbWVudHNbJG5dKSAuIHRyaW0oJGZpeF9lbGVtZW50c1skbiArIDFdKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJJGdvb2QgPSAkZml4X2VsZW1lbnRzWyRuXSAuIHRyaW0oJGZpeF9lbGVtZW50c1skbiArIDFdKTsKKwkJCQkJCX0KKwkJCQkJCWlmICgkc3BhY2VfYWZ0ZXIpIHsKKwkJCQkJCQkkZ29vZCAuPSAiICI7CiAJCQkJCQl9CiAJCQkJCX0KIApAQCAtMzgxNCw5ICszODE4LDI3IEBACiAjIGllOiAmKGZvby0+YmFyKSBzaG91bGQgYmUgJmZvby0+YmFyIGFuZCAqKGZvby0+YmFyKSBzaG91bGQgYmUgKmZvby0+YmFyCiAKIAkJd2hpbGUgKCRsaW5lID1+IC8oPzpbXiZdJlxzKnxcKilcKFxzKigkSWRlbnRccyooPzokTWVtYmVyXHMqKSspXHMqXCkvZykgewotCQkJQ0hLKCJVTk5FQ0VTU0FSWV9QQVJFTlRIRVNFUyIsCi0JCQkgICAgIlVubmVjZXNzYXJ5IHBhcmVudGhlc2VzIGFyb3VuZCAkMVxuIiAuICRoZXJlY3Vycik7Ci0JCSAgICB9CisJCQlteSAkdmFyID0gJDE7CisJCQlpZiAoQ0hLKCJVTk5FQ0VTU0FSWV9QQVJFTlRIRVNFUyIsCisJCQkJIlVubmVjZXNzYXJ5IHBhcmVudGhlc2VzIGFyb3VuZCAkdmFyXG4iIC4gJGhlcmVjdXJyKSAmJgorCQkJICAgICRmaXgpIHsKKwkJCQkkZml4ZWRbJGZpeGxpbmVucl0gPX4gcy9cKFxzKlxRJHZhclxFXHMqXCkvJHZhci87CisJCQl9CisJCX0KKworIyBjaGVjayBmb3IgdW5uZWNlc3NhcnkgcGFyZW50aGVzZXMgYXJvdW5kIGZ1bmN0aW9uIHBvaW50ZXIgdXNlcworIyBpZTogKGZvby0+YmFyKSgpOyBzaG91bGQgYmUgZm9vLT5iYXIoKTsKKyMgYnV0IG5vdCAiaWYgKGZvby0+YmFyKSAoIiB0byBhdm9pZCBzb21lIGZhbHNlIHBvc2l0aXZlcworCQlpZiAoJGxpbmUgPX4gLyhcYmlmXHMqfCkoXChccyokSWRlbnRccyooPzokTWVtYmVyXHMqKStcKSlbIFx0XSpcKC8gJiYgJDEgIX4gL15pZi8pIHsKKwkJCW15ICR2YXIgPSAkMjsKKwkJCWlmIChDSEsoIlVOTkVDRVNTQVJZX1BBUkVOVEhFU0VTIiwKKwkJCQkiVW5uZWNlc3NhcnkgcGFyZW50aGVzZXMgYXJvdW5kIGZ1bmN0aW9uIHBvaW50ZXIgJHZhclxuIiAuICRoZXJlY3VycikgJiYKKwkJCSAgICAkZml4KSB7CisJCQkJbXkgJHZhcjIgPSBkZXBhcmVudGhlc2l6ZSgkdmFyKTsKKwkJCQkkdmFyMiA9fiBzL1xzLy9nOworCQkJCSRmaXhlZFskZml4bGluZW5yXSA9fiBzL1xRJHZhclxFLyR2YXIyLzsKKwkJCX0KKwkJfQogCiAjZ290byBsYWJlbHMgYXJlbid0IGluZGVudGVkLCBhbGxvdyBhIHNpbmdsZSBzcGFjZSBob3dldmVyCiAJCWlmICgkbGluZT1+L14uXHMrW0EtWmEtelxkX10rOig/IVswLTldKykvIGFuZApAQCAtNDA1Niw3ICs0MDc4LDkgQEAKICNJZ25vcmUgUGFnZTxmb28+IHZhcmlhbnRzCiAJCQkgICAgJHZhciAhfiAvXig/OkNsZWFyfFNldHxUZXN0Q2xlYXJ8VGVzdFNldHwpUGFnZVtBLVpdLyAmJgogI0lnbm9yZSBTSSBzdHlsZSB2YXJpYW50cyBsaWtlIG5TLCBtViBhbmQgZEIgKGllOiBtYXhfdVYsIHJlZ3VsYXRvcl9taW5fdUFfc2hvdykKLQkJCSAgICAkdmFyICF+IC9eKD86W2Etel9dKj8pXz9bYS16XVtBLVpdKD86X1thLXpfXSspPyQvKSB7CisJCQkgICAgJHZhciAhfiAvXig/OlthLXpfXSo/KV8/W2Etel1bQS1aXSg/Ol9bYS16X10rKT8kLyAmJgorI0lnbm9yZSBzb21lIHRocmVlIGNoYXJhY3RlciBTSSB1bml0cyBleHBsaWNpdGx5LCBsaWtlIE1pQiBhbmQgS0h6CisJCQkgICAgJHZhciAhfiAvXig/OlthLXpfXSo/KV8/KD86W0tNR1RdaUJ8W0tNR1RdP0h6KSg/Ol9bYS16X10rKT8kLykgewogCQkJCXdoaWxlICgkdmFyID1+IG17KCRJZGVudCl9ZykgewogCQkJCQlteSAkd29yZCA9ICQxOwogCQkJCQluZXh0IGlmICgkd29yZCAhfiAvW0EtWl1bYS16XXxbYS16XVtBLVpdLyk7CkBAIC00NDA4LDEyICs0NDMyLDg1IEBACiAJCQkgICAgICJVc2Ugb2Ygdm9sYXRpbGUgaXMgdXN1YWxseSB3cm9uZzogc2VlIERvY3VtZW50YXRpb24vdm9sYXRpbGUtY29uc2lkZXJlZC1oYXJtZnVsLnR4dFxuIiAuICRoZXJlY3Vycik7CiAJCX0KIAorIyBDaGVjayBmb3IgdXNlci12aXNpYmxlIHN0cmluZ3MgYnJva2VuIGFjcm9zcyBsaW5lcywgd2hpY2ggYnJlYWtzIHRoZSBhYmlsaXR5CisjIHRvIGdyZXAgZm9yIHRoZSBzdHJpbmcuICBNYWtlIGV4Y2VwdGlvbnMgd2hlbiB0aGUgcHJldmlvdXMgc3RyaW5nIGVuZHMgaW4gYQorIyBuZXdsaW5lIChtdWx0aXBsZSBsaW5lcyBpbiBvbmUgc3RyaW5nIGNvbnN0YW50KSBvciAnXHQnLCAnXHInLCAnOycsIG9yICd7JworIyAoY29tbW9uIGluIGlubGluZSBhc3NlbWJseSkgb3IgaXMgYSBvY3RhbCBcMTIzIG9yIGhleGFkZWNpbWFsIFx4YWYgdmFsdWUKKwkJaWYgKCRsaW5lID1+IC9eXCtccyoiW1hcdF0qIi8gJiYKKwkJICAgICRwcmV2bGluZSA9fiAvIlxzKiQvICYmCisJCSAgICAkcHJldnJhd2xpbmUgIX4gLyg/OlxcKD86W250cl18WzAtN117MSwzfXx4WzAtOWEtZkEtRl17MSwyfSl8O1xzKnxce1xzKikiXHMqJC8pIHsKKwkJCWlmIChXQVJOKCJTUExJVF9TVFJJTkciLAorCQkJCSAicXVvdGVkIHN0cmluZyBzcGxpdCBhY3Jvc3MgbGluZXNcbiIgLiAkaGVyZXByZXYpICYmCisJCQkJICAgICAkZml4ICYmCisJCQkJICAgICAkcHJldnJhd2xpbmUgPX4gL15cKy4qIlxzKiQvICYmCisJCQkJICAgICAkbGFzdF9jb2FsZXNjZWRfc3RyaW5nX2xpbmVuciAhPSAkbGluZW5yIC0gMSkgeworCQkJCW15ICRleHRyYWN0ZWRfc3RyaW5nID0gZ2V0X3F1b3RlZF9zdHJpbmcoJGxpbmUsICRyYXdsaW5lKTsKKwkJCQlteSAkY29tbWFfY2xvc2UgPSAiIjsKKwkJCQlpZiAoJHJhd2xpbmUgPX4gL1xRJGV4dHJhY3RlZF9zdHJpbmdcRShccypcKVxzKjtccyokfFxzKixccyopLykgeworCQkJCQkkY29tbWFfY2xvc2UgPSAkMTsKKwkJCQl9CisKKwkJCQlmaXhfZGVsZXRlX2xpbmUoJGZpeGxpbmVuciAtIDEsICRwcmV2cmF3bGluZSk7CisJCQkJZml4X2RlbGV0ZV9saW5lKCRmaXhsaW5lbnIsICRyYXdsaW5lKTsKKwkJCQlteSAkZml4ZWRsaW5lID0gJHByZXZyYXdsaW5lOworCQkJCSRmaXhlZGxpbmUgPX4gcy8iXHMqJC8vOworCQkJCSRmaXhlZGxpbmUgLj0gc3Vic3RyKCRleHRyYWN0ZWRfc3RyaW5nLCAxKSAuIHRyaW0oJGNvbW1hX2Nsb3NlKTsKKwkJCQlmaXhfaW5zZXJ0X2xpbmUoJGZpeGxpbmVuciAtIDEsICRmaXhlZGxpbmUpOworCQkJCSRmaXhlZGxpbmUgPSAkcmF3bGluZTsKKwkJCQkkZml4ZWRsaW5lID1+IHMvXFEkZXh0cmFjdGVkX3N0cmluZ1xFXFEkY29tbWFfY2xvc2VcRS8vOworCQkJCWlmICgkZml4ZWRsaW5lICF+IC9cK1xzKiQvKSB7CisJCQkJCWZpeF9pbnNlcnRfbGluZSgkZml4bGluZW5yLCAkZml4ZWRsaW5lKTsKKwkJCQl9CisJCQkJJGxhc3RfY29hbGVzY2VkX3N0cmluZ19saW5lbnIgPSAkbGluZW5yOworCQkJfQorCQl9CisKKyMgY2hlY2sgZm9yIG1pc3NpbmcgYSBzcGFjZSBpbiBhIHN0cmluZyBjb25jYXRlbmF0aW9uCisJCWlmICgkcHJldnJhd2xpbmUgPX4gL1teXFxdXHciJC8gJiYgJHJhd2xpbmUgPX4gL15cK1tcdCBdKyJcdy8pIHsKKwkJCVdBUk4oJ01JU1NJTkdfU1BBQ0UnLAorCQkJICAgICAiYnJlYWsgcXVvdGVkIHN0cmluZ3MgYXQgYSBzcGFjZSBjaGFyYWN0ZXJcbiIgLiAkaGVyZXByZXYpOworCQl9CisKKyMgY2hlY2sgZm9yIHNwYWNlcyBiZWZvcmUgYSBxdW90ZWQgbmV3bGluZQorCQlpZiAoJHJhd2xpbmUgPX4gL14uKlwiLipcc1xcbi8pIHsKKwkJCWlmIChXQVJOKCJRVU9URURfV0hJVEVTUEFDRV9CRUZPUkVfTkVXTElORSIsCisJCQkJICJ1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIGJlZm9yZSBhIHF1b3RlZCBuZXdsaW5lXG4iIC4gJGhlcmVjdXJyKSAmJgorCQkJICAgICRmaXgpIHsKKwkJCQkkZml4ZWRbJGZpeGxpbmVucl0gPX4gcy9eKFwrLipcIi4qKVxzK1xcbi8kMVxcbi87CisJCQl9CisKKwkJfQorCiAjIGNvbmNhdGVuYXRlZCBzdHJpbmcgd2l0aG91dCBzcGFjZXMgYmV0d2VlbiBlbGVtZW50cwogCQlpZiAoJGxpbmUgPX4gLyJYKyJbQS1aX10rLyB8fCAkbGluZSA9fiAvW0EtWl9dKyJYKyIvKSB7CiAJCQlDSEsoIkNPTkNBVEVOQVRFRF9TVFJJTkciLAogCQkJICAgICJDb25jYXRlbmF0ZWQgc3RyaW5ncyBzaG91bGQgdXNlIHNwYWNlcyBiZXR3ZWVuIGVsZW1lbnRzXG4iIC4gJGhlcmVjdXJyKTsKIAkJfQogCisjIHVuY29hbGVzY2VkIHN0cmluZyBmcmFnbWVudHMKKwkJaWYgKCRsaW5lID1+IC8iWCoiXHMqIi8pIHsKKwkJCVdBUk4oIlNUUklOR19GUkFHTUVOVFMiLAorCQkJICAgICAiQ29uc2VjdXRpdmUgc3RyaW5ncyBhcmUgZ2VuZXJhbGx5IGJldHRlciBhcyBhIHNpbmdsZSBzdHJpbmdcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yICVMe3UsZCxpfSBpbiBzdHJpbmdzCisJCW15ICRzdHJpbmc7CisJCXdoaWxlICgkbGluZSA9fiAvKD86XnwiKShbWFx0XSopKD86InwkKS9nKSB7CisJCQkkc3RyaW5nID0gc3Vic3RyKCRyYXdsaW5lLCAkLVsxXSwgJCtbMV0gLSAkLVsxXSk7CisJCQkkc3RyaW5nID1+IHMvJSUvX18vZzsKKwkJCWlmICgkc3RyaW5nID1+IC8oPzwhJSklTFt1ZGldLykgeworCQkJCVdBUk4oIlBSSU5URl9MIiwKKwkJCQkgICAgICJcJUxkLyVMdSBhcmUgbm90LXN0YW5kYXJkIEMsIHVzZSAlbGxkLyVsbHVcbiIgLiAkaGVyZWN1cnIpOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKworIyBjaGVjayBmb3IgbGluZSBjb250aW51YXRpb25zIGluIHF1b3RlZCBzdHJpbmdzIHdpdGggb2RkIGNvdW50cyBvZiAiCisJCWlmICgkcmF3bGluZSA9fiAvXFwkLyAmJiAkcmF3bGluZSA9fiB0ci8iLyIvICUgMikgeworCQkJV0FSTigiTElORV9DT05USU5VQVRJT05TIiwKKwkJCSAgICAgIkF2b2lkIGxpbmUgY29udGludWF0aW9ucyBpbiBxdW90ZWQgc3RyaW5nc1xuIiAuICRoZXJlY3Vycik7CisJCX0KKwogIyB3YXJuIGFib3V0ICNpZiAwCiAJCWlmICgkbGluZSA9fiAvXi5ccypcI1xzKmlmXHMrMFxiLykgewogCQkJQ0hLKCJSRURVTkRBTlRfQ09ERSIsCkBAIC00NDI2LDcgKzQ1MjMsNyBAQAogCQkJbXkgJGV4cHIgPSAnXHMqXChccyonIC4gcXVvdGVtZXRhKCQxKSAuICdccypcKVxzKjsnOwogCQkJaWYgKCRsaW5lID1+IC9cYihrZnJlZXx1c2JfZnJlZV91cmJ8ZGVidWdmc19yZW1vdmUoPzpfcmVjdXJzaXZlKT8pJGV4cHIvKSB7CiAJCQkJV0FSTignTkVFRExFU1NfSUYnLAotCQkJCSAgICAgIiQxKE5VTEwpIGlzIHNhZmUgdGhpcyBjaGVjayBpcyBwcm9iYWJseSBub3QgcmVxdWlyZWRcbiIgLiAkaGVyZXByZXYpOworCQkJCSAgICAgIiQxKE5VTEwpIGlzIHNhZmUgYW5kIHRoaXMgY2hlY2sgaXMgcHJvYmFibHkgbm90IHJlcXVpcmVkXG4iIC4gJGhlcmVwcmV2KTsKIAkJCX0KIAkJfQogCkBAIC00NDU4LDYgKzQ1NTUsMjggQEAKIAkJCX0KIAkJfQogCisjIGNoZWNrIGZvciBtYXNrIHRoZW4gcmlnaHQgc2hpZnQgd2l0aG91dCBhIHBhcmVudGhlc2VzCisJCWlmICgkXlYgJiYgJF5WIGdlIDUuMTAuMCAmJgorCQkgICAgJGxpbmUgPX4gLyRMdmFsT3JGdW5jXHMqXCZccyooJEx2YWxPckZ1bmMpXHMqPj4vICYmCisJCSAgICAkNCAhfiAvXlwmLykgeyAjICRMdmFsT3JGdW5jIG1heSBiZSAmZm9vLCBpZ25vcmUgaWYgc28KKwkJCVdBUk4oIk1BU0tfVEhFTl9TSElGVCIsCisJCQkgICAgICJQb3NzaWJsZSBwcmVjZWRlbmNlIGRlZmVjdCB3aXRoIG1hc2sgdGhlbiByaWdodCBzaGlmdCAtIG1heSBuZWVkIHBhcmVudGhlc2VzXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBwb2ludGVyIGNvbXBhcmlzb25zIHRvIE5VTEwKKwkJaWYgKCReViAmJiAkXlYgZ2UgNS4xMC4wKSB7CisJCQl3aGlsZSAoJGxpbmUgPX4gL1xiJEx2YWxPckZ1bmNccyooPT18XCE9KVxzKk5VTExcYi9nKSB7CisJCQkJbXkgJHZhbCA9ICQxOworCQkJCW15ICRlcXVhbCA9ICIhIjsKKwkJCQkkZXF1YWwgPSAiIiBpZiAoJDQgZXEgIiE9Iik7CisJCQkJaWYgKENISygiQ09NUEFSSVNPTl9UT19OVUxMIiwKKwkJCQkJIkNvbXBhcmlzb24gdG8gTlVMTCBjb3VsZCBiZSB3cml0dGVuIFwiJHtlcXVhbH0ke3ZhbH1cIlxuIiAuICRoZXJlY3VycikgJiYKKwkJCQkJICAgICRmaXgpIHsKKwkJCQkJJGZpeGVkWyRmaXhsaW5lbnJdID1+IHMvXGJcUSR2YWxcRVxzKig/Oj09fFwhPSlccypOVUxMXGIvJGVxdWFsJHZhbC87CisJCQkJfQorCQkJfQorCQl9CisKICMgY2hlY2sgZm9yIGJhZCBwbGFjZW1lbnQgb2Ygc2VjdGlvbiAkSW5pdEF0dHJpYnV0ZSAoZS5nLjogX19pbml0ZGF0YSkKIAkJaWYgKCRsaW5lID1+IC8oXGIkSW5pdEF0dHJpYnV0ZVxiKS8pIHsKIAkJCW15ICRhdHRyID0gJDE7CkBAIC00NjUyLDYgKzQ3NzEsMTUgQEAKIAkJCX0KIAkJfQogCisjIENoZWNrIGZvciBfX2F0dHJpYnV0ZV9fIHdlYWssIG9yIF9fd2VhayBkZWNsYXJhdGlvbnMgKG1heSBoYXZlIGxpbmsgaXNzdWVzKQorCQlpZiAoJF5WICYmICReViBnZSA1LjEwLjAgJiYKKwkJICAgICRsaW5lID1+IC8oPzokRGVjbGFyZXwkRGVjbGFyZU1pc29yZGVyZWQpXHMqJElkZW50XHMqJGJhbGFuY2VkX3BhcmVuc1xzKig/OiRBdHRyaWJ1dGUpP1xzKjsvICYmCisJCSAgICAoJGxpbmUgPX4gL1xiX19hdHRyaWJ1dGVfX1xzKlwoXHMqXCguKlxid2Vha1xiLyB8fAorCQkgICAgICRsaW5lID1+IC9cYl9fd2Vha1xiLykpIHsKKwkJCUVSUk9SKCJXRUFLX0RFQ0xBUkFUSU9OIiwKKwkJCSAgICAgICJVc2luZyB3ZWFrIGRlY2xhcmF0aW9ucyBjYW4gaGF2ZSB1bmludGVuZGVkIGxpbmsgZGVmZWN0c1xuIiAuICRoZXJlY3Vycik7CisJCX0KKwogIyBjaGVjayBmb3Igc2l6ZW9mKCYpCiAJCWlmICgkbGluZSA9fiAvXGJzaXplb2ZccypcKFxzKlwmLykgewogCQkJV0FSTigiU0laRU9GX0FERFJFU1MiLApAQCAtNDY2NywxMiArNDc5NSw2IEBACiAJCQl9CiAJCX0KIAotIyBjaGVjayBmb3IgbGluZSBjb250aW51YXRpb25zIGluIHF1b3RlZCBzdHJpbmdzIHdpdGggb2RkIGNvdW50cyBvZiAiCi0JCWlmICgkcmF3bGluZSA9fiAvXFwkLyAmJiAkcmF3bGluZSA9fiB0ci8iLyIvICUgMikgewotCQkJV0FSTigiTElORV9DT05USU5VQVRJT05TIiwKLQkJCSAgICAgIkF2b2lkIGxpbmUgY29udGludWF0aW9ucyBpbiBxdW90ZWQgc3RyaW5nc1xuIiAuICRoZXJlY3Vycik7Ci0JCX0KLQogIyBjaGVjayBmb3Igc3RydWN0IHNwaW5sb2NrIGRlY2xhcmF0aW9ucwogCQlpZiAoJGxpbmUgPX4gL14uXHMqXGJzdHJ1Y3RccytzcGlubG9ja1xzK1x3K1xzKjsvKSB7CiAJCQlXQVJOKCJVU0VfU1BJTkxPQ0tfVCIsCkBAIC00OTA4LDYgKzUwMzAsMTcgQEAKIAkJCX0KIAkJfQogCisjIGNoZWNrIGZvciAjZGVmaW5lcyBsaWtlOiAxIDw8IDxkaWdpdD4gdGhhdCBjb3VsZCBiZSBCSVQoZGlnaXQpCisJCWlmICgkbGluZSA9fiAvI1xzKmRlZmluZVxzK1x3K1xzK1woP1xzKjFccyooW3VsVUxdKilccypcPFw8XHMqKD86XGQrfCRJZGVudClccypcKT8vKSB7CisJCQlteSAkdWxsID0gIiI7CisJCQkkdWxsID0gIl9VTEwiIGlmIChkZWZpbmVkKCQxKSAmJiAkMSA9fiAvbGwvaSk7CisJCQlpZiAoQ0hLKCJCSVRfTUFDUk8iLAorCQkJCSJQcmVmZXIgdXNpbmcgdGhlIEJJVCR1bGwgbWFjcm9cbiIgLiAkaGVyZWN1cnIpICYmCisJCQkgICAgJGZpeCkgeworCQkJCSRmaXhlZFskZml4bGluZW5yXSA9fiBzL1woP1xzKjFccypbdWxVTF0qXHMqPDxccyooXGQrfCRJZGVudClccypcKT8vQklUJHt1bGx9KCQxKS87CisJCQl9CisJCX0KKwogIyBjaGVjayBmb3IgY2FzZSAvIGRlZmF1bHQgc3RhdGVtZW50cyBub3QgcHJlY2VkZWQgYnkgYnJlYWsvZmFsbHRocm91Z2gvc3dpdGNoCiAJCWlmICgkbGluZSA9fiAvXi5ccyooPzpjYXNlXHMrKD86JElkZW50fCRDb25zdGFudClccyp8ZGVmYXVsdCk6LykgewogCQkJbXkgJGhhc19icmVhayA9IDA7CkBAIC01MDcxLDE4ICs1MjA0LDYgQEAKIAkJCSAgICAgICIjZGVmaW5lIG9mICckMScgaXMgd3JvbmcgLSB1c2UgS2NvbmZpZyB2YXJpYWJsZXMgb3Igc3RhbmRhcmQgZ3VhcmRzIGluc3RlYWRcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAKLSMgY2hlY2sgZm9yICVMe3UsZCxpfSBpbiBzdHJpbmdzCi0JCW15ICRzdHJpbmc7Ci0JCXdoaWxlICgkbGluZSA9fiAvKD86XnwiKShbWFx0XSopKD86InwkKS9nKSB7Ci0JCQkkc3RyaW5nID0gc3Vic3RyKCRyYXdsaW5lLCAkLVsxXSwgJCtbMV0gLSAkLVsxXSk7Ci0JCQkkc3RyaW5nID1+IHMvJSUvX18vZzsKLQkJCWlmICgkc3RyaW5nID1+IC8oPzwhJSklTFt1ZGldLykgewotCQkJCVdBUk4oIlBSSU5URl9MIiwKLQkJCQkgICAgICJcJUxkLyVMdSBhcmUgbm90LXN0YW5kYXJkIEMsIHVzZSAlbGxkLyVsbHVcbiIgLiAkaGVyZWN1cnIpOwotCQkJCWxhc3Q7Ci0JCQl9Ci0JCX0KLQogIyB3aGluZSBtaWdodGx5IGFib3V0IGluX2F0b21pYwogCQlpZiAoJGxpbmUgPX4gL1xiaW5fYXRvbWljXHMqXCgvKSB7CiAJCQlpZiAoJHJlYWxmaWxlID1+IG1AXmRyaXZlcnMvQCkgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rZXJuZWwtZG9jIGIvc2NyaXB0cy9rZXJuZWwtZG9jCmluZGV4IDcwYmVhOTQuLjk5MjJlNjYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMva2VybmVsLWRvYworKysgYi9zY3JpcHRzL2tlcm5lbC1kb2MKQEAgLTE3NTMsNyArMTc1Myw3IEBACiAJIyBzdHJpcCBrbWVtY2hlY2tfYml0ZmllbGRfe2JlZ2luLGVuZH0uKjsKIAkkbWVtYmVycyA9fiBzL2ttZW1jaGVja19iaXRmaWVsZF8uKj87Ly9nb3M7CiAJIyBzdHJpcCBhdHRyaWJ1dGVzCi0JJG1lbWJlcnMgPX4gcy9fX2FsaWduZWRccypcKC4rXCkvL2dvczsKKwkkbWVtYmVycyA9fiBzL19fYWxpZ25lZFxzKlwoW147XSpcKS8vZ29zOwogCiAJY3JlYXRlX3BhcmFtZXRlcmxpc3QoJG1lbWJlcnMsICc7JywgJGZpbGUpOwogCWNoZWNrX3NlY3Rpb25zKCRmaWxlLCAkZGVjbGFyYXRpb25fbmFtZSwgInN0cnVjdCIsICRzZWN0Y2hlY2ssICRzdHJ1Y3RfYWN0dWFsLCAkbmVzdGVkKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKaW5kZXggYmFiMDYxMS4uMjkxNWQ4NSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvY29tbW9uY2FwLmMKKysrIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCWlmIChicHJtLT5maWxlLT5mX3BhdGgubW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9TVUlEKQogCQlyZXR1cm4gMDsKIAotCWRlbnRyeSA9IGRnZXQoYnBybS0+ZmlsZS0+Zl9kZW50cnkpOworCWRlbnRyeSA9IGRnZXQoYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAKIAlyYyA9IGdldF92ZnNfY2Fwc19mcm9tX2Rpc2soZGVudHJ5LCAmdmNhcHMpOwogCWlmIChyYyA8IDApIHsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2FwaS5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMKaW5kZXggODY4ODU5Ny4uZjkyYmUxYiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogewogCWNvbnN0IGNoYXIgKmF1ZGl0X2NhdXNlID0gImZhaWxlZCI7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7Ci0JY29uc3QgY2hhciAqZmlsZW5hbWUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWU7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZTsKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgaW1hX2RpZ2VzdF9kYXRhIGhkcjsKQEAgLTIwNCw3ICsyMDQsNyBAQAogCX0gaGFzaDsKIAogCWlmICh4YXR0cl92YWx1ZSkKLQkJKnhhdHRyX2xlbiA9IGltYV9yZWFkX3hhdHRyKGZpbGUtPmZfZGVudHJ5LCB4YXR0cl92YWx1ZSk7CisJCSp4YXR0cl9sZW4gPSBpbWFfcmVhZF94YXR0cihmaWxlLT5mX3BhdGguZGVudHJ5LCB4YXR0cl92YWx1ZSk7CiAKIAlpZiAoIShpaW50LT5mbGFncyAmIElNQV9DT0xMRUNURUQpKSB7CiAJCXU2NCBpX3ZlcnNpb24gPSBmaWxlX2lub2RlKGZpbGUpLT5pX3ZlcnNpb247CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcHByYWlzZS5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBwcmFpc2UuYwppbmRleCA3YzhmNDFlLi5mZmZjZGIwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcHByYWlzZS5jCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2FwcHJhaXNlLmMKQEAgLTE4OSw3ICsxODksNyBAQAogewogCXN0YXRpYyBjb25zdCBjaGFyIG9wW10gPSAiYXBwcmFpc2VfZGF0YSI7CiAJY2hhciAqY2F1c2UgPSAidW5rbm93biI7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWVudW0gaW50ZWdyaXR5X3N0YXR1cyBzdGF0dXMgPSBJTlRFR1JJVFlfVU5LTk9XTjsKIAlpbnQgcmMgPSB4YXR0cl9sZW4sIGhhc2hfc3RhcnQgPSAwOwpAQCAtMjg5LDcgKzI4OSw3IEBACiAgKi8KIHZvaWQgaW1hX3VwZGF0ZV94YXR0cihzdHJ1Y3QgaW50ZWdyaXR5X2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJaW50IHJjID0gMDsKIAogCS8qIGRvIG5vdCBjb2xsZWN0IGFuZCB1cGRhdGUgaGFzaCBmb3IgZGlnaXRhbCBzaWduYXR1cmVzICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV90ZW1wbGF0ZV9saWIuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3RlbXBsYXRlX2xpYi5jCmluZGV4IDE1MDZmMDIuLmJjZmMzNmMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3RlbXBsYXRlX2xpYi5jCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3RlbXBsYXRlX2xpYi5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAl9CiAKIAlpZiAoZmlsZSkgewotCQljdXJfZmlsZW5hbWUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWU7CisJCWN1cl9maWxlbmFtZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lOwogCQljdXJfZmlsZW5hbWVfbGVuID0gc3RybGVuKGN1cl9maWxlbmFtZSk7CiAJfSBlbHNlCiAJCS8qCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmggYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKaW5kZXggYjg5NjBjNC4uMjAwZTM3OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCisrKyBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaApAQCAtMTE3LDYgKzExNyw3IEBACiAjZGVmaW5lIEtFWVJJTkdfU0VBUkNIX05PX1VQREFURV9USU1FCTB4MDAwNAkvKiBEb24ndCB1cGRhdGUgdGltZXMgKi8KICNkZWZpbmUgS0VZUklOR19TRUFSQ0hfTk9fQ0hFQ0tfUEVSTQkweDAwMDgJLyogRG9uJ3QgY2hlY2sgcGVybWlzc2lvbnMgKi8KICNkZWZpbmUgS0VZUklOR19TRUFSQ0hfREVURUNUX1RPT19ERUVQCTB4MDAxMAkvKiBHaXZlIGFuIGVycm9yIG9uIGV4Y2Vzc2l2ZSBkZXB0aCAqLworI2RlZmluZSBLRVlSSU5HX1NFQVJDSF9TS0lQX0VYUElSRUQJMHgwMDIwCS8qIElnbm9yZSBleHBpcmVkIGtleXMgKGludGVudGlvbiB0byByZXBsYWNlKSAqLwogCiAJaW50ICgqaXRlcmF0b3IpKGNvbnN0IHZvaWQgKm9iamVjdCwgdm9pZCAqaXRlcmF0b3JfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IGVmZjg4YTUuLjQ3NDNkNzEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAorI2RlZmluZSBLRVlfTUFYX0RFU0NfU0laRSA0MDk2CisKIHN0YXRpYyBpbnQga2V5X2dldF90eXBlX2Zyb21fdXNlcihjaGFyICp0eXBlLAogCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKl90eXBlLAogCQkJCSAgdW5zaWduZWQgbGVuKQpAQCAtNzgsNyArODAsNyBAQAogCiAJZGVzY3JpcHRpb24gPSBOVUxMOwogCWlmIChfZGVzY3JpcHRpb24pIHsKLQkJZGVzY3JpcHRpb24gPSBzdHJuZHVwX3VzZXIoX2Rlc2NyaXB0aW9uLCBQQUdFX1NJWkUpOworCQlkZXNjcmlwdGlvbiA9IHN0cm5kdXBfdXNlcihfZGVzY3JpcHRpb24sIEtFWV9NQVhfREVTQ19TSVpFKTsKIAkJaWYgKElTX0VSUihkZXNjcmlwdGlvbikpIHsKIAkJCXJldCA9IFBUUl9FUlIoZGVzY3JpcHRpb24pOwogCQkJZ290byBlcnJvcjsKQEAgLTE3Nyw3ICsxNzksNyBAQAogCQlnb3RvIGVycm9yOwogCiAJLyogcHVsbCB0aGUgZGVzY3JpcHRpb24gaW50byBrZXJuZWwgc3BhY2UgKi8KLQlkZXNjcmlwdGlvbiA9IHN0cm5kdXBfdXNlcihfZGVzY3JpcHRpb24sIFBBR0VfU0laRSk7CisJZGVzY3JpcHRpb24gPSBzdHJuZHVwX3VzZXIoX2Rlc2NyaXB0aW9uLCBLRVlfTUFYX0RFU0NfU0laRSk7CiAJaWYgKElTX0VSUihkZXNjcmlwdGlvbikpIHsKIAkJcmV0ID0gUFRSX0VSUihkZXNjcmlwdGlvbik7CiAJCWdvdG8gZXJyb3I7CkBAIC0yODcsNyArMjg5LDcgQEAKIAkvKiBmZXRjaCB0aGUgbmFtZSBmcm9tIHVzZXJzcGFjZSAqLwogCW5hbWUgPSBOVUxMOwogCWlmIChfbmFtZSkgewotCQluYW1lID0gc3RybmR1cF91c2VyKF9uYW1lLCBQQUdFX1NJWkUpOworCQluYW1lID0gc3RybmR1cF91c2VyKF9uYW1lLCBLRVlfTUFYX0RFU0NfU0laRSk7CiAJCWlmIChJU19FUlIobmFtZSkpIHsKIAkJCXJldCA9IFBUUl9FUlIobmFtZSk7CiAJCQlnb3RvIGVycm9yOwpAQCAtNTYyLDggKzU2NCw5IEBACiB7CiAJc3RydWN0IGtleSAqa2V5LCAqaW5zdGtleTsKIAlrZXlfcmVmX3Qga2V5X3JlZjsKLQljaGFyICp0bXBidWY7CisJY2hhciAqaW5mb2J1ZjsKIAlsb25nIHJldDsKKwlpbnQgZGVzY2xlbiwgaW5mb2xlbjsKIAogCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoa2V5aWQsIEtFWV9MT09LVVBfUEFSVElBTCwgS0VZX05FRURfVklFVyk7CiAJaWYgKElTX0VSUihrZXlfcmVmKSkgewpAQCAtNTg2LDM4ICs1ODksMzEgQEAKIAl9CiAKIG9rYXk6Ci0JLyogY2FsY3VsYXRlIGhvdyBtdWNoIGRlc2NyaXB0aW9uIHdlJ3JlIGdvaW5nIHRvIHJldHVybiAqLwotCXJldCA9IC1FTk9NRU07Ci0JdG1wYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghdG1wYnVmKQotCQlnb3RvIGVycm9yMjsKLQogCWtleSA9IGtleV9yZWZfdG9fcHRyKGtleV9yZWYpOworCWRlc2NsZW4gPSBzdHJsZW4oa2V5LT5kZXNjcmlwdGlvbik7CiAKLQlyZXQgPSBzbnByaW50Zih0bXBidWYsIFBBR0VfU0laRSAtIDEsCi0JCSAgICAgICAiJXM7JWQ7JWQ7JTA4eDslcyIsCi0JCSAgICAgICBrZXktPnR5cGUtPm5hbWUsCi0JCSAgICAgICBmcm9tX2t1aWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBrZXktPnVpZCksCi0JCSAgICAgICBmcm9tX2tnaWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBrZXktPmdpZCksCi0JCSAgICAgICBrZXktPnBlcm0sCi0JCSAgICAgICBrZXktPmRlc2NyaXB0aW9uID86ICIiKTsKLQotCS8qIGluY2x1ZGUgYSBOVUwgY2hhciBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhICovCi0JaWYgKHJldCA+IFBBR0VfU0laRSAtIDEpCi0JCXJldCA9IFBBR0VfU0laRSAtIDE7Ci0JdG1wYnVmW3JldF0gPSAwOwotCXJldCsrOworCS8qIGNhbGN1bGF0ZSBob3cgbXVjaCBpbmZvcm1hdGlvbiB3ZSdyZSBnb2luZyB0byByZXR1cm4gKi8KKwlyZXQgPSAtRU5PTUVNOworCWluZm9idWYgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKKwkJCSAgICAiJXM7JWQ7JWQ7JTA4eDsiLAorCQkJICAgIGtleS0+dHlwZS0+bmFtZSwKKwkJCSAgICBmcm9tX2t1aWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBrZXktPnVpZCksCisJCQkgICAgZnJvbV9rZ2lkX211bmdlZChjdXJyZW50X3VzZXJfbnMoKSwga2V5LT5naWQpLAorCQkJICAgIGtleS0+cGVybSk7CisJaWYgKCFpbmZvYnVmKQorCQlnb3RvIGVycm9yMjsKKwlpbmZvbGVuID0gc3RybGVuKGluZm9idWYpOworCXJldCA9IGluZm9sZW4gKyBkZXNjbGVuICsgMTsKIAogCS8qIGNvbnNpZGVyIHJldHVybmluZyB0aGUgZGF0YSAqLwotCWlmIChidWZmZXIgJiYgYnVmbGVuID4gMCkgewotCQlpZiAoYnVmbGVuID4gcmV0KQotCQkJYnVmbGVuID0gcmV0OwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCB0bXBidWYsIGJ1ZmxlbikgIT0gMCkKKwlpZiAoYnVmZmVyICYmIGJ1ZmxlbiA+PSByZXQpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGluZm9idWYsIGluZm9sZW4pICE9IDAgfHwKKwkJICAgIGNvcHlfdG9fdXNlcihidWZmZXIgKyBpbmZvbGVuLCBrZXktPmRlc2NyaXB0aW9uLAorCQkJCSBkZXNjbGVuICsgMSkgIT0gMCkKIAkJCXJldCA9IC1FRkFVTFQ7CiAJfQogCi0Ja2ZyZWUodG1wYnVmKTsKKwlrZnJlZShpbmZvYnVmKTsKIGVycm9yMjoKIAlrZXlfcmVmX3B1dChrZXlfcmVmKTsKIGVycm9yOgpAQCAtNjQ5LDcgKzY0NSw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQlkZXNjcmlwdGlvbiA9IHN0cm5kdXBfdXNlcihfZGVzY3JpcHRpb24sIFBBR0VfU0laRSk7CisJZGVzY3JpcHRpb24gPSBzdHJuZHVwX3VzZXIoX2Rlc2NyaXB0aW9uLCBLRVlfTUFYX0RFU0NfU0laRSk7CiAJaWYgKElTX0VSUihkZXNjcmlwdGlvbikpIHsKIAkJcmV0ID0gUFRSX0VSUihkZXNjcmlwdGlvbik7CiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IDgxNzcwMTAuLmU3MjU0OGIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC01NDYsNyArNTQ2LDggQEAKIAkJfQogCiAJCWlmIChrZXktPmV4cGlyeSAmJiBjdHgtPm5vdy50dl9zZWMgPj0ga2V5LT5leHBpcnkpIHsKLQkJCWN0eC0+cmVzdWx0ID0gRVJSX1BUUigtRUtFWUVYUElSRUQpOworCQkJaWYgKCEoY3R4LT5mbGFncyAmIEtFWVJJTkdfU0VBUkNIX1NLSVBfRVhQSVJFRCkpCisJCQkJY3R4LT5yZXN1bHQgPSBFUlJfUFRSKC1FS0VZRVhQSVJFRCk7CiAJCQlrbGVhdmUoIiA9ICVkIFtleHBpcmVdIiwgY3R4LT5za2lwcGVkX3JldCk7CiAJCQlnb3RvIHNraXBwZWQ7CiAJCX0KQEAgLTYyOCw2ICs2MjksMTAgQEAKIAkgICAgICAgY3R4LT5pbmRleF9rZXkudHlwZS0+bmFtZSwKIAkgICAgICAgY3R4LT5pbmRleF9rZXkuZGVzY3JpcHRpb24pOwogCisjZGVmaW5lIFNUQVRFX0NIRUNLUyAoS0VZUklOR19TRUFSQ0hfTk9fU1RBVEVfQ0hFQ0sgfCBLRVlSSU5HX1NFQVJDSF9ET19TVEFURV9DSEVDSykKKwlCVUdfT04oKGN0eC0+ZmxhZ3MgJiBTVEFURV9DSEVDS1MpID09IDAgfHwKKwkgICAgICAgKGN0eC0+ZmxhZ3MgJiBTVEFURV9DSEVDS1MpID09IFNUQVRFX0NIRUNLUyk7CisKIAlpZiAoY3R4LT5pbmRleF9rZXkuZGVzY3JpcHRpb24pCiAJCWN0eC0+aW5kZXhfa2V5LmRlc2NfbGVuID0gc3RybGVuKGN0eC0+aW5kZXhfa2V5LmRlc2NyaXB0aW9uKTsKIApAQCAtNjM3LDcgKzY0Miw2IEBACiAJaWYgKGN0eC0+bWF0Y2hfZGF0YS5sb29rdXBfdHlwZSA9PSBLRVlSSU5HX1NFQVJDSF9MT09LVVBfSVRFUkFURSB8fAogCSAgICBrZXlyaW5nX2NvbXBhcmVfb2JqZWN0KGtleXJpbmcsICZjdHgtPmluZGV4X2tleSkpIHsKIAkJY3R4LT5za2lwcGVkX3JldCA9IDI7Ci0JCWN0eC0+ZmxhZ3MgfD0gS0VZUklOR19TRUFSQ0hfRE9fU1RBVEVfQ0hFQ0s7CiAJCXN3aXRjaCAoY3R4LT5pdGVyYXRvcihrZXlyaW5nX2tleV90b19wdHIoa2V5cmluZyksIGN0eCkpIHsKIAkJY2FzZSAxOgogCQkJZ290byBmb3VuZDsKQEAgLTY0OSw4ICs2NTMsNiBAQAogCX0KIAogCWN0eC0+c2tpcHBlZF9yZXQgPSAwOwotCWlmIChjdHgtPmZsYWdzICYgS0VZUklOR19TRUFSQ0hfTk9fU1RBVEVfQ0hFQ0spCi0JCWN0eC0+ZmxhZ3MgJj0gfktFWVJJTkdfU0VBUkNIX0RPX1NUQVRFX0NIRUNLOwogCiAJLyogU3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBrZXlyaW5nICovCiBkZXNjZW5kX3RvX2tleXJpbmc6CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKaW5kZXggYmI0MzM3Yy4uMGM3YWVhNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwpAQCAtNTE2LDYgKzUxNiw4IEBACiAJCS5tYXRjaF9kYXRhLmNtcAkJPSBrZXlfZGVmYXVsdF9jbXAsCiAJCS5tYXRjaF9kYXRhLnJhd19kYXRhCT0gZGVzY3JpcHRpb24sCiAJCS5tYXRjaF9kYXRhLmxvb2t1cF90eXBlCT0gS0VZUklOR19TRUFSQ0hfTE9PS1VQX0RJUkVDVCwKKwkJLmZsYWdzCQkJPSAoS0VZUklOR19TRUFSQ0hfRE9fU1RBVEVfQ0hFQ0sgfAorCQkJCQkgICBLRVlSSU5HX1NFQVJDSF9TS0lQX0VYUElSRUQpLAogCX07CiAJc3RydWN0IGtleSAqa2V5OwogCWtleV9yZWZfdCBrZXlfcmVmOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleV9hdXRoLmMgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5X2F1dGguYwppbmRleCA2NjM5ZTJjLi41ZDY3MmY3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5X2F1dGguYworKysgYi9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5X2F1dGguYwpAQCAtMjQ5LDYgKzI0OSw3IEBACiAJCS5tYXRjaF9kYXRhLmNtcAkJPSBrZXlfZGVmYXVsdF9jbXAsCiAJCS5tYXRjaF9kYXRhLnJhd19kYXRhCT0gZGVzY3JpcHRpb24sCiAJCS5tYXRjaF9kYXRhLmxvb2t1cF90eXBlCT0gS0VZUklOR19TRUFSQ0hfTE9PS1VQX0RJUkVDVCwKKwkJLmZsYWdzCQkJPSBLRVlSSU5HX1NFQVJDSF9ET19TVEFURV9DSEVDSywKIAl9OwogCXN0cnVjdCBrZXkgKmF1dGhrZXk7CiAJa2V5X3JlZl90IGF1dGhrZXlfcmVmOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggYzcxNzM3Zi4uMzNkYjFhZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC0xMjAwLDcgKzEyMDAsNyBAQAogCXNwaW5fbG9jaygmZGUtPmRfbG9jayk7CiAJbm9kZSA9IGRlLT5kX3N1YmRpcnMubmV4dDsKIAl3aGlsZSAobm9kZSAhPSAmZGUtPmRfc3ViZGlycykgewotCQlzdHJ1Y3QgZGVudHJ5ICpkID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7CisJCXN0cnVjdCBkZW50cnkgKmQgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBkZW50cnksIGRfY2hpbGQpOwogCiAJCXNwaW5fbG9ja19uZXN0ZWQoJmQtPmRfbG9jaywgREVOVFJZX0RfTE9DS19ORVNURUQpOwogCQlsaXN0X2RlbF9pbml0KG5vZGUpOwpAQCAtMTY3NCwxMiArMTY3NCwxMiBAQAogCiAJbGlzdF9mb3JfZWFjaChjbGFzc19ub2RlLCAmY2xhc3NfZGlyLT5kX3N1YmRpcnMpIHsKIAkJc3RydWN0IGRlbnRyeSAqY2xhc3Nfc3ViZGlyID0gbGlzdF9lbnRyeShjbGFzc19ub2RlLAotCQkJCQlzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7CisJCQkJCXN0cnVjdCBkZW50cnksIGRfY2hpbGQpOwogCQlzdHJ1Y3QgbGlzdF9oZWFkICpjbGFzc19zdWJkaXJfbm9kZTsKIAogCQlsaXN0X2Zvcl9lYWNoKGNsYXNzX3N1YmRpcl9ub2RlLCAmY2xhc3Nfc3ViZGlyLT5kX3N1YmRpcnMpIHsKIAkJCXN0cnVjdCBkZW50cnkgKmQgPSBsaXN0X2VudHJ5KGNsYXNzX3N1YmRpcl9ub2RlLAotCQkJCQkJc3RydWN0IGRlbnRyeSwgZF91LmRfY2hpbGQpOworCQkJCQkJc3RydWN0IGRlbnRyeSwgZF9jaGlsZCk7CiAKIAkJCWlmIChkLT5kX2lub2RlKQogCQkJCWlmIChkLT5kX2lub2RlLT5pX21vZGUgJiBTX0lGRElSKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCBkNTE1ZWMyLi40MzNhZTYxIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtMTY2LDkgKzE2Niw5IEBACiAJCXJldHVybiByYzsKIAogCXNta19idV9tb2RlKG1vZGUsIGFjYyk7Ci0JcHJfaW5mbygiU21hY2sgQnJpbmd1cDogKCVzICVzICVzKSBmaWxlPSglcyAlbGQgJXMpICVzXG4iLAorCXByX2luZm8oIlNtYWNrIEJyaW5ndXA6ICglcyAlcyAlcykgZmlsZT0oJXMgJWxkICVwRCkgJXNcbiIsCiAJCXNza3AtPnNta19rbm93biwgKGNoYXIgKilmaWxlLT5mX3NlY3VyaXR5LCBhY2MsCi0JCWlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8sIGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubywgZmlsZSwKIAkJY3VycmVudC0+Y29tbSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODksOSArMTg5LDkgQEAKIAkJcmV0dXJuIHJjOwogCiAJc21rX2J1X21vZGUobW9kZSwgYWNjKTsKLQlwcl9pbmZvKCJTbWFjayBCcmluZ3VwOiAoJXMgJXMgJXMpIGZpbGU9KCVzICVsZCAlcykgJXNcbiIsCisJcHJfaW5mbygiU21hY2sgQnJpbmd1cDogKCVzICVzICVzKSBmaWxlPSglcyAlbGQgJXBEKSAlc1xuIiwKIAkJc3NrcC0+c21rX2tub3duLCBzbWtfb2ZfaW5vZGUoaW5vZGUpLT5zbWtfa25vd24sIGFjYywKLQkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubywgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAorCQlpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vLCBmaWxlLAogCQljdXJyZW50LT5jb21tKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvbnRyb2xsZXIuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvbnRyb2xsZXIuYwppbmRleCA4MzM3NjQ1Li44Mjc2YTc0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb250cm9sbGVyLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29udHJvbGxlci5jCkBAIC0xNjc2LDcgKzE2NzYsNyBAQAogCXU4IHNkX3N0YXR1czsKIAlpbnQgaTsKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiAJaWYgKGNoaXAtPmRyaXZlcl9jYXBzICYgQVpYX0RDQVBTX1BNX1JVTlRJTUUpCiAJCWlmICghcG1fcnVudGltZV9hY3RpdmUoY2hpcC0+Y2FyZC0+ZGV2KSkKIAkJCXJldHVybiBJUlFfTk9ORTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDQ4YjZjNWEuLjI0M2ZmYWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtODU3LDcgKzg1Nyw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQIHx8IFNVUFBPUlRfVkdBX1NXSVRDSEVST08gKi8KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGF6eF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtOTU1LDkgKzk1NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwotCi0jaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXp4X3BtID0gewogCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKGF6eF9zdXNwZW5kLCBhenhfcmVzdW1lKQogCVNFVF9SVU5USU1FX1BNX09QUyhhenhfcnVudGltZV9zdXNwZW5kLCBhenhfcnVudGltZV9yZXN1bWUsIGF6eF9ydW50aW1lX2lkbGUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDE0ZjE2YmUuLmIxMThhNWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC00NzkwLDYgKzQ3OTAsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA2MzgsICJEZWxsIEluc3Bpcm9uIDU0MzkiLCBBTEMyOTBfRklYVVBfTU9OT19TUEVBS0VSU19IU0pBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA2NGEsICJEZWxsIiwgQUxDMjkzX0ZJWFVQX0RFTEwxX01JQ19OT19QUkVTRU5DRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDY0YiwgIkRlbGwiLCBBTEMyOTNfRklYVVBfREVMTDFfTUlDX05PX1BSRVNFTkNFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNmQ5LCAiRGVsbCIsIEFMQzI5M19GSVhVUF9ERUxMMV9NSUNfTk9fUFJFU0VOQ0UpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA2ZGEsICJEZWxsIiwgQUxDMjkzX0ZJWFVQX0RFTEwxX01JQ19OT19QUkVTRU5DRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MTY0YSwgIkRlbGwiLCBBTEMyOTNfRklYVVBfREVMTDFfTUlDX05PX1BSRVNFTkNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgxNjRiLCAiRGVsbCIsIEFMQzI5M19GSVhVUF9ERUxMMV9NSUNfTk9fUFJFU0VOQ0UpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDE1ODYsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9NVVRFX0xFRF9NSUMyKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3MzNWwzMi5jIGIvc291bmQvc29jL2NvZGVjcy9jczM1bDMyLmMKaW5kZXggYzEyNTkyNS4uZWM1NWM1OTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3MzNWwzMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3MzNWwzMi5jCkBAIC01NTAsNyArNTUwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGNzMzVsMzJfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY3MzNWwzMl9wcml2YXRlICpjczM1bDMyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NzNDJ4eDguYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mnh4OC5jCmluZGV4IDAyYjE1MjAuLjY3MGViZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mnh4OC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mnh4OC5jCkBAIC01MzcsNyArNTM3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNzNDJ4eDhfcHJvYmUpOwogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgY3M0Mnh4OF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNzNDJ4eDhfcHJpdiAqY3M0Mnh4OCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9tYXg5ODA5MC5jIGIvc291bmQvc29jL2NvZGVjcy9tYXg5ODA5MC5jCmluZGV4IDEyMjk1NTQuLjg4YTY1ZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgwOTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL21heDk4MDkwLmMKQEAgLTI0OTIsNyArMjQ5Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBtYXg5ODA5MF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1heDk4MDkwX3ByaXYgKm1heDk4MDkwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3BjbTUxMnguYyBiL3NvdW5kL3NvYy9jb2RlY3MvcGNtNTEyeC5jCmluZGV4IDBjOGFlZmEuLmU1ZjJmYjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtNTEyeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcGNtNTEyeC5jCkBAIC01MTcsNyArNTE3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjbTUxMnhfcmVtb3ZlKTsKIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHBjbTUxMnhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjbTUxMnhfcHJpdiAqcGNtNTEyeCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90YXMyNTUyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RhczI1NTIuYwppbmRleCBmMDM5ZGM4Li4wZmRlNWRmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RhczI1NTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RhczI1NTIuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJeyJDbGFzc0QiLCBOVUxMLCAiUExMIn0sCiB9OwogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB2b2lkIHRhczI1NTJfc3dfc2h1dGRvd24oc3RydWN0IHRhczI1NTJfZGF0YSAqdGFzX2RhdGEsIGludCBzd19zaHV0ZG93bikKIHsKIAl1OCBjZmcxX3JlZzsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgdGFzMjU1Ml9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCB0YXMyNTUyX2RhdGEgKnRhczI1NTIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd20yMjAwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtMjIwMC5jCmluZGV4IGNkZWE5ZDkuLjE1NTk5ODQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd20yMjAwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTIyMDAuYwpAQCAtMjQ0MCw3ICsyNDQwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHdtMjIwMF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCB3bTIyMDBfcHJpdiAqd20yMjAwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtNTEwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTUxMDAuYwppbmRleCBhMDFhZDYyLi5iODA5NzBkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtNTEwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd201MTAwLmMKQEAgLTI2NjQsNyArMjY2NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCB3bTUxMDBfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd201MTAwX3ByaXYgKndtNTEwMCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKaW5kZXggOTA3NzQxMS4uNzdlYTAwMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCkBAIC0zNzgyLDcgKzM3ODIsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgd204OTYyX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd204OTYyX3ByaXYgKndtODk2MiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfYXNyYy5jIGIvc291bmQvc29jL2ZzbC9mc2xfYXNyYy5jCmluZGV4IDlkZWFiZGQuLjAyNmE4MDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX2FzcmMuYworKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9hc3JjLmMKQEAgLTkyOCw3ICs5MjgsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgZnNsX2FzcmNfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBmc2xfYXNyYyAqYXNyY19wcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC05NTQsNyArOTU0LDcgQEAKIAogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgZnNsX2FzcmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9pMnMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCmluZGV4IDlkNTEzNDcuLmRlOGIxMzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCkBAIC0xMTEzLDcgKzExMTMsNyBAQAogCQkJCXBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldiktPmRyaXZlcl9kYXRhOwogfQogCi0jaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgaTJzX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGkyc19kYWkgKmkycyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMTEzMSw3ICsxMTMxLDcgQEAKIAogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIHN0YXRpYyBpbnQgc2Ftc3VuZ19pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi90cmFjZWV2ZW50L3BsdWdpbl9zY3NpLmMgYi90b29scy9saWIvdHJhY2VldmVudC9wbHVnaW5fc2NzaS5jCmluZGV4IGVkYTMyNmYuLjM3MjdkZTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi90cmFjZWV2ZW50L3BsdWdpbl9zY3NpLmMKKysrIGIvdG9vbHMvbGliL3RyYWNlZXZlbnQvcGx1Z2luX3Njc2kuYwpAQCAtODUsOCArODUsOSBAQAogI2RlZmluZSBNT1ZFX01FRElVTQkJCTB4YTUKICNkZWZpbmUgRVhDSEFOR0VfTUVESVVNCQkJMHhhNgogI2RlZmluZSBSRUFEXzEyCQkJCTB4YTgKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fT1VUXzEyCQkweGE5CiAjZGVmaW5lIFdSSVRFXzEyCQkJMHhhYQotI2RlZmluZSBSRUFEX01FRElBX1NFUklBTF9OVU1CRVIJMHhhYgorI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTl8xMgkJMHhhYgogI2RlZmluZSBXUklURV9WRVJJRllfMTIJCQkweGFlCiAjZGVmaW5lIFZFUklGWV8xMgkJCTB4YWYKICNkZWZpbmUgU0VBUkNIX0hJR0hfMTIJCQkweGIwCkBAIC0xMDcsNyArMTA4LDkgQEAKICNkZWZpbmUgVkVSSUZZXzE2CQkJMHg4ZgogI2RlZmluZSBTWU5DSFJPTklaRV9DQUNIRV8xNgkJMHg5MQogI2RlZmluZSBXUklURV9TQU1FXzE2CQkJMHg5MwotI2RlZmluZSBTRVJWSUNFX0FDVElPTl9JTgkJMHg5ZQorI2RlZmluZSBTRVJWSUNFX0FDVElPTl9CSURJUkVDVElPTkFMCTB4OWQKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU5fMTYJCTB4OWUKKyNkZWZpbmUgU0VSVklDRV9BQ1RJT05fT1VUXzE2CQkweDlmCiAvKiB2YWx1ZXMgZm9yIHNlcnZpY2UgYWN0aW9uIGluICovCiAjZGVmaW5lCVNBSV9SRUFEX0NBUEFDSVRZXzE2CQkweDEwCiAjZGVmaW5lIFNBSV9HRVRfTEJBX1NUQVRVUwkJMHgxMgpAQCAtMzkzLDcgKzM5Niw3IEBACiAJCXJldHVybiBzY3NpX3RyYWNlX3J3MTYocCwgY2RiLCBsZW4pOwogCWNhc2UgVU5NQVA6CiAJCXJldHVybiBzY3NpX3RyYWNlX3VubWFwKHAsIGNkYiwgbGVuKTsKLQljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCWNhc2UgU0VSVklDRV9BQ1RJT05fSU5fMTY6CiAJCXJldHVybiBzY3NpX3RyYWNlX3NlcnZpY2VfYWN0aW9uX2luKHAsIGNkYiwgbGVuKTsKIAljYXNlIFZBUklBQkxFX0xFTkdUSF9DTUQ6CiAJCXJldHVybiBzY3NpX3RyYWNlX3ZhcmxlbihwLCBjZGIsIGxlbik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmLy5naXRpZ25vcmUgYi90b29scy9wZXJmLy5naXRpZ25vcmUKaW5kZXggNzE3MjIxZS4uNDAzOTljMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCisrKyBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQpAQCAtMiw2ICsyLDggQEAKIFBFUkYtR1VJLVZBUlMKIFBFUkYtVkVSU0lPTi1GSUxFCiBwZXJmCitwZXJmLXJlYWQtdmRzbzMyCitwZXJmLXJlYWQtdmRzb3gzMgogcGVyZi1oZWxwCiBwZXJmLXJlY29yZAogcGVyZi1yZXBvcnQKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0CmluZGV4IDM5OGY4ZDUuLmFmOWE1NGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dApAQCAtMjE0LDYgKzIxNCwxMiBAQAogQWZ0ZXIgc3RhcnRpbmcgdGhlIHByb2dyYW0sIHdhaXQgbXNlY3MgYmVmb3JlIG1lYXN1cmluZy4gVGhpcyBpcyB1c2VmdWwgdG8KIGZpbHRlciBvdXQgdGhlIHN0YXJ0dXAgcGhhc2Ugb2YgdGhlIHByb2dyYW0sIHdoaWNoIGlzIG9mdGVuIHZlcnkgZGlmZmVyZW50LgogCistSTo6CistLWludHItcmVnczo6CitDYXB0dXJlIG1hY2hpbmUgc3RhdGUgKHJlZ2lzdGVycykgYXQgaW50ZXJydXB0LCBpLmUuLCBvbiBjb3VudGVyIG92ZXJmbG93cyBmb3IKK2VhY2ggc2FtcGxlLiBMaXN0IG9mIGNhcHR1cmVkIHJlZ2lzdGVycyBkZXBlbmRzIG9uIHRoZSBhcmNoaXRlY3R1cmUuIFRoaXMgb3B0aW9uCitpcyBvZmYgYnkgZGVmYXVsdC4KKwogU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rcGVyZjpwZXJmLXN0YXRbMV0sIGxpbmtwZXJmOnBlcmYtbGlzdFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKaW5kZXggMDkyN2JmNC4uZGQ3Y2NjZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CkBAIC0xNTksNyArMTU5LDcgQEAKIC0tZHVtcC1yYXctdHJhY2U6OgogICAgICAgICBEdW1wIHJhdyB0cmFjZSBpbiBBU0NJSS4KIAotLWcgW3R5cGUsbWluWyxsaW1pdF0sb3JkZXJbLGtleV1dOjoKKy1nIFt0eXBlLG1pblssbGltaXRdLG9yZGVyWyxrZXldWyxicmFuY2hdXTo6CiAtLWNhbGwtZ3JhcGg6OgogICAgICAgICBEaXNwbGF5IGNhbGwgY2hhaW5zIHVzaW5nIHR5cGUsIG1pbiBwZXJjZW50IHRocmVzaG9sZCwgb3B0aW9uYWwgcHJpbnQKIAlsaW1pdCBhbmQgb3JkZXIuCkBAIC0xNzcsNiArMTc3LDExIEBACiAJLSBmdW5jdGlvbjogY29tcGFyZSBvbiBmdW5jdGlvbnMKIAktIGFkZHJlc3M6IGNvbXBhcmUgb24gaW5kaXZpZHVhbCBjb2RlIGFkZHJlc3NlcwogCisJYnJhbmNoIGNhbiBiZToKKwktIGJyYW5jaDogaW5jbHVkZSBsYXN0IGJyYW5jaCBpbmZvcm1hdGlvbiBpbiBjYWxsZ3JhcGgKKwl3aGVuIGF2YWlsYWJsZS4gVXN1YWxseSBtb3JlIGNvbnZlbmllbnQgdG8gdXNlIC0tYnJhbmNoLWhpc3RvcnkKKwlmb3IgdGhpcy4KKwogCURlZmF1bHQ6IGZyYWN0YWwsMC41LGNhbGxlZSxmdW5jdGlvbi4KIAogLS1jaGlsZHJlbjo6CkBAIC0yNjYsNiArMjcxLDExIEBACiAJYnJhbmNoIHN0YWNrcyBhbmQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0byB0aGUgYnJhbmNoIHZpZXcgbW9kZSwKIAl1bmxlc3MgLS1uby1icmFuY2gtc3RhY2sgaXMgdXNlZC4KIAorLS1icmFuY2gtaGlzdG9yeTo6CisJQWRkIHRoZSBhZGRyZXNzZXMgb2Ygc2FtcGxlZCB0YWtlbiBicmFuY2hlcyB0byB0aGUgY2FsbHN0YWNrLgorCVRoaXMgYWxsb3dzIHRvIGV4YW1pbmUgdGhlIHBhdGggdGhlIHByb2dyYW0gdG9vayB0byBlYWNoIHNhbXBsZS4KKwlUaGUgZGF0YSBjb2xsZWN0aW9uIG11c3QgaGF2ZSB1c2VkIC1iIChvciAtaikgYW5kIC1nLgorCiAtLW9iamR1bXA9PHBhdGg+OjoKICAgICAgICAgUGF0aCB0byBvYmpkdW1wIGJpbmFyeS4KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCmluZGV4IDI2MjkxNmYuLjQ3OGVmYTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorKysgYi90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKQEAgLTYwLDYgKzYwLDE1IEBACiAjCiAjIERlZmluZSBOT19MSUJEV19EV0FSRl9VTldJTkQgaWYgeW91IGRvIG5vdCB3YW50IGxpYmR3IHN1cHBvcnQKICMgZm9yIGR3YXJmIGJhY2t0cmFjZSBwb3N0IHVud2luZC4KKyMKKyMgRGVmaW5lIE5PX1BFUkZfUkVBRF9WRFNPMzIgaWYgeW91IGRvIG5vdCB3YW50IHRvIGJ1aWxkIHBlcmYtcmVhZC12ZHNvMzIKKyMgZm9yIHJlYWRpbmcgdGhlIDMyLWJpdCBjb21wYXRpYmlsaXR5IFZEU08gaW4gNjQtYml0IG1vZGUKKyMKKyMgRGVmaW5lIE5PX1BFUkZfUkVBRF9WRFNPWDMyIGlmIHlvdSBkbyBub3Qgd2FudCB0byBidWlsZCBwZXJmLXJlYWQtdmRzb3gzMgorIyBmb3IgcmVhZGluZyB0aGUgeDMyIG1vZGUgMzItYml0IGNvbXBhdGliaWxpdHkgVkRTTyBpbiA2NC1iaXQgbW9kZQorIworIyBEZWZpbmUgTk9fWkxJQiBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc3VwcG9ydCBjb21wcmVzc2VkIGtlcm5lbCBtb2R1bGVzCisKIAogaWZlcSAoJChzcmN0cmVlKSwpCiBzcmN0cmVlIDo9ICQocGF0c3Vic3QgJS8sJSwkKGRpciAkKHNoZWxsIHB3ZCkpKQpAQCAtMTcxLDExICsxODAsMTYgQEAKIAogU0NSSVBUUyA9ICQocGF0c3Vic3QgJS5zaCwlLCQoU0NSSVBUX1NIKSkKIAotIwotIyBTaW5nbGUgJ3BlcmYnIGJpbmFyeSByaWdodCBub3c6Ci0jCiBQUk9HUkFNUyArPSAkKE9VVFBVVClwZXJmCiAKK2lmbmRlZiBOT19QRVJGX1JFQURfVkRTTzMyCitQUk9HUkFNUyArPSAkKE9VVFBVVClwZXJmLXJlYWQtdmRzbzMyCitlbmRpZgorCitpZm5kZWYgTk9fUEVSRl9SRUFEX1ZEU09YMzIKK1BST0dSQU1TICs9ICQoT1VUUFVUKXBlcmYtcmVhZC12ZHNveDMyCitlbmRpZgorCiAjIHdoYXQgJ2FsbCcgd2lsbCBidWlsZCBhbmQgJ2luc3RhbGwnIHdpbGwgaW5zdGFsbCwgaW4gcGVyZmV4ZWNkaXIKIEFMTF9QUk9HUkFNUyA9ICQoUFJPR1JBTVMpICQoU0NSSVBUUykKIApAQCAtMjQ3LDEyICsyNjEsMTQgQEAKIExJQl9IICs9IHV0aWwvY2FjaGUuaAogTElCX0ggKz0gdXRpbC9jYWxsY2hhaW4uaAogTElCX0ggKz0gdXRpbC9idWlsZC1pZC5oCitMSUJfSCArPSB1dGlsL2RiLWV4cG9ydC5oCiBMSUJfSCArPSB1dGlsL2RlYnVnLmgKIExJQl9IICs9IHV0aWwvcG11LmgKIExJQl9IICs9IHV0aWwvZXZlbnQuaAogTElCX0ggKz0gdXRpbC9ldnNlbC5oCiBMSUJfSCArPSB1dGlsL2V2bGlzdC5oCiBMSUJfSCArPSB1dGlsL2V4ZWNfY21kLmgKK0xJQl9IICs9IHV0aWwvZmluZC12ZHNvLW1hcC5jCiBMSUJfSCArPSB1dGlsL2xldmVuc2h0ZWluLmgKIExJQl9IICs9IHV0aWwvbWFjaGluZS5oCiBMSUJfSCArPSB1dGlsL21hcC5oCkBAIC0zMDQsNiArMzIwLDcgQEAKIExJQl9IICs9IHVpL3VpLmgKIExJQl9IICs9IHV0aWwvZGF0YS5oCiBMSUJfSCArPSB1dGlsL2t2bS1zdGF0LmgKK0xJQl9IICs9IHV0aWwvdGhyZWFkLXN0YWNrLmgKIAogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9hYnNwYXRoLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvYWxpYXMubwpAQCAtMzExLDYgKzMyOCw3IEBACiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2J1aWxkLWlkLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvY29uZmlnLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvY3R5cGUubworTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9kYi1leHBvcnQubwogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9wbXUubwogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9lbnZpcm9ubWVudC5vCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2V2ZW50Lm8KQEAgLTM4MCw2ICszOTgsNyBAQAogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9kYXRhLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvdHNjLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvY2xvZXhlYy5vCitMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL3RocmVhZC1zdGFjay5vCiAKIExJQl9PQkpTICs9ICQoT1VUUFVUKXVpL3NldHVwLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXVpL2hlbHBsaW5lLm8KQEAgLTQ3OCw4ICs0OTcsNiBAQAogZW5kaWYKIAogaWZkZWYgTk9fTElCRUxGCi1FWFRMSUJTIDo9ICQoZmlsdGVyLW91dCAtbGVsZiwkKEVYVExJQlMpKQotCiAjIFJlbW92ZSBFTEYvRFdBUkYgZGVwZW5kZW50IGNvZGVzCiBMSUJfT0JKUyA6PSAkKGZpbHRlci1vdXQgJChPVVRQVVQpdXRpbC9zeW1ib2wtZWxmLm8sJChMSUJfT0JKUykpCiBMSUJfT0JKUyA6PSAkKGZpbHRlci1vdXQgJChPVVRQVVQpdXRpbC9kd2FyZi1hdXgubywkKExJQl9PQkpTKSkKQEAgLTU2OCw2ICs1ODUsMTAgQEAKICAgQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJlbmNoL251bWEubwogZW5kaWYKIAoraWZuZGVmIE5PX1pMSUIKKyAgTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC96bGliLm8KK2VuZGlmCisKIGlmZGVmIEFTQ0lJRE9DOAogICBleHBvcnQgQVNDSUlET0M4CiBlbmRpZgpAQCAtNzMyLDYgKzc1MywxNiBAQAogJChPVVRQVVQpcGVyZi0lOiAlLm8gJChQRVJGTElCUykKIAkkKFFVSUVUX0xJTkspJChDQykgJChDRkxBR1MpIC1vICRAICQoTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCiAKK2lmbmRlZiBOT19QRVJGX1JFQURfVkRTTzMyCiskKE9VVFBVVClwZXJmLXJlYWQtdmRzbzMyOiBwZXJmLXJlYWQtdmRzby5jIHV0aWwvZmluZC12ZHNvLW1hcC5jCisJJChRVUlFVF9DQykkKENDKSAtbTMyICQoZmlsdGVyIC1zdGF0aWMsJChMREZMQUdTKSkgLVdhbGwgLVdlcnJvciAtbyAkQCBwZXJmLXJlYWQtdmRzby5jCitlbmRpZgorCitpZm5kZWYgTk9fUEVSRl9SRUFEX1ZEU09YMzIKKyQoT1VUUFVUKXBlcmYtcmVhZC12ZHNveDMyOiBwZXJmLXJlYWQtdmRzby5jIHV0aWwvZmluZC12ZHNvLW1hcC5jCisJJChRVUlFVF9DQykkKENDKSAtbXgzMiAkKGZpbHRlciAtc3RhdGljLCQoTERGTEFHUykpIC1XYWxsIC1XZXJyb3IgLW8gJEAgcGVyZi1yZWFkLXZkc28uYworZW5kaWYKKwogJChMSUJfT0JKUykgJChCVUlMVElOX09CSlMpOiAkKExJQl9IKQogJChwYXRzdWJzdCBwZXJmLSUsJS5vLCQoUFJPR1JBTVMpKTogJChMSUJfSCkgJCh3aWxkY2FyZCAqLyouaCkKIApAQCAtODc2LDYgKzkwNywxNCBAQAogCQkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKSc7IFwKIAkJJChJTlNUQUxMKSAkKE9VVFBVVClwZXJmICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJzsgXAogCQkkKExOKSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKS9wZXJmJyAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKS90cmFjZScKK2lmbmRlZiBOT19QRVJGX1JFQURfVkRTTzMyCisJJChjYWxsIFFVSUVUX0lOU1RBTEwsIHBlcmYtcmVhZC12ZHNvMzIpIFwKKwkJJChJTlNUQUxMKSAkKE9VVFBVVClwZXJmLXJlYWQtdmRzbzMyICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJzsKK2VuZGlmCitpZm5kZWYgTk9fUEVSRl9SRUFEX1ZEU09YMzIKKwkkKGNhbGwgUVVJRVRfSU5TVEFMTCwgcGVyZi1yZWFkLXZkc294MzIpIFwKKwkJJChJTlNUQUxMKSAkKE9VVFBVVClwZXJmLXJlYWQtdmRzb3gzMiAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKSc7CitlbmRpZgogCSQoY2FsbCBRVUlFVF9JTlNUQUxMLCBsaWJleGVjKSBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKScKIAkkKGNhbGwgUVVJRVRfSU5TVEFMTCwgcGVyZi1hcmNoaXZlKSBcCkBAIC05MjgsNyArOTY3LDcgQEAKIAogY2xlYW46ICQoTElCVFJBQ0VFVkVOVCktY2xlYW4gJChMSUJBUElLRlMpLWNsZWFuIGNvbmZpZy1jbGVhbgogCSQoY2FsbCBRVUlFVF9DTEVBTiwgY29yZS1vYmpzKSAgJChSTSkgJChMSUJfT0JKUykgJChCVUlMVElOX09CSlMpICQoTElCX0ZJTEUpICQoT1VUUFVUKXBlcmYtYXJjaGl2ZSAkKE9VVFBVVClwZXJmLXdpdGgta2NvcmUgJChPVVRQVVQpcGVyZi5vICQoTEFOR19CSU5ESU5HUykgJChHVEtfT0JKUykKLQkkKGNhbGwgUVVJRVRfQ0xFQU4sIGNvcmUtcHJvZ3MpICQoUk0pICQoQUxMX1BST0dSQU1TKSBwZXJmCisJJChjYWxsIFFVSUVUX0NMRUFOLCBjb3JlLXByb2dzKSAkKFJNKSAkKEFMTF9QUk9HUkFNUykgcGVyZiBwZXJmLXJlYWQtdmRzbzMyIHBlcmYtcmVhZC12ZHNveDMyCiAJJChjYWxsIFFVSUVUX0NMRUFOLCBjb3JlLWdlbikgICAkKFJNKSAgKi5zcGVjICoucHljICoucHlvICovKi5weWMgKi8qLnB5byAkKE9VVFBVVCljb21tb24tY21kcy5oIFRBR1MgdGFncyBjc2NvcGUqICQoT1VUUFVUKVBFUkYtVkVSU0lPTi1GSUxFICQoT1VUUFVUKVBFUkYtQ0ZMQUdTICQoT1VUUFVUKVBFUkYtRkVBVFVSRVMgJChPVVRQVVQpdXRpbC8qLWJpc29uKiAkKE9VVFBVVCl1dGlsLyotZmxleCoKIAkkKFFVSUVUX1NVQkRJUjApRG9jdW1lbnRhdGlvbiAkKFFVSUVUX1NVQkRJUjEpIGNsZWFuCiAJJChweXRob24tY2xlYW4pCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2FyY2gvcG93ZXJwYy91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jIGIvdG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYwppbmRleCBkNzNlZjhiLi4zYmI1MGVhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2FyY2gvcG93ZXJwYy91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jCisrKyBiL3Rvb2xzL3BlcmYvYXJjaC9wb3dlcnBjL3V0aWwvc2tpcC1jYWxsY2hhaW4taWR4LmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogICoJCXlldCB1c2VkKQogICoJLTEgaW4gY2FzZSBvZiBlcnJvcnMKICAqLwotc3RhdGljIGludCBjaGVja19yZXR1cm5fYWRkcihjb25zdCBjaGFyICpleGVjX2ZpbGUsIER3YXJmX0FkZHIgcGMpCitzdGF0aWMgaW50IGNoZWNrX3JldHVybl9hZGRyKHN0cnVjdCBkc28gKmRzbywgRHdhcmZfQWRkciBwYykKIHsKIAlpbnQJCXJjID0gLTE7CiAJRHdmbAkJKmR3Zmw7CkBAIC0xNTYsMTUgKzE1NiwyNyBAQAogCUR3YXJmX0FkZHIJZW5kID0gcGM7CiAJYm9vbAkJc2lnbmFscDsKIAotCWR3ZmwgPSBkd2ZsX2JlZ2luKCZvZmZsaW5lX2NhbGxiYWNrcyk7Ci0JaWYgKCFkd2ZsKSB7Ci0JCXByX2RlYnVnKCJkd2ZsX2JlZ2luKCkgZmFpbGVkOiAlc1xuIiwgZHdhcmZfZXJybXNnKC0xKSk7Ci0JCXJldHVybiAtMTsKLQl9CisJZHdmbCA9IGRzby0+ZHdmbDsKIAotCWlmIChkd2ZsX3JlcG9ydF9vZmZsaW5lKGR3ZmwsICIiLCAgZXhlY19maWxlLCAtMSkgPT0gTlVMTCkgewotCQlwcl9kZWJ1ZygiZHdmbF9yZXBvcnRfb2ZmbGluZSgpIGZhaWxlZCAlc1xuIiwgZHdhcmZfZXJybXNnKC0xKSk7Ci0JCWdvdG8gb3V0OworCWlmICghZHdmbCkgeworCQlkd2ZsID0gZHdmbF9iZWdpbigmb2ZmbGluZV9jYWxsYmFja3MpOworCQlpZiAoIWR3ZmwpIHsKKwkJCXByX2RlYnVnKCJkd2ZsX2JlZ2luKCkgZmFpbGVkOiAlc1xuIiwgZHdhcmZfZXJybXNnKC0xKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoZHdmbF9yZXBvcnRfb2ZmbGluZShkd2ZsLCAiIiwgZHNvLT5sb25nX25hbWUsIC0xKSA9PSBOVUxMKSB7CisJCQlwcl9kZWJ1ZygiZHdmbF9yZXBvcnRfb2ZmbGluZSgpIGZhaWxlZCAlc1xuIiwKKwkJCQkJCWR3YXJmX2Vycm1zZygtMSkpOworCQkJLyoKKwkJCSAqIFdlIG5vcm1hbGx5IGNhY2hlIHRoZSBEV0FSRiBkZWJ1ZyBpbmZvIGFuZCBuZXZlcgorCQkJICogY2FsbCBkd2ZsX2VuZCgpLiBCdXQgdG8gcHJldmVudCBmZCBsZWFrLCBmcmVlIGluCisJCQkgKiBjYXNlIG9mIGVycm9yLgorCQkJICovCisJCQlkd2ZsX2VuZChkd2ZsKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRzby0+ZHdmbCA9IGR3Zmw7CiAJfQogCiAJbW9kID0gZHdmbF9hZGRybW9kdWxlKGR3ZmwsIHBjKTsKQEAgLTE5NCw3ICsyMDYsNiBAQAogCXJjID0gY2hlY2tfcmV0dXJuX3JlZyhyYV9yZWdubywgZnJhbWUpOwogCiBvdXQ6Ci0JZHdmbF9lbmQoZHdmbCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMjEsOCArMjMyLDcgQEAKICAqCWluZGV4OglvZiBjYWxsY2hhaW4gZW50cnkgdGhhdCBuZWVkcyB0byBiZSBpZ25vcmVkIChpZiBhbnkpCiAgKgktMQlpZiBubyBlbnRyeSBuZWVkcyB0byBiZSBpZ25vcmVkIG9yIGluIGNhc2Ugb2YgZXJyb3JzCiAgKi8KLWludCBhcmNoX3NraXBfY2FsbGNoYWluX2lkeChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAotCQkJCXN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluKQoraW50IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4pCiB7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAJc3RydWN0IGRzbyAqZHNvID0gTlVMTDsKQEAgLTIzNSw3ICsyNDUsNyBAQAogCiAJaXAgPSBjaGFpbi0+aXBzWzJdOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBtYWNoaW5lLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCisJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCiAJCQlNQVBfX0ZVTkNUSU9OLCBpcCwgJmFsKTsKIAogCWlmIChhbC5tYXApCkBAIC0yNDYsNyArMjU2LDcgQEAKIAkJcmV0dXJuIHNraXBfc2xvdDsKIAl9CiAKLQlyYyA9IGNoZWNrX3JldHVybl9hZGRyKGRzby0+bG9uZ19uYW1lLCBpcCk7CisJcmMgPSBjaGVja19yZXR1cm5fYWRkcihkc28sIGlwKTsKIAogCXByX2RlYnVnKCJEU08gJXMsIG5yICUiIFBSSXg2NCAiLCBpcCAweCUiIFBSSXg2NCAicmMgJWRcbiIsCiAJCQkJZHNvLT5sb25nX25hbWUsIGNoYWluLT5uciwgaXAsIHJjKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMgYi90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCmluZGV4IDI1MTE0YzkuLjFjZTQyNWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwpAQCAtMzU3LDYgKzM1Nyw3IEBACiBzdGF0aWMgc3RydWN0IHBlcmZfdG9vbCB0b29sID0gewogCS5zYW1wbGUJPSBkaWZmX19wcm9jZXNzX3NhbXBsZV9ldmVudCwKIAkubW1hcAk9IHBlcmZfZXZlbnRfX3Byb2Nlc3NfbW1hcCwKKwkubW1hcDIJPSBwZXJmX2V2ZW50X19wcm9jZXNzX21tYXAyLAogCS5jb21tCT0gcGVyZl9ldmVudF9fcHJvY2Vzc19jb21tLAogCS5leGl0CT0gcGVyZl9ldmVudF9fcHJvY2Vzc19leGl0LAogCS5mb3JrCT0gcGVyZl9ldmVudF9fcHJvY2Vzc19mb3JrLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jCmluZGV4IGRlOTljYTEuLjg0ZGYyZGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1pbmplY3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4taW5qZWN0LmMKQEAgLTIxNyw4ICsyMTcsNyBAQAogCQlnb3RvIHJlcGlwZTsKIAl9CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAotCQkJICAgICAgc2FtcGxlLT5pcCwgJmFsKTsKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLCBzYW1wbGUtPmlwLCAmYWwpOwogCiAJaWYgKGFsLm1hcCAhPSBOVUxMKSB7CiAJCWlmICghYWwubWFwLT5kc28tPmhpdCkgewpAQCAtNDEwLDYgKzQwOSw3IEBACiAJCQkudHJhY2luZ19kYXRhCT0gcGVyZl9ldmVudF9fcmVwaXBlX29wMl9zeW50aCwKIAkJCS5maW5pc2hlZF9yb3VuZAk9IHBlcmZfZXZlbnRfX3JlcGlwZV9vcDJfc3ludGgsCiAJCQkuYnVpbGRfaWQJPSBwZXJmX2V2ZW50X19yZXBpcGVfb3AyX3N5bnRoLAorCQkJLmlkX2luZGV4CT0gcGVyZl9ldmVudF9fcmVwaXBlX29wMl9zeW50aCwKIAkJfSwKIAkJLmlucHV0X25hbWUgID0gIi0iLAogCQkuc2FtcGxlcyA9IExJU1RfSEVBRF9JTklUKGluamVjdC5zYW1wbGVzKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYwppbmRleCBiNjVlYjA1MC4uM2MwZjNkNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWt2bS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rdm0uYwpAQCAtMTEzMiw2ICsxMTMyLDEwIEBACiAJCSItbSIsICIxMDI0IiwKIAkJIi1jIiwgIjEiLAogCX07CisJY29uc3QgY2hhciAqIGNvbnN0IGt2bV9zdGF0X3JlY29yZF91c2FnZVtdID0geworCQkicGVyZiBrdm0gc3RhdCByZWNvcmQgWzxvcHRpb25zPl0iLAorCQlOVUxMCisJfTsKIAljb25zdCBjaGFyICogY29uc3QgKmV2ZW50c190cDsKIAlldmVudHNfdHBfc2l6ZSA9IDA7CiAKQEAgLTExNTksNiArMTE2MywyNyBAQAogCWZvciAoaiA9IDE7IGogPCAodW5zaWduZWQgaW50KWFyZ2M7IGorKywgaSsrKQogCQlyZWNfYXJndltpXSA9IGFyZ3Zbal07CiAKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICdlJywgImV2ZW50IiwgUEFSU0VfT1BUX0hJRERFTik7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAwLCAiZmlsdGVyIiwgUEFSU0VfT1BUX0hJRERFTik7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnUicsICJyYXctc2FtcGxlcyIsIFBBUlNFX09QVF9ISURERU4pOworCisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnRicsICJmcmVxIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsIDAsICJncm91cCIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnZycsIE5VTEwsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAwLCAiY2FsbC1ncmFwaCIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnZCcsICJkYXRhIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICdUJywgInRpbWVzdGFtcCIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnUCcsICJwZXJpb2QiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ24nLCAibm8tc2FtcGxlcyIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnTicsICJuby1idWlsZGlkLWNhY2hlIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICdCJywgIm5vLWJ1aWxkaWQiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ0cnLCAiY2dyb3VwIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKwlzZXRfb3B0aW9uX2ZsYWcocmVjb3JkX29wdGlvbnMsICdiJywgImJyYW5jaC1hbnkiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgJ2onLCAiYnJhbmNoLWZpbHRlciIsIFBBUlNFX09QVF9ESVNBQkxFRCk7CisJc2V0X29wdGlvbl9mbGFnKHJlY29yZF9vcHRpb25zLCAnVycsICJ3ZWlnaHQiLCBQQVJTRV9PUFRfRElTQUJMRUQpOworCXNldF9vcHRpb25fZmxhZyhyZWNvcmRfb3B0aW9ucywgMCwgInRyYW5zYWN0aW9uIiwgUEFSU0VfT1BUX0RJU0FCTEVEKTsKKworCXJlY29yZF91c2FnZSA9IGt2bV9zdGF0X3JlY29yZF91c2FnZTsKIAlyZXR1cm4gY21kX3JlY29yZChpLCByZWNfYXJndiwgTlVMTCk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMKaW5kZXggN2FmMjZhYy4uOTIxYmI2OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAlib29sIHNob3dfZnVuY3M7CiAJYm9vbCBtb2RfZXZlbnRzOwogCWJvb2wgdXByb2JlczsKKwlib29sIHF1aWV0OwogCWludCBuZXZlbnRzOwogCXN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50IGV2ZW50c1tNQVhfUFJPQkVTXTsKIAlzdHJ1Y3Qgc3RybGlzdCAqZGVsbGlzdDsKQEAgLTMxMiw5ICszMTMsMTEgQEAKICNlbmRpZgogCQlOVUxMCiB9OwotCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCU9QVF9JTkNSKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKIAkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgcGFyc2VkIGFyZ3VtZW50cywgZXRjKSIpLAorCU9QVF9CT09MRUFOKCdxJywgInF1aWV0IiwgJnBhcmFtcy5xdWlldCwKKwkJICAgICJiZSBxdWlldCAoZG8gbm90IHNob3cgYW55IG1lc2FnZXMpIiksCiAJT1BUX0JPT0xFQU4oJ2wnLCAibGlzdCIsICZwYXJhbXMubGlzdF9ldmVudHMsCiAJCSAgICAibGlzdCB1cCBjdXJyZW50IHByb2JlIGV2ZW50cyIpLAogCU9QVF9DQUxMQkFDSygnZCcsICJkZWwiLCBOVUxMLCAiW0dST1VQOl1FVkVOVCIsICJkZWxldGUgYSBwcm9iZSBldmVudC4iLApAQCAtMzgyLDYgKzM4NSwxNCBAQAogCX07CiAJaW50IHJldDsKIAorCXNldF9vcHRpb25fZmxhZyhvcHRpb25zLCAnYScsICJhZGQiLCBQQVJTRV9PUFRfRVhDTFVTSVZFKTsKKwlzZXRfb3B0aW9uX2ZsYWcob3B0aW9ucywgJ2QnLCAiZGVsIiwgUEFSU0VfT1BUX0VYQ0xVU0lWRSk7CisJc2V0X29wdGlvbl9mbGFnKG9wdGlvbnMsICdsJywgImxpc3QiLCBQQVJTRV9PUFRfRVhDTFVTSVZFKTsKKyNpZmRlZiBIQVZFX0RXQVJGX1NVUFBPUlQKKwlzZXRfb3B0aW9uX2ZsYWcob3B0aW9ucywgJ0wnLCAibGluZSIsIFBBUlNFX09QVF9FWENMVVNJVkUpOworCXNldF9vcHRpb25fZmxhZyhvcHRpb25zLCAnVicsICJ2YXJzIiwgUEFSU0VfT1BUX0VYQ0xVU0lWRSk7CisjZW5kaWYKKwogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHByb2JlX3VzYWdlLAogCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAlpZiAoYXJnYyA+IDApIHsKQEAgLTM5Niw2ICs0MDcsMTQgQEAKIAkJfQogCX0KIAorCWlmIChwYXJhbXMucXVpZXQpIHsKKwkJaWYgKHZlcmJvc2UgIT0gMCkgeworCQkJcHJfZXJyKCIgIEVycm9yOiAtdiBhbmQgLXEgYXJlIGV4Y2x1c2l2ZS5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdmVyYm9zZSA9IC0xOworCX0KKwogCWlmIChwYXJhbXMubWF4X3Byb2JlX3BvaW50cyA9PSAwKQogCQlwYXJhbXMubWF4X3Byb2JlX3BvaW50cyA9IE1BWF9QUk9CRVM7CiAKQEAgLTQwOSwyMiArNDI4LDYgQEAKIAlzeW1ib2xfY29uZi50cnlfdm1saW51eF9wYXRoID0gKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA9PSBOVUxMKTsKIAogCWlmIChwYXJhbXMubGlzdF9ldmVudHMpIHsKLQkJaWYgKHBhcmFtcy5tb2RfZXZlbnRzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLWFkZC8tLWRlbC5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQotCQlpZiAocGFyYW1zLnNob3dfbGluZXMpIHsKLQkJCXByX2VycigiICBFcnJvcjogRG9uJ3QgdXNlIC0tbGlzdCB3aXRoIC0tbGluZS5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQotCQlpZiAocGFyYW1zLnNob3dfdmFycykgewotCQkJcHJfZXJyKCIgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLXZhcnMuXG4iKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KLQkJaWYgKHBhcmFtcy5zaG93X2Z1bmNzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLWZ1bmNzLlxuIik7Ci0JCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwotCQl9CiAJCWlmIChwYXJhbXMudXByb2JlcykgewogCQkJcHJfd2FybmluZygiICBFcnJvcjogRG9uJ3QgdXNlIC0tbGlzdCB3aXRoIC0tZXhlYy5cbiIpOwogCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKQEAgLTQzNSwxOSArNDM4LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKHBhcmFtcy5zaG93X2Z1bmNzKSB7Ci0JCWlmIChwYXJhbXMubmV2ZW50cyAhPSAwIHx8IHBhcmFtcy5kZWxsaXN0KSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWZ1bmNzIHdpdGgiCi0JCQkgICAgICAgIiAtLWFkZC8tLWRlbC5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQotCQlpZiAocGFyYW1zLnNob3dfbGluZXMpIHsKLQkJCXByX2VycigiICBFcnJvcjogRG9uJ3QgdXNlIC0tZnVuY3Mgd2l0aCAtLWxpbmUuXG4iKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KLQkJaWYgKHBhcmFtcy5zaG93X3ZhcnMpIHsKLQkJCXByX2VycigiICBFcnJvcjogRG9uJ3QgdXNlIC0tZnVuY3Mgd2l0aCAtLXZhcnMuXG4iKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KIAkJaWYgKCFwYXJhbXMuZmlsdGVyKQogCQkJcGFyYW1zLmZpbHRlciA9IHN0cmZpbHRlcl9fbmV3KERFRkFVTFRfRlVOQ19GSUxURVIsCiAJCQkJCQkgICAgICAgTlVMTCk7CkBAIC00NjIsMTYgKzQ1Miw2IEBACiAKICNpZmRlZiBIQVZFX0RXQVJGX1NVUFBPUlQKIAlpZiAocGFyYW1zLnNob3dfbGluZXMpIHsKLQkJaWYgKHBhcmFtcy5tb2RfZXZlbnRzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpbmUgd2l0aCIKLQkJCSAgICAgICAiIC0tYWRkLy0tZGVsLlxuIik7Ci0JCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwotCQl9Ci0JCWlmIChwYXJhbXMuc2hvd192YXJzKSB7Ci0JCQlwcl9lcnIoIiBFcnJvcjogRG9uJ3QgdXNlIC0tbGluZSB3aXRoIC0tdmFycy5cbiIpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQotCiAJCXJldCA9IHNob3dfbGluZV9yYW5nZSgmcGFyYW1zLmxpbmVfcmFuZ2UsIHBhcmFtcy50YXJnZXQsCiAJCQkJICAgICAgcGFyYW1zLnVwcm9iZXMpOwogCQlpZiAocmV0IDwgMCkKQEAgLTQ3OSwxMSArNDU5LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKHBhcmFtcy5zaG93X3ZhcnMpIHsKLQkJaWYgKHBhcmFtcy5tb2RfZXZlbnRzKSB7Ci0JCQlwcl9lcnIoIiAgRXJyb3I6IERvbid0IHVzZSAtLXZhcnMgd2l0aCIKLQkJCSAgICAgICAiIC0tYWRkLy0tZGVsLlxuIik7Ci0JCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwotCQl9CiAJCWlmICghcGFyYW1zLmZpbHRlcikKIAkJCXBhcmFtcy5maWx0ZXIgPSBzdHJmaWx0ZXJfX25ldyhERUZBVUxUX1ZBUl9GSUxURVIsCiAJCQkJCQkgICAgICAgTlVMTCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggMjU4M2E5Yi4uODY0OGM2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtMjAwLDYgKzIwMCwxNyBAQAogCWlmIChzaXplID09IDApCiAJCXJldHVybiAwOwogCisJLyoKKwkgKiBEdXJpbmcgdGhpcyBwcm9jZXNzLCBpdCdsbCBsb2FkIGtlcm5lbCBtYXAgYW5kIHJlcGxhY2UgdGhlCisJICogZHNvLT5sb25nX25hbWUgdG8gYSByZWFsIHBhdGhuYW1lIGl0IGZvdW5kLiAgSW4gdGhpcyBjYXNlCisJICogd2UgcHJlZmVyIHRoZSB2bWxpbnV4IHBhdGggbGlrZQorCSAqICAgL2xpYi9tb2R1bGVzLzMuMTYuNC9idWlsZC92bWxpbnV4CisJICoKKwkgKiByYXRoZXIgdGhhbiBidWlsZC1pZCBwYXRoIChpbiBkZWJ1ZyBkaXJlY3RvcnkpLgorCSAqICAgJEhPTUUvLmRlYnVnLy5idWlsZC1pZC9mMC82ZTE3YWE1MGFkZjRkMDBiODg5MjVlMDM3NzVkZTEwNzYxMTU1MQorCSAqLworCXN5bWJvbF9jb25mLmlnbm9yZV92bWxpbnV4X2J1aWxkaWQgPSB0cnVlOworCiAJcmV0dXJuIF9fcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCBzdGFydCwKIAkJCQkJICAgICAgc2l6ZSAtIHN0YXJ0LAogCQkJCQkgICAgICBzaXplLCAmYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMpOwpAQCAtNjgwLDExICs2OTEsMTIgQEAKIAlyZXR1cm4gcGVyZl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVjb3JkX3VzYWdlW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IF9fcmVjb3JkX3VzYWdlW10gPSB7CiAJInBlcmYgcmVjb3JkIFs8b3B0aW9ucz5dIFs8Y29tbWFuZD5dIiwKIAkicGVyZiByZWNvcmQgWzxvcHRpb25zPl0gLS0gPGNvbW1hbmQ+IFs8b3B0aW9ucz5dIiwKIAlOVUxMCiB9OworY29uc3QgY2hhciAqIGNvbnN0ICpyZWNvcmRfdXNhZ2UgPSBfX3JlY29yZF91c2FnZTsKIAogLyoKICAqIFhYWCBJZGVhbGx5IHdvdWxkIGJlIGxvY2FsIHRvIGNtZF9yZWNvcmQoKSBhbmQgcGFzc2VkIHRvIGEgcmVjb3JkX19uZXcKQEAgLTcyNSw3ICs3MzcsNyBAQAogICogcGVyZl9ldmxpc3RfX3ByZXBhcmVfd29ya2xvYWQsIGV0YyBpbnN0ZWFkIG9mIGZvcmsrZXhlYydpbiAncGVyZiByZWNvcmQnLAogICogdXNpbmcgcGlwZXMsIGV0Yy4KICAqLwotY29uc3Qgc3RydWN0IG9wdGlvbiByZWNvcmRfb3B0aW9uc1tdID0geworc3RydWN0IG9wdGlvbiBfX3JlY29yZF9vcHRpb25zW10gPSB7CiAJT1BUX0NBTExCQUNLKCdlJywgImV2ZW50IiwgJnJlY29yZC5ldmxpc3QsICJldmVudCIsCiAJCSAgICAgImV2ZW50IHNlbGVjdG9yLiB1c2UgJ3BlcmYgbGlzdCcgdG8gbGlzdCBhdmFpbGFibGUgZXZlbnRzIiwKIAkJICAgICBwYXJzZV9ldmVudHNfb3B0aW9uKSwKQEAgLTc5OSw5ICs4MTEsMTMgQEAKIAkJICAgICJzYW1wbGUgdHJhbnNhY3Rpb24gZmxhZ3MgKHNwZWNpYWwgZXZlbnRzIG9ubHkpIiksCiAJT1BUX0JPT0xFQU4oMCwgInBlci10aHJlYWQiLCAmcmVjb3JkLm9wdHMudGFyZ2V0LnBlcl90aHJlYWQsCiAJCSAgICAidXNlIHBlci10aHJlYWQgbW1hcHMiKSwKKwlPUFRfQk9PTEVBTignSScsICJpbnRyLXJlZ3MiLCAmcmVjb3JkLm9wdHMuc2FtcGxlX2ludHJfcmVncywKKwkJICAgICJTYW1wbGUgbWFjaGluZSByZWdpc3RlcnMgb24gaW50ZXJydXB0IiksCiAJT1BUX0VORCgpCiB9OwogCitzdHJ1Y3Qgb3B0aW9uICpyZWNvcmRfb3B0aW9ucyA9IF9fcmVjb3JkX29wdGlvbnM7CisKIGludCBjbWRfcmVjb3JkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fbWF5YmVfdW51c2VkKQogewogCWludCBlcnIgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCmluZGV4IDE0MGE2Y2QuLjM5MzY3NjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKQEAgLTIyNiw4ICsyMjYsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKLQkJCXVpX19lcnJvcigiU2VsZWN0ZWQgLWcgYnV0IG5vIGNhbGxjaGFpbiBkYXRhLiBEaWQgIgotCQkJCSAgICAieW91IGNhbGwgJ3BlcmYgcmVjb3JkJyB3aXRob3V0IC1nP1xuIik7CisJCQl1aV9fZXJyb3IoIlNlbGVjdGVkIC1nIG9yIC0tYnJhbmNoLWhpc3RvcnkgYnV0IG5vICIKKwkJCQkgICJjYWxsY2hhaW4gZGF0YS4gRGlkXG4iCisJCQkJICAieW91IGNhbGwgJ3BlcmYgcmVjb3JkJyB3aXRob3V0IC1nP1xuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9IGVsc2UgaWYgKCFyZXAtPmRvbnRfdXNlX2NhbGxjaGFpbnMgJiYKQEAgLTU3NSw2ICs1NzYsNyBAQAogCXN0cnVjdCBzdGF0IHN0OwogCWJvb2wgaGFzX2JyX3N0YWNrID0gZmFsc2U7CiAJaW50IGJyYW5jaF9tb2RlID0gLTE7CisJYm9vbCBicmFuY2hfY2FsbF9tb2RlID0gZmFsc2U7CiAJY2hhciBjYWxsY2hhaW5fZGVmYXVsdF9vcHRbXSA9ICJmcmFjdGFsLDAuNSxjYWxsZWUiOwogCWNvbnN0IGNoYXIgKiBjb25zdCByZXBvcnRfdXNhZ2VbXSA9IHsKIAkJInBlcmYgcmVwb3J0IFs8b3B0aW9ucz5dIiwKQEAgLTYzNyw4ICs2MzksOCBAQAogCQkgICAicmVnZXggZmlsdGVyIHRvIGlkZW50aWZ5IHBhcmVudCwgc2VlOiAnLS1zb3J0IHBhcmVudCciKSwKIAlPUFRfQk9PTEVBTigneCcsICJleGNsdWRlLW90aGVyIiwgJnN5bWJvbF9jb25mLmV4Y2x1ZGVfb3RoZXIsCiAJCSAgICAiT25seSBkaXNwbGF5IGVudHJpZXMgd2l0aCBwYXJlbnQtbWF0Y2giKSwKLQlPUFRfQ0FMTEJBQ0tfREVGQVVMVCgnZycsICJjYWxsLWdyYXBoIiwgJnJlcG9ydCwgIm91dHB1dF90eXBlLG1pbl9wZXJjZW50WyxwcmludF9saW1pdF0sY2FsbF9vcmRlciIsCi0JCSAgICAgIkRpc3BsYXkgY2FsbGNoYWlucyB1c2luZyBvdXRwdXRfdHlwZSAoZ3JhcGgsIGZsYXQsIGZyYWN0YWwsIG9yIG5vbmUpICwgbWluIHBlcmNlbnQgdGhyZXNob2xkLCBvcHRpb25hbCBwcmludCBsaW1pdCwgY2FsbGNoYWluIG9yZGVyLCBrZXkgKGZ1bmN0aW9uIG9yIGFkZHJlc3MpLiAiCisJT1BUX0NBTExCQUNLX0RFRkFVTFQoJ2cnLCAiY2FsbC1ncmFwaCIsICZyZXBvcnQsICJvdXRwdXRfdHlwZSxtaW5fcGVyY2VudFsscHJpbnRfbGltaXRdLGNhbGxfb3JkZXJbLGJyYW5jaF0iLAorCQkgICAgICJEaXNwbGF5IGNhbGxjaGFpbnMgdXNpbmcgb3V0cHV0X3R5cGUgKGdyYXBoLCBmbGF0LCBmcmFjdGFsLCBvciBub25lKSAsIG1pbiBwZXJjZW50IHRocmVzaG9sZCwgb3B0aW9uYWwgcHJpbnQgbGltaXQsIGNhbGxjaGFpbiBvcmRlciwga2V5IChmdW5jdGlvbiBvciBhZGRyZXNzKSwgYWRkIGJyYW5jaGVzLiAiCiAJCSAgICAgIkRlZmF1bHQ6IGZyYWN0YWwsMC41LGNhbGxlZSxmdW5jdGlvbiIsICZyZXBvcnRfcGFyc2VfY2FsbGNoYWluX29wdCwgY2FsbGNoYWluX2RlZmF1bHRfb3B0KSwKIAlPUFRfQk9PTEVBTigwLCAiY2hpbGRyZW4iLCAmc3ltYm9sX2NvbmYuY3VtdWxhdGVfY2FsbGNoYWluLAogCQkgICAgIkFjY3VtdWxhdGUgY2FsbGNoYWlucyBvZiBjaGlsZHJlbiBhbmQgc2hvdyB0b3RhbCBvdmVyaGVhZCBhcyB3ZWxsIiksCkBAIC02ODQsNyArNjg2LDEwIEBACiAJT1BUX0JPT0xFQU4oMCwgImdyb3VwIiwgJnN5bWJvbF9jb25mLmV2ZW50X2dyb3VwLAogCQkgICAgIlNob3cgZXZlbnQgZ3JvdXAgaW5mb3JtYXRpb24gdG9nZXRoZXIiKSwKIAlPUFRfQ0FMTEJBQ0tfTk9PUFQoJ2InLCAiYnJhbmNoLXN0YWNrIiwgJmJyYW5jaF9tb2RlLCAiIiwKLQkJICAgICJ1c2UgYnJhbmNoIHJlY29yZHMgZm9yIGhpc3RvZ3JhbSBmaWxsaW5nIiwgcGFyc2VfYnJhbmNoX21vZGUpLAorCQkgICAgInVzZSBicmFuY2ggcmVjb3JkcyBmb3IgcGVyIGJyYW5jaCBoaXN0b2dyYW0gZmlsbGluZyIsCisJCSAgICBwYXJzZV9icmFuY2hfbW9kZSksCisJT1BUX0JPT0xFQU4oMCwgImJyYW5jaC1oaXN0b3J5IiwgJmJyYW5jaF9jYWxsX21vZGUsCisJCSAgICAiYWRkIGxhc3QgYnJhbmNoIHJlY29yZHMgdG8gY2FsbCBoaXN0b3J5IiksCiAJT1BUX1NUUklORygwLCAib2JqZHVtcCIsICZvYmpkdW1wX3BhdGgsICJwYXRoIiwKIAkJICAgIm9iamR1bXAgYmluYXJ5IHRvIHVzZSBmb3IgZGlzYXNzZW1ibHkgYW5kIGFubm90YXRpb25zIiksCiAJT1BUX0JPT0xFQU4oMCwgImRlbWFuZ2xlIiwgJnN5bWJvbF9jb25mLmRlbWFuZ2xlLApAQCAtNzQ1LDEwICs3NTAsMjQgQEAKIAloYXNfYnJfc3RhY2sgPSBwZXJmX2hlYWRlcl9faGFzX2ZlYXQoJnNlc3Npb24tPmhlYWRlciwKIAkJCQkJICAgICBIRUFERVJfQlJBTkNIX1NUQUNLKTsKIAotCWlmICgoYnJhbmNoX21vZGUgPT0gLTEgJiYgaGFzX2JyX3N0YWNrKSB8fCBicmFuY2hfbW9kZSA9PSAxKSB7CisJLyoKKwkgKiBCcmFuY2ggbW9kZSBpcyBhIHRyaXN0YXRlOgorCSAqIC0xIG1lYW5zIGRlZmF1bHQsIHNvIGRlY2lkZSBiYXNlZCBvbiB0aGUgZmlsZSBoYXZpbmcgYnJhbmNoIGRhdGEuCisJICogMC8xIG1lYW5zIHRoZSB1c2VyIGNob3NlIGEgbW9kZS4KKwkgKi8KKwlpZiAoKChicmFuY2hfbW9kZSA9PSAtMSAmJiBoYXNfYnJfc3RhY2spIHx8IGJyYW5jaF9tb2RlID09IDEpICYmCisJICAgIGJyYW5jaF9jYWxsX21vZGUgPT0gLTEpIHsKIAkJc29ydF9fbW9kZSA9IFNPUlRfTU9ERV9fQlJBTkNIOwogCQlzeW1ib2xfY29uZi5jdW11bGF0ZV9jYWxsY2hhaW4gPSBmYWxzZTsKIAl9CisJaWYgKGJyYW5jaF9jYWxsX21vZGUpIHsKKwkJY2FsbGNoYWluX3BhcmFtLmtleSA9IENDS0VZX0FERFJFU1M7CisJCWNhbGxjaGFpbl9wYXJhbS5icmFuY2hfY2FsbHN0YWNrID0gMTsKKwkJc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiA9IHRydWU7CisJCWNhbGxjaGFpbl9yZWdpc3Rlcl9wYXJhbSgmY2FsbGNoYWluX3BhcmFtKTsKKwkJaWYgKHNvcnRfb3JkZXIgPT0gTlVMTCkKKwkJCXNvcnRfb3JkZXIgPSAic3JjbGluZSxzeW1ib2wsZHNvIjsKKwl9CiAKIAlpZiAocmVwb3J0Lm1lbV9tb2RlKSB7CiAJCWlmIChzb3J0X19tb2RlID09IFNPUlRfTU9ERV9fQlJBTkNIKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKaW5kZXggOTcwOGExMi4uY2UzMDRkZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYwpAQCAtMjMsNyArMjMsNiBAQAogc3RhdGljIGJvb2wJCQlkZWJ1Z19tb2RlOwogc3RhdGljIHU2NAkJCWxhc3RfdGltZXN0YW1wOwogc3RhdGljIHU2NAkJCW5yX3Vub3JkZXJlZDsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgb3B0aW9uCXJlY29yZF9vcHRpb25zW107CiBzdGF0aWMgYm9vbAkJCW5vX2NhbGxjaGFpbjsKIHN0YXRpYyBib29sCQkJbGF0ZW5jeV9mb3JtYXQ7CiBzdGF0aWMgYm9vbAkJCXN5c3RlbV93aWRlOwpAQCAtMzc5LDcgKzM3OCw2IEBACiAKIHN0YXRpYyB2b2lkIHByaW50X3NhbXBsZV9hZGRyKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKLQkJCSAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCiAJCQkgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCSAgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cikKIHsKQEAgLTM5MCw3ICszODgsNyBAQAogCWlmICghc2FtcGxlX2FkZHJfY29ycmVsYXRlc19zeW0oYXR0cikpCiAJCXJldHVybjsKIAotCXBlcmZfZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlX2FkZHIoZXZlbnQsIHNhbXBsZSwgbWFjaGluZSwgdGhyZWFkLCAmYWwpOworCXBlcmZfZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlX2FkZHIoZXZlbnQsIHNhbXBsZSwgdGhyZWFkLCAmYWwpOwogCiAJaWYgKFBSSU5UX0ZJRUxEKFNZTSkpIHsKIAkJcHJpbnRmKCIgIik7CkBAIC00MzgsNyArNDM2LDcgQEAKIAkgICAgKChldnNlbC0+YXR0ci5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpICYmCiAJICAgICAhb3V0cHV0W2F0dHItPnR5cGVdLnVzZXJfc2V0KSkgewogCQlwcmludGYoIiA9PiAiKTsKLQkJcHJpbnRfc2FtcGxlX2FkZHIoZXZlbnQsIHNhbXBsZSwgYWwtPm1hY2hpbmUsIHRocmVhZCwgYXR0cik7CisJCXByaW50X3NhbXBsZV9hZGRyKGV2ZW50LCBzYW1wbGUsIHRocmVhZCwgYXR0cik7CiAJfQogCiAJaWYgKHByaW50X3NyY2xpbmVfbGFzdCkKQEAgLTQ3NSw3ICs0NzMsNyBAQAogCQlldmVudF9mb3JtYXRfX3ByaW50KGV2c2VsLT50cF9mb3JtYXQsIHNhbXBsZS0+Y3B1LAogCQkJCSAgICBzYW1wbGUtPnJhd19kYXRhLCBzYW1wbGUtPnJhd19zaXplKTsKIAlpZiAoUFJJTlRfRklFTEQoQUREUikpCi0JCXByaW50X3NhbXBsZV9hZGRyKGV2ZW50LCBzYW1wbGUsIGFsLT5tYWNoaW5lLCB0aHJlYWQsIGF0dHIpOworCQlwcmludF9zYW1wbGVfYWRkcihldmVudCwgc2FtcGxlLCB0aHJlYWQsIGF0dHIpOwogCiAJaWYgKFBSSU5UX0ZJRUxEKElQKSkgewogCQlpZiAoIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwppbmRleCAwNTVjZTkyLi44OTEwODYzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKQEAgLTM4OCwyMCArMzg4LDEwMiBAQAogCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfaXRsYl9jYWNoZV9zdGF0c1swXSwgY291bnRbMF0pOwogfQogCitzdGF0aWMgdm9pZCB6ZXJvX3Blcl9wa2coc3RydWN0IHBlcmZfZXZzZWwgKmNvdW50ZXIpCit7CisJaWYgKGNvdW50ZXItPnBlcl9wa2dfbWFzaykKKwkJbWVtc2V0KGNvdW50ZXItPnBlcl9wa2dfbWFzaywgMCwgTUFYX05SX0NQVVMpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3Blcl9wa2coc3RydWN0IHBlcmZfZXZzZWwgKmNvdW50ZXIsIGludCBjcHUsIGJvb2wgKnNraXApCit7CisJdW5zaWduZWQgbG9uZyAqbWFzayA9IGNvdW50ZXItPnBlcl9wa2dfbWFzazsKKwlzdHJ1Y3QgY3B1X21hcCAqY3B1cyA9IHBlcmZfZXZzZWxfX2NwdXMoY291bnRlcik7CisJaW50IHM7CisKKwkqc2tpcCA9IGZhbHNlOworCisJaWYgKCFjb3VudGVyLT5wZXJfcGtnKQorCQlyZXR1cm4gMDsKKworCWlmIChjcHVfbWFwX19lbXB0eShjcHVzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW1hc2spIHsKKwkJbWFzayA9IHphbGxvYyhNQVhfTlJfQ1BVUyk7CisJCWlmICghbWFzaykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWNvdW50ZXItPnBlcl9wa2dfbWFzayA9IG1hc2s7CisJfQorCisJcyA9IGNwdV9tYXBfX2dldF9zb2NrZXQoY3B1cywgY3B1KTsKKwlpZiAocyA8IDApCisJCXJldHVybiAtMTsKKworCSpza2lwID0gdGVzdF9hbmRfc2V0X2JpdChzLCBtYXNrKSA9PSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfY2Ioc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgY3B1LCBpbnQgdGhyZWFkIF9fbWF5YmVfdW51c2VkLAorCQkgICBzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICpjb3VudCkKK3sKKwlzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICphZ2dyID0gJmV2c2VsLT5jb3VudHMtPmFnZ3I7CisJc3RhdGljIHN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgemVybzsKKwlib29sIHNraXAgPSBmYWxzZTsKKworCWlmIChjaGVja19wZXJfcGtnKGV2c2VsLCBjcHUsICZza2lwKSkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHBlci1wa2cgY291bnRlclxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc2tpcCkKKwkJY291bnQgPSAmemVybzsKKworCXN3aXRjaCAoYWdncl9tb2RlKSB7CisJY2FzZSBBR0dSX0NPUkU6CisJY2FzZSBBR0dSX1NPQ0tFVDoKKwljYXNlIEFHR1JfTk9ORToKKwkJaWYgKCFldnNlbC0+c25hcHNob3QpCisJCQlwZXJmX2V2c2VsX19jb21wdXRlX2RlbHRhcyhldnNlbCwgY3B1LCBjb3VudCk7CisJCXBlcmZfY291bnRzX3ZhbHVlc19fc2NhbGUoY291bnQsIHNjYWxlLCBOVUxMKTsKKwkJZXZzZWwtPmNvdW50cy0+Y3B1W2NwdV0gPSAqY291bnQ7CisJCXVwZGF0ZV9zaGFkb3dfc3RhdHMoZXZzZWwsIGNvdW50LT52YWx1ZXMpOworCQlicmVhazsKKwljYXNlIEFHR1JfR0xPQkFMOgorCQlhZ2dyLT52YWwgKz0gY291bnQtPnZhbDsKKwkJaWYgKHNjYWxlKSB7CisJCQlhZ2dyLT5lbmEgKz0gY291bnQtPmVuYTsKKwkJCWFnZ3ItPnJ1biArPSBjb3VudC0+cnVuOworCQl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyKTsKKwogLyoKICAqIFJlYWQgb3V0IHRoZSByZXN1bHRzIG9mIGEgc2luZ2xlIGNvdW50ZXI6CiAgKiBhZ2dyZWdhdGUgY291bnRzIGFjcm9zcyBDUFVzIGluIHN5c3RlbS13aWRlIG1vZGUKICAqLwogc3RhdGljIGludCByZWFkX2NvdW50ZXJfYWdncihzdHJ1Y3QgcGVyZl9ldnNlbCAqY291bnRlcikKIHsKKwlzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICphZ2dyID0gJmNvdW50ZXItPmNvdW50cy0+YWdncjsKIAlzdHJ1Y3QgcGVyZl9zdGF0ICpwcyA9IGNvdW50ZXItPnByaXY7CiAJdTY0ICpjb3VudCA9IGNvdW50ZXItPmNvdW50cy0+YWdnci52YWx1ZXM7CiAJaW50IGk7CiAKLQlpZiAoX19wZXJmX2V2c2VsX19yZWFkKGNvdW50ZXIsIHBlcmZfZXZzZWxfX25yX2NwdXMoY291bnRlciksCi0JCQkgICAgICAgdGhyZWFkX21hcF9fbnIoZXZzZWxfbGlzdC0+dGhyZWFkcyksIHNjYWxlKSA8IDApCisJYWdnci0+dmFsID0gYWdnci0+ZW5hID0gYWdnci0+cnVuID0gMDsKKworCWlmIChyZWFkX2NvdW50ZXIoY291bnRlcikpCiAJCXJldHVybiAtMTsKIAorCWlmICghY291bnRlci0+c25hcHNob3QpCisJCXBlcmZfZXZzZWxfX2NvbXB1dGVfZGVsdGFzKGNvdW50ZXIsIC0xLCBhZ2dyKTsKKwlwZXJmX2NvdW50c192YWx1ZXNfX3NjYWxlKGFnZ3IsIHNjYWxlLCAmY291bnRlci0+Y291bnRzLT5zY2FsZWQpOworCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkJdXBkYXRlX3N0YXRzKCZwcy0+cmVzX3N0YXRzW2ldLCBjb3VudFtpXSk7CiAKQEAgLTQyNCwxNiArNTA2LDIxIEBACiAgKi8KIHN0YXRpYyBpbnQgcmVhZF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyKQogewotCXU2NCAqY291bnQ7Ci0JaW50IGNwdTsKKwlpbnQgbnRocmVhZHMgPSB0aHJlYWRfbWFwX19ucihldnNlbF9saXN0LT50aHJlYWRzKTsKKwlpbnQgbmNwdXMgPSBwZXJmX2V2c2VsX19ucl9jcHVzKGNvdW50ZXIpOworCWludCBjcHUsIHRocmVhZDsKIAotCWZvciAoY3B1ID0gMDsgY3B1IDwgcGVyZl9ldnNlbF9fbnJfY3B1cyhjb3VudGVyKTsgY3B1KyspIHsKLQkJaWYgKF9fcGVyZl9ldnNlbF9fcmVhZF9vbl9jcHUoY291bnRlciwgY3B1LCAwLCBzY2FsZSkgPCAwKQotCQkJcmV0dXJuIC0xOworCWlmIChjb3VudGVyLT5zeXN0ZW1fd2lkZSkKKwkJbnRocmVhZHMgPSAxOwogCi0JCWNvdW50ID0gY291bnRlci0+Y291bnRzLT5jcHVbY3B1XS52YWx1ZXM7CisJaWYgKGNvdW50ZXItPnBlcl9wa2cpCisJCXplcm9fcGVyX3BrZyhjb3VudGVyKTsKIAotCQl1cGRhdGVfc2hhZG93X3N0YXRzKGNvdW50ZXIsIGNvdW50KTsKKwlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IG50aHJlYWRzOyB0aHJlYWQrKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IG5jcHVzOyBjcHUrKykgeworCQkJaWYgKHBlcmZfZXZzZWxfX3JlYWRfY2IoY291bnRlciwgY3B1LCB0aHJlYWQsIHJlYWRfY2IpKQorCQkJCXJldHVybiAtMTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCmluZGV4IDM1YjQyNWIuLmYzYmIxYTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKQEAgLTUyOCw3ICs1MjgsNyBAQAogCQl9CiAKIAkJdGFsLmZpbHRlcmVkID0gMDsKLQkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oYWwudGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLAorCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihhbC50aHJlYWQsIGNwdW1vZGUsCiAJCQkJCSAgIE1BUF9fRlVOQ1RJT04sIGlwLCAmdGFsKTsKIAogCQlpZiAodGFsLnN5bSkKQEAgLTE5NjMsNyArMTk2Myw3IEBACiAJCU5VTEwKIAl9OwogCi0JY29uc3Qgc3RydWN0IG9wdGlvbiByZWNvcmRfb3B0aW9uc1tdID0geworCWNvbnN0IHN0cnVjdCBvcHRpb24gdGltZWNoYXJ0X3JlY29yZF9vcHRpb25zW10gPSB7CiAJT1BUX0JPT0xFQU4oJ1AnLCAicG93ZXItb25seSIsICZ0Y2hhcnQucG93ZXJfb25seSwgIm91dHB1dCBwb3dlciBkYXRhIG9ubHkiKSwKIAlPUFRfQk9PTEVBTignVCcsICJ0YXNrcy1vbmx5IiwgJnRjaGFydC50YXNrc19vbmx5LAogCQkgICAgIm91dHB1dCBwcm9jZXNzZXMgZGF0YSBvbmx5IiksCkBAIC0xOTcyLDcgKzE5NzIsNyBAQAogCU9QVF9CT09MRUFOKCdnJywgImNhbGxjaGFpbiIsICZ0Y2hhcnQud2l0aF9iYWNrdHJhY2UsICJyZWNvcmQgY2FsbGNoYWluIiksCiAJT1BUX0VORCgpCiAJfTsKLQljb25zdCBjaGFyICogY29uc3QgcmVjb3JkX3VzYWdlW10gPSB7CisJY29uc3QgY2hhciAqIGNvbnN0IHRpbWVjaGFydF9yZWNvcmRfdXNhZ2VbXSA9IHsKIAkJInBlcmYgdGltZWNoYXJ0IHJlY29yZCBbPG9wdGlvbnM+XSIsCiAJCU5VTEwKIAl9OwpAQCAtMTk4NSw3ICsxOTg1LDggQEAKIAl9CiAKIAlpZiAoYXJnYyAmJiAhc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpIHsKLQkJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcmVjb3JkX29wdGlvbnMsIHJlY29yZF91c2FnZSwKKwkJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgdGltZWNoYXJ0X3JlY29yZF9vcHRpb25zLAorCQkJCSAgICAgdGltZWNoYXJ0X3JlY29yZF91c2FnZSwKIAkJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwogCiAJCWlmICh0Y2hhcnQucG93ZXJfb25seSAmJiB0Y2hhcnQudGFza3Nfb25seSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwppbmRleCBmYjEyNjQ1Li44M2E0ODM1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwpAQCAtMTg0Niw3ICsxODQ2LDcgQEAKIAlpZiAodHJhY2UtPnN1bW1hcnlfb25seSkKIAkJcmV0dXJuIDA7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIHRyYWNlLT5ob3N0LCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAorCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwKIAkJCSAgICAgIHNhbXBsZS0+aXAsICZhbCk7CiAKIAl0cmFjZV9fZnByaW50Zl9lbnRyeV9oZWFkKHRyYWNlLCB0aHJlYWQsIDAsIHNhbXBsZS0+dGltZSwgdHJhY2UtPm91dHB1dCk7CkBAIC0xODU5LDExICsxODU5LDExIEBACiAKIAlmcHJpbnRmKHRyYWNlLT5vdXRwdXQsICJdID0+ICIpOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCB0cmFjZS0+aG9zdCwgY3B1bW9kZSwgTUFQX19WQVJJQUJMRSwKKwl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIGNwdW1vZGUsIE1BUF9fVkFSSUFCTEUsCiAJCQkJICAgc2FtcGxlLT5hZGRyLCAmYWwpOwogCiAJaWYgKCFhbC5tYXApIHsKLQkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCB0cmFjZS0+aG9zdCwgY3B1bW9kZSwKKwkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBjcHVtb2RlLAogCQkJCQkgICBNQVBfX0ZVTkNUSU9OLCBzYW1wbGUtPmFkZHIsICZhbCk7CiAKIAkJaWYgKGFsLm1hcCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKaW5kZXggNThmNjA5MS4uNWQ0YjAzOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKQEAgLTE1MCw3ICsxNTAsNyBAQAogIyBhZGRpbmcgYXNzZW1ibGVyIGZpbGVzIG1pc3NpbmcgdGhlIC5HTlUtc3RhY2sgbGlua2VyIG5vdGUuCiBMREZMQUdTICs9IC1XbCwteixub2V4ZWNzdGFjawogCi1FWFRMSUJTID0gLWxlbGYgLWxwdGhyZWFkIC1scnQgLWxtIC1sZGwKK0VYVExJQlMgPSAtbHB0aHJlYWQgLWxydCAtbG0gLWxkbAogCiBpZm5lcSAoJChPVVRQVVQpLCkKICAgT1VUUFVUX0ZFQVRVUkVTID0gJChPVVRQVVQpY29uZmlnL2ZlYXR1cmUtY2hlY2tzLwpAQCAtMjAwLDcgKzIwMCw4IEBACiAJbGlidW53aW5kCQkJXAogCXN0YWNrcHJvdGVjdG9yLWFsbAkJXAogCXRpbWVyZmQJCQkJXAotCWxpYmR3LWR3YXJmLXVud2luZAorCWxpYmR3LWR3YXJmLXVud2luZAkJXAorCXpsaWIKIAogTElCX0ZFQVRVUkVfVEVTVFMgPQkJCVwKIAlkd2FyZgkJCQlcCkBAIC0yMTQsNyArMjE1LDggQEAKIAlsaWJweXRob24JCQlcCiAJbGlic2xhbmcJCQlcCiAJbGlidW53aW5kCQkJXAotCWxpYmR3LWR3YXJmLXVud2luZAorCWxpYmR3LWR3YXJmLXVud2luZAkJXAorCXpsaWIKIAogVkZfRkVBVFVSRV9URVNUUyA9CQkJXAogCWJhY2t0cmFjZQkJCVwKQEAgLTIzMCw3ICsyMzIsOSBAQAogCWJpb25pYwkJCQlcCiAJbGliZXJ0eQkJCQlcCiAJbGliZXJ0eS16CQkJXAotCWNwbHVzLWRlbWFuZ2xlCisJY3BsdXMtZGVtYW5nbGUJCQlcCisJY29tcGlsZS0zMgkJCVwKKwljb21waWxlLXgzMgogCiAjIFNldCBGRUFUVVJFX0NIRUNLXyhDfExEKUZMQUdTLWFsbCBmb3IgYWxsIENPUkVfRkVBVFVSRV9URVNUUyBmZWF0dXJlcy4KICMgSWYgaW4gdGhlIGZ1dHVyZSB3ZSBuZWVkIHBlci1mZWF0dXJlIGNoZWNrcy9mbGFncyBmb3IgZmVhdHVyZXMgbm90CkBAIC0zNTAsNiArMzU0LDcgQEAKIAogaWZuZGVmIE5PX0xJQkVMRgogICBDRkxBR1MgKz0gLURIQVZFX0xJQkVMRl9TVVBQT1JUCisgIEVYVExJQlMgKz0gLWxlbGYKIAogICBpZmVxICgkKGZlYXR1cmUtbGliZWxmLW1tYXApLCAxKQogICAgIENGTEFHUyArPSAtREhBVkVfTElCRUxGX01NQVBfU1VQUE9SVApAQCAtMzY5LDcgKzM3NCw3IEBACiAgICAgZWxzZQogICAgICAgQ0ZMQUdTICs9IC1ESEFWRV9EV0FSRl9TVVBQT1JUICQoTElCRFdfQ0ZMQUdTKQogICAgICAgTERGTEFHUyArPSAkKExJQkRXX0xERkxBR1MpCi0gICAgICBFWFRMSUJTICs9IC1sZWxmIC1sZHcKKyAgICAgIEVYVExJQlMgKz0gLWxkdwogICAgIGVuZGlmICMgUEVSRl9IQVZFX0RXQVJGX1JFR1MKICAgZW5kaWYgIyBOT19EV0FSRgogZW5kaWYgIyBOT19MSUJFTEYKQEAgLTYwMiw2ICs2MDcsMTUgQEAKICAgQ0ZMQUdTICs9IC1ESEFWRV9MSUJCRkRfU1VQUE9SVAogZW5kaWYKIAoraWZuZGVmIE5PX1pMSUIKKyAgaWZlcSAoJChmZWF0dXJlLXpsaWIpLCAxKQorICAgIENGTEFHUyArPSAtREhBVkVfWkxJQl9TVVBQT1JUCisgICAgRVhUTElCUyArPSAtbHoKKyAgZWxzZQorICAgIE5PX1pMSUIgOj0gMQorICBlbmRpZgorZW5kaWYKKwogaWZuZGVmIE5PX0JBQ0tUUkFDRQogICBpZmVxICgkKGZlYXR1cmUtYmFja3RyYWNlKSwgMSkKICAgICBDRkxBR1MgKz0gLURIQVZFX0JBQ0tUUkFDRV9TVVBQT1JUCkBAIC02MjIsNiArNjM2LDMxIEBACiAgICAgQ0ZMQUdTICs9IC1ESEFWRV9LVk1fU1RBVF9TVVBQT1JUCiBlbmRpZgogCitpZmVxICgke0lTXzY0X0JJVH0sIDEpCisgIGlmbmRlZiBOT19QRVJGX1JFQURfVkRTTzMyCisgICAgJChjYWxsIGZlYXR1cmVfY2hlY2ssY29tcGlsZS0zMikKKyAgICBpZmVxICgkKGZlYXR1cmUtY29tcGlsZS0zMiksIDEpCisgICAgICBDRkxBR1MgKz0gLURIQVZFX1BFUkZfUkVBRF9WRFNPMzIKKyAgICBlbHNlCisgICAgICBOT19QRVJGX1JFQURfVkRTTzMyIDo9IDEKKyAgICBlbmRpZgorICBlbmRpZgorICBpZm5lcSAoJHtJU19YODZfNjR9LCAxKQorICAgIE5PX1BFUkZfUkVBRF9WRFNPWDMyIDo9IDEKKyAgZW5kaWYKKyAgaWZuZGVmIE5PX1BFUkZfUkVBRF9WRFNPWDMyCisgICAgJChjYWxsIGZlYXR1cmVfY2hlY2ssY29tcGlsZS14MzIpCisgICAgaWZlcSAoJChmZWF0dXJlLWNvbXBpbGUteDMyKSwgMSkKKyAgICAgIENGTEFHUyArPSAtREhBVkVfUEVSRl9SRUFEX1ZEU09YMzIKKyAgICBlbHNlCisgICAgICBOT19QRVJGX1JFQURfVkRTT1gzMiA6PSAxCisgICAgZW5kaWYKKyAgZW5kaWYKK2Vsc2UKKyAgTk9fUEVSRl9SRUFEX1ZEU08zMiA6PSAxCisgIE5PX1BFUkZfUkVBRF9WRFNPWDMyIDo9IDEKK2VuZGlmCisKICMgQW1vbmcgdGhlIHZhcmlhYmxlcyBiZWxvdywgdGhlc2U6CiAjICAgcGVyZmV4ZWNkaXIKICMgICB0ZW1wbGF0ZV9kaXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlLmFyY2ggYi90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZS5hcmNoCmluZGV4IDRiMDY3MTkuLjg1MWNkMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlLmFyY2gKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUuYXJjaApAQCAtMjEsMyArMjEsMTEgQEAKICAgICBSQVdfQVJDSCA6PSB4ODZfNjQKICAgZW5kaWYKIGVuZGlmCisKK2lmZXEgKCR7SVNfWDg2XzY0fSwgMSkKKyAgSVNfNjRfQklUIDo9IDEKK2Vsc2UgaWZlcSAoJChBUkNIKSx4ODYpCisgIElTXzY0X0JJVCA6PSAwCitlbHNlCisgIElTXzY0X0JJVCA6PSAkKHNoZWxsIGVjaG8gX19MUDY0X18gfCAke0NDfSAke0NGTEFHU30gLUUgLXggYyAtIHwgdGFpbCAtbiAxKQorZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvTWFrZWZpbGUKaW5kZXggNzJhYjI5OC4uNTNmMTliNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvTWFrZWZpbGUKQEAgLTI3LDcgKzI3LDEwIEBACiAJdGVzdC1saWJ1bndpbmQtZGVidWctZnJhbWUuYmluCVwKIAl0ZXN0LXN0YWNrcHJvdGVjdG9yLWFsbC5iaW4JXAogCXRlc3QtdGltZXJmZC5iaW4JCVwKLQl0ZXN0LWxpYmR3LWR3YXJmLXVud2luZC5iaW4KKwl0ZXN0LWxpYmR3LWR3YXJmLXVud2luZC5iaW4JXAorCXRlc3QtY29tcGlsZS0zMi5iaW4JCVwKKwl0ZXN0LWNvbXBpbGUteDMyLmJpbgkJXAorCXRlc3QtemxpYi5iaW4KIAogQ0MgOj0gJChDUk9TU19DT01QSUxFKWdjYyAtTUQKIFBLR19DT05GSUcgOj0gJChDUk9TU19DT01QSUxFKXBrZy1jb25maWcKQEAgLTM5LDcgKzQyLDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogdGVzdC1hbGwuYmluOgotCSQoQlVJTEQpIC1XZXJyb3IgLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1PMiAtV2Vycm9yIC1EX0ZPUlRJRllfU09VUkNFPTIgLWxkdyAtbGVsZiAtbG51bWEgLWxlbGYgLWxhdWRpdCAtSS91c3IvaW5jbHVkZS9zbGFuZyAtbHNsYW5nICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgLS1jZmxhZ3MgZ3RrKy0yLjAgMj4vZGV2L251bGwpICQoRkxBR1NfUEVSTF9FTUJFRCkgJChGTEFHU19QWVRIT05fRU1CRUQpIC1EUEFDS0FHRT0nInBlcmYiJyAtbGJmZCAtbGRsCisJJChCVUlMRCkgLVdlcnJvciAtZnN0YWNrLXByb3RlY3Rvci1hbGwgLU8yIC1XZXJyb3IgLURfRk9SVElGWV9TT1VSQ0U9MiAtbGR3IC1sZWxmIC1sbnVtYSAtbGVsZiAtbGF1ZGl0IC1JL3Vzci9pbmNsdWRlL3NsYW5nIC1sc2xhbmcgJChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyAtLWNmbGFncyBndGsrLTIuMCAyPi9kZXYvbnVsbCkgJChGTEFHU19QRVJMX0VNQkVEKSAkKEZMQUdTX1BZVEhPTl9FTUJFRCkgLURQQUNLQUdFPScicGVyZiInIC1sYmZkIC1sZGwgLWx6CiAKIHRlc3QtaGVsbG8uYmluOgogCSQoQlVJTEQpCkBAIC0xMzEsNiArMTM0LDE1IEBACiB0ZXN0LXN5bmMtY29tcGFyZS1hbmQtc3dhcC5iaW46CiAJJChCVUlMRCkgLVdlcnJvcgogCit0ZXN0LWNvbXBpbGUtMzIuYmluOgorCSQoQ0MpIC1tMzIgLW8gJChPVVRQVVQpJEAgdGVzdC1jb21waWxlLmMKKwordGVzdC1jb21waWxlLXgzMi5iaW46CisJJChDQykgLW14MzIgLW8gJChPVVRQVVQpJEAgdGVzdC1jb21waWxlLmMKKwordGVzdC16bGliLmJpbjoKKwkkKEJVSUxEKSAtbHoKKwogLWluY2x1ZGUgKi5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtYWxsLmMgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LWFsbC5jCmluZGV4IGE3ZDAyMmUuLjY1MmUwMDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtYWxsLmMKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC1hbGwuYwpAQCAtOTMsNiArOTMsMTAgQEAKICMgaW5jbHVkZSAidGVzdC1zeW5jLWNvbXBhcmUtYW5kLXN3YXAuYyIKICN1bmRlZiBtYWluCiAKKyNkZWZpbmUgbWFpbiBtYWluX3Rlc3RfemxpYgorIyBpbmNsdWRlICJ0ZXN0LXpsaWIuYyIKKyN1bmRlZiBtYWluCisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJbWFpbl90ZXN0X2xpYnB5dGhvbigpOwpAQCAtMTE2LDYgKzEyMCw3IEBACiAJbWFpbl90ZXN0X3N0YWNrcHJvdGVjdG9yX2FsbCgpOwogCW1haW5fdGVzdF9saWJkd19kd2FyZl91bndpbmQoKTsKIAltYWluX3Rlc3Rfc3luY19jb21wYXJlX2FuZF9zd2FwKGFyZ2MsIGFyZ3YpOworCW1haW5fdGVzdF96bGliKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtY29tcGlsZS5jIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC1jb21waWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkYmY0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtY29tcGlsZS5jCkBAIC0wLDAgKzEsNCBAQAoraW50IG1haW4odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtemxpYi5jIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC16bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExMWZmZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtemxpYi5jCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgPHpsaWIuaD4KKworaW50IG1haW4odm9pZCkKK3sKKwl6X3N0cmVhbSB6czsKKworCWluZmxhdGVJbml0KCZ6cyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYtcmVhZC12ZHNvLmMgYi90b29scy9wZXJmL3BlcmYtcmVhZC12ZHNvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY0ZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi1yZWFkLXZkc28uYwpAQCAtMCwwICsxLDM0IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBWRFNPX19NQVBfTkFNRSAiW3Zkc29dIgorCisvKgorICogSW5jbHVkZSBkZWZpbml0aW9uIG9mIGZpbmRfdmRzb19tYXAoKSBhbHNvIHVzZWQgaW4gdXRpbC92ZHNvLmMgZm9yCisgKiBidWlsZGluZyBwZXJmLgorICovCisjaW5jbHVkZSAidXRpbC9maW5kLXZkc28tbWFwLmMiCisKK2ludCBtYWluKHZvaWQpCit7CisJdm9pZCAqc3RhcnQsICplbmQ7CisJc2l6ZV90IHNpemUsIHdyaXR0ZW47CisKKwlpZiAoZmluZF92ZHNvX21hcCgmc3RhcnQsICZlbmQpKQorCQlyZXR1cm4gMTsKKworCXNpemUgPSBlbmQgLSBzdGFydDsKKworCXdoaWxlIChzaXplKSB7CisJCXdyaXR0ZW4gPSBmd3JpdGUoc3RhcnQsIDEsIHNpemUsIHN0ZG91dCk7CisJCWlmICghd3JpdHRlbikKKwkJCXJldHVybiAxOworCQlzdGFydCArPSB3cml0dGVuOworCQlzaXplIC09IHdyaXR0ZW47CisJfQorCisJaWYgKGZmbHVzaChzdGRvdXQpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLmggYi90b29scy9wZXJmL3BlcmYuaAppbmRleCAyMjBkNDRlLi4xZGFiYjg1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYuaAorKysgYi90b29scy9wZXJmL3BlcmYuaApAQCAtNTIsNiArNTIsNyBAQAogCWJvb2wJICAgICBzYW1wbGVfd2VpZ2h0OwogCWJvb2wJICAgICBzYW1wbGVfdGltZTsKIAlib29sCSAgICAgcGVyaW9kOworCWJvb2wJICAgICBzYW1wbGVfaW50cl9yZWdzOwogCXVuc2lnbmVkIGludCBmcmVxOwogCXVuc2lnbmVkIGludCBtbWFwX3BhZ2VzOwogCXVuc2lnbmVkIGludCB1c2VyX2ZyZXE7CkBAIC02Miw0ICs2Myw3IEBACiAJdW5zaWduZWQgICAgIGluaXRpYWxfZGVsYXk7CiB9OwogCitzdHJ1Y3Qgb3B0aW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCAqcmVjb3JkX3VzYWdlOworZXh0ZXJuIHN0cnVjdCBvcHRpb24gKnJlY29yZF9vcHRpb25zOwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9leHBvcnQtdG8tcG9zdGdyZXNxbC1yZWNvcmQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9leHBvcnQtdG8tcG9zdGdyZXNxbC1yZWNvcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxZDY2ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2V4cG9ydC10by1wb3N0Z3Jlc3FsLXJlY29yZApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9iYXNoCisKKyMKKyMgZXhwb3J0IHBlcmYgZGF0YSB0byBhIHBvc3RncmVzcWwgZGF0YWJhc2UuIENhbiBjb3ZlcgorIyBwZXJmIGlwIHNhbXBsZXMgKGV4Y2x1ZGluZyB0aGUgdHJhY2Vwb2ludHMpLiBObyBzcGVjaWFsCisjIHJlY29yZCByZXF1aXJlbWVudHMsIGp1c3QgcmVjb3JkIHdoYXQgeW91IHdhbnQgdG8gZXhwb3J0LgorIworcGVyZiByZWNvcmQgJEAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2V4cG9ydC10by1wb3N0Z3Jlc3FsLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2V4cG9ydC10by1wb3N0Z3Jlc3FsLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDMzNWI2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZXhwb3J0LXRvLXBvc3RncmVzcWwtcmVwb3J0CkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9iYXNoCisjIGRlc2NyaXB0aW9uOiBleHBvcnQgcGVyZiBkYXRhIHRvIGEgcG9zdGdyZXNxbCBkYXRhYmFzZQorIyBhcmdzOiBbZGF0YWJhc2UgbmFtZV0gW2NvbHVtbnNdIFtjYWxsc10KK25fYXJncz0wCitmb3IgaSBpbiAiJEAiCitkbworICAgIGlmIGV4cHIgbWF0Y2ggIiRpIiAiLSIgPiAvZGV2L251bGwgOyB0aGVuCisJYnJlYWsKKyAgICBmaQorICAgIG5fYXJncz0kKCggJG5fYXJncyArIDEgKSkKK2RvbmUKK2lmIFsgIiRuX2FyZ3MiIC1ndCAzIF0gOyB0aGVuCisgICAgZWNobyAidXNhZ2U6IGV4cG9ydC10by1wb3N0Z3Jlc3FsLXJlcG9ydCBbZGF0YWJhc2UgbmFtZV0gW2NvbHVtbnNdIFtjYWxsc10iCisgICAgZXhpdAorZmkKK2lmIFsgIiRuX2FyZ3MiIC1ndCAyIF0gOyB0aGVuCisgICAgZGJuYW1lPSQxCisgICAgY29sdW1ucz0kMgorICAgIGNhbGxzPSQzCisgICAgc2hpZnQgMworZWxpZiBbICIkbl9hcmdzIiAtZ3QgMSBdIDsgdGhlbgorICAgIGRibmFtZT0kMQorICAgIGNvbHVtbnM9JDIKKyAgICBzaGlmdCAyCitlbGlmIFsgIiRuX2FyZ3MiIC1ndCAwIF0gOyB0aGVuCisgICAgZGJuYW1lPSQxCisgICAgc2hpZnQKK2ZpCitwZXJmIHNjcmlwdCAkQCAtcyAiJFBFUkZfRVhFQ19QQVRIIi9zY3JpcHRzL3B5dGhvbi9leHBvcnQtdG8tcG9zdGdyZXNxbC5weSAkZGJuYW1lICRjb2x1bW5zICRjYWxscwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9leHBvcnQtdG8tcG9zdGdyZXNxbC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZXhwb3J0LXRvLXBvc3RncmVzcWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkYWZkOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZXhwb3J0LXRvLXBvc3RncmVzcWwucHkKQEAgLTAsMCArMSw0NDQgQEAKKyMgZXhwb3J0LXRvLXBvc3RncmVzcWwucHk6IGV4cG9ydCBwZXJmIGRhdGEgdG8gYSBwb3N0Z3Jlc3FsIGRhdGFiYXNlCisjIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyMgbW9yZSBkZXRhaWxzLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBkYXRldGltZQorCitmcm9tIFB5U2lkZS5RdFNxbCBpbXBvcnQgKgorCisjIE5lZWQgdG8gYWNjZXNzIFBvc3RncmVTUUwgQyBsaWJyYXJ5IGRpcmVjdGx5IHRvIHVzZSBDT1BZIEZST00gU1RESU4KK2Zyb20gY3R5cGVzIGltcG9ydCAqCitsaWJwcSA9IENETEwoImxpYnBxLnNvLjUiKQorUFFjb25uZWN0ZGIgPSBsaWJwcS5QUWNvbm5lY3RkYgorUFFjb25uZWN0ZGIucmVzdHlwZSA9IGNfdm9pZF9wCitQUWZpbmlzaCA9IGxpYnBxLlBRZmluaXNoCitQUXN0YXR1cyA9IGxpYnBxLlBRc3RhdHVzCitQUWV4ZWMgPSBsaWJwcS5QUWV4ZWMKK1BRZXhlYy5yZXN0eXBlID0gY192b2lkX3AKK1BRcmVzdWx0U3RhdHVzID0gbGlicHEuUFFyZXN1bHRTdGF0dXMKK1BRcHV0Q29weURhdGEgPSBsaWJwcS5QUXB1dENvcHlEYXRhCitQUXB1dENvcHlEYXRhLmFyZ3R5cGVzID0gWyBjX3ZvaWRfcCwgY192b2lkX3AsIGNfaW50IF0KK1BRcHV0Q29weUVuZCA9IGxpYnBxLlBRcHV0Q29weUVuZAorUFFwdXRDb3B5RW5kLmFyZ3R5cGVzID0gWyBjX3ZvaWRfcCwgY192b2lkX3AgXQorCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKKyMgVGhlc2UgcGVyZiBpbXBvcnRzIGFyZSBub3QgdXNlZCBhdCBwcmVzZW50CisjZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKKyNmcm9tIENvcmUgaW1wb3J0ICoKKworcGVyZl9kYl9leHBvcnRfbW9kZSA9IFRydWUKK3BlcmZfZGJfZXhwb3J0X2NhbGxzID0gRmFsc2UKKworZGVmIHVzYWdlKCk6CisJcHJpbnQgPj4gc3lzLnN0ZGVyciwgIlVzYWdlIGlzOiBleHBvcnQtdG8tcG9zdGdyZXNxbC5weSA8ZGF0YWJhc2UgbmFtZT4gWzxjb2x1bW5zPl0gWzxjYWxscz5dIgorCXByaW50ID4+IHN5cy5zdGRlcnIsICJ3aGVyZToJY29sdW1ucwkJJ2FsbCcgb3IgJ2JyYW5jaGVzJyIKKwlwcmludCA+PiBzeXMuc3RkZXJyLCAiCQljYWxscwkJJ2NhbGxzJyA9PiBjcmVhdGUgY2FsbHMgdGFibGUiCisJcmFpc2UgRXhjZXB0aW9uKCJUb28gZmV3IGFyZ3VtZW50cyIpCisKK2lmIChsZW4oc3lzLmFyZ3YpIDwgMik6CisJdXNhZ2UoKQorCitkYm5hbWUgPSBzeXMuYXJndlsxXQorCitpZiAobGVuKHN5cy5hcmd2KSA+PSAzKToKKwljb2x1bW5zID0gc3lzLmFyZ3ZbMl0KK2Vsc2U6CisJY29sdW1ucyA9ICJhbGwiCisKK2lmIGNvbHVtbnMgbm90IGluICgiYWxsIiwgImJyYW5jaGVzIik6CisJdXNhZ2UoKQorCiticmFuY2hlcyA9IChjb2x1bW5zID09ICJicmFuY2hlcyIpCisKK2lmIChsZW4oc3lzLmFyZ3YpID49IDQpOgorCWlmIChzeXMuYXJndlszXSA9PSAiY2FsbHMiKToKKwkJcGVyZl9kYl9leHBvcnRfY2FsbHMgPSBUcnVlCisJZWxzZToKKwkJdXNhZ2UoKQorCitvdXRwdXRfZGlyX25hbWUgPSBvcy5nZXRjd2QoKSArICIvIiArIGRibmFtZSArICItcGVyZi1kYXRhIgorb3MubWtkaXIob3V0cHV0X2Rpcl9uYW1lKQorCitkZWYgZG9fcXVlcnkocSwgcyk6CisJaWYgKHEuZXhlY18ocykpOgorCQlyZXR1cm4KKwlyYWlzZSBFeGNlcHRpb24oIlF1ZXJ5IGZhaWxlZDogIiArIHEubGFzdEVycm9yKCkudGV4dCgpKQorCitwcmludCBkYXRldGltZS5kYXRldGltZS50b2RheSgpLCAiQ3JlYXRpbmcgZGF0YWJhc2UuLi4iCisKK2RiID0gUVNxbERhdGFiYXNlLmFkZERhdGFiYXNlKCdRUFNRTCcpCitxdWVyeSA9IFFTcWxRdWVyeShkYikKK2RiLnNldERhdGFiYXNlTmFtZSgncG9zdGdyZXMnKQorZGIub3BlbigpCit0cnk6CisJZG9fcXVlcnkocXVlcnksICdDUkVBVEUgREFUQUJBU0UgJyArIGRibmFtZSkKK2V4Y2VwdDoKKwlvcy5ybWRpcihvdXRwdXRfZGlyX25hbWUpCisJcmFpc2UKK3F1ZXJ5LmZpbmlzaCgpCitxdWVyeS5jbGVhcigpCitkYi5jbG9zZSgpCisKK2RiLnNldERhdGFiYXNlTmFtZShkYm5hbWUpCitkYi5vcGVuKCkKKworcXVlcnkgPSBRU3FsUXVlcnkoZGIpCitkb19xdWVyeShxdWVyeSwgJ1NFVCBjbGllbnRfbWluX21lc3NhZ2VzIFRPIFdBUk5JTkcnKQorCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBzZWxlY3RlZF9ldmVudHMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ25hbWUJCXZhcmNoYXIoODApKScpCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBtYWNoaW5lcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQkncGlkCQlpbnRlZ2VyLCcKKwkJJ3Jvb3RfZGlyIAl2YXJjaGFyKDQwOTYpKScpCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSB0aHJlYWRzICgnCisJCSdpZAkJYmlnaW50CQlOT1QgTlVMTCwnCisJCSdtYWNoaW5lX2lkCWJpZ2ludCwnCisJCSdwcm9jZXNzX2lkCWJpZ2ludCwnCisJCSdwaWQJCWludGVnZXIsJworCQkndGlkCQlpbnRlZ2VyKScpCitkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBUQUJMRSBjb21tcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQknY29tbQkJdmFyY2hhcigxNikpJykKK2RvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIGNvbW1fdGhyZWFkcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQknY29tbV9pZAliaWdpbnQsJworCQkndGhyZWFkX2lkCWJpZ2ludCknKQorZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVEFCTEUgZHNvcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQknbWFjaGluZV9pZAliaWdpbnQsJworCQknc2hvcnRfbmFtZQl2YXJjaGFyKDI1NiksJworCQknbG9uZ19uYW1lCXZhcmNoYXIoNDA5NiksJworCQknYnVpbGRfaWQJdmFyY2hhcig2NCkpJykKK2RvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIHN5bWJvbHMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ2Rzb19pZAkJYmlnaW50LCcKKwkJJ3N5bV9zdGFydAliaWdpbnQsJworCQknc3ltX2VuZAliaWdpbnQsJworCQknYmluZGluZwlpbnRlZ2VyLCcKKwkJJ25hbWUJCXZhcmNoYXIoMjA0OCkpJykKK2RvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIGJyYW5jaF90eXBlcyAoJworCQknaWQJCWludGVnZXIJCU5PVCBOVUxMLCcKKwkJJ25hbWUJCXZhcmNoYXIoODApKScpCisKK2lmIGJyYW5jaGVzOgorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIHNhbXBsZXMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ2V2c2VsX2lkCWJpZ2ludCwnCisJCSdtYWNoaW5lX2lkCWJpZ2ludCwnCisJCSd0aHJlYWRfaWQJYmlnaW50LCcKKwkJJ2NvbW1faWQJYmlnaW50LCcKKwkJJ2Rzb19pZAkJYmlnaW50LCcKKwkJJ3N5bWJvbF9pZAliaWdpbnQsJworCQknc3ltX29mZnNldAliaWdpbnQsJworCQknaXAJCWJpZ2ludCwnCisJCSd0aW1lCQliaWdpbnQsJworCQknY3B1CQlpbnRlZ2VyLCcKKwkJJ3RvX2Rzb19pZAliaWdpbnQsJworCQkndG9fc3ltYm9sX2lkCWJpZ2ludCwnCisJCSd0b19zeW1fb2Zmc2V0CWJpZ2ludCwnCisJCSd0b19pcAkJYmlnaW50LCcKKwkJJ2JyYW5jaF90eXBlCWludGVnZXIsJworCQknaW5fdHgJCWJvb2xlYW4pJykKK2Vsc2U6CisJZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVEFCTEUgc2FtcGxlcyAoJworCQknaWQJCWJpZ2ludAkJTk9UIE5VTEwsJworCQknZXZzZWxfaWQJYmlnaW50LCcKKwkJJ21hY2hpbmVfaWQJYmlnaW50LCcKKwkJJ3RocmVhZF9pZAliaWdpbnQsJworCQknY29tbV9pZAliaWdpbnQsJworCQknZHNvX2lkCQliaWdpbnQsJworCQknc3ltYm9sX2lkCWJpZ2ludCwnCisJCSdzeW1fb2Zmc2V0CWJpZ2ludCwnCisJCSdpcAkJYmlnaW50LCcKKwkJJ3RpbWUJCWJpZ2ludCwnCisJCSdjcHUJCWludGVnZXIsJworCQkndG9fZHNvX2lkCWJpZ2ludCwnCisJCSd0b19zeW1ib2xfaWQJYmlnaW50LCcKKwkJJ3RvX3N5bV9vZmZzZXQJYmlnaW50LCcKKwkJJ3RvX2lwCQliaWdpbnQsJworCQkncGVyaW9kCQliaWdpbnQsJworCQknd2VpZ2h0CQliaWdpbnQsJworCQkndHJhbnNhY3Rpb24JYmlnaW50LCcKKwkJJ2RhdGFfc3JjCWJpZ2ludCwnCisJCSdicmFuY2hfdHlwZQlpbnRlZ2VyLCcKKwkJJ2luX3R4CQlib29sZWFuKScpCisKK2lmIHBlcmZfZGJfZXhwb3J0X2NhbGxzOgorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQ1JFQVRFIFRBQkxFIGNhbGxfcGF0aHMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ3BhcmVudF9pZAliaWdpbnQsJworCQknc3ltYm9sX2lkCWJpZ2ludCwnCisJCSdpcAkJYmlnaW50KScpCisJZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVEFCTEUgY2FsbHMgKCcKKwkJJ2lkCQliaWdpbnQJCU5PVCBOVUxMLCcKKwkJJ3RocmVhZF9pZAliaWdpbnQsJworCQknY29tbV9pZAliaWdpbnQsJworCQknY2FsbF9wYXRoX2lkCWJpZ2ludCwnCisJCSdjYWxsX3RpbWUJYmlnaW50LCcKKwkJJ3JldHVybl90aW1lCWJpZ2ludCwnCisJCSdicmFuY2hfY291bnQJYmlnaW50LCcKKwkJJ2NhbGxfaWQJYmlnaW50LCcKKwkJJ3JldHVybl9pZAliaWdpbnQsJworCQkncGFyZW50X2NhbGxfcGF0aF9pZAliaWdpbnQsJworCQknZmxhZ3MJCWludGVnZXIpJykKKworZG9fcXVlcnkocXVlcnksICdDUkVBVEUgVklFVyBzYW1wbGVzX3ZpZXcgQVMgJworCSdTRUxFQ1QgJworCQknaWQsJworCQkndGltZSwnCisJCSdjcHUsJworCQknKFNFTEVDVCBwaWQgRlJPTSB0aHJlYWRzIFdIRVJFIGlkID0gdGhyZWFkX2lkKSBBUyBwaWQsJworCQknKFNFTEVDVCB0aWQgRlJPTSB0aHJlYWRzIFdIRVJFIGlkID0gdGhyZWFkX2lkKSBBUyB0aWQsJworCQknKFNFTEVDVCBjb21tIEZST00gY29tbXMgV0hFUkUgaWQgPSBjb21tX2lkKSBBUyBjb21tYW5kLCcKKwkJJyhTRUxFQ1QgbmFtZSBGUk9NIHNlbGVjdGVkX2V2ZW50cyBXSEVSRSBpZCA9IGV2c2VsX2lkKSBBUyBldmVudCwnCisJCSd0b19oZXgoaXApIEFTIGlwX2hleCwnCisJCScoU0VMRUNUIG5hbWUgRlJPTSBzeW1ib2xzIFdIRVJFIGlkID0gc3ltYm9sX2lkKSBBUyBzeW1ib2wsJworCQknc3ltX29mZnNldCwnCisJCScoU0VMRUNUIHNob3J0X25hbWUgRlJPTSBkc29zIFdIRVJFIGlkID0gZHNvX2lkKSBBUyBkc29fc2hvcnRfbmFtZSwnCisJCSd0b19oZXgodG9faXApIEFTIHRvX2lwX2hleCwnCisJCScoU0VMRUNUIG5hbWUgRlJPTSBzeW1ib2xzIFdIRVJFIGlkID0gdG9fc3ltYm9sX2lkKSBBUyB0b19zeW1ib2wsJworCQkndG9fc3ltX29mZnNldCwnCisJCScoU0VMRUNUIHNob3J0X25hbWUgRlJPTSBkc29zIFdIRVJFIGlkID0gdG9fZHNvX2lkKSBBUyB0b19kc29fc2hvcnRfbmFtZSwnCisJCScoU0VMRUNUIG5hbWUgRlJPTSBicmFuY2hfdHlwZXMgV0hFUkUgaWQgPSBicmFuY2hfdHlwZSkgQVMgYnJhbmNoX3R5cGVfbmFtZSwnCisJCSdpbl90eCcKKwknIEZST00gc2FtcGxlcycpCisKKworZmlsZV9oZWFkZXIgPSBzdHJ1Y3QucGFjaygiITExc2lpIiwgIlBHQ09QWVxuXDM3N1xyXG5cMCIsIDAsIDApCitmaWxlX3RyYWlsZXIgPSAiXDM3N1wzNzciCisKK2RlZiBvcGVuX291dHB1dF9maWxlKGZpbGVfbmFtZSk6CisJcGF0aF9uYW1lID0gb3V0cHV0X2Rpcl9uYW1lICsgIi8iICsgZmlsZV9uYW1lCisJZmlsZSA9IG9wZW4ocGF0aF9uYW1lLCAidysiKQorCWZpbGUud3JpdGUoZmlsZV9oZWFkZXIpCisJcmV0dXJuIGZpbGUKKworZGVmIGNsb3NlX291dHB1dF9maWxlKGZpbGUpOgorCWZpbGUud3JpdGUoZmlsZV90cmFpbGVyKQorCWZpbGUuY2xvc2UoKQorCitkZWYgY29weV9vdXRwdXRfZmlsZV9kaXJlY3QoZmlsZSwgdGFibGVfbmFtZSk6CisJY2xvc2Vfb3V0cHV0X2ZpbGUoZmlsZSkKKwlzcWwgPSAiQ09QWSAiICsgdGFibGVfbmFtZSArICIgRlJPTSAnIiArIGZpbGUubmFtZSArICInIChGT1JNQVQgJ2JpbmFyeScpIgorCWRvX3F1ZXJ5KHF1ZXJ5LCBzcWwpCisKKyMgVXNlIENPUFkgRlJPTSBTVERJTiBiZWNhdXNlIHNlY3VyaXR5IG1heSBwcmV2ZW50IHBvc3RncmVzIGZyb20gYWNjZXNzaW5nIHRoZSBmaWxlcyBkaXJlY3RseQorZGVmIGNvcHlfb3V0cHV0X2ZpbGUoZmlsZSwgdGFibGVfbmFtZSk6CisJY29ubiA9IFBRY29ubmVjdGRiKCJkYm5hbWUgPSAiICsgZGJuYW1lKQorCWlmIChQUXN0YXR1cyhjb25uKSk6CisJCXJhaXNlIEV4Y2VwdGlvbigiQ09QWSBGUk9NIFNURElOIFBRY29ubmVjdGRiIGZhaWxlZCIpCisJZmlsZS53cml0ZShmaWxlX3RyYWlsZXIpCisJZmlsZS5zZWVrKDApCisJc3FsID0gIkNPUFkgIiArIHRhYmxlX25hbWUgKyAiIEZST00gU1RESU4gKEZPUk1BVCAnYmluYXJ5JykiCisJcmVzID0gUFFleGVjKGNvbm4sIHNxbCkKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSA0KToKKwkJcmFpc2UgRXhjZXB0aW9uKCJDT1BZIEZST00gU1RESU4gUFFleGVjIGZhaWxlZCIpCisJZGF0YSA9IGZpbGUucmVhZCg2NTUzNikKKwl3aGlsZSAobGVuKGRhdGEpKToKKwkJcmV0ID0gUFFwdXRDb3B5RGF0YShjb25uLCBkYXRhLCBsZW4oZGF0YSkpCisJCWlmIChyZXQgIT0gMSk6CisJCQlyYWlzZSBFeGNlcHRpb24oIkNPUFkgRlJPTSBTVERJTiBQUXB1dENvcHlEYXRhIGZhaWxlZCwgZXJyb3IgIiArIHN0cihyZXQpKQorCQlkYXRhID0gZmlsZS5yZWFkKDY1NTM2KQorCXJldCA9IFBRcHV0Q29weUVuZChjb25uLCBOb25lKQorCWlmIChyZXQgIT0gMSk6CisJCXJhaXNlIEV4Y2VwdGlvbigiQ09QWSBGUk9NIFNURElOIFBRcHV0Q29weUVuZCBmYWlsZWQsIGVycm9yICIgKyBzdHIocmV0KSkKKwlQUWZpbmlzaChjb25uKQorCitkZWYgcmVtb3ZlX291dHB1dF9maWxlKGZpbGUpOgorCW5hbWUgPSBmaWxlLm5hbWUKKwlmaWxlLmNsb3NlKCkKKwlvcy51bmxpbmsobmFtZSkKKworZXZzZWxfZmlsZQkJPSBvcGVuX291dHB1dF9maWxlKCJldnNlbF90YWJsZS5iaW4iKQorbWFjaGluZV9maWxlCQk9IG9wZW5fb3V0cHV0X2ZpbGUoIm1hY2hpbmVfdGFibGUuYmluIikKK3RocmVhZF9maWxlCQk9IG9wZW5fb3V0cHV0X2ZpbGUoInRocmVhZF90YWJsZS5iaW4iKQorY29tbV9maWxlCQk9IG9wZW5fb3V0cHV0X2ZpbGUoImNvbW1fdGFibGUuYmluIikKK2NvbW1fdGhyZWFkX2ZpbGUJPSBvcGVuX291dHB1dF9maWxlKCJjb21tX3RocmVhZF90YWJsZS5iaW4iKQorZHNvX2ZpbGUJCT0gb3Blbl9vdXRwdXRfZmlsZSgiZHNvX3RhYmxlLmJpbiIpCitzeW1ib2xfZmlsZQkJPSBvcGVuX291dHB1dF9maWxlKCJzeW1ib2xfdGFibGUuYmluIikKK2JyYW5jaF90eXBlX2ZpbGUJPSBvcGVuX291dHB1dF9maWxlKCJicmFuY2hfdHlwZV90YWJsZS5iaW4iKQorc2FtcGxlX2ZpbGUJCT0gb3Blbl9vdXRwdXRfZmlsZSgic2FtcGxlX3RhYmxlLmJpbiIpCitpZiBwZXJmX2RiX2V4cG9ydF9jYWxsczoKKwljYWxsX3BhdGhfZmlsZQkJPSBvcGVuX291dHB1dF9maWxlKCJjYWxsX3BhdGhfdGFibGUuYmluIikKKwljYWxsX2ZpbGUJCT0gb3Blbl9vdXRwdXRfZmlsZSgiY2FsbF90YWJsZS5iaW4iKQorCitkZWYgdHJhY2VfYmVnaW4oKToKKwlwcmludCBkYXRldGltZS5kYXRldGltZS50b2RheSgpLCAiV3JpdGluZyB0byBpbnRlcm1lZGlhdGUgZmlsZXMuLi4iCisJIyBpZCA9PSAwIG1lYW5zIHVua25vd24uICBJdCBpcyBlYXNpZXIgdG8gY3JlYXRlIHJlY29yZHMgZm9yIHRoZW0gdGhhbiByZXBsYWNlIHRoZSB6ZXJvZXMgd2l0aCBOVUxMcworCWV2c2VsX3RhYmxlKDAsICJ1bmtub3duIikKKwltYWNoaW5lX3RhYmxlKDAsIDAsICJ1bmtub3duIikKKwl0aHJlYWRfdGFibGUoMCwgMCwgMCwgLTEsIC0xKQorCWNvbW1fdGFibGUoMCwgInVua25vd24iKQorCWRzb190YWJsZSgwLCAwLCAidW5rbm93biIsICJ1bmtub3duIiwgIiIpCisJc3ltYm9sX3RhYmxlKDAsIDAsIDAsIDAsIDAsICJ1bmtub3duIikKKwlzYW1wbGVfdGFibGUoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkKKwlpZiBwZXJmX2RiX2V4cG9ydF9jYWxsczoKKwkJY2FsbF9wYXRoX3RhYmxlKDAsIDAsIDAsIDApCisKK3VuaGFuZGxlZF9jb3VudCA9IDAKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50IGRhdGV0aW1lLmRhdGV0aW1lLnRvZGF5KCksICJDb3B5aW5nIHRvIGRhdGFiYXNlLi4uIgorCWNvcHlfb3V0cHV0X2ZpbGUoZXZzZWxfZmlsZSwJCSJzZWxlY3RlZF9ldmVudHMiKQorCWNvcHlfb3V0cHV0X2ZpbGUobWFjaGluZV9maWxlLAkJIm1hY2hpbmVzIikKKwljb3B5X291dHB1dF9maWxlKHRocmVhZF9maWxlLAkJInRocmVhZHMiKQorCWNvcHlfb3V0cHV0X2ZpbGUoY29tbV9maWxlLAkJImNvbW1zIikKKwljb3B5X291dHB1dF9maWxlKGNvbW1fdGhyZWFkX2ZpbGUsCSJjb21tX3RocmVhZHMiKQorCWNvcHlfb3V0cHV0X2ZpbGUoZHNvX2ZpbGUsCQkiZHNvcyIpCisJY29weV9vdXRwdXRfZmlsZShzeW1ib2xfZmlsZSwJCSJzeW1ib2xzIikKKwljb3B5X291dHB1dF9maWxlKGJyYW5jaF90eXBlX2ZpbGUsCSJicmFuY2hfdHlwZXMiKQorCWNvcHlfb3V0cHV0X2ZpbGUoc2FtcGxlX2ZpbGUsCQkic2FtcGxlcyIpCisJaWYgcGVyZl9kYl9leHBvcnRfY2FsbHM6CisJCWNvcHlfb3V0cHV0X2ZpbGUoY2FsbF9wYXRoX2ZpbGUsCSJjYWxsX3BhdGhzIikKKwkJY29weV9vdXRwdXRfZmlsZShjYWxsX2ZpbGUsCQkiY2FsbHMiKQorCisJcHJpbnQgZGF0ZXRpbWUuZGF0ZXRpbWUudG9kYXkoKSwgIlJlbW92aW5nIGludGVybWVkaWF0ZSBmaWxlcy4uLiIKKwlyZW1vdmVfb3V0cHV0X2ZpbGUoZXZzZWxfZmlsZSkKKwlyZW1vdmVfb3V0cHV0X2ZpbGUobWFjaGluZV9maWxlKQorCXJlbW92ZV9vdXRwdXRfZmlsZSh0aHJlYWRfZmlsZSkKKwlyZW1vdmVfb3V0cHV0X2ZpbGUoY29tbV9maWxlKQorCXJlbW92ZV9vdXRwdXRfZmlsZShjb21tX3RocmVhZF9maWxlKQorCXJlbW92ZV9vdXRwdXRfZmlsZShkc29fZmlsZSkKKwlyZW1vdmVfb3V0cHV0X2ZpbGUoc3ltYm9sX2ZpbGUpCisJcmVtb3ZlX291dHB1dF9maWxlKGJyYW5jaF90eXBlX2ZpbGUpCisJcmVtb3ZlX291dHB1dF9maWxlKHNhbXBsZV9maWxlKQorCWlmIHBlcmZfZGJfZXhwb3J0X2NhbGxzOgorCQlyZW1vdmVfb3V0cHV0X2ZpbGUoY2FsbF9wYXRoX2ZpbGUpCisJCXJlbW92ZV9vdXRwdXRfZmlsZShjYWxsX2ZpbGUpCisJb3Mucm1kaXIob3V0cHV0X2Rpcl9uYW1lKQorCXByaW50IGRhdGV0aW1lLmRhdGV0aW1lLnRvZGF5KCksICJBZGRpbmcgcHJpbWFyeSBrZXlzIgorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgc2VsZWN0ZWRfZXZlbnRzIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIG1hY2hpbmVzICAgICAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSB0aHJlYWRzICAgICAgICAgQUREIFBSSU1BUlkgS0VZIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgY29tbXMgICAgICAgICAgIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNvbW1fdGhyZWFkcyAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBkc29zICAgICAgICAgICAgQUREIFBSSU1BUlkgS0VZIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgc3ltYm9scyAgICAgICAgIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGJyYW5jaF90eXBlcyAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBzYW1wbGVzICAgICAgICAgQUREIFBSSU1BUlkgS0VZIChpZCknKQorCWlmIHBlcmZfZGJfZXhwb3J0X2NhbGxzOgorCQlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNhbGxfcGF0aHMgICAgICBBREQgUFJJTUFSWSBLRVkgKGlkKScpCisJCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgY2FsbHMgICAgICAgICAgIEFERCBQUklNQVJZIEtFWSAoaWQpJykKKworCXByaW50IGRhdGV0aW1lLmRhdGV0aW1lLnRvZGF5KCksICJBZGRpbmcgZm9yZWlnbiBrZXlzIgorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgdGhyZWFkcyAnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBtYWNoaW5lZmsgIEZPUkVJR04gS0VZIChtYWNoaW5lX2lkKSAgIFJFRkVSRU5DRVMgbWFjaGluZXMgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHByb2Nlc3NmayAgRk9SRUlHTiBLRVkgKHByb2Nlc3NfaWQpICAgUkVGRVJFTkNFUyB0aHJlYWRzICAgIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgY29tbV90aHJlYWRzICcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGNvbW1mayAgICAgRk9SRUlHTiBLRVkgKGNvbW1faWQpICAgICAgUkVGRVJFTkNFUyBjb21tcyAgICAgIChpZCksJworCQkJCQknQUREIENPTlNUUkFJTlQgdGhyZWFkZmsgICBGT1JFSUdOIEtFWSAodGhyZWFkX2lkKSAgICBSRUZFUkVOQ0VTIHRocmVhZHMgICAgKGlkKScpCisJZG9fcXVlcnkocXVlcnksICdBTFRFUiBUQUJMRSBkc29zICcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIG1hY2hpbmVmayAgRk9SRUlHTiBLRVkgKG1hY2hpbmVfaWQpICAgUkVGRVJFTkNFUyBtYWNoaW5lcyAgIChpZCknKQorCWRvX3F1ZXJ5KHF1ZXJ5LCAnQUxURVIgVEFCTEUgc3ltYm9scyAnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBkc29mayAgICAgIEZPUkVJR04gS0VZIChkc29faWQpICAgICAgIFJFRkVSRU5DRVMgZHNvcyAgICAgICAoaWQpJykKKwlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIHNhbXBsZXMgJworCQkJCQknQUREIENPTlNUUkFJTlQgZXZzZWxmayAgICBGT1JFSUdOIEtFWSAoZXZzZWxfaWQpICAgICBSRUZFUkVOQ0VTIHNlbGVjdGVkX2V2ZW50cyAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIG1hY2hpbmVmayAgRk9SRUlHTiBLRVkgKG1hY2hpbmVfaWQpICAgUkVGRVJFTkNFUyBtYWNoaW5lcyAgIChpZCksJworCQkJCQknQUREIENPTlNUUkFJTlQgdGhyZWFkZmsgICBGT1JFSUdOIEtFWSAodGhyZWFkX2lkKSAgICBSRUZFUkVOQ0VTIHRocmVhZHMgICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCBjb21tZmsgICAgIEZPUkVJR04gS0VZIChjb21tX2lkKSAgICAgIFJFRkVSRU5DRVMgY29tbXMgICAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGRzb2ZrICAgICAgRk9SRUlHTiBLRVkgKGRzb19pZCkgICAgICAgUkVGRVJFTkNFUyBkc29zICAgICAgIChpZCksJworCQkJCQknQUREIENPTlNUUkFJTlQgc3ltYm9sZmsgICBGT1JFSUdOIEtFWSAoc3ltYm9sX2lkKSAgICBSRUZFUkVOQ0VTIHN5bWJvbHMgICAgKGlkKSwnCisJCQkJCSdBREQgQ09OU1RSQUlOVCB0b2Rzb2ZrICAgIEZPUkVJR04gS0VZICh0b19kc29faWQpICAgIFJFRkVSRU5DRVMgZHNvcyAgICAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHRvc3ltYm9sZmsgRk9SRUlHTiBLRVkgKHRvX3N5bWJvbF9pZCkgUkVGRVJFTkNFUyBzeW1ib2xzICAgIChpZCknKQorCWlmIHBlcmZfZGJfZXhwb3J0X2NhbGxzOgorCQlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNhbGxfcGF0aHMgJworCQkJCQknQUREIENPTlNUUkFJTlQgcGFyZW50ZmsgICAgRk9SRUlHTiBLRVkgKHBhcmVudF9pZCkgICAgUkVGRVJFTkNFUyBjYWxsX3BhdGhzIChpZCksJworCQkJCQknQUREIENPTlNUUkFJTlQgc3ltYm9sZmsgICAgRk9SRUlHTiBLRVkgKHN5bWJvbF9pZCkgICAgUkVGRVJFTkNFUyBzeW1ib2xzICAgIChpZCknKQorCQlkb19xdWVyeShxdWVyeSwgJ0FMVEVSIFRBQkxFIGNhbGxzICcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHRocmVhZGZrICAgIEZPUkVJR04gS0VZICh0aHJlYWRfaWQpICAgIFJFRkVSRU5DRVMgdGhyZWFkcyAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGNvbW1mayAgICAgIEZPUkVJR04gS0VZIChjb21tX2lkKSAgICAgIFJFRkVSRU5DRVMgY29tbXMgICAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGNhbGxfcGF0aGZrIEZPUkVJR04gS0VZIChjYWxsX3BhdGhfaWQpIFJFRkVSRU5DRVMgY2FsbF9wYXRocyAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIGNhbGxmayAgICAgIEZPUkVJR04gS0VZIChjYWxsX2lkKSAgICAgIFJFRkVSRU5DRVMgc2FtcGxlcyAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHJldHVybmZrICAgIEZPUkVJR04gS0VZIChyZXR1cm5faWQpICAgIFJFRkVSRU5DRVMgc2FtcGxlcyAgICAoaWQpLCcKKwkJCQkJJ0FERCBDT05TVFJBSU5UIHBhcmVudF9jYWxsX3BhdGhmayBGT1JFSUdOIEtFWSAocGFyZW50X2NhbGxfcGF0aF9pZCkgUkVGRVJFTkNFUyBjYWxsX3BhdGhzIChpZCknKQorCQlkb19xdWVyeShxdWVyeSwgJ0NSRUFURSBJTkRFWCBwY3BpZF9pZHggT04gY2FsbHMgKHBhcmVudF9jYWxsX3BhdGhfaWQpJykKKworCWlmICh1bmhhbmRsZWRfY291bnQpOgorCQlwcmludCBkYXRldGltZS5kYXRldGltZS50b2RheSgpLCAiV2FybmluZzogIiwgdW5oYW5kbGVkX2NvdW50LCAiIHVuaGFuZGxlZCBldmVudHMiCisJcHJpbnQgZGF0ZXRpbWUuZGF0ZXRpbWUudG9kYXkoKSwgIkRvbmUiCisKK2RlZiB0cmFjZV91bmhhbmRsZWQoZXZlbnRfbmFtZSwgY29udGV4dCwgZXZlbnRfZmllbGRzX2RpY3QpOgorCWdsb2JhbCB1bmhhbmRsZWRfY291bnQKKwl1bmhhbmRsZWRfY291bnQgKz0gMQorCitkZWYgc2NoZWRfX3NjaGVkX3N3aXRjaCgqeCk6CisJcGFzcworCitkZWYgZXZzZWxfdGFibGUoZXZzZWxfaWQsIGV2c2VsX25hbWUsICp4KToKKwluID0gbGVuKGV2c2VsX25hbWUpCisJZm10ID0gIiFoaXFpIiArIHN0cihuKSArICJzIgorCXZhbHVlID0gc3RydWN0LnBhY2soZm10LCAyLCA4LCBldnNlbF9pZCwgbiwgZXZzZWxfbmFtZSkKKwlldnNlbF9maWxlLndyaXRlKHZhbHVlKQorCitkZWYgbWFjaGluZV90YWJsZShtYWNoaW5lX2lkLCBwaWQsIHJvb3RfZGlyLCAqeCk6CisJbiA9IGxlbihyb290X2RpcikKKwlmbXQgPSAiIWhpcWlpaSIgKyBzdHIobikgKyAicyIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgMywgOCwgbWFjaGluZV9pZCwgNCwgcGlkLCBuLCByb290X2RpcikKKwltYWNoaW5lX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiB0aHJlYWRfdGFibGUodGhyZWFkX2lkLCBtYWNoaW5lX2lkLCBwcm9jZXNzX2lkLCBwaWQsIHRpZCwgKngpOgorCXZhbHVlID0gc3RydWN0LnBhY2soIiFoaXFpcWlxaWlpaSIsIDUsIDgsIHRocmVhZF9pZCwgOCwgbWFjaGluZV9pZCwgOCwgcHJvY2Vzc19pZCwgNCwgcGlkLCA0LCB0aWQpCisJdGhyZWFkX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiBjb21tX3RhYmxlKGNvbW1faWQsIGNvbW1fc3RyLCAqeCk6CisJbiA9IGxlbihjb21tX3N0cikKKwlmbXQgPSAiIWhpcWkiICsgc3RyKG4pICsgInMiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDIsIDgsIGNvbW1faWQsIG4sIGNvbW1fc3RyKQorCWNvbW1fZmlsZS53cml0ZSh2YWx1ZSkKKworZGVmIGNvbW1fdGhyZWFkX3RhYmxlKGNvbW1fdGhyZWFkX2lkLCBjb21tX2lkLCB0aHJlYWRfaWQsICp4KToKKwlmbXQgPSAiIWhpcWlxaXEiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDMsIDgsIGNvbW1fdGhyZWFkX2lkLCA4LCBjb21tX2lkLCA4LCB0aHJlYWRfaWQpCisJY29tbV90aHJlYWRfZmlsZS53cml0ZSh2YWx1ZSkKKworZGVmIGRzb190YWJsZShkc29faWQsIG1hY2hpbmVfaWQsIHNob3J0X25hbWUsIGxvbmdfbmFtZSwgYnVpbGRfaWQsICp4KToKKwluMSA9IGxlbihzaG9ydF9uYW1lKQorCW4yID0gbGVuKGxvbmdfbmFtZSkKKwluMyA9IGxlbihidWlsZF9pZCkKKwlmbXQgPSAiIWhpcWlxaSIgKyBzdHIobjEpICsgInNpIiAgKyBzdHIobjIpICsgInNpIiArIHN0cihuMykgKyAicyIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgNSwgOCwgZHNvX2lkLCA4LCBtYWNoaW5lX2lkLCBuMSwgc2hvcnRfbmFtZSwgbjIsIGxvbmdfbmFtZSwgbjMsIGJ1aWxkX2lkKQorCWRzb19maWxlLndyaXRlKHZhbHVlKQorCitkZWYgc3ltYm9sX3RhYmxlKHN5bWJvbF9pZCwgZHNvX2lkLCBzeW1fc3RhcnQsIHN5bV9lbmQsIGJpbmRpbmcsIHN5bWJvbF9uYW1lLCAqeCk6CisJbiA9IGxlbihzeW1ib2xfbmFtZSkKKwlmbXQgPSAiIWhpcWlxaXFpcWlpaSIgKyBzdHIobikgKyAicyIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgNiwgOCwgc3ltYm9sX2lkLCA4LCBkc29faWQsIDgsIHN5bV9zdGFydCwgOCwgc3ltX2VuZCwgNCwgYmluZGluZywgbiwgc3ltYm9sX25hbWUpCisJc3ltYm9sX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiBicmFuY2hfdHlwZV90YWJsZShicmFuY2hfdHlwZSwgbmFtZSwgKngpOgorCW4gPSBsZW4obmFtZSkKKwlmbXQgPSAiIWhpaWkiICsgc3RyKG4pICsgInMiCisJdmFsdWUgPSBzdHJ1Y3QucGFjayhmbXQsIDIsIDQsIGJyYW5jaF90eXBlLCBuLCBuYW1lKQorCWJyYW5jaF90eXBlX2ZpbGUud3JpdGUodmFsdWUpCisKK2RlZiBzYW1wbGVfdGFibGUoc2FtcGxlX2lkLCBldnNlbF9pZCwgbWFjaGluZV9pZCwgdGhyZWFkX2lkLCBjb21tX2lkLCBkc29faWQsIHN5bWJvbF9pZCwgc3ltX29mZnNldCwgaXAsIHRpbWUsIGNwdSwgdG9fZHNvX2lkLCB0b19zeW1ib2xfaWQsIHRvX3N5bV9vZmZzZXQsIHRvX2lwLCBwZXJpb2QsIHdlaWdodCwgdHJhbnNhY3Rpb24sIGRhdGFfc3JjLCBicmFuY2hfdHlwZSwgaW5fdHgsICp4KToKKwlpZiBicmFuY2hlczoKKwkJdmFsdWUgPSBzdHJ1Y3QucGFjaygiIWhpcWlxaXFpcWlxaXFpcWlxaXFpcWlpaXFpcWlxaXFpaWlCIiwgMTcsIDgsIHNhbXBsZV9pZCwgOCwgZXZzZWxfaWQsIDgsIG1hY2hpbmVfaWQsIDgsIHRocmVhZF9pZCwgOCwgY29tbV9pZCwgOCwgZHNvX2lkLCA4LCBzeW1ib2xfaWQsIDgsIHN5bV9vZmZzZXQsIDgsIGlwLCA4LCB0aW1lLCA0LCBjcHUsIDgsIHRvX2Rzb19pZCwgOCwgdG9fc3ltYm9sX2lkLCA4LCB0b19zeW1fb2Zmc2V0LCA4LCB0b19pcCwgNCwgYnJhbmNoX3R5cGUsIDEsIGluX3R4KQorCWVsc2U6CisJCXZhbHVlID0gc3RydWN0LnBhY2soIiFoaXFpcWlxaXFpcWlxaXFpcWlxaXFpaWlxaXFpcWlxaXFpcWlxaXFpaWlCIiwgMjEsIDgsIHNhbXBsZV9pZCwgOCwgZXZzZWxfaWQsIDgsIG1hY2hpbmVfaWQsIDgsIHRocmVhZF9pZCwgOCwgY29tbV9pZCwgOCwgZHNvX2lkLCA4LCBzeW1ib2xfaWQsIDgsIHN5bV9vZmZzZXQsIDgsIGlwLCA4LCB0aW1lLCA0LCBjcHUsIDgsIHRvX2Rzb19pZCwgOCwgdG9fc3ltYm9sX2lkLCA4LCB0b19zeW1fb2Zmc2V0LCA4LCB0b19pcCwgOCwgcGVyaW9kLCA4LCB3ZWlnaHQsIDgsIHRyYW5zYWN0aW9uLCA4LCBkYXRhX3NyYywgNCwgYnJhbmNoX3R5cGUsIDEsIGluX3R4KQorCXNhbXBsZV9maWxlLndyaXRlKHZhbHVlKQorCitkZWYgY2FsbF9wYXRoX3RhYmxlKGNwX2lkLCBwYXJlbnRfaWQsIHN5bWJvbF9pZCwgaXAsICp4KToKKwlmbXQgPSAiIWhpcWlxaXFpcSIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgNCwgOCwgY3BfaWQsIDgsIHBhcmVudF9pZCwgOCwgc3ltYm9sX2lkLCA4LCBpcCkKKwljYWxsX3BhdGhfZmlsZS53cml0ZSh2YWx1ZSkKKworZGVmIGNhbGxfcmV0dXJuX3RhYmxlKGNyX2lkLCB0aHJlYWRfaWQsIGNvbW1faWQsIGNhbGxfcGF0aF9pZCwgY2FsbF90aW1lLCByZXR1cm5fdGltZSwgYnJhbmNoX2NvdW50LCBjYWxsX2lkLCByZXR1cm5faWQsIHBhcmVudF9jYWxsX3BhdGhfaWQsIGZsYWdzLCAqeCk6CisJZm10ID0gIiFoaXFpcWlxaXFpcWlxaXFpcWlxaXFpaSIKKwl2YWx1ZSA9IHN0cnVjdC5wYWNrKGZtdCwgMTEsIDgsIGNyX2lkLCA4LCB0aHJlYWRfaWQsIDgsIGNvbW1faWQsIDgsIGNhbGxfcGF0aF9pZCwgOCwgY2FsbF90aW1lLCA4LCByZXR1cm5fdGltZSwgOCwgYnJhbmNoX2NvdW50LCA4LCBjYWxsX2lkLCA4LCByZXR1cm5faWQsIDgsIHBhcmVudF9jYWxsX3BhdGhfaWQsIDQsIGZsYWdzKQorCWNhbGxfZmlsZS53cml0ZSh2YWx1ZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvYnVpbHRpbi10ZXN0LmMgYi90b29scy9wZXJmL3Rlc3RzL2J1aWx0aW4tdGVzdC5jCmluZGV4IDE2MmM5NzguLjRiN2Q5YWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvYnVpbHRpbi10ZXN0LmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9idWlsdGluLXRlc3QuYwpAQCAtODUsNyArODUsNyBAQAogCQkuZnVuYyA9IHRlc3RfX2hpc3RzX2xpbmssCiAJfSwKIAl7Ci0JCS5kZXNjID0gIlRyeSAndXNlIHBlcmYnIGluIHB5dGhvbiwgY2hlY2tpbmcgbGluayBwcm9ibGVtcyIsCisJCS5kZXNjID0gIlRyeSAnaW1wb3J0IHBlcmYnIGluIHB5dGhvbiwgY2hlY2tpbmcgbGluayBwcm9ibGVtcyIsCiAJCS5mdW5jID0gdGVzdF9fcHl0aG9uX3VzZSwKIAl9LAogCXsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvY29kZS1yZWFkaW5nLmMgYi90b29scy9wZXJmL3Rlc3RzL2NvZGUtcmVhZGluZy5jCmluZGV4IDY3ZjJkNjMuLmY2NzFlYzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvY29kZS1yZWFkaW5nLmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9jb2RlLXJlYWRpbmcuYwpAQCAtMTMzLDggKzEzMyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9vYmplY3RfY29kZSh1NjQgYWRkciwgc2l6ZV90IGxlbiwgdTggY3B1bW9kZSwKLQkJCSAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJICAgIHN0cnVjdCBzdGF0ZSAqc3RhdGUpCisJCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3Qgc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXVuc2lnbmVkIGNoYXIgYnVmMVtCVUZTWl07CkBAIC0xNDUsOCArMTQ0LDcgQEAKIAogCXByX2RlYnVnKCJSZWFkaW5nIG9iamVjdCBjb2RlIGZvciBtZW1vcnkgYWRkcmVzczogJSMiUFJJeDY0IlxuIiwgYWRkcik7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLAotCQkJICAgICAgJmFsKTsKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLCAmYWwpOwogCWlmICghYWwubWFwIHx8ICFhbC5tYXAtPmRzbykgewogCQlwcl9kZWJ1ZygidGhyZWFkX19maW5kX2FkZHJfbWFwIGZhaWxlZFxuIik7CiAJCXJldHVybiAtMTsKQEAgLTE3MCw4ICsxNjgsOCBAQAogCQlsZW4gPSBhbC5tYXAtPmVuZCAtIGFkZHI7CiAKIAkvKiBSZWFkIHRoZSBvYmplY3QgY29kZSB1c2luZyBwZXJmICovCi0JcmV0X2xlbiA9IGRzb19fZGF0YV9yZWFkX29mZnNldChhbC5tYXAtPmRzbywgbWFjaGluZSwgYWwuYWRkciwgYnVmMSwKLQkJCQkJbGVuKTsKKwlyZXRfbGVuID0gZHNvX19kYXRhX3JlYWRfb2Zmc2V0KGFsLm1hcC0+ZHNvLCB0aHJlYWQtPm1nLT5tYWNoaW5lLAorCQkJCQlhbC5hZGRyLCBidWYxLCBsZW4pOwogCWlmIChyZXRfbGVuICE9IGxlbikgewogCQlwcl9kZWJ1ZygiZHNvX19kYXRhX3JlYWRfb2Zmc2V0IGZhaWxlZFxuIik7CiAJCXJldHVybiAtMTsKQEAgLTI2NCw4ICsyNjIsNyBAQAogCiAJY3B1bW9kZSA9IGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLOwogCi0JcmV0dXJuIHJlYWRfb2JqZWN0X2NvZGUoc2FtcGxlLmlwLCBSRUFETEVOLCBjcHVtb2RlLCB0aHJlYWQsIG1hY2hpbmUsCi0JCQkJc3RhdGUpOworCXJldHVybiByZWFkX29iamVjdF9jb2RlKHNhbXBsZS5pcCwgUkVBRExFTiwgY3B1bW9kZSwgdGhyZWFkLCBzdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY2Vzc19ldmVudChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jIGIvdG9vbHMvcGVyZi90ZXN0cy9kd2FyZi11bndpbmQuYwppbmRleCBmYzI1ZTU3Li5hYjI4Y2NhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvZHdhcmYtdW53aW5kLmMKQEAgLTU5LDcgKzU5LDcgQEAKIH0KIAogX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKLXN0YXRpYyBpbnQgdW53aW5kX3RocmVhZChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQorc3RhdGljIGludCB1bndpbmRfdGhyZWFkKHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKIHsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGUgc2FtcGxlOwogCXVuc2lnbmVkIGxvbmcgY250ID0gMDsKQEAgLTcyLDcgKzcyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gdW53aW5kX19nZXRfZW50cmllcyh1bndpbmRfZW50cnksICZjbnQsIG1hY2hpbmUsIHRocmVhZCwKKwllcnIgPSB1bndpbmRfX2dldF9lbnRyaWVzKHVud2luZF9lbnRyeSwgJmNudCwgdGhyZWFkLAogCQkJCSAgJnNhbXBsZSwgTUFYX1NUQUNLKTsKIAlpZiAoZXJyKQogCQlwcl9kZWJ1ZygidW53aW5kIGZhaWxlZFxuIik7CkBAIC04OSwyMSArODksMjEgQEAKIH0KIAogX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKLXN0YXRpYyBpbnQga3JhdmFfMyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQorc3RhdGljIGludCBrcmF2YV8zKHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKIHsKLQlyZXR1cm4gdW53aW5kX3RocmVhZCh0aHJlYWQsIG1hY2hpbmUpOworCXJldHVybiB1bndpbmRfdGhyZWFkKHRocmVhZCk7CiB9CiAKIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCi1zdGF0aWMgaW50IGtyYXZhXzIoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3N0YXRpYyBpbnQga3JhdmFfMihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCiB7Ci0JcmV0dXJuIGtyYXZhXzModGhyZWFkLCBtYWNoaW5lKTsKKwlyZXR1cm4ga3JhdmFfMyh0aHJlYWQpOwogfQogCiBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQotc3RhdGljIGludCBrcmF2YV8xKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCitzdGF0aWMgaW50IGtyYXZhXzEoc3RydWN0IHRocmVhZCAqdGhyZWFkKQogewotCXJldHVybiBrcmF2YV8yKHRocmVhZCwgbWFjaGluZSk7CisJcmV0dXJuIGtyYXZhXzIodGhyZWFkKTsKIH0KIAogaW50IHRlc3RfX2R3YXJmX3Vud2luZCh2b2lkKQpAQCAtMTM3LDcgKzEzNyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGtyYXZhXzEodGhyZWFkLCBtYWNoaW5lKTsKKwllcnIgPSBrcmF2YV8xKHRocmVhZCk7CiAKICBvdXQ6CiAJbWFjaGluZV9fZGVsZXRlX3RocmVhZHMobWFjaGluZSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jIGIvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19maWx0ZXIuYwppbmRleCA1YTMxNzg3Li43NGYyNTdhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfZmlsdGVyLmMKQEAgLTQzLDcgKzQzLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgYWRkX2hpc3RfZW50cmllcyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwKLQkJCSAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSBfX21heWJlX3VudXNlZCkKKwkJCSAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKIHsKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL21tYXAtdGhyZWFkLWxvb2t1cC5jIGIvdG9vbHMvcGVyZi90ZXN0cy9tbWFwLXRocmVhZC1sb29rdXAuYwppbmRleCA0YTQ1NmZlLi4yMTEzZjFjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3Rlc3RzL21tYXAtdGhyZWFkLWxvb2t1cC5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvbW1hcC10aHJlYWQtbG9va3VwLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCiAJCXByX2RlYnVnKCJsb29raW5nIGZvciBtYXAgJXBcbiIsIHRkLT5tYXApOwogCi0JCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsIG1hY2hpbmUsCisJCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsCiAJCQkJICAgICAgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLCBNQVBfX0ZVTkNUSU9OLAogCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSAodGQtPm1hcCArIDEpLCAmYWwpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL3NhbXBsZS1wYXJzaW5nLmMgYi90b29scy9wZXJmL3Rlc3RzL3NhbXBsZS1wYXJzaW5nLmMKaW5kZXggY2EyOTJmOS4uNDkwOGM2NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9zYW1wbGUtcGFyc2luZy5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvc2FtcGxlLXBhcnNpbmcuYwpAQCAtMTI2LDE2ICsxMjYsMjggQEAKIAlpZiAodHlwZSAmIFBFUkZfU0FNUExFX1RSQU5TQUNUSU9OKQogCQlDT01QKHRyYW5zYWN0aW9uKTsKIAorCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfUkVHU19JTlRSKSB7CisJCXNpemVfdCBzeiA9IGh3ZWlnaHRfbG9uZyhzMS0+aW50cl9yZWdzLm1hc2spICogc2l6ZW9mKHU2NCk7CisKKwkJQ09NUChpbnRyX3JlZ3MubWFzayk7CisJCUNPTVAoaW50cl9yZWdzLmFiaSk7CisJCWlmIChzMS0+aW50cl9yZWdzLmFiaSAmJgorCQkgICAgKCFzMS0+aW50cl9yZWdzLnJlZ3MgfHwgIXMyLT5pbnRyX3JlZ3MucmVncyB8fAorCQkgICAgIG1lbWNtcChzMS0+aW50cl9yZWdzLnJlZ3MsIHMyLT5pbnRyX3JlZ3MucmVncywgc3opKSkgeworCQkJcHJfZGVidWcoIlNhbXBsZXMgZGlmZmVyIGF0ICdpbnRyX3JlZ3MnXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IGRvX3Rlc3QodTY0IHNhbXBsZV90eXBlLCB1NjQgc2FtcGxlX3JlZ3NfdXNlciwgdTY0IHJlYWRfZm9ybWF0KQorc3RhdGljIGludCBkb190ZXN0KHU2NCBzYW1wbGVfdHlwZSwgdTY0IHNhbXBsZV9yZWdzLCB1NjQgcmVhZF9mb3JtYXQpCiB7CiAJc3RydWN0IHBlcmZfZXZzZWwgZXZzZWwgPSB7CiAJCS5uZWVkc19zd2FwID0gZmFsc2UsCiAJCS5hdHRyID0gewogCQkJLnNhbXBsZV90eXBlID0gc2FtcGxlX3R5cGUsCi0JCQkuc2FtcGxlX3JlZ3NfdXNlciA9IHNhbXBsZV9yZWdzX3VzZXIsCiAJCQkucmVhZF9mb3JtYXQgPSByZWFkX2Zvcm1hdCwKIAkJfSwKIAl9OwpAQCAtMTU0LDcgKzE2Niw3IEBACiAJCS8qIDEgYnJhbmNoX2VudHJ5ICovCiAJCS5kYXRhID0gezEsIDIxMSwgMjEyLCAyMTN9LAogCX07Ci0JdTY0IHVzZXJfcmVnc1s2NF07CisJdTY0IHJlZ3NbNjRdOwogCWNvbnN0IHU2NCByYXdfZGF0YVtdID0gezB4MTIzNDU2NzgwYTBiMGMwZFVMTCwgMHgxMTAyMDMwNDA1MDYwNzA4VUxMfTsKIAljb25zdCB1NjQgZGF0YVtdID0gezB4MjIxMTQ0MzM2NjU1ODg3N1VMTCwgMCwgMHhhYWJiY2NkZGVlZmY0MzIxVUxMfTsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGUgc2FtcGxlID0gewpAQCAtMTc2LDggKzE4OCw4IEBACiAJCS5icmFuY2hfc3RhY2sJPSAmYnJhbmNoX3N0YWNrLmJyYW5jaF9zdGFjaywKIAkJLnVzZXJfcmVncwk9IHsKIAkJCS5hYmkJPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV82NCwKLQkJCS5tYXNrCT0gc2FtcGxlX3JlZ3NfdXNlciwKLQkJCS5yZWdzCT0gdXNlcl9yZWdzLAorCQkJLm1hc2sJPSBzYW1wbGVfcmVncywKKwkJCS5yZWdzCT0gcmVncywKIAkJfSwKIAkJLnVzZXJfc3RhY2sJPSB7CiAJCQkuc2l6ZQk9IHNpemVvZihkYXRhKSwKQEAgLTE4NywxNCArMTk5LDI1IEBACiAJCQkudGltZV9lbmFibGVkID0gMHgwMzBhNTlkNjY0ZmNhN2RlVUxMLAogCQkJLnRpbWVfcnVubmluZyA9IDB4MDExYjZhZTU1M2ViOThlZFVMTCwKIAkJfSwKKwkJLmludHJfcmVncwk9IHsKKwkJCS5hYmkJPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV82NCwKKwkJCS5tYXNrCT0gc2FtcGxlX3JlZ3MsCisJCQkucmVncwk9IHJlZ3MsCisJCX0sCiAJfTsKIAlzdHJ1Y3Qgc2FtcGxlX3JlYWRfdmFsdWUgdmFsdWVzW10gPSB7ezEsIDV9LCB7OSwgM30sIHsyLCA3fSwgezYsIDR9LH07CiAJc3RydWN0IHBlcmZfc2FtcGxlIHNhbXBsZV9vdXQ7CiAJc2l6ZV90IGksIHN6LCBidWZzejsKIAlpbnQgZXJyLCByZXQgPSAtMTsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodXNlcl9yZWdzKTsgaSsrKQotCQkqKGkgKyAodTggKil1c2VyX3JlZ3MpID0gaSAmIDB4ZmU7CisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVHU19VU0VSKQorCQlldnNlbC5hdHRyLnNhbXBsZV9yZWdzX3VzZXIgPSBzYW1wbGVfcmVnczsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFR1NfSU5UUikKKwkJZXZzZWwuYXR0ci5zYW1wbGVfcmVnc19pbnRyID0gc2FtcGxlX3JlZ3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJlZ3MpOyBpKyspCisJCSooaSArICh1OCAqKXJlZ3MpID0gaSAmIDB4ZmU7CiAKIAlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9HUk9VUCkgewogCQlzYW1wbGUucmVhZC5ncm91cC5uciAgICAgPSA0OwpAQCAtMjcxLDcgKzI5NCw3IEBACiB7CiAJY29uc3QgdTY0IHJmW10gPSB7NCwgNSwgNiwgNywgMTIsIDEzLCAxNCwgMTV9OwogCXU2NCBzYW1wbGVfdHlwZTsKLQl1NjQgc2FtcGxlX3JlZ3NfdXNlcjsKKwl1NjQgc2FtcGxlX3JlZ3M7CiAJc2l6ZV90IGk7CiAJaW50IGVycjsKIApAQCAtMjgwLDcgKzMwMyw3IEBACiAJICogd2VyZSBhZGRlZC4gIFBsZWFzZSBhY3R1YWxseSB1cGRhdGUgdGhlIHRlc3QgcmF0aGVyIHRoYW4ganVzdCBjaGFuZ2UKIAkgKiB0aGUgY29uZGl0aW9uIGJlbG93LgogCSAqLwotCWlmIChQRVJGX1NBTVBMRV9NQVggPiBQRVJGX1NBTVBMRV9UUkFOU0FDVElPTiA8PCAxKSB7CisJaWYgKFBFUkZfU0FNUExFX01BWCA+IFBFUkZfU0FNUExFX1JFR1NfSU5UUiA8PCAxKSB7CiAJCXByX2RlYnVnKCJzYW1wbGUgZm9ybWF0IGhhcyBjaGFuZ2VkLCBzb21lIG5ldyBQRVJGX1NBTVBMRV8gYml0IHdhcyBpbnRyb2R1Y2VkIC0gdGVzdCBuZWVkcyB1cGRhdGluZ1xuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yOTcsMjIgKzMyMCwyNCBAQAogCQkJfQogCQkJY29udGludWU7CiAJCX0KKwkJc2FtcGxlX3JlZ3MgPSAwOwogCiAJCWlmIChzYW1wbGVfdHlwZSA9PSBQRVJGX1NBTVBMRV9SRUdTX1VTRVIpCi0JCQlzYW1wbGVfcmVnc191c2VyID0gMHgzZmZmOwotCQllbHNlCi0JCQlzYW1wbGVfcmVnc191c2VyID0gMDsKKwkJCXNhbXBsZV9yZWdzID0gMHgzZmZmOwogCi0JCWVyciA9IGRvX3Rlc3Qoc2FtcGxlX3R5cGUsIHNhbXBsZV9yZWdzX3VzZXIsIDApOworCQlpZiAoc2FtcGxlX3R5cGUgPT0gUEVSRl9TQU1QTEVfUkVHU19JTlRSKQorCQkJc2FtcGxlX3JlZ3MgPSAweGZmMGZmZjsKKworCQllcnIgPSBkb190ZXN0KHNhbXBsZV90eXBlLCBzYW1wbGVfcmVncywgMCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KIAogCS8qIFRlc3QgYWxsIHNhbXBsZSBmb3JtYXQgYml0cyB0b2dldGhlciAqLwogCXNhbXBsZV90eXBlID0gUEVSRl9TQU1QTEVfTUFYIC0gMTsKLQlzYW1wbGVfcmVnc191c2VyID0gMHgzZmZmOworCXNhbXBsZV9yZWdzID0gMHgzZmZmOyAvKiBzaGFyZWQgeWIgaW50ciBhbmQgdXNlciByZWdzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmYpOyBpKyspIHsKLQkJZXJyID0gZG9fdGVzdChzYW1wbGVfdHlwZSwgc2FtcGxlX3JlZ3NfdXNlciwgcmZbaV0pOworCQllcnIgPSBkb190ZXN0KHNhbXBsZV90eXBlLCBzYW1wbGVfcmVncywgcmZbaV0pOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKaW5kZXggZjA2OTdhMy4uMWUwYTJmZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9icm93c2Vycy9hbm5vdGF0ZS5jCisrKyBiL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvYW5ub3RhdGUuYwpAQCAtMjcsNiArMjcsNyBAQAogCWJvb2wgaGlkZV9zcmNfY29kZSwKIAkgICAgIHVzZV9vZmZzZXQsCiAJICAgICBqdW1wX2Fycm93cywKKwkgICAgIHNob3dfbGluZW5yLAogCSAgICAgc2hvd19ucl9qdW1wczsKIH0gYW5ub3RhdGVfYnJvd3Nlcl9fb3B0cyA9IHsKIAkudXNlX29mZnNldAk9IHRydWUsCkBAIC0xMjgsNyArMTI5LDExIEBACiAJaWYgKCEqZGwtPmxpbmUpCiAJCXNsc21nX3dyaXRlX25zdHJpbmcoIiAiLCB3aWR0aCAtIHBjbnRfd2lkdGgpOwogCWVsc2UgaWYgKGRsLT5vZmZzZXQgPT0gLTEpIHsKLQkJcHJpbnRlZCA9IHNjbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIiUqcyAgIiwKKwkJaWYgKGRsLT5saW5lX25yICYmIGFubm90YXRlX2Jyb3dzZXJfX29wdHMuc2hvd19saW5lbnIpCisJCQlwcmludGVkID0gc2NucHJpbnRmKGJmLCBzaXplb2YoYmYpLCAiJS0qZCAiLAorCQkJCQlhYi0+YWRkcl93aWR0aCArIDEsIGRsLT5saW5lX25yKTsKKwkJZWxzZQorCQkJcHJpbnRlZCA9IHNjbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIiUqcyAgIiwKIAkJCQkgICAgYWItPmFkZHJfd2lkdGgsICIgIik7CiAJCXNsc21nX3dyaXRlX25zdHJpbmcoYmYsIHByaW50ZWQpOwogCQlzbHNtZ193cml0ZV9uc3RyaW5nKGRsLT5saW5lLCB3aWR0aCAtIHByaW50ZWQgLSBwY250X3dpZHRoICsgMSk7CkBAIC03MzMsNiArNzM4LDcgQEAKIAkJIm8gICAgICAgICAgICAgVG9nZ2xlIGRpc2Fzc2VtYmxlciBvdXRwdXQvc2ltcGxpZmllZCB2aWV3XG4iCiAJCSJzICAgICAgICAgICAgIFRvZ2dsZSBzb3VyY2UgY29kZSB2aWV3XG4iCiAJCSIvICAgICAgICAgICAgIFNlYXJjaCBzdHJpbmdcbiIKKwkJImsgICAgICAgICAgICAgVG9nZ2xlIGxpbmUgbnVtYmVyc1xuIgogCQkiciAgICAgICAgICAgICBSdW4gYXZhaWxhYmxlIHNjcmlwdHNcbiIKIAkJIj8gICAgICAgICAgICAgU2VhcmNoIHN0cmluZyBiYWNrd2FyZHNcbiIpOwogCQkJY29udGludWU7CkBAIC03NDEsNiArNzQ3LDEwIEBACiAJCQkJc2NyaXB0X2Jyb3dzZShOVUxMKTsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJY2FzZSAnayc6CisJCQlhbm5vdGF0ZV9icm93c2VyX19vcHRzLnNob3dfbGluZW5yID0KKwkJCQkhYW5ub3RhdGVfYnJvd3Nlcl9fb3B0cy5zaG93X2xpbmVucjsKKwkJCWJyZWFrOwogCQljYXNlICdIJzoKIAkJCW5kID0gYnJvd3Nlci0+Y3Vycl9ob3Q7CiAJCQlicmVhazsKQEAgLTk4NCw2ICs5OTQsNyBAQAogfSBhbm5vdGF0ZV9fY29uZmlnc1tdID0gewogCUFOTk9UQVRFX0NGRyhoaWRlX3NyY19jb2RlKSwKIAlBTk5PVEFURV9DRkcoanVtcF9hcnJvd3MpLAorCUFOTk9UQVRFX0NGRyhzaG93X2xpbmVuciksCiAJQU5OT1RBVEVfQ0ZHKHNob3dfbnJfanVtcHMpLAogCUFOTk9UQVRFX0NGRyh1c2Vfb2Zmc2V0KSwKIH07CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMgYi90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMKaW5kZXggY2ZiOTc2Yi4uNTAyZGFmZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9icm93c2Vycy9oaXN0cy5jCisrKyBiL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvaGlzdHMuYwpAQCAtMjI3LDEwICsyMjcsMTQgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGNhbGxjaGFpbl9ub2RlX19pbml0X2hhdmVfY2hpbGRyZW4oc3RydWN0IGNhbGxjaGFpbl9ub2RlICpub2RlKQorc3RhdGljIHZvaWQgY2FsbGNoYWluX25vZGVfX2luaXRfaGF2ZV9jaGlsZHJlbihzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKm5vZGUsCisJCQkJCSAgICAgICBib29sIGhhc19zaWJsaW5nKQogewogCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47CiAKKwljaGFpbiA9IGxpc3RfZW50cnkobm9kZS0+dmFsLm5leHQsIHN0cnVjdCBjYWxsY2hhaW5fbGlzdCwgbGlzdCk7CisJY2hhaW4tPm1zLmhhc19jaGlsZHJlbiA9IGhhc19zaWJsaW5nOworCiAJaWYgKCFsaXN0X2VtcHR5KCZub2RlLT52YWwpKSB7CiAJCWNoYWluID0gbGlzdF9lbnRyeShub2RlLT52YWwucHJldiwgc3RydWN0IGNhbGxjaGFpbl9saXN0LCBsaXN0KTsKIAkJY2hhaW4tPm1zLmhhc19jaGlsZHJlbiA9ICFSQl9FTVBUWV9ST09UKCZub2RlLT5yYl9yb290KTsKQEAgLTI0MSwxMSArMjQ1LDEyIEBACiAKIHN0YXRpYyB2b2lkIGNhbGxjaGFpbl9faW5pdF9oYXZlX2NoaWxkcmVuKHN0cnVjdCByYl9yb290ICpyb290KQogewotCXN0cnVjdCByYl9ub2RlICpuZDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQgPSByYl9maXJzdChyb290KTsKKwlib29sIGhhc19zaWJsaW5nID0gbmQgJiYgcmJfbmV4dChuZCk7CiAKIAlmb3IgKG5kID0gcmJfZmlyc3Qocm9vdCk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqbm9kZSA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUsIHJiX25vZGUpOwotCQljYWxsY2hhaW5fbm9kZV9faW5pdF9oYXZlX2NoaWxkcmVuKG5vZGUpOworCQljYWxsY2hhaW5fbm9kZV9faW5pdF9oYXZlX2NoaWxkcmVuKG5vZGUsIGhhc19zaWJsaW5nKTsKIAl9CiB9CiAKQEAgLTQ2MywyMyArNDY4LDYgQEAKIAlyZXR1cm4ga2V5OwogfQogCi1zdGF0aWMgY2hhciAqY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKHN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2wsCi0JCQkJICAgICAgY2hhciAqYmYsIHNpemVfdCBiZnNpemUsIGJvb2wgc2hvd19kc28pCi17Ci0JaW50IHByaW50ZWQ7Ci0KLQlpZiAoY2wtPm1zLnN5bSkKLQkJcHJpbnRlZCA9IHNjbnByaW50ZihiZiwgYmZzaXplLCAiJXMiLCBjbC0+bXMuc3ltLT5uYW1lKTsKLQllbHNlCi0JCXByaW50ZWQgPSBzY25wcmludGYoYmYsIGJmc2l6ZSwgIiUjIiBQUkl4NjQsIGNsLT5pcCk7Ci0KLQlpZiAoc2hvd19kc28pCi0JCXNjbnByaW50ZihiZiArIHByaW50ZWQsIGJmc2l6ZSAtIHByaW50ZWQsICIgJXMiLAotCQkJICBjbC0+bXMubWFwID8gY2wtPm1zLm1hcC0+ZHNvLT5zaG9ydF9uYW1lIDogInVua25vd24iKTsKLQotCXJldHVybiBiZjsKLX0KLQogc3RydWN0IGNhbGxjaGFpbl9wcmludF9hcmcgewogCS8qIGZvciBoaXN0cyBicm93c2VyICovCiAJb2ZmX3QJcm93X29mZnNldDsKQEAgLTU1OSw4ICs1NDcsMTEgQEAKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAlpbnQgZmlyc3Rfcm93ID0gcm93LCBvZmZzZXQgPSBsZXZlbCAqIExFVkVMX09GRlNFVF9TVEVQOwogCXU2NCBuZXdfdG90YWw7CisJYm9vbCBuZWVkX3BlcmNlbnQ7CiAKIAlub2RlID0gcmJfZmlyc3Qocm9vdCk7CisJbmVlZF9wZXJjZW50ID0gISFyYl9uZXh0KG5vZGUpOworCiAJd2hpbGUgKG5vZGUpIHsKIAkJc3RydWN0IGNhbGxjaGFpbl9ub2RlICpjaGlsZCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZSk7CiAJCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfbmV4dChub2RlKTsKQEAgLTU3Nyw3ICs1NjgsNyBAQAogCiAJCQlpZiAoZmlyc3QpCiAJCQkJZmlyc3QgPSBmYWxzZTsKLQkJCWVsc2UgaWYgKGxldmVsID4gMSkKKwkJCWVsc2UgaWYgKG5lZWRfcGVyY2VudCkKIAkJCQlleHRyYV9vZmZzZXQgPSBMRVZFTF9PRkZTRVRfU1RFUDsKIAogCQkJZm9sZGVkX3NpZ24gPSBjYWxsY2hhaW5fbGlzdF9fZm9sZGVkKGNoYWluKTsKQEAgLTU5MCw3ICs1ODEsNyBAQAogCQkJc3RyID0gY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKGNoYWluLCBiZiwgc2l6ZW9mKGJmKSwKIAkJCQkJCSAgICAgICBicm93c2VyLT5zaG93X2Rzbyk7CiAKLQkJCWlmICh3YXNfZmlyc3QgJiYgbGV2ZWwgPiAxKSB7CisJCQlpZiAod2FzX2ZpcnN0ICYmIG5lZWRfcGVyY2VudCkgewogCQkJCWRvdWJsZSBwZXJjZW50ID0gY3VtdWwgKiAxMDAuMCAvIHRvdGFsOwogCiAJCQkJaWYgKGFzcHJpbnRmKCZhbGxvY19zdHIsICIlMi4yZiUlICVzIiwgcGVyY2VudCwgc3RyKSA8IDApCkBAIC04MDcsNiArNzk4LDEzIEBACiAJCQkuaXNfY3VycmVudF9lbnRyeSA9IGN1cnJlbnRfZW50cnksCiAJCX07CiAKKwkJaWYgKGNhbGxjaGFpbl9wYXJhbS5tb2RlID09IENIQUlOX0dSQVBIX1JFTCkgeworCQkJaWYgKHN5bWJvbF9jb25mLmN1bXVsYXRlX2NhbGxjaGFpbikKKwkJCQl0b3RhbCA9IGVudHJ5LT5zdGF0X2FjYy0+cGVyaW9kOworCQkJZWxzZQorCQkJCXRvdGFsID0gZW50cnktPnN0YXQucGVyaW9kOworCQl9CisKIAkJcHJpbnRlZCArPSBoaXN0X2Jyb3dzZXJfX3Nob3dfY2FsbGNoYWluKGJyb3dzZXIsCiAJCQkJCSZlbnRyeS0+c29ydGVkX2NoYWluLCAxLCByb3csIHRvdGFsLAogCQkJCQloaXN0X2Jyb3dzZXJfX3Nob3dfY2FsbGNoYWluX2VudHJ5LCAmYXJnLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYyBiL3Rvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMKaW5kZXggZmM2NTRmYi4uNGIzNTg1ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9ndGsvaGlzdHMuYworKysgYi90b29scy9wZXJmL3VpL2d0ay9oaXN0cy5jCkBAIC04OSwxNSArODksNiBAQAogCQkJCXBlcmZfZ3RrX19ocHBfY29sb3Jfb3ZlcmhlYWRfYWNjOwogfQogCi1zdGF0aWMgdm9pZCBjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjbCwKLQkJCQkgICAgIGNoYXIgKmJmLCBzaXplX3QgYmZzaXplKQotewotCWlmIChjbC0+bXMuc3ltKQotCQlzY25wcmludGYoYmYsIGJmc2l6ZSwgIiVzIiwgY2wtPm1zLnN5bS0+bmFtZSk7Ci0JZWxzZQotCQlzY25wcmludGYoYmYsIGJmc2l6ZSwgIiUjIiBQUkl4NjQsIGNsLT5pcCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmZfZ3RrX19hZGRfY2FsbGNoYWluKHN0cnVjdCByYl9yb290ICpyb290LCBHdGtUcmVlU3RvcmUgKnN0b3JlLAogCQkJCSAgICBHdGtUcmVlSXRlciAqcGFyZW50LCBpbnQgY29sLCB1NjQgdG90YWwpCiB7CkBAIC0xMjgsNyArMTE5LDcgQEAKIAkJCXNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTUuMmYlJSIsIHBlcmNlbnQpOwogCQkJZ3RrX3RyZWVfc3RvcmVfc2V0KHN0b3JlLCAmaXRlciwgMCwgYnVmLCAtMSk7CiAKLQkJCWNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShjaGFpbiwgYnVmLCBzaXplb2YoYnVmKSk7CisJCQljYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoY2hhaW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZhbHNlKTsKIAkJCWd0a190cmVlX3N0b3JlX3NldChzdG9yZSwgJml0ZXIsIGNvbCwgYnVmLCAtMSk7CiAKIAkJCWlmIChuZWVkX25ld19wYXJlbnQpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvc3RkaW8vaGlzdC5jIGIvdG9vbHMvcGVyZi91aS9zdGRpby9oaXN0LmMKaW5kZXggMTViNDUxYS4uZGZjYmM5MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9zdGRpby9oaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91aS9zdGRpby9oaXN0LmMKQEAgLTQxLDYgKzQxLDcgQEAKIHsKIAlpbnQgaTsKIAlzaXplX3QgcmV0ID0gMDsKKwljaGFyIGJmWzEwMjRdOwogCiAJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOwogCWZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7CkBAIC01NiwxMSArNTcsOCBAQAogCQl9IGVsc2UKIAkJCXJldCArPSBmcHJpbnRmKGZwLCAiJXMiLCAiICAgICAgICAgICIpOwogCX0KLQlpZiAoY2hhaW4tPm1zLnN5bSkKLQkJcmV0ICs9IGZwcmludGYoZnAsICIlc1xuIiwgY2hhaW4tPm1zLnN5bS0+bmFtZSk7Ci0JZWxzZQotCQlyZXQgKz0gZnByaW50ZihmcCwgIjB4JTAiIFBSSXg2NCAiXG4iLCBjaGFpbi0+aXApOwotCisJZnB1dHMoY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKGNoYWluLCBiZiwgc2l6ZW9mKGJmKSwgZmFsc2UpLCBmcCk7CisJZnB1dGMoJ1xuJywgZnApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE2OCw2ICsxNjYsNyBAQAogCXN0cnVjdCByYl9ub2RlICpub2RlOwogCWludCBpID0gMDsKIAlpbnQgcmV0ID0gMDsKKwljaGFyIGJmWzEwMjRdOwogCiAJLyoKIAkgKiBJZiBoYXZlIG9uZSBzaW5nbGUgY2FsbGNoYWluIHJvb3QsIGRvbid0IGJvdGhlciBwcmludGluZwpAQCAtMTk2LDEwICsxOTUsOCBAQAogCQkJfSBlbHNlCiAJCQkJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOwogCi0JCQlpZiAoY2hhaW4tPm1zLnN5bSkKLQkJCQlyZXQgKz0gZnByaW50ZihmcCwgIiAlc1xuIiwgY2hhaW4tPm1zLnN5bS0+bmFtZSk7Ci0JCQllbHNlCi0JCQkJcmV0ICs9IGZwcmludGYoZnAsICIgJXBcbiIsICh2b2lkICopKGxvbmcpY2hhaW4tPmlwKTsKKwkJCXJldCArPSBmcHJpbnRmKGZwLCAiJXNcbiIsIGNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShjaGFpbiwgYmYsIHNpemVvZihiZiksCisJCQkJCQkJZmFsc2UpKTsKIAogCQkJaWYgKCsrZW50cmllc19wcmludGVkID09IGNhbGxjaGFpbl9wYXJhbS5wcmludF9saW1pdCkKIAkJCQlicmVhazsKQEAgLTIxOSw2ICsyMTYsNyBAQAogewogCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47CiAJc2l6ZV90IHJldCA9IDA7CisJY2hhciBiZlsxMDI0XTsKIAogCWlmICghbm9kZSkKIAkJcmV0dXJuIDA7CkBAIC0yMjksMTEgKzIyNyw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJm5vZGUtPnZhbCwgbGlzdCkgewogCQlpZiAoY2hhaW4tPmlwID49IFBFUkZfQ09OVEVYVF9NQVgpCiAJCQljb250aW51ZTsKLQkJaWYgKGNoYWluLT5tcy5zeW0pCi0JCQlyZXQgKz0gZnByaW50ZihmcCwgIiAgICAgICAgICAgICAgICAlc1xuIiwgY2hhaW4tPm1zLnN5bS0+bmFtZSk7Ci0JCWVsc2UKLQkJCXJldCArPSBmcHJpbnRmKGZwLCAiICAgICAgICAgICAgICAgICVwXG4iLAotCQkJCQkodm9pZCAqKShsb25nKWNoYWluLT5pcCk7CisJCXJldCArPSBmcHJpbnRmKGZwLCAiICAgICAgICAgICAgICAgICVzXG4iLCBjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoY2hhaW4sCisJCQkJCWJmLCBzaXplb2YoYmYpLCBmYWxzZSkpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCmluZGV4IDdkYWJkZTEuLjc5OTk5Y2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hbm5vdGF0ZS5jCkBAIC0xNywxMSArMTcsMTMgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImFubm90YXRlLmgiCiAjaW5jbHVkZSAiZXZzZWwuaCIKKyNpbmNsdWRlIDxyZWdleC5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogY29uc3QgY2hhciAJKmRpc2Fzc2VtYmxlcl9zdHlsZTsKIGNvbnN0IGNoYXIJKm9iamR1bXBfcGF0aDsKK3N0YXRpYyByZWdleF90CSBmaWxlX2xpbmVubzsKIAogc3RhdGljIHN0cnVjdCBpbnMgKmluc19fZmluZChjb25zdCBjaGFyICpuYW1lKTsKIHN0YXRpYyBpbnQgZGlzYXNtX2xpbmVfX3BhcnNlKGNoYXIgKmxpbmUsIGNoYXIgKipuYW1lcCwgY2hhciAqKnJhd3ApOwpAQCAtNTcwLDEzICs1NzIsMTUgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGlzYXNtX2xpbmUgKmRpc2FzbV9saW5lX19uZXcoczY0IG9mZnNldCwgY2hhciAqbGluZSwgc2l6ZV90IHByaXZzaXplKQorc3RhdGljIHN0cnVjdCBkaXNhc21fbGluZSAqZGlzYXNtX2xpbmVfX25ldyhzNjQgb2Zmc2V0LCBjaGFyICpsaW5lLAorCQkJCQlzaXplX3QgcHJpdnNpemUsIGludCBsaW5lX25yKQogewogCXN0cnVjdCBkaXNhc21fbGluZSAqZGwgPSB6YWxsb2Moc2l6ZW9mKCpkbCkgKyBwcml2c2l6ZSk7CiAKIAlpZiAoZGwgIT0gTlVMTCkgewogCQlkbC0+b2Zmc2V0ID0gb2Zmc2V0OwogCQlkbC0+bGluZSA9IHN0cmR1cChsaW5lKTsKKwkJZGwtPmxpbmVfbnIgPSBsaW5lX25yOwogCQlpZiAoZGwtPmxpbmUgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X2RlbGV0ZTsKIApAQCAtNzg4LDEzICs3OTIsMTUgQEAKICAqIFRoZSBvcHMucmF3IHBhcnQgd2lsbCBiZSBwYXJzZWQgZnVydGhlciBhY2NvcmRpbmcgdG8gdHlwZSBvZiB0aGUgaW5zdHJ1Y3Rpb24uCiAgKi8KIHN0YXRpYyBpbnQgc3ltYm9sX19wYXJzZV9vYmpkdW1wX2xpbmUoc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkJICAgICAgRklMRSAqZmlsZSwgc2l6ZV90IHByaXZzaXplKQorCQkJCSAgICAgIEZJTEUgKmZpbGUsIHNpemVfdCBwcml2c2l6ZSwKKwkJCQkgICAgICBpbnQgKmxpbmVfbnIpCiB7CiAJc3RydWN0IGFubm90YXRpb24gKm5vdGVzID0gc3ltYm9sX19hbm5vdGF0aW9uKHN5bSk7CiAJc3RydWN0IGRpc2FzbV9saW5lICpkbDsKIAljaGFyICpsaW5lID0gTlVMTCwgKnBhcnNlZF9saW5lLCAqdG1wLCAqdG1wMiwgKmM7CiAJc2l6ZV90IGxpbmVfbGVuOwogCXM2NCBsaW5lX2lwLCBvZmZzZXQgPSAtMTsKKwlyZWdtYXRjaF90IG1hdGNoWzJdOwogCiAJaWYgKGdldGxpbmUoJmxpbmUsICZsaW5lX2xlbiwgZmlsZSkgPCAwKQogCQlyZXR1cm4gLTE7CkBAIC04MTIsNiArODE4LDEyIEBACiAJbGluZV9pcCA9IC0xOwogCXBhcnNlZF9saW5lID0gbGluZTsKIAorCS8qIC9maWxlbmFtZTpsaW5lbnIgPyBTYXZlIGxpbmUgbnVtYmVyIGFuZCBpZ25vcmUuICovCisJaWYgKHJlZ2V4ZWMoJmZpbGVfbGluZW5vLCBsaW5lLCAyLCBtYXRjaCwgMCkgPT0gMCkgeworCQkqbGluZV9uciA9IGF0b2kobGluZSArIG1hdGNoWzFdLnJtX3NvKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKIAkgKiBTdHJpcCBsZWFkaW5nIHNwYWNlczoKIAkgKi8KQEAgLTg0Miw4ICs4NTQsOSBAQAogCQkJcGFyc2VkX2xpbmUgPSB0bXAyICsgMTsKIAl9CiAKLQlkbCA9IGRpc2FzbV9saW5lX19uZXcob2Zmc2V0LCBwYXJzZWRfbGluZSwgcHJpdnNpemUpOworCWRsID0gZGlzYXNtX2xpbmVfX25ldyhvZmZzZXQsIHBhcnNlZF9saW5lLCBwcml2c2l6ZSwgKmxpbmVfbnIpOwogCWZyZWUobGluZSk7CisJKCpsaW5lX25yKSsrOwogCiAJaWYgKGRsID09IE5VTEwpCiAJCXJldHVybiAtMTsKQEAgLTg2OSw2ICs4ODIsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgdm9pZCBzeW1ib2xfX2luaXRfcmVnZXhwcih2b2lkKQoreworCXJlZ2NvbXAoJmZpbGVfbGluZW5vLCAiXi9bXjpdKzooWzAtOV0rKSIsIFJFR19FWFRFTkRFRCk7Cit9CisKIHN0YXRpYyB2b2lkIGRlbGV0ZV9sYXN0X25vcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7CiAJc3RydWN0IGFubm90YXRpb24gKm5vdGVzID0gc3ltYm9sX19hbm5vdGF0aW9uKHN5bSk7CkBAIC05MDQsNiArOTIyLDcgQEAKIAljaGFyIHN5bWZzX2ZpbGVuYW1lW1BBVEhfTUFYXTsKIAlzdHJ1Y3Qga2NvcmVfZXh0cmFjdCBrY2U7CiAJYm9vbCBkZWxldGVfZXh0cmFjdCA9IGZhbHNlOworCWludCBsaW5lbm8gPSAwOwogCiAJaWYgKGZpbGVuYW1lKQogCQlzeW1ib2xfX2pvaW5fc3ltZnMoc3ltZnNfZmlsZW5hbWUsIGZpbGVuYW1lKTsKQEAgLTkxNSw2ICs5MzQsOCBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJZ290byBmYWxsYmFjazsKKwl9IGVsc2UgaWYgKGRzb19faXNfa2NvcmUoZHNvKSkgeworCQlnb3RvIGZhbGxiYWNrOwogCX0gZWxzZSBpZiAocmVhZGxpbmsoc3ltZnNfZmlsZW5hbWUsIGNvbW1hbmQsIHNpemVvZihjb21tYW5kKSkgPCAwIHx8CiAJCSAgIHN0cnN0cihjb21tYW5kLCAiW2tlcm5lbC5rYWxsc3ltc10iKSB8fAogCQkgICBhY2Nlc3Moc3ltZnNfZmlsZW5hbWUsIFJfT0spKSB7CkBAIC05ODIsNyArMTAwMyw3IEBACiAJc25wcmludGYoY29tbWFuZCwgc2l6ZW9mKGNvbW1hbmQpLAogCQkgIiVzICVzJXMgLS1zdGFydC1hZGRyZXNzPTB4JTAxNiIgUFJJeDY0CiAJCSAiIC0tc3RvcC1hZGRyZXNzPTB4JTAxNiIgUFJJeDY0Ci0JCSAiIC1kICVzICVzIC1DICVzIDI+L2Rldi9udWxsfGdyZXAgLXYgJXN8ZXhwYW5kIiwKKwkJICIgLWwgLWQgJXMgJXMgLUMgJXMgMj4vZGV2L251bGx8Z3JlcCAtdiAlc3xleHBhbmQiLAogCQkgb2JqZHVtcF9wYXRoID8gb2JqZHVtcF9wYXRoIDogIm9iamR1bXAiLAogCQkgZGlzYXNzZW1ibGVyX3N0eWxlID8gIi1NICIgOiAiIiwKIAkJIGRpc2Fzc2VtYmxlcl9zdHlsZSA/IGRpc2Fzc2VtYmxlcl9zdHlsZSA6ICIiLApAQCAtOTk5LDcgKzEwMjAsOCBAQAogCQlnb3RvIG91dF9mcmVlX2ZpbGVuYW1lOwogCiAJd2hpbGUgKCFmZW9mKGZpbGUpKQotCQlpZiAoc3ltYm9sX19wYXJzZV9vYmpkdW1wX2xpbmUoc3ltLCBtYXAsIGZpbGUsIHByaXZzaXplKSA8IDApCisJCWlmIChzeW1ib2xfX3BhcnNlX29iamR1bXBfbGluZShzeW0sIG1hcCwgZmlsZSwgcHJpdnNpemUsCisJCQkgICAgJmxpbmVubykgPCAwKQogCQkJYnJlYWs7CiAKIAkvKgpAQCAtMTE3MCw3ICsxMTkyLDcgQEAKIAkJCWdvdG8gbmV4dDsKIAogCQlvZmZzZXQgPSBzdGFydCArIGk7Ci0JCXNyY19saW5lLT5wYXRoID0gZ2V0X3NyY2xpbmUobWFwLT5kc28sIG9mZnNldCk7CisJCXNyY19saW5lLT5wYXRoID0gZ2V0X3NyY2xpbmUobWFwLT5kc28sIG9mZnNldCwgTlVMTCwgZmFsc2UpOwogCQlpbnNlcnRfc291cmNlX2xpbmUoJnRtcF9yb290LCBzcmNfbGluZSk7CiAKIAluZXh0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmggYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaAppbmRleCAxMTJkNmUyLi4wNzg0YTk0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaAorKysgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuaApAQCAtNTgsNiArNTgsNyBAQAogCWNoYXIJCSAgICAqbGluZTsKIAljaGFyCQkgICAgKm5hbWU7CiAJc3RydWN0IGlucwkgICAgKmluczsKKwlpbnQJCSAgICBsaW5lX25yOwogCXN0cnVjdCBpbnNfb3BlcmFuZHMgb3BzOwogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwppbmRleCBhOTA0YTRjLi5lOGQ3OWU1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYworKysgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwpAQCAtMTUsNiArMTUsMTEgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInNlc3Npb24uaCIKICNpbmNsdWRlICJ0b29sLmgiCisjaW5jbHVkZSAiaGVhZGVyLmgiCisjaW5jbHVkZSAidmRzby5oIgorCisKK3N0YXRpYyBib29sIG5vX2J1aWxkaWRfY2FjaGU7CiAKIGludCBidWlsZF9pZF9fbWFya19kc29faGl0KHN0cnVjdCBwZXJmX3Rvb2wgKnRvb2wgX19tYXliZV91bnVzZWQsCiAJCQkgICB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKQEAgLTMzLDggKzM4LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsIG1hY2hpbmUsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sCi0JCQkgICAgICBzYW1wbGUtPmlwLCAmYWwpOworCXRocmVhZF9fZmluZF9hZGRyX21hcCh0aHJlYWQsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sIHNhbXBsZS0+aXAsICZhbCk7CiAKIAlpZiAoYWwubWFwICE9IE5VTEwpCiAJCWFsLm1hcC0+ZHNvLT5oaXQgPSAxOwpAQCAtMTA2LDMgKzExMCwzNDMgQEAKIAkJCSBidWlsZF9pZF9oZXgsIGJ1aWxkX2lkX2hleCArIDIpOwogCXJldHVybiBiZjsKIH0KKworI2RlZmluZSBkc29zX19mb3JfZWFjaF93aXRoX2J1aWxkX2lkKHBvcywgaGVhZCkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQlcCisJCWlmICghcG9zLT5oYXNfYnVpbGRfaWQpCQlcCisJCQljb250aW51ZTsJCVwKKwkJZWxzZQorCitzdGF0aWMgaW50IHdyaXRlX2J1aWxkaWQoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLCB1OCAqYnVpbGRfaWQsCisJCQkgcGlkX3QgcGlkLCB1MTYgbWlzYywgaW50IGZkKQoreworCWludCBlcnI7CisJc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGI7CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IG5hbWVfbGVuICsgMTsKKwlsZW4gPSBQRVJGX0FMSUdOKGxlbiwgTkFNRV9BTElHTik7CisKKwltZW1zZXQoJmIsIDAsIHNpemVvZihiKSk7CisJbWVtY3B5KCZiLmJ1aWxkX2lkLCBidWlsZF9pZCwgQlVJTERfSURfU0laRSk7CisJYi5waWQgPSBwaWQ7CisJYi5oZWFkZXIubWlzYyA9IG1pc2M7CisJYi5oZWFkZXIuc2l6ZSA9IHNpemVvZihiKSArIGxlbjsKKworCWVyciA9IHdyaXRlbihmZCwgJmIsIHNpemVvZihiKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gd3JpdGVfcGFkZGVkKGZkLCBuYW1lLCBuYW1lX2xlbiArIDEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJICAgICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAorCQkJCSAgICAgICBwaWRfdCBwaWQsIHUxNiBtaXNjLCBpbnQgZmQpCit7CisJY2hhciBubVtQQVRIX01BWF07CisJc3RydWN0IGRzbyAqcG9zOworCisJZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpIHsKKwkJaW50IGVycjsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJc2l6ZV90IG5hbWVfbGVuOworCisJCWlmICghcG9zLT5oaXQpCisJCQljb250aW51ZTsKKworCQlpZiAoZHNvX19pc192ZHNvKHBvcykpIHsKKwkJCW5hbWUgPSBwb3MtPnNob3J0X25hbWU7CisJCQluYW1lX2xlbiA9IHBvcy0+c2hvcnRfbmFtZV9sZW4gKyAxOworCQl9IGVsc2UgaWYgKGRzb19faXNfa2NvcmUocG9zKSkgeworCQkJbWFjaGluZV9fbW1hcF9uYW1lKG1hY2hpbmUsIG5tLCBzaXplb2Yobm0pKTsKKwkJCW5hbWUgPSBubTsKKwkJCW5hbWVfbGVuID0gc3RybGVuKG5tKSArIDE7CisJCX0gZWxzZSB7CisJCQluYW1lID0gcG9zLT5sb25nX25hbWU7CisJCQluYW1lX2xlbiA9IHBvcy0+bG9uZ19uYW1lX2xlbiArIDE7CisJCX0KKworCQllcnIgPSB3cml0ZV9idWlsZGlkKG5hbWUsIG5hbWVfbGVuLCBwb3MtPmJ1aWxkX2lkLAorCQkJCSAgICBwaWQsIG1pc2MsIGZkKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjaGluZV9fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgaW50IGZkKQoreworCWludCBlcnI7CisJdTE2IGttaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwsCisJICAgIHVtaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOworCisJaWYgKCFtYWNoaW5lX19pc19ob3N0KG1hY2hpbmUpKSB7CisJCWttaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUw7CisJCXVtaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9VU0VSOworCX0KKworCWVyciA9IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZSgmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCwgbWFjaGluZSwKKwkJCQkJICBtYWNoaW5lLT5waWQsIGttaXNjLCBmZCk7CisJaWYgKGVyciA9PSAwKQorCQllcnIgPSBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkLAorCQkJCQkJICBtYWNoaW5lLCBtYWNoaW5lLT5waWQsIHVtaXNjLAorCQkJCQkJICBmZCk7CisJcmV0dXJuIGVycjsKK30KKworaW50IHBlcmZfc2Vzc2lvbl9fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBpbnQgZmQpCit7CisJc3RydWN0IHJiX25vZGUgKm5kOworCWludCBlcnIgPSBtYWNoaW5lX193cml0ZV9idWlsZGlkX3RhYmxlKCZzZXNzaW9uLT5tYWNoaW5lcy5ob3N0LCBmZCk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZXNzaW9uLT5tYWNoaW5lcy5ndWVzdHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKKwkJZXJyID0gbWFjaGluZV9fd3JpdGVfYnVpbGRpZF90YWJsZShwb3MsIGZkKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZHNvc19faGl0X2FsbChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBkc28gKnBvczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQorCQlwb3MtPmhpdCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWNoaW5lX19oaXRfYWxsX2Rzb3Moc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCit7CisJaW50IGVycjsKKworCWVyciA9IF9fZHNvc19faGl0X2FsbCgmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBfX2Rzb3NfX2hpdF9hbGwoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkKTsKK30KKworaW50IGRzb3NfX2hpdF9hbGwoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisJaW50IGVycjsKKworCWVyciA9IG1hY2hpbmVfX2hpdF9hbGxfZHNvcygmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7CisKKwkJZXJyID0gbWFjaGluZV9faGl0X2FsbF9kc29zKHBvcyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGRpc2FibGVfYnVpbGRpZF9jYWNoZSh2b2lkKQoreworCW5vX2J1aWxkaWRfY2FjaGUgPSB0cnVlOworfQorCitpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfa2FsbHN5bXMsIGJvb2wgaXNfdmRzbykKK3sKKwljb25zdCBzaXplX3Qgc2l6ZSA9IFBBVEhfTUFYOworCWNoYXIgKnJlYWxuYW1lLCAqZmlsZW5hbWUgPSB6YWxsb2Moc2l6ZSksCisJICAgICAqbGlua25hbWUgPSB6YWxsb2Moc2l6ZSksICp0YXJnZXRuYW1lOworCWludCBsZW4sIGVyciA9IC0xOworCWJvb2wgc2xhc2ggPSBpc19rYWxsc3ltcyB8fCBpc192ZHNvOworCisJaWYgKGlzX2thbGxzeW1zKSB7CisJCWlmIChzeW1ib2xfY29uZi5rcHRyX3Jlc3RyaWN0KSB7CisJCQlwcl9kZWJ1ZygiTm90IGNhY2hpbmcgYSBrcHRyX3Jlc3RyaWN0J2VkIC9wcm9jL2thbGxzeW1zXG4iKTsKKwkJCWVyciA9IDA7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisJCXJlYWxuYW1lID0gKGNoYXIgKikgbmFtZTsKKwl9IGVsc2UKKwkJcmVhbG5hbWUgPSByZWFscGF0aChuYW1lLCBOVUxMKTsKKworCWlmIChyZWFsbmFtZSA9PSBOVUxMIHx8IGZpbGVuYW1lID09IE5VTEwgfHwgbGlua25hbWUgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZTsKKworCWxlbiA9IHNjbnByaW50ZihmaWxlbmFtZSwgc2l6ZSwgIiVzJXMlcyIsCisJCSAgICAgICBkZWJ1Z2Rpciwgc2xhc2ggPyAiLyIgOiAiIiwKKwkJICAgICAgIGlzX3Zkc28gPyBEU09fX05BTUVfVkRTTyA6IHJlYWxuYW1lKTsKKwlpZiAobWtkaXJfcChmaWxlbmFtZSwgMDc1NSkpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlzbnByaW50ZihmaWxlbmFtZSArIGxlbiwgc2l6ZSAtIGxlbiwgIi8lcyIsIHNidWlsZF9pZCk7CisKKwlpZiAoYWNjZXNzKGZpbGVuYW1lLCBGX09LKSkgeworCQlpZiAoaXNfa2FsbHN5bXMpIHsKKwkJCSBpZiAoY29weWZpbGUoIi9wcm9jL2thbGxzeW1zIiwgZmlsZW5hbWUpKQorCQkJCWdvdG8gb3V0X2ZyZWU7CisJCX0gZWxzZSBpZiAobGluayhyZWFsbmFtZSwgZmlsZW5hbWUpICYmIGNvcHlmaWxlKG5hbWUsIGZpbGVuYW1lKSkKKwkJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJbGVuID0gc2NucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMiLAorCQkgICAgICAgZGVidWdkaXIsIHNidWlsZF9pZCk7CisKKwlpZiAoYWNjZXNzKGxpbmtuYW1lLCBYX09LKSAmJiBta2Rpcl9wKGxpbmtuYW1lLCAwNzU1KSkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGxpbmtuYW1lICsgbGVuLCBzaXplIC0gbGVuLCAiLyVzIiwgc2J1aWxkX2lkICsgMik7CisJdGFyZ2V0bmFtZSA9IGZpbGVuYW1lICsgc3RybGVuKGRlYnVnZGlyKSAtIDU7CisJbWVtY3B5KHRhcmdldG5hbWUsICIuLi8uLiIsIDUpOworCisJaWYgKHN5bWxpbmsodGFyZ2V0bmFtZSwgbGlua25hbWUpID09IDApCisJCWVyciA9IDA7CitvdXRfZnJlZToKKwlpZiAoIWlzX2thbGxzeW1zKQorCQlmcmVlKHJlYWxuYW1lKTsKKwlmcmVlKGZpbGVuYW1lKTsKKwlmcmVlKGxpbmtuYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfYihjb25zdCB1OCAqYnVpbGRfaWQsIHNpemVfdCBidWlsZF9pZF9zaXplLAorCQkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZWJ1Z2RpciwKKwkJCQkgYm9vbCBpc19rYWxsc3ltcywgYm9vbCBpc192ZHNvKQoreworCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisKKwlidWlsZF9pZF9fc3ByaW50ZihidWlsZF9pZCwgYnVpbGRfaWRfc2l6ZSwgc2J1aWxkX2lkKTsKKworCXJldHVybiBidWlsZF9pZF9jYWNoZV9fYWRkX3Moc2J1aWxkX2lkLCBkZWJ1Z2RpciwgbmFtZSwKKwkJCQkgICAgIGlzX2thbGxzeW1zLCBpc192ZHNvKTsKK30KKworaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWNvbnN0IHNpemVfdCBzaXplID0gUEFUSF9NQVg7CisJY2hhciAqZmlsZW5hbWUgPSB6YWxsb2Moc2l6ZSksCisJICAgICAqbGlua25hbWUgPSB6YWxsb2Moc2l6ZSk7CisJaW50IGVyciA9IC0xOworCisJaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgbGlua25hbWUgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAorCQkgZGVidWdkaXIsIHNidWlsZF9pZCwgc2J1aWxkX2lkICsgMik7CisKKwlpZiAoYWNjZXNzKGxpbmtuYW1lLCBGX09LKSkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmIChyZWFkbGluayhsaW5rbmFtZSwgZmlsZW5hbWUsIHNpemUgLSAxKSA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAodW5saW5rKGxpbmtuYW1lKSkKKwkJZ290byBvdXRfZnJlZTsKKworCS8qCisJICogU2luY2UgdGhlIGxpbmsgaXMgcmVsYXRpdmUsIHdlIG11c3QgbWFrZSBpdCBhYnNvbHV0ZToKKwkgKi8KKwlzbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzLyVzIiwKKwkJIGRlYnVnZGlyLCBzYnVpbGRfaWQsIGZpbGVuYW1lKTsKKworCWlmICh1bmxpbmsobGlua25hbWUpKQorCQlnb3RvIG91dF9mcmVlOworCisJZXJyID0gMDsKK291dF9mcmVlOgorCWZyZWUoZmlsZW5hbWUpOworCWZyZWUobGlua25hbWUpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZHNvX19jYWNoZV9idWlsZF9pZChzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWJvb2wgaXNfa2FsbHN5bXMgPSBkc28tPmtlcm5lbCAmJiBkc28tPmxvbmdfbmFtZVswXSAhPSAnLyc7CisJYm9vbCBpc192ZHNvID0gZHNvX19pc192ZHNvKGRzbyk7CisJY29uc3QgY2hhciAqbmFtZSA9IGRzby0+bG9uZ19uYW1lOworCWNoYXIgbm1bUEFUSF9NQVhdOworCisJaWYgKGRzb19faXNfa2NvcmUoZHNvKSkgeworCQlpc19rYWxsc3ltcyA9IHRydWU7CisJCW1hY2hpbmVfX21tYXBfbmFtZShtYWNoaW5lLCBubSwgc2l6ZW9mKG5tKSk7CisJCW5hbWUgPSBubTsKKwl9CisJcmV0dXJuIGJ1aWxkX2lkX2NhY2hlX19hZGRfYihkc28tPmJ1aWxkX2lkLCBzaXplb2YoZHNvLT5idWlsZF9pZCksIG5hbWUsCisJCQkJICAgICBkZWJ1Z2RpciwgaXNfa2FsbHN5bXMsIGlzX3Zkc28pOworfQorCitzdGF0aWMgaW50IF9fZHNvc19fY2FjaGVfYnVpbGRfaWRzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCXN0cnVjdCBkc28gKnBvczsKKwlpbnQgZXJyID0gMDsKKworCWRzb3NfX2Zvcl9lYWNoX3dpdGhfYnVpbGRfaWQocG9zLCBoZWFkKQorCQlpZiAoZHNvX19jYWNoZV9idWlsZF9pZChwb3MsIG1hY2hpbmUsIGRlYnVnZGlyKSkKKwkJCWVyciA9IC0xOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBtYWNoaW5lX19jYWNoZV9idWlsZF9pZHMoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWludCByZXQgPSBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcygmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCwgbWFjaGluZSwKKwkJCQkJICBkZWJ1Z2Rpcik7CisJcmV0IHw9IF9fZHNvc19fY2FjaGVfYnVpbGRfaWRzKCZtYWNoaW5lLT51c2VyX2Rzb3MuaGVhZCwgbWFjaGluZSwKKwkJCQkgICAgICAgZGVidWdkaXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBwZXJmX3Nlc3Npb25fX2NhY2hlX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCByYl9ub2RlICpuZDsKKwlpbnQgcmV0OworCWNoYXIgZGVidWdkaXJbUEFUSF9NQVhdOworCisJaWYgKG5vX2J1aWxkaWRfY2FjaGUpCisJCXJldHVybiAwOworCisJc25wcmludGYoZGVidWdkaXIsIHNpemVvZihkZWJ1Z2RpciksICIlcyIsIGJ1aWxkaWRfZGlyKTsKKworCWlmIChta2RpcihkZWJ1Z2RpciwgMDc1NSkgIT0gMCAmJiBlcnJubyAhPSBFRVhJU1QpCisJCXJldHVybiAtMTsKKworCXJldCA9IG1hY2hpbmVfX2NhY2hlX2J1aWxkX2lkcygmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCwgZGVidWdkaXIpOworCisJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZXNzaW9uLT5tYWNoaW5lcy5ndWVzdHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKKwkJcmV0IHw9IG1hY2hpbmVfX2NhY2hlX2J1aWxkX2lkcyhwb3MsIGRlYnVnZGlyKTsKKwl9CisJcmV0dXJuIHJldCA/IC0xIDogMDsKK30KKworc3RhdGljIGJvb2wgbWFjaGluZV9fcmVhZF9idWlsZF9pZHMoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGJvb2wgd2l0aF9oaXRzKQoreworCWJvb2wgcmV0OworCisJcmV0ICA9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQsIHdpdGhfaGl0cyk7CisJcmV0IHw9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkLCB3aXRoX2hpdHMpOworCXJldHVybiByZXQ7Cit9CisKK2Jvb2wgcGVyZl9zZXNzaW9uX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBib29sIHdpdGhfaGl0cykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisJYm9vbCByZXQgPSBtYWNoaW5lX19yZWFkX2J1aWxkX2lkcygmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCwgd2l0aF9oaXRzKTsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7CisJCXJldCB8PSBtYWNoaW5lX19yZWFkX2J1aWxkX2lkcyhwb3MsIHdpdGhfaGl0cyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oIGIvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmgKaW5kZXggYWUzOTI1Ni4uODIzNjMxOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmgKQEAgLTE1LDQgKzE1LDE2IEBACiBpbnQgYnVpbGRfaWRfX21hcmtfZHNvX2hpdChzdHJ1Y3QgcGVyZl90b29sICp0b29sLCB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCSAgIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCQkgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CisKK2ludCBkc29zX19oaXRfYWxsKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworCitib29sIHBlcmZfc2Vzc2lvbl9fcmVhZF9idWlsZF9pZHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgYm9vbCB3aXRoX2hpdHMpOworaW50IHBlcmZfc2Vzc2lvbl9fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBpbnQgZmQpOworaW50IHBlcmZfc2Vzc2lvbl9fY2FjaGVfYnVpbGRfaWRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworCitpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfa2FsbHN5bXMsIGJvb2wgaXNfdmRzbyk7CitpbnQgYnVpbGRfaWRfY2FjaGVfX3JlbW92ZV9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIpOwordm9pZCBkaXNhYmxlX2J1aWxkaWRfY2FjaGUodm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCmluZGV4IGM4NGQzZjguLmNmNTI0YTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYworKysgYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKQEAgLTE0OSw2ICsxNDksMTAgQEAKIAkJY2FsbGNoYWluX3BhcmFtLmtleSA9IENDS0VZX0FERFJFU1M7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoIXN0cm5jbXAodmFsdWUsICJicmFuY2giLCBzdHJsZW4odmFsdWUpKSkgeworCQljYWxsY2hhaW5fcGFyYW0uYnJhbmNoX2NhbGxzdGFjayA9IDE7CisJCXJldHVybiAwOworCX0KIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTc1NCw4ICs3NTgsOCBAQAogCiAJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gfHwgc3ltYm9sX2NvbmYuY3VtdWxhdGVfY2FsbGNoYWluIHx8CiAJICAgIHNvcnRfX2hhc19wYXJlbnQpIHsKLQkJcmV0dXJuIG1hY2hpbmVfX3Jlc29sdmVfY2FsbGNoYWluKGFsLT5tYWNoaW5lLCBldnNlbCwgYWwtPnRocmVhZCwKLQkJCQkJCSAgc2FtcGxlLCBwYXJlbnQsIGFsLCBtYXhfc3RhY2spOworCQlyZXR1cm4gdGhyZWFkX19yZXNvbHZlX2NhbGxjaGFpbihhbC0+dGhyZWFkLCBldnNlbCwgc2FtcGxlLAorCQkJCQkJIHBhcmVudCwgYWwsIG1heF9zdGFjayk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODA4LDMgKzgxMiwzMiBAQAogb3V0OgogCXJldHVybiAxOwogfQorCitjaGFyICpjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjbCwKKwkJCSAgICAgICBjaGFyICpiZiwgc2l6ZV90IGJmc2l6ZSwgYm9vbCBzaG93X2RzbykKK3sKKwlpbnQgcHJpbnRlZDsKKworCWlmIChjbC0+bXMuc3ltKSB7CisJCWlmIChjYWxsY2hhaW5fcGFyYW0ua2V5ID09IENDS0VZX0FERFJFU1MgJiYKKwkJICAgIGNsLT5tcy5tYXAgJiYgIWNsLT5zcmNsaW5lKQorCQkJY2wtPnNyY2xpbmUgPSBnZXRfc3JjbGluZShjbC0+bXMubWFwLT5kc28sCisJCQkJCQkgIG1hcF9fcmlwXzJvYmpkdW1wKGNsLT5tcy5tYXAsCisJCQkJCQkJCSAgICBjbC0+aXApLAorCQkJCQkJICBjbC0+bXMuc3ltLCBmYWxzZSk7CisJCWlmIChjbC0+c3JjbGluZSkKKwkJCXByaW50ZWQgPSBzY25wcmludGYoYmYsIGJmc2l6ZSwgIiVzICVzIiwKKwkJCQkJY2wtPm1zLnN5bS0+bmFtZSwgY2wtPnNyY2xpbmUpOworCQllbHNlCisJCQlwcmludGVkID0gc2NucHJpbnRmKGJmLCBiZnNpemUsICIlcyIsIGNsLT5tcy5zeW0tPm5hbWUpOworCX0gZWxzZQorCQlwcmludGVkID0gc2NucHJpbnRmKGJmLCBiZnNpemUsICIlIyIgUFJJeDY0LCBjbC0+aXApOworCisJaWYgKHNob3dfZHNvKQorCQlzY25wcmludGYoYmYgKyBwcmludGVkLCBiZnNpemUgLSBwcmludGVkLCAiICVzIiwKKwkJCSAgY2wtPm1zLm1hcCA/CisJCQkgIGNsLT5tcy5tYXAtPmRzby0+c2hvcnRfbmFtZSA6CisJCQkgICJ1bmtub3duIik7CisKKwlyZXR1cm4gYmY7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmggYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmgKaW5kZXggOTRjZmVmZC4uZGJjMDhjZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaApAQCAtNjMsNiArNjMsNyBAQAogCXNvcnRfY2hhaW5fZnVuY190CXNvcnQ7CiAJZW51bSBjaGFpbl9vcmRlcglvcmRlcjsKIAllbnVtIGNoYWluX2tleQkJa2V5OworCWJvb2wJCQlicmFuY2hfY2FsbHN0YWNrOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBjYWxsY2hhaW5fcGFyYW0gY2FsbGNoYWluX3BhcmFtOwpAQCAtNzAsNiArNzEsNyBAQAogc3RydWN0IGNhbGxjaGFpbl9saXN0IHsKIAl1NjQJCQlpcDsKIAlzdHJ1Y3QgbWFwX3N5bWJvbAltczsKKwljaGFyCQkgICAgICAgKnNyY2xpbmU7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogfTsKIApAQCAtMTg0LDE1ICsxODYsMTYgQEAKIH0KIAogI2lmZGVmIEhBVkVfU0tJUF9DQUxMQ0hBSU5fSURYCi1leHRlcm4gaW50IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbik7CitleHRlcm4gaW50IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4pOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHN0cnVjdCBtYWNoaW5lICptYWNoaW5lIF9fbWF5YmVfdW51c2VkLAotCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fbWF5YmVfdW51c2VkLAorc3RhdGljIGlubGluZSBpbnQgYXJjaF9za2lwX2NhbGxjaGFpbl9pZHgoc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fbWF5YmVfdW51c2VkLAogCQkJc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4gX19tYXliZV91bnVzZWQpCiB7CiAJcmV0dXJuIC0xOwogfQogI2VuZGlmCiAKK2NoYXIgKmNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNsLAorCQkJICAgICAgIGNoYXIgKmJmLCBzaXplX3QgYmZzaXplLCBib29sIHNob3dfZHNvKTsKKwogI2VuZGlmCS8qIF9fUEVSRl9DQUxMQ0hBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NvbW0uaCBiL3Rvb2xzL3BlcmYvdXRpbC9jb21tLmgKaW5kZXggNTFjMTBhYi4uNzFjOWMzOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NvbW0uaAorKysgYi90b29scy9wZXJmL3V0aWwvY29tbS5oCkBAIC0xMiw2ICsxMiwxMCBAQAogCXU2NCBzdGFydDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJYm9vbCBleGVjOworCXVuaW9uIHsgLyogVG9vbCBzcGVjaWZpYyBhcmVhICovCisJCXZvaWQJKnByaXY7CisJCXU2NAlkYl9pZDsKKwl9OwogfTsKIAogdm9pZCBjb21tX19mcmVlKHN0cnVjdCBjb21tICpjb21tKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kYi1leHBvcnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kYi1leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODFkYWUzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RiLWV4cG9ydC5jCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogZGItZXhwb3J0LmM6IFN1cHBvcnQgZm9yIGV4cG9ydGluZyBkYXRhIHN1aXRhYmxlIGZvciBpbXBvcnQgdG8gYSBkYXRhYmFzZQorICogQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZXZzZWwuaCIKKyNpbmNsdWRlICJtYWNoaW5lLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAiY29tbS5oIgorI2luY2x1ZGUgInN5bWJvbC5oIgorI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInRocmVhZC1zdGFjay5oIgorI2luY2x1ZGUgImRiLWV4cG9ydC5oIgorCitzdHJ1Y3QgZGVmZXJyZWRfZXhwb3J0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJc3RydWN0IGNvbW0gKmNvbW07Cit9OworCitzdGF0aWMgaW50IGRiX2V4cG9ydF9fZGVmZXJyZWQoc3RydWN0IGRiX2V4cG9ydCAqZGJlKQoreworCXN0cnVjdCBkZWZlcnJlZF9leHBvcnQgKmRlOworCWludCBlcnI7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRiZS0+ZGVmZXJyZWQpKSB7CisJCWRlID0gbGlzdF9lbnRyeShkYmUtPmRlZmVycmVkLm5leHQsIHN0cnVjdCBkZWZlcnJlZF9leHBvcnQsCisJCQkJbm9kZSk7CisJCWVyciA9IGRiZS0+ZXhwb3J0X2NvbW0oZGJlLCBkZS0+Y29tbSk7CisJCWxpc3RfZGVsKCZkZS0+bm9kZSk7CisJCWZyZWUoZGUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGJfZXhwb3J0X19mcmVlX2RlZmVycmVkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSkKK3sKKwlzdHJ1Y3QgZGVmZXJyZWRfZXhwb3J0ICpkZTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmZGJlLT5kZWZlcnJlZCkpIHsKKwkJZGUgPSBsaXN0X2VudHJ5KGRiZS0+ZGVmZXJyZWQubmV4dCwgc3RydWN0IGRlZmVycmVkX2V4cG9ydCwKKwkJCQlub2RlKTsKKwkJbGlzdF9kZWwoJmRlLT5ub2RlKTsKKwkJZnJlZShkZSk7CisJfQorfQorCitzdGF0aWMgaW50IGRiX2V4cG9ydF9fZGVmZXJfY29tbShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tKQoreworCXN0cnVjdCBkZWZlcnJlZF9leHBvcnQgKmRlOworCisJZGUgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZWZlcnJlZF9leHBvcnQpKTsKKwlpZiAoIWRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRlLT5jb21tID0gY29tbTsKKwlsaXN0X2FkZF90YWlsKCZkZS0+bm9kZSwgJmRiZS0+ZGVmZXJyZWQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkYl9leHBvcnRfX2luaXQoc3RydWN0IGRiX2V4cG9ydCAqZGJlKQoreworCW1lbXNldChkYmUsIDAsIHNpemVvZihzdHJ1Y3QgZGJfZXhwb3J0KSk7CisJSU5JVF9MSVNUX0hFQUQoJmRiZS0+ZGVmZXJyZWQpOworCXJldHVybiAwOworfQorCitpbnQgZGJfZXhwb3J0X19mbHVzaChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUpCit7CisJcmV0dXJuIGRiX2V4cG9ydF9fZGVmZXJyZWQoZGJlKTsKK30KKwordm9pZCBkYl9leHBvcnRfX2V4aXQoc3RydWN0IGRiX2V4cG9ydCAqZGJlKQoreworCWRiX2V4cG9ydF9fZnJlZV9kZWZlcnJlZChkYmUpOworCWNhbGxfcmV0dXJuX3Byb2Nlc3Nvcl9fZnJlZShkYmUtPmNycCk7CisJZGJlLT5jcnAgPSBOVUxMOworfQorCitpbnQgZGJfZXhwb3J0X19ldnNlbChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkKK3sKKwlpZiAoZXZzZWwtPmRiX2lkKQorCQlyZXR1cm4gMDsKKworCWV2c2VsLT5kYl9pZCA9ICsrZGJlLT5ldnNlbF9sYXN0X2RiX2lkOworCisJaWYgKGRiZS0+ZXhwb3J0X2V2c2VsKQorCQlyZXR1cm4gZGJlLT5leHBvcnRfZXZzZWwoZGJlLCBldnNlbCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fbWFjaGluZShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCWlmIChtYWNoaW5lLT5kYl9pZCkKKwkJcmV0dXJuIDA7CisKKwltYWNoaW5lLT5kYl9pZCA9ICsrZGJlLT5tYWNoaW5lX2xhc3RfZGJfaWQ7CisKKwlpZiAoZGJlLT5leHBvcnRfbWFjaGluZSkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X21hY2hpbmUoZGJlLCBtYWNoaW5lKTsKKworCXJldHVybiAwOworfQorCitpbnQgZGJfZXhwb3J0X190aHJlYWQoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCSAgICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBzdHJ1Y3QgY29tbSAqY29tbSkKK3sKKwl1NjQgbWFpbl90aHJlYWRfZGJfaWQgPSAwOworCWludCBlcnI7CisKKwlpZiAodGhyZWFkLT5kYl9pZCkKKwkJcmV0dXJuIDA7CisKKwl0aHJlYWQtPmRiX2lkID0gKytkYmUtPnRocmVhZF9sYXN0X2RiX2lkOworCisJaWYgKHRocmVhZC0+cGlkXyAhPSAtMSkgeworCQlzdHJ1Y3QgdGhyZWFkICptYWluX3RocmVhZDsKKworCQlpZiAodGhyZWFkLT5waWRfID09IHRocmVhZC0+dGlkKSB7CisJCQltYWluX3RocmVhZCA9IHRocmVhZDsKKwkJfSBlbHNlIHsKKwkJCW1haW5fdGhyZWFkID0gbWFjaGluZV9fZmluZG5ld190aHJlYWQobWFjaGluZSwKKwkJCQkJCQkgICAgICB0aHJlYWQtPnBpZF8sCisJCQkJCQkJICAgICAgdGhyZWFkLT5waWRfKTsKKwkJCWlmICghbWFpbl90aHJlYWQpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQllcnIgPSBkYl9leHBvcnRfX3RocmVhZChkYmUsIG1haW5fdGhyZWFkLCBtYWNoaW5lLAorCQkJCQkJY29tbSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQlpZiAoY29tbSkgeworCQkJCWVyciA9IGRiX2V4cG9ydF9fY29tbV90aHJlYWQoZGJlLCBjb21tLCB0aHJlYWQpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KKwkJbWFpbl90aHJlYWRfZGJfaWQgPSBtYWluX3RocmVhZC0+ZGJfaWQ7CisJfQorCisJaWYgKGRiZS0+ZXhwb3J0X3RocmVhZCkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X3RocmVhZChkYmUsIHRocmVhZCwgbWFpbl90aHJlYWRfZGJfaWQsCisJCQkJCSAgbWFjaGluZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fY29tbShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tLAorCQkgICAgc3RydWN0IHRocmVhZCAqbWFpbl90aHJlYWQpCit7CisJaW50IGVycjsKKworCWlmIChjb21tLT5kYl9pZCkKKwkJcmV0dXJuIDA7CisKKwljb21tLT5kYl9pZCA9ICsrZGJlLT5jb21tX2xhc3RfZGJfaWQ7CisKKwlpZiAoZGJlLT5leHBvcnRfY29tbSkgeworCQlpZiAobWFpbl90aHJlYWQtPmNvbW1fc2V0KQorCQkJZXJyID0gZGJlLT5leHBvcnRfY29tbShkYmUsIGNvbW0pOworCQllbHNlCisJCQllcnIgPSBkYl9leHBvcnRfX2RlZmVyX2NvbW0oZGJlLCBjb21tKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGRiX2V4cG9ydF9fY29tbV90aHJlYWQoZGJlLCBjb21tLCBtYWluX3RocmVhZCk7Cit9CisKK2ludCBkYl9leHBvcnRfX2NvbW1fdGhyZWFkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGNvbW0gKmNvbW0sCisJCQkgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJdTY0IGRiX2lkOworCisJZGJfaWQgPSArK2RiZS0+Y29tbV90aHJlYWRfbGFzdF9kYl9pZDsKKworCWlmIChkYmUtPmV4cG9ydF9jb21tX3RocmVhZCkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2NvbW1fdGhyZWFkKGRiZSwgZGJfaWQsIGNvbW0sIHRocmVhZCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fZHNvKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGRzbyAqZHNvLAorCQkgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlpZiAoZHNvLT5kYl9pZCkKKwkJcmV0dXJuIDA7CisKKwlkc28tPmRiX2lkID0gKytkYmUtPmRzb19sYXN0X2RiX2lkOworCisJaWYgKGRiZS0+ZXhwb3J0X2RzbykKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2RzbyhkYmUsIGRzbywgbWFjaGluZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fc3ltYm9sKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHN5bWJvbCAqc3ltLAorCQkgICAgICBzdHJ1Y3QgZHNvICpkc28pCit7CisJdTY0ICpzeW1fZGJfaWQgPSBzeW1ib2xfX3ByaXYoc3ltKTsKKworCWlmICgqc3ltX2RiX2lkKQorCQlyZXR1cm4gMDsKKworCSpzeW1fZGJfaWQgPSArK2RiZS0+c3ltYm9sX2xhc3RfZGJfaWQ7CisKKwlpZiAoZGJlLT5leHBvcnRfc3ltYm9sKQorCQlyZXR1cm4gZGJlLT5leHBvcnRfc3ltYm9sKGRiZSwgc3ltLCBkc28pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkICpnZXRfbWFpbl90aHJlYWQoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlpZiAodGhyZWFkLT5waWRfID09IHRocmVhZC0+dGlkKQorCQlyZXR1cm4gdGhyZWFkOworCisJaWYgKHRocmVhZC0+cGlkXyA9PSAtMSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gbWFjaGluZV9fZmluZF90aHJlYWQobWFjaGluZSwgdGhyZWFkLT5waWRfLCB0aHJlYWQtPnBpZF8pOworfQorCitzdGF0aWMgaW50IGRiX2lkc19mcm9tX2FsKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAorCQkJICB1NjQgKmRzb19kYl9pZCwgdTY0ICpzeW1fZGJfaWQsIHU2NCAqb2Zmc2V0KQoreworCWludCBlcnI7CisKKwlpZiAoYWwtPm1hcCkgeworCQlzdHJ1Y3QgZHNvICpkc28gPSBhbC0+bWFwLT5kc287CisKKwkJZXJyID0gZGJfZXhwb3J0X19kc28oZGJlLCBkc28sIGFsLT5tYWNoaW5lKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCSpkc29fZGJfaWQgPSBkc28tPmRiX2lkOworCisJCWlmICghYWwtPnN5bSkgeworCQkJYWwtPnN5bSA9IHN5bWJvbF9fbmV3KGFsLT5hZGRyLCAwLCAwLCAidW5rbm93biIpOworCQkJaWYgKGFsLT5zeW0pCisJCQkJc3ltYm9sc19faW5zZXJ0KCZkc28tPnN5bWJvbHNbYWwtPm1hcC0+dHlwZV0sCisJCQkJCQlhbC0+c3ltKTsKKwkJfQorCisJCWlmIChhbC0+c3ltKSB7CisJCQl1NjQgKmRiX2lkID0gc3ltYm9sX19wcml2KGFsLT5zeW0pOworCisJCQllcnIgPSBkYl9leHBvcnRfX3N5bWJvbChkYmUsIGFsLT5zeW0sIGRzbyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQkqc3ltX2RiX2lkID0gKmRiX2lkOworCQkJKm9mZnNldCA9IGFsLT5hZGRyIC0gYWwtPnN5bS0+c3RhcnQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRiX2V4cG9ydF9fYnJhbmNoX3R5cGUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCB1MzIgYnJhbmNoX3R5cGUsCisJCQkgICBjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChkYmUtPmV4cG9ydF9icmFuY2hfdHlwZSkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2JyYW5jaF90eXBlKGRiZSwgYnJhbmNoX3R5cGUsIG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkYl9leHBvcnRfX3NhbXBsZShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAorCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKK3sKKwlzdHJ1Y3QgZXhwb3J0X3NhbXBsZSBlcyA9IHsKKwkJLmV2ZW50ID0gZXZlbnQsCisJCS5zYW1wbGUgPSBzYW1wbGUsCisJCS5ldnNlbCA9IGV2c2VsLAorCQkudGhyZWFkID0gdGhyZWFkLAorCQkuYWwgPSBhbCwKKwl9OworCXN0cnVjdCB0aHJlYWQgKm1haW5fdGhyZWFkOworCXN0cnVjdCBjb21tICpjb21tID0gTlVMTDsKKwlpbnQgZXJyOworCisJZXJyID0gZGJfZXhwb3J0X19ldnNlbChkYmUsIGV2c2VsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZGJfZXhwb3J0X19tYWNoaW5lKGRiZSwgYWwtPm1hY2hpbmUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltYWluX3RocmVhZCA9IGdldF9tYWluX3RocmVhZChhbC0+bWFjaGluZSwgdGhyZWFkKTsKKwlpZiAobWFpbl90aHJlYWQpCisJCWNvbW0gPSBtYWNoaW5lX190aHJlYWRfZXhlY19jb21tKGFsLT5tYWNoaW5lLCBtYWluX3RocmVhZCk7CisKKwllcnIgPSBkYl9leHBvcnRfX3RocmVhZChkYmUsIHRocmVhZCwgYWwtPm1hY2hpbmUsIGNvbW0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoY29tbSkgeworCQllcnIgPSBkYl9leHBvcnRfX2NvbW0oZGJlLCBjb21tLCBtYWluX3RocmVhZCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcy5jb21tX2RiX2lkID0gY29tbS0+ZGJfaWQ7CisJfQorCisJZXMuZGJfaWQgPSArK2RiZS0+c2FtcGxlX2xhc3RfZGJfaWQ7CisKKwllcnIgPSBkYl9pZHNfZnJvbV9hbChkYmUsIGFsLCAmZXMuZHNvX2RiX2lkLCAmZXMuc3ltX2RiX2lkLCAmZXMub2Zmc2V0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKChldnNlbC0+YXR0ci5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpICYmCisJICAgIHNhbXBsZV9hZGRyX2NvcnJlbGF0ZXNfc3ltKCZldnNlbC0+YXR0cikpIHsKKwkJc3RydWN0IGFkZHJfbG9jYXRpb24gYWRkcl9hbDsKKworCQlwZXJmX2V2ZW50X19wcmVwcm9jZXNzX3NhbXBsZV9hZGRyKGV2ZW50LCBzYW1wbGUsIHRocmVhZCwgJmFkZHJfYWwpOworCQllcnIgPSBkYl9pZHNfZnJvbV9hbChkYmUsICZhZGRyX2FsLCAmZXMuYWRkcl9kc29fZGJfaWQsCisJCQkJICAgICAmZXMuYWRkcl9zeW1fZGJfaWQsICZlcy5hZGRyX29mZnNldCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAoZGJlLT5jcnApIHsKKwkJCWVyciA9IHRocmVhZF9zdGFja19fcHJvY2Vzcyh0aHJlYWQsIGNvbW0sIHNhbXBsZSwgYWwsCisJCQkJCQkgICAgJmFkZHJfYWwsIGVzLmRiX2lkLAorCQkJCQkJICAgIGRiZS0+Y3JwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWlmIChkYmUtPmV4cG9ydF9zYW1wbGUpCisJCXJldHVybiBkYmUtPmV4cG9ydF9zYW1wbGUoZGJlLCAmZXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiBicmFuY2hfdHlwZTsKKwljb25zdCBjaGFyICpuYW1lOworfSBicmFuY2hfdHlwZXNbXSA9IHsKKwl7MCwgIm5vIGJyYW5jaCJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX0NBTEwsICJjYWxsIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfUkVUVVJOLCAicmV0dXJuIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfQ09ORElUSU9OQUwsICJjb25kaXRpb25hbCBqdW1wIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0gsICJ1bmNvbmRpdGlvbmFsIGp1bXAifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19DQUxMIHwgUEVSRl9JUF9GTEFHX0lOVEVSUlVQVCwKKwkgInNvZnR3YXJlIGludGVycnVwdCJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX1JFVFVSTiB8IFBFUkZfSVBfRkxBR19JTlRFUlJVUFQsCisJICJyZXR1cm4gZnJvbSBpbnRlcnJ1cHQifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19DQUxMIHwgUEVSRl9JUF9GTEFHX1NZU0NBTExSRVQsCisJICJzeXN0ZW0gY2FsbCJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX1JFVFVSTiB8IFBFUkZfSVBfRkxBR19TWVNDQUxMUkVULAorCSAicmV0dXJuIGZyb20gc3lzdGVtIGNhbGwifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19BU1lOQywgImFzeW5jaHJvbm91cyBicmFuY2gifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19DQUxMIHwgUEVSRl9JUF9GTEFHX0FTWU5DIHwKKwkgUEVSRl9JUF9GTEFHX0lOVEVSUlVQVCwgImhhcmR3YXJlIGludGVycnVwdCJ9LAorCXtQRVJGX0lQX0ZMQUdfQlJBTkNIIHwgUEVSRl9JUF9GTEFHX1RYX0FCT1JULCAidHJhbnNhY3Rpb24gYWJvcnQifSwKKwl7UEVSRl9JUF9GTEFHX0JSQU5DSCB8IFBFUkZfSVBfRkxBR19UUkFDRV9CRUdJTiwgInRyYWNlIGJlZ2luIn0sCisJe1BFUkZfSVBfRkxBR19CUkFOQ0ggfCBQRVJGX0lQX0ZMQUdfVFJBQ0VfRU5ELCAidHJhY2UgZW5kIn0sCisJezAsIE5VTEx9Cit9OworCitpbnQgZGJfZXhwb3J0X19icmFuY2hfdHlwZXMoc3RydWN0IGRiX2V4cG9ydCAqZGJlKQoreworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgYnJhbmNoX3R5cGVzW2ldLm5hbWUgOyBpKyspIHsKKwkJZXJyID0gZGJfZXhwb3J0X19icmFuY2hfdHlwZShkYmUsIGJyYW5jaF90eXBlc1tpXS5icmFuY2hfdHlwZSwKKwkJCQkJICAgICBicmFuY2hfdHlwZXNbaV0ubmFtZSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGVycjsKK30KKworaW50IGRiX2V4cG9ydF9fY2FsbF9wYXRoKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGNhbGxfcGF0aCAqY3ApCit7CisJaW50IGVycjsKKworCWlmIChjcC0+ZGJfaWQpCisJCXJldHVybiAwOworCisJaWYgKGNwLT5wYXJlbnQpIHsKKwkJZXJyID0gZGJfZXhwb3J0X19jYWxsX3BhdGgoZGJlLCBjcC0+cGFyZW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJY3AtPmRiX2lkID0gKytkYmUtPmNhbGxfcGF0aF9sYXN0X2RiX2lkOworCisJaWYgKGRiZS0+ZXhwb3J0X2NhbGxfcGF0aCkKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2NhbGxfcGF0aChkYmUsIGNwKTsKKworCXJldHVybiAwOworfQorCitpbnQgZGJfZXhwb3J0X19jYWxsX3JldHVybihzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjYWxsX3JldHVybiAqY3IpCit7CisJaW50IGVycjsKKworCWlmIChjci0+ZGJfaWQpCisJCXJldHVybiAwOworCisJZXJyID0gZGJfZXhwb3J0X19jYWxsX3BhdGgoZGJlLCBjci0+Y3ApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwljci0+ZGJfaWQgPSArK2RiZS0+Y2FsbF9yZXR1cm5fbGFzdF9kYl9pZDsKKworCWlmIChkYmUtPmV4cG9ydF9jYWxsX3JldHVybikKKwkJcmV0dXJuIGRiZS0+ZXhwb3J0X2NhbGxfcmV0dXJuKGRiZSwgY3IpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGItZXhwb3J0LmggYi90b29scy9wZXJmL3V0aWwvZGItZXhwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiZDIyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kYi1leHBvcnQuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIGRiLWV4cG9ydC5oOiBTdXBwb3J0IGZvciBleHBvcnRpbmcgZGF0YSBzdWl0YWJsZSBmb3IgaW1wb3J0IHRvIGEgZGF0YWJhc2UKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fUEVSRl9EQl9FWFBPUlRfSAorI2RlZmluZSBfX1BFUkZfREJfRVhQT1JUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgcGVyZl9ldnNlbDsKK3N0cnVjdCBtYWNoaW5lOworc3RydWN0IHRocmVhZDsKK3N0cnVjdCBjb21tOworc3RydWN0IGRzbzsKK3N0cnVjdCBwZXJmX3NhbXBsZTsKK3N0cnVjdCBhZGRyX2xvY2F0aW9uOworc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvcjsKK3N0cnVjdCBjYWxsX3BhdGg7CitzdHJ1Y3QgY2FsbF9yZXR1cm47CisKK3N0cnVjdCBleHBvcnRfc2FtcGxlIHsKKwl1bmlvbiBwZXJmX2V2ZW50CSpldmVudDsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGUJKnNhbXBsZTsKKwlzdHJ1Y3QgcGVyZl9ldnNlbAkqZXZzZWw7CisJc3RydWN0IHRocmVhZAkJKnRocmVhZDsKKwlzdHJ1Y3QgYWRkcl9sb2NhdGlvbgkqYWw7CisJdTY0CQkJZGJfaWQ7CisJdTY0CQkJY29tbV9kYl9pZDsKKwl1NjQJCQlkc29fZGJfaWQ7CisJdTY0CQkJc3ltX2RiX2lkOworCXU2NAkJCW9mZnNldDsgLyogaXAgb2Zmc2V0IGZyb20gc3ltYm9sIHN0YXJ0ICovCisJdTY0CQkJYWRkcl9kc29fZGJfaWQ7CisJdTY0CQkJYWRkcl9zeW1fZGJfaWQ7CisJdTY0CQkJYWRkcl9vZmZzZXQ7IC8qIGFkZHIgb2Zmc2V0IGZyb20gc3ltYm9sIHN0YXJ0ICovCit9OworCitzdHJ1Y3QgZGJfZXhwb3J0IHsKKwlpbnQgKCpleHBvcnRfZXZzZWwpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKTsKKwlpbnQgKCpleHBvcnRfbWFjaGluZSkoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CisJaW50ICgqZXhwb3J0X3RocmVhZCkoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCQkgICAgIHU2NCBtYWluX3RocmVhZF9kYl9pZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOworCWludCAoKmV4cG9ydF9jb21tKShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tKTsKKwlpbnQgKCpleHBvcnRfY29tbV90aHJlYWQpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgdTY0IGRiX2lkLAorCQkJCSAgc3RydWN0IGNvbW0gKmNvbW0sIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisJaW50ICgqZXhwb3J0X2Rzbykoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgZHNvICpkc28sCisJCQkgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKKwlpbnQgKCpleHBvcnRfc3ltYm9sKShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBzeW1ib2wgKnN5bSwKKwkJCSAgICAgc3RydWN0IGRzbyAqZHNvKTsKKwlpbnQgKCpleHBvcnRfYnJhbmNoX3R5cGUpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgdTMyIGJyYW5jaF90eXBlLAorCQkJCSAgY29uc3QgY2hhciAqbmFtZSk7CisJaW50ICgqZXhwb3J0X3NhbXBsZSkoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgZXhwb3J0X3NhbXBsZSAqZXMpOworCWludCAoKmV4cG9ydF9jYWxsX3BhdGgpKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGNhbGxfcGF0aCAqY3ApOworCWludCAoKmV4cG9ydF9jYWxsX3JldHVybikoc3RydWN0IGRiX2V4cG9ydCAqZGJlLAorCQkJCSAgc3RydWN0IGNhbGxfcmV0dXJuICpjcik7CisJc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwOworCXU2NCBldnNlbF9sYXN0X2RiX2lkOworCXU2NCBtYWNoaW5lX2xhc3RfZGJfaWQ7CisJdTY0IHRocmVhZF9sYXN0X2RiX2lkOworCXU2NCBjb21tX2xhc3RfZGJfaWQ7CisJdTY0IGNvbW1fdGhyZWFkX2xhc3RfZGJfaWQ7CisJdTY0IGRzb19sYXN0X2RiX2lkOworCXU2NCBzeW1ib2xfbGFzdF9kYl9pZDsKKwl1NjQgc2FtcGxlX2xhc3RfZGJfaWQ7CisJdTY0IGNhbGxfcGF0aF9sYXN0X2RiX2lkOworCXU2NCBjYWxsX3JldHVybl9sYXN0X2RiX2lkOworCXN0cnVjdCBsaXN0X2hlYWQgZGVmZXJyZWQ7Cit9OworCitpbnQgZGJfZXhwb3J0X19pbml0KHN0cnVjdCBkYl9leHBvcnQgKmRiZSk7CitpbnQgZGJfZXhwb3J0X19mbHVzaChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUpOwordm9pZCBkYl9leHBvcnRfX2V4aXQoc3RydWN0IGRiX2V4cG9ydCAqZGJlKTsKK2ludCBkYl9leHBvcnRfX2V2c2VsKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKTsKK2ludCBkYl9leHBvcnRfX21hY2hpbmUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CitpbnQgZGJfZXhwb3J0X190aHJlYWQoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCSAgICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBzdHJ1Y3QgY29tbSAqY29tbSk7CitpbnQgZGJfZXhwb3J0X19jb21tKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IGNvbW0gKmNvbW0sCisJCSAgICBzdHJ1Y3QgdGhyZWFkICptYWluX3RocmVhZCk7CitpbnQgZGJfZXhwb3J0X19jb21tX3RocmVhZChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKK2ludCBkYl9leHBvcnRfX2RzbyhzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBkc28gKmRzbywKKwkJICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOworaW50IGRiX2V4cG9ydF9fc3ltYm9sKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHN5bWJvbCAqc3ltLAorCQkgICAgICBzdHJ1Y3QgZHNvICpkc28pOworaW50IGRiX2V4cG9ydF9fYnJhbmNoX3R5cGUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCB1MzIgYnJhbmNoX3R5cGUsCisJCQkgICBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBkYl9leHBvcnRfX3NhbXBsZShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAorCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7CisKK2ludCBkYl9leHBvcnRfX2JyYW5jaF90eXBlcyhzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUpOworCitpbnQgZGJfZXhwb3J0X19jYWxsX3BhdGgoc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgY2FsbF9wYXRoICpjcCk7CitpbnQgZGJfZXhwb3J0X19jYWxsX3JldHVybihzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjYWxsX3JldHVybiAqY3IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKaW5kZXggYmEzNTdmMy4uYWQ2MGIyZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKQEAgLTE5LDEzICsxOSwxNCBAQAogaW50IHZlcmJvc2U7CiBib29sIGR1bXBfdHJhY2UgPSBmYWxzZSwgcXVpZXQgPSBmYWxzZTsKIGludCBkZWJ1Z19vcmRlcmVkX2V2ZW50czsKK3N0YXRpYyBpbnQgcmVkaXJlY3RfdG9fc3RkZXJyOwogCiBzdGF0aWMgaW50IF9lcHJpbnRmKGludCBsZXZlbCwgaW50IHZhciwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAodmFyID49IGxldmVsKSB7Ci0JCWlmICh1c2VfYnJvd3NlciA+PSAxKQorCQlpZiAodXNlX2Jyb3dzZXIgPj0gMSAmJiAhcmVkaXJlY3RfdG9fc3RkZXJyKQogCQkJdWlfaGVscGxpbmVfX3ZzaG93KGZtdCwgYXJncyk7CiAJCWVsc2UKIAkJCXJldCA9IHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmdzKTsKQEAgLTE0NSw2ICsxNDYsNyBAQAogfSBkZWJ1Z192YXJpYWJsZXNbXSA9IHsKIAl7IC5uYW1lID0gInZlcmJvc2UiLAkJLnB0ciA9ICZ2ZXJib3NlIH0sCiAJeyAubmFtZSA9ICJvcmRlcmVkLWV2ZW50cyIsCS5wdHIgPSAmZGVidWdfb3JkZXJlZF9ldmVudHN9LAorCXsgLm5hbWUgPSAic3RkZXJyIiwJCS5wdHIgPSAmcmVkaXJlY3RfdG9fc3RkZXJyfSwKIAl7IC5uYW1lID0gTlVMTCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Rzby5jIGIvdG9vbHMvcGVyZi91dGlsL2Rzby5jCmluZGV4IDAyNDdhY2YuLjQ1YmU5NDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kc28uYworKysgYi90b29scy9wZXJmL3V0aWwvZHNvLmMKQEAgLTIxLDggKzIxLDEwIEBACiAJCVtEU09fQklOQVJZX1RZUEVfX0JVSUxESURfREVCVUdJTkZPXQkJPSAnYicsCiAJCVtEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0RTT10JCT0gJ2QnLAogCQlbRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFXQkJPSAnSycsCisJCVtEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0tNT0RVTEVfQ09NUF0JPSAnbScsCiAJCVtEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tBTExTWU1TXQkJPSAnZycsCiAJCVtEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEVdCQk9ICdHJywKKwkJW0RTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRV9DT01QXQkJPSAnTScsCiAJCVtEU09fQklOQVJZX1RZUEVfX0dVRVNUX1ZNTElOVVhdCQk9ICdWJywKIAl9OwogCkBAIC0xMTIsMTEgKzExNCwxMyBAQAogCQlicmVhazsKIAogCWNhc2UgRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFOgorCWNhc2UgRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVA6CiAJCXBhdGhfX2pvaW4zKGZpbGVuYW1lLCBzaXplLCBzeW1ib2xfY29uZi5zeW1mcywKIAkJCSAgICByb290X2RpciwgZHNvLT5sb25nX25hbWUpOwogCQlicmVhazsKIAogCWNhc2UgRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFOgorCWNhc2UgRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFX0NPTVA6CiAJCV9fc3ltYm9sX19qb2luX3N5bWZzKGZpbGVuYW1lLCBzaXplLCBkc28tPmxvbmdfbmFtZSk7CiAJCWJyZWFrOwogCkBAIC0xMzcsNiArMTQxLDczIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY29uc3QgY2hhciAqZm10OworCWludCAoKmRlY29tcHJlc3MpKGNvbnN0IGNoYXIgKmlucHV0LCBpbnQgb3V0cHV0KTsKK30gY29tcHJlc3Npb25zW10gPSB7CisjaWZkZWYgSEFWRV9aTElCX1NVUFBPUlQKKwl7ICJneiIsIGd6aXBfZGVjb21wcmVzc190b19maWxlIH0sCisjZW5kaWYKKwl7IE5VTEwsIE5VTEwgfSwKK307CisKK2Jvb2wgaXNfc3VwcG9ydGVkX2NvbXByZXNzaW9uKGNvbnN0IGNoYXIgKmV4dCkKK3sKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgY29tcHJlc3Npb25zW2ldLmZtdDsgaSsrKSB7CisJCWlmICghc3RyY21wKGV4dCwgY29tcHJlc3Npb25zW2ldLmZtdCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitib29sIGlzX2ttb2R1bGVfZXh0ZW5zaW9uKGNvbnN0IGNoYXIgKmV4dCkKK3sKKwlpZiAoc3RybmNtcChleHQsICJrbyIsIDIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoZXh0WzJdID09ICdcMCcgfHwgKGV4dFsyXSA9PSAnLicgJiYgaXNfc3VwcG9ydGVkX2NvbXByZXNzaW9uKGV4dCszKSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitib29sIGlzX2tlcm5lbF9tb2R1bGUoY29uc3QgY2hhciAqcGF0aG5hbWUsIGJvb2wgKmNvbXByZXNzZWQpCit7CisJY29uc3QgY2hhciAqZXh0ID0gc3RycmNocihwYXRobmFtZSwgJy4nKTsKKworCWlmIChleHQgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGlzX3N1cHBvcnRlZF9jb21wcmVzc2lvbihleHQgKyAxKSkgeworCQlpZiAoY29tcHJlc3NlZCkKKwkJCSpjb21wcmVzc2VkID0gdHJ1ZTsKKwkJZXh0IC09IDM7CisJfSBlbHNlIGlmIChjb21wcmVzc2VkKQorCQkqY29tcHJlc3NlZCA9IGZhbHNlOworCisJcmV0dXJuIGlzX2ttb2R1bGVfZXh0ZW5zaW9uKGV4dCArIDEpOworfQorCitib29sIGRlY29tcHJlc3NfdG9fZmlsZShjb25zdCBjaGFyICpleHQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgb3V0cHV0X2ZkKQoreworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBjb21wcmVzc2lvbnNbaV0uZm10OyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoZXh0LCBjb21wcmVzc2lvbnNbaV0uZm10KSkKKwkJCXJldHVybiAhY29tcHJlc3Npb25zW2ldLmRlY29tcHJlc3MoZmlsZW5hbWUsCisJCQkJCQkJICAgb3V0cHV0X2ZkKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitib29sIGRzb19fbmVlZHNfZGVjb21wcmVzcyhzdHJ1Y3QgZHNvICpkc28pCit7CisJcmV0dXJuIGRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFX0NPTVAgfHwKKwkJZHNvLT5zeW10YWJfdHlwZSA9PSBEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEVfQ09NUDsKK30KKwogLyoKICAqIEdsb2JhbCBsaXN0IG9mIG9wZW4gRFNPcyBhbmQgdGhlIGNvdW50ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kc28uaCBiL3Rvb2xzL3BlcmYvdXRpbC9kc28uaAppbmRleCBhY2I2NTFhLi4zNzgyYzgyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZHNvLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2Rzby5oCkBAIC0yMiw3ICsyMiw5IEBACiAJRFNPX0JJTkFSWV9UWVBFX19CVUlMRElEX0RFQlVHSU5GTywKIAlEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0RTTywKIAlEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEUsCisJRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVAsCiAJRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFLAorCURTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV9DT01QLAogCURTT19CSU5BUllfVFlQRV9fS0NPUkUsCiAJRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LQ09SRSwKIAlEU09fQklOQVJZX1RZUEVfX09QRU5FTUJFRERFRF9ERUJVR0lORk8sCkBAIC0xMjcsNiArMTI5LDcgQEAKIAljb25zdCBjaGFyCSAqbG9uZ19uYW1lOwogCXUxNgkJIGxvbmdfbmFtZV9sZW47CiAJdTE2CQkgc2hvcnRfbmFtZV9sZW47CisJdm9pZAkJKmR3Zmw7CQkJLyogRFdBUkYgZGVidWcgaW5mbyAqLwogCiAJLyogZHNvIGRhdGEgZmlsZSAqLwogCXN0cnVjdCB7CkBAIC0xMzgsNiArMTQxLDExIEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgb3Blbl9lbnRyeTsKIAl9IGRhdGE7CiAKKwl1bmlvbiB7IC8qIFRvb2wgc3BlY2lmaWMgYXJlYSAqLworCQl2b2lkCSAqcHJpdjsKKwkJdTY0CSBkYl9pZDsKKwl9OworCiAJY2hhcgkJIG5hbWVbMF07CiB9OwogCkBAIC0xNzksNiArMTg3LDExIEBACiBjaGFyIGRzb19fc3ltdGFiX29yaWdpbihjb25zdCBzdHJ1Y3QgZHNvICpkc28pOwogaW50IGRzb19fcmVhZF9iaW5hcnlfdHlwZV9maWxlbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpkc28sIGVudW0gZHNvX2JpbmFyeV90eXBlIHR5cGUsCiAJCQkJICAgY2hhciAqcm9vdF9kaXIsIGNoYXIgKmZpbGVuYW1lLCBzaXplX3Qgc2l6ZSk7Citib29sIGlzX3N1cHBvcnRlZF9jb21wcmVzc2lvbihjb25zdCBjaGFyICpleHQpOworYm9vbCBpc19rbW9kdWxlX2V4dGVuc2lvbihjb25zdCBjaGFyICpleHQpOworYm9vbCBpc19rZXJuZWxfbW9kdWxlKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBib29sICpjb21wcmVzc2VkKTsKK2Jvb2wgZGVjb21wcmVzc190b19maWxlKGNvbnN0IGNoYXIgKmV4dCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBvdXRwdXRfZmQpOworYm9vbCBkc29fX25lZWRzX2RlY29tcHJlc3Moc3RydWN0IGRzbyAqZHNvKTsKIAogLyoKICAqIFRoZSBkc29fX2RhdGFfKiBleHRlcm5hbCBpbnRlcmZhY2UgcHJvdmlkZXMgZm9sbG93aW5nIGZ1bmN0aW9uczoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKaW5kZXggNGFmNmIyNy4uNmM2ZDA0NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKQEAgLTI4LDYgKzI4LDcgQEAKIAlbUEVSRl9SRUNPUkRfSEVBREVSX1RSQUNJTkdfREFUQV0JPSAiVFJBQ0lOR19EQVRBIiwKIAlbUEVSRl9SRUNPUkRfSEVBREVSX0JVSUxEX0lEXQkJPSAiQlVJTERfSUQiLAogCVtQRVJGX1JFQ09SRF9GSU5JU0hFRF9ST1VORF0JCT0gIkZJTklTSEVEX1JPVU5EIiwKKwlbUEVSRl9SRUNPUkRfSURfSU5ERVhdCQkJPSAiSURfSU5ERVgiLAogfTsKIAogY29uc3QgY2hhciAqcGVyZl9ldmVudF9fbmFtZSh1bnNpZ25lZCBpbnQgaWQpCkBAIC03MzAsMTIgKzczMSwxMiBAQAogCXJldHVybiBtYWNoaW5lX19wcm9jZXNzX2V2ZW50KG1hY2hpbmUsIGV2ZW50LCBzYW1wbGUpOwogfQogCi12b2lkIHRocmVhZF9fZmluZF9hZGRyX21hcChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCi0JCQkgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgdTggY3B1bW9kZSwKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbWFwKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgdTggY3B1bW9kZSwKIAkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpCiB7CiAJc3RydWN0IG1hcF9ncm91cHMgKm1nID0gdGhyZWFkLT5tZzsKKwlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSA9IG1nLT5tYWNoaW5lOwogCWJvb2wgbG9hZF9tYXAgPSBmYWxzZTsKIAogCWFsLT5tYWNoaW5lID0gbWFjaGluZTsKQEAgLTgwNiwxNCArODA3LDE0IEBACiAJfQogfQogCi12b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCQl1OCBjcHVtb2RlLCBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCB0eXBlLCBhZGRyLCBhbCk7CisJdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgY3B1bW9kZSwgdHlwZSwgYWRkciwgYWwpOwogCWlmIChhbC0+bWFwICE9IE5VTEwpCiAJCWFsLT5zeW0gPSBtYXBfX2ZpbmRfc3ltYm9sKGFsLT5tYXAsIGFsLT5hZGRyLAotCQkJCQkgICBtYWNoaW5lLT5zeW1ib2xfZmlsdGVyKTsKKwkJCQkJICAgdGhyZWFkLT5tZy0+bWFjaGluZS0+c3ltYm9sX2ZpbHRlcik7CiAJZWxzZQogCQlhbC0+c3ltID0gTlVMTDsKIH0KQEAgLTg0Miw4ICs4NDMsNyBAQAogCSAgICBtYWNoaW5lLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0gPT0gTlVMTCkKIAkJbWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzKG1hY2hpbmUpOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgbWFjaGluZSwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwKLQkJCSAgICAgIHNhbXBsZS0+aXAsIGFsKTsKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLCBzYW1wbGUtPmlwLCBhbCk7CiAJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwKIAkJICAgIGFsLT5tYXAgPyBhbC0+bWFwLT5kc28tPmxvbmdfbmFtZSA6CiAJCQlhbC0+bGV2ZWwgPT0gJ0gnID8gIltoeXBlcnZpc29yXSIgOiAiPG5vdCBmb3VuZD4iKTsKQEAgLTkwMiwxNiArOTAyLDE0IEBACiAKIHZvaWQgcGVyZl9ldmVudF9fcHJlcHJvY2Vzc19zYW1wbGVfYWRkcih1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCQkJc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCi0JCQkJCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAogCQkJCQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCiAJCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKIAl1OCBjcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAotCQkJICAgICAgc2FtcGxlLT5hZGRyLCBhbCk7CisJdGhyZWFkX19maW5kX2FkZHJfbWFwKHRocmVhZCwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwgc2FtcGxlLT5hZGRyLCBhbCk7CiAJaWYgKCFhbC0+bWFwKQotCQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBtYWNoaW5lLCBjcHVtb2RlLCBNQVBfX1ZBUklBQkxFLAorCQl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBjcHVtb2RlLCBNQVBfX1ZBUklBQkxFLAogCQkJCSAgICAgIHNhbXBsZS0+YWRkciwgYWwpOwogCiAJYWwtPmNwdSA9IHNhbXBsZS0+Y3B1OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCA1Njk5ZTdlLi5jNGZmZTJiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMTQzLDYgKzE0MywzMiBAQAogCXN0cnVjdCBicmFuY2hfZW50cnkJZW50cmllc1swXTsKIH07CiAKK2VudW0geworCVBFUkZfSVBfRkxBR19CUkFOQ0gJCT0gMVVMTCA8PCAwLAorCVBFUkZfSVBfRkxBR19DQUxMCQk9IDFVTEwgPDwgMSwKKwlQRVJGX0lQX0ZMQUdfUkVUVVJOCQk9IDFVTEwgPDwgMiwKKwlQRVJGX0lQX0ZMQUdfQ09ORElUSU9OQUwJPSAxVUxMIDw8IDMsCisJUEVSRl9JUF9GTEFHX1NZU0NBTExSRVQJCT0gMVVMTCA8PCA0LAorCVBFUkZfSVBfRkxBR19BU1lOQwkJPSAxVUxMIDw8IDUsCisJUEVSRl9JUF9GTEFHX0lOVEVSUlVQVAkJPSAxVUxMIDw8IDYsCisJUEVSRl9JUF9GTEFHX1RYX0FCT1JUCQk9IDFVTEwgPDwgNywKKwlQRVJGX0lQX0ZMQUdfVFJBQ0VfQkVHSU4JPSAxVUxMIDw8IDgsCisJUEVSRl9JUF9GTEFHX1RSQUNFX0VORAkJPSAxVUxMIDw8IDksCisJUEVSRl9JUF9GTEFHX0lOX1RYCQk9IDFVTEwgPDwgMTAsCit9OworCisjZGVmaW5lIFBFUkZfQlJBTkNIX01BU0sJCShcCisJUEVSRl9JUF9GTEFHX0JSQU5DSAkJfFwKKwlQRVJGX0lQX0ZMQUdfQ0FMTAkJfFwKKwlQRVJGX0lQX0ZMQUdfUkVUVVJOCQl8XAorCVBFUkZfSVBfRkxBR19DT05ESVRJT05BTAl8XAorCVBFUkZfSVBfRkxBR19TWVNDQUxMUkVUCQl8XAorCVBFUkZfSVBfRkxBR19BU1lOQwkJfFwKKwlQRVJGX0lQX0ZMQUdfSU5URVJSVVBUCQl8XAorCVBFUkZfSVBfRkxBR19UWF9BQk9SVAkJfFwKKwlQRVJGX0lQX0ZMQUdfVFJBQ0VfQkVHSU4JfFwKKwlQRVJGX0lQX0ZMQUdfVFJBQ0VfRU5EKQorCiBzdHJ1Y3QgcGVyZl9zYW1wbGUgewogCXU2NCBpcDsKIAl1MzIgcGlkLCB0aWQ7CkBAIC0xNjIsNiArMTg4LDcgQEAKIAlzdHJ1Y3QgaXBfY2FsbGNoYWluICpjYWxsY2hhaW47CiAJc3RydWN0IGJyYW5jaF9zdGFjayAqYnJhbmNoX3N0YWNrOwogCXN0cnVjdCByZWdzX2R1bXAgIHVzZXJfcmVnczsKKwlzdHJ1Y3QgcmVnc19kdW1wICBpbnRyX3JlZ3M7CiAJc3RydWN0IHN0YWNrX2R1bXAgdXNlcl9zdGFjazsKIAlzdHJ1Y3Qgc2FtcGxlX3JlYWQgcmVhZDsKIH07CkBAIC0xODcsNiArMjE0LDcgQEAKIAlQRVJGX1JFQ09SRF9IRUFERVJfVFJBQ0lOR19EQVRBCQk9IDY2LAogCVBFUkZfUkVDT1JEX0hFQURFUl9CVUlMRF9JRAkJPSA2NywKIAlQRVJGX1JFQ09SRF9GSU5JU0hFRF9ST1VORAkJPSA2OCwKKwlQRVJGX1JFQ09SRF9JRF9JTkRFWAkJCT0gNjksCiAJUEVSRl9SRUNPUkRfSEVBREVSX01BWAogfTsKIApAQCAtMjE0LDYgKzI0Miw3IEBACiAJdTMyIG5yX2ludmFsaWRfY2hhaW5zOwogCXUzMiBucl91bmtub3duX2lkOwogCXUzMiBucl91bnByb2Nlc3NhYmxlX3NhbXBsZXM7CisJdTMyIG5yX3Vub3JkZXJlZF9ldmVudHM7CiB9OwogCiBzdHJ1Y3QgYXR0cl9ldmVudCB7CkBAIC0yMzksNiArMjY4LDE5IEBACiAJdTMyIHNpemU7CiB9OwogCitzdHJ1Y3QgaWRfaW5kZXhfZW50cnkgeworCXU2NCBpZDsKKwl1NjQgaWR4OworCXU2NCBjcHU7CisJdTY0IHRpZDsKK307CisKK3N0cnVjdCBpZF9pbmRleF9ldmVudCB7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwl1NjQgbnI7CisJc3RydWN0IGlkX2luZGV4X2VudHJ5IGVudHJpZXNbMF07Cit9OworCiB1bmlvbiBwZXJmX2V2ZW50IHsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCXN0cnVjdCBtbWFwX2V2ZW50CQltbWFwOwpAQCAtMjUzLDYgKzI5NSw3IEBACiAJc3RydWN0IGV2ZW50X3R5cGVfZXZlbnQJCWV2ZW50X3R5cGU7CiAJc3RydWN0IHRyYWNpbmdfZGF0YV9ldmVudAl0cmFjaW5nX2RhdGE7CiAJc3RydWN0IGJ1aWxkX2lkX2V2ZW50CQlidWlsZF9pZDsKKwlzdHJ1Y3QgaWRfaW5kZXhfZXZlbnQJCWlkX2luZGV4OwogfTsKIAogdm9pZCBwZXJmX2V2ZW50X19wcmludF90b3RhbHModm9pZCk7CkBAIC0zMjIsNyArMzY1LDYgQEAKIGJvb2wgc2FtcGxlX2FkZHJfY29ycmVsYXRlc19zeW0oc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cik7CiB2b2lkIHBlcmZfZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlX2FkZHIodW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAotCQkJCQlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKIAkJCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKaW5kZXggM2M5ZTc3ZC4uY2ZiZTJiOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwpAQCAtNDEzLDcgKzQxMyw3IEBACiAJaW50IG5mZHMgPSAwOwogCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZzZWwsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKKwlldmxpc3RfX2Zvcl9lYWNoKGV2bGlzdCwgZXZzZWwpIHsKIAkJaWYgKGV2c2VsLT5zeXN0ZW1fd2lkZSkKIAkJCW5mZHMgKz0gbnJfY3B1czsKIAkJZWxzZQpAQCAtNTI3LDYgKzUyNywyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwZXJmX2V2bGlzdF9fc2V0X3NpZF9pZHgoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsCisJCQkJICAgICBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBpZHgsIGludCBjcHUsCisJCQkJICAgICBpbnQgdGhyZWFkKQoreworCXN0cnVjdCBwZXJmX3NhbXBsZV9pZCAqc2lkID0gU0lEKGV2c2VsLCBjcHUsIHRocmVhZCk7CisJc2lkLT5pZHggPSBpZHg7CisJaWYgKGV2bGlzdC0+Y3B1cyAmJiBjcHUgPj0gMCkKKwkJc2lkLT5jcHUgPSBldmxpc3QtPmNwdXMtPm1hcFtjcHVdOworCWVsc2UKKwkJc2lkLT5jcHUgPSAtMTsKKwlpZiAoIWV2c2VsLT5zeXN0ZW1fd2lkZSAmJiBldmxpc3QtPnRocmVhZHMgJiYgdGhyZWFkID49IDApCisJCXNpZC0+dGlkID0gZXZsaXN0LT50aHJlYWRzLT5tYXBbdGhyZWFkXTsKKwllbHNlCisJCXNpZC0+dGlkID0gLTE7Cit9CisKIHN0cnVjdCBwZXJmX3NhbXBsZV9pZCAqcGVyZl9ldmxpc3RfX2lkMnNpZChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgdTY0IGlkKQogewogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwpAQCAtODAwLDE0ICs4MTYsMjYgQEAKIAkJCXBlcmZfZXZsaXN0X19tbWFwX2dldChldmxpc3QsIGlkeCk7CiAJCX0KIAotCQlpZiAoX19wZXJmX2V2bGlzdF9fYWRkX3BvbGxmZChldmxpc3QsIGZkLCBpZHgpIDwgMCkgeworCQkvKgorCQkgKiBUaGUgc3lzdGVtX3dpZGUgZmxhZyBjYXVzZXMgYSBzZWxlY3RlZCBldmVudCB0byBiZSBvcGVuZWQKKwkJICogYWx3YXlzIHdpdGhvdXQgYSBwaWQuICBDb25zZXF1ZW50bHkgaXQgd2lsbCBuZXZlciBnZXQgYQorCQkgKiBQT0xMSFVQLCBidXQgaXQgaXMgdXNlZCBmb3IgdHJhY2tpbmcgaW4gY29tYmluYXRpb24gd2l0aAorCQkgKiBvdGhlciBldmVudHMsIHNvIGl0IHNob3VsZCBub3QgbmVlZCB0byBiZSBwb2xsZWQgYW55d2F5LgorCQkgKiBUaGVyZWZvcmUgZG9uJ3QgYWRkIGl0IGZvciBwb2xsaW5nLgorCQkgKi8KKwkJaWYgKCFldnNlbC0+c3lzdGVtX3dpZGUgJiYKKwkJICAgIF9fcGVyZl9ldmxpc3RfX2FkZF9wb2xsZmQoZXZsaXN0LCBmZCwgaWR4KSA8IDApIHsKIAkJCXBlcmZfZXZsaXN0X19tbWFwX3B1dChldmxpc3QsIGlkeCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCQlpZiAoKGV2c2VsLT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpICYmCi0JCSAgICBwZXJmX2V2bGlzdF9faWRfYWRkX2ZkKGV2bGlzdCwgZXZzZWwsIGNwdSwgdGhyZWFkLCBmZCkgPCAwKQotCQkJcmV0dXJuIC0xOworCQlpZiAoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgeworCQkJaWYgKHBlcmZfZXZsaXN0X19pZF9hZGRfZmQoZXZsaXN0LCBldnNlbCwgY3B1LCB0aHJlYWQsCisJCQkJCQkgICBmZCkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCXBlcmZfZXZsaXN0X19zZXRfc2lkX2lkeChldmxpc3QsIGV2c2VsLCBpZHgsIGNwdSwKKwkJCQkJCSB0aHJlYWQpOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCmluZGV4IDJmOWU2ODAuLjFlOTBjODUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCkBAIC02NTgsOSArNjU4LDIyIEBACiAJCWF0dHItPm1tYXBfZGF0YSA9IHRyYWNrOwogCX0KIAorCS8qCisJICogV2UgZG9uJ3QgYWxsb3cgdXNlciBzcGFjZSBjYWxsY2hhaW5zIGZvciAgZnVuY3Rpb24gdHJhY2UKKwkgKiBldmVudCwgZHVlIHRvIGlzc3VlcyB3aXRoIHBhZ2UgZmF1bHRzIHdoaWxlIHRyYWNpbmcgcGFnZQorCSAqIGZhdWx0IGhhbmRsZXIgYW5kIGl0cyBvdmVyYWxsIHRyaWNraW5lc3MgbmF0dXJlLgorCSAqLworCWlmIChwZXJmX2V2c2VsX19pc19mdW5jdGlvbl9ldmVudChldnNlbCkpCisJCWV2c2VsLT5hdHRyLmV4Y2x1ZGVfY2FsbGNoYWluX3VzZXIgPSAxOworCiAJaWYgKGNhbGxjaGFpbl9wYXJhbS5lbmFibGVkICYmICFldnNlbC0+bm9fYXV4X3NhbXBsZXMpCiAJCXBlcmZfZXZzZWxfX2NvbmZpZ19jYWxsZ3JhcGgoZXZzZWwpOwogCisJaWYgKG9wdHMtPnNhbXBsZV9pbnRyX3JlZ3MpIHsKKwkJYXR0ci0+c2FtcGxlX3JlZ3NfaW50ciA9IFBFUkZfUkVHU19NQVNLOworCQlwZXJmX2V2c2VsX19zZXRfc2FtcGxlX2JpdChldnNlbCwgUkVHU19JTlRSKTsKKwl9CisKIAlpZiAodGFyZ2V0X19oYXNfY3B1KCZvcHRzLT50YXJnZXQpKQogCQlwZXJmX2V2c2VsX19zZXRfc2FtcGxlX2JpdChldnNlbCwgQ1BVKTsKIApAQCAtODUzLDggKzg2Niw2IEBACiAJcGVyZl9ldnNlbF9fZnJlZV9pZChldnNlbCk7CiAJY2xvc2VfY2dyb3VwKGV2c2VsLT5jZ3JwKTsKIAl6ZnJlZSgmZXZzZWwtPmdyb3VwX25hbWUpOwotCWlmIChldnNlbC0+dHBfZm9ybWF0KQotCQlwZXZlbnRfZnJlZV9mb3JtYXQoZXZzZWwtPnRwX2Zvcm1hdCk7CiAJemZyZWUoJmV2c2VsLT5uYW1lKTsKIAlwZXJmX2V2c2VsX19vYmplY3QuZmluaShldnNlbCk7CiB9CkBAIC04NjUsOSArODc2LDggQEAKIAlmcmVlKGV2c2VsKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVfZGVsdGFzKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCQkgIGludCBjcHUsCi0JCQkJICBzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICpjb3VudCkKK3ZvaWQgcGVyZl9ldnNlbF9fY29tcHV0ZV9kZWx0YXMoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgY3B1LAorCQkJCXN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgKmNvdW50KQogewogCXN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgdG1wOwogCkBAIC04ODcsNiArODk3LDQyIEBACiAJY291bnQtPnJ1biA9IGNvdW50LT5ydW4gLSB0bXAucnVuOwogfQogCit2b2lkIHBlcmZfY291bnRzX3ZhbHVlc19fc2NhbGUoc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqY291bnQsCisJCQkgICAgICAgYm9vbCBzY2FsZSwgczggKnBzY2FsZWQpCit7CisJczggc2NhbGVkID0gMDsKKworCWlmIChzY2FsZSkgeworCQlpZiAoY291bnQtPnJ1biA9PSAwKSB7CisJCQlzY2FsZWQgPSAtMTsKKwkJCWNvdW50LT52YWwgPSAwOworCQl9IGVsc2UgaWYgKGNvdW50LT5ydW4gPCBjb3VudC0+ZW5hKSB7CisJCQlzY2FsZWQgPSAxOworCQkJY291bnQtPnZhbCA9ICh1NjQpKChkb3VibGUpIGNvdW50LT52YWwgKiBjb3VudC0+ZW5hIC8gY291bnQtPnJ1biArIDAuNSk7CisJCX0KKwl9IGVsc2UKKwkJY291bnQtPmVuYSA9IGNvdW50LT5ydW4gPSAwOworCisJaWYgKHBzY2FsZWQpCisJCSpwc2NhbGVkID0gc2NhbGVkOworfQorCitpbnQgcGVyZl9ldnNlbF9fcmVhZF9jYihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBjcHUsIGludCB0aHJlYWQsCisJCQlwZXJmX2V2c2VsX19yZWFkX2NiX3QgY2IpCit7CisJc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyBjb3VudDsKKworCW1lbXNldCgmY291bnQsIDAsIHNpemVvZihjb3VudCkpOworCisJaWYgKEZEKGV2c2VsLCBjcHUsIHRocmVhZCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZWFkbihGRChldnNlbCwgY3B1LCB0aHJlYWQpLCAmY291bnQsIHNpemVvZihjb3VudCkpIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCXJldHVybiBjYihldnNlbCwgY3B1LCB0aHJlYWQsICZjb3VudCk7Cit9CisKIGludCBfX3BlcmZfZXZzZWxfX3JlYWRfb25fY3B1KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKIAkJCSAgICAgIGludCBjcHUsIGludCB0aHJlYWQsIGJvb2wgc2NhbGUpCiB7CkBAIC05MDIsNjkgKzk0OCwxMiBAQAogCWlmIChyZWFkbihGRChldnNlbCwgY3B1LCB0aHJlYWQpLCAmY291bnQsIG52ICogc2l6ZW9mKHU2NCkpIDwgMCkKIAkJcmV0dXJuIC1lcnJubzsKIAotCWNvbXB1dGVfZGVsdGFzKGV2c2VsLCBjcHUsICZjb3VudCk7Ci0KLQlpZiAoc2NhbGUpIHsKLQkJaWYgKGNvdW50LnJ1biA9PSAwKQotCQkJY291bnQudmFsID0gMDsKLQkJZWxzZSBpZiAoY291bnQucnVuIDwgY291bnQuZW5hKQotCQkJY291bnQudmFsID0gKHU2NCkoKGRvdWJsZSljb3VudC52YWwgKiBjb3VudC5lbmEgLyBjb3VudC5ydW4gKyAwLjUpOwotCX0gZWxzZQotCQljb3VudC5lbmEgPSBjb3VudC5ydW4gPSAwOwotCisJcGVyZl9ldnNlbF9fY29tcHV0ZV9kZWx0YXMoZXZzZWwsIGNwdSwgJmNvdW50KTsKKwlwZXJmX2NvdW50c192YWx1ZXNfX3NjYWxlKCZjb3VudCwgc2NhbGUsIE5VTEwpOwogCWV2c2VsLT5jb3VudHMtPmNwdVtjcHVdID0gY291bnQ7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBfX3BlcmZfZXZzZWxfX3JlYWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkgICAgICAgaW50IG5jcHVzLCBpbnQgbnRocmVhZHMsIGJvb2wgc2NhbGUpCi17Ci0Jc2l6ZV90IG52ID0gc2NhbGUgPyAzIDogMTsKLQlpbnQgY3B1LCB0aHJlYWQ7Ci0Jc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqYWdnciA9ICZldnNlbC0+Y291bnRzLT5hZ2dyLCBjb3VudDsKLQotCWlmIChldnNlbC0+c3lzdGVtX3dpZGUpCi0JCW50aHJlYWRzID0gMTsKLQotCWFnZ3ItPnZhbCA9IGFnZ3ItPmVuYSA9IGFnZ3ItPnJ1biA9IDA7Ci0KLQlmb3IgKGNwdSA9IDA7IGNwdSA8IG5jcHVzOyBjcHUrKykgewotCQlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IG50aHJlYWRzOyB0aHJlYWQrKykgewotCQkJaWYgKEZEKGV2c2VsLCBjcHUsIHRocmVhZCkgPCAwKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAocmVhZG4oRkQoZXZzZWwsIGNwdSwgdGhyZWFkKSwKLQkJCQkgICZjb3VudCwgbnYgKiBzaXplb2YodTY0KSkgPCAwKQotCQkJCXJldHVybiAtZXJybm87Ci0KLQkJCWFnZ3ItPnZhbCArPSBjb3VudC52YWw7Ci0JCQlpZiAoc2NhbGUpIHsKLQkJCQlhZ2dyLT5lbmEgKz0gY291bnQuZW5hOwotCQkJCWFnZ3ItPnJ1biArPSBjb3VudC5ydW47Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljb21wdXRlX2RlbHRhcyhldnNlbCwgLTEsIGFnZ3IpOwotCi0JZXZzZWwtPmNvdW50cy0+c2NhbGVkID0gMDsKLQlpZiAoc2NhbGUpIHsKLQkJaWYgKGFnZ3ItPnJ1biA9PSAwKSB7Ci0JCQlldnNlbC0+Y291bnRzLT5zY2FsZWQgPSAtMTsKLQkJCWFnZ3ItPnZhbCA9IDA7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmIChhZ2dyLT5ydW4gPCBhZ2dyLT5lbmEpIHsKLQkJCWV2c2VsLT5jb3VudHMtPnNjYWxlZCA9IDE7Ci0JCQlhZ2dyLT52YWwgPSAodTY0KSgoZG91YmxlKWFnZ3ItPnZhbCAqIGFnZ3ItPmVuYSAvIGFnZ3ItPnJ1biArIDAuNSk7Ci0JCX0KLQl9IGVsc2UKLQkJYWdnci0+ZW5hID0gYWdnci0+cnVuID0gMDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGdldF9ncm91cF9mZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBjcHUsIGludCB0aHJlYWQpCiB7CiAJc3RydWN0IHBlcmZfZXZzZWwgKmxlYWRlciA9IGV2c2VsLT5sZWFkZXI7CkBAIC0xMDM5LDYgKzEwMjgsNyBAQAogCXJldCArPSBQUklOVF9BVFRSX1g2NChicmFuY2hfc2FtcGxlX3R5cGUpOwogCXJldCArPSBQUklOVF9BVFRSX1g2NChzYW1wbGVfcmVnc191c2VyKTsKIAlyZXQgKz0gUFJJTlRfQVRUUl9VMzIoc2FtcGxlX3N0YWNrX3VzZXIpOworCXJldCArPSBQUklOVF9BVFRSX1g2NChzYW1wbGVfcmVnc19pbnRyKTsKIAogCXJldCArPSBmcHJpbnRmKGZwLCAiJS42MHNcbiIsIGdyYXBoX2RvdHRlZF9saW5lKTsKIApAQCAtMTUzOCw2ICsxNTI4LDIzIEBACiAJCWFycmF5Kys7CiAJfQogCisJZGF0YS0+aW50cl9yZWdzLmFiaSA9IFBFUkZfU0FNUExFX1JFR1NfQUJJX05PTkU7CisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIpIHsKKwkJT1ZFUkZMT1dfQ0hFQ0tfdTY0KGFycmF5KTsKKwkJZGF0YS0+aW50cl9yZWdzLmFiaSA9ICphcnJheTsKKwkJYXJyYXkrKzsKKworCQlpZiAoZGF0YS0+aW50cl9yZWdzLmFiaSAhPSBQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FKSB7CisJCQl1NjQgbWFzayA9IGV2c2VsLT5hdHRyLnNhbXBsZV9yZWdzX2ludHI7CisKKwkJCXN6ID0gaHdlaWdodF9sb25nKG1hc2spICogc2l6ZW9mKHU2NCk7CisJCQlPVkVSRkxPV19DSEVDSyhhcnJheSwgc3osIG1heF9zaXplKTsKKwkJCWRhdGEtPmludHJfcmVncy5tYXNrID0gbWFzazsKKwkJCWRhdGEtPmludHJfcmVncy5yZWdzID0gKHU2NCAqKWFycmF5OworCQkJYXJyYXkgPSAodm9pZCAqKWFycmF5ICsgc3o7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYzMyw2ICsxNjQwLDE2IEBACiAJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9UUkFOU0FDVElPTikKIAkJcmVzdWx0ICs9IHNpemVvZih1NjQpOwogCisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9SRUdTX0lOVFIpIHsKKwkJaWYgKHNhbXBsZS0+aW50cl9yZWdzLmFiaSkgeworCQkJcmVzdWx0ICs9IHNpemVvZih1NjQpOworCQkJc3ogPSBod2VpZ2h0X2xvbmcoc2FtcGxlLT5pbnRyX3JlZ3MubWFzaykgKiBzaXplb2YodTY0KTsKKwkJCXJlc3VsdCArPSBzejsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCArPSBzaXplb2YodTY0KTsKKwkJfQorCX0KKwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE4MTEsNiArMTgyOCwxNyBAQAogCQlhcnJheSsrOwogCX0KIAorCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfUkVHU19JTlRSKSB7CisJCWlmIChzYW1wbGUtPmludHJfcmVncy5hYmkpIHsKKwkJCSphcnJheSsrID0gc2FtcGxlLT5pbnRyX3JlZ3MuYWJpOworCQkJc3ogPSBod2VpZ2h0X2xvbmcoc2FtcGxlLT5pbnRyX3JlZ3MubWFzaykgKiBzaXplb2YodTY0KTsKKwkJCW1lbWNweShhcnJheSwgc2FtcGxlLT5pbnRyX3JlZ3MucmVncywgc3opOworCQkJYXJyYXkgPSAodm9pZCAqKWFycmF5ICsgc3o7CisJCX0gZWxzZSB7CisJCQkqYXJyYXkrKyA9IDA7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk0MCw3ICsxOTY4LDcgQEAKIAkJYml0X25hbWUoUkVBRCksIGJpdF9uYW1lKENBTExDSEFJTiksIGJpdF9uYW1lKElEKSwgYml0X25hbWUoQ1BVKSwKIAkJYml0X25hbWUoUEVSSU9EKSwgYml0X25hbWUoU1RSRUFNX0lEKSwgYml0X25hbWUoUkFXKSwKIAkJYml0X25hbWUoQlJBTkNIX1NUQUNLKSwgYml0X25hbWUoUkVHU19VU0VSKSwgYml0X25hbWUoU1RBQ0tfVVNFUiksCi0JCWJpdF9uYW1lKElERU5USUZJRVIpLAorCQliaXRfbmFtZShJREVOVElGSUVSKSwgYml0X25hbWUoUkVHU19JTlRSKSwKIAkJeyAubmFtZSA9IE5VTEwsIH0KIAl9OwogI3VuZGVmIGJpdF9uYW1lCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCmluZGV4IDE2M2M1NjAuLjM4NjIyNzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCkBAIC0zNiw2ICszNiw5IEBACiAJc3RydWN0IGhsaXN0X25vZGUgCW5vZGU7CiAJdTY0CQkgCWlkOwogCXN0cnVjdCBwZXJmX2V2c2VsCSpldnNlbDsKKwlpbnQJCQlpZHg7CisJaW50CQkJY3B1OworCXBpZF90CQkJdGlkOwogCiAJLyogSG9sZHMgdG90YWwgSUQgcGVyaW9kIHZhbHVlIGZvciBQRVJGX1NBTVBMRV9SRUFEIHByb2Nlc3NpbmcuICovCiAJdTY0CQkJcGVyaW9kOwpAQCAtNTQsNiArNTcsNyBAQAogICogQGlzX3BvczogdGhlIHBvc2l0aW9uIChjb3VudGluZyBiYWNrd2FyZHMpIG9mIHRoZSBldmVudCBpZCAoUEVSRl9TQU1QTEVfSUQgb3IKICAqICAgICAgICAgIFBFUkZfU0FNUExFX0lERU5USUZJRVIpIGluIGEgbm9uLXNhbXBsZSBldmVudCBpLmUuIGlmIHNhbXBsZV9pZF9hbGwKICAqICAgICAgICAgIGlzIHVzZWQgdGhlcmUgaXMgYW4gaWQgc2FtcGxlIGFwcGVuZGVkIHRvIG5vbi1zYW1wbGUgZXZlbnRzCisgKiBAcHJpdjogICBBbmQgd2hhdCBpcyBpbiBpdHMgY29udGFpbmluZyB1bm5hbWVkIHVuaW9uIGFyZSB0b29sIHNwZWNpZmljCiAgKi8KIHN0cnVjdCBwZXJmX2V2c2VsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CkBAIC02OSwxMCArNzMsMTIgQEAKIAljaGFyCQkJKm5hbWU7CiAJZG91YmxlCQkJc2NhbGU7CiAJY29uc3QgY2hhcgkJKnVuaXQ7CisJYm9vbAkJCXNuYXBzaG90OwogCXN0cnVjdCBldmVudF9mb3JtYXQJKnRwX2Zvcm1hdDsKIAl1bmlvbiB7CiAJCXZvaWQJCSpwcml2OwogCQlvZmZfdAkJaWRfb2Zmc2V0OworCQl1NjQJCWRiX2lkOwogCX07CiAJc3RydWN0IGNncm91cF9zZWwJKmNncnA7CiAJdm9pZAkJCSpoYW5kbGVyOwpAQCAtODYsNiArOTIsOCBAQAogCWJvb2wJCQlpbW1lZGlhdGU7CiAJYm9vbAkJCXN5c3RlbV93aWRlOwogCWJvb2wJCQl0cmFja2luZzsKKwlib29sCQkJcGVyX3BrZzsKKwl1bnNpZ25lZCBsb25nCQkqcGVyX3BrZ19tYXNrOwogCS8qIHBhcnNlIG1vZGlmaWVyIGhlbHBlciAqLwogCWludAkJCWV4Y2x1ZGVfR0g7CiAJaW50CQkJbnJfbWVtYmVyczsKQEAgLTEwNSw2ICsxMTMsMTIgQEAKIHN0cnVjdCBwZXJmX2V2bGlzdDsKIHN0cnVjdCByZWNvcmRfb3B0czsKIAordm9pZCBwZXJmX2NvdW50c192YWx1ZXNfX3NjYWxlKHN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgKmNvdW50LAorCQkJICAgICAgIGJvb2wgc2NhbGUsIHM4ICpwc2NhbGVkKTsKKwordm9pZCBwZXJmX2V2c2VsX19jb21wdXRlX2RlbHRhcyhzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBjcHUsCisJCQkJc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqY291bnQpOworCiBpbnQgcGVyZl9ldnNlbF9fb2JqZWN0X2NvbmZpZyhzaXplX3Qgb2JqZWN0X3NpemUsCiAJCQkgICAgICBpbnQgKCppbml0KShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpLAogCQkJICAgICAgdm9pZCAoKmZpbmkpKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkpOwpAQCAtMjIyLDYgKzIzNiwxMyBAQAogCSAoYSktPmF0dHIudHlwZSA9PSAoYiktPmF0dHIudHlwZSAmJglcCiAJIChhKS0+YXR0ci5jb25maWcgPT0gKGIpLT5hdHRyLmNvbmZpZykKIAordHlwZWRlZiBpbnQgKHBlcmZfZXZzZWxfX3JlYWRfY2JfdCkoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkJCSAgICBpbnQgY3B1LCBpbnQgdGhyZWFkLAorCQkJCSAgICBzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICpjb3VudCk7CisKK2ludCBwZXJmX2V2c2VsX19yZWFkX2NiKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgaW50IGNwdSwgaW50IHRocmVhZCwKKwkJCXBlcmZfZXZzZWxfX3JlYWRfY2JfdCBjYik7CisKIGludCBfX3BlcmZfZXZzZWxfX3JlYWRfb25fY3B1KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKIAkJCSAgICAgIGludCBjcHUsIGludCB0aHJlYWQsIGJvb2wgc2NhbGUpOwogCkBAIC0yNTEsMzUgKzI3Miw2IEBACiAJcmV0dXJuIF9fcGVyZl9ldnNlbF9fcmVhZF9vbl9jcHUoZXZzZWwsIGNwdSwgdGhyZWFkLCB0cnVlKTsKIH0KIAotaW50IF9fcGVyZl9ldnNlbF9fcmVhZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBuY3B1cywgaW50IG50aHJlYWRzLAotCQkgICAgICAgYm9vbCBzY2FsZSk7Ci0KLS8qKgotICogcGVyZl9ldnNlbF9fcmVhZCAtIFJlYWQgdGhlIGFnZ3JlZ2F0ZSByZXN1bHRzIG9uIGFsbCBDUFVzCi0gKgotICogQGV2c2VsIC0gZXZlbnQgc2VsZWN0b3IgdG8gcmVhZCB2YWx1ZQotICogQG5jcHVzIC0gTnVtYmVyIG9mIGNwdXMgYWZmZWN0ZWQsIGZyb20gemVybwotICogQG50aHJlYWRzIC0gTnVtYmVyIG9mIHRocmVhZHMgYWZmZWN0ZWQsIGZyb20gemVybwotICovCi1zdGF0aWMgaW5saW5lIGludCBwZXJmX2V2c2VsX19yZWFkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCQkgICAgaW50IG5jcHVzLCBpbnQgbnRocmVhZHMpCi17Ci0JcmV0dXJuIF9fcGVyZl9ldnNlbF9fcmVhZChldnNlbCwgbmNwdXMsIG50aHJlYWRzLCBmYWxzZSk7Ci19Ci0KLS8qKgotICogcGVyZl9ldnNlbF9fcmVhZF9zY2FsZWQgLSBSZWFkIHRoZSBhZ2dyZWdhdGUgcmVzdWx0cyBvbiBhbGwgQ1BVcywgc2NhbGVkCi0gKgotICogQGV2c2VsIC0gZXZlbnQgc2VsZWN0b3IgdG8gcmVhZCB2YWx1ZQotICogQG5jcHVzIC0gTnVtYmVyIG9mIGNwdXMgYWZmZWN0ZWQsIGZyb20gemVybwotICogQG50aHJlYWRzIC0gTnVtYmVyIG9mIHRocmVhZHMgYWZmZWN0ZWQsIGZyb20gemVybwotICovCi1zdGF0aWMgaW5saW5lIGludCBwZXJmX2V2c2VsX19yZWFkX3NjYWxlZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCi0JCQkJCSAgaW50IG5jcHVzLCBpbnQgbnRocmVhZHMpCi17Ci0JcmV0dXJuIF9fcGVyZl9ldnNlbF9fcmVhZChldnNlbCwgbmNwdXMsIG50aHJlYWRzLCB0cnVlKTsKLX0KLQogaW50IHBlcmZfZXZzZWxfX3BhcnNlX3NhbXBsZShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9maW5kLXZkc28tbWFwLmMgYi90b29scy9wZXJmL3V0aWwvZmluZC12ZHNvLW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZWYxY2YKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvZmluZC12ZHNvLW1hcC5jCkBAIC0wLDAgKzEsMzAgQEAKK3N0YXRpYyBpbnQgZmluZF92ZHNvX21hcCh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQpCit7CisJRklMRSAqbWFwczsKKwljaGFyIGxpbmVbMTI4XTsKKwlpbnQgZm91bmQgPSAwOworCisJbWFwcyA9IGZvcGVuKCIvcHJvYy9zZWxmL21hcHMiLCAiciIpOworCWlmICghbWFwcykgeworCQlmcHJpbnRmKHN0ZGVyciwgInZkc286IGNhbm5vdCBvcGVuIG1hcHNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKCFmb3VuZCAmJiBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIG1hcHMpKSB7CisJCWludCBtID0gLTE7CisKKwkJLyogV2UgY2FyZSBvbmx5IGFib3V0IHByaXZhdGUgci14IG1hcHBpbmdzLiAqLworCQlpZiAoMiAhPSBzc2NhbmYobGluZSwgIiVwLSVwIHIteHAgJSp4ICUqeDolKnggJSp1ICVuIiwKKwkJCQlzdGFydCwgZW5kLCAmbSkpCisJCQljb250aW51ZTsKKwkJaWYgKG0gPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCFzdHJuY21wKCZsaW5lW21dLCBWRFNPX19NQVBfTkFNRSwKKwkJCSAgICAgc2l6ZW9mKFZEU09fX01BUF9OQU1FKSAtIDEpKQorCQkJZm91bmQgPSAxOworCX0KKworCWZjbG9zZShtYXBzKTsKKwlyZXR1cm4gIWZvdW5kOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCmluZGV4IDI2ZjViMmYuLmIyMGU0MGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKQEAgLTI0LDggKzI0LDYgQEAKICNpbmNsdWRlICJidWlsZC1pZC5oIgogI2luY2x1ZGUgImRhdGEuaCIKIAotc3RhdGljIGJvb2wgbm9fYnVpbGRpZF9jYWNoZSA9IGZhbHNlOwotCiBzdGF0aWMgdTMyIGhlYWRlcl9hcmdjOwogc3RhdGljIGNvbnN0IGNoYXIgKipoZWFkZXJfYXJndjsKIApAQCAtNzksMTAgKzc3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBOQU1FX0FMSUdOIDY0Ci0KLXN0YXRpYyBpbnQgd3JpdGVfcGFkZGVkKGludCBmZCwgY29uc3Qgdm9pZCAqYmYsIHNpemVfdCBjb3VudCwKLQkJCXNpemVfdCBjb3VudF9hbGlnbmVkKQoraW50IHdyaXRlX3BhZGRlZChpbnQgZmQsIGNvbnN0IHZvaWQgKmJmLCBzaXplX3QgY291bnQsIHNpemVfdCBjb3VudF9hbGlnbmVkKQogewogCXN0YXRpYyBjb25zdCBjaGFyIHplcm9fYnVmW05BTUVfQUxJR05dOwogCWludCBlcnIgPSBkb193cml0ZShmZCwgYmYsIGNvdW50KTsKQEAgLTE3MSwzNDAgKzE2Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpCVwKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkJXAotCQlpZiAoIXBvcy0+aGFzX2J1aWxkX2lkKQkJXAotCQkJY29udGludWU7CQlcCi0JCWVsc2UKLQotc3RhdGljIGludCB3cml0ZV9idWlsZGlkKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgdTggKmJ1aWxkX2lkLAotCQkJIHBpZF90IHBpZCwgdTE2IG1pc2MsIGludCBmZCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBidWlsZF9pZF9ldmVudCBiOwotCXNpemVfdCBsZW47Ci0KLQlsZW4gPSBuYW1lX2xlbiArIDE7Ci0JbGVuID0gUEVSRl9BTElHTihsZW4sIE5BTUVfQUxJR04pOwotCi0JbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOwotCW1lbWNweSgmYi5idWlsZF9pZCwgYnVpbGRfaWQsIEJVSUxEX0lEX1NJWkUpOwotCWIucGlkID0gcGlkOwotCWIuaGVhZGVyLm1pc2MgPSBtaXNjOwotCWIuaGVhZGVyLnNpemUgPSBzaXplb2YoYikgKyBsZW47Ci0KLQllcnIgPSBkb193cml0ZShmZCwgJmIsIHNpemVvZihiKSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gd3JpdGVfcGFkZGVkKGZkLCBuYW1lLCBuYW1lX2xlbiArIDEsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbnQgX19kc29zX19oaXRfYWxsKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCi17Ci0Jc3RydWN0IGRzbyAqcG9zOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpCi0JCXBvcy0+aGl0ID0gdHJ1ZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1hY2hpbmVfX2hpdF9hbGxfZHNvcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gX19kc29zX19oaXRfYWxsKCZtYWNoaW5lLT5rZXJuZWxfZHNvcy5oZWFkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIF9fZHNvc19faGl0X2FsbCgmbWFjaGluZS0+dXNlcl9kc29zLmhlYWQpOwotfQotCi1pbnQgZHNvc19faGl0X2FsbChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQotewotCXN0cnVjdCByYl9ub2RlICpuZDsKLQlpbnQgZXJyOwotCi0JZXJyID0gbWFjaGluZV9faGl0X2FsbF9kc29zKCZzZXNzaW9uLT5tYWNoaW5lcy5ob3N0KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZm9yIChuZCA9IHJiX2ZpcnN0KCZzZXNzaW9uLT5tYWNoaW5lcy5ndWVzdHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewotCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKLQotCQllcnIgPSBtYWNoaW5lX19oaXRfYWxsX2Rzb3MocG9zKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCi0JCQkJICAgICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJCSAgICAgICBwaWRfdCBwaWQsIHUxNiBtaXNjLCBpbnQgZmQpCi17Ci0JY2hhciBubVtQQVRIX01BWF07Ci0Jc3RydWN0IGRzbyAqcG9zOwotCi0JZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpIHsKLQkJaW50IGVycjsKLQkJY29uc3QgY2hhciAqbmFtZTsKLQkJc2l6ZV90IG5hbWVfbGVuOwotCi0JCWlmICghcG9zLT5oaXQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZHNvX19pc192ZHNvKHBvcykpIHsKLQkJCW5hbWUgPSBwb3MtPnNob3J0X25hbWU7Ci0JCQluYW1lX2xlbiA9IHBvcy0+c2hvcnRfbmFtZV9sZW4gKyAxOwotCQl9IGVsc2UgaWYgKGRzb19faXNfa2NvcmUocG9zKSkgewotCQkJbWFjaGluZV9fbW1hcF9uYW1lKG1hY2hpbmUsIG5tLCBzaXplb2Yobm0pKTsKLQkJCW5hbWUgPSBubTsKLQkJCW5hbWVfbGVuID0gc3RybGVuKG5tKSArIDE7Ci0JCX0gZWxzZSB7Ci0JCQluYW1lID0gcG9zLT5sb25nX25hbWU7Ci0JCQluYW1lX2xlbiA9IHBvcy0+bG9uZ19uYW1lX2xlbiArIDE7Ci0JCX0KLQotCQllcnIgPSB3cml0ZV9idWlsZGlkKG5hbWUsIG5hbWVfbGVuLCBwb3MtPmJ1aWxkX2lkLAotCQkJCSAgICBwaWQsIG1pc2MsIGZkKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWFjaGluZV9fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgaW50IGZkKQotewotCWludCBlcnI7Ci0JdTE2IGttaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwsCi0JICAgIHVtaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOwotCi0JaWYgKCFtYWNoaW5lX19pc19ob3N0KG1hY2hpbmUpKSB7Ci0JCWttaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUw7Ci0JCXVtaXNjID0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9VU0VSOwotCX0KLQotCWVyciA9IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZSgmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCwgbWFjaGluZSwKLQkJCQkJICBtYWNoaW5lLT5waWQsIGttaXNjLCBmZCk7Ci0JaWYgKGVyciA9PSAwKQotCQllcnIgPSBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoJm1hY2hpbmUtPnVzZXJfZHNvcy5oZWFkLAotCQkJCQkJICBtYWNoaW5lLCBtYWNoaW5lLT5waWQsIHVtaXNjLAotCQkJCQkJICBmZCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBkc29zX193cml0ZV9idWlsZGlkX3RhYmxlKHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyLCBpbnQgZmQpCi17Ci0Jc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbnRhaW5lcl9vZihoZWFkZXIsCi0JCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uLCBoZWFkZXIpOwotCXN0cnVjdCByYl9ub2RlICpuZDsKLQlpbnQgZXJyID0gbWFjaGluZV9fd3JpdGVfYnVpbGRpZF90YWJsZSgmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCwgZmQpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKLQkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7Ci0JCWVyciA9IG1hY2hpbmVfX3dyaXRlX2J1aWxkaWRfdGFibGUocG9zLCBmZCk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyLAotCQkJICBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX2thbGxzeW1zLCBib29sIGlzX3Zkc28pCi17Ci0JY29uc3Qgc2l6ZV90IHNpemUgPSBQQVRIX01BWDsKLQljaGFyICpyZWFsbmFtZSwgKmZpbGVuYW1lID0gemFsbG9jKHNpemUpLAotCSAgICAgKmxpbmtuYW1lID0gemFsbG9jKHNpemUpLCAqdGFyZ2V0bmFtZTsKLQlpbnQgbGVuLCBlcnIgPSAtMTsKLQlib29sIHNsYXNoID0gaXNfa2FsbHN5bXMgfHwgaXNfdmRzbzsKLQotCWlmIChpc19rYWxsc3ltcykgewotCQlpZiAoc3ltYm9sX2NvbmYua3B0cl9yZXN0cmljdCkgewotCQkJcHJfZGVidWcoIk5vdCBjYWNoaW5nIGEga3B0cl9yZXN0cmljdCdlZCAvcHJvYy9rYWxsc3ltc1xuIik7Ci0JCQllcnIgPSAwOwotCQkJZ290byBvdXRfZnJlZTsKLQkJfQotCQlyZWFsbmFtZSA9IChjaGFyICopIG5hbWU7Ci0JfSBlbHNlCi0JCXJlYWxuYW1lID0gcmVhbHBhdGgobmFtZSwgTlVMTCk7Ci0KLQlpZiAocmVhbG5hbWUgPT0gTlVMTCB8fCBmaWxlbmFtZSA9PSBOVUxMIHx8IGxpbmtuYW1lID09IE5VTEwpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlsZW4gPSBzY25wcmludGYoZmlsZW5hbWUsIHNpemUsICIlcyVzJXMiLAotCQkgICAgICAgZGVidWdkaXIsIHNsYXNoID8gIi8iIDogIiIsCi0JCSAgICAgICBpc192ZHNvID8gRFNPX19OQU1FX1ZEU08gOiByZWFsbmFtZSk7Ci0JaWYgKG1rZGlyX3AoZmlsZW5hbWUsIDA3NTUpKQotCQlnb3RvIG91dF9mcmVlOwotCi0Jc25wcmludGYoZmlsZW5hbWUgKyBsZW4sIHNpemUgLSBsZW4sICIvJXMiLCBzYnVpbGRfaWQpOwotCi0JaWYgKGFjY2VzcyhmaWxlbmFtZSwgRl9PSykpIHsKLQkJaWYgKGlzX2thbGxzeW1zKSB7Ci0JCQkgaWYgKGNvcHlmaWxlKCIvcHJvYy9rYWxsc3ltcyIsIGZpbGVuYW1lKSkKLQkJCQlnb3RvIG91dF9mcmVlOwotCQl9IGVsc2UgaWYgKGxpbmsocmVhbG5hbWUsIGZpbGVuYW1lKSAmJiBjb3B5ZmlsZShuYW1lLCBmaWxlbmFtZSkpCi0JCQlnb3RvIG91dF9mcmVlOwotCX0KLQotCWxlbiA9IHNjbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzIiwKLQkJICAgICAgIGRlYnVnZGlyLCBzYnVpbGRfaWQpOwotCi0JaWYgKGFjY2VzcyhsaW5rbmFtZSwgWF9PSykgJiYgbWtkaXJfcChsaW5rbmFtZSwgMDc1NSkpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlzbnByaW50ZihsaW5rbmFtZSArIGxlbiwgc2l6ZSAtIGxlbiwgIi8lcyIsIHNidWlsZF9pZCArIDIpOwotCXRhcmdldG5hbWUgPSBmaWxlbmFtZSArIHN0cmxlbihkZWJ1Z2RpcikgLSA1OwotCW1lbWNweSh0YXJnZXRuYW1lLCAiLi4vLi4iLCA1KTsKLQotCWlmIChzeW1saW5rKHRhcmdldG5hbWUsIGxpbmtuYW1lKSA9PSAwKQotCQllcnIgPSAwOwotb3V0X2ZyZWU6Ci0JaWYgKCFpc19rYWxsc3ltcykKLQkJZnJlZShyZWFsbmFtZSk7Ci0JZnJlZShmaWxlbmFtZSk7Ci0JZnJlZShsaW5rbmFtZSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBidWlsZF9pZF9jYWNoZV9fYWRkX2IoY29uc3QgdTggKmJ1aWxkX2lkLCBzaXplX3QgYnVpbGRfaWRfc2l6ZSwKLQkJCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVidWdkaXIsCi0JCQkJIGJvb2wgaXNfa2FsbHN5bXMsIGJvb2wgaXNfdmRzbykKLXsKLQljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwotCi0JYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIGJ1aWxkX2lkX3NpemUsIHNidWlsZF9pZCk7Ci0KLQlyZXR1cm4gYnVpbGRfaWRfY2FjaGVfX2FkZF9zKHNidWlsZF9pZCwgZGVidWdkaXIsIG5hbWUsCi0JCQkJICAgICBpc19rYWxsc3ltcywgaXNfdmRzbyk7Ci19Ci0KLWludCBidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX3MoY29uc3QgY2hhciAqc2J1aWxkX2lkLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKLXsKLQljb25zdCBzaXplX3Qgc2l6ZSA9IFBBVEhfTUFYOwotCWNoYXIgKmZpbGVuYW1lID0gemFsbG9jKHNpemUpLAotCSAgICAgKmxpbmtuYW1lID0gemFsbG9jKHNpemUpOwotCWludCBlcnIgPSAtMTsKLQotCWlmIChmaWxlbmFtZSA9PSBOVUxMIHx8IGxpbmtuYW1lID09IE5VTEwpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlzbnByaW50ZihsaW5rbmFtZSwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzLyVzIiwKLQkJIGRlYnVnZGlyLCBzYnVpbGRfaWQsIHNidWlsZF9pZCArIDIpOwotCi0JaWYgKGFjY2VzcyhsaW5rbmFtZSwgRl9PSykpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlpZiAocmVhZGxpbmsobGlua25hbWUsIGZpbGVuYW1lLCBzaXplIC0gMSkgPCAwKQotCQlnb3RvIG91dF9mcmVlOwotCi0JaWYgKHVubGluayhsaW5rbmFtZSkpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQkvKgotCSAqIFNpbmNlIHRoZSBsaW5rIGlzIHJlbGF0aXZlLCB3ZSBtdXN0IG1ha2UgaXQgYWJzb2x1dGU6Ci0JICovCi0Jc25wcmludGYobGlua25hbWUsIHNpemUsICIlcy8uYnVpbGQtaWQvJS4ycy8lcyIsCi0JCSBkZWJ1Z2Rpciwgc2J1aWxkX2lkLCBmaWxlbmFtZSk7Ci0KLQlpZiAodW5saW5rKGxpbmtuYW1lKSkKLQkJZ290byBvdXRfZnJlZTsKLQotCWVyciA9IDA7Ci1vdXRfZnJlZToKLQlmcmVlKGZpbGVuYW1lKTsKLQlmcmVlKGxpbmtuYW1lKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGRzb19fY2FjaGVfYnVpbGRfaWQoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKLQkJCSAgICAgICBjb25zdCBjaGFyICpkZWJ1Z2RpcikKLXsKLQlib29sIGlzX2thbGxzeW1zID0gZHNvLT5rZXJuZWwgJiYgZHNvLT5sb25nX25hbWVbMF0gIT0gJy8nOwotCWJvb2wgaXNfdmRzbyA9IGRzb19faXNfdmRzbyhkc28pOwotCWNvbnN0IGNoYXIgKm5hbWUgPSBkc28tPmxvbmdfbmFtZTsKLQljaGFyIG5tW1BBVEhfTUFYXTsKLQotCWlmIChkc29fX2lzX2tjb3JlKGRzbykpIHsKLQkJaXNfa2FsbHN5bXMgPSB0cnVlOwotCQltYWNoaW5lX19tbWFwX25hbWUobWFjaGluZSwgbm0sIHNpemVvZihubSkpOwotCQluYW1lID0gbm07Ci0JfQotCXJldHVybiBidWlsZF9pZF9jYWNoZV9fYWRkX2IoZHNvLT5idWlsZF9pZCwgc2l6ZW9mKGRzby0+YnVpbGRfaWQpLCBuYW1lLAotCQkJCSAgICAgZGVidWdkaXIsIGlzX2thbGxzeW1zLCBpc192ZHNvKTsKLX0KLQotc3RhdGljIGludCBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAotCQkJCSAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKLXsKLQlzdHJ1Y3QgZHNvICpwb3M7Ci0JaW50IGVyciA9IDA7Ci0KLQlkc29zX19mb3JfZWFjaF93aXRoX2J1aWxkX2lkKHBvcywgaGVhZCkKLQkJaWYgKGRzb19fY2FjaGVfYnVpbGRfaWQocG9zLCBtYWNoaW5lLCBkZWJ1Z2RpcikpCi0JCQllcnIgPSAtMTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgbWFjaGluZV9fY2FjaGVfYnVpbGRfaWRzKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKLXsKLQlpbnQgcmV0ID0gX19kc29zX19jYWNoZV9idWlsZF9pZHMoJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQsIG1hY2hpbmUsCi0JCQkJCSAgZGVidWdkaXIpOwotCXJldCB8PSBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcygmbWFjaGluZS0+dXNlcl9kc29zLmhlYWQsIG1hY2hpbmUsCi0JCQkJICAgICAgIGRlYnVnZGlyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fY2FjaGVfYnVpbGRfaWRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0Jc3RydWN0IHJiX25vZGUgKm5kOwotCWludCByZXQ7Ci0JY2hhciBkZWJ1Z2RpcltQQVRIX01BWF07Ci0KLQlzbnByaW50ZihkZWJ1Z2Rpciwgc2l6ZW9mKGRlYnVnZGlyKSwgIiVzIiwgYnVpbGRpZF9kaXIpOwotCi0JaWYgKG1rZGlyKGRlYnVnZGlyLCAwNzU1KSAhPSAwICYmIGVycm5vICE9IEVFWElTVCkKLQkJcmV0dXJuIC0xOwotCi0JcmV0ID0gbWFjaGluZV9fY2FjaGVfYnVpbGRfaWRzKCZzZXNzaW9uLT5tYWNoaW5lcy5ob3N0LCBkZWJ1Z2Rpcik7Ci0KLQlmb3IgKG5kID0gcmJfZmlyc3QoJnNlc3Npb24tPm1hY2hpbmVzLmd1ZXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7Ci0JCXN0cnVjdCBtYWNoaW5lICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IG1hY2hpbmUsIHJiX25vZGUpOwotCQlyZXQgfD0gbWFjaGluZV9fY2FjaGVfYnVpbGRfaWRzKHBvcywgZGVidWdkaXIpOwotCX0KLQlyZXR1cm4gcmV0ID8gLTEgOiAwOwotfQotCi1zdGF0aWMgYm9vbCBtYWNoaW5lX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgYm9vbCB3aXRoX2hpdHMpCi17Ci0JYm9vbCByZXQ7Ci0KLQlyZXQgID0gX19kc29zX19yZWFkX2J1aWxkX2lkcygmbWFjaGluZS0+a2VybmVsX2Rzb3MuaGVhZCwgd2l0aF9oaXRzKTsKLQlyZXQgfD0gX19kc29zX19yZWFkX2J1aWxkX2lkcygmbWFjaGluZS0+dXNlcl9kc29zLmhlYWQsIHdpdGhfaGl0cyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGJvb2wgcGVyZl9zZXNzaW9uX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBib29sIHdpdGhfaGl0cykKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmQ7Ci0JYm9vbCByZXQgPSBtYWNoaW5lX19yZWFkX2J1aWxkX2lkcygmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdCwgd2l0aF9oaXRzKTsKLQotCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+bWFjaGluZXMuZ3Vlc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKLQkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFjaGluZSwgcmJfbm9kZSk7Ci0JCXJldCB8PSBtYWNoaW5lX19yZWFkX2J1aWxkX2lkcyhwb3MsIHdpdGhfaGl0cyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCB3cml0ZV90cmFjaW5nX2RhdGEoaW50IGZkLCBzdHJ1Y3QgcGVyZl9oZWFkZXIgKmggX19tYXliZV91bnVzZWQsCiAJCQkgICAgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCiB7CkBAIC01MjMsMTMgKzE4NCwxMiBAQAogCWlmICghcGVyZl9zZXNzaW9uX19yZWFkX2J1aWxkX2lkcyhzZXNzaW9uLCB0cnVlKSkKIAkJcmV0dXJuIC0xOwogCi0JZXJyID0gZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShoLCBmZCk7CisJZXJyID0gcGVyZl9zZXNzaW9uX193cml0ZV9idWlsZGlkX3RhYmxlKHNlc3Npb24sIGZkKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHdyaXRlIGJ1aWxkaWQgdGFibGVcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlpZiAoIW5vX2J1aWxkaWRfY2FjaGUpCi0JCXBlcmZfc2Vzc2lvbl9fY2FjaGVfYnVpbGRfaWRzKHNlc3Npb24pOworCXBlcmZfc2Vzc2lvbl9fY2FjaGVfYnVpbGRfaWRzKHNlc3Npb24pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MDEsOCArMjYxLDEwIEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJcmV0ID0gLTE7CiAJCWdvdG8gZG9uZTsKKwl9CiAKIAlzID0gYnVmOwogCkBAIC05NjUsNyArNjI3LDggQEAKIAkJbiA9IHNzY2FuZihidWYsICIlKnMgJSJQUkl1NjQsICZtZW0pOwogCQlpZiAobiA9PSAxKQogCQkJcmV0ID0gZG9fd3JpdGUoZmQsICZtZW0sIHNpemVvZihtZW0pKTsKLQl9CisJfSBlbHNlCisJCXJldCA9IC0xOwogCWZyZWUoYnVmKTsKIAlmY2xvc2UoZnApOwogCXJldHVybiByZXQ7CkBAIC0xNjAzLDcgKzEyNjYsNyBAQAogCiAJCWRzb19fc2V0X2J1aWxkX2lkKGRzbywgJmJldi0+YnVpbGRfaWQpOwogCi0JCWlmIChmaWxlbmFtZVswXSA9PSAnWycpCisJCWlmICghaXNfa2VybmVsX21vZHVsZShmaWxlbmFtZSwgTlVMTCkpCiAJCQlkc28tPmtlcm5lbCA9IGRzb190eXBlOwogCiAJCWJ1aWxkX2lkX19zcHJpbnRmKGRzby0+YnVpbGRfaWQsIHNpemVvZihkc28tPmJ1aWxkX2lkKSwKQEAgLTI0NzcsNiArMjE0MCw3IEBACiAJWzFdID0gUEVSRl9BVFRSX1NJWkVfVkVSMSwKIAlbMl0gPSBQRVJGX0FUVFJfU0laRV9WRVIyLAogCVszXSA9IFBFUkZfQVRUUl9TSVpFX1ZFUjMsCisJWzRdID0gUEVSRl9BVFRSX1NJWkVfVkVSNCwKIAkwLAogfTsKIApAQCAtMzEyNCw4ICsyNzg4LDMgQEAKIAkJCQkgc2Vzc2lvbik7CiAJcmV0dXJuIDA7CiB9Ci0KLXZvaWQgZGlzYWJsZV9idWlsZGlkX2NhY2hlKHZvaWQpCi17Ci0Jbm9fYnVpbGRpZF9jYWNoZSA9IHRydWU7Ci19CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmggYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKaW5kZXggOGY1Y2JhZS4uM2JiOTBhYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaApAQCAtMTIyLDEwICsxMjIsNiBAQAogCiBpbnQgcGVyZl9oZWFkZXJfX2ZwcmludGZfaW5mbyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzLCBGSUxFICpmcCwgYm9vbCBmdWxsKTsKIAotaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyLAotCQkJICBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX2thbGxzeW1zLCBib29sIGlzX3Zkc28pOwotaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKTsKLQogaW50IHBlcmZfZXZlbnRfX3N5bnRoZXNpemVfYXR0cihzdHJ1Y3QgcGVyZl90b29sICp0b29sLAogCQkJCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsIHUzMiBpZHMsIHU2NCAqaWQsCiAJCQkJcGVyZl9ldmVudF9faGFuZGxlcl90IHByb2Nlc3MpOwpAQCAtMTUxLDcgKzE0Nyw5IEBACiAJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogYm9vbCBpc19wZXJmX21hZ2ljKHU2NCBtYWdpYyk7CiAKLWludCBkc29zX19oaXRfYWxsKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworI2RlZmluZSBOQU1FX0FMSUdOIDY0CisKK2ludCB3cml0ZV9wYWRkZWQoaW50IGZkLCBjb25zdCB2b2lkICpiZiwgc2l6ZV90IGNvdW50LCBzaXplX3QgY291bnRfYWxpZ25lZCk7CiAKIC8qCiAgKiBhcmNoIHNwZWNpZmljIGNhbGxiYWNrCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRtYXAuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCmluZGV4IDAxZmZkMTIuLjQwYmQyMTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCkBAIC00Niw0ICs0NiwyMSBAQAogCQlfX2JpdG1hcF9vcihkc3QsIHNyYzEsIHNyYzIsIG5iaXRzKTsKIH0KIAorLyoqCisgKiB0ZXN0X2FuZF9zZXRfYml0IC0gU2V0IGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gc2V0CisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVF9NQVNLKG5yKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRfV09SRChucik7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisKKwlvbGQgPSAqcDsKKwkqcCA9IG9sZCB8IG1hc2s7CisKKwlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7Cit9CisKICNlbmRpZiAvKiBfUEVSRl9CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaAppbmRleCBkYWRmYTdlLi5jMzI5NDE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaApAQCAtMTUsNiArMTUsOCBAQAogI2RlZmluZSBCSVRTX1RPX1U2NChucikgICAgICAgICBESVZfUk9VTkRfVVAobnIsIEJJVFNfUEVSX0JZVEUgKiBzaXplb2YodTY0KSkKICNkZWZpbmUgQklUU19UT19VMzIobnIpICAgICAgICAgRElWX1JPVU5EX1VQKG5yLCBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHUzMikpCiAjZGVmaW5lIEJJVFNfVE9fQllURVMobnIpICAgICAgIERJVl9ST1VORF9VUChuciwgQklUU19QRVJfQllURSkKKyNkZWZpbmUgQklUX1dPUkQobnIpICAgICAgICAgICAgKChucikgLyBCSVRTX1BFUl9MT05HKQorI2RlZmluZSBCSVRfTUFTSyhucikgICAgICAgICAgICAoMVVMIDw8ICgobnIpICUgQklUU19QRVJfTE9ORykpCiAKICNkZWZpbmUgZm9yX2VhY2hfc2V0X2JpdChiaXQsIGFkZHIsIHNpemUpIFwKIAlmb3IgKChiaXQpID0gZmluZF9maXJzdF9iaXQoKGFkZHIpLCAoc2l6ZSkpOwkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmMKaW5kZXggMzRmYzdjOC4uMTVkZDBhOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuYworKysgYi90b29scy9wZXJmL3V0aWwvbWFjaGluZS5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUgPHN5bWJvbC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgInVud2luZC5oIgorI2luY2x1ZGUgImxpbnV4L2hhc2guaCIKIAogc3RhdGljIHZvaWQgZHNvc19faW5pdChzdHJ1Y3QgZHNvcyAqZHNvcykKIHsKQEAgLTIxLDcgKzIyLDcgQEAKIAogaW50IG1hY2hpbmVfX2luaXQoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGNvbnN0IGNoYXIgKnJvb3RfZGlyLCBwaWRfdCBwaWQpCiB7Ci0JbWFwX2dyb3Vwc19faW5pdCgmbWFjaGluZS0+a21hcHMpOworCW1hcF9ncm91cHNfX2luaXQoJm1hY2hpbmUtPmttYXBzLCBtYWNoaW5lKTsKIAlSQl9DTEVBUl9OT0RFKCZtYWNoaW5lLT5yYl9ub2RlKTsKIAlkc29zX19pbml0KCZtYWNoaW5lLT51c2VyX2Rzb3MpOwogCWRzb3NfX2luaXQoJm1hY2hpbmUtPmtlcm5lbF9kc29zKTsKQEAgLTMyLDcgKzMzLDYgQEAKIAogCW1hY2hpbmUtPnZkc29faW5mbyA9IE5VTEw7CiAKLQltYWNoaW5lLT5rbWFwcy5tYWNoaW5lID0gbWFjaGluZTsKIAltYWNoaW5lLT5waWQgPSBwaWQ7CiAKIAltYWNoaW5lLT5zeW1ib2xfZmlsdGVyID0gTlVMTDsKQEAgLTMxOSw3ICszMTksNyBAQAogCQlnb3RvIG91dF9lcnI7CiAKIAlpZiAoIWxlYWRlci0+bWcpCi0JCWxlYWRlci0+bWcgPSBtYXBfZ3JvdXBzX19uZXcoKTsKKwkJbGVhZGVyLT5tZyA9IG1hcF9ncm91cHNfX25ldyhtYWNoaW5lKTsKIAogCWlmICghbGVhZGVyLT5tZykKIAkJZ290byBvdXRfZXJyOwpAQCAtNDY1LDYgKzQ2NSw3IEBACiB7CiAJc3RydWN0IG1hcCAqbWFwOwogCXN0cnVjdCBkc28gKmRzbyA9IF9fZHNvc19fZmluZG5ldygmbWFjaGluZS0+a2VybmVsX2Rzb3MsIGZpbGVuYW1lKTsKKwlib29sIGNvbXByZXNzZWQ7CiAKIAlpZiAoZHNvID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtNDc3LDYgKzQ3OCwxMSBAQAogCQlkc28tPnN5bXRhYl90eXBlID0gRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFOwogCWVsc2UKIAkJZHNvLT5zeW10YWJfdHlwZSA9IERTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRTsKKworCS8qIF9LTU9EVUxFX0NPTVAgc2hvdWxkIGJlIG5leHQgdG8gX0tNT0RVTEUgKi8KKwlpZiAoaXNfa2VybmVsX21vZHVsZShmaWxlbmFtZSwgJmNvbXByZXNzZWQpICYmIGNvbXByZXNzZWQpCisJCWRzby0+c3ltdGFiX3R5cGUrKzsKKwogCW1hcF9ncm91cHNfX2luc2VydCgmbWFjaGluZS0+a21hcHMsIG1hcCk7CiAJcmV0dXJuIG1hcDsKIH0KQEAgLTg2Miw4ICs4NjgsMTQgQEAKIAkJCXN0cnVjdCBtYXAgKm1hcDsKIAkJCWNoYXIgKmxvbmdfbmFtZTsKIAotCQkJaWYgKGRvdCA9PSBOVUxMIHx8IHN0cmNtcChkb3QsICIua28iKSkKKwkJCWlmIChkb3QgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKKworCQkJLyogT24gc29tZSBzeXN0ZW0sIG1vZHVsZXMgYXJlIGNvbXByZXNzZWQgbGlrZSAua28uZ3ogKi8KKwkJCWlmIChpc19zdXBwb3J0ZWRfY29tcHJlc3Npb24oZG90ICsgMSkgJiYKKwkJCSAgICBpc19rbW9kdWxlX2V4dGVuc2lvbihkb3QgLSAyKSkKKwkJCQlkb3QgLT0gMzsKKwogCQkJc25wcmludGYoZHNvX25hbWUsIHNpemVvZihkc29fbmFtZSksICJbJS4qc10iLAogCQkJCSAoaW50KShkb3QgLSBkZW50LT5kX25hbWUpLCBkZW50LT5kX25hbWUpOwogCkBAIC0xMDQ1LDYgKzEwNTcsMTEgQEAKIAkJCWRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKIAkJCWlmIChkb3QgPT0gTlVMTCkKIAkJCQlnb3RvIG91dF9wcm9ibGVtOworCQkJLyogT24gc29tZSBzeXN0ZW0sIG1vZHVsZXMgYXJlIGNvbXByZXNzZWQgbGlrZSAua28uZ3ogKi8KKwkJCWlmIChpc19zdXBwb3J0ZWRfY29tcHJlc3Npb24oZG90ICsgMSkpCisJCQkJZG90IC09IDM7CisJCQlpZiAoIWlzX2ttb2R1bGVfZXh0ZW5zaW9uKGRvdCArIDEpKQorCQkJCWdvdG8gb3V0X3Byb2JsZW07CiAJCQlzbnByaW50ZihzaG9ydF9tb2R1bGVfbmFtZSwgc2l6ZW9mKHNob3J0X21vZHVsZV9uYW1lKSwKIAkJCQkJIlslLipzXSIsIChpbnQpKGRvdCAtIG5hbWUpLCBuYW1lKTsKIAkJCXN0cnhmcmNoYXIoc2hvcnRfbW9kdWxlX25hbWUsICctJywgJ18nKTsKQEAgLTEwNjksOCArMTA4NiwyMCBAQAogCQkgKiBTaG91bGQgYmUgdGhlcmUgYWxyZWFkeSwgZnJvbSB0aGUgYnVpbGQtaWQgdGFibGUgaW4KIAkJICogdGhlIGhlYWRlci4KIAkJICovCi0JCXN0cnVjdCBkc28gKmtlcm5lbCA9IF9fZHNvc19fZmluZG5ldygmbWFjaGluZS0+a2VybmVsX2Rzb3MsCi0JCQkJCQkgICAgIGttbWFwX3ByZWZpeCk7CisJCXN0cnVjdCBkc28gKmtlcm5lbCA9IE5VTEw7CisJCXN0cnVjdCBkc28gKmRzbzsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRzbywgJm1hY2hpbmUtPmtlcm5lbF9kc29zLmhlYWQsIG5vZGUpIHsKKwkJCWlmIChpc19rZXJuZWxfbW9kdWxlKGRzby0+bG9uZ19uYW1lLCBOVUxMKSkKKwkJCQljb250aW51ZTsKKworCQkJa2VybmVsID0gZHNvOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoa2VybmVsID09IE5VTEwpCisJCQlrZXJuZWwgPSBfX2Rzb3NfX2ZpbmRuZXcoJm1hY2hpbmUtPmtlcm5lbF9kc29zLAorCQkJCQkJIGttbWFwX3ByZWZpeCk7CiAJCWlmIChrZXJuZWwgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X3Byb2JsZW07CiAKQEAgLTEwNzgsNiArMTEwNyw5IEBACiAJCWlmIChfX21hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhtYWNoaW5lLCBrZXJuZWwpIDwgMCkKIAkJCWdvdG8gb3V0X3Byb2JsZW07CiAKKwkJaWYgKHN0cnN0cihrZXJuZWwtPmxvbmdfbmFtZSwgInZtbGludXgiKSkKKwkJCWRzb19fc2V0X3Nob3J0X25hbWUoa2VybmVsLCAiW2tlcm5lbC52bWxpbnV4XSIsIGZhbHNlKTsKKwogCQltYWNoaW5lX19zZXRfa2VybmVsX21tYXBfbGVuKG1hY2hpbmUsIGV2ZW50KTsKIAogCQkvKgpAQCAtMTI5MCw3ICsxMzIyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXBfX3Jlc29sdmVfYW1zKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCitzdGF0aWMgdm9pZCBpcF9fcmVzb2x2ZV9hbXMoc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJICAgIHN0cnVjdCBhZGRyX21hcF9zeW1ib2wgKmFtcywKIAkJCSAgICB1NjQgaXApCiB7CkBAIC0xMzA0LDcgKzEzMzYsNyBAQAogCSAqIFRodXMsIHdlIGhhdmUgdG8gdHJ5IGNvbnNlY3V0aXZlbHkgdW50aWwgd2UgZmluZCBhIG1hdGNoCiAJICogb3IgZWxzZSwgdGhlIHN5bWJvbCBpcyB1bmtub3duCiAJICovCi0JdGhyZWFkX19maW5kX2NwdW1vZGVfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG1hY2hpbmUsIE1BUF9fRlVOQ1RJT04sIGlwLCAmYWwpOworCXRocmVhZF9fZmluZF9jcHVtb2RlX2FkZHJfbG9jYXRpb24odGhyZWFkLCBNQVBfX0ZVTkNUSU9OLCBpcCwgJmFsKTsKIAogCWFtcy0+YWRkciA9IGlwOwogCWFtcy0+YWxfYWRkciA9IGFsLmFkZHI7CkBAIC0xMzEyLDIzICsxMzQ0LDIxIEBACiAJYW1zLT5tYXAgPSBhbC5tYXA7CiB9CiAKLXN0YXRpYyB2b2lkIGlwX19yZXNvbHZlX2RhdGEoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKK3N0YXRpYyB2b2lkIGlwX19yZXNvbHZlX2RhdGEoc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJICAgICB1OCBtLCBzdHJ1Y3QgYWRkcl9tYXBfc3ltYm9sICphbXMsIHU2NCBhZGRyKQogewogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCiAJbWVtc2V0KCZhbCwgMCwgc2l6ZW9mKGFsKSk7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG1hY2hpbmUsIG0sIE1BUF9fVkFSSUFCTEUsIGFkZHIsCi0JCQkJICAgJmFsKTsKKwl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG0sIE1BUF9fVkFSSUFCTEUsIGFkZHIsICZhbCk7CiAJaWYgKGFsLm1hcCA9PSBOVUxMKSB7CiAJCS8qCiAJCSAqIHNvbWUgc2hhcmVkIGRhdGEgcmVnaW9ucyBoYXZlIGV4ZWN1dGUgYml0IHNldCB3aGljaCBwdXRzCiAJCSAqIHRoZWlyIG1hcHBpbmcgaW4gdGhlIE1BUF9fRlVOQ1RJT04gdHlwZSBhcnJheS4KIAkJICogQ2hlY2sgdGhlcmUgYXMgYSBmYWxsYmFjayBvcHRpb24gYmVmb3JlIGRyb3BwaW5nIHRoZSBzYW1wbGUuCiAJCSAqLwotCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG1hY2hpbmUsIG0sIE1BUF9fRlVOQ1RJT04sIGFkZHIsCi0JCQkJCSAgICZhbCk7CisJCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgbSwgTUFQX19GVU5DVElPTiwgYWRkciwgJmFsKTsKIAl9CiAKIAlhbXMtPmFkZHIgPSBhZGRyOwpAQCAtMTM0NSwxNCArMTM3NSw0NSBAQAogCWlmICghbWkpCiAJCXJldHVybiBOVUxMOwogCi0JaXBfX3Jlc29sdmVfYW1zKGFsLT5tYWNoaW5lLCBhbC0+dGhyZWFkLCAmbWktPmlhZGRyLCBzYW1wbGUtPmlwKTsKLQlpcF9fcmVzb2x2ZV9kYXRhKGFsLT5tYWNoaW5lLCBhbC0+dGhyZWFkLCBhbC0+Y3B1bW9kZSwKLQkJCSAmbWktPmRhZGRyLCBzYW1wbGUtPmFkZHIpOworCWlwX19yZXNvbHZlX2FtcyhhbC0+dGhyZWFkLCAmbWktPmlhZGRyLCBzYW1wbGUtPmlwKTsKKwlpcF9fcmVzb2x2ZV9kYXRhKGFsLT50aHJlYWQsIGFsLT5jcHVtb2RlLCAmbWktPmRhZGRyLCBzYW1wbGUtPmFkZHIpOwogCW1pLT5kYXRhX3NyYy52YWwgPSBzYW1wbGUtPmRhdGFfc3JjOwogCiAJcmV0dXJuIG1pOwogfQogCitzdGF0aWMgaW50IGFkZF9jYWxsY2hhaW5faXAoc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJICAgIHN0cnVjdCBzeW1ib2wgKipwYXJlbnQsCisJCQkgICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKnJvb3RfYWwsCisJCQkgICAgaW50IGNwdW1vZGUsCisJCQkgICAgdTY0IGlwKQoreworCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOworCisJYWwuZmlsdGVyZWQgPSAwOworCWFsLnN5bSA9IE5VTEw7CisJaWYgKGNwdW1vZGUgPT0gLTEpCisJCXRocmVhZF9fZmluZF9jcHVtb2RlX2FkZHJfbG9jYXRpb24odGhyZWFkLCBNQVBfX0ZVTkNUSU9OLAorCQkJCQkJICAgaXAsICZhbCk7CisJZWxzZQorCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sCisJCQkJICAgaXAsICZhbCk7CisJaWYgKGFsLnN5bSAhPSBOVUxMKSB7CisJCWlmIChzb3J0X19oYXNfcGFyZW50ICYmICEqcGFyZW50ICYmCisJCSAgICBzeW1ib2xfX21hdGNoX3JlZ2V4KGFsLnN5bSwgJnBhcmVudF9yZWdleCkpCisJCQkqcGFyZW50ID0gYWwuc3ltOworCQllbHNlIGlmIChoYXZlX2lnbm9yZV9jYWxsZWVzICYmIHJvb3RfYWwgJiYKKwkJICBzeW1ib2xfX21hdGNoX3JlZ2V4KGFsLnN5bSwgJmlnbm9yZV9jYWxsZWVzX3JlZ2V4KSkgeworCQkJLyogVHJlYXQgdGhpcyBzeW1ib2wgYXMgdGhlIHJvb3QsCisJCQkgICBmb3JnZXR0aW5nIGl0cyBjYWxsZWVzLiAqLworCQkJKnJvb3RfYWwgPSBhbDsKKwkJCWNhbGxjaGFpbl9jdXJzb3JfcmVzZXQoJmNhbGxjaGFpbl9jdXJzb3IpOworCQl9CisJfQorCisJcmV0dXJuIGNhbGxjaGFpbl9jdXJzb3JfYXBwZW5kKCZjYWxsY2hhaW5fY3Vyc29yLCBhbC5hZGRyLCBhbC5tYXAsIGFsLnN5bSk7Cit9CisKIHN0cnVjdCBicmFuY2hfaW5mbyAqc2FtcGxlX19yZXNvbHZlX2JzdGFjayhzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKIAkJCQkJICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKQogewpAQCAtMTM2NCwxNiArMTQyNSw1NyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBicy0+bnI7IGkrKykgewotCQlpcF9fcmVzb2x2ZV9hbXMoYWwtPm1hY2hpbmUsIGFsLT50aHJlYWQsICZiaVtpXS50bywgYnMtPmVudHJpZXNbaV0udG8pOwotCQlpcF9fcmVzb2x2ZV9hbXMoYWwtPm1hY2hpbmUsIGFsLT50aHJlYWQsICZiaVtpXS5mcm9tLCBicy0+ZW50cmllc1tpXS5mcm9tKTsKKwkJaXBfX3Jlc29sdmVfYW1zKGFsLT50aHJlYWQsICZiaVtpXS50bywgYnMtPmVudHJpZXNbaV0udG8pOworCQlpcF9fcmVzb2x2ZV9hbXMoYWwtPnRocmVhZCwgJmJpW2ldLmZyb20sIGJzLT5lbnRyaWVzW2ldLmZyb20pOwogCQliaVtpXS5mbGFncyA9IGJzLT5lbnRyaWVzW2ldLmZsYWdzOwogCX0KIAlyZXR1cm4gYmk7CiB9CiAKLXN0YXRpYyBpbnQgbWFjaGluZV9fcmVzb2x2ZV9jYWxsY2hhaW5fc2FtcGxlKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJCQkgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKyNkZWZpbmUgQ0hBU0hTWiAxMjcKKyNkZWZpbmUgQ0hBU0hCSVRTIDcKKyNkZWZpbmUgTk9fRU5UUlkgMHhmZgorCisjZGVmaW5lIFBFUkZfTUFYX0JSQU5DSF9ERVBUSCAxMjcKKworLyogUmVtb3ZlIGxvb3BzLiAqLworc3RhdGljIGludCByZW1vdmVfbG9vcHMoc3RydWN0IGJyYW5jaF9lbnRyeSAqbCwgaW50IG5yKQoreworCWludCBpLCBqLCBvZmY7CisJdW5zaWduZWQgY2hhciBjaGFzaFtDSEFTSFNaXTsKKworCW1lbXNldChjaGFzaCwgTk9fRU5UUlksIHNpemVvZihjaGFzaCkpOworCisJQlVHX09OKFBFUkZfTUFYX0JSQU5DSF9ERVBUSCA+IDI1NSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlpbnQgaCA9IGhhc2hfNjQobFtpXS5mcm9tLCBDSEFTSEJJVFMpICUgQ0hBU0hTWjsKKworCQkvKiBubyBjb2xsaXNpb24gaGFuZGxpbmcgZm9yIG5vdyAqLworCQlpZiAoY2hhc2hbaF0gPT0gTk9fRU5UUlkpIHsKKwkJCWNoYXNoW2hdID0gaTsKKwkJfSBlbHNlIGlmIChsW2NoYXNoW2hdXS5mcm9tID09IGxbaV0uZnJvbSkgeworCQkJYm9vbCBpc19sb29wID0gdHJ1ZTsKKwkJCS8qIGNoZWNrIGlmIGl0IGlzIGEgcmVhbCBsb29wICovCisJCQlvZmYgPSAwOworCQkJZm9yIChqID0gY2hhc2hbaF07IGogPCBpICYmIGkgKyBvZmYgPCBucjsgaisrLCBvZmYrKykKKwkJCQlpZiAobFtqXS5mcm9tICE9IGxbaSArIG9mZl0uZnJvbSkgeworCQkJCQlpc19sb29wID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWlmIChpc19sb29wKSB7CisJCQkJbWVtbW92ZShsICsgaSwgbCArIGkgKyBvZmYsCisJCQkJCShuciAtIChpICsgb2ZmKSkgKiBzaXplb2YoKmwpKTsKKwkJCQluciAtPSBvZmY7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIG5yOworfQorCitzdGF0aWMgaW50IHRocmVhZF9fcmVzb2x2ZV9jYWxsY2hhaW5fc2FtcGxlKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCQkJICAgICBzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwKKwkJCQkJICAgICBzdHJ1Y3QgYnJhbmNoX3N0YWNrICpicmFuY2gsCiAJCQkJCSAgICAgc3RydWN0IHN5bWJvbCAqKnBhcmVudCwKIAkJCQkJICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqcm9vdF9hbCwKIAkJCQkJICAgICBpbnQgbWF4X3N0YWNrKQpAQCAtMTM4MywyNCArMTQ4NSw4MyBAQAogCWludCBpOwogCWludCBqOwogCWludCBlcnI7Ci0JaW50IHNraXBfaWR4IF9fbWF5YmVfdW51c2VkOwotCi0JY2FsbGNoYWluX2N1cnNvcl9yZXNldCgmY2FsbGNoYWluX2N1cnNvcik7Ci0KLQlpZiAoY2hhaW4tPm5yID4gUEVSRl9NQVhfU1RBQ0tfREVQVEgpIHsKLQkJcHJfd2FybmluZygiY29ycnVwdGVkIGNhbGxjaGFpbi4gc2tpcHBpbmcuLi5cbiIpOwotCQlyZXR1cm4gMDsKLQl9CisJaW50IHNraXBfaWR4ID0gLTE7CisJaW50IGZpcnN0X2NhbGwgPSAwOwogCiAJLyoKIAkgKiBCYXNlZCBvbiBEV0FSRiBkZWJ1ZyBpbmZvcm1hdGlvbiwgc29tZSBhcmNoaXRlY3R1cmVzIHNraXAKIAkgKiBhIGNhbGxjaGFpbiBlbnRyeSBzYXZlZCBieSB0aGUga2VybmVsLgogCSAqLwotCXNraXBfaWR4ID0gYXJjaF9za2lwX2NhbGxjaGFpbl9pZHgobWFjaGluZSwgdGhyZWFkLCBjaGFpbik7CisJaWYgKGNoYWluLT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKQorCQlza2lwX2lkeCA9IGFyY2hfc2tpcF9jYWxsY2hhaW5faWR4KHRocmVhZCwgY2hhaW4pOwogCi0JZm9yIChpID0gMDsgaSA8IGNoYWluX25yOyBpKyspIHsKKwljYWxsY2hhaW5fY3Vyc29yX3Jlc2V0KCZjYWxsY2hhaW5fY3Vyc29yKTsKKworCS8qCisJICogQWRkIGJyYW5jaGVzIHRvIGNhbGwgc3RhY2sgZm9yIGVhc2llciBicm93c2luZy4gVGhpcyBnaXZlcworCSAqIG1vcmUgY29udGV4dCBmb3IgYSBzYW1wbGUgdGhhbiBqdXN0IHRoZSBjYWxsZXJzLgorCSAqCisJICogVGhpcyB1c2VzIGluZGl2aWR1YWwgaGlzdG9ncmFtcyBvZiBwYXRocyBjb21wYXJlZCB0byB0aGUKKwkgKiBhZ2dyZWdhdGVkIGhpc3RvZ3JhbXMgdGhlIG5vcm1hbCBMQlIgbW9kZSB1c2VzLgorCSAqCisJICogTGltaXRhdGlvbnMgZm9yIG5vdzoKKwkgKiAtIE5vIGV4dHJhIGZpbHRlcnMKKwkgKiAtIE5vIGFubm90YXRpb25zIChzaG91bGQgYW5ub3RhdGUgc29tZWhvdykKKwkgKi8KKworCWlmIChicmFuY2ggJiYgY2FsbGNoYWluX3BhcmFtLmJyYW5jaF9jYWxsc3RhY2spIHsKKwkJaW50IG5yID0gbWluKG1heF9zdGFjaywgKGludClicmFuY2gtPm5yKTsKKwkJc3RydWN0IGJyYW5jaF9lbnRyeSBiZVtucl07CisKKwkJaWYgKGJyYW5jaC0+bnIgPiBQRVJGX01BWF9CUkFOQ0hfREVQVEgpIHsKKwkJCXByX3dhcm5pbmcoImNvcnJ1cHRlZCBicmFuY2ggY2hhaW4uIHNraXBwaW5nLi4uXG4iKTsKKwkJCWdvdG8gY2hlY2tfY2FsbHM7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQkJaWYgKGNhbGxjaGFpbl9wYXJhbS5vcmRlciA9PSBPUkRFUl9DQUxMRUUpIHsKKwkJCQliZVtpXSA9IGJyYW5jaC0+ZW50cmllc1tpXTsKKwkJCQkvKgorCQkJCSAqIENoZWNrIGZvciBvdmVybGFwIGludG8gdGhlIGNhbGxjaGFpbi4KKwkJCQkgKiBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb25lIG9mZiBjb21wYXJlZCB0bworCQkJCSAqIHRoZSBicmFuY2ggZW50cnkuIFRvIGFkanVzdCBmb3IgdGhpcworCQkJCSAqIGFzc3VtZSB0aGUgY2FsbGluZyBpbnN0cnVjdGlvbiBpcyBub3QgbG9uZ2VyCisJCQkJICogdGhhbiA4IGJ5dGVzLgorCQkJCSAqLworCQkJCWlmIChpID09IHNraXBfaWR4IHx8CisJCQkJICAgIGNoYWluLT5pcHNbZmlyc3RfY2FsbF0gPj0gUEVSRl9DT05URVhUX01BWCkKKwkJCQkJZmlyc3RfY2FsbCsrOworCQkJCWVsc2UgaWYgKGJlW2ldLmZyb20gPCBjaGFpbi0+aXBzW2ZpcnN0X2NhbGxdICYmCisJCQkJICAgIGJlW2ldLmZyb20gPj0gY2hhaW4tPmlwc1tmaXJzdF9jYWxsXSAtIDgpCisJCQkJCWZpcnN0X2NhbGwrKzsKKwkJCX0gZWxzZQorCQkJCWJlW2ldID0gYnJhbmNoLT5lbnRyaWVzW2JyYW5jaC0+bnIgLSBpIC0gMV07CisJCX0KKworCQluciA9IHJlbW92ZV9sb29wcyhiZSwgbnIpOworCisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCQllcnIgPSBhZGRfY2FsbGNoYWluX2lwKHRocmVhZCwgcGFyZW50LCByb290X2FsLAorCQkJCQkgICAgICAgLTEsIGJlW2ldLnRvKTsKKwkJCWlmICghZXJyKQorCQkJCWVyciA9IGFkZF9jYWxsY2hhaW5faXAodGhyZWFkLCBwYXJlbnQsIHJvb3RfYWwsCisJCQkJCQkgICAgICAgLTEsIGJlW2ldLmZyb20pOworCQkJaWYgKGVyciA9PSAtRUlOVkFMKQorCQkJCWJyZWFrOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJCWNoYWluX25yIC09IG5yOworCX0KKworY2hlY2tfY2FsbHM6CisJaWYgKGNoYWluLT5uciA+IFBFUkZfTUFYX1NUQUNLX0RFUFRIKSB7CisJCXByX3dhcm5pbmcoImNvcnJ1cHRlZCBjYWxsY2hhaW4uIHNraXBwaW5nLi4uXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChpID0gZmlyc3RfY2FsbDsgaSA8IGNoYWluX25yOyBpKyspIHsKIAkJdTY0IGlwOwotCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAogCQlpZiAoY2FsbGNoYWluX3BhcmFtLm9yZGVyID09IE9SREVSX0NBTExFRSkKIAkJCWogPSBpOwpAQCAtMTQzNywyNCArMTU5OCwxMCBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlhbC5maWx0ZXJlZCA9IDA7Ci0JCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgbWFjaGluZSwgY3B1bW9kZSwKLQkJCQkJICAgTUFQX19GVU5DVElPTiwgaXAsICZhbCk7Ci0JCWlmIChhbC5zeW0gIT0gTlVMTCkgewotCQkJaWYgKHNvcnRfX2hhc19wYXJlbnQgJiYgISpwYXJlbnQgJiYKLQkJCSAgICBzeW1ib2xfX21hdGNoX3JlZ2V4KGFsLnN5bSwgJnBhcmVudF9yZWdleCkpCi0JCQkJKnBhcmVudCA9IGFsLnN5bTsKLQkJCWVsc2UgaWYgKGhhdmVfaWdub3JlX2NhbGxlZXMgJiYgcm9vdF9hbCAmJgotCQkJICBzeW1ib2xfX21hdGNoX3JlZ2V4KGFsLnN5bSwgJmlnbm9yZV9jYWxsZWVzX3JlZ2V4KSkgewotCQkJCS8qIFRyZWF0IHRoaXMgc3ltYm9sIGFzIHRoZSByb290LAotCQkJCSAgIGZvcmdldHRpbmcgaXRzIGNhbGxlZXMuICovCi0JCQkJKnJvb3RfYWwgPSBhbDsKLQkJCQljYWxsY2hhaW5fY3Vyc29yX3Jlc2V0KCZjYWxsY2hhaW5fY3Vyc29yKTsKLQkJCX0KLQkJfQotCi0JCWVyciA9IGNhbGxjaGFpbl9jdXJzb3JfYXBwZW5kKCZjYWxsY2hhaW5fY3Vyc29yLAotCQkJCQkgICAgICBpcCwgYWwubWFwLCBhbC5zeW0pOworCQllcnIgPSBhZGRfY2FsbGNoYWluX2lwKHRocmVhZCwgcGFyZW50LCByb290X2FsLAorCQkJCSAgICAgICBjcHVtb2RlLCBpcCk7CisJCWlmIChlcnIgPT0gLUVJTlZBTCkKKwkJCWJyZWFrOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0xNDY5LDE5ICsxNjE2LDE2IEBACiAJCQkJICAgICAgIGVudHJ5LT5tYXAsIGVudHJ5LT5zeW0pOwogfQogCi1pbnQgbWFjaGluZV9fcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCi0JCQkgICAgICAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkJICAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKLQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKLQkJCSAgICAgICBzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50LAotCQkJICAgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICpyb290X2FsLAotCQkJICAgICAgIGludCBtYXhfc3RhY2spCitpbnQgdGhyZWFkX19yZXNvbHZlX2NhbGxjaGFpbihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCSAgICAgIHN0cnVjdCBzeW1ib2wgKipwYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqcm9vdF9hbCwKKwkJCSAgICAgIGludCBtYXhfc3RhY2spCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IG1hY2hpbmVfX3Jlc29sdmVfY2FsbGNoYWluX3NhbXBsZShtYWNoaW5lLCB0aHJlYWQsCi0JCQkJCQlzYW1wbGUtPmNhbGxjaGFpbiwgcGFyZW50LAotCQkJCQkJcm9vdF9hbCwgbWF4X3N0YWNrKTsKKwlpbnQgcmV0ID0gdGhyZWFkX19yZXNvbHZlX2NhbGxjaGFpbl9zYW1wbGUodGhyZWFkLCBzYW1wbGUtPmNhbGxjaGFpbiwKKwkJCQkJCSAgIHNhbXBsZS0+YnJhbmNoX3N0YWNrLAorCQkJCQkJICAgcGFyZW50LCByb290X2FsLCBtYXhfc3RhY2spOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTE0OTUsNyArMTYzOSw3IEBACiAJICAgICghc2FtcGxlLT51c2VyX3N0YWNrLnNpemUpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiB1bndpbmRfX2dldF9lbnRyaWVzKHVud2luZF9lbnRyeSwgJmNhbGxjaGFpbl9jdXJzb3IsIG1hY2hpbmUsCisJcmV0dXJuIHVud2luZF9fZ2V0X2VudHJpZXModW53aW5kX2VudHJ5LCAmY2FsbGNoYWluX2N1cnNvciwKIAkJCQkgICB0aHJlYWQsIHNhbXBsZSwgbWF4X3N0YWNrKTsKIAogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmgKaW5kZXggMmI2NTFhNy4uZThiNzc3OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuaAorKysgYi90b29scy9wZXJmL3V0aWwvbWFjaGluZS5oCkBAIC00MCw2ICs0MCwxMCBAQAogCXU2NAkJICBrZXJuZWxfc3RhcnQ7CiAJc3ltYm9sX2ZpbHRlcl90CSAgc3ltYm9sX2ZpbHRlcjsKIAlwaWRfdAkJICAqY3VycmVudF90aWQ7CisJdW5pb24geyAvKiBUb29sIHNwZWNpZmljIGFyZWEgKi8KKwkJdm9pZAkgICpwcml2OworCQl1NjQJICBkYl9pZDsKKwl9OwogfTsKIAogc3RhdGljIGlubGluZQpAQCAtMTIyLDEzICsxMjYsMTIgQEAKIAkJCQkJICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKTsKIHN0cnVjdCBtZW1faW5mbyAqc2FtcGxlX19yZXNvbHZlX21lbShzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKIAkJCQkgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7Ci1pbnQgbWFjaGluZV9fcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCi0JCQkgICAgICAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkJICAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKLQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKLQkJCSAgICAgICBzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50LAotCQkJICAgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICpyb290X2FsLAotCQkJICAgICAgIGludCBtYXhfc3RhY2spOworaW50IHRocmVhZF9fcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJICAgICAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkgICAgICBzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50LAorCQkJICAgICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKnJvb3RfYWwsCisJCQkgICAgICBpbnQgbWF4X3N0YWNrKTsKIAogLyoKICAqIERlZmF1bHQgZ3Vlc3Qga2VybmVsIGlzIGRlZmluZWQgYnkgcGFyYW1ldGVyIC0tZ3Vlc3RrYWxsc3ltcwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5jIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCmluZGV4IDIxMzdjNDUuLjYyY2E5ZjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCiAJaWYgKG1hcCAmJiBtYXAtPmRzbykgewogCQlzcmNsaW5lID0gZ2V0X3NyY2xpbmUobWFwLT5kc28sCi0JCQkJICAgICAgbWFwX19yaXBfMm9iamR1bXAobWFwLCBhZGRyKSk7CisJCQkJICAgICAgbWFwX19yaXBfMm9iamR1bXAobWFwLCBhZGRyKSwgTlVMTCwgdHJ1ZSk7CiAJCWlmIChzcmNsaW5lICE9IFNSQ0xJTkVfVU5LTk9XTikKIAkJCXJldCA9IGZwcmludGYoZnAsICIlcyVzIiwgcHJlZml4LCBzcmNsaW5lKTsKIAkJZnJlZV9zcmNsaW5lKHNyY2xpbmUpOwpAQCAtNDEzLDE0ICs0MTMsMTQgQEAKIAlyZXR1cm4gaXAgKyBtYXAtPnJlbG9jOwogfQogCi12b2lkIG1hcF9ncm91cHNfX2luaXQoc3RydWN0IG1hcF9ncm91cHMgKm1nKQordm9pZCBtYXBfZ3JvdXBzX19pbml0KHN0cnVjdCBtYXBfZ3JvdXBzICptZywgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkgewogCQltZy0+bWFwc1tpXSA9IFJCX1JPT1Q7CiAJCUlOSVRfTElTVF9IRUFEKCZtZy0+cmVtb3ZlZF9tYXBzW2ldKTsKIAl9Ci0JbWctPm1hY2hpbmUgPSBOVUxMOworCW1nLT5tYWNoaW5lID0gbWFjaGluZTsKIAltZy0+cmVmY250ID0gMTsKIH0KIApAQCAtNDcxLDEyICs0NzEsMTIgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RydWN0IG1hcF9ncm91cHMgKm1hcF9ncm91cHNfX25ldyh2b2lkKQorc3RydWN0IG1hcF9ncm91cHMgKm1hcF9ncm91cHNfX25ldyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKIHsKIAlzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcgPSBtYWxsb2Moc2l6ZW9mKCptZykpOwogCiAJaWYgKG1nICE9IE5VTEwpCi0JCW1hcF9ncm91cHNfX2luaXQobWcpOworCQltYXBfZ3JvdXBzX19pbml0KG1nLCBtYWNoaW5lKTsKIAogCXJldHVybiBtZzsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaCBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaAppbmRleCAyZjgzOTU0Li42OTUxYTlkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCkBAIC02NCw3ICs2NCw3IEBACiAJaW50CQkgcmVmY250OwogfTsKIAotc3RydWN0IG1hcF9ncm91cHMgKm1hcF9ncm91cHNfX25ldyh2b2lkKTsKK3N0cnVjdCBtYXBfZ3JvdXBzICptYXBfZ3JvdXBzX19uZXcoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOwogdm9pZCBtYXBfZ3JvdXBzX19kZWxldGUoc3RydWN0IG1hcF9ncm91cHMgKm1nKTsKIGJvb2wgbWFwX2dyb3Vwc19fZW1wdHkoc3RydWN0IG1hcF9ncm91cHMgKm1nKTsKIApAQCAtMTUwLDcgKzE1MCw3IEBACiBzdHJ1Y3QgbWFwICptYXBzX19maW5kKHN0cnVjdCByYl9yb290ICptYXBzLCB1NjQgYWRkcik7CiBzdHJ1Y3QgbWFwICptYXBzX19maXJzdChzdHJ1Y3QgcmJfcm9vdCAqbWFwcyk7CiBzdHJ1Y3QgbWFwICptYXBzX19uZXh0KHN0cnVjdCBtYXAgKm1hcCk7Ci12b2lkIG1hcF9ncm91cHNfX2luaXQoc3RydWN0IG1hcF9ncm91cHMgKm1nKTsKK3ZvaWQgbWFwX2dyb3Vwc19faW5pdChzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKIHZvaWQgbWFwX2dyb3Vwc19fZXhpdChzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcpOwogaW50IG1hcF9ncm91cHNfX2Nsb25lKHN0cnVjdCBtYXBfZ3JvdXBzICptZywKIAkJICAgICAgc3RydWN0IG1hcF9ncm91cHMgKnBhcmVudCwgZW51bSBtYXBfdHlwZSB0eXBlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCBjNjU5YTNjLi43N2I0M2ZlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC02ODEsNiArNjgxLDggQEAKIAlpZiAoZXZzZWwpIHsKIAkJZXZzZWwtPnVuaXQgPSBpbmZvLnVuaXQ7CiAJCWV2c2VsLT5zY2FsZSA9IGluZm8uc2NhbGU7CisJCWV2c2VsLT5wZXJfcGtnID0gaW5mby5wZXJfcGtnOworCQlldnNlbC0+c25hcHNob3QgPSBpbmZvLnNuYXBzaG90OwogCX0KIAogCXJldHVybiBldnNlbCA/IDAgOiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmMKaW5kZXggYmY0ODA5Mi4uZjYyZGVlN2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuYwpAQCAtNDIsNyArNDIsMjYgQEAKIAkJcmV0dXJuIG9wdGVycm9yKG9wdCwgInRha2VzIG5vIHZhbHVlIiwgZmxhZ3MpOwogCWlmICh1bnNldCAmJiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9OT05FRykpCiAJCXJldHVybiBvcHRlcnJvcihvcHQsICJpc24ndCBhdmFpbGFibGUiLCBmbGFncyk7CisJaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfRElTQUJMRUQpCisJCXJldHVybiBvcHRlcnJvcihvcHQsICJpcyBub3QgdXNhYmxlIiwgZmxhZ3MpOwogCisJaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfRVhDTFVTSVZFKSB7CisJCWlmIChwLT5leGNsX29wdCkgeworCQkJY2hhciBtc2dbMTI4XTsKKworCQkJaWYgKCgoZmxhZ3MgJiBPUFRfU0hPUlQpICYmIHAtPmV4Y2xfb3B0LT5zaG9ydF9uYW1lKSB8fAorCQkJICAgIHAtPmV4Y2xfb3B0LT5sb25nX25hbWUgPT0gTlVMTCkgeworCQkJCXNjbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2ggYCVjJyIsCisJCQkJCSAgcC0+ZXhjbF9vcHQtPnNob3J0X25hbWUpOworCQkJfSBlbHNlIHsKKwkJCQlzY25wcmludGYobXNnLCBzaXplb2YobXNnKSwgImNhbm5vdCBiZSB1c2VkIHdpdGggJXMiLAorCQkJCQkgIHAtPmV4Y2xfb3B0LT5sb25nX25hbWUpOworCQkJfQorCQkJb3B0ZXJyb3Iob3B0LCBtc2csIGZsYWdzKTsKKwkJCXJldHVybiAtMzsKKwkJfQorCQlwLT5leGNsX29wdCA9IG9wdDsKKwl9CiAJaWYgKCEoZmxhZ3MgJiBPUFRfU0hPUlQpICYmIHAtPm9wdCkgewogCQlzd2l0Y2ggKG9wdC0+dHlwZSkgewogCQljYXNlIE9QVElPTl9DQUxMQkFDSzoKQEAgLTM0MywxMyArMzYyLDE0IEBACiAJCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSkKIHsKIAlpbnQgaW50ZXJuYWxfaGVscCA9ICEoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQKTsKKwlpbnQgZXhjbF9zaG9ydF9vcHQgPSAxOworCWNvbnN0IGNoYXIgKmFyZzsKIAogCS8qIHdlIG11c3QgcmVzZXQgLT5vcHQsIHVua25vd24gc2hvcnQgb3B0aW9uIGxlYXZlIGl0IGRhbmdsaW5nICovCiAJY3R4LT5vcHQgPSBOVUxMOwogCiAJZm9yICg7IGN0eC0+YXJnYzsgY3R4LT5hcmdjLS0sIGN0eC0+YXJndisrKSB7Ci0JCWNvbnN0IGNoYXIgKmFyZyA9IGN0eC0+YXJndlswXTsKLQorCQlhcmcgPSBjdHgtPmFyZ3ZbMF07CiAJCWlmICgqYXJnICE9ICctJyB8fCAhYXJnWzFdKSB7CiAJCQlpZiAoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pCiAJCQkJYnJlYWs7CkBAIC0zNTgsMTkgKzM3OCwyMSBAQAogCQl9CiAKIAkJaWYgKGFyZ1sxXSAhPSAnLScpIHsKLQkJCWN0eC0+b3B0ID0gYXJnICsgMTsKKwkJCWN0eC0+b3B0ID0gKythcmc7CiAJCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAqY3R4LT5vcHQgPT0gJ2gnKQogCQkJCXJldHVybiB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwodXNhZ2VzdHIsIG9wdGlvbnMsIDApOwogCQkJc3dpdGNoIChwYXJzZV9zaG9ydF9vcHQoY3R4LCBvcHRpb25zKSkgewogCQkJY2FzZSAtMToKLQkJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZSh1c2FnZXN0ciwgb3B0aW9ucywgYXJnICsgMSwgMSk7CisJCQkJcmV0dXJuIHBhcnNlX29wdGlvbnNfdXNhZ2UodXNhZ2VzdHIsIG9wdGlvbnMsIGFyZywgMSk7CiAJCQljYXNlIC0yOgogCQkJCWdvdG8gdW5rbm93bjsKKwkJCWNhc2UgLTM6CisJCQkJZ290byBleGNsdXNpdmU7CiAJCQlkZWZhdWx0OgogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGN0eC0+b3B0KQotCQkJCWNoZWNrX3R5cG9zKGFyZyArIDEsIG9wdGlvbnMpOworCQkJCWNoZWNrX3R5cG9zKGFyZywgb3B0aW9ucyk7CiAJCQl3aGlsZSAoY3R4LT5vcHQpIHsKIAkJCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAqY3R4LT5vcHQgPT0gJ2gnKQogCQkJCQlyZXR1cm4gdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKHVzYWdlc3RyLCBvcHRpb25zLCAwKTsKQEAgLTM4Nyw2ICs0MDksOCBAQAogCQkJCQljdHgtPmFyZ3ZbMF0gPSBzdHJkdXAoY3R4LT5vcHQgLSAxKTsKIAkJCQkJKihjaGFyICopY3R4LT5hcmd2WzBdID0gJy0nOwogCQkJCQlnb3RvIHVua25vd247CisJCQkJY2FzZSAtMzoKKwkJCQkJZ290byBleGNsdXNpdmU7CiAJCQkJZGVmYXVsdDoKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNDAyLDE5ICs0MjYsMjMgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGludGVybmFsX2hlbHAgJiYgIXN0cmNtcChhcmcgKyAyLCAiaGVscC1hbGwiKSkKKwkJYXJnICs9IDI7CisJCWlmIChpbnRlcm5hbF9oZWxwICYmICFzdHJjbXAoYXJnLCAiaGVscC1hbGwiKSkKIAkJCXJldHVybiB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwodXNhZ2VzdHIsIG9wdGlvbnMsIDEpOwotCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAhc3RyY21wKGFyZyArIDIsICJoZWxwIikpCisJCWlmIChpbnRlcm5hbF9oZWxwICYmICFzdHJjbXAoYXJnLCAiaGVscCIpKQogCQkJcmV0dXJuIHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbCh1c2FnZXN0ciwgb3B0aW9ucywgMCk7Ci0JCWlmICghc3RyY21wKGFyZyArIDIsICJsaXN0LW9wdHMiKSkKKwkJaWYgKCFzdHJjbXAoYXJnLCAibGlzdC1vcHRzIikpCiAJCQlyZXR1cm4gUEFSU0VfT1BUX0xJU1RfT1BUUzsKLQkJaWYgKCFzdHJjbXAoYXJnICsgMiwgImxpc3QtY21kcyIpKQorCQlpZiAoIXN0cmNtcChhcmcsICJsaXN0LWNtZHMiKSkKIAkJCXJldHVybiBQQVJTRV9PUFRfTElTVF9TVUJDTURTOwotCQlzd2l0Y2ggKHBhcnNlX2xvbmdfb3B0KGN0eCwgYXJnICsgMiwgb3B0aW9ucykpIHsKKwkJc3dpdGNoIChwYXJzZV9sb25nX29wdChjdHgsIGFyZywgb3B0aW9ucykpIHsKIAkJY2FzZSAtMToKLQkJCXJldHVybiBwYXJzZV9vcHRpb25zX3VzYWdlKHVzYWdlc3RyLCBvcHRpb25zLCBhcmcgKyAyLCAwKTsKKwkJCXJldHVybiBwYXJzZV9vcHRpb25zX3VzYWdlKHVzYWdlc3RyLCBvcHRpb25zLCBhcmcsIDApOwogCQljYXNlIC0yOgogCQkJZ290byB1bmtub3duOworCQljYXNlIC0zOgorCQkJZXhjbF9zaG9ydF9vcHQgPSAwOworCQkJZ290byBleGNsdXNpdmU7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtNDI2LDYgKzQ1NCwxNyBAQAogCQljdHgtPm9wdCA9IE5VTEw7CiAJfQogCXJldHVybiBQQVJTRV9PUFRfRE9ORTsKKworZXhjbHVzaXZlOgorCXBhcnNlX29wdGlvbnNfdXNhZ2UodXNhZ2VzdHIsIG9wdGlvbnMsIGFyZywgZXhjbF9zaG9ydF9vcHQpOworCWlmICgoZXhjbF9zaG9ydF9vcHQgJiYgY3R4LT5leGNsX29wdC0+c2hvcnRfbmFtZSkgfHwKKwkgICAgY3R4LT5leGNsX29wdC0+bG9uZ19uYW1lID09IE5VTEwpIHsKKwkJY2hhciBvcHQgPSBjdHgtPmV4Y2xfb3B0LT5zaG9ydF9uYW1lOworCQlwYXJzZV9vcHRpb25zX3VzYWdlKE5VTEwsIG9wdGlvbnMsICZvcHQsIDEpOworCX0gZWxzZSB7CisJCXBhcnNlX29wdGlvbnNfdXNhZ2UoTlVMTCwgb3B0aW9ucywgY3R4LT5leGNsX29wdC0+bG9uZ19uYW1lLCAwKTsKKwl9CisJcmV0dXJuIFBBUlNFX09QVF9IRUxQOwogfQogCiBpbnQgcGFyc2Vfb3B0aW9uc19lbmQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4KQpAQCAtNTA5LDYgKzU0OCw4IEBACiAJfQogCWlmICghZnVsbCAmJiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfSElEREVOKSkKIAkJcmV0dXJuOworCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9ESVNBQkxFRCkKKwkJcmV0dXJuOwogCiAJcG9zID0gZnByaW50ZihzdGRlcnIsICIgICAgIik7CiAJaWYgKG9wdHMtPnNob3J0X25hbWUpCkBAIC02NzksMyArNzIwLDE2IEBACiAJfQogCXJldHVybiAwOwogfQorCit2b2lkIHNldF9vcHRpb25fZmxhZyhzdHJ1Y3Qgb3B0aW9uICpvcHRzLCBpbnQgc2hvcnRvcHQsIGNvbnN0IGNoYXIgKmxvbmdvcHQsCisJCSAgICAgaW50IGZsYWcpCit7CisJZm9yICg7IG9wdHMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0cysrKSB7CisJCWlmICgoc2hvcnRvcHQgJiYgb3B0cy0+c2hvcnRfbmFtZSA9PSBzaG9ydG9wdCkgfHwKKwkJICAgIChvcHRzLT5sb25nX25hbWUgJiYgbG9uZ29wdCAmJgorCQkgICAgICFzdHJjbXAob3B0cy0+bG9uZ19uYW1lLCBsb25nb3B0KSkpIHsKKwkJCW9wdHMtPmZsYWdzIHw9IGZsYWc7CisJCQlicmVhazsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmggYi90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5oCmluZGV4IGI1OWJhODUuLjk3YjE1M2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuaApAQCAtMzgsNiArMzgsOCBAQAogCVBBUlNFX09QVF9OT05FRyAgID0gNCwKIAlQQVJTRV9PUFRfSElEREVOICA9IDgsCiAJUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCA9IDE2LAorCVBBUlNFX09QVF9ESVNBQkxFRCA9IDMyLAorCVBBUlNFX09QVF9FWENMVVNJVkUgPSA2NCwKIH07CiAKIHN0cnVjdCBvcHRpb247CkBAIC0xNzMsNiArMTc1LDcgQEAKIAljb25zdCBjaGFyICoqb3V0OwogCWludCBhcmdjLCBjcGlkeDsKIAljb25zdCBjaGFyICpvcHQ7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqZXhjbF9vcHQ7CiAJaW50IGZsYWdzOwogfTsKIApAQCAtMjExLDQgKzIxNCw1IEBACiAKIGV4dGVybiBjb25zdCBjaGFyICpwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmZpbGUpOwogCit2b2lkIHNldF9vcHRpb25fZmxhZyhzdHJ1Y3Qgb3B0aW9uICpvcHRzLCBpbnQgc29wdCwgY29uc3QgY2hhciAqbG9wdCwgaW50IGZsYWcpOwogI2VuZGlmIC8qIF9fUEVSRl9QQVJTRV9PUFRJT05TX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wbXUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wbXUuYwppbmRleCBlMjQzYWQ5Li41YzljNDk0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcG11LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BtdS5jCkBAIC0xNjMsNiArMTYzLDQxIEBACiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50CitwZXJmX3BtdV9fcGFyc2VfcGVyX3BrZyhzdHJ1Y3QgcGVyZl9wbXVfYWxpYXMgKmFsaWFzLCBjaGFyICpkaXIsIGNoYXIgKm5hbWUpCit7CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwlpbnQgZmQ7CisKKwlzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgIiVzLyVzLnBlci1wa2ciLCBkaXIsIG5hbWUpOworCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAtMTsKKworCWNsb3NlKGZkKTsKKworCWFsaWFzLT5wZXJfcGtnID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZXJmX3BtdV9fcGFyc2Vfc25hcHNob3Qoc3RydWN0IHBlcmZfcG11X2FsaWFzICphbGlhcywKKwkJCQkgICAgY2hhciAqZGlyLCBjaGFyICpuYW1lKQoreworCWNoYXIgcGF0aFtQQVRIX01BWF07CisJaW50IGZkOworCisJc25wcmludGYocGF0aCwgUEFUSF9NQVgsICIlcy8lcy5zbmFwc2hvdCIsIGRpciwgbmFtZSk7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJYWxpYXMtPnNuYXBzaG90ID0gdHJ1ZTsKKwljbG9zZShmZCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcGVyZl9wbXVfX25ld19hbGlhcyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBjaGFyICpkaXIsIGNoYXIgKm5hbWUsIEZJTEUgKmZpbGUpCiB7CiAJc3RydWN0IHBlcmZfcG11X2FsaWFzICphbGlhczsKQEAgLTE4MSw2ICsyMTYsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZhbGlhcy0+dGVybXMpOwogCWFsaWFzLT5zY2FsZSA9IDEuMDsKIAlhbGlhcy0+dW5pdFswXSA9ICdcMCc7CisJYWxpYXMtPnBlcl9wa2cgPSBmYWxzZTsKIAogCXJldCA9IHBhcnNlX2V2ZW50c190ZXJtcygmYWxpYXMtPnRlcm1zLCBidWYpOwogCWlmIChyZXQpIHsKQEAgLTE5NCw2ICsyMzAsOCBAQAogCSAqLwogCXBlcmZfcG11X19wYXJzZV91bml0KGFsaWFzLCBkaXIsIG5hbWUpOwogCXBlcmZfcG11X19wYXJzZV9zY2FsZShhbGlhcywgZGlyLCBuYW1lKTsKKwlwZXJmX3BtdV9fcGFyc2VfcGVyX3BrZyhhbGlhcywgZGlyLCBuYW1lKTsKKwlwZXJmX3BtdV9fcGFyc2Vfc25hcHNob3QoYWxpYXMsIGRpciwgbmFtZSk7CiAKIAlsaXN0X2FkZF90YWlsKCZhbGlhcy0+bGlzdCwgbGlzdCk7CiAKQEAgLTIwOSw2ICsyNDcsMTAgQEAKIAkJcmV0dXJuIHRydWU7CiAJaWYgKGxlbiA+IDYgJiYgIXN0cmNtcChuYW1lICsgbGVuIC0gNiwgIi5zY2FsZSIpKQogCQlyZXR1cm4gdHJ1ZTsKKwlpZiAobGVuID4gOCAmJiAhc3RyY21wKG5hbWUgKyBsZW4gLSA4LCAiLnBlci1wa2ciKSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKGxlbiA+IDkgJiYgIXN0cmNtcChuYW1lICsgbGVuIC0gOSwgIi5zbmFwc2hvdCIpKQorCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKIH0KQEAgLTYxNywyMyArNjU5LDI3IEBACiB9CiAKIAotc3RhdGljIGludCBjaGVja191bml0X3NjYWxlKHN0cnVjdCBwZXJmX3BtdV9hbGlhcyAqYWxpYXMsCi0JCQkgICAgY29uc3QgY2hhciAqKnVuaXQsIGRvdWJsZSAqc2NhbGUpCitzdGF0aWMgaW50IGNoZWNrX2luZm9fZGF0YShzdHJ1Y3QgcGVyZl9wbXVfYWxpYXMgKmFsaWFzLAorCQkJICAgc3RydWN0IHBlcmZfcG11X2luZm8gKmluZm8pCiB7CiAJLyoKIAkgKiBPbmx5IG9uZSB0ZXJtIGluIGV2ZW50IGRlZmluaXRpb24gY2FuCi0JICogZGVmaW5lIHVuaXQgYW5kIHNjYWxlLCBmYWlsIGlmIHRoZXJlJ3MKLQkgKiBtb3JlIHRoYW4gb25lLgorCSAqIGRlZmluZSB1bml0LCBzY2FsZSBhbmQgc25hcHNob3QsIGZhaWwKKwkgKiBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUuCiAJICovCi0JaWYgKCgqdW5pdCAmJiBhbGlhcy0+dW5pdCkgfHwKLQkgICAgKCpzY2FsZSAmJiBhbGlhcy0+c2NhbGUpKQorCWlmICgoaW5mby0+dW5pdCAmJiBhbGlhcy0+dW5pdCkgfHwKKwkgICAgKGluZm8tPnNjYWxlICYmIGFsaWFzLT5zY2FsZSkgfHwKKwkgICAgKGluZm8tPnNuYXBzaG90ICYmIGFsaWFzLT5zbmFwc2hvdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGFsaWFzLT51bml0KQotCQkqdW5pdCA9IGFsaWFzLT51bml0OworCQlpbmZvLT51bml0ID0gYWxpYXMtPnVuaXQ7CiAKIAlpZiAoYWxpYXMtPnNjYWxlKQotCQkqc2NhbGUgPSBhbGlhcy0+c2NhbGU7CisJCWluZm8tPnNjYWxlID0gYWxpYXMtPnNjYWxlOworCisJaWYgKGFsaWFzLT5zbmFwc2hvdCkKKwkJaW5mby0+c25hcHNob3QgPSBhbGlhcy0+c25hcHNob3Q7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0OSwxMiArNjk1LDE1IEBACiAJc3RydWN0IHBlcmZfcG11X2FsaWFzICphbGlhczsKIAlpbnQgcmV0OwogCisJaW5mby0+cGVyX3BrZyA9IGZhbHNlOworCiAJLyoKIAkgKiBNYXJrIHVuaXQgYW5kIHNjYWxlIGFzIG5vdCBzZXQKIAkgKiAoZGlmZmVyZW50IGZyb20gZGVmYXVsdCB2YWx1ZXMsIHNlZSBiZWxvdykKIAkgKi8KLQlpbmZvLT51bml0ICAgPSBOVUxMOwotCWluZm8tPnNjYWxlICA9IDAuMDsKKwlpbmZvLT51bml0ICAgICA9IE5VTEw7CisJaW5mby0+c2NhbGUgICAgPSAwLjA7CisJaW5mby0+c25hcHNob3QgPSBmYWxzZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0ZXJtLCBoLCBoZWFkX3Rlcm1zLCBsaXN0KSB7CiAJCWFsaWFzID0gcG11X2ZpbmRfYWxpYXMocG11LCB0ZXJtKTsKQEAgLTY2NCwxMCArNzEzLDEzIEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCXJldCA9IGNoZWNrX3VuaXRfc2NhbGUoYWxpYXMsICZpbmZvLT51bml0LCAmaW5mby0+c2NhbGUpOworCQlyZXQgPSBjaGVja19pbmZvX2RhdGEoYWxpYXMsIGluZm8pOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAorCQlpZiAoYWxpYXMtPnBlcl9wa2cpCisJCQlpbmZvLT5wZXJfcGtnID0gdHJ1ZTsKKwogCQlsaXN0X2RlbCgmdGVybS0+bGlzdCk7CiAJCWZyZWUodGVybSk7CiAJfQpAQCAtNzQ3LDE1ICs3OTksMTggQEAKIAogCXBtdSA9IE5VTEw7CiAJbGVuID0gMDsKLQl3aGlsZSAoKHBtdSA9IHBlcmZfcG11X19zY2FuKHBtdSkpICE9IE5VTEwpCisJd2hpbGUgKChwbXUgPSBwZXJmX3BtdV9fc2NhbihwbXUpKSAhPSBOVUxMKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxpYXMsICZwbXUtPmFsaWFzZXMsIGxpc3QpCiAJCQlsZW4rKzsKLQlhbGlhc2VzID0gbWFsbG9jKHNpemVvZihjaGFyICopICogbGVuKTsKKwkJaWYgKHBtdS0+c2VsZWN0YWJsZSkKKwkJCWxlbisrOworCX0KKwlhbGlhc2VzID0gemFsbG9jKHNpemVvZihjaGFyICopICogbGVuKTsKIAlpZiAoIWFsaWFzZXMpCi0JCXJldHVybjsKKwkJZ290byBvdXRfZW5vbWVtOwogCXBtdSA9IE5VTEw7CiAJaiA9IDA7Ci0Jd2hpbGUgKChwbXUgPSBwZXJmX3BtdV9fc2NhbihwbXUpKSAhPSBOVUxMKQorCXdoaWxlICgocG11ID0gcGVyZl9wbXVfX3NjYW4ocG11KSkgIT0gTlVMTCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsaWFzLCAmcG11LT5hbGlhc2VzLCBsaXN0KSB7CiAJCQljaGFyICpuYW1lID0gZm9ybWF0X2FsaWFzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHBtdSwgYWxpYXMpOwogCQkJYm9vbCBpc19jcHUgPSAhc3RyY21wKHBtdS0+bmFtZSwgImNwdSIpOwpAQCAtNzY1LDEzICs4MjAsMjMgQEAKIAkJCSAgICAgICghaXNfY3B1ICYmIHN0cmdsb2JtYXRjaChhbGlhcy0+bmFtZSwKIAkJCQkJCSAgICAgICBldmVudF9nbG9iKSkpKQogCQkJCWNvbnRpbnVlOwotCQkJYWxpYXNlc1tqXSA9IG5hbWU7CisKIAkJCWlmIChpc19jcHUgJiYgIW5hbWVfb25seSkKLQkJCQlhbGlhc2VzW2pdID0gZm9ybWF0X2FsaWFzX29yKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0JCQkJCQkJICAgICAgcG11LCBhbGlhcyk7Ci0JCQlhbGlhc2VzW2pdID0gc3RyZHVwKGFsaWFzZXNbal0pOworCQkJCW5hbWUgPSBmb3JtYXRfYWxpYXNfb3IoYnVmLCBzaXplb2YoYnVmKSwgcG11LCBhbGlhcyk7CisKKwkJCWFsaWFzZXNbal0gPSBzdHJkdXAobmFtZSk7CisJCQlpZiAoYWxpYXNlc1tqXSA9PSBOVUxMKQorCQkJCWdvdG8gb3V0X2Vub21lbTsKIAkJCWorKzsKIAkJfQorCQlpZiAocG11LT5zZWxlY3RhYmxlKSB7CisJCQljaGFyICpzOworCQkJaWYgKGFzcHJpbnRmKCZzLCAiJXMvLyIsIHBtdS0+bmFtZSkgPCAwKQorCQkJCWdvdG8gb3V0X2Vub21lbTsKKwkJCWFsaWFzZXNbal0gPSBzOworCQkJaisrOworCQl9CisJfQogCWxlbiA9IGo7CiAJcXNvcnQoYWxpYXNlcywgbGVuLCBzaXplb2YoY2hhciAqKSwgY21wX3N0cmluZyk7CiAJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7CkBAIC03ODAsMTIgKzg0NSwyMCBAQAogCQkJY29udGludWU7CiAJCX0KIAkJcHJpbnRmKCIgICUtNTBzIFtLZXJuZWwgUE1VIGV2ZW50XVxuIiwgYWxpYXNlc1tqXSk7Ci0JCXpmcmVlKCZhbGlhc2VzW2pdKTsKIAkJcHJpbnRlZCsrOwogCX0KIAlpZiAocHJpbnRlZCkKIAkJcHJpbnRmKCJcbiIpOwotCWZyZWUoYWxpYXNlcyk7CitvdXRfZnJlZToKKwlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCXpmcmVlKCZhbGlhc2VzW2pdKTsKKwl6ZnJlZSgmYWxpYXNlcyk7CisJcmV0dXJuOworCitvdXRfZW5vbWVtOgorCXByaW50ZigiRkFUQUw6IG5vdCBlbm91Z2ggbWVtb3J5IHRvIHByaW50IFBNVSBldmVudHNcbiIpOworCWlmIChhbGlhc2VzKQorCQlnb3RvIG91dF9mcmVlOwogfQogCiBib29sIHBtdV9oYXZlX2V2ZW50KGNvbnN0IGNoYXIgKnBuYW1lLCBjb25zdCBjaGFyICpuYW1lKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BtdS5oIGIvdG9vbHMvcGVyZi91dGlsL3BtdS5oCmluZGV4IGZlOWRmYmUuLjZiMTI0OWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wbXUuaAorKysgYi90b29scy9wZXJmL3V0aWwvcG11LmgKQEAgLTE4LDYgKzE4LDcgQEAKIHN0cnVjdCBwZXJmX3BtdSB7CiAJY2hhciAqbmFtZTsKIAlfX3UzMiB0eXBlOworCWJvb2wgc2VsZWN0YWJsZTsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICpkZWZhdWx0X2NvbmZpZzsKIAlzdHJ1Y3QgY3B1X21hcCAqY3B1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZvcm1hdDsgIC8qIEhFQUQgc3RydWN0IHBlcmZfcG11X2Zvcm1hdCAtPiBsaXN0ICovCkBAIC0yOCw2ICsyOSw4IEBACiBzdHJ1Y3QgcGVyZl9wbXVfaW5mbyB7CiAJY29uc3QgY2hhciAqdW5pdDsKIAlkb3VibGUgc2NhbGU7CisJYm9vbCBwZXJfcGtnOworCWJvb2wgc25hcHNob3Q7CiB9OwogCiAjZGVmaW5lIFVOSVRfTUFYX0xFTgkzMSAvKiBtYXggbGVuZ3RoIGZvciBldmVudCB1bml0IG5hbWUgKi8KQEAgLTM4LDYgKzQxLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7ICAvKiBFTEVNICovCiAJY2hhciB1bml0W1VOSVRfTUFYX0xFTisxXTsKIAlkb3VibGUgc2NhbGU7CisJYm9vbCBwZXJfcGtnOworCWJvb2wgc25hcHNob3Q7CiB9OwogCiBzdHJ1Y3QgcGVyZl9wbXUgKnBlcmZfcG11X19maW5kKGNvbnN0IGNoYXIgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwppbmRleCBjMTUwY2E0Li4yOGViMTQxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwpAQCAtMTkxMCwyMSArMTkxMCwyMSBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcHJpbnRmKCIgICUtMjBzIChvbiAlcyIsIGJ1ZiwgcGxhY2UpOworCXByX2luZm8oIiAgJS0yMHMgKG9uICVzIiwgYnVmLCBwbGFjZSk7CiAJaWYgKG1vZHVsZSkKLQkJcHJpbnRmKCIgaW4gJXMiLCBtb2R1bGUpOworCQlwcl9pbmZvKCIgaW4gJXMiLCBtb2R1bGUpOwogCiAJaWYgKHBldi0+bmFyZ3MgPiAwKSB7Ci0JCXByaW50ZigiIHdpdGgiKTsKKwkJcHJfaW5mbygiIHdpdGgiKTsKIAkJZm9yIChpID0gMDsgaSA8IHBldi0+bmFyZ3M7IGkrKykgewogCQkJcmV0ID0gc3ludGhlc2l6ZV9wZXJmX3Byb2JlX2FyZygmcGV2LT5hcmdzW2ldLAogCQkJCQkJCWJ1ZiwgMTI4KTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwotCQkJcHJpbnRmKCIgJXMiLCBidWYpOworCQkJcHJfaW5mbygiICVzIiwgYnVmKTsKIAkJfQogCX0KLQlwcmludGYoIilcbiIpOworCXByX2luZm8oIilcbiIpOwogCWZyZWUocGxhY2UpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMTI0LDcgKzIxMjQsNyBAQAogCX0KIAogCXJldCA9IDA7Ci0JcHJpbnRmKCJBZGRlZCBuZXcgZXZlbnQlc1xuIiwgKG50ZXZzID4gMSkgPyAiczoiIDogIjoiKTsKKwlwcl9pbmZvKCJBZGRlZCBuZXcgZXZlbnQlc1xuIiwgKG50ZXZzID4gMSkgPyAiczoiIDogIjoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnRldnM7IGkrKykgewogCQl0ZXYgPSAmdGV2c1tpXTsKIAkJaWYgKHBldi0+ZXZlbnQpCkBAIC0yMTc5LDggKzIxNzksOCBAQAogCiAJaWYgKHJldCA+PSAwKSB7CiAJCS8qIFNob3cgaG93IHRvIHVzZSB0aGUgZXZlbnQuICovCi0JCXByaW50ZigiXG5Zb3UgY2FuIG5vdyB1c2UgaXQgaW4gYWxsIHBlcmYgdG9vbHMsIHN1Y2ggYXM6XG5cbiIpOwotCQlwcmludGYoIlx0cGVyZiByZWNvcmQgLWUgJXM6JXMgLWFSIHNsZWVwIDFcblxuIiwgdGV2LT5ncm91cCwKKwkJcHJfaW5mbygiXG5Zb3UgY2FuIG5vdyB1c2UgaXQgaW4gYWxsIHBlcmYgdG9vbHMsIHN1Y2ggYXM6XG5cbiIpOworCQlwcl9pbmZvKCJcdHBlcmYgcmVjb3JkIC1lICVzOiVzIC1hUiBzbGVlcCAxXG5cbiIsIHRldi0+Z3JvdXAsCiAJCQkgdGV2LT5ldmVudCk7CiAJfQogCkBAIC0yNDQ0LDcgKzI0NDQsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCXByaW50ZigiUmVtb3ZlZCBldmVudDogJXNcbiIsIGVudC0+cyk7CisJcHJfaW5mbygiUmVtb3ZlZCBldmVudDogJXNcbiIsIGVudC0+cyk7CiAJcmV0dXJuIDA7CiBlcnJvcjoKIAlwcl93YXJuaW5nKCJGYWlsZWQgdG8gZGVsZXRlIGV2ZW50OiAlc1xuIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMgYi90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jCmluZGV4IDBhMDFiYWMuLjIyZWJjNDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogI2luY2x1ZGUgIi4uL3V0aWwuaCIKICNpbmNsdWRlIDxFWFRFUk4uaD4KQEAgLTU3LDcgKzU4LDcgQEAKICNkZWZpbmUgRlRSQUNFX01BWF9FVkVOVAkJCQlcCiAJKCgxIDw8IChzaXplb2YodW5zaWduZWQgc2hvcnQpICogOCkpIC0gMSkKIAotc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnRzW0ZUUkFDRV9NQVhfRVZFTlRdOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGV2ZW50c19kZWZpbmVkLCBGVFJBQ0VfTUFYX0VWRU5UKTsKIAogZXh0ZXJuIHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqc2NyaXB0aW5nX2NvbnRleHQ7CiAKQEAgLTIzOCwzNSArMjM5LDE1IEBACiAJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5uZXh0KTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpmaW5kX2NhY2hlX2V2ZW50KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkKLXsKLQlzdGF0aWMgY2hhciBldl9uYW1lWzI1Nl07Ci0Jc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnQ7Ci0JaW50IHR5cGUgPSBldnNlbC0+YXR0ci5jb25maWc7Ci0KLQlpZiAoZXZlbnRzW3R5cGVdKQotCQlyZXR1cm4gZXZlbnRzW3R5cGVdOwotCi0JZXZlbnRzW3R5cGVdID0gZXZlbnQgPSBldnNlbC0+dHBfZm9ybWF0OwotCWlmICghZXZlbnQpCi0JCXJldHVybiBOVUxMOwotCi0Jc3ByaW50Zihldl9uYW1lLCAiJXM6OiVzIiwgZXZlbnQtPnN5c3RlbSwgZXZlbnQtPm5hbWUpOwotCi0JZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGV2ZW50LT5wcmludF9mbXQuYXJncyk7Ci0KLQlyZXR1cm4gZXZlbnQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmxfcHJvY2Vzc190cmFjZXBvaW50KHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCQkJICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKIHsKKwlzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudCA9IGV2c2VsLT50cF9mb3JtYXQ7CiAJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CiAJc3RhdGljIGNoYXIgaGFuZGxlclsyNTZdOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CiAJdW5zaWduZWQgbG9uZyBzLCBuczsKLQlzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudDsKIAlpbnQgcGlkOwogCWludCBjcHUgPSBzYW1wbGUtPmNwdTsKIAl2b2lkICpkYXRhID0gc2FtcGxlLT5yYXdfZGF0YTsKQEAgLTI3OCw3ICsyNTksNiBAQAogCWlmIChldnNlbC0+YXR0ci50eXBlICE9IFBFUkZfVFlQRV9UUkFDRVBPSU5UKQogCQlyZXR1cm47CiAKLQlldmVudCA9IGZpbmRfY2FjaGVfZXZlbnQoZXZzZWwpOwogCWlmICghZXZlbnQpCiAJCWRpZSgidWchIG5vIGV2ZW50IGZvdW5kIGZvciB0eXBlICUiIFBSSXU2NCwgKHU2NClldnNlbC0+YXR0ci5jb25maWcpOwogCkBAIC0yODYsNiArMjY2LDkgQEAKIAogCXNwcmludGYoaGFuZGxlciwgIiVzOjolcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKIAorCWlmICghdGVzdF9hbmRfc2V0X2JpdChldmVudC0+aWQsIGV2ZW50c19kZWZpbmVkKSkKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGhhbmRsZXIsIGV2ZW50LT5wcmludF9mbXQuYXJncyk7CisKIAlzID0gbnNlY3MgLyBOU0VDU19QRVJfU0VDOwogCW5zID0gbnNlY3MgLSBzICogTlNFQ1NfUEVSX1NFQzsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jCmluZGV4IDQ5NmYyMWMuLmQ4MDhhMzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMKQEAgLTI0LDcgKzI0LDkgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogCiAjaW5jbHVkZSAiLi4vLi4vcGVyZi5oIgogI2luY2x1ZGUgIi4uL2RlYnVnLmgiCkBAIC0zMyw2ICszNSwxMCBAQAogI2luY2x1ZGUgIi4uL3V0aWwuaCIKICNpbmNsdWRlICIuLi9ldmVudC5oIgogI2luY2x1ZGUgIi4uL3RocmVhZC5oIgorI2luY2x1ZGUgIi4uL2NvbW0uaCIKKyNpbmNsdWRlICIuLi9tYWNoaW5lLmgiCisjaW5jbHVkZSAiLi4vZGItZXhwb3J0LmgiCisjaW5jbHVkZSAiLi4vdGhyZWFkLXN0YWNrLmgiCiAjaW5jbHVkZSAiLi4vdHJhY2UtZXZlbnQuaCIKICNpbmNsdWRlICIuLi9tYWNoaW5lLmgiCiAKQEAgLTQxLDcgKzQ3LDcgQEAKICNkZWZpbmUgRlRSQUNFX01BWF9FVkVOVAkJCQlcCiAJKCgxIDw8IChzaXplb2YodW5zaWduZWQgc2hvcnQpICogOCkpIC0gMSkKIAotc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnRzW0ZUUkFDRV9NQVhfRVZFTlRdOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGV2ZW50c19kZWZpbmVkLCBGVFJBQ0VfTUFYX0VWRU5UKTsKIAogI2RlZmluZSBNQVhfRklFTERTCTY0CiAjZGVmaW5lIE5fQ09NTU9OX0ZJRUxEUwk3CkBAIC01Myw2ICs1OSwyNCBAQAogCiBzdGF0aWMgUHlPYmplY3QgKm1haW5fbW9kdWxlLCAqbWFpbl9kaWN0OwogCitzdHJ1Y3QgdGFibGVzIHsKKwlzdHJ1Y3QgZGJfZXhwb3J0CWRiZTsKKwlQeU9iamVjdAkJKmV2c2VsX2hhbmRsZXI7CisJUHlPYmplY3QJCSptYWNoaW5lX2hhbmRsZXI7CisJUHlPYmplY3QJCSp0aHJlYWRfaGFuZGxlcjsKKwlQeU9iamVjdAkJKmNvbW1faGFuZGxlcjsKKwlQeU9iamVjdAkJKmNvbW1fdGhyZWFkX2hhbmRsZXI7CisJUHlPYmplY3QJCSpkc29faGFuZGxlcjsKKwlQeU9iamVjdAkJKnN5bWJvbF9oYW5kbGVyOworCVB5T2JqZWN0CQkqYnJhbmNoX3R5cGVfaGFuZGxlcjsKKwlQeU9iamVjdAkJKnNhbXBsZV9oYW5kbGVyOworCVB5T2JqZWN0CQkqY2FsbF9wYXRoX2hhbmRsZXI7CisJUHlPYmplY3QJCSpjYWxsX3JldHVybl9oYW5kbGVyOworCWJvb2wJCQlkYl9leHBvcnRfbW9kZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGFibGVzIHRhYmxlc19nbG9iYWw7CisKIHN0YXRpYyB2b2lkIGhhbmRsZXJfY2FsbF9kaWUoY29uc3QgY2hhciAqaGFuZGxlcl9uYW1lKSBOT1JFVFVSTjsKIHN0YXRpYyB2b2lkIGhhbmRsZXJfY2FsbF9kaWUoY29uc3QgY2hhciAqaGFuZGxlcl9uYW1lKQogewpAQCAtMjMyLDMxICsyNTYsNiBAQAogCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+bmV4dCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGV2ZW50X2Zvcm1hdCAqZmluZF9jYWNoZV9ldmVudChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCi17Ci0Jc3RhdGljIGNoYXIgZXZfbmFtZVsyNTZdOwotCXN0cnVjdCBldmVudF9mb3JtYXQgKmV2ZW50OwotCWludCB0eXBlID0gZXZzZWwtPmF0dHIuY29uZmlnOwotCi0JLyoKLSAJICogWFhYOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBjYWNoZSB0aGlzIHNpbmNlIG5vdyB3ZSBoYXZlIGV2c2VsLT50cF9mb3JtYXQKLSAJICogY2FjaGVkIGFscmVhZHk/IE5lZWQgdG8gcmUtcmVhZCB0aGlzICJjYWNoZSIgcm91dGluZSB0aGF0IGFzIHdlbGwgY2FsbHMKLSAJICogZGVmaW5lX2V2ZW50X3N5bWJvbHMoKSA6LVwKLSAJICovCi0JaWYgKGV2ZW50c1t0eXBlXSkKLQkJcmV0dXJuIGV2ZW50c1t0eXBlXTsKLQotCWV2ZW50c1t0eXBlXSA9IGV2ZW50ID0gZXZzZWwtPnRwX2Zvcm1hdDsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm4gTlVMTDsKLQotCXNwcmludGYoZXZfbmFtZSwgIiVzX18lcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKLQotCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBldmVudC0+cHJpbnRfZm10LmFyZ3MpOwotCi0JcmV0dXJuIGV2ZW50OwotfQotCiBzdGF0aWMgUHlPYmplY3QgKmdldF9maWVsZF9udW1lcmljX2VudHJ5KHN0cnVjdCBldmVudF9mb3JtYXQgKmV2ZW50LAogCQlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZCwgdm9pZCAqZGF0YSkKIHsKQEAgLTMxMiw5ICszMTEsOSBAQAogCWlmICghc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiB8fCAhc2FtcGxlLT5jYWxsY2hhaW4pCiAJCWdvdG8gZXhpdDsKIAotCWlmIChtYWNoaW5lX19yZXNvbHZlX2NhbGxjaGFpbihhbC0+bWFjaGluZSwgZXZzZWwsIGFsLT50aHJlYWQsCi0JCQkJCSAgIHNhbXBsZSwgTlVMTCwgTlVMTCwKLQkJCQkJICAgUEVSRl9NQVhfU1RBQ0tfREVQVEgpICE9IDApIHsKKwlpZiAodGhyZWFkX19yZXNvbHZlX2NhbGxjaGFpbihhbC0+dGhyZWFkLCBldnNlbCwKKwkJCQkgICAgICBzYW1wbGUsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgUEVSRl9NQVhfU1RBQ0tfREVQVEgpICE9IDApIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gcmVzb2x2ZSBjYWxsY2hhaW4uIFNraXBwaW5nXG4iKTsKIAkJZ290byBleGl0OwogCX0KQEAgLTM4MCwxMiArMzc5LDEyIEBACiAJCQkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJCSAgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKKwlzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudCA9IGV2c2VsLT50cF9mb3JtYXQ7CiAJUHlPYmplY3QgKmhhbmRsZXIsICpjb250ZXh0LCAqdCwgKm9iaiwgKmNhbGxjaGFpbjsKIAlQeU9iamVjdCAqZGljdCA9IE5VTEw7CiAJc3RhdGljIGNoYXIgaGFuZGxlcl9uYW1lWzI1Nl07CiAJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CiAJdW5zaWduZWQgbG9uZyBzLCBuczsKLQlzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudDsKIAl1bnNpZ25lZCBuID0gMDsKIAlpbnQgcGlkOwogCWludCBjcHUgPSBzYW1wbGUtPmNwdTsKQEAgLTM5Nyw3ICszOTYsNiBAQAogCWlmICghdCkKIAkJUHlfRmF0YWxFcnJvcigiY291bGRuJ3QgY3JlYXRlIFB5dGhvbiB0dXBsZSIpOwogCi0JZXZlbnQgPSBmaW5kX2NhY2hlX2V2ZW50KGV2c2VsKTsKIAlpZiAoIWV2ZW50KQogCQlkaWUoInVnISBubyBldmVudCBmb3VuZCBmb3IgdHlwZSAlZCIsIChpbnQpZXZzZWwtPmF0dHIuY29uZmlnKTsKIApAQCAtNDA1LDYgKzQwMyw5IEBACiAKIAlzcHJpbnRmKGhhbmRsZXJfbmFtZSwgIiVzX18lcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKIAorCWlmICghdGVzdF9hbmRfc2V0X2JpdChldmVudC0+aWQsIGV2ZW50c19kZWZpbmVkKSkKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGhhbmRsZXJfbmFtZSwgZXZlbnQtPnByaW50X2ZtdC5hcmdzKTsKKwogCWhhbmRsZXIgPSBnZXRfaGFuZGxlcihoYW5kbGVyX25hbWUpOwogCWlmICghaGFuZGxlcikgewogCQlkaWN0ID0gUHlEaWN0X05ldygpOwpAQCAtNDc1LDYgKzQ3NiwyODkgQEAKIAlQeV9ERUNSRUYodCk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqdHVwbGVfbmV3KHVuc2lnbmVkIGludCBzeikKK3sKKwlQeU9iamVjdCAqdDsKKworCXQgPSBQeVR1cGxlX05ldyhzeik7CisJaWYgKCF0KQorCQlQeV9GYXRhbEVycm9yKCJjb3VsZG4ndCBjcmVhdGUgUHl0aG9uIHR1cGxlIik7CisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBpbnQgdHVwbGVfc2V0X3U2NChQeU9iamVjdCAqdCwgdW5zaWduZWQgaW50IHBvcywgdTY0IHZhbCkKK3sKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJcmV0dXJuIFB5VHVwbGVfU2V0SXRlbSh0LCBwb3MsIFB5SW50X0Zyb21Mb25nKHZhbCkpOworI2VuZGlmCisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgorCXJldHVybiBQeVR1cGxlX1NldEl0ZW0odCwgcG9zLCBQeUxvbmdfRnJvbUxvbmdMb25nKHZhbCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgdHVwbGVfc2V0X3MzMihQeU9iamVjdCAqdCwgdW5zaWduZWQgaW50IHBvcywgczMyIHZhbCkKK3sKKwlyZXR1cm4gUHlUdXBsZV9TZXRJdGVtKHQsIHBvcywgUHlJbnRfRnJvbUxvbmcodmFsKSk7Cit9CisKK3N0YXRpYyBpbnQgdHVwbGVfc2V0X3N0cmluZyhQeU9iamVjdCAqdCwgdW5zaWduZWQgaW50IHBvcywgY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gUHlUdXBsZV9TZXRJdGVtKHQsIHBvcywgUHlTdHJpbmdfRnJvbVN0cmluZyhzKSk7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9ldnNlbChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygyKTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgZXZzZWwtPmRiX2lkKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDEsIHBlcmZfZXZzZWxfX25hbWUoZXZzZWwpKTsKKworCWNhbGxfb2JqZWN0KHRhYmxlcy0+ZXZzZWxfaGFuZGxlciwgdCwgImV2c2VsX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X21hY2hpbmUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLAorCQkJCSBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygzKTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgbWFjaGluZS0+ZGJfaWQpOworCXR1cGxlX3NldF9zMzIodCwgMSwgbWFjaGluZS0+cGlkKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDIsIG1hY2hpbmUtPnJvb3RfZGlyID8gbWFjaGluZS0+cm9vdF9kaXIgOiAiIik7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPm1hY2hpbmVfaGFuZGxlciwgdCwgIm1hY2hpbmVfdGFibGUiKTsKKworCVB5X0RFQ1JFRih0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9leHBvcnRfdGhyZWFkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJCXU2NCBtYWluX3RocmVhZF9kYl9pZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCit7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gY29udGFpbmVyX29mKGRiZSwgc3RydWN0IHRhYmxlcywgZGJlKTsKKwlQeU9iamVjdCAqdDsKKworCXQgPSB0dXBsZV9uZXcoNSk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIHRocmVhZC0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMSwgbWFjaGluZS0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMiwgbWFpbl90aHJlYWRfZGJfaWQpOworCXR1cGxlX3NldF9zMzIodCwgMywgdGhyZWFkLT5waWRfKTsKKwl0dXBsZV9zZXRfczMyKHQsIDQsIHRocmVhZC0+dGlkKTsKKworCWNhbGxfb2JqZWN0KHRhYmxlcy0+dGhyZWFkX2hhbmRsZXIsIHQsICJ0aHJlYWRfdGFibGUiKTsKKworCVB5X0RFQ1JFRih0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9leHBvcnRfY29tbShzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjb21tICpjb21tKQoreworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9IGNvbnRhaW5lcl9vZihkYmUsIHN0cnVjdCB0YWJsZXMsIGRiZSk7CisJUHlPYmplY3QgKnQ7CisKKwl0ID0gdHVwbGVfbmV3KDIpOworCisJdHVwbGVfc2V0X3U2NCh0LCAwLCBjb21tLT5kYl9pZCk7CisJdHVwbGVfc2V0X3N0cmluZyh0LCAxLCBjb21tX19zdHIoY29tbSkpOworCisJY2FsbF9vYmplY3QodGFibGVzLT5jb21tX2hhbmRsZXIsIHQsICJjb21tX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X2NvbW1fdGhyZWFkKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgdTY0IGRiX2lkLAorCQkJCSAgICAgc3RydWN0IGNvbW0gKmNvbW0sIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygzKTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMSwgY29tbS0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMiwgdGhyZWFkLT5kYl9pZCk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPmNvbW1fdGhyZWFkX2hhbmRsZXIsIHQsICJjb21tX3RocmVhZF90YWJsZSIpOworCisJUHlfREVDUkVGKHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9kc28oc3RydWN0IGRiX2V4cG9ydCAqZGJlLCBzdHJ1Y3QgZHNvICpkc28sCisJCQkgICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9IGNvbnRhaW5lcl9vZihkYmUsIHN0cnVjdCB0YWJsZXMsIGRiZSk7CisJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKKwlQeU9iamVjdCAqdDsKKworCWJ1aWxkX2lkX19zcHJpbnRmKGRzby0+YnVpbGRfaWQsIHNpemVvZihkc28tPmJ1aWxkX2lkKSwgc2J1aWxkX2lkKTsKKworCXQgPSB0dXBsZV9uZXcoNSk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIGRzby0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMSwgbWFjaGluZS0+ZGJfaWQpOworCXR1cGxlX3NldF9zdHJpbmcodCwgMiwgZHNvLT5zaG9ydF9uYW1lKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDMsIGRzby0+bG9uZ19uYW1lKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDQsIHNidWlsZF9pZCk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPmRzb19oYW5kbGVyLCB0LCAiZHNvX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X3N5bWJvbChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBzeW1ib2wgKnN5bSwKKwkJCQlzdHJ1Y3QgZHNvICpkc28pCit7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gY29udGFpbmVyX29mKGRiZSwgc3RydWN0IHRhYmxlcywgZGJlKTsKKwl1NjQgKnN5bV9kYl9pZCA9IHN5bWJvbF9fcHJpdihzeW0pOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldyg2KTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgKnN5bV9kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxLCBkc28tPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDIsIHN5bS0+c3RhcnQpOworCXR1cGxlX3NldF91NjQodCwgMywgc3ltLT5lbmQpOworCXR1cGxlX3NldF9zMzIodCwgNCwgc3ltLT5iaW5kaW5nKTsKKwl0dXBsZV9zZXRfc3RyaW5nKHQsIDUsIHN5bS0+bmFtZSk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPnN5bWJvbF9oYW5kbGVyLCB0LCAic3ltYm9sX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X2JyYW5jaF90eXBlKHN0cnVjdCBkYl9leHBvcnQgKmRiZSwgdTMyIGJyYW5jaF90eXBlLAorCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygyKTsKKworCXR1cGxlX3NldF9zMzIodCwgMCwgYnJhbmNoX3R5cGUpOworCXR1cGxlX3NldF9zdHJpbmcodCwgMSwgbmFtZSk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPmJyYW5jaF90eXBlX2hhbmRsZXIsIHQsICJicmFuY2hfdHlwZV90YWJsZSIpOworCisJUHlfREVDUkVGKHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2V4cG9ydF9zYW1wbGUoc3RydWN0IGRiX2V4cG9ydCAqZGJlLAorCQkJCXN0cnVjdCBleHBvcnRfc2FtcGxlICplcykKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygyMSk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIGVzLT5kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxLCBlcy0+ZXZzZWwtPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDIsIGVzLT5hbC0+bWFjaGluZS0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMywgZXMtPnRocmVhZC0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgNCwgZXMtPmNvbW1fZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgNSwgZXMtPmRzb19kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCA2LCBlcy0+c3ltX2RiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDcsIGVzLT5vZmZzZXQpOworCXR1cGxlX3NldF91NjQodCwgOCwgZXMtPnNhbXBsZS0+aXApOworCXR1cGxlX3NldF91NjQodCwgOSwgZXMtPnNhbXBsZS0+dGltZSk7CisJdHVwbGVfc2V0X3MzMih0LCAxMCwgZXMtPnNhbXBsZS0+Y3B1KTsKKwl0dXBsZV9zZXRfdTY0KHQsIDExLCBlcy0+YWRkcl9kc29fZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMTIsIGVzLT5hZGRyX3N5bV9kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxMywgZXMtPmFkZHJfb2Zmc2V0KTsKKwl0dXBsZV9zZXRfdTY0KHQsIDE0LCBlcy0+c2FtcGxlLT5hZGRyKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDE1LCBlcy0+c2FtcGxlLT5wZXJpb2QpOworCXR1cGxlX3NldF91NjQodCwgMTYsIGVzLT5zYW1wbGUtPndlaWdodCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxNywgZXMtPnNhbXBsZS0+dHJhbnNhY3Rpb24pOworCXR1cGxlX3NldF91NjQodCwgMTgsIGVzLT5zYW1wbGUtPmRhdGFfc3JjKTsKKwl0dXBsZV9zZXRfczMyKHQsIDE5LCBlcy0+c2FtcGxlLT5mbGFncyAmIFBFUkZfQlJBTkNIX01BU0spOworCXR1cGxlX3NldF9zMzIodCwgMjAsICEhKGVzLT5zYW1wbGUtPmZsYWdzICYgUEVSRl9JUF9GTEFHX0lOX1RYKSk7CisKKwljYWxsX29iamVjdCh0YWJsZXMtPnNhbXBsZV9oYW5kbGVyLCB0LCAic2FtcGxlX3RhYmxlIik7CisKKwlQeV9ERUNSRUYodCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweXRob25fZXhwb3J0X2NhbGxfcGF0aChzdHJ1Y3QgZGJfZXhwb3J0ICpkYmUsIHN0cnVjdCBjYWxsX3BhdGggKmNwKQoreworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9IGNvbnRhaW5lcl9vZihkYmUsIHN0cnVjdCB0YWJsZXMsIGRiZSk7CisJUHlPYmplY3QgKnQ7CisJdTY0IHBhcmVudF9kYl9pZCwgc3ltX2RiX2lkOworCisJcGFyZW50X2RiX2lkID0gY3AtPnBhcmVudCA/IGNwLT5wYXJlbnQtPmRiX2lkIDogMDsKKwlzeW1fZGJfaWQgPSBjcC0+c3ltID8gKih1NjQgKilzeW1ib2xfX3ByaXYoY3AtPnN5bSkgOiAwOworCisJdCA9IHR1cGxlX25ldyg0KTsKKworCXR1cGxlX3NldF91NjQodCwgMCwgY3AtPmRiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDEsIHBhcmVudF9kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAyLCBzeW1fZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgMywgY3AtPmlwKTsKKworCWNhbGxfb2JqZWN0KHRhYmxlcy0+Y2FsbF9wYXRoX2hhbmRsZXIsIHQsICJjYWxsX3BhdGhfdGFibGUiKTsKKworCVB5X0RFQ1JFRih0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9leHBvcnRfY2FsbF9yZXR1cm4oc3RydWN0IGRiX2V4cG9ydCAqZGJlLAorCQkJCSAgICAgc3RydWN0IGNhbGxfcmV0dXJuICpjcikKK3sKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSBjb250YWluZXJfb2YoZGJlLCBzdHJ1Y3QgdGFibGVzLCBkYmUpOworCXU2NCBjb21tX2RiX2lkID0gY3ItPmNvbW0gPyBjci0+Y29tbS0+ZGJfaWQgOiAwOworCVB5T2JqZWN0ICp0OworCisJdCA9IHR1cGxlX25ldygxMSk7CisKKwl0dXBsZV9zZXRfdTY0KHQsIDAsIGNyLT5kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAxLCBjci0+dGhyZWFkLT5kYl9pZCk7CisJdHVwbGVfc2V0X3U2NCh0LCAyLCBjb21tX2RiX2lkKTsKKwl0dXBsZV9zZXRfdTY0KHQsIDMsIGNyLT5jcC0+ZGJfaWQpOworCXR1cGxlX3NldF91NjQodCwgNCwgY3ItPmNhbGxfdGltZSk7CisJdHVwbGVfc2V0X3U2NCh0LCA1LCBjci0+cmV0dXJuX3RpbWUpOworCXR1cGxlX3NldF91NjQodCwgNiwgY3ItPmJyYW5jaF9jb3VudCk7CisJdHVwbGVfc2V0X3U2NCh0LCA3LCBjci0+Y2FsbF9yZWYpOworCXR1cGxlX3NldF91NjQodCwgOCwgY3ItPnJldHVybl9yZWYpOworCXR1cGxlX3NldF91NjQodCwgOSwgY3ItPmNwLT5wYXJlbnQtPmRiX2lkKTsKKwl0dXBsZV9zZXRfczMyKHQsIDEwLCBjci0+ZmxhZ3MpOworCisJY2FsbF9vYmplY3QodGFibGVzLT5jYWxsX3JldHVybl9oYW5kbGVyLCB0LCAiY2FsbF9yZXR1cm5fdGFibGUiKTsKKworCVB5X0RFQ1JFRih0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9wcm9jZXNzX2NhbGxfcmV0dXJuKHN0cnVjdCBjYWxsX3JldHVybiAqY3IsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRiX2V4cG9ydCAqZGJlID0gZGF0YTsKKworCXJldHVybiBkYl9leHBvcnRfX2NhbGxfcmV0dXJuKGRiZSwgY3IpOworfQorCiBzdGF0aWMgdm9pZCBweXRob25fcHJvY2Vzc19nZW5lcmFsX2V2ZW50KHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAogCQkJCQkgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAogCQkJCQkgc3RydWN0IHRocmVhZCAqdGhyZWFkLApAQCAtNTUxLDE5ICs4MzUsMjUgQEAKIAlQeV9ERUNSRUYodCk7CiB9CiAKLXN0YXRpYyB2b2lkIHB5dGhvbl9wcm9jZXNzX2V2ZW50KHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50IF9fbWF5YmVfdW51c2VkLAorc3RhdGljIHZvaWQgcHl0aG9uX3Byb2Nlc3NfZXZlbnQodW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAogCQkJCSBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCQkJIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKIAkJCQkgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKQogeworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9ICZ0YWJsZXNfZ2xvYmFsOworCiAJc3dpdGNoIChldnNlbC0+YXR0ci50eXBlKSB7CiAJY2FzZSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDoKIAkJcHl0aG9uX3Byb2Nlc3NfdHJhY2Vwb2ludChzYW1wbGUsIGV2c2VsLCB0aHJlYWQsIGFsKTsKIAkJYnJlYWs7CiAJLyogUmVzZXJ2ZSBmb3IgZnV0dXJlIHByb2Nlc3NfaHcvc3cvcmF3IEFQSXMgKi8KIAlkZWZhdWx0OgotCQlweXRob25fcHJvY2Vzc19nZW5lcmFsX2V2ZW50KHNhbXBsZSwgZXZzZWwsIHRocmVhZCwgYWwpOworCQlpZiAodGFibGVzLT5kYl9leHBvcnRfbW9kZSkKKwkJCWRiX2V4cG9ydF9fc2FtcGxlKCZ0YWJsZXMtPmRiZSwgZXZlbnQsIHNhbXBsZSwgZXZzZWwsCisJCQkJCSAgdGhyZWFkLCBhbCk7CisJCWVsc2UKKwkJCXB5dGhvbl9wcm9jZXNzX2dlbmVyYWxfZXZlbnQoc2FtcGxlLCBldnNlbCwgdGhyZWFkLCBhbCk7CiAJfQogfQogCkBAIC01ODksMTEgKzg3OSw3OSBAQAogCXJldHVybiAtMTsKIH0KIAorI2RlZmluZSBTRVRfVEFCTEVfSEFORExFUl8obmFtZSwgaGFuZGxlcl9uYW1lLCB0YWJsZV9uYW1lKSBkbyB7CQlcCisJdGFibGVzLT5oYW5kbGVyX25hbWUgPSBnZXRfaGFuZGxlcigjdGFibGVfbmFtZSk7CQlcCisJaWYgKHRhYmxlcy0+aGFuZGxlcl9uYW1lKQkJCQkJXAorCQl0YWJsZXMtPmRiZS5leHBvcnRfICMjIG5hbWUgPSBweXRob25fZXhwb3J0XyAjIyBuYW1lOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFNFVF9UQUJMRV9IQU5ETEVSKG5hbWUpIFwKKwlTRVRfVEFCTEVfSEFORExFUl8obmFtZSwgbmFtZSAjIyBfaGFuZGxlciwgbmFtZSAjIyBfdGFibGUpCisKK3N0YXRpYyB2b2lkIHNldF90YWJsZV9oYW5kbGVycyhzdHJ1Y3QgdGFibGVzICp0YWJsZXMpCit7CisJY29uc3QgY2hhciAqcGVyZl9kYl9leHBvcnRfbW9kZSA9ICJwZXJmX2RiX2V4cG9ydF9tb2RlIjsKKwljb25zdCBjaGFyICpwZXJmX2RiX2V4cG9ydF9jYWxscyA9ICJwZXJmX2RiX2V4cG9ydF9jYWxscyI7CisJUHlPYmplY3QgKmRiX2V4cG9ydF9tb2RlLCAqZGJfZXhwb3J0X2NhbGxzOworCWJvb2wgZXhwb3J0X2NhbGxzID0gZmFsc2U7CisJaW50IHJldDsKKworCW1lbXNldCh0YWJsZXMsIDAsIHNpemVvZihzdHJ1Y3QgdGFibGVzKSk7CisJaWYgKGRiX2V4cG9ydF9faW5pdCgmdGFibGVzLT5kYmUpKQorCQlQeV9GYXRhbEVycm9yKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBleHBvcnQiKTsKKworCWRiX2V4cG9ydF9tb2RlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCBwZXJmX2RiX2V4cG9ydF9tb2RlKTsKKwlpZiAoIWRiX2V4cG9ydF9tb2RlKQorCQlyZXR1cm47CisKKwlyZXQgPSBQeU9iamVjdF9Jc1RydWUoZGJfZXhwb3J0X21vZGUpOworCWlmIChyZXQgPT0gLTEpCisJCWhhbmRsZXJfY2FsbF9kaWUocGVyZl9kYl9leHBvcnRfbW9kZSk7CisJaWYgKCFyZXQpCisJCXJldHVybjsKKworCXRhYmxlcy0+ZGJlLmNycCA9IE5VTEw7CisJZGJfZXhwb3J0X2NhbGxzID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCBwZXJmX2RiX2V4cG9ydF9jYWxscyk7CisJaWYgKGRiX2V4cG9ydF9jYWxscykgeworCQlyZXQgPSBQeU9iamVjdF9Jc1RydWUoZGJfZXhwb3J0X2NhbGxzKTsKKwkJaWYgKHJldCA9PSAtMSkKKwkJCWhhbmRsZXJfY2FsbF9kaWUocGVyZl9kYl9leHBvcnRfY2FsbHMpOworCQlleHBvcnRfY2FsbHMgPSAhIXJldDsKKwl9CisKKwlpZiAoZXhwb3J0X2NhbGxzKSB7CisJCXRhYmxlcy0+ZGJlLmNycCA9CisJCQljYWxsX3JldHVybl9wcm9jZXNzb3JfX25ldyhweXRob25fcHJvY2Vzc19jYWxsX3JldHVybiwKKwkJCQkJCSAgICZ0YWJsZXMtPmRiZSk7CisJCWlmICghdGFibGVzLT5kYmUuY3JwKQorCQkJUHlfRmF0YWxFcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBjYWxscyBwcm9jZXNzb3IiKTsKKwl9CisKKwl0YWJsZXMtPmRiX2V4cG9ydF9tb2RlID0gdHJ1ZTsKKwkvKgorCSAqIFJlc2VydmUgcGVyIHN5bWJvbCBzcGFjZSBmb3Igc3ltYm9sLT5kYl9pZCB2aWEgc3ltYm9sX19wcml2KCkKKwkgKi8KKwlzeW1ib2xfY29uZi5wcml2X3NpemUgPSBzaXplb2YodTY0KTsKKworCVNFVF9UQUJMRV9IQU5ETEVSKGV2c2VsKTsKKwlTRVRfVEFCTEVfSEFORExFUihtYWNoaW5lKTsKKwlTRVRfVEFCTEVfSEFORExFUih0aHJlYWQpOworCVNFVF9UQUJMRV9IQU5ETEVSKGNvbW0pOworCVNFVF9UQUJMRV9IQU5ETEVSKGNvbW1fdGhyZWFkKTsKKwlTRVRfVEFCTEVfSEFORExFUihkc28pOworCVNFVF9UQUJMRV9IQU5ETEVSKHN5bWJvbCk7CisJU0VUX1RBQkxFX0hBTkRMRVIoYnJhbmNoX3R5cGUpOworCVNFVF9UQUJMRV9IQU5ETEVSKHNhbXBsZSk7CisJU0VUX1RBQkxFX0hBTkRMRVIoY2FsbF9wYXRoKTsKKwlTRVRfVEFCTEVfSEFORExFUihjYWxsX3JldHVybik7Cit9CisKIC8qCiAgKiBTdGFydCB0cmFjZSBzY3JpcHQKICAqLwogc3RhdGljIGludCBweXRob25fc3RhcnRfc2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogeworCXN0cnVjdCB0YWJsZXMgKnRhYmxlcyA9ICZ0YWJsZXNfZ2xvYmFsOwogCWNvbnN0IGNoYXIgKipjb21tYW5kX2xpbmU7CiAJY2hhciBidWZbUEFUSF9NQVhdOwogCWludCBpLCBlcnIgPSAwOwpAQCAtNjMyLDYgKzk5MCwxNCBAQAogCiAJZnJlZShjb21tYW5kX2xpbmUpOwogCisJc2V0X3RhYmxlX2hhbmRsZXJzKHRhYmxlcyk7CisKKwlpZiAodGFibGVzLT5kYl9leHBvcnRfbW9kZSkgeworCQllcnIgPSBkYl9leHBvcnRfX2JyYW5jaF90eXBlcygmdGFibGVzLT5kYmUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKKwl9CisKIAlyZXR1cm4gZXJyOwogZXJyb3I6CiAJUHlfRmluYWxpemUoKTsKQEAgLTY0Miw3ICsxMDA4LDkgQEAKIAogc3RhdGljIGludCBweXRob25fZmx1c2hfc2NyaXB0KHZvaWQpCiB7Ci0JcmV0dXJuIDA7CisJc3RydWN0IHRhYmxlcyAqdGFibGVzID0gJnRhYmxlc19nbG9iYWw7CisKKwlyZXR1cm4gZGJfZXhwb3J0X19mbHVzaCgmdGFibGVzLT5kYmUpOwogfQogCiAvKgpAQCAtNjUwLDggKzEwMTgsMTIgQEAKICAqLwogc3RhdGljIGludCBweXRob25fc3RvcF9zY3JpcHQodm9pZCkKIHsKKwlzdHJ1Y3QgdGFibGVzICp0YWJsZXMgPSAmdGFibGVzX2dsb2JhbDsKKwogCXRyeV9jYWxsX29iamVjdCgidHJhY2VfZW5kIiwgTlVMTCk7CiAKKwlkYl9leHBvcnRfX2V4aXQoJnRhYmxlcy0+ZGJlKTsKKwogCVB5X1hERUNSRUYobWFpbl9kaWN0KTsKIAlQeV9YREVDUkVGKG1haW5fbW9kdWxlKTsKIAlQeV9GaW5hbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggNjcwMmFjMi4uNWYwZTA1YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC0yMjgsNiArMjI4LDE1IEBACiAJCQkJICB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCQkgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogCitzdGF0aWMgaW50IHByb2Nlc3NfaWRfaW5kZXhfc3R1YihzdHJ1Y3QgcGVyZl90b29sICp0b29sIF9fbWF5YmVfdW51c2VkLAorCQkJCSB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCBfX21heWJlX3VudXNlZCwKKwkJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqcGVyZl9zZXNzaW9uCisJCQkJIF9fbWF5YmVfdW51c2VkKQoreworCWR1bXBfcHJpbnRmKCI6IHVuaGFuZGxlZCFcbiIpOworCXJldHVybiAwOworfQorCiB2b2lkIHBlcmZfdG9vbF9fZmlsbF9kZWZhdWx0cyhzdHJ1Y3QgcGVyZl90b29sICp0b29sKQogewogCWlmICh0b29sLT5zYW1wbGUgPT0gTlVMTCkKQEAgLTI2Miw2ICsyNzEsOCBAQAogCQllbHNlCiAJCQl0b29sLT5maW5pc2hlZF9yb3VuZCA9IHByb2Nlc3NfZmluaXNoZWRfcm91bmRfc3R1YjsKIAl9CisJaWYgKHRvb2wtPmlkX2luZGV4ID09IE5VTEwpCisJCXRvb2wtPmlkX2luZGV4ID0gcHJvY2Vzc19pZF9pbmRleF9zdHViOwogfQogIAogc3RhdGljIHZvaWQgc3dhcF9zYW1wbGVfaWRfYWxsKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQpAQCAtNDYwLDYgKzQ3MSw3IEBACiAJW1BFUkZfUkVDT1JEX0hFQURFUl9FVkVOVF9UWVBFXQkgID0gcGVyZl9ldmVudF9fZXZlbnRfdHlwZV9zd2FwLAogCVtQRVJGX1JFQ09SRF9IRUFERVJfVFJBQ0lOR19EQVRBXSA9IHBlcmZfZXZlbnRfX3RyYWNpbmdfZGF0YV9zd2FwLAogCVtQRVJGX1JFQ09SRF9IRUFERVJfQlVJTERfSURdCSAgPSBOVUxMLAorCVtQRVJGX1JFQ09SRF9JRF9JTkRFWF0JCSAgPSBwZXJmX2V2ZW50X19hbGw2NF9zd2FwLAogCVtQRVJGX1JFQ09SRF9IRUFERVJfTUFYXQkgID0gTlVMTCwKIH07CiAKQEAgLTUyMSwxNSArNTMzLDExIEBACiAJCXJldHVybiAtRVRJTUU7CiAKIAlpZiAodGltZXN0YW1wIDwgb2UtPmxhc3RfZmx1c2gpIHsKLQkJV0FSTl9PTkNFKDEsICJUaW1lc3RhbXAgYmVsb3cgbGFzdCB0aW1lc2xpY2UgZmx1c2hcbiIpOwotCi0JCXByX29lX3RpbWUodGltZXN0YW1wLCAgICAgICJvdXQgb2Ygb3JkZXIgZXZlbnQiKTsKKwkJcHJfb2VfdGltZSh0aW1lc3RhbXAsICAgICAgIm91dCBvZiBvcmRlciBldmVudFxuIik7CiAJCXByX29lX3RpbWUob2UtPmxhc3RfZmx1c2gsICJsYXN0IGZsdXNoLCBsYXN0X2ZsdXNoX3R5cGUgJWRcbiIsCiAJCQkgICBvZS0+bGFzdF9mbHVzaF90eXBlKTsKIAotCQkvKiBXZSBjb3VsZCBnZXQgb3V0IG9mIG9yZGVyIG1lc3NhZ2VzIGFmdGVyIGZvcmNlZCBmbHVzaC4gKi8KLQkJaWYgKG9lLT5sYXN0X2ZsdXNoX3R5cGUgIT0gT0VfRkxVU0hfX0hBTEYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJcy0+c3RhdHMubnJfdW5vcmRlcmVkX2V2ZW50cysrOwogCX0KIAogCW5ldyA9IG9yZGVyZWRfZXZlbnRzX19uZXcob2UsIHRpbWVzdGFtcCwgZXZlbnQpOwpAQCAtNTgwLDE1ICs1ODgsNDYgQEAKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpyZWdzX2FiaVtdID0geworCVtQRVJGX1NBTVBMRV9SRUdTX0FCSV9OT05FXSA9ICJub25lIiwKKwlbUEVSRl9TQU1QTEVfUkVHU19BQklfMzJdID0gIjMyLWJpdCIsCisJW1BFUkZfU0FNUExFX1JFR1NfQUJJXzY0XSA9ICI2NC1iaXQiLAorfTsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpyZWdzX2R1bXBfYWJpKHN0cnVjdCByZWdzX2R1bXAgKmQpCit7CisJaWYgKGQtPmFiaSA+IFBFUkZfU0FNUExFX1JFR1NfQUJJXzY0KQorCQlyZXR1cm4gInVua25vd24iOworCisJcmV0dXJuIHJlZ3NfYWJpW2QtPmFiaV07Cit9CisKK3N0YXRpYyB2b2lkIHJlZ3NfX3ByaW50Zihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgcmVnc19kdW1wICpyZWdzKQoreworCXU2NCBtYXNrID0gcmVncy0+bWFzazsKKworCXByaW50ZigiLi4uICVzIHJlZ3M6IG1hc2sgMHglIiBQUkl4NjQgIiBBQkkgJXNcbiIsCisJICAgICAgIHR5cGUsCisJICAgICAgIG1hc2ssCisJICAgICAgIHJlZ3NfZHVtcF9hYmkocmVncykpOworCisJcmVnc19kdW1wX19wcmludGYobWFzaywgcmVncy0+cmVncyk7Cit9CisKIHN0YXRpYyB2b2lkIHJlZ3NfdXNlcl9fcHJpbnRmKHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlKQogewogCXN0cnVjdCByZWdzX2R1bXAgKnVzZXJfcmVncyA9ICZzYW1wbGUtPnVzZXJfcmVnczsKIAotCWlmICh1c2VyX3JlZ3MtPnJlZ3MpIHsKLQkJdTY0IG1hc2sgPSB1c2VyX3JlZ3MtPm1hc2s7Ci0JCXByaW50ZigiLi4uIHVzZXIgcmVnczogbWFzayAweCUiIFBSSXg2NCAiXG4iLCBtYXNrKTsKLQkJcmVnc19kdW1wX19wcmludGYobWFzaywgdXNlcl9yZWdzLT5yZWdzKTsKLQl9CisJaWYgKHVzZXJfcmVncy0+cmVncykKKwkJcmVnc19fcHJpbnRmKCJ1c2VyIiwgdXNlcl9yZWdzKTsKK30KKworc3RhdGljIHZvaWQgcmVnc19pbnRyX19wcmludGYoc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUpCit7CisJc3RydWN0IHJlZ3NfZHVtcCAqaW50cl9yZWdzID0gJnNhbXBsZS0+aW50cl9yZWdzOworCisJaWYgKGludHJfcmVncy0+cmVncykKKwkJcmVnc19fcHJpbnRmKCJpbnRyIiwgaW50cl9yZWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhY2tfdXNlcl9fcHJpbnRmKHN0cnVjdCBzdGFja19kdW1wICpkdW1wKQpAQCAtNjg3LDYgKzcyNiw5IEBACiAJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVHU19VU0VSKQogCQlyZWdzX3VzZXJfX3ByaW50ZihzYW1wbGUpOwogCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVHU19JTlRSKQorCQlyZWdzX2ludHJfX3ByaW50ZihzYW1wbGUpOworCiAJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfU1RBQ0tfVVNFUikKIAkJc3RhY2tfdXNlcl9fcHJpbnRmKCZzYW1wbGUtPnVzZXJfc3RhY2spOwogCkBAIC04ODgsMTEgKzkzMCwyNiBAQAogCQlyZXR1cm4gdG9vbC0+YnVpbGRfaWQodG9vbCwgZXZlbnQsIHNlc3Npb24pOwogCWNhc2UgUEVSRl9SRUNPUkRfRklOSVNIRURfUk9VTkQ6CiAJCXJldHVybiB0b29sLT5maW5pc2hlZF9yb3VuZCh0b29sLCBldmVudCwgc2Vzc2lvbik7CisJY2FzZSBQRVJGX1JFQ09SRF9JRF9JTkRFWDoKKwkJcmV0dXJuIHRvb2wtPmlkX2luZGV4KHRvb2wsIGV2ZW50LCBzZXNzaW9uKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiB9CiAKK2ludCBwZXJmX3Nlc3Npb25fX2RlbGl2ZXJfc3ludGhfZXZlbnQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkgICAgICB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCQkgICAgICBzdHJ1Y3QgcGVyZl90b29sICp0b29sKQoreworCWV2ZW50c19zdGF0c19faW5jKCZzZXNzaW9uLT5zdGF0cywgZXZlbnQtPmhlYWRlci50eXBlKTsKKworCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPj0gUEVSRl9SRUNPUkRfVVNFUl9UWVBFX1NUQVJUKQorCQlyZXR1cm4gcGVyZl9zZXNzaW9uX19wcm9jZXNzX3VzZXJfZXZlbnQoc2Vzc2lvbiwgZXZlbnQsIHRvb2wsIDApOworCisJcmV0dXJuIHBlcmZfc2Vzc2lvbl9fZGVsaXZlcl9ldmVudChzZXNzaW9uLCBldmVudCwgc2FtcGxlLCB0b29sLCAwKTsKK30KKwogc3RhdGljIHZvaWQgZXZlbnRfc3dhcCh1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwgYm9vbCBzYW1wbGVfaWRfYWxsKQogewogCXBlcmZfZXZlbnRfX3N3YXBfb3Agc3dhcDsKQEAgLTEwNTcsNiArMTExNCw5IEBACiAJCQkgICAgIkRvIHlvdSBoYXZlIGEgS1ZNIGd1ZXN0IHJ1bm5pbmcgYW5kIG5vdCB1c2luZyAncGVyZiBrdm0nP1xuIiwKIAkJCSAgICBzZXNzaW9uLT5zdGF0cy5ucl91bnByb2Nlc3NhYmxlX3NhbXBsZXMpOwogCX0KKworCWlmIChzZXNzaW9uLT5zdGF0cy5ucl91bm9yZGVyZWRfZXZlbnRzICE9IDApCisJCXVpX193YXJuaW5nKCIldSBvdXQgb2Ygb3JkZXIgZXZlbnRzIHJlY29yZGVkLlxuIiwgc2Vzc2lvbi0+c3RhdHMubnJfdW5vcmRlcmVkX2V2ZW50cyk7CiB9CiAKIHZvbGF0aWxlIGludCBzZXNzaW9uX2RvbmU7CkBAIC0xNDE3LDkgKzE0NzcsOSBAQAogCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluICYmIHNhbXBsZS0+Y2FsbGNoYWluKSB7CiAJCXN0cnVjdCBhZGRyX2xvY2F0aW9uIG5vZGVfYWw7CiAKLQkJaWYgKG1hY2hpbmVfX3Jlc29sdmVfY2FsbGNoYWluKGFsLT5tYWNoaW5lLCBldnNlbCwgYWwtPnRocmVhZCwKLQkJCQkJICAgICAgIHNhbXBsZSwgTlVMTCwgTlVMTCwKLQkJCQkJICAgICAgIFBFUkZfTUFYX1NUQUNLX0RFUFRIKSAhPSAwKSB7CisJCWlmICh0aHJlYWRfX3Jlc29sdmVfY2FsbGNoYWluKGFsLT50aHJlYWQsIGV2c2VsLAorCQkJCQkgICAgICBzYW1wbGUsIE5VTEwsIE5VTEwsCisJCQkJCSAgICAgIFBFUkZfTUFYX1NUQUNLX0RFUFRIKSAhPSAwKSB7CiAJCQlpZiAodmVyYm9zZSkKIAkJCQllcnJvcigiRmFpbGVkIHRvIHJlc29sdmUgY2FsbGNoYWluLiBTa2lwcGluZ1xuIik7CiAJCQlyZXR1cm47CkBAIC0xNTk0LDMgKzE2NTQsMTExIEBACiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KKworaW50IHBlcmZfZXZlbnRfX3Byb2Nlc3NfaWRfaW5kZXgoc3RydWN0IHBlcmZfdG9vbCAqdG9vbCBfX21heWJlX3VudXNlZCwKKwkJCQkgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QgPSBzZXNzaW9uLT5ldmxpc3Q7CisJc3RydWN0IGlkX2luZGV4X2V2ZW50ICppZSA9ICZldmVudC0+aWRfaW5kZXg7CisJc2l6ZV90IGksIG5yLCBtYXhfbnI7CisKKwltYXhfbnIgPSAoaWUtPmhlYWRlci5zaXplIC0gc2l6ZW9mKHN0cnVjdCBpZF9pbmRleF9ldmVudCkpIC8KKwkJIHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZW50cnkpOworCW5yID0gaWUtPm5yOworCWlmIChuciA+IG1heF9ucikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZHVtcF90cmFjZSkKKwkJZnByaW50ZihzdGRvdXQsICIgbnI6ICV6dVxuIiwgbnIpOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJc3RydWN0IGlkX2luZGV4X2VudHJ5ICplID0gJmllLT5lbnRyaWVzW2ldOworCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfaWQgKnNpZDsKKworCQlpZiAoZHVtcF90cmFjZSkgeworCQkJZnByaW50ZihzdGRvdXQsCSIgLi4uIGlkOiAlIlBSSXU2NCwgZS0+aWQpOworCQkJZnByaW50ZihzdGRvdXQsCSIgIGlkeDogJSJQUkl1NjQsIGUtPmlkeCk7CisJCQlmcHJpbnRmKHN0ZG91dCwJIiAgY3B1OiAlIlBSSWQ2NCwgZS0+Y3B1KTsKKwkJCWZwcmludGYoc3Rkb3V0LAkiICB0aWQ6ICUiUFJJZDY0IlxuIiwgZS0+dGlkKTsKKwkJfQorCisJCXNpZCA9IHBlcmZfZXZsaXN0X19pZDJzaWQoZXZsaXN0LCBlLT5pZCk7CisJCWlmICghc2lkKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisJCXNpZC0+aWR4ID0gZS0+aWR4OworCQlzaWQtPmNwdSA9IGUtPmNwdTsKKwkJc2lkLT50aWQgPSBlLT50aWQ7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcGVyZl9ldmVudF9fc3ludGhlc2l6ZV9pZF9pbmRleChzdHJ1Y3QgcGVyZl90b29sICp0b29sLAorCQkJCSAgICBwZXJmX2V2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKKwkJCQkgICAgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsCisJCQkJICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQoreworCXVuaW9uIHBlcmZfZXZlbnQgKmV2OworCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKKwlzaXplX3QgbnIgPSAwLCBpID0gMCwgc3osIG1heF9uciwgbjsKKwlpbnQgZXJyOworCisJcHJfZGVidWcyKCJTeW50aGVzaXppbmcgaWQgaW5kZXhcbiIpOworCisJbWF4X25yID0gKFVJTlQxNl9NQVggLSBzaXplb2Yoc3RydWN0IGlkX2luZGV4X2V2ZW50KSkgLworCQkgc2l6ZW9mKHN0cnVjdCBpZF9pbmRleF9lbnRyeSk7CisKKwlldmxpc3RfX2Zvcl9lYWNoKGV2bGlzdCwgZXZzZWwpCisJCW5yICs9IGV2c2VsLT5pZHM7CisKKwluID0gbnIgPiBtYXhfbnIgPyBtYXhfbnIgOiBucjsKKwlzeiA9IHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZXZlbnQpICsgbiAqIHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZW50cnkpOworCWV2ID0gemFsbG9jKHN6KTsKKwlpZiAoIWV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWV2LT5pZF9pbmRleC5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX0lEX0lOREVYOworCWV2LT5pZF9pbmRleC5oZWFkZXIuc2l6ZSA9IHN6OworCWV2LT5pZF9pbmRleC5uciA9IG47CisKKwlldmxpc3RfX2Zvcl9lYWNoKGV2bGlzdCwgZXZzZWwpIHsKKwkJdTMyIGo7CisKKwkJZm9yIChqID0gMDsgaiA8IGV2c2VsLT5pZHM7IGorKykgeworCQkJc3RydWN0IGlkX2luZGV4X2VudHJ5ICplOworCQkJc3RydWN0IHBlcmZfc2FtcGxlX2lkICpzaWQ7CisKKwkJCWlmIChpID49IG4pIHsKKwkJCQllcnIgPSBwcm9jZXNzKHRvb2wsIGV2LCBOVUxMLCBtYWNoaW5lKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlnb3RvIG91dF9lcnI7CisJCQkJbnIgLT0gbjsKKwkJCQlpID0gMDsKKwkJCX0KKworCQkJZSA9ICZldi0+aWRfaW5kZXguZW50cmllc1tpKytdOworCisJCQllLT5pZCA9IGV2c2VsLT5pZFtqXTsKKworCQkJc2lkID0gcGVyZl9ldmxpc3RfX2lkMnNpZChldmxpc3QsIGUtPmlkKTsKKwkJCWlmICghc2lkKSB7CisJCQkJZnJlZShldik7CisJCQkJcmV0dXJuIC1FTk9FTlQ7CisJCQl9CisKKwkJCWUtPmlkeCA9IHNpZC0+aWR4OworCQkJZS0+Y3B1ID0gc2lkLT5jcHU7CisJCQllLT50aWQgPSBzaWQtPnRpZDsKKwkJfQorCX0KKworCXN6ID0gc2l6ZW9mKHN0cnVjdCBpZF9pbmRleF9ldmVudCkgKyBuciAqIHNpemVvZihzdHJ1Y3QgaWRfaW5kZXhfZW50cnkpOworCWV2LT5pZF9pbmRleC5oZWFkZXIuc2l6ZSA9IHN6OworCWV2LT5pZF9pbmRleC5uciA9IG5yOworCisJZXJyID0gcHJvY2Vzcyh0b29sLCBldiwgTlVMTCwgbWFjaGluZSk7CitvdXRfZXJyOgorCWZyZWUoZXYpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmggYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCmluZGV4IGE0YmU4NTEuLmRjMjZlYmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaApAQCAtMTI2LDQgKzEyNiwxOSBAQAogZXh0ZXJuIHZvbGF0aWxlIGludCBzZXNzaW9uX2RvbmU7CiAKICNkZWZpbmUgc2Vzc2lvbl9kb25lKCkJQUNDRVNTX09OQ0Uoc2Vzc2lvbl9kb25lKQorCitpbnQgcGVyZl9zZXNzaW9uX19kZWxpdmVyX3N5bnRoX2V2ZW50KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICAgICAgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkJICAgICAgc3RydWN0IHBlcmZfdG9vbCAqdG9vbCk7CisKK2ludCBwZXJmX2V2ZW50X19wcm9jZXNzX2lkX2luZGV4KHN0cnVjdCBwZXJmX3Rvb2wgKnRvb2wsCisJCQkJIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKKworaW50IHBlcmZfZXZlbnRfX3N5bnRoZXNpemVfaWRfaW5kZXgoc3RydWN0IHBlcmZfdG9vbCAqdG9vbCwKKwkJCQkgICAgcGVyZl9ldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJICAgIHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LAorCQkJCSAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CisKICNlbmRpZiAvKiBfX1BFUkZfU0VTU0lPTl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc29ydC5jIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuYwppbmRleCA5NDAyODg1Li45MTM5ZGRhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc29ydC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMKQEAgLTI5MSw3ICsyOTEsOCBAQAogCQllbHNlIHsKIAkJCXN0cnVjdCBtYXAgKm1hcCA9IGxlZnQtPm1zLm1hcDsKIAkJCWxlZnQtPnNyY2xpbmUgPSBnZXRfc3JjbGluZShtYXAtPmRzbywKLQkJCQkJICAgIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgbGVmdC0+aXApKTsKKwkJCQkJICAgbWFwX19yaXBfMm9iamR1bXAobWFwLCBsZWZ0LT5pcCksCisJCQkJCQkgICAgbGVmdC0+bXMuc3ltLCB0cnVlKTsKIAkJfQogCX0KIAlpZiAoIXJpZ2h0LT5zcmNsaW5lKSB7CkBAIC0zMDAsNyArMzAxLDggQEAKIAkJZWxzZSB7CiAJCQlzdHJ1Y3QgbWFwICptYXAgPSByaWdodC0+bXMubWFwOwogCQkJcmlnaHQtPnNyY2xpbmUgPSBnZXRfc3JjbGluZShtYXAtPmRzbywKLQkJCQkJICAgIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgcmlnaHQtPmlwKSk7CisJCQkJCSAgICAgbWFwX19yaXBfMm9iamR1bXAobWFwLCByaWdodC0+aXApLAorCQkJCQkJICAgICByaWdodC0+bXMuc3ltLCB0cnVlKTsKIAkJfQogCX0KIAlyZXR1cm4gc3RyY21wKHJpZ2h0LT5zcmNsaW5lLCBsZWZ0LT5zcmNsaW5lKTsKQEAgLTMwOSw3ICszMTEsNyBAQAogc3RhdGljIGludCBoaXN0X2VudHJ5X19zcmNsaW5lX3NucHJpbnRmKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgY2hhciAqYmYsCiAJCQkJCXNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgd2lkdGgpCiB7Ci0JcmV0dXJuIHJlcHNlcF9zbnByaW50ZihiZiwgc2l6ZSwgIiUqLiotcyIsIHdpZHRoLCB3aWR0aCwgaGUtPnNyY2xpbmUpOworCXJldHVybiByZXBzZXBfc25wcmludGYoYmYsIHNpemUsICIlLSouKnMiLCB3aWR0aCwgd2lkdGgsIGhlLT5zcmNsaW5lKTsKIH0KIAogc3RydWN0IHNvcnRfZW50cnkgc29ydF9zcmNsaW5lID0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NyY2xpbmUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zcmNsaW5lLmMKaW5kZXggZjNlNGJjNS4uZTczYjZhNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NyY2xpbmUuYworKysgYi90b29scy9wZXJmL3V0aWwvc3JjbGluZS5jCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgInV0aWwvdXRpbC5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKIAorI2luY2x1ZGUgInN5bWJvbC5oIgorCiAjaWZkZWYgSEFWRV9MSUJCRkRfU1VQUE9SVAogCiAvKgpAQCAtMjUwLDcgKzI1Miw4IEBACiAgKi8KICNkZWZpbmUgQTJMX0ZBSUxfTElNSVQgMTIzCiAKLWNoYXIgKmdldF9zcmNsaW5lKHN0cnVjdCBkc28gKmRzbywgdW5zaWduZWQgbG9uZyBhZGRyKQorY2hhciAqZ2V0X3NyY2xpbmUoc3RydWN0IGRzbyAqZHNvLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBzeW1ib2wgKnN5bSwKKwkJICBib29sIHNob3dfc3ltKQogewogCWNoYXIgKmZpbGUgPSBOVUxMOwogCXVuc2lnbmVkIGxpbmUgPSAwOwpAQCAtMjU4LDcgKzI2MSw3IEBACiAJY29uc3QgY2hhciAqZHNvX25hbWU7CiAKIAlpZiAoIWRzby0+aGFzX3NyY2xpbmUpCi0JCXJldHVybiBTUkNMSU5FX1VOS05PV047CisJCWdvdG8gb3V0OwogCiAJaWYgKGRzby0+c3ltc3JjX2ZpbGVuYW1lKQogCQlkc29fbmFtZSA9IGRzby0+c3ltc3JjX2ZpbGVuYW1lOwpAQCAtMjc0LDcgKzI3Nyw3IEBACiAJaWYgKCFhZGRyMmxpbmUoZHNvX25hbWUsIGFkZHIsICZmaWxlLCAmbGluZSwgZHNvKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoYXNwcmludGYoJnNyY2xpbmUsICIlczoldSIsIGZpbGUsIGxpbmUpIDwgMCkgeworCWlmIChhc3ByaW50Zigmc3JjbGluZSwgIiVzOiV1IiwgYmFzZW5hbWUoZmlsZSksIGxpbmUpIDwgMCkgewogCQlmcmVlKGZpbGUpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yODksNyArMjkyLDEzIEBACiAJCWRzby0+aGFzX3NyY2xpbmUgPSAwOwogCQlkc29fX2ZyZWVfYTJsKGRzbyk7CiAJfQotCXJldHVybiBTUkNMSU5FX1VOS05PV047CisJaWYgKHN5bSkgeworCQlpZiAoYXNwcmludGYoJnNyY2xpbmUsICIlcyslbGQiLCBzaG93X3N5bSA/IHN5bS0+bmFtZSA6ICIiLAorCQkJCQlhZGRyIC0gc3ltLT5zdGFydCkgPCAwKQorCQkJcmV0dXJuIFNSQ0xJTkVfVU5LTk9XTjsKKwl9IGVsc2UgaWYgKGFzcHJpbnRmKCZzcmNsaW5lLCAiJXNbJWx4XSIsIGRzby0+c2hvcnRfbmFtZSwgYWRkcikgPCAwKQorCQlyZXR1cm4gU1JDTElORV9VTktOT1dOOworCXJldHVybiBzcmNsaW5lOwogfQogCiB2b2lkIGZyZWVfc3JjbGluZShjaGFyICpzcmNsaW5lKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1lbGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmMKaW5kZXggMWUyM2E1Yi4uMDZmY2QxYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1lbGYuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jCkBAIC0xMSw2ICsxMSwyNyBAQAogI2luY2x1ZGUgPHN5bWJvbC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgImRlYnVnLmgiCiAKKyNpZmRlZiBIQVZFX0NQTFVTX0RFTUFOR0xFX1NVUFBPUlQKK2V4dGVybiBjaGFyICpjcGx1c19kZW1hbmdsZShjb25zdCBjaGFyICosIGludCk7CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqYmZkX2RlbWFuZ2xlKHZvaWQgX19tYXliZV91bnVzZWQgKnYsIGNvbnN0IGNoYXIgKmMsIGludCBpKQoreworCXJldHVybiBjcGx1c19kZW1hbmdsZShjLCBpKTsKK30KKyNlbHNlCisjaWZkZWYgTk9fREVNQU5HTEUKK3N0YXRpYyBpbmxpbmUgY2hhciAqYmZkX2RlbWFuZ2xlKHZvaWQgX19tYXliZV91bnVzZWQgKnYsCisJCQkJIGNvbnN0IGNoYXIgX19tYXliZV91bnVzZWQgKmMsCisJCQkJIGludCBfX21heWJlX3VudXNlZCBpKQoreworCXJldHVybiBOVUxMOworfQorI2Vsc2UKKyNkZWZpbmUgUEFDS0FHRSAncGVyZicKKyNpbmNsdWRlIDxiZmQuaD4KKyNlbmRpZgorI2VuZGlmCisKICNpZm5kZWYgSEFWRV9FTEZfR0VUUEhEUk5VTV9TVVBQT1JUCiBzdGF0aWMgaW50IGVsZl9nZXRwaGRybnVtKEVsZiAqZWxmLCBzaXplX3QgKmRzdCkKIHsKQEAgLTU0Niw2ICs1NjcsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkZWNvbXByZXNzX2ttb2R1bGUoc3RydWN0IGRzbyAqZHNvLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgZW51bSBkc29fYmluYXJ5X3R5cGUgdHlwZSkKK3sKKwlpbnQgZmQ7CisJY29uc3QgY2hhciAqZXh0ID0gc3RycmNocihuYW1lLCAnLicpOworCWNoYXIgdG1wYnVmW10gPSAiL3RtcC9wZXJmLWttb2QtWFhYWFhYIjsKKworCWlmICgodHlwZSAhPSBEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0tNT0RVTEVfQ09NUCAmJgorCSAgICAgdHlwZSAhPSBEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEVfQ09NUCkgfHwKKwkgICAgdHlwZSAhPSBkc28tPnN5bXRhYl90eXBlKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWV4dCB8fCAhaXNfc3VwcG9ydGVkX2NvbXByZXNzaW9uKGV4dCArIDEpKQorCQlyZXR1cm4gLTE7CisKKwlmZCA9IG1rc3RlbXAodG1wYnVmKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWRlY29tcHJlc3NfdG9fZmlsZShleHQgKyAxLCBuYW1lLCBmZCkpIHsKKwkJY2xvc2UoZmQpOworCQlmZCA9IC0xOworCX0KKworCXVubGluayh0bXBidWYpOworCisJcmV0dXJuIGZkOworfQorCiBib29sIHN5bXNyY19fcG9zc2libHlfcnVudGltZShzdHJ1Y3Qgc3ltc3JjICpzcykKIHsKIAlyZXR1cm4gc3MtPmR5bnN5bSB8fCBzcy0+b3Bkc2VjOwpAQCAtNTcxLDcgKzYyMSwxMSBAQAogCUVsZiAqZWxmOwogCWludCBmZDsKIAotCWZkID0gb3BlbihuYW1lLCBPX1JET05MWSk7CisJaWYgKGRzb19fbmVlZHNfZGVjb21wcmVzcyhkc28pKQorCQlmZCA9IGRlY29tcHJlc3Nfa21vZHVsZShkc28sIG5hbWUsIHR5cGUpOworCWVsc2UKKwkJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKKwogCWlmIChmZCA8IDApCiAJCXJldHVybiAtMTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1taW5pbWFsLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLW1pbmltYWwuYwppbmRleCBjOTU0MWZlLi5mYTU4NWM2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLW1pbmltYWwuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLW1pbmltYWwuYwpAQCAtMzQxLDcgKzM0MSw2IEBACiAKIAlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoc3MtPm5hbWUsIGJ1aWxkX2lkLCBCVUlMRF9JRF9TSVpFKSA+IDApIHsKIAkJZHNvX19zZXRfYnVpbGRfaWQoZHNvLCBidWlsZF9pZCk7Ci0JCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCAwNzgzMzExLi5jMjRjNWI4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC01MSw3ICs1MSw5IEBACiAJRFNPX0JJTkFSWV9UWVBFX19CVUlMRElEX0RFQlVHSU5GTywKIAlEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0RTTywKIAlEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEUsCisJRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVAsCiAJRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFLAorCURTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV9DT01QLAogCURTT19CSU5BUllfVFlQRV9fT1BFTkVNQkVEREVEX0RFQlVHSU5GTywKIAlEU09fQklOQVJZX1RZUEVfX05PVF9GT1VORCwKIH07CkBAIC0xMzAwLDcgKzEzMDIsOSBAQAogCQlyZXR1cm4gZHNvLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMOwogCiAJY2FzZSBEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEU6CisJY2FzZSBEU09fQklOQVJZX1RZUEVfX0dVRVNUX0tNT0RVTEVfQ09NUDoKIAljYXNlIERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRToKKwljYXNlIERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV9DT01QOgogCQkvKgogCQkgKiBrZXJuZWwgbW9kdWxlcyBrbm93IHRoZWlyIHN5bXRhYiB0eXBlIC0gaXQncyBzZXQgd2hlbgogCQkgKiBjcmVhdGluZyBhIG1vZHVsZSBkc28gaW4gbWFjaGluZV9fbmV3X21vZHVsZSgpLgpAQCAtMTM2OCw3ICsxMzcyLDkgQEAKIAkJcmV0dXJuIC0xOwogCiAJa21vZCA9IGRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFIHx8Ci0JCWRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFOworCQlkc28tPnN5bXRhYl90eXBlID09IERTT19CSU5BUllfVFlQRV9fU1lTVEVNX1BBVEhfS01PRFVMRV9DT01QIHx8CisJCWRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFIHx8CisJCWRzby0+c3ltdGFiX3R5cGUgPT0gRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVA7CiAKIAkvKgogCSAqIEl0ZXJhdGUgb3ZlciBjYW5kaWRhdGUgZGVidWcgaW1hZ2VzLgpAQCAtMTUwNSwxMiArMTUxMSwxMCBAQAogCQkJICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgaSwgZXJyID0gMDsKLQljaGFyICpmaWxlbmFtZTsKKwljaGFyICpmaWxlbmFtZSA9IE5VTEw7CiAKLQlwcl9kZWJ1ZygiTG9va2luZyBhdCB0aGUgdm1saW51eF9wYXRoICglZCBlbnRyaWVzIGxvbmcpXG4iLAotCQkgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzICsgMSk7Ci0KLQlmaWxlbmFtZSA9IGRzb19fYnVpbGRfaWRfZmlsZW5hbWUoZHNvLCBOVUxMLCAwKTsKKwlpZiAoIXN5bWJvbF9jb25mLmlnbm9yZV92bWxpbnV4X2J1aWxkaWQpCisJCWZpbGVuYW1lID0gZHNvX19idWlsZF9pZF9maWxlbmFtZShkc28sIE5VTEwsIDApOwogCWlmIChmaWxlbmFtZSAhPSBOVUxMKSB7CiAJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KGRzbywgbWFwLCBmaWxlbmFtZSwgdHJ1ZSwgZmlsdGVyKTsKIAkJaWYgKGVyciA+IDApCkBAIC0xNTE4LDYgKzE1MjIsOSBAQAogCQlmcmVlKGZpbGVuYW1lKTsKIAl9CiAKKwlwcl9kZWJ1ZygiTG9va2luZyBhdCB0aGUgdm1saW51eF9wYXRoICglZCBlbnRyaWVzIGxvbmcpXG4iLAorCQkgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzICsgMSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzOyArK2kpIHsKIAkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoZHNvLCBtYXAsIHZtbGludXhfcGF0aFtpXSwgZmFsc2UsIGZpbHRlcik7CiAJCWlmIChlcnIgPiAwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCmluZGV4IGViMmMxOWIuLjlkNjAyZTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKQEAgLTIzLDI3ICsyMyw2IEBACiAKICNpbmNsdWRlICJkc28uaCIKIAotI2lmZGVmIEhBVkVfQ1BMVVNfREVNQU5HTEVfU1VQUE9SVAotZXh0ZXJuIGNoYXIgKmNwbHVzX2RlbWFuZ2xlKGNvbnN0IGNoYXIgKiwgaW50KTsKLQotc3RhdGljIGlubGluZSBjaGFyICpiZmRfZGVtYW5nbGUodm9pZCBfX21heWJlX3VudXNlZCAqdiwgY29uc3QgY2hhciAqYywgaW50IGkpCi17Ci0JcmV0dXJuIGNwbHVzX2RlbWFuZ2xlKGMsIGkpOwotfQotI2Vsc2UKLSNpZmRlZiBOT19ERU1BTkdMRQotc3RhdGljIGlubGluZSBjaGFyICpiZmRfZGVtYW5nbGUodm9pZCBfX21heWJlX3VudXNlZCAqdiwKLQkJCQkgY29uc3QgY2hhciBfX21heWJlX3VudXNlZCAqYywKLQkJCQkgaW50IF9fbWF5YmVfdW51c2VkIGkpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0jZWxzZQotI2RlZmluZSBQQUNLQUdFICdwZXJmJwotI2luY2x1ZGUgPGJmZC5oPgotI2VuZGlmCi0jZW5kaWYKLQogLyoKICAqIGxpYmVsZiAwLjgueCBhbmQgZWFybGllciBkbyBub3Qgc3VwcG9ydCBFTEZfQ19SRUFEX01NQVA7CiAgKiBmb3IgbmV3ZXIgdmVyc2lvbnMgd2UgY2FuIHVzZSBtbWFwIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2U6CkBAIC0xMDUsNiArODQsNyBAQAogCXVuc2lnbmVkIHNob3J0CW5yX2V2ZW50czsKIAlib29sCQl0cnlfdm1saW51eF9wYXRoLAogCQkJaWdub3JlX3ZtbGludXgsCisJCQlpZ25vcmVfdm1saW51eF9idWlsZGlkLAogCQkJc2hvd19rZXJuZWxfcGF0aCwKIAkJCXVzZV9tb2R1bGVzLAogCQkJc29ydF9ieV9uYW1lLApAQCAtMTIyLDcgKzEwMiw4IEBACiAJCQlkZW1hbmdsZSwKIAkJCWRlbWFuZ2xlX2tlcm5lbCwKIAkJCWZpbHRlcl9yZWxhdGl2ZSwKLQkJCXNob3dfaGlzdF9oZWFkZXJzOworCQkJc2hvd19oaXN0X2hlYWRlcnMsCisJCQlicmFuY2hfY2FsbHN0YWNrOwogCWNvbnN0IGNoYXIJKnZtbGludXhfbmFtZSwKIAkJCSprYWxsc3ltc19uYW1lLAogCQkJKnNvdXJjZV9wcmVmaXgsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLXN0YWNrLmMgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLXN0YWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVkNTlhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQtc3RhY2suYwpAQCAtMCwwICsxLDc0NyBAQAorLyoKKyAqIHRocmVhZC1zdGFjay5jOiBTeW50aGVzaXplIGEgdGhyZWFkJ3Mgc3RhY2sgdXNpbmcgY2FsbCAvIHJldHVybiBldmVudHMKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAibWFjaGluZS5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInN5bWJvbC5oIgorI2luY2x1ZGUgImNvbW0uaCIKKyNpbmNsdWRlICJ0aHJlYWQtc3RhY2suaCIKKworI2RlZmluZSBDQUxMX1BBVEhfQkxPQ0tfU0hJRlQgOAorI2RlZmluZSBDQUxMX1BBVEhfQkxPQ0tfU0laRSAoMSA8PCBDQUxMX1BBVEhfQkxPQ0tfU0hJRlQpCisjZGVmaW5lIENBTExfUEFUSF9CTE9DS19NQVNLIChDQUxMX1BBVEhfQkxPQ0tfU0laRSAtIDEpCisKK3N0cnVjdCBjYWxsX3BhdGhfYmxvY2sgeworCXN0cnVjdCBjYWxsX3BhdGggY3BbQ0FMTF9QQVRIX0JMT0NLX1NJWkVdOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK307CisKKy8qKgorICogc3RydWN0IGNhbGxfcGF0aF9yb290IC0gcm9vdCBvZiBhbGwgY2FsbCBwYXRocy4KKyAqIEBjYWxsX3BhdGg6IHJvb3QgY2FsbCBwYXRoCisgKiBAYmxvY2tzOiBsaXN0IG9mIGJsb2NrcyB0byBzdG9yZSBjYWxsIHBhdGhzCisgKiBAbmV4dDogbmV4dCBmcmVlIHNwYWNlCisgKiBAc3o6IG51bWJlciBvZiBzcGFjZXMKKyAqLworc3RydWN0IGNhbGxfcGF0aF9yb290IHsKKwlzdHJ1Y3QgY2FsbF9wYXRoIGNhbGxfcGF0aDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2NrczsKKwlzaXplX3QgbmV4dDsKKwlzaXplX3Qgc3o7Cit9OworCisvKioKKyAqIHN0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgLSBwcm92aWRlcyBhIGNhbGwtYmFjayB0byBjb25zdW1lIGNhbGwtcmV0dXJuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgKiBAY3ByOiBjYWxsIHBhdGggcm9vdAorICogQHByb2Nlc3M6IGNhbGwtYmFjayB0aGF0IGFjY2VwdHMgY2FsbC9yZXR1cm4gaW5mb3JtYXRpb24KKyAqIEBkYXRhOiBhbm9ueW1vdXMgZGF0YSBmb3IgY2FsbC1iYWNrCisgKi8KK3N0cnVjdCBjYWxsX3JldHVybl9wcm9jZXNzb3IgeworCXN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByOworCWludCAoKnByb2Nlc3MpKHN0cnVjdCBjYWxsX3JldHVybiAqY3IsIHZvaWQgKmRhdGEpOworCXZvaWQgKmRhdGE7Cit9OworCisjZGVmaW5lIFNUQUNLX0dST1dUSCAyMDQ4CisKKy8qKgorICogc3RydWN0IHRocmVhZF9zdGFja19lbnRyeSAtIHRocmVhZCBzdGFjayBlbnRyeS4KKyAqIEByZXRfYWRkcjogcmV0dXJuIGFkZHJlc3MKKyAqIEB0aW1lc3RhbXA6IHRpbWVzdGFtcCAoaWYga25vd24pCisgKiBAcmVmOiBleHRlcm5hbCByZWZlcmVuY2UgKGUuZy4gZGJfaWQgb2Ygc2FtcGxlKQorICogQGJyYW5jaF9jb3VudDogdGhlIGJyYW5jaCBjb3VudCB3aGVuIHRoZSBlbnRyeSB3YXMgY3JlYXRlZAorICogQGNwOiBjYWxsIHBhdGgKKyAqIEBub19jYWxsOiBhICdjYWxsJyB3YXMgbm90IHNlZW4KKyAqLworc3RydWN0IHRocmVhZF9zdGFja19lbnRyeSB7CisJdTY0IHJldF9hZGRyOworCXU2NCB0aW1lc3RhbXA7CisJdTY0IHJlZjsKKwl1NjQgYnJhbmNoX2NvdW50OworCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCWJvb2wgbm9fY2FsbDsKK307CisKKy8qKgorICogc3RydWN0IHRocmVhZF9zdGFjayAtIHRocmVhZCBzdGFjayBjb25zdHJ1Y3RlZCBmcm9tICdjYWxsJyBhbmQgJ3JldHVybicKKyAqICAgICAgICAgICAgICAgICAgICAgICBicmFuY2ggc2FtcGxlcy4KKyAqIEBzdGFjazogYXJyYXkgdGhhdCBob2xkcyB0aGUgc3RhY2sKKyAqIEBjbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzdGFjaworICogQHN6OiBjdXJyZW50IG1heGltdW0gc3RhY2sgc2l6ZQorICogQHRyYWNlX25yOiBjdXJyZW50IHRyYWNlIG51bWJlcgorICogQGJyYW5jaF9jb3VudDogcnVubmluZyBicmFuY2ggY291bnQKKyAqIEBrZXJuZWxfc3RhcnQ6IGtlcm5lbCBzdGFydCBhZGRyZXNzCisgKiBAbGFzdF90aW1lOiBsYXN0IHRpbWVzdGFtcAorICogQGNycDogY2FsbC9yZXR1cm4gcHJvY2Vzc29yCisgKiBAY29tbTogY3VycmVudCBjb21tCisgKi8KK3N0cnVjdCB0aHJlYWRfc3RhY2sgeworCXN0cnVjdCB0aHJlYWRfc3RhY2tfZW50cnkgKnN0YWNrOworCXNpemVfdCBjbnQ7CisJc2l6ZV90IHN6OworCXU2NCB0cmFjZV9ucjsKKwl1NjQgYnJhbmNoX2NvdW50OworCXU2NCBrZXJuZWxfc3RhcnQ7CisJdTY0IGxhc3RfdGltZTsKKwlzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yICpjcnA7CisJc3RydWN0IGNvbW0gKmNvbW07Cit9OworCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fZ3JvdyhzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cykKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0YWNrX2VudHJ5ICpuZXdfc3RhY2s7CisJc2l6ZV90IHN6LCBuZXdfc3o7CisKKwluZXdfc3ogPSB0cy0+c3ogKyBTVEFDS19HUk9XVEg7CisJc3ogPSBuZXdfc3ogKiBzaXplb2Yoc3RydWN0IHRocmVhZF9zdGFja19lbnRyeSk7CisKKwluZXdfc3RhY2sgPSByZWFsbG9jKHRzLT5zdGFjaywgc3opOworCWlmICghbmV3X3N0YWNrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRzLT5zdGFjayA9IG5ld19zdGFjazsKKwl0cy0+c3ogPSBuZXdfc3o7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRocmVhZF9zdGFja19fbmV3KHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCQkJICAgICAgc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwKQoreworCXN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzOworCisJdHMgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aHJlYWRfc3RhY2spKTsKKwlpZiAoIXRzKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh0aHJlYWRfc3RhY2tfX2dyb3codHMpKSB7CisJCWZyZWUodHMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAodGhyZWFkLT5tZyAmJiB0aHJlYWQtPm1nLT5tYWNoaW5lKQorCQl0cy0+a2VybmVsX3N0YXJ0ID0gbWFjaGluZV9fa2VybmVsX3N0YXJ0KHRocmVhZC0+bWctPm1hY2hpbmUpOworCWVsc2UKKwkJdHMtPmtlcm5lbF9zdGFydCA9IDFVTEwgPDwgNjM7CisJdHMtPmNycCA9IGNycDsKKworCXJldHVybiB0czsKK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX3B1c2goc3RydWN0IHRocmVhZF9zdGFjayAqdHMsIHU2NCByZXRfYWRkcikKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICh0cy0+Y250ID09IHRzLT5zeikgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX2dyb3codHMpOworCQlpZiAoZXJyKSB7CisJCQlwcl93YXJuaW5nKCJPdXQgb2YgbWVtb3J5OiBkaXNjYXJkaW5nIHRocmVhZCBzdGFja1xuIik7CisJCQl0cy0+Y250ID0gMDsKKwkJfQorCX0KKworCXRzLT5zdGFja1t0cy0+Y250KytdLnJldF9hZGRyID0gcmV0X2FkZHI7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfX3BvcChzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cywgdTY0IHJldF9hZGRyKQoreworCXNpemVfdCBpOworCisJLyoKKwkgKiBJbiBzb21lIGNhc2VzIHRoZXJlIG1heSBiZSBmdW5jdGlvbnMgd2hpY2ggYXJlIG5vdCBzZWVuIHRvIHJldHVybi4KKwkgKiBGb3IgZXhhbXBsZSB3aGVuIHNldGptcCAvIGxvbmdqbXAgaGFzIGJlZW4gdXNlZC4gIE9yIHRoZSBwZXJmIGNvbnRleHQKKwkgKiBzd2l0Y2ggaW4gdGhlIGtlcm5lbCB3aGljaCBkb2Vzbid0IHN0b3AgYW5kIHN0YXJ0IHRyYWNpbmcgaW4gZXhhY3RseQorCSAqIHRoZSBzYW1lIGNvZGUgcGF0aC4gIFdoZW4gdGhhdCBoYXBwZW5zIHRoZSByZXR1cm4gYWRkcmVzcyB3aWxsIGJlCisJICogZnVydGhlciBkb3duIHRoZSBzdGFjay4gIElmIHRoZSByZXR1cm4gYWRkcmVzcyBpcyBub3QgZm91bmQgYXQgYWxsLAorCSAqIHdlIGFzc3VtZSB0aGUgb3Bwb3NpdGUgKGkuZS4gdGhpcyBpcyBhIHJldHVybiBmb3IgYSBjYWxsIHRoYXQgd2Fzbid0CisJICogc2VlbiBmb3Igc29tZSByZWFzb24pIGFuZCBsZWF2ZSB0aGUgc3RhY2sgYWxvbmUuCisJICovCisJZm9yIChpID0gdHMtPmNudDsgaTsgKSB7CisJCWlmICh0cy0+c3RhY2tbLS1pXS5yZXRfYWRkciA9PSByZXRfYWRkcikgeworCQkJdHMtPmNudCA9IGk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyBib29sIHRocmVhZF9zdGFja19faW5fa2VybmVsKHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzKQoreworCWlmICghdHMtPmNudCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRzLT5zdGFja1t0cy0+Y250IC0gMV0uY3AtPmluX2tlcm5lbDsKK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCQkgICAgIHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzLCBzaXplX3QgaWR4LAorCQkJCSAgICAgdTY0IHRpbWVzdGFtcCwgdTY0IHJlZiwgYm9vbCBub19yZXR1cm4pCit7CisJc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwID0gdHMtPmNycDsKKwlzdHJ1Y3QgdGhyZWFkX3N0YWNrX2VudHJ5ICp0c2U7CisJc3RydWN0IGNhbGxfcmV0dXJuIGNyID0geworCQkudGhyZWFkID0gdGhyZWFkLAorCQkuY29tbSA9IHRzLT5jb21tLAorCQkuZGJfaWQgPSAwLAorCX07CisKKwl0c2UgPSAmdHMtPnN0YWNrW2lkeF07CisJY3IuY3AgPSB0c2UtPmNwOworCWNyLmNhbGxfdGltZSA9IHRzZS0+dGltZXN0YW1wOworCWNyLnJldHVybl90aW1lID0gdGltZXN0YW1wOworCWNyLmJyYW5jaF9jb3VudCA9IHRzLT5icmFuY2hfY291bnQgLSB0c2UtPmJyYW5jaF9jb3VudDsKKwljci5jYWxsX3JlZiA9IHRzZS0+cmVmOworCWNyLnJldHVybl9yZWYgPSByZWY7CisJaWYgKHRzZS0+bm9fY2FsbCkKKwkJY3IuZmxhZ3MgfD0gQ0FMTF9SRVRVUk5fTk9fQ0FMTDsKKwlpZiAobm9fcmV0dXJuKQorCQljci5mbGFncyB8PSBDQUxMX1JFVFVSTl9OT19SRVRVUk47CisKKwlyZXR1cm4gY3JwLT5wcm9jZXNzKCZjciwgY3JwLT5kYXRhKTsKK30KKworc3RhdGljIGludCB0aHJlYWRfc3RhY2tfX2ZsdXNoKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IHRocmVhZF9zdGFjayAqdHMpCit7CisJc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwID0gdHMtPmNycDsKKwlpbnQgZXJyOworCisJaWYgKCFjcnApIHsKKwkJdHMtPmNudCA9IDA7CisJCXJldHVybiAwOworCX0KKworCXdoaWxlICh0cy0+Y250KSB7CisJCWVyciA9IHRocmVhZF9zdGFja19fY2FsbF9yZXR1cm4odGhyZWFkLCB0cywgLS10cy0+Y250LAorCQkJCQkJdHMtPmxhc3RfdGltZSwgMCwgdHJ1ZSk7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigiRXJyb3IgZmx1c2hpbmcgdGhyZWFkIHN0YWNrIVxuIik7CisJCQl0cy0+Y250ID0gMDsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHRocmVhZF9zdGFja19fZXZlbnQoc3RydWN0IHRocmVhZCAqdGhyZWFkLCB1MzIgZmxhZ3MsIHU2NCBmcm9tX2lwLAorCQkJdTY0IHRvX2lwLCB1MTYgaW5zbl9sZW4sIHU2NCB0cmFjZV9ucikKK3sKKwlpZiAoIXRocmVhZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXRocmVhZC0+dHMpIHsKKwkJdGhyZWFkLT50cyA9IHRocmVhZF9zdGFja19fbmV3KHRocmVhZCwgTlVMTCk7CisJCWlmICghdGhyZWFkLT50cykgeworCQkJcHJfd2FybmluZygiT3V0IG9mIG1lbW9yeTogbm8gdGhyZWFkIHN0YWNrXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXRocmVhZC0+dHMtPnRyYWNlX25yID0gdHJhY2VfbnI7CisJfQorCisJLyoKKwkgKiBXaGVuIHRoZSB0cmFjZSBpcyBkaXNjb250aW51b3VzLCB0aGUgdHJhY2VfbnIgY2hhbmdlcy4gIEluIHRoYXQgY2FzZQorCSAqIHRoZSBzdGFjayBtaWdodCBiZSBjb21wbGV0ZWx5IGludmFsaWQuICBCZXR0ZXIgdG8gcmVwb3J0IG5vdGhpbmcgdGhhbgorCSAqIHRvIHJlcG9ydCBzb21ldGhpbmcgbWlzbGVhZGluZywgc28gZmx1c2ggdGhlIHN0YWNrLgorCSAqLworCWlmICh0cmFjZV9uciAhPSB0aHJlYWQtPnRzLT50cmFjZV9ucikgeworCQlpZiAodGhyZWFkLT50cy0+dHJhY2VfbnIpCisJCQl0aHJlYWRfc3RhY2tfX2ZsdXNoKHRocmVhZCwgdGhyZWFkLT50cyk7CisJCXRocmVhZC0+dHMtPnRyYWNlX25yID0gdHJhY2VfbnI7CisJfQorCisJLyogU3RvcCBoZXJlIGlmIHRocmVhZF9zdGFja19fcHJvY2VzcygpIGlzIGluIHVzZSAqLworCWlmICh0aHJlYWQtPnRzLT5jcnApCisJCXJldHVybiAwOworCisJaWYgKGZsYWdzICYgUEVSRl9JUF9GTEFHX0NBTEwpIHsKKwkJdTY0IHJldF9hZGRyOworCisJCWlmICghdG9faXApCisJCQlyZXR1cm4gMDsKKwkJcmV0X2FkZHIgPSBmcm9tX2lwICsgaW5zbl9sZW47CisJCWlmIChyZXRfYWRkciA9PSB0b19pcCkKKwkJCXJldHVybiAwOyAvKiBaZXJvLWxlbmd0aCBjYWxscyBhcmUgZXhjbHVkZWQgKi8KKwkJcmV0dXJuIHRocmVhZF9zdGFja19fcHVzaCh0aHJlYWQtPnRzLCByZXRfYWRkcik7CisJfSBlbHNlIGlmIChmbGFncyAmIFBFUkZfSVBfRkxBR19SRVRVUk4pIHsKKwkJaWYgKCFmcm9tX2lwKQorCQkJcmV0dXJuIDA7CisJCXRocmVhZF9zdGFja19fcG9wKHRocmVhZC0+dHMsIHRvX2lwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0aHJlYWRfc3RhY2tfX3NldF90cmFjZV9ucihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHU2NCB0cmFjZV9ucikKK3sKKwlpZiAoIXRocmVhZCB8fCAhdGhyZWFkLT50cykKKwkJcmV0dXJuOworCisJaWYgKHRyYWNlX25yICE9IHRocmVhZC0+dHMtPnRyYWNlX25yKSB7CisJCWlmICh0aHJlYWQtPnRzLT50cmFjZV9ucikKKwkJCXRocmVhZF9zdGFja19fZmx1c2godGhyZWFkLCB0aHJlYWQtPnRzKTsKKwkJdGhyZWFkLT50cy0+dHJhY2VfbnIgPSB0cmFjZV9ucjsKKwl9Cit9CisKK3ZvaWQgdGhyZWFkX3N0YWNrX19mcmVlKHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlpZiAodGhyZWFkLT50cykgeworCQl0aHJlYWRfc3RhY2tfX2ZsdXNoKHRocmVhZCwgdGhyZWFkLT50cyk7CisJCXpmcmVlKCZ0aHJlYWQtPnRzLT5zdGFjayk7CisJCXpmcmVlKCZ0aHJlYWQtPnRzKTsKKwl9Cit9CisKK3ZvaWQgdGhyZWFkX3N0YWNrX19zYW1wbGUoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwKKwkJCSAgc2l6ZV90IHN6LCB1NjQgaXApCit7CisJc2l6ZV90IGk7CisKKwlpZiAoIXRocmVhZCB8fCAhdGhyZWFkLT50cykKKwkJY2hhaW4tPm5yID0gMTsKKwllbHNlCisJCWNoYWluLT5uciA9IG1pbihzeiwgdGhyZWFkLT50cy0+Y250ICsgMSk7CisKKwljaGFpbi0+aXBzWzBdID0gaXA7CisKKwlmb3IgKGkgPSAxOyBpIDwgY2hhaW4tPm5yOyBpKyspCisJCWNoYWluLT5pcHNbaV0gPSB0aHJlYWQtPnRzLT5zdGFja1t0aHJlYWQtPnRzLT5jbnQgLSBpXS5yZXRfYWRkcjsKK30KKworc3RhdGljIHZvaWQgY2FsbF9wYXRoX19pbml0KHN0cnVjdCBjYWxsX3BhdGggKmNwLCBzdHJ1Y3QgY2FsbF9wYXRoICpwYXJlbnQsCisJCQkgICAgc3RydWN0IHN5bWJvbCAqc3ltLCB1NjQgaXAsIGJvb2wgaW5fa2VybmVsKQoreworCWNwLT5wYXJlbnQgPSBwYXJlbnQ7CisJY3AtPnN5bSA9IHN5bTsKKwljcC0+aXAgPSBzeW0gPyAwIDogaXA7CisJY3AtPmRiX2lkID0gMDsKKwljcC0+aW5fa2VybmVsID0gaW5fa2VybmVsOworCVJCX0NMRUFSX05PREUoJmNwLT5yYl9ub2RlKTsKKwljcC0+Y2hpbGRyZW4gPSBSQl9ST09UOworfQorCitzdGF0aWMgc3RydWN0IGNhbGxfcGF0aF9yb290ICpjYWxsX3BhdGhfcm9vdF9fbmV3KHZvaWQpCit7CisJc3RydWN0IGNhbGxfcGF0aF9yb290ICpjcHI7CisKKwljcHIgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjYWxsX3BhdGhfcm9vdCkpOworCWlmICghY3ByKQorCQlyZXR1cm4gTlVMTDsKKwljYWxsX3BhdGhfX2luaXQoJmNwci0+Y2FsbF9wYXRoLCBOVUxMLCBOVUxMLCAwLCBmYWxzZSk7CisJSU5JVF9MSVNUX0hFQUQoJmNwci0+YmxvY2tzKTsKKwlyZXR1cm4gY3ByOworfQorCitzdGF0aWMgdm9pZCBjYWxsX3BhdGhfcm9vdF9fZnJlZShzdHJ1Y3QgY2FsbF9wYXRoX3Jvb3QgKmNwcikKK3sKKwlzdHJ1Y3QgY2FsbF9wYXRoX2Jsb2NrICpwb3MsICpuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgJmNwci0+YmxvY2tzLCBub2RlKSB7CisJCWxpc3RfZGVsKCZwb3MtPm5vZGUpOworCQlmcmVlKHBvcyk7CisJfQorCWZyZWUoY3ByKTsKK30KKworc3RhdGljIHN0cnVjdCBjYWxsX3BhdGggKmNhbGxfcGF0aF9fbmV3KHN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByLAorCQkJCQlzdHJ1Y3QgY2FsbF9wYXRoICpwYXJlbnQsCisJCQkJCXN0cnVjdCBzeW1ib2wgKnN5bSwgdTY0IGlwLAorCQkJCQlib29sIGluX2tlcm5lbCkKK3sKKwlzdHJ1Y3QgY2FsbF9wYXRoX2Jsb2NrICpjcGI7CisJc3RydWN0IGNhbGxfcGF0aCAqY3A7CisJc2l6ZV90IG47CisKKwlpZiAoY3ByLT5uZXh0IDwgY3ByLT5zeikgeworCQljcGIgPSBsaXN0X2xhc3RfZW50cnkoJmNwci0+YmxvY2tzLCBzdHJ1Y3QgY2FsbF9wYXRoX2Jsb2NrLAorCQkJCSAgICAgIG5vZGUpOworCX0gZWxzZSB7CisJCWNwYiA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGNhbGxfcGF0aF9ibG9jaykpOworCQlpZiAoIWNwYikKKwkJCXJldHVybiBOVUxMOworCQlsaXN0X2FkZF90YWlsKCZjcGItPm5vZGUsICZjcHItPmJsb2Nrcyk7CisJCWNwci0+c3ogKz0gQ0FMTF9QQVRIX0JMT0NLX1NJWkU7CisJfQorCisJbiA9IGNwci0+bmV4dCsrICYgQ0FMTF9QQVRIX0JMT0NLX01BU0s7CisJY3AgPSAmY3BiLT5jcFtuXTsKKworCWNhbGxfcGF0aF9faW5pdChjcCwgcGFyZW50LCBzeW0sIGlwLCBpbl9rZXJuZWwpOworCisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgc3RydWN0IGNhbGxfcGF0aCAqY2FsbF9wYXRoX19maW5kbmV3KHN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByLAorCQkJCQkgICAgc3RydWN0IGNhbGxfcGF0aCAqcGFyZW50LAorCQkJCQkgICAgc3RydWN0IHN5bWJvbCAqc3ltLCB1NjQgaXAsIHU2NCBrcykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnA7CisJc3RydWN0IHJiX25vZGUgKm5vZGVfcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgY2FsbF9wYXRoICpjcDsKKwlib29sIGluX2tlcm5lbCA9IGlwID49IGtzOworCisJaWYgKHN5bSkKKwkJaXAgPSAwOworCisJaWYgKCFwYXJlbnQpCisJCXJldHVybiBjYWxsX3BhdGhfX25ldyhjcHIsIHBhcmVudCwgc3ltLCBpcCwgaW5fa2VybmVsKTsKKworCXAgPSAmcGFyZW50LT5jaGlsZHJlbi5yYl9ub2RlOworCXdoaWxlICgqcCAhPSBOVUxMKSB7CisJCW5vZGVfcGFyZW50ID0gKnA7CisJCWNwID0gcmJfZW50cnkobm9kZV9wYXJlbnQsIHN0cnVjdCBjYWxsX3BhdGgsIHJiX25vZGUpOworCisJCWlmIChjcC0+c3ltID09IHN5bSAmJiBjcC0+aXAgPT0gaXApCisJCQlyZXR1cm4gY3A7CisKKwkJaWYgKHN5bSA8IGNwLT5zeW0gfHwgKHN5bSA9PSBjcC0+c3ltICYmIGlwIDwgY3AtPmlwKSkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwl9CisKKwljcCA9IGNhbGxfcGF0aF9fbmV3KGNwciwgcGFyZW50LCBzeW0sIGlwLCBpbl9rZXJuZWwpOworCWlmICghY3ApCisJCXJldHVybiBOVUxMOworCisJcmJfbGlua19ub2RlKCZjcC0+cmJfbm9kZSwgbm9kZV9wYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigmY3AtPnJiX25vZGUsICZwYXJlbnQtPmNoaWxkcmVuKTsKKworCXJldHVybiBjcDsKK30KKworc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqCitjYWxsX3JldHVybl9wcm9jZXNzb3JfX25ldyhpbnQgKCpwcm9jZXNzKShzdHJ1Y3QgY2FsbF9yZXR1cm4gKmNyLCB2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwOworCisJY3JwID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yKSk7CisJaWYgKCFjcnApCisJCXJldHVybiBOVUxMOworCWNycC0+Y3ByID0gY2FsbF9wYXRoX3Jvb3RfX25ldygpOworCWlmICghY3JwLT5jcHIpCisJCWdvdG8gb3V0X2ZyZWU7CisJY3JwLT5wcm9jZXNzID0gcHJvY2VzczsKKwljcnAtPmRhdGEgPSBkYXRhOworCXJldHVybiBjcnA7CisKK291dF9mcmVlOgorCWZyZWUoY3JwKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBjYWxsX3JldHVybl9wcm9jZXNzb3JfX2ZyZWUoc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwKQoreworCWlmIChjcnApIHsKKwkJY2FsbF9wYXRoX3Jvb3RfX2ZyZWUoY3JwLT5jcHIpOworCQlmcmVlKGNycCk7CisJfQorfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fcHVzaF9jcChzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cywgdTY0IHJldF9hZGRyLAorCQkJCSB1NjQgdGltZXN0YW1wLCB1NjQgcmVmLCBzdHJ1Y3QgY2FsbF9wYXRoICpjcCwKKwkJCQkgYm9vbCBub19jYWxsKQoreworCXN0cnVjdCB0aHJlYWRfc3RhY2tfZW50cnkgKnRzZTsKKwlpbnQgZXJyOworCisJaWYgKHRzLT5jbnQgPT0gdHMtPnN6KSB7CisJCWVyciA9IHRocmVhZF9zdGFja19fZ3Jvdyh0cyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXRzZSA9ICZ0cy0+c3RhY2tbdHMtPmNudCsrXTsKKwl0c2UtPnJldF9hZGRyID0gcmV0X2FkZHI7CisJdHNlLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJdHNlLT5yZWYgPSByZWY7CisJdHNlLT5icmFuY2hfY291bnQgPSB0cy0+YnJhbmNoX2NvdW50OworCXRzZS0+Y3AgPSBjcDsKKwl0c2UtPm5vX2NhbGwgPSBub19jYWxsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGhyZWFkX3N0YWNrX19wb3BfY3Aoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cywKKwkJCQl1NjQgcmV0X2FkZHIsIHU2NCB0aW1lc3RhbXAsIHU2NCByZWYsCisJCQkJc3RydWN0IHN5bWJvbCAqc3ltKQoreworCWludCBlcnI7CisKKwlpZiAoIXRzLT5jbnQpCisJCXJldHVybiAxOworCisJaWYgKHRzLT5jbnQgPT0gMSkgeworCQlzdHJ1Y3QgdGhyZWFkX3N0YWNrX2VudHJ5ICp0c2UgPSAmdHMtPnN0YWNrWzBdOworCisJCWlmICh0c2UtPmNwLT5zeW0gPT0gc3ltKQorCQkJcmV0dXJuIHRocmVhZF9zdGFja19fY2FsbF9yZXR1cm4odGhyZWFkLCB0cywgLS10cy0+Y250LAorCQkJCQkJCSB0aW1lc3RhbXAsIHJlZiwgZmFsc2UpOworCX0KKworCWlmICh0cy0+c3RhY2tbdHMtPmNudCAtIDFdLnJldF9hZGRyID09IHJldF9hZGRyKSB7CisJCXJldHVybiB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIC0tdHMtPmNudCwKKwkJCQkJCSB0aW1lc3RhbXAsIHJlZiwgZmFsc2UpOworCX0gZWxzZSB7CisJCXNpemVfdCBpID0gdHMtPmNudCAtIDE7CisKKwkJd2hpbGUgKGktLSkgeworCQkJaWYgKHRzLT5zdGFja1tpXS5yZXRfYWRkciAhPSByZXRfYWRkcikKKwkJCQljb250aW51ZTsKKwkJCWkgKz0gMTsKKwkJCXdoaWxlICh0cy0+Y250ID4gaSkgeworCQkJCWVyciA9IHRocmVhZF9zdGFja19fY2FsbF9yZXR1cm4odGhyZWFkLCB0cywKKwkJCQkJCQkJLS10cy0+Y250LAorCQkJCQkJCQl0aW1lc3RhbXAsIHJlZiwKKwkJCQkJCQkJdHJ1ZSk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJCXJldHVybiB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIC0tdHMtPmNudCwKKwkJCQkJCQkgdGltZXN0YW1wLCByZWYsIGZhbHNlKTsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fYm90dG9tKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IHRocmVhZF9zdGFjayAqdHMsCisJCQkJc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmZyb21fYWwsCisJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKnRvX2FsLCB1NjQgcmVmKQoreworCXN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByID0gdHMtPmNycC0+Y3ByOworCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwl1NjQgaXA7CisKKwlpZiAoc2FtcGxlLT5pcCkgeworCQlpcCA9IHNhbXBsZS0+aXA7CisJCXN5bSA9IGZyb21fYWwtPnN5bTsKKwl9IGVsc2UgaWYgKHNhbXBsZS0+YWRkcikgeworCQlpcCA9IHNhbXBsZS0+YWRkcjsKKwkJc3ltID0gdG9fYWwtPnN5bTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisKKwljcCA9IGNhbGxfcGF0aF9fZmluZG5ldyhjcHIsICZjcHItPmNhbGxfcGF0aCwgc3ltLCBpcCwKKwkJCQl0cy0+a2VybmVsX3N0YXJ0KTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiB0aHJlYWRfc3RhY2tfX3B1c2hfY3AodGhyZWFkLT50cywgaXAsIHNhbXBsZS0+dGltZSwgcmVmLCBjcCwKKwkJCQkgICAgIHRydWUpOworfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fbm9fY2FsbF9yZXR1cm4oc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJCQlzdHJ1Y3QgdGhyZWFkX3N0YWNrICp0cywKKwkJCQkJc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCisJCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICpmcm9tX2FsLAorCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqdG9fYWwsIHU2NCByZWYpCit7CisJc3RydWN0IGNhbGxfcGF0aF9yb290ICpjcHIgPSB0cy0+Y3JwLT5jcHI7CisJc3RydWN0IGNhbGxfcGF0aCAqY3AsICpwYXJlbnQ7CisJdTY0IGtzID0gdHMtPmtlcm5lbF9zdGFydDsKKwlpbnQgZXJyOworCisJaWYgKHNhbXBsZS0+aXAgPj0ga3MgJiYgc2FtcGxlLT5hZGRyIDwga3MpIHsKKwkJLyogUmV0dXJuIHRvIHVzZXJzcGFjZSwgc28gcG9wIGFsbCBrZXJuZWwgYWRkcmVzc2VzICovCisJCXdoaWxlICh0aHJlYWRfc3RhY2tfX2luX2tlcm5lbCh0cykpIHsKKwkJCWVyciA9IHRocmVhZF9zdGFja19fY2FsbF9yZXR1cm4odGhyZWFkLCB0cywgLS10cy0+Y250LAorCQkJCQkJCXNhbXBsZS0+dGltZSwgcmVmLAorCQkJCQkJCXRydWUpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJLyogSWYgdGhlIHN0YWNrIGlzIGVtcHR5LCBwdXNoIHRoZSB1c2Vyc3BhY2UgYWRkcmVzcyAqLworCQlpZiAoIXRzLT5jbnQpIHsKKwkJCWNwID0gY2FsbF9wYXRoX19maW5kbmV3KGNwciwgJmNwci0+Y2FsbF9wYXRoLAorCQkJCQkJdG9fYWwtPnN5bSwgc2FtcGxlLT5hZGRyLAorCQkJCQkJdHMtPmtlcm5lbF9zdGFydCk7CisJCQlpZiAoIWNwKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIHRocmVhZF9zdGFja19fcHVzaF9jcCh0cywgMCwgc2FtcGxlLT50aW1lLCByZWYsCisJCQkJCQkgICAgIGNwLCB0cnVlKTsKKwkJfQorCX0gZWxzZSBpZiAodGhyZWFkX3N0YWNrX19pbl9rZXJuZWwodHMpICYmIHNhbXBsZS0+aXAgPCBrcykgeworCQkvKiBSZXR1cm4gdG8gdXNlcnNwYWNlLCBzbyBwb3AgYWxsIGtlcm5lbCBhZGRyZXNzZXMgKi8KKwkJd2hpbGUgKHRocmVhZF9zdGFja19faW5fa2VybmVsKHRzKSkgeworCQkJZXJyID0gdGhyZWFkX3N0YWNrX19jYWxsX3JldHVybih0aHJlYWQsIHRzLCAtLXRzLT5jbnQsCisJCQkJCQkJc2FtcGxlLT50aW1lLCByZWYsCisJCQkJCQkJdHJ1ZSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAodHMtPmNudCkKKwkJcGFyZW50ID0gdHMtPnN0YWNrW3RzLT5jbnQgLSAxXS5jcDsKKwllbHNlCisJCXBhcmVudCA9ICZjcHItPmNhbGxfcGF0aDsKKworCS8qIFRoaXMgJ3JldHVybicgaGFkIG5vICdjYWxsJywgc28gcHVzaCBhbmQgcG9wIHRvcCBvZiBzdGFjayAqLworCWNwID0gY2FsbF9wYXRoX19maW5kbmV3KGNwciwgcGFyZW50LCBmcm9tX2FsLT5zeW0sIHNhbXBsZS0+aXAsCisJCQkJdHMtPmtlcm5lbF9zdGFydCk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSB0aHJlYWRfc3RhY2tfX3B1c2hfY3AodHMsIHNhbXBsZS0+YWRkciwgc2FtcGxlLT50aW1lLCByZWYsIGNwLAorCQkJCSAgICB0cnVlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHRocmVhZF9zdGFja19fcG9wX2NwKHRocmVhZCwgdHMsIHNhbXBsZS0+YWRkciwgc2FtcGxlLT50aW1lLCByZWYsCisJCQkJICAgIHRvX2FsLT5zeW0pOworfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fdHJhY2VfYmVnaW4oc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJCSAgICAgc3RydWN0IHRocmVhZF9zdGFjayAqdHMsIHU2NCB0aW1lc3RhbXAsCisJCQkJICAgICB1NjQgcmVmKQoreworCXN0cnVjdCB0aHJlYWRfc3RhY2tfZW50cnkgKnRzZTsKKwlpbnQgZXJyOworCisJaWYgKCF0cy0+Y250KQorCQlyZXR1cm4gMDsKKworCS8qIFBvcCB0cmFjZSBlbmQgKi8KKwl0c2UgPSAmdHMtPnN0YWNrW3RzLT5jbnQgLSAxXTsKKwlpZiAodHNlLT5jcC0+c3ltID09IE5VTEwgJiYgdHNlLT5jcC0+aXAgPT0gMCkgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIC0tdHMtPmNudCwKKwkJCQkJCXRpbWVzdGFtcCwgcmVmLCBmYWxzZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRocmVhZF9zdGFja19fdHJhY2VfZW5kKHN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzLAorCQkJCSAgIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLCB1NjQgcmVmKQoreworCXN0cnVjdCBjYWxsX3BhdGhfcm9vdCAqY3ByID0gdHMtPmNycC0+Y3ByOworCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCXU2NCByZXRfYWRkcjsKKworCS8qIE5vIHBvaW50IGhhdmluZyAndHJhY2UgZW5kJyBvbiB0aGUgYm90dG9tIG9mIHRoZSBzdGFjayAqLworCWlmICghdHMtPmNudCB8fCAodHMtPmNudCA9PSAxICYmIHRzLT5zdGFja1swXS5yZWYgPT0gcmVmKSkKKwkJcmV0dXJuIDA7CisKKwljcCA9IGNhbGxfcGF0aF9fZmluZG5ldyhjcHIsIHRzLT5zdGFja1t0cy0+Y250IC0gMV0uY3AsIE5VTEwsIDAsCisJCQkJdHMtPmtlcm5lbF9zdGFydCk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXRfYWRkciA9IHNhbXBsZS0+aXAgKyBzYW1wbGUtPmluc25fbGVuOworCisJcmV0dXJuIHRocmVhZF9zdGFja19fcHVzaF9jcCh0cywgcmV0X2FkZHIsIHNhbXBsZS0+dGltZSwgcmVmLCBjcCwKKwkJCQkgICAgIGZhbHNlKTsKK30KKworaW50IHRocmVhZF9zdGFja19fcHJvY2VzcyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBjb21tICpjb21tLAorCQkJICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCSAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmZyb21fYWwsCisJCQkgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICp0b19hbCwgdTY0IHJlZiwKKwkJCSAgc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwKQoreworCXN0cnVjdCB0aHJlYWRfc3RhY2sgKnRzID0gdGhyZWFkLT50czsKKwlpbnQgZXJyID0gMDsKKworCWlmICh0cykgeworCQlpZiAoIXRzLT5jcnApIHsKKwkJCS8qIFN1cGVyc2VkZSB0aHJlYWRfc3RhY2tfX2V2ZW50KCkgKi8KKwkJCXRocmVhZF9zdGFja19fZnJlZSh0aHJlYWQpOworCQkJdGhyZWFkLT50cyA9IHRocmVhZF9zdGFja19fbmV3KHRocmVhZCwgY3JwKTsKKwkJCWlmICghdGhyZWFkLT50cykKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCXRzID0gdGhyZWFkLT50czsKKwkJCXRzLT5jb21tID0gY29tbTsKKwkJfQorCX0gZWxzZSB7CisJCXRocmVhZC0+dHMgPSB0aHJlYWRfc3RhY2tfX25ldyh0aHJlYWQsIGNycCk7CisJCWlmICghdGhyZWFkLT50cykKKwkJCXJldHVybiAtRU5PTUVNOworCQl0cyA9IHRocmVhZC0+dHM7CisJCXRzLT5jb21tID0gY29tbTsKKwl9CisKKwkvKiBGbHVzaCBzdGFjayBvbiBleGVjICovCisJaWYgKHRzLT5jb21tICE9IGNvbW0gJiYgdGhyZWFkLT5waWRfID09IHRocmVhZC0+dGlkKSB7CisJCWVyciA9IHRocmVhZF9zdGFja19fZmx1c2godGhyZWFkLCB0cyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQl0cy0+Y29tbSA9IGNvbW07CisJfQorCisJLyogSWYgdGhlIHN0YWNrIGlzIGVtcHR5LCBwdXQgdGhlIGN1cnJlbnQgc3ltYm9sIG9uIHRoZSBzdGFjayAqLworCWlmICghdHMtPmNudCkgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX2JvdHRvbSh0aHJlYWQsIHRzLCBzYW1wbGUsIGZyb21fYWwsIHRvX2FsLAorCQkJCQkgICByZWYpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwl0cy0+YnJhbmNoX2NvdW50ICs9IDE7CisJdHMtPmxhc3RfdGltZSA9IHNhbXBsZS0+dGltZTsKKworCWlmIChzYW1wbGUtPmZsYWdzICYgUEVSRl9JUF9GTEFHX0NBTEwpIHsKKwkJc3RydWN0IGNhbGxfcGF0aF9yb290ICpjcHIgPSB0cy0+Y3JwLT5jcHI7CisJCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCQl1NjQgcmV0X2FkZHI7CisKKwkJaWYgKCFzYW1wbGUtPmlwIHx8ICFzYW1wbGUtPmFkZHIpCisJCQlyZXR1cm4gMDsKKworCQlyZXRfYWRkciA9IHNhbXBsZS0+aXAgKyBzYW1wbGUtPmluc25fbGVuOworCQlpZiAocmV0X2FkZHIgPT0gc2FtcGxlLT5hZGRyKQorCQkJcmV0dXJuIDA7IC8qIFplcm8tbGVuZ3RoIGNhbGxzIGFyZSBleGNsdWRlZCAqLworCisJCWNwID0gY2FsbF9wYXRoX19maW5kbmV3KGNwciwgdHMtPnN0YWNrW3RzLT5jbnQgLSAxXS5jcCwKKwkJCQkJdG9fYWwtPnN5bSwgc2FtcGxlLT5hZGRyLAorCQkJCQl0cy0+a2VybmVsX3N0YXJ0KTsKKwkJaWYgKCFjcCkKKwkJCXJldHVybiAtRU5PTUVNOworCQllcnIgPSB0aHJlYWRfc3RhY2tfX3B1c2hfY3AodHMsIHJldF9hZGRyLCBzYW1wbGUtPnRpbWUsIHJlZiwKKwkJCQkJICAgIGNwLCBmYWxzZSk7CisJfSBlbHNlIGlmIChzYW1wbGUtPmZsYWdzICYgUEVSRl9JUF9GTEFHX1JFVFVSTikgeworCQlpZiAoIXNhbXBsZS0+aXAgfHwgIXNhbXBsZS0+YWRkcikKKwkJCXJldHVybiAwOworCisJCWVyciA9IHRocmVhZF9zdGFja19fcG9wX2NwKHRocmVhZCwgdHMsIHNhbXBsZS0+YWRkciwKKwkJCQkJICAgc2FtcGxlLT50aW1lLCByZWYsIGZyb21fYWwtPnN5bSk7CisJCWlmIChlcnIpIHsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQllcnIgPSB0aHJlYWRfc3RhY2tfX25vX2NhbGxfcmV0dXJuKHRocmVhZCwgdHMsIHNhbXBsZSwKKwkJCQkJCQkgICBmcm9tX2FsLCB0b19hbCwgcmVmKTsKKwkJfQorCX0gZWxzZSBpZiAoc2FtcGxlLT5mbGFncyAmIFBFUkZfSVBfRkxBR19UUkFDRV9CRUdJTikgeworCQllcnIgPSB0aHJlYWRfc3RhY2tfX3RyYWNlX2JlZ2luKHRocmVhZCwgdHMsIHNhbXBsZS0+dGltZSwgcmVmKTsKKwl9IGVsc2UgaWYgKHNhbXBsZS0+ZmxhZ3MgJiBQRVJGX0lQX0ZMQUdfVFJBQ0VfRU5EKSB7CisJCWVyciA9IHRocmVhZF9zdGFja19fdHJhY2VfZW5kKHRzLCBzYW1wbGUsIHJlZik7CisJfQorCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQtc3RhY2suaCBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQtc3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQzYmJlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC1zdGFjay5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogdGhyZWFkLXN0YWNrLmg6IFN5bnRoZXNpemUgYSB0aHJlYWQncyBzdGFjayB1c2luZyBjYWxsIC8gcmV0dXJuIGV2ZW50cworICogQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19QRVJGX1RIUkVBRF9TVEFDS19ICisjZGVmaW5lIF9fUEVSRl9USFJFQURfU1RBQ0tfSAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorCitzdHJ1Y3QgdGhyZWFkOworc3RydWN0IGNvbW07CitzdHJ1Y3QgaXBfY2FsbGNoYWluOworc3RydWN0IHN5bWJvbDsKK3N0cnVjdCBkc287CitzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yOworc3RydWN0IGNvbW07CitzdHJ1Y3QgcGVyZl9zYW1wbGU7CitzdHJ1Y3QgYWRkcl9sb2NhdGlvbjsKKworLyoKKyAqIENhbGwvUmV0dXJuIGZsYWdzLgorICoKKyAqIENBTExfUkVUVVJOX05PX0NBTEw6ICdyZXR1cm4nIGJ1dCBubyBtYXRjaGluZyAnY2FsbCcKKyAqIENBTExfUkVUVVJOX05PX1JFVFVSTjogJ2NhbGwnIGJ1dCBubyBtYXRjaGluZyAncmV0dXJuJworICovCitlbnVtIHsKKwlDQUxMX1JFVFVSTl9OT19DQUxMCT0gMSA8PCAwLAorCUNBTExfUkVUVVJOX05PX1JFVFVSTgk9IDEgPDwgMSwKK307CisKKy8qKgorICogc3RydWN0IGNhbGxfcmV0dXJuIC0gcGFpcmVkIGNhbGwvcmV0dXJuIGluZm9ybWF0aW9uLgorICogQHRocmVhZDogdGhyZWFkIGluIHdoaWNoIGNhbGwvcmV0dXJuIG9jY3VycmVkCisgKiBAY29tbTogY29tbSBpbiB3aGljaCBjYWxsL3JldHVybiBvY2N1cnJlZAorICogQGNwOiBjYWxsIHBhdGgKKyAqIEBjYWxsX3RpbWU6IHRpbWVzdGFtcCBvZiBjYWxsIChpZiBrbm93bikKKyAqIEByZXR1cm5fdGltZTogdGltZXN0YW1wIG9mIHJldHVybiAoaWYga25vd24pCisgKiBAYnJhbmNoX2NvdW50OiBudW1iZXIgb2YgYnJhbmNoZXMgc2VlbiBiZXR3ZWVuIGNhbGwgYW5kIHJldHVybgorICogQGNhbGxfcmVmOiBleHRlcm5hbCByZWZlcmVuY2UgdG8gJ2NhbGwnIHNhbXBsZSAoZS5nLiBkYl9pZCkKKyAqIEByZXR1cm5fcmVmOiAgZXh0ZXJuYWwgcmVmZXJlbmNlIHRvICdyZXR1cm4nIHNhbXBsZSAoZS5nLiBkYl9pZCkKKyAqIEBkYl9pZDogaWQgdXNlZCBmb3IgZGItZXhwb3J0CisgKiBAZmxhZ3M6IENhbGwvUmV0dXJuIGZsYWdzCisgKi8KK3N0cnVjdCBjYWxsX3JldHVybiB7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkOworCXN0cnVjdCBjb21tICpjb21tOworCXN0cnVjdCBjYWxsX3BhdGggKmNwOworCXU2NCBjYWxsX3RpbWU7CisJdTY0IHJldHVybl90aW1lOworCXU2NCBicmFuY2hfY291bnQ7CisJdTY0IGNhbGxfcmVmOworCXU2NCByZXR1cm5fcmVmOworCXU2NCBkYl9pZDsKKwl1MzIgZmxhZ3M7Cit9OworCisvKioKKyAqIHN0cnVjdCBjYWxsX3BhdGggLSBub2RlIGluIGxpc3Qgb2YgY2FsbHMgbGVhZGluZyB0byBhIGZ1bmN0aW9uIGNhbGwuCisgKiBAcGFyZW50OiBjYWxsIHBhdGggdG8gdGhlIHBhcmVudCBmdW5jdGlvbiBjYWxsCisgKiBAc3ltOiBzeW1ib2wgb2YgZnVuY3Rpb24gY2FsbGVkCisgKiBAaXA6IG9ubHkgaWYgc3ltIGlzIG51bGwsIHRoZSBpcCBvZiB0aGUgZnVuY3Rpb24KKyAqIEBkYl9pZDogaWQgdXNlZCBmb3IgZGItZXhwb3J0CisgKiBAaW5fa2VybmVsOiB3aGV0aGVyIGZ1bmN0aW9uIGlzIGEgaW4gdGhlIGtlcm5lbAorICogQHJiX25vZGU6IG5vZGUgaW4gcGFyZW50J3MgdHJlZSBvZiBjYWxsZWQgZnVuY3Rpb25zCisgKiBAY2hpbGRyZW46IHRyZWUgb2YgY2FsbCBwYXRocyBvZiBmdW5jdGlvbnMgY2FsbGVkCisgKgorICogSW4gY29tYmluYXRpb24gd2l0aCB0aGUgY2FsbF9yZXR1cm4gc3RydWN0dXJlLCB0aGUgY2FsbF9wYXRoIHN0cnVjdHVyZQorICogZGVmaW5lcyBhIGNvbnRleHQtc2Vuc2l0dmUgY2FsbC1ncmFwaC4KKyAqLworc3RydWN0IGNhbGxfcGF0aCB7CisJc3RydWN0IGNhbGxfcGF0aCAqcGFyZW50OworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwl1NjQgaXA7CisJdTY0IGRiX2lkOworCWJvb2wgaW5fa2VybmVsOworCXN0cnVjdCByYl9ub2RlIHJiX25vZGU7CisJc3RydWN0IHJiX3Jvb3QgY2hpbGRyZW47Cit9OworCitpbnQgdGhyZWFkX3N0YWNrX19ldmVudChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHUzMiBmbGFncywgdTY0IGZyb21faXAsCisJCQl1NjQgdG9faXAsIHUxNiBpbnNuX2xlbiwgdTY0IHRyYWNlX25yKTsKK3ZvaWQgdGhyZWFkX3N0YWNrX19zZXRfdHJhY2VfbnIoc3RydWN0IHRocmVhZCAqdGhyZWFkLCB1NjQgdHJhY2VfbnIpOwordm9pZCB0aHJlYWRfc3RhY2tfX3NhbXBsZShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLAorCQkJICBzaXplX3Qgc3osIHU2NCBpcCk7Cit2b2lkIHRocmVhZF9zdGFja19fZnJlZShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworCitzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yICoKK2NhbGxfcmV0dXJuX3Byb2Nlc3Nvcl9fbmV3KGludCAoKnByb2Nlc3MpKHN0cnVjdCBjYWxsX3JldHVybiAqY3IsIHZvaWQgKmRhdGEpLAorCQkJICAgdm9pZCAqZGF0YSk7Cit2b2lkIGNhbGxfcmV0dXJuX3Byb2Nlc3Nvcl9fZnJlZShzdHJ1Y3QgY2FsbF9yZXR1cm5fcHJvY2Vzc29yICpjcnApOworaW50IHRocmVhZF9zdGFja19fcHJvY2VzcyhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBjb21tICpjb21tLAorCQkJICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCSAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmZyb21fYWwsCisJCQkgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICp0b19hbCwgdTY0IHJlZiwKKwkJCSAgc3RydWN0IGNhbGxfcmV0dXJuX3Byb2Nlc3NvciAqY3JwKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKaW5kZXggYzQxNDExNy4uOWViYzhiMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJzZXNzaW9uLmgiCiAjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAidGhyZWFkLXN0YWNrLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiY29tbS5oIgpAQCAtMTUsNyArMTYsNyBAQAogCXBpZF90IHBpZCA9IHRocmVhZC0+cGlkXzsKIAogCWlmIChwaWQgPT0gdGhyZWFkLT50aWQgfHwgcGlkID09IC0xKSB7Ci0JCXRocmVhZC0+bWcgPSBtYXBfZ3JvdXBzX19uZXcoKTsKKwkJdGhyZWFkLT5tZyA9IG1hcF9ncm91cHNfX25ldyhtYWNoaW5lKTsKIAl9IGVsc2UgewogCQlsZWFkZXIgPSBtYWNoaW5lX19maW5kbmV3X3RocmVhZChtYWNoaW5lLCBwaWQsIHBpZCk7CiAJCWlmIChsZWFkZXIpCkBAIC02Niw2ICs2Nyw4IEBACiB7CiAJc3RydWN0IGNvbW0gKmNvbW0sICp0bXA7CiAKKwl0aHJlYWRfc3RhY2tfX2ZyZWUodGhyZWFkKTsKKwogCWlmICh0aHJlYWQtPm1nKSB7CiAJCW1hcF9ncm91cHNfX3B1dCh0aHJlYWQtPm1nKTsKIAkJdGhyZWFkLT5tZyA9IE5VTEw7CkBAIC0xMDAsMTUgKzEwMywxNCBAQAogCXJldHVybiBsYXN0OwogfQogCi0vKiBDSEVDS01FOiB0aW1lIHNob3VsZCBhbHdheXMgYmUgMCBpZiBldmVudCBhcmVuJ3Qgb3JkZXJlZCAqLwogaW50IF9fdGhyZWFkX19zZXRfY29tbShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIGNvbnN0IGNoYXIgKnN0ciwgdTY0IHRpbWVzdGFtcCwKIAkJICAgICAgIGJvb2wgZXhlYykKIHsKIAlzdHJ1Y3QgY29tbSAqbmV3LCAqY3VyciA9IHRocmVhZF9fY29tbSh0aHJlYWQpOwogCWludCBlcnI7CiAKLQkvKiBPdmVycmlkZSBsYXRlc3QgZW50cnkgaWYgaXQgaGFkIG5vIHNwZWNpZmljIHRpbWUgY292ZXJhZ2UgKi8KLQlpZiAoIWN1cnItPnN0YXJ0ICYmICFjdXJyLT5leGVjKSB7CisJLyogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgOnRpZCBlbnRyeSAqLworCWlmICghdGhyZWFkLT5jb21tX3NldCkgewogCQllcnIgPSBjb21tX19vdmVycmlkZShjdXJyLCBzdHIsIHRpbWVzdGFtcCwgZXhlYyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtMTk4LDcgKzIwMCw2IEBACiB9CiAKIHZvaWQgdGhyZWFkX19maW5kX2NwdW1vZGVfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCi0JCQkJCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAogCQkJCQllbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpCiB7CkBAIC0yMTEsOCArMjEyLDcgQEAKIAl9OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3B1bW9kZXMpOyBpKyspIHsKLQkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBtYWNoaW5lLCBjcHVtb2Rlc1tpXSwgdHlwZSwKLQkJCQkJICAgYWRkciwgYWwpOworCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIGNwdW1vZGVzW2ldLCB0eXBlLCBhZGRyLCBhbCk7CiAJCWlmIChhbC0+bWFwKQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCmluZGV4IDhjNzVmYTcuLjE2MGZkMDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaAorKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSA8c3RybGlzdC5oPgogCitzdHJ1Y3QgdGhyZWFkX3N0YWNrOworCiBzdHJ1Y3QgdGhyZWFkIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCByYl9ub2RlCSByYl9ub2RlOwpAQCAtMjMsOCArMjUsMTAgQEAKIAlib29sCQkJZGVhZDsgLyogaWYgc2V0IHRocmVhZCBoYXMgZXhpdGVkICovCiAJc3RydWN0IGxpc3RfaGVhZAljb21tX2xpc3Q7CiAJaW50CQkJY29tbV9sZW47CisJdTY0CQkJZGJfaWQ7CiAKIAl2b2lkCQkJKnByaXY7CisJc3RydWN0IHRocmVhZF9zdGFjawkqdHM7CiB9OwogCiBzdHJ1Y3QgbWFjaGluZTsKQEAgLTU0LDE2ICs1OCwxNSBAQAogaW50IHRocmVhZF9fZm9yayhzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCB0aHJlYWQgKnBhcmVudCwgdTY0IHRpbWVzdGFtcCk7CiBzaXplX3QgdGhyZWFkX19mcHJpbnRmKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgRklMRSAqZnApOwogCi12b2lkIHRocmVhZF9fZmluZF9hZGRyX21hcChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAordm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9tYXAoc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJICAgdTggY3B1bW9kZSwgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKIAkJCSAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7CiAKLXZvaWQgdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJCXU4IGNwdW1vZGUsIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsKTsKIAogdm9pZCB0aHJlYWRfX2ZpbmRfY3B1bW9kZV9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwKLQkJCQkJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCiAJCQkJCWVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90b29sLmggYi90b29scy9wZXJmL3V0aWwvdG9vbC5oCmluZGV4IGYxMTYzNjkuLmJiMjcwOGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90b29sLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Rvb2wuaApAQCAtMzksNyArMzksOCBAQAogCWV2ZW50X2F0dHJfb3AJYXR0cjsKIAlldmVudF9vcDIJdHJhY2luZ19kYXRhOwogCWV2ZW50X29wMglmaW5pc2hlZF9yb3VuZCwKLQkJCWJ1aWxkX2lkOworCQkJYnVpbGRfaWQsCisJCQlpZF9pbmRleDsKIAlib29sCQlvcmRlcmVkX2V2ZW50czsKIAlib29sCQlvcmRlcmluZ19yZXF1aXJlc190aW1lc3RhbXBzOwogfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGliZHcuYyBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGliZHcuYwppbmRleCA3NDE5NzY4Li4yZGNmZTlhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYmR3LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJkdy5jCkBAIC0yNiw3ICsyNiw3IEBACiAJRHdmbF9Nb2R1bGUgKm1vZDsKIAlzdHJ1Y3QgZHNvICpkc28gPSBOVUxMOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odWktPnRocmVhZCwgdWktPm1hY2hpbmUsCisJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odWktPnRocmVhZCwKIAkJCQkgICBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCiAJCQkJICAgTUFQX19GVU5DVElPTiwgaXAsIGFsKTsKIApAQCAtODksNyArODksNyBAQAogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXNzaXplX3Qgc2l6ZTsKIAotCXRocmVhZF9fZmluZF9hZGRyX21hcCh1aS0+dGhyZWFkLCB1aS0+bWFjaGluZSwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAorCXRocmVhZF9fZmluZF9hZGRyX21hcCh1aS0+dGhyZWFkLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCiAJCQkgICAgICBNQVBfX0ZVTkNUSU9OLCBhZGRyLCAmYWwpOwogCWlmICghYWwubWFwKSB7CiAJCXByX2RlYnVnKCJ1bndpbmQ6IG5vIG1hcCBmb3IgJWx4XG4iLCAodW5zaWduZWQgbG9uZylhZGRyKTsKQEAgLTE2NCwxNCArMTY0LDE0IEBACiB9CiAKIGludCB1bndpbmRfX2dldF9lbnRyaWVzKHVud2luZF9lbnRyeV9jYl90IGNiLCB2b2lkICphcmcsCi0JCQlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJc3RydWN0IHBlcmZfc2FtcGxlICpkYXRhLAogCQkJaW50IG1heF9zdGFjaykKIHsKIAlzdHJ1Y3QgdW53aW5kX2luZm8gdWkgPSB7CiAJCS5zYW1wbGUJCT0gZGF0YSwKIAkJLnRocmVhZAkJPSB0aHJlYWQsCi0JCS5tYWNoaW5lCT0gbWFjaGluZSwKKwkJLm1hY2hpbmUJPSB0aHJlYWQtPm1nLT5tYWNoaW5lLAogCQkuY2IJCT0gY2IsCiAJCS5hcmcJCT0gYXJnLAogCQkubWF4X3N0YWNrCT0gbWF4X3N0YWNrLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJ1bndpbmQuYyBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGlidW53aW5kLmMKaW5kZXggNGQ0NWMwZC4uMzcxMjE5YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJ1bndpbmQuYworKysgYi90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYnVud2luZC5jCkBAIC0yODQsNyArMjg0LDcgQEAKIHsKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAotCXRocmVhZF9fZmluZF9hZGRyX21hcCh1aS0+dGhyZWFkLCB1aS0+bWFjaGluZSwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAorCXRocmVhZF9fZmluZF9hZGRyX21hcCh1aS0+dGhyZWFkLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCiAJCQkgICAgICBNQVBfX0ZVTkNUSU9OLCBpcCwgJmFsKTsKIAlyZXR1cm4gYWwubWFwOwogfQpAQCAtMzc0LDcgKzM3NCw3IEBACiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAJc3NpemVfdCBzaXplOwogCi0JdGhyZWFkX19maW5kX2FkZHJfbWFwKHVpLT50aHJlYWQsIHVpLT5tYWNoaW5lLCBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCisJdGhyZWFkX19maW5kX2FkZHJfbWFwKHVpLT50aHJlYWQsIFBFUkZfUkVDT1JEX01JU0NfVVNFUiwKIAkJCSAgICAgIE1BUF9fRlVOQ1RJT04sIGFkZHIsICZhbCk7CiAJaWYgKCFhbC5tYXApIHsKIAkJcHJfZGVidWcoInVud2luZDogbm8gbWFwIGZvciAlbHhcbiIsICh1bnNpZ25lZCBsb25nKWFkZHIpOwpAQCAtNDc2LDE0ICs0NzYsMTMgQEAKIAlwcl9kZWJ1ZygidW53aW5kOiBwdXRfdW53aW5kX2luZm8gY2FsbGVkXG4iKTsKIH0KIAotc3RhdGljIGludCBlbnRyeSh1NjQgaXAsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCitzdGF0aWMgaW50IGVudHJ5KHU2NCBpcCwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkgdW53aW5kX2VudHJ5X2NiX3QgY2IsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdW53aW5kX2VudHJ5IGU7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIG1hY2hpbmUsCi0JCQkJICAgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAorCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgUEVSRl9SRUNPUkRfTUlTQ19VU0VSLAogCQkJCSAgIE1BUF9fRlVOQ1RJT04sIGlwLCAmYWwpOwogCiAJZS5pcCA9IGlwOwpAQCAtNTg2LDIxICs1ODUsMjEgQEAKIAkJdW53X3dvcmRfdCBpcDsKIAogCQl1bndfZ2V0X3JlZygmYywgVU5XX1JFR19JUCwgJmlwKTsKLQkJcmV0ID0gaXAgPyBlbnRyeShpcCwgdWktPnRocmVhZCwgdWktPm1hY2hpbmUsIGNiLCBhcmcpIDogMDsKKwkJcmV0ID0gaXAgPyBlbnRyeShpcCwgdWktPnRocmVhZCwgY2IsIGFyZykgOiAwOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKIGludCB1bndpbmRfX2dldF9lbnRyaWVzKHVud2luZF9lbnRyeV9jYl90IGNiLCB2b2lkICphcmcsCi0JCQlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLAogCQkJc3RydWN0IHBlcmZfc2FtcGxlICpkYXRhLCBpbnQgbWF4X3N0YWNrKQogewogCXU2NCBpcDsKIAlzdHJ1Y3QgdW53aW5kX2luZm8gdWkgPSB7CiAJCS5zYW1wbGUgICAgICAgPSBkYXRhLAogCQkudGhyZWFkICAgICAgID0gdGhyZWFkLAotCQkubWFjaGluZSAgICAgID0gbWFjaGluZSwKKwkJLm1hY2hpbmUgICAgICA9IHRocmVhZC0+bWctPm1hY2hpbmUsCiAJfTsKIAlpbnQgcmV0OwogCkBAIC02MTEsNyArNjEwLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZW50cnkoaXAsIHRocmVhZCwgbWFjaGluZSwgY2IsIGFyZyk7CisJcmV0ID0gZW50cnkoaXAsIHRocmVhZCwgY2IsIGFyZyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQuaCBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQuaAppbmRleCBmNTBiNzM3Li4xMjc5MGNmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdW53aW5kLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Vud2luZC5oCkBAIC0xNiw3ICsxNiw2IEBACiAKICNpZmRlZiBIQVZFX0RXQVJGX1VOV0lORF9TVVBQT1JUCiBpbnQgdW53aW5kX19nZXRfZW50cmllcyh1bndpbmRfZW50cnlfY2JfdCBjYiwgdm9pZCAqYXJnLAotCQkJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCiAJCQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCiAJCQlzdHJ1Y3QgcGVyZl9zYW1wbGUgKmRhdGEsIGludCBtYXhfc3RhY2spOwogLyogbGlidW53aW5kIHNwZWNpZmljICovCkBAIC0zOCw3ICszNyw2IEBACiBzdGF0aWMgaW5saW5lIGludAogdW53aW5kX19nZXRfZW50cmllcyh1bndpbmRfZW50cnlfY2JfdCBjYiBfX21heWJlX3VudXNlZCwKIAkJICAgIHZvaWQgKmFyZyBfX21heWJlX3VudXNlZCwKLQkJICAgIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lIF9fbWF5YmVfdW51c2VkLAogCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fbWF5YmVfdW51c2VkLAogCQkgICAgc3RydWN0IHBlcmZfc2FtcGxlICpkYXRhIF9fbWF5YmVfdW51c2VkLAogCQkgICAgaW50IG1heF9zdGFjayBfX21heWJlX3VudXNlZCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmggYi90b29scy9wZXJmL3V0aWwvdXRpbC5oCmluZGV4IDgwYmZkYWEuLjQxOWJlZTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaApAQCAtMTU0LDcgKzE1NCw2IEBACiAKIGV4dGVybiBpbnQgcHJlZml4Y21wKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiB2b2lkIHNldF9idWlsZGlkX2Rpcih2b2lkKTsKLWV4dGVybiB2b2lkIGRpc2FibGVfYnVpbGRpZF9jYWNoZSh2b2lkKTsKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpza2lwX3ByZWZpeChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKQEAgLTMzOCw4ICszMzcsMTAgQEAKIH0KIAogc3RydWN0IGRzbzsKK3N0cnVjdCBzeW1ib2w7CiAKLWNoYXIgKmdldF9zcmNsaW5lKHN0cnVjdCBkc28gKmRzbywgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2NoYXIgKmdldF9zcmNsaW5lKHN0cnVjdCBkc28gKmRzbywgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sCisJCSAgYm9vbCBzaG93X3N5bSk7CiB2b2lkIGZyZWVfc3JjbGluZShjaGFyICpzcmNsaW5lKTsKIAogaW50IGZpbGVuYW1lX19yZWFkX2ludChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50ICp2YWx1ZSk7CkBAIC0zNTEsNCArMzUyLDkgQEAKIAogY29uc3QgY2hhciAqZ2V0X2ZpbGVuYW1lX2Zvcl9wZXJmX2t2bSh2b2lkKTsKIGJvb2wgZmluZF9wcm9jZXNzKGNvbnN0IGNoYXIgKm5hbWUpOworCisjaWZkZWYgSEFWRV9aTElCX1NVUFBPUlQKK2ludCBnemlwX2RlY29tcHJlc3NfdG9fZmlsZShjb25zdCBjaGFyICppbnB1dCwgaW50IG91dHB1dF9mZCk7CisjZW5kaWYKKwogI2VuZGlmIC8qIEdJVF9DT01QQVRfVVRJTF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdmRzby5jIGIvdG9vbHMvcGVyZi91dGlsL3Zkc28uYwppbmRleCBhZGNhNjkzLi41YzdkZDc5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdmRzby5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC92ZHNvLmMKQEAgLTEyLDkgKzEyLDE2IEBACiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgInN5bWJvbC5oIgogI2luY2x1ZGUgIm1hY2hpbmUuaCIKKyNpbmNsdWRlICJ0aHJlYWQuaCIKICNpbmNsdWRlICJsaW51eC9zdHJpbmcuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCisvKgorICogSW5jbHVkZSBkZWZpbml0aW9uIG9mIGZpbmRfdmRzb19tYXAoKSBhbHNvIHVzZWQgaW4gcGVyZi1yZWFkLXZkc28uYyBmb3IKKyAqIGJ1aWxkaW5nIHBlcmYtcmVhZC12ZHNvMzIgYW5kIHBlcmYtcmVhZC12ZHNveDMyLgorICovCisjaW5jbHVkZSAiZmluZC12ZHNvLW1hcC5jIgorCiAjZGVmaW5lIFZEU09fX1RFTVBfRklMRV9OQU1FICIvdG1wL3BlcmYtdmRzby5zby1YWFhYWFgiCiAKIHN0cnVjdCB2ZHNvX2ZpbGUgewpAQCAtMjIsMTAgKzI5LDE1IEBACiAJYm9vbCBlcnJvcjsKIAljaGFyIHRlbXBfZmlsZV9uYW1lW3NpemVvZihWRFNPX19URU1QX0ZJTEVfTkFNRSldOwogCWNvbnN0IGNoYXIgKmRzb19uYW1lOworCWNvbnN0IGNoYXIgKnJlYWRfcHJvZzsKIH07CiAKIHN0cnVjdCB2ZHNvX2luZm8gewogCXN0cnVjdCB2ZHNvX2ZpbGUgdmRzbzsKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJc3RydWN0IHZkc29fZmlsZSB2ZHNvMzI7CisJc3RydWN0IHZkc29fZmlsZSB2ZHNveDMyOworI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IHZkc29faW5mbyAqdmRzb19pbmZvX19uZXcodm9pZCkKQEAgLTM1LDQyICs0NywyMyBAQAogCQkJLnRlbXBfZmlsZV9uYW1lID0gVkRTT19fVEVNUF9GSUxFX05BTUUsCiAJCQkuZHNvX25hbWUgPSBEU09fX05BTUVfVkRTTywKIAkJfSwKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJCS52ZHNvMzIgID0geworCQkJLnRlbXBfZmlsZV9uYW1lID0gVkRTT19fVEVNUF9GSUxFX05BTUUsCisJCQkuZHNvX25hbWUgPSBEU09fX05BTUVfVkRTTzMyLAorCQkJLnJlYWRfcHJvZyA9ICJwZXJmLXJlYWQtdmRzbzMyIiwKKwkJfSwKKwkJLnZkc294MzIgID0geworCQkJLnRlbXBfZmlsZV9uYW1lID0gVkRTT19fVEVNUF9GSUxFX05BTUUsCisJCQkuZHNvX25hbWUgPSBEU09fX05BTUVfVkRTT1gzMiwKKwkJCS5yZWFkX3Byb2cgPSAicGVyZi1yZWFkLXZkc294MzIiLAorCQl9LAorI2VuZGlmCiAJfTsKIAogCXJldHVybiBtZW1kdXAoJnZkc29faW5mb19pbml0LCBzaXplb2YodmRzb19pbmZvX2luaXQpKTsKIH0KIAotc3RhdGljIGludCBmaW5kX3Zkc29fbWFwKHZvaWQgKipzdGFydCwgdm9pZCAqKmVuZCkKLXsKLQlGSUxFICptYXBzOwotCWNoYXIgbGluZVsxMjhdOwotCWludCBmb3VuZCA9IDA7Ci0KLQltYXBzID0gZm9wZW4oIi9wcm9jL3NlbGYvbWFwcyIsICJyIik7Ci0JaWYgKCFtYXBzKSB7Ci0JCXByX2VycigidmRzbzogY2Fubm90IG9wZW4gbWFwc1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQl3aGlsZSAoIWZvdW5kICYmIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgbWFwcykpIHsKLQkJaW50IG0gPSAtMTsKLQotCQkvKiBXZSBjYXJlIG9ubHkgYWJvdXQgcHJpdmF0ZSByLXggbWFwcGluZ3MuICovCi0JCWlmICgyICE9IHNzY2FuZihsaW5lLCAiJXAtJXAgci14cCAlKnggJSp4OiUqeCAlKnUgJW4iLAotCQkJCXN0YXJ0LCBlbmQsICZtKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobSA8IDApCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXN0cm5jbXAoJmxpbmVbbV0sIFZEU09fX01BUF9OQU1FLAotCQkJICAgICBzaXplb2YoVkRTT19fTUFQX05BTUUpIC0gMSkpCi0JCQlmb3VuZCA9IDE7Ci0JfQotCi0JZmNsb3NlKG1hcHMpOwotCXJldHVybiAhZm91bmQ7Ci19Ci0KIHN0YXRpYyBjaGFyICpnZXRfZmlsZShzdHJ1Y3QgdmRzb19maWxlICp2ZHNvX2ZpbGUpCiB7CiAJY2hhciAqdmRzbyA9IE5VTEw7CkBAIC0xMTcsNiArMTEwLDEyIEBACiAKIAlpZiAodmRzb19pbmZvLT52ZHNvLmZvdW5kKQogCQl1bmxpbmsodmRzb19pbmZvLT52ZHNvLnRlbXBfZmlsZV9uYW1lKTsKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJaWYgKHZkc29faW5mby0+dmRzbzMyLmZvdW5kKQorCQl1bmxpbmsodmRzb19pbmZvLT52ZHNvMzIudGVtcF9maWxlX25hbWUpOworCWlmICh2ZHNvX2luZm8tPnZkc294MzIuZm91bmQpCisJCXVubGluayh2ZHNvX2luZm8tPnZkc294MzIudGVtcF9maWxlX25hbWUpOworI2VuZGlmCiAKIAl6ZnJlZSgmbWFjaGluZS0+dmRzb19pbmZvKTsKIH0KQEAgLTEzNSw2ICsxMzQsMTUzIEBACiAJcmV0dXJuIGRzbzsKIH0KIAorI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKworc3RhdGljIGVudW0gZHNvX3R5cGUgbWFjaGluZV9fdGhyZWFkX2Rzb190eXBlKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAorCQkJCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJZW51bSBkc29fdHlwZSBkc29fdHlwZSA9IERTT19fVFlQRV9VTktOT1dOOworCXN0cnVjdCBtYXAgKm1hcDsKKwlzdHJ1Y3QgZHNvICpkc287CisKKwltYXAgPSBtYXBfZ3JvdXBzX19maXJzdCh0aHJlYWQtPm1nLCBNQVBfX0ZVTkNUSU9OKTsKKwlmb3IgKDsgbWFwIDsgbWFwID0gbWFwX2dyb3Vwc19fbmV4dChtYXApKSB7CisJCWRzbyA9IG1hcC0+ZHNvOworCQlpZiAoIWRzbyB8fCBkc28tPmxvbmdfbmFtZVswXSAhPSAnLycpCisJCQljb250aW51ZTsKKwkJZHNvX3R5cGUgPSBkc29fX3R5cGUoZHNvLCBtYWNoaW5lKTsKKwkJaWYgKGRzb190eXBlICE9IERTT19fVFlQRV9VTktOT1dOKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGRzb190eXBlOworfQorCitzdGF0aWMgaW50IHZkc29fX2RvX2NvcHlfY29tcGF0KEZJTEUgKmYsIGludCBmZCkKK3sKKwljaGFyIGJ1Zls0MDk2XTsKKwlzaXplX3QgY291bnQ7CisKKwl3aGlsZSAoMSkgeworCQljb3VudCA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIGYpOworCQlpZiAoZmVycm9yKGYpKQorCQkJcmV0dXJuIC1lcnJubzsKKwkJaWYgKGZlb2YoZikpCisJCQlicmVhazsKKwkJaWYgKGNvdW50ICYmIHdyaXRlbihmZCwgYnVmLCBjb3VudCkgIT0gKHNzaXplX3QpY291bnQpCisJCQlyZXR1cm4gLWVycm5vOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZkc29fX2NvcHlfY29tcGF0KGNvbnN0IGNoYXIgKnByb2csIGludCBmZCkKK3sKKwlGSUxFICpmOworCWludCBlcnI7CisKKwlmID0gcG9wZW4ocHJvZywgInIiKTsKKwlpZiAoIWYpCisJCXJldHVybiAtZXJybm87CisKKwllcnIgPSB2ZHNvX19kb19jb3B5X2NvbXBhdChmLCBmZCk7CisKKwlpZiAocGNsb3NlKGYpID09IC0xKQorCQlyZXR1cm4gLWVycm5vOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB2ZHNvX19jcmVhdGVfY29tcGF0X2ZpbGUoY29uc3QgY2hhciAqcHJvZywgY2hhciAqdGVtcF9uYW1lKQoreworCWludCBmZCwgZXJyOworCisJZmQgPSBta3N0ZW1wKHRlbXBfbmFtZSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCWVyciA9IHZkc29fX2NvcHlfY29tcGF0KHByb2csIGZkKTsKKworCWlmIChjbG9zZShmZCkgPT0gLTEpCisJCXJldHVybiAtZXJybm87CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdmRzb19fZ2V0X2NvbXBhdF9maWxlKHN0cnVjdCB2ZHNvX2ZpbGUgKnZkc29fZmlsZSkKK3sKKwlpbnQgZXJyOworCisJaWYgKHZkc29fZmlsZS0+Zm91bmQpCisJCXJldHVybiB2ZHNvX2ZpbGUtPnRlbXBfZmlsZV9uYW1lOworCisJaWYgKHZkc29fZmlsZS0+ZXJyb3IpCisJCXJldHVybiBOVUxMOworCisJZXJyID0gdmRzb19fY3JlYXRlX2NvbXBhdF9maWxlKHZkc29fZmlsZS0+cmVhZF9wcm9nLAorCQkJCSAgICAgICB2ZHNvX2ZpbGUtPnRlbXBfZmlsZV9uYW1lKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiJXMgZmFpbGVkLCBlcnJvciAlZFxuIiwgdmRzb19maWxlLT5yZWFkX3Byb2csIGVycik7CisJCXZkc29fZmlsZS0+ZXJyb3IgPSB0cnVlOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl2ZHNvX2ZpbGUtPmZvdW5kID0gdHJ1ZTsKKworCXJldHVybiB2ZHNvX2ZpbGUtPnRlbXBfZmlsZV9uYW1lOworfQorCitzdGF0aWMgc3RydWN0IGRzbyAqdmRzb19fZmluZG5ld19jb21wYXQoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCisJCQkJCXN0cnVjdCB2ZHNvX2ZpbGUgKnZkc29fZmlsZSkKK3sKKwljb25zdCBjaGFyICpmaWxlX25hbWU7CisJc3RydWN0IGRzbyAqZHNvOworCisJZHNvID0gZHNvc19fZmluZCgmbWFjaGluZS0+dXNlcl9kc29zLCB2ZHNvX2ZpbGUtPmRzb19uYW1lLCB0cnVlKTsKKwlpZiAoZHNvKQorCQlyZXR1cm4gZHNvOworCisJZmlsZV9uYW1lID0gdmRzb19fZ2V0X2NvbXBhdF9maWxlKHZkc29fZmlsZSk7CisJaWYgKCFmaWxlX25hbWUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHZkc29fX25ldyhtYWNoaW5lLCB2ZHNvX2ZpbGUtPmRzb19uYW1lLCBmaWxlX25hbWUpOworfQorCitzdGF0aWMgaW50IHZkc29fX2Rzb19maW5kbmV3X2NvbXBhdChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKKwkJCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJCSAgICBzdHJ1Y3QgdmRzb19pbmZvICp2ZHNvX2luZm8sCisJCQkJICAgIHN0cnVjdCBkc28gKipkc28pCit7CisJZW51bSBkc29fdHlwZSBkc29fdHlwZTsKKworCWRzb190eXBlID0gbWFjaGluZV9fdGhyZWFkX2Rzb190eXBlKG1hY2hpbmUsIHRocmVhZCk7CisKKyNpZm5kZWYgSEFWRV9QRVJGX1JFQURfVkRTTzMyCisJaWYgKGRzb190eXBlID09IERTT19fVFlQRV8zMkJJVCkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKyNpZm5kZWYgSEFWRV9QRVJGX1JFQURfVkRTT1gzMgorCWlmIChkc29fdHlwZSA9PSBEU09fX1RZUEVfWDMyQklUKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCisJc3dpdGNoIChkc29fdHlwZSkgeworCWNhc2UgRFNPX19UWVBFXzMyQklUOgorCQkqZHNvID0gdmRzb19fZmluZG5ld19jb21wYXQobWFjaGluZSwgJnZkc29faW5mby0+dmRzbzMyKTsKKwkJcmV0dXJuIDE7CisJY2FzZSBEU09fX1RZUEVfWDMyQklUOgorCQkqZHNvID0gdmRzb19fZmluZG5ld19jb21wYXQobWFjaGluZSwgJnZkc29faW5mby0+dmRzb3gzMik7CisJCXJldHVybiAxOworCWNhc2UgRFNPX19UWVBFX1VOS05PV046CisJY2FzZSBEU09fX1RZUEVfNjRCSVQ6CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCisjZW5kaWYKKwogc3RydWN0IGRzbyAqdmRzb19fZHNvX2ZpbmRuZXcoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsCiAJCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX19tYXliZV91bnVzZWQpCiB7CkBAIC0xNDgsNiArMjk0LDExIEBACiAJaWYgKCF2ZHNvX2luZm8pCiAJCXJldHVybiBOVUxMOwogCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCWlmICh2ZHNvX19kc29fZmluZG5ld19jb21wYXQobWFjaGluZSwgdGhyZWFkLCB2ZHNvX2luZm8sICZkc28pKQorCQlyZXR1cm4gZHNvOworI2VuZGlmCisKIAlkc28gPSBkc29zX19maW5kKCZtYWNoaW5lLT51c2VyX2Rzb3MsIERTT19fTkFNRV9WRFNPLCB0cnVlKTsKIAlpZiAoIWRzbykgewogCQljaGFyICpmaWxlOwpAQCAtMTY0LDUgKzMxNSw3IEBACiAKIGJvb2wgZHNvX19pc192ZHNvKHN0cnVjdCBkc28gKmRzbykKIHsKLQlyZXR1cm4gIXN0cmNtcChkc28tPnNob3J0X25hbWUsIERTT19fTkFNRV9WRFNPKTsKKwlyZXR1cm4gIXN0cmNtcChkc28tPnNob3J0X25hbWUsIERTT19fTkFNRV9WRFNPKSB8fAorCSAgICAgICAhc3RyY21wKGRzby0+c2hvcnRfbmFtZSwgRFNPX19OQU1FX1ZEU08zMikgfHwKKwkgICAgICAgIXN0cmNtcChkc28tPnNob3J0X25hbWUsIERTT19fTkFNRV9WRFNPWDMyKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC92ZHNvLmggYi90b29scy9wZXJmL3V0aWwvdmRzby5oCmluZGV4IGFmOWQ2OTIuLmQ5N2RhMTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC92ZHNvLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Zkc28uaApAQCAtNyw3ICs3LDkgQEAKIAogI2RlZmluZSBWRFNPX19NQVBfTkFNRSAiW3Zkc29dIgogCi0jZGVmaW5lIERTT19fTkFNRV9WRFNPICJbdmRzb10iCisjZGVmaW5lIERTT19fTkFNRV9WRFNPICAgICJbdmRzb10iCisjZGVmaW5lIERTT19fTkFNRV9WRFNPMzIgICJbdmRzbzMyXSIKKyNkZWZpbmUgRFNPX19OQU1FX1ZEU09YMzIgIlt2ZHNveDMyXSIKIAogc3RhdGljIGlubGluZSBib29sIGlzX3Zkc29fbWFwKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3psaWIuYyBiL3Rvb2xzL3BlcmYvdXRpbC96bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1YTQ0OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC96bGliLmMKQEAgLTAsMCArMSw3OCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHpsaWIuaD4KKworI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKworCisjZGVmaW5lIENIVU5LX1NJWkUgIDE2Mzg0CisKK2ludCBnemlwX2RlY29tcHJlc3NfdG9fZmlsZShjb25zdCBjaGFyICppbnB1dCwgaW50IG91dHB1dF9mZCkKK3sKKwlpbnQgcmV0ID0gWl9TVFJFQU1fRVJST1I7CisJaW50IGlucHV0X2ZkOworCXZvaWQgKnB0cjsKKwlpbnQgbGVuOworCXN0cnVjdCBzdGF0IHN0YnVmOworCXVuc2lnbmVkIGNoYXIgYnVmW0NIVU5LX1NJWkVdOworCXpfc3RyZWFtIHpzID0geworCQkuemFsbG9jCQk9IFpfTlVMTCwKKwkJLnpmcmVlCQk9IFpfTlVMTCwKKwkJLm9wYXF1ZQkJPSBaX05VTEwsCisJCS5hdmFpbF9pbgk9IDAsCisJCS5uZXh0X2luCT0gWl9OVUxMLAorCX07CisKKwlpbnB1dF9mZCA9IG9wZW4oaW5wdXQsIE9fUkRPTkxZKTsKKwlpZiAoaW5wdXRfZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZnN0YXQoaW5wdXRfZmQsICZzdGJ1ZikgPCAwKQorCQlnb3RvIG91dF9jbG9zZTsKKworCXB0ciA9IG1tYXAoTlVMTCwgc3RidWYuc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgaW5wdXRfZmQsIDApOworCWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKKwkJZ290byBvdXRfY2xvc2U7CisKKwlpZiAoaW5mbGF0ZUluaXQyKCZ6cywgMTYgKyBNQVhfV0JJVFMpICE9IFpfT0spCisJCWdvdG8gb3V0X3VubWFwOworCisJenMubmV4dF9pbiA9IHB0cjsKKwl6cy5hdmFpbF9pbiA9IHN0YnVmLnN0X3NpemU7CisKKwlkbyB7CisJCXpzLm5leHRfb3V0ID0gYnVmOworCQl6cy5hdmFpbF9vdXQgPSBDSFVOS19TSVpFOworCisJCXJldCA9IGluZmxhdGUoJnpzLCBaX05PX0ZMVVNIKTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSBaX05FRURfRElDVDoKKwkJCXJldCA9IFpfREFUQV9FUlJPUjsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFpfREFUQV9FUlJPUjoKKwkJY2FzZSBaX01FTV9FUlJPUjoKKwkJCWdvdG8gb3V0OworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlsZW4gPSBDSFVOS19TSVpFIC0genMuYXZhaWxfb3V0OworCQlpZiAod3JpdGVuKG91dHB1dF9mZCwgYnVmLCBsZW4pICE9IGxlbikgeworCQkJcmV0ID0gWl9EQVRBX0VSUk9SOworCQkJZ290byBvdXQ7CisJCX0KKworCX0gd2hpbGUgKHJldCAhPSBaX1NUUkVBTV9FTkQpOworCitvdXQ6CisJaW5mbGF0ZUVuZCgmenMpOworb3V0X3VubWFwOgorCW11bm1hcChwdHIsIHN0YnVmLnN0X3NpemUpOworb3V0X2Nsb3NlOgorCWNsb3NlKGlucHV0X2ZkKTsKKworCXJldHVybiByZXQgPT0gWl9TVFJFQU1fRU5EID8gMCA6IC0xOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9rdGVzdC9rdGVzdC5wbCBiL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qva3Rlc3QucGwKaW5kZXggYmYxMzk4MS4uYjljZDAzNiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9rdGVzdC9rdGVzdC5wbAorKysgYi90b29scy90ZXN0aW5nL2t0ZXN0L2t0ZXN0LnBsCkBAIC02ODQsMTEgKzY4NCw4IEBACiAJfQogCSR7JG92ZXJyaWRlc317JGx2YWx1ZX0gPSAkcHJ2YWx1ZTsKICAgICB9Ci0gICAgaWYgKCRydmFsdWUgPX4gL15ccyokLykgewotCWRlbGV0ZSAkb3B0eyRsdmFsdWV9OwotICAgIH0gZWxzZSB7Ci0JJG9wdHskbHZhbHVlfSA9ICRwcnZhbHVlOwotICAgIH0KKworICAgICRvcHR7JGx2YWx1ZX0gPSAkcHJ2YWx1ZTsKIH0KIAogc3ViIHNldF9ldmFsIHsKQEAgLTIwMDUsNyArMjAwMiw3IEBACiAgICAgIyBnZXQgdGhlIHJlbGVhc2UgbmFtZQogICAgIHJldHVybiBpZiAoJGhhdmVfdmVyc2lvbik7CiAgICAgZG9wcmludCAiJG1ha2Uga2VybmVscmVsZWFzZSAuLi4gIjsKLSAgICAkdmVyc2lvbiA9IGAkbWFrZSBrZXJuZWxyZWxlYXNlIHwgdGFpbCAtMWA7CisgICAgJHZlcnNpb24gPSBgJG1ha2UgLXMga2VybmVscmVsZWFzZSB8IHRhaWwgLTFgOwogICAgIGNob21wKCR2ZXJzaW9uKTsKICAgICBkb3ByaW50ICIkdmVyc2lvblxuIjsKICAgICAkaGF2ZV92ZXJzaW9uID0gMTsKQEAgLTM1NzEsNyArMzU2OCw5IEBACiAgICAgdW5kZWYgJWNvbmZpZ3M7CiAgICAgYXNzaWduX2NvbmZpZ3MgXCVjb25maWdzLCAkb3V0cHV0X2NvbmZpZzsKIAotICAgIHJldHVybiAkY29uZmlnIGlmICghZGVmaW5lZCgkY29uZmlnc3skY29uZmlnfSkpOworICAgIGlmICghZGVmaW5lZCgkY29uZmlnc3skY29uZmlnfSkgfHwgJGNvbmZpZ3N7JGNvbmZpZ30gPX4gL14jLykgeworCXJldHVybiAkY29uZmlnOworICAgIH0KIAogICAgIGRvcHJpbnQgImRpc2FibGluZyBjb25maWcgJGNvbmZpZyBkaWQgbm90IGNoYW5nZSAuY29uZmlnXG4iOwogCkBAIC0zOTQ1LDEyICszOTQ0LDIyIEBACiAgICAgfQogfQogCitzdWIgb3B0aW9uX2RlZmluZWQgeworICAgIG15ICgkb3B0aW9uKSA9IEBfOworCisgICAgaWYgKGRlZmluZWQoJG9wdHskb3B0aW9ufSkgJiYgJG9wdHskb3B0aW9ufSAhfiAvXlxzKiQvKSB7CisJcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHN1YiBfX3NldF90ZXN0X29wdGlvbiB7CiAgICAgbXkgKCRuYW1lLCAkaSkgPSBAXzsKIAogICAgIG15ICRvcHRpb24gPSAiJG5hbWVcWyRpXF0iOwogCi0gICAgaWYgKGRlZmluZWQoJG9wdHskb3B0aW9ufSkpIHsKKyAgICBpZiAob3B0aW9uX2RlZmluZWQoJG9wdGlvbikpIHsKIAlyZXR1cm4gJG9wdHskb3B0aW9ufTsKICAgICB9CiAKQEAgLTM5NTgsMTMgKzM5NjcsMTMgQEAKIAlpZiAoJGkgPj0gJHRlc3QgJiYKIAkgICAgJGkgPCAkdGVzdCArICRyZXBlYXRfdGVzdHN7JHRlc3R9KSB7CiAJICAgICRvcHRpb24gPSAiJG5hbWVcWyR0ZXN0XF0iOwotCSAgICBpZiAoZGVmaW5lZCgkb3B0eyRvcHRpb259KSkgeworCSAgICBpZiAob3B0aW9uX2RlZmluZWQoJG9wdGlvbikpIHsKIAkJcmV0dXJuICRvcHR7JG9wdGlvbn07CiAJICAgIH0KIAl9CiAgICAgfQogCi0gICAgaWYgKGRlZmluZWQoJG9wdHskbmFtZX0pKSB7CisgICAgaWYgKG9wdGlvbl9kZWZpbmVkKCRuYW1lKSkgewogCXJldHVybiAkb3B0eyRuYW1lfTsKICAgICB9CiAKQEAgLTQwNzcsOCArNDA4NiwxNCBAQAogICAgIG15ICRpbnN0YWxsbWUgPSAiIjsKICAgICAkaW5zdGFsbG1lID0gIiBub19pbnN0YWxsIiBpZiAoJG5vX2luc3RhbGwpOwogCisgICAgbXkgJG5hbWUgPSAiIjsKKworICAgIGlmIChkZWZpbmVkKCR0ZXN0X25hbWUpKSB7CisJJG5hbWUgPSAiICgkdGVzdF9uYW1lKSI7CisgICAgfQorCiAgICAgZG9wcmludCAiXG5cbiI7Ci0gICAgZG9wcmludCAiUlVOTklORyBURVNUICRpIG9mICRvcHR7TlVNX1RFU1RTfSB3aXRoIG9wdGlvbiAkdGVzdF90eXBlICRydW5fdHlwZSRpbnN0YWxsbWVcblxuIjsKKyAgICBkb3ByaW50ICJSVU5OSU5HIFRFU1QgJGkgb2YgJG9wdHtOVU1fVEVTVFN9JG5hbWUgd2l0aCBvcHRpb24gJHRlc3RfdHlwZSAkcnVuX3R5cGUkaW5zdGFsbG1lXG5cbiI7CiAKICAgICBpZiAoZGVmaW5lZCgkcHJlX3Rlc3QpKSB7CiAJcnVuX2NvbW1hbmQgJHByZV90ZXN0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL2Z0cmFjZXRlc3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvZnRyYWNldGVzdAppbmRleCA1MTUyNDc2Li5kYTQ4ODEyIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvZnRyYWNldGVzdAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvZnRyYWNldGVzdApAQCAtMTMsNiArMTMsNyBAQAogZWNobyAiIE9wdGlvbnM6IgogZWNobyAiCQktaHwtLWhlbHAgIFNob3cgaGVscCBtZXNzYWdlIgogZWNobyAiCQkta3wtLWtlZXAgIEtlZXAgcGFzc2VkIHRlc3QgbG9ncyIKK2VjaG8gIgkJLXZ8LS12ZXJib3NlIFNob3cgYWxsIHN0ZG91dCBtZXNzYWdlcyBpbiB0ZXN0Y2FzZXMiCiBlY2hvICIJCS1kfC0tZGVidWcgRGVidWcgbW9kZSAodHJhY2UgYWxsIHNoZWxsIGNvbW1hbmRzKSIKIGV4aXQgJDEKIH0KQEAgLTM3LDcgKzM4LDcgQEAKIH0KIAogZmluZF90ZXN0Y2FzZXMoKSB7ICNkaXJlY3RvcnkKLSAgZWNobyBgZmluZCAkMSAtbmFtZSBcKi50Y2AKKyAgZWNobyBgZmluZCAkMSAtbmFtZSBcKi50YyB8IHNvcnRgCiB9CiAKIHBhcnNlX29wdHMoKSB7ICMgb3B0cwpAQCAtNTMsNiArNTQsMTAgQEAKICAgICAgIEtFRVBfTE9HPTEKICAgICAgIHNoaWZ0IDEKICAgICA7OworICAgIC0tdmVyYm9zZXwtdikKKyAgICAgIFZFUkJPU0U9MQorICAgICAgc2hpZnQgMQorICAgIDs7CiAgICAgLS1kZWJ1Z3wtZCkKICAgICAgIERFQlVHPTEKICAgICAgIHNoaWZ0IDEKQEAgLTkwLDYgKzk1LDcgQEAKIExPR19ESVI9JFRPUF9ESVIvbG9ncy9gZGF0ZSArJVklbSVkLSVIJU0lU2AvCiBLRUVQX0xPRz0wCiBERUJVRz0wCitWRVJCT1NFPTAKICMgUGFyc2UgY29tbWFuZC1saW5lIG9wdGlvbnMKIHBhcnNlX29wdHMgJCoKIApAQCAtMTM1LDE1ICsxNDEsMTIgQEAKIENBU0VOTz0wCiB0ZXN0Y2FzZSgpIHsgIyB0ZXN0ZmlsZQogICBDQVNFTk89JCgoQ0FTRU5PKzEpKQotICBwcmxvZyAtbiAiWyRDQVNFTk9dImBncmVwICJeI1sgXHRdKmRlc2NyaXB0aW9uOiIgJDEgfCBjdXQgLWYyIC1kOmAKKyAgZGVzYz1gZ3JlcCAiXiNbIFx0XSpkZXNjcmlwdGlvbjoiICQxIHwgY3V0IC1mMiAtZDpgCisgIHBybG9nIC1uICJbJENBU0VOT10kZGVzYyIKIH0KIAotZXZhbF9yZXN1bHQoKSB7ICMgcmV0dmFsIHNpZ3ZhbAotICBsb2NhbCByZXR2YWw9JDIKLSAgaWYgWyAkMiAtZXEgMCBdOyB0aGVuCi0gICAgdGVzdCAkMSAtbmUgMCAmJiByZXR2YWw9JEZBSUwKLSAgZmkKLSAgY2FzZSAkcmV0dmFsIGluCitldmFsX3Jlc3VsdCgpIHsgIyBzaWd2YWwKKyAgY2FzZSAkMSBpbgogICAgICRQQVNTKQogICAgICAgcHJsb2cgIglbUEFTU10iCiAgICAgICBQQVNTRURfQ0FTRVM9IiRQQVNTRURfQ0FTRVMgJENBU0VOTyIKQEAgLTE4Nyw2ICsxOTAsOSBAQAogU0lHX0JBU0U9MzYJIyBVc2UgcmVhbHRpbWUgc2lnbmFscwogU0lHX1BJRD0kJAogCitTSUdfRkFJTD0kKChTSUdfQkFTRSArIEZBSUwpKQordHJhcCAnU0lHX1JFU1VMVD0kRkFJTCcgJFNJR19GQUlMCisKIFNJR19VTlJFU09MVkVEPSQoKFNJR19CQVNFICsgVU5SRVNPTFZFRCkpCiBleGl0X3VucmVzb2x2ZWQgKCkgewogICBraWxsIC1zICRTSUdfVU5SRVNPTFZFRCAkU0lHX1BJRApAQCAtMjE1LDE3ICsyMjEsMjUgQEAKIH0KIHRyYXAgJ1NJR19SRVNVTFQ9JFhGQUlMJyAkU0lHX1hGQUlMCiAKK19fcnVuX3Rlc3QoKSB7ICMgdGVzdGZpbGUKKyAgIyBzZXR1cCBQSUQgYW5kIFBQSUQsICQkIGlzIG5vdCB1cGRhdGVkLgorICAoY2QgJFRSQUNJTkdfRElSOyByZWFkIFBJRCBfIDwgL3Byb2Mvc2VsZi9zdGF0IDsgc2V0IC1lOyBzZXQgLXg7IC4gJDEpCisgIFsgJD8gLW5lIDAgXSAmJiBraWxsIC1zICRTSUdfRkFJTCAkU0lHX1BJRAorfQorCiAjIFJ1biBvbmUgdGVzdCBjYXNlCiBydW5fdGVzdCgpIHsgIyB0ZXN0ZmlsZQogICBsb2NhbCB0ZXN0bmFtZT1gYmFzZW5hbWUgJDFgCi0gIGxvY2FsIHRlc3Rsb2c9YG1rdGVtcCAtLXRtcGRpcj0kTE9HX0RJUiAke3Rlc3RuYW1lfS1YWFhYWFgubG9nYAorICBsb2NhbCB0ZXN0bG9nPWBta3RlbXAgJExPR19ESVIvJHt0ZXN0bmFtZX0tbG9nLlhYWFhYWGAKICAgdGVzdGNhc2UgJDEKICAgZWNobyAiZXhlY3V0ZTogIiQxID4gJHRlc3Rsb2cKICAgU0lHX1JFU1VMVD0wCi0gICMgc2V0dXAgUElEIGFuZCBQUElELCAkJCBpcyBub3QgdXBkYXRlZC4KLSAgKGNkICRUUkFDSU5HX0RJUjsgcmVhZCBQSUQgXyA8IC9wcm9jL3NlbGYvc3RhdCA7Ci0gICBzZXQgLWU7IHNldCAteDsgLiAkMSkgPj4gJHRlc3Rsb2cgMj4mMQotICBldmFsX3Jlc3VsdCAkPyAkU0lHX1JFU1VMVAorICBpZiBbICRWRVJCT1NFIC1uZSAwIF07IHRoZW4KKyAgICBfX3J1bl90ZXN0ICQxIDI+PiAkdGVzdGxvZyB8IHRlZSAtYSAkdGVzdGxvZworICBlbHNlCisgICAgX19ydW5fdGVzdCAkMSA+PiAkdGVzdGxvZyAyPiYxCisgIGZpCisgIGV2YWxfcmVzdWx0ICRTSUdfUkVTVUxUCiAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgogICAgICMgUmVtb3ZlIHRlc3QgbG9nIGlmIHRoZSB0ZXN0IHdhcyBkb25lIGFzIGl0IHdhcyBleHBlY3RlZC4KICAgICBbICRLRUVQX0xPRyAtZXEgMCBdICYmIHJtICR0ZXN0bG9nCkBAIC0yMzUsNiArMjQ5LDkgQEAKICAgZmkKIH0KIAorIyBsb2FkIGluIHRoZSBoZWxwZXIgZnVuY3Rpb25zCisuICRURVNUX0RJUi9mdW5jdGlvbnMKKwogIyBNYWluIGxvb3AKIGZvciB0IGluICRURVNUX0NBU0VTOyBkbwogICBydW5fdGVzdCAkdApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC8wMGJhc2ljL2Jhc2ljNC50YyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvMDBiYXNpYy9iYXNpYzQudGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5YzQ5YQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvMDBiYXNpYy9iYXNpYzQudGMKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKyMgZGVzY3JpcHRpb246IEJhc2ljIGV2ZW50IHRyYWNpbmcgY2hlY2sKK3Rlc3QgLWYgYXZhaWxhYmxlX2V2ZW50cyAtYSAtZiBzZXRfZXZlbnQgLWEgLWQgZXZlbnRzCisjIGNoZWNrIHNjaGVkdWxlciBldmVudHMgYXJlIGF2YWlsYWJsZQorZ3JlcCAtcSBzY2hlZCBhdmFpbGFibGVfZXZlbnRzICYmIGV4aXQgMCB8fCBleGl0IC0xClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9ldmVudC9ldmVudC1lbmFibGUudGMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2V2ZW50L2V2ZW50LWVuYWJsZS50YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Njg2MTZkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9ldmVudC9ldmVudC1lbmFibGUudGMKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisjIGRlc2NyaXB0aW9uOiBldmVudCB0cmFjaW5nIC0gZW5hYmxlL2Rpc2FibGUgd2l0aCBldmVudCBsZXZlbCBmaWxlcworCitkb19yZXNldCgpIHsKKyAgICBlY2hvID4gc2V0X2V2ZW50CisgICAgY2xlYXJfdHJhY2UKK30KKworZmFpbCgpIHsgI21zZworICAgIGRvX3Jlc2V0CisgICAgZWNobyAkMQorICAgIGV4aXQgLTEKK30KKworaWYgWyAhIC1mIHNldF9ldmVudCAtbyAhIC1kIGV2ZW50cy9zY2hlZCBdOyB0aGVuCisgICAgZWNobyAiZXZlbnQgdHJhY2luZyBpcyBub3Qgc3VwcG9ydGVkIgorICAgIGV4aXRfdW5zdXBwb3J0ZWQKK2ZpCisKK3Jlc2V0X3RyYWNlcgorZG9fcmVzZXQKKworZWNobyAnc2NoZWQ6c2NoZWRfc3dpdGNoJyA+IHNldF9ldmVudAordXNsZWVwIDEKKworY291bnQ9YGNhdCB0cmFjZSB8IGdyZXAgc2NoZWRfc3dpdGNoIHwgd2MgLWxgCitpZiBbICRjb3VudCAtZXEgMCBdOyB0aGVuCisgICAgZmFpbCAic2NoZWRfc3dpdGNoIGV2ZW50cyBhcmUgbm90IHJlY29yZGVkIgorZmkKKworZG9fcmVzZXQKKworZWNobyAxID4gZXZlbnRzL3NjaGVkL3NjaGVkX3N3aXRjaC9lbmFibGUKK3VzbGVlcCAxCisKK2NvdW50PWBjYXQgdHJhY2UgfCBncmVwIHNjaGVkX3N3aXRjaCB8IHdjIC1sYAoraWYgWyAkY291bnQgLWVxIDAgXTsgdGhlbgorICAgIGZhaWwgInNjaGVkX3N3aXRjaCBldmVudHMgYXJlIG5vdCByZWNvcmRlZCIKK2ZpCisKK2RvX3Jlc2V0CisKK2VjaG8gMCA+IGV2ZW50cy9zY2hlZC9zY2hlZF9zd2l0Y2gvZW5hYmxlCit1c2xlZXAgMQorCitjb3VudD1gY2F0IHRyYWNlIHwgZ3JlcCBzY2hlZF9zd2l0Y2ggfCB3YyAtbGAKK2lmIFsgJGNvdW50IC1uZSAwIF07IHRoZW4KKyAgICBmYWlsICJzY2hlZF9zd2l0Y2ggZXZlbnRzIHNob3VsZCBub3QgYmUgcmVjb3JkZWQiCitmaQorCitkb19yZXNldAorCitleGl0IDAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvZXZlbnQvc3Vic3lzdGVtLWVuYWJsZS50YyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvZXZlbnQvc3Vic3lzdGVtLWVuYWJsZS50YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTVjNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9ldmVudC9zdWJzeXN0ZW0tZW5hYmxlLnRjCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorIyBkZXNjcmlwdGlvbjogZXZlbnQgdHJhY2luZyAtIGVuYWJsZS9kaXNhYmxlIHdpdGggc3Vic3lzdGVtIGxldmVsIGZpbGVzCisKK2RvX3Jlc2V0KCkgeworICAgIGVjaG8gPiBzZXRfZXZlbnQKKyAgICBjbGVhcl90cmFjZQorfQorCitmYWlsKCkgeyAjbXNnCisgICAgZG9fcmVzZXQKKyAgICBlY2hvICQxCisgICAgZXhpdCAtMQorfQorCitpZiBbICEgLWYgc2V0X2V2ZW50IC1vICEgLWQgZXZlbnRzL3NjaGVkIF07IHRoZW4KKyAgICBlY2hvICJldmVudCB0cmFjaW5nIGlzIG5vdCBzdXBwb3J0ZWQiCisgICAgZXhpdF91bnN1cHBvcnRlZAorZmkKKworcmVzZXRfdHJhY2VyCitkb19yZXNldAorCitlY2hvICdzY2hlZDoqJyA+IHNldF9ldmVudAordXNsZWVwIDEKKworY291bnQ9YGNhdCB0cmFjZSB8IGdyZXAgLXYgXiMgfCBhd2sgJ3sgcHJpbnQgJDUgfScgfCBzb3J0IC11IHwgd2MgLWxgCitpZiBbICRjb3VudCAtbHQgMyBdOyB0aGVuCisgICAgZmFpbCAiYXQgbGVhc3QgZm9yaywgZXhlYyBhbmQgZXhpdCBldmVudHMgc2hvdWxkIGJlIHJlY29yZGVkIgorZmkKKworZG9fcmVzZXQKKworZWNobyAxID4gZXZlbnRzL3NjaGVkL2VuYWJsZQordXNsZWVwIDEKKworY291bnQ9YGNhdCB0cmFjZSB8IGdyZXAgLXYgXiMgfCBhd2sgJ3sgcHJpbnQgJDUgfScgfCBzb3J0IC11IHwgd2MgLWxgCitpZiBbICRjb3VudCAtbHQgMyBdOyB0aGVuCisgICAgZmFpbCAiYXQgbGVhc3QgZm9yaywgZXhlYyBhbmQgZXhpdCBldmVudHMgc2hvdWxkIGJlIHJlY29yZGVkIgorZmkKKworZG9fcmVzZXQKKworZWNobyAwID4gZXZlbnRzL3NjaGVkL2VuYWJsZQordXNsZWVwIDEKKworY291bnQ9YGNhdCB0cmFjZSB8IGdyZXAgLXYgXiMgfCBhd2sgJ3sgcHJpbnQgJDUgfScgfCBzb3J0IC11IHwgd2MgLWxgCitpZiBbICRjb3VudCAtbmUgMCBdOyB0aGVuCisgICAgZmFpbCAiYW55IG9mIHNjaGVkdWxlciBldmVudHMgc2hvdWxkIG5vdCBiZSByZWNvcmRlZCIKK2ZpCisKK2RvX3Jlc2V0CisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9ldmVudC90b3BsZXZlbC1lbmFibGUudGMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2V2ZW50L3RvcGxldmVsLWVuYWJsZS50YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODA4NDU3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9ldmVudC90b3BsZXZlbC1lbmFibGUudGMKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisjIGRlc2NyaXB0aW9uOiBldmVudCB0cmFjaW5nIC0gZW5hYmxlL2Rpc2FibGUgd2l0aCB0b3AgbGV2ZWwgZmlsZXMKKworZG9fcmVzZXQoKSB7CisgICAgZWNobyA+IHNldF9ldmVudAorICAgIGNsZWFyX3RyYWNlCit9CisKK2ZhaWwoKSB7ICNtc2cKKyAgICBkb19yZXNldAorICAgIGVjaG8gJDEKKyAgICBleGl0IC0xCit9CisKK2lmIFsgISAtZiBhdmFpbGFibGVfZXZlbnRzIC1vICEgLWYgc2V0X2V2ZW50IC1vICEgLWQgZXZlbnRzIF07IHRoZW4KKyAgICBlY2hvICJldmVudCB0cmFjaW5nIGlzIG5vdCBzdXBwb3J0ZWQiCisgICAgZXhpdF91bnN1cHBvcnRlZAorZmkKKworcmVzZXRfdHJhY2VyCitkb19yZXNldAorCitlY2hvICcqOionID4gc2V0X2V2ZW50Citjb3VudD1gY2F0IHRyYWNlIHwgZ3JlcCAtdiBeIyB8IHdjIC1sYAoraWYgWyAkY291bnQgLWVxIDAgXTsgdGhlbgorICAgIGZhaWwgIm5vbmUgb2YgZXZlbnRzIGFyZSByZWNvcmRlZCIKK2ZpCisKK2RvX3Jlc2V0CisKK2VjaG8gMSA+IGV2ZW50cy9lbmFibGUKK2NvdW50PWBjYXQgdHJhY2UgfCBncmVwIC12IF4jIHwgd2MgLWxgCitpZiBbICRjb3VudCAtZXEgMCBdOyB0aGVuCisgICAgZmFpbCAibm9uZSBvZiBldmVudHMgYXJlIHJlY29yZGVkIgorZmkKKworZG9fcmVzZXQKKworZWNobyAwID4gZXZlbnRzL2VuYWJsZQorY291bnQ9YGNhdCB0cmFjZSB8IGdyZXAgLXYgXiMgfCB3YyAtbGAKK2lmIFsgJGNvdW50IC1uZSAwIF07IHRoZW4KKyAgICBmYWlsICJhbnkgb2YgZXZlbnRzIHNob3VsZCBub3QgYmUgcmVjb3JkZWQiCitmaQorCitkb19yZXNldAorCitleGl0IDAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvZnRyYWNlL2ZncmFwaC1maWx0ZXItc3RhY2sudGMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2Z0cmFjZS9mZ3JhcGgtZmlsdGVyLXN0YWNrLnRjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWUwMTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2Z0cmFjZS9mZ3JhcGgtZmlsdGVyLXN0YWNrLnRjCkBAIC0wLDAgKzEsODkgQEAKKyMhL2Jpbi9zaAorIyBkZXNjcmlwdGlvbjogZnRyYWNlIC0gZnVuY3Rpb24gZ3JhcGggZmlsdGVycyB3aXRoIHN0YWNrIHRyYWNlcgorCisjIE1ha2Ugc3VyZSB0aGF0IGZ1bmN0aW9uIGdyYXBoIGZpbHRlcmluZyB3b3JrcywgYW5kIGlzIG5vdAorIyBhZmZlY3RlZCBieSBvdGhlciB0cmFjZXJzIGVuYWJsZWQgKGxpa2Ugc3RhY2sgdHJhY2VyKQorCitpZiAhIGdyZXAgLXEgZnVuY3Rpb25fZ3JhcGggYXZhaWxhYmxlX3RyYWNlcnM7IHRoZW4KKyAgICBlY2hvICJubyBmdW5jdGlvbiBncmFwaCB0cmFjZXIgY29uZmlndXJlZCIKKyAgICBleGl0X3Vuc3VwcG9ydGVkCitmaQorCitpZiBbICEgLWYgc2V0X2Z0cmFjZV9maWx0ZXIgXTsgdGhlbgorICAgIGVjaG8gInNldF9mdHJhY2VfZmlsdGVyIG5vdCBmb3VuZD8gSXMgZHluYW1pYyBmdHJhY2Ugbm90IHNldD8iCisgICAgZXhpdF91bnN1cHBvcnRlZAorZmkKKworZG9fcmVzZXQoKSB7CisgICAgcmVzZXRfdHJhY2VyCisgICAgZWNobyAwID4gL3Byb2Mvc3lzL2tlcm5lbC9zdGFja190cmFjZXJfZW5hYmxlZAorICAgIGVuYWJsZV90cmFjaW5nCisgICAgY2xlYXJfdHJhY2UKKyAgICBlY2hvID4gc2V0X2Z0cmFjZV9maWx0ZXIKK30KKworZmFpbCgpIHsgIyBtc2cKKyAgICBkb19yZXNldAorICAgIGVjaG8gJDEKKyAgICBleGl0IC0xCit9CisKK2Rpc2FibGVfdHJhY2luZworY2xlYXJfdHJhY2U7CisKKyMgZmlsdGVyIHNvbWV0aGluZywgc2NoZWR1bGUgaXMgYWx3YXlzIGdvb2QKK2lmICEgZWNobyAic2NoZWR1bGUiID4gc2V0X2Z0cmFjZV9maWx0ZXI7IHRoZW4KKyAgICAjIHRlc3QgZm9yIHBvd2VycGMgNjQKKyAgICBpZiAhIGVjaG8gIi5zY2hlZHVsZSIgPiBzZXRfZnRyYWNlX2ZpbHRlcjsgdGhlbgorCWZhaWwgImNhbiBub3QgZW5hYmxlIHNjaGVkdWxlIGZpbHRlciIKKyAgICBmaQorZmkKKworZWNobyBmdW5jdGlvbl9ncmFwaCA+IGN1cnJlbnRfdHJhY2VyCisKK2lmIFsgISAtZiBzdGFja190cmFjZSBdOyB0aGVuCisgICAgZWNobyAiU3RhY2sgdHJhY2VyIG5vdCBjb25maWd1cmVkIgorICAgIGRvX3Jlc2V0CisgICAgZXhpdF91bnN1cHBvcnRlZDsKK2ZpCisKK2VjaG8gIk5vdyB0ZXN0aW5nIHdpdGggc3RhY2sgdHJhY2VyIgorCitlY2hvIDEgPiAvcHJvYy9zeXMva2VybmVsL3N0YWNrX3RyYWNlcl9lbmFibGVkCisKK2Rpc2FibGVfdHJhY2luZworY2xlYXJfdHJhY2UKK2VuYWJsZV90cmFjaW5nCitzbGVlcCAxCisKK2NvdW50PWBjYXQgdHJhY2UgfCBncmVwICcoKScgfCBncmVwIC12IHNjaGVkdWxlIHwgd2MgLWxgCisKK2lmIFsgJGNvdW50IC1uZSAwIF07IHRoZW4KKyAgICBmYWlsICJHcmFwaCBmaWx0ZXJpbmcgbm90IHdvcmtpbmcgd2l0aCBzdGFjayB0cmFjZXI/IgorZmkKKworIyBNYWtlIHN1cmUgd2UgZGlkIGZpbmQgc29tZXRoaW5nCitjb3VudD1gY2F0IHRyYWNlIHwgZ3JlcCAnc2NoZWR1bGUoKScgfCB3YyAtbGAgCitpZiBbICRjb3VudCAtZXEgMCBdOyB0aGVuCisgICAgZmFpbCAiTm8gc2NoZWR1bGUgdHJhY2VzIGZvdW5kPyIKK2ZpCisKK2VjaG8gMCA+IC9wcm9jL3N5cy9rZXJuZWwvc3RhY2tfdHJhY2VyX2VuYWJsZWQKK2NsZWFyX3RyYWNlCitzbGVlcCAxCisKKworY291bnQ9YGNhdCB0cmFjZSB8IGdyZXAgJygpJyB8IGdyZXAgLXYgc2NoZWR1bGUgfCB3YyAtbGAKKworaWYgWyAkY291bnQgLW5lIDAgXTsgdGhlbgorICAgIGZhaWwgIkdyYXBoIGZpbHRlcmluZyBub3Qgd29ya2luZyBhZnRlciBzdGFjayB0cmFjZXIgZGlzYWJsZWQ/IgorZmkKKworY291bnQ9YGNhdCB0cmFjZSB8IGdyZXAgJ3NjaGVkdWxlKCknIHwgd2MgLWxgIAoraWYgWyAkY291bnQgLWVxIDAgXTsgdGhlbgorICAgIGZhaWwgIk5vIHNjaGVkdWxlIHRyYWNlcyBmb3VuZD8iCitmaQorCitkb19yZXNldAorCitleGl0IDAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvZnRyYWNlL2ZncmFwaC1maWx0ZXIudGMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2Z0cmFjZS9mZ3JhcGgtZmlsdGVyLnRjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjVmNjMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2Z0cmFjZS9mZ3JhcGgtZmlsdGVyLnRjCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIyBkZXNjcmlwdGlvbjogZnRyYWNlIC0gZnVuY3Rpb24gZ3JhcGggZmlsdGVycworCisjIE1ha2Ugc3VyZSB0aGF0IGZ1bmN0aW9uIGdyYXBoIGZpbHRlcmluZyB3b3JrcworCitpZiAhIGdyZXAgLXEgZnVuY3Rpb25fZ3JhcGggYXZhaWxhYmxlX3RyYWNlcnM7IHRoZW4KKyAgICBlY2hvICJubyBmdW5jdGlvbiBncmFwaCB0cmFjZXIgY29uZmlndXJlZCIKKyAgICBleGl0X3Vuc3VwcG9ydGVkCitmaQorCitkb19yZXNldCgpIHsKKyAgICByZXNldF90cmFjZXIKKyAgICBlbmFibGVfdHJhY2luZworICAgIGNsZWFyX3RyYWNlCit9CisKK2ZhaWwoKSB7ICMgbXNnCisgICAgZG9fcmVzZXQKKyAgICBlY2hvICQxCisgICAgZXhpdCAtMQorfQorCitkaXNhYmxlX3RyYWNpbmcKK2NsZWFyX3RyYWNlCisKKyMgZmlsdGVyIHNvbWV0aGluZywgc2NoZWR1bGUgaXMgYWx3YXlzIGdvb2QKK2lmICEgZWNobyAic2NoZWR1bGUiID4gc2V0X2Z0cmFjZV9maWx0ZXI7IHRoZW4KKyAgICAjIHRlc3QgZm9yIHBvd2VycGMgNjQKKyAgICBpZiAhIGVjaG8gIi5zY2hlZHVsZSIgPiBzZXRfZnRyYWNlX2ZpbHRlcjsgdGhlbgorCWZhaWwgImNhbiBub3QgZW5hYmxlIHNjaGVkdWxlIGZpbHRlciIKKyAgICBmaQorZmkKKworZWNobyBmdW5jdGlvbl9ncmFwaCA+IGN1cnJlbnRfdHJhY2VyCitlbmFibGVfdHJhY2luZworc2xlZXAgMQorIyBzZWFyY2ggZm9yIGZ1bmN0aW9ucyAoaGFzICIoKSIgb24gdGhlIGxpbmUpLCBhbmQgbWFrZSBzdXJlCisjIHRoYXQgb25seSB0aGUgc2NoZWR1bGUgZnVuY3Rpb24gd2FzIGZvdW5kCitjb3VudD1gY2F0IHRyYWNlIHwgZ3JlcCAnKCknIHwgZ3JlcCAtdiBzY2hlZHVsZSB8IHdjIC1sYAoraWYgWyAkY291bnQgLW5lIDAgXTsgdGhlbgorICAgIGZhaWwgIkdyYXBoIGZpbHRlcmluZyBub3Qgd29ya2luZyBieSBpdHNlbGY/IgorZmkKKworIyBNYWtlIHN1cmUgd2UgZGlkIGZpbmQgc29tZXRoaW5nCitjb3VudD1gY2F0IHRyYWNlIHwgZ3JlcCAnc2NoZWR1bGUoKScgfCB3YyAtbGAgCitpZiBbICRjb3VudCAtZXEgMCBdOyB0aGVuCisgICAgZmFpbCAiTm8gc2NoZWR1bGUgdHJhY2VzIGZvdW5kPyIKK2ZpCisKK2RvX3Jlc2V0CisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9mdHJhY2UvZnVuY19wcm9maWxlci50YyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvZnRyYWNlL2Z1bmNfcHJvZmlsZXIudGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3MTljYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvZnRyYWNlL2Z1bmNfcHJvZmlsZXIudGMKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisjIGRlc2NyaXB0aW9uOiBmdHJhY2UgLSBmdW5jdGlvbiBwcm9maWxlciB3aXRoIGZ1bmN0aW9uIHRyYWNpbmcKKworIyBUaGVyZSB3YXMgYSBidWcgYWZ0ZXIgYSByZXdyaXRlIG9mIHRoZSBmdHJhY2UgaW5mcmFzdHJ1Y3R1cmUgdGhhdAorIyBjYXVzZWQgdGhlIGZ1bmN0aW9uX3Byb2ZpbGVyIG5vdCB0byBiZSBhYmxlIHRvIHJ1biB3aXRoIHRoZSBmdW5jdGlvbgorIyB0cmFjZXIsIGJlY2F1c2UgdGhlIGZ1bmN0aW9uX3Byb2ZpbGVyIHVzZWQgdGhlIGZ1bmN0aW9uX2dyYXBoIHRyYWNlcgorIyBhbmQgaXQgd2FzIGFzc3VtZWQgdGhlIHR3byBjb3VsZCBub3QgcnVuIHNpbXVsdGFuZW91c2x5LgorIworIyBUaGVyZSB3YXMgYW5vdGhlciByZWxhdGVkIGJ1ZyB3aGVyZSB0aGUgc29sdXRpb24gdG8gdGhlIGZpcnN0IGJ1ZworIyBicm9rZSB0aGUgd2F5IGZpbHRlcmluZyBvZiB0aGUgZnVuY3Rpb24gdHJhY2VyIHdvcmtlZC4KKyMKKyMgVGhpcyB0ZXN0IHRyaWdnZXJzIHRob3NlIGJ1Z3Mgb24gdGhvc2Uga2VybmVscy4KKyMKKyMgV2UgbmVlZCBmdW5jdGlvbl9ncmFwaCBhbmQgcHJvZmlsaW5nIHRvIHRvIHJ1biB0aGlzIHRlc3QKK2lmICEgZ3JlcCAtcSBmdW5jdGlvbl9ncmFwaCBhdmFpbGFibGVfdHJhY2VyczsgdGhlbgorICAgIGVjaG8gIm5vIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBjb25maWd1cmVkIgorICAgIGV4aXRfdW5zdXBwb3J0ZWQ7CitmaQorCitpZiBbICEgLWYgc2V0X2Z0cmFjZV9maWx0ZXIgXTsgdGhlbgorICAgIGVjaG8gInNldF9mdHJhY2VfZmlsdGVyIG5vdCBmb3VuZD8gSXMgZHluYW1pYyBmdHJhY2Ugbm90IHNldD8iCisgICAgZXhpdF91bnN1cHBvcnRlZAorZmkKKworaWYgWyAhIC1mIGZ1bmN0aW9uX3Byb2ZpbGVfZW5hYmxlZCBdOyB0aGVuCisgICAgZWNobyAiZnVuY3Rpb25fcHJvZmlsZV9lbmFibGVkIG5vdCBmb3VuZCwgZnVuY3Rpb24gcHJvZmlsaW5nIGVuYWJsZWQ/IgorICAgIGV4aXRfdW5zdXBwb3J0ZWQKK2ZpCisKK2ZhaWwoKSB7ICMgbWVzZworICAgIHJlc2V0X3RyYWNlcgorICAgIGVjaG8gPiBzZXRfZnRyYWNlX2ZpbHRlcgorICAgIGVjaG8gJDEKKyAgICBleGl0IC0xCit9CisKK2VjaG8gIlRlc3RpbmcgZnVuY3Rpb24gdHJhY2VyIHdpdGggcHJvZmlsZXI6IgorZWNobyAiZW5hYmxlIGZ1bmN0aW9uIHRyYWNlciIKK2VjaG8gZnVuY3Rpb24gPiBjdXJyZW50X3RyYWNlcgorZWNobyAiZW5hYmxlIHByb2ZpbGVyIgorZWNobyAxID4gZnVuY3Rpb25fcHJvZmlsZV9lbmFibGVkCisKK3NsZWVwIDEKKworZWNobyAiTm93IGZpbHRlciBvbiBqdXN0IHNjaGVkdWxlIgorZWNobyAnKnNjaGVkdWxlJyA+IHNldF9mdHJhY2VfZmlsdGVyCitjbGVhcl90cmFjZQorCitlY2hvICJOb3cgZGlzYWJsZSBmdW5jdGlvbiBwcm9maWxlciIKK2VjaG8gMCA+IGZ1bmN0aW9uX3Byb2ZpbGVfZW5hYmxlZAorCitzbGVlcCAxCisKKyMgbWFrZSBzdXJlIG9ubHkgc2NoZWR1bGUgZnVuY3Rpb25zIGV4aXN0CisKK2VjaG8gInRlc3RpbmcgaWYgb25seSBzY2hlZHVsZSBpcyBiZWluZyB0cmFjZWQiCitpZiBncmVwIC12IC1lICdeIycgLWUgJ3NjaGVkdWxlJyB0cmFjZTsgdGhlbgorCWZhaWwgIm1vcmUgdGhhbiBzY2hlZHVsZSB3YXMgZm91bmQiCitmaQorCitlY2hvICJNYWtlIHN1cmUgc2NoZWR1bGUgd2FzIHRyYWNlZCIKK2lmICEgZ3JlcCAtZSAnc2NoZWR1bGUnIHRyYWNlID4gL2Rldi9udWxsOyB0aGVuCisJY2F0IHRyYWNlCisJZmFpbCAiY2FuIG5vdCBmaW5kIHNjaGVkdWxlIGluIHRyYWNlIgorZmkKKworZWNobyA+IHNldF9mdHJhY2VfZmlsdGVyCitjbGVhcl90cmFjZQorCitzbGVlcCAxCisKK2VjaG8gIm1ha2Ugc3VyZSBzb21ldGhpbmcgb3RoZXIgdGhhbiBzY2hlZHVsZXIgaXMgYmVpbmcgdHJhY2VkIgoraWYgISBncmVwIC12IC1lICdeIycgLWUgJ3NjaGVkdWxlJyB0cmFjZSA+IC9kZXYvbnVsbDsgdGhlbgorCWNhdCB0cmFjZQorCWZhaWwgIm5vIG90aGVyIGZ1bmN0aW9ucyBiZXNpZGVzIHNjaGVkdWxlIHdhcyBmb3VuZCIKK2ZpCisKK3Jlc2V0X3RyYWNlcgorCitleGl0IDAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvZnVuY3Rpb25zIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9mdW5jdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4Y2QwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQvZnVuY3Rpb25zCkBAIC0wLDAgKzEsMTYgQEAKKworY2xlYXJfdHJhY2UoKSB7ICMgcmVzZXQgdHJhY2Ugb3V0cHV0CisgICAgZWNobyA+IHRyYWNlCit9CisKK2Rpc2FibGVfdHJhY2luZygpIHsgIyBzdG9wIHRyYWNlIHJlY29yZGluZworICAgIGVjaG8gMCA+IHRyYWNpbmdfb24KK30KKworZW5hYmxlX3RyYWNpbmcoKSB7ICMgc3RhcnQgdHJhY2UgcmVjb3JkaW5nCisgICAgZWNobyAxID4gdHJhY2luZ19vbgorfQorCityZXNldF90cmFjZXIoKSB7ICMgcmVzZXQgdGhlIGN1cnJlbnQgdHJhY2VyCisgICAgZWNobyBub3AgPiBjdXJyZW50X3RyYWNlcgorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUvYWRkX2FuZF9yZW1vdmUudGMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2twcm9iZS9hZGRfYW5kX3JlbW92ZS50YwppbmRleCAxYjhiNjY1Li5hNWE0MjYyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2twcm9iZS9hZGRfYW5kX3JlbW92ZS50YworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2twcm9iZS9hZGRfYW5kX3JlbW92ZS50YwpAQCAtOSwzICs5LDQgQEAKIGdyZXAgbXlldmVudCBrcHJvYmVfZXZlbnRzCiB0ZXN0IC1kIGV2ZW50cy9rcHJvYmVzL215ZXZlbnQKIGVjaG8gPiBrcHJvYmVfZXZlbnRzCitjbGVhcl90cmFjZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUvYnVzeV9jaGVjay50YyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQva3Byb2JlL2J1c3lfY2hlY2sudGMKaW5kZXggYjU1Yzg0MC4uZDhjN2JiNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUvYnVzeV9jaGVjay50YworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2twcm9iZS9idXN5X2NoZWNrLnRjCkBAIC0xMSwzICsxMSw0IEBACiBlY2hvID4ga3Byb2JlX2V2ZW50cyAmJiBleGl0IDEgIyB0aGlzIG11c3QgZmFpbAogZWNobyAwID4gZXZlbnRzL2twcm9iZXMvbXlldmVudC9lbmFibGUKIGVjaG8gPiBrcHJvYmVfZXZlbnRzICMgdGhpcyBtdXN0IHN1Y2NlZWQKK2NsZWFyX3RyYWNlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdHJhY2UvdGVzdC5kL2twcm9iZS9rcHJvYmVfYXJncy50YyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQva3Byb2JlL2twcm9iZV9hcmdzLnRjCmluZGV4IGE2MDNkM2YuLmM0NWVlMjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQva3Byb2JlL2twcm9iZV9hcmdzLnRjCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQva3Byb2JlL2twcm9iZV9hcmdzLnRjCkBAIC0xMiw1ICsxMiw2IEBACiAoIGVjaG8gImZvcmtlZCIpCiBlY2hvIDAgPiBldmVudHMva3Byb2Jlcy90ZXN0cHJvYmUvZW5hYmxlCiBlY2hvICItOnRlc3Rwcm9iZSIgPj4ga3Byb2JlX2V2ZW50cworY2xlYXJfdHJhY2UKIHRlc3QgLWQgZXZlbnRzL2twcm9iZXMvdGVzdHByb2JlICYmIGV4aXQgMSB8fCBleGl0IDAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUva3Byb2JlX2Z0cmFjZS50YyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQva3Byb2JlL2twcm9iZV9mdHJhY2UudGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0MWQyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQva3Byb2JlL2twcm9iZV9mdHJhY2UudGMKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjIGRlc2NyaXB0aW9uOiBLcHJvYmUgZHluYW1pYyBldmVudCB3aXRoIGZ1bmN0aW9uIHRyYWNlcgorCitbIC1mIGtwcm9iZV9ldmVudHMgXSB8fCBleGl0X3Vuc3VwcG9ydGVkICMgdGhpcyBpcyBjb25maWd1cmFibGUKK2dyZXAgZnVuY3Rpb24gYXZhaWxhYmxlX3RyYWNlcnMgfHwgZXhpdF91bnN1cHBvcnRlZCAjIHRoaXMgaXMgY29uZmlndXJhYmxlCisKKyMgcHJlcGFyZQorZWNobyBub3AgPiBjdXJyZW50X3RyYWNlcgorZWNobyBkb19mb3JrID4gc2V0X2Z0cmFjZV9maWx0ZXIKK2VjaG8gMCA+IGV2ZW50cy9lbmFibGUKK2VjaG8gPiBrcHJvYmVfZXZlbnRzCitlY2hvICdwOnRlc3Rwcm9iZSBkb19mb3JrJyA+IGtwcm9iZV9ldmVudHMKKworIyBrcHJvYmUgb24gLyBmdHJhY2Ugb2ZmCitlY2hvIDEgPiBldmVudHMva3Byb2Jlcy90ZXN0cHJvYmUvZW5hYmxlCitlY2hvID4gdHJhY2UKKyggZWNobyAiZm9ya2VkIikKK2dyZXAgdGVzdHByb2JlIHRyYWNlCishIGdyZXAgJ2RvX2ZvcmsgPC0nIHRyYWNlCisKKyMga3Byb2JlIG9uIC8gZnRyYWNlIG9uCitlY2hvIGZ1bmN0aW9uID4gY3VycmVudF90cmFjZXIKK2VjaG8gPiB0cmFjZQorKCBlY2hvICJmb3JrZWQiKQorZ3JlcCB0ZXN0cHJvYmUgdHJhY2UKK2dyZXAgJ2RvX2ZvcmsgPC0nIHRyYWNlCisKKyMga3Byb2JlIG9mZiAvIGZ0cmFjZSBvbgorZWNobyAwID4gZXZlbnRzL2twcm9iZXMvdGVzdHByb2JlL2VuYWJsZQorZWNobyA+IHRyYWNlCisoIGVjaG8gImZvcmtlZCIpCishIGdyZXAgdGVzdHByb2JlIHRyYWNlCitncmVwICdkb19mb3JrIDwtJyB0cmFjZQorCisjIGtwcm9iZSBvbiAvIGZ0cmFjZSBvbgorZWNobyAxID4gZXZlbnRzL2twcm9iZXMvdGVzdHByb2JlL2VuYWJsZQorZWNobyBmdW5jdGlvbiA+IGN1cnJlbnRfdHJhY2VyCitlY2hvID4gdHJhY2UKKyggZWNobyAiZm9ya2VkIikKK2dyZXAgdGVzdHByb2JlIHRyYWNlCitncmVwICdkb19mb3JrIDwtJyB0cmFjZQorCisjIGtwcm9iZSBvbiAvIGZ0cmFjZSBvZmYKK2VjaG8gbm9wID4gY3VycmVudF90cmFjZXIKK2VjaG8gPiB0cmFjZQorKCBlY2hvICJmb3JrZWQiKQorZ3JlcCB0ZXN0cHJvYmUgdHJhY2UKKyEgZ3JlcCAnZG9fZm9yayA8LScgdHJhY2UKKworIyBjbGVhbnVwCitlY2hvIG5vcCA+IGN1cnJlbnRfdHJhY2VyCitlY2hvID4gc2V0X2Z0cmFjZV9maWx0ZXIKK2VjaG8gMCA+IGV2ZW50cy9rcHJvYmVzL3Rlc3Rwcm9iZS9lbmFibGUKK2VjaG8gPiBrcHJvYmVfZXZlbnRzCitlY2hvID4gdHJhY2UKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z0cmFjZS90ZXN0LmQva3Byb2JlL2tyZXRwcm9iZV9hcmdzLnRjIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUva3JldHByb2JlX2FyZ3MudGMKaW5kZXggMjgzYzI5ZS4uMzE3MTc5OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUva3JldHByb2JlX2FyZ3MudGMKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnRyYWNlL3Rlc3QuZC9rcHJvYmUva3JldHByb2JlX2FyZ3MudGMKQEAgLTEyLDQgKzEyLDUgQEAKICggZWNobyAiZm9ya2VkIikKIGVjaG8gMCA+IGV2ZW50cy9rcHJvYmVzL3Rlc3Rwcm9iZTIvZW5hYmxlCiBlY2hvICctOnRlc3Rwcm9iZTInID4+IGtwcm9iZV9ldmVudHMKK2NsZWFyX3RyYWNlCiB0ZXN0IC1kIGV2ZW50cy9rcHJvYmVzL3Rlc3Rwcm9iZTIgJiYgZXhpdCAxIHx8IGV4aXQgMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXRlc3QtMS1ydW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaAppbmRleCBmNmIyYjQ3Li44Y2E5ZjIxIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaApAQCAtNDUsNyArNDUsNyBAQAogdG91Y2ggJFQKIAogLiAkS1ZNL2Jpbi9mdW5jdGlvbnMuc2gKLS4gJEtWUEFUSC92ZXJfZnVuY3Rpb25zLnNoCisuICRDT05GSUdGUkFHL3Zlcl9mdW5jdGlvbnMuc2gKIAogY29uZmlnX3RlbXBsYXRlPSR7MX0KIGNvbmZpZ19kaXI9YGVjaG8gJGNvbmZpZ190ZW1wbGF0ZSB8IHNlZCAtZSAncywvW14vXSokLCwnYApAQCAtMTY4LDggKzE2OCw4IEBACiAJdG91Y2ggJHJlc2Rpci9idWlsZG9ubHkKIAlleGl0IDAKIGZpCi1lY2hvICRRRU1VICRxZW11X2FyZ3MgLW0gNTEyIC1rZXJuZWwgJGJ1aWxkZGlyLyRCT09UX0lNQUdFIC1hcHBlbmQgXCIkcWVtdV9hcHBlbmQgJGJvb3RfYXJnc1wiID4gJHJlc2Rpci9xZW11LWNtZAotKCAkUUVNVSAkcWVtdV9hcmdzIC1tIDUxMiAta2VybmVsICRidWlsZGRpci8kQk9PVF9JTUFHRSAtYXBwZW5kICIkcWVtdV9hcHBlbmQgJGJvb3RfYXJncyI7IGVjaG8gJD8gPiAkcmVzZGlyL3FlbXUtcmV0dmFsICkgJgorZWNobyAkUUVNVSAkcWVtdV9hcmdzIC1tIDUxMiAta2VybmVsICRyZXNkaXIvYnpJbWFnZSAtYXBwZW5kIFwiJHFlbXVfYXBwZW5kICRib290X2FyZ3NcIiA+ICRyZXNkaXIvcWVtdS1jbWQKKyggJFFFTVUgJHFlbXVfYXJncyAtbSA1MTIgLWtlcm5lbCAkcmVzZGlyL2J6SW1hZ2UgLWFwcGVuZCAiJHFlbXVfYXBwZW5kICRib290X2FyZ3MiOyBlY2hvICQ/ID4gJHJlc2Rpci9xZW11LXJldHZhbCApICYKIHFlbXVfcGlkPSQhCiBjb21tYW5kY29tcGxldGVkPTAKIGVjaG8gTW9uaXRvcmluZyBxZW11IGpvYiBhdCBwaWQgJHFlbXVfcGlkCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0uc2gKaW5kZXggZTUyN2RjOS4uMzY4ZDY0YSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLnNoCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS5zaApAQCAtNDcsNyArNDcsNiBAQAogY29uZmlncz0iIgogY3B1cz0wCiBkcz1gZGF0ZSArJVkuJW0uJWQtJUg6JU06JVNgCi1rdmVyc2lvbj0iIgogCiAuIGZ1bmN0aW9ucy5zaAogCkBAIC02NCw3ICs2Myw2IEBACiAJZWNobyAiICAgICAgIC0tZHVyYXRpb24gbWludXRlcyIKIAllY2hvICIgICAgICAgLS1pbnRlcmFjdGl2ZSIKIAllY2hvICIgICAgICAgLS1rbWFrZS1hcmcga2VybmVsLW1ha2UtYXJndW1lbnRzIgotCWVjaG8gIiAgICAgICAtLWt2ZXJzaW9uIHZOLk5OIgogCWVjaG8gIiAgICAgICAtLW1hYyBubjpubjpubjpubjpubjpubiIKIAllY2hvICIgICAgICAgLS1uby1pbml0cmQiCiAJZWNobyAiICAgICAgIC0tcWVtdS1hcmdzIHFlbXUtc3lzdGVtLS4uLiIKQEAgLTEyOCwxMSArMTI2LDYgQEAKIAkJVE9SVFVSRV9LTUFLRV9BUkc9IiQyIgogCQlzaGlmdAogCQk7OwotCS0ta3ZlcnNpb24pCi0JCWNoZWNrYXJnIC0ta3ZlcnNpb24gIihrZXJuZWwgdmVyc2lvbikiICQjICIkMiIgJ152WzAtOS5dKiQnICdeZXJyb3InCi0JCWt2ZXJzaW9uPSQyCi0JCXNoaWZ0Ci0JCTs7CiAJLS1tYWMpCiAJCWNoZWNrYXJnIC0tbWFjICIoTUFDIGFkZHJlc3MpIiAkIyAiJDIiICdeXChbMC05YS1mQS1GXVx7Mlx9OlwpXHs1XH1bMC05YS1mQS1GXVx7Mlx9JCcgZXJyb3IKIAkJVE9SVFVSRV9RRU1VX01BQz0kMgpAQCAtMTcwLDExICsxNjMsMTAgQEAKIGRvbmUKIAogQ09ORklHRlJBRz0ke0tWTX0vY29uZmlncy8ke1RPUlRVUkVfU1VJVEV9OyBleHBvcnQgQ09ORklHRlJBRwotS1ZQQVRIPSR7Q09ORklHRlJBR30vJGt2ZXJzaW9uOyBleHBvcnQgS1ZQQVRICiAKIGlmIHRlc3QgLXogIiRjb25maWdzIgogdGhlbgotCWNvbmZpZ3M9ImBjYXQgJENPTkZJR0ZSQUcvJGt2ZXJzaW9uL0NGTElTVGAiCisJY29uZmlncz0iYGNhdCAkQ09ORklHRlJBRy9DRkxJU1RgIgogZmkKIAogaWYgdGVzdCAteiAiJHJlc2RpciIKQEAgLTE4NiwxMCArMTc4LDEwIEBACiB0b3VjaCAkVC9jZmdjcHUKIGZvciBDRiBpbiAkY29uZmlncwogZG8KLQlpZiB0ZXN0IC1mICIkQ09ORklHRlJBRy8ka3ZlcnNpb24vJENGIgorCWlmIHRlc3QgLWYgIiRDT05GSUdGUkFHLyRDRiIKIAl0aGVuCi0JCWNwdV9jb3VudD1gY29uZmlnTlJfQ1BVUy5zaCAkQ09ORklHRlJBRy8ka3ZlcnNpb24vJENGYAotCQljcHVfY291bnQ9YGNvbmZpZ2ZyYWdfYm9vdF9jcHVzICIkVE9SVFVSRV9CT09UQVJHUyIgIiRDT05GSUdGUkFHLyRrdmVyc2lvbi8kQ0YiICIkY3B1X2NvdW50ImAKKwkJY3B1X2NvdW50PWBjb25maWdOUl9DUFVTLnNoICRDT05GSUdGUkFHLyRDRmAKKwkJY3B1X2NvdW50PWBjb25maWdmcmFnX2Jvb3RfY3B1cyAiJFRPUlRVUkVfQk9PVEFSR1MiICIkQ09ORklHRlJBRy8kQ0YiICIkY3B1X2NvdW50ImAKIAkJZWNobyAkQ0YgJGNwdV9jb3VudCA+PiAkVC9jZmdjcHUKIAllbHNlCiAJCWVjaG8gIlRoZSAtLWNvbmZpZ3MgZmlsZSAkQ0YgZG9lcyBub3QgZXhpc3QsIHRlcm1pbmF0aW5nLiIKQEAgLTI1Miw3ICsyNDQsNiBAQAogY2F0IDw8IF9fX0VPRl9fXyA+ICRUL3NjcmlwdAogQ09ORklHRlJBRz0iJENPTkZJR0ZSQUciOyBleHBvcnQgQ09ORklHRlJBRwogS1ZNPSIkS1ZNIjsgZXhwb3J0IEtWTQotS1ZQQVRIPSIkS1ZQQVRIIjsgZXhwb3J0IEtWUEFUSAogUEFUSD0iJFBBVEgiOyBleHBvcnQgUEFUSAogVE9SVFVSRV9CT09UX0lNQUdFPSIkVE9SVFVSRV9CT09UX0lNQUdFIjsgZXhwb3J0IFRPUlRVUkVfQk9PVF9JTUFHRQogVE9SVFVSRV9CVUlMRE9OTFk9IiRUT1JUVVJFX0JVSUxET05MWSI7IGV4cG9ydCBUT1JUVVJFX0JVSUxET05MWQpAQCAtMjg1LDcgKzI3Niw3IEBACiBmaQogX19fRU9GX19fCiBhd2sgPCAkVC9jZmdjcHUucGFjayBcCi0JLXYgQ09ORklHRElSPSIkQ09ORklHRlJBRy8ka3ZlcnNpb24vIiBcCisJLXYgQ09ORklHRElSPSIkQ09ORklHRlJBRy8iIFwKIAktdiBLVk09IiRLVk0iIFwKIAktdiBuY3B1cz0kY3B1cyBcCiAJLXYgcmQ9JHJlc2Rpci8kZHMvIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVElOWTAyIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9USU5ZMDIKaW5kZXggZjRmZWFlZS4uMzZlNDFkZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9USU5ZMDIKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9USU5ZMDIKQEAgLTcsNiArNyw4IEBACiBDT05GSUdfTk9fSFpfSURMRT1uCiBDT05GSUdfTk9fSFpfRlVMTD1uCiBDT05GSUdfUkNVX1RSQUNFPXkKK0NPTkZJR19QUk9WRV9MT0NLSU5HPXkKK0NPTkZJR19QUk9WRV9SQ1U9eQogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgogQ09ORklHX1BSRUVNUFRfQ09VTlQ9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9USU5ZMDIuYm9vdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVElOWTAyLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwODAyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVElOWTAyLmJvb3QKQEAgLTAsMCArMSwyIEBACityY3VwZGF0ZS5yY3Vfc2VsZl90ZXN0PTEKK3JjdXBkYXRlLnJjdV9zZWxmX3Rlc3RfYmg9MQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDEgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMQppbmRleCAzOGUzODk1Li5mOGExMGE3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMQorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMQpAQCAtMiw3ICsyLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9bgogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KIENPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15CisjQ0hFQ0sjQ09ORklHX1BSRUVNUFRfUkNVPXkKIENPTkZJR19IWl9QRVJJT0RJQz1uCiBDT05GSUdfTk9fSFpfSURMRT15CiBDT05GSUdfTk9fSFpfRlVMTD1uCkBAIC0xNCw2ICsxNCw1IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVX1pFUk89eQogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9bgogQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz1uCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFPW4KIENPTkZJR19SQ1VfQk9PU1Q9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDIgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMgppbmRleCBlYTExOWJhLi42MjkxMjJmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMgorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMgpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9bgogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KIENPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15CisjQ0hFQ0sjQ09ORklHX1BSRUVNUFRfUkNVPXkKIENPTkZJR19IWl9QRVJJT0RJQz1uCiBDT05GSUdfTk9fSFpfSURMRT15CiBDT05GSUdfTk9fSFpfRlVMTD1uCkBAIC0xOSw2ICsxOSw1IEBACiBDT05GSUdfREVCVUdfTE9DS19BTExPQz15CiBDT05GSUdfUFJPVkVfTE9DS0lORz1uCiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPW4KLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9eQogQ09ORklHX1JDVV9CT09TVD1uCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMi1UIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDItVAppbmRleCAxOWNmOTQ4Li5hMjVkZTQ3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMi1UCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTAyLVQKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPW4KIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCiBDT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQorI0NIRUNLI0NPTkZJR19QUkVFTVBUX1JDVT15CiBDT05GSUdfSFpfUEVSSU9ESUM9bgogQ09ORklHX05PX0haX0lETEU9eQogQ09ORklHX05PX0haX0ZVTEw9bgpAQCAtMTksNiArMTksNSBAQAogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQogQ09ORklHX1BST1ZFX0xPQ0tJTkc9bgogQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz1uCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFPXkKIENPTkZJR19SQ1VfQk9PU1Q9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMwppbmRleCBmNDU2N2ZiLi41M2YyNGUwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMworKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwMwpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9bgogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KIENPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15CisjQ0hFQ0sjQ09ORklHX1BSRUVNUFRfUkNVPXkKIENPTkZJR19IWl9QRVJJT0RJQz15CiBDT05GSUdfTk9fSFpfSURMRT1uCiBDT05GSUdfTk9fSFpfRlVMTD1uCkBAIC0xNSw3ICsxNSw2IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVPW4KIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89bgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT1uCiBDT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCitDT05GSUdfUkNVX0tUSFJFQURfUFJJTz0yCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA0CmluZGV4IDBhMjYyZmIuLjBmODRkYjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA0CisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA0CkBAIC0xOSw1ICsxOSw0IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVPW4KIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT15CiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA1CmluZGV4IDNhMDZiOTcuLjIxMmUzYmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA1CisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA1CkBAIC0xOSw1ICsxOSw0IEBACiBDT05GSUdfUFJPVkVfTE9DS0lORz15CiBDT05GSUdfUFJPVkVfUkNVPXkKIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89bgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT1uCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNS5ib290IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDUuYm9vdAppbmRleCAzYjQyYjhiLi4xNWIzZTFhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNS5ib290CisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA1LmJvb3QKQEAgLTEgKzEsMiBAQAogcmN1dG9ydHVyZS50b3J0dXJlX3R5cGU9c2NoZWQKK3JjdXBkYXRlLnJjdV9zZWxmX3Rlc3Rfc2NoZWQ9MQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDYgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNgppbmRleCA4ZjA4NGNjLi43ZWVlNjNiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNgorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNgpAQCAtMjAsNSArMjAsNCBAQAogQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQogQ09ORklHX1BST1ZFX1JDVT15CiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPW4KLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDYuYm9vdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA2LmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5YTAzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA2LmJvb3QKQEAgLTAsMCArMSwzIEBACityY3VwZGF0ZS5yY3Vfc2VsZl90ZXN0PTEKK3JjdXBkYXRlLnJjdV9zZWxmX3Rlc3RfYmg9MQorcmN1cGRhdGUucmN1X3NlbGZfdGVzdF9zY2hlZD0xCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwNyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA3CmluZGV4IDhmMTAxNzYuLjkyYTk3ZmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA3CisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA3CkBAIC0xOSw1ICsxOSw0IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVPW4KIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT1uCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4CmluZGV4IDY5YTJlMjUuLjU4MTIwMjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4CisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4CkBAIC0zLDcgKzMsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT1uCiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgogQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKKyNDSEVDSyNDT05GSUdfUFJFRU1QVF9SQ1U9eQogQ09ORklHX0haX1BFUklPRElDPW4KIENPTkZJR19OT19IWl9JRExFPXkKIENPTkZJR19OT19IWl9GVUxMPW4KQEAgLTE4LDcgKzE4LDggQEAKIENPTkZJR19SQ1VfTk9DQl9DUFU9eQogQ09ORklHX1JDVV9OT0NCX0NQVV9BTEw9eQogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9bgorQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQorQ09ORklHX1BST1ZFX1JDVT15CiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPW4KLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0U9bgogQ09ORklHX1JDVV9CT09TVD1uCiBDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD1uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOC1UIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDgtVAppbmRleCBhMGYzMmZiLi4zZWFlY2NhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOC1UCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4LVQKQEAgLTMsNyArMyw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPW4KIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCiBDT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQorI0NIRUNLI0NPTkZJR19QUkVFTVBUX1JDVT15CiBDT05GSUdfSFpfUEVSSU9ESUM9bgogQ09ORklHX05PX0haX0lETEU9eQogQ09ORklHX05PX0haX0ZVTEw9bgpAQCAtMTksNiArMTksNSBAQAogQ09ORklHX1JDVV9OT0NCX0NQVV9BTEw9eQogQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9bgogQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz1uCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFPW4KIENPTkZJR19SQ1VfQk9PU1Q9bgogQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9bgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDguYm9vdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvVFJFRTA4LmJvb3QKaW5kZXggM2I0MmI4Yi4uMjU2MWRhZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDguYm9vdAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOC5ib290CkBAIC0xICsxLDMgQEAKIHJjdXRvcnR1cmUudG9ydHVyZV90eXBlPXNjaGVkCityY3VwZGF0ZS5yY3Vfc2VsZl90ZXN0PTEKK3JjdXBkYXRlLnJjdV9zZWxmX3Rlc3Rfc2NoZWQ9MQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS9UUkVFMDkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOQppbmRleCBiN2E2MmE1Li42MDc2YjM2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOQorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L1RSRUUwOQpAQCAtMyw3ICszLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9bgogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KIENPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15CisjQ0hFQ0sjQ09ORklHX1BSRUVNUFRfUkNVPXkKIENPTkZJR19IWl9QRVJJT0RJQz1uCiBDT05GSUdfTk9fSFpfSURMRT15CiBDT05GSUdfTk9fSFpfRlVMTD1uCkBAIC0xNCw2ICsxNCw1IEBACiBDT05GSUdfUkNVX05PQ0JfQ1BVPW4KIENPTkZJR19ERUJVR19MT0NLX0FMTE9DPW4KIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89bgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRT1uCiBDT05GSUdfUkNVX0JPT1NUPW4KIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9DRkxJU1QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvQ0ZMSVNUCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODIyMzk0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9DRkxJU1QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1QMS1TLVQtTkgtU0QtU01QLUhQCi1QMi0yLXQtbmgtc2QtU01QLWhwCi1QMy0zLVQtbmgtU0QtU01QLWhwCi1QNC1BLXQtTkgtc2QtU01QLUhQCi1QNS1VLVQtTkgtc2QtU01QLWhwCi1OMS1TLVQtTkgtU0QtU01QLUhQCi1OMi0yLXQtbmgtc2QtU01QLWhwCi1OMy0zLVQtbmgtU0QtU01QLWhwCi1ONC1BLXQtTkgtc2QtU01QLUhQCi1ONS1VLVQtTkgtc2QtU01QLWhwCi1QVDEtbmgKLVBUMi1OSAotTlQxLW5oCi1OVDMtTkgKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL04xLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZWY4NzMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL04xLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjItMi10LW5oLXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmU0MTg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMi0yLXQtbmgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD00Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL04zLTMtVC1uaC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTAwZjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL04zLTMtVC1uaC1TRC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9ONC1BLXQtTkgtc2QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTZiNDQ1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9ONC1BLXQtTkgtc2QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL041LVUtVC1OSC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkOTI0Zi4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTjUtVS1ULU5ILXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL05UMS1uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2YzMTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL05UMS1uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNDSEVDSyNDT05GSUdfVElOWV9SQ1U9eQotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPW4KLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OVDMtTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvTlQzLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmQwMjM1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9OVDMtTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9eQotIwotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AxLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQwMmQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AxLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9OAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AyLTItdC1uaC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDItMi10LW5oLXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYzYjY2Ny4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDItMi10LW5oLXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AzLTMtVC1uaC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMzVlMTQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1AzLTMtVC1uaC1TRC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvUDQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QNC1BLXQtTkgtc2QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2NmNmE5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QNC1BLXQtTkgtc2QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QNS1VLVQtTkgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1A1LVUtVC1OSC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NWMwMDguLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1A1LVUtVC1OSC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9eQotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfT0JKRUNUUz15Ci1DT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1BUMS1uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMzYxYzMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1BUMS1uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLUNPTkZJR19USU5ZX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj1uCi0jCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1BUMi1OSCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjAuMC9QVDItTkgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YWJmYzMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL1BUMi1OSAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19USU5ZX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9eQotIwotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92MC4wL3Zlcl9mdW5jdGlvbnMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvdmVyX2Z1bmN0aW9ucy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjZTM3YS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YwLjAvdmVyX2Z1bmN0aW9ucy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jCi0jIEtlcm5lbC12ZXJzaW9uLWRlcGVuZGVudCBzaGVsbCBmdW5jdGlvbnMgZm9yIHRoZSByZXN0IG9mIHRoZSBzY3JpcHRzLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB5b3UgY2FuIGFjY2VzcyBpdCBvbmxpbmUgYXQKLSMgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbC4KLSMKLSMgQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMTMKLSMKLSMgQXV0aG9yczogUGF1bCBFLiBNY0tlbm5leSA8cGF1bG1ja0BsaW51eC52bmV0LmlibS5jb20+Ci0KLSMgcGVyX3ZlcnNpb25fYm9vdF9wYXJhbXMgYm9vdHBhcmFtLXN0cmluZyBjb25maWctZmlsZSBzZWNvbmRzCi0jCi0jIEFkZHMgcGVyLXZlcnNpb24gdG9ydHVyZS1tb2R1bGUgcGFyYW1ldGVycyB0byBrZXJuZWxzIHN1cHBvcnRpbmcgdGhlbS4KLSMgV2hpY2ggb2xkIGtlcm5lbHMgZG8gbm90LgotcGVyX3ZlcnNpb25fYm9vdF9wYXJhbXMgKCkgewotCWVjaG8JcmN1dG9ydHVyZS5zdGF0X2ludGVydmFsPTE1IFwKLQkJcmN1dG9ydHVyZS5zaHV0ZG93bl9zZWNzPSQzIFwKLQkJcmN1dG9ydHVyZS5yY3V0b3J0dXJlX3J1bm5hYmxlPTEgXAotCQlyY3V0b3J0dXJlLnRlc3Rfbm9faWRsZV9oej0xIFwKLQkJcmN1dG9ydHVyZS52ZXJib3NlPTEKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvQ0ZMSVNUIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9DRkxJU1QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNGNiYzY2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvQ0ZMSVNUCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotc3lzaWRsZVkuMjAxMy4wNi4xOWEKLXN5c2lkbGVOLjIwMTMuMDYuMTlhCi1QMS1TLVQtTkgtU0QtU01QLUhQCi1QMi0yLXQtbmgtc2QtU01QLWhwCi1QMy0zLVQtbmgtU0QtU01QLWhwCi1QNC1BLXQtTkgtc2QtU01QLUhQCi1QNS1VLVQtTkgtc2QtU01QLWhwCi1QNi0tLXQtbmgtU0Qtc21wLWhwCi1OMS1TLVQtTkgtU0QtU01QLUhQCi1OMi0yLXQtbmgtc2QtU01QLWhwCi1OMy0zLVQtbmgtU0QtU01QLWhwCi1ONC1BLXQtTkgtc2QtU01QLUhQCi1ONS1VLVQtTkgtc2QtU01QLWhwCi1QVDEtbmgKLVBUMi1OSAotTlQxLW5oCi1OVDMtTkgKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjEtUy1ULU5ILVNELVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjEtUy1ULU5ILVNELVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxZTExZC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL04xLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfRkFTVF9OT19IWj15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD04Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OMi0yLXQtbmgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmU0MTg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjItMi10LW5oLXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NAotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL04zLTMtVC1uaC1TRC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL04zLTMtVC1uaC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTAwZjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OMy0zLVQtbmgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9ONC1BLXQtTkgtc2QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9ONC1BLXQtTkgtc2QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTZiNDQ1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjQtQS10LU5ILXNkLVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjUtVS1ULU5ILXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkOTI0Zi4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL041LVUtVC1OSC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjYtLS10LW5oLVNELXNtcC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjYtLS10LW5oLVNELXNtcC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNjYzM2ZC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL042LS0tdC1uaC1TRC1zbXAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19OUl9DUFVTPTEKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9ONy00LVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9ONy00LVQtTkgtU0QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjY0MGNmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTjctNC1ULU5ILVNELVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTE2Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVT15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVX05PTkU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9aRVJPPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFVfQUxMPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL044LTItVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL044LTItVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NWRhMmQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OOC0yLVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MTQKLUNPTkZJR19OUl9DUFVTPTE2Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTlQxLW5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2YzMTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9OVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj1uCi0jCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL05UMy1OSCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTlQzLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmQwMjM1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvTlQzLU5ICisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI0NIRUNLI0NPTkZJR19USU5ZX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1AxLVMtVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1AxLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NDdjNDQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMS1TLVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfUkNVX0ZBU1RfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD04Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1AyLTItdC1uaC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1AyLTItdC1uaC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmM2I2NjcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMi0yLXQtbmgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD00Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDM1ZTE0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDMtMy1ULW5oLVNELVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX05PX0haPW4KLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NjZjZhOS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A0LUEtdC1OSC1zZC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNS1VLVQtTkgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNS1VLVQtTkgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTVjMDA4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDUtVS1ULU5ILXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD15Ci1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A2LS0tdC1uaC1TRC1zbXAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A2LS0tdC1uaC1TRC1zbXAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YzkxNzUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNi0tLXQtbmgtU0Qtc21wLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD1uCi1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A3LTQtVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A3LTQtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YThjNWIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz0xNgotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19SQ1VfTk9DQl9DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9OT05FPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFVfWkVSTz1uCi1DT05GSUdfUkNVX05PQ0JfQ1BVX0FMTD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfT0JKRUNUUz15Ci1DT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfU0xVQj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQLWFsbCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDctNC1ULU5ILVNELVNNUC1IUC1hbGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZWNlYmMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQLWFsbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9MgotQ09ORklHX05SX0NQVVM9MTYKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVPXkKLUNPTkZJR19SQ1VfTk9DQl9DUFVfTk9ORT15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVX1pFUk89bgotQ09ORklHX1JDVV9OT0NCX0NQVV9BTEw9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX09CSkVDVFM9eQotQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX1NMVUI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMTIvUDctNC1ULU5ILVNELVNNUC1IUC1ub25lIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQLW5vbmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZWNlYmMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLUhQLW5vbmUKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTE2Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVT15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVX05PTkU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9aRVJPPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFVfQUxMPW4KLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTPXkKLUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19TTFVCPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A3LTQtVC1OSC1TRC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1A3LTQtVC1OSC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4OGJjNzAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QNy00LVQtTkgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz0xNgotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFU9eQotQ09ORklHX1JDVV9OT0NCX0NQVV9OT05FPW4KLUNPTkZJR19SQ1VfTk9DQl9DUFVfWkVSTz15Ci1DT05GSUdfUkNVX05PQ0JfQ1BVX0FMTD1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfT0JKRUNUUz15Ci1DT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfU0xVQj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QVDEtbmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1BUMS1uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMzNjFjMy4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1BUMS1uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLUNPTkZJR19USU5ZX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfQk9PU1Q9eQotQ09ORklHX1JDVV9CT09TVF9QUklPPTIKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLSMKLUNPTkZJR19TTVA9bgotIwotQ09ORklHX0hPVFBMVUdfQ1BVPW4KLSMKLUNPTkZJR19OT19IWj1uCi0jCi1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4xMi9QVDItTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1BUMi1OSApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhYmZjMy4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjEyL1BUMi1OSAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19USU5ZX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9eQotIwotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotQ09ORklHX1BST1ZFX1JDVT15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL0NGTElTVCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9DRkxJU1QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjIzOTQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL0NGTElTVAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVAxLVMtVC1OSC1TRC1TTVAtSFAKLVAyLTItdC1uaC1zZC1TTVAtaHAKLVAzLTMtVC1uaC1TRC1TTVAtaHAKLVA0LUEtdC1OSC1zZC1TTVAtSFAKLVA1LVUtVC1OSC1zZC1TTVAtaHAKLU4xLVMtVC1OSC1TRC1TTVAtSFAKLU4yLTItdC1uaC1zZC1TTVAtaHAKLU4zLTMtVC1uaC1TRC1TTVAtaHAKLU40LUEtdC1OSC1zZC1TTVAtSFAKLU41LVUtVC1OSC1zZC1TTVAtaHAKLVBUMS1uaAotUFQyLU5ICi1OVDEtbmgKLU5UMy1OSApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL04xLVMtVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjEtUy1ULU5ILVNELVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxZTExZC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjEtUy1ULU5ILVNELVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9GQVNUX05PX0haPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjItMi10LW5oLXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmU0MTg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OMi0yLXQtbmgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD00Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL04zLTMtVC1uaC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTAwZjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL04zLTMtVC1uaC1TRC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9ONC1BLXQtTkgtc2QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTZiNDQ1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9ONC1BLXQtTkgtc2QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL041LVUtVC1OSC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkOTI0Zi4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTjUtVS1ULU5ILXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL05UMS1uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2YzMTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL05UMS1uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNDSEVDSyNDT05GSUdfVElOWV9SQ1U9eQotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPW4KLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OVDMtTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvTlQzLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmQwMjM1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9OVDMtTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9eQotIwotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1AxLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NDdjNDQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1AxLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19SQ1VfRkFTVF9OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMi0yLXQtbmgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1AyLTItdC1uaC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmM2I2NjcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1AyLTItdC1uaC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTQKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDMtMy1ULW5oLVNELVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDM1ZTE0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QMy0zLVQtbmgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL1A0LUEtdC1OSC1zZC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NjZjZhOS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDQtQS10LU5ILXNkLVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUDUtVS1ULU5ILXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QNS1VLVQtTkgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTVjMDA4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QNS1VLVQtTkgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX09CSkVDVFM9eQotQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QVDEtbmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUFQxLW5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzM2MWMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9bgotIwotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QVDItTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjMvUFQyLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGFiZmMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy9QVDItTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuMy92ZXJfZnVuY3Rpb25zLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL3Zlcl9mdW5jdGlvbnMuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZTU1NjkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My4zL3Zlcl9mdW5jdGlvbnMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jIS9iaW4vYmFzaAotIwotIyBLZXJuZWwtdmVyc2lvbi1kZXBlbmRlbnQgc2hlbGwgZnVuY3Rpb25zIGZvciB0aGUgcmVzdCBvZiB0aGUgc2NyaXB0cy4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgeW91IGNhbiBhY2Nlc3MgaXQgb25saW5lIGF0Ci0jIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWwuCi0jCi0jIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDEzCi0jCi0jIEF1dGhvcnM6IFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgotCi0jIHJjdXRvcnR1cmVfcGFyYW1fb25vZmYgYm9vdHBhcmFtLXN0cmluZyBjb25maWctZmlsZQotIwotIyBBZGRzIG9ub2ZmIHJjdXRvcnR1cmUgbW9kdWxlIHBhcmFtZXRlcnMgdG8ga2VybmVscyBoYXZpbmcgaXQuCi1yY3V0b3J0dXJlX3BhcmFtX29ub2ZmICgpIHsKLQlpZiAhIGJvb3RwYXJhbV9ob3RwbHVnX2NwdSAiJDEiICYmIGNvbmZpZ2ZyYWdfaG90cGx1Z19jcHUgIiQyIgotCXRoZW4KLQkJZWNobyBDUFUtaG90cGx1ZyBrZXJuZWwsIGFkZGluZyByY3V0b3J0dXJlIG9ub2ZmLiAxPiYyCi0JCWVjaG8gcmN1dG9ydHVyZS5vbm9mZl9pbnRlcnZhbD0zIHJjdXRvcnR1cmUub25vZmZfaG9sZG9mZj0zMAotCWZpCi19Ci0KLSMgcGVyX3ZlcnNpb25fYm9vdF9wYXJhbXMgYm9vdHBhcmFtLXN0cmluZyBjb25maWctZmlsZSBzZWNvbmRzCi0jCi0jIEFkZHMgcGVyLXZlcnNpb24gdG9ydHVyZS1tb2R1bGUgcGFyYW1ldGVycyB0byBrZXJuZWxzIHN1cHBvcnRpbmcgdGhlbS4KLXBlcl92ZXJzaW9uX2Jvb3RfcGFyYW1zICgpIHsKLQllY2hvICQxIGByY3V0b3J0dXJlX3BhcmFtX29ub2ZmICIkMSIgIiQyImAgXAotCQlyY3V0b3J0dXJlLnN0YXRfaW50ZXJ2YWw9MTUgXAotCQlyY3V0b3J0dXJlLnNodXRkb3duX3NlY3M9JDMgXAotCQlyY3V0b3J0dXJlLnJjdXRvcnR1cmVfcnVubmFibGU9MSBcCi0JCXJjdXRvcnR1cmUudGVzdF9ub19pZGxlX2h6PTEgXAotCQlyY3V0b3J0dXJlLnZlcmJvc2U9MQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L0NGTElTVCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9DRkxJU1QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjIzOTQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L0NGTElTVAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVAxLVMtVC1OSC1TRC1TTVAtSFAKLVAyLTItdC1uaC1zZC1TTVAtaHAKLVAzLTMtVC1uaC1TRC1TTVAtaHAKLVA0LUEtdC1OSC1zZC1TTVAtSFAKLVA1LVUtVC1OSC1zZC1TTVAtaHAKLU4xLVMtVC1OSC1TRC1TTVAtSFAKLU4yLTItdC1uaC1zZC1TTVAtaHAKLU4zLTMtVC1uaC1TRC1TTVAtaHAKLU40LUEtdC1OSC1zZC1TTVAtSFAKLU41LVUtVC1OSC1zZC1TTVAtaHAKLVBUMS1uaAotUFQyLU5ICi1OVDEtbmgKLU5UMy1OSApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L04xLVMtVC1OSC1TRC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjEtUy1ULU5ILVNELVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxZTExZC4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjEtUy1ULU5ILVNELVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX1JDVV9GQVNUX05PX0haPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD1uCi0jQ0hFQ0sjQ09ORklHX1RSRUVfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjItMi10LW5oLXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OMi0yLXQtbmgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmU0MTg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OMi0yLXQtbmgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD00Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLSNDSEVDSyNDT05GSUdfVFJFRV9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OMy0zLVQtbmgtU0QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L04zLTMtVC1uaC1TRC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMTAwZjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L04zLTMtVC1uaC1TRC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTIKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjQtQS10LU5ILXNkLVNNUC1IUCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9ONC1BLXQtTkgtc2QtU01QLUhQCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTZiNDQ1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9ONC1BLXQtTkgtc2QtU01QLUhQCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT1uCi1DT05GSUdfTk9fSFo9eQotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD02Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L041LVUtVC1OSC1zZC1TTVAtaHAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjUtVS1ULU5ILXNkLVNNUC1ocApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkOTI0Zi4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTjUtVS1ULU5ILXNkLVNNUC1ocAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotI0NIRUNLI0NPTkZJR19UUkVFX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L05UMS1uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OVDEtbmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2YzMTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L05UMS1uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNDSEVDSyNDT05GSUdfVElOWV9SQ1U9eQotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPW4KLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPW4KLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OVDMtTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvTlQzLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmQwMjM1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9OVDMtTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jQ0hFQ0sjQ09ORklHX1RJTllfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9eQotIwotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9bgotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMS1TLVQtTkgtU0QtU01QLUhQIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1AxLVMtVC1OSC1TRC1TTVAtSFAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NDdjNDQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1AxLVMtVC1OSC1TRC1TTVAtSFAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk89eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19SQ1VfRkFTVF9OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTgKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfUFJFRU1QVF9OT05FPW4KLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT1uCi1DT05GSUdfUFJFRU1QVD15Ci0jQ0hFQ0sjQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMi0yLXQtbmgtc2QtU01QLWhwIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1AyLTItdC1uaC1zZC1TTVAtaHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmM2I2NjcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1AyLTItdC1uaC1zZC1TTVAtaHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1DT05GSUdfUkNVX1RSQUNFPW4KLUNPTkZJR19OT19IWj1uCi1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTQKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPW4KLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDMtMy1ULW5oLVNELVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMy0zLVQtbmgtU0QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDM1ZTE0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QMy0zLVQtbmgtU0QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfTk9fSFo9bgotQ09ORklHX1NNUD15Ci1DT05GSUdfUkNVX0ZBTk9VVD0yCi1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfUkNVX0ZBTk9VVF9FWEFDVD1uCi1DT05GSUdfSE9UUExVR19DUFU9bgotQ09ORklHX1NVU1BFTkQ9bgotQ09ORklHX0hJQkVSTkFUSU9OPW4KLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1BSSU5US19USU1FPXkKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L1A0LUEtdC1OSC1zZC1TTVAtSFAgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDQtQS10LU5ILXNkLVNNUC1IUApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NjZjZhOS4uMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDQtQS10LU5ILXNkLVNNUC1IUAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLUNPTkZJR19SQ1VfVFJBQ0U9bgotQ09ORklHX05PX0haPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX1JDVV9GQU5PVVQ9NgotQ09ORklHX05SX0NQVVM9OAotQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1Q9bgotQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLSNDSEVDSyNDT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfUFJPVkVfUkNVPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUDUtVS1ULU5ILXNkLVNNUC1ocCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QNS1VLVQtTkgtc2QtU01QLWhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTVjMDA4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QNS1VLVQtTkgtc2QtU01QLWhwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotQ09ORklHX1JDVV9UUkFDRT15Ci1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfU01QPXkKLUNPTkZJR19SQ1VfRkFOT1VUPTYKLUNPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19SQ1VfRkFOT1VUX0VYQUNUPXkKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotI0NIRUNLI0NPTkZJR19UUkVFX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX09CSkVDVFM9eQotQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQ9eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1JDVV9CT09TVD15Ci1DT05GSUdfUkNVX0JPT1NUX1BSSU89MgotQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QVDEtbmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUFQxLW5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzM2MWMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QVDEtbmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX0JPT1NUPXkKLUNPTkZJR19SQ1VfQk9PU1RfUFJJTz0yCi1DT05GSUdfUkNVX1RSQUNFPXkKLUNPTkZJR19SQ1VfVE9SVFVSRV9URVNUPW0KLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19TVVNQRU5EPW4KLUNPTkZJR19ISUJFUk5BVElPTj1uCi0jCi1DT05GSUdfU01QPW4KLSMKLUNPTkZJR19IT1RQTFVHX0NQVT1uCi0jCi1DT05GSUdfTk9fSFo9bgotIwotQ09ORklHX1BSRUVNUFRfTk9ORT1uCi1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9bgotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QVDItTkggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2NvbmZpZ3MvcmN1L3YzLjUvUFQyLU5ICmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGFiZmMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS9QVDItTkgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1DT05GSUdfVElOWV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCi1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfU1VTUEVORD1uCi1DT05GSUdfSElCRVJOQVRJT049bgotIwotQ09ORklHX1NNUD1uCi0jCi1DT05GSUdfSE9UUExVR19DUFU9bgotIwotQ09ORklHX05PX0haPXkKLSMKLUNPTkZJR19QUkVFTVBUX05PTkU9bgotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPW4KLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19QUk9WRV9MT0NLSU5HPXkKLUNPTkZJR19QUk9WRV9SQ1U9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvY29uZmlncy9yY3UvdjMuNS92ZXJfZnVuY3Rpb25zLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L3Zlcl9mdW5jdGlvbnMuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NzdkOGQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9jb25maWdzL3JjdS92My41L3Zlcl9mdW5jdGlvbnMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jIS9iaW4vYmFzaAotIwotIyBLZXJuZWwtdmVyc2lvbi1kZXBlbmRlbnQgc2hlbGwgZnVuY3Rpb25zIGZvciB0aGUgcmVzdCBvZiB0aGUgc2NyaXB0cy4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgeW91IGNhbiBhY2Nlc3MgaXQgb25saW5lIGF0Ci0jIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWwuCi0jCi0jIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDEzCi0jCi0jIEF1dGhvcnM6IFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgotCi0jIHJjdXRvcnR1cmVfcGFyYW1fbl9iYXJyaWVyX2NicyBib290cGFyYW0tc3RyaW5nCi0jCi0jIEFkZHMgbl9iYXJyaWVyX2NicyByY3V0b3J0dXJlIG1vZHVsZSBwYXJhbWV0ZXIgdG8ga2VybmVscyBoYXZpbmcgaXQuCi1yY3V0b3J0dXJlX3BhcmFtX25fYmFycmllcl9jYnMgKCkgewotCWlmIGVjaG8gJDEgfCBncmVwIC1xICJyY3V0b3J0dXJlXC5uX2JhcnJpZXJfY2JzIgotCXRoZW4KLQkJOgotCWVsc2UKLQkJZWNobyByY3V0b3J0dXJlLm5fYmFycmllcl9jYnM9NAotCWZpCi19Ci0KLSMgcmN1dG9ydHVyZV9wYXJhbV9vbm9mZiBib290cGFyYW0tc3RyaW5nIGNvbmZpZy1maWxlCi0jCi0jIEFkZHMgb25vZmYgcmN1dG9ydHVyZSBtb2R1bGUgcGFyYW1ldGVycyB0byBrZXJuZWxzIGhhdmluZyBpdC4KLXJjdXRvcnR1cmVfcGFyYW1fb25vZmYgKCkgewotCWlmICEgYm9vdHBhcmFtX2hvdHBsdWdfY3B1ICIkMSIgJiYgY29uZmlnZnJhZ19ob3RwbHVnX2NwdSAiJDIiCi0JdGhlbgotCQllY2hvIENQVS1ob3RwbHVnIGtlcm5lbCwgYWRkaW5nIHJjdXRvcnR1cmUgb25vZmYuIDE+JjIKLQkJZWNobyByY3V0b3J0dXJlLm9ub2ZmX2ludGVydmFsPTMgcmN1dG9ydHVyZS5vbm9mZl9ob2xkb2ZmPTMwCi0JZmkKLX0KLQotIyBwZXJfdmVyc2lvbl9ib290X3BhcmFtcyBib290cGFyYW0tc3RyaW5nIGNvbmZpZy1maWxlIHNlY29uZHMKLSMKLSMgQWRkcyBwZXItdmVyc2lvbiB0b3J0dXJlLW1vZHVsZSBwYXJhbWV0ZXJzIHRvIGtlcm5lbHMgc3VwcG9ydGluZyB0aGVtLgotcGVyX3ZlcnNpb25fYm9vdF9wYXJhbXMgKCkgewotCWVjaG8gJDEgYHJjdXRvcnR1cmVfcGFyYW1fb25vZmYgIiQxIiAiJDIiYCBcCi0JCWByY3V0b3J0dXJlX3BhcmFtX25fYmFycmllcl9jYnMgIiQxImAgXAotCQlyY3V0b3J0dXJlLnN0YXRfaW50ZXJ2YWw9MTUgXAotCQlyY3V0b3J0dXJlLnNodXRkb3duX3NlY3M9JDMgXAotCQlyY3V0b3J0dXJlLnJjdXRvcnR1cmVfcnVubmFibGU9MSBcCi0JCXJjdXRvcnR1cmUudGVzdF9ub19pZGxlX2h6PTEgXAotCQlyY3V0b3J0dXJlLnZlcmJvc2U9MQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9kb2MvVElOWV9SQ1UudHh0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9kb2MvVElOWV9SQ1UudHh0CmluZGV4IDI4ZGI2N2IuLjllZjMzYTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvZG9jL1RJTllfUkNVLnR4dAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2RvYy9USU5ZX1JDVS50eHQKQEAgLTM0LDcgKzM0LDcgQEAKIENPTkZJR19QUkVFTVBUX1JDVQogQ09ORklHX1NNUAogQ09ORklHX1RJTllfUkNVCi1DT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorQ09ORklHX1BSRUVNUFRfUkNVCiBDT05GSUdfVFJFRV9SQ1UKIAogCUFsbCBmb3JjZWQgYnkgQ09ORklHX1RJTllfUkNVLgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9kb2MvVFJFRV9SQ1Uta2NvbmZpZy50eHQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2RvYy9UUkVFX1JDVS1rY29uZmlnLnR4dAppbmRleCAzZTU4OGRiLi5lYzAzYzg4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2RvYy9UUkVFX1JDVS1rY29uZmlnLnR4dAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2RvYy9UUkVFX1JDVS1rY29uZmlnLnR4dApAQCAtMSw1ICsxLDUgQEAKIFRoaXMgZG9jdW1lbnQgZ2l2ZXMgYSBicmllZiByYXRpb25hbGUgZm9yIHRoZSBUUkVFX1JDVS1yZWxhdGVkIHRlc3QKLWNhc2VzLCBhIGdyb3VwIHRoYXQgaW5jbHVkZXMgVFJFRV9QUkVFTVBUX1JDVS4KK2Nhc2VzLCBhIGdyb3VwIHRoYXQgaW5jbHVkZXMgUFJFRU1QVF9SQ1UuCiAKIAogS2NvbmZpZyBQYXJhbWV0ZXJzOgpAQCAtMTQsMTAgKzE0LDkgQEAKIENPTkZJR19QUkVFTVBUIC0tIERvIGhhbGYuICAoRmlyc3QgdGhyZWUgYW5kICM4LikKIENPTkZJR19QUk9WRV9MT0NLSU5HIC0tIERvIGFsbCBidXQgdHdvLCBjb3ZlcmluZyBDT05GSUdfUFJPVkVfUkNVIGFuZCBub3QuCiBDT05GSUdfUFJPVkVfUkNVIC0tIERvIGFsbCBidXQgb25lIHVuZGVyIENPTkZJR19QUk9WRV9MT0NLSU5HLgotQ09ORklHX1JDVV9CT09TVCAtLSBvbmUgb2YgVFJFRV9QUkVFTVBUX1JDVS4KLUNPTkZJR19SQ1VfQk9PU1RfUFJJTyAtLSBzZXQgdG8gMiBmb3IgX0JPT1NUIHRlc3RpbmcuCi1DT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPIC0tIGRvIG9uZSB3aXRoIGFuZCB3aXRob3V0IF9WRVJCT1NFLgotQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRSAtLSBkbyBvbmUgd2l0aCBhbmQgd2l0aG91dCBfSU5GTy4KK0NPTkZJR19SQ1VfQk9PU1QgLS0gb25lIG9mIFBSRUVNUFRfUkNVLgorQ09ORklHX1JDVV9LVEhSRUFEX1BSSU8gLS0gc2V0IHRvIDIgZm9yIF9CT09TVCB0ZXN0aW5nLgorQ09ORklHX1JDVV9DUFVfU1RBTExfSU5GTyAtLSBEbyBvbmUuCiBDT05GSUdfUkNVX0ZBTk9VVCAtLSBDb3ZlciBoaWVyYXJjaHkgYXMgY3VycmVudGx5LCBidXQgb3ZlcmxhcCB3aXRoIG90aGVycy4KIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIC0tIERvIG9uZS4KIENPTkZJR19SQ1VfRkFOT1VUX0xFQUYgLS0gRG8gb25lIG5vbi1kZWZhdWx0LgpAQCAtMjcsNyArMjYsNyBAQAogQ09ORklHX1JDVV9OT0NCX0NQVV9OT05FIC0tIERvIG9uZS4KIENPTkZJR19SQ1VfTk9DQl9DUFVfWkVSTyAtLSBEbyBvbmUuCiBDT05GSUdfUkNVX1RSQUNFIC0tIERvIGhhbGYuCi1DT05GSUdfU01QIC0tIE5lZWQgb25lICFTTVAgZm9yIFRSRUVfUFJFRU1QVF9SQ1UuCitDT05GSUdfU01QIC0tIE5lZWQgb25lICFTTVAgZm9yIFBSRUVNUFRfUkNVLgogUkNVLWJoOiBEbyBvbmUgd2l0aCBQUkVFTVBUIGFuZCBvbmUgd2l0aCAhUFJFRU1QVC4KIFJDVS1zY2hlZDogRG8gb25lIHdpdGggUFJFRU1QVCBidXQgbm90IEJPT1NULgogCkBAIC03Nyw3ICs3Niw3IEBACiAKIENPTkZJR19SQ1VfU1RBTExfQ09NTU9OCiAKLQlJbXBsaWVkIGJ5IFRSRUVfUkNVIGFuZCBUUkVFX1BSRUVNUFRfUkNVLgorCUltcGxpZWQgYnkgVFJFRV9SQ1UgYW5kIFBSRUVNUFRfUkNVLgogCiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVAogQ09ORklHX1JDVV9UT1JUVVJFX1RFU1RfUlVOTkFCTEUKQEAgLTg4LDcgKzg3LDcgQEAKIAogCVJlZHVuZGFudCB3aXRoIENPTkZJR19OT19IWl9GVUxMLgogCi1DT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorQ09ORklHX1BSRUVNUFRfUkNVCiBDT05GSUdfVFJFRV9SQ1UKIAogCVRoZXNlIGFyZSBjb250cm9sbGVkIGJ5IENPTkZJR19QUkVFTVBULgo=